quake2ts 0.0.85 → 0.0.87

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/package.json +1 -1
  2. package/packages/client/dist/browser/index.global.js +1 -1
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs +80 -0
  5. package/packages/client/dist/cjs/index.cjs.map +1 -1
  6. package/packages/client/dist/esm/index.js +80 -0
  7. package/packages/client/dist/esm/index.js.map +1 -1
  8. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  9. package/packages/engine/dist/browser/index.global.js +7 -7
  10. package/packages/engine/dist/browser/index.global.js.map +1 -1
  11. package/packages/engine/dist/cjs/index.cjs +40 -0
  12. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  13. package/packages/engine/dist/esm/index.js +40 -0
  14. package/packages/engine/dist/esm/index.js.map +1 -1
  15. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  16. package/packages/engine/dist/types/render/collisionVis.d.ts +53 -0
  17. package/packages/engine/dist/types/render/collisionVis.d.ts.map +1 -0
  18. package/packages/engine/dist/types/render/renderer.d.ts +2 -0
  19. package/packages/engine/dist/types/render/renderer.d.ts.map +1 -1
  20. package/packages/game/dist/browser/index.global.js +1 -1
  21. package/packages/game/dist/browser/index.global.js.map +1 -1
  22. package/packages/game/dist/cjs/index.cjs +253 -2
  23. package/packages/game/dist/cjs/index.cjs.map +1 -1
  24. package/packages/game/dist/esm/index.js +248 -2
  25. package/packages/game/dist/esm/index.js.map +1 -1
  26. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  27. package/packages/game/dist/types/ai/movement.d.ts +5 -0
  28. package/packages/game/dist/types/ai/movement.d.ts.map +1 -1
  29. package/packages/game/dist/types/entities/system.d.ts.map +1 -1
  30. package/packages/game/dist/types/physics/fluid.d.ts +5 -0
  31. package/packages/game/dist/types/physics/fluid.d.ts.map +1 -0
  32. package/packages/game/dist/types/physics/movement.d.ts.map +1 -1
  33. package/packages/shared/dist/browser/index.global.js +1 -1
  34. package/packages/shared/dist/browser/index.global.js.map +1 -1
  35. package/packages/shared/dist/cjs/index.cjs +41 -0
  36. package/packages/shared/dist/cjs/index.cjs.map +1 -1
  37. package/packages/shared/dist/esm/index.js +46 -0
  38. package/packages/shared/dist/esm/index.js.map +1 -1
  39. package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
  40. package/packages/shared/dist/types/index.d.ts +1 -0
  41. package/packages/shared/dist/types/index.d.ts.map +1 -1
  42. package/packages/shared/dist/types/replay/index.d.ts +3 -0
  43. package/packages/shared/dist/types/replay/index.d.ts.map +1 -0
  44. package/packages/shared/dist/types/replay/io.d.ts +7 -0
  45. package/packages/shared/dist/types/replay/io.d.ts.map +1 -0
  46. package/packages/shared/dist/types/replay/schema.d.ts +31 -0
  47. package/packages/shared/dist/types/replay/schema.d.ts.map +1 -0
  48. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quake2ts",
3
- "version": "0.0.85",
3
+ "version": "0.0.87",
4
4
  "description": "Quake II re-release port to TypeScript with WebGL renderer - A complete game engine with physics, networking, and BSP rendering",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@8.15.7",
@@ -1,2 +1,2 @@
1
- "use strict";var Quake2Client=(()=>{var nt=Object.defineProperty;var Mn=Object.getOwnPropertyDescriptor;var Nn=Object.getOwnPropertyNames;var Pn=Object.prototype.hasOwnProperty;var it=(e,t)=>{for(var r in t)nt(e,r,{get:t[r],enumerable:!0})},kn=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Nn(t))!Pn.call(e,i)&&i!==r&&nt(e,i,{get:()=>t[i],enumerable:!(n=Mn(t,i))||n.enumerable});return e};var On=e=>kn(nt({},"__esModule",{value:!0}),e);var ec={};it(ec,{ClientPrediction:()=>ce,InputAction:()=>tt,InputBindings:()=>ne,InputCommandBuffer:()=>rt,InputController:()=>he,ViewEffects:()=>le,createClient:()=>Qo,createDefaultBindings:()=>Rn,defaultPredictionState:()=>q,interpolatePredictionState:()=>Be,normalizeCommand:()=>we,normalizeInputCode:()=>nr});var M=1e-6,D=typeof Float32Array<"u"?Float32Array:Array,st=Math.random;function Ee(e){return e>=0?Math.round(e):e%.5===0?Math.floor(e):Math.round(e)}var rc=Math.PI/180,nc=180/Math.PI;var I={};it(I,{add:()=>xi,adjoint:()=>Vn,clone:()=>Cn,copy:()=>Dn,create:()=>In,decompose:()=>si,determinant:()=>Hn,equals:()=>Ai,exactEquals:()=>wi,frob:()=>yi,fromQuat:()=>ci,fromQuat2:()=>ri,fromRotation:()=>Jn,fromRotationTranslation:()=>ur,fromRotationTranslationScale:()=>ai,fromRotationTranslationScaleOrigin:()=>oi,fromScaling:()=>Zn,fromTranslation:()=>qn,fromValues:()=>Fn,fromXRotation:()=>Qn,fromYRotation:()=>ei,fromZRotation:()=>ti,frustum:()=>li,getRotation:()=>ii,getScaling:()=>dr,getTranslation:()=>ni,identity:()=>cr,invert:()=>Gn,lookAt:()=>pi,mul:()=>Ei,multiply:()=>lr,multiplyScalar:()=>_i,multiplyScalarAndAdd:()=>Si,ortho:()=>fi,orthoNO:()=>fr,orthoZO:()=>mi,perspective:()=>ui,perspectiveFromFieldOfView:()=>hi,perspectiveNO:()=>hr,perspectiveZO:()=>di,rotate:()=>Xn,rotateX:()=>Yn,rotateY:()=>$n,rotateZ:()=>jn,scale:()=>Kn,set:()=>Bn,str:()=>vi,sub:()=>zi,subtract:()=>mr,targetTo:()=>gi,translate:()=>Wn,transpose:()=>Un});function In(){var e=new D(16);return D!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0),e[0]=1,e[5]=1,e[10]=1,e[15]=1,e}function Cn(e){var t=new D(16);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function Dn(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function Fn(e,t,r,n,i,s,a,o,c,l,u,d,h,m,p,g){var f=new D(16);return f[0]=e,f[1]=t,f[2]=r,f[3]=n,f[4]=i,f[5]=s,f[6]=a,f[7]=o,f[8]=c,f[9]=l,f[10]=u,f[11]=d,f[12]=h,f[13]=m,f[14]=p,f[15]=g,f}function Bn(e,t,r,n,i,s,a,o,c,l,u,d,h,m,p,g,f){return e[0]=t,e[1]=r,e[2]=n,e[3]=i,e[4]=s,e[5]=a,e[6]=o,e[7]=c,e[8]=l,e[9]=u,e[10]=d,e[11]=h,e[12]=m,e[13]=p,e[14]=g,e[15]=f,e}function cr(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Un(e,t){if(e===t){var r=t[1],n=t[2],i=t[3],s=t[6],a=t[7],o=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=r,e[6]=t[9],e[7]=t[13],e[8]=n,e[9]=s,e[11]=t[14],e[12]=i,e[13]=a,e[14]=o}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15];return e}function Gn(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=t[4],o=t[5],c=t[6],l=t[7],u=t[8],d=t[9],h=t[10],m=t[11],p=t[12],g=t[13],f=t[14],v=t[15],w=r*o-n*a,S=r*c-i*a,_=r*l-s*a,y=n*c-i*o,x=n*l-s*o,T=i*l-s*c,z=u*g-d*p,b=u*f-h*p,E=u*v-m*p,R=d*f-h*g,N=d*v-m*g,O=h*v-m*f,L=w*O-S*N+_*R+y*E-x*b+T*z;return L?(L=1/L,e[0]=(o*O-c*N+l*R)*L,e[1]=(i*N-n*O-s*R)*L,e[2]=(g*T-f*x+v*y)*L,e[3]=(h*x-d*T-m*y)*L,e[4]=(c*E-a*O-l*b)*L,e[5]=(r*O-i*E+s*b)*L,e[6]=(f*_-p*T-v*S)*L,e[7]=(u*T-h*_+m*S)*L,e[8]=(a*N-o*E+l*z)*L,e[9]=(n*E-r*N-s*z)*L,e[10]=(p*x-g*_+v*w)*L,e[11]=(d*_-u*x-m*w)*L,e[12]=(o*b-a*R-c*z)*L,e[13]=(r*R-n*b+i*z)*L,e[14]=(g*S-p*y-f*w)*L,e[15]=(u*y-d*S+h*w)*L,e):null}function Vn(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=t[4],o=t[5],c=t[6],l=t[7],u=t[8],d=t[9],h=t[10],m=t[11],p=t[12],g=t[13],f=t[14],v=t[15],w=r*o-n*a,S=r*c-i*a,_=r*l-s*a,y=n*c-i*o,x=n*l-s*o,T=i*l-s*c,z=u*g-d*p,b=u*f-h*p,E=u*v-m*p,R=d*f-h*g,N=d*v-m*g,O=h*v-m*f;return e[0]=o*O-c*N+l*R,e[1]=i*N-n*O-s*R,e[2]=g*T-f*x+v*y,e[3]=h*x-d*T-m*y,e[4]=c*E-a*O-l*b,e[5]=r*O-i*E+s*b,e[6]=f*_-p*T-v*S,e[7]=u*T-h*_+m*S,e[8]=a*N-o*E+l*z,e[9]=n*E-r*N-s*z,e[10]=p*x-g*_+v*w,e[11]=d*_-u*x-m*w,e[12]=o*b-a*R-c*z,e[13]=r*R-n*b+i*z,e[14]=g*S-p*y-f*w,e[15]=u*y-d*S+h*w,e}function Hn(e){var t=e[0],r=e[1],n=e[2],i=e[3],s=e[4],a=e[5],o=e[6],c=e[7],l=e[8],u=e[9],d=e[10],h=e[11],m=e[12],p=e[13],g=e[14],f=e[15],v=t*a-r*s,w=t*o-n*s,S=r*o-n*a,_=l*p-u*m,y=l*g-d*m,x=u*g-d*p,T=t*x-r*y+n*_,z=s*x-a*y+o*_,b=l*S-u*w+d*v,E=m*S-p*w+g*v;return c*T-i*z+f*b-h*E}function lr(e,t,r){var n=t[0],i=t[1],s=t[2],a=t[3],o=t[4],c=t[5],l=t[6],u=t[7],d=t[8],h=t[9],m=t[10],p=t[11],g=t[12],f=t[13],v=t[14],w=t[15],S=r[0],_=r[1],y=r[2],x=r[3];return e[0]=S*n+_*o+y*d+x*g,e[1]=S*i+_*c+y*h+x*f,e[2]=S*s+_*l+y*m+x*v,e[3]=S*a+_*u+y*p+x*w,S=r[4],_=r[5],y=r[6],x=r[7],e[4]=S*n+_*o+y*d+x*g,e[5]=S*i+_*c+y*h+x*f,e[6]=S*s+_*l+y*m+x*v,e[7]=S*a+_*u+y*p+x*w,S=r[8],_=r[9],y=r[10],x=r[11],e[8]=S*n+_*o+y*d+x*g,e[9]=S*i+_*c+y*h+x*f,e[10]=S*s+_*l+y*m+x*v,e[11]=S*a+_*u+y*p+x*w,S=r[12],_=r[13],y=r[14],x=r[15],e[12]=S*n+_*o+y*d+x*g,e[13]=S*i+_*c+y*h+x*f,e[14]=S*s+_*l+y*m+x*v,e[15]=S*a+_*u+y*p+x*w,e}function Wn(e,t,r){var n=r[0],i=r[1],s=r[2],a,o,c,l,u,d,h,m,p,g,f,v;return t===e?(e[12]=t[0]*n+t[4]*i+t[8]*s+t[12],e[13]=t[1]*n+t[5]*i+t[9]*s+t[13],e[14]=t[2]*n+t[6]*i+t[10]*s+t[14],e[15]=t[3]*n+t[7]*i+t[11]*s+t[15]):(a=t[0],o=t[1],c=t[2],l=t[3],u=t[4],d=t[5],h=t[6],m=t[7],p=t[8],g=t[9],f=t[10],v=t[11],e[0]=a,e[1]=o,e[2]=c,e[3]=l,e[4]=u,e[5]=d,e[6]=h,e[7]=m,e[8]=p,e[9]=g,e[10]=f,e[11]=v,e[12]=a*n+u*i+p*s+t[12],e[13]=o*n+d*i+g*s+t[13],e[14]=c*n+h*i+f*s+t[14],e[15]=l*n+m*i+v*s+t[15]),e}function Kn(e,t,r){var n=r[0],i=r[1],s=r[2];return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e[4]=t[4]*i,e[5]=t[5]*i,e[6]=t[6]*i,e[7]=t[7]*i,e[8]=t[8]*s,e[9]=t[9]*s,e[10]=t[10]*s,e[11]=t[11]*s,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function Xn(e,t,r,n){var i=n[0],s=n[1],a=n[2],o=Math.sqrt(i*i+s*s+a*a),c,l,u,d,h,m,p,g,f,v,w,S,_,y,x,T,z,b,E,R,N,O,L,G;return o<M?null:(o=1/o,i*=o,s*=o,a*=o,c=Math.sin(r),l=Math.cos(r),u=1-l,d=t[0],h=t[1],m=t[2],p=t[3],g=t[4],f=t[5],v=t[6],w=t[7],S=t[8],_=t[9],y=t[10],x=t[11],T=i*i*u+l,z=s*i*u+a*c,b=a*i*u-s*c,E=i*s*u-a*c,R=s*s*u+l,N=a*s*u+i*c,O=i*a*u+s*c,L=s*a*u-i*c,G=a*a*u+l,e[0]=d*T+g*z+S*b,e[1]=h*T+f*z+_*b,e[2]=m*T+v*z+y*b,e[3]=p*T+w*z+x*b,e[4]=d*E+g*R+S*N,e[5]=h*E+f*R+_*N,e[6]=m*E+v*R+y*N,e[7]=p*E+w*R+x*N,e[8]=d*O+g*L+S*G,e[9]=h*O+f*L+_*G,e[10]=m*O+v*L+y*G,e[11]=p*O+w*L+x*G,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}function Yn(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[4],a=t[5],o=t[6],c=t[7],l=t[8],u=t[9],d=t[10],h=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=s*i+l*n,e[5]=a*i+u*n,e[6]=o*i+d*n,e[7]=c*i+h*n,e[8]=l*i-s*n,e[9]=u*i-a*n,e[10]=d*i-o*n,e[11]=h*i-c*n,e}function $n(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],a=t[1],o=t[2],c=t[3],l=t[8],u=t[9],d=t[10],h=t[11];return t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=s*i-l*n,e[1]=a*i-u*n,e[2]=o*i-d*n,e[3]=c*i-h*n,e[8]=s*n+l*i,e[9]=a*n+u*i,e[10]=o*n+d*i,e[11]=c*n+h*i,e}function jn(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],a=t[1],o=t[2],c=t[3],l=t[4],u=t[5],d=t[6],h=t[7];return t!==e&&(e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=s*i+l*n,e[1]=a*i+u*n,e[2]=o*i+d*n,e[3]=c*i+h*n,e[4]=l*i-s*n,e[5]=u*i-a*n,e[6]=d*i-o*n,e[7]=h*i-c*n,e}function qn(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=t[0],e[13]=t[1],e[14]=t[2],e[15]=1,e}function Zn(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=t[1],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=t[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Jn(e,t,r){var n=r[0],i=r[1],s=r[2],a=Math.sqrt(n*n+i*i+s*s),o,c,l;return a<M?null:(a=1/a,n*=a,i*=a,s*=a,o=Math.sin(t),c=Math.cos(t),l=1-c,e[0]=n*n*l+c,e[1]=i*n*l+s*o,e[2]=s*n*l-i*o,e[3]=0,e[4]=n*i*l-s*o,e[5]=i*i*l+c,e[6]=s*i*l+n*o,e[7]=0,e[8]=n*s*l+i*o,e[9]=i*s*l-n*o,e[10]=s*s*l+c,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e)}function Qn(e,t){var r=Math.sin(t),n=Math.cos(t);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=n,e[6]=r,e[7]=0,e[8]=0,e[9]=-r,e[10]=n,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function ei(e,t){var r=Math.sin(t),n=Math.cos(t);return e[0]=n,e[1]=0,e[2]=-r,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=r,e[9]=0,e[10]=n,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function ti(e,t){var r=Math.sin(t),n=Math.cos(t);return e[0]=n,e[1]=r,e[2]=0,e[3]=0,e[4]=-r,e[5]=n,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function ur(e,t,r){var n=t[0],i=t[1],s=t[2],a=t[3],o=n+n,c=i+i,l=s+s,u=n*o,d=n*c,h=n*l,m=i*c,p=i*l,g=s*l,f=a*o,v=a*c,w=a*l;return e[0]=1-(m+g),e[1]=d+w,e[2]=h-v,e[3]=0,e[4]=d-w,e[5]=1-(u+g),e[6]=p+f,e[7]=0,e[8]=h+v,e[9]=p-f,e[10]=1-(u+m),e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function ri(e,t){var r=new D(3),n=-t[0],i=-t[1],s=-t[2],a=t[3],o=t[4],c=t[5],l=t[6],u=t[7],d=n*n+i*i+s*s+a*a;return d>0?(r[0]=(o*a+u*n+c*s-l*i)*2/d,r[1]=(c*a+u*i+l*n-o*s)*2/d,r[2]=(l*a+u*s+o*i-c*n)*2/d):(r[0]=(o*a+u*n+c*s-l*i)*2,r[1]=(c*a+u*i+l*n-o*s)*2,r[2]=(l*a+u*s+o*i-c*n)*2),ur(e,t,r),e}function ni(e,t){return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function dr(e,t){var r=t[0],n=t[1],i=t[2],s=t[4],a=t[5],o=t[6],c=t[8],l=t[9],u=t[10];return e[0]=Math.sqrt(r*r+n*n+i*i),e[1]=Math.sqrt(s*s+a*a+o*o),e[2]=Math.sqrt(c*c+l*l+u*u),e}function ii(e,t){var r=new D(3);dr(r,t);var n=1/r[0],i=1/r[1],s=1/r[2],a=t[0]*n,o=t[1]*i,c=t[2]*s,l=t[4]*n,u=t[5]*i,d=t[6]*s,h=t[8]*n,m=t[9]*i,p=t[10]*s,g=a+u+p,f=0;return g>0?(f=Math.sqrt(g+1)*2,e[3]=.25*f,e[0]=(d-m)/f,e[1]=(h-c)/f,e[2]=(o-l)/f):a>u&&a>p?(f=Math.sqrt(1+a-u-p)*2,e[3]=(d-m)/f,e[0]=.25*f,e[1]=(o+l)/f,e[2]=(h+c)/f):u>p?(f=Math.sqrt(1+u-a-p)*2,e[3]=(h-c)/f,e[0]=(o+l)/f,e[1]=.25*f,e[2]=(d+m)/f):(f=Math.sqrt(1+p-a-u)*2,e[3]=(o-l)/f,e[0]=(h+c)/f,e[1]=(d+m)/f,e[2]=.25*f),e}function si(e,t,r,n){t[0]=n[12],t[1]=n[13],t[2]=n[14];var i=n[0],s=n[1],a=n[2],o=n[4],c=n[5],l=n[6],u=n[8],d=n[9],h=n[10];r[0]=Math.sqrt(i*i+s*s+a*a),r[1]=Math.sqrt(o*o+c*c+l*l),r[2]=Math.sqrt(u*u+d*d+h*h);var m=1/r[0],p=1/r[1],g=1/r[2],f=i*m,v=s*p,w=a*g,S=o*m,_=c*p,y=l*g,x=u*m,T=d*p,z=h*g,b=f+_+z,E=0;return b>0?(E=Math.sqrt(b+1)*2,e[3]=.25*E,e[0]=(y-T)/E,e[1]=(x-w)/E,e[2]=(v-S)/E):f>_&&f>z?(E=Math.sqrt(1+f-_-z)*2,e[3]=(y-T)/E,e[0]=.25*E,e[1]=(v+S)/E,e[2]=(x+w)/E):_>z?(E=Math.sqrt(1+_-f-z)*2,e[3]=(x-w)/E,e[0]=(v+S)/E,e[1]=.25*E,e[2]=(y+T)/E):(E=Math.sqrt(1+z-f-_)*2,e[3]=(v-S)/E,e[0]=(x+w)/E,e[1]=(y+T)/E,e[2]=.25*E),e}function ai(e,t,r,n){var i=t[0],s=t[1],a=t[2],o=t[3],c=i+i,l=s+s,u=a+a,d=i*c,h=i*l,m=i*u,p=s*l,g=s*u,f=a*u,v=o*c,w=o*l,S=o*u,_=n[0],y=n[1],x=n[2];return e[0]=(1-(p+f))*_,e[1]=(h+S)*_,e[2]=(m-w)*_,e[3]=0,e[4]=(h-S)*y,e[5]=(1-(d+f))*y,e[6]=(g+v)*y,e[7]=0,e[8]=(m+w)*x,e[9]=(g-v)*x,e[10]=(1-(d+p))*x,e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function oi(e,t,r,n,i){var s=t[0],a=t[1],o=t[2],c=t[3],l=s+s,u=a+a,d=o+o,h=s*l,m=s*u,p=s*d,g=a*u,f=a*d,v=o*d,w=c*l,S=c*u,_=c*d,y=n[0],x=n[1],T=n[2],z=i[0],b=i[1],E=i[2],R=(1-(g+v))*y,N=(m+_)*y,O=(p-S)*y,L=(m-_)*x,G=(1-(h+v))*x,fe=(f+w)*x,me=(p+S)*T,sr=(f-w)*T,ar=(1-(h+g))*T;return e[0]=R,e[1]=N,e[2]=O,e[3]=0,e[4]=L,e[5]=G,e[6]=fe,e[7]=0,e[8]=me,e[9]=sr,e[10]=ar,e[11]=0,e[12]=r[0]+z-(R*z+L*b+me*E),e[13]=r[1]+b-(N*z+G*b+sr*E),e[14]=r[2]+E-(O*z+fe*b+ar*E),e[15]=1,e}function ci(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=r+r,o=n+n,c=i+i,l=r*a,u=n*a,d=n*o,h=i*a,m=i*o,p=i*c,g=s*a,f=s*o,v=s*c;return e[0]=1-d-p,e[1]=u+v,e[2]=h-f,e[3]=0,e[4]=u-v,e[5]=1-l-p,e[6]=m+g,e[7]=0,e[8]=h+f,e[9]=m-g,e[10]=1-l-d,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function li(e,t,r,n,i,s,a){var o=1/(r-t),c=1/(i-n),l=1/(s-a);return e[0]=s*2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s*2*c,e[6]=0,e[7]=0,e[8]=(r+t)*o,e[9]=(i+n)*c,e[10]=(a+s)*l,e[11]=-1,e[12]=0,e[13]=0,e[14]=a*s*2*l,e[15]=0,e}function hr(e,t,r,n,i){var s=1/Math.tan(t/2);if(e[0]=s/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,i!=null&&i!==1/0){var a=1/(n-i);e[10]=(i+n)*a,e[14]=2*i*n*a}else e[10]=-1,e[14]=-2*n;return e}var ui=hr;function di(e,t,r,n,i){var s=1/Math.tan(t/2);if(e[0]=s/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,i!=null&&i!==1/0){var a=1/(n-i);e[10]=i*a,e[14]=i*n*a}else e[10]=-1,e[14]=-n;return e}function hi(e,t,r,n){var i=Math.tan(t.upDegrees*Math.PI/180),s=Math.tan(t.downDegrees*Math.PI/180),a=Math.tan(t.leftDegrees*Math.PI/180),o=Math.tan(t.rightDegrees*Math.PI/180),c=2/(a+o),l=2/(i+s);return e[0]=c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=l,e[6]=0,e[7]=0,e[8]=-((a-o)*c*.5),e[9]=(i-s)*l*.5,e[10]=n/(r-n),e[11]=-1,e[12]=0,e[13]=0,e[14]=n*r/(r-n),e[15]=0,e}function fr(e,t,r,n,i,s,a){var o=1/(t-r),c=1/(n-i),l=1/(s-a);return e[0]=-2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*l,e[11]=0,e[12]=(t+r)*o,e[13]=(i+n)*c,e[14]=(a+s)*l,e[15]=1,e}var fi=fr;function mi(e,t,r,n,i,s,a){var o=1/(t-r),c=1/(n-i),l=1/(s-a);return e[0]=-2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=l,e[11]=0,e[12]=(t+r)*o,e[13]=(i+n)*c,e[14]=s*l,e[15]=1,e}function pi(e,t,r,n){var i,s,a,o,c,l,u,d,h,m,p=t[0],g=t[1],f=t[2],v=n[0],w=n[1],S=n[2],_=r[0],y=r[1],x=r[2];return Math.abs(p-_)<M&&Math.abs(g-y)<M&&Math.abs(f-x)<M?cr(e):(u=p-_,d=g-y,h=f-x,m=1/Math.sqrt(u*u+d*d+h*h),u*=m,d*=m,h*=m,i=w*h-S*d,s=S*u-v*h,a=v*d-w*u,m=Math.sqrt(i*i+s*s+a*a),m?(m=1/m,i*=m,s*=m,a*=m):(i=0,s=0,a=0),o=d*a-h*s,c=h*i-u*a,l=u*s-d*i,m=Math.sqrt(o*o+c*c+l*l),m?(m=1/m,o*=m,c*=m,l*=m):(o=0,c=0,l=0),e[0]=i,e[1]=o,e[2]=u,e[3]=0,e[4]=s,e[5]=c,e[6]=d,e[7]=0,e[8]=a,e[9]=l,e[10]=h,e[11]=0,e[12]=-(i*p+s*g+a*f),e[13]=-(o*p+c*g+l*f),e[14]=-(u*p+d*g+h*f),e[15]=1,e)}function gi(e,t,r,n){var i=t[0],s=t[1],a=t[2],o=n[0],c=n[1],l=n[2],u=i-r[0],d=s-r[1],h=a-r[2],m=u*u+d*d+h*h;m>0&&(m=1/Math.sqrt(m),u*=m,d*=m,h*=m);var p=c*h-l*d,g=l*u-o*h,f=o*d-c*u;return m=p*p+g*g+f*f,m>0&&(m=1/Math.sqrt(m),p*=m,g*=m,f*=m),e[0]=p,e[1]=g,e[2]=f,e[3]=0,e[4]=d*f-h*g,e[5]=h*p-u*f,e[6]=u*g-d*p,e[7]=0,e[8]=u,e[9]=d,e[10]=h,e[11]=0,e[12]=i,e[13]=s,e[14]=a,e[15]=1,e}function vi(e){return"mat4("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+", "+e[9]+", "+e[10]+", "+e[11]+", "+e[12]+", "+e[13]+", "+e[14]+", "+e[15]+")"}function yi(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]+e[3]*e[3]+e[4]*e[4]+e[5]*e[5]+e[6]*e[6]+e[7]*e[7]+e[8]*e[8]+e[9]*e[9]+e[10]*e[10]+e[11]*e[11]+e[12]*e[12]+e[13]*e[13]+e[14]*e[14]+e[15]*e[15])}function xi(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e[3]=t[3]+r[3],e[4]=t[4]+r[4],e[5]=t[5]+r[5],e[6]=t[6]+r[6],e[7]=t[7]+r[7],e[8]=t[8]+r[8],e[9]=t[9]+r[9],e[10]=t[10]+r[10],e[11]=t[11]+r[11],e[12]=t[12]+r[12],e[13]=t[13]+r[13],e[14]=t[14]+r[14],e[15]=t[15]+r[15],e}function mr(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e[3]=t[3]-r[3],e[4]=t[4]-r[4],e[5]=t[5]-r[5],e[6]=t[6]-r[6],e[7]=t[7]-r[7],e[8]=t[8]-r[8],e[9]=t[9]-r[9],e[10]=t[10]-r[10],e[11]=t[11]-r[11],e[12]=t[12]-r[12],e[13]=t[13]-r[13],e[14]=t[14]-r[14],e[15]=t[15]-r[15],e}function _i(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*r,e[5]=t[5]*r,e[6]=t[6]*r,e[7]=t[7]*r,e[8]=t[8]*r,e[9]=t[9]*r,e[10]=t[10]*r,e[11]=t[11]*r,e[12]=t[12]*r,e[13]=t[13]*r,e[14]=t[14]*r,e[15]=t[15]*r,e}function Si(e,t,r,n){return e[0]=t[0]+r[0]*n,e[1]=t[1]+r[1]*n,e[2]=t[2]+r[2]*n,e[3]=t[3]+r[3]*n,e[4]=t[4]+r[4]*n,e[5]=t[5]+r[5]*n,e[6]=t[6]+r[6]*n,e[7]=t[7]+r[7]*n,e[8]=t[8]+r[8]*n,e[9]=t[9]+r[9]*n,e[10]=t[10]+r[10]*n,e[11]=t[11]+r[11]*n,e[12]=t[12]+r[12]*n,e[13]=t[13]+r[13]*n,e[14]=t[14]+r[14]*n,e[15]=t[15]+r[15]*n,e}function wi(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]&&e[9]===t[9]&&e[10]===t[10]&&e[11]===t[11]&&e[12]===t[12]&&e[13]===t[13]&&e[14]===t[14]&&e[15]===t[15]}function Ai(e,t){var r=e[0],n=e[1],i=e[2],s=e[3],a=e[4],o=e[5],c=e[6],l=e[7],u=e[8],d=e[9],h=e[10],m=e[11],p=e[12],g=e[13],f=e[14],v=e[15],w=t[0],S=t[1],_=t[2],y=t[3],x=t[4],T=t[5],z=t[6],b=t[7],E=t[8],R=t[9],N=t[10],O=t[11],L=t[12],G=t[13],fe=t[14],me=t[15];return Math.abs(r-w)<=M*Math.max(1,Math.abs(r),Math.abs(w))&&Math.abs(n-S)<=M*Math.max(1,Math.abs(n),Math.abs(S))&&Math.abs(i-_)<=M*Math.max(1,Math.abs(i),Math.abs(_))&&Math.abs(s-y)<=M*Math.max(1,Math.abs(s),Math.abs(y))&&Math.abs(a-x)<=M*Math.max(1,Math.abs(a),Math.abs(x))&&Math.abs(o-T)<=M*Math.max(1,Math.abs(o),Math.abs(T))&&Math.abs(c-z)<=M*Math.max(1,Math.abs(c),Math.abs(z))&&Math.abs(l-b)<=M*Math.max(1,Math.abs(l),Math.abs(b))&&Math.abs(u-E)<=M*Math.max(1,Math.abs(u),Math.abs(E))&&Math.abs(d-R)<=M*Math.max(1,Math.abs(d),Math.abs(R))&&Math.abs(h-N)<=M*Math.max(1,Math.abs(h),Math.abs(N))&&Math.abs(m-O)<=M*Math.max(1,Math.abs(m),Math.abs(O))&&Math.abs(p-L)<=M*Math.max(1,Math.abs(p),Math.abs(L))&&Math.abs(g-G)<=M*Math.max(1,Math.abs(g),Math.abs(G))&&Math.abs(f-fe)<=M*Math.max(1,Math.abs(f),Math.abs(fe))&&Math.abs(v-me)<=M*Math.max(1,Math.abs(v),Math.abs(me))}var Ei=lr,zi=mr;var k={};it(k,{add:()=>Mi,angle:()=>Qi,bezier:()=>Ki,ceil:()=>Ni,clone:()=>Ti,copy:()=>Li,create:()=>pr,cross:()=>Gi,dist:()=>os,distance:()=>_r,div:()=>as,divide:()=>xr,dot:()=>at,equals:()=>ns,exactEquals:()=>rs,floor:()=>Pi,forEach:()=>ds,fromValues:()=>bi,hermite:()=>Wi,inverse:()=>Bi,len:()=>ls,length:()=>gr,lerp:()=>Vi,max:()=>Oi,min:()=>ki,mul:()=>ss,multiply:()=>yr,negate:()=>Fi,normalize:()=>Ui,random:()=>Xi,rotateX:()=>qi,rotateY:()=>Zi,rotateZ:()=>Ji,round:()=>Ii,scale:()=>Ci,scaleAndAdd:()=>Di,set:()=>Ri,slerp:()=>Hi,sqrDist:()=>cs,sqrLen:()=>us,squaredDistance:()=>Sr,squaredLength:()=>wr,str:()=>ts,sub:()=>is,subtract:()=>vr,transformMat3:()=>$i,transformMat4:()=>Yi,transformQuat:()=>ji,zero:()=>es});function pr(){var e=new D(3);return D!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function Ti(e){var t=new D(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function gr(e){var t=e[0],r=e[1],n=e[2];return Math.sqrt(t*t+r*r+n*n)}function bi(e,t,r){var n=new D(3);return n[0]=e,n[1]=t,n[2]=r,n}function Li(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function Ri(e,t,r,n){return e[0]=t,e[1]=r,e[2]=n,e}function Mi(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e}function vr(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e}function yr(e,t,r){return e[0]=t[0]*r[0],e[1]=t[1]*r[1],e[2]=t[2]*r[2],e}function xr(e,t,r){return e[0]=t[0]/r[0],e[1]=t[1]/r[1],e[2]=t[2]/r[2],e}function Ni(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function Pi(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function ki(e,t,r){return e[0]=Math.min(t[0],r[0]),e[1]=Math.min(t[1],r[1]),e[2]=Math.min(t[2],r[2]),e}function Oi(e,t,r){return e[0]=Math.max(t[0],r[0]),e[1]=Math.max(t[1],r[1]),e[2]=Math.max(t[2],r[2]),e}function Ii(e,t){return e[0]=Ee(t[0]),e[1]=Ee(t[1]),e[2]=Ee(t[2]),e}function Ci(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e}function Di(e,t,r,n){return e[0]=t[0]+r[0]*n,e[1]=t[1]+r[1]*n,e[2]=t[2]+r[2]*n,e}function _r(e,t){var r=t[0]-e[0],n=t[1]-e[1],i=t[2]-e[2];return Math.sqrt(r*r+n*n+i*i)}function Sr(e,t){var r=t[0]-e[0],n=t[1]-e[1],i=t[2]-e[2];return r*r+n*n+i*i}function wr(e){var t=e[0],r=e[1],n=e[2];return t*t+r*r+n*n}function Fi(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function Bi(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function Ui(e,t){var r=t[0],n=t[1],i=t[2],s=r*r+n*n+i*i;return s>0&&(s=1/Math.sqrt(s)),e[0]=t[0]*s,e[1]=t[1]*s,e[2]=t[2]*s,e}function at(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Gi(e,t,r){var n=t[0],i=t[1],s=t[2],a=r[0],o=r[1],c=r[2];return e[0]=i*c-s*o,e[1]=s*a-n*c,e[2]=n*o-i*a,e}function Vi(e,t,r,n){var i=t[0],s=t[1],a=t[2];return e[0]=i+n*(r[0]-i),e[1]=s+n*(r[1]-s),e[2]=a+n*(r[2]-a),e}function Hi(e,t,r,n){var i=Math.acos(Math.min(Math.max(at(t,r),-1),1)),s=Math.sin(i),a=Math.sin((1-n)*i)/s,o=Math.sin(n*i)/s;return e[0]=a*t[0]+o*r[0],e[1]=a*t[1]+o*r[1],e[2]=a*t[2]+o*r[2],e}function Wi(e,t,r,n,i,s){var a=s*s,o=a*(2*s-3)+1,c=a*(s-2)+s,l=a*(s-1),u=a*(3-2*s);return e[0]=t[0]*o+r[0]*c+n[0]*l+i[0]*u,e[1]=t[1]*o+r[1]*c+n[1]*l+i[1]*u,e[2]=t[2]*o+r[2]*c+n[2]*l+i[2]*u,e}function Ki(e,t,r,n,i,s){var a=1-s,o=a*a,c=s*s,l=o*a,u=3*s*o,d=3*c*a,h=c*s;return e[0]=t[0]*l+r[0]*u+n[0]*d+i[0]*h,e[1]=t[1]*l+r[1]*u+n[1]*d+i[1]*h,e[2]=t[2]*l+r[2]*u+n[2]*d+i[2]*h,e}function Xi(e,t){t=t===void 0?1:t;var r=st()*2*Math.PI,n=st()*2-1,i=Math.sqrt(1-n*n)*t;return e[0]=Math.cos(r)*i,e[1]=Math.sin(r)*i,e[2]=n*t,e}function Yi(e,t,r){var n=t[0],i=t[1],s=t[2],a=r[3]*n+r[7]*i+r[11]*s+r[15];return a=a||1,e[0]=(r[0]*n+r[4]*i+r[8]*s+r[12])/a,e[1]=(r[1]*n+r[5]*i+r[9]*s+r[13])/a,e[2]=(r[2]*n+r[6]*i+r[10]*s+r[14])/a,e}function $i(e,t,r){var n=t[0],i=t[1],s=t[2];return e[0]=n*r[0]+i*r[3]+s*r[6],e[1]=n*r[1]+i*r[4]+s*r[7],e[2]=n*r[2]+i*r[5]+s*r[8],e}function ji(e,t,r){var n=r[0],i=r[1],s=r[2],a=r[3],o=t[0],c=t[1],l=t[2],u=i*l-s*c,d=s*o-n*l,h=n*c-i*o;return u=u+u,d=d+d,h=h+h,e[0]=o+a*u+i*h-s*d,e[1]=c+a*d+s*u-n*h,e[2]=l+a*h+n*d-i*u,e}function qi(e,t,r,n){var i=[],s=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],s[0]=i[0],s[1]=i[1]*Math.cos(n)-i[2]*Math.sin(n),s[2]=i[1]*Math.sin(n)+i[2]*Math.cos(n),e[0]=s[0]+r[0],e[1]=s[1]+r[1],e[2]=s[2]+r[2],e}function Zi(e,t,r,n){var i=[],s=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],s[0]=i[2]*Math.sin(n)+i[0]*Math.cos(n),s[1]=i[1],s[2]=i[2]*Math.cos(n)-i[0]*Math.sin(n),e[0]=s[0]+r[0],e[1]=s[1]+r[1],e[2]=s[2]+r[2],e}function Ji(e,t,r,n){var i=[],s=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],s[0]=i[0]*Math.cos(n)-i[1]*Math.sin(n),s[1]=i[0]*Math.sin(n)+i[1]*Math.cos(n),s[2]=i[2],e[0]=s[0]+r[0],e[1]=s[1]+r[1],e[2]=s[2]+r[2],e}function Qi(e,t){var r=e[0],n=e[1],i=e[2],s=t[0],a=t[1],o=t[2],c=Math.sqrt((r*r+n*n+i*i)*(s*s+a*a+o*o)),l=c&&at(e,t)/c;return Math.acos(Math.min(Math.max(l,-1),1))}function es(e){return e[0]=0,e[1]=0,e[2]=0,e}function ts(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function rs(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function ns(e,t){var r=e[0],n=e[1],i=e[2],s=t[0],a=t[1],o=t[2];return Math.abs(r-s)<=M*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(n-a)<=M*Math.max(1,Math.abs(n),Math.abs(a))&&Math.abs(i-o)<=M*Math.max(1,Math.abs(i),Math.abs(o))}var is=vr,ss=yr,as=xr,os=_r,cs=Sr,ls=gr,us=wr,ds=(function(){var e=pr();return function(t,r,n,i,s,a){var o,c;for(r||(r=3),n||(n=0),i?c=Math.min(i*r+n,t.length):c=t.length,o=n;o<c;o+=r)e[0]=t[o],e[1]=t[o+1],e[2]=t[o+2],s(e,e,a),t[o]=e[0],t[o+1]=e[1],t[o+2]=e[2];return t}})();var sc=Math.PI/180;var hs=Math.PI/180,ac=180/Math.PI,pe=hs;var V=1,J=2;var ut=8,dt=16,fs=32;var ms=16384;var Ne=65536,Er=1<<17,ps=1<<18,gs=1<<19,vs=1<<20,ys=1<<21,xs=1<<22,_s=1<<23,oc=1<<24,Pe=1<<25,Ss=1<<26,cc=1<<27,lc=1<<28,uc=1<<29,ke=1<<30,dc=1<<31;var hc=1<<25,fc=1<<28,mc=1<<29,pc=1<<30,gc=1<<31,vc=V|J,yc=V|Ne|J|Pe|ke,xc=V|Ne|J,_c=V|Er|J|Pe|ke,Sc=fs|ut|dt,wc=V|dt|ut,ws=V|Pe|ke|J|Ss,Ac=ps|gs|vs|ys|xs|_s,Ec=V|ut|dt|Pe|ke,zc=V|Ne|J,Tc=V|J,bc=V|Ne|J|Er,Lc=ws|ms,Rc=Number.MAX_SAFE_INTEGER-1;var zr=256,As=256,Es=8192,zs=2048,Ts=512,bs=256,Ls=zr*2,Rs=256,ot=32;var Tr=(e=>(e[e.Name=0]="Name",e[e.CdTrack=1]="CdTrack",e[e.Sky=2]="Sky",e[e.SkyAxis=3]="SkyAxis",e[e.SkyRotate=4]="SkyRotate",e[e.StatusBar=5]="StatusBar",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+Es]="Sounds",e[e.Images=e.Sounds+zs]="Images",e[e.Lights=e.Images+Ts]="Lights",e[e.ShadowLights=e.Lights+As]="ShadowLights",e[e.Items=e.ShadowLights+Rs]="Items",e[e.PlayerSkins=e.Items+bs]="PlayerSkins",e[e.General=e.PlayerSkins+zr]="General",e[e.WheelWeapons=e.General+Ls]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+ot]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+ot]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+ot]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(Tr||{}),Mc=Tr.MaxConfigStrings;var P=(e=>(e[e.bad=0]="bad",e[e.muzzleflash=1]="muzzleflash",e[e.muzzleflash2=2]="muzzleflash2",e[e.temp_entity=3]="temp_entity",e[e.layout=4]="layout",e[e.inventory=5]="inventory",e[e.nop=6]="nop",e[e.disconnect=7]="disconnect",e[e.reconnect=8]="reconnect",e[e.sound=9]="sound",e[e.print=10]="print",e[e.stufftext=11]="stufftext",e[e.serverdata=12]="serverdata",e[e.configstring=13]="configstring",e[e.spawnbaseline=14]="spawnbaseline",e[e.centerprint=15]="centerprint",e[e.download=16]="download",e[e.playerinfo=17]="playerinfo",e[e.packetentities=18]="packetentities",e[e.deltapacketentities=19]="deltapacketentities",e[e.frame=20]="frame",e))(P||{}),A=(e=>(e[e.GUNSHOT=0]="GUNSHOT",e[e.BLOOD=1]="BLOOD",e[e.BLASTER=2]="BLASTER",e[e.RAILTRAIL=3]="RAILTRAIL",e[e.SHOTGUN=4]="SHOTGUN",e[e.EXPLOSION1=5]="EXPLOSION1",e[e.EXPLOSION2=6]="EXPLOSION2",e[e.ROCKET_EXPLOSION=7]="ROCKET_EXPLOSION",e[e.GRENADE_EXPLOSION=8]="GRENADE_EXPLOSION",e[e.SPARKS=9]="SPARKS",e[e.SPLASH=10]="SPLASH",e[e.BUBBLETRAIL=11]="BUBBLETRAIL",e[e.SCREEN_SPARKS=12]="SCREEN_SPARKS",e[e.SHIELD_SPARKS=13]="SHIELD_SPARKS",e[e.BULLET_SPARKS=14]="BULLET_SPARKS",e[e.LASER_SPARKS=15]="LASER_SPARKS",e[e.PARASITE_ATTACK=16]="PARASITE_ATTACK",e[e.ROCKET_EXPLOSION_WATER=17]="ROCKET_EXPLOSION_WATER",e[e.GRENADE_EXPLOSION_WATER=18]="GRENADE_EXPLOSION_WATER",e[e.MEDIC_CABLE_ATTACK=19]="MEDIC_CABLE_ATTACK",e[e.BFG_EXPLOSION=20]="BFG_EXPLOSION",e[e.BFG_BIGEXPLOSION=21]="BFG_BIGEXPLOSION",e[e.BOSSTPORT=22]="BOSSTPORT",e[e.BFG_LASER=23]="BFG_LASER",e[e.GRAPPLE_CABLE=24]="GRAPPLE_CABLE",e[e.WELDING_SPARKS=25]="WELDING_SPARKS",e[e.GREENBLOOD=26]="GREENBLOOD",e[e.BLUEHYPERBLASTER=27]="BLUEHYPERBLASTER",e[e.PLASMA_EXPLOSION=28]="PLASMA_EXPLOSION",e[e.TUNNEL_SPARKS=29]="TUNNEL_SPARKS",e[e.BLASTER2=30]="BLASTER2",e[e.RAILTRAIL2=31]="RAILTRAIL2",e[e.FLAME=32]="FLAME",e[e.LIGHTNING=33]="LIGHTNING",e[e.DEBUGTRAIL=34]="DEBUGTRAIL",e[e.PLAIN_EXPLOSION=35]="PLAIN_EXPLOSION",e[e.FLASHLIGHT=36]="FLASHLIGHT",e[e.FORCEWALL=37]="FORCEWALL",e[e.HEATBEAM=38]="HEATBEAM",e[e.MONSTER_HEATBEAM=39]="MONSTER_HEATBEAM",e[e.STEAM=40]="STEAM",e[e.BUBBLETRAIL2=41]="BUBBLETRAIL2",e[e.MOREBLOOD=42]="MOREBLOOD",e[e.HEATBEAM_SPARKS=43]="HEATBEAM_SPARKS",e[e.HEATBEAM_STEAM=44]="HEATBEAM_STEAM",e[e.CHAINFIST_SMOKE=45]="CHAINFIST_SMOKE",e[e.ELECTRIC_SPARKS=46]="ELECTRIC_SPARKS",e[e.TRACKER_EXPLOSION=47]="TRACKER_EXPLOSION",e[e.TELEPORT_EFFECT=48]="TELEPORT_EFFECT",e[e.DBALL_GOAL=49]="DBALL_GOAL",e[e.WIDOWBEAMOUT=50]="WIDOWBEAMOUT",e[e.NUKEBLAST=51]="NUKEBLAST",e[e.WIDOWSPLASH=52]="WIDOWSPLASH",e[e.EXPLOSION1_BIG=53]="EXPLOSION1_BIG",e[e.EXPLOSION1_NP=54]="EXPLOSION1_NP",e[e.FLECHETTE=55]="FLECHETTE",e))(A||{}),Ms=class{constructor(e){e instanceof Uint8Array?this.view=new DataView(e.buffer,e.byteOffset,e.byteLength):this.view=new DataView(e),this.offset=0,this.length=this.view.byteLength}getPosition(){return this.offset}seek(e){if(e<0||e>this.length)throw new Error(`Seek out of bounds: ${e} (length: ${this.length})`);this.offset=e}hasMore(){return this.offset<this.length}readChar(){let e=this.view.getInt8(this.offset);return this.offset+=1,e}readByte(){let e=this.view.getUint8(this.offset);return this.offset+=1,e}readShort(){let e=this.view.getInt16(this.offset,!0);return this.offset+=2,e}readLong(){let e=this.view.getInt32(this.offset,!0);return this.offset+=4,e}readFloat(){let e=this.view.getFloat32(this.offset,!0);return this.offset+=4,e}readString(){let e="";for(;this.offset<this.length;){let t=this.readChar();if(t===-1||t===0)break;e+=String.fromCharCode(t)}return e}readStringLine(){let e="";for(;this.offset<this.length;){let t=this.readChar();if(t===-1||t===0||t===10)break;e+=String.fromCharCode(t)}return e}readCoord(){return this.readShort()*(1/8)}readAngle(){return this.readChar()*(360/256)}readAngle16(){return this.readShort()*360/65536}readData(e){if(this.offset+e>this.length)throw new Error(`Read out of bounds: ${this.offset+e} (length: ${this.length})`);let t=new Uint8Array(this.view.buffer,this.view.byteOffset+this.offset,e);return this.offset+=e,new Uint8Array(t)}readPos(e){e.x=this.readCoord(),e.y=this.readCoord(),e.z=this.readCoord()}readDir(e){if(this.readByte()>=162){e.x=0,e.y=0,e.z=0;return}e.x=0,e.y=0,e.z=0}};function Ns(){let e=new Uint32Array(256);for(let t=0;t<256;t+=1){let r=t;for(let n=0;n<8;n+=1)r=(r&1)!==0?3988292384^r>>>1:r>>>1;e[t]=r>>>0}return e}var Nc=Ns();var Pc=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"}]);var Ps=19,kc=8+Ps*8;var lt=4,ct=7*lt,Oc=[{index:0,size:3,type:5126,stride:ct,offset:0},{index:1,size:2,type:5126,stride:ct,offset:3*lt},{index:2,size:2,type:5126,stride:ct,offset:5*lt}];var Ic=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]);var br=class{constructor(){this._position=k.create(),this._angles=k.create(),this._bobAngles=k.create(),this._bobOffset=k.create(),this._kickAngles=k.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}get position(){return this._position}set position(e){k.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){k.copy(this._angles,e),this._dirty=!0}get bobAngles(){return this._bobAngles}set bobAngles(e){k.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){k.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){k.copy(this._bobOffset,e),this._dirty=!0}get rollAngle(){return this._rollAngle}set rollAngle(e){this._rollAngle=e,this._dirty=!0}get fov(){return this._fov}set fov(e){this._fov=e,this._dirty=!0}get aspect(){return this._aspect}set aspect(e){this._aspect=e,this._dirty=!0}get viewMatrix(){return this.updateMatrices(),this._viewMatrix}get projectionMatrix(){return this.updateMatrices(),this._projectionMatrix}get viewProjectionMatrix(){return this.updateMatrices(),this._viewProjectionMatrix}getViewmodelProjectionMatrix(e){let t=I.create();return I.perspective(t,e*pe,this._aspect,this._near,this._far),t}updateMatrices(){if(!this._dirty)return;I.perspective(this._projectionMatrix,this._fov*pe,this._aspect,this._near,this._far);let e=I.fromValues(0,-1,0,0,0,0,1,0,-1,0,0,0,0,0,0,1),t=this._angles[0]+this._bobAngles[0]+this._kickAngles[0],r=this._angles[1]+this._bobAngles[1]+this._kickAngles[1],n=this._angles[2]+this._bobAngles[2]+this._kickAngles[2]+this._rollAngle,i=t*pe,s=r*pe,a=n*pe,o=I.create();I.identity(o),I.rotateZ(o,o,-s),I.rotateY(o,o,-i),I.rotateX(o,o,-a);let c=I.create();I.multiply(c,e,o);let l=k.add(k.create(),this._position,this._bobOffset),u=k.negate(k.create(),l),d=k.create();k.transformMat4(d,u,o);let h=k.fromValues(d[1]||0,d[2]||0,d[0]||0);I.copy(this._viewMatrix,c),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 ks=class{constructor(e){this.buffer=e,this.view=new DataView(e),this.offset=0}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(this.offset+=4,e<0||e>262144)return console.warn(`DemoReader: Invalid block length ${e} at offset ${this.offset-4}`),null;if(this.offset+e>this.buffer.byteLength)return console.warn(`DemoReader: Incomplete block. Expected ${e} bytes, but only ${this.buffer.byteLength-this.offset} remain.`),null;let t=this.buffer.slice(this.offset,this.offset+e);return this.offset+=e,{length:e,data:new Ms(t)}}reset(){this.offset=0}getOffset(){return this.offset}},ht=1,ft=2,mt=4,pt=8,gt=16,vt=32,Lr=64,Os=128,Is=256,yt=512,xt=1024,_t=2048,ze=4096,Te=16384,Cs=32768,be=65536,St=1<<17,Le=1<<18,Re=1<<19,wt=1<<20,At=1<<21,Et=1<<22,Ds=1<<23,zt=1<<24,Me=1<<25,Tt=1<<26,bt=1<<27,ie=()=>({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}),Ar=()=>({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)}),Fs=class{constructor(e,t){this.stream=e,this.handler=t}parseMessage(){for(;this.stream.hasMore();){let e=this.stream.readByte();if(e===-1)break;switch(e){case P.nop:break;case P.disconnect:this.handler?this.handler.onDisconnect():console.log("Server disconnected");break;case P.reconnect:this.handler?this.handler.onReconnect():console.log("Server reconnect");break;case P.print:let t=this.stream.readByte(),r=this.stream.readString();this.handler?this.handler.onPrint(t,r):console.log(`[Server Print ${t}]: ${r}`);break;case P.serverdata:this.parseServerData();break;case P.configstring:this.parseConfigString();break;case P.spawnbaseline:this.parseSpawnBaseline();break;case P.centerprint:let n=this.stream.readString();this.handler?this.handler.onCenterPrint(n):console.log(`[Center Print]: ${n}`);break;case P.download:this.parseDownload();break;case P.frame:this.parseFrame();break;case P.packetentities:this.parsePacketEntities(!1);break;case P.deltapacketentities:this.parsePacketEntities(!0);break;case P.stufftext:let i=this.stream.readString();this.handler?this.handler.onStuffText(i):console.log(`[StuffText]: ${i}`);break;case P.layout:let s=this.stream.readString();this.handler&&this.handler.onLayout(s);break;case P.inventory:this.parseInventory();break;case P.sound:this.parseSound();break;case P.muzzleflash:this.parseMuzzleFlash();break;case P.muzzleflash2:this.parseMuzzleFlash2();break;case P.temp_entity:this.parseTempEntity();break;default:console.warn(`Unknown server command: ${e}`);return}}}parseServerData(){let e=this.stream.readLong(),t=this.stream.readLong(),r=this.stream.readByte(),n=this.stream.readString(),i=this.stream.readShort(),s=this.stream.readString();this.handler?this.handler.onServerData(e,t,r,n,i,s):console.log(`Server Data: Protocol ${e}, Level ${s}, GameDir ${n}`)}parseConfigString(){let e=this.stream.readShort(),t=this.stream.readString();this.handler&&this.handler.onConfigString(e,t)}parseDownload(){let e=this.stream.readShort(),t=this.stream.readByte(),r;e>0&&(r=this.stream.readData(e)),this.handler&&this.handler.onDownload(e,t,r)}parseInventory(){let t=new Array(256);for(let r=0;r<256;r++)t[r]=this.stream.readShort();this.handler&&this.handler.onInventory(t)}parseSound(){let e=this.stream.readByte(),t=this.stream.readByte(),r,n,i,s,a;if(e&1&&(r=this.stream.readByte()),e&2&&(n=this.stream.readByte()),e&16&&(i=this.stream.readByte()),e&8&&(s=this.stream.readShort()),e&4){let o={x:0,y:0,z:0};this.stream.readPos(o),a=o}this.handler&&this.handler.onSound(e,t,r,n,i,s,a)}parseMuzzleFlash(){let e=this.stream.readShort(),t=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash(e,t)}parseMuzzleFlash2(){let e=this.stream.readShort(),t=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash2(e,t)}parseTempEntity(){let e=this.stream.readByte(),t={x:0,y:0,z:0},r={x:0,y:0,z:0},n={x:0,y:0,z:0},i,s,a,o,c;switch(e){case A.BLOOD:this.stream.readPos(t),this.stream.readDir(n);break;case A.GUNSHOT:case A.SPARKS:case A.BULLET_SPARKS:case A.SCREEN_SPARKS:case A.SHIELD_SPARKS:case A.SHOTGUN:this.stream.readPos(t),this.stream.readDir(n);break;case A.SPLASH:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte();break;case A.LASER_SPARKS:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte();break;case A.BLUEHYPERBLASTER:this.stream.readPos(t),this.stream.readPos(n);break;case A.BLASTER:this.stream.readPos(t),this.stream.readDir(n);break;case A.RAILTRAIL:this.stream.readPos(t),this.stream.readPos(r);break;case A.EXPLOSION2:case A.GRENADE_EXPLOSION:case A.GRENADE_EXPLOSION_WATER:case A.PLASMA_EXPLOSION:case A.EXPLOSION1:case A.EXPLOSION1_BIG:case A.ROCKET_EXPLOSION:case A.ROCKET_EXPLOSION_WATER:case A.EXPLOSION1_NP:case A.BFG_EXPLOSION:case A.BFG_BIGEXPLOSION:this.stream.readPos(t);break;case A.BFG_LASER:this.stream.readPos(t),this.stream.readPos(r);break;case A.BUBBLETRAIL:this.stream.readPos(t),this.stream.readPos(r);break;case A.PARASITE_ATTACK:case A.MEDIC_CABLE_ATTACK:a=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r);break;case A.BOSSTPORT:this.stream.readPos(t);break;case A.GRAPPLE_CABLE:a=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r),this.stream.readPos(n);break;case A.WELDING_SPARKS:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte();break;case A.GREENBLOOD:this.stream.readPos(t),this.stream.readDir(n);break;case A.TUNNEL_SPARKS:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte();break;case A.BLASTER2:case A.FLECHETTE:this.stream.readPos(t),this.stream.readDir(n);break;case A.LIGHTNING:o=this.stream.readShort(),c=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r);break;case A.DEBUGTRAIL:this.stream.readPos(t),this.stream.readPos(r);break;case A.PLAIN_EXPLOSION:this.stream.readPos(t);break;case A.FLASHLIGHT:this.stream.readPos(t),a=this.stream.readShort();break;case A.FORCEWALL:this.stream.readPos(t),this.stream.readPos(r),s=this.stream.readByte();break;case A.HEATBEAM:a=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r),this.stream.readPos(n);break;case A.MONSTER_HEATBEAM:a=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r),this.stream.readPos(n);break;case A.HEATBEAM_SPARKS:case A.HEATBEAM_STEAM:this.stream.readPos(t),this.stream.readDir(n);break;case A.STEAM:this.stream.readShort()!==-1?(i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte(),this.stream.readShort(),this.stream.readLong()):(i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte(),this.stream.readShort());break;case A.BUBBLETRAIL2:this.stream.readPos(t),this.stream.readPos(r);break;case A.MOREBLOOD:this.stream.readPos(t),this.stream.readDir(n);break;case A.CHAINFIST_SMOKE:this.stream.readPos(t);break;case A.ELECTRIC_SPARKS:this.stream.readPos(t),this.stream.readDir(n);break;case A.TRACKER_EXPLOSION:this.stream.readPos(t);break;case A.TELEPORT_EFFECT:case A.DBALL_GOAL:this.stream.readPos(t);break;case A.WIDOWBEAMOUT:this.stream.readShort(),this.stream.readPos(t);break;case A.NUKEBLAST:this.stream.readPos(t);break;case A.WIDOWSPLASH:this.stream.readPos(t);break;default:console.warn(`CL_ParseTEnt: bad type ${e}`);break}this.handler&&this.handler.onTempEntity(e,t,r,n,i,s,a,o,c)}parseSpawnBaseline(){let e=this.parseEntityBits(),t=ie();this.parseDelta(ie(),t,e.number,e.bits),this.handler&&this.handler.onSpawnBaseline(t)}parseFrame(){let e=this.stream.readLong(),t=this.stream.readLong(),r=this.stream.readByte(),n=this.stream.readByte(),i=this.stream.readData(n),s=this.stream.readByte();if(s!==P.playerinfo)throw new Error(`Expected svc_playerinfo after svc_frame, got ${s}`);let a=this.parsePlayerState(),o=this.stream.readByte();if(o!==P.packetentities&&o!==P.deltapacketentities)throw new Error(`Expected svc_packetentities after svc_playerinfo, got ${o}`);let c=o===P.deltapacketentities,l=this.collectPacketEntities();this.handler&&this.handler.onFrame({serverFrame:e,deltaFrame:t,surpressCount:r,areaBytes:n,areaBits:i,playerState:a,packetEntities:{delta:c,entities:l}})}parsePlayerState(){let e=Ar(),t=this.stream.readShort();t&1&&(e.pm_type=this.stream.readByte()),t&2&&(e.origin.x=this.stream.readShort()*.125,e.origin.y=this.stream.readShort()*.125,e.origin.z=this.stream.readShort()*.125),t&4&&(e.velocity.x=this.stream.readShort()*.125,e.velocity.y=this.stream.readShort()*.125,e.velocity.z=this.stream.readShort()*.125),t&8&&(e.pm_time=this.stream.readByte()),t&16&&(e.pm_flags=this.stream.readByte()),t&32&&(e.gravity=this.stream.readShort()),t&64&&(e.delta_angles.x=this.stream.readShort()*(180/32768),e.delta_angles.y=this.stream.readShort()*(180/32768),e.delta_angles.z=this.stream.readShort()*(180/32768)),t&128&&(e.viewoffset.x=this.stream.readChar()*.25,e.viewoffset.y=this.stream.readChar()*.25,e.viewoffset.z=this.stream.readChar()*.25),t&256&&(e.viewangles.x=this.stream.readAngle16(),e.viewangles.y=this.stream.readAngle16(),e.viewangles.z=this.stream.readAngle16()),t&512&&(e.kick_angles.x=this.stream.readChar()*.25,e.kick_angles.y=this.stream.readChar()*.25,e.kick_angles.z=this.stream.readChar()*.25),t&4096&&(e.gun_index=this.stream.readByte()),t&8192&&(e.gun_frame=this.stream.readByte(),e.gun_offset.x=this.stream.readChar()*.25,e.gun_offset.y=this.stream.readChar()*.25,e.gun_offset.z=this.stream.readChar()*.25,e.gun_angles.x=this.stream.readChar()*.25,e.gun_angles.y=this.stream.readChar()*.25,e.gun_angles.z=this.stream.readChar()*.25),t&1024&&(e.blend[0]=this.stream.readByte(),e.blend[1]=this.stream.readByte(),e.blend[2]=this.stream.readByte(),e.blend[3]=this.stream.readByte()),t&2048&&(e.fov=this.stream.readByte()),t&16384&&(e.rdflags=this.stream.readByte());let r=this.stream.readLong();for(let n=0;n<32;n++)r&1<<n&&(e.stats[n]=this.stream.readShort());return e}parsePacketEntities(e){let t=this.collectPacketEntities();this.handler&&this.handler.onFrame({serverFrame:0,deltaFrame:0,surpressCount:0,areaBytes:0,areaBits:new Uint8Array,playerState:Ar(),packetEntities:{delta:e,entities:t}})}collectPacketEntities(){let e=[];for(;;){let t=this.parseEntityBits();if(t.number===0)break;let r=ie();this.parseDelta(ie(),r,t.number,t.bits),e.push(r)}return e}parseEntityBits(){let e=this.stream.readByte();e&Os&&(e|=this.stream.readByte()<<8),e&Cs&&(e|=this.stream.readByte()<<16),e&Ds&&(e|=this.stream.readByte()<<24);let t;return e&Is?t=this.stream.readShort():t=this.stream.readByte(),{number:t,bits:e}}parseDelta(e,t,r,n){t.number=e.number,t.modelindex=e.modelindex,t.modelindex2=e.modelindex2,t.modelindex3=e.modelindex3,t.modelindex4=e.modelindex4,t.frame=e.frame,t.skinnum=e.skinnum,t.effects=e.effects,t.renderfx=e.renderfx,t.origin.x=e.origin.x,t.origin.y=e.origin.y,t.origin.z=e.origin.z,t.old_origin.x=e.origin.x,t.old_origin.y=e.origin.y,t.old_origin.z=e.origin.z,t.angles.x=e.angles.x,t.angles.y=e.angles.y,t.angles.z=e.angles.z,t.sound=e.sound,t.event=e.event,t.solid=e.solid,t.number=r,t.bits=n,n&_t&&(t.modelindex=this.stream.readByte()),n&wt&&(t.modelindex2=this.stream.readByte()),n&At&&(t.modelindex3=this.stream.readByte()),n&Et&&(t.modelindex4=this.stream.readByte()),n&gt&&(t.frame=this.stream.readByte()),n&St&&(t.frame=this.stream.readShort()),n&be&&n&Me?t.skinnum=this.stream.readLong():n&be?t.skinnum=this.stream.readByte():n&Me&&(t.skinnum=this.stream.readShort()),n&Te&&n&Re?t.effects=this.stream.readLong():n&Te?t.effects=this.stream.readByte():n&Re&&(t.effects=this.stream.readShort()),n&ze&&n&Le?t.renderfx=this.stream.readLong():n&ze?t.renderfx=this.stream.readByte():n&Le&&(t.renderfx=this.stream.readShort()),n&ht&&(t.origin.x=this.stream.readCoord()),n&ft&&(t.origin.y=this.stream.readCoord()),n&yt&&(t.origin.z=this.stream.readCoord()),n&xt&&(t.angles.x=this.stream.readAngle()),n&mt&&(t.angles.y=this.stream.readAngle()),n&pt&&(t.angles.z=this.stream.readAngle()),n&zt&&this.stream.readPos(t.old_origin),n&Tt&&(t.sound=this.stream.readByte()),n&vt?t.event=this.stream.readByte():t.event=0,n&bt&&(t.solid=this.stream.readShort())}},Lt=(e=>(e[e.Stopped=0]="Stopped",e[e.Playing=1]="Playing",e[e.Paused=2]="Paused",e[e.Finished=3]="Finished",e))(Lt||{}),Rr=class{constructor(){this.reader=null,this.state=0,this.playbackSpeed=1,this.accumulatedTime=0,this.frameDuration=100}setHandler(e){this.handler=e}loadDemo(e){this.reader=new ks(e),this.state=0,this.accumulatedTime=0}play(){this.reader&&(this.state=1)}pause(){this.state===1&&(this.state=2)}stop(){this.state=0,this.reader&&this.reader.reset(),this.accumulatedTime=0}update(e){if(!(this.state!==1||!this.reader))for(this.accumulatedTime+=e*1e3*this.playbackSpeed;this.accumulatedTime>=this.frameDuration;){if(!this.reader.hasMore()){this.state=3;return}let t=this.reader.readNextBlock();if(!t){this.state=3;return}new Fs(t.data,this.handler).parseMessage(),this.accumulatedTime-=this.frameDuration}}getState(){return this.state}};var Mr={x:0,y:0,z:0};var Hc=Math.PI/180;function ge(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function ae(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function $(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function Bs(e){return $(e,e)}function Oe(e){return Math.sqrt(Bs(e))}function Nr(e){let t=Oe(e);return t===0?e:ae(e,1/t)}var Pr=0,kr=1,Or=2,Us=Math.PI/180,Wc=180/Math.PI;function Rt(e,t){switch(t){case Pr:return e.x;case kr:return e.y;case Or:default:return e.z}}function Mt(e){return e*Us}function se(e){let t=e%360;return t<0?360+t:t}function ve(e){let t=Mt(Rt(e,kr)),r=Mt(Rt(e,Pr)),n=Mt(Rt(e,Or)),i=Math.sin(t),s=Math.cos(t),a=Math.sin(r),o=Math.cos(r),c=Math.sin(n),l=Math.cos(n),u={x:o*s,y:o*i,z:-a},d={x:-c*a*s-l*-i,y:-c*a*i-l*s,z:-c*o},h={x:l*a*s-c*-i,y:l*a*i-c*s,z:l*o};return{forward:u,right:d,up:h}}var H=1,Q=2;var Pt=8,kt=16,Gs=32;var Vs=16384;var Ie=65536,Ir=1<<17,Hs=1<<18,Ws=1<<19,Ks=1<<20,Xs=1<<21,Ys=1<<22,$s=1<<23,Kc=1<<24,Ce=1<<25,js=1<<26,Xc=1<<27,Yc=1<<28,$c=1<<29,De=1<<30,jc=1<<31;var qc=1<<25,Zc=1<<28,Jc=1<<29,Qc=1<<30,el=1<<31;var tl=H|Q,rl=H|Ie|Q|Ce|De,nl=H|Ie|Q,il=H|Ir|Q|Ce|De,sl=Gs|Pt|kt,al=H|kt|Pt,qs=H|Ce|De|Q|js,ol=Hs|Ws|Ks|Xs|Ys|$s,cl=H|Pt|kt|Ce|De,ll=H|Ie|Q,ul=H|Q,dl=H|Ie|Q|Ir,hl=qs|Vs;var fl=Number.MAX_SAFE_INTEGER-1;var Cr=256;var Zs=256,Js=8192,Qs=2048,ea=512,ta=256,ra=Cr*2,na=256,Nt=32;var Dr=(e=>(e[e.Name=0]="Name",e[e.CdTrack=1]="CdTrack",e[e.Sky=2]="Sky",e[e.SkyAxis=3]="SkyAxis",e[e.SkyRotate=4]="SkyRotate",e[e.StatusBar=5]="StatusBar",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+Js]="Sounds",e[e.Images=e.Sounds+Qs]="Images",e[e.Lights=e.Images+ea]="Lights",e[e.ShadowLights=e.Lights+Zs]="ShadowLights",e[e.Items=e.ShadowLights+na]="Items",e[e.PlayerSkins=e.Items+ta]="PlayerSkins",e[e.General=e.PlayerSkins+Cr]="General",e[e.WheelWeapons=e.General+ra]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Nt]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Nt]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Nt]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(Dr||{}),ml=Dr.MaxConfigStrings;var te=(e=>(e[e.None=0]="None",e[e.Feet=1]="Feet",e[e.Waist=2]="Waist",e[e.Under=3]="Under",e))(te||{});var F=(e=>(e[e.Ducked=1]="Ducked",e[e.JumpHeld=2]="JumpHeld",e[e.OnGround=4]="OnGround",e[e.TimeWaterJump=8]="TimeWaterJump",e[e.TimeLand=16]="TimeLand",e[e.TimeTeleport=32]="TimeTeleport",e[e.NoPositionalPrediction=64]="NoPositionalPrediction",e[e.OnLadder=128]="OnLadder",e[e.NoAngularPrediction=256]="NoAngularPrediction",e[e.IgnorePlayerCollision=512]="IgnorePlayerCollision",e[e.TimeTrick=1024]="TimeTrick",e))(F||{});function W(e,t){return(e&t)!==0}var Ot=(e=>(e[e.Normal=0]="Normal",e[e.Grapple=1]="Grapple",e[e.NoClip=2]="NoClip",e[e.Spectator=3]="Spectator",e[e.Dead=4]="Dead",e[e.Gib=5]="Gib",e[e.Freeze=6]="Freeze",e))(Ot||{}),K=(e=>(e[e.None=0]="None",e[e.Attack=1]="Attack",e[e.Use=2]="Use",e[e.Holster=4]="Holster",e[e.Jump=8]="Jump",e[e.Crouch=16]="Crouch",e[e.Any=128]="Any",e))(K||{});function Fr(e){let{velocity:t,frametime:r,onGround:n,groundIsSlick:i,onLadder:s,waterlevel:a,pmFriction:o,pmStopSpeed:c,pmWaterFriction:l}=e,u=Oe(t);if(u<1)return{x:0,y:0,z:t.z};let d=0;if(n&&!i||s){let p=u<c?c:u;d+=p*o*r}a>0&&!s&&(d+=u*l*a*r);let h=u-d;if(h<0&&(h=0),h===u)return t;let m=h/u;return ae(t,m)}function It(e){let{velocity:t,wishdir:r,wishspeed:n,accel:i,frametime:s}=e,a=$(t,r),o=n-a;if(o<=0)return t;let c=i*s*n;return c>o&&(c=o),{x:t.x+r.x*c,y:t.y+r.y*c,z:t.z+r.z*c}}function Br(e){let{velocity:t,wishdir:r,wishspeed:n,accel:i,frametime:s}=e,a=Math.min(n,30),o=$(t,r),c=a-o;if(c<=0)return t;let l=i*n*s;return l>c&&(l=c),{x:t.x+r.x*l,y:t.y+r.y*l,z:t.z+r.z*l}}function Ur(e){let{forward:t,right:r,cmd:n,maxSpeed:i}=e,s={x:t.x*n.forwardmove+r.x*n.sidemove,y:t.y*n.forwardmove+r.y*n.sidemove,z:0},a=Oe(s);if(a>i){let o=i/a;s=ae(s,o),a=i}return{wishdir:a===0?s:Nr(s),wishspeed:a}}function Gr(e){let{forward:t,right:r,cmd:n,maxSpeed:i}=e,s={x:t.x*n.forwardmove+r.x*n.sidemove,y:t.y*n.forwardmove+r.y*n.sidemove,z:0};n.upmove>10?s=ge(s,{x:0,y:0,z:n.upmove}):n.upmove<-10?s=ge(s,{x:0,y:0,z:n.upmove}):s=ge(s,{x:0,y:0,z:10});let a=Oe(s);if(a>i){let o=i/a;s=ae(s,o),a=i}return a*=.5,{wishdir:a===0?s:Nr(s),wishspeed:a}}function ia(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function sa(e){return e>89&&e<180?89:e<271&&e>=180?271:e}function Fe(e){let{pmFlags:t,cmdAngles:r,deltaAngles:n}=e,i;(t&32)!==0?i={x:0,y:r.y+n.y,z:0}:(i=ia(r,n),i={...i,x:sa(i.x)});let s=ve(i);return{viewangles:i,...s}}var Vr=200,Hr=200,Wr=200,Kr=140,Xr=150,Yr=3;function aa(e){let t=se(e);return t>89&&t<180?89:t<271&&t>=180?271:t}function $r(e,t){return{x:aa(e.x+t.x),y:se(e.y+t.y),z:se(e.z+t.z)}}function jr(e,t){let r=t.sensitivityX??t.sensitivity,n=(t.sensitivityY??t.sensitivity)*(t.invertY?-1:1);return{x:e.deltaY*n,y:e.deltaX*r,z:0}}var oa={pmFriction:6,pmStopSpeed:100,pmAccelerate:10,pmAirAccelerate:1,pmWaterAccelerate:4,pmWaterFriction:1,pmMaxSpeed:300,pmDuckSpeed:100,pmWaterSpeed:400,groundIsSlick:!1},ca=800,oe={x:0,y:0,z:0},la=250;function q(){return{origin:oe,velocity:oe,viewangles:oe,pmFlags:F.OnGround,pmType:Ot.Normal,waterlevel:te.None,gravity:ca,deltaAngles:oe,health:0,armor:0,ammo:0}}function qr(e){return e?{...q(),...e,origin:{...e.origin},velocity:{...e.velocity},viewangles:{...e.viewangles},deltaAngles:e.deltaAngles?{...e.deltaAngles}:oe}:q()}function j(e,t,r){return e+(t-e)*r}function Ct(e,t,r){let n=se(t-e);return n>180&&(n-=360),se(e+n*r)}function Be(e,t,r){let n=Math.max(0,Math.min(r,1));return{origin:{x:j(e.origin.x,t.origin.x,n),y:j(e.origin.y,t.origin.y,n),z:j(e.origin.z,t.origin.z,n)},velocity:{x:j(e.velocity.x,t.velocity.x,n),y:j(e.velocity.y,t.velocity.y,n),z:j(e.velocity.z,t.velocity.z,n)},viewangles:{x:Ct(e.viewangles.x,t.viewangles.x,n),y:Ct(e.viewangles.y,t.viewangles.y,n),z:Ct(e.viewangles.z,t.viewangles.z,n)},pmFlags:t.pmFlags,pmType:t.pmType,waterlevel:t.waterlevel,gravity:t.gravity,deltaAngles:t.deltaAngles,client:t.client,health:j(e.health,t.health,n),armor:j(e.armor,t.armor,n),ammo:j(e.ammo,t.ammo,n),centerPrint:t.centerPrint,notify:t.notify}}function ua(e,t,r,n){let i=Math.min(Math.max(t.msec,0),la)/1e3,s=W(e.pmFlags,F.OnGround),a=W(e.pmFlags,F.OnLadder),o=Fr({velocity:e.velocity,frametime:i,onGround:s,groundIsSlick:r.groundIsSlick,onLadder:a,waterlevel:e.waterlevel,pmFriction:r.pmFriction,pmStopSpeed:r.pmStopSpeed,pmWaterFriction:r.pmWaterFriction}),{viewangles:c,forward:l,right:u}=Fe({pmFlags:e.pmFlags,cmdAngles:t.angles,deltaAngles:e.deltaAngles??oe}),d=e.waterlevel>te.None?Gr({forward:l,right:u,cmd:t,maxSpeed:r.pmWaterSpeed}):Ur({forward:l,right:u,cmd:t,maxSpeed:r.pmMaxSpeed});if(e.waterlevel>te.None)o=It({velocity:o,wishdir:d.wishdir,wishspeed:d.wishspeed,accel:r.pmWaterAccelerate,frametime:i});else if(s||a){let p=W(e.pmFlags,F.Ducked)?r.pmDuckSpeed:r.pmMaxSpeed,g=d.wishspeed>p?{wishdir:d.wishdir,wishspeed:p}:d;o=It({velocity:o,wishdir:g.wishdir,wishspeed:g.wishspeed,accel:r.pmAccelerate,frametime:i})}else o=Br({velocity:o,wishdir:d.wishdir,wishspeed:d.wishspeed,accel:r.pmAirAccelerate,frametime:i}),o={...o,z:o.z-e.gravity*i};let m=n(e.origin,ge(e.origin,ae(o,i))).endpos;return{...e,origin:m,velocity:o,viewangles:c}}var ce=class{constructor(t,r={}){this.baseFrame={frame:0,timeMs:0,state:q()};this.commands=[];this.predicted=q();this.settings={...oa,...r},this.trace=t,this.predicted=this.baseFrame.state??q()}setAuthoritative(t){let r=qr(t.state);return this.baseFrame={...t,state:r},this.commands=this.commands.filter(n=>(n.serverFrame??Number.MAX_SAFE_INTEGER)>t.frame),this.recompute()}enqueueCommand(t){return this.commands.push(t),this.recompute()}getPredictedState(){return this.predicted}recompute(){let t=qr(this.baseFrame.state);for(let r of this.commands)t=ua(t,r,this.settings,this.trace);return this.predicted=t,t}};var da={runPitch:.002,runRoll:.005,bobUp:.005,bobPitch:.002,bobRoll:.002,maxBobHeight:6,maxBobAngle:1.2};function ha(e){return{x:Math.max(-14,Math.min(14,e.x)),y:Math.max(-14,Math.min(14,e.y)),z:Math.max(-22,Math.min(30,e.z))}}function fa(e,t,r){return t?e>210?r/400:e>100?r/800:r/1600:0}function ma(e,t,r,n,i){if(t<5)return{bobTime:0,bobCycle:0,bobCycleRun:0,bobFracSin:0};let s=fa(t,n,i),a=e+s,c=W(r,F.Ducked)&&n?a*4:a;return{bobTime:a,bobCycle:Math.floor(c),bobCycleRun:Math.floor(a),bobFracSin:Math.abs(Math.sin(c*Math.PI))}}var le=class{constructor(t={}){this.bobTime=0;this.bobCycle=0;this.bobCycleRun=0;this.bobFracSin=0;this.settings={...da,...t}}addKick(t){t.durationMs<=0||(this.kick={...t,remainingMs:t.durationMs})}get last(){return this.lastSample}sample(t,r){let{forward:n,right:i}=ve(Fe({pmFlags:t.pmFlags,cmdAngles:t.viewangles,deltaAngles:t.deltaAngles??Mr}).viewangles),s=Math.sqrt(t.velocity.x*t.velocity.x+t.velocity.y*t.velocity.y),a=W(t.pmFlags,F.OnGround),o=ma(this.bobTime,s,t.pmFlags,a,r);this.bobTime=o.bobTime,this.bobCycle=o.bobCycle,this.bobCycleRun=o.bobCycleRun,this.bobFracSin=o.bobFracSin;let c=$(t.velocity,n)*this.settings.runPitch,l=$(t.velocity,i)*this.settings.runRoll,u=this.bobFracSin*this.settings.bobPitch*s,d=this.bobFracSin*this.settings.bobRoll*s;W(t.pmFlags,F.Ducked)&&a&&(u*=6,d*=6),c+=Math.min(u,this.settings.maxBobAngle),d=Math.min(d,this.settings.maxBobAngle),this.bobCycle&1&&(d=-d),l+=d;let h=Math.min(this.bobFracSin*s*this.settings.bobUp,this.settings.maxBobHeight),m=0,p=0;if(this.kick&&this.kick.remainingMs>0){let w=Math.max(0,Math.min(1,this.kick.remainingMs/this.kick.durationMs));m+=w*this.kick.pitch,p+=w*this.kick.roll,this.kick.remainingMs=Math.max(0,this.kick.remainingMs-r),this.kick.remainingMs===0&&(this.kick=void 0)}let v={angles:{x:c+m,y:0,z:l+p},offset:ha({x:0,y:0,z:h}),bobCycle:this.bobCycle,bobCycleRun:this.bobCycleRun,bobFracSin:this.bobFracSin,xyspeed:s};return this.lastSample=v,v}};var Ue=(e,t,r,n,i,s)=>{let a=Math.abs(n).toString();for(let o=0;o<a.length;o++){let c=parseInt(a[o]),l=i[c];l&&e.drawPic(t+o*s,r,l)}};var B={HEALTH_X:100,HEALTH_Y:450,ARMOR_X:200,ARMOR_Y:450,AMMO_X:540,AMMO_Y:450,CENTER_PRINT_X:320,CENTER_PRINT_Y:100,WEAPON_ICON_X:10,WEAPON_ICON_Y:450,POWERUP_X:610,POWERUP_Y:450};var Ge=null;var Zr=(e,t,r)=>{if(Ge){let n=(t-Ge.width)/2,i=(r-Ge.height)/2;e.drawPic(n,i,Ge)}};var Gt={x:0,y:0,z:0};var El=Math.PI/180;function Ke(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function _e(e,t){return{x:e.x-t.x,y:e.y-t.y,z:e.z-t.z}}function Vt(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function pa(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function ga(e){return pa(e,e)}function nn(e){return Math.sqrt(ga(e))}function Se(e){let t=nn(e);return t===0?e:Vt(e,1/t)}function va(e,t,r){return{x:e.x<t.x?t.x:e.x>r.x?r.x:e.x,y:e.y<t.y?t.y:e.y>r.y?r.y:e.y,z:e.z<t.z?t.z:e.z>r.z?r.z:e.z}}function ya(e,t,r,n){let i=0;if(t.x<r.x){let s=t.x-r.x;i+=s*s}else if(e.x>n.x){let s=e.x-n.x;i+=s*s}if(t.y<r.y){let s=t.y-r.y;i+=s*s}else if(e.y>n.y){let s=e.y-n.y;i+=s*s}if(t.z<r.z){let s=t.z-r.z;i+=s*s}else if(e.z>n.z){let s=e.z-n.z;i+=s*s}return i}var Ht=0,Wt=1,sn=2,xa=Math.PI/180,_a=180/Math.PI;function xe(e,t){switch(t){case Ht:return e.x;case Wt:return e.y;case sn:default:return e.z}}function He(e){return e*xa}function Sa(e){return e*_a}function Jr(e){let t=e%360;return t<0?360+t:t}function wa(e){let t=He(xe(e,Wt)),r=He(xe(e,Ht)),n=He(xe(e,sn)),i=Math.sin(t),s=Math.cos(t),a=Math.sin(r),o=Math.cos(r),c=Math.sin(n),l=Math.cos(n),u={x:o*s,y:o*i,z:-a},d={x:-c*a*s-l*-i,y:-c*a*i-l*s,z:-c*o},h={x:l*a*s-c*-i,y:l*a*i-c*s,z:l*o};return{forward:u,right:d,up:h}}function Aa(e){let t=xe(e,Ht),r=xe(e,Wt);if(t===0)return r===0?0:r>0?90:270;let n=Sa(Math.atan2(r,t));return n<0?n+360:n}var X=624,Ea=397,za=2567483615,Ta=2147483648,ba=2147483647,Dt=4294967296,La=class{constructor(e=5489){this.state=new Uint32Array(X),this.index=X,this.seed(e)}seed(e){this.state[0]=e>>>0;for(let t=1;t<X;t++){let r=this.state[t-1]^this.state[t-1]>>>30,n=Math.imul(r>>>0,1812433253)+t;this.state[t]=n>>>0}this.index=X}nextUint32(){this.index>=X&&this.twist();let e=this.state[this.index++];return e^=e>>>11,e^=e<<7&2636928640,e^=e<<15&4022730752,e^=e>>>18,e>>>0}twist(){for(let e=0;e<X;e++){let t=this.state[e]&Ta|this.state[(e+1)%X]&ba,r=this.state[(e+Ea)%X]^t>>>1;(t&1)!==0&&(r^=za),this.state[e]=r>>>0}this.index=0}getState(){return{index:this.index,state:Array.from(this.state)}}setState(e){if(e.state.length!==X)throw new Error(`Expected ${X} MT state values, received ${e.state.length}`);this.index=e.index,this.state=Uint32Array.from(e.state,t=>t>>>0)}},Ra=class{constructor(e={}){this.mt=new La(e.seed)}frandom(){return this.mt.nextUint32()/Dt}frandomRange(e,t){return e+(t-e)*this.frandom()}frandomMax(e){return this.frandomRange(0,e)}crandom(){return this.frandomRange(-1,1)}crandomOpen(){let e=Number.EPSILON;return this.frandomRange(-1+e,1)}irandomUint32(){return this.mt.nextUint32()}irandomRange(e,t){if(t-e<=1)return e;let r=t-e,n=Dt-Dt%r,i;do i=this.mt.nextUint32();while(i>=n);return e+i%r}irandom(e){return e<=0?0:this.irandomRange(0,e)}randomTimeRange(e,t){return t<=e?e:this.irandomRange(e,t)}randomTime(e){return this.irandom(e)}randomIndex(e){return this.irandom(e.length)}getState(){return{mt:this.mt.getState()}}setState(e){this.mt.setState(e.mt)}};var Y=1,ee=2;var Kt=8,Xt=16,Ma=32;var Na=16384;var Ye=65536,an=1<<17,Pa=1<<18,ka=1<<19,Oa=1<<20,Ia=1<<21,Ca=1<<22,Da=1<<23,zl=1<<24,$e=1<<25,Fa=1<<26,Tl=1<<27,bl=1<<28,Ll=1<<29,je=1<<30,Rl=1<<31;var Ml=1<<25,Nl=1<<28,Pl=1<<29,kl=1<<30,Ol=1<<31,Il=Y|ee,Cl=Y|Ye|ee|$e|je,Dl=Y|Ye|ee,Fl=Y|an|ee|$e|je,Bl=Ma|Kt|Xt,Ul=Y|Xt|Kt,Ba=Y|$e|je|ee|Fa,Gl=Pa|ka|Oa|Ia|Ca|Da,Vl=Y|Kt|Xt|$e|je,Hl=Y|Ye|ee,Wl=Y|ee,Kl=Y|Ye|ee|an,Xl=Ba|Na,Yl=Number.MAX_SAFE_INTEGER-1;var on=256,Ua=256,Ga=8192,Va=2048,Ha=512,Wa=256,Ka=on*2,Xa=256,Ft=32,cn=(e=>(e[e.Name=0]="Name",e[e.CdTrack=1]="CdTrack",e[e.Sky=2]="Sky",e[e.SkyAxis=3]="SkyAxis",e[e.SkyRotate=4]="SkyRotate",e[e.StatusBar=5]="StatusBar",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+Ga]="Sounds",e[e.Images=e.Sounds+Va]="Images",e[e.Lights=e.Images+Ha]="Lights",e[e.ShadowLights=e.Lights+Ua]="ShadowLights",e[e.Items=e.ShadowLights+Xa]="Items",e[e.PlayerSkins=e.Items+Wa]="PlayerSkins",e[e.General=e.PlayerSkins+on]="General",e[e.WheelWeapons=e.General+Ka]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Ft]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Ft]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Ft]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(cn||{}),$l=cn.MaxConfigStrings;var Ya={...Gt};var jl=Object.freeze({aiflags:0,last_sighting:Ya,trail_time:0,pausetime:0});var Yt=[{name:"classname",type:"string",save:!0},{name:"spawnflags",type:"int",save:!0},{name:"target",type:"string",save:!0},{name:"targetname",type:"string",save:!0},{name:"killtarget",type:"string",save:!0},{name:"team",type:"string",save:!0},{name:"message",type:"string",save:!0},{name:"pathtarget",type:"string",save:!0},{name:"model",type:"string",save:!0},{name:"item",type:"string",save:!0},{name:"map",type:"string",save:!0},{name:"inventory",type:"inventory",save:!0},{name:"origin",type:"vec3",save:!0},{name:"old_origin",type:"vec3",save:!0},{name:"velocity",type:"vec3",save:!0},{name:"avelocity",type:"vec3",save:!0},{name:"angles",type:"vec3",save:!0},{name:"pos1",type:"vec3",save:!0},{name:"pos2",type:"vec3",save:!0},{name:"viewheight",type:"int",save:!0},{name:"mins",type:"vec3",save:!0},{name:"maxs",type:"vec3",save:!0},{name:"absmin",type:"vec3",save:!0},{name:"absmax",type:"vec3",save:!0},{name:"size",type:"vec3",save:!0},{name:"mass",type:"int",save:!0},{name:"gravity",type:"float",save:!0},{name:"movetype",type:"int",save:!0},{name:"movedir",type:"vec3",save:!0},{name:"modelindex",type:"int",save:!0},{name:"frame",type:"int",save:!0},{name:"skin",type:"int",save:!0},{name:"effects",type:"int",save:!0},{name:"renderfx",type:"int",save:!0},{name:"health",type:"int",save:!0},{name:"max_health",type:"int",save:!0},{name:"takedamage",type:"boolean",save:!0},{name:"dmg",type:"int",save:!0},{name:"speed",type:"float",save:!0},{name:"accel",type:"float",save:!0},{name:"decel",type:"float",save:!0},{name:"height",type:"float",save:!0},{name:"deadflag",type:"int",save:!0},{name:"count",type:"int",save:!0},{name:"wait",type:"float",save:!0},{name:"delay",type:"float",save:!0},{name:"timestamp",type:"float",save:!0},{name:"lip",type:"int",save:!0},{name:"state",type:"int",save:!0},{name:"sounds",type:"int",save:!0},{name:"noise_index",type:"int",save:!0},{name:"fly_sound_debounce_time",type:"float",save:!0},{name:"enemy",type:"entity",save:!0},{name:"movetarget",type:"entity",save:!0},{name:"target_ent",type:"entity",save:!0},{name:"goalentity",type:"entity",save:!0},{name:"ideal_yaw",type:"float",save:!0},{name:"yaw_speed",type:"float",save:!0},{name:"search_time",type:"float",save:!0},{name:"attack_finished_time",type:"float",save:!0},{name:"pain_finished_time",type:"float",save:!0},{name:"trail_time",type:"float",save:!0},{name:"groundentity",type:"entity",save:!0},{name:"groundentity_linkcount",type:"int",save:!0},{name:"waterlevel",type:"int",save:!0},{name:"watertype",type:"int",save:!0},{name:"nextthink",type:"float",save:!0},{name:"solid",type:"int",save:!0},{name:"flags",type:"int",save:!0},{name:"svflags",type:"int",save:!0},{name:"think",type:"callback",save:!1},{name:"touch",type:"callback",save:!1},{name:"use",type:"callback",save:!1},{name:"blocked",type:"callback",save:!1},{name:"pain",type:"callback",save:!1},{name:"die",type:"callback",save:!1}];var $a=Yt.filter(e=>e.save||e.type==="callback"),ql=new Map($a.map(e=>[e.name,e]));var Zl=1/40;var ln=(e=>(e[e.Bullets=0]="Bullets",e[e.Shells=1]="Shells",e[e.Rockets=2]="Rockets",e[e.Grenades=3]="Grenades",e[e.Cells=4]="Cells",e[e.Slugs=5]="Slugs",e))(ln||{}),Jl=Object.keys(ln).length/2;function re(e,t){return(e&t)!==0}var ja={jacket:{baseCount:25,maxCount:50,normalProtection:.3,energyProtection:0},combat:{baseCount:50,maxCount:100,normalProtection:.6,energyProtection:.3},body:{baseCount:100,maxCount:200,normalProtection:.8,energyProtection:.6}};function qa(e,t,r){if(e<=0||re(t,130)||!r.armorType||r.armorCount<=0)return{saved:0,remainingArmor:r.armorCount};let n=ja[r.armorType],i=re(t,4)?n.energyProtection:n.normalProtection,s=Math.ceil(i*e);return s>=r.armorCount&&(s=r.armorCount),s<=0?{saved:0,remainingArmor:r.armorCount}:{saved:s,remainingArmor:r.armorCount-s}}function Za(e,t,r,n,i,s={}){if(i.health<=0||e<=0)return{saved:0,remainingCells:i.cellCount};if(re(t,258))return{saved:0,remainingCells:i.cellCount};if(!i.type||i.cellCount<=0)return{saved:0,remainingCells:i.cellCount};let{forward:a}=wa(i.angles),o={x:r.x-i.origin.x,y:r.y-i.origin.y,z:r.z-i.origin.z},c=Math.hypot(o.x,o.y,o.z);if(i.type==="screen"&&c>0){let f={x:o.x/c,y:o.y/c,z:o.z/c};if(f.x*a.x+f.y*a.y+f.z*a.z<=.3)return{saved:0,remainingCells:i.cellCount}}let l=s.ctfMode??!1,u=i.type==="screen"||l?1:2,d=i.type==="screen"?e/3:2*e/3;d=Math.max(1,d);let h=i.cellCount*u;re(t,4)&&(h=Math.max(1,Math.floor(h/2))),h>d&&(h=Math.floor(d));let m=h/u;re(t,4)&&(m*=2),m=Math.max(1,Math.floor(m));let p=Math.max(u,m),g=Math.max(0,i.cellCount-p);return{saved:h,remainingCells:g}}var un={weapon_blaster:{type:"weapon",id:"weapon_blaster",name:"Blaster",weaponId:"blaster",ammoType:null,initialAmmo:0,pickupAmmo:0,fireRate:.5},weapon_shotgun:{type:"weapon",id:"weapon_shotgun",name:"Shotgun",weaponId:"shotgun",ammoType:1,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_supershotgun:{type:"weapon",id:"weapon_supershotgun",name:"Super Shotgun",weaponId:"super_shotgun",ammoType:1,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_machinegun:{type:"weapon",id:"weapon_machinegun",name:"Machinegun",weaponId:"machinegun",ammoType:0,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_chaingun:{type:"weapon",id:"weapon_chaingun",name:"Chaingun",weaponId:"chaingun",ammoType:0,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_grenadelauncher:{type:"weapon",id:"weapon_grenadelauncher",name:"Grenade Launcher",weaponId:"grenade_launcher",ammoType:3,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_rocketlauncher:{type:"weapon",id:"weapon_rocketlauncher",name:"Rocket Launcher",weaponId:"rocket_launcher",ammoType:2,initialAmmo:5,pickupAmmo:5,fireRate:1},weapon_hyperblaster:{type:"weapon",id:"weapon_hyperblaster",name:"HyperBlaster",weaponId:"hyperblaster",ammoType:4,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_railgun:{type:"weapon",id:"weapon_railgun",name:"Railgun",weaponId:"railgun",ammoType:5,initialAmmo:10,pickupAmmo:10,fireRate:1.5},weapon_bfg:{type:"weapon",id:"weapon_bfg",name:"BFG10K",weaponId:"bfg10k",ammoType:4,initialAmmo:50,pickupAmmo:50,fireRate:1}};var Ql=1<<24;function Qr(e){return{mins:{x:e.origin.x+e.mins.x,y:e.origin.y+e.mins.y,z:e.origin.z+e.mins.z},maxs:{x:e.origin.x+e.maxs.x,y:e.origin.y+e.maxs.y,z:e.origin.z+e.maxs.z}}}function Ja(e,t){let r=Qr(e),n=Qr(t),i=ya(r.mins,r.maxs,n.mins,n.maxs);return Math.sqrt(i)}function Qa(e,t){if(t===0)return{x:0,y:0,z:0};let r=He(e);return{x:Math.cos(r)*t,y:Math.sin(r)*t,z:0}}function $t(e,t,r){let n=Qa(t,r),i=e.origin;return i.x+=n.x,i.y+=n.y,i.z+=n.z,!0}function qe(e,t){let r=Jr(e.angles.y),n=e.ideal_yaw;if(r===n){e.angles.y=r;return}let i=e.yaw_speed*t*10,s=n-r;n>r?s>=180&&(s-=360):s<=-180&&(s+=360),s>i?s=i:s<-i&&(s=-i),e.angles.y=Jr(r+s)}function jt(e,t){if(!t)return;let r={x:t.origin.x-e.origin.x,y:t.origin.y-e.origin.y,z:t.origin.z-e.origin.z};e.ideal_yaw=Aa(r)}function dn(e,t){qe(e,t)}function hn(e,t,r,n){if(jt(e,e.goalentity),qe(e,r),t!==0&&$t(e,e.angles.y,t),e.goalentity&&e.goalentity.classname==="path_corner"&&Ja(e,e.goalentity)<64&&e.goalentity.target){let s=n.pickTarget(e.goalentity.target);s&&(e.goalentity=s,e.ideal_yaw=e.angles.y)}}function fn(e,t,r){jt(e,e.enemy??e.goalentity),qe(e,r),t!==0&&$t(e,e.angles.y,t)}function mn(e,t,r){jt(e,e.enemy),qe(e,r),t!==0&&$t(e,e.angles.y,t)}function eo(e,t,r,n,i){if(re(i,8)||((e.flags??0)&4)!==0||n===0)return{x:0,y:0,z:0};let a=Math.max(50,e.mass??200),o=Se(r),l=Vt(o,(t===e?1600:500)*n/a);return e.velocity=Ke(e.velocity,l),l}function to(e,t,r,n,i){let s=n,a=0,o=0,c,l;if(e.powerArmor){let u=Za(n,i,t,r,e.powerArmor);a=u.saved,c=u.remainingCells,s-=a}if(e.regularArmor){let u=qa(s,i,e.regularArmor);o=u.saved,l=u.remainingArmor,s-=o}return[Math.max(0,s),a,o,c,l]}function en(e){return e.mins&&e.maxs?{x:e.origin.x+(e.mins.x+e.maxs.x)*.5,y:e.origin.y+(e.mins.y+e.maxs.y)*.5,z:e.origin.z+(e.mins.z+e.maxs.z)*.5}:e.origin}function qt(e,t,r,n,i,s,a,o,c,l){if(!e.takedamage||a<=0)return null;if(!re(c,32)&&((e.flags??0)&1)!==0)return{take:0,psave:0,asave:a,knocked:{x:0,y:0,z:0},killed:!1};let d=eo(e,r,n,o,c),[h,m,p,g,f]=to(e,i,s,a,c);e.powerArmor&&g!==void 0&&(e.powerArmor.cellCount=g),e.regularArmor&&(e.regularArmor.armorCount=f??e.regularArmor.armorCount);let v=h;v>0&&(e.health-=v);let w=e.health<=0;return w?e.flags&&e.flags&2?e.health=Math.max(1,e.health):e.die&&e.die(e,t,r,v,i,l):v>0&&e.pain&&e.pain(e,r,o,v,l),{take:v,psave:m,asave:p,knocked:d,killed:w,remainingCells:g,remainingArmor:f}}function tn(e,t,r,n,i,s,a,o,c={}){let l=[],u=en(t),d=c.canDamage??(()=>!0);for(let h of e){if(h===i||!h.takedamage||!d(h,t))continue;let m=h.mins&&h.maxs?va(u,Ke(h.origin,h.mins),Ke(h.origin,h.maxs)):en(h),p=_e(u,m),g=nn(p);if(s>0&&g>s)continue;let f=n-.5*g;if(f<=0)continue;let v=h===r?f*.5:f,w=Se(_e(h.origin,u)),S=qt(h,t,r,w,m,w,v,v,a|1,o);l.push({target:h,result:S,appliedDamage:v})}return l}function pn(e,t,r,n,i,s,a,o,c,l=0){let u=Ke(t,Vt(r,8192)),d=c.trace(t,null,null,u,e,536870913);!d.ent||d.fraction===1||qt(d.ent,e,e,r,d.endpos,d.plane?.normal||Gt,n,i,18,l)}function ro(e,t,r,n,i,s){let a=e.spawn();a.classname="grenade",a.owner=t,a.origin={...r},a.velocity={x:n.x*s,y:n.y*s,z:n.z*s},a.movetype=9,a.clipmask=268566530,a.solid=2,a.modelindex=e.modelIndex("models/objects/grenade/tris.md2"),a.mins={x:-4,y:-4,z:-4},a.maxs={x:4,y:4,z:4},a.touch=(o,c,l,u)=>{if(c!==o.owner&&c&&c.takedamage){qt(c,o,o.owner,o.velocity,o.origin,l?l.normal:Gt,i,0,0,6);let d=e.findByRadius(o.origin,120);tn(d,o,o.owner,i,o.owner,120,0,6),e.free(o);return}},a.think=o=>{let c=e.findByRadius(o.origin,120);tn(c,o,o.owner,i,o.owner,120,0,6),e.free(o)},e.scheduleThink(a,e.timeSeconds+2.5),e.finalizeSpawn(a)}var Ze=.1;function no(e,t,r){dn(e,Ze)}function io(e,t,r){hn(e,t,Ze,r)}function so(e,t,r){fn(e,t,Ze)}function gn(e,t,r){mn(e,t,Ze)}var Zt,vn,yn,ao,oo;function co(e){e.monsterinfo.current_move=Zt}function lo(e){e.monsterinfo.current_move=vn}function Jt(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=yn:e.monsterinfo.current_move=Zt}function uo(e,t){if(!e.enemy)return;let r={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight-8},n=Se(_e(e.enemy.origin,r));pn(e,r,n,10,2,0,0,0,t,5)}function ho(e,t){if(!e.enemy)return;let r={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},n=Se(_e(e.enemy.origin,r));ro(t,e,r,n,50,600)}var fo=Array.from({length:30},()=>({ai:no,dist:0}));Zt={firstframe:0,lastframe:29,frames:fo,endfunc:co};var mo=Array.from({length:40},()=>({ai:io,dist:2}));vn={firstframe:30,lastframe:69,frames:mo,endfunc:lo};var po=Array.from({length:20},()=>({ai:so,dist:10}));yn={firstframe:70,lastframe:89,frames:po,endfunc:Jt};var go=Array.from({length:10},(e,t)=>({ai:gn,dist:0,think:t>=2&&t<=8?uo:null}));ao={firstframe:90,lastframe:99,frames:go,endfunc:Jt};var vo=Array.from({length:10},(e,t)=>({ai:gn,dist:0,think:t===5?ho:null}));oo={firstframe:100,lastframe:109,frames:vo,endfunc:Jt};var Je=.1;function yo(e,t,r){dn(e,Je)}function xo(e,t,r){hn(e,t,Je,r)}function _o(e,t,r){fn(e,t,Je)}function So(e,t,r){mn(e,t,Je)}var Qt,xn,_n,wo;function Ao(e){e.monsterinfo.current_move=Qt}function Eo(e){e.monsterinfo.current_move=xn}function Sn(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=_n:e.monsterinfo.current_move=Qt}function zo(e,t){if(!e.enemy)return;let r={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},n=Se(_e(e.enemy.origin,r));pn(e,r,n,4,4,0,0,0,t,4)}var To=Array.from({length:30},()=>({ai:yo,dist:0}));Qt={firstframe:0,lastframe:29,frames:To,endfunc:Ao};var bo=Array.from({length:40},()=>({ai:xo,dist:2}));xn={firstframe:30,lastframe:69,frames:bo,endfunc:Eo};var Lo=Array.from({length:20},()=>({ai:_o,dist:10}));_n={firstframe:70,lastframe:89,frames:Lo,endfunc:Sn};var Ro=Array.from({length:10},(e,t)=>({ai:So,dist:0,think:t===5?zo:null}));wo={firstframe:90,lastframe:99,frames:Ro,endfunc:Sn};var eu=new Map(Yt.map(e=>[e.name,e]));var Mo=2166136261,No=16777619;function wn(e,t){let r=e>>>0;for(let n=0;n<t.length;n+=1)r^=t[n]&255,r=Math.imul(r,No)>>>0;return r>>>0}function ue(e,t){let r=new ArrayBuffer(8);new DataView(r).setFloat64(0,t,!0);let i=new Uint8Array(r);return wn(e,i)}function Ut(e,t){let r=new Uint8Array(t.length);for(let n=0;n<t.length;n+=1)r[n]=t.charCodeAt(n)&255;return wn(e,r)}var Bt=2,Po=1;function U(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t} must be an object`);return e}function C(e,t){if(typeof e!="number"||!Number.isFinite(e))throw new Error(`${t} must be a finite number`);return e}function Ve(e,t,r){return e===void 0?r:C(e,t)}function Xe(e,t){if(typeof e!="string")throw new Error(`${t} must be a string`);return e}function We(e,t){if(!Array.isArray(e))throw new Error(`${t} must be an array`);for(let r of e)C(r,`${t} element`);return e}function ko(e){if(e===void 0)return{frameNumber:0,timeSeconds:0,previousTimeSeconds:0,deltaSeconds:0};let t=U(e,"level");return{frameNumber:Ve(t.frameNumber,"level.frameNumber",0),timeSeconds:Ve(t.timeSeconds,"level.timeSeconds",0),previousTimeSeconds:Ve(t.previousTimeSeconds,"level.previousTimeSeconds",0),deltaSeconds:Ve(t.deltaSeconds,"level.deltaSeconds",0)}}function Oo(e){if(e===void 0)return new Ra().getState();let t=U(e,"rng"),r=U(t.mt,"rng.mt"),n=We(r.state,"rng.mt.state");return{mt:{index:C(r.index,"rng.mt.index"),state:n}}}function Io(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("thinks must be an array");return e.map((t,r)=>{let n=U(t,`thinks[${r}]`);return{time:C(n.time,`thinks[${r}].time`),entityIndex:C(n.entityIndex,`thinks[${r}].entityIndex`)}})}function Co(e){if(e===void 0)return{};let t=U(e,"entity.fields"),r={};for(let[n,i]of Object.entries(t)){if(i===null){r[n]=null;continue}switch(typeof i){case"number":case"string":case"boolean":r[n]=i;break;default:{if(!Array.isArray(i)){let s=U(i,n),a={};for(let[o,c]of Object.entries(s))a[o]=C(c,`${n}.${o}`);r[n]=a;break}if(Array.isArray(i)&&i.length===3){let[s,a,o]=i;r[n]=[C(s,`${n}[0]`),C(a,`${n}[1]`),C(o,`${n}[2]`)];break}throw new Error(`Unsupported entity field value for ${n}`)}}}return r}function Do(e){if(!Array.isArray(e))throw new Error("entities must be an array");return e.map((t,r)=>{let n=U(t,`entities[${r}]`);return{index:C(n.index,`entities[${r}].index`),fields:Co(n.fields)}})}function Fo(e){let t=U(e,"pool");return{capacity:C(t.capacity,"pool.capacity"),activeOrder:We(t.activeOrder,"pool.activeOrder"),freeList:We(t.freeList,"pool.freeList"),pendingFree:We(t.pendingFree,"pool.pendingFree")}}function Bo(e){let t=U(e,"entities");return{timeSeconds:C(t.timeSeconds,"entities.timeSeconds"),pool:Fo(t.pool),entities:Do(t.entities),thinks:Io(t.thinks)}}function Uo(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("cvars must be an array");return e.map((t,r)=>{let n=U(t,`cvars[${r}]`);return{name:Xe(n.name,`cvars[${r}].name`),value:Xe(n.value,`cvars[${r}].value`),flags:C(n.flags,`cvars[${r}].flags`)}})}function Go(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("configstrings must be an array");return e.map((t,r)=>Xe(t,`configstrings[${r}]`))}function Vo(e){return e===void 0?{}:U(e,"gameState")}function Z(e,t){if(t==null)return e;if(typeof t=="number")return ue(e,t);if(typeof t=="string")return Ut(e,t);if(typeof t=="boolean")return ue(e,t?1:0);if(Array.isArray(t)){let r=e;for(let n of t)r=Z(r,n);return r}if(typeof t=="object"){let r=e,n=Object.keys(t).sort();for(let i of n)r=Ut(r,i),r=Z(r,t[i]);return r}return e}function Ho(e){let t=Mo;return t=ue(t,e.version),t=ue(t,e.timestamp),t=Ut(t,e.map),t=ue(t,e.difficulty),t=ue(t,e.playtimeSeconds),t=Z(t,e.gameState),t=Z(t,e.level),t=Z(t,e.rng),t=Z(t,e.entities),t=Z(t,e.cvars),t=Z(t,e.configstrings),e.player&&(t=Z(t,e.player)),t>>>0}function An(e,t={}){let{allowNewerVersion:r=!0}=t,n=typeof e=="string"?JSON.parse(e):e,i=U(n,"save"),s=i.version??Bt,a=C(s,"version");if(a<Po)throw new Error(`Unsupported save version ${a}`);if(a>Bt&&!r)throw new Error(`Save version ${a} is newer than supported ${Bt}`);let o={version:a,timestamp:C(i.timestamp,"timestamp"),map:Xe(i.map,"map"),difficulty:C(i.difficulty,"difficulty"),playtimeSeconds:C(i.playtimeSeconds,"playtimeSeconds"),gameState:Vo(i.gameState),level:ko(i.level),rng:Oo(i.rng),entities:Bo(i.entities),cvars:Uo(i.cvars),configstrings:Go(i.configstrings),player:i.player?i.player:void 0,checksum:i.checksum!==void 0?C(i.checksum,"checksum"):void 0};if(o.checksum!==void 0){let c=Ho(o);if(c!==o.checksum)throw new Error(`Save file checksum mismatch: expected ${o.checksum}, calculated ${c}`)}return o}var tu=new Set(Yt.filter(e=>e.save).map(e=>e.name));var rn=globalThis.TextEncoder;function de(e){return An({...e},{allowNewerVersion:!0})}function Wo(e){return rn?new rn().encode(JSON.stringify(e)).length:JSON.stringify(e).length}var Ko=class{constructor(){this.records=new Map}async init(){return Promise.resolve()}async put(e){let t={id:e.id,metadata:{...e.metadata},save:de(e.save)};this.records.set(e.id,t)}async get(e){let t=this.records.get(e);return t?{id:t.id,metadata:{...t.metadata},save:de(t.save)}:null}async delete(e){return this.records.delete(e)}async list(){return Array.from(this.records.values()).map(e=>({id:e.id,metadata:{...e.metadata},save:de(e.save)}))}},Xo=class{constructor(e,t,r){this.indexedDB=e,this.dbName=t,this.storeName=r,this.db=null}async init(){this.db||(this.db=await new Promise((e,t)=>{let r=this.indexedDB.open(this.dbName,1);r.onupgradeneeded=()=>{r.result.createObjectStore(this.storeName,{keyPath:"id"})},r.onerror=()=>t(r.error??new Error("Failed to open IndexedDB")),r.onsuccess=()=>e(r.result)}))}async runTransaction(e,t){await this.init();let r=this.db;return new Promise((n,i)=>{let a=r.transaction(this.storeName,e).objectStore(this.storeName),o=t(a);o.onsuccess=()=>n(o.result),o.onerror=()=>i(o.error??new Error("IndexedDB request failed"))})}async put(e){await this.runTransaction("readwrite",t=>t.put(e))}async get(e){let t=await this.runTransaction("readonly",r=>r.get(e));return t?{id:t.id,metadata:{...t.metadata},save:de(t.save)}:null}async delete(e){return await this.get(e)?(await this.runTransaction("readwrite",r=>r.delete(e)),!0):!1}async list(){return(await this.runTransaction("readonly",t=>t.getAll())).map(t=>({id:t.id,metadata:{...t.metadata},save:de(t.save)}))}},er=class ye{constructor(t={}){let{dbName:r=ye.DEFAULT_DB_NAME,storeName:n=ye.DEFAULT_STORE}=t,i=t.indexedDB??globalThis.indexedDB;i?this.adapter=new Xo(i,r,n):this.adapter=new Ko}async save(t,r,n={}){let i=de(r),s={id:t,name:n.name??t,map:i.map,difficulty:i.difficulty,playtimeSeconds:i.playtimeSeconds,timestamp:i.timestamp,version:i.version,bytes:Wo(i)};return await this.adapter.init(),await this.adapter.put({id:t,metadata:s,save:i}),s}async load(t,r={}){await this.adapter.init();let n=await this.adapter.get(t);if(!n)throw new Error(`Save slot ${t} not found`);return An(n.save,r)}async delete(t){return await this.adapter.init(),this.adapter.delete(t)}async list(){return await this.adapter.init(),(await this.adapter.list()).map(r=>({...r.metadata})).sort((r,n)=>n.timestamp-r.timestamp||r.id.localeCompare(n.id))}async quickSave(t){return this.save(ye.QUICK_SLOT,t,{name:"Quick Save"})}async quickLoad(t={}){return this.load(ye.QUICK_SLOT,t)}};er.DEFAULT_DB_NAME="quake2ts-saves";er.DEFAULT_STORE="saves";er.QUICK_SLOT="quicksave";var En=new Map;var zn=(e,t)=>{if(!t)return;let r=t.inventory.currentWeapon;if(r){let i=Object.values(un).find(s=>s.weaponId===r);if(i){let s=`w_${i.id.substring(7)}`,a=En.get(s);a&&e.drawPic(B.WEAPON_ICON_X,B.WEAPON_ICON_Y,a)}}let n=B.POWERUP_X;for(let[i,s]of t.inventory.powerups.entries())if(s&&s>0){let a=`p_${i}`,o=En.get(a);o&&(e.drawPic(n,B.POWERUP_Y,o),n-=o.width+4)}};var Qe=new Map;var Tn=(e,t)=>{if(!t.damageIndicators)return;let r=e.width,n=e.height,{forward:i,right:s,up:a}=ve(t.viewAngles);for(let o of t.damageIndicators){let{direction:c,strength:l}=o,u={...c},d=Math.sqrt(u.x*u.x+u.y*u.y+u.z*u.z);d>0&&(u.x/=d,u.y/=d,u.z/=d);let h=$(u,s),m=$(u,i),p=Math.atan2(m,h)*180/Math.PI,g,f=0,v=0;p>-45&&p<=45?(g=Qe.get("d_right"),f=r-(g?.width||0),v=(n-(g?.height||0))/2):p>45&&p<=135?(g=Qe.get("d_up"),f=(r-(g?.width||0))/2,v=0):p>135||p<=-135?(g=Qe.get("d_left"),f=0,v=(n-(g?.height||0))/2):(g=Qe.get("d_down"),f=(r-(g?.width||0))/2,v=n-(g?.height||0)),g&&e.drawPic(f,v,g)}};var bn=(e,t)=>{let r=[`FPS: ${t.fps}`,`Draw Calls: ${t.drawCalls}`,`Batches: ${t.batches}`,`Faces Drawn: ${t.facesDrawn}`,`Vertices: ${t.vertexCount}`],n=10;for(let i of r)e.drawString(10,n,i),n+=10};var tr=[],rr=0;var Ln=(e,t,r,n,i,s,a)=>{e.begin2D(),t.damageAlpha>0&&e.drawfillRect(0,0,e.width,e.height,[1,0,0,t.damageAlpha]),Ue(e,B.HEALTH_X,B.HEALTH_Y,n,tr,rr),Ue(e,B.ARMOR_X,B.ARMOR_Y,i,tr,rr),Ue(e,B.AMMO_X,B.AMMO_Y,s,tr,rr),zn(e,r),Tn(e,t),bn(e,a),t.centerPrint&&e.drawCenterString(e.height/2-20,t.centerPrint),t.notify&&e.drawString(8,8,t.notify),Zr(e,e.width,e.height),e.end2D()};var Yo=2048,et=class{constructor(){this.configstrings=new Array(Yo).fill("");this.entities=new Map;this.baselines=new Map;this.latestFrame=null;this.stats=new Array(32).fill(0);this.inventory=new Array(256).fill(0)}onServerData(t,r,n,i,s,a){console.log(`Demo: Server Data - Protocol: ${t}, Level: ${a}`),this.configstrings.fill(""),this.entities.clear(),this.baselines.clear(),this.latestFrame=null}onConfigString(t,r){this.configstrings[t]=r}onSpawnBaseline(t){this.baselines.set(t.number,structuredClone(t))}onFrame(t){this.latestFrame=t,this.stats=[...t.playerState.stats];let r=t.packetEntities,n=new Map;if(r.delta)for(let[i,s]of this.entities)n.set(i,structuredClone(s));for(let i of r.entities){if(i.bits&Lr){n.delete(i.number);continue}let s=i.number,a;r.delta&&this.entities.has(s)?a=this.entities.get(s):this.baselines.has(s)?a=this.baselines.get(s):a=ie();let o=structuredClone(a);this.applyDelta(o,i),n.set(s,o)}this.entities=n}applyDelta(t,r){let n=r.bits;t.number=r.number,n&_t&&(t.modelindex=r.modelindex),n&wt&&(t.modelindex2=r.modelindex2),n&At&&(t.modelindex3=r.modelindex3),n&Et&&(t.modelindex4=r.modelindex4),n&gt&&(t.frame=r.frame),n&St&&(t.frame=r.frame),(n&be||n&Me)&&(t.skinnum=r.skinnum),(n&Te||n&Re)&&(t.effects=r.effects),(n&ze||n&Le)&&(t.renderfx=r.renderfx),n&ht&&(t.origin.x=r.origin.x),n&ft&&(t.origin.y=r.origin.y),n&yt&&(t.origin.z=r.origin.z),n&xt&&(t.angles.x=r.angles.x),n&mt&&(t.angles.y=r.angles.y),n&pt&&(t.angles.z=r.angles.z),n&zt&&(t.old_origin.x=r.old_origin.x,t.old_origin.y=r.old_origin.y,t.old_origin.z=r.old_origin.z),n&Tt&&(t.sound=r.sound),n&vt&&(t.event=r.event),n&bt&&(t.solid=r.solid)}onCenterPrint(t){console.log(`[Center]: ${t}`)}onStuffText(t){}onPrint(t,r){}onSound(t,r,n,i,s,a,o){}onTempEntity(t,r,n,i,s,a,o,c,l){}onLayout(t){}onInventory(t){this.inventory=[...t]}onMuzzleFlash(t,r){}onMuzzleFlash2(t,r){}onDisconnect(){}onReconnect(){}onDownload(t,r,n){}getPredictionState(){if(!this.latestFrame)return q();let t=this.latestFrame.playerState,r={ammo:{caps:[],counts:[]},ownedWeapons:new Set,armor:null,powerups:new Map,keys:new Set},n={...t.origin},i={...t.velocity},s={...t.viewangles},a={...t.delta_angles};return{origin:n,velocity:i,viewangles:s,pmFlags:t.pm_flags,pmType:t.pm_type,waterlevel:te.None,gravity:t.gravity,deltaAngles:a,client:{inventory:r,weaponStates:{states:new Map}},health:t.stats[1],armor:t.stats[4],ammo:t.stats[2]}}};var $o=[{code:"KeyW",command:"+forward"},{code:"ArrowUp",command:"+forward"},{code:"KeyS",command:"+back"},{code:"ArrowDown",command:"+back"},{code:"KeyA",command:"+moveleft"},{code:"KeyD",command:"+moveright"},{code:"Space",command:"+jump"},{code:"ControlLeft",command:"+crouch"},{code:"ShiftLeft",command:"+speed"},{code:"Mouse1",command:"+attack"},{code:"Mouse2",command:"+use"},{code:"Mouse3",command:"+zoom"},{code:"ArrowLeft",command:"+left"},{code:"ArrowRight",command:"+right"},{code:"PageUp",command:"+lookup"},{code:"PageDown",command:"+lookdown"},{code:"Gamepad0-Button7",command:"+attack"},{code:"Gamepad0-Button6",command:"+zoom"},{code:"Gamepad0-Button0",command:"+jump"},{code:"Gamepad0-Button1",command:"+crouch"},{code:"Gamepad0-Button2",command:"+use"},{code:"Gamepad0-Button4",command:"prevweapon"},{code:"Gamepad0-Button5",command:"nextweapon"},{code:"Digit1",command:"weapon 1"},{code:"Digit2",command:"weapon 2"},{code:"Digit3",command:"weapon 3"},{code:"Digit4",command:"weapon 4"},{code:"Digit5",command:"weapon 5"},{code:"Digit6",command:"weapon 6"},{code:"Digit7",command:"weapon 7"},{code:"Digit8",command:"weapon 8"},{code:"Digit9",command:"weapon 9"},{code:"Digit0",command:"weapon 10"}],ne=class{constructor(t=$o){this.bindings=new Map;for(let r of t)this.bind(r.code,r.command)}bind(t,r){this.bindings.set(t,r)}unbind(t){this.bindings.delete(t)}getBinding(t){return this.bindings.get(t)}entries(){return new Map(this.bindings.entries())}};function Rn(){return new ne}function nr(e){return e}function we(e){return e.trim().toLowerCase()}var jo=250,ir=class{constructor(){this.activeCodes=new Set;this.downTime=0;this.msec=0;this.pressed=!1}press(t,r){return this.activeCodes.has(t)?!1:(this.activeCodes.add(t),this.pressed=!0,this.activeCodes.size===1?(this.downTime=r,!0):!1)}release(t,r){return this.activeCodes.delete(t)&&this.activeCodes.size===0?(this.msec+=r-this.downTime,this.downTime=0,!0):!1}sample(t,r){if(t<=0)return{active:this.activeCodes.size>0,wasPressed:this.pressed,fraction:0};let n=this.msec;this.activeCodes.size>0&&(n+=r-this.downTime,this.downTime=r),this.msec=0;let i=Math.min(n/t,1),s=this.pressed;return this.pressed=!1,{active:this.activeCodes.size>0,wasPressed:s,fraction:i}}},tt=(v=>(v.Forward="+forward",v.Back="+back",v.MoveLeft="+moveleft",v.MoveRight="+moveright",v.MoveUp="+moveup",v.MoveDown="+movedown",v.Jump="+jump",v.Crouch="+crouch",v.Attack="+attack",v.Use="+use",v.Holster="+holster",v.TurnLeft="+left",v.TurnRight="+right",v.LookUp="+lookup",v.LookDown="+lookdown",v.SpeedModifier="+speed",v.Zoom="+zoom",v))(tt||{}),qo={"+attack":K.Attack,"+use":K.Use,"+holster":K.Holster,"+jump":K.Jump,"+crouch":K.Crouch},Zo=new Map(Object.values(tt).map(e=>[we(e),e]));function Jo(e){return Zo.get(we(e))}function Ae(){return typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()}var he=class{constructor(t={},r=new ne){this.buttons=new Map;this.viewAngles={x:0,y:0,z:0};this.pointerLocked=!1;this.mouseDelta={deltaX:0,deltaY:0};this.previousMouseDelta={deltaX:0,deltaY:0};this.anyPressed=!1;this.commandQueue=[];this.gamepadButtons=new Map;this.gamepadMove={x:0,y:0};this.gamepadLook={x:0,y:0};this.touchButtons=new Map;this.touchMove={x:0,y:0};this.touchLook={x:0,y:0};this.bindings=r,this.forwardSpeed=t.forwardSpeed??Vr,this.sideSpeed=t.sideSpeed??Hr,this.upSpeed=t.upSpeed??Wr,this.yawSpeed=t.yawSpeed??Kr,this.pitchSpeed=t.pitchSpeed??Xr,this.sensitivity=t.sensitivity??Yr,this.sensitivityX=t.sensitivityX,this.sensitivityY=t.sensitivityY,this.invertMouseY=t.invertMouseY??!1,this.runByDefault=t.runByDefault??!0,this.requirePointerLock=t.requirePointerLock??!0,this.jumpAddsUpMove=t.jumpAddsUpMove??!0,this.crouchAddsDownMove=t.crouchAddsDownMove??!0,this.mouseFilter=t.mouseFilter??!1,this.getGamepads=t.getGamepads,this.gamepadDeadZone=t.gamepadDeadZone??.15,this.gamepadLookScale=t.gamepadLookScale??1,this.invertGamepadY=t.invertGamepadY??this.invertMouseY}handleKeyDown(t,r=Ae()){let n=t,i=this.bindings.getBinding(n);i&&this.applyCommand(i,!0,n,r)}handleKeyUp(t,r=Ae()){let n=t,i=this.bindings.getBinding(n);i&&this.applyCommand(i,!1,n,r)}handleMouseButtonDown(t,r=Ae()){let n=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(n),!0,n,r)}handleMouseButtonUp(t,r=Ae()){let n=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(n),!1,n,r)}handleMouseMove(t,r){this.requirePointerLock&&!this.pointerLocked||(this.mouseDelta={deltaX:this.mouseDelta.deltaX+t,deltaY:this.mouseDelta.deltaY+r})}setPointerLocked(t){this.pointerLocked=t}setGamepadState(t){this.pendingGamepads=t}setTouchState(t){this.pendingTouchState=t}buildCommand(t,r=Ae(),n){this.pollGamepads(r),this.applyTouchState(r);let i=this.yawSpeed*t/1e3,s=this.pitchSpeed*t/1e3,a=this.sample("+left",t,r),o=this.sample("+right",t,r),c=this.sample("+lookup",t,r),u={x:(this.sample("+lookdown",t,r).fraction-c.fraction)*s,y:(o.fraction-a.fraction)*i,z:0};if(this.gamepadLook.x!==0||this.gamepadLook.y!==0){let R=this.gamepadLook.y*(this.invertGamepadY?-1:1);u={x:u.x+R*s*this.gamepadLookScale,y:u.y+this.gamepadLook.x*i*this.gamepadLookScale,z:0}}if(this.touchLook.x!==0||this.touchLook.y!==0){let R=this.touchLook.y*(this.invertMouseY?-1:1);u={x:u.x+R*s,y:u.y+this.touchLook.x*i,z:0}}if(this.pointerLocked||!this.requirePointerLock){let R=this.sampleMouseDelta(),N=jr(R,{sensitivity:this.sensitivity,sensitivityX:this.sensitivityX,sensitivityY:this.sensitivityY,invertY:this.invertMouseY});u={x:u.x+N.x,y:u.y+N.y,z:0}}let d=$r(this.viewAngles,u);this.viewAngles=d;let h=this.sample("+forward",t,r),m=this.sample("+back",t,r),p=this.sample("+moveleft",t,r),g=this.sample("+moveright",t,r),f=this.sample("+moveup",t,r),v=this.sample("+movedown",t,r),w=this.sample("+speed",t,r),S=this.sample("+jump",t,r),_=this.sample("+crouch",t,r),y=this.runByDefault?w.active?.5:1:w.active?1:.5,x=this.forwardSpeed*(h.fraction-m.fraction)*y,T=this.sideSpeed*(g.fraction-p.fraction)*y,z=this.upSpeed*(f.fraction-v.fraction);(this.gamepadMove.x!==0||this.gamepadMove.y!==0)&&(x+=this.forwardSpeed*this.gamepadMove.y*y,T+=this.sideSpeed*this.gamepadMove.x*y),(this.touchMove.x!==0||this.touchMove.y!==0)&&(x+=this.forwardSpeed*this.touchMove.y*y,T+=this.sideSpeed*this.touchMove.x*y),this.jumpAddsUpMove&&S.fraction>0&&(z+=this.upSpeed*S.fraction),this.crouchAddsDownMove&&_.fraction>0&&(z-=this.upSpeed*_.fraction),x=this.clampMove(x,this.forwardSpeed),T=this.clampMove(T,this.sideSpeed),z=this.clampMove(z,this.upSpeed);let b=this.collectButtonBits(t,r),E=Math.min(Math.max(Math.round(t),1),jo);return(this.anyPressed||b!==K.None)&&(b|=K.Any),this.anyPressed=!1,{msec:E,buttons:b,angles:{...this.viewAngles},forwardmove:x,sidemove:T,upmove:z,serverFrame:n}}consumeConsoleCommands(){let t=this.commandQueue;return this.commandQueue=[],t}pollGamepads(t){let r=this.getGamepads?.()??this.pendingGamepads??[];this.pendingGamepads=void 0,this.gamepadMove={x:0,y:0},this.gamepadLook={x:0,y:0};let n=new Set;for(let i of r){if(!i||i.connected===!1)continue;let s=i.index??0,a=i.axes??[];this.gamepadMove={x:this.mergeAnalog(this.gamepadMove.x,this.applyDeadZone(a[0]??0)),y:this.mergeAnalog(this.gamepadMove.y,-this.applyDeadZone(a[1]??0))},this.gamepadLook={x:this.mergeAnalog(this.gamepadLook.x,this.applyDeadZone(a[2]??0)),y:this.mergeAnalog(this.gamepadLook.y,this.applyDeadZone(a[3]??0))};let o=i.buttons??[];for(let c=0;c<o.length;c++){let l=o[c];if(!l)continue;let u=l.pressed||l.value>this.gamepadDeadZone,d=this.gamepadButtonCode(s,c);u&&n.add(d);let h=this.gamepadButtons.get(d)??!1;u!==h&&(this.applyCommand(this.bindings.getBinding(d),u,d,t),this.gamepadButtons.set(d,u))}}for(let[i,s]of this.gamepadButtons.entries())s&&!n.has(i)&&(this.applyCommand(this.bindings.getBinding(i),!1,i,t),this.gamepadButtons.set(i,!1))}applyTouchState(t){let r=this.pendingTouchState;if(r&&(this.pendingTouchState=void 0,r.move&&(this.touchMove={x:this.clampAnalog(r.move.x),y:this.clampAnalog(r.move.y)}),r.look&&(this.touchLook={x:this.clampAnalog(r.look.x),y:this.clampAnalog(r.look.y)}),r.buttons))for(let[n,i]of Object.entries(r.buttons)){if(i===void 0)continue;let s=this.touchButtons.get(n)??!1;i!==s&&(this.applyCommand(n,i,this.touchButtonCode(n),t),this.touchButtons.set(n,i))}}applyCommand(t,r,n,i){if(!t)return;let s=Jo(t);if(s){let a=this.lookupButton(s);r?(a.press(n,i)&&this.commandQueue.push(s),this.anyPressed=!0):a.release(n,i)&&this.commandQueue.push(s.replace("+","-"))}else r&&this.commandQueue.push(t)}sampleMouseDelta(){let t=this.mouseDelta;if(this.mouseDelta={deltaX:0,deltaY:0},!this.mouseFilter)return this.previousMouseDelta=t,t;let r={deltaX:(t.deltaX+this.previousMouseDelta.deltaX)*.5,deltaY:(t.deltaY+this.previousMouseDelta.deltaY)*.5};return this.previousMouseDelta=t,r}collectButtonBits(t,r){let n=K.None;for(let[i,s]of Object.entries(qo)){let a=this.sample(i,t,r);(a.fraction>0||a.active||a.wasPressed)&&(n|=s)}return n}lookupButton(t){let r=this.buttons.get(t);return r||(r=new ir,this.buttons.set(t,r)),r}mouseButtonToCode(t){return t===0?"Mouse1":t===1?"Mouse3":t===2?"Mouse2":`Mouse${t+1}`}mouseButtonToCommand(t){return this.bindings.getBinding(t)}sample(t,r,n){return this.lookupButton(t).sample(r,n)}gamepadButtonCode(t,r){return`Gamepad${t}-Button${r}`}touchButtonCode(t){return`Touch-${t}`}clampAnalog(t){return Math.max(-1,Math.min(1,t))}applyDeadZone(t){return Math.abs(t)<this.gamepadDeadZone?0:t}mergeAnalog(t,r){return Math.abs(r)>Math.abs(t)?r:t}clampMove(t,r){return Math.max(-r,Math.min(r,t))}};var rt=class{constructor(t,r=new he(t)){this.queued=[];this.controller=r}captureFrame(t,r,n){let i=this.controller.buildCommand(t,r,n),s=this.controller.consumeConsoleCommands(),a={command:i,console:s};return this.queued.push(a),a}consumeQueued(){let t=[...this.queued];return this.queued.length=0,t}getController(){return this.controller}};function Qo(e){let t=new ce(e.engine.trace),r=new le,n=new Rr,i=new et;n.setHandler(i);let s,a,o,c;return{init(l){s=l,l?.state&&t.setAuthoritative(l),e.engine.trace({x:0,y:0,z:0},{x:1,y:0,z:0})},predict(l){return t.enqueueCommand(l)},render(l){n.getState()===Lt.Playing?a=i.getPredictionState():(l.latest?.state&&(t.setAuthoritative(l.latest),s=l.latest),l.previous?.state&&l.latest?.state?a=Be(l.previous.state,l.latest.state,l.alpha):a=l.latest?.state??l.previous?.state??t.getPredictedState());let d=l.latest&&l.previous?Math.max(0,l.latest.timeMs-l.previous.timeMs):0;if(o=r.sample(a,d),a){let{origin:m,viewangles:p}=a;c=new br,c.position=k.fromValues(m.x,m.y,m.z),c.angles=k.fromValues(p.x,p.y,p.z),c.fov=90,c.aspect=4/3}let h={};if(e.engine.renderer&&a&&a.client){let m={batches:0,facesDrawn:0,drawCalls:0,skyDrawn:!1,viewModelDrawn:!1,fps:0,vertexCount:0},p={origin:a.origin,velocity:a.velocity,viewAngles:a.viewangles,onGround:W(a.pmFlags,F.OnGround),waterLevel:a.waterlevel,mins:{x:-16,y:-16,z:-24},maxs:{x:16,y:16,z:32},damageAlpha:0,damageIndicators:[]};Ln(e.engine.renderer,p,a.client,a.health,a.armor,a.ammo,m)}return h},shutdown(){s=void 0,a=void 0},get prediction(){return t},get lastRendered(){return a},get view(){return r},get lastView(){return o},get camera(){return c},demoPlayback:n,demoHandler:i}}return On(ec);})();
1
+ "use strict";var Quake2Client=(()=>{var nt=Object.defineProperty;var Mn=Object.getOwnPropertyDescriptor;var Nn=Object.getOwnPropertyNames;var Pn=Object.prototype.hasOwnProperty;var it=(e,t)=>{for(var r in t)nt(e,r,{get:t[r],enumerable:!0})},kn=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Nn(t))!Pn.call(e,i)&&i!==r&&nt(e,i,{get:()=>t[i],enumerable:!(n=Mn(t,i))||n.enumerable});return e};var On=e=>kn(nt({},"__esModule",{value:!0}),e);var wc={};it(wc,{ClientPrediction:()=>ce,InputAction:()=>tt,InputBindings:()=>ne,InputCommandBuffer:()=>rt,InputController:()=>he,ViewEffects:()=>le,createClient:()=>_c,createDefaultBindings:()=>Rn,defaultPredictionState:()=>q,interpolatePredictionState:()=>Be,normalizeCommand:()=>Se,normalizeInputCode:()=>nr});var M=1e-6,D=typeof Float32Array<"u"?Float32Array:Array,st=Math.random;function Ee(e){return e>=0?Math.round(e):e%.5===0?Math.floor(e):Math.round(e)}var Ac=Math.PI/180,Ec=180/Math.PI;var I={};it(I,{add:()=>xi,adjoint:()=>Vn,clone:()=>Cn,copy:()=>Dn,create:()=>In,decompose:()=>si,determinant:()=>Hn,equals:()=>Ai,exactEquals:()=>Si,frob:()=>yi,fromQuat:()=>ci,fromQuat2:()=>ri,fromRotation:()=>Jn,fromRotationTranslation:()=>ur,fromRotationTranslationScale:()=>ai,fromRotationTranslationScaleOrigin:()=>oi,fromScaling:()=>Zn,fromTranslation:()=>qn,fromValues:()=>Fn,fromXRotation:()=>Qn,fromYRotation:()=>ei,fromZRotation:()=>ti,frustum:()=>li,getRotation:()=>ii,getScaling:()=>dr,getTranslation:()=>ni,identity:()=>cr,invert:()=>Gn,lookAt:()=>pi,mul:()=>Ei,multiply:()=>lr,multiplyScalar:()=>_i,multiplyScalarAndAdd:()=>wi,ortho:()=>fi,orthoNO:()=>fr,orthoZO:()=>mi,perspective:()=>ui,perspectiveFromFieldOfView:()=>hi,perspectiveNO:()=>hr,perspectiveZO:()=>di,rotate:()=>Xn,rotateX:()=>Yn,rotateY:()=>$n,rotateZ:()=>jn,scale:()=>Kn,set:()=>Bn,str:()=>vi,sub:()=>zi,subtract:()=>mr,targetTo:()=>gi,translate:()=>Wn,transpose:()=>Un});function In(){var e=new D(16);return D!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0),e[0]=1,e[5]=1,e[10]=1,e[15]=1,e}function Cn(e){var t=new D(16);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function Dn(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function Fn(e,t,r,n,i,s,a,o,c,l,u,d,h,m,p,g){var f=new D(16);return f[0]=e,f[1]=t,f[2]=r,f[3]=n,f[4]=i,f[5]=s,f[6]=a,f[7]=o,f[8]=c,f[9]=l,f[10]=u,f[11]=d,f[12]=h,f[13]=m,f[14]=p,f[15]=g,f}function Bn(e,t,r,n,i,s,a,o,c,l,u,d,h,m,p,g,f){return e[0]=t,e[1]=r,e[2]=n,e[3]=i,e[4]=s,e[5]=a,e[6]=o,e[7]=c,e[8]=l,e[9]=u,e[10]=d,e[11]=h,e[12]=m,e[13]=p,e[14]=g,e[15]=f,e}function cr(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Un(e,t){if(e===t){var r=t[1],n=t[2],i=t[3],s=t[6],a=t[7],o=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=r,e[6]=t[9],e[7]=t[13],e[8]=n,e[9]=s,e[11]=t[14],e[12]=i,e[13]=a,e[14]=o}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15];return e}function Gn(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=t[4],o=t[5],c=t[6],l=t[7],u=t[8],d=t[9],h=t[10],m=t[11],p=t[12],g=t[13],f=t[14],v=t[15],S=r*o-n*a,w=r*c-i*a,_=r*l-s*a,y=n*c-i*o,x=n*l-s*o,b=i*l-s*c,z=u*g-d*p,T=u*f-h*p,E=u*v-m*p,R=d*f-h*g,N=d*v-m*g,O=h*v-m*f,L=S*O-w*N+_*R+y*E-x*T+b*z;return L?(L=1/L,e[0]=(o*O-c*N+l*R)*L,e[1]=(i*N-n*O-s*R)*L,e[2]=(g*b-f*x+v*y)*L,e[3]=(h*x-d*b-m*y)*L,e[4]=(c*E-a*O-l*T)*L,e[5]=(r*O-i*E+s*T)*L,e[6]=(f*_-p*b-v*w)*L,e[7]=(u*b-h*_+m*w)*L,e[8]=(a*N-o*E+l*z)*L,e[9]=(n*E-r*N-s*z)*L,e[10]=(p*x-g*_+v*S)*L,e[11]=(d*_-u*x-m*S)*L,e[12]=(o*T-a*R-c*z)*L,e[13]=(r*R-n*T+i*z)*L,e[14]=(g*w-p*y-f*S)*L,e[15]=(u*y-d*w+h*S)*L,e):null}function Vn(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=t[4],o=t[5],c=t[6],l=t[7],u=t[8],d=t[9],h=t[10],m=t[11],p=t[12],g=t[13],f=t[14],v=t[15],S=r*o-n*a,w=r*c-i*a,_=r*l-s*a,y=n*c-i*o,x=n*l-s*o,b=i*l-s*c,z=u*g-d*p,T=u*f-h*p,E=u*v-m*p,R=d*f-h*g,N=d*v-m*g,O=h*v-m*f;return e[0]=o*O-c*N+l*R,e[1]=i*N-n*O-s*R,e[2]=g*b-f*x+v*y,e[3]=h*x-d*b-m*y,e[4]=c*E-a*O-l*T,e[5]=r*O-i*E+s*T,e[6]=f*_-p*b-v*w,e[7]=u*b-h*_+m*w,e[8]=a*N-o*E+l*z,e[9]=n*E-r*N-s*z,e[10]=p*x-g*_+v*S,e[11]=d*_-u*x-m*S,e[12]=o*T-a*R-c*z,e[13]=r*R-n*T+i*z,e[14]=g*w-p*y-f*S,e[15]=u*y-d*w+h*S,e}function Hn(e){var t=e[0],r=e[1],n=e[2],i=e[3],s=e[4],a=e[5],o=e[6],c=e[7],l=e[8],u=e[9],d=e[10],h=e[11],m=e[12],p=e[13],g=e[14],f=e[15],v=t*a-r*s,S=t*o-n*s,w=r*o-n*a,_=l*p-u*m,y=l*g-d*m,x=u*g-d*p,b=t*x-r*y+n*_,z=s*x-a*y+o*_,T=l*w-u*S+d*v,E=m*w-p*S+g*v;return c*b-i*z+f*T-h*E}function lr(e,t,r){var n=t[0],i=t[1],s=t[2],a=t[3],o=t[4],c=t[5],l=t[6],u=t[7],d=t[8],h=t[9],m=t[10],p=t[11],g=t[12],f=t[13],v=t[14],S=t[15],w=r[0],_=r[1],y=r[2],x=r[3];return e[0]=w*n+_*o+y*d+x*g,e[1]=w*i+_*c+y*h+x*f,e[2]=w*s+_*l+y*m+x*v,e[3]=w*a+_*u+y*p+x*S,w=r[4],_=r[5],y=r[6],x=r[7],e[4]=w*n+_*o+y*d+x*g,e[5]=w*i+_*c+y*h+x*f,e[6]=w*s+_*l+y*m+x*v,e[7]=w*a+_*u+y*p+x*S,w=r[8],_=r[9],y=r[10],x=r[11],e[8]=w*n+_*o+y*d+x*g,e[9]=w*i+_*c+y*h+x*f,e[10]=w*s+_*l+y*m+x*v,e[11]=w*a+_*u+y*p+x*S,w=r[12],_=r[13],y=r[14],x=r[15],e[12]=w*n+_*o+y*d+x*g,e[13]=w*i+_*c+y*h+x*f,e[14]=w*s+_*l+y*m+x*v,e[15]=w*a+_*u+y*p+x*S,e}function Wn(e,t,r){var n=r[0],i=r[1],s=r[2],a,o,c,l,u,d,h,m,p,g,f,v;return t===e?(e[12]=t[0]*n+t[4]*i+t[8]*s+t[12],e[13]=t[1]*n+t[5]*i+t[9]*s+t[13],e[14]=t[2]*n+t[6]*i+t[10]*s+t[14],e[15]=t[3]*n+t[7]*i+t[11]*s+t[15]):(a=t[0],o=t[1],c=t[2],l=t[3],u=t[4],d=t[5],h=t[6],m=t[7],p=t[8],g=t[9],f=t[10],v=t[11],e[0]=a,e[1]=o,e[2]=c,e[3]=l,e[4]=u,e[5]=d,e[6]=h,e[7]=m,e[8]=p,e[9]=g,e[10]=f,e[11]=v,e[12]=a*n+u*i+p*s+t[12],e[13]=o*n+d*i+g*s+t[13],e[14]=c*n+h*i+f*s+t[14],e[15]=l*n+m*i+v*s+t[15]),e}function Kn(e,t,r){var n=r[0],i=r[1],s=r[2];return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e[4]=t[4]*i,e[5]=t[5]*i,e[6]=t[6]*i,e[7]=t[7]*i,e[8]=t[8]*s,e[9]=t[9]*s,e[10]=t[10]*s,e[11]=t[11]*s,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function Xn(e,t,r,n){var i=n[0],s=n[1],a=n[2],o=Math.sqrt(i*i+s*s+a*a),c,l,u,d,h,m,p,g,f,v,S,w,_,y,x,b,z,T,E,R,N,O,L,G;return o<M?null:(o=1/o,i*=o,s*=o,a*=o,c=Math.sin(r),l=Math.cos(r),u=1-l,d=t[0],h=t[1],m=t[2],p=t[3],g=t[4],f=t[5],v=t[6],S=t[7],w=t[8],_=t[9],y=t[10],x=t[11],b=i*i*u+l,z=s*i*u+a*c,T=a*i*u-s*c,E=i*s*u-a*c,R=s*s*u+l,N=a*s*u+i*c,O=i*a*u+s*c,L=s*a*u-i*c,G=a*a*u+l,e[0]=d*b+g*z+w*T,e[1]=h*b+f*z+_*T,e[2]=m*b+v*z+y*T,e[3]=p*b+S*z+x*T,e[4]=d*E+g*R+w*N,e[5]=h*E+f*R+_*N,e[6]=m*E+v*R+y*N,e[7]=p*E+S*R+x*N,e[8]=d*O+g*L+w*G,e[9]=h*O+f*L+_*G,e[10]=m*O+v*L+y*G,e[11]=p*O+S*L+x*G,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}function Yn(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[4],a=t[5],o=t[6],c=t[7],l=t[8],u=t[9],d=t[10],h=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=s*i+l*n,e[5]=a*i+u*n,e[6]=o*i+d*n,e[7]=c*i+h*n,e[8]=l*i-s*n,e[9]=u*i-a*n,e[10]=d*i-o*n,e[11]=h*i-c*n,e}function $n(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],a=t[1],o=t[2],c=t[3],l=t[8],u=t[9],d=t[10],h=t[11];return t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=s*i-l*n,e[1]=a*i-u*n,e[2]=o*i-d*n,e[3]=c*i-h*n,e[8]=s*n+l*i,e[9]=a*n+u*i,e[10]=o*n+d*i,e[11]=c*n+h*i,e}function jn(e,t,r){var n=Math.sin(r),i=Math.cos(r),s=t[0],a=t[1],o=t[2],c=t[3],l=t[4],u=t[5],d=t[6],h=t[7];return t!==e&&(e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=s*i+l*n,e[1]=a*i+u*n,e[2]=o*i+d*n,e[3]=c*i+h*n,e[4]=l*i-s*n,e[5]=u*i-a*n,e[6]=d*i-o*n,e[7]=h*i-c*n,e}function qn(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=t[0],e[13]=t[1],e[14]=t[2],e[15]=1,e}function Zn(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=t[1],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=t[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Jn(e,t,r){var n=r[0],i=r[1],s=r[2],a=Math.sqrt(n*n+i*i+s*s),o,c,l;return a<M?null:(a=1/a,n*=a,i*=a,s*=a,o=Math.sin(t),c=Math.cos(t),l=1-c,e[0]=n*n*l+c,e[1]=i*n*l+s*o,e[2]=s*n*l-i*o,e[3]=0,e[4]=n*i*l-s*o,e[5]=i*i*l+c,e[6]=s*i*l+n*o,e[7]=0,e[8]=n*s*l+i*o,e[9]=i*s*l-n*o,e[10]=s*s*l+c,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e)}function Qn(e,t){var r=Math.sin(t),n=Math.cos(t);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=n,e[6]=r,e[7]=0,e[8]=0,e[9]=-r,e[10]=n,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function ei(e,t){var r=Math.sin(t),n=Math.cos(t);return e[0]=n,e[1]=0,e[2]=-r,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=r,e[9]=0,e[10]=n,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function ti(e,t){var r=Math.sin(t),n=Math.cos(t);return e[0]=n,e[1]=r,e[2]=0,e[3]=0,e[4]=-r,e[5]=n,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function ur(e,t,r){var n=t[0],i=t[1],s=t[2],a=t[3],o=n+n,c=i+i,l=s+s,u=n*o,d=n*c,h=n*l,m=i*c,p=i*l,g=s*l,f=a*o,v=a*c,S=a*l;return e[0]=1-(m+g),e[1]=d+S,e[2]=h-v,e[3]=0,e[4]=d-S,e[5]=1-(u+g),e[6]=p+f,e[7]=0,e[8]=h+v,e[9]=p-f,e[10]=1-(u+m),e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function ri(e,t){var r=new D(3),n=-t[0],i=-t[1],s=-t[2],a=t[3],o=t[4],c=t[5],l=t[6],u=t[7],d=n*n+i*i+s*s+a*a;return d>0?(r[0]=(o*a+u*n+c*s-l*i)*2/d,r[1]=(c*a+u*i+l*n-o*s)*2/d,r[2]=(l*a+u*s+o*i-c*n)*2/d):(r[0]=(o*a+u*n+c*s-l*i)*2,r[1]=(c*a+u*i+l*n-o*s)*2,r[2]=(l*a+u*s+o*i-c*n)*2),ur(e,t,r),e}function ni(e,t){return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function dr(e,t){var r=t[0],n=t[1],i=t[2],s=t[4],a=t[5],o=t[6],c=t[8],l=t[9],u=t[10];return e[0]=Math.sqrt(r*r+n*n+i*i),e[1]=Math.sqrt(s*s+a*a+o*o),e[2]=Math.sqrt(c*c+l*l+u*u),e}function ii(e,t){var r=new D(3);dr(r,t);var n=1/r[0],i=1/r[1],s=1/r[2],a=t[0]*n,o=t[1]*i,c=t[2]*s,l=t[4]*n,u=t[5]*i,d=t[6]*s,h=t[8]*n,m=t[9]*i,p=t[10]*s,g=a+u+p,f=0;return g>0?(f=Math.sqrt(g+1)*2,e[3]=.25*f,e[0]=(d-m)/f,e[1]=(h-c)/f,e[2]=(o-l)/f):a>u&&a>p?(f=Math.sqrt(1+a-u-p)*2,e[3]=(d-m)/f,e[0]=.25*f,e[1]=(o+l)/f,e[2]=(h+c)/f):u>p?(f=Math.sqrt(1+u-a-p)*2,e[3]=(h-c)/f,e[0]=(o+l)/f,e[1]=.25*f,e[2]=(d+m)/f):(f=Math.sqrt(1+p-a-u)*2,e[3]=(o-l)/f,e[0]=(h+c)/f,e[1]=(d+m)/f,e[2]=.25*f),e}function si(e,t,r,n){t[0]=n[12],t[1]=n[13],t[2]=n[14];var i=n[0],s=n[1],a=n[2],o=n[4],c=n[5],l=n[6],u=n[8],d=n[9],h=n[10];r[0]=Math.sqrt(i*i+s*s+a*a),r[1]=Math.sqrt(o*o+c*c+l*l),r[2]=Math.sqrt(u*u+d*d+h*h);var m=1/r[0],p=1/r[1],g=1/r[2],f=i*m,v=s*p,S=a*g,w=o*m,_=c*p,y=l*g,x=u*m,b=d*p,z=h*g,T=f+_+z,E=0;return T>0?(E=Math.sqrt(T+1)*2,e[3]=.25*E,e[0]=(y-b)/E,e[1]=(x-S)/E,e[2]=(v-w)/E):f>_&&f>z?(E=Math.sqrt(1+f-_-z)*2,e[3]=(y-b)/E,e[0]=.25*E,e[1]=(v+w)/E,e[2]=(x+S)/E):_>z?(E=Math.sqrt(1+_-f-z)*2,e[3]=(x-S)/E,e[0]=(v+w)/E,e[1]=.25*E,e[2]=(y+b)/E):(E=Math.sqrt(1+z-f-_)*2,e[3]=(v-w)/E,e[0]=(x+S)/E,e[1]=(y+b)/E,e[2]=.25*E),e}function ai(e,t,r,n){var i=t[0],s=t[1],a=t[2],o=t[3],c=i+i,l=s+s,u=a+a,d=i*c,h=i*l,m=i*u,p=s*l,g=s*u,f=a*u,v=o*c,S=o*l,w=o*u,_=n[0],y=n[1],x=n[2];return e[0]=(1-(p+f))*_,e[1]=(h+w)*_,e[2]=(m-S)*_,e[3]=0,e[4]=(h-w)*y,e[5]=(1-(d+f))*y,e[6]=(g+v)*y,e[7]=0,e[8]=(m+S)*x,e[9]=(g-v)*x,e[10]=(1-(d+p))*x,e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function oi(e,t,r,n,i){var s=t[0],a=t[1],o=t[2],c=t[3],l=s+s,u=a+a,d=o+o,h=s*l,m=s*u,p=s*d,g=a*u,f=a*d,v=o*d,S=c*l,w=c*u,_=c*d,y=n[0],x=n[1],b=n[2],z=i[0],T=i[1],E=i[2],R=(1-(g+v))*y,N=(m+_)*y,O=(p-w)*y,L=(m-_)*x,G=(1-(h+v))*x,fe=(f+S)*x,me=(p+w)*b,sr=(f-S)*b,ar=(1-(h+g))*b;return e[0]=R,e[1]=N,e[2]=O,e[3]=0,e[4]=L,e[5]=G,e[6]=fe,e[7]=0,e[8]=me,e[9]=sr,e[10]=ar,e[11]=0,e[12]=r[0]+z-(R*z+L*T+me*E),e[13]=r[1]+T-(N*z+G*T+sr*E),e[14]=r[2]+E-(O*z+fe*T+ar*E),e[15]=1,e}function ci(e,t){var r=t[0],n=t[1],i=t[2],s=t[3],a=r+r,o=n+n,c=i+i,l=r*a,u=n*a,d=n*o,h=i*a,m=i*o,p=i*c,g=s*a,f=s*o,v=s*c;return e[0]=1-d-p,e[1]=u+v,e[2]=h-f,e[3]=0,e[4]=u-v,e[5]=1-l-p,e[6]=m+g,e[7]=0,e[8]=h+f,e[9]=m-g,e[10]=1-l-d,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function li(e,t,r,n,i,s,a){var o=1/(r-t),c=1/(i-n),l=1/(s-a);return e[0]=s*2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s*2*c,e[6]=0,e[7]=0,e[8]=(r+t)*o,e[9]=(i+n)*c,e[10]=(a+s)*l,e[11]=-1,e[12]=0,e[13]=0,e[14]=a*s*2*l,e[15]=0,e}function hr(e,t,r,n,i){var s=1/Math.tan(t/2);if(e[0]=s/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,i!=null&&i!==1/0){var a=1/(n-i);e[10]=(i+n)*a,e[14]=2*i*n*a}else e[10]=-1,e[14]=-2*n;return e}var ui=hr;function di(e,t,r,n,i){var s=1/Math.tan(t/2);if(e[0]=s/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=s,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,i!=null&&i!==1/0){var a=1/(n-i);e[10]=i*a,e[14]=i*n*a}else e[10]=-1,e[14]=-n;return e}function hi(e,t,r,n){var i=Math.tan(t.upDegrees*Math.PI/180),s=Math.tan(t.downDegrees*Math.PI/180),a=Math.tan(t.leftDegrees*Math.PI/180),o=Math.tan(t.rightDegrees*Math.PI/180),c=2/(a+o),l=2/(i+s);return e[0]=c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=l,e[6]=0,e[7]=0,e[8]=-((a-o)*c*.5),e[9]=(i-s)*l*.5,e[10]=n/(r-n),e[11]=-1,e[12]=0,e[13]=0,e[14]=n*r/(r-n),e[15]=0,e}function fr(e,t,r,n,i,s,a){var o=1/(t-r),c=1/(n-i),l=1/(s-a);return e[0]=-2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*l,e[11]=0,e[12]=(t+r)*o,e[13]=(i+n)*c,e[14]=(a+s)*l,e[15]=1,e}var fi=fr;function mi(e,t,r,n,i,s,a){var o=1/(t-r),c=1/(n-i),l=1/(s-a);return e[0]=-2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=l,e[11]=0,e[12]=(t+r)*o,e[13]=(i+n)*c,e[14]=s*l,e[15]=1,e}function pi(e,t,r,n){var i,s,a,o,c,l,u,d,h,m,p=t[0],g=t[1],f=t[2],v=n[0],S=n[1],w=n[2],_=r[0],y=r[1],x=r[2];return Math.abs(p-_)<M&&Math.abs(g-y)<M&&Math.abs(f-x)<M?cr(e):(u=p-_,d=g-y,h=f-x,m=1/Math.sqrt(u*u+d*d+h*h),u*=m,d*=m,h*=m,i=S*h-w*d,s=w*u-v*h,a=v*d-S*u,m=Math.sqrt(i*i+s*s+a*a),m?(m=1/m,i*=m,s*=m,a*=m):(i=0,s=0,a=0),o=d*a-h*s,c=h*i-u*a,l=u*s-d*i,m=Math.sqrt(o*o+c*c+l*l),m?(m=1/m,o*=m,c*=m,l*=m):(o=0,c=0,l=0),e[0]=i,e[1]=o,e[2]=u,e[3]=0,e[4]=s,e[5]=c,e[6]=d,e[7]=0,e[8]=a,e[9]=l,e[10]=h,e[11]=0,e[12]=-(i*p+s*g+a*f),e[13]=-(o*p+c*g+l*f),e[14]=-(u*p+d*g+h*f),e[15]=1,e)}function gi(e,t,r,n){var i=t[0],s=t[1],a=t[2],o=n[0],c=n[1],l=n[2],u=i-r[0],d=s-r[1],h=a-r[2],m=u*u+d*d+h*h;m>0&&(m=1/Math.sqrt(m),u*=m,d*=m,h*=m);var p=c*h-l*d,g=l*u-o*h,f=o*d-c*u;return m=p*p+g*g+f*f,m>0&&(m=1/Math.sqrt(m),p*=m,g*=m,f*=m),e[0]=p,e[1]=g,e[2]=f,e[3]=0,e[4]=d*f-h*g,e[5]=h*p-u*f,e[6]=u*g-d*p,e[7]=0,e[8]=u,e[9]=d,e[10]=h,e[11]=0,e[12]=i,e[13]=s,e[14]=a,e[15]=1,e}function vi(e){return"mat4("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+", "+e[9]+", "+e[10]+", "+e[11]+", "+e[12]+", "+e[13]+", "+e[14]+", "+e[15]+")"}function yi(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]+e[3]*e[3]+e[4]*e[4]+e[5]*e[5]+e[6]*e[6]+e[7]*e[7]+e[8]*e[8]+e[9]*e[9]+e[10]*e[10]+e[11]*e[11]+e[12]*e[12]+e[13]*e[13]+e[14]*e[14]+e[15]*e[15])}function xi(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e[3]=t[3]+r[3],e[4]=t[4]+r[4],e[5]=t[5]+r[5],e[6]=t[6]+r[6],e[7]=t[7]+r[7],e[8]=t[8]+r[8],e[9]=t[9]+r[9],e[10]=t[10]+r[10],e[11]=t[11]+r[11],e[12]=t[12]+r[12],e[13]=t[13]+r[13],e[14]=t[14]+r[14],e[15]=t[15]+r[15],e}function mr(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e[3]=t[3]-r[3],e[4]=t[4]-r[4],e[5]=t[5]-r[5],e[6]=t[6]-r[6],e[7]=t[7]-r[7],e[8]=t[8]-r[8],e[9]=t[9]-r[9],e[10]=t[10]-r[10],e[11]=t[11]-r[11],e[12]=t[12]-r[12],e[13]=t[13]-r[13],e[14]=t[14]-r[14],e[15]=t[15]-r[15],e}function _i(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*r,e[5]=t[5]*r,e[6]=t[6]*r,e[7]=t[7]*r,e[8]=t[8]*r,e[9]=t[9]*r,e[10]=t[10]*r,e[11]=t[11]*r,e[12]=t[12]*r,e[13]=t[13]*r,e[14]=t[14]*r,e[15]=t[15]*r,e}function wi(e,t,r,n){return e[0]=t[0]+r[0]*n,e[1]=t[1]+r[1]*n,e[2]=t[2]+r[2]*n,e[3]=t[3]+r[3]*n,e[4]=t[4]+r[4]*n,e[5]=t[5]+r[5]*n,e[6]=t[6]+r[6]*n,e[7]=t[7]+r[7]*n,e[8]=t[8]+r[8]*n,e[9]=t[9]+r[9]*n,e[10]=t[10]+r[10]*n,e[11]=t[11]+r[11]*n,e[12]=t[12]+r[12]*n,e[13]=t[13]+r[13]*n,e[14]=t[14]+r[14]*n,e[15]=t[15]+r[15]*n,e}function Si(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]&&e[9]===t[9]&&e[10]===t[10]&&e[11]===t[11]&&e[12]===t[12]&&e[13]===t[13]&&e[14]===t[14]&&e[15]===t[15]}function Ai(e,t){var r=e[0],n=e[1],i=e[2],s=e[3],a=e[4],o=e[5],c=e[6],l=e[7],u=e[8],d=e[9],h=e[10],m=e[11],p=e[12],g=e[13],f=e[14],v=e[15],S=t[0],w=t[1],_=t[2],y=t[3],x=t[4],b=t[5],z=t[6],T=t[7],E=t[8],R=t[9],N=t[10],O=t[11],L=t[12],G=t[13],fe=t[14],me=t[15];return Math.abs(r-S)<=M*Math.max(1,Math.abs(r),Math.abs(S))&&Math.abs(n-w)<=M*Math.max(1,Math.abs(n),Math.abs(w))&&Math.abs(i-_)<=M*Math.max(1,Math.abs(i),Math.abs(_))&&Math.abs(s-y)<=M*Math.max(1,Math.abs(s),Math.abs(y))&&Math.abs(a-x)<=M*Math.max(1,Math.abs(a),Math.abs(x))&&Math.abs(o-b)<=M*Math.max(1,Math.abs(o),Math.abs(b))&&Math.abs(c-z)<=M*Math.max(1,Math.abs(c),Math.abs(z))&&Math.abs(l-T)<=M*Math.max(1,Math.abs(l),Math.abs(T))&&Math.abs(u-E)<=M*Math.max(1,Math.abs(u),Math.abs(E))&&Math.abs(d-R)<=M*Math.max(1,Math.abs(d),Math.abs(R))&&Math.abs(h-N)<=M*Math.max(1,Math.abs(h),Math.abs(N))&&Math.abs(m-O)<=M*Math.max(1,Math.abs(m),Math.abs(O))&&Math.abs(p-L)<=M*Math.max(1,Math.abs(p),Math.abs(L))&&Math.abs(g-G)<=M*Math.max(1,Math.abs(g),Math.abs(G))&&Math.abs(f-fe)<=M*Math.max(1,Math.abs(f),Math.abs(fe))&&Math.abs(v-me)<=M*Math.max(1,Math.abs(v),Math.abs(me))}var Ei=lr,zi=mr;var k={};it(k,{add:()=>Mi,angle:()=>Qi,bezier:()=>Ki,ceil:()=>Ni,clone:()=>bi,copy:()=>Li,create:()=>pr,cross:()=>Gi,dist:()=>os,distance:()=>_r,div:()=>as,divide:()=>xr,dot:()=>at,equals:()=>ns,exactEquals:()=>rs,floor:()=>Pi,forEach:()=>ds,fromValues:()=>Ti,hermite:()=>Wi,inverse:()=>Bi,len:()=>ls,length:()=>gr,lerp:()=>Vi,max:()=>Oi,min:()=>ki,mul:()=>ss,multiply:()=>yr,negate:()=>Fi,normalize:()=>Ui,random:()=>Xi,rotateX:()=>qi,rotateY:()=>Zi,rotateZ:()=>Ji,round:()=>Ii,scale:()=>Ci,scaleAndAdd:()=>Di,set:()=>Ri,slerp:()=>Hi,sqrDist:()=>cs,sqrLen:()=>us,squaredDistance:()=>wr,squaredLength:()=>Sr,str:()=>ts,sub:()=>is,subtract:()=>vr,transformMat3:()=>$i,transformMat4:()=>Yi,transformQuat:()=>ji,zero:()=>es});function pr(){var e=new D(3);return D!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function bi(e){var t=new D(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function gr(e){var t=e[0],r=e[1],n=e[2];return Math.sqrt(t*t+r*r+n*n)}function Ti(e,t,r){var n=new D(3);return n[0]=e,n[1]=t,n[2]=r,n}function Li(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function Ri(e,t,r,n){return e[0]=t,e[1]=r,e[2]=n,e}function Mi(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e}function vr(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e}function yr(e,t,r){return e[0]=t[0]*r[0],e[1]=t[1]*r[1],e[2]=t[2]*r[2],e}function xr(e,t,r){return e[0]=t[0]/r[0],e[1]=t[1]/r[1],e[2]=t[2]/r[2],e}function Ni(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function Pi(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function ki(e,t,r){return e[0]=Math.min(t[0],r[0]),e[1]=Math.min(t[1],r[1]),e[2]=Math.min(t[2],r[2]),e}function Oi(e,t,r){return e[0]=Math.max(t[0],r[0]),e[1]=Math.max(t[1],r[1]),e[2]=Math.max(t[2],r[2]),e}function Ii(e,t){return e[0]=Ee(t[0]),e[1]=Ee(t[1]),e[2]=Ee(t[2]),e}function Ci(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e}function Di(e,t,r,n){return e[0]=t[0]+r[0]*n,e[1]=t[1]+r[1]*n,e[2]=t[2]+r[2]*n,e}function _r(e,t){var r=t[0]-e[0],n=t[1]-e[1],i=t[2]-e[2];return Math.sqrt(r*r+n*n+i*i)}function wr(e,t){var r=t[0]-e[0],n=t[1]-e[1],i=t[2]-e[2];return r*r+n*n+i*i}function Sr(e){var t=e[0],r=e[1],n=e[2];return t*t+r*r+n*n}function Fi(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function Bi(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function Ui(e,t){var r=t[0],n=t[1],i=t[2],s=r*r+n*n+i*i;return s>0&&(s=1/Math.sqrt(s)),e[0]=t[0]*s,e[1]=t[1]*s,e[2]=t[2]*s,e}function at(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Gi(e,t,r){var n=t[0],i=t[1],s=t[2],a=r[0],o=r[1],c=r[2];return e[0]=i*c-s*o,e[1]=s*a-n*c,e[2]=n*o-i*a,e}function Vi(e,t,r,n){var i=t[0],s=t[1],a=t[2];return e[0]=i+n*(r[0]-i),e[1]=s+n*(r[1]-s),e[2]=a+n*(r[2]-a),e}function Hi(e,t,r,n){var i=Math.acos(Math.min(Math.max(at(t,r),-1),1)),s=Math.sin(i),a=Math.sin((1-n)*i)/s,o=Math.sin(n*i)/s;return e[0]=a*t[0]+o*r[0],e[1]=a*t[1]+o*r[1],e[2]=a*t[2]+o*r[2],e}function Wi(e,t,r,n,i,s){var a=s*s,o=a*(2*s-3)+1,c=a*(s-2)+s,l=a*(s-1),u=a*(3-2*s);return e[0]=t[0]*o+r[0]*c+n[0]*l+i[0]*u,e[1]=t[1]*o+r[1]*c+n[1]*l+i[1]*u,e[2]=t[2]*o+r[2]*c+n[2]*l+i[2]*u,e}function Ki(e,t,r,n,i,s){var a=1-s,o=a*a,c=s*s,l=o*a,u=3*s*o,d=3*c*a,h=c*s;return e[0]=t[0]*l+r[0]*u+n[0]*d+i[0]*h,e[1]=t[1]*l+r[1]*u+n[1]*d+i[1]*h,e[2]=t[2]*l+r[2]*u+n[2]*d+i[2]*h,e}function Xi(e,t){t=t===void 0?1:t;var r=st()*2*Math.PI,n=st()*2-1,i=Math.sqrt(1-n*n)*t;return e[0]=Math.cos(r)*i,e[1]=Math.sin(r)*i,e[2]=n*t,e}function Yi(e,t,r){var n=t[0],i=t[1],s=t[2],a=r[3]*n+r[7]*i+r[11]*s+r[15];return a=a||1,e[0]=(r[0]*n+r[4]*i+r[8]*s+r[12])/a,e[1]=(r[1]*n+r[5]*i+r[9]*s+r[13])/a,e[2]=(r[2]*n+r[6]*i+r[10]*s+r[14])/a,e}function $i(e,t,r){var n=t[0],i=t[1],s=t[2];return e[0]=n*r[0]+i*r[3]+s*r[6],e[1]=n*r[1]+i*r[4]+s*r[7],e[2]=n*r[2]+i*r[5]+s*r[8],e}function ji(e,t,r){var n=r[0],i=r[1],s=r[2],a=r[3],o=t[0],c=t[1],l=t[2],u=i*l-s*c,d=s*o-n*l,h=n*c-i*o;return u=u+u,d=d+d,h=h+h,e[0]=o+a*u+i*h-s*d,e[1]=c+a*d+s*u-n*h,e[2]=l+a*h+n*d-i*u,e}function qi(e,t,r,n){var i=[],s=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],s[0]=i[0],s[1]=i[1]*Math.cos(n)-i[2]*Math.sin(n),s[2]=i[1]*Math.sin(n)+i[2]*Math.cos(n),e[0]=s[0]+r[0],e[1]=s[1]+r[1],e[2]=s[2]+r[2],e}function Zi(e,t,r,n){var i=[],s=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],s[0]=i[2]*Math.sin(n)+i[0]*Math.cos(n),s[1]=i[1],s[2]=i[2]*Math.cos(n)-i[0]*Math.sin(n),e[0]=s[0]+r[0],e[1]=s[1]+r[1],e[2]=s[2]+r[2],e}function Ji(e,t,r,n){var i=[],s=[];return i[0]=t[0]-r[0],i[1]=t[1]-r[1],i[2]=t[2]-r[2],s[0]=i[0]*Math.cos(n)-i[1]*Math.sin(n),s[1]=i[0]*Math.sin(n)+i[1]*Math.cos(n),s[2]=i[2],e[0]=s[0]+r[0],e[1]=s[1]+r[1],e[2]=s[2]+r[2],e}function Qi(e,t){var r=e[0],n=e[1],i=e[2],s=t[0],a=t[1],o=t[2],c=Math.sqrt((r*r+n*n+i*i)*(s*s+a*a+o*o)),l=c&&at(e,t)/c;return Math.acos(Math.min(Math.max(l,-1),1))}function es(e){return e[0]=0,e[1]=0,e[2]=0,e}function ts(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function rs(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function ns(e,t){var r=e[0],n=e[1],i=e[2],s=t[0],a=t[1],o=t[2];return Math.abs(r-s)<=M*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(n-a)<=M*Math.max(1,Math.abs(n),Math.abs(a))&&Math.abs(i-o)<=M*Math.max(1,Math.abs(i),Math.abs(o))}var is=vr,ss=yr,as=xr,os=_r,cs=wr,ls=gr,us=Sr,ds=(function(){var e=pr();return function(t,r,n,i,s,a){var o,c;for(r||(r=3),n||(n=0),i?c=Math.min(i*r+n,t.length):c=t.length,o=n;o<c;o+=r)e[0]=t[o],e[1]=t[o+1],e[2]=t[o+2],s(e,e,a),t[o]=e[0],t[o+1]=e[1],t[o+2]=e[2];return t}})();var hs=Object.defineProperty,fs=(e,t)=>{for(var r in t)hs(e,r,{get:t[r],enumerable:!0})};var bc=Math.PI/180;var ms=Math.PI/180,Tc=180/Math.PI,pe=ms;var V=1,J=2;var ut=8,dt=16,ps=32;var gs=16384;var Ne=65536,Er=1<<17,vs=1<<18,ys=1<<19,xs=1<<20,_s=1<<21,ws=1<<22,Ss=1<<23,Lc=1<<24,Pe=1<<25,As=1<<26,Rc=1<<27,Mc=1<<28,Nc=1<<29,ke=1<<30,Pc=1<<31;var kc=1<<25,Oc=1<<28,Ic=1<<29,Cc=1<<30,Dc=1<<31,Fc=V|J,Bc=V|Ne|J|Pe|ke,Uc=V|Ne|J,Gc=V|Er|J|Pe|ke,Vc=ps|ut|dt,Hc=V|dt|ut,Es=V|Pe|ke|J|As,Wc=vs|ys|xs|_s|ws|Ss,Kc=V|ut|dt|Pe|ke,Xc=V|Ne|J,Yc=V|J,$c=V|Ne|J|Er,jc=Es|gs,qc=Number.MAX_SAFE_INTEGER-1;var zr=256,zs=256,bs=8192,Ts=2048,Ls=512,Rs=256,Ms=zr*2,Ns=256,ot=32;var br=(e=>(e[e.Name=0]="Name",e[e.CdTrack=1]="CdTrack",e[e.Sky=2]="Sky",e[e.SkyAxis=3]="SkyAxis",e[e.SkyRotate=4]="SkyRotate",e[e.StatusBar=5]="StatusBar",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+bs]="Sounds",e[e.Images=e.Sounds+Ts]="Images",e[e.Lights=e.Images+Ls]="Lights",e[e.ShadowLights=e.Lights+zs]="ShadowLights",e[e.Items=e.ShadowLights+Ns]="Items",e[e.PlayerSkins=e.Items+Rs]="PlayerSkins",e[e.General=e.PlayerSkins+zr]="General",e[e.WheelWeapons=e.General+Ms]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+ot]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+ot]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+ot]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(br||{}),Zc=br.MaxConfigStrings;var Ps={};fs(Ps,{addReplayFrame:()=>Cs,createReplaySession:()=>Is,deserializeReplay:()=>Os,serializeReplay:()=>ks});function ks(e){return JSON.stringify(e,null,2)}function Os(e){let t=JSON.parse(e);if(!t.metadata||!Array.isArray(t.frames))throw new Error("Invalid replay format: missing metadata or frames");return t}function Is(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function Cs(e,t,r,n){e.frames.push({serverFrame:r,cmd:t,timestamp:Date.now()-n})}var P=(e=>(e[e.bad=0]="bad",e[e.muzzleflash=1]="muzzleflash",e[e.muzzleflash2=2]="muzzleflash2",e[e.temp_entity=3]="temp_entity",e[e.layout=4]="layout",e[e.inventory=5]="inventory",e[e.nop=6]="nop",e[e.disconnect=7]="disconnect",e[e.reconnect=8]="reconnect",e[e.sound=9]="sound",e[e.print=10]="print",e[e.stufftext=11]="stufftext",e[e.serverdata=12]="serverdata",e[e.configstring=13]="configstring",e[e.spawnbaseline=14]="spawnbaseline",e[e.centerprint=15]="centerprint",e[e.download=16]="download",e[e.playerinfo=17]="playerinfo",e[e.packetentities=18]="packetentities",e[e.deltapacketentities=19]="deltapacketentities",e[e.frame=20]="frame",e))(P||{}),A=(e=>(e[e.GUNSHOT=0]="GUNSHOT",e[e.BLOOD=1]="BLOOD",e[e.BLASTER=2]="BLASTER",e[e.RAILTRAIL=3]="RAILTRAIL",e[e.SHOTGUN=4]="SHOTGUN",e[e.EXPLOSION1=5]="EXPLOSION1",e[e.EXPLOSION2=6]="EXPLOSION2",e[e.ROCKET_EXPLOSION=7]="ROCKET_EXPLOSION",e[e.GRENADE_EXPLOSION=8]="GRENADE_EXPLOSION",e[e.SPARKS=9]="SPARKS",e[e.SPLASH=10]="SPLASH",e[e.BUBBLETRAIL=11]="BUBBLETRAIL",e[e.SCREEN_SPARKS=12]="SCREEN_SPARKS",e[e.SHIELD_SPARKS=13]="SHIELD_SPARKS",e[e.BULLET_SPARKS=14]="BULLET_SPARKS",e[e.LASER_SPARKS=15]="LASER_SPARKS",e[e.PARASITE_ATTACK=16]="PARASITE_ATTACK",e[e.ROCKET_EXPLOSION_WATER=17]="ROCKET_EXPLOSION_WATER",e[e.GRENADE_EXPLOSION_WATER=18]="GRENADE_EXPLOSION_WATER",e[e.MEDIC_CABLE_ATTACK=19]="MEDIC_CABLE_ATTACK",e[e.BFG_EXPLOSION=20]="BFG_EXPLOSION",e[e.BFG_BIGEXPLOSION=21]="BFG_BIGEXPLOSION",e[e.BOSSTPORT=22]="BOSSTPORT",e[e.BFG_LASER=23]="BFG_LASER",e[e.GRAPPLE_CABLE=24]="GRAPPLE_CABLE",e[e.WELDING_SPARKS=25]="WELDING_SPARKS",e[e.GREENBLOOD=26]="GREENBLOOD",e[e.BLUEHYPERBLASTER=27]="BLUEHYPERBLASTER",e[e.PLASMA_EXPLOSION=28]="PLASMA_EXPLOSION",e[e.TUNNEL_SPARKS=29]="TUNNEL_SPARKS",e[e.BLASTER2=30]="BLASTER2",e[e.RAILTRAIL2=31]="RAILTRAIL2",e[e.FLAME=32]="FLAME",e[e.LIGHTNING=33]="LIGHTNING",e[e.DEBUGTRAIL=34]="DEBUGTRAIL",e[e.PLAIN_EXPLOSION=35]="PLAIN_EXPLOSION",e[e.FLASHLIGHT=36]="FLASHLIGHT",e[e.FORCEWALL=37]="FORCEWALL",e[e.HEATBEAM=38]="HEATBEAM",e[e.MONSTER_HEATBEAM=39]="MONSTER_HEATBEAM",e[e.STEAM=40]="STEAM",e[e.BUBBLETRAIL2=41]="BUBBLETRAIL2",e[e.MOREBLOOD=42]="MOREBLOOD",e[e.HEATBEAM_SPARKS=43]="HEATBEAM_SPARKS",e[e.HEATBEAM_STEAM=44]="HEATBEAM_STEAM",e[e.CHAINFIST_SMOKE=45]="CHAINFIST_SMOKE",e[e.ELECTRIC_SPARKS=46]="ELECTRIC_SPARKS",e[e.TRACKER_EXPLOSION=47]="TRACKER_EXPLOSION",e[e.TELEPORT_EFFECT=48]="TELEPORT_EFFECT",e[e.DBALL_GOAL=49]="DBALL_GOAL",e[e.WIDOWBEAMOUT=50]="WIDOWBEAMOUT",e[e.NUKEBLAST=51]="NUKEBLAST",e[e.WIDOWSPLASH=52]="WIDOWSPLASH",e[e.EXPLOSION1_BIG=53]="EXPLOSION1_BIG",e[e.EXPLOSION1_NP=54]="EXPLOSION1_NP",e[e.FLECHETTE=55]="FLECHETTE",e))(A||{}),Ds=class{constructor(e){e instanceof Uint8Array?this.view=new DataView(e.buffer,e.byteOffset,e.byteLength):this.view=new DataView(e),this.offset=0,this.length=this.view.byteLength}getPosition(){return this.offset}seek(e){if(e<0||e>this.length)throw new Error(`Seek out of bounds: ${e} (length: ${this.length})`);this.offset=e}hasMore(){return this.offset<this.length}readChar(){let e=this.view.getInt8(this.offset);return this.offset+=1,e}readByte(){let e=this.view.getUint8(this.offset);return this.offset+=1,e}readShort(){let e=this.view.getInt16(this.offset,!0);return this.offset+=2,e}readLong(){let e=this.view.getInt32(this.offset,!0);return this.offset+=4,e}readFloat(){let e=this.view.getFloat32(this.offset,!0);return this.offset+=4,e}readString(){let e="";for(;this.offset<this.length;){let t=this.readChar();if(t===-1||t===0)break;e+=String.fromCharCode(t)}return e}readStringLine(){let e="";for(;this.offset<this.length;){let t=this.readChar();if(t===-1||t===0||t===10)break;e+=String.fromCharCode(t)}return e}readCoord(){return this.readShort()*(1/8)}readAngle(){return this.readChar()*(360/256)}readAngle16(){return this.readShort()*360/65536}readData(e){if(this.offset+e>this.length)throw new Error(`Read out of bounds: ${this.offset+e} (length: ${this.length})`);let t=new Uint8Array(this.view.buffer,this.view.byteOffset+this.offset,e);return this.offset+=e,new Uint8Array(t)}readPos(e){e.x=this.readCoord(),e.y=this.readCoord(),e.z=this.readCoord()}readDir(e){if(this.readByte()>=162){e.x=0,e.y=0,e.z=0;return}e.x=0,e.y=0,e.z=0}};function Fs(){let e=new Uint32Array(256);for(let t=0;t<256;t+=1){let r=t;for(let n=0;n<8;n+=1)r=(r&1)!==0?3988292384^r>>>1:r>>>1;e[t]=r>>>0}return e}var Jc=Fs();var Qc=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"}]);var Bs=19,el=8+Bs*8;var lt=4,ct=7*lt,tl=[{index:0,size:3,type:5126,stride:ct,offset:0},{index:1,size:2,type:5126,stride:ct,offset:3*lt},{index:2,size:2,type:5126,stride:ct,offset:5*lt}];var rl=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]);var Tr=class{constructor(){this._position=k.create(),this._angles=k.create(),this._bobAngles=k.create(),this._bobOffset=k.create(),this._kickAngles=k.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}get position(){return this._position}set position(e){k.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){k.copy(this._angles,e),this._dirty=!0}get bobAngles(){return this._bobAngles}set bobAngles(e){k.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){k.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){k.copy(this._bobOffset,e),this._dirty=!0}get rollAngle(){return this._rollAngle}set rollAngle(e){this._rollAngle=e,this._dirty=!0}get fov(){return this._fov}set fov(e){this._fov=e,this._dirty=!0}get aspect(){return this._aspect}set aspect(e){this._aspect=e,this._dirty=!0}get viewMatrix(){return this.updateMatrices(),this._viewMatrix}get projectionMatrix(){return this.updateMatrices(),this._projectionMatrix}get viewProjectionMatrix(){return this.updateMatrices(),this._viewProjectionMatrix}getViewmodelProjectionMatrix(e){let t=I.create();return I.perspective(t,e*pe,this._aspect,this._near,this._far),t}updateMatrices(){if(!this._dirty)return;I.perspective(this._projectionMatrix,this._fov*pe,this._aspect,this._near,this._far);let e=I.fromValues(0,-1,0,0,0,0,1,0,-1,0,0,0,0,0,0,1),t=this._angles[0]+this._bobAngles[0]+this._kickAngles[0],r=this._angles[1]+this._bobAngles[1]+this._kickAngles[1],n=this._angles[2]+this._bobAngles[2]+this._kickAngles[2]+this._rollAngle,i=t*pe,s=r*pe,a=n*pe,o=I.create();I.identity(o),I.rotateZ(o,o,-s),I.rotateY(o,o,-i),I.rotateX(o,o,-a);let c=I.create();I.multiply(c,e,o);let l=k.add(k.create(),this._position,this._bobOffset),u=k.negate(k.create(),l),d=k.create();k.transformMat4(d,u,o);let h=k.fromValues(d[1]||0,d[2]||0,d[0]||0);I.copy(this._viewMatrix,c),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 Us=class{constructor(e){this.buffer=e,this.view=new DataView(e),this.offset=0}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(this.offset+=4,e<0||e>262144)return console.warn(`DemoReader: Invalid block length ${e} at offset ${this.offset-4}`),null;if(this.offset+e>this.buffer.byteLength)return console.warn(`DemoReader: Incomplete block. Expected ${e} bytes, but only ${this.buffer.byteLength-this.offset} remain.`),null;let t=this.buffer.slice(this.offset,this.offset+e);return this.offset+=e,{length:e,data:new Ds(t)}}reset(){this.offset=0}getOffset(){return this.offset}},ht=1,ft=2,mt=4,pt=8,gt=16,vt=32,Lr=64,Gs=128,Vs=256,yt=512,xt=1024,_t=2048,ze=4096,be=16384,Hs=32768,Te=65536,wt=1<<17,Le=1<<18,Re=1<<19,St=1<<20,At=1<<21,Et=1<<22,Ws=1<<23,zt=1<<24,Me=1<<25,bt=1<<26,Tt=1<<27,ie=()=>({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}),Ar=()=>({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)}),Ks=class{constructor(e,t){this.stream=e,this.handler=t}parseMessage(){for(;this.stream.hasMore();){let e=this.stream.readByte();if(e===-1)break;switch(e){case P.nop:break;case P.disconnect:this.handler?this.handler.onDisconnect():console.log("Server disconnected");break;case P.reconnect:this.handler?this.handler.onReconnect():console.log("Server reconnect");break;case P.print:let t=this.stream.readByte(),r=this.stream.readString();this.handler?this.handler.onPrint(t,r):console.log(`[Server Print ${t}]: ${r}`);break;case P.serverdata:this.parseServerData();break;case P.configstring:this.parseConfigString();break;case P.spawnbaseline:this.parseSpawnBaseline();break;case P.centerprint:let n=this.stream.readString();this.handler?this.handler.onCenterPrint(n):console.log(`[Center Print]: ${n}`);break;case P.download:this.parseDownload();break;case P.frame:this.parseFrame();break;case P.packetentities:this.parsePacketEntities(!1);break;case P.deltapacketentities:this.parsePacketEntities(!0);break;case P.stufftext:let i=this.stream.readString();this.handler?this.handler.onStuffText(i):console.log(`[StuffText]: ${i}`);break;case P.layout:let s=this.stream.readString();this.handler&&this.handler.onLayout(s);break;case P.inventory:this.parseInventory();break;case P.sound:this.parseSound();break;case P.muzzleflash:this.parseMuzzleFlash();break;case P.muzzleflash2:this.parseMuzzleFlash2();break;case P.temp_entity:this.parseTempEntity();break;default:console.warn(`Unknown server command: ${e}`);return}}}parseServerData(){let e=this.stream.readLong(),t=this.stream.readLong(),r=this.stream.readByte(),n=this.stream.readString(),i=this.stream.readShort(),s=this.stream.readString();this.handler?this.handler.onServerData(e,t,r,n,i,s):console.log(`Server Data: Protocol ${e}, Level ${s}, GameDir ${n}`)}parseConfigString(){let e=this.stream.readShort(),t=this.stream.readString();this.handler&&this.handler.onConfigString(e,t)}parseDownload(){let e=this.stream.readShort(),t=this.stream.readByte(),r;e>0&&(r=this.stream.readData(e)),this.handler&&this.handler.onDownload(e,t,r)}parseInventory(){let t=new Array(256);for(let r=0;r<256;r++)t[r]=this.stream.readShort();this.handler&&this.handler.onInventory(t)}parseSound(){let e=this.stream.readByte(),t=this.stream.readByte(),r,n,i,s,a;if(e&1&&(r=this.stream.readByte()),e&2&&(n=this.stream.readByte()),e&16&&(i=this.stream.readByte()),e&8&&(s=this.stream.readShort()),e&4){let o={x:0,y:0,z:0};this.stream.readPos(o),a=o}this.handler&&this.handler.onSound(e,t,r,n,i,s,a)}parseMuzzleFlash(){let e=this.stream.readShort(),t=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash(e,t)}parseMuzzleFlash2(){let e=this.stream.readShort(),t=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash2(e,t)}parseTempEntity(){let e=this.stream.readByte(),t={x:0,y:0,z:0},r={x:0,y:0,z:0},n={x:0,y:0,z:0},i,s,a,o,c;switch(e){case A.BLOOD:this.stream.readPos(t),this.stream.readDir(n);break;case A.GUNSHOT:case A.SPARKS:case A.BULLET_SPARKS:case A.SCREEN_SPARKS:case A.SHIELD_SPARKS:case A.SHOTGUN:this.stream.readPos(t),this.stream.readDir(n);break;case A.SPLASH:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte();break;case A.LASER_SPARKS:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte();break;case A.BLUEHYPERBLASTER:this.stream.readPos(t),this.stream.readPos(n);break;case A.BLASTER:this.stream.readPos(t),this.stream.readDir(n);break;case A.RAILTRAIL:this.stream.readPos(t),this.stream.readPos(r);break;case A.EXPLOSION2:case A.GRENADE_EXPLOSION:case A.GRENADE_EXPLOSION_WATER:case A.PLASMA_EXPLOSION:case A.EXPLOSION1:case A.EXPLOSION1_BIG:case A.ROCKET_EXPLOSION:case A.ROCKET_EXPLOSION_WATER:case A.EXPLOSION1_NP:case A.BFG_EXPLOSION:case A.BFG_BIGEXPLOSION:this.stream.readPos(t);break;case A.BFG_LASER:this.stream.readPos(t),this.stream.readPos(r);break;case A.BUBBLETRAIL:this.stream.readPos(t),this.stream.readPos(r);break;case A.PARASITE_ATTACK:case A.MEDIC_CABLE_ATTACK:a=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r);break;case A.BOSSTPORT:this.stream.readPos(t);break;case A.GRAPPLE_CABLE:a=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r),this.stream.readPos(n);break;case A.WELDING_SPARKS:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte();break;case A.GREENBLOOD:this.stream.readPos(t),this.stream.readDir(n);break;case A.TUNNEL_SPARKS:i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte();break;case A.BLASTER2:case A.FLECHETTE:this.stream.readPos(t),this.stream.readDir(n);break;case A.LIGHTNING:o=this.stream.readShort(),c=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r);break;case A.DEBUGTRAIL:this.stream.readPos(t),this.stream.readPos(r);break;case A.PLAIN_EXPLOSION:this.stream.readPos(t);break;case A.FLASHLIGHT:this.stream.readPos(t),a=this.stream.readShort();break;case A.FORCEWALL:this.stream.readPos(t),this.stream.readPos(r),s=this.stream.readByte();break;case A.HEATBEAM:a=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r),this.stream.readPos(n);break;case A.MONSTER_HEATBEAM:a=this.stream.readShort(),this.stream.readPos(t),this.stream.readPos(r),this.stream.readPos(n);break;case A.HEATBEAM_SPARKS:case A.HEATBEAM_STEAM:this.stream.readPos(t),this.stream.readDir(n);break;case A.STEAM:this.stream.readShort()!==-1?(i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte(),this.stream.readShort(),this.stream.readLong()):(i=this.stream.readByte(),this.stream.readPos(t),this.stream.readDir(n),s=this.stream.readByte(),this.stream.readShort());break;case A.BUBBLETRAIL2:this.stream.readPos(t),this.stream.readPos(r);break;case A.MOREBLOOD:this.stream.readPos(t),this.stream.readDir(n);break;case A.CHAINFIST_SMOKE:this.stream.readPos(t);break;case A.ELECTRIC_SPARKS:this.stream.readPos(t),this.stream.readDir(n);break;case A.TRACKER_EXPLOSION:this.stream.readPos(t);break;case A.TELEPORT_EFFECT:case A.DBALL_GOAL:this.stream.readPos(t);break;case A.WIDOWBEAMOUT:this.stream.readShort(),this.stream.readPos(t);break;case A.NUKEBLAST:this.stream.readPos(t);break;case A.WIDOWSPLASH:this.stream.readPos(t);break;default:console.warn(`CL_ParseTEnt: bad type ${e}`);break}this.handler&&this.handler.onTempEntity(e,t,r,n,i,s,a,o,c)}parseSpawnBaseline(){let e=this.parseEntityBits(),t=ie();this.parseDelta(ie(),t,e.number,e.bits),this.handler&&this.handler.onSpawnBaseline(t)}parseFrame(){let e=this.stream.readLong(),t=this.stream.readLong(),r=this.stream.readByte(),n=this.stream.readByte(),i=this.stream.readData(n),s=this.stream.readByte();if(s!==P.playerinfo)throw new Error(`Expected svc_playerinfo after svc_frame, got ${s}`);let a=this.parsePlayerState(),o=this.stream.readByte();if(o!==P.packetentities&&o!==P.deltapacketentities)throw new Error(`Expected svc_packetentities after svc_playerinfo, got ${o}`);let c=o===P.deltapacketentities,l=this.collectPacketEntities();this.handler&&this.handler.onFrame({serverFrame:e,deltaFrame:t,surpressCount:r,areaBytes:n,areaBits:i,playerState:a,packetEntities:{delta:c,entities:l}})}parsePlayerState(){let e=Ar(),t=this.stream.readShort();t&1&&(e.pm_type=this.stream.readByte()),t&2&&(e.origin.x=this.stream.readShort()*.125,e.origin.y=this.stream.readShort()*.125,e.origin.z=this.stream.readShort()*.125),t&4&&(e.velocity.x=this.stream.readShort()*.125,e.velocity.y=this.stream.readShort()*.125,e.velocity.z=this.stream.readShort()*.125),t&8&&(e.pm_time=this.stream.readByte()),t&16&&(e.pm_flags=this.stream.readByte()),t&32&&(e.gravity=this.stream.readShort()),t&64&&(e.delta_angles.x=this.stream.readShort()*(180/32768),e.delta_angles.y=this.stream.readShort()*(180/32768),e.delta_angles.z=this.stream.readShort()*(180/32768)),t&128&&(e.viewoffset.x=this.stream.readChar()*.25,e.viewoffset.y=this.stream.readChar()*.25,e.viewoffset.z=this.stream.readChar()*.25),t&256&&(e.viewangles.x=this.stream.readAngle16(),e.viewangles.y=this.stream.readAngle16(),e.viewangles.z=this.stream.readAngle16()),t&512&&(e.kick_angles.x=this.stream.readChar()*.25,e.kick_angles.y=this.stream.readChar()*.25,e.kick_angles.z=this.stream.readChar()*.25),t&4096&&(e.gun_index=this.stream.readByte()),t&8192&&(e.gun_frame=this.stream.readByte(),e.gun_offset.x=this.stream.readChar()*.25,e.gun_offset.y=this.stream.readChar()*.25,e.gun_offset.z=this.stream.readChar()*.25,e.gun_angles.x=this.stream.readChar()*.25,e.gun_angles.y=this.stream.readChar()*.25,e.gun_angles.z=this.stream.readChar()*.25),t&1024&&(e.blend[0]=this.stream.readByte(),e.blend[1]=this.stream.readByte(),e.blend[2]=this.stream.readByte(),e.blend[3]=this.stream.readByte()),t&2048&&(e.fov=this.stream.readByte()),t&16384&&(e.rdflags=this.stream.readByte());let r=this.stream.readLong();for(let n=0;n<32;n++)r&1<<n&&(e.stats[n]=this.stream.readShort());return e}parsePacketEntities(e){let t=this.collectPacketEntities();this.handler&&this.handler.onFrame({serverFrame:0,deltaFrame:0,surpressCount:0,areaBytes:0,areaBits:new Uint8Array,playerState:Ar(),packetEntities:{delta:e,entities:t}})}collectPacketEntities(){let e=[];for(;;){let t=this.parseEntityBits();if(t.number===0)break;let r=ie();this.parseDelta(ie(),r,t.number,t.bits),e.push(r)}return e}parseEntityBits(){let e=this.stream.readByte();e&Gs&&(e|=this.stream.readByte()<<8),e&Hs&&(e|=this.stream.readByte()<<16),e&Ws&&(e|=this.stream.readByte()<<24);let t;return e&Vs?t=this.stream.readShort():t=this.stream.readByte(),{number:t,bits:e}}parseDelta(e,t,r,n){t.number=e.number,t.modelindex=e.modelindex,t.modelindex2=e.modelindex2,t.modelindex3=e.modelindex3,t.modelindex4=e.modelindex4,t.frame=e.frame,t.skinnum=e.skinnum,t.effects=e.effects,t.renderfx=e.renderfx,t.origin.x=e.origin.x,t.origin.y=e.origin.y,t.origin.z=e.origin.z,t.old_origin.x=e.origin.x,t.old_origin.y=e.origin.y,t.old_origin.z=e.origin.z,t.angles.x=e.angles.x,t.angles.y=e.angles.y,t.angles.z=e.angles.z,t.sound=e.sound,t.event=e.event,t.solid=e.solid,t.number=r,t.bits=n,n&_t&&(t.modelindex=this.stream.readByte()),n&St&&(t.modelindex2=this.stream.readByte()),n&At&&(t.modelindex3=this.stream.readByte()),n&Et&&(t.modelindex4=this.stream.readByte()),n&gt&&(t.frame=this.stream.readByte()),n&wt&&(t.frame=this.stream.readShort()),n&Te&&n&Me?t.skinnum=this.stream.readLong():n&Te?t.skinnum=this.stream.readByte():n&Me&&(t.skinnum=this.stream.readShort()),n&be&&n&Re?t.effects=this.stream.readLong():n&be?t.effects=this.stream.readByte():n&Re&&(t.effects=this.stream.readShort()),n&ze&&n&Le?t.renderfx=this.stream.readLong():n&ze?t.renderfx=this.stream.readByte():n&Le&&(t.renderfx=this.stream.readShort()),n&ht&&(t.origin.x=this.stream.readCoord()),n&ft&&(t.origin.y=this.stream.readCoord()),n&yt&&(t.origin.z=this.stream.readCoord()),n&xt&&(t.angles.x=this.stream.readAngle()),n&mt&&(t.angles.y=this.stream.readAngle()),n&pt&&(t.angles.z=this.stream.readAngle()),n&zt&&this.stream.readPos(t.old_origin),n&bt&&(t.sound=this.stream.readByte()),n&vt?t.event=this.stream.readByte():t.event=0,n&Tt&&(t.solid=this.stream.readShort())}},Lt=(e=>(e[e.Stopped=0]="Stopped",e[e.Playing=1]="Playing",e[e.Paused=2]="Paused",e[e.Finished=3]="Finished",e))(Lt||{}),Rr=class{constructor(){this.reader=null,this.state=0,this.playbackSpeed=1,this.accumulatedTime=0,this.frameDuration=100}setHandler(e){this.handler=e}loadDemo(e){this.reader=new Us(e),this.state=0,this.accumulatedTime=0}play(){this.reader&&(this.state=1)}pause(){this.state===1&&(this.state=2)}stop(){this.state=0,this.reader&&this.reader.reset(),this.accumulatedTime=0}update(e){if(!(this.state!==1||!this.reader))for(this.accumulatedTime+=e*1e3*this.playbackSpeed;this.accumulatedTime>=this.frameDuration;){if(!this.reader.hasMore()){this.state=3;return}let t=this.reader.readNextBlock();if(!t){this.state=3;return}new Ks(t.data,this.handler).parseMessage(),this.accumulatedTime-=this.frameDuration}}getState(){return this.state}};var Xs=Object.defineProperty,Ys=(e,t)=>{for(var r in t)Xs(e,r,{get:t[r],enumerable:!0})},Mr={x:0,y:0,z:0};var ul=Math.PI/180;function ge(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function ae(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function $(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function $s(e){return $(e,e)}function Oe(e){return Math.sqrt($s(e))}function Nr(e){let t=Oe(e);return t===0?e:ae(e,1/t)}var Pr=0,kr=1,Or=2,js=Math.PI/180,dl=180/Math.PI;function Rt(e,t){switch(t){case Pr:return e.x;case kr:return e.y;case Or:default:return e.z}}function Mt(e){return e*js}function se(e){let t=e%360;return t<0?360+t:t}function ve(e){let t=Mt(Rt(e,kr)),r=Mt(Rt(e,Pr)),n=Mt(Rt(e,Or)),i=Math.sin(t),s=Math.cos(t),a=Math.sin(r),o=Math.cos(r),c=Math.sin(n),l=Math.cos(n),u={x:o*s,y:o*i,z:-a},d={x:-c*a*s-l*-i,y:-c*a*i-l*s,z:-c*o},h={x:l*a*s-c*-i,y:l*a*i-c*s,z:l*o};return{forward:u,right:d,up:h}}var H=1,Q=2;var Pt=8,kt=16,qs=32;var Zs=16384;var Ie=65536,Ir=1<<17,Js=1<<18,Qs=1<<19,ea=1<<20,ta=1<<21,ra=1<<22,na=1<<23,hl=1<<24,Ce=1<<25,ia=1<<26,fl=1<<27,ml=1<<28,pl=1<<29,De=1<<30,gl=1<<31;var vl=1<<25,yl=1<<28,xl=1<<29,_l=1<<30,wl=1<<31;var Sl=H|Q,Al=H|Ie|Q|Ce|De,El=H|Ie|Q,zl=H|Ir|Q|Ce|De,bl=qs|Pt|kt,Tl=H|kt|Pt,sa=H|Ce|De|Q|ia,Ll=Js|Qs|ea|ta|ra|na,Rl=H|Pt|kt|Ce|De,Ml=H|Ie|Q,Nl=H|Q,Pl=H|Ie|Q|Ir,kl=sa|Zs;var Ol=Number.MAX_SAFE_INTEGER-1;var Cr=256;var aa=256,oa=8192,ca=2048,la=512,ua=256,da=Cr*2,ha=256,Nt=32;var Dr=(e=>(e[e.Name=0]="Name",e[e.CdTrack=1]="CdTrack",e[e.Sky=2]="Sky",e[e.SkyAxis=3]="SkyAxis",e[e.SkyRotate=4]="SkyRotate",e[e.StatusBar=5]="StatusBar",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+oa]="Sounds",e[e.Images=e.Sounds+ca]="Images",e[e.Lights=e.Images+la]="Lights",e[e.ShadowLights=e.Lights+aa]="ShadowLights",e[e.Items=e.ShadowLights+ha]="Items",e[e.PlayerSkins=e.Items+ua]="PlayerSkins",e[e.General=e.PlayerSkins+Cr]="General",e[e.WheelWeapons=e.General+da]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Nt]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Nt]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Nt]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(Dr||{}),Il=Dr.MaxConfigStrings;var fa={};Ys(fa,{addReplayFrame:()=>va,createReplaySession:()=>ga,deserializeReplay:()=>pa,serializeReplay:()=>ma});function ma(e){return JSON.stringify(e,null,2)}function pa(e){let t=JSON.parse(e);if(!t.metadata||!Array.isArray(t.frames))throw new Error("Invalid replay format: missing metadata or frames");return t}function ga(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function va(e,t,r,n){e.frames.push({serverFrame:r,cmd:t,timestamp:Date.now()-n})}var te=(e=>(e[e.None=0]="None",e[e.Feet=1]="Feet",e[e.Waist=2]="Waist",e[e.Under=3]="Under",e))(te||{});var F=(e=>(e[e.Ducked=1]="Ducked",e[e.JumpHeld=2]="JumpHeld",e[e.OnGround=4]="OnGround",e[e.TimeWaterJump=8]="TimeWaterJump",e[e.TimeLand=16]="TimeLand",e[e.TimeTeleport=32]="TimeTeleport",e[e.NoPositionalPrediction=64]="NoPositionalPrediction",e[e.OnLadder=128]="OnLadder",e[e.NoAngularPrediction=256]="NoAngularPrediction",e[e.IgnorePlayerCollision=512]="IgnorePlayerCollision",e[e.TimeTrick=1024]="TimeTrick",e))(F||{});function W(e,t){return(e&t)!==0}var Ot=(e=>(e[e.Normal=0]="Normal",e[e.Grapple=1]="Grapple",e[e.NoClip=2]="NoClip",e[e.Spectator=3]="Spectator",e[e.Dead=4]="Dead",e[e.Gib=5]="Gib",e[e.Freeze=6]="Freeze",e))(Ot||{}),K=(e=>(e[e.None=0]="None",e[e.Attack=1]="Attack",e[e.Use=2]="Use",e[e.Holster=4]="Holster",e[e.Jump=8]="Jump",e[e.Crouch=16]="Crouch",e[e.Any=128]="Any",e))(K||{});function Fr(e){let{velocity:t,frametime:r,onGround:n,groundIsSlick:i,onLadder:s,waterlevel:a,pmFriction:o,pmStopSpeed:c,pmWaterFriction:l}=e,u=Oe(t);if(u<1)return{x:0,y:0,z:t.z};let d=0;if(n&&!i||s){let p=u<c?c:u;d+=p*o*r}a>0&&!s&&(d+=u*l*a*r);let h=u-d;if(h<0&&(h=0),h===u)return t;let m=h/u;return ae(t,m)}function It(e){let{velocity:t,wishdir:r,wishspeed:n,accel:i,frametime:s}=e,a=$(t,r),o=n-a;if(o<=0)return t;let c=i*s*n;return c>o&&(c=o),{x:t.x+r.x*c,y:t.y+r.y*c,z:t.z+r.z*c}}function Br(e){let{velocity:t,wishdir:r,wishspeed:n,accel:i,frametime:s}=e,a=Math.min(n,30),o=$(t,r),c=a-o;if(c<=0)return t;let l=i*n*s;return l>c&&(l=c),{x:t.x+r.x*l,y:t.y+r.y*l,z:t.z+r.z*l}}function Ur(e){let{forward:t,right:r,cmd:n,maxSpeed:i}=e,s={x:t.x*n.forwardmove+r.x*n.sidemove,y:t.y*n.forwardmove+r.y*n.sidemove,z:0},a=Oe(s);if(a>i){let o=i/a;s=ae(s,o),a=i}return{wishdir:a===0?s:Nr(s),wishspeed:a}}function Gr(e){let{forward:t,right:r,cmd:n,maxSpeed:i}=e,s={x:t.x*n.forwardmove+r.x*n.sidemove,y:t.y*n.forwardmove+r.y*n.sidemove,z:0};n.upmove>10?s=ge(s,{x:0,y:0,z:n.upmove}):n.upmove<-10?s=ge(s,{x:0,y:0,z:n.upmove}):s=ge(s,{x:0,y:0,z:10});let a=Oe(s);if(a>i){let o=i/a;s=ae(s,o),a=i}return a*=.5,{wishdir:a===0?s:Nr(s),wishspeed:a}}function ya(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function xa(e){return e>89&&e<180?89:e<271&&e>=180?271:e}function Fe(e){let{pmFlags:t,cmdAngles:r,deltaAngles:n}=e,i;(t&32)!==0?i={x:0,y:r.y+n.y,z:0}:(i=ya(r,n),i={...i,x:xa(i.x)});let s=ve(i);return{viewangles:i,...s}}var Vr=200,Hr=200,Wr=200,Kr=140,Xr=150,Yr=3;function _a(e){let t=se(e);return t>89&&t<180?89:t<271&&t>=180?271:t}function $r(e,t){return{x:_a(e.x+t.x),y:se(e.y+t.y),z:se(e.z+t.z)}}function jr(e,t){let r=t.sensitivityX??t.sensitivity,n=(t.sensitivityY??t.sensitivity)*(t.invertY?-1:1);return{x:e.deltaY*n,y:e.deltaX*r,z:0}}var wa={pmFriction:6,pmStopSpeed:100,pmAccelerate:10,pmAirAccelerate:1,pmWaterAccelerate:4,pmWaterFriction:1,pmMaxSpeed:300,pmDuckSpeed:100,pmWaterSpeed:400,groundIsSlick:!1},Sa=800,oe={x:0,y:0,z:0},Aa=250;function q(){return{origin:oe,velocity:oe,viewangles:oe,pmFlags:F.OnGround,pmType:Ot.Normal,waterlevel:te.None,gravity:Sa,deltaAngles:oe,health:0,armor:0,ammo:0}}function qr(e){return e?{...q(),...e,origin:{...e.origin},velocity:{...e.velocity},viewangles:{...e.viewangles},deltaAngles:e.deltaAngles?{...e.deltaAngles}:oe}:q()}function j(e,t,r){return e+(t-e)*r}function Ct(e,t,r){let n=se(t-e);return n>180&&(n-=360),se(e+n*r)}function Be(e,t,r){let n=Math.max(0,Math.min(r,1));return{origin:{x:j(e.origin.x,t.origin.x,n),y:j(e.origin.y,t.origin.y,n),z:j(e.origin.z,t.origin.z,n)},velocity:{x:j(e.velocity.x,t.velocity.x,n),y:j(e.velocity.y,t.velocity.y,n),z:j(e.velocity.z,t.velocity.z,n)},viewangles:{x:Ct(e.viewangles.x,t.viewangles.x,n),y:Ct(e.viewangles.y,t.viewangles.y,n),z:Ct(e.viewangles.z,t.viewangles.z,n)},pmFlags:t.pmFlags,pmType:t.pmType,waterlevel:t.waterlevel,gravity:t.gravity,deltaAngles:t.deltaAngles,client:t.client,health:j(e.health,t.health,n),armor:j(e.armor,t.armor,n),ammo:j(e.ammo,t.ammo,n),centerPrint:t.centerPrint,notify:t.notify}}function Ea(e,t,r,n){let i=Math.min(Math.max(t.msec,0),Aa)/1e3,s=W(e.pmFlags,F.OnGround),a=W(e.pmFlags,F.OnLadder),o=Fr({velocity:e.velocity,frametime:i,onGround:s,groundIsSlick:r.groundIsSlick,onLadder:a,waterlevel:e.waterlevel,pmFriction:r.pmFriction,pmStopSpeed:r.pmStopSpeed,pmWaterFriction:r.pmWaterFriction}),{viewangles:c,forward:l,right:u}=Fe({pmFlags:e.pmFlags,cmdAngles:t.angles,deltaAngles:e.deltaAngles??oe}),d=e.waterlevel>te.None?Gr({forward:l,right:u,cmd:t,maxSpeed:r.pmWaterSpeed}):Ur({forward:l,right:u,cmd:t,maxSpeed:r.pmMaxSpeed});if(e.waterlevel>te.None)o=It({velocity:o,wishdir:d.wishdir,wishspeed:d.wishspeed,accel:r.pmWaterAccelerate,frametime:i});else if(s||a){let p=W(e.pmFlags,F.Ducked)?r.pmDuckSpeed:r.pmMaxSpeed,g=d.wishspeed>p?{wishdir:d.wishdir,wishspeed:p}:d;o=It({velocity:o,wishdir:g.wishdir,wishspeed:g.wishspeed,accel:r.pmAccelerate,frametime:i})}else o=Br({velocity:o,wishdir:d.wishdir,wishspeed:d.wishspeed,accel:r.pmAirAccelerate,frametime:i}),o={...o,z:o.z-e.gravity*i};let m=n(e.origin,ge(e.origin,ae(o,i))).endpos;return{...e,origin:m,velocity:o,viewangles:c}}var ce=class{constructor(t,r={}){this.baseFrame={frame:0,timeMs:0,state:q()};this.commands=[];this.predicted=q();this.settings={...wa,...r},this.trace=t,this.predicted=this.baseFrame.state??q()}setAuthoritative(t){let r=qr(t.state);return this.baseFrame={...t,state:r},this.commands=this.commands.filter(n=>(n.serverFrame??Number.MAX_SAFE_INTEGER)>t.frame),this.recompute()}enqueueCommand(t){return this.commands.push(t),this.recompute()}getPredictedState(){return this.predicted}recompute(){let t=qr(this.baseFrame.state);for(let r of this.commands)t=Ea(t,r,this.settings,this.trace);return this.predicted=t,t}};var za={runPitch:.002,runRoll:.005,bobUp:.005,bobPitch:.002,bobRoll:.002,maxBobHeight:6,maxBobAngle:1.2};function ba(e){return{x:Math.max(-14,Math.min(14,e.x)),y:Math.max(-14,Math.min(14,e.y)),z:Math.max(-22,Math.min(30,e.z))}}function Ta(e,t,r){return t?e>210?r/400:e>100?r/800:r/1600:0}function La(e,t,r,n,i){if(t<5)return{bobTime:0,bobCycle:0,bobCycleRun:0,bobFracSin:0};let s=Ta(t,n,i),a=e+s,c=W(r,F.Ducked)&&n?a*4:a;return{bobTime:a,bobCycle:Math.floor(c),bobCycleRun:Math.floor(a),bobFracSin:Math.abs(Math.sin(c*Math.PI))}}var le=class{constructor(t={}){this.bobTime=0;this.bobCycle=0;this.bobCycleRun=0;this.bobFracSin=0;this.settings={...za,...t}}addKick(t){t.durationMs<=0||(this.kick={...t,remainingMs:t.durationMs})}get last(){return this.lastSample}sample(t,r){let{forward:n,right:i}=ve(Fe({pmFlags:t.pmFlags,cmdAngles:t.viewangles,deltaAngles:t.deltaAngles??Mr}).viewangles),s=Math.sqrt(t.velocity.x*t.velocity.x+t.velocity.y*t.velocity.y),a=W(t.pmFlags,F.OnGround),o=La(this.bobTime,s,t.pmFlags,a,r);this.bobTime=o.bobTime,this.bobCycle=o.bobCycle,this.bobCycleRun=o.bobCycleRun,this.bobFracSin=o.bobFracSin;let c=$(t.velocity,n)*this.settings.runPitch,l=$(t.velocity,i)*this.settings.runRoll,u=this.bobFracSin*this.settings.bobPitch*s,d=this.bobFracSin*this.settings.bobRoll*s;W(t.pmFlags,F.Ducked)&&a&&(u*=6,d*=6),c+=Math.min(u,this.settings.maxBobAngle),d=Math.min(d,this.settings.maxBobAngle),this.bobCycle&1&&(d=-d),l+=d;let h=Math.min(this.bobFracSin*s*this.settings.bobUp,this.settings.maxBobHeight),m=0,p=0;if(this.kick&&this.kick.remainingMs>0){let S=Math.max(0,Math.min(1,this.kick.remainingMs/this.kick.durationMs));m+=S*this.kick.pitch,p+=S*this.kick.roll,this.kick.remainingMs=Math.max(0,this.kick.remainingMs-r),this.kick.remainingMs===0&&(this.kick=void 0)}let v={angles:{x:c+m,y:0,z:l+p},offset:ba({x:0,y:0,z:h}),bobCycle:this.bobCycle,bobCycleRun:this.bobCycleRun,bobFracSin:this.bobFracSin,xyspeed:s};return this.lastSample=v,v}};var Ue=(e,t,r,n,i,s)=>{let a=Math.abs(n).toString();for(let o=0;o<a.length;o++){let c=parseInt(a[o]),l=i[c];l&&e.drawPic(t+o*s,r,l)}};var B={HEALTH_X:100,HEALTH_Y:450,ARMOR_X:200,ARMOR_Y:450,AMMO_X:540,AMMO_Y:450,CENTER_PRINT_X:320,CENTER_PRINT_Y:100,WEAPON_ICON_X:10,WEAPON_ICON_Y:450,POWERUP_X:610,POWERUP_Y:450};var Ge=null;var Zr=(e,t,r)=>{if(Ge){let n=(t-Ge.width)/2,i=(r-Ge.height)/2;e.drawPic(n,i,Ge)}};var Ra=Object.defineProperty,Ma=(e,t)=>{for(var r in t)Ra(e,r,{get:t[r],enumerable:!0})},Gt={x:0,y:0,z:0};var Kl=Math.PI/180;function Ke(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function _e(e,t){return{x:e.x-t.x,y:e.y-t.y,z:e.z-t.z}}function Vt(e,t){return{x:e.x*t,y:e.y*t,z:e.z*t}}function Na(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function Pa(e){return Na(e,e)}function nn(e){return Math.sqrt(Pa(e))}function we(e){let t=nn(e);return t===0?e:Vt(e,1/t)}function ka(e,t,r){return{x:e.x<t.x?t.x:e.x>r.x?r.x:e.x,y:e.y<t.y?t.y:e.y>r.y?r.y:e.y,z:e.z<t.z?t.z:e.z>r.z?r.z:e.z}}function Oa(e,t,r,n){let i=0;if(t.x<r.x){let s=t.x-r.x;i+=s*s}else if(e.x>n.x){let s=e.x-n.x;i+=s*s}if(t.y<r.y){let s=t.y-r.y;i+=s*s}else if(e.y>n.y){let s=e.y-n.y;i+=s*s}if(t.z<r.z){let s=t.z-r.z;i+=s*s}else if(e.z>n.z){let s=e.z-n.z;i+=s*s}return i}var Ht=0,Wt=1,sn=2,Ia=Math.PI/180,Ca=180/Math.PI;function xe(e,t){switch(t){case Ht:return e.x;case Wt:return e.y;case sn:default:return e.z}}function He(e){return e*Ia}function Da(e){return e*Ca}function Jr(e){let t=e%360;return t<0?360+t:t}function Fa(e){let t=He(xe(e,Wt)),r=He(xe(e,Ht)),n=He(xe(e,sn)),i=Math.sin(t),s=Math.cos(t),a=Math.sin(r),o=Math.cos(r),c=Math.sin(n),l=Math.cos(n),u={x:o*s,y:o*i,z:-a},d={x:-c*a*s-l*-i,y:-c*a*i-l*s,z:-c*o},h={x:l*a*s-c*-i,y:l*a*i-c*s,z:l*o};return{forward:u,right:d,up:h}}function Ba(e){let t=xe(e,Ht),r=xe(e,Wt);if(t===0)return r===0?0:r>0?90:270;let n=Da(Math.atan2(r,t));return n<0?n+360:n}var X=624,Ua=397,Ga=2567483615,Va=2147483648,Ha=2147483647,Dt=4294967296,Wa=class{constructor(e=5489){this.state=new Uint32Array(X),this.index=X,this.seed(e)}seed(e){this.state[0]=e>>>0;for(let t=1;t<X;t++){let r=this.state[t-1]^this.state[t-1]>>>30,n=Math.imul(r>>>0,1812433253)+t;this.state[t]=n>>>0}this.index=X}nextUint32(){this.index>=X&&this.twist();let e=this.state[this.index++];return e^=e>>>11,e^=e<<7&2636928640,e^=e<<15&4022730752,e^=e>>>18,e>>>0}twist(){for(let e=0;e<X;e++){let t=this.state[e]&Va|this.state[(e+1)%X]&Ha,r=this.state[(e+Ua)%X]^t>>>1;(t&1)!==0&&(r^=Ga),this.state[e]=r>>>0}this.index=0}getState(){return{index:this.index,state:Array.from(this.state)}}setState(e){if(e.state.length!==X)throw new Error(`Expected ${X} MT state values, received ${e.state.length}`);this.index=e.index,this.state=Uint32Array.from(e.state,t=>t>>>0)}},Ka=class{constructor(e={}){this.mt=new Wa(e.seed)}frandom(){return this.mt.nextUint32()/Dt}frandomRange(e,t){return e+(t-e)*this.frandom()}frandomMax(e){return this.frandomRange(0,e)}crandom(){return this.frandomRange(-1,1)}crandomOpen(){let e=Number.EPSILON;return this.frandomRange(-1+e,1)}irandomUint32(){return this.mt.nextUint32()}irandomRange(e,t){if(t-e<=1)return e;let r=t-e,n=Dt-Dt%r,i;do i=this.mt.nextUint32();while(i>=n);return e+i%r}irandom(e){return e<=0?0:this.irandomRange(0,e)}randomTimeRange(e,t){return t<=e?e:this.irandomRange(e,t)}randomTime(e){return this.irandom(e)}randomIndex(e){return this.irandom(e.length)}getState(){return{mt:this.mt.getState()}}setState(e){this.mt.setState(e.mt)}};var Y=1,ee=2;var Kt=8,Xt=16,Xa=32;var Ya=16384;var Ye=65536,an=1<<17,$a=1<<18,ja=1<<19,qa=1<<20,Za=1<<21,Ja=1<<22,Qa=1<<23,Xl=1<<24,$e=1<<25,eo=1<<26,Yl=1<<27,$l=1<<28,jl=1<<29,je=1<<30,ql=1<<31;var Zl=1<<25,Jl=1<<28,Ql=1<<29,eu=1<<30,tu=1<<31,ru=Y|ee,nu=Y|Ye|ee|$e|je,iu=Y|Ye|ee,su=Y|an|ee|$e|je,au=Xa|Kt|Xt,ou=Y|Xt|Kt,to=Y|$e|je|ee|eo,cu=$a|ja|qa|Za|Ja|Qa,lu=Y|Kt|Xt|$e|je,uu=Y|Ye|ee,du=Y|ee,hu=Y|Ye|ee|an,fu=to|Ya,mu=Number.MAX_SAFE_INTEGER-1;var on=256,ro=256,no=8192,io=2048,so=512,ao=256,oo=on*2,co=256,Ft=32,cn=(e=>(e[e.Name=0]="Name",e[e.CdTrack=1]="CdTrack",e[e.Sky=2]="Sky",e[e.SkyAxis=3]="SkyAxis",e[e.SkyRotate=4]="SkyRotate",e[e.StatusBar=5]="StatusBar",e[e.AirAccel=59]="AirAccel",e[e.MaxClients=60]="MaxClients",e[e.MapChecksum=61]="MapChecksum",e[e.Models=62]="Models",e[e.Sounds=62+no]="Sounds",e[e.Images=e.Sounds+io]="Images",e[e.Lights=e.Images+so]="Lights",e[e.ShadowLights=e.Lights+ro]="ShadowLights",e[e.Items=e.ShadowLights+co]="Items",e[e.PlayerSkins=e.Items+ao]="PlayerSkins",e[e.General=e.PlayerSkins+on]="General",e[e.WheelWeapons=e.General+oo]="WheelWeapons",e[e.WheelAmmo=e.WheelWeapons+Ft]="WheelAmmo",e[e.WheelPowerups=e.WheelAmmo+Ft]="WheelPowerups",e[e.CdLoopCount=e.WheelPowerups+Ft]="CdLoopCount",e[e.GameStyle=e.CdLoopCount+1]="GameStyle",e[e.MaxConfigStrings=e.GameStyle+1]="MaxConfigStrings",e))(cn||{}),pu=cn.MaxConfigStrings,lo={};Ma(lo,{addReplayFrame:()=>mo,createReplaySession:()=>fo,deserializeReplay:()=>ho,serializeReplay:()=>uo});function uo(e){return JSON.stringify(e,null,2)}function ho(e){let t=JSON.parse(e);if(!t.metadata||!Array.isArray(t.frames))throw new Error("Invalid replay format: missing metadata or frames");return t}function fo(e,t){return{metadata:{map:e,date:new Date().toISOString(),version:"1.0",seed:t},frames:[]}}function mo(e,t,r,n){e.frames.push({serverFrame:r,cmd:t,timestamp:Date.now()-n})}var po={...Gt};var gu=Object.freeze({aiflags:0,last_sighting:po,trail_time:0,pausetime:0});var Yt=[{name:"classname",type:"string",save:!0},{name:"spawnflags",type:"int",save:!0},{name:"target",type:"string",save:!0},{name:"targetname",type:"string",save:!0},{name:"killtarget",type:"string",save:!0},{name:"team",type:"string",save:!0},{name:"message",type:"string",save:!0},{name:"pathtarget",type:"string",save:!0},{name:"model",type:"string",save:!0},{name:"item",type:"string",save:!0},{name:"map",type:"string",save:!0},{name:"inventory",type:"inventory",save:!0},{name:"origin",type:"vec3",save:!0},{name:"old_origin",type:"vec3",save:!0},{name:"velocity",type:"vec3",save:!0},{name:"avelocity",type:"vec3",save:!0},{name:"angles",type:"vec3",save:!0},{name:"pos1",type:"vec3",save:!0},{name:"pos2",type:"vec3",save:!0},{name:"viewheight",type:"int",save:!0},{name:"mins",type:"vec3",save:!0},{name:"maxs",type:"vec3",save:!0},{name:"absmin",type:"vec3",save:!0},{name:"absmax",type:"vec3",save:!0},{name:"size",type:"vec3",save:!0},{name:"mass",type:"int",save:!0},{name:"gravity",type:"float",save:!0},{name:"movetype",type:"int",save:!0},{name:"movedir",type:"vec3",save:!0},{name:"modelindex",type:"int",save:!0},{name:"frame",type:"int",save:!0},{name:"skin",type:"int",save:!0},{name:"effects",type:"int",save:!0},{name:"renderfx",type:"int",save:!0},{name:"health",type:"int",save:!0},{name:"max_health",type:"int",save:!0},{name:"takedamage",type:"boolean",save:!0},{name:"dmg",type:"int",save:!0},{name:"speed",type:"float",save:!0},{name:"accel",type:"float",save:!0},{name:"decel",type:"float",save:!0},{name:"height",type:"float",save:!0},{name:"deadflag",type:"int",save:!0},{name:"count",type:"int",save:!0},{name:"wait",type:"float",save:!0},{name:"delay",type:"float",save:!0},{name:"timestamp",type:"float",save:!0},{name:"lip",type:"int",save:!0},{name:"state",type:"int",save:!0},{name:"sounds",type:"int",save:!0},{name:"noise_index",type:"int",save:!0},{name:"fly_sound_debounce_time",type:"float",save:!0},{name:"enemy",type:"entity",save:!0},{name:"movetarget",type:"entity",save:!0},{name:"target_ent",type:"entity",save:!0},{name:"goalentity",type:"entity",save:!0},{name:"ideal_yaw",type:"float",save:!0},{name:"yaw_speed",type:"float",save:!0},{name:"search_time",type:"float",save:!0},{name:"attack_finished_time",type:"float",save:!0},{name:"pain_finished_time",type:"float",save:!0},{name:"trail_time",type:"float",save:!0},{name:"groundentity",type:"entity",save:!0},{name:"groundentity_linkcount",type:"int",save:!0},{name:"waterlevel",type:"int",save:!0},{name:"watertype",type:"int",save:!0},{name:"nextthink",type:"float",save:!0},{name:"solid",type:"int",save:!0},{name:"flags",type:"int",save:!0},{name:"svflags",type:"int",save:!0},{name:"think",type:"callback",save:!1},{name:"touch",type:"callback",save:!1},{name:"use",type:"callback",save:!1},{name:"blocked",type:"callback",save:!1},{name:"pain",type:"callback",save:!1},{name:"die",type:"callback",save:!1}];var go=Yt.filter(e=>e.save||e.type==="callback"),vu=new Map(go.map(e=>[e.name,e]));var yu=1/40;var ln=(e=>(e[e.Bullets=0]="Bullets",e[e.Shells=1]="Shells",e[e.Rockets=2]="Rockets",e[e.Grenades=3]="Grenades",e[e.Cells=4]="Cells",e[e.Slugs=5]="Slugs",e))(ln||{}),xu=Object.keys(ln).length/2;function re(e,t){return(e&t)!==0}var vo={jacket:{baseCount:25,maxCount:50,normalProtection:.3,energyProtection:0},combat:{baseCount:50,maxCount:100,normalProtection:.6,energyProtection:.3},body:{baseCount:100,maxCount:200,normalProtection:.8,energyProtection:.6}};function yo(e,t,r){if(e<=0||re(t,130)||!r.armorType||r.armorCount<=0)return{saved:0,remainingArmor:r.armorCount};let n=vo[r.armorType],i=re(t,4)?n.energyProtection:n.normalProtection,s=Math.ceil(i*e);return s>=r.armorCount&&(s=r.armorCount),s<=0?{saved:0,remainingArmor:r.armorCount}:{saved:s,remainingArmor:r.armorCount-s}}function xo(e,t,r,n,i,s={}){if(i.health<=0||e<=0)return{saved:0,remainingCells:i.cellCount};if(re(t,258))return{saved:0,remainingCells:i.cellCount};if(!i.type||i.cellCount<=0)return{saved:0,remainingCells:i.cellCount};let{forward:a}=Fa(i.angles),o={x:r.x-i.origin.x,y:r.y-i.origin.y,z:r.z-i.origin.z},c=Math.hypot(o.x,o.y,o.z);if(i.type==="screen"&&c>0){let f={x:o.x/c,y:o.y/c,z:o.z/c};if(f.x*a.x+f.y*a.y+f.z*a.z<=.3)return{saved:0,remainingCells:i.cellCount}}let l=s.ctfMode??!1,u=i.type==="screen"||l?1:2,d=i.type==="screen"?e/3:2*e/3;d=Math.max(1,d);let h=i.cellCount*u;re(t,4)&&(h=Math.max(1,Math.floor(h/2))),h>d&&(h=Math.floor(d));let m=h/u;re(t,4)&&(m*=2),m=Math.max(1,Math.floor(m));let p=Math.max(u,m),g=Math.max(0,i.cellCount-p);return{saved:h,remainingCells:g}}var un={weapon_blaster:{type:"weapon",id:"weapon_blaster",name:"Blaster",weaponId:"blaster",ammoType:null,initialAmmo:0,pickupAmmo:0,fireRate:.5},weapon_shotgun:{type:"weapon",id:"weapon_shotgun",name:"Shotgun",weaponId:"shotgun",ammoType:1,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_supershotgun:{type:"weapon",id:"weapon_supershotgun",name:"Super Shotgun",weaponId:"super_shotgun",ammoType:1,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_machinegun:{type:"weapon",id:"weapon_machinegun",name:"Machinegun",weaponId:"machinegun",ammoType:0,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_chaingun:{type:"weapon",id:"weapon_chaingun",name:"Chaingun",weaponId:"chaingun",ammoType:0,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_grenadelauncher:{type:"weapon",id:"weapon_grenadelauncher",name:"Grenade Launcher",weaponId:"grenade_launcher",ammoType:3,initialAmmo:10,pickupAmmo:10,fireRate:1},weapon_rocketlauncher:{type:"weapon",id:"weapon_rocketlauncher",name:"Rocket Launcher",weaponId:"rocket_launcher",ammoType:2,initialAmmo:5,pickupAmmo:5,fireRate:1},weapon_hyperblaster:{type:"weapon",id:"weapon_hyperblaster",name:"HyperBlaster",weaponId:"hyperblaster",ammoType:4,initialAmmo:50,pickupAmmo:50,fireRate:.1},weapon_railgun:{type:"weapon",id:"weapon_railgun",name:"Railgun",weaponId:"railgun",ammoType:5,initialAmmo:10,pickupAmmo:10,fireRate:1.5},weapon_bfg:{type:"weapon",id:"weapon_bfg",name:"BFG10K",weaponId:"bfg10k",ammoType:4,initialAmmo:50,pickupAmmo:50,fireRate:1}};var _u=1<<24;function Qr(e){return{mins:{x:e.origin.x+e.mins.x,y:e.origin.y+e.mins.y,z:e.origin.z+e.mins.z},maxs:{x:e.origin.x+e.maxs.x,y:e.origin.y+e.maxs.y,z:e.origin.z+e.maxs.z}}}function _o(e,t){let r=Qr(e),n=Qr(t),i=Oa(r.mins,r.maxs,n.mins,n.maxs);return Math.sqrt(i)}function wo(e,t){if(t===0)return{x:0,y:0,z:0};let r=He(e);return{x:Math.cos(r)*t,y:Math.sin(r)*t,z:0}}function $t(e,t,r){let n=wo(t,r),i=e.origin;return i.x+=n.x,i.y+=n.y,i.z+=n.z,!0}function qe(e,t){let r=Jr(e.angles.y),n=e.ideal_yaw;if(r===n){e.angles.y=r;return}let i=e.yaw_speed*t*10,s=n-r;n>r?s>=180&&(s-=360):s<=-180&&(s+=360),s>i?s=i:s<-i&&(s=-i),e.angles.y=Jr(r+s)}function jt(e,t){if(!t)return;let r={x:t.origin.x-e.origin.x,y:t.origin.y-e.origin.y,z:t.origin.z-e.origin.z};e.ideal_yaw=Ba(r)}function dn(e,t){qe(e,t)}function hn(e,t,r,n){if(jt(e,e.goalentity),qe(e,r),t!==0&&$t(e,e.angles.y,t),e.goalentity&&e.goalentity.classname==="path_corner"&&_o(e,e.goalentity)<64&&e.goalentity.target){let s=n.pickTarget(e.goalentity.target);s&&(e.goalentity=s,e.ideal_yaw=e.angles.y)}}function fn(e,t,r){jt(e,e.enemy??e.goalentity),qe(e,r),t!==0&&$t(e,e.angles.y,t)}function mn(e,t,r){jt(e,e.enemy),qe(e,r),t!==0&&$t(e,e.angles.y,t)}function So(e,t,r,n,i){if(re(i,8)||((e.flags??0)&4)!==0||n===0)return{x:0,y:0,z:0};let a=Math.max(50,e.mass??200),o=we(r),l=Vt(o,(t===e?1600:500)*n/a);return e.velocity=Ke(e.velocity,l),l}function Ao(e,t,r,n,i){let s=n,a=0,o=0,c,l;if(e.powerArmor){let u=xo(n,i,t,r,e.powerArmor);a=u.saved,c=u.remainingCells,s-=a}if(e.regularArmor){let u=yo(s,i,e.regularArmor);o=u.saved,l=u.remainingArmor,s-=o}return[Math.max(0,s),a,o,c,l]}function en(e){return e.mins&&e.maxs?{x:e.origin.x+(e.mins.x+e.maxs.x)*.5,y:e.origin.y+(e.mins.y+e.maxs.y)*.5,z:e.origin.z+(e.mins.z+e.maxs.z)*.5}:e.origin}function qt(e,t,r,n,i,s,a,o,c,l){if(!e.takedamage||a<=0)return null;if(!re(c,32)&&((e.flags??0)&1)!==0)return{take:0,psave:0,asave:a,knocked:{x:0,y:0,z:0},killed:!1};let d=So(e,r,n,o,c),[h,m,p,g,f]=Ao(e,i,s,a,c);e.powerArmor&&g!==void 0&&(e.powerArmor.cellCount=g),e.regularArmor&&(e.regularArmor.armorCount=f??e.regularArmor.armorCount);let v=h;v>0&&(e.health-=v);let S=e.health<=0;return S?e.flags&&e.flags&2?e.health=Math.max(1,e.health):e.die&&e.die(e,t,r,v,i,l):v>0&&e.pain&&e.pain(e,r,o,v,l),{take:v,psave:m,asave:p,knocked:d,killed:S,remainingCells:g,remainingArmor:f}}function tn(e,t,r,n,i,s,a,o,c={}){let l=[],u=en(t),d=c.canDamage??(()=>!0);for(let h of e){if(h===i||!h.takedamage||!d(h,t))continue;let m=h.mins&&h.maxs?ka(u,Ke(h.origin,h.mins),Ke(h.origin,h.maxs)):en(h),p=_e(u,m),g=nn(p);if(s>0&&g>s)continue;let f=n-.5*g;if(f<=0)continue;let v=h===r?f*.5:f,S=we(_e(h.origin,u)),w=qt(h,t,r,S,m,S,v,v,a|1,o);l.push({target:h,result:w,appliedDamage:v})}return l}function pn(e,t,r,n,i,s,a,o,c,l=0){let u=Ke(t,Vt(r,8192)),d=c.trace(t,null,null,u,e,536870913);!d.ent||d.fraction===1||qt(d.ent,e,e,r,d.endpos,d.plane?.normal||Gt,n,i,18,l)}function Eo(e,t,r,n,i,s){let a=e.spawn();a.classname="grenade",a.owner=t,a.origin={...r},a.velocity={x:n.x*s,y:n.y*s,z:n.z*s},a.movetype=9,a.clipmask=268566530,a.solid=2,a.modelindex=e.modelIndex("models/objects/grenade/tris.md2"),a.mins={x:-4,y:-4,z:-4},a.maxs={x:4,y:4,z:4},a.touch=(o,c,l,u)=>{if(c!==o.owner&&c&&c.takedamage){qt(c,o,o.owner,o.velocity,o.origin,l?l.normal:Gt,i,0,0,6);let d=e.findByRadius(o.origin,120);tn(d,o,o.owner,i,o.owner,120,0,6),e.free(o);return}},a.think=o=>{let c=e.findByRadius(o.origin,120);tn(c,o,o.owner,i,o.owner,120,0,6),e.free(o)},e.scheduleThink(a,e.timeSeconds+2.5),e.finalizeSpawn(a)}var Ze=.1;function zo(e,t,r){dn(e,Ze)}function bo(e,t,r){hn(e,t,Ze,r)}function To(e,t,r){fn(e,t,Ze)}function gn(e,t,r){mn(e,t,Ze)}var Zt,vn,yn,Lo,Ro;function Mo(e){e.monsterinfo.current_move=Zt}function No(e){e.monsterinfo.current_move=vn}function Jt(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=yn:e.monsterinfo.current_move=Zt}function Po(e,t){if(!e.enemy)return;let r={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight-8},n=we(_e(e.enemy.origin,r));pn(e,r,n,10,2,0,0,0,t,5)}function ko(e,t){if(!e.enemy)return;let r={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},n=we(_e(e.enemy.origin,r));Eo(t,e,r,n,50,600)}var Oo=Array.from({length:30},()=>({ai:zo,dist:0}));Zt={firstframe:0,lastframe:29,frames:Oo,endfunc:Mo};var Io=Array.from({length:40},()=>({ai:bo,dist:2}));vn={firstframe:30,lastframe:69,frames:Io,endfunc:No};var Co=Array.from({length:20},()=>({ai:To,dist:10}));yn={firstframe:70,lastframe:89,frames:Co,endfunc:Jt};var Do=Array.from({length:10},(e,t)=>({ai:gn,dist:0,think:t>=2&&t<=8?Po:null}));Lo={firstframe:90,lastframe:99,frames:Do,endfunc:Jt};var Fo=Array.from({length:10},(e,t)=>({ai:gn,dist:0,think:t===5?ko:null}));Ro={firstframe:100,lastframe:109,frames:Fo,endfunc:Jt};var Je=.1;function Bo(e,t,r){dn(e,Je)}function Uo(e,t,r){hn(e,t,Je,r)}function Go(e,t,r){fn(e,t,Je)}function Vo(e,t,r){mn(e,t,Je)}var Qt,xn,_n,Ho;function Wo(e){e.monsterinfo.current_move=Qt}function Ko(e){e.monsterinfo.current_move=xn}function wn(e){e.enemy&&e.enemy.health>0?e.monsterinfo.current_move=_n:e.monsterinfo.current_move=Qt}function Xo(e,t){if(!e.enemy)return;let r={x:e.origin.x,y:e.origin.y,z:e.origin.z+e.viewheight},n=we(_e(e.enemy.origin,r));pn(e,r,n,4,4,0,0,0,t,4)}var Yo=Array.from({length:30},()=>({ai:Bo,dist:0}));Qt={firstframe:0,lastframe:29,frames:Yo,endfunc:Wo};var $o=Array.from({length:40},()=>({ai:Uo,dist:2}));xn={firstframe:30,lastframe:69,frames:$o,endfunc:Ko};var jo=Array.from({length:20},()=>({ai:Go,dist:10}));_n={firstframe:70,lastframe:89,frames:jo,endfunc:wn};var qo=Array.from({length:10},(e,t)=>({ai:Vo,dist:0,think:t===5?Xo:null}));Ho={firstframe:90,lastframe:99,frames:qo,endfunc:wn};var wu=new Map(Yt.map(e=>[e.name,e]));var Zo=2166136261,Jo=16777619;function Sn(e,t){let r=e>>>0;for(let n=0;n<t.length;n+=1)r^=t[n]&255,r=Math.imul(r,Jo)>>>0;return r>>>0}function ue(e,t){let r=new ArrayBuffer(8);new DataView(r).setFloat64(0,t,!0);let i=new Uint8Array(r);return Sn(e,i)}function Ut(e,t){let r=new Uint8Array(t.length);for(let n=0;n<t.length;n+=1)r[n]=t.charCodeAt(n)&255;return Sn(e,r)}var Bt=2,Qo=1;function U(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t} must be an object`);return e}function C(e,t){if(typeof e!="number"||!Number.isFinite(e))throw new Error(`${t} must be a finite number`);return e}function Ve(e,t,r){return e===void 0?r:C(e,t)}function Xe(e,t){if(typeof e!="string")throw new Error(`${t} must be a string`);return e}function We(e,t){if(!Array.isArray(e))throw new Error(`${t} must be an array`);for(let r of e)C(r,`${t} element`);return e}function ec(e){if(e===void 0)return{frameNumber:0,timeSeconds:0,previousTimeSeconds:0,deltaSeconds:0};let t=U(e,"level");return{frameNumber:Ve(t.frameNumber,"level.frameNumber",0),timeSeconds:Ve(t.timeSeconds,"level.timeSeconds",0),previousTimeSeconds:Ve(t.previousTimeSeconds,"level.previousTimeSeconds",0),deltaSeconds:Ve(t.deltaSeconds,"level.deltaSeconds",0)}}function tc(e){if(e===void 0)return new Ka().getState();let t=U(e,"rng"),r=U(t.mt,"rng.mt"),n=We(r.state,"rng.mt.state");return{mt:{index:C(r.index,"rng.mt.index"),state:n}}}function rc(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("thinks must be an array");return e.map((t,r)=>{let n=U(t,`thinks[${r}]`);return{time:C(n.time,`thinks[${r}].time`),entityIndex:C(n.entityIndex,`thinks[${r}].entityIndex`)}})}function nc(e){if(e===void 0)return{};let t=U(e,"entity.fields"),r={};for(let[n,i]of Object.entries(t)){if(i===null){r[n]=null;continue}switch(typeof i){case"number":case"string":case"boolean":r[n]=i;break;default:{if(!Array.isArray(i)){let s=U(i,n),a={};for(let[o,c]of Object.entries(s))a[o]=C(c,`${n}.${o}`);r[n]=a;break}if(Array.isArray(i)&&i.length===3){let[s,a,o]=i;r[n]=[C(s,`${n}[0]`),C(a,`${n}[1]`),C(o,`${n}[2]`)];break}throw new Error(`Unsupported entity field value for ${n}`)}}}return r}function ic(e){if(!Array.isArray(e))throw new Error("entities must be an array");return e.map((t,r)=>{let n=U(t,`entities[${r}]`);return{index:C(n.index,`entities[${r}].index`),fields:nc(n.fields)}})}function sc(e){let t=U(e,"pool");return{capacity:C(t.capacity,"pool.capacity"),activeOrder:We(t.activeOrder,"pool.activeOrder"),freeList:We(t.freeList,"pool.freeList"),pendingFree:We(t.pendingFree,"pool.pendingFree")}}function ac(e){let t=U(e,"entities");return{timeSeconds:C(t.timeSeconds,"entities.timeSeconds"),pool:sc(t.pool),entities:ic(t.entities),thinks:rc(t.thinks)}}function oc(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("cvars must be an array");return e.map((t,r)=>{let n=U(t,`cvars[${r}]`);return{name:Xe(n.name,`cvars[${r}].name`),value:Xe(n.value,`cvars[${r}].value`),flags:C(n.flags,`cvars[${r}].flags`)}})}function cc(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("configstrings must be an array");return e.map((t,r)=>Xe(t,`configstrings[${r}]`))}function lc(e){return e===void 0?{}:U(e,"gameState")}function Z(e,t){if(t==null)return e;if(typeof t=="number")return ue(e,t);if(typeof t=="string")return Ut(e,t);if(typeof t=="boolean")return ue(e,t?1:0);if(Array.isArray(t)){let r=e;for(let n of t)r=Z(r,n);return r}if(typeof t=="object"){let r=e,n=Object.keys(t).sort();for(let i of n)r=Ut(r,i),r=Z(r,t[i]);return r}return e}function uc(e){let t=Zo;return t=ue(t,e.version),t=ue(t,e.timestamp),t=Ut(t,e.map),t=ue(t,e.difficulty),t=ue(t,e.playtimeSeconds),t=Z(t,e.gameState),t=Z(t,e.level),t=Z(t,e.rng),t=Z(t,e.entities),t=Z(t,e.cvars),t=Z(t,e.configstrings),e.player&&(t=Z(t,e.player)),t>>>0}function An(e,t={}){let{allowNewerVersion:r=!0}=t,n=typeof e=="string"?JSON.parse(e):e,i=U(n,"save"),s=i.version??Bt,a=C(s,"version");if(a<Qo)throw new Error(`Unsupported save version ${a}`);if(a>Bt&&!r)throw new Error(`Save version ${a} is newer than supported ${Bt}`);let o={version:a,timestamp:C(i.timestamp,"timestamp"),map:Xe(i.map,"map"),difficulty:C(i.difficulty,"difficulty"),playtimeSeconds:C(i.playtimeSeconds,"playtimeSeconds"),gameState:lc(i.gameState),level:ec(i.level),rng:tc(i.rng),entities:ac(i.entities),cvars:oc(i.cvars),configstrings:cc(i.configstrings),player:i.player?i.player:void 0,checksum:i.checksum!==void 0?C(i.checksum,"checksum"):void 0};if(o.checksum!==void 0){let c=uc(o);if(c!==o.checksum)throw new Error(`Save file checksum mismatch: expected ${o.checksum}, calculated ${c}`)}return o}var Su=new Set(Yt.filter(e=>e.save).map(e=>e.name));var rn=globalThis.TextEncoder;function de(e){return An({...e},{allowNewerVersion:!0})}function dc(e){return rn?new rn().encode(JSON.stringify(e)).length:JSON.stringify(e).length}var hc=class{constructor(){this.records=new Map}async init(){return Promise.resolve()}async put(e){let t={id:e.id,metadata:{...e.metadata},save:de(e.save)};this.records.set(e.id,t)}async get(e){let t=this.records.get(e);return t?{id:t.id,metadata:{...t.metadata},save:de(t.save)}:null}async delete(e){return this.records.delete(e)}async list(){return Array.from(this.records.values()).map(e=>({id:e.id,metadata:{...e.metadata},save:de(e.save)}))}},fc=class{constructor(e,t,r){this.indexedDB=e,this.dbName=t,this.storeName=r,this.db=null}async init(){this.db||(this.db=await new Promise((e,t)=>{let r=this.indexedDB.open(this.dbName,1);r.onupgradeneeded=()=>{r.result.createObjectStore(this.storeName,{keyPath:"id"})},r.onerror=()=>t(r.error??new Error("Failed to open IndexedDB")),r.onsuccess=()=>e(r.result)}))}async runTransaction(e,t){await this.init();let r=this.db;return new Promise((n,i)=>{let a=r.transaction(this.storeName,e).objectStore(this.storeName),o=t(a);o.onsuccess=()=>n(o.result),o.onerror=()=>i(o.error??new Error("IndexedDB request failed"))})}async put(e){await this.runTransaction("readwrite",t=>t.put(e))}async get(e){let t=await this.runTransaction("readonly",r=>r.get(e));return t?{id:t.id,metadata:{...t.metadata},save:de(t.save)}:null}async delete(e){return await this.get(e)?(await this.runTransaction("readwrite",r=>r.delete(e)),!0):!1}async list(){return(await this.runTransaction("readonly",t=>t.getAll())).map(t=>({id:t.id,metadata:{...t.metadata},save:de(t.save)}))}},er=class ye{constructor(t={}){let{dbName:r=ye.DEFAULT_DB_NAME,storeName:n=ye.DEFAULT_STORE}=t,i=t.indexedDB??globalThis.indexedDB;i?this.adapter=new fc(i,r,n):this.adapter=new hc}async save(t,r,n={}){let i=de(r),s={id:t,name:n.name??t,map:i.map,difficulty:i.difficulty,playtimeSeconds:i.playtimeSeconds,timestamp:i.timestamp,version:i.version,bytes:dc(i)};return await this.adapter.init(),await this.adapter.put({id:t,metadata:s,save:i}),s}async load(t,r={}){await this.adapter.init();let n=await this.adapter.get(t);if(!n)throw new Error(`Save slot ${t} not found`);return An(n.save,r)}async delete(t){return await this.adapter.init(),this.adapter.delete(t)}async list(){return await this.adapter.init(),(await this.adapter.list()).map(r=>({...r.metadata})).sort((r,n)=>n.timestamp-r.timestamp||r.id.localeCompare(n.id))}async quickSave(t){return this.save(ye.QUICK_SLOT,t,{name:"Quick Save"})}async quickLoad(t={}){return this.load(ye.QUICK_SLOT,t)}};er.DEFAULT_DB_NAME="quake2ts-saves";er.DEFAULT_STORE="saves";er.QUICK_SLOT="quicksave";var En=new Map;var zn=(e,t)=>{if(!t)return;let r=t.inventory.currentWeapon;if(r){let i=Object.values(un).find(s=>s.weaponId===r);if(i){let s=`w_${i.id.substring(7)}`,a=En.get(s);a&&e.drawPic(B.WEAPON_ICON_X,B.WEAPON_ICON_Y,a)}}let n=B.POWERUP_X;for(let[i,s]of t.inventory.powerups.entries())if(s&&s>0){let a=`p_${i}`,o=En.get(a);o&&(e.drawPic(n,B.POWERUP_Y,o),n-=o.width+4)}};var Qe=new Map;var bn=(e,t)=>{if(!t.damageIndicators)return;let r=e.width,n=e.height,{forward:i,right:s,up:a}=ve(t.viewAngles);for(let o of t.damageIndicators){let{direction:c,strength:l}=o,u={...c},d=Math.sqrt(u.x*u.x+u.y*u.y+u.z*u.z);d>0&&(u.x/=d,u.y/=d,u.z/=d);let h=$(u,s),m=$(u,i),p=Math.atan2(m,h)*180/Math.PI,g,f=0,v=0;p>-45&&p<=45?(g=Qe.get("d_right"),f=r-(g?.width||0),v=(n-(g?.height||0))/2):p>45&&p<=135?(g=Qe.get("d_up"),f=(r-(g?.width||0))/2,v=0):p>135||p<=-135?(g=Qe.get("d_left"),f=0,v=(n-(g?.height||0))/2):(g=Qe.get("d_down"),f=(r-(g?.width||0))/2,v=n-(g?.height||0)),g&&e.drawPic(f,v,g)}};var Tn=(e,t)=>{let r=[`FPS: ${t.fps}`,`Draw Calls: ${t.drawCalls}`,`Batches: ${t.batches}`,`Faces Drawn: ${t.facesDrawn}`,`Vertices: ${t.vertexCount}`],n=10;for(let i of r)e.drawString(10,n,i),n+=10};var tr=[],rr=0;var Ln=(e,t,r,n,i,s,a)=>{e.begin2D(),t.damageAlpha>0&&e.drawfillRect(0,0,e.width,e.height,[1,0,0,t.damageAlpha]),Ue(e,B.HEALTH_X,B.HEALTH_Y,n,tr,rr),Ue(e,B.ARMOR_X,B.ARMOR_Y,i,tr,rr),Ue(e,B.AMMO_X,B.AMMO_Y,s,tr,rr),zn(e,r),bn(e,t),Tn(e,a),t.centerPrint&&e.drawCenterString(e.height/2-20,t.centerPrint),t.notify&&e.drawString(8,8,t.notify),Zr(e,e.width,e.height),e.end2D()};var mc=2048,et=class{constructor(){this.configstrings=new Array(mc).fill("");this.entities=new Map;this.baselines=new Map;this.latestFrame=null;this.stats=new Array(32).fill(0);this.inventory=new Array(256).fill(0)}onServerData(t,r,n,i,s,a){console.log(`Demo: Server Data - Protocol: ${t}, Level: ${a}`),this.configstrings.fill(""),this.entities.clear(),this.baselines.clear(),this.latestFrame=null}onConfigString(t,r){this.configstrings[t]=r}onSpawnBaseline(t){this.baselines.set(t.number,structuredClone(t))}onFrame(t){this.latestFrame=t,this.stats=[...t.playerState.stats];let r=t.packetEntities,n=new Map;if(r.delta)for(let[i,s]of this.entities)n.set(i,structuredClone(s));for(let i of r.entities){if(i.bits&Lr){n.delete(i.number);continue}let s=i.number,a;r.delta&&this.entities.has(s)?a=this.entities.get(s):this.baselines.has(s)?a=this.baselines.get(s):a=ie();let o=structuredClone(a);this.applyDelta(o,i),n.set(s,o)}this.entities=n}applyDelta(t,r){let n=r.bits;t.number=r.number,n&_t&&(t.modelindex=r.modelindex),n&St&&(t.modelindex2=r.modelindex2),n&At&&(t.modelindex3=r.modelindex3),n&Et&&(t.modelindex4=r.modelindex4),n&gt&&(t.frame=r.frame),n&wt&&(t.frame=r.frame),(n&Te||n&Me)&&(t.skinnum=r.skinnum),(n&be||n&Re)&&(t.effects=r.effects),(n&ze||n&Le)&&(t.renderfx=r.renderfx),n&ht&&(t.origin.x=r.origin.x),n&ft&&(t.origin.y=r.origin.y),n&yt&&(t.origin.z=r.origin.z),n&xt&&(t.angles.x=r.angles.x),n&mt&&(t.angles.y=r.angles.y),n&pt&&(t.angles.z=r.angles.z),n&zt&&(t.old_origin.x=r.old_origin.x,t.old_origin.y=r.old_origin.y,t.old_origin.z=r.old_origin.z),n&bt&&(t.sound=r.sound),n&vt&&(t.event=r.event),n&Tt&&(t.solid=r.solid)}onCenterPrint(t){console.log(`[Center]: ${t}`)}onStuffText(t){}onPrint(t,r){}onSound(t,r,n,i,s,a,o){}onTempEntity(t,r,n,i,s,a,o,c,l){}onLayout(t){}onInventory(t){this.inventory=[...t]}onMuzzleFlash(t,r){}onMuzzleFlash2(t,r){}onDisconnect(){}onReconnect(){}onDownload(t,r,n){}getPredictionState(){if(!this.latestFrame)return q();let t=this.latestFrame.playerState,r={ammo:{caps:[],counts:[]},ownedWeapons:new Set,armor:null,powerups:new Map,keys:new Set},n={...t.origin},i={...t.velocity},s={...t.viewangles},a={...t.delta_angles};return{origin:n,velocity:i,viewangles:s,pmFlags:t.pm_flags,pmType:t.pm_type,waterlevel:te.None,gravity:t.gravity,deltaAngles:a,client:{inventory:r,weaponStates:{states:new Map}},health:t.stats[1],armor:t.stats[4],ammo:t.stats[2]}}};var pc=[{code:"KeyW",command:"+forward"},{code:"ArrowUp",command:"+forward"},{code:"KeyS",command:"+back"},{code:"ArrowDown",command:"+back"},{code:"KeyA",command:"+moveleft"},{code:"KeyD",command:"+moveright"},{code:"Space",command:"+jump"},{code:"ControlLeft",command:"+crouch"},{code:"ShiftLeft",command:"+speed"},{code:"Mouse1",command:"+attack"},{code:"Mouse2",command:"+use"},{code:"Mouse3",command:"+zoom"},{code:"ArrowLeft",command:"+left"},{code:"ArrowRight",command:"+right"},{code:"PageUp",command:"+lookup"},{code:"PageDown",command:"+lookdown"},{code:"Gamepad0-Button7",command:"+attack"},{code:"Gamepad0-Button6",command:"+zoom"},{code:"Gamepad0-Button0",command:"+jump"},{code:"Gamepad0-Button1",command:"+crouch"},{code:"Gamepad0-Button2",command:"+use"},{code:"Gamepad0-Button4",command:"prevweapon"},{code:"Gamepad0-Button5",command:"nextweapon"},{code:"Digit1",command:"weapon 1"},{code:"Digit2",command:"weapon 2"},{code:"Digit3",command:"weapon 3"},{code:"Digit4",command:"weapon 4"},{code:"Digit5",command:"weapon 5"},{code:"Digit6",command:"weapon 6"},{code:"Digit7",command:"weapon 7"},{code:"Digit8",command:"weapon 8"},{code:"Digit9",command:"weapon 9"},{code:"Digit0",command:"weapon 10"}],ne=class{constructor(t=pc){this.bindings=new Map;for(let r of t)this.bind(r.code,r.command)}bind(t,r){this.bindings.set(t,r)}unbind(t){this.bindings.delete(t)}getBinding(t){return this.bindings.get(t)}entries(){return new Map(this.bindings.entries())}};function Rn(){return new ne}function nr(e){return e}function Se(e){return e.trim().toLowerCase()}var gc=250,ir=class{constructor(){this.activeCodes=new Set;this.downTime=0;this.msec=0;this.pressed=!1}press(t,r){return this.activeCodes.has(t)?!1:(this.activeCodes.add(t),this.pressed=!0,this.activeCodes.size===1?(this.downTime=r,!0):!1)}release(t,r){return this.activeCodes.delete(t)&&this.activeCodes.size===0?(this.msec+=r-this.downTime,this.downTime=0,!0):!1}sample(t,r){if(t<=0)return{active:this.activeCodes.size>0,wasPressed:this.pressed,fraction:0};let n=this.msec;this.activeCodes.size>0&&(n+=r-this.downTime,this.downTime=r),this.msec=0;let i=Math.min(n/t,1),s=this.pressed;return this.pressed=!1,{active:this.activeCodes.size>0,wasPressed:s,fraction:i}}},tt=(v=>(v.Forward="+forward",v.Back="+back",v.MoveLeft="+moveleft",v.MoveRight="+moveright",v.MoveUp="+moveup",v.MoveDown="+movedown",v.Jump="+jump",v.Crouch="+crouch",v.Attack="+attack",v.Use="+use",v.Holster="+holster",v.TurnLeft="+left",v.TurnRight="+right",v.LookUp="+lookup",v.LookDown="+lookdown",v.SpeedModifier="+speed",v.Zoom="+zoom",v))(tt||{}),vc={"+attack":K.Attack,"+use":K.Use,"+holster":K.Holster,"+jump":K.Jump,"+crouch":K.Crouch},yc=new Map(Object.values(tt).map(e=>[Se(e),e]));function xc(e){return yc.get(Se(e))}function Ae(){return typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()}var he=class{constructor(t={},r=new ne){this.buttons=new Map;this.viewAngles={x:0,y:0,z:0};this.pointerLocked=!1;this.mouseDelta={deltaX:0,deltaY:0};this.previousMouseDelta={deltaX:0,deltaY:0};this.anyPressed=!1;this.commandQueue=[];this.gamepadButtons=new Map;this.gamepadMove={x:0,y:0};this.gamepadLook={x:0,y:0};this.touchButtons=new Map;this.touchMove={x:0,y:0};this.touchLook={x:0,y:0};this.bindings=r,this.forwardSpeed=t.forwardSpeed??Vr,this.sideSpeed=t.sideSpeed??Hr,this.upSpeed=t.upSpeed??Wr,this.yawSpeed=t.yawSpeed??Kr,this.pitchSpeed=t.pitchSpeed??Xr,this.sensitivity=t.sensitivity??Yr,this.sensitivityX=t.sensitivityX,this.sensitivityY=t.sensitivityY,this.invertMouseY=t.invertMouseY??!1,this.runByDefault=t.runByDefault??!0,this.requirePointerLock=t.requirePointerLock??!0,this.jumpAddsUpMove=t.jumpAddsUpMove??!0,this.crouchAddsDownMove=t.crouchAddsDownMove??!0,this.mouseFilter=t.mouseFilter??!1,this.getGamepads=t.getGamepads,this.gamepadDeadZone=t.gamepadDeadZone??.15,this.gamepadLookScale=t.gamepadLookScale??1,this.invertGamepadY=t.invertGamepadY??this.invertMouseY}handleKeyDown(t,r=Ae()){let n=t,i=this.bindings.getBinding(n);i&&this.applyCommand(i,!0,n,r)}handleKeyUp(t,r=Ae()){let n=t,i=this.bindings.getBinding(n);i&&this.applyCommand(i,!1,n,r)}handleMouseButtonDown(t,r=Ae()){let n=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(n),!0,n,r)}handleMouseButtonUp(t,r=Ae()){let n=this.mouseButtonToCode(t);this.applyCommand(this.mouseButtonToCommand(n),!1,n,r)}handleMouseMove(t,r){this.requirePointerLock&&!this.pointerLocked||(this.mouseDelta={deltaX:this.mouseDelta.deltaX+t,deltaY:this.mouseDelta.deltaY+r})}setPointerLocked(t){this.pointerLocked=t}setGamepadState(t){this.pendingGamepads=t}setTouchState(t){this.pendingTouchState=t}buildCommand(t,r=Ae(),n){this.pollGamepads(r),this.applyTouchState(r);let i=this.yawSpeed*t/1e3,s=this.pitchSpeed*t/1e3,a=this.sample("+left",t,r),o=this.sample("+right",t,r),c=this.sample("+lookup",t,r),u={x:(this.sample("+lookdown",t,r).fraction-c.fraction)*s,y:(o.fraction-a.fraction)*i,z:0};if(this.gamepadLook.x!==0||this.gamepadLook.y!==0){let R=this.gamepadLook.y*(this.invertGamepadY?-1:1);u={x:u.x+R*s*this.gamepadLookScale,y:u.y+this.gamepadLook.x*i*this.gamepadLookScale,z:0}}if(this.touchLook.x!==0||this.touchLook.y!==0){let R=this.touchLook.y*(this.invertMouseY?-1:1);u={x:u.x+R*s,y:u.y+this.touchLook.x*i,z:0}}if(this.pointerLocked||!this.requirePointerLock){let R=this.sampleMouseDelta(),N=jr(R,{sensitivity:this.sensitivity,sensitivityX:this.sensitivityX,sensitivityY:this.sensitivityY,invertY:this.invertMouseY});u={x:u.x+N.x,y:u.y+N.y,z:0}}let d=$r(this.viewAngles,u);this.viewAngles=d;let h=this.sample("+forward",t,r),m=this.sample("+back",t,r),p=this.sample("+moveleft",t,r),g=this.sample("+moveright",t,r),f=this.sample("+moveup",t,r),v=this.sample("+movedown",t,r),S=this.sample("+speed",t,r),w=this.sample("+jump",t,r),_=this.sample("+crouch",t,r),y=this.runByDefault?S.active?.5:1:S.active?1:.5,x=this.forwardSpeed*(h.fraction-m.fraction)*y,b=this.sideSpeed*(g.fraction-p.fraction)*y,z=this.upSpeed*(f.fraction-v.fraction);(this.gamepadMove.x!==0||this.gamepadMove.y!==0)&&(x+=this.forwardSpeed*this.gamepadMove.y*y,b+=this.sideSpeed*this.gamepadMove.x*y),(this.touchMove.x!==0||this.touchMove.y!==0)&&(x+=this.forwardSpeed*this.touchMove.y*y,b+=this.sideSpeed*this.touchMove.x*y),this.jumpAddsUpMove&&w.fraction>0&&(z+=this.upSpeed*w.fraction),this.crouchAddsDownMove&&_.fraction>0&&(z-=this.upSpeed*_.fraction),x=this.clampMove(x,this.forwardSpeed),b=this.clampMove(b,this.sideSpeed),z=this.clampMove(z,this.upSpeed);let T=this.collectButtonBits(t,r),E=Math.min(Math.max(Math.round(t),1),gc);return(this.anyPressed||T!==K.None)&&(T|=K.Any),this.anyPressed=!1,{msec:E,buttons:T,angles:{...this.viewAngles},forwardmove:x,sidemove:b,upmove:z,serverFrame:n}}consumeConsoleCommands(){let t=this.commandQueue;return this.commandQueue=[],t}pollGamepads(t){let r=this.getGamepads?.()??this.pendingGamepads??[];this.pendingGamepads=void 0,this.gamepadMove={x:0,y:0},this.gamepadLook={x:0,y:0};let n=new Set;for(let i of r){if(!i||i.connected===!1)continue;let s=i.index??0,a=i.axes??[];this.gamepadMove={x:this.mergeAnalog(this.gamepadMove.x,this.applyDeadZone(a[0]??0)),y:this.mergeAnalog(this.gamepadMove.y,-this.applyDeadZone(a[1]??0))},this.gamepadLook={x:this.mergeAnalog(this.gamepadLook.x,this.applyDeadZone(a[2]??0)),y:this.mergeAnalog(this.gamepadLook.y,this.applyDeadZone(a[3]??0))};let o=i.buttons??[];for(let c=0;c<o.length;c++){let l=o[c];if(!l)continue;let u=l.pressed||l.value>this.gamepadDeadZone,d=this.gamepadButtonCode(s,c);u&&n.add(d);let h=this.gamepadButtons.get(d)??!1;u!==h&&(this.applyCommand(this.bindings.getBinding(d),u,d,t),this.gamepadButtons.set(d,u))}}for(let[i,s]of this.gamepadButtons.entries())s&&!n.has(i)&&(this.applyCommand(this.bindings.getBinding(i),!1,i,t),this.gamepadButtons.set(i,!1))}applyTouchState(t){let r=this.pendingTouchState;if(r&&(this.pendingTouchState=void 0,r.move&&(this.touchMove={x:this.clampAnalog(r.move.x),y:this.clampAnalog(r.move.y)}),r.look&&(this.touchLook={x:this.clampAnalog(r.look.x),y:this.clampAnalog(r.look.y)}),r.buttons))for(let[n,i]of Object.entries(r.buttons)){if(i===void 0)continue;let s=this.touchButtons.get(n)??!1;i!==s&&(this.applyCommand(n,i,this.touchButtonCode(n),t),this.touchButtons.set(n,i))}}applyCommand(t,r,n,i){if(!t)return;let s=xc(t);if(s){let a=this.lookupButton(s);r?(a.press(n,i)&&this.commandQueue.push(s),this.anyPressed=!0):a.release(n,i)&&this.commandQueue.push(s.replace("+","-"))}else r&&this.commandQueue.push(t)}sampleMouseDelta(){let t=this.mouseDelta;if(this.mouseDelta={deltaX:0,deltaY:0},!this.mouseFilter)return this.previousMouseDelta=t,t;let r={deltaX:(t.deltaX+this.previousMouseDelta.deltaX)*.5,deltaY:(t.deltaY+this.previousMouseDelta.deltaY)*.5};return this.previousMouseDelta=t,r}collectButtonBits(t,r){let n=K.None;for(let[i,s]of Object.entries(vc)){let a=this.sample(i,t,r);(a.fraction>0||a.active||a.wasPressed)&&(n|=s)}return n}lookupButton(t){let r=this.buttons.get(t);return r||(r=new ir,this.buttons.set(t,r)),r}mouseButtonToCode(t){return t===0?"Mouse1":t===1?"Mouse3":t===2?"Mouse2":`Mouse${t+1}`}mouseButtonToCommand(t){return this.bindings.getBinding(t)}sample(t,r,n){return this.lookupButton(t).sample(r,n)}gamepadButtonCode(t,r){return`Gamepad${t}-Button${r}`}touchButtonCode(t){return`Touch-${t}`}clampAnalog(t){return Math.max(-1,Math.min(1,t))}applyDeadZone(t){return Math.abs(t)<this.gamepadDeadZone?0:t}mergeAnalog(t,r){return Math.abs(r)>Math.abs(t)?r:t}clampMove(t,r){return Math.max(-r,Math.min(r,t))}};var rt=class{constructor(t,r=new he(t)){this.queued=[];this.controller=r}captureFrame(t,r,n){let i=this.controller.buildCommand(t,r,n),s=this.controller.consumeConsoleCommands(),a={command:i,console:s};return this.queued.push(a),a}consumeQueued(){let t=[...this.queued];return this.queued.length=0,t}getController(){return this.controller}};function _c(e){let t=new ce(e.engine.trace),r=new le,n=new Rr,i=new et;n.setHandler(i);let s,a,o,c;return{init(l){s=l,l?.state&&t.setAuthoritative(l),e.engine.trace({x:0,y:0,z:0},{x:1,y:0,z:0})},predict(l){return t.enqueueCommand(l)},render(l){n.getState()===Lt.Playing?a=i.getPredictionState():(l.latest?.state&&(t.setAuthoritative(l.latest),s=l.latest),l.previous?.state&&l.latest?.state?a=Be(l.previous.state,l.latest.state,l.alpha):a=l.latest?.state??l.previous?.state??t.getPredictedState());let d=l.latest&&l.previous?Math.max(0,l.latest.timeMs-l.previous.timeMs):0;if(o=r.sample(a,d),a){let{origin:m,viewangles:p}=a;c=new Tr,c.position=k.fromValues(m.x,m.y,m.z),c.angles=k.fromValues(p.x,p.y,p.z),c.fov=90,c.aspect=4/3}let h={};if(e.engine.renderer&&a&&a.client){let m={batches:0,facesDrawn:0,drawCalls:0,skyDrawn:!1,viewModelDrawn:!1,fps:0,vertexCount:0},p={origin:a.origin,velocity:a.velocity,viewAngles:a.viewangles,onGround:W(a.pmFlags,F.OnGround),waterLevel:a.waterlevel,mins:{x:-16,y:-16,z:-24},maxs:{x:16,y:16,z:32},damageAlpha:0,damageIndicators:[]};Ln(e.engine.renderer,p,a.client,a.health,a.armor,a.ammo,m)}return h},shutdown(){s=void 0,a=void 0},get prediction(){return t},get lastRendered(){return a},get view(){return r},get lastView(){return o},get camera(){return c},demoPlayback:n,demoHandler:i}}return On(wc);})();
2
2
  //# sourceMappingURL=index.global.js.map