@quake2ts/engine 0.0.805 → 0.0.807

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
- "use strict";var Quake2Engine=(()=>{var bp=Object.create;var Is=Object.defineProperty;var xp=Object.getOwnPropertyDescriptor;var vp=Object.getOwnPropertyNames;var _p=Object.getPrototypeOf,Sp=Object.prototype.hasOwnProperty;var wp=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Na=(t,e)=>{for(var r in e)Is(t,r,{get:e[r],enumerable:!0})},lf=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of vp(e))!Sp.call(t,i)&&i!==r&&Is(t,i,{get:()=>e[i],enumerable:!(n=xp(e,i))||n.enumerable});return t};var Mp=(t,e,r)=>(r=t!=null?bp(_p(t)):{},lf(e||!t||!t.__esModule?Is(r,"default",{value:t,enumerable:!0}):r,t)),Ap=t=>lf(Is({},"__esModule",{value:!0}),t);var $f=wp((K2,Yf)=>{"use strict";Yf.exports=Worker});var JS={};Na(JS,{ATTN_IDLE:()=>qc,ATTN_LOOP_NONE:()=>Yc,ATTN_NONE:()=>$a,ATTN_NORM:()=>$c,ATTN_STATIC:()=>Zc,AssetDependencyError:()=>pi,AssetDependencyTracker:()=>jo,AssetManager:()=>Bl,AssetPreviewGenerator:()=>Ec,AudioApi:()=>zi,AudioContextController:()=>Fl,AudioOcclusion:()=>Jo,AudioRegistry:()=>la,AudioRegistryError:()=>$o,AudioSystem:()=>Hl,BSP_SURFACE_FRAGMENT_SOURCE:()=>zd,BSP_SURFACE_VERTEX_SOURCE:()=>Dd,BSP_VERTEX_LAYOUT:()=>Id,BspLoader:()=>Ni,BspParseError:()=>se,BspSurfacePipeline:()=>fa,Camera:()=>ec,ClientConnection:()=>Tc,Command:()=>Ha,CommandRegistry:()=>Ci,ConfigStringRegistry:()=>Oi,ConnectionState:()=>Qu,Cvar:()=>qa,CvarRegistry:()=>ki,DemoAnalyzer:()=>Ba,DemoCameraMode:()=>$u,DemoClipper:()=>Ac,DemoEventType:()=>Yu,DemoPlaybackController:()=>Ms,DemoReader:()=>fr,DemoRecorder:()=>As,DemoValidator:()=>Mc,DynamicLightManager:()=>Wl,EngineHost:()=>Di,EngineRuntime:()=>Za,FileType:()=>qu,FixedTimestepLoop:()=>Yn,Framebuffer:()=>gi,IndexBuffer:()=>Qe,LruCache:()=>gn,MAX_SOUND_CHANNELS:()=>Ya,MD2_FRAGMENT_SHADER:()=>Wd,MD2_VERTEX_SHADER:()=>Gd,MD3_FRAGMENT_SHADER:()=>du,MD3_VERTEX_SHADER:()=>cu,MapAnalyzer:()=>Lc,Md2Loader:()=>Hi,Md2MeshBuffers:()=>ma,Md2ParseError:()=>qe,Md2Pipeline:()=>pa,Md3Loader:()=>Vi,Md3ModelMesh:()=>xa,Md3ParseError:()=>Yt,Md3Pipeline:()=>va,Md3SurfaceMesh:()=>is,MessageWriter:()=>wc,MusicSystem:()=>Vl,NetworkMessageParser:()=>ct,PARTICLE_FRAGMENT_SHADER:()=>fu,PARTICLE_VERTEX_SHADER:()=>uu,PROTOCOL_VERSION_RERELEASE:()=>Dr,PakArchive:()=>Ui,PakIndexStore:()=>Il,PakIngestionError:()=>pn,PakParseError:()=>Ie,PakValidationError:()=>Jn,PakValidator:()=>Ks,PakWriter:()=>Gs,ParticleRenderer:()=>Sa,ParticleSystem:()=>_a,PlaybackState:()=>Sc,RERELEASE_KNOWN_PAKS:()=>td,ResourceLoadTracker:()=>Ws,ResourceType:()=>ed,SKYBOX_FRAGMENT_SHADER:()=>Hd,SKYBOX_VERTEX_SHADER:()=>Nd,SOUND_FULLVOLUME:()=>Bi,SOUND_LOOP_ATTENUATE:()=>jc,ShaderProgram:()=>le,SkyboxPipeline:()=>ha,SoundChannel:()=>wr,SoundPrecache:()=>zl,SoundRegistry:()=>Dl,SpriteLoader:()=>Gi,SpriteParseError:()=>yn,SpriteRenderer:()=>wa,StreamingPakArchive:()=>Vs,Texture2D:()=>Je,TextureCache:()=>Wi,TextureCubeMap:()=>ca,TgaParseError:()=>Vr,U_ALPHA:()=>yr,U_ANGLE1:()=>xt,U_ANGLE2:()=>mt,U_ANGLE3:()=>pt,U_EFFECTS16:()=>Ge,U_EFFECTS8:()=>Ne,U_EVENT:()=>yt,U_FRAME16:()=>_t,U_FRAME8:()=>gt,U_INSTANCE_BITS:()=>_r,U_LOOP_ATTENUATION_HIGH:()=>un,U_LOOP_VOLUME:()=>Sr,U_MODEL:()=>vt,U_MODEL2:()=>St,U_MODEL3:()=>wt,U_MODEL4:()=>Mt,U_OLDORIGIN:()=>sr,U_OLD_FRAME_HIGH:()=>hn,U_ORIGIN1:()=>ft,U_ORIGIN2:()=>ht,U_ORIGIN3:()=>bt,U_OWNER_HIGH:()=>fn,U_REMOVE:()=>Xa,U_RENDERFX16:()=>Ve,U_RENDERFX8:()=>Ue,U_SCALE:()=>vr,U_SKIN16:()=>We,U_SKIN8:()=>He,U_SOLID:()=>Et,U_SOUND:()=>At,VertexArray:()=>Ee,VertexBuffer:()=>Ae,VirtualFileSystem:()=>Xs,advanceAnimation:()=>Vf,applyEntityDelta:()=>rp,applySurfaceState:()=>es,attenuationToDistanceMultiplier:()=>Fi,boxIntersectsFrustum:()=>yi,buildBspGeometry:()=>Rh,buildMd2Geometry:()=>Xd,buildMd2VertexData:()=>Kd,buildMd3SurfaceGeometry:()=>su,buildMd3VertexData:()=>lu,calculateMaxAudibleDistance:()=>Qn,calculatePakChecksum:()=>Ef,captureRenderTarget:()=>fp,computeFrameBlend:()=>Gf,computeSkyScroll:()=>Kl,createAnimationState:()=>Wf,createAudioGraph:()=>kl,createBspSurfaces:()=>Th,createEmptyEntityState:()=>kr,createEmptyProtocolPlayerState:()=>hr,createEngine:()=>QS,createEngineRuntime:()=>wf,createFaceLightmap:()=>$s,createHeadlessRenderTarget:()=>up,createInitialChannels:()=>Ol,createOcclusionResolver:()=>Mh,createProgramFromSources:()=>Lh,createRenderer:()=>Bm,createWebGLContext:()=>Ah,createWebGPUContext:()=>cp,decodeOgg:()=>Pl,deriveSurfaceRenderState:()=>Ud,detectFileType:()=>Zu,extractFrustumPlanes:()=>kn,filesToPakSources:()=>rd,findLeafForPoint:()=>bi,gatherVisibleFaces:()=>xi,groupMd2Animations:()=>Of,ingestPakFiles:()=>Cf,ingestPaks:()=>Ys,interpolateMd3Tag:()=>mm,interpolateVec3:()=>Xf,isBinaryFile:()=>ip,isTextFile:()=>ju,parseBsp:()=>ja,parseEntLump:()=>op,parseMd2:()=>nd,parseMd3:()=>id,parsePcx:()=>to,parseSprite:()=>ad,parseTga:()=>od,parseWal:()=>Zs,parseWalTexture:()=>Js,parseWav:()=>el,pcxToRgba:()=>js,pickChannel:()=>Ul,preparePcxTexture:()=>Qs,queryCapabilities:()=>dp,removeViewTranslation:()=>Xl,resolveLightStyles:()=>Od,serializeEntLump:()=>sp,spawnBfgExplosion:()=>Em,spawnBlasterImpact:()=>Am,spawnBlood:()=>ym,spawnBulletImpact:()=>pm,spawnExplosion:()=>gm,spawnMuzzleFlash:()=>xm,spawnRailTrail:()=>wm,spawnSparks:()=>Mm,spawnSplash:()=>_m,spawnSteam:()=>Sm,spawnTeleportFlash:()=>bm,spawnTrail:()=>vm,validateEntity:()=>lp,walToRgba:()=>sd,wireDropTarget:()=>Pf,wireFileInput:()=>If});var Ep=()=>typeof performance<"u"?performance.now():Date.now(),Lp=t=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,25)},Yn=class{constructor(e,r={}){this.callbacks=e;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let e=this.options.now(),r=this.lastTimeMs===void 0?0:e-this.lastTimeMs;this.lastTimeMs=e,this.advance(r,e),this.running&&this.options.schedule(this.tick)};let n=r.fixedDeltaMs??25,i=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:i,maxDeltaMs:r.maxDeltaMs??n*i,startTimeMs:r.startTimeMs,now:r.now??Ep,schedule:r.schedule??Lp}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(e){let r=(this.lastTimeMs??0)+e;this.lastTimeMs=r,this.advance(e,r)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,r){let n=Math.min(Math.max(e,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+n,this.options.fixedDeltaMs*this.options.maxSubSteps);let 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 a=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:a,nowMs:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var Ha=class{constructor(e,r,n){this.name=e,this.callback=r,this.description=n}execute(e){this.callback(e)}},Ci=class{constructor(){this.commands=new Map;this.history=[];this.historyLimit=64;this.autocompleteProviders=[]}register(e,r,n){let i=new Ha(e,r,n);return this.commands.set(e,i),i}registerCommand(e,r){this.register(e,r)}registerAutocompleteProvider(e){this.autocompleteProviders.push(e)}get(e){return this.commands.get(e)}execute(e){let r=e.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(e);if(n.length===0)return!1;let i=n[0],a=n.slice(1),o=this.get(i);return o?(o.execute(a),!0):(this.onConsoleOutput?.(`Unknown command "${i}"`),!1)}executeCommand(e){this.execute(e)}getHistory(){return[...this.history]}getSuggestions(e){let r=new Set;for(let n of this.commands.keys())n.startsWith(e)&&r.add(n);for(let n of this.autocompleteProviders){let i=n();for(let a of i)a.startsWith(e)&&r.add(a)}return Array.from(r).sort()}tokenize(e){let r=[],n="",i=!1;for(let a=0;a<e.length;a++){let o=e[a];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((e,r)=>e.name.localeCompare(r.name))}};var Tp=Object.defineProperty,Rp=(t,e)=>{for(var r in e)Tp(t,r,{get:e[r],enumerable:!0})},cf={x:0,y:0,z:0};var lw=Math.PI/180;function df(t,e){return{x:t.x-e.x,y:t.y-e.y,z:t.z-e.z}}function Cp(t,e){return{x:t.x*e,y:t.y*e,z:t.z*e}}function Pp(t,e){return t.x*e.x+t.y*e.y+t.z*e.z}function Ip(t){return Pp(t,t)}function Dc(t){return Math.sqrt(Ip(t))}function Hr(t){let e=Dc(t);return e===0?t:Cp(t,1/e)}var Bp=Math.PI/180,Fp=180/Math.PI,Pi=Bp,zc=Fp;var or=[[-.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]];var mr=624,kp=397,Dp=2567483615,zp=2147483648,Op=2147483647,Fc=4294967296,Up=class{constructor(t=5489){this.state=new Uint32Array(mr),this.index=mr,this.seed(t)}seed(t){this.state[0]=t>>>0;for(let e=1;e<mr;e++){let r=this.state[e-1]^this.state[e-1]>>>30,n=Math.imul(r>>>0,1812433253)+e;this.state[e]=n>>>0}this.index=mr}nextUint32(){this.index>=mr&&this.twist();let t=this.state[this.index++];return t^=t>>>11,t^=t<<7&2636928640,t^=t<<15&4022730752,t^=t>>>18,t>>>0}twist(){for(let t=0;t<mr;t++){let e=this.state[t]&zp|this.state[(t+1)%mr]&Op,r=this.state[(t+kp)%mr]^e>>>1;(e&1)!==0&&(r^=Dp),this.state[t]=r>>>0}this.index=0}getState(){return{index:this.index,state:Array.from(this.state)}}setState(t){if(t.state.length!==mr)throw new Error(`Expected ${mr} MT state values, received ${t.state.length}`);this.index=t.index,this.state=Uint32Array.from(t.state,e=>e>>>0)}},uf=class{constructor(t={}){this.mt=new Up(t.seed)}seed(t){this.mt.seed(t)}frandom(){return this.mt.nextUint32()/Fc}frandomRange(t,e){return t+(e-t)*this.frandom()}frandomMax(t){return this.frandomRange(0,t)}crandom(){return this.frandomRange(-1,1)}crandomOpen(){let t=Number.EPSILON;return this.frandomRange(-1+t,1)}irandomUint32(){return this.mt.nextUint32()}irandomRange(t,e){if(e-t<=1)return t;let r=e-t,n=Fc-Fc%r,i;do i=this.mt.nextUint32();while(i>=n);return t+i%r}irandom(t){return t<=0?0:this.irandomRange(0,t)}randomTimeRange(t,e){return e<=t?t:this.irandomRange(t,e)}randomTime(t){return this.irandom(t)}randomIndex(t){return this.irandom(t.length)}getState(){return{mt:this.mt.getState()}}setState(t){this.mt.setState(t.mt)}};function Np(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function Oc(t,e){let r=new Float32Array(16);for(let n=0;n<4;n+=1)for(let i=0;i<4;i+=1)r[i*4+n]=t[0+n]*e[i*4+0]+t[4+n]*e[i*4+1]+t[8+n]*e[i*4+2]+t[12+n]*e[i*4+3];return r}function ff(t,e){let r=e.x,n=e.y,i=e.z;return{x:t[0]*r+t[4]*n+t[8]*i+t[12],y:t[1]*r+t[5]*n+t[9]*i+t[13],z:t[2]*r+t[6]*n+t[10]*i+t[14]}}function hf(t,e){let r=Np();return r[0]=e[0].x,r[1]=e[0].y,r[2]=e[0].z,r[4]=e[1].x,r[5]=e[1].y,r[6]=e[1].z,r[8]=e[2].x,r[9]=e[2].y,r[10]=e[2].z,r[12]=t.x,r[13]=t.y,r[14]=t.z,r}var pr=1,dn=2;var Uc=8,Nc=16,Hp=32;var Vp=16384;var Bs=65536,mf=1<<17,Gp=1<<18,Wp=1<<19,Xp=1<<20,Kp=1<<21,Yp=1<<22,$p=1<<23,cw=1<<24,Fs=1<<25,qp=1<<26,dw=1<<27,uw=1<<28,fw=1<<29,ks=1<<30,hw=1<<31;var Ga=0;var Ds=4,Wa=8,zs=16,Os=32,pf=64;var mw=1<<25,pw=1<<28,gw=1<<29,yw=1<<30,bw=1<<31;var xw=pr|dn,vw=pr|Bs|dn|Fs|ks,_w=pr|Bs|dn,Sw=pr|mf|dn|Fs|ks,ww=Hp|Uc|Nc,Mw=pr|Nc|Uc,Zp=pr|Fs|ks|dn|qp,Aw=Gp|Wp|Xp|Kp|Yp|$p,Ew=pr|Uc|Nc|Fs|ks,Lw=pr|Bs|dn,Tw=pr|dn,Rw=pr|Bs|dn|mf,Cw=Zp|Vp;var Pw=Number.MAX_SAFE_INTEGER-1;var Us=(t=>(t[t.None=0]="None",t[t.Archive=1]="Archive",t[t.UserInfo=2]="UserInfo",t[t.ServerInfo=4]="ServerInfo",t[t.Latch=8]="Latch",t[t.Cheat=16]="Cheat",t))(Us||{});var Ns=256;var Hc=256,Vc=8192,Hs=2048,Gc=512,Wc=256,Xc=Ns*2,Kc=256,kc=32,Va=96;var J=(t=>(t[t.Name=0]="Name",t[t.CdTrack=1]="CdTrack",t[t.Sky=2]="Sky",t[t.SkyAxis=3]="SkyAxis",t[t.SkyRotate=4]="SkyRotate",t[t.StatusBar=5]="StatusBar",t[t.HealthBarName=55]="HealthBarName",t[t.CONFIG_N64_PHYSICS=56]="CONFIG_N64_PHYSICS",t[t.CONFIG_CTF_TEAMS=57]="CONFIG_CTF_TEAMS",t[t.CONFIG_COOP_RESPAWN_STRING=58]="CONFIG_COOP_RESPAWN_STRING",t[t.Story=54]="Story",t[t.AirAccel=59]="AirAccel",t[t.MaxClients=60]="MaxClients",t[t.MapChecksum=61]="MapChecksum",t[t.Models=62]="Models",t[t.Sounds=62+Vc]="Sounds",t[t.Images=t.Sounds+Hs]="Images",t[t.Lights=t.Images+Gc]="Lights",t[t.ShadowLights=t.Lights+Hc]="ShadowLights",t[t.Items=t.ShadowLights+Kc]="Items",t[t.Players=t.Items+Wc]="Players",t[t.PlayerSkins=t.Players]="PlayerSkins",t[t.General=t.Players+Ns]="General",t[t.WheelWeapons=t.General+Xc]="WheelWeapons",t[t.WheelAmmo=t.WheelWeapons+kc]="WheelAmmo",t[t.WheelPowerups=t.WheelAmmo+kc]="WheelPowerups",t[t.CdLoopCount=t.WheelPowerups+kc]="CdLoopCount",t[t.GameStyle=t.CdLoopCount+1]="GameStyle",t[t.MaxConfigStrings=t.GameStyle+1]="MaxConfigStrings",t))(J||{}),gf=J.MaxConfigStrings;function yf(t){return t>=5&&t<59?Va*(59-t):t>=J.General&&t<J.WheelWeapons?Va*(J.MaxConfigStrings-t):Va}var Iw=J.Sounds,Bw=J.Images,Fw=J.Lights,kw=J.Items,Dw=J.Players,zw=J.General,jp={};Rp(jp,{addReplayFrame:()=>tg,createReplaySession:()=>eg,deserializeReplay:()=>Jp,serializeReplay:()=>Qp});function Qp(t){return JSON.stringify(t,null,2)}function Jp(t){let e=JSON.parse(t);if(!e.metadata||!Array.isArray(e.frames))throw new Error("Invalid replay format: missing metadata or frames");return e}function eg(t,e){return{metadata:{map:t,date:new Date().toISOString(),version:"1.0",seed:e},frames:[]}}function tg(t,e,r,n){t.frames.push({serverFrame:r,cmd:e,timestamp:Date.now()-n})}var T=(t=>(t[t.bad=0]="bad",t[t.muzzleflash=1]="muzzleflash",t[t.muzzleflash2=2]="muzzleflash2",t[t.temp_entity=3]="temp_entity",t[t.layout=4]="layout",t[t.inventory=5]="inventory",t[t.nop=6]="nop",t[t.disconnect=7]="disconnect",t[t.reconnect=8]="reconnect",t[t.sound=9]="sound",t[t.print=10]="print",t[t.stufftext=11]="stufftext",t[t.serverdata=12]="serverdata",t[t.configstring=13]="configstring",t[t.spawnbaseline=14]="spawnbaseline",t[t.centerprint=15]="centerprint",t[t.download=16]="download",t[t.playerinfo=17]="playerinfo",t[t.packetentities=18]="packetentities",t[t.deltapacketentities=19]="deltapacketentities",t[t.frame=20]="frame",t[t.splitclient=21]="splitclient",t[t.configblast=22]="configblast",t[t.spawnbaselineblast=23]="spawnbaselineblast",t[t.level_restart=24]="level_restart",t[t.damage=25]="damage",t[t.locprint=26]="locprint",t[t.fog=27]="fog",t[t.waitingforplayers=28]="waitingforplayers",t[t.bot_chat=29]="bot_chat",t[t.poi=30]="poi",t[t.help_path=31]="help_path",t[t.muzzleflash3=32]="muzzleflash3",t[t.achievement=33]="achievement",t))(T||{}),qn=(t=>(t[t.bad=0]="bad",t[t.nop=1]="nop",t[t.move=2]="move",t[t.userinfo=3]="userinfo",t[t.stringcmd=4]="stringcmd",t))(qn||{}),D=(t=>(t[t.GUNSHOT=0]="GUNSHOT",t[t.BLOOD=1]="BLOOD",t[t.BLASTER=2]="BLASTER",t[t.RAILTRAIL=3]="RAILTRAIL",t[t.SHOTGUN=4]="SHOTGUN",t[t.EXPLOSION1=5]="EXPLOSION1",t[t.EXPLOSION2=6]="EXPLOSION2",t[t.ROCKET_EXPLOSION=7]="ROCKET_EXPLOSION",t[t.GRENADE_EXPLOSION=8]="GRENADE_EXPLOSION",t[t.SPARKS=9]="SPARKS",t[t.SPLASH=10]="SPLASH",t[t.BUBBLETRAIL=11]="BUBBLETRAIL",t[t.SCREEN_SPARKS=12]="SCREEN_SPARKS",t[t.SHIELD_SPARKS=13]="SHIELD_SPARKS",t[t.BULLET_SPARKS=14]="BULLET_SPARKS",t[t.LASER_SPARKS=15]="LASER_SPARKS",t[t.PARASITE_ATTACK=16]="PARASITE_ATTACK",t[t.ROCKET_EXPLOSION_WATER=17]="ROCKET_EXPLOSION_WATER",t[t.GRENADE_EXPLOSION_WATER=18]="GRENADE_EXPLOSION_WATER",t[t.MEDIC_CABLE_ATTACK=19]="MEDIC_CABLE_ATTACK",t[t.BFG_EXPLOSION=20]="BFG_EXPLOSION",t[t.BFG_BIGEXPLOSION=21]="BFG_BIGEXPLOSION",t[t.BOSSTPORT=22]="BOSSTPORT",t[t.BFG_LASER=23]="BFG_LASER",t[t.GRAPPLE_CABLE=24]="GRAPPLE_CABLE",t[t.WELDING_SPARKS=25]="WELDING_SPARKS",t[t.GREENBLOOD=26]="GREENBLOOD",t[t.BLUEHYPERBLASTER=27]="BLUEHYPERBLASTER",t[t.PLASMA_EXPLOSION=28]="PLASMA_EXPLOSION",t[t.TUNNEL_SPARKS=29]="TUNNEL_SPARKS",t[t.BLASTER2=30]="BLASTER2",t[t.RAILTRAIL2=31]="RAILTRAIL2",t[t.FLAME=32]="FLAME",t[t.LIGHTNING=33]="LIGHTNING",t[t.DEBUGTRAIL=34]="DEBUGTRAIL",t[t.PLAIN_EXPLOSION=35]="PLAIN_EXPLOSION",t[t.FLASHLIGHT=36]="FLASHLIGHT",t[t.FORCEWALL=37]="FORCEWALL",t[t.HEATBEAM=38]="HEATBEAM",t[t.MONSTER_HEATBEAM=39]="MONSTER_HEATBEAM",t[t.STEAM=40]="STEAM",t[t.BUBBLETRAIL2=41]="BUBBLETRAIL2",t[t.MOREBLOOD=42]="MOREBLOOD",t[t.HEATBEAM_SPARKS=43]="HEATBEAM_SPARKS",t[t.HEATBEAM_STEAM=44]="HEATBEAM_STEAM",t[t.CHAINFIST_SMOKE=45]="CHAINFIST_SMOKE",t[t.ELECTRIC_SPARKS=46]="ELECTRIC_SPARKS",t[t.TRACKER_EXPLOSION=47]="TRACKER_EXPLOSION",t[t.TELEPORT_EFFECT=48]="TELEPORT_EFFECT",t[t.DBALL_GOAL=49]="DBALL_GOAL",t[t.WIDOWBEAMOUT=50]="WIDOWBEAMOUT",t[t.NUKEBLAST=51]="NUKEBLAST",t[t.WIDOWSPLASH=52]="WIDOWSPLASH",t[t.EXPLOSION1_BIG=53]="EXPLOSION1_BIG",t[t.EXPLOSION1_NP=54]="EXPLOSION1_NP",t[t.FLECHETTE=55]="FLECHETTE",t[t.BLUEHYPERBLASTER_KEX=56]="BLUEHYPERBLASTER_KEX",t[t.BFG_ZAP=57]="BFG_ZAP",t[t.BERSERK_SLAM=58]="BERSERK_SLAM",t[t.GRAPPLE_CABLE_2=59]="GRAPPLE_CABLE_2",t[t.POWER_SPLASH=60]="POWER_SPLASH",t[t.LIGHTNING_BEAM=61]="LIGHTNING_BEAM",t[t.EXPLOSION1_NL=62]="EXPLOSION1_NL",t[t.EXPLOSION2_NL=63]="EXPLOSION2_NL",t))(D||{});var bf=64;var rg=12,ng=9,Ow=Math.ceil(rg*ng/16),ig=23,ag=2,Uw=Math.ceil(ig*ag/16);function xf(t,e){t.writeByte(e.msec),t.writeByte(e.buttons),t.writeAngle16(e.angles.x),t.writeAngle16(e.angles.y),t.writeAngle16(e.angles.z),t.writeShort(e.forwardmove),t.writeShort(e.sidemove),t.writeShort(e.upmove),t.writeByte(e.impulse),t.writeByte(0)}var og=[0,145,227,114,7,150,228,117,14,159,237,124,9,152,234,123,28,141,255,110,27,138,248,105,18,131,241,96,21,132,246,103,56,169,219,74,63,174,220,77,54,167,213,68,49,160,210,67,36,181,199,86,35,178,192,81,42,187,201,88,45,188,206,95,112,225,147,2,119,230,148,5,126,239,157,12,121,232,154,11,108,253,143,30,107,250,136,25,98,243,129,16,101,244,134,23,72,217,171,58,79,222,172,61,70,215,165,52,65,208,162,51,84,197,183,38,83,194,176,33,90,203,185,40,93,204,190,47,224,113,3,146,231,118,4,149,238,127,13,156,233,120,10,155,252,109,31,142,251,106,24,137,242,99,17,128,245,100,22,135,216,73,59,170,223,78,60,173,214,71,53,164,209,64,50,163,196,85,39,182,195,82,32,177,202,91,41,184,205,92,46,191,144,1,115,226,151,6,116,229,158,15,125,236,153,8,122,235,140,29,111,254,139,26,104,249,130,19,97,240,133,20,102,247,168,57,75,218,175,62,76,221,166,55,69,212,161,48,66,211,180,37,86,199,179,34,80,193,186,43,89,200,189,44,94,207];function vf(t){let e=0;for(let r=0;r<t.length;r++)e=og[(e^t[r])&255];return e}var ft=1,ht=2,mt=4,pt=8,gt=16,yt=32,Xa=64,gr=128,Zn=256,bt=512,xt=1024,vt=2048,Ue=4096,yr=8192,Ne=16384,br=32768,He=65536,_t=1<<17,Ve=1<<18,Ge=1<<19,St=1<<20,wt=1<<21,Mt=1<<22,xr=1<<23,sr=1<<24,We=1<<25,At=1<<26,Et=1<<27,vr=1<<28,_r=1<<29,Sr=1<<30,Ii=-2147483648,un=1,fn=2,hn=4;var mn=class{constructor(t){t instanceof Uint8Array?this.view=new DataView(t.buffer,t.byteOffset,t.byteLength):this.view=new DataView(t),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(t){if(t<0||t>this.length)throw new Error(`Seek out of bounds: ${t} (length: ${this.length})`);this.offset=t}setReadPosition(t){this.seek(t)}hasMore(){return this.offset<this.length}hasBytes(t){return this.offset+t<=this.length}readChar(){let t=this.view.getInt8(this.offset);return this.offset+=1,t}readByte(){let t=this.view.getUint8(this.offset);return this.offset+=1,t}readShort(){let t=this.view.getInt16(this.offset,!0);return this.offset+=2,t}readUShort(){let t=this.view.getUint16(this.offset,!0);return this.offset+=2,t}readLong(){let t=this.view.getInt32(this.offset,!0);return this.offset+=4,t}readULong(){let t=this.view.getUint32(this.offset,!0);return this.offset+=4,t}readFloat(){let t=this.view.getFloat32(this.offset,!0);return this.offset+=4,t}readString(){let t="";for(;this.offset<this.length;){let e=this.readChar();if(e===-1||e===0)break;t+=String.fromCharCode(e)}return t}readStringLine(){let t="";for(;this.offset<this.length;){let e=this.readChar();if(e===-1||e===0||e===10)break;t+=String.fromCharCode(e)}return t}readCoord(){return this.readShort()*(1/8)}readAngle(){return this.readChar()*(360/256)}readAngle16(){return this.readShort()*360/65536}readData(t){if(this.offset+t>this.length)throw new Error(`Read out of bounds: ${this.offset+t} (length: ${this.length})`);let e=new Uint8Array(this.view.buffer,this.view.byteOffset+this.offset,t);return this.offset+=t,new Uint8Array(e)}readPos(t){t.x=this.readCoord(),t.y=this.readCoord(),t.z=this.readCoord()}readDir(t){let e=this.readByte();if(e>=162){t.x=0,t.y=0,t.z=0;return}let r=or[e];t.x=r[0],t.y=r[1],t.z=r[2]}},jn=class{constructor(t=1400){typeof t=="number"?(this.buffer=new Uint8Array(t),this.fixed=!1):(this.buffer=t,this.fixed=!0),this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength),this.offset=0}ensureSpace(t){if(this.offset+t>this.buffer.byteLength){if(this.fixed)throw new Error(`Buffer overflow: capacity ${this.buffer.byteLength}, needed ${this.offset+t}`);let e=Math.max(this.buffer.byteLength*2,this.offset+t),r=new Uint8Array(e);r.set(this.buffer),this.buffer=r,this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength)}}writeByte(t){this.ensureSpace(1),this.view.setUint8(this.offset,t),this.offset+=1}writeBytes(t){this.ensureSpace(t.byteLength),this.buffer.set(t,this.offset),this.offset+=t.byteLength}writeChar(t){this.ensureSpace(1),this.view.setInt8(this.offset,t),this.offset+=1}writeShort(t){this.ensureSpace(2),this.view.setInt16(this.offset,t,!0),this.offset+=2}writeLong(t){this.ensureSpace(4),this.view.setInt32(this.offset,t,!0),this.offset+=4}writeFloat(t){this.ensureSpace(4),this.view.setFloat32(this.offset,t,!0),this.offset+=4}writeString(t){let e=t.length;this.ensureSpace(e+1);for(let r=0;r<e;r++)this.view.setUint8(this.offset+r,t.charCodeAt(r));this.view.setUint8(this.offset+e,0),this.offset+=e+1}writeCoord(t){this.writeShort(Math.trunc(t*8))}writeAngle(t){this.writeByte(Math.trunc(t*256/360)&255)}writeAngle16(t){this.writeShort(Math.trunc(t*65536/360)&65535)}writePos(t){this.writeCoord(t.x),this.writeCoord(t.y),this.writeCoord(t.z)}writeDir(t){let e=-1,r=0;if(t.x===0&&t.y===0&&t.z===0){this.writeByte(0);return}for(let n=0;n<or.length;n++){let i=or[n],a=t.x*i[0]+t.y*i[1]+t.z*i[2];a>e&&(e=a,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}},Ka=class{constructor(t=1024){this.buffer=new Uint8Array(t),this.view=new DataView(this.buffer.buffer),this.offset=0}ensureCapacity(t){if(this.offset+t>this.buffer.length){let e=Math.max(this.buffer.length*2,this.offset+t),r=new Uint8Array(e);r.set(this.buffer),this.buffer=r,this.view=new DataView(this.buffer.buffer)}}getData(){return this.buffer.slice(0,this.offset)}writeByte(t){this.ensureCapacity(1),this.view.setUint8(this.offset,t),this.offset+=1}writeChar(t){this.ensureCapacity(1),this.view.setInt8(this.offset,t),this.offset+=1}writeShort(t){this.ensureCapacity(2),this.view.setInt16(this.offset,t,!0),this.offset+=2}writeUShort(t){this.ensureCapacity(2),this.view.setUint16(this.offset,t,!0),this.offset+=2}writeLong(t){this.ensureCapacity(4),this.view.setInt32(this.offset,t,!0),this.offset+=4}writeFloat(t){this.ensureCapacity(4),this.view.setFloat32(this.offset,t,!0),this.offset+=4}writeString(t){let e=t.length+1;this.ensureCapacity(e);for(let r=0;r<t.length;r++)this.view.setUint8(this.offset+r,t.charCodeAt(r));this.view.setUint8(this.offset+t.length,0),this.offset+=e}writeData(t){this.ensureCapacity(t.length),this.buffer.set(t,this.offset),this.offset+=t.length}writeCoord(t){this.writeShort(Math.round(t*8))}writeAngle(t){this.writeByte(Math.round(t*256/360)&255)}writeAngle16(t){this.writeShort(Math.round(t*65536/360))}writeDir(t,e,r){let n=0,i=-999999,a=Math.sqrt(t*t+e*e+r*r);if(a>0){t/=a,e/=a,r/=a;for(let o=0;o<162;o++){let s=t*or[o][0]+e*or[o][1]+r*or[o][2];s>i&&(i=s,n=o)}}this.writeByte(n)}},$n=class $e{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 jn($e.MAX_RELIABLE_BUFFER);let e=Date.now();this.lastReceived=e,this.lastSent=e,this.qport=Math.floor(Math.random()*65536)}setup(e,r=null){this.qport=e,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(e){this.outgoingSequence++,this.lastSent=Date.now();let r=0,n=!1,i=0;this.reliableLength>0&&(this.reliableLength>$e.FRAGMENT_SIZE?(n=!0,this.fragmentSendOffset>=this.reliableLength&&(this.fragmentSendOffset=0),r=this.reliableLength-this.fragmentSendOffset,r>$e.FRAGMENT_SIZE&&(r=$e.FRAGMENT_SIZE),i=this.fragmentSendOffset,this.fragmentSendOffset+=r):r=this.reliableLength);let a=$e.PACKET_HEADER,o=r>0?2+(n?8:0):0,s=e?e.length:0;a+o+r+s>$e.MAX_MSGLEN&&(s=$e.MAX_MSGLEN-a-o-r,s<0&&(s=0));let c=new ArrayBuffer(a+o+r+s),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=a;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(e&&s>0){let m=e.slice(0,s);d.set(m,h)}return d}process(e){if(e.length<4)return null;this.lastReceived=Date.now();let r=new DataView(e.buffer,e.byteOffset,e.byteLength),n=r.getUint32(0,!0);if(n===4294967295)return e.subarray(4);if(e.length<$e.PACKET_HEADER)return null;let i=r.getUint32(4,!0),a=r.getUint16(8,!0);if(this.qport!==a)return null;let o=n&1073741823;if((o-this.incomingSequence|0)<=0)return null;this.incomingSequence=o;let s=i&2147483647,c=(i&2147483648)!==0;if(s>this.incomingAcknowledged&&(this.incomingAcknowledged=s),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=$e.PACKET_HEADER,u=null;if(l){if(f+2>e.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>e.byteLength)return null;let y=r.getUint32(f,!0);f+=4;let v=r.getUint32(f,!0);if(f+=4,v>$e.MAX_RELIABLE_BUFFER)return console.warn(`NetChan: received invalid fragment total ${v} > ${$e.MAX_RELIABLE_BUFFER}`),null;if((!this.fragmentBuffer||this.fragmentBuffer.length!==v)&&(this.fragmentBuffer=new Uint8Array(v),this.fragmentLength=v,this.fragmentReceived=0),f+m>e.byteLength)return null;let x=e.subarray(f,f+m);y===this.fragmentReceived&&y+m<=v&&(this.fragmentBuffer.set(x,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>e.byteLength)return null;u=e.slice(f,f+m)}f+=m}let h=e.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(e){if(this.reliableLength+1>$e.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeByte(e),this.reliableLength++}writeReliableShort(e){if(this.reliableLength+2>$e.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeShort(e),this.reliableLength+=2}writeReliableLong(e){if(this.reliableLength+4>$e.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeLong(e),this.reliableLength+=4}writeReliableString(e){let r=e.length+1;if(this.reliableLength+r>$e.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeString(e),this.reliableLength+=r}getReliableData(){return this.reliableLength===0?new Uint8Array(0):this.reliableMessage.getBuffer().subarray(0,this.reliableLength)}needsKeepalive(e){return e-this.lastSent>1e3}isTimedOut(e,r=3e4){return e-this.lastReceived>r}};$n.MAX_MSGLEN=1400;$n.FRAGMENT_SIZE=1024;$n.PACKET_HEADER=10;$n.HEADER_OVERHEAD=$n.PACKET_HEADER+2;$n.MAX_RELIABLE_BUFFER=262144;var _f=$n;var Sf=(t=>(t[t.Bullets=0]="Bullets",t[t.Shells=1]="Shells",t[t.Rockets=2]="Rockets",t[t.Grenades=3]="Grenades",t[t.Cells=4]="Cells",t[t.Slugs=5]="Slugs",t[t.MagSlugs=6]="MagSlugs",t[t.Trap=7]="Trap",t[t.Flechettes=8]="Flechettes",t[t.Tesla=9]="Tesla",t[t.Disruptor=10]="Disruptor",t[t.Prox=11]="Prox",t[t.Nuke=12]="Nuke",t[t.Rounds=13]="Rounds",t))(Sf||{}),Nw=Object.keys(Sf).length/2;var Ya=32,wr=(t=>(t[t.Auto=0]="Auto",t[t.Weapon=1]="Weapon",t[t.Voice=2]="Voice",t[t.Item=3]="Item",t[t.Body=4]="Body",t[t.Aux=5]="Aux",t[t.Footstep=6]="Footstep",t[t.Aux3=7]="Aux3",t[t.NoPhsAdd=8]="NoPhsAdd",t[t.Reliable=16]="Reliable",t[t.ForcePos=32]="ForcePos",t))(wr||{}),Yc=-1,$a=0,$c=1,qc=2,Zc=3,Bi=80,jc=.003;function Fi(t){return t*.001}function Qn(t){let e=Fi(t);return e<=0?Number.POSITIVE_INFINITY:Bi+1/e}var qa=class{constructor({name:e,defaultValue:r,description:n,flags:i=Us.None,onChange:a}){this.modifiedCount=0;this.name=e,this.defaultValue=r,this.description=n,this.flags=i,this._value=r,this.onChange=a}get string(){return this._value}getString(){return this.string}get number(){return Number(this._value)}getFloat(){return this.number}get integer(){return Math.trunc(this.number)}getInt(){return this.integer}get boolean(){return!!this.integer}getBoolean(){return this.boolean}set(e){if(this.flags&Us.Latch){if(e===this._value){this.latched=void 0;return}if(this.latched===e)return;this.latched!==e&&(this.latched=e);return}this.apply(e)}reset(){this.latched=void 0,this.apply(this.defaultValue)}applyLatched(){if(this.latched===void 0)return!1;let e=this.latched;return this.latched=void 0,e===this._value?!1:(this.apply(e),!0)}apply(e){if(this._value===e)return;let r=this._value;this._value=e,this.modifiedCount+=1,this.onChange?.(this,r)}},ki=class{constructor(){this.cvars=new Map}register(e){let r=this.cvars.get(e.name);if(r)return r;let n=e.onChange,i=(o,s)=>{n?.(o,s),this.onCvarChange?.(o.name,o.string)},a=new qa({...e,onChange:i});return this.cvars.set(e.name,a),a}get(e){return this.cvars.get(e)}getCvar(e){return this.get(e)}setValue(e,r){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(r),n}setCvar(e,r){this.setValue(e,r)}resetAll(){for(let e of this.cvars.values())e.reset()}applyLatched(){let e=!1;for(let r of this.cvars.values())e=r.applyLatched()||e;return e}list(){return[...this.cvars.values()].sort((e,r)=>e.name.localeCompare(r.name))}listCvars(){return this.list().map(e=>({name:e.name,value:e.string,defaultValue:e.defaultValue,flags:e.flags,description:e.description}))}};var Di=class{constructor(e,r,n={}){this.game=e;this.client=r;this.started=!1;this.paused_=!1;this.commands=new Ci;this.cvars=new ki;this.stepSimulation=e=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(e,this.latestCommand)};this.renderClient=e=>{this.client&&(this.latestCommand=this.client.render({...e,previous:this.previousFrame,latest:this.latestFrame}))};let i=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??i,this.loop=new Yn({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs}),this.commands.registerAutocompleteProvider(()=>this.cvars.list().map(a=>a.name))}start(){if(!this.started){try{this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame)}catch(e){throw this.game.shutdown(),this.client?.shutdown(),e}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(e){this.paused_=e,e?this.loop.stop():this.started&&this.loop.start()}get paused(){return this.paused_}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};var zi=class{constructor(e){this.registry=e.registry,this.system=e.system,this.music=e.music,this.client=e.client}soundindex(e){return this.registry.registerName(e)}sound(e,r,n,i,a,o){this.system.play({entity:e,channel:r,soundIndex:n,volume:i,attenuation:a,timeOffsetMs:o}),this.triggerSubtitle(n)}positioned_sound(e,r,n,i){this.system.positionedSound(e,r,n,i),this.triggerSubtitle(r)}loop_sound(e,r,n,i,a){let o=this.system.play({entity:e,channel:r,soundIndex:n,volume:i,attenuation:a,looping:!0});return this.triggerSubtitle(n),o}stop_entity_sounds(e){this.system.stopEntitySounds(e)}setPlaybackRate(e){this.system.setPlaybackRate(e)}set_listener(e){this.system.setListener(e)}play_music(e,r=!0){return this.music?this.music.play(e,{loop:r}):Promise.resolve()}play_track(e,r=!0){return this.music?this.music.playTrack(e):Promise.resolve()}pause_music(){this.music?.pause()}resume_music(){return this.music?.resume()??Promise.resolve()}stop_music(){this.music?.stop()}set_music_volume(e){this.music?.setVolume(e)}play_ambient(e,r,n){this.system.ambientSound(e,r,n),this.triggerSubtitle(r)}play_channel(e){this.system.play({...e}),this.triggerSubtitle(e.soundIndex)}triggerSubtitle(e){if(!this.client)return;let r=this.registry.getName(e);if(!r)return;let n=r.match(/\[(.*?)\]/);n&&this.client.showSubtitle(n[1],r)}};var Za=class{constructor(e,r){this.engine=e;this.host=r;this.started=!1}start(){this.started||(this.engine.init(),this.host.start(),this.started=!0)}stop(){this.started&&(this.host.stop(),this.engine.shutdown(),this.started=!1)}pump(e){this.host.pump(e)}getLatestFrame(){return this.host.getLatestFrame()}isRunning(){return this.started&&this.host.isRunning()}};function wf(t,e,r,n,i){let a=new zi({...n,client:r}),o=new Di(e,r,i);return{runtime:new Za(t,o),audio:a}}function sg(t){if(t<0||t>=J.MaxConfigStrings)throw new RangeError(`Configstring index ${t} is out of range (0-${J.MaxConfigStrings-1})`)}function Mf(t,e){let r=yf(t);if(e.length>r)throw new RangeError(`Configstring ${t} exceeds maximum length (${e.length} > ${r}); limit is ${Va} chars per slot`)}var Oi=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(e,r){return sg(e),Mf(e,r),this.values.set(e,r),e}get(e){return this.values.get(e)}getName(e){return this.get(e)}getAll(){let e=new Array(gf).fill("");for(let[r,n]of this.values.entries())e[r]=n;return e}modelIndex(e){return this.register(e,J.Models,Vc,"modelCursor")}soundIndex(e){return this.register(e,J.Sounds,Hs,"soundCursor")}findSoundIndex(e){for(let r=J.Sounds;r<J.Sounds+Hs;r+=1)if(this.values.get(r)===e)return r}imageIndex(e){return this.register(e,J.Images,Gc,"imageCursor")}lightIndex(e){return this.register(e,J.Lights,Hc,"lightCursor")}shadowLightIndex(e){return this.register(e,J.ShadowLights,Kc,"shadowLightCursor")}itemIndex(e){return this.register(e,J.Items,Wc,"itemCursor")}playerSkinIndex(e){return this.register(e,J.PlayerSkins,Ns,"playerSkinCursor")}generalIndex(e){return this.register(e,J.General,Xc,"generalCursor")}register(e,r,n,i){for(let s=r;s<r+n;s+=1)if(this.values.get(s)===e)return s;let a=this[i],o=r+n;if(a>=o)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return Mf(a,e),this.values.set(a,e),this[i]=a+1,a}};var lg="PACK";function cg(t,e,r){let n=[];for(let i=0;i<r;i+=1){let a=t.getUint8(e+i);if(a===0)break;n.push(a)}return String.fromCharCode(...n)}function _e(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function dg(){let t=new Uint32Array(256);for(let e=0;e<256;e+=1){let r=e;for(let n=0;n<8;n+=1)r=(r&1)!==0?3988292384^r>>>1:r>>>1;t[e]=r>>>0}return t}var ug=dg();function Af(t){let e=4294967295;for(let r=0;r<t.length;r+=1){let n=t[r];e=ug[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var Ie=class extends Error{},Ui=class t{constructor(e,r,n,i){this.name=e;this.buffer=r;this.entries=new Map(n.map(a=>[a.name,a])),this.checksum=i,this.size=r.byteLength}static fromArrayBuffer(e,r){let n=new DataView(r);if(r.byteLength<12)throw new Ie("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!==lg)throw new Ie(`Invalid PAK header magic: ${i}`);let a=n.getInt32(4,!0),o=n.getInt32(8,!0);if(a<12)throw new Ie(`Invalid directory offset: ${a}`);if(o<0||o%64!==0)throw new Ie(`Invalid directory length: ${o}`);if(a+o>r.byteLength)throw new Ie("Directory exceeds buffer length");let c=o/64,l=[],d=new Map;for(let f=0;f<c;f+=1){let u=a+f*64,h=cg(n,u,56),m=_e(h),g=n.getInt32(u+56,!0),p=n.getInt32(u+60,!0);if(g<0||p<0||g+p>r.byteLength)throw new Ie(`Invalid entry bounds for ${h||"<unnamed>"} (offset=${g}, length=${p})`);if(!m)throw new Ie(`Entry ${f} has an empty name`);let y={name:m,offset:g,length:p};d.set(m,y)}return l.push(...d.values()),new t(e,r,l,Af(new Uint8Array(r)))}getEntry(e){return this.entries.get(_e(e))}listEntries(){return Array.from(this.entries.values())}list(){return Array.from(this.entries.keys())}readFile(e){let r=this.getEntry(e);if(!r)throw new Ie(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,r.offset,r.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function Ef(t){return Af(new Uint8Array(t))}var fg="PACK",Lf=12,Qc=64;function Tf(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}var Vs=class{constructor(e){this.source=e;this.entries=null}async readDirectory(){if(this.entries)return Array.from(this.entries.values());let e=await this.readChunk(0,Lf),r=new DataView(e),n=String.fromCharCode(r.getUint8(0),r.getUint8(1),r.getUint8(2),r.getUint8(3));if(n!==fg)throw new Ie(`Invalid PAK header magic: ${n}`);let i=r.getInt32(4,!0),a=r.getInt32(8,!0);if(i<Lf)throw new Ie(`Invalid directory offset: ${i}`);if(a<0||a%Qc!==0)throw new Ie(`Invalid directory length: ${a}`);let o=await this.readChunk(i,a),s=new DataView(o),c=a/Qc,l=new Map;for(let d=0;d<c;d++){let f=d*Qc,u=this.readCString(s,f,56),h=Tf(u),m=s.getInt32(f+56,!0),g=s.getInt32(f+60,!0);m<0||g<0||m+g>this.source.size,h&&l.set(h,{name:h,offset:m,length:g})}return this.entries=l,Array.from(l.values())}async readFile(e){let r=await this.getEntry(e);if(!r)throw new Ie(`File not found in PAK: ${e}`);return this.source.slice(r.offset,r.offset+r.length).stream()}async getFileBlob(e){let r=await this.getEntry(e);if(!r)throw new Ie(`File not found in PAK: ${e}`);return this.source.slice(r.offset,r.offset+r.length)}async getEntry(e){return this.entries||await this.readDirectory(),this.entries.get(Tf(e))}async readChunk(e,r){let n=this.source.slice(e,e+r);return"arrayBuffer"in n?await n.arrayBuffer():new Response(n).arrayBuffer()}readCString(e,r,n){let i=[];for(let a=0;a<n;a+=1){let o=e.getUint8(r+a);if(o===0)break;i.push(o)}return String.fromCharCode(...i)}};var Jc=12,Rf=64,Gs=class t{constructor(){this.entries=new Map}addFile(e,r){let n=_e(e);if(n.length>56)throw new Error(`Path too long: '${n}' (max 56 chars)`);this.entries.set(n,r)}removeFile(e){return this.entries.delete(_e(e))}build(){let e=0;for(let u of this.entries.values())e+=u.byteLength;let r=this.entries.size*Rf,n=Jc+e+r,i=new Uint8Array(n),a=new DataView(i.buffer);a.setUint8(0,80),a.setUint8(1,65),a.setUint8(2,67),a.setUint8(3,75);let o=Jc+e;a.setInt32(4,o,!0),a.setInt32(8,r,!0);let s=Jc,c=new Map,l=Array.from(this.entries.keys()).sort();for(let u of l){let h=this.entries.get(u);c.set(u,s),i.set(h,s),s+=h.byteLength}let d=o,f=new TextEncoder;for(let u of l){let h=this.entries.get(u),m=f.encode(u);if(m.length>56)throw new Error(`Path too long after encoding: ${u}`);for(let g=0;g<56;g++)g<m.length?a.setUint8(d+g,m[g]):a.setUint8(d+g,0);a.setInt32(d+56,c.get(u),!0),a.setInt32(d+60,h.byteLength,!0),d+=Rf}return i}static buildFromEntries(e){let r=new t;for(let[n,i]of e)r.addFile(n,i);return r.build()}};var ed=(o=>(o.Texture="texture",o.Sound="sound",o.Model="model",o.Map="map",o.Sprite="sprite",o.ConfigString="configString",o))(ed||{}),Ws=class{constructor(){this.tracking=!1;this.entries=[];this.currentFrame=0;this.currentTime=0}startTracking(){this.tracking=!0,this.entries=[]}stopTracking(){this.tracking=!1;let e={byFrame:new Map,byTime:new Map,uniqueResources:new Map};for(let r of this.entries){e.byFrame.has(r.frame)||e.byFrame.set(r.frame,[]),e.byFrame.get(r.frame).push(r),e.byTime.has(r.timestamp)||e.byTime.set(r.timestamp,[]),e.byTime.get(r.timestamp).push(r);let n=`${r.type}:${r.path}`;e.uniqueResources.has(n)||e.uniqueResources.set(n,r)}return e}recordLoad(e,r,n,i){this.tracking&&this.entries.push({type:e,path:r,timestamp:this.currentTime,frame:this.currentFrame,size:n,pakSource:i})}setCurrentFrame(e){this.currentFrame=e}setCurrentTime(e){this.currentTime=e}};var Xs=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(r=>this.mountPak(r))}mountPak(e,r=0){let n=this.mounts.findIndex(i=>i.pak===e);n!==-1&&this.mounts.splice(n,1),this.mounts.push({pak:e,priority:r}),this.mounts.sort((i,a)=>a.priority-i.priority);for(let i of e.listEntries()){let a=_e(i.name),o={archive:e,entry:i,priority:r};this.files.has(a)||this.files.set(a,[]);let s=this.files.get(a),c=s.findIndex(l=>l.archive===e);c!==-1&&s.splice(c,1),s.unshift(o),s.sort((l,d)=>d.priority-l.priority)}return e}setPriority(e,r){this.mountPak(e,r)}getPaks(){return[...this.mounts].sort((e,r)=>e.priority-r.priority)}get mountedPaks(){return this.mounts.map(e=>e.pak)}hasFile(e){return this.files.has(_e(e))}getSource(e){let r=this.files.get(_e(e));if(!(!r||r.length===0))return r[0]}stat(e){let r=this.getSource(e);if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}getFileMetadata(e){let r=this.getSource(e);if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name,offset:r.entry.offset}}async readFile(e){let r=this.getSource(e);if(!r)throw new Error(`File not found in VFS: ${e}`);return r.archive.readFile(e)}async readBinaryFile(e){return this.readFile(e)}streamFile(e,r=1024*1024){let n=this.getSource(e);if(!n)throw new Error(`File not found in VFS: ${e}`);let{archive:i}=n,a=i.readFile(e),o=0,s=a.length;return new ReadableStream({pull(c){if(o>=s){c.close();return}let l=Math.min(o+r,s),d=a.slice(o,l);o=l,c.enqueue(d)}})}async readTextFile(e){let r=await this.readFile(e);return new TextDecoder("utf-8").decode(r)}list(e=""){let r=_e(e).replace(/\/+$|^\//g,""),n=[],i=new Set,a=r?`${r}/`:"";for(let[o,s]of this.files){let c=s[0];if(r&&!c.entry.name.startsWith(a))continue;let l=r?c.entry.name.slice(a.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,s)=>o.path.localeCompare(s.path)),{files:n,directories:[...i].sort()}}async listDirectory(e){return this.list(e).files}findByExtension(e){if(e instanceof RegExp)return this.searchFiles(e);if(Array.isArray(e))return this.listByExtension(e);let r=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let[i,a]of this.files){let o=a[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,a)=>i.path.localeCompare(a.path))}listByExtension(e){let r=new Set(e.map(i=>i.startsWith(".")?i.toLowerCase():`.${i.toLowerCase()}`)),n=[];for(let[i,a]of this.files){let o=a[0],s=o.entry.name.toLowerCase();for(let c of r)if(s.endsWith(c)){n.push({path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name});break}}return n.sort((i,a)=>i.path.localeCompare(a.path))}searchFiles(e){let r=[];for(let[n,i]of this.files){let a=i[0];e.test(a.entry.name)&&r.push({path:a.entry.name,size:a.entry.length,sourcePak:a.archive.name})}return r.sort((n,i)=>n.path.localeCompare(i.path))}getPakInfo(){return this.mounts.map(e=>({filename:e.pak.name,entryCount:e.pak.listEntries().length,totalSize:e.pak.size,priority:e.priority}))}getDirectoryTree(){let e={name:"",path:"",files:[],directories:[]},r=new Map;r.set("",e);let n=Array.from(this.files.values()).map(i=>{let a=i[0];return{path:a.entry.name,size:a.entry.length,sourcePak:a.archive.name}}).sort((i,a)=>i.path.localeCompare(a.path));for(let i of n){let a=i.path.split("/"),o=a.pop(),s="",c=e;for(let l of a){let d=s;s=s?`${s}/${l}`:l;let f=r.get(s);f||(f={name:l,path:s,files:[],directories:[]},c.directories.push(f),r.set(s,f)),c=f}c.files.push(i)}return e}};var td=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"}]),Jn=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(e=td){this.known=new Map;e.forEach(r=>this.known.set(this.normalizePakName(r.name),r))}validateArchive(e,r){let n=this.normalizePakName(r??("name"in e?e.name:"unknown")),i=e.checksum,a="size"in e?e.size:void 0,o=this.known.get(n);return o?o.checksum!==i?{name:n,checksum:i,expectedChecksum:o.checksum,status:"mismatch",size:a,description:o.description}:{name:n,checksum:i,expectedChecksum:o.checksum,status:"valid",size:a,description:o.description}:{name:n,checksum:i,status:"unknown",size:a}}assertValid(e,r){let n=this.validateArchive(e,r);if(n.status==="mismatch")throw new Jn(n);return n}normalizePakName(e){let r=_e(e),n=r.split("/"),i=n.pop()??r,a=n.pop();return a?`${i}@${a}`:i}};var pn=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 hg(t,e){if(typeof t.arrayBuffer=="function"){let r=await t.arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof FileReader<"u")return new Promise((r,n)=>{let i=new FileReader;i.onerror=()=>n(i.error??new Error("Unknown FileReader error")),i.onprogress=a=>{e?.({file:"blob",loadedBytes:a.loaded,totalBytes:a.total||t.size,state:"reading"})},i.onload=()=>{let a=i.result;a instanceof ArrayBuffer?r(a):n(new Error("Unexpected FileReader result"))},i.readAsArrayBuffer(t)});if(typeof Response<"u"){let r=await new Response(t).arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof t.stream=="function"){let r=t.stream().getReader(),n=[],i=0;for(;;){let{done:s,value:c}=await r.read();if(s)break;if(!c)continue;let l=c;n.push(l),i+=l.byteLength,e?.({file:"blob",loadedBytes:i,totalBytes:t.size,state:"reading"})}let a=new Uint8Array(i),o=0;for(let s of n)a.set(s,o),o+=s.byteLength;return a.buffer}throw new pn("blob",new Error("Unsupported Blob type"))}async function mg(t,e){if(t.data instanceof ArrayBuffer)return e?.({file:t.name,loadedBytes:t.data.byteLength,totalBytes:t.data.byteLength,state:"reading"}),t.data;if(t.data instanceof Blob){let n=t.data.size;return hg(t.data,i=>e?.({...i,file:t.name,totalBytes:n}))}let r=t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength);return e?.({file:t.name,loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}async function Ys(t,e,r){let n=typeof r=="function"?{onProgress:r}:r??{},i=n.persistIndexes??!!n.pakIndexStore,a=n.enforceValidation??!!n.validator,o=n.allowUnknownPaks??!0,s=n.stopOnError??!1,c=[];for(let l of e)try{let d=await mg(l,n.onProgress),f=Ui.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&&a||m&&!o){let g=new Jn(u);if(n.onError?.(l.name,g),s)throw new pn(l.name,g);c.push({archive:f,mounted:!1,validation:u});continue}}if(t.mountPak(f),i&&n.pakIndexStore)try{await n.pakIndexStore.persist(f)}catch(h){if(n.onError?.(l.name,h),s)throw new pn(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),s)throw new pn(l.name,d)}return c}var gn=class{constructor(e,r=1/0,n=()=>0){this._capacity=e;this._maxMemory=r;this.sizeCalculator=n;this.map=new Map;this.currentMemoryUsage=0;if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}get memoryUsage(){return this.currentMemoryUsage}get capacity(){return this._capacity}set capacity(e){if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero");this._capacity=e,this.evict()}get maxMemory(){return this._maxMemory}set maxMemory(e){this._maxMemory=e,this.evict()}has(e){return this.map.has(e)}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}set(e,r){let n=this.sizeCalculator(r);this.map.has(e)&&this.delete(e),this.map.set(e,r),this.currentMemoryUsage+=n,this.evict()}delete(e){let r=this.map.get(e);return r!==void 0?(this.currentMemoryUsage-=this.sizeCalculator(r),this.map.delete(e)):!1}clear(){this.map.clear(),this.currentMemoryUsage=0}entries(){return Array.from(this.map.entries()).reverse().map(([e,r])=>({key:e,value:r}))}evict(){for(;this.map.size>this._capacity;){let e=this.map.keys().next();if(!e.done)this.delete(e.value);else break}for(;this.currentMemoryUsage>this._maxMemory&&this.map.size>0;){let e=this.map.keys().next();if(!e.done)this.delete(e.value);else break}}};function pg(t){return Array.isArray(t)?t:Array.from(t)}function rd(t){return pg(t).map(e=>({name:e.name,data:e}))}async function Cf(t,e,r){let n=rd(e);return Ys(t,n,r??{})}function Pf(t,e){let r=i=>{i.preventDefault(),i.dataTransfer?.dropEffect&&(i.dataTransfer.dropEffect="copy")},n=i=>{i.preventDefault();let a=i.dataTransfer?.files;a&&a.length>0&&e(Array.from(a))};return t.addEventListener("dragover",r),t.addEventListener("drop",n),()=>{t.removeEventListener("dragover",r),t.removeEventListener("drop",n)}}function If(t,e){let r=n=>{let i=n.target;!i||!i.files||i.files.length===0||(e(i.files),i.value="")};return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}var gg="IBSP",yg=38,Ff=19,bg=8+Ff*8;var se=class extends Error{},Ni=class{constructor(e,r={}){this.vfs=e;this.options=r}async load(e){let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);if(n.set(new Uint8Array(r)),this.options.useWorker&&typeof Worker<"u")try{let i=await this.parseInWorker(n.buffer);return kf(i)}catch(i){console.warn("BSP worker parsing failed, falling back to main thread",i)}return ja(n.buffer)}parseInWorker(e){return new Promise((r,n)=>{if(!this.options.workerPath){n(new Error("No worker path provided"));return}let i=new Worker(this.options.workerPath,{type:"module"});i.onmessage=a=>{let{type:o,data:s,message:c}=a.data;o==="success"?(r(this.rehydrateData(s)),i.terminate()):(n(new Error(c)),i.terminate())},i.onerror=a=>{n(a),i.terminate()},i.postMessage(e,[e])})}rehydrateData(e){if(e.entities&&!e.entities.getUniqueClassnames){let r=e.entities;r.getUniqueClassnames=function(){let n=new Set;for(let i of this.entities)i.classname&&n.add(i.classname);return Array.from(n).sort()}}return e}};function ja(t){let e=xg(t);return kf(e)}function kf(t){return{...t,pickEntity(e){let r=null,n=1/0;for(let i of t.entities.entities){let a=i.properties.model;if(!a||!a.startsWith("*"))continue;let o=parseInt(a.substring(1),10);if(isNaN(o)||o<0||o>=t.models.length)continue;let s=t.models[o],c=vg(e.origin,e.direction,s.mins,s.maxs);c!==null&&c<n&&(n=c,r={entity:i,model:s,distance:c})}return r},findLeaf(e){let n=t.models[0].headNode;for(;n>=0;){let i=t.nodes[n],a=t.planes[i.planeIndex];a.normal[0]*e[0]+a.normal[1]*e[1]+a.normal[2]*e[2]-a.dist>=0?n=i.children[0]:n=i.children[1]}return t.leafs[-(n+1)]},calculatePVS(e){let r=this.findLeaf(e);if(!(r.cluster===-1||!t.visibility)&&!(r.cluster<0||r.cluster>=t.visibility.clusters.length))return t.visibility.clusters[r.cluster].pvs}}}function xg(t){if(t.byteLength<bg)throw new se("BSP too small to contain header");let e=new DataView(t),r=String.fromCharCode(e.getUint8(0),e.getUint8(1),e.getUint8(2),e.getUint8(3));if(r!==gg)throw new se(`Invalid BSP magic ${r}`);let n=e.getInt32(4,!0);if(n!==yg)throw new se(`Unsupported BSP version ${n}`);let i=new Map;for(let E=0;E<Ff;E+=1){let L=e.getInt32(8+E*8,!0),M=e.getInt32(12+E*8,!0);if(L<0||M<0||L+M>t.byteLength)throw new se(`Invalid lump bounds for index ${E}`);i.set(E,{offset:L,length:M})}let a={version:n,lumps:i},o=_g(t,i.get(0)),s=wg(t,i.get(1)),c=Mg(t,i.get(2)),l=Ag(t,i.get(4)),d=Eg(t,i.get(5)),f=Lg(t,i.get(6)),u=new Uint8Array(t,i.get(7).offset,i.get(7).length),h=Ug(f,i.get(7)),m=Tg(t,i.get(8)),g=Rg(t,i.get(11)),p=Cg(t,i.get(12)),y=Pg(t,i.get(13)),v=Ig(t,i.get(14)),x=Bg(t,i.get(15)),b=zg(t,i.get(9),i.get(10),m),_=Og(t,i.get(3)),w=Fg(t,i.get(17)),S=kg(t,i.get(18));return{header:a,entities:o,planes:s,vertices:c,nodes:l,texInfo:d,faces:f,lightMaps:u,lightMapInfo:h,leafs:m,leafLists:b,edges:g,surfEdges:p,models:y,brushes:v,brushSides:x,visibility:_,areas:w,areaPortals:S}}function vg(t,e,r,n){let i=0,a=1/0;for(let o=0;o<3;o++)if(Math.abs(e[o])<1e-8){if(t[o]<r[o]||t[o]>n[o])return null}else{let s=1/e[o],c=(r[o]-t[o])*s,l=(n[o]-t[o])*s;if(c>l){let d=c;c=l,l=d}if(i=Math.max(i,c),a=Math.min(a,l),i>a)return null}return i}function _g(t,e){let r=new TextDecoder().decode(new Uint8Array(t,e.offset,e.length)),n=Sg(r),i=n.find(a=>a.classname==="worldspawn");return{raw:r,entities:n,worldspawn:i,getUniqueClassnames(){let a=new Set;for(let o of n)o.classname&&a.add(o.classname);return Array.from(a).sort()}}}function Sg(t){let e=[],r=/\{([^}]*)\}/gms,n;for(;(n=r.exec(t))!==null;){let i=n[1],a={},o=/"([^\"]*)"\s+"([^\"]*)"/g,s;for(;(s=o.exec(i))!==null;)a[s[1]]=s[2];e.push({classname:a.classname,properties:a})}return e}function wg(t,e){let r=new DataView(t,e.offset,e.length),n=e.length/20;if(n%1!==0)throw new se("Plane lump has invalid length");let i=[];for(let a=0;a<n;a+=1){let o=[r.getFloat32(a*20,!0),r.getFloat32(a*20+4,!0),r.getFloat32(a*20+8,!0)],s=r.getFloat32(a*20+12,!0),c=r.getInt32(a*20+16,!0);i.push({normal:o,dist:s,type:c})}return i}function Mg(t,e){let r=new DataView(t,e.offset,e.length),n=e.length/12;if(n%1!==0)throw new se("Vertex lump has invalid length");let i=[];for(let a=0;a<n;a+=1)i.push([r.getFloat32(a*12,!0),r.getFloat32(a*12+4,!0),r.getFloat32(a*12+8,!0)]);return i}function Ag(t,e){let r=new DataView(t,e.offset,e.length),n=28,i=e.length/n;if(i%1!==0)throw new se("Node lump has invalid length");let a=[];for(let o=0;o<i;o+=1){let s=o*n,c=r.getInt32(s,!0),l=[r.getInt32(s+4,!0),r.getInt32(s+8,!0)],d=[r.getInt16(s+12,!0),r.getInt16(s+14,!0),r.getInt16(s+16,!0)],f=[r.getInt16(s+18,!0),r.getInt16(s+20,!0),r.getInt16(s+22,!0)],u=r.getUint16(s+24,!0),h=r.getUint16(s+26,!0);a.push({planeIndex:c,children:l,mins:d,maxs:f,firstFace:u,numFaces:h})}return a}function Eg(t,e){let r=new DataView(t,e.offset,e.length),n=76,i=e.length/n;if(i%1!==0)throw new se("TexInfo lump has invalid length");let a=[];for(let o=0;o<i;o+=1){let s=o*n,c=[r.getFloat32(s,!0),r.getFloat32(s+4,!0),r.getFloat32(s+8,!0)],l=r.getFloat32(s+12,!0),d=[r.getFloat32(s+16,!0),r.getFloat32(s+20,!0),r.getFloat32(s+24,!0)],f=r.getFloat32(s+28,!0),u=r.getInt32(s+32,!0),h=r.getInt32(s+36,!0),m=new Uint8Array(t,e.offset+s+40,32),g=new TextDecoder("utf-8").decode(m).replace(/\0.*$/,""),p=r.getInt32(s+72,!0);a.push({s:c,sOffset:l,t:d,tOffset:f,flags:u,value:h,texture:g,nextTexInfo:p})}return a}function Lg(t,e){let r=new DataView(t,e.offset,e.length),n=20,i=e.length/n;if(i%1!==0)throw new se("Face lump has invalid length");let a=[];for(let o=0;o<i;o+=1){let s=o*n,c=r.getUint16(s,!0),l=r.getInt16(s+2,!0),d=r.getInt32(s+4,!0),f=r.getInt16(s+8,!0),u=r.getInt16(s+10,!0),h=[r.getUint8(s+12),r.getUint8(s+13),r.getUint8(s+14),r.getUint8(s+15)],m=r.getInt32(s+16,!0);a.push({planeIndex:c,side:l,firstEdge:d,numEdges:f,texInfo:u,styles:h,lightOffset:m})}return a}function Tg(t,e){let r=new DataView(t,e.offset,e.length),n=28,i=e.length/n;if(i%1!==0)throw new se("Leaf lump has invalid length");let a=[];for(let o=0;o<i;o+=1){let s=o*n,c=r.getInt32(s,!0),l=r.getInt16(s+4,!0),d=r.getInt16(s+6,!0),f=[r.getInt16(s+8,!0),r.getInt16(s+10,!0),r.getInt16(s+12,!0)],u=[r.getInt16(s+14,!0),r.getInt16(s+16,!0),r.getInt16(s+18,!0)],h=r.getUint16(s+20,!0),m=r.getUint16(s+22,!0),g=r.getUint16(s+24,!0),p=r.getUint16(s+26,!0);a.push({contents:c,cluster:l,area:d,mins:f,maxs:u,firstLeafFace:h,numLeafFaces:m,firstLeafBrush:g,numLeafBrushes:p})}return a}function Rg(t,e){let r=new DataView(t,e.offset,e.length),n=4,i=e.length/n;if(i%1!==0)throw new se("Edge lump has invalid length");let a=[];for(let o=0;o<i;o+=1){let s=o*n;a.push({vertices:[r.getUint16(s,!0),r.getUint16(s+2,!0)]})}return a}function Cg(t,e){let r=e.length/4;if(r%1!==0)throw new se("SurfEdge lump has invalid length");let n=new DataView(t,e.offset,e.length),i=new Int32Array(r);for(let a=0;a<r;a+=1)i[a]=n.getInt32(a*4,!0);return i}function Pg(t,e){let r=new DataView(t,e.offset,e.length),n=48;if(e.length%n!==0)throw new se("Model lump has invalid length");let i=e.length/n,a=[];for(let o=0;o<i;o+=1){let s=o*n,c=[r.getFloat32(s,!0),r.getFloat32(s+4,!0),r.getFloat32(s+8,!0)],l=[r.getFloat32(s+12,!0),r.getFloat32(s+16,!0),r.getFloat32(s+20,!0)],d=[r.getFloat32(s+24,!0),r.getFloat32(s+28,!0),r.getFloat32(s+32,!0)],f=r.getInt32(s+36,!0),u=r.getInt32(s+40,!0),h=r.getInt32(s+44,!0);a.push({mins:c,maxs:l,origin:d,headNode:f,firstFace:u,numFaces:h})}return a}function Ig(t,e){let r=new DataView(t,e.offset,e.length),n=12,i=e.length/n;if(i%1!==0)throw new se("Brush lump has invalid length");let a=[];for(let o=0;o<i;o+=1){let s=o*n;a.push({firstSide:r.getInt32(s,!0),numSides:r.getInt32(s+4,!0),contents:r.getInt32(s+8,!0)})}return a}function Bg(t,e){let r=new DataView(t,e.offset,e.length),n=4,i=e.length/n;if(i%1!==0)throw new se("Brush side lump has invalid length");let a=[];for(let o=0;o<i;o+=1){let s=o*n;a.push({planeIndex:r.getUint16(s,!0),texInfo:r.getInt16(s+2,!0)})}return a}function Fg(t,e){let r=new DataView(t,e.offset,e.length),n=8,i=e.length/n;if(i%1!==0)throw new se("Area lump has invalid length");let a=[];for(let o=0;o<i;o+=1){let s=o*n,c=r.getInt32(s,!0),l=r.getInt32(s+4,!0);a.push({numAreaPortals:c,firstAreaPortal:l})}return a}function kg(t,e){return Dg(t,e)}function Dg(t,e){let r=new DataView(t,e.offset,e.length),n=8,i=e.length/n;if(i%1!==0)throw new se("AreaPortal lump has invalid length");let a=[];for(let o=0;o<i;o+=1){let s=o*n,c=r.getInt32(s,!0),l=r.getInt32(s+4,!0);a.push({portalNumber:c,otherArea:l})}return a}function zg(t,e,r,n){let i=[],a=[],o=e.length/2,s=r.length/2,c=new DataView(t,e.offset,e.length),l=new DataView(t,r.offset,r.length);for(let d of n){if(d.firstLeafFace+d.numLeafFaces>o)throw new se("Leaf faces reference data past lump bounds");if(d.firstLeafBrush+d.numLeafBrushes>s)throw new se("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),a.push(u)}return{leafFaces:i,leafBrushes:a}}function Og(t,e){if(e.length===0)return;if(e.length<4)throw new se("Visibility lump too small");let r=new DataView(t,e.offset,e.length),n=r.getInt32(0,!0),i=4+n*8;if(n<0||i>e.length)throw new se("Visibility lump truncated");let a=4,o=[];for(let s=0;s<n;s+=1){let c=r.getInt32(a,!0),l=r.getInt32(a+4,!0);a+=8;let d=e.offset+c,f=e.offset+l,u=e.offset+e.length;if(c<0||l<0||d>=u||f>=u)throw new se("Visibility offsets out of range");o.push({pvs:Bf(t,d,n,e),phs:Bf(t,f,n,e)})}return{numClusters:n,clusters:o}}function Bf(t,e,r,n){let i=Math.ceil(r/8),a=new Uint8Array(i),o=new Uint8Array(t),s=e,c=0,l=n.offset+n.length;for(;c<i;){if(s>=l)throw new se("Visibility data truncated");let d=o[s++];if(d!==0){a[c++]=d;continue}if(s>=l)throw new se("Visibility run exceeds lump bounds");let f=o[s++];for(let u=0;u<f&&c<i;u+=1)a[c++]=0}return a}function Ug(t,e){return t.map(r=>{if(!(r.lightOffset<0))return{offset:r.lightOffset,length:Math.max(0,e.length-r.lightOffset)}})}function $s(t,e,r){if(t.lightOffset<0||t.lightOffset>=e.byteLength)return;let n=e.byteLength-t.lightOffset,i=Math.min(r?.length??n,n);if(!(i<=0))return e.subarray(t.lightOffset,t.lightOffset+i)}var Ng=844121161,Hg=8,Df=68,qe=class extends Error{},Hi=class{constructor(e){this.vfs=e;this.cache=new Map}async load(e){if(this.cache.has(e))return this.cache.get(e);let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);n.set(r);let i=nd(n.buffer);return this.cache.set(e,i),i}get(e){return this.cache.get(e)}};function zf(t,e,r){let n=[];for(let i=0;i<r;i+=1){let a=t.getUint8(e+i);if(a===0)break;n.push(a)}return String.fromCharCode(...n)}function Qa(t,e,r,n){if(r!==0&&(e<Df||e+r>t.byteLength))throw new qe(`${n} section is out of bounds`)}function Vg(t){if(t.byteLength<Df)throw new qe("MD2 buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0);if(r!==Ng)throw new qe(`Invalid MD2 ident: ${r}`);if(n!==Hg)throw new qe(`Unsupported MD2 version: ${n}`);let i={ident:r,version:n,skinWidth:e.getInt32(8,!0),skinHeight:e.getInt32(12,!0),frameSize:e.getInt32(16,!0),numSkins:e.getInt32(20,!0),numVertices:e.getInt32(24,!0),numTexCoords:e.getInt32(28,!0),numTriangles:e.getInt32(32,!0),numGlCommands:e.getInt32(36,!0),numFrames:e.getInt32(40,!0),offsetSkins:e.getInt32(44,!0),offsetTexCoords:e.getInt32(48,!0),offsetTriangles:e.getInt32(52,!0),offsetFrames:e.getInt32(56,!0),offsetGlCommands:e.getInt32(60,!0),offsetEnd:e.getInt32(64,!0),magic:r},a=40+i.numVertices*4;if(i.frameSize!==a)throw new qe(`Unexpected frame size ${i.frameSize}, expected ${a}`);if(i.offsetEnd>t.byteLength)throw new qe("MD2 offset_end exceeds buffer length");return i}function Gg(t,e){let r=e.numSkins*64;Qa(t,e.offsetSkins,r,"skins");let n=new DataView(t,e.offsetSkins,r),i=[];for(let a=0;a<e.numSkins;a+=1)i.push({name:zf(n,a*64,64)});return i}function Wg(t,e){let r=e.numTexCoords*4;Qa(t,e.offsetTexCoords,r,"texcoords");let n=new DataView(t,e.offsetTexCoords,r),i=[];for(let a=0;a<e.numTexCoords;a+=1){let o=a*4;i.push({s:n.getInt16(o,!0),t:n.getInt16(o+2,!0)})}return i}function Xg(t,e){let r=e.numTriangles*12;Qa(t,e.offsetTriangles,r,"triangles");let n=new DataView(t,e.offsetTriangles,r),i=[];for(let a=0;a<e.numTriangles;a+=1){let o=a*12,s=[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(s.some(l=>l>=e.numVertices)||c.some(l=>l>=e.numTexCoords))throw new qe("Triangle references out of range vertex or texcoord");i.push({vertexIndices:s,texCoordIndices:c})}return i}function Kg(t,e){let r=e.numFrames*e.frameSize;Qa(t,e.offsetFrames,r,"frames");let n=[];for(let i=0;i<e.numFrames;i+=1){let a=e.offsetFrames+i*e.frameSize,o=new DataView(t,a,e.frameSize),s={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=zf(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<e.numVertices;y+=1){let v=40+y*4,x=o.getUint8(v)*s.x+c.x,b=o.getUint8(v+1)*s.y+c.y,_=o.getUint8(v+2)*s.z+c.z;x<f&&(f=x),b<u&&(u=b),_<h&&(h=_),x>m&&(m=x),b>g&&(g=b),_>p&&(p=_);let w={x,y:b,z:_},S=o.getUint8(v+3),E=or[S];if(!E)throw new qe(`Invalid normal index ${S} in frame ${l}`);let L={x:E[0],y:E[1],z:E[2]};d.push({position:w,normalIndex:S,normal:L})}n.push({name:l,vertices:d,minBounds:{x:f,y:u,z:h},maxBounds:{x:m,y:g,z:p}})}return n}function Yg(t,e){let r=e.numGlCommands*4;if(Qa(t,e.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(t,e.offsetGlCommands,r),i=[],a=0;for(;;){if(a+4>r)throw new qe("GL command list ended unexpectedly");let o=n.getInt32(a,!0);if(a+=4,o===0)break;let s=Math.abs(o),c=[],l=s*12;if(a+l>r)throw new qe("GL command vertex block exceeds buffer");for(let d=0;d<s;d+=1){let f=n.getFloat32(a,!0),u=n.getFloat32(a+4,!0),h=n.getInt32(a+8,!0);if(a+=12,h<0||h>=e.numVertices)throw new qe("GL command references invalid vertex index");c.push({s:f,t:u,vertexIndex:h})}i.push({mode:o>0?"strip":"fan",vertices:c})}if(a!==r)throw new qe("GL command list did not consume expected data");return i}function nd(t){let e=Vg(t),r=Gg(t,e),n=Wg(t,e),i=Xg(t,e),a=Kg(t,e),o=Yg(t,e);return{header:e,skins:r,texCoords:n,triangles:i,frames:a,glCommands:o}}function Of(t){let e=[],r=0;for(;r<t.length;){let n=t[r].name,i=n.replace(/\d+$/,"")||n,a=r;for(;a+1<t.length&&(t[a+1].name.replace(/\d+$/,"")||t[a+1].name)===i;)a+=1;e.push({name:i,firstFrame:r,lastFrame:a}),r=a+1}return e}var Uf=860898377,$g=15,Yt=class extends Error{constructor(e){super(e),this.name="Md3ParseError"}};function Ja(t,e,r){let n=new Uint8Array(t.buffer,t.byteOffset+e,r);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function qg(t){let e=(t>>8&255)*(2*Math.PI/255),r=(t&255)*(2*Math.PI/255),n=Math.sin(r);return{x:Math.cos(e)*n,y:Math.sin(e)*n,z:Math.cos(r)}}function qs(t,e,r,n){if(e<0||e+r>n)throw new Yt(`${t} exceeds buffer bounds`)}function Zg(t){let e=t.getInt32(0,!0);if(e!==Uf)throw new Yt(`Invalid MD3 ident: ${e}`);let r=t.getInt32(4,!0);if(r!==$g)throw new Yt(`Unsupported MD3 version: ${r}`);let n=Ja(t,8,64),i=t.getInt32(72,!0),a=t.getInt32(76,!0),o=t.getInt32(80,!0),s=t.getInt32(84,!0),c=t.getInt32(88,!0),l=t.getInt32(92,!0),d=t.getInt32(96,!0),f=t.getInt32(100,!0),u=t.getInt32(104,!0);if(a<=0||s<0||o<0)throw new Yt("Invalid MD3 counts");return{ident:e,version:r,name:n,flags:i,numFrames:a,numTags:o,numSurfaces:s,numSkins:c,ofsFrames:l,ofsTags:d,ofsSurfaces:f,ofsEnd:u,magic:e}}function jg(t,e){let r=[];qs("Frames",e.ofsFrames,e.numFrames*56,t.byteLength);for(let i=0;i<e.numFrames;i+=1){let a=e.ofsFrames+i*56;r.push({minBounds:{x:t.getFloat32(a,!0),y:t.getFloat32(a+4,!0),z:t.getFloat32(a+8,!0)},maxBounds:{x:t.getFloat32(a+12,!0),y:t.getFloat32(a+16,!0),z:t.getFloat32(a+20,!0)},localOrigin:{x:t.getFloat32(a+24,!0),y:t.getFloat32(a+28,!0),z:t.getFloat32(a+32,!0)},radius:t.getFloat32(a+36,!0),name:Ja(t,a+40,16)})}return r}function Qg(t,e){let r=[],i=e.numFrames*e.numTags*112;qs("Tags",e.ofsTags,i,t.byteLength);for(let a=0;a<e.numFrames;a+=1){let o=[];for(let s=0;s<e.numTags;s+=1){let c=e.ofsTags+(a*e.numTags+s)*112,l=c+64,d=l+12;o.push({name:Ja(t,c,64),origin:{x:t.getFloat32(l,!0),y:t.getFloat32(l+4,!0),z:t.getFloat32(l+8,!0)},axis:[{x:t.getFloat32(d,!0),y:t.getFloat32(d+4,!0),z:t.getFloat32(d+8,!0)},{x:t.getFloat32(d+12,!0),y:t.getFloat32(d+16,!0),z:t.getFloat32(d+20,!0)},{x:t.getFloat32(d+24,!0),y:t.getFloat32(d+28,!0),z:t.getFloat32(d+32,!0)}]})}r.push(o)}return r}function Jg(t,e){let r=t.getInt32(e,!0);if(r!==Uf)throw new Yt(`Invalid surface ident at ${e}: ${r}`);let n=Ja(t,e+4,64),i=t.getInt32(e+68,!0),a=t.getInt32(e+72,!0),o=t.getInt32(e+76,!0),s=t.getInt32(e+80,!0),c=t.getInt32(e+84,!0),l=t.getInt32(e+88,!0),d=t.getInt32(e+92,!0),f=t.getInt32(e+96,!0),u=t.getInt32(e+100,!0),h=t.getInt32(e+104,!0);if(a<=0||s<=0||c<=0)throw new Yt(`Invalid surface counts for ${n}`);let m=h;qs(`Surface ${n}`,e,m,t.byteLength);let g=[],p=e+l;for(let S=0;S<c;S+=1){let E=p+S*12;g.push({indices:[t.getInt32(E,!0),t.getInt32(E+4,!0),t.getInt32(E+8,!0)]})}let y=[],v=e+d;for(let S=0;S<o;S+=1){let E=v+S*68;y.push({name:Ja(t,E,64),shaderIndex:t.getInt32(E+64,!0)})}let x=[],b=e+f;for(let S=0;S<s;S+=1){let E=b+S*8;x.push({s:t.getFloat32(E,!0),t:t.getFloat32(E+4,!0)})}let _=[],w=e+u;for(let S=0;S<a;S+=1){let E=[];for(let L=0;L<s;L+=1){let M=w+(S*s+L)*8,C=t.getInt16(M,!0)/64,I=t.getInt16(M+2,!0)/64,B=t.getInt16(M+4,!0)/64,F=t.getUint16(M+6,!0);E.push({position:{x:C,y:I,z:B},latLng:F,normal:qg(F)})}_.push(E)}return{surface:{name:n,flags:i,numFrames:a,shaders:y,triangles:g,texCoords:x,vertices:_},nextOffset:e+h}}function id(t){if(t.byteLength<108)throw new Yt("MD3 buffer too small for header");let e=new DataView(t),r=Zg(e);qs("MD3 end",r.ofsEnd,0,t.byteLength);let n=jg(e,r),i=Qg(e,r),a=[],o=r.ofsSurfaces;for(let s=0;s<r.numSurfaces;s+=1){let{surface:c,nextOffset:l}=Jg(e,o);a.push(c),o=l}if(o!==r.ofsEnd)throw new Yt("Surface parsing did not reach ofsEnd");return{header:r,frames:n,tags:i,surfaces:a}}var Vi=class{constructor(e){this.vfs=e;this.cache=new Map}async load(e){if(this.cache.has(e))return this.cache.get(e);let r=await this.vfs.readFile(e),n=id(r.slice().buffer);return this.cache.set(e,n),n}get(e){return this.cache.get(e)}};var e1=844317769,t1=2,Nf=64,Hf=12,yn=class extends Error{};function r1(t,e,r){let n=[];for(let i=0;i<r;i+=1){let a=t.getUint8(e+i);if(a===0)break;n.push(a)}return String.fromCharCode(...n)}function ad(t){if(t.byteLength<Hf)throw new yn("Sprite buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0),i=e.getInt32(8,!0);if(r!==e1)throw new yn(`Invalid Sprite ident: ${r}`);if(n!==t1)throw new yn(`Unsupported Sprite version: ${n}`);let a=[],o=16+Nf,s=Hf;for(let c=0;c<i;c+=1){if(s+o>t.byteLength)throw new yn("Sprite frame data exceeds buffer length");let l=e.getInt32(s,!0),d=e.getInt32(s+4,!0),f=e.getInt32(s+8,!0),u=e.getInt32(s+12,!0),h=r1(e,s+16,Nf);a.push({width:l,height:d,originX:f,originY:u,name:h}),s+=o}return{ident:r,version:n,numFrames:i,frames:a}}var Gi=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);return n.set(r),ad(n.buffer)}};function Vf(t,e){let r=(t.sequence.end-t.sequence.start+1)/t.sequence.fps,n=t.sequence.loop!==!1,i=t.time+e;return n?i=(i%r+r)%r:i>r&&(i=r),{...t,time:Math.max(0,Math.min(i,r))}}function Gf(t){let e=t.sequence.end-t.sequence.start+1,r=1/t.sequence.fps,n=t.sequence.loop!==!1,i=t.time/r;if(!n&&i>=e)return{frame0:t.sequence.end,frame1:t.sequence.end,lerp:0};let a=n?i%e:Math.min(i,e-1),o=Math.floor(a),s=t.sequence.start+o,c=o+1>=e?n?t.sequence.start:t.sequence.end:s+1,l=!n&&o>=e-1?0:a-o;return{frame0:s,frame1:c,lerp:l}}function Wf(t){return{sequence:t,time:0}}function Xf(t,e,r){return{x:t.x+(e.x-t.x)*r,y:t.y+(e.y-t.y)*r,z:t.z+(e.z-t.z)*r}}var eo=class extends Error{constructor(e){super(e),this.name="WalParseError"}};function Zs(t){if(t.byteLength<100)throw new eo("WAL buffer too small");let e=new DataView(t),r=new Uint8Array(t,0,32),n=new TextDecoder("utf-8").decode(r).replace(/\0.*$/,"").trim(),i=e.getInt32(32,!0),a=e.getInt32(36,!0),o=[e.getInt32(40,!0),e.getInt32(44,!0),e.getInt32(48,!0),e.getInt32(52,!0)],s=new Uint8Array(t,56,32),c=new TextDecoder("utf-8").decode(s).replace(/\0.*$/,"").trim(),l=e.getInt32(88,!0),d=e.getInt32(92,!0),f=e.getInt32(96,!0);if(i<=0||a<=0)throw new eo("Invalid WAL dimensions");let u=[],h=i,m=a;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>t.byteLength)throw new eo(`Invalid WAL mip offset for level ${g}`);let v=new Uint8Array(t,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:a,mipmaps:u,animName:c,flags:l,contents:d,value:f}}var ei=class extends Error{constructor(e){super(e),this.name="PcxParseError"}};function to(t){if(t.byteLength<128)throw new ei("PCX buffer too small for header");let e=new DataView(t),r=e.getUint8(0),n=e.getUint8(2),i=e.getUint8(3),a=e.getUint16(4,!0),o=e.getUint16(6,!0),s=e.getUint16(8,!0),c=e.getUint16(10,!0);if(r!==10||n!==1)throw new ei("Unsupported PCX encoding");if(i!==8)throw new ei("Only 8bpp PCX files are supported");let l=s-a+1,d=c-o+1,f=e.getUint16(66,!0),u=t.byteLength-769;if(u<128||new DataView(t,u,1).getUint8(0)!==12)throw new ei("Missing PCX palette");let h=new Uint8Array(t,u+1,768),m=new Uint8Array(t,128,u-128),g=new Uint8Array(l*d),p=0,y=0;for(let v=0;v<d;v+=1){let x=0;for(;x<f&&p<m.length;){let b=1,_=m[p++];if((_&192)===192){if(b=_&63,p>=m.length)throw new ei("Unexpected end of PCX RLE data");_=m[p++]}for(let w=0;w<b&&x<f;w+=1)x<l&&(g[y++]=_),x+=1}}return{width:l,height:d,bitsPerPixel:i,pixels:g,palette:h}}function js(t){let e=new Uint8Array(t.width*t.height*4);for(let r=0;r<t.pixels.length;r+=1){let n=t.pixels[r],i=n*3,a=r*4;e[a]=t.palette[i],e[a+1]=t.palette[i+1],e[a+2]=t.palette[i+2],e[a+3]=n===255?0:255}return e}var Vr=class extends Error{constructor(e){super(e),this.name="TgaParseError"}};function od(t){let e=new DataView(t);if(t.byteLength<18)throw new Vr("Buffer too small for TGA header");let r=e.getUint8(0),n=e.getUint8(1),i=e.getUint8(2),a=e.getUint16(12,!0),o=e.getUint16(14,!0),s=e.getUint8(16),c=e.getUint8(17);if(i!==2&&i!==10&&i!==3&&i!==11)throw new Vr(`Unsupported TGA image type: ${i} (only RGB/Grayscale supported)`);if(s!==24&&s!==32&&s!==8)throw new Vr(`Unsupported pixel depth: ${s} (only 8, 24, 32 bpp supported)`);let l=i>=9,d=i===3||i===11,f=s/8,u=18+r;if(n===1){let x=e.getUint16(5,!0),b=e.getUint8(7);u+=x*(b/8)}let h=a*o,m=new Uint8Array(h*4),g=(c&32)!==0,p=0,y=new Uint8Array(t),v=x=>{if(d){let b=y[u++];m[x]=b,m[x+1]=b,m[x+2]=b,m[x+3]=255}else{let b=y[u++],_=y[u++],w=y[u++],S=s===32?y[u++]:255;m[x]=w,m[x+1]=_,m[x+2]=b,m[x+3]=S}};if(l){let x=0;for(;x<h;){if(u>=t.byteLength)throw new Vr("Unexpected end of TGA RLE data");let b=y[u++],_=(b&127)+1,w=(b&128)!==0;if(x+_>h)throw new Vr("TGA RLE packet exceeds image bounds");if(w){let S=d?y[u]:y[u+2],E=d?y[u]:y[u+1],L=y[u],M=d?255:s===32?y[u+3]:255;u+=f;for(let C=0;C<_;C++){let I=(x+C)*4;m[I]=S,m[I+1]=E,m[I+2]=L,m[I+3]=M}}else for(let S=0;S<_;S++)v((x+S)*4);x+=_}}else for(let x=0;x<h;x++){if(u>=t.byteLength)throw new Vr("Unexpected end of TGA data");v(x*4)}if(!g){let x=a*4,b=new Uint8Array(x);for(let _=0;_<o/2;_++){let w=_*x,S=(o-1-_)*x;b.set(m.subarray(w,w+x)),m.set(m.subarray(S,S+x),w),m.set(b,S)}}return{width:a,height:o,bitsPerPixel:32,pixels:m}}function n1(t){let e=0;for(let r of t.levels)e+=r.rgba.byteLength;return e}var Wi=class{constructor(e={}){this.cache=new gn(e.capacity??128,e.maxMemory??256*1024*1024,n1)}get size(){return this.cache.size}get memoryUsage(){return this.cache.memoryUsage}get(e){return this.cache.get(e.toLowerCase())}set(e,r){this.cache.set(e.toLowerCase(),r)}clear(){this.cache.clear()}get capacity(){return this.cache.capacity}set capacity(e){this.cache.capacity=e}get maxMemory(){return this.cache.maxMemory}set maxMemory(e){this.cache.maxMemory=e}};function sd(t,e){let r=[];for(let n of t.mipmaps){let i=new Uint8Array(n.width*n.height*4);for(let a=0;a<n.data.length;a+=1){let o=n.data[a],s=o*3,c=a*4;i[c]=e[s],i[c+1]=e[s+1],i[c+2]=e[s+2],i[c+3]=o===255?0:255}r.push({level:n.level,width:n.width,height:n.height,rgba:i})}return{width:t.width,height:t.height,levels:r,source:"wal"}}function Qs(t){let e=js(t),r={level:0,width:t.width,height:t.height,rgba:e};return{width:t.width,height:t.height,levels:[r],source:"pcx"}}function Kf(t){let e={level:0,width:t.width,height:t.height,rgba:t.pixels};return{width:t.width,height:t.height,levels:[e],source:"tga"}}function Js(t,e){return sd(Zs(t),e)}var ti=class extends Error{constructor(e){super(e),this.name="WavParseError"}};function ld(t,e,r){return new TextDecoder("ascii").decode(new Uint8Array(t.buffer,t.byteOffset+e,r))}function el(t){if(t.byteLength<44)throw new ti("WAV buffer too small");let e=new DataView(t);if(ld(e,0,4)!=="RIFF"||ld(e,8,4)!=="WAVE")throw new ti("Invalid WAV header");let r=12,n=-1,i=-1,a=0,o=0;for(;r+8<=t.byteLength;){let m=ld(e,r,4),g=e.getUint32(r+4,!0),p=r+8;m==="fmt "?(n=p,a=g):m==="data"&&(i=p,o=g),r=p+g}if(n===-1||i===-1)throw new ti("Missing fmt or data chunk");let s=e.getUint16(n,!0),c=e.getUint16(n+2,!0),l=e.getUint32(n+4,!0),d=e.getUint16(n+14,!0);if(s!==1)throw new ti("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,v=0;if(d===8)v=e.getUint8(y),h[p]=(v-128)/128;else if(d===16)v=e.getInt16(y,!0),h[p]=v/32768;else if(d===24){let x=e.getUint8(y),b=e.getUint8(y+1),_=e.getInt8(y+2);v=x|b<<8|_<<16,h[p]=v/8388608}else throw new ti(`Unsupported bitsPerSample: ${d}`)}return{sampleRate:l,channels:c,bitsPerSample:d,samples:h}}var i1=(t,e=4294967295,r=79764919)=>{let n=new Int32Array(256),i,a,o,s=e;for(i=0;i<256;i++){for(o=i<<24,a=8;a>0;--a)o=2147483648&o?o<<1^r:o<<1;n[i]=o}for(i=0;i<t.length;i++)s=s<<8^n[255&(s>>24^t[i])];return s};var cd=(t,e=i1)=>{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 a=new Uint8Array(t.length),o,s,c,l=!1,d=0,f=42,u=t.length>13&&t.substring(0,9)==="dynEncode",h=0;u&&(h=11,s=n(t.substring(9,h)),s<=1&&(h+=2,f=n(t.substring(11,h))),s===1&&(h+=8,c=(p=>new DataView(r(p).buffer).getInt32(0,!0))(t.substring(13,h))));let m=256-f;for(let p=h;p<t.length;p++)if(o=t.charCodeAt(p),o!==61||l){if(o===92&&p<t.length-5&&u){let y=t.charCodeAt(p+1);y!==117&&y!==85||(o=parseInt(t.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),a[d++]=o<f&&o>0?o+m:o-f}else l=!0;let g=a.subarray(0,d);if(u&&s===1){let p=e(g);if(p!==c){let y="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",y+`
1
+ "use strict";var Quake2Engine=(()=>{var Lp=Object.create;var Is=Object.defineProperty;var Tp=Object.getOwnPropertyDescriptor;var Rp=Object.getOwnPropertyNames;var Cp=Object.getPrototypeOf,Pp=Object.prototype.hasOwnProperty;var Ip=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Ho=(t,e)=>{for(var r in e)Is(t,r,{get:e[r],enumerable:!0})},mf=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Rp(e))!Pp.call(t,i)&&i!==r&&Is(t,i,{get:()=>e[i],enumerable:!(n=Tp(e,i))||n.enumerable});return t};var Bp=(t,e,r)=>(r=t!=null?Lp(Cp(t)):{},mf(e||!t||!t.__esModule?Is(r,"default",{value:t,enumerable:!0}):r,t)),Fp=t=>mf(Is({},"__esModule",{value:!0}),t);var eh=Ip((tM,Jf)=>{"use strict";Jf.exports=Worker});var lw={};Ho(lw,{ATTN_IDLE:()=>ed,ATTN_LOOP_NONE:()=>Qc,ATTN_NONE:()=>qo,ATTN_NORM:()=>Jc,ATTN_STATIC:()=>td,AssetDependencyError:()=>gi,AssetDependencyTracker:()=>ja,AssetManager:()=>Bl,AssetPreviewGenerator:()=>Ec,AudioApi:()=>zi,AudioContextController:()=>Fl,AudioOcclusion:()=>Ja,AudioRegistry:()=>lo,AudioRegistryError:()=>Ya,AudioSystem:()=>Hl,BSP_SURFACE_FRAGMENT_SOURCE:()=>Vd,BSP_SURFACE_VERTEX_SOURCE:()=>Hd,BSP_VERTEX_LAYOUT:()=>zd,BspLoader:()=>Ni,BspParseError:()=>se,BspSurfacePipeline:()=>ho,Camera:()=>ec,ClientConnection:()=>Bc,Command:()=>Vo,CommandRegistry:()=>Pi,ConfigStringRegistry:()=>Oi,ConnectionState:()=>of,CoordinateSystem:()=>nf,Cvar:()=>Zo,CvarRegistry:()=>ki,DemoAnalyzer:()=>Fo,DemoCameraMode:()=>Ju,DemoClipper:()=>Ac,DemoEventType:()=>Qu,DemoPlaybackController:()=>Ms,DemoReader:()=>hr,DemoRecorder:()=>As,DemoValidator:()=>Mc,DynamicLightManager:()=>Wl,EngineHost:()=>Di,EngineRuntime:()=>jo,FileType:()=>ef,FixedTimestepLoop:()=>Yn,Framebuffer:()=>yi,IndexBuffer:()=>Je,LoggingRenderer:()=>Ic,LruCache:()=>yn,MAX_SOUND_CHANNELS:()=>Yo,MD2_FRAGMENT_SHADER:()=>qd,MD2_VERTEX_SHADER:()=>Yd,MD3_FRAGMENT_SHADER:()=>pu,MD3_VERTEX_SHADER:()=>mu,MapAnalyzer:()=>Lc,Md2Loader:()=>Hi,Md2MeshBuffers:()=>po,Md2ParseError:()=>Ze,Md2Pipeline:()=>go,Md3Loader:()=>Vi,Md3ModelMesh:()=>vo,Md3ParseError:()=>Yt,Md3Pipeline:()=>_o,Md3SurfaceMesh:()=>is,MessageWriter:()=>wc,MusicSystem:()=>Vl,NetworkMessageParser:()=>dt,NullRenderer:()=>Tc,PARTICLE_FRAGMENT_SHADER:()=>yu,PARTICLE_VERTEX_SHADER:()=>gu,PROTOCOL_VERSION_RERELEASE:()=>zr,PakArchive:()=>Ui,PakIndexStore:()=>Il,PakIngestionError:()=>gn,PakParseError:()=>Be,PakValidationError:()=>ei,PakValidator:()=>$s,PakWriter:()=>Gs,ParticleRenderer:()=>wo,ParticleSystem:()=>So,PlaybackState:()=>Sc,RERELEASE_KNOWN_PAKS:()=>ad,ResourceLoadTracker:()=>Ws,ResourceType:()=>od,SKYBOX_FRAGMENT_SHADER:()=>$d,SKYBOX_VERTEX_SHADER:()=>Xd,SOUND_FULLVOLUME:()=>Bi,SOUND_LOOP_ATTENUATE:()=>rd,ShaderProgram:()=>le,SkyboxPipeline:()=>mo,SoundChannel:()=>Mr,SoundPrecache:()=>zl,SoundRegistry:()=>Dl,SpriteLoader:()=>Gi,SpriteParseError:()=>bn,SpriteRenderer:()=>Mo,StreamingPakArchive:()=>Vs,Texture2D:()=>et,TextureCache:()=>Wi,TextureCubeMap:()=>co,TgaParseError:()=>Gr,U_ALPHA:()=>br,U_ANGLE1:()=>vt,U_ANGLE2:()=>pt,U_ANGLE3:()=>gt,U_EFFECTS16:()=>We,U_EFFECTS8:()=>He,U_EVENT:()=>bt,U_FRAME16:()=>St,U_FRAME8:()=>yt,U_INSTANCE_BITS:()=>Sr,U_LOOP_ATTENUATION_HIGH:()=>fn,U_LOOP_VOLUME:()=>wr,U_MODEL:()=>_t,U_MODEL2:()=>wt,U_MODEL3:()=>Mt,U_MODEL4:()=>At,U_OLDORIGIN:()=>lr,U_OLD_FRAME_HIGH:()=>mn,U_ORIGIN1:()=>ht,U_ORIGIN2:()=>mt,U_ORIGIN3:()=>xt,U_OWNER_HIGH:()=>hn,U_REMOVE:()=>$o,U_RENDERFX16:()=>Ge,U_RENDERFX8:()=>Ne,U_SCALE:()=>_r,U_SKIN16:()=>Xe,U_SKIN8:()=>Ve,U_SOLID:()=>Lt,U_SOUND:()=>Et,VertexArray:()=>Le,VertexBuffer:()=>Ae,VirtualFileSystem:()=>Xs,advanceAnimation:()=>Yf,applyEntityDelta:()=>lp,applySurfaceState:()=>es,attenuationToDistanceMultiplier:()=>Fi,boxIntersectsFrustum:()=>bi,buildBspGeometry:()=>kh,buildMd2Geometry:()=>Zd,buildMd2VertexData:()=>jd,buildMd3SurfaceGeometry:()=>fu,buildMd3VertexData:()=>hu,calculateMaxAudibleDistance:()=>Jn,calculatePakChecksum:()=>If,captureRenderTarget:()=>bp,computeFrameBlend:()=>qf,computeSkyScroll:()=>$l,createAnimationState:()=>Zf,createAudioGraph:()=>kl,createBspSurfaces:()=>Fh,createEmptyEntityState:()=>Dr,createEmptyProtocolPlayerState:()=>mr,createEngine:()=>sw,createEngineRuntime:()=>Rf,createFaceLightmap:()=>Ys,createHeadlessRenderTarget:()=>yp,createInitialChannels:()=>Ol,createOcclusionResolver:()=>Ch,createProgramFromSources:()=>Bh,createRenderer:()=>Um,createWebGLContext:()=>Ph,createWebGPUContext:()=>pp,decodeOgg:()=>Pl,deriveSurfaceRenderState:()=>Wd,detectFileType:()=>tf,extractFrustumPlanes:()=>Dn,filesToPakSources:()=>sd,findLeafForPoint:()=>xi,gatherVisibleFaces:()=>vi,groupMd2Animations:()=>Wf,ingestPakFiles:()=>Df,ingestPaks:()=>Ks,interpolateMd3Tag:()=>vm,interpolateVec3:()=>jf,isBinaryFile:()=>dp,isTextFile:()=>rf,parseBsp:()=>Qo,parseEntLump:()=>fp,parseMd2:()=>ld,parseMd3:()=>cd,parsePcx:()=>ra,parseSprite:()=>dd,parseTga:()=>ud,parseWal:()=>Zs,parseWalTexture:()=>Js,parseWav:()=>el,pcxToRgba:()=>js,pickChannel:()=>Ul,preparePcxTexture:()=>Qs,queryCapabilities:()=>gp,removeViewTranslation:()=>Xl,resolveLightStyles:()=>Gd,serializeEntLump:()=>hp,spawnBfgExplosion:()=>Im,spawnBlasterImpact:()=>Pm,spawnBlood:()=>wm,spawnBulletImpact:()=>_m,spawnExplosion:()=>Sm,spawnMuzzleFlash:()=>Am,spawnRailTrail:()=>Rm,spawnSparks:()=>Cm,spawnSplash:()=>Lm,spawnSteam:()=>Tm,spawnTeleportFlash:()=>Mm,spawnTrail:()=>Em,validateEntity:()=>mp,walToRgba:()=>fd,wireDropTarget:()=>zf,wireFileInput:()=>Of});var kp=()=>typeof performance<"u"?performance.now():Date.now(),Dp=t=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,25)},Yn=class{constructor(e,r={}){this.callbacks=e;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let e=this.options.now(),r=this.lastTimeMs===void 0?0:e-this.lastTimeMs;this.lastTimeMs=e,this.advance(r,e),this.running&&this.options.schedule(this.tick)};let n=r.fixedDeltaMs??25,i=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:i,maxDeltaMs:r.maxDeltaMs??n*i,startTimeMs:r.startTimeMs,now:r.now??kp,schedule:r.schedule??Dp}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(e){let r=(this.lastTimeMs??0)+e;this.lastTimeMs=r,this.advance(e,r)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,r){let n=Math.min(Math.max(e,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+n,this.options.fixedDeltaMs*this.options.maxSubSteps);let 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 o=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:o,nowMs:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var Vo=class{constructor(e,r,n){this.name=e,this.callback=r,this.description=n}execute(e){this.callback(e)}},Pi=class{constructor(){this.commands=new Map;this.history=[];this.historyLimit=64;this.autocompleteProviders=[]}register(e,r,n){let i=new Vo(e,r,n);return this.commands.set(e,i),i}registerCommand(e,r){this.register(e,r)}registerAutocompleteProvider(e){this.autocompleteProviders.push(e)}get(e){return this.commands.get(e)}execute(e){let r=e.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(e);if(n.length===0)return!1;let i=n[0],o=n.slice(1),a=this.get(i);return a?(a.execute(o),!0):(this.onConsoleOutput?.(`Unknown command "${i}"`),!1)}executeCommand(e){this.execute(e)}getHistory(){return[...this.history]}getSuggestions(e){let r=new Set;for(let n of this.commands.keys())n.startsWith(e)&&r.add(n);for(let n of this.autocompleteProviders){let i=n();for(let o of i)o.startsWith(e)&&r.add(o)}return Array.from(r).sort()}tokenize(e){let r=[],n="",i=!1;for(let o=0;o<e.length;o++){let a=e[o];a==='"'?i=!i:a===" "&&!i?n.length>0&&(r.push(n),n=""):n+=a}return n.length>0&&r.push(n),r}list(){return[...this.commands.values()].sort((e,r)=>e.name.localeCompare(r.name))}};var zp=Object.defineProperty,Op=(t,e)=>{for(var r in e)zp(t,r,{get:e[r],enumerable:!0})},pf={x:0,y:0,z:0};var yw=Math.PI/180;function gf(t,e){return{x:t.x-e.x,y:t.y-e.y,z:t.z-e.z}}function Up(t,e){return{x:t.x*e,y:t.y*e,z:t.z*e}}function Np(t,e){return t.x*e.x+t.y*e.y+t.z*e.z}function Hp(t){return Np(t,t)}function Hc(t){return Math.sqrt(Hp(t))}function Vr(t){let e=Hc(t);return e===0?t:Up(t,1/e)}var Vp=Math.PI/180,Gp=180/Math.PI,Ee=Vp,Vc=Gp;var sr=[[-.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]];var pr=624,Wp=397,Xp=2567483615,$p=2147483648,Kp=2147483647,Uc=4294967296,Yp=class{constructor(t=5489){this.state=new Uint32Array(pr),this.index=pr,this.seed(t)}seed(t){this.state[0]=t>>>0;for(let e=1;e<pr;e++){let r=this.state[e-1]^this.state[e-1]>>>30,n=Math.imul(r>>>0,1812433253)+e;this.state[e]=n>>>0}this.index=pr}nextUint32(){this.index>=pr&&this.twist();let t=this.state[this.index++];return t^=t>>>11,t^=t<<7&2636928640,t^=t<<15&4022730752,t^=t>>>18,t>>>0}twist(){for(let t=0;t<pr;t++){let e=this.state[t]&$p|this.state[(t+1)%pr]&Kp,r=this.state[(t+Wp)%pr]^e>>>1;(e&1)!==0&&(r^=Xp),this.state[t]=r>>>0}this.index=0}getState(){return{index:this.index,state:Array.from(this.state)}}setState(t){if(t.state.length!==pr)throw new Error(`Expected ${pr} MT state values, received ${t.state.length}`);this.index=t.index,this.state=Uint32Array.from(t.state,e=>e>>>0)}},yf=class{constructor(t={}){this.mt=new Yp(t.seed)}seed(t){this.mt.seed(t)}frandom(){return this.mt.nextUint32()/Uc}frandomRange(t,e){return t+(e-t)*this.frandom()}frandomMax(t){return this.frandomRange(0,t)}crandom(){return this.frandomRange(-1,1)}crandomOpen(){let t=Number.EPSILON;return this.frandomRange(-1+t,1)}irandomUint32(){return this.mt.nextUint32()}irandomRange(t,e){if(e-t<=1)return t;let r=e-t,n=Uc-Uc%r,i;do i=this.mt.nextUint32();while(i>=n);return t+i%r}irandom(t){return t<=0?0:this.irandomRange(0,t)}randomTimeRange(t,e){return e<=t?t:this.irandomRange(t,e)}randomTime(t){return this.irandom(t)}randomIndex(t){return this.irandom(t.length)}getState(){return{mt:this.mt.getState()}}setState(t){this.mt.setState(t.mt)}};function qp(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function Gc(t,e){let r=new Float32Array(16);for(let n=0;n<4;n+=1)for(let i=0;i<4;i+=1)r[i*4+n]=t[0+n]*e[i*4+0]+t[4+n]*e[i*4+1]+t[8+n]*e[i*4+2]+t[12+n]*e[i*4+3];return r}function bf(t,e){let r=e.x,n=e.y,i=e.z;return{x:t[0]*r+t[4]*n+t[8]*i+t[12],y:t[1]*r+t[5]*n+t[9]*i+t[13],z:t[2]*r+t[6]*n+t[10]*i+t[14]}}function xf(t,e){let r=qp();return r[0]=e[0].x,r[1]=e[0].y,r[2]=e[0].z,r[4]=e[1].x,r[5]=e[1].y,r[6]=e[1].z,r[8]=e[2].x,r[9]=e[2].y,r[10]=e[2].z,r[12]=t.x,r[13]=t.y,r[14]=t.z,r}var gr=1,un=2;var Wc=8,Xc=16,Zp=32;var jp=16384;var Bs=65536,vf=1<<17,Qp=1<<18,Jp=1<<19,eg=1<<20,tg=1<<21,rg=1<<22,ng=1<<23,bw=1<<24,Fs=1<<25,ig=1<<26,xw=1<<27,vw=1<<28,_w=1<<29,ks=1<<30,Sw=1<<31;var Wo=0;var Ds=4,Xo=8,zs=16,Os=32,_f=64;var ww=1<<25,Mw=1<<28,Aw=1<<29,Ew=1<<30,Lw=1<<31;var Tw=gr|un,Rw=gr|Bs|un|Fs|ks,Cw=gr|Bs|un,Pw=gr|vf|un|Fs|ks,Iw=Zp|Wc|Xc,Bw=gr|Xc|Wc,og=gr|Fs|ks|un|ig,Fw=Qp|Jp|eg|tg|rg|ng,kw=gr|Wc|Xc|Fs|ks,Dw=gr|Bs|un,zw=gr|un,Ow=gr|Bs|un|vf,Uw=og|jp;var Nw=Number.MAX_SAFE_INTEGER-1;var Us=(t=>(t[t.None=0]="None",t[t.Archive=1]="Archive",t[t.UserInfo=2]="UserInfo",t[t.ServerInfo=4]="ServerInfo",t[t.Latch=8]="Latch",t[t.Cheat=16]="Cheat",t))(Us||{});var Ns=256;var $c=256,Kc=8192,Hs=2048,Yc=512,qc=256,Zc=Ns*2,jc=256,Nc=32,Go=96;var J=(t=>(t[t.Name=0]="Name",t[t.CdTrack=1]="CdTrack",t[t.Sky=2]="Sky",t[t.SkyAxis=3]="SkyAxis",t[t.SkyRotate=4]="SkyRotate",t[t.StatusBar=5]="StatusBar",t[t.HealthBarName=55]="HealthBarName",t[t.CONFIG_N64_PHYSICS=56]="CONFIG_N64_PHYSICS",t[t.CONFIG_CTF_TEAMS=57]="CONFIG_CTF_TEAMS",t[t.CONFIG_COOP_RESPAWN_STRING=58]="CONFIG_COOP_RESPAWN_STRING",t[t.Story=54]="Story",t[t.AirAccel=59]="AirAccel",t[t.MaxClients=60]="MaxClients",t[t.MapChecksum=61]="MapChecksum",t[t.Models=62]="Models",t[t.Sounds=62+Kc]="Sounds",t[t.Images=t.Sounds+Hs]="Images",t[t.Lights=t.Images+Yc]="Lights",t[t.ShadowLights=t.Lights+$c]="ShadowLights",t[t.Items=t.ShadowLights+jc]="Items",t[t.Players=t.Items+qc]="Players",t[t.PlayerSkins=t.Players]="PlayerSkins",t[t.General=t.Players+Ns]="General",t[t.WheelWeapons=t.General+Zc]="WheelWeapons",t[t.WheelAmmo=t.WheelWeapons+Nc]="WheelAmmo",t[t.WheelPowerups=t.WheelAmmo+Nc]="WheelPowerups",t[t.CdLoopCount=t.WheelPowerups+Nc]="CdLoopCount",t[t.GameStyle=t.CdLoopCount+1]="GameStyle",t[t.MaxConfigStrings=t.GameStyle+1]="MaxConfigStrings",t))(J||{}),Sf=J.MaxConfigStrings;function wf(t){return t>=5&&t<59?Go*(59-t):t>=J.General&&t<J.WheelWeapons?Go*(J.MaxConfigStrings-t):Go}var Hw=J.Sounds,Vw=J.Images,Gw=J.Lights,Ww=J.Items,Xw=J.Players,$w=J.General,ag={};Op(ag,{addReplayFrame:()=>dg,createReplaySession:()=>cg,deserializeReplay:()=>lg,serializeReplay:()=>sg});function sg(t){return JSON.stringify(t,null,2)}function lg(t){let e=JSON.parse(t);if(!e.metadata||!Array.isArray(e.frames))throw new Error("Invalid replay format: missing metadata or frames");return e}function cg(t,e){return{metadata:{map:t,date:new Date().toISOString(),version:"1.0",seed:e},frames:[]}}function dg(t,e,r,n){t.frames.push({serverFrame:r,cmd:e,timestamp:Date.now()-n})}var R=(t=>(t[t.bad=0]="bad",t[t.muzzleflash=1]="muzzleflash",t[t.muzzleflash2=2]="muzzleflash2",t[t.temp_entity=3]="temp_entity",t[t.layout=4]="layout",t[t.inventory=5]="inventory",t[t.nop=6]="nop",t[t.disconnect=7]="disconnect",t[t.reconnect=8]="reconnect",t[t.sound=9]="sound",t[t.print=10]="print",t[t.stufftext=11]="stufftext",t[t.serverdata=12]="serverdata",t[t.configstring=13]="configstring",t[t.spawnbaseline=14]="spawnbaseline",t[t.centerprint=15]="centerprint",t[t.download=16]="download",t[t.playerinfo=17]="playerinfo",t[t.packetentities=18]="packetentities",t[t.deltapacketentities=19]="deltapacketentities",t[t.frame=20]="frame",t[t.splitclient=21]="splitclient",t[t.configblast=22]="configblast",t[t.spawnbaselineblast=23]="spawnbaselineblast",t[t.level_restart=24]="level_restart",t[t.damage=25]="damage",t[t.locprint=26]="locprint",t[t.fog=27]="fog",t[t.waitingforplayers=28]="waitingforplayers",t[t.bot_chat=29]="bot_chat",t[t.poi=30]="poi",t[t.help_path=31]="help_path",t[t.muzzleflash3=32]="muzzleflash3",t[t.achievement=33]="achievement",t))(R||{}),Zn=(t=>(t[t.bad=0]="bad",t[t.nop=1]="nop",t[t.move=2]="move",t[t.userinfo=3]="userinfo",t[t.stringcmd=4]="stringcmd",t))(Zn||{}),z=(t=>(t[t.GUNSHOT=0]="GUNSHOT",t[t.BLOOD=1]="BLOOD",t[t.BLASTER=2]="BLASTER",t[t.RAILTRAIL=3]="RAILTRAIL",t[t.SHOTGUN=4]="SHOTGUN",t[t.EXPLOSION1=5]="EXPLOSION1",t[t.EXPLOSION2=6]="EXPLOSION2",t[t.ROCKET_EXPLOSION=7]="ROCKET_EXPLOSION",t[t.GRENADE_EXPLOSION=8]="GRENADE_EXPLOSION",t[t.SPARKS=9]="SPARKS",t[t.SPLASH=10]="SPLASH",t[t.BUBBLETRAIL=11]="BUBBLETRAIL",t[t.SCREEN_SPARKS=12]="SCREEN_SPARKS",t[t.SHIELD_SPARKS=13]="SHIELD_SPARKS",t[t.BULLET_SPARKS=14]="BULLET_SPARKS",t[t.LASER_SPARKS=15]="LASER_SPARKS",t[t.PARASITE_ATTACK=16]="PARASITE_ATTACK",t[t.ROCKET_EXPLOSION_WATER=17]="ROCKET_EXPLOSION_WATER",t[t.GRENADE_EXPLOSION_WATER=18]="GRENADE_EXPLOSION_WATER",t[t.MEDIC_CABLE_ATTACK=19]="MEDIC_CABLE_ATTACK",t[t.BFG_EXPLOSION=20]="BFG_EXPLOSION",t[t.BFG_BIGEXPLOSION=21]="BFG_BIGEXPLOSION",t[t.BOSSTPORT=22]="BOSSTPORT",t[t.BFG_LASER=23]="BFG_LASER",t[t.GRAPPLE_CABLE=24]="GRAPPLE_CABLE",t[t.WELDING_SPARKS=25]="WELDING_SPARKS",t[t.GREENBLOOD=26]="GREENBLOOD",t[t.BLUEHYPERBLASTER=27]="BLUEHYPERBLASTER",t[t.PLASMA_EXPLOSION=28]="PLASMA_EXPLOSION",t[t.TUNNEL_SPARKS=29]="TUNNEL_SPARKS",t[t.BLASTER2=30]="BLASTER2",t[t.RAILTRAIL2=31]="RAILTRAIL2",t[t.FLAME=32]="FLAME",t[t.LIGHTNING=33]="LIGHTNING",t[t.DEBUGTRAIL=34]="DEBUGTRAIL",t[t.PLAIN_EXPLOSION=35]="PLAIN_EXPLOSION",t[t.FLASHLIGHT=36]="FLASHLIGHT",t[t.FORCEWALL=37]="FORCEWALL",t[t.HEATBEAM=38]="HEATBEAM",t[t.MONSTER_HEATBEAM=39]="MONSTER_HEATBEAM",t[t.STEAM=40]="STEAM",t[t.BUBBLETRAIL2=41]="BUBBLETRAIL2",t[t.MOREBLOOD=42]="MOREBLOOD",t[t.HEATBEAM_SPARKS=43]="HEATBEAM_SPARKS",t[t.HEATBEAM_STEAM=44]="HEATBEAM_STEAM",t[t.CHAINFIST_SMOKE=45]="CHAINFIST_SMOKE",t[t.ELECTRIC_SPARKS=46]="ELECTRIC_SPARKS",t[t.TRACKER_EXPLOSION=47]="TRACKER_EXPLOSION",t[t.TELEPORT_EFFECT=48]="TELEPORT_EFFECT",t[t.DBALL_GOAL=49]="DBALL_GOAL",t[t.WIDOWBEAMOUT=50]="WIDOWBEAMOUT",t[t.NUKEBLAST=51]="NUKEBLAST",t[t.WIDOWSPLASH=52]="WIDOWSPLASH",t[t.EXPLOSION1_BIG=53]="EXPLOSION1_BIG",t[t.EXPLOSION1_NP=54]="EXPLOSION1_NP",t[t.FLECHETTE=55]="FLECHETTE",t[t.BLUEHYPERBLASTER_KEX=56]="BLUEHYPERBLASTER_KEX",t[t.BFG_ZAP=57]="BFG_ZAP",t[t.BERSERK_SLAM=58]="BERSERK_SLAM",t[t.GRAPPLE_CABLE_2=59]="GRAPPLE_CABLE_2",t[t.POWER_SPLASH=60]="POWER_SPLASH",t[t.LIGHTNING_BEAM=61]="LIGHTNING_BEAM",t[t.EXPLOSION1_NL=62]="EXPLOSION1_NL",t[t.EXPLOSION2_NL=63]="EXPLOSION2_NL",t))(z||{});var Mf=64;var ug=12,fg=9,Kw=Math.ceil(ug*fg/16),hg=23,mg=2,Yw=Math.ceil(hg*mg/16);function Af(t,e){t.writeByte(e.msec),t.writeByte(e.buttons),t.writeAngle16(e.angles.x),t.writeAngle16(e.angles.y),t.writeAngle16(e.angles.z),t.writeShort(e.forwardmove),t.writeShort(e.sidemove),t.writeShort(e.upmove),t.writeByte(e.impulse),t.writeByte(0)}var pg=[0,145,227,114,7,150,228,117,14,159,237,124,9,152,234,123,28,141,255,110,27,138,248,105,18,131,241,96,21,132,246,103,56,169,219,74,63,174,220,77,54,167,213,68,49,160,210,67,36,181,199,86,35,178,192,81,42,187,201,88,45,188,206,95,112,225,147,2,119,230,148,5,126,239,157,12,121,232,154,11,108,253,143,30,107,250,136,25,98,243,129,16,101,244,134,23,72,217,171,58,79,222,172,61,70,215,165,52,65,208,162,51,84,197,183,38,83,194,176,33,90,203,185,40,93,204,190,47,224,113,3,146,231,118,4,149,238,127,13,156,233,120,10,155,252,109,31,142,251,106,24,137,242,99,17,128,245,100,22,135,216,73,59,170,223,78,60,173,214,71,53,164,209,64,50,163,196,85,39,182,195,82,32,177,202,91,41,184,205,92,46,191,144,1,115,226,151,6,116,229,158,15,125,236,153,8,122,235,140,29,111,254,139,26,104,249,130,19,97,240,133,20,102,247,168,57,75,218,175,62,76,221,166,55,69,212,161,48,66,211,180,37,86,199,179,34,80,193,186,43,89,200,189,44,94,207];function Ef(t){let e=0;for(let r=0;r<t.length;r++)e=pg[(e^t[r])&255];return e}var ht=1,mt=2,pt=4,gt=8,yt=16,bt=32,$o=64,yr=128,jn=256,xt=512,vt=1024,_t=2048,Ne=4096,br=8192,He=16384,xr=32768,Ve=65536,St=1<<17,Ge=1<<18,We=1<<19,wt=1<<20,Mt=1<<21,At=1<<22,vr=1<<23,lr=1<<24,Xe=1<<25,Et=1<<26,Lt=1<<27,_r=1<<28,Sr=1<<29,wr=1<<30,Ii=-2147483648,fn=1,hn=2,mn=4;var pn=class{constructor(t){t instanceof Uint8Array?this.view=new DataView(t.buffer,t.byteOffset,t.byteLength):this.view=new DataView(t),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(t){if(t<0||t>this.length)throw new Error(`Seek out of bounds: ${t} (length: ${this.length})`);this.offset=t}setReadPosition(t){this.seek(t)}hasMore(){return this.offset<this.length}hasBytes(t){return this.offset+t<=this.length}readChar(){let t=this.view.getInt8(this.offset);return this.offset+=1,t}readByte(){let t=this.view.getUint8(this.offset);return this.offset+=1,t}readShort(){let t=this.view.getInt16(this.offset,!0);return this.offset+=2,t}readUShort(){let t=this.view.getUint16(this.offset,!0);return this.offset+=2,t}readLong(){let t=this.view.getInt32(this.offset,!0);return this.offset+=4,t}readULong(){let t=this.view.getUint32(this.offset,!0);return this.offset+=4,t}readFloat(){let t=this.view.getFloat32(this.offset,!0);return this.offset+=4,t}readString(){let t="";for(;this.offset<this.length;){let e=this.readChar();if(e===-1||e===0)break;t+=String.fromCharCode(e)}return t}readStringLine(){let t="";for(;this.offset<this.length;){let e=this.readChar();if(e===-1||e===0||e===10)break;t+=String.fromCharCode(e)}return t}readCoord(){return this.readShort()*(1/8)}readAngle(){return this.readChar()*(360/256)}readAngle16(){return this.readShort()*360/65536}readData(t){if(this.offset+t>this.length)throw new Error(`Read out of bounds: ${this.offset+t} (length: ${this.length})`);let e=new Uint8Array(this.view.buffer,this.view.byteOffset+this.offset,t);return this.offset+=t,new Uint8Array(e)}readPos(t){t.x=this.readCoord(),t.y=this.readCoord(),t.z=this.readCoord()}readDir(t){let e=this.readByte();if(e>=162){t.x=0,t.y=0,t.z=0;return}let r=sr[e];t.x=r[0],t.y=r[1],t.z=r[2]}},Qn=class{constructor(t=1400){typeof t=="number"?(this.buffer=new Uint8Array(t),this.fixed=!1):(this.buffer=t,this.fixed=!0),this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength),this.offset=0}ensureSpace(t){if(this.offset+t>this.buffer.byteLength){if(this.fixed)throw new Error(`Buffer overflow: capacity ${this.buffer.byteLength}, needed ${this.offset+t}`);let e=Math.max(this.buffer.byteLength*2,this.offset+t),r=new Uint8Array(e);r.set(this.buffer),this.buffer=r,this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength)}}writeByte(t){this.ensureSpace(1),this.view.setUint8(this.offset,t),this.offset+=1}writeBytes(t){this.ensureSpace(t.byteLength),this.buffer.set(t,this.offset),this.offset+=t.byteLength}writeChar(t){this.ensureSpace(1),this.view.setInt8(this.offset,t),this.offset+=1}writeShort(t){this.ensureSpace(2),this.view.setInt16(this.offset,t,!0),this.offset+=2}writeLong(t){this.ensureSpace(4),this.view.setInt32(this.offset,t,!0),this.offset+=4}writeFloat(t){this.ensureSpace(4),this.view.setFloat32(this.offset,t,!0),this.offset+=4}writeString(t){let e=t.length;this.ensureSpace(e+1);for(let r=0;r<e;r++)this.view.setUint8(this.offset+r,t.charCodeAt(r));this.view.setUint8(this.offset+e,0),this.offset+=e+1}writeCoord(t){this.writeShort(Math.trunc(t*8))}writeAngle(t){this.writeByte(Math.trunc(t*256/360)&255)}writeAngle16(t){this.writeShort(Math.trunc(t*65536/360)&65535)}writePos(t){this.writeCoord(t.x),this.writeCoord(t.y),this.writeCoord(t.z)}writeDir(t){let e=-1,r=0;if(t.x===0&&t.y===0&&t.z===0){this.writeByte(0);return}for(let n=0;n<sr.length;n++){let i=sr[n],o=t.x*i[0]+t.y*i[1]+t.z*i[2];o>e&&(e=o,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}},Ko=class{constructor(t=1024){this.buffer=new Uint8Array(t),this.view=new DataView(this.buffer.buffer),this.offset=0}ensureCapacity(t){if(this.offset+t>this.buffer.length){let e=Math.max(this.buffer.length*2,this.offset+t),r=new Uint8Array(e);r.set(this.buffer),this.buffer=r,this.view=new DataView(this.buffer.buffer)}}getData(){return this.buffer.slice(0,this.offset)}writeByte(t){this.ensureCapacity(1),this.view.setUint8(this.offset,t),this.offset+=1}writeChar(t){this.ensureCapacity(1),this.view.setInt8(this.offset,t),this.offset+=1}writeShort(t){this.ensureCapacity(2),this.view.setInt16(this.offset,t,!0),this.offset+=2}writeUShort(t){this.ensureCapacity(2),this.view.setUint16(this.offset,t,!0),this.offset+=2}writeLong(t){this.ensureCapacity(4),this.view.setInt32(this.offset,t,!0),this.offset+=4}writeFloat(t){this.ensureCapacity(4),this.view.setFloat32(this.offset,t,!0),this.offset+=4}writeString(t){let e=t.length+1;this.ensureCapacity(e);for(let r=0;r<t.length;r++)this.view.setUint8(this.offset+r,t.charCodeAt(r));this.view.setUint8(this.offset+t.length,0),this.offset+=e}writeData(t){this.ensureCapacity(t.length),this.buffer.set(t,this.offset),this.offset+=t.length}writeCoord(t){this.writeShort(Math.round(t*8))}writeAngle(t){this.writeByte(Math.round(t*256/360)&255)}writeAngle16(t){this.writeShort(Math.round(t*65536/360))}writeDir(t,e,r){let n=0,i=-999999,o=Math.sqrt(t*t+e*e+r*r);if(o>0){t/=o,e/=o,r/=o;for(let a=0;a<162;a++){let s=t*sr[a][0]+e*sr[a][1]+r*sr[a][2];s>i&&(i=s,n=a)}}this.writeByte(n)}},qn=class qe{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 Qn(qe.MAX_RELIABLE_BUFFER);let e=Date.now();this.lastReceived=e,this.lastSent=e,this.qport=Math.floor(Math.random()*65536)}setup(e,r=null){this.qport=e,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(e){this.outgoingSequence++,this.lastSent=Date.now();let r=0,n=!1,i=0;this.reliableLength>0&&(this.reliableLength>qe.FRAGMENT_SIZE?(n=!0,this.fragmentSendOffset>=this.reliableLength&&(this.fragmentSendOffset=0),r=this.reliableLength-this.fragmentSendOffset,r>qe.FRAGMENT_SIZE&&(r=qe.FRAGMENT_SIZE),i=this.fragmentSendOffset,this.fragmentSendOffset+=r):r=this.reliableLength);let o=qe.PACKET_HEADER,a=r>0?2+(n?8:0):0,s=e?e.length:0;o+a+r+s>qe.MAX_MSGLEN&&(s=qe.MAX_MSGLEN-o-a-r,s<0&&(s=0));let c=new ArrayBuffer(o+a+r+s),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=o;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(e&&s>0){let m=e.slice(0,s);d.set(m,h)}return d}process(e){if(e.length<4)return null;this.lastReceived=Date.now();let r=new DataView(e.buffer,e.byteOffset,e.byteLength),n=r.getUint32(0,!0);if(n===4294967295)return e.subarray(4);if(e.length<qe.PACKET_HEADER)return null;let i=r.getUint32(4,!0),o=r.getUint16(8,!0);if(this.qport!==o)return null;let a=n&1073741823;if((a-this.incomingSequence|0)<=0)return null;this.incomingSequence=a;let s=i&2147483647,c=(i&2147483648)!==0;if(s>this.incomingAcknowledged&&(this.incomingAcknowledged=s),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=qe.PACKET_HEADER,u=null;if(l){if(f+2>e.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>e.byteLength)return null;let y=r.getUint32(f,!0);f+=4;let v=r.getUint32(f,!0);if(f+=4,v>qe.MAX_RELIABLE_BUFFER)return console.warn(`NetChan: received invalid fragment total ${v} > ${qe.MAX_RELIABLE_BUFFER}`),null;if((!this.fragmentBuffer||this.fragmentBuffer.length!==v)&&(this.fragmentBuffer=new Uint8Array(v),this.fragmentLength=v,this.fragmentReceived=0),f+m>e.byteLength)return null;let x=e.subarray(f,f+m);y===this.fragmentReceived&&y+m<=v&&(this.fragmentBuffer.set(x,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>e.byteLength)return null;u=e.slice(f,f+m)}f+=m}let h=e.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(e){if(this.reliableLength+1>qe.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeByte(e),this.reliableLength++}writeReliableShort(e){if(this.reliableLength+2>qe.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeShort(e),this.reliableLength+=2}writeReliableLong(e){if(this.reliableLength+4>qe.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeLong(e),this.reliableLength+=4}writeReliableString(e){let r=e.length+1;if(this.reliableLength+r>qe.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeString(e),this.reliableLength+=r}getReliableData(){return this.reliableLength===0?new Uint8Array(0):this.reliableMessage.getBuffer().subarray(0,this.reliableLength)}needsKeepalive(e){return e-this.lastSent>1e3}isTimedOut(e,r=3e4){return e-this.lastReceived>r}};qn.MAX_MSGLEN=1400;qn.FRAGMENT_SIZE=1024;qn.PACKET_HEADER=10;qn.HEADER_OVERHEAD=qn.PACKET_HEADER+2;qn.MAX_RELIABLE_BUFFER=262144;var Lf=qn;var Tf=(t=>(t[t.Bullets=0]="Bullets",t[t.Shells=1]="Shells",t[t.Rockets=2]="Rockets",t[t.Grenades=3]="Grenades",t[t.Cells=4]="Cells",t[t.Slugs=5]="Slugs",t[t.MagSlugs=6]="MagSlugs",t[t.Trap=7]="Trap",t[t.Flechettes=8]="Flechettes",t[t.Tesla=9]="Tesla",t[t.Disruptor=10]="Disruptor",t[t.Prox=11]="Prox",t[t.Nuke=12]="Nuke",t[t.Rounds=13]="Rounds",t))(Tf||{}),qw=Object.keys(Tf).length/2;var Yo=32,Mr=(t=>(t[t.Auto=0]="Auto",t[t.Weapon=1]="Weapon",t[t.Voice=2]="Voice",t[t.Item=3]="Item",t[t.Body=4]="Body",t[t.Aux=5]="Aux",t[t.Footstep=6]="Footstep",t[t.Aux3=7]="Aux3",t[t.NoPhsAdd=8]="NoPhsAdd",t[t.Reliable=16]="Reliable",t[t.ForcePos=32]="ForcePos",t))(Mr||{}),Qc=-1,qo=0,Jc=1,ed=2,td=3,Bi=80,rd=.003;function Fi(t){return t*.001}function Jn(t){let e=Fi(t);return e<=0?Number.POSITIVE_INFINITY:Bi+1/e}var Zo=class{constructor({name:e,defaultValue:r,description:n,flags:i=Us.None,onChange:o}){this.modifiedCount=0;this.name=e,this.defaultValue=r,this.description=n,this.flags=i,this._value=r,this.onChange=o}get string(){return this._value}getString(){return this.string}get number(){return Number(this._value)}getFloat(){return this.number}get integer(){return Math.trunc(this.number)}getInt(){return this.integer}get boolean(){return!!this.integer}getBoolean(){return this.boolean}set(e){if(this.flags&Us.Latch){if(e===this._value){this.latched=void 0;return}if(this.latched===e)return;this.latched!==e&&(this.latched=e);return}this.apply(e)}reset(){this.latched=void 0,this.apply(this.defaultValue)}applyLatched(){if(this.latched===void 0)return!1;let e=this.latched;return this.latched=void 0,e===this._value?!1:(this.apply(e),!0)}apply(e){if(this._value===e)return;let r=this._value;this._value=e,this.modifiedCount+=1,this.onChange?.(this,r)}},ki=class{constructor(){this.cvars=new Map}register(e){let r=this.cvars.get(e.name);if(r)return r;let n=e.onChange,i=(a,s)=>{n?.(a,s),this.onCvarChange?.(a.name,a.string)},o=new Zo({...e,onChange:i});return this.cvars.set(e.name,o),o}get(e){return this.cvars.get(e)}getCvar(e){return this.get(e)}setValue(e,r){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(r),n}setCvar(e,r){this.setValue(e,r)}resetAll(){for(let e of this.cvars.values())e.reset()}applyLatched(){let e=!1;for(let r of this.cvars.values())e=r.applyLatched()||e;return e}list(){return[...this.cvars.values()].sort((e,r)=>e.name.localeCompare(r.name))}listCvars(){return this.list().map(e=>({name:e.name,value:e.string,defaultValue:e.defaultValue,flags:e.flags,description:e.description}))}};var Di=class{constructor(e,r,n={}){this.game=e;this.client=r;this.started=!1;this.paused_=!1;this.commands=new Pi;this.cvars=new ki;this.stepSimulation=e=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(e,this.latestCommand)};this.renderClient=e=>{this.client&&(this.latestCommand=this.client.render({...e,previous:this.previousFrame,latest:this.latestFrame}))};let i=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??i,this.loop=new Yn({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs}),this.commands.registerAutocompleteProvider(()=>this.cvars.list().map(o=>o.name))}start(){if(!this.started){try{this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame)}catch(e){throw this.game.shutdown(),this.client?.shutdown(),e}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(e){this.paused_=e,e?this.loop.stop():this.started&&this.loop.start()}get paused(){return this.paused_}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};var zi=class{constructor(e){this.registry=e.registry,this.system=e.system,this.music=e.music,this.client=e.client}soundindex(e){return this.registry.registerName(e)}sound(e,r,n,i,o,a){this.system.play({entity:e,channel:r,soundIndex:n,volume:i,attenuation:o,timeOffsetMs:a}),this.triggerSubtitle(n)}positioned_sound(e,r,n,i){this.system.positionedSound(e,r,n,i),this.triggerSubtitle(r)}loop_sound(e,r,n,i,o){let a=this.system.play({entity:e,channel:r,soundIndex:n,volume:i,attenuation:o,looping:!0});return this.triggerSubtitle(n),a}stop_entity_sounds(e){this.system.stopEntitySounds(e)}setPlaybackRate(e){this.system.setPlaybackRate(e)}set_listener(e){this.system.setListener(e)}play_music(e,r=!0){return this.music?this.music.play(e,{loop:r}):Promise.resolve()}play_track(e,r=!0){return this.music?this.music.playTrack(e):Promise.resolve()}pause_music(){this.music?.pause()}resume_music(){return this.music?.resume()??Promise.resolve()}stop_music(){this.music?.stop()}set_music_volume(e){this.music?.setVolume(e)}play_ambient(e,r,n){this.system.ambientSound(e,r,n),this.triggerSubtitle(r)}play_channel(e){this.system.play({...e}),this.triggerSubtitle(e.soundIndex)}triggerSubtitle(e){if(!this.client)return;let r=this.registry.getName(e);if(!r)return;let n=r.match(/\[(.*?)\]/);n&&this.client.showSubtitle(n[1],r)}};var jo=class{constructor(e,r){this.engine=e;this.host=r;this.started=!1}start(){this.started||(this.engine.init(),this.host.start(),this.started=!0)}stop(){this.started&&(this.host.stop(),this.engine.shutdown(),this.started=!1)}pump(e){this.host.pump(e)}getLatestFrame(){return this.host.getLatestFrame()}isRunning(){return this.started&&this.host.isRunning()}};function Rf(t,e,r,n,i){let o=new zi({...n,client:r}),a=new Di(e,r,i);return{runtime:new jo(t,a),audio:o}}function gg(t){if(t<0||t>=J.MaxConfigStrings)throw new RangeError(`Configstring index ${t} is out of range (0-${J.MaxConfigStrings-1})`)}function Cf(t,e){let r=wf(t);if(e.length>r)throw new RangeError(`Configstring ${t} exceeds maximum length (${e.length} > ${r}); limit is ${Go} chars per slot`)}var Oi=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(e,r){return gg(e),Cf(e,r),this.values.set(e,r),e}get(e){return this.values.get(e)}getName(e){return this.get(e)}getAll(){let e=new Array(Sf).fill("");for(let[r,n]of this.values.entries())e[r]=n;return e}modelIndex(e){return this.register(e,J.Models,Kc,"modelCursor")}soundIndex(e){return this.register(e,J.Sounds,Hs,"soundCursor")}findSoundIndex(e){for(let r=J.Sounds;r<J.Sounds+Hs;r+=1)if(this.values.get(r)===e)return r}imageIndex(e){return this.register(e,J.Images,Yc,"imageCursor")}lightIndex(e){return this.register(e,J.Lights,$c,"lightCursor")}shadowLightIndex(e){return this.register(e,J.ShadowLights,jc,"shadowLightCursor")}itemIndex(e){return this.register(e,J.Items,qc,"itemCursor")}playerSkinIndex(e){return this.register(e,J.PlayerSkins,Ns,"playerSkinCursor")}generalIndex(e){return this.register(e,J.General,Zc,"generalCursor")}register(e,r,n,i){for(let s=r;s<r+n;s+=1)if(this.values.get(s)===e)return s;let o=this[i],a=r+n;if(o>=a)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return Cf(o,e),this.values.set(o,e),this[i]=o+1,o}};var yg="PACK";function bg(t,e,r){let n=[];for(let i=0;i<r;i+=1){let o=t.getUint8(e+i);if(o===0)break;n.push(o)}return String.fromCharCode(...n)}function _e(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function xg(){let t=new Uint32Array(256);for(let e=0;e<256;e+=1){let r=e;for(let n=0;n<8;n+=1)r=(r&1)!==0?3988292384^r>>>1:r>>>1;t[e]=r>>>0}return t}var vg=xg();function Pf(t){let e=4294967295;for(let r=0;r<t.length;r+=1){let n=t[r];e=vg[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var Be=class extends Error{},Ui=class t{constructor(e,r,n,i){this.name=e;this.buffer=r;this.entries=new Map(n.map(o=>[o.name,o])),this.checksum=i,this.size=r.byteLength}static fromArrayBuffer(e,r){let n=new DataView(r);if(r.byteLength<12)throw new Be("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!==yg)throw new Be(`Invalid PAK header magic: ${i}`);let o=n.getInt32(4,!0),a=n.getInt32(8,!0);if(o<12)throw new Be(`Invalid directory offset: ${o}`);if(a<0||a%64!==0)throw new Be(`Invalid directory length: ${a}`);if(o+a>r.byteLength)throw new Be("Directory exceeds buffer length");let c=a/64,l=[],d=new Map;for(let f=0;f<c;f+=1){let u=o+f*64,h=bg(n,u,56),m=_e(h),g=n.getInt32(u+56,!0),p=n.getInt32(u+60,!0);if(g<0||p<0||g+p>r.byteLength)throw new Be(`Invalid entry bounds for ${h||"<unnamed>"} (offset=${g}, length=${p})`);if(!m)throw new Be(`Entry ${f} has an empty name`);let y={name:m,offset:g,length:p};d.set(m,y)}return l.push(...d.values()),new t(e,r,l,Pf(new Uint8Array(r)))}getEntry(e){return this.entries.get(_e(e))}listEntries(){return Array.from(this.entries.values())}list(){return Array.from(this.entries.keys())}readFile(e){let r=this.getEntry(e);if(!r)throw new Be(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,r.offset,r.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function If(t){return Pf(new Uint8Array(t))}var _g="PACK",Bf=12,nd=64;function Ff(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}var Vs=class{constructor(e){this.source=e;this.entries=null}async readDirectory(){if(this.entries)return Array.from(this.entries.values());let e=await this.readChunk(0,Bf),r=new DataView(e),n=String.fromCharCode(r.getUint8(0),r.getUint8(1),r.getUint8(2),r.getUint8(3));if(n!==_g)throw new Be(`Invalid PAK header magic: ${n}`);let i=r.getInt32(4,!0),o=r.getInt32(8,!0);if(i<Bf)throw new Be(`Invalid directory offset: ${i}`);if(o<0||o%nd!==0)throw new Be(`Invalid directory length: ${o}`);let a=await this.readChunk(i,o),s=new DataView(a),c=o/nd,l=new Map;for(let d=0;d<c;d++){let f=d*nd,u=this.readCString(s,f,56),h=Ff(u),m=s.getInt32(f+56,!0),g=s.getInt32(f+60,!0);m<0||g<0||m+g>this.source.size,h&&l.set(h,{name:h,offset:m,length:g})}return this.entries=l,Array.from(l.values())}async readFile(e){let r=await this.getEntry(e);if(!r)throw new Be(`File not found in PAK: ${e}`);return this.source.slice(r.offset,r.offset+r.length).stream()}async getFileBlob(e){let r=await this.getEntry(e);if(!r)throw new Be(`File not found in PAK: ${e}`);return this.source.slice(r.offset,r.offset+r.length)}async getEntry(e){return this.entries||await this.readDirectory(),this.entries.get(Ff(e))}async readChunk(e,r){let n=this.source.slice(e,e+r);return"arrayBuffer"in n?await n.arrayBuffer():new Response(n).arrayBuffer()}readCString(e,r,n){let i=[];for(let o=0;o<n;o+=1){let a=e.getUint8(r+o);if(a===0)break;i.push(a)}return String.fromCharCode(...i)}};var id=12,kf=64,Gs=class t{constructor(){this.entries=new Map}addFile(e,r){let n=_e(e);if(n.length>56)throw new Error(`Path too long: '${n}' (max 56 chars)`);this.entries.set(n,r)}removeFile(e){return this.entries.delete(_e(e))}build(){let e=0;for(let u of this.entries.values())e+=u.byteLength;let r=this.entries.size*kf,n=id+e+r,i=new Uint8Array(n),o=new DataView(i.buffer);o.setUint8(0,80),o.setUint8(1,65),o.setUint8(2,67),o.setUint8(3,75);let a=id+e;o.setInt32(4,a,!0),o.setInt32(8,r,!0);let s=id,c=new Map,l=Array.from(this.entries.keys()).sort();for(let u of l){let h=this.entries.get(u);c.set(u,s),i.set(h,s),s+=h.byteLength}let d=a,f=new TextEncoder;for(let u of l){let h=this.entries.get(u),m=f.encode(u);if(m.length>56)throw new Error(`Path too long after encoding: ${u}`);for(let g=0;g<56;g++)g<m.length?o.setUint8(d+g,m[g]):o.setUint8(d+g,0);o.setInt32(d+56,c.get(u),!0),o.setInt32(d+60,h.byteLength,!0),d+=kf}return i}static buildFromEntries(e){let r=new t;for(let[n,i]of e)r.addFile(n,i);return r.build()}};var od=(a=>(a.Texture="texture",a.Sound="sound",a.Model="model",a.Map="map",a.Sprite="sprite",a.ConfigString="configString",a))(od||{}),Ws=class{constructor(){this.tracking=!1;this.entries=[];this.currentFrame=0;this.currentTime=0}startTracking(){this.tracking=!0,this.entries=[]}stopTracking(){this.tracking=!1;let e={byFrame:new Map,byTime:new Map,uniqueResources:new Map};for(let r of this.entries){e.byFrame.has(r.frame)||e.byFrame.set(r.frame,[]),e.byFrame.get(r.frame).push(r),e.byTime.has(r.timestamp)||e.byTime.set(r.timestamp,[]),e.byTime.get(r.timestamp).push(r);let n=`${r.type}:${r.path}`;e.uniqueResources.has(n)||e.uniqueResources.set(n,r)}return e}recordLoad(e,r,n,i){this.tracking&&this.entries.push({type:e,path:r,timestamp:this.currentTime,frame:this.currentFrame,size:n,pakSource:i})}setCurrentFrame(e){this.currentFrame=e}setCurrentTime(e){this.currentTime=e}};var Xs=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(r=>this.mountPak(r))}mountPak(e,r=0){let n=this.mounts.findIndex(i=>i.pak===e);n!==-1&&this.mounts.splice(n,1),this.mounts.push({pak:e,priority:r}),this.mounts.sort((i,o)=>o.priority-i.priority);for(let i of e.listEntries()){let o=_e(i.name),a={archive:e,entry:i,priority:r};this.files.has(o)||this.files.set(o,[]);let s=this.files.get(o),c=s.findIndex(l=>l.archive===e);c!==-1&&s.splice(c,1),s.unshift(a),s.sort((l,d)=>d.priority-l.priority)}return e}setPriority(e,r){this.mountPak(e,r)}getPaks(){return[...this.mounts].sort((e,r)=>e.priority-r.priority)}get mountedPaks(){return this.mounts.map(e=>e.pak)}hasFile(e){return this.files.has(_e(e))}getSource(e){let r=this.files.get(_e(e));if(!(!r||r.length===0))return r[0]}stat(e){let r=this.getSource(e);if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}getFileMetadata(e){let r=this.getSource(e);if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name,offset:r.entry.offset}}async readFile(e){let r=this.getSource(e);if(!r)throw new Error(`File not found in VFS: ${e}`);return r.archive.readFile(e)}async readBinaryFile(e){return this.readFile(e)}streamFile(e,r=1024*1024){let n=this.getSource(e);if(!n)throw new Error(`File not found in VFS: ${e}`);let{archive:i}=n,o=i.readFile(e),a=0,s=o.length;return new ReadableStream({pull(c){if(a>=s){c.close();return}let l=Math.min(a+r,s),d=o.slice(a,l);a=l,c.enqueue(d)}})}async readTextFile(e){let r=await this.readFile(e);return new TextDecoder("utf-8").decode(r)}list(e=""){let r=_e(e).replace(/\/+$|^\//g,""),n=[],i=new Set,o=r?`${r}/`:"";for(let[a,s]of this.files){let c=s[0];if(r&&!c.entry.name.startsWith(o))continue;let l=r?c.entry.name.slice(o.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((a,s)=>a.path.localeCompare(s.path)),{files:n,directories:[...i].sort()}}async listDirectory(e){return this.list(e).files}findByExtension(e){if(e instanceof RegExp)return this.searchFiles(e);if(Array.isArray(e))return this.listByExtension(e);let r=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let[i,o]of this.files){let a=o[0];a.entry.name.toLowerCase().endsWith(r)&&n.push({path:a.entry.name,size:a.entry.length,sourcePak:a.archive.name})}return n.sort((i,o)=>i.path.localeCompare(o.path))}listByExtension(e){let r=new Set(e.map(i=>i.startsWith(".")?i.toLowerCase():`.${i.toLowerCase()}`)),n=[];for(let[i,o]of this.files){let a=o[0],s=a.entry.name.toLowerCase();for(let c of r)if(s.endsWith(c)){n.push({path:a.entry.name,size:a.entry.length,sourcePak:a.archive.name});break}}return n.sort((i,o)=>i.path.localeCompare(o.path))}searchFiles(e){let r=[];for(let[n,i]of this.files){let o=i[0];e.test(o.entry.name)&&r.push({path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name})}return r.sort((n,i)=>n.path.localeCompare(i.path))}getPakInfo(){return this.mounts.map(e=>({filename:e.pak.name,entryCount:e.pak.listEntries().length,totalSize:e.pak.size,priority:e.priority}))}getDirectoryTree(){let e={name:"",path:"",files:[],directories:[]},r=new Map;r.set("",e);let n=Array.from(this.files.values()).map(i=>{let o=i[0];return{path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name}}).sort((i,o)=>i.path.localeCompare(o.path));for(let i of n){let o=i.path.split("/"),a=o.pop(),s="",c=e;for(let l of o){let d=s;s=s?`${s}/${l}`:l;let f=r.get(s);f||(f={name:l,path:s,files:[],directories:[]},c.directories.push(f),r.set(s,f)),c=f}c.files.push(i)}return e}};var ad=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"}]),ei=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"}},$s=class{constructor(e=ad){this.known=new Map;e.forEach(r=>this.known.set(this.normalizePakName(r.name),r))}validateArchive(e,r){let n=this.normalizePakName(r??("name"in e?e.name:"unknown")),i=e.checksum,o="size"in e?e.size:void 0,a=this.known.get(n);return a?a.checksum!==i?{name:n,checksum:i,expectedChecksum:a.checksum,status:"mismatch",size:o,description:a.description}:{name:n,checksum:i,expectedChecksum:a.checksum,status:"valid",size:o,description:a.description}:{name:n,checksum:i,status:"unknown",size:o}}assertValid(e,r){let n=this.validateArchive(e,r);if(n.status==="mismatch")throw new ei(n);return n}normalizePakName(e){let r=_e(e),n=r.split("/"),i=n.pop()??r,o=n.pop();return o?`${i}@${o}`:i}};var gn=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 Sg(t,e){if(typeof t.arrayBuffer=="function"){let r=await t.arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof FileReader<"u")return new Promise((r,n)=>{let i=new FileReader;i.onerror=()=>n(i.error??new Error("Unknown FileReader error")),i.onprogress=o=>{e?.({file:"blob",loadedBytes:o.loaded,totalBytes:o.total||t.size,state:"reading"})},i.onload=()=>{let o=i.result;o instanceof ArrayBuffer?r(o):n(new Error("Unexpected FileReader result"))},i.readAsArrayBuffer(t)});if(typeof Response<"u"){let r=await new Response(t).arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof t.stream=="function"){let r=t.stream().getReader(),n=[],i=0;for(;;){let{done:s,value:c}=await r.read();if(s)break;if(!c)continue;let l=c;n.push(l),i+=l.byteLength,e?.({file:"blob",loadedBytes:i,totalBytes:t.size,state:"reading"})}let o=new Uint8Array(i),a=0;for(let s of n)o.set(s,a),a+=s.byteLength;return o.buffer}throw new gn("blob",new Error("Unsupported Blob type"))}async function wg(t,e){if(t.data instanceof ArrayBuffer)return e?.({file:t.name,loadedBytes:t.data.byteLength,totalBytes:t.data.byteLength,state:"reading"}),t.data;if(t.data instanceof Blob){let n=t.data.size;return Sg(t.data,i=>e?.({...i,file:t.name,totalBytes:n}))}let r=t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength);return e?.({file:t.name,loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}async function Ks(t,e,r){let n=typeof r=="function"?{onProgress:r}:r??{},i=n.persistIndexes??!!n.pakIndexStore,o=n.enforceValidation??!!n.validator,a=n.allowUnknownPaks??!0,s=n.stopOnError??!1,c=[];for(let l of e)try{let d=await wg(l,n.onProgress),f=Ui.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&&o||m&&!a){let g=new ei(u);if(n.onError?.(l.name,g),s)throw new gn(l.name,g);c.push({archive:f,mounted:!1,validation:u});continue}}if(t.mountPak(f),i&&n.pakIndexStore)try{await n.pakIndexStore.persist(f)}catch(h){if(n.onError?.(l.name,h),s)throw new gn(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),s)throw new gn(l.name,d)}return c}var yn=class{constructor(e,r=1/0,n=()=>0){this._capacity=e;this._maxMemory=r;this.sizeCalculator=n;this.map=new Map;this.currentMemoryUsage=0;if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}get memoryUsage(){return this.currentMemoryUsage}get capacity(){return this._capacity}set capacity(e){if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero");this._capacity=e,this.evict()}get maxMemory(){return this._maxMemory}set maxMemory(e){this._maxMemory=e,this.evict()}has(e){return this.map.has(e)}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}set(e,r){let n=this.sizeCalculator(r);this.map.has(e)&&this.delete(e),this.map.set(e,r),this.currentMemoryUsage+=n,this.evict()}delete(e){let r=this.map.get(e);return r!==void 0?(this.currentMemoryUsage-=this.sizeCalculator(r),this.map.delete(e)):!1}clear(){this.map.clear(),this.currentMemoryUsage=0}entries(){return Array.from(this.map.entries()).reverse().map(([e,r])=>({key:e,value:r}))}evict(){for(;this.map.size>this._capacity;){let e=this.map.keys().next();if(!e.done)this.delete(e.value);else break}for(;this.currentMemoryUsage>this._maxMemory&&this.map.size>0;){let e=this.map.keys().next();if(!e.done)this.delete(e.value);else break}}};function Mg(t){return Array.isArray(t)?t:Array.from(t)}function sd(t){return Mg(t).map(e=>({name:e.name,data:e}))}async function Df(t,e,r){let n=sd(e);return Ks(t,n,r??{})}function zf(t,e){let r=i=>{i.preventDefault(),i.dataTransfer?.dropEffect&&(i.dataTransfer.dropEffect="copy")},n=i=>{i.preventDefault();let o=i.dataTransfer?.files;o&&o.length>0&&e(Array.from(o))};return t.addEventListener("dragover",r),t.addEventListener("drop",n),()=>{t.removeEventListener("dragover",r),t.removeEventListener("drop",n)}}function Of(t,e){let r=n=>{let i=n.target;!i||!i.files||i.files.length===0||(e(i.files),i.value="")};return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}var Ag="IBSP",Eg=38,Nf=19,Lg=8+Nf*8;var se=class extends Error{},Ni=class{constructor(e,r={}){this.vfs=e;this.options=r}async load(e){let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);if(n.set(new Uint8Array(r)),this.options.useWorker&&typeof Worker<"u")try{let i=await this.parseInWorker(n.buffer);return Hf(i)}catch(i){console.warn("BSP worker parsing failed, falling back to main thread",i)}return Qo(n.buffer)}parseInWorker(e){return new Promise((r,n)=>{if(!this.options.workerPath){n(new Error("No worker path provided"));return}let i=new Worker(this.options.workerPath,{type:"module"});i.onmessage=o=>{let{type:a,data:s,message:c}=o.data;a==="success"?(r(this.rehydrateData(s)),i.terminate()):(n(new Error(c)),i.terminate())},i.onerror=o=>{n(o),i.terminate()},i.postMessage(e,[e])})}rehydrateData(e){if(e.entities&&!e.entities.getUniqueClassnames){let r=e.entities;r.getUniqueClassnames=function(){let n=new Set;for(let i of this.entities)i.classname&&n.add(i.classname);return Array.from(n).sort()}}return e}};function Qo(t){let e=Tg(t);return Hf(e)}function Hf(t){return{...t,pickEntity(e){let r=null,n=1/0;for(let i of t.entities.entities){let o=i.properties.model;if(!o||!o.startsWith("*"))continue;let a=parseInt(o.substring(1),10);if(isNaN(a)||a<0||a>=t.models.length)continue;let s=t.models[a],c=Rg(e.origin,e.direction,s.mins,s.maxs);c!==null&&c<n&&(n=c,r={entity:i,model:s,distance:c})}return r},findLeaf(e){let n=t.models[0].headNode;for(;n>=0;){let i=t.nodes[n],o=t.planes[i.planeIndex];o.normal[0]*e[0]+o.normal[1]*e[1]+o.normal[2]*e[2]-o.dist>=0?n=i.children[0]:n=i.children[1]}return t.leafs[-(n+1)]},calculatePVS(e){let r=this.findLeaf(e);if(!(r.cluster===-1||!t.visibility)&&!(r.cluster<0||r.cluster>=t.visibility.clusters.length))return t.visibility.clusters[r.cluster].pvs}}}function Tg(t){if(t.byteLength<Lg)throw new se("BSP too small to contain header");let e=new DataView(t),r=String.fromCharCode(e.getUint8(0),e.getUint8(1),e.getUint8(2),e.getUint8(3));if(r!==Ag)throw new se(`Invalid BSP magic ${r}`);let n=e.getInt32(4,!0);if(n!==Eg)throw new se(`Unsupported BSP version ${n}`);let i=new Map;for(let E=0;E<Nf;E+=1){let T=e.getInt32(8+E*8,!0),M=e.getInt32(12+E*8,!0);if(T<0||M<0||T+M>t.byteLength)throw new se(`Invalid lump bounds for index ${E}`);i.set(E,{offset:T,length:M})}let o={version:n,lumps:i},a=Cg(t,i.get(0)),s=Ig(t,i.get(1)),c=Bg(t,i.get(2)),l=Fg(t,i.get(4)),d=kg(t,i.get(5)),f=Dg(t,i.get(6)),u=new Uint8Array(t,i.get(7).offset,i.get(7).length),h=Yg(f,i.get(7)),m=zg(t,i.get(8)),g=Og(t,i.get(11)),p=Ug(t,i.get(12)),y=Ng(t,i.get(13)),v=Hg(t,i.get(14)),x=Vg(t,i.get(15)),b=$g(t,i.get(9),i.get(10),m),_=Kg(t,i.get(3)),w=Gg(t,i.get(17)),S=Wg(t,i.get(18));return{header:o,entities:a,planes:s,vertices:c,nodes:l,texInfo:d,faces:f,lightMaps:u,lightMapInfo:h,leafs:m,leafLists:b,edges:g,surfEdges:p,models:y,brushes:v,brushSides:x,visibility:_,areas:w,areaPortals:S}}function Rg(t,e,r,n){let i=0,o=1/0;for(let a=0;a<3;a++)if(Math.abs(e[a])<1e-8){if(t[a]<r[a]||t[a]>n[a])return null}else{let s=1/e[a],c=(r[a]-t[a])*s,l=(n[a]-t[a])*s;if(c>l){let d=c;c=l,l=d}if(i=Math.max(i,c),o=Math.min(o,l),i>o)return null}return i}function Cg(t,e){let r=new TextDecoder().decode(new Uint8Array(t,e.offset,e.length)),n=Pg(r),i=n.find(o=>o.classname==="worldspawn");return{raw:r,entities:n,worldspawn:i,getUniqueClassnames(){let o=new Set;for(let a of n)a.classname&&o.add(a.classname);return Array.from(o).sort()}}}function Pg(t){let e=[],r=/\{([^}]*)\}/gms,n;for(;(n=r.exec(t))!==null;){let i=n[1],o={},a=/"([^\"]*)"\s+"([^\"]*)"/g,s;for(;(s=a.exec(i))!==null;)o[s[1]]=s[2];e.push({classname:o.classname,properties:o})}return e}function Ig(t,e){let r=new DataView(t,e.offset,e.length),n=e.length/20;if(n%1!==0)throw new se("Plane lump has invalid length");let i=[];for(let o=0;o<n;o+=1){let a=[r.getFloat32(o*20,!0),r.getFloat32(o*20+4,!0),r.getFloat32(o*20+8,!0)],s=r.getFloat32(o*20+12,!0),c=r.getInt32(o*20+16,!0);i.push({normal:a,dist:s,type:c})}return i}function Bg(t,e){let r=new DataView(t,e.offset,e.length),n=e.length/12;if(n%1!==0)throw new se("Vertex lump has invalid length");let i=[];for(let o=0;o<n;o+=1)i.push([r.getFloat32(o*12,!0),r.getFloat32(o*12+4,!0),r.getFloat32(o*12+8,!0)]);return i}function Fg(t,e){let r=new DataView(t,e.offset,e.length),n=28,i=e.length/n;if(i%1!==0)throw new se("Node lump has invalid length");let o=[];for(let a=0;a<i;a+=1){let s=a*n,c=r.getInt32(s,!0),l=[r.getInt32(s+4,!0),r.getInt32(s+8,!0)],d=[r.getInt16(s+12,!0),r.getInt16(s+14,!0),r.getInt16(s+16,!0)],f=[r.getInt16(s+18,!0),r.getInt16(s+20,!0),r.getInt16(s+22,!0)],u=r.getUint16(s+24,!0),h=r.getUint16(s+26,!0);o.push({planeIndex:c,children:l,mins:d,maxs:f,firstFace:u,numFaces:h})}return o}function kg(t,e){let r=new DataView(t,e.offset,e.length),n=76,i=e.length/n;if(i%1!==0)throw new se("TexInfo lump has invalid length");let o=[];for(let a=0;a<i;a+=1){let s=a*n,c=[r.getFloat32(s,!0),r.getFloat32(s+4,!0),r.getFloat32(s+8,!0)],l=r.getFloat32(s+12,!0),d=[r.getFloat32(s+16,!0),r.getFloat32(s+20,!0),r.getFloat32(s+24,!0)],f=r.getFloat32(s+28,!0),u=r.getInt32(s+32,!0),h=r.getInt32(s+36,!0),m=new Uint8Array(t,e.offset+s+40,32),g=new TextDecoder("utf-8").decode(m).replace(/\0.*$/,""),p=r.getInt32(s+72,!0);o.push({s:c,sOffset:l,t:d,tOffset:f,flags:u,value:h,texture:g,nextTexInfo:p})}return o}function Dg(t,e){let r=new DataView(t,e.offset,e.length),n=20,i=e.length/n;if(i%1!==0)throw new se("Face lump has invalid length");let o=[];for(let a=0;a<i;a+=1){let s=a*n,c=r.getUint16(s,!0),l=r.getInt16(s+2,!0),d=r.getInt32(s+4,!0),f=r.getInt16(s+8,!0),u=r.getInt16(s+10,!0),h=[r.getUint8(s+12),r.getUint8(s+13),r.getUint8(s+14),r.getUint8(s+15)],m=r.getInt32(s+16,!0);o.push({planeIndex:c,side:l,firstEdge:d,numEdges:f,texInfo:u,styles:h,lightOffset:m})}return o}function zg(t,e){let r=new DataView(t,e.offset,e.length),n=28,i=e.length/n;if(i%1!==0)throw new se("Leaf lump has invalid length");let o=[];for(let a=0;a<i;a+=1){let s=a*n,c=r.getInt32(s,!0),l=r.getInt16(s+4,!0),d=r.getInt16(s+6,!0),f=[r.getInt16(s+8,!0),r.getInt16(s+10,!0),r.getInt16(s+12,!0)],u=[r.getInt16(s+14,!0),r.getInt16(s+16,!0),r.getInt16(s+18,!0)],h=r.getUint16(s+20,!0),m=r.getUint16(s+22,!0),g=r.getUint16(s+24,!0),p=r.getUint16(s+26,!0);o.push({contents:c,cluster:l,area:d,mins:f,maxs:u,firstLeafFace:h,numLeafFaces:m,firstLeafBrush:g,numLeafBrushes:p})}return o}function Og(t,e){let r=new DataView(t,e.offset,e.length),n=4,i=e.length/n;if(i%1!==0)throw new se("Edge lump has invalid length");let o=[];for(let a=0;a<i;a+=1){let s=a*n;o.push({vertices:[r.getUint16(s,!0),r.getUint16(s+2,!0)]})}return o}function Ug(t,e){let r=e.length/4;if(r%1!==0)throw new se("SurfEdge lump has invalid length");let n=new DataView(t,e.offset,e.length),i=new Int32Array(r);for(let o=0;o<r;o+=1)i[o]=n.getInt32(o*4,!0);return i}function Ng(t,e){let r=new DataView(t,e.offset,e.length),n=48;if(e.length%n!==0)throw new se("Model lump has invalid length");let i=e.length/n,o=[];for(let a=0;a<i;a+=1){let s=a*n,c=[r.getFloat32(s,!0),r.getFloat32(s+4,!0),r.getFloat32(s+8,!0)],l=[r.getFloat32(s+12,!0),r.getFloat32(s+16,!0),r.getFloat32(s+20,!0)],d=[r.getFloat32(s+24,!0),r.getFloat32(s+28,!0),r.getFloat32(s+32,!0)],f=r.getInt32(s+36,!0),u=r.getInt32(s+40,!0),h=r.getInt32(s+44,!0);o.push({mins:c,maxs:l,origin:d,headNode:f,firstFace:u,numFaces:h})}return o}function Hg(t,e){let r=new DataView(t,e.offset,e.length),n=12,i=e.length/n;if(i%1!==0)throw new se("Brush lump has invalid length");let o=[];for(let a=0;a<i;a+=1){let s=a*n;o.push({firstSide:r.getInt32(s,!0),numSides:r.getInt32(s+4,!0),contents:r.getInt32(s+8,!0)})}return o}function Vg(t,e){let r=new DataView(t,e.offset,e.length),n=4,i=e.length/n;if(i%1!==0)throw new se("Brush side lump has invalid length");let o=[];for(let a=0;a<i;a+=1){let s=a*n;o.push({planeIndex:r.getUint16(s,!0),texInfo:r.getInt16(s+2,!0)})}return o}function Gg(t,e){let r=new DataView(t,e.offset,e.length),n=8,i=e.length/n;if(i%1!==0)throw new se("Area lump has invalid length");let o=[];for(let a=0;a<i;a+=1){let s=a*n,c=r.getInt32(s,!0),l=r.getInt32(s+4,!0);o.push({numAreaPortals:c,firstAreaPortal:l})}return o}function Wg(t,e){return Xg(t,e)}function Xg(t,e){let r=new DataView(t,e.offset,e.length),n=8,i=e.length/n;if(i%1!==0)throw new se("AreaPortal lump has invalid length");let o=[];for(let a=0;a<i;a+=1){let s=a*n,c=r.getInt32(s,!0),l=r.getInt32(s+4,!0);o.push({portalNumber:c,otherArea:l})}return o}function $g(t,e,r,n){let i=[],o=[],a=e.length/2,s=r.length/2,c=new DataView(t,e.offset,e.length),l=new DataView(t,r.offset,r.length);for(let d of n){if(d.firstLeafFace+d.numLeafFaces>a)throw new se("Leaf faces reference data past lump bounds");if(d.firstLeafBrush+d.numLeafBrushes>s)throw new se("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),o.push(u)}return{leafFaces:i,leafBrushes:o}}function Kg(t,e){if(e.length===0)return;if(e.length<4)throw new se("Visibility lump too small");let r=new DataView(t,e.offset,e.length),n=r.getInt32(0,!0),i=4+n*8;if(n<0||i>e.length)throw new se("Visibility lump truncated");let o=4,a=[];for(let s=0;s<n;s+=1){let c=r.getInt32(o,!0),l=r.getInt32(o+4,!0);o+=8;let d=e.offset+c,f=e.offset+l,u=e.offset+e.length;if(c<0||l<0||d>=u||f>=u)throw new se("Visibility offsets out of range");a.push({pvs:Uf(t,d,n,e),phs:Uf(t,f,n,e)})}return{numClusters:n,clusters:a}}function Uf(t,e,r,n){let i=Math.ceil(r/8),o=new Uint8Array(i),a=new Uint8Array(t),s=e,c=0,l=n.offset+n.length;for(;c<i;){if(s>=l)throw new se("Visibility data truncated");let d=a[s++];if(d!==0){o[c++]=d;continue}if(s>=l)throw new se("Visibility run exceeds lump bounds");let f=a[s++];for(let u=0;u<f&&c<i;u+=1)o[c++]=0}return o}function Yg(t,e){return t.map(r=>{if(!(r.lightOffset<0))return{offset:r.lightOffset,length:Math.max(0,e.length-r.lightOffset)}})}function Ys(t,e,r){if(t.lightOffset<0||t.lightOffset>=e.byteLength)return;let n=e.byteLength-t.lightOffset,i=Math.min(r?.length??n,n);if(!(i<=0))return e.subarray(t.lightOffset,t.lightOffset+i)}var qg=844121161,Zg=8,Vf=68,Ze=class extends Error{},Hi=class{constructor(e){this.vfs=e;this.cache=new Map}async load(e){if(this.cache.has(e))return this.cache.get(e);let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);n.set(r);let i=ld(n.buffer);return this.cache.set(e,i),i}get(e){return this.cache.get(e)}};function Gf(t,e,r){let n=[];for(let i=0;i<r;i+=1){let o=t.getUint8(e+i);if(o===0)break;n.push(o)}return String.fromCharCode(...n)}function Jo(t,e,r,n){if(r!==0&&(e<Vf||e+r>t.byteLength))throw new Ze(`${n} section is out of bounds`)}function jg(t){if(t.byteLength<Vf)throw new Ze("MD2 buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0);if(r!==qg)throw new Ze(`Invalid MD2 ident: ${r}`);if(n!==Zg)throw new Ze(`Unsupported MD2 version: ${n}`);let i={ident:r,version:n,skinWidth:e.getInt32(8,!0),skinHeight:e.getInt32(12,!0),frameSize:e.getInt32(16,!0),numSkins:e.getInt32(20,!0),numVertices:e.getInt32(24,!0),numTexCoords:e.getInt32(28,!0),numTriangles:e.getInt32(32,!0),numGlCommands:e.getInt32(36,!0),numFrames:e.getInt32(40,!0),offsetSkins:e.getInt32(44,!0),offsetTexCoords:e.getInt32(48,!0),offsetTriangles:e.getInt32(52,!0),offsetFrames:e.getInt32(56,!0),offsetGlCommands:e.getInt32(60,!0),offsetEnd:e.getInt32(64,!0),magic:r},o=40+i.numVertices*4;if(i.frameSize!==o)throw new Ze(`Unexpected frame size ${i.frameSize}, expected ${o}`);if(i.offsetEnd>t.byteLength)throw new Ze("MD2 offset_end exceeds buffer length");return i}function Qg(t,e){let r=e.numSkins*64;Jo(t,e.offsetSkins,r,"skins");let n=new DataView(t,e.offsetSkins,r),i=[];for(let o=0;o<e.numSkins;o+=1)i.push({name:Gf(n,o*64,64)});return i}function Jg(t,e){let r=e.numTexCoords*4;Jo(t,e.offsetTexCoords,r,"texcoords");let n=new DataView(t,e.offsetTexCoords,r),i=[];for(let o=0;o<e.numTexCoords;o+=1){let a=o*4;i.push({s:n.getInt16(a,!0),t:n.getInt16(a+2,!0)})}return i}function e1(t,e){let r=e.numTriangles*12;Jo(t,e.offsetTriangles,r,"triangles");let n=new DataView(t,e.offsetTriangles,r),i=[];for(let o=0;o<e.numTriangles;o+=1){let a=o*12,s=[n.getUint16(a,!0),n.getUint16(a+2,!0),n.getUint16(a+4,!0)],c=[n.getUint16(a+6,!0),n.getUint16(a+8,!0),n.getUint16(a+10,!0)];if(s.some(l=>l>=e.numVertices)||c.some(l=>l>=e.numTexCoords))throw new Ze("Triangle references out of range vertex or texcoord");i.push({vertexIndices:s,texCoordIndices:c})}return i}function t1(t,e){let r=e.numFrames*e.frameSize;Jo(t,e.offsetFrames,r,"frames");let n=[];for(let i=0;i<e.numFrames;i+=1){let o=e.offsetFrames+i*e.frameSize,a=new DataView(t,o,e.frameSize),s={x:a.getFloat32(0,!0),y:a.getFloat32(4,!0),z:a.getFloat32(8,!0)},c={x:a.getFloat32(12,!0),y:a.getFloat32(16,!0),z:a.getFloat32(20,!0)},l=Gf(a,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<e.numVertices;y+=1){let v=40+y*4,x=a.getUint8(v)*s.x+c.x,b=a.getUint8(v+1)*s.y+c.y,_=a.getUint8(v+2)*s.z+c.z;x<f&&(f=x),b<u&&(u=b),_<h&&(h=_),x>m&&(m=x),b>g&&(g=b),_>p&&(p=_);let w={x,y:b,z:_},S=a.getUint8(v+3),E=sr[S];if(!E)throw new Ze(`Invalid normal index ${S} in frame ${l}`);let T={x:E[0],y:E[1],z:E[2]};d.push({position:w,normalIndex:S,normal:T})}n.push({name:l,vertices:d,minBounds:{x:f,y:u,z:h},maxBounds:{x:m,y:g,z:p}})}return n}function r1(t,e){let r=e.numGlCommands*4;if(Jo(t,e.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(t,e.offsetGlCommands,r),i=[],o=0;for(;;){if(o+4>r)throw new Ze("GL command list ended unexpectedly");let a=n.getInt32(o,!0);if(o+=4,a===0)break;let s=Math.abs(a),c=[],l=s*12;if(o+l>r)throw new Ze("GL command vertex block exceeds buffer");for(let d=0;d<s;d+=1){let f=n.getFloat32(o,!0),u=n.getFloat32(o+4,!0),h=n.getInt32(o+8,!0);if(o+=12,h<0||h>=e.numVertices)throw new Ze("GL command references invalid vertex index");c.push({s:f,t:u,vertexIndex:h})}i.push({mode:a>0?"strip":"fan",vertices:c})}if(o!==r)throw new Ze("GL command list did not consume expected data");return i}function ld(t){let e=jg(t),r=Qg(t,e),n=Jg(t,e),i=e1(t,e),o=t1(t,e),a=r1(t,e);return{header:e,skins:r,texCoords:n,triangles:i,frames:o,glCommands:a}}function Wf(t){let e=[],r=0;for(;r<t.length;){let n=t[r].name,i=n.replace(/\d+$/,"")||n,o=r;for(;o+1<t.length&&(t[o+1].name.replace(/\d+$/,"")||t[o+1].name)===i;)o+=1;e.push({name:i,firstFrame:r,lastFrame:o}),r=o+1}return e}var Xf=860898377,n1=15,Yt=class extends Error{constructor(e){super(e),this.name="Md3ParseError"}};function ea(t,e,r){let n=new Uint8Array(t.buffer,t.byteOffset+e,r);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function i1(t){let e=(t>>8&255)*(2*Math.PI/255),r=(t&255)*(2*Math.PI/255),n=Math.sin(r);return{x:Math.cos(e)*n,y:Math.sin(e)*n,z:Math.cos(r)}}function qs(t,e,r,n){if(e<0||e+r>n)throw new Yt(`${t} exceeds buffer bounds`)}function o1(t){let e=t.getInt32(0,!0);if(e!==Xf)throw new Yt(`Invalid MD3 ident: ${e}`);let r=t.getInt32(4,!0);if(r!==n1)throw new Yt(`Unsupported MD3 version: ${r}`);let n=ea(t,8,64),i=t.getInt32(72,!0),o=t.getInt32(76,!0),a=t.getInt32(80,!0),s=t.getInt32(84,!0),c=t.getInt32(88,!0),l=t.getInt32(92,!0),d=t.getInt32(96,!0),f=t.getInt32(100,!0),u=t.getInt32(104,!0);if(o<=0||s<0||a<0)throw new Yt("Invalid MD3 counts");return{ident:e,version:r,name:n,flags:i,numFrames:o,numTags:a,numSurfaces:s,numSkins:c,ofsFrames:l,ofsTags:d,ofsSurfaces:f,ofsEnd:u,magic:e}}function a1(t,e){let r=[];qs("Frames",e.ofsFrames,e.numFrames*56,t.byteLength);for(let i=0;i<e.numFrames;i+=1){let o=e.ofsFrames+i*56;r.push({minBounds:{x:t.getFloat32(o,!0),y:t.getFloat32(o+4,!0),z:t.getFloat32(o+8,!0)},maxBounds:{x:t.getFloat32(o+12,!0),y:t.getFloat32(o+16,!0),z:t.getFloat32(o+20,!0)},localOrigin:{x:t.getFloat32(o+24,!0),y:t.getFloat32(o+28,!0),z:t.getFloat32(o+32,!0)},radius:t.getFloat32(o+36,!0),name:ea(t,o+40,16)})}return r}function s1(t,e){let r=[],i=e.numFrames*e.numTags*112;qs("Tags",e.ofsTags,i,t.byteLength);for(let o=0;o<e.numFrames;o+=1){let a=[];for(let s=0;s<e.numTags;s+=1){let c=e.ofsTags+(o*e.numTags+s)*112,l=c+64,d=l+12;a.push({name:ea(t,c,64),origin:{x:t.getFloat32(l,!0),y:t.getFloat32(l+4,!0),z:t.getFloat32(l+8,!0)},axis:[{x:t.getFloat32(d,!0),y:t.getFloat32(d+4,!0),z:t.getFloat32(d+8,!0)},{x:t.getFloat32(d+12,!0),y:t.getFloat32(d+16,!0),z:t.getFloat32(d+20,!0)},{x:t.getFloat32(d+24,!0),y:t.getFloat32(d+28,!0),z:t.getFloat32(d+32,!0)}]})}r.push(a)}return r}function l1(t,e){let r=t.getInt32(e,!0);if(r!==Xf)throw new Yt(`Invalid surface ident at ${e}: ${r}`);let n=ea(t,e+4,64),i=t.getInt32(e+68,!0),o=t.getInt32(e+72,!0),a=t.getInt32(e+76,!0),s=t.getInt32(e+80,!0),c=t.getInt32(e+84,!0),l=t.getInt32(e+88,!0),d=t.getInt32(e+92,!0),f=t.getInt32(e+96,!0),u=t.getInt32(e+100,!0),h=t.getInt32(e+104,!0);if(o<=0||s<=0||c<=0)throw new Yt(`Invalid surface counts for ${n}`);let m=h;qs(`Surface ${n}`,e,m,t.byteLength);let g=[],p=e+l;for(let S=0;S<c;S+=1){let E=p+S*12;g.push({indices:[t.getInt32(E,!0),t.getInt32(E+4,!0),t.getInt32(E+8,!0)]})}let y=[],v=e+d;for(let S=0;S<a;S+=1){let E=v+S*68;y.push({name:ea(t,E,64),shaderIndex:t.getInt32(E+64,!0)})}let x=[],b=e+f;for(let S=0;S<s;S+=1){let E=b+S*8;x.push({s:t.getFloat32(E,!0),t:t.getFloat32(E+4,!0)})}let _=[],w=e+u;for(let S=0;S<o;S+=1){let E=[];for(let T=0;T<s;T+=1){let M=w+(S*s+T)*8,C=t.getInt16(M,!0)/64,B=t.getInt16(M+2,!0)/64,F=t.getInt16(M+4,!0)/64,k=t.getUint16(M+6,!0);E.push({position:{x:C,y:B,z:F},latLng:k,normal:i1(k)})}_.push(E)}return{surface:{name:n,flags:i,numFrames:o,shaders:y,triangles:g,texCoords:x,vertices:_},nextOffset:e+h}}function cd(t){if(t.byteLength<108)throw new Yt("MD3 buffer too small for header");let e=new DataView(t),r=o1(e);qs("MD3 end",r.ofsEnd,0,t.byteLength);let n=a1(e,r),i=s1(e,r),o=[],a=r.ofsSurfaces;for(let s=0;s<r.numSurfaces;s+=1){let{surface:c,nextOffset:l}=l1(e,a);o.push(c),a=l}if(a!==r.ofsEnd)throw new Yt("Surface parsing did not reach ofsEnd");return{header:r,frames:n,tags:i,surfaces:o}}var Vi=class{constructor(e){this.vfs=e;this.cache=new Map}async load(e){if(this.cache.has(e))return this.cache.get(e);let r=await this.vfs.readFile(e),n=cd(r.slice().buffer);return this.cache.set(e,n),n}get(e){return this.cache.get(e)}};var c1=844317769,d1=2,$f=64,Kf=12,bn=class extends Error{};function u1(t,e,r){let n=[];for(let i=0;i<r;i+=1){let o=t.getUint8(e+i);if(o===0)break;n.push(o)}return String.fromCharCode(...n)}function dd(t){if(t.byteLength<Kf)throw new bn("Sprite buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0),i=e.getInt32(8,!0);if(r!==c1)throw new bn(`Invalid Sprite ident: ${r}`);if(n!==d1)throw new bn(`Unsupported Sprite version: ${n}`);let o=[],a=16+$f,s=Kf;for(let c=0;c<i;c+=1){if(s+a>t.byteLength)throw new bn("Sprite frame data exceeds buffer length");let l=e.getInt32(s,!0),d=e.getInt32(s+4,!0),f=e.getInt32(s+8,!0),u=e.getInt32(s+12,!0),h=u1(e,s+16,$f);o.push({width:l,height:d,originX:f,originY:u,name:h}),s+=a}return{ident:r,version:n,numFrames:i,frames:o}}var Gi=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);return n.set(r),dd(n.buffer)}};function Yf(t,e){let r=(t.sequence.end-t.sequence.start+1)/t.sequence.fps,n=t.sequence.loop!==!1,i=t.time+e;return n?i=(i%r+r)%r:i>r&&(i=r),{...t,time:Math.max(0,Math.min(i,r))}}function qf(t){let e=t.sequence.end-t.sequence.start+1,r=1/t.sequence.fps,n=t.sequence.loop!==!1,i=t.time/r;if(!n&&i>=e)return{frame0:t.sequence.end,frame1:t.sequence.end,lerp:0};let o=n?i%e:Math.min(i,e-1),a=Math.floor(o),s=t.sequence.start+a,c=a+1>=e?n?t.sequence.start:t.sequence.end:s+1,l=!n&&a>=e-1?0:o-a;return{frame0:s,frame1:c,lerp:l}}function Zf(t){return{sequence:t,time:0}}function jf(t,e,r){return{x:t.x+(e.x-t.x)*r,y:t.y+(e.y-t.y)*r,z:t.z+(e.z-t.z)*r}}var ta=class extends Error{constructor(e){super(e),this.name="WalParseError"}};function Zs(t){if(t.byteLength<100)throw new ta("WAL buffer too small");let e=new DataView(t),r=new Uint8Array(t,0,32),n=new TextDecoder("utf-8").decode(r).replace(/\0.*$/,"").trim(),i=e.getInt32(32,!0),o=e.getInt32(36,!0),a=[e.getInt32(40,!0),e.getInt32(44,!0),e.getInt32(48,!0),e.getInt32(52,!0)],s=new Uint8Array(t,56,32),c=new TextDecoder("utf-8").decode(s).replace(/\0.*$/,"").trim(),l=e.getInt32(88,!0),d=e.getInt32(92,!0),f=e.getInt32(96,!0);if(i<=0||o<=0)throw new ta("Invalid WAL dimensions");let u=[],h=i,m=o;for(let g=0;g<a.length;g+=1){let p=a[g],y=Math.max(1,h*m|0);if(p<=0||p+y>t.byteLength)throw new ta(`Invalid WAL mip offset for level ${g}`);let v=new Uint8Array(t,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:o,mipmaps:u,animName:c,flags:l,contents:d,value:f}}var ti=class extends Error{constructor(e){super(e),this.name="PcxParseError"}};function ra(t){if(t.byteLength<128)throw new ti("PCX buffer too small for header");let e=new DataView(t),r=e.getUint8(0),n=e.getUint8(2),i=e.getUint8(3),o=e.getUint16(4,!0),a=e.getUint16(6,!0),s=e.getUint16(8,!0),c=e.getUint16(10,!0);if(r!==10||n!==1)throw new ti("Unsupported PCX encoding");if(i!==8)throw new ti("Only 8bpp PCX files are supported");let l=s-o+1,d=c-a+1,f=e.getUint16(66,!0),u=t.byteLength-769;if(u<128||new DataView(t,u,1).getUint8(0)!==12)throw new ti("Missing PCX palette");let h=new Uint8Array(t,u+1,768),m=new Uint8Array(t,128,u-128),g=new Uint8Array(l*d),p=0,y=0;for(let v=0;v<d;v+=1){let x=0;for(;x<f&&p<m.length;){let b=1,_=m[p++];if((_&192)===192){if(b=_&63,p>=m.length)throw new ti("Unexpected end of PCX RLE data");_=m[p++]}for(let w=0;w<b&&x<f;w+=1)x<l&&(g[y++]=_),x+=1}}return{width:l,height:d,bitsPerPixel:i,pixels:g,palette:h}}function js(t){let e=new Uint8Array(t.width*t.height*4);for(let r=0;r<t.pixels.length;r+=1){let n=t.pixels[r],i=n*3,o=r*4;e[o]=t.palette[i],e[o+1]=t.palette[i+1],e[o+2]=t.palette[i+2],e[o+3]=n===255?0:255}return e}var Gr=class extends Error{constructor(e){super(e),this.name="TgaParseError"}};function ud(t){let e=new DataView(t);if(t.byteLength<18)throw new Gr("Buffer too small for TGA header");let r=e.getUint8(0),n=e.getUint8(1),i=e.getUint8(2),o=e.getUint16(12,!0),a=e.getUint16(14,!0),s=e.getUint8(16),c=e.getUint8(17);if(i!==2&&i!==10&&i!==3&&i!==11)throw new Gr(`Unsupported TGA image type: ${i} (only RGB/Grayscale supported)`);if(s!==24&&s!==32&&s!==8)throw new Gr(`Unsupported pixel depth: ${s} (only 8, 24, 32 bpp supported)`);let l=i>=9,d=i===3||i===11,f=s/8,u=18+r;if(n===1){let x=e.getUint16(5,!0),b=e.getUint8(7);u+=x*(b/8)}let h=o*a,m=new Uint8Array(h*4),g=(c&32)!==0,p=0,y=new Uint8Array(t),v=x=>{if(d){let b=y[u++];m[x]=b,m[x+1]=b,m[x+2]=b,m[x+3]=255}else{let b=y[u++],_=y[u++],w=y[u++],S=s===32?y[u++]:255;m[x]=w,m[x+1]=_,m[x+2]=b,m[x+3]=S}};if(l){let x=0;for(;x<h;){if(u>=t.byteLength)throw new Gr("Unexpected end of TGA RLE data");let b=y[u++],_=(b&127)+1,w=(b&128)!==0;if(x+_>h)throw new Gr("TGA RLE packet exceeds image bounds");if(w){let S=d?y[u]:y[u+2],E=d?y[u]:y[u+1],T=y[u],M=d?255:s===32?y[u+3]:255;u+=f;for(let C=0;C<_;C++){let B=(x+C)*4;m[B]=S,m[B+1]=E,m[B+2]=T,m[B+3]=M}}else for(let S=0;S<_;S++)v((x+S)*4);x+=_}}else for(let x=0;x<h;x++){if(u>=t.byteLength)throw new Gr("Unexpected end of TGA data");v(x*4)}if(!g){let x=o*4,b=new Uint8Array(x);for(let _=0;_<a/2;_++){let w=_*x,S=(a-1-_)*x;b.set(m.subarray(w,w+x)),m.set(m.subarray(S,S+x),w),m.set(b,S)}}return{width:o,height:a,bitsPerPixel:32,pixels:m}}function f1(t){let e=0;for(let r of t.levels)e+=r.rgba.byteLength;return e}var Wi=class{constructor(e={}){this.cache=new yn(e.capacity??128,e.maxMemory??256*1024*1024,f1)}get size(){return this.cache.size}get memoryUsage(){return this.cache.memoryUsage}get(e){return this.cache.get(e.toLowerCase())}set(e,r){this.cache.set(e.toLowerCase(),r)}clear(){this.cache.clear()}get capacity(){return this.cache.capacity}set capacity(e){this.cache.capacity=e}get maxMemory(){return this.cache.maxMemory}set maxMemory(e){this.cache.maxMemory=e}};function fd(t,e){let r=[];for(let n of t.mipmaps){let i=new Uint8Array(n.width*n.height*4);for(let o=0;o<n.data.length;o+=1){let a=n.data[o],s=a*3,c=o*4;i[c]=e[s],i[c+1]=e[s+1],i[c+2]=e[s+2],i[c+3]=a===255?0:255}r.push({level:n.level,width:n.width,height:n.height,rgba:i})}return{width:t.width,height:t.height,levels:r,source:"wal"}}function Qs(t){let e=js(t),r={level:0,width:t.width,height:t.height,rgba:e};return{width:t.width,height:t.height,levels:[r],source:"pcx"}}function Qf(t){let e={level:0,width:t.width,height:t.height,rgba:t.pixels};return{width:t.width,height:t.height,levels:[e],source:"tga"}}function Js(t,e){return fd(Zs(t),e)}var ri=class extends Error{constructor(e){super(e),this.name="WavParseError"}};function hd(t,e,r){return new TextDecoder("ascii").decode(new Uint8Array(t.buffer,t.byteOffset+e,r))}function el(t){if(t.byteLength<44)throw new ri("WAV buffer too small");let e=new DataView(t);if(hd(e,0,4)!=="RIFF"||hd(e,8,4)!=="WAVE")throw new ri("Invalid WAV header");let r=12,n=-1,i=-1,o=0,a=0;for(;r+8<=t.byteLength;){let m=hd(e,r,4),g=e.getUint32(r+4,!0),p=r+8;m==="fmt "?(n=p,o=g):m==="data"&&(i=p,a=g),r=p+g}if(n===-1||i===-1)throw new ri("Missing fmt or data chunk");let s=e.getUint16(n,!0),c=e.getUint16(n+2,!0),l=e.getUint32(n+4,!0),d=e.getUint16(n+14,!0);if(s!==1)throw new ri("Only PCM WAV is supported");let f=d/8,u=a/(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,v=0;if(d===8)v=e.getUint8(y),h[p]=(v-128)/128;else if(d===16)v=e.getInt16(y,!0),h[p]=v/32768;else if(d===24){let x=e.getUint8(y),b=e.getUint8(y+1),_=e.getInt8(y+2);v=x|b<<8|_<<16,h[p]=v/8388608}else throw new ri(`Unsupported bitsPerSample: ${d}`)}return{sampleRate:l,channels:c,bitsPerSample:d,samples:h}}var h1=(t,e=4294967295,r=79764919)=>{let n=new Int32Array(256),i,o,a,s=e;for(i=0;i<256;i++){for(a=i<<24,o=8;o>0;--o)a=2147483648&a?a<<1^r:a<<1;n[i]=a}for(i=0;i<t.length;i++)s=s<<8^n[255&(s>>24^t[i])];return s};var md=(t,e=h1)=>{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 o=new Uint8Array(t.length),a,s,c,l=!1,d=0,f=42,u=t.length>13&&t.substring(0,9)==="dynEncode",h=0;u&&(h=11,s=n(t.substring(9,h)),s<=1&&(h+=2,f=n(t.substring(11,h))),s===1&&(h+=8,c=(p=>new DataView(r(p).buffer).getInt32(0,!0))(t.substring(13,h))));let m=256-f;for(let p=h;p<t.length;p++)if(a=t.charCodeAt(p),a!==61||l){if(a===92&&p<t.length-5&&u){let y=t.charCodeAt(p+1);y!==117&&y!==85||(a=parseInt(t.substring(p+2,p+6),16),p+=5)}if(a>255){let y=i.get(a);y&&(a=y+127)}l&&(l=!1,a-=64),o[d++]=a<f&&a>0?a+m:a-f}else l=!0;let g=o.subarray(0,d);if(u&&s===1){let p=e(g);if(p!==c){let y="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",y+`
2
2
  `,"Expected: "+c+"; Got: "+p+`
3
- `,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(y)}}return g};function ge(){let t=Uint8Array,e=Float32Array;ge.modules||Object.defineProperties(ge,{modules:{value:new WeakMap},setModule:{value(r,n){ge.modules.set(r,Promise.resolve(n))}},getModule:{value(r,n){let i=ge.modules.get(r);return i||(n?i=WebAssembly.compile(cd(n)):(n=r.wasm,i=ge.inflateDynEncodeString(n).then(a=>WebAssembly.compile(a))),ge.modules.set(r,i)),i}},concatFloat32:{value(r,n){let i=new e(n),a=0,o=0;for(;a<r.length;)i.set(r[a],o),o+=r[a++].length;return i}},getDecodedAudio:{value:(r,n,i,a,o)=>({errors:r,channelData:n,samplesDecoded:i,sampleRate:a,bitDepth:o})},getDecodedAudioMultiChannel:{value(r,n,i,a,o,s){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(ge.concatFloat32(f,a))}return ge.getDecodedAudio(r,c,a,o,s)}},inflateDynEncodeString:{value(r){return r=cd(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*4’U((I-H(H*i0’J,^*DH+H-H*œšI+H,I*4)33H(H*H)“^*DH(H+H)^*@H+i§H)œi§›™3æ*).§K(iH“I/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)œ’J.H.W)(i)’c)(H,i)“I,H-i*’I-4)33i(I.*hH(V)(H+n5(H(i*’I-i(I,i)I.+hH,i*’J+iHn,hi(I-i*I,+hH,H/’H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)œ’J(H(V)(J(i)’c)(H)H(i)œ’H,c)(3H*i*’I*H,i)’I,4(3(-H(H,’W)(H-’I-H,i*’I,4)3(3(3H,H-’I1H+I,H.i)œH1V)(“J.i(v5(33H.-H(H,’i(c)(H,i*’I,4)333–)-§i*I*+§H*iHn,hiž73H,H(i)8(H+šJ+H)P*(H*’V)(J-“r,§H)P*,H.i)œ’H+H,“i)œ’V)(-H*i*’I*H+i)œI+H-H.’I.H,H-’i)œI,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7’H,c)(i)H+i´8’W)(œH,’I,H+i*’I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,’H-b((3H(P*0i)’I.4)3H-i¨*n5*H-iÅ*s,hiž73H-i)œJ+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)œJ+i¸7’V)(H(H+iø7’V)(8(’J/H(P*0J+s,hi73H+H,H.’J,’I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+’H.H+H/“’U((b((H(H(P*0i)’J+^*0H,i)“I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)žc)(H,i*’I,H+i)’I+4)33i)I-3H-3!2)0§K(i2“J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,’J(H,P*8J/s50H,H.i+’J0^*<i¦I*H.H,P*4J1’J.U(*H.U((J2›i')o5/H.U()I.H,H(^*<H0H1’U((H.i0œJ.i§›i0ži')™o5/H/H.H2šJ*H(’J.q50H,P*0J/H*’I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0’H(H1’U((b((H/i)’I/H(i)’I(H*i)“I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-’H(’i0c)(H(i*’I(4)33iè1i1H,i-’iÈ*8)Bi(I(+hH(ido,hH,i-’H(’i-c)(H(i*’I(4)33iÈ6iè6H,i-’iF8)BiØ1i)b((41-H,i-’H(’i/c)(H(i*’I(4)3(3(-H,i-’H(’i1c)(H(i*’I(4)3(3(-H,i-’H(’i0c)(H(i*’I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)’^*TH,H,iø-’^*PH,H,iX’^*LH,H,i(’^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iErš5)H(i©*’I1H-i)’I0i(i;H.i,’J(i(H(i(rCJ(“J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-’H-V)(i)œ’H,i+8(c)(H/i)“I/H-i*’I-H*i)’I*4)-H(i)œi¨1’I/+hH(H*o,hH,i-’H/V)(i)œ’i(c)(H/i*’I/H(i)’I(4)33i¤I*H,iø-’H,i¸)’H,i-’i;8)5+H0H1’I2i(I-+hH-H2p,hH,H,iP’8*J*i(p5-H*i7u,hH,i-’H-i)œ’H*c)(H-i)’I-4*3i(I/i+I.i+I(*h*h*hH*i8“6*(*)3H-m,hi£I*403H-i)œH,’W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.’J(H-’J.p,hi¢I*4.3H,i-’H-i)œ’I*+hH(,hH*H/c)(H*i*’I*H(i)“I(4)-H.I-4+3(3(33H,W)1m,hiŸI*4,3H,iø-’H,i¸)’H,i-’H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-’o5,3H,i(’H,iX’H,i-’H1i)œ’H08)J(,hi I*H(i(p5,H0H,V)šH,V)˜’o5,3H,H,iP’H,iH’8+I*4+3(3(3H,i$6i¬78+I*3H*H3šm5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2’L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(‹(›(«(Ë(ë( (*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7œ‰šœ‡Ž‰œš›*S7•œ‰Š”U”—Љ”›S0›‘–U œ`;ge.getModule(ge,i).then(a=>WebAssembly.instantiate(a,{})).then(({exports:a})=>{let o=new Map(Object.entries(a)),s=o.get("puff"),c=o.get("memory").buffer,l=new t(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),s(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 a=[],o=0;for(;o<n;)a.push(r.slice(o*i,o++*i+i));return a},this.allocateTypedArray=(r,n,i=!0)=>{let a=this._wasm.malloc(n.BYTES_PER_ELEMENT*r);return i&&this._pointers.add(a),{ptr:a,len:r,buf:new n(this._wasm.HEAP,a,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 a=i[r];a!==0;a=i[++r])n.push(a);return String.fromCharCode.apply(null,n)},this.addError=(r,n,i,a,o,s)=>{r.push({message:n,frameLength:i,frameNumber:a,inputBytes:o,outputSamples:s})},this.instantiate=(r,n)=>(n&&ge.setModule(r,n),this._wasm=new r(ge).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var qf=Mp($f(),1);var a1=()=>globalThis.Worker||qf.default,Xi=class extends a1(){constructor(e,r,n,i){ge.modules||new ge;let a=ge.modules.get(n);if(!a){let o="text/javascript",s,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 v=m,x={id:g},b;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"?v=v.then(()=>u.ready):p==="reset"?v=v.then(()=>u.reset()):(Object.assign(x,u[p](Array.isArray(y)?y.map(_=>new Uint8Array(_)):new Uint8Array(y))),b=x.channelData?x.channelData.map(_=>_.buffer):[]),v.then(()=>self.postMessage(x,b))}}).toString()})(${n}, ${ge}, ${i})`;try{s=typeof process.versions.node<"u"}catch{}a=s?`data:${o};base64,${Buffer.from(c).toString("base64")}`:URL.createObjectURL(new Blob([c],{type:o})),ge.modules.set(n,a)}super(a,{name:r}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:o})=>{let{id:s,...c}=o;this._enqueuedOperations.get(s)(c),this._enqueuedOperations.delete(s)},new i(ge).getModule().then(o=>{this.postToDecoder("init",{module:o,options:e})})}async postToDecoder(e,r){return new Promise(n=>{this.postMessage({command:e,id:this._id,data:r}),this._enqueuedOperations.set(this._id++,n)})}get ready(){return this.postToDecoder("ready")}async free(){await this.postToDecoder("free").finally(()=>{this.terminate()})}async reset(){await this.postToDecoder("reset")}};var tl=(t,e)=>{Object.defineProperty(t,"name",{value:e})};var ye=Symbol,Zf=", ",V=(()=>{let t="front",e="side",r="rear",n="left",i="center",a="right";return["",t+" ",e+" ",r+" "].map(o=>[[n,a],[n,a,i],[n,i,a],[i,n,a],[i]].flatMap(s=>s.map(c=>o+c).join(Zf)))})(),Mr="LFE",bn="monophonic (mono)",xn="stereo",ro="surround",Se=(t,...e)=>`${[bn,xn,`linear ${ro}`,"quadraphonic",`5.0 ${ro}`,`5.1 ${ro}`,`6.1 ${ro}`,`7.1 ${ro}`][t-1]} (${e.join(Zf)})`,no=[bn,Se(2,V[0][0]),Se(3,V[0][2]),Se(4,V[1][0],V[3][0]),Se(5,V[1][2],V[3][0]),Se(6,V[1][2],V[3][0],Mr),Se(7,V[1][2],V[2][0],V[3][4],Mr),Se(8,V[1][2],V[2][0],V[3][0],Mr)],jf=192e3,Qf=176400,rl=96e3,nl=88200,Jf=64e3,vn=48e3,Ki=44100,Yi=32e3,$i=24e3,qi=22050,Zi=16e3,il=12e3,al=11025,ji=8e3,eh=7350,lr="absoluteGranulePosition",X="bandwidth",tt="bitDepth",rt="bitrate",io=rt+"Maximum",ao=rt+"Minimum",oo=rt+"Nominal",Ar="buffer",so=Ar+"Fullness",me="codec",nt=me+"Frames",lo="coupledStreamCount",Qi="crc",co=Qi+"16",uo=Qi+"32",he="data",H="description",Er="duration",Ji="emphasis",fo="hasOpusPadding",Bt="header",_n="isContinuedPacket",ho="isCopyrighted",Sn="isFirstPage",mo="isHome",Ft="isLastPage",Gr="isOriginal",Wr="isPrivate",po="isVbr",Lt="layer",P="length",W="mode",Xr=W+"Extension",ol="mpeg",Kr=ol+"Version",go="numberAACFrames",yo="outputGain",ri="preSkip",bo="profile",sl=ye(),Yr="protection",dd="rawData",$t="segments",q="subarray",wn="version",ni="vorbis",xo=ni+"Comments",ea=ni+"Setup",ll="block",vo=ll+"ingStrategy",cl=ye(),$r=ll+"Size",Mn=ll+"size0",An=ll+"size1",_o=ye(),dl="channel",qr=dl+"MappingFamily",So=dl+"MappingTable",it=dl+"Mode",wo=ye(),N=dl+"s",th="copyright",Mo=th+"Id",Ao=th+"IdStart",Zr="frame",jr=Zr+"Count",Tt=Zr+"Length",ul="Number",Qr=Zr+ul,Lr=Zr+"Padding",G=Zr+"Size",rh="Rate",Eo="inputSample"+rh,ud="page",ii=ud+"Checksum",ta=ye(),En=ud+"SegmentTable",Te=ud+"Sequence"+ul,fd="sample",Lo=fd+ul,ee=fd+rh,Tr=ye(),te=fd+"s",fl="stream",To=fl+"Count",Ro=fl+"Info",Rr=fl+"Serial"+ul,hd=fl+"StructureVersion",md="total",ai=md+"BytesOut",oi=md+"Duration",si=md+"Samples",ae=ye(),qt=ye(),Co=ye(),Ln=ye(),cr=ye(),hl=ye(),pd=ye(),Tn=ye(),ue=ye(),Zt=ye(),jt=ye(),Cr=ye(),Rn=ye(),ml=ye(),dr=ye(),ur=ye(),Qt=ye(),pl=ye(),at=Uint8Array,Cn=DataView,fe="reserved",ot="bad",ra="free",Po="none",gl="16bit CRC";var gd=(t,e,r)=>{for(let n=0;n<t[P];n++){let i=e(n);for(let a=8;a>0;a--)i=r(i);t[n]=i}return t},s1=gd(new at(256),t=>t,t=>t&128?7^t<<1:t<<1),we=[gd(new Uint16Array(256),t=>t<<8,t=>t<<1^(t&32768?32773:0))],Me=[gd(new Uint32Array(256),t=>t,t=>t>>>1^(t&1)*3988292384)];for(let t=0;t<15;t++){we.push(new Uint16Array(256)),Me.push(new Uint32Array(256));for(let e=0;e<=255;e++)we[t+1][e]=we[0][we[t][e]>>>8]^we[t][e]<<8,Me[t+1][e]=Me[t][e]>>>8^Me[0][Me[t][e]&255]}var ih=t=>{let e=0,r=t[P];for(let n=0;n!==r;n++)e=s1[e^t[n]];return e},ah=t=>{let e=t[P],r=e-16,n=0,i=0;for(;i<=r;)n^=t[i++]<<8|t[i++],n=we[15][n>>8]^we[14][n&255]^we[13][t[i++]]^we[12][t[i++]]^we[11][t[i++]]^we[10][t[i++]]^we[9][t[i++]]^we[8][t[i++]]^we[7][t[i++]]^we[6][t[i++]]^we[5][t[i++]]^we[4][t[i++]]^we[3][t[i++]]^we[2][t[i++]]^we[1][t[i++]]^we[0][t[i++]];for(;i!==e;)n=(n&255)<<8^we[0][n>>8^t[i++]];return n},oh=t=>{let e=t[P],r=e-16,n=0,i=0;for(;i<=r;)n=Me[15][(t[i++]^n)&255]^Me[14][(t[i++]^n>>>8)&255]^Me[13][(t[i++]^n>>>16)&255]^Me[12][t[i++]^n>>>24]^Me[11][t[i++]]^Me[10][t[i++]]^Me[9][t[i++]]^Me[8][t[i++]]^Me[7][t[i++]]^Me[6][t[i++]]^Me[5][t[i++]]^Me[4][t[i++]]^Me[3][t[i++]]^Me[2][t[i++]]^Me[1][t[i++]]^Me[0][t[i++]];for(;i!==e;)n=Me[0][(n^t[i++])&255]^n>>>8;return n^-1},Bo=(...t)=>{let e=new at(t.reduce((r,n)=>r+n[P],0));return t.reduce((r,n)=>(e.set(n,r),r+n[P]),0),e},kt=t=>String.fromCharCode(...t),nh=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],Io=t=>nh[t&15]<<4|nh[t>>4],yl=class{constructor(e){this._data=e,this._pos=e[P]*8}set position(e){this._pos=e}get position(){return this._pos}read(e){let r=Math.floor(this._pos/8),n=this._pos%8;return this._pos-=e,(Io(this._data[r-1])<<8)+Io(this._data[r])>>7-n&255}},sh=(t,e)=>{try{return t.getBigInt64(e,!0)}catch{let r=t.getUint8(e+7)&128?-1:1,n=t.getUint32(e,!0),i=t.getUint32(e+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 Fo=class{constructor(e,r){this._onCodecHeader=e,this._onCodecUpdate=r,this[dr]()}[ur](){this._isEnabled=!0}[dr](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[ml](e,r){if(this._onCodecUpdate){this._bitrate!==e&&(this._bitrate=e,this._codecShouldUpdate=!0);let n=this._codecUpdateData.get(this._headerCache.get(this._currentHeader));this._codecShouldUpdate&&n&&this._onCodecUpdate({bitrate:e,...n},r),this._codecShouldUpdate=!1}}[ue](e){let r=this._headerCache.get(e);return r&&this._updateCurrentHeader(e),r}[Zt](e,r,n){this._isEnabled&&(this._codecHeaderSent||(this._onCodecHeader({...r}),this._codecHeaderSent=!0),this._updateCurrentHeader(e),this._headerCache.set(e,r),this._codecUpdateData.set(r,n))}_updateCurrentHeader(e){this._onCodecUpdate&&e!==this._currentHeader&&(this._codecShouldUpdate=!0,this._currentHeader=e)}};var Be=new WeakMap,Ze=new WeakMap;var st=class{constructor(e,r){this._codecParser=e,this._headerCache=r}*[pd](){let e;do{if(e=yield*this.Frame[jt](this._codecParser,this._headerCache,0),e)return e;this._codecParser[qt](1)}while(!0)}*[Tn](e){let r=yield*this[pd](),n=Ze.get(r)[P];if(e||this._codecParser._flushing||(yield*this.Header[ue](this._codecParser,this._headerCache,n)))return this._headerCache[ur](),this._codecParser[qt](n),this._codecParser[Ln](r),r;this._codecParser[cr](`Missing ${Zr} at ${n} bytes from current position.`,`Dropping current ${Zr} and trying again.`),this._headerCache[dr](),this._codecParser[qt](1)}};var li=class{constructor(e,r){Ze.set(this,{[Bt]:e}),this[he]=r}};var Dt=class extends li{static*[jt](e,r,n,i,a){let o=yield*e[ue](n,i,a);if(o){let s=Be.get(o)[Tt],c=Be.get(o)[te],l=(yield*n[ae](s,a))[q](0,s);return new r(o,l,c)}else return null}constructor(e,r,n){super(e,r),this[Bt]=e,this[te]=n,this[Er]=n/e[ee]*1e3,this[Qr]=null,this[ai]=null,this[si]=null,this[oi]=null,Ze.get(this)[P]=r[P]}};var yd="unsynchronizationFlag",bd="extendedHeaderFlag",xd="experimentalFlag",vd="footerPresent",ko=class t{static*getID3v2Header(e,r,n){let a={},o=yield*e[ae](3,n);if(o[0]!==73||o[1]!==68||o[2]!==51||(o=yield*e[ae](10,n),a[wn]=`id3v2.${o[3]}.${o[4]}`,o[5]&15)||(a[yd]=!!(o[5]&128),a[bd]=!!(o[5]&64),a[xd]=!!(o[5]&32),a[vd]=!!(o[5]&16),o[6]&128||o[7]&128||o[8]&128||o[9]&128))return null;let s=o[6]<<21|o[7]<<14|o[8]<<7|o[9];return a[P]=10+s,new t(a)}constructor(e){this[wn]=e[wn],this[yd]=e[yd],this[bd]=e[bd],this[xd]=e[xd],this[vd]=e[vd],this[P]=e[P]}};var zt=class{constructor(e){Be.set(this,e),this[tt]=e[tt],this[rt]=null,this[N]=e[N],this[it]=e[it],this[ee]=e[ee]}};var fh={0:[ra,ra,ra,ra,ra],16:[32,32,32,32,8],240:[ot,ot,ot,ot,ot]},bl=(t,e,r)=>8*((t+r)%e+e)*(1<<(t+r)/e)-8*e*(e/8|0);for(let t=2;t<15;t++)fh[t<<4]=[t*32,bl(t,4,0),bl(t,4,-1),bl(t,8,4),bl(t,8,0)];var l1=0,c1=1,d1=2,u1=3,lh=4,xl="bands ",vl=" to 31",ch={0:xl+4+vl,16:xl+8+vl,32:xl+12+vl,48:xl+16+vl},ci="bitrateIndex",Do="v2",Al="v1",_l="Intensity stereo ",Sl=", MS stereo ",wl="on",Ml="off",f1={0:_l+Ml+Sl+Ml,16:_l+wl+Sl+Ml,32:_l+Ml+Sl+wl,48:_l+wl+Sl+wl},_d={0:{[H]:fe},2:{[H]:"Layer III",[Lr]:1,[Xr]:f1,[Al]:{[ci]:d1,[te]:1152},[Do]:{[ci]:lh,[te]:576}},4:{[H]:"Layer II",[Lr]:1,[Xr]:ch,[te]:1152,[Al]:{[ci]:c1},[Do]:{[ci]:lh}},6:{[H]:"Layer I",[Lr]:4,[Xr]:ch,[te]:384,[Al]:{[ci]:l1},[Do]:{[ci]:u1}}},Sd="MPEG Version ",dh="ISO/IEC ",h1={0:{[H]:`${Sd}2.5 (later extension of MPEG 2)`,[Lt]:Do,[ee]:{0:al,4:il,8:ji,12:fe}},8:{[H]:fe},16:{[H]:`${Sd}2 (${dh}13818-3)`,[Lt]:Do,[ee]:{0:qi,4:$i,8:Zi,12:fe}},24:{[H]:`${Sd}1 (${dh}11172-3)`,[Lt]:Al,[ee]:{0:Ki,4:vn,8:Yi,12:fe}},length:P},m1={0:gl,1:Po},p1={0:Po,1:"50/15 ms",2:fe,3:"CCIT J.17"},uh={0:{[N]:2,[H]:xn},64:{[N]:2,[H]:"joint "+xn},128:{[N]:2,[H]:"dual channel"},192:{[N]:1,[H]:bn}},di=class t extends zt{static*[ue](e,r,n){let i={},a=yield*ko.getID3v2Header(e,r,n);a&&(yield*e[ae](a[P],n),e[qt](a[P]));let o=yield*e[ae](4,n),s=kt(o[q](0,4)),c=r[ue](s);if(c)return new t(c);if(o[0]!==255||o[1]<224)return null;let l=h1[o[1]&24];if(l[H]===fe)return null;let d=o[1]&6;if(_d[d][H]===fe)return null;let f={..._d[d],..._d[d][l[Lt]]};if(i[Kr]=l[H],i[Lt]=f[H],i[te]=f[te],i[Yr]=m1[o[1]&1],i[P]=4,i[rt]=fh[o[2]&240][f[ci]],i[rt]===ot||(i[ee]=l[ee][o[2]&12],i[ee]===fe)||(i[Lr]=o[2]&2&&f[Lr],i[Wr]=!!(o[2]&1),i[Tt]=Math.floor(125*i[rt]*i[te]/i[ee]+i[Lr]),!i[Tt]))return null;let u=o[3]&192;if(i[it]=uh[u][H],i[N]=uh[u][N],i[Xr]=f[Xr][o[3]&48],i[ho]=!!(o[3]&8),i[Gr]=!!(o[3]&4),i[Ji]=p1[o[3]&3],i[Ji]===fe)return null;i[tt]=16;{let{length:h,frameLength:m,samples:g,...p}=i;r[Zt](s,i,p)}return new t(i)}constructor(e){super(e),this[rt]=e[rt],this[Ji]=e[Ji],this[Lr]=e[Lr],this[ho]=e[ho],this[Gr]=e[Gr],this[Wr]=e[Wr],this[Lt]=e[Lt],this[Xr]=e[Xr],this[Kr]=e[Kr],this[Yr]=e[Yr]}};var zo=class t extends Dt{static*[jt](e,r,n){return yield*super[jt](di,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var Oo=class extends st{constructor(e,r,n){super(e,r),this.Frame=zo,this.Header=di,n(this[me])}get[me](){return ol}*[Cr](){return yield*this[Tn]()}};var g1={0:"MPEG-4",8:"MPEG-2"},y1={0:"valid",2:ot,4:ot,6:ot},b1={0:gl,1:Po},x1={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},v1={0:rl,4:nl,8:Jf,12:vn,16:Ki,20:Yi,24:$i,28:qi,32:Zi,36:il,40:al,44:ji,48:eh,52:fe,56:fe,60:"frequency is written explicitly"},hh={0:{[N]:0,[H]:"Defined in AOT Specific Config"},64:{[N]:1,[H]:bn},128:{[N]:2,[H]:Se(2,V[0][0])},192:{[N]:3,[H]:Se(3,V[1][3])},256:{[N]:4,[H]:Se(4,V[1][3],V[3][4])},320:{[N]:5,[H]:Se(5,V[1][3],V[3][0])},384:{[N]:6,[H]:Se(6,V[1][3],V[3][0],Mr)},448:{[N]:8,[H]:Se(8,V[1][3],V[2][0],V[3][0],Mr)}},ui=class t extends zt{static*[ue](e,r,n){let i={},a=yield*e[ae](7,n),o=kt([a[0],a[1],a[2],a[3]&252|a[6]&3]),s=r[ue](o);if(s)Object.assign(i,s);else{if(a[0]!==255||a[1]<240||(i[Kr]=g1[a[1]&8],i[Lt]=y1[a[1]&6],i[Lt]===ot))return null;let l=a[1]&1;i[Yr]=b1[l],i[P]=l?7:9,i[sl]=a[2]&192,i[Tr]=a[2]&60;let d=a[2]&2;if(i[bo]=x1[i[sl]],i[ee]=v1[i[Tr]],i[ee]===fe)return null;i[Wr]=!!d,i[wo]=(a[2]<<8|a[3])&448,i[it]=hh[i[wo]][H],i[N]=hh[i[wo]][N],i[Gr]=!!(a[3]&32),i[mo]=!!(a[3]&8),i[Mo]=!!(a[3]&8),i[Ao]=!!(a[3]&4),i[tt]=16,i[te]=1024,i[go]=a[6]&3;{let{length:f,channelModeBits:u,profileBits:h,sampleRateBits:m,frameLength:g,samples:p,numberAACFrames:y,...v}=i;r[Zt](o,i,v)}}if(i[Tt]=(a[3]<<11|a[4]<<3|a[5]>>5)&8191,!i[Tt])return null;let c=(a[5]<<6|a[6]>>2)&2047;return i[so]=c===2047?"VBR":c,new t(i)}constructor(e){super(e),this[Mo]=e[Mo],this[Ao]=e[Ao],this[so]=e[so],this[mo]=e[mo],this[Gr]=e[Gr],this[Wr]=e[Wr],this[Lt]=e[Lt],this[P]=e[P],this[Kr]=e[Kr],this[go]=e[go],this[bo]=e[bo],this[Yr]=e[Yr]}get audioSpecificConfig(){let e=Be.get(this),r=e[sl]+64<<5|e[Tr]<<5|e[wo]>>3,n=new at(2);return new Cn(n[Ar]).setUint16(0,r,!1),n}};var Uo=class t extends Dt{static*[jt](e,r,n){return yield*super[jt](ui,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var No=class extends st{constructor(e,r,n){super(e,r),this.Frame=Uo,this.Header=ui,n(this[me])}get[me](){return"aac"}*[Cr](){return yield*this[Tn]()}};var Pn=class t extends Dt{static _getFrameFooterCrc16(e){return(e[e[P]-2]<<8)+e[e[P]-1]}static[pl](e){let r=t._getFrameFooterCrc16(e),n=ah(e[q](0,-2));return r===n}constructor(e,r,n){r[Ro]=n,r[co]=t._getFrameFooterCrc16(e),super(r,e,Be.get(r)[te])}};var mh="get from STREAMINFO metadata block",_1={0:"Fixed",1:"Variable"},ph={0:fe,16:192};for(let t=2;t<16;t++)ph[t<<4]=t<6?576*2**(t-2):2**t;var S1={0:mh,1:nl,2:Qf,3:jf,4:ji,5:Zi,6:qi,7:$i,8:Yi,9:Ki,10:vn,11:rl,15:ot},w1={0:{[N]:1,[H]:bn},16:{[N]:2,[H]:Se(2,V[0][0])},32:{[N]:3,[H]:Se(3,V[0][1])},48:{[N]:4,[H]:Se(4,V[1][0],V[3][0])},64:{[N]:5,[H]:Se(5,V[1][1],V[3][0])},80:{[N]:6,[H]:Se(6,V[1][1],Mr,V[3][0])},96:{[N]:7,[H]:Se(7,V[1][1],Mr,V[3][4],V[2][0])},112:{[N]:8,[H]:Se(8,V[1][1],Mr,V[3][0],V[2][0])},128:{[N]:2,[H]:`${xn} (left, diff)`},144:{[N]:2,[H]:`${xn} (diff, right)`},160:{[N]:2,[H]:`${xn} (avg, diff)`},176:fe,192:fe,208:fe,224:fe,240:fe},M1={0:mh,2:8,4:12,6:fe,8:16,10:20,12:24,14:fe},In=class t extends zt{static _decodeUTF8Int(e){if(e[0]>254)return null;if(e[0]<128)return{value:e[0],length:1};let r=1;for(let o=64;o&e[0];o>>=1)r++;let n=r-1,i=0,a=0;for(;n>0;a+=6,n--){if((e[n]&192)!==128)return null;i|=(e[n]&63)<<a}return i|=(e[n]&127>>r)<<a,{value:i,length:r}}static[Qt](e,r){let n={[ae]:function*(){return e}};return t[ue](n,r,0).next().value}static*[ue](e,r,n){let i=yield*e[ae](6,n);if(i[0]!==255||!(i[1]===248||i[1]===249))return null;let a={},o=kt(i[q](0,4)),s=r[ue](o);if(s)Object.assign(a,s);else{if(a[cl]=i[1]&1,a[vo]=_1[a[cl]],a[_o]=i[2]&240,a[Tr]=i[2]&15,a[$r]=ph[a[_o]],a[$r]===fe||(a[ee]=S1[a[Tr]],a[ee]===ot)||i[3]&1)return null;let l=w1[i[3]&240];if(l===fe||(a[N]=l[N],a[it]=l[H],a[tt]=M1[i[3]&14],a[tt]===fe))return null}a[P]=5,i=yield*e[ae](a[P]+8,n);let c=t._decodeUTF8Int(i[q](4));if(!c||(a[cl]?a[Lo]=c.value:a[Qr]=c.value,a[P]+=c[P],a[_o]===96?(i[P]<a[P]&&(i=yield*e[ae](a[P],n)),a[$r]=i[a[P]-1]+1,a[P]+=1):a[_o]===112&&(i[P]<a[P]&&(i=yield*e[ae](a[P],n)),a[$r]=(i[a[P]-1]<<8)+i[a[P]]+1,a[P]+=2),a[te]=a[$r],a[Tr]===12?(i[P]<a[P]&&(i=yield*e[ae](a[P],n)),a[ee]=i[a[P]-1]*1e3,a[P]+=1):a[Tr]===13?(i[P]<a[P]&&(i=yield*e[ae](a[P],n)),a[ee]=(i[a[P]-1]<<8)+i[a[P]],a[P]+=2):a[Tr]===14&&(i[P]<a[P]&&(i=yield*e[ae](a[P],n)),a[ee]=((i[a[P]-1]<<8)+i[a[P]])*10,a[P]+=2),i[P]<a[P]&&(i=yield*e[ae](a[P],n)),a[Qi]=i[a[P]-1],a[Qi]!==ih(i[q](0,a[P]-1))))return null;if(!s){let{blockingStrategyBits:l,frameNumber:d,sampleNumber:f,samples:u,sampleRateBits:h,blockSizeBits:m,crc:g,length:p,...y}=a;r[Zt](o,a,y)}return new t(a)}constructor(e){super(e),this[co]=null,this[vo]=e[vo],this[$r]=e[$r],this[Qr]=e[Qr],this[Lo]=e[Lo],this[Ro]=null}};var A1=2,E1=512*1024,fi=class extends st{constructor(e,r,n){super(e,r),this.Frame=Pn,this.Header=In,n(this[me])}get[me](){return"flac"}*_getNextFrameSyncOffset(e){let r=yield*this._codecParser[ae](2,0),n=r[P]-2;for(;e<n;){if(r[e]===255){let a=r[e+1];if(a===248||a===249)break;a!==255&&e++}e++}return e}*[Cr](){do{let e=yield*In[ue](this._codecParser,this._headerCache,0);if(e){let r=Be.get(e)[P]+A1;for(;r<=E1;){if(this._codecParser._flushing||(yield*In[ue](this._codecParser,this._headerCache,r))){let n=yield*this._codecParser[ae](r);if(this._codecParser._flushing||(n=n[q](0,r)),Pn[pl](n)){let i=new Pn(n,e);return this._headerCache[ur](),this._codecParser[qt](r),this._codecParser[Ln](i),i}}r=yield*this._getNextFrameSyncOffset(r+1)}this._codecParser[cr](`Unable to sync FLAC frame after searching ${r} bytes.`),this._codecParser[qt](r)}else this._codecParser[qt](yield*this._getNextFrameSyncOffset(1))}while(!0)}[Rn](e){return e[Te]===0?(this._headerCache[ur](),this._streamInfo=e[he][q](13)):e[Te]===1||(e[nt]=Ze.get(e)[$t].map(r=>{let n=In[Qt](r,this._headerCache);if(n)return new Pn(r,n,this._streamInfo);this._codecParser[cr]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(r=>!!r)),e}};var hi=class t{static*[ue](e,r,n){let i={},a=yield*e[ae](28,n);if(a[0]!==79||a[1]!==103||a[2]!==103||a[3]!==83||(i[hd]=a[4],a[5]&248))return null;i[Ft]=!!(a[5]&4),i[Sn]=!!(a[5]&2),i[_n]=!!(a[5]&1);let s=new Cn(at.from(a[q](0,28))[Ar]);i[lr]=sh(s,6),i[Rr]=s.getInt32(14,!0),i[Te]=s.getInt32(18,!0),i[ii]=s.getInt32(22,!0);let c=a[26];i[P]=c+27,a=yield*e[ae](i[P],n),i[Tt]=0,i[En]=[],i[ta]=at.from(a[q](27,i[P]));for(let l=0,d=0;l<c;l++){let f=i[ta][l];i[Tt]+=f,d+=f,(f!==255||l===c-1)&&(i[En].push(d),d=0)}return new t(i)}constructor(e){Be.set(this,e),this[lr]=e[lr],this[_n]=e[_n],this[Sn]=e[Sn],this[Ft]=e[Ft],this[En]=e[En],this[Te]=e[Te],this[ii]=e[ii],this[Rr]=e[Rr]}};var Ho=class t extends li{static*[jt](e,r,n){let i=yield*hi[ue](e,r,n);if(i){let a=Be.get(i)[Tt],o=Be.get(i)[P],s=o+a,c=(yield*e[ae](s,0))[q](0,s),l=c[q](o,s);return new t(i,l,c)}else return null}constructor(e,r,n){super(e,r),Ze.get(this)[P]=n[P],this[nt]=[],this[dd]=n,this[lr]=e[lr],this[uo]=e[ii],this[Er]=0,this[_n]=e[_n],this[Sn]=e[Sn],this[Ft]=e[Ft],this[Te]=e[Te],this[te]=0,this[Rr]=e[Rr]}};var na=class extends Dt{constructor(e,r,n){super(r,e,n)}};var gh={0:no.slice(0,2),1:no},Jt="SILK-only",je="CELT-only",El="Hybrid",Bn="narrowband",Ll="medium-band",Fn="wideband",ia="super-wideband",aa="fullband",L1={0:{[W]:Jt,[X]:Bn,[G]:10},8:{[W]:Jt,[X]:Bn,[G]:20},16:{[W]:Jt,[X]:Bn,[G]:40},24:{[W]:Jt,[X]:Bn,[G]:60},32:{[W]:Jt,[X]:Ll,[G]:10},40:{[W]:Jt,[X]:Ll,[G]:20},48:{[W]:Jt,[X]:Ll,[G]:40},56:{[W]:Jt,[X]:Ll,[G]:60},64:{[W]:Jt,[X]:Fn,[G]:10},72:{[W]:Jt,[X]:Fn,[G]:20},80:{[W]:Jt,[X]:Fn,[G]:40},88:{[W]:Jt,[X]:Fn,[G]:60},96:{[W]:El,[X]:ia,[G]:10},104:{[W]:El,[X]:ia,[G]:20},112:{[W]:El,[X]:aa,[G]:10},120:{[W]:El,[X]:aa,[G]:20},128:{[W]:je,[X]:Bn,[G]:2.5},136:{[W]:je,[X]:Bn,[G]:5},144:{[W]:je,[X]:Bn,[G]:10},152:{[W]:je,[X]:Bn,[G]:20},160:{[W]:je,[X]:Fn,[G]:2.5},168:{[W]:je,[X]:Fn,[G]:5},176:{[W]:je,[X]:Fn,[G]:10},184:{[W]:je,[X]:Fn,[G]:20},192:{[W]:je,[X]:ia,[G]:2.5},200:{[W]:je,[X]:ia,[G]:5},208:{[W]:je,[X]:ia,[G]:10},216:{[W]:je,[X]:ia,[G]:20},224:{[W]:je,[X]:aa,[G]:2.5},232:{[W]:je,[X]:aa,[G]:5},240:{[W]:je,[X]:aa,[G]:10},248:{[W]:je,[X]:aa,[G]:20}},oa=class t extends zt{static[Qt](e,r,n){let i={};if(i[N]=e[9],i[qr]=e[18],i[P]=i[qr]!==0?21+i[N]:19,e[P]<i[P])throw new Error("Out of data while inside an Ogg Page");let a=r[0]&3,o=a===3?2:1,s=kt(e[q](0,i[P]))+kt(r[q](0,o)),c=n[ue](s);if(c)return new t(c);if(s.substr(0,8)!=="OpusHead"||e[8]!==1)return null;i[he]=at.from(e[q](0,i[P]));let l=new Cn(i[he][Ar]);if(i[tt]=16,i[ri]=l.getUint16(10,!0),i[Eo]=l.getUint32(12,!0),i[ee]=vn,i[yo]=l.getInt16(16,!0),i[qr]in gh&&(i[it]=gh[i[qr]][i[N]-1],!i[it]))return null;i[qr]!==0&&(i[To]=e[19],i[lo]=e[20],i[So]=[...e[q](21,i[N]+21)]);let d=L1[248&r[0]];switch(i[W]=d[W],i[X]=d[X],i[G]=d[G],a){case 0:i[jr]=1;break;case 1:case 2:i[jr]=2;break;case 3:i[po]=!!(128&r[1]),i[fo]=!!(64&r[1]),i[jr]=63&r[1];break;default:return null}{let{length:f,data:u,channelMappingFamily:h,...m}=i;n[Zt](s,i,m)}return new t(i)}constructor(e){super(e),this[he]=e[he],this[X]=e[X],this[qr]=e[qr],this[So]=e[So],this[lo]=e[lo],this[jr]=e[jr],this[G]=e[G],this[fo]=e[fo],this[Eo]=e[Eo],this[po]=e[po],this[W]=e[W],this[yo]=e[yo],this[ri]=e[ri],this[To]=e[To]}};var Vo=class extends st{constructor(e,r,n){super(e,r),this.Frame=na,this.Header=oa,n(this[me]),this._identificationHeader=null,this._preSkipRemaining=null}get[me](){return"opus"}[Rn](e){return e[Te]===0?(this._headerCache[ur](),this._identificationHeader=e[he]):e[Te]===1||(e[nt]=Ze.get(e)[$t].map(r=>{let n=oa[Qt](this._identificationHeader,r,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[ri]);let i=n[G]*n[jr]/1e3*n[ee];return this._preSkipRemaining>0&&(this._preSkipRemaining-=i,i=this._preSkipRemaining<0?-this._preSkipRemaining:0),new na(r,n,i)}this._codecParser[hl]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),e}};var sa=class extends Dt{constructor(e,r,n){super(r,e,n)}};var wd={};for(let t=0;t<8;t++)wd[t+6]=2**(6+t);var Go=class t extends zt{static[Qt](e,r,n,i){if(e[P]<30)throw new Error("Out of data while inside an Ogg Page");let a=kt(e[q](0,30)),o=r[ue](a);if(o)return new t(o);let s={[P]:30};if(a.substr(0,7)!=="vorbis")return null;s[he]=at.from(e[q](0,30));let c=new Cn(s[he][Ar]);if(s[wn]=c.getUint32(7,!0),s[wn]!==0||(s[N]=e[11],s[it]=no[s[N]-1]||"application defined",s[ee]=c.getUint32(12,!0),s[io]=c.getInt32(16,!0),s[oo]=c.getInt32(20,!0),s[ao]=c.getInt32(24,!0),s[An]=wd[(e[28]&240)>>4],s[Mn]=wd[e[28]&15],s[Mn]>s[An])||e[29]!==1)return null;s[tt]=32,s[ea]=i,s[xo]=n;{let{length:l,data:d,version:f,vorbisSetup:u,vorbisComments:h,...m}=s;r[Zt](a,s,m)}return new t(s)}constructor(e){super(e),this[io]=e[io],this[ao]=e[ao],this[oo]=e[oo],this[Mn]=e[Mn],this[An]=e[An],this[he]=e[he],this[xo]=e[xo],this[ea]=e[ea]}};var Wo=class extends st{constructor(e,r,n){super(e,r),this.Frame=sa,n(this[me]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[me](){return ni}[Rn](e){e[nt]=[];for(let r of Ze.get(e)[$t])if(r[0]===1)this._headerCache[ur](),this._identificationHeader=e[he],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=Go[Qt](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?e[nt].push(new sa(r,n,this._getSamples(r,n))):this._codecParser[logError]("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")}return e}_getSamples(e,r){let i=this._mode.blockFlags[e[0]>>1&this._mode.mask]?r[An]:r[Mn],a=this._prevBlockSize===null?0:(this._prevBlockSize+i)/4;return this._prevBlockSize=i,a}_parseSetupHeader(e){let r=new yl(e),n={count:0,blockFlags:[]};for(;(r.read(1)&1)!==1;);let i;for(;n.count<64&&r.position>0;){Io(r.read(8));let a=0;for(;r.read(8)===0&&a++<3;);if(a===4)i=r.read(7),n.blockFlags.unshift(i&1),r.position+=6,n.count++;else{((Io(i)&126)>>1)+1!==n.count&&this._codecParser[cr]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var Md=class{constructor(e,r,n){this._codecParser=e,this._headerCache=r,this._onCodec=n,this._continuedPacket=new at,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[me](){return this._codec||""}_updateCodec(e,r){this._codec!==e&&(this._headerCache[dr](),this._parser=new r(this._codecParser,this._headerCache,this._onCodec),this._codec=e)}_checkCodecSupport({data:e}){let r=kt(e[q](0,8));switch(r){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",Vo),!0;case(/^\x7fFLAC/.test(r)&&r):return this._updateCodec("flac",fi),!0;case(/^\x01vorbis/.test(r)&&r):return this._updateCodec(ni,Wo),!0;default:return!1}}_checkPageSequenceNumber(e){e[Te]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&e[Te]>1&&this._codecParser[cr]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[Te]}`),this._pageSequenceNumber=e[Te]}_parsePage(e){this._isSupported===null&&(this._pageSequenceNumber=e[Te],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);let r=Ze.get(e),n=Be.get(r[Bt]),i=0;if(r[$t]=n[En].map(a=>e[he][q](i,i+=a)),this._continuedPacket[P]&&(r[$t][0]=Bo(this._continuedPacket,r[$t][0]),this._continuedPacket=new at),n[ta][n[ta][P]-1]===255&&(this._continuedPacket=Bo(this._continuedPacket,r[$t].pop())),this._previousAbsoluteGranulePosition!==null&&(e[te]=Number(e[lr]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[lr],this._isSupported){let a=this._parser[Rn](e);return this._codecParser[Ln](a),a}else return e}},Xo=class extends st{constructor(e,r,n){super(e,r),this._onCodec=n,this.Frame=Ho,this.Header=hi,this._streams=new Map,this._currentSerialNumber=null}get[me](){let e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[Cr](){let e=yield*this[Tn](!0);this._currentSerialNumber=e[Rr];let r=this._streams.get(this._currentSerialNumber);return r||(r=new Md(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,r)),e[Ft]&&this._streams.delete(this._currentSerialNumber),r._parsePage(e)}};var Ad=()=>{},Ko=class{constructor(e,{onCodec:r,onCodecHeader:n,onCodecUpdate:i,enableLogging:a=!1,enableFrameCRC32:o=!0}={}){this._inputMimeType=e,this._onCodec=r||Ad,this._onCodecHeader=n||Ad,this._onCodecUpdate=i,this._enableLogging=a,this._crc32=o?oh:Ad,this[dr]()}get[me](){return this._parser?this._parser[me]:""}[dr](){this._headerCache=new Fo(this._onCodecHeader,this._onCodecUpdate),this._generator=this._getGenerator(),this._generator.next()}*flush(){this._flushing=!0;for(let e=this._generator.next();e.value;e=this._generator.next())yield e.value;this._flushing=!1,this[dr]()}*parseChunk(e){for(let r=this._generator.next(e);r.value;r=this._generator.next())yield r.value}parseAll(e){return[...this.parseChunk(e),...this.flush()]}*_getGenerator(){if(this._inputMimeType.match(/aac/))this._parser=new No(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new Oo(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new fi(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new Xo(this,this._headerCache,this._onCodec);else throw new Error(`Unsupported Codec ${mimeType}`);for(this._frameNumber=0,this._currentReadPosition=0,this._totalBytesIn=0,this._totalBytesOut=0,this._totalSamples=0,this._sampleRate=void 0,this._rawData=new Uint8Array(0);;){let e=yield*this._parser[Cr]();e&&(yield e)}}*[ae](e=0,r=0){let n;for(;this._rawData[P]<=e+r;){if(n=yield,this._flushing)return this._rawData[q](r);n&&(this._totalBytesIn+=n[P],this._rawData=Bo(this._rawData,n))}return this._rawData[q](r)}[qt](e){this._currentReadPosition+=e,this._rawData=this._rawData[q](e)}[Co](e){this._sampleRate=e[Bt][ee],e[Bt][rt]=e[Er]>0?Math.round(e[he][P]/e[Er])*8:0,e[Qr]=this._frameNumber++,e[ai]=this._totalBytesOut,e[si]=this._totalSamples,e[oi]=this._totalSamples/this._sampleRate*1e3,e[uo]=this._crc32(e[he]),this._headerCache[ml](e[Bt][rt],e[oi]),this._totalBytesOut+=e[he][P],this._totalSamples+=e[te]}[Ln](e){if(e[nt]){if(e[Ft]){let r=e[te];e[nt].forEach(n=>{let i=n[te];r<i&&(n[te]=r>0?r:0,n[Er]=n[te]/n[Bt][ee]*1e3),r-=i,this[Co](n)})}else e[te]=0,e[nt].forEach(r=>{e[te]+=r[te],this[Co](r)});e[Er]=e[te]/this._sampleRate*1e3||0,e[si]=this._totalSamples,e[oi]=this._totalSamples/this._sampleRate*1e3||0,e[ai]=this._totalBytesOut}else this[Co](e)}_log(e,r){if(this._enableLogging){let n=[`${me}: ${this[me]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${ai}: ${this._totalBytesOut}`],i=Math.max(...n.map(a=>a[P]));r.push(`--stats--${"-".repeat(i-9)}`,...n,"-".repeat(i)),e("codec-parser",r.reduce((a,o)=>a+`
4
- `+o,""))}}[cr](...e){this._log(console.warn,e)}[hl](...e){this._log(console.error,e)}};var yh=Ko;var Tl=nt;var Rl=he;var bh=Bt;var xh=Ft;var vh=ea;var _h=si;function Jr(t){var e=e;function r(){}e={};function n(k){throw k}var i,a,o,s,c,l,d,f,u,h,m;function g(){var k=m.buffer;i=new Int8Array(k),a=new Int16Array(k),s=new Uint8Array(k),c=new Uint16Array(k),o=new Int32Array(k),l=new Uint32Array(k),d=new Float32Array(k),f=new Float64Array(k),u=new BigInt64Array(k),h=new BigUint64Array(k)}for(var p=k=>{for(var oe,Ce,Re=0,ir=0,Vt=k.length,ln=new Uint8Array((Vt*3>>2)-(k[Vt-2]=="=")-(k[Vt-1]=="="));Re<Vt;Re+=4,ir+=3)oe=U[k.charCodeAt(Re+1)],Ce=U[k.charCodeAt(Re+2)],ln[ir]=U[k.charCodeAt(Re)]<<2|oe>>4,ln[ir+1]=oe<<4|Ce>>2,ln[ir+2]=Ce<<6|U[k.charCodeAt(Re+3)];return ln},y=()=>n(""),v=()=>{},x={},b=k=>k(),_=()=>performance.now(),w=(k,oe)=>{if(x[k]&&(clearTimeout(x[k].id),delete x[k]),!oe)return 0;var Ce=setTimeout(()=>{delete x[k],b(()=>Or(k,_()))},oe);return x[k]={id:Ce,timeout_ms:oe},0},S=Math.atan,E=Math.cos,L=Math.exp,M=Math.log,C=Math.pow,I=Math.sin,B=k=>{var oe=s.length;return k>>>=0,!1},F=k=>{throw`exit(${k})`},U=new Uint8Array(123),ce=25;ce>=0;--ce)U[48+ce]=52+ce,U[65+ce]=ce,U[97+ce]=26+ce;U[43]=62,U[47]=63;var Nt={e:y,d:v,f:w,b:S,a:E,i:L,h:M,g:C,c:I,k:B,j:F};function Ct(k){zr=k.n,on=k.o,dt=k.p,et=k.q,Ht=k.r,Gn=k.s,sn=k.t,Or=k.v}var zr,on,dt,et,Ht,Gn,sn,Or;function Ur(k){k.m()}Jr.wasm||Object.defineProperty(Jr,"wasm",{get:()=>String.raw`dynEncode012091253f87dì%nä= 4&¿nÝØä‘ÂLÚªã9ÚØ[äº\ ¼¡³R=}L]ŸÈÿ2 ÿù¶J1jj¡é,zäV|i¸Qk¹‡= 
3
+ `,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(y)}}return g};function ge(){let t=Uint8Array,e=Float32Array;ge.modules||Object.defineProperties(ge,{modules:{value:new WeakMap},setModule:{value(r,n){ge.modules.set(r,Promise.resolve(n))}},getModule:{value(r,n){let i=ge.modules.get(r);return i||(n?i=WebAssembly.compile(md(n)):(n=r.wasm,i=ge.inflateDynEncodeString(n).then(o=>WebAssembly.compile(o))),ge.modules.set(r,i)),i}},concatFloat32:{value(r,n){let i=new e(n),o=0,a=0;for(;o<r.length;)i.set(r[o],a),a+=r[o++].length;return i}},getDecodedAudio:{value:(r,n,i,o,a)=>({errors:r,channelData:n,samplesDecoded:i,sampleRate:o,bitDepth:a})},getDecodedAudioMultiChannel:{value(r,n,i,o,a,s){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(ge.concatFloat32(f,o))}return ge.getDecodedAudio(r,c,o,a,s)}},inflateDynEncodeString:{value(r){return r=md(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*4’U((I-H(H*i0’J,^*DH+H-H*œšI+H,I*4)33H(H*H)“^*DH(H+H)^*@H+i§H)œi§›™3æ*).§K(iH“I/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)œ’J.H.W)(i)’c)(H,i)“I,H-i*’I-4)33i(I.*hH(V)(H+n5(H(i*’I-i(I,i)I.+hH,i*’J+iHn,hi(I-i*I,+hH,H/’H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)œ’J(H(V)(J(i)’c)(H)H(i)œ’H,c)(3H*i*’I*H,i)’I,4(3(-H(H,’W)(H-’I-H,i*’I,4)3(3(3H,H-’I1H+I,H.i)œH1V)(“J.i(v5(33H.-H(H,’i(c)(H,i*’I,4)333–)-§i*I*+§H*iHn,hiž73H,H(i)8(H+šJ+H)P*(H*’V)(J-“r,§H)P*,H.i)œ’H+H,“i)œ’V)(-H*i*’I*H+i)œI+H-H.’I.H,H-’i)œI,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7’H,c)(i)H+i´8’W)(œH,’I,H+i*’I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,’H-b((3H(P*0i)’I.4)3H-i¨*n5*H-iÅ*s,hiž73H-i)œJ+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)œJ+i¸7’V)(H(H+iø7’V)(8(’J/H(P*0J+s,hi73H+H,H.’J,’I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+’H.H+H/“’U((b((H(H(P*0i)’J+^*0H,i)“I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)žc)(H,i*’I,H+i)’I+4)33i)I-3H-3!2)0§K(i2“J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,’J(H,P*8J/s50H,H.i+’J0^*<i¦I*H.H,P*4J1’J.U(*H.U((J2›i')o5/H.U()I.H,H(^*<H0H1’U((H.i0œJ.i§›i0ži')™o5/H/H.H2šJ*H(’J.q50H,P*0J/H*’I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0’H(H1’U((b((H/i)’I/H(i)’I(H*i)“I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-’H(’i0c)(H(i*’I(4)33iè1i1H,i-’iÈ*8)Bi(I(+hH(ido,hH,i-’H(’i-c)(H(i*’I(4)33iÈ6iè6H,i-’iF8)BiØ1i)b((41-H,i-’H(’i/c)(H(i*’I(4)3(3(-H,i-’H(’i1c)(H(i*’I(4)3(3(-H,i-’H(’i0c)(H(i*’I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)’^*TH,H,iø-’^*PH,H,iX’^*LH,H,i(’^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iErš5)H(i©*’I1H-i)’I0i(i;H.i,’J(i(H(i(rCJ(“J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-’H-V)(i)œ’H,i+8(c)(H/i)“I/H-i*’I-H*i)’I*4)-H(i)œi¨1’I/+hH(H*o,hH,i-’H/V)(i)œ’i(c)(H/i*’I/H(i)’I(4)33i¤I*H,iø-’H,i¸)’H,i-’i;8)5+H0H1’I2i(I-+hH-H2p,hH,H,iP’8*J*i(p5-H*i7u,hH,i-’H-i)œ’H*c)(H-i)’I-4*3i(I/i+I.i+I(*h*h*hH*i8“6*(*)3H-m,hi£I*403H-i)œH,’W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.’J(H-’J.p,hi¢I*4.3H,i-’H-i)œ’I*+hH(,hH*H/c)(H*i*’I*H(i)“I(4)-H.I-4+3(3(33H,W)1m,hiŸI*4,3H,iø-’H,i¸)’H,i-’H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-’o5,3H,i(’H,iX’H,i-’H1i)œ’H08)J(,hi I*H(i(p5,H0H,V)šH,V)˜’o5,3H,H,iP’H,iH’8+I*4+3(3(3H,i$6i¬78+I*3H*H3šm5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2’L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(‹(›(«(Ë(ë( (*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7œ‰šœ‡Ž‰œš›*S7•œ‰Š”U”—Љ”›S0›‘–U œ`;ge.getModule(ge,i).then(o=>WebAssembly.instantiate(o,{})).then(({exports:o})=>{let a=new Map(Object.entries(o)),s=a.get("puff"),c=a.get("memory").buffer,l=new t(c),d=new DataView(c),f=a.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),s(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 o=[],a=0;for(;a<n;)o.push(r.slice(a*i,a++*i+i));return o},this.allocateTypedArray=(r,n,i=!0)=>{let o=this._wasm.malloc(n.BYTES_PER_ELEMENT*r);return i&&this._pointers.add(o),{ptr:o,len:r,buf:new n(this._wasm.HEAP,o,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 o=i[r];o!==0;o=i[++r])n.push(o);return String.fromCharCode.apply(null,n)},this.addError=(r,n,i,o,a,s)=>{r.push({message:n,frameLength:i,frameNumber:o,inputBytes:a,outputSamples:s})},this.instantiate=(r,n)=>(n&&ge.setModule(r,n),this._wasm=new r(ge).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var th=Bp(eh(),1);var m1=()=>globalThis.Worker||th.default,Xi=class extends m1(){constructor(e,r,n,i){ge.modules||new ge;let o=ge.modules.get(n);if(!o){let a="text/javascript",s,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 v=m,x={id:g},b;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"?v=v.then(()=>u.ready):p==="reset"?v=v.then(()=>u.reset()):(Object.assign(x,u[p](Array.isArray(y)?y.map(_=>new Uint8Array(_)):new Uint8Array(y))),b=x.channelData?x.channelData.map(_=>_.buffer):[]),v.then(()=>self.postMessage(x,b))}}).toString()})(${n}, ${ge}, ${i})`;try{s=typeof process.versions.node<"u"}catch{}o=s?`data:${a};base64,${Buffer.from(c).toString("base64")}`:URL.createObjectURL(new Blob([c],{type:a})),ge.modules.set(n,o)}super(o,{name:r}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:a})=>{let{id:s,...c}=a;this._enqueuedOperations.get(s)(c),this._enqueuedOperations.delete(s)},new i(ge).getModule().then(a=>{this.postToDecoder("init",{module:a,options:e})})}async postToDecoder(e,r){return new Promise(n=>{this.postMessage({command:e,id:this._id,data:r}),this._enqueuedOperations.set(this._id++,n)})}get ready(){return this.postToDecoder("ready")}async free(){await this.postToDecoder("free").finally(()=>{this.terminate()})}async reset(){await this.postToDecoder("reset")}};var tl=(t,e)=>{Object.defineProperty(t,"name",{value:e})};var ye=Symbol,rh=", ",G=(()=>{let t="front",e="side",r="rear",n="left",i="center",o="right";return["",t+" ",e+" ",r+" "].map(a=>[[n,o],[n,o,i],[n,i,o],[i,n,o],[i]].flatMap(s=>s.map(c=>a+c).join(rh)))})(),Ar="LFE",xn="monophonic (mono)",vn="stereo",na="surround",Se=(t,...e)=>`${[xn,vn,`linear ${na}`,"quadraphonic",`5.0 ${na}`,`5.1 ${na}`,`6.1 ${na}`,`7.1 ${na}`][t-1]} (${e.join(rh)})`,ia=[xn,Se(2,G[0][0]),Se(3,G[0][2]),Se(4,G[1][0],G[3][0]),Se(5,G[1][2],G[3][0]),Se(6,G[1][2],G[3][0],Ar),Se(7,G[1][2],G[2][0],G[3][4],Ar),Se(8,G[1][2],G[2][0],G[3][0],Ar)],nh=192e3,ih=176400,rl=96e3,nl=88200,oh=64e3,_n=48e3,$i=44100,Ki=32e3,Yi=24e3,qi=22050,Zi=16e3,il=12e3,ol=11025,ji=8e3,ah=7350,cr="absoluteGranulePosition",$="bandwidth",rt="bitDepth",nt="bitrate",oa=nt+"Maximum",aa=nt+"Minimum",sa=nt+"Nominal",Er="buffer",la=Er+"Fullness",me="codec",it=me+"Frames",ca="coupledStreamCount",Qi="crc",da=Qi+"16",ua=Qi+"32",he="data",V="description",Lr="duration",Ji="emphasis",fa="hasOpusPadding",Ft="header",Sn="isContinuedPacket",ha="isCopyrighted",wn="isFirstPage",ma="isHome",kt="isLastPage",Wr="isOriginal",Xr="isPrivate",pa="isVbr",Tt="layer",P="length",X="mode",$r=X+"Extension",al="mpeg",Kr=al+"Version",ga="numberAACFrames",ya="outputGain",ni="preSkip",ba="profile",sl=ye(),Yr="protection",pd="rawData",qt="segments",Z="subarray",Mn="version",ii="vorbis",xa=ii+"Comments",eo=ii+"Setup",ll="block",va=ll+"ingStrategy",cl=ye(),qr=ll+"Size",An=ll+"size0",En=ll+"size1",_a=ye(),dl="channel",Zr=dl+"MappingFamily",Sa=dl+"MappingTable",ot=dl+"Mode",wa=ye(),H=dl+"s",sh="copyright",Ma=sh+"Id",Aa=sh+"IdStart",jr="frame",Qr=jr+"Count",Rt=jr+"Length",ul="Number",Jr=jr+ul,Tr=jr+"Padding",W=jr+"Size",lh="Rate",Ea="inputSample"+lh,gd="page",oi=gd+"Checksum",to=ye(),Ln=gd+"SegmentTable",Re=gd+"Sequence"+ul,yd="sample",La=yd+ul,ee=yd+lh,Rr=ye(),te=yd+"s",fl="stream",Ta=fl+"Count",Ra=fl+"Info",Cr=fl+"Serial"+ul,bd=fl+"StructureVersion",xd="total",ai=xd+"BytesOut",si=xd+"Duration",li=xd+"Samples",oe=ye(),Zt=ye(),Ca=ye(),Tn=ye(),dr=ye(),hl=ye(),vd=ye(),Rn=ye(),ue=ye(),jt=ye(),Qt=ye(),Pr=ye(),Cn=ye(),ml=ye(),ur=ye(),fr=ye(),Jt=ye(),pl=ye(),at=Uint8Array,Pn=DataView,fe="reserved",st="bad",ro="free",Pa="none",gl="16bit CRC";var _d=(t,e,r)=>{for(let n=0;n<t[P];n++){let i=e(n);for(let o=8;o>0;o--)i=r(i);t[n]=i}return t},g1=_d(new at(256),t=>t,t=>t&128?7^t<<1:t<<1),we=[_d(new Uint16Array(256),t=>t<<8,t=>t<<1^(t&32768?32773:0))],Me=[_d(new Uint32Array(256),t=>t,t=>t>>>1^(t&1)*3988292384)];for(let t=0;t<15;t++){we.push(new Uint16Array(256)),Me.push(new Uint32Array(256));for(let e=0;e<=255;e++)we[t+1][e]=we[0][we[t][e]>>>8]^we[t][e]<<8,Me[t+1][e]=Me[t][e]>>>8^Me[0][Me[t][e]&255]}var dh=t=>{let e=0,r=t[P];for(let n=0;n!==r;n++)e=g1[e^t[n]];return e},uh=t=>{let e=t[P],r=e-16,n=0,i=0;for(;i<=r;)n^=t[i++]<<8|t[i++],n=we[15][n>>8]^we[14][n&255]^we[13][t[i++]]^we[12][t[i++]]^we[11][t[i++]]^we[10][t[i++]]^we[9][t[i++]]^we[8][t[i++]]^we[7][t[i++]]^we[6][t[i++]]^we[5][t[i++]]^we[4][t[i++]]^we[3][t[i++]]^we[2][t[i++]]^we[1][t[i++]]^we[0][t[i++]];for(;i!==e;)n=(n&255)<<8^we[0][n>>8^t[i++]];return n},fh=t=>{let e=t[P],r=e-16,n=0,i=0;for(;i<=r;)n=Me[15][(t[i++]^n)&255]^Me[14][(t[i++]^n>>>8)&255]^Me[13][(t[i++]^n>>>16)&255]^Me[12][t[i++]^n>>>24]^Me[11][t[i++]]^Me[10][t[i++]]^Me[9][t[i++]]^Me[8][t[i++]]^Me[7][t[i++]]^Me[6][t[i++]]^Me[5][t[i++]]^Me[4][t[i++]]^Me[3][t[i++]]^Me[2][t[i++]]^Me[1][t[i++]]^Me[0][t[i++]];for(;i!==e;)n=Me[0][(n^t[i++])&255]^n>>>8;return n^-1},Ba=(...t)=>{let e=new at(t.reduce((r,n)=>r+n[P],0));return t.reduce((r,n)=>(e.set(n,r),r+n[P]),0),e},Dt=t=>String.fromCharCode(...t),ch=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],Ia=t=>ch[t&15]<<4|ch[t>>4],yl=class{constructor(e){this._data=e,this._pos=e[P]*8}set position(e){this._pos=e}get position(){return this._pos}read(e){let r=Math.floor(this._pos/8),n=this._pos%8;return this._pos-=e,(Ia(this._data[r-1])<<8)+Ia(this._data[r])>>7-n&255}},hh=(t,e)=>{try{return t.getBigInt64(e,!0)}catch{let r=t.getUint8(e+7)&128?-1:1,n=t.getUint32(e,!0),i=t.getUint32(e+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 Fa=class{constructor(e,r){this._onCodecHeader=e,this._onCodecUpdate=r,this[ur]()}[fr](){this._isEnabled=!0}[ur](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[ml](e,r){if(this._onCodecUpdate){this._bitrate!==e&&(this._bitrate=e,this._codecShouldUpdate=!0);let n=this._codecUpdateData.get(this._headerCache.get(this._currentHeader));this._codecShouldUpdate&&n&&this._onCodecUpdate({bitrate:e,...n},r),this._codecShouldUpdate=!1}}[ue](e){let r=this._headerCache.get(e);return r&&this._updateCurrentHeader(e),r}[jt](e,r,n){this._isEnabled&&(this._codecHeaderSent||(this._onCodecHeader({...r}),this._codecHeaderSent=!0),this._updateCurrentHeader(e),this._headerCache.set(e,r),this._codecUpdateData.set(r,n))}_updateCurrentHeader(e){this._onCodecUpdate&&e!==this._currentHeader&&(this._codecShouldUpdate=!0,this._currentHeader=e)}};var Fe=new WeakMap,je=new WeakMap;var lt=class{constructor(e,r){this._codecParser=e,this._headerCache=r}*[vd](){let e;do{if(e=yield*this.Frame[Qt](this._codecParser,this._headerCache,0),e)return e;this._codecParser[Zt](1)}while(!0)}*[Rn](e){let r=yield*this[vd](),n=je.get(r)[P];if(e||this._codecParser._flushing||(yield*this.Header[ue](this._codecParser,this._headerCache,n)))return this._headerCache[fr](),this._codecParser[Zt](n),this._codecParser[Tn](r),r;this._codecParser[dr](`Missing ${jr} at ${n} bytes from current position.`,`Dropping current ${jr} and trying again.`),this._headerCache[ur](),this._codecParser[Zt](1)}};var ci=class{constructor(e,r){je.set(this,{[Ft]:e}),this[he]=r}};var zt=class extends ci{static*[Qt](e,r,n,i,o){let a=yield*e[ue](n,i,o);if(a){let s=Fe.get(a)[Rt],c=Fe.get(a)[te],l=(yield*n[oe](s,o))[Z](0,s);return new r(a,l,c)}else return null}constructor(e,r,n){super(e,r),this[Ft]=e,this[te]=n,this[Lr]=n/e[ee]*1e3,this[Jr]=null,this[ai]=null,this[li]=null,this[si]=null,je.get(this)[P]=r[P]}};var Sd="unsynchronizationFlag",wd="extendedHeaderFlag",Md="experimentalFlag",Ad="footerPresent",ka=class t{static*getID3v2Header(e,r,n){let o={},a=yield*e[oe](3,n);if(a[0]!==73||a[1]!==68||a[2]!==51||(a=yield*e[oe](10,n),o[Mn]=`id3v2.${a[3]}.${a[4]}`,a[5]&15)||(o[Sd]=!!(a[5]&128),o[wd]=!!(a[5]&64),o[Md]=!!(a[5]&32),o[Ad]=!!(a[5]&16),a[6]&128||a[7]&128||a[8]&128||a[9]&128))return null;let s=a[6]<<21|a[7]<<14|a[8]<<7|a[9];return o[P]=10+s,new t(o)}constructor(e){this[Mn]=e[Mn],this[Sd]=e[Sd],this[wd]=e[wd],this[Md]=e[Md],this[Ad]=e[Ad],this[P]=e[P]}};var Ot=class{constructor(e){Fe.set(this,e),this[rt]=e[rt],this[nt]=null,this[H]=e[H],this[ot]=e[ot],this[ee]=e[ee]}};var bh={0:[ro,ro,ro,ro,ro],16:[32,32,32,32,8],240:[st,st,st,st,st]},bl=(t,e,r)=>8*((t+r)%e+e)*(1<<(t+r)/e)-8*e*(e/8|0);for(let t=2;t<15;t++)bh[t<<4]=[t*32,bl(t,4,0),bl(t,4,-1),bl(t,8,4),bl(t,8,0)];var y1=0,b1=1,x1=2,v1=3,mh=4,xl="bands ",vl=" to 31",ph={0:xl+4+vl,16:xl+8+vl,32:xl+12+vl,48:xl+16+vl},di="bitrateIndex",Da="v2",Al="v1",_l="Intensity stereo ",Sl=", MS stereo ",wl="on",Ml="off",_1={0:_l+Ml+Sl+Ml,16:_l+wl+Sl+Ml,32:_l+Ml+Sl+wl,48:_l+wl+Sl+wl},Ed={0:{[V]:fe},2:{[V]:"Layer III",[Tr]:1,[$r]:_1,[Al]:{[di]:x1,[te]:1152},[Da]:{[di]:mh,[te]:576}},4:{[V]:"Layer II",[Tr]:1,[$r]:ph,[te]:1152,[Al]:{[di]:b1},[Da]:{[di]:mh}},6:{[V]:"Layer I",[Tr]:4,[$r]:ph,[te]:384,[Al]:{[di]:y1},[Da]:{[di]:v1}}},Ld="MPEG Version ",gh="ISO/IEC ",S1={0:{[V]:`${Ld}2.5 (later extension of MPEG 2)`,[Tt]:Da,[ee]:{0:ol,4:il,8:ji,12:fe}},8:{[V]:fe},16:{[V]:`${Ld}2 (${gh}13818-3)`,[Tt]:Da,[ee]:{0:qi,4:Yi,8:Zi,12:fe}},24:{[V]:`${Ld}1 (${gh}11172-3)`,[Tt]:Al,[ee]:{0:$i,4:_n,8:Ki,12:fe}},length:P},w1={0:gl,1:Pa},M1={0:Pa,1:"50/15 ms",2:fe,3:"CCIT J.17"},yh={0:{[H]:2,[V]:vn},64:{[H]:2,[V]:"joint "+vn},128:{[H]:2,[V]:"dual channel"},192:{[H]:1,[V]:xn}},ui=class t extends Ot{static*[ue](e,r,n){let i={},o=yield*ka.getID3v2Header(e,r,n);o&&(yield*e[oe](o[P],n),e[Zt](o[P]));let a=yield*e[oe](4,n),s=Dt(a[Z](0,4)),c=r[ue](s);if(c)return new t(c);if(a[0]!==255||a[1]<224)return null;let l=S1[a[1]&24];if(l[V]===fe)return null;let d=a[1]&6;if(Ed[d][V]===fe)return null;let f={...Ed[d],...Ed[d][l[Tt]]};if(i[Kr]=l[V],i[Tt]=f[V],i[te]=f[te],i[Yr]=w1[a[1]&1],i[P]=4,i[nt]=bh[a[2]&240][f[di]],i[nt]===st||(i[ee]=l[ee][a[2]&12],i[ee]===fe)||(i[Tr]=a[2]&2&&f[Tr],i[Xr]=!!(a[2]&1),i[Rt]=Math.floor(125*i[nt]*i[te]/i[ee]+i[Tr]),!i[Rt]))return null;let u=a[3]&192;if(i[ot]=yh[u][V],i[H]=yh[u][H],i[$r]=f[$r][a[3]&48],i[ha]=!!(a[3]&8),i[Wr]=!!(a[3]&4),i[Ji]=M1[a[3]&3],i[Ji]===fe)return null;i[rt]=16;{let{length:h,frameLength:m,samples:g,...p}=i;r[jt](s,i,p)}return new t(i)}constructor(e){super(e),this[nt]=e[nt],this[Ji]=e[Ji],this[Tr]=e[Tr],this[ha]=e[ha],this[Wr]=e[Wr],this[Xr]=e[Xr],this[Tt]=e[Tt],this[$r]=e[$r],this[Kr]=e[Kr],this[Yr]=e[Yr]}};var za=class t extends zt{static*[Qt](e,r,n){return yield*super[Qt](ui,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var Oa=class extends lt{constructor(e,r,n){super(e,r),this.Frame=za,this.Header=ui,n(this[me])}get[me](){return al}*[Pr](){return yield*this[Rn]()}};var A1={0:"MPEG-4",8:"MPEG-2"},E1={0:"valid",2:st,4:st,6:st},L1={0:gl,1:Pa},T1={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},R1={0:rl,4:nl,8:oh,12:_n,16:$i,20:Ki,24:Yi,28:qi,32:Zi,36:il,40:ol,44:ji,48:ah,52:fe,56:fe,60:"frequency is written explicitly"},xh={0:{[H]:0,[V]:"Defined in AOT Specific Config"},64:{[H]:1,[V]:xn},128:{[H]:2,[V]:Se(2,G[0][0])},192:{[H]:3,[V]:Se(3,G[1][3])},256:{[H]:4,[V]:Se(4,G[1][3],G[3][4])},320:{[H]:5,[V]:Se(5,G[1][3],G[3][0])},384:{[H]:6,[V]:Se(6,G[1][3],G[3][0],Ar)},448:{[H]:8,[V]:Se(8,G[1][3],G[2][0],G[3][0],Ar)}},fi=class t extends Ot{static*[ue](e,r,n){let i={},o=yield*e[oe](7,n),a=Dt([o[0],o[1],o[2],o[3]&252|o[6]&3]),s=r[ue](a);if(s)Object.assign(i,s);else{if(o[0]!==255||o[1]<240||(i[Kr]=A1[o[1]&8],i[Tt]=E1[o[1]&6],i[Tt]===st))return null;let l=o[1]&1;i[Yr]=L1[l],i[P]=l?7:9,i[sl]=o[2]&192,i[Rr]=o[2]&60;let d=o[2]&2;if(i[ba]=T1[i[sl]],i[ee]=R1[i[Rr]],i[ee]===fe)return null;i[Xr]=!!d,i[wa]=(o[2]<<8|o[3])&448,i[ot]=xh[i[wa]][V],i[H]=xh[i[wa]][H],i[Wr]=!!(o[3]&32),i[ma]=!!(o[3]&8),i[Ma]=!!(o[3]&8),i[Aa]=!!(o[3]&4),i[rt]=16,i[te]=1024,i[ga]=o[6]&3;{let{length:f,channelModeBits:u,profileBits:h,sampleRateBits:m,frameLength:g,samples:p,numberAACFrames:y,...v}=i;r[jt](a,i,v)}}if(i[Rt]=(o[3]<<11|o[4]<<3|o[5]>>5)&8191,!i[Rt])return null;let c=(o[5]<<6|o[6]>>2)&2047;return i[la]=c===2047?"VBR":c,new t(i)}constructor(e){super(e),this[Ma]=e[Ma],this[Aa]=e[Aa],this[la]=e[la],this[ma]=e[ma],this[Wr]=e[Wr],this[Xr]=e[Xr],this[Tt]=e[Tt],this[P]=e[P],this[Kr]=e[Kr],this[ga]=e[ga],this[ba]=e[ba],this[Yr]=e[Yr]}get audioSpecificConfig(){let e=Fe.get(this),r=e[sl]+64<<5|e[Rr]<<5|e[wa]>>3,n=new at(2);return new Pn(n[Er]).setUint16(0,r,!1),n}};var Ua=class t extends zt{static*[Qt](e,r,n){return yield*super[Qt](fi,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var Na=class extends lt{constructor(e,r,n){super(e,r),this.Frame=Ua,this.Header=fi,n(this[me])}get[me](){return"aac"}*[Pr](){return yield*this[Rn]()}};var In=class t extends zt{static _getFrameFooterCrc16(e){return(e[e[P]-2]<<8)+e[e[P]-1]}static[pl](e){let r=t._getFrameFooterCrc16(e),n=uh(e[Z](0,-2));return r===n}constructor(e,r,n){r[Ra]=n,r[da]=t._getFrameFooterCrc16(e),super(r,e,Fe.get(r)[te])}};var vh="get from STREAMINFO metadata block",C1={0:"Fixed",1:"Variable"},_h={0:fe,16:192};for(let t=2;t<16;t++)_h[t<<4]=t<6?576*2**(t-2):2**t;var P1={0:vh,1:nl,2:ih,3:nh,4:ji,5:Zi,6:qi,7:Yi,8:Ki,9:$i,10:_n,11:rl,15:st},I1={0:{[H]:1,[V]:xn},16:{[H]:2,[V]:Se(2,G[0][0])},32:{[H]:3,[V]:Se(3,G[0][1])},48:{[H]:4,[V]:Se(4,G[1][0],G[3][0])},64:{[H]:5,[V]:Se(5,G[1][1],G[3][0])},80:{[H]:6,[V]:Se(6,G[1][1],Ar,G[3][0])},96:{[H]:7,[V]:Se(7,G[1][1],Ar,G[3][4],G[2][0])},112:{[H]:8,[V]:Se(8,G[1][1],Ar,G[3][0],G[2][0])},128:{[H]:2,[V]:`${vn} (left, diff)`},144:{[H]:2,[V]:`${vn} (diff, right)`},160:{[H]:2,[V]:`${vn} (avg, diff)`},176:fe,192:fe,208:fe,224:fe,240:fe},B1={0:vh,2:8,4:12,6:fe,8:16,10:20,12:24,14:fe},Bn=class t extends Ot{static _decodeUTF8Int(e){if(e[0]>254)return null;if(e[0]<128)return{value:e[0],length:1};let r=1;for(let a=64;a&e[0];a>>=1)r++;let n=r-1,i=0,o=0;for(;n>0;o+=6,n--){if((e[n]&192)!==128)return null;i|=(e[n]&63)<<o}return i|=(e[n]&127>>r)<<o,{value:i,length:r}}static[Jt](e,r){let n={[oe]:function*(){return e}};return t[ue](n,r,0).next().value}static*[ue](e,r,n){let i=yield*e[oe](6,n);if(i[0]!==255||!(i[1]===248||i[1]===249))return null;let o={},a=Dt(i[Z](0,4)),s=r[ue](a);if(s)Object.assign(o,s);else{if(o[cl]=i[1]&1,o[va]=C1[o[cl]],o[_a]=i[2]&240,o[Rr]=i[2]&15,o[qr]=_h[o[_a]],o[qr]===fe||(o[ee]=P1[o[Rr]],o[ee]===st)||i[3]&1)return null;let l=I1[i[3]&240];if(l===fe||(o[H]=l[H],o[ot]=l[V],o[rt]=B1[i[3]&14],o[rt]===fe))return null}o[P]=5,i=yield*e[oe](o[P]+8,n);let c=t._decodeUTF8Int(i[Z](4));if(!c||(o[cl]?o[La]=c.value:o[Jr]=c.value,o[P]+=c[P],o[_a]===96?(i[P]<o[P]&&(i=yield*e[oe](o[P],n)),o[qr]=i[o[P]-1]+1,o[P]+=1):o[_a]===112&&(i[P]<o[P]&&(i=yield*e[oe](o[P],n)),o[qr]=(i[o[P]-1]<<8)+i[o[P]]+1,o[P]+=2),o[te]=o[qr],o[Rr]===12?(i[P]<o[P]&&(i=yield*e[oe](o[P],n)),o[ee]=i[o[P]-1]*1e3,o[P]+=1):o[Rr]===13?(i[P]<o[P]&&(i=yield*e[oe](o[P],n)),o[ee]=(i[o[P]-1]<<8)+i[o[P]],o[P]+=2):o[Rr]===14&&(i[P]<o[P]&&(i=yield*e[oe](o[P],n)),o[ee]=((i[o[P]-1]<<8)+i[o[P]])*10,o[P]+=2),i[P]<o[P]&&(i=yield*e[oe](o[P],n)),o[Qi]=i[o[P]-1],o[Qi]!==dh(i[Z](0,o[P]-1))))return null;if(!s){let{blockingStrategyBits:l,frameNumber:d,sampleNumber:f,samples:u,sampleRateBits:h,blockSizeBits:m,crc:g,length:p,...y}=o;r[jt](a,o,y)}return new t(o)}constructor(e){super(e),this[da]=null,this[va]=e[va],this[qr]=e[qr],this[Jr]=e[Jr],this[La]=e[La],this[Ra]=null}};var F1=2,k1=512*1024,hi=class extends lt{constructor(e,r,n){super(e,r),this.Frame=In,this.Header=Bn,n(this[me])}get[me](){return"flac"}*_getNextFrameSyncOffset(e){let r=yield*this._codecParser[oe](2,0),n=r[P]-2;for(;e<n;){if(r[e]===255){let o=r[e+1];if(o===248||o===249)break;o!==255&&e++}e++}return e}*[Pr](){do{let e=yield*Bn[ue](this._codecParser,this._headerCache,0);if(e){let r=Fe.get(e)[P]+F1;for(;r<=k1;){if(this._codecParser._flushing||(yield*Bn[ue](this._codecParser,this._headerCache,r))){let n=yield*this._codecParser[oe](r);if(this._codecParser._flushing||(n=n[Z](0,r)),In[pl](n)){let i=new In(n,e);return this._headerCache[fr](),this._codecParser[Zt](r),this._codecParser[Tn](i),i}}r=yield*this._getNextFrameSyncOffset(r+1)}this._codecParser[dr](`Unable to sync FLAC frame after searching ${r} bytes.`),this._codecParser[Zt](r)}else this._codecParser[Zt](yield*this._getNextFrameSyncOffset(1))}while(!0)}[Cn](e){return e[Re]===0?(this._headerCache[fr](),this._streamInfo=e[he][Z](13)):e[Re]===1||(e[it]=je.get(e)[qt].map(r=>{let n=Bn[Jt](r,this._headerCache);if(n)return new In(r,n,this._streamInfo);this._codecParser[dr]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(r=>!!r)),e}};var mi=class t{static*[ue](e,r,n){let i={},o=yield*e[oe](28,n);if(o[0]!==79||o[1]!==103||o[2]!==103||o[3]!==83||(i[bd]=o[4],o[5]&248))return null;i[kt]=!!(o[5]&4),i[wn]=!!(o[5]&2),i[Sn]=!!(o[5]&1);let s=new Pn(at.from(o[Z](0,28))[Er]);i[cr]=hh(s,6),i[Cr]=s.getInt32(14,!0),i[Re]=s.getInt32(18,!0),i[oi]=s.getInt32(22,!0);let c=o[26];i[P]=c+27,o=yield*e[oe](i[P],n),i[Rt]=0,i[Ln]=[],i[to]=at.from(o[Z](27,i[P]));for(let l=0,d=0;l<c;l++){let f=i[to][l];i[Rt]+=f,d+=f,(f!==255||l===c-1)&&(i[Ln].push(d),d=0)}return new t(i)}constructor(e){Fe.set(this,e),this[cr]=e[cr],this[Sn]=e[Sn],this[wn]=e[wn],this[kt]=e[kt],this[Ln]=e[Ln],this[Re]=e[Re],this[oi]=e[oi],this[Cr]=e[Cr]}};var Ha=class t extends ci{static*[Qt](e,r,n){let i=yield*mi[ue](e,r,n);if(i){let o=Fe.get(i)[Rt],a=Fe.get(i)[P],s=a+o,c=(yield*e[oe](s,0))[Z](0,s),l=c[Z](a,s);return new t(i,l,c)}else return null}constructor(e,r,n){super(e,r),je.get(this)[P]=n[P],this[it]=[],this[pd]=n,this[cr]=e[cr],this[ua]=e[oi],this[Lr]=0,this[Sn]=e[Sn],this[wn]=e[wn],this[kt]=e[kt],this[Re]=e[Re],this[te]=0,this[Cr]=e[Cr]}};var no=class extends zt{constructor(e,r,n){super(r,e,n)}};var Sh={0:ia.slice(0,2),1:ia},er="SILK-only",Qe="CELT-only",El="Hybrid",Fn="narrowband",Ll="medium-band",kn="wideband",io="super-wideband",oo="fullband",D1={0:{[X]:er,[$]:Fn,[W]:10},8:{[X]:er,[$]:Fn,[W]:20},16:{[X]:er,[$]:Fn,[W]:40},24:{[X]:er,[$]:Fn,[W]:60},32:{[X]:er,[$]:Ll,[W]:10},40:{[X]:er,[$]:Ll,[W]:20},48:{[X]:er,[$]:Ll,[W]:40},56:{[X]:er,[$]:Ll,[W]:60},64:{[X]:er,[$]:kn,[W]:10},72:{[X]:er,[$]:kn,[W]:20},80:{[X]:er,[$]:kn,[W]:40},88:{[X]:er,[$]:kn,[W]:60},96:{[X]:El,[$]:io,[W]:10},104:{[X]:El,[$]:io,[W]:20},112:{[X]:El,[$]:oo,[W]:10},120:{[X]:El,[$]:oo,[W]:20},128:{[X]:Qe,[$]:Fn,[W]:2.5},136:{[X]:Qe,[$]:Fn,[W]:5},144:{[X]:Qe,[$]:Fn,[W]:10},152:{[X]:Qe,[$]:Fn,[W]:20},160:{[X]:Qe,[$]:kn,[W]:2.5},168:{[X]:Qe,[$]:kn,[W]:5},176:{[X]:Qe,[$]:kn,[W]:10},184:{[X]:Qe,[$]:kn,[W]:20},192:{[X]:Qe,[$]:io,[W]:2.5},200:{[X]:Qe,[$]:io,[W]:5},208:{[X]:Qe,[$]:io,[W]:10},216:{[X]:Qe,[$]:io,[W]:20},224:{[X]:Qe,[$]:oo,[W]:2.5},232:{[X]:Qe,[$]:oo,[W]:5},240:{[X]:Qe,[$]:oo,[W]:10},248:{[X]:Qe,[$]:oo,[W]:20}},ao=class t extends Ot{static[Jt](e,r,n){let i={};if(i[H]=e[9],i[Zr]=e[18],i[P]=i[Zr]!==0?21+i[H]:19,e[P]<i[P])throw new Error("Out of data while inside an Ogg Page");let o=r[0]&3,a=o===3?2:1,s=Dt(e[Z](0,i[P]))+Dt(r[Z](0,a)),c=n[ue](s);if(c)return new t(c);if(s.substr(0,8)!=="OpusHead"||e[8]!==1)return null;i[he]=at.from(e[Z](0,i[P]));let l=new Pn(i[he][Er]);if(i[rt]=16,i[ni]=l.getUint16(10,!0),i[Ea]=l.getUint32(12,!0),i[ee]=_n,i[ya]=l.getInt16(16,!0),i[Zr]in Sh&&(i[ot]=Sh[i[Zr]][i[H]-1],!i[ot]))return null;i[Zr]!==0&&(i[Ta]=e[19],i[ca]=e[20],i[Sa]=[...e[Z](21,i[H]+21)]);let d=D1[248&r[0]];switch(i[X]=d[X],i[$]=d[$],i[W]=d[W],o){case 0:i[Qr]=1;break;case 1:case 2:i[Qr]=2;break;case 3:i[pa]=!!(128&r[1]),i[fa]=!!(64&r[1]),i[Qr]=63&r[1];break;default:return null}{let{length:f,data:u,channelMappingFamily:h,...m}=i;n[jt](s,i,m)}return new t(i)}constructor(e){super(e),this[he]=e[he],this[$]=e[$],this[Zr]=e[Zr],this[Sa]=e[Sa],this[ca]=e[ca],this[Qr]=e[Qr],this[W]=e[W],this[fa]=e[fa],this[Ea]=e[Ea],this[pa]=e[pa],this[X]=e[X],this[ya]=e[ya],this[ni]=e[ni],this[Ta]=e[Ta]}};var Va=class extends lt{constructor(e,r,n){super(e,r),this.Frame=no,this.Header=ao,n(this[me]),this._identificationHeader=null,this._preSkipRemaining=null}get[me](){return"opus"}[Cn](e){return e[Re]===0?(this._headerCache[fr](),this._identificationHeader=e[he]):e[Re]===1||(e[it]=je.get(e)[qt].map(r=>{let n=ao[Jt](this._identificationHeader,r,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[ni]);let i=n[W]*n[Qr]/1e3*n[ee];return this._preSkipRemaining>0&&(this._preSkipRemaining-=i,i=this._preSkipRemaining<0?-this._preSkipRemaining:0),new no(r,n,i)}this._codecParser[hl]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),e}};var so=class extends zt{constructor(e,r,n){super(r,e,n)}};var Td={};for(let t=0;t<8;t++)Td[t+6]=2**(6+t);var Ga=class t extends Ot{static[Jt](e,r,n,i){if(e[P]<30)throw new Error("Out of data while inside an Ogg Page");let o=Dt(e[Z](0,30)),a=r[ue](o);if(a)return new t(a);let s={[P]:30};if(o.substr(0,7)!=="vorbis")return null;s[he]=at.from(e[Z](0,30));let c=new Pn(s[he][Er]);if(s[Mn]=c.getUint32(7,!0),s[Mn]!==0||(s[H]=e[11],s[ot]=ia[s[H]-1]||"application defined",s[ee]=c.getUint32(12,!0),s[oa]=c.getInt32(16,!0),s[sa]=c.getInt32(20,!0),s[aa]=c.getInt32(24,!0),s[En]=Td[(e[28]&240)>>4],s[An]=Td[e[28]&15],s[An]>s[En])||e[29]!==1)return null;s[rt]=32,s[eo]=i,s[xa]=n;{let{length:l,data:d,version:f,vorbisSetup:u,vorbisComments:h,...m}=s;r[jt](o,s,m)}return new t(s)}constructor(e){super(e),this[oa]=e[oa],this[aa]=e[aa],this[sa]=e[sa],this[An]=e[An],this[En]=e[En],this[he]=e[he],this[xa]=e[xa],this[eo]=e[eo]}};var Wa=class extends lt{constructor(e,r,n){super(e,r),this.Frame=so,n(this[me]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[me](){return ii}[Cn](e){e[it]=[];for(let r of je.get(e)[qt])if(r[0]===1)this._headerCache[fr](),this._identificationHeader=e[he],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=Ga[Jt](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?e[it].push(new so(r,n,this._getSamples(r,n))):this._codecParser[logError]("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")}return e}_getSamples(e,r){let i=this._mode.blockFlags[e[0]>>1&this._mode.mask]?r[En]:r[An],o=this._prevBlockSize===null?0:(this._prevBlockSize+i)/4;return this._prevBlockSize=i,o}_parseSetupHeader(e){let r=new yl(e),n={count:0,blockFlags:[]};for(;(r.read(1)&1)!==1;);let i;for(;n.count<64&&r.position>0;){Ia(r.read(8));let o=0;for(;r.read(8)===0&&o++<3;);if(o===4)i=r.read(7),n.blockFlags.unshift(i&1),r.position+=6,n.count++;else{((Ia(i)&126)>>1)+1!==n.count&&this._codecParser[dr]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var Rd=class{constructor(e,r,n){this._codecParser=e,this._headerCache=r,this._onCodec=n,this._continuedPacket=new at,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[me](){return this._codec||""}_updateCodec(e,r){this._codec!==e&&(this._headerCache[ur](),this._parser=new r(this._codecParser,this._headerCache,this._onCodec),this._codec=e)}_checkCodecSupport({data:e}){let r=Dt(e[Z](0,8));switch(r){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",Va),!0;case(/^\x7fFLAC/.test(r)&&r):return this._updateCodec("flac",hi),!0;case(/^\x01vorbis/.test(r)&&r):return this._updateCodec(ii,Wa),!0;default:return!1}}_checkPageSequenceNumber(e){e[Re]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&e[Re]>1&&this._codecParser[dr]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[Re]}`),this._pageSequenceNumber=e[Re]}_parsePage(e){this._isSupported===null&&(this._pageSequenceNumber=e[Re],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);let r=je.get(e),n=Fe.get(r[Ft]),i=0;if(r[qt]=n[Ln].map(o=>e[he][Z](i,i+=o)),this._continuedPacket[P]&&(r[qt][0]=Ba(this._continuedPacket,r[qt][0]),this._continuedPacket=new at),n[to][n[to][P]-1]===255&&(this._continuedPacket=Ba(this._continuedPacket,r[qt].pop())),this._previousAbsoluteGranulePosition!==null&&(e[te]=Number(e[cr]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[cr],this._isSupported){let o=this._parser[Cn](e);return this._codecParser[Tn](o),o}else return e}},Xa=class extends lt{constructor(e,r,n){super(e,r),this._onCodec=n,this.Frame=Ha,this.Header=mi,this._streams=new Map,this._currentSerialNumber=null}get[me](){let e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[Pr](){let e=yield*this[Rn](!0);this._currentSerialNumber=e[Cr];let r=this._streams.get(this._currentSerialNumber);return r||(r=new Rd(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,r)),e[kt]&&this._streams.delete(this._currentSerialNumber),r._parsePage(e)}};var Cd=()=>{},$a=class{constructor(e,{onCodec:r,onCodecHeader:n,onCodecUpdate:i,enableLogging:o=!1,enableFrameCRC32:a=!0}={}){this._inputMimeType=e,this._onCodec=r||Cd,this._onCodecHeader=n||Cd,this._onCodecUpdate=i,this._enableLogging=o,this._crc32=a?fh:Cd,this[ur]()}get[me](){return this._parser?this._parser[me]:""}[ur](){this._headerCache=new Fa(this._onCodecHeader,this._onCodecUpdate),this._generator=this._getGenerator(),this._generator.next()}*flush(){this._flushing=!0;for(let e=this._generator.next();e.value;e=this._generator.next())yield e.value;this._flushing=!1,this[ur]()}*parseChunk(e){for(let r=this._generator.next(e);r.value;r=this._generator.next())yield r.value}parseAll(e){return[...this.parseChunk(e),...this.flush()]}*_getGenerator(){if(this._inputMimeType.match(/aac/))this._parser=new Na(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new Oa(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new hi(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new Xa(this,this._headerCache,this._onCodec);else throw new Error(`Unsupported Codec ${mimeType}`);for(this._frameNumber=0,this._currentReadPosition=0,this._totalBytesIn=0,this._totalBytesOut=0,this._totalSamples=0,this._sampleRate=void 0,this._rawData=new Uint8Array(0);;){let e=yield*this._parser[Pr]();e&&(yield e)}}*[oe](e=0,r=0){let n;for(;this._rawData[P]<=e+r;){if(n=yield,this._flushing)return this._rawData[Z](r);n&&(this._totalBytesIn+=n[P],this._rawData=Ba(this._rawData,n))}return this._rawData[Z](r)}[Zt](e){this._currentReadPosition+=e,this._rawData=this._rawData[Z](e)}[Ca](e){this._sampleRate=e[Ft][ee],e[Ft][nt]=e[Lr]>0?Math.round(e[he][P]/e[Lr])*8:0,e[Jr]=this._frameNumber++,e[ai]=this._totalBytesOut,e[li]=this._totalSamples,e[si]=this._totalSamples/this._sampleRate*1e3,e[ua]=this._crc32(e[he]),this._headerCache[ml](e[Ft][nt],e[si]),this._totalBytesOut+=e[he][P],this._totalSamples+=e[te]}[Tn](e){if(e[it]){if(e[kt]){let r=e[te];e[it].forEach(n=>{let i=n[te];r<i&&(n[te]=r>0?r:0,n[Lr]=n[te]/n[Ft][ee]*1e3),r-=i,this[Ca](n)})}else e[te]=0,e[it].forEach(r=>{e[te]+=r[te],this[Ca](r)});e[Lr]=e[te]/this._sampleRate*1e3||0,e[li]=this._totalSamples,e[si]=this._totalSamples/this._sampleRate*1e3||0,e[ai]=this._totalBytesOut}else this[Ca](e)}_log(e,r){if(this._enableLogging){let n=[`${me}: ${this[me]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${ai}: ${this._totalBytesOut}`],i=Math.max(...n.map(o=>o[P]));r.push(`--stats--${"-".repeat(i-9)}`,...n,"-".repeat(i)),e("codec-parser",r.reduce((o,a)=>o+`
4
+ `+a,""))}}[dr](...e){this._log(console.warn,e)}[hl](...e){this._log(console.error,e)}};var wh=$a;var Tl=it;var Rl=he;var Mh=Ft;var Ah=kt;var Eh=eo;var Lh=li;function en(t){var e=e;function r(){}e={};function n(D){throw D}var i,o,a,s,c,l,d,f,u,h,m;function g(){var D=m.buffer;i=new Int8Array(D),o=new Int16Array(D),s=new Uint8Array(D),c=new Uint16Array(D),a=new Int32Array(D),l=new Uint32Array(D),d=new Float32Array(D),f=new Float64Array(D),u=new BigInt64Array(D),h=new BigUint64Array(D)}for(var p=D=>{for(var ae,Pe,Ce=0,or=0,Gt=D.length,cn=new Uint8Array((Gt*3>>2)-(D[Gt-2]=="=")-(D[Gt-1]=="="));Ce<Gt;Ce+=4,or+=3)ae=N[D.charCodeAt(Ce+1)],Pe=N[D.charCodeAt(Ce+2)],cn[or]=N[D.charCodeAt(Ce)]<<2|ae>>4,cn[or+1]=ae<<4|Pe>>2,cn[or+2]=Pe<<6|N[D.charCodeAt(Ce+3)];return cn},y=()=>n(""),v=()=>{},x={},b=D=>D(),_=()=>performance.now(),w=(D,ae)=>{if(x[D]&&(clearTimeout(x[D].id),delete x[D]),!ae)return 0;var Pe=setTimeout(()=>{delete x[D],b(()=>Ur(D,_()))},ae);return x[D]={id:Pe,timeout_ms:ae},0},S=Math.atan,E=Math.cos,T=Math.exp,M=Math.log,C=Math.pow,B=Math.sin,F=D=>{var ae=s.length;return D>>>=0,!1},k=D=>{throw`exit(${D})`},N=new Uint8Array(123),ce=25;ce>=0;--ce)N[48+ce]=52+ce,N[65+ce]=ce,N[97+ce]=26+ce;N[43]=62,N[47]=63;var Ht={e:y,d:v,f:w,b:S,a:E,i:T,h:M,g:C,c:B,k:F,j:k};function Pt(D){Or=D.n,sn=D.o,ut=D.p,tt=D.q,Vt=D.r,Wn=D.s,ln=D.t,Ur=D.v}var Or,sn,ut,tt,Vt,Wn,ln,Ur;function Nr(D){D.m()}en.wasm||Object.defineProperty(en,"wasm",{get:()=>String.raw`dynEncode012091253f87dì%nä= 4&¿nÝØä‘ÂLÚªã9ÚØ[äº\ ¼¡³R=}L]ŸÈÿ2 ÿù¶J1jj¡é,zäV|i¸Qk¹‡= 
5
5
  ¨¨Ÿ%‰€ýv²†±»ŸoúâLa:ê±ÊäÌÓ.÷؇ý×>àW>z¯°8¯ñ€\Ñós 9ˆ\§ôÊ@Ü (tÂø4° ¢7fqÓg²Jè6x[zç®&4=} p.(°tÍޖ™ã¾>÷CõË"*k?¿~ 7‚~H2ÛÜâ.ÏQä;Œ6{ÜãFÑá'DœD¤±°HQ>MínÎϕÎöʵ’Ñӓ…™Þ“‰Ž‘š†Š‚œÌP¼P¨Þˆ*X²E=M¦qíxMà ±=M̚ë4/<šgNO‰™/¢ ¢>ˆa~Ï®”ììììì0”ìœa笡çëOÓÇM Q9tùµyuéµµÞϒ/Ÿ±Óõò}E{òÓJ¹Û|· ôfÒ c’¬”Wêaûÿlʽp¹|)‘ÖEL–†¦ }‰ypÕSϹI†]¢ˆºãæ°ÿo¶7ÛRqš¾ÔÅEߨ‘]æˉwÚ{óç‰Vwó1¾”E­Øpˆàe"Æùû–¡Áª ‡ Ààð´Lõ›€ÎxEÓ¢N¦‘…9Ÿëùši&€ Ò§Ø!ÇFçS=MbäO?ß·™縪‡7ùa}5ðšûÕtsUŒþ£Kïg‡ˆN™¾)ø§\V0uSIö:ÌU4ж¯´Õn9ÔƒèE£ZƼ{hµmى¾6ÆžÑ+xñ´«„þ¸=M‚ߤ·å®«ïÆGFÝì|H?äE"þ!9«Æïpæ'][¯ù·£W÷O§&#aŸ‡x$qf=}ø ô bϗŸ×W÷LôožÝWQÕӎ)u †÷½èV|¥Gà¨Ö¸˜@Œê| ÇK5ò €A·Â9’CS2š¸‹¼¿,ä›Ý ÑÝy™!ÑR„%ÆÝÎ0Âv§ qTcó±hØÉã‰=}Z=}Ælü­ën¯ð(-°ÜwVχï.th¥í­‡S~SÏ»Z”ZÔZ
6
6
  3–BÌÛ¬•<éæO)ÎyÚ¯O*®uìÛ$öI¥Ý9ôø³\¤ò³Ù¹ÇP¸J׎y@ÔyOÇm—’ô½üœš¾|S?2àú¤F?½ûoo3ôž;<àáûܘ8‚ì²7ïë¨RäY¹|ÓºÌF,ƒÐ™-¸*\P!FJÒ8= o6HwLrúº”¶Ð۞\Ù¬o¢–9Iq„Ý.ôf¶Îȏ{Ī×N|Mfs…•¤ „ÉݖàŸâ§‘*+ã§­’ô¯î¬7ç×§ä)€Š!Z¨ƒÉž,Äp~ý·wsSGó—äs„E€\ýï鞧Ö:Ò'“Cç(_X$\¦½eҒ8$’X˜F|e‚•œíٙә‚†¡¤Û<ØÞÛ¸9‰¿ðÃÎ#b~× ‚4éîÿÏq
7
7
  ˜ód‡|0•wU‰—&®è·vh6¨—{Ú珁Ú18ә(ÓY‚\ƒ0¦= çˆèíß)Ø=} ˜[xü-v˜?N(Kk‘gš0}âډ´ð“†¬”œÕQNÍ¢usѳ=}. ëg…û= Í M—Bp'²¨ œx’4è@9t“§eݵ¾âð½ z?†‹Z¹FH'‰Ì¯¿<ŒK,üµ<{˜ ¶JãývåàÆeù0Ð"F¥ÃÒÞŽþԛÉvC›zl}„ðN’£ Í^ƒP%²¸FX»WÎêô¶…ŠäÉJ^gƒ×SÃã.žÄt*'ªG‘«ÒB<ÜӅ¿ºp­\àuV¯£›Åݑ½á–Þ ùߞ=}ÎÚ^‹Ÿÿí>¥!¨ â=M·? */¤"å)â·ÿîÿî*(%*›2[½"üríÔ4š’l½»a}¯CwpCÓèìGc-ã6®=M32†k?Êg­…–!So-™x›>³G+ã@ò,™ Áïƒá„åN0þŠÙ‚è.~È÷¡vTr¶‰­‚Æ[üB±º»ávëw¹{pÜºû"Aæ’±9Æ^¹³òïRIAy5GÂwÉfœ4@Tù|qý7†ðªwBL|ÔqŽ‘v!ª°|]KiÐJVQ5‰¸åõ§‡‡åŒ"H¼0e¬<óBîÚS€ÏUìHPÙA+çÉ'se†ÌNf°@ÈM,ð½egÖ¬x©“„‹û½2~«ŠÒ1;ֈ«…¯°4&90èE»Ó׺ç‚ʧJ<Æ¿&~Nu¼ãÙµ¢.UÇä(qQô^ö–·“%!É
@@ -138,7 +138,7 @@ KÙ:KµºKí{K]ûK£[KÚKóšKÓ½R׿ÿ'P^j9TîçmóœþL¿_o©×hÙtÙ
138
138
  ÁiŸ;ª•äÀž‡%Ёn= =M+W= ÓÖc[aS
139
139
  FÁð]Nô‡Ý'= “qr(¶ù¤nŒü«òÿ¿d&ÿ ÈõT4Þ=}z|ö ¿OW×SMtdH.τãRX&§o3ؘÜXÍ^œÊM–í£W´iâ]NüOå£S£Å·ƒç÷­˜Ý§½GÑU y¹¦ß§/6P0(Cúýb"þ¥°VٌÄᣈ’ÓÙ@¾YýòDŽŒ{òÃv?’EP©”=MBé­\ĽYäýRò øfâëEEf¼D+gC×úDZGÅÿ±Ç?TzÙ¡±†Ï€ÁÕ¯¦ð‰vZ’mT}Œ3x˘z×cºrÑM=M„ c-ɩԈ™7½wæc§Î»cû¾yf‡ÙWòŒÆÝÔc¥³ôØfƒ«Äñ·9‰ø%­g:y”^+{U]¤þ‚…[&fӁÏY낫‡Gªõ‡¹¦ÖŒðþ¬m„oÛø‘?/ÛS’.[S›9ÛùœC›…/û2”²Y£ÎÑ%/sy¢×ÌùJ­W6Oí\g0^JùêßÏ0í[Ü“'ÏÔ>žÀ-¿[ÔW?Y]±ž ØÙÃî<~ÎëR~Ìf¾Z—/×¼_á¾Þê+îoÐñ{Þ\e3K%©¹§íB¹§(c=}ËÈ·SzÔnf§èx}o\9öf|%Ýå¥~©‚Iǀ ü€ñY8}FfŸú@Rú1éþ3‚÷˂‹ótQøvœû|³Îaá,Óé>BG6Òê}—ÄJ|¶=}°Žˆöf6žõk¶ÌºHgN’j‡Ò{柾M;9·é—§WèO±›Ä3қËÒyt™ ;ù´ˆà©aš|—Ó^!ÝøûšÄ
140
140
  (VV¸ ÇÙcÏ>yoçz ÃvòG{3Þ£½šŠcמôŒ íŚé;°OÛ‰GØ<wÜW> rU]Žq­{û'ùÝír{*øï?t-ígùWÿ…&§] m}×ût¥‚Ë~ß&>&Õv!b#ÅÌ‚q¢µ|jŽÍüùÉ^Æ&™ôžþŸ~sIµ"“]d)uâ´‘ºvk Å\<͉ÿ­öꍽƒÂ
141
- ïBçϧmÙIólÜoëVbƒ¦¯éWÇû3`});var Nr={a:Nt};this.setModule=k=>{t.setModule(Jr,k)},this.getModule=()=>t.getModule(Jr),this.instantiate=()=>(this.getModule().then(k=>WebAssembly.instantiate(k,Nr)).then(k=>{let oe=k.exports;Ct(oe),m=oe.l,g(),Ur(oe),r()}),this.ready=new Promise(k=>{r=k}).then(()=>{this.HEAP=m.buffer,this.malloc=on,this.free=sn,this.create_decoder=zr,this.send_setup=dt,this.init_dsp=et,this.decode_packets=Ht,this.destroy_decoder=Gn}),this)}function mi(){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(t=>{this._common=t,this._input=this._common.allocateTypedArray(this._inputSize,Uint8Array),this._firstPage=!0,this._inputLen=this._common.allocateTypedArray(1,Uint32Array),this._outputBufferPtr=this._common.allocateTypedArray(1,Uint32Array),this._channels=this._common.allocateTypedArray(1,Uint32Array),this._sampleRate=this._common.allocateTypedArray(1,Uint32Array),this._samplesDecoded=this._common.allocateTypedArray(1,Uint32Array);let e=256;this._errors=this._common.allocateTypedArray(e,Uint32Array),this._errorsLength=this._common.allocateTypedArray(1,Int32Array),this._frameNumber=0,this._inputBytes=0,this._outputSamples=0,this._decoder=this._common.wasm.create_decoder(this._input.ptr,this._inputLen.ptr,this._outputBufferPtr.ptr,this._channels.ptr,this._sampleRate.ptr,this._samplesDecoded.ptr,this._errors.ptr,this._errorsLength.ptr,e)}),Object.defineProperty(this,"ready",{enumerable:!0,get:()=>this._ready}),this.reset=()=>(this.free(),this._init()),this.free=()=>{this._common.wasm.destroy_decoder(this._decoder),this._common.free()},this.sendSetupHeader=t=>{this._input.buf.set(t),this._inputLen.buf[0]=t.length,this._common.wasm.send_setup(this._decoder,this._firstPage),this._firstPage=!1},this.initDsp=()=>{this._common.wasm.init_dsp(this._decoder)},this.decodePackets=t=>{let e=[],r=0,n=[];for(let i=0;i<t.length;i++){let a=t[i];this._input.buf.set(a),this._inputLen.buf[0]=a.length,this._common.wasm.decode_packets(this._decoder);let o=this._samplesDecoded.buf[0],s=[],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)),s.push(d)}e.push(s),r+=o,this._frameNumber++,this._inputBytes+=a.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:a.length,frameNumber:this._frameNumber,inputBytes:this._inputBytes,outputSamples:this._outputSamples})}this._errorsLength.buf[0]=0}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,e,this._channels.buf[0],r,this._sampleRate.buf[0],16)},this._isWebWorker=mi.isWebWorker,this._WASMAudioDecoderCommon=mi.WASMAudioDecoderCommon||ge,this._EmscriptenWASM=mi.EmscriptenWASM||Jr,this._module=mi.module,this._inputSize=128*1024,this._ready=this._init(),this}var Cl=Symbol(),en=class{constructor(){this._onCodec=e=>{if(e!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+e)},new ge,this._init(),this._ready=this[Cl](mi)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new yh("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[Cl](e){if(this._decoder){let r=this._decoder;await r.ready.then(()=>r.free())}return this._decoder=new e,this._decoder.ready}get ready(){return this._ready}async reset(){return this._init(),this._decoder.reset()}free(){this._decoder.free()}async decodeOggPages(e){let r=[];for(let a=0;a<e.length;a++){let o=e[a];if(this._vorbisSetupInProgress&&(o[Rl][0]===1&&this._decoder.sendSetupHeader(o[Rl]),o[Tl].length)){let s=o[Tl][0][bh];this._decoder.sendSetupHeader(s[vh]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}r.push(...o[Tl].map(s=>s[Rl]))}let n=await this._decoder.decodePackets(r);this._totalSamplesDecoded+=n.samplesDecoded;let i=e[e.length-1];if(i&&i[xh]){let a=this._totalSamplesDecoded-i[_h];if(a>0){for(let o=0;o<n.channelData.length;o++)n.channelData[o]=n.channelData[o].subarray(0,n.samplesDecoded-a);n.samplesDecoded-=a,this._totalSamplesDecoded-=a}}return n}async decode(e){return this.decodeOggPages([...this._codecParser.parseChunk(e)])}async flush(){let e=await this.decodeOggPages([...this._codecParser.flush()]);return await this.reset(),e}async decodeFile(e){let r=await this.decodeOggPages([...this._codecParser.parseAll(e)]);return await this.reset(),r}};var Ed=class extends Xi{constructor(e){super(e,"ogg-vorbis-decoder",mi,Jr)}async sendSetupHeader(e){return this.postToDecoder("sendSetupHeader",e)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(e){return this.postToDecoder("decodePackets",e)}},Yo=class extends en{constructor(){super(),this._ready=super[Cl](Ed)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};tl(en,"OggVorbisDecoder");tl(Yo,"OggVorbisDecoderWebWorker");var Ld=class extends Error{constructor(e){super(e),this.name="OggDecodeError"}};async function Pl(t,e=new en){await e.ready;let r=await e.decode(new Uint8Array(t)),n=r.errors;if(n&&n.length>0)throw new Ld(n.map(i=>i.message).join("; "));return{sampleRate:r.sampleRate,channels:r.channelData.length,bitDepth:r.bitDepth,channelData:r.channelData}}var $o=class extends Error{constructor(e){super(e),this.name="AudioRegistryError"}},la=class{constructor(e,r={}){this.vfs=e;this.refCounts=new Map;this.nextRequestId=0;this.cache=new gn(r.cacheSize??64),r.workerPath&&(this.worker=new Worker(r.workerPath,{type:"module"}))}get size(){return this.cache.size}get capacity(){return this.cache.capacity}async load(e){let r=e.toLowerCase(),n=this.cache.get(r);if(n)return this.refCounts.set(r,(this.refCounts.get(r)??0)+1),n;let a=(await this.vfs.readFile(e)).slice().buffer,o=await this.decodeByExtension(e,a);return this.cache.set(r,o),this.refCounts.set(r,1),o}release(e){let r=e.toLowerCase(),n=this.refCounts.get(r)??0;n<=1?(this.cache.delete(r),this.refCounts.delete(r)):this.refCounts.set(r,n-1)}clearAll(){this.cache.clear(),this.refCounts.clear()}set capacity(e){this.cache.capacity=e}async decodeByExtension(e,r){let n=e.toLowerCase();if(n.endsWith(".wav")){if(this.worker)return this.decodeWavInWorker(r);let i=el(r),a=i.channels,o=Array.from({length:a},()=>new Float32Array(i.samples.length/a));for(let s=0;s<i.samples.length;s+=1)o[s%a][Math.floor(s/a)]=i.samples[s];return{sampleRate:i.sampleRate,channels:a,bitDepth:i.bitsPerSample,channelData:o}}if(n.endsWith(".ogg")||n.endsWith(".oga"))return Pl(r);throw new $o(`Unsupported audio format: ${e}`)}decodeWavInWorker(e){return new Promise((r,n)=>{if(!this.worker){n(new Error("Worker not initialized"));return}let i=this.nextRequestId++,a=o=>{if(o.data.id===i)if(this.worker.removeEventListener("message",a),o.data.type==="success"){let s=o.data.data,c=s.channels,l=Array.from({length:c},()=>new Float32Array(s.samples.length/c));for(let d=0;d<s.samples.length;d+=1)l[d%c][Math.floor(d/c)]=s.samples[d];r({sampleRate:s.sampleRate,channels:c,bitDepth:s.bitsPerSample,channelData:l})}else n(new Error(o.data.message))};this.worker.addEventListener("message",a),this.worker.postMessage({id:i,buffer:e,type:"wav"},[e])})}};var T1="quake2ts-pak-indexes",R1="pak-indexes";function Sh(){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 qo(t,e){let r=Sh();return r?new Promise((n,i)=>{let a=r.open(t,1);a.onupgradeneeded=()=>{let{result:o}=a;o.objectStoreNames.contains(e)||o.createObjectStore(e,{keyPath:"key"})},a.onerror=()=>i(a.error??new Error("Unknown IndexedDB error")),a.onsuccess=()=>n(a.result)}):Promise.reject(new Error("IndexedDB is not available in this environment"))}function Zo(t,e,r,n){return new Promise((i,a)=>{let s=t.transaction(e,r).objectStore(e),c=n(s);c.onsuccess=()=>i(c.result),c.onerror=()=>a(c.error??new Error("IndexedDB transaction error"))})}function Td(t,e){return`${_e(t)}:${e.toString(16)}`}function C1(t){return t.map(e=>({...e}))}var Il=class{constructor(e=T1,r=R1){this.dbName=e;this.storeName=r}get isSupported(){return!!Sh()}async persist(e){if(!this.isSupported)return;let r=e.validate(),n={...r,key:Td(e.name,r.checksum),name:e.name,size:e.size,persistedAt:Date.now(),entries:C1(r.entries)},i=await qo(this.dbName,this.storeName);return await Zo(i,this.storeName,"readwrite",a=>a.put(n)),i.close(),n}async find(e,r){if(!this.isSupported)return;let n=await qo(this.dbName,this.storeName),i=r!==void 0?Td(e,r):void 0,a=await Zo(n,this.storeName,"readonly",o=>i?o.get(i):o.getAll());if(n.close(),!!a){if(Array.isArray(a)){let o=_e(e),s=a.filter(c=>_e(c.name)===o);return s.length===0?void 0:s.sort((c,l)=>l.persistedAt-c.persistedAt)[0]}return a}}async remove(e,r){if(!this.isSupported)return!1;let n=await qo(this.dbName,this.storeName),i=r!==void 0?Td(e,r):void 0,a=await Zo(n,this.storeName,"readwrite",o=>{if(i)return o.delete(i);let s=`${_e(e)}:`;return o.delete(IDBKeyRange.bound(s,`${s}\uFFFF`,!1,!0))});return n.close(),typeof a=="number"?a>0:!0}async clear(){if(!this.isSupported)return;let e=await qo(this.dbName,this.storeName);await Zo(e,this.storeName,"readwrite",r=>r.clear()),e.close()}async list(){if(!this.isSupported)return[];let e=await qo(this.dbName,this.storeName),r=await Zo(e,this.storeName,"readonly",n=>n.getAll());return e.close(),r.sort((n,i)=>i.persistedAt-n.persistedAt)}};var pi=class extends Error{constructor(r,n){super(n??`Missing dependencies: ${r.join(", ")}`);this.missing=r;this.name="AssetDependencyError"}},jo=class{constructor(){this.nodes=new Map}register(e,r=[]){let n=this.nodes.get(e)??{dependencies:new Set,loaded:!1};r.forEach(i=>n.dependencies.add(i)),this.nodes.set(e,n),r.forEach(i=>{this.nodes.has(i)||this.nodes.set(i,{dependencies:new Set,loaded:!1})})}markLoaded(e){let r=this.nodes.get(e)??{dependencies:new Set,loaded:!1},n=this.getMissingDependencies(e,r);if(n.length>0)throw new pi(n,`Asset ${e} is missing dependencies: ${n.join(", ")}`);r.loaded=!0,this.nodes.set(e,r)}markUnloaded(e){let r=this.nodes.get(e);r&&(r.loaded=!1)}isLoaded(e){return this.nodes.get(e)?.loaded??!1}missingDependencies(e){let r=this.nodes.get(e);return r?this.getMissingDependencies(e,r):[]}reset(){this.nodes.clear()}getMissingDependencies(e,r){let n=[];for(let i of r.dependencies)this.nodes.get(i)?.loaded||n.push(i);return n}},Bl=class{constructor(e,r={}){this.vfs=e;this.maps=new Map;this.loadQueue=[];this.activeLoads=0;this.textures=new Wi({capacity:r.textureCacheCapacity??128,maxMemory:r.textureMemoryLimit}),this.audio=new la(e,{cacheSize:r.audioCacheSize??64,workerPath:r.audioWorkerPath}),this.dependencyTracker=r.dependencyTracker??new jo,this.resourceTracker=r.resourceTracker,this.md2=new Hi(e),this.md3=new Vi(e),this.sprite=new Gi(e),this.bsp=new Ni(e,{useWorker:!!r.bspWorkerPath,workerPath:r.bspWorkerPath}),this.maxConcurrentLoads=r.maxConcurrentLoads??4,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(e="pics/colormap.pcx"){try{let r=await this.vfs.readFile(e),n=to(r);n.palette&&(this.palette=n.palette)}catch(r){console.warn(`Failed to load palette from ${e}:`,r)}}isAssetLoaded(e,r){return this.dependencyTracker.isLoaded(this.makeKey(e,r))}registerTexture(e,r){this.textures.set(e,r);let n=this.makeKey("texture",e);this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n)}async loadTexture(e){if(this.resourceTracker){let o=this.vfs.stat(e);this.resourceTracker.recordLoad("texture",e,o?.size,o?.sourcePak)}let r=this.textures.get(e);if(r)return r;let n=await this.vfs.readFile(e),i=e.split(".").pop()?.toLowerCase(),a;if(i==="wal")a=Js(n,this.palette);else if(i==="pcx")a=Qs(to(n));else if(i==="tga")a=Kf(od(n));else throw new Error(`Unsupported texture format for loadTexture: ${i}`);return this.registerTexture(e,a),a}async loadSound(e){if(this.resourceTracker){let i=this.vfs.stat(e);this.resourceTracker.recordLoad("sound",e,i?.size,i?.sourcePak)}let r=await this.audio.load(e),n=this.makeKey("sound",e);return this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n),r}async loadMd2Model(e,r=[]){if(this.resourceTracker){let s=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,s?.size,s?.sourcePak)}let n=this.makeKey("model",e),i=r.map(s=>this.makeKey("texture",s));this.dependencyTracker.register(n,i);let a=this.dependencyTracker.missingDependencies(n);if(a.length>0)throw new pi(a,`Asset ${n} is missing dependencies: ${a.join(", ")}`);let o=await this.md2.load(e);return this.dependencyTracker.markLoaded(n),o}getMd2Model(e){if(this.resourceTracker){let r=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,r?.size,r?.sourcePak)}return this.md2.get(e)}async loadMd3Model(e,r=[]){if(this.resourceTracker){let s=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,s?.size,s?.sourcePak)}let n=this.makeKey("model",e),i=r.map(s=>this.makeKey("texture",s));this.dependencyTracker.register(n,i);let a=this.dependencyTracker.missingDependencies(n);if(a.length>0)throw new pi(a,`Asset ${n} is missing dependencies: ${a.join(", ")}`);let o=await this.md3.load(e);return this.dependencyTracker.markLoaded(n),o}getMd3Model(e){if(this.resourceTracker){let r=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,r?.size,r?.sourcePak)}return this.md3.get(e)}async loadSprite(e){if(this.resourceTracker){let i=this.vfs.stat(e);this.resourceTracker.recordLoad("sprite",e,i?.size,i?.sourcePak)}let r=this.makeKey("sprite",e);this.dependencyTracker.register(r);let n=await this.sprite.load(e);return this.dependencyTracker.markLoaded(r),n}async loadMap(e){if(this.resourceTracker){let i=this.vfs.stat(e);this.resourceTracker.recordLoad("map",e,i?.size,i?.sourcePak)}let r=this.makeKey("map",e);if(this.maps.has(e))return this.maps.get(e);this.dependencyTracker.register(r);let n=await this.bsp.load(e);return this.maps.set(e,n),this.dependencyTracker.markLoaded(r),n}getMap(e){return this.maps.get(e)}listFiles(e){return this.vfs.findByExtension(e)}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset(),this.maps.clear(),this.loadQueue.length=0}getMemoryUsage(){let e=0,r=0;if(typeof process<"u"&&process.memoryUsage){let n=process.memoryUsage();e=n.heapTotal,r=n.heapUsed}return{textures:this.textures.memoryUsage,audio:this.audio.size,heapTotal:e,heapUsed:r}}enforceMemoryBudget(e){e.textureMemoryLimit!==void 0&&(this.textures.maxMemory=e.textureMemoryLimit),e.textureCacheCapacity!==void 0&&(this.textures.capacity=e.textureCacheCapacity),e.audioCacheSize!==void 0&&(this.audio.capacity=e.audioCacheSize)}clearCache(e){switch(e){case"texture":this.textures.clear();break;case"sound":this.audio.clearAll();break;case"map":this.maps.clear();break}}async preloadAssets(e){let r=e.map(n=>{let i=this.detectAssetType(n);return i?this.queueLoad(n,i,0):Promise.resolve()});await Promise.all(r)}queueLoad(e,r,n=1){return r==="texture"&&this.textures.get(e)?Promise.resolve(this.textures.get(e)):new Promise((i,a)=>{this.loadQueue.push({path:e,type:r,priority:n,resolve:i,reject:a}),this.loadQueue.sort((o,s)=>s.priority-o.priority),this.processQueue()})}async processQueue(){if(this.activeLoads>=this.maxConcurrentLoads||this.loadQueue.length===0)return;let e=this.loadQueue.shift();this.activeLoads++;try{let r;switch(e.type){case"texture":r=await this.loadTexture(e.path);break;case"sound":r=await this.loadSound(e.path);break;case"model":e.path.endsWith(".md2")?r=await this.loadMd2Model(e.path):e.path.endsWith(".md3")&&(r=await this.loadMd3Model(e.path));break;case"sprite":r=await this.loadSprite(e.path);break;case"map":r=await this.loadMap(e.path);break;default:throw new Error(`Unknown asset type ${e.type}`)}e.resolve(r)}catch(r){e.reject(r)}finally{this.activeLoads--,this.processQueue()}}detectAssetType(e){let r=e.split(".").pop()?.toLowerCase();return r?["wal","pcx","tga","png","jpg"].includes(r)?"texture":["wav","ogg"].includes(r)?"sound":["md2","md3"].includes(r)?"model":["sp2"].includes(r)?"sprite":["bsp"].includes(r)?"map":null:null}makeKey(e,r){return`${e}:${_e(r)}`}};var Fl=class{constructor(e){this.factory=e}getContext(){return this.context||(this.context=this.factory()),this.context}async resume(){let e=this.getContext();e.state==="suspended"&&await e.resume()}getState(){return this.context?.state??"suspended"}};function kl(t){let e=t.getContext(),r=e.createGain();r.gain.value=1;let n=e.createDynamicsCompressor(),i=e.createBiquadFilter?.(),a;if(e.createConvolver&&e.createGain){let o=e.createConvolver(),s=e.createGain(),c=e.createGain();s.connect(o),o.connect(c),a={convolver:o,input:s,output:c}}return i?(i.type="lowpass",i.frequency.value=2e4,i.Q.value=.707,r.connect(i),i.connect(n),a&&a.output.connect(i)):(r.connect(n),a&&a.output.connect(n)),n.connect(e.destination),{context:e,master:r,compressor:n,filter:i,reverb:a}}var Dl=class{constructor(e=new Oi){this.configStrings=e;this.buffers=new Map}registerName(e){return this.configStrings.soundIndex(e)}register(e,r){let n=this.registerName(e);return this.buffers.set(n,r),n}find(e){return this.configStrings.findSoundIndex(e)}get(e){return this.buffers.get(e)}has(e){return this.buffers.has(e)}getName(e){return this.configStrings.getName(e)}};var zl=class{constructor(e){this.vfs=e.vfs,this.registry=e.registry,this.contextController=e.context,this.soundRoot=e.soundRoot??"sound/",this.decodeAudio=e.decodeAudio??((r,n)=>{if(!r.decodeAudioData)throw new Error("decodeAudioData is not available on the provided audio context");return r.decodeAudioData(n)})}async precache(e){let r=[...new Set(e.map(a=>this.normalize(a)))],n={loaded:[],skipped:[],missing:[],errors:{}},i=this.contextController.getContext();for(let a of r)try{let o=this.registry.find(a);if(o!==void 0&&this.registry.has(o)){n.skipped.push(a);continue}if(!this.vfs.stat(a)){n.missing.push(a);continue}let l=(await this.vfs.readFile(a)).slice().buffer,d=await this.decodeAudio(i,l);this.registry.register(a,d),n.loaded.push(a)}catch(o){let s=o instanceof Error?o:new Error(String(o));n.errors[a]=s}return n}normalize(e){let r=_e(e.replace(/^\//,""));return r.startsWith(this.soundRoot)?r:_e(`${this.soundRoot}${r}`)}};var P1=7,Qo=t=>t&P1;function Ol(t){return Array.from({length:Ya},()=>({entnum:0,entchannel:wr.Auto,endTimeMs:0,isPlayer:!1,active:!1})).map(e=>({...e,isPlayer:e.entnum===t}))}function Ul(t,e,r,n){if(r<0)throw new Error("pickChannel: entchannel must be non-negative");let i=Qo(r),a=-1,o=Number.POSITIVE_INFINITY;for(let s=0;s<t.length;s+=1){let c=t[s],l=Qo(c.entchannel);if(i!==wr.Auto&&c.entnum===e&&l===i){a=s;break}if(c.active&&c.entnum===n.playerEntity&&e!==n.playerEntity)continue;let d=c.endTimeMs-n.nowMs;(a===-1||d<o)&&(o=d,a=s)}return a===-1?void 0:a}var Nl=class{constructor(e){this.activePreset=null;this.enabled=!0;this.node=e,this.node.input.gain.value=.5,this.node.output.gain.value=1}setPreset(e){this.activePreset=e,this.node.convolver.buffer!==(e?.buffer??null)&&(this.node.convolver.buffer=e?.buffer??null),e&&e.gain!==void 0?this.node.output.gain.value=e.gain:this.node.output.gain.value=1}setEnabled(e){this.enabled=e,e?this.node.input.gain.value=.5:this.node.input.gain.value=0}getOutputNode(){return this.node.output}getInputNode(){return this.node.input}};var Hl=class{constructor(e){this.activeSources=new Map;this.playbackRate=1;this.contextController=e.context,this.registry=e.registry,this.playerEntity=e.playerEntity,this.channels=Ol(e.playerEntity),this.listener=e.listener??{origin:cf,right:{x:1,y:0,z:0}},this.sfxVolume=e.sfxVolume??1,this.masterVolume=e.masterVolume??1,this.resolveOcclusion=e.resolveOcclusion,this.graph=kl(this.contextController),this.graph.master.gain.value=this.masterVolume,this.graph.reverb&&(this.reverb=new Nl(this.graph.reverb))}setListener(e){this.listener=e}setMasterVolume(e){this.masterVolume=e,this.graph.master.gain.value=e}setSfxVolume(e){this.sfxVolume=e}setPlaybackRate(e){this.playbackRate=e;for(let r of this.activeSources.values())r.source.playbackRate&&(r.source.playbackRate.value=e),this.updateSourceGain(r)}async ensureRunning(){await this.contextController.resume()}setReverbPreset(e){this.reverb?.setPreset(e)}play(e){let r=this.registry.get(e.soundIndex);if(!r)return;let n=this.graph.context,i=n.currentTime*1e3,a=Ul(this.channels,e.entity,e.channel,{nowMs:i,playerEntity:this.playerEntity});if(a===void 0)return;let o=this.activeSources.get(a);o&&(o.source.onended=null,o.source.stop(),this.activeSources.delete(a));let s=n.createBufferSource();s.buffer=r,s.loop=e.looping??!1,s.playbackRate&&(s.playbackRate.value=this.playbackRate);let c=e.origin??this.listener.origin,l=n.createGain(),d=this.createPanner(n,e.attenuation),f=this.resolveOcclusion?.(this.listener,c,e.attenuation),u=wh(f?.gainScale??1),h=this.resolveOcclusion?this.createOcclusionFilter(n,f?.lowpassHz??2e4):void 0;this.applyOriginToPanner(d,c);let g=e.volume/255*this.sfxVolume,p=Math.abs(this.playbackRate-1)<.001?1:0;l.gain.value=g*u*p;let y=n.currentTime+(e.timeOffsetMs??0)/1e3,v=(e.looping?Number.POSITIVE_INFINITY:r.duration*1e3)+y*1e3;s.connect(d);let x=d;h?(d.connect(h),h.connect(l),x=l):(d.connect(l),x=l),l.connect(this.graph.master),this.reverb&&l.connect(this.reverb.getInputNode()),s.start(y),s.onended=()=>{this.channels[a].active=!1,this.activeSources.delete(a)};let b={channelIndex:a,entnum:e.entity,entchannel:Qo(e.channel),endTimeMs:v,source:s,panner:d,gain:l,baseGain:g,origin:c,attenuation:e.attenuation,occlusion:h?{scale:u,lowpassHz:f?.lowpassHz,filter:h}:f?{scale:u,lowpassHz:f.lowpassHz}:void 0};return this.channels[a]={entnum:e.entity,entchannel:Qo(e.channel),endTimeMs:v,isPlayer:e.entity===this.playerEntity,active:!0},this.activeSources.set(a,b),b}stop(e){let r=this.activeSources.get(e);r&&(r.source.stop(),this.channels[e].active=!1,this.activeSources.delete(e))}stopEntitySounds(e){for(let[r,n]of[...this.activeSources.entries()])n.entnum===e&&(n.source.stop(),this.channels[r].active=!1,this.activeSources.delete(r))}updateEntityPosition(e,r){for(let n of this.activeSources.values())if(n.entnum===e&&(this.applyOriginToPanner(n.panner,r),n.origin=r,this.resolveOcclusion)){let i=this.resolveOcclusion(this.listener,r,n.attenuation);this.applyOcclusion(n,i)}}positionedSound(e,r,n,i){return this.play({entity:0,channel:wr.Auto,soundIndex:r,volume:n,attenuation:i,origin:e})}ambientSound(e,r,n){return this.play({entity:0,channel:wr.Auto,soundIndex:r,volume:n,attenuation:$a,origin:e,looping:!0})}getChannelState(e){return this.channels[e]}getDiagnostics(){return{activeChannels:this.activeSources.size,masterVolume:this.masterVolume,sfxVolume:this.sfxVolume,channels:[...this.channels],activeSounds:[...this.activeSources.values()].map(e=>({entnum:e.entnum,entchannel:e.entchannel,channelIndex:e.channelIndex,origin:e.origin,gain:e.gain.gain.value,baseGain:e.baseGain,attenuation:e.attenuation,maxDistance:e.panner.maxDistance,distanceModel:e.panner.distanceModel,occlusion:e.occlusion?{scale:e.occlusion.scale,lowpassHz:e.occlusion.lowpassHz}:void 0}))}}setUnderwater(e,r=400){let n=this.graph.filter;n&&(n.type="lowpass",n.Q.value=.707,n.frequency.value=e?r:2e4)}createPanner(e,r){let n=e.createPanner?e.createPanner():Object.assign(e.createGain(),{positionX:{value:this.listener.origin.x},positionY:{value:this.listener.origin.y},positionZ:{value:this.listener.origin.z}});return this.configurePanner(n,r)}configurePanner(e,r){let n=Fi(r);return e.refDistance=Bi,e.maxDistance=Qn(r),e.rolloffFactor=n,e.distanceModel="linear",e.positionX.value=this.listener.origin.x,e.positionY.value=this.listener.origin.y,e.positionZ.value=this.listener.origin.z,e}applyOriginToPanner(e,r){e.positionX.value=r.x,e.positionY.value=r.y,e.positionZ.value=r.z}createOcclusionFilter(e,r){if(!e.createBiquadFilter)return;let n=e.createBiquadFilter();return n.type="lowpass",n.Q.value=.707,n.frequency.value=Rd(r,10,2e4),n}updateSourceGain(e){let r=e.occlusion?.scale??1,n=Math.abs(this.playbackRate-1)<.001?1:0;e.gain.gain.value=e.baseGain*r*n}applyOcclusion(e,r){let n=wh(r?.gainScale??1),i=Math.abs(this.playbackRate-1)<.001?1:0;if(e.gain.gain.value=e.baseGain*n*i,e.occlusion?.filter){let a=r?.lowpassHz??2e4;e.occlusion.filter.frequency.value=Rd(a,10,2e4)}e.occlusion?(e.occlusion.scale=n,e.occlusion.lowpassHz=r?.lowpassHz):r&&(e.occlusion={scale:n,lowpassHz:r.lowpassHz})}},Rd=(t,e,r)=>Math.min(r,Math.max(e,t)),wh=t=>Rd(t,0,1);var Jo=class{constructor(e){this.trace=e;this.resolve=(e,r,n)=>{let i=Dc(df(r,e.origin)),a=Qn(n),c=2e4*(1-Math.min(i,a)/Math.max(1,a)*.9),l=this.trace(e.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 Mh(t){return new Jo(t).resolve}var Vl=class{constructor(e){this.createElement=e.createElement,this.resolveSource=e.resolveSource??(async r=>r),this.volume=e.volume??1,this.crossfadeDuration=e.crossfadeDuration??1}async playTrack(e){let r=`music/track${e.toString().padStart(2,"0")}.ogg`;return this.play(r)}async play(e,{loop:r=!0,restart:n=!1}={}){if(this.track===e&&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(e);this.cancelFade(),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0),this.currentElement&&(this.fadingElement=this.currentElement,this.currentElement=void 0);let a=this.createElement();a.src=i,a.loop=r,a.volume=0,a.currentTime=0,a.load();try{await a.play()}catch(o){console.warn(`MusicSystem: Failed to play ${e}`,o),this.fadingElement}this.currentElement=a,this.track=e,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(e){this.volume=e,this.currentElement&&!this.fadeInterval&&(this.currentElement.volume=e)}getState(){let e=!!(this.currentElement&&!this.currentElement.paused&&!this.currentElement.ended),r=!!this.currentElement?.paused;return{track:this.track,paused:r,playing:e,volume:this.volume}}startCrossfade(){let r=this.crossfadeDuration*1e3/50,n=this.volume/r,i=0,a=this.fadingElement?this.fadingElement.volume:0,o=()=>{let s=!1;this.currentElement&&(i=Math.min(this.volume,i+n),this.currentElement.volume=i,i<this.volume&&(s=!0)),this.fadingElement&&(a=Math.max(0,a-n),this.fadingElement.volume=a,a>0?s=!0:(this.fadingElement.pause(),this.fadingElement=void 0)),s||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 I1(t){t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.enable(t.CULL_FACE),t.cullFace(t.BACK),t.enable(t.BLEND),t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA)}function B1(t,e,r,n){for(let i of e){let a=t.getExtension(i);if(!a)throw new Error(`Missing required WebGL extension: ${i}`);n.set(i,a)}for(let i of r){let a=t.getExtension(i);a&&n.set(i,a)}}function Ah(t,e={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:i=[]}=e,a=t.getContext("webgl2",r??{antialias:!0});if(!a)throw new Error("WebGL2 not supported or failed to initialize");I1(a);let o=new Map;B1(a,n,i,o);let s=!1,c=new Set,l=new Set,d=u=>{s=!0,u.preventDefault();for(let h of c)h()},f=()=>{s=!1;for(let u of l)u()};return t.addEventListener("webglcontextlost",d),t.addEventListener("webglcontextrestored",f),{gl:a,extensions:o,isLost:()=>s,onLost(u){return c.add(u),()=>c.delete(u)},onRestored(u){return l.add(u),()=>l.delete(u)},dispose(){t.removeEventListener("webglcontextlost",d),t.removeEventListener("webglcontextrestored",f),c.clear(),l.clear(),o.clear()}}}function Eh(t,e,r){let n=t.createShader(e);if(!n)throw new Error("Failed to allocate shader");if(t.shaderSource(n,r.trim()),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS)){let a=t.getShaderInfoLog(n)??"Unknown shader compile failure";throw t.deleteShader(n),new Error(a)}return n}function F1(t,e,r,n){let i=t.createProgram();if(!i)throw new Error("Failed to allocate shader program");if(t.attachShader(i,e),t.attachShader(i,r),n)for(let[o,s]of Object.entries(n))t.bindAttribLocation(i,s,o);if(t.linkProgram(i),!t.getProgramParameter(i,t.LINK_STATUS)){let o=t.getProgramInfoLog(i)??"Unknown shader link failure";throw t.deleteProgram(i),new Error(o)}return i}var le=class t{constructor(e,r,n){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=r,this.sourceSize=n}static create(e,r,n){let i=Eh(e,e.VERTEX_SHADER,r.vertex),a=Eh(e,e.FRAGMENT_SHADER,r.fragment);try{let o=F1(e,i,a,n),s=r.vertex.length+r.fragment.length;return new t(e,o,s)}finally{e.deleteShader(i),e.deleteShader(a)}}use(){this.gl.useProgram(this.program)}getUniformLocation(e){if(!this.uniformLocations.has(e)){let r=this.gl.getUniformLocation(this.program,e);this.uniformLocations.set(e,r)}return this.uniformLocations.get(e)??null}getAttributeLocation(e){if(!this.attributeLocations.has(e)){let r=this.gl.getAttribLocation(this.program,e);this.attributeLocations.set(e,r)}return this.attributeLocations.get(e)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function Lh(t,e,r){return le.create(t,e,r)}var Ae=class{constructor(e,r=e.STATIC_DRAW,n){this.gl=e,this.target=n??e.ARRAY_BUFFER;let i=e.createBuffer();if(!i)throw new Error("Failed to allocate buffer");this.buffer=i,e.bindBuffer(this.target,this.buffer),e.bufferData(this.target,0,r)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(e,r=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,e,r)}update(e,r=0){this.bind(),this.gl.bufferSubData(this.target,r,e)}dispose(){this.gl.deleteBuffer(this.buffer)}},Qe=class extends Ae{constructor(e,r=e.STATIC_DRAW){super(e,r,e.ELEMENT_ARRAY_BUFFER)}},Ee=class{constructor(e){this.gl=e;let r=e.createVertexArray();if(!r)throw new Error("Failed to allocate vertex array object");this.vao=r}bind(){this.gl.bindVertexArray(this.vao)}configureAttributes(e,r){this.bind(),r&&r.bind();for(let n of e)this.gl.enableVertexAttribArray(n.index),this.gl.vertexAttribPointer(n.index,n.size,n.type,n.normalized??!1,n.stride??0,n.offset??0),n.divisor!==void 0&&this.gl.vertexAttribDivisor(n.index,n.divisor)}dispose(){this.gl.deleteVertexArray(this.vao)}},Je=class{constructor(e,r=e.TEXTURE_2D){this.width=0;this.height=0;this.gl=e,this.target=r;let n=e.createTexture();if(!n)throw new Error("Failed to allocate texture");this.texture=n}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}upload(e,r,n){this.width=e,this.height=r,this.uploadImage(0,this.gl.RGBA,e,r,0,this.gl.RGBA,this.gl.UNSIGNED_BYTE,n)}uploadImage(e,r,n,i,a,o,s,c){this.bind(),this.gl.texImage2D(this.target,e,r,n,i,a,o,s,c)}dispose(){this.gl.deleteTexture(this.texture)}},ca=class{constructor(e){this.gl=e,this.target=e.TEXTURE_CUBE_MAP;let r=e.createTexture();if(!r)throw new Error("Failed to allocate cubemap texture");this.texture=r}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadFace(e,r,n,i,a,o,s,c,l){this.bind(),this.gl.texImage2D(e,r,n,i,a,o,s,c,l)}dispose(){this.gl.deleteTexture(this.texture)}},gi=class{constructor(e){this.gl=e;let r=e.createFramebuffer();if(!r)throw new Error("Failed to allocate framebuffer");this.framebuffer=r}bind(e=this.gl.FRAMEBUFFER){this.gl.bindFramebuffer(e,this.framebuffer)}attachTexture2D(e,r,n=0){this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,e,r.target,r.texture,n)}dispose(){this.gl.deleteFramebuffer(this.framebuffer)}};var Pd=4,Cd=7*Pd,Id=[{index:0,size:3,type:5126,stride:Cd,offset:0},{index:1,size:2,type:5126,stride:Cd,offset:3*Pd},{index:2,size:2,type:5126,stride:Cd,offset:5*Pd}];function k1(t,e){return{width:t,height:t,padding:e,data:new Uint8Array(t*t*4),cursorX:0,cursorY:0,rowHeight:0}}function D1(t){let e=t.width*t.height;if(e===0)throw new Error("Invalid lightmap with zero area");let r=t.samples.byteLength/e;if(!Number.isInteger(r)||r<3||r>4)throw new Error("Unsupported lightmap channel count");return r}function z1(t,e,r){let n=D1(r),i=t.width*4,a=e.x+t.padding,o=e.y+t.padding,s=0;for(let c=0;c<r.height;c++){let l=(o+c)*i+a*4;for(let d=0;d<r.width;d++){let f=l+d*4;t.data[f]=r.samples[s],t.data[f+1]=r.samples[s+1],t.data[f+2]=r.samples[s+2],t.data[f+3]=n===4?r.samples[s+3]:255,s+=n}}}function O1(t,e,r){let n=e.width+r.lightmapPadding*2,i=e.height+r.lightmapPadding*2;if(n>r.atlasSize||i>r.atlasSize)throw new Error("Lightmap too large for atlas");for(let s of t){if(s.cursorX+n>s.width&&(s.cursorX=0,s.cursorY+=s.rowHeight+r.lightmapPadding,s.rowHeight=0),s.cursorY+i>s.height)continue;let c={atlasIndex:t.indexOf(s),x:s.cursorX,y:s.cursorY,width:e.width,height:e.height};return s.cursorX+=n+r.lightmapPadding,s.rowHeight=Math.max(s.rowHeight,i),{placement:c,atlas:s}}let a=k1(r.atlasSize,r.lightmapPadding);t.push(a);let o={atlasIndex:t.length-1,x:0,y:0,width:e.width,height:e.height};return a.cursorX=n+r.lightmapPadding,a.rowHeight=i,{placement:o,atlas:a}}function Gl(t){return t instanceof Float32Array?t:new Float32Array(t)}function U1(t,e){if(!t){let n=new Uint16Array(e);for(let i=0;i<e;i++)n[i]=i;return n}return t instanceof Uint16Array?t:new Uint16Array(t)}function N1(t,e){let r=new Float32Array(t.length);for(let n=0;n<t.length;n+=2)r[n]=e.offset[0]+t[n]*e.scale[0],r[n+1]=e.offset[1]+t[n+1]*e.scale[1];return r}function H1(t,e){let r=Gl(t.vertices),n=Gl(t.textureCoords),i=e?N1(Gl(t.lightmapCoords??t.textureCoords),e):Gl(t.lightmapCoords??new Float32Array(n.length)),a=r.length/3;if(n.length/2!==a)throw new Error("Texture coordinates count mismatch");if(i.length/2!==a)throw new Error("Lightmap coordinates count mismatch");let o=new Float32Array(a*7);for(let s=0;s<a;s++){let c=s*3,l=s*2,d=s*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 Th(t){let e=[];for(let r=0;r<t.faces.length;r++){let n=t.faces[r];if(n.texInfo<0)continue;let i=t.texInfo[n.texInfo],a=[],o=[],s=[];for(let u=0;u<n.numEdges;u++){let h=t.surfEdges[n.firstEdge+u],m=t.edges[Math.abs(h)],g=h>=0?m.vertices[0]:m.vertices[1],p=t.vertices[g];a.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),s.push(y,v)}let c=[],l=a.length/3;for(let u=1;u<l-1;u++)c.push(0,u,u+1);let d,f=t.lightMapInfo[r];if(f){let u=1/0,h=-1/0,m=1/0,g=-1/0;for(let _=0;_<o.length;_+=2){let w=o[_],S=o[_+1];w<u&&(u=w),w>h&&(h=w),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,x=Math.ceil(g/16)-y+1,b=$s(n,t.lightMaps,f);if(b&&b.length===v*x*3){d={width:v,height:x,samples:b};for(let _=0;_<s.length;_+=2)s[_]=o[_]/16-p+.5,s[_+1]=o[_+1]/16-y+.5}}e.push({vertices:new Float32Array(a),textureCoords:new Float32Array(o),lightmapCoords:new Float32Array(s),indices:new Uint16Array(c),texture:i.texture,surfaceFlags:i.flags,lightmap:d,faceIndex:r})}return e}function Rh(t,e,r,n={}){let i=e;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=e.filter(f=>!d.has(f.faceIndex)))}let a={atlasSize:n.atlasSize??1024,lightmapPadding:n.lightmapPadding??1,hiddenClassnames:n.hiddenClassnames??new Set},o=[],s=new Map;i.forEach((d,f)=>{if(!d.lightmap)return;let{placement:u,atlas:h}=O1(o,d.lightmap,a);z1(h,u,d.lightmap),s.set(f,{atlasIndex:u.atlasIndex,offset:[(u.x+a.lightmapPadding)/a.atlasSize,(u.y+a.lightmapPadding)/a.atlasSize],scale:[u.width/a.atlasSize,u.height/a.atlasSize]})});let c=o.map(d=>{let f=new Je(t);return f.setParameters({wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE,minFilter:t.LINEAR,magFilter:t.LINEAR}),f.uploadImage(0,t.RGBA,d.width,d.height,0,t.RGBA,t.UNSIGNED_BYTE,d.data),{texture:f,width:d.width,height:d.height,pixels:d.data}});return{surfaces:i.map((d,f)=>{let u=s.get(f),h=H1(d,u),m=U1(d.indices,h.length/7),g=new Ae(t,t.STATIC_DRAW,t.ARRAY_BUFFER);g.upload(h);let p=new Qe(t,t.STATIC_DRAW);p.upload(m);let y=new Ee(t);return y.configureAttributes(Id,g),{vao:y,vertexBuffer:g,indexBuffer:p,indexCount:m.length,vertexCount:h.length/7,texture:d.texture,surfaceFlags:d.surfaceFlags??Ga,lightmap:u,vertexData:h,indexData:m}}),lightmaps:c}}function da(t){let{normal:e,distance:r}=t,n=Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z);if(n===0)return t;let i=1/n;return{normal:{x:e.x*i,y:e.y*i,z:e.z*i},distance:r*i}}function kn(t){if(t.length!==16)throw new Error("View-projection matrix must contain 16 elements");let e=t[0],r=t[4],n=t[8],i=t[12],a=t[1],o=t[5],s=t[9],c=t[13],l=t[2],d=t[6],f=t[10],u=t[14],h=t[3],m=t[7],g=t[11],p=t[15];return[da({normal:{x:h+e,y:m+r,z:g+n},distance:p+i}),da({normal:{x:h-e,y:m-r,z:g-n},distance:p-i}),da({normal:{x:h+a,y:m+o,z:g+s},distance:p+c}),da({normal:{x:h-a,y:m-o,z:g-s},distance:p-c}),da({normal:{x:h+l,y:m+d,z:g+f},distance:p+u}),da({normal:{x:h-l,y:m-d,z:g-f},distance:p-u})]}function V1(t,e){return t.normal.x*e.x+t.normal.y*e.y+t.normal.z*e.z+t.distance}function yi(t,e,r){for(let n of r){let i=n.normal.x>=0?e.x:t.x,a=n.normal.y>=0?e.y:t.y,o=n.normal.z>=0?e.z:t.z;if(V1(n,{x:i,y:a,z:o})<0)return!1}return!0}function Ch(t,e,r){let n=(t.x+e.x)*.5,i=(t.y+e.y)*.5,a=(t.z+e.z)*.5,o=(e.x-t.x)*.5,s=(e.y-t.y)*.5,c=(e.z-t.z)*.5,l=r,d=l[0]*n+l[4]*i+l[8]*a+l[12],f=l[1]*n+l[5]*i+l[9]*a+l[13],u=l[2]*n+l[6]*i+l[10]*a+l[14],h=Math.abs(l[0])*o+Math.abs(l[4])*s+Math.abs(l[8])*c,m=Math.abs(l[1])*o+Math.abs(l[5])*s+Math.abs(l[9])*c,g=Math.abs(l[2])*o+Math.abs(l[6])*s+Math.abs(l[10])*c;return{mins:{x:d-h,y:f-m,z:u-g},maxs:{x:d+h,y:f+m,z:u+g}}}function Ph(t){return t<0}function Ih(t){return-t-1}function Bh(t,e){return t.normal[0]*e.x+t.normal[1]*e.y+t.normal[2]*e.z-t.dist}function Fd(t,e,r){if(!t||e<0||r<0)return!0;let n=Math.ceil(t.numClusters/8),i=t.clusters[e].pvs,a=Math.floor(r/8),o=1<<r%8;return a<0||a>=n?!1:(i[a]&o)!==0}function G1(t,e){let r={x:t.mins[0],y:t.mins[1],z:t.mins[2]},n={x:t.maxs[0],y:t.maxs[1],z:t.maxs[2]};return yi(r,n,e)}function bi(t,e){let r=0;for(;r>=0;){let n=t.nodes[r],i=t.planes[n.planeIndex],o=Bh(i,e)>=0?0:1,s=n.children[o];if(Ph(s))return Ih(s);r=s}return-1}function W1(t,e){let r=t.leafs[e],n=[];for(let i=0;i<r.numLeafFaces;i+=1)n.push(t.leafLists.leafFaces[e][i]);return n}function Bd(t,e,r,n,i,a,o,s){if(Ph(e)){let h=Ih(e),m=t.leafs[h];if(s&&m.area>=0&&!s.has(m.area)||!Fd(t.visibility,i,m.cluster)||!G1(m,n))return;let g={x:(m.mins[0]+m.maxs[0])*.5,y:(m.mins[1]+m.maxs[1])*.5,z:(m.mins[2]+m.maxs[2])*.5},p=g.x-r.x,y=g.y-r.y,v=g.z-r.z,x=-(p*p+y*y+v*v);for(let b of W1(t,h))o.has(b)||(o.add(b),a.push({faceIndex:b,leafIndex:h,sortKey:x}));return}let c=t.nodes[e],l=t.planes[c.planeIndex],d=Bh(l,r),f=d>=0?c.children[0]:c.children[1],u=d>=0?c.children[1]:c.children[0];yi({x:c.mins[0],y:c.mins[1],z:c.mins[2]},{x:c.maxs[0],y:c.maxs[1],z:c.maxs[2]},n)&&(Bd(t,f,r,n,i,a,o,s),Bd(t,u,r,n,i,a,o,s))}function kd(t,e,r){let n=new Set;if(e<0||e>=t.areas.length)return n;let i=[e];for(n.add(e);i.length>0;){let a=i.pop(),o=t.areas[a];for(let s=0;s<o.numAreaPortals;s++){let c=o.firstAreaPortal+s,l=t.areaPortals[c],d=l.otherArea;(l.portalNumber<=0||r[l.portalNumber])&&!n.has(d)&&(n.add(d),i.push(d))}}return n}function xi(t,e,r,n){let i=bi(t,e),a=i>=0?t.leafs[i]:null,o=a?a.cluster:-1,s=a?a.area:-1,c=null;n&&s>=0&&t.areas&&t.areas.length>0&&(c=kd(t,s,n));let l=[];return Bd(t,0,e,r,o,l,new Set,c),l}var Dn=32,Wl=class{constructor(){this.lights=[]}addLight(e,r){if(e.key!==void 0){let n=this.lights.findIndex(i=>i.key===e.key);if(n!==-1){this.lights[n]=e;return}}this.lights.push(e)}clear(){this.lights=[]}update(e,r=0){if(this.lights=this.lights.filter(n=>n.die>e),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 ua(t){let e=[];for(let r=0;r<t.length;r+=3){let n=t[r],i=t[r+1],a=t[r+2];e.push(n,i,i,a,a,n)}return t instanceof Uint32Array||Math.max(...e)>65535?new Uint32Array(e):new Uint16Array(e)}var Dd=`#version 300 es
141
+ ïBçϧmÙIólÜoëVbƒ¦¯éWÇû3`});var Hr={a:Ht};this.setModule=D=>{t.setModule(en,D)},this.getModule=()=>t.getModule(en),this.instantiate=()=>(this.getModule().then(D=>WebAssembly.instantiate(D,Hr)).then(D=>{let ae=D.exports;Pt(ae),m=ae.l,g(),Nr(ae),r()}),this.ready=new Promise(D=>{r=D}).then(()=>{this.HEAP=m.buffer,this.malloc=sn,this.free=ln,this.create_decoder=Or,this.send_setup=ut,this.init_dsp=tt,this.decode_packets=Vt,this.destroy_decoder=Wn}),this)}function pi(){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(t=>{this._common=t,this._input=this._common.allocateTypedArray(this._inputSize,Uint8Array),this._firstPage=!0,this._inputLen=this._common.allocateTypedArray(1,Uint32Array),this._outputBufferPtr=this._common.allocateTypedArray(1,Uint32Array),this._channels=this._common.allocateTypedArray(1,Uint32Array),this._sampleRate=this._common.allocateTypedArray(1,Uint32Array),this._samplesDecoded=this._common.allocateTypedArray(1,Uint32Array);let e=256;this._errors=this._common.allocateTypedArray(e,Uint32Array),this._errorsLength=this._common.allocateTypedArray(1,Int32Array),this._frameNumber=0,this._inputBytes=0,this._outputSamples=0,this._decoder=this._common.wasm.create_decoder(this._input.ptr,this._inputLen.ptr,this._outputBufferPtr.ptr,this._channels.ptr,this._sampleRate.ptr,this._samplesDecoded.ptr,this._errors.ptr,this._errorsLength.ptr,e)}),Object.defineProperty(this,"ready",{enumerable:!0,get:()=>this._ready}),this.reset=()=>(this.free(),this._init()),this.free=()=>{this._common.wasm.destroy_decoder(this._decoder),this._common.free()},this.sendSetupHeader=t=>{this._input.buf.set(t),this._inputLen.buf[0]=t.length,this._common.wasm.send_setup(this._decoder,this._firstPage),this._firstPage=!1},this.initDsp=()=>{this._common.wasm.init_dsp(this._decoder)},this.decodePackets=t=>{let e=[],r=0,n=[];for(let i=0;i<t.length;i++){let o=t[i];this._input.buf.set(o),this._inputLen.buf[0]=o.length,this._common.wasm.decode_packets(this._decoder);let a=this._samplesDecoded.buf[0],s=[],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(a);a&&d.set(new Float32Array(this._common.wasm.HEAP,c[l],a)),s.push(d)}e.push(s),r+=a,this._frameNumber++,this._inputBytes+=o.length,this._outputSamples+=a;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:o.length,frameNumber:this._frameNumber,inputBytes:this._inputBytes,outputSamples:this._outputSamples})}this._errorsLength.buf[0]=0}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,e,this._channels.buf[0],r,this._sampleRate.buf[0],16)},this._isWebWorker=pi.isWebWorker,this._WASMAudioDecoderCommon=pi.WASMAudioDecoderCommon||ge,this._EmscriptenWASM=pi.EmscriptenWASM||en,this._module=pi.module,this._inputSize=128*1024,this._ready=this._init(),this}var Cl=Symbol(),tn=class{constructor(){this._onCodec=e=>{if(e!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+e)},new ge,this._init(),this._ready=this[Cl](pi)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new wh("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[Cl](e){if(this._decoder){let r=this._decoder;await r.ready.then(()=>r.free())}return this._decoder=new e,this._decoder.ready}get ready(){return this._ready}async reset(){return this._init(),this._decoder.reset()}free(){this._decoder.free()}async decodeOggPages(e){let r=[];for(let o=0;o<e.length;o++){let a=e[o];if(this._vorbisSetupInProgress&&(a[Rl][0]===1&&this._decoder.sendSetupHeader(a[Rl]),a[Tl].length)){let s=a[Tl][0][Mh];this._decoder.sendSetupHeader(s[Eh]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}r.push(...a[Tl].map(s=>s[Rl]))}let n=await this._decoder.decodePackets(r);this._totalSamplesDecoded+=n.samplesDecoded;let i=e[e.length-1];if(i&&i[Ah]){let o=this._totalSamplesDecoded-i[Lh];if(o>0){for(let a=0;a<n.channelData.length;a++)n.channelData[a]=n.channelData[a].subarray(0,n.samplesDecoded-o);n.samplesDecoded-=o,this._totalSamplesDecoded-=o}}return n}async decode(e){return this.decodeOggPages([...this._codecParser.parseChunk(e)])}async flush(){let e=await this.decodeOggPages([...this._codecParser.flush()]);return await this.reset(),e}async decodeFile(e){let r=await this.decodeOggPages([...this._codecParser.parseAll(e)]);return await this.reset(),r}};var Pd=class extends Xi{constructor(e){super(e,"ogg-vorbis-decoder",pi,en)}async sendSetupHeader(e){return this.postToDecoder("sendSetupHeader",e)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(e){return this.postToDecoder("decodePackets",e)}},Ka=class extends tn{constructor(){super(),this._ready=super[Cl](Pd)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};tl(tn,"OggVorbisDecoder");tl(Ka,"OggVorbisDecoderWebWorker");var Id=class extends Error{constructor(e){super(e),this.name="OggDecodeError"}};async function Pl(t,e=new tn){await e.ready;let r=await e.decode(new Uint8Array(t)),n=r.errors;if(n&&n.length>0)throw new Id(n.map(i=>i.message).join("; "));return{sampleRate:r.sampleRate,channels:r.channelData.length,bitDepth:r.bitDepth,channelData:r.channelData}}var Ya=class extends Error{constructor(e){super(e),this.name="AudioRegistryError"}},lo=class{constructor(e,r={}){this.vfs=e;this.refCounts=new Map;this.nextRequestId=0;this.cache=new yn(r.cacheSize??64),r.workerPath&&(this.worker=new Worker(r.workerPath,{type:"module"}))}get size(){return this.cache.size}get capacity(){return this.cache.capacity}async load(e){let r=e.toLowerCase(),n=this.cache.get(r);if(n)return this.refCounts.set(r,(this.refCounts.get(r)??0)+1),n;let o=(await this.vfs.readFile(e)).slice().buffer,a=await this.decodeByExtension(e,o);return this.cache.set(r,a),this.refCounts.set(r,1),a}release(e){let r=e.toLowerCase(),n=this.refCounts.get(r)??0;n<=1?(this.cache.delete(r),this.refCounts.delete(r)):this.refCounts.set(r,n-1)}clearAll(){this.cache.clear(),this.refCounts.clear()}set capacity(e){this.cache.capacity=e}async decodeByExtension(e,r){let n=e.toLowerCase();if(n.endsWith(".wav")){if(this.worker)return this.decodeWavInWorker(r);let i=el(r),o=i.channels,a=Array.from({length:o},()=>new Float32Array(i.samples.length/o));for(let s=0;s<i.samples.length;s+=1)a[s%o][Math.floor(s/o)]=i.samples[s];return{sampleRate:i.sampleRate,channels:o,bitDepth:i.bitsPerSample,channelData:a}}if(n.endsWith(".ogg")||n.endsWith(".oga"))return Pl(r);throw new Ya(`Unsupported audio format: ${e}`)}decodeWavInWorker(e){return new Promise((r,n)=>{if(!this.worker){n(new Error("Worker not initialized"));return}let i=this.nextRequestId++,o=a=>{if(a.data.id===i)if(this.worker.removeEventListener("message",o),a.data.type==="success"){let s=a.data.data,c=s.channels,l=Array.from({length:c},()=>new Float32Array(s.samples.length/c));for(let d=0;d<s.samples.length;d+=1)l[d%c][Math.floor(d/c)]=s.samples[d];r({sampleRate:s.sampleRate,channels:c,bitDepth:s.bitsPerSample,channelData:l})}else n(new Error(a.data.message))};this.worker.addEventListener("message",o),this.worker.postMessage({id:i,buffer:e,type:"wav"},[e])})}};var z1="quake2ts-pak-indexes",O1="pak-indexes";function Th(){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 qa(t,e){let r=Th();return r?new Promise((n,i)=>{let o=r.open(t,1);o.onupgradeneeded=()=>{let{result:a}=o;a.objectStoreNames.contains(e)||a.createObjectStore(e,{keyPath:"key"})},o.onerror=()=>i(o.error??new Error("Unknown IndexedDB error")),o.onsuccess=()=>n(o.result)}):Promise.reject(new Error("IndexedDB is not available in this environment"))}function Za(t,e,r,n){return new Promise((i,o)=>{let s=t.transaction(e,r).objectStore(e),c=n(s);c.onsuccess=()=>i(c.result),c.onerror=()=>o(c.error??new Error("IndexedDB transaction error"))})}function Bd(t,e){return`${_e(t)}:${e.toString(16)}`}function U1(t){return t.map(e=>({...e}))}var Il=class{constructor(e=z1,r=O1){this.dbName=e;this.storeName=r}get isSupported(){return!!Th()}async persist(e){if(!this.isSupported)return;let r=e.validate(),n={...r,key:Bd(e.name,r.checksum),name:e.name,size:e.size,persistedAt:Date.now(),entries:U1(r.entries)},i=await qa(this.dbName,this.storeName);return await Za(i,this.storeName,"readwrite",o=>o.put(n)),i.close(),n}async find(e,r){if(!this.isSupported)return;let n=await qa(this.dbName,this.storeName),i=r!==void 0?Bd(e,r):void 0,o=await Za(n,this.storeName,"readonly",a=>i?a.get(i):a.getAll());if(n.close(),!!o){if(Array.isArray(o)){let a=_e(e),s=o.filter(c=>_e(c.name)===a);return s.length===0?void 0:s.sort((c,l)=>l.persistedAt-c.persistedAt)[0]}return o}}async remove(e,r){if(!this.isSupported)return!1;let n=await qa(this.dbName,this.storeName),i=r!==void 0?Bd(e,r):void 0,o=await Za(n,this.storeName,"readwrite",a=>{if(i)return a.delete(i);let s=`${_e(e)}:`;return a.delete(IDBKeyRange.bound(s,`${s}\uFFFF`,!1,!0))});return n.close(),typeof o=="number"?o>0:!0}async clear(){if(!this.isSupported)return;let e=await qa(this.dbName,this.storeName);await Za(e,this.storeName,"readwrite",r=>r.clear()),e.close()}async list(){if(!this.isSupported)return[];let e=await qa(this.dbName,this.storeName),r=await Za(e,this.storeName,"readonly",n=>n.getAll());return e.close(),r.sort((n,i)=>i.persistedAt-n.persistedAt)}};var gi=class extends Error{constructor(r,n){super(n??`Missing dependencies: ${r.join(", ")}`);this.missing=r;this.name="AssetDependencyError"}},ja=class{constructor(){this.nodes=new Map}register(e,r=[]){let n=this.nodes.get(e)??{dependencies:new Set,loaded:!1};r.forEach(i=>n.dependencies.add(i)),this.nodes.set(e,n),r.forEach(i=>{this.nodes.has(i)||this.nodes.set(i,{dependencies:new Set,loaded:!1})})}markLoaded(e){let r=this.nodes.get(e)??{dependencies:new Set,loaded:!1},n=this.getMissingDependencies(e,r);if(n.length>0)throw new gi(n,`Asset ${e} is missing dependencies: ${n.join(", ")}`);r.loaded=!0,this.nodes.set(e,r)}markUnloaded(e){let r=this.nodes.get(e);r&&(r.loaded=!1)}isLoaded(e){return this.nodes.get(e)?.loaded??!1}missingDependencies(e){let r=this.nodes.get(e);return r?this.getMissingDependencies(e,r):[]}reset(){this.nodes.clear()}getMissingDependencies(e,r){let n=[];for(let i of r.dependencies)this.nodes.get(i)?.loaded||n.push(i);return n}},Bl=class{constructor(e,r={}){this.vfs=e;this.maps=new Map;this.loadQueue=[];this.activeLoads=0;this.textures=new Wi({capacity:r.textureCacheCapacity??128,maxMemory:r.textureMemoryLimit}),this.audio=new lo(e,{cacheSize:r.audioCacheSize??64,workerPath:r.audioWorkerPath}),this.dependencyTracker=r.dependencyTracker??new ja,this.resourceTracker=r.resourceTracker,this.md2=new Hi(e),this.md3=new Vi(e),this.sprite=new Gi(e),this.bsp=new Ni(e,{useWorker:!!r.bspWorkerPath,workerPath:r.bspWorkerPath}),this.maxConcurrentLoads=r.maxConcurrentLoads??4,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(e="pics/colormap.pcx"){try{let r=await this.vfs.readFile(e),n=ra(r);n.palette&&(this.palette=n.palette)}catch(r){console.warn(`Failed to load palette from ${e}:`,r)}}isAssetLoaded(e,r){return this.dependencyTracker.isLoaded(this.makeKey(e,r))}registerTexture(e,r){this.textures.set(e,r);let n=this.makeKey("texture",e);this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n)}async loadTexture(e){if(this.resourceTracker){let a=this.vfs.stat(e);this.resourceTracker.recordLoad("texture",e,a?.size,a?.sourcePak)}let r=this.textures.get(e);if(r)return r;let n=await this.vfs.readFile(e),i=e.split(".").pop()?.toLowerCase(),o;if(i==="wal")o=Js(n,this.palette);else if(i==="pcx")o=Qs(ra(n));else if(i==="tga")o=Qf(ud(n));else throw new Error(`Unsupported texture format for loadTexture: ${i}`);return this.registerTexture(e,o),o}async loadSound(e){if(this.resourceTracker){let i=this.vfs.stat(e);this.resourceTracker.recordLoad("sound",e,i?.size,i?.sourcePak)}let r=await this.audio.load(e),n=this.makeKey("sound",e);return this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n),r}async loadMd2Model(e,r=[]){if(this.resourceTracker){let s=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,s?.size,s?.sourcePak)}let n=this.makeKey("model",e),i=r.map(s=>this.makeKey("texture",s));this.dependencyTracker.register(n,i);let o=this.dependencyTracker.missingDependencies(n);if(o.length>0)throw new gi(o,`Asset ${n} is missing dependencies: ${o.join(", ")}`);let a=await this.md2.load(e);return this.dependencyTracker.markLoaded(n),a}getMd2Model(e){if(this.resourceTracker){let r=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,r?.size,r?.sourcePak)}return this.md2.get(e)}async loadMd3Model(e,r=[]){if(this.resourceTracker){let s=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,s?.size,s?.sourcePak)}let n=this.makeKey("model",e),i=r.map(s=>this.makeKey("texture",s));this.dependencyTracker.register(n,i);let o=this.dependencyTracker.missingDependencies(n);if(o.length>0)throw new gi(o,`Asset ${n} is missing dependencies: ${o.join(", ")}`);let a=await this.md3.load(e);return this.dependencyTracker.markLoaded(n),a}getMd3Model(e){if(this.resourceTracker){let r=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,r?.size,r?.sourcePak)}return this.md3.get(e)}async loadSprite(e){if(this.resourceTracker){let i=this.vfs.stat(e);this.resourceTracker.recordLoad("sprite",e,i?.size,i?.sourcePak)}let r=this.makeKey("sprite",e);this.dependencyTracker.register(r);let n=await this.sprite.load(e);return this.dependencyTracker.markLoaded(r),n}async loadMap(e){if(this.resourceTracker){let i=this.vfs.stat(e);this.resourceTracker.recordLoad("map",e,i?.size,i?.sourcePak)}let r=this.makeKey("map",e);if(this.maps.has(e))return this.maps.get(e);this.dependencyTracker.register(r);let n=await this.bsp.load(e);return this.maps.set(e,n),this.dependencyTracker.markLoaded(r),n}getMap(e){return this.maps.get(e)}listFiles(e){return this.vfs.findByExtension(e)}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset(),this.maps.clear(),this.loadQueue.length=0}getMemoryUsage(){let e=0,r=0;if(typeof process<"u"&&process.memoryUsage){let n=process.memoryUsage();e=n.heapTotal,r=n.heapUsed}return{textures:this.textures.memoryUsage,audio:this.audio.size,heapTotal:e,heapUsed:r}}enforceMemoryBudget(e){e.textureMemoryLimit!==void 0&&(this.textures.maxMemory=e.textureMemoryLimit),e.textureCacheCapacity!==void 0&&(this.textures.capacity=e.textureCacheCapacity),e.audioCacheSize!==void 0&&(this.audio.capacity=e.audioCacheSize)}clearCache(e){switch(e){case"texture":this.textures.clear();break;case"sound":this.audio.clearAll();break;case"map":this.maps.clear();break}}async preloadAssets(e){let r=e.map(n=>{let i=this.detectAssetType(n);return i?this.queueLoad(n,i,0):Promise.resolve()});await Promise.all(r)}queueLoad(e,r,n=1){return r==="texture"&&this.textures.get(e)?Promise.resolve(this.textures.get(e)):new Promise((i,o)=>{this.loadQueue.push({path:e,type:r,priority:n,resolve:i,reject:o}),this.loadQueue.sort((a,s)=>s.priority-a.priority),this.processQueue()})}async processQueue(){if(this.activeLoads>=this.maxConcurrentLoads||this.loadQueue.length===0)return;let e=this.loadQueue.shift();this.activeLoads++;try{let r;switch(e.type){case"texture":r=await this.loadTexture(e.path);break;case"sound":r=await this.loadSound(e.path);break;case"model":e.path.endsWith(".md2")?r=await this.loadMd2Model(e.path):e.path.endsWith(".md3")&&(r=await this.loadMd3Model(e.path));break;case"sprite":r=await this.loadSprite(e.path);break;case"map":r=await this.loadMap(e.path);break;default:throw new Error(`Unknown asset type ${e.type}`)}e.resolve(r)}catch(r){e.reject(r)}finally{this.activeLoads--,this.processQueue()}}detectAssetType(e){let r=e.split(".").pop()?.toLowerCase();return r?["wal","pcx","tga","png","jpg"].includes(r)?"texture":["wav","ogg"].includes(r)?"sound":["md2","md3"].includes(r)?"model":["sp2"].includes(r)?"sprite":["bsp"].includes(r)?"map":null:null}makeKey(e,r){return`${e}:${_e(r)}`}};var Fl=class{constructor(e){this.factory=e}getContext(){return this.context||(this.context=this.factory()),this.context}async resume(){let e=this.getContext();e.state==="suspended"&&await e.resume()}getState(){return this.context?.state??"suspended"}};function kl(t){let e=t.getContext(),r=e.createGain();r.gain.value=1;let n=e.createDynamicsCompressor(),i=e.createBiquadFilter?.(),o;if(e.createConvolver&&e.createGain){let a=e.createConvolver(),s=e.createGain(),c=e.createGain();s.connect(a),a.connect(c),o={convolver:a,input:s,output:c}}return i?(i.type="lowpass",i.frequency.value=2e4,i.Q.value=.707,r.connect(i),i.connect(n),o&&o.output.connect(i)):(r.connect(n),o&&o.output.connect(n)),n.connect(e.destination),{context:e,master:r,compressor:n,filter:i,reverb:o}}var Dl=class{constructor(e=new Oi){this.configStrings=e;this.buffers=new Map}registerName(e){return this.configStrings.soundIndex(e)}register(e,r){let n=this.registerName(e);return this.buffers.set(n,r),n}find(e){return this.configStrings.findSoundIndex(e)}get(e){return this.buffers.get(e)}has(e){return this.buffers.has(e)}getName(e){return this.configStrings.getName(e)}};var zl=class{constructor(e){this.vfs=e.vfs,this.registry=e.registry,this.contextController=e.context,this.soundRoot=e.soundRoot??"sound/",this.decodeAudio=e.decodeAudio??((r,n)=>{if(!r.decodeAudioData)throw new Error("decodeAudioData is not available on the provided audio context");return r.decodeAudioData(n)})}async precache(e){let r=[...new Set(e.map(o=>this.normalize(o)))],n={loaded:[],skipped:[],missing:[],errors:{}},i=this.contextController.getContext();for(let o of r)try{let a=this.registry.find(o);if(a!==void 0&&this.registry.has(a)){n.skipped.push(o);continue}if(!this.vfs.stat(o)){n.missing.push(o);continue}let l=(await this.vfs.readFile(o)).slice().buffer,d=await this.decodeAudio(i,l);this.registry.register(o,d),n.loaded.push(o)}catch(a){let s=a instanceof Error?a:new Error(String(a));n.errors[o]=s}return n}normalize(e){let r=_e(e.replace(/^\//,""));return r.startsWith(this.soundRoot)?r:_e(`${this.soundRoot}${r}`)}};var N1=7,Qa=t=>t&N1;function Ol(t){return Array.from({length:Yo},()=>({entnum:0,entchannel:Mr.Auto,endTimeMs:0,isPlayer:!1,active:!1})).map(e=>({...e,isPlayer:e.entnum===t}))}function Ul(t,e,r,n){if(r<0)throw new Error("pickChannel: entchannel must be non-negative");let i=Qa(r),o=-1,a=Number.POSITIVE_INFINITY;for(let s=0;s<t.length;s+=1){let c=t[s],l=Qa(c.entchannel);if(i!==Mr.Auto&&c.entnum===e&&l===i){o=s;break}if(c.active&&c.entnum===n.playerEntity&&e!==n.playerEntity)continue;let d=c.endTimeMs-n.nowMs;(o===-1||d<a)&&(a=d,o=s)}return o===-1?void 0:o}var Nl=class{constructor(e){this.activePreset=null;this.enabled=!0;this.node=e,this.node.input.gain.value=.5,this.node.output.gain.value=1}setPreset(e){this.activePreset=e,this.node.convolver.buffer!==(e?.buffer??null)&&(this.node.convolver.buffer=e?.buffer??null),e&&e.gain!==void 0?this.node.output.gain.value=e.gain:this.node.output.gain.value=1}setEnabled(e){this.enabled=e,e?this.node.input.gain.value=.5:this.node.input.gain.value=0}getOutputNode(){return this.node.output}getInputNode(){return this.node.input}};var Hl=class{constructor(e){this.activeSources=new Map;this.playbackRate=1;this.contextController=e.context,this.registry=e.registry,this.playerEntity=e.playerEntity,this.channels=Ol(e.playerEntity),this.listener=e.listener??{origin:pf,right:{x:1,y:0,z:0}},this.sfxVolume=e.sfxVolume??1,this.masterVolume=e.masterVolume??1,this.resolveOcclusion=e.resolveOcclusion,this.graph=kl(this.contextController),this.graph.master.gain.value=this.masterVolume,this.graph.reverb&&(this.reverb=new Nl(this.graph.reverb))}setListener(e){this.listener=e}setMasterVolume(e){this.masterVolume=e,this.graph.master.gain.value=e}setSfxVolume(e){this.sfxVolume=e}setPlaybackRate(e){this.playbackRate=e;for(let r of this.activeSources.values())r.source.playbackRate&&(r.source.playbackRate.value=e),this.updateSourceGain(r)}async ensureRunning(){await this.contextController.resume()}setReverbPreset(e){this.reverb?.setPreset(e)}play(e){let r=this.registry.get(e.soundIndex);if(!r)return;let n=this.graph.context,i=n.currentTime*1e3,o=Ul(this.channels,e.entity,e.channel,{nowMs:i,playerEntity:this.playerEntity});if(o===void 0)return;let a=this.activeSources.get(o);a&&(a.source.onended=null,a.source.stop(),this.activeSources.delete(o));let s=n.createBufferSource();s.buffer=r,s.loop=e.looping??!1,s.playbackRate&&(s.playbackRate.value=this.playbackRate);let c=e.origin??this.listener.origin,l=n.createGain(),d=this.createPanner(n,e.attenuation),f=this.resolveOcclusion?.(this.listener,c,e.attenuation),u=Rh(f?.gainScale??1),h=this.resolveOcclusion?this.createOcclusionFilter(n,f?.lowpassHz??2e4):void 0;this.applyOriginToPanner(d,c);let g=e.volume/255*this.sfxVolume,p=Math.abs(this.playbackRate-1)<.001?1:0;l.gain.value=g*u*p;let y=n.currentTime+(e.timeOffsetMs??0)/1e3,v=(e.looping?Number.POSITIVE_INFINITY:r.duration*1e3)+y*1e3;s.connect(d);let x=d;h?(d.connect(h),h.connect(l),x=l):(d.connect(l),x=l),l.connect(this.graph.master),this.reverb&&l.connect(this.reverb.getInputNode()),s.start(y),s.onended=()=>{this.channels[o].active=!1,this.activeSources.delete(o)};let b={channelIndex:o,entnum:e.entity,entchannel:Qa(e.channel),endTimeMs:v,source:s,panner:d,gain:l,baseGain:g,origin:c,attenuation:e.attenuation,occlusion:h?{scale:u,lowpassHz:f?.lowpassHz,filter:h}:f?{scale:u,lowpassHz:f.lowpassHz}:void 0};return this.channels[o]={entnum:e.entity,entchannel:Qa(e.channel),endTimeMs:v,isPlayer:e.entity===this.playerEntity,active:!0},this.activeSources.set(o,b),b}stop(e){let r=this.activeSources.get(e);r&&(r.source.stop(),this.channels[e].active=!1,this.activeSources.delete(e))}stopEntitySounds(e){for(let[r,n]of[...this.activeSources.entries()])n.entnum===e&&(n.source.stop(),this.channels[r].active=!1,this.activeSources.delete(r))}updateEntityPosition(e,r){for(let n of this.activeSources.values())if(n.entnum===e&&(this.applyOriginToPanner(n.panner,r),n.origin=r,this.resolveOcclusion)){let i=this.resolveOcclusion(this.listener,r,n.attenuation);this.applyOcclusion(n,i)}}positionedSound(e,r,n,i){return this.play({entity:0,channel:Mr.Auto,soundIndex:r,volume:n,attenuation:i,origin:e})}ambientSound(e,r,n){return this.play({entity:0,channel:Mr.Auto,soundIndex:r,volume:n,attenuation:qo,origin:e,looping:!0})}getChannelState(e){return this.channels[e]}getDiagnostics(){return{activeChannels:this.activeSources.size,masterVolume:this.masterVolume,sfxVolume:this.sfxVolume,channels:[...this.channels],activeSounds:[...this.activeSources.values()].map(e=>({entnum:e.entnum,entchannel:e.entchannel,channelIndex:e.channelIndex,origin:e.origin,gain:e.gain.gain.value,baseGain:e.baseGain,attenuation:e.attenuation,maxDistance:e.panner.maxDistance,distanceModel:e.panner.distanceModel,occlusion:e.occlusion?{scale:e.occlusion.scale,lowpassHz:e.occlusion.lowpassHz}:void 0}))}}setUnderwater(e,r=400){let n=this.graph.filter;n&&(n.type="lowpass",n.Q.value=.707,n.frequency.value=e?r:2e4)}createPanner(e,r){let n=e.createPanner?e.createPanner():Object.assign(e.createGain(),{positionX:{value:this.listener.origin.x},positionY:{value:this.listener.origin.y},positionZ:{value:this.listener.origin.z}});return this.configurePanner(n,r)}configurePanner(e,r){let n=Fi(r);return e.refDistance=Bi,e.maxDistance=Jn(r),e.rolloffFactor=n,e.distanceModel="linear",e.positionX.value=this.listener.origin.x,e.positionY.value=this.listener.origin.y,e.positionZ.value=this.listener.origin.z,e}applyOriginToPanner(e,r){e.positionX.value=r.x,e.positionY.value=r.y,e.positionZ.value=r.z}createOcclusionFilter(e,r){if(!e.createBiquadFilter)return;let n=e.createBiquadFilter();return n.type="lowpass",n.Q.value=.707,n.frequency.value=Fd(r,10,2e4),n}updateSourceGain(e){let r=e.occlusion?.scale??1,n=Math.abs(this.playbackRate-1)<.001?1:0;e.gain.gain.value=e.baseGain*r*n}applyOcclusion(e,r){let n=Rh(r?.gainScale??1),i=Math.abs(this.playbackRate-1)<.001?1:0;if(e.gain.gain.value=e.baseGain*n*i,e.occlusion?.filter){let o=r?.lowpassHz??2e4;e.occlusion.filter.frequency.value=Fd(o,10,2e4)}e.occlusion?(e.occlusion.scale=n,e.occlusion.lowpassHz=r?.lowpassHz):r&&(e.occlusion={scale:n,lowpassHz:r.lowpassHz})}},Fd=(t,e,r)=>Math.min(r,Math.max(e,t)),Rh=t=>Fd(t,0,1);var Ja=class{constructor(e){this.trace=e;this.resolve=(e,r,n)=>{let i=Hc(gf(r,e.origin)),o=Jn(n),c=2e4*(1-Math.min(i,o)/Math.max(1,o)*.9),l=this.trace(e.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 Ch(t){return new Ja(t).resolve}var Vl=class{constructor(e){this.createElement=e.createElement,this.resolveSource=e.resolveSource??(async r=>r),this.volume=e.volume??1,this.crossfadeDuration=e.crossfadeDuration??1}async playTrack(e){let r=`music/track${e.toString().padStart(2,"0")}.ogg`;return this.play(r)}async play(e,{loop:r=!0,restart:n=!1}={}){if(this.track===e&&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(e);this.cancelFade(),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0),this.currentElement&&(this.fadingElement=this.currentElement,this.currentElement=void 0);let o=this.createElement();o.src=i,o.loop=r,o.volume=0,o.currentTime=0,o.load();try{await o.play()}catch(a){console.warn(`MusicSystem: Failed to play ${e}`,a),this.fadingElement}this.currentElement=o,this.track=e,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(e){this.volume=e,this.currentElement&&!this.fadeInterval&&(this.currentElement.volume=e)}getState(){let e=!!(this.currentElement&&!this.currentElement.paused&&!this.currentElement.ended),r=!!this.currentElement?.paused;return{track:this.track,paused:r,playing:e,volume:this.volume}}startCrossfade(){let r=this.crossfadeDuration*1e3/50,n=this.volume/r,i=0,o=this.fadingElement?this.fadingElement.volume:0,a=()=>{let s=!1;this.currentElement&&(i=Math.min(this.volume,i+n),this.currentElement.volume=i,i<this.volume&&(s=!0)),this.fadingElement&&(o=Math.max(0,o-n),this.fadingElement.volume=o,o>0?s=!0:(this.fadingElement.pause(),this.fadingElement=void 0)),s||this.cancelFade()};a(),(this.currentElement&&this.currentElement.volume<this.volume||this.fadingElement)&&(this.fadeInterval=setInterval(a,50))}cancelFade(){this.fadeInterval&&(clearInterval(this.fadeInterval),this.fadeInterval=void 0)}};function H1(t){t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.enable(t.CULL_FACE),t.cullFace(t.BACK),t.enable(t.BLEND),t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA)}function V1(t,e,r,n){for(let i of e){let o=t.getExtension(i);if(!o)throw new Error(`Missing required WebGL extension: ${i}`);n.set(i,o)}for(let i of r){let o=t.getExtension(i);o&&n.set(i,o)}}function Ph(t,e={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:i=[]}=e,o=t.getContext("webgl2",r??{antialias:!0});if(!o)throw new Error("WebGL2 not supported or failed to initialize");H1(o);let a=new Map;V1(o,n,i,a);let s=!1,c=new Set,l=new Set,d=u=>{s=!0,u.preventDefault();for(let h of c)h()},f=()=>{s=!1;for(let u of l)u()};return t.addEventListener("webglcontextlost",d),t.addEventListener("webglcontextrestored",f),{gl:o,extensions:a,isLost:()=>s,onLost(u){return c.add(u),()=>c.delete(u)},onRestored(u){return l.add(u),()=>l.delete(u)},dispose(){t.removeEventListener("webglcontextlost",d),t.removeEventListener("webglcontextrestored",f),c.clear(),l.clear(),a.clear()}}}function Ih(t,e,r){let n=t.createShader(e);if(!n)throw new Error("Failed to allocate shader");if(t.shaderSource(n,r.trim()),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS)){let o=t.getShaderInfoLog(n)??"Unknown shader compile failure";throw t.deleteShader(n),new Error(o)}return n}function G1(t,e,r,n){let i=t.createProgram();if(!i)throw new Error("Failed to allocate shader program");if(t.attachShader(i,e),t.attachShader(i,r),n)for(let[a,s]of Object.entries(n))t.bindAttribLocation(i,s,a);if(t.linkProgram(i),!t.getProgramParameter(i,t.LINK_STATUS)){let a=t.getProgramInfoLog(i)??"Unknown shader link failure";throw t.deleteProgram(i),new Error(a)}return i}var le=class t{constructor(e,r,n){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=r,this.sourceSize=n}static create(e,r,n){let i=Ih(e,e.VERTEX_SHADER,r.vertex),o=Ih(e,e.FRAGMENT_SHADER,r.fragment);try{let a=G1(e,i,o,n),s=r.vertex.length+r.fragment.length;return new t(e,a,s)}finally{e.deleteShader(i),e.deleteShader(o)}}use(){this.gl.useProgram(this.program)}getUniformLocation(e){if(!this.uniformLocations.has(e)){let r=this.gl.getUniformLocation(this.program,e);this.uniformLocations.set(e,r)}return this.uniformLocations.get(e)??null}getAttributeLocation(e){if(!this.attributeLocations.has(e)){let r=this.gl.getAttribLocation(this.program,e);this.attributeLocations.set(e,r)}return this.attributeLocations.get(e)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function Bh(t,e,r){return le.create(t,e,r)}var Ae=class{constructor(e,r=e.STATIC_DRAW,n){this.gl=e,this.target=n??e.ARRAY_BUFFER;let i=e.createBuffer();if(!i)throw new Error("Failed to allocate buffer");this.buffer=i,e.bindBuffer(this.target,this.buffer),e.bufferData(this.target,0,r)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(e,r=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,e,r)}update(e,r=0){this.bind(),this.gl.bufferSubData(this.target,r,e)}dispose(){this.gl.deleteBuffer(this.buffer)}},Je=class extends Ae{constructor(e,r=e.STATIC_DRAW){super(e,r,e.ELEMENT_ARRAY_BUFFER)}},Le=class{constructor(e){this.gl=e;let r=e.createVertexArray();if(!r)throw new Error("Failed to allocate vertex array object");this.vao=r}bind(){this.gl.bindVertexArray(this.vao)}configureAttributes(e,r){this.bind(),r&&r.bind();for(let n of e)this.gl.enableVertexAttribArray(n.index),this.gl.vertexAttribPointer(n.index,n.size,n.type,n.normalized??!1,n.stride??0,n.offset??0),n.divisor!==void 0&&this.gl.vertexAttribDivisor(n.index,n.divisor)}dispose(){this.gl.deleteVertexArray(this.vao)}},et=class{constructor(e,r=e.TEXTURE_2D){this.width=0;this.height=0;this.gl=e,this.target=r;let n=e.createTexture();if(!n)throw new Error("Failed to allocate texture");this.texture=n}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}upload(e,r,n){this.width=e,this.height=r,this.uploadImage(0,this.gl.RGBA,e,r,0,this.gl.RGBA,this.gl.UNSIGNED_BYTE,n)}uploadImage(e,r,n,i,o,a,s,c){this.bind(),this.gl.texImage2D(this.target,e,r,n,i,o,a,s,c)}dispose(){this.gl.deleteTexture(this.texture)}},co=class{constructor(e){this.gl=e,this.target=e.TEXTURE_CUBE_MAP;let r=e.createTexture();if(!r)throw new Error("Failed to allocate cubemap texture");this.texture=r}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadFace(e,r,n,i,o,a,s,c,l){this.bind(),this.gl.texImage2D(e,r,n,i,o,a,s,c,l)}dispose(){this.gl.deleteTexture(this.texture)}},yi=class{constructor(e){this.gl=e;let r=e.createFramebuffer();if(!r)throw new Error("Failed to allocate framebuffer");this.framebuffer=r}bind(e=this.gl.FRAMEBUFFER){this.gl.bindFramebuffer(e,this.framebuffer)}attachTexture2D(e,r,n=0){this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,e,r.target,r.texture,n)}dispose(){this.gl.deleteFramebuffer(this.framebuffer)}};var Dd=4,kd=7*Dd,zd=[{index:0,size:3,type:5126,stride:kd,offset:0},{index:1,size:2,type:5126,stride:kd,offset:3*Dd},{index:2,size:2,type:5126,stride:kd,offset:5*Dd}];function W1(t,e){return{width:t,height:t,padding:e,data:new Uint8Array(t*t*4),cursorX:0,cursorY:0,rowHeight:0}}function X1(t){let e=t.width*t.height;if(e===0)throw new Error("Invalid lightmap with zero area");let r=t.samples.byteLength/e;if(!Number.isInteger(r)||r<3||r>4)throw new Error("Unsupported lightmap channel count");return r}function $1(t,e,r){let n=X1(r),i=t.width*4,o=e.x+t.padding,a=e.y+t.padding,s=0;for(let c=0;c<r.height;c++){let l=(a+c)*i+o*4;for(let d=0;d<r.width;d++){let f=l+d*4;t.data[f]=r.samples[s],t.data[f+1]=r.samples[s+1],t.data[f+2]=r.samples[s+2],t.data[f+3]=n===4?r.samples[s+3]:255,s+=n}}}function K1(t,e,r){let n=e.width+r.lightmapPadding*2,i=e.height+r.lightmapPadding*2;if(n>r.atlasSize||i>r.atlasSize)throw new Error("Lightmap too large for atlas");for(let s of t){if(s.cursorX+n>s.width&&(s.cursorX=0,s.cursorY+=s.rowHeight+r.lightmapPadding,s.rowHeight=0),s.cursorY+i>s.height)continue;let c={atlasIndex:t.indexOf(s),x:s.cursorX,y:s.cursorY,width:e.width,height:e.height};return s.cursorX+=n+r.lightmapPadding,s.rowHeight=Math.max(s.rowHeight,i),{placement:c,atlas:s}}let o=W1(r.atlasSize,r.lightmapPadding);t.push(o);let a={atlasIndex:t.length-1,x:0,y:0,width:e.width,height:e.height};return o.cursorX=n+r.lightmapPadding,o.rowHeight=i,{placement:a,atlas:o}}function Gl(t){return t instanceof Float32Array?t:new Float32Array(t)}function Y1(t,e){if(!t){let n=new Uint16Array(e);for(let i=0;i<e;i++)n[i]=i;return n}return t instanceof Uint16Array?t:new Uint16Array(t)}function q1(t,e){let r=new Float32Array(t.length);for(let n=0;n<t.length;n+=2)r[n]=e.offset[0]+t[n]*e.scale[0],r[n+1]=e.offset[1]+t[n+1]*e.scale[1];return r}function Z1(t,e){let r=Gl(t.vertices),n=Gl(t.textureCoords),i=e?q1(Gl(t.lightmapCoords??t.textureCoords),e):Gl(t.lightmapCoords??new Float32Array(n.length)),o=r.length/3;if(n.length/2!==o)throw new Error("Texture coordinates count mismatch");if(i.length/2!==o)throw new Error("Lightmap coordinates count mismatch");let a=new Float32Array(o*7);for(let s=0;s<o;s++){let c=s*3,l=s*2,d=s*7;a[d]=r[c],a[d+1]=r[c+1],a[d+2]=r[c+2],a[d+3]=n[l],a[d+4]=n[l+1],a[d+5]=i[l],a[d+6]=i[l+1]}return a}function Fh(t){let e=[];for(let r=0;r<t.faces.length;r++){let n=t.faces[r];if(n.texInfo<0)continue;let i=t.texInfo[n.texInfo],o=[],a=[],s=[];for(let u=0;u<n.numEdges;u++){let h=t.surfEdges[n.firstEdge+u],m=t.edges[Math.abs(h)],g=h>=0?m.vertices[0]:m.vertices[1],p=t.vertices[g];o.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;a.push(y,v),s.push(y,v)}let c=[],l=o.length/3;for(let u=1;u<l-1;u++)c.push(0,u,u+1);let d,f=t.lightMapInfo[r];if(f){let u=1/0,h=-1/0,m=1/0,g=-1/0;for(let _=0;_<a.length;_+=2){let w=a[_],S=a[_+1];w<u&&(u=w),w>h&&(h=w),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,x=Math.ceil(g/16)-y+1,b=Ys(n,t.lightMaps,f);if(b&&b.length===v*x*3){d={width:v,height:x,samples:b};for(let _=0;_<s.length;_+=2)s[_]=a[_]/16-p+.5,s[_+1]=a[_+1]/16-y+.5}}e.push({vertices:new Float32Array(o),textureCoords:new Float32Array(a),lightmapCoords:new Float32Array(s),indices:new Uint16Array(c),texture:i.texture,surfaceFlags:i.flags,lightmap:d,faceIndex:r})}return e}function kh(t,e,r,n={}){let i=e;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=e.filter(f=>!d.has(f.faceIndex)))}let o={atlasSize:n.atlasSize??1024,lightmapPadding:n.lightmapPadding??1,hiddenClassnames:n.hiddenClassnames??new Set},a=[],s=new Map;i.forEach((d,f)=>{if(!d.lightmap)return;let{placement:u,atlas:h}=K1(a,d.lightmap,o);$1(h,u,d.lightmap),s.set(f,{atlasIndex:u.atlasIndex,offset:[(u.x+o.lightmapPadding)/o.atlasSize,(u.y+o.lightmapPadding)/o.atlasSize],scale:[u.width/o.atlasSize,u.height/o.atlasSize]})});let c=a.map(d=>{let f=new et(t);return f.setParameters({wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE,minFilter:t.LINEAR,magFilter:t.LINEAR}),f.uploadImage(0,t.RGBA,d.width,d.height,0,t.RGBA,t.UNSIGNED_BYTE,d.data),{texture:f,width:d.width,height:d.height,pixels:d.data}});return{surfaces:i.map((d,f)=>{let u=s.get(f),h=Z1(d,u),m=Y1(d.indices,h.length/7),g=new Ae(t,t.STATIC_DRAW,t.ARRAY_BUFFER);g.upload(h);let p=new Je(t,t.STATIC_DRAW);p.upload(m);let y=new Le(t);return y.configureAttributes(zd,g),{vao:y,vertexBuffer:g,indexBuffer:p,indexCount:m.length,vertexCount:h.length/7,texture:d.texture,surfaceFlags:d.surfaceFlags??Wo,lightmap:u,vertexData:h,indexData:m}}),lightmaps:c}}function uo(t){let{normal:e,distance:r}=t,n=Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z);if(n===0)return t;let i=1/n;return{normal:{x:e.x*i,y:e.y*i,z:e.z*i},distance:r*i}}function Dn(t){if(t.length!==16)throw new Error("View-projection matrix must contain 16 elements");let e=t[0],r=t[4],n=t[8],i=t[12],o=t[1],a=t[5],s=t[9],c=t[13],l=t[2],d=t[6],f=t[10],u=t[14],h=t[3],m=t[7],g=t[11],p=t[15];return[uo({normal:{x:h+e,y:m+r,z:g+n},distance:p+i}),uo({normal:{x:h-e,y:m-r,z:g-n},distance:p-i}),uo({normal:{x:h+o,y:m+a,z:g+s},distance:p+c}),uo({normal:{x:h-o,y:m-a,z:g-s},distance:p-c}),uo({normal:{x:h+l,y:m+d,z:g+f},distance:p+u}),uo({normal:{x:h-l,y:m-d,z:g-f},distance:p-u})]}function j1(t,e){return t.normal.x*e.x+t.normal.y*e.y+t.normal.z*e.z+t.distance}function bi(t,e,r){for(let n of r){let i=n.normal.x>=0?e.x:t.x,o=n.normal.y>=0?e.y:t.y,a=n.normal.z>=0?e.z:t.z;if(j1(n,{x:i,y:o,z:a})<0)return!1}return!0}function Dh(t,e,r){let n=(t.x+e.x)*.5,i=(t.y+e.y)*.5,o=(t.z+e.z)*.5,a=(e.x-t.x)*.5,s=(e.y-t.y)*.5,c=(e.z-t.z)*.5,l=r,d=l[0]*n+l[4]*i+l[8]*o+l[12],f=l[1]*n+l[5]*i+l[9]*o+l[13],u=l[2]*n+l[6]*i+l[10]*o+l[14],h=Math.abs(l[0])*a+Math.abs(l[4])*s+Math.abs(l[8])*c,m=Math.abs(l[1])*a+Math.abs(l[5])*s+Math.abs(l[9])*c,g=Math.abs(l[2])*a+Math.abs(l[6])*s+Math.abs(l[10])*c;return{mins:{x:d-h,y:f-m,z:u-g},maxs:{x:d+h,y:f+m,z:u+g}}}function zh(t){return t<0}function Oh(t){return-t-1}function Uh(t,e){return t.normal[0]*e.x+t.normal[1]*e.y+t.normal[2]*e.z-t.dist}function Ud(t,e,r){if(!t||e<0||r<0)return!0;let n=Math.ceil(t.numClusters/8),i=t.clusters[e].pvs,o=Math.floor(r/8),a=1<<r%8;return o<0||o>=n?!1:(i[o]&a)!==0}function Q1(t,e){let r={x:t.mins[0],y:t.mins[1],z:t.mins[2]},n={x:t.maxs[0],y:t.maxs[1],z:t.maxs[2]};return bi(r,n,e)}function xi(t,e){let r=0;for(;r>=0;){let n=t.nodes[r],i=t.planes[n.planeIndex],a=Uh(i,e)>=0?0:1,s=n.children[a];if(zh(s))return Oh(s);r=s}return-1}function J1(t,e){let r=t.leafs[e],n=[];for(let i=0;i<r.numLeafFaces;i+=1)n.push(t.leafLists.leafFaces[e][i]);return n}function Od(t,e,r,n,i,o,a,s){if(zh(e)){let h=Oh(e),m=t.leafs[h];if(s&&m.area>=0&&!s.has(m.area)||!Ud(t.visibility,i,m.cluster)||!Q1(m,n))return;let g={x:(m.mins[0]+m.maxs[0])*.5,y:(m.mins[1]+m.maxs[1])*.5,z:(m.mins[2]+m.maxs[2])*.5},p=g.x-r.x,y=g.y-r.y,v=g.z-r.z,x=-(p*p+y*y+v*v);for(let b of J1(t,h))a.has(b)||(a.add(b),o.push({faceIndex:b,leafIndex:h,sortKey:x}));return}let c=t.nodes[e],l=t.planes[c.planeIndex],d=Uh(l,r),f=d>=0?c.children[0]:c.children[1],u=d>=0?c.children[1]:c.children[0];bi({x:c.mins[0],y:c.mins[1],z:c.mins[2]},{x:c.maxs[0],y:c.maxs[1],z:c.maxs[2]},n)&&(Od(t,f,r,n,i,o,a,s),Od(t,u,r,n,i,o,a,s))}function Nd(t,e,r){let n=new Set;if(e<0||e>=t.areas.length)return n;let i=[e];for(n.add(e);i.length>0;){let o=i.pop(),a=t.areas[o];for(let s=0;s<a.numAreaPortals;s++){let c=a.firstAreaPortal+s,l=t.areaPortals[c],d=l.otherArea;(l.portalNumber<=0||r[l.portalNumber])&&!n.has(d)&&(n.add(d),i.push(d))}}return n}function vi(t,e,r,n){let i=xi(t,e),o=i>=0?t.leafs[i]:null,a=o?o.cluster:-1,s=o?o.area:-1,c=null;n&&s>=0&&t.areas&&t.areas.length>0&&(c=Nd(t,s,n));let l=[];return Od(t,0,e,r,a,l,new Set,c),l}var zn=32,Wl=class{constructor(){this.lights=[]}addLight(e,r){if(e.key!==void 0){let n=this.lights.findIndex(i=>i.key===e.key);if(n!==-1){this.lights[n]=e;return}}this.lights.push(e)}clear(){this.lights=[]}update(e,r=0){if(this.lights=this.lights.filter(n=>n.die>e),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 fo(t){let e=[];for(let r=0;r<t.length;r+=3){let n=t[r],i=t[r+1],o=t[r+2];e.push(n,i,i,o,o,n)}return t instanceof Uint32Array||Math.max(...e)>65535?new Uint32Array(e):new Uint16Array(e)}var Hd=`#version 300 es
142
142
  precision highp float;
143
143
 
144
144
  layout(location = 0) in vec3 a_position;
@@ -189,7 +189,7 @@ void main() {
189
189
  v_position = pos;
190
190
  gl_Position = u_modelViewProjection * vec4(pos, 1.0);
191
191
  v_screenPos = gl_Position;
192
- }`,zd=`#version 300 es
192
+ }`,Vd=`#version 300 es
193
193
  precision highp float;
194
194
 
195
195
  struct DLight {
@@ -198,7 +198,7 @@ struct DLight {
198
198
  float intensity;
199
199
  };
200
200
 
201
- const int MAX_DLIGHTS = ${Dn};
201
+ const int MAX_DLIGHTS = ${zn};
202
202
 
203
203
  in vec2 v_texCoord;
204
204
  in vec2 v_lightmapCoord;
@@ -339,7 +339,7 @@ void main() {
339
339
  }
340
340
 
341
341
  o_color = finalColor;
342
- }`,Fh=[0,255,255,255],X1=[0,-1,-1,-1];function Od(t=Fh,e=[]){let r=new Float32Array(4);for(let n=0;n<4;n+=1){let i=t[n]??255;if(i===255){r[n]=0;continue}let a=e[i];r[n]=a!==void 0?a:1}return r}function K1(t){return[-(t*.25%1),0]}function Ud(t=Ga,e=0){let r=(t&pf)!==0,n=(t&Wa)!==0,i=(t&Ds)!==0,a=(t&zs)!==0,o=(t&Os)!==0,s=a?.33:o?.66:1,c=a||o||n,l=!c&&!i,d=r?K1(e):[0,0];return{alpha:s,blend:c,depthWrite:l,warp:n,flowOffset:d,sky:i}}var fa=class{constructor(e){this.uniformDlights=[];this.gl=e,this.program=le.create(e,{vertex:Dd,fragment:zd},{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.uniformRefraction=this.program.getUniformLocation("u_refractionMap"),this.uniformHasRefraction=this.program.getUniformLocation("u_hasRefraction"),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<Dn;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`)});this.uniformBrightness=this.program.getUniformLocation("u_brightness"),this.uniformGamma=this.program.getUniformLocation("u_gamma"),this.uniformFullbright=this.program.getUniformLocation("u_fullbright"),this.uniformAmbient=this.program.getUniformLocation("u_ambient")}get shaderSize(){return this.program.sourceSize}bind(e){let{modelViewProjection:r,styleIndices:n=Fh,styleLayers:i=X1,styleValues:a=[],diffuseSampler:o=0,lightmapSampler:s,refractionSampler:c,surfaceFlags:l=Ga,timeSeconds:d=0,texScroll:f,alpha:u,warp:h,dlights:m=[],renderMode:g,lightmapOnly:p,brightness:y=1,gamma:v=1,fullbright:x=!1,ambient:b=0}=e,_=Ud(l,d),w=Od(n,a),S=f?f[0]:_.flowOffset[0],E=f?f[1]:_.flowOffset[1],L=u!==void 0?u:_.alpha,M=h!==void 0?h:_.warp;this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform2f(this.uniformTexScroll,S,E),this.gl.uniform2f(this.uniformLmScroll,_.flowOffset[0],_.flowOffset[1]),this.gl.uniform4fv(this.uniformLightStyles,w),this.gl.uniform4fv(this.uniformStyleLayerMapping,i),this.gl.uniform1f(this.uniformAlpha,L);let C=!_.sky&&s!==void 0&&!M;this.gl.uniform1i(this.uniformApplyLightmap,C?1:0),this.gl.uniform1i(this.uniformWarp,M?1:0),this.gl.uniform1i(this.uniformLightmapOnly,p?1:0),this.gl.uniform1f(this.uniformTime,d),this.gl.uniform1i(this.uniformDiffuse,o),this.gl.uniform1i(this.uniformLightmap,s??0),c!==void 0&&M?(this.gl.uniform1i(this.uniformRefraction,c),this.gl.uniform1i(this.uniformHasRefraction,1)):this.gl.uniform1i(this.uniformHasRefraction,0);let I=0,B=[1,1,1,1];g&&(g.mode==="solid"||g.mode==="wireframe"?I=1:g.mode==="solid-faceted"&&(I=2),g.color?B=[...g.color]:g.generateRandomColor&&(B=[1,1,1,1])),this.gl.uniform1i(this.uniformRenderMode,I),this.gl.uniform4f(this.uniformSolidColor,B[0],B[1],B[2],B[3]);let F=Math.min(m.length,Dn);this.gl.uniform1i(this.uniformNumDlights,F);for(let U=0;U<F;U++){let ce=m[U];this.gl.uniform3f(this.uniformDlights[U].pos,ce.origin.x,ce.origin.y,ce.origin.z),this.gl.uniform3f(this.uniformDlights[U].color,ce.color.x,ce.color.y,ce.color.z),this.gl.uniform1f(this.uniformDlights[U].intensity,ce.intensity)}return this.gl.uniform1f(this.uniformBrightness,y),this.gl.uniform1f(this.uniformGamma,v),this.gl.uniform1i(this.uniformFullbright,x?1:0),this.gl.uniform1f(this.uniformAmbient,b),_}draw(e,r){if(e.vao.bind(),r&&r.mode==="wireframe"){if(!e.wireframeIndexBuffer){let n=e;n.wireframeIndexBuffer=new Qe(this.gl,this.gl.STATIC_DRAW);let i=ua(e.indexData);n.wireframeIndexBuffer.upload(i),n.wireframeIndexCount=i.length}e.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,e.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else e.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};function es(t,e){t.depthMask(e.depthWrite),e.blend?(t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA)):t.disable(t.BLEND)}var kh=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]),Nd=`#version 300 es
342
+ }`,Nh=[0,255,255,255],ey=[0,-1,-1,-1];function Gd(t=Nh,e=[]){let r=new Float32Array(4);for(let n=0;n<4;n+=1){let i=t[n]??255;if(i===255){r[n]=0;continue}let o=e[i];r[n]=o!==void 0?o:1}return r}function ty(t){return[-(t*.25%1),0]}function Wd(t=Wo,e=0){let r=(t&_f)!==0,n=(t&Xo)!==0,i=(t&Ds)!==0,o=(t&zs)!==0,a=(t&Os)!==0,s=o?.33:a?.66:1,c=o||a||n,l=!c&&!i,d=r?ty(e):[0,0];return{alpha:s,blend:c,depthWrite:l,warp:n,flowOffset:d,sky:i}}var ho=class{constructor(e){this.uniformDlights=[];this.gl=e,this.program=le.create(e,{vertex:Hd,fragment:Vd},{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.uniformRefraction=this.program.getUniformLocation("u_refractionMap"),this.uniformHasRefraction=this.program.getUniformLocation("u_hasRefraction"),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<zn;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`)});this.uniformBrightness=this.program.getUniformLocation("u_brightness"),this.uniformGamma=this.program.getUniformLocation("u_gamma"),this.uniformFullbright=this.program.getUniformLocation("u_fullbright"),this.uniformAmbient=this.program.getUniformLocation("u_ambient")}get shaderSize(){return this.program.sourceSize}bind(e){let{modelViewProjection:r,styleIndices:n=Nh,styleLayers:i=ey,styleValues:o=[],diffuseSampler:a=0,lightmapSampler:s,refractionSampler:c,surfaceFlags:l=Wo,timeSeconds:d=0,texScroll:f,alpha:u,warp:h,dlights:m=[],renderMode:g,lightmapOnly:p,brightness:y=1,gamma:v=1,fullbright:x=!1,ambient:b=0}=e,_=Wd(l,d),w=Gd(n,o),S=f?f[0]:_.flowOffset[0],E=f?f[1]:_.flowOffset[1],T=u!==void 0?u:_.alpha,M=h!==void 0?h:_.warp;this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform2f(this.uniformTexScroll,S,E),this.gl.uniform2f(this.uniformLmScroll,_.flowOffset[0],_.flowOffset[1]),this.gl.uniform4fv(this.uniformLightStyles,w),this.gl.uniform4fv(this.uniformStyleLayerMapping,i),this.gl.uniform1f(this.uniformAlpha,T);let C=!_.sky&&s!==void 0&&!M;this.gl.uniform1i(this.uniformApplyLightmap,C?1:0),this.gl.uniform1i(this.uniformWarp,M?1:0),this.gl.uniform1i(this.uniformLightmapOnly,p?1:0),this.gl.uniform1f(this.uniformTime,d),this.gl.uniform1i(this.uniformDiffuse,a),this.gl.uniform1i(this.uniformLightmap,s??0),c!==void 0&&M?(this.gl.uniform1i(this.uniformRefraction,c),this.gl.uniform1i(this.uniformHasRefraction,1)):this.gl.uniform1i(this.uniformHasRefraction,0);let B=0,F=[1,1,1,1];g&&(g.mode==="solid"||g.mode==="wireframe"?B=1:g.mode==="solid-faceted"&&(B=2),g.color?F=[...g.color]:g.generateRandomColor&&(F=[1,1,1,1])),this.gl.uniform1i(this.uniformRenderMode,B),this.gl.uniform4f(this.uniformSolidColor,F[0],F[1],F[2],F[3]);let k=Math.min(m.length,zn);this.gl.uniform1i(this.uniformNumDlights,k);for(let N=0;N<k;N++){let ce=m[N];this.gl.uniform3f(this.uniformDlights[N].pos,ce.origin.x,ce.origin.y,ce.origin.z),this.gl.uniform3f(this.uniformDlights[N].color,ce.color.x,ce.color.y,ce.color.z),this.gl.uniform1f(this.uniformDlights[N].intensity,ce.intensity)}return this.gl.uniform1f(this.uniformBrightness,y),this.gl.uniform1f(this.uniformGamma,v),this.gl.uniform1i(this.uniformFullbright,x?1:0),this.gl.uniform1f(this.uniformAmbient,b),_}draw(e,r){if(e.vao.bind(),r&&r.mode==="wireframe"){if(!e.wireframeIndexBuffer){let n=e;n.wireframeIndexBuffer=new Je(this.gl,this.gl.STATIC_DRAW);let i=fo(e.indexData);n.wireframeIndexBuffer.upload(i),n.wireframeIndexCount=i.length}e.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,e.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else e.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};function es(t,e){t.depthMask(e.depthWrite),e.blend?(t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA)):t.disable(t.BLEND)}var Hh=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]),Xd=`#version 300 es
343
343
  precision highp float;
344
344
 
345
345
  layout(location = 0) in vec3 a_position;
@@ -354,7 +354,7 @@ void main() {
354
354
  dir.xy += u_scroll;
355
355
  v_direction = dir;
356
356
  gl_Position = u_viewProjectionNoTranslation * vec4(a_position, 1.0);
357
- }`,Hd=`#version 300 es
357
+ }`,$d=`#version 300 es
358
358
  precision highp float;
359
359
 
360
360
  in vec3 v_direction;
@@ -364,7 +364,7 @@ out vec4 o_color;
364
364
 
365
365
  void main() {
366
366
  o_color = texture(u_skybox, v_direction);
367
- }`,ha=class{constructor(e){this.gl=e,this.program=le.create(e,{vertex:Nd,fragment:Hd},{a_position:0}),this.vao=new Ee(e),this.vbo=new Ae(e,e.STATIC_DRAW),this.vbo.upload(kh,e.STATIC_DRAW);let r=[{index:0,size:3,type:e.FLOAT,stride:12,offset:0}];this.vao.configureAttributes(r,this.vbo),this.uniformViewProj=this.program.getUniformLocation("u_viewProjectionNoTranslation"),this.uniformScroll=this.program.getUniformLocation("u_scroll"),this.uniformSampler=this.program.getUniformLocation("u_skybox"),this.cubemap=new ca(e),this.cubemap.setParameters({minFilter:e.LINEAR,magFilter:e.LINEAR,wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE})}get shaderSize(){return this.program.sourceSize}bind(e){let{viewProjection:r,scroll:n,textureUnit:i=0}=e;this.program.use(),this.gl.depthMask(!1),this.gl.uniformMatrix4fv(this.uniformViewProj,!1,r),this.gl.uniform2f(this.uniformScroll,n[0],n[1]),this.gl.uniform1i(this.uniformSampler,i),this.cubemap.bind(i),this.vao.bind()}draw(){this.gl.drawArrays(this.gl.TRIANGLES,0,kh.length/3)}dispose(){this.vbo.dispose(),this.vao.dispose(),this.cubemap.dispose(),this.program.dispose()}};function Xl(t){let e=new Float32Array(t);return e[12]=0,e[13]=0,e[14]=0,e}function Kl(t,e=[.01,.02]){let[r,n]=e;return[r*t,n*t]}var Gd=`#version 300 es
367
+ }`,mo=class{constructor(e){this.gl=e,this.program=le.create(e,{vertex:Xd,fragment:$d},{a_position:0}),this.vao=new Le(e),this.vbo=new Ae(e,e.STATIC_DRAW),this.vbo.upload(Hh,e.STATIC_DRAW);let r=[{index:0,size:3,type:e.FLOAT,stride:12,offset:0}];this.vao.configureAttributes(r,this.vbo),this.uniformViewProj=this.program.getUniformLocation("u_viewProjectionNoTranslation"),this.uniformScroll=this.program.getUniformLocation("u_scroll"),this.uniformSampler=this.program.getUniformLocation("u_skybox"),this.cubemap=new co(e),this.cubemap.setParameters({minFilter:e.LINEAR,magFilter:e.LINEAR,wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE})}get shaderSize(){return this.program.sourceSize}bind(e){let{viewProjection:r,scroll:n,textureUnit:i=0}=e;this.program.use(),this.gl.depthMask(!1),this.gl.uniformMatrix4fv(this.uniformViewProj,!1,r),this.gl.uniform2f(this.uniformScroll,n[0],n[1]),this.gl.uniform1i(this.uniformSampler,i),this.cubemap.bind(i),this.vao.bind()}draw(){this.gl.drawArrays(this.gl.TRIANGLES,0,Hh.length/3)}dispose(){this.vbo.dispose(),this.vao.dispose(),this.cubemap.dispose(),this.program.dispose()}};function Xl(t){let e=new Float32Array(t);return e[12]=0,e[13]=0,e[14]=0,e}function $l(t,e=[.01,.02]){let[r,n]=e;return[r*t,n*t]}var Yd=`#version 300 es
368
368
  precision highp float;
369
369
 
370
370
  layout(location = 0) in vec3 a_position;
@@ -377,7 +377,7 @@ struct DLight {
377
377
  float intensity;
378
378
  };
379
379
 
380
- const int MAX_DLIGHTS = ${Dn};
380
+ const int MAX_DLIGHTS = ${zn};
381
381
 
382
382
  uniform mat4 u_modelViewProjection;
383
383
  uniform mat4 u_modelMatrix;
@@ -416,7 +416,7 @@ void main() {
416
416
  v_texCoord = a_texCoord;
417
417
  v_position = worldPos.xyz;
418
418
  gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
419
- }`,Wd=`#version 300 es
419
+ }`,qd=`#version 300 es
420
420
  precision highp float;
421
421
 
422
422
  in vec2 v_texCoord;
@@ -476,7 +476,7 @@ void main() {
476
476
  }
477
477
 
478
478
  o_color = finalColor;
479
- }`;function Y1(t){let e=t.x*t.x+t.y*t.y+t.z*t.z;if(e<=0)return{x:0,y:0,z:1};let r=1/Math.sqrt(e);return{x:t.x*r,y:t.y*r,z:t.z*r}}function Vd(t,e,r){return t+(e-t)*r}function Dh(t,e,r){return{x:Vd(t.x,e.x,r),y:Vd(t.y,e.y,r),z:Vd(t.z,e.z,r)}}function $1(t,e,r){return[t/r.skinWidth,1-e/r.skinHeight]}function Xd(t){if(t.glCommands.length===0){let n=[],i=[];return t.triangles.forEach(a=>{let o=n.length;for(let s=0;s<3;s+=1){let c=a.vertexIndices[s],l=a.texCoordIndices[s],d=t.texCoords[l];n.push({vertexIndex:c,texCoord:$1(d.s,d.t,t.header)})}i.push(o,o+1,o+2)}),{vertices:n,indices:new Uint16Array(i)}}let e=[],r=[];for(let n of t.glCommands){let i=e.length;if(e.push(...n.vertices.map(a=>({vertexIndex:a.vertexIndex,texCoord:[a.s,1-a.t]}))),n.mode==="strip")for(let a=0;a<n.vertices.length-2;a+=1){let o=a%2===0,s=i+a+(o?0:1),c=i+a+(o?1:0),l=i+a+2;r.push(s,c,l)}else for(let a=1;a<n.vertices.length-1;a+=1)r.push(i,i+a,i+a+1)}return{vertices:e,indices:new Uint16Array(r)}}function Kd(t,e,r){let{frame0:n,frame1:i,lerp:a}=r,o=t.frames[n],s=t.frames[i];if(!o||!s)throw new Error("Requested MD2 frames are out of range");let c=new Float32Array(e.vertices.length*8);return e.vertices.forEach((l,d)=>{let f=o.vertices[l.vertexIndex],u=s.vertices[l.vertexIndex];if(!f||!u)throw new Error("MD2 vertex index out of range for frame");let h=Dh(f.position,u.position,a),m=Y1(Dh(f.normal,u.normal,a)),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 ma=class{constructor(e,r,n){this.gl=e,this.geometry=Xd(r),this.vertexBuffer=new Ae(e,e.STATIC_DRAW),this.indexBuffer=new Qe(e,e.STATIC_DRAW),this.vertexArray=new Ee(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:32,offset:0},{index:1,size:3,type:e.FLOAT,stride:32,offset:12},{index:2,size:2,type:e.FLOAT,stride:32,offset:24}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(r,n)}update(e,r){let n=Kd(e,this.geometry,r);this.vertexBuffer.upload(n,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose(),this.wireframeIndexBuffer?.dispose()}},pa=class{constructor(e){this.uniformDlights=[];this.gl=e,this.program=le.create(e,{vertex:Gd,fragment:Wd},{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<Dn;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`)});this.uniformBrightness=this.program.getUniformLocation("u_brightness"),this.uniformGamma=this.program.getUniformLocation("u_gamma"),this.uniformFullbright=this.program.getUniformLocation("u_fullbright"),this.uniformGlobalAmbient=this.program.getUniformLocation("u_globalAmbient")}get shaderSize(){return this.program.sourceSize}bind(e){let{modelViewProjection:r,modelMatrix:n,lightDirection:i=[0,0,1],ambientLight:a=.2,tint:o=[1,1,1,1],diffuseSampler:s=0,dlights:c=[],renderMode:l,brightness:d=1,gamma:f=1,fullbright:u=!1,ambient:h=0}=e,m=new Float32Array(i),g=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,m),this.gl.uniform1f(this.uniformAmbient,a),this.gl.uniform4fv(this.uniformTint,g),this.gl.uniform1i(this.uniformDiffuse,s);let p=0,y=[1,1,1,1];l&&(l.mode==="solid"||l.mode==="wireframe"?p=1:l.mode==="solid-faceted"&&(p=2),l.color?y=[...l.color]:l.generateRandomColor),this.gl.uniform1i(this.uniformRenderMode,p),this.gl.uniform4f(this.uniformSolidColor,y[0],y[1],y[2],y[3]);let v=Math.min(c.length,Dn);this.gl.uniform1i(this.uniformNumDlights,v);for(let x=0;x<v;x++){let b=c[x];this.gl.uniform3f(this.uniformDlights[x].pos,b.origin.x,b.origin.y,b.origin.z),this.gl.uniform3f(this.uniformDlights[x].color,b.color.x,b.color.y,b.color.z),this.gl.uniform1f(this.uniformDlights[x].intensity,b.intensity)}this.gl.uniform1f(this.uniformBrightness,d),this.gl.uniform1f(this.uniformGamma,f),this.gl.uniform1i(this.uniformFullbright,u?1:0),this.gl.uniform1f(this.uniformGlobalAmbient,h)}draw(e,r){if(e.vertexArray.bind(),r&&r.mode==="wireframe"){if(!e.wireframeIndexBuffer){e.wireframeIndexBuffer=new Qe(this.gl,this.gl.STATIC_DRAW);let n=ua(e.geometry.indices);e.wireframeIndexBuffer.upload(n),e.wireframeIndexCount=n.length}e.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,e.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else e.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var $=1e-6,xe=typeof Float32Array<"u"?Float32Array:Array,er=Math.random,zh="zyx";function tn(t){return t>=0?Math.round(t):t%.5===0?Math.floor(t):Math.round(t)}var OE=Math.PI/180,UE=180/Math.PI;function Oh(){var t=new xe(9);return xe!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t}var j={};Na(j,{add:()=>Fy,adjoint:()=>ny,clone:()=>j1,copy:()=>Q1,create:()=>Z1,decompose:()=>vy,determinant:()=>iy,equals:()=>Oy,exactEquals:()=>zy,frob:()=>By,fromQuat:()=>wy,fromQuat2:()=>yy,fromRotation:()=>hy,fromRotationTranslation:()=>Hh,fromRotationTranslationScale:()=>_y,fromRotationTranslationScaleOrigin:()=>Sy,fromScaling:()=>fy,fromTranslation:()=>uy,fromValues:()=>J1,fromXRotation:()=>my,fromYRotation:()=>py,fromZRotation:()=>gy,frustum:()=>My,getRotation:()=>xy,getScaling:()=>Vh,getTranslation:()=>by,identity:()=>Uh,invert:()=>ry,lookAt:()=>Cy,mul:()=>Uy,multiply:()=>Nh,multiplyScalar:()=>ky,multiplyScalarAndAdd:()=>Dy,ortho:()=>Ty,orthoNO:()=>Wh,orthoZO:()=>Ry,perspective:()=>Ay,perspectiveFromFieldOfView:()=>Ly,perspectiveNO:()=>Gh,perspectiveZO:()=>Ey,rotate:()=>sy,rotateX:()=>ly,rotateY:()=>cy,rotateZ:()=>dy,scale:()=>oy,set:()=>ey,str:()=>Iy,sub:()=>Ny,subtract:()=>Xh,targetTo:()=>Py,translate:()=>ay,transpose:()=>ty});function Z1(){var t=new xe(16);return xe!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t}function j1(t){var e=new xe(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function Q1(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function J1(t,e,r,n,i,a,o,s,c,l,d,f,u,h,m,g){var p=new xe(16);return p[0]=t,p[1]=e,p[2]=r,p[3]=n,p[4]=i,p[5]=a,p[6]=o,p[7]=s,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 ey(t,e,r,n,i,a,o,s,c,l,d,f,u,h,m,g,p){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t[4]=a,t[5]=o,t[6]=s,t[7]=c,t[8]=l,t[9]=d,t[10]=f,t[11]=u,t[12]=h,t[13]=m,t[14]=g,t[15]=p,t}function Uh(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function ty(t,e){if(t===e){var r=e[1],n=e[2],i=e[3],a=e[6],o=e[7],s=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=a,t[11]=e[14],t[12]=i,t[13]=o,t[14]=s}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}function ry(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=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],v=r*s-n*o,x=r*c-i*o,b=r*l-a*o,_=n*c-i*s,w=n*l-a*s,S=i*l-a*c,E=d*g-f*m,L=d*p-u*m,M=d*y-h*m,C=f*p-u*g,I=f*y-h*g,B=u*y-h*p,F=v*B-x*I+b*C+_*M-w*L+S*E;return F?(F=1/F,t[0]=(s*B-c*I+l*C)*F,t[1]=(i*I-n*B-a*C)*F,t[2]=(g*S-p*w+y*_)*F,t[3]=(u*w-f*S-h*_)*F,t[4]=(c*M-o*B-l*L)*F,t[5]=(r*B-i*M+a*L)*F,t[6]=(p*b-m*S-y*x)*F,t[7]=(d*S-u*b+h*x)*F,t[8]=(o*I-s*M+l*E)*F,t[9]=(n*M-r*I-a*E)*F,t[10]=(m*w-g*b+y*v)*F,t[11]=(f*b-d*w-h*v)*F,t[12]=(s*L-o*C-c*E)*F,t[13]=(r*C-n*L+i*E)*F,t[14]=(g*x-m*_-p*v)*F,t[15]=(d*_-f*x+u*v)*F,t):null}function ny(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=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],v=r*s-n*o,x=r*c-i*o,b=r*l-a*o,_=n*c-i*s,w=n*l-a*s,S=i*l-a*c,E=d*g-f*m,L=d*p-u*m,M=d*y-h*m,C=f*p-u*g,I=f*y-h*g,B=u*y-h*p;return t[0]=s*B-c*I+l*C,t[1]=i*I-n*B-a*C,t[2]=g*S-p*w+y*_,t[3]=u*w-f*S-h*_,t[4]=c*M-o*B-l*L,t[5]=r*B-i*M+a*L,t[6]=p*b-m*S-y*x,t[7]=d*S-u*b+h*x,t[8]=o*I-s*M+l*E,t[9]=n*M-r*I-a*E,t[10]=m*w-g*b+y*v,t[11]=f*b-d*w-h*v,t[12]=s*L-o*C-c*E,t[13]=r*C-n*L+i*E,t[14]=g*x-m*_-p*v,t[15]=d*_-f*x+u*v,t}function iy(t){var e=t[0],r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6],c=t[7],l=t[8],d=t[9],f=t[10],u=t[11],h=t[12],m=t[13],g=t[14],p=t[15],y=e*o-r*a,v=e*s-n*a,x=r*s-n*o,b=l*m-d*h,_=l*g-f*h,w=d*g-f*m,S=e*w-r*_+n*b,E=a*w-o*_+s*b,L=l*x-d*v+f*y,M=h*x-m*v+g*y;return c*S-i*E+p*L-u*M}function Nh(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],c=e[5],l=e[6],d=e[7],f=e[8],u=e[9],h=e[10],m=e[11],g=e[12],p=e[13],y=e[14],v=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*f+w*g,t[1]=x*i+b*c+_*u+w*p,t[2]=x*a+b*l+_*h+w*y,t[3]=x*o+b*d+_*m+w*v,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*f+w*g,t[5]=x*i+b*c+_*u+w*p,t[6]=x*a+b*l+_*h+w*y,t[7]=x*o+b*d+_*m+w*v,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*f+w*g,t[9]=x*i+b*c+_*u+w*p,t[10]=x*a+b*l+_*h+w*y,t[11]=x*o+b*d+_*m+w*v,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*f+w*g,t[13]=x*i+b*c+_*u+w*p,t[14]=x*a+b*l+_*h+w*y,t[15]=x*o+b*d+_*m+w*v,t}function ay(t,e,r){var n=r[0],i=r[1],a=r[2],o,s,c,l,d,f,u,h,m,g,p,y;return e===t?(t[12]=e[0]*n+e[4]*i+e[8]*a+e[12],t[13]=e[1]*n+e[5]*i+e[9]*a+e[13],t[14]=e[2]*n+e[6]*i+e[10]*a+e[14],t[15]=e[3]*n+e[7]*i+e[11]*a+e[15]):(o=e[0],s=e[1],c=e[2],l=e[3],d=e[4],f=e[5],u=e[6],h=e[7],m=e[8],g=e[9],p=e[10],y=e[11],t[0]=o,t[1]=s,t[2]=c,t[3]=l,t[4]=d,t[5]=f,t[6]=u,t[7]=h,t[8]=m,t[9]=g,t[10]=p,t[11]=y,t[12]=o*n+d*i+m*a+e[12],t[13]=s*n+f*i+g*a+e[13],t[14]=c*n+u*i+p*a+e[14],t[15]=l*n+h*i+y*a+e[15]),t}function oy(t,e,r){var n=r[0],i=r[1],a=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function sy(t,e,r,n){var i=n[0],a=n[1],o=n[2],s=Math.sqrt(i*i+a*a+o*o),c,l,d,f,u,h,m,g,p,y,v,x,b,_,w,S,E,L,M,C,I,B,F,U;return s<$?null:(s=1/s,i*=s,a*=s,o*=s,c=Math.sin(r),l=Math.cos(r),d=1-l,f=e[0],u=e[1],h=e[2],m=e[3],g=e[4],p=e[5],y=e[6],v=e[7],x=e[8],b=e[9],_=e[10],w=e[11],S=i*i*d+l,E=a*i*d+o*c,L=o*i*d-a*c,M=i*a*d-o*c,C=a*a*d+l,I=o*a*d+i*c,B=i*o*d+a*c,F=a*o*d-i*c,U=o*o*d+l,t[0]=f*S+g*E+x*L,t[1]=u*S+p*E+b*L,t[2]=h*S+y*E+_*L,t[3]=m*S+v*E+w*L,t[4]=f*M+g*C+x*I,t[5]=u*M+p*C+b*I,t[6]=h*M+y*C+_*I,t[7]=m*M+v*C+w*I,t[8]=f*B+g*F+x*U,t[9]=u*B+p*F+b*U,t[10]=h*B+y*F+_*U,t[11]=m*B+v*F+w*U,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}function ly(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],d=e[9],f=e[10],u=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=a*i+l*n,t[5]=o*i+d*n,t[6]=s*i+f*n,t[7]=c*i+u*n,t[8]=l*i-a*n,t[9]=d*i-o*n,t[10]=f*i-s*n,t[11]=u*i-c*n,t}function cy(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],c=e[3],l=e[8],d=e[9],f=e[10],u=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i-l*n,t[1]=o*i-d*n,t[2]=s*i-f*n,t[3]=c*i-u*n,t[8]=a*n+l*i,t[9]=o*n+d*i,t[10]=s*n+f*i,t[11]=c*n+u*i,t}function dy(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],c=e[3],l=e[4],d=e[5],f=e[6],u=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i+l*n,t[1]=o*i+d*n,t[2]=s*i+f*n,t[3]=c*i+u*n,t[4]=l*i-a*n,t[5]=d*i-o*n,t[6]=f*i-s*n,t[7]=u*i-c*n,t}function uy(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t}function fy(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function hy(t,e,r){var n=r[0],i=r[1],a=r[2],o=Math.sqrt(n*n+i*i+a*a),s,c,l;return o<$?null:(o=1/o,n*=o,i*=o,a*=o,s=Math.sin(e),c=Math.cos(e),l=1-c,t[0]=n*n*l+c,t[1]=i*n*l+a*s,t[2]=a*n*l-i*s,t[3]=0,t[4]=n*i*l-a*s,t[5]=i*i*l+c,t[6]=a*i*l+n*s,t[7]=0,t[8]=n*a*l+i*s,t[9]=i*a*l-n*s,t[10]=a*a*l+c,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)}function my(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n,t[6]=r,t[7]=0,t[8]=0,t[9]=-r,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function py(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=0,t[2]=-r,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=r,t[9]=0,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function gy(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=0,t[4]=-r,t[5]=n,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function Hh(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=n+n,c=i+i,l=a+a,d=n*s,f=n*c,u=n*l,h=i*c,m=i*l,g=a*l,p=o*s,y=o*c,v=o*l;return t[0]=1-(h+g),t[1]=f+v,t[2]=u-y,t[3]=0,t[4]=f-v,t[5]=1-(d+g),t[6]=m+p,t[7]=0,t[8]=u+y,t[9]=m-p,t[10]=1-(d+h),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function yy(t,e){var r=new xe(3),n=-e[0],i=-e[1],a=-e[2],o=e[3],s=e[4],c=e[5],l=e[6],d=e[7],f=n*n+i*i+a*a+o*o;return f>0?(r[0]=(s*o+d*n+c*a-l*i)*2/f,r[1]=(c*o+d*i+l*n-s*a)*2/f,r[2]=(l*o+d*a+s*i-c*n)*2/f):(r[0]=(s*o+d*n+c*a-l*i)*2,r[1]=(c*o+d*i+l*n-s*a)*2,r[2]=(l*o+d*a+s*i-c*n)*2),Hh(t,e,r),t}function by(t,e){return t[0]=e[12],t[1]=e[13],t[2]=e[14],t}function Vh(t,e){var r=e[0],n=e[1],i=e[2],a=e[4],o=e[5],s=e[6],c=e[8],l=e[9],d=e[10];return t[0]=Math.sqrt(r*r+n*n+i*i),t[1]=Math.sqrt(a*a+o*o+s*s),t[2]=Math.sqrt(c*c+l*l+d*d),t}function xy(t,e){var r=new xe(3);Vh(r,e);var n=1/r[0],i=1/r[1],a=1/r[2],o=e[0]*n,s=e[1]*i,c=e[2]*a,l=e[4]*n,d=e[5]*i,f=e[6]*a,u=e[8]*n,h=e[9]*i,m=e[10]*a,g=o+d+m,p=0;return g>0?(p=Math.sqrt(g+1)*2,t[3]=.25*p,t[0]=(f-h)/p,t[1]=(u-c)/p,t[2]=(s-l)/p):o>d&&o>m?(p=Math.sqrt(1+o-d-m)*2,t[3]=(f-h)/p,t[0]=.25*p,t[1]=(s+l)/p,t[2]=(u+c)/p):d>m?(p=Math.sqrt(1+d-o-m)*2,t[3]=(u-c)/p,t[0]=(s+l)/p,t[1]=.25*p,t[2]=(f+h)/p):(p=Math.sqrt(1+m-o-d)*2,t[3]=(s-l)/p,t[0]=(u+c)/p,t[1]=(f+h)/p,t[2]=.25*p),t}function vy(t,e,r,n){e[0]=n[12],e[1]=n[13],e[2]=n[14];var i=n[0],a=n[1],o=n[2],s=n[4],c=n[5],l=n[6],d=n[8],f=n[9],u=n[10];r[0]=Math.sqrt(i*i+a*a+o*o),r[1]=Math.sqrt(s*s+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=a*m,v=o*g,x=s*h,b=c*m,_=l*g,w=d*h,S=f*m,E=u*g,L=p+b+E,M=0;return L>0?(M=Math.sqrt(L+1)*2,t[3]=.25*M,t[0]=(_-S)/M,t[1]=(w-v)/M,t[2]=(y-x)/M):p>b&&p>E?(M=Math.sqrt(1+p-b-E)*2,t[3]=(_-S)/M,t[0]=.25*M,t[1]=(y+x)/M,t[2]=(w+v)/M):b>E?(M=Math.sqrt(1+b-p-E)*2,t[3]=(w-v)/M,t[0]=(y+x)/M,t[1]=.25*M,t[2]=(_+S)/M):(M=Math.sqrt(1+E-p-b)*2,t[3]=(y-x)/M,t[0]=(w+v)/M,t[1]=(_+S)/M,t[2]=.25*M),t}function _y(t,e,r,n){var i=e[0],a=e[1],o=e[2],s=e[3],c=i+i,l=a+a,d=o+o,f=i*c,u=i*l,h=i*d,m=a*l,g=a*d,p=o*d,y=s*c,v=s*l,x=s*d,b=n[0],_=n[1],w=n[2];return t[0]=(1-(m+p))*b,t[1]=(u+x)*b,t[2]=(h-v)*b,t[3]=0,t[4]=(u-x)*_,t[5]=(1-(f+p))*_,t[6]=(g+y)*_,t[7]=0,t[8]=(h+v)*w,t[9]=(g-y)*w,t[10]=(1-(f+m))*w,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function Sy(t,e,r,n,i){var a=e[0],o=e[1],s=e[2],c=e[3],l=a+a,d=o+o,f=s+s,u=a*l,h=a*d,m=a*f,g=o*d,p=o*f,y=s*f,v=c*l,x=c*d,b=c*f,_=n[0],w=n[1],S=n[2],E=i[0],L=i[1],M=i[2],C=(1-(g+y))*_,I=(h+b)*_,B=(m-x)*_,F=(h-b)*w,U=(1-(u+y))*w,ce=(p+v)*w,Nt=(m+x)*S,Ct=(p-v)*S,zr=(1-(u+g))*S;return t[0]=C,t[1]=I,t[2]=B,t[3]=0,t[4]=F,t[5]=U,t[6]=ce,t[7]=0,t[8]=Nt,t[9]=Ct,t[10]=zr,t[11]=0,t[12]=r[0]+E-(C*E+F*L+Nt*M),t[13]=r[1]+L-(I*E+U*L+Ct*M),t[14]=r[2]+M-(B*E+ce*L+zr*M),t[15]=1,t}function wy(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r+r,s=n+n,c=i+i,l=r*o,d=n*o,f=n*s,u=i*o,h=i*s,m=i*c,g=a*o,p=a*s,y=a*c;return t[0]=1-f-m,t[1]=d+y,t[2]=u-p,t[3]=0,t[4]=d-y,t[5]=1-l-m,t[6]=h+g,t[7]=0,t[8]=u+p,t[9]=h-g,t[10]=1-l-f,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function My(t,e,r,n,i,a,o){var s=1/(r-e),c=1/(i-n),l=1/(a-o);return t[0]=a*2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a*2*c,t[6]=0,t[7]=0,t[8]=(r+e)*s,t[9]=(i+n)*c,t[10]=(o+a)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=o*a*2*l,t[15]=0,t}function Gh(t,e,r,n,i){var a=1/Math.tan(e/2);if(t[0]=a/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,i!=null&&i!==1/0){var o=1/(n-i);t[10]=(i+n)*o,t[14]=2*i*n*o}else t[10]=-1,t[14]=-2*n;return t}var Ay=Gh;function Ey(t,e,r,n,i){var a=1/Math.tan(e/2);if(t[0]=a/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,i!=null&&i!==1/0){var o=1/(n-i);t[10]=i*o,t[14]=i*n*o}else t[10]=-1,t[14]=-n;return t}function Ly(t,e,r,n){var i=Math.tan(e.upDegrees*Math.PI/180),a=Math.tan(e.downDegrees*Math.PI/180),o=Math.tan(e.leftDegrees*Math.PI/180),s=Math.tan(e.rightDegrees*Math.PI/180),c=2/(o+s),l=2/(i+a);return t[0]=c,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=l,t[6]=0,t[7]=0,t[8]=-((o-s)*c*.5),t[9]=(i-a)*l*.5,t[10]=n/(r-n),t[11]=-1,t[12]=0,t[13]=0,t[14]=n*r/(r-n),t[15]=0,t}function Wh(t,e,r,n,i,a,o){var s=1/(e-r),c=1/(n-i),l=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*c,t[14]=(o+a)*l,t[15]=1,t}var Ty=Wh;function Ry(t,e,r,n,i,a,o){var s=1/(e-r),c=1/(n-i),l=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=l,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*c,t[14]=a*l,t[15]=1,t}function Cy(t,e,r,n){var i,a,o,s,c,l,d,f,u,h,m=e[0],g=e[1],p=e[2],y=n[0],v=n[1],x=n[2],b=r[0],_=r[1],w=r[2];return Math.abs(m-b)<$&&Math.abs(g-_)<$&&Math.abs(p-w)<$?Uh(t):(d=m-b,f=g-_,u=p-w,h=1/Math.sqrt(d*d+f*f+u*u),d*=h,f*=h,u*=h,i=v*u-x*f,a=x*d-y*u,o=y*f-v*d,h=Math.sqrt(i*i+a*a+o*o),h?(h=1/h,i*=h,a*=h,o*=h):(i=0,a=0,o=0),s=f*o-u*a,c=u*i-d*o,l=d*a-f*i,h=Math.sqrt(s*s+c*c+l*l),h?(h=1/h,s*=h,c*=h,l*=h):(s=0,c=0,l=0),t[0]=i,t[1]=s,t[2]=d,t[3]=0,t[4]=a,t[5]=c,t[6]=f,t[7]=0,t[8]=o,t[9]=l,t[10]=u,t[11]=0,t[12]=-(i*m+a*g+o*p),t[13]=-(s*m+c*g+l*p),t[14]=-(d*m+f*g+u*p),t[15]=1,t)}function Py(t,e,r,n){var i=e[0],a=e[1],o=e[2],s=n[0],c=n[1],l=n[2],d=i-r[0],f=a-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-s*u,p=s*f-c*d;return h=m*m+g*g+p*p,h>0&&(h=1/Math.sqrt(h),m*=h,g*=h,p*=h),t[0]=m,t[1]=g,t[2]=p,t[3]=0,t[4]=f*p-u*g,t[5]=u*m-d*p,t[6]=d*g-f*m,t[7]=0,t[8]=d,t[9]=f,t[10]=u,t[11]=0,t[12]=i,t[13]=a,t[14]=o,t[15]=1,t}function Iy(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"}function By(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]+t[3]*t[3]+t[4]*t[4]+t[5]*t[5]+t[6]*t[6]+t[7]*t[7]+t[8]*t[8]+t[9]*t[9]+t[10]*t[10]+t[11]*t[11]+t[12]*t[12]+t[13]*t[13]+t[14]*t[14]+t[15]*t[15])}function Fy(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t[4]=e[4]+r[4],t[5]=e[5]+r[5],t[6]=e[6]+r[6],t[7]=e[7]+r[7],t[8]=e[8]+r[8],t[9]=e[9]+r[9],t[10]=e[10]+r[10],t[11]=e[11]+r[11],t[12]=e[12]+r[12],t[13]=e[13]+r[13],t[14]=e[14]+r[14],t[15]=e[15]+r[15],t}function Xh(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t[4]=e[4]-r[4],t[5]=e[5]-r[5],t[6]=e[6]-r[6],t[7]=e[7]-r[7],t[8]=e[8]-r[8],t[9]=e[9]-r[9],t[10]=e[10]-r[10],t[11]=e[11]-r[11],t[12]=e[12]-r[12],t[13]=e[13]-r[13],t[14]=e[14]-r[14],t[15]=e[15]-r[15],t}function ky(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*r,t[5]=e[5]*r,t[6]=e[6]*r,t[7]=e[7]*r,t[8]=e[8]*r,t[9]=e[9]*r,t[10]=e[10]*r,t[11]=e[11]*r,t[12]=e[12]*r,t[13]=e[13]*r,t[14]=e[14]*r,t[15]=e[15]*r,t}function Dy(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t[4]=e[4]+r[4]*n,t[5]=e[5]+r[5]*n,t[6]=e[6]+r[6]*n,t[7]=e[7]+r[7]*n,t[8]=e[8]+r[8]*n,t[9]=e[9]+r[9]*n,t[10]=e[10]+r[10]*n,t[11]=e[11]+r[11]*n,t[12]=e[12]+r[12]*n,t[13]=e[13]+r[13]*n,t[14]=e[14]+r[14]*n,t[15]=e[15]+r[15]*n,t}function zy(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]&&t[4]===e[4]&&t[5]===e[5]&&t[6]===e[6]&&t[7]===e[7]&&t[8]===e[8]&&t[9]===e[9]&&t[10]===e[10]&&t[11]===e[11]&&t[12]===e[12]&&t[13]===e[13]&&t[14]===e[14]&&t[15]===e[15]}function Oy(t,e){var r=t[0],n=t[1],i=t[2],a=t[3],o=t[4],s=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],v=e[0],x=e[1],b=e[2],_=e[3],w=e[4],S=e[5],E=e[6],L=e[7],M=e[8],C=e[9],I=e[10],B=e[11],F=e[12],U=e[13],ce=e[14],Nt=e[15];return Math.abs(r-v)<=$*Math.max(1,Math.abs(r),Math.abs(v))&&Math.abs(n-x)<=$*Math.max(1,Math.abs(n),Math.abs(x))&&Math.abs(i-b)<=$*Math.max(1,Math.abs(i),Math.abs(b))&&Math.abs(a-_)<=$*Math.max(1,Math.abs(a),Math.abs(_))&&Math.abs(o-w)<=$*Math.max(1,Math.abs(o),Math.abs(w))&&Math.abs(s-S)<=$*Math.max(1,Math.abs(s),Math.abs(S))&&Math.abs(c-E)<=$*Math.max(1,Math.abs(c),Math.abs(E))&&Math.abs(l-L)<=$*Math.max(1,Math.abs(l),Math.abs(L))&&Math.abs(d-M)<=$*Math.max(1,Math.abs(d),Math.abs(M))&&Math.abs(f-C)<=$*Math.max(1,Math.abs(f),Math.abs(C))&&Math.abs(u-I)<=$*Math.max(1,Math.abs(u),Math.abs(I))&&Math.abs(h-B)<=$*Math.max(1,Math.abs(h),Math.abs(B))&&Math.abs(m-F)<=$*Math.max(1,Math.abs(m),Math.abs(F))&&Math.abs(g-U)<=$*Math.max(1,Math.abs(g),Math.abs(U))&&Math.abs(p-ce)<=$*Math.max(1,Math.abs(p),Math.abs(ce))&&Math.abs(y-Nt)<=$*Math.max(1,Math.abs(y),Math.abs(Nt))}var Uy=Nh,Ny=Xh;var Jl={};Na(Jl,{add:()=>cx,calculateW:()=>Qb,clone:()=>ax,conjugate:()=>rx,copy:()=>sx,create:()=>iu,dot:()=>um,equals:()=>px,exactEquals:()=>mx,exp:()=>sm,fromEuler:()=>nx,fromMat3:()=>cm,fromValues:()=>ox,getAngle:()=>$b,getAxisAngle:()=>Yb,identity:()=>Kb,invert:()=>tx,len:()=>fx,length:()=>fm,lerp:()=>ux,ln:()=>lm,mul:()=>dx,multiply:()=>om,normalize:()=>au,pow:()=>Jb,random:()=>ex,rotateX:()=>qb,rotateY:()=>Zb,rotateZ:()=>jb,rotationTo:()=>gx,scale:()=>dm,set:()=>lx,setAxes:()=>bx,setAxisAngle:()=>am,slerp:()=>Ql,sqlerp:()=>yx,sqrLen:()=>hx,squaredLength:()=>hm,str:()=>ix});var R={};Na(R,{add:()=>Wy,angle:()=>ub,bezier:()=>nb,ceil:()=>Xy,clone:()=>Hy,copy:()=>Vy,create:()=>Yl,cross:()=>ns,dist:()=>xb,distance:()=>Zh,div:()=>bb,divide:()=>qh,dot:()=>rs,equals:()=>pb,exactEquals:()=>mb,floor:()=>Ky,forEach:()=>Sb,fromValues:()=>$l,hermite:()=>rb,inverse:()=>Jy,len:()=>$d,length:()=>Kh,lerp:()=>eb,max:()=>$y,min:()=>Yy,mul:()=>yb,multiply:()=>$h,negate:()=>Qy,normalize:()=>Yd,random:()=>ib,rotateX:()=>lb,rotateY:()=>cb,rotateZ:()=>db,round:()=>qy,scale:()=>Zy,scaleAndAdd:()=>jy,set:()=>Gy,slerp:()=>tb,sqrDist:()=>vb,sqrLen:()=>_b,squaredDistance:()=>jh,squaredLength:()=>Qh,str:()=>hb,sub:()=>gb,subtract:()=>Yh,transformMat3:()=>ob,transformMat4:()=>ab,transformQuat:()=>sb,zero:()=>fb});function Yl(){var t=new xe(3);return xe!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function Hy(t){var e=new xe(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function Kh(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}function $l(t,e,r){var n=new xe(3);return n[0]=t,n[1]=e,n[2]=r,n}function Vy(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function Gy(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}function Wy(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}function Yh(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}function $h(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t}function qh(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}function Xy(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}function Ky(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}function Yy(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t}function $y(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t}function qy(t,e){return t[0]=tn(e[0]),t[1]=tn(e[1]),t[2]=tn(e[2]),t}function Zy(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}function jy(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t}function Zh(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(r*r+n*n+i*i)}function jh(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return r*r+n*n+i*i}function Qh(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}function Qy(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}function Jy(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}function Yd(t,e){var r=e[0],n=e[1],i=e[2],a=r*r+n*n+i*i;return a>0&&(a=1/Math.sqrt(a)),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a,t}function rs(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function ns(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],c=r[2];return t[0]=i*c-a*s,t[1]=a*o-n*c,t[2]=n*s-i*o,t}function eb(t,e,r,n){var i=e[0],a=e[1],o=e[2];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t[2]=o+n*(r[2]-o),t}function tb(t,e,r,n){var i=Math.acos(Math.min(Math.max(rs(e,r),-1),1)),a=Math.sin(i),o=Math.sin((1-n)*i)/a,s=Math.sin(n*i)/a;return t[0]=o*e[0]+s*r[0],t[1]=o*e[1]+s*r[1],t[2]=o*e[2]+s*r[2],t}function rb(t,e,r,n,i,a){var o=a*a,s=o*(2*a-3)+1,c=o*(a-2)+a,l=o*(a-1),d=o*(3-2*a);return t[0]=e[0]*s+r[0]*c+n[0]*l+i[0]*d,t[1]=e[1]*s+r[1]*c+n[1]*l+i[1]*d,t[2]=e[2]*s+r[2]*c+n[2]*l+i[2]*d,t}function nb(t,e,r,n,i,a){var o=1-a,s=o*o,c=a*a,l=s*o,d=3*a*s,f=3*c*o,u=c*a;return t[0]=e[0]*l+r[0]*d+n[0]*f+i[0]*u,t[1]=e[1]*l+r[1]*d+n[1]*f+i[1]*u,t[2]=e[2]*l+r[2]*d+n[2]*f+i[2]*u,t}function ib(t,e){e=e===void 0?1:e;var r=er()*2*Math.PI,n=er()*2-1,i=Math.sqrt(1-n*n)*e;return t[0]=Math.cos(r)*i,t[1]=Math.sin(r)*i,t[2]=n*e,t}function ab(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[3]*n+r[7]*i+r[11]*a+r[15];return o=o||1,t[0]=(r[0]*n+r[4]*i+r[8]*a+r[12])/o,t[1]=(r[1]*n+r[5]*i+r[9]*a+r[13])/o,t[2]=(r[2]*n+r[6]*i+r[10]*a+r[14])/o,t}function ob(t,e,r){var n=e[0],i=e[1],a=e[2];return t[0]=n*r[0]+i*r[3]+a*r[6],t[1]=n*r[1]+i*r[4]+a*r[7],t[2]=n*r[2]+i*r[5]+a*r[8],t}function sb(t,e,r){var n=r[0],i=r[1],a=r[2],o=r[3],s=e[0],c=e[1],l=e[2],d=i*l-a*c,f=a*s-n*l,u=n*c-i*s;return d=d+d,f=f+f,u=u+u,t[0]=s+o*d+i*u-a*f,t[1]=c+o*f+a*d-n*u,t[2]=l+o*u+n*f-i*d,t}function lb(t,e,r,n){var i=[],a=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],a[0]=i[0],a[1]=i[1]*Math.cos(n)-i[2]*Math.sin(n),a[2]=i[1]*Math.sin(n)+i[2]*Math.cos(n),t[0]=a[0]+r[0],t[1]=a[1]+r[1],t[2]=a[2]+r[2],t}function cb(t,e,r,n){var i=[],a=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],a[0]=i[2]*Math.sin(n)+i[0]*Math.cos(n),a[1]=i[1],a[2]=i[2]*Math.cos(n)-i[0]*Math.sin(n),t[0]=a[0]+r[0],t[1]=a[1]+r[1],t[2]=a[2]+r[2],t}function db(t,e,r,n){var i=[],a=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],a[0]=i[0]*Math.cos(n)-i[1]*Math.sin(n),a[1]=i[0]*Math.sin(n)+i[1]*Math.cos(n),a[2]=i[2],t[0]=a[0]+r[0],t[1]=a[1]+r[1],t[2]=a[2]+r[2],t}function ub(t,e){var r=t[0],n=t[1],i=t[2],a=e[0],o=e[1],s=e[2],c=Math.sqrt((r*r+n*n+i*i)*(a*a+o*o+s*s)),l=c&&rs(t,e)/c;return Math.acos(Math.min(Math.max(l,-1),1))}function fb(t){return t[0]=0,t[1]=0,t[2]=0,t}function hb(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"}function mb(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}function pb(t,e){var r=t[0],n=t[1],i=t[2],a=e[0],o=e[1],s=e[2];return Math.abs(r-a)<=$*Math.max(1,Math.abs(r),Math.abs(a))&&Math.abs(n-o)<=$*Math.max(1,Math.abs(n),Math.abs(o))&&Math.abs(i-s)<=$*Math.max(1,Math.abs(i),Math.abs(s))}var gb=Yh,yb=$h,bb=qh,xb=Zh,vb=jh,$d=Kh,_b=Qh,Sb=(function(){var t=Yl();return function(e,r,n,i,a,o){var s,c;for(r||(r=3),n||(n=0),i?c=Math.min(i*r+n,e.length):c=e.length,s=n;s<c;s+=r)t[0]=e[s],t[1]=e[s+1],t[2]=e[s+2],a(t,t,o),e[s]=t[0],e[s+1]=t[1],e[s+2]=t[2];return e}})();var ga={};Na(ga,{add:()=>Jd,ceil:()=>wb,clone:()=>qd,copy:()=>jd,create:()=>Jh,cross:()=>Pb,dist:()=>Hb,distance:()=>nm,div:()=>Nb,divide:()=>rm,dot:()=>jl,equals:()=>zb,exactEquals:()=>nu,floor:()=>Mb,forEach:()=>Xb,fromValues:()=>Zd,inverse:()=>Cb,len:()=>Gb,length:()=>ql,lerp:()=>ru,max:()=>Eb,min:()=>Ab,mul:()=>Ub,multiply:()=>tm,negate:()=>Rb,normalize:()=>tu,random:()=>Ib,round:()=>Lb,scale:()=>eu,scaleAndAdd:()=>Tb,set:()=>Qd,sqrDist:()=>Vb,sqrLen:()=>Wb,squaredDistance:()=>im,squaredLength:()=>Zl,str:()=>Db,sub:()=>Ob,subtract:()=>em,transformMat4:()=>Bb,transformQuat:()=>Fb,zero:()=>kb});function Jh(){var t=new xe(4);return xe!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}function qd(t){var e=new xe(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}function Zd(t,e,r,n){var i=new xe(4);return i[0]=t,i[1]=e,i[2]=r,i[3]=n,i}function jd(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function Qd(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t}function Jd(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t}function em(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t}function tm(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t[3]=e[3]*r[3],t}function rm(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t[3]=e[3]/r[3],t}function wb(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t[3]=Math.ceil(e[3]),t}function Mb(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t[3]=Math.floor(e[3]),t}function Ab(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t[3]=Math.min(e[3],r[3]),t}function Eb(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t[3]=Math.max(e[3],r[3]),t}function Lb(t,e){return t[0]=tn(e[0]),t[1]=tn(e[1]),t[2]=tn(e[2]),t[3]=tn(e[3]),t}function eu(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t}function Tb(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t}function nm(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return Math.sqrt(r*r+n*n+i*i+a*a)}function im(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return r*r+n*n+i*i+a*a}function ql(t){var e=t[0],r=t[1],n=t[2],i=t[3];return Math.sqrt(e*e+r*r+n*n+i*i)}function Zl(t){var e=t[0],r=t[1],n=t[2],i=t[3];return e*e+r*r+n*n+i*i}function Rb(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t}function Cb(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t[3]=1/e[3],t}function tu(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r*r+n*n+i*i+a*a;return o>0&&(o=1/Math.sqrt(o)),t[0]=r*o,t[1]=n*o,t[2]=i*o,t[3]=a*o,t}function jl(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}function Pb(t,e,r,n){var i=r[0]*n[1]-r[1]*n[0],a=r[0]*n[2]-r[2]*n[0],o=r[0]*n[3]-r[3]*n[0],s=r[1]*n[2]-r[2]*n[1],c=r[1]*n[3]-r[3]*n[1],l=r[2]*n[3]-r[3]*n[2],d=e[0],f=e[1],u=e[2],h=e[3];return t[0]=f*l-u*c+h*s,t[1]=-(d*l)+u*o-h*a,t[2]=d*c-f*o+h*i,t[3]=-(d*s)+f*a-u*i,t}function ru(t,e,r,n){var i=e[0],a=e[1],o=e[2],s=e[3];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t[2]=o+n*(r[2]-o),t[3]=s+n*(r[3]-s),t}function Ib(t,e){e=e===void 0?1:e;var r,n,i,a,o,s,c;c=er(),r=c*2-1,n=(4*er()-2)*Math.sqrt(c*-c+c),o=r*r+n*n,c=er(),i=c*2-1,a=(4*er()-2)*Math.sqrt(c*-c+c),s=i*i+a*a;var l=Math.sqrt((1-o)/s);return t[0]=e*r,t[1]=e*n,t[2]=e*i*l,t[3]=e*a*l,t}function Bb(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t}function Fb(t,e,r){var n=r[0],i=r[1],a=r[2],o=r[3],s=e[0],c=e[1],l=e[2],d=i*l-a*c,f=a*s-n*l,u=n*c-i*s;return d=d+d,f=f+f,u=u+u,t[0]=s+o*d+i*u-a*f,t[1]=c+o*f+a*d-n*u,t[2]=l+o*u+n*f-i*d,t[3]=e[3],t}function kb(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t}function Db(t){return"vec4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"}function nu(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]}function zb(t,e){var r=t[0],n=t[1],i=t[2],a=t[3],o=e[0],s=e[1],c=e[2],l=e[3];return Math.abs(r-o)<=$*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(n-s)<=$*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(i-c)<=$*Math.max(1,Math.abs(i),Math.abs(c))&&Math.abs(a-l)<=$*Math.max(1,Math.abs(a),Math.abs(l))}var Ob=em,Ub=tm,Nb=rm,Hb=nm,Vb=im,Gb=ql,Wb=Zl,Xb=(function(){var t=Jh();return function(e,r,n,i,a,o){var s,c;for(r||(r=4),n||(n=0),i?c=Math.min(i*r+n,e.length):c=e.length,s=n;s<c;s+=r)t[0]=e[s],t[1]=e[s+1],t[2]=e[s+2],t[3]=e[s+3],a(t,t,o),e[s]=t[0],e[s+1]=t[1],e[s+2]=t[2],e[s+3]=t[3];return e}})();function iu(){var t=new xe(4);return xe!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t[3]=1,t}function Kb(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t}function am(t,e,r){r=r*.5;var n=Math.sin(r);return t[0]=n*e[0],t[1]=n*e[1],t[2]=n*e[2],t[3]=Math.cos(r),t}function Yb(t,e){var r=Math.acos(e[3])*2,n=Math.sin(r/2);return n>$?(t[0]=e[0]/n,t[1]=e[1]/n,t[2]=e[2]/n):(t[0]=1,t[1]=0,t[2]=0),r}function $b(t,e){var r=um(t,e);return Math.acos(2*r*r-1)}function om(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=r[0],c=r[1],l=r[2],d=r[3];return t[0]=n*d+o*s+i*l-a*c,t[1]=i*d+o*c+a*s-n*l,t[2]=a*d+o*l+n*c-i*s,t[3]=o*d-n*s-i*c-a*l,t}function qb(t,e,r){r*=.5;var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),c=Math.cos(r);return t[0]=n*c+o*s,t[1]=i*c+a*s,t[2]=a*c-i*s,t[3]=o*c-n*s,t}function Zb(t,e,r){r*=.5;var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),c=Math.cos(r);return t[0]=n*c-a*s,t[1]=i*c+o*s,t[2]=a*c+n*s,t[3]=o*c-i*s,t}function jb(t,e,r){r*=.5;var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),c=Math.cos(r);return t[0]=n*c+i*s,t[1]=i*c-n*s,t[2]=a*c+o*s,t[3]=o*c-a*s,t}function Qb(t,e){var r=e[0],n=e[1],i=e[2];return t[0]=r,t[1]=n,t[2]=i,t[3]=Math.sqrt(Math.abs(1-r*r-n*n-i*i)),t}function sm(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=Math.sqrt(r*r+n*n+i*i),s=Math.exp(a),c=o>0?s*Math.sin(o)/o:0;return t[0]=r*c,t[1]=n*c,t[2]=i*c,t[3]=s*Math.cos(o),t}function lm(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=Math.sqrt(r*r+n*n+i*i),s=o>0?Math.atan2(o,a)/o:0;return t[0]=r*s,t[1]=n*s,t[2]=i*s,t[3]=.5*Math.log(r*r+n*n+i*i+a*a),t}function Jb(t,e,r){return lm(t,e),dm(t,t,r),sm(t,t),t}function Ql(t,e,r,n){var i=e[0],a=e[1],o=e[2],s=e[3],c=r[0],l=r[1],d=r[2],f=r[3],u,h,m,g,p;return h=i*c+a*l+o*d+s*f,h<0&&(h=-h,c=-c,l=-l,d=-d,f=-f),1-h>$?(u=Math.acos(h),m=Math.sin(u),g=Math.sin((1-n)*u)/m,p=Math.sin(n*u)/m):(g=1-n,p=n),t[0]=g*i+p*c,t[1]=g*a+p*l,t[2]=g*o+p*d,t[3]=g*s+p*f,t}function ex(t){var e=er(),r=er(),n=er(),i=Math.sqrt(1-e),a=Math.sqrt(e);return t[0]=i*Math.sin(2*Math.PI*r),t[1]=i*Math.cos(2*Math.PI*r),t[2]=a*Math.sin(2*Math.PI*n),t[3]=a*Math.cos(2*Math.PI*n),t}function tx(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r*r+n*n+i*i+a*a,s=o?1/o:0;return t[0]=-r*s,t[1]=-n*s,t[2]=-i*s,t[3]=a*s,t}function rx(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=e[3],t}function cm(t,e){var r=e[0]+e[4]+e[8],n;if(r>0)n=Math.sqrt(r+1),t[3]=.5*n,n=.5/n,t[0]=(e[5]-e[7])*n,t[1]=(e[6]-e[2])*n,t[2]=(e[1]-e[3])*n;else{var i=0;e[4]>e[0]&&(i=1),e[8]>e[i*3+i]&&(i=2);var a=(i+1)%3,o=(i+2)%3;n=Math.sqrt(e[i*3+i]-e[a*3+a]-e[o*3+o]+1),t[i]=.5*n,n=.5/n,t[3]=(e[a*3+o]-e[o*3+a])*n,t[a]=(e[a*3+i]+e[i*3+a])*n,t[o]=(e[o*3+i]+e[i*3+o])*n}return t}function nx(t,e,r,n){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:zh,a=Math.PI/360;e*=a,n*=a,r*=a;var o=Math.sin(e),s=Math.cos(e),c=Math.sin(r),l=Math.cos(r),d=Math.sin(n),f=Math.cos(n);switch(i){case"xyz":t[0]=o*l*f+s*c*d,t[1]=s*c*f-o*l*d,t[2]=s*l*d+o*c*f,t[3]=s*l*f-o*c*d;break;case"xzy":t[0]=o*l*f-s*c*d,t[1]=s*c*f-o*l*d,t[2]=s*l*d+o*c*f,t[3]=s*l*f+o*c*d;break;case"yxz":t[0]=o*l*f+s*c*d,t[1]=s*c*f-o*l*d,t[2]=s*l*d-o*c*f,t[3]=s*l*f+o*c*d;break;case"yzx":t[0]=o*l*f+s*c*d,t[1]=s*c*f+o*l*d,t[2]=s*l*d-o*c*f,t[3]=s*l*f-o*c*d;break;case"zxy":t[0]=o*l*f-s*c*d,t[1]=s*c*f+o*l*d,t[2]=s*l*d+o*c*f,t[3]=s*l*f-o*c*d;break;case"zyx":t[0]=o*l*f-s*c*d,t[1]=s*c*f+o*l*d,t[2]=s*l*d-o*c*f,t[3]=s*l*f+o*c*d;break;default:throw new Error("Unknown angle order "+i)}return t}function ix(t){return"quat("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"}var ax=qd,ox=Zd,sx=jd,lx=Qd,cx=Jd,dx=om,dm=eu,um=jl,ux=ru,fm=ql,fx=fm,hm=Zl,hx=hm,au=tu,mx=nu;function px(t,e){return Math.abs(jl(t,e))>=1-$}var gx=(function(){var t=Yl(),e=$l(1,0,0),r=$l(0,1,0);return function(n,i,a){var o=rs(i,a);return o<-.999999?(ns(t,e,i),$d(t)<1e-6&&ns(t,r,i),Yd(t,t),am(n,t,Math.PI),n):o>.999999?(n[0]=0,n[1]=0,n[2]=0,n[3]=1,n):(ns(t,i,a),n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=1+o,au(n,n))}})(),yx=(function(){var t=iu(),e=iu();return function(r,n,i,a,o,s){return Ql(t,n,o,s),Ql(e,i,a,s),Ql(r,t,e,2*s*(1-s)),r}})(),bx=(function(){var t=Oh();return function(e,r,n,i){return t[0]=n[0],t[3]=n[1],t[6]=n[2],t[1]=i[0],t[4]=i[1],t[7]=i[2],t[2]=-r[0],t[5]=-r[1],t[8]=-r[2],au(e,cm(e,t))}})();var ec=class{constructor(e,r){this._position=R.create();this._angles=R.create();this._bobAngles=R.create();this._bobOffset=R.create();this._kickAngles=R.create();this._rollAngle=0;this._fov=90;this._aspect=1;this._near=.1;this._far=1e3;this._viewMatrix=j.create();this._projectionMatrix=j.create();this._viewProjectionMatrix=j.create();this._dirty=!0;e!==void 0&&r!==void 0&&r>0&&(this._aspect=e/r)}get position(){return this._position}set position(e){R.equals(this._position,e)||(R.copy(this._position,e),this._dirty=!0,this.triggerMoveEvent())}get angles(){return this._angles}set angles(e){R.equals(this._angles,e)||(R.copy(this._angles,e),this._dirty=!0,this.triggerMoveEvent())}get bobAngles(){return this._bobAngles}set bobAngles(e){R.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){R.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){R.copy(this._bobOffset,e),this._dirty=!0}get rollAngle(){return this._rollAngle}set rollAngle(e){this._rollAngle=e,this._dirty=!0}get fov(){return this._fov}set fov(e){this._fov=e,this._dirty=!0}get aspect(){return this._aspect}set aspect(e){this._aspect=e,this._dirty=!0}toState(){return{position:R.clone(this._position),angles:R.clone(this._angles),fov:this._fov,aspect:this._aspect,near:this._near,far:this._far}}setPosition(e,r,n){let i=R.fromValues(e,r,n);R.equals(this._position,i)||(R.copy(this._position,i),this._dirty=!0,this.triggerMoveEvent())}setRotation(e,r,n){let i=R.fromValues(e,r,n);R.equals(this._angles,i)||(R.copy(this._angles,i),this._dirty=!0,this.triggerMoveEvent())}setFov(e){this.fov=e}setAspectRatio(e){this.aspect=e}lookAt(e){let r=R.create();if(R.subtract(r,e,this._position),R.length(r)<.001)return;let i=Math.atan2(r[1],r[0])*zc,a=Math.hypot(r[0],r[1]),o=-Math.atan2(r[2],a)*zc;this.setRotation(o,i,0)}triggerMoveEvent(){this.onCameraMove&&this.onCameraMove({position:R.clone(this._position),angles:R.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(e){let r=j.create();return j.perspective(r,e*Pi,this._aspect,this._near,this._far),r}screenToWorldRay(e,r){let n=e*2-1,i=1-r*2,a=R.fromValues(n,i,-1),o=R.fromValues(n,i,1),s=j.create();j.invert(s,this.viewProjectionMatrix);let c=R.create(),l=R.create();R.transformMat4(c,a,s),R.transformMat4(l,o,s);let d=R.create();return R.subtract(d,l,c),R.normalize(d,d),{origin:R.clone(this._position),direction:d}}updateMatrices(){if(!this._dirty)return;j.perspective(this._projectionMatrix,this._fov*Pi,this._aspect,this._near,this._far);let e=j.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,a=r*Pi,o=n*Pi,s=i*Pi,c=j.create();j.identity(c),j.rotateZ(c,c,-o),j.rotateY(c,c,-a),j.rotateX(c,c,-s);let l=j.create();j.multiply(l,e,c);let d=R.add(R.create(),this._position,this._bobOffset),f=R.negate(R.create(),d),u=R.create();R.transformMat4(u,f,c);let h=R.fromValues(u[1]?-u[1]:0,u[2]||0,u[0]?-u[0]:0);j.copy(this._viewMatrix,l),this._viewMatrix[12]=h[0],this._viewMatrix[13]=h[1],this._viewMatrix[14]=h[2],j.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var xx=[.2,.2,.2],vx={x:0,y:0,z:1},_x=[.8,.8,.8];function ou(t,e,r){return t+(e-t)*r}function ba(t,e,r){return{x:ou(t.x,e.x,r),y:ou(t.y,e.y,r),z:ou(t.z,e.z,r)}}function ya(t){return t<0?0:t>1?1:t}function su(t){let e=[],r=[];for(let n of t.triangles){let i=e.length,[a,o,s]=n.indices,c=t.texCoords[a],l=t.texCoords[o],d=t.texCoords[s];if(!c||!l||!d)throw new Error(`Missing texCoord for triangle in surface ${t.name}`);e.push({vertexIndex:a,texCoord:[c.s,1-c.t]},{vertexIndex:o,texCoord:[l.s,1-l.t]},{vertexIndex:s,texCoord:[d.s,1-d.t]}),r.push(i,i+1,i+2)}return{vertices:e,indices:new Uint16Array(r)}}function Sx(t,e,r){let n=r?.ambient??xx,i=r?.directional??{direction:vx,color:_x},a=Hr(t),o=Hr(i.direction),s=ya(a.x*o.x+a.y*o.y+a.z*o.z),c=n[0]+i.color[0]*s,l=n[1]+i.color[1]*s,d=n[2]+i.color[2]*s;if(r?.dynamicLights){let f=r.modelMatrix?ff(r.modelMatrix,e):e;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,x=Math.sqrt(p),b=x>0?ya(-(h*a.x+m*a.y+g*a.z)/x):0,_=ya(v*b);c+=u.color[0]*_,l+=u.color[1]*_,d+=u.color[2]*_}}}return[ya(c),ya(l),ya(d)]}function lu(t,e,r,n){let i=t.vertices[r.frame0],a=t.vertices[r.frame1];if(!i||!a)throw new Error("Requested MD3 frames are out of range");let o=new Float32Array(e.vertices.length*12);return e.vertices.forEach((s,c)=>{let l=i[s.vertexIndex],d=a[s.vertexIndex];if(!l||!d)throw new Error(`Vertex index ${s.vertexIndex} missing for frame`);let f=ba(l.position,d.position,r.lerp),u=Hr(ba(l.normal,d.normal,r.lerp)),h=Sx(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]=s.texCoord[0],o[m+7]=s.texCoord[1],o[m+8]=h[0],o[m+9]=h[1],o[m+10]=h[2],o[m+11]=1}),o}function mm(t,e,r){let n=t.tags[0];if(!n)return null;let i=n.findIndex(g=>g.name===r);if(i===-1)return null;let a=t.tags[e.frame0]?.[i],o=t.tags[e.frame1]?.[i];if(!a||!o)throw new Error(`Tag ${r} is missing for one of the interpolated frames`);let s=ba(a.origin,o.origin,e.lerp),c=Hr(ba(a.axis[0],o.axis[0],e.lerp)),l=Hr(ba(a.axis[1],o.axis[1],e.lerp)),d=Hr(ba(a.axis[2],o.axis[2],e.lerp)),f=c,u=Hr({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=Hr({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:s,axis:m,matrix:hf(s,m)}}var cu=`#version 300 es
479
+ }`;function ry(t){let e=t.x*t.x+t.y*t.y+t.z*t.z;if(e<=0)return{x:0,y:0,z:1};let r=1/Math.sqrt(e);return{x:t.x*r,y:t.y*r,z:t.z*r}}function Kd(t,e,r){return t+(e-t)*r}function Vh(t,e,r){return{x:Kd(t.x,e.x,r),y:Kd(t.y,e.y,r),z:Kd(t.z,e.z,r)}}function ny(t,e,r){return[t/r.skinWidth,1-e/r.skinHeight]}function Zd(t){if(t.glCommands.length===0){let n=[],i=[];return t.triangles.forEach(o=>{let a=n.length;for(let s=0;s<3;s+=1){let c=o.vertexIndices[s],l=o.texCoordIndices[s],d=t.texCoords[l];n.push({vertexIndex:c,texCoord:ny(d.s,d.t,t.header)})}i.push(a,a+1,a+2)}),{vertices:n,indices:new Uint16Array(i)}}let e=[],r=[];for(let n of t.glCommands){let i=e.length;if(e.push(...n.vertices.map(o=>({vertexIndex:o.vertexIndex,texCoord:[o.s,1-o.t]}))),n.mode==="strip")for(let o=0;o<n.vertices.length-2;o+=1){let a=o%2===0,s=i+o+(a?0:1),c=i+o+(a?1:0),l=i+o+2;r.push(s,c,l)}else for(let o=1;o<n.vertices.length-1;o+=1)r.push(i,i+o,i+o+1)}return{vertices:e,indices:new Uint16Array(r)}}function jd(t,e,r){let{frame0:n,frame1:i,lerp:o}=r,a=t.frames[n],s=t.frames[i];if(!a||!s)throw new Error("Requested MD2 frames are out of range");let c=new Float32Array(e.vertices.length*8);return e.vertices.forEach((l,d)=>{let f=a.vertices[l.vertexIndex],u=s.vertices[l.vertexIndex];if(!f||!u)throw new Error("MD2 vertex index out of range for frame");let h=Vh(f.position,u.position,o),m=ry(Vh(f.normal,u.normal,o)),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 po=class{constructor(e,r,n){this.gl=e,this.geometry=Zd(r),this.vertexBuffer=new Ae(e,e.STATIC_DRAW),this.indexBuffer=new Je(e,e.STATIC_DRAW),this.vertexArray=new Le(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:32,offset:0},{index:1,size:3,type:e.FLOAT,stride:32,offset:12},{index:2,size:2,type:e.FLOAT,stride:32,offset:24}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(r,n)}update(e,r){let n=jd(e,this.geometry,r);this.vertexBuffer.upload(n,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose(),this.wireframeIndexBuffer?.dispose()}},go=class{constructor(e){this.uniformDlights=[];this.gl=e,this.program=le.create(e,{vertex:Yd,fragment:qd},{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<zn;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`)});this.uniformBrightness=this.program.getUniformLocation("u_brightness"),this.uniformGamma=this.program.getUniformLocation("u_gamma"),this.uniformFullbright=this.program.getUniformLocation("u_fullbright"),this.uniformGlobalAmbient=this.program.getUniformLocation("u_globalAmbient")}get shaderSize(){return this.program.sourceSize}bind(e){let{modelViewProjection:r,modelMatrix:n,lightDirection:i=[0,0,1],ambientLight:o=.2,tint:a=[1,1,1,1],diffuseSampler:s=0,dlights:c=[],renderMode:l,brightness:d=1,gamma:f=1,fullbright:u=!1,ambient:h=0}=e,m=new Float32Array(i),g=new Float32Array(a);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,m),this.gl.uniform1f(this.uniformAmbient,o),this.gl.uniform4fv(this.uniformTint,g),this.gl.uniform1i(this.uniformDiffuse,s);let p=0,y=[1,1,1,1];l&&(l.mode==="solid"||l.mode==="wireframe"?p=1:l.mode==="solid-faceted"&&(p=2),l.color?y=[...l.color]:l.generateRandomColor),this.gl.uniform1i(this.uniformRenderMode,p),this.gl.uniform4f(this.uniformSolidColor,y[0],y[1],y[2],y[3]);let v=Math.min(c.length,zn);this.gl.uniform1i(this.uniformNumDlights,v);for(let x=0;x<v;x++){let b=c[x];this.gl.uniform3f(this.uniformDlights[x].pos,b.origin.x,b.origin.y,b.origin.z),this.gl.uniform3f(this.uniformDlights[x].color,b.color.x,b.color.y,b.color.z),this.gl.uniform1f(this.uniformDlights[x].intensity,b.intensity)}this.gl.uniform1f(this.uniformBrightness,d),this.gl.uniform1f(this.uniformGamma,f),this.gl.uniform1i(this.uniformFullbright,u?1:0),this.gl.uniform1f(this.uniformGlobalAmbient,h)}draw(e,r){if(e.vertexArray.bind(),r&&r.mode==="wireframe"){if(!e.wireframeIndexBuffer){e.wireframeIndexBuffer=new Je(this.gl,this.gl.STATIC_DRAW);let n=fo(e.geometry.indices);e.wireframeIndexBuffer.upload(n),e.wireframeIndexCount=n.length}e.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,e.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else e.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var q=1e-6,xe=typeof Float32Array<"u"?Float32Array:Array,tr=Math.random,Gh="zyx";function rn(t){return t>=0?Math.round(t):t%.5===0?Math.floor(t):Math.round(t)}var KE=Math.PI/180,YE=180/Math.PI;function Wh(){var t=new xe(9);return xe!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t}var I={};Ho(I,{add:()=>Gy,adjoint:()=>fy,clone:()=>ay,copy:()=>sy,create:()=>oy,decompose:()=>Ry,determinant:()=>hy,equals:()=>Ky,exactEquals:()=>$y,frob:()=>Vy,fromQuat:()=>Iy,fromQuat2:()=>Ey,fromRotation:()=>Sy,fromRotationTranslation:()=>Kh,fromRotationTranslationScale:()=>Cy,fromRotationTranslationScaleOrigin:()=>Py,fromScaling:()=>_y,fromTranslation:()=>vy,fromValues:()=>ly,fromXRotation:()=>wy,fromYRotation:()=>My,fromZRotation:()=>Ay,frustum:()=>By,getRotation:()=>Ty,getScaling:()=>Yh,getTranslation:()=>Ly,identity:()=>Xh,invert:()=>uy,lookAt:()=>Uy,mul:()=>Yy,multiply:()=>$h,multiplyScalar:()=>Wy,multiplyScalarAndAdd:()=>Xy,ortho:()=>zy,orthoNO:()=>Zh,orthoZO:()=>Oy,perspective:()=>Fy,perspectiveFromFieldOfView:()=>Dy,perspectiveNO:()=>qh,perspectiveZO:()=>ky,rotate:()=>gy,rotateX:()=>yy,rotateY:()=>by,rotateZ:()=>xy,scale:()=>py,set:()=>cy,str:()=>Hy,sub:()=>qy,subtract:()=>jh,targetTo:()=>Ny,translate:()=>my,transpose:()=>dy});function oy(){var t=new xe(16);return xe!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t}function ay(t){var e=new xe(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function sy(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function ly(t,e,r,n,i,o,a,s,c,l,d,f,u,h,m,g){var p=new xe(16);return p[0]=t,p[1]=e,p[2]=r,p[3]=n,p[4]=i,p[5]=o,p[6]=a,p[7]=s,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 cy(t,e,r,n,i,o,a,s,c,l,d,f,u,h,m,g,p){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t[4]=o,t[5]=a,t[6]=s,t[7]=c,t[8]=l,t[9]=d,t[10]=f,t[11]=u,t[12]=h,t[13]=m,t[14]=g,t[15]=p,t}function Xh(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function dy(t,e){if(t===e){var r=e[1],n=e[2],i=e[3],o=e[6],a=e[7],s=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=o,t[11]=e[14],t[12]=i,t[13]=a,t[14]=s}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}function uy(t,e){var r=e[0],n=e[1],i=e[2],o=e[3],a=e[4],s=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],v=r*s-n*a,x=r*c-i*a,b=r*l-o*a,_=n*c-i*s,w=n*l-o*s,S=i*l-o*c,E=d*g-f*m,T=d*p-u*m,M=d*y-h*m,C=f*p-u*g,B=f*y-h*g,F=u*y-h*p,k=v*F-x*B+b*C+_*M-w*T+S*E;return k?(k=1/k,t[0]=(s*F-c*B+l*C)*k,t[1]=(i*B-n*F-o*C)*k,t[2]=(g*S-p*w+y*_)*k,t[3]=(u*w-f*S-h*_)*k,t[4]=(c*M-a*F-l*T)*k,t[5]=(r*F-i*M+o*T)*k,t[6]=(p*b-m*S-y*x)*k,t[7]=(d*S-u*b+h*x)*k,t[8]=(a*B-s*M+l*E)*k,t[9]=(n*M-r*B-o*E)*k,t[10]=(m*w-g*b+y*v)*k,t[11]=(f*b-d*w-h*v)*k,t[12]=(s*T-a*C-c*E)*k,t[13]=(r*C-n*T+i*E)*k,t[14]=(g*x-m*_-p*v)*k,t[15]=(d*_-f*x+u*v)*k,t):null}function fy(t,e){var r=e[0],n=e[1],i=e[2],o=e[3],a=e[4],s=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],v=r*s-n*a,x=r*c-i*a,b=r*l-o*a,_=n*c-i*s,w=n*l-o*s,S=i*l-o*c,E=d*g-f*m,T=d*p-u*m,M=d*y-h*m,C=f*p-u*g,B=f*y-h*g,F=u*y-h*p;return t[0]=s*F-c*B+l*C,t[1]=i*B-n*F-o*C,t[2]=g*S-p*w+y*_,t[3]=u*w-f*S-h*_,t[4]=c*M-a*F-l*T,t[5]=r*F-i*M+o*T,t[6]=p*b-m*S-y*x,t[7]=d*S-u*b+h*x,t[8]=a*B-s*M+l*E,t[9]=n*M-r*B-o*E,t[10]=m*w-g*b+y*v,t[11]=f*b-d*w-h*v,t[12]=s*T-a*C-c*E,t[13]=r*C-n*T+i*E,t[14]=g*x-m*_-p*v,t[15]=d*_-f*x+u*v,t}function hy(t){var e=t[0],r=t[1],n=t[2],i=t[3],o=t[4],a=t[5],s=t[6],c=t[7],l=t[8],d=t[9],f=t[10],u=t[11],h=t[12],m=t[13],g=t[14],p=t[15],y=e*a-r*o,v=e*s-n*o,x=r*s-n*a,b=l*m-d*h,_=l*g-f*h,w=d*g-f*m,S=e*w-r*_+n*b,E=o*w-a*_+s*b,T=l*x-d*v+f*y,M=h*x-m*v+g*y;return c*S-i*E+p*T-u*M}function $h(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3],s=e[4],c=e[5],l=e[6],d=e[7],f=e[8],u=e[9],h=e[10],m=e[11],g=e[12],p=e[13],y=e[14],v=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*f+w*g,t[1]=x*i+b*c+_*u+w*p,t[2]=x*o+b*l+_*h+w*y,t[3]=x*a+b*d+_*m+w*v,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*f+w*g,t[5]=x*i+b*c+_*u+w*p,t[6]=x*o+b*l+_*h+w*y,t[7]=x*a+b*d+_*m+w*v,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*f+w*g,t[9]=x*i+b*c+_*u+w*p,t[10]=x*o+b*l+_*h+w*y,t[11]=x*a+b*d+_*m+w*v,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*f+w*g,t[13]=x*i+b*c+_*u+w*p,t[14]=x*o+b*l+_*h+w*y,t[15]=x*a+b*d+_*m+w*v,t}function my(t,e,r){var n=r[0],i=r[1],o=r[2],a,s,c,l,d,f,u,h,m,g,p,y;return e===t?(t[12]=e[0]*n+e[4]*i+e[8]*o+e[12],t[13]=e[1]*n+e[5]*i+e[9]*o+e[13],t[14]=e[2]*n+e[6]*i+e[10]*o+e[14],t[15]=e[3]*n+e[7]*i+e[11]*o+e[15]):(a=e[0],s=e[1],c=e[2],l=e[3],d=e[4],f=e[5],u=e[6],h=e[7],m=e[8],g=e[9],p=e[10],y=e[11],t[0]=a,t[1]=s,t[2]=c,t[3]=l,t[4]=d,t[5]=f,t[6]=u,t[7]=h,t[8]=m,t[9]=g,t[10]=p,t[11]=y,t[12]=a*n+d*i+m*o+e[12],t[13]=s*n+f*i+g*o+e[13],t[14]=c*n+u*i+p*o+e[14],t[15]=l*n+h*i+y*o+e[15]),t}function py(t,e,r){var n=r[0],i=r[1],o=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*o,t[9]=e[9]*o,t[10]=e[10]*o,t[11]=e[11]*o,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function gy(t,e,r,n){var i=n[0],o=n[1],a=n[2],s=Math.sqrt(i*i+o*o+a*a),c,l,d,f,u,h,m,g,p,y,v,x,b,_,w,S,E,T,M,C,B,F,k,N;return s<q?null:(s=1/s,i*=s,o*=s,a*=s,c=Math.sin(r),l=Math.cos(r),d=1-l,f=e[0],u=e[1],h=e[2],m=e[3],g=e[4],p=e[5],y=e[6],v=e[7],x=e[8],b=e[9],_=e[10],w=e[11],S=i*i*d+l,E=o*i*d+a*c,T=a*i*d-o*c,M=i*o*d-a*c,C=o*o*d+l,B=a*o*d+i*c,F=i*a*d+o*c,k=o*a*d-i*c,N=a*a*d+l,t[0]=f*S+g*E+x*T,t[1]=u*S+p*E+b*T,t[2]=h*S+y*E+_*T,t[3]=m*S+v*E+w*T,t[4]=f*M+g*C+x*B,t[5]=u*M+p*C+b*B,t[6]=h*M+y*C+_*B,t[7]=m*M+v*C+w*B,t[8]=f*F+g*k+x*N,t[9]=u*F+p*k+b*N,t[10]=h*F+y*k+_*N,t[11]=m*F+v*k+w*N,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}function yy(t,e,r){var n=Math.sin(r),i=Math.cos(r),o=e[4],a=e[5],s=e[6],c=e[7],l=e[8],d=e[9],f=e[10],u=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=o*i+l*n,t[5]=a*i+d*n,t[6]=s*i+f*n,t[7]=c*i+u*n,t[8]=l*i-o*n,t[9]=d*i-a*n,t[10]=f*i-s*n,t[11]=u*i-c*n,t}function by(t,e,r){var n=Math.sin(r),i=Math.cos(r),o=e[0],a=e[1],s=e[2],c=e[3],l=e[8],d=e[9],f=e[10],u=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=o*i-l*n,t[1]=a*i-d*n,t[2]=s*i-f*n,t[3]=c*i-u*n,t[8]=o*n+l*i,t[9]=a*n+d*i,t[10]=s*n+f*i,t[11]=c*n+u*i,t}function xy(t,e,r){var n=Math.sin(r),i=Math.cos(r),o=e[0],a=e[1],s=e[2],c=e[3],l=e[4],d=e[5],f=e[6],u=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=o*i+l*n,t[1]=a*i+d*n,t[2]=s*i+f*n,t[3]=c*i+u*n,t[4]=l*i-o*n,t[5]=d*i-a*n,t[6]=f*i-s*n,t[7]=u*i-c*n,t}function vy(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t}function _y(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function Sy(t,e,r){var n=r[0],i=r[1],o=r[2],a=Math.sqrt(n*n+i*i+o*o),s,c,l;return a<q?null:(a=1/a,n*=a,i*=a,o*=a,s=Math.sin(e),c=Math.cos(e),l=1-c,t[0]=n*n*l+c,t[1]=i*n*l+o*s,t[2]=o*n*l-i*s,t[3]=0,t[4]=n*i*l-o*s,t[5]=i*i*l+c,t[6]=o*i*l+n*s,t[7]=0,t[8]=n*o*l+i*s,t[9]=i*o*l-n*s,t[10]=o*o*l+c,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)}function wy(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n,t[6]=r,t[7]=0,t[8]=0,t[9]=-r,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function My(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=0,t[2]=-r,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=r,t[9]=0,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function Ay(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=0,t[4]=-r,t[5]=n,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function Kh(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3],s=n+n,c=i+i,l=o+o,d=n*s,f=n*c,u=n*l,h=i*c,m=i*l,g=o*l,p=a*s,y=a*c,v=a*l;return t[0]=1-(h+g),t[1]=f+v,t[2]=u-y,t[3]=0,t[4]=f-v,t[5]=1-(d+g),t[6]=m+p,t[7]=0,t[8]=u+y,t[9]=m-p,t[10]=1-(d+h),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function Ey(t,e){var r=new xe(3),n=-e[0],i=-e[1],o=-e[2],a=e[3],s=e[4],c=e[5],l=e[6],d=e[7],f=n*n+i*i+o*o+a*a;return f>0?(r[0]=(s*a+d*n+c*o-l*i)*2/f,r[1]=(c*a+d*i+l*n-s*o)*2/f,r[2]=(l*a+d*o+s*i-c*n)*2/f):(r[0]=(s*a+d*n+c*o-l*i)*2,r[1]=(c*a+d*i+l*n-s*o)*2,r[2]=(l*a+d*o+s*i-c*n)*2),Kh(t,e,r),t}function Ly(t,e){return t[0]=e[12],t[1]=e[13],t[2]=e[14],t}function Yh(t,e){var r=e[0],n=e[1],i=e[2],o=e[4],a=e[5],s=e[6],c=e[8],l=e[9],d=e[10];return t[0]=Math.sqrt(r*r+n*n+i*i),t[1]=Math.sqrt(o*o+a*a+s*s),t[2]=Math.sqrt(c*c+l*l+d*d),t}function Ty(t,e){var r=new xe(3);Yh(r,e);var n=1/r[0],i=1/r[1],o=1/r[2],a=e[0]*n,s=e[1]*i,c=e[2]*o,l=e[4]*n,d=e[5]*i,f=e[6]*o,u=e[8]*n,h=e[9]*i,m=e[10]*o,g=a+d+m,p=0;return g>0?(p=Math.sqrt(g+1)*2,t[3]=.25*p,t[0]=(f-h)/p,t[1]=(u-c)/p,t[2]=(s-l)/p):a>d&&a>m?(p=Math.sqrt(1+a-d-m)*2,t[3]=(f-h)/p,t[0]=.25*p,t[1]=(s+l)/p,t[2]=(u+c)/p):d>m?(p=Math.sqrt(1+d-a-m)*2,t[3]=(u-c)/p,t[0]=(s+l)/p,t[1]=.25*p,t[2]=(f+h)/p):(p=Math.sqrt(1+m-a-d)*2,t[3]=(s-l)/p,t[0]=(u+c)/p,t[1]=(f+h)/p,t[2]=.25*p),t}function Ry(t,e,r,n){e[0]=n[12],e[1]=n[13],e[2]=n[14];var i=n[0],o=n[1],a=n[2],s=n[4],c=n[5],l=n[6],d=n[8],f=n[9],u=n[10];r[0]=Math.sqrt(i*i+o*o+a*a),r[1]=Math.sqrt(s*s+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=o*m,v=a*g,x=s*h,b=c*m,_=l*g,w=d*h,S=f*m,E=u*g,T=p+b+E,M=0;return T>0?(M=Math.sqrt(T+1)*2,t[3]=.25*M,t[0]=(_-S)/M,t[1]=(w-v)/M,t[2]=(y-x)/M):p>b&&p>E?(M=Math.sqrt(1+p-b-E)*2,t[3]=(_-S)/M,t[0]=.25*M,t[1]=(y+x)/M,t[2]=(w+v)/M):b>E?(M=Math.sqrt(1+b-p-E)*2,t[3]=(w-v)/M,t[0]=(y+x)/M,t[1]=.25*M,t[2]=(_+S)/M):(M=Math.sqrt(1+E-p-b)*2,t[3]=(y-x)/M,t[0]=(w+v)/M,t[1]=(_+S)/M,t[2]=.25*M),t}function Cy(t,e,r,n){var i=e[0],o=e[1],a=e[2],s=e[3],c=i+i,l=o+o,d=a+a,f=i*c,u=i*l,h=i*d,m=o*l,g=o*d,p=a*d,y=s*c,v=s*l,x=s*d,b=n[0],_=n[1],w=n[2];return t[0]=(1-(m+p))*b,t[1]=(u+x)*b,t[2]=(h-v)*b,t[3]=0,t[4]=(u-x)*_,t[5]=(1-(f+p))*_,t[6]=(g+y)*_,t[7]=0,t[8]=(h+v)*w,t[9]=(g-y)*w,t[10]=(1-(f+m))*w,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function Py(t,e,r,n,i){var o=e[0],a=e[1],s=e[2],c=e[3],l=o+o,d=a+a,f=s+s,u=o*l,h=o*d,m=o*f,g=a*d,p=a*f,y=s*f,v=c*l,x=c*d,b=c*f,_=n[0],w=n[1],S=n[2],E=i[0],T=i[1],M=i[2],C=(1-(g+y))*_,B=(h+b)*_,F=(m-x)*_,k=(h-b)*w,N=(1-(u+y))*w,ce=(p+v)*w,Ht=(m+x)*S,Pt=(p-v)*S,Or=(1-(u+g))*S;return t[0]=C,t[1]=B,t[2]=F,t[3]=0,t[4]=k,t[5]=N,t[6]=ce,t[7]=0,t[8]=Ht,t[9]=Pt,t[10]=Or,t[11]=0,t[12]=r[0]+E-(C*E+k*T+Ht*M),t[13]=r[1]+T-(B*E+N*T+Pt*M),t[14]=r[2]+M-(F*E+ce*T+Or*M),t[15]=1,t}function Iy(t,e){var r=e[0],n=e[1],i=e[2],o=e[3],a=r+r,s=n+n,c=i+i,l=r*a,d=n*a,f=n*s,u=i*a,h=i*s,m=i*c,g=o*a,p=o*s,y=o*c;return t[0]=1-f-m,t[1]=d+y,t[2]=u-p,t[3]=0,t[4]=d-y,t[5]=1-l-m,t[6]=h+g,t[7]=0,t[8]=u+p,t[9]=h-g,t[10]=1-l-f,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function By(t,e,r,n,i,o,a){var s=1/(r-e),c=1/(i-n),l=1/(o-a);return t[0]=o*2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o*2*c,t[6]=0,t[7]=0,t[8]=(r+e)*s,t[9]=(i+n)*c,t[10]=(a+o)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=a*o*2*l,t[15]=0,t}function qh(t,e,r,n,i){var o=1/Math.tan(e/2);if(t[0]=o/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,i!=null&&i!==1/0){var a=1/(n-i);t[10]=(i+n)*a,t[14]=2*i*n*a}else t[10]=-1,t[14]=-2*n;return t}var Fy=qh;function ky(t,e,r,n,i){var o=1/Math.tan(e/2);if(t[0]=o/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,i!=null&&i!==1/0){var a=1/(n-i);t[10]=i*a,t[14]=i*n*a}else t[10]=-1,t[14]=-n;return t}function Dy(t,e,r,n){var i=Math.tan(e.upDegrees*Math.PI/180),o=Math.tan(e.downDegrees*Math.PI/180),a=Math.tan(e.leftDegrees*Math.PI/180),s=Math.tan(e.rightDegrees*Math.PI/180),c=2/(a+s),l=2/(i+o);return t[0]=c,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=l,t[6]=0,t[7]=0,t[8]=-((a-s)*c*.5),t[9]=(i-o)*l*.5,t[10]=n/(r-n),t[11]=-1,t[12]=0,t[13]=0,t[14]=n*r/(r-n),t[15]=0,t}function Zh(t,e,r,n,i,o,a){var s=1/(e-r),c=1/(n-i),l=1/(o-a);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*c,t[14]=(a+o)*l,t[15]=1,t}var zy=Zh;function Oy(t,e,r,n,i,o,a){var s=1/(e-r),c=1/(n-i),l=1/(o-a);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=l,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*c,t[14]=o*l,t[15]=1,t}function Uy(t,e,r,n){var i,o,a,s,c,l,d,f,u,h,m=e[0],g=e[1],p=e[2],y=n[0],v=n[1],x=n[2],b=r[0],_=r[1],w=r[2];return Math.abs(m-b)<q&&Math.abs(g-_)<q&&Math.abs(p-w)<q?Xh(t):(d=m-b,f=g-_,u=p-w,h=1/Math.sqrt(d*d+f*f+u*u),d*=h,f*=h,u*=h,i=v*u-x*f,o=x*d-y*u,a=y*f-v*d,h=Math.sqrt(i*i+o*o+a*a),h?(h=1/h,i*=h,o*=h,a*=h):(i=0,o=0,a=0),s=f*a-u*o,c=u*i-d*a,l=d*o-f*i,h=Math.sqrt(s*s+c*c+l*l),h?(h=1/h,s*=h,c*=h,l*=h):(s=0,c=0,l=0),t[0]=i,t[1]=s,t[2]=d,t[3]=0,t[4]=o,t[5]=c,t[6]=f,t[7]=0,t[8]=a,t[9]=l,t[10]=u,t[11]=0,t[12]=-(i*m+o*g+a*p),t[13]=-(s*m+c*g+l*p),t[14]=-(d*m+f*g+u*p),t[15]=1,t)}function Ny(t,e,r,n){var i=e[0],o=e[1],a=e[2],s=n[0],c=n[1],l=n[2],d=i-r[0],f=o-r[1],u=a-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-s*u,p=s*f-c*d;return h=m*m+g*g+p*p,h>0&&(h=1/Math.sqrt(h),m*=h,g*=h,p*=h),t[0]=m,t[1]=g,t[2]=p,t[3]=0,t[4]=f*p-u*g,t[5]=u*m-d*p,t[6]=d*g-f*m,t[7]=0,t[8]=d,t[9]=f,t[10]=u,t[11]=0,t[12]=i,t[13]=o,t[14]=a,t[15]=1,t}function Hy(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"}function Vy(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]+t[3]*t[3]+t[4]*t[4]+t[5]*t[5]+t[6]*t[6]+t[7]*t[7]+t[8]*t[8]+t[9]*t[9]+t[10]*t[10]+t[11]*t[11]+t[12]*t[12]+t[13]*t[13]+t[14]*t[14]+t[15]*t[15])}function Gy(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t[4]=e[4]+r[4],t[5]=e[5]+r[5],t[6]=e[6]+r[6],t[7]=e[7]+r[7],t[8]=e[8]+r[8],t[9]=e[9]+r[9],t[10]=e[10]+r[10],t[11]=e[11]+r[11],t[12]=e[12]+r[12],t[13]=e[13]+r[13],t[14]=e[14]+r[14],t[15]=e[15]+r[15],t}function jh(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t[4]=e[4]-r[4],t[5]=e[5]-r[5],t[6]=e[6]-r[6],t[7]=e[7]-r[7],t[8]=e[8]-r[8],t[9]=e[9]-r[9],t[10]=e[10]-r[10],t[11]=e[11]-r[11],t[12]=e[12]-r[12],t[13]=e[13]-r[13],t[14]=e[14]-r[14],t[15]=e[15]-r[15],t}function Wy(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*r,t[5]=e[5]*r,t[6]=e[6]*r,t[7]=e[7]*r,t[8]=e[8]*r,t[9]=e[9]*r,t[10]=e[10]*r,t[11]=e[11]*r,t[12]=e[12]*r,t[13]=e[13]*r,t[14]=e[14]*r,t[15]=e[15]*r,t}function Xy(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t[4]=e[4]+r[4]*n,t[5]=e[5]+r[5]*n,t[6]=e[6]+r[6]*n,t[7]=e[7]+r[7]*n,t[8]=e[8]+r[8]*n,t[9]=e[9]+r[9]*n,t[10]=e[10]+r[10]*n,t[11]=e[11]+r[11]*n,t[12]=e[12]+r[12]*n,t[13]=e[13]+r[13]*n,t[14]=e[14]+r[14]*n,t[15]=e[15]+r[15]*n,t}function $y(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]&&t[4]===e[4]&&t[5]===e[5]&&t[6]===e[6]&&t[7]===e[7]&&t[8]===e[8]&&t[9]===e[9]&&t[10]===e[10]&&t[11]===e[11]&&t[12]===e[12]&&t[13]===e[13]&&t[14]===e[14]&&t[15]===e[15]}function Ky(t,e){var r=t[0],n=t[1],i=t[2],o=t[3],a=t[4],s=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],v=e[0],x=e[1],b=e[2],_=e[3],w=e[4],S=e[5],E=e[6],T=e[7],M=e[8],C=e[9],B=e[10],F=e[11],k=e[12],N=e[13],ce=e[14],Ht=e[15];return Math.abs(r-v)<=q*Math.max(1,Math.abs(r),Math.abs(v))&&Math.abs(n-x)<=q*Math.max(1,Math.abs(n),Math.abs(x))&&Math.abs(i-b)<=q*Math.max(1,Math.abs(i),Math.abs(b))&&Math.abs(o-_)<=q*Math.max(1,Math.abs(o),Math.abs(_))&&Math.abs(a-w)<=q*Math.max(1,Math.abs(a),Math.abs(w))&&Math.abs(s-S)<=q*Math.max(1,Math.abs(s),Math.abs(S))&&Math.abs(c-E)<=q*Math.max(1,Math.abs(c),Math.abs(E))&&Math.abs(l-T)<=q*Math.max(1,Math.abs(l),Math.abs(T))&&Math.abs(d-M)<=q*Math.max(1,Math.abs(d),Math.abs(M))&&Math.abs(f-C)<=q*Math.max(1,Math.abs(f),Math.abs(C))&&Math.abs(u-B)<=q*Math.max(1,Math.abs(u),Math.abs(B))&&Math.abs(h-F)<=q*Math.max(1,Math.abs(h),Math.abs(F))&&Math.abs(m-k)<=q*Math.max(1,Math.abs(m),Math.abs(k))&&Math.abs(g-N)<=q*Math.max(1,Math.abs(g),Math.abs(N))&&Math.abs(p-ce)<=q*Math.max(1,Math.abs(p),Math.abs(ce))&&Math.abs(y-Ht)<=q*Math.max(1,Math.abs(y),Math.abs(Ht))}var Yy=$h,qy=jh;var Jl={};Ho(Jl,{add:()=>bx,calculateW:()=>sx,clone:()=>mx,conjugate:()=>ux,copy:()=>gx,create:()=>cu,dot:()=>ym,equals:()=>Mx,exactEquals:()=>wx,exp:()=>hm,fromEuler:()=>fx,fromMat3:()=>pm,fromValues:()=>px,getAngle:()=>nx,getAxisAngle:()=>rx,identity:()=>tx,invert:()=>dx,len:()=>_x,length:()=>bm,lerp:()=>vx,ln:()=>mm,mul:()=>xx,multiply:()=>fm,normalize:()=>du,pow:()=>lx,random:()=>cx,rotateX:()=>ix,rotateY:()=>ox,rotateZ:()=>ax,rotationTo:()=>Ax,scale:()=>gm,set:()=>yx,setAxes:()=>Lx,setAxisAngle:()=>um,slerp:()=>Ql,sqlerp:()=>Ex,sqrLen:()=>Sx,squaredLength:()=>xm,str:()=>hx});var L={};Ho(L,{add:()=>Jy,angle:()=>vb,bezier:()=>fb,ceil:()=>eb,clone:()=>Zy,copy:()=>jy,create:()=>Kl,cross:()=>ns,dist:()=>Tb,distance:()=>rm,div:()=>Lb,divide:()=>tm,dot:()=>rs,equals:()=>Mb,exactEquals:()=>wb,floor:()=>tb,forEach:()=>Pb,fromValues:()=>Yl,hermite:()=>ub,inverse:()=>lb,len:()=>Jd,length:()=>Qh,lerp:()=>cb,max:()=>nb,min:()=>rb,mul:()=>Eb,multiply:()=>em,negate:()=>sb,normalize:()=>Qd,random:()=>hb,rotateX:()=>yb,rotateY:()=>bb,rotateZ:()=>xb,round:()=>ib,scale:()=>ob,scaleAndAdd:()=>ab,set:()=>Qy,slerp:()=>db,sqrDist:()=>Rb,sqrLen:()=>Cb,squaredDistance:()=>nm,squaredLength:()=>im,str:()=>Sb,sub:()=>Ab,subtract:()=>Jh,transformMat3:()=>pb,transformMat4:()=>mb,transformQuat:()=>gb,zero:()=>_b});function Kl(){var t=new xe(3);return xe!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function Zy(t){var e=new xe(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function Qh(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}function Yl(t,e,r){var n=new xe(3);return n[0]=t,n[1]=e,n[2]=r,n}function jy(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function Qy(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}function Jy(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}function Jh(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}function em(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t}function tm(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}function eb(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}function tb(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}function rb(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t}function nb(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t}function ib(t,e){return t[0]=rn(e[0]),t[1]=rn(e[1]),t[2]=rn(e[2]),t}function ob(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}function ab(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t}function rm(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(r*r+n*n+i*i)}function nm(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return r*r+n*n+i*i}function im(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}function sb(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}function lb(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}function Qd(t,e){var r=e[0],n=e[1],i=e[2],o=r*r+n*n+i*i;return o>0&&(o=1/Math.sqrt(o)),t[0]=e[0]*o,t[1]=e[1]*o,t[2]=e[2]*o,t}function rs(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function ns(t,e,r){var n=e[0],i=e[1],o=e[2],a=r[0],s=r[1],c=r[2];return t[0]=i*c-o*s,t[1]=o*a-n*c,t[2]=n*s-i*a,t}function cb(t,e,r,n){var i=e[0],o=e[1],a=e[2];return t[0]=i+n*(r[0]-i),t[1]=o+n*(r[1]-o),t[2]=a+n*(r[2]-a),t}function db(t,e,r,n){var i=Math.acos(Math.min(Math.max(rs(e,r),-1),1)),o=Math.sin(i),a=Math.sin((1-n)*i)/o,s=Math.sin(n*i)/o;return t[0]=a*e[0]+s*r[0],t[1]=a*e[1]+s*r[1],t[2]=a*e[2]+s*r[2],t}function ub(t,e,r,n,i,o){var a=o*o,s=a*(2*o-3)+1,c=a*(o-2)+o,l=a*(o-1),d=a*(3-2*o);return t[0]=e[0]*s+r[0]*c+n[0]*l+i[0]*d,t[1]=e[1]*s+r[1]*c+n[1]*l+i[1]*d,t[2]=e[2]*s+r[2]*c+n[2]*l+i[2]*d,t}function fb(t,e,r,n,i,o){var a=1-o,s=a*a,c=o*o,l=s*a,d=3*o*s,f=3*c*a,u=c*o;return t[0]=e[0]*l+r[0]*d+n[0]*f+i[0]*u,t[1]=e[1]*l+r[1]*d+n[1]*f+i[1]*u,t[2]=e[2]*l+r[2]*d+n[2]*f+i[2]*u,t}function hb(t,e){e=e===void 0?1:e;var r=tr()*2*Math.PI,n=tr()*2-1,i=Math.sqrt(1-n*n)*e;return t[0]=Math.cos(r)*i,t[1]=Math.sin(r)*i,t[2]=n*e,t}function mb(t,e,r){var n=e[0],i=e[1],o=e[2],a=r[3]*n+r[7]*i+r[11]*o+r[15];return a=a||1,t[0]=(r[0]*n+r[4]*i+r[8]*o+r[12])/a,t[1]=(r[1]*n+r[5]*i+r[9]*o+r[13])/a,t[2]=(r[2]*n+r[6]*i+r[10]*o+r[14])/a,t}function pb(t,e,r){var n=e[0],i=e[1],o=e[2];return t[0]=n*r[0]+i*r[3]+o*r[6],t[1]=n*r[1]+i*r[4]+o*r[7],t[2]=n*r[2]+i*r[5]+o*r[8],t}function gb(t,e,r){var n=r[0],i=r[1],o=r[2],a=r[3],s=e[0],c=e[1],l=e[2],d=i*l-o*c,f=o*s-n*l,u=n*c-i*s;return d=d+d,f=f+f,u=u+u,t[0]=s+a*d+i*u-o*f,t[1]=c+a*f+o*d-n*u,t[2]=l+a*u+n*f-i*d,t}function yb(t,e,r,n){var i=[],o=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],o[0]=i[0],o[1]=i[1]*Math.cos(n)-i[2]*Math.sin(n),o[2]=i[1]*Math.sin(n)+i[2]*Math.cos(n),t[0]=o[0]+r[0],t[1]=o[1]+r[1],t[2]=o[2]+r[2],t}function bb(t,e,r,n){var i=[],o=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],o[0]=i[2]*Math.sin(n)+i[0]*Math.cos(n),o[1]=i[1],o[2]=i[2]*Math.cos(n)-i[0]*Math.sin(n),t[0]=o[0]+r[0],t[1]=o[1]+r[1],t[2]=o[2]+r[2],t}function xb(t,e,r,n){var i=[],o=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],o[0]=i[0]*Math.cos(n)-i[1]*Math.sin(n),o[1]=i[0]*Math.sin(n)+i[1]*Math.cos(n),o[2]=i[2],t[0]=o[0]+r[0],t[1]=o[1]+r[1],t[2]=o[2]+r[2],t}function vb(t,e){var r=t[0],n=t[1],i=t[2],o=e[0],a=e[1],s=e[2],c=Math.sqrt((r*r+n*n+i*i)*(o*o+a*a+s*s)),l=c&&rs(t,e)/c;return Math.acos(Math.min(Math.max(l,-1),1))}function _b(t){return t[0]=0,t[1]=0,t[2]=0,t}function Sb(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"}function wb(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}function Mb(t,e){var r=t[0],n=t[1],i=t[2],o=e[0],a=e[1],s=e[2];return Math.abs(r-o)<=q*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(n-a)<=q*Math.max(1,Math.abs(n),Math.abs(a))&&Math.abs(i-s)<=q*Math.max(1,Math.abs(i),Math.abs(s))}var Ab=Jh,Eb=em,Lb=tm,Tb=rm,Rb=nm,Jd=Qh,Cb=im,Pb=(function(){var t=Kl();return function(e,r,n,i,o,a){var s,c;for(r||(r=3),n||(n=0),i?c=Math.min(i*r+n,e.length):c=e.length,s=n;s<c;s+=r)t[0]=e[s],t[1]=e[s+1],t[2]=e[s+2],o(t,t,a),e[s]=t[0],e[s+1]=t[1],e[s+2]=t[2];return e}})();var yo={};Ho(yo,{add:()=>iu,ceil:()=>Ib,clone:()=>eu,copy:()=>ru,create:()=>om,cross:()=>Nb,dist:()=>Zb,distance:()=>cm,div:()=>qb,divide:()=>lm,dot:()=>jl,equals:()=>$b,exactEquals:()=>lu,floor:()=>Bb,forEach:()=>ex,fromValues:()=>tu,inverse:()=>Ub,len:()=>Qb,length:()=>ql,lerp:()=>su,max:()=>kb,min:()=>Fb,mul:()=>Yb,multiply:()=>sm,negate:()=>Ob,normalize:()=>au,random:()=>Hb,round:()=>Db,scale:()=>ou,scaleAndAdd:()=>zb,set:()=>nu,sqrDist:()=>jb,sqrLen:()=>Jb,squaredDistance:()=>dm,squaredLength:()=>Zl,str:()=>Xb,sub:()=>Kb,subtract:()=>am,transformMat4:()=>Vb,transformQuat:()=>Gb,zero:()=>Wb});function om(){var t=new xe(4);return xe!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}function eu(t){var e=new xe(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}function tu(t,e,r,n){var i=new xe(4);return i[0]=t,i[1]=e,i[2]=r,i[3]=n,i}function ru(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function nu(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t}function iu(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t}function am(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t}function sm(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t[3]=e[3]*r[3],t}function lm(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t[3]=e[3]/r[3],t}function Ib(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t[3]=Math.ceil(e[3]),t}function Bb(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t[3]=Math.floor(e[3]),t}function Fb(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t[3]=Math.min(e[3],r[3]),t}function kb(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t[3]=Math.max(e[3],r[3]),t}function Db(t,e){return t[0]=rn(e[0]),t[1]=rn(e[1]),t[2]=rn(e[2]),t[3]=rn(e[3]),t}function ou(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t}function zb(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t}function cm(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],o=e[3]-t[3];return Math.sqrt(r*r+n*n+i*i+o*o)}function dm(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],o=e[3]-t[3];return r*r+n*n+i*i+o*o}function ql(t){var e=t[0],r=t[1],n=t[2],i=t[3];return Math.sqrt(e*e+r*r+n*n+i*i)}function Zl(t){var e=t[0],r=t[1],n=t[2],i=t[3];return e*e+r*r+n*n+i*i}function Ob(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t}function Ub(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t[3]=1/e[3],t}function au(t,e){var r=e[0],n=e[1],i=e[2],o=e[3],a=r*r+n*n+i*i+o*o;return a>0&&(a=1/Math.sqrt(a)),t[0]=r*a,t[1]=n*a,t[2]=i*a,t[3]=o*a,t}function jl(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}function Nb(t,e,r,n){var i=r[0]*n[1]-r[1]*n[0],o=r[0]*n[2]-r[2]*n[0],a=r[0]*n[3]-r[3]*n[0],s=r[1]*n[2]-r[2]*n[1],c=r[1]*n[3]-r[3]*n[1],l=r[2]*n[3]-r[3]*n[2],d=e[0],f=e[1],u=e[2],h=e[3];return t[0]=f*l-u*c+h*s,t[1]=-(d*l)+u*a-h*o,t[2]=d*c-f*a+h*i,t[3]=-(d*s)+f*o-u*i,t}function su(t,e,r,n){var i=e[0],o=e[1],a=e[2],s=e[3];return t[0]=i+n*(r[0]-i),t[1]=o+n*(r[1]-o),t[2]=a+n*(r[2]-a),t[3]=s+n*(r[3]-s),t}function Hb(t,e){e=e===void 0?1:e;var r,n,i,o,a,s,c;c=tr(),r=c*2-1,n=(4*tr()-2)*Math.sqrt(c*-c+c),a=r*r+n*n,c=tr(),i=c*2-1,o=(4*tr()-2)*Math.sqrt(c*-c+c),s=i*i+o*o;var l=Math.sqrt((1-a)/s);return t[0]=e*r,t[1]=e*n,t[2]=e*i*l,t[3]=e*o*l,t}function Vb(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*o+r[12]*a,t[1]=r[1]*n+r[5]*i+r[9]*o+r[13]*a,t[2]=r[2]*n+r[6]*i+r[10]*o+r[14]*a,t[3]=r[3]*n+r[7]*i+r[11]*o+r[15]*a,t}function Gb(t,e,r){var n=r[0],i=r[1],o=r[2],a=r[3],s=e[0],c=e[1],l=e[2],d=i*l-o*c,f=o*s-n*l,u=n*c-i*s;return d=d+d,f=f+f,u=u+u,t[0]=s+a*d+i*u-o*f,t[1]=c+a*f+o*d-n*u,t[2]=l+a*u+n*f-i*d,t[3]=e[3],t}function Wb(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t}function Xb(t){return"vec4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"}function lu(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]}function $b(t,e){var r=t[0],n=t[1],i=t[2],o=t[3],a=e[0],s=e[1],c=e[2],l=e[3];return Math.abs(r-a)<=q*Math.max(1,Math.abs(r),Math.abs(a))&&Math.abs(n-s)<=q*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(i-c)<=q*Math.max(1,Math.abs(i),Math.abs(c))&&Math.abs(o-l)<=q*Math.max(1,Math.abs(o),Math.abs(l))}var Kb=am,Yb=sm,qb=lm,Zb=cm,jb=dm,Qb=ql,Jb=Zl,ex=(function(){var t=om();return function(e,r,n,i,o,a){var s,c;for(r||(r=4),n||(n=0),i?c=Math.min(i*r+n,e.length):c=e.length,s=n;s<c;s+=r)t[0]=e[s],t[1]=e[s+1],t[2]=e[s+2],t[3]=e[s+3],o(t,t,a),e[s]=t[0],e[s+1]=t[1],e[s+2]=t[2],e[s+3]=t[3];return e}})();function cu(){var t=new xe(4);return xe!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t[3]=1,t}function tx(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t}function um(t,e,r){r=r*.5;var n=Math.sin(r);return t[0]=n*e[0],t[1]=n*e[1],t[2]=n*e[2],t[3]=Math.cos(r),t}function rx(t,e){var r=Math.acos(e[3])*2,n=Math.sin(r/2);return n>q?(t[0]=e[0]/n,t[1]=e[1]/n,t[2]=e[2]/n):(t[0]=1,t[1]=0,t[2]=0),r}function nx(t,e){var r=ym(t,e);return Math.acos(2*r*r-1)}function fm(t,e,r){var n=e[0],i=e[1],o=e[2],a=e[3],s=r[0],c=r[1],l=r[2],d=r[3];return t[0]=n*d+a*s+i*l-o*c,t[1]=i*d+a*c+o*s-n*l,t[2]=o*d+a*l+n*c-i*s,t[3]=a*d-n*s-i*c-o*l,t}function ix(t,e,r){r*=.5;var n=e[0],i=e[1],o=e[2],a=e[3],s=Math.sin(r),c=Math.cos(r);return t[0]=n*c+a*s,t[1]=i*c+o*s,t[2]=o*c-i*s,t[3]=a*c-n*s,t}function ox(t,e,r){r*=.5;var n=e[0],i=e[1],o=e[2],a=e[3],s=Math.sin(r),c=Math.cos(r);return t[0]=n*c-o*s,t[1]=i*c+a*s,t[2]=o*c+n*s,t[3]=a*c-i*s,t}function ax(t,e,r){r*=.5;var n=e[0],i=e[1],o=e[2],a=e[3],s=Math.sin(r),c=Math.cos(r);return t[0]=n*c+i*s,t[1]=i*c-n*s,t[2]=o*c+a*s,t[3]=a*c-o*s,t}function sx(t,e){var r=e[0],n=e[1],i=e[2];return t[0]=r,t[1]=n,t[2]=i,t[3]=Math.sqrt(Math.abs(1-r*r-n*n-i*i)),t}function hm(t,e){var r=e[0],n=e[1],i=e[2],o=e[3],a=Math.sqrt(r*r+n*n+i*i),s=Math.exp(o),c=a>0?s*Math.sin(a)/a:0;return t[0]=r*c,t[1]=n*c,t[2]=i*c,t[3]=s*Math.cos(a),t}function mm(t,e){var r=e[0],n=e[1],i=e[2],o=e[3],a=Math.sqrt(r*r+n*n+i*i),s=a>0?Math.atan2(a,o)/a:0;return t[0]=r*s,t[1]=n*s,t[2]=i*s,t[3]=.5*Math.log(r*r+n*n+i*i+o*o),t}function lx(t,e,r){return mm(t,e),gm(t,t,r),hm(t,t),t}function Ql(t,e,r,n){var i=e[0],o=e[1],a=e[2],s=e[3],c=r[0],l=r[1],d=r[2],f=r[3],u,h,m,g,p;return h=i*c+o*l+a*d+s*f,h<0&&(h=-h,c=-c,l=-l,d=-d,f=-f),1-h>q?(u=Math.acos(h),m=Math.sin(u),g=Math.sin((1-n)*u)/m,p=Math.sin(n*u)/m):(g=1-n,p=n),t[0]=g*i+p*c,t[1]=g*o+p*l,t[2]=g*a+p*d,t[3]=g*s+p*f,t}function cx(t){var e=tr(),r=tr(),n=tr(),i=Math.sqrt(1-e),o=Math.sqrt(e);return t[0]=i*Math.sin(2*Math.PI*r),t[1]=i*Math.cos(2*Math.PI*r),t[2]=o*Math.sin(2*Math.PI*n),t[3]=o*Math.cos(2*Math.PI*n),t}function dx(t,e){var r=e[0],n=e[1],i=e[2],o=e[3],a=r*r+n*n+i*i+o*o,s=a?1/a:0;return t[0]=-r*s,t[1]=-n*s,t[2]=-i*s,t[3]=o*s,t}function ux(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=e[3],t}function pm(t,e){var r=e[0]+e[4]+e[8],n;if(r>0)n=Math.sqrt(r+1),t[3]=.5*n,n=.5/n,t[0]=(e[5]-e[7])*n,t[1]=(e[6]-e[2])*n,t[2]=(e[1]-e[3])*n;else{var i=0;e[4]>e[0]&&(i=1),e[8]>e[i*3+i]&&(i=2);var o=(i+1)%3,a=(i+2)%3;n=Math.sqrt(e[i*3+i]-e[o*3+o]-e[a*3+a]+1),t[i]=.5*n,n=.5/n,t[3]=(e[o*3+a]-e[a*3+o])*n,t[o]=(e[o*3+i]+e[i*3+o])*n,t[a]=(e[a*3+i]+e[i*3+a])*n}return t}function fx(t,e,r,n){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:Gh,o=Math.PI/360;e*=o,n*=o,r*=o;var a=Math.sin(e),s=Math.cos(e),c=Math.sin(r),l=Math.cos(r),d=Math.sin(n),f=Math.cos(n);switch(i){case"xyz":t[0]=a*l*f+s*c*d,t[1]=s*c*f-a*l*d,t[2]=s*l*d+a*c*f,t[3]=s*l*f-a*c*d;break;case"xzy":t[0]=a*l*f-s*c*d,t[1]=s*c*f-a*l*d,t[2]=s*l*d+a*c*f,t[3]=s*l*f+a*c*d;break;case"yxz":t[0]=a*l*f+s*c*d,t[1]=s*c*f-a*l*d,t[2]=s*l*d-a*c*f,t[3]=s*l*f+a*c*d;break;case"yzx":t[0]=a*l*f+s*c*d,t[1]=s*c*f+a*l*d,t[2]=s*l*d-a*c*f,t[3]=s*l*f-a*c*d;break;case"zxy":t[0]=a*l*f-s*c*d,t[1]=s*c*f+a*l*d,t[2]=s*l*d+a*c*f,t[3]=s*l*f-a*c*d;break;case"zyx":t[0]=a*l*f-s*c*d,t[1]=s*c*f+a*l*d,t[2]=s*l*d-a*c*f,t[3]=s*l*f+a*c*d;break;default:throw new Error("Unknown angle order "+i)}return t}function hx(t){return"quat("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"}var mx=eu,px=tu,gx=ru,yx=nu,bx=iu,xx=fm,gm=ou,ym=jl,vx=su,bm=ql,_x=bm,xm=Zl,Sx=xm,du=au,wx=lu;function Mx(t,e){return Math.abs(jl(t,e))>=1-q}var Ax=(function(){var t=Kl(),e=Yl(1,0,0),r=Yl(0,1,0);return function(n,i,o){var a=rs(i,o);return a<-.999999?(ns(t,e,i),Jd(t)<1e-6&&ns(t,r,i),Qd(t,t),um(n,t,Math.PI),n):a>.999999?(n[0]=0,n[1]=0,n[2]=0,n[3]=1,n):(ns(t,i,o),n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=1+a,du(n,n))}})(),Ex=(function(){var t=cu(),e=cu();return function(r,n,i,o,a,s){return Ql(t,n,a,s),Ql(e,i,o,s),Ql(r,t,e,2*s*(1-s)),r}})(),Lx=(function(){var t=Wh();return function(e,r,n,i){return t[0]=n[0],t[3]=n[1],t[6]=n[2],t[1]=i[0],t[4]=i[1],t[7]=i[2],t[2]=-r[0],t[5]=-r[1],t[8]=-r[2],du(e,pm(e,t))}})();var ec=class{constructor(e,r){this._position=L.create();this._angles=L.create();this._bobAngles=L.create();this._bobOffset=L.create();this._kickAngles=L.create();this._rollAngle=0;this._fov=90;this._aspect=1;this._near=.1;this._far=1e3;this._viewMatrix=I.create();this._projectionMatrix=I.create();this._viewProjectionMatrix=I.create();this._dirty=!0;e!==void 0&&r!==void 0&&r>0&&(this._aspect=e/r)}get position(){return this._position}set position(e){L.equals(this._position,e)||(L.copy(this._position,e),this._dirty=!0,this.triggerMoveEvent())}get angles(){return this._angles}set angles(e){L.equals(this._angles,e)||(L.copy(this._angles,e),this._dirty=!0,this.triggerMoveEvent())}get bobAngles(){return this._bobAngles}set bobAngles(e){L.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){L.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){L.copy(this._bobOffset,e),this._dirty=!0}get rollAngle(){return this._rollAngle}set rollAngle(e){this._rollAngle=e,this._dirty=!0}get fov(){return this._fov}set fov(e){this._fov=e,this._dirty=!0}get aspect(){return this._aspect}set aspect(e){this._aspect=e,this._dirty=!0}toState(){return{position:L.clone(this._position),angles:L.clone(this._angles),fov:this._fov,aspect:this._aspect,near:this._near,far:this._far}}setPosition(e,r,n){let i=L.fromValues(e,r,n);L.equals(this._position,i)||(L.copy(this._position,i),this._dirty=!0,this.triggerMoveEvent())}setRotation(e,r,n){let i=L.fromValues(e,r,n);L.equals(this._angles,i)||(L.copy(this._angles,i),this._dirty=!0,this.triggerMoveEvent())}setFov(e){this.fov=e}setAspectRatio(e){this.aspect=e}lookAt(e){let r=L.create();if(L.subtract(r,e,this._position),L.length(r)<.001)return;let i=Math.atan2(r[1],r[0])*Vc,o=Math.hypot(r[0],r[1]),a=-Math.atan2(r[2],o)*Vc;this.setRotation(a,i,0)}triggerMoveEvent(){this.onCameraMove&&this.onCameraMove({position:L.clone(this._position),angles:L.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(e){let r=I.create();return I.perspective(r,e*Ee,this._aspect,this._near,this._far),r}screenToWorldRay(e,r){let n=e*2-1,i=1-r*2,o=L.fromValues(n,i,-1),a=L.fromValues(n,i,1),s=I.create();I.invert(s,this.viewProjectionMatrix);let c=L.create(),l=L.create();L.transformMat4(c,o,s),L.transformMat4(l,a,s);let d=L.create();return L.subtract(d,l,c),L.normalize(d,d),{origin:L.clone(this._position),direction:d}}updateMatrices(){if(!this._dirty)return;I.perspective(this._projectionMatrix,this._fov*Ee,this._aspect,this._near,this._far);let e=I.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,o=r*Ee,a=n*Ee,s=i*Ee,c=I.create();I.identity(c),I.rotateZ(c,c,-a),I.rotateY(c,c,-o),I.rotateX(c,c,-s);let l=I.create();I.multiply(l,e,c);let d=L.add(L.create(),this._position,this._bobOffset),f=L.negate(L.create(),d),u=L.create();L.transformMat4(u,f,c);let h=L.fromValues(u[1]?-u[1]:0,u[2]||0,u[0]?-u[0]:0);I.copy(this._viewMatrix,l),this._viewMatrix[12]=h[0],this._viewMatrix[13]=h[1],this._viewMatrix[14]=h[2],I.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var Tx=[.2,.2,.2],Rx={x:0,y:0,z:1},Cx=[.8,.8,.8];function uu(t,e,r){return t+(e-t)*r}function xo(t,e,r){return{x:uu(t.x,e.x,r),y:uu(t.y,e.y,r),z:uu(t.z,e.z,r)}}function bo(t){return t<0?0:t>1?1:t}function fu(t){let e=[],r=[];for(let n of t.triangles){let i=e.length,[o,a,s]=n.indices,c=t.texCoords[o],l=t.texCoords[a],d=t.texCoords[s];if(!c||!l||!d)throw new Error(`Missing texCoord for triangle in surface ${t.name}`);e.push({vertexIndex:o,texCoord:[c.s,1-c.t]},{vertexIndex:a,texCoord:[l.s,1-l.t]},{vertexIndex:s,texCoord:[d.s,1-d.t]}),r.push(i,i+1,i+2)}return{vertices:e,indices:new Uint16Array(r)}}function Px(t,e,r){let n=r?.ambient??Tx,i=r?.directional??{direction:Rx,color:Cx},o=Vr(t),a=Vr(i.direction),s=bo(o.x*a.x+o.y*a.y+o.z*a.z),c=n[0]+i.color[0]*s,l=n[1]+i.color[1]*s,d=n[2]+i.color[2]*s;if(r?.dynamicLights){let f=r.modelMatrix?bf(r.modelMatrix,e):e;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,x=Math.sqrt(p),b=x>0?bo(-(h*o.x+m*o.y+g*o.z)/x):0,_=bo(v*b);c+=u.color[0]*_,l+=u.color[1]*_,d+=u.color[2]*_}}}return[bo(c),bo(l),bo(d)]}function hu(t,e,r,n){let i=t.vertices[r.frame0],o=t.vertices[r.frame1];if(!i||!o)throw new Error("Requested MD3 frames are out of range");let a=new Float32Array(e.vertices.length*12);return e.vertices.forEach((s,c)=>{let l=i[s.vertexIndex],d=o[s.vertexIndex];if(!l||!d)throw new Error(`Vertex index ${s.vertexIndex} missing for frame`);let f=xo(l.position,d.position,r.lerp),u=Vr(xo(l.normal,d.normal,r.lerp)),h=Px(u,f,n),m=c*12;a[m]=f.x,a[m+1]=f.y,a[m+2]=f.z,a[m+3]=u.x,a[m+4]=u.y,a[m+5]=u.z,a[m+6]=s.texCoord[0],a[m+7]=s.texCoord[1],a[m+8]=h[0],a[m+9]=h[1],a[m+10]=h[2],a[m+11]=1}),a}function vm(t,e,r){let n=t.tags[0];if(!n)return null;let i=n.findIndex(g=>g.name===r);if(i===-1)return null;let o=t.tags[e.frame0]?.[i],a=t.tags[e.frame1]?.[i];if(!o||!a)throw new Error(`Tag ${r} is missing for one of the interpolated frames`);let s=xo(o.origin,a.origin,e.lerp),c=Vr(xo(o.axis[0],a.axis[0],e.lerp)),l=Vr(xo(o.axis[1],a.axis[1],e.lerp)),d=Vr(xo(o.axis[2],a.axis[2],e.lerp)),f=c,u=Vr({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=Vr({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:s,axis:m,matrix:xf(s,m)}}var mu=`#version 300 es
480
480
  precision highp float;
481
481
 
482
482
  layout(location = 0) in vec3 a_position;
@@ -495,7 +495,7 @@ void main() {
495
495
  v_color = a_color;
496
496
  v_position = a_position; // Model space, assuming single mesh pass
497
497
  gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
498
- }`,du=`#version 300 es
498
+ }`,pu=`#version 300 es
499
499
  precision highp float;
500
500
 
501
501
  in vec2 v_texCoord;
@@ -551,7 +551,7 @@ void main() {
551
551
  }
552
552
 
553
553
  o_color = finalColor;
554
- }`,is=class{constructor(e,r,n,i){this.gl=e,this.geometry=su(r),this.vertexBuffer=new Ae(e,e.STATIC_DRAW),this.indexBuffer=new Qe(e,e.STATIC_DRAW),this.vertexArray=new Ee(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:48,offset:0},{index:1,size:3,type:e.FLOAT,stride:48,offset:12},{index:2,size:2,type:e.FLOAT,stride:48,offset:24},{index:3,size:4,type:e.FLOAT,stride:48,offset:32}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(r,n,i)}update(e,r,n){let i=lu(e,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()}},xa=class{constructor(e,r,n,i){this.surfaces=new Map;this.gl=e,this.model=r,this.blend=n,this.lighting=i,r.surfaces.forEach(a=>{this.surfaces.set(a.name,new is(e,a,n,i))})}update(e,r){this.blend=e,this.lighting=r??this.lighting;for(let n of this.model.surfaces)this.surfaces.get(n.name)?.update(n,e,this.lighting)}dispose(){for(let e of this.surfaces.values())e.dispose();this.surfaces.clear()}},va=class{constructor(e){this.gl=e,this.program=le.create(e,{vertex:cu,fragment:du},{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"),this.uniformBrightness=this.program.getUniformLocation("u_brightness"),this.uniformGamma=this.program.getUniformLocation("u_gamma"),this.uniformFullbright=this.program.getUniformLocation("u_fullbright"),this.uniformGlobalAmbient=this.program.getUniformLocation("u_globalAmbient")}get shaderSize(){return this.program.sourceSize}bind(e,r=[1,1,1,1],n=0){this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,e),this.gl.uniform4fv(this.uniformTint,new Float32Array(r)),this.gl.uniform1i(this.uniformDiffuse,n),this.gl.uniform1i(this.uniformRenderMode,0),this.gl.uniform4f(this.uniformSolidColor,1,1,1,1)}drawSurface(e,r){let n=r?.diffuseSampler??0,i=r?.tint??[1,1,1,1],a=r?.renderMode,o=r?.brightness??1,s=r?.gamma??1,c=r?.fullbright??!1,l=r?.globalAmbient??0;this.gl.uniform4fv(this.uniformTint,new Float32Array(i)),this.gl.uniform1i(this.uniformDiffuse,n);let d=0,f=[1,1,1,1];if(a&&(a.mode==="solid"||a.mode==="wireframe"?d=1:a.mode==="solid-faceted"&&(d=2),a.color&&(f=[...a.color])),this.gl.uniform1i(this.uniformRenderMode,d),this.gl.uniform4f(this.uniformSolidColor,f[0],f[1],f[2],f[3]),this.gl.uniform1f(this.uniformBrightness,o),this.gl.uniform1f(this.uniformGamma,s),this.gl.uniform1i(this.uniformFullbright,c?1:0),this.gl.uniform1f(this.uniformGlobalAmbient,l),e.vertexArray.bind(),a&&a.mode==="wireframe"){if(!e.wireframeIndexBuffer){e.wireframeIndexBuffer=new Qe(this.gl,this.gl.STATIC_DRAW);let u=ua(e.geometry.indices);e.wireframeIndexBuffer.upload(u),e.wireframeIndexCount=u.length}e.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,e.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else e.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var wx=[1,1,1,1],_a=class{constructor(e,r){this.maxParticles=e,this.rng=r,this.alive=new Uint8Array(e),this.positionX=new Float32Array(e),this.positionY=new Float32Array(e),this.positionZ=new Float32Array(e),this.velocityX=new Float32Array(e),this.velocityY=new Float32Array(e),this.velocityZ=new Float32Array(e),this.colorR=new Float32Array(e),this.colorG=new Float32Array(e),this.colorB=new Float32Array(e),this.colorA=new Float32Array(e),this.size=new Float32Array(e),this.lifetime=new Float32Array(e),this.remaining=new Float32Array(e),this.gravity=new Float32Array(e),this.damping=new Float32Array(e),this.bounce=new Float32Array(e),this.fade=new Uint8Array(e),this.blendMode=new Uint8Array(e),this.textureIndex=new Int16Array(e)}spawn(e){let r=this.findFreeSlot();if(r===-1)return null;let n=e.color??wx,i=e.velocity??{x:0,y:0,z:0};return this.alive[r]=1,this.positionX[r]=e.position.x,this.positionY[r]=e.position.y,this.positionZ[r]=e.position.z,this.velocityX[r]=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]=e.size??2.5,this.lifetime[r]=e.lifetime,this.remaining[r]=e.lifetime,this.gravity[r]=e.gravity??800,this.damping[r]=e.damping??0,this.bounce[r]=e.bounce??.25,this.fade[r]=e.fade?1:0,this.blendMode[r]=e.blendMode==="additive"?1:0,this.textureIndex[r]=e.textureIndex??0,r}update(e,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]-=e,this.remaining[i]<=0){this.alive[i]=0;continue}let a=Math.max(0,1-this.damping[i]*e);this.velocityX[i]*=a,this.velocityY[i]*=a,this.velocityZ[i]=this.velocityZ[i]*a-this.gravity[i]*e,this.positionX[i]+=this.velocityX[i]*e,this.positionY[i]+=this.velocityY[i]*e,this.positionZ[i]+=this.velocityZ[i]*e,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 e=0;for(let r=0;r<this.maxParticles;r+=1)this.alive[r]&&(e+=1);return e}getState(e){return{alive:this.alive[e]===1,position:{x:this.positionX[e],y:this.positionY[e],z:this.positionZ[e]},velocity:{x:this.velocityX[e],y:this.velocityY[e],z:this.velocityZ[e]},remaining:this.remaining[e],color:[this.colorR[e],this.colorG[e],this.colorB[e],this.colorA[e]],size:this.size[e],blendMode:this.blendMode[e]===1?"additive":"alpha",textureIndex:this.textureIndex[e]}}buildMesh(e,r){let n=[],i=[],a=[],o=s=>{let c=i.length,l=0;for(let d=0;d<this.maxParticles;d+=1){if(!this.alive[d]||(s==="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,v=this.colorA[d]*h,x=this.positionX[d],b=this.positionY[d],_=this.positionZ[d],w=e.x*u,S=e.y*u,E=e.z*u,L=r.x*u,M=r.y*u,C=r.z*u,I=[{x:x-w-L,y:b-S-M,z:_-E-C},{x:x+w-L,y:b+S-M,z:_+E-C},{x:x-w+L,y:b-S+M,z:_-E+C},{x:x+w+L,y:b+S+M,z:_+E+C}],B=[[0,1],[1,1],[0,0],[1,0]];I.forEach((F,U)=>{n.push(F.x,F.y,F.z,B[U]?.[0]??0,B[U]?.[1]??0,g,p,y,v)}),i.push(f,f+1,f+2,f+2,f+1,f+3)}l>0&&a.push({blendMode:s,start:c,count:i.length-c})};return o("alpha"),o("additive"),{vertices:new Float32Array(n),indices:new Uint16Array(i),batches:a}}findFreeSlot(){for(let e=0;e<this.maxParticles;e+=1)if(!this.alive[e])return e;return-1}},uu=`#version 300 es
554
+ }`,is=class{constructor(e,r,n,i){this.gl=e,this.geometry=fu(r),this.vertexBuffer=new Ae(e,e.STATIC_DRAW),this.indexBuffer=new Je(e,e.STATIC_DRAW),this.vertexArray=new Le(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:48,offset:0},{index:1,size:3,type:e.FLOAT,stride:48,offset:12},{index:2,size:2,type:e.FLOAT,stride:48,offset:24},{index:3,size:4,type:e.FLOAT,stride:48,offset:32}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(r,n,i)}update(e,r,n){let i=hu(e,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()}},vo=class{constructor(e,r,n,i){this.surfaces=new Map;this.gl=e,this.model=r,this.blend=n,this.lighting=i,r.surfaces.forEach(o=>{this.surfaces.set(o.name,new is(e,o,n,i))})}update(e,r){this.blend=e,this.lighting=r??this.lighting;for(let n of this.model.surfaces)this.surfaces.get(n.name)?.update(n,e,this.lighting)}dispose(){for(let e of this.surfaces.values())e.dispose();this.surfaces.clear()}},_o=class{constructor(e){this.gl=e,this.program=le.create(e,{vertex:mu,fragment:pu},{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"),this.uniformBrightness=this.program.getUniformLocation("u_brightness"),this.uniformGamma=this.program.getUniformLocation("u_gamma"),this.uniformFullbright=this.program.getUniformLocation("u_fullbright"),this.uniformGlobalAmbient=this.program.getUniformLocation("u_globalAmbient")}get shaderSize(){return this.program.sourceSize}bind(e,r=[1,1,1,1],n=0){this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,e),this.gl.uniform4fv(this.uniformTint,new Float32Array(r)),this.gl.uniform1i(this.uniformDiffuse,n),this.gl.uniform1i(this.uniformRenderMode,0),this.gl.uniform4f(this.uniformSolidColor,1,1,1,1)}drawSurface(e,r){let n=r?.diffuseSampler??0,i=r?.tint??[1,1,1,1],o=r?.renderMode,a=r?.brightness??1,s=r?.gamma??1,c=r?.fullbright??!1,l=r?.globalAmbient??0;this.gl.uniform4fv(this.uniformTint,new Float32Array(i)),this.gl.uniform1i(this.uniformDiffuse,n);let d=0,f=[1,1,1,1];if(o&&(o.mode==="solid"||o.mode==="wireframe"?d=1:o.mode==="solid-faceted"&&(d=2),o.color&&(f=[...o.color])),this.gl.uniform1i(this.uniformRenderMode,d),this.gl.uniform4f(this.uniformSolidColor,f[0],f[1],f[2],f[3]),this.gl.uniform1f(this.uniformBrightness,a),this.gl.uniform1f(this.uniformGamma,s),this.gl.uniform1i(this.uniformFullbright,c?1:0),this.gl.uniform1f(this.uniformGlobalAmbient,l),e.vertexArray.bind(),o&&o.mode==="wireframe"){if(!e.wireframeIndexBuffer){e.wireframeIndexBuffer=new Je(this.gl,this.gl.STATIC_DRAW);let u=fo(e.geometry.indices);e.wireframeIndexBuffer.upload(u),e.wireframeIndexCount=u.length}e.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,e.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else e.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var Ix=[1,1,1,1],So=class{constructor(e,r){this.maxParticles=e,this.rng=r,this.alive=new Uint8Array(e),this.positionX=new Float32Array(e),this.positionY=new Float32Array(e),this.positionZ=new Float32Array(e),this.velocityX=new Float32Array(e),this.velocityY=new Float32Array(e),this.velocityZ=new Float32Array(e),this.colorR=new Float32Array(e),this.colorG=new Float32Array(e),this.colorB=new Float32Array(e),this.colorA=new Float32Array(e),this.size=new Float32Array(e),this.lifetime=new Float32Array(e),this.remaining=new Float32Array(e),this.gravity=new Float32Array(e),this.damping=new Float32Array(e),this.bounce=new Float32Array(e),this.fade=new Uint8Array(e),this.blendMode=new Uint8Array(e),this.textureIndex=new Int16Array(e)}spawn(e){let r=this.findFreeSlot();if(r===-1)return null;let n=e.color??Ix,i=e.velocity??{x:0,y:0,z:0};return this.alive[r]=1,this.positionX[r]=e.position.x,this.positionY[r]=e.position.y,this.positionZ[r]=e.position.z,this.velocityX[r]=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]=e.size??2.5,this.lifetime[r]=e.lifetime,this.remaining[r]=e.lifetime,this.gravity[r]=e.gravity??800,this.damping[r]=e.damping??0,this.bounce[r]=e.bounce??.25,this.fade[r]=e.fade?1:0,this.blendMode[r]=e.blendMode==="additive"?1:0,this.textureIndex[r]=e.textureIndex??0,r}update(e,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]-=e,this.remaining[i]<=0){this.alive[i]=0;continue}let o=Math.max(0,1-this.damping[i]*e);this.velocityX[i]*=o,this.velocityY[i]*=o,this.velocityZ[i]=this.velocityZ[i]*o-this.gravity[i]*e,this.positionX[i]+=this.velocityX[i]*e,this.positionY[i]+=this.velocityY[i]*e,this.positionZ[i]+=this.velocityZ[i]*e,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 e=0;for(let r=0;r<this.maxParticles;r+=1)this.alive[r]&&(e+=1);return e}getState(e){return{alive:this.alive[e]===1,position:{x:this.positionX[e],y:this.positionY[e],z:this.positionZ[e]},velocity:{x:this.velocityX[e],y:this.velocityY[e],z:this.velocityZ[e]},remaining:this.remaining[e],color:[this.colorR[e],this.colorG[e],this.colorB[e],this.colorA[e]],size:this.size[e],blendMode:this.blendMode[e]===1?"additive":"alpha",textureIndex:this.textureIndex[e]}}buildMesh(e,r){let n=[],i=[],o=[],a=s=>{let c=i.length,l=0;for(let d=0;d<this.maxParticles;d+=1){if(!this.alive[d]||(s==="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,v=this.colorA[d]*h,x=this.positionX[d],b=this.positionY[d],_=this.positionZ[d],w=e.x*u,S=e.y*u,E=e.z*u,T=r.x*u,M=r.y*u,C=r.z*u,B=[{x:x-w-T,y:b-S-M,z:_-E-C},{x:x+w-T,y:b+S-M,z:_+E-C},{x:x-w+T,y:b-S+M,z:_-E+C},{x:x+w+T,y:b+S+M,z:_+E+C}],F=[[0,1],[1,1],[0,0],[1,0]];B.forEach((k,N)=>{n.push(k.x,k.y,k.z,F[N]?.[0]??0,F[N]?.[1]??0,g,p,y,v)}),i.push(f,f+1,f+2,f+2,f+1,f+3)}l>0&&o.push({blendMode:s,start:c,count:i.length-c})};return a("alpha"),a("additive"),{vertices:new Float32Array(n),indices:new Uint16Array(i),batches:o}}findFreeSlot(){for(let e=0;e<this.maxParticles;e+=1)if(!this.alive[e])return e;return-1}},gu=`#version 300 es
555
555
  precision highp float;
556
556
 
557
557
  layout(location = 0) in vec3 a_position;
@@ -567,7 +567,7 @@ void main() {
567
567
  v_uv = a_uv;
568
568
  v_color = a_color;
569
569
  gl_Position = u_viewProjection * vec4(a_position, 1.0);
570
- }`,fu=`#version 300 es
570
+ }`,yu=`#version 300 es
571
571
  precision highp float;
572
572
 
573
573
  in vec2 v_uv;
@@ -579,7 +579,7 @@ void main() {
579
579
  float dist = distance(v_uv, vec2(0.5));
580
580
  float alpha = v_color.a * (1.0 - smoothstep(0.35, 0.5, dist));
581
581
  o_color = vec4(v_color.rgb, alpha);
582
- }`,Sa=class{constructor(e,r){this.vertexCapacity=0;this.indexCapacity=0;this.gl=e,this.system=r,this.program=le.create(e,{vertex:uu,fragment:fu}),this.vertexBuffer=new Ae(e,e.DYNAMIC_DRAW),this.indexBuffer=new Qe(e,e.DYNAMIC_DRAW),this.vertexArray=new Ee(e),this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:36,offset:0},{index:1,size:2,type:e.FLOAT,stride:36,offset:12},{index:2,size:4,type:e.FLOAT,stride:36,offset:20}],this.vertexBuffer)}get shaderSize(){return this.program.sourceSize}render(e){let r=this.system.buildMesh(e.viewRight,e.viewUp);if(r.indices.length===0)return;let n=r.vertices;r.vertices.byteLength>this.vertexCapacity?(this.vertexCapacity=r.vertices.byteLength,this.vertexBuffer.upload(n,this.gl.DYNAMIC_DRAW)):this.vertexBuffer.update(n);let 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 a=this.program.getUniformLocation("u_viewProjection");this.gl.uniformMatrix4fv(a,!1,e.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 pm(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1}}=t;for(let i=0;i<12;i+=1){let a=200+e.rng.frandom()*180,o=e.rng.frandom()*.35;e.spawn({position:r,velocity:{x:n.x*a+(e.rng.frandom()-.5)*80,y:n.y*a+(e.rng.frandom()-.5)*80,z:Math.max(n.z*a,120)+o*80},color:[1,.8,.4,1],size:2.5,lifetime:.45+e.rng.frandom()*.1,gravity:600,damping:2,bounce:.45,blendMode:"additive",fade:!0})}for(let i=0;i<8;i+=1)e.spawn({position:r,velocity:{x:(e.rng.frandom()-.5)*40,y:(e.rng.frandom()-.5)*40,z:80+e.rng.frandom()*40},color:[.45,.45,.45,.75],size:6,lifetime:.6,gravity:200,damping:4,bounce:.15,blendMode:"alpha",fade:!0})}function gm(t){let{system:e,origin:r}=t;for(let n=0;n<40;n+=1){let i=e.rng.frandom()*Math.PI*2,a=Math.acos(2*e.rng.frandom()-1),o=220+e.rng.frandom()*260,s={x:Math.sin(a)*Math.cos(i),y:Math.sin(a)*Math.sin(i),z:Math.cos(a)};e.spawn({position:r,velocity:{x:s.x*o,y:s.y*o,z:s.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)e.spawn({position:r,velocity:{x:(e.rng.frandom()-.5)*30,y:(e.rng.frandom()-.5)*30,z:120+e.rng.frandom()*120},color:[.25,.25,.25,.9],size:12,lifetime:1.2,gravity:300,damping:3,blendMode:"alpha",fade:!0})}function ym(t){let{system:e,origin:r,direction:n={x:0,y:0,z:1}}=t;for(let i=0;i<24;i+=1){let a=120+e.rng.frandom()*180;e.spawn({position:r,velocity:{x:n.x*a+(e.rng.frandom()-.5)*70,y:n.y*a+(e.rng.frandom()-.5)*70,z:n.z*a+e.rng.frandom()*80},color:[.6,0,0,.95],size:3,lifetime:.8,gravity:900,damping:1,bounce:.2,blendMode:"alpha",fade:!0})}}function bm(t){let{system:e,origin:r}=t;for(let n=0;n<30;n+=1){let i=e.rng.frandom()*Math.PI*2,a=8+e.rng.frandom()*8;e.spawn({position:r,velocity:{x:Math.cos(i)*a,y:Math.sin(i)*a,z:100+e.rng.frandom()*80},color:[.4,.6,1,.9],size:4,lifetime:.5,gravity:300,damping:2,blendMode:"additive",fade:!0})}}function xm(t){let{system:e,origin:r,direction:n={x:1,y:0,z:0}}=t;for(let i=0;i<10;i+=1){let a=350+e.rng.frandom()*100;e.spawn({position:r,velocity:{x:n.x*a+(e.rng.frandom()-.5)*30,y:n.y*a+(e.rng.frandom()-.5)*30,z:n.z*a+(e.rng.frandom()-.5)*30},color:[1,.8,.3,1],size:3,lifetime:.25,gravity:200,damping:1,blendMode:"additive",fade:!0})}}function vm(t){let{system:e,origin:r,direction:n={x:0,y:0,z:0}}=t;for(let i=0;i<6;i+=1)e.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:(e.rng.frandom()-.5)*15,y:(e.rng.frandom()-.5)*15,z:20+e.rng.frandom()*15},color:[.6,.6,.6,.8],size:2.2,lifetime:.6,gravity:200,damping:1.5,blendMode:"alpha",fade:!0})}function _m(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1}}=t;for(let i=0;i<30;i+=1){let a=100+e.rng.frandom()*150;e.spawn({position:r,velocity:{x:n.x*a+(e.rng.frandom()-.5)*80,y:n.y*a+(e.rng.frandom()-.5)*80,z:100+e.rng.frandom()*120},color:[.5,.6,.8,.5],size:3,lifetime:.5+e.rng.frandom()*.3,gravity:800,damping:1.5,blendMode:"alpha",fade:!0})}}function Sm(t){let{system:e,origin:r}=t;for(let n=0;n<8;n+=1)e.spawn({position:{x:r.x+(e.rng.frandom()-.5)*10,y:r.y+(e.rng.frandom()-.5)*10,z:r.z+(e.rng.frandom()-.5)*10},velocity:{x:(e.rng.frandom()-.5)*20,y:(e.rng.frandom()-.5)*20,z:40+e.rng.frandom()*20},color:[.8,.8,.8,.3],size:5+e.rng.frandom()*4,lifetime:1.5+e.rng.frandom()*.5,gravity:-50,damping:.5,blendMode:"alpha",fade:!0})}function wm(t){let{system:e,start:r,end:n}=t,i=n.x-r.x,a=n.y-r.y,o=n.z-r.z,s=Math.sqrt(i*i+a*a+o*o);if(s<1)return;let c={x:i/s,y:a/s,z:o/s},l=8;for(let d=0;d<s;d+=l){let f=r.x+c.x*d,u=r.y+c.y*d,h=r.z+c.z*d;e.spawn({position:{x:f,y:u,z:h},velocity:{x:0,y:0,z:0},color:[.4,.4,1,.8],size:2,lifetime:.6,blendMode:"additive",fade:!0});let m=3,g=d*.5;e.spawn({position:{x:f+(e.rng.frandom()-.5)*6,y:u+(e.rng.frandom()-.5)*6,z:h+(e.rng.frandom()-.5)*6},velocity:{x:(e.rng.frandom()-.5)*10,y:(e.rng.frandom()-.5)*10,z:(e.rng.frandom()-.5)*10},color:[.1,.1,.8,.6],size:3,lifetime:.8+e.rng.frandom()*.2,blendMode:"additive",fade:!0})}}function Mm(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1},count:i=12,color:a=[1,.9,.2,1]}=t;for(let o=0;o<i;o++){let s=100+e.rng.frandom()*200,c=.5;e.spawn({position:r,velocity:{x:n.x*s+(e.rng.frandom()-.5)*100*c,y:n.y*s+(e.rng.frandom()-.5)*100*c,z:n.z*s+(e.rng.frandom()-.5)*100*c},color:a,size:1.5,lifetime:.3+e.rng.frandom()*.2,gravity:800,bounce:.5,damping:1,blendMode:"additive",fade:!0})}}function Am(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1},color:i=[1,.8,0,1]}=t;e.spawn({position:r,velocity:{x:0,y:0,z:0},color:i,size:8,lifetime:.2,blendMode:"additive",fade:!0});for(let a=0;a<8;a++){let o=150+e.rng.frandom()*150;e.spawn({position:r,velocity:{x:n.x*o+(e.rng.frandom()-.5)*120,y:n.y*o+(e.rng.frandom()-.5)*120,z:n.z*o+(e.rng.frandom()-.5)*120},color:i,size:2,lifetime:.4+e.rng.frandom()*.2,gravity:400,blendMode:"additive",fade:!0})}}function Em(t){let{system:e,origin:r}=t;e.spawn({position:r,velocity:{x:0,y:0,z:0},color:[.2,1,.2,1],size:30,lifetime:.5,blendMode:"additive",fade:!0});for(let n=0;n<60;n++){let i=e.rng.frandom()*Math.PI*2,a=Math.acos(2*e.rng.frandom()-1),o=300+e.rng.frandom()*400,s={x:Math.sin(a)*Math.cos(i),y:Math.sin(a)*Math.sin(i),z:Math.cos(a)};e.spawn({position:r,velocity:{x:s.x*o,y:s.y*o,z:s.z*o},color:[.2,1,.2,.8],size:4,lifetime:1,gravity:100,damping:1,blendMode:"additive",fade:!0})}}var Mx=`#version 300 es
582
+ }`,wo=class{constructor(e,r){this.vertexCapacity=0;this.indexCapacity=0;this.gl=e,this.system=r,this.program=le.create(e,{vertex:gu,fragment:yu}),this.vertexBuffer=new Ae(e,e.DYNAMIC_DRAW),this.indexBuffer=new Je(e,e.DYNAMIC_DRAW),this.vertexArray=new Le(e),this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:36,offset:0},{index:1,size:2,type:e.FLOAT,stride:36,offset:12},{index:2,size:4,type:e.FLOAT,stride:36,offset:20}],this.vertexBuffer)}get shaderSize(){return this.program.sourceSize}render(e){let r=this.system.buildMesh(e.viewRight,e.viewUp);if(r.indices.length===0)return;let n=r.vertices;r.vertices.byteLength>this.vertexCapacity?(this.vertexCapacity=r.vertices.byteLength,this.vertexBuffer.upload(n,this.gl.DYNAMIC_DRAW)):this.vertexBuffer.update(n);let 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 o=this.program.getUniformLocation("u_viewProjection");this.gl.uniformMatrix4fv(o,!1,e.viewProjection),this.vertexArray.bind();for(let a of r.batches)a.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,a.count,this.gl.UNSIGNED_SHORT,a.start*2);this.gl.depthMask(!0)}dispose(){this.program.dispose(),this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}};function _m(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1}}=t;for(let i=0;i<12;i+=1){let o=200+e.rng.frandom()*180,a=e.rng.frandom()*.35;e.spawn({position:r,velocity:{x:n.x*o+(e.rng.frandom()-.5)*80,y:n.y*o+(e.rng.frandom()-.5)*80,z:Math.max(n.z*o,120)+a*80},color:[1,.8,.4,1],size:2.5,lifetime:.45+e.rng.frandom()*.1,gravity:600,damping:2,bounce:.45,blendMode:"additive",fade:!0})}for(let i=0;i<8;i+=1)e.spawn({position:r,velocity:{x:(e.rng.frandom()-.5)*40,y:(e.rng.frandom()-.5)*40,z:80+e.rng.frandom()*40},color:[.45,.45,.45,.75],size:6,lifetime:.6,gravity:200,damping:4,bounce:.15,blendMode:"alpha",fade:!0})}function Sm(t){let{system:e,origin:r}=t;for(let n=0;n<40;n+=1){let i=e.rng.frandom()*Math.PI*2,o=Math.acos(2*e.rng.frandom()-1),a=220+e.rng.frandom()*260,s={x:Math.sin(o)*Math.cos(i),y:Math.sin(o)*Math.sin(i),z:Math.cos(o)};e.spawn({position:r,velocity:{x:s.x*a,y:s.y*a,z:s.z*a},color:[1,.6,.2,1],size:5,lifetime:.9,gravity:700,damping:1,bounce:.35,blendMode:"additive",fade:!0})}for(let n=0;n<16;n+=1)e.spawn({position:r,velocity:{x:(e.rng.frandom()-.5)*30,y:(e.rng.frandom()-.5)*30,z:120+e.rng.frandom()*120},color:[.25,.25,.25,.9],size:12,lifetime:1.2,gravity:300,damping:3,blendMode:"alpha",fade:!0})}function wm(t){let{system:e,origin:r,direction:n={x:0,y:0,z:1}}=t;for(let i=0;i<24;i+=1){let o=120+e.rng.frandom()*180;e.spawn({position:r,velocity:{x:n.x*o+(e.rng.frandom()-.5)*70,y:n.y*o+(e.rng.frandom()-.5)*70,z:n.z*o+e.rng.frandom()*80},color:[.6,0,0,.95],size:3,lifetime:.8,gravity:900,damping:1,bounce:.2,blendMode:"alpha",fade:!0})}}function Mm(t){let{system:e,origin:r}=t;for(let n=0;n<30;n+=1){let i=e.rng.frandom()*Math.PI*2,o=8+e.rng.frandom()*8;e.spawn({position:r,velocity:{x:Math.cos(i)*o,y:Math.sin(i)*o,z:100+e.rng.frandom()*80},color:[.4,.6,1,.9],size:4,lifetime:.5,gravity:300,damping:2,blendMode:"additive",fade:!0})}}function Am(t){let{system:e,origin:r,direction:n={x:1,y:0,z:0}}=t;for(let i=0;i<10;i+=1){let o=350+e.rng.frandom()*100;e.spawn({position:r,velocity:{x:n.x*o+(e.rng.frandom()-.5)*30,y:n.y*o+(e.rng.frandom()-.5)*30,z:n.z*o+(e.rng.frandom()-.5)*30},color:[1,.8,.3,1],size:3,lifetime:.25,gravity:200,damping:1,blendMode:"additive",fade:!0})}}function Em(t){let{system:e,origin:r,direction:n={x:0,y:0,z:0}}=t;for(let i=0;i<6;i+=1)e.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:(e.rng.frandom()-.5)*15,y:(e.rng.frandom()-.5)*15,z:20+e.rng.frandom()*15},color:[.6,.6,.6,.8],size:2.2,lifetime:.6,gravity:200,damping:1.5,blendMode:"alpha",fade:!0})}function Lm(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1}}=t;for(let i=0;i<30;i+=1){let o=100+e.rng.frandom()*150;e.spawn({position:r,velocity:{x:n.x*o+(e.rng.frandom()-.5)*80,y:n.y*o+(e.rng.frandom()-.5)*80,z:100+e.rng.frandom()*120},color:[.5,.6,.8,.5],size:3,lifetime:.5+e.rng.frandom()*.3,gravity:800,damping:1.5,blendMode:"alpha",fade:!0})}}function Tm(t){let{system:e,origin:r}=t;for(let n=0;n<8;n+=1)e.spawn({position:{x:r.x+(e.rng.frandom()-.5)*10,y:r.y+(e.rng.frandom()-.5)*10,z:r.z+(e.rng.frandom()-.5)*10},velocity:{x:(e.rng.frandom()-.5)*20,y:(e.rng.frandom()-.5)*20,z:40+e.rng.frandom()*20},color:[.8,.8,.8,.3],size:5+e.rng.frandom()*4,lifetime:1.5+e.rng.frandom()*.5,gravity:-50,damping:.5,blendMode:"alpha",fade:!0})}function Rm(t){let{system:e,start:r,end:n}=t,i=n.x-r.x,o=n.y-r.y,a=n.z-r.z,s=Math.sqrt(i*i+o*o+a*a);if(s<1)return;let c={x:i/s,y:o/s,z:a/s},l=8;for(let d=0;d<s;d+=l){let f=r.x+c.x*d,u=r.y+c.y*d,h=r.z+c.z*d;e.spawn({position:{x:f,y:u,z:h},velocity:{x:0,y:0,z:0},color:[.4,.4,1,.8],size:2,lifetime:.6,blendMode:"additive",fade:!0});let m=3,g=d*.5;e.spawn({position:{x:f+(e.rng.frandom()-.5)*6,y:u+(e.rng.frandom()-.5)*6,z:h+(e.rng.frandom()-.5)*6},velocity:{x:(e.rng.frandom()-.5)*10,y:(e.rng.frandom()-.5)*10,z:(e.rng.frandom()-.5)*10},color:[.1,.1,.8,.6],size:3,lifetime:.8+e.rng.frandom()*.2,blendMode:"additive",fade:!0})}}function Cm(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1},count:i=12,color:o=[1,.9,.2,1]}=t;for(let a=0;a<i;a++){let s=100+e.rng.frandom()*200,c=.5;e.spawn({position:r,velocity:{x:n.x*s+(e.rng.frandom()-.5)*100*c,y:n.y*s+(e.rng.frandom()-.5)*100*c,z:n.z*s+(e.rng.frandom()-.5)*100*c},color:o,size:1.5,lifetime:.3+e.rng.frandom()*.2,gravity:800,bounce:.5,damping:1,blendMode:"additive",fade:!0})}}function Pm(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1},color:i=[1,.8,0,1]}=t;e.spawn({position:r,velocity:{x:0,y:0,z:0},color:i,size:8,lifetime:.2,blendMode:"additive",fade:!0});for(let o=0;o<8;o++){let a=150+e.rng.frandom()*150;e.spawn({position:r,velocity:{x:n.x*a+(e.rng.frandom()-.5)*120,y:n.y*a+(e.rng.frandom()-.5)*120,z:n.z*a+(e.rng.frandom()-.5)*120},color:i,size:2,lifetime:.4+e.rng.frandom()*.2,gravity:400,blendMode:"additive",fade:!0})}}function Im(t){let{system:e,origin:r}=t;e.spawn({position:r,velocity:{x:0,y:0,z:0},color:[.2,1,.2,1],size:30,lifetime:.5,blendMode:"additive",fade:!0});for(let n=0;n<60;n++){let i=e.rng.frandom()*Math.PI*2,o=Math.acos(2*e.rng.frandom()-1),a=300+e.rng.frandom()*400,s={x:Math.sin(o)*Math.cos(i),y:Math.sin(o)*Math.sin(i),z:Math.cos(o)};e.spawn({position:r,velocity:{x:s.x*a,y:s.y*a,z:s.z*a},color:[.2,1,.2,.8],size:4,lifetime:1,gravity:100,damping:1,blendMode:"additive",fade:!0})}}var Bx=`#version 300 es
583
583
  layout(location = 0) in vec2 a_position;
584
584
 
585
585
  out vec2 v_texCoord;
@@ -588,7 +588,7 @@ void main() {
588
588
  v_texCoord = a_position * 0.5 + 0.5;
589
589
  gl_Position = vec4(a_position, 0.0, 1.0);
590
590
  }
591
- `,Ax=`#version 300 es
591
+ `,Fx=`#version 300 es
592
592
  precision mediump float;
593
593
 
594
594
  in vec2 v_texCoord;
@@ -614,7 +614,7 @@ void main() {
614
614
 
615
615
  o_color = texture(u_texture, uv);
616
616
  }
617
- `,tc=class{constructor(e){this.gl=e,this.program=le.create(e,{vertex:Mx,fragment:Ax},{a_position:0}),this.uTime=this.program.getUniformLocation("u_time"),this.uStrength=this.program.getUniformLocation("u_strength"),this.uTexture=this.program.getUniformLocation("u_texture"),this.vao=e.createVertexArray(),e.bindVertexArray(this.vao);let r=new Float32Array([-1,-1,1,-1,-1,1,1,1]),n=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,n),e.bufferData(e.ARRAY_BUFFER,r,e.STATIC_DRAW),e.enableVertexAttribArray(0),e.vertexAttribPointer(0,2,e.FLOAT,!1,0,0),e.bindVertexArray(null)}render(e,r,n=1){this.program.use(),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.uniform1i(this.uTexture,0),this.gl.uniform1f(this.uTime,r),this.gl.uniform1f(this.uStrength,n),this.gl.bindVertexArray(this.vao),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4),this.gl.bindVertexArray(null)}dispose(){this.program.dispose(),this.gl.deleteVertexArray(this.vao)}};var hu=`#version 300 es
617
+ `,tc=class{constructor(e){this.gl=e,this.program=le.create(e,{vertex:Bx,fragment:Fx},{a_position:0}),this.uTime=this.program.getUniformLocation("u_time"),this.uStrength=this.program.getUniformLocation("u_strength"),this.uTexture=this.program.getUniformLocation("u_texture"),this.vao=e.createVertexArray(),e.bindVertexArray(this.vao);let r=new Float32Array([-1,-1,1,-1,-1,1,1,1]),n=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,n),e.bufferData(e.ARRAY_BUFFER,r,e.STATIC_DRAW),e.enableVertexAttribArray(0),e.vertexAttribPointer(0,2,e.FLOAT,!1,0,0),e.bindVertexArray(null)}render(e,r,n=1){this.program.use(),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.uniform1i(this.uTexture,0),this.gl.uniform1f(this.uTime,r),this.gl.uniform1f(this.uStrength,n),this.gl.bindVertexArray(this.vao),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4),this.gl.bindVertexArray(null)}dispose(){this.program.dispose(),this.gl.deleteVertexArray(this.vao)}};var bu=`#version 300 es
618
618
  layout(location = 0) in vec2 a_position;
619
619
 
620
620
  out vec2 v_texCoord;
@@ -623,7 +623,7 @@ void main() {
623
623
  v_texCoord = a_position * 0.5 + 0.5;
624
624
  gl_Position = vec4(a_position, 0.0, 1.0);
625
625
  }
626
- `,Ex=`#version 300 es
626
+ `,kx=`#version 300 es
627
627
  precision mediump float;
628
628
 
629
629
  in vec2 v_texCoord;
@@ -641,7 +641,7 @@ void main() {
641
641
  o_color = vec4(0.0, 0.0, 0.0, 1.0);
642
642
  }
643
643
  }
644
- `,Lx=`#version 300 es
644
+ `,Dx=`#version 300 es
645
645
  precision mediump float;
646
646
 
647
647
  in vec2 v_texCoord;
@@ -668,7 +668,7 @@ void main() {
668
668
  }
669
669
  o_color = vec4(result, 1.0);
670
670
  }
671
- `,Tx=`#version 300 es
671
+ `,zx=`#version 300 es
672
672
  precision mediump float;
673
673
 
674
674
  in vec2 v_texCoord;
@@ -681,7 +681,7 @@ void main() {
681
681
  vec4 color = texture(u_texture, v_texCoord);
682
682
  o_color = vec4(color.rgb * u_intensity, 1.0);
683
683
  }
684
- `,rc=class{constructor(e){this.width=0;this.height=0;this.gl=e,this.extractProgram=le.create(e,{vertex:hu,fragment:Ex},{a_position:0}),this.blurProgram=le.create(e,{vertex:hu,fragment:Lx},{a_position:0}),this.compositeProgram=le.create(e,{vertex:hu,fragment:Tx},{a_position:0}),this.framebuffer1=new gi(e),this.framebuffer2=new gi(e),this.texture1=new Je(e),this.texture2=new Je(e),this.texture1.setParameters({minFilter:e.LINEAR,magFilter:e.LINEAR,wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE}),this.texture2.setParameters({minFilter:e.LINEAR,magFilter:e.LINEAR,wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE}),this.vao=e.createVertexArray(),e.bindVertexArray(this.vao);let r=new Float32Array([-1,-1,1,-1,-1,1,1,1]),n=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,n),e.bufferData(e.ARRAY_BUFFER,r,e.STATIC_DRAW),e.enableVertexAttribArray(0),e.vertexAttribPointer(0,2,e.FLOAT,!1,0,0),e.bindVertexArray(null)}resize(e,r){if(this.width!==e||this.height!==r){this.width=e,this.height=r;let n=Math.floor(e/2)||1,i=Math.floor(r/2)||1;this.texture1.upload(n,i,null),this.framebuffer1.attachTexture2D(this.gl.COLOR_ATTACHMENT0,this.texture1),this.texture2.upload(n,i,null),this.framebuffer2.attachTexture2D(this.gl.COLOR_ATTACHMENT0,this.texture2)}}render(e,r=.5){let n=this.gl,i=Math.floor(this.width/2)||1,a=Math.floor(this.height/2)||1;n.bindVertexArray(this.vao),this.framebuffer1.bind(),n.viewport(0,0,i,a),n.clear(n.COLOR_BUFFER_BIT),this.extractProgram.use(),n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,e.texture),n.uniform1i(this.extractProgram.getUniformLocation("u_texture"),0),n.uniform1f(this.extractProgram.getUniformLocation("u_threshold"),.7),n.drawArrays(n.TRIANGLE_STRIP,0,4),this.blurProgram.use(),n.uniform1fv(this.blurProgram.getUniformLocation("u_weight"),[.227027,.1945946,.1216216,.054054,.016216]);let o=this.blurProgram.getUniformLocation("u_horizontal"),s=this.blurProgram.getUniformLocation("u_texture"),c=4,l=!0,d=!0;for(let f=0;f<c;f++)this.framebuffer2.bind(),l?(this.framebuffer2.bind(),n.bindTexture(n.TEXTURE_2D,this.texture1.texture)):(this.framebuffer1.bind(),n.bindTexture(n.TEXTURE_2D,this.texture2.texture)),n.uniform1i(o,l?1:0),n.uniform1i(s,0),n.drawArrays(n.TRIANGLE_STRIP,0,4),l=!l;n.bindFramebuffer(n.FRAMEBUFFER,null),n.viewport(0,0,this.width,this.height),n.enable(n.BLEND),n.blendFunc(n.ONE,n.ONE),n.disable(n.DEPTH_TEST),this.compositeProgram.use(),n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,this.texture1.texture),n.uniform1i(this.compositeProgram.getUniformLocation("u_texture"),0),n.uniform1f(this.compositeProgram.getUniformLocation("u_intensity"),r),n.drawArrays(n.TRIANGLE_STRIP,0,4),n.blendFunc(n.SRC_ALPHA,n.ONE_MINUS_SRC_ALPHA),n.enable(n.DEPTH_TEST),n.bindVertexArray(null)}dispose(){this.extractProgram.dispose(),this.blurProgram.dispose(),this.compositeProgram.dispose(),this.framebuffer1.dispose(),this.framebuffer2.dispose(),this.texture1.dispose(),this.texture2.dispose(),this.gl.deleteVertexArray(this.vao)}};var Rx={gatherVisibleFaces:xi,extractFrustumPlanes:kn,computeSkyScroll:Kl,removeViewTranslation:Xl};function Cx(t,e,r,n,i){if(!n)return;let a=i.removeViewTranslation(e.viewMatrix),o=j.create();j.multiply(o,e.projectionMatrix,a);let s=i.computeSkyScroll(r,n.scrollSpeeds??[.01,.02]);t.bind({viewProjection:o,scroll:s,textureUnit:n.textureUnit??0}),t.draw(),t.gl.depthMask(!0)}function Px(t){return[...t].sort((e,r)=>r.sortKey-e.sortKey)}function Ix(t){return[...t].sort((e,r)=>e.sortKey-r.sortKey)}function Bx(t,e,r){let n=e?.materials?.getMaterial(t.texture),i;if(n){let s=n.texture;s&&(i=s)}i||(i=e?.textures?.get(t.texture));let a=t.lightmap?.atlasIndex,o=a!==void 0?e?.lightmaps?.[a]?.texture:void 0;return{diffuse:i,lightmap:o,refraction:r}}function Lm(t,e,r,n){let i=n.diffuse;i&&r.diffuse!==i&&(i.bind(0),r.diffuse=i);let a=n.lightmap;a&&r.lightmap!==a&&(a.bind(1),r.lightmap=a),a||(r.lightmap=void 0);let o=n.refraction,s;return o&&t.surfaceFlags&Wa?(r.refraction!==o&&(o.bind(2),r.refraction=o),s=2):r.refraction=void 0,{diffuse:0,lightmap:a?1:void 0,refraction:s}}function Fx(t,e,r,n){if(!r)return!1;let i=r.fov?e.getViewmodelProjectionMatrix(r.fov):e.projectionMatrix,a=n(e.viewMatrix),o=j.create();return j.multiply(o,i,a),r.depthRange&&t.depthRange(r.depthRange[0],r.depthRange[1]),r.draw(new Float32Array(o)),r.depthRange&&t.depthRange(0,1),!0}function kx(t,e){if(!t)return 1;let r=Math.floor(e*10)%t.length;return(t.charCodeAt(r)-97)/12}var Tm=(t,e,r,n=Rx)=>{let i=new tc(t),a=new rc(t),o=0,s,c=0,l=0,d=(u,h)=>((!s||c!==u||l!==h)&&(s=new Je(t),s.upload(u,h,null),s.setParameters({minFilter:t.LINEAR,magFilter:t.LINEAR,wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE}),c=u,l=h),s);return{renderFrame:u=>{let h=performance.now(),m=o>0?1e3/(h-o):0;o=h;let g={batches:0,facesDrawn:0,drawCalls:0,skyDrawn:!1,viewModelDrawn:!1,fps:Math.round(m),vertexCount:0},{camera:p,world:y,sky:v,clearColor:x=[0,0,0,1],timeSeconds:b=0,viewModel:_,dlights:w,renderMode:S,disableLightmaps:E,lightmapOnly:L,brightness:M,gamma:C,fullbright:I,ambient:B,lightStyleOverrides:F,waterTint:U,underwaterWarp:ce,bloom:Nt,bloomIntensity:Ct,portalState:zr}=u,on=new Float32Array(p.viewProjectionMatrix);if(t.clearColor(x[0],x[1],x[2],x[3]),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT),Cx(r,p,b,v,n),g.skyDrawn=!!v,y){y.materials?.update(b);let dt=n.extractFrustumPlanes(Array.from(on)),et={x:p.position[0]??0,y:p.position[1]??0,z:p.position[2]??0},Ht=n.gatherVisibleFaces(y.map,et,dt,zr),Gn=[],sn=[];for(let oe of Ht){let Ce=y.surfaces[oe.faceIndex];if(!Ce)continue;(Ce.surfaceFlags&(zs|Os|Wa))!==0?sn.push(oe):Gn.push(oe)}let Or=Px(Gn),Ur=y.lightStyles||[];if(F&&F.size>0){let oe=[...y.lightStyles||[]];for(let[Ce,Re]of F){for(;oe.length<=Ce;)oe.push(1);oe[Ce]=kx(Re,b)}Ur=oe}let Nr=(oe,Ce)=>{let Re,ir,Vt={},ln=Ce?s:void 0;for(let{faceIndex:Ti}of oe){let Gt=y.surfaces[Ti];if(!Gt||(Gt.surfaceFlags&Ds)!==0)continue;let Rc=y.map.faces[Ti]?.styles,Fa=y.materials?.getMaterial(Gt.texture),Wn=Bx(Gt,y,ln),ka=S;S&&!S.applyToAll&&Wn.diffuse?ka=void 0:S&&!S.applyToAll&&!Wn.diffuse&&(ka=S);let Da=Wn.lightmap;E&&(Da=void 0);let Ri={diffuse:Wn.diffuse,lightmap:Da,surfaceFlags:Gt.surfaceFlags,styleKey:Rc?.join(",")??""};if(Re&&Re.diffuse===Ri.diffuse&&Re.lightmap===Ri.lightmap&&Re.surfaceFlags===Ri.surfaceFlags&&Re.styleKey===Ri.styleKey){let Ls={...Wn,lightmap:Da};Lm(Gt,y,Vt,Ls),ir&&es(t,ir)}else{g.batches+=1,Vt.diffuse=void 0,Vt.lightmap=void 0,Vt.refraction=void 0;let Ls={...Wn,lightmap:Da},Ts=Lm(Gt,y,Vt,Ls),Ju=Fa?Fa.scrollOffset:void 0,ef=Fa?Fa.warp:void 0;ir=e.bind({modelViewProjection:on,styleIndices:Rc,styleValues:Ur,surfaceFlags:Gt.surfaceFlags,timeSeconds:b,diffuseSampler:Ts.diffuse??0,lightmapSampler:Ts.lightmap,refractionSampler:Ts.refraction,texScroll:Ju,warp:ef,dlights:w,renderMode:ka,lightmapOnly:L,brightness:M,gamma:C,fullbright:I,ambient:B}),es(t,ir),Re=Ri}e.draw(Gt,ka),g.facesDrawn+=1,g.drawCalls+=1,g.vertexCount+=Gt.vertexCount}};if(Nr(Or,!1),sn.length>0){let oe=t.canvas.width,Ce=t.canvas.height;d(oe,Ce).bind(2),t.copyTexImage2D(t.TEXTURE_2D,0,t.RGBA,0,0,oe,Ce,0)}let k=Ix(sn);Nr(k,!0)}if(Fx(t,p,_,n.removeViewTranslation)&&(g.viewModelDrawn=!0),ce){let dt=t.canvas.width,et=t.canvas.height,Ht=d(dt,et);Ht.bind(0),t.copyTexImage2D(t.TEXTURE_2D,0,t.RGBA,0,0,dt,et,0),t.disable(t.DEPTH_TEST),t.depthMask(!1),i.render(Ht.texture,b),t.enable(t.DEPTH_TEST),t.depthMask(!0)}if(Nt){let dt=t.canvas.width,et=t.canvas.height;a.resize(dt,et);let Ht=d(dt,et);Ht.bind(0),t.copyTexImage2D(t.TEXTURE_2D,0,t.RGBA,0,0,dt,et,0),a.render(Ht,Ct??.5)}return g}}};var Dx=`#version 300 es
684
+ `,rc=class{constructor(e){this.width=0;this.height=0;this.gl=e,this.extractProgram=le.create(e,{vertex:bu,fragment:kx},{a_position:0}),this.blurProgram=le.create(e,{vertex:bu,fragment:Dx},{a_position:0}),this.compositeProgram=le.create(e,{vertex:bu,fragment:zx},{a_position:0}),this.framebuffer1=new yi(e),this.framebuffer2=new yi(e),this.texture1=new et(e),this.texture2=new et(e),this.texture1.setParameters({minFilter:e.LINEAR,magFilter:e.LINEAR,wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE}),this.texture2.setParameters({minFilter:e.LINEAR,magFilter:e.LINEAR,wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE}),this.vao=e.createVertexArray(),e.bindVertexArray(this.vao);let r=new Float32Array([-1,-1,1,-1,-1,1,1,1]),n=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,n),e.bufferData(e.ARRAY_BUFFER,r,e.STATIC_DRAW),e.enableVertexAttribArray(0),e.vertexAttribPointer(0,2,e.FLOAT,!1,0,0),e.bindVertexArray(null)}resize(e,r){if(this.width!==e||this.height!==r){this.width=e,this.height=r;let n=Math.floor(e/2)||1,i=Math.floor(r/2)||1;this.texture1.upload(n,i,null),this.framebuffer1.attachTexture2D(this.gl.COLOR_ATTACHMENT0,this.texture1),this.texture2.upload(n,i,null),this.framebuffer2.attachTexture2D(this.gl.COLOR_ATTACHMENT0,this.texture2)}}render(e,r=.5){let n=this.gl,i=Math.floor(this.width/2)||1,o=Math.floor(this.height/2)||1;n.bindVertexArray(this.vao),this.framebuffer1.bind(),n.viewport(0,0,i,o),n.clear(n.COLOR_BUFFER_BIT),this.extractProgram.use(),n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,e.texture),n.uniform1i(this.extractProgram.getUniformLocation("u_texture"),0),n.uniform1f(this.extractProgram.getUniformLocation("u_threshold"),.7),n.drawArrays(n.TRIANGLE_STRIP,0,4),this.blurProgram.use(),n.uniform1fv(this.blurProgram.getUniformLocation("u_weight"),[.227027,.1945946,.1216216,.054054,.016216]);let a=this.blurProgram.getUniformLocation("u_horizontal"),s=this.blurProgram.getUniformLocation("u_texture"),c=4,l=!0,d=!0;for(let f=0;f<c;f++)this.framebuffer2.bind(),l?(this.framebuffer2.bind(),n.bindTexture(n.TEXTURE_2D,this.texture1.texture)):(this.framebuffer1.bind(),n.bindTexture(n.TEXTURE_2D,this.texture2.texture)),n.uniform1i(a,l?1:0),n.uniform1i(s,0),n.drawArrays(n.TRIANGLE_STRIP,0,4),l=!l;n.bindFramebuffer(n.FRAMEBUFFER,null),n.viewport(0,0,this.width,this.height),n.enable(n.BLEND),n.blendFunc(n.ONE,n.ONE),n.disable(n.DEPTH_TEST),this.compositeProgram.use(),n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,this.texture1.texture),n.uniform1i(this.compositeProgram.getUniformLocation("u_texture"),0),n.uniform1f(this.compositeProgram.getUniformLocation("u_intensity"),r),n.drawArrays(n.TRIANGLE_STRIP,0,4),n.blendFunc(n.SRC_ALPHA,n.ONE_MINUS_SRC_ALPHA),n.enable(n.DEPTH_TEST),n.bindVertexArray(null)}dispose(){this.extractProgram.dispose(),this.blurProgram.dispose(),this.compositeProgram.dispose(),this.framebuffer1.dispose(),this.framebuffer2.dispose(),this.texture1.dispose(),this.texture2.dispose(),this.gl.deleteVertexArray(this.vao)}};var Ox={gatherVisibleFaces:vi,extractFrustumPlanes:Dn,computeSkyScroll:$l,removeViewTranslation:Xl};function Ux(t,e,r,n,i){if(!n)return;let o=i.removeViewTranslation(e.viewMatrix),a=I.create();I.multiply(a,e.projectionMatrix,o);let s=i.computeSkyScroll(r,n.scrollSpeeds??[.01,.02]);t.bind({viewProjection:a,scroll:s,textureUnit:n.textureUnit??0}),t.draw(),t.gl.depthMask(!0)}function Nx(t){return[...t].sort((e,r)=>r.sortKey-e.sortKey)}function Hx(t){return[...t].sort((e,r)=>e.sortKey-r.sortKey)}function Vx(t,e,r){let n=e?.materials?.getMaterial(t.texture),i;if(n){let s=n.texture;s&&(i=s)}i||(i=e?.textures?.get(t.texture));let o=t.lightmap?.atlasIndex,a=o!==void 0?e?.lightmaps?.[o]?.texture:void 0;return{diffuse:i,lightmap:a,refraction:r}}function Bm(t,e,r,n){let i=n.diffuse;i&&r.diffuse!==i&&(i.bind(0),r.diffuse=i);let o=n.lightmap;o&&r.lightmap!==o&&(o.bind(1),r.lightmap=o),o||(r.lightmap=void 0);let a=n.refraction,s;return a&&t.surfaceFlags&Xo?(r.refraction!==a&&(a.bind(2),r.refraction=a),s=2):r.refraction=void 0,{diffuse:0,lightmap:o?1:void 0,refraction:s}}function Gx(t,e,r,n){if(!r)return!1;let i=r.fov?e.getViewmodelProjectionMatrix(r.fov):e.projectionMatrix,o=n(e.viewMatrix),a=I.create();return I.multiply(a,i,o),r.depthRange&&t.depthRange(r.depthRange[0],r.depthRange[1]),r.draw(new Float32Array(a)),r.depthRange&&t.depthRange(0,1),!0}function Wx(t,e){if(!t)return 1;let r=Math.floor(e*10)%t.length;return(t.charCodeAt(r)-97)/12}var Fm=(t,e,r,n=Ox)=>{let i=new tc(t),o=new rc(t),a=0,s,c=0,l=0,d=(u,h)=>((!s||c!==u||l!==h)&&(s=new et(t),s.upload(u,h,null),s.setParameters({minFilter:t.LINEAR,magFilter:t.LINEAR,wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE}),c=u,l=h),s);return{renderFrame:u=>{let h=performance.now(),m=a>0?1e3/(h-a):0;a=h;let g={batches:0,facesDrawn:0,drawCalls:0,skyDrawn:!1,viewModelDrawn:!1,fps:Math.round(m),vertexCount:0},{camera:p,world:y,sky:v,clearColor:x=[0,0,0,1],timeSeconds:b=0,viewModel:_,dlights:w,renderMode:S,disableLightmaps:E,lightmapOnly:T,brightness:M,gamma:C,fullbright:B,ambient:F,lightStyleOverrides:k,waterTint:N,underwaterWarp:ce,bloom:Ht,bloomIntensity:Pt,portalState:Or}=u,sn=new Float32Array(p.viewProjectionMatrix);if(t.clearColor(x[0],x[1],x[2],x[3]),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT),Ux(r,p,b,v,n),g.skyDrawn=!!v,y){y.materials?.update(b);let ut=n.extractFrustumPlanes(Array.from(sn)),tt={x:p.position[0]??0,y:p.position[1]??0,z:p.position[2]??0},Vt=n.gatherVisibleFaces(y.map,tt,ut,Or),Wn=[],ln=[];for(let ae of Vt){let Pe=y.surfaces[ae.faceIndex];if(!Pe)continue;(Pe.surfaceFlags&(zs|Os|Xo))!==0?ln.push(ae):Wn.push(ae)}let Ur=Nx(Wn),Nr=y.lightStyles||[];if(k&&k.size>0){let ae=[...y.lightStyles||[]];for(let[Pe,Ce]of k){for(;ae.length<=Pe;)ae.push(1);ae[Pe]=Wx(Ce,b)}Nr=ae}let Hr=(ae,Pe)=>{let Ce,or,Gt={},cn=Pe?s:void 0;for(let{faceIndex:Ri}of ae){let Wt=y.surfaces[Ri];if(!Wt||(Wt.surfaceFlags&Ds)!==0)continue;let Fc=y.map.faces[Ri]?.styles,ko=y.materials?.getMaterial(Wt.texture),Xn=Vx(Wt,y,cn),Do=S;S&&!S.applyToAll&&Xn.diffuse?Do=void 0:S&&!S.applyToAll&&!Xn.diffuse&&(Do=S);let zo=Xn.lightmap;E&&(zo=void 0);let Ci={diffuse:Xn.diffuse,lightmap:zo,surfaceFlags:Wt.surfaceFlags,styleKey:Fc?.join(",")??""};if(Ce&&Ce.diffuse===Ci.diffuse&&Ce.lightmap===Ci.lightmap&&Ce.surfaceFlags===Ci.surfaceFlags&&Ce.styleKey===Ci.styleKey){let Ls={...Xn,lightmap:zo};Bm(Wt,y,Gt,Ls),or&&es(t,or)}else{g.batches+=1,Gt.diffuse=void 0,Gt.lightmap=void 0,Gt.refraction=void 0;let Ls={...Xn,lightmap:zo},Ts=Bm(Wt,y,Gt,Ls),af=ko?ko.scrollOffset:void 0,sf=ko?ko.warp:void 0;or=e.bind({modelViewProjection:sn,styleIndices:Fc,styleValues:Nr,surfaceFlags:Wt.surfaceFlags,timeSeconds:b,diffuseSampler:Ts.diffuse??0,lightmapSampler:Ts.lightmap,refractionSampler:Ts.refraction,texScroll:af,warp:sf,dlights:w,renderMode:Do,lightmapOnly:T,brightness:M,gamma:C,fullbright:B,ambient:F}),es(t,or),Ce=Ci}e.draw(Wt,Do),g.facesDrawn+=1,g.drawCalls+=1,g.vertexCount+=Wt.vertexCount}};if(Hr(Ur,!1),ln.length>0){let ae=t.canvas.width,Pe=t.canvas.height;d(ae,Pe).bind(2),t.copyTexImage2D(t.TEXTURE_2D,0,t.RGBA,0,0,ae,Pe,0)}let D=Hx(ln);Hr(D,!0)}if(Gx(t,p,_,n.removeViewTranslation)&&(g.viewModelDrawn=!0),ce){let ut=t.canvas.width,tt=t.canvas.height,Vt=d(ut,tt);Vt.bind(0),t.copyTexImage2D(t.TEXTURE_2D,0,t.RGBA,0,0,ut,tt,0),t.disable(t.DEPTH_TEST),t.depthMask(!1),i.render(Vt.texture,b),t.enable(t.DEPTH_TEST),t.depthMask(!0)}if(Ht){let ut=t.canvas.width,tt=t.canvas.height;o.resize(ut,tt);let Vt=d(ut,tt);Vt.bind(0),t.copyTexImage2D(t.TEXTURE_2D,0,t.RGBA,0,0,ut,tt,0),o.render(Vt,Pt??.5)}return g}}};var Xx=`#version 300 es
685
685
  precision highp float;
686
686
 
687
687
  layout(location = 0) in vec2 a_position;
@@ -694,7 +694,7 @@ out vec2 v_texCoord;
694
694
  void main() {
695
695
  v_texCoord = a_texCoord;
696
696
  gl_Position = u_projection * vec4(a_position, 0.0, 1.0);
697
- }`,zx=`#version 300 es
697
+ }`,$x=`#version 300 es
698
698
  precision highp float;
699
699
 
700
700
  in vec2 v_texCoord;
@@ -706,7 +706,7 @@ out vec4 o_color;
706
706
 
707
707
  void main() {
708
708
  o_color = texture(u_diffuseMap, v_texCoord) * u_tint;
709
- }`,wa=class{constructor(e){this.gl=e,this.program=le.create(e,{vertex:Dx,fragment:zx},{a_position:0,a_texCoord:1}),this.uniformProjection=this.program.getUniformLocation("u_projection"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.vao=new Ee(e),this.vbo=new Ae(e,e.STREAM_DRAW),this.vao.configureAttributes([{index:0,size:2,type:e.FLOAT,stride:16,offset:0},{index:1,size:2,type:e.FLOAT,stride:16,offset:8}],this.vbo),this.whiteTexture=new Je(e),this.whiteTexture.upload(1,1,new Uint8Array([255,255,255,255]))}get shaderSize(){return this.program.sourceSize}begin(e){this.program.use(),this.gl.uniformMatrix4fv(this.uniformProjection,!1,e)}draw(e,r,n,i,a=0,o=0,s=1,c=1,l=[1,1,1,1]){let d=e,f=r,u=e+n,h=r+i,m=new Float32Array([d,f,a,o,u,f,s,o,d,h,a,c,u,h,s,c]);this.vbo.upload(m,this.gl.STREAM_DRAW),this.gl.uniform4fv(this.uniformTint,new Float32Array(l)),this.vao.bind(),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4)}drawRect(e,r,n,i,a){this.whiteTexture.bind(0),this.draw(e,r,n,i,0,0,1,1,a)}};var Ox=`#version 300 es
709
+ }`,Mo=class{constructor(e){this.gl=e,this.program=le.create(e,{vertex:Xx,fragment:$x},{a_position:0,a_texCoord:1}),this.uniformProjection=this.program.getUniformLocation("u_projection"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.vao=new Le(e),this.vbo=new Ae(e,e.STREAM_DRAW),this.vao.configureAttributes([{index:0,size:2,type:e.FLOAT,stride:16,offset:0},{index:1,size:2,type:e.FLOAT,stride:16,offset:8}],this.vbo),this.whiteTexture=new et(e),this.whiteTexture.upload(1,1,new Uint8Array([255,255,255,255]))}get shaderSize(){return this.program.sourceSize}begin(e){this.program.use(),this.gl.uniformMatrix4fv(this.uniformProjection,!1,e)}draw(e,r,n,i,o=0,a=0,s=1,c=1,l=[1,1,1,1]){let d=e,f=r,u=e+n,h=r+i,m=new Float32Array([d,f,o,a,u,f,s,a,d,h,o,c,u,h,s,c]);this.vbo.upload(m,this.gl.STREAM_DRAW),this.gl.uniform4fv(this.uniformTint,new Float32Array(l)),this.vao.bind(),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4)}drawRect(e,r,n,i,o){this.whiteTexture.bind(0),this.draw(e,r,n,i,0,0,1,1,o)}};var Kx=`#version 300 es
710
710
  precision highp float;
711
711
 
712
712
  layout(location = 0) in vec3 a_position;
@@ -719,7 +719,7 @@ out vec4 v_color;
719
719
  void main() {
720
720
  v_color = a_color;
721
721
  gl_Position = u_viewProjection * vec4(a_position, 1.0);
722
- }`,Ux=`#version 300 es
722
+ }`,Yx=`#version 300 es
723
723
  precision highp float;
724
724
 
725
725
  in vec4 v_color;
@@ -727,7 +727,7 @@ out vec4 o_color;
727
727
 
728
728
  void main() {
729
729
  o_color = v_color;
730
- }`,nc=class{constructor(e){this.vertices=[];this.gl=e,this.program=le.create(e,{vertex:Ox,fragment:Ux},{a_position:0,a_color:1}),this.uniformViewProjection=this.program.getUniformLocation("u_viewProjection"),this.vao=new Ee(e),this.vbo=new Ae(e,e.STREAM_DRAW),this.vao.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:28,offset:0},{index:1,size:4,type:e.FLOAT,stride:28,offset:12}],this.vbo)}get shaderSize(){return this.program.sourceSize}addLine(e,r,n={r:1,g:0,b:0,a:1}){this.vertices.push(e.x,e.y,e.z,n.r,n.g,n.b,n.a,r.x,r.y,r.z,n.r,n.g,n.b,n.a)}addBBox(e,r,n={r:0,g:1,b:0,a:1}){let i={x:e.x,y:e.y,z:e.z},a={x:r.x,y:e.y,z:e.z},o={x:r.x,y:r.y,z:e.z},s={x:e.x,y:r.y,z:e.z},c={x:e.x,y:e.y,z:r.z},l={x:r.x,y:e.y,z:r.z},d={x:r.x,y:r.y,z:r.z},f={x:e.x,y:r.y,z:r.z};this.addLine(i,a,n),this.addLine(a,o,n),this.addLine(o,s,n),this.addLine(s,i,n),this.addLine(c,l,n),this.addLine(l,d,n),this.addLine(d,f,n),this.addLine(f,c,n),this.addLine(i,c,n),this.addLine(a,l,n),this.addLine(o,d,n),this.addLine(s,f,n)}clear(){this.vertices=[]}render(e){this.vertices.length!==0&&(this.program.use(),this.gl.uniformMatrix4fv(this.uniformViewProjection,!1,e),this.vbo.upload(new Float32Array(this.vertices),this.gl.STREAM_DRAW),this.vao.bind(),this.gl.drawArrays(this.gl.LINES,0,this.vertices.length/7))}};function Nx(t,e){let r=t.models[0].headNode;for(;r>=0;){let i=t.nodes[r],a=t.planes[i.planeIndex];a.normal[0]*e.x+a.normal[1]*e.y+a.normal[2]*e.z-a.dist>=0?r=i.children[0]:r=i.children[1]}let n=-(r+1);return{leaf:t.leafs[n],index:n}}function Hx(t){if(t.entities.worldspawn?.properties.light){let e=parseInt(t.entities.worldspawn.properties.light,10);if(!isNaN(e))return e/255}if(t.entities.worldspawn?.properties._minlight){let e=parseInt(t.entities.worldspawn.properties._minlight,10);if(!isNaN(e))return e/255}return .2}function Vx(t,e,r,n){let i=t.faces[e];if(!i||i.lightOffset<0||!t.lightMapInfo[e])return 0;let o=t.texInfo[i.texInfo],s=1/0,c=-1/0,l=1/0,d=-1/0,f=i.firstEdge;for(let E=0;E<i.numEdges;E++){let L=t.surfEdges[f+E],M=L>=0?t.edges[L].vertices[0]:t.edges[Math.abs(L)].vertices[1],C=t.vertices[M],I=C[0]*o.s[0]+C[1]*o.s[1]+C[2]*o.s[2]+o.sOffset,B=C[0]*o.t[0]+C[1]*o.t[1]+C[2]*o.t[2]+o.tOffset;I<s&&(s=I),I>c&&(c=I),B<l&&(l=B),B>d&&(d=B)}let u=Math.floor(s/16),h=Math.floor(l/16),m=Math.ceil(c/16)-u+1,g=Math.ceil(d/16)-h+1,p=r/16-u,y=n/16-h,v=Math.max(0,Math.min(m-1,Math.floor(p))),x=Math.max(0,Math.min(g-1,Math.floor(y))),b=i.lightOffset+(x*m+v)*3;if(b+2>=t.lightMaps.length)return 0;let _=t.lightMaps[b],w=t.lightMaps[b+1],S=t.lightMaps[b+2];return Math.max(_,w,S)/255}function Rm(t,e){if(!t)return 1;let r=Hx(t),n={x:e.x,y:e.y,z:e.z-8192},i=1,a=-1,o=0,s=0,{leaf:c,index:l}=Nx(t,e);if(c.contents&1)return r;let d=t.leafLists.leafFaces[l];if(d)for(let f of d){let u=t.faces[f],h=t.planes[u.planeIndex],m=u.side,g=m?-h.normal[0]:h.normal[0],p=m?-h.normal[1]:h.normal[1],y=m?-h.normal[2]:h.normal[2],v=m?-h.dist:h.dist;if(y>.7){let x=g*e.x+p*e.y+y*e.z-v;if(x>=0&&x<64){let b=t.texInfo[u.texInfo],_=e.x*b.s[0]+e.y*b.s[1]+e.z*b.s[2]+b.sOffset,w=e.x*b.t[0]+e.y*b.t[1]+e.z*b.t[2]+b.tOffset,S=Vx(t,f,_,w);if(S>r)return S}}}return Math.max(r,.2)}var ic=class{constructor(e){this.activeQueries=[];this.queryPool=[];this.currentQuery=null;this.lastGpuTimeMs=0;this.frameStartTime=0;this.lastCpuFrameTimeMs=0;this.textureMemoryBytes=0;this.bufferMemoryBytes=0;this.shaderMemoryBytes=0;this.gl=e,this.ext=e.getExtension("EXT_disjoint_timer_query_webgl2")}get available(){return!!this.ext}getPerformanceReport(e){let r=this.textureMemoryBytes/1048576,n=this.bufferMemoryBytes/(1024*1024);return{frameTimeMs:this.lastCpuFrameTimeMs,gpuTimeMs:this.lastGpuTimeMs,cpuFrameTimeMs:this.lastCpuFrameTimeMs,drawCalls:e.drawCalls,triangles:Math.floor(e.vertexCount/3),vertices:e.vertexCount,textureBinds:e.batches,shaderSwitches:e.shaderSwitches,visibleSurfaces:e.visibleSurfaces,culledSurfaces:e.culledSurfaces,visibleEntities:e.visibleEntities,culledEntities:e.culledEntities,memoryUsageMB:{textures:r,geometry:n,total:r+n}}}startFrame(){if(this.frameStartTime=performance.now(),!this.ext||this.currentQuery)return;let e=this.getQuery();e&&(this.gl.beginQuery(this.ext.TIME_ELAPSED_EXT,e),this.currentQuery=e)}endFrame(){this.lastCpuFrameTimeMs=performance.now()-this.frameStartTime,!(!this.ext||!this.currentQuery)&&(this.gl.endQuery(this.ext.TIME_ELAPSED_EXT),this.activeQueries.push(this.currentQuery),this.currentQuery=null,this.pollQueries())}trackTextureMemory(e){this.textureMemoryBytes+=e}trackBufferMemory(e){this.bufferMemoryBytes+=e}trackShaderMemory(e){this.shaderMemoryBytes+=e}getMemoryUsage(){let e=this.textureMemoryBytes,r=this.bufferMemoryBytes,n=this.shaderMemoryBytes,i=this.bufferMemoryBytes,a=e+r+n;return{texturesBytes:e,geometryBytes:r,shadersBytes:n,buffersBytes:i,totalBytes:a}}getQuery(){return this.queryPool.length>0?this.queryPool.pop():this.gl.createQuery()}pollQueries(){if(this.activeQueries.length===0)return;let e=this.activeQueries[0],r=this.gl.getQueryParameter(e,this.gl.QUERY_RESULT_AVAILABLE),n=this.gl.getParameter(this.ext.GPU_DISJOINT_EXT);if(r)if(n)this.activeQueries.forEach(i=>this.queryPool.push(i)),this.activeQueries.length=0;else{let i=this.gl.getQueryParameter(e,this.gl.QUERY_RESULT);this.lastGpuTimeMs=i/1e6,this.activeQueries.shift(),this.queryPool.push(e)}}dispose(){[...this.activeQueries,...this.queryPool].forEach(e=>this.gl.deleteQuery(e)),this.activeQueries.length=0,this.queryPool.length=0}};var Cm={1:[1,0,0,1],2:[0,1,0,1],3:[1,1,0,1],4:[0,0,1,1],5:[0,1,1,1],6:[1,0,1,1],7:[1,1,1,1],0:[0,0,0,1]};function Pm(t){let e=[],r="",n;for(let i=0;i<t.length;i++){if(t[i]==="^"&&i+1<t.length){let a=t[i+1];if(Cm[a]){r.length>0&&(e.push({text:r,color:n}),r=""),n=Cm[a],i++;continue}}r+=t[i]}return r.length>0&&e.push({text:r,color:n}),e}var Gx=`
730
+ }`,nc=class{constructor(e){this.vertices=[];this.gl=e,this.program=le.create(e,{vertex:Kx,fragment:Yx},{a_position:0,a_color:1}),this.uniformViewProjection=this.program.getUniformLocation("u_viewProjection"),this.vao=new Le(e),this.vbo=new Ae(e,e.STREAM_DRAW),this.vao.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:28,offset:0},{index:1,size:4,type:e.FLOAT,stride:28,offset:12}],this.vbo)}get shaderSize(){return this.program.sourceSize}addLine(e,r,n={r:1,g:0,b:0,a:1}){this.vertices.push(e.x,e.y,e.z,n.r,n.g,n.b,n.a,r.x,r.y,r.z,n.r,n.g,n.b,n.a)}addBBox(e,r,n={r:0,g:1,b:0,a:1}){let i={x:e.x,y:e.y,z:e.z},o={x:r.x,y:e.y,z:e.z},a={x:r.x,y:r.y,z:e.z},s={x:e.x,y:r.y,z:e.z},c={x:e.x,y:e.y,z:r.z},l={x:r.x,y:e.y,z:r.z},d={x:r.x,y:r.y,z:r.z},f={x:e.x,y:r.y,z:r.z};this.addLine(i,o,n),this.addLine(o,a,n),this.addLine(a,s,n),this.addLine(s,i,n),this.addLine(c,l,n),this.addLine(l,d,n),this.addLine(d,f,n),this.addLine(f,c,n),this.addLine(i,c,n),this.addLine(o,l,n),this.addLine(a,d,n),this.addLine(s,f,n)}clear(){this.vertices=[]}render(e){this.vertices.length!==0&&(this.program.use(),this.gl.uniformMatrix4fv(this.uniformViewProjection,!1,e),this.vbo.upload(new Float32Array(this.vertices),this.gl.STREAM_DRAW),this.vao.bind(),this.gl.drawArrays(this.gl.LINES,0,this.vertices.length/7))}};function qx(t,e){let r=t.models[0].headNode;for(;r>=0;){let i=t.nodes[r],o=t.planes[i.planeIndex];o.normal[0]*e.x+o.normal[1]*e.y+o.normal[2]*e.z-o.dist>=0?r=i.children[0]:r=i.children[1]}let n=-(r+1);return{leaf:t.leafs[n],index:n}}function Zx(t){if(t.entities.worldspawn?.properties.light){let e=parseInt(t.entities.worldspawn.properties.light,10);if(!isNaN(e))return e/255}if(t.entities.worldspawn?.properties._minlight){let e=parseInt(t.entities.worldspawn.properties._minlight,10);if(!isNaN(e))return e/255}return .2}function jx(t,e,r,n){let i=t.faces[e];if(!i||i.lightOffset<0||!t.lightMapInfo[e])return 0;let a=t.texInfo[i.texInfo],s=1/0,c=-1/0,l=1/0,d=-1/0,f=i.firstEdge;for(let E=0;E<i.numEdges;E++){let T=t.surfEdges[f+E],M=T>=0?t.edges[T].vertices[0]:t.edges[Math.abs(T)].vertices[1],C=t.vertices[M],B=C[0]*a.s[0]+C[1]*a.s[1]+C[2]*a.s[2]+a.sOffset,F=C[0]*a.t[0]+C[1]*a.t[1]+C[2]*a.t[2]+a.tOffset;B<s&&(s=B),B>c&&(c=B),F<l&&(l=F),F>d&&(d=F)}let u=Math.floor(s/16),h=Math.floor(l/16),m=Math.ceil(c/16)-u+1,g=Math.ceil(d/16)-h+1,p=r/16-u,y=n/16-h,v=Math.max(0,Math.min(m-1,Math.floor(p))),x=Math.max(0,Math.min(g-1,Math.floor(y))),b=i.lightOffset+(x*m+v)*3;if(b+2>=t.lightMaps.length)return 0;let _=t.lightMaps[b],w=t.lightMaps[b+1],S=t.lightMaps[b+2];return Math.max(_,w,S)/255}function km(t,e){if(!t)return 1;let r=Zx(t),n={x:e.x,y:e.y,z:e.z-8192},i=1,o=-1,a=0,s=0,{leaf:c,index:l}=qx(t,e);if(c.contents&1)return r;let d=t.leafLists.leafFaces[l];if(d)for(let f of d){let u=t.faces[f],h=t.planes[u.planeIndex],m=u.side,g=m?-h.normal[0]:h.normal[0],p=m?-h.normal[1]:h.normal[1],y=m?-h.normal[2]:h.normal[2],v=m?-h.dist:h.dist;if(y>.7){let x=g*e.x+p*e.y+y*e.z-v;if(x>=0&&x<64){let b=t.texInfo[u.texInfo],_=e.x*b.s[0]+e.y*b.s[1]+e.z*b.s[2]+b.sOffset,w=e.x*b.t[0]+e.y*b.t[1]+e.z*b.t[2]+b.tOffset,S=jx(t,f,_,w);if(S>r)return S}}}return Math.max(r,.2)}var ic=class{constructor(e){this.activeQueries=[];this.queryPool=[];this.currentQuery=null;this.lastGpuTimeMs=0;this.frameStartTime=0;this.lastCpuFrameTimeMs=0;this.textureMemoryBytes=0;this.bufferMemoryBytes=0;this.shaderMemoryBytes=0;this.gl=e,this.ext=e.getExtension("EXT_disjoint_timer_query_webgl2")}get available(){return!!this.ext}getPerformanceReport(e){let r=this.textureMemoryBytes/1048576,n=this.bufferMemoryBytes/(1024*1024);return{frameTimeMs:this.lastCpuFrameTimeMs,gpuTimeMs:this.lastGpuTimeMs,cpuFrameTimeMs:this.lastCpuFrameTimeMs,drawCalls:e.drawCalls,triangles:Math.floor(e.vertexCount/3),vertices:e.vertexCount,textureBinds:e.batches,shaderSwitches:e.shaderSwitches,visibleSurfaces:e.visibleSurfaces,culledSurfaces:e.culledSurfaces,visibleEntities:e.visibleEntities,culledEntities:e.culledEntities,memoryUsageMB:{textures:r,geometry:n,total:r+n}}}startFrame(){if(this.frameStartTime=performance.now(),!this.ext||this.currentQuery)return;let e=this.getQuery();e&&(this.gl.beginQuery(this.ext.TIME_ELAPSED_EXT,e),this.currentQuery=e)}endFrame(){this.lastCpuFrameTimeMs=performance.now()-this.frameStartTime,!(!this.ext||!this.currentQuery)&&(this.gl.endQuery(this.ext.TIME_ELAPSED_EXT),this.activeQueries.push(this.currentQuery),this.currentQuery=null,this.pollQueries())}trackTextureMemory(e){this.textureMemoryBytes+=e}trackBufferMemory(e){this.bufferMemoryBytes+=e}trackShaderMemory(e){this.shaderMemoryBytes+=e}getMemoryUsage(){let e=this.textureMemoryBytes,r=this.bufferMemoryBytes,n=this.shaderMemoryBytes,i=this.bufferMemoryBytes,o=e+r+n;return{texturesBytes:e,geometryBytes:r,shadersBytes:n,buffersBytes:i,totalBytes:o}}getQuery(){return this.queryPool.length>0?this.queryPool.pop():this.gl.createQuery()}pollQueries(){if(this.activeQueries.length===0)return;let e=this.activeQueries[0],r=this.gl.getQueryParameter(e,this.gl.QUERY_RESULT_AVAILABLE),n=this.gl.getParameter(this.ext.GPU_DISJOINT_EXT);if(r)if(n)this.activeQueries.forEach(i=>this.queryPool.push(i)),this.activeQueries.length=0;else{let i=this.gl.getQueryParameter(e,this.gl.QUERY_RESULT);this.lastGpuTimeMs=i/1e6,this.activeQueries.shift(),this.queryPool.push(e)}}dispose(){[...this.activeQueries,...this.queryPool].forEach(e=>this.gl.deleteQuery(e)),this.activeQueries.length=0,this.queryPool.length=0}};var Dm={1:[1,0,0,1],2:[0,1,0,1],3:[1,1,0,1],4:[0,0,1,1],5:[0,1,1,1],6:[1,0,1,1],7:[1,1,1,1],0:[0,0,0,1]};function zm(t){let e=[],r="",n;for(let i=0;i<t.length;i++){if(t[i]==="^"&&i+1<t.length){let o=t[i+1];if(Dm[o]){r.length>0&&(e.push({text:r,color:n}),r=""),n=Dm[o],i++;continue}}r+=t[i]}return r.length>0&&e.push({text:r,color:n}),e}var Qx=`
731
731
  attribute vec3 a_position;
732
732
  attribute vec3 a_color;
733
733
  uniform mat4 u_viewProjection;
@@ -737,14 +737,14 @@ void main() {
737
737
  gl_Position = u_viewProjection * vec4(a_position, 1.0);
738
738
  v_color = a_color;
739
739
  }
740
- `,Wx=`
740
+ `,Jx=`
741
741
  precision mediump float;
742
742
  varying vec3 v_color;
743
743
 
744
744
  void main() {
745
745
  gl_FragColor = vec4(v_color, 1.0);
746
746
  }
747
- `,Xx=`
747
+ `,ev=`
748
748
  attribute vec3 a_position;
749
749
  attribute vec3 a_color;
750
750
  attribute vec3 a_normal;
@@ -760,7 +760,7 @@ void main() {
760
760
  v_color = a_color;
761
761
  v_normal = a_normal;
762
762
  }
763
- `,Kx=`
763
+ `,tv=`
764
764
  precision mediump float;
765
765
  varying vec3 v_color;
766
766
  varying vec3 v_normal;
@@ -779,11 +779,14 @@ void main() {
779
779
 
780
780
  gl_FragColor = vec4(color, 1.0);
781
781
  }
782
- `;function ac(t){return R.fromValues(t.x,t.y,t.z)}function tr(t){return{x:t[0],y:t[1],z:t[2]}}var oc=class{constructor(e){this.vertices=[];this.solidVertices=[];this.labels=[];this.gl=e,this.shader=le.create(e,{vertex:Gx,fragment:Wx}),this.vao=new Ee(e),this.vbo=new Ae(e,e.DYNAMIC_DRAW),this.vao.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:24,offset:0},{index:1,size:3,type:e.FLOAT,stride:24,offset:12}],this.vbo),this.shaderSolid=le.create(e,{vertex:Xx,fragment:Kx}),this.vaoSolid=new Ee(e),this.vboSolid=new Ae(e,e.DYNAMIC_DRAW),this.vaoSolid.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:36,offset:0},{index:1,size:3,type:e.FLOAT,stride:36,offset:12},{index:2,size:3,type:e.FLOAT,stride:36,offset:24}],this.vboSolid)}get shaderSize(){return this.shader.sourceSize+this.shaderSolid.sourceSize}drawLine(e,r,n){this.vertices.push(e.x,e.y,e.z,n.r,n.g,n.b,r.x,r.y,r.z,n.r,n.g,n.b)}drawBoundingBox(e,r,n){let{x:i,y:a,z:o}=e,{x:s,y:c,z:l}=r;this.drawLine({x:i,y:a,z:o},{x:s,y:a,z:o},n),this.drawLine({x:s,y:a,z:o},{x:s,y:c,z:o},n),this.drawLine({x:s,y:c,z:o},{x:i,y:c,z:o},n),this.drawLine({x:i,y:c,z:o},{x:i,y:a,z:o},n),this.drawLine({x:i,y:a,z:l},{x:s,y:a,z:l},n),this.drawLine({x:s,y:a,z:l},{x:s,y:c,z:l},n),this.drawLine({x:s,y:c,z:l},{x:i,y:c,z:l},n),this.drawLine({x:i,y:c,z:l},{x:i,y:a,z:l},n),this.drawLine({x:i,y:a,z:o},{x:i,y:a,z:l},n),this.drawLine({x:s,y:a,z:o},{x:s,y:a,z:l},n),this.drawLine({x:s,y:c,z:o},{x:s,y:c,z:l},n),this.drawLine({x:i,y:c,z:o},{x:i,y:c,z:l},n)}drawPoint(e,r,n){let i=r/2;this.drawBoundingBox({x:e.x-i,y:e.y-i,z:e.z-i},{x:e.x+i,y:e.y+i,z:e.z+i},n)}drawAxes(e,r){this.drawLine(e,{x:e.x+r,y:e.y,z:e.z},{r:1,g:0,b:0}),this.drawLine(e,{x:e.x,y:e.y+r,z:e.z},{r:0,g:1,b:0}),this.drawLine(e,{x:e.x,y:e.y,z:e.z+r},{r:0,g:0,b:1})}drawText3D(e,r){this.labels.push({text:e,position:r})}addTriangle(e,r,n,i,a){this.solidVertices.push(e.x,e.y,e.z),this.solidVertices.push(a.r,a.g,a.b),this.solidVertices.push(i.x,i.y,i.z),this.solidVertices.push(r.x,r.y,r.z),this.solidVertices.push(a.r,a.g,a.b),this.solidVertices.push(i.x,i.y,i.z),this.solidVertices.push(n.x,n.y,n.z),this.solidVertices.push(a.r,a.g,a.b),this.solidVertices.push(i.x,i.y,i.z)}addCone(e,r,n,i){let o=ac(e),s=ac(r),c=R.create();R.subtract(c,o,s),R.normalize(c,c);let l=R.fromValues(0,0,1);Math.abs(R.dot(c,l))>.99&&(l=R.fromValues(0,1,0));let d=R.create();R.cross(d,l,c),R.normalize(d,d);let f=R.create();R.cross(f,c,d);let u=[];for(let p=0;p<16;p++){let y=p/16*Math.PI*2,v=Math.cos(y)*n,x=Math.sin(y)*n,b=R.clone(s);R.scaleAndAdd(b,b,d,v),R.scaleAndAdd(b,b,f,x),u.push(b)}let h=R.clone(c);R.scale(h,h,-1);let m=tr(h),g=r;for(let p=0;p<16;p++){let y=tr(u[p]),v=tr(u[(p+1)%16]);this.addTriangle(g,v,y,m,i)}for(let p=0;p<16;p++){let y=u[p],v=u[(p+1)%16],x=tr(y),b=tr(v),_=R.create();R.subtract(_,v,y);let w=R.create();R.subtract(w,o,y);let S=R.create();R.cross(S,_,w),R.normalize(S,S);let E=tr(S);this.addTriangle(x,b,e,E,i)}}addTorus(e,r,n,i,a={x:0,y:0,z:1}){let c=ac(a);R.normalize(c,c);let l=ac(e),d=R.fromValues(0,0,1),f=j.create();if(Math.abs(R.dot(c,d))>.999)c[2]<0&&j.rotateX(f,f,Math.PI);else{let m=R.create();R.cross(m,d,c),R.normalize(m,m);let g=Math.acos(R.dot(d,c));j.fromRotation(f,g,m)}let u=[],h=[];for(let m=0;m<=16;m++){let g=m/16*Math.PI*2,p=Math.cos(g),y=Math.sin(g),v=[],x=[];for(let b=0;b<=8;b++){let _=b/8*Math.PI*2,w=Math.cos(_),S=Math.sin(_),E=(r+n*w)*p,L=(r+n*w)*y,M=n*S,C=R.fromValues(E,L,M),I=w*p,B=w*y,F=S,U=R.fromValues(I,B,F);R.transformMat4(C,C,f),R.transformMat4(U,U,f),R.add(C,C,l),v.push(C),x.push(U)}u.push(v),h.push(x)}for(let m=0;m<16;m++)for(let g=0;g<8;g++){let p=u[m][g],y=u[m+1][g],v=u[m+1][g+1],x=u[m][g+1],b=tr(p),_=tr(y),w=tr(v),S=tr(x),E=R.create();R.subtract(E,y,p);let L=R.create();R.subtract(L,v,p);let M=R.create();R.cross(M,E,L),R.normalize(M,M),this.addTriangle(b,_,w,tr(M),i);let C=R.create();R.subtract(C,v,p);let I=R.create();R.subtract(I,x,p);let B=R.create();R.cross(B,C,I),R.normalize(B,B),this.addTriangle(b,w,S,tr(B),i)}}render(e,r=!1){if(r&&this.gl.disable(this.gl.DEPTH_TEST),this.vertices.length>0){this.shader.use();let n=this.shader.getUniformLocation("u_viewProjection");n&&this.gl.uniformMatrix4fv(n,!1,e),this.vbo.upload(new Float32Array(this.vertices)),this.vao.bind(),this.gl.drawArrays(this.gl.LINES,0,this.vertices.length/6)}if(this.solidVertices.length>0){this.shaderSolid.use();let n=this.shaderSolid.getUniformLocation("u_viewProjection");n&&this.gl.uniformMatrix4fv(n,!1,e);let i=this.shaderSolid.getUniformLocation("u_lightingEnabled");i&&this.gl.uniform1i(i,1),this.vboSolid.upload(new Float32Array(this.solidVertices)),this.vaoSolid.bind(),this.gl.drawArrays(this.gl.TRIANGLES,0,this.solidVertices.length/9)}r&&this.gl.enable(this.gl.DEPTH_TEST)}getLabels(e,r,n){let i=[];for(let a of this.labels){let o=ga.fromValues(a.position.x,a.position.y,a.position.z,1),s=ga.create(),l=e,d=o[0],f=o[1],u=o[2],h=o[3];if(s[0]=l[0]*d+l[4]*f+l[8]*u+l[12]*h,s[1]=l[1]*d+l[5]*f+l[9]*u+l[13]*h,s[2]=l[2]*d+l[6]*f+l[10]*u+l[14]*h,s[3]=l[3]*d+l[7]*f+l[11]*u+l[15]*h,s[3]>0){let m=s[0]/s[3],g=s[1]/s[3],p=(m+1)*.5*r,y=(1-g)*.5*n;p>=0&&p<=r&&y>=0&&y<=n&&i.push({text:a.text,x:p,y})}}return i}clear(){this.vertices=[],this.solidVertices=[],this.labels=[]}};function Im(t,e,r,n=32){let i=[];for(let s of t){let c=!0;for(let l of e)if(l.normal.x*s.origin.x+l.normal.y*s.origin.y+l.normal.z*s.origin.z+l.distance<-s.intensity){c=!1;break}if(c){let l=0;if(r){let d=s.origin.x-r.x,f=s.origin.y-r.y,u=s.origin.z-r.z;l=d*d+f*f+u*u}i.push({light:s,distSq:l})}}r&&i.sort((s,c)=>s.distSq-c.distSq);let a=[],o=Math.min(i.length,n);for(let s=0;s<o;s++)a.push(i[s].light);return a}function mu(t){let e=(t*1664525+1013904223>>>0)/4294967296,r=(t*25214903917+11>>>0)/4294967296,n=(t*69069+1>>>0)/4294967296;return[e,r,n,1]}var Bm=t=>{let e=new fa(t),r=new ha(t),n=new pa(t),i=new va(t),a=new wa(t),o=new nc(t),s=new oc(t),c=new ic(t),l=new uf({seed:Date.now()}),d=new _a(4096,l),f=new Sa(t,d),u=e.shaderSize+r.shaderSize+n.shaderSize+i.shaderSize+a.shaderSize+o.shaderSize+s.shaderSize+f.shaderSize;c.trackShaderMemory(u);let h=new Map,m=new Map,g=new Map,p=new Map,y=0,v=600,x=300,b=null,_={drawCalls:0,vertexCount:0,batches:0,shaderSwitches:0,visibleSurfaces:0,culledSurfaces:0,visibleEntities:0,culledEntities:0},w=new Map,S=new Map,E=0,L=1,M=1,C=!1,I=0,B=new Map,F=!1,U=!1,ce=.5,Nt=1,Ct=new Array(1024).fill(!0),zr=Tm(t,e,r),on=1e4,dt=[],et=0,Ht=Jl.create(),Gn=R.create(),sn=R.create();for(let A=0;A<on;A++){let K={id:-1,model:void 0,transform:new Float32Array(16),type:"md3",blend:{frame0:0,frame1:0,lerp:0},tint:[1,1,1,1],lighting:{ambient:[.5,.5,.5],dynamicLights:[],modelMatrix:void 0}};K.lighting&&(K.lighting.modelMatrix=K.transform),dt.push(K)}let Or=[],Ur,Nr,k,oe=(A,K)=>{if(A.type==="md2"){let ie=A.model;if(!ie.lods||ie.lods.length===0)return{model:A.model,type:A.type};let de=A.transform[12]-K.x,re=A.transform[13]-K.y,pe=A.transform[14]-K.z,Ke=Math.sqrt(de*de+re*re+pe*pe),Pt=Math.floor(Ke*Nt/500);if(Pt<=0)return{model:A.model,type:A.type};let Pe=ie.lods,Wt=Math.min(Pt-1,Pe.length-1);return{model:Pe[Wt],type:A.type}}return{model:A.model,type:A.type}},Ce=(A,K,ie)=>{c.startFrame(),y++;let de=Or.length>0?[...K,...Or]:K;Or.length=0,et=0,A.deltaTime&&d.update(A.deltaTime),t.disable(t.BLEND),t.enable(t.DEPTH_TEST),t.depthMask(!0);let pe=A.renderMode,Ke=!1;ie?.wireframe||E===6?pe={mode:"wireframe",applyToAll:!0,color:[1,1,1,1]}:E===5&&(Ke=!0);let Pt=A.sky;ie?.showSkybox===!1&&(Pt=void 0);let Pe=new Float32Array(A.camera.viewProjectionMatrix),Wt=kn(Pe),It=A.dlights?Im(A.dlights,Wt,{x:A.camera.position[0],y:A.camera.position[1],z:A.camera.position[2]},32):void 0,za={...A,sky:Pt,renderMode:pe,disableLightmaps:ie?.showLightmaps===!1&&E!==5,dlights:It,lightmapOnly:Ke,brightness:L,gamma:M,fullbright:C,ambient:I,lightStyleOverrides:B,underwaterWarp:F,bloom:U,bloomIntensity:ce,portalState:Ct},Rs=zr.renderFrame(za),tf=Rs.facesDrawn||0,rf=0;A.world&&A.world.map&&A.world.map.faces&&(rf=A.world.map.faces.length);let mp=rf-tf,Cc=-1,Pc=-1,Ic=null;if(A.world&&ie?.cullingEnabled!==!1){let z={x:A.camera.position[0],y:A.camera.position[1],z:A.camera.position[2]},ke=bi(A.world.map,z);if(ke>=0){let ut=A.world.map.leafs[ke];Cc=ut.cluster,Pc=ut.area,Pc>=0&&A.world.map.areas.length>0&&(Ic=kd(A.world.map,Pc,Ct))}}let Cs,Oa=0,Bc=0,nf=0,Ps=0,pp={x:A.camera.position[0],y:A.camera.position[1],z:A.camera.position[2]};if(y%v===0)for(let[z,ke]of p)y-ke.lastFrameSeen>x&&p.delete(z);for(let z of de){if(A.world&&Cc>=0){let Q={x:z.transform[12],y:z.transform[13],z:z.transform[14]},O=-1;if(z.id!==void 0){let Y=p.get(z.id);Y&&Y.position[12]===z.transform[12]&&Y.position[13]===z.transform[13]&&Y.position[14]===z.transform[14]?(O=Y.leafIndex,Y.lastFrameSeen=y):(O=bi(A.world.map,Q),O>=0&&p.set(z.id,{leafIndex:O,position:new Float32Array(z.transform),lastFrameSeen:y}))}else O=bi(A.world.map,Q);if(O>=0){let Y=A.world.map.leafs[O],Xt=Y.cluster,ze=Y.area;if(Ic&&ze>=0&&!Ic.has(ze)){Ps++;continue}if(!Fd(A.world.map.visibility,Cc,Xt)){Ps++;continue}}}let{model:ke,type:ut}=oe(z,pp),De,ve;if(ut==="md2"){let Q=ke,O=Q.frames[z.blend.frame0%Q.frames.length],Y=Q.frames[z.blend.frame1%Q.frames.length];O&&Y&&(De={x:Math.min(O.minBounds.x,Y.minBounds.x),y:Math.min(O.minBounds.y,Y.minBounds.y),z:Math.min(O.minBounds.z,Y.minBounds.z)},ve={x:Math.max(O.maxBounds.x,Y.maxBounds.x),y:Math.max(O.maxBounds.y,Y.maxBounds.y),z:Math.max(O.maxBounds.z,Y.maxBounds.z)})}else if(ut==="md3"){let Q=ke,O=Q.frames[z.blend.frame0%Q.frames.length],Y=Q.frames[z.blend.frame1%Q.frames.length];O&&Y?(De={x:Math.min(O.minBounds.x,Y.minBounds.x),y:Math.min(O.minBounds.y,Y.minBounds.y),z:Math.min(O.minBounds.z,Y.minBounds.z)},ve={x:Math.max(O.maxBounds.x,Y.maxBounds.x),y:Math.max(O.maxBounds.y,Y.maxBounds.y),z:Math.max(O.maxBounds.z,Y.maxBounds.z)}):(De={x:-32,y:-32,z:-32},ve={x:32,y:32,z:32})}if(De&&ve){let Q=Ch(De,ve,z.transform);if(!yi(Q.mins,Q.maxs,Wt)){Ps++;continue}}nf++;let ar={x:z.transform[12],y:z.transform[13],z:z.transform[14]},Ye=Rm(A.world?.map,ar),Le=z.id!==void 0?w.get(z.id):void 0;switch(ut){case"md2":{let Q=ke,O=m.get(Q);if(O)O.update(Q,z.blend);else{O=new ma(t,Q,z.blend),m.set(Q,O);let Oe=O.geometry.vertices.length*8*4,cn=O.geometry.indices.length*2;c.trackBufferMemory(Oe+cn)}let Y=Oc(Pe,z.transform),Xt=z.skin,ze=Xt?A.world?.textures?.get(Xt):void 0;ze&&ze!==Cs&&(ze.bind(0),Cs=ze);let Kt=pe;if(Kt&&!Kt.applyToAll&&ze&&(Kt=void 0),Kt?.generateRandomColor&&z.id!==void 0){let Oe=mu(z.id);Kt={...Kt,color:Oe}}if(n.bind({modelViewProjection:Y,modelMatrix:z.transform,ambientLight:Ye,dlights:A.dlights,renderMode:Kt,tint:z.tint,brightness:L,gamma:M,fullbright:C,ambient:I}),n.draw(O,Kt),Oa++,Bc+=O.geometry.vertices.length,Le){let Oe={mode:"wireframe",applyToAll:!0,color:Le};n.bind({modelViewProjection:Y,modelMatrix:z.transform,ambientLight:1,renderMode:Oe,tint:[1,1,1,1],brightness:1,gamma:1,fullbright:!0,ambient:0}),n.draw(O,Oe),Oa++}}break;case"md3":{let Q=ke,O=h.get(Q),Y=z,Xt=A.dlights?A.dlights.map(Oe=>({origin:Oe.origin,color:[Oe.color.x,Oe.color.y,Oe.color.z],radius:Oe.intensity})):void 0,ze={...Y.lighting,ambient:[Ye,Ye,Ye],dynamicLights:Xt,modelMatrix:z.transform};O?O.update(z.blend,ze):(O=new xa(t,Q,z.blend,ze),h.set(Q,O));let Kt=Oc(Pe,z.transform);i.bind(Kt);for(let Oe of Q.surfaces){let cn=O.surfaces.get(Oe.name);if(cn){let of=Y.skins?.get(Oe.name),Ua=of?A.world?.textures?.get(of):void 0;Ua&&Ua!==Cs&&(Ua.bind(0),Cs=Ua);let Kn=pe;if(Kn&&!Kn.applyToAll&&Ua&&(Kn=void 0),Kn?.generateRandomColor&&z.id!==void 0){let sf=mu(z.id);Kn={...Kn,color:sf}}let gp={renderMode:Kn,brightness:L,gamma:M,fullbright:C,globalAmbient:I};if(i.drawSurface(cn,gp),Oa++,Bc+=cn.geometry.vertices.length,Le){let yp={renderMode:{mode:"wireframe",applyToAll:!0,color:Le},brightness:1,gamma:1,fullbright:!0,globalAmbient:0};i.drawSurface(cn,yp),Oa++}}}}break}}let Xn=A.camera.viewMatrix;if(Xn){let z={x:Xn[0],y:Xn[4],z:Xn[8]},ke={x:Xn[1],y:Xn[5],z:Xn[9]};f.render({viewProjection:Pe,viewRight:z,viewUp:ke})}if(za.waterTint&&(Ur(),k(0,0,t.canvas.width,t.canvas.height,za.waterTint),Nr()),o.render(Pe),o.clear(),A.world&&(S.size>0||E===3)){let z=new Map(S);if(E===3&&A.world){let ke=kn(Pe),ut={x:A.camera.position[0],y:A.camera.position[1],z:A.camera.position[2]},De=xi(A.world.map,ut,ke,Ct);for(let{faceIndex:ve,leafIndex:ar}of De){let Ye=A.world.map.leafs[ar];Ye&&!z.has(ve)&&z.set(ve,mu(Ye.cluster))}}for(let[ke,ut]of z){let De=A.world.surfaces[ke];if(De&&De.vertexCount>0){let ve=[];for(let Le=0;Le<De.vertexCount;Le++)ve.push({x:De.vertexData[Le*7],y:De.vertexData[Le*7+1],z:De.vertexData[Le*7+2]});let Ye={r:ut[0],g:ut[1],b:ut[2]};for(let Le=0;Le<ve.length;Le++){let Q=ve[Le],O=ve[(Le+1)%ve.length];s.drawLine(Q,O,Ye)}s.drawLine(ve[0],ve[ve.length/2|0],Ye)}}}if((ie?.showNormals||E===2)&&A.world){let z=kn(Pe),ke={x:A.camera.position[0],y:A.camera.position[1],z:A.camera.position[2]},ut=xi(A.world.map,ke,z,Ct);for(let{faceIndex:De}of ut){let ve=A.world.map.faces[De],ar=A.world.map.planes[ve.planeIndex],Ye=A.world.surfaces[De];if(!Ye)continue;let Le=0,Q=0,O=0,Y=Ye.vertexCount;for(let Xt=0;Xt<Y;Xt++){let ze=Xt*7;Le+=Ye.vertexData[ze],Q+=Ye.vertexData[ze+1],O+=Ye.vertexData[ze+2]}if(Y>0){Le/=Y,Q/=Y,O/=Y;let Xt=ve.side===0?ar.normal[0]:-ar.normal[0],ze=ve.side===0?ar.normal[1]:-ar.normal[1],Kt=ve.side===0?ar.normal[2]:-ar.normal[2],Oe={x:Le,y:Q,z:O},cn={x:Le+Xt*8,y:Q+ze*8,z:O+Kt*8};s.drawLine(Oe,cn,{r:1,g:1,b:0})}}}s.render(Pe);let af=s.getLabels(Pe,t.canvas.width,t.canvas.height);if(af.length>0){Ur();for(let z of af)Ti(z.x,z.y,z.text,[1,1,1,1]);Nr()}s.clear(),_={drawCalls:Rs.drawCalls+Oa,vertexCount:Rs.vertexCount+Bc,batches:Rs.batches,shaderSwitches:0,visibleSurfaces:tf,culledSurfaces:mp,visibleEntities:nf,culledEntities:Ps},c.endFrame()},Re=async(A,K)=>{if(g.has(A))return g.get(A);let ie=new Blob([K]),de=await createImageBitmap(ie),re=new Je(t);return re.upload(de.width,de.height,de),g.set(A,re),c.trackTextureMemory(de.width*de.height*4),A.includes("conchars")&&(b=re),re},ir=(A,K)=>{if(g.has(A))return g.get(A);let ie=new Je(t),de=K.levels[0];return ie.upload(de.width,de.height,de.rgba),g.set(A,ie),c.trackTextureMemory(de.width*de.height*4),A.includes("conchars")&&(b=ie),ie};Ur=()=>{t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA),t.disable(t.DEPTH_TEST),t.depthMask(!1);let A=j.create();j.ortho(A,0,t.canvas.width,t.canvas.height,0,-1,1),a.begin(A)},Nr=()=>{t.disable(t.BLEND),t.enable(t.DEPTH_TEST),t.depthMask(!0)};let Vt=(A,K,ie,de)=>{ie.bind(0),a.draw(A,K,ie.width,ie.height,0,0,1,1,de)},ln=(A,K,ie,de)=>{if(!b)return;let re=8,pe=8,Ke=b.width/re,Pt=ie&255,Pe=Pt%Ke*re/b.width,Wt=Math.floor(Pt/Ke)*pe/b.height,It=Pe+re/b.width,za=Wt+pe/b.height;b.bind(0),a.draw(A,K,re,pe,Pe,Wt,It,za,de)},Ti=(A,K,ie,de)=>{let re=Pm(ie),pe=A,Ke=8;for(let Pt of re){let Pe=Pt.color||de;for(let Wt=0;Wt<Pt.text.length;Wt++)ln(pe,K,Pt.text.charCodeAt(Wt),Pe),pe+=Ke}},Gt=(A,K)=>{let re=K.replace(/\^[0-9]/g,"").length*8,pe=(t.canvas.width-re)/2;Ti(pe,A,K)};return k=(A,K,ie,de,re)=>{a.drawRect(A,K,ie,de,re)},{get width(){return t.canvas.width},get height(){return t.canvas.height},get collisionVis(){return o},get debug(){return s},get particleSystem(){return d},getPerformanceReport:()=>c.getPerformanceReport(_),getMemoryUsage:()=>c.getMemoryUsage(),renderFrame:Ce,registerPic:Re,registerTexture:ir,begin2D:Ur,end2D:Nr,drawPic:Vt,drawString:Ti,drawCenterString:Gt,drawfillRect:k,setEntityHighlight:(A,K)=>{w.set(A,K)},clearEntityHighlight:A=>{w.delete(A)},highlightSurface:(A,K)=>{S.set(A,K)},removeSurfaceHighlight:A=>{S.delete(A)},setDebugMode:A=>{E=A},setBrightness:A=>{L=Math.max(0,Math.min(2,A))},setGamma:A=>{M=Math.max(.5,Math.min(3,A))},setFullbright:A=>{C=A},setAmbient:A=>{I=Math.max(0,Math.min(1,A))},setLightStyle:(A,K)=>{K===null?B.delete(A):B.set(A,K)},setUnderwaterWarp:A=>{F=A},setBloom:A=>{U=A},setBloomIntensity:A=>{ce=A},setLodBias:A=>{Nt=Math.max(0,Math.min(2,A))},setAreaPortalState:(A,K)=>{A>=0&&A<Ct.length&&(Ct[A]=K)},renderInstanced:(A,K)=>{let ie="glCommands"in A,de=ie?"md2":"md3";for(let re of K){if(et>=on){console.warn("Max instances reached");break}let pe=dt[et++];pe.model=A,pe.type=de;let Ke=pe.blend;re.frame!==void 0?(Ke.frame0=re.frame,Ke.frame1=re.frame,Ke.lerp=0):(Ke.frame0=re.frame0||0,Ke.frame1=re.frame1||0,Ke.lerp=re.lerp||0),ie&&(pe.skin=re.skin!==void 0?"skin"+re.skin:void 0);let Pt=re.rotation,Pe=re.position,Wt=re.scale||{x:1,y:1,z:1};j.fromRotationTranslationScale(pe.transform,Ht,Gn,sn);let It=pe.lighting;It&&(It.dynamicLights?It.dynamicLights.length=0:It.dynamicLights=[],It.ambient?(It.ambient[0]=.5,It.ambient[1]=.5,It.ambient[2]=.5):It.ambient=[.5,.5,.5]),Or.push(pe)}},dispose:()=>{c.dispose()}}};var fr=class{constructor(e){this.messageOffsets=[];this.currentBlock=null;this.buffer=e,this.view=new DataView(e),this.offset=0,this.scan()}scan(){let e=0;for(this.messageOffsets=[];e+4<=this.buffer.byteLength;){let r=this.view.getInt32(e,!0);if(r===-1)break;if(r<0||r>2097152){console.warn(`DemoReader: Invalid block length ${r} at offset ${e} during scan`);break}if(e+4+r>this.buffer.byteLength){console.warn(`DemoReader: Incomplete block at offset ${e} during scan`);break}this.messageOffsets.push(e),e+=4+r}}hasMore(){return this.offset<this.buffer.byteLength}readNextBlock(){if(this.offset+4>this.buffer.byteLength)return null;let e=this.view.getInt32(this.offset,!0);if(e===-1||e<0||this.offset+4+e>this.buffer.byteLength)return null;this.offset+=4;let r=this.buffer.slice(this.offset,this.offset+e);return this.offset+=e,{length:e,data:new mn(r)}}nextBlock(){let e=this.readNextBlock();return e?(this.currentBlock=e,!0):(this.currentBlock=null,!1)}getBlock(){if(!this.currentBlock)throw new Error("No current block. Call nextBlock() first.");return this.currentBlock}readAllBlocksToBuffer(){let e=0,r=this.offset,n=[],i=this.offset;for(;i+4<=this.buffer.byteLength;){let c=this.view.getInt32(i,!0);if(c===-1||c<0||i+4+c>this.buffer.byteLength)break;n.push({offset:i+4,length:c}),e+=c,i+=4+c}let a=new Uint8Array(e),o=0,s=new Uint8Array(this.buffer);for(let c of n)a.set(s.subarray(c.offset,c.offset+c.length),o),o+=c.length;return this.offset=i,a.buffer}reset(){this.offset=0,this.currentBlock=null}seekToMessage(e){return e<0||e>=this.messageOffsets.length?!1:(this.offset=this.messageOffsets[e],this.currentBlock=null,!0)}getMessageCount(){return this.messageOffsets.length}getOffset(){return this.offset}getProgress(){let e=this.offset,r=this.buffer.byteLength;return{current:e,total:r,percent:r>0?e/r*100:0}}};function Ra(t){let e=t.length;for(;--e>=0;)t[e]=0}var Yx=0,b0=1,$x=2,qx=3,Zx=258,Ou=29,xs=256,us=xs+1+Ou,Ea=30,Uu=19,x0=2*us+1,vi=15,pu=16,jx=7,Nu=256,v0=16,_0=17,S0=18,Ru=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]),fc=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]),Qx=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),w0=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Jx=512,nn=new Array((us+2)*2);Ra(nn);var ls=new Array(Ea*2);Ra(ls);var fs=new Array(Jx);Ra(fs);var hs=new Array(Zx-qx+1);Ra(hs);var Hu=new Array(Ou);Ra(Hu);var hc=new Array(Ea);Ra(hc);function gu(t,e,r,n,i){this.static_tree=t,this.extra_bits=e,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=t&&t.length}var M0,A0,E0;function yu(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}var L0=t=>t<256?fs[t]:fs[256+(t>>>7)],ms=(t,e)=>{t.pending_buf[t.pending++]=e&255,t.pending_buf[t.pending++]=e>>>8&255},Rt=(t,e,r)=>{t.bi_valid>pu-r?(t.bi_buf|=e<<t.bi_valid&65535,ms(t,t.bi_buf),t.bi_buf=e>>pu-t.bi_valid,t.bi_valid+=r-pu):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=r)},Ir=(t,e,r)=>{Rt(t,r[e*2],r[e*2+1])},T0=(t,e)=>{let r=0;do r|=t&1,t>>>=1,r<<=1;while(--e>0);return r>>>1},ev=t=>{t.bi_valid===16?(ms(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=t.bi_buf&255,t.bi_buf>>=8,t.bi_valid-=8)},tv=(t,e)=>{let r=e.dyn_tree,n=e.max_code,i=e.stat_desc.static_tree,a=e.stat_desc.has_stree,o=e.stat_desc.extra_bits,s=e.stat_desc.extra_base,c=e.stat_desc.max_length,l,d,f,u,h,m,g=0;for(u=0;u<=vi;u++)t.bl_count[u]=0;for(r[t.heap[t.heap_max]*2+1]=0,l=t.heap_max+1;l<x0;l++)d=t.heap[l],u=r[r[d*2+1]*2+1]+1,u>c&&(u=c,g++),r[d*2+1]=u,!(d>n)&&(t.bl_count[u]++,h=0,d>=s&&(h=o[d-s]),m=r[d*2],t.opt_len+=m*(u+h),a&&(t.static_len+=m*(i[d*2+1]+h)));if(g!==0){do{for(u=c-1;t.bl_count[u]===0;)u--;t.bl_count[u]--,t.bl_count[u+1]+=2,t.bl_count[c]--,g-=2}while(g>0);for(u=c;u!==0;u--)for(d=t.bl_count[u];d!==0;)f=t.heap[--l],!(f>n)&&(r[f*2+1]!==u&&(t.opt_len+=(u-r[f*2+1])*r[f*2],r[f*2+1]=u),d--)}},R0=(t,e,r)=>{let n=new Array(vi+1),i=0,a,o;for(a=1;a<=vi;a++)i=i+r[a-1]<<1,n[a]=i;for(o=0;o<=e;o++){let s=t[o*2+1];s!==0&&(t[o*2]=T0(n[s]++,s))}},rv=()=>{let t,e,r,n,i,a=new Array(vi+1);for(r=0,n=0;n<Ou-1;n++)for(Hu[n]=r,t=0;t<1<<Ru[n];t++)hs[r++]=n;for(hs[r-1]=n,i=0,n=0;n<16;n++)for(hc[n]=i,t=0;t<1<<fc[n];t++)fs[i++]=n;for(i>>=7;n<Ea;n++)for(hc[n]=i<<7,t=0;t<1<<fc[n]-7;t++)fs[256+i++]=n;for(e=0;e<=vi;e++)a[e]=0;for(t=0;t<=143;)nn[t*2+1]=8,t++,a[8]++;for(;t<=255;)nn[t*2+1]=9,t++,a[9]++;for(;t<=279;)nn[t*2+1]=7,t++,a[7]++;for(;t<=287;)nn[t*2+1]=8,t++,a[8]++;for(R0(nn,us+1,a),t=0;t<Ea;t++)ls[t*2+1]=5,ls[t*2]=T0(t,5);M0=new gu(nn,Ru,xs+1,us,vi),A0=new gu(ls,fc,0,Ea,vi),E0=new gu(new Array(0),Qx,0,Uu,jx)},C0=t=>{let e;for(e=0;e<us;e++)t.dyn_ltree[e*2]=0;for(e=0;e<Ea;e++)t.dyn_dtree[e*2]=0;for(e=0;e<Uu;e++)t.bl_tree[e*2]=0;t.dyn_ltree[Nu*2]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},P0=t=>{t.bi_valid>8?ms(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},Fm=(t,e,r,n)=>{let i=e*2,a=r*2;return t[i]<t[a]||t[i]===t[a]&&n[e]<=n[r]},bu=(t,e,r)=>{let n=t.heap[r],i=r<<1;for(;i<=t.heap_len&&(i<t.heap_len&&Fm(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!Fm(e,n,t.heap[i],t.depth));)t.heap[r]=t.heap[i],r=i,i<<=1;t.heap[r]=n},km=(t,e,r)=>{let n,i,a=0,o,s;if(t.sym_next!==0)do n=t.pending_buf[t.sym_buf+a++]&255,n+=(t.pending_buf[t.sym_buf+a++]&255)<<8,i=t.pending_buf[t.sym_buf+a++],n===0?Ir(t,i,e):(o=hs[i],Ir(t,o+xs+1,e),s=Ru[o],s!==0&&(i-=Hu[o],Rt(t,i,s)),n--,o=L0(n),Ir(t,o,r),s=fc[o],s!==0&&(n-=hc[o],Rt(t,n,s)));while(a<t.sym_next);Ir(t,Nu,e)},Cu=(t,e)=>{let r=e.dyn_tree,n=e.stat_desc.static_tree,i=e.stat_desc.has_stree,a=e.stat_desc.elems,o,s,c=-1,l;for(t.heap_len=0,t.heap_max=x0,o=0;o<a;o++)r[o*2]!==0?(t.heap[++t.heap_len]=c=o,t.depth[o]=0):r[o*2+1]=0;for(;t.heap_len<2;)l=t.heap[++t.heap_len]=c<2?++c:0,r[l*2]=1,t.depth[l]=0,t.opt_len--,i&&(t.static_len-=n[l*2+1]);for(e.max_code=c,o=t.heap_len>>1;o>=1;o--)bu(t,r,o);l=a;do o=t.heap[1],t.heap[1]=t.heap[t.heap_len--],bu(t,r,1),s=t.heap[1],t.heap[--t.heap_max]=o,t.heap[--t.heap_max]=s,r[l*2]=r[o*2]+r[s*2],t.depth[l]=(t.depth[o]>=t.depth[s]?t.depth[o]:t.depth[s])+1,r[o*2+1]=r[s*2+1]=l,t.heap[1]=l++,bu(t,r,1);while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],tv(t,e),R0(r,c,t.bl_count)},Dm=(t,e,r)=>{let n,i=-1,a,o=e[1],s=0,c=7,l=4;for(o===0&&(c=138,l=3),e[(r+1)*2+1]=65535,n=0;n<=r;n++)a=o,o=e[(n+1)*2+1],!(++s<c&&a===o)&&(s<l?t.bl_tree[a*2]+=s:a!==0?(a!==i&&t.bl_tree[a*2]++,t.bl_tree[v0*2]++):s<=10?t.bl_tree[_0*2]++:t.bl_tree[S0*2]++,s=0,i=a,o===0?(c=138,l=3):a===o?(c=6,l=3):(c=7,l=4))},zm=(t,e,r)=>{let n,i=-1,a,o=e[1],s=0,c=7,l=4;for(o===0&&(c=138,l=3),n=0;n<=r;n++)if(a=o,o=e[(n+1)*2+1],!(++s<c&&a===o)){if(s<l)do Ir(t,a,t.bl_tree);while(--s!==0);else a!==0?(a!==i&&(Ir(t,a,t.bl_tree),s--),Ir(t,v0,t.bl_tree),Rt(t,s-3,2)):s<=10?(Ir(t,_0,t.bl_tree),Rt(t,s-3,3)):(Ir(t,S0,t.bl_tree),Rt(t,s-11,7));s=0,i=a,o===0?(c=138,l=3):a===o?(c=6,l=3):(c=7,l=4)}},nv=t=>{let e;for(Dm(t,t.dyn_ltree,t.l_desc.max_code),Dm(t,t.dyn_dtree,t.d_desc.max_code),Cu(t,t.bl_desc),e=Uu-1;e>=3&&t.bl_tree[w0[e]*2+1]===0;e--);return t.opt_len+=3*(e+1)+5+5+4,e},iv=(t,e,r,n)=>{let i;for(Rt(t,e-257,5),Rt(t,r-1,5),Rt(t,n-4,4),i=0;i<n;i++)Rt(t,t.bl_tree[w0[i]*2+1],3);zm(t,t.dyn_ltree,e-1),zm(t,t.dyn_dtree,r-1)},av=t=>{let e=4093624447,r;for(r=0;r<=31;r++,e>>>=1)if(e&1&&t.dyn_ltree[r*2]!==0)return 0;if(t.dyn_ltree[18]!==0||t.dyn_ltree[20]!==0||t.dyn_ltree[26]!==0)return 1;for(r=32;r<xs;r++)if(t.dyn_ltree[r*2]!==0)return 1;return 0},Om=!1,ov=t=>{Om||(rv(),Om=!0),t.l_desc=new yu(t.dyn_ltree,M0),t.d_desc=new yu(t.dyn_dtree,A0),t.bl_desc=new yu(t.bl_tree,E0),t.bi_buf=0,t.bi_valid=0,C0(t)},I0=(t,e,r,n)=>{Rt(t,(Yx<<1)+(n?1:0),3),P0(t),ms(t,r),ms(t,~r),r&&t.pending_buf.set(t.window.subarray(e,e+r),t.pending),t.pending+=r},sv=t=>{Rt(t,b0<<1,3),Ir(t,Nu,nn),ev(t)},lv=(t,e,r,n)=>{let i,a,o=0;t.level>0?(t.strm.data_type===2&&(t.strm.data_type=av(t)),Cu(t,t.l_desc),Cu(t,t.d_desc),o=nv(t),i=t.opt_len+3+7>>>3,a=t.static_len+3+7>>>3,a<=i&&(i=a)):i=a=r+5,r+4<=i&&e!==-1?I0(t,e,r,n):t.strategy===4||a===i?(Rt(t,(b0<<1)+(n?1:0),3),km(t,nn,ls)):(Rt(t,($x<<1)+(n?1:0),3),iv(t,t.l_desc.max_code+1,t.d_desc.max_code+1,o+1),km(t,t.dyn_ltree,t.dyn_dtree)),C0(t),n&&P0(t)},cv=(t,e,r)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=r,e===0?t.dyn_ltree[r*2]++:(t.matches++,e--,t.dyn_ltree[(hs[r]+xs+1)*2]++,t.dyn_dtree[L0(e)*2]++),t.sym_next===t.sym_end),dv=ov,uv=I0,fv=lv,hv=cv,mv=sv,pv={_tr_init:dv,_tr_stored_block:uv,_tr_flush_block:fv,_tr_tally:hv,_tr_align:mv},gv=(t,e,r,n)=>{let i=t&65535|0,a=t>>>16&65535|0,o=0;for(;r!==0;){o=r>2e3?2e3:r,r-=o;do i=i+e[n++]|0,a=a+i|0;while(--o);i%=65521,a%=65521}return i|a<<16|0},ps=gv,yv=()=>{let t,e=[];for(var r=0;r<256;r++){t=r;for(var n=0;n<8;n++)t=t&1?3988292384^t>>>1:t>>>1;e[r]=t}return e},bv=new Uint32Array(yv()),xv=(t,e,r,n)=>{let i=bv,a=n+r;t^=-1;for(let o=n;o<a;o++)t=t>>>8^i[(t^e[o])&255];return t^-1},Fe=xv,wi={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"},Ei={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:vv,_tr_stored_block:Pu,_tr_flush_block:_v,_tr_tally:Un,_tr_align:Sv}=pv,{Z_NO_FLUSH:Nn,Z_PARTIAL_FLUSH:wv,Z_FULL_FLUSH:Mv,Z_FINISH:rr,Z_BLOCK:Um,Z_OK:Xe,Z_STREAM_END:Nm,Z_STREAM_ERROR:Br,Z_DATA_ERROR:Av,Z_BUF_ERROR:xu,Z_DEFAULT_COMPRESSION:Ev,Z_FILTERED:Lv,Z_HUFFMAN_ONLY:sc,Z_RLE:Tv,Z_FIXED:Rv,Z_DEFAULT_STRATEGY:Cv,Z_UNKNOWN:Pv,Z_DEFLATED:gc}=Ei,Iv=9,Bv=15,Fv=8,kv=29,Dv=256,Iu=Dv+1+kv,zv=30,Ov=19,Uv=2*Iu+1,Nv=15,Z=3,On=258,Fr=On+Z+1,Hv=32,La=42,Vu=57,Bu=69,Fu=73,ku=91,Du=103,_i=113,os=666,lt=1,Ca=2,Mi=3,Pa=4,Vv=3,Si=(t,e)=>(t.msg=wi[e],e),Hm=t=>t*2-(t>4?9:0),zn=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Gv=t=>{let e,r,n,i=t.w_size;e=t.hash_size,n=e;do r=t.head[--n],t.head[n]=r>=i?r-i:0;while(--e);e=i,n=e;do r=t.prev[--n],t.prev[n]=r>=i?r-i:0;while(--e)},Wv=(t,e,r)=>(e<<t.hash_shift^r)&t.hash_mask,Hn=Wv,Ot=t=>{let e=t.state,r=e.pending;r>t.avail_out&&(r=t.avail_out),r!==0&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+r),t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,e.pending===0&&(e.pending_out=0))},Ut=(t,e)=>{_v(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,Ot(t.strm)},ne=(t,e)=>{t.pending_buf[t.pending++]=e},as=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=e&255},zu=(t,e,r,n)=>{let i=t.avail_in;return i>n&&(i=n),i===0?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),r),t.state.wrap===1?t.adler=ps(t.adler,e,i,r):t.state.wrap===2&&(t.adler=Fe(t.adler,e,i,r)),t.next_in+=i,t.total_in+=i,i)},B0=(t,e)=>{let r=t.max_chain_length,n=t.strstart,i,a,o=t.prev_length,s=t.nice_match,c=t.strstart>t.w_size-Fr?t.strstart-(t.w_size-Fr):0,l=t.window,d=t.w_mask,f=t.prev,u=t.strstart+On,h=l[n+o-1],m=l[n+o];t.prev_length>=t.good_match&&(r>>=2),s>t.lookahead&&(s=t.lookahead);do if(i=e,!(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(a=On-(u-n),n=u-On,a>o){if(t.match_start=e,o=a,a>=s)break;h=l[n+o-1],m=l[n+o]}}while((e=f[e&d])>c&&--r!==0);return o<=t.lookahead?o:t.lookahead},Ta=t=>{let e=t.w_size,r,n,i;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-Fr)&&(t.window.set(t.window.subarray(e,e+e-n),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Gv(t),n+=e),t.strm.avail_in===0)break;if(r=zu(t.strm,t.window,t.strstart+t.lookahead,n),t.lookahead+=r,t.lookahead+t.insert>=Z)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Hn(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Hn(t,t.ins_h,t.window[i+Z-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<Z)););}while(t.lookahead<Fr&&t.strm.avail_in!==0)},F0=(t,e)=>{let r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n,i,a,o=0,s=t.strm.avail_in;do{if(n=65535,a=t.bi_valid+42>>3,t.strm.avail_out<a||(a=t.strm.avail_out-a,i=t.strstart-t.block_start,n>i+t.strm.avail_in&&(n=i+t.strm.avail_in),n>a&&(n=a),n<r&&(n===0&&e!==rr||e===Nn||n!==i+t.strm.avail_in)))break;o=e===rr&&n===i+t.strm.avail_in?1:0,Pu(t,0,0,o),t.pending_buf[t.pending-4]=n,t.pending_buf[t.pending-3]=n>>8,t.pending_buf[t.pending-2]=~n,t.pending_buf[t.pending-1]=~n>>8,Ot(t.strm),i&&(i>n&&(i=n),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+i),t.strm.next_out),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i,t.block_start+=i,n-=i),n&&(zu(t.strm,t.strm.output,t.strm.next_out,n),t.strm.next_out+=n,t.strm.avail_out-=n,t.strm.total_out+=n)}while(o===0);return s-=t.strm.avail_in,s&&(s>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=s&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-s,t.strm.next_in),t.strstart),t.strstart+=s,t.insert+=s>t.w_size-t.insert?t.w_size-t.insert:s),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),o?Pa:e!==Nn&&e!==rr&&t.strm.avail_in===0&&t.strstart===t.block_start?Ca:(a=t.window_size-t.strstart,t.strm.avail_in>a&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,a+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),a>t.strm.avail_in&&(a=t.strm.avail_in),a&&(zu(t.strm,t.window,t.strstart,a),t.strstart+=a,t.insert+=a>t.w_size-t.insert?t.w_size-t.insert:a),t.high_water<t.strstart&&(t.high_water=t.strstart),a=t.bi_valid+42>>3,a=t.pending_buf_size-a>65535?65535:t.pending_buf_size-a,r=a>t.w_size?t.w_size:a,i=t.strstart-t.block_start,(i>=r||(i||e===rr)&&e!==Nn&&t.strm.avail_in===0&&i<=a)&&(n=i>a?a:i,o=e===rr&&t.strm.avail_in===0&&n===i?1:0,Pu(t,t.block_start,n,o),t.block_start+=n,Ot(t.strm)),o?Mi:lt)},vu=(t,e)=>{let r,n;for(;;){if(t.lookahead<Fr){if(Ta(t),t.lookahead<Fr&&e===Nn)return lt;if(t.lookahead===0)break}if(r=0,t.lookahead>=Z&&(t.ins_h=Hn(t,t.ins_h,t.window[t.strstart+Z-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),r!==0&&t.strstart-r<=t.w_size-Fr&&(t.match_length=B0(t,r)),t.match_length>=Z)if(n=Un(t,t.strstart-t.match_start,t.match_length-Z),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=Z){t.match_length--;do t.strstart++,t.ins_h=Hn(t,t.ins_h,t.window[t.strstart+Z-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart;while(--t.match_length!==0);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Hn(t,t.ins_h,t.window[t.strstart+1]);else n=Un(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(n&&(Ut(t,!1),t.strm.avail_out===0))return lt}return t.insert=t.strstart<Z-1?t.strstart:Z-1,e===rr?(Ut(t,!0),t.strm.avail_out===0?Mi:Pa):t.sym_next&&(Ut(t,!1),t.strm.avail_out===0)?lt:Ca},Ma=(t,e)=>{let r,n,i;for(;;){if(t.lookahead<Fr){if(Ta(t),t.lookahead<Fr&&e===Nn)return lt;if(t.lookahead===0)break}if(r=0,t.lookahead>=Z&&(t.ins_h=Hn(t,t.ins_h,t.window[t.strstart+Z-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=Z-1,r!==0&&t.prev_length<t.max_lazy_match&&t.strstart-r<=t.w_size-Fr&&(t.match_length=B0(t,r),t.match_length<=5&&(t.strategy===Lv||t.match_length===Z&&t.strstart-t.match_start>4096)&&(t.match_length=Z-1)),t.prev_length>=Z&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-Z,n=Un(t,t.strstart-1-t.prev_match,t.prev_length-Z),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=i&&(t.ins_h=Hn(t,t.ins_h,t.window[t.strstart+Z-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart);while(--t.prev_length!==0);if(t.match_available=0,t.match_length=Z-1,t.strstart++,n&&(Ut(t,!1),t.strm.avail_out===0))return lt}else if(t.match_available){if(n=Un(t,0,t.window[t.strstart-1]),n&&Ut(t,!1),t.strstart++,t.lookahead--,t.strm.avail_out===0)return lt}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(n=Un(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<Z-1?t.strstart:Z-1,e===rr?(Ut(t,!0),t.strm.avail_out===0?Mi:Pa):t.sym_next&&(Ut(t,!1),t.strm.avail_out===0)?lt:Ca},Xv=(t,e)=>{let r,n,i,a,o=t.window;for(;;){if(t.lookahead<=On){if(Ta(t),t.lookahead<=On&&e===Nn)return lt;if(t.lookahead===0)break}if(t.match_length=0,t.lookahead>=Z&&t.strstart>0&&(i=t.strstart-1,n=o[i],n===o[++i]&&n===o[++i]&&n===o[++i])){a=t.strstart+On;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<a);t.match_length=On-(a-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=Z?(r=Un(t,1,t.match_length-Z),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=Un(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(Ut(t,!1),t.strm.avail_out===0))return lt}return t.insert=0,e===rr?(Ut(t,!0),t.strm.avail_out===0?Mi:Pa):t.sym_next&&(Ut(t,!1),t.strm.avail_out===0)?lt:Ca},Kv=(t,e)=>{let r;for(;;){if(t.lookahead===0&&(Ta(t),t.lookahead===0)){if(e===Nn)return lt;break}if(t.match_length=0,r=Un(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(Ut(t,!1),t.strm.avail_out===0))return lt}return t.insert=0,e===rr?(Ut(t,!0),t.strm.avail_out===0?Mi:Pa):t.sym_next&&(Ut(t,!1),t.strm.avail_out===0)?lt:Ca};function Pr(t,e,r,n,i){this.good_length=t,this.max_lazy=e,this.nice_length=r,this.max_chain=n,this.func=i}var ss=[new Pr(0,0,0,0,F0),new Pr(4,4,8,4,vu),new Pr(4,5,16,8,vu),new Pr(4,6,32,32,vu),new Pr(4,4,16,16,Ma),new Pr(8,16,32,32,Ma),new Pr(8,16,128,128,Ma),new Pr(8,32,128,256,Ma),new Pr(32,128,258,1024,Ma),new Pr(32,258,258,4096,Ma)],Yv=t=>{t.window_size=2*t.w_size,zn(t.head),t.max_lazy_match=ss[t.level].max_lazy,t.good_match=ss[t.level].good_length,t.nice_match=ss[t.level].nice_length,t.max_chain_length=ss[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=Z-1,t.match_available=0,t.ins_h=0};function $v(){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=gc,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(Uv*2),this.dyn_dtree=new Uint16Array((2*zv+1)*2),this.bl_tree=new Uint16Array((2*Ov+1)*2),zn(this.dyn_ltree),zn(this.dyn_dtree),zn(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(Nv+1),this.heap=new Uint16Array(2*Iu+1),zn(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(2*Iu+1),zn(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 vs=t=>{if(!t)return 1;let e=t.state;return!e||e.strm!==t||e.status!==La&&e.status!==Vu&&e.status!==Bu&&e.status!==Fu&&e.status!==ku&&e.status!==Du&&e.status!==_i&&e.status!==os?1:0},k0=t=>{if(vs(t))return Si(t,Br);t.total_in=t.total_out=0,t.data_type=Pv;let e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap===2?Vu:e.wrap?La:_i,t.adler=e.wrap===2?0:1,e.last_flush=-2,vv(e),Xe},D0=t=>{let e=k0(t);return e===Xe&&Yv(t.state),e},qv=(t,e)=>vs(t)||t.state.wrap!==2?Br:(t.state.gzhead=e,Xe),z0=(t,e,r,n,i,a)=>{if(!t)return Br;let o=1;if(e===Ev&&(e=6),n<0?(o=0,n=-n):n>15&&(o=2,n-=16),i<1||i>Iv||r!==gc||n<8||n>15||e<0||e>9||a<0||a>Rv||n===8&&o!==1)return Si(t,Br);n===8&&(n=9);let s=new $v;return t.state=s,s.strm=t,s.status=La,s.wrap=o,s.gzhead=null,s.w_bits=n,s.w_size=1<<s.w_bits,s.w_mask=s.w_size-1,s.hash_bits=i+7,s.hash_size=1<<s.hash_bits,s.hash_mask=s.hash_size-1,s.hash_shift=~~((s.hash_bits+Z-1)/Z),s.window=new Uint8Array(s.w_size*2),s.head=new Uint16Array(s.hash_size),s.prev=new Uint16Array(s.w_size),s.lit_bufsize=1<<i+6,s.pending_buf_size=s.lit_bufsize*4,s.pending_buf=new Uint8Array(s.pending_buf_size),s.sym_buf=s.lit_bufsize,s.sym_end=(s.lit_bufsize-1)*3,s.level=e,s.strategy=a,s.method=r,D0(t)},Zv=(t,e)=>z0(t,e,gc,Bv,Fv,Cv),jv=(t,e)=>{if(vs(t)||e>Um||e<0)return t?Si(t,Br):Br;let r=t.state;if(!t.output||t.avail_in!==0&&!t.input||r.status===os&&e!==rr)return Si(t,t.avail_out===0?xu:Br);let n=r.last_flush;if(r.last_flush=e,r.pending!==0){if(Ot(t),t.avail_out===0)return r.last_flush=-1,Xe}else if(t.avail_in===0&&Hm(e)<=Hm(n)&&e!==rr)return Si(t,xu);if(r.status===os&&t.avail_in!==0)return Si(t,xu);if(r.status===La&&r.wrap===0&&(r.status=_i),r.status===La){let i=gc+(r.w_bits-8<<4)<<8,a=-1;if(r.strategy>=sc||r.level<2?a=0:r.level<6?a=1:r.level===6?a=2:a=3,i|=a<<6,r.strstart!==0&&(i|=Hv),i+=31-i%31,as(r,i),r.strstart!==0&&(as(r,t.adler>>>16),as(r,t.adler&65535)),t.adler=1,r.status=_i,Ot(t),r.pending!==0)return r.last_flush=-1,Xe}if(r.status===Vu){if(t.adler=0,ne(r,31),ne(r,139),ne(r,8),r.gzhead)ne(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)),ne(r,r.gzhead.time&255),ne(r,r.gzhead.time>>8&255),ne(r,r.gzhead.time>>16&255),ne(r,r.gzhead.time>>24&255),ne(r,r.level===9?2:r.strategy>=sc||r.level<2?4:0),ne(r,r.gzhead.os&255),r.gzhead.extra&&r.gzhead.extra.length&&(ne(r,r.gzhead.extra.length&255),ne(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(t.adler=Fe(t.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=Bu;else if(ne(r,0),ne(r,0),ne(r,0),ne(r,0),ne(r,0),ne(r,r.level===9?2:r.strategy>=sc||r.level<2?4:0),ne(r,Vv),r.status=_i,Ot(t),r.pending!==0)return r.last_flush=-1,Xe}if(r.status===Bu){if(r.gzhead.extra){let i=r.pending,a=(r.gzhead.extra.length&65535)-r.gzindex;for(;r.pending+a>r.pending_buf_size;){let s=r.pending_buf_size-r.pending;if(r.pending_buf.set(r.gzhead.extra.subarray(r.gzindex,r.gzindex+s),r.pending),r.pending=r.pending_buf_size,r.gzhead.hcrc&&r.pending>i&&(t.adler=Fe(t.adler,r.pending_buf,r.pending-i,i)),r.gzindex+=s,Ot(t),r.pending!==0)return r.last_flush=-1,Xe;i=0,a-=s}let o=new Uint8Array(r.gzhead.extra);r.pending_buf.set(o.subarray(r.gzindex,r.gzindex+a),r.pending),r.pending+=a,r.gzhead.hcrc&&r.pending>i&&(t.adler=Fe(t.adler,r.pending_buf,r.pending-i,i)),r.gzindex=0}r.status=Fu}if(r.status===Fu){if(r.gzhead.name){let i=r.pending,a;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>i&&(t.adler=Fe(t.adler,r.pending_buf,r.pending-i,i)),Ot(t),r.pending!==0)return r.last_flush=-1,Xe;i=0}r.gzindex<r.gzhead.name.length?a=r.gzhead.name.charCodeAt(r.gzindex++)&255:a=0,ne(r,a)}while(a!==0);r.gzhead.hcrc&&r.pending>i&&(t.adler=Fe(t.adler,r.pending_buf,r.pending-i,i)),r.gzindex=0}r.status=ku}if(r.status===ku){if(r.gzhead.comment){let i=r.pending,a;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>i&&(t.adler=Fe(t.adler,r.pending_buf,r.pending-i,i)),Ot(t),r.pending!==0)return r.last_flush=-1,Xe;i=0}r.gzindex<r.gzhead.comment.length?a=r.gzhead.comment.charCodeAt(r.gzindex++)&255:a=0,ne(r,a)}while(a!==0);r.gzhead.hcrc&&r.pending>i&&(t.adler=Fe(t.adler,r.pending_buf,r.pending-i,i))}r.status=Du}if(r.status===Du){if(r.gzhead.hcrc){if(r.pending+2>r.pending_buf_size&&(Ot(t),r.pending!==0))return r.last_flush=-1,Xe;ne(r,t.adler&255),ne(r,t.adler>>8&255),t.adler=0}if(r.status=_i,Ot(t),r.pending!==0)return r.last_flush=-1,Xe}if(t.avail_in!==0||r.lookahead!==0||e!==Nn&&r.status!==os){let i=r.level===0?F0(r,e):r.strategy===sc?Kv(r,e):r.strategy===Tv?Xv(r,e):ss[r.level].func(r,e);if((i===Mi||i===Pa)&&(r.status=os),i===lt||i===Mi)return t.avail_out===0&&(r.last_flush=-1),Xe;if(i===Ca&&(e===wv?Sv(r):e!==Um&&(Pu(r,0,0,!1),e===Mv&&(zn(r.head),r.lookahead===0&&(r.strstart=0,r.block_start=0,r.insert=0))),Ot(t),t.avail_out===0))return r.last_flush=-1,Xe}return e!==rr?Xe:r.wrap<=0?Nm:(r.wrap===2?(ne(r,t.adler&255),ne(r,t.adler>>8&255),ne(r,t.adler>>16&255),ne(r,t.adler>>24&255),ne(r,t.total_in&255),ne(r,t.total_in>>8&255),ne(r,t.total_in>>16&255),ne(r,t.total_in>>24&255)):(as(r,t.adler>>>16),as(r,t.adler&65535)),Ot(t),r.wrap>0&&(r.wrap=-r.wrap),r.pending!==0?Xe:Nm)},Qv=t=>{if(vs(t))return Br;let e=t.state.status;return t.state=null,e===_i?Si(t,Av):Xe},Jv=(t,e)=>{let r=e.length;if(vs(t))return Br;let n=t.state,i=n.wrap;if(i===2||i===1&&n.status!==La||n.lookahead)return Br;if(i===1&&(t.adler=ps(t.adler,e,r,0)),n.wrap=0,r>=n.w_size){i===0&&(zn(n.head),n.strstart=0,n.block_start=0,n.insert=0);let c=new Uint8Array(n.w_size);c.set(e.subarray(r-n.w_size,r),0),e=c,r=n.w_size}let a=t.avail_in,o=t.next_in,s=t.input;for(t.avail_in=r,t.next_in=0,t.input=e,Ta(n);n.lookahead>=Z;){let c=n.strstart,l=n.lookahead-(Z-1);do n.ins_h=Hn(n,n.ins_h,n.window[c+Z-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=Z-1,Ta(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=Z-1,n.match_available=0,t.next_in=o,t.input=s,t.avail_in=a,n.wrap=i,Xe},e_=Zv,t_=z0,r_=D0,n_=k0,i_=qv,a_=jv,o_=Qv,s_=Jv,l_="pako deflate (from Nodeca project)",cs={deflateInit:e_,deflateInit2:t_,deflateReset:r_,deflateResetKeep:n_,deflateSetHeader:i_,deflate:a_,deflateEnd:o_,deflateSetDictionary:s_,deflateInfo:l_},c_=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),d_=function(t){let e=Array.prototype.slice.call(arguments,1);for(;e.length;){let r=e.shift();if(r){if(typeof r!="object")throw new TypeError(r+"must be non-object");for(let n in r)c_(r,n)&&(t[n]=r[n])}}return t},u_=t=>{let e=0;for(let n=0,i=t.length;n<i;n++)e+=t[n].length;let r=new Uint8Array(e);for(let n=0,i=0,a=t.length;n<a;n++){let o=t[n];r.set(o,i),i+=o.length}return r},yc={assign:d_,flattenChunks:u_},O0=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{O0=!1}var gs=new Uint8Array(256);for(let t=0;t<256;t++)gs[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;gs[254]=gs[254]=1;var f_=t=>{if(typeof TextEncoder=="function"&&TextEncoder.prototype.encode)return new TextEncoder().encode(t);let e,r,n,i,a,o=t.length,s=0;for(i=0;i<o;i++)r=t.charCodeAt(i),(r&64512)===55296&&i+1<o&&(n=t.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),s+=r<128?1:r<2048?2:r<65536?3:4;for(e=new Uint8Array(s),a=0,i=0;a<s;i++)r=t.charCodeAt(i),(r&64512)===55296&&i+1<o&&(n=t.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),r<128?e[a++]=r:r<2048?(e[a++]=192|r>>>6,e[a++]=128|r&63):r<65536?(e[a++]=224|r>>>12,e[a++]=128|r>>>6&63,e[a++]=128|r&63):(e[a++]=240|r>>>18,e[a++]=128|r>>>12&63,e[a++]=128|r>>>6&63,e[a++]=128|r&63);return e},h_=(t,e)=>{if(e<65534&&t.subarray&&O0)return String.fromCharCode.apply(null,t.length===e?t:t.subarray(0,e));let r="";for(let n=0;n<e;n++)r+=String.fromCharCode(t[n]);return r},m_=(t,e)=>{let r=e||t.length;if(typeof TextDecoder=="function"&&TextDecoder.prototype.decode)return new TextDecoder().decode(t.subarray(0,e));let n,i,a=new Array(r*2);for(i=0,n=0;n<r;){let o=t[n++];if(o<128){a[i++]=o;continue}let s=gs[o];if(s>4){a[i++]=65533,n+=s-1;continue}for(o&=s===2?31:s===3?15:7;s>1&&n<r;)o=o<<6|t[n++]&63,s--;if(s>1){a[i++]=65533;continue}o<65536?a[i++]=o:(o-=65536,a[i++]=55296|o>>10&1023,a[i++]=56320|o&1023)}return h_(a,i)},p_=(t,e)=>{e=e||t.length,e>t.length&&(e=t.length);let r=e-1;for(;r>=0&&(t[r]&192)===128;)r--;return r<0||r===0?e:r+gs[t[r]]>e?r:e},ys={string2buf:f_,buf2string:m_,utf8border:p_};function g_(){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 U0=g_,N0=Object.prototype.toString,{Z_NO_FLUSH:y_,Z_SYNC_FLUSH:b_,Z_FULL_FLUSH:x_,Z_FINISH:v_,Z_OK:mc,Z_STREAM_END:__,Z_DEFAULT_COMPRESSION:S_,Z_DEFAULT_STRATEGY:w_,Z_DEFLATED:M_}=Ei;function _s(t){this.options=yc.assign({level:S_,method:M_,chunkSize:16384,windowBits:15,memLevel:8,strategy:w_},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new U0,this.strm.avail_out=0;let r=cs.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(r!==mc)throw new Error(wi[r]);if(e.header&&cs.deflateSetHeader(this.strm,e.header),e.dictionary){let n;if(typeof e.dictionary=="string"?n=ys.string2buf(e.dictionary):N0.call(e.dictionary)==="[object ArrayBuffer]"?n=new Uint8Array(e.dictionary):n=e.dictionary,r=cs.deflateSetDictionary(this.strm,n),r!==mc)throw new Error(wi[r]);this._dict_set=!0}}_s.prototype.push=function(t,e){let r=this.strm,n=this.options.chunkSize,i,a;if(this.ended)return!1;for(e===~~e?a=e:a=e===!0?v_:y_,typeof t=="string"?r.input=ys.string2buf(t):N0.call(t)==="[object ArrayBuffer]"?r.input=new Uint8Array(t):r.input=t,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),(a===b_||a===x_)&&r.avail_out<=6){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(i=cs.deflate(r,a),i===__)return r.next_out>0&&this.onData(r.output.subarray(0,r.next_out)),i=cs.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===mc;if(r.avail_out===0){this.onData(r.output);continue}if(a>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(t){this.chunks.push(t)};_s.prototype.onEnd=function(t){t===mc&&(this.result=yc.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};function Gu(t,e){let r=new _s(e);if(r.push(t,!0),r.err)throw r.msg||wi[r.err];return r.result}function A_(t,e){return e=e||{},e.raw=!0,Gu(t,e)}function E_(t,e){return e=e||{},e.gzip=!0,Gu(t,e)}var L_=_s,T_=Gu,R_=A_,C_=E_,P_=Ei,I_={Deflate:L_,deflate:T_,deflateRaw:R_,gzip:C_,constants:P_},lc=16209,B_=16191,F_=function(e,r){let n,i,a,o,s,c,l,d,f,u,h,m,g,p,y,v,x,b,_,w,S,E,L,M,C=e.state;n=e.next_in,L=e.input,i=n+(e.avail_in-5),a=e.next_out,M=e.output,o=a-(r-e.avail_out),s=a+(e.avail_out-257),c=C.dmax,l=C.wsize,d=C.whave,f=C.wnext,u=C.window,h=C.hold,m=C.bits,g=C.lencode,p=C.distcode,y=(1<<C.lenbits)-1,v=(1<<C.distbits)-1;e:do{m<15&&(h+=L[n++]<<m,m+=8,h+=L[n++]<<m,m+=8),x=g[h&y];t:for(;;){if(b=x>>>24,h>>>=b,m-=b,b=x>>>16&255,b===0)M[a++]=x&65535;else if(b&16){_=x&65535,b&=15,b&&(m<b&&(h+=L[n++]<<m,m+=8),_+=h&(1<<b)-1,h>>>=b,m-=b),m<15&&(h+=L[n++]<<m,m+=8,h+=L[n++]<<m,m+=8),x=p[h&v];r:for(;;){if(b=x>>>24,h>>>=b,m-=b,b=x>>>16&255,b&16){if(w=x&65535,b&=15,m<b&&(h+=L[n++]<<m,m+=8,m<b&&(h+=L[n++]<<m,m+=8)),w+=h&(1<<b)-1,w>c){e.msg="invalid distance too far back",C.mode=lc;break e}if(h>>>=b,m-=b,b=a-o,w>b){if(b=w-b,b>d&&C.sane){e.msg="invalid distance too far back",C.mode=lc;break e}if(S=0,E=u,f===0){if(S+=l-b,b<_){_-=b;do M[a++]=u[S++];while(--b);S=a-w,E=M}}else if(f<b){if(S+=l+f-b,b-=f,b<_){_-=b;do M[a++]=u[S++];while(--b);if(S=0,f<_){b=f,_-=b;do M[a++]=u[S++];while(--b);S=a-w,E=M}}}else if(S+=f-b,b<_){_-=b;do M[a++]=u[S++];while(--b);S=a-w,E=M}for(;_>2;)M[a++]=E[S++],M[a++]=E[S++],M[a++]=E[S++],_-=3;_&&(M[a++]=E[S++],_>1&&(M[a++]=E[S++]))}else{S=a-w;do M[a++]=M[S++],M[a++]=M[S++],M[a++]=M[S++],_-=3;while(_>2);_&&(M[a++]=M[S++],_>1&&(M[a++]=M[S++]))}}else if((b&64)===0){x=p[(x&65535)+(h&(1<<b)-1)];continue r}else{e.msg="invalid distance code",C.mode=lc;break e}break}}else if((b&64)===0){x=g[(x&65535)+(h&(1<<b)-1)];continue t}else if(b&32){C.mode=B_;break e}else{e.msg="invalid literal/length code",C.mode=lc;break e}break}}while(n<i&&a<s);_=m>>3,n-=_,m-=_<<3,h&=(1<<m)-1,e.next_in=n,e.next_out=a,e.avail_in=n<i?5+(i-n):5-(n-i),e.avail_out=a<s?257+(s-a):257-(a-s),C.hold=h,C.bits=m},Aa=15,Vm=852,Gm=592,Wm=0,_u=1,Xm=2,k_=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]),D_=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]),z_=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]),O_=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]),U_=(t,e,r,n,i,a,o,s)=>{let c=s.bits,l=0,d=0,f=0,u=0,h=0,m=0,g=0,p=0,y=0,v=0,x,b,_,w,S,E=null,L,M=new Uint16Array(Aa+1),C=new Uint16Array(Aa+1),I=null,B,F,U;for(l=0;l<=Aa;l++)M[l]=0;for(d=0;d<n;d++)M[e[r+d]]++;for(h=c,u=Aa;u>=1&&M[u]===0;u--);if(h>u&&(h=u),u===0)return i[a++]=1<<24|64<<16|0,i[a++]=1<<24|64<<16|0,s.bits=1,0;for(f=1;f<u&&M[f]===0;f++);for(h<f&&(h=f),p=1,l=1;l<=Aa;l++)if(p<<=1,p-=M[l],p<0)return-1;if(p>0&&(t===Wm||u!==1))return-1;for(C[1]=0,l=1;l<Aa;l++)C[l+1]=C[l]+M[l];for(d=0;d<n;d++)e[r+d]!==0&&(o[C[e[r+d]]++]=d);if(t===Wm?(E=I=o,L=20):t===_u?(E=k_,I=D_,L=257):(E=z_,I=O_,L=0),v=0,d=0,l=f,S=a,m=h,g=0,_=-1,y=1<<h,w=y-1,t===_u&&y>Vm||t===Xm&&y>Gm)return 1;for(;;){B=l-g,o[d]+1<L?(F=0,U=o[d]):o[d]>=L?(F=I[o[d]-L],U=E[o[d]-L]):(F=96,U=0),x=1<<l-g,b=1<<m,f=b;do b-=x,i[S+(v>>g)+b]=B<<24|F<<16|U|0;while(b!==0);for(x=1<<l-1;v&x;)x>>=1;if(x!==0?(v&=x-1,v+=x):v=0,d++,--M[l]===0){if(l===u)break;l=e[r+o[d]]}if(l>h&&(v&w)!==_){for(g===0&&(g=h),S+=f,m=l-g,p=1<<m;m+g<u&&(p-=M[m+g],!(p<=0));)m++,p<<=1;if(y+=1<<m,t===_u&&y>Vm||t===Xm&&y>Gm)return 1;_=v&w,i[_]=h<<24|m<<16|S-a|0}}return v!==0&&(i[S+v]=l-g<<24|64<<16|0),s.bits=h,0},ds=U_,N_=0,H0=1,V0=2,{Z_FINISH:Km,Z_BLOCK:H_,Z_TREES:cc,Z_OK:Ai,Z_STREAM_END:V_,Z_NEED_DICT:G_,Z_STREAM_ERROR:nr,Z_DATA_ERROR:G0,Z_MEM_ERROR:W0,Z_BUF_ERROR:W_,Z_DEFLATED:Ym}=Ei,bc=16180,$m=16181,qm=16182,Zm=16183,jm=16184,Qm=16185,Jm=16186,e0=16187,t0=16188,r0=16189,pc=16190,rn=16191,Su=16192,n0=16193,wu=16194,i0=16195,a0=16196,o0=16197,s0=16198,dc=16199,uc=16200,l0=16201,c0=16202,d0=16203,u0=16204,f0=16205,Mu=16206,h0=16207,m0=16208,be=16209,X0=16210,K0=16211,X_=852,K_=592,Y_=15,$_=Y_,p0=t=>(t>>>24&255)+(t>>>8&65280)+((t&65280)<<8)+((t&255)<<24);function q_(){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 Li=t=>{if(!t)return 1;let e=t.state;return!e||e.strm!==t||e.mode<bc||e.mode>K0?1:0},Y0=t=>{if(Li(t))return nr;let e=t.state;return t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=e.wrap&1),e.mode=bc,e.last=0,e.havedict=0,e.flags=-1,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new Int32Array(X_),e.distcode=e.distdyn=new Int32Array(K_),e.sane=1,e.back=-1,Ai},$0=t=>{if(Li(t))return nr;let e=t.state;return e.wsize=0,e.whave=0,e.wnext=0,Y0(t)},q0=(t,e)=>{let r;if(Li(t))return nr;let n=t.state;return e<0?(r=0,e=-e):(r=(e>>4)+5,e<48&&(e&=15)),e&&(e<8||e>15)?nr:(n.window!==null&&n.wbits!==e&&(n.window=null),n.wrap=r,n.wbits=e,$0(t))},Z0=(t,e)=>{if(!t)return nr;let r=new q_;t.state=r,r.strm=t,r.window=null,r.mode=bc;let n=q0(t,e);return n!==Ai&&(t.state=null),n},Z_=t=>Z0(t,$_),g0=!0,Au,Eu,j_=t=>{if(g0){Au=new Int32Array(512),Eu=new Int32Array(32);let e=0;for(;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(ds(H0,t.lens,0,288,Au,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;ds(V0,t.lens,0,32,Eu,0,t.work,{bits:5}),g0=!1}t.lencode=Au,t.lenbits=9,t.distcode=Eu,t.distbits=5},j0=(t,e,r,n)=>{let i,a=t.state;return a.window===null&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new Uint8Array(a.wsize)),n>=a.wsize?(a.window.set(e.subarray(r-a.wsize,r),0),a.wnext=0,a.whave=a.wsize):(i=a.wsize-a.wnext,i>n&&(i=n),a.window.set(e.subarray(r-n,r-n+i),a.wnext),n-=i,n?(a.window.set(e.subarray(r-n,r),0),a.wnext=n,a.whave=a.wsize):(a.wnext+=i,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=i))),0},Q_=(t,e)=>{let r,n,i,a,o,s,c,l,d,f,u,h,m,g,p=0,y,v,x,b,_,w,S,E,L=new Uint8Array(4),M,C,I=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(Li(t)||!t.output||!t.input&&t.avail_in!==0)return nr;r=t.state,r.mode===rn&&(r.mode=Su),o=t.next_out,i=t.output,c=t.avail_out,a=t.next_in,n=t.input,s=t.avail_in,l=r.hold,d=r.bits,f=s,u=c,E=Ai;e:for(;;)switch(r.mode){case bc:if(r.wrap===0){r.mode=Su;break}for(;d<16;){if(s===0)break e;s--,l+=n[a++]<<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=$m;break}if(r.head&&(r.head.done=!1),!(r.wrap&1)||(((l&255)<<8)+(l>>8))%31){t.msg="incorrect header check",r.mode=be;break}if((l&15)!==Ym){t.msg="unknown compression method",r.mode=be;break}if(l>>>=4,d-=4,S=(l&15)+8,r.wbits===0&&(r.wbits=S),S>15||S>r.wbits){t.msg="invalid window size",r.mode=be;break}r.dmax=1<<r.wbits,r.flags=0,t.adler=r.check=1,r.mode=l&512?r0:rn,l=0,d=0;break;case $m:for(;d<16;){if(s===0)break e;s--,l+=n[a++]<<d,d+=8}if(r.flags=l,(r.flags&255)!==Ym){t.msg="unknown compression method",r.mode=be;break}if(r.flags&57344){t.msg="unknown header flags set",r.mode=be;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=qm;case qm:for(;d<32;){if(s===0)break e;s--,l+=n[a++]<<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=Zm;case Zm:for(;d<16;){if(s===0)break e;s--,l+=n[a++]<<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=jm;case jm:if(r.flags&1024){for(;d<16;){if(s===0)break e;s--,l+=n[a++]<<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=Qm;case Qm:if(r.flags&1024&&(h=r.length,h>s&&(h=s),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(a,a+h),S)),r.flags&512&&r.wrap&4&&(r.check=Fe(r.check,n,h,a)),s-=h,a+=h,r.length-=h),r.length))break e;r.length=0,r.mode=Jm;case Jm:if(r.flags&2048){if(s===0)break e;h=0;do S=n[a+h++],r.head&&S&&r.length<65536&&(r.head.name+=String.fromCharCode(S));while(S&&h<s);if(r.flags&512&&r.wrap&4&&(r.check=Fe(r.check,n,h,a)),s-=h,a+=h,S)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=e0;case e0:if(r.flags&4096){if(s===0)break e;h=0;do S=n[a+h++],r.head&&S&&r.length<65536&&(r.head.comment+=String.fromCharCode(S));while(S&&h<s);if(r.flags&512&&r.wrap&4&&(r.check=Fe(r.check,n,h,a)),s-=h,a+=h,S)break e}else r.head&&(r.head.comment=null);r.mode=t0;case t0:if(r.flags&512){for(;d<16;){if(s===0)break e;s--,l+=n[a++]<<d,d+=8}if(r.wrap&4&&l!==(r.check&65535)){t.msg="header crc mismatch",r.mode=be;break}l=0,d=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=rn;break;case r0:for(;d<32;){if(s===0)break e;s--,l+=n[a++]<<d,d+=8}t.adler=r.check=p0(l),l=0,d=0,r.mode=pc;case pc:if(r.havedict===0)return t.next_out=o,t.avail_out=c,t.next_in=a,t.avail_in=s,r.hold=l,r.bits=d,G_;t.adler=r.check=1,r.mode=rn;case rn:if(e===H_||e===cc)break e;case Su:if(r.last){l>>>=d&7,d-=d&7,r.mode=Mu;break}for(;d<3;){if(s===0)break e;s--,l+=n[a++]<<d,d+=8}switch(r.last=l&1,l>>>=1,d-=1,l&3){case 0:r.mode=n0;break;case 1:if(j_(r),r.mode=dc,e===cc){l>>>=2,d-=2;break e}break;case 2:r.mode=a0;break;case 3:t.msg="invalid block type",r.mode=be}l>>>=2,d-=2;break;case n0:for(l>>>=d&7,d-=d&7;d<32;){if(s===0)break e;s--,l+=n[a++]<<d,d+=8}if((l&65535)!==(l>>>16^65535)){t.msg="invalid stored block lengths",r.mode=be;break}if(r.length=l&65535,l=0,d=0,r.mode=wu,e===cc)break e;case wu:r.mode=i0;case i0:if(h=r.length,h){if(h>s&&(h=s),h>c&&(h=c),h===0)break e;i.set(n.subarray(a,a+h),o),s-=h,a+=h,c-=h,o+=h,r.length-=h;break}r.mode=rn;break;case a0:for(;d<14;){if(s===0)break e;s--,l+=n[a++]<<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){t.msg="too many length or distance symbols",r.mode=be;break}r.have=0,r.mode=o0;case o0:for(;r.have<r.ncode;){for(;d<3;){if(s===0)break e;s--,l+=n[a++]<<d,d+=8}r.lens[I[r.have++]]=l&7,l>>>=3,d-=3}for(;r.have<19;)r.lens[I[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,M={bits:r.lenbits},E=ds(N_,r.lens,0,19,r.lencode,0,r.work,M),r.lenbits=M.bits,E){t.msg="invalid code lengths set",r.mode=be;break}r.have=0,r.mode=s0;case s0:for(;r.have<r.nlen+r.ndist;){for(;p=r.lencode[l&(1<<r.lenbits)-1],y=p>>>24,v=p>>>16&255,x=p&65535,!(y<=d);){if(s===0)break e;s--,l+=n[a++]<<d,d+=8}if(x<16)l>>>=y,d-=y,r.lens[r.have++]=x;else{if(x===16){for(C=y+2;d<C;){if(s===0)break e;s--,l+=n[a++]<<d,d+=8}if(l>>>=y,d-=y,r.have===0){t.msg="invalid bit length repeat",r.mode=be;break}S=r.lens[r.have-1],h=3+(l&3),l>>>=2,d-=2}else if(x===17){for(C=y+3;d<C;){if(s===0)break e;s--,l+=n[a++]<<d,d+=8}l>>>=y,d-=y,S=0,h=3+(l&7),l>>>=3,d-=3}else{for(C=y+7;d<C;){if(s===0)break e;s--,l+=n[a++]<<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){t.msg="invalid bit length repeat",r.mode=be;break}for(;h--;)r.lens[r.have++]=S}}if(r.mode===be)break;if(r.lens[256]===0){t.msg="invalid code -- missing end-of-block",r.mode=be;break}if(r.lenbits=9,M={bits:r.lenbits},E=ds(H0,r.lens,0,r.nlen,r.lencode,0,r.work,M),r.lenbits=M.bits,E){t.msg="invalid literal/lengths set",r.mode=be;break}if(r.distbits=6,r.distcode=r.distdyn,M={bits:r.distbits},E=ds(V0,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,M),r.distbits=M.bits,E){t.msg="invalid distances set",r.mode=be;break}if(r.mode=dc,e===cc)break e;case dc:r.mode=uc;case uc:if(s>=6&&c>=258){t.next_out=o,t.avail_out=c,t.next_in=a,t.avail_in=s,r.hold=l,r.bits=d,F_(t,u),o=t.next_out,i=t.output,c=t.avail_out,a=t.next_in,n=t.input,s=t.avail_in,l=r.hold,d=r.bits,r.mode===rn&&(r.back=-1);break}for(r.back=0;p=r.lencode[l&(1<<r.lenbits)-1],y=p>>>24,v=p>>>16&255,x=p&65535,!(y<=d);){if(s===0)break e;s--,l+=n[a++]<<d,d+=8}if(v&&(v&240)===0){for(b=y,_=v,w=x;p=r.lencode[w+((l&(1<<b+_)-1)>>b)],y=p>>>24,v=p>>>16&255,x=p&65535,!(b+y<=d);){if(s===0)break e;s--,l+=n[a++]<<d,d+=8}l>>>=b,d-=b,r.back+=b}if(l>>>=y,d-=y,r.back+=y,r.length=x,v===0){r.mode=f0;break}if(v&32){r.back=-1,r.mode=rn;break}if(v&64){t.msg="invalid literal/length code",r.mode=be;break}r.extra=v&15,r.mode=l0;case l0:if(r.extra){for(C=r.extra;d<C;){if(s===0)break e;s--,l+=n[a++]<<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=c0;case c0:for(;p=r.distcode[l&(1<<r.distbits)-1],y=p>>>24,v=p>>>16&255,x=p&65535,!(y<=d);){if(s===0)break e;s--,l+=n[a++]<<d,d+=8}if((v&240)===0){for(b=y,_=v,w=x;p=r.distcode[w+((l&(1<<b+_)-1)>>b)],y=p>>>24,v=p>>>16&255,x=p&65535,!(b+y<=d);){if(s===0)break e;s--,l+=n[a++]<<d,d+=8}l>>>=b,d-=b,r.back+=b}if(l>>>=y,d-=y,r.back+=y,v&64){t.msg="invalid distance code",r.mode=be;break}r.offset=x,r.extra=v&15,r.mode=d0;case d0:if(r.extra){for(C=r.extra;d<C;){if(s===0)break e;s--,l+=n[a++]<<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){t.msg="invalid distance too far back",r.mode=be;break}r.mode=u0;case u0:if(c===0)break e;if(h=u-c,r.offset>h){if(h=r.offset-h,h>r.whave&&r.sane){t.msg="invalid distance too far back",r.mode=be;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=uc);break;case f0:if(c===0)break e;i[o++]=r.length,c--,r.mode=uc;break;case Mu:if(r.wrap){for(;d<32;){if(s===0)break e;s--,l|=n[a++]<<d,d+=8}if(u-=c,t.total_out+=u,r.total+=u,r.wrap&4&&u&&(t.adler=r.check=r.flags?Fe(r.check,i,u,o-u):ps(r.check,i,u,o-u)),u=c,r.wrap&4&&(r.flags?l:p0(l))!==r.check){t.msg="incorrect data check",r.mode=be;break}l=0,d=0}r.mode=h0;case h0:if(r.wrap&&r.flags){for(;d<32;){if(s===0)break e;s--,l+=n[a++]<<d,d+=8}if(r.wrap&4&&l!==(r.total&4294967295)){t.msg="incorrect length check",r.mode=be;break}l=0,d=0}r.mode=m0;case m0:E=V_;break e;case be:E=G0;break e;case X0:return W0;case K0:default:return nr}return t.next_out=o,t.avail_out=c,t.next_in=a,t.avail_in=s,r.hold=l,r.bits=d,(r.wsize||u!==t.avail_out&&r.mode<be&&(r.mode<Mu||e!==Km))&&j0(t,t.output,t.next_out,u-t.avail_out),f-=t.avail_in,u-=t.avail_out,t.total_in+=f,t.total_out+=u,r.total+=u,r.wrap&4&&u&&(t.adler=r.check=r.flags?Fe(r.check,i,u,t.next_out-u):ps(r.check,i,u,t.next_out-u)),t.data_type=r.bits+(r.last?64:0)+(r.mode===rn?128:0)+(r.mode===dc||r.mode===wu?256:0),(f===0&&u===0||e===Km)&&E===Ai&&(E=W_),E},J_=t=>{if(Li(t))return nr;let e=t.state;return e.window&&(e.window=null),t.state=null,Ai},eS=(t,e)=>{if(Li(t))return nr;let r=t.state;return(r.wrap&2)===0?nr:(r.head=e,e.done=!1,Ai)},tS=(t,e)=>{let r=e.length,n,i,a;return Li(t)||(n=t.state,n.wrap!==0&&n.mode!==pc)?nr:n.mode===pc&&(i=1,i=ps(i,e,r,0),i!==n.check)?G0:(a=j0(t,e,r,r),a?(n.mode=X0,W0):(n.havedict=1,Ai))},rS=$0,nS=q0,iS=Y0,aS=Z_,oS=Z0,sS=Q_,lS=J_,cS=eS,dS=tS,uS="pako inflate (from Nodeca project)",an={inflateReset:rS,inflateReset2:nS,inflateResetKeep:iS,inflateInit:aS,inflateInit2:oS,inflate:sS,inflateEnd:lS,inflateGetHeader:cS,inflateSetDictionary:dS,inflateInfo:uS};function fS(){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 hS=fS,Q0=Object.prototype.toString,{Z_NO_FLUSH:mS,Z_FINISH:pS,Z_OK:bs,Z_STREAM_END:Lu,Z_NEED_DICT:Tu,Z_STREAM_ERROR:gS,Z_DATA_ERROR:y0,Z_MEM_ERROR:yS}=Ei;function Ss(t){this.options=yc.assign({chunkSize:1024*64,windowBits:15,to:""},t||{});let e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,e.windowBits===0&&(e.windowBits=-15)),e.windowBits>=0&&e.windowBits<16&&!(t&&t.windowBits)&&(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&(e.windowBits&15)===0&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new U0,this.strm.avail_out=0;let r=an.inflateInit2(this.strm,e.windowBits);if(r!==bs)throw new Error(wi[r]);if(this.header=new hS,an.inflateGetHeader(this.strm,this.header),e.dictionary&&(typeof e.dictionary=="string"?e.dictionary=ys.string2buf(e.dictionary):Q0.call(e.dictionary)==="[object ArrayBuffer]"&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(r=an.inflateSetDictionary(this.strm,e.dictionary),r!==bs)))throw new Error(wi[r])}Ss.prototype.push=function(t,e){let r=this.strm,n=this.options.chunkSize,i=this.options.dictionary,a,o,s;if(this.ended)return!1;for(e===~~e?o=e:o=e===!0?pS:mS,Q0.call(t)==="[object ArrayBuffer]"?r.input=new Uint8Array(t):r.input=t,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),a=an.inflate(r,o),a===Tu&&i&&(a=an.inflateSetDictionary(r,i),a===bs?a=an.inflate(r,o):a===y0&&(a=Tu));r.avail_in>0&&a===Lu&&r.state.wrap>0&&t[r.next_in]!==0;)an.inflateReset(r),a=an.inflate(r,o);switch(a){case gS:case y0:case Tu:case yS:return this.onEnd(a),this.ended=!0,!1}if(s=r.avail_out,r.next_out&&(r.avail_out===0||a===Lu))if(this.options.to==="string"){let c=ys.utf8border(r.output,r.next_out),l=r.next_out-c,d=ys.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(!(a===bs&&s===0)){if(a===Lu)return a=an.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,!0;if(r.avail_in===0)break}}return!0};Ss.prototype.onData=function(t){this.chunks.push(t)};Ss.prototype.onEnd=function(t){t===bs&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=yc.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};function Wu(t,e){let r=new Ss(e);if(r.push(t),r.err)throw r.msg||wi[r.err];return r.result}function bS(t,e){return e=e||{},e.raw=!0,Wu(t,e)}var xS=Ss,vS=Wu,_S=bS,SS=Wu,wS=Ei,MS={Inflate:xS,inflate:vS,inflateRaw:_S,ungzip:SS,constants:wS},{Deflate:AS,deflate:ES,deflateRaw:LS,gzip:TS}=I_,{Inflate:RS,inflate:CS,inflateRaw:PS,ungzip:IS}=MS,BS=AS,FS=ES,kS=LS,DS=TS,zS=RS,OS=CS,US=PS,NS=IS,HS=Ei,Xu={Deflate:BS,deflate:FS,deflateRaw:kS,gzip:DS,Inflate:zS,inflate:OS,inflateRaw:US,ungzip:NS,constants:HS};var Ia=class Ia{constructor(e=Ia.INITIAL_SIZE){this.buffer=new Uint8Array(e),this.readOffset=0,this.writeOffset=0}append(e){let r=e instanceof Uint8Array?e:new Uint8Array(e),n=this.writeOffset+r.length;n>this.buffer.length&&this.grow(n),this.buffer.set(r,this.writeOffset),this.writeOffset+=r.length}hasBytes(e){return this.writeOffset-this.readOffset>=e}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 e=this.buffer[this.readOffset]|this.buffer[this.readOffset+1]<<8;return this.readOffset+=2,e>32767?e-65536:e}readLong(){if(!this.hasBytes(4))throw new Error("Buffer underflow");let e=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,e}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 e=Math.min(Ia.MAX_STRING_LENGTH,this.writeOffset-this.readOffset),r=0;for(;r<e&&this.buffer[this.readOffset+r]!==0;)r++;if(r>=e)throw this.writeOffset-this.readOffset<=e?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(e){if(!this.hasBytes(e))throw new Error("Buffer underflow");return this.buffer.slice(this.readOffset,this.readOffset+e)}readBytes(e){if(!this.hasBytes(e))throw new Error("Buffer underflow");let r=this.buffer.slice(this.readOffset,this.readOffset+e);return this.readOffset+=e,r}readData(e){return this.readBytes(e)}getReadPosition(){return this.readOffset}getWritePosition(){return this.writeOffset}setReadPosition(e){if(e<0||e>this.writeOffset)throw new Error("Invalid read position");this.readOffset=e}grow(e){let r=e?Math.max(e,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 e=this.writeOffset-this.readOffset;if(e===0){this.readOffset=0,this.writeOffset=0;return}this.buffer.copyWithin(0,this.readOffset,this.writeOffset),this.readOffset=0,this.writeOffset=e}getCapacity(){return this.buffer.length}reset(){this.readOffset=0,this.writeOffset=0}};Ia.INITIAL_SIZE=64*1024,Ia.MAX_STRING_LENGTH=2048;var Vn=Ia;var kr=()=>({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}),hr=()=>({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,watertype:0});var J0={0:T.bad,1:T.nop,2:T.disconnect,3:T.reconnect,4:T.download,5:T.frame,6:T.inventory,7:T.layout,8:T.muzzleflash,9:T.temp_entity,10:T.sound,11:T.print,12:T.stufftext,13:T.serverdata,14:T.configstring,15:T.spawnbaseline,16:T.centerprint,17:T.playerinfo,18:T.packetentities,19:T.deltapacketentities,20:T.muzzleflash2},xc=class{constructor(){this.protocolVersion=34}translateCommand(e){return J0[e]!==void 0?J0[e]:T.bad}parseServerData(e){let r=e.readLong(),n=e.readLong(),i=e.readByte(),a=e.readString(),o=e.readShort(),s=e.readString();return{protocol:r,serverCount:n,attractLoop:i,gameDir:a,playerNum:o,levelName:s}}parseEntityBits(e){let r=e.readByte();r&gr&&(r|=e.readByte()<<8),r&br&&(r|=e.readByte()<<16),r&xr&&(r|=e.readByte()<<24);let n;return r&Zn?n=e.readShort():n=e.readByte(),{number:n,bits:r,bitsHigh:0}}parseDelta(e,r,n,i,a,o){r.number=e.number,r.modelindex=e.modelindex,r.modelindex2=e.modelindex2,r.modelindex3=e.modelindex3,r.modelindex4=e.modelindex4,r.frame=e.frame,r.skinnum=e.skinnum,r.effects=e.effects,r.renderfx=e.renderfx,r.origin.x=e.origin.x,r.origin.y=e.origin.y,r.origin.z=e.origin.z,r.old_origin.x=e.origin.x,r.old_origin.y=e.origin.y,r.old_origin.z=e.origin.z,r.angles.x=e.angles.x,r.angles.y=e.angles.y,r.angles.z=e.angles.z,r.sound=e.sound,r.event=e.event,r.solid=e.solid,r.number=n,r.bits=i,i&vt&&(r.modelindex=o.readByte()),i&St&&(r.modelindex2=o.readByte()),i&wt&&(r.modelindex3=o.readByte()),i&Mt&&(r.modelindex4=o.readByte()),i&gt&&(r.frame=o.readByte()),i&_t&&(r.frame=o.readShort()),i&He&&i&We?r.skinnum=o.readLong():i&He?r.skinnum=o.readByte():i&We&&(r.skinnum=o.readShort()),i&Ne&&i&Ge?r.effects=o.readLong():i&Ne?r.effects=o.readByte():i&Ge&&(r.effects=o.readShort()),i&Ue&&i&Ve?r.renderfx=o.readLong():i&Ue?r.renderfx=o.readByte():i&Ve&&(r.renderfx=o.readShort()),i&ft&&(r.origin.x=o.readShort()*.125),i&ht&&(r.origin.y=o.readShort()*.125),i&bt&&(r.origin.z=o.readShort()*.125),i&xt&&(r.angles.x=o.readByte()*(360/256)),i&mt&&(r.angles.y=o.readByte()*(360/256)),i&pt&&(r.angles.z=o.readByte()*(360/256)),i&sr&&(r.old_origin.x=o.readShort()*.125,r.old_origin.y=o.readShort()*.125,r.old_origin.z=o.readShort()*.125),i&At&&(r.sound=o.readByte()),i&yt?r.event=o.readByte():r.event=0,i&Et&&(r.solid=o.readShort())}parsePlayerState(e){let r=hr(),n=e.readShort();n&1&&(r.pm_type=e.readByte()),n&2&&(r.origin.x=e.readShort()*.125,r.origin.y=e.readShort()*.125,r.origin.z=e.readShort()*.125),n&4&&(r.velocity.x=e.readShort()*.125,r.velocity.y=e.readShort()*.125,r.velocity.z=e.readShort()*.125),n&8&&(r.pm_time=e.readByte()),n&16&&(r.pm_flags=e.readByte()),n&32&&(r.gravity=e.readShort()),n&64&&(r.delta_angles.x=e.readShort()*(180/32768),r.delta_angles.y=e.readShort()*(180/32768),r.delta_angles.z=e.readShort()*(180/32768)),n&128&&(r.viewoffset.x=(e.readByte()<<24>>24)*.25,r.viewoffset.y=(e.readByte()<<24>>24)*.25,r.viewoffset.z=(e.readByte()<<24>>24)*.25),n&256&&(r.viewangles.x=e.readShort()*(360/65536),r.viewangles.y=e.readShort()*(360/65536),r.viewangles.z=e.readShort()*(360/65536)),n&512&&(r.kick_angles.x=(e.readByte()<<24>>24)*.25,r.kick_angles.y=(e.readByte()<<24>>24)*.25,r.kick_angles.z=(e.readByte()<<24>>24)*.25),n&4096&&(r.gun_index=e.readByte()),n&8192&&(r.gun_frame=e.readByte(),r.gun_offset.x=(e.readByte()<<24>>24)*.25,r.gun_offset.y=(e.readByte()<<24>>24)*.25,r.gun_offset.z=(e.readByte()<<24>>24)*.25,r.gun_angles.x=(e.readByte()<<24>>24)*.25,r.gun_angles.y=(e.readByte()<<24>>24)*.25,r.gun_angles.z=(e.readByte()<<24>>24)*.25),n&1024&&(r.blend[0]=e.readByte(),r.blend[1]=e.readByte(),r.blend[2]=e.readByte(),r.blend[3]=e.readByte()),n&2048&&(r.fov=e.readByte()),n&16384&&(r.rdflags=e.readByte()),n&32768&&(r.watertype=e.readByte());let i=e.readLong();for(let a=0;a<32;a++)i&1<<a&&(r.stats[a]=e.readShort());return r}};var Dr=2023,vc=class{constructor(){this.protocolVersion=Dr}translateCommand(e){return e}parseServerData(e){let r=e.readLong(),n=e.readLong(),i=e.readByte(),a=e.readByte(),o=e.readString(),s=e.readShort();if(s===-2){let l=e.readShort();for(let d=0;d<l;d++)e.readShort();s=0}else s===-1&&(s=-1);let c=e.readString();return{protocol:r,serverCount:n,spawnCount:n,attractLoop:0,gameDir:o,playerNum:s,levelName:c,tickRate:a,demoType:i}}parseEntityBits(e){let r=e.readByte();r&gr&&(r|=e.readByte()<<8),r&br&&(r|=e.readByte()<<16),r&xr&&(r|=e.readByte()<<24);let n=0;r&Ii&&(n=e.readByte());let i;return r&Zn?i=e.readShort():i=e.readByte(),{number:i,bits:r,bitsHigh:n}}parseDelta(e,r,n,i,a,o){Object.assign(r,e),r.origin={...e.origin},r.old_origin={...e.old_origin},r.angles={...e.angles},r.number=n,r.bits=i,r.bitsHigh=a,i&vt&&(r.modelindex=o.readByte()),i&St&&(r.modelindex2=o.readByte()),i&wt&&(r.modelindex3=o.readByte()),i&Mt&&(r.modelindex4=o.readByte()),i&gt&&(r.frame=o.readByte()),i&_t&&(r.frame=o.readShort()),i&He&&i&We?r.skinnum=o.readLong():i&He?r.skinnum=o.readByte():i&We&&(r.skinnum=o.readShort()),i&Ne&&i&Ge?r.effects=o.readLong():i&Ne?r.effects=o.readByte():i&Ge&&(r.effects=o.readShort()),i&Ue&&i&Ve?r.renderfx=o.readLong():i&Ue?r.renderfx=o.readByte():i&Ve&&(r.renderfx=o.readShort()),i&ft&&(r.origin.x=o.readShort()*.125),i&ht&&(r.origin.y=o.readShort()*.125),i&bt&&(r.origin.z=o.readShort()*.125),i&xt&&(r.angles.x=o.readByte()*(360/256)),i&mt&&(r.angles.y=o.readByte()*(360/256)),i&pt&&(r.angles.z=o.readByte()*(360/256)),i&sr&&(r.old_origin.x=o.readShort()*.125,r.old_origin.y=o.readShort()*.125,r.old_origin.z=o.readShort()*.125),i&At&&(r.sound=o.readByte()),i&yt?r.event=o.readByte():r.event=0,i&Et&&(r.solid=o.readShort()),i&yr&&(r.alpha=o.readByte()/255),i&vr&&(r.scale=o.readFloat()),i&_r&&(r.instanceBits=o.readLong()),i&Sr&&(r.loopVolume=o.readByte()/255),a&un&&(r.loopAttenuation=o.readByte()/255),a&fn&&(r.owner=o.readShort()),a&hn&&(r.oldFrame=o.readShort())}parsePlayerState(e){let r=hr(),n=e.readShort();n&1&&(r.pm_type=e.readByte()),n&2&&(r.origin.x=e.readShort()*.125,r.origin.y=e.readShort()*.125,r.origin.z=e.readShort()*.125),n&4&&(r.velocity.x=e.readShort()*.125,r.velocity.y=e.readShort()*.125,r.velocity.z=e.readShort()*.125),n&8&&(r.pm_time=e.readByte()),n&16&&(r.pm_flags=e.readByte()),n&32&&(r.gravity=e.readShort()),n&64&&(r.delta_angles.x=e.readShort()*(180/32768),r.delta_angles.y=e.readShort()*(180/32768),r.delta_angles.z=e.readShort()*(180/32768)),n&128&&(r.viewoffset.x=(e.readByte()<<24>>24)*.25,r.viewoffset.y=(e.readByte()<<24>>24)*.25,r.viewoffset.z=(e.readByte()<<24>>24)*.25),n&256&&(r.viewangles.x=e.readShort()*(360/65536),r.viewangles.y=e.readShort()*(360/65536),r.viewangles.z=e.readShort()*(360/65536)),n&512&&(r.kick_angles.x=(e.readByte()<<24>>24)*.25,r.kick_angles.y=(e.readByte()<<24>>24)*.25,r.kick_angles.z=(e.readByte()<<24>>24)*.25),n&4096&&(r.gun_index=e.readByte()),n&8192&&(r.gun_frame=e.readByte(),r.gun_offset.x=(e.readByte()<<24>>24)*.25,r.gun_offset.y=(e.readByte()<<24>>24)*.25,r.gun_offset.z=(e.readByte()<<24>>24)*.25,r.gun_angles.x=(e.readByte()<<24>>24)*.25,r.gun_angles.y=(e.readByte()<<24>>24)*.25,r.gun_angles.z=(e.readByte()<<24>>24)*.25),n&1024&&(r.blend[0]=e.readByte(),r.blend[1]=e.readByte(),r.blend[2]=e.readByte(),r.blend[3]=e.readByte()),n&2048&&(r.fov=e.readByte()),n&16384&&(r.rdflags=e.readByte()),n&32768&&(r.watertype=e.readByte());let i=e.readLong();for(let a=0;a<32;a++)i&1<<a&&(r.stats[a]=e.readShort());return r}};var _c=class{constructor(e=0){this.protocolVersion=e}translateCommand(e){return e}parseServerData(e){let r=e.readLong(),n=e.readLong(),i=e.readByte(),a=e.readString(),o=e.readShort(),s=e.readString();return{protocol:r,serverCount:n,attractLoop:i,gameDir:a,playerNum:o,levelName:s}}parseEntityBits(e){let r=e.readByte();r&gr&&(r|=e.readByte()<<8),r&br&&(r|=e.readByte()<<16),r&xr&&(r|=e.readByte()<<24);let n;return r&Zn?n=e.readShort():n=e.readByte(),{number:n,bits:r,bitsHigh:0}}parseDelta(e,r,n,i,a,o){r.number=e.number,r.modelindex=e.modelindex,r.modelindex2=e.modelindex2,r.modelindex3=e.modelindex3,r.modelindex4=e.modelindex4,r.frame=e.frame,r.skinnum=e.skinnum,r.effects=e.effects,r.renderfx=e.renderfx,r.origin.x=e.origin.x,r.origin.y=e.origin.y,r.origin.z=e.origin.z,r.old_origin.x=e.origin.x,r.old_origin.y=e.origin.y,r.old_origin.z=e.origin.z,r.angles.x=e.angles.x,r.angles.y=e.angles.y,r.angles.z=e.angles.z,r.sound=e.sound,r.event=e.event,r.solid=e.solid,r.number=n,r.bits=i,i&vt&&(r.modelindex=o.readByte()),i&St&&(r.modelindex2=o.readByte()),i&wt&&(r.modelindex3=o.readByte()),i&Mt&&(r.modelindex4=o.readByte()),i&gt&&(r.frame=o.readByte()),i&_t&&(r.frame=o.readShort()),i&He&&i&We?r.skinnum=o.readLong():i&He?r.skinnum=o.readByte():i&We&&(r.skinnum=o.readShort()),i&Ne&&i&Ge?r.effects=o.readLong():i&Ne?r.effects=o.readByte():i&Ge&&(r.effects=o.readShort()),i&Ue&&i&Ve?r.renderfx=o.readLong():i&Ue?r.renderfx=o.readByte():i&Ve&&(r.renderfx=o.readShort()),i&ft&&(r.origin.x=o.readShort()*.125),i&ht&&(r.origin.y=o.readShort()*.125),i&bt&&(r.origin.z=o.readShort()*.125),i&xt&&(r.angles.x=o.readByte()*(360/256)),i&mt&&(r.angles.y=o.readByte()*(360/256)),i&pt&&(r.angles.z=o.readByte()*(360/256)),i&sr&&(r.old_origin.x=o.readShort()*.125,r.old_origin.y=o.readShort()*.125,r.old_origin.z=o.readShort()*.125),i&At&&(r.sound=o.readByte()),i&yt?r.event=o.readByte():r.event=0,i&Et&&(r.solid=o.readShort())}parsePlayerState(e){let r=hr(),n=e.readShort();n&1&&(r.pm_type=e.readByte()),n&2&&(r.origin.x=e.readShort()*.125,r.origin.y=e.readShort()*.125,r.origin.z=e.readShort()*.125),n&4&&(r.velocity.x=e.readShort()*.125,r.velocity.y=e.readShort()*.125,r.velocity.z=e.readShort()*.125),n&8&&(r.pm_time=e.readByte()),n&16&&(r.pm_flags=e.readByte()),n&32&&(r.gravity=e.readShort()),n&64&&(r.delta_angles.x=e.readShort()*(180/32768),r.delta_angles.y=e.readShort()*(180/32768),r.delta_angles.z=e.readShort()*(180/32768)),n&128&&(r.viewoffset.x=(e.readByte()<<24>>24)*.25,r.viewoffset.y=(e.readByte()<<24>>24)*.25,r.viewoffset.z=(e.readByte()<<24>>24)*.25),n&256&&(r.viewangles.x=e.readShort()*(360/65536),r.viewangles.y=e.readShort()*(360/65536),r.viewangles.z=e.readShort()*(360/65536)),n&512&&(r.kick_angles.x=(e.readByte()<<24>>24)*.25,r.kick_angles.y=(e.readByte()<<24>>24)*.25,r.kick_angles.z=(e.readByte()<<24>>24)*.25),n&4096&&(r.gun_index=e.readByte()),n&8192&&(r.gun_frame=e.readByte(),r.gun_offset.x=(e.readByte()<<24>>24)*.25,r.gun_offset.y=(e.readByte()<<24>>24)*.25,r.gun_offset.z=(e.readByte()<<24>>24)*.25,r.gun_angles.x=(e.readByte()<<24>>24)*.25,r.gun_angles.y=(e.readByte()<<24>>24)*.25,r.gun_angles.z=(e.readByte()<<24>>24)*.25),n&1024&&(r.blend[0]=e.readByte(),r.blend[1]=e.readByte(),r.blend[2]=e.readByte(),r.blend[3]=e.readByte()),n&2048&&(r.fov=e.readByte()),n&16384&&(r.rdflags=e.readByte()),n&32768&&(r.watertype=e.readByte());let i=e.readLong();for(let a=0;a<32;a++)i&1<<a&&(r.stats[a]=e.readShort());return r}};var ws=class{constructor(){this.protocolVersion=0}translateCommand(e){return e===7?T.serverdata:e===12?T.serverdata:e===13?T.serverdata:e===T.stufftext?T.stufftext:T.bad}parseServerData(e){let r=e.readLong();if(r===Dr){let n=e.readLong(),i=e.readByte(),a=e.readByte(),o=e.readString(),s=e.readShort();if(s===-2){let l=e.readShort();for(let d=0;d<l;d++)e.readShort();s=0}else s===-1&&(s=-1);let c=e.readString();return{protocol:r,serverCount:n,spawnCount:n,attractLoop:0,gameDir:o,playerNum:s,levelName:c,tickRate:a,demoType:i}}else{let n=e.readLong(),i=e.readByte(),a=e.readString(),o=e.readShort(),s=e.readString();return{protocol:r,serverCount:n,attractLoop:i,gameDir:a,playerNum:o,levelName:s}}}parseEntityBits(e){throw new Error("Bootstrap handler cannot parse entities")}parseDelta(e,r,n,i,a,o){throw new Error("Bootstrap handler cannot parse delta")}parsePlayerState(e){throw new Error("Bootstrap handler cannot parse player state")}};function ep(t){return t===0?new ws:t===Dr?new vc:t===34?new xc:new _c(t)}var tp=1,VS=2,GS=128,Ku=class extends Vn{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")}},ct=class t{constructor(e,r,n=!1){this.strictMode=!1;this.errorCount=0;this.isDemo=tp;e instanceof mn?this.stream=new Ku(e):this.stream=e,this.handler=r,this.strictMode=n,this.protocolHandler=new ws}setProtocolVersion(e){this.protocolHandler.protocolVersion!==e&&(this.protocolHandler=ep(e))}getProtocolVersion(){return this.protocolHandler.protocolVersion}getErrorCount(){return this.errorCount}parseMessage(){for(;this.stream.hasBytes(1);){let e=this.stream.getReadPosition(),r=-1;try{if(r=this.stream.readByte(),r===-1)break;let n=r,i=this.protocolHandler.translateCommand(r);switch(i){case T.bad:if(n===0)return;let a=`Unknown server command: ${n} (translated: ${i}) at offset ${e} (Protocol: ${this.getProtocolVersion()})`;if(this.strictMode)throw new Error(a);console.warn(a),this.errorCount++;return;case T.nop:break;case T.disconnect:this.handler?.onDisconnect&&this.handler.onDisconnect();break;case T.reconnect:this.handler?.onReconnect&&this.handler.onReconnect();break;case T.print:this.parsePrint();break;case T.serverdata:this.parseServerData();break;case T.configstring:this.parseConfigString();break;case T.spawnbaseline:this.parseSpawnBaseline();break;case T.centerprint:this.parseCenterPrint();break;case T.download:this.parseDownload();break;case T.frame:this.parseFrame();break;case T.packetentities:this.parsePacketEntities(!1);break;case T.deltapacketentities:this.parsePacketEntities(!0);break;case T.playerinfo:this.parsePlayerState();break;case T.stufftext:this.parseStuffText();break;case T.layout:this.parseLayout();break;case T.inventory:this.parseInventory();break;case T.sound:this.parseSound();break;case T.muzzleflash:this.parseMuzzleFlash();break;case T.muzzleflash2:this.parseMuzzleFlash2();break;case T.temp_entity:this.parseTempEntity();break;case T.splitclient:this.parseSplitClient();break;case T.configblast:this.parseConfigBlast();break;case T.spawnbaselineblast:this.parseSpawnBaselineBlast();break;case T.level_restart:this.handler?.onLevelRestart&&this.handler.onLevelRestart();break;case T.damage:this.parseDamage();break;case T.locprint:this.parseLocPrint();break;case T.fog:this.parseFog();break;case T.waitingforplayers:this.parseWaitingForPlayers();break;case T.bot_chat:this.parseBotChat();break;case T.poi:this.parsePoi();break;case T.help_path:this.parseHelpPath();break;case T.muzzleflash3:this.parseMuzzleFlash3();break;case T.achievement:this.parseAchievement();break;default:let o=`Unknown server command: ${n} (translated: ${i}) at offset ${e}`;if(this.strictMode)throw new Error(o);console.warn(o),this.errorCount++;return}}catch(n){let i=n.message;if(i==="Buffer underflow"||i.includes("StreamingBuffer")){try{this.stream.setReadPosition(e)}catch(o){console.error("Failed to rollback stream position",o)}return}let a=`offset ${e}, cmd ${r}, protocol ${this.getProtocolVersion()}`;if(console.warn(`Error parsing command ${r} (${a}): ${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(e){e.x=this.stream.readShort()*.125,e.y=this.stream.readShort()*.125,e.z=this.stream.readShort()*.125}readDir(e){let r=this.stream.readByte();if(r>=or.length)e.x=0,e.y=0,e.z=0;else{let n=or[r];e.x=n[0],e.y=n[1],e.z=n[2]}}parsePrint(){let e=this.stream.readByte(),r=this.stream.readString();this.handler&&this.handler.onPrint(e,r)}parseStuffText(){let e=this.stream.readString();this.handler&&this.handler.onStuffText(e)}parseLayout(){let e=this.stream.readString();this.handler&&this.handler.onLayout(e)}parseCenterPrint(){let e=this.stream.readString();this.handler&&this.handler.onCenterPrint(e)}parseServerData(){let e=this.protocolHandler.parseServerData(this.stream);this.setProtocolVersion(e.protocol),this.handler&&this.handler.onServerData(e.protocol,e.serverCount,e.attractLoop,e.gameDir,e.playerNum,e.levelName,e.tickRate,e.demoType),e.protocol===Dr?this.isDemo=e.demoType??tp:this.isDemo=e.attractLoop}parseConfigString(){let e=this.stream.readShort(),r=this.stream.readString();this.handler&&this.handler.onConfigString(e,r)}parseSplitClient(){let e=this.stream.readByte();this.handler?.onSplitClient&&this.handler.onSplitClient(e)}parseConfigBlast(){let e=this.stream.readShort(),r=this.stream.readShort(),n=this.stream.readData(e);try{let i=Xu.inflate(n),a=new mn(i.buffer);for(;a.hasMore();){let o=a.readUShort(),s=a.readString();this.handler&&this.handler.onConfigString(o,s)}}catch(i){console.error("svc_configblast error",i)}}parseSpawnBaselineBlast(){let e=this.stream.readShort(),r=this.stream.readShort(),n=this.stream.readData(e);try{let i=Xu.inflate(n),a=new mn(i.buffer),o=new t(a,this.handler,this.strictMode);for(o.setProtocolVersion(this.getProtocolVersion());a.hasMore();)o.parseSpawnBaseline()}catch(i){console.error("svc_spawnbaselineblast error",i)}}parseLocPrint(){let e=this.stream.readByte(),r=this.stream.readString(),n=this.stream.readByte(),i=[];for(let a=0;a<n;a++)i.push(this.stream.readString());this.handler?.onLocPrint&&this.handler.onLocPrint(e,r,i)}parseWaitingForPlayers(){let e=this.stream.readByte();this.handler?.onWaitingForPlayers&&this.handler.onWaitingForPlayers(e)}parseBotChat(){let e=this.stream.readString(),r=this.stream.readShort(),n=this.stream.readString();this.handler?.onBotChat&&this.handler.onBotChat(n)}parsePoi(){let e=this.stream.readShort(),r=this.stream.readShort(),n={x:0,y:0,z:0};this.readPos(n);let i=this.stream.readShort(),a=this.stream.readByte(),o=this.stream.readByte();this.handler?.onPoi&&this.handler.onPoi(o,n)}parseHelpPath(){let e=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 e=this.stream.readString();this.handler?.onAchievement&&this.handler.onAchievement(e)}parseDownload(){let e=this.stream.readShort(),r=this.stream.readByte(),n;e>0&&(n=this.stream.readData(e)),this.handler&&this.handler.onDownload(e,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 e=this.stream.readByte(),r=this.stream.readByte(),n,i,a,o,s;if(e&1&&(n=this.stream.readByte()),e&2&&(i=this.stream.readByte()),e&16&&(a=this.stream.readByte()),e&8&&(o=this.stream.readShort()),e&4){let c={x:0,y:0,z:0};this.readPos(c),s=c}this.handler&&this.handler.onSound(e,r,n,i,a,o,s)}parseMuzzleFlash(){let e=this.stream.readShort(),r=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash(e,r)}parseMuzzleFlash2(){let e=this.stream.readShort(),r=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash2(e,r)}parseMuzzleFlash3(){let e=this.stream.readShort(),r=this.stream.readShort();this.handler?.onMuzzleFlash3&&this.handler.onMuzzleFlash3(e,r)}parseFog(){let e=this.stream.readByte();if(e&128){let n=this.stream.readByte();e|=n<<8}let r={};e&1&&(r.density=this.stream.readFloat(),r.skyfactor=this.stream.readByte()),e&2&&(r.red=this.stream.readByte()),e&4&&(r.green=this.stream.readByte()),e&8&&(r.blue=this.stream.readByte()),e&16&&(r.time=this.stream.readShort()),e&32&&(r.hf_falloff=this.stream.readFloat()),e&64&&(r.hf_density=this.stream.readFloat()),e&256&&(r.hf_start_r=this.stream.readByte()),e&512&&(r.hf_start_g=this.stream.readByte()),e&1024&&(r.hf_start_b=this.stream.readByte()),e&2048&&(r.hf_start_dist=this.stream.readLong()),e&4096&&(r.hf_end_r=this.stream.readByte()),e&8192&&(r.hf_end_g=this.stream.readByte()),e&16384&&(r.hf_end_b=this.stream.readByte()),e&32768&&(r.hf_end_dist=this.stream.readLong()),this.handler?.onFog&&this.handler.onFog(r)}parseDamage(){let e=this.stream.readByte(),r=[];for(let n=0;n<e;n++){let i=this.stream.readByte(),a={x:0,y:0,z:0};this.readDir(a);let o=i&31,s=(i&32)!==0,c=(i&64)!==0,l=(i&128)!==0;r.push({damage:o,health:s,armor:c,power:l,dir:a})}this.handler?.onDamage&&this.handler.onDamage(r)}parseTempEntity(){let e=this.stream.readByte(),r={x:0,y:0,z:0},n={x:0,y:0,z:0},i={x:0,y:0,z:0},a,o,s,c,l;switch(e){case D.EXPLOSION1:case D.EXPLOSION2:case D.ROCKET_EXPLOSION:case D.GRENADE_EXPLOSION:case D.ROCKET_EXPLOSION_WATER:case D.GRENADE_EXPLOSION_WATER:case D.BFG_EXPLOSION:case D.BFG_BIGEXPLOSION:case D.BOSSTPORT:case D.PLASMA_EXPLOSION:case D.PLAIN_EXPLOSION:case D.CHAINFIST_SMOKE:case D.TRACKER_EXPLOSION:case D.TELEPORT_EFFECT:case D.DBALL_GOAL:case D.NUKEBLAST:case D.WIDOWSPLASH:case D.EXPLOSION1_BIG:case D.EXPLOSION1_NP:this.readPos(r);break;case D.GUNSHOT:case D.BLOOD:case D.BLASTER:case D.SHOTGUN:case D.SPARKS:case D.BULLET_SPARKS:case D.SCREEN_SPARKS:case D.SHIELD_SPARKS:case D.BLASTER2:case D.FLECHETTE:case D.MOREBLOOD:case D.ELECTRIC_SPARKS:case D.HEATBEAM_SPARKS:case D.HEATBEAM_STEAM:this.readPos(r),this.readDir(i);break;case D.SPLASH:case D.LASER_SPARKS:case D.WELDING_SPARKS:case D.TUNNEL_SPARKS:a=this.stream.readByte(),this.readPos(r),this.readDir(i),o=this.stream.readByte();break;case D.BLUEHYPERBLASTER:this.getProtocolVersion()>=32?(this.readPos(r),this.readPos(n)):(this.readPos(r),this.readDir(i));break;case D.GREENBLOOD:this.getProtocolVersion()>=32?(this.readPos(r),this.readDir(i)):(this.readPos(r),this.readPos(n));break;case D.RAILTRAIL:case D.BUBBLETRAIL:case D.BFG_LASER:case D.DEBUGTRAIL:case D.BUBBLETRAIL2:this.readPos(r),this.readPos(n);break;case D.PARASITE_ATTACK:case D.MEDIC_CABLE_ATTACK:this.stream.readShort(),this.readPos(r),this.readPos(n);break;case D.GRAPPLE_CABLE:s=this.stream.readShort(),this.readPos(r),this.readPos(n),this.readPos(i);break;case D.LIGHTNING:c=this.stream.readShort(),l=this.stream.readShort(),this.readPos(r),this.readPos(n);break;case D.FLASHLIGHT:this.readPos(r),s=this.stream.readShort();break;case D.FORCEWALL:this.readPos(r),this.readPos(n),o=this.stream.readByte();break;case D.STEAM:let d=this.stream.readShort();a=this.stream.readByte(),this.readPos(r),this.readDir(i),o=this.stream.readByte(),this.stream.readShort(),d!==-1&&this.stream.readLong();break;case D.WIDOWBEAMOUT:this.stream.readShort();case D.HEATBEAM:case D.MONSTER_HEATBEAM:s=this.stream.readShort(),this.readPos(r),this.readPos(n),this.readDir(i);break}this.handler&&this.handler.onTempEntity(e,r,n,i,a,o,s,c,l)}parseSpawnBaseline(){let e=this.protocolHandler.parseEntityBits(this.stream),r=kr();this.protocolHandler.parseDelta(kr(),r,e.number,e.bits,e.bitsHigh,this.stream),this.handler&&this.handler.onSpawnBaseline(r)}parseFrame(){let e=this.stream.readLong(),r=this.stream.readLong(),n=0;this.getProtocolVersion()!==26&&this.getProtocolVersion()!==25&&(n=this.stream.readByte());let i=this.stream.readByte(),a=this.stream.readData(i),o=this.stream.readByte();if(o=this.protocolHandler.translateCommand(o),o!==T.playerinfo){if(this.strictMode)throw new Error(`Expected svc_playerinfo after svc_frame, got ${o}`);return}let s=this.parsePlayerState(),c=this.stream.readByte();if(c=this.protocolHandler.translateCommand(c),c!==T.packetentities&&c!==T.deltapacketentities){if(this.strictMode)throw new Error(`Expected svc_packetentities after svc_playerinfo, got ${c}`);return}let l=this.collectPacketEntities();if(this.isDemo===GS){let d=this.stream.readByte();for(let f=0;f<d;f++)this.stream.readByte()}this.isDemo===VS&&this.stream.readLong(),this.handler&&this.handler.onFrame({serverFrame:e,deltaFrame:r,surpressCount:n,areaBytes:i,areaBits:a,playerState:s,packetEntities:{delta:!0,entities:l}})}parsePlayerState(){return this.protocolHandler.parsePlayerState(this.stream)}parsePacketEntities(e){let r=this.collectPacketEntities();this.handler&&this.handler.onFrame({serverFrame:0,deltaFrame:0,surpressCount:0,areaBytes:0,areaBits:new Uint8Array,playerState:hr(),packetEntities:{delta:e,entities:r}})}collectPacketEntities(){let e=[];for(;;){let r=this.protocolHandler.parseEntityBits(this.stream);if(r.bits&Xa){if(r.number===0)break;continue}let n=kr();if(r.number===0)break;this.protocolHandler.parseDelta(kr(),n,r.number,r.bits,r.bitsHigh,this.stream),e.push(n)}return e}};var Yu=(d=>(d.WeaponFire="weapon_fire",d.DamageDealt="damage_dealt",d.DamageReceived="damage_received",d.Pickup="pickup",d.Death="death",d.Kill="kill",d.Spawn="spawn",d.PlayerInfo="player_info",d.Chat="chat",d.Objective="objective",d))(Yu||{});var Ba=class{constructor(e){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=e}analyze(){let e=new fr(this.buffer),r=-1,n=0,i=.1,a=0,o={onServerData:(s,c,l,d,f,u,h,m)=>{a=s,this.header={protocolVersion:s,gameDir:d,levelName:u,playerNum:f,serverCount:c,spawnCount:c,tickRate:h,demoType:m},h&&h>0&&(i=1/h)},onConfigString:(s,c)=>{this.configStrings.set(s,c),s===0&&this.parseServerInfo(c)},onSpawnBaseline:s=>{},onFrame:s=>{let c=new Set;if(s.packetEntities&&s.packetEntities.entities)for(let l of s.packetEntities.entities)c.add(l.number),this.activeEntities.has(l.number)||this.recordEvent({type:"spawn",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,s.playerState&&this.header},onPrint:(s,c)=>{let l=c.replace(/\n/g," ").trim();l.includes("died")||l.includes("killed")||l.includes("suicide")?(this.summary.totalDeaths++,this.recordEvent({type:"death",frame:r,time:n,description:l})):l.startsWith("You got the ")?this.recordEvent({type:"pickup",frame:r,time:n,description:l}):(s===3||s===2)&&this.recordEvent({type:"chat",frame:r,time:n,description:l,data:{level:s}})},onCenterPrint:s=>{this.recordEvent({type:"objective",frame:r,time:n,description:s.trim()})},onStuffText:()=>{},onSound:()=>{},onTempEntity:()=>{},onLayout:()=>{},onInventory:()=>{},onMuzzleFlash:(s,c)=>{this.handleWeaponFire(s,c,r,n)},onMuzzleFlash2:(s,c)=>{this.handleWeaponFire(s,c,r,n)},onMuzzleFlash3:(s,c)=>{this.handleWeaponFire(s,c,r,n)},onDisconnect:()=>{},onReconnect:()=>{},onDownload:()=>{},onDamage:s=>{for(let c of s)if(this.recordEvent({type:"damage_received",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(;e.hasMore();){let s=e.readNextBlock();if(!s)break;r++,n=r*i;let c=new ct(s.data,o);c.setProtocolVersion(a),c.parseMessage(),a=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(e,r,n,i){this.recordEvent({type:"weapon_fire",frame:n,time:i,entityId:e,value:r,description:`Weapon ${r} fired by ${e}`});let a=this.summary.weaponUsage.get(r)||0;this.summary.weaponUsage.set(r,a+1);let o=this.getOrCreateWeaponStat(e,r);o.shotsFired++}recordEvent(e){this.events.push(e)}parseServerInfo(e){let r=e.split("\\");for(let n=1;n<r.length;n+=2)n+1<r.length&&(this.serverInfo[r[n]]=r[n+1])}getOrCreatePlayerStats(e){let r=this.playerStats.get(e);return r||(r={kills:0,deaths:0,damageDealt:0,damageReceived:0,suicides:0},this.playerStats.set(e,r)),r}getOrCreateWeaponStat(e,r){let n=this.weaponStats.get(e);n||(n=[],this.weaponStats.set(e,n));let i=n.find(a=>a.weaponId===r);return i||(i={weaponId:r,shotsFired:0,hits:0,kills:0},n.push(i)),i}};var $u=(i=>(i[i.FirstPerson=0]="FirstPerson",i[i.ThirdPerson=1]="ThirdPerson",i[i.Free=2]="Free",i[i.Follow=3]="Follow",i))($u||{});var Sc=(i=>(i[i.Stopped=0]="Stopped",i[i.Playing=1]="Playing",i[i.Paused=2]="Paused",i[i.Finished=3]="Finished",i))(Sc||{}),WS=()=>({onServerData:()=>{},onConfigString:()=>{},onSpawnBaseline:()=>{},onFrame:()=>{},onCenterPrint:()=>{},onStuffText:()=>{},onPrint:()=>{},onSound:()=>{},onTempEntity:()=>{},onLayout:()=>{},onInventory:()=>{},onMuzzleFlash:()=>{},onMuzzleFlash2:()=>{},onDisconnect:()=>{},onReconnect:()=>{},onDownload:()=>{}}),Ms=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(e){this.handler=e}setCallbacks(e){this.callbacks=e}loadDemo(e){this.buffer=e,this.reader=new fr(e),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(e){this.state!==e&&(this.state=e,this.callbacks?.onPlaybackStateChange&&this.callbacks.onPlaybackStateChange(e))}setFrameDuration(e){this.frameDuration=e}setSpeed(e){this.playbackSpeed=Math.max(.1,Math.min(e,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(e){if(!(this.state!==1||!this.reader))for(this.accumulatedTime+=e*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(e){let r=this.timeToFrame(e);this.seek(r)}seekToFrame(e){this.seek(e)}frameToTime(e){return e*this.frameDuration/1e3}timeToFrame(e){return Math.floor(e*1e3/this.frameDuration)}playFrom(e){if(e.type==="frame")this.seek(e.frame);else if(e.type==="time")this.seekToTime(e.seconds);else throw new Error(`Invalid offset type: ${e.type}`);this.play()}playRange(e,r){let n=e.type==="frame"?e.frame:this.timeToFrame(e.seconds),i=r.type==="frame"?r.frame:this.timeToFrame(r.seconds),a=this.getTotalFrames(),o=Math.max(0,a-1);if(n<0)throw new Error(`Invalid start offset: ${n}`);if(i<n)throw new Error(`End offset (${i}) cannot be before start offset (${n})`);this.playFrom(e);let s=this.callbacks?.onFrameUpdate,c={...this.callbacks,onFrameUpdate:l=>{if(s&&s(l),this.currentFrameIndex>=i){this.pause();let d=this.callbacks?.onPlaybackComplete;this.callbacks===c&&this.setCallbacks({...this.callbacks,onFrameUpdate:s}),d&&d()}}};this.setCallbacks(c)}seek(e){if(!this.reader)return;let r=this.getTotalFrames();if(r>0&&e>=r&&(e=r-1),e<0&&(e=0),e===this.currentFrameIndex+1){this.processNextFrame(),this.callbacks?.onSeekComplete&&this.callbacks.onSeekComplete();return}if(e===this.currentFrameIndex){this.callbacks?.onSeekComplete&&this.callbacks.onSeekComplete();return}let n=-1,i=null;if(e>this.currentFrameIndex&&this.currentFrameIndex!==-1&&(n=this.currentFrameIndex),this.callbacks?.onRestoreSnapshot)for(let[a,o]of this.snapshots)a<=e&&a>n&&(n=a,i=o);for(n===-1&&this.currentFrameIndex>e?(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<e&&(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 e=this.reader.readNextBlock();if(!e)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||WS(),onFrame:i=>{this.lastFrameData=i,this.handler?.onFrame&&this.handler.onFrame(i),this.callbacks?.onFrameUpdate&&this.callbacks.onFrameUpdate(i)}},n=new ct(e.data,r);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/1e3:(this.currentFrameIndex*this.frameDuration+this.accumulatedTime)/1e3}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(e){if(e===this.currentFrameIndex&&this.lastFrameData)return this.lastFrameData;let r=this.state;return this.pause(),this.seek(e),r===1&&this.play(),this.lastFrameData}getFramePlayerState(e){if(e===this.currentFrameIndex&&this.handler?.getPlayerState){let n=this.handler.getPlayerState();if(n)return n}let r=this.getFrameData(e);return r?r.playerState:null}getFrameEntities(e){if(e===this.currentFrameIndex&&this.handler?.getEntities){let r=this.handler.getEntities();if(r)return Array.from(r.values())}if(this.seek(e),this.handler?.getEntities){let r=this.handler.getEntities();return r?Array.from(r.values()):[]}return[]}compareFrames(e,r){let n=this.getFramePlayerState(e),i=this.getFrameEntities(e),a=new Map;i.forEach(d=>a.set(d.number,d));let o=this.getFramePlayerState(r),s=this.getFrameEntities(r),c=new Map;s.forEach(d=>c.set(d.number,d));let l={frameA:e,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=a.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 a)c.has(d)||l.entityDiffs.removed.push(d);return l}getEntityTrajectory(e,r,n){let i=[],a=this.getCurrentFrame();for(this.seek(r);this.getCurrentFrame()<=n&&this.state!==3;){let o=null;if(e===-1){let s=this.getFramePlayerState(this.getCurrentFrame());s&&(o={...s.origin})}else if(this.handler?.getEntities){let s=this.handler.getEntities().get(e);s&&(o={...s.origin})}if(o&&i.push(o),this.getCurrentFrame()===n)break;this.stepForward()}return this.seek(a),i}getEvents(){return this.ensureAnalysis(),this.cachedEvents||[]}getDemoEvents(){return this.getEvents()}filterEvents(e,r){return this.getDemoEvents().filter(i=>!(i.type!==e||r!==void 0&&i.entityId!==r))}getEventSummary(){return this.ensureAnalysis(),this.cachedSummary||{totalKills:0,totalDeaths:0,damageDealt:0,damageReceived:0,weaponUsage:new Map}}getMetadata(){let e=this.getDemoHeader();if(!e)return null;let r=this.getDemoServerInfo(),n="Unknown";return this.cachedConfigStrings,{mapName:e.levelName,playerName:n,serverName:r.hostname,demoVersion:e.protocolVersion,tickRate:e.tickRate||10}}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(e){return this.ensureAnalysis(),this.cachedPlayerStats?.get(e)||null}getWeaponStatistics(e){return this.ensureAnalysis(),this.cachedWeaponStats?.get(e)||null}ensureAnalysis(){if(!this.cachedEvents&&this.buffer){let r=new Ba(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(e){this.cameraMode=e}getCameraMode(){return this.cameraMode}setThirdPersonDistance(e){this.thirdPersonDistance=e}setThirdPersonOffset(e){this.thirdPersonOffset=e}async playWithTracking(e,r={}){if(this.tracker=e,e.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 a=0;for(;a<n;){if(!this.processNextFrame()){this.transitionState(0);let o=e.stopTracking();return this.tracker=null,this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),o}a++}return await new Promise(o=>setTimeout(o,0)),i()};return await i()}catch(n){throw this.transitionState(0),e.stopTracking(),this.tracker=null,n}else return new Promise((n,i)=>{let a=this.callbacks?.onPlaybackComplete,o=this.callbacks?.onPlaybackError,s=()=>{this.setCallbacks({...this.callbacks,onPlaybackComplete:a,onPlaybackError:o}),this.tracker=null};this.setCallbacks({...this.callbacks,onPlaybackComplete:()=>{let c=e.stopTracking();a&&a(),s(),n(c)},onPlaybackError:c=>{e.stopTracking(),o&&o(c),s(),i(c)}}),this.play()})}async playRangeWithTracking(e,r,n,i={}){this.tracker=n,n.startTracking();let a=e.type==="frame"?e.frame:this.timeToFrame(e.seconds),o=r.type==="frame"?r.frame:this.timeToFrame(r.seconds);if(i.fastForward)try{this.playFrom(e),this.transitionState(1);let s=100,c=async()=>{if(this.state!==1)throw new Error("Playback stopped unexpectedly during fast forward");let l=0;for(;l<s;){if(this.currentFrameIndex>=o||!this.processNextFrame()){this.transitionState(0);let d=n.stopTracking();return this.tracker=null,this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),d}l++}return await new Promise(d=>setTimeout(d,0)),c()};return await c()}catch(s){throw this.transitionState(0),n.stopTracking(),this.tracker=null,s}else return new Promise((s,c)=>{let l=this.callbacks?.onPlaybackComplete,d=this.callbacks?.onPlaybackError,f=()=>{this.setCallbacks({...this.callbacks,onPlaybackComplete:l,onPlaybackError:d}),this.tracker=null};this.setCallbacks({...this.callbacks,onPlaybackComplete:()=>{let u=n.stopTracking();l&&l(),f(),s(u)},onPlaybackError:u=>{n.stopTracking(),d&&d(u),f(),c(u)}}),this.playRange(e,r)})}};var As=class{constructor(){this.isRecording=!1;this.startTime=0;this.frameCount=0;this.filename=null;this.lastMessageSize=-1;this.messageBuffer=new jn(1024*1024)}startRecording(e,r=0){this.isRecording||(this.isRecording=!0,this.filename=e,this.startTime=r,this.frameCount=0,this.messageBuffer.reset(),console.log(`DemoRecorder: Started recording to ${e}`))}recordMessage(e){if(this.isRecording){this.messageBuffer.writeLong(e.byteLength);for(let r=0;r<e.length;r++)this.messageBuffer.writeByte(e[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 wc=class{constructor(e,r=34){this.writer=e||new jn(new Uint8Array(64*1024)),this.protocol=r}getData(){return this.writer.getData()}getOpcode(e){if(this.protocol===34)switch(e){case T.serverdata:return 13;case T.frame:return 5;case T.playerinfo:return 17;case T.packetentities:return 18;case T.deltapacketentities:return 19;case T.print:return 11;case T.centerprint:return 16;case T.stufftext:return 12;case T.sound:return 10;case T.temp_entity:return 9;case T.configstring:return 14;case T.spawnbaseline:return 15;case T.layout:return 7;case T.inventory:return 6;case T.muzzleflash:return 8;case T.muzzleflash2:return 20}return e}writeCommand(e,r){let n=r??this.protocol;n===34||n===0?this.writer.writeByte(this.getOpcode(e)):this.writer.writeByte(e)}writeServerData(e,r,n,i,a,o){this.writeCommand(T.serverdata),this.writer.writeLong(e),this.writer.writeLong(r),this.writer.writeByte(n),this.writer.writeString(i),this.writer.writeShort(a),this.writer.writeString(o)}writeConfigString(e,r){this.writeCommand(T.configstring),this.writer.writeShort(e),this.writer.writeString(r)}writeStuffText(e){this.writeCommand(T.stufftext),this.writer.writeString(e)}writeCenterPrint(e){this.writeCommand(T.centerprint),this.writer.writeString(e)}writePrint(e,r){this.writeCommand(T.print),this.writer.writeByte(e),this.writer.writeString(r)}writeLayout(e){this.writeCommand(T.layout),this.writer.writeString(e)}writeInventory(e){this.writeCommand(T.inventory);for(let r of e)this.writer.writeShort(r);for(let r=e.length;r<256;r++)this.writer.writeShort(0)}writeMuzzleFlash(e,r){this.writeCommand(T.muzzleflash),this.writer.writeShort(e),this.writer.writeByte(r)}writeMuzzleFlash2(e,r){this.writeCommand(T.muzzleflash2),this.writer.writeShort(e),this.writer.writeByte(r)}writeSound(e,r,n,i,a,o,s,c){this.writeCommand(T.sound),this.writer.writeByte(e),this.writer.writeByte(r),e&1&&this.writer.writeByte(n),e&2&&this.writer.writeByte(i),e&16&&this.writer.writeByte(a),e&8&&this.writer.writeShort(o),e&4&&(this.writer.writeCoord(s.x),this.writer.writeCoord(s.y),this.writer.writeCoord(s.z))}writeTempEntity(e,r,n,i,a,o,s,c,l){this.writeCommand(T.temp_entity),this.writer.writeByte(e),r&&this.writer.writePos(r)}writePlayerState(e){this.writeCommand(T.playerinfo);let r=0;e.pm_type!==0&&(r|=1),(e.origin.x!==0||e.origin.y!==0||e.origin.z!==0)&&(r|=2),(e.velocity.x!==0||e.velocity.y!==0||e.velocity.z!==0)&&(r|=4),e.pm_time!==0&&(r|=8),e.pm_flags!==0&&(r|=16),e.gravity!==0&&(r|=32),(e.delta_angles.x!==0||e.delta_angles.y!==0||e.delta_angles.z!==0)&&(r|=64),(e.viewoffset.x!==0||e.viewoffset.y!==0||e.viewoffset.z!==0)&&(r|=128),(e.viewangles.x!==0||e.viewangles.y!==0||e.viewangles.z!==0)&&(r|=256),(e.kick_angles.x!==0||e.kick_angles.y!==0||e.kick_angles.z!==0)&&(r|=512),e.gun_index!==0&&(r|=4096),(e.gun_frame!==0||e.gun_offset.x!==0||e.gun_offset.y!==0||e.gun_offset.z!==0||e.gun_angles.x!==0||e.gun_angles.y!==0||e.gun_angles.z!==0)&&(r|=8192),(e.blend[0]!==0||e.blend[1]!==0||e.blend[2]!==0||e.blend[3]!==0)&&(r|=1024),e.fov!==0&&(r|=2048),e.rdflags!==0&&(r|=16384),e.watertype!==0&&(r|=32768),this.writer.writeShort(r),r&1&&this.writer.writeByte(e.pm_type),r&2&&(this.writer.writeShort(e.origin.x/.125),this.writer.writeShort(e.origin.y/.125),this.writer.writeShort(e.origin.z/.125)),r&4&&(this.writer.writeShort(e.velocity.x/.125),this.writer.writeShort(e.velocity.y/.125),this.writer.writeShort(e.velocity.z/.125)),r&8&&this.writer.writeByte(e.pm_time),r&16&&this.writer.writeByte(e.pm_flags),r&32&&this.writer.writeShort(e.gravity),r&64&&(this.writer.writeShort(e.delta_angles.x/(180/32768)),this.writer.writeShort(e.delta_angles.y/(180/32768)),this.writer.writeShort(e.delta_angles.z/(180/32768))),r&128&&(this.writer.writeByte(e.viewoffset.x/.25),this.writer.writeByte(e.viewoffset.y/.25),this.writer.writeByte(e.viewoffset.z/.25)),r&256&&(this.writer.writeShort(e.viewangles.x/(360/65536)),this.writer.writeShort(e.viewangles.y/(360/65536)),this.writer.writeShort(e.viewangles.z/(360/65536))),r&512&&(this.writer.writeByte(e.kick_angles.x/.25),this.writer.writeByte(e.kick_angles.y/.25),this.writer.writeByte(e.kick_angles.z/.25)),r&4096&&this.writer.writeByte(e.gun_index),r&8192&&(this.writer.writeByte(e.gun_frame),this.writer.writeByte(e.gun_offset.x/.25),this.writer.writeByte(e.gun_offset.y/.25),this.writer.writeByte(e.gun_offset.z/.25),this.writer.writeByte(e.gun_angles.x/.25),this.writer.writeByte(e.gun_angles.y/.25),this.writer.writeByte(e.gun_angles.z/.25)),r&1024&&(this.writer.writeByte(e.blend[0]),this.writer.writeByte(e.blend[1]),this.writer.writeByte(e.blend[2]),this.writer.writeByte(e.blend[3])),r&2048&&this.writer.writeByte(e.fov),r&16384&&this.writer.writeByte(e.rdflags),r&32768&&this.writer.writeByte(e.watertype);let n=0;for(let i=0;i<32;i++)e.stats[i]!==0&&(n|=1<<i);this.writer.writeLong(n);for(let i=0;i<32;i++)n&1<<i&&this.writer.writeShort(e.stats[i])}writePacketEntities(e,r,n){this.writeCommand(r?T.deltapacketentities:T.packetentities);for(let i of e)this.writeDeltaEntity(kr(),i,!0);this.writer.writeShort(0)}writeFrame(e,r){this.writeCommand(T.frame),this.writer.writeLong(e.serverFrame),this.writer.writeLong(e.deltaFrame),r!==26&&r!==25&&this.writer.writeByte(e.surpressCount),this.writer.writeByte(e.areaBytes),this.writer.writeBytes(e.areaBits),this.writePlayerState(e.playerState),this.writePacketEntities(e.packetEntities.entities,e.packetEntities.delta,r)}writeDeltaEntity(e,r,n){let i=0,a=0;(r.modelindex!==e.modelindex||n)&&(i|=vt),(r.modelindex2!==e.modelindex2||n)&&(i|=St),(r.modelindex3!==e.modelindex3||n)&&(i|=wt),(r.modelindex4!==e.modelindex4||n)&&(i|=Mt),(r.frame!==e.frame||n)&&(r.frame>=256?i|=_t:i|=gt),(r.skinnum!==e.skinnum||n)&&(r.skinnum>=256?i|=We:i|=He),(r.effects!==e.effects||n)&&(r.effects>=256?i|=Ge:i|=Ne),(r.renderfx!==e.renderfx||n)&&(r.renderfx>=256?i|=Ve:i|=Ue),(r.origin.x!==e.origin.x||n)&&r.origin.x!==0&&(i|=ft),(r.origin.y!==e.origin.y||n)&&r.origin.y!==0&&(i|=ht),(r.origin.z!==e.origin.z||n)&&r.origin.z!==0&&(i|=bt),(r.angles.x!==e.angles.x||n)&&r.angles.x!==0&&(i|=xt),(r.angles.y!==e.angles.y||n)&&r.angles.y!==0&&(i|=mt),(r.angles.z!==e.angles.z||n)&&r.angles.z!==0&&(i|=pt),(r.sound!==e.sound||n)&&(i|=At),(r.event!==e.event||n)&&(i|=yt),(r.solid!==e.solid||n)&&(i|=Et),this.protocol!==34&&((r.alpha!==e.alpha||n)&&(i|=yr),(r.scale!==e.scale||n)&&(i|=vr),(r.instanceBits!==e.instanceBits||n)&&(i|=_r),(r.loopVolume!==e.loopVolume||n)&&(i|=Sr),(r.loopAttenuation!==e.loopAttenuation||n)&&(a|=un),(r.owner!==e.owner||n)&&(a|=fn),(r.oldFrame!==e.oldFrame||n)&&(a|=hn)),a>0&&(i|=Ii),i&4278190080&&(i|=xr),i&4294901760&&(i|=br),i&4294967040&&(i|=gr),this.writer.writeByte(i&255),i&gr&&this.writer.writeByte(i>>8&255),i&br&&this.writer.writeByte(i>>16&255),i&xr&&this.writer.writeByte(i>>24&255),i&Ii&&this.writer.writeByte(a&255),r.number>=256?this.writer.writeShort(r.number):this.writer.writeByte(r.number),i&vt&&this.writer.writeByte(r.modelindex),i&St&&this.writer.writeByte(r.modelindex2),i&wt&&this.writer.writeByte(r.modelindex3),i&Mt&&this.writer.writeByte(r.modelindex4),i&gt&&this.writer.writeByte(r.frame),i&_t&&this.writer.writeShort(r.frame),i&He&&this.writer.writeByte(r.skinnum),i&We&&this.writer.writeShort(r.skinnum),i&Ne&&this.writer.writeByte(r.effects),i&Ge&&this.writer.writeShort(r.effects),i&Ue&&this.writer.writeByte(r.renderfx),i&Ve&&this.writer.writeShort(r.renderfx),i&ft&&this.writer.writeCoord(r.origin.x),i&ht&&this.writer.writeCoord(r.origin.y),i&bt&&this.writer.writeCoord(r.origin.z),i&xt&&this.writer.writeAngle(r.angles.x),i&mt&&this.writer.writeAngle(r.angles.y),i&pt&&this.writer.writeAngle(r.angles.z),i&At&&this.writer.writeByte(r.sound??0),i&yt&&this.writer.writeByte(r.event??0),i&Et&&this.writer.writeShort(r.solid),this.protocol!==34&&(i&yr&&this.writer.writeByte(r.alpha*255),i&vr&&this.writer.writeFloat(r.scale),i&_r&&this.writer.writeLong(r.instanceBits),i&Sr&&this.writer.writeByte(r.loopVolume*255),a&un&&this.writer.writeByte(r.loopAttenuation*255),a&fn&&this.writer.writeShort(r.owner),a&hn&&this.writer.writeShort(r.oldFrame))}};var Mc=class{static validate(e,r){if(r&&!r.toLowerCase().endsWith(".dm2"))return{valid:!1,error:"Invalid file extension (expected .dm2)"};if(e.byteLength<5)return{valid:!1,error:"File too small to be a valid demo"};let n=new DataView(e),i=n.getInt32(0,!0);if(i<=0||i>e.byteLength-4)return{valid:!1,error:`Invalid first block length: ${i}`};let a=n.getUint8(4);if(a!==T.serverdata)return{valid:!1,error:`First command is not svc_serverdata (expected ${T.serverdata}, got ${a})`};let o=-1;return i>=5&&(o=n.getInt32(5,!0)),{valid:!0,version:o}}};var Ac=class{constructor(e){this.frames=[];this.configStrings=new Map;this.baselines=new Map;this.currentEntities=new Map;if(e){let r=new Vn(e.byteLength);r.append(new Uint8Array(e)),r.setReadPosition(0),this.parser=new ct(r,this)}else this.parser=new ct(new Vn,this)}extractClip(e,r,n,i){let a=new fr(e.buffer),o=[],s=0,c=r.frame??-1,l=n.frame??Number.MAX_SAFE_INTEGER,d=0,f=0;for(;a.nextBlock();){let p=a.getBlock().data,y=!1,v=-1,x=!1,b={onServerData:S=>{d=S,y=!0,x=!0},onConfigString:()=>{y=!0,x=!0},onSpawnBaseline:()=>{y=!0,x=!0},onFrame:S=>{v=S.serverFrame,x=!0,v>=c&&v<=l&&(y=!0)},onCenterPrint:()=>{x=!0},onStuffText:()=>{x=!0},onPrint:()=>{x=!0},onSound:()=>{x=!0},onTempEntity:()=>{x=!0},onLayout:()=>{x=!0},onInventory:()=>{x=!0},onMuzzleFlash:()=>{x=!0},onMuzzleFlash2:()=>{x=!0},onDisconnect:()=>{x=!0},onReconnect:()=>{x=!0},onDownload:()=>{x=!0}},_=new Vn(p.getLength());_.append(p.readData(p.getLength())),_.setReadPosition(0),p.seek(0);let w=new ct(_,b);d>0&&w.setProtocolVersion(d);try{w.parseMessage()}catch{}if(x||f>=c&&f<=l&&(y=!0),y){let S=new Uint8Array(4);new DataView(S.buffer).setUint32(0,p.getLength(),!0),o.push(S);let L=p.readData(p.getLength());o.push(L),s+=4+L.length}f++}let u=new Uint8Array(4);new DataView(u.buffer).setInt32(0,-1,!0),o.push(u),s+=4;let h=new Uint8Array(s),m=0;for(let g of o)h.set(g,m),m+=g.length;return h}extractDemoRange(e,r,n){return this.extractClip(e,{frame:r},{frame:n})}onServerData(e,r,n,i,a,o){this.serverData={protocol:e,serverCount:r,attractLoop:n,gameDir:i,playerNum:a,levelName:o}}onConfigString(e,r){this.configStrings.set(e,r)}onSpawnBaseline(e){this.baselines.set(e.number,e)}onFrame(e){this.frames.push(e)}onCenterPrint(e){}onStuffText(e){}onPrint(e,r){}onSound(e,r,n,i,a,o,s){}onTempEntity(e,r,n,i,a,o,s,c,l){}onLayout(e){}onInventory(e){}onMuzzleFlash(e,r){}onMuzzleFlash2(e,r){}onDisconnect(){}onReconnect(){}onDownload(e,r,n){}};function rp(t,e){let r=e.bits;t.bits=r,t.number=e.number,r&vt&&(t.modelindex=e.modelindex),r&St&&(t.modelindex2=e.modelindex2),r&wt&&(t.modelindex3=e.modelindex3),r&Mt&&(t.modelindex4=e.modelindex4),r&gt&&(t.frame=e.frame),r&_t&&(t.frame=e.frame),r&He&&(t.skinnum=e.skinnum),r&We&&(t.skinnum=e.skinnum),r&Ne&&(t.effects=e.effects),r&Ge&&(t.effects=e.effects),r&Ue&&(t.renderfx=e.renderfx),r&Ve&&(t.renderfx=e.renderfx),r&ft&&(t.origin.x=e.origin.x),r&ht&&(t.origin.y=e.origin.y),r&bt&&(t.origin.z=e.origin.z),r&xt&&(t.angles.x=e.angles.x),r&mt&&(t.angles.y=e.angles.y),r&pt&&(t.angles.z=e.angles.z),r&sr&&(t.old_origin.x=e.old_origin.x,t.old_origin.y=e.old_origin.y,t.old_origin.z=e.old_origin.z),r&At&&(t.sound=e.sound),r&yt&&(t.event=e.event),r&Et&&(t.solid=e.solid),r&yr&&(t.alpha=e.alpha),r&vr&&(t.scale=e.scale),r&_r&&(t.instanceBits=e.instanceBits),r&Sr&&(t.loopVolume=e.loopVolume)}var qu=(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))(qu||{}),np={".bsp":"bsp",".md2":"md2",".md3":"md3",".wal":"wal",".pcx":"pcx",".tga":"tga",".wav":"wav",".ogg":"ogg",".txt":"txt",".cfg":"cfg",".dm2":"dem"};function Es(t,e){if(t.length<e.length)return!1;for(let r=0;r<e.length;r++)if(t[r]!==e[r])return!1;return!0}var XS=[73,66,83,80],KS=[73,68,80,50],YS=[73,68,80,51];var $S=[82,73,70,70];var qS=[79,103,103,83];function Zu(t,e){let r=t.slice(t.lastIndexOf(".")).toLowerCase();if(e){if(Es(e,XS))return"bsp";if(Es(e,KS))return"md2";if(Es(e,YS))return"md3";if(Es(e,qS))return"ogg";if(e.length>128&&e[0]===10&&e[1]<6)return"pcx";if(Es(e,$S)&&e.length>=12&&e[8]===87&&e[9]===65&&e[10]===86&&e[11]===69)return"wav"}return np[r]?np[r]:"unknown"}function ju(t){let e=Zu(t);return e==="txt"||e==="cfg"}function ip(t){return!ju(t)}function ZS(t,e,r,n,i){let a=new Uint8ClampedArray(n*i*4),o=e/n,s=r/i;for(let c=0;c<i;c++)for(let l=0;l<n;l++){let d=l*o,f=c*s,u=Math.floor(d),h=Math.floor(f),m=d-u,g=f-h,p=Math.min(u+1,e-1),y=Math.min(h+1,r-1),v=(h*e+u)*4,x=(h*e+p)*4,b=(y*e+u)*4,_=(y*e+p)*4,w=(c*n+l)*4;for(let S=0;S<4;S++){let E=t[v+S],L=t[x+S],M=t[b+S],C=t[_+S],I=E*(1-m)+L*m,B=M*(1-m)+C*m,F=I*(1-g)+B*g;a[w+S]=F}}return a}function jS(t,e,r,n,i,a,o,s,c,l,d){n=Math.floor(n),i=Math.floor(i),a=Math.floor(a),o=Math.floor(o);let f=Math.abs(a-n),u=Math.abs(o-i),h=n<a?1:-1,m=i<o?1:-1,g=f-u;for(;;){if(n>=0&&n<e&&i>=0&&i<r){let y=(i*e+n)*4,v=1-d/255;t[y]=s*(d/255)+t[y]*v,t[y+1]=c*(d/255)+t[y+1]*v,t[y+2]=l*(d/255)+t[y+2]*v,t[y+3]=255}if(n===a&&i===o)break;let p=2*g;p>-u&&(g-=u,n+=h),p<f&&(g+=f,i+=m)}}function ap(t,e,r,n,i){let s=(t.x-n.x)*.707-(t.y-n.y)*.707,c=(t.x-n.x)*.707+(t.y-n.y)*.707,l=t.z-n.z,d=.866,f=.5,u=c*d-l*f,h=c*f+l*d,m=e/2+s*i,g=r/2-h*i;return{x:m,y:g}}var Ec=class{constructor(e){this.assetManager=e}async generateTextureThumbnail(e,r){try{let n=await this.assetManager.loadTexture(e);if(!n||n.levels.length===0)return null;let i=n.levels[0],a=i.width/i.height,o=r,s=r;a>1?s=Math.floor(r/a):o=Math.floor(r*a),o=Math.max(1,o),s=Math.max(1,s);let c=ZS(i.rgba,i.width,i.height,o,s);return new ImageData(c,o,s)}catch(n){return console.error(`Failed to generate thumbnail for ${e}`,n),null}}async generateModelThumbnail(e,r){try{let n=[],i=[],a=e.split(".").pop()?.toLowerCase();if(a==="md2"){let p=await this.assetManager.loadMd2Model(e);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(a==="md3"){let p=await this.assetManager.loadMd3Model(e);if(!p||p.surfaces.length===0)return null;let y=0;for(let v of p.surfaces){if(v.vertices.length===0)continue;let x=v.vertices[0];n.push(...x.map(b=>({x:b.position.x,y:b.position.y,z:b.position.z})));for(let b of v.triangles)i.push(y+b.indices[0],y+b.indices[1]),i.push(y+b.indices[1],y+b.indices[2]),i.push(y+b.indices[2],y+b.indices[0]);y+=x.length}}else return null;if(n.length===0)return null;let o={x:1/0,y:1/0,z:1/0},s={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),s.x=Math.max(s.x,p.x),s.y=Math.max(s.y,p.y),s.z=Math.max(s.z,p.z);let c={x:(o.x+s.x)/2,y:(o.y+s.y)/2,z:(o.z+s.z)/2},l=s.x-o.x,d=s.y-o.y,f=s.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],v=i[p+1],x=n[y],b=n[v],_=ap(x,r,r,c,m),w=ap(b,r,r,c,m);jS(g,r,r,_.x,_.y,w.x,w.y,0,255,0,255)}return new ImageData(g,r,r)}catch(n){return console.error(`Failed to generate model thumbnail for ${e}`,n),null}}async getMapBounds(e,r){try{let n=ja(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(e){return null}};var Lc=class{constructor(e){this.loader=e}async getMapStatistics(e){let r=await this.loader.load(e),n=r.faces.filter(o=>o.lightOffset!==-1).length,i=r.models[0],a=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:a}}async getUsedTextures(e){let r=await this.loader.load(e),n=new Set;for(let i of r.texInfo)i.texture&&n.add(i.texture);return Array.from(n).sort()}async getUsedModels(e){let r=await this.loader.load(e),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(e){let r=await this.loader.load(e),n=new Set;for(let i of r.entities.entities){i.properties.noise&&n.add(i.properties.noise);for(let[a,o]of Object.entries(i.properties))(a==="noise"||a.endsWith("_sound")||a==="sound")&&typeof o=="string"&&n.add(o)}return Array.from(n).sort()}};function op(t){let e=[],r=0,n=t.length;function i(){for(;r<n&&/\s/.test(t[r]);)r++}function a(){if(i(),r>=n)return null;if(t[r]==='"'){r++;let o=r;for(;r<n&&t[r]!=='"';)t[r],r++;let s=t.substring(o,r);return r++,s}else{if(t[r]==="{"||t[r]==="}")return t[r++];{if(t.startsWith("//",r)){for(;r<n&&t[r]!==`
783
- `;)r++;return a()}let o=r;for(;r<n&&!/\s/.test(t[r])&&t[r]!=="}"&&t[r]!=="{";)r++;return t.substring(o,r)}}}for(;r<n;){let o=a();if(o===null)break;if(o==="{"){let s={};for(;;){let c=r,l=a();if(l==="}"||l===null)break;if(l==="{"){r=c;break}let d=a();if(d===null||d==="}"||d==="{"){d==="}"&&r--,d==="{"&&r--;break}s[l]=d}e.push({classname:s.classname,properties:s})}}return e}function sp(t){let e="";for(let r of t){e+=`{
784
- `;let i=Object.keys(r.properties).sort((a,o)=>a==="classname"?-1:o==="classname"?1:a==="origin"?-1:o==="origin"?1:a.localeCompare(o));for(let a of i){let o=r.properties[a];e+=`"${a}" "${o}"
782
+ `;function oc(t){return L.fromValues(t.x,t.y,t.z)}function rr(t){return{x:t[0],y:t[1],z:t[2]}}var ac=class{constructor(e){this.vertices=[];this.solidVertices=[];this.labels=[];this.gl=e,this.shader=le.create(e,{vertex:Qx,fragment:Jx}),this.vao=new Le(e),this.vbo=new Ae(e,e.DYNAMIC_DRAW),this.vao.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:24,offset:0},{index:1,size:3,type:e.FLOAT,stride:24,offset:12}],this.vbo),this.shaderSolid=le.create(e,{vertex:ev,fragment:tv}),this.vaoSolid=new Le(e),this.vboSolid=new Ae(e,e.DYNAMIC_DRAW),this.vaoSolid.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:36,offset:0},{index:1,size:3,type:e.FLOAT,stride:36,offset:12},{index:2,size:3,type:e.FLOAT,stride:36,offset:24}],this.vboSolid)}get shaderSize(){return this.shader.sourceSize+this.shaderSolid.sourceSize}drawLine(e,r,n){this.vertices.push(e.x,e.y,e.z,n.r,n.g,n.b,r.x,r.y,r.z,n.r,n.g,n.b)}drawBoundingBox(e,r,n){let{x:i,y:o,z:a}=e,{x:s,y:c,z:l}=r;this.drawLine({x:i,y:o,z:a},{x:s,y:o,z:a},n),this.drawLine({x:s,y:o,z:a},{x:s,y:c,z:a},n),this.drawLine({x:s,y:c,z:a},{x:i,y:c,z:a},n),this.drawLine({x:i,y:c,z:a},{x:i,y:o,z:a},n),this.drawLine({x:i,y:o,z:l},{x:s,y:o,z:l},n),this.drawLine({x:s,y:o,z:l},{x:s,y:c,z:l},n),this.drawLine({x:s,y:c,z:l},{x:i,y:c,z:l},n),this.drawLine({x:i,y:c,z:l},{x:i,y:o,z:l},n),this.drawLine({x:i,y:o,z:a},{x:i,y:o,z:l},n),this.drawLine({x:s,y:o,z:a},{x:s,y:o,z:l},n),this.drawLine({x:s,y:c,z:a},{x:s,y:c,z:l},n),this.drawLine({x:i,y:c,z:a},{x:i,y:c,z:l},n)}drawPoint(e,r,n){let i=r/2;this.drawBoundingBox({x:e.x-i,y:e.y-i,z:e.z-i},{x:e.x+i,y:e.y+i,z:e.z+i},n)}drawAxes(e,r){this.drawLine(e,{x:e.x+r,y:e.y,z:e.z},{r:1,g:0,b:0}),this.drawLine(e,{x:e.x,y:e.y+r,z:e.z},{r:0,g:1,b:0}),this.drawLine(e,{x:e.x,y:e.y,z:e.z+r},{r:0,g:0,b:1})}drawText3D(e,r){this.labels.push({text:e,position:r})}addTriangle(e,r,n,i,o){this.solidVertices.push(e.x,e.y,e.z),this.solidVertices.push(o.r,o.g,o.b),this.solidVertices.push(i.x,i.y,i.z),this.solidVertices.push(r.x,r.y,r.z),this.solidVertices.push(o.r,o.g,o.b),this.solidVertices.push(i.x,i.y,i.z),this.solidVertices.push(n.x,n.y,n.z),this.solidVertices.push(o.r,o.g,o.b),this.solidVertices.push(i.x,i.y,i.z)}addCone(e,r,n,i){let a=oc(e),s=oc(r),c=L.create();L.subtract(c,a,s),L.normalize(c,c);let l=L.fromValues(0,0,1);Math.abs(L.dot(c,l))>.99&&(l=L.fromValues(0,1,0));let d=L.create();L.cross(d,l,c),L.normalize(d,d);let f=L.create();L.cross(f,c,d);let u=[];for(let p=0;p<16;p++){let y=p/16*Math.PI*2,v=Math.cos(y)*n,x=Math.sin(y)*n,b=L.clone(s);L.scaleAndAdd(b,b,d,v),L.scaleAndAdd(b,b,f,x),u.push(b)}let h=L.clone(c);L.scale(h,h,-1);let m=rr(h),g=r;for(let p=0;p<16;p++){let y=rr(u[p]),v=rr(u[(p+1)%16]);this.addTriangle(g,v,y,m,i)}for(let p=0;p<16;p++){let y=u[p],v=u[(p+1)%16],x=rr(y),b=rr(v),_=L.create();L.subtract(_,v,y);let w=L.create();L.subtract(w,a,y);let S=L.create();L.cross(S,_,w),L.normalize(S,S);let E=rr(S);this.addTriangle(x,b,e,E,i)}}addTorus(e,r,n,i,o={x:0,y:0,z:1}){let c=oc(o);L.normalize(c,c);let l=oc(e),d=L.fromValues(0,0,1),f=I.create();if(Math.abs(L.dot(c,d))>.999)c[2]<0&&I.rotateX(f,f,Math.PI);else{let m=L.create();L.cross(m,d,c),L.normalize(m,m);let g=Math.acos(L.dot(d,c));I.fromRotation(f,g,m)}let u=[],h=[];for(let m=0;m<=16;m++){let g=m/16*Math.PI*2,p=Math.cos(g),y=Math.sin(g),v=[],x=[];for(let b=0;b<=8;b++){let _=b/8*Math.PI*2,w=Math.cos(_),S=Math.sin(_),E=(r+n*w)*p,T=(r+n*w)*y,M=n*S,C=L.fromValues(E,T,M),B=w*p,F=w*y,k=S,N=L.fromValues(B,F,k);L.transformMat4(C,C,f),L.transformMat4(N,N,f),L.add(C,C,l),v.push(C),x.push(N)}u.push(v),h.push(x)}for(let m=0;m<16;m++)for(let g=0;g<8;g++){let p=u[m][g],y=u[m+1][g],v=u[m+1][g+1],x=u[m][g+1],b=rr(p),_=rr(y),w=rr(v),S=rr(x),E=L.create();L.subtract(E,y,p);let T=L.create();L.subtract(T,v,p);let M=L.create();L.cross(M,E,T),L.normalize(M,M),this.addTriangle(b,_,w,rr(M),i);let C=L.create();L.subtract(C,v,p);let B=L.create();L.subtract(B,x,p);let F=L.create();L.cross(F,C,B),L.normalize(F,F),this.addTriangle(b,w,S,rr(F),i)}}render(e,r=!1){if(r&&this.gl.disable(this.gl.DEPTH_TEST),this.vertices.length>0){this.shader.use();let n=this.shader.getUniformLocation("u_viewProjection");n&&this.gl.uniformMatrix4fv(n,!1,e),this.vbo.upload(new Float32Array(this.vertices)),this.vao.bind(),this.gl.drawArrays(this.gl.LINES,0,this.vertices.length/6)}if(this.solidVertices.length>0){this.shaderSolid.use();let n=this.shaderSolid.getUniformLocation("u_viewProjection");n&&this.gl.uniformMatrix4fv(n,!1,e);let i=this.shaderSolid.getUniformLocation("u_lightingEnabled");i&&this.gl.uniform1i(i,1),this.vboSolid.upload(new Float32Array(this.solidVertices)),this.vaoSolid.bind(),this.gl.drawArrays(this.gl.TRIANGLES,0,this.solidVertices.length/9)}r&&this.gl.enable(this.gl.DEPTH_TEST)}getLabels(e,r,n){let i=[];for(let o of this.labels){let a=yo.fromValues(o.position.x,o.position.y,o.position.z,1),s=yo.create(),l=e,d=a[0],f=a[1],u=a[2],h=a[3];if(s[0]=l[0]*d+l[4]*f+l[8]*u+l[12]*h,s[1]=l[1]*d+l[5]*f+l[9]*u+l[13]*h,s[2]=l[2]*d+l[6]*f+l[10]*u+l[14]*h,s[3]=l[3]*d+l[7]*f+l[11]*u+l[15]*h,s[3]>0){let m=s[0]/s[3],g=s[1]/s[3],p=(m+1)*.5*r,y=(1-g)*.5*n;p>=0&&p<=r&&y>=0&&y<=n&&i.push({text:o.text,x:p,y})}}return i}clear(){this.vertices=[],this.solidVertices=[],this.labels=[]}};function Om(t,e,r,n=32){let i=[];for(let s of t){let c=!0;for(let l of e)if(l.normal.x*s.origin.x+l.normal.y*s.origin.y+l.normal.z*s.origin.z+l.distance<-s.intensity){c=!1;break}if(c){let l=0;if(r){let d=s.origin.x-r.x,f=s.origin.y-r.y,u=s.origin.z-r.z;l=d*d+f*f+u*u}i.push({light:s,distSq:l})}}r&&i.sort((s,c)=>s.distSq-c.distSq);let o=[],a=Math.min(i.length,n);for(let s=0;s<a;s++)o.push(i[s].light);return o}function xu(t){let e=(t*1664525+1013904223>>>0)/4294967296,r=(t*25214903917+11>>>0)/4294967296,n=(t*69069+1>>>0)/4294967296;return[e,r,n,1]}var Um=t=>{let e=new ho(t),r=new mo(t),n=new go(t),i=new _o(t),o=new Mo(t),a=new nc(t),s=new ac(t),c=new ic(t),l=new yf({seed:Date.now()}),d=new So(4096,l),f=new wo(t,d),u=e.shaderSize+r.shaderSize+n.shaderSize+i.shaderSize+o.shaderSize+a.shaderSize+s.shaderSize+f.shaderSize;c.trackShaderMemory(u);let h=new Map,m=new Map,g=new Map,p=new Map,y=0,v=600,x=300,b=null,_={drawCalls:0,vertexCount:0,batches:0,shaderSwitches:0,visibleSurfaces:0,culledSurfaces:0,visibleEntities:0,culledEntities:0},w=new Map,S=new Map,E=0,T=1,M=1,C=!1,B=0,F=new Map,k=!1,N=!1,ce=.5,Ht=1,Pt=new Array(1024).fill(!0),Or=Fm(t,e,r),sn=1e4,ut=[],tt=0,Vt=Jl.create(),Wn=L.create(),ln=L.create();for(let A=0;A<sn;A++){let K={id:-1,model:void 0,transform:new Float32Array(16),type:"md3",blend:{frame0:0,frame1:0,lerp:0},tint:[1,1,1,1],lighting:{ambient:[.5,.5,.5],dynamicLights:[],modelMatrix:void 0}};K.lighting&&(K.lighting.modelMatrix=K.transform),ut.push(K)}let Ur=[],Nr,Hr,D,ae=(A,K)=>{if(A.type==="md2"){let ie=A.model;if(!ie.lods||ie.lods.length===0)return{model:A.model,type:A.type};let de=A.transform[12]-K.x,re=A.transform[13]-K.y,pe=A.transform[14]-K.z,Ke=Math.sqrt(de*de+re*re+pe*pe),It=Math.floor(Ke*Ht/500);if(It<=0)return{model:A.model,type:A.type};let Ie=ie.lods,Xt=Math.min(It-1,Ie.length-1);return{model:Ie[Xt],type:A.type}}return{model:A.model,type:A.type}},Pe=(A,K,ie)=>{c.startFrame(),y++;let de=Ur.length>0?[...K,...Ur]:K;Ur.length=0,tt=0,A.deltaTime&&d.update(A.deltaTime),t.disable(t.BLEND),t.enable(t.DEPTH_TEST),t.depthMask(!0);let pe=A.renderMode,Ke=!1;ie?.wireframe||E===6?pe={mode:"wireframe",applyToAll:!0,color:[1,1,1,1]}:E===5&&(Ke=!0);let It=A.sky;ie?.showSkybox===!1&&(It=void 0);let Ie=new Float32Array(A.camera.viewProjectionMatrix),Xt=Dn(Ie),Bt=A.dlights?Om(A.dlights,Xt,{x:A.camera.position[0],y:A.camera.position[1],z:A.camera.position[2]},32):void 0,Oo={...A,sky:It,renderMode:pe,disableLightmaps:ie?.showLightmaps===!1&&E!==5,dlights:Bt,lightmapOnly:Ke,brightness:T,gamma:M,fullbright:C,ambient:B,lightStyleOverrides:F,underwaterWarp:k,bloom:N,bloomIntensity:ce,portalState:Pt},Rs=Or.renderFrame(Oo),lf=Rs.facesDrawn||0,cf=0;A.world&&A.world.map&&A.world.map.faces&&(cf=A.world.map.faces.length);let wp=cf-lf,kc=-1,Dc=-1,zc=null;if(A.world&&ie?.cullingEnabled!==!1){let O={x:A.camera.position[0],y:A.camera.position[1],z:A.camera.position[2]},De=xi(A.world.map,O);if(De>=0){let ft=A.world.map.leafs[De];kc=ft.cluster,Dc=ft.area,Dc>=0&&A.world.map.areas.length>0&&(zc=Nd(A.world.map,Dc,Pt))}}let Cs,Uo=0,Oc=0,df=0,Ps=0,Mp={x:A.camera.position[0],y:A.camera.position[1],z:A.camera.position[2]};if(y%v===0)for(let[O,De]of p)y-De.lastFrameSeen>x&&p.delete(O);for(let O of de){if(A.world&&kc>=0){let Q={x:O.transform[12],y:O.transform[13],z:O.transform[14]},U=-1;if(O.id!==void 0){let Y=p.get(O.id);Y&&Y.position[12]===O.transform[12]&&Y.position[13]===O.transform[13]&&Y.position[14]===O.transform[14]?(U=Y.leafIndex,Y.lastFrameSeen=y):(U=xi(A.world.map,Q),U>=0&&p.set(O.id,{leafIndex:U,position:new Float32Array(O.transform),lastFrameSeen:y}))}else U=xi(A.world.map,Q);if(U>=0){let Y=A.world.map.leafs[U],$t=Y.cluster,Oe=Y.area;if(zc&&Oe>=0&&!zc.has(Oe)){Ps++;continue}if(!Ud(A.world.map.visibility,kc,$t)){Ps++;continue}}}let{model:De,type:ft}=ae(O,Mp),ze,ve;if(ft==="md2"){let Q=De,U=Q.frames[O.blend.frame0%Q.frames.length],Y=Q.frames[O.blend.frame1%Q.frames.length];U&&Y&&(ze={x:Math.min(U.minBounds.x,Y.minBounds.x),y:Math.min(U.minBounds.y,Y.minBounds.y),z:Math.min(U.minBounds.z,Y.minBounds.z)},ve={x:Math.max(U.maxBounds.x,Y.maxBounds.x),y:Math.max(U.maxBounds.y,Y.maxBounds.y),z:Math.max(U.maxBounds.z,Y.maxBounds.z)})}else if(ft==="md3"){let Q=De,U=Q.frames[O.blend.frame0%Q.frames.length],Y=Q.frames[O.blend.frame1%Q.frames.length];U&&Y?(ze={x:Math.min(U.minBounds.x,Y.minBounds.x),y:Math.min(U.minBounds.y,Y.minBounds.y),z:Math.min(U.minBounds.z,Y.minBounds.z)},ve={x:Math.max(U.maxBounds.x,Y.maxBounds.x),y:Math.max(U.maxBounds.y,Y.maxBounds.y),z:Math.max(U.maxBounds.z,Y.maxBounds.z)}):(ze={x:-32,y:-32,z:-32},ve={x:32,y:32,z:32})}if(ze&&ve){let Q=Dh(ze,ve,O.transform);if(!bi(Q.mins,Q.maxs,Xt)){Ps++;continue}}df++;let ar={x:O.transform[12],y:O.transform[13],z:O.transform[14]},Ye=km(A.world?.map,ar),Te=O.id!==void 0?w.get(O.id):void 0;switch(ft){case"md2":{let Q=De,U=m.get(Q);if(U)U.update(Q,O.blend);else{U=new po(t,Q,O.blend),m.set(Q,U);let Ue=U.geometry.vertices.length*8*4,dn=U.geometry.indices.length*2;c.trackBufferMemory(Ue+dn)}let Y=Gc(Ie,O.transform),$t=O.skin,Oe=$t?A.world?.textures?.get($t):void 0;Oe&&Oe!==Cs&&(Oe.bind(0),Cs=Oe);let Kt=pe;if(Kt&&!Kt.applyToAll&&Oe&&(Kt=void 0),Kt?.generateRandomColor&&O.id!==void 0){let Ue=xu(O.id);Kt={...Kt,color:Ue}}if(n.bind({modelViewProjection:Y,modelMatrix:O.transform,ambientLight:Ye,dlights:A.dlights,renderMode:Kt,tint:O.tint,brightness:T,gamma:M,fullbright:C,ambient:B}),n.draw(U,Kt),Uo++,Oc+=U.geometry.vertices.length,Te){let Ue={mode:"wireframe",applyToAll:!0,color:Te};n.bind({modelViewProjection:Y,modelMatrix:O.transform,ambientLight:1,renderMode:Ue,tint:[1,1,1,1],brightness:1,gamma:1,fullbright:!0,ambient:0}),n.draw(U,Ue),Uo++}}break;case"md3":{let Q=De,U=h.get(Q),Y=O,$t=A.dlights?A.dlights.map(Ue=>({origin:Ue.origin,color:[Ue.color.x,Ue.color.y,Ue.color.z],radius:Ue.intensity})):void 0,Oe={...Y.lighting,ambient:[Ye,Ye,Ye],dynamicLights:$t,modelMatrix:O.transform};U?U.update(O.blend,Oe):(U=new vo(t,Q,O.blend,Oe),h.set(Q,U));let Kt=Gc(Ie,O.transform);i.bind(Kt);for(let Ue of Q.surfaces){let dn=U.surfaces.get(Ue.name);if(dn){let ff=Y.skins?.get(Ue.name),No=ff?A.world?.textures?.get(ff):void 0;No&&No!==Cs&&(No.bind(0),Cs=No);let Kn=pe;if(Kn&&!Kn.applyToAll&&No&&(Kn=void 0),Kn?.generateRandomColor&&O.id!==void 0){let hf=xu(O.id);Kn={...Kn,color:hf}}let Ap={renderMode:Kn,brightness:T,gamma:M,fullbright:C,globalAmbient:B};if(i.drawSurface(dn,Ap),Uo++,Oc+=dn.geometry.vertices.length,Te){let Ep={renderMode:{mode:"wireframe",applyToAll:!0,color:Te},brightness:1,gamma:1,fullbright:!0,globalAmbient:0};i.drawSurface(dn,Ep),Uo++}}}}break}}let $n=A.camera.viewMatrix;if($n){let O={x:$n[0],y:$n[4],z:$n[8]},De={x:$n[1],y:$n[5],z:$n[9]};f.render({viewProjection:Ie,viewRight:O,viewUp:De})}if(Oo.waterTint&&(Nr(),D(0,0,t.canvas.width,t.canvas.height,Oo.waterTint),Hr()),a.render(Ie),a.clear(),A.world&&(S.size>0||E===3)){let O=new Map(S);if(E===3&&A.world){let De=Dn(Ie),ft={x:A.camera.position[0],y:A.camera.position[1],z:A.camera.position[2]},ze=vi(A.world.map,ft,De,Pt);for(let{faceIndex:ve,leafIndex:ar}of ze){let Ye=A.world.map.leafs[ar];Ye&&!O.has(ve)&&O.set(ve,xu(Ye.cluster))}}for(let[De,ft]of O){let ze=A.world.surfaces[De];if(ze&&ze.vertexCount>0){let ve=[];for(let Te=0;Te<ze.vertexCount;Te++)ve.push({x:ze.vertexData[Te*7],y:ze.vertexData[Te*7+1],z:ze.vertexData[Te*7+2]});let Ye={r:ft[0],g:ft[1],b:ft[2]};for(let Te=0;Te<ve.length;Te++){let Q=ve[Te],U=ve[(Te+1)%ve.length];s.drawLine(Q,U,Ye)}s.drawLine(ve[0],ve[ve.length/2|0],Ye)}}}if((ie?.showNormals||E===2)&&A.world){let O=Dn(Ie),De={x:A.camera.position[0],y:A.camera.position[1],z:A.camera.position[2]},ft=vi(A.world.map,De,O,Pt);for(let{faceIndex:ze}of ft){let ve=A.world.map.faces[ze],ar=A.world.map.planes[ve.planeIndex],Ye=A.world.surfaces[ze];if(!Ye)continue;let Te=0,Q=0,U=0,Y=Ye.vertexCount;for(let $t=0;$t<Y;$t++){let Oe=$t*7;Te+=Ye.vertexData[Oe],Q+=Ye.vertexData[Oe+1],U+=Ye.vertexData[Oe+2]}if(Y>0){Te/=Y,Q/=Y,U/=Y;let $t=ve.side===0?ar.normal[0]:-ar.normal[0],Oe=ve.side===0?ar.normal[1]:-ar.normal[1],Kt=ve.side===0?ar.normal[2]:-ar.normal[2],Ue={x:Te,y:Q,z:U},dn={x:Te+$t*8,y:Q+Oe*8,z:U+Kt*8};s.drawLine(Ue,dn,{r:1,g:1,b:0})}}}s.render(Ie);let uf=s.getLabels(Ie,t.canvas.width,t.canvas.height);if(uf.length>0){Nr();for(let O of uf)Ri(O.x,O.y,O.text,[1,1,1,1]);Hr()}s.clear(),_={drawCalls:Rs.drawCalls+Uo,vertexCount:Rs.vertexCount+Oc,batches:Rs.batches,shaderSwitches:0,visibleSurfaces:lf,culledSurfaces:wp,visibleEntities:df,culledEntities:Ps},c.endFrame()},Ce=async(A,K)=>{if(g.has(A))return g.get(A);let ie=new Blob([K]),de=await createImageBitmap(ie),re=new et(t);return re.upload(de.width,de.height,de),g.set(A,re),c.trackTextureMemory(de.width*de.height*4),A.includes("conchars")&&(b=re),re},or=(A,K)=>{if(g.has(A))return g.get(A);let ie=new et(t),de=K.levels[0];return ie.upload(de.width,de.height,de.rgba),g.set(A,ie),c.trackTextureMemory(de.width*de.height*4),A.includes("conchars")&&(b=ie),ie};Nr=()=>{t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA),t.disable(t.DEPTH_TEST),t.depthMask(!1);let A=I.create();I.ortho(A,0,t.canvas.width,t.canvas.height,0,-1,1),o.begin(A)},Hr=()=>{t.disable(t.BLEND),t.enable(t.DEPTH_TEST),t.depthMask(!0)};let Gt=(A,K,ie,de)=>{ie.bind(0),o.draw(A,K,ie.width,ie.height,0,0,1,1,de)},cn=(A,K,ie,de)=>{if(!b)return;let re=8,pe=8,Ke=b.width/re,It=ie&255,Ie=It%Ke*re/b.width,Xt=Math.floor(It/Ke)*pe/b.height,Bt=Ie+re/b.width,Oo=Xt+pe/b.height;b.bind(0),o.draw(A,K,re,pe,Ie,Xt,Bt,Oo,de)},Ri=(A,K,ie,de)=>{let re=zm(ie),pe=A,Ke=8;for(let It of re){let Ie=It.color||de;for(let Xt=0;Xt<It.text.length;Xt++)cn(pe,K,It.text.charCodeAt(Xt),Ie),pe+=Ke}},Wt=(A,K)=>{let re=K.replace(/\^[0-9]/g,"").length*8,pe=(t.canvas.width-re)/2;Ri(pe,A,K)};return D=(A,K,ie,de,re)=>{o.drawRect(A,K,ie,de,re)},{get width(){return t.canvas.width},get height(){return t.canvas.height},get collisionVis(){return a},get debug(){return s},get particleSystem(){return d},getPerformanceReport:()=>c.getPerformanceReport(_),getMemoryUsage:()=>c.getMemoryUsage(),renderFrame:Pe,registerPic:Ce,registerTexture:or,begin2D:Nr,end2D:Hr,drawPic:Gt,drawString:Ri,drawCenterString:Wt,drawfillRect:D,setEntityHighlight:(A,K)=>{w.set(A,K)},clearEntityHighlight:A=>{w.delete(A)},highlightSurface:(A,K)=>{S.set(A,K)},removeSurfaceHighlight:A=>{S.delete(A)},setDebugMode:A=>{E=A},setBrightness:A=>{T=Math.max(0,Math.min(2,A))},setGamma:A=>{M=Math.max(.5,Math.min(3,A))},setFullbright:A=>{C=A},setAmbient:A=>{B=Math.max(0,Math.min(1,A))},setLightStyle:(A,K)=>{K===null?F.delete(A):F.set(A,K)},setUnderwaterWarp:A=>{k=A},setBloom:A=>{N=A},setBloomIntensity:A=>{ce=A},setLodBias:A=>{Ht=Math.max(0,Math.min(2,A))},setAreaPortalState:(A,K)=>{A>=0&&A<Pt.length&&(Pt[A]=K)},renderInstanced:(A,K)=>{let ie="glCommands"in A,de=ie?"md2":"md3";for(let re of K){if(tt>=sn){console.warn("Max instances reached");break}let pe=ut[tt++];pe.model=A,pe.type=de;let Ke=pe.blend;re.frame!==void 0?(Ke.frame0=re.frame,Ke.frame1=re.frame,Ke.lerp=0):(Ke.frame0=re.frame0||0,Ke.frame1=re.frame1||0,Ke.lerp=re.lerp||0),ie&&(pe.skin=re.skin!==void 0?"skin"+re.skin:void 0);let It=re.rotation,Ie=re.position,Xt=re.scale||{x:1,y:1,z:1};I.fromRotationTranslationScale(pe.transform,Vt,Wn,ln);let Bt=pe.lighting;Bt&&(Bt.dynamicLights?Bt.dynamicLights.length=0:Bt.dynamicLights=[],Bt.ambient?(Bt.ambient[0]=.5,Bt.ambient[1]=.5,Bt.ambient[2]=.5):Bt.ambient=[.5,.5,.5]),Ur.push(pe)}},dispose:()=>{c.dispose()}}};var hr=class{constructor(e){this.messageOffsets=[];this.currentBlock=null;this.buffer=e,this.view=new DataView(e),this.offset=0,this.scan()}scan(){let e=0;for(this.messageOffsets=[];e+4<=this.buffer.byteLength;){let r=this.view.getInt32(e,!0);if(r===-1)break;if(r<0||r>2097152){console.warn(`DemoReader: Invalid block length ${r} at offset ${e} during scan`);break}if(e+4+r>this.buffer.byteLength){console.warn(`DemoReader: Incomplete block at offset ${e} during scan`);break}this.messageOffsets.push(e),e+=4+r}}hasMore(){return this.offset<this.buffer.byteLength}readNextBlock(){if(this.offset+4>this.buffer.byteLength)return null;let e=this.view.getInt32(this.offset,!0);if(e===-1||e<0||this.offset+4+e>this.buffer.byteLength)return null;this.offset+=4;let r=this.buffer.slice(this.offset,this.offset+e);return this.offset+=e,{length:e,data:new pn(r)}}nextBlock(){let e=this.readNextBlock();return e?(this.currentBlock=e,!0):(this.currentBlock=null,!1)}getBlock(){if(!this.currentBlock)throw new Error("No current block. Call nextBlock() first.");return this.currentBlock}readAllBlocksToBuffer(){let e=0,r=this.offset,n=[],i=this.offset;for(;i+4<=this.buffer.byteLength;){let c=this.view.getInt32(i,!0);if(c===-1||c<0||i+4+c>this.buffer.byteLength)break;n.push({offset:i+4,length:c}),e+=c,i+=4+c}let o=new Uint8Array(e),a=0,s=new Uint8Array(this.buffer);for(let c of n)o.set(s.subarray(c.offset,c.offset+c.length),a),a+=c.length;return this.offset=i,o.buffer}reset(){this.offset=0,this.currentBlock=null}seekToMessage(e){return e<0||e>=this.messageOffsets.length?!1:(this.offset=this.messageOffsets[e],this.currentBlock=null,!0)}getMessageCount(){return this.messageOffsets.length}getOffset(){return this.offset}getProgress(){let e=this.offset,r=this.buffer.byteLength;return{current:e,total:r,percent:r>0?e/r*100:0}}};function Co(t){let e=t.length;for(;--e>=0;)t[e]=0}var rv=0,M0=1,nv=2,iv=3,ov=258,Gu=29,xs=256,us=xs+1+Gu,Lo=30,Wu=19,A0=2*us+1,_i=15,vu=16,av=7,Xu=256,E0=16,L0=17,T0=18,Fu=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]),fc=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]),sv=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),R0=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),lv=512,on=new Array((us+2)*2);Co(on);var ls=new Array(Lo*2);Co(ls);var fs=new Array(lv);Co(fs);var hs=new Array(ov-iv+1);Co(hs);var $u=new Array(Gu);Co($u);var hc=new Array(Lo);Co(hc);function _u(t,e,r,n,i){this.static_tree=t,this.extra_bits=e,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=t&&t.length}var C0,P0,I0;function Su(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}var B0=t=>t<256?fs[t]:fs[256+(t>>>7)],ms=(t,e)=>{t.pending_buf[t.pending++]=e&255,t.pending_buf[t.pending++]=e>>>8&255},Ct=(t,e,r)=>{t.bi_valid>vu-r?(t.bi_buf|=e<<t.bi_valid&65535,ms(t,t.bi_buf),t.bi_buf=e>>vu-t.bi_valid,t.bi_valid+=r-vu):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=r)},Br=(t,e,r)=>{Ct(t,r[e*2],r[e*2+1])},F0=(t,e)=>{let r=0;do r|=t&1,t>>>=1,r<<=1;while(--e>0);return r>>>1},cv=t=>{t.bi_valid===16?(ms(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=t.bi_buf&255,t.bi_buf>>=8,t.bi_valid-=8)},dv=(t,e)=>{let r=e.dyn_tree,n=e.max_code,i=e.stat_desc.static_tree,o=e.stat_desc.has_stree,a=e.stat_desc.extra_bits,s=e.stat_desc.extra_base,c=e.stat_desc.max_length,l,d,f,u,h,m,g=0;for(u=0;u<=_i;u++)t.bl_count[u]=0;for(r[t.heap[t.heap_max]*2+1]=0,l=t.heap_max+1;l<A0;l++)d=t.heap[l],u=r[r[d*2+1]*2+1]+1,u>c&&(u=c,g++),r[d*2+1]=u,!(d>n)&&(t.bl_count[u]++,h=0,d>=s&&(h=a[d-s]),m=r[d*2],t.opt_len+=m*(u+h),o&&(t.static_len+=m*(i[d*2+1]+h)));if(g!==0){do{for(u=c-1;t.bl_count[u]===0;)u--;t.bl_count[u]--,t.bl_count[u+1]+=2,t.bl_count[c]--,g-=2}while(g>0);for(u=c;u!==0;u--)for(d=t.bl_count[u];d!==0;)f=t.heap[--l],!(f>n)&&(r[f*2+1]!==u&&(t.opt_len+=(u-r[f*2+1])*r[f*2],r[f*2+1]=u),d--)}},k0=(t,e,r)=>{let n=new Array(_i+1),i=0,o,a;for(o=1;o<=_i;o++)i=i+r[o-1]<<1,n[o]=i;for(a=0;a<=e;a++){let s=t[a*2+1];s!==0&&(t[a*2]=F0(n[s]++,s))}},uv=()=>{let t,e,r,n,i,o=new Array(_i+1);for(r=0,n=0;n<Gu-1;n++)for($u[n]=r,t=0;t<1<<Fu[n];t++)hs[r++]=n;for(hs[r-1]=n,i=0,n=0;n<16;n++)for(hc[n]=i,t=0;t<1<<fc[n];t++)fs[i++]=n;for(i>>=7;n<Lo;n++)for(hc[n]=i<<7,t=0;t<1<<fc[n]-7;t++)fs[256+i++]=n;for(e=0;e<=_i;e++)o[e]=0;for(t=0;t<=143;)on[t*2+1]=8,t++,o[8]++;for(;t<=255;)on[t*2+1]=9,t++,o[9]++;for(;t<=279;)on[t*2+1]=7,t++,o[7]++;for(;t<=287;)on[t*2+1]=8,t++,o[8]++;for(k0(on,us+1,o),t=0;t<Lo;t++)ls[t*2+1]=5,ls[t*2]=F0(t,5);C0=new _u(on,Fu,xs+1,us,_i),P0=new _u(ls,fc,0,Lo,_i),I0=new _u(new Array(0),sv,0,Wu,av)},D0=t=>{let e;for(e=0;e<us;e++)t.dyn_ltree[e*2]=0;for(e=0;e<Lo;e++)t.dyn_dtree[e*2]=0;for(e=0;e<Wu;e++)t.bl_tree[e*2]=0;t.dyn_ltree[Xu*2]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},z0=t=>{t.bi_valid>8?ms(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},Nm=(t,e,r,n)=>{let i=e*2,o=r*2;return t[i]<t[o]||t[i]===t[o]&&n[e]<=n[r]},wu=(t,e,r)=>{let n=t.heap[r],i=r<<1;for(;i<=t.heap_len&&(i<t.heap_len&&Nm(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!Nm(e,n,t.heap[i],t.depth));)t.heap[r]=t.heap[i],r=i,i<<=1;t.heap[r]=n},Hm=(t,e,r)=>{let n,i,o=0,a,s;if(t.sym_next!==0)do n=t.pending_buf[t.sym_buf+o++]&255,n+=(t.pending_buf[t.sym_buf+o++]&255)<<8,i=t.pending_buf[t.sym_buf+o++],n===0?Br(t,i,e):(a=hs[i],Br(t,a+xs+1,e),s=Fu[a],s!==0&&(i-=$u[a],Ct(t,i,s)),n--,a=B0(n),Br(t,a,r),s=fc[a],s!==0&&(n-=hc[a],Ct(t,n,s)));while(o<t.sym_next);Br(t,Xu,e)},ku=(t,e)=>{let r=e.dyn_tree,n=e.stat_desc.static_tree,i=e.stat_desc.has_stree,o=e.stat_desc.elems,a,s,c=-1,l;for(t.heap_len=0,t.heap_max=A0,a=0;a<o;a++)r[a*2]!==0?(t.heap[++t.heap_len]=c=a,t.depth[a]=0):r[a*2+1]=0;for(;t.heap_len<2;)l=t.heap[++t.heap_len]=c<2?++c:0,r[l*2]=1,t.depth[l]=0,t.opt_len--,i&&(t.static_len-=n[l*2+1]);for(e.max_code=c,a=t.heap_len>>1;a>=1;a--)wu(t,r,a);l=o;do a=t.heap[1],t.heap[1]=t.heap[t.heap_len--],wu(t,r,1),s=t.heap[1],t.heap[--t.heap_max]=a,t.heap[--t.heap_max]=s,r[l*2]=r[a*2]+r[s*2],t.depth[l]=(t.depth[a]>=t.depth[s]?t.depth[a]:t.depth[s])+1,r[a*2+1]=r[s*2+1]=l,t.heap[1]=l++,wu(t,r,1);while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],dv(t,e),k0(r,c,t.bl_count)},Vm=(t,e,r)=>{let n,i=-1,o,a=e[1],s=0,c=7,l=4;for(a===0&&(c=138,l=3),e[(r+1)*2+1]=65535,n=0;n<=r;n++)o=a,a=e[(n+1)*2+1],!(++s<c&&o===a)&&(s<l?t.bl_tree[o*2]+=s:o!==0?(o!==i&&t.bl_tree[o*2]++,t.bl_tree[E0*2]++):s<=10?t.bl_tree[L0*2]++:t.bl_tree[T0*2]++,s=0,i=o,a===0?(c=138,l=3):o===a?(c=6,l=3):(c=7,l=4))},Gm=(t,e,r)=>{let n,i=-1,o,a=e[1],s=0,c=7,l=4;for(a===0&&(c=138,l=3),n=0;n<=r;n++)if(o=a,a=e[(n+1)*2+1],!(++s<c&&o===a)){if(s<l)do Br(t,o,t.bl_tree);while(--s!==0);else o!==0?(o!==i&&(Br(t,o,t.bl_tree),s--),Br(t,E0,t.bl_tree),Ct(t,s-3,2)):s<=10?(Br(t,L0,t.bl_tree),Ct(t,s-3,3)):(Br(t,T0,t.bl_tree),Ct(t,s-11,7));s=0,i=o,a===0?(c=138,l=3):o===a?(c=6,l=3):(c=7,l=4)}},fv=t=>{let e;for(Vm(t,t.dyn_ltree,t.l_desc.max_code),Vm(t,t.dyn_dtree,t.d_desc.max_code),ku(t,t.bl_desc),e=Wu-1;e>=3&&t.bl_tree[R0[e]*2+1]===0;e--);return t.opt_len+=3*(e+1)+5+5+4,e},hv=(t,e,r,n)=>{let i;for(Ct(t,e-257,5),Ct(t,r-1,5),Ct(t,n-4,4),i=0;i<n;i++)Ct(t,t.bl_tree[R0[i]*2+1],3);Gm(t,t.dyn_ltree,e-1),Gm(t,t.dyn_dtree,r-1)},mv=t=>{let e=4093624447,r;for(r=0;r<=31;r++,e>>>=1)if(e&1&&t.dyn_ltree[r*2]!==0)return 0;if(t.dyn_ltree[18]!==0||t.dyn_ltree[20]!==0||t.dyn_ltree[26]!==0)return 1;for(r=32;r<xs;r++)if(t.dyn_ltree[r*2]!==0)return 1;return 0},Wm=!1,pv=t=>{Wm||(uv(),Wm=!0),t.l_desc=new Su(t.dyn_ltree,C0),t.d_desc=new Su(t.dyn_dtree,P0),t.bl_desc=new Su(t.bl_tree,I0),t.bi_buf=0,t.bi_valid=0,D0(t)},O0=(t,e,r,n)=>{Ct(t,(rv<<1)+(n?1:0),3),z0(t),ms(t,r),ms(t,~r),r&&t.pending_buf.set(t.window.subarray(e,e+r),t.pending),t.pending+=r},gv=t=>{Ct(t,M0<<1,3),Br(t,Xu,on),cv(t)},yv=(t,e,r,n)=>{let i,o,a=0;t.level>0?(t.strm.data_type===2&&(t.strm.data_type=mv(t)),ku(t,t.l_desc),ku(t,t.d_desc),a=fv(t),i=t.opt_len+3+7>>>3,o=t.static_len+3+7>>>3,o<=i&&(i=o)):i=o=r+5,r+4<=i&&e!==-1?O0(t,e,r,n):t.strategy===4||o===i?(Ct(t,(M0<<1)+(n?1:0),3),Hm(t,on,ls)):(Ct(t,(nv<<1)+(n?1:0),3),hv(t,t.l_desc.max_code+1,t.d_desc.max_code+1,a+1),Hm(t,t.dyn_ltree,t.dyn_dtree)),D0(t),n&&z0(t)},bv=(t,e,r)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=r,e===0?t.dyn_ltree[r*2]++:(t.matches++,e--,t.dyn_ltree[(hs[r]+xs+1)*2]++,t.dyn_dtree[B0(e)*2]++),t.sym_next===t.sym_end),xv=pv,vv=O0,_v=yv,Sv=bv,wv=gv,Mv={_tr_init:xv,_tr_stored_block:vv,_tr_flush_block:_v,_tr_tally:Sv,_tr_align:wv},Av=(t,e,r,n)=>{let i=t&65535|0,o=t>>>16&65535|0,a=0;for(;r!==0;){a=r>2e3?2e3:r,r-=a;do i=i+e[n++]|0,o=o+i|0;while(--a);i%=65521,o%=65521}return i|o<<16|0},ps=Av,Ev=()=>{let t,e=[];for(var r=0;r<256;r++){t=r;for(var n=0;n<8;n++)t=t&1?3988292384^t>>>1:t>>>1;e[r]=t}return e},Lv=new Uint32Array(Ev()),Tv=(t,e,r,n)=>{let i=Lv,o=n+r;t^=-1;for(let a=n;a<o;a++)t=t>>>8^i[(t^e[a])&255];return t^-1},ke=Tv,Mi={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"},Li={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:Rv,_tr_stored_block:Du,_tr_flush_block:Cv,_tr_tally:Nn,_tr_align:Pv}=Mv,{Z_NO_FLUSH:Hn,Z_PARTIAL_FLUSH:Iv,Z_FULL_FLUSH:Bv,Z_FINISH:nr,Z_BLOCK:Xm,Z_OK:$e,Z_STREAM_END:$m,Z_STREAM_ERROR:Fr,Z_DATA_ERROR:Fv,Z_BUF_ERROR:Mu,Z_DEFAULT_COMPRESSION:kv,Z_FILTERED:Dv,Z_HUFFMAN_ONLY:sc,Z_RLE:zv,Z_FIXED:Ov,Z_DEFAULT_STRATEGY:Uv,Z_UNKNOWN:Nv,Z_DEFLATED:gc}=Li,Hv=9,Vv=15,Gv=8,Wv=29,Xv=256,zu=Xv+1+Wv,$v=30,Kv=19,Yv=2*zu+1,qv=15,j=3,Un=258,kr=Un+j+1,Zv=32,To=42,Ku=57,Ou=69,Uu=73,Nu=91,Hu=103,Si=113,as=666,ct=1,Po=2,Ai=3,Io=4,jv=3,wi=(t,e)=>(t.msg=Mi[e],e),Km=t=>t*2-(t>4?9:0),On=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Qv=t=>{let e,r,n,i=t.w_size;e=t.hash_size,n=e;do r=t.head[--n],t.head[n]=r>=i?r-i:0;while(--e);e=i,n=e;do r=t.prev[--n],t.prev[n]=r>=i?r-i:0;while(--e)},Jv=(t,e,r)=>(e<<t.hash_shift^r)&t.hash_mask,Vn=Jv,Ut=t=>{let e=t.state,r=e.pending;r>t.avail_out&&(r=t.avail_out),r!==0&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+r),t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,e.pending===0&&(e.pending_out=0))},Nt=(t,e)=>{Cv(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,Ut(t.strm)},ne=(t,e)=>{t.pending_buf[t.pending++]=e},os=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=e&255},Vu=(t,e,r,n)=>{let i=t.avail_in;return i>n&&(i=n),i===0?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),r),t.state.wrap===1?t.adler=ps(t.adler,e,i,r):t.state.wrap===2&&(t.adler=ke(t.adler,e,i,r)),t.next_in+=i,t.total_in+=i,i)},U0=(t,e)=>{let r=t.max_chain_length,n=t.strstart,i,o,a=t.prev_length,s=t.nice_match,c=t.strstart>t.w_size-kr?t.strstart-(t.w_size-kr):0,l=t.window,d=t.w_mask,f=t.prev,u=t.strstart+Un,h=l[n+a-1],m=l[n+a];t.prev_length>=t.good_match&&(r>>=2),s>t.lookahead&&(s=t.lookahead);do if(i=e,!(l[i+a]!==m||l[i+a-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(o=Un-(u-n),n=u-Un,o>a){if(t.match_start=e,a=o,o>=s)break;h=l[n+a-1],m=l[n+a]}}while((e=f[e&d])>c&&--r!==0);return a<=t.lookahead?a:t.lookahead},Ro=t=>{let e=t.w_size,r,n,i;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-kr)&&(t.window.set(t.window.subarray(e,e+e-n),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Qv(t),n+=e),t.strm.avail_in===0)break;if(r=Vu(t.strm,t.window,t.strstart+t.lookahead,n),t.lookahead+=r,t.lookahead+t.insert>=j)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Vn(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Vn(t,t.ins_h,t.window[i+j-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<j)););}while(t.lookahead<kr&&t.strm.avail_in!==0)},N0=(t,e)=>{let r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n,i,o,a=0,s=t.strm.avail_in;do{if(n=65535,o=t.bi_valid+42>>3,t.strm.avail_out<o||(o=t.strm.avail_out-o,i=t.strstart-t.block_start,n>i+t.strm.avail_in&&(n=i+t.strm.avail_in),n>o&&(n=o),n<r&&(n===0&&e!==nr||e===Hn||n!==i+t.strm.avail_in)))break;a=e===nr&&n===i+t.strm.avail_in?1:0,Du(t,0,0,a),t.pending_buf[t.pending-4]=n,t.pending_buf[t.pending-3]=n>>8,t.pending_buf[t.pending-2]=~n,t.pending_buf[t.pending-1]=~n>>8,Ut(t.strm),i&&(i>n&&(i=n),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+i),t.strm.next_out),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i,t.block_start+=i,n-=i),n&&(Vu(t.strm,t.strm.output,t.strm.next_out,n),t.strm.next_out+=n,t.strm.avail_out-=n,t.strm.total_out+=n)}while(a===0);return s-=t.strm.avail_in,s&&(s>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=s&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-s,t.strm.next_in),t.strstart),t.strstart+=s,t.insert+=s>t.w_size-t.insert?t.w_size-t.insert:s),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),a?Io:e!==Hn&&e!==nr&&t.strm.avail_in===0&&t.strstart===t.block_start?Po:(o=t.window_size-t.strstart,t.strm.avail_in>o&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,o+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),o>t.strm.avail_in&&(o=t.strm.avail_in),o&&(Vu(t.strm,t.window,t.strstart,o),t.strstart+=o,t.insert+=o>t.w_size-t.insert?t.w_size-t.insert:o),t.high_water<t.strstart&&(t.high_water=t.strstart),o=t.bi_valid+42>>3,o=t.pending_buf_size-o>65535?65535:t.pending_buf_size-o,r=o>t.w_size?t.w_size:o,i=t.strstart-t.block_start,(i>=r||(i||e===nr)&&e!==Hn&&t.strm.avail_in===0&&i<=o)&&(n=i>o?o:i,a=e===nr&&t.strm.avail_in===0&&n===i?1:0,Du(t,t.block_start,n,a),t.block_start+=n,Ut(t.strm)),a?Ai:ct)},Au=(t,e)=>{let r,n;for(;;){if(t.lookahead<kr){if(Ro(t),t.lookahead<kr&&e===Hn)return ct;if(t.lookahead===0)break}if(r=0,t.lookahead>=j&&(t.ins_h=Vn(t,t.ins_h,t.window[t.strstart+j-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),r!==0&&t.strstart-r<=t.w_size-kr&&(t.match_length=U0(t,r)),t.match_length>=j)if(n=Nn(t,t.strstart-t.match_start,t.match_length-j),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=j){t.match_length--;do t.strstart++,t.ins_h=Vn(t,t.ins_h,t.window[t.strstart+j-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart;while(--t.match_length!==0);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Vn(t,t.ins_h,t.window[t.strstart+1]);else n=Nn(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(n&&(Nt(t,!1),t.strm.avail_out===0))return ct}return t.insert=t.strstart<j-1?t.strstart:j-1,e===nr?(Nt(t,!0),t.strm.avail_out===0?Ai:Io):t.sym_next&&(Nt(t,!1),t.strm.avail_out===0)?ct:Po},Ao=(t,e)=>{let r,n,i;for(;;){if(t.lookahead<kr){if(Ro(t),t.lookahead<kr&&e===Hn)return ct;if(t.lookahead===0)break}if(r=0,t.lookahead>=j&&(t.ins_h=Vn(t,t.ins_h,t.window[t.strstart+j-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=j-1,r!==0&&t.prev_length<t.max_lazy_match&&t.strstart-r<=t.w_size-kr&&(t.match_length=U0(t,r),t.match_length<=5&&(t.strategy===Dv||t.match_length===j&&t.strstart-t.match_start>4096)&&(t.match_length=j-1)),t.prev_length>=j&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-j,n=Nn(t,t.strstart-1-t.prev_match,t.prev_length-j),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=i&&(t.ins_h=Vn(t,t.ins_h,t.window[t.strstart+j-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart);while(--t.prev_length!==0);if(t.match_available=0,t.match_length=j-1,t.strstart++,n&&(Nt(t,!1),t.strm.avail_out===0))return ct}else if(t.match_available){if(n=Nn(t,0,t.window[t.strstart-1]),n&&Nt(t,!1),t.strstart++,t.lookahead--,t.strm.avail_out===0)return ct}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(n=Nn(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<j-1?t.strstart:j-1,e===nr?(Nt(t,!0),t.strm.avail_out===0?Ai:Io):t.sym_next&&(Nt(t,!1),t.strm.avail_out===0)?ct:Po},e_=(t,e)=>{let r,n,i,o,a=t.window;for(;;){if(t.lookahead<=Un){if(Ro(t),t.lookahead<=Un&&e===Hn)return ct;if(t.lookahead===0)break}if(t.match_length=0,t.lookahead>=j&&t.strstart>0&&(i=t.strstart-1,n=a[i],n===a[++i]&&n===a[++i]&&n===a[++i])){o=t.strstart+Un;do;while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<o);t.match_length=Un-(o-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=j?(r=Nn(t,1,t.match_length-j),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=Nn(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(Nt(t,!1),t.strm.avail_out===0))return ct}return t.insert=0,e===nr?(Nt(t,!0),t.strm.avail_out===0?Ai:Io):t.sym_next&&(Nt(t,!1),t.strm.avail_out===0)?ct:Po},t_=(t,e)=>{let r;for(;;){if(t.lookahead===0&&(Ro(t),t.lookahead===0)){if(e===Hn)return ct;break}if(t.match_length=0,r=Nn(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(Nt(t,!1),t.strm.avail_out===0))return ct}return t.insert=0,e===nr?(Nt(t,!0),t.strm.avail_out===0?Ai:Io):t.sym_next&&(Nt(t,!1),t.strm.avail_out===0)?ct:Po};function Ir(t,e,r,n,i){this.good_length=t,this.max_lazy=e,this.nice_length=r,this.max_chain=n,this.func=i}var ss=[new Ir(0,0,0,0,N0),new Ir(4,4,8,4,Au),new Ir(4,5,16,8,Au),new Ir(4,6,32,32,Au),new Ir(4,4,16,16,Ao),new Ir(8,16,32,32,Ao),new Ir(8,16,128,128,Ao),new Ir(8,32,128,256,Ao),new Ir(32,128,258,1024,Ao),new Ir(32,258,258,4096,Ao)],r_=t=>{t.window_size=2*t.w_size,On(t.head),t.max_lazy_match=ss[t.level].max_lazy,t.good_match=ss[t.level].good_length,t.nice_match=ss[t.level].nice_length,t.max_chain_length=ss[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=j-1,t.match_available=0,t.ins_h=0};function n_(){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=gc,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(Yv*2),this.dyn_dtree=new Uint16Array((2*$v+1)*2),this.bl_tree=new Uint16Array((2*Kv+1)*2),On(this.dyn_ltree),On(this.dyn_dtree),On(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(qv+1),this.heap=new Uint16Array(2*zu+1),On(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(2*zu+1),On(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 vs=t=>{if(!t)return 1;let e=t.state;return!e||e.strm!==t||e.status!==To&&e.status!==Ku&&e.status!==Ou&&e.status!==Uu&&e.status!==Nu&&e.status!==Hu&&e.status!==Si&&e.status!==as?1:0},H0=t=>{if(vs(t))return wi(t,Fr);t.total_in=t.total_out=0,t.data_type=Nv;let e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap===2?Ku:e.wrap?To:Si,t.adler=e.wrap===2?0:1,e.last_flush=-2,Rv(e),$e},V0=t=>{let e=H0(t);return e===$e&&r_(t.state),e},i_=(t,e)=>vs(t)||t.state.wrap!==2?Fr:(t.state.gzhead=e,$e),G0=(t,e,r,n,i,o)=>{if(!t)return Fr;let a=1;if(e===kv&&(e=6),n<0?(a=0,n=-n):n>15&&(a=2,n-=16),i<1||i>Hv||r!==gc||n<8||n>15||e<0||e>9||o<0||o>Ov||n===8&&a!==1)return wi(t,Fr);n===8&&(n=9);let s=new n_;return t.state=s,s.strm=t,s.status=To,s.wrap=a,s.gzhead=null,s.w_bits=n,s.w_size=1<<s.w_bits,s.w_mask=s.w_size-1,s.hash_bits=i+7,s.hash_size=1<<s.hash_bits,s.hash_mask=s.hash_size-1,s.hash_shift=~~((s.hash_bits+j-1)/j),s.window=new Uint8Array(s.w_size*2),s.head=new Uint16Array(s.hash_size),s.prev=new Uint16Array(s.w_size),s.lit_bufsize=1<<i+6,s.pending_buf_size=s.lit_bufsize*4,s.pending_buf=new Uint8Array(s.pending_buf_size),s.sym_buf=s.lit_bufsize,s.sym_end=(s.lit_bufsize-1)*3,s.level=e,s.strategy=o,s.method=r,V0(t)},o_=(t,e)=>G0(t,e,gc,Vv,Gv,Uv),a_=(t,e)=>{if(vs(t)||e>Xm||e<0)return t?wi(t,Fr):Fr;let r=t.state;if(!t.output||t.avail_in!==0&&!t.input||r.status===as&&e!==nr)return wi(t,t.avail_out===0?Mu:Fr);let n=r.last_flush;if(r.last_flush=e,r.pending!==0){if(Ut(t),t.avail_out===0)return r.last_flush=-1,$e}else if(t.avail_in===0&&Km(e)<=Km(n)&&e!==nr)return wi(t,Mu);if(r.status===as&&t.avail_in!==0)return wi(t,Mu);if(r.status===To&&r.wrap===0&&(r.status=Si),r.status===To){let i=gc+(r.w_bits-8<<4)<<8,o=-1;if(r.strategy>=sc||r.level<2?o=0:r.level<6?o=1:r.level===6?o=2:o=3,i|=o<<6,r.strstart!==0&&(i|=Zv),i+=31-i%31,os(r,i),r.strstart!==0&&(os(r,t.adler>>>16),os(r,t.adler&65535)),t.adler=1,r.status=Si,Ut(t),r.pending!==0)return r.last_flush=-1,$e}if(r.status===Ku){if(t.adler=0,ne(r,31),ne(r,139),ne(r,8),r.gzhead)ne(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)),ne(r,r.gzhead.time&255),ne(r,r.gzhead.time>>8&255),ne(r,r.gzhead.time>>16&255),ne(r,r.gzhead.time>>24&255),ne(r,r.level===9?2:r.strategy>=sc||r.level<2?4:0),ne(r,r.gzhead.os&255),r.gzhead.extra&&r.gzhead.extra.length&&(ne(r,r.gzhead.extra.length&255),ne(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(t.adler=ke(t.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=Ou;else if(ne(r,0),ne(r,0),ne(r,0),ne(r,0),ne(r,0),ne(r,r.level===9?2:r.strategy>=sc||r.level<2?4:0),ne(r,jv),r.status=Si,Ut(t),r.pending!==0)return r.last_flush=-1,$e}if(r.status===Ou){if(r.gzhead.extra){let i=r.pending,o=(r.gzhead.extra.length&65535)-r.gzindex;for(;r.pending+o>r.pending_buf_size;){let s=r.pending_buf_size-r.pending;if(r.pending_buf.set(r.gzhead.extra.subarray(r.gzindex,r.gzindex+s),r.pending),r.pending=r.pending_buf_size,r.gzhead.hcrc&&r.pending>i&&(t.adler=ke(t.adler,r.pending_buf,r.pending-i,i)),r.gzindex+=s,Ut(t),r.pending!==0)return r.last_flush=-1,$e;i=0,o-=s}let a=new Uint8Array(r.gzhead.extra);r.pending_buf.set(a.subarray(r.gzindex,r.gzindex+o),r.pending),r.pending+=o,r.gzhead.hcrc&&r.pending>i&&(t.adler=ke(t.adler,r.pending_buf,r.pending-i,i)),r.gzindex=0}r.status=Uu}if(r.status===Uu){if(r.gzhead.name){let i=r.pending,o;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>i&&(t.adler=ke(t.adler,r.pending_buf,r.pending-i,i)),Ut(t),r.pending!==0)return r.last_flush=-1,$e;i=0}r.gzindex<r.gzhead.name.length?o=r.gzhead.name.charCodeAt(r.gzindex++)&255:o=0,ne(r,o)}while(o!==0);r.gzhead.hcrc&&r.pending>i&&(t.adler=ke(t.adler,r.pending_buf,r.pending-i,i)),r.gzindex=0}r.status=Nu}if(r.status===Nu){if(r.gzhead.comment){let i=r.pending,o;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>i&&(t.adler=ke(t.adler,r.pending_buf,r.pending-i,i)),Ut(t),r.pending!==0)return r.last_flush=-1,$e;i=0}r.gzindex<r.gzhead.comment.length?o=r.gzhead.comment.charCodeAt(r.gzindex++)&255:o=0,ne(r,o)}while(o!==0);r.gzhead.hcrc&&r.pending>i&&(t.adler=ke(t.adler,r.pending_buf,r.pending-i,i))}r.status=Hu}if(r.status===Hu){if(r.gzhead.hcrc){if(r.pending+2>r.pending_buf_size&&(Ut(t),r.pending!==0))return r.last_flush=-1,$e;ne(r,t.adler&255),ne(r,t.adler>>8&255),t.adler=0}if(r.status=Si,Ut(t),r.pending!==0)return r.last_flush=-1,$e}if(t.avail_in!==0||r.lookahead!==0||e!==Hn&&r.status!==as){let i=r.level===0?N0(r,e):r.strategy===sc?t_(r,e):r.strategy===zv?e_(r,e):ss[r.level].func(r,e);if((i===Ai||i===Io)&&(r.status=as),i===ct||i===Ai)return t.avail_out===0&&(r.last_flush=-1),$e;if(i===Po&&(e===Iv?Pv(r):e!==Xm&&(Du(r,0,0,!1),e===Bv&&(On(r.head),r.lookahead===0&&(r.strstart=0,r.block_start=0,r.insert=0))),Ut(t),t.avail_out===0))return r.last_flush=-1,$e}return e!==nr?$e:r.wrap<=0?$m:(r.wrap===2?(ne(r,t.adler&255),ne(r,t.adler>>8&255),ne(r,t.adler>>16&255),ne(r,t.adler>>24&255),ne(r,t.total_in&255),ne(r,t.total_in>>8&255),ne(r,t.total_in>>16&255),ne(r,t.total_in>>24&255)):(os(r,t.adler>>>16),os(r,t.adler&65535)),Ut(t),r.wrap>0&&(r.wrap=-r.wrap),r.pending!==0?$e:$m)},s_=t=>{if(vs(t))return Fr;let e=t.state.status;return t.state=null,e===Si?wi(t,Fv):$e},l_=(t,e)=>{let r=e.length;if(vs(t))return Fr;let n=t.state,i=n.wrap;if(i===2||i===1&&n.status!==To||n.lookahead)return Fr;if(i===1&&(t.adler=ps(t.adler,e,r,0)),n.wrap=0,r>=n.w_size){i===0&&(On(n.head),n.strstart=0,n.block_start=0,n.insert=0);let c=new Uint8Array(n.w_size);c.set(e.subarray(r-n.w_size,r),0),e=c,r=n.w_size}let o=t.avail_in,a=t.next_in,s=t.input;for(t.avail_in=r,t.next_in=0,t.input=e,Ro(n);n.lookahead>=j;){let c=n.strstart,l=n.lookahead-(j-1);do n.ins_h=Vn(n,n.ins_h,n.window[c+j-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=j-1,Ro(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=j-1,n.match_available=0,t.next_in=a,t.input=s,t.avail_in=o,n.wrap=i,$e},c_=o_,d_=G0,u_=V0,f_=H0,h_=i_,m_=a_,p_=s_,g_=l_,y_="pako deflate (from Nodeca project)",cs={deflateInit:c_,deflateInit2:d_,deflateReset:u_,deflateResetKeep:f_,deflateSetHeader:h_,deflate:m_,deflateEnd:p_,deflateSetDictionary:g_,deflateInfo:y_},b_=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),x_=function(t){let e=Array.prototype.slice.call(arguments,1);for(;e.length;){let r=e.shift();if(r){if(typeof r!="object")throw new TypeError(r+"must be non-object");for(let n in r)b_(r,n)&&(t[n]=r[n])}}return t},v_=t=>{let e=0;for(let n=0,i=t.length;n<i;n++)e+=t[n].length;let r=new Uint8Array(e);for(let n=0,i=0,o=t.length;n<o;n++){let a=t[n];r.set(a,i),i+=a.length}return r},yc={assign:x_,flattenChunks:v_},W0=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{W0=!1}var gs=new Uint8Array(256);for(let t=0;t<256;t++)gs[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;gs[254]=gs[254]=1;var __=t=>{if(typeof TextEncoder=="function"&&TextEncoder.prototype.encode)return new TextEncoder().encode(t);let e,r,n,i,o,a=t.length,s=0;for(i=0;i<a;i++)r=t.charCodeAt(i),(r&64512)===55296&&i+1<a&&(n=t.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),s+=r<128?1:r<2048?2:r<65536?3:4;for(e=new Uint8Array(s),o=0,i=0;o<s;i++)r=t.charCodeAt(i),(r&64512)===55296&&i+1<a&&(n=t.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),r<128?e[o++]=r:r<2048?(e[o++]=192|r>>>6,e[o++]=128|r&63):r<65536?(e[o++]=224|r>>>12,e[o++]=128|r>>>6&63,e[o++]=128|r&63):(e[o++]=240|r>>>18,e[o++]=128|r>>>12&63,e[o++]=128|r>>>6&63,e[o++]=128|r&63);return e},S_=(t,e)=>{if(e<65534&&t.subarray&&W0)return String.fromCharCode.apply(null,t.length===e?t:t.subarray(0,e));let r="";for(let n=0;n<e;n++)r+=String.fromCharCode(t[n]);return r},w_=(t,e)=>{let r=e||t.length;if(typeof TextDecoder=="function"&&TextDecoder.prototype.decode)return new TextDecoder().decode(t.subarray(0,e));let n,i,o=new Array(r*2);for(i=0,n=0;n<r;){let a=t[n++];if(a<128){o[i++]=a;continue}let s=gs[a];if(s>4){o[i++]=65533,n+=s-1;continue}for(a&=s===2?31:s===3?15:7;s>1&&n<r;)a=a<<6|t[n++]&63,s--;if(s>1){o[i++]=65533;continue}a<65536?o[i++]=a:(a-=65536,o[i++]=55296|a>>10&1023,o[i++]=56320|a&1023)}return S_(o,i)},M_=(t,e)=>{e=e||t.length,e>t.length&&(e=t.length);let r=e-1;for(;r>=0&&(t[r]&192)===128;)r--;return r<0||r===0?e:r+gs[t[r]]>e?r:e},ys={string2buf:__,buf2string:w_,utf8border:M_};function A_(){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 X0=A_,$0=Object.prototype.toString,{Z_NO_FLUSH:E_,Z_SYNC_FLUSH:L_,Z_FULL_FLUSH:T_,Z_FINISH:R_,Z_OK:mc,Z_STREAM_END:C_,Z_DEFAULT_COMPRESSION:P_,Z_DEFAULT_STRATEGY:I_,Z_DEFLATED:B_}=Li;function _s(t){this.options=yc.assign({level:P_,method:B_,chunkSize:16384,windowBits:15,memLevel:8,strategy:I_},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new X0,this.strm.avail_out=0;let r=cs.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(r!==mc)throw new Error(Mi[r]);if(e.header&&cs.deflateSetHeader(this.strm,e.header),e.dictionary){let n;if(typeof e.dictionary=="string"?n=ys.string2buf(e.dictionary):$0.call(e.dictionary)==="[object ArrayBuffer]"?n=new Uint8Array(e.dictionary):n=e.dictionary,r=cs.deflateSetDictionary(this.strm,n),r!==mc)throw new Error(Mi[r]);this._dict_set=!0}}_s.prototype.push=function(t,e){let r=this.strm,n=this.options.chunkSize,i,o;if(this.ended)return!1;for(e===~~e?o=e:o=e===!0?R_:E_,typeof t=="string"?r.input=ys.string2buf(t):$0.call(t)==="[object ArrayBuffer]"?r.input=new Uint8Array(t):r.input=t,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),(o===L_||o===T_)&&r.avail_out<=6){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(i=cs.deflate(r,o),i===C_)return r.next_out>0&&this.onData(r.output.subarray(0,r.next_out)),i=cs.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===mc;if(r.avail_out===0){this.onData(r.output);continue}if(o>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(t){this.chunks.push(t)};_s.prototype.onEnd=function(t){t===mc&&(this.result=yc.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};function Yu(t,e){let r=new _s(e);if(r.push(t,!0),r.err)throw r.msg||Mi[r.err];return r.result}function F_(t,e){return e=e||{},e.raw=!0,Yu(t,e)}function k_(t,e){return e=e||{},e.gzip=!0,Yu(t,e)}var D_=_s,z_=Yu,O_=F_,U_=k_,N_=Li,H_={Deflate:D_,deflate:z_,deflateRaw:O_,gzip:U_,constants:N_},lc=16209,V_=16191,G_=function(e,r){let n,i,o,a,s,c,l,d,f,u,h,m,g,p,y,v,x,b,_,w,S,E,T,M,C=e.state;n=e.next_in,T=e.input,i=n+(e.avail_in-5),o=e.next_out,M=e.output,a=o-(r-e.avail_out),s=o+(e.avail_out-257),c=C.dmax,l=C.wsize,d=C.whave,f=C.wnext,u=C.window,h=C.hold,m=C.bits,g=C.lencode,p=C.distcode,y=(1<<C.lenbits)-1,v=(1<<C.distbits)-1;e:do{m<15&&(h+=T[n++]<<m,m+=8,h+=T[n++]<<m,m+=8),x=g[h&y];t:for(;;){if(b=x>>>24,h>>>=b,m-=b,b=x>>>16&255,b===0)M[o++]=x&65535;else if(b&16){_=x&65535,b&=15,b&&(m<b&&(h+=T[n++]<<m,m+=8),_+=h&(1<<b)-1,h>>>=b,m-=b),m<15&&(h+=T[n++]<<m,m+=8,h+=T[n++]<<m,m+=8),x=p[h&v];r:for(;;){if(b=x>>>24,h>>>=b,m-=b,b=x>>>16&255,b&16){if(w=x&65535,b&=15,m<b&&(h+=T[n++]<<m,m+=8,m<b&&(h+=T[n++]<<m,m+=8)),w+=h&(1<<b)-1,w>c){e.msg="invalid distance too far back",C.mode=lc;break e}if(h>>>=b,m-=b,b=o-a,w>b){if(b=w-b,b>d&&C.sane){e.msg="invalid distance too far back",C.mode=lc;break e}if(S=0,E=u,f===0){if(S+=l-b,b<_){_-=b;do M[o++]=u[S++];while(--b);S=o-w,E=M}}else if(f<b){if(S+=l+f-b,b-=f,b<_){_-=b;do M[o++]=u[S++];while(--b);if(S=0,f<_){b=f,_-=b;do M[o++]=u[S++];while(--b);S=o-w,E=M}}}else if(S+=f-b,b<_){_-=b;do M[o++]=u[S++];while(--b);S=o-w,E=M}for(;_>2;)M[o++]=E[S++],M[o++]=E[S++],M[o++]=E[S++],_-=3;_&&(M[o++]=E[S++],_>1&&(M[o++]=E[S++]))}else{S=o-w;do M[o++]=M[S++],M[o++]=M[S++],M[o++]=M[S++],_-=3;while(_>2);_&&(M[o++]=M[S++],_>1&&(M[o++]=M[S++]))}}else if((b&64)===0){x=p[(x&65535)+(h&(1<<b)-1)];continue r}else{e.msg="invalid distance code",C.mode=lc;break e}break}}else if((b&64)===0){x=g[(x&65535)+(h&(1<<b)-1)];continue t}else if(b&32){C.mode=V_;break e}else{e.msg="invalid literal/length code",C.mode=lc;break e}break}}while(n<i&&o<s);_=m>>3,n-=_,m-=_<<3,h&=(1<<m)-1,e.next_in=n,e.next_out=o,e.avail_in=n<i?5+(i-n):5-(n-i),e.avail_out=o<s?257+(s-o):257-(o-s),C.hold=h,C.bits=m},Eo=15,Ym=852,qm=592,Zm=0,Eu=1,jm=2,W_=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]),X_=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]),$_=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]),K_=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]),Y_=(t,e,r,n,i,o,a,s)=>{let c=s.bits,l=0,d=0,f=0,u=0,h=0,m=0,g=0,p=0,y=0,v=0,x,b,_,w,S,E=null,T,M=new Uint16Array(Eo+1),C=new Uint16Array(Eo+1),B=null,F,k,N;for(l=0;l<=Eo;l++)M[l]=0;for(d=0;d<n;d++)M[e[r+d]]++;for(h=c,u=Eo;u>=1&&M[u]===0;u--);if(h>u&&(h=u),u===0)return i[o++]=1<<24|64<<16|0,i[o++]=1<<24|64<<16|0,s.bits=1,0;for(f=1;f<u&&M[f]===0;f++);for(h<f&&(h=f),p=1,l=1;l<=Eo;l++)if(p<<=1,p-=M[l],p<0)return-1;if(p>0&&(t===Zm||u!==1))return-1;for(C[1]=0,l=1;l<Eo;l++)C[l+1]=C[l]+M[l];for(d=0;d<n;d++)e[r+d]!==0&&(a[C[e[r+d]]++]=d);if(t===Zm?(E=B=a,T=20):t===Eu?(E=W_,B=X_,T=257):(E=$_,B=K_,T=0),v=0,d=0,l=f,S=o,m=h,g=0,_=-1,y=1<<h,w=y-1,t===Eu&&y>Ym||t===jm&&y>qm)return 1;for(;;){F=l-g,a[d]+1<T?(k=0,N=a[d]):a[d]>=T?(k=B[a[d]-T],N=E[a[d]-T]):(k=96,N=0),x=1<<l-g,b=1<<m,f=b;do b-=x,i[S+(v>>g)+b]=F<<24|k<<16|N|0;while(b!==0);for(x=1<<l-1;v&x;)x>>=1;if(x!==0?(v&=x-1,v+=x):v=0,d++,--M[l]===0){if(l===u)break;l=e[r+a[d]]}if(l>h&&(v&w)!==_){for(g===0&&(g=h),S+=f,m=l-g,p=1<<m;m+g<u&&(p-=M[m+g],!(p<=0));)m++,p<<=1;if(y+=1<<m,t===Eu&&y>Ym||t===jm&&y>qm)return 1;_=v&w,i[_]=h<<24|m<<16|S-o|0}}return v!==0&&(i[S+v]=l-g<<24|64<<16|0),s.bits=h,0},ds=Y_,q_=0,K0=1,Y0=2,{Z_FINISH:Qm,Z_BLOCK:Z_,Z_TREES:cc,Z_OK:Ei,Z_STREAM_END:j_,Z_NEED_DICT:Q_,Z_STREAM_ERROR:ir,Z_DATA_ERROR:q0,Z_MEM_ERROR:Z0,Z_BUF_ERROR:J_,Z_DEFLATED:Jm}=Li,bc=16180,e0=16181,t0=16182,r0=16183,n0=16184,i0=16185,o0=16186,a0=16187,s0=16188,l0=16189,pc=16190,nn=16191,Lu=16192,c0=16193,Tu=16194,d0=16195,u0=16196,f0=16197,h0=16198,dc=16199,uc=16200,m0=16201,p0=16202,g0=16203,y0=16204,b0=16205,Ru=16206,x0=16207,v0=16208,be=16209,j0=16210,Q0=16211,eS=852,tS=592,rS=15,nS=rS,_0=t=>(t>>>24&255)+(t>>>8&65280)+((t&65280)<<8)+((t&255)<<24);function iS(){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 Ti=t=>{if(!t)return 1;let e=t.state;return!e||e.strm!==t||e.mode<bc||e.mode>Q0?1:0},J0=t=>{if(Ti(t))return ir;let e=t.state;return t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=e.wrap&1),e.mode=bc,e.last=0,e.havedict=0,e.flags=-1,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new Int32Array(eS),e.distcode=e.distdyn=new Int32Array(tS),e.sane=1,e.back=-1,Ei},ep=t=>{if(Ti(t))return ir;let e=t.state;return e.wsize=0,e.whave=0,e.wnext=0,J0(t)},tp=(t,e)=>{let r;if(Ti(t))return ir;let n=t.state;return e<0?(r=0,e=-e):(r=(e>>4)+5,e<48&&(e&=15)),e&&(e<8||e>15)?ir:(n.window!==null&&n.wbits!==e&&(n.window=null),n.wrap=r,n.wbits=e,ep(t))},rp=(t,e)=>{if(!t)return ir;let r=new iS;t.state=r,r.strm=t,r.window=null,r.mode=bc;let n=tp(t,e);return n!==Ei&&(t.state=null),n},oS=t=>rp(t,nS),S0=!0,Cu,Pu,aS=t=>{if(S0){Cu=new Int32Array(512),Pu=new Int32Array(32);let e=0;for(;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(ds(K0,t.lens,0,288,Cu,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;ds(Y0,t.lens,0,32,Pu,0,t.work,{bits:5}),S0=!1}t.lencode=Cu,t.lenbits=9,t.distcode=Pu,t.distbits=5},np=(t,e,r,n)=>{let i,o=t.state;return o.window===null&&(o.wsize=1<<o.wbits,o.wnext=0,o.whave=0,o.window=new Uint8Array(o.wsize)),n>=o.wsize?(o.window.set(e.subarray(r-o.wsize,r),0),o.wnext=0,o.whave=o.wsize):(i=o.wsize-o.wnext,i>n&&(i=n),o.window.set(e.subarray(r-n,r-n+i),o.wnext),n-=i,n?(o.window.set(e.subarray(r-n,r),0),o.wnext=n,o.whave=o.wsize):(o.wnext+=i,o.wnext===o.wsize&&(o.wnext=0),o.whave<o.wsize&&(o.whave+=i))),0},sS=(t,e)=>{let r,n,i,o,a,s,c,l,d,f,u,h,m,g,p=0,y,v,x,b,_,w,S,E,T=new Uint8Array(4),M,C,B=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(Ti(t)||!t.output||!t.input&&t.avail_in!==0)return ir;r=t.state,r.mode===nn&&(r.mode=Lu),a=t.next_out,i=t.output,c=t.avail_out,o=t.next_in,n=t.input,s=t.avail_in,l=r.hold,d=r.bits,f=s,u=c,E=Ei;e:for(;;)switch(r.mode){case bc:if(r.wrap===0){r.mode=Lu;break}for(;d<16;){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}if(r.wrap&2&&l===35615){r.wbits===0&&(r.wbits=15),r.check=0,T[0]=l&255,T[1]=l>>>8&255,r.check=ke(r.check,T,2,0),l=0,d=0,r.mode=e0;break}if(r.head&&(r.head.done=!1),!(r.wrap&1)||(((l&255)<<8)+(l>>8))%31){t.msg="incorrect header check",r.mode=be;break}if((l&15)!==Jm){t.msg="unknown compression method",r.mode=be;break}if(l>>>=4,d-=4,S=(l&15)+8,r.wbits===0&&(r.wbits=S),S>15||S>r.wbits){t.msg="invalid window size",r.mode=be;break}r.dmax=1<<r.wbits,r.flags=0,t.adler=r.check=1,r.mode=l&512?l0:nn,l=0,d=0;break;case e0:for(;d<16;){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}if(r.flags=l,(r.flags&255)!==Jm){t.msg="unknown compression method",r.mode=be;break}if(r.flags&57344){t.msg="unknown header flags set",r.mode=be;break}r.head&&(r.head.text=l>>8&1),r.flags&512&&r.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,r.check=ke(r.check,T,2,0)),l=0,d=0,r.mode=t0;case t0:for(;d<32;){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}r.head&&(r.head.time=l),r.flags&512&&r.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,T[2]=l>>>16&255,T[3]=l>>>24&255,r.check=ke(r.check,T,4,0)),l=0,d=0,r.mode=r0;case r0:for(;d<16;){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}r.head&&(r.head.xflags=l&255,r.head.os=l>>8),r.flags&512&&r.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,r.check=ke(r.check,T,2,0)),l=0,d=0,r.mode=n0;case n0:if(r.flags&1024){for(;d<16;){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}r.length=l,r.head&&(r.head.extra_len=l),r.flags&512&&r.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,r.check=ke(r.check,T,2,0)),l=0,d=0}else r.head&&(r.head.extra=null);r.mode=i0;case i0:if(r.flags&1024&&(h=r.length,h>s&&(h=s),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(o,o+h),S)),r.flags&512&&r.wrap&4&&(r.check=ke(r.check,n,h,o)),s-=h,o+=h,r.length-=h),r.length))break e;r.length=0,r.mode=o0;case o0:if(r.flags&2048){if(s===0)break e;h=0;do S=n[o+h++],r.head&&S&&r.length<65536&&(r.head.name+=String.fromCharCode(S));while(S&&h<s);if(r.flags&512&&r.wrap&4&&(r.check=ke(r.check,n,h,o)),s-=h,o+=h,S)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=a0;case a0:if(r.flags&4096){if(s===0)break e;h=0;do S=n[o+h++],r.head&&S&&r.length<65536&&(r.head.comment+=String.fromCharCode(S));while(S&&h<s);if(r.flags&512&&r.wrap&4&&(r.check=ke(r.check,n,h,o)),s-=h,o+=h,S)break e}else r.head&&(r.head.comment=null);r.mode=s0;case s0:if(r.flags&512){for(;d<16;){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}if(r.wrap&4&&l!==(r.check&65535)){t.msg="header crc mismatch",r.mode=be;break}l=0,d=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=nn;break;case l0:for(;d<32;){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}t.adler=r.check=_0(l),l=0,d=0,r.mode=pc;case pc:if(r.havedict===0)return t.next_out=a,t.avail_out=c,t.next_in=o,t.avail_in=s,r.hold=l,r.bits=d,Q_;t.adler=r.check=1,r.mode=nn;case nn:if(e===Z_||e===cc)break e;case Lu:if(r.last){l>>>=d&7,d-=d&7,r.mode=Ru;break}for(;d<3;){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}switch(r.last=l&1,l>>>=1,d-=1,l&3){case 0:r.mode=c0;break;case 1:if(aS(r),r.mode=dc,e===cc){l>>>=2,d-=2;break e}break;case 2:r.mode=u0;break;case 3:t.msg="invalid block type",r.mode=be}l>>>=2,d-=2;break;case c0:for(l>>>=d&7,d-=d&7;d<32;){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}if((l&65535)!==(l>>>16^65535)){t.msg="invalid stored block lengths",r.mode=be;break}if(r.length=l&65535,l=0,d=0,r.mode=Tu,e===cc)break e;case Tu:r.mode=d0;case d0:if(h=r.length,h){if(h>s&&(h=s),h>c&&(h=c),h===0)break e;i.set(n.subarray(o,o+h),a),s-=h,o+=h,c-=h,a+=h,r.length-=h;break}r.mode=nn;break;case u0:for(;d<14;){if(s===0)break e;s--,l+=n[o++]<<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){t.msg="too many length or distance symbols",r.mode=be;break}r.have=0,r.mode=f0;case f0:for(;r.have<r.ncode;){for(;d<3;){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}r.lens[B[r.have++]]=l&7,l>>>=3,d-=3}for(;r.have<19;)r.lens[B[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,M={bits:r.lenbits},E=ds(q_,r.lens,0,19,r.lencode,0,r.work,M),r.lenbits=M.bits,E){t.msg="invalid code lengths set",r.mode=be;break}r.have=0,r.mode=h0;case h0:for(;r.have<r.nlen+r.ndist;){for(;p=r.lencode[l&(1<<r.lenbits)-1],y=p>>>24,v=p>>>16&255,x=p&65535,!(y<=d);){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}if(x<16)l>>>=y,d-=y,r.lens[r.have++]=x;else{if(x===16){for(C=y+2;d<C;){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}if(l>>>=y,d-=y,r.have===0){t.msg="invalid bit length repeat",r.mode=be;break}S=r.lens[r.have-1],h=3+(l&3),l>>>=2,d-=2}else if(x===17){for(C=y+3;d<C;){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}l>>>=y,d-=y,S=0,h=3+(l&7),l>>>=3,d-=3}else{for(C=y+7;d<C;){if(s===0)break e;s--,l+=n[o++]<<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){t.msg="invalid bit length repeat",r.mode=be;break}for(;h--;)r.lens[r.have++]=S}}if(r.mode===be)break;if(r.lens[256]===0){t.msg="invalid code -- missing end-of-block",r.mode=be;break}if(r.lenbits=9,M={bits:r.lenbits},E=ds(K0,r.lens,0,r.nlen,r.lencode,0,r.work,M),r.lenbits=M.bits,E){t.msg="invalid literal/lengths set",r.mode=be;break}if(r.distbits=6,r.distcode=r.distdyn,M={bits:r.distbits},E=ds(Y0,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,M),r.distbits=M.bits,E){t.msg="invalid distances set",r.mode=be;break}if(r.mode=dc,e===cc)break e;case dc:r.mode=uc;case uc:if(s>=6&&c>=258){t.next_out=a,t.avail_out=c,t.next_in=o,t.avail_in=s,r.hold=l,r.bits=d,G_(t,u),a=t.next_out,i=t.output,c=t.avail_out,o=t.next_in,n=t.input,s=t.avail_in,l=r.hold,d=r.bits,r.mode===nn&&(r.back=-1);break}for(r.back=0;p=r.lencode[l&(1<<r.lenbits)-1],y=p>>>24,v=p>>>16&255,x=p&65535,!(y<=d);){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}if(v&&(v&240)===0){for(b=y,_=v,w=x;p=r.lencode[w+((l&(1<<b+_)-1)>>b)],y=p>>>24,v=p>>>16&255,x=p&65535,!(b+y<=d);){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}l>>>=b,d-=b,r.back+=b}if(l>>>=y,d-=y,r.back+=y,r.length=x,v===0){r.mode=b0;break}if(v&32){r.back=-1,r.mode=nn;break}if(v&64){t.msg="invalid literal/length code",r.mode=be;break}r.extra=v&15,r.mode=m0;case m0:if(r.extra){for(C=r.extra;d<C;){if(s===0)break e;s--,l+=n[o++]<<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=p0;case p0:for(;p=r.distcode[l&(1<<r.distbits)-1],y=p>>>24,v=p>>>16&255,x=p&65535,!(y<=d);){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}if((v&240)===0){for(b=y,_=v,w=x;p=r.distcode[w+((l&(1<<b+_)-1)>>b)],y=p>>>24,v=p>>>16&255,x=p&65535,!(b+y<=d);){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}l>>>=b,d-=b,r.back+=b}if(l>>>=y,d-=y,r.back+=y,v&64){t.msg="invalid distance code",r.mode=be;break}r.offset=x,r.extra=v&15,r.mode=g0;case g0:if(r.extra){for(C=r.extra;d<C;){if(s===0)break e;s--,l+=n[o++]<<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){t.msg="invalid distance too far back",r.mode=be;break}r.mode=y0;case y0:if(c===0)break e;if(h=u-c,r.offset>h){if(h=r.offset-h,h>r.whave&&r.sane){t.msg="invalid distance too far back",r.mode=be;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=a-r.offset,h=r.length;h>c&&(h=c),c-=h,r.length-=h;do i[a++]=g[m++];while(--h);r.length===0&&(r.mode=uc);break;case b0:if(c===0)break e;i[a++]=r.length,c--,r.mode=uc;break;case Ru:if(r.wrap){for(;d<32;){if(s===0)break e;s--,l|=n[o++]<<d,d+=8}if(u-=c,t.total_out+=u,r.total+=u,r.wrap&4&&u&&(t.adler=r.check=r.flags?ke(r.check,i,u,a-u):ps(r.check,i,u,a-u)),u=c,r.wrap&4&&(r.flags?l:_0(l))!==r.check){t.msg="incorrect data check",r.mode=be;break}l=0,d=0}r.mode=x0;case x0:if(r.wrap&&r.flags){for(;d<32;){if(s===0)break e;s--,l+=n[o++]<<d,d+=8}if(r.wrap&4&&l!==(r.total&4294967295)){t.msg="incorrect length check",r.mode=be;break}l=0,d=0}r.mode=v0;case v0:E=j_;break e;case be:E=q0;break e;case j0:return Z0;case Q0:default:return ir}return t.next_out=a,t.avail_out=c,t.next_in=o,t.avail_in=s,r.hold=l,r.bits=d,(r.wsize||u!==t.avail_out&&r.mode<be&&(r.mode<Ru||e!==Qm))&&np(t,t.output,t.next_out,u-t.avail_out),f-=t.avail_in,u-=t.avail_out,t.total_in+=f,t.total_out+=u,r.total+=u,r.wrap&4&&u&&(t.adler=r.check=r.flags?ke(r.check,i,u,t.next_out-u):ps(r.check,i,u,t.next_out-u)),t.data_type=r.bits+(r.last?64:0)+(r.mode===nn?128:0)+(r.mode===dc||r.mode===Tu?256:0),(f===0&&u===0||e===Qm)&&E===Ei&&(E=J_),E},lS=t=>{if(Ti(t))return ir;let e=t.state;return e.window&&(e.window=null),t.state=null,Ei},cS=(t,e)=>{if(Ti(t))return ir;let r=t.state;return(r.wrap&2)===0?ir:(r.head=e,e.done=!1,Ei)},dS=(t,e)=>{let r=e.length,n,i,o;return Ti(t)||(n=t.state,n.wrap!==0&&n.mode!==pc)?ir:n.mode===pc&&(i=1,i=ps(i,e,r,0),i!==n.check)?q0:(o=np(t,e,r,r),o?(n.mode=j0,Z0):(n.havedict=1,Ei))},uS=ep,fS=tp,hS=J0,mS=oS,pS=rp,gS=sS,yS=lS,bS=cS,xS=dS,vS="pako inflate (from Nodeca project)",an={inflateReset:uS,inflateReset2:fS,inflateResetKeep:hS,inflateInit:mS,inflateInit2:pS,inflate:gS,inflateEnd:yS,inflateGetHeader:bS,inflateSetDictionary:xS,inflateInfo:vS};function _S(){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 SS=_S,ip=Object.prototype.toString,{Z_NO_FLUSH:wS,Z_FINISH:MS,Z_OK:bs,Z_STREAM_END:Iu,Z_NEED_DICT:Bu,Z_STREAM_ERROR:AS,Z_DATA_ERROR:w0,Z_MEM_ERROR:ES}=Li;function Ss(t){this.options=yc.assign({chunkSize:1024*64,windowBits:15,to:""},t||{});let e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,e.windowBits===0&&(e.windowBits=-15)),e.windowBits>=0&&e.windowBits<16&&!(t&&t.windowBits)&&(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&(e.windowBits&15)===0&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new X0,this.strm.avail_out=0;let r=an.inflateInit2(this.strm,e.windowBits);if(r!==bs)throw new Error(Mi[r]);if(this.header=new SS,an.inflateGetHeader(this.strm,this.header),e.dictionary&&(typeof e.dictionary=="string"?e.dictionary=ys.string2buf(e.dictionary):ip.call(e.dictionary)==="[object ArrayBuffer]"&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(r=an.inflateSetDictionary(this.strm,e.dictionary),r!==bs)))throw new Error(Mi[r])}Ss.prototype.push=function(t,e){let r=this.strm,n=this.options.chunkSize,i=this.options.dictionary,o,a,s;if(this.ended)return!1;for(e===~~e?a=e:a=e===!0?MS:wS,ip.call(t)==="[object ArrayBuffer]"?r.input=new Uint8Array(t):r.input=t,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),o=an.inflate(r,a),o===Bu&&i&&(o=an.inflateSetDictionary(r,i),o===bs?o=an.inflate(r,a):o===w0&&(o=Bu));r.avail_in>0&&o===Iu&&r.state.wrap>0&&t[r.next_in]!==0;)an.inflateReset(r),o=an.inflate(r,a);switch(o){case AS:case w0:case Bu:case ES:return this.onEnd(o),this.ended=!0,!1}if(s=r.avail_out,r.next_out&&(r.avail_out===0||o===Iu))if(this.options.to==="string"){let c=ys.utf8border(r.output,r.next_out),l=r.next_out-c,d=ys.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(!(o===bs&&s===0)){if(o===Iu)return o=an.inflateEnd(this.strm),this.onEnd(o),this.ended=!0,!0;if(r.avail_in===0)break}}return!0};Ss.prototype.onData=function(t){this.chunks.push(t)};Ss.prototype.onEnd=function(t){t===bs&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=yc.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};function qu(t,e){let r=new Ss(e);if(r.push(t),r.err)throw r.msg||Mi[r.err];return r.result}function LS(t,e){return e=e||{},e.raw=!0,qu(t,e)}var TS=Ss,RS=qu,CS=LS,PS=qu,IS=Li,BS={Inflate:TS,inflate:RS,inflateRaw:CS,ungzip:PS,constants:IS},{Deflate:FS,deflate:kS,deflateRaw:DS,gzip:zS}=H_,{Inflate:OS,inflate:US,inflateRaw:NS,ungzip:HS}=BS,VS=FS,GS=kS,WS=DS,XS=zS,$S=OS,KS=US,YS=NS,qS=HS,ZS=Li,Zu={Deflate:VS,deflate:GS,deflateRaw:WS,gzip:XS,Inflate:$S,inflate:KS,inflateRaw:YS,ungzip:qS,constants:ZS};var Bo=class Bo{constructor(e=Bo.INITIAL_SIZE){this.buffer=new Uint8Array(e),this.readOffset=0,this.writeOffset=0}append(e){let r=e instanceof Uint8Array?e:new Uint8Array(e),n=this.writeOffset+r.length;n>this.buffer.length&&this.grow(n),this.buffer.set(r,this.writeOffset),this.writeOffset+=r.length}hasBytes(e){return this.writeOffset-this.readOffset>=e}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 e=this.buffer[this.readOffset]|this.buffer[this.readOffset+1]<<8;return this.readOffset+=2,e>32767?e-65536:e}readLong(){if(!this.hasBytes(4))throw new Error("Buffer underflow");let e=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,e}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 e=Math.min(Bo.MAX_STRING_LENGTH,this.writeOffset-this.readOffset),r=0;for(;r<e&&this.buffer[this.readOffset+r]!==0;)r++;if(r>=e)throw this.writeOffset-this.readOffset<=e?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(e){if(!this.hasBytes(e))throw new Error("Buffer underflow");return this.buffer.slice(this.readOffset,this.readOffset+e)}readBytes(e){if(!this.hasBytes(e))throw new Error("Buffer underflow");let r=this.buffer.slice(this.readOffset,this.readOffset+e);return this.readOffset+=e,r}readData(e){return this.readBytes(e)}getReadPosition(){return this.readOffset}getWritePosition(){return this.writeOffset}setReadPosition(e){if(e<0||e>this.writeOffset)throw new Error("Invalid read position");this.readOffset=e}grow(e){let r=e?Math.max(e,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 e=this.writeOffset-this.readOffset;if(e===0){this.readOffset=0,this.writeOffset=0;return}this.buffer.copyWithin(0,this.readOffset,this.writeOffset),this.readOffset=0,this.writeOffset=e}getCapacity(){return this.buffer.length}reset(){this.readOffset=0,this.writeOffset=0}};Bo.INITIAL_SIZE=64*1024,Bo.MAX_STRING_LENGTH=2048;var Gn=Bo;var Dr=()=>({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}),mr=()=>({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,watertype:0});var op={0:R.bad,1:R.nop,2:R.disconnect,3:R.reconnect,4:R.download,5:R.frame,6:R.inventory,7:R.layout,8:R.muzzleflash,9:R.temp_entity,10:R.sound,11:R.print,12:R.stufftext,13:R.serverdata,14:R.configstring,15:R.spawnbaseline,16:R.centerprint,17:R.playerinfo,18:R.packetentities,19:R.deltapacketentities,20:R.muzzleflash2},xc=class{constructor(){this.protocolVersion=34}translateCommand(e){return op[e]!==void 0?op[e]:R.bad}parseServerData(e){let r=e.readLong(),n=e.readLong(),i=e.readByte(),o=e.readString(),a=e.readShort(),s=e.readString();return{protocol:r,serverCount:n,attractLoop:i,gameDir:o,playerNum:a,levelName:s}}parseEntityBits(e){let r=e.readByte();r&yr&&(r|=e.readByte()<<8),r&xr&&(r|=e.readByte()<<16),r&vr&&(r|=e.readByte()<<24);let n;return r&jn?n=e.readShort():n=e.readByte(),{number:n,bits:r,bitsHigh:0}}parseDelta(e,r,n,i,o,a){r.number=e.number,r.modelindex=e.modelindex,r.modelindex2=e.modelindex2,r.modelindex3=e.modelindex3,r.modelindex4=e.modelindex4,r.frame=e.frame,r.skinnum=e.skinnum,r.effects=e.effects,r.renderfx=e.renderfx,r.origin.x=e.origin.x,r.origin.y=e.origin.y,r.origin.z=e.origin.z,r.old_origin.x=e.origin.x,r.old_origin.y=e.origin.y,r.old_origin.z=e.origin.z,r.angles.x=e.angles.x,r.angles.y=e.angles.y,r.angles.z=e.angles.z,r.sound=e.sound,r.event=e.event,r.solid=e.solid,r.number=n,r.bits=i,i&_t&&(r.modelindex=a.readByte()),i&wt&&(r.modelindex2=a.readByte()),i&Mt&&(r.modelindex3=a.readByte()),i&At&&(r.modelindex4=a.readByte()),i&yt&&(r.frame=a.readByte()),i&St&&(r.frame=a.readShort()),i&Ve&&i&Xe?r.skinnum=a.readLong():i&Ve?r.skinnum=a.readByte():i&Xe&&(r.skinnum=a.readShort()),i&He&&i&We?r.effects=a.readLong():i&He?r.effects=a.readByte():i&We&&(r.effects=a.readShort()),i&Ne&&i&Ge?r.renderfx=a.readLong():i&Ne?r.renderfx=a.readByte():i&Ge&&(r.renderfx=a.readShort()),i&ht&&(r.origin.x=a.readShort()*.125),i&mt&&(r.origin.y=a.readShort()*.125),i&xt&&(r.origin.z=a.readShort()*.125),i&vt&&(r.angles.x=a.readByte()*(360/256)),i&pt&&(r.angles.y=a.readByte()*(360/256)),i&gt&&(r.angles.z=a.readByte()*(360/256)),i&lr&&(r.old_origin.x=a.readShort()*.125,r.old_origin.y=a.readShort()*.125,r.old_origin.z=a.readShort()*.125),i&Et&&(r.sound=a.readByte()),i&bt?r.event=a.readByte():r.event=0,i&Lt&&(r.solid=a.readShort())}parsePlayerState(e){let r=mr(),n=e.readShort();n&1&&(r.pm_type=e.readByte()),n&2&&(r.origin.x=e.readShort()*.125,r.origin.y=e.readShort()*.125,r.origin.z=e.readShort()*.125),n&4&&(r.velocity.x=e.readShort()*.125,r.velocity.y=e.readShort()*.125,r.velocity.z=e.readShort()*.125),n&8&&(r.pm_time=e.readByte()),n&16&&(r.pm_flags=e.readByte()),n&32&&(r.gravity=e.readShort()),n&64&&(r.delta_angles.x=e.readShort()*(180/32768),r.delta_angles.y=e.readShort()*(180/32768),r.delta_angles.z=e.readShort()*(180/32768)),n&128&&(r.viewoffset.x=(e.readByte()<<24>>24)*.25,r.viewoffset.y=(e.readByte()<<24>>24)*.25,r.viewoffset.z=(e.readByte()<<24>>24)*.25),n&256&&(r.viewangles.x=e.readShort()*(360/65536),r.viewangles.y=e.readShort()*(360/65536),r.viewangles.z=e.readShort()*(360/65536)),n&512&&(r.kick_angles.x=(e.readByte()<<24>>24)*.25,r.kick_angles.y=(e.readByte()<<24>>24)*.25,r.kick_angles.z=(e.readByte()<<24>>24)*.25),n&4096&&(r.gun_index=e.readByte()),n&8192&&(r.gun_frame=e.readByte(),r.gun_offset.x=(e.readByte()<<24>>24)*.25,r.gun_offset.y=(e.readByte()<<24>>24)*.25,r.gun_offset.z=(e.readByte()<<24>>24)*.25,r.gun_angles.x=(e.readByte()<<24>>24)*.25,r.gun_angles.y=(e.readByte()<<24>>24)*.25,r.gun_angles.z=(e.readByte()<<24>>24)*.25),n&1024&&(r.blend[0]=e.readByte(),r.blend[1]=e.readByte(),r.blend[2]=e.readByte(),r.blend[3]=e.readByte()),n&2048&&(r.fov=e.readByte()),n&16384&&(r.rdflags=e.readByte()),n&32768&&(r.watertype=e.readByte());let i=e.readLong();for(let o=0;o<32;o++)i&1<<o&&(r.stats[o]=e.readShort());return r}};var zr=2023,vc=class{constructor(){this.protocolVersion=zr}translateCommand(e){return e}parseServerData(e){let r=e.readLong(),n=e.readLong(),i=e.readByte(),o=e.readByte(),a=e.readString(),s=e.readShort();if(s===-2){let l=e.readShort();for(let d=0;d<l;d++)e.readShort();s=0}else s===-1&&(s=-1);let c=e.readString();return{protocol:r,serverCount:n,spawnCount:n,attractLoop:0,gameDir:a,playerNum:s,levelName:c,tickRate:o,demoType:i}}parseEntityBits(e){let r=e.readByte();r&yr&&(r|=e.readByte()<<8),r&xr&&(r|=e.readByte()<<16),r&vr&&(r|=e.readByte()<<24);let n=0;r&Ii&&(n=e.readByte());let i;return r&jn?i=e.readShort():i=e.readByte(),{number:i,bits:r,bitsHigh:n}}parseDelta(e,r,n,i,o,a){Object.assign(r,e),r.origin={...e.origin},r.old_origin={...e.old_origin},r.angles={...e.angles},r.number=n,r.bits=i,r.bitsHigh=o,i&_t&&(r.modelindex=a.readByte()),i&wt&&(r.modelindex2=a.readByte()),i&Mt&&(r.modelindex3=a.readByte()),i&At&&(r.modelindex4=a.readByte()),i&yt&&(r.frame=a.readByte()),i&St&&(r.frame=a.readShort()),i&Ve&&i&Xe?r.skinnum=a.readLong():i&Ve?r.skinnum=a.readByte():i&Xe&&(r.skinnum=a.readShort()),i&He&&i&We?r.effects=a.readLong():i&He?r.effects=a.readByte():i&We&&(r.effects=a.readShort()),i&Ne&&i&Ge?r.renderfx=a.readLong():i&Ne?r.renderfx=a.readByte():i&Ge&&(r.renderfx=a.readShort()),i&ht&&(r.origin.x=a.readShort()*.125),i&mt&&(r.origin.y=a.readShort()*.125),i&xt&&(r.origin.z=a.readShort()*.125),i&vt&&(r.angles.x=a.readByte()*(360/256)),i&pt&&(r.angles.y=a.readByte()*(360/256)),i&gt&&(r.angles.z=a.readByte()*(360/256)),i&lr&&(r.old_origin.x=a.readShort()*.125,r.old_origin.y=a.readShort()*.125,r.old_origin.z=a.readShort()*.125),i&Et&&(r.sound=a.readByte()),i&bt?r.event=a.readByte():r.event=0,i&Lt&&(r.solid=a.readShort()),i&br&&(r.alpha=a.readByte()/255),i&_r&&(r.scale=a.readFloat()),i&Sr&&(r.instanceBits=a.readLong()),i&wr&&(r.loopVolume=a.readByte()/255),o&fn&&(r.loopAttenuation=a.readByte()/255),o&hn&&(r.owner=a.readShort()),o&mn&&(r.oldFrame=a.readShort())}parsePlayerState(e){let r=mr(),n=e.readShort();n&1&&(r.pm_type=e.readByte()),n&2&&(r.origin.x=e.readShort()*.125,r.origin.y=e.readShort()*.125,r.origin.z=e.readShort()*.125),n&4&&(r.velocity.x=e.readShort()*.125,r.velocity.y=e.readShort()*.125,r.velocity.z=e.readShort()*.125),n&8&&(r.pm_time=e.readByte()),n&16&&(r.pm_flags=e.readByte()),n&32&&(r.gravity=e.readShort()),n&64&&(r.delta_angles.x=e.readShort()*(180/32768),r.delta_angles.y=e.readShort()*(180/32768),r.delta_angles.z=e.readShort()*(180/32768)),n&128&&(r.viewoffset.x=(e.readByte()<<24>>24)*.25,r.viewoffset.y=(e.readByte()<<24>>24)*.25,r.viewoffset.z=(e.readByte()<<24>>24)*.25),n&256&&(r.viewangles.x=e.readShort()*(360/65536),r.viewangles.y=e.readShort()*(360/65536),r.viewangles.z=e.readShort()*(360/65536)),n&512&&(r.kick_angles.x=(e.readByte()<<24>>24)*.25,r.kick_angles.y=(e.readByte()<<24>>24)*.25,r.kick_angles.z=(e.readByte()<<24>>24)*.25),n&4096&&(r.gun_index=e.readByte()),n&8192&&(r.gun_frame=e.readByte(),r.gun_offset.x=(e.readByte()<<24>>24)*.25,r.gun_offset.y=(e.readByte()<<24>>24)*.25,r.gun_offset.z=(e.readByte()<<24>>24)*.25,r.gun_angles.x=(e.readByte()<<24>>24)*.25,r.gun_angles.y=(e.readByte()<<24>>24)*.25,r.gun_angles.z=(e.readByte()<<24>>24)*.25),n&1024&&(r.blend[0]=e.readByte(),r.blend[1]=e.readByte(),r.blend[2]=e.readByte(),r.blend[3]=e.readByte()),n&2048&&(r.fov=e.readByte()),n&16384&&(r.rdflags=e.readByte()),n&32768&&(r.watertype=e.readByte());let i=e.readLong();for(let o=0;o<32;o++)i&1<<o&&(r.stats[o]=e.readShort());return r}};var _c=class{constructor(e=0){this.protocolVersion=e}translateCommand(e){return e}parseServerData(e){let r=e.readLong(),n=e.readLong(),i=e.readByte(),o=e.readString(),a=e.readShort(),s=e.readString();return{protocol:r,serverCount:n,attractLoop:i,gameDir:o,playerNum:a,levelName:s}}parseEntityBits(e){let r=e.readByte();r&yr&&(r|=e.readByte()<<8),r&xr&&(r|=e.readByte()<<16),r&vr&&(r|=e.readByte()<<24);let n;return r&jn?n=e.readShort():n=e.readByte(),{number:n,bits:r,bitsHigh:0}}parseDelta(e,r,n,i,o,a){r.number=e.number,r.modelindex=e.modelindex,r.modelindex2=e.modelindex2,r.modelindex3=e.modelindex3,r.modelindex4=e.modelindex4,r.frame=e.frame,r.skinnum=e.skinnum,r.effects=e.effects,r.renderfx=e.renderfx,r.origin.x=e.origin.x,r.origin.y=e.origin.y,r.origin.z=e.origin.z,r.old_origin.x=e.origin.x,r.old_origin.y=e.origin.y,r.old_origin.z=e.origin.z,r.angles.x=e.angles.x,r.angles.y=e.angles.y,r.angles.z=e.angles.z,r.sound=e.sound,r.event=e.event,r.solid=e.solid,r.number=n,r.bits=i,i&_t&&(r.modelindex=a.readByte()),i&wt&&(r.modelindex2=a.readByte()),i&Mt&&(r.modelindex3=a.readByte()),i&At&&(r.modelindex4=a.readByte()),i&yt&&(r.frame=a.readByte()),i&St&&(r.frame=a.readShort()),i&Ve&&i&Xe?r.skinnum=a.readLong():i&Ve?r.skinnum=a.readByte():i&Xe&&(r.skinnum=a.readShort()),i&He&&i&We?r.effects=a.readLong():i&He?r.effects=a.readByte():i&We&&(r.effects=a.readShort()),i&Ne&&i&Ge?r.renderfx=a.readLong():i&Ne?r.renderfx=a.readByte():i&Ge&&(r.renderfx=a.readShort()),i&ht&&(r.origin.x=a.readShort()*.125),i&mt&&(r.origin.y=a.readShort()*.125),i&xt&&(r.origin.z=a.readShort()*.125),i&vt&&(r.angles.x=a.readByte()*(360/256)),i&pt&&(r.angles.y=a.readByte()*(360/256)),i&gt&&(r.angles.z=a.readByte()*(360/256)),i&lr&&(r.old_origin.x=a.readShort()*.125,r.old_origin.y=a.readShort()*.125,r.old_origin.z=a.readShort()*.125),i&Et&&(r.sound=a.readByte()),i&bt?r.event=a.readByte():r.event=0,i&Lt&&(r.solid=a.readShort())}parsePlayerState(e){let r=mr(),n=e.readShort();n&1&&(r.pm_type=e.readByte()),n&2&&(r.origin.x=e.readShort()*.125,r.origin.y=e.readShort()*.125,r.origin.z=e.readShort()*.125),n&4&&(r.velocity.x=e.readShort()*.125,r.velocity.y=e.readShort()*.125,r.velocity.z=e.readShort()*.125),n&8&&(r.pm_time=e.readByte()),n&16&&(r.pm_flags=e.readByte()),n&32&&(r.gravity=e.readShort()),n&64&&(r.delta_angles.x=e.readShort()*(180/32768),r.delta_angles.y=e.readShort()*(180/32768),r.delta_angles.z=e.readShort()*(180/32768)),n&128&&(r.viewoffset.x=(e.readByte()<<24>>24)*.25,r.viewoffset.y=(e.readByte()<<24>>24)*.25,r.viewoffset.z=(e.readByte()<<24>>24)*.25),n&256&&(r.viewangles.x=e.readShort()*(360/65536),r.viewangles.y=e.readShort()*(360/65536),r.viewangles.z=e.readShort()*(360/65536)),n&512&&(r.kick_angles.x=(e.readByte()<<24>>24)*.25,r.kick_angles.y=(e.readByte()<<24>>24)*.25,r.kick_angles.z=(e.readByte()<<24>>24)*.25),n&4096&&(r.gun_index=e.readByte()),n&8192&&(r.gun_frame=e.readByte(),r.gun_offset.x=(e.readByte()<<24>>24)*.25,r.gun_offset.y=(e.readByte()<<24>>24)*.25,r.gun_offset.z=(e.readByte()<<24>>24)*.25,r.gun_angles.x=(e.readByte()<<24>>24)*.25,r.gun_angles.y=(e.readByte()<<24>>24)*.25,r.gun_angles.z=(e.readByte()<<24>>24)*.25),n&1024&&(r.blend[0]=e.readByte(),r.blend[1]=e.readByte(),r.blend[2]=e.readByte(),r.blend[3]=e.readByte()),n&2048&&(r.fov=e.readByte()),n&16384&&(r.rdflags=e.readByte()),n&32768&&(r.watertype=e.readByte());let i=e.readLong();for(let o=0;o<32;o++)i&1<<o&&(r.stats[o]=e.readShort());return r}};var ws=class{constructor(){this.protocolVersion=0}translateCommand(e){return e===7?R.serverdata:e===12?R.serverdata:e===13?R.serverdata:e===R.stufftext?R.stufftext:R.bad}parseServerData(e){let r=e.readLong();if(r===zr){let n=e.readLong(),i=e.readByte(),o=e.readByte(),a=e.readString(),s=e.readShort();if(s===-2){let l=e.readShort();for(let d=0;d<l;d++)e.readShort();s=0}else s===-1&&(s=-1);let c=e.readString();return{protocol:r,serverCount:n,spawnCount:n,attractLoop:0,gameDir:a,playerNum:s,levelName:c,tickRate:o,demoType:i}}else{let n=e.readLong(),i=e.readByte(),o=e.readString(),a=e.readShort(),s=e.readString();return{protocol:r,serverCount:n,attractLoop:i,gameDir:o,playerNum:a,levelName:s}}}parseEntityBits(e){throw new Error("Bootstrap handler cannot parse entities")}parseDelta(e,r,n,i,o,a){throw new Error("Bootstrap handler cannot parse delta")}parsePlayerState(e){throw new Error("Bootstrap handler cannot parse player state")}};function ap(t){return t===0?new ws:t===zr?new vc:t===34?new xc:new _c(t)}var sp=1,jS=2,QS=128,ju=class extends Gn{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")}},dt=class t{constructor(e,r,n=!1){this.strictMode=!1;this.errorCount=0;this.isDemo=sp;e instanceof pn?this.stream=new ju(e):this.stream=e,this.handler=r,this.strictMode=n,this.protocolHandler=new ws}setProtocolVersion(e){this.protocolHandler.protocolVersion!==e&&(this.protocolHandler=ap(e))}getProtocolVersion(){return this.protocolHandler.protocolVersion}getErrorCount(){return this.errorCount}parseMessage(){for(;this.stream.hasBytes(1);){let e=this.stream.getReadPosition(),r=-1;try{if(r=this.stream.readByte(),r===-1)break;let n=r,i=this.protocolHandler.translateCommand(r);switch(i){case R.bad:if(n===0)return;let o=`Unknown server command: ${n} (translated: ${i}) at offset ${e} (Protocol: ${this.getProtocolVersion()})`;if(this.strictMode)throw new Error(o);console.warn(o),this.errorCount++;return;case R.nop:break;case R.disconnect:this.handler?.onDisconnect&&this.handler.onDisconnect();break;case R.reconnect:this.handler?.onReconnect&&this.handler.onReconnect();break;case R.print:this.parsePrint();break;case R.serverdata:this.parseServerData();break;case R.configstring:this.parseConfigString();break;case R.spawnbaseline:this.parseSpawnBaseline();break;case R.centerprint:this.parseCenterPrint();break;case R.download:this.parseDownload();break;case R.frame:this.parseFrame();break;case R.packetentities:this.parsePacketEntities(!1);break;case R.deltapacketentities:this.parsePacketEntities(!0);break;case R.playerinfo:this.parsePlayerState();break;case R.stufftext:this.parseStuffText();break;case R.layout:this.parseLayout();break;case R.inventory:this.parseInventory();break;case R.sound:this.parseSound();break;case R.muzzleflash:this.parseMuzzleFlash();break;case R.muzzleflash2:this.parseMuzzleFlash2();break;case R.temp_entity:this.parseTempEntity();break;case R.splitclient:this.parseSplitClient();break;case R.configblast:this.parseConfigBlast();break;case R.spawnbaselineblast:this.parseSpawnBaselineBlast();break;case R.level_restart:this.handler?.onLevelRestart&&this.handler.onLevelRestart();break;case R.damage:this.parseDamage();break;case R.locprint:this.parseLocPrint();break;case R.fog:this.parseFog();break;case R.waitingforplayers:this.parseWaitingForPlayers();break;case R.bot_chat:this.parseBotChat();break;case R.poi:this.parsePoi();break;case R.help_path:this.parseHelpPath();break;case R.muzzleflash3:this.parseMuzzleFlash3();break;case R.achievement:this.parseAchievement();break;default:let a=`Unknown server command: ${n} (translated: ${i}) at offset ${e}`;if(this.strictMode)throw new Error(a);console.warn(a),this.errorCount++;return}}catch(n){let i=n.message;if(i==="Buffer underflow"||i.includes("StreamingBuffer")){try{this.stream.setReadPosition(e)}catch(a){console.error("Failed to rollback stream position",a)}return}let o=`offset ${e}, cmd ${r}, protocol ${this.getProtocolVersion()}`;if(console.warn(`Error parsing command ${r} (${o}): ${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(e){e.x=this.stream.readShort()*.125,e.y=this.stream.readShort()*.125,e.z=this.stream.readShort()*.125}readDir(e){let r=this.stream.readByte();if(r>=sr.length)e.x=0,e.y=0,e.z=0;else{let n=sr[r];e.x=n[0],e.y=n[1],e.z=n[2]}}parsePrint(){let e=this.stream.readByte(),r=this.stream.readString();this.handler&&this.handler.onPrint(e,r)}parseStuffText(){let e=this.stream.readString();this.handler&&this.handler.onStuffText(e)}parseLayout(){let e=this.stream.readString();this.handler&&this.handler.onLayout(e)}parseCenterPrint(){let e=this.stream.readString();this.handler&&this.handler.onCenterPrint(e)}parseServerData(){let e=this.protocolHandler.parseServerData(this.stream);this.setProtocolVersion(e.protocol),this.handler&&this.handler.onServerData(e.protocol,e.serverCount,e.attractLoop,e.gameDir,e.playerNum,e.levelName,e.tickRate,e.demoType),e.protocol===zr?this.isDemo=e.demoType??sp:this.isDemo=e.attractLoop}parseConfigString(){let e=this.stream.readShort(),r=this.stream.readString();this.handler&&this.handler.onConfigString(e,r)}parseSplitClient(){let e=this.stream.readByte();this.handler?.onSplitClient&&this.handler.onSplitClient(e)}parseConfigBlast(){let e=this.stream.readShort(),r=this.stream.readShort(),n=this.stream.readData(e);try{let i=Zu.inflate(n),o=new pn(i.buffer);for(;o.hasMore();){let a=o.readUShort(),s=o.readString();this.handler&&this.handler.onConfigString(a,s)}}catch(i){console.error("svc_configblast error",i)}}parseSpawnBaselineBlast(){let e=this.stream.readShort(),r=this.stream.readShort(),n=this.stream.readData(e);try{let i=Zu.inflate(n),o=new pn(i.buffer),a=new t(o,this.handler,this.strictMode);for(a.setProtocolVersion(this.getProtocolVersion());o.hasMore();)a.parseSpawnBaseline()}catch(i){console.error("svc_spawnbaselineblast error",i)}}parseLocPrint(){let e=this.stream.readByte(),r=this.stream.readString(),n=this.stream.readByte(),i=[];for(let o=0;o<n;o++)i.push(this.stream.readString());this.handler?.onLocPrint&&this.handler.onLocPrint(e,r,i)}parseWaitingForPlayers(){let e=this.stream.readByte();this.handler?.onWaitingForPlayers&&this.handler.onWaitingForPlayers(e)}parseBotChat(){let e=this.stream.readString(),r=this.stream.readShort(),n=this.stream.readString();this.handler?.onBotChat&&this.handler.onBotChat(n)}parsePoi(){let e=this.stream.readShort(),r=this.stream.readShort(),n={x:0,y:0,z:0};this.readPos(n);let i=this.stream.readShort(),o=this.stream.readByte(),a=this.stream.readByte();this.handler?.onPoi&&this.handler.onPoi(a,n)}parseHelpPath(){let e=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 e=this.stream.readString();this.handler?.onAchievement&&this.handler.onAchievement(e)}parseDownload(){let e=this.stream.readShort(),r=this.stream.readByte(),n;e>0&&(n=this.stream.readData(e)),this.handler&&this.handler.onDownload(e,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 e=this.stream.readByte(),r=this.stream.readByte(),n,i,o,a,s;if(e&1&&(n=this.stream.readByte()),e&2&&(i=this.stream.readByte()),e&16&&(o=this.stream.readByte()),e&8&&(a=this.stream.readShort()),e&4){let c={x:0,y:0,z:0};this.readPos(c),s=c}this.handler&&this.handler.onSound(e,r,n,i,o,a,s)}parseMuzzleFlash(){let e=this.stream.readShort(),r=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash(e,r)}parseMuzzleFlash2(){let e=this.stream.readShort(),r=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash2(e,r)}parseMuzzleFlash3(){let e=this.stream.readShort(),r=this.stream.readShort();this.handler?.onMuzzleFlash3&&this.handler.onMuzzleFlash3(e,r)}parseFog(){let e=this.stream.readByte();if(e&128){let n=this.stream.readByte();e|=n<<8}let r={};e&1&&(r.density=this.stream.readFloat(),r.skyfactor=this.stream.readByte()),e&2&&(r.red=this.stream.readByte()),e&4&&(r.green=this.stream.readByte()),e&8&&(r.blue=this.stream.readByte()),e&16&&(r.time=this.stream.readShort()),e&32&&(r.hf_falloff=this.stream.readFloat()),e&64&&(r.hf_density=this.stream.readFloat()),e&256&&(r.hf_start_r=this.stream.readByte()),e&512&&(r.hf_start_g=this.stream.readByte()),e&1024&&(r.hf_start_b=this.stream.readByte()),e&2048&&(r.hf_start_dist=this.stream.readLong()),e&4096&&(r.hf_end_r=this.stream.readByte()),e&8192&&(r.hf_end_g=this.stream.readByte()),e&16384&&(r.hf_end_b=this.stream.readByte()),e&32768&&(r.hf_end_dist=this.stream.readLong()),this.handler?.onFog&&this.handler.onFog(r)}parseDamage(){let e=this.stream.readByte(),r=[];for(let n=0;n<e;n++){let i=this.stream.readByte(),o={x:0,y:0,z:0};this.readDir(o);let a=i&31,s=(i&32)!==0,c=(i&64)!==0,l=(i&128)!==0;r.push({damage:a,health:s,armor:c,power:l,dir:o})}this.handler?.onDamage&&this.handler.onDamage(r)}parseTempEntity(){let e=this.stream.readByte(),r={x:0,y:0,z:0},n={x:0,y:0,z:0},i={x:0,y:0,z:0},o,a,s,c,l;switch(e){case z.EXPLOSION1:case z.EXPLOSION2:case z.ROCKET_EXPLOSION:case z.GRENADE_EXPLOSION:case z.ROCKET_EXPLOSION_WATER:case z.GRENADE_EXPLOSION_WATER:case z.BFG_EXPLOSION:case z.BFG_BIGEXPLOSION:case z.BOSSTPORT:case z.PLASMA_EXPLOSION:case z.PLAIN_EXPLOSION:case z.CHAINFIST_SMOKE:case z.TRACKER_EXPLOSION:case z.TELEPORT_EFFECT:case z.DBALL_GOAL:case z.NUKEBLAST:case z.WIDOWSPLASH:case z.EXPLOSION1_BIG:case z.EXPLOSION1_NP:this.readPos(r);break;case z.GUNSHOT:case z.BLOOD:case z.BLASTER:case z.SHOTGUN:case z.SPARKS:case z.BULLET_SPARKS:case z.SCREEN_SPARKS:case z.SHIELD_SPARKS:case z.BLASTER2:case z.FLECHETTE:case z.MOREBLOOD:case z.ELECTRIC_SPARKS:case z.HEATBEAM_SPARKS:case z.HEATBEAM_STEAM:this.readPos(r),this.readDir(i);break;case z.SPLASH:case z.LASER_SPARKS:case z.WELDING_SPARKS:case z.TUNNEL_SPARKS:o=this.stream.readByte(),this.readPos(r),this.readDir(i),a=this.stream.readByte();break;case z.BLUEHYPERBLASTER:this.getProtocolVersion()>=32?(this.readPos(r),this.readPos(n)):(this.readPos(r),this.readDir(i));break;case z.GREENBLOOD:this.getProtocolVersion()>=32?(this.readPos(r),this.readDir(i)):(this.readPos(r),this.readPos(n));break;case z.RAILTRAIL:case z.BUBBLETRAIL:case z.BFG_LASER:case z.DEBUGTRAIL:case z.BUBBLETRAIL2:this.readPos(r),this.readPos(n);break;case z.PARASITE_ATTACK:case z.MEDIC_CABLE_ATTACK:this.stream.readShort(),this.readPos(r),this.readPos(n);break;case z.GRAPPLE_CABLE:s=this.stream.readShort(),this.readPos(r),this.readPos(n),this.readPos(i);break;case z.LIGHTNING:c=this.stream.readShort(),l=this.stream.readShort(),this.readPos(r),this.readPos(n);break;case z.FLASHLIGHT:this.readPos(r),s=this.stream.readShort();break;case z.FORCEWALL:this.readPos(r),this.readPos(n),a=this.stream.readByte();break;case z.STEAM:let d=this.stream.readShort();o=this.stream.readByte(),this.readPos(r),this.readDir(i),a=this.stream.readByte(),this.stream.readShort(),d!==-1&&this.stream.readLong();break;case z.WIDOWBEAMOUT:this.stream.readShort();case z.HEATBEAM:case z.MONSTER_HEATBEAM:s=this.stream.readShort(),this.readPos(r),this.readPos(n),this.readDir(i);break}this.handler&&this.handler.onTempEntity(e,r,n,i,o,a,s,c,l)}parseSpawnBaseline(){let e=this.protocolHandler.parseEntityBits(this.stream),r=Dr();this.protocolHandler.parseDelta(Dr(),r,e.number,e.bits,e.bitsHigh,this.stream),this.handler&&this.handler.onSpawnBaseline(r)}parseFrame(){let e=this.stream.readLong(),r=this.stream.readLong(),n=0;this.getProtocolVersion()!==26&&this.getProtocolVersion()!==25&&(n=this.stream.readByte());let i=this.stream.readByte(),o=this.stream.readData(i),a=this.stream.readByte();if(a=this.protocolHandler.translateCommand(a),a!==R.playerinfo){if(this.strictMode)throw new Error(`Expected svc_playerinfo after svc_frame, got ${a}`);return}let s=this.parsePlayerState(),c=this.stream.readByte();if(c=this.protocolHandler.translateCommand(c),c!==R.packetentities&&c!==R.deltapacketentities){if(this.strictMode)throw new Error(`Expected svc_packetentities after svc_playerinfo, got ${c}`);return}let l=this.collectPacketEntities();if(this.isDemo===QS){let d=this.stream.readByte();for(let f=0;f<d;f++)this.stream.readByte()}this.isDemo===jS&&this.stream.readLong(),this.handler&&this.handler.onFrame({serverFrame:e,deltaFrame:r,surpressCount:n,areaBytes:i,areaBits:o,playerState:s,packetEntities:{delta:!0,entities:l}})}parsePlayerState(){return this.protocolHandler.parsePlayerState(this.stream)}parsePacketEntities(e){let r=this.collectPacketEntities();this.handler&&this.handler.onFrame({serverFrame:0,deltaFrame:0,surpressCount:0,areaBytes:0,areaBits:new Uint8Array,playerState:mr(),packetEntities:{delta:e,entities:r}})}collectPacketEntities(){let e=[];for(;;){let r=this.protocolHandler.parseEntityBits(this.stream);if(r.bits&$o){if(r.number===0)break;continue}let n=Dr();if(r.number===0)break;this.protocolHandler.parseDelta(Dr(),n,r.number,r.bits,r.bitsHigh,this.stream),e.push(n)}return e}};var Qu=(d=>(d.WeaponFire="weapon_fire",d.DamageDealt="damage_dealt",d.DamageReceived="damage_received",d.Pickup="pickup",d.Death="death",d.Kill="kill",d.Spawn="spawn",d.PlayerInfo="player_info",d.Chat="chat",d.Objective="objective",d))(Qu||{});var Fo=class{constructor(e){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=e}analyze(){let e=new hr(this.buffer),r=-1,n=0,i=.1,o=0,a={onServerData:(s,c,l,d,f,u,h,m)=>{o=s,this.header={protocolVersion:s,gameDir:d,levelName:u,playerNum:f,serverCount:c,spawnCount:c,tickRate:h,demoType:m},h&&h>0&&(i=1/h)},onConfigString:(s,c)=>{this.configStrings.set(s,c),s===0&&this.parseServerInfo(c)},onSpawnBaseline:s=>{},onFrame:s=>{let c=new Set;if(s.packetEntities&&s.packetEntities.entities)for(let l of s.packetEntities.entities)c.add(l.number),this.activeEntities.has(l.number)||this.recordEvent({type:"spawn",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,s.playerState&&this.header},onPrint:(s,c)=>{let l=c.replace(/\n/g," ").trim();l.includes("died")||l.includes("killed")||l.includes("suicide")?(this.summary.totalDeaths++,this.recordEvent({type:"death",frame:r,time:n,description:l})):l.startsWith("You got the ")?this.recordEvent({type:"pickup",frame:r,time:n,description:l}):(s===3||s===2)&&this.recordEvent({type:"chat",frame:r,time:n,description:l,data:{level:s}})},onCenterPrint:s=>{this.recordEvent({type:"objective",frame:r,time:n,description:s.trim()})},onStuffText:()=>{},onSound:()=>{},onTempEntity:()=>{},onLayout:()=>{},onInventory:()=>{},onMuzzleFlash:(s,c)=>{this.handleWeaponFire(s,c,r,n)},onMuzzleFlash2:(s,c)=>{this.handleWeaponFire(s,c,r,n)},onMuzzleFlash3:(s,c)=>{this.handleWeaponFire(s,c,r,n)},onDisconnect:()=>{},onReconnect:()=>{},onDownload:()=>{},onDamage:s=>{for(let c of s)if(this.recordEvent({type:"damage_received",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(;e.hasMore();){let s=e.readNextBlock();if(!s)break;r++,n=r*i;let c=new dt(s.data,a);c.setProtocolVersion(o),c.parseMessage(),o=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(e,r,n,i){this.recordEvent({type:"weapon_fire",frame:n,time:i,entityId:e,value:r,description:`Weapon ${r} fired by ${e}`});let o=this.summary.weaponUsage.get(r)||0;this.summary.weaponUsage.set(r,o+1);let a=this.getOrCreateWeaponStat(e,r);a.shotsFired++}recordEvent(e){this.events.push(e)}parseServerInfo(e){let r=e.split("\\");for(let n=1;n<r.length;n+=2)n+1<r.length&&(this.serverInfo[r[n]]=r[n+1])}getOrCreatePlayerStats(e){let r=this.playerStats.get(e);return r||(r={kills:0,deaths:0,damageDealt:0,damageReceived:0,suicides:0},this.playerStats.set(e,r)),r}getOrCreateWeaponStat(e,r){let n=this.weaponStats.get(e);n||(n=[],this.weaponStats.set(e,n));let i=n.find(o=>o.weaponId===r);return i||(i={weaponId:r,shotsFired:0,hits:0,kills:0},n.push(i)),i}};var Ju=(i=>(i[i.FirstPerson=0]="FirstPerson",i[i.ThirdPerson=1]="ThirdPerson",i[i.Free=2]="Free",i[i.Follow=3]="Follow",i))(Ju||{});var Sc=(i=>(i[i.Stopped=0]="Stopped",i[i.Playing=1]="Playing",i[i.Paused=2]="Paused",i[i.Finished=3]="Finished",i))(Sc||{}),JS=()=>({onServerData:()=>{},onConfigString:()=>{},onSpawnBaseline:()=>{},onFrame:()=>{},onCenterPrint:()=>{},onStuffText:()=>{},onPrint:()=>{},onSound:()=>{},onTempEntity:()=>{},onLayout:()=>{},onInventory:()=>{},onMuzzleFlash:()=>{},onMuzzleFlash2:()=>{},onDisconnect:()=>{},onReconnect:()=>{},onDownload:()=>{}}),Ms=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(e){this.handler=e}setCallbacks(e){this.callbacks=e}loadDemo(e){this.buffer=e,this.reader=new hr(e),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(e){this.state!==e&&(this.state=e,this.callbacks?.onPlaybackStateChange&&this.callbacks.onPlaybackStateChange(e))}setFrameDuration(e){this.frameDuration=e}setSpeed(e){this.playbackSpeed=Math.max(.1,Math.min(e,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(e){if(!(this.state!==1||!this.reader))for(this.accumulatedTime+=e*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(e){let r=this.timeToFrame(e);this.seek(r)}seekToFrame(e){this.seek(e)}frameToTime(e){return e*this.frameDuration/1e3}timeToFrame(e){return Math.floor(e*1e3/this.frameDuration)}playFrom(e){if(e.type==="frame")this.seek(e.frame);else if(e.type==="time")this.seekToTime(e.seconds);else throw new Error(`Invalid offset type: ${e.type}`);this.play()}playRange(e,r){let n=e.type==="frame"?e.frame:this.timeToFrame(e.seconds),i=r.type==="frame"?r.frame:this.timeToFrame(r.seconds),o=this.getTotalFrames(),a=Math.max(0,o-1);if(n<0)throw new Error(`Invalid start offset: ${n}`);if(i<n)throw new Error(`End offset (${i}) cannot be before start offset (${n})`);this.playFrom(e);let s=this.callbacks?.onFrameUpdate,c={...this.callbacks,onFrameUpdate:l=>{if(s&&s(l),this.currentFrameIndex>=i){this.pause();let d=this.callbacks?.onPlaybackComplete;this.callbacks===c&&this.setCallbacks({...this.callbacks,onFrameUpdate:s}),d&&d()}}};this.setCallbacks(c)}seek(e){if(!this.reader)return;let r=this.getTotalFrames();if(r>0&&e>=r&&(e=r-1),e<0&&(e=0),e===this.currentFrameIndex+1){this.processNextFrame(),this.callbacks?.onSeekComplete&&this.callbacks.onSeekComplete();return}if(e===this.currentFrameIndex){this.callbacks?.onSeekComplete&&this.callbacks.onSeekComplete();return}let n=-1,i=null;if(e>this.currentFrameIndex&&this.currentFrameIndex!==-1&&(n=this.currentFrameIndex),this.callbacks?.onRestoreSnapshot)for(let[o,a]of this.snapshots)o<=e&&o>n&&(n=o,i=a);for(n===-1&&this.currentFrameIndex>e?(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<e&&(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 e=this.reader.readNextBlock();if(!e)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||JS(),onFrame:i=>{this.lastFrameData=i,this.handler?.onFrame&&this.handler.onFrame(i),this.callbacks?.onFrameUpdate&&this.callbacks.onFrameUpdate(i)}},n=new dt(e.data,r);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/1e3:(this.currentFrameIndex*this.frameDuration+this.accumulatedTime)/1e3}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(e){if(e===this.currentFrameIndex&&this.lastFrameData)return this.lastFrameData;let r=this.state;return this.pause(),this.seek(e),r===1&&this.play(),this.lastFrameData}getFramePlayerState(e){if(e===this.currentFrameIndex&&this.handler?.getPlayerState){let n=this.handler.getPlayerState();if(n)return n}let r=this.getFrameData(e);return r?r.playerState:null}getFrameEntities(e){if(e===this.currentFrameIndex&&this.handler?.getEntities){let r=this.handler.getEntities();if(r)return Array.from(r.values())}if(this.seek(e),this.handler?.getEntities){let r=this.handler.getEntities();return r?Array.from(r.values()):[]}return[]}compareFrames(e,r){let n=this.getFramePlayerState(e),i=this.getFrameEntities(e),o=new Map;i.forEach(d=>o.set(d.number,d));let a=this.getFramePlayerState(r),s=this.getFrameEntities(r),c=new Map;s.forEach(d=>c.set(d.number,d));let l={frameA:e,frameB:r,playerStateDiff:{origin:null,viewangles:null,health:null,ammo:null},entityDiffs:{added:[],removed:[],moved:[]}};n&&a&&((n.origin.x!==a.origin.x||n.origin.y!==a.origin.y||n.origin.z!==a.origin.z)&&(l.playerStateDiff.origin={x:a.origin.x-n.origin.x,y:a.origin.y-n.origin.y,z:a.origin.z-n.origin.z}),n.stats[1]!==a.stats[1]&&(l.playerStateDiff.health=a.stats[1]-n.stats[1]),n.stats[2]!==a.stats[2]&&(l.playerStateDiff.ammo=a.stats[2]-n.stats[2]));for(let[d,f]of c){let u=o.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 o)c.has(d)||l.entityDiffs.removed.push(d);return l}getEntityTrajectory(e,r,n){let i=[],o=this.getCurrentFrame();for(this.seek(r);this.getCurrentFrame()<=n&&this.state!==3;){let a=null;if(e===-1){let s=this.getFramePlayerState(this.getCurrentFrame());s&&(a={...s.origin})}else if(this.handler?.getEntities){let s=this.handler.getEntities().get(e);s&&(a={...s.origin})}if(a&&i.push(a),this.getCurrentFrame()===n)break;this.stepForward()}return this.seek(o),i}getEvents(){return this.ensureAnalysis(),this.cachedEvents||[]}getDemoEvents(){return this.getEvents()}filterEvents(e,r){return this.getDemoEvents().filter(i=>!(i.type!==e||r!==void 0&&i.entityId!==r))}getEventSummary(){return this.ensureAnalysis(),this.cachedSummary||{totalKills:0,totalDeaths:0,damageDealt:0,damageReceived:0,weaponUsage:new Map}}getMetadata(){let e=this.getDemoHeader();if(!e)return null;let r=this.getDemoServerInfo(),n="Unknown";return this.cachedConfigStrings,{mapName:e.levelName,playerName:n,serverName:r.hostname,demoVersion:e.protocolVersion,tickRate:e.tickRate||10}}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(e){return this.ensureAnalysis(),this.cachedPlayerStats?.get(e)||null}getWeaponStatistics(e){return this.ensureAnalysis(),this.cachedWeaponStats?.get(e)||null}ensureAnalysis(){if(!this.cachedEvents&&this.buffer){let r=new Fo(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(e){this.cameraMode=e}getCameraMode(){return this.cameraMode}setThirdPersonDistance(e){this.thirdPersonDistance=e}setThirdPersonOffset(e){this.thirdPersonOffset=e}async playWithTracking(e,r={}){if(this.tracker=e,e.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 o=0;for(;o<n;){if(!this.processNextFrame()){this.transitionState(0);let a=e.stopTracking();return this.tracker=null,this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),a}o++}return await new Promise(a=>setTimeout(a,0)),i()};return await i()}catch(n){throw this.transitionState(0),e.stopTracking(),this.tracker=null,n}else return new Promise((n,i)=>{let o=this.callbacks?.onPlaybackComplete,a=this.callbacks?.onPlaybackError,s=()=>{this.setCallbacks({...this.callbacks,onPlaybackComplete:o,onPlaybackError:a}),this.tracker=null};this.setCallbacks({...this.callbacks,onPlaybackComplete:()=>{let c=e.stopTracking();o&&o(),s(),n(c)},onPlaybackError:c=>{e.stopTracking(),a&&a(c),s(),i(c)}}),this.play()})}async playRangeWithTracking(e,r,n,i={}){this.tracker=n,n.startTracking();let o=e.type==="frame"?e.frame:this.timeToFrame(e.seconds),a=r.type==="frame"?r.frame:this.timeToFrame(r.seconds);if(i.fastForward)try{this.playFrom(e),this.transitionState(1);let s=100,c=async()=>{if(this.state!==1)throw new Error("Playback stopped unexpectedly during fast forward");let l=0;for(;l<s;){if(this.currentFrameIndex>=a||!this.processNextFrame()){this.transitionState(0);let d=n.stopTracking();return this.tracker=null,this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),d}l++}return await new Promise(d=>setTimeout(d,0)),c()};return await c()}catch(s){throw this.transitionState(0),n.stopTracking(),this.tracker=null,s}else return new Promise((s,c)=>{let l=this.callbacks?.onPlaybackComplete,d=this.callbacks?.onPlaybackError,f=()=>{this.setCallbacks({...this.callbacks,onPlaybackComplete:l,onPlaybackError:d}),this.tracker=null};this.setCallbacks({...this.callbacks,onPlaybackComplete:()=>{let u=n.stopTracking();l&&l(),f(),s(u)},onPlaybackError:u=>{n.stopTracking(),d&&d(u),f(),c(u)}}),this.playRange(e,r)})}};var As=class{constructor(){this.isRecording=!1;this.startTime=0;this.frameCount=0;this.filename=null;this.lastMessageSize=-1;this.messageBuffer=new Qn(1024*1024)}startRecording(e,r=0){this.isRecording||(this.isRecording=!0,this.filename=e,this.startTime=r,this.frameCount=0,this.messageBuffer.reset(),console.log(`DemoRecorder: Started recording to ${e}`))}recordMessage(e){if(this.isRecording){this.messageBuffer.writeLong(e.byteLength);for(let r=0;r<e.length;r++)this.messageBuffer.writeByte(e[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 wc=class{constructor(e,r=34){this.writer=e||new Qn(new Uint8Array(64*1024)),this.protocol=r}getData(){return this.writer.getData()}getOpcode(e){if(this.protocol===34)switch(e){case R.serverdata:return 13;case R.frame:return 5;case R.playerinfo:return 17;case R.packetentities:return 18;case R.deltapacketentities:return 19;case R.print:return 11;case R.centerprint:return 16;case R.stufftext:return 12;case R.sound:return 10;case R.temp_entity:return 9;case R.configstring:return 14;case R.spawnbaseline:return 15;case R.layout:return 7;case R.inventory:return 6;case R.muzzleflash:return 8;case R.muzzleflash2:return 20}return e}writeCommand(e,r){let n=r??this.protocol;n===34||n===0?this.writer.writeByte(this.getOpcode(e)):this.writer.writeByte(e)}writeServerData(e,r,n,i,o,a){this.writeCommand(R.serverdata),this.writer.writeLong(e),this.writer.writeLong(r),this.writer.writeByte(n),this.writer.writeString(i),this.writer.writeShort(o),this.writer.writeString(a)}writeConfigString(e,r){this.writeCommand(R.configstring),this.writer.writeShort(e),this.writer.writeString(r)}writeStuffText(e){this.writeCommand(R.stufftext),this.writer.writeString(e)}writeCenterPrint(e){this.writeCommand(R.centerprint),this.writer.writeString(e)}writePrint(e,r){this.writeCommand(R.print),this.writer.writeByte(e),this.writer.writeString(r)}writeLayout(e){this.writeCommand(R.layout),this.writer.writeString(e)}writeInventory(e){this.writeCommand(R.inventory);for(let r of e)this.writer.writeShort(r);for(let r=e.length;r<256;r++)this.writer.writeShort(0)}writeMuzzleFlash(e,r){this.writeCommand(R.muzzleflash),this.writer.writeShort(e),this.writer.writeByte(r)}writeMuzzleFlash2(e,r){this.writeCommand(R.muzzleflash2),this.writer.writeShort(e),this.writer.writeByte(r)}writeSound(e,r,n,i,o,a,s,c){this.writeCommand(R.sound),this.writer.writeByte(e),this.writer.writeByte(r),e&1&&this.writer.writeByte(n),e&2&&this.writer.writeByte(i),e&16&&this.writer.writeByte(o),e&8&&this.writer.writeShort(a),e&4&&(this.writer.writeCoord(s.x),this.writer.writeCoord(s.y),this.writer.writeCoord(s.z))}writeTempEntity(e,r,n,i,o,a,s,c,l){this.writeCommand(R.temp_entity),this.writer.writeByte(e),r&&this.writer.writePos(r)}writePlayerState(e){this.writeCommand(R.playerinfo);let r=0;e.pm_type!==0&&(r|=1),(e.origin.x!==0||e.origin.y!==0||e.origin.z!==0)&&(r|=2),(e.velocity.x!==0||e.velocity.y!==0||e.velocity.z!==0)&&(r|=4),e.pm_time!==0&&(r|=8),e.pm_flags!==0&&(r|=16),e.gravity!==0&&(r|=32),(e.delta_angles.x!==0||e.delta_angles.y!==0||e.delta_angles.z!==0)&&(r|=64),(e.viewoffset.x!==0||e.viewoffset.y!==0||e.viewoffset.z!==0)&&(r|=128),(e.viewangles.x!==0||e.viewangles.y!==0||e.viewangles.z!==0)&&(r|=256),(e.kick_angles.x!==0||e.kick_angles.y!==0||e.kick_angles.z!==0)&&(r|=512),e.gun_index!==0&&(r|=4096),(e.gun_frame!==0||e.gun_offset.x!==0||e.gun_offset.y!==0||e.gun_offset.z!==0||e.gun_angles.x!==0||e.gun_angles.y!==0||e.gun_angles.z!==0)&&(r|=8192),(e.blend[0]!==0||e.blend[1]!==0||e.blend[2]!==0||e.blend[3]!==0)&&(r|=1024),e.fov!==0&&(r|=2048),e.rdflags!==0&&(r|=16384),e.watertype!==0&&(r|=32768),this.writer.writeShort(r),r&1&&this.writer.writeByte(e.pm_type),r&2&&(this.writer.writeShort(e.origin.x/.125),this.writer.writeShort(e.origin.y/.125),this.writer.writeShort(e.origin.z/.125)),r&4&&(this.writer.writeShort(e.velocity.x/.125),this.writer.writeShort(e.velocity.y/.125),this.writer.writeShort(e.velocity.z/.125)),r&8&&this.writer.writeByte(e.pm_time),r&16&&this.writer.writeByte(e.pm_flags),r&32&&this.writer.writeShort(e.gravity),r&64&&(this.writer.writeShort(e.delta_angles.x/(180/32768)),this.writer.writeShort(e.delta_angles.y/(180/32768)),this.writer.writeShort(e.delta_angles.z/(180/32768))),r&128&&(this.writer.writeByte(e.viewoffset.x/.25),this.writer.writeByte(e.viewoffset.y/.25),this.writer.writeByte(e.viewoffset.z/.25)),r&256&&(this.writer.writeShort(e.viewangles.x/(360/65536)),this.writer.writeShort(e.viewangles.y/(360/65536)),this.writer.writeShort(e.viewangles.z/(360/65536))),r&512&&(this.writer.writeByte(e.kick_angles.x/.25),this.writer.writeByte(e.kick_angles.y/.25),this.writer.writeByte(e.kick_angles.z/.25)),r&4096&&this.writer.writeByte(e.gun_index),r&8192&&(this.writer.writeByte(e.gun_frame),this.writer.writeByte(e.gun_offset.x/.25),this.writer.writeByte(e.gun_offset.y/.25),this.writer.writeByte(e.gun_offset.z/.25),this.writer.writeByte(e.gun_angles.x/.25),this.writer.writeByte(e.gun_angles.y/.25),this.writer.writeByte(e.gun_angles.z/.25)),r&1024&&(this.writer.writeByte(e.blend[0]),this.writer.writeByte(e.blend[1]),this.writer.writeByte(e.blend[2]),this.writer.writeByte(e.blend[3])),r&2048&&this.writer.writeByte(e.fov),r&16384&&this.writer.writeByte(e.rdflags),r&32768&&this.writer.writeByte(e.watertype);let n=0;for(let i=0;i<32;i++)e.stats[i]!==0&&(n|=1<<i);this.writer.writeLong(n);for(let i=0;i<32;i++)n&1<<i&&this.writer.writeShort(e.stats[i])}writePacketEntities(e,r,n){this.writeCommand(r?R.deltapacketentities:R.packetentities);for(let i of e)this.writeDeltaEntity(Dr(),i,!0);this.writer.writeShort(0)}writeFrame(e,r){this.writeCommand(R.frame),this.writer.writeLong(e.serverFrame),this.writer.writeLong(e.deltaFrame),r!==26&&r!==25&&this.writer.writeByte(e.surpressCount),this.writer.writeByte(e.areaBytes),this.writer.writeBytes(e.areaBits),this.writePlayerState(e.playerState),this.writePacketEntities(e.packetEntities.entities,e.packetEntities.delta,r)}writeDeltaEntity(e,r,n){let i=0,o=0;(r.modelindex!==e.modelindex||n)&&(i|=_t),(r.modelindex2!==e.modelindex2||n)&&(i|=wt),(r.modelindex3!==e.modelindex3||n)&&(i|=Mt),(r.modelindex4!==e.modelindex4||n)&&(i|=At),(r.frame!==e.frame||n)&&(r.frame>=256?i|=St:i|=yt),(r.skinnum!==e.skinnum||n)&&(r.skinnum>=256?i|=Xe:i|=Ve),(r.effects!==e.effects||n)&&(r.effects>=256?i|=We:i|=He),(r.renderfx!==e.renderfx||n)&&(r.renderfx>=256?i|=Ge:i|=Ne),(r.origin.x!==e.origin.x||n)&&r.origin.x!==0&&(i|=ht),(r.origin.y!==e.origin.y||n)&&r.origin.y!==0&&(i|=mt),(r.origin.z!==e.origin.z||n)&&r.origin.z!==0&&(i|=xt),(r.angles.x!==e.angles.x||n)&&r.angles.x!==0&&(i|=vt),(r.angles.y!==e.angles.y||n)&&r.angles.y!==0&&(i|=pt),(r.angles.z!==e.angles.z||n)&&r.angles.z!==0&&(i|=gt),(r.sound!==e.sound||n)&&(i|=Et),(r.event!==e.event||n)&&(i|=bt),(r.solid!==e.solid||n)&&(i|=Lt),this.protocol!==34&&((r.alpha!==e.alpha||n)&&(i|=br),(r.scale!==e.scale||n)&&(i|=_r),(r.instanceBits!==e.instanceBits||n)&&(i|=Sr),(r.loopVolume!==e.loopVolume||n)&&(i|=wr),(r.loopAttenuation!==e.loopAttenuation||n)&&(o|=fn),(r.owner!==e.owner||n)&&(o|=hn),(r.oldFrame!==e.oldFrame||n)&&(o|=mn)),o>0&&(i|=Ii),i&4278190080&&(i|=vr),i&4294901760&&(i|=xr),i&4294967040&&(i|=yr),this.writer.writeByte(i&255),i&yr&&this.writer.writeByte(i>>8&255),i&xr&&this.writer.writeByte(i>>16&255),i&vr&&this.writer.writeByte(i>>24&255),i&Ii&&this.writer.writeByte(o&255),r.number>=256?this.writer.writeShort(r.number):this.writer.writeByte(r.number),i&_t&&this.writer.writeByte(r.modelindex),i&wt&&this.writer.writeByte(r.modelindex2),i&Mt&&this.writer.writeByte(r.modelindex3),i&At&&this.writer.writeByte(r.modelindex4),i&yt&&this.writer.writeByte(r.frame),i&St&&this.writer.writeShort(r.frame),i&Ve&&this.writer.writeByte(r.skinnum),i&Xe&&this.writer.writeShort(r.skinnum),i&He&&this.writer.writeByte(r.effects),i&We&&this.writer.writeShort(r.effects),i&Ne&&this.writer.writeByte(r.renderfx),i&Ge&&this.writer.writeShort(r.renderfx),i&ht&&this.writer.writeCoord(r.origin.x),i&mt&&this.writer.writeCoord(r.origin.y),i&xt&&this.writer.writeCoord(r.origin.z),i&vt&&this.writer.writeAngle(r.angles.x),i&pt&&this.writer.writeAngle(r.angles.y),i&gt&&this.writer.writeAngle(r.angles.z),i&Et&&this.writer.writeByte(r.sound??0),i&bt&&this.writer.writeByte(r.event??0),i&Lt&&this.writer.writeShort(r.solid),this.protocol!==34&&(i&br&&this.writer.writeByte(r.alpha*255),i&_r&&this.writer.writeFloat(r.scale),i&Sr&&this.writer.writeLong(r.instanceBits),i&wr&&this.writer.writeByte(r.loopVolume*255),o&fn&&this.writer.writeByte(r.loopAttenuation*255),o&hn&&this.writer.writeShort(r.owner),o&mn&&this.writer.writeShort(r.oldFrame))}};var Mc=class{static validate(e,r){if(r&&!r.toLowerCase().endsWith(".dm2"))return{valid:!1,error:"Invalid file extension (expected .dm2)"};if(e.byteLength<5)return{valid:!1,error:"File too small to be a valid demo"};let n=new DataView(e),i=n.getInt32(0,!0);if(i<=0||i>e.byteLength-4)return{valid:!1,error:`Invalid first block length: ${i}`};let o=n.getUint8(4);if(o!==R.serverdata)return{valid:!1,error:`First command is not svc_serverdata (expected ${R.serverdata}, got ${o})`};let a=-1;return i>=5&&(a=n.getInt32(5,!0)),{valid:!0,version:a}}};var Ac=class{constructor(e){this.frames=[];this.configStrings=new Map;this.baselines=new Map;this.currentEntities=new Map;if(e){let r=new Gn(e.byteLength);r.append(new Uint8Array(e)),r.setReadPosition(0),this.parser=new dt(r,this)}else this.parser=new dt(new Gn,this)}extractClip(e,r,n,i){let o=new hr(e.buffer),a=[],s=0,c=r.frame??-1,l=n.frame??Number.MAX_SAFE_INTEGER,d=0,f=0;for(;o.nextBlock();){let p=o.getBlock().data,y=!1,v=-1,x=!1,b={onServerData:S=>{d=S,y=!0,x=!0},onConfigString:()=>{y=!0,x=!0},onSpawnBaseline:()=>{y=!0,x=!0},onFrame:S=>{v=S.serverFrame,x=!0,v>=c&&v<=l&&(y=!0)},onCenterPrint:()=>{x=!0},onStuffText:()=>{x=!0},onPrint:()=>{x=!0},onSound:()=>{x=!0},onTempEntity:()=>{x=!0},onLayout:()=>{x=!0},onInventory:()=>{x=!0},onMuzzleFlash:()=>{x=!0},onMuzzleFlash2:()=>{x=!0},onDisconnect:()=>{x=!0},onReconnect:()=>{x=!0},onDownload:()=>{x=!0}},_=new Gn(p.getLength());_.append(p.readData(p.getLength())),_.setReadPosition(0),p.seek(0);let w=new dt(_,b);d>0&&w.setProtocolVersion(d);try{w.parseMessage()}catch{}if(x||f>=c&&f<=l&&(y=!0),y){let S=new Uint8Array(4);new DataView(S.buffer).setUint32(0,p.getLength(),!0),a.push(S);let T=p.readData(p.getLength());a.push(T),s+=4+T.length}f++}let u=new Uint8Array(4);new DataView(u.buffer).setInt32(0,-1,!0),a.push(u),s+=4;let h=new Uint8Array(s),m=0;for(let g of a)h.set(g,m),m+=g.length;return h}extractDemoRange(e,r,n){return this.extractClip(e,{frame:r},{frame:n})}onServerData(e,r,n,i,o,a){this.serverData={protocol:e,serverCount:r,attractLoop:n,gameDir:i,playerNum:o,levelName:a}}onConfigString(e,r){this.configStrings.set(e,r)}onSpawnBaseline(e){this.baselines.set(e.number,e)}onFrame(e){this.frames.push(e)}onCenterPrint(e){}onStuffText(e){}onPrint(e,r){}onSound(e,r,n,i,o,a,s){}onTempEntity(e,r,n,i,o,a,s,c,l){}onLayout(e){}onInventory(e){}onMuzzleFlash(e,r){}onMuzzleFlash2(e,r){}onDisconnect(){}onReconnect(){}onDownload(e,r,n){}};function lp(t,e){let r=e.bits;t.bits=r,t.number=e.number,r&_t&&(t.modelindex=e.modelindex),r&wt&&(t.modelindex2=e.modelindex2),r&Mt&&(t.modelindex3=e.modelindex3),r&At&&(t.modelindex4=e.modelindex4),r&yt&&(t.frame=e.frame),r&St&&(t.frame=e.frame),r&Ve&&(t.skinnum=e.skinnum),r&Xe&&(t.skinnum=e.skinnum),r&He&&(t.effects=e.effects),r&We&&(t.effects=e.effects),r&Ne&&(t.renderfx=e.renderfx),r&Ge&&(t.renderfx=e.renderfx),r&ht&&(t.origin.x=e.origin.x),r&mt&&(t.origin.y=e.origin.y),r&xt&&(t.origin.z=e.origin.z),r&vt&&(t.angles.x=e.angles.x),r&pt&&(t.angles.y=e.angles.y),r&gt&&(t.angles.z=e.angles.z),r&lr&&(t.old_origin.x=e.old_origin.x,t.old_origin.y=e.old_origin.y,t.old_origin.z=e.old_origin.z),r&Et&&(t.sound=e.sound),r&bt&&(t.event=e.event),r&Lt&&(t.solid=e.solid),r&br&&(t.alpha=e.alpha),r&_r&&(t.scale=e.scale),r&Sr&&(t.instanceBits=e.instanceBits),r&wr&&(t.loopVolume=e.loopVolume)}var ef=(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))(ef||{}),cp={".bsp":"bsp",".md2":"md2",".md3":"md3",".wal":"wal",".pcx":"pcx",".tga":"tga",".wav":"wav",".ogg":"ogg",".txt":"txt",".cfg":"cfg",".dm2":"dem"};function Es(t,e){if(t.length<e.length)return!1;for(let r=0;r<e.length;r++)if(t[r]!==e[r])return!1;return!0}var ew=[73,66,83,80],tw=[73,68,80,50],rw=[73,68,80,51];var nw=[82,73,70,70];var iw=[79,103,103,83];function tf(t,e){let r=t.slice(t.lastIndexOf(".")).toLowerCase();if(e){if(Es(e,ew))return"bsp";if(Es(e,tw))return"md2";if(Es(e,rw))return"md3";if(Es(e,iw))return"ogg";if(e.length>128&&e[0]===10&&e[1]<6)return"pcx";if(Es(e,nw)&&e.length>=12&&e[8]===87&&e[9]===65&&e[10]===86&&e[11]===69)return"wav"}return cp[r]?cp[r]:"unknown"}function rf(t){let e=tf(t);return e==="txt"||e==="cfg"}function dp(t){return!rf(t)}function ow(t,e,r,n,i){let o=new Uint8ClampedArray(n*i*4),a=e/n,s=r/i;for(let c=0;c<i;c++)for(let l=0;l<n;l++){let d=l*a,f=c*s,u=Math.floor(d),h=Math.floor(f),m=d-u,g=f-h,p=Math.min(u+1,e-1),y=Math.min(h+1,r-1),v=(h*e+u)*4,x=(h*e+p)*4,b=(y*e+u)*4,_=(y*e+p)*4,w=(c*n+l)*4;for(let S=0;S<4;S++){let E=t[v+S],T=t[x+S],M=t[b+S],C=t[_+S],B=E*(1-m)+T*m,F=M*(1-m)+C*m,k=B*(1-g)+F*g;o[w+S]=k}}return o}function aw(t,e,r,n,i,o,a,s,c,l,d){n=Math.floor(n),i=Math.floor(i),o=Math.floor(o),a=Math.floor(a);let f=Math.abs(o-n),u=Math.abs(a-i),h=n<o?1:-1,m=i<a?1:-1,g=f-u;for(;;){if(n>=0&&n<e&&i>=0&&i<r){let y=(i*e+n)*4,v=1-d/255;t[y]=s*(d/255)+t[y]*v,t[y+1]=c*(d/255)+t[y+1]*v,t[y+2]=l*(d/255)+t[y+2]*v,t[y+3]=255}if(n===o&&i===a)break;let p=2*g;p>-u&&(g-=u,n+=h),p<f&&(g+=f,i+=m)}}function up(t,e,r,n,i){let s=(t.x-n.x)*.707-(t.y-n.y)*.707,c=(t.x-n.x)*.707+(t.y-n.y)*.707,l=t.z-n.z,d=.866,f=.5,u=c*d-l*f,h=c*f+l*d,m=e/2+s*i,g=r/2-h*i;return{x:m,y:g}}var Ec=class{constructor(e){this.assetManager=e}async generateTextureThumbnail(e,r){try{let n=await this.assetManager.loadTexture(e);if(!n||n.levels.length===0)return null;let i=n.levels[0],o=i.width/i.height,a=r,s=r;o>1?s=Math.floor(r/o):a=Math.floor(r*o),a=Math.max(1,a),s=Math.max(1,s);let c=ow(i.rgba,i.width,i.height,a,s);return new ImageData(c,a,s)}catch(n){return console.error(`Failed to generate thumbnail for ${e}`,n),null}}async generateModelThumbnail(e,r){try{let n=[],i=[],o=e.split(".").pop()?.toLowerCase();if(o==="md2"){let p=await this.assetManager.loadMd2Model(e);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(o==="md3"){let p=await this.assetManager.loadMd3Model(e);if(!p||p.surfaces.length===0)return null;let y=0;for(let v of p.surfaces){if(v.vertices.length===0)continue;let x=v.vertices[0];n.push(...x.map(b=>({x:b.position.x,y:b.position.y,z:b.position.z})));for(let b of v.triangles)i.push(y+b.indices[0],y+b.indices[1]),i.push(y+b.indices[1],y+b.indices[2]),i.push(y+b.indices[2],y+b.indices[0]);y+=x.length}}else return null;if(n.length===0)return null;let a={x:1/0,y:1/0,z:1/0},s={x:-1/0,y:-1/0,z:-1/0};for(let p of n)a.x=Math.min(a.x,p.x),a.y=Math.min(a.y,p.y),a.z=Math.min(a.z,p.z),s.x=Math.max(s.x,p.x),s.y=Math.max(s.y,p.y),s.z=Math.max(s.z,p.z);let c={x:(a.x+s.x)/2,y:(a.y+s.y)/2,z:(a.z+s.z)/2},l=s.x-a.x,d=s.y-a.y,f=s.z-a.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],v=i[p+1],x=n[y],b=n[v],_=up(x,r,r,c,m),w=up(b,r,r,c,m);aw(g,r,r,_.x,_.y,w.x,w.y,0,255,0,255)}return new ImageData(g,r,r)}catch(n){return console.error(`Failed to generate model thumbnail for ${e}`,n),null}}async getMapBounds(e,r){try{let n=Qo(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(e){return null}};var Lc=class{constructor(e){this.loader=e}async getMapStatistics(e){let r=await this.loader.load(e),n=r.faces.filter(a=>a.lightOffset!==-1).length,i=r.models[0],o=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:o}}async getUsedTextures(e){let r=await this.loader.load(e),n=new Set;for(let i of r.texInfo)i.texture&&n.add(i.texture);return Array.from(n).sort()}async getUsedModels(e){let r=await this.loader.load(e),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(e){let r=await this.loader.load(e),n=new Set;for(let i of r.entities.entities){i.properties.noise&&n.add(i.properties.noise);for(let[o,a]of Object.entries(i.properties))(o==="noise"||o.endsWith("_sound")||o==="sound")&&typeof a=="string"&&n.add(a)}return Array.from(n).sort()}};function fp(t){let e=[],r=0,n=t.length;function i(){for(;r<n&&/\s/.test(t[r]);)r++}function o(){if(i(),r>=n)return null;if(t[r]==='"'){r++;let a=r;for(;r<n&&t[r]!=='"';)t[r],r++;let s=t.substring(a,r);return r++,s}else{if(t[r]==="{"||t[r]==="}")return t[r++];{if(t.startsWith("//",r)){for(;r<n&&t[r]!==`
783
+ `;)r++;return o()}let a=r;for(;r<n&&!/\s/.test(t[r])&&t[r]!=="}"&&t[r]!=="{";)r++;return t.substring(a,r)}}}for(;r<n;){let a=o();if(a===null)break;if(a==="{"){let s={};for(;;){let c=r,l=o();if(l==="}"||l===null)break;if(l==="{"){r=c;break}let d=o();if(d===null||d==="}"||d==="{"){d==="}"&&r--,d==="{"&&r--;break}s[l]=d}e.push({classname:s.classname,properties:s})}}return e}function hp(t){let e="";for(let r of t){e+=`{
784
+ `;let i=Object.keys(r.properties).sort((o,a)=>o==="classname"?-1:a==="classname"?1:o==="origin"?-1:a==="origin"?1:o.localeCompare(a));for(let o of i){let a=r.properties[o];e+=`"${o}" "${a}"
785
785
  `}e+=`}
786
- `}return e}function lp(t){let e=[],r=[];if(t.properties.classname||e.push('Missing "classname" property'),t.properties.origin){let n=t.properties.origin.split(" ");(n.length!==3||n.some(i=>isNaN(parseFloat(i))))&&e.push(`Invalid origin format: "${t.properties.origin}"`)}return t.properties.angle&&isNaN(parseFloat(t.properties.angle))&&e.push(`Invalid angle format: "${t.properties.angle}"`),{valid:e.length===0,errors:e,warnings:r}}async function cp(t,e){if(!navigator.gpu)throw new Error("WebGPU is not supported in this environment");let r=await navigator.gpu.requestAdapter({powerPreference:e?.powerPreference||"high-performance"});if(!r)throw new Error("No appropriate GPUAdapter found");if(e?.requiredFeatures){for(let u of e.requiredFeatures)if(!r.features.has(u))throw new Error(`Required feature not available: ${u}`)}let n={requiredFeatures:e?.requiredFeatures,requiredLimits:e?.requiredLimits},i=await r.requestDevice(n),a,o="rgba8unorm",s="depth24plus",c=!0,l=e?.width||800,d=e?.height||600;if(t){if(a=t.getContext("webgpu"),!a)throw new Error("Failed to get WebGPU context from canvas");c=!1,o=navigator.gpu.getPreferredCanvasFormat(),l=t.width,d=t.height,a.configure({device:i,format:o,alphaMode:"opaque"})}let f=new Set;for(let u of r.features)f.add(u);return{adapter:r,device:i,context:a,format:o,depthFormat:s,features:f,limits:i.limits,isHeadless:c,width:l,height:d}}function dp(t){let{features:e,limits:r}=t;return{hasTimestampQuery:e.has("timestamp-query"),hasDepthClipControl:e.has("depth-clip-control"),hasTextureCompressionBC:e.has("texture-compression-bc"),hasTextureCompressionETC2:e.has("texture-compression-etc2"),hasTextureCompressionASTC:e.has("texture-compression-astc"),maxTextureDimension2D:r.maxTextureDimension2D,maxBindGroups:r.maxBindGroups,maxUniformBufferBindingSize:r.maxUniformBufferBindingSize,maxStorageBufferBindingSize:r.maxStorageBufferBindingSize}}function up(t,e,r,n="rgba8unorm"){let i=typeof GPUTextureUsage<"u"?GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC:17,a=t.createTexture({size:{width:e,height:r,depthOrArrayLayers:1},format:n,usage:i}),o=a.createView();return{texture:a,view:o,width:e,height:r}}async function fp(t,e){let r=e.width,n=e.height,i=4,a=r*i,o=256,s=Math.max(i*r,Math.ceil(r*i/o)*o),c=s*n,l=typeof GPUBufferUsage<"u"?GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ:9,d=t.createBuffer({size:c,usage:l}),f=t.createCommandEncoder();f.copyTextureToBuffer({texture:e},{buffer:d,bytesPerRow:s},{width:r,height:n,depthOrArrayLayers:1}),t.queue.submit([f.finish()]);let u=typeof GPUMapMode<"u"?GPUMapMode.READ:1;await d.mapAsync(u);let h=d.getMappedRange(),m=new Uint8Array(h),g=new Uint8ClampedArray(r*n*4);if(s===a)g.set(m);else for(let p=0;p<n;p++){let y=p*s,v=p*a;g.set(m.subarray(y,y+a),v)}return d.unmap(),g}var Qu=(o=>(o[o.Disconnected=0]="Disconnected",o[o.Connecting=1]="Connecting",o[o.Challenge=2]="Challenge",o[o.Connected=3]="Connected",o[o.Loading=4]="Loading",o[o.Active=5]="Active",o))(Qu||{}),Tc=class{constructor(e){this.state=0;this.parser=null;this.listeners={};this.serverProtocol=0;this.serverCount=0;this.gameDir="";this.playerNum=0;this.levelName="";this.configStrings=new Map;this.baselines=new Map;this.entities=new Map;this.latestServerFrame=0;this.frameCRCs=new Map;this.currentPacketCRC=0;this.commandHistory=[];this.options=e,this.netchan=e.netchan??new _f}on(e,r){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(r)}off(e,r){this.listeners[e]&&(this.listeners[e]=this.listeners[e].filter(n=>n!==r))}emit(e,...r){this.listeners[e]&&this.listeners[e].forEach(n=>n(...r))}connect(){this.netchan.reset(),this.cleanup(),this.setState(1)}startProtocol(){this.state!==1&&this.connect(),this.setState(2),this.sendChallenge()}disconnect(){this.state!==0&&(this.setState(0),this.emit("disconnect"),this.cleanup())}cleanup(){this.configStrings.clear(),this.baselines.clear(),this.entities.clear(),this.commandHistory=[],this.latestServerFrame=0,this.parser=null,this.frameCRCs.clear()}getState(){return this.state}setState(e){this.state!==e&&(this.state=e,this.emit("state",e))}handleMessage(e){let r=this.netchan.process(new Uint8Array(e));if(!r||r.byteLength===0)return;this.currentPacketCRC=vf(r);let n=new mn(r.buffer);this.parser=new ct(n,this),this.serverProtocol&&this.parser.setProtocolVersion(this.serverProtocol),this.parser.parseMessage()}sendUserCommand(e){if(this.state!==5)return;let r={...e,serverFrame:e.serverFrame??this.latestServerFrame};this.commandHistory.push(r),this.commandHistory.length>bf&&this.commandHistory.shift();let n=new jn;n.writeByte(qn.move);let i=this.frameCRCs.get(this.latestServerFrame)||0;n.writeByte(i),n.writeLong(this.latestServerFrame),xf(n,r),this.transmit(n.getData())}transmit(e){let r=this.netchan.transmit(e);this.emit("send",r)}sendChallenge(){let e=new Ka;e.writeByte(qn.stringcmd),e.writeString("getchallenge"),this.transmit(e.getData())}sendConnect(e){let r=new Ka;r.writeByte(qn.stringcmd);let n=`\\name\\${this.options.username}\\model\\${this.options.model}\\skin\\${this.options.skin}\\hand\\${this.options.hand??0}\\fov\\${this.options.fov??90}`;r.writeString(`connect ${Dr} ${e} ${n}`),this.transmit(r.getData())}sendNew(){let e=new Ka;e.writeByte(qn.stringcmd),e.writeString("new"),this.transmit(e.getData())}sendBegin(){let e=new Ka;e.writeByte(qn.stringcmd),e.writeString("begin"),this.transmit(e.getData())}onServerData(e,r,n,i,a,o){this.serverProtocol=e,this.serverCount=r,this.gameDir=i,this.playerNum=a,this.levelName=o,this.setState(3),this.emit("serverdata",{protocol:e,serverCount:r,gameDir:i,levelName:o}),this.sendNew(),this.setState(4)}onConfigString(e,r){this.configStrings.set(e,r)}onSpawnBaseline(e){this.baselines.set(e.number,e)}onStuffText(e){if(this.emit("stufftext",e),e.startsWith("precache")&&(this.sendBegin(),this.setState(5)),e.startsWith("challenge ")){let r=e.split(" ");if(r.length>1){let n=parseInt(r[1],10);this.sendConnect(n)}}}onFrame(e){e.serverFrame>this.latestServerFrame&&(this.latestServerFrame=e.serverFrame),this.frameCRCs.set(e.serverFrame,this.currentPacketCRC);let r=e.packetEntities;r.delta||this.entities.clear();for(let n of r.entities)this.entities.set(n.number,n);this.emit("frame",e)}onDisconnect(){this.disconnect()}onPrint(e,r){this.emit("print",r,e)}onCenterPrint(e){this.emit("centerprint",e)}onSound(e,r,n,i,a,o,s){this.emit("sound",{flags:e,soundNum:r,volume:n,attenuation:i,offset:a,ent:o,pos:s})}onTempEntity(e,r,n,i,a,o,s,c,l){this.emit("temp_entity",{type:e,pos:r,pos2:n,dir:i,cnt:a,color:o,ent:s})}onInventory(e){this.emit("inventory",e)}onMuzzleFlash(e,r){this.emit("muzzleflash",e,r)}onMuzzleFlash2(e,r){}onMuzzleFlash3(e,r){this.emit("muzzleflash",e,r)}onDownload(e,r,n){this.emit("download",e,r,n)}onReconnect(){}onLayout(e){}onSplitClient(e){}onConfigBlast(e,r){}onSpawnBaselineBlast(e){}onLevelRestart(){}onDamage(e){}onLocPrint(e,r,n){}onFog(e){}onWaitingForPlayers(e){}onBotChat(e){}onPoi(e,r){}onHelpPath(e){}onAchievement(e){}};function QS(t){return{init(){t.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(e,r){return new Yn(e,r)},setAreaPortalState(e,r){t.renderer&&t.renderer.setAreaPortalState&&t.renderer.setAreaPortalState(e,r)}}}return Ap(JS);})();
786
+ `}return e}function mp(t){let e=[],r=[];if(t.properties.classname||e.push('Missing "classname" property'),t.properties.origin){let n=t.properties.origin.split(" ");(n.length!==3||n.some(i=>isNaN(parseFloat(i))))&&e.push(`Invalid origin format: "${t.properties.origin}"`)}return t.properties.angle&&isNaN(parseFloat(t.properties.angle))&&e.push(`Invalid angle format: "${t.properties.angle}"`),{valid:e.length===0,errors:e,warnings:r}}async function pp(t,e){if(!navigator.gpu)throw new Error("WebGPU is not supported in this environment");let r=await navigator.gpu.requestAdapter({powerPreference:e?.powerPreference||"high-performance"});if(!r)throw new Error("No appropriate GPUAdapter found");if(e?.requiredFeatures){for(let u of e.requiredFeatures)if(!r.features.has(u))throw new Error(`Required feature not available: ${u}`)}let n={requiredFeatures:e?.requiredFeatures,requiredLimits:e?.requiredLimits},i=await r.requestDevice(n),o,a="rgba8unorm",s="depth24plus",c=!0,l=e?.width||800,d=e?.height||600;if(t){if(o=t.getContext("webgpu"),!o)throw new Error("Failed to get WebGPU context from canvas");c=!1,a=navigator.gpu.getPreferredCanvasFormat(),l=t.width,d=t.height,o.configure({device:i,format:a,alphaMode:"opaque"})}let f=new Set;for(let u of r.features)f.add(u);return{adapter:r,device:i,context:o,format:a,depthFormat:s,features:f,limits:i.limits,isHeadless:c,width:l,height:d}}function gp(t){let{features:e,limits:r}=t;return{hasTimestampQuery:e.has("timestamp-query"),hasDepthClipControl:e.has("depth-clip-control"),hasTextureCompressionBC:e.has("texture-compression-bc"),hasTextureCompressionETC2:e.has("texture-compression-etc2"),hasTextureCompressionASTC:e.has("texture-compression-astc"),maxTextureDimension2D:r.maxTextureDimension2D,maxBindGroups:r.maxBindGroups,maxUniformBufferBindingSize:r.maxUniformBufferBindingSize,maxStorageBufferBindingSize:r.maxStorageBufferBindingSize}}function yp(t,e,r,n="rgba8unorm"){let i=typeof GPUTextureUsage<"u"?GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC:17,o=t.createTexture({size:{width:e,height:r,depthOrArrayLayers:1},format:n,usage:i}),a=o.createView();return{texture:o,view:a,width:e,height:r}}async function bp(t,e){let r=e.width,n=e.height,i=4,o=r*i,a=256,s=Math.max(i*r,Math.ceil(r*i/a)*a),c=s*n,l=typeof GPUBufferUsage<"u"?GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ:9,d=t.createBuffer({size:c,usage:l}),f=t.createCommandEncoder();f.copyTextureToBuffer({texture:e},{buffer:d,bytesPerRow:s},{width:r,height:n,depthOrArrayLayers:1}),t.queue.submit([f.finish()]);let u=typeof GPUMapMode<"u"?GPUMapMode.READ:1;await d.mapAsync(u);let h=d.getMappedRange(),m=new Uint8Array(h),g=new Uint8ClampedArray(r*n*4);if(s===o)g.set(m);else for(let p=0;p<n;p++){let y=p*s,v=p*o;g.set(m.subarray(y,y+o),v)}return d.unmap(),g}var Tc=class{constructor(e=800,r=600){this.width=0;this.height=0;this.collisionVis=null;this.debug=null;this.particleSystem=null;this.frameCount=0;this.callLog=[];this.width=e,this.height=r}renderFrame(e,r=[]){this.frameCount++,this.callLog.push(`renderFrame(frame=${this.frameCount}, entities=${r.length})`);let n=e.cameraState??e.camera.toState();this.callLog.push(` camera: pos=${n.position}, angles=${n.angles}`)}async registerPic(e,r){return this.callLog.push(`registerPic(${e})`),{width:256,height:256}}registerTexture(e,r){return this.callLog.push(`registerTexture(${e})`),{width:r.width,height:r.height}}begin2D(){this.callLog.push("begin2D()")}end2D(){this.callLog.push("end2D()")}drawPic(e,r,n,i){this.callLog.push(`drawPic(${e}, ${r})`)}drawString(e,r,n,i){this.callLog.push(`drawString(${e}, ${r}, "${n}")`)}drawCenterString(e,r){this.callLog.push(`drawCenterString(${e}, "${r}")`)}drawfillRect(e,r,n,i,o){this.callLog.push(`drawfillRect(${e}, ${r}, ${n}, ${i})`)}setEntityHighlight(e,r){}clearEntityHighlight(e){}highlightSurface(e,r){}removeSurfaceHighlight(e){}setDebugMode(e){}setBrightness(e){}setGamma(e){}setFullbright(e){}setAmbient(e){}setLightStyle(e,r){}setUnderwaterWarp(e){}setBloom(e){}setBloomIntensity(e){}setLodBias(e){}renderInstanced(e,r){}getPerformanceReport(){return{frameTimeMs:0,gpuTimeMs:0,cpuFrameTimeMs:0,drawCalls:0,triangles:0,vertices:0,textureBinds:0,shaderSwitches:0,visibleSurfaces:0,culledSurfaces:0,visibleEntities:0,culledEntities:0,memoryUsageMB:{textures:0,geometry:0,total:0}}}getMemoryUsage(){return{texturesBytes:0,geometryBytes:0,shadersBytes:0,buffersBytes:0,totalBytes:0}}dispose(){this.callLog.push("dispose()")}getCallLog(){return this.callLog}resetCallLog(){this.callLog=[]}getFrameCount(){return this.frameCount}};var nf=(n=>(n.QUAKE="quake",n.OPENGL="opengl",n.WEBGPU="webgpu",n))(nf||{});var Rc=class{constructor(){this.coordinateSystem="opengl"}buildProjectionMatrix(e){let r=I.create();return I.perspective(r,e.fov*Ee,e.aspect,e.near,e.far),r}buildViewMatrix(e){let r=I.fromValues(0,0,-1,0,-1,0,0,0,0,1,0,0,0,0,0,1),[n,i,o]=e.angles,a=n*Ee,s=i*Ee,c=o*Ee,l=I.create();I.identity(l),I.rotateZ(l,l,-s),I.rotateY(l,l,-a),I.rotateX(l,l,-c);let d=I.create();I.multiply(d,r,l);let f=L.negate(L.create(),e.position),u=L.create();L.transformMat4(u,f,l);let h=L.fromValues(u[1]?-u[1]:0,u[2]||0,u[0]?-u[0]:0),m=I.clone(d);return m[12]=h[0],m[13]=h[1],m[14]=h[2],m}};var Cc=class{constructor(){this.coordinateSystem="webgpu"}buildProjectionMatrix(e){let r=I.create(),n=1/Math.tan(e.fov*Ee/2),i=1/(e.near-e.far);return r[0]=n/e.aspect,r[5]=n,r[10]=e.far*i,r[11]=-1,r[14]=e.near*e.far*i,r}buildViewMatrix(e){let[r,n,i]=e.angles,o=r*Ee,a=n*Ee,s=i*Ee,c=I.create();I.identity(c),I.rotateZ(c,c,-a),I.rotateY(c,c,-o),I.rotateX(c,c,-s);let l=I.fromValues(0,0,-1,0,-1,0,0,0,0,1,0,0,0,0,0,1),d=I.fromValues(0,0,-1,0,-1,0,0,0,0,1,0,0,0,0,0,1),f=I.create();I.multiply(f,d,c);let u=L.fromValues(e.position[0],e.position[1],e.position[2]),h=L.transformMat4(L.create(),u,f);L.negate(h,h);let m=I.clone(f);return m[12]=h[0],m[13]=h[1],m[14]=h[2],m}};var Pc=class{constructor(){this.coordinateSystem="quake"}buildProjectionMatrix(e){let r=I.create();return I.perspective(r,e.fov*Ee,e.aspect,e.near,e.far),r}buildViewMatrix(e){let[r,n,i]=e.angles,o=r*Ee,a=n*Ee,s=i*Ee,c=I.create();I.identity(c),I.rotateZ(c,c,a),I.rotateX(c,c,o),I.rotateY(c,c,s);let l=I.create();I.fromTranslation(l,[-e.position[0],-e.position[1],-e.position[2]]);let d=I.create();return I.multiply(d,c,l),d}};function xp(t,e){let r=t.buildViewMatrix(e),n=t.buildProjectionMatrix(e),i=I.create();return I.multiply(i,n,r),{view:r,projection:n,viewProjection:i}}function vp(t){return L.fromValues(-t[1],t[2],-t[0])}function _p(t){return L.fromValues(-t[1],t[2],-t[0])}var Ic=class{constructor(e={}){this.width=0;this.height=0;this.collisionVis=null;this.debug=null;this.particleSystem=null;this.logs=[];switch(this.options={targetSystem:e.targetSystem??"quake",verbose:e.verbose??!0,validateTransforms:e.validateTransforms??!0},this.options.targetSystem){case"opengl":this.builder=new Rc;break;case"webgpu":this.builder=new Cc;break;default:this.builder=new Pc}this.log(`LoggingRenderer initialized (target=${this.options.targetSystem})`)}renderFrame(e,r=[]){this.log(`
787
+ === FRAME START ===`);let n=e.cameraState??e.camera.toState();this.log("Camera State:"),this.log(` Position: ${this.formatVec3(n.position)} (Quake space)`),this.log(` Angles: ${this.formatVec3(n.angles)} (degrees)`),this.log(` FOV: ${n.fov}\xB0, Aspect: ${n.aspect.toFixed(2)}`);let i=xp(this.builder,n);this.log(`Matrices (${this.options.targetSystem}):`),this.options.verbose&&(this.log(" View Matrix:"),this.logMatrix(i.view),this.log(" Projection Matrix:"),this.logMatrix(i.projection)),this.options.validateTransforms&&this.validateCoordinateTransforms(n,i.view),this.log(`Entities: ${r.length}`),this.options.verbose&&r.length>0&&(r.slice(0,5).forEach((o,a)=>{this.log(` [${a}] type=${o.type}, model=${o.model??"none"}`)}),r.length>5&&this.log(` ... and ${r.length-5} more`)),this.log(`=== FRAME END ===
788
+ `)}validateCoordinateTransforms(e,r){let n=e.position,i=vp(n),o=_p(n),a=[r[12],r[13],r[14]];switch(this.log("Transform Validation:"),this.log(` Quake position: ${this.formatVec3(n)}`),this.options.targetSystem){case"opengl":this.log(` Expected GL transform: ${this.formatVec3(i)}`);break;case"webgpu":this.log(` Expected WebGPU transform: ${this.formatVec3(o)}`);break}this.log(` Matrix translation: [${a.map(l=>l.toFixed(2)).join(", ")}]`);let s=Math.abs(n[0])+Math.abs(n[1])+Math.abs(n[2]),c=Math.abs(a[0])+Math.abs(a[1])+Math.abs(a[2]);s>0&&c/s>2&&this.log(" \u26A0\uFE0F WARNING: Matrix translation seems large relative to input - possible double-transform!")}formatVec3(e){return`[${e[0].toFixed(2)}, ${e[1].toFixed(2)}, ${e[2].toFixed(2)}]`}logMatrix(e){for(let r=0;r<4;r++){let n=[e[r],e[r+4],e[r+8],e[r+12]];this.log(` [${n.map(i=>i.toFixed(4).padStart(8)).join(" ")}]`)}}log(e){this.logs.push(e),this.options.verbose&&console.log(`[LogRenderer] ${e}`)}async registerPic(e,r){return this.log(`registerPic("${e}", ${r.byteLength} bytes)`),{width:256,height:256}}registerTexture(e,r){return this.log(`registerTexture("${e}", ${r.width}x${r.height})`),{width:r.width,height:r.height}}begin2D(){this.log("begin2D()")}end2D(){this.log("end2D()")}drawPic(e,r,n,i){this.log(`drawPic(${e}, ${r})`)}drawString(e,r,n,i){this.log(`drawString(${e}, ${r}, "${n}")`)}drawCenterString(e,r){this.log(`drawCenterString(${e}, "${r}")`)}drawfillRect(e,r,n,i,o){this.log(`drawfillRect(${e}, ${r}, ${n}x${i})`)}setEntityHighlight(e,r){}clearEntityHighlight(e){}highlightSurface(e,r){}removeSurfaceHighlight(e){}setDebugMode(e){}setBrightness(e){}setGamma(e){}setFullbright(e){}setAmbient(e){}setLightStyle(e,r){}setUnderwaterWarp(e){}setBloom(e){}setBloomIntensity(e){}setLodBias(e){}renderInstanced(e,r){}getPerformanceReport(){return{frameTimeMs:0,gpuTimeMs:0,cpuFrameTimeMs:0,drawCalls:0,triangles:0,vertices:0,textureBinds:0,shaderSwitches:0,visibleSurfaces:0,culledSurfaces:0,visibleEntities:0,culledEntities:0,memoryUsageMB:{textures:0,geometry:0,total:0}}}getMemoryUsage(){return{texturesBytes:0,geometryBytes:0,shadersBytes:0,buffersBytes:0,totalBytes:0}}dispose(){this.log("dispose()")}getLogs(){return this.logs}resetLogs(){this.logs=[]}printLogs(){console.log(this.logs.join(`
789
+ `))}};var of=(a=>(a[a.Disconnected=0]="Disconnected",a[a.Connecting=1]="Connecting",a[a.Challenge=2]="Challenge",a[a.Connected=3]="Connected",a[a.Loading=4]="Loading",a[a.Active=5]="Active",a))(of||{}),Bc=class{constructor(e){this.state=0;this.parser=null;this.listeners={};this.serverProtocol=0;this.serverCount=0;this.gameDir="";this.playerNum=0;this.levelName="";this.configStrings=new Map;this.baselines=new Map;this.entities=new Map;this.latestServerFrame=0;this.frameCRCs=new Map;this.currentPacketCRC=0;this.commandHistory=[];this.options=e,this.netchan=e.netchan??new Lf}on(e,r){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(r)}off(e,r){this.listeners[e]&&(this.listeners[e]=this.listeners[e].filter(n=>n!==r))}emit(e,...r){this.listeners[e]&&this.listeners[e].forEach(n=>n(...r))}connect(){this.netchan.reset(),this.cleanup(),this.setState(1)}startProtocol(){this.state!==1&&this.connect(),this.setState(2),this.sendChallenge()}disconnect(){this.state!==0&&(this.setState(0),this.emit("disconnect"),this.cleanup())}cleanup(){this.configStrings.clear(),this.baselines.clear(),this.entities.clear(),this.commandHistory=[],this.latestServerFrame=0,this.parser=null,this.frameCRCs.clear()}getState(){return this.state}setState(e){this.state!==e&&(this.state=e,this.emit("state",e))}handleMessage(e){let r=this.netchan.process(new Uint8Array(e));if(!r||r.byteLength===0)return;this.currentPacketCRC=Ef(r);let n=new pn(r.buffer);this.parser=new dt(n,this),this.serverProtocol&&this.parser.setProtocolVersion(this.serverProtocol),this.parser.parseMessage()}sendUserCommand(e){if(this.state!==5)return;let r={...e,serverFrame:e.serverFrame??this.latestServerFrame};this.commandHistory.push(r),this.commandHistory.length>Mf&&this.commandHistory.shift();let n=new Qn;n.writeByte(Zn.move);let i=this.frameCRCs.get(this.latestServerFrame)||0;n.writeByte(i),n.writeLong(this.latestServerFrame),Af(n,r),this.transmit(n.getData())}transmit(e){let r=this.netchan.transmit(e);this.emit("send",r)}sendChallenge(){let e=new Ko;e.writeByte(Zn.stringcmd),e.writeString("getchallenge"),this.transmit(e.getData())}sendConnect(e){let r=new Ko;r.writeByte(Zn.stringcmd);let n=`\\name\\${this.options.username}\\model\\${this.options.model}\\skin\\${this.options.skin}\\hand\\${this.options.hand??0}\\fov\\${this.options.fov??90}`;r.writeString(`connect ${zr} ${e} ${n}`),this.transmit(r.getData())}sendNew(){let e=new Ko;e.writeByte(Zn.stringcmd),e.writeString("new"),this.transmit(e.getData())}sendBegin(){let e=new Ko;e.writeByte(Zn.stringcmd),e.writeString("begin"),this.transmit(e.getData())}onServerData(e,r,n,i,o,a){this.serverProtocol=e,this.serverCount=r,this.gameDir=i,this.playerNum=o,this.levelName=a,this.setState(3),this.emit("serverdata",{protocol:e,serverCount:r,gameDir:i,levelName:a}),this.sendNew(),this.setState(4)}onConfigString(e,r){this.configStrings.set(e,r)}onSpawnBaseline(e){this.baselines.set(e.number,e)}onStuffText(e){if(this.emit("stufftext",e),e.startsWith("precache")&&(this.sendBegin(),this.setState(5)),e.startsWith("challenge ")){let r=e.split(" ");if(r.length>1){let n=parseInt(r[1],10);this.sendConnect(n)}}}onFrame(e){e.serverFrame>this.latestServerFrame&&(this.latestServerFrame=e.serverFrame),this.frameCRCs.set(e.serverFrame,this.currentPacketCRC);let r=e.packetEntities;r.delta||this.entities.clear();for(let n of r.entities)this.entities.set(n.number,n);this.emit("frame",e)}onDisconnect(){this.disconnect()}onPrint(e,r){this.emit("print",r,e)}onCenterPrint(e){this.emit("centerprint",e)}onSound(e,r,n,i,o,a,s){this.emit("sound",{flags:e,soundNum:r,volume:n,attenuation:i,offset:o,ent:a,pos:s})}onTempEntity(e,r,n,i,o,a,s,c,l){this.emit("temp_entity",{type:e,pos:r,pos2:n,dir:i,cnt:o,color:a,ent:s})}onInventory(e){this.emit("inventory",e)}onMuzzleFlash(e,r){this.emit("muzzleflash",e,r)}onMuzzleFlash2(e,r){}onMuzzleFlash3(e,r){this.emit("muzzleflash",e,r)}onDownload(e,r,n){this.emit("download",e,r,n)}onReconnect(){}onLayout(e){}onSplitClient(e){}onConfigBlast(e,r){}onSpawnBaselineBlast(e){}onLevelRestart(){}onDamage(e){}onLocPrint(e,r,n){}onFog(e){}onWaitingForPlayers(e){}onBotChat(e){}onPoi(e,r){}onHelpPath(e){}onAchievement(e){}};function sw(t){return{init(){t.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(e,r){return new Yn(e,r)},setAreaPortalState(e,r){t.renderer&&t.renderer.setAreaPortalState&&t.renderer.setAreaPortalState(e,r)}}}return Fp(lw);})();
787
790
  /*! Bundled license information:
788
791
 
789
792
  pako/dist/pako.esm.mjs: