@quake2ts/engine 0.0.1

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 (276) hide show
  1. package/dist/browser/index.global.js +617 -0
  2. package/dist/browser/index.global.js.map +1 -0
  3. package/dist/cjs/index.cjs +17604 -0
  4. package/dist/cjs/index.cjs.map +1 -0
  5. package/dist/esm/index.js +17373 -0
  6. package/dist/esm/index.js.map +1 -0
  7. package/dist/tsconfig.tsbuildinfo +1 -0
  8. package/dist/types/assets/animation.d.ts +33 -0
  9. package/dist/types/assets/animation.d.ts.map +1 -0
  10. package/dist/types/assets/audio.d.ts +27 -0
  11. package/dist/types/assets/audio.d.ts.map +1 -0
  12. package/dist/types/assets/audio.worker.d.ts +2 -0
  13. package/dist/types/assets/audio.worker.d.ts.map +1 -0
  14. package/dist/types/assets/browserIngestion.d.ts +7 -0
  15. package/dist/types/assets/browserIngestion.d.ts.map +1 -0
  16. package/dist/types/assets/bsp.d.ts +197 -0
  17. package/dist/types/assets/bsp.d.ts.map +1 -0
  18. package/dist/types/assets/bsp.worker.d.ts +2 -0
  19. package/dist/types/assets/bsp.worker.d.ts.map +1 -0
  20. package/dist/types/assets/cache.d.ts +26 -0
  21. package/dist/types/assets/cache.d.ts.map +1 -0
  22. package/dist/types/assets/crossReference.d.ts +35 -0
  23. package/dist/types/assets/crossReference.d.ts.map +1 -0
  24. package/dist/types/assets/ent.d.ts +31 -0
  25. package/dist/types/assets/ent.d.ts.map +1 -0
  26. package/dist/types/assets/fileType.d.ts +18 -0
  27. package/dist/types/assets/fileType.d.ts.map +1 -0
  28. package/dist/types/assets/headlessLoader.d.ts +11 -0
  29. package/dist/types/assets/headlessLoader.d.ts.map +1 -0
  30. package/dist/types/assets/index.d.ts +30 -0
  31. package/dist/types/assets/index.d.ts.map +1 -0
  32. package/dist/types/assets/ingestion.d.ts +62 -0
  33. package/dist/types/assets/ingestion.d.ts.map +1 -0
  34. package/dist/types/assets/interactionGraph.d.ts +21 -0
  35. package/dist/types/assets/interactionGraph.d.ts.map +1 -0
  36. package/dist/types/assets/manager.d.ts +97 -0
  37. package/dist/types/assets/manager.d.ts.map +1 -0
  38. package/dist/types/assets/mapStatistics.d.ts +20 -0
  39. package/dist/types/assets/mapStatistics.d.ts.map +1 -0
  40. package/dist/types/assets/md2.d.ts +82 -0
  41. package/dist/types/assets/md2.d.ts.map +1 -0
  42. package/dist/types/assets/md3.d.ts +72 -0
  43. package/dist/types/assets/md3.d.ts.map +1 -0
  44. package/dist/types/assets/ogg.d.ts +12 -0
  45. package/dist/types/assets/ogg.d.ts.map +1 -0
  46. package/dist/types/assets/pak.d.ts +32 -0
  47. package/dist/types/assets/pak.d.ts.map +1 -0
  48. package/dist/types/assets/pakIndexStore.d.ts +19 -0
  49. package/dist/types/assets/pakIndexStore.d.ts.map +1 -0
  50. package/dist/types/assets/pakValidation.d.ts +28 -0
  51. package/dist/types/assets/pakValidation.d.ts.map +1 -0
  52. package/dist/types/assets/pakWriter.d.ts +27 -0
  53. package/dist/types/assets/pakWriter.d.ts.map +1 -0
  54. package/dist/types/assets/pcx.d.ts +13 -0
  55. package/dist/types/assets/pcx.d.ts.map +1 -0
  56. package/dist/types/assets/preview.d.ts +15 -0
  57. package/dist/types/assets/preview.d.ts.map +1 -0
  58. package/dist/types/assets/resourceTracker.d.ts +33 -0
  59. package/dist/types/assets/resourceTracker.d.ts.map +1 -0
  60. package/dist/types/assets/sprite.d.ts +23 -0
  61. package/dist/types/assets/sprite.d.ts.map +1 -0
  62. package/dist/types/assets/streamer.d.ts +17 -0
  63. package/dist/types/assets/streamer.d.ts.map +1 -0
  64. package/dist/types/assets/streamingPak.d.ts +28 -0
  65. package/dist/types/assets/streamingPak.d.ts.map +1 -0
  66. package/dist/types/assets/texture.d.ts +37 -0
  67. package/dist/types/assets/texture.d.ts.map +1 -0
  68. package/dist/types/assets/tga.d.ts +15 -0
  69. package/dist/types/assets/tga.d.ts.map +1 -0
  70. package/dist/types/assets/vfs.d.ts +57 -0
  71. package/dist/types/assets/vfs.d.ts.map +1 -0
  72. package/dist/types/assets/visibilityAnalyzer.d.ts +28 -0
  73. package/dist/types/assets/visibilityAnalyzer.d.ts.map +1 -0
  74. package/dist/types/assets/wal.d.ts +21 -0
  75. package/dist/types/assets/wal.d.ts.map +1 -0
  76. package/dist/types/assets/wav.d.ts +11 -0
  77. package/dist/types/assets/wav.d.ts.map +1 -0
  78. package/dist/types/audio/ambient.d.ts +22 -0
  79. package/dist/types/audio/ambient.d.ts.map +1 -0
  80. package/dist/types/audio/api.d.ts +37 -0
  81. package/dist/types/audio/api.d.ts.map +1 -0
  82. package/dist/types/audio/channels.d.ts +15 -0
  83. package/dist/types/audio/channels.d.ts.map +1 -0
  84. package/dist/types/audio/constants.d.ts +2 -0
  85. package/dist/types/audio/constants.d.ts.map +1 -0
  86. package/dist/types/audio/context.d.ts +79 -0
  87. package/dist/types/audio/context.d.ts.map +1 -0
  88. package/dist/types/audio/music.d.ts +49 -0
  89. package/dist/types/audio/music.d.ts.map +1 -0
  90. package/dist/types/audio/occlusion.d.ts +15 -0
  91. package/dist/types/audio/occlusion.d.ts.map +1 -0
  92. package/dist/types/audio/precache.d.ts +28 -0
  93. package/dist/types/audio/precache.d.ts.map +1 -0
  94. package/dist/types/audio/registry.d.ts +14 -0
  95. package/dist/types/audio/registry.d.ts.map +1 -0
  96. package/dist/types/audio/reverb.d.ts +17 -0
  97. package/dist/types/audio/reverb.d.ts.map +1 -0
  98. package/dist/types/audio/room.d.ts +5 -0
  99. package/dist/types/audio/room.d.ts.map +1 -0
  100. package/dist/types/audio/system.d.ts +112 -0
  101. package/dist/types/audio/system.d.ts.map +1 -0
  102. package/dist/types/cli/demoOptimizer.d.ts +10 -0
  103. package/dist/types/cli/demoOptimizer.d.ts.map +1 -0
  104. package/dist/types/commands.d.ts +27 -0
  105. package/dist/types/commands.d.ts.map +1 -0
  106. package/dist/types/configstrings.d.ts +36 -0
  107. package/dist/types/configstrings.d.ts.map +1 -0
  108. package/dist/types/cvars.d.ts +58 -0
  109. package/dist/types/cvars.d.ts.map +1 -0
  110. package/dist/types/demo/analysis.d.ts +83 -0
  111. package/dist/types/demo/analysis.d.ts.map +1 -0
  112. package/dist/types/demo/analyzer.d.ts +33 -0
  113. package/dist/types/demo/analyzer.d.ts.map +1 -0
  114. package/dist/types/demo/api.d.ts +40 -0
  115. package/dist/types/demo/api.d.ts.map +1 -0
  116. package/dist/types/demo/asyncParser.d.ts +15 -0
  117. package/dist/types/demo/asyncParser.d.ts.map +1 -0
  118. package/dist/types/demo/camera.d.ts +17 -0
  119. package/dist/types/demo/camera.d.ts.map +1 -0
  120. package/dist/types/demo/clipper.d.ts +34 -0
  121. package/dist/types/demo/clipper.d.ts.map +1 -0
  122. package/dist/types/demo/delta.d.ts +3 -0
  123. package/dist/types/demo/delta.d.ts.map +1 -0
  124. package/dist/types/demo/demo.worker.d.ts +126 -0
  125. package/dist/types/demo/demo.worker.d.ts.map +1 -0
  126. package/dist/types/demo/demoReader.d.ts +62 -0
  127. package/dist/types/demo/demoReader.d.ts.map +1 -0
  128. package/dist/types/demo/demoRecorder.d.ts +15 -0
  129. package/dist/types/demo/demoRecorder.d.ts.map +1 -0
  130. package/dist/types/demo/demoStream.d.ts +39 -0
  131. package/dist/types/demo/demoStream.d.ts.map +1 -0
  132. package/dist/types/demo/demoWriter.d.ts +8 -0
  133. package/dist/types/demo/demoWriter.d.ts.map +1 -0
  134. package/dist/types/demo/index.d.ts +6 -0
  135. package/dist/types/demo/index.d.ts.map +1 -0
  136. package/dist/types/demo/message.d.ts +178 -0
  137. package/dist/types/demo/message.d.ts.map +1 -0
  138. package/dist/types/demo/optimalClipFinder.d.ts +35 -0
  139. package/dist/types/demo/optimalClipFinder.d.ts.map +1 -0
  140. package/dist/types/demo/packager.d.ts +46 -0
  141. package/dist/types/demo/packager.d.ts.map +1 -0
  142. package/dist/types/demo/parser.d.ts +222 -0
  143. package/dist/types/demo/parser.d.ts.map +1 -0
  144. package/dist/types/demo/playback.d.ts +135 -0
  145. package/dist/types/demo/playback.d.ts.map +1 -0
  146. package/dist/types/demo/reader.d.ts +15 -0
  147. package/dist/types/demo/reader.d.ts.map +1 -0
  148. package/dist/types/demo/recorder.d.ts +14 -0
  149. package/dist/types/demo/recorder.d.ts.map +1 -0
  150. package/dist/types/demo/types.d.ts +37 -0
  151. package/dist/types/demo/types.d.ts.map +1 -0
  152. package/dist/types/demo/validator.d.ts +13 -0
  153. package/dist/types/demo/validator.d.ts.map +1 -0
  154. package/dist/types/demo/worldStateOptimizer.d.ts +13 -0
  155. package/dist/types/demo/worldStateOptimizer.d.ts.map +1 -0
  156. package/dist/types/demo/writer.d.ts +28 -0
  157. package/dist/types/demo/writer.d.ts.map +1 -0
  158. package/dist/types/editor/bsp-inspector.d.ts +39 -0
  159. package/dist/types/editor/bsp-inspector.d.ts.map +1 -0
  160. package/dist/types/editor/ent.d.ts +21 -0
  161. package/dist/types/editor/ent.d.ts.map +1 -0
  162. package/dist/types/host.d.ts +52 -0
  163. package/dist/types/host.d.ts.map +1 -0
  164. package/dist/types/index.d.ts +104 -0
  165. package/dist/types/index.d.ts.map +1 -0
  166. package/dist/types/loop.d.ts +40 -0
  167. package/dist/types/loop.d.ts.map +1 -0
  168. package/dist/types/network/clientConnection.d.ts +139 -0
  169. package/dist/types/network/clientConnection.d.ts.map +1 -0
  170. package/dist/types/render/__mocks__/frame.d.ts +31 -0
  171. package/dist/types/render/__mocks__/frame.d.ts.map +1 -0
  172. package/dist/types/render/bloom.d.ts +19 -0
  173. package/dist/types/render/bloom.d.ts.map +1 -0
  174. package/dist/types/render/bsp/generator.d.ts +25 -0
  175. package/dist/types/render/bsp/generator.d.ts.map +1 -0
  176. package/dist/types/render/bsp/geometry.d.ts +37 -0
  177. package/dist/types/render/bsp/geometry.d.ts.map +1 -0
  178. package/dist/types/render/bsp/renderer.d.ts +12 -0
  179. package/dist/types/render/bsp/renderer.d.ts.map +1 -0
  180. package/dist/types/render/bsp/surface.d.ts +4 -0
  181. package/dist/types/render/bsp/surface.d.ts.map +1 -0
  182. package/dist/types/render/bsp.d.ts +66 -0
  183. package/dist/types/render/bsp.d.ts.map +1 -0
  184. package/dist/types/render/bspPipeline.d.ts +78 -0
  185. package/dist/types/render/bspPipeline.d.ts.map +1 -0
  186. package/dist/types/render/bspTraversal.d.ts +13 -0
  187. package/dist/types/render/bspTraversal.d.ts.map +1 -0
  188. package/dist/types/render/camera.d.ts +54 -0
  189. package/dist/types/render/camera.d.ts.map +1 -0
  190. package/dist/types/render/cameraController.d.ts +28 -0
  191. package/dist/types/render/cameraController.d.ts.map +1 -0
  192. package/dist/types/render/collisionVis.d.ts +54 -0
  193. package/dist/types/render/collisionVis.d.ts.map +1 -0
  194. package/dist/types/render/colors.d.ts +6 -0
  195. package/dist/types/render/colors.d.ts.map +1 -0
  196. package/dist/types/render/context.d.ts +36 -0
  197. package/dist/types/render/context.d.ts.map +1 -0
  198. package/dist/types/render/culling.d.ts +12 -0
  199. package/dist/types/render/culling.d.ts.map +1 -0
  200. package/dist/types/render/debug.d.ts +36 -0
  201. package/dist/types/render/debug.d.ts.map +1 -0
  202. package/dist/types/render/debugMode.d.ts +10 -0
  203. package/dist/types/render/debugMode.d.ts.map +1 -0
  204. package/dist/types/render/dlight.d.ts +43 -0
  205. package/dist/types/render/dlight.d.ts.map +1 -0
  206. package/dist/types/render/frame.d.ts +78 -0
  207. package/dist/types/render/frame.d.ts.map +1 -0
  208. package/dist/types/render/geometry.d.ts +2 -0
  209. package/dist/types/render/geometry.d.ts.map +1 -0
  210. package/dist/types/render/gizmo.d.ts +32 -0
  211. package/dist/types/render/gizmo.d.ts.map +1 -0
  212. package/dist/types/render/gpuProfiler.d.ts +59 -0
  213. package/dist/types/render/gpuProfiler.d.ts.map +1 -0
  214. package/dist/types/render/instancing.d.ts +12 -0
  215. package/dist/types/render/instancing.d.ts.map +1 -0
  216. package/dist/types/render/interface.d.ts +50 -0
  217. package/dist/types/render/interface.d.ts.map +1 -0
  218. package/dist/types/render/light.d.ts +10 -0
  219. package/dist/types/render/light.d.ts.map +1 -0
  220. package/dist/types/render/lightCulling.d.ts +17 -0
  221. package/dist/types/render/lightCulling.d.ts.map +1 -0
  222. package/dist/types/render/lightStyles.d.ts +10 -0
  223. package/dist/types/render/lightStyles.d.ts.map +1 -0
  224. package/dist/types/render/materialLoader.d.ts +5 -0
  225. package/dist/types/render/materialLoader.d.ts.map +1 -0
  226. package/dist/types/render/materials.d.ts +39 -0
  227. package/dist/types/render/materials.d.ts.map +1 -0
  228. package/dist/types/render/md2Pipeline.d.ts +74 -0
  229. package/dist/types/render/md2Pipeline.d.ts.map +1 -0
  230. package/dist/types/render/md3Pipeline.d.ts +94 -0
  231. package/dist/types/render/md3Pipeline.d.ts.map +1 -0
  232. package/dist/types/render/options.d.ts +9 -0
  233. package/dist/types/render/options.d.ts.map +1 -0
  234. package/dist/types/render/particleSystem.d.ts +125 -0
  235. package/dist/types/render/particleSystem.d.ts.map +1 -0
  236. package/dist/types/render/postprocessing/pipeline.d.ts +13 -0
  237. package/dist/types/render/postprocessing/pipeline.d.ts.map +1 -0
  238. package/dist/types/render/renderer.d.ts +8 -0
  239. package/dist/types/render/renderer.d.ts.map +1 -0
  240. package/dist/types/render/resources.d.ts +69 -0
  241. package/dist/types/render/resources.d.ts.map +1 -0
  242. package/dist/types/render/scene.d.ts +31 -0
  243. package/dist/types/render/scene.d.ts.map +1 -0
  244. package/dist/types/render/shaderProgram.d.ts +19 -0
  245. package/dist/types/render/shaderProgram.d.ts.map +1 -0
  246. package/dist/types/render/skybox.d.ts +28 -0
  247. package/dist/types/render/skybox.d.ts.map +1 -0
  248. package/dist/types/render/sprite.d.ts +21 -0
  249. package/dist/types/render/sprite.d.ts.map +1 -0
  250. package/dist/types/render/types.d.ts +29 -0
  251. package/dist/types/render/types.d.ts.map +1 -0
  252. package/dist/types/render/webgpu/constants.d.ts +29 -0
  253. package/dist/types/render/webgpu/constants.d.ts.map +1 -0
  254. package/dist/types/render/webgpu/context.d.ts +41 -0
  255. package/dist/types/render/webgpu/context.d.ts.map +1 -0
  256. package/dist/types/render/webgpu/frame.d.ts +58 -0
  257. package/dist/types/render/webgpu/frame.d.ts.map +1 -0
  258. package/dist/types/render/webgpu/headless.d.ts +9 -0
  259. package/dist/types/render/webgpu/headless.d.ts.map +1 -0
  260. package/dist/types/render/webgpu/pipelines/sprite.d.ts +31 -0
  261. package/dist/types/render/webgpu/pipelines/sprite.d.ts.map +1 -0
  262. package/dist/types/render/webgpu/renderer.d.ts +30 -0
  263. package/dist/types/render/webgpu/renderer.d.ts.map +1 -0
  264. package/dist/types/render/webgpu/resources.d.ts +240 -0
  265. package/dist/types/render/webgpu/resources.d.ts.map +1 -0
  266. package/dist/types/render/webgpu/shaders/mipmapShader.d.ts +2 -0
  267. package/dist/types/render/webgpu/shaders/mipmapShader.d.ts.map +1 -0
  268. package/dist/types/render/webgpu/shaders/spriteShader.d.ts +2 -0
  269. package/dist/types/render/webgpu/shaders/spriteShader.d.ts.map +1 -0
  270. package/dist/types/runtime.d.ts +19 -0
  271. package/dist/types/runtime.d.ts.map +1 -0
  272. package/dist/types/stream/streamingBuffer.d.ts +102 -0
  273. package/dist/types/stream/streamingBuffer.d.ts.map +1 -0
  274. package/dist/types/tools/lightmapExport.d.ts +17 -0
  275. package/dist/types/tools/lightmapExport.d.ts.map +1 -0
  276. package/package.json +56 -0
@@ -0,0 +1,617 @@
1
+ "use strict";var Quake2Engine=(()=>{var Qh=Object.create;var na=Object.defineProperty;var Jh=Object.getOwnPropertyDescriptor;var em=Object.getOwnPropertyNames;var tm=Object.getPrototypeOf,rm=Object.prototype.hasOwnProperty;var nm=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),jo=(t,e)=>{for(var r in e)na(t,r,{get:e[r],enumerable:!0})},lu=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of em(e))!rm.call(t,i)&&i!==r&&na(t,i,{get:()=>e[i],enumerable:!(n=Jh(e,i))||n.enumerable});return t};var im=(t,e,r)=>(r=t!=null?Qh(tm(t)):{},lu(e||!t||!t.__esModule?na(r,"default",{value:t,enumerable:!0}):r,t)),sm=t=>lu(na({},"__esModule",{value:!0}),t);var ju=nm((b_,qu)=>{"use strict";qu.exports=Worker});var bx={};jo(bx,{ATTN_IDLE:()=>dl,ATTN_LOOP_NONE:()=>cl,ATTN_NONE:()=>Ai,ATTN_NORM:()=>ul,ATTN_STATIC:()=>fl,AssetDependencyError:()=>fn,AssetDependencyTracker:()=>Es,AssetManager:()=>to,AssetPreviewGenerator:()=>Zo,AudioApi:()=>kn,AudioContextController:()=>ro,AudioOcclusion:()=>Ts,AudioRegistry:()=>ti,AudioRegistryError:()=>Ss,AudioSystem:()=>co,BSP_SURFACE_FRAGMENT_SOURCE:()=>Ql,BSP_SURFACE_VERTEX_SOURCE:()=>jl,BSP_VERTEX_LAYOUT:()=>Zl,BspLoader:()=>Rn,BspParseError:()=>q,BspSurfacePipeline:()=>po,Camera:()=>vo,ClientConnection:()=>qo,Command:()=>xi,CommandRegistry:()=>An,ConfigStringRegistry:()=>Pn,ConnectionState:()=>eu,Cvar:()=>Mi,CvarRegistry:()=>Tn,DemoAnalyzer:()=>gi,DemoCameraMode:()=>qc,DemoClipper:()=>$o,DemoEventType:()=>Yc,DemoPlaybackController:()=>Wt,DemoReader:()=>Qe,DemoRecorder:()=>js,DemoValidator:()=>Wo,DynamicLightManager:()=>mo,EngineHost:()=>Cn,EngineRuntime:()=>Ei,FileType:()=>jc,FixedTimestepLoop:()=>Xr,Framebuffer:()=>fo,IndexBuffer:()=>we,LruCache:()=>Zt,MAX_SOUND_CHANNELS:()=>Si,MD2_FRAGMENT_SHADER:()=>sc,MD2_VERTEX_SHADER:()=>ic,MD3_FRAGMENT_SHADER:()=>mc,MD3_VERTEX_SHADER:()=>hc,MapAnalyzer:()=>Yo,Md2Loader:()=>Fn,Md2MeshBuffers:()=>yo,Md2ParseError:()=>xe,Md2Pipeline:()=>bo,Md3Loader:()=>Bn,Md3ModelMesh:()=>_o,Md3ParseError:()=>We,Md3Pipeline:()=>wo,Md3SurfaceMesh:()=>ks,MessageWriter:()=>wn,MusicSystem:()=>uo,NetworkMessageParser:()=>Ve,PARTICLE_FRAGMENT_SHADER:()=>gc,PARTICLE_VERTEX_SHADER:()=>pc,PROTOCOL_VERSION_RERELEASE:()=>vr,PakArchive:()=>In,PakIndexStore:()=>eo,PakIngestionError:()=>$t,PakParseError:()=>fe,PakValidationError:()=>Yr,PakValidator:()=>ma,PakWriter:()=>da,ParticleRenderer:()=>Ao,ParticleSystem:()=>So,PlaybackState:()=>Go,RERELEASE_KNOWN_PAKS:()=>yl,ResourceLoadTracker:()=>fa,ResourceType:()=>gl,SKYBOX_FRAGMENT_SHADER:()=>rc,SKYBOX_VERTEX_SHADER:()=>tc,SOUND_FULLVOLUME:()=>En,SOUND_LOOP_ATTENUATE:()=>hl,ShaderProgram:()=>pe,SkyboxPipeline:()=>go,SoundChannel:()=>ot,SoundPrecache:()=>so,SoundRegistry:()=>io,SpriteLoader:()=>Dn,SpriteParseError:()=>Yt,SpriteRenderer:()=>Mo,StreamingPakArchive:()=>ua,Texture2D:()=>hr,TextureCache:()=>On,TextureCubeMap:()=>ri,TgaParseError:()=>Lt,U_ALPHA:()=>kr,U_ANGLE1:()=>Tr,U_ANGLE2:()=>Sr,U_ANGLE3:()=>Ar,U_EFFECTS16:()=>St,U_EFFECTS8:()=>vt,U_EVENT:()=>Er,U_FRAME16:()=>Pr,U_FRAME8:()=>Mr,U_INSTANCE_BITS:()=>Nr,U_LOOP_ATTENUATION_HIGH:()=>Hr,U_LOOP_VOLUME:()=>Ur,U_MODEL:()=>Cr,U_MODEL2:()=>Ir,U_MODEL3:()=>Rr,U_MODEL4:()=>Fr,U_OLDORIGIN:()=>Br,U_OLD_FRAME_HIGH:()=>Gr,U_ORIGIN1:()=>_r,U_ORIGIN2:()=>wr,U_ORIGIN3:()=>Lr,U_OWNER_HIGH:()=>Vr,U_REMOVE:()=>qs,U_RENDERFX16:()=>wt,U_RENDERFX8:()=>xt,U_SCALE:()=>zr,U_SKIN16:()=>At,U_SKIN8:()=>_t,U_SOLID:()=>Or,U_SOUND:()=>Dr,VertexArray:()=>Se,VertexBuffer:()=>ge,VirtualFileSystem:()=>ha,advanceAnimation:()=>Xu,applyEntityDelta:()=>Ko,applySurfaceState:()=>Nd,attenuationToDistanceMultiplier:()=>Ln,boxIntersectsFrustum:()=>Cs,buildBspGeometry:()=>Id,buildMd2Geometry:()=>ac,buildMd2VertexData:()=>oc,buildMd3SurfaceGeometry:()=>dc,buildMd3VertexData:()=>fc,calculateMaxAudibleDistance:()=>Zr,calculatePakChecksum:()=>Cu,captureRenderTarget:()=>Yh,computeFrameBlend:()=>Ku,computeSkyScroll:()=>Vd,createAnimationState:()=>$u,createAudioGraph:()=>no,createBspSurfaces:()=>Pd,createEmptyEntityState:()=>Gt,createEmptyProtocolPlayerState:()=>_n,createEngine:()=>yx,createEngineRuntime:()=>Eu,createFaceLightmap:()=>ga,createHeadlessRenderTarget:()=>Zh,createInitialChannels:()=>ao,createOcclusionResolver:()=>Ld,createProgramFromSources:()=>kd,createWebGLContext:()=>Td,createWebGPUContext:()=>Kh,decodeOgg:()=>Ja,deriveSurfaceRenderState:()=>ec,detectFileType:()=>Qc,extractFrustumPlanes:()=>Rd,filesToPakSources:()=>bl,findLeafForPoint:()=>ql,gatherVisibleFaces:()=>Od,groupMd2Animations:()=>Hu,ingestPakFiles:()=>Ru,ingestPaks:()=>pa,interpolateMd3Tag:()=>of,interpolateVec3:()=>Zu,isBinaryFile:()=>Hh,isTextFile:()=>Jc,parseBsp:()=>Li,parseEntLump:()=>Gh,parseMd2:()=>xl,parseMd3:()=>vl,parsePcx:()=>Pi,parseSprite:()=>_l,parseTga:()=>wl,parseWal:()=>ba,parseWalTexture:()=>_a,parseWav:()=>wa,pcxToRgba:()=>xa,pickChannel:()=>oo,preparePcxTexture:()=>va,queryCapabilities:()=>$h,removeViewTranslation:()=>Hd,resolveLightStyles:()=>Jl,serializeEntLump:()=>Wh,spawnBfgExplosion:()=>xf,spawnBlasterImpact:()=>bf,spawnBlood:()=>uf,spawnBulletImpact:()=>lf,spawnExplosion:()=>cf,spawnMuzzleFlash:()=>ff,spawnRailTrail:()=>gf,spawnSparks:()=>yf,spawnSplash:()=>mf,spawnSteam:()=>pf,spawnTeleportFlash:()=>df,spawnTrail:()=>hf,validateEntity:()=>Xh,walToRgba:()=>Sl,wireDropTarget:()=>Fu,wireFileInput:()=>Bu});var am=()=>typeof performance<"u"?performance.now():Date.now(),om=t=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,25)},Xr=class{constructor(e,r={}){this.callbacks=e;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let e=this.options.now(),r=this.lastTimeMs===void 0?0:e-this.lastTimeMs;this.lastTimeMs=e,this.advance(r,e),this.running&&this.options.schedule(this.tick)};let n=r.fixedDeltaMs??25,i=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:i,maxDeltaMs:r.maxDeltaMs??n*i,startTimeMs:r.startTimeMs,now:r.now??am,schedule:r.schedule??om}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(e){let r=(this.lastTimeMs??0)+e;this.lastTimeMs=r,this.advance(e,r)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,r){let n=Math.min(Math.max(e,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+n,this.options.fixedDeltaMs*this.options.maxSubSteps);let i=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&i<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:r}),this.accumulatorMs-=this.options.fixedDeltaMs,i+=1;let s=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:s,nowMs:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var xi=class{constructor(e,r,n){this.name=e,this.callback=r,this.description=n}execute(e){this.callback(e)}},An=class{constructor(){this.commands=new Map;this.history=[];this.historyLimit=64;this.autocompleteProviders=[]}register(e,r,n){let i=new xi(e,r,n);return this.commands.set(e,i),i}registerCommand(e,r){this.register(e,r)}registerAutocompleteProvider(e){this.autocompleteProviders.push(e)}get(e){return this.commands.get(e)}execute(e){let r=e.trim();if(r.length===0)return!1;(this.history.length===0||this.history[this.history.length-1]!==r)&&(this.history.push(r),this.history.length>this.historyLimit&&this.history.shift());let n=this.tokenize(e);if(n.length===0)return!1;let i=n[0],s=n.slice(1),a=this.get(i);return a?(a.execute(s),!0):(this.onConsoleOutput?.(`Unknown command "${i}"`),!1)}executeCommand(e){this.execute(e)}getHistory(){return[...this.history]}getSuggestions(e){let r=new Set;for(let n of this.commands.keys())n.startsWith(e)&&r.add(n);for(let n of this.autocompleteProviders){let i=n();for(let s of i)s.startsWith(e)&&r.add(s)}return Array.from(r).sort()}tokenize(e){let r=[],n="",i=!1;for(let s=0;s<e.length;s++){let a=e[s];a==='"'?i=!i:a===" "&&!i?n.length>0&&(r.push(n),n=""):n+=a}return n.length>0&&r.push(n),r}list(){return[...this.commands.values()].sort((e,r)=>e.name.localeCompare(r.name))}};var lm=Object.defineProperty,cm=(t,e)=>{for(var r in e)lm(t,r,{get:e[r],enumerable:!0})},cu={x:0,y:0,z:0};var wx=Math.PI/180;function uu(t,e){return{x:t.x-e.x,y:t.y-e.y,z:t.z-e.z}}function um(t,e){return{x:t.x*e,y:t.y*e,z:t.z*e}}function dm(t,e){return t.x*e.x+t.y*e.y+t.z*e.z}function fm(t){return dm(t,t)}function Jo(t){return Math.sqrt(fm(t))}function Mt(t){let e=Jo(t);return e===0?t:um(t,1/e)}var hm=Math.PI/180,mm=180/Math.PI,Mn=hm,el=mm;var tt=[[-.525731,0,.850651],[-.442863,.238856,.864188],[-.295242,0,.955423],[-.309017,.5,.809017],[-.16246,.262866,.951056],[0,0,1],[0,.850651,.525731],[-.147621,.716567,.681718],[.147621,.716567,.681718],[0,.525731,.850651],[.309017,.5,.809017],[.525731,0,.850651],[.295242,0,.955423],[.442863,.238856,.864188],[.16246,.262866,.951056],[-.681718,.147621,.716567],[-.809017,.309017,.5],[-.587785,.425325,.688191],[-.850651,.525731,0],[-.864188,.442863,.238856],[-.716567,.681718,.147621],[-.688191,.587785,.425325],[-.5,.809017,.309017],[-.238856,.864188,.442863],[-.425325,.688191,.587785],[-.716567,.681718,-.147621],[-.5,.809017,-.309017],[-.525731,.850651,0],[0,.850651,-.525731],[-.238856,.864188,-.442863],[0,.955423,-.295242],[-.262866,.951056,-.16246],[0,1,0],[0,.955423,.295242],[-.262866,.951056,.16246],[.238856,.864188,.442863],[.262866,.951056,.16246],[.5,.809017,.309017],[.238856,.864188,-.442863],[.262866,.951056,-.16246],[.5,.809017,-.309017],[.850651,.525731,0],[.716567,.681718,.147621],[.716567,.681718,-.147621],[.525731,.850651,0],[.425325,.688191,.587785],[.864188,.442863,.238856],[.688191,.587785,.425325],[.809017,.309017,.5],[.681718,.147621,.716567],[.587785,.425325,.688191],[.955423,.295242,0],[1,0,0],[.951056,.16246,.262866],[.850651,-.525731,0],[.955423,-.295242,0],[.864188,-.442863,.238856],[.951056,-.16246,.262866],[.809017,-.309017,.5],[.681718,-.147621,.716567],[.850651,0,.525731],[.864188,.442863,-.238856],[.809017,.309017,-.5],[.951056,.16246,-.262866],[.525731,0,-.850651],[.681718,.147621,-.716567],[.681718,-.147621,-.716567],[.850651,0,-.525731],[.809017,-.309017,-.5],[.864188,-.442863,-.238856],[.951056,-.16246,-.262866],[.147621,.716567,-.681718],[.309017,.5,-.809017],[.425325,.688191,-.587785],[.442863,.238856,-.864188],[.587785,.425325,-.688191],[.688191,.587785,-.425325],[-.147621,.716567,-.681718],[-.309017,.5,-.809017],[0,.525731,-.850651],[-.525731,0,-.850651],[-.442863,.238856,-.864188],[-.295242,0,-.955423],[-.16246,.262866,-.951056],[0,0,-1],[.295242,0,-.955423],[.16246,.262866,-.951056],[-.442863,-.238856,-.864188],[-.309017,-.5,-.809017],[-.16246,-.262866,-.951056],[0,-.850651,-.525731],[-.147621,-.716567,-.681718],[.147621,-.716567,-.681718],[0,-.525731,-.850651],[.309017,-.5,-.809017],[.442863,-.238856,-.864188],[.16246,-.262866,-.951056],[.238856,-.864188,-.442863],[.5,-.809017,-.309017],[.425325,-.688191,-.587785],[.716567,-.681718,-.147621],[.688191,-.587785,-.425325],[.587785,-.425325,-.688191],[0,-.955423,-.295242],[0,-1,0],[.262866,-.951056,-.16246],[0,-.850651,.525731],[0,-.955423,.295242],[.238856,-.864188,.442863],[.262866,-.951056,.16246],[.5,-.809017,.309017],[.716567,-.681718,.147621],[.525731,-.850651,0],[-.238856,-.864188,-.442863],[-.5,-.809017,-.309017],[-.262866,-.951056,-.16246],[-.850651,-.525731,0],[-.716567,-.681718,-.147621],[-.716567,-.681718,.147621],[-.525731,-.850651,0],[-.5,-.809017,.309017],[-.238856,-.864188,.442863],[-.262866,-.951056,.16246],[-.864188,-.442863,.238856],[-.809017,-.309017,.5],[-.688191,-.587785,.425325],[-.681718,-.147621,.716567],[-.442863,-.238856,.864188],[-.587785,-.425325,.688191],[-.309017,-.5,.809017],[-.147621,-.716567,.681718],[-.425325,-.688191,.587785],[-.16246,-.262866,.951056],[.442863,-.238856,.864188],[.16246,-.262866,.951056],[.309017,-.5,.809017],[.147621,-.716567,.681718],[0,-.525731,.850651],[.425325,-.688191,.587785],[.587785,-.425325,.688191],[.688191,-.587785,.425325],[-.955423,.295242,0],[-.951056,.16246,.262866],[-1,0,0],[-.850651,0,.525731],[-.955423,-.295242,0],[-.951056,-.16246,.262866],[-.864188,.442863,-.238856],[-.951056,.16246,-.262866],[-.809017,.309017,-.5],[-.864188,-.442863,-.238856],[-.951056,-.16246,-.262866],[-.809017,-.309017,-.5],[-.681718,.147621,-.716567],[-.681718,-.147621,-.716567],[-.850651,0,-.525731],[-.688191,.587785,-.425325],[-.587785,.425325,-.688191],[-.425325,.688191,-.587785],[-.425325,-.688191,-.587785],[-.587785,-.425325,-.688191],[-.688191,-.587785,-.425325]];function pm(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function du(t,e){let r=e.x,n=e.y,i=e.z;return{x:t[0]*r+t[4]*n+t[8]*i+t[12],y:t[1]*r+t[5]*n+t[9]*i+t[13],z:t[2]*r+t[6]*n+t[10]*i+t[14]}}function fu(t,e){let r=pm();return r[0]=e[0].x,r[1]=e[0].y,r[2]=e[0].z,r[4]=e[1].x,r[5]=e[1].y,r[6]=e[1].z,r[8]=e[2].x,r[9]=e[2].y,r[10]=e[2].z,r[12]=t.x,r[13]=t.y,r[14]=t.z,r}var at=1,Xt=2;var tl=8,rl=16,gm=32;var ym=16384;var ia=65536,hu=1<<17,bm=1<<18,xm=1<<19,vm=1<<20,_m=1<<21,wm=1<<22,Sm=1<<23,Sx=1<<24,sa=1<<25,Am=1<<26,Ax=1<<27,Mx=1<<28,Ex=1<<29,aa=1<<30,Lx=1<<31;var _i=0;var mu=4,pu=8,gu=16,yu=32,bu=64;var Tx=1<<25,Cx=1<<28,kx=1<<29,Px=1<<30,Ix=1<<31;var Rx=at|Xt,Fx=at|ia|Xt|sa|aa,Bx=at|ia|Xt,Dx=at|hu|Xt|sa|aa,Ox=gm|tl|rl,zx=at|rl|tl,Mm=at|sa|aa|Xt|Am,Nx=bm|xm|vm|_m|wm|Sm,Ux=at|tl|rl|sa|aa,Hx=at|ia|Xt,Vx=at|Xt,Gx=at|ia|Xt|hu,Wx=Mm|ym;var Xx=Number.MAX_SAFE_INTEGER-1;var oa=(t=>(t[t.None=0]="None",t[t.Archive=1]="Archive",t[t.UserInfo=2]="UserInfo",t[t.ServerInfo=4]="ServerInfo",t[t.Latch=8]="Latch",t[t.Cheat=16]="Cheat",t))(oa||{});var la=256;var nl=256,il=8192,ca=2048,sl=512,al=256,ol=la*2,ll=256,Qo=32,vi=96;var X=(t=>(t[t.Name=0]="Name",t[t.CdTrack=1]="CdTrack",t[t.Sky=2]="Sky",t[t.SkyAxis=3]="SkyAxis",t[t.SkyRotate=4]="SkyRotate",t[t.StatusBar=5]="StatusBar",t[t.HealthBarName=55]="HealthBarName",t[t.CONFIG_N64_PHYSICS=56]="CONFIG_N64_PHYSICS",t[t.CONFIG_CTF_TEAMS=57]="CONFIG_CTF_TEAMS",t[t.CONFIG_COOP_RESPAWN_STRING=58]="CONFIG_COOP_RESPAWN_STRING",t[t.Story=54]="Story",t[t.AirAccel=59]="AirAccel",t[t.MaxClients=60]="MaxClients",t[t.MapChecksum=61]="MapChecksum",t[t.Models=62]="Models",t[t.Sounds=62+il]="Sounds",t[t.Images=t.Sounds+ca]="Images",t[t.Lights=t.Images+sl]="Lights",t[t.ShadowLights=t.Lights+nl]="ShadowLights",t[t.Items=t.ShadowLights+ll]="Items",t[t.Players=t.Items+al]="Players",t[t.PlayerSkins=t.Players]="PlayerSkins",t[t.General=t.Players+la]="General",t[t.WheelWeapons=t.General+ol]="WheelWeapons",t[t.WheelAmmo=t.WheelWeapons+Qo]="WheelAmmo",t[t.WheelPowerups=t.WheelAmmo+Qo]="WheelPowerups",t[t.CdLoopCount=t.WheelPowerups+Qo]="CdLoopCount",t[t.GameStyle=t.CdLoopCount+1]="GameStyle",t[t.MaxConfigStrings=t.GameStyle+1]="MaxConfigStrings",t))(X||{}),xu=X.MaxConfigStrings;function vu(t){return t>=5&&t<59?vi*(59-t):t>=X.General&&t<X.WheelWeapons?vi*(X.MaxConfigStrings-t):vi}var Kx=X.Sounds,$x=X.Images,Zx=X.Lights,Yx=X.Items,qx=X.Players,jx=X.General,Em={};cm(Em,{addReplayFrame:()=>km,createReplaySession:()=>Cm,deserializeReplay:()=>Tm,serializeReplay:()=>Lm});function Lm(t){return JSON.stringify(t,null,2)}function Tm(t){let e=JSON.parse(t);if(!e.metadata||!Array.isArray(e.frames))throw new Error("Invalid replay format: missing metadata or frames");return e}function Cm(t,e){return{metadata:{map:t,date:new Date().toISOString(),version:"1.0",seed:e},frames:[]}}function km(t,e,r,n){t.frames.push({serverFrame:r,cmd:e,timestamp:Date.now()-n})}var M=(t=>(t[t.bad=0]="bad",t[t.muzzleflash=1]="muzzleflash",t[t.muzzleflash2=2]="muzzleflash2",t[t.temp_entity=3]="temp_entity",t[t.layout=4]="layout",t[t.inventory=5]="inventory",t[t.nop=6]="nop",t[t.disconnect=7]="disconnect",t[t.reconnect=8]="reconnect",t[t.sound=9]="sound",t[t.print=10]="print",t[t.stufftext=11]="stufftext",t[t.serverdata=12]="serverdata",t[t.configstring=13]="configstring",t[t.spawnbaseline=14]="spawnbaseline",t[t.centerprint=15]="centerprint",t[t.download=16]="download",t[t.playerinfo=17]="playerinfo",t[t.packetentities=18]="packetentities",t[t.deltapacketentities=19]="deltapacketentities",t[t.frame=20]="frame",t[t.splitclient=21]="splitclient",t[t.configblast=22]="configblast",t[t.spawnbaselineblast=23]="spawnbaselineblast",t[t.level_restart=24]="level_restart",t[t.damage=25]="damage",t[t.locprint=26]="locprint",t[t.fog=27]="fog",t[t.waitingforplayers=28]="waitingforplayers",t[t.bot_chat=29]="bot_chat",t[t.poi=30]="poi",t[t.help_path=31]="help_path",t[t.muzzleflash3=32]="muzzleflash3",t[t.achievement=33]="achievement",t))(M||{}),$r=(t=>(t[t.bad=0]="bad",t[t.nop=1]="nop",t[t.move=2]="move",t[t.userinfo=3]="userinfo",t[t.stringcmd=4]="stringcmd",t))($r||{}),E=(t=>(t[t.GUNSHOT=0]="GUNSHOT",t[t.BLOOD=1]="BLOOD",t[t.BLASTER=2]="BLASTER",t[t.RAILTRAIL=3]="RAILTRAIL",t[t.SHOTGUN=4]="SHOTGUN",t[t.EXPLOSION1=5]="EXPLOSION1",t[t.EXPLOSION2=6]="EXPLOSION2",t[t.ROCKET_EXPLOSION=7]="ROCKET_EXPLOSION",t[t.GRENADE_EXPLOSION=8]="GRENADE_EXPLOSION",t[t.SPARKS=9]="SPARKS",t[t.SPLASH=10]="SPLASH",t[t.BUBBLETRAIL=11]="BUBBLETRAIL",t[t.SCREEN_SPARKS=12]="SCREEN_SPARKS",t[t.SHIELD_SPARKS=13]="SHIELD_SPARKS",t[t.BULLET_SPARKS=14]="BULLET_SPARKS",t[t.LASER_SPARKS=15]="LASER_SPARKS",t[t.PARASITE_ATTACK=16]="PARASITE_ATTACK",t[t.ROCKET_EXPLOSION_WATER=17]="ROCKET_EXPLOSION_WATER",t[t.GRENADE_EXPLOSION_WATER=18]="GRENADE_EXPLOSION_WATER",t[t.MEDIC_CABLE_ATTACK=19]="MEDIC_CABLE_ATTACK",t[t.BFG_EXPLOSION=20]="BFG_EXPLOSION",t[t.BFG_BIGEXPLOSION=21]="BFG_BIGEXPLOSION",t[t.BOSSTPORT=22]="BOSSTPORT",t[t.BFG_LASER=23]="BFG_LASER",t[t.GRAPPLE_CABLE=24]="GRAPPLE_CABLE",t[t.WELDING_SPARKS=25]="WELDING_SPARKS",t[t.GREENBLOOD=26]="GREENBLOOD",t[t.BLUEHYPERBLASTER=27]="BLUEHYPERBLASTER",t[t.PLASMA_EXPLOSION=28]="PLASMA_EXPLOSION",t[t.TUNNEL_SPARKS=29]="TUNNEL_SPARKS",t[t.BLASTER2=30]="BLASTER2",t[t.RAILTRAIL2=31]="RAILTRAIL2",t[t.FLAME=32]="FLAME",t[t.LIGHTNING=33]="LIGHTNING",t[t.DEBUGTRAIL=34]="DEBUGTRAIL",t[t.PLAIN_EXPLOSION=35]="PLAIN_EXPLOSION",t[t.FLASHLIGHT=36]="FLASHLIGHT",t[t.FORCEWALL=37]="FORCEWALL",t[t.HEATBEAM=38]="HEATBEAM",t[t.MONSTER_HEATBEAM=39]="MONSTER_HEATBEAM",t[t.STEAM=40]="STEAM",t[t.BUBBLETRAIL2=41]="BUBBLETRAIL2",t[t.MOREBLOOD=42]="MOREBLOOD",t[t.HEATBEAM_SPARKS=43]="HEATBEAM_SPARKS",t[t.HEATBEAM_STEAM=44]="HEATBEAM_STEAM",t[t.CHAINFIST_SMOKE=45]="CHAINFIST_SMOKE",t[t.ELECTRIC_SPARKS=46]="ELECTRIC_SPARKS",t[t.TRACKER_EXPLOSION=47]="TRACKER_EXPLOSION",t[t.TELEPORT_EFFECT=48]="TELEPORT_EFFECT",t[t.DBALL_GOAL=49]="DBALL_GOAL",t[t.WIDOWBEAMOUT=50]="WIDOWBEAMOUT",t[t.NUKEBLAST=51]="NUKEBLAST",t[t.WIDOWSPLASH=52]="WIDOWSPLASH",t[t.EXPLOSION1_BIG=53]="EXPLOSION1_BIG",t[t.EXPLOSION1_NP=54]="EXPLOSION1_NP",t[t.FLECHETTE=55]="FLECHETTE",t[t.BLUEHYPERBLASTER_KEX=56]="BLUEHYPERBLASTER_KEX",t[t.BFG_ZAP=57]="BFG_ZAP",t[t.BERSERK_SLAM=58]="BERSERK_SLAM",t[t.GRAPPLE_CABLE_2=59]="GRAPPLE_CABLE_2",t[t.POWER_SPLASH=60]="POWER_SPLASH",t[t.LIGHTNING_BEAM=61]="LIGHTNING_BEAM",t[t.EXPLOSION1_NL=62]="EXPLOSION1_NL",t[t.EXPLOSION2_NL=63]="EXPLOSION2_NL",t))(E||{});var _u=64;var Pm=12,Im=9,Qx=Math.ceil(Pm*Im/16),Rm=23,Fm=2,Jx=Math.ceil(Rm*Fm/16);function wu(t,e){t.writeByte(e.msec),t.writeByte(e.buttons),t.writeAngle16(e.angles.x),t.writeAngle16(e.angles.y),t.writeAngle16(e.angles.z),t.writeShort(e.forwardmove),t.writeShort(e.sidemove),t.writeShort(e.upmove),t.writeByte(e.impulse),t.writeByte(0)}var Bm=[0,145,227,114,7,150,228,117,14,159,237,124,9,152,234,123,28,141,255,110,27,138,248,105,18,131,241,96,21,132,246,103,56,169,219,74,63,174,220,77,54,167,213,68,49,160,210,67,36,181,199,86,35,178,192,81,42,187,201,88,45,188,206,95,112,225,147,2,119,230,148,5,126,239,157,12,121,232,154,11,108,253,143,30,107,250,136,25,98,243,129,16,101,244,134,23,72,217,171,58,79,222,172,61,70,215,165,52,65,208,162,51,84,197,183,38,83,194,176,33,90,203,185,40,93,204,190,47,224,113,3,146,231,118,4,149,238,127,13,156,233,120,10,155,252,109,31,142,251,106,24,137,242,99,17,128,245,100,22,135,216,73,59,170,223,78,60,173,214,71,53,164,209,64,50,163,196,85,39,182,195,82,32,177,202,91,41,184,205,92,46,191,144,1,115,226,151,6,116,229,158,15,125,236,153,8,122,235,140,29,111,254,139,26,104,249,130,19,97,240,133,20,102,247,168,57,75,218,175,62,76,221,166,55,69,212,161,48,66,211,180,37,86,199,179,34,80,193,186,43,89,200,189,44,94,207];function Su(t){let e=0;for(let r=0;r<t.length;r++)e=Bm[(e^t[r])&255];return e}var ev=1<<17,tv=1<<18,rv=1<<19,nv=1<<20,iv=1<<21,sv=1<<22,av=1<<23,ov=1<<24,lv=1<<25,cv=1<<26,uv=1<<27,dv=1<<28,fv=1<<29,hv=1<<30;var Kt=class{constructor(t){t instanceof Uint8Array?this.view=new DataView(t.buffer,t.byteOffset,t.byteLength):this.view=new DataView(t),this.offset=0,this.length=this.view.byteLength}getPosition(){return this.offset}getReadPosition(){return this.offset}getLength(){return this.length}getRemaining(){return this.length-this.offset}seek(t){if(t<0||t>this.length)throw new Error(`Seek out of bounds: ${t} (length: ${this.length})`);this.offset=t}setReadPosition(t){this.seek(t)}hasMore(){return this.offset<this.length}hasBytes(t){return this.offset+t<=this.length}readChar(){let t=this.view.getInt8(this.offset);return this.offset+=1,t}readByte(){let t=this.view.getUint8(this.offset);return this.offset+=1,t}readShort(){let t=this.view.getInt16(this.offset,!0);return this.offset+=2,t}readUShort(){let t=this.view.getUint16(this.offset,!0);return this.offset+=2,t}readLong(){let t=this.view.getInt32(this.offset,!0);return this.offset+=4,t}readULong(){let t=this.view.getUint32(this.offset,!0);return this.offset+=4,t}readFloat(){let t=this.view.getFloat32(this.offset,!0);return this.offset+=4,t}readString(){let t="";for(;this.offset<this.length;){let e=this.readChar();if(e===-1||e===0)break;t+=String.fromCharCode(e)}return t}readStringLine(){let t="";for(;this.offset<this.length;){let e=this.readChar();if(e===-1||e===0||e===10)break;t+=String.fromCharCode(e)}return t}readCoord(){return this.readShort()*(1/8)}readAngle(){return this.readChar()*(360/256)}readAngle16(){return this.readShort()*360/65536}readData(t){if(this.offset+t>this.length)throw new Error(`Read out of bounds: ${this.offset+t} (length: ${this.length})`);let e=new Uint8Array(this.view.buffer,this.view.byteOffset+this.offset,t);return this.offset+=t,new Uint8Array(e)}readPos(t){t.x=this.readCoord(),t.y=this.readCoord(),t.z=this.readCoord()}readDir(t){let e=this.readByte();if(e>=162){t.x=0,t.y=0,t.z=0;return}let r=tt[e];t.x=r[0],t.y=r[1],t.z=r[2]}},Et=class{constructor(t=1400){typeof t=="number"?(this.buffer=new Uint8Array(t),this.fixed=!1):(this.buffer=t,this.fixed=!0),this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength),this.offset=0}ensureSpace(t){if(this.offset+t>this.buffer.byteLength){if(this.fixed)throw new Error(`Buffer overflow: capacity ${this.buffer.byteLength}, needed ${this.offset+t}`);let e=Math.max(this.buffer.byteLength*2,this.offset+t),r=new Uint8Array(e);r.set(this.buffer),this.buffer=r,this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength)}}writeByte(t){this.ensureSpace(1),this.view.setUint8(this.offset,t),this.offset+=1}writeBytes(t){this.ensureSpace(t.byteLength),this.buffer.set(t,this.offset),this.offset+=t.byteLength}writeChar(t){this.ensureSpace(1),this.view.setInt8(this.offset,t),this.offset+=1}writeShort(t){this.ensureSpace(2),this.view.setInt16(this.offset,t,!0),this.offset+=2}writeLong(t){this.ensureSpace(4),this.view.setInt32(this.offset,t,!0),this.offset+=4}writeFloat(t){this.ensureSpace(4),this.view.setFloat32(this.offset,t,!0),this.offset+=4}writeString(t){let e=t.length;this.ensureSpace(e+1);for(let r=0;r<e;r++)this.view.setUint8(this.offset+r,t.charCodeAt(r));this.view.setUint8(this.offset+e,0),this.offset+=e+1}writeCoord(t){this.writeShort(Math.trunc(t*8))}writeAngle(t){this.writeByte(Math.trunc(t*256/360)&255)}writeAngle16(t){this.writeShort(Math.trunc(t*65536/360)&65535)}writePos(t){this.writeCoord(t.x),this.writeCoord(t.y),this.writeCoord(t.z)}writeDir(t){let e=-1,r=0;if(t.x===0&&t.y===0&&t.z===0){this.writeByte(0);return}for(let n=0;n<tt.length;n++){let i=tt[n],s=t.x*i[0]+t.y*i[1]+t.z*i[2];s>e&&(e=s,r=n)}this.writeByte(r)}getData(){return this.buffer.slice(0,this.offset)}getBuffer(){return this.buffer}getOffset(){return this.offset}reset(){this.offset=0}},wi=class{constructor(t=1024){this.buffer=new Uint8Array(t),this.view=new DataView(this.buffer.buffer),this.offset=0}ensureCapacity(t){if(this.offset+t>this.buffer.length){let e=Math.max(this.buffer.length*2,this.offset+t),r=new Uint8Array(e);r.set(this.buffer),this.buffer=r,this.view=new DataView(this.buffer.buffer)}}getData(){return this.buffer.slice(0,this.offset)}writeByte(t){this.ensureCapacity(1),this.view.setUint8(this.offset,t),this.offset+=1}writeChar(t){this.ensureCapacity(1),this.view.setInt8(this.offset,t),this.offset+=1}writeShort(t){this.ensureCapacity(2),this.view.setInt16(this.offset,t,!0),this.offset+=2}writeUShort(t){this.ensureCapacity(2),this.view.setUint16(this.offset,t,!0),this.offset+=2}writeLong(t){this.ensureCapacity(4),this.view.setInt32(this.offset,t,!0),this.offset+=4}writeFloat(t){this.ensureCapacity(4),this.view.setFloat32(this.offset,t,!0),this.offset+=4}writeString(t){let e=t.length+1;this.ensureCapacity(e);for(let r=0;r<t.length;r++)this.view.setUint8(this.offset+r,t.charCodeAt(r));this.view.setUint8(this.offset+t.length,0),this.offset+=e}writeData(t){this.ensureCapacity(t.length),this.buffer.set(t,this.offset),this.offset+=t.length}writeCoord(t){this.writeShort(Math.round(t*8))}writeAngle(t){this.writeByte(Math.round(t*256/360)&255)}writeAngle16(t){this.writeShort(Math.round(t*65536/360))}writeDir(t,e,r){let n=0,i=-999999,s=Math.sqrt(t*t+e*e+r*r);if(s>0){t/=s,e/=s,r/=s;for(let a=0;a<162;a++){let o=t*tt[a][0]+e*tt[a][1]+r*tt[a][2];o>i&&(i=o,n=a)}}this.writeByte(n)}},Kr=class be{constructor(){this.qport=0,this.incomingSequence=0,this.outgoingSequence=0,this.incomingAcknowledged=0,this.incomingReliableAcknowledged=!1,this.incomingReliableSequence=0,this.outgoingReliableSequence=0,this.reliableLength=0,this.fragmentSendOffset=0,this.fragmentBuffer=null,this.fragmentLength=0,this.fragmentReceived=0,this.lastReceived=0,this.lastSent=0,this.remoteAddress=null,this.reliableMessage=new Et(be.MAX_RELIABLE_BUFFER);let e=Date.now();this.lastReceived=e,this.lastSent=e,this.qport=Math.floor(Math.random()*65536)}setup(e,r=null){this.qport=e,this.remoteAddress=r,this.reset()}reset(){this.incomingSequence=0,this.outgoingSequence=0,this.incomingAcknowledged=0,this.incomingReliableAcknowledged=!1,this.incomingReliableSequence=0,this.outgoingReliableSequence=0,this.reliableLength=0,this.reliableMessage.reset(),this.fragmentSendOffset=0,this.fragmentBuffer=null,this.fragmentLength=0,this.fragmentReceived=0,this.lastReceived=Date.now(),this.lastSent=Date.now()}transmit(e){this.outgoingSequence++,this.lastSent=Date.now();let r=0,n=!1,i=0;this.reliableLength>0&&(this.reliableLength>be.FRAGMENT_SIZE?(n=!0,this.fragmentSendOffset>=this.reliableLength&&(this.fragmentSendOffset=0),r=this.reliableLength-this.fragmentSendOffset,r>be.FRAGMENT_SIZE&&(r=be.FRAGMENT_SIZE),i=this.fragmentSendOffset,this.fragmentSendOffset+=r):r=this.reliableLength);let s=be.PACKET_HEADER,a=r>0?2+(n?8:0):0,o=e?e.length:0;s+a+r+o>be.MAX_MSGLEN&&(o=be.MAX_MSGLEN-s-a-r,o<0&&(o=0));let u=new ArrayBuffer(s+a+r+o),l=new DataView(u),c=new Uint8Array(u),f=this.outgoingSequence;r>0&&(f|=2147483648,(this.outgoingReliableSequence&1)!==0&&(f|=1073741824)),l.setUint32(0,f,!0);let d=this.incomingSequence;(this.incomingReliableSequence&1)!==0&&(d|=2147483648),l.setUint32(4,d,!0),l.setUint16(8,this.qport,!0);let h=s;if(r>0){let m=r;n&&(m|=32768),l.setUint16(h,m,!0),h+=2,n&&(l.setUint32(h,i,!0),h+=4,l.setUint32(h,this.reliableLength,!0),h+=4);let p=this.reliableMessage.getBuffer().subarray(i,i+r);c.set(p,h),h+=r}if(e&&o>0){let m=e.slice(0,o);c.set(m,h)}return c}process(e){if(e.length<be.PACKET_HEADER)return null;this.lastReceived=Date.now();let r=new DataView(e.buffer,e.byteOffset,e.byteLength),n=r.getUint32(0,!0),i=r.getUint32(4,!0),s=r.getUint16(8,!0);if(this.qport!==s)return null;let a=n&1073741823;if((a-this.incomingSequence|0)<=0)return null;this.incomingSequence=a;let o=i&2147483647,u=(i&2147483648)!==0;if(o>this.incomingAcknowledged&&(this.incomingAcknowledged=o),this.reliableLength>0){let m=u?1:0,g=this.outgoingReliableSequence&1;m!==g&&(this.reliableLength=0,this.reliableMessage.reset(),this.outgoingReliableSequence^=1,this.fragmentSendOffset=0)}let l=(n&2147483648)!==0,c=(n&1073741824)!==0?1:0,f=be.PACKET_HEADER,d=null;if(l){if(f+2>e.byteLength)return null;let m=r.getUint16(f,!0);f+=2;let g=(m&32768)!==0;m&=32767;let p=this.incomingReliableSequence&1;if(c===p)if(g){if(f+8>e.byteLength)return null;let y=r.getUint32(f,!0);f+=4;let v=r.getUint32(f,!0);if(f+=4,v>be.MAX_RELIABLE_BUFFER)return console.warn(`NetChan: received invalid fragment total ${v} > ${be.MAX_RELIABLE_BUFFER}`),null;if((!this.fragmentBuffer||this.fragmentBuffer.length!==v)&&(this.fragmentBuffer=new Uint8Array(v),this.fragmentLength=v,this.fragmentReceived=0),f+m>e.byteLength)return null;let x=e.subarray(f,f+m);y===this.fragmentReceived&&y+m<=v&&(this.fragmentBuffer.set(x,y),this.fragmentReceived+=m,this.fragmentReceived>=v&&(d=this.fragmentBuffer,this.incomingReliableSequence++,this.fragmentBuffer=null,this.fragmentLength=0,this.fragmentReceived=0))}else{if(this.incomingReliableSequence++,f+m>e.byteLength)return null;d=e.slice(f,f+m)}f+=m}let h=e.slice(f);if(d&&d.length>0){let m=d.length+h.length,g=new Uint8Array(m);return g.set(d,0),g.set(h,d.length),g}return h||new Uint8Array(0)}canSendReliable(){return this.reliableLength===0}writeReliableByte(e){if(this.reliableLength+1>be.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeByte(e),this.reliableLength++}writeReliableShort(e){if(this.reliableLength+2>be.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeShort(e),this.reliableLength+=2}writeReliableLong(e){if(this.reliableLength+4>be.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeLong(e),this.reliableLength+=4}writeReliableString(e){let r=e.length+1;if(this.reliableLength+r>be.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeString(e),this.reliableLength+=r}getReliableData(){return this.reliableLength===0?new Uint8Array(0):this.reliableMessage.getBuffer().subarray(0,this.reliableLength)}needsKeepalive(e){return e-this.lastSent>1e3}isTimedOut(e,r=3e4){return e-this.lastReceived>r}};Kr.MAX_MSGLEN=1400;Kr.FRAGMENT_SIZE=1024;Kr.PACKET_HEADER=10;Kr.HEADER_OVERHEAD=Kr.PACKET_HEADER+2;Kr.MAX_RELIABLE_BUFFER=262144;var Au=Kr;var Mu=(t=>(t[t.Bullets=0]="Bullets",t[t.Shells=1]="Shells",t[t.Rockets=2]="Rockets",t[t.Grenades=3]="Grenades",t[t.Cells=4]="Cells",t[t.Slugs=5]="Slugs",t[t.MagSlugs=6]="MagSlugs",t[t.Trap=7]="Trap",t[t.Flechettes=8]="Flechettes",t[t.Tesla=9]="Tesla",t[t.Disruptor=10]="Disruptor",t[t.Prox=11]="Prox",t[t.Nuke=12]="Nuke",t[t.Rounds=13]="Rounds",t))(Mu||{}),mv=Object.keys(Mu).length/2;var Si=32,ot=(t=>(t[t.Auto=0]="Auto",t[t.Weapon=1]="Weapon",t[t.Voice=2]="Voice",t[t.Item=3]="Item",t[t.Body=4]="Body",t[t.Aux=5]="Aux",t[t.Footstep=6]="Footstep",t[t.Aux3=7]="Aux3",t[t.NoPhsAdd=8]="NoPhsAdd",t[t.Reliable=16]="Reliable",t[t.ForcePos=32]="ForcePos",t))(ot||{}),cl=-1,Ai=0,ul=1,dl=2,fl=3,En=80,hl=.003;function Ln(t){return t*.001}function Zr(t){let e=Ln(t);return e<=0?Number.POSITIVE_INFINITY:En+1/e}var Mi=class{constructor({name:e,defaultValue:r,description:n,flags:i=oa.None,onChange:s}){this.modifiedCount=0;this.name=e,this.defaultValue=r,this.description=n,this.flags=i,this._value=r,this.onChange=s}get string(){return this._value}getString(){return this.string}get number(){return Number(this._value)}getFloat(){return this.number}get integer(){return Math.trunc(this.number)}getInt(){return this.integer}get boolean(){return!!this.integer}getBoolean(){return this.boolean}set(e){if(this.flags&oa.Latch){if(e===this._value){this.latched=void 0;return}if(this.latched===e)return;this.latched!==e&&(this.latched=e);return}this.apply(e)}reset(){this.latched=void 0,this.apply(this.defaultValue)}applyLatched(){if(this.latched===void 0)return!1;let e=this.latched;return this.latched=void 0,e===this._value?!1:(this.apply(e),!0)}apply(e){if(this._value===e)return;let r=this._value;this._value=e,this.modifiedCount+=1,this.onChange?.(this,r)}},Tn=class{constructor(){this.cvars=new Map}register(e){let r=this.cvars.get(e.name);if(r)return r;let n=e.onChange,i=(a,o)=>{n?.(a,o),this.onCvarChange?.(a.name,a.string)},s=new Mi({...e,onChange:i});return this.cvars.set(e.name,s),s}get(e){return this.cvars.get(e)}getCvar(e){return this.get(e)}setValue(e,r){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(r),n}setCvar(e,r){this.setValue(e,r)}resetAll(){for(let e of this.cvars.values())e.reset()}applyLatched(){let e=!1;for(let r of this.cvars.values())e=r.applyLatched()||e;return e}list(){return[...this.cvars.values()].sort((e,r)=>e.name.localeCompare(r.name))}listCvars(){return this.list().map(e=>({name:e.name,value:e.string,defaultValue:e.defaultValue,flags:e.flags,description:e.description}))}};var Cn=class{constructor(e,r,n={}){this.game=e;this.client=r;this.started=!1;this.paused_=!1;this.commands=new An;this.cvars=new Tn;this.stepSimulation=e=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(e,this.latestCommand)};this.renderClient=e=>{this.client&&(this.latestCommand=this.client.render({...e,previous:this.previousFrame,latest:this.latestFrame}))};let i=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??i,this.loop=new Xr({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs}),this.commands.registerAutocompleteProvider(()=>this.cvars.list().map(s=>s.name))}start(){if(!this.started){try{this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame)}catch(e){throw this.game.shutdown(),this.client?.shutdown(),e}this.started=!0,this.paused_=!1,this.loop.start()}}stop(){this.started&&(this.loop.stop(),this.client?.shutdown(),this.game.shutdown(),this.previousFrame=void 0,this.latestFrame=void 0,this.started=!1,this.paused_=!1)}setPaused(e){this.paused_=e,e?this.loop.stop():this.started&&this.loop.start()}get paused(){return this.paused_}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};var kn=class{constructor(e){this.registry=e.registry,this.system=e.system,this.music=e.music,this.client=e.client}soundindex(e){return this.registry.registerName(e)}sound(e,r,n,i,s,a){this.system.play({entity:e,channel:r,soundIndex:n,volume:i,attenuation:s,timeOffsetMs:a}),this.triggerSubtitle(n)}positioned_sound(e,r,n,i){this.system.positionedSound(e,r,n,i),this.triggerSubtitle(r)}loop_sound(e,r,n,i,s){let a=this.system.play({entity:e,channel:r,soundIndex:n,volume:i,attenuation:s,looping:!0});return this.triggerSubtitle(n),a}stop_entity_sounds(e){this.system.stopEntitySounds(e)}setPlaybackRate(e){this.system.setPlaybackRate(e)}set_listener(e){this.system.setListener(e)}play_music(e,r=!0){return this.music?this.music.play(e,{loop:r}):Promise.resolve()}play_track(e,r=!0){return this.music?this.music.playTrack(e):Promise.resolve()}pause_music(){this.music?.pause()}resume_music(){return this.music?.resume()??Promise.resolve()}stop_music(){this.music?.stop()}set_music_volume(e){this.music?.setVolume(e)}play_ambient(e,r,n){this.system.ambientSound(e,r,n),this.triggerSubtitle(r)}play_channel(e){this.system.play({...e}),this.triggerSubtitle(e.soundIndex)}triggerSubtitle(e){if(!this.client)return;let r=this.registry.getName(e);if(!r)return;let n=r.match(/\[(.*?)\]/);n&&this.client.showSubtitle(n[1],r)}};var Ei=class{constructor(e,r){this.engine=e;this.host=r;this.started=!1}start(){this.started||(this.engine.init(),this.host.start(),this.started=!0)}stop(){this.started&&(this.host.stop(),this.engine.shutdown(),this.started=!1)}pump(e){this.host.pump(e)}getLatestFrame(){return this.host.getLatestFrame()}isRunning(){return this.started&&this.host.isRunning()}};function Eu(t,e,r,n,i){let s=new kn({...n,client:r}),a=new Cn(e,r,i);return{runtime:new Ei(t,a),audio:s}}function Dm(t){if(t<0||t>=X.MaxConfigStrings)throw new RangeError(`Configstring index ${t} is out of range (0-${X.MaxConfigStrings-1})`)}function Lu(t,e){let r=vu(t);if(e.length>r)throw new RangeError(`Configstring ${t} exceeds maximum length (${e.length} > ${r}); limit is ${vi} chars per slot`)}var Pn=class{constructor(){this.values=new Map;this.modelCursor=X.Models;this.soundCursor=X.Sounds;this.imageCursor=X.Images;this.lightCursor=X.Lights;this.shadowLightCursor=X.ShadowLights;this.itemCursor=X.Items;this.playerSkinCursor=X.PlayerSkins;this.generalCursor=X.General}set(e,r){return Dm(e),Lu(e,r),this.values.set(e,r),e}get(e){return this.values.get(e)}getName(e){return this.get(e)}getAll(){let e=new Array(xu).fill("");for(let[r,n]of this.values.entries())e[r]=n;return e}modelIndex(e){return this.register(e,X.Models,il,"modelCursor")}soundIndex(e){return this.register(e,X.Sounds,ca,"soundCursor")}findSoundIndex(e){for(let r=X.Sounds;r<X.Sounds+ca;r+=1)if(this.values.get(r)===e)return r}imageIndex(e){return this.register(e,X.Images,sl,"imageCursor")}lightIndex(e){return this.register(e,X.Lights,nl,"lightCursor")}shadowLightIndex(e){return this.register(e,X.ShadowLights,ll,"shadowLightCursor")}itemIndex(e){return this.register(e,X.Items,al,"itemCursor")}playerSkinIndex(e){return this.register(e,X.PlayerSkins,la,"playerSkinCursor")}generalIndex(e){return this.register(e,X.General,ol,"generalCursor")}register(e,r,n,i){for(let o=r;o<r+n;o+=1)if(this.values.get(o)===e)return o;let s=this[i],a=r+n;if(s>=a)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return Lu(s,e),this.values.set(s,e),this[i]=s+1,s}};var Om="PACK";function zm(t,e,r){let n=[];for(let i=0;i<r;i+=1){let s=t.getUint8(e+i);if(s===0)break;n.push(s)}return String.fromCharCode(...n)}function ae(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function Nm(){let t=new Uint32Array(256);for(let e=0;e<256;e+=1){let r=e;for(let n=0;n<8;n+=1)r=(r&1)!==0?3988292384^r>>>1:r>>>1;t[e]=r>>>0}return t}var Um=Nm();function Tu(t){let e=4294967295;for(let r=0;r<t.length;r+=1){let n=t[r];e=Um[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var fe=class extends Error{},In=class t{constructor(e,r,n,i){this.name=e;this.buffer=r;this.entries=new Map(n.map(s=>[s.name,s])),this.checksum=i,this.size=r.byteLength}static fromArrayBuffer(e,r){let n=new DataView(r);if(r.byteLength<12)throw new fe("PAK buffer too small to contain header");let i=String.fromCharCode(n.getUint8(0),n.getUint8(1),n.getUint8(2),n.getUint8(3));if(i!==Om)throw new fe(`Invalid PAK header magic: ${i}`);let s=n.getInt32(4,!0),a=n.getInt32(8,!0);if(s<12)throw new fe(`Invalid directory offset: ${s}`);if(a<0||a%64!==0)throw new fe(`Invalid directory length: ${a}`);if(s+a>r.byteLength)throw new fe("Directory exceeds buffer length");let u=a/64,l=[],c=new Map;for(let f=0;f<u;f+=1){let d=s+f*64,h=zm(n,d,56),m=ae(h),g=n.getInt32(d+56,!0),p=n.getInt32(d+60,!0);if(g<0||p<0||g+p>r.byteLength)throw new fe(`Invalid entry bounds for ${h||"<unnamed>"} (offset=${g}, length=${p})`);if(!m)throw new fe(`Entry ${f} has an empty name`);let y={name:m,offset:g,length:p};c.set(m,y)}return l.push(...c.values()),new t(e,r,l,Tu(new Uint8Array(r)))}getEntry(e){return this.entries.get(ae(e))}listEntries(){return Array.from(this.entries.values())}list(){return Array.from(this.entries.keys())}readFile(e){let r=this.getEntry(e);if(!r)throw new fe(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,r.offset,r.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function Cu(t){return Tu(new Uint8Array(t))}var Hm="PACK",ku=12,ml=64;function Pu(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}var ua=class{constructor(e){this.source=e;this.entries=null}async readDirectory(){if(this.entries)return Array.from(this.entries.values());let e=await this.readChunk(0,ku),r=new DataView(e),n=String.fromCharCode(r.getUint8(0),r.getUint8(1),r.getUint8(2),r.getUint8(3));if(n!==Hm)throw new fe(`Invalid PAK header magic: ${n}`);let i=r.getInt32(4,!0),s=r.getInt32(8,!0);if(i<ku)throw new fe(`Invalid directory offset: ${i}`);if(s<0||s%ml!==0)throw new fe(`Invalid directory length: ${s}`);let a=await this.readChunk(i,s),o=new DataView(a),u=s/ml,l=new Map;for(let c=0;c<u;c++){let f=c*ml,d=this.readCString(o,f,56),h=Pu(d),m=o.getInt32(f+56,!0),g=o.getInt32(f+60,!0);m<0||g<0||m+g>this.source.size,h&&l.set(h,{name:h,offset:m,length:g})}return this.entries=l,Array.from(l.values())}async readFile(e){let r=await this.getEntry(e);if(!r)throw new fe(`File not found in PAK: ${e}`);return this.source.slice(r.offset,r.offset+r.length).stream()}async getFileBlob(e){let r=await this.getEntry(e);if(!r)throw new fe(`File not found in PAK: ${e}`);return this.source.slice(r.offset,r.offset+r.length)}async getEntry(e){return this.entries||await this.readDirectory(),this.entries.get(Pu(e))}async readChunk(e,r){let n=this.source.slice(e,e+r);return"arrayBuffer"in n?await n.arrayBuffer():new Response(n).arrayBuffer()}readCString(e,r,n){let i=[];for(let s=0;s<n;s+=1){let a=e.getUint8(r+s);if(a===0)break;i.push(a)}return String.fromCharCode(...i)}};var pl=12,Iu=64,da=class t{constructor(){this.entries=new Map}addFile(e,r){let n=ae(e);if(n.length>56)throw new Error(`Path too long: '${n}' (max 56 chars)`);this.entries.set(n,r)}removeFile(e){return this.entries.delete(ae(e))}build(){let e=0;for(let d of this.entries.values())e+=d.byteLength;let r=this.entries.size*Iu,n=pl+e+r,i=new Uint8Array(n),s=new DataView(i.buffer);s.setUint8(0,80),s.setUint8(1,65),s.setUint8(2,67),s.setUint8(3,75);let a=pl+e;s.setInt32(4,a,!0),s.setInt32(8,r,!0);let o=pl,u=new Map,l=Array.from(this.entries.keys()).sort();for(let d of l){let h=this.entries.get(d);u.set(d,o),i.set(h,o),o+=h.byteLength}let c=a,f=new TextEncoder;for(let d of l){let h=this.entries.get(d),m=f.encode(d);if(m.length>56)throw new Error(`Path too long after encoding: ${d}`);for(let g=0;g<56;g++)g<m.length?s.setUint8(c+g,m[g]):s.setUint8(c+g,0);s.setInt32(c+56,u.get(d),!0),s.setInt32(c+60,h.byteLength,!0),c+=Iu}return i}static buildFromEntries(e){let r=new t;for(let[n,i]of e)r.addFile(n,i);return r.build()}};var gl=(a=>(a.Texture="texture",a.Sound="sound",a.Model="model",a.Map="map",a.Sprite="sprite",a.ConfigString="configString",a))(gl||{}),fa=class{constructor(){this.tracking=!1;this.entries=[];this.currentFrame=0;this.currentTime=0}startTracking(){this.tracking=!0,this.entries=[]}stopTracking(){this.tracking=!1;let e={byFrame:new Map,byTime:new Map,uniqueResources:new Map};for(let r of this.entries){e.byFrame.has(r.frame)||e.byFrame.set(r.frame,[]),e.byFrame.get(r.frame).push(r),e.byTime.has(r.timestamp)||e.byTime.set(r.timestamp,[]),e.byTime.get(r.timestamp).push(r);let n=`${r.type}:${r.path}`;e.uniqueResources.has(n)||e.uniqueResources.set(n,r)}return e}recordLoad(e,r,n,i){this.tracking&&this.entries.push({type:e,path:r,timestamp:this.currentTime,frame:this.currentFrame,size:n,pakSource:i})}setCurrentFrame(e){this.currentFrame=e}setCurrentTime(e){this.currentTime=e}};var ha=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(r=>this.mountPak(r))}mountPak(e,r=0){let n=this.mounts.findIndex(i=>i.pak===e);n!==-1&&this.mounts.splice(n,1),this.mounts.push({pak:e,priority:r}),this.mounts.sort((i,s)=>s.priority-i.priority);for(let i of e.listEntries()){let s=ae(i.name),a={archive:e,entry:i,priority:r};this.files.has(s)||this.files.set(s,[]);let o=this.files.get(s),u=o.findIndex(l=>l.archive===e);u!==-1&&o.splice(u,1),o.unshift(a),o.sort((l,c)=>c.priority-l.priority)}return e}setPriority(e,r){this.mountPak(e,r)}getPaks(){return[...this.mounts].sort((e,r)=>e.priority-r.priority)}get mountedPaks(){return this.mounts.map(e=>e.pak)}hasFile(e){return this.files.has(ae(e))}getSource(e){let r=this.files.get(ae(e));if(!(!r||r.length===0))return r[0]}stat(e){let r=this.getSource(e);if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}getFileMetadata(e){let r=this.getSource(e);if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name,offset:r.entry.offset}}async readFile(e){let r=this.getSource(e);if(!r)throw new Error(`File not found in VFS: ${e}`);return r.archive.readFile(e)}async readBinaryFile(e){return this.readFile(e)}streamFile(e,r=1024*1024){let n=this.getSource(e);if(!n)throw new Error(`File not found in VFS: ${e}`);let{archive:i}=n,s=i.readFile(e),a=0,o=s.length;return new ReadableStream({pull(u){if(a>=o){u.close();return}let l=Math.min(a+r,o),c=s.slice(a,l);a=l,u.enqueue(c)}})}async readTextFile(e){let r=await this.readFile(e);return new TextDecoder("utf-8").decode(r)}list(e=""){let r=ae(e).replace(/\/+$|^\//g,""),n=[],i=new Set,s=r?`${r}/`:"";for(let[a,o]of this.files){let u=o[0];if(r&&!u.entry.name.startsWith(s))continue;let l=r?u.entry.name.slice(s.length):u.entry.name,c=l.indexOf("/");c===-1?n.push({path:u.entry.name,size:u.entry.length,sourcePak:u.archive.name}):i.add(l.slice(0,c))}return n.sort((a,o)=>a.path.localeCompare(o.path)),{files:n,directories:[...i].sort()}}async listDirectory(e){return this.list(e).files}findByExtension(e){if(e instanceof RegExp)return this.searchFiles(e);if(Array.isArray(e))return this.listByExtension(e);let r=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let[i,s]of this.files){let a=s[0];a.entry.name.toLowerCase().endsWith(r)&&n.push({path:a.entry.name,size:a.entry.length,sourcePak:a.archive.name})}return n.sort((i,s)=>i.path.localeCompare(s.path))}listByExtension(e){let r=new Set(e.map(i=>i.startsWith(".")?i.toLowerCase():`.${i.toLowerCase()}`)),n=[];for(let[i,s]of this.files){let a=s[0],o=a.entry.name.toLowerCase();for(let u of r)if(o.endsWith(u)){n.push({path:a.entry.name,size:a.entry.length,sourcePak:a.archive.name});break}}return n.sort((i,s)=>i.path.localeCompare(s.path))}searchFiles(e){let r=[];for(let[n,i]of this.files){let s=i[0];e.test(s.entry.name)&&r.push({path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name})}return r.sort((n,i)=>n.path.localeCompare(i.path))}getPakInfo(){return this.mounts.map(e=>({filename:e.pak.name,entryCount:e.pak.listEntries().length,totalSize:e.pak.size,priority:e.priority}))}getDirectoryTree(){let e={name:"",path:"",files:[],directories:[]},r=new Map;r.set("",e);let n=Array.from(this.files.values()).map(i=>{let s=i[0];return{path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name}}).sort((i,s)=>i.path.localeCompare(s.path));for(let i of n){let s=i.path.split("/"),a=s.pop(),o="",u=e;for(let l of s){let c=o;o=o?`${o}/${l}`:l;let f=r.get(o);f||(f={name:l,path:o,files:[],directories:[]},u.directories.push(f),r.set(o,f)),u=f}u.files.push(i)}return e}};var yl=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"}]),Yr=class extends Error{constructor(r){super(r.status==="unknown"?`Unknown PAK not allowed: ${r.name}`:`PAK checksum mismatch for ${r.name}`);this.result=r;this.name="PakValidationError"}},ma=class{constructor(e=yl){this.known=new Map;e.forEach(r=>this.known.set(this.normalizePakName(r.name),r))}validateArchive(e,r){let n=this.normalizePakName(r??("name"in e?e.name:"unknown")),i=e.checksum,s="size"in e?e.size:void 0,a=this.known.get(n);return a?a.checksum!==i?{name:n,checksum:i,expectedChecksum:a.checksum,status:"mismatch",size:s,description:a.description}:{name:n,checksum:i,expectedChecksum:a.checksum,status:"valid",size:s,description:a.description}:{name:n,checksum:i,status:"unknown",size:s}}assertValid(e,r){let n=this.validateArchive(e,r);if(n.status==="mismatch")throw new Yr(n);return n}normalizePakName(e){let r=ae(e),n=r.split("/"),i=n.pop()??r,s=n.pop();return s?`${i}@${s}`:i}};var $t=class extends Error{constructor(r,n){super(`Failed to ingest PAK: ${r}`);this.file=r;this.name="PakIngestionError",n instanceof Error&&n.stack&&(this.stack=n.stack),this.cause=n}};async function Vm(t,e){if(typeof t.arrayBuffer=="function"){let r=await t.arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof FileReader<"u")return new Promise((r,n)=>{let i=new FileReader;i.onerror=()=>n(i.error??new Error("Unknown FileReader error")),i.onprogress=s=>{e?.({file:"blob",loadedBytes:s.loaded,totalBytes:s.total||t.size,state:"reading"})},i.onload=()=>{let s=i.result;s instanceof ArrayBuffer?r(s):n(new Error("Unexpected FileReader result"))},i.readAsArrayBuffer(t)});if(typeof Response<"u"){let r=await new Response(t).arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof t.stream=="function"){let r=t.stream().getReader(),n=[],i=0;for(;;){let{done:o,value:u}=await r.read();if(o)break;if(!u)continue;let l=u;n.push(l),i+=l.byteLength,e?.({file:"blob",loadedBytes:i,totalBytes:t.size,state:"reading"})}let s=new Uint8Array(i),a=0;for(let o of n)s.set(o,a),a+=o.byteLength;return s.buffer}throw new $t("blob",new Error("Unsupported Blob type"))}async function Gm(t,e){if(t.data instanceof ArrayBuffer)return e?.({file:t.name,loadedBytes:t.data.byteLength,totalBytes:t.data.byteLength,state:"reading"}),t.data;if(t.data instanceof Blob){let n=t.data.size;return Vm(t.data,i=>e?.({...i,file:t.name,totalBytes:n}))}let r=t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength);return e?.({file:t.name,loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}async function pa(t,e,r){let n=typeof r=="function"?{onProgress:r}:r??{},i=n.persistIndexes??!!n.pakIndexStore,s=n.enforceValidation??!!n.validator,a=n.allowUnknownPaks??!0,o=n.stopOnError??!1,u=[];for(let l of e)try{let c=await Gm(l,n.onProgress),f=In.fromArrayBuffer(l.name,c),d=n.validator?.validateArchive(f);if(d){n.onValidationResult?.(d);let h=d.status==="mismatch",m=d.status==="unknown";if(h&&s||m&&!a){let g=new Yr(d);if(n.onError?.(l.name,g),o)throw new $t(l.name,g);u.push({archive:f,mounted:!1,validation:d});continue}}if(t.mountPak(f),i&&n.pakIndexStore)try{await n.pakIndexStore.persist(f)}catch(h){if(n.onError?.(l.name,h),o)throw new $t(l.name,h)}n.onProgress?.({file:l.name,loadedBytes:c.byteLength,totalBytes:c.byteLength,state:"parsed"}),u.push({archive:f,mounted:!0,validation:d})}catch(c){if(n.onProgress?.({file:l.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(l.name,c),o)throw new $t(l.name,c)}return u}var Zt=class{constructor(e,r=1/0,n=()=>0){this._capacity=e;this._maxMemory=r;this.sizeCalculator=n;this.map=new Map;this.currentMemoryUsage=0;if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}get memoryUsage(){return this.currentMemoryUsage}get capacity(){return this._capacity}set capacity(e){if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero");this._capacity=e,this.evict()}get maxMemory(){return this._maxMemory}set maxMemory(e){this._maxMemory=e,this.evict()}has(e){return this.map.has(e)}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}set(e,r){let n=this.sizeCalculator(r);this.map.has(e)&&this.delete(e),this.map.set(e,r),this.currentMemoryUsage+=n,this.evict()}delete(e){let r=this.map.get(e);return r!==void 0?(this.currentMemoryUsage-=this.sizeCalculator(r),this.map.delete(e)):!1}clear(){this.map.clear(),this.currentMemoryUsage=0}entries(){return Array.from(this.map.entries()).reverse().map(([e,r])=>({key:e,value:r}))}evict(){for(;this.map.size>this._capacity;){let e=this.map.keys().next();if(!e.done)this.delete(e.value);else break}for(;this.currentMemoryUsage>this._maxMemory&&this.map.size>0;){let e=this.map.keys().next();if(!e.done)this.delete(e.value);else break}}};function Wm(t){return Array.isArray(t)?t:Array.from(t)}function bl(t){return Wm(t).map(e=>({name:e.name,data:e}))}async function Ru(t,e,r){let n=bl(e);return pa(t,n,r??{})}function Fu(t,e){let r=i=>{i.preventDefault(),i.dataTransfer?.dropEffect&&(i.dataTransfer.dropEffect="copy")},n=i=>{i.preventDefault();let s=i.dataTransfer?.files;s&&s.length>0&&e(Array.from(s))};return t.addEventListener("dragover",r),t.addEventListener("drop",n),()=>{t.removeEventListener("dragover",r),t.removeEventListener("drop",n)}}function Bu(t,e){let r=n=>{let i=n.target;!i||!i.files||i.files.length===0||(e(i.files),i.value="")};return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}var Xm="IBSP",Km=38,Ou=19,$m=8+Ou*8;var q=class extends Error{},Rn=class{constructor(e,r={}){this.vfs=e;this.options=r}async load(e){let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);if(n.set(new Uint8Array(r)),this.options.useWorker&&typeof Worker<"u")try{let i=await this.parseInWorker(n.buffer);return zu(i)}catch(i){console.warn("BSP worker parsing failed, falling back to main thread",i)}return Li(n.buffer)}parseInWorker(e){return new Promise((r,n)=>{if(!this.options.workerPath){n(new Error("No worker path provided"));return}let i=new Worker(this.options.workerPath,{type:"module"});i.onmessage=s=>{let{type:a,data:o,message:u}=s.data;a==="success"?(r(this.rehydrateData(o)),i.terminate()):(n(new Error(u)),i.terminate())},i.onerror=s=>{n(s),i.terminate()},i.postMessage(e,[e])})}rehydrateData(e){if(e.entities&&!e.entities.getUniqueClassnames){let r=e.entities;r.getUniqueClassnames=function(){let n=new Set;for(let i of this.entities)i.classname&&n.add(i.classname);return Array.from(n).sort()}}return e}};function Li(t){let e=Zm(t);return zu(e)}function zu(t){return{...t,pickEntity(e){let r=null,n=1/0;for(let i of t.entities.entities){let s=i.properties.model;if(!s||!s.startsWith("*"))continue;let a=parseInt(s.substring(1),10);if(isNaN(a)||a<0||a>=t.models.length)continue;let o=t.models[a],u=Ym(e.origin,e.direction,o.mins,o.maxs);u!==null&&u<n&&(n=u,r={entity:i,model:o,distance:u})}return r},findLeaf(e){let n=t.models[0].headNode;for(;n>=0;){let i=t.nodes[n],s=t.planes[i.planeIndex];s.normal[0]*e[0]+s.normal[1]*e[1]+s.normal[2]*e[2]-s.dist>=0?n=i.children[0]:n=i.children[1]}return t.leafs[-(n+1)]},calculatePVS(e){let r=this.findLeaf(e);if(!(r.cluster===-1||!t.visibility)&&!(r.cluster<0||r.cluster>=t.visibility.clusters.length))return t.visibility.clusters[r.cluster].pvs}}}function Zm(t){if(t.byteLength<$m)throw new q("BSP too small to contain header");let e=new DataView(t),r=String.fromCharCode(e.getUint8(0),e.getUint8(1),e.getUint8(2),e.getUint8(3));if(r!==Xm)throw new q(`Invalid BSP magic ${r}`);let n=e.getInt32(4,!0);if(n!==Km)throw new q(`Unsupported BSP version ${n}`);let i=new Map;for(let L=0;L<Ou;L+=1){let C=e.getInt32(8+L*8,!0),A=e.getInt32(12+L*8,!0);if(C<0||A<0||C+A>t.byteLength)throw new q(`Invalid lump bounds for index ${L}`);i.set(L,{offset:C,length:A})}let s={version:n,lumps:i},a=qm(t,i.get(0)),o=Qm(t,i.get(1)),u=Jm(t,i.get(2)),l=e0(t,i.get(4)),c=t0(t,i.get(5)),f=r0(t,i.get(6)),d=new Uint8Array(t,i.get(7).offset,i.get(7).length),h=m0(f,i.get(7)),m=n0(t,i.get(8)),g=i0(t,i.get(11)),p=s0(t,i.get(12)),y=a0(t,i.get(13)),v=o0(t,i.get(14)),x=l0(t,i.get(15)),b=f0(t,i.get(9),i.get(10),m),_=h0(t,i.get(3)),S=c0(t,i.get(17)),w=u0(t,i.get(18));return{header:s,entities:a,planes:o,vertices:u,nodes:l,texInfo:c,faces:f,lightMaps:d,lightMapInfo:h,leafs:m,leafLists:b,edges:g,surfEdges:p,models:y,brushes:v,brushSides:x,visibility:_,areas:S,areaPortals:w}}function Ym(t,e,r,n){let i=0,s=1/0;for(let a=0;a<3;a++)if(Math.abs(e[a])<1e-8){if(t[a]<r[a]||t[a]>n[a])return null}else{let o=1/e[a],u=(r[a]-t[a])*o,l=(n[a]-t[a])*o;if(u>l){let c=u;u=l,l=c}if(i=Math.max(i,u),s=Math.min(s,l),i>s)return null}return i}function qm(t,e){let r=new TextDecoder().decode(new Uint8Array(t,e.offset,e.length)),n=jm(r),i=n.find(s=>s.classname==="worldspawn");return{raw:r,entities:n,worldspawn:i,getUniqueClassnames(){let s=new Set;for(let a of n)a.classname&&s.add(a.classname);return Array.from(s).sort()}}}function jm(t){let e=[],r=/\{([^}]*)\}/gms,n;for(;(n=r.exec(t))!==null;){let i=n[1],s={},a=/"([^\"]*)"\s+"([^\"]*)"/g,o;for(;(o=a.exec(i))!==null;)s[o[1]]=o[2];e.push({classname:s.classname,properties:s})}return e}function Qm(t,e){let r=new DataView(t,e.offset,e.length),n=e.length/20;if(n%1!==0)throw new q("Plane lump has invalid length");let i=[];for(let s=0;s<n;s+=1){let a=[r.getFloat32(s*20,!0),r.getFloat32(s*20+4,!0),r.getFloat32(s*20+8,!0)],o=r.getFloat32(s*20+12,!0),u=r.getInt32(s*20+16,!0);i.push({normal:a,dist:o,type:u})}return i}function Jm(t,e){let r=new DataView(t,e.offset,e.length),n=e.length/12;if(n%1!==0)throw new q("Vertex lump has invalid length");let i=[];for(let s=0;s<n;s+=1)i.push([r.getFloat32(s*12,!0),r.getFloat32(s*12+4,!0),r.getFloat32(s*12+8,!0)]);return i}function e0(t,e){let r=new DataView(t,e.offset,e.length),n=28,i=e.length/n;if(i%1!==0)throw new q("Node lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n,u=r.getInt32(o,!0),l=[r.getInt32(o+4,!0),r.getInt32(o+8,!0)],c=[r.getInt16(o+12,!0),r.getInt16(o+14,!0),r.getInt16(o+16,!0)],f=[r.getInt16(o+18,!0),r.getInt16(o+20,!0),r.getInt16(o+22,!0)],d=r.getUint16(o+24,!0),h=r.getUint16(o+26,!0);s.push({planeIndex:u,children:l,mins:c,maxs:f,firstFace:d,numFaces:h})}return s}function t0(t,e){let r=new DataView(t,e.offset,e.length),n=76,i=e.length/n;if(i%1!==0)throw new q("TexInfo lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n,u=[r.getFloat32(o,!0),r.getFloat32(o+4,!0),r.getFloat32(o+8,!0)],l=r.getFloat32(o+12,!0),c=[r.getFloat32(o+16,!0),r.getFloat32(o+20,!0),r.getFloat32(o+24,!0)],f=r.getFloat32(o+28,!0),d=r.getInt32(o+32,!0),h=r.getInt32(o+36,!0),m=new Uint8Array(t,e.offset+o+40,32),g=new TextDecoder("utf-8").decode(m).replace(/\0.*$/,""),p=r.getInt32(o+72,!0);s.push({s:u,sOffset:l,t:c,tOffset:f,flags:d,value:h,texture:g,nextTexInfo:p})}return s}function r0(t,e){let r=new DataView(t,e.offset,e.length),n=20,i=e.length/n;if(i%1!==0)throw new q("Face lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n,u=r.getUint16(o,!0),l=r.getInt16(o+2,!0),c=r.getInt32(o+4,!0),f=r.getInt16(o+8,!0),d=r.getInt16(o+10,!0),h=[r.getUint8(o+12),r.getUint8(o+13),r.getUint8(o+14),r.getUint8(o+15)],m=r.getInt32(o+16,!0);s.push({planeIndex:u,side:l,firstEdge:c,numEdges:f,texInfo:d,styles:h,lightOffset:m})}return s}function n0(t,e){let r=new DataView(t,e.offset,e.length),n=28,i=e.length/n;if(i%1!==0)throw new q("Leaf lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n,u=r.getInt32(o,!0),l=r.getInt16(o+4,!0),c=r.getInt16(o+6,!0),f=[r.getInt16(o+8,!0),r.getInt16(o+10,!0),r.getInt16(o+12,!0)],d=[r.getInt16(o+14,!0),r.getInt16(o+16,!0),r.getInt16(o+18,!0)],h=r.getUint16(o+20,!0),m=r.getUint16(o+22,!0),g=r.getUint16(o+24,!0),p=r.getUint16(o+26,!0);s.push({contents:u,cluster:l,area:c,mins:f,maxs:d,firstLeafFace:h,numLeafFaces:m,firstLeafBrush:g,numLeafBrushes:p})}return s}function i0(t,e){let r=new DataView(t,e.offset,e.length),n=4,i=e.length/n;if(i%1!==0)throw new q("Edge lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n;s.push({vertices:[r.getUint16(o,!0),r.getUint16(o+2,!0)]})}return s}function s0(t,e){let r=e.length/4;if(r%1!==0)throw new q("SurfEdge lump has invalid length");let n=new DataView(t,e.offset,e.length),i=new Int32Array(r);for(let s=0;s<r;s+=1)i[s]=n.getInt32(s*4,!0);return i}function a0(t,e){let r=new DataView(t,e.offset,e.length),n=48;if(e.length%n!==0)throw new q("Model lump has invalid length");let i=e.length/n,s=[];for(let a=0;a<i;a+=1){let o=a*n,u=[r.getFloat32(o,!0),r.getFloat32(o+4,!0),r.getFloat32(o+8,!0)],l=[r.getFloat32(o+12,!0),r.getFloat32(o+16,!0),r.getFloat32(o+20,!0)],c=[r.getFloat32(o+24,!0),r.getFloat32(o+28,!0),r.getFloat32(o+32,!0)],f=r.getInt32(o+36,!0),d=r.getInt32(o+40,!0),h=r.getInt32(o+44,!0);s.push({mins:u,maxs:l,origin:c,headNode:f,firstFace:d,numFaces:h})}return s}function o0(t,e){let r=new DataView(t,e.offset,e.length),n=12,i=e.length/n;if(i%1!==0)throw new q("Brush lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n;s.push({firstSide:r.getInt32(o,!0),numSides:r.getInt32(o+4,!0),contents:r.getInt32(o+8,!0)})}return s}function l0(t,e){let r=new DataView(t,e.offset,e.length),n=4,i=e.length/n;if(i%1!==0)throw new q("Brush side lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n;s.push({planeIndex:r.getUint16(o,!0),texInfo:r.getInt16(o+2,!0)})}return s}function c0(t,e){let r=new DataView(t,e.offset,e.length),n=8,i=e.length/n;if(i%1!==0)throw new q("Area lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n,u=r.getInt32(o,!0),l=r.getInt32(o+4,!0);s.push({numAreaPortals:u,firstAreaPortal:l})}return s}function u0(t,e){return d0(t,e)}function d0(t,e){let r=new DataView(t,e.offset,e.length),n=8,i=e.length/n;if(i%1!==0)throw new q("AreaPortal lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n,u=r.getInt32(o,!0),l=r.getInt32(o+4,!0);s.push({portalNumber:u,otherArea:l})}return s}function f0(t,e,r,n){let i=[],s=[],a=e.length/2,o=r.length/2,u=new DataView(t,e.offset,e.length),l=new DataView(t,r.offset,r.length);for(let c of n){if(c.firstLeafFace+c.numLeafFaces>a)throw new q("Leaf faces reference data past lump bounds");if(c.firstLeafBrush+c.numLeafBrushes>o)throw new q("Leaf brushes reference data past lump bounds");let f=[];for(let h=0;h<c.numLeafFaces;h+=1)f.push(u.getUint16((c.firstLeafFace+h)*2,!0));let d=[];for(let h=0;h<c.numLeafBrushes;h+=1)d.push(l.getUint16((c.firstLeafBrush+h)*2,!0));i.push(f),s.push(d)}return{leafFaces:i,leafBrushes:s}}function h0(t,e){if(e.length===0)return;if(e.length<4)throw new q("Visibility lump too small");let r=new DataView(t,e.offset,e.length),n=r.getInt32(0,!0),i=4+n*8;if(n<0||i>e.length)throw new q("Visibility lump truncated");let s=4,a=[];for(let o=0;o<n;o+=1){let u=r.getInt32(s,!0),l=r.getInt32(s+4,!0);s+=8;let c=e.offset+u,f=e.offset+l,d=e.offset+e.length;if(u<0||l<0||c>=d||f>=d)throw new q("Visibility offsets out of range");a.push({pvs:Du(t,c,n,e),phs:Du(t,f,n,e)})}return{numClusters:n,clusters:a}}function Du(t,e,r,n){let i=Math.ceil(r/8),s=new Uint8Array(i),a=new Uint8Array(t),o=e,u=0,l=n.offset+n.length;for(;u<i;){if(o>=l)throw new q("Visibility data truncated");let c=a[o++];if(c!==0){s[u++]=c;continue}if(o>=l)throw new q("Visibility run exceeds lump bounds");let f=a[o++];for(let d=0;d<f&&u<i;d+=1)s[u++]=0}return s}function m0(t,e){return t.map(r=>{if(!(r.lightOffset<0))return{offset:r.lightOffset,length:Math.max(0,e.length-r.lightOffset)}})}function ga(t,e,r){if(t.lightOffset<0||t.lightOffset>=e.byteLength)return;let n=e.byteLength-t.lightOffset,i=Math.min(r?.length??n,n);if(!(i<=0))return e.subarray(t.lightOffset,t.lightOffset+i)}var p0=844121161,g0=8,Nu=68,xe=class extends Error{},Fn=class{constructor(e){this.vfs=e;this.cache=new Map}async load(e){if(this.cache.has(e))return this.cache.get(e);let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);n.set(r);let i=xl(n.buffer);return this.cache.set(e,i),i}get(e){return this.cache.get(e)}};function Uu(t,e,r){let n=[];for(let i=0;i<r;i+=1){let s=t.getUint8(e+i);if(s===0)break;n.push(s)}return String.fromCharCode(...n)}function Ti(t,e,r,n){if(r!==0&&(e<Nu||e+r>t.byteLength))throw new xe(`${n} section is out of bounds`)}function y0(t){if(t.byteLength<Nu)throw new xe("MD2 buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0);if(r!==p0)throw new xe(`Invalid MD2 ident: ${r}`);if(n!==g0)throw new xe(`Unsupported MD2 version: ${n}`);let i={ident:r,version:n,skinWidth:e.getInt32(8,!0),skinHeight:e.getInt32(12,!0),frameSize:e.getInt32(16,!0),numSkins:e.getInt32(20,!0),numVertices:e.getInt32(24,!0),numTexCoords:e.getInt32(28,!0),numTriangles:e.getInt32(32,!0),numGlCommands:e.getInt32(36,!0),numFrames:e.getInt32(40,!0),offsetSkins:e.getInt32(44,!0),offsetTexCoords:e.getInt32(48,!0),offsetTriangles:e.getInt32(52,!0),offsetFrames:e.getInt32(56,!0),offsetGlCommands:e.getInt32(60,!0),offsetEnd:e.getInt32(64,!0),magic:r},s=40+i.numVertices*4;if(i.frameSize!==s)throw new xe(`Unexpected frame size ${i.frameSize}, expected ${s}`);if(i.offsetEnd>t.byteLength)throw new xe("MD2 offset_end exceeds buffer length");return i}function b0(t,e){let r=e.numSkins*64;Ti(t,e.offsetSkins,r,"skins");let n=new DataView(t,e.offsetSkins,r),i=[];for(let s=0;s<e.numSkins;s+=1)i.push({name:Uu(n,s*64,64)});return i}function x0(t,e){let r=e.numTexCoords*4;Ti(t,e.offsetTexCoords,r,"texcoords");let n=new DataView(t,e.offsetTexCoords,r),i=[];for(let s=0;s<e.numTexCoords;s+=1){let a=s*4;i.push({s:n.getInt16(a,!0),t:n.getInt16(a+2,!0)})}return i}function v0(t,e){let r=e.numTriangles*12;Ti(t,e.offsetTriangles,r,"triangles");let n=new DataView(t,e.offsetTriangles,r),i=[];for(let s=0;s<e.numTriangles;s+=1){let a=s*12,o=[n.getUint16(a,!0),n.getUint16(a+2,!0),n.getUint16(a+4,!0)],u=[n.getUint16(a+6,!0),n.getUint16(a+8,!0),n.getUint16(a+10,!0)];if(o.some(l=>l>=e.numVertices)||u.some(l=>l>=e.numTexCoords))throw new xe("Triangle references out of range vertex or texcoord");i.push({vertexIndices:o,texCoordIndices:u})}return i}function _0(t,e){let r=e.numFrames*e.frameSize;Ti(t,e.offsetFrames,r,"frames");let n=[];for(let i=0;i<e.numFrames;i+=1){let s=e.offsetFrames+i*e.frameSize,a=new DataView(t,s,e.frameSize),o={x:a.getFloat32(0,!0),y:a.getFloat32(4,!0),z:a.getFloat32(8,!0)},u={x:a.getFloat32(12,!0),y:a.getFloat32(16,!0),z:a.getFloat32(20,!0)},l=Uu(a,24,16),c=[],f=1/0,d=1/0,h=1/0,m=-1/0,g=-1/0,p=-1/0;for(let y=0;y<e.numVertices;y+=1){let v=40+y*4,x=a.getUint8(v)*o.x+u.x,b=a.getUint8(v+1)*o.y+u.y,_=a.getUint8(v+2)*o.z+u.z;x<f&&(f=x),b<d&&(d=b),_<h&&(h=_),x>m&&(m=x),b>g&&(g=b),_>p&&(p=_);let S={x,y:b,z:_},w=a.getUint8(v+3),L=tt[w];if(!L)throw new xe(`Invalid normal index ${w} in frame ${l}`);let C={x:L[0],y:L[1],z:L[2]};c.push({position:S,normalIndex:w,normal:C})}n.push({name:l,vertices:c,minBounds:{x:f,y:d,z:h},maxBounds:{x:m,y:g,z:p}})}return n}function w0(t,e){let r=e.numGlCommands*4;if(Ti(t,e.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(t,e.offsetGlCommands,r),i=[],s=0;for(;;){if(s+4>r)throw new xe("GL command list ended unexpectedly");let a=n.getInt32(s,!0);if(s+=4,a===0)break;let o=Math.abs(a),u=[],l=o*12;if(s+l>r)throw new xe("GL command vertex block exceeds buffer");for(let c=0;c<o;c+=1){let f=n.getFloat32(s,!0),d=n.getFloat32(s+4,!0),h=n.getInt32(s+8,!0);if(s+=12,h<0||h>=e.numVertices)throw new xe("GL command references invalid vertex index");u.push({s:f,t:d,vertexIndex:h})}i.push({mode:a>0?"strip":"fan",vertices:u})}if(s!==r)throw new xe("GL command list did not consume expected data");return i}function xl(t){let e=y0(t),r=b0(t,e),n=x0(t,e),i=v0(t,e),s=_0(t,e),a=w0(t,e);return{header:e,skins:r,texCoords:n,triangles:i,frames:s,glCommands:a}}function Hu(t){let e=[],r=0;for(;r<t.length;){let n=t[r].name,i=n.replace(/\d+$/,"")||n,s=r;for(;s+1<t.length&&(t[s+1].name.replace(/\d+$/,"")||t[s+1].name)===i;)s+=1;e.push({name:i,firstFrame:r,lastFrame:s}),r=s+1}return e}var Vu=860898377,S0=15,We=class extends Error{constructor(e){super(e),this.name="Md3ParseError"}};function Ci(t,e,r){let n=new Uint8Array(t.buffer,t.byteOffset+e,r);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function A0(t){let e=(t>>8&255)*(2*Math.PI/255),r=(t&255)*(2*Math.PI/255),n=Math.sin(r);return{x:Math.cos(e)*n,y:Math.sin(e)*n,z:Math.cos(r)}}function ya(t,e,r,n){if(e<0||e+r>n)throw new We(`${t} exceeds buffer bounds`)}function M0(t){let e=t.getInt32(0,!0);if(e!==Vu)throw new We(`Invalid MD3 ident: ${e}`);let r=t.getInt32(4,!0);if(r!==S0)throw new We(`Unsupported MD3 version: ${r}`);let n=Ci(t,8,64),i=t.getInt32(72,!0),s=t.getInt32(76,!0),a=t.getInt32(80,!0),o=t.getInt32(84,!0),u=t.getInt32(88,!0),l=t.getInt32(92,!0),c=t.getInt32(96,!0),f=t.getInt32(100,!0),d=t.getInt32(104,!0);if(s<=0||o<0||a<0)throw new We("Invalid MD3 counts");return{ident:e,version:r,name:n,flags:i,numFrames:s,numTags:a,numSurfaces:o,numSkins:u,ofsFrames:l,ofsTags:c,ofsSurfaces:f,ofsEnd:d,magic:e}}function E0(t,e){let r=[];ya("Frames",e.ofsFrames,e.numFrames*56,t.byteLength);for(let i=0;i<e.numFrames;i+=1){let s=e.ofsFrames+i*56;r.push({minBounds:{x:t.getFloat32(s,!0),y:t.getFloat32(s+4,!0),z:t.getFloat32(s+8,!0)},maxBounds:{x:t.getFloat32(s+12,!0),y:t.getFloat32(s+16,!0),z:t.getFloat32(s+20,!0)},localOrigin:{x:t.getFloat32(s+24,!0),y:t.getFloat32(s+28,!0),z:t.getFloat32(s+32,!0)},radius:t.getFloat32(s+36,!0),name:Ci(t,s+40,16)})}return r}function L0(t,e){let r=[],i=e.numFrames*e.numTags*112;ya("Tags",e.ofsTags,i,t.byteLength);for(let s=0;s<e.numFrames;s+=1){let a=[];for(let o=0;o<e.numTags;o+=1){let u=e.ofsTags+(s*e.numTags+o)*112,l=u+64,c=l+12;a.push({name:Ci(t,u,64),origin:{x:t.getFloat32(l,!0),y:t.getFloat32(l+4,!0),z:t.getFloat32(l+8,!0)},axis:[{x:t.getFloat32(c,!0),y:t.getFloat32(c+4,!0),z:t.getFloat32(c+8,!0)},{x:t.getFloat32(c+12,!0),y:t.getFloat32(c+16,!0),z:t.getFloat32(c+20,!0)},{x:t.getFloat32(c+24,!0),y:t.getFloat32(c+28,!0),z:t.getFloat32(c+32,!0)}]})}r.push(a)}return r}function T0(t,e){let r=t.getInt32(e,!0);if(r!==Vu)throw new We(`Invalid surface ident at ${e}: ${r}`);let n=Ci(t,e+4,64),i=t.getInt32(e+68,!0),s=t.getInt32(e+72,!0),a=t.getInt32(e+76,!0),o=t.getInt32(e+80,!0),u=t.getInt32(e+84,!0),l=t.getInt32(e+88,!0),c=t.getInt32(e+92,!0),f=t.getInt32(e+96,!0),d=t.getInt32(e+100,!0),h=t.getInt32(e+104,!0);if(s<=0||o<=0||u<=0)throw new We(`Invalid surface counts for ${n}`);let m=h;ya(`Surface ${n}`,e,m,t.byteLength);let g=[],p=e+l;for(let w=0;w<u;w+=1){let L=p+w*12;g.push({indices:[t.getInt32(L,!0),t.getInt32(L+4,!0),t.getInt32(L+8,!0)]})}let y=[],v=e+c;for(let w=0;w<a;w+=1){let L=v+w*68;y.push({name:Ci(t,L,64),shaderIndex:t.getInt32(L+64,!0)})}let x=[],b=e+f;for(let w=0;w<o;w+=1){let L=b+w*8;x.push({s:t.getFloat32(L,!0),t:t.getFloat32(L+4,!0)})}let _=[],S=e+d;for(let w=0;w<s;w+=1){let L=[];for(let C=0;C<o;C+=1){let A=S+(w*o+C)*8,k=t.getInt16(A,!0)/64,R=t.getInt16(A+2,!0)/64,B=t.getInt16(A+4,!0)/64,P=t.getUint16(A+6,!0);L.push({position:{x:k,y:R,z:B},latLng:P,normal:A0(P)})}_.push(L)}return{surface:{name:n,flags:i,numFrames:s,shaders:y,triangles:g,texCoords:x,vertices:_},nextOffset:e+h}}function vl(t){if(t.byteLength<108)throw new We("MD3 buffer too small for header");let e=new DataView(t),r=M0(e);ya("MD3 end",r.ofsEnd,0,t.byteLength);let n=E0(e,r),i=L0(e,r),s=[],a=r.ofsSurfaces;for(let o=0;o<r.numSurfaces;o+=1){let{surface:u,nextOffset:l}=T0(e,a);s.push(u),a=l}if(a!==r.ofsEnd)throw new We("Surface parsing did not reach ofsEnd");return{header:r,frames:n,tags:i,surfaces:s}}var Bn=class{constructor(e){this.vfs=e;this.cache=new Map}async load(e){if(this.cache.has(e))return this.cache.get(e);let r=await this.vfs.readFile(e),n=vl(r.slice().buffer);return this.cache.set(e,n),n}get(e){return this.cache.get(e)}};var C0=844317769,k0=2,Gu=64,Wu=12,Yt=class extends Error{};function P0(t,e,r){let n=[];for(let i=0;i<r;i+=1){let s=t.getUint8(e+i);if(s===0)break;n.push(s)}return String.fromCharCode(...n)}function _l(t){if(t.byteLength<Wu)throw new Yt("Sprite buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0),i=e.getInt32(8,!0);if(r!==C0)throw new Yt(`Invalid Sprite ident: ${r}`);if(n!==k0)throw new Yt(`Unsupported Sprite version: ${n}`);let s=[],a=16+Gu,o=Wu;for(let u=0;u<i;u+=1){if(o+a>t.byteLength)throw new Yt("Sprite frame data exceeds buffer length");let l=e.getInt32(o,!0),c=e.getInt32(o+4,!0),f=e.getInt32(o+8,!0),d=e.getInt32(o+12,!0),h=P0(e,o+16,Gu);s.push({width:l,height:c,originX:f,originY:d,name:h}),o+=a}return{ident:r,version:n,numFrames:i,frames:s}}var Dn=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);return n.set(r),_l(n.buffer)}};function Xu(t,e){let r=(t.sequence.end-t.sequence.start+1)/t.sequence.fps,n=t.sequence.loop!==!1,i=t.time+e;return n?i=(i%r+r)%r:i>r&&(i=r),{...t,time:Math.max(0,Math.min(i,r))}}function Ku(t){let e=t.sequence.end-t.sequence.start+1,r=1/t.sequence.fps,n=t.sequence.loop!==!1,i=t.time/r;if(!n&&i>=e)return{frame0:t.sequence.end,frame1:t.sequence.end,lerp:0};let s=n?i%e:Math.min(i,e-1),a=Math.floor(s),o=t.sequence.start+a,u=a+1>=e?n?t.sequence.start:t.sequence.end:o+1,l=!n&&a>=e-1?0:s-a;return{frame0:o,frame1:u,lerp:l}}function $u(t){return{sequence:t,time:0}}function Zu(t,e,r){return{x:t.x+(e.x-t.x)*r,y:t.y+(e.y-t.y)*r,z:t.z+(e.z-t.z)*r}}var ki=class extends Error{constructor(e){super(e),this.name="WalParseError"}};function ba(t){if(t.byteLength<100)throw new ki("WAL buffer too small");let e=new DataView(t),r=new Uint8Array(t,0,32),n=new TextDecoder("utf-8").decode(r).replace(/\0.*$/,"").trim(),i=e.getInt32(32,!0),s=e.getInt32(36,!0),a=[e.getInt32(40,!0),e.getInt32(44,!0),e.getInt32(48,!0),e.getInt32(52,!0)],o=new Uint8Array(t,56,32),u=new TextDecoder("utf-8").decode(o).replace(/\0.*$/,"").trim(),l=e.getInt32(88,!0),c=e.getInt32(92,!0),f=e.getInt32(96,!0);if(i<=0||s<=0)throw new ki("Invalid WAL dimensions");let d=[],h=i,m=s;for(let g=0;g<a.length;g+=1){let p=a[g],y=Math.max(1,h*m|0);if(p<=0||p+y>t.byteLength)throw new ki(`Invalid WAL mip offset for level ${g}`);let v=new Uint8Array(t,p,y);d.push({level:g,width:h,height:m,data:v}),h=Math.max(1,h>>1),m=Math.max(1,m>>1)}return{name:n,width:i,height:s,mipmaps:d,animName:u,flags:l,contents:c,value:f}}var qr=class extends Error{constructor(e){super(e),this.name="PcxParseError"}};function Pi(t){if(t.byteLength<128)throw new qr("PCX buffer too small for header");let e=new DataView(t),r=e.getUint8(0),n=e.getUint8(2),i=e.getUint8(3),s=e.getUint16(4,!0),a=e.getUint16(6,!0),o=e.getUint16(8,!0),u=e.getUint16(10,!0);if(r!==10||n!==1)throw new qr("Unsupported PCX encoding");if(i!==8)throw new qr("Only 8bpp PCX files are supported");let l=o-s+1,c=u-a+1,f=e.getUint16(66,!0),d=t.byteLength-769;if(d<128||new DataView(t,d,1).getUint8(0)!==12)throw new qr("Missing PCX palette");let h=new Uint8Array(t,d+1,768),m=new Uint8Array(t,128,d-128),g=new Uint8Array(l*c),p=0,y=0;for(let v=0;v<c;v+=1){let x=0;for(;x<f&&p<m.length;){let b=1,_=m[p++];if((_&192)===192){if(b=_&63,p>=m.length)throw new qr("Unexpected end of PCX RLE data");_=m[p++]}for(let S=0;S<b&&x<f;S+=1)x<l&&(g[y++]=_),x+=1}}return{width:l,height:c,bitsPerPixel:i,pixels:g,palette:h}}function xa(t){let e=new Uint8Array(t.width*t.height*4);for(let r=0;r<t.pixels.length;r+=1){let n=t.pixels[r],i=n*3,s=r*4;e[s]=t.palette[i],e[s+1]=t.palette[i+1],e[s+2]=t.palette[i+2],e[s+3]=n===255?0:255}return e}var Lt=class extends Error{constructor(e){super(e),this.name="TgaParseError"}};function wl(t){let e=new DataView(t);if(t.byteLength<18)throw new Lt("Buffer too small for TGA header");let r=e.getUint8(0),n=e.getUint8(1),i=e.getUint8(2),s=e.getUint16(12,!0),a=e.getUint16(14,!0),o=e.getUint8(16),u=e.getUint8(17);if(i!==2&&i!==10&&i!==3&&i!==11)throw new Lt(`Unsupported TGA image type: ${i} (only RGB/Grayscale supported)`);if(o!==24&&o!==32&&o!==8)throw new Lt(`Unsupported pixel depth: ${o} (only 8, 24, 32 bpp supported)`);let l=i>=9,c=i===3||i===11,f=o/8,d=18+r;if(n===1){let x=e.getUint16(5,!0),b=e.getUint8(7);d+=x*(b/8)}let h=s*a,m=new Uint8Array(h*4),g=(u&32)!==0,p=0,y=new Uint8Array(t),v=x=>{if(c){let b=y[d++];m[x]=b,m[x+1]=b,m[x+2]=b,m[x+3]=255}else{let b=y[d++],_=y[d++],S=y[d++],w=o===32?y[d++]:255;m[x]=S,m[x+1]=_,m[x+2]=b,m[x+3]=w}};if(l){let x=0;for(;x<h;){if(d>=t.byteLength)throw new Lt("Unexpected end of TGA RLE data");let b=y[d++],_=(b&127)+1,S=(b&128)!==0;if(x+_>h)throw new Lt("TGA RLE packet exceeds image bounds");if(S){let w=c?y[d]:y[d+2],L=c?y[d]:y[d+1],C=y[d],A=c?255:o===32?y[d+3]:255;d+=f;for(let k=0;k<_;k++){let R=(x+k)*4;m[R]=w,m[R+1]=L,m[R+2]=C,m[R+3]=A}}else for(let w=0;w<_;w++)v((x+w)*4);x+=_}}else for(let x=0;x<h;x++){if(d>=t.byteLength)throw new Lt("Unexpected end of TGA data");v(x*4)}if(!g){let x=s*4,b=new Uint8Array(x);for(let _=0;_<a/2;_++){let S=_*x,w=(a-1-_)*x;b.set(m.subarray(S,S+x)),m.set(m.subarray(w,w+x),S),m.set(b,w)}}return{width:s,height:a,bitsPerPixel:32,pixels:m}}function I0(t){let e=0;for(let r of t.levels)e+=r.rgba.byteLength;return e}var On=class{constructor(e={}){this.cache=new Zt(e.capacity??128,e.maxMemory??256*1024*1024,I0)}get size(){return this.cache.size}get memoryUsage(){return this.cache.memoryUsage}get(e){return this.cache.get(e.toLowerCase())}set(e,r){this.cache.set(e.toLowerCase(),r)}clear(){this.cache.clear()}get capacity(){return this.cache.capacity}set capacity(e){this.cache.capacity=e}get maxMemory(){return this.cache.maxMemory}set maxMemory(e){this.cache.maxMemory=e}};function Sl(t,e){let r=[];for(let n of t.mipmaps){let i=new Uint8Array(n.width*n.height*4);for(let s=0;s<n.data.length;s+=1){let a=n.data[s],o=a*3,u=s*4;i[u]=e[o],i[u+1]=e[o+1],i[u+2]=e[o+2],i[u+3]=a===255?0:255}r.push({level:n.level,width:n.width,height:n.height,rgba:i})}return{width:t.width,height:t.height,levels:r,source:"wal"}}function va(t){let e=xa(t),r={level:0,width:t.width,height:t.height,rgba:e};return{width:t.width,height:t.height,levels:[r],source:"pcx"}}function Yu(t){let e={level:0,width:t.width,height:t.height,rgba:t.pixels};return{width:t.width,height:t.height,levels:[e],source:"tga"}}function _a(t,e){return Sl(ba(t),e)}var jr=class extends Error{constructor(e){super(e),this.name="WavParseError"}};function Al(t,e,r){return new TextDecoder("ascii").decode(new Uint8Array(t.buffer,t.byteOffset+e,r))}function wa(t){if(t.byteLength<44)throw new jr("WAV buffer too small");let e=new DataView(t);if(Al(e,0,4)!=="RIFF"||Al(e,8,4)!=="WAVE")throw new jr("Invalid WAV header");let r=12,n=-1,i=-1,s=0,a=0;for(;r+8<=t.byteLength;){let m=Al(e,r,4),g=e.getUint32(r+4,!0),p=r+8;m==="fmt "?(n=p,s=g):m==="data"&&(i=p,a=g),r=p+g}if(n===-1||i===-1)throw new jr("Missing fmt or data chunk");let o=e.getUint16(n,!0),u=e.getUint16(n+2,!0),l=e.getUint32(n+4,!0),c=e.getUint16(n+14,!0);if(o!==1)throw new jr("Only PCM WAV is supported");let f=c/8,d=a/(f*u),h=new Float32Array(d*u);for(let m=0;m<d;m+=1)for(let g=0;g<u;g+=1){let p=m*u+g,y=i+p*f,v=0;if(c===8)v=e.getUint8(y),h[p]=(v-128)/128;else if(c===16)v=e.getInt16(y,!0),h[p]=v/32768;else if(c===24){let x=e.getUint8(y),b=e.getUint8(y+1),_=e.getInt8(y+2);v=x|b<<8|_<<16,h[p]=v/8388608}else throw new jr(`Unsupported bitsPerSample: ${c}`)}return{sampleRate:l,channels:u,bitsPerSample:c,samples:h}}var R0=(t,e=4294967295,r=79764919)=>{let n=new Int32Array(256),i,s,a,o=e;for(i=0;i<256;i++){for(a=i<<24,s=8;s>0;--s)a=2147483648&a?a<<1^r:a<<1;n[i]=a}for(i=0;i<t.length;i++)o=o<<8^n[255&(o>>24^t[i])];return o};var Ml=(t,e=R0)=>{let r=p=>new Uint8Array(p.length/2).map(((y,v)=>parseInt(p.substring(2*v,2*(v+1)),16))),n=p=>r(p)[0],i=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach(((p,y)=>i.set(p,y)));let s=new Uint8Array(t.length),a,o,u,l=!1,c=0,f=42,d=t.length>13&&t.substring(0,9)==="dynEncode",h=0;d&&(h=11,o=n(t.substring(9,h)),o<=1&&(h+=2,f=n(t.substring(11,h))),o===1&&(h+=8,u=(p=>new DataView(r(p).buffer).getInt32(0,!0))(t.substring(13,h))));let m=256-f;for(let p=h;p<t.length;p++)if(a=t.charCodeAt(p),a!==61||l){if(a===92&&p<t.length-5&&d){let y=t.charCodeAt(p+1);y!==117&&y!==85||(a=parseInt(t.substring(p+2,p+6),16),p+=5)}if(a>255){let y=i.get(a);y&&(a=y+127)}l&&(l=!1,a-=64),s[c++]=a<f&&a>0?a+m:a-f}else l=!0;let g=s.subarray(0,c);if(d&&o===1){let p=e(g);if(p!==u){let y="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",y+`
2
+ `,"Expected: "+u+"; Got: "+p+`
3
+ `,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(y)}}return g};function re(){let t=Uint8Array,e=Float32Array;re.modules||Object.defineProperties(re,{modules:{value:new WeakMap},setModule:{value(r,n){re.modules.set(r,Promise.resolve(n))}},getModule:{value(r,n){let i=re.modules.get(r);return i||(n?i=WebAssembly.compile(Ml(n)):(n=r.wasm,i=re.inflateDynEncodeString(n).then(s=>WebAssembly.compile(s))),re.modules.set(r,i)),i}},concatFloat32:{value(r,n){let i=new e(n),s=0,a=0;for(;s<r.length;)i.set(r[s],a),a+=r[s++].length;return i}},getDecodedAudio:{value:(r,n,i,s,a)=>({errors:r,channelData:n,samplesDecoded:i,sampleRate:s,bitDepth:a})},getDecodedAudioMultiChannel:{value(r,n,i,s,a,o){let u=[],l,c;for(l=0;l<i;l++){let f=[];for(c=0;c<n.length;)f.push(n[c++][l]||[]);u.push(re.concatFloat32(f,s))}return re.getDecodedAudio(r,u,s,a,o)}},inflateDynEncodeString:{value(r){return r=Ml(r),new Promise(n=>{let i=String.raw`dynEncode012804c7886d(‰›•)((()>+ˆ*§§)§ˆ,§§§§)§ˆ+§§§)§+.-()(*)-+)(ˆ.7*§)i¸¸,3§(i¸¸,3/G+.••—š¡*(,˜ŽŽ(,3‡‡‰˜‡Š‰›+)2å:-œ),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)’^*<H,H(P*4’U((I-H(H*i0’J,^*DH+H-H*œšI+H,I*4)33H(H*H)“^*DH(H+H)^*@H+i§H)œi§›™3æ*).§K(iH“I/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)œ’J.H.W)(i)’c)(H,i)“I,H-i*’I-4)33i(I.*hH(V)(H+n5(H(i*’I-i(I,i)I.+hH,i*’J+iHn,hi(I-i*I,+hH,H/’H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)œ’J(H(V)(J(i)’c)(H)H(i)œ’H,c)(3H*i*’I*H,i)’I,4(3(-H(H,’W)(H-’I-H,i*’I,4)3(3(3H,H-’I1H+I,H.i)œH1V)(“J.i(v5(33H.-H(H,’i(c)(H,i*’I,4)333–)-§i*I*+§H*iHn,hiž73H,H(i)8(H+šJ+H)P*(H*’V)(J-“r,§H)P*,H.i)œ’H+H,“i)œ’V)(-H*i*’I*H+i)œI+H-H.’I.H,H-’i)œI,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7’H,c)(i)H+i´8’W)(œH,’I,H+i*’I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,’H-b((3H(P*0i)’I.4)3H-i¨*n5*H-iÅ*s,hiž73H-i)œJ+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)œJ+i¸7’V)(H(H+iø7’V)(8(’J/H(P*0J+s,hi73H+H,H.’J,’I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+’H.H+H/“’U((b((H(H(P*0i)’J+^*0H,i)“I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)žc)(H,i*’I,H+i)’I+4)33i)I-3H-3!2)0§K(i2“J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,’J(H,P*8J/s50H,H.i+’J0^*<i¦I*H.H,P*4J1’J.U(*H.U((J2›i')o5/H.U()I.H,H(^*<H0H1’U((H.i0œJ.i§›i0ži')™o5/H/H.H2šJ*H(’J.q50H,P*0J/H*’I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0’H(H1’U((b((H/i)’I/H(i)’I(H*i)“I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-’H(’i0c)(H(i*’I(4)33iè1i1H,i-’iÈ*8)Bi(I(+hH(ido,hH,i-’H(’i-c)(H(i*’I(4)33iÈ6iè6H,i-’iF8)BiØ1i)b((41-H,i-’H(’i/c)(H(i*’I(4)3(3(-H,i-’H(’i1c)(H(i*’I(4)3(3(-H,i-’H(’i0c)(H(i*’I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)’^*TH,H,iø-’^*PH,H,iX’^*LH,H,i(’^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iErš5)H(i©*’I1H-i)’I0i(i;H.i,’J(i(H(i(rCJ(“J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-’H-V)(i)œ’H,i+8(c)(H/i)“I/H-i*’I-H*i)’I*4)-H(i)œi¨1’I/+hH(H*o,hH,i-’H/V)(i)œ’i(c)(H/i*’I/H(i)’I(4)33i¤I*H,iø-’H,i¸)’H,i-’i;8)5+H0H1’I2i(I-+hH-H2p,hH,H,iP’8*J*i(p5-H*i7u,hH,i-’H-i)œ’H*c)(H-i)’I-4*3i(I/i+I.i+I(*h*h*hH*i8“6*(*)3H-m,hi£I*403H-i)œH,’W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.’J(H-’J.p,hi¢I*4.3H,i-’H-i)œ’I*+hH(,hH*H/c)(H*i*’I*H(i)“I(4)-H.I-4+3(3(33H,W)1m,hiŸI*4,3H,iø-’H,i¸)’H,i-’H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-’o5,3H,i(’H,iX’H,i-’H1i)œ’H08)J(,hi I*H(i(p5,H0H,V)šH,V)˜’o5,3H,H,iP’H,iH’8+I*4+3(3(3H,i$6i¬78+I*3H*H3šm5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2’L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(‹(›(«(Ë(ë( (*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7œ‰šœ‡Ž‰œš›*S7•œ‰Š”U”—Љ”›S0›‘–U œ`;re.getModule(re,i).then(s=>WebAssembly.instantiate(s,{})).then(({exports:s})=>{let a=new Map(Object.entries(s)),o=a.get("puff"),u=a.get("memory").buffer,l=new t(u),c=new DataView(u),f=a.get("__heap_base"),d=r.length,h=f;f+=4,c.setInt32(h,d,!0);let m=f;f+=d,l.set(r,m);let g=f;f+=4,c.setInt32(g,l.byteLength-f,!0),o(f,g,m,h),n(l.slice(f,f+c.getInt32(g,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(r,n,i)=>{let s=[],a=0;for(;a<n;)s.push(r.slice(a*i,a++*i+i));return s},this.allocateTypedArray=(r,n,i=!0)=>{let s=this._wasm.malloc(n.BYTES_PER_ELEMENT*r);return i&&this._pointers.add(s),{ptr:s,len:r,buf:new n(this._wasm.HEAP,s,r)}},this.free=()=>{this._pointers.forEach(r=>{this._wasm.free(r)}),this._pointers.clear()},this.codeToString=r=>{let n=[],i=new Uint8Array(this._wasm.HEAP);for(let s=i[r];s!==0;s=i[++r])n.push(s);return String.fromCharCode.apply(null,n)},this.addError=(r,n,i,s,a,o)=>{r.push({message:n,frameLength:i,frameNumber:s,inputBytes:a,outputSamples:o})},this.instantiate=(r,n)=>(n&&re.setModule(r,n),this._wasm=new r(re).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var Qu=im(ju(),1);var F0=()=>globalThis.Worker||Qu.default,zn=class extends F0(){constructor(e,r,n,i){re.modules||new re;let s=re.modules.get(n);if(!s){let a="text/javascript",o,u=`'use strict';(${((l,c,f)=>{let d,h,m=new Promise(g=>{h=g});self.onmessage=({data:{id:g,command:p,data:y}})=>{let v=m,x={id:g},b;p==="init"?(Object.defineProperties(l,{WASMAudioDecoderCommon:{value:c},EmscriptenWASM:{value:f},module:{value:y.module},isWebWorker:{value:!0}}),d=new l(y.options),h()):p==="free"?d.free():p==="ready"?v=v.then(()=>d.ready):p==="reset"?v=v.then(()=>d.reset()):(Object.assign(x,d[p](Array.isArray(y)?y.map(_=>new Uint8Array(_)):new Uint8Array(y))),b=x.channelData?x.channelData.map(_=>_.buffer):[]),v.then(()=>self.postMessage(x,b))}}).toString()})(${n}, ${re}, ${i})`;try{o=typeof process.versions.node<"u"}catch{}s=o?`data:${a};base64,${Buffer.from(u).toString("base64")}`:URL.createObjectURL(new Blob([u],{type:a})),re.modules.set(n,s)}super(s,{name:r}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:a})=>{let{id:o,...u}=a;this._enqueuedOperations.get(o)(u),this._enqueuedOperations.delete(o)},new i(re).getModule().then(a=>{this.postToDecoder("init",{module:a,options:e})})}async postToDecoder(e,r){return new Promise(n=>{this.postMessage({command:e,id:this._id,data:r}),this._enqueuedOperations.set(this._id++,n)})}get ready(){return this.postToDecoder("ready")}async free(){await this.postToDecoder("free").finally(()=>{this.terminate()})}async reset(){await this.postToDecoder("reset")}};var Sa=(t,e)=>{Object.defineProperty(t,"name",{value:e})};var ne=Symbol,Ju=", ",z=(()=>{let t="front",e="side",r="rear",n="left",i="center",s="right";return["",t+" ",e+" ",r+" "].map(a=>[[n,s],[n,s,i],[n,i,s],[i,n,s],[i]].flatMap(o=>o.map(u=>a+u).join(Ju)))})(),lt="LFE",qt="monophonic (mono)",jt="stereo",Ii="surround",oe=(t,...e)=>`${[qt,jt,`linear ${Ii}`,"quadraphonic",`5.0 ${Ii}`,`5.1 ${Ii}`,`6.1 ${Ii}`,`7.1 ${Ii}`][t-1]} (${e.join(Ju)})`,Ri=[qt,oe(2,z[0][0]),oe(3,z[0][2]),oe(4,z[1][0],z[3][0]),oe(5,z[1][2],z[3][0]),oe(6,z[1][2],z[3][0],lt),oe(7,z[1][2],z[2][0],z[3][4],lt),oe(8,z[1][2],z[2][0],z[3][0],lt)],ed=192e3,td=176400,Aa=96e3,Ma=88200,rd=64e3,Qt=48e3,Nn=44100,Un=32e3,Hn=24e3,Vn=22050,Gn=16e3,Ea=12e3,La=11025,Wn=8e3,nd=7350,rt="absoluteGranulePosition",H="bandwidth",Ae="bitDepth",Me="bitrate",Fi=Me+"Maximum",Bi=Me+"Minimum",Di=Me+"Nominal",ct="buffer",Oi=ct+"Fullness",te="codec",Ee=te+"Frames",zi="coupledStreamCount",Xn="crc",Ni=Xn+"16",Ui=Xn+"32",J="data",O="description",ut="duration",Kn="emphasis",Hi="hasOpusPadding",Be="header",Jt="isContinuedPacket",Vi="isCopyrighted",er="isFirstPage",Gi="isHome",De="isLastPage",Tt="isOriginal",Ct="isPrivate",Wi="isVbr",Ie="layer",T="length",U="mode",kt=U+"Extension",Ta="mpeg",Pt=Ta+"Version",Xi="numberAACFrames",Ki="outputGain",Qr="preSkip",$i="profile",Ca=ne(),It="protection",El="rawData",Xe="segments",G="subarray",tr="version",Jr="vorbis",Zi=Jr+"Comments",$n=Jr+"Setup",ka="block",Yi=ka+"ingStrategy",Pa=ne(),Rt=ka+"Size",rr=ka+"size0",nr=ka+"size1",qi=ne(),Ia="channel",Ft=Ia+"MappingFamily",ji=Ia+"MappingTable",Le=Ia+"Mode",Qi=ne(),F=Ia+"s",id="copyright",Ji=id+"Id",es=id+"IdStart",Bt="frame",Dt=Bt+"Count",Re=Bt+"Length",Ra="Number",Ot=Bt+Ra,dt=Bt+"Padding",N=Bt+"Size",sd="Rate",ts="inputSample"+sd,Ll="page",en=Ll+"Checksum",Zn=ne(),ir=Ll+"SegmentTable",de=Ll+"Sequence"+Ra,Tl="sample",rs=Tl+Ra,K=Tl+sd,ft=ne(),$=Tl+"s",Fa="stream",ns=Fa+"Count",is=Fa+"Info",ht=Fa+"Serial"+Ra,Cl=Fa+"StructureVersion",kl="total",tn=kl+"BytesOut",rn=kl+"Duration",nn=kl+"Samples",Y=ne(),Ke=ne(),ss=ne(),sr=ne(),nt=ne(),Ba=ne(),Pl=ne(),ar=ne(),j=ne(),$e=ne(),Ze=ne(),mt=ne(),or=ne(),Da=ne(),it=ne(),st=ne(),Ye=ne(),Oa=ne(),Te=Uint8Array,lr=DataView,Q="reserved",Ce="bad",Yn="free",as="none",za="16bit CRC";var Il=(t,e,r)=>{for(let n=0;n<t[T];n++){let i=e(n);for(let s=8;s>0;s--)i=r(i);t[n]=i}return t},D0=Il(new Te(256),t=>t,t=>t&128?7^t<<1:t<<1),le=[Il(new Uint16Array(256),t=>t<<8,t=>t<<1^(t&32768?32773:0))],ce=[Il(new Uint32Array(256),t=>t,t=>t>>>1^(t&1)*3988292384)];for(let t=0;t<15;t++){le.push(new Uint16Array(256)),ce.push(new Uint32Array(256));for(let e=0;e<=255;e++)le[t+1][e]=le[0][le[t][e]>>>8]^le[t][e]<<8,ce[t+1][e]=ce[t][e]>>>8^ce[0][ce[t][e]&255]}var od=t=>{let e=0,r=t[T];for(let n=0;n!==r;n++)e=D0[e^t[n]];return e},ld=t=>{let e=t[T],r=e-16,n=0,i=0;for(;i<=r;)n^=t[i++]<<8|t[i++],n=le[15][n>>8]^le[14][n&255]^le[13][t[i++]]^le[12][t[i++]]^le[11][t[i++]]^le[10][t[i++]]^le[9][t[i++]]^le[8][t[i++]]^le[7][t[i++]]^le[6][t[i++]]^le[5][t[i++]]^le[4][t[i++]]^le[3][t[i++]]^le[2][t[i++]]^le[1][t[i++]]^le[0][t[i++]];for(;i!==e;)n=(n&255)<<8^le[0][n>>8^t[i++]];return n},cd=t=>{let e=t[T],r=e-16,n=0,i=0;for(;i<=r;)n=ce[15][(t[i++]^n)&255]^ce[14][(t[i++]^n>>>8)&255]^ce[13][(t[i++]^n>>>16)&255]^ce[12][t[i++]^n>>>24]^ce[11][t[i++]]^ce[10][t[i++]]^ce[9][t[i++]]^ce[8][t[i++]]^ce[7][t[i++]]^ce[6][t[i++]]^ce[5][t[i++]]^ce[4][t[i++]]^ce[3][t[i++]]^ce[2][t[i++]]^ce[1][t[i++]]^ce[0][t[i++]];for(;i!==e;)n=ce[0][(n^t[i++])&255]^n>>>8;return n^-1},ls=(...t)=>{let e=new Te(t.reduce((r,n)=>r+n[T],0));return t.reduce((r,n)=>(e.set(n,r),r+n[T]),0),e},Oe=t=>String.fromCharCode(...t),ad=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],os=t=>ad[t&15]<<4|ad[t>>4],Na=class{constructor(e){this._data=e,this._pos=e[T]*8}set position(e){this._pos=e}get position(){return this._pos}read(e){let r=Math.floor(this._pos/8),n=this._pos%8;return this._pos-=e,(os(this._data[r-1])<<8)+os(this._data[r])>>7-n&255}},ud=(t,e)=>{try{return t.getBigInt64(e,!0)}catch{let r=t.getUint8(e+7)&128?-1:1,n=t.getUint32(e,!0),i=t.getUint32(e+4,!0);return r===-1&&(n=~n+1,i=~i+1),i>1048575&&console.warn("This platform does not support BigInt"),r*(n+i*2**32)}};var cs=class{constructor(e,r){this._onCodecHeader=e,this._onCodecUpdate=r,this[it]()}[st](){this._isEnabled=!0}[it](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[Da](e,r){if(this._onCodecUpdate){this._bitrate!==e&&(this._bitrate=e,this._codecShouldUpdate=!0);let n=this._codecUpdateData.get(this._headerCache.get(this._currentHeader));this._codecShouldUpdate&&n&&this._onCodecUpdate({bitrate:e,...n},r),this._codecShouldUpdate=!1}}[j](e){let r=this._headerCache.get(e);return r&&this._updateCurrentHeader(e),r}[$e](e,r,n){this._isEnabled&&(this._codecHeaderSent||(this._onCodecHeader({...r}),this._codecHeaderSent=!0),this._updateCurrentHeader(e),this._headerCache.set(e,r),this._codecUpdateData.set(r,n))}_updateCurrentHeader(e){this._onCodecUpdate&&e!==this._currentHeader&&(this._codecShouldUpdate=!0,this._currentHeader=e)}};var he=new WeakMap,ve=new WeakMap;var ke=class{constructor(e,r){this._codecParser=e,this._headerCache=r}*[Pl](){let e;do{if(e=yield*this.Frame[Ze](this._codecParser,this._headerCache,0),e)return e;this._codecParser[Ke](1)}while(!0)}*[ar](e){let r=yield*this[Pl](),n=ve.get(r)[T];if(e||this._codecParser._flushing||(yield*this.Header[j](this._codecParser,this._headerCache,n)))return this._headerCache[st](),this._codecParser[Ke](n),this._codecParser[sr](r),r;this._codecParser[nt](`Missing ${Bt} at ${n} bytes from current position.`,`Dropping current ${Bt} and trying again.`),this._headerCache[it](),this._codecParser[Ke](1)}};var sn=class{constructor(e,r){ve.set(this,{[Be]:e}),this[J]=r}};var ze=class extends sn{static*[Ze](e,r,n,i,s){let a=yield*e[j](n,i,s);if(a){let o=he.get(a)[Re],u=he.get(a)[$],l=(yield*n[Y](o,s))[G](0,o);return new r(a,l,u)}else return null}constructor(e,r,n){super(e,r),this[Be]=e,this[$]=n,this[ut]=n/e[K]*1e3,this[Ot]=null,this[tn]=null,this[nn]=null,this[rn]=null,ve.get(this)[T]=r[T]}};var Rl="unsynchronizationFlag",Fl="extendedHeaderFlag",Bl="experimentalFlag",Dl="footerPresent",us=class t{static*getID3v2Header(e,r,n){let s={},a=yield*e[Y](3,n);if(a[0]!==73||a[1]!==68||a[2]!==51||(a=yield*e[Y](10,n),s[tr]=`id3v2.${a[3]}.${a[4]}`,a[5]&15)||(s[Rl]=!!(a[5]&128),s[Fl]=!!(a[5]&64),s[Bl]=!!(a[5]&32),s[Dl]=!!(a[5]&16),a[6]&128||a[7]&128||a[8]&128||a[9]&128))return null;let o=a[6]<<21|a[7]<<14|a[8]<<7|a[9];return s[T]=10+o,new t(s)}constructor(e){this[tr]=e[tr],this[Rl]=e[Rl],this[Fl]=e[Fl],this[Bl]=e[Bl],this[Dl]=e[Dl],this[T]=e[T]}};var Ne=class{constructor(e){he.set(this,e),this[Ae]=e[Ae],this[Me]=null,this[F]=e[F],this[Le]=e[Le],this[K]=e[K]}};var pd={0:[Yn,Yn,Yn,Yn,Yn],16:[32,32,32,32,8],240:[Ce,Ce,Ce,Ce,Ce]},Ua=(t,e,r)=>8*((t+r)%e+e)*(1<<(t+r)/e)-8*e*(e/8|0);for(let t=2;t<15;t++)pd[t<<4]=[t*32,Ua(t,4,0),Ua(t,4,-1),Ua(t,8,4),Ua(t,8,0)];var O0=0,z0=1,N0=2,U0=3,dd=4,Ha="bands ",Va=" to 31",fd={0:Ha+4+Va,16:Ha+8+Va,32:Ha+12+Va,48:Ha+16+Va},an="bitrateIndex",ds="v2",$a="v1",Ga="Intensity stereo ",Wa=", MS stereo ",Xa="on",Ka="off",H0={0:Ga+Ka+Wa+Ka,16:Ga+Xa+Wa+Ka,32:Ga+Ka+Wa+Xa,48:Ga+Xa+Wa+Xa},Ol={0:{[O]:Q},2:{[O]:"Layer III",[dt]:1,[kt]:H0,[$a]:{[an]:N0,[$]:1152},[ds]:{[an]:dd,[$]:576}},4:{[O]:"Layer II",[dt]:1,[kt]:fd,[$]:1152,[$a]:{[an]:z0},[ds]:{[an]:dd}},6:{[O]:"Layer I",[dt]:4,[kt]:fd,[$]:384,[$a]:{[an]:O0},[ds]:{[an]:U0}}},zl="MPEG Version ",hd="ISO/IEC ",V0={0:{[O]:`${zl}2.5 (later extension of MPEG 2)`,[Ie]:ds,[K]:{0:La,4:Ea,8:Wn,12:Q}},8:{[O]:Q},16:{[O]:`${zl}2 (${hd}13818-3)`,[Ie]:ds,[K]:{0:Vn,4:Hn,8:Gn,12:Q}},24:{[O]:`${zl}1 (${hd}11172-3)`,[Ie]:$a,[K]:{0:Nn,4:Qt,8:Un,12:Q}},length:T},G0={0:za,1:as},W0={0:as,1:"50/15 ms",2:Q,3:"CCIT J.17"},md={0:{[F]:2,[O]:jt},64:{[F]:2,[O]:"joint "+jt},128:{[F]:2,[O]:"dual channel"},192:{[F]:1,[O]:qt}},on=class t extends Ne{static*[j](e,r,n){let i={},s=yield*us.getID3v2Header(e,r,n);s&&(yield*e[Y](s[T],n),e[Ke](s[T]));let a=yield*e[Y](4,n),o=Oe(a[G](0,4)),u=r[j](o);if(u)return new t(u);if(a[0]!==255||a[1]<224)return null;let l=V0[a[1]&24];if(l[O]===Q)return null;let c=a[1]&6;if(Ol[c][O]===Q)return null;let f={...Ol[c],...Ol[c][l[Ie]]};if(i[Pt]=l[O],i[Ie]=f[O],i[$]=f[$],i[It]=G0[a[1]&1],i[T]=4,i[Me]=pd[a[2]&240][f[an]],i[Me]===Ce||(i[K]=l[K][a[2]&12],i[K]===Q)||(i[dt]=a[2]&2&&f[dt],i[Ct]=!!(a[2]&1),i[Re]=Math.floor(125*i[Me]*i[$]/i[K]+i[dt]),!i[Re]))return null;let d=a[3]&192;if(i[Le]=md[d][O],i[F]=md[d][F],i[kt]=f[kt][a[3]&48],i[Vi]=!!(a[3]&8),i[Tt]=!!(a[3]&4),i[Kn]=W0[a[3]&3],i[Kn]===Q)return null;i[Ae]=16;{let{length:h,frameLength:m,samples:g,...p}=i;r[$e](o,i,p)}return new t(i)}constructor(e){super(e),this[Me]=e[Me],this[Kn]=e[Kn],this[dt]=e[dt],this[Vi]=e[Vi],this[Tt]=e[Tt],this[Ct]=e[Ct],this[Ie]=e[Ie],this[kt]=e[kt],this[Pt]=e[Pt],this[It]=e[It]}};var fs=class t extends ze{static*[Ze](e,r,n){return yield*super[Ze](on,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var hs=class extends ke{constructor(e,r,n){super(e,r),this.Frame=fs,this.Header=on,n(this[te])}get[te](){return Ta}*[mt](){return yield*this[ar]()}};var X0={0:"MPEG-4",8:"MPEG-2"},K0={0:"valid",2:Ce,4:Ce,6:Ce},$0={0:za,1:as},Z0={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},Y0={0:Aa,4:Ma,8:rd,12:Qt,16:Nn,20:Un,24:Hn,28:Vn,32:Gn,36:Ea,40:La,44:Wn,48:nd,52:Q,56:Q,60:"frequency is written explicitly"},gd={0:{[F]:0,[O]:"Defined in AOT Specific Config"},64:{[F]:1,[O]:qt},128:{[F]:2,[O]:oe(2,z[0][0])},192:{[F]:3,[O]:oe(3,z[1][3])},256:{[F]:4,[O]:oe(4,z[1][3],z[3][4])},320:{[F]:5,[O]:oe(5,z[1][3],z[3][0])},384:{[F]:6,[O]:oe(6,z[1][3],z[3][0],lt)},448:{[F]:8,[O]:oe(8,z[1][3],z[2][0],z[3][0],lt)}},ln=class t extends Ne{static*[j](e,r,n){let i={},s=yield*e[Y](7,n),a=Oe([s[0],s[1],s[2],s[3]&252|s[6]&3]),o=r[j](a);if(o)Object.assign(i,o);else{if(s[0]!==255||s[1]<240||(i[Pt]=X0[s[1]&8],i[Ie]=K0[s[1]&6],i[Ie]===Ce))return null;let l=s[1]&1;i[It]=$0[l],i[T]=l?7:9,i[Ca]=s[2]&192,i[ft]=s[2]&60;let c=s[2]&2;if(i[$i]=Z0[i[Ca]],i[K]=Y0[i[ft]],i[K]===Q)return null;i[Ct]=!!c,i[Qi]=(s[2]<<8|s[3])&448,i[Le]=gd[i[Qi]][O],i[F]=gd[i[Qi]][F],i[Tt]=!!(s[3]&32),i[Gi]=!!(s[3]&8),i[Ji]=!!(s[3]&8),i[es]=!!(s[3]&4),i[Ae]=16,i[$]=1024,i[Xi]=s[6]&3;{let{length:f,channelModeBits:d,profileBits:h,sampleRateBits:m,frameLength:g,samples:p,numberAACFrames:y,...v}=i;r[$e](a,i,v)}}if(i[Re]=(s[3]<<11|s[4]<<3|s[5]>>5)&8191,!i[Re])return null;let u=(s[5]<<6|s[6]>>2)&2047;return i[Oi]=u===2047?"VBR":u,new t(i)}constructor(e){super(e),this[Ji]=e[Ji],this[es]=e[es],this[Oi]=e[Oi],this[Gi]=e[Gi],this[Tt]=e[Tt],this[Ct]=e[Ct],this[Ie]=e[Ie],this[T]=e[T],this[Pt]=e[Pt],this[Xi]=e[Xi],this[$i]=e[$i],this[It]=e[It]}get audioSpecificConfig(){let e=he.get(this),r=e[Ca]+64<<5|e[ft]<<5|e[Qi]>>3,n=new Te(2);return new lr(n[ct]).setUint16(0,r,!1),n}};var ms=class t extends ze{static*[Ze](e,r,n){return yield*super[Ze](ln,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var ps=class extends ke{constructor(e,r,n){super(e,r),this.Frame=ms,this.Header=ln,n(this[te])}get[te](){return"aac"}*[mt](){return yield*this[ar]()}};var cr=class t extends ze{static _getFrameFooterCrc16(e){return(e[e[T]-2]<<8)+e[e[T]-1]}static[Oa](e){let r=t._getFrameFooterCrc16(e),n=ld(e[G](0,-2));return r===n}constructor(e,r,n){r[is]=n,r[Ni]=t._getFrameFooterCrc16(e),super(r,e,he.get(r)[$])}};var yd="get from STREAMINFO metadata block",q0={0:"Fixed",1:"Variable"},bd={0:Q,16:192};for(let t=2;t<16;t++)bd[t<<4]=t<6?576*2**(t-2):2**t;var j0={0:yd,1:Ma,2:td,3:ed,4:Wn,5:Gn,6:Vn,7:Hn,8:Un,9:Nn,10:Qt,11:Aa,15:Ce},Q0={0:{[F]:1,[O]:qt},16:{[F]:2,[O]:oe(2,z[0][0])},32:{[F]:3,[O]:oe(3,z[0][1])},48:{[F]:4,[O]:oe(4,z[1][0],z[3][0])},64:{[F]:5,[O]:oe(5,z[1][1],z[3][0])},80:{[F]:6,[O]:oe(6,z[1][1],lt,z[3][0])},96:{[F]:7,[O]:oe(7,z[1][1],lt,z[3][4],z[2][0])},112:{[F]:8,[O]:oe(8,z[1][1],lt,z[3][0],z[2][0])},128:{[F]:2,[O]:`${jt} (left, diff)`},144:{[F]:2,[O]:`${jt} (diff, right)`},160:{[F]:2,[O]:`${jt} (avg, diff)`},176:Q,192:Q,208:Q,224:Q,240:Q},J0={0:yd,2:8,4:12,6:Q,8:16,10:20,12:24,14:Q},ur=class t extends Ne{static _decodeUTF8Int(e){if(e[0]>254)return null;if(e[0]<128)return{value:e[0],length:1};let r=1;for(let a=64;a&e[0];a>>=1)r++;let n=r-1,i=0,s=0;for(;n>0;s+=6,n--){if((e[n]&192)!==128)return null;i|=(e[n]&63)<<s}return i|=(e[n]&127>>r)<<s,{value:i,length:r}}static[Ye](e,r){let n={[Y]:function*(){return e}};return t[j](n,r,0).next().value}static*[j](e,r,n){let i=yield*e[Y](6,n);if(i[0]!==255||!(i[1]===248||i[1]===249))return null;let s={},a=Oe(i[G](0,4)),o=r[j](a);if(o)Object.assign(s,o);else{if(s[Pa]=i[1]&1,s[Yi]=q0[s[Pa]],s[qi]=i[2]&240,s[ft]=i[2]&15,s[Rt]=bd[s[qi]],s[Rt]===Q||(s[K]=j0[s[ft]],s[K]===Ce)||i[3]&1)return null;let l=Q0[i[3]&240];if(l===Q||(s[F]=l[F],s[Le]=l[O],s[Ae]=J0[i[3]&14],s[Ae]===Q))return null}s[T]=5,i=yield*e[Y](s[T]+8,n);let u=t._decodeUTF8Int(i[G](4));if(!u||(s[Pa]?s[rs]=u.value:s[Ot]=u.value,s[T]+=u[T],s[qi]===96?(i[T]<s[T]&&(i=yield*e[Y](s[T],n)),s[Rt]=i[s[T]-1]+1,s[T]+=1):s[qi]===112&&(i[T]<s[T]&&(i=yield*e[Y](s[T],n)),s[Rt]=(i[s[T]-1]<<8)+i[s[T]]+1,s[T]+=2),s[$]=s[Rt],s[ft]===12?(i[T]<s[T]&&(i=yield*e[Y](s[T],n)),s[K]=i[s[T]-1]*1e3,s[T]+=1):s[ft]===13?(i[T]<s[T]&&(i=yield*e[Y](s[T],n)),s[K]=(i[s[T]-1]<<8)+i[s[T]],s[T]+=2):s[ft]===14&&(i[T]<s[T]&&(i=yield*e[Y](s[T],n)),s[K]=((i[s[T]-1]<<8)+i[s[T]])*10,s[T]+=2),i[T]<s[T]&&(i=yield*e[Y](s[T],n)),s[Xn]=i[s[T]-1],s[Xn]!==od(i[G](0,s[T]-1))))return null;if(!o){let{blockingStrategyBits:l,frameNumber:c,sampleNumber:f,samples:d,sampleRateBits:h,blockSizeBits:m,crc:g,length:p,...y}=s;r[$e](a,s,y)}return new t(s)}constructor(e){super(e),this[Ni]=null,this[Yi]=e[Yi],this[Rt]=e[Rt],this[Ot]=e[Ot],this[rs]=e[rs],this[is]=null}};var ep=2,tp=512*1024,cn=class extends ke{constructor(e,r,n){super(e,r),this.Frame=cr,this.Header=ur,n(this[te])}get[te](){return"flac"}*_getNextFrameSyncOffset(e){let r=yield*this._codecParser[Y](2,0),n=r[T]-2;for(;e<n;){if(r[e]===255){let s=r[e+1];if(s===248||s===249)break;s!==255&&e++}e++}return e}*[mt](){do{let e=yield*ur[j](this._codecParser,this._headerCache,0);if(e){let r=he.get(e)[T]+ep;for(;r<=tp;){if(this._codecParser._flushing||(yield*ur[j](this._codecParser,this._headerCache,r))){let n=yield*this._codecParser[Y](r);if(this._codecParser._flushing||(n=n[G](0,r)),cr[Oa](n)){let i=new cr(n,e);return this._headerCache[st](),this._codecParser[Ke](r),this._codecParser[sr](i),i}}r=yield*this._getNextFrameSyncOffset(r+1)}this._codecParser[nt](`Unable to sync FLAC frame after searching ${r} bytes.`),this._codecParser[Ke](r)}else this._codecParser[Ke](yield*this._getNextFrameSyncOffset(1))}while(!0)}[or](e){return e[de]===0?(this._headerCache[st](),this._streamInfo=e[J][G](13)):e[de]===1||(e[Ee]=ve.get(e)[Xe].map(r=>{let n=ur[Ye](r,this._headerCache);if(n)return new cr(r,n,this._streamInfo);this._codecParser[nt]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(r=>!!r)),e}};var un=class t{static*[j](e,r,n){let i={},s=yield*e[Y](28,n);if(s[0]!==79||s[1]!==103||s[2]!==103||s[3]!==83||(i[Cl]=s[4],s[5]&248))return null;i[De]=!!(s[5]&4),i[er]=!!(s[5]&2),i[Jt]=!!(s[5]&1);let o=new lr(Te.from(s[G](0,28))[ct]);i[rt]=ud(o,6),i[ht]=o.getInt32(14,!0),i[de]=o.getInt32(18,!0),i[en]=o.getInt32(22,!0);let u=s[26];i[T]=u+27,s=yield*e[Y](i[T],n),i[Re]=0,i[ir]=[],i[Zn]=Te.from(s[G](27,i[T]));for(let l=0,c=0;l<u;l++){let f=i[Zn][l];i[Re]+=f,c+=f,(f!==255||l===u-1)&&(i[ir].push(c),c=0)}return new t(i)}constructor(e){he.set(this,e),this[rt]=e[rt],this[Jt]=e[Jt],this[er]=e[er],this[De]=e[De],this[ir]=e[ir],this[de]=e[de],this[en]=e[en],this[ht]=e[ht]}};var gs=class t extends sn{static*[Ze](e,r,n){let i=yield*un[j](e,r,n);if(i){let s=he.get(i)[Re],a=he.get(i)[T],o=a+s,u=(yield*e[Y](o,0))[G](0,o),l=u[G](a,o);return new t(i,l,u)}else return null}constructor(e,r,n){super(e,r),ve.get(this)[T]=n[T],this[Ee]=[],this[El]=n,this[rt]=e[rt],this[Ui]=e[en],this[ut]=0,this[Jt]=e[Jt],this[er]=e[er],this[De]=e[De],this[de]=e[de],this[$]=0,this[ht]=e[ht]}};var qn=class extends ze{constructor(e,r,n){super(r,e,n)}};var xd={0:Ri.slice(0,2),1:Ri},qe="SILK-only",_e="CELT-only",Za="Hybrid",dr="narrowband",Ya="medium-band",fr="wideband",jn="super-wideband",Qn="fullband",rp={0:{[U]:qe,[H]:dr,[N]:10},8:{[U]:qe,[H]:dr,[N]:20},16:{[U]:qe,[H]:dr,[N]:40},24:{[U]:qe,[H]:dr,[N]:60},32:{[U]:qe,[H]:Ya,[N]:10},40:{[U]:qe,[H]:Ya,[N]:20},48:{[U]:qe,[H]:Ya,[N]:40},56:{[U]:qe,[H]:Ya,[N]:60},64:{[U]:qe,[H]:fr,[N]:10},72:{[U]:qe,[H]:fr,[N]:20},80:{[U]:qe,[H]:fr,[N]:40},88:{[U]:qe,[H]:fr,[N]:60},96:{[U]:Za,[H]:jn,[N]:10},104:{[U]:Za,[H]:jn,[N]:20},112:{[U]:Za,[H]:Qn,[N]:10},120:{[U]:Za,[H]:Qn,[N]:20},128:{[U]:_e,[H]:dr,[N]:2.5},136:{[U]:_e,[H]:dr,[N]:5},144:{[U]:_e,[H]:dr,[N]:10},152:{[U]:_e,[H]:dr,[N]:20},160:{[U]:_e,[H]:fr,[N]:2.5},168:{[U]:_e,[H]:fr,[N]:5},176:{[U]:_e,[H]:fr,[N]:10},184:{[U]:_e,[H]:fr,[N]:20},192:{[U]:_e,[H]:jn,[N]:2.5},200:{[U]:_e,[H]:jn,[N]:5},208:{[U]:_e,[H]:jn,[N]:10},216:{[U]:_e,[H]:jn,[N]:20},224:{[U]:_e,[H]:Qn,[N]:2.5},232:{[U]:_e,[H]:Qn,[N]:5},240:{[U]:_e,[H]:Qn,[N]:10},248:{[U]:_e,[H]:Qn,[N]:20}},Jn=class t extends Ne{static[Ye](e,r,n){let i={};if(i[F]=e[9],i[Ft]=e[18],i[T]=i[Ft]!==0?21+i[F]:19,e[T]<i[T])throw new Error("Out of data while inside an Ogg Page");let s=r[0]&3,a=s===3?2:1,o=Oe(e[G](0,i[T]))+Oe(r[G](0,a)),u=n[j](o);if(u)return new t(u);if(o.substr(0,8)!=="OpusHead"||e[8]!==1)return null;i[J]=Te.from(e[G](0,i[T]));let l=new lr(i[J][ct]);if(i[Ae]=16,i[Qr]=l.getUint16(10,!0),i[ts]=l.getUint32(12,!0),i[K]=Qt,i[Ki]=l.getInt16(16,!0),i[Ft]in xd&&(i[Le]=xd[i[Ft]][i[F]-1],!i[Le]))return null;i[Ft]!==0&&(i[ns]=e[19],i[zi]=e[20],i[ji]=[...e[G](21,i[F]+21)]);let c=rp[248&r[0]];switch(i[U]=c[U],i[H]=c[H],i[N]=c[N],s){case 0:i[Dt]=1;break;case 1:case 2:i[Dt]=2;break;case 3:i[Wi]=!!(128&r[1]),i[Hi]=!!(64&r[1]),i[Dt]=63&r[1];break;default:return null}{let{length:f,data:d,channelMappingFamily:h,...m}=i;n[$e](o,i,m)}return new t(i)}constructor(e){super(e),this[J]=e[J],this[H]=e[H],this[Ft]=e[Ft],this[ji]=e[ji],this[zi]=e[zi],this[Dt]=e[Dt],this[N]=e[N],this[Hi]=e[Hi],this[ts]=e[ts],this[Wi]=e[Wi],this[U]=e[U],this[Ki]=e[Ki],this[Qr]=e[Qr],this[ns]=e[ns]}};var ys=class extends ke{constructor(e,r,n){super(e,r),this.Frame=qn,this.Header=Jn,n(this[te]),this._identificationHeader=null,this._preSkipRemaining=null}get[te](){return"opus"}[or](e){return e[de]===0?(this._headerCache[st](),this._identificationHeader=e[J]):e[de]===1||(e[Ee]=ve.get(e)[Xe].map(r=>{let n=Jn[Ye](this._identificationHeader,r,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[Qr]);let i=n[N]*n[Dt]/1e3*n[K];return this._preSkipRemaining>0&&(this._preSkipRemaining-=i,i=this._preSkipRemaining<0?-this._preSkipRemaining:0),new qn(r,n,i)}this._codecParser[Ba]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),e}};var ei=class extends ze{constructor(e,r,n){super(r,e,n)}};var Nl={};for(let t=0;t<8;t++)Nl[t+6]=2**(6+t);var bs=class t extends Ne{static[Ye](e,r,n,i){if(e[T]<30)throw new Error("Out of data while inside an Ogg Page");let s=Oe(e[G](0,30)),a=r[j](s);if(a)return new t(a);let o={[T]:30};if(s.substr(0,7)!=="vorbis")return null;o[J]=Te.from(e[G](0,30));let u=new lr(o[J][ct]);if(o[tr]=u.getUint32(7,!0),o[tr]!==0||(o[F]=e[11],o[Le]=Ri[o[F]-1]||"application defined",o[K]=u.getUint32(12,!0),o[Fi]=u.getInt32(16,!0),o[Di]=u.getInt32(20,!0),o[Bi]=u.getInt32(24,!0),o[nr]=Nl[(e[28]&240)>>4],o[rr]=Nl[e[28]&15],o[rr]>o[nr])||e[29]!==1)return null;o[Ae]=32,o[$n]=i,o[Zi]=n;{let{length:l,data:c,version:f,vorbisSetup:d,vorbisComments:h,...m}=o;r[$e](s,o,m)}return new t(o)}constructor(e){super(e),this[Fi]=e[Fi],this[Bi]=e[Bi],this[Di]=e[Di],this[rr]=e[rr],this[nr]=e[nr],this[J]=e[J],this[Zi]=e[Zi],this[$n]=e[$n]}};var xs=class extends ke{constructor(e,r,n){super(e,r),this.Frame=ei,n(this[te]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[te](){return Jr}[or](e){e[Ee]=[];for(let r of ve.get(e)[Xe])if(r[0]===1)this._headerCache[st](),this._identificationHeader=e[J],this._setupComplete=!1;else if(r[0]===3)this._vorbisComments=r;else if(r[0]===5)this._vorbisSetup=r,this._mode=this._parseSetupHeader(r),this._setupComplete=!0;else if(this._setupComplete){let n=bs[Ye](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?e[Ee].push(new ei(r,n,this._getSamples(r,n))):this._codecParser[logError]("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")}return e}_getSamples(e,r){let i=this._mode.blockFlags[e[0]>>1&this._mode.mask]?r[nr]:r[rr],s=this._prevBlockSize===null?0:(this._prevBlockSize+i)/4;return this._prevBlockSize=i,s}_parseSetupHeader(e){let r=new Na(e),n={count:0,blockFlags:[]};for(;(r.read(1)&1)!==1;);let i;for(;n.count<64&&r.position>0;){os(r.read(8));let s=0;for(;r.read(8)===0&&s++<3;);if(s===4)i=r.read(7),n.blockFlags.unshift(i&1),r.position+=6,n.count++;else{((os(i)&126)>>1)+1!==n.count&&this._codecParser[nt]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var Ul=class{constructor(e,r,n){this._codecParser=e,this._headerCache=r,this._onCodec=n,this._continuedPacket=new Te,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[te](){return this._codec||""}_updateCodec(e,r){this._codec!==e&&(this._headerCache[it](),this._parser=new r(this._codecParser,this._headerCache,this._onCodec),this._codec=e)}_checkCodecSupport({data:e}){let r=Oe(e[G](0,8));switch(r){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",ys),!0;case(/^\x7fFLAC/.test(r)&&r):return this._updateCodec("flac",cn),!0;case(/^\x01vorbis/.test(r)&&r):return this._updateCodec(Jr,xs),!0;default:return!1}}_checkPageSequenceNumber(e){e[de]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&e[de]>1&&this._codecParser[nt]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[de]}`),this._pageSequenceNumber=e[de]}_parsePage(e){this._isSupported===null&&(this._pageSequenceNumber=e[de],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);let r=ve.get(e),n=he.get(r[Be]),i=0;if(r[Xe]=n[ir].map(s=>e[J][G](i,i+=s)),this._continuedPacket[T]&&(r[Xe][0]=ls(this._continuedPacket,r[Xe][0]),this._continuedPacket=new Te),n[Zn][n[Zn][T]-1]===255&&(this._continuedPacket=ls(this._continuedPacket,r[Xe].pop())),this._previousAbsoluteGranulePosition!==null&&(e[$]=Number(e[rt]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[rt],this._isSupported){let s=this._parser[or](e);return this._codecParser[sr](s),s}else return e}},vs=class extends ke{constructor(e,r,n){super(e,r),this._onCodec=n,this.Frame=gs,this.Header=un,this._streams=new Map,this._currentSerialNumber=null}get[te](){let e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[mt](){let e=yield*this[ar](!0);this._currentSerialNumber=e[ht];let r=this._streams.get(this._currentSerialNumber);return r||(r=new Ul(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,r)),e[De]&&this._streams.delete(this._currentSerialNumber),r._parsePage(e)}};var Hl=()=>{},_s=class{constructor(e,{onCodec:r,onCodecHeader:n,onCodecUpdate:i,enableLogging:s=!1,enableFrameCRC32:a=!0}={}){this._inputMimeType=e,this._onCodec=r||Hl,this._onCodecHeader=n||Hl,this._onCodecUpdate=i,this._enableLogging=s,this._crc32=a?cd:Hl,this[it]()}get[te](){return this._parser?this._parser[te]:""}[it](){this._headerCache=new cs(this._onCodecHeader,this._onCodecUpdate),this._generator=this._getGenerator(),this._generator.next()}*flush(){this._flushing=!0;for(let e=this._generator.next();e.value;e=this._generator.next())yield e.value;this._flushing=!1,this[it]()}*parseChunk(e){for(let r=this._generator.next(e);r.value;r=this._generator.next())yield r.value}parseAll(e){return[...this.parseChunk(e),...this.flush()]}*_getGenerator(){if(this._inputMimeType.match(/aac/))this._parser=new ps(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new hs(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new cn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new vs(this,this._headerCache,this._onCodec);else throw new Error(`Unsupported Codec ${mimeType}`);for(this._frameNumber=0,this._currentReadPosition=0,this._totalBytesIn=0,this._totalBytesOut=0,this._totalSamples=0,this._sampleRate=void 0,this._rawData=new Uint8Array(0);;){let e=yield*this._parser[mt]();e&&(yield e)}}*[Y](e=0,r=0){let n;for(;this._rawData[T]<=e+r;){if(n=yield,this._flushing)return this._rawData[G](r);n&&(this._totalBytesIn+=n[T],this._rawData=ls(this._rawData,n))}return this._rawData[G](r)}[Ke](e){this._currentReadPosition+=e,this._rawData=this._rawData[G](e)}[ss](e){this._sampleRate=e[Be][K],e[Be][Me]=e[ut]>0?Math.round(e[J][T]/e[ut])*8:0,e[Ot]=this._frameNumber++,e[tn]=this._totalBytesOut,e[nn]=this._totalSamples,e[rn]=this._totalSamples/this._sampleRate*1e3,e[Ui]=this._crc32(e[J]),this._headerCache[Da](e[Be][Me],e[rn]),this._totalBytesOut+=e[J][T],this._totalSamples+=e[$]}[sr](e){if(e[Ee]){if(e[De]){let r=e[$];e[Ee].forEach(n=>{let i=n[$];r<i&&(n[$]=r>0?r:0,n[ut]=n[$]/n[Be][K]*1e3),r-=i,this[ss](n)})}else e[$]=0,e[Ee].forEach(r=>{e[$]+=r[$],this[ss](r)});e[ut]=e[$]/this._sampleRate*1e3||0,e[nn]=this._totalSamples,e[rn]=this._totalSamples/this._sampleRate*1e3||0,e[tn]=this._totalBytesOut}else this[ss](e)}_log(e,r){if(this._enableLogging){let n=[`${te}: ${this[te]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${tn}: ${this._totalBytesOut}`],i=Math.max(...n.map(s=>s[T]));r.push(`--stats--${"-".repeat(i-9)}`,...n,"-".repeat(i)),e("codec-parser",r.reduce((s,a)=>s+`
4
+ `+a,""))}}[nt](...e){this._log(console.warn,e)}[Ba](...e){this._log(console.error,e)}};var vd=_s;var qa=Ee;var ja=J;var _d=Be;var wd=De;var Sd=$n;var Ad=nn;function zt(t){var e=e;function r(){}e={};function n(I){throw I}var i,s,a,o,u,l,c,f,d,h,m;function g(){var I=m.buffer;i=new Int8Array(I),s=new Int16Array(I),o=new Uint8Array(I),u=new Uint16Array(I),a=new Int32Array(I),l=new Uint32Array(I),c=new Float32Array(I),f=new Float64Array(I),d=new BigInt64Array(I),h=new BigUint64Array(I)}for(var p=I=>{for(var Ge,bi,Sn=0,ea=0,ta=I.length,ra=new Uint8Array((ta*3>>2)-(I[ta-2]=="=")-(I[ta-1]=="="));Sn<ta;Sn+=4,ea+=3)Ge=V[I.charCodeAt(Sn+1)],bi=V[I.charCodeAt(Sn+2)],ra[ea]=V[I.charCodeAt(Sn)]<<2|Ge>>4,ra[ea+1]=Ge<<4|bi>>2,ra[ea+2]=bi<<6|V[I.charCodeAt(Sn+3)];return ra},y=()=>n(""),v=()=>{},x={},b=I=>I(),_=()=>performance.now(),S=(I,Ge)=>{if(x[I]&&(clearTimeout(x[I].id),delete x[I]),!Ge)return 0;var bi=setTimeout(()=>{delete x[I],b(()=>ou(I,_()))},Ge);return x[I]={id:bi,timeout_ms:Ge},0},w=Math.atan,L=Math.cos,C=Math.exp,A=Math.log,k=Math.pow,R=Math.sin,B=I=>{var Ge=o.length;return I>>>=0,!1},P=I=>{throw`exit(${I})`},V=new Uint8Array(123),se=25;se>=0;--se)V[48+se]=52+se,V[65+se]=se,V[97+se]=26+se;V[43]=62,V[47]=63;var Wr={e:y,d:v,f:S,b:w,a:L,i:C,h:A,g:k,c:R,k:B,j:P};function Js(I){yi=I.n,tu=I.o,ru=I.p,nu=I.q,iu=I.r,su=I.s,au=I.t,ou=I.v}var yi,tu,ru,nu,iu,su,au,ou;function qh(I){I.m()}zt.wasm||Object.defineProperty(zt,"wasm",{get:()=>String.raw`dynEncode012091253f87dì%nä= 4&¿nÝØä‘ÂLÚªã9ÚØ[äº\ ¼¡³R=}L]ŸÈÿ2 ÿù¶J1jj¡é,zäV|i¸Qk¹‡= 
5
+ ¨¨Ÿ%‰€ýv²†±»ŸoúâLa:ê±ÊäÌÓ.÷؇ý×>àW>z¯°8¯ñ€\Ñós 9ˆ\§ôÊ@Ü (tÂø4° ¢7fqÓg²Jè6x[zç®&4=} p.(°tÍޖ™ã¾>÷CõË"*k?¿~ 7‚~H2ÛÜâ.ÏQä;Œ6{ÜãFÑá'DœD¤±°HQ>MínÎϕÎöʵ’Ñӓ…™Þ“‰Ž‘š†Š‚œÌP¼P¨Þˆ*X²E=M¦qíxMà ±=M̚ë4/<šgNO‰™/¢ ¢>ˆa~Ï®”ììììì0”ìœa笡çëOÓÇM Q9tùµyuéµµÞϒ/Ÿ±Óõò}E{òÓJ¹Û|· ôfÒ c’¬”Wêaûÿlʽp¹|)‘ÖEL–†¦ }‰ypÕSϹI†]¢ˆºãæ°ÿo¶7ÛRqš¾ÔÅEߨ‘]æˉwÚ{óç‰Vwó1¾”E­Øpˆàe"Æùû–¡Áª ‡ Ààð´Lõ›€ÎxEÓ¢N¦‘…9Ÿëùši&€ Ò§Ø!ÇFçS=MbäO?ß·™縪‡7ùa}5ðšûÕtsUŒþ£Kïg‡ˆN™¾)ø§\V0uSIö:ÌU4ж¯´Õn9ÔƒèE£ZƼ{hµmى¾6ÆžÑ+xñ´«„þ¸=M‚ߤ·å®«ïÆGFÝì|H?äE"þ!9«Æïpæ'][¯ù·£W÷O§&#aŸ‡x$qf=}ø ô bϗŸ×W÷LôožÝWQÕӎ)u †÷½èV|¥Gà¨Ö¸˜@Œê| ÇK5ò €A·Â9’CS2š¸‹¼¿,ä›Ý ÑÝy™!ÑR„%ÆÝÎ0Âv§ qTcó±hØÉã‰=}Z=}Ælü­ën¯ð(-°ÜwVχï.th¥í­‡S~SÏ»Z”ZÔZ
6
+ 3–BÌÛ¬•<éæO)ÎyÚ¯O*®uìÛ$öI¥Ý9ôø³\¤ò³Ù¹ÇP¸J׎y@ÔyOÇm—’ô½üœš¾|S?2àú¤F?½ûoo3ôž;<àáûܘ8‚ì²7ïë¨RäY¹|ÓºÌF,ƒÐ™-¸*\P!FJÒ8= o6HwLrúº”¶Ð۞\Ù¬o¢–9Iq„Ý.ôf¶Îȏ{Ī×N|Mfs…•¤ „ÉݖàŸâ§‘*+ã§­’ô¯î¬7ç×§ä)€Š!Z¨ƒÉž,Äp~ý·wsSGó—äs„E€\ýï鞧Ö:Ò'“Cç(_X$\¦½eҒ8$’X˜F|e‚•œíٙә‚†¡¤Û<ØÞÛ¸9‰¿ðÃÎ#b~× ‚4éîÿÏq
7
+ ˜ód‡|0•wU‰—&®è·vh6¨—{Ú珁Ú18ә(ÓY‚\ƒ0¦= çˆèíß)Ø=} ˜[xü-v˜?N(Kk‘gš0}âډ´ð“†¬”œÕQNÍ¢usѳ=}. ëg…û= Í M—Bp'²¨ œx’4è@9t“§eݵ¾âð½ z?†‹Z¹FH'‰Ì¯¿<ŒK,üµ<{˜ ¶JãývåàÆeù0Ð"F¥ÃÒÞŽþԛÉvC›zl}„ðN’£ Í^ƒP%²¸FX»WÎêô¶…ŠäÉJ^gƒ×SÃã.žÄt*'ªG‘«ÒB<ÜӅ¿ºp­\àuV¯£›Åݑ½á–Þ ùߞ=}ÎÚ^‹Ÿÿí>¥!¨ â=M·? */¤"å)â·ÿîÿî*(%*›2[½"üríÔ4š’l½»a}¯CwpCÓèìGc-ã6®=M32†k?Êg­…–!So-™x›>³G+ã@ò,™ Áïƒá„åN0þŠÙ‚è.~È÷¡vTr¶‰­‚Æ[üB±º»ávëw¹{pÜºû"Aæ’±9Æ^¹³òïRIAy5GÂwÉfœ4@Tù|qý7†ðªwBL|ÔqŽ‘v!ª°|]KiÐJVQ5‰¸åõ§‡‡åŒ"H¼0e¬<óBîÚS€ÏUìHPÙA+çÉ'se†ÌNf°@ÈM,ð½egÖ¬x©“„‹û½2~«ŠÒ1;ֈ«…¯°4&90èE»Ó׺ç‚ʧJ<Æ¿&~Nu¼ãÙµ¢.UÇä(qQô^ö–·“%!É
8
+ w¬= Îôª«…Ùת…JIS;õa rx×£.6¤ž°>5²Åà,õ°°h6ûUp©²v#}%é‘= R¢hõ@ëQiJٔ\ÛpŸ»©[vsiÙLE UG*sGÄ%V­¸Ч;º_]c؄p#¡:oZ{ãS5I¥]ÓaÎg+n×ýÿ‚Txy]²ö°k¦kêju¼xÐTá©#h>Ù]u\EA+§…퀤u¦ü؁lQPdë„NòzyÞ¼X€Ð]—ˆšÝøÝg¸BŠI¿BÕð_Ël¶Cuyºr|<¾¨Támo5êÿú>Ɓ[ã±G¨²)ü&áòüåBFouŠ!Íí.jÖìß½8¥Yëìá›ÈÁi—)‡qÀ:ÎüÐր¤Gͳô>°ú¯øâ?R£k~&ÑãÞ~AŠ¢;Ð' àÆUÀ»Lž­×)‚-!ÿkýí›Ù
9
+ §Û\{¤ólW^næzk?G~?_5™uÝñ7-ß«6YPðGßÚù\Êê -ûp¥èÓtM×hKȯ›ÒBAê"ïx×HÍ0Ôcè+èçÛÅf (§¢õ®%K£7éÞQ'MxãxÐúр…2!8_6̶Ì6ÌrûùS¥ZƒóAIŒüå6¿jÿ_°(ÿšä9©CCÄ!bŒq5Öô×x{ÍbÆÚmÒ@«µ××~҄D“;*ü ùeŽÀÞ·xˆv¾;¤Šƒ7¾ƒ[W\ýüb›@'q㵋ÙâÉE¾}}“tq-g=}Üs¢5Ó=}$Ĉ§£€Ó~SFÎgтn†N>1§/¥¸ŸG5àM8#ŠƒÒ;2¢/K%›–xVÓ(X„ H>µ¬ü;_˜j~Æw<¾ô*»ô= fAËbM¼iÀI Ip'c*”:oY¡VÖ3ˆ‹ûIdû®4ڍûýÆð}ûN¥û–I
10
+ Š¥ÎŒÛK*]Ø=M>t×ý³MwE”™è®"ۂ4­]]ÓgØ×EÈ.pN°¡ š»¤ç/I.ÿ+6 r@«Âz@§Bz@¯ÂIê-tí‡Ü«°·GföjϘÕì:žgÕ‡UÖ=}÷¦|§Eõ̐$a*¸›s¬´«£¯JÞàãËt™$š GSÚ³Ë1¯©&|±c!\åvçϷѸãßñ]á¸?ùää%6´= #e—¬Â;IÚ¡õckCÀò*\ï—0À•¿<>ªžÈåJA'ï´—¾ME.@OüІ0ex÷#2ÒùúµƒÇ½>o{›«ó= žÔïŸ;ǽ¶óЉ/†—Ô͌܂€¤±¢Ê’…w>ÃâС¯œ®Üa£¹6ŽVý  v†áÂh‘ôàÍ8˜D!Æ!ÆI;¢á܎Ž!oÑÙ …OÏKôò=}w<0rT= 5J„_±3×Ì;ôYÐ<aÞꏹ¾7ßz\˼Ûۙ@>Â{å%K¯º'ÊmÚòÁjRÒ×úw€@' ( €=}­QU«ÐÁђ•„,/?úYE‘yºQ얬Ÿ {ÇLÕæõNáð#f>_ò#Îv]˜/øÏ¾TUšà/øÀAÔ' w]€Ã]€W”•w]€Ã]‘X­÷Þn‹ð·TbAåÉ r¨4?t²„>1Ç[áüx  $€-ÒÂM†Ä…§·µwsú>üÂ&³÷.dgA¦h²*G× öcG×µF5¸Êqª$ñ?¦vÿ<ã;ÿs­Òi›ÇXòku®vUòõ•cuæÊ¦á«þ¸‹ÍŠ
11
+ ÑʑƒuãE"þ!6Ø Êæ­}}onË:W”•½¶‰˜«ÊFˆuÃÝUS-1ÀÕHòzµöƒ?ov»®¦‡
12
+ CyÈçaÆ
13
+ pÛ¢&{µ¨«‡±1˜EXÆÂu.7ž˜÷²ÛJ’Ê‚y[å²µ»bL’?·×øèìCp:æÕé§·rUèésÜ[o²ÛòDòDހ]ªä#çN’;Ïð)â´*z8 0Úèóª1çE¯´Rì,D4H(øË)šgp=Mý«û»=Mþt8º‡-HœxH”}Æ3Rt?ïɤC
14
+ §ßìéõm†õ,;æðk=M6ЦuSÝ^贮ٙ6=}掍†ƒóO«>
15
+ yÒîÐ7‰a'ûLUöø>ò -6Y(¬ÀM’Z¾ZHpu°c«à±[t*Ç*jwÇÍ$Áíqx©SwћËR¥é®[XJŒÓ8=}üµnt9“ÚÏ3z½¼¢[Q2Þ¸/=MP§Y&y=}ÚÛw—ëý¡—àߥۧÃŽþòýÁœÝÈìûê(±€¹4š'€ïÌ:Ûùk=}eªãä ÒCKA¤Æy×nvȧmÿŸ;=M]¿ÕŸ€Õjԋ–ª sF>úÔ©áÄ:cÀÆ<$|ê'!גSb¢V¿oÇåGð™¢U™ÊŒ u¤ZJýæÔÿÿ 2ç썯h£‹f¾Q–ZãÁ ®‚ 쭔Ç'ÎÅ[¸¨‰{?¢ÉhS5o›ƒU½c¢ÈÂÜ»JZmUí\áùµV6Bète™Ÿ…~Ãw‰÷0ÕஜísÆk,{ý¦ û‚iK+xvÅ兺ñ ‡a”[Sé»Û Nõòý¬ßà¨= 7p’å^ÿÃW,¿*M½áR±Ì–‰³FcË<üiÏ2|ö^vKÏHœò¹uY“bk¿mZ¡Oš^ÿç©~ïj°È”7 Žl©¨ç”_ó¼'½ßªåÏn \ O,wòi,Ū-¿?ð­}òÁá=MÍ®ÿ²›EÍñ™Â}¨³ô-ýƳúŠù5†6MÃ6ÓJz=}p³žûê—™9õà垫TM×Ve>G~ŒÙ»Vü²öHByf<õ©˜ +QWƒF+.ßAŽGÔ¦ÏèÚ½‚3‚ˆâÏYÀ¿T¢¸6ÌéɓÐ*¸Öª”ÏrÍëá=}6‰/U´ÃךZœþðóW.½ÞQ¼¾Æ”qÅ ‰½‡oâäB-ÓU‡€J¬má8øª€K.Œy±>.Q¡a0ޙ#!,¥BÞ¼­S?Ìr^¿_Ö.¹ó{=}/äÈAt}Æè̼4¡—Ôîgl]ÌUEý{}|DÏä–:°š-Ñÿ°=}àØéÕ}Êñøðº~¹¯4Yƒqm¹]!ºÿ=Mõ«ˆ‹ :ІNl"SÇps¸Gåȧá+’'M¿ÓîÁ.î¤=}„mÅ8Œ)¶rrHá"ÈøÂìËøÍ€í4ôŒ72bbߺq¿2ô=}A5.YV¬ÑÚã«Þ[F
16
+ )ºhXûÇӔ>È”?p¤ðoUÊÓ(€‚³FpÊi’¡Ð}SÚ~E ”!›|ðí‡,Ç9½Ãë¸Üì!¤ÓÃX%DBãu”&d‡ÔËôŽg¥‹á¾l¿AÉ)Á±†Ñ߇Èßý¹ód;|¤Z€»#ñscµ|¡…ÝOOe^‹ã‹ÂxÝ‹Í]¯òbÏ£÷ð4½ïÖ³;û/ºsñÆðFØIn²q¢©”*× kdO+÷削ҀiÉݱîBr]LÜ|8ƒ~7“vts÷9l|aë»EânӜ´GGò„$ÍR,<e0i¿ª
17
+ ±¾…àsÓZJ¨?&%Æ~-ǵª‡ö±;ól"=MLgÿt#
18
+ ü˜2 <Àn¬ÉäÍôÿ®É1S’Ä›à–= ôñZ¥-@z;¯‰üà¹ìJ͑=} ÊSeBÞ¯´~¢s mÿŽ-¨CozÀ/;Çël&uñZÖPV«¤¼Ÿ´ÀïY҄™˜–~—=}DrƒâgC §›ý çšrÆ7âÃ$ÿ¤Ý˜˜š~ސÝo@°³ٖsŸ;ozûÀ~R§ú"¶ü/ôcæ<œ°^Ôã/žéo•w×ër¦_UgûÀøäâkHț{&ÏMëqÀYÈLÁÊG†bÙéŸ:ˆš·q]ä\™PÔëÒ¤a£1è]á…^Y[›Sw¶å²¹gÒ0ód^žÈT.WœÄÜ[ՙ‹ ˆÙ*Hi®z¹µu}ýuý}#ú=}‹ÇÌRSûç—Mø=}¹¹>±ÿì¨áØ[R?ÿ^‰„¦ñê¾xZRS^PSSSç1ù}݈Zá4‡fffdf¨ Õˈw&eÜ$hä'{»Moöyg8¹ê¶@ìƒÛª0-ó•¯:¹ e{™†%<ÎÖ›}Þ¤v’ª6¡Àõ÷Gh8= “FºKVñ.ºHÅ)<Ñ= xs¥B“E;;áF¡·!¡-ÀYԖå^Ö'l̯ßûç¥køÞ‚?[ë>†" -9±/€ÊÛGǘ 6OY4VÕ»ºƒ[öBÿ:B¡WÍ&½ÇÎç »Î= 0y恧§5àÁFiA•›Í²®Ê\¿<î!xÞ³E =M¬U/ݾssæ¶µ·O̐0§GûúñŸòŸ¯{^/~ä׫ÊB = ;4¤þû–^Öï÷ŽL÷ï_ñíx<õ;ó5ËÇ~¾V+䅒lƒ¼Ñ°«Ôí¾)Âfš‘żo¼ÖùWa1køìFvœûëûRQ‡ø]q’| ï0g–…ºúîy["FÐþ7^‰Ò‰RµÚèæøÔyÚ
19
+ «ãŽˆi Þ@ˆ…U¾¸»* è#ò-ì¶HÛé¢ùL”;}·O7…7ÅsLæþý8¿Óùñ£}.=  Œ<•¾=M£ðQKTà^O|¸üggH«0³i£im¼_2ÿö”úÕ¨LaO+&]L¤šÞ+,k Þ¶Ñ~T¤ÂHì ÊèèÕÀíÒ³M܈‘ô~J<¤0Yð¢´."»â›èÄxqe%o݂yå—æâ¹25UÐ/’Þe.×´Øì_æ¯_zRÏíšÑŸ@ÿôLc¥Íðy@YΦ}µZ:ÑÂgZÒÒ(©¢‹9 ß €Yˆ«¦:™“v„ÙëÎ€ZJâÀVsOt™UÖ Ò¬¹‡1ûÚG´OÃóG©‚)œniÇí
20
+ Ô}½Ž3:.ˆk]ý²ÂB=M~ –ùÚYp95½‡qýãë ÐÞ/¡(ä'§œúºE/ê«ÌŸ9Ÿý%Ú!<σžJP&|[ƒ,gz’ű¡\o•0™Ôhûóþ“œ¶[KêÍð= TjÃVñ¸ƒƒD¼Ð_Ò
21
+ Ÿ0Ø_1dPðt  ýtZ¾r ù àJf^ƒ”;Ô2éÐ=}è¤B~ŸDšñ7ûÓÁ9³ýbA6ZØ´èÃg½ñóø.:~ï ]bªZŒì¿Ö²2QÄßo¥-¼Öá5uu/u³ òD‡œ;gjÀ‰ê”ÃÇ|eÁ9¬u$*ÐÁ'ÓDelÀëäì¥Ò¤Zší6OÂ@âF0-J÷¤=}_Õ߬ÒlÚM½Ç˜ôó~ð76›DEÖ'ds´Ùï”ÝßøaÊbÑ «‡^“™Í}&àØå?¾ÍF\2HD5òèÁƈd˓„dÈ·6ÙPÑ“|¬Ôq*Ê>ƒ0š¸Cì(ÛX‚YV…²ý Ipъí‹M k֔ů}Íóôc7“ÅŸbrñÐeQŒXæ©Æ¯ü_Û»‚˜ÝMþ©.c–kg fq ôo@qRL°šÅ‘Y΂ˆÈ»d'™<±+±î‰,Z­-GG»ø$âG†vÇû µA~YF5"§)ð™fßÐ鸉oJRRŝ¿ŽôXÝaú.QMw1 1þøiSo¾®È²¸hÌ/Κ })fBr.G1£Šº×cÎ𥰹&WÈüAnŒo#g ÃàLi²¥8ó=}dä¥$ŗ(³0h¢0OjfÀr¡6*#àæ"ãûQ?ƒ›ñ±«²Xóä*hïx=}ÎÞ¬výÞV÷{u²cöê¡h¯QÏYaê‚L$¦ûÈçIGßþEýWöºýëÛߐý×Ïð“i G´ì=M¦”ßÁý' þºeâNւ7ϝ/сuž·6rۇF¾Œ¾aUÌÓiÜúÒ]¶éUY*= g[ 2-_• c:ðY)
22
+ ‘¼9ŠîK¨‡£8†o•Sˆå¶K4U>+¯Ãî[H\wâRVœê/÷~Ðn•m”–¨s8CÏö©Ø%ÀašªS]ý޼§ r_¸ƒk‘
23
+ ªµfÄéÒQæ2¹Ão¹&3žžÇ¢u c5ë6}Í:B£Ž´1uiˆèÑfa’‹&]ävCŸ‚Ox·"³L˜Tè.€I.ÊÍzB!:FÏëxS´Q{ ÊõZ7Uh8yÝfDÎ dÔX3‰Q± ½–=MnØ nÅc"@;f?ª¬nû0Lp´h„,¸#Mà->+C= Ê¡±‘­^ٗ= ®Â¬QôÅùî
24
+ ‰öqòbŽß=}‡•±ÕAË/8RzT³…‘ÃÌ/_îMvÛ«;7S ìN4
25
+ ìŽo7è_¤ÀܕñŸÜ©è^U‰±A{Éö”žìŒXtnÝÇvz
26
+  ½½Ùo¨’‘çaúâ?EH”Ä»ë"‘±cÀÁEB]acgdck
27
+ ËÁ˜EŽv›ÇڄM:¸2¼"ŒûŽc³Ï‰1mA]ø[à= Ý|«oÒ&¡® ¡ŽK$ÚiPÚÛaº!ÊI#?3 ÄLoxJò¹<•$$»¢”¸h.ˆ‡ÕY¡‹g Û30ׁ ‡¶~ÃtéR0 ‰ni6ôeìa—z(¸9°Ù=}ocî†#üR{¶ù*×<Ç‹\Ès„a>#¿]¤š(R F×X#¢¯mVRòºÃ 0ã51ï‚íDÅVs“t‘ °YÎ=}ø ´·Ç”F ‡ØÕÓ¡ð—(B
28
+ €YS= '0“#×KB<rÔôþMz8”ï³tíY­S\¿©æ sŒ¢‡3~ÏcɃÜ[öÝ-y£îu(´{©ueŸØÝª g× »c*5쐣¡“І>¢9®Œïîêzr{½¢j|W¯Cú²‘"žÆ¼¦Xçt,òYCIV‡µX#¥‰_Žæ)‡3è "9†ûã)‰e…0߸Ûͤ³.¥>„å*ÁpƒepœŽQkîtÎڠŶïoÔ¸>³5„5Î= †Á¿rà†3S\ÌÒªs0 iæméŠQúR|Žë²­FA€è Áç-šÚýFå˜3$qϒ3˜+w؋<üªUþvü‘£b”)Ný¯j ;0õ”}᪟’[6k WÇíH® ¨{2Jþ!y+‹(-òÉýÎlœ SÆ_¼òu8¼z¸Rîùq_fGHî?{vTgeÒU<S’^£(îl=MéáDÛ¶­ùM·Ä7^õÿ
29
+ Ø£™ $\ öv=M¦†px™6+ã*àÀìî{ølÊEy9² hω³!ÕÑjú¸ò5pG£¸fëp šƒ‹‹N_::û\RQ[⣮M¿L#8¢ÑPk5]ý«¢zžg»güš åÐÒöí<ô â~ÂÔîtýX‚ÙñµE® :¼VBͼ çtnHç­|Ï0[óoûŠM™>h}ìAö…":Vk=M©l\äÓröQR}8qeV<J"†ÈFäíûI_Ó㎫D–ûëôzïå‘JNHŽeÛpµš…×8挓ƏPI¦û-t£sp£i¼äsç)’ç%0eq#„ôFør\ÃÁs•×CP÷ú½˜ÿ”qH²}EéÏtjT‰i.•Òþ¡=M%ä¸Õ’“ِe½_ëÝ;+ÏÁ9ó+ä·9:„׎´irxb@åÄä*Ý •
30
+ ²íC­K„‹Ý»@‡;ö4Päü
31
+ c ãJ1«õãLPµ“ŒêY‚àn12ȯÙI…r+˜= ¶/gýZ³#³}~å0ž´„ú¾dȑwûŠ{ ”èÒY­uŒvëNô›ºô[í&öõ¼[9Ø6
32
+ >ßNçRÆÛeí“u?ìý hWõM^8<˜ã*lkê@uú.FzFë=M-ûhêlT±ÏÌÚ®Eã¾ˆd¹P±¨à<ÛÉ‹Ê6åÉì’Î7Qv¬ÎÊýžì–$ºÑz†Ø'”¨mІØÒº´€ZM°o9=}óÃQ·»¾LW·:+¯˜’‡©p §àÕ<Ïí2†gþá1é9|R‹ówàutHý8ºï@¬^ŠŽ¢W¶—©ê ]ð½6ςOô¼<±Š—GãQ~V§xâ­ü1éUM&CÞÍ|„A<^ES¸3‘4
33
+ “Z!¡–Ú܋a7Î0¤q1çÖ'©~É ™‰ÙWüã­)¼ðÁê1…¡é)ˆ&n¬'eÚ!6¹¾P;<dm-TŠ©ÂñPÿoà¿§Úì4¢Î³¬¬iTÑ9ËÀêIqþdiÉNì=MW­H&¨rÅ«q,ì9C6/¤t«ô= ªK5Â#f¿%Î)¦k Aù4jFœv7üÃ*-Ð\é̗:œÄ²21 .›œ¨½ü,= åÔ3VI¯¾¸þ¼¥ÂÆÏç^g°(QÿiÕ¬•ª|ï
34
+ Êáu¹ÎÖ¥U“UÁ­YE¸ã²öÌÐm®~—wø%þz„êÑ5\5oF–n$»9³™mi6šzj1séGd¯Éؐ ‚å2(0¬>nE¥âV˜Çú°ŽÜé›Õ]þ´–Ýsא7ãû<ŠÞë§¶§V "íٜC'—œaÓXK£¯üYü›­úl^~¦¡—Rû!“=MÜPa´…_Cë.0£\}À±QP›9woÙæQù§j˜KŽõ û@É+gI4…wÖü.Û _éš4GÆ·#ÛxEh6–;L]¥2¥á5üP4õuÅ >›çò-ç»ë é;]÷ÑÑY¶•Œ v…Pö%‚!̝§8÷PÛ'rö§ÙßÏËí»kæ@æ{¨ËC4¬P¶Œ  ’óڄÈsåÍý£ÎxŽ)ÜØNóÐ3õÜMüB‚¡Å–ø‚×½»#»Ã-á;Ì'œ€‹Æz{ã­MòÆ0в>‡v‘©Ø¯³û#iàBé]á¹F{srP†Zá:ó‚öCŽÜ±ÀÃÊ—õ†p^kñþv1_Lç9νdŸØ¶ƒ+u¥ ˜æÌ·’ó“l~«‘Ù„îû­µŒ‰ ŒÕÔebyˆÞ«880Lˆ²5ìæôvZÉQ—¦HV/€ïF{8M*˜Áý¶ºÂؙO~ü‚3|ŽØx¨>Œ¹…çû֓ú;êŸ$hÌz~ç1Hún41eÆOXØ&É¡:h'¢yÓSvðxåÊ:µÆ-Ð)ì•_ä;k@%"’w¨s“
35
+ ËØJ‘­V+á~àé4È'QØÇÝøÄ|^ Ç)"¥0Ǥ„Ðñ kÂe\0¤|>ÿI÷ä’ÒÝýÔ]¶;L qìÅR¥-bE]Ârʏý#8n°»ØÑGø†,RmâAê_Ãpá%/BU#tΊq>ò*öú(Ž$âešò|=M)!‚Ð'¼¹¼R…ÐzsÑxˆ
36
+ ß+Ž.¼¢7â%”‘²0ÿPàiÝPñ¸˜MÏ唀:L兙-üœgß=MƒÅ#MÚ+üfmi®= µ¬³ñ}$ž¨9<og"Ø[x«Æˆ¯+_–ŸÐ N׿jV¦­¥˜#—Dw—$¢øŽ"ÂK**¨N]EB®°Ëß‹„Sâ^í%Í(æé¸ÞögŽÝ¢´Q{Ý»b§Õ×±±hÙ^6Ÿ«Gàý‡QÃe]t„ŠÉ¡šQ¯¡šñ⸸a·12À I¼Æ÷nZQ:bùh<c£5yÞ§è˜~xWÀ“Ûý$õAXÁÓ4Kóݛœ×¼„µ•@ߺøz¶Ñ1s7‰†=MÇ5ö‹¹k±R%×¶Hšâð/
37
+ +Å»ºD’ó(=Mj$×JD ò¡Æÿ¼"@ºqJº&Ïþ”IÑKÍP„çüƒzDjIö
38
+ ¼ììoìì¯íì÷†;#¶º8l”¾k#:âõØ÷¢™ ü‰_ŒWNì¹tjϔuÐÆ>I¿Œ‘y Høœ@u¬BÄÎ5Ûy:LU&–ù•𘆣Rn̵5ZGù<§h¿ËhÙâ²zí¾“¸?J‚àçªIx˜6ìÚËìV£áøˆ¡›h²'ºéÞXQÍНS݌ŒdÖ8هßM†9 ˆS}‰À4To0ömeΦ\ܳtQÖç'Ñ"Á©–l—à¿ö&.ÓÚçï±í¥­£ds¿Œý= ìZÔOäþr;Z©’ê–ÜÔ‰Ðó>B:½î-t®«˜d¶‹L­Ó¨$QèÔDϟ:!ˆì€ Ûq*sª4”xã´®X&(\À¾ŠÊØXA¸¨Åe2PšB…*“S{™é‚Ôce YÆBº©¦lÍX;O²:À‘d¿fQCŠnM‰Ë-ÂÂðǀ£ï¶¡SÚÁdC,KÂÍõÞŽ›=}=}ߛ ”2•y3‚R¤Ö3=}cÐ'Z®¦ž}±)„\‘(YàP8?ÈÚÂԺǶïiXEßÊè= êèŌDÐ&sÙ¦R÷_{Ù±4Ë2 ÆzãT!gU¯CÀ@¼“û7"Ìf ÆúX«à-öRÄ‘•êP$#¹‹oü³ãqŒ¿«í³= sü§{ÿ«·=}ß͕ Žq?¡ÏÙ¨½Ãç×å?ŸgÆ‹ôÝi,×¾ž’Ö³G¾»= ÙM9jA¿œ¬R¶‰Æ'‹s Öæe4æ+6ªƒ—À‚Uùxƒ G›Â+ŠYbçÅÉM"ä˜éÁZ]&ýŠ¡9˜å(¡nn¶1Í^¡<ÞÍeæ†:WæéÓ#4‘Òª“zB˂ÿ:°—5G¬ÛÂÒ(âÄGÿö*ë¶.ï\¶l^Iì°Ô‚üZ™ÖKXSý¨' M¾b]±>Œ0l›ùXŽ(^^¼òçHÂSîÃçàóˆ+!šmû¤šÂp= w¢·nHµÔHŅp™ȝXw]Ž©5"1ü>
39
+ ±XZ^Î9â¦gþ=}oäíçY÷Wé[~Ñ;=M㪓¶&$óÅßah
40
+ ÂãtÛókÿ^ƒÛ7z¶#X‚@ù€rÏ8FŠG"5ĘÐÄ~áUҜ8̭ˎÌe3΍ñЉA’´ºÌ=M¸óÆ~2“Î,ô®dmÖ=}»u¸ÆŸw:á!@…-¾ *ïr±F¿/͒;öMÅÂ1¨:4>&YÏ= ¬]ÜèÁ/4&øö0aM—ÞjR»5bãXq=}A%è9= ži©¸¡l¥nô@ÃOPz—ƒ»wƒÓ”ÝlXœ
41
+ :ÎÛÝ(.Tɏ¬|©Î¾²ð•¬ðÉçiå_*&F×[Ÿ oô8B¦Brþ=M¼-ò»ËÍF? <@üønÍ|ãžxÔr6hÚpÌöç#5‡íl÷.à@]ð‚{¹ø÷ì<Î<ÂuwNLO"_u7°Ïa ÿ\Ìr îÔdðó¶§Ô67¤p£"ªCËu@ïfcOò¯x¸3 ²#lf1}U¬q±ýx¾jõ×»ó±ñ ÀR³.ÙýåПéIcΗ‰ÿ;F? ÛÝkØýóÎó•ø‘6¸'áû=}žœt8Ô]&㰝¿|%BÆ<Šþ·ÎÜ«ëÍ>YUˆÐgæE¡ã(Á…‰
42
+ 8ԐXÀ­vÏʨ¿6bnµ¤GԒÁ¹§\)é«®~žî¿w"Þñ£à/o¯ëOï“r(ÿ
43
+ õOá4–¥àyázƒ¼}·‰æÌ²ìB#ƒÙ„ø }… JÏìN\]=}Înü4V–á‹a›ÉlIA Í<œâ:^&q/nõ×n5;=}Ù,ìâ­|0Bõ=}l;Á¶®äÓ=}a&¼½ó…ß@”ÂU¨¯ÜüHÝØ¯Cþ6ýjÒX_16¿X]~Y~; ×*½ÿÊí²2
44
+ =MQŽ·ämòjybá]Ü Íl# à(‡Kð5ÅôIJßqE|s‘ª±×ÿše¼ˆSÐo“^[ØÞôX‰‚Yá4ô@1³¢ƒ[#ïQ½,CèoJ 9Û «ÐKvnC&Â0 »¼Ž°SäcÑ07 »4NòÚhr/#ÉRƒeÊø?°Oí„ÿójà!c³hziÕ§nËGY³ÿòò,8ä¹àø¸ ¡µ¨X[|.ôóv3<÷£Û1²a<>G¦»…–=M˜lf†*-¨>9C1TQÂñ¬ì(*ø×d²¬p ?n=}ê{ÕÊd\ø\*·×Ré„ÕR_Y>7Û!èc.¢V;$|òè¯+/U€cMX?éŒ9À‘ÌéZ m&Š…,ôvõÓé¶ZÍ<VӞü° Tiš{êC§)ÐCU·RsV$gÖ¦îÁƒ ÖPö4fÃщ>ו¤kc1W\‰åÅ$Çp,%jŽ1âÂ>†¦¹Ð¨–XþùïäœRÜJ¿o {FúйÝÚ³ó£ëQE@mj6¹e¢Ñír»‘{SŽg½ÍRâl¦í"C÷Ö]§@¸š±ë:Â( íQóƒœ9È«Ëîqw±º{i"ÁŽjêévVÏ¿KÐ÷±ñ´ìp¦o.è<wÕʈ¾­Ø/iºdr2S£ú~&‡Oãè.¹
45
+ x*q‘žT·gÀúÛx¢/Ã}ÜYŽñ-•XlEšìøöt„¢Ù6ÀžùG
46
+ ;%eU àQ-ð„ÁÆô+ wcq÷æÍ¸S©Šl¹¾!Û¬O ISüu9=MÊ- !²; ÅUº¿v¶å±ØÆ˜á¾ @ë]Lke1³„,#o™¸òÄé—ξ$ê¯3eI• ŸNö+ãsQøÙö”á9¬Çì<=  !„#\…]ôÅvÉpšˆlñƒEÚt^ÍU•MAϼÆüÓú}Sú",Ú}Î>€P=M¡nOcùÀ˜ÑþQ{¹ˆËÂM{pp‰•Ý5o;Ž„Úþ¨Wå7°S'1Ê= Eºg"¦^€H m?P¾ æcà à°!£!f fT(Ø#ö%P!»3àc= icƒ ‚  Œðü3p £"Øä¨3ðE= Ÿ"˜( Íè±Sàçg>W š9μ5'¹ñ3”•!©Ý¬kD›«êíSã‰Eèí«òªý+L—o~EhÿÙ%á¸ÞÓ®©ÆPq²@¨Ø@Ÿù£u/’§>®\è¹'ÙÞ'ë>Ϛ°cLŠX«züè–CŸõ­NÃö‡q«OëÞk^ÁÞO}a=}¼eŒaþ²ï.5pf°²/‰²Ú±Ë=}‚lZOÁÐÊSy5xŽLQSSOwø‹††›¹¹Aì외;ÔZ$O0‰\6ŒkÃÎrÉŞƟlØ2²_(™zŸ¤&ìL¥âð¼[¬ºIPN¬¸/3†ö¸4†=}s¦•Sgù0ÆíÛàÆ¹(“â¬Ôÿ²Í҅ÁOøVSä®P†þWì»9ƒwx^Ôx”<Ô¥KL¹ihxŽ\ÜpÿÕ;<V³¨Ðòõ«çÛ®6¥Ã†XF<ÿCà)Ss¼4n9ÁƤ%çÊe×X&¼1öÜe¯“¢«†.’iX‹É¾H‡ù;%wì”ØJ|ûCœà•S-Ž(Wú®{®û®“Zñ¢”0“Z夒›, Yðu@­lð T*¨%­ëXæ¤%tÑM̊¾¨ÒsH*sHµ= Í¨‘_T5t|–Ì€ö¯ö"XöNV£mYö”ÇzÿqovÕÀþ.‚V *Šz©æJ:ó’4—pÝH®qû§ÃŽE¬\Ú®‘T±“Œ*W¯2¦<Û¸àăaxâPf<§PªQçhÐù*öÑXª‰ìX»$vÐ
47
+ X©eL ؤóa³”ÝÆõL™ÕæÔº¬š™ôô»ÿ˜4)D=}¯)3Èød;=}ý­ÐNŒÀ"=}™{Ó¬IC¬¼õâh@±óRF¢òZbs9°ö§¦š1„­³az8‘ì‚>+âTªH[Ql|¸ç6¶¥å@i§CšË‰¾Lê–ËGdÔð3Ö¤]äp2ºþW¾’d¿µ(H&b‰3Õ;ë°9Ûeôó„®jdúQÂџTƉûd7 .uo{„Ø<Züºæ:ˆ Š'!Žî»Ø­:iÄ4ŽÓÂÀ,¬ôQÁ]v=}/·tæ5&06…,ø$ʸt¶˜ØMõ‡ô[ªƒVÓÆ=}Ƀæ¨@A¬K¢§«Kä>N¬È”]‘w5øÚ®dC{޼æ‰sœ ÿÛ3_ƅ†OSLœMÔk탦…†ú¿…††{††††¦Y“æÕ»Qÿ›E­L‰$1îì™4‰:›6Æ=MrZ¾6Ày{øA<(†Ål1 dbm7ÎN !‡¬ÛŽlî1_ƒ= ©néµÂåÅd¹¬Vk.d,4Þ3~„L‰òôޟ1ú¦·½d ’=}Ž–q©7švzaY6én˜±Æó¯Ã=M€µ\^F>ÞªëàwÞ»ÏÂËþúækéy¡½‘ãyÝ÷¥³jp'ò…‚°;c9¡Zs&‹×]Ñ]ÝUî«­>_<(¬‡O˜vž Q×*xœu‹òRN*k;*0䅫¦—øÄ…üЩ{ÖÔY—å!1è;å&ÜÃFUfmü&r3ÄèÄQñb)š2ãT#À·ÿ¼%TqˑZs>cU´ƒzuÏ ¸Ú‚uQ=}óÐ-G»ªM(e²ZVꬽv‡¸ ͦO‡T·S°{@R0MðaÀ’fȵ̂_Òú|â<ñ¡îйAé܂”b+™!¡O#*¾ï3¨0âšO"͍xÔûÝ
48
+ ÞÝ'´Gü’ír”-—|zþçW掯›$×[ÙÉJuøAD!>'o0K ¸’5׀=}þ\e8
49
+ ?»þÆüÜ=Mƒ3íúPþræ MׄÖq&@ýÑWnBӐ>7„‹ÜÉTùÜQ¿^®ñ-, å!›'9ìsùÃ4?„šBTu&éçãÎ,?(&ój /¤£™Eà'â£= R(/¤¼=}Íf÷I³•HZépôSG‹ˆÅQ‹¦˜+^@]ñï›GXg€¶ò¤ssÀ ­/µ¨/6ʟbÏ´%°/³~å—¨š5|Še¦U9¢’$BFpŸ´„¢cë±²êÒýœ´f]„ð®ÆÆÓÎa.$ªó=}´Y_ó싌õXóŠ¢Ëï|3;-%ÏS…ˆ)’÷ iTlWôáµa6m u¢Þ>q9 '—I±N}ÞC>hïˆGÒ*Æ·¸PØ ¨)Åéø¯Ë¡yè€Z?1„^B\pü–ž™õôÞ燹à Ôð4‘ÚIšsmQÚÆû¡†Žu™˜°|î–(®±Ø—¬$©•+=M­‘°˜8ggÒò›Cƒ“ÆK€âåþ6…Ä¬Ú \Yý°-дXÇ̇íÁڙË2ñ‚=MdŒÑkhhÉÃd6ñ‚«ŒQt»|Z³Üu ֚Uh——Ï–½çØÛ“}½SýË}˜©)ÛÑÛÇwƒßC ¾ ã't¡a.ÍJãpa/ ÁâÿTV˜Ú´­ý ·ñ¬?{«<
50
+ M2I©O}žš³&ÿ¬øŽu®:”º}‘ëßGnêtF@1«=MÉØ &‡Õeî%~ïNõŠI'‰‘Oöz›:?*<á °TEŲ{Ï¡xÔ©žä¬É®ò%‹}Iù$§ = s~——;Àí–T/ƒ¢•¤ö…ìpg ££»¬údl° „yŠçðÖïf†“ʶúÜÃï¸F÷ÌìÊÝ}}yÑ^Ö½Ì~Hí­ÒȞ٥¶kmzkk£%&¡Ëm„sÖ>ÀA}Ô?ºRËœ%]\:&D¾[,¦Ñ$ÃÐÎìn´cÓ5ÆÑ“ˆŽO[}=}á֍(N¡ñígµ€â9c&=}Ä®ÒξQ,öÔ?è³K'VL¡](ÂVÚCê0ø##{ºŸÿ3¡6ˆ®˜L(¡mÕ"ÕlÆzŽÉؚÌÝ;A ª¸_ ÛÕñXã0î|ò IUÂâwļÃú®ž‚[,ÊZH«§/nŽ’Päõ]eÿõuóšuqú´Å‘³’n=}¸@Ö,–ñ«À7¸£Å½ïoàõ‹› .®—<òò£àzÏq=}þõ– aé¼ù^Қž\¡Êá䄮ù”!MGÓ&„ adePõUሞßá=M tï¸
51
+ ¿.Ç_ò$U+å¯
52
+ w§ÆËp;Ÿt'QŽ$2Œ%$}­¬”ˆ ƒ€^(f%eŸ_0^ Ò¯°j¸ƒkª2{ ™m4‹c™•@U4N-LCæª!˜3gâùㄾFm¬EÇt‹îÏ6’Þ¤•äxN8‘a©Y(O}=}ˆŽ­ÔžWñµ„Öê= W‰¹5(—¹~€o»›%V´¼ÒJÓ°ú:—‚Îų§0V÷zî!°¦Œ¡øðÃL!¦]èdˆ< ÛN´= C¤(Æý>„ñmÇs=}ïû&NK<ë‚'»éŒ_È!ôâ[õ³"¸ÐNV캪6­°Â*v=}7%ÇHßDÌ/2Þ= 5ŽßK9'ë„n"?¿lØdmçþ¼S3µ­¡BÁÞø|4ì X6!ôE¢z@ù}ï„<|à @T¢#\âC‰ËêéÙdU萮8ÂrãÚ·AÙvqФA4ÌÈAäv¤ Ä,½ÛVq^ºÞéçÐ3'Á69÷[΂xÈ»áT•“yþΙÍeúî<=}ÕØq¿Šñ²9Œy×m‡²cžàSÀŠÌëx—écŒ¢b9¤ž¡1c7ÈHD À!xÚÁáò-[xÚ¡xÚÁ¥Å;úxÚÁ¥Å;zxÚ¦Â:z˜ÚÁ¥ÇëŠîAÓûäd¢í"äü;ö'¦&Úlvs¥æ~cQ±¡K¤ÐáXÕnIÆÛ!£à†¿N;Ý&T,){†lH:_}3 Ãø½óÿ{ÎÝxöD= eËjv)j-KtÚF7À›ÍãъòeS³1Ð{!ëwH«1¬È¸Øýi¸0mOPüéyMmOXÂh…¡º<¡!øÎÀ+ÓÿÀU!4޹nð?4¬²ÔŒj FØ»ãw;pÃøÐ"ËT'b[[ݹ?°#O·Õ·Š™O%·¹¾É„”³ä,}èÚöÝvýÝsƒÁÝÑ*z ¼wô†ŒõÆãúۊ³~tž±üO᱊Ë2¸[
53
+ ÁÔ(û6ùé2oeˆ•Åê½úLÁVqR Ô I7ÐHh=M*àCY¬Ñˆ­p#¸ÞYvGà¹8 ‚<ˆˆco[³žKiRGŸj&õՕu6:“ÿ¹C;´ÕÝèÂËj–ÒOƒõ*W±[Ōk¤íknXâ±vRa¢¯IC¶Ñh‘}£]ÆãZµ*StÂm”‰Ôk™øòÖ¾Ö¯w<
54
+ ­™¥ñͪÊw)*èќ;fy> 6z'ÚsFaãì(¶õêÁöcŽÔ@n“i±c'ëA>Q“оñBù$JCv …b9|U3„™q³Ø8:Lw(ô¾îMàaSåÁ®bGÎβÖÍÞ= 
55
+ <Ò!¯É."îRUéwºÌÊaq_Ë’;e]¼.ã1ØÄ~–qØ´•¨
56
+ ©pz½¬“ÓsÐü¹Ø:2R%3˜§ü+ f„=}?@Õ,zèz%øíŒ‹aj*Mô…ÈÍœ$w§îyfhEáeD¬
57
+ ‘ÿ™t‡áоÁÚãèV¦e֚>€ŽI[Bë+V†(mÀ®TBã:ê{AÓà½WWºÎ.®yj{µ¶y/5–kٝ׹wŸð¾ÒäÄ-¦ pþ*-+i} Ë}}ÈiÅa<ûceÒ ¢]ù•á¾vÿ¡•+øtÂçm=}qI7hyP™”Ä‘H±ÒlظjuO–Ô×ûÊ86
58
+ %W=MñàÎ{_bØÓçõÓÿ%$|Dì£ZL3F…8‹VãWu";¼×H°×kyPøÑâëpƒ®=M1¿ëAp:UŠ>’—2{ íØíwK1-<–êJÜÌùksöK &›êBˆ.3_g§%ÄŊBƉ_®Õ¡o8C@Ao= „#±®Pïf|§áÓñØ)¿G4¦ÎVYÿjMa›9)õç[\Ý]= Qߟ Ô\pnœ,ra 7©ô35‚Œ õH¬mµ[ÁœÏ¿†¨îÂëq灸ñïy>’‚…°ã¨áP“4ˆú¬PiŠ;Ò_çÂø^büZ°d!j©^/i¼CpÏb0üö¬—FE´ôU$­i‚Àⴞv+)ñ×"¢:ŒË=M››¦.Ur{ åŽ=MÕ
59
+ IݞFÆFÄÄãç©Tùýl=}<Azào.û“y2‚†ˆš£x„–€á3y‚hUuj½ù¹‘Ÿc-¦„&í-tüßùo¹ÊË•ElßµÕx¬î‚fF­eþ|)¬æ«Ô¬æ=}f[›8mí ‹ÝÁ¡Þ¼]"ƒdÃ>ŒPÅߗž?F’^ßÁ‰ŒV 䕬վF— ¶»,ŸL±>4"=}8žº¦Á…Øš‹™ØJ:‰Ø¹J%ã­JÙ/WužØ©*ã¥<^|M½©­S3–‹…<sd#ÖXæ<‡@ÍÃNÚÿõú^úÑ]þ•¦’ÀÿÓ³ÜÃBåç¥ð ”òS,çT à@ àÖ d"r°¦”öFUlë–ü9ƅ[,óÒ=}˜¦‰ùîùƪÌ(‚@zØ[ «+ì=}æý…ûÔQ9iŕí)X&7‚­ Ø%µ‘ ²´‰Ã_  @´ê>ìÎÝc {À·–ÖdzC /zïç %ZƒzßÔ,NØ/S”w,¥¬$†µ²*¬^S=}ÆØ ã:i›È#eEȬŒÍþ õ{ɂ;^c÷Ô§ìgÁ°^ºø»´€ömì‘éŽÆxÿ%3ˆ&.·‹ɄƱl·Ó=}-p,Cóó£l[dNÆT ¥ŒR³=M¾¹’5٘ýb6‹Ý„…r•¸MéWB$Á‰/í1—ðm¿ÁOñԍX™Lþ4¾k–K½É¢PgsáäÜðSö ¤ö9ÍKzotõ•= ó}O,LàænГ6®=M›^5;{°fÚ['Œ[Ö^Äýª¯Í´M"&¸´¥øM½&}þý›Ÿç ;ÇȬvyÀÆV= mFyÖpc½“o(ˆ±Ò•k.Óv%ÌôpÚvÜ¢®Â5?ƒI].íý¹2RúHåÑ':ô¦ƒˆ „Tž°‚éåXñë(ƒšxƒj¬3œ™B‘¦_‚×'ƒ~’H>¶ãðy©'+XžÅÜËXùêñ·œw¹žÏ€- ¨” rF }“tÐrJlxËã¶&¹Ð?Ðl“qýànï m.^‰Î\RðÐÄÉ€š˜?ÒÔ]hûîqç¯WH÷CJvÞFñîB‘Ù®Ô|Z@ä}#–†Pü€t'‡-F€:¿&…¨8§F"¶Q+àƒ-‘æ„U|ÎÍ£ùu+”y‹£¶ý.Ø ¢Z—\:
60
+ -ï*°s .ç$áås¦.
61
+ Á8„9¦cRY‚Œ4Uh©Ñ‘j|:èÑô½ƒ9®MY<¥<݊X®W“œˆ˜·cm#ôU… »UDaI ²ùlZùq‰ä¨R‰Í³Î 'SA¹g(ò©bÕÿKáFÒm¸\Å?˼â®E 7g6ö‘3«úå6][éæ‹LÁóƒöó]ct5Ëig×nˆò¦Ï ¦r·îêÆr= Ö´”"6s´×QÙÇøñúõ^”mÄDÏ)ûÈåRªÚFÅágéôIQ¨ÃæKė_¥Ì®‡ð¾=}y4äò-I¿= 9Õß»BrºÈùÁ=} ýôQ÷ÃKì|Õ0€ó+öËÔq\›@ªÕ§brZ"/O­b Xð iðÝQ53Ú>Úm¶= Ô­pî<ŠS e¨ö}ªJ=M›EÖü|£Šgƒ”ˆUáfÙY¤"kˆï|¯V—{ôeøÃ~gø‘æhKwŒ=}®G>ÖⱗþZç7Ûй_žõ'@bS(õzáh)f[9 廊mHšˆ¦až^,Çx”s®35ðúÃàíŠ%*J6ÎdŽÆ2íŠ<e<KìX’ãXŽ<X—©ƒö#®
62
+ \.«Ï<ÕÅ<Sž‘Z.‰3ç½6.ÃV®YŸYrtÊtúƒOˆê† óð?H}ÿ[³´u>µ8[¶iä7•Åï^¸iOœ¯°nزHõÒè·œKÕ8øˆºB2RF;*gÚ(sœW+ÿÒ(×½1ú9ý4ŠW†)¯‚_+g(¯ZÒe]yóÔAL‘÷XT«eE탱>Ëxq‹Ö5¾ŒÜ±¼ÕtŒ…£j¸öì‹ ‘ŠìYÒM©õŠþ‚ov…Ð7¹ùŒ—^«P↘·Ò韸 ¬Vó±~Ÿ j‘î]p‡zž—0%d¯À !ƒHù—2 Œ½n2å”Ųh›þ"Ò¬Sā÷ð¿4sÑyo&Zñå"/ú²oϤò͗;HûŽ+-ÊùnÎq1D»2c½þ ÆÜ H[lc»¯q¿Û²_‡ˆ±ù%м²= 
63
+ ýNóÈҋÄL¹"³óÈù›”à#Ú3¤†ŽíÁÄ-ï »5I{ºÙ CEj×B+Ȕo)U<ÉÀǟr€b-9üˆÀK—zhÿ~-§¼úƒ­‹g(½@¢n>ýàm3‰îýÑâÞGæzæhÞðV §ïT FÂaÐ<^$¯U¦AЖX<)í›Úؔ‚TTµƒñ†R>NsF‚ŒÛé8œ*F>1¦ý”?]3‰_†Áù˜Ýv?õÅhØL€£9aö"H/樂¦!Ì>ï§Ú¥(Ò(kÀI|L¶Á÷Óð…KÑ ìJL Ò&¦®‹ÑIí(åz ‡†¢aÑÆ˜ù,#L0Þì2ÞÁvÐZ‰­5/öãË-D•Öð „/‘o'8•¤…GŒ=M¬gMî8}
64
+ ¢ï|–é-“Bü„¡×s]1û©ìû~е›Cˆ¶/·€!캧w_àVƒ DG%Àª"Aî,düª@¸_sQ,æÝ¬€¼¼E£‰9dýcðE@$WcВfHêCc‘›HB†¦ÆP8¦áÉÏ<}mP]H§{Þ
65
+ ýc!éb%æ§J= ‘*äÜs= o})ãIj48IQXd©îg´Ø³Â¤ {EJHÑs«ã‚T§Ý´CE§â®¶_çí<­ÛXfå’,ªÈÚî‘Ng3.<fX–œpá±sÌj{îÑߺuœMçîš.ïf®ÚF.Ý6®ùÍ<=MúX®Êë̒jEgÅpÅfÅeÿ¯ÀIó‹ýÆA³¹NŽH†›‹¯
66
+ 'µ wÅjœ;íDCºCDV3EZ›E=}ËiÌ O½Ë0iÕ;jÛ<“±¶^ùL=MKùK9‰oՄ .̉ïøOòÀOUò¬•ã¨~â[ñpA^•ܾ¾€P‡Þ°Áßf¸¹€C?6lû‘Óï–Ax¬PÁa€â)áG¢ð_ªp÷Em3pÈ›FœûnXºcÖÖjÎýHL ú¾}^ó¹ÅÎ÷‚ˇn³&ÒB:î›­†ÅÉ3ùÂQóyv¢¸ùÎ!ËÓ°¥~æ~v΅_õMxÊä®­¨”…}ºœ¸õ69ûÂÝ¡Uö†»ªÖÓ^%1LÖZ¦-
67
+ Ú·%«.Ò+®gùÉG¸‰‰¶‚’¡Åüo€ëø5Öá-v„ºê~Tý…ÝO^€'½R¹ÑI3—îƒÂWŒ
68
+ ç¯lWöppäI‡:CŸQýU• }lSótC÷!=}È^s½2W–ÁÍð@ÿ.ýéE×Gù< cKñ¤µ#ÉdT¤#¦óG•=}ûPªþ:k_G°Â†Ríˆ3±¿ölºÌS»l%)µxPšÞ.•¨SÀÀ+‰p¯ÅtؘY]þު·Ïųm¨û¹3Î{qÞÆMm—•ÀEyîÄI’G¯ã~„ùõ¯Ò¡´pCÃ^’*剆
69
+ fÚãW³åâÍôÑç–ÚŽ'¹½-Çú hrN¨ÆÒ[‰šåNz±Ñ§.ÃÏ'ˆêc„U (-÷Xf»ê¯3ï]a:·oòÇ ÒLÅX¼ÇÉKNrw˜Âñ©ÈEúÿ*½•µÊÞG§»ô6}ݽjÁwóò«—‰é””^ehZQ¯IZ\³Òׅs|ªü¬z+:àÅR¿fWôâÿ± æ/T™Gù¥f#Cž°g”AÉNÆ/jÉpY‰?ÏDdzõ´7ipbrM‰ËGfZ½öl÷Õò'Ÿ‰x¡:¾5Ö£‰‘›üH  Å=}Æl=}Ûë[aÓÂSu”áªÎèJ¦^:xÆ©#Ez˜rô=}Û*šÀ{oœü+f?šƒ»^˜ÒOҒÕá¾£nfŸ$Æ.à‹#<_(n-æ­ãcpѓH"×-ãÐ>¡÷–CÁTö¡ãB}Œ2¯âˑÁR€,ô[¯å§ºÑèV.õÙQ
70
+ ö$¾º¨7±³PGRòLÇ &s˜¼(KÔÆATÌê»®÷†€ Þ¹(-¸¥UšX•V*Uä˜zDæÞ›ð[Da¯4­+%ˆ/{íU£@ú+Zìaà¬Ù¸ýŽ>Žîca#œÕ»¯37%Hj~¨Ãªeˆ½Ó8½[LaEޙIZíUdŒËAþDOcÜÿ’,¹Ø"ƒÞÏà#KñŠØ*¹ËPòŠÓy£ý÷”
71
+ zàù(îݬQHå8 Œ÷h‡3Øæ¹ v¸€ÕI„Q†Tù<¯ÒìQýé"CõLÑÀEÖmÕb#KVÕ¦‹ÙU  aã&§ŒÐЬM¶}ÖeÆä.¯S А©]6]ÕgöŠ'\ɱC<<qÓê)}“½Š±Sÿ“¦Ûø%§3}Ðf÷5›ÛâÆ«;²…ŽXv ¦¾æ³®Ó3]°Ý÷#{z\âî3÷>›bTñ+ÃÜps ¥YëÝQAî;÷[»½/NÇ€¬ÖO,\œñMã7äõ/ŽÉžHóç+Ÿ”ݯzõ›Ž ”C"ð²7 #£#q‹;¨a"ñÅ\0 ³£Ðø[(ÑiaèÊ*bĀ :,ÃSáH2,¡R¼Mã=}R”ØKcï:9Tæ¥Àþ\$Bc°[$ªê0L92ªÞkc]H4÷o¦‚‡ŽH¢
72
+ c^B,^«ã0=}¦´po-£·PôÖ·äˆYœ7éBç¾=}’´¾³ã±<Â"YæÔsàŒÈ"¹‚%‹5têV%¤x%ütÝ¿J°|À= d³
73
+ ýc©™Ã´¸Dvb†Èäd‹E6H±Óq©¬ýj¬_ÅdçËjÌëpb¥ruß2ÓKµøüĤ‘‡®Ä^<›§“”¾èñm¯ä<®üÅ<Û­Xž{‘t[‘d™“\-ØîY,֓èÃY ‘ô?€GYäYj3Xö~°E“¸ÿˆix¨ƒ{6gàs®OYî“ôÜðÈê¹
74
+ Wu™%ÊB®â2u¾R®ê*®ÔJ.÷¿<•ßX<üÌÈÊðÈùàñÆÚ±h3ç҆®*5™«JߪwKg¾êÄV®0µûJJ3’8ÉètËDÉüwésÊrÆkÅnÅiÅuÅ=MŸýM׌ö =M:Ó߅Æï–O…-gåÉÁ…!—•õìå=MB+ßE
75
+ »¾ì÷7fÊi&ø·D=M4iD9j~ý‘±äžþL©QþK1]XŸ(¢' Q¢H*€ÕûV–ˍû֛֍û֍û֍[˜—‘o2ÙÄrN”gWÇ[¹)ý¿ï|íNoúáöN^ê4ìïQ‘[Œˆ÷‹öÞ7›„Cê6ÆèRIŠÌ~h¯E=MS‡WWXÐO×]ùª°@s,{‘K­ÝàöuÑۜÍÌ  3»= ƱþYԜBÚО%MÜÔ®d´×°˜Nz@½~ìqoöIZ™±Z}ð¡äôX Y͘®"RßrìÇßäÍ2ÄÉÜÔÇT±ÇLE… Án ‹Õ‰§!•*»ð´R+Zû¶Æ[r KWúY
76
+ e&nÔ“(‰<ªÄe“hÛO©6Ödzœ.•ïIÂÛ§êé s-ZVrï;ßÁ´ajÖ9'3±êÆ óR3e9“€;R?¹«â‰IîÙÌ ÔŠÌ©{§y…;‘ƒ”+êW= ôýý´û§ñ'їq<Ýçaâ&¸[T*~½ceüeŒ\–5fNW™÷=}Œ“߯ج߉ï°5^þ?ñKJwdw?ÌQáËÏ"YA"õyØ\L!¥–IüÌ·¡nµ<~tJàÖz)ÿ;uúŦUU;—W ¢¯QÁAöW¦Á®I"íqq‰)ÙVHX§Ÿß=}ïö)%…NÐx=M®¾˜ˆ­3•Þ°X0 •‚ax²>¢W»ãQaX2ýÙñXžD.©Ú)Ð?jbÛt¼kkçð©LÛø¶œ¹4ª2ôO£êjìQϦ Zh™W= |Sb“zÑ{'|F•ÍyOæ(¢' Ð"  ¢ù֍ûÝ|Ӎû֍û֍[ûÖ=M(
77
+ (,ì*<ßc(<ÀMj÷\QœÞ©C8hR˜Å4®©ò<–±…aYŠŠI:Ìè¤j¬ösA…³J)…Š?Âaä›m~ùŠ“Ä.ªòštÍôGÄâ )fnTÆÃ×I&ìØáÝ7¶Ø{sè&W7[Ò>ùsè7n$ÛÐÓKfÝýQl€=MXOÜêÜ ×ü·×Œ]:à5+ðš9dn¿0ú’c¹ÒB<#ÅhìfÑ\ÄWŠùˆ}ý/“½!<ŸY°^Ã&3úQ¤õ§q7R¢ËÅCY’€TÜæÂ·W®ç›FÐî‹2‹*G“tÄcƓԞ&Ïîâä<ÜQœþN¨Û‚5Oû公9Ó¢ÞzË8¾Øºu§÷ˆðšÚuVT›3óŒæâ+ÓµÖqßµMiû8Š[×ï=M€½DïøåýžÛ1ü0ÏÛ73ñ´·=MãIž_uÏ/€–@‘.ñÔP'F?|ßÃ8<cõXKtnðÏ$§Jn2¶–ªÉ_ns ,Ewï2•<Ê{ï3Ö"¹sO²Q 2!±·1Ù¢Ýýu¾;|²•ê厐Ø&çKŽò¼“«g©× .Ž?ò>ʗÓò#Bn^„ ¡gœû¸ ¿ÐsÒ_ƒó¬Lº¢ÛÃ~\5}Ã:¦™á±ŸgÍ›Ô|_ÐáCvV¿pÔ¬Ûé7n8œåc;*zÿQráLµ¿´KèÖúEÑvB:'8å‚ñ1­ƒÐh\菱b¥$úš2iiBÍG9ÁG¥ÞbJϤTÂdRˆ6éˈ6åҙF¾cªdNÊr™l·îGnƠᒥ´ê7‘hѸžêEʶòÌvf¾fY z5„ trÅw¥ÄUöæU,Tͅݙ=}¯L IюàøÎ±q.m<–Š·k+ýŽÍXšÖQêÛ½•Þ=}¼~€7ï£Ú™:òãõP¡Ï†B)¢'àX4$ ¢Ñ{«øœÑ“yûÞʍۭ‹û֍û¾Á•¹*3]t±ÍpEôk­KõøÍnóŠ•T%:ì{á§p³e‹UQ0‰ÁŒö‚Óh»/íúب•¨ŽñAyÌkt«N.‚]¾W Ñ|ÄofÓ^w¤&ÏUÀs€èõ¦¨¬hy…dÒ·Q¢5æÜ—W r3b}m‰y„ªÆ³9)íÈÓSǖÖYÑv6¸†á\skŒFyòïàªöÌøÏ…íÆy·ª-žãxõ&Ó!քÞÓÅʧ=}Iï ð²ùÓÎ]fU.4‘À‡±C•Ç<萂çžGœ¼±‘†€°+µMN8™ÙR•±K¯Œüð»
78
+ æo]—–ï½¼?Ì á7><±˜R¦Gvå~XåÄd¦Œæ_à§¶µ^ܕ0‹Ê “ZbÚ­0’ݰ*1׏ª¸tHfиˆâúgß¹žŒò‡ PŸ¦ßgÕQ ´+!ÄÇ&Â×E°‘¢@®í-°žPC§% eP^UAx½,—lH>MÁDú§_V¬ÖOœµ¥ bXû3C¨ÀêQ2æf’sD¢ÆH"ngBJººµñ¬Q­Á†x,ï?å@N¨å•›Lg]¿8gàX~õa=M1810o ˜î®g}¾à£³)/i„üd¶ÉD1Ok‚üD7°¬€fRãÞFSÔF%ÝI¬hÄ2Lµ©ù‰lkCùD½eÝóyžN½Â,zƅð^£ªÂlz÷…ÒæT«¼~yì]µåD‘VÂÑù˜¼me’.ï6S'µª|ú°k§‘>ÃÚ = >†î¼;´oäٜ2e%Ü!IW*¨-I
79
+ ØbŒ7CÒ¨mNÂ=Mq1cƒª™QÅ8µç匮Nᄒ)&/jx;~êÑżÚyjq= 9£ç´±˜Á¬6ï’Ö,HgšØ¼-ö5L·w0ÚÙ"¥vEñEµÔOËûj¦råÙu<Ýze£wU“tó—wUO•‹ðNɁÿÂ:<¿õ€3rëÕÜ^të‘Zòë °LÎãi=}C 9ZÀ>»½´ÈW0¼ñ= ä&n¿€¢mCOÊ;™ÞرÑ/:YýäúNm({»èšý¤À¤¾DyOᣤê0I³’Ý´7Č(´øk¦—»¬ï…Ø(8ëLzJ MYë=M4øµJ(¼Â‘%‰zjrµ\:ÌdØ~©é+?&ä!ªÍM¨Â ;ՍûæÎû®œqû֍û֍ûV‡®¹´Ñ;z”ƒ øŽ“Ô;ɑ޸¯¢?¥؜åg昞wSwÙÚüïæûžªE.ðÆŠ ¼JàÔ!öý,€ä/’Þœ°{†°ñ¢\Z7A¦7*‘Åc¨sƒb$—§xRäìô*÷(ƒ™zî/”¸Œ_âäî1ŠÃ(šeøØTbÅ+1š6ŝ®H:déý]jÂ%q6½¨c´‰,Bµ-V&-¶­SÈÓõ€£yºôéÒÜÞé6÷乆’—·ém®‡qC·¥ÌƒñâИ^îÂàf« ·MîœÑè»êÆl‰»_zû¨>V‡øÿ³¦mç߸êAei§!í<6Ù.æ[Dx ðôO^—h8ãŏ6·}fՖéMŸNvÙÔY
80
+ ÞkÖÿ\RÇØqðÁM¯¡½]ü¾>¹F™¬|Ñ °çÌ{>u^™L¯KX»eÐÉÔÀmcឿ™Oáå)¢^ë$ϖ+ò}4DœFX»Äb‚i ²žÅEU iN•´ž=McE ‡h.β4üK ’~òÁDë‡éú8ªrIÒväcÑ×ÖŒ;åÀЂŠo¥:ÉèRsQ¥–åûƒªSw5]¿HޜrtwóJÑÆ’fí¯œº¡ˆŽõð䈯ÇÓÌÁQšŠ-õ„¿ÄIWo³›µvm£ºG‡TùŽˆj]ö„žÇÙc³=Mš( b) PŒûìÖ ï֍ûŽGû֍û֍û–íU<Þëúˆy/¡øŸ'Òe-Ä®?R…€Žæ= ü¡Îe"Kê&Öu+ìË?ˆüB“= ¡k#Ÿ¬(ä¸0fü= ¡¿ö'º+Ìþ;ؐD”€Å= ß»¡/"‹¾Yï'‡‚ìW‚îo‚ü?ÂùŸBa4Ñ[Ɯö©åiä§Édâ”B{†±Y§¨¶wüIœådÒò‚q™o5q˦8gŒˆ@–V1‹{¨qÍd–÷n‚žw±ÒǸùgœU= 49Lš,“ýCåºQ‚˜Q…²ˆ[u„½A~ì’=}“SkLxDÂL5½¶«cK友d•Γ£ˆÝi”øBâVq‘§hÓkœÕgŒûKz7±.ª5§¼¨øšôçå3³sÂø‰÷‘f¼\KÞ_O²0eOªº·dóëÂ5qÊHŸíßÞÿ0þ4[ÌÿM±Ö®xŠ5ª¯©ñ¶ÞxY?¨}¶Áx‹©>Yþ^LÊûF©ˆˆ =MÛǨ-ӃûS±ïZú2ی_]7ÉͲ•щÖõNû§Oä¶ðÒziˍMͧ-ÓiV÷vøfû‰' ¸½Ñ«–õŽø=}ۇ/=M±]ÑÇÏ=MÍ÷ÝD(> ã¦âP î֍ûkþí֍ûVúÆÖû֍ûÖýÛ¸q×y+ƒ—¼©*üwً‡}Ûîî ?u[÷&L,§|œ§èGk ؂ótNœ @þl~pýä_•[á-Ÿê¯L1¿ýtƒl1û]ÊñÓúœ ÎvþCˆXSÛ_¹)ßӓSöÐñ‹–R;g™†š> Z¶¬ã¶´ªSÍe*Ìs£½]‡èÄ/{QۏîìËê§y‹¦ÑŸb"ƒ®yL…–I[3pïìmÚøËAi™4]Û_¡®½½fsíÁ©eP™%u€]}(ýjFO9…ùgíS¯rüS4ÓRiÝeK*?²ý·ôù¡öÀQhQr¬þÅi²o³LÝ{Àdª÷ôˆ®©6­ óÃço¬‰u¡Y½Šc™.´ˆjˎ™qé2Ÿ:ò1lBY1HA¶L²³˜yZ½<µkVœ1]~nBqUôÙÚ©ÂTúɕfO€xM:¦°Ö1°l9­nŠ^19úshƒZŽ
81
+ ìâ<«ÙÝ ‰«‘È“9,¶Î¢ñÅÕXFß!Ê)»AV›[\N¨ÐŽé>xhg˜çA(®ÁÌDê_¼¥PBbõÎàˆ -ìëØ­ÂqÑQ؇x
82
+ *vŸÿA
83
+ G¨Ì¦Ôߐç8ž/ÛWÂ0þ(xa"ÊÿÅ0KF£X5Yˆ¸K€½¿2DRt€ûÆ&ÍyºXÝ{;qo”Q~u?Sã,qþ…¬{í°æ"½vèÖ¡DùÃ}äÊT‡ì=M¦ô_>X»%9î7rzX^H(qïbPV],®fBöG:ÇÖçaæQ!²»³‘èU5Þè= “˜6êNbÕR?£6¼r¬H§éÕJ”õ€Ôe]²NVâvèšÖÛNÌ|ÿ+ÁÆ?#$á#€5 = áŒûÖ=M·ûÓ=}^ҍƒÖû֍û—±šÒæÍ7zS™¾vÅ!”$-áÚáÄ9.ääl[¼þÝgC8åÙñ$Ȭ…påXKn€råduFĞ*¢‰ ]#Ù×SÙ^‘Vk­0َ>Û¢òbìÊ72ÎïxfÓ ’DîÍdہ5v÷Z–ÅÍGáfÆLøì®¸MŒ0Å“á–ÞD=MÀN¶úã
84
+ êÝõÿ¯Å£¬9›¸ñgØ8K/¿@žèI–g½áÓ\ߐ¾«SOò|š©;®w:?oþŒ)ª;Dù1J­ÄÖLgèóÄBâÅêØ/rEÀd­OÁ:LÔð çû8þÞ뻋bö?0ƒØ^5?>@A¡/>ñw¸Ùºo¸Ï´¡*ï(·™®Êô+
85
+ E~’~5ŸE~C&Ÿ ×8éÝc~ ]£õ_gjå¿xSÛþž¡9í0ó|–a¸oFd‚‡wqçj¦锍zw
86
+ ˜¯N¢+š\rög
87
+ ©!ӟ;Ž‹äPƒdF–ºÂWñ<ñz+¶¿Ôämåª Ìٌ£z¤MwK=M¸]â!u®ÌY 䝡Sú}9ªŒÙ;c瘂«GIr~”ÝÆõõ§ðbtfsÒ] J¡|7äñè€æ—¥€×B¬ù2h«ŽˆD÷Û¸ØV&¥xšåÑTM¾Eƒ2‰[²äÏ7é,o€¯TN°î&&¥N¹hԄÙQ§€aNö™h—sÒÓ°mï«X?~ìîqÅÔ¼OcÄ}nx‘%¥KË(7vC.ÌÁ…„=}ûÎö“ìÌ¡eM­d‹†ë6ô«zqÿðîÆw=}¤Æ—RÒ» ,ba ˆӍ{èV¶‹ëÖ]ûÖ=MºûÖÍÛ§i£¸=}\(›£ÙW‘(.ácø€HÛÆ,ãIœ8/¿.çˆö(æ¯= ýhÎM9åŸyÃxÄT:­ƒ˜~Q&—ãÑ ù[.ÉΑxØ(¢@Ï$¥ˆ/4B=MÉP‚+eî6ásc4¡=}‚d—¨q?R÷æãÄ)ܪ¿ Ðdf޻䥶i(Ûn†Öì4ÔÇnr
88
+ t´õÇA҇Z=M£†Ð ,R¾ïD…õL¶öîÂð‘VmR“ØX‹N+Òÿ„>ñ‡ƒ_ž!YI+ØÇÓ°Óç6IÜ8©äåŒõz¢öñŨ«LƒR|”·“ô*þl|i…öj\ív1Ÿ™UÛ΁œå:ÖÛÎã•Í{oh÷š%Œ€¡fî?ødÙè†BRWS€Ù%»{™Ü’;Î=}ûø:ؽ¹ê@|¼êÉ2ä¶iPük2½Wr\ýÕ#G½Ìîý©ÀóN˜Ö»€©]8) EH›Oû½Q垶=M\ Åa„«.æ 0e?/ƒ’(–S¯Rð4·àƒXˆ?Çú)ô÷½¨s…¾büT³_¼aøyžî³cÇTÚшÓZ¯+øßhìkHÖ}žì…LÍÏPõuÊ.ƒ"9„„0k³eðZGp–Fa;ŽqA”»Óu×1+ÙãDÛüœ™¯¡ƒI| ÑÃ>ÁA{">¡ ƒt^éÇ̚æláÈô\‡‹ô+öYÞÉKZ…~3J¦ÔùyV=}±¥)œoÂõ'֞hûÊo\Ôäxñïd¬s뇼…ß0»%Á]™K]«ÐQµΠ\G_ê“Ñi>E9%²ó4øÞw±èª\{Τص2kä´yÇÀìÅN…¼É@rÈ¢)uDBt9Ñu­:/U:ÈC‚ÈîÑ:˜Ÿô€eË&q×T²Ç©‘M.gˆ‘…»VºþúNð×¹.‘BÚ\vô…m¿Nâo8}ÅçÌë<oóç !¢-ðù„èšocz;1‹†d°¸QiJæ.Va
89
+ Õ)Ö­Fì܅ªŸ¡I÷ï¸ÑJᬛìOà¼;M؉¡ûbkdÍLñ¾„傍KÒg{ƒå:Å>‹¾ù€t‡cø-{æ4ú’sú®ü„[Ž?ÔgPü¾ˆ‘'LžZÀÜö1u—g 6Z±†=Mäô‰îÜVÆnø¥·ÊNl:jGwl›|™â­mŽœÙ®¥[™÷\x²¡ºÔGcò\ñX
90
+ åªxOª˜2­ÂØ/OŸŽÃOšÞÞ$ÌÃÿõ¯Ã«×‡ PæÉIÿ9޽(Ñ?¸‰«àoþÊdžOÌž1_W"?Ÿ“ÑW~uç?œ¾…—Ê>ãÜ?÷&ÐÁJ IW#1L+ddF¨™ea Þ<ìë܀ž¼/„–(҇cij/àÉPrsâØ›\<Đb®d@7?ác±L¯­„¡HæfgAÐOº ±ñŒú3ãõ8—å²>:ë¼½‘Ü-©Ã= J¾CádkFLH¡‚©d^&FÒ= B©ì Dä³Y?°ìR4f&ÄpcJùriF­´Ÿ‰³nߔ¤äSx?°¡¬˜FF!¹„©‡QKP«g2ùd$†Ó= R'ÕÀ<ÚE“™4¼kÍt>¯bþ±¯Šˆ^“–508v  b$C*ÛǨDZeÌøwlctQk8sâ±£Åì«KÅp9Y…[r®}‚Y:çJ˜¿|áã3µèÆv’t5ò lUSËÙB}ãÍ :¾¼ÏcŽM
91
+ 7 ÐèÏ㠒]Á¥„ÀÉØ¡QÒ­ìM‹¤;mhwT vSúuíØÿ‰AÚÆ¥›Í,͏…ãVÖV֑‘[¯ºûqžú¡•‹'_¾—2ÿþiëNz[Û8Æ;ñ¾Ž†Ü q/K_ҎÀ·-¿xWØ¿uyT”  ’#¯@˜ Œ# @xçÕÍøӍû֍û֍ûåŒû֗WJà¯ßeVì¯ÇçÈ9喝gS¤_¡A!ÔJ9àù±!ˆn%Pj0è£r¡Øf'R”@—¥aê$ñ‹l0§î$1H.Ƙù€¦®-†ù€^ªcèN7bՑA,ì-¥dàɒ"¾®3¿G@nJd}~¨ƒÜ0¤4³ªHv~dî˜1Ö\1’ɸ肞¬3“Kw쎩¤éDT=}Gá¸KËxêÒrÚ¯µÂ]K¶hæèRRԃ„¼]MÃÉP´OÅb9RJ4áÉpf¥¤wR¬ÎCâØ›\¬‚aLI6î¯Á´Y:îT(Î4®@‚$E.eð$Ó*eÒßDÙBÙS²'H>®ÎHnŸ­‚Ó]ºiýÉÕM:ç爸‚øÿI¦Î;ƒhŸ3ã)Lmûæ••Lc¾å2Ȩƒ= XþL­Ã£XÖÆåCˆ8oÕìØ9oaœ"ŸŠF°UC!NEpUB±Úµ2ÉSA±ªÙ©ØeiD´jD?m‚ÀR®¼„>k†¾„rßEÓþ¶¢Ñ‹*ËVÅ0F¥¾ºt*zŲØBµš/s¹²¶æ‰üº³æÛˉœ«j“”¾nhGŒZK$9”K¾¡h&Ï.„P‡&V‡FGۅrŽ“FG~‡‚q‡QÕe6o·„Ø»e»äŒ†õì†ïôŒ+ÒÙB¶“Þļ£cL\HÇ oYN§¢/}4LøÀàba~Ö²j­µ¼¸ÇdŸméÈh5·JȨ<Ñ5MÉqSاºþ»õTÅFgÁaòdãù™:~õ°<Á…sYMÖ±zö>ö2kk;ۮͽ”Ü~ÃCÑ.‹Ê¾âÕ4ºÊg»Çg<‚F&Qp–»¡wÏ-w8ûèhYfN~T²MUñÒ¤©ù#m ý…BÝ©œÕ¹cmíL¾‡Æë…S†¹¥'EL,>ˆAŒ·¥)LrzÉõøêÒùv¾×B4ùèL‚cóçfæ6;¢7VŽÅûytûnµé–^¾ÒS¿½Ÿ.'=M[ZXÙâa=}'Ž”H„èpGãX þiuÅ«ô¦NŽl—QD÷e| »™NWÒnŽúϐÓ¶»ï1>²k›Ð,€ÿaòcpÚ·“Uܬ:eŸäëÏ~* œŒˆcPëgå\?9*'àX ¨í֍ûŽ֍ƒÖûÖ}í֍û֑h¦Æo€y³$²úEЎ‘"sOG0ë±hu2ÙôM±®Ë3”K±˜žXB¥aÙ1Z\ ¡e$u)(/4ðLyà×ç"v47²È5’Ð°fÉbF_5’ͤ¨üZ1Õ¦¨ˆ¶JÂs1%j¨ÙÇ1S—°8aÒ¸“¯äˆ«jhujèú¢”änD,K@…¸djç¾rDËńÞAEIÇ,e¢¬3=}…T}Lƒò™97Rèûpnñȼ2S„[JþwYëÊIPZ5\?ÃÀý.%÷~HÈwriwÕ²¥´ÄÍ»j¶tñÓŪF=Mtü»ËÂ)5?ÞːuwÓáÁHU™×ÊIdm©â:¨U¼
92
+ ʁ2-uî‰hÿÕÕ¬‹YSfkڍzj]ñrÁ°®B=}OZ xß= §Ä®Wÿ”ÔÏÂÒyoµAš¢;¬ÜɇzV#ƒ;;ˆ7Rðˆ²¡Ç[-,›†@{Cݤfî”P²—αg¬ˆ^8±·Qqk…g/3ikl8o»Øí¤Æ²¹µšSOºIÒòl͆ŠR³ßÊ¥›f+“{ˆÑêâÁ6ºÒPÕªµK&K9yIÖâj±ÓvžÓ’Ê¢­:;µšúxßèf¹VšŸÐÑÃĽç2[ÿZøTóîÕݖv\Óê{“'#c.~­•@n‘PÆ£U9½ŒÏ Dé „j_G΅n’¾”Ò£³êE|l2ÚØÿúeééN2×Úpü‘ñRÓ»BÕü|WÙ9ñçmÑåŽÆ?‘=Mµ;ia/Ý»›¸P‡¤§± \Øï›Hõãr~tBO›~jm2jR Ê·5ßÜLMƒÔì§Í½¯¼³ÌiqÚ¯%ߝœLÇÞì¯ÃÍ¿ød_¾„_MÏiãïÆò!„â §B!Š®.ð—} í‡"¼?jÁ@§»&¹*:0D@³/$éXh\‹¨­õcüv§üAäÇiAŽE¥x—Qd“¨¬e㬋6ÇS¬Ù¸‰ã ú=}ô½P§¦yyNbg¤’Á(û§fˆÑLâ£1^_¬pWs4sÅH>i4}Djq~M«R €´º/ÃÌê0C‡¥8–¬‘¡8Ë'åøØPæÜýQÚüªq‡¬Kåd»åم«óÒg¼óÄFƒX<À ê"@Ú»;'ùöí֍œ^†û֍û֍ûÖQ¾.¼Zó¡óÏZÐUÆãì.JX\‹ ðÑß¾’8‘ýû7§S©|î–ù|ý…¨r’ÈëÝ¥Ná^·[×|ªž— ³äƒ…>¯#õ]™>ë&›”»±—×çŋ>M_™|¬³K»o*^«z ӋÊï²-^ýnŸ“]‚ ³FnÁ
93
+ $,-#–,)Ø\Oæ® ƒ·"Ý)ˆ5]D†æ°Yåbrö/ Gcî--©^_Dû®°b7cÒß*©5eQ­€aaº¢å®@‘_¡¸FxÛn¸ýݟFØ>ÒJÓäKE©÷hRoir-µ½CYÓy2ÔDëCi¡¿² )5‘ÒHεt¬ŽÀèA4{'JÒîp,ÇXŸd1ÖBge¶8ºô Tÿ‹uñ¸vºØ}T³gŠÂî÷ÔùÂyžr“¾û‡íŸÑ,ó9îWlɌÈôâä:ôp㣹¦ò ,C/9}Sü›…˜ßa‚ëÁì¶åMµ‹y~×Õ
94
+ ŠZâòœ®…íšëëc¶ä÷L¹¦å!pÈH&ãù֍û…ûÖ­Ë£…û֍û֍ûö»è=}ç•Z§•%=}ºw–þôÁ/§/#<Šn–¸Ùô–§¯G=}bÿ‘öH·M‘|¼”NI+،ËrÔ±ëÊîN±ÌkÍQNãÚÌxҝßëÆ+NÓ>Ú²G¼ç˜>FÝgø">a™¯;]R•ˆ ›¬>ѐºç²…>s֙^qºç·Ç>Sߚ„«ÓZÞo²^Ž^¿]…œ^õiðúGsO¿¬®™[ç‡ Š¿Îۜ‚½y˜ýGíS¿œ~§-H8GÀgÊ ÉY"v6+x{Y€~㠞=M#ÊY!q&&Œ97pƒnàÕµ!õ×'Œ^20 r= õ!ÿ$ì9«Èx3oQKÕâïÁHst×¢‚™}e vª³ýbÖvÌ8Ê(Uiqž¾âÎrLøÆø’hÑ|¨¶‚âSeûoªl4׈Fðäjù´}3ÁÐÆsyí:ºŸ­U™û‹
95
+ ò”Öº>ãTFŠJîñÄxΙÜqS‹¯Æ‘íí«Aü=}í½‡º*?U+Ÿ‹þfP„­ˆ´ô0ÄW¬è‰8yø€ë8zvS€ýòÐÉÓÁɃF¦aã,ÁG8šîT|x„h׿ð‘ˁ^ãñ¦7,Ϗ:~^RüœøåPÏÁždk¬x¶=}©Ls{¾†Ö”ìƒÙ}ärƬ…–5ëZ¶¬mM-ûzŒwëDçRçz†,Ö¬8 RùrŠÖE‚ë±u6‡³EáNë
96
+ £¶œGM OxrýÐ,ڏÙì²½Åõwëä_¶¤q¥[‘bZѐAµÐCÃPU§ð^߰ŸÈÔPβ°ËƐÄÞpݹÚ­pÂÓÐÄÇ0ê7ŠªP™°†¤‹¼°œÊ°Öp’ÁpŠÙpÍ°†Ó0†Ç¿Ð¨ð´0¢ÐÊð Ö¡€¿)ß~+]_*Wß)e(âGí>"åh£@ Ï5û֍tŒûÖ=M”å֍û֍GïÖíÚM›æÍûì¦Ïß:’ÆRÔk€6㼦K,¯*;¾µP\L‹ØxéÐÃځZ,Í:8ÒTUœŒ‰xþîpÝÓáÁہr?ãO#•È¯q&;‡¹„ˆ^ýЯ¦ÐÙ¦Š«,³·9®ÎRœx‡¨ù„hßýp€×Ážc©ã¦ç-‰o;Bï9þ~R<܆8Ÿëp¾A Áàscû·Zžƒxá°«È£Á´«ÀÛAÛׁ¾¿áKðpOôÐ^â<H8³„x#‘‡âWÇ´d®Tddl²µH±£èµ»M? ˜|¸øq¬8y²Èt¦¨Lg¼ÌhÏbÄÉn¼ÏiÔ§¾ÍkìŒÀØæäÆdª6äüvô×/ñÛ]‘×C±Ï+QÕ;Ô'±ÅWñÃOÑÕ_žÀ¦0µ§1]g0<Å ƒ¨óô $]_©˜U¥˜Ymì@Î;‘”6ю.Q…>ñ‰!q†1ã2r‚’yi|Íü‹¨å ¨Š;(×­äÂídñÍäݍd×=}
97
+ ›Çšúmœß·¸×¯ Xh¤>ò¬gtHqXÑ$1“²ºX’¦¨[kT]oÌÙ= œÜh„Ýl”ÜÂùÏÊ‹ªßnÞiTÞe,ßmLÛc<Ú˛¨/)Ï'däcB 13÷ÇäOïôç“õ± 7¤kíªXºø¦{Â[Âæ›B'âwΟtíoºSq+Cçß2Cß1E<(/ùhԕòŒîä9 šÎä)‰f¤é:—ÂÔ'pš™ÊŸ¹e„F–i‘?åjuÊôó~Ê3ÇÅx Ñsò'JnâÄo0lJ%Ë'^¤8H/ÄpHQw<Ŋ8ÑjÜÄfXÑb¼Ä”$Qc>i¦hÂÛ 5?I5e¬¶ó2L…©1’p|D›¬†³e’m¢EŸLñ~ê9‘¶´‘ºaê2YC¿Ei*æ3m„ØL·|"De"qt:j?¹N ¤\4g©°´©d^ÉLíÄǬ±YÒnë™ÙOämbDqrD1yÅÀ´±:òpzkw OC„¢ì°™Òlöê6ùE'¸¼±«’mŽë™BOÕÜ·om¼äeüåsœäo"Dh¢EtâDbBEjÂEf‚En$Bh0aD'ÍO/PÅbßeIJœ”Ûr;¿zµOfË|š¦Ra HV4e!ŒÖûŽÿ]Ӎû֍û֍û֍ûl $Ïúgýñ|yÙC‚¹áÝS¢wQ¿¯ñüáï^ç©™í_Ì0·^tK2M˜Kî»7ö®Ô4‹®–¢1ƒy«¹ ¹r¶Ôˆ3[Ô½ƒŽaçùÒËl3ö–S›¸CäêŠÅøÌê ЩV›“ç¤É~҅>‚ŽLË㿕xd҉
98
+ éŒuNûÖÉ¢ÑôFÖÿÛ·MŽ<e¬FðôoóˆäãYôŽ1ŠÏÀ•„’‰Kïùm÷d©ö¾]bí[n³ÞkþmúŠ *gÞ@‰Ñԉí—*Og{jdÈÅh¢–Vêp„ezëtI §F­-õEçÅf´Bf?g{³Ä¢]Mxb‹²]èfú·ŒN'ñê-T›š,)®mÄdzóHˆeVÉ¿HÀ²_ń9pe…S:h{K¥w”ñËw#”hè¼?#¥U‘žìDdöma”ôÅì¢f|…Nàªåˆ}& %˰•€MªþŽ ©ñ†Líÿ¦‹K–ÝÈ-‘žžÜ2\$ô<eôݳ¸²™&³Ž= hé… –=}WÇüæ~§›¨ß(«æ]ãªà·H4˜«ËG^bˆîw\ɡ޸_XL ­iâ¸0Kªðˆ‘üª³d„ªT†ë¢Ëµ'÷ϨyÓt0Õy-×îˆ@Í6æI €Í¯>¶u:À…¾Q,ï¹‚ÍØYD£M1\â& ç=M0B ¹ŒGŒü*ӟhäê^xǧQí!Ý9¬SAÁù>¡v³Hlz0«^µ˜¤ooâkµ44íkçnlüýº£›¡™øÍ0…•å˜G}¦¸-µ8ªÏæ´?•ˆ~ñ(Û†<0£%Zqþù­~¯^t>äPa 8$ = Pû֍ӍûÖýŒû֍û֍ûÛkö;à¢Á£ØšP_r¦@ڟ8Ÿ¦“Ÿîhöê¬ÂďT¿çRՊ<R¯Fp·S±ýWGQ*j÷ÇÁ»Y=}ÅÛSt\+~ïÁޅNR"¹RžABÚ«èߤEak٘YO
99
+ vrœ5·7ρ¥zjÎgʏ#Ó,WÁ˜”+mõ{ùÃÒ½–B}Õ+%-›‚O·ÛQé >¯/‘œî1s®RXïî¾d ‰ ‚ï€Ï.Ë7˜V2kO‹ŸµCŸÎ”
100
+ FCüx=M=}~%þ»#~ޟä³o8Ú 9V£= ñk<£SîM7„þ gÄœfwîÂE_©º»»ã2ÿ¯‰=}ùöBàéfaî÷+‘Ân¸Í•BlÎ7ÅÄa,«†‘ÕkPÂg2aòŒ:I£$y¶î´cб\¥‹4xÓc±§µpÝÀ¬ ]5BþÊ2w­€Y•Ì-T0“örØ63“Ô)ˆôh]z6“Ç!-7-Ùæ(g‘ƒš¬mø9ˆêӜSdìq»©žKÄ>znä¦ã6Ö¬ªÕCÀé¾7Ó<9”ð)É·î,s–£ÏKQ5ŽìºáÕc¾¨œâhÿ;§˜?<&Áßù¿o#XÏ9è¤Ø@"¦¤€—H­?ãˆ5nq‘$§gÁ”SºDõ8&Gç҈r\;ODÐaA±™©i”onAŠJBº‰ŒìkGšiFw…1¸í®Î</±J»ï¸ì"VLKðǂ®$´Ðb9s·s„¡ÀJn}ÉÆøÜ¦÷]Õ4~ÌÈe#:#ºèÜþì(ç6¶®‰ƒãӖv&•Pža7åŸÚQí*X[€ïÞޞ¢!Ð-  €†û֍´•֍ûVŠû֍û<rû֑GÃO¶ÿíÙѝˆ)ã¨/ñ}ö/Ãüžlqïð£#˜E8è)¡x\:äY£‘i;ì#Aˆ>8êö^ãX [¬÷ãÉzQ¢§…C؂V²¨‹ÃP¿Zº–ñˆâõæPxg®ÃLž<’’Q[T¡ÕcGÒQ–BnÒ³PZ\¹Cư³X¥µJs‰Z]­u³Æ³·Q½¡fSPÝ]3×åÓørS«-ÓÑT'™|j'ïã[™>ýúÞÙ ÒÅ+qˆz¨…BVèL†ë¹EØîzªqršOC}œYoÍÀ˜öjÆöÌDüŸ5¥’Ë™—™-·ÍÅݓM5 XŽØ¾åOVŽfVoøäÓÒmlÿì†Mäþùjê6XZŠ;ûª××½—Ê[(™Ø³?â}Øm1’Éaè»ØýÕ0Ã]œÚØ·û 1\Š_êµ7• Y£˜\ä¹ §Ù×(5ó®rø‘´ƒ9çx›¼ÚG0œ²ïwnѐç‰ä†¿ÿÓÄ5¿˜ìYV[¼g}"×ÿ}äEN*Oƒñ5Æ®ÜêâËx„}cSZ=MWhòØéÄ×V¢ó—Pøž7çåxS^«š_= Ñ
101
+ !ó?:¨¯QTânµÇ¼,ñäŸá3O9AœåÕÏ9_-⩏é;®î—ÜΝïÝâ/äÆžäX3EA¿Qb´ãwv½¦gW~?îãˆaÏ ?8Žé[ï¿hÎe²O®Ïí€ÿÔO1‡¾ÕX+E¸‰Aaý\iZlEùVw*o3I>ì±´©T谄BãíÙÒLS³…œYyè±Öp¾¿öüzÊà‡›%wJ’æe±) µ8ÅäÖÍê¸%HC4ÊPYb¥%'u™¼ÀjùiUeŠhvçNo½!TðÊôækmŽÖŠÂu«áՑ´õfž¬.FúZtïò¥µNkw Qík/ѽ¸e Ó¤!#ó-8–밝µ¦˜ßQÆà8ÁÔQ7満Áâ²eÆ4Ù¸Bú†¦@ú¬ËÇí‰ìQG±%ÁM6”ÒéHKæ
102
+ {qÛøºÞ¾ö<1ÓA^ù¦ÿ÷Œ™~…«úG[Ê&ûeë>b'֛X‚¯C‰Ÿ=}™—û©ã­n¼=M¬X7f¸ÛÓþ5(wüïÙñ×ì-ɯ(§™Ðú࣓Ë\‘)„9O¦´šQ³W»f€ˆ # 99=MëäKž¼ÎCrü¿‡s"X8à•Ñ= Ìó"yL¨Ôžá$ $³ÓJ¤õ±A˜)ƒH„ãp¸3nٗX¿ndÐËL"ždˆ’4iîq\X8íÆ¢ˆÖœ®x’<‚Þ_®S‘|<¯á¤$æXG“H1­dLŸDqYM¹Û~é¬[½bkm*㐞ñdŸ±Ý¯·ýpðoF1W«¸Zµ!ƒò¸´æ§Ã ÎjçoV#ÛE¹Df‡Òa6î£Ò™†µí­Yh¶°Gµëóå™Ì¨éƒîÜ.,KàìÞ Õç*‰ÌMÄlŨQ «™BJÆc)!ój‘-LE†9;'´3}®±*^÷u€Ê~iJ„ÓËX˺=M«ŠØ=}£ÿëzoʃ= = =}í×
103
+ ¹\Ä¡‡n-Ô¼äÅË1cÓF"/USÚÁ9-½6.+{ùpþê)µV,ÖÔSÃÀ½Dù.üö•2³õé8éNv•ÓIÝ;ù}¢Ê:¢Ž5¢>¦á!@,%!ÀمûÖÍ·ûÖÍùÖ=M†û֍û#O%¿I臢X$(‘‚Æ0\7BQp8ÏùߟIlrÐ(í5‹1¼ãdyÕ= ´ÀÂÜ©4ƒ2Q†œ6ƒœ¼X&åùc<ñ´1L?ái1)òÓDÖv¢­r²¬I´Ä…ËD=}jrìÈ´~IôÕŠ޲ëQ‰F¹è= ¯,B7…Ø‹GëqÒ\ÚM«¼·<QóŸN§’È\“7ée¾÷©* ~Îà°ØB£ª øÊè“5E¼
104
+ ´¸’d))3…†J“e¹ÏîJ¼¾Èâ®GJ -vöButÞɲ¿ÊæUŠéʓÖ|½¾
105
+ 9ˆÀùÍ¡ô…-´}T‘¾Ìiõ“mÖ¦‹XÀåBA|’ÕÙÓu»!•=}ŒöÁ ¬.]–ÚL<ÇëåçÚ¸¥
106
+ QÞo/IA6
107
+ 3Õ}?™M#¾Ô9¢!¼-1¾Š¨‹cfæ:”Ù1ÅòæœÎP†éƒ*ìm?‰¢ #3L£m)SÅuø¬}%†=MQƒÚ¡Y&ŸºÓ¶Y]ž6äNÒàuà2Ç\kâ–yòÀåú_̰ڍeÛßUÿ7{Skè¦b;ùâø¶[ú¡MR–$-ûQyò¾µô<×§Í#kGY°æ!§DgTVXÂÆ¤u§3é÷¼¸¦So6Y³B âł7Š/ÙÀêíΌšê€Â;ëVØÑã½}˜ý’‡fÀ'£>¬·äÂæ³ËÇ]yeïŒO
108
+ ޛñ¶íþ<ÔaŽ¢/uœØ±"E{axÿ·òø·¬8_B÷±Èo×_«PT  !Ìu,äÃM°Ó÷#[P¨ð@,¢±‹.fŠP¶AÄ.¦P{F´w­Á„~)Ê8Õ£ˆè¦“ÑI¼Ël*¨€ü$Cùý:é÷;±¤§dь™4¦JñLªF
109
+ ~T"qQ<z;c¿vLó®…îóxöF摛‹<¦æÔ­«ۘ’Ó3˜Ý_¡¹Ö©äïldo@)áD^¾nbàK9ýބ‚…r¸þ²â«»I„¦Ç’•mJ•ú‰È·æù·‰LmoßÝ ”ù„ÿì,$SY¹©¥l:ÒØßLÒtҙù»íÔGùdGÀÙK§ï¶Ù\»¾ë;¡\Äʐ۸g‹= ^g¶ƒÇqàð_%XßJl†A<LDüÉ(¥ehi5SÂÕ8Ûå˜å¶pßÕ¤M†ÅÈlK¡R¤Ë븙Ù,°’þÏI‡·~%çuP“%³jJ _{éQßJävt±ÀuíÊqõ8œÈÆÏÐ&¯óUüƶYÏÅdÓ®Àq•XŸÈãÍȾèSôUPÜ¡×ú­ä­„çfœêºX™Á©æ†ì÷UòÐ¥c³{xKðêêúvÖÿˆš”;Òûû¨ÓŽÇŸŽ[²r=}õñ¡³.ò[©[ü©¬çO¦ã!Þ*f¡¿½íÕ …ïÖ›ù֋Ö=M›‡û֍ûÖZ^IÔjàXJœãÙ;/ßsµ½¹gäÙ Onñ„)æ¿°¤Ì$úá2´—kЙÕDšE96hLw²
110
+ ‘rü_Le«¤42rì°BÙThSýdºìL‰æèÀ,;典Gc—»,5ë„éÙMkÆÑL™yÒt¯±ƒÀ<óDø Oç.Yìvèsœw¾%"™~ê3S~¡%g5p´vÀWh¡Ç]*ô«I±Bc6ªˆ6IҚÊ2¹Ç´0wt‚cÄ2cj˜rfÅR=}´1Ër†|5¦OÉðÊÉbÂ*­ßËòÝkµ_^ËBÅêÎ6u>LucÖ:éFŠ·Ëæù)
111
+ (¯ÉóMËî¹P•Ü'ô1ýÈ¡+-æZˆÀ~Åá,1m ψÒgg³Ò4mö‚ãžM
112
+ ߋ=MÏåÃÎ?l»_>‹sŠÅmˆÉVÖS•ðÛÀ£Ò¦.*©ZÈÁ«á>}<Þ
113
+ 2 Ëk…§NÎöƒ C]~x xÊgëlÖ|ôgis¿ªD… =M^#F©;@?€àï]&hÍU¿‡¦8ú9Bv…h¨1ïÏ9Q}ÿ¨Ø,Cäç:ÓÈQßè9³<ެ€ø¸/{mØî¤=MFL‰VæRsFþ“sÆ7»Ò¦ í7$¼ö4Ry þÿbB/( ±4B6Bå 0Ïm†欓ΆXUºr“~þUÇðì¼3ådíЀe+‚ÔLX³Šaß¶œXŒé„ykœâMÙQ‚é¸=MvdœÐ»·5[û͍ÕU‰¯ÍÑÐÕkµUwdø™ý¦EæVlëÓßIÖ™ö¶ßô9·„ë ß=Mxð®£ò–ü-Ócø.´žÐ‡Ò×]G[ q5“@É#“<<˜v = bgdŽ[BN”ÄÆè±SS½¨Øäv}GÜS¼øTþ¹3î<q–Æ@î¹wŸØP†ß+N²N|(•ǁ7ü×ÙÃK+œ|É ”åžÍ;ØÑÿù­9­Ž”N•GÞ[^v¸uØÃVï#é >œRc᯾©äeot”\QíäƒÜ7éG݈r‚œÂ7{áA¬„Ýi¯†ìO^¼ü=M£—?ª£œxY£v’_Òáç7ýN&÷‘µ?yΞ<ŠC”Å_û¿3„ï¾ZŸ26'~ ­¶!hv$P{T°À;¡ü0$‡‘@~Ӣ؛U¨9¦a„&Á^U¸ó7¢¹Ê3l‰fPî3b0_=}â%0ärb8SF´öƒÁ„K¥2:?ª(/¥ÁK7¦š”8ÊߥÃÞO<=}ɐ$X4aðÎ(òßgð0<á?ã1Lþ1éñO±Ü*¨äÔ_²ÄMq¬œ¨‚£4ï›Âü8móûˆöšeÉSºÈ•Qlš=}ã8¢ú‚¸ÒF¶÷O‚鐩…skLÆËy<¼ȉ¬
114
+ ª˜ò?ç“üA¾¤˜®Mk@=M"·=M2ÈÈm²džž°¨ÎmBˊ2©}´äý›i†½¤}u2G7Fó—G9Kë„îuF¢4"ŽÇúB¥u5IT¨Æ˜KµɌHo…˜~:‘WóðSkay:ûÅS†Z-│jóÑ2é= f&/¥9¼Lí€ÓhFÂWR9Gì„ÔD³Ùyô|ïÂx°eŽi6¹“Óiß¾m¦@» ²Œ*p‘]§Fa.EYI²ë;ÙL7ÒËT·kB™Üܱ§ÒP/ò\d‰Ø±ïxӜö·“~!ÒW+SKÀÄÌ QÂ¥ Úuè‹bŒë+I1M‚ú=MBîz4Ávqdò‚Ûsìië‚ÔJ«é}pâ¼ÛEü×JáÍʤÁ¥Å<Ùwª¡•I•õŌ{|¦úRJêøz{¦²’:>´“àÎ<ڒf·vq%A5ì‹È= š™EÕ¯KYx©‡ƒEÓvvAÔª6ÇJÎVw1Ûʺ-ïËєɆr‹U҂UÞÈÑ{-EU¼{{kâËz˜ôÿqëÚ•XÝɃÑw=}6}•¨ŒÌç}]S
115
+ Q ɇæ&,_TPóÏ!³Þ&dÖV‚ɱå!­X,TBÖÝ)OmŒ/ŠB‚È©C[»iöìµ°†Jfº™ÒË¥Ž6äãzv”ÔRoÊ5ç¨vVúfôÞVnëÔq<õæÿû ]ð®¬|[3ƒûQÓ£u§[(tˆœ'™Ÿ—’ˆG}j½hG–RßN¤çÛxÍúep’7g疳—Ò»
116
+ ý”Å–CYÞ§‘‡šPñ yf/^3›ù—ηt=M~΅r[Ù¯W78ñ=McAǯióQÝôž|ùRƒ ÐK#<V:@Հ «Ó&IÚVèM³aŠª&™\‡¨¶-jPd‡é0d¦ ÞQì›Ó?}Vì{ñ1ú­ü‚¤æª1O8Å îHwÍféÌ:åšoÛê÷¿˜ –K! H8ûn~¬Í=MVû{û֍û֍û΍ûÖ=MY<1b•1ÕÚ«¸R}äÑ=MBD7e4H»mìúü‚ö0IÆâlQc—ªù™iìÓo‚Ü.)µj8rkâÖ~2ﲀùMÁ5)}Þhx´’B¿´OÕÅdhÉTgj¿$IkÏjYu꛷,—!9ôµñÒϬѓ…Œl´‘º¬/ÿ„ø\’’7´sþ¼l½G‡ƒ²¼÷\N¯g¡Ë°¢ 5´ ÏÀñœ%]²5¬ÙÁ€/%»$E›*IY{é½j~íw]y©Æ2ëoE~Ϫx|e&J’-pq€¡ªst4ÙÉÂo5E܊jäõ4‹ÀÆè U%ŠÅÈé‘sm¦¿Šb~-îØ&}#-Ÿ‹˜_㣄-7ŽˆøcãFaëÜbzfö÷òÉß¶zÕä³Õ¤Žˆ±ðäÈa=}‹
117
+ 8õogәZ*G ~÷»®CŽ]+* rwoÑޚ̓\hðÓʾ¡´‘9PWÕÖ¡åÝ-T¿ßý&¾~VÐÓ¡¶.CÜfŽõTRËDZjS­è–:i؈ÄýgC¢íä|FtW1=MŽT3ÝÖ¹¾Wѽ©6†Sª<†vvQsÜ«¹[³íýŒæœæì
118
+ ÷†&+ÇÓxˆ|ñâ .6oÐÀü€ê)+î766ŠÌ$SzyvöjØÍµåƒÌ(‹Ìì\‚eäꐥ­OQ;júØúâfÉ1VÖM×A<ÐQÞ­‡‚[5b–V5ÑςÇý€[§6ù)Äù ™ëî¿–œ~'=}+YhÉ= õïaÕÙ.FXؓåa«£6.GëXÙsã©Ç§³Šó½¬ùD¼³w½˜mNꆓñݲ«=}} »š7ª3NÂï}4uÛÉ¿þmòŽæÔ’SŸÄ»KüD>“Þ»ó‚/·¢>ÎfC/÷'šØÒàã„/çϛøíãV·àҜ"sŠ)Ið‚¦= Ù=M"yï+8ÿ)ÜRšY¶õëÒª~–r‘Ü·àZOÏ®šiœ…ØâgÙ¸/c)?‡º¸Tÿ·°±”ëgÇ¿^"¢¿s%ÍGüûïñ¹žúÃۇý[_Em!Ž…-ð͂ ™§ Sæ%(Í-Ðh ¼¯# ²%é?)Òˈ°¼m¢Ì;4DØPè@ò aڜ-’ý1ˆ¾0K˧p”+ñ‚j¨]»bXo¥BdºZ¬^¸ÚÅâL‹1 ÐP¹¶¦‰ßGì
119
+ {(dH¿_bz1ö¨z¤{BîdHJb´~9ÂlL=}…‰ëH{§gùÓTêÑ]qîþª’g´k8åXySæ¡Q–o­Ñš“¬9ǂ,š1ë X Ð1àpÔӍÛÖîӍû֍û֍û֍ûéW­sI†ðƒtDŽÈ–_];9Òko;š*œó\«¡U>#=Mê;Ð×Uœ´¡™K,tZ†@3#;29Éyàh"¬LʅdtCýV;iñ輗fL‰mŒÑ¸¨6WÑÏ©)&¹øYÿ¤—Ï©×l‚xVS?܆ÊwPÓË͹üÃí”}üqS¥?» ¼ð⡜6rçLtȁrw+7GyhÛᢚöb×w6¶ÅВi·ŒÅ= Kr?K•‡z Öíê¸ëvžÐÒZ½­v;›ªûøÿäæþ¡V–ìÓў׭åWŒlŠÃ†[m}–j¶Ñƒ‰‰GùP[6ùùÔÿîÀ[–êÔ³SÛ£[~'“ë[Èõæa¶±.nL•ð°#'Ÿ[²óiÖ ³m5½´ŽáHG=}·[ñ=}‘R¡³ÔŸ½¬éBuðåÀjNÞՓñœÔ«Kë}䝨xàeâßN
120
+ ’ÓEF…EWUúÙyRêí …Ž¼§ýÔ݆åW“˜è@uðÊ­§)C\Œz!/O˜ð°^»·\>OeêšQÕïÁbOÙši—óëO~¾…‘æƒ})?ûˆRàg„®¯t[œ|Ý ƒ›?-òI€“kSÁ¾?Å·¿sìø§ÓžÞóS‰ ¬%#L®%v/ÐÇs ™| cK#¨g#ŒŸ0àGàÌ<a²¢ÔN7Œë@öÁa&O(’—0@=}_%ù±NäO“¨°6Âc0kš¥ØRUd¢­A¬‡b´˜>‰P¥¹4.ÓВ¸U=MâŒ:9†ë²P;§y™Kìüρ愬ðí6ÁnÑ(T¬°Ëo¤¯óB<þ8ò¹(Õ¿gH¸Xê£Üq†§ÂtÊ4EiûH;¦gÉÙHê¿] q"¿Â¼j;ÃÖIæSYfûZQþ—«ñ†‚¬Ç˃ô\6£8¾ÿQƅ«ý5ÇrÉXK»äõOn¹‘揮“ Œ¼lO´j,âÚ@üÌ Úöp€HäcŽðR”œ+]s(MDð[FðÅÊ= «"Uf*H«%ì›%r~7˜a€wбñš±:¢h¡:B¯Zªì?MrÉhºB[¨TD²\Íär£¤Hj|ÉAñijäñ2}·jœûGñ¦ä«¯2Uóè<õëX$¹õ…þ”°qgél{L„¯¬ºlR‹sJ\Kİ[ÆpÒªbÇÖ*ó§IŒ»Ï§â³«*~I²ÊDé¿a5}™µïíu¾,pY_s…ëFµÉÇuZ\qIwEg–­çn­µåUzUðPôØSqƒ J­è­'×U&žñè·ÎH{,eIJ4?£ eu0eñŒûÖ}kŸ‡îl֍û֍û֍ûÖ­ëëõTŠÔ÷ØU|Ãú"­Ó[Tê~ôxrC™,½n9”î·ðé=M”Ì“Ø×nIZî:½g”þñ™eGc‚£Ù-:‚ð×ÊáÖ&k¦:Ì¿‹Ð• ]‹ÐÉáÒß&ór»,LŒòlSñ º„ Š•¬éñEF¸ÈKFIþ¸¼©‰Q@Ãeñ²6WŒ«^­LRÒø\ñb‰‘ e=M;6þ‘N‡ÑñêøŒŒòUÕ õçú„»bˍ>ÒY‘óFég;_¾ãèÌ.êXܼy§h?§ú³=}Ú̒8žð
121
+ -§™=}6摹·ù…ŠI·®k·fN՛ÚdFØÄ}–ÏëÞKNC~ۘQ\2ÇX~ôÃ×±ßÎçÅî>}g™Ä|ъÛ'\n^(Ÿ›|lY|öDŽu¿Ù͝‚,‰Xã‡Z¿Dg
122
+ üyñ™ü |y"Š·*8‹' Œ0ß{= ôÑ!96'4ù9pœ Tà=}€E/ɰWÄDAùthü¶AO¥<¹2R“uhë#݋A_~§Œ¯Nˆ¿v°ÓÐbea:¢=M=d{'+¼¹¢[ $í®(~ÿ4ԚO˜2kr]£ˆqiAmRÞ¶•›i¥Á²iÓD—÷kÒ?µTÜE¹~’V¶—šeîÂ*Íҁme–ª1£5³‡HÆÏul[ĸ}Q­çÀX (µ= q”Wû֍„;ÿ†Öû֍û֍ûŽª®q%´t"+ÄÊLv0øûj€˜Ÿ¡Ús$Î4XÜwÀ E¡Ìï%n6ˆ½xD†.±ù…dU0ù
123
+ ª´ NҍÔhá%B+רDXIòÎ赯±zl©á‰EN5´hwuâ´D†×®EÂm±HØbÂù>©î7Dæ^±xc‚}œ¹¹…–4·ùrk†µNSË£ìðARM‡èô|C³ ìÇëR¿ë,MsC±b´Œ*ûjJ$•42º*;[JT8Ê”¦b×U*q/H,ßÌ0Ùâ *¿3ÈXytn4wé{k…¸Æ’Û½jÞaJ}ÇÊ |Á×jáJCµQuVåöؼna­HuT2):ÉzˆÄ ͱ’¼f¥:ŸV‹\_ƑÆæÊW:£ó1²
124
+ „éÁ´îªZZ¾Á³Ê£îÑaZ=MÇ
125
+ DyÁӎ·nÓZ÷ ø¿”¾fWs9üíƒðÈÜáþ&&ù<£A½-/UH^ã€J£S›,2½WÈP²ŸVø2ãžJ³™mÒµWIÿàÄÁÂ—R§¸$ól 5FâN³Š‡l*üSiá}4«ÃéLÆАjyʍlÕ¸ÿæÂ‰_«GxLˆq‹Óå³C6]Ïy䙁Q Çeª˜V³óûäMˆóÇÂífV|»U½‚,ÕqÆùL{ŽާmÁsV͏ûLœƒ“ÏíϤ.9R[´KðÔª£ÿôÁ£ð͋.“ˆ_ýá{ð˜Çc¹s. Ž[œ›=M¯ã¼$Nf·Ü¥|~t”yðèÅ©ÏÃë²aNõFÛü ò™«k´ÃNCÏÚäŸR{„FÆgt>W“™tH=MQǶçwùÆk¯I]]Ž­hWëc|Qš·çîs>¯Ž™ä˜=M±×g¹˜^•ò(œô’±{÷ÇÉsÃÕoþ^ f½“ƒµïÚ}^oôÜ3µïé¿^#$4k3_—àðò!YŠ%<°"ºU/˜ôMÀР×s#zM-˜ØEÀé± Ý·#Ò^.8Iv´°"ibš‡.YtHDšå°ª-bÚ:Akû¤¼=}™th²yA™v¦´ÿ1r ˜h$£ )5eñŒûÖ=MZ‹ûVÞ±]xû֍û֍û\~5ù°ùÕéŸN³ßc¢‡~3|dÐ)áèb¢”eaAC˜?áúf¢=}%ù&(n®3”ºKmFÛk0n*ŽÝAˆÀñ7DÍþ³üÍD±{’ÌÄĄ-餿EoÄDÊ¥„jWé}cEGkºL´ì}OÙØwö9iÁ{5eÓ75þw¬vQCׂŽéìvwl«ªq)e¯†ª&}4аB÷$å«4çwKFtD®KØÊؔφøóºŠ|S@«FgAí¶:KU·ž÷D
126
+ ŠŽÔòýc“œÈÆò„í¢%ºö‰:ö \ÁºF™¿ó¦›þT„ì7¦a%,‹ê:NöR\˳´Ag“cÑN¦’#-5æ9êîV4yèÚõAã-‡ŽÓLŸøò%ëïzžê’k–ëâ¶_Jxþ³¶-ßy2‰ëËMLóÚxj,Ô ;‹©ÓL7¶…’»MÇ{Š¿ÑÌ߁é ÃS®ûÿ”´ôQgçÕÜ®¼Å<-ÊYZçõß=}?V´‹h:¸Váц®ƒï*çM®S'R›æ‘ ¦ƒ¾uo›Fß Ñß]E“›þMÙpéSc™òߛh‡˜SïÀn¾r\÷fššlœßðӚ­Ç.ï©ã¾ÿî›îÿ:áࡇ"…þ(ìXî¡fÙ"›ª&ÞÉ8ˆH"˟)\½(´Ž<ˆõNPχ °àk3"ù†'ÊN+ÓQð‚oÀûà k¡A—d&]< |Ä»±Ú¿d ±ÂÙB?7­üsAÒÅv„¬Ë&±ÓÍBãÚfÊ,¨\TZRŠÄ¢èÅu±ö{C>¨¬Y5RL.p= $!0í֍ûοû– í֍û֍ûÖ=MÚ§p—/§34«Iø¶x°Y½€†.a⢖…$gÊ)²W4èö¢£}%±ÝÀú@áØQ¢ó$Ÿ6(ÒÌ6ôûJÕP Ā …áÉÛ¢{ï%o_*~6Ü.G™6c’G±Œ:é%D#kjºv¶ÍK)ÿ|’Ù£„¶,Ò^²äãD·æk¦î´y<œ÷h³D_@ùžrrÒ=}iû‡²wE½žj¾¦vT®ÊX=}oq@¥‚~fe¨üªFe4»ëHâusôÎϸýb‘ÏÃBÉrô Ã8Utѓ¼”e䥪¬Ë4ÅWK:=Mq”^ʐ4ÎK&\(Åâžr”͈0vsRºF}œmØ4º'9T{“Ц5òôJÅity“Ûֆf3m­ÖºPýT»ÌƑŸmè1º3T¥‡ŠNLôÔ|ř×iƒ–‹ž<.lψzýõ|œÊInÓ»F”(cÓ(¦ÍQ,12:
127
+ ÆTì눘´ó°Ê°Á‘iã䪦cU-::ÕR4 4 ÄÁ›Oãa¦éÃ,“G9¶ìRL}„xÔêP‹³ Nc¿c¦–Ç,µO9ÒþRdœ„ØòÐÃÁocåp¶ˆ±L‡ƒzfDÔ4o‰¸áR_§Åœ!ë;LÃëyòwÓ Í‹Éöô’Û­Åm7ë+… ðû˜°ÅHë ©¶¢SM+7xâÍ(V M×y+–gM{ïx}ִލ9èÒÅ 'kæ?¶šA<#â[¶f“<­ ˜´äSÕCz†g²|®%=}y«[Òµ“„É
128
+ hsç±ÐÑC‚Kç.®{ý=}›Íƒ–§9È\ú±”²,çÆ.Û챟͆çª}®æ'=}±oXÖ¼“TÚ
129
+ ûQ±CkçÑ®ÿ<¯XZ§ܯ 6óRÞÇeRïÅT¾²¹]˓š‚5Ȃ¾+Å]¹J™õ¼ÏiúôóÆÕ‡…ç÷ý³îšºl8YPâš¼GtoÞù¾Z+]ý·›¦Îìø yÖóӑ߇qïîó!,Ÿ&è!€+@&ãù֍û„ûÖ=MŽ{֍û֍û֍‡›‘Cછ!†])Pu Ž?"ô6@ÿ¿ ‘bXþ§•<­ ¸6óñRÞC“rçt®M9<ýÒYR‘\H¸tìa9ç몮‘õ=}ù
130
+ ZîU’Ô‰ûöQÞÓC‘oç Ïñÿў¨ÿgYv¬—D¹
131
+ ¸XëŸÞÃrçåu®|;<³×š}®ò'<Ó®Z~½’Ù—õ‘¶C#gñÇ®àKçÚ®<±ŸY—T*E/Oì­B ¨I¼¯G\nLœjAkK¤éLdèAdìK¤KD$OFœOEÜLO|ÏB<ÌIÌÈG¬ŽL”ˆA´‰KD=MDœF< Ml2Áá ApéhXÁ„Aî,ô<áM4òN3NÌ2šÏ71Ö0Ê8'%[FdYMì^OÄÚBÌÚA„ÞK̙¾))Qÿ+c^+¿Þ+-(§£I‰bKcãK¯BK%‚H3“"E{rerJ§óJSI…ÓIã’I'Iÿ+I9ªIkIãëI;JI÷ÊI_‹I
132
+ KÙ:KµºKí{K]ûK£[KÚKóšKÓ½R׿ÿ'P^j9TîçmóœþL¿_o©×hÙtÙÞrùÔv9Ùq‰ÜuéÚsÛgYž= 9Ÿdɑb©•fٜ~9›yI•}•kyoÉh)lyrÉva¹eéãv:wþ§P§QBfPÆdV2fWåR²äS†GT‚GUæÄP¢ÅQÚÇW>„RJ„SVTU|!†CoQƒœi‰9C%ƒ„…¾8é‹9 :‹;8;;yº;=M{9«ûÜ.fÄNfÍ·QÕÏÑw¬g¬p£¬tc­ÂC¬íάÁ3­‰s¬Eó­-Ó¬½“­+¬c«|†<x‰ ~ÙÍWvŒ×:×8—;M9/:ù®8Q®;?o:î8Kï;#N9ÕÎ:‰8ÿ9g:>×çf¢‡æ½7æ¼÷fݗfì¯æ ï^»±Ç×%Q= n!‚= Q0̍ûÖýnûÖ=M†‹û֍û֍ûÞëçSÒSl_ a­Gá­qÁ¬,­Ó­Ö±¬pq­ñ­¼Ñ¬³‘¬Ú­·)­i¬鬁I­‰¬Ñ ¬(9†CdVß.“NÃe~šžÃ˜AƒƒC~Qƒp)™IÔyƒ…™C„EÑ5ƒwUC’mÃyƒ{}Ç¡qűQÇ©‡‹†Ä‰ÔÌ‹‹ÜÄ „T=M‚ì†| $„ ›­† <ˆ\< /ÛC¬Rìöƒ¬Á¬%3¬=}³¼“ªÿ¹†œº$¹d¼‹ä¹DyˆÄzŒÄ{
133
+ ^¶›{ w;I÷:©ö;QWZ†ÿ6V.ôNƒë>ïÛï9/XAÃô1CQïâ ¼T–¿VF½Uz½W}”‡·­[wüãUÃû-ÃMÞŸý•Ç­*/îƒ3—ìHâòxúˆöÝWŸO¿¬ø¬c½Û1 ÇÑ·q¯Ï÷„*Bn&5­£«?Aä¸pBq8ÑAÌH4~¼©@Šf2/B«vqåۈ“,YÆ6{œªCZæ3Ï«Æ)åÍd‚2‘XÉè±|LmAÂÅ2jM~Ç1õò©ý e²¬‚hF\ÓH¹uLëF¢0-’ª=MÙdÄ\™~ÑK¿¨pà+ªÕ¥äž1QÉÈ÷JF²¶0MkªõÅäûòBƒyñÞ¼xu~\Ë@2w2ÕK«)uäñʇU±Î¦Èws¬ÎE–ö6o ˜ÝšB—ñС8úðÿW’æîûä WWíeÉ6îørEÆÖ6‹ú¨£åõ–îñþ•0ÁZ©8½]w7±ÁËèùm4 Nª0…šª*ÝdÅþ’?ýu_qÎßS-0¥mµèRpÄ:D/|cd°ÁÃ×'ãäÙ„¤›=}Iæ¯2]gÛ»QÂøx±†¼(_þS›[WaÌ»Hæl2ÍF4±Ê=MüTŸ_}¹™†ÚÃy³×cÓåäYÿ|½Gޙ[P¬|¹7ªx«ä=}+6Û§EBår—éROŸvÙ׉KJ1šÕøÍç:Í؍Z%2/PÖ½! &‹û֍×ï֍û֍û֍ûÖÑÖQÕ1–³éf®ßT ‡×i3îY€Ž»Til»÷FmÁòDS…¡ÿOTwfNÒO«­cEöØôÅêR›ÝüøÄy|:ÍÔ:éœÛúÙp­ó—Í6v³Ü°¬Ú#´÷F§ð‚ÃÙ
134
+ ³†ÿ½œÞðJÏBýV§ìûÕ΄ù_¹–
135
+ ÜiÛk;ì‡:™ÜÕ瘊ÏÑٍ¿‘(ÁÜÎ0¹/s™}ÿ\¸{TîYm–½B~XÂF¼‚gýW~_ƙE¬bçý¾^~’ª•ðÃhÀøIƒ‰=MPû™e7ýºCܟöޒª¯ï9«sœÈ³ä1þôjW‡'o‹ÆËÓ¬ûO‰ã9g0|ÆùåZ
136
+ ÒlE¤ïΊìùà=}º
137
+ ¼@¯‹Ë«Q¼3\ÃÑNé(®¤öÚP#øãýa¿ÌDºÕ÷u9ëq/‘VԀ>·™ZôÝÂ]«ÙêsbK†“ºâ=MAU9îv˜Iâ‰á„±è‹±Qí8ï.B˜Zê}Ç:xä)ލö¢³­zƒAg¨9—´ÁMƒyçYލî®rԀH«Y= Hä™G„Ä,í9ä<֓¡D>«×„ÁLm ã„v“° ŽlfÜcšªp³Ö,„JKùë%ÂÙCñ™·TÃ\-è@FѸí<2±üÌAŸ¨7™¿èiQÊð°$syäZ–‘¬«¤²àÚ'™¦÷°Ïéd>ªq¾ºTÂU}ëpæQ­™Lƒ=}ûøëq@BiÆ4›à\êóÜè Üëgœáׄ@KÙèo1jr¶jtÃV‰l“zó¾î”ÇW8äpfP¦l‚JS¸í|6иÅ̀5‹yïfVÓ­=} ‚/øïa.“´ƒ¼Dǟóñ¿"·Øì5Β­ $0h0á߉ ãž“‹?Ý¿»¿äDG‘_©­¤ÿh­Ä_h;I±vŽ–nŽ~ž>á;ò­=M™óýŽå¯ 7‘¯ɕý#”{} ·Zë´”ÎÆ„NÏRǽûV«A¹³ì֍ûÖyíû¼9g:&@*†!e*$£vËbáª;Vp•c,ÈåEUV!4yø Ô#Û%î%i[óX¢î¾Ù@à’À†G!þ¨@ÝIÐNZ= Ýóá¤àYá /žVâ ÷6X€ˆH\Øü&ð8˜ûwâ6õ2@ý Êù.ž‡=M+ç-n¢ƒò|øM/<ýŽNÌS‰Y¬‹Ý)z¿ ¥—CoáÎ㒱 ÐÁï›XÙ£!õ܀d?¯xðì
138
+ ÁiŸ;ª•äÀž‡%Ёn= =M+W= ÓÖc[aS
139
+ FÁð]Nô‡Ý'= “qr(¶ù¤nŒü«òÿ¿d&ÿ ÈõT4Þ=}z|ö ¿OW×SMtdH.τãRX&§o3ؘÜXÍ^œÊM–í£W´iâ]NüOå£S£Å·ƒç÷­˜Ý§½GÑU y¹¦ß§/6P0(Cúýb"þ¥°VٌÄᣈ’ÓÙ@¾YýòDŽŒ{òÃv?’EP©”=MBé­\ĽYäýRò øfâëEEf¼D+gC×úDZGÅÿ±Ç?TzÙ¡±†Ï€ÁÕ¯¦ð‰vZ’mT}Œ3x˘z×cºrÑM=M„ c-ɩԈ™7½wæc§Î»cû¾yf‡ÙWòŒÆÝÔc¥³ôØfƒ«Äñ·9‰ø%­g:y”^+{U]¤þ‚…[&fӁÏY낫‡Gªõ‡¹¦ÖŒðþ¬m„oÛø‘?/ÛS’.[S›9ÛùœC›…/û2”²Y£ÎÑ%/sy¢×ÌùJ­W6Oí\g0^JùêßÏ0í[Ü“'ÏÔ>žÀ-¿[ÔW?Y]±ž ØÙÃî<~ÎëR~Ìf¾Z—/×¼_á¾Þê+îoÐñ{Þ\e3K%©¹§íB¹§(c=}ËÈ·SzÔnf§èx}o\9öf|%Ýå¥~©‚Iǀ ü€ñY8}FfŸú@Rú1éþ3‚÷˂‹ótQøvœû|³Îaá,Óé>BG6Òê}—ÄJ|¶=}°Žˆöf6žõk¶ÌºHgN’j‡Ò{柾M;9·é—§WèO±›Ä3қËÒyt™ ;ù´ˆà©aš|—Ó^!ÝøûšÄ
140
+ (VV¸ ÇÙcÏ>yoçz ÃvòG{3Þ£½šŠcמôŒ íŚé;°OÛ‰GØ<wÜW> rU]Žq­{û'ùÝír{*øï?t-ígùWÿ…&§] m}×ût¥‚Ë~ß&>&Õv!b#ÅÌ‚q¢µ|jŽÍüùÉ^Æ&™ôžþŸ~sIµ"“]d)uâ´‘ºvk Å\<͉ÿ­öꍽƒÂ
141
+ ïBçϧmÙIólÜoëVbƒ¦¯éWÇû3`});var jh={a:Wr};this.setModule=I=>{t.setModule(zt,I)},this.getModule=()=>t.getModule(zt),this.instantiate=()=>(this.getModule().then(I=>WebAssembly.instantiate(I,jh)).then(I=>{let Ge=I.exports;Js(Ge),m=Ge.l,g(),qh(Ge),r()}),this.ready=new Promise(I=>{r=I}).then(()=>{this.HEAP=m.buffer,this.malloc=tu,this.free=au,this.create_decoder=yi,this.send_setup=ru,this.init_dsp=nu,this.decode_packets=iu,this.destroy_decoder=su}),this)}function dn(){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(t=>{this._common=t,this._input=this._common.allocateTypedArray(this._inputSize,Uint8Array),this._firstPage=!0,this._inputLen=this._common.allocateTypedArray(1,Uint32Array),this._outputBufferPtr=this._common.allocateTypedArray(1,Uint32Array),this._channels=this._common.allocateTypedArray(1,Uint32Array),this._sampleRate=this._common.allocateTypedArray(1,Uint32Array),this._samplesDecoded=this._common.allocateTypedArray(1,Uint32Array);let e=256;this._errors=this._common.allocateTypedArray(e,Uint32Array),this._errorsLength=this._common.allocateTypedArray(1,Int32Array),this._frameNumber=0,this._inputBytes=0,this._outputSamples=0,this._decoder=this._common.wasm.create_decoder(this._input.ptr,this._inputLen.ptr,this._outputBufferPtr.ptr,this._channels.ptr,this._sampleRate.ptr,this._samplesDecoded.ptr,this._errors.ptr,this._errorsLength.ptr,e)}),Object.defineProperty(this,"ready",{enumerable:!0,get:()=>this._ready}),this.reset=()=>(this.free(),this._init()),this.free=()=>{this._common.wasm.destroy_decoder(this._decoder),this._common.free()},this.sendSetupHeader=t=>{this._input.buf.set(t),this._inputLen.buf[0]=t.length,this._common.wasm.send_setup(this._decoder,this._firstPage),this._firstPage=!1},this.initDsp=()=>{this._common.wasm.init_dsp(this._decoder)},this.decodePackets=t=>{let e=[],r=0,n=[];for(let i=0;i<t.length;i++){let s=t[i];this._input.buf.set(s),this._inputLen.buf[0]=s.length,this._common.wasm.decode_packets(this._decoder);let a=this._samplesDecoded.buf[0],o=[],u=new Uint32Array(this._common.wasm.HEAP,this._outputBufferPtr.buf[0],this._channels.buf[0]);for(let l=0;l<this._channels.buf[0];l++){let c=new Float32Array(a);a&&c.set(new Float32Array(this._common.wasm.HEAP,u[l],a)),o.push(c)}e.push(o),r+=a,this._frameNumber++,this._inputBytes+=s.length,this._outputSamples+=a;for(let l=0;l<this._errorsLength.buf;l+=2){let c=this._common.codeToString(this._errors.buf[l]),f=this._common.codeToString(this._errors.buf[l+1]);n.push({message:c+" vorbis_synthesis"+f,frameLength:s.length,frameNumber:this._frameNumber,inputBytes:this._inputBytes,outputSamples:this._outputSamples})}this._errorsLength.buf[0]=0}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,e,this._channels.buf[0],r,this._sampleRate.buf[0],16)},this._isWebWorker=dn.isWebWorker,this._WASMAudioDecoderCommon=dn.WASMAudioDecoderCommon||re,this._EmscriptenWASM=dn.EmscriptenWASM||zt,this._module=dn.module,this._inputSize=128*1024,this._ready=this._init(),this}var Qa=Symbol(),Nt=class{constructor(){this._onCodec=e=>{if(e!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+e)},new re,this._init(),this._ready=this[Qa](dn)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new vd("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[Qa](e){if(this._decoder){let r=this._decoder;await r.ready.then(()=>r.free())}return this._decoder=new e,this._decoder.ready}get ready(){return this._ready}async reset(){return this._init(),this._decoder.reset()}free(){this._decoder.free()}async decodeOggPages(e){let r=[];for(let s=0;s<e.length;s++){let a=e[s];if(this._vorbisSetupInProgress&&(a[ja][0]===1&&this._decoder.sendSetupHeader(a[ja]),a[qa].length)){let o=a[qa][0][_d];this._decoder.sendSetupHeader(o[Sd]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}r.push(...a[qa].map(o=>o[ja]))}let n=await this._decoder.decodePackets(r);this._totalSamplesDecoded+=n.samplesDecoded;let i=e[e.length-1];if(i&&i[wd]){let s=this._totalSamplesDecoded-i[Ad];if(s>0){for(let a=0;a<n.channelData.length;a++)n.channelData[a]=n.channelData[a].subarray(0,n.samplesDecoded-s);n.samplesDecoded-=s,this._totalSamplesDecoded-=s}}return n}async decode(e){return this.decodeOggPages([...this._codecParser.parseChunk(e)])}async flush(){let e=await this.decodeOggPages([...this._codecParser.flush()]);return await this.reset(),e}async decodeFile(e){let r=await this.decodeOggPages([...this._codecParser.parseAll(e)]);return await this.reset(),r}};var Vl=class extends zn{constructor(e){super(e,"ogg-vorbis-decoder",dn,zt)}async sendSetupHeader(e){return this.postToDecoder("sendSetupHeader",e)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(e){return this.postToDecoder("decodePackets",e)}},ws=class extends Nt{constructor(){super(),this._ready=super[Qa](Vl)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};Sa(Nt,"OggVorbisDecoder");Sa(ws,"OggVorbisDecoderWebWorker");var Gl=class extends Error{constructor(e){super(e),this.name="OggDecodeError"}};async function Ja(t,e=new Nt){await e.ready;let r=await e.decode(new Uint8Array(t)),n=r.errors;if(n&&n.length>0)throw new Gl(n.map(i=>i.message).join("; "));return{sampleRate:r.sampleRate,channels:r.channelData.length,bitDepth:r.bitDepth,channelData:r.channelData}}var Ss=class extends Error{constructor(e){super(e),this.name="AudioRegistryError"}},ti=class{constructor(e,r={}){this.vfs=e;this.refCounts=new Map;this.nextRequestId=0;this.cache=new Zt(r.cacheSize??64),r.workerPath&&(this.worker=new Worker(r.workerPath,{type:"module"}))}get size(){return this.cache.size}get capacity(){return this.cache.capacity}async load(e){let r=e.toLowerCase(),n=this.cache.get(r);if(n)return this.refCounts.set(r,(this.refCounts.get(r)??0)+1),n;let s=(await this.vfs.readFile(e)).slice().buffer,a=await this.decodeByExtension(e,s);return this.cache.set(r,a),this.refCounts.set(r,1),a}release(e){let r=e.toLowerCase(),n=this.refCounts.get(r)??0;n<=1?(this.cache.delete(r),this.refCounts.delete(r)):this.refCounts.set(r,n-1)}clearAll(){this.cache.clear(),this.refCounts.clear()}set capacity(e){this.cache.capacity=e}async decodeByExtension(e,r){let n=e.toLowerCase();if(n.endsWith(".wav")){if(this.worker)return this.decodeWavInWorker(r);let i=wa(r),s=i.channels,a=Array.from({length:s},()=>new Float32Array(i.samples.length/s));for(let o=0;o<i.samples.length;o+=1)a[o%s][Math.floor(o/s)]=i.samples[o];return{sampleRate:i.sampleRate,channels:s,bitDepth:i.bitsPerSample,channelData:a}}if(n.endsWith(".ogg")||n.endsWith(".oga"))return Ja(r);throw new Ss(`Unsupported audio format: ${e}`)}decodeWavInWorker(e){return new Promise((r,n)=>{if(!this.worker){n(new Error("Worker not initialized"));return}let i=this.nextRequestId++,s=a=>{if(a.data.id===i)if(this.worker.removeEventListener("message",s),a.data.type==="success"){let o=a.data.data,u=o.channels,l=Array.from({length:u},()=>new Float32Array(o.samples.length/u));for(let c=0;c<o.samples.length;c+=1)l[c%u][Math.floor(c/u)]=o.samples[c];r({sampleRate:o.sampleRate,channels:u,bitDepth:o.bitsPerSample,channelData:l})}else n(new Error(a.data.message))};this.worker.addEventListener("message",s),this.worker.postMessage({id:i,buffer:e,type:"wav"},[e])})}};var np="quake2ts-pak-indexes",ip="pak-indexes";function Md(){if(typeof indexedDB<"u")return indexedDB;if(typeof window<"u"&&"indexedDB"in window)return window.indexedDB;if(typeof globalThis<"u"&&"indexedDB"in globalThis)return globalThis.indexedDB}function As(t,e){let r=Md();return r?new Promise((n,i)=>{let s=r.open(t,1);s.onupgradeneeded=()=>{let{result:a}=s;a.objectStoreNames.contains(e)||a.createObjectStore(e,{keyPath:"key"})},s.onerror=()=>i(s.error??new Error("Unknown IndexedDB error")),s.onsuccess=()=>n(s.result)}):Promise.reject(new Error("IndexedDB is not available in this environment"))}function Ms(t,e,r,n){return new Promise((i,s)=>{let o=t.transaction(e,r).objectStore(e),u=n(o);u.onsuccess=()=>i(u.result),u.onerror=()=>s(u.error??new Error("IndexedDB transaction error"))})}function Wl(t,e){return`${ae(t)}:${e.toString(16)}`}function sp(t){return t.map(e=>({...e}))}var eo=class{constructor(e=np,r=ip){this.dbName=e;this.storeName=r}get isSupported(){return!!Md()}async persist(e){if(!this.isSupported)return;let r=e.validate(),n={...r,key:Wl(e.name,r.checksum),name:e.name,size:e.size,persistedAt:Date.now(),entries:sp(r.entries)},i=await As(this.dbName,this.storeName);return await Ms(i,this.storeName,"readwrite",s=>s.put(n)),i.close(),n}async find(e,r){if(!this.isSupported)return;let n=await As(this.dbName,this.storeName),i=r!==void 0?Wl(e,r):void 0,s=await Ms(n,this.storeName,"readonly",a=>i?a.get(i):a.getAll());if(n.close(),!!s){if(Array.isArray(s)){let a=ae(e),o=s.filter(u=>ae(u.name)===a);return o.length===0?void 0:o.sort((u,l)=>l.persistedAt-u.persistedAt)[0]}return s}}async remove(e,r){if(!this.isSupported)return!1;let n=await As(this.dbName,this.storeName),i=r!==void 0?Wl(e,r):void 0,s=await Ms(n,this.storeName,"readwrite",a=>{if(i)return a.delete(i);let o=`${ae(e)}:`;return a.delete(IDBKeyRange.bound(o,`${o}\uFFFF`,!1,!0))});return n.close(),typeof s=="number"?s>0:!0}async clear(){if(!this.isSupported)return;let e=await As(this.dbName,this.storeName);await Ms(e,this.storeName,"readwrite",r=>r.clear()),e.close()}async list(){if(!this.isSupported)return[];let e=await As(this.dbName,this.storeName),r=await Ms(e,this.storeName,"readonly",n=>n.getAll());return e.close(),r.sort((n,i)=>i.persistedAt-n.persistedAt)}};var fn=class extends Error{constructor(r,n){super(n??`Missing dependencies: ${r.join(", ")}`);this.missing=r;this.name="AssetDependencyError"}},Es=class{constructor(){this.nodes=new Map}register(e,r=[]){let n=this.nodes.get(e)??{dependencies:new Set,loaded:!1};r.forEach(i=>n.dependencies.add(i)),this.nodes.set(e,n),r.forEach(i=>{this.nodes.has(i)||this.nodes.set(i,{dependencies:new Set,loaded:!1})})}markLoaded(e){let r=this.nodes.get(e)??{dependencies:new Set,loaded:!1},n=this.getMissingDependencies(e,r);if(n.length>0)throw new fn(n,`Asset ${e} is missing dependencies: ${n.join(", ")}`);r.loaded=!0,this.nodes.set(e,r)}markUnloaded(e){let r=this.nodes.get(e);r&&(r.loaded=!1)}isLoaded(e){return this.nodes.get(e)?.loaded??!1}missingDependencies(e){let r=this.nodes.get(e);return r?this.getMissingDependencies(e,r):[]}reset(){this.nodes.clear()}getMissingDependencies(e,r){let n=[];for(let i of r.dependencies)this.nodes.get(i)?.loaded||n.push(i);return n}},to=class{constructor(e,r={}){this.vfs=e;this.maps=new Map;this.loadQueue=[];this.activeLoads=0;this.textures=new On({capacity:r.textureCacheCapacity??128,maxMemory:r.textureMemoryLimit}),this.audio=new ti(e,{cacheSize:r.audioCacheSize??64,workerPath:r.audioWorkerPath}),this.dependencyTracker=r.dependencyTracker??new Es,this.resourceTracker=r.resourceTracker,this.md2=new Fn(e),this.md3=new Bn(e),this.sprite=new Dn(e),this.bsp=new Rn(e,{useWorker:!!r.bspWorkerPath,workerPath:r.bspWorkerPath}),this.maxConcurrentLoads=r.maxConcurrentLoads??4,this.palette=new Uint8Array(768);for(let n=0;n<256;n++)this.palette[n*3]=n,this.palette[n*3+1]=n,this.palette[n*3+2]=n}async loadPalette(e="pics/colormap.pcx"){try{let r=await this.vfs.readFile(e),n=Pi(r);n.palette&&(this.palette=n.palette)}catch(r){console.warn(`Failed to load palette from ${e}:`,r)}}isAssetLoaded(e,r){return this.dependencyTracker.isLoaded(this.makeKey(e,r))}registerTexture(e,r){this.textures.set(e,r);let n=this.makeKey("texture",e);this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n)}async loadTexture(e){if(this.resourceTracker){let a=this.vfs.stat(e);this.resourceTracker.recordLoad("texture",e,a?.size,a?.sourcePak)}let r=this.textures.get(e);if(r)return r;let n=await this.vfs.readFile(e),i=e.split(".").pop()?.toLowerCase(),s;if(i==="wal")s=_a(n,this.palette);else if(i==="pcx")s=va(Pi(n));else if(i==="tga")s=Yu(wl(n));else throw new Error(`Unsupported texture format for loadTexture: ${i}`);return this.registerTexture(e,s),s}async loadSound(e){if(this.resourceTracker){let i=this.vfs.stat(e);this.resourceTracker.recordLoad("sound",e,i?.size,i?.sourcePak)}let r=await this.audio.load(e),n=this.makeKey("sound",e);return this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n),r}async loadMd2Model(e,r=[]){if(this.resourceTracker){let o=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,o?.size,o?.sourcePak)}let n=this.makeKey("model",e),i=r.map(o=>this.makeKey("texture",o));this.dependencyTracker.register(n,i);let s=this.dependencyTracker.missingDependencies(n);if(s.length>0)throw new fn(s,`Asset ${n} is missing dependencies: ${s.join(", ")}`);let a=await this.md2.load(e);return this.dependencyTracker.markLoaded(n),a}getMd2Model(e){if(this.resourceTracker){let r=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,r?.size,r?.sourcePak)}return this.md2.get(e)}async loadMd3Model(e,r=[]){if(this.resourceTracker){let o=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,o?.size,o?.sourcePak)}let n=this.makeKey("model",e),i=r.map(o=>this.makeKey("texture",o));this.dependencyTracker.register(n,i);let s=this.dependencyTracker.missingDependencies(n);if(s.length>0)throw new fn(s,`Asset ${n} is missing dependencies: ${s.join(", ")}`);let a=await this.md3.load(e);return this.dependencyTracker.markLoaded(n),a}getMd3Model(e){if(this.resourceTracker){let r=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,r?.size,r?.sourcePak)}return this.md3.get(e)}async loadSprite(e){if(this.resourceTracker){let i=this.vfs.stat(e);this.resourceTracker.recordLoad("sprite",e,i?.size,i?.sourcePak)}let r=this.makeKey("sprite",e);this.dependencyTracker.register(r);let n=await this.sprite.load(e);return this.dependencyTracker.markLoaded(r),n}async loadMap(e){if(this.resourceTracker){let i=this.vfs.stat(e);this.resourceTracker.recordLoad("map",e,i?.size,i?.sourcePak)}let r=this.makeKey("map",e);if(this.maps.has(e))return this.maps.get(e);this.dependencyTracker.register(r);let n=await this.bsp.load(e);return this.maps.set(e,n),this.dependencyTracker.markLoaded(r),n}getMap(e){return this.maps.get(e)}listFiles(e){return this.vfs.findByExtension(e)}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset(),this.maps.clear(),this.loadQueue.length=0}getMemoryUsage(){let e=0,r=0;if(typeof process<"u"&&process.memoryUsage){let n=process.memoryUsage();e=n.heapTotal,r=n.heapUsed}return{textures:this.textures.memoryUsage,audio:this.audio.size,heapTotal:e,heapUsed:r}}enforceMemoryBudget(e){e.textureMemoryLimit!==void 0&&(this.textures.maxMemory=e.textureMemoryLimit),e.textureCacheCapacity!==void 0&&(this.textures.capacity=e.textureCacheCapacity),e.audioCacheSize!==void 0&&(this.audio.capacity=e.audioCacheSize)}clearCache(e){switch(e){case"texture":this.textures.clear();break;case"sound":this.audio.clearAll();break;case"map":this.maps.clear();break}}async preloadAssets(e){let r=e.map(n=>{let i=this.detectAssetType(n);return i?this.queueLoad(n,i,0):Promise.resolve()});await Promise.all(r)}queueLoad(e,r,n=1){return r==="texture"&&this.textures.get(e)?Promise.resolve(this.textures.get(e)):new Promise((i,s)=>{this.loadQueue.push({path:e,type:r,priority:n,resolve:i,reject:s}),this.loadQueue.sort((a,o)=>o.priority-a.priority),this.processQueue()})}async processQueue(){if(this.activeLoads>=this.maxConcurrentLoads||this.loadQueue.length===0)return;let e=this.loadQueue.shift();this.activeLoads++;try{let r;switch(e.type){case"texture":r=await this.loadTexture(e.path);break;case"sound":r=await this.loadSound(e.path);break;case"model":e.path.endsWith(".md2")?r=await this.loadMd2Model(e.path):e.path.endsWith(".md3")&&(r=await this.loadMd3Model(e.path));break;case"sprite":r=await this.loadSprite(e.path);break;case"map":r=await this.loadMap(e.path);break;default:throw new Error(`Unknown asset type ${e.type}`)}e.resolve(r)}catch(r){e.reject(r)}finally{this.activeLoads--,this.processQueue()}}detectAssetType(e){let r=e.split(".").pop()?.toLowerCase();return r?["wal","pcx","tga","png","jpg"].includes(r)?"texture":["wav","ogg"].includes(r)?"sound":["md2","md3"].includes(r)?"model":["sp2"].includes(r)?"sprite":["bsp"].includes(r)?"map":null:null}makeKey(e,r){return`${e}:${ae(r)}`}};var ro=class{constructor(e){this.factory=e}getContext(){return this.context||(this.context=this.factory()),this.context}async resume(){let e=this.getContext();e.state==="suspended"&&await e.resume()}getState(){return this.context?.state??"suspended"}};function no(t){let e=t.getContext(),r=e.createGain();r.gain.value=1;let n=e.createDynamicsCompressor(),i=e.createBiquadFilter?.(),s;if(e.createConvolver&&e.createGain){let a=e.createConvolver(),o=e.createGain(),u=e.createGain();o.connect(a),a.connect(u),s={convolver:a,input:o,output:u}}return i?(i.type="lowpass",i.frequency.value=2e4,i.Q.value=.707,r.connect(i),i.connect(n),s&&s.output.connect(i)):(r.connect(n),s&&s.output.connect(n)),n.connect(e.destination),{context:e,master:r,compressor:n,filter:i,reverb:s}}var io=class{constructor(e=new Pn){this.configStrings=e;this.buffers=new Map}registerName(e){return this.configStrings.soundIndex(e)}register(e,r){let n=this.registerName(e);return this.buffers.set(n,r),n}find(e){return this.configStrings.findSoundIndex(e)}get(e){return this.buffers.get(e)}has(e){return this.buffers.has(e)}getName(e){return this.configStrings.getName(e)}};var so=class{constructor(e){this.vfs=e.vfs,this.registry=e.registry,this.contextController=e.context,this.soundRoot=e.soundRoot??"sound/",this.decodeAudio=e.decodeAudio??((r,n)=>{if(!r.decodeAudioData)throw new Error("decodeAudioData is not available on the provided audio context");return r.decodeAudioData(n)})}async precache(e){let r=[...new Set(e.map(s=>this.normalize(s)))],n={loaded:[],skipped:[],missing:[],errors:{}},i=this.contextController.getContext();for(let s of r)try{let a=this.registry.find(s);if(a!==void 0&&this.registry.has(a)){n.skipped.push(s);continue}if(!this.vfs.stat(s)){n.missing.push(s);continue}let l=(await this.vfs.readFile(s)).slice().buffer,c=await this.decodeAudio(i,l);this.registry.register(s,c),n.loaded.push(s)}catch(a){let o=a instanceof Error?a:new Error(String(a));n.errors[s]=o}return n}normalize(e){let r=ae(e.replace(/^\//,""));return r.startsWith(this.soundRoot)?r:ae(`${this.soundRoot}${r}`)}};var ap=7,Ls=t=>t&ap;function ao(t){return Array.from({length:Si},()=>({entnum:0,entchannel:ot.Auto,endTimeMs:0,isPlayer:!1,active:!1})).map(e=>({...e,isPlayer:e.entnum===t}))}function oo(t,e,r,n){if(r<0)throw new Error("pickChannel: entchannel must be non-negative");let i=Ls(r),s=-1,a=Number.POSITIVE_INFINITY;for(let o=0;o<t.length;o+=1){let u=t[o],l=Ls(u.entchannel);if(i!==ot.Auto&&u.entnum===e&&l===i){s=o;break}if(u.active&&u.entnum===n.playerEntity&&e!==n.playerEntity)continue;let c=u.endTimeMs-n.nowMs;(s===-1||c<a)&&(a=c,s=o)}return s===-1?void 0:s}var lo=class{constructor(e){this.activePreset=null;this.enabled=!0;this.node=e,this.node.input.gain.value=.5,this.node.output.gain.value=1}setPreset(e){this.activePreset=e,this.node.convolver.buffer!==(e?.buffer??null)&&(this.node.convolver.buffer=e?.buffer??null),e&&e.gain!==void 0?this.node.output.gain.value=e.gain:this.node.output.gain.value=1}setEnabled(e){this.enabled=e,e?this.node.input.gain.value=.5:this.node.input.gain.value=0}getOutputNode(){return this.node.output}getInputNode(){return this.node.input}};var co=class{constructor(e){this.activeSources=new Map;this.playbackRate=1;this.contextController=e.context,this.registry=e.registry,this.playerEntity=e.playerEntity,this.channels=ao(e.playerEntity),this.listener=e.listener??{origin:cu,right:{x:1,y:0,z:0}},this.sfxVolume=e.sfxVolume??1,this.masterVolume=e.masterVolume??1,this.resolveOcclusion=e.resolveOcclusion,this.graph=no(this.contextController),this.graph.master.gain.value=this.masterVolume,this.graph.reverb&&(this.reverb=new lo(this.graph.reverb))}setListener(e){this.listener=e}setMasterVolume(e){this.masterVolume=e,this.graph.master.gain.value=e}setSfxVolume(e){this.sfxVolume=e}setPlaybackRate(e){this.playbackRate=e;for(let r of this.activeSources.values())r.source.playbackRate&&(r.source.playbackRate.value=e),this.updateSourceGain(r)}async ensureRunning(){await this.contextController.resume()}setReverbPreset(e){this.reverb?.setPreset(e)}play(e){let r=this.registry.get(e.soundIndex);if(!r)return;let n=this.graph.context,i=n.currentTime*1e3,s=oo(this.channels,e.entity,e.channel,{nowMs:i,playerEntity:this.playerEntity});if(s===void 0)return;let a=this.activeSources.get(s);a&&(a.source.onended=null,a.source.stop(),this.activeSources.delete(s));let o=n.createBufferSource();o.buffer=r,o.loop=e.looping??!1,o.playbackRate&&(o.playbackRate.value=this.playbackRate);let u=e.origin??this.listener.origin,l=n.createGain(),c=this.createPanner(n,e.attenuation),f=this.resolveOcclusion?.(this.listener,u,e.attenuation),d=Ed(f?.gainScale??1),h=this.resolveOcclusion?this.createOcclusionFilter(n,f?.lowpassHz??2e4):void 0;this.applyOriginToPanner(c,u);let g=e.volume/255*this.sfxVolume,p=Math.abs(this.playbackRate-1)<.001?1:0;l.gain.value=g*d*p;let y=n.currentTime+(e.timeOffsetMs??0)/1e3,v=(e.looping?Number.POSITIVE_INFINITY:r.duration*1e3)+y*1e3;o.connect(c);let x=c;h?(c.connect(h),h.connect(l),x=l):(c.connect(l),x=l),l.connect(this.graph.master),this.reverb&&l.connect(this.reverb.getInputNode()),o.start(y),o.onended=()=>{this.channels[s].active=!1,this.activeSources.delete(s)};let b={channelIndex:s,entnum:e.entity,entchannel:Ls(e.channel),endTimeMs:v,source:o,panner:c,gain:l,baseGain:g,origin:u,attenuation:e.attenuation,occlusion:h?{scale:d,lowpassHz:f?.lowpassHz,filter:h}:f?{scale:d,lowpassHz:f.lowpassHz}:void 0};return this.channels[s]={entnum:e.entity,entchannel:Ls(e.channel),endTimeMs:v,isPlayer:e.entity===this.playerEntity,active:!0},this.activeSources.set(s,b),b}stop(e){let r=this.activeSources.get(e);r&&(r.source.stop(),this.channels[e].active=!1,this.activeSources.delete(e))}stopEntitySounds(e){for(let[r,n]of[...this.activeSources.entries()])n.entnum===e&&(n.source.stop(),this.channels[r].active=!1,this.activeSources.delete(r))}updateEntityPosition(e,r){for(let n of this.activeSources.values())if(n.entnum===e&&(this.applyOriginToPanner(n.panner,r),n.origin=r,this.resolveOcclusion)){let i=this.resolveOcclusion(this.listener,r,n.attenuation);this.applyOcclusion(n,i)}}positionedSound(e,r,n,i){return this.play({entity:0,channel:ot.Auto,soundIndex:r,volume:n,attenuation:i,origin:e})}ambientSound(e,r,n){return this.play({entity:0,channel:ot.Auto,soundIndex:r,volume:n,attenuation:Ai,origin:e,looping:!0})}getChannelState(e){return this.channels[e]}getDiagnostics(){return{activeChannels:this.activeSources.size,masterVolume:this.masterVolume,sfxVolume:this.sfxVolume,channels:[...this.channels],activeSounds:[...this.activeSources.values()].map(e=>({entnum:e.entnum,entchannel:e.entchannel,channelIndex:e.channelIndex,origin:e.origin,gain:e.gain.gain.value,baseGain:e.baseGain,attenuation:e.attenuation,maxDistance:e.panner.maxDistance,distanceModel:e.panner.distanceModel,occlusion:e.occlusion?{scale:e.occlusion.scale,lowpassHz:e.occlusion.lowpassHz}:void 0}))}}setUnderwater(e,r=400){let n=this.graph.filter;n&&(n.type="lowpass",n.Q.value=.707,n.frequency.value=e?r:2e4)}createPanner(e,r){let n=e.createPanner?e.createPanner():Object.assign(e.createGain(),{positionX:{value:this.listener.origin.x},positionY:{value:this.listener.origin.y},positionZ:{value:this.listener.origin.z}});return this.configurePanner(n,r)}configurePanner(e,r){let n=Ln(r);return e.refDistance=En,e.maxDistance=Zr(r),e.rolloffFactor=n,e.distanceModel="linear",e.positionX.value=this.listener.origin.x,e.positionY.value=this.listener.origin.y,e.positionZ.value=this.listener.origin.z,e}applyOriginToPanner(e,r){e.positionX.value=r.x,e.positionY.value=r.y,e.positionZ.value=r.z}createOcclusionFilter(e,r){if(!e.createBiquadFilter)return;let n=e.createBiquadFilter();return n.type="lowpass",n.Q.value=.707,n.frequency.value=Xl(r,10,2e4),n}updateSourceGain(e){let r=e.occlusion?.scale??1,n=Math.abs(this.playbackRate-1)<.001?1:0;e.gain.gain.value=e.baseGain*r*n}applyOcclusion(e,r){let n=Ed(r?.gainScale??1),i=Math.abs(this.playbackRate-1)<.001?1:0;if(e.gain.gain.value=e.baseGain*n*i,e.occlusion?.filter){let s=r?.lowpassHz??2e4;e.occlusion.filter.frequency.value=Xl(s,10,2e4)}e.occlusion?(e.occlusion.scale=n,e.occlusion.lowpassHz=r?.lowpassHz):r&&(e.occlusion={scale:n,lowpassHz:r.lowpassHz})}},Xl=(t,e,r)=>Math.min(r,Math.max(e,t)),Ed=t=>Xl(t,0,1);var Ts=class{constructor(e){this.trace=e;this.resolve=(e,r,n)=>{let i=Jo(uu(r,e.origin)),s=Zr(n),u=2e4*(1-Math.min(i,s)/Math.max(1,s)*.9),l=this.trace(e.origin,r,void 0,void 0),c=1,f=2e4;l.fraction<1&&(c=.3,f=400);let d=Math.min(u,f);if(c<1||d<2e4)return{gainScale:c,lowpassHz:d}}}};function Ld(t){return new Ts(t).resolve}var uo=class{constructor(e){this.createElement=e.createElement,this.resolveSource=e.resolveSource??(async r=>r),this.volume=e.volume??1,this.crossfadeDuration=e.crossfadeDuration??1}async playTrack(e){let r=`music/track${e.toString().padStart(2,"0")}.ogg`;return this.play(r)}async play(e,{loop:r=!0,restart:n=!1}={}){if(this.track===e&&this.currentElement){this.currentElement.loop=r,this.cancelFade(),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0),this.currentElement.volume=this.volume,n&&(this.currentElement.currentTime=0),(this.currentElement.paused||n)&&await this.currentElement.play();return}let i=await this.resolveSource(e);this.cancelFade(),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0),this.currentElement&&(this.fadingElement=this.currentElement,this.currentElement=void 0);let s=this.createElement();s.src=i,s.loop=r,s.volume=0,s.currentTime=0,s.load();try{await s.play()}catch(a){console.warn(`MusicSystem: Failed to play ${e}`,a),this.fadingElement}this.currentElement=s,this.track=e,this.startCrossfade()}pause(){this.cancelFade(),this.currentElement&&!this.currentElement.paused&&this.currentElement.pause(),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0)}async resume(){!this.currentElement||!this.currentElement.paused||(await this.currentElement.play(),this.currentElement.volume=this.volume)}stop(){this.cancelFade(),this.currentElement&&(this.currentElement.pause(),this.currentElement.currentTime=0,this.currentElement=void 0),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0),this.track=void 0}setVolume(e){this.volume=e,this.currentElement&&!this.fadeInterval&&(this.currentElement.volume=e)}getState(){let e=!!(this.currentElement&&!this.currentElement.paused&&!this.currentElement.ended),r=!!this.currentElement?.paused;return{track:this.track,paused:r,playing:e,volume:this.volume}}startCrossfade(){let r=this.crossfadeDuration*1e3/50,n=this.volume/r,i=0,s=this.fadingElement?this.fadingElement.volume:0,a=()=>{let o=!1;this.currentElement&&(i=Math.min(this.volume,i+n),this.currentElement.volume=i,i<this.volume&&(o=!0)),this.fadingElement&&(s=Math.max(0,s-n),this.fadingElement.volume=s,s>0?o=!0:(this.fadingElement.pause(),this.fadingElement=void 0)),o||this.cancelFade()};a(),(this.currentElement&&this.currentElement.volume<this.volume||this.fadingElement)&&(this.fadeInterval=setInterval(a,50))}cancelFade(){this.fadeInterval&&(clearInterval(this.fadeInterval),this.fadeInterval=void 0)}};function op(t){t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.enable(t.CULL_FACE),t.cullFace(t.BACK),t.enable(t.BLEND),t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA)}function lp(t,e,r,n){for(let i of e){let s=t.getExtension(i);if(!s)throw new Error(`Missing required WebGL extension: ${i}`);n.set(i,s)}for(let i of r){let s=t.getExtension(i);s&&n.set(i,s)}}function Td(t,e={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:i=[]}=e,s=t.getContext("webgl2",r??{antialias:!0});if(!s)throw new Error("WebGL2 not supported or failed to initialize");op(s);let a=new Map;lp(s,n,i,a);let o=!1,u=new Set,l=new Set,c=d=>{o=!0,d.preventDefault();for(let h of u)h()},f=()=>{o=!1;for(let d of l)d()};return t.addEventListener("webglcontextlost",c),t.addEventListener("webglcontextrestored",f),{gl:s,extensions:a,isLost:()=>o,onLost(d){return u.add(d),()=>u.delete(d)},onRestored(d){return l.add(d),()=>l.delete(d)},dispose(){t.removeEventListener("webglcontextlost",c),t.removeEventListener("webglcontextrestored",f),u.clear(),l.clear(),a.clear()}}}function Cd(t,e,r){let n=t.createShader(e);if(!n)throw new Error("Failed to allocate shader");if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS)){let s=t.getShaderInfoLog(n)??"Unknown shader compile failure";throw t.deleteShader(n),new Error(s)}return n}function cp(t,e,r,n){let i=t.createProgram();if(!i)throw new Error("Failed to allocate shader program");if(t.attachShader(i,e),t.attachShader(i,r),n)for(let[a,o]of Object.entries(n))t.bindAttribLocation(i,o,a);if(t.linkProgram(i),!t.getProgramParameter(i,t.LINK_STATUS)){let a=t.getProgramInfoLog(i)??"Unknown shader link failure";throw t.deleteProgram(i),new Error(a)}return i}var pe=class t{constructor(e,r,n){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=r,this.sourceSize=n}static create(e,r,n){let i=Cd(e,e.VERTEX_SHADER,r.vertex),s=Cd(e,e.FRAGMENT_SHADER,r.fragment);try{let a=cp(e,i,s,n),o=r.vertex.length+r.fragment.length;return new t(e,a,o)}finally{e.deleteShader(i),e.deleteShader(s)}}use(){this.gl.useProgram(this.program)}getUniformLocation(e){if(!this.uniformLocations.has(e)){let r=this.gl.getUniformLocation(this.program,e);this.uniformLocations.set(e,r)}return this.uniformLocations.get(e)??null}getAttributeLocation(e){if(!this.attributeLocations.has(e)){let r=this.gl.getAttribLocation(this.program,e);this.attributeLocations.set(e,r)}return this.attributeLocations.get(e)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function kd(t,e,r){return pe.create(t,e,r)}var ge=class{constructor(e,r=e.STATIC_DRAW,n){this.gl=e,this.target=n??e.ARRAY_BUFFER;let i=e.createBuffer();if(!i)throw new Error("Failed to allocate buffer");this.buffer=i,e.bindBuffer(this.target,this.buffer),e.bufferData(this.target,0,r)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(e,r=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,e,r)}update(e,r=0){this.bind(),this.gl.bufferSubData(this.target,r,e)}dispose(){this.gl.deleteBuffer(this.buffer)}},we=class extends ge{constructor(e,r=e.STATIC_DRAW){super(e,r,e.ELEMENT_ARRAY_BUFFER)}},Se=class{constructor(e){this.gl=e;let r=e.createVertexArray();if(!r)throw new Error("Failed to allocate vertex array object");this.vao=r}bind(){this.gl.bindVertexArray(this.vao)}configureAttributes(e,r){this.bind(),r&&r.bind();for(let n of e)this.gl.enableVertexAttribArray(n.index),this.gl.vertexAttribPointer(n.index,n.size,n.type,n.normalized??!1,n.stride??0,n.offset??0),n.divisor!==void 0&&this.gl.vertexAttribDivisor(n.index,n.divisor)}dispose(){this.gl.deleteVertexArray(this.vao)}},hr=class{constructor(e,r=e.TEXTURE_2D){this.width=0;this.height=0;this.gl=e,this.target=r;let n=e.createTexture();if(!n)throw new Error("Failed to allocate texture");this.texture=n}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}upload(e,r,n){this.width=e,this.height=r,this.uploadImage(0,this.gl.RGBA,e,r,0,this.gl.RGBA,this.gl.UNSIGNED_BYTE,n)}uploadImage(e,r,n,i,s,a,o,u){this.bind(),this.gl.texImage2D(this.target,e,r,n,i,s,a,o,u)}dispose(){this.gl.deleteTexture(this.texture)}},ri=class{constructor(e){this.gl=e,this.target=e.TEXTURE_CUBE_MAP;let r=e.createTexture();if(!r)throw new Error("Failed to allocate cubemap texture");this.texture=r}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadFace(e,r,n,i,s,a,o,u,l){this.bind(),this.gl.texImage2D(e,r,n,i,s,a,o,u,l)}dispose(){this.gl.deleteTexture(this.texture)}},fo=class{constructor(e){this.gl=e;let r=e.createFramebuffer();if(!r)throw new Error("Failed to allocate framebuffer");this.framebuffer=r}bind(e=this.gl.FRAMEBUFFER){this.gl.bindFramebuffer(e,this.framebuffer)}attachTexture2D(e,r,n=0){this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,e,r.target,r.texture,n)}dispose(){this.gl.deleteFramebuffer(this.framebuffer)}};var $l=4,Kl=7*$l,Zl=[{index:0,size:3,type:5126,stride:Kl,offset:0},{index:1,size:2,type:5126,stride:Kl,offset:3*$l},{index:2,size:2,type:5126,stride:Kl,offset:5*$l}];function up(t,e){return{width:t,height:t,padding:e,data:new Uint8Array(t*t*4),cursorX:0,cursorY:0,rowHeight:0}}function dp(t){let e=t.width*t.height;if(e===0)throw new Error("Invalid lightmap with zero area");let r=t.samples.byteLength/e;if(!Number.isInteger(r)||r<3||r>4)throw new Error("Unsupported lightmap channel count");return r}function fp(t,e,r){let n=dp(r),i=t.width*4,s=e.x+t.padding,a=e.y+t.padding,o=0;for(let u=0;u<r.height;u++){let l=(a+u)*i+s*4;for(let c=0;c<r.width;c++){let f=l+c*4;t.data[f]=r.samples[o],t.data[f+1]=r.samples[o+1],t.data[f+2]=r.samples[o+2],t.data[f+3]=n===4?r.samples[o+3]:255,o+=n}}}function hp(t,e,r){let n=e.width+r.lightmapPadding*2,i=e.height+r.lightmapPadding*2;if(n>r.atlasSize||i>r.atlasSize)throw new Error("Lightmap too large for atlas");for(let o of t){if(o.cursorX+n>o.width&&(o.cursorX=0,o.cursorY+=o.rowHeight+r.lightmapPadding,o.rowHeight=0),o.cursorY+i>o.height)continue;let u={atlasIndex:t.indexOf(o),x:o.cursorX,y:o.cursorY,width:e.width,height:e.height};return o.cursorX+=n+r.lightmapPadding,o.rowHeight=Math.max(o.rowHeight,i),{placement:u,atlas:o}}let s=up(r.atlasSize,r.lightmapPadding);t.push(s);let a={atlasIndex:t.length-1,x:0,y:0,width:e.width,height:e.height};return s.cursorX=n+r.lightmapPadding,s.rowHeight=i,{placement:a,atlas:s}}function ho(t){return t instanceof Float32Array?t:new Float32Array(t)}function mp(t,e){if(!t){let n=new Uint16Array(e);for(let i=0;i<e;i++)n[i]=i;return n}return t instanceof Uint16Array?t:new Uint16Array(t)}function pp(t,e){let r=new Float32Array(t.length);for(let n=0;n<t.length;n+=2)r[n]=e.offset[0]+t[n]*e.scale[0],r[n+1]=e.offset[1]+t[n+1]*e.scale[1];return r}function gp(t,e){let r=ho(t.vertices),n=ho(t.textureCoords),i=e?pp(ho(t.lightmapCoords??t.textureCoords),e):ho(t.lightmapCoords??new Float32Array(n.length)),s=r.length/3;if(n.length/2!==s)throw new Error("Texture coordinates count mismatch");if(i.length/2!==s)throw new Error("Lightmap coordinates count mismatch");let a=new Float32Array(s*7);for(let o=0;o<s;o++){let u=o*3,l=o*2,c=o*7;a[c]=r[u],a[c+1]=r[u+1],a[c+2]=r[u+2],a[c+3]=n[l],a[c+4]=n[l+1],a[c+5]=i[l],a[c+6]=i[l+1]}return a}function Pd(t){let e=[];for(let r=0;r<t.faces.length;r++){let n=t.faces[r];if(n.texInfo<0)continue;let i=t.texInfo[n.texInfo],s=[],a=[],o=[];for(let d=0;d<n.numEdges;d++){let h=t.surfEdges[n.firstEdge+d],m=t.edges[Math.abs(h)],g=h>=0?m.vertices[0]:m.vertices[1],p=t.vertices[g];s.push(p[0],p[1],p[2]);let y=p[0]*i.s[0]+p[1]*i.s[1]+p[2]*i.s[2]+i.sOffset,v=p[0]*i.t[0]+p[1]*i.t[1]+p[2]*i.t[2]+i.tOffset;a.push(y,v),o.push(y,v)}let u=[],l=s.length/3;for(let d=1;d<l-1;d++)u.push(0,d,d+1);let c,f=t.lightMapInfo[r];if(f){let d=1/0,h=-1/0,m=1/0,g=-1/0;for(let _=0;_<a.length;_+=2){let S=a[_],w=a[_+1];S<d&&(d=S),S>h&&(h=S),w<m&&(m=w),w>g&&(g=w)}let p=Math.floor(d/16),y=Math.floor(m/16),v=Math.ceil(h/16)-p+1,x=Math.ceil(g/16)-y+1,b=ga(n,t.lightMaps,f);if(b&&b.length===v*x*3){c={width:v,height:x,samples:b};for(let _=0;_<o.length;_+=2)o[_]=a[_]/16-p+.5,o[_+1]=a[_+1]/16-y+.5}}e.push({vertices:new Float32Array(s),textureCoords:new Float32Array(a),lightmapCoords:new Float32Array(o),indices:new Uint16Array(u),texture:i.texture,surfaceFlags:i.flags,lightmap:c,faceIndex:r})}return e}function Id(t,e,r,n={}){let i=e;if(r&&n.hiddenClassnames&&n.hiddenClassnames.size>0){let c=new Set;for(let f of r.entities.entities)if(f.classname&&n.hiddenClassnames.has(f.classname)){let d=f.properties.model;if(d&&d.startsWith("*")){let h=parseInt(d.substring(1),10);if(!isNaN(h)&&h>=0&&h<r.models.length){let m=r.models[h];for(let g=0;g<m.numFaces;g++)c.add(m.firstFace+g)}}}c.size>0&&(i=e.filter(f=>!c.has(f.faceIndex)))}let s={atlasSize:n.atlasSize??1024,lightmapPadding:n.lightmapPadding??1,hiddenClassnames:n.hiddenClassnames??new Set},a=[],o=new Map;i.forEach((c,f)=>{if(!c.lightmap)return;let{placement:d,atlas:h}=hp(a,c.lightmap,s);fp(h,d,c.lightmap),o.set(f,{atlasIndex:d.atlasIndex,offset:[(d.x+s.lightmapPadding)/s.atlasSize,(d.y+s.lightmapPadding)/s.atlasSize],scale:[d.width/s.atlasSize,d.height/s.atlasSize]})});let u=a.map(c=>{let f=new hr(t);return f.setParameters({wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE,minFilter:t.LINEAR,magFilter:t.LINEAR}),f.uploadImage(0,t.RGBA,c.width,c.height,0,t.RGBA,t.UNSIGNED_BYTE,c.data),{texture:f,width:c.width,height:c.height,pixels:c.data}});return{surfaces:i.map((c,f)=>{let d=o.get(f),h=gp(c,d),m=mp(c.indices,h.length/7),g=new ge(t,t.STATIC_DRAW,t.ARRAY_BUFFER);g.upload(h);let p=new we(t,t.STATIC_DRAW);p.upload(m);let y=new Se(t);return y.configureAttributes(Zl,g),{vao:y,vertexBuffer:g,indexBuffer:p,indexCount:m.length,vertexCount:h.length/7,texture:c.texture,surfaceFlags:c.surfaceFlags??_i,lightmap:d,vertexData:h,indexData:m}}),lightmaps:u}}function ni(t){let{normal:e,distance:r}=t,n=Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z);if(n===0)return t;let i=1/n;return{normal:{x:e.x*i,y:e.y*i,z:e.z*i},distance:r*i}}function Rd(t){if(t.length!==16)throw new Error("View-projection matrix must contain 16 elements");let e=t[0],r=t[4],n=t[8],i=t[12],s=t[1],a=t[5],o=t[9],u=t[13],l=t[2],c=t[6],f=t[10],d=t[14],h=t[3],m=t[7],g=t[11],p=t[15];return[ni({normal:{x:h+e,y:m+r,z:g+n},distance:p+i}),ni({normal:{x:h-e,y:m-r,z:g-n},distance:p-i}),ni({normal:{x:h+s,y:m+a,z:g+o},distance:p+u}),ni({normal:{x:h-s,y:m-a,z:g-o},distance:p-u}),ni({normal:{x:h+l,y:m+c,z:g+f},distance:p+d}),ni({normal:{x:h-l,y:m-c,z:g-f},distance:p-d})]}function yp(t,e){return t.normal.x*e.x+t.normal.y*e.y+t.normal.z*e.z+t.distance}function Cs(t,e,r){for(let n of r){let i=n.normal.x>=0?e.x:t.x,s=n.normal.y>=0?e.y:t.y,a=n.normal.z>=0?e.z:t.z;if(yp(n,{x:i,y:s,z:a})<0)return!1}return!0}function Fd(t){return t<0}function Bd(t){return-t-1}function Dd(t,e){return t.normal[0]*e.x+t.normal[1]*e.y+t.normal[2]*e.z-t.dist}function bp(t,e,r){if(!t||e<0||r<0)return!0;let n=Math.ceil(t.numClusters/8),i=t.clusters[e].pvs,s=Math.floor(r/8),a=1<<r%8;return s<0||s>=n?!1:(i[s]&a)!==0}function xp(t,e){let r={x:t.mins[0],y:t.mins[1],z:t.mins[2]},n={x:t.maxs[0],y:t.maxs[1],z:t.maxs[2]};return Cs(r,n,e)}function ql(t,e){let r=0;for(;r>=0;){let n=t.nodes[r],i=t.planes[n.planeIndex],a=Dd(i,e)>=0?0:1,o=n.children[a];if(Fd(o))return Bd(o);r=o}return-1}function vp(t,e){let r=t.leafs[e],n=[];for(let i=0;i<r.numLeafFaces;i+=1)n.push(t.leafLists.leafFaces[e][i]);return n}function Yl(t,e,r,n,i,s,a,o){if(Fd(e)){let h=Bd(e),m=t.leafs[h];if(o&&m.area>=0&&!o.has(m.area)||!bp(t.visibility,i,m.cluster)||!xp(m,n))return;let g={x:(m.mins[0]+m.maxs[0])*.5,y:(m.mins[1]+m.maxs[1])*.5,z:(m.mins[2]+m.maxs[2])*.5},p=g.x-r.x,y=g.y-r.y,v=g.z-r.z,x=-(p*p+y*y+v*v);for(let b of vp(t,h))a.has(b)||(a.add(b),s.push({faceIndex:b,leafIndex:h,sortKey:x}));return}let u=t.nodes[e],l=t.planes[u.planeIndex],c=Dd(l,r),f=c>=0?u.children[0]:u.children[1],d=c>=0?u.children[1]:u.children[0];Cs({x:u.mins[0],y:u.mins[1],z:u.mins[2]},{x:u.maxs[0],y:u.maxs[1],z:u.maxs[2]},n)&&(Yl(t,f,r,n,i,s,a,o),Yl(t,d,r,n,i,s,a,o))}function _p(t,e,r){let n=new Set;if(e<0||e>=t.areas.length)return n;let i=[e];for(n.add(e);i.length>0;){let s=i.pop(),a=t.areas[s];for(let o=0;o<a.numAreaPortals;o++){let u=a.firstAreaPortal+o,l=t.areaPortals[u],c=l.otherArea;(l.portalNumber<=0||r[l.portalNumber])&&!n.has(c)&&(n.add(c),i.push(c))}}return n}function Od(t,e,r,n){let i=ql(t,e),s=i>=0?t.leafs[i]:null,a=s?s.cluster:-1,o=s?s.area:-1,u=null;n&&o>=0&&t.areas&&t.areas.length>0&&(u=_p(t,o,n));let l=[];return Yl(t,0,e,r,a,l,new Set,u),l}var mr=32,mo=class{constructor(){this.lights=[]}addLight(e,r){if(e.key!==void 0){let n=this.lights.findIndex(i=>i.key===e.key);if(n!==-1){this.lights[n]=e;return}}this.lights.push(e)}clear(){this.lights=[]}update(e,r=0){if(this.lights=this.lights.filter(n=>n.die>e),r>0)for(let n of this.lights)n.radiusSpeed!==void 0&&n.radiusSpeed!==0&&(n.intensity+=n.radiusSpeed*r,n.intensity<0&&(n.intensity=0))}getActiveLights(){return this.lights}};function ii(t){let e=[];for(let r=0;r<t.length;r+=3){let n=t[r],i=t[r+1],s=t[r+2];e.push(n,i,i,s,s,n)}return t instanceof Uint32Array||Math.max(...e)>65535?new Uint32Array(e):new Uint16Array(e)}var jl=`#version 300 es
142
+ precision highp float;
143
+
144
+ layout(location = 0) in vec3 a_position;
145
+ layout(location = 1) in vec2 a_texCoord;
146
+ layout(location = 2) in vec2 a_lightmapCoord;
147
+ layout(location = 3) in float a_lightmapStep;
148
+
149
+ uniform mat4 u_modelViewProjection;
150
+ uniform vec2 u_texScroll;
151
+ uniform vec2 u_lightmapScroll;
152
+ uniform float u_time;
153
+ uniform bool u_warp;
154
+
155
+ out vec2 v_texCoord;
156
+ out vec2 v_lightmapCoord;
157
+ out float v_lightmapStep;
158
+ out vec3 v_position;
159
+ out vec4 v_screenPos; // For refraction
160
+
161
+ // Match gl_warp.c TURBSCALE
162
+ const float TURBSCALE = (256.0 / (2.0 * 3.14159));
163
+
164
+ vec2 applyScroll(vec2 uv, vec2 scroll) {
165
+ return uv + scroll;
166
+ }
167
+
168
+ void main() {
169
+ vec3 pos = a_position;
170
+ vec2 tex = a_texCoord;
171
+ vec2 lm = a_lightmapCoord;
172
+
173
+ // Vertex Warping (match gl_warp.c)
174
+
175
+ if (u_warp) {
176
+ // Simple sine wave distortion
177
+ float amp = 0.125;
178
+
179
+ // Let's just use sin directly.
180
+ float s = tex.x + sin((tex.y * 0.125 + u_time) * 1.0) * amp;
181
+ float t = tex.y + sin((tex.x * 0.125 + u_time) * 1.0) * amp;
182
+
183
+ tex = vec2(s, t);
184
+ }
185
+
186
+ v_texCoord = applyScroll(tex, u_texScroll);
187
+ v_lightmapCoord = applyScroll(lm, u_lightmapScroll);
188
+ v_lightmapStep = a_lightmapStep;
189
+ v_position = pos;
190
+ gl_Position = u_modelViewProjection * vec4(pos, 1.0);
191
+ v_screenPos = gl_Position;
192
+ }`,Ql=`#version 300 es
193
+ precision highp float;
194
+
195
+ struct DLight {
196
+ vec3 position;
197
+ vec3 color;
198
+ float intensity;
199
+ };
200
+
201
+ const int MAX_DLIGHTS = ${mr};
202
+
203
+ in vec2 v_texCoord;
204
+ in vec2 v_lightmapCoord;
205
+ in float v_lightmapStep;
206
+ in vec3 v_position;
207
+ in vec4 v_screenPos;
208
+
209
+ uniform sampler2D u_diffuseMap;
210
+ uniform sampler2D u_lightmapAtlas;
211
+ uniform sampler2D u_refractionMap; // New: Refraction map
212
+ uniform vec4 u_lightStyleFactors;
213
+ uniform vec4 u_styleLayerMapping; // 0, 1, 2... or -1 if invalid
214
+ uniform float u_alpha;
215
+ uniform bool u_applyLightmap;
216
+ uniform bool u_warp;
217
+ uniform bool u_lightmapOnly;
218
+ uniform bool u_hasRefraction; // New: Flag to enable refraction
219
+ uniform float u_time;
220
+
221
+ uniform int u_renderMode; // 0: Textured, 1: Solid, 2: Solid Faceted
222
+ uniform vec4 u_solidColor;
223
+
224
+ uniform int u_numDlights;
225
+ uniform DLight u_dlights[MAX_DLIGHTS];
226
+
227
+ // Lighting controls
228
+ uniform float u_brightness;
229
+ uniform float u_gamma;
230
+ uniform bool u_fullbright;
231
+ uniform float u_ambient;
232
+
233
+ out vec4 o_color;
234
+
235
+ void main() {
236
+ vec4 finalColor;
237
+
238
+ if (u_renderMode == 0) {
239
+ // TEXTURED MODE
240
+ vec4 base = vec4(1.0);
241
+ if (!u_lightmapOnly) {
242
+ base = texture(u_diffuseMap, v_texCoord);
243
+ }
244
+
245
+ // Refraction Logic
246
+ if (u_warp && u_hasRefraction) {
247
+ vec2 ndc = (v_screenPos.xy / v_screenPos.w) * 0.5 + 0.5;
248
+
249
+ // Calculate distortion based on texture coordinates time
250
+ // Simple turbulent distortion
251
+ float distortionStrength = 0.05;
252
+ vec2 distortion = vec2(
253
+ sin(v_texCoord.y * 10.0 + u_time * 2.0),
254
+ cos(v_texCoord.x * 10.0 + u_time * 2.0)
255
+ ) * distortionStrength;
256
+
257
+ vec3 refractColor = texture(u_refractionMap, ndc + distortion).rgb;
258
+
259
+ // Blend base texture with refraction
260
+ // Quake 2 water usually is quite opaque but let's try a blend
261
+ // Or just tint the refraction
262
+
263
+ // If it's water (warp), we usually want some transparency + refraction
264
+ // Let's mix refraction into the base color
265
+ base.rgb = mix(base.rgb, refractColor, 0.4);
266
+ base.a = 0.7; // Ensure some alpha for water
267
+ }
268
+
269
+ vec3 totalLight = vec3(1.0);
270
+
271
+ if (u_applyLightmap && !u_fullbright) {
272
+ // Multi-style lightmap accumulation
273
+ vec3 light = vec3(0.0);
274
+ bool hasLight = false;
275
+
276
+ // Loop unrolled-ish
277
+ for (int i = 0; i < 4; i++) {
278
+ float layer = u_styleLayerMapping[i];
279
+ float factor = u_lightStyleFactors[i];
280
+
281
+ if (layer >= -0.5) { // Valid layer (check >= 0 approx)
282
+ // Offset V by layer * step
283
+ // Since we packed vertically
284
+ vec2 offset = vec2(0.0, layer * v_lightmapStep);
285
+ light += texture(u_lightmapAtlas, v_lightmapCoord + offset).rgb * factor;
286
+ hasLight = true;
287
+ }
288
+ }
289
+
290
+ if (!hasLight) light = vec3(1.0);
291
+
292
+ totalLight = light;
293
+
294
+ // Add dynamic lights
295
+ for (int i = 0; i < MAX_DLIGHTS; i++) {
296
+ if (i >= u_numDlights) break;
297
+ DLight dlight = u_dlights[i];
298
+
299
+ float dist = distance(v_position, dlight.position);
300
+ // Quake 2 dlight formula
301
+ if (dist < dlight.intensity) {
302
+ float contribution = (dlight.intensity - dist) * (1.0 / 255.0);
303
+ totalLight += dlight.color * contribution;
304
+ }
305
+ }
306
+ } else if (u_fullbright) {
307
+ totalLight = vec3(1.0);
308
+ }
309
+
310
+ // Apply ambient minimum
311
+ totalLight = max(totalLight, vec3(u_ambient));
312
+
313
+ // Apply brightness
314
+ totalLight *= u_brightness;
315
+
316
+ base.rgb *= totalLight;
317
+
318
+ // Gamma correction
319
+ if (u_gamma != 1.0) {
320
+ base.rgb = pow(base.rgb, vec3(1.0 / u_gamma));
321
+ }
322
+
323
+ finalColor = vec4(base.rgb, base.a * u_alpha);
324
+ } else {
325
+ // SOLID / WIREFRAME / FACETED
326
+ vec3 color = u_solidColor.rgb;
327
+ if (u_renderMode == 2) {
328
+ // FACETED: simple lighting based on face normal
329
+ vec3 fdx = dFdx(v_position);
330
+ vec3 fdy = dFdy(v_position);
331
+ vec3 faceNormal = normalize(cross(fdx, fdy));
332
+
333
+ // Simple directional light from "camera" or fixed
334
+ vec3 lightDir = normalize(vec3(0.5, 0.5, 1.0));
335
+ float diff = max(dot(faceNormal, lightDir), 0.2); // Ambient 0.2
336
+ color *= diff;
337
+ }
338
+ finalColor = vec4(color, u_solidColor.a * u_alpha);
339
+ }
340
+
341
+ o_color = finalColor;
342
+ }`,zd=[0,255,255,255],wp=[0,-1,-1,-1];function Jl(t=zd,e=[]){let r=new Float32Array(4);for(let n=0;n<4;n+=1){let i=t[n]??255;if(i===255){r[n]=0;continue}let s=e[i];r[n]=s!==void 0?s:1}return r}function Sp(t){return[-(t*.25%1),0]}function ec(t=_i,e=0){let r=(t&bu)!==0,n=(t&pu)!==0,i=(t&mu)!==0,s=(t&gu)!==0,a=(t&yu)!==0,o=s?.33:a?.66:1,u=s||a||n,l=!u&&!i,c=r?Sp(e):[0,0];return{alpha:o,blend:u,depthWrite:l,warp:n,flowOffset:c,sky:i}}var po=class{constructor(e){this.uniformDlights=[];this.gl=e,this.program=pe.create(e,{vertex:jl,fragment:Ql},{a_position:0,a_texCoord:1,a_lightmapCoord:2,a_lightmapStep:3}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformTexScroll=this.program.getUniformLocation("u_texScroll"),this.uniformLmScroll=this.program.getUniformLocation("u_lightmapScroll"),this.uniformLightStyles=this.program.getUniformLocation("u_lightStyleFactors"),this.uniformStyleLayerMapping=this.program.getUniformLocation("u_styleLayerMapping"),this.uniformAlpha=this.program.getUniformLocation("u_alpha"),this.uniformApplyLightmap=this.program.getUniformLocation("u_applyLightmap"),this.uniformWarp=this.program.getUniformLocation("u_warp"),this.uniformLightmapOnly=this.program.getUniformLocation("u_lightmapOnly"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformLightmap=this.program.getUniformLocation("u_lightmapAtlas"),this.uniformRefraction=this.program.getUniformLocation("u_refractionMap"),this.uniformHasRefraction=this.program.getUniformLocation("u_hasRefraction"),this.uniformTime=this.program.getUniformLocation("u_time"),this.uniformRenderMode=this.program.getUniformLocation("u_renderMode"),this.uniformSolidColor=this.program.getUniformLocation("u_solidColor"),this.uniformNumDlights=this.program.getUniformLocation("u_numDlights");for(let r=0;r<mr;r++)this.uniformDlights.push({pos:this.program.getUniformLocation(`u_dlights[${r}].position`),color:this.program.getUniformLocation(`u_dlights[${r}].color`),intensity:this.program.getUniformLocation(`u_dlights[${r}].intensity`)});this.uniformBrightness=this.program.getUniformLocation("u_brightness"),this.uniformGamma=this.program.getUniformLocation("u_gamma"),this.uniformFullbright=this.program.getUniformLocation("u_fullbright"),this.uniformAmbient=this.program.getUniformLocation("u_ambient")}get shaderSize(){return this.program.sourceSize}bind(e){let{modelViewProjection:r,styleIndices:n=zd,styleLayers:i=wp,styleValues:s=[],diffuseSampler:a=0,lightmapSampler:o,refractionSampler:u,surfaceFlags:l=_i,timeSeconds:c=0,texScroll:f,alpha:d,warp:h,dlights:m=[],renderMode:g,lightmapOnly:p,brightness:y=1,gamma:v=1,fullbright:x=!1,ambient:b=0}=e,_=ec(l,c),S=Jl(n,s),w=f?f[0]:_.flowOffset[0],L=f?f[1]:_.flowOffset[1],C=d!==void 0?d:_.alpha,A=h!==void 0?h:_.warp;this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform2f(this.uniformTexScroll,w,L),this.gl.uniform2f(this.uniformLmScroll,_.flowOffset[0],_.flowOffset[1]),this.gl.uniform4fv(this.uniformLightStyles,S),this.gl.uniform4fv(this.uniformStyleLayerMapping,i),this.gl.uniform1f(this.uniformAlpha,C);let k=!_.sky&&o!==void 0&&!A;this.gl.uniform1i(this.uniformApplyLightmap,k?1:0),this.gl.uniform1i(this.uniformWarp,A?1:0),this.gl.uniform1i(this.uniformLightmapOnly,p?1:0),this.gl.uniform1f(this.uniformTime,c),this.gl.uniform1i(this.uniformDiffuse,a),this.gl.uniform1i(this.uniformLightmap,o??0),u!==void 0&&A?(this.gl.uniform1i(this.uniformRefraction,u),this.gl.uniform1i(this.uniformHasRefraction,1)):this.gl.uniform1i(this.uniformHasRefraction,0);let R=0,B=[1,1,1,1];g&&(g.mode==="solid"||g.mode==="wireframe"?R=1:g.mode==="solid-faceted"&&(R=2),g.color?B=[...g.color]:g.generateRandomColor&&(B=[1,1,1,1])),this.gl.uniform1i(this.uniformRenderMode,R),this.gl.uniform4f(this.uniformSolidColor,B[0],B[1],B[2],B[3]);let P=Math.min(m.length,mr);this.gl.uniform1i(this.uniformNumDlights,P);for(let V=0;V<P;V++){let se=m[V];this.gl.uniform3f(this.uniformDlights[V].pos,se.origin.x,se.origin.y,se.origin.z),this.gl.uniform3f(this.uniformDlights[V].color,se.color.x,se.color.y,se.color.z),this.gl.uniform1f(this.uniformDlights[V].intensity,se.intensity)}return this.gl.uniform1f(this.uniformBrightness,y),this.gl.uniform1f(this.uniformGamma,v),this.gl.uniform1i(this.uniformFullbright,x?1:0),this.gl.uniform1f(this.uniformAmbient,b),_}draw(e,r){if(e.vao.bind(),r&&r.mode==="wireframe"){if(!e.wireframeIndexBuffer){let n=e;n.wireframeIndexBuffer=new we(this.gl,this.gl.STATIC_DRAW);let i=ii(e.indexData);n.wireframeIndexBuffer.upload(i),n.wireframeIndexCount=i.length}e.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,e.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else e.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};function Nd(t,e){t.depthMask(e.depthWrite),e.blend?(t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA)):t.disable(t.BLEND)}var Ud=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]),tc=`#version 300 es
343
+ precision highp float;
344
+
345
+ layout(location = 0) in vec3 a_position;
346
+
347
+ uniform mat4 u_viewProjectionNoTranslation;
348
+ uniform vec2 u_scroll;
349
+
350
+ out vec3 v_direction;
351
+
352
+ void main() {
353
+ vec3 dir = normalize(a_position);
354
+ dir.xy += u_scroll;
355
+ v_direction = dir;
356
+ gl_Position = u_viewProjectionNoTranslation * vec4(a_position, 1.0);
357
+ }`,rc=`#version 300 es
358
+ precision highp float;
359
+
360
+ in vec3 v_direction;
361
+ uniform samplerCube u_skybox;
362
+
363
+ out vec4 o_color;
364
+
365
+ void main() {
366
+ o_color = texture(u_skybox, v_direction);
367
+ }`,go=class{constructor(e){this.gl=e,this.program=pe.create(e,{vertex:tc,fragment:rc},{a_position:0}),this.vao=new Se(e),this.vbo=new ge(e,e.STATIC_DRAW),this.vbo.upload(Ud,e.STATIC_DRAW);let r=[{index:0,size:3,type:e.FLOAT,stride:12,offset:0}];this.vao.configureAttributes(r,this.vbo),this.uniformViewProj=this.program.getUniformLocation("u_viewProjectionNoTranslation"),this.uniformScroll=this.program.getUniformLocation("u_scroll"),this.uniformSampler=this.program.getUniformLocation("u_skybox"),this.cubemap=new ri(e),this.cubemap.setParameters({minFilter:e.LINEAR,magFilter:e.LINEAR,wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE})}get shaderSize(){return this.program.sourceSize}bind(e){let{viewProjection:r,scroll:n,textureUnit:i=0}=e;this.program.use(),this.gl.depthMask(!1),this.gl.uniformMatrix4fv(this.uniformViewProj,!1,r),this.gl.uniform2f(this.uniformScroll,n[0],n[1]),this.gl.uniform1i(this.uniformSampler,i),this.cubemap.bind(i),this.vao.bind()}draw(){this.gl.drawArrays(this.gl.TRIANGLES,0,Ud.length/3)}dispose(){this.vbo.dispose(),this.vao.dispose(),this.cubemap.dispose(),this.program.dispose()}};function Hd(t){let e=new Float32Array(t);return e[12]=0,e[13]=0,e[14]=0,e}function Vd(t,e=[.01,.02]){let[r,n]=e;return[r*t,n*t]}var ic=`#version 300 es
368
+ precision highp float;
369
+
370
+ layout(location = 0) in vec3 a_position;
371
+ layout(location = 1) in vec3 a_normal;
372
+ layout(location = 2) in vec2 a_texCoord;
373
+
374
+ struct DLight {
375
+ vec3 position;
376
+ vec3 color;
377
+ float intensity;
378
+ };
379
+
380
+ const int MAX_DLIGHTS = ${mr};
381
+
382
+ uniform mat4 u_modelViewProjection;
383
+ uniform mat4 u_modelMatrix;
384
+ uniform vec3 u_lightDir;
385
+ uniform float u_ambient;
386
+
387
+ uniform int u_numDlights;
388
+ uniform DLight u_dlights[MAX_DLIGHTS];
389
+
390
+ out vec2 v_texCoord;
391
+ out vec3 v_lightColor;
392
+ out vec3 v_position; // For faceted shading
393
+
394
+ void main() {
395
+ vec3 normal = normalize(a_normal);
396
+
397
+ // Directional Light (simple Lambert)
398
+ float dotL = max(dot(normal, normalize(u_lightDir)), 0.0);
399
+ vec3 lightAcc = vec3(min(1.0, u_ambient + dotL)); // White light assumed for directional/ambient
400
+
401
+ // Dynamic Lights
402
+ vec4 worldPos = u_modelMatrix * vec4(a_position, 1.0);
403
+
404
+ for (int i = 0; i < MAX_DLIGHTS; i++) {
405
+ if (i >= u_numDlights) break;
406
+ DLight dlight = u_dlights[i];
407
+
408
+ float dist = distance(worldPos.xyz, dlight.position);
409
+ if (dist < dlight.intensity) {
410
+ float intensity = (dlight.intensity - dist) / dlight.intensity;
411
+ lightAcc += dlight.color * intensity;
412
+ }
413
+ }
414
+
415
+ v_lightColor = lightAcc;
416
+ v_texCoord = a_texCoord;
417
+ v_position = worldPos.xyz;
418
+ gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
419
+ }`,sc=`#version 300 es
420
+ precision highp float;
421
+
422
+ in vec2 v_texCoord;
423
+ in vec3 v_lightColor;
424
+ in vec3 v_position;
425
+
426
+ uniform sampler2D u_diffuseMap;
427
+ uniform vec4 u_tint;
428
+
429
+ uniform int u_renderMode; // 0: Textured, 1: Solid, 2: Solid Faceted
430
+ uniform vec4 u_solidColor;
431
+
432
+ // Lighting controls
433
+ uniform float u_brightness;
434
+ uniform float u_gamma;
435
+ uniform bool u_fullbright;
436
+ uniform float u_globalAmbient;
437
+
438
+ out vec4 o_color;
439
+
440
+ void main() {
441
+ vec4 finalColor;
442
+
443
+ if (u_renderMode == 0) {
444
+ vec4 albedo = texture(u_diffuseMap, v_texCoord) * u_tint;
445
+
446
+ vec3 light = v_lightColor;
447
+
448
+ if (u_fullbright) {
449
+ light = vec3(1.0);
450
+ }
451
+
452
+ // Apply global ambient min
453
+ light = max(light, vec3(u_globalAmbient));
454
+
455
+ light *= u_brightness;
456
+
457
+ vec3 rgb = albedo.rgb * light;
458
+
459
+ if (u_gamma != 1.0) {
460
+ rgb = pow(rgb, vec3(1.0 / u_gamma));
461
+ }
462
+
463
+ finalColor = vec4(rgb, albedo.a);
464
+ } else {
465
+ vec3 color = u_solidColor.rgb;
466
+ if (u_renderMode == 2) {
467
+ // FACETED
468
+ vec3 fdx = dFdx(v_position);
469
+ vec3 fdy = dFdy(v_position);
470
+ vec3 faceNormal = normalize(cross(fdx, fdy));
471
+ vec3 lightDir = normalize(vec3(0.5, 0.5, 1.0));
472
+ float diff = max(dot(faceNormal, lightDir), 0.2);
473
+ color *= diff;
474
+ }
475
+ finalColor = vec4(color, u_solidColor.a * u_tint.a);
476
+ }
477
+
478
+ o_color = finalColor;
479
+ }`;function Ap(t){let e=t.x*t.x+t.y*t.y+t.z*t.z;if(e<=0)return{x:0,y:0,z:1};let r=1/Math.sqrt(e);return{x:t.x*r,y:t.y*r,z:t.z*r}}function nc(t,e,r){return t+(e-t)*r}function Gd(t,e,r){return{x:nc(t.x,e.x,r),y:nc(t.y,e.y,r),z:nc(t.z,e.z,r)}}function Mp(t,e,r){return[t/r.skinWidth,1-e/r.skinHeight]}function ac(t){if(t.glCommands.length===0){let n=[],i=[];return t.triangles.forEach(s=>{let a=n.length;for(let o=0;o<3;o+=1){let u=s.vertexIndices[o],l=s.texCoordIndices[o],c=t.texCoords[l];n.push({vertexIndex:u,texCoord:Mp(c.s,c.t,t.header)})}i.push(a,a+1,a+2)}),{vertices:n,indices:new Uint16Array(i)}}let e=[],r=[];for(let n of t.glCommands){let i=e.length;if(e.push(...n.vertices.map(s=>({vertexIndex:s.vertexIndex,texCoord:[s.s,1-s.t]}))),n.mode==="strip")for(let s=0;s<n.vertices.length-2;s+=1){let a=s%2===0,o=i+s+(a?0:1),u=i+s+(a?1:0),l=i+s+2;r.push(o,u,l)}else for(let s=1;s<n.vertices.length-1;s+=1)r.push(i,i+s,i+s+1)}return{vertices:e,indices:new Uint16Array(r)}}function oc(t,e,r){let{frame0:n,frame1:i,lerp:s}=r,a=t.frames[n],o=t.frames[i];if(!a||!o)throw new Error("Requested MD2 frames are out of range");let u=new Float32Array(e.vertices.length*8);return e.vertices.forEach((l,c)=>{let f=a.vertices[l.vertexIndex],d=o.vertices[l.vertexIndex];if(!f||!d)throw new Error("MD2 vertex index out of range for frame");let h=Gd(f.position,d.position,s),m=Ap(Gd(f.normal,d.normal,s)),g=c*8;u[g]=h.x,u[g+1]=h.y,u[g+2]=h.z,u[g+3]=m.x,u[g+4]=m.y,u[g+5]=m.z,u[g+6]=l.texCoord[0],u[g+7]=l.texCoord[1]}),u}var yo=class{constructor(e,r,n){this.gl=e,this.geometry=ac(r),this.vertexBuffer=new ge(e,e.STATIC_DRAW),this.indexBuffer=new we(e,e.STATIC_DRAW),this.vertexArray=new Se(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:32,offset:0},{index:1,size:3,type:e.FLOAT,stride:32,offset:12},{index:2,size:2,type:e.FLOAT,stride:32,offset:24}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(r,n)}update(e,r){let n=oc(e,this.geometry,r);this.vertexBuffer.upload(n,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose(),this.wireframeIndexBuffer?.dispose()}},bo=class{constructor(e){this.uniformDlights=[];this.gl=e,this.program=pe.create(e,{vertex:ic,fragment:sc},{a_position:0,a_normal:1,a_texCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformModelMatrix=this.program.getUniformLocation("u_modelMatrix"),this.uniformLightDir=this.program.getUniformLocation("u_lightDir"),this.uniformAmbient=this.program.getUniformLocation("u_ambient"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformRenderMode=this.program.getUniformLocation("u_renderMode"),this.uniformSolidColor=this.program.getUniformLocation("u_solidColor"),this.uniformNumDlights=this.program.getUniformLocation("u_numDlights");for(let r=0;r<mr;r++)this.uniformDlights.push({pos:this.program.getUniformLocation(`u_dlights[${r}].position`),color:this.program.getUniformLocation(`u_dlights[${r}].color`),intensity:this.program.getUniformLocation(`u_dlights[${r}].intensity`)});this.uniformBrightness=this.program.getUniformLocation("u_brightness"),this.uniformGamma=this.program.getUniformLocation("u_gamma"),this.uniformFullbright=this.program.getUniformLocation("u_fullbright"),this.uniformGlobalAmbient=this.program.getUniformLocation("u_globalAmbient")}get shaderSize(){return this.program.sourceSize}bind(e){let{modelViewProjection:r,modelMatrix:n,lightDirection:i=[0,0,1],ambientLight:s=.2,tint:a=[1,1,1,1],diffuseSampler:o=0,dlights:u=[],renderMode:l,brightness:c=1,gamma:f=1,fullbright:d=!1,ambient:h=0}=e,m=new Float32Array(i),g=new Float32Array(a);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),n?this.gl.uniformMatrix4fv(this.uniformModelMatrix,!1,n):this.gl.uniformMatrix4fv(this.uniformModelMatrix,!1,new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])),this.gl.uniform3fv(this.uniformLightDir,m),this.gl.uniform1f(this.uniformAmbient,s),this.gl.uniform4fv(this.uniformTint,g),this.gl.uniform1i(this.uniformDiffuse,o);let p=0,y=[1,1,1,1];l&&(l.mode==="solid"||l.mode==="wireframe"?p=1:l.mode==="solid-faceted"&&(p=2),l.color?y=[...l.color]:l.generateRandomColor),this.gl.uniform1i(this.uniformRenderMode,p),this.gl.uniform4f(this.uniformSolidColor,y[0],y[1],y[2],y[3]);let v=Math.min(u.length,mr);this.gl.uniform1i(this.uniformNumDlights,v);for(let x=0;x<v;x++){let b=u[x];this.gl.uniform3f(this.uniformDlights[x].pos,b.origin.x,b.origin.y,b.origin.z),this.gl.uniform3f(this.uniformDlights[x].color,b.color.x,b.color.y,b.color.z),this.gl.uniform1f(this.uniformDlights[x].intensity,b.intensity)}this.gl.uniform1f(this.uniformBrightness,c),this.gl.uniform1f(this.uniformGamma,f),this.gl.uniform1i(this.uniformFullbright,d?1:0),this.gl.uniform1f(this.uniformGlobalAmbient,h)}draw(e,r){if(e.vertexArray.bind(),r&&r.mode==="wireframe"){if(!e.wireframeIndexBuffer){e.wireframeIndexBuffer=new we(this.gl,this.gl.STATIC_DRAW);let n=ii(e.geometry.indices);e.wireframeIndexBuffer.upload(n),e.wireframeIndexCount=n.length}e.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,e.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else e.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var ee=1e-6,je=typeof Float32Array<"u"?Float32Array:Array,lc=Math.random;function xo(t){return t>=0?Math.round(t):t%.5===0?Math.floor(t):Math.round(t)}var uA=Math.PI/180,dA=180/Math.PI;var ue={};jo(ue,{add:()=>ug,adjoint:()=>Rp,clone:()=>Lp,copy:()=>Tp,create:()=>Ep,decompose:()=>qp,determinant:()=>Fp,equals:()=>mg,exactEquals:()=>hg,frob:()=>cg,fromQuat:()=>Jp,fromQuat2:()=>$p,fromRotation:()=>Gp,fromRotationTranslation:()=>$d,fromRotationTranslationScale:()=>jp,fromRotationTranslationScaleOrigin:()=>Qp,fromScaling:()=>Vp,fromTranslation:()=>Hp,fromValues:()=>Cp,fromXRotation:()=>Wp,fromYRotation:()=>Xp,fromZRotation:()=>Kp,frustum:()=>eg,getRotation:()=>Yp,getScaling:()=>Zd,getTranslation:()=>Zp,identity:()=>Xd,invert:()=>Ip,lookAt:()=>ag,mul:()=>pg,multiply:()=>Kd,multiplyScalar:()=>dg,multiplyScalarAndAdd:()=>fg,ortho:()=>ig,orthoNO:()=>qd,orthoZO:()=>sg,perspective:()=>tg,perspectiveFromFieldOfView:()=>ng,perspectiveNO:()=>Yd,perspectiveZO:()=>rg,rotate:()=>Op,rotateX:()=>zp,rotateY:()=>Np,rotateZ:()=>Up,scale:()=>Dp,set:()=>kp,str:()=>lg,sub:()=>gg,subtract:()=>jd,targetTo:()=>og,translate:()=>Bp,transpose:()=>Pp});function Ep(){var t=new je(16);return je!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t}function Lp(t){var e=new je(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function Tp(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function Cp(t,e,r,n,i,s,a,o,u,l,c,f,d,h,m,g){var p=new je(16);return p[0]=t,p[1]=e,p[2]=r,p[3]=n,p[4]=i,p[5]=s,p[6]=a,p[7]=o,p[8]=u,p[9]=l,p[10]=c,p[11]=f,p[12]=d,p[13]=h,p[14]=m,p[15]=g,p}function kp(t,e,r,n,i,s,a,o,u,l,c,f,d,h,m,g,p){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t[4]=s,t[5]=a,t[6]=o,t[7]=u,t[8]=l,t[9]=c,t[10]=f,t[11]=d,t[12]=h,t[13]=m,t[14]=g,t[15]=p,t}function Xd(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function Pp(t,e){if(t===e){var r=e[1],n=e[2],i=e[3],s=e[6],a=e[7],o=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=s,t[11]=e[14],t[12]=i,t[13]=a,t[14]=o}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}function Ip(t,e){var r=e[0],n=e[1],i=e[2],s=e[3],a=e[4],o=e[5],u=e[6],l=e[7],c=e[8],f=e[9],d=e[10],h=e[11],m=e[12],g=e[13],p=e[14],y=e[15],v=r*o-n*a,x=r*u-i*a,b=r*l-s*a,_=n*u-i*o,S=n*l-s*o,w=i*l-s*u,L=c*g-f*m,C=c*p-d*m,A=c*y-h*m,k=f*p-d*g,R=f*y-h*g,B=d*y-h*p,P=v*B-x*R+b*k+_*A-S*C+w*L;return P?(P=1/P,t[0]=(o*B-u*R+l*k)*P,t[1]=(i*R-n*B-s*k)*P,t[2]=(g*w-p*S+y*_)*P,t[3]=(d*S-f*w-h*_)*P,t[4]=(u*A-a*B-l*C)*P,t[5]=(r*B-i*A+s*C)*P,t[6]=(p*b-m*w-y*x)*P,t[7]=(c*w-d*b+h*x)*P,t[8]=(a*R-o*A+l*L)*P,t[9]=(n*A-r*R-s*L)*P,t[10]=(m*S-g*b+y*v)*P,t[11]=(f*b-c*S-h*v)*P,t[12]=(o*C-a*k-u*L)*P,t[13]=(r*k-n*C+i*L)*P,t[14]=(g*x-m*_-p*v)*P,t[15]=(c*_-f*x+d*v)*P,t):null}function Rp(t,e){var r=e[0],n=e[1],i=e[2],s=e[3],a=e[4],o=e[5],u=e[6],l=e[7],c=e[8],f=e[9],d=e[10],h=e[11],m=e[12],g=e[13],p=e[14],y=e[15],v=r*o-n*a,x=r*u-i*a,b=r*l-s*a,_=n*u-i*o,S=n*l-s*o,w=i*l-s*u,L=c*g-f*m,C=c*p-d*m,A=c*y-h*m,k=f*p-d*g,R=f*y-h*g,B=d*y-h*p;return t[0]=o*B-u*R+l*k,t[1]=i*R-n*B-s*k,t[2]=g*w-p*S+y*_,t[3]=d*S-f*w-h*_,t[4]=u*A-a*B-l*C,t[5]=r*B-i*A+s*C,t[6]=p*b-m*w-y*x,t[7]=c*w-d*b+h*x,t[8]=a*R-o*A+l*L,t[9]=n*A-r*R-s*L,t[10]=m*S-g*b+y*v,t[11]=f*b-c*S-h*v,t[12]=o*C-a*k-u*L,t[13]=r*k-n*C+i*L,t[14]=g*x-m*_-p*v,t[15]=c*_-f*x+d*v,t}function Fp(t){var e=t[0],r=t[1],n=t[2],i=t[3],s=t[4],a=t[5],o=t[6],u=t[7],l=t[8],c=t[9],f=t[10],d=t[11],h=t[12],m=t[13],g=t[14],p=t[15],y=e*a-r*s,v=e*o-n*s,x=r*o-n*a,b=l*m-c*h,_=l*g-f*h,S=c*g-f*m,w=e*S-r*_+n*b,L=s*S-a*_+o*b,C=l*x-c*v+f*y,A=h*x-m*v+g*y;return u*w-i*L+p*C-d*A}function Kd(t,e,r){var n=e[0],i=e[1],s=e[2],a=e[3],o=e[4],u=e[5],l=e[6],c=e[7],f=e[8],d=e[9],h=e[10],m=e[11],g=e[12],p=e[13],y=e[14],v=e[15],x=r[0],b=r[1],_=r[2],S=r[3];return t[0]=x*n+b*o+_*f+S*g,t[1]=x*i+b*u+_*d+S*p,t[2]=x*s+b*l+_*h+S*y,t[3]=x*a+b*c+_*m+S*v,x=r[4],b=r[5],_=r[6],S=r[7],t[4]=x*n+b*o+_*f+S*g,t[5]=x*i+b*u+_*d+S*p,t[6]=x*s+b*l+_*h+S*y,t[7]=x*a+b*c+_*m+S*v,x=r[8],b=r[9],_=r[10],S=r[11],t[8]=x*n+b*o+_*f+S*g,t[9]=x*i+b*u+_*d+S*p,t[10]=x*s+b*l+_*h+S*y,t[11]=x*a+b*c+_*m+S*v,x=r[12],b=r[13],_=r[14],S=r[15],t[12]=x*n+b*o+_*f+S*g,t[13]=x*i+b*u+_*d+S*p,t[14]=x*s+b*l+_*h+S*y,t[15]=x*a+b*c+_*m+S*v,t}function Bp(t,e,r){var n=r[0],i=r[1],s=r[2],a,o,u,l,c,f,d,h,m,g,p,y;return e===t?(t[12]=e[0]*n+e[4]*i+e[8]*s+e[12],t[13]=e[1]*n+e[5]*i+e[9]*s+e[13],t[14]=e[2]*n+e[6]*i+e[10]*s+e[14],t[15]=e[3]*n+e[7]*i+e[11]*s+e[15]):(a=e[0],o=e[1],u=e[2],l=e[3],c=e[4],f=e[5],d=e[6],h=e[7],m=e[8],g=e[9],p=e[10],y=e[11],t[0]=a,t[1]=o,t[2]=u,t[3]=l,t[4]=c,t[5]=f,t[6]=d,t[7]=h,t[8]=m,t[9]=g,t[10]=p,t[11]=y,t[12]=a*n+c*i+m*s+e[12],t[13]=o*n+f*i+g*s+e[13],t[14]=u*n+d*i+p*s+e[14],t[15]=l*n+h*i+y*s+e[15]),t}function Dp(t,e,r){var n=r[0],i=r[1],s=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*s,t[9]=e[9]*s,t[10]=e[10]*s,t[11]=e[11]*s,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function Op(t,e,r,n){var i=n[0],s=n[1],a=n[2],o=Math.sqrt(i*i+s*s+a*a),u,l,c,f,d,h,m,g,p,y,v,x,b,_,S,w,L,C,A,k,R,B,P,V;return o<ee?null:(o=1/o,i*=o,s*=o,a*=o,u=Math.sin(r),l=Math.cos(r),c=1-l,f=e[0],d=e[1],h=e[2],m=e[3],g=e[4],p=e[5],y=e[6],v=e[7],x=e[8],b=e[9],_=e[10],S=e[11],w=i*i*c+l,L=s*i*c+a*u,C=a*i*c-s*u,A=i*s*c-a*u,k=s*s*c+l,R=a*s*c+i*u,B=i*a*c+s*u,P=s*a*c-i*u,V=a*a*c+l,t[0]=f*w+g*L+x*C,t[1]=d*w+p*L+b*C,t[2]=h*w+y*L+_*C,t[3]=m*w+v*L+S*C,t[4]=f*A+g*k+x*R,t[5]=d*A+p*k+b*R,t[6]=h*A+y*k+_*R,t[7]=m*A+v*k+S*R,t[8]=f*B+g*P+x*V,t[9]=d*B+p*P+b*V,t[10]=h*B+y*P+_*V,t[11]=m*B+v*P+S*V,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}function zp(t,e,r){var n=Math.sin(r),i=Math.cos(r),s=e[4],a=e[5],o=e[6],u=e[7],l=e[8],c=e[9],f=e[10],d=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=s*i+l*n,t[5]=a*i+c*n,t[6]=o*i+f*n,t[7]=u*i+d*n,t[8]=l*i-s*n,t[9]=c*i-a*n,t[10]=f*i-o*n,t[11]=d*i-u*n,t}function Np(t,e,r){var n=Math.sin(r),i=Math.cos(r),s=e[0],a=e[1],o=e[2],u=e[3],l=e[8],c=e[9],f=e[10],d=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=s*i-l*n,t[1]=a*i-c*n,t[2]=o*i-f*n,t[3]=u*i-d*n,t[8]=s*n+l*i,t[9]=a*n+c*i,t[10]=o*n+f*i,t[11]=u*n+d*i,t}function Up(t,e,r){var n=Math.sin(r),i=Math.cos(r),s=e[0],a=e[1],o=e[2],u=e[3],l=e[4],c=e[5],f=e[6],d=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=s*i+l*n,t[1]=a*i+c*n,t[2]=o*i+f*n,t[3]=u*i+d*n,t[4]=l*i-s*n,t[5]=c*i-a*n,t[6]=f*i-o*n,t[7]=d*i-u*n,t}function Hp(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t}function Vp(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function Gp(t,e,r){var n=r[0],i=r[1],s=r[2],a=Math.sqrt(n*n+i*i+s*s),o,u,l;return a<ee?null:(a=1/a,n*=a,i*=a,s*=a,o=Math.sin(e),u=Math.cos(e),l=1-u,t[0]=n*n*l+u,t[1]=i*n*l+s*o,t[2]=s*n*l-i*o,t[3]=0,t[4]=n*i*l-s*o,t[5]=i*i*l+u,t[6]=s*i*l+n*o,t[7]=0,t[8]=n*s*l+i*o,t[9]=i*s*l-n*o,t[10]=s*s*l+u,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)}function Wp(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n,t[6]=r,t[7]=0,t[8]=0,t[9]=-r,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function Xp(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=0,t[2]=-r,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=r,t[9]=0,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function Kp(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=0,t[4]=-r,t[5]=n,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function $d(t,e,r){var n=e[0],i=e[1],s=e[2],a=e[3],o=n+n,u=i+i,l=s+s,c=n*o,f=n*u,d=n*l,h=i*u,m=i*l,g=s*l,p=a*o,y=a*u,v=a*l;return t[0]=1-(h+g),t[1]=f+v,t[2]=d-y,t[3]=0,t[4]=f-v,t[5]=1-(c+g),t[6]=m+p,t[7]=0,t[8]=d+y,t[9]=m-p,t[10]=1-(c+h),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function $p(t,e){var r=new je(3),n=-e[0],i=-e[1],s=-e[2],a=e[3],o=e[4],u=e[5],l=e[6],c=e[7],f=n*n+i*i+s*s+a*a;return f>0?(r[0]=(o*a+c*n+u*s-l*i)*2/f,r[1]=(u*a+c*i+l*n-o*s)*2/f,r[2]=(l*a+c*s+o*i-u*n)*2/f):(r[0]=(o*a+c*n+u*s-l*i)*2,r[1]=(u*a+c*i+l*n-o*s)*2,r[2]=(l*a+c*s+o*i-u*n)*2),$d(t,e,r),t}function Zp(t,e){return t[0]=e[12],t[1]=e[13],t[2]=e[14],t}function Zd(t,e){var r=e[0],n=e[1],i=e[2],s=e[4],a=e[5],o=e[6],u=e[8],l=e[9],c=e[10];return t[0]=Math.sqrt(r*r+n*n+i*i),t[1]=Math.sqrt(s*s+a*a+o*o),t[2]=Math.sqrt(u*u+l*l+c*c),t}function Yp(t,e){var r=new je(3);Zd(r,e);var n=1/r[0],i=1/r[1],s=1/r[2],a=e[0]*n,o=e[1]*i,u=e[2]*s,l=e[4]*n,c=e[5]*i,f=e[6]*s,d=e[8]*n,h=e[9]*i,m=e[10]*s,g=a+c+m,p=0;return g>0?(p=Math.sqrt(g+1)*2,t[3]=.25*p,t[0]=(f-h)/p,t[1]=(d-u)/p,t[2]=(o-l)/p):a>c&&a>m?(p=Math.sqrt(1+a-c-m)*2,t[3]=(f-h)/p,t[0]=.25*p,t[1]=(o+l)/p,t[2]=(d+u)/p):c>m?(p=Math.sqrt(1+c-a-m)*2,t[3]=(d-u)/p,t[0]=(o+l)/p,t[1]=.25*p,t[2]=(f+h)/p):(p=Math.sqrt(1+m-a-c)*2,t[3]=(o-l)/p,t[0]=(d+u)/p,t[1]=(f+h)/p,t[2]=.25*p),t}function qp(t,e,r,n){e[0]=n[12],e[1]=n[13],e[2]=n[14];var i=n[0],s=n[1],a=n[2],o=n[4],u=n[5],l=n[6],c=n[8],f=n[9],d=n[10];r[0]=Math.sqrt(i*i+s*s+a*a),r[1]=Math.sqrt(o*o+u*u+l*l),r[2]=Math.sqrt(c*c+f*f+d*d);var h=1/r[0],m=1/r[1],g=1/r[2],p=i*h,y=s*m,v=a*g,x=o*h,b=u*m,_=l*g,S=c*h,w=f*m,L=d*g,C=p+b+L,A=0;return C>0?(A=Math.sqrt(C+1)*2,t[3]=.25*A,t[0]=(_-w)/A,t[1]=(S-v)/A,t[2]=(y-x)/A):p>b&&p>L?(A=Math.sqrt(1+p-b-L)*2,t[3]=(_-w)/A,t[0]=.25*A,t[1]=(y+x)/A,t[2]=(S+v)/A):b>L?(A=Math.sqrt(1+b-p-L)*2,t[3]=(S-v)/A,t[0]=(y+x)/A,t[1]=.25*A,t[2]=(_+w)/A):(A=Math.sqrt(1+L-p-b)*2,t[3]=(y-x)/A,t[0]=(S+v)/A,t[1]=(_+w)/A,t[2]=.25*A),t}function jp(t,e,r,n){var i=e[0],s=e[1],a=e[2],o=e[3],u=i+i,l=s+s,c=a+a,f=i*u,d=i*l,h=i*c,m=s*l,g=s*c,p=a*c,y=o*u,v=o*l,x=o*c,b=n[0],_=n[1],S=n[2];return t[0]=(1-(m+p))*b,t[1]=(d+x)*b,t[2]=(h-v)*b,t[3]=0,t[4]=(d-x)*_,t[5]=(1-(f+p))*_,t[6]=(g+y)*_,t[7]=0,t[8]=(h+v)*S,t[9]=(g-y)*S,t[10]=(1-(f+m))*S,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function Qp(t,e,r,n,i){var s=e[0],a=e[1],o=e[2],u=e[3],l=s+s,c=a+a,f=o+o,d=s*l,h=s*c,m=s*f,g=a*c,p=a*f,y=o*f,v=u*l,x=u*c,b=u*f,_=n[0],S=n[1],w=n[2],L=i[0],C=i[1],A=i[2],k=(1-(g+y))*_,R=(h+b)*_,B=(m-x)*_,P=(h-b)*S,V=(1-(d+y))*S,se=(p+v)*S,Wr=(m+x)*w,Js=(p-v)*w,yi=(1-(d+g))*w;return t[0]=k,t[1]=R,t[2]=B,t[3]=0,t[4]=P,t[5]=V,t[6]=se,t[7]=0,t[8]=Wr,t[9]=Js,t[10]=yi,t[11]=0,t[12]=r[0]+L-(k*L+P*C+Wr*A),t[13]=r[1]+C-(R*L+V*C+Js*A),t[14]=r[2]+A-(B*L+se*C+yi*A),t[15]=1,t}function Jp(t,e){var r=e[0],n=e[1],i=e[2],s=e[3],a=r+r,o=n+n,u=i+i,l=r*a,c=n*a,f=n*o,d=i*a,h=i*o,m=i*u,g=s*a,p=s*o,y=s*u;return t[0]=1-f-m,t[1]=c+y,t[2]=d-p,t[3]=0,t[4]=c-y,t[5]=1-l-m,t[6]=h+g,t[7]=0,t[8]=d+p,t[9]=h-g,t[10]=1-l-f,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function eg(t,e,r,n,i,s,a){var o=1/(r-e),u=1/(i-n),l=1/(s-a);return t[0]=s*2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=s*2*u,t[6]=0,t[7]=0,t[8]=(r+e)*o,t[9]=(i+n)*u,t[10]=(a+s)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=a*s*2*l,t[15]=0,t}function Yd(t,e,r,n,i){var s=1/Math.tan(e/2);if(t[0]=s/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=s,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,i!=null&&i!==1/0){var a=1/(n-i);t[10]=(i+n)*a,t[14]=2*i*n*a}else t[10]=-1,t[14]=-2*n;return t}var tg=Yd;function rg(t,e,r,n,i){var s=1/Math.tan(e/2);if(t[0]=s/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=s,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,i!=null&&i!==1/0){var a=1/(n-i);t[10]=i*a,t[14]=i*n*a}else t[10]=-1,t[14]=-n;return t}function ng(t,e,r,n){var i=Math.tan(e.upDegrees*Math.PI/180),s=Math.tan(e.downDegrees*Math.PI/180),a=Math.tan(e.leftDegrees*Math.PI/180),o=Math.tan(e.rightDegrees*Math.PI/180),u=2/(a+o),l=2/(i+s);return t[0]=u,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=l,t[6]=0,t[7]=0,t[8]=-((a-o)*u*.5),t[9]=(i-s)*l*.5,t[10]=n/(r-n),t[11]=-1,t[12]=0,t[13]=0,t[14]=n*r/(r-n),t[15]=0,t}function qd(t,e,r,n,i,s,a){var o=1/(e-r),u=1/(n-i),l=1/(s-a);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*u,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+r)*o,t[13]=(i+n)*u,t[14]=(a+s)*l,t[15]=1,t}var ig=qd;function sg(t,e,r,n,i,s,a){var o=1/(e-r),u=1/(n-i),l=1/(s-a);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*u,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=l,t[11]=0,t[12]=(e+r)*o,t[13]=(i+n)*u,t[14]=s*l,t[15]=1,t}function ag(t,e,r,n){var i,s,a,o,u,l,c,f,d,h,m=e[0],g=e[1],p=e[2],y=n[0],v=n[1],x=n[2],b=r[0],_=r[1],S=r[2];return Math.abs(m-b)<ee&&Math.abs(g-_)<ee&&Math.abs(p-S)<ee?Xd(t):(c=m-b,f=g-_,d=p-S,h=1/Math.sqrt(c*c+f*f+d*d),c*=h,f*=h,d*=h,i=v*d-x*f,s=x*c-y*d,a=y*f-v*c,h=Math.sqrt(i*i+s*s+a*a),h?(h=1/h,i*=h,s*=h,a*=h):(i=0,s=0,a=0),o=f*a-d*s,u=d*i-c*a,l=c*s-f*i,h=Math.sqrt(o*o+u*u+l*l),h?(h=1/h,o*=h,u*=h,l*=h):(o=0,u=0,l=0),t[0]=i,t[1]=o,t[2]=c,t[3]=0,t[4]=s,t[5]=u,t[6]=f,t[7]=0,t[8]=a,t[9]=l,t[10]=d,t[11]=0,t[12]=-(i*m+s*g+a*p),t[13]=-(o*m+u*g+l*p),t[14]=-(c*m+f*g+d*p),t[15]=1,t)}function og(t,e,r,n){var i=e[0],s=e[1],a=e[2],o=n[0],u=n[1],l=n[2],c=i-r[0],f=s-r[1],d=a-r[2],h=c*c+f*f+d*d;h>0&&(h=1/Math.sqrt(h),c*=h,f*=h,d*=h);var m=u*d-l*f,g=l*c-o*d,p=o*f-u*c;return h=m*m+g*g+p*p,h>0&&(h=1/Math.sqrt(h),m*=h,g*=h,p*=h),t[0]=m,t[1]=g,t[2]=p,t[3]=0,t[4]=f*p-d*g,t[5]=d*m-c*p,t[6]=c*g-f*m,t[7]=0,t[8]=c,t[9]=f,t[10]=d,t[11]=0,t[12]=i,t[13]=s,t[14]=a,t[15]=1,t}function lg(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"}function cg(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]+t[3]*t[3]+t[4]*t[4]+t[5]*t[5]+t[6]*t[6]+t[7]*t[7]+t[8]*t[8]+t[9]*t[9]+t[10]*t[10]+t[11]*t[11]+t[12]*t[12]+t[13]*t[13]+t[14]*t[14]+t[15]*t[15])}function ug(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t[4]=e[4]+r[4],t[5]=e[5]+r[5],t[6]=e[6]+r[6],t[7]=e[7]+r[7],t[8]=e[8]+r[8],t[9]=e[9]+r[9],t[10]=e[10]+r[10],t[11]=e[11]+r[11],t[12]=e[12]+r[12],t[13]=e[13]+r[13],t[14]=e[14]+r[14],t[15]=e[15]+r[15],t}function jd(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t[4]=e[4]-r[4],t[5]=e[5]-r[5],t[6]=e[6]-r[6],t[7]=e[7]-r[7],t[8]=e[8]-r[8],t[9]=e[9]-r[9],t[10]=e[10]-r[10],t[11]=e[11]-r[11],t[12]=e[12]-r[12],t[13]=e[13]-r[13],t[14]=e[14]-r[14],t[15]=e[15]-r[15],t}function dg(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*r,t[5]=e[5]*r,t[6]=e[6]*r,t[7]=e[7]*r,t[8]=e[8]*r,t[9]=e[9]*r,t[10]=e[10]*r,t[11]=e[11]*r,t[12]=e[12]*r,t[13]=e[13]*r,t[14]=e[14]*r,t[15]=e[15]*r,t}function fg(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t[4]=e[4]+r[4]*n,t[5]=e[5]+r[5]*n,t[6]=e[6]+r[6]*n,t[7]=e[7]+r[7]*n,t[8]=e[8]+r[8]*n,t[9]=e[9]+r[9]*n,t[10]=e[10]+r[10]*n,t[11]=e[11]+r[11]*n,t[12]=e[12]+r[12]*n,t[13]=e[13]+r[13]*n,t[14]=e[14]+r[14]*n,t[15]=e[15]+r[15]*n,t}function hg(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]&&t[4]===e[4]&&t[5]===e[5]&&t[6]===e[6]&&t[7]===e[7]&&t[8]===e[8]&&t[9]===e[9]&&t[10]===e[10]&&t[11]===e[11]&&t[12]===e[12]&&t[13]===e[13]&&t[14]===e[14]&&t[15]===e[15]}function mg(t,e){var r=t[0],n=t[1],i=t[2],s=t[3],a=t[4],o=t[5],u=t[6],l=t[7],c=t[8],f=t[9],d=t[10],h=t[11],m=t[12],g=t[13],p=t[14],y=t[15],v=e[0],x=e[1],b=e[2],_=e[3],S=e[4],w=e[5],L=e[6],C=e[7],A=e[8],k=e[9],R=e[10],B=e[11],P=e[12],V=e[13],se=e[14],Wr=e[15];return Math.abs(r-v)<=ee*Math.max(1,Math.abs(r),Math.abs(v))&&Math.abs(n-x)<=ee*Math.max(1,Math.abs(n),Math.abs(x))&&Math.abs(i-b)<=ee*Math.max(1,Math.abs(i),Math.abs(b))&&Math.abs(s-_)<=ee*Math.max(1,Math.abs(s),Math.abs(_))&&Math.abs(a-S)<=ee*Math.max(1,Math.abs(a),Math.abs(S))&&Math.abs(o-w)<=ee*Math.max(1,Math.abs(o),Math.abs(w))&&Math.abs(u-L)<=ee*Math.max(1,Math.abs(u),Math.abs(L))&&Math.abs(l-C)<=ee*Math.max(1,Math.abs(l),Math.abs(C))&&Math.abs(c-A)<=ee*Math.max(1,Math.abs(c),Math.abs(A))&&Math.abs(f-k)<=ee*Math.max(1,Math.abs(f),Math.abs(k))&&Math.abs(d-R)<=ee*Math.max(1,Math.abs(d),Math.abs(R))&&Math.abs(h-B)<=ee*Math.max(1,Math.abs(h),Math.abs(B))&&Math.abs(m-P)<=ee*Math.max(1,Math.abs(m),Math.abs(P))&&Math.abs(g-V)<=ee*Math.max(1,Math.abs(g),Math.abs(V))&&Math.abs(p-se)<=ee*Math.max(1,Math.abs(p),Math.abs(se))&&Math.abs(y-Wr)<=ee*Math.max(1,Math.abs(y),Math.abs(Wr))}var pg=Kd,gg=jd;var D={};jo(D,{add:()=>_g,angle:()=>Wg,bezier:()=>Dg,ceil:()=>wg,clone:()=>yg,copy:()=>xg,create:()=>Qd,cross:()=>Ig,dist:()=>Qg,distance:()=>nf,div:()=>jg,divide:()=>rf,dot:()=>cc,equals:()=>Zg,exactEquals:()=>$g,floor:()=>Sg,forEach:()=>r1,fromValues:()=>bg,hermite:()=>Bg,inverse:()=>kg,len:()=>e1,length:()=>Jd,lerp:()=>Rg,max:()=>Mg,min:()=>Ag,mul:()=>qg,multiply:()=>tf,negate:()=>Cg,normalize:()=>Pg,random:()=>Og,rotateX:()=>Hg,rotateY:()=>Vg,rotateZ:()=>Gg,round:()=>Eg,scale:()=>Lg,scaleAndAdd:()=>Tg,set:()=>vg,slerp:()=>Fg,sqrDist:()=>Jg,sqrLen:()=>t1,squaredDistance:()=>sf,squaredLength:()=>af,str:()=>Kg,sub:()=>Yg,subtract:()=>ef,transformMat3:()=>Ng,transformMat4:()=>zg,transformQuat:()=>Ug,zero:()=>Xg});function Qd(){var t=new je(3);return je!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function yg(t){var e=new je(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function Jd(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}function bg(t,e,r){var n=new je(3);return n[0]=t,n[1]=e,n[2]=r,n}function xg(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function vg(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}function _g(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}function ef(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}function tf(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t}function rf(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}function wg(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}function Sg(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}function Ag(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t}function Mg(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t}function Eg(t,e){return t[0]=xo(e[0]),t[1]=xo(e[1]),t[2]=xo(e[2]),t}function Lg(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}function Tg(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t}function nf(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(r*r+n*n+i*i)}function sf(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return r*r+n*n+i*i}function af(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}function Cg(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}function kg(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}function Pg(t,e){var r=e[0],n=e[1],i=e[2],s=r*r+n*n+i*i;return s>0&&(s=1/Math.sqrt(s)),t[0]=e[0]*s,t[1]=e[1]*s,t[2]=e[2]*s,t}function cc(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Ig(t,e,r){var n=e[0],i=e[1],s=e[2],a=r[0],o=r[1],u=r[2];return t[0]=i*u-s*o,t[1]=s*a-n*u,t[2]=n*o-i*a,t}function Rg(t,e,r,n){var i=e[0],s=e[1],a=e[2];return t[0]=i+n*(r[0]-i),t[1]=s+n*(r[1]-s),t[2]=a+n*(r[2]-a),t}function Fg(t,e,r,n){var i=Math.acos(Math.min(Math.max(cc(e,r),-1),1)),s=Math.sin(i),a=Math.sin((1-n)*i)/s,o=Math.sin(n*i)/s;return t[0]=a*e[0]+o*r[0],t[1]=a*e[1]+o*r[1],t[2]=a*e[2]+o*r[2],t}function Bg(t,e,r,n,i,s){var a=s*s,o=a*(2*s-3)+1,u=a*(s-2)+s,l=a*(s-1),c=a*(3-2*s);return t[0]=e[0]*o+r[0]*u+n[0]*l+i[0]*c,t[1]=e[1]*o+r[1]*u+n[1]*l+i[1]*c,t[2]=e[2]*o+r[2]*u+n[2]*l+i[2]*c,t}function Dg(t,e,r,n,i,s){var a=1-s,o=a*a,u=s*s,l=o*a,c=3*s*o,f=3*u*a,d=u*s;return t[0]=e[0]*l+r[0]*c+n[0]*f+i[0]*d,t[1]=e[1]*l+r[1]*c+n[1]*f+i[1]*d,t[2]=e[2]*l+r[2]*c+n[2]*f+i[2]*d,t}function Og(t,e){e=e===void 0?1:e;var r=lc()*2*Math.PI,n=lc()*2-1,i=Math.sqrt(1-n*n)*e;return t[0]=Math.cos(r)*i,t[1]=Math.sin(r)*i,t[2]=n*e,t}function zg(t,e,r){var n=e[0],i=e[1],s=e[2],a=r[3]*n+r[7]*i+r[11]*s+r[15];return a=a||1,t[0]=(r[0]*n+r[4]*i+r[8]*s+r[12])/a,t[1]=(r[1]*n+r[5]*i+r[9]*s+r[13])/a,t[2]=(r[2]*n+r[6]*i+r[10]*s+r[14])/a,t}function Ng(t,e,r){var n=e[0],i=e[1],s=e[2];return t[0]=n*r[0]+i*r[3]+s*r[6],t[1]=n*r[1]+i*r[4]+s*r[7],t[2]=n*r[2]+i*r[5]+s*r[8],t}function Ug(t,e,r){var n=r[0],i=r[1],s=r[2],a=r[3],o=e[0],u=e[1],l=e[2],c=i*l-s*u,f=s*o-n*l,d=n*u-i*o;return c=c+c,f=f+f,d=d+d,t[0]=o+a*c+i*d-s*f,t[1]=u+a*f+s*c-n*d,t[2]=l+a*d+n*f-i*c,t}function Hg(t,e,r,n){var i=[],s=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[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),t[0]=s[0]+r[0],t[1]=s[1]+r[1],t[2]=s[2]+r[2],t}function Vg(t,e,r,n){var i=[],s=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[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),t[0]=s[0]+r[0],t[1]=s[1]+r[1],t[2]=s[2]+r[2],t}function Gg(t,e,r,n){var i=[],s=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[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],t[0]=s[0]+r[0],t[1]=s[1]+r[1],t[2]=s[2]+r[2],t}function Wg(t,e){var r=t[0],n=t[1],i=t[2],s=e[0],a=e[1],o=e[2],u=Math.sqrt((r*r+n*n+i*i)*(s*s+a*a+o*o)),l=u&&cc(t,e)/u;return Math.acos(Math.min(Math.max(l,-1),1))}function Xg(t){return t[0]=0,t[1]=0,t[2]=0,t}function Kg(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"}function $g(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}function Zg(t,e){var r=t[0],n=t[1],i=t[2],s=e[0],a=e[1],o=e[2];return Math.abs(r-s)<=ee*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(n-a)<=ee*Math.max(1,Math.abs(n),Math.abs(a))&&Math.abs(i-o)<=ee*Math.max(1,Math.abs(i),Math.abs(o))}var Yg=ef,qg=tf,jg=rf,Qg=nf,Jg=sf,e1=Jd,t1=af,r1=(function(){var t=Qd();return function(e,r,n,i,s,a){var o,u;for(r||(r=3),n||(n=0),i?u=Math.min(i*r+n,e.length):u=e.length,o=n;o<u;o+=r)t[0]=e[o],t[1]=e[o+1],t[2]=e[o+2],s(t,t,a),e[o]=t[0],e[o+1]=t[1],e[o+2]=t[2];return e}})();var vo=class{constructor(){this._position=D.create();this._angles=D.create();this._bobAngles=D.create();this._bobOffset=D.create();this._kickAngles=D.create();this._rollAngle=0;this._fov=90;this._aspect=1;this._near=.1;this._far=1e3;this._viewMatrix=ue.create();this._projectionMatrix=ue.create();this._viewProjectionMatrix=ue.create();this._dirty=!0}get position(){return this._position}set position(e){D.equals(this._position,e)||(D.copy(this._position,e),this._dirty=!0,this.triggerMoveEvent())}get angles(){return this._angles}set angles(e){D.equals(this._angles,e)||(D.copy(this._angles,e),this._dirty=!0,this.triggerMoveEvent())}get bobAngles(){return this._bobAngles}set bobAngles(e){D.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){D.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){D.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}setPosition(e,r,n){let i=D.fromValues(e,r,n);D.equals(this._position,i)||(D.copy(this._position,i),this._dirty=!0,this.triggerMoveEvent())}setRotation(e,r,n){let i=D.fromValues(e,r,n);D.equals(this._angles,i)||(D.copy(this._angles,i),this._dirty=!0,this.triggerMoveEvent())}setFov(e){this.fov=e}setAspectRatio(e){this.aspect=e}lookAt(e){let r=D.create();if(D.subtract(r,e,this._position),D.length(r)<.001)return;let i=Math.atan2(r[1],r[0])*el,s=Math.hypot(r[0],r[1]),a=-Math.atan2(r[2],s)*el;this.setRotation(a,i,0)}triggerMoveEvent(){this.onCameraMove&&this.onCameraMove({position:D.clone(this._position),angles:D.clone(this._angles)})}get viewMatrix(){return this.updateMatrices(),this._viewMatrix}get projectionMatrix(){return this.updateMatrices(),this._projectionMatrix}get viewProjectionMatrix(){return this.updateMatrices(),this._viewProjectionMatrix}getViewmodelProjectionMatrix(e){let r=ue.create();return ue.perspective(r,e*Mn,this._aspect,this._near,this._far),r}screenToWorldRay(e,r){let n=e*2-1,i=1-r*2,s=D.fromValues(n,i,-1),a=D.fromValues(n,i,1),o=ue.create();ue.invert(o,this.viewProjectionMatrix);let u=D.create(),l=D.create();D.transformMat4(u,s,o),D.transformMat4(l,a,o);let c=D.create();return D.subtract(c,l,u),D.normalize(c,c),{origin:D.clone(this._position),direction:c}}updateMatrices(){if(!this._dirty)return;ue.perspective(this._projectionMatrix,this._fov*Mn,this._aspect,this._near,this._far);let e=ue.fromValues(0,0,-1,0,-1,0,0,0,0,1,0,0,0,0,0,1),r=this._angles[0]+this._bobAngles[0]+this._kickAngles[0],n=this._angles[1]+this._bobAngles[1]+this._kickAngles[1],i=this._angles[2]+this._bobAngles[2]+this._kickAngles[2]+this._rollAngle,s=r*Mn,a=n*Mn,o=i*Mn,u=ue.create();ue.identity(u),ue.rotateZ(u,u,-a),ue.rotateY(u,u,-s),ue.rotateX(u,u,-o);let l=ue.create();ue.multiply(l,e,u);let c=D.add(D.create(),this._position,this._bobOffset),f=D.negate(D.create(),c),d=D.create();D.transformMat4(d,f,u);let h=D.fromValues(d[1]?-d[1]:0,d[2]||0,d[0]?-d[0]:0);ue.copy(this._viewMatrix,l),this._viewMatrix[12]=h[0],this._viewMatrix[13]=h[1],this._viewMatrix[14]=h[2],ue.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var n1=[.2,.2,.2],i1={x:0,y:0,z:1},s1=[.8,.8,.8];function uc(t,e,r){return t+(e-t)*r}function ai(t,e,r){return{x:uc(t.x,e.x,r),y:uc(t.y,e.y,r),z:uc(t.z,e.z,r)}}function si(t){return t<0?0:t>1?1:t}function dc(t){let e=[],r=[];for(let n of t.triangles){let i=e.length,[s,a,o]=n.indices,u=t.texCoords[s],l=t.texCoords[a],c=t.texCoords[o];if(!u||!l||!c)throw new Error(`Missing texCoord for triangle in surface ${t.name}`);e.push({vertexIndex:s,texCoord:[u.s,1-u.t]},{vertexIndex:a,texCoord:[l.s,1-l.t]},{vertexIndex:o,texCoord:[c.s,1-c.t]}),r.push(i,i+1,i+2)}return{vertices:e,indices:new Uint16Array(r)}}function a1(t,e,r){let n=r?.ambient??n1,i=r?.directional??{direction:i1,color:s1},s=Mt(t),a=Mt(i.direction),o=si(s.x*a.x+s.y*a.y+s.z*a.z),u=n[0]+i.color[0]*o,l=n[1]+i.color[1]*o,c=n[2]+i.color[2]*o;if(r?.dynamicLights){let f=r.modelMatrix?du(r.modelMatrix,e):e;for(let d of r.dynamicLights){let h=f.x-d.origin.x,m=f.y-d.origin.y,g=f.z-d.origin.z,p=h*h+m*m+g*g,y=d.radius*d.radius;if(p<y&&y>0){let v=1-Math.sqrt(p)/d.radius,x=Math.sqrt(p),b=x>0?si(-(h*s.x+m*s.y+g*s.z)/x):0,_=si(v*b);u+=d.color[0]*_,l+=d.color[1]*_,c+=d.color[2]*_}}}return[si(u),si(l),si(c)]}function fc(t,e,r,n){let i=t.vertices[r.frame0],s=t.vertices[r.frame1];if(!i||!s)throw new Error("Requested MD3 frames are out of range");let a=new Float32Array(e.vertices.length*12);return e.vertices.forEach((o,u)=>{let l=i[o.vertexIndex],c=s[o.vertexIndex];if(!l||!c)throw new Error(`Vertex index ${o.vertexIndex} missing for frame`);let f=ai(l.position,c.position,r.lerp),d=Mt(ai(l.normal,c.normal,r.lerp)),h=a1(d,f,n),m=u*12;a[m]=f.x,a[m+1]=f.y,a[m+2]=f.z,a[m+3]=d.x,a[m+4]=d.y,a[m+5]=d.z,a[m+6]=o.texCoord[0],a[m+7]=o.texCoord[1],a[m+8]=h[0],a[m+9]=h[1],a[m+10]=h[2],a[m+11]=1}),a}function of(t,e,r){let n=t.tags[0];if(!n)return null;let i=n.findIndex(g=>g.name===r);if(i===-1)return null;let s=t.tags[e.frame0]?.[i],a=t.tags[e.frame1]?.[i];if(!s||!a)throw new Error(`Tag ${r} is missing for one of the interpolated frames`);let o=ai(s.origin,a.origin,e.lerp),u=Mt(ai(s.axis[0],a.axis[0],e.lerp)),l=Mt(ai(s.axis[1],a.axis[1],e.lerp)),c=Mt(ai(s.axis[2],a.axis[2],e.lerp)),f=u,d=Mt({x:l.x-f.x*(f.x*l.x+f.y*l.y+f.z*l.z),y:l.y-f.y*(f.x*l.x+f.y*l.y+f.z*l.z),z:l.z-f.z*(f.x*l.x+f.y*l.y+f.z*l.z)}),h=Mt({x:f.y*d.z-f.z*d.y,y:f.z*d.x-f.x*d.z,z:f.x*d.y-f.y*d.x}),m=[f,d,h];return{origin:o,axis:m,matrix:fu(o,m)}}var hc=`#version 300 es
480
+ precision highp float;
481
+
482
+ layout(location = 0) in vec3 a_position;
483
+ layout(location = 1) in vec3 a_normal;
484
+ layout(location = 2) in vec2 a_texCoord;
485
+ layout(location = 3) in vec4 a_color;
486
+
487
+ uniform mat4 u_modelViewProjection;
488
+
489
+ out vec2 v_texCoord;
490
+ out vec4 v_color;
491
+ out vec3 v_position;
492
+
493
+ void main() {
494
+ v_texCoord = a_texCoord;
495
+ v_color = a_color;
496
+ v_position = a_position; // Model space, assuming single mesh pass
497
+ gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
498
+ }`,mc=`#version 300 es
499
+ precision highp float;
500
+
501
+ in vec2 v_texCoord;
502
+ in vec4 v_color;
503
+ in vec3 v_position;
504
+
505
+ uniform sampler2D u_diffuseMap;
506
+ uniform vec4 u_tint;
507
+
508
+ uniform int u_renderMode; // 0: Textured, 1: Solid, 2: Solid Faceted
509
+ uniform vec4 u_solidColor;
510
+
511
+ // Lighting controls
512
+ uniform float u_brightness;
513
+ uniform float u_gamma;
514
+ uniform bool u_fullbright;
515
+ uniform float u_globalAmbient;
516
+
517
+ out vec4 o_color;
518
+
519
+ void main() {
520
+ vec4 finalColor;
521
+
522
+ if (u_renderMode == 0) {
523
+ vec4 albedo = texture(u_diffuseMap, v_texCoord) * u_tint;
524
+
525
+ vec3 light = v_color.rgb;
526
+ if (u_fullbright) {
527
+ light = vec3(1.0);
528
+ }
529
+ light = max(light, vec3(u_globalAmbient));
530
+ light *= u_brightness;
531
+
532
+ vec3 rgb = albedo.rgb * light;
533
+
534
+ if (u_gamma != 1.0) {
535
+ rgb = pow(rgb, vec3(1.0 / u_gamma));
536
+ }
537
+
538
+ finalColor = vec4(rgb, albedo.a * v_color.a);
539
+ } else {
540
+ vec3 color = u_solidColor.rgb;
541
+ if (u_renderMode == 2) {
542
+ // FACETED
543
+ vec3 fdx = dFdx(v_position);
544
+ vec3 fdy = dFdy(v_position);
545
+ vec3 faceNormal = normalize(cross(fdx, fdy));
546
+ vec3 lightDir = normalize(vec3(0.5, 0.5, 1.0));
547
+ float diff = max(dot(faceNormal, lightDir), 0.2);
548
+ color *= diff;
549
+ }
550
+ finalColor = vec4(color, u_solidColor.a * u_tint.a);
551
+ }
552
+
553
+ o_color = finalColor;
554
+ }`,ks=class{constructor(e,r,n,i){this.gl=e,this.geometry=dc(r),this.vertexBuffer=new ge(e,e.STATIC_DRAW),this.indexBuffer=new we(e,e.STATIC_DRAW),this.vertexArray=new Se(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:48,offset:0},{index:1,size:3,type:e.FLOAT,stride:48,offset:12},{index:2,size:2,type:e.FLOAT,stride:48,offset:24},{index:3,size:4,type:e.FLOAT,stride:48,offset:32}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(r,n,i)}update(e,r,n){let i=fc(e,this.geometry,r,n);this.vertexBuffer.upload(i,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose(),this.wireframeIndexBuffer?.dispose()}},_o=class{constructor(e,r,n,i){this.surfaces=new Map;this.gl=e,this.model=r,this.blend=n,this.lighting=i,r.surfaces.forEach(s=>{this.surfaces.set(s.name,new ks(e,s,n,i))})}update(e,r){this.blend=e,this.lighting=r??this.lighting;for(let n of this.model.surfaces)this.surfaces.get(n.name)?.update(n,e,this.lighting)}dispose(){for(let e of this.surfaces.values())e.dispose();this.surfaces.clear()}},wo=class{constructor(e){this.gl=e,this.program=pe.create(e,{vertex:hc,fragment:mc},{a_position:0,a_normal:1,a_texCoord:2,a_color:3}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformRenderMode=this.program.getUniformLocation("u_renderMode"),this.uniformSolidColor=this.program.getUniformLocation("u_solidColor"),this.uniformBrightness=this.program.getUniformLocation("u_brightness"),this.uniformGamma=this.program.getUniformLocation("u_gamma"),this.uniformFullbright=this.program.getUniformLocation("u_fullbright"),this.uniformGlobalAmbient=this.program.getUniformLocation("u_globalAmbient")}get shaderSize(){return this.program.sourceSize}bind(e,r=[1,1,1,1],n=0){this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,e),this.gl.uniform4fv(this.uniformTint,new Float32Array(r)),this.gl.uniform1i(this.uniformDiffuse,n),this.gl.uniform1i(this.uniformRenderMode,0),this.gl.uniform4f(this.uniformSolidColor,1,1,1,1)}drawSurface(e,r){let n=r?.diffuseSampler??0,i=r?.tint??[1,1,1,1],s=r?.renderMode,a=r?.brightness??1,o=r?.gamma??1,u=r?.fullbright??!1,l=r?.globalAmbient??0;this.gl.uniform4fv(this.uniformTint,new Float32Array(i)),this.gl.uniform1i(this.uniformDiffuse,n);let c=0,f=[1,1,1,1];if(s&&(s.mode==="solid"||s.mode==="wireframe"?c=1:s.mode==="solid-faceted"&&(c=2),s.color&&(f=[...s.color])),this.gl.uniform1i(this.uniformRenderMode,c),this.gl.uniform4f(this.uniformSolidColor,f[0],f[1],f[2],f[3]),this.gl.uniform1f(this.uniformBrightness,a),this.gl.uniform1f(this.uniformGamma,o),this.gl.uniform1i(this.uniformFullbright,u?1:0),this.gl.uniform1f(this.uniformGlobalAmbient,l),e.vertexArray.bind(),s&&s.mode==="wireframe"){if(!e.wireframeIndexBuffer){e.wireframeIndexBuffer=new we(this.gl,this.gl.STATIC_DRAW);let d=ii(e.geometry.indices);e.wireframeIndexBuffer.upload(d),e.wireframeIndexCount=d.length}e.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,e.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else e.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var o1=[1,1,1,1],So=class{constructor(e,r){this.maxParticles=e,this.rng=r,this.alive=new Uint8Array(e),this.positionX=new Float32Array(e),this.positionY=new Float32Array(e),this.positionZ=new Float32Array(e),this.velocityX=new Float32Array(e),this.velocityY=new Float32Array(e),this.velocityZ=new Float32Array(e),this.colorR=new Float32Array(e),this.colorG=new Float32Array(e),this.colorB=new Float32Array(e),this.colorA=new Float32Array(e),this.size=new Float32Array(e),this.lifetime=new Float32Array(e),this.remaining=new Float32Array(e),this.gravity=new Float32Array(e),this.damping=new Float32Array(e),this.bounce=new Float32Array(e),this.fade=new Uint8Array(e),this.blendMode=new Uint8Array(e)}spawn(e){let r=this.findFreeSlot();if(r===-1)return null;let n=e.color??o1,i=e.velocity??{x:0,y:0,z:0};return this.alive[r]=1,this.positionX[r]=e.position.x,this.positionY[r]=e.position.y,this.positionZ[r]=e.position.z,this.velocityX[r]=i.x,this.velocityY[r]=i.y,this.velocityZ[r]=i.z,this.colorR[r]=n[0],this.colorG[r]=n[1],this.colorB[r]=n[2],this.colorA[r]=n[3],this.size[r]=e.size??2.5,this.lifetime[r]=e.lifetime,this.remaining[r]=e.lifetime,this.gravity[r]=e.gravity??800,this.damping[r]=e.damping??0,this.bounce[r]=e.bounce??.25,this.fade[r]=e.fade?1:0,this.blendMode[r]=e.blendMode==="additive"?1:0,r}update(e,r={}){let n=r.floorZ??-1/0;for(let i=0;i<this.maxParticles;i+=1){if(!this.alive[i])continue;if(this.remaining[i]-=e,this.remaining[i]<=0){this.alive[i]=0;continue}let s=Math.max(0,1-this.damping[i]*e);this.velocityX[i]*=s,this.velocityY[i]*=s,this.velocityZ[i]=this.velocityZ[i]*s-this.gravity[i]*e,this.positionX[i]+=this.velocityX[i]*e,this.positionY[i]+=this.velocityY[i]*e,this.positionZ[i]+=this.velocityZ[i]*e,this.positionZ[i]<n&&(this.positionZ[i]=n,this.velocityZ[i]=-this.velocityZ[i]*this.bounce[i],this.velocityX[i]*=.7,this.velocityY[i]*=.7)}}killAll(){this.alive.fill(0)}aliveCount(){let e=0;for(let r=0;r<this.maxParticles;r+=1)this.alive[r]&&(e+=1);return e}getState(e){return{alive:this.alive[e]===1,position:{x:this.positionX[e],y:this.positionY[e],z:this.positionZ[e]},velocity:{x:this.velocityX[e],y:this.velocityY[e],z:this.velocityZ[e]},remaining:this.remaining[e],color:[this.colorR[e],this.colorG[e],this.colorB[e],this.colorA[e]],size:this.size[e],blendMode:this.blendMode[e]===1?"additive":"alpha"}}buildMesh(e,r){let n=[],i=[],s=[],a=o=>{let u=i.length,l=0;for(let c=0;c<this.maxParticles;c+=1){if(!this.alive[c]||(o==="additive"?1:0)!==this.blendMode[c])continue;l+=1;let f=n.length/9,d=this.size[c]*.5,h=this.fade[c]?Math.max(this.remaining[c]/this.lifetime[c],0):1,m=this.blendMode[c]===1?1.2:1,g=this.colorR[c]*m,p=this.colorG[c]*m,y=this.colorB[c]*m,v=this.colorA[c]*h,x=this.positionX[c],b=this.positionY[c],_=this.positionZ[c],S=e.x*d,w=e.y*d,L=e.z*d,C=r.x*d,A=r.y*d,k=r.z*d,R=[{x:x-S-C,y:b-w-A,z:_-L-k},{x:x+S-C,y:b+w-A,z:_+L-k},{x:x-S+C,y:b-w+A,z:_-L+k},{x:x+S+C,y:b+w+A,z:_+L+k}],B=[[0,1],[1,1],[0,0],[1,0]];R.forEach((P,V)=>{n.push(P.x,P.y,P.z,B[V]?.[0]??0,B[V]?.[1]??0,g,p,y,v)}),i.push(f,f+1,f+2,f+2,f+1,f+3)}l>0&&s.push({blendMode:o,start:u,count:i.length-u})};return a("alpha"),a("additive"),{vertices:new Float32Array(n),indices:new Uint16Array(i),batches:s}}findFreeSlot(){for(let e=0;e<this.maxParticles;e+=1)if(!this.alive[e])return e;return-1}},pc=`#version 300 es
555
+ precision highp float;
556
+
557
+ layout(location = 0) in vec3 a_position;
558
+ layout(location = 1) in vec2 a_uv;
559
+ layout(location = 2) in vec4 a_color;
560
+
561
+ uniform mat4 u_viewProjection;
562
+
563
+ out vec2 v_uv;
564
+ out vec4 v_color;
565
+
566
+ void main() {
567
+ v_uv = a_uv;
568
+ v_color = a_color;
569
+ gl_Position = u_viewProjection * vec4(a_position, 1.0);
570
+ }`,gc=`#version 300 es
571
+ precision highp float;
572
+
573
+ in vec2 v_uv;
574
+ in vec4 v_color;
575
+
576
+ out vec4 o_color;
577
+
578
+ void main() {
579
+ float dist = distance(v_uv, vec2(0.5));
580
+ float alpha = v_color.a * (1.0 - smoothstep(0.35, 0.5, dist));
581
+ o_color = vec4(v_color.rgb, alpha);
582
+ }`,Ao=class{constructor(e,r){this.vertexCapacity=0;this.indexCapacity=0;this.gl=e,this.system=r,this.program=pe.create(e,{vertex:pc,fragment:gc}),this.vertexBuffer=new ge(e,e.DYNAMIC_DRAW),this.indexBuffer=new we(e,e.DYNAMIC_DRAW),this.vertexArray=new Se(e),this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:36,offset:0},{index:1,size:2,type:e.FLOAT,stride:36,offset:12},{index:2,size:4,type:e.FLOAT,stride:36,offset:20}],this.vertexBuffer)}get shaderSize(){return this.program.sourceSize}render(e){let r=this.system.buildMesh(e.viewRight,e.viewUp);if(r.indices.length===0)return;let n=r.vertices;r.vertices.byteLength>this.vertexCapacity?(this.vertexCapacity=r.vertices.byteLength,this.vertexBuffer.upload(n,this.gl.DYNAMIC_DRAW)):this.vertexBuffer.update(n);let i=r.indices;r.indices.byteLength>this.indexCapacity?(this.indexCapacity=r.indices.byteLength,this.indexBuffer.upload(i,this.gl.DYNAMIC_DRAW)):this.indexBuffer.update(i),this.gl.depthMask(!1),this.program.use();let s=this.program.getUniformLocation("u_viewProjection");this.gl.uniformMatrix4fv(s,!1,e.viewProjection),this.vertexArray.bind();for(let a of r.batches)a.blendMode==="additive"?this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE):this.gl.blendFuncSeparate(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA,this.gl.ONE,this.gl.ONE_MINUS_SRC_ALPHA),this.gl.drawElements(this.gl.TRIANGLES,a.count,this.gl.UNSIGNED_SHORT,a.start*2);this.gl.depthMask(!0)}dispose(){this.program.dispose(),this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}};function lf(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1}}=t;for(let i=0;i<12;i+=1){let s=200+e.rng.frandom()*180,a=e.rng.frandom()*.35;e.spawn({position:r,velocity:{x:n.x*s+(e.rng.frandom()-.5)*80,y:n.y*s+(e.rng.frandom()-.5)*80,z:Math.max(n.z*s,120)+a*80},color:[1,.8,.4,1],size:2.5,lifetime:.45+e.rng.frandom()*.1,gravity:600,damping:2,bounce:.45,blendMode:"additive",fade:!0})}for(let i=0;i<8;i+=1)e.spawn({position:r,velocity:{x:(e.rng.frandom()-.5)*40,y:(e.rng.frandom()-.5)*40,z:80+e.rng.frandom()*40},color:[.45,.45,.45,.75],size:6,lifetime:.6,gravity:200,damping:4,bounce:.15,blendMode:"alpha",fade:!0})}function cf(t){let{system:e,origin:r}=t;for(let n=0;n<40;n+=1){let i=e.rng.frandom()*Math.PI*2,s=Math.acos(2*e.rng.frandom()-1),a=220+e.rng.frandom()*260,o={x:Math.sin(s)*Math.cos(i),y:Math.sin(s)*Math.sin(i),z:Math.cos(s)};e.spawn({position:r,velocity:{x:o.x*a,y:o.y*a,z:o.z*a},color:[1,.6,.2,1],size:5,lifetime:.9,gravity:700,damping:1,bounce:.35,blendMode:"additive",fade:!0})}for(let n=0;n<16;n+=1)e.spawn({position:r,velocity:{x:(e.rng.frandom()-.5)*30,y:(e.rng.frandom()-.5)*30,z:120+e.rng.frandom()*120},color:[.25,.25,.25,.9],size:12,lifetime:1.2,gravity:300,damping:3,blendMode:"alpha",fade:!0})}function uf(t){let{system:e,origin:r,direction:n={x:0,y:0,z:1}}=t;for(let i=0;i<24;i+=1){let s=120+e.rng.frandom()*180;e.spawn({position:r,velocity:{x:n.x*s+(e.rng.frandom()-.5)*70,y:n.y*s+(e.rng.frandom()-.5)*70,z:n.z*s+e.rng.frandom()*80},color:[.6,0,0,.95],size:3,lifetime:.8,gravity:900,damping:1,bounce:.2,blendMode:"alpha",fade:!0})}}function df(t){let{system:e,origin:r}=t;for(let n=0;n<30;n+=1){let i=e.rng.frandom()*Math.PI*2,s=8+e.rng.frandom()*8;e.spawn({position:r,velocity:{x:Math.cos(i)*s,y:Math.sin(i)*s,z:100+e.rng.frandom()*80},color:[.4,.6,1,.9],size:4,lifetime:.5,gravity:300,damping:2,blendMode:"additive",fade:!0})}}function ff(t){let{system:e,origin:r,direction:n={x:1,y:0,z:0}}=t;for(let i=0;i<10;i+=1){let s=350+e.rng.frandom()*100;e.spawn({position:r,velocity:{x:n.x*s+(e.rng.frandom()-.5)*30,y:n.y*s+(e.rng.frandom()-.5)*30,z:n.z*s+(e.rng.frandom()-.5)*30},color:[1,.8,.3,1],size:3,lifetime:.25,gravity:200,damping:1,blendMode:"additive",fade:!0})}}function hf(t){let{system:e,origin:r,direction:n={x:0,y:0,z:0}}=t;for(let i=0;i<6;i+=1)e.spawn({position:{x:r.x+n.x*i*2,y:r.y+n.y*i*2,z:r.z+n.z*i*2},velocity:{x:(e.rng.frandom()-.5)*15,y:(e.rng.frandom()-.5)*15,z:20+e.rng.frandom()*15},color:[.6,.6,.6,.8],size:2.2,lifetime:.6,gravity:200,damping:1.5,blendMode:"alpha",fade:!0})}function mf(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1}}=t;for(let i=0;i<30;i+=1){let s=100+e.rng.frandom()*150;e.spawn({position:r,velocity:{x:n.x*s+(e.rng.frandom()-.5)*80,y:n.y*s+(e.rng.frandom()-.5)*80,z:100+e.rng.frandom()*120},color:[.5,.6,.8,.5],size:3,lifetime:.5+e.rng.frandom()*.3,gravity:800,damping:1.5,blendMode:"alpha",fade:!0})}}function pf(t){let{system:e,origin:r}=t;for(let n=0;n<8;n+=1)e.spawn({position:{x:r.x+(e.rng.frandom()-.5)*10,y:r.y+(e.rng.frandom()-.5)*10,z:r.z+(e.rng.frandom()-.5)*10},velocity:{x:(e.rng.frandom()-.5)*20,y:(e.rng.frandom()-.5)*20,z:40+e.rng.frandom()*20},color:[.8,.8,.8,.3],size:5+e.rng.frandom()*4,lifetime:1.5+e.rng.frandom()*.5,gravity:-50,damping:.5,blendMode:"alpha",fade:!0})}function gf(t){let{system:e,start:r,end:n}=t,i=n.x-r.x,s=n.y-r.y,a=n.z-r.z,o=Math.sqrt(i*i+s*s+a*a);if(o<1)return;let u={x:i/o,y:s/o,z:a/o},l=8;for(let c=0;c<o;c+=l){let f=r.x+u.x*c,d=r.y+u.y*c,h=r.z+u.z*c;e.spawn({position:{x:f,y:d,z:h},velocity:{x:0,y:0,z:0},color:[.4,.4,1,.8],size:2,lifetime:.6,blendMode:"additive",fade:!0});let m=3,g=c*.5;e.spawn({position:{x:f+(e.rng.frandom()-.5)*6,y:d+(e.rng.frandom()-.5)*6,z:h+(e.rng.frandom()-.5)*6},velocity:{x:(e.rng.frandom()-.5)*10,y:(e.rng.frandom()-.5)*10,z:(e.rng.frandom()-.5)*10},color:[.1,.1,.8,.6],size:3,lifetime:.8+e.rng.frandom()*.2,blendMode:"additive",fade:!0})}}function yf(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1},count:i=12,color:s=[1,.9,.2,1]}=t;for(let a=0;a<i;a++){let o=100+e.rng.frandom()*200,u=.5;e.spawn({position:r,velocity:{x:n.x*o+(e.rng.frandom()-.5)*100*u,y:n.y*o+(e.rng.frandom()-.5)*100*u,z:n.z*o+(e.rng.frandom()-.5)*100*u},color:s,size:1.5,lifetime:.3+e.rng.frandom()*.2,gravity:800,bounce:.5,damping:1,blendMode:"additive",fade:!0})}}function bf(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1},color:i=[1,.8,0,1]}=t;e.spawn({position:r,velocity:{x:0,y:0,z:0},color:i,size:8,lifetime:.2,blendMode:"additive",fade:!0});for(let s=0;s<8;s++){let a=150+e.rng.frandom()*150;e.spawn({position:r,velocity:{x:n.x*a+(e.rng.frandom()-.5)*120,y:n.y*a+(e.rng.frandom()-.5)*120,z:n.z*a+(e.rng.frandom()-.5)*120},color:i,size:2,lifetime:.4+e.rng.frandom()*.2,gravity:400,blendMode:"additive",fade:!0})}}function xf(t){let{system:e,origin:r}=t;e.spawn({position:r,velocity:{x:0,y:0,z:0},color:[.2,1,.2,1],size:30,lifetime:.5,blendMode:"additive",fade:!0});for(let n=0;n<60;n++){let i=e.rng.frandom()*Math.PI*2,s=Math.acos(2*e.rng.frandom()-1),a=300+e.rng.frandom()*400,o={x:Math.sin(s)*Math.cos(i),y:Math.sin(s)*Math.sin(i),z:Math.cos(s)};e.spawn({position:r,velocity:{x:o.x*a,y:o.y*a,z:o.z*a},color:[.2,1,.2,.8],size:4,lifetime:1,gravity:100,damping:1,blendMode:"additive",fade:!0})}}var l1=`#version 300 es
583
+ precision highp float;
584
+
585
+ layout(location = 0) in vec2 a_position;
586
+ layout(location = 1) in vec2 a_texCoord;
587
+
588
+ uniform mat4 u_projection;
589
+
590
+ out vec2 v_texCoord;
591
+
592
+ void main() {
593
+ v_texCoord = a_texCoord;
594
+ gl_Position = u_projection * vec4(a_position, 0.0, 1.0);
595
+ }`,c1=`#version 300 es
596
+ precision highp float;
597
+
598
+ in vec2 v_texCoord;
599
+
600
+ uniform sampler2D u_diffuseMap;
601
+ uniform vec4 u_tint;
602
+
603
+ out vec4 o_color;
604
+
605
+ void main() {
606
+ o_color = texture(u_diffuseMap, v_texCoord) * u_tint;
607
+ }`,Mo=class{constructor(e){this.gl=e,this.program=pe.create(e,{vertex:l1,fragment:c1},{a_position:0,a_texCoord:1}),this.uniformProjection=this.program.getUniformLocation("u_projection"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.vao=new Se(e),this.vbo=new ge(e,e.STREAM_DRAW),this.vao.configureAttributes([{index:0,size:2,type:e.FLOAT,stride:16,offset:0},{index:1,size:2,type:e.FLOAT,stride:16,offset:8}],this.vbo),this.whiteTexture=new hr(e),this.whiteTexture.upload(1,1,new Uint8Array([255,255,255,255]))}get shaderSize(){return this.program.sourceSize}begin(e){this.program.use(),this.gl.uniformMatrix4fv(this.uniformProjection,!1,e)}draw(e,r,n,i,s=0,a=0,o=1,u=1,l=[1,1,1,1]){let c=e,f=r,d=e+n,h=r+i,m=new Float32Array([c,f,s,a,d,f,o,a,c,h,s,u,d,h,o,u]);this.vbo.upload(m,this.gl.STREAM_DRAW),this.gl.uniform4fv(this.uniformTint,new Float32Array(l)),this.vao.bind(),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4)}drawRect(e,r,n,i,s){this.whiteTexture.bind(0),this.draw(e,r,n,i,0,0,1,1,s)}};var Qe=class{constructor(e){this.messageOffsets=[];this.currentBlock=null;this.buffer=e,this.view=new DataView(e),this.offset=0,this.scan()}scan(){let e=0;for(this.messageOffsets=[];e+4<=this.buffer.byteLength;){let r=this.view.getInt32(e,!0);if(r===-1)break;if(r<0||r>2097152){console.warn(`DemoReader: Invalid block length ${r} at offset ${e} during scan`);break}if(e+4+r>this.buffer.byteLength){console.warn(`DemoReader: Incomplete block at offset ${e} during scan`);break}this.messageOffsets.push(e),e+=4+r}}hasMore(){return this.offset<this.buffer.byteLength}readNextBlock(){if(this.offset+4>this.buffer.byteLength)return null;let e=this.view.getInt32(this.offset,!0);if(e===-1||e<0||this.offset+4+e>this.buffer.byteLength)return null;this.offset+=4;let r=this.buffer.slice(this.offset,this.offset+e);return this.offset+=e,{length:e,data:new Kt(r)}}nextBlock(){let e=this.readNextBlock();return e?(this.currentBlock=e,!0):(this.currentBlock=null,!1)}getBlock(){if(!this.currentBlock)throw new Error("No current block. Call nextBlock() first.");return this.currentBlock}readAllBlocksToBuffer(){let e=0,r=this.offset,n=[],i=this.offset;for(;i+4<=this.buffer.byteLength;){let u=this.view.getInt32(i,!0);if(u===-1||u<0||i+4+u>this.buffer.byteLength)break;n.push({offset:i+4,length:u}),e+=u,i+=4+u}let s=new Uint8Array(e),a=0,o=new Uint8Array(this.buffer);for(let u of n)s.set(o.subarray(u.offset,u.offset+u.length),a),a+=u.length;return this.offset=i,s.buffer}reset(){this.offset=0,this.currentBlock=null}seekToMessage(e){return e<0||e>=this.messageOffsets.length?!1:(this.offset=this.messageOffsets[e],this.currentBlock=null,!0)}getMessageCount(){return this.messageOffsets.length}getOffset(){return this.offset}getProgress(){let e=this.offset,r=this.buffer.byteLength;return{current:e,total:r,percent:r>0?e/r*100:0}}};function fi(t){let e=t.length;for(;--e>=0;)t[e]=0}var u1=0,ih=1,d1=2,f1=3,h1=258,Uc=29,Xs=256,Os=Xs+1+Uc,ci=30,Hc=19,sh=2*Os+1,hn=15,yc=16,m1=7,Vc=256,ah=16,oh=17,lh=18,Pc=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),Po=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),p1=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),ch=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),g1=512,Ht=new Array((Os+2)*2);fi(Ht);var Fs=new Array(ci*2);fi(Fs);var zs=new Array(g1);fi(zs);var Ns=new Array(h1-f1+1);fi(Ns);var Gc=new Array(Uc);fi(Gc);var Io=new Array(ci);fi(Io);function bc(t,e,r,n,i){this.static_tree=t,this.extra_bits=e,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=t&&t.length}var uh,dh,fh;function xc(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}var hh=t=>t<256?zs[t]:zs[256+(t>>>7)],Us=(t,e)=>{t.pending_buf[t.pending++]=e&255,t.pending_buf[t.pending++]=e>>>8&255},Fe=(t,e,r)=>{t.bi_valid>yc-r?(t.bi_buf|=e<<t.bi_valid&65535,Us(t,t.bi_buf),t.bi_buf=e>>yc-t.bi_valid,t.bi_valid+=r-yc):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=r)},gt=(t,e,r)=>{Fe(t,r[e*2],r[e*2+1])},mh=(t,e)=>{let r=0;do r|=t&1,t>>>=1,r<<=1;while(--e>0);return r>>>1},y1=t=>{t.bi_valid===16?(Us(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=t.bi_buf&255,t.bi_buf>>=8,t.bi_valid-=8)},b1=(t,e)=>{let r=e.dyn_tree,n=e.max_code,i=e.stat_desc.static_tree,s=e.stat_desc.has_stree,a=e.stat_desc.extra_bits,o=e.stat_desc.extra_base,u=e.stat_desc.max_length,l,c,f,d,h,m,g=0;for(d=0;d<=hn;d++)t.bl_count[d]=0;for(r[t.heap[t.heap_max]*2+1]=0,l=t.heap_max+1;l<sh;l++)c=t.heap[l],d=r[r[c*2+1]*2+1]+1,d>u&&(d=u,g++),r[c*2+1]=d,!(c>n)&&(t.bl_count[d]++,h=0,c>=o&&(h=a[c-o]),m=r[c*2],t.opt_len+=m*(d+h),s&&(t.static_len+=m*(i[c*2+1]+h)));if(g!==0){do{for(d=u-1;t.bl_count[d]===0;)d--;t.bl_count[d]--,t.bl_count[d+1]+=2,t.bl_count[u]--,g-=2}while(g>0);for(d=u;d!==0;d--)for(c=t.bl_count[d];c!==0;)f=t.heap[--l],!(f>n)&&(r[f*2+1]!==d&&(t.opt_len+=(d-r[f*2+1])*r[f*2],r[f*2+1]=d),c--)}},ph=(t,e,r)=>{let n=new Array(hn+1),i=0,s,a;for(s=1;s<=hn;s++)i=i+r[s-1]<<1,n[s]=i;for(a=0;a<=e;a++){let o=t[a*2+1];o!==0&&(t[a*2]=mh(n[o]++,o))}},x1=()=>{let t,e,r,n,i,s=new Array(hn+1);for(r=0,n=0;n<Uc-1;n++)for(Gc[n]=r,t=0;t<1<<Pc[n];t++)Ns[r++]=n;for(Ns[r-1]=n,i=0,n=0;n<16;n++)for(Io[n]=i,t=0;t<1<<Po[n];t++)zs[i++]=n;for(i>>=7;n<ci;n++)for(Io[n]=i<<7,t=0;t<1<<Po[n]-7;t++)zs[256+i++]=n;for(e=0;e<=hn;e++)s[e]=0;for(t=0;t<=143;)Ht[t*2+1]=8,t++,s[8]++;for(;t<=255;)Ht[t*2+1]=9,t++,s[9]++;for(;t<=279;)Ht[t*2+1]=7,t++,s[7]++;for(;t<=287;)Ht[t*2+1]=8,t++,s[8]++;for(ph(Ht,Os+1,s),t=0;t<ci;t++)Fs[t*2+1]=5,Fs[t*2]=mh(t,5);uh=new bc(Ht,Pc,Xs+1,Os,hn),dh=new bc(Fs,Po,0,ci,hn),fh=new bc(new Array(0),p1,0,Hc,m1)},gh=t=>{let e;for(e=0;e<Os;e++)t.dyn_ltree[e*2]=0;for(e=0;e<ci;e++)t.dyn_dtree[e*2]=0;for(e=0;e<Hc;e++)t.bl_tree[e*2]=0;t.dyn_ltree[Vc*2]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},yh=t=>{t.bi_valid>8?Us(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},vf=(t,e,r,n)=>{let i=e*2,s=r*2;return t[i]<t[s]||t[i]===t[s]&&n[e]<=n[r]},vc=(t,e,r)=>{let n=t.heap[r],i=r<<1;for(;i<=t.heap_len&&(i<t.heap_len&&vf(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!vf(e,n,t.heap[i],t.depth));)t.heap[r]=t.heap[i],r=i,i<<=1;t.heap[r]=n},_f=(t,e,r)=>{let n,i,s=0,a,o;if(t.sym_next!==0)do n=t.pending_buf[t.sym_buf+s++]&255,n+=(t.pending_buf[t.sym_buf+s++]&255)<<8,i=t.pending_buf[t.sym_buf+s++],n===0?gt(t,i,e):(a=Ns[i],gt(t,a+Xs+1,e),o=Pc[a],o!==0&&(i-=Gc[a],Fe(t,i,o)),n--,a=hh(n),gt(t,a,r),o=Po[a],o!==0&&(n-=Io[a],Fe(t,n,o)));while(s<t.sym_next);gt(t,Vc,e)},Ic=(t,e)=>{let r=e.dyn_tree,n=e.stat_desc.static_tree,i=e.stat_desc.has_stree,s=e.stat_desc.elems,a,o,u=-1,l;for(t.heap_len=0,t.heap_max=sh,a=0;a<s;a++)r[a*2]!==0?(t.heap[++t.heap_len]=u=a,t.depth[a]=0):r[a*2+1]=0;for(;t.heap_len<2;)l=t.heap[++t.heap_len]=u<2?++u:0,r[l*2]=1,t.depth[l]=0,t.opt_len--,i&&(t.static_len-=n[l*2+1]);for(e.max_code=u,a=t.heap_len>>1;a>=1;a--)vc(t,r,a);l=s;do a=t.heap[1],t.heap[1]=t.heap[t.heap_len--],vc(t,r,1),o=t.heap[1],t.heap[--t.heap_max]=a,t.heap[--t.heap_max]=o,r[l*2]=r[a*2]+r[o*2],t.depth[l]=(t.depth[a]>=t.depth[o]?t.depth[a]:t.depth[o])+1,r[a*2+1]=r[o*2+1]=l,t.heap[1]=l++,vc(t,r,1);while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],b1(t,e),ph(r,u,t.bl_count)},wf=(t,e,r)=>{let n,i=-1,s,a=e[1],o=0,u=7,l=4;for(a===0&&(u=138,l=3),e[(r+1)*2+1]=65535,n=0;n<=r;n++)s=a,a=e[(n+1)*2+1],!(++o<u&&s===a)&&(o<l?t.bl_tree[s*2]+=o:s!==0?(s!==i&&t.bl_tree[s*2]++,t.bl_tree[ah*2]++):o<=10?t.bl_tree[oh*2]++:t.bl_tree[lh*2]++,o=0,i=s,a===0?(u=138,l=3):s===a?(u=6,l=3):(u=7,l=4))},Sf=(t,e,r)=>{let n,i=-1,s,a=e[1],o=0,u=7,l=4;for(a===0&&(u=138,l=3),n=0;n<=r;n++)if(s=a,a=e[(n+1)*2+1],!(++o<u&&s===a)){if(o<l)do gt(t,s,t.bl_tree);while(--o!==0);else s!==0?(s!==i&&(gt(t,s,t.bl_tree),o--),gt(t,ah,t.bl_tree),Fe(t,o-3,2)):o<=10?(gt(t,oh,t.bl_tree),Fe(t,o-3,3)):(gt(t,lh,t.bl_tree),Fe(t,o-11,7));o=0,i=s,a===0?(u=138,l=3):s===a?(u=6,l=3):(u=7,l=4)}},v1=t=>{let e;for(wf(t,t.dyn_ltree,t.l_desc.max_code),wf(t,t.dyn_dtree,t.d_desc.max_code),Ic(t,t.bl_desc),e=Hc-1;e>=3&&t.bl_tree[ch[e]*2+1]===0;e--);return t.opt_len+=3*(e+1)+5+5+4,e},_1=(t,e,r,n)=>{let i;for(Fe(t,e-257,5),Fe(t,r-1,5),Fe(t,n-4,4),i=0;i<n;i++)Fe(t,t.bl_tree[ch[i]*2+1],3);Sf(t,t.dyn_ltree,e-1),Sf(t,t.dyn_dtree,r-1)},w1=t=>{let e=4093624447,r;for(r=0;r<=31;r++,e>>>=1)if(e&1&&t.dyn_ltree[r*2]!==0)return 0;if(t.dyn_ltree[18]!==0||t.dyn_ltree[20]!==0||t.dyn_ltree[26]!==0)return 1;for(r=32;r<Xs;r++)if(t.dyn_ltree[r*2]!==0)return 1;return 0},Af=!1,S1=t=>{Af||(x1(),Af=!0),t.l_desc=new xc(t.dyn_ltree,uh),t.d_desc=new xc(t.dyn_dtree,dh),t.bl_desc=new xc(t.bl_tree,fh),t.bi_buf=0,t.bi_valid=0,gh(t)},bh=(t,e,r,n)=>{Fe(t,(u1<<1)+(n?1:0),3),yh(t),Us(t,r),Us(t,~r),r&&t.pending_buf.set(t.window.subarray(e,e+r),t.pending),t.pending+=r},A1=t=>{Fe(t,ih<<1,3),gt(t,Vc,Ht),y1(t)},M1=(t,e,r,n)=>{let i,s,a=0;t.level>0?(t.strm.data_type===2&&(t.strm.data_type=w1(t)),Ic(t,t.l_desc),Ic(t,t.d_desc),a=v1(t),i=t.opt_len+3+7>>>3,s=t.static_len+3+7>>>3,s<=i&&(i=s)):i=s=r+5,r+4<=i&&e!==-1?bh(t,e,r,n):t.strategy===4||s===i?(Fe(t,(ih<<1)+(n?1:0),3),_f(t,Ht,Fs)):(Fe(t,(d1<<1)+(n?1:0),3),_1(t,t.l_desc.max_code+1,t.d_desc.max_code+1,a+1),_f(t,t.dyn_ltree,t.dyn_dtree)),gh(t),n&&yh(t)},E1=(t,e,r)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=r,e===0?t.dyn_ltree[r*2]++:(t.matches++,e--,t.dyn_ltree[(Ns[r]+Xs+1)*2]++,t.dyn_dtree[hh(e)*2]++),t.sym_next===t.sym_end),L1=S1,T1=bh,C1=M1,k1=E1,P1=A1,I1={_tr_init:L1,_tr_stored_block:T1,_tr_flush_block:C1,_tr_tally:k1,_tr_align:P1},R1=(t,e,r,n)=>{let i=t&65535|0,s=t>>>16&65535|0,a=0;for(;r!==0;){a=r>2e3?2e3:r,r-=a;do i=i+e[n++]|0,s=s+i|0;while(--a);i%=65521,s%=65521}return i|s<<16|0},Hs=R1,F1=()=>{let t,e=[];for(var r=0;r<256;r++){t=r;for(var n=0;n<8;n++)t=t&1?3988292384^t>>>1:t>>>1;e[r]=t}return e},B1=new Uint32Array(F1()),D1=(t,e,r,n)=>{let i=B1,s=n+r;t^=-1;for(let a=n;a<s;a++)t=t>>>8^i[(t^e[a])&255];return t^-1},me=D1,gn={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},xn={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8},{_tr_init:O1,_tr_stored_block:Rc,_tr_flush_block:z1,_tr_tally:yr,_tr_align:N1}=I1,{Z_NO_FLUSH:br,Z_PARTIAL_FLUSH:U1,Z_FULL_FLUSH:H1,Z_FINISH:Je,Z_BLOCK:Mf,Z_OK:ye,Z_STREAM_END:Ef,Z_STREAM_ERROR:yt,Z_DATA_ERROR:V1,Z_BUF_ERROR:_c,Z_DEFAULT_COMPRESSION:G1,Z_FILTERED:W1,Z_HUFFMAN_ONLY:Eo,Z_RLE:X1,Z_FIXED:K1,Z_DEFAULT_STRATEGY:$1,Z_UNKNOWN:Z1,Z_DEFLATED:Bo}=xn,Y1=9,q1=15,j1=8,Q1=29,J1=256,Fc=J1+1+Q1,ey=30,ty=19,ry=2*Fc+1,ny=15,W=3,gr=258,bt=gr+W+1,iy=32,ui=42,Wc=57,Bc=69,Dc=73,Oc=91,zc=103,mn=113,Is=666,Pe=1,hi=2,yn=3,mi=4,sy=3,pn=(t,e)=>(t.msg=gn[e],e),Lf=t=>t*2-(t>4?9:0),pr=t=>{let e=t.length;for(;--e>=0;)t[e]=0},ay=t=>{let e,r,n,i=t.w_size;e=t.hash_size,n=e;do r=t.head[--n],t.head[n]=r>=i?r-i:0;while(--e);e=i,n=e;do r=t.prev[--n],t.prev[n]=r>=i?r-i:0;while(--e)},oy=(t,e,r)=>(e<<t.hash_shift^r)&t.hash_mask,xr=oy,Ue=t=>{let e=t.state,r=e.pending;r>t.avail_out&&(r=t.avail_out),r!==0&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+r),t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,e.pending===0&&(e.pending_out=0))},He=(t,e)=>{z1(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,Ue(t.strm)},Z=(t,e)=>{t.pending_buf[t.pending++]=e},Ps=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=e&255},Nc=(t,e,r,n)=>{let i=t.avail_in;return i>n&&(i=n),i===0?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),r),t.state.wrap===1?t.adler=Hs(t.adler,e,i,r):t.state.wrap===2&&(t.adler=me(t.adler,e,i,r)),t.next_in+=i,t.total_in+=i,i)},xh=(t,e)=>{let r=t.max_chain_length,n=t.strstart,i,s,a=t.prev_length,o=t.nice_match,u=t.strstart>t.w_size-bt?t.strstart-(t.w_size-bt):0,l=t.window,c=t.w_mask,f=t.prev,d=t.strstart+gr,h=l[n+a-1],m=l[n+a];t.prev_length>=t.good_match&&(r>>=2),o>t.lookahead&&(o=t.lookahead);do if(i=e,!(l[i+a]!==m||l[i+a-1]!==h||l[i]!==l[n]||l[++i]!==l[n+1])){n+=2,i++;do;while(l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&n<d);if(s=gr-(d-n),n=d-gr,s>a){if(t.match_start=e,a=s,s>=o)break;h=l[n+a-1],m=l[n+a]}}while((e=f[e&c])>u&&--r!==0);return a<=t.lookahead?a:t.lookahead},di=t=>{let e=t.w_size,r,n,i;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-bt)&&(t.window.set(t.window.subarray(e,e+e-n),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),ay(t),n+=e),t.strm.avail_in===0)break;if(r=Nc(t.strm,t.window,t.strstart+t.lookahead,n),t.lookahead+=r,t.lookahead+t.insert>=W)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=xr(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=xr(t,t.ins_h,t.window[i+W-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<W)););}while(t.lookahead<bt&&t.strm.avail_in!==0)},vh=(t,e)=>{let r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n,i,s,a=0,o=t.strm.avail_in;do{if(n=65535,s=t.bi_valid+42>>3,t.strm.avail_out<s||(s=t.strm.avail_out-s,i=t.strstart-t.block_start,n>i+t.strm.avail_in&&(n=i+t.strm.avail_in),n>s&&(n=s),n<r&&(n===0&&e!==Je||e===br||n!==i+t.strm.avail_in)))break;a=e===Je&&n===i+t.strm.avail_in?1:0,Rc(t,0,0,a),t.pending_buf[t.pending-4]=n,t.pending_buf[t.pending-3]=n>>8,t.pending_buf[t.pending-2]=~n,t.pending_buf[t.pending-1]=~n>>8,Ue(t.strm),i&&(i>n&&(i=n),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+i),t.strm.next_out),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i,t.block_start+=i,n-=i),n&&(Nc(t.strm,t.strm.output,t.strm.next_out,n),t.strm.next_out+=n,t.strm.avail_out-=n,t.strm.total_out+=n)}while(a===0);return o-=t.strm.avail_in,o&&(o>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=o&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-o,t.strm.next_in),t.strstart),t.strstart+=o,t.insert+=o>t.w_size-t.insert?t.w_size-t.insert:o),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),a?mi:e!==br&&e!==Je&&t.strm.avail_in===0&&t.strstart===t.block_start?hi:(s=t.window_size-t.strstart,t.strm.avail_in>s&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,s+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),s>t.strm.avail_in&&(s=t.strm.avail_in),s&&(Nc(t.strm,t.window,t.strstart,s),t.strstart+=s,t.insert+=s>t.w_size-t.insert?t.w_size-t.insert:s),t.high_water<t.strstart&&(t.high_water=t.strstart),s=t.bi_valid+42>>3,s=t.pending_buf_size-s>65535?65535:t.pending_buf_size-s,r=s>t.w_size?t.w_size:s,i=t.strstart-t.block_start,(i>=r||(i||e===Je)&&e!==br&&t.strm.avail_in===0&&i<=s)&&(n=i>s?s:i,a=e===Je&&t.strm.avail_in===0&&n===i?1:0,Rc(t,t.block_start,n,a),t.block_start+=n,Ue(t.strm)),a?yn:Pe)},wc=(t,e)=>{let r,n;for(;;){if(t.lookahead<bt){if(di(t),t.lookahead<bt&&e===br)return Pe;if(t.lookahead===0)break}if(r=0,t.lookahead>=W&&(t.ins_h=xr(t,t.ins_h,t.window[t.strstart+W-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),r!==0&&t.strstart-r<=t.w_size-bt&&(t.match_length=xh(t,r)),t.match_length>=W)if(n=yr(t,t.strstart-t.match_start,t.match_length-W),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=W){t.match_length--;do t.strstart++,t.ins_h=xr(t,t.ins_h,t.window[t.strstart+W-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart;while(--t.match_length!==0);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=xr(t,t.ins_h,t.window[t.strstart+1]);else n=yr(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(n&&(He(t,!1),t.strm.avail_out===0))return Pe}return t.insert=t.strstart<W-1?t.strstart:W-1,e===Je?(He(t,!0),t.strm.avail_out===0?yn:mi):t.sym_next&&(He(t,!1),t.strm.avail_out===0)?Pe:hi},oi=(t,e)=>{let r,n,i;for(;;){if(t.lookahead<bt){if(di(t),t.lookahead<bt&&e===br)return Pe;if(t.lookahead===0)break}if(r=0,t.lookahead>=W&&(t.ins_h=xr(t,t.ins_h,t.window[t.strstart+W-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=W-1,r!==0&&t.prev_length<t.max_lazy_match&&t.strstart-r<=t.w_size-bt&&(t.match_length=xh(t,r),t.match_length<=5&&(t.strategy===W1||t.match_length===W&&t.strstart-t.match_start>4096)&&(t.match_length=W-1)),t.prev_length>=W&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-W,n=yr(t,t.strstart-1-t.prev_match,t.prev_length-W),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=i&&(t.ins_h=xr(t,t.ins_h,t.window[t.strstart+W-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart);while(--t.prev_length!==0);if(t.match_available=0,t.match_length=W-1,t.strstart++,n&&(He(t,!1),t.strm.avail_out===0))return Pe}else if(t.match_available){if(n=yr(t,0,t.window[t.strstart-1]),n&&He(t,!1),t.strstart++,t.lookahead--,t.strm.avail_out===0)return Pe}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(n=yr(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<W-1?t.strstart:W-1,e===Je?(He(t,!0),t.strm.avail_out===0?yn:mi):t.sym_next&&(He(t,!1),t.strm.avail_out===0)?Pe:hi},ly=(t,e)=>{let r,n,i,s,a=t.window;for(;;){if(t.lookahead<=gr){if(di(t),t.lookahead<=gr&&e===br)return Pe;if(t.lookahead===0)break}if(t.match_length=0,t.lookahead>=W&&t.strstart>0&&(i=t.strstart-1,n=a[i],n===a[++i]&&n===a[++i]&&n===a[++i])){s=t.strstart+gr;do;while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);t.match_length=gr-(s-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=W?(r=yr(t,1,t.match_length-W),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=yr(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(He(t,!1),t.strm.avail_out===0))return Pe}return t.insert=0,e===Je?(He(t,!0),t.strm.avail_out===0?yn:mi):t.sym_next&&(He(t,!1),t.strm.avail_out===0)?Pe:hi},cy=(t,e)=>{let r;for(;;){if(t.lookahead===0&&(di(t),t.lookahead===0)){if(e===br)return Pe;break}if(t.match_length=0,r=yr(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(He(t,!1),t.strm.avail_out===0))return Pe}return t.insert=0,e===Je?(He(t,!0),t.strm.avail_out===0?yn:mi):t.sym_next&&(He(t,!1),t.strm.avail_out===0)?Pe:hi};function pt(t,e,r,n,i){this.good_length=t,this.max_lazy=e,this.nice_length=r,this.max_chain=n,this.func=i}var Rs=[new pt(0,0,0,0,vh),new pt(4,4,8,4,wc),new pt(4,5,16,8,wc),new pt(4,6,32,32,wc),new pt(4,4,16,16,oi),new pt(8,16,32,32,oi),new pt(8,16,128,128,oi),new pt(8,32,128,256,oi),new pt(32,128,258,1024,oi),new pt(32,258,258,4096,oi)],uy=t=>{t.window_size=2*t.w_size,pr(t.head),t.max_lazy_match=Rs[t.level].max_lazy,t.good_match=Rs[t.level].good_length,t.nice_match=Rs[t.level].nice_length,t.max_chain_length=Rs[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=W-1,t.match_available=0,t.ins_h=0};function dy(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Bo,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(ry*2),this.dyn_dtree=new Uint16Array((2*ey+1)*2),this.bl_tree=new Uint16Array((2*ty+1)*2),pr(this.dyn_ltree),pr(this.dyn_dtree),pr(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(ny+1),this.heap=new Uint16Array(2*Fc+1),pr(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(2*Fc+1),pr(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}var Ks=t=>{if(!t)return 1;let e=t.state;return!e||e.strm!==t||e.status!==ui&&e.status!==Wc&&e.status!==Bc&&e.status!==Dc&&e.status!==Oc&&e.status!==zc&&e.status!==mn&&e.status!==Is?1:0},_h=t=>{if(Ks(t))return pn(t,yt);t.total_in=t.total_out=0,t.data_type=Z1;let e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap===2?Wc:e.wrap?ui:mn,t.adler=e.wrap===2?0:1,e.last_flush=-2,O1(e),ye},wh=t=>{let e=_h(t);return e===ye&&uy(t.state),e},fy=(t,e)=>Ks(t)||t.state.wrap!==2?yt:(t.state.gzhead=e,ye),Sh=(t,e,r,n,i,s)=>{if(!t)return yt;let a=1;if(e===G1&&(e=6),n<0?(a=0,n=-n):n>15&&(a=2,n-=16),i<1||i>Y1||r!==Bo||n<8||n>15||e<0||e>9||s<0||s>K1||n===8&&a!==1)return pn(t,yt);n===8&&(n=9);let o=new dy;return t.state=o,o.strm=t,o.status=ui,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+W-1)/W),o.window=new Uint8Array(o.w_size*2),o.head=new Uint16Array(o.hash_size),o.prev=new Uint16Array(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=o.lit_bufsize*4,o.pending_buf=new Uint8Array(o.pending_buf_size),o.sym_buf=o.lit_bufsize,o.sym_end=(o.lit_bufsize-1)*3,o.level=e,o.strategy=s,o.method=r,wh(t)},hy=(t,e)=>Sh(t,e,Bo,q1,j1,$1),my=(t,e)=>{if(Ks(t)||e>Mf||e<0)return t?pn(t,yt):yt;let r=t.state;if(!t.output||t.avail_in!==0&&!t.input||r.status===Is&&e!==Je)return pn(t,t.avail_out===0?_c:yt);let n=r.last_flush;if(r.last_flush=e,r.pending!==0){if(Ue(t),t.avail_out===0)return r.last_flush=-1,ye}else if(t.avail_in===0&&Lf(e)<=Lf(n)&&e!==Je)return pn(t,_c);if(r.status===Is&&t.avail_in!==0)return pn(t,_c);if(r.status===ui&&r.wrap===0&&(r.status=mn),r.status===ui){let i=Bo+(r.w_bits-8<<4)<<8,s=-1;if(r.strategy>=Eo||r.level<2?s=0:r.level<6?s=1:r.level===6?s=2:s=3,i|=s<<6,r.strstart!==0&&(i|=iy),i+=31-i%31,Ps(r,i),r.strstart!==0&&(Ps(r,t.adler>>>16),Ps(r,t.adler&65535)),t.adler=1,r.status=mn,Ue(t),r.pending!==0)return r.last_flush=-1,ye}if(r.status===Wc){if(t.adler=0,Z(r,31),Z(r,139),Z(r,8),r.gzhead)Z(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),Z(r,r.gzhead.time&255),Z(r,r.gzhead.time>>8&255),Z(r,r.gzhead.time>>16&255),Z(r,r.gzhead.time>>24&255),Z(r,r.level===9?2:r.strategy>=Eo||r.level<2?4:0),Z(r,r.gzhead.os&255),r.gzhead.extra&&r.gzhead.extra.length&&(Z(r,r.gzhead.extra.length&255),Z(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(t.adler=me(t.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=Bc;else if(Z(r,0),Z(r,0),Z(r,0),Z(r,0),Z(r,0),Z(r,r.level===9?2:r.strategy>=Eo||r.level<2?4:0),Z(r,sy),r.status=mn,Ue(t),r.pending!==0)return r.last_flush=-1,ye}if(r.status===Bc){if(r.gzhead.extra){let i=r.pending,s=(r.gzhead.extra.length&65535)-r.gzindex;for(;r.pending+s>r.pending_buf_size;){let o=r.pending_buf_size-r.pending;if(r.pending_buf.set(r.gzhead.extra.subarray(r.gzindex,r.gzindex+o),r.pending),r.pending=r.pending_buf_size,r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i)),r.gzindex+=o,Ue(t),r.pending!==0)return r.last_flush=-1,ye;i=0,s-=o}let a=new Uint8Array(r.gzhead.extra);r.pending_buf.set(a.subarray(r.gzindex,r.gzindex+s),r.pending),r.pending+=s,r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i)),r.gzindex=0}r.status=Dc}if(r.status===Dc){if(r.gzhead.name){let i=r.pending,s;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i)),Ue(t),r.pending!==0)return r.last_flush=-1,ye;i=0}r.gzindex<r.gzhead.name.length?s=r.gzhead.name.charCodeAt(r.gzindex++)&255:s=0,Z(r,s)}while(s!==0);r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i)),r.gzindex=0}r.status=Oc}if(r.status===Oc){if(r.gzhead.comment){let i=r.pending,s;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i)),Ue(t),r.pending!==0)return r.last_flush=-1,ye;i=0}r.gzindex<r.gzhead.comment.length?s=r.gzhead.comment.charCodeAt(r.gzindex++)&255:s=0,Z(r,s)}while(s!==0);r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i))}r.status=zc}if(r.status===zc){if(r.gzhead.hcrc){if(r.pending+2>r.pending_buf_size&&(Ue(t),r.pending!==0))return r.last_flush=-1,ye;Z(r,t.adler&255),Z(r,t.adler>>8&255),t.adler=0}if(r.status=mn,Ue(t),r.pending!==0)return r.last_flush=-1,ye}if(t.avail_in!==0||r.lookahead!==0||e!==br&&r.status!==Is){let i=r.level===0?vh(r,e):r.strategy===Eo?cy(r,e):r.strategy===X1?ly(r,e):Rs[r.level].func(r,e);if((i===yn||i===mi)&&(r.status=Is),i===Pe||i===yn)return t.avail_out===0&&(r.last_flush=-1),ye;if(i===hi&&(e===U1?N1(r):e!==Mf&&(Rc(r,0,0,!1),e===H1&&(pr(r.head),r.lookahead===0&&(r.strstart=0,r.block_start=0,r.insert=0))),Ue(t),t.avail_out===0))return r.last_flush=-1,ye}return e!==Je?ye:r.wrap<=0?Ef:(r.wrap===2?(Z(r,t.adler&255),Z(r,t.adler>>8&255),Z(r,t.adler>>16&255),Z(r,t.adler>>24&255),Z(r,t.total_in&255),Z(r,t.total_in>>8&255),Z(r,t.total_in>>16&255),Z(r,t.total_in>>24&255)):(Ps(r,t.adler>>>16),Ps(r,t.adler&65535)),Ue(t),r.wrap>0&&(r.wrap=-r.wrap),r.pending!==0?ye:Ef)},py=t=>{if(Ks(t))return yt;let e=t.state.status;return t.state=null,e===mn?pn(t,V1):ye},gy=(t,e)=>{let r=e.length;if(Ks(t))return yt;let n=t.state,i=n.wrap;if(i===2||i===1&&n.status!==ui||n.lookahead)return yt;if(i===1&&(t.adler=Hs(t.adler,e,r,0)),n.wrap=0,r>=n.w_size){i===0&&(pr(n.head),n.strstart=0,n.block_start=0,n.insert=0);let u=new Uint8Array(n.w_size);u.set(e.subarray(r-n.w_size,r),0),e=u,r=n.w_size}let s=t.avail_in,a=t.next_in,o=t.input;for(t.avail_in=r,t.next_in=0,t.input=e,di(n);n.lookahead>=W;){let u=n.strstart,l=n.lookahead-(W-1);do n.ins_h=xr(n,n.ins_h,n.window[u+W-1]),n.prev[u&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=u,u++;while(--l);n.strstart=u,n.lookahead=W-1,di(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=W-1,n.match_available=0,t.next_in=a,t.input=o,t.avail_in=s,n.wrap=i,ye},yy=hy,by=Sh,xy=wh,vy=_h,_y=fy,wy=my,Sy=py,Ay=gy,My="pako deflate (from Nodeca project)",Bs={deflateInit:yy,deflateInit2:by,deflateReset:xy,deflateResetKeep:vy,deflateSetHeader:_y,deflate:wy,deflateEnd:Sy,deflateSetDictionary:Ay,deflateInfo:My},Ey=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Ly=function(t){let e=Array.prototype.slice.call(arguments,1);for(;e.length;){let r=e.shift();if(r){if(typeof r!="object")throw new TypeError(r+"must be non-object");for(let n in r)Ey(r,n)&&(t[n]=r[n])}}return t},Ty=t=>{let e=0;for(let n=0,i=t.length;n<i;n++)e+=t[n].length;let r=new Uint8Array(e);for(let n=0,i=0,s=t.length;n<s;n++){let a=t[n];r.set(a,i),i+=a.length}return r},Do={assign:Ly,flattenChunks:Ty},Ah=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{Ah=!1}var Vs=new Uint8Array(256);for(let t=0;t<256;t++)Vs[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;Vs[254]=Vs[254]=1;var Cy=t=>{if(typeof TextEncoder=="function"&&TextEncoder.prototype.encode)return new TextEncoder().encode(t);let e,r,n,i,s,a=t.length,o=0;for(i=0;i<a;i++)r=t.charCodeAt(i),(r&64512)===55296&&i+1<a&&(n=t.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),o+=r<128?1:r<2048?2:r<65536?3:4;for(e=new Uint8Array(o),s=0,i=0;s<o;i++)r=t.charCodeAt(i),(r&64512)===55296&&i+1<a&&(n=t.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),r<128?e[s++]=r:r<2048?(e[s++]=192|r>>>6,e[s++]=128|r&63):r<65536?(e[s++]=224|r>>>12,e[s++]=128|r>>>6&63,e[s++]=128|r&63):(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63,e[s++]=128|r>>>6&63,e[s++]=128|r&63);return e},ky=(t,e)=>{if(e<65534&&t.subarray&&Ah)return String.fromCharCode.apply(null,t.length===e?t:t.subarray(0,e));let r="";for(let n=0;n<e;n++)r+=String.fromCharCode(t[n]);return r},Py=(t,e)=>{let r=e||t.length;if(typeof TextDecoder=="function"&&TextDecoder.prototype.decode)return new TextDecoder().decode(t.subarray(0,e));let n,i,s=new Array(r*2);for(i=0,n=0;n<r;){let a=t[n++];if(a<128){s[i++]=a;continue}let o=Vs[a];if(o>4){s[i++]=65533,n+=o-1;continue}for(a&=o===2?31:o===3?15:7;o>1&&n<r;)a=a<<6|t[n++]&63,o--;if(o>1){s[i++]=65533;continue}a<65536?s[i++]=a:(a-=65536,s[i++]=55296|a>>10&1023,s[i++]=56320|a&1023)}return ky(s,i)},Iy=(t,e)=>{e=e||t.length,e>t.length&&(e=t.length);let r=e-1;for(;r>=0&&(t[r]&192)===128;)r--;return r<0||r===0?e:r+Vs[t[r]]>e?r:e},Gs={string2buf:Cy,buf2string:Py,utf8border:Iy};function Ry(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}var Mh=Ry,Eh=Object.prototype.toString,{Z_NO_FLUSH:Fy,Z_SYNC_FLUSH:By,Z_FULL_FLUSH:Dy,Z_FINISH:Oy,Z_OK:Ro,Z_STREAM_END:zy,Z_DEFAULT_COMPRESSION:Ny,Z_DEFAULT_STRATEGY:Uy,Z_DEFLATED:Hy}=xn;function $s(t){this.options=Do.assign({level:Ny,method:Hy,chunkSize:16384,windowBits:15,memLevel:8,strategy:Uy},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Mh,this.strm.avail_out=0;let r=Bs.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(r!==Ro)throw new Error(gn[r]);if(e.header&&Bs.deflateSetHeader(this.strm,e.header),e.dictionary){let n;if(typeof e.dictionary=="string"?n=Gs.string2buf(e.dictionary):Eh.call(e.dictionary)==="[object ArrayBuffer]"?n=new Uint8Array(e.dictionary):n=e.dictionary,r=Bs.deflateSetDictionary(this.strm,n),r!==Ro)throw new Error(gn[r]);this._dict_set=!0}}$s.prototype.push=function(t,e){let r=this.strm,n=this.options.chunkSize,i,s;if(this.ended)return!1;for(e===~~e?s=e:s=e===!0?Oy:Fy,typeof t=="string"?r.input=Gs.string2buf(t):Eh.call(t)==="[object ArrayBuffer]"?r.input=new Uint8Array(t):r.input=t,r.next_in=0,r.avail_in=r.input.length;;){if(r.avail_out===0&&(r.output=new Uint8Array(n),r.next_out=0,r.avail_out=n),(s===By||s===Dy)&&r.avail_out<=6){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(i=Bs.deflate(r,s),i===zy)return r.next_out>0&&this.onData(r.output.subarray(0,r.next_out)),i=Bs.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===Ro;if(r.avail_out===0){this.onData(r.output);continue}if(s>0&&r.next_out>0){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(r.avail_in===0)break}return!0};$s.prototype.onData=function(t){this.chunks.push(t)};$s.prototype.onEnd=function(t){t===Ro&&(this.result=Do.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};function Xc(t,e){let r=new $s(e);if(r.push(t,!0),r.err)throw r.msg||gn[r.err];return r.result}function Vy(t,e){return e=e||{},e.raw=!0,Xc(t,e)}function Gy(t,e){return e=e||{},e.gzip=!0,Xc(t,e)}var Wy=$s,Xy=Xc,Ky=Vy,$y=Gy,Zy=xn,Yy={Deflate:Wy,deflate:Xy,deflateRaw:Ky,gzip:$y,constants:Zy},Lo=16209,qy=16191,jy=function(e,r){let n,i,s,a,o,u,l,c,f,d,h,m,g,p,y,v,x,b,_,S,w,L,C,A,k=e.state;n=e.next_in,C=e.input,i=n+(e.avail_in-5),s=e.next_out,A=e.output,a=s-(r-e.avail_out),o=s+(e.avail_out-257),u=k.dmax,l=k.wsize,c=k.whave,f=k.wnext,d=k.window,h=k.hold,m=k.bits,g=k.lencode,p=k.distcode,y=(1<<k.lenbits)-1,v=(1<<k.distbits)-1;e:do{m<15&&(h+=C[n++]<<m,m+=8,h+=C[n++]<<m,m+=8),x=g[h&y];t:for(;;){if(b=x>>>24,h>>>=b,m-=b,b=x>>>16&255,b===0)A[s++]=x&65535;else if(b&16){_=x&65535,b&=15,b&&(m<b&&(h+=C[n++]<<m,m+=8),_+=h&(1<<b)-1,h>>>=b,m-=b),m<15&&(h+=C[n++]<<m,m+=8,h+=C[n++]<<m,m+=8),x=p[h&v];r:for(;;){if(b=x>>>24,h>>>=b,m-=b,b=x>>>16&255,b&16){if(S=x&65535,b&=15,m<b&&(h+=C[n++]<<m,m+=8,m<b&&(h+=C[n++]<<m,m+=8)),S+=h&(1<<b)-1,S>u){e.msg="invalid distance too far back",k.mode=Lo;break e}if(h>>>=b,m-=b,b=s-a,S>b){if(b=S-b,b>c&&k.sane){e.msg="invalid distance too far back",k.mode=Lo;break e}if(w=0,L=d,f===0){if(w+=l-b,b<_){_-=b;do A[s++]=d[w++];while(--b);w=s-S,L=A}}else if(f<b){if(w+=l+f-b,b-=f,b<_){_-=b;do A[s++]=d[w++];while(--b);if(w=0,f<_){b=f,_-=b;do A[s++]=d[w++];while(--b);w=s-S,L=A}}}else if(w+=f-b,b<_){_-=b;do A[s++]=d[w++];while(--b);w=s-S,L=A}for(;_>2;)A[s++]=L[w++],A[s++]=L[w++],A[s++]=L[w++],_-=3;_&&(A[s++]=L[w++],_>1&&(A[s++]=L[w++]))}else{w=s-S;do A[s++]=A[w++],A[s++]=A[w++],A[s++]=A[w++],_-=3;while(_>2);_&&(A[s++]=A[w++],_>1&&(A[s++]=A[w++]))}}else if((b&64)===0){x=p[(x&65535)+(h&(1<<b)-1)];continue r}else{e.msg="invalid distance code",k.mode=Lo;break e}break}}else if((b&64)===0){x=g[(x&65535)+(h&(1<<b)-1)];continue t}else if(b&32){k.mode=qy;break e}else{e.msg="invalid literal/length code",k.mode=Lo;break e}break}}while(n<i&&s<o);_=m>>3,n-=_,m-=_<<3,h&=(1<<m)-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?5+(i-n):5-(n-i),e.avail_out=s<o?257+(o-s):257-(s-o),k.hold=h,k.bits=m},li=15,Tf=852,Cf=592,kf=0,Sc=1,Pf=2,Qy=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),Jy=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),eb=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),tb=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]),rb=(t,e,r,n,i,s,a,o)=>{let u=o.bits,l=0,c=0,f=0,d=0,h=0,m=0,g=0,p=0,y=0,v=0,x,b,_,S,w,L=null,C,A=new Uint16Array(li+1),k=new Uint16Array(li+1),R=null,B,P,V;for(l=0;l<=li;l++)A[l]=0;for(c=0;c<n;c++)A[e[r+c]]++;for(h=u,d=li;d>=1&&A[d]===0;d--);if(h>d&&(h=d),d===0)return i[s++]=1<<24|64<<16|0,i[s++]=1<<24|64<<16|0,o.bits=1,0;for(f=1;f<d&&A[f]===0;f++);for(h<f&&(h=f),p=1,l=1;l<=li;l++)if(p<<=1,p-=A[l],p<0)return-1;if(p>0&&(t===kf||d!==1))return-1;for(k[1]=0,l=1;l<li;l++)k[l+1]=k[l]+A[l];for(c=0;c<n;c++)e[r+c]!==0&&(a[k[e[r+c]]++]=c);if(t===kf?(L=R=a,C=20):t===Sc?(L=Qy,R=Jy,C=257):(L=eb,R=tb,C=0),v=0,c=0,l=f,w=s,m=h,g=0,_=-1,y=1<<h,S=y-1,t===Sc&&y>Tf||t===Pf&&y>Cf)return 1;for(;;){B=l-g,a[c]+1<C?(P=0,V=a[c]):a[c]>=C?(P=R[a[c]-C],V=L[a[c]-C]):(P=96,V=0),x=1<<l-g,b=1<<m,f=b;do b-=x,i[w+(v>>g)+b]=B<<24|P<<16|V|0;while(b!==0);for(x=1<<l-1;v&x;)x>>=1;if(x!==0?(v&=x-1,v+=x):v=0,c++,--A[l]===0){if(l===d)break;l=e[r+a[c]]}if(l>h&&(v&S)!==_){for(g===0&&(g=h),w+=f,m=l-g,p=1<<m;m+g<d&&(p-=A[m+g],!(p<=0));)m++,p<<=1;if(y+=1<<m,t===Sc&&y>Tf||t===Pf&&y>Cf)return 1;_=v&S,i[_]=h<<24|m<<16|w-s|0}}return v!==0&&(i[w+v]=l-g<<24|64<<16|0),o.bits=h,0},Ds=rb,nb=0,Lh=1,Th=2,{Z_FINISH:If,Z_BLOCK:ib,Z_TREES:To,Z_OK:bn,Z_STREAM_END:sb,Z_NEED_DICT:ab,Z_STREAM_ERROR:et,Z_DATA_ERROR:Ch,Z_MEM_ERROR:kh,Z_BUF_ERROR:ob,Z_DEFLATED:Rf}=xn,Oo=16180,Ff=16181,Bf=16182,Df=16183,Of=16184,zf=16185,Nf=16186,Uf=16187,Hf=16188,Vf=16189,Fo=16190,Ut=16191,Ac=16192,Gf=16193,Mc=16194,Wf=16195,Xf=16196,Kf=16197,$f=16198,Co=16199,ko=16200,Zf=16201,Yf=16202,qf=16203,jf=16204,Qf=16205,Ec=16206,Jf=16207,eh=16208,ie=16209,Ph=16210,Ih=16211,lb=852,cb=592,ub=15,db=ub,th=t=>(t>>>24&255)+(t>>>8&65280)+((t&65280)<<8)+((t&255)<<24);function fb(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}var vn=t=>{if(!t)return 1;let e=t.state;return!e||e.strm!==t||e.mode<Oo||e.mode>Ih?1:0},Rh=t=>{if(vn(t))return et;let e=t.state;return t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=e.wrap&1),e.mode=Oo,e.last=0,e.havedict=0,e.flags=-1,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new Int32Array(lb),e.distcode=e.distdyn=new Int32Array(cb),e.sane=1,e.back=-1,bn},Fh=t=>{if(vn(t))return et;let e=t.state;return e.wsize=0,e.whave=0,e.wnext=0,Rh(t)},Bh=(t,e)=>{let r;if(vn(t))return et;let n=t.state;return e<0?(r=0,e=-e):(r=(e>>4)+5,e<48&&(e&=15)),e&&(e<8||e>15)?et:(n.window!==null&&n.wbits!==e&&(n.window=null),n.wrap=r,n.wbits=e,Fh(t))},Dh=(t,e)=>{if(!t)return et;let r=new fb;t.state=r,r.strm=t,r.window=null,r.mode=Oo;let n=Bh(t,e);return n!==bn&&(t.state=null),n},hb=t=>Dh(t,db),rh=!0,Lc,Tc,mb=t=>{if(rh){Lc=new Int32Array(512),Tc=new Int32Array(32);let e=0;for(;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(Ds(Lh,t.lens,0,288,Lc,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;Ds(Th,t.lens,0,32,Tc,0,t.work,{bits:5}),rh=!1}t.lencode=Lc,t.lenbits=9,t.distcode=Tc,t.distbits=5},Oh=(t,e,r,n)=>{let i,s=t.state;return s.window===null&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new Uint8Array(s.wsize)),n>=s.wsize?(s.window.set(e.subarray(r-s.wsize,r),0),s.wnext=0,s.whave=s.wsize):(i=s.wsize-s.wnext,i>n&&(i=n),s.window.set(e.subarray(r-n,r-n+i),s.wnext),n-=i,n?(s.window.set(e.subarray(r-n,r),0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0},pb=(t,e)=>{let r,n,i,s,a,o,u,l,c,f,d,h,m,g,p=0,y,v,x,b,_,S,w,L,C=new Uint8Array(4),A,k,R=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(vn(t)||!t.output||!t.input&&t.avail_in!==0)return et;r=t.state,r.mode===Ut&&(r.mode=Ac),a=t.next_out,i=t.output,u=t.avail_out,s=t.next_in,n=t.input,o=t.avail_in,l=r.hold,c=r.bits,f=o,d=u,L=bn;e:for(;;)switch(r.mode){case Oo:if(r.wrap===0){r.mode=Ac;break}for(;c<16;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(r.wrap&2&&l===35615){r.wbits===0&&(r.wbits=15),r.check=0,C[0]=l&255,C[1]=l>>>8&255,r.check=me(r.check,C,2,0),l=0,c=0,r.mode=Ff;break}if(r.head&&(r.head.done=!1),!(r.wrap&1)||(((l&255)<<8)+(l>>8))%31){t.msg="incorrect header check",r.mode=ie;break}if((l&15)!==Rf){t.msg="unknown compression method",r.mode=ie;break}if(l>>>=4,c-=4,w=(l&15)+8,r.wbits===0&&(r.wbits=w),w>15||w>r.wbits){t.msg="invalid window size",r.mode=ie;break}r.dmax=1<<r.wbits,r.flags=0,t.adler=r.check=1,r.mode=l&512?Vf:Ut,l=0,c=0;break;case Ff:for(;c<16;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(r.flags=l,(r.flags&255)!==Rf){t.msg="unknown compression method",r.mode=ie;break}if(r.flags&57344){t.msg="unknown header flags set",r.mode=ie;break}r.head&&(r.head.text=l>>8&1),r.flags&512&&r.wrap&4&&(C[0]=l&255,C[1]=l>>>8&255,r.check=me(r.check,C,2,0)),l=0,c=0,r.mode=Bf;case Bf:for(;c<32;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.head&&(r.head.time=l),r.flags&512&&r.wrap&4&&(C[0]=l&255,C[1]=l>>>8&255,C[2]=l>>>16&255,C[3]=l>>>24&255,r.check=me(r.check,C,4,0)),l=0,c=0,r.mode=Df;case Df:for(;c<16;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.head&&(r.head.xflags=l&255,r.head.os=l>>8),r.flags&512&&r.wrap&4&&(C[0]=l&255,C[1]=l>>>8&255,r.check=me(r.check,C,2,0)),l=0,c=0,r.mode=Of;case Of:if(r.flags&1024){for(;c<16;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.length=l,r.head&&(r.head.extra_len=l),r.flags&512&&r.wrap&4&&(C[0]=l&255,C[1]=l>>>8&255,r.check=me(r.check,C,2,0)),l=0,c=0}else r.head&&(r.head.extra=null);r.mode=zf;case zf:if(r.flags&1024&&(h=r.length,h>o&&(h=o),h&&(r.head&&(w=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Uint8Array(r.head.extra_len)),r.head.extra.set(n.subarray(s,s+h),w)),r.flags&512&&r.wrap&4&&(r.check=me(r.check,n,h,s)),o-=h,s+=h,r.length-=h),r.length))break e;r.length=0,r.mode=Nf;case Nf:if(r.flags&2048){if(o===0)break e;h=0;do w=n[s+h++],r.head&&w&&r.length<65536&&(r.head.name+=String.fromCharCode(w));while(w&&h<o);if(r.flags&512&&r.wrap&4&&(r.check=me(r.check,n,h,s)),o-=h,s+=h,w)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=Uf;case Uf:if(r.flags&4096){if(o===0)break e;h=0;do w=n[s+h++],r.head&&w&&r.length<65536&&(r.head.comment+=String.fromCharCode(w));while(w&&h<o);if(r.flags&512&&r.wrap&4&&(r.check=me(r.check,n,h,s)),o-=h,s+=h,w)break e}else r.head&&(r.head.comment=null);r.mode=Hf;case Hf:if(r.flags&512){for(;c<16;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(r.wrap&4&&l!==(r.check&65535)){t.msg="header crc mismatch",r.mode=ie;break}l=0,c=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=Ut;break;case Vf:for(;c<32;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}t.adler=r.check=th(l),l=0,c=0,r.mode=Fo;case Fo:if(r.havedict===0)return t.next_out=a,t.avail_out=u,t.next_in=s,t.avail_in=o,r.hold=l,r.bits=c,ab;t.adler=r.check=1,r.mode=Ut;case Ut:if(e===ib||e===To)break e;case Ac:if(r.last){l>>>=c&7,c-=c&7,r.mode=Ec;break}for(;c<3;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}switch(r.last=l&1,l>>>=1,c-=1,l&3){case 0:r.mode=Gf;break;case 1:if(mb(r),r.mode=Co,e===To){l>>>=2,c-=2;break e}break;case 2:r.mode=Xf;break;case 3:t.msg="invalid block type",r.mode=ie}l>>>=2,c-=2;break;case Gf:for(l>>>=c&7,c-=c&7;c<32;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if((l&65535)!==(l>>>16^65535)){t.msg="invalid stored block lengths",r.mode=ie;break}if(r.length=l&65535,l=0,c=0,r.mode=Mc,e===To)break e;case Mc:r.mode=Wf;case Wf:if(h=r.length,h){if(h>o&&(h=o),h>u&&(h=u),h===0)break e;i.set(n.subarray(s,s+h),a),o-=h,s+=h,u-=h,a+=h,r.length-=h;break}r.mode=Ut;break;case Xf:for(;c<14;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(r.nlen=(l&31)+257,l>>>=5,c-=5,r.ndist=(l&31)+1,l>>>=5,c-=5,r.ncode=(l&15)+4,l>>>=4,c-=4,r.nlen>286||r.ndist>30){t.msg="too many length or distance symbols",r.mode=ie;break}r.have=0,r.mode=Kf;case Kf:for(;r.have<r.ncode;){for(;c<3;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.lens[R[r.have++]]=l&7,l>>>=3,c-=3}for(;r.have<19;)r.lens[R[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,A={bits:r.lenbits},L=Ds(nb,r.lens,0,19,r.lencode,0,r.work,A),r.lenbits=A.bits,L){t.msg="invalid code lengths set",r.mode=ie;break}r.have=0,r.mode=$f;case $f:for(;r.have<r.nlen+r.ndist;){for(;p=r.lencode[l&(1<<r.lenbits)-1],y=p>>>24,v=p>>>16&255,x=p&65535,!(y<=c);){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(x<16)l>>>=y,c-=y,r.lens[r.have++]=x;else{if(x===16){for(k=y+2;c<k;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(l>>>=y,c-=y,r.have===0){t.msg="invalid bit length repeat",r.mode=ie;break}w=r.lens[r.have-1],h=3+(l&3),l>>>=2,c-=2}else if(x===17){for(k=y+3;c<k;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}l>>>=y,c-=y,w=0,h=3+(l&7),l>>>=3,c-=3}else{for(k=y+7;c<k;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}l>>>=y,c-=y,w=0,h=11+(l&127),l>>>=7,c-=7}if(r.have+h>r.nlen+r.ndist){t.msg="invalid bit length repeat",r.mode=ie;break}for(;h--;)r.lens[r.have++]=w}}if(r.mode===ie)break;if(r.lens[256]===0){t.msg="invalid code -- missing end-of-block",r.mode=ie;break}if(r.lenbits=9,A={bits:r.lenbits},L=Ds(Lh,r.lens,0,r.nlen,r.lencode,0,r.work,A),r.lenbits=A.bits,L){t.msg="invalid literal/lengths set",r.mode=ie;break}if(r.distbits=6,r.distcode=r.distdyn,A={bits:r.distbits},L=Ds(Th,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,A),r.distbits=A.bits,L){t.msg="invalid distances set",r.mode=ie;break}if(r.mode=Co,e===To)break e;case Co:r.mode=ko;case ko:if(o>=6&&u>=258){t.next_out=a,t.avail_out=u,t.next_in=s,t.avail_in=o,r.hold=l,r.bits=c,jy(t,d),a=t.next_out,i=t.output,u=t.avail_out,s=t.next_in,n=t.input,o=t.avail_in,l=r.hold,c=r.bits,r.mode===Ut&&(r.back=-1);break}for(r.back=0;p=r.lencode[l&(1<<r.lenbits)-1],y=p>>>24,v=p>>>16&255,x=p&65535,!(y<=c);){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(v&&(v&240)===0){for(b=y,_=v,S=x;p=r.lencode[S+((l&(1<<b+_)-1)>>b)],y=p>>>24,v=p>>>16&255,x=p&65535,!(b+y<=c);){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}l>>>=b,c-=b,r.back+=b}if(l>>>=y,c-=y,r.back+=y,r.length=x,v===0){r.mode=Qf;break}if(v&32){r.back=-1,r.mode=Ut;break}if(v&64){t.msg="invalid literal/length code",r.mode=ie;break}r.extra=v&15,r.mode=Zf;case Zf:if(r.extra){for(k=r.extra;c<k;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.length+=l&(1<<r.extra)-1,l>>>=r.extra,c-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=Yf;case Yf:for(;p=r.distcode[l&(1<<r.distbits)-1],y=p>>>24,v=p>>>16&255,x=p&65535,!(y<=c);){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if((v&240)===0){for(b=y,_=v,S=x;p=r.distcode[S+((l&(1<<b+_)-1)>>b)],y=p>>>24,v=p>>>16&255,x=p&65535,!(b+y<=c);){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}l>>>=b,c-=b,r.back+=b}if(l>>>=y,c-=y,r.back+=y,v&64){t.msg="invalid distance code",r.mode=ie;break}r.offset=x,r.extra=v&15,r.mode=qf;case qf:if(r.extra){for(k=r.extra;c<k;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.offset+=l&(1<<r.extra)-1,l>>>=r.extra,c-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){t.msg="invalid distance too far back",r.mode=ie;break}r.mode=jf;case jf:if(u===0)break e;if(h=d-u,r.offset>h){if(h=r.offset-h,h>r.whave&&r.sane){t.msg="invalid distance too far back",r.mode=ie;break}h>r.wnext?(h-=r.wnext,m=r.wsize-h):m=r.wnext-h,h>r.length&&(h=r.length),g=r.window}else g=i,m=a-r.offset,h=r.length;h>u&&(h=u),u-=h,r.length-=h;do i[a++]=g[m++];while(--h);r.length===0&&(r.mode=ko);break;case Qf:if(u===0)break e;i[a++]=r.length,u--,r.mode=ko;break;case Ec:if(r.wrap){for(;c<32;){if(o===0)break e;o--,l|=n[s++]<<c,c+=8}if(d-=u,t.total_out+=d,r.total+=d,r.wrap&4&&d&&(t.adler=r.check=r.flags?me(r.check,i,d,a-d):Hs(r.check,i,d,a-d)),d=u,r.wrap&4&&(r.flags?l:th(l))!==r.check){t.msg="incorrect data check",r.mode=ie;break}l=0,c=0}r.mode=Jf;case Jf:if(r.wrap&&r.flags){for(;c<32;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(r.wrap&4&&l!==(r.total&4294967295)){t.msg="incorrect length check",r.mode=ie;break}l=0,c=0}r.mode=eh;case eh:L=sb;break e;case ie:L=Ch;break e;case Ph:return kh;case Ih:default:return et}return t.next_out=a,t.avail_out=u,t.next_in=s,t.avail_in=o,r.hold=l,r.bits=c,(r.wsize||d!==t.avail_out&&r.mode<ie&&(r.mode<Ec||e!==If))&&Oh(t,t.output,t.next_out,d-t.avail_out),f-=t.avail_in,d-=t.avail_out,t.total_in+=f,t.total_out+=d,r.total+=d,r.wrap&4&&d&&(t.adler=r.check=r.flags?me(r.check,i,d,t.next_out-d):Hs(r.check,i,d,t.next_out-d)),t.data_type=r.bits+(r.last?64:0)+(r.mode===Ut?128:0)+(r.mode===Co||r.mode===Mc?256:0),(f===0&&d===0||e===If)&&L===bn&&(L=ob),L},gb=t=>{if(vn(t))return et;let e=t.state;return e.window&&(e.window=null),t.state=null,bn},yb=(t,e)=>{if(vn(t))return et;let r=t.state;return(r.wrap&2)===0?et:(r.head=e,e.done=!1,bn)},bb=(t,e)=>{let r=e.length,n,i,s;return vn(t)||(n=t.state,n.wrap!==0&&n.mode!==Fo)?et:n.mode===Fo&&(i=1,i=Hs(i,e,r,0),i!==n.check)?Ch:(s=Oh(t,e,r,r),s?(n.mode=Ph,kh):(n.havedict=1,bn))},xb=Fh,vb=Bh,_b=Rh,wb=hb,Sb=Dh,Ab=pb,Mb=gb,Eb=yb,Lb=bb,Tb="pako inflate (from Nodeca project)",Vt={inflateReset:xb,inflateReset2:vb,inflateResetKeep:_b,inflateInit:wb,inflateInit2:Sb,inflate:Ab,inflateEnd:Mb,inflateGetHeader:Eb,inflateSetDictionary:Lb,inflateInfo:Tb};function Cb(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}var kb=Cb,zh=Object.prototype.toString,{Z_NO_FLUSH:Pb,Z_FINISH:Ib,Z_OK:Ws,Z_STREAM_END:Cc,Z_NEED_DICT:kc,Z_STREAM_ERROR:Rb,Z_DATA_ERROR:nh,Z_MEM_ERROR:Fb}=xn;function Zs(t){this.options=Do.assign({chunkSize:1024*64,windowBits:15,to:""},t||{});let e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,e.windowBits===0&&(e.windowBits=-15)),e.windowBits>=0&&e.windowBits<16&&!(t&&t.windowBits)&&(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&(e.windowBits&15)===0&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Mh,this.strm.avail_out=0;let r=Vt.inflateInit2(this.strm,e.windowBits);if(r!==Ws)throw new Error(gn[r]);if(this.header=new kb,Vt.inflateGetHeader(this.strm,this.header),e.dictionary&&(typeof e.dictionary=="string"?e.dictionary=Gs.string2buf(e.dictionary):zh.call(e.dictionary)==="[object ArrayBuffer]"&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(r=Vt.inflateSetDictionary(this.strm,e.dictionary),r!==Ws)))throw new Error(gn[r])}Zs.prototype.push=function(t,e){let r=this.strm,n=this.options.chunkSize,i=this.options.dictionary,s,a,o;if(this.ended)return!1;for(e===~~e?a=e:a=e===!0?Ib:Pb,zh.call(t)==="[object ArrayBuffer]"?r.input=new Uint8Array(t):r.input=t,r.next_in=0,r.avail_in=r.input.length;;){for(r.avail_out===0&&(r.output=new Uint8Array(n),r.next_out=0,r.avail_out=n),s=Vt.inflate(r,a),s===kc&&i&&(s=Vt.inflateSetDictionary(r,i),s===Ws?s=Vt.inflate(r,a):s===nh&&(s=kc));r.avail_in>0&&s===Cc&&r.state.wrap>0&&t[r.next_in]!==0;)Vt.inflateReset(r),s=Vt.inflate(r,a);switch(s){case Rb:case nh:case kc:case Fb:return this.onEnd(s),this.ended=!0,!1}if(o=r.avail_out,r.next_out&&(r.avail_out===0||s===Cc))if(this.options.to==="string"){let u=Gs.utf8border(r.output,r.next_out),l=r.next_out-u,c=Gs.buf2string(r.output,u);r.next_out=l,r.avail_out=n-l,l&&r.output.set(r.output.subarray(u,u+l),0),this.onData(c)}else this.onData(r.output.length===r.next_out?r.output:r.output.subarray(0,r.next_out));if(!(s===Ws&&o===0)){if(s===Cc)return s=Vt.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,!0;if(r.avail_in===0)break}}return!0};Zs.prototype.onData=function(t){this.chunks.push(t)};Zs.prototype.onEnd=function(t){t===Ws&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=Do.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};function Kc(t,e){let r=new Zs(e);if(r.push(t),r.err)throw r.msg||gn[r.err];return r.result}function Bb(t,e){return e=e||{},e.raw=!0,Kc(t,e)}var Db=Zs,Ob=Kc,zb=Bb,Nb=Kc,Ub=xn,Hb={Inflate:Db,inflate:Ob,inflateRaw:zb,ungzip:Nb,constants:Ub},{Deflate:Vb,deflate:Gb,deflateRaw:Wb,gzip:Xb}=Yy,{Inflate:Kb,inflate:$b,inflateRaw:Zb,ungzip:Yb}=Hb,qb=Vb,jb=Gb,Qb=Wb,Jb=Xb,ex=Kb,tx=$b,rx=Zb,nx=Yb,ix=xn,$c={Deflate:qb,deflate:jb,deflateRaw:Qb,gzip:Jb,Inflate:ex,inflate:tx,inflateRaw:rx,ungzip:nx,constants:ix};var pi=class pi{constructor(e=pi.INITIAL_SIZE){this.buffer=new Uint8Array(e),this.readOffset=0,this.writeOffset=0}append(e){let r=e instanceof Uint8Array?e:new Uint8Array(e),n=this.writeOffset+r.length;n>this.buffer.length&&this.grow(n),this.buffer.set(r,this.writeOffset),this.writeOffset+=r.length}hasBytes(e){return this.writeOffset-this.readOffset>=e}available(){return this.writeOffset-this.readOffset}readByte(){if(!this.hasBytes(1))throw new Error("Buffer underflow");return this.buffer[this.readOffset++]}readShort(){if(!this.hasBytes(2))throw new Error("Buffer underflow");let e=this.buffer[this.readOffset]|this.buffer[this.readOffset+1]<<8;return this.readOffset+=2,e>32767?e-65536:e}readLong(){if(!this.hasBytes(4))throw new Error("Buffer underflow");let e=this.buffer[this.readOffset]|this.buffer[this.readOffset+1]<<8|this.buffer[this.readOffset+2]<<16|this.buffer[this.readOffset+3]<<24;return this.readOffset+=4,e}readFloat(){if(!this.hasBytes(4))throw new Error("Buffer underflow");let r=new DataView(this.buffer.buffer,this.buffer.byteOffset+this.readOffset,4).getFloat32(0,!0);return this.readOffset+=4,r}readString(){let e=Math.min(pi.MAX_STRING_LENGTH,this.writeOffset-this.readOffset),r=0;for(;r<e&&this.buffer[this.readOffset+r]!==0;)r++;if(r>=e)throw this.writeOffset-this.readOffset<=e?new Error("Buffer underflow"):new Error("String exceeds max length");let n=this.buffer.slice(this.readOffset,this.readOffset+r);return this.readOffset+=r+1,new TextDecoder("latin1").decode(n)}peekBytes(e){if(!this.hasBytes(e))throw new Error("Buffer underflow");return this.buffer.slice(this.readOffset,this.readOffset+e)}readBytes(e){if(!this.hasBytes(e))throw new Error("Buffer underflow");let r=this.buffer.slice(this.readOffset,this.readOffset+e);return this.readOffset+=e,r}readData(e){return this.readBytes(e)}getReadPosition(){return this.readOffset}getWritePosition(){return this.writeOffset}setReadPosition(e){if(e<0||e>this.writeOffset)throw new Error("Invalid read position");this.readOffset=e}grow(e){let r=e?Math.max(e,this.buffer.length*2):this.buffer.length*2,n=new Uint8Array(r);n.set(this.buffer),this.buffer=n}compact(){if(this.readOffset===0)return;let e=this.writeOffset-this.readOffset;if(e===0){this.readOffset=0,this.writeOffset=0;return}this.buffer.copyWithin(0,this.readOffset,this.writeOffset),this.readOffset=0,this.writeOffset=e}getCapacity(){return this.buffer.length}reset(){this.readOffset=0,this.writeOffset=0}};pi.INITIAL_SIZE=64*1024,pi.MAX_STRING_LENGTH=2048;var zo=pi;var vr=2023,_r=1,wr=2,Sr=4,Ar=8,Mr=16,Er=32,qs=64,Ys=128,No=256,Lr=512,Tr=1024,Cr=2048,xt=4096,kr=8192,vt=16384,Uo=32768,_t=65536,Pr=1<<17,wt=1<<18,St=1<<19,Ir=1<<20,Rr=1<<21,Fr=1<<22,Ho=1<<23,Br=1<<24,At=1<<25,Dr=1<<26,Or=1<<27,zr=1<<28,Nr=1<<29,Ur=1<<30,Vo=-2147483648,Hr=1,Vr=2,Gr=4;var sx=1,ax=2,ox=128,Gt=()=>({number:0,modelindex:0,modelindex2:0,modelindex3:0,modelindex4:0,frame:0,skinnum:0,effects:0,renderfx:0,origin:{x:0,y:0,z:0},old_origin:{x:0,y:0,z:0},angles:{x:0,y:0,z:0},sound:0,event:0,solid:0,bits:0,bitsHigh:0,alpha:0,scale:0,instanceBits:0,loopVolume:0,loopAttenuation:0,owner:0,oldFrame:0}),_n=()=>({pm_type:0,origin:{x:0,y:0,z:0},velocity:{x:0,y:0,z:0},pm_time:0,pm_flags:0,gravity:0,delta_angles:{x:0,y:0,z:0},viewoffset:{x:0,y:0,z:0},viewangles:{x:0,y:0,z:0},kick_angles:{x:0,y:0,z:0},gun_index:0,gun_frame:0,gun_offset:{x:0,y:0,z:0},gun_angles:{x:0,y:0,z:0},blend:[0,0,0,0],fov:0,rdflags:0,stats:new Array(32).fill(0),gunskin:0,gunrate:0,damage_blend:[0,0,0,0],team_id:0,watertype:0}),Zc=class extends zo{constructor(r){super(0);this.stream=r}readByte(){return this.stream.readByte()}readShort(){return this.stream.readShort()}readLong(){return this.stream.readLong()}readFloat(){return this.stream.readFloat()}readString(){return this.stream.readString()}readData(r){return this.stream.readData(r)}hasBytes(r){return this.stream.hasMore()}available(){return this.stream.getRemaining()}getReadPosition(){return this.stream.getPosition()}peekBytes(r){throw new Error("peekBytes not implemented for BinaryStreamAdapter")}},Nh={0:M.bad,1:M.nop,2:M.disconnect,3:M.reconnect,4:M.download,5:M.frame,6:M.inventory,7:M.layout,8:M.muzzleflash,9:M.sound,10:M.print,11:M.stufftext,12:M.serverdata,13:M.configstring,14:M.spawnbaseline,15:M.centerprint,16:M.download,17:M.playerinfo,18:M.packetentities,19:M.deltapacketentities,23:M.temp_entity,22:M.muzzleflash2},Ve=class t{constructor(e,r,n=!1){this.protocolVersion=0;this.isDemo=sx;this.strictMode=!1;this.errorCount=0;e instanceof Kt?this.stream=new Zc(e):this.stream=e,this.handler=r,this.strictMode=n}setProtocolVersion(e){this.protocolVersion=e}getProtocolVersion(){return this.protocolVersion}getErrorCount(){return this.errorCount}translateCommand(e){if(this.protocolVersion===0)return e===7?M.serverdata:e===12?M.serverdata:e;if(this.protocolVersion===vr)return e;if(this.protocolVersion===25||this.protocolVersion===26){if(e===0)return M.bad;let r=e+5;return r>=M.nop&&r<=M.frame?r:M.bad}return this.protocolVersion===34?Nh[e]!==void 0?Nh[e]:M.bad:e}parseMessage(){for(;this.stream.hasBytes(1);){let e=this.stream.getReadPosition(),r=-1;try{if(r=this.stream.readByte(),r===-1)break;let n=r;switch(r=this.translateCommand(r),r){case M.bad:return;case M.nop:break;case M.disconnect:this.handler?.onDisconnect&&this.handler.onDisconnect();break;case M.reconnect:this.handler?.onReconnect&&this.handler.onReconnect();break;case M.print:this.parsePrint();break;case M.serverdata:this.parseServerData();break;case M.configstring:this.parseConfigString();break;case M.spawnbaseline:this.parseSpawnBaseline();break;case M.centerprint:this.parseCenterPrint();break;case M.download:this.parseDownload();break;case M.frame:this.parseFrame();break;case M.packetentities:this.parsePacketEntities(!1);break;case M.deltapacketentities:this.parsePacketEntities(!0);break;case M.playerinfo:this.parsePlayerState();break;case M.stufftext:this.parseStuffText();break;case M.layout:this.parseLayout();break;case M.inventory:this.parseInventory();break;case M.sound:this.parseSound();break;case M.muzzleflash:this.parseMuzzleFlash();break;case M.muzzleflash2:this.parseMuzzleFlash2();break;case M.temp_entity:this.parseTempEntity();break;case M.splitclient:this.parseSplitClient();break;case M.configblast:this.parseConfigBlast();break;case M.spawnbaselineblast:this.parseSpawnBaselineBlast();break;case M.level_restart:this.handler?.onLevelRestart&&this.handler.onLevelRestart();break;case M.damage:this.parseDamage();break;case M.locprint:this.parseLocPrint();break;case M.fog:this.parseFog();break;case M.waitingforplayers:this.parseWaitingForPlayers();break;case M.bot_chat:this.parseBotChat();break;case M.poi:this.parsePoi();break;case M.help_path:this.parseHelpPath();break;case M.muzzleflash3:this.parseMuzzleFlash3();break;case M.achievement:this.parseAchievement();break;default:let i=`Unknown server command: ${n} (translated: ${r}) at offset ${e}`;if(this.strictMode)throw new Error(i);console.warn(i),this.errorCount++;return}}catch(n){let i=n.message;if(i==="Buffer underflow"||i.includes("StreamingBuffer")){try{this.stream.setReadPosition(e)}catch(a){console.error("Failed to rollback stream position",a)}return}let s=`offset ${e}, cmd ${r}, protocol ${this.protocolVersion}`;if(console.warn(`Error parsing command ${r} (${s}): ${i}`),this.errorCount++,this.strictMode)throw n;return}}}readAngle16(){return this.stream.readShort()*(360/65536)}readCoord(){return this.stream.readShort()*.125}readAngle(){return this.stream.readByte()*(360/256)}readPos(e){e.x=this.stream.readShort()*.125,e.y=this.stream.readShort()*.125,e.z=this.stream.readShort()*.125}readDir(e){let r=this.stream.readByte();if(r>=tt.length)e.x=0,e.y=0,e.z=0;else{let n=tt[r];e.x=n[0],e.y=n[1],e.z=n[2]}}parsePrint(){let e=this.stream.readByte(),r=this.stream.readString();this.handler&&this.handler.onPrint(e,r)}parseStuffText(){let e=this.stream.readString();this.handler&&this.handler.onStuffText(e)}parseLayout(){let e=this.stream.readString();this.handler&&this.handler.onLayout(e)}parseCenterPrint(){let e=this.stream.readString();this.handler&&this.handler.onCenterPrint(e)}parseServerData(){if(this.protocolVersion=this.stream.readLong(),this.protocolVersion===vr){let e=this.stream.readLong(),r=this.stream.readByte();this.isDemo=r;let n=this.stream.readByte(),i=this.stream.readString(),s=this.stream.readShort();if(s===-2){let o=this.stream.readShort();for(let u=0;u<o;u++)this.stream.readShort();s=0}else s===-1&&(s=-1);let a=this.stream.readString();this.handler&&this.handler.onServerData(this.protocolVersion,e,0,i,s,a,n,r)}else{let e=this.stream.readLong(),r=this.stream.readByte();this.isDemo=r;let n=this.stream.readString(),i=this.stream.readShort(),s=this.stream.readString();this.handler&&this.handler.onServerData(this.protocolVersion,e,r,n,i,s)}}parseConfigString(){let e=this.stream.readShort(),r=this.stream.readString();this.handler&&this.handler.onConfigString(e,r)}parseSplitClient(){let e=this.stream.readByte();this.handler?.onSplitClient&&this.handler.onSplitClient(e)}parseConfigBlast(){let e=this.stream.readShort(),r=this.stream.readShort(),n=this.stream.readData(e);try{let i=$c.inflate(n),s=new Kt(i.buffer);for(;s.hasMore();){let a=s.readUShort(),o=s.readString();this.handler&&this.handler.onConfigString(a,o)}}catch(i){console.error("svc_configblast error",i)}}parseSpawnBaselineBlast(){let e=this.stream.readShort(),r=this.stream.readShort(),n=this.stream.readData(e);try{let i=$c.inflate(n),s=new Kt(i.buffer),a=new t(s,this.handler,this.strictMode);for(a.setProtocolVersion(this.protocolVersion);s.hasMore();)a.parseSpawnBaseline()}catch(i){console.error("svc_spawnbaselineblast error",i)}}parseLocPrint(){let e=this.stream.readByte(),r=this.stream.readString(),n=this.stream.readByte(),i=[];for(let s=0;s<n;s++)i.push(this.stream.readString());this.handler?.onLocPrint&&this.handler.onLocPrint(e,r,i)}parseWaitingForPlayers(){let e=this.stream.readByte();this.handler?.onWaitingForPlayers&&this.handler.onWaitingForPlayers(e)}parseBotChat(){let e=this.stream.readString(),r=this.stream.readShort(),n=this.stream.readString();this.handler?.onBotChat&&this.handler.onBotChat(n)}parsePoi(){let e=this.stream.readShort(),r=this.stream.readShort(),n={x:0,y:0,z:0};this.readPos(n);let i=this.stream.readShort(),s=this.stream.readByte(),a=this.stream.readByte();this.handler?.onPoi&&this.handler.onPoi(a,n)}parseHelpPath(){let e=this.stream.readByte(),r={x:0,y:0,z:0};this.readPos(r);let n={x:0,y:0,z:0};this.readDir(n),this.handler?.onHelpPath&&this.handler.onHelpPath(r)}parseAchievement(){let e=this.stream.readString();this.handler?.onAchievement&&this.handler.onAchievement(e)}parseDownload(){let e=this.stream.readShort(),r=this.stream.readByte(),n;e>0&&(n=this.stream.readData(e)),this.handler&&this.handler.onDownload(e,r,n)}parseInventory(){let r=new Array(256);for(let n=0;n<256;n++)r[n]=this.stream.readShort();this.handler&&this.handler.onInventory(r)}parseSound(){let e=this.stream.readByte(),r=this.stream.readByte(),n,i,s,a,o;if(e&1&&(n=this.stream.readByte()),e&2&&(i=this.stream.readByte()),e&16&&(s=this.stream.readByte()),e&8&&(a=this.stream.readShort()),e&4){let u={x:0,y:0,z:0};this.readPos(u),o=u}this.handler&&this.handler.onSound(e,r,n,i,s,a,o)}parseMuzzleFlash(){let e=this.stream.readShort(),r=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash(e,r)}parseMuzzleFlash2(){let e=this.stream.readShort(),r=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash2(e,r)}parseMuzzleFlash3(){let e=this.stream.readShort(),r=this.stream.readShort();this.handler?.onMuzzleFlash3&&this.handler.onMuzzleFlash3(e,r)}parseFog(){let e=this.stream.readByte();if(e&128){let n=this.stream.readByte();e|=n<<8}let r={};e&1&&(r.density=this.stream.readFloat(),r.skyfactor=this.stream.readByte()),e&2&&(r.red=this.stream.readByte()),e&4&&(r.green=this.stream.readByte()),e&8&&(r.blue=this.stream.readByte()),e&16&&(r.time=this.stream.readShort()),e&32&&(r.hf_falloff=this.stream.readFloat()),e&64&&(r.hf_density=this.stream.readFloat()),e&256&&(r.hf_start_r=this.stream.readByte()),e&512&&(r.hf_start_g=this.stream.readByte()),e&1024&&(r.hf_start_b=this.stream.readByte()),e&2048&&(r.hf_start_dist=this.stream.readLong()),e&4096&&(r.hf_end_r=this.stream.readByte()),e&8192&&(r.hf_end_g=this.stream.readByte()),e&16384&&(r.hf_end_b=this.stream.readByte()),e&32768&&(r.hf_end_dist=this.stream.readLong()),this.handler?.onFog&&this.handler.onFog(r)}parseDamage(){let e=this.stream.readByte(),r=[];for(let n=0;n<e;n++){let i=this.stream.readByte(),s={x:0,y:0,z:0};this.readDir(s);let a=i&31,o=(i&32)!==0,u=(i&64)!==0,l=(i&128)!==0;r.push({damage:a,health:o,armor:u,power:l,dir:s})}this.handler?.onDamage&&this.handler.onDamage(r)}parseTempEntity(){let e=this.stream.readByte(),r={x:0,y:0,z:0},n={x:0,y:0,z:0},i={x:0,y:0,z:0},s,a,o,u,l;switch(e){case E.EXPLOSION1:case E.EXPLOSION2:case E.ROCKET_EXPLOSION:case E.GRENADE_EXPLOSION:case E.ROCKET_EXPLOSION_WATER:case E.GRENADE_EXPLOSION_WATER:case E.BFG_EXPLOSION:case E.BFG_BIGEXPLOSION:case E.BOSSTPORT:case E.PLASMA_EXPLOSION:case E.PLAIN_EXPLOSION:case E.CHAINFIST_SMOKE:case E.TRACKER_EXPLOSION:case E.TELEPORT_EFFECT:case E.DBALL_GOAL:case E.NUKEBLAST:case E.WIDOWSPLASH:case E.EXPLOSION1_BIG:case E.EXPLOSION1_NP:this.readPos(r);break;case E.GUNSHOT:case E.BLOOD:case E.BLASTER:case E.SHOTGUN:case E.SPARKS:case E.BULLET_SPARKS:case E.SCREEN_SPARKS:case E.SHIELD_SPARKS:case E.BLASTER2:case E.FLECHETTE:case E.MOREBLOOD:case E.ELECTRIC_SPARKS:case E.HEATBEAM_SPARKS:case E.HEATBEAM_STEAM:this.readPos(r),this.readDir(i);break;case E.SPLASH:case E.LASER_SPARKS:case E.WELDING_SPARKS:case E.TUNNEL_SPARKS:s=this.stream.readByte(),this.readPos(r),this.readDir(i),a=this.stream.readByte();break;case E.BLUEHYPERBLASTER:this.protocolVersion>=32?(this.readPos(r),this.readPos(n)):(this.readPos(r),this.readDir(i));break;case E.GREENBLOOD:this.protocolVersion>=32?(this.readPos(r),this.readDir(i)):(this.readPos(r),this.readPos(n));break;case E.RAILTRAIL:case E.BUBBLETRAIL:case E.BFG_LASER:case E.DEBUGTRAIL:case E.BUBBLETRAIL2:this.readPos(r),this.readPos(n);break;case E.PARASITE_ATTACK:case E.MEDIC_CABLE_ATTACK:this.stream.readShort(),this.readPos(r),this.readPos(n);break;case E.GRAPPLE_CABLE:o=this.stream.readShort(),this.readPos(r),this.readPos(n),this.readPos(i);break;case E.LIGHTNING:u=this.stream.readShort(),l=this.stream.readShort(),this.readPos(r),this.readPos(n);break;case E.FLASHLIGHT:this.readPos(r),o=this.stream.readShort();break;case E.FORCEWALL:this.readPos(r),this.readPos(n),a=this.stream.readByte();break;case E.STEAM:let c=this.stream.readShort();s=this.stream.readByte(),this.readPos(r),this.readDir(i),a=this.stream.readByte(),this.stream.readShort(),c!==-1&&this.stream.readLong();break;case E.WIDOWBEAMOUT:this.stream.readShort();case E.HEATBEAM:case E.MONSTER_HEATBEAM:o=this.stream.readShort(),this.readPos(r),this.readPos(n),this.readDir(i);break}this.handler&&this.handler.onTempEntity(e,r,n,i,s,a,o,u,l)}parseSpawnBaseline(){let e=this.parseEntityBits(),r=Gt();this.parseDelta(Gt(),r,e.number,e.bits,e.bitsHigh),this.handler&&this.handler.onSpawnBaseline(r)}parseFrame(){let e=this.stream.readLong(),r=this.stream.readLong(),n=0;this.protocolVersion!==26&&this.protocolVersion!==25&&(n=this.stream.readByte());let i=this.stream.readByte(),s=this.stream.readData(i),a=this.stream.readByte();if(a=this.translateCommand(a),a!==M.playerinfo){if(this.strictMode)throw new Error(`Expected svc_playerinfo after svc_frame, got ${a}`);return}let o=this.parsePlayerState(),u=this.stream.readByte();if(u=this.translateCommand(u),u!==M.packetentities&&u!==M.deltapacketentities){if(this.strictMode)throw new Error(`Expected svc_packetentities after svc_playerinfo, got ${u}`);return}let l=this.collectPacketEntities();if(this.isDemo===ox){let c=this.stream.readByte();for(let f=0;f<c;f++)this.stream.readByte()}this.isDemo===ax&&this.stream.readLong(),this.handler&&this.handler.onFrame({serverFrame:e,deltaFrame:r,surpressCount:n,areaBytes:i,areaBits:s,playerState:o,packetEntities:{delta:!0,entities:l}})}parsePlayerState(){let e=_n(),r=this.stream.readShort();r&1&&(e.pm_type=this.stream.readByte()),r&2&&(e.origin.x=this.readCoord(),e.origin.y=this.readCoord(),e.origin.z=this.readCoord()),r&4&&(e.velocity.x=this.readCoord(),e.velocity.y=this.readCoord(),e.velocity.z=this.readCoord()),r&8&&(e.pm_time=this.stream.readByte()),r&16&&(e.pm_flags=this.stream.readByte()),r&32&&(e.gravity=this.stream.readShort()),r&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)),r&128&&(e.viewoffset.x=(this.stream.readByte()<<24>>24)*.25,e.viewoffset.y=(this.stream.readByte()<<24>>24)*.25,e.viewoffset.z=(this.stream.readByte()<<24>>24)*.25),r&256&&(e.viewangles.x=this.readAngle16(),e.viewangles.y=this.readAngle16(),e.viewangles.z=this.readAngle16()),r&512&&(e.kick_angles.x=(this.stream.readByte()<<24>>24)*.25,e.kick_angles.y=(this.stream.readByte()<<24>>24)*.25,e.kick_angles.z=(this.stream.readByte()<<24>>24)*.25),r&4096&&(e.gun_index=this.stream.readByte()),r&8192&&(e.gun_frame=this.stream.readByte(),e.gun_offset.x=(this.stream.readByte()<<24>>24)*.25,e.gun_offset.y=(this.stream.readByte()<<24>>24)*.25,e.gun_offset.z=(this.stream.readByte()<<24>>24)*.25,e.gun_angles.x=(this.stream.readByte()<<24>>24)*.25,e.gun_angles.y=(this.stream.readByte()<<24>>24)*.25,e.gun_angles.z=(this.stream.readByte()<<24>>24)*.25),r&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()),r&2048&&(e.fov=this.stream.readByte()),r&16384&&(e.rdflags=this.stream.readByte()),r&32768&&(e.watertype=this.stream.readByte());let n=this.stream.readLong();for(let i=0;i<32;i++)n&1<<i&&(e.stats[i]=this.stream.readShort());return e}parsePacketEntities(e){let r=this.collectPacketEntities();this.handler&&this.handler.onFrame({serverFrame:0,deltaFrame:0,surpressCount:0,areaBytes:0,areaBits:new Uint8Array,playerState:_n(),packetEntities:{delta:e,entities:r}})}collectPacketEntities(){let e=[];for(;;){let r=this.parseEntityBits();if(r.bits&qs){if(r.number===0)break;continue}let n=Gt(),i=r.number===0&&!(r.bits&Ys);if((r.number!==0||i)&&this.parseDelta(Gt(),n,r.number,r.bits,r.bitsHigh),r.number===0)break;e.push(n)}return e}parseEntityBits(){let e=this.stream.readByte();e&Ys&&(e|=this.stream.readByte()<<8),e&Uo&&(e|=this.stream.readByte()<<16),e&Ho&&(e|=this.stream.readByte()<<24);let r=0;this.protocolVersion===vr&&e&Vo&&(r=this.stream.readByte());let n;return e&No?n=this.stream.readShort():n=this.stream.readByte(),{number:n,bits:e,bitsHigh:r}}parseDelta(e,r,n,i,s=0){r.number=e.number,r.modelindex=e.modelindex,r.modelindex2=e.modelindex2,r.modelindex3=e.modelindex3,r.modelindex4=e.modelindex4,r.frame=e.frame,r.skinnum=e.skinnum,r.effects=e.effects,r.renderfx=e.renderfx,r.origin.x=e.origin.x,r.origin.y=e.origin.y,r.origin.z=e.origin.z,r.old_origin.x=e.origin.x,r.old_origin.y=e.origin.y,r.old_origin.z=e.origin.z,r.angles.x=e.angles.x,r.angles.y=e.angles.y,r.angles.z=e.angles.z,r.sound=e.sound,r.event=e.event,r.solid=e.solid,r.alpha=e.alpha,r.scale=e.scale,r.instanceBits=e.instanceBits,r.loopVolume=e.loopVolume,r.loopAttenuation=e.loopAttenuation,r.owner=e.owner,r.oldFrame=e.oldFrame,r.number=n,r.bits=i,r.bitsHigh=s,i&Cr&&(r.modelindex=this.stream.readByte()),i&Ir&&(r.modelindex2=this.stream.readByte()),i&Rr&&(r.modelindex3=this.stream.readByte()),i&Fr&&(r.modelindex4=this.stream.readByte()),i&Mr&&(r.frame=this.stream.readByte()),i&Pr&&(r.frame=this.stream.readShort()),i&_t&&i&At?r.skinnum=this.stream.readLong():i&_t?r.skinnum=this.stream.readByte():i&At&&(r.skinnum=this.stream.readShort()),i&vt&&i&St?r.effects=this.stream.readLong():i&vt?r.effects=this.stream.readByte():i&St&&(r.effects=this.stream.readShort()),i&xt&&i&wt?r.renderfx=this.stream.readLong():i&xt?r.renderfx=this.stream.readByte():i&wt&&(r.renderfx=this.stream.readShort()),i&_r&&(r.origin.x=this.readCoord()),i&wr&&(r.origin.y=this.readCoord()),i&Lr&&(r.origin.z=this.readCoord()),i&Tr&&(r.angles.x=this.readAngle()),i&Sr&&(r.angles.y=this.readAngle()),i&Ar&&(r.angles.z=this.readAngle()),i&Br&&this.readPos(r.old_origin),i&Dr&&(r.sound=this.stream.readByte()),i&Er?r.event=this.stream.readByte():r.event=0,i&Or&&(r.solid=this.stream.readShort()),this.protocolVersion===vr&&(i&kr&&(r.alpha=this.stream.readByte()/255),i&zr&&(r.scale=this.stream.readFloat()),i&Nr&&(r.instanceBits=this.stream.readLong()),i&Ur&&(r.loopVolume=this.stream.readByte()/255),s&Hr&&(r.loopAttenuation=this.stream.readByte()/255),s&Vr&&(r.owner=this.stream.readShort()),s&Gr&&(r.oldFrame=this.stream.readShort()))}};var Yc=(c=>(c.WeaponFire="weapon_fire",c.DamageDealt="damage_dealt",c.DamageReceived="damage_received",c.Pickup="pickup",c.Death="death",c.Kill="kill",c.Spawn="spawn",c.PlayerInfo="player_info",c.Chat="chat",c.Objective="objective",c))(Yc||{});var gi=class{constructor(e){this.events=[];this.summary={totalKills:0,totalDeaths:0,damageDealt:0,damageReceived:0,weaponUsage:new Map};this.header=null;this.configStrings=new Map;this.serverInfo={};this.statistics=null;this.playerStats=new Map;this.weaponStats=new Map;this.activeEntities=new Set;this.buffer=e}analyze(){let e=new Qe(this.buffer),r=-1,n=0,i=.1,s=0,a={onServerData:(o,u,l,c,f,d,h,m)=>{s=o,this.header={protocolVersion:o,gameDir:c,levelName:d,playerNum:f,serverCount:u,spawnCount:u,tickRate:h,demoType:m},h&&h>0&&(i=1/h)},onConfigString:(o,u)=>{this.configStrings.set(o,u),o===0&&this.parseServerInfo(u)},onSpawnBaseline:o=>{},onFrame:o=>{let u=new Set;if(o.packetEntities&&o.packetEntities.entities)for(let l of o.packetEntities.entities)u.add(l.number),this.activeEntities.has(l.number)||this.recordEvent({type:"spawn",frame:r,time:n,entityId:l.number,position:{x:l.origin.x,y:l.origin.y,z:l.origin.z},description:`Entity ${l.number} spawned`});this.activeEntities=u,o.playerState&&this.header},onPrint:(o,u)=>{let l=u.replace(/\n/g," ").trim();l.includes("died")||l.includes("killed")||l.includes("suicide")?(this.summary.totalDeaths++,this.recordEvent({type:"death",frame:r,time:n,description:l})):l.startsWith("You got the ")?this.recordEvent({type:"pickup",frame:r,time:n,description:l}):(o===3||o===2)&&this.recordEvent({type:"chat",frame:r,time:n,description:l,data:{level:o}})},onCenterPrint:o=>{this.recordEvent({type:"objective",frame:r,time:n,description:o.trim()})},onStuffText:()=>{},onSound:()=>{},onTempEntity:()=>{},onLayout:()=>{},onInventory:()=>{},onMuzzleFlash:(o,u)=>{this.handleWeaponFire(o,u,r,n)},onMuzzleFlash2:(o,u)=>{this.handleWeaponFire(o,u,r,n)},onMuzzleFlash3:(o,u)=>{this.handleWeaponFire(o,u,r,n)},onDisconnect:()=>{},onReconnect:()=>{},onDownload:()=>{},onDamage:o=>{for(let u of o)if(this.recordEvent({type:"damage_received",frame:r,time:n,value:u.damage,position:u.dir,description:`Took ${u.damage} damage`}),this.summary.damageReceived+=u.damage,this.header){let l=this.getOrCreatePlayerStats(this.header.playerNum);l.damageReceived+=u.damage}}};for(;e.hasMore();){let o=e.readNextBlock();if(!o)break;r++,n=r*i;let u=new Ve(o.data,a);u.setProtocolVersion(s),u.parseMessage(),s=u.getProtocolVersion()}return this.statistics={duration:n,frameCount:r+1,averageFps:(r+1)/(n||1),mapName:this.header?.levelName||"unknown",playerCount:1},{events:this.events,summary:this.summary,header:this.header,configStrings:this.configStrings,serverInfo:this.serverInfo,statistics:this.statistics,playerStats:this.playerStats,weaponStats:this.weaponStats}}handleWeaponFire(e,r,n,i){this.recordEvent({type:"weapon_fire",frame:n,time:i,entityId:e,value:r,description:`Weapon ${r} fired by ${e}`});let s=this.summary.weaponUsage.get(r)||0;this.summary.weaponUsage.set(r,s+1);let a=this.getOrCreateWeaponStat(e,r);a.shotsFired++}recordEvent(e){this.events.push(e)}parseServerInfo(e){let r=e.split("\\");for(let n=1;n<r.length;n+=2)n+1<r.length&&(this.serverInfo[r[n]]=r[n+1])}getOrCreatePlayerStats(e){let r=this.playerStats.get(e);return r||(r={kills:0,deaths:0,damageDealt:0,damageReceived:0,suicides:0},this.playerStats.set(e,r)),r}getOrCreateWeaponStat(e,r){let n=this.weaponStats.get(e);n||(n=[],this.weaponStats.set(e,n));let i=n.find(s=>s.weaponId===r);return i||(i={weaponId:r,shotsFired:0,hits:0,kills:0},n.push(i)),i}};var qc=(i=>(i[i.FirstPerson=0]="FirstPerson",i[i.ThirdPerson=1]="ThirdPerson",i[i.Free=2]="Free",i[i.Follow=3]="Follow",i))(qc||{});var Go=(i=>(i[i.Stopped=0]="Stopped",i[i.Playing=1]="Playing",i[i.Paused=2]="Paused",i[i.Finished=3]="Finished",i))(Go||{}),lx=()=>({onServerData:()=>{},onConfigString:()=>{},onSpawnBaseline:()=>{},onFrame:()=>{},onCenterPrint:()=>{},onStuffText:()=>{},onPrint:()=>{},onSound:()=>{},onTempEntity:()=>{},onLayout:()=>{},onInventory:()=>{},onMuzzleFlash:()=>{},onMuzzleFlash2:()=>{},onDisconnect:()=>{},onReconnect:()=>{},onDownload:()=>{}}),Wt=class{constructor(){this.reader=null;this.buffer=null;this.state=0;this.playbackSpeed=1;this.currentProtocolVersion=0;this.currentFrameIndex=-1;this.lastFrameData=null;this.accumulatedTime=0;this.frameDuration=100;this.snapshotInterval=100;this.snapshots=new Map;this.cachedEvents=null;this.cachedSummary=null;this.cachedHeader=null;this.cachedConfigStrings=null;this.cachedServerInfo=null;this.cachedStatistics=null;this.cachedPlayerStats=null;this.cachedWeaponStats=null;this.tracker=null;this.cameraMode=0;this.thirdPersonDistance=80;this.thirdPersonOffset={x:0,y:0,z:0}}setHandler(e){this.handler=e}setCallbacks(e){this.callbacks=e}loadDemo(e){this.buffer=e,this.reader=new Qe(e),this.transitionState(0),this.accumulatedTime=0,this.currentProtocolVersion=0,this.currentFrameIndex=-1,this.snapshots.clear(),this.lastFrameData=null,this.cachedEvents=null,this.cachedSummary=null,this.cachedHeader=null,this.cachedConfigStrings=null,this.cachedServerInfo=null,this.cachedStatistics=null,this.cachedPlayerStats=null,this.cachedWeaponStats=null}play(){this.reader&&this.state!==1&&this.transitionState(1)}pause(){this.state===1&&this.transitionState(2)}stop(){this.transitionState(0),this.reader&&this.reader.reset(),this.accumulatedTime=0,this.currentProtocolVersion=0,this.currentFrameIndex=-1,this.lastFrameData=null}transitionState(e){this.state!==e&&(this.state=e,this.callbacks?.onPlaybackStateChange&&this.callbacks.onPlaybackStateChange(e))}setFrameDuration(e){this.frameDuration=e}setSpeed(e){this.playbackSpeed=Math.max(.1,Math.min(e,16))}getSpeed(){return this.playbackSpeed}getPlaybackSpeed(){return this.playbackSpeed}getInterpolationFactor(){return this.frameDuration<=0?0:Math.max(0,Math.min(1,this.accumulatedTime/this.frameDuration))}update(e){if(!(this.state!==1||!this.reader))for(this.accumulatedTime+=e*1e3*this.playbackSpeed;this.accumulatedTime>=this.frameDuration;){if(!this.processNextFrame())return;this.accumulatedTime-=this.frameDuration,this.callbacks?.onTimeUpdate&&this.callbacks.onTimeUpdate(this.getCurrentTime())}}stepForward(){this.reader&&(this.processNextFrame(),this.callbacks?.onTimeUpdate&&this.callbacks.onTimeUpdate(this.getCurrentTime()))}stepBackward(){this.reader&&this.currentFrameIndex>0&&this.seek(this.currentFrameIndex-1)}seekToTime(e){let r=this.timeToFrame(e);this.seek(r)}seekToFrame(e){this.seek(e)}frameToTime(e){return e*this.frameDuration/1e3}timeToFrame(e){return Math.floor(e*1e3/this.frameDuration)}playFrom(e){if(e.type==="frame")this.seek(e.frame);else if(e.type==="time")this.seekToTime(e.seconds);else throw new Error(`Invalid offset type: ${e.type}`);this.play()}playRange(e,r){let n=e.type==="frame"?e.frame:this.timeToFrame(e.seconds),i=r.type==="frame"?r.frame:this.timeToFrame(r.seconds),s=this.getTotalFrames(),a=Math.max(0,s-1);if(n<0)throw new Error(`Invalid start offset: ${n}`);if(i<n)throw new Error(`End offset (${i}) cannot be before start offset (${n})`);this.playFrom(e);let o=this.callbacks?.onFrameUpdate,u={...this.callbacks,onFrameUpdate:l=>{o&&o(l),this.currentFrameIndex>=i&&(this.pause(),this.callbacks===u&&this.setCallbacks({...this.callbacks,onFrameUpdate:o}),this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete())}};this.setCallbacks(u)}seek(e){if(!this.reader)return;let r=this.getTotalFrames();if(r>0&&e>=r&&(e=r-1),e<0&&(e=0),e===this.currentFrameIndex+1){this.processNextFrame(),this.callbacks?.onSeekComplete&&this.callbacks.onSeekComplete();return}if(e===this.currentFrameIndex){this.callbacks?.onSeekComplete&&this.callbacks.onSeekComplete();return}let n=-1,i=null;if(e>this.currentFrameIndex&&this.currentFrameIndex!==-1&&(n=this.currentFrameIndex),this.callbacks?.onRestoreSnapshot)for(let[s,a]of this.snapshots)s<=e&&s>n&&(n=s,i=a);for(n===-1&&this.currentFrameIndex>e?(this.reader.reset(),this.currentFrameIndex=-1,this.currentProtocolVersion=0):n===-1&&(this.reader.reset(),this.currentFrameIndex=-1,this.currentProtocolVersion=0),i&&this.callbacks?.onRestoreSnapshot&&(this.callbacks.onRestoreSnapshot(i),this.reader.seekToMessage(n+1)?this.currentFrameIndex=n:(this.reader.reset(),this.currentFrameIndex=-1,this.currentProtocolVersion=0));this.currentFrameIndex<e&&(this.callbacks?.onCaptureSnapshot&&(this.currentFrameIndex+1)%this.snapshotInterval,!!this.processNextFrame()););this.accumulatedTime=0,this.callbacks?.onSeekComplete&&this.callbacks.onSeekComplete(),this.callbacks?.onTimeUpdate&&this.callbacks.onTimeUpdate(this.getCurrentTime())}processNextFrame(){if(!this.reader||!this.reader.hasMore())return this.transitionState(3),this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),!1;let e=this.reader.readNextBlock();if(!e)return this.transitionState(3),this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),!1;this.currentFrameIndex++,this.tracker&&(this.tracker.setCurrentFrame(this.currentFrameIndex),this.tracker.setCurrentTime(this.getCurrentTime()));try{let r={...this.handler||lx(),onFrame:i=>{this.lastFrameData=i,this.handler?.onFrame&&this.handler.onFrame(i),this.callbacks?.onFrameUpdate&&this.callbacks.onFrameUpdate(i)}},n=new Ve(e.data,r);if(n.setProtocolVersion(this.currentProtocolVersion),n.parseMessage(),this.currentProtocolVersion=n.getProtocolVersion(),this.callbacks?.onCaptureSnapshot&&this.currentFrameIndex%this.snapshotInterval===0&&this.currentFrameIndex>0){let i=this.callbacks.onCaptureSnapshot(this.currentFrameIndex);i&&this.snapshots.set(this.currentFrameIndex,i)}}catch(r){return console.error("Error processing demo frame",r),this.callbacks?.onPlaybackError&&this.callbacks.onPlaybackError(r instanceof Error?r:new Error(String(r))),!1}return!0}getState(){return this.state}getCurrentTime(){return this.currentFrameIndex<0?this.accumulatedTime:this.currentFrameIndex*this.frameDuration+this.accumulatedTime}getFrameCount(){return this.reader?this.reader.getMessageCount():0}getTotalFrames(){return this.getFrameCount()}getCurrentFrame(){return this.currentFrameIndex<0?0:this.currentFrameIndex}getDuration(){return this.getFrameCount()*this.frameDuration/1e3}getTotalBytes(){return this.reader?this.reader.getProgress().total:0}getProcessedBytes(){return this.reader?this.reader.getOffset():0}getFrameData(e){if(e===this.currentFrameIndex&&this.lastFrameData)return this.lastFrameData;let r=this.state;return this.pause(),this.seek(e),r===1&&this.play(),this.lastFrameData}getFramePlayerState(e){if(e===this.currentFrameIndex&&this.handler?.getPlayerState){let n=this.handler.getPlayerState();if(n)return n}let r=this.getFrameData(e);return r?r.playerState:null}getFrameEntities(e){if(e===this.currentFrameIndex&&this.handler?.getEntities){let r=this.handler.getEntities();if(r)return Array.from(r.values())}if(this.seek(e),this.handler?.getEntities){let r=this.handler.getEntities();return r?Array.from(r.values()):[]}return[]}compareFrames(e,r){let n=this.getFramePlayerState(e),i=this.getFrameEntities(e),s=new Map;i.forEach(c=>s.set(c.number,c));let a=this.getFramePlayerState(r),o=this.getFrameEntities(r),u=new Map;o.forEach(c=>u.set(c.number,c));let l={frameA:e,frameB:r,playerStateDiff:{origin:null,viewangles:null,health:null,ammo:null},entityDiffs:{added:[],removed:[],moved:[]}};n&&a&&((n.origin.x!==a.origin.x||n.origin.y!==a.origin.y||n.origin.z!==a.origin.z)&&(l.playerStateDiff.origin={x:a.origin.x-n.origin.x,y:a.origin.y-n.origin.y,z:a.origin.z-n.origin.z}),n.stats[1]!==a.stats[1]&&(l.playerStateDiff.health=a.stats[1]-n.stats[1]),n.stats[2]!==a.stats[2]&&(l.playerStateDiff.ammo=a.stats[2]-n.stats[2]));for(let[c,f]of u){let d=s.get(c);d?(d.origin.x!==f.origin.x||d.origin.y!==f.origin.y||d.origin.z!==f.origin.z)&&l.entityDiffs.moved.push({id:c,delta:{x:f.origin.x-d.origin.x,y:f.origin.y-d.origin.y,z:f.origin.z-d.origin.z}}):l.entityDiffs.added.push(c)}for(let[c,f]of s)u.has(c)||l.entityDiffs.removed.push(c);return l}getEntityTrajectory(e,r,n){let i=[],s=this.getCurrentFrame();for(this.seek(r);this.getCurrentFrame()<=n&&this.state!==3;){let a=null;if(e===-1){let o=this.getFramePlayerState(this.getCurrentFrame());o&&(a={...o.origin})}else if(this.handler?.getEntities){let o=this.handler.getEntities().get(e);o&&(a={...o.origin})}if(a&&i.push(a),this.getCurrentFrame()===n)break;this.stepForward()}return this.seek(s),i}getEvents(){return this.ensureAnalysis(),this.cachedEvents||[]}getDemoEvents(){return this.getEvents()}filterEvents(e,r){return this.getDemoEvents().filter(i=>!(i.type!==e||r!==void 0&&i.entityId!==r))}getEventSummary(){return this.ensureAnalysis(),this.cachedSummary||{totalKills:0,totalDeaths:0,damageDealt:0,damageReceived:0,weaponUsage:new Map}}getMetadata(){let e=this.getDemoHeader();if(!e)return null;let r=this.getDemoServerInfo(),n="Unknown";return this.cachedConfigStrings,{mapName:e.levelName,playerName:n,serverName:r.hostname,demoVersion:e.protocolVersion,tickRate:e.tickRate||10}}getDemoHeader(){return this.ensureAnalysis(),this.cachedHeader}getDemoConfigStrings(){return this.ensureAnalysis(),this.cachedConfigStrings||new Map}getDemoServerInfo(){return this.ensureAnalysis(),this.cachedServerInfo||{}}getDemoStatistics(){return this.ensureAnalysis(),this.cachedStatistics}getPlayerStatistics(e){return this.ensureAnalysis(),this.cachedPlayerStats?.get(e)||null}getWeaponStatistics(e){return this.ensureAnalysis(),this.cachedWeaponStats?.get(e)||null}ensureAnalysis(){if(!this.cachedEvents&&this.buffer){let r=new gi(this.buffer).analyze();this.cachedEvents=r.events,this.cachedSummary=r.summary,this.cachedHeader=r.header,this.cachedConfigStrings=r.configStrings,this.cachedServerInfo=r.serverInfo,this.cachedStatistics=r.statistics,this.cachedPlayerStats=r.playerStats,this.cachedWeaponStats=r.weaponStats}}setCameraMode(e){this.cameraMode=e}getCameraMode(){return this.cameraMode}setThirdPersonDistance(e){this.thirdPersonDistance=e}setThirdPersonOffset(e){this.thirdPersonOffset=e}async playWithTracking(e,r={}){if(this.tracker=e,e.startTracking(),r.fastForward)try{this.state===0&&this.reader,this.transitionState(1);let n=100,i=async()=>{if(this.state!==1)throw new Error("Playback stopped unexpectedly during fast forward");let s=0;for(;s<n;){if(!this.processNextFrame()){let a=e.stopTracking();return this.tracker=null,this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),a}s++}return await new Promise(a=>setTimeout(a,0)),i()};return await i()}catch(n){throw e.stopTracking(),this.tracker=null,n}else return new Promise((n,i)=>{let s=this.callbacks?.onPlaybackComplete,a=this.callbacks?.onPlaybackError,o=()=>{this.setCallbacks({...this.callbacks,onPlaybackComplete:s,onPlaybackError:a}),this.tracker=null};this.setCallbacks({...this.callbacks,onPlaybackComplete:()=>{let u=e.stopTracking();s&&s(),o(),n(u)},onPlaybackError:u=>{e.stopTracking(),a&&a(u),o(),i(u)}}),this.play()})}async playRangeWithTracking(e,r,n,i={}){this.tracker=n,n.startTracking();let s=e.type==="frame"?e.frame:this.timeToFrame(e.seconds),a=r.type==="frame"?r.frame:this.timeToFrame(r.seconds);if(i.fastForward)try{this.playFrom(e),this.transitionState(1);let o=100,u=async()=>{if(this.state!==1)throw new Error("Playback stopped unexpectedly during fast forward");let l=0;for(;l<o;){if(this.currentFrameIndex>=a||!this.processNextFrame()){let c=n.stopTracking();return this.tracker=null,this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),c}l++}return await new Promise(c=>setTimeout(c,0)),u()};return await u()}catch(o){throw n.stopTracking(),this.tracker=null,o}else return new Promise((o,u)=>{let l=this.callbacks?.onPlaybackComplete,c=this.callbacks?.onPlaybackError,f=()=>{this.setCallbacks({...this.callbacks,onPlaybackComplete:l,onPlaybackError:c}),this.tracker=null};this.setCallbacks({...this.callbacks,onPlaybackComplete:()=>{let d=n.stopTracking();l&&l(),f(),o(d)},onPlaybackError:d=>{n.stopTracking(),c&&c(d),f(),u(d)}}),this.playRange(e,r)})}};var js=class{constructor(){this.isRecording=!1;this.startTime=0;this.frameCount=0;this.filename=null;this.lastMessageSize=-1;this.messageBuffer=new Et(1024*1024)}startRecording(e,r=0){this.isRecording||(this.isRecording=!0,this.filename=e,this.startTime=r,this.frameCount=0,this.messageBuffer.reset(),console.log(`DemoRecorder: Started recording to ${e}`))}recordMessage(e){if(this.isRecording){this.messageBuffer.writeLong(e.byteLength);for(let r=0;r<e.length;r++)this.messageBuffer.writeByte(e[r]);this.frameCount++}}stopRecording(){return this.isRecording?(this.isRecording=!1,this.messageBuffer.writeLong(-1),console.log(`DemoRecorder: Stopped recording. Frames: ${this.frameCount}, Size: ${this.messageBuffer.getOffset()} bytes`),this.messageBuffer.getData()):null}getIsRecording(){return this.isRecording}};var cx={[M.bad]:0,[M.nop]:1,[M.disconnect]:2,[M.reconnect]:3,[M.download]:16,[M.frame]:5,[M.inventory]:6,[M.layout]:7,[M.muzzleflash]:8,[M.sound]:9,[M.print]:10,[M.stufftext]:11,[M.serverdata]:12,[M.configstring]:13,[M.spawnbaseline]:14,[M.centerprint]:15,[M.playerinfo]:17,[M.packetentities]:18,[M.deltapacketentities]:19,[M.temp_entity]:23,[M.muzzleflash2]:22},wn=class{constructor(){this.writer=new Et}getData(){return this.writer.getData()}writeCommand(e,r=0){if(r===34){let n=cx[e];if(n!==void 0){this.writer.writeByte(n);return}}this.writer.writeByte(e)}writeServerData(e,r,n,i,s,a){this.writeCommand(M.serverdata,e),this.writer.writeLong(e),this.writer.writeLong(r),this.writer.writeByte(n),this.writer.writeString(i),this.writer.writeShort(s),this.writer.writeString(a)}writeServerDataRerelease(e,r,n,i,s,a,o){this.writeCommand(M.serverdata,e),this.writer.writeLong(e),this.writer.writeLong(r),this.writer.writeByte(n),this.writer.writeByte(i),this.writer.writeString(s),this.writer.writeShort(a),this.writer.writeString(o)}writeConfigString(e,r,n=0){this.writeCommand(M.configstring,n),this.writer.writeShort(e),this.writer.writeString(r)}writeSpawnBaseline(e,r){this.writeCommand(M.spawnbaseline,r),this.writeEntityState(e,null,!0,r)}writeStuffText(e,r=0){this.writeCommand(M.stufftext,r),this.writer.writeString(e)}writeCenterPrint(e,r=0){this.writeCommand(M.centerprint,r),this.writer.writeString(e)}writePrint(e,r,n=0){this.writeCommand(M.print,n),this.writer.writeByte(e),this.writer.writeString(r)}writeLayout(e,r=0){this.writeCommand(M.layout,r),this.writer.writeString(e)}writeInventory(e,r=0){this.writeCommand(M.inventory,r);for(let n=0;n<256;n++)this.writer.writeShort(e[n]||0)}writeMuzzleFlash(e,r,n=0){this.writeCommand(M.muzzleflash,n),this.writer.writeShort(e),this.writer.writeByte(r)}writeMuzzleFlash2(e,r,n=0){this.writeCommand(M.muzzleflash2,n),this.writer.writeShort(e),this.writer.writeByte(r)}writeTempEntity(e,r,n,i,s,a,o,u,l,c=0){switch(this.writeCommand(M.temp_entity,c),this.writer.writeByte(e),e){case E.EXPLOSION1:case E.EXPLOSION2:case E.ROCKET_EXPLOSION:case E.GRENADE_EXPLOSION:case E.ROCKET_EXPLOSION_WATER:case E.GRENADE_EXPLOSION_WATER:case E.BFG_EXPLOSION:case E.BFG_BIGEXPLOSION:case E.BOSSTPORT:case E.PLASMA_EXPLOSION:case E.PLAIN_EXPLOSION:case E.CHAINFIST_SMOKE:case E.TRACKER_EXPLOSION:case E.TELEPORT_EFFECT:case E.DBALL_GOAL:case E.NUKEBLAST:case E.WIDOWSPLASH:case E.EXPLOSION1_BIG:case E.EXPLOSION1_NP:this.writer.writePos(r);break;case E.GUNSHOT:case E.BLOOD:case E.BLASTER:case E.SHOTGUN:case E.SPARKS:case E.BULLET_SPARKS:case E.SCREEN_SPARKS:case E.SHIELD_SPARKS:case E.BLASTER2:case E.FLECHETTE:case E.MOREBLOOD:case E.ELECTRIC_SPARKS:case E.HEATBEAM_SPARKS:case E.HEATBEAM_STEAM:this.writer.writePos(r),this.writer.writeDir(i||{x:0,y:0,z:0});break;case E.SPLASH:case E.LASER_SPARKS:case E.WELDING_SPARKS:case E.TUNNEL_SPARKS:this.writer.writeByte(s||0),this.writer.writePos(r),this.writer.writeDir(i||{x:0,y:0,z:0}),this.writer.writeByte(a||0);break;case E.BLUEHYPERBLASTER:c>=32?(this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0})):(this.writer.writePos(r),this.writer.writeDir(i||{x:0,y:0,z:0}));break;case E.GREENBLOOD:c>=32?(this.writer.writePos(r),this.writer.writeDir(i||{x:0,y:0,z:0})):(this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0}));break;case E.RAILTRAIL:case E.BUBBLETRAIL:case E.BFG_LASER:case E.DEBUGTRAIL:case E.BUBBLETRAIL2:this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0});break;case E.PARASITE_ATTACK:case E.MEDIC_CABLE_ATTACK:this.writer.writeShort(o||0),this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0});break;case E.GRAPPLE_CABLE:this.writer.writeShort(o||0),this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0}),this.writer.writePos(i||{x:0,y:0,z:0});break;case E.LIGHTNING:this.writer.writeShort(u||0),this.writer.writeShort(l||0),this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0});break;case E.FLASHLIGHT:this.writer.writePos(r),this.writer.writeShort(o||0);break;case E.FORCEWALL:this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0}),this.writer.writeByte(a||0);break;case E.STEAM:this.writer.writeShort(-1),this.writer.writeByte(s||0),this.writer.writePos(r),this.writer.writeDir(i||{x:0,y:0,z:0}),this.writer.writeByte(a||0),this.writer.writeShort(0);break;case E.WIDOWBEAMOUT:this.writer.writeShort(0);case E.HEATBEAM:case E.MONSTER_HEATBEAM:this.writer.writeShort(o||0),this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0}),this.writer.writeDir(i||{x:0,y:0,z:0});break;default:console.warn(`writeTempEntity: Unhandled type ${e}`);break}}writeSound(e,r,n,i,s,a,o,u=0){this.writeCommand(M.sound,u),this.writer.writeByte(e),this.writer.writeByte(r),e&1&&this.writer.writeByte(n||0),e&2&&this.writer.writeByte(i||0),e&16&&this.writer.writeByte(s||0),e&8&&this.writer.writeShort(a||0),e&4&&o&&(this.writer.writeCoord(o.x),this.writer.writeCoord(o.y),this.writer.writeCoord(o.z))}writeDisconnect(e=0){this.writeCommand(M.disconnect,e)}writeReconnect(e=0){this.writeCommand(M.reconnect,e)}writeFrame(e,r){this.writeCommand(M.frame,r),this.writer.writeLong(e.serverFrame),this.writer.writeLong(e.deltaFrame),r!==25&&r!==26&&this.writer.writeByte(e.surpressCount),this.writer.writeByte(e.areaBytes),e.areaBytes>0&&this.writer.writeBytes(e.areaBits),this.writeCommand(M.playerinfo,r),this.writePlayerState(e.playerState),this.writePacketEntities(e.packetEntities.entities,e.packetEntities.delta,r)}writePlayerState(e){let r=0;e.pm_type!==0&&(r|=1),(e.origin.x!==0||e.origin.y!==0||e.origin.z!==0)&&(r|=2),(e.velocity.x!==0||e.velocity.y!==0||e.velocity.z!==0)&&(r|=4),e.pm_time!==0&&(r|=8),e.pm_flags!==0&&(r|=16),e.gravity!==0&&(r|=32),(e.delta_angles.x!==0||e.delta_angles.y!==0||e.delta_angles.z!==0)&&(r|=64),(e.viewoffset.x!==0||e.viewoffset.y!==0||e.viewoffset.z!==0)&&(r|=128),(e.viewangles.x!==0||e.viewangles.y!==0||e.viewangles.z!==0)&&(r|=256),(e.kick_angles.x!==0||e.kick_angles.y!==0||e.kick_angles.z!==0)&&(r|=512),(e.blend[0]!==0||e.blend[1]!==0||e.blend[2]!==0||e.blend[3]!==0)&&(r|=1024),e.gun_index!==0&&(r|=4096),(e.gun_frame!==0||e.gun_offset.x!==0||e.gun_offset.y!==0||e.gun_offset.z!==0||e.gun_angles.x!==0||e.gun_angles.y!==0||e.gun_angles.z!==0)&&(r|=8192),e.fov!==0&&(r|=2048),e.rdflags!==0&&(r|=16384),this.writer.writeShort(r),r&1&&this.writer.writeByte(e.pm_type),r&2&&(this.writer.writeCoord(e.origin.x),this.writer.writeCoord(e.origin.y),this.writer.writeCoord(e.origin.z)),r&4&&(this.writer.writeCoord(e.velocity.x),this.writer.writeCoord(e.velocity.y),this.writer.writeCoord(e.velocity.z)),r&8&&this.writer.writeByte(e.pm_time),r&16&&this.writer.writeByte(e.pm_flags),r&32&&this.writer.writeShort(e.gravity),r&64&&(this.writer.writeShort(Math.round(e.delta_angles.x*(32768/180))),this.writer.writeShort(Math.round(e.delta_angles.y*(32768/180))),this.writer.writeShort(Math.round(e.delta_angles.z*(32768/180)))),r&128&&(this.writer.writeChar(Math.round(e.viewoffset.x*4)),this.writer.writeChar(Math.round(e.viewoffset.y*4)),this.writer.writeChar(Math.round(e.viewoffset.z*4))),r&256&&(this.writer.writeAngle16(e.viewangles.x),this.writer.writeAngle16(e.viewangles.y),this.writer.writeAngle16(e.viewangles.z)),r&512&&(this.writer.writeChar(Math.round(e.kick_angles.x*4)),this.writer.writeChar(Math.round(e.kick_angles.y*4)),this.writer.writeChar(Math.round(e.kick_angles.z*4))),r&4096&&this.writer.writeByte(e.gun_index),r&8192&&(this.writer.writeByte(e.gun_frame),this.writer.writeChar(Math.round(e.gun_offset.x*4)),this.writer.writeChar(Math.round(e.gun_offset.y*4)),this.writer.writeChar(Math.round(e.gun_offset.z*4)),this.writer.writeChar(Math.round(e.gun_angles.x*4)),this.writer.writeChar(Math.round(e.gun_angles.y*4)),this.writer.writeChar(Math.round(e.gun_angles.z*4))),r&1024&&(this.writer.writeByte(e.blend[0]),this.writer.writeByte(e.blend[1]),this.writer.writeByte(e.blend[2]),this.writer.writeByte(e.blend[3])),r&2048&&this.writer.writeByte(e.fov),r&16384&&this.writer.writeByte(e.rdflags);let n=0;for(let i=0;i<32;i++)e.stats[i]!==0&&(n|=1<<i);this.writer.writeLong(n);for(let i=0;i<32;i++)n&1<<i&&this.writer.writeShort(e.stats[i])}writePacketEntities(e,r,n){this.writeCommand(r?M.deltapacketentities:M.packetentities,n);for(let i of e){let s=!r;this.writeEntityState(i,null,s,n)}this.writer.writeShort(0)}writeEntityState(e,r,n,i){let s=0,a=0;e.bits!==0&&!n?(s=e.bits,a=e.bitsHigh):(e.modelindex!==0&&(s|=Cr),e.modelindex2!==0&&(s|=Ir),e.modelindex3!==0&&(s|=Rr),e.modelindex4!==0&&(s|=Fr),e.frame!==0&&(e.frame>=256?s|=Pr:s|=Mr),e.skinnum!==0&&(e.skinnum>=256?s|=At:s|=_t),e.effects!==0&&(e.effects>=256?s|=St:s|=vt),e.renderfx!==0&&(e.renderfx>=256?s|=wt:s|=xt),e.origin.x!==0&&(s|=_r),e.origin.y!==0&&(s|=wr),e.origin.z!==0&&(s|=Lr),e.angles.x!==0&&(s|=Tr),e.angles.y!==0&&(s|=Sr),e.angles.z!==0&&(s|=Ar),(e.old_origin.x!==0||e.old_origin.y!==0||e.old_origin.z!==0)&&(s|=Br),e.sound!==0&&(s|=Dr),e.event!==0&&(s|=Er),e.solid!==0&&(s|=Or),i>=2023&&(e.alpha!==0&&(s|=kr),e.scale!==0&&(s|=zr),e.instanceBits!==0&&(s|=Nr),e.loopVolume!==0&&(s|=Ur),e.loopAttenuation!==0&&(a|=Hr),e.owner!==0&&(a|=Vr),e.oldFrame!==0&&(a|=Gr)),e.number>=256&&(s|=No)),a!==0&&(s|=Vo),(s&4278190080)!==0&&(s|=Ho),(s&16711680)!==0&&(s|=Uo),(s&65280)!==0&&(s|=Ys),this.writer.writeByte(s&255),s&Ys&&this.writer.writeByte(s>>8&255),s&Uo&&this.writer.writeByte(s>>16&255),s&Ho&&this.writer.writeByte(s>>24&255),i>=2023&&s&Vo&&this.writer.writeByte(a&255),s&No?this.writer.writeShort(e.number):this.writer.writeByte(e.number),s&Cr&&this.writer.writeByte(e.modelindex),s&Ir&&this.writer.writeByte(e.modelindex2),s&Rr&&this.writer.writeByte(e.modelindex3),s&Fr&&this.writer.writeByte(e.modelindex4),s&Mr&&this.writer.writeByte(e.frame),s&Pr&&this.writer.writeShort(e.frame),s&_t&&s&At?this.writer.writeLong(e.skinnum):s&_t?this.writer.writeByte(e.skinnum):s&At&&this.writer.writeShort(e.skinnum),s&vt&&s&St?this.writer.writeLong(e.effects):s&vt?this.writer.writeByte(e.effects):s&St&&this.writer.writeShort(e.effects),s&xt&&s&wt?this.writer.writeLong(e.renderfx):s&xt?this.writer.writeByte(e.renderfx):s&wt&&this.writer.writeShort(e.renderfx),s&_r&&this.writer.writeCoord(e.origin.x),s&wr&&this.writer.writeCoord(e.origin.y),s&Lr&&this.writer.writeCoord(e.origin.z),s&Tr&&this.writer.writeAngle(e.angles.x),s&Sr&&this.writer.writeAngle(e.angles.y),s&Ar&&this.writer.writeAngle(e.angles.z),s&Br&&(this.writer.writeCoord(e.old_origin.x),this.writer.writeCoord(e.old_origin.y),this.writer.writeCoord(e.old_origin.z)),s&Dr&&this.writer.writeByte(e.sound),s&Er&&this.writer.writeByte(e.event),s&Or&&this.writer.writeShort(e.solid),i>=2023&&(s&kr&&this.writer.writeByte(Math.round(e.alpha*255)),s&zr&&this.writer.writeFloat(e.scale),s&Nr&&this.writer.writeLong(e.instanceBits),s&Ur&&this.writer.writeByte(Math.round(e.loopVolume*255)),a&Hr&&this.writer.writeByte(Math.round(e.loopAttenuation*255)),a&Vr&&this.writer.writeShort(e.owner),a&Gr&&this.writer.writeShort(e.oldFrame))}};var Wo=class{static validate(e,r){if(r&&!r.toLowerCase().endsWith(".dm2"))return{valid:!1,error:"Invalid file extension (expected .dm2)"};if(e.byteLength<5)return{valid:!1,error:"File too small to be a valid demo"};let n=new DataView(e),i=n.getInt32(0,!0);if(i<=0||i>e.byteLength-4)return{valid:!1,error:`Invalid first block length: ${i}`};let s=n.getUint8(4);if(s!==M.serverdata)return{valid:!1,error:`First command is not svc_serverdata (expected ${M.serverdata}, got ${s})`};let a=-1;return i>=5&&(a=n.getInt32(5,!0)),{valid:!0,version:a}}};var Xo=class{constructor(){this.writer=new Et}writeBlock(e){this.writer.writeLong(e.byteLength),this.writer.writeBytes(e)}writeEOF(){this.writer.writeLong(-1)}getData(){return this.writer.getData()}};function Ko(t,e){let r=e.bits,n=e.bitsHigh;t.number=e.number,r&Cr&&(t.modelindex=e.modelindex),r&Ir&&(t.modelindex2=e.modelindex2),r&Rr&&(t.modelindex3=e.modelindex3),r&Fr&&(t.modelindex4=e.modelindex4),r&Mr&&(t.frame=e.frame),r&Pr&&(t.frame=e.frame),(r&_t||r&At)&&(t.skinnum=e.skinnum),(r&vt||r&St)&&(t.effects=e.effects),(r&xt||r&wt)&&(t.renderfx=e.renderfx),r&_r&&(t.origin.x=e.origin.x),r&wr&&(t.origin.y=e.origin.y),r&Lr&&(t.origin.z=e.origin.z),r&Tr&&(t.angles.x=e.angles.x),r&Sr&&(t.angles.y=e.angles.y),r&Ar&&(t.angles.z=e.angles.z),r&Br&&(t.old_origin.x=e.old_origin.x,t.old_origin.y=e.old_origin.y,t.old_origin.z=e.old_origin.z),r&Dr&&(t.sound=e.sound),r&Er&&(t.event=e.event),r&Or&&(t.solid=e.solid),r&kr&&(t.alpha=e.alpha),r&zr&&(t.scale=e.scale),r&Nr&&(t.instanceBits=e.instanceBits),r&Ur&&(t.loopVolume=e.loopVolume),n&Hr&&(t.loopAttenuation=e.loopAttenuation),n&Vr&&(t.owner=e.owner),n&Gr&&(t.oldFrame=e.oldFrame)}var $o=class{extractClip(e,r,n,i){let s=new Qe(e.buffer),a=r.type==="frame"?r.frame:i.timeToFrame(r.seconds),o=n.type==="frame"?n.frame:i.timeToFrame(n.seconds);if(!s.seekToMessage(a))throw new Error(`Start frame ${a} out of bounds`);let u=s.getOffset(),l=e.byteLength;s.seekToMessage(o+1)&&(l=s.getOffset());let c=e.slice(u,l),f=new Uint8Array(c.length+4);return f.set(c),new DataView(f.buffer).setInt32(c.length,-1,!0),f}extractDemoRange(e,r,n){let i=new Wt;return i.loadDemo(e.buffer),this.extractClip(e,{type:"frame",frame:r},{type:"frame",frame:n},i)}async captureWorldState(e,r){let n=new Wt;n.loadDemo(e.buffer);let i={serverData:{protocol:0,serverCount:0,attractLoop:0,gameDir:"",playerNum:0,levelName:""},configStrings:new Map,entityBaselines:new Map,playerState:_n(),currentEntities:new Map,currentFrameNumber:0},s={onServerData:(o,u,l,c,f,d,h,m)=>{i.serverData={protocol:o,serverCount:u,attractLoop:l,gameDir:c,playerNum:f,levelName:d,tickRate:h,demoType:m}},onConfigString:(o,u)=>{i.configStrings.set(o,u)},onSpawnBaseline:o=>{i.entityBaselines.set(o.number,{...o})},onFrame:o=>{i.playerState={...o.playerState},i.currentFrameNumber=o.serverFrame,o.packetEntities.delta||i.currentEntities.clear();let u=new Map;if(o.packetEntities.delta)for(let[l,c]of i.currentEntities)u.set(l,c);for(let l of o.packetEntities.entities){if(l.bits&qs){u.delete(l.number);continue}let c=u.get(l.number);if(c)c={...c};else{let f=i.entityBaselines.get(l.number);f?c={...f}:(c=Gt(),c.number=l.number)}Ko(c,l),u.set(l.number,c)}i.currentEntities=u},onCenterPrint:()=>{},onStuffText:()=>{},onPrint:()=>{},onSound:()=>{},onTempEntity:()=>{},onLayout:()=>{},onInventory:()=>{},onMuzzleFlash:()=>{},onMuzzleFlash2:()=>{},onDisconnect:()=>{},onReconnect:()=>{},onDownload:()=>{}};n.setHandler(s);let a=r.type==="frame"?r.frame:n.timeToFrame(r.seconds);return n.seek(a),i}extractStandaloneClip(e,r,n,i){let s=new Xo,a=new wn,o=new Wt;o.loadDemo(e.buffer);let u=r.type==="frame"?r.frame:o.timeToFrame(r.seconds),l=n.type==="frame"?n.frame:o.timeToFrame(n.seconds),{serverData:c}=i;c.protocol>=2023?a.writeServerDataRerelease(c.protocol,c.serverCount,c.demoType||0,c.tickRate||10,c.gameDir,c.playerNum,c.levelName):a.writeServerData(c.protocol,c.serverCount,c.attractLoop,c.gameDir,c.playerNum,c.levelName);for(let[g,p]of i.configStrings)a.writeConfigString(g,p,c.protocol);for(let g of i.entityBaselines.values())a.writeSpawnBaseline(g,c.protocol);let f=Array.from(i.currentEntities.values()),d={serverFrame:0,deltaFrame:-1,surpressCount:0,areaBytes:0,areaBits:new Uint8Array(0),playerState:i.playerState,packetEntities:{delta:!1,entities:f}};a.writeFrame(d,c.protocol),s.writeBlock(a.getData());let h=new Map;h.set(u,0);let m=new Qe(e.buffer);if(m.seekToMessage(u+1)){let g=u+1;for(;g<=l&&m.nextBlock();){let y=m.getBlock().data,v=new wn,x={onServerData:()=>{},onConfigString:(S,w)=>v.writeConfigString(S,w,c.protocol),onSpawnBaseline:S=>v.writeSpawnBaseline(S,c.protocol),onCenterPrint:S=>v.writeCenterPrint(S,c.protocol),onStuffText:S=>v.writeStuffText(S,c.protocol),onPrint:(S,w)=>v.writePrint(S,w,c.protocol),onSound:(S,w,L,C,A,k,R)=>v.writeSound(S,w,L,C,A,k,R,c.protocol),onLayout:S=>v.writeLayout(S,c.protocol),onInventory:S=>v.writeInventory(S,c.protocol),onMuzzleFlash:(S,w)=>v.writeMuzzleFlash(S,w,c.protocol),onMuzzleFlash2:(S,w)=>v.writeMuzzleFlash2(S,w,c.protocol),onTempEntity:(S,w,L,C,A,k,R,B,P)=>v.writeTempEntity(S,w,L,C,A,k,R,B,P,c.protocol),onDisconnect:()=>v.writeDisconnect(c.protocol),onReconnect:()=>v.writeReconnect(c.protocol),onDownload:()=>{},onFrame:S=>{let w=S.serverFrame,L=S.deltaFrame,C=g-u,A=-1;h.has(L)?A=h.get(L):S.packetEntities.delta=!1,h.set(w,C),S.serverFrame=C,S.deltaFrame=A,v.writeFrame(S,c.protocol)}},b=new Ve(y,x,!1);b.setProtocolVersion(c.protocol),b.parseMessage();let _=v.getData();_.byteLength>0&&s.writeBlock(_),g++}}return s.writeEOF(),s.getData()}};var jc=(d=>(d.Unknown="unknown",d.BSP="bsp",d.MD2="md2",d.MD3="md3",d.WAL="wal",d.PCX="pcx",d.TGA="tga",d.WAV="wav",d.OGG="ogg",d.TXT="txt",d.CFG="cfg",d.DEM="dem",d))(jc||{}),Uh={".bsp":"bsp",".md2":"md2",".md3":"md3",".wal":"wal",".pcx":"pcx",".tga":"tga",".wav":"wav",".ogg":"ogg",".txt":"txt",".cfg":"cfg",".dm2":"dem"};function Qs(t,e){if(t.length<e.length)return!1;for(let r=0;r<e.length;r++)if(t[r]!==e[r])return!1;return!0}var ux=[73,66,83,80],dx=[73,68,80,50],fx=[73,68,80,51];var hx=[82,73,70,70];var mx=[79,103,103,83];function Qc(t,e){let r=t.slice(t.lastIndexOf(".")).toLowerCase();if(e){if(Qs(e,ux))return"bsp";if(Qs(e,dx))return"md2";if(Qs(e,fx))return"md3";if(Qs(e,mx))return"ogg";if(e.length>128&&e[0]===10&&e[1]<6)return"pcx";if(Qs(e,hx)&&e.length>=12&&e[8]===87&&e[9]===65&&e[10]===86&&e[11]===69)return"wav"}return Uh[r]?Uh[r]:"unknown"}function Jc(t){let e=Qc(t);return e==="txt"||e==="cfg"}function Hh(t){return!Jc(t)}function px(t,e,r,n,i){let s=new Uint8ClampedArray(n*i*4),a=e/n,o=r/i;for(let u=0;u<i;u++)for(let l=0;l<n;l++){let c=l*a,f=u*o,d=Math.floor(c),h=Math.floor(f),m=c-d,g=f-h,p=Math.min(d+1,e-1),y=Math.min(h+1,r-1),v=(h*e+d)*4,x=(h*e+p)*4,b=(y*e+d)*4,_=(y*e+p)*4,S=(u*n+l)*4;for(let w=0;w<4;w++){let L=t[v+w],C=t[x+w],A=t[b+w],k=t[_+w],R=L*(1-m)+C*m,B=A*(1-m)+k*m,P=R*(1-g)+B*g;s[S+w]=P}}return s}function gx(t,e,r,n,i,s,a,o,u,l,c){n=Math.floor(n),i=Math.floor(i),s=Math.floor(s),a=Math.floor(a);let f=Math.abs(s-n),d=Math.abs(a-i),h=n<s?1:-1,m=i<a?1:-1,g=f-d;for(;;){if(n>=0&&n<e&&i>=0&&i<r){let y=(i*e+n)*4,v=1-c/255;t[y]=o*(c/255)+t[y]*v,t[y+1]=u*(c/255)+t[y+1]*v,t[y+2]=l*(c/255)+t[y+2]*v,t[y+3]=255}if(n===s&&i===a)break;let p=2*g;p>-d&&(g-=d,n+=h),p<f&&(g+=f,i+=m)}}function Vh(t,e,r,n,i){let o=(t.x-n.x)*.707-(t.y-n.y)*.707,u=(t.x-n.x)*.707+(t.y-n.y)*.707,l=t.z-n.z,c=.866,f=.5,d=u*c-l*f,h=u*f+l*c,m=e/2+o*i,g=r/2-h*i;return{x:m,y:g}}var Zo=class{constructor(e){this.assetManager=e}async generateTextureThumbnail(e,r){try{let n=await this.assetManager.loadTexture(e);if(!n||n.levels.length===0)return null;let i=n.levels[0],s=i.width/i.height,a=r,o=r;s>1?o=Math.floor(r/s):a=Math.floor(r*s),a=Math.max(1,a),o=Math.max(1,o);let u=px(i.rgba,i.width,i.height,a,o);return new ImageData(u,a,o)}catch(n){return console.error(`Failed to generate thumbnail for ${e}`,n),null}}async generateModelThumbnail(e,r){try{let n=[],i=[],s=e.split(".").pop()?.toLowerCase();if(s==="md2"){let p=await this.assetManager.loadMd2Model(e);if(!p||p.frames.length===0)return null;n=p.frames[0].vertices.map(v=>v.position);for(let v of p.triangles)i.push(v.vertexIndices[0],v.vertexIndices[1]),i.push(v.vertexIndices[1],v.vertexIndices[2]),i.push(v.vertexIndices[2],v.vertexIndices[0])}else if(s==="md3"){let p=await this.assetManager.loadMd3Model(e);if(!p||p.surfaces.length===0)return null;let y=0;for(let v of p.surfaces){if(v.vertices.length===0)continue;let x=v.vertices[0];n.push(...x.map(b=>({x:b.position.x,y:b.position.y,z:b.position.z})));for(let b of v.triangles)i.push(y+b.indices[0],y+b.indices[1]),i.push(y+b.indices[1],y+b.indices[2]),i.push(y+b.indices[2],y+b.indices[0]);y+=x.length}}else return null;if(n.length===0)return null;let a={x:1/0,y:1/0,z:1/0},o={x:-1/0,y:-1/0,z:-1/0};for(let p of n)a.x=Math.min(a.x,p.x),a.y=Math.min(a.y,p.y),a.z=Math.min(a.z,p.z),o.x=Math.max(o.x,p.x),o.y=Math.max(o.y,p.y),o.z=Math.max(o.z,p.z);let u={x:(a.x+o.x)/2,y:(a.y+o.y)/2,z:(a.z+o.z)/2},l=o.x-a.x,c=o.y-a.y,f=o.z-a.z,d=Math.max(l,c,f),h=Math.max(d,.001),m=r*.8/h,g=new Uint8ClampedArray(r*r*4);for(let p=0;p<i.length;p+=2){let y=i[p],v=i[p+1],x=n[y],b=n[v],_=Vh(x,r,r,u,m),S=Vh(b,r,r,u,m);gx(g,r,r,_.x,_.y,S.x,S.y,0,255,0,255)}return new ImageData(g,r,r)}catch(n){return console.error(`Failed to generate model thumbnail for ${e}`,n),null}}async getMapBounds(e,r){try{let n=Li(r);if(n.models.length>0){let i=n.models[0];return{mins:{x:i.mins[0],y:i.mins[1],z:i.mins[2]},maxs:{x:i.maxs[0],y:i.maxs[1],z:i.maxs[2]}}}return null}catch(n){return console.error("Failed to get map bounds",n),null}}async extractMapScreenshot(e){return null}};var Yo=class{constructor(e){this.loader=e}async getMapStatistics(e){let r=await this.loader.load(e),n=r.faces.filter(a=>a.lightOffset!==-1).length,i=r.models[0],s=i?{mins:i.mins,maxs:i.maxs}:{mins:[0,0,0],maxs:[0,0,0]};return{entityCount:r.entities.entities.length,surfaceCount:r.faces.length,lightmapCount:n,vertexCount:r.vertices.length,bounds:s}}async getUsedTextures(e){let r=await this.loader.load(e),n=new Set;for(let i of r.texInfo)i.texture&&n.add(i.texture);return Array.from(n).sort()}async getUsedModels(e){let r=await this.loader.load(e),n=new Set;for(let i of r.entities.entities)i.properties.model&&!i.properties.model.startsWith("*")&&n.add(i.properties.model);return Array.from(n).sort()}async getUsedSounds(e){let r=await this.loader.load(e),n=new Set;for(let i of r.entities.entities){i.properties.noise&&n.add(i.properties.noise);for(let[s,a]of Object.entries(i.properties))(s==="noise"||s.endsWith("_sound")||s==="sound")&&typeof a=="string"&&n.add(a)}return Array.from(n).sort()}};function Gh(t){let e=[],r=0,n=t.length;function i(){for(;r<n&&/\s/.test(t[r]);)r++}function s(){if(i(),r>=n)return null;if(t[r]==='"'){r++;let a=r;for(;r<n&&t[r]!=='"';)t[r],r++;let o=t.substring(a,r);return r++,o}else{if(t[r]==="{"||t[r]==="}")return t[r++];{if(t.startsWith("//",r)){for(;r<n&&t[r]!==`
608
+ `;)r++;return s()}let a=r;for(;r<n&&!/\s/.test(t[r])&&t[r]!=="}"&&t[r]!=="{";)r++;return t.substring(a,r)}}}for(;r<n;){let a=s();if(a===null)break;if(a==="{"){let o={};for(;;){let u=r,l=s();if(l==="}"||l===null)break;if(l==="{"){r=u;break}let c=s();if(c===null||c==="}"||c==="{"){c==="}"&&r--,c==="{"&&r--;break}o[l]=c}e.push({classname:o.classname,properties:o})}}return e}function Wh(t){let e="";for(let r of t){e+=`{
609
+ `;let i=Object.keys(r.properties).sort((s,a)=>s==="classname"?-1:a==="classname"?1:s==="origin"?-1:a==="origin"?1:s.localeCompare(a));for(let s of i){let a=r.properties[s];e+=`"${s}" "${a}"
610
+ `}e+=`}
611
+ `}return e}function Xh(t){let e=[],r=[];if(t.properties.classname||e.push('Missing "classname" property'),t.properties.origin){let n=t.properties.origin.split(" ");(n.length!==3||n.some(i=>isNaN(parseFloat(i))))&&e.push(`Invalid origin format: "${t.properties.origin}"`)}return t.properties.angle&&isNaN(parseFloat(t.properties.angle))&&e.push(`Invalid angle format: "${t.properties.angle}"`),{valid:e.length===0,errors:e,warnings:r}}async function Kh(t,e){if(!navigator.gpu)throw new Error("WebGPU is not supported in this environment");let r=await navigator.gpu.requestAdapter({powerPreference:e?.powerPreference||"high-performance"});if(!r)throw new Error("No appropriate GPUAdapter found");if(e?.requiredFeatures){for(let f of e.requiredFeatures)if(!r.features.has(f))throw new Error(`Required feature not available: ${f}`)}let n={requiredFeatures:e?.requiredFeatures,requiredLimits:e?.requiredLimits},i=await r.requestDevice(n),s,a="bgra8unorm",o=!0,u=0,l=0;if(t){if(s=t.getContext("webgpu"),!s)throw new Error("Failed to get WebGPU context from canvas");o=!1,a=navigator.gpu.getPreferredCanvasFormat(),u=t.width,l=t.height,s.configure({device:i,format:a,alphaMode:"opaque"})}else u=800,l=600;let c=new Set;for(let f of r.features)c.add(f);return{adapter:r,device:i,context:s,format:a,features:c,limits:i.limits,isHeadless:o,width:u,height:l}}function $h(t){let{features:e,limits:r}=t;return{hasTimestampQuery:e.has("timestamp-query"),hasDepthClipControl:e.has("depth-clip-control"),hasTextureCompressionBC:e.has("texture-compression-bc"),hasTextureCompressionETC2:e.has("texture-compression-etc2"),hasTextureCompressionASTC:e.has("texture-compression-astc"),maxTextureDimension2D:r.maxTextureDimension2D,maxBindGroups:r.maxBindGroups,maxUniformBufferBindingSize:r.maxUniformBufferBindingSize,maxStorageBufferBindingSize:r.maxStorageBufferBindingSize}}function Zh(t,e,r,n="rgba8unorm"){let i=typeof GPUTextureUsage<"u"?GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC:17,s=t.createTexture({size:{width:e,height:r,depthOrArrayLayers:1},format:n,usage:i}),a=s.createView();return{texture:s,view:a,width:e,height:r}}async function Yh(t,e){let r=e.width,n=e.height,i=4,s=r*i,a=256,o=Math.max(i*r,Math.ceil(r*i/a)*a),u=o*n,l=typeof GPUBufferUsage<"u"?GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ:9,c=t.createBuffer({size:u,usage:l}),f=t.createCommandEncoder();f.copyTextureToBuffer({texture:e},{buffer:c,bytesPerRow:o},{width:r,height:n,depthOrArrayLayers:1}),t.queue.submit([f.finish()]);let d=typeof GPUMapMode<"u"?GPUMapMode.READ:1;await c.mapAsync(d);let h=c.getMappedRange(),m=new Uint8Array(h),g=new Uint8ClampedArray(r*n*4);if(o===s)g.set(m);else for(let p=0;p<n;p++){let y=p*o,v=p*s;g.set(m.subarray(y,y+s),v)}return c.unmap(),g}var eu=(a=>(a[a.Disconnected=0]="Disconnected",a[a.Connecting=1]="Connecting",a[a.Challenge=2]="Challenge",a[a.Connected=3]="Connected",a[a.Loading=4]="Loading",a[a.Active=5]="Active",a))(eu||{}),qo=class{constructor(e){this.state=0;this.parser=null;this.listeners={};this.serverProtocol=0;this.serverCount=0;this.gameDir="";this.playerNum=0;this.levelName="";this.configStrings=new Map;this.baselines=new Map;this.entities=new Map;this.latestServerFrame=0;this.frameCRCs=new Map;this.currentPacketCRC=0;this.commandHistory=[];this.options=e,this.netchan=e.netchan??new Au}on(e,r){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(r)}off(e,r){this.listeners[e]&&(this.listeners[e]=this.listeners[e].filter(n=>n!==r))}emit(e,...r){this.listeners[e]&&this.listeners[e].forEach(n=>n(...r))}connect(){this.netchan.reset(),this.cleanup(),this.setState(1)}startProtocol(){this.state!==1&&this.connect(),this.setState(2),this.sendChallenge()}disconnect(){this.state!==0&&(this.setState(0),this.emit("disconnect"),this.cleanup())}cleanup(){this.configStrings.clear(),this.baselines.clear(),this.entities.clear(),this.commandHistory=[],this.latestServerFrame=0,this.parser=null,this.frameCRCs.clear()}getState(){return this.state}setState(e){this.state!==e&&(this.state=e,this.emit("state",e))}handleMessage(e){let r=this.netchan.process(new Uint8Array(e));if(!r||r.byteLength===0)return;this.currentPacketCRC=Su(r);let n=new Kt(r.buffer);this.parser=new Ve(n,this),this.serverProtocol&&this.parser.setProtocolVersion(this.serverProtocol),this.parser.parseMessage()}sendUserCommand(e){if(this.state!==5)return;let r={...e,serverFrame:e.serverFrame??this.latestServerFrame};this.commandHistory.push(r),this.commandHistory.length>_u&&this.commandHistory.shift();let n=new Et;n.writeByte($r.move);let i=this.frameCRCs.get(this.latestServerFrame)||0;n.writeByte(i),n.writeLong(this.latestServerFrame),wu(n,r),this.transmit(n.getData())}transmit(e){let r=this.netchan.transmit(e);this.emit("send",r)}sendChallenge(){let e=new wi;e.writeByte($r.stringcmd),e.writeString("getchallenge"),this.transmit(e.getData())}sendConnect(e){let r=new wi;r.writeByte($r.stringcmd);let n=`\\name\\${this.options.username}\\model\\${this.options.model}\\skin\\${this.options.skin}\\hand\\${this.options.hand??0}\\fov\\${this.options.fov??90}`;r.writeString(`connect ${vr} ${e} ${n}`),this.transmit(r.getData())}sendNew(){let e=new wi;e.writeByte($r.stringcmd),e.writeString("new"),this.transmit(e.getData())}sendBegin(){let e=new wi;e.writeByte($r.stringcmd),e.writeString("begin"),this.transmit(e.getData())}onServerData(e,r,n,i,s,a){this.serverProtocol=e,this.serverCount=r,this.gameDir=i,this.playerNum=s,this.levelName=a,this.setState(3),this.emit("serverdata",{protocol:e,serverCount:r,gameDir:i,levelName:a}),this.sendNew(),this.setState(4)}onConfigString(e,r){this.configStrings.set(e,r)}onSpawnBaseline(e){this.baselines.set(e.number,e)}onStuffText(e){if(this.emit("stufftext",e),e.startsWith("precache")&&(this.sendBegin(),this.setState(5)),e.startsWith("challenge ")){let r=e.split(" ");if(r.length>1){let n=parseInt(r[1],10);this.sendConnect(n)}}}onFrame(e){e.serverFrame>this.latestServerFrame&&(this.latestServerFrame=e.serverFrame),this.frameCRCs.set(e.serverFrame,this.currentPacketCRC);let r=e.packetEntities;r.delta||this.entities.clear();for(let n of r.entities)this.entities.set(n.number,n);this.emit("frame",e)}onDisconnect(){this.disconnect()}onPrint(e,r){this.emit("print",r,e)}onCenterPrint(e){this.emit("centerprint",e)}onSound(e,r,n,i,s,a,o){this.emit("sound",{flags:e,soundNum:r,volume:n,attenuation:i,offset:s,ent:a,pos:o})}onTempEntity(e,r,n,i,s,a,o,u,l){this.emit("temp_entity",{type:e,pos:r,pos2:n,dir:i,cnt:s,color:a,ent:o})}onInventory(e){this.emit("inventory",e)}onMuzzleFlash(e,r){this.emit("muzzleflash",e,r)}onMuzzleFlash2(e,r){}onMuzzleFlash3(e,r){this.emit("muzzleflash",e,r)}onDownload(e,r,n){this.emit("download",e,r,n)}onReconnect(){}onLayout(e){}onSplitClient(e){}onConfigBlast(e,r){}onSpawnBaselineBlast(e){}onLevelRestart(){}onDamage(e){}onLocPrint(e,r,n){}onFog(e){}onWaitingForPlayers(e){}onBotChat(e){}onPoi(e,r){}onHelpPath(e){}onAchievement(e){}};function yx(t){return{init(){t.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(e,r){return new Xr(e,r)},setAreaPortalState(e,r){t.renderer&&t.renderer.setAreaPortalState&&t.renderer.setAreaPortalState(e,r)}}}return sm(bx);})();
612
+ /*! Bundled license information:
613
+
614
+ pako/dist/pako.esm.mjs:
615
+ (*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) *)
616
+ */
617
+ //# sourceMappingURL=index.global.js.map