@sparkjsdev/spark 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const sA=require("three");var ke=typeof document<"u"?document.currentScript:null;function Fo(t){const A=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const e in t)if(e!=="default"){const s=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(A,e,s.get?s:{enumerable:!0,get:()=>t[e]})}}return A.default=t,Object.freeze(A)}const u=Fo(sA),ko=new sA.OrthographicCamera(-1,1,1,-1,0,1);class No extends sA.BufferGeometry{constructor(){super(),this.setAttribute("position",new sA.Float32BufferAttribute([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new sA.Float32BufferAttribute([0,2,0,0,2,0],2))}}const To=new No;class ws{constructor(A){this._mesh=new sA.Mesh(To,A)}dispose(){this._mesh.geometry.dispose()}render(A){A.render(this._mesh,ko)}get material(){return this._mesh.material}set material(A){this._mesh.material=A}}var uA=Uint8Array,xt=Uint16Array,Uo=Int32Array,ms=new uA([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,0,0,0]),xs=new uA([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,0,0]),Go=new uA([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Ss=function(t,A){for(var e=new xt(31),s=0;s<31;++s)e[s]=A+=1<<t[s-1];for(var n=new Uo(e[30]),s=1;s<30;++s)for(var i=e[s];i<e[s+1];++i)n[i]=i-e[s]<<5|s;return{b:e,r:n}},Ds=Ss(ms,2),Ms=Ds.b,Ro=Ds.r;Ms[28]=258,Ro[258]=28;var Yo=Ss(xs,0),Jo=Yo.b,Je=new xt(32768);for(var nA=0;nA<32768;++nA){var tt=(nA&43690)>>1|(nA&21845)<<1;tt=(tt&52428)>>2|(tt&13107)<<2,tt=(tt&61680)>>4|(tt&3855)<<4,Je[nA]=((tt&65280)>>8|(tt&255)<<8)>>1}var zt=function(t,A,e){for(var s=t.length,n=0,i=new xt(A);n<s;++n)t[n]&&++i[t[n]-1];var r=new xt(A);for(n=1;n<A;++n)r[n]=r[n-1]+i[n-1]<<1;var a;if(e){a=new xt(1<<A);var o=15-A;for(n=0;n<s;++n)if(t[n])for(var c=n<<4|t[n],l=A-t[n],g=r[t[n]-1]++<<l,I=g|(1<<l)-1;g<=I;++g)a[Je[g]>>o]=c}else for(a=new xt(s),n=0;n<s;++n)t[n]&&(a[n]=Je[r[t[n]-1]++]>>15-t[n]);return a},Zt=new uA(288);for(var nA=0;nA<144;++nA)Zt[nA]=8;for(var nA=144;nA<256;++nA)Zt[nA]=9;for(var nA=256;nA<280;++nA)Zt[nA]=7;for(var nA=280;nA<288;++nA)Zt[nA]=8;var vs=new uA(32);for(var nA=0;nA<32;++nA)vs[nA]=5;var Lo=zt(Zt,9,1),_o=zt(vs,5,1),Ne=function(t){for(var A=t[0],e=1;e<t.length;++e)t[e]>A&&(A=t[e]);return A},JA=function(t,A,e){var s=A/8|0;return(t[s]|t[s+1]<<8)>>(A&7)&e},Te=function(t,A){var e=A/8|0;return(t[e]|t[e+1]<<8|t[e+2]<<16)>>(A&7)},bs=function(t){return(t+7)/8|0},Mt=function(t,A,e){return(A==null||A<0)&&(A=0),(e==null||e>t.length)&&(e=t.length),new uA(t.subarray(A,e))},zo=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],mA=function(t,A,e){var s=new Error(A||zo[t]);if(s.code=t,Error.captureStackTrace&&Error.captureStackTrace(s,mA),!e)throw s;return s},Fs=function(t,A,e,s){var n=t.length,i=s?s.length:0;if(!n||A.f&&!A.l)return e||new uA(0);var r=!e,a=r||A.i!=2,o=A.i;r&&(e=new uA(n*3));var c=function(wA){var SA=e.length;if(wA>SA){var CA=new uA(Math.max(SA*2,wA));CA.set(e),e=CA}},l=A.f||0,g=A.p||0,I=A.b||0,h=A.l,B=A.d,C=A.m,Q=A.n,E=n*8;do{if(!h){l=JA(t,g,1);var f=JA(t,g+1,3);if(g+=3,f)if(f==1)h=Lo,B=_o,C=9,Q=5;else if(f==2){var D=JA(t,g,31)+257,x=JA(t,g+10,15)+4,y=D+JA(t,g+5,31)+1;g+=14;for(var m=new uA(y),N=new uA(19),M=0;M<x;++M)N[Go[M]]=JA(t,g+M*3,7);g+=x*3;for(var S=Ne(N),U=(1<<S)-1,F=zt(N,S,1),M=0;M<y;){var b=F[JA(t,g,U)];g+=b&15;var p=b>>4;if(p<16)m[M++]=p;else{var T=0,R=0;for(p==16?(R=3+JA(t,g,3),g+=2,T=m[M-1]):p==17?(R=3+JA(t,g,7),g+=3):p==18&&(R=11+JA(t,g,127),g+=7);R--;)m[M++]=T}}var O=m.subarray(0,D),L=m.subarray(D);C=Ne(O),Q=Ne(L),h=zt(O,C,1),B=zt(L,Q,1)}else mA(1);else{var p=bs(g)+4,d=t[p-4]|t[p-3]<<8,w=p+d;if(w>n){o&&mA(0);break}a&&c(I+d),e.set(t.subarray(p,w),I),A.b=I+=d,A.p=g=w*8,A.f=l;continue}if(g>E){o&&mA(0);break}}a&&c(I+131072);for(var eA=(1<<C)-1,H=(1<<Q)-1,W=g;;W=g){var T=h[Te(t,g)&eA],_=T>>4;if(g+=T&15,g>E){o&&mA(0);break}if(T||mA(2),_<256)e[I++]=_;else if(_==256){W=g,h=null;break}else{var j=_-254;if(_>264){var M=_-257,P=ms[M];j=JA(t,g,(1<<P)-1)+Ms[M],g+=P}var Z=B[Te(t,g)&H],G=Z>>4;Z||mA(3),g+=Z&15;var L=Jo[G];if(G>3){var P=xs[G];L+=Te(t,g)&(1<<P)-1,g+=P}if(g>E){o&&mA(0);break}a&&c(I+131072);var dA=I+j;if(I<L){var lA=i-L,yA=Math.min(L,dA);for(lA+I<0&&mA(3);I<yA;++I)e[I]=s[lA+I]}for(;I<dA;++I)e[I]=e[I-L]}}A.l=h,A.p=W,A.b=I,A.f=l,h&&(l=1,A.m=C,A.d=B,A.n=Q)}while(!l);return I!=e.length&&r?Mt(e,0,I):e.subarray(0,I)},qo=new uA(0),qA=function(t,A){return t[A]|t[A+1]<<8},LA=function(t,A){return(t[A]|t[A+1]<<8|t[A+2]<<16|t[A+3]<<24)>>>0},Ue=function(t,A){return LA(t,A)+LA(t,A+4)*4294967296},Ho=function(t){(t[0]!=31||t[1]!=139||t[2]!=8)&&mA(6,"invalid gzip data");var A=t[3],e=10;A&4&&(e+=(t[10]|t[11]<<8)+2);for(var s=(A>>3&1)+(A>>4&1);s>0;s-=!t[e++]);return e+(A&2)},Ge=function(){function t(A,e){typeof A=="function"&&(e=A,A={}),this.ondata=e;var s=A&&A.dictionary&&A.dictionary.subarray(-32768);this.s={i:0,b:s?s.length:0},this.o=new uA(32768),this.p=new uA(0),s&&this.o.set(s)}return t.prototype.e=function(A){if(this.ondata||mA(5),this.d&&mA(4),!this.p.length)this.p=A;else if(A.length){var e=new uA(this.p.length+A.length);e.set(this.p),e.set(A,this.p.length),this.p=e}},t.prototype.c=function(A){this.s.i=+(this.d=A||!1);var e=this.s.b,s=Fs(this.p,this.s,this.o);this.ondata(Mt(s,e,this.s.b),this.d),this.o=Mt(s,this.s.b-32768),this.s.b=this.o.length,this.p=Mt(this.p,this.s.p/8|0),this.s.p&=7},t.prototype.push=function(A,e){this.e(A),this.c(e)},t}();function Ko(t,A){return Fs(t,{i:2},A&&A.out,A&&A.dictionary)}var ks=function(){function t(A,e){this.v=1,this.r=0,Ge.call(this,A,e)}return t.prototype.push=function(A,e){if(Ge.prototype.e.call(this,A),this.r+=A.length,this.v){var s=this.p.subarray(this.v-1),n=s.length>3?Ho(s):4;if(n>s.length){if(!e)return}else this.v>1&&this.onmember&&this.onmember(this.r-s.length);this.p=s.subarray(n),this.v=0}Ge.prototype.c.call(this,e),this.s.f&&!this.s.l&&!e&&(this.v=bs(this.s.p)+9,this.s={i:0},this.o=new uA(0),this.push(new uA(0),e))},t}(),Le=typeof TextDecoder<"u"&&new TextDecoder,$o=0;try{Le.decode(qo,{stream:!0}),$o=1}catch{}var Vo=function(t){for(var A="",e=0;;){var s=t[e++],n=(s>127)+(s>223)+(s>239);if(e+n>t.length)return{s:A,r:Mt(t,e-1)};n?n==3?(s=((s&15)<<18|(t[e++]&63)<<12|(t[e++]&63)<<6|t[e++]&63)-65536,A+=String.fromCharCode(55296|s>>10,56320|s&1023)):n&1?A+=String.fromCharCode((s&31)<<6|t[e++]&63):A+=String.fromCharCode((s&15)<<12|(t[e++]&63)<<6|t[e++]&63):A+=String.fromCharCode(s)}};function Po(t,A){if(A){for(var e="",s=0;s<t.length;s+=16384)e+=String.fromCharCode.apply(null,t.subarray(s,s+16384));return e}else{if(Le)return Le.decode(t);var n=Vo(t),i=n.s,e=n.r;return e.length&&mA(8),i}}var Xo=function(t,A){return A+30+qA(t,A+26)+qA(t,A+28)},Oo=function(t,A,e){var s=qA(t,A+28),n=Po(t.subarray(A+46,A+46+s),!(qA(t,A+8)&2048)),i=A+46+s,r=LA(t,A+20),a=e&&r==4294967295?Wo(t,i):[r,LA(t,A+24),LA(t,A+42)],o=a[0],c=a[1],l=a[2];return[qA(t,A+10),o,c,n,i+qA(t,A+30)+qA(t,A+32),l]},Wo=function(t,A){for(;qA(t,A)!=1;A+=4+qA(t,A+2));return[Ue(t,A+12),Ue(t,A+4),Ue(t,A+20)]};function jo(t,A){for(var e={},s=t.length-22;LA(t,s)!=101010256;--s)(!s||t.length-s>65558)&&mA(13);var n=qA(t,s+8);if(!n)return{};var i=LA(t,s+16),r=i==4294967295||n==65535;if(r){var a=LA(t,s-12);r=LA(t,a)==101075792,r&&(n=LA(t,a+32),i=LA(t,a+48))}for(var o=A&&A.filter,c=0;c<n;++c){var l=Oo(t,i,r),g=l[0],I=l[1],h=l[2],B=l[3],C=l[4],Q=l[5],E=Xo(t,Q);i=C,(!o||o({name:B,size:I,originalSize:h,compression:g}))&&(g?g==8?e[B]=Ko(t.subarray(E,E+I),{out:new uA(h)}):mA(14,"unknown compression type "+g):e[B]=Mt(t,E,E+I))}return e}let WA;const Ns=typeof TextDecoder<"u"?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};typeof TextDecoder<"u"&&Ns.decode();let Jt=null;function Zo(){return(Jt===null||Jt.byteLength===0)&&(Jt=new Uint8Array(WA.memory.buffer)),Jt}function Ag(t,A){return t=t>>>0,Ns.decode(Zo().subarray(t,t+A))}function tg(t,A,e,s,n,i,r,a,o,c,l,g,I){return WA.raycast_splats(t,A,e,s,n,i,r,a,o,c,l,g,I)}async function eg(t,A){if(typeof Response=="function"&&t instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(t,A)}catch(s){if(t.headers.get("Content-Type")!="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",s);else throw s}const e=await t.arrayBuffer();return await WebAssembly.instantiate(e,A)}else{const e=await WebAssembly.instantiate(t,A);return e instanceof WebAssembly.Instance?{instance:e,module:t}:e}}function sg(){const t={};return t.wbg={},t.wbg.__wbg_buffer_609cc3eee51ed158=function(A){return A.buffer},t.wbg.__wbg_length_3b4f022188ae8db6=function(A){return A.length},t.wbg.__wbg_length_6ca527665d89694d=function(A){return A.length},t.wbg.__wbg_length_8cfd2c6409af88ad=function(A){return A.length},t.wbg.__wbg_new_9fee97a409b32b68=function(A){return new Uint16Array(A)},t.wbg.__wbg_new_e3b321dcfef89fc7=function(A){return new Uint32Array(A)},t.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354=function(A,e,s){return new Float32Array(A,e>>>0,s>>>0)},t.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212=function(A,e,s){return new Uint32Array(A,e>>>0,s>>>0)},t.wbg.__wbg_newwithlength_5a5efe313cfd59f1=function(A){return new Float32Array(A>>>0)},t.wbg.__wbg_set_10bad9bee0e9c58b=function(A,e,s){A.set(e,s>>>0)},t.wbg.__wbg_set_d23661d19148b229=function(A,e,s){A.set(e,s>>>0)},t.wbg.__wbg_set_f4f1f0daa30696fc=function(A,e,s){A.set(e,s>>>0)},t.wbg.__wbg_subarray_3aaeec89bb2544f0=function(A,e,s){return A.subarray(e>>>0,s>>>0)},t.wbg.__wbg_subarray_769e1e0f81bb259b=function(A,e,s){return A.subarray(e>>>0,s>>>0)},t.wbg.__wbindgen_init_externref_table=function(){const A=WA.__wbindgen_export_0,e=A.grow(4);A.set(0,void 0),A.set(e+0,void 0),A.set(e+1,null),A.set(e+2,!0),A.set(e+3,!1)},t.wbg.__wbindgen_memory=function(){return WA.memory},t.wbg.__wbindgen_throw=function(A,e){throw new Error(Ag(A,e))},t}function ng(t,A){return WA=t.exports,Ts.__wbindgen_wasm_module=A,Jt=null,WA.__wbindgen_start(),WA}async function Ts(t){if(WA!==void 0)return WA;typeof t<"u"&&(Object.getPrototypeOf(t)===Object.prototype?{module_or_path:t}=t:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),typeof t>"u"&&(t=new URL("data:application/wasm;base64,AGFzbQEAAAABzAEeYAJ/fwF/YAJ/fwBgA39/fwF/YAF/AX9gA39/fwBgAX8AYAV/f39/fwBgA29/fwFvYAV/f39/fwF/YAFvAW9gA29vfwBgAW8Bf2AAAX9gBH9/f38AYAAAYAR/f39/AX9gA39vbwF/YAF/AW9gAAFvYAF9AX1gBn9/f39/fwBgDX19fX19fX19f29/fX0Bb2AGf39/f39/AX9gBX9/fH9/AGAEf3x/fwBgBX9/fX9/AGAEf31/fwBgBX9/fn9/AGAEf35/fwBgAn19AX0C8gQRA3diZx1fX3diZ19idWZmZXJfNjA5Y2MzZWVlNTFlZDE1OAAJA3diZxpfX3diZ19uZXdfOWZlZTk3YTQwOWIzMmI2OAAJA3diZxpfX3diZ19zZXRfZjRmMWYwZGFhMzA2OTZmYwAKA3diZx1fX3diZ19sZW5ndGhfOGNmZDJjNjQwOWFmODhhZAALA3diZzFfX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9mMWRlYWQ0NGQxZmM3MjEyAAcDd2JnGl9fd2JnX25ld19lM2IzMjFkY2ZlZjg5ZmM3AAkDd2JnGl9fd2JnX3NldF9kMjM2NjFkMTkxNDhiMjI5AAoDd2JnHV9fd2JnX2xlbmd0aF82Y2E1Mjc2NjVkODk2OTRkAAsDd2JnMV9fd2JnX25ld3dpdGhieXRlb2Zmc2V0YW5kbGVuZ3RoX2U2YjdlNjlhY2Q0YzczNTQABwN3YmcaX193Ymdfc2V0XzEwYmFkOWJlZTBlOWM1OGIACgN3YmcdX193YmdfbGVuZ3RoXzNiNGYwMjIxODhhZThkYjYACwN3YmcfX193Ymdfc3ViYXJyYXlfNzY5ZTFlMGY4MWJiMjU5YgAHA3diZx9fX3diZ19zdWJhcnJheV8zYWFlZWM4OWJiMjU0NGYwAAcDd2JnJF9fd2JnX25ld3dpdGhsZW5ndGhfNWE1ZWZlMzEzY2ZkNTlmMQARA3diZxBfX3diaW5kZ2VuX3Rocm93AAEDd2JnEV9fd2JpbmRnZW5fbWVtb3J5ABIDd2JnH19fd2JpbmRnZW5faW5pdF9leHRlcm5yZWZfdGFibGUADgNhYAMAAQIIBQQCEwEMAAEBAgAAAQwBBAYFBQQAAQYFFAENBAAGBQQEAQQOAgECAQAIBAAVARYG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ACIDKAIEQXhxRgRAIAMhAgwBCyABQRkgAkEBdmtBACACQR9HG3QhBQNAIAMgBUEddkEEcWpBEGoiBCgCACICRQ0CIAVBAXQhBSACIQMgAigCBEF4cSABRw0ACwsgAigCCCIBIAA2AgwgAiAANgIIIABBADYCGCAAIAI2AgwgACABNgIIDwsgBCAANgIAIAAgAzYCGCAAIAA2AgwgACAANgIIC/MCAQR/IwBBMGsiACQAAkACQEGQksAAKAIARQRAQaiSwAAoAgAhAUGoksAAQQA2AgAgAUUNASAAQRhqIAERBQAgAEEQaiICIABBJGopAgA3AwAgACAAKQIcNwMIIAAoAhghAUGQksAAKAIAIgMNAgJAIANFDQBBlJLAACgCACICRQ0AQZiSwAAoAgAgAkECdBBlC0GUksAAIAE2AgBBkJLAAEEBNgIAQZiSwAAgACkDCDcCAEGgksAAIABBEGopAwA3AgALIABBMGokAEGUksAADwsgAEEANgIoIABBATYCHCAAQaCHwAA2AhggAEIENwIgIABBGGpBiIjAABBDAAsgAEEoaiACKQMANwIAIAAgACkDCDcCICAAIAE2AhwgAEEBNgIYAkAgAEEYaiIBKAIARQ0AIAEoAgQiAkUNACABKAIIIAJBAnQQZQsgAEEANgIoIABBATYCHCAAQaiIwAA2AhggAEIENwIgIAFBsIjAABBDAAuoAgIDfwF+IwBBQGoiAiQAIAEoAgBBgICAgHhGBEAgASgCDCEDIAJBJGoiBEEANgIAIAJCgICAgBA3AhwgAkEwaiADKAIAIgNBCGopAgA3AwAgAkE4aiADQRBqKQIANwMAIAIgAykCADcDKCACQRxqQcCIwAAgAkEoahAYGiACQRhqIAQoAgAiAzYCACACIAIpAhwiBTcDECABQQhqIAM2AgAgASAFNwIACyABKQIAIQUgAUKAgICAEDcCACACQQhqIgMgAUEIaiIBKAIANgIAIAFBADYCAEGxk8AALQAAGiACIAU3AwBBDEEEEF0iAUUEQEEEQQwQbQALIAEgAikDADcCACABQQhqIAMoAgA2AgAgAEHgisAANgIEIAAgATYCACACQUBrJAAL0gECBH8BfiMAQSBrIgMkACABIAEgAmoiAksEQEEAQQAQUgALQQggACgCACIEQQF0IgEgAiABIAJLGyICIAJBCEkbIgKtIgdCIIhQRQRAQQBBABBSAAsCQCAHpyIFQf////8HTQRAIAMgBAR/IAMgBDYCHCADIAAoAgQ2AhRBAQVBAAs2AhggA0EIakEBIAUgA0EUahAwIAMoAghBAUcNASADKAIMIQYgAygCECEBCyAGIAEQUgALIAMoAgwhASAAIAI2AgAgACABNgIEIANBIGokAAvrAQIEfwF+IwBBIGsiBSQAIAEgASACaiICSwRAQQBBABBSAAtBACEBIAMgBGpBAWtBACADa3GtQQQgACgCACIHQQF0IgYgAiACIAZJGyICIAJBBE0bIgKtfiIJQiCIUEUEQEEAQQAQUgALAkAgCaciBkGAgICAeCADa00EfyAFIAcEfyAFIAQgB2w2AhwgBSAAKAIENgIUIAMFQQALNgIYIAVBCGogAyAGIAVBFGoQMCAFKAIIQQFHDQEgBSgCECEIIAUoAgwFIAELIAgQUgALIAUoAgwhASAAIAI2AgAgACABNgIEIAVBIGokAAvTAQEFfyMAQSBrIgEkACAAKAIAIgJBf0YEQEEAQQAQUgALIAJBAXQiAyACQQFqIgUgAyAFSxsiA0H/////A0sEQEEAQQAQUgALAkBBBCADIANBBE0bIgNBAnQiBUH8////B00EfyABIAIEfyABIAJBAnQ2AhwgASAAKAIENgIUQQQFQQALNgIYIAFBCGpBBCAFIAFBFGoQMCABKAIIQQFHDQEgASgCECEEIAEoAgwFIAQLIAQQUgALIAEoAgwhAiAAIAM2AgAgACACNgIEIAFBIGokAAuyAQEEfyMAQSBrIgEkACAAKAIAIgJBf0YEQEEAQQAQUgALQQggAkEBdCIDIAJBAWoiBCADIARLGyIDIANBCE0bIgNBAEgEQEEAQQAQUgALIAEgAgR/IAEgAjYCHCABIAAoAgQ2AhRBAQVBAAs2AhggAUEIakEBIAMgAUEUahAwIAEoAghBAUYEQCABKAIMIAEoAhAQUgALIAEoAgwhAiAAIAM2AgAgACACNgIEIAFBIGokAAuyAQECfyMAQSBrIgMkACABIAEgAmoiAksEQEEAQQAQUgALQQggACgCACIBQQF0IgQgAiACIARJGyICIAJBCE0bIgRBAEgEQEEAQQAQUgALIAMgAQR/IAMgATYCHCADIAAoAgQ2AhRBAQVBAAs2AhggA0EIakEBIAQgA0EUahAwIAMoAghBAUYEQCADKAIMIAMoAhAQUgALIAMoAgwhASAAIAQ2AgAgACABNgIEIANBIGokAAudAQEDfwJAIAFBEEkEQCAAIQIMAQsgAEEAIABrQQNxIgRqIQMgBARAIAAhAgNAIAJBADoAACACQQFqIgIgA0kNAAsLIAMgASAEayIBQXxxIgRqIQIgBEEASgRAA0AgA0EANgIAIANBBGoiAyACSQ0ACwsgAUEDcSEBCyABBEAgASACaiEBA0AgAkEAOgAAIAJBAWoiAiABSQ0ACwsgAAvBAQIDfwF+IwBBMGsiAiQAIAEoAgBBgICAgHhGBEAgASgCDCEDIAJBFGoiBEEANgIAIAJCgICAgBA3AgwgAkEgaiADKAIAIgNBCGopAgA3AwAgAkEoaiADQRBqKQIANwMAIAIgAykCADcDGCACQQxqQcCIwAAgAkEYahAYGiACQQhqIAQoAgAiAzYCACACIAIpAgwiBTcDACABQQhqIAM2AgAgASAFNwIACyAAQeCKwAA2AgQgACABNgIAIAJBMGokAAuWAgECfyMAQSBrIgUkAEHMk8AAQcyTwAAoAgAiBkEBajYCAAJAAn9BACAGQQBIDQAaQQFBmJfAAC0AAA0AGkGYl8AAQQE6AABBlJfAAEGUl8AAKAIAQQFqNgIAQQILQf8BcSIGQQJHBEAgBkEBcUUNASAFQQhqIAAgASgCGBEBAAALQcCTwAAoAgAiBkEASA0AQcCTwAAgBkEBajYCAEHAk8AAQcSTwAAoAgAEfyAFIAAgASgCFBEBACAFIAQ6AB0gBSADOgAcIAUgAjYCGCAFIAUpAwA3AhBBxJPAACgCACAFQRBqQciTwAAoAgAoAhQRAQBBwJPAACgCAEEBawUgBgs2AgBBmJfAAEEAOgAAIANFDQAACwALrwEBBn8CQAJAIABBhAFJDQAgANBvJgEQIyIBKAIMIQUgASgCECECIAFCADcCDCABKAIIIQMgASgCBCEEIAFCBDcCBCABKAIAIQYgAUEANgIAIAAgAkkNASAAIAJrIgAgA08NASAEIABBAnRqIAU2AgAgASACNgIQIAEgADYCDCABIAM2AgggASgCBCABIAQ2AgQgASgCACEAIAEgBjYCACAARQ0AIABBAnQQZQsPCwALowEBAX8jAEEQayIGJAACQCABBEAgBkEEaiABIAMgBCAFIAIoAhARBgACQCAGKAIEIgIgBigCDCIBTQRAIAYoAgghBQwBCyACQQJ0IQIgBigCCCEDIAFFBEBBBCEFIAMgAhBlDAELIAMgAkEEIAFBAnQiAhBUIgVFDQILIAAgATYCBCAAIAU2AgAgBkEQaiQADwtBxIbAAEEyEGgAC0EEIAIQUgALrAEBA38gASgCDCECAkACQAJAAkACQAJAIAEoAgQOAgABAgsgAg0BQQEhA0EAIQFBASECDAMLIAJFDQELIAAgARAdDwsgASgCACICKAIEIgFBAEgNASACKAIAIQMgAUUEQEEBIQJBACEBDAELQbGTwAAtAAAaQQEhBCABQQEQXSICRQ0BCyACIAMgARAfIQIgACABNgIIIAAgAjYCBCAAIAE2AgAPCyAEIAEQUgALiQEBAX8CQCACQQBOBEACfyADKAIEBEACQCADKAIIIgRFBEAMAQsgAygCACAEIAEgAhBUDAILCyABIAJFDQAaQbGTwAAtAAAaIAIgARBdCyIDBEAgACACNgIIIAAgAzYCBCAAQQA2AgAPCyAAIAI2AgggACABNgIEDAELIABBADYCBAsgAEEBNgIAC5cBAgR/AW8jAEEgayIDJAAgACgCACIGEHAhACADIAI2AgQgAyAANgIAIAAgAkYEQBBbIgQQUyIFJQEgASACEAQhBxAbIgAgByYBIARBhAFPBEAgBBAtCyAFQYQBTwRAIAUQLQsgBiAAQQAQZCAAQYQBTwRAIAAQLQsgA0EgaiQADwsgA0EANgIIIAMgA0EEaiADQQhqEEAAC3kBAX8jAEEgayICJAACfyAAKAIAQYCAgIB4RwRAIAEgACgCBCAAKAIIEFYMAQsgAkEQaiAAKAIMKAIAIgBBCGopAgA3AwAgAkEYaiAAQRBqKQIANwMAIAIgACkCADcDCCABKAIUIAEoAhggAkEIahAYCyACQSBqJAALewEBfyMAQUBqIgUkACAFIAE2AgwgBSAANgIIIAUgAzYCFCAFIAI2AhAgBUECNgIcIAVBoI/AADYCGCAFQgI3AiQgBSAFQRBqrUKAgICAsAWENwM4IAUgBUEIaq1CgICAgMAFhDcDMCAFIAVBMGo2AiAgBUEYaiAEEEMAC24BAX8jAEEwayIBJAAgASAANgIAIAFBgAE2AgQgAUECNgIMIAFB2JHAADYCCCABQgI3AhQgASABQQRqrUKAgICA4ACENwMoIAEgAa1CgICAgOAAhDcDICABIAFBIGo2AhAgAUEIakHIj8AAEEMAC2kCAX8BfiMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQfyNwAA2AgggA0ICNwIUIANCgICAgOAAIgQgA62ENwMoIAMgBCADQQRqrYQ3AyAgAyADQSBqNgIQIANBCGogAhBDAAtpAgF/AX4jAEEwayIDJAAgAyAANgIAIAMgATYCBCADQQI2AgwgA0H4kcAANgIIIANCAjcCFCADQoCAgIDgACIEIANBBGqthDcDKCADIAQgA62ENwMgIAMgA0EgajYCECADQQhqIAIQQwALZgAjAEEwayIAJABBsJPAAC0AAARAIABBAjYCDCAAQbCKwAA2AgggAEIBNwIUIAAgATYCLCAAIABBLGqtQoCAgIDgAIQ3AyAgACAAQSBqNgIQIABBCGpB0IrAABBDAAsgAEEwaiQAC5QBAgN/AW8jAEEgayIDJAAgAyAAKAIAEHAiBDYCACADIAI2AgQgAiAERwRAIANBADYCCCADIANBBGogA0EIahBAAAsQWyIEEFMiBSUBEAUhBhAbIgIgBiYBIAVBhAFPBEAgBRAtCyACIAAoAgAgAUECdhBkIAJBhAFPBEAgAhAtCyAEQYQBTwRAIAQQLQsgA0EgaiQAC08BAX8jAEEwayIAJAAgAEEBNgIMIABBwI3AADYCCCAAQgE3AhQgACAAQS9qrUKAgICAoAWENwMgIAAgAEEgajYCECAAQQhqQcSBwAAQQwALQQEBfyACIAAoAgAgACgCCCIDa0sEQCAAIAMgAhAlIAAoAgghAwsgACgCBCADaiABIAIQHxogACACIANqNgIIQQALTQECf0Gxk8AALQAAGiABKAIEIQIgASgCACEDQQhBBBBdIgFFBEBBBEEIEG0ACyABIAI2AgQgASADNgIAIABB8IrAADYCBCAAIAE2AgALQQEBfyACIAAoAgAgACgCCCIDa0sEQCAAIAMgAhApIAAoAgghAwsgACgCBCADaiABIAIQHxogACACIANqNgIIQQALQQEBfyMAQSBrIgIkACACQQA2AhAgAkEBNgIEIAJCBDcCCCACQS42AhwgAiAANgIYIAIgAkEYajYCACACIAEQQwALswIBA38gACgCACECIAEoAhwiAEEQcUUE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ZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkTGF6eSBpbnN0YW5jZSBoYXMgcHJldmlvdXNseSBiZWVuIHBvaXNvbmVkdgMQACoAAAAvVXNlcnMvZG1hcmNvcy8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL29uY2VfY2VsbC0xLjIxLjMvc3JjL2xpYi5ycwCoAxAAXwAAAAgDAAAZAAAAcmVlbnRyYW50IGluaXQAABgEEAAOAAAAqAMQAF8AAAB6AgAADQAAABYAAAAMAAAABAAAABcAAAAYAAAAGQAAAC9ydXN0L2RlcHMvZGxtYWxsb2MtMC4yLjYvc3JjL2RsbWFsbG9jLnJzYXNzZXJ0aW9uIGZhaWxlZDogcHNpemUgPj0gc2l6ZSArIG1pbl9vdmVyaGVhZABYBBAAKQAAAKgEAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogcHNpemUgPD0gc2l6ZSArIG1heF9vdmVyaGVhZAAAWAQQACkAAACuBAAADQAAAEFjY2Vzc0Vycm9ybWVtb3J5IGFsbG9jYXRpb24gb2YgIGJ5dGVzIGZhaWxlZAAAAAsFEAAVAAAAIAUQAA0AAABzdGQvc3JjL2FsbG9jLnJzQAUQABAAAABjAQAACQAAABYAAAAMAAAABAAAABoAAAAAAAAACAAAAAQAAAAbAAAAAAAAAAgAAAAEAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAQAAAABAAAACEAAAAiAAAAIwAAACQAAABFcnJvcgAAACUAAAAMAAAABAAAACYAAAAnAAAAKAAAAGNhcGFjaXR5IG92ZXJmbG93AAAA2AUQABEAAABhbGxvYy9zcmMvcmF3X3ZlYy5yc/QFEAAUAAAAGAAAAAUAQaCMwAAL8AUBAAAAKQAAAGEgZm9ybWF0dGluZyB0cmFpdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB3aGVuIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBkaWQgbm90YWxsb2Mvc3JjL2ZtdC5ycwAAfgYQABAAAAB+AgAADgAAAEJvcnJvd011dEVycm9yYWxyZWFkeSBib3Jyb3dlZDogrgYQABIAAABpbmRleCBvdXQgb2YgYm91bmRzOiB0aGUgbGVuIGlzICBidXQgdGhlIGluZGV4IGlzIAAAyAYQACAAAADoBhAAEgAAAD09IT1tYXRjaGVzYXNzZXJ0aW9uIGBsZWZ0ICByaWdodGAgZmFpbGVkCiAgbGVmdDogCiByaWdodDogABcHEAAQAAAAJwcQABcAAAA+BxAACQAAACByaWdodGAgZmFpbGVkOiAKICBsZWZ0OiAAAAAXBxAAEAAAAGAHEAAQAAAAcAcQAAkAAAA+BxAACQAAADogAAABAAAAAAAAAJwHEAACAAAAfSB9Y29yZS9zcmMvZm10L251bS5ycwAAswcQABMAAABmAAAAFwAAADB4MDAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTIwMjEyMjIzMjQyNTI2MjcyODI5MzAzMTMyMzMzNDM1MzYzNzM4Mzk0MDQxNDI0MzQ0NDU0NjQ3NDg0OTUwNTE1MjUzNTQ1NTU2NTc1ODU5NjA2MTYyNjM2NDY1NjY2NzY4Njk3MDcxNzI3Mzc0NzU3Njc3Nzg3OTgwODE4MjgzODQ4NTg2ODc4ODg5OTA5MTkyOTM5NDk1OTY5Nzk4OTlyYW5nZSBzdGFydCBpbmRleCAgb3V0IG9mIHJhbmdlIGZvciBzbGljZSBvZiBsZW5ndGggAACiCBAAEgAAALQIEAAiAAAAcmFuZ2UgZW5kIGluZGV4IOgIEAAQAAAAtAgQACIAAAAAAAA/AAAAvwBBqJLAAAsBFABwCXByb2R1Y2VycwIIbGFuZ3VhZ2UBBFJ1c3QADHByb2Nlc3NlZC1ieQMFcnVzdGMdMS44My4wICg5MGIzNWE2MjMgMjAyNC0xMS0yNikGd2FscnVzBjAuMjMuMwx3YXNtLWJpbmRnZW4HMC4yLjEwMABJD3RhcmdldF9mZWF0dXJlcwQrD211dGFibGUtZ2xvYmFscysIc2lnbi1leHQrD3JlZmVyZW5jZS10eXBlcysKbXVsdGl2YWx1ZQ==",typeof document>"u"?require("url").pathToFileURL(__filename).href:ke&&ke.tagName.toUpperCase()==="SCRIPT"&&ke.src||new URL("spark.cjs.min.js",document.baseURI).href));const A=sg();(typeof t=="string"||typeof Request=="function"&&t instanceof Request||typeof URL=="function"&&t instanceof URL)&&(t=fetch(t));const{instance:e,module:s}=await eg(await t,A);return ng(e,s)}const kA=-12,NA=9,ig=Math.exp(kA),rg=Math.exp(NA),Us=-30,ht=Math.exp(Us),Oe=11,We=11,Gs=11,ag=Oe+We,X=1<<Oe,HA=1<<We,Rs=1<<Gs,je=1,og=X-1,gg=HA-1,cg=Rs-1,lg=!0,Ig=Object.freeze(Object.defineProperty({__proto__:null,LN_SCALE_MAX:NA,LN_SCALE_MIN:kA,LN_SCALE_ZERO:Us,SCALE_MAX:rg,SCALE_MIN:ig,SCALE_ZERO:ht,SPLAT_TEX_DEPTH:Rs,SPLAT_TEX_DEPTH_BITS:Gs,SPLAT_TEX_DEPTH_MASK:cg,SPLAT_TEX_HEIGHT:HA,SPLAT_TEX_HEIGHT_BITS:We,SPLAT_TEX_HEIGHT_MASK:gg,SPLAT_TEX_LAYER_BITS:ag,SPLAT_TEX_MIN_HEIGHT:je,SPLAT_TEX_WIDTH:X,SPLAT_TEX_WIDTH_BITS:Oe,SPLAT_TEX_WIDTH_MASK:og,WASM_SPLAT_SORT:lg},Symbol.toStringTag,{value:"Module"}));function pt(t){return t==="bool"||t==="bvec2"||t==="bvec3"||t==="bvec4"}function dt(t){return t==="int"||t==="uint"||t==="float"}function QA(t){return t==="int"||t==="ivec2"||t==="ivec3"||t==="ivec4"}function EA(t){return t==="uint"||t==="uvec2"||t==="uvec3"||t==="uvec4"}function Ae(t){return t==="float"||t==="vec2"||t==="vec3"||t==="vec4"}function Ys(t){return t==="mat2"||t==="mat2x2"||t==="mat2x3"||t==="mat2x4"||t==="mat3"||t==="mat3x2"||t==="mat3x3"||t==="mat3x4"||t==="mat4"||t==="mat4x2"||t==="mat4x3"||t==="mat4x4"}function ot(t){return Ae(t)||Ys(t)}function Nt(t){return t==="vec2"||t==="ivec2"||t==="uvec2"}function Tt(t){return t==="vec3"||t==="ivec3"||t==="uvec3"}function te(t){return t==="vec4"||t==="ivec4"||t==="uvec4"}function ug(t){return Nt(t)||Tt(t)||te(t)}function gt(t){return t==="mat2"||t==="mat2x2"}function ct(t){return t==="mat3"||t==="mat3x3"}function lt(t){return t==="mat4"||t==="mat4x4"}function Js(t){switch(t){case"vec2":return"float";case"vec3":return"float";case"vec4":return"float";case"ivec2":return"int";case"ivec3":return"int";case"ivec4":return"int";case"uvec2":return"uint";case"uvec3":return"uint";case"uvec4":return"uint";default:throw new Error(`Invalid vector type: ${t}`)}}function Ls(t){switch(t){case"vec2":case"ivec2":case"uvec2":return 2;case"vec3":case"ivec3":case"uvec3":return 3;case"vec4":case"ivec4":case"uvec4":return 4;default:throw new Error(`Invalid vector type: ${t}`)}}function hg(t){if(dt(t))return"float";if(Nt(t))return"vec2";if(Tt(t))return"vec3";if(te(t))return"vec4";throw new Error(`Invalid vector type: ${t}`)}function _s(t){if(dt(t))return"uint";if(Nt(t))return"uvec2";if(Tt(t))return"uvec3";if(te(t))return"uvec4";throw new Error(`Invalid vector type: ${t}`)}function Cg(t){if(dt(t))return"int";if(Nt(t))return"ivec2";if(Tt(t))return"ivec3";if(te(t))return"ivec4";throw new Error(`Invalid vector type: ${t}`)}function zs(t){if(typeof t=="string")return t;if(typeof t=="object"&&t.type)return t.type;throw new Error(`Invalid DynoType: ${String(t)}`)}function aA(t){return Math.trunc(t).toString()}function oA(t){return`${Math.max(0,Math.trunc(t)).toString()}u`}function q(t){return t===Number.POSITIVE_INFINITY?"INFINITY":t===Number.NEGATIVE_INFINITY?"-INFINITY":Number.isInteger(t)?t.toFixed(1):t.toString()}function $(t){return t instanceof it?t.type:t.dynoOut().type}class it{constructor(A){this.__isDynoValue=!0,this.type=A}}class K extends it{constructor(A,e){super(A.outTypes[e]),this.dyno=A,this.key=e}}class vt extends it{constructor(A,e){super(A),this.literal=e}getLiteral(){return this.literal}}function ue(t,A){return new vt(t,A)}class qs extends vt{constructor(A,e){super(A,""),this.value=e}getLiteral(){const{type:A,value:e}=this;switch(A){case"bool":return e?"true":"false";case"uint":return oA(e);case"int":return aA(e);case"float":return q(e);case"bvec2":{const s=e;return`bvec2(${s[0]}, ${s[1]})`}case"uvec2":{if(e instanceof u.Vector2)return`uvec2(${oA(e.x)}, ${oA(e.y)})`;const s=e;return`uvec2(${oA(s[0])}, ${oA(s[1])})`}case"ivec2":{if(e instanceof u.Vector2)return`ivec2(${aA(e.x)}, ${aA(e.y)})`;const s=e;return`ivec2(${aA(s[0])}, ${aA(s[1])})`}case"vec2":{if(e instanceof u.Vector2)return`vec2(${q(e.x)}, ${q(e.y)})`;const s=e;return`vec2(${q(s[0])}, ${q(s[1])})`}case"bvec3":{const s=e;return`bvec3(${s[0]}, ${s[1]}, ${s[2]})`}case"uvec3":{if(e instanceof u.Vector3)return`uvec3(${oA(e.x)}, ${oA(e.y)}, ${oA(e.z)})`;const s=e;return`uvec3(${oA(s[0])}, ${oA(s[1])}, ${oA(s[2])})`}case"ivec3":{if(e instanceof u.Vector3)return`ivec3(${aA(e.x)}, ${aA(e.y)}, ${aA(e.z)})`;const s=e;return`ivec3(${aA(s[0])}, ${aA(s[1])}, ${aA(s[2])})`}case"vec3":{if(e instanceof u.Vector3)return`vec3(${q(e.x)}, ${q(e.y)}, ${q(e.z)})`;const s=e;return`vec3(${q(s[0])}, ${q(s[1])}, ${q(s[2])})`}case"bvec4":{const s=e;return`bvec4(${s[0]}, ${s[1]}, ${s[2]}, ${s[3]})`}case"uvec4":{if(e instanceof u.Vector4)return`uvec4(${oA(e.x)}, ${oA(e.y)}, ${oA(e.z)}, ${oA(e.w)})`;const s=e;return`uvec4(${oA(s[0])}, ${oA(s[1])}, ${oA(s[2])}, ${oA(s[3])})`}case"ivec4":{if(e instanceof u.Vector4)return`ivec4(${aA(e.x)}, ${aA(e.y)}, ${aA(e.z)}, ${aA(e.w)})`;const s=e;return`ivec4(${aA(s[0])}, ${aA(s[1])}, ${aA(s[2])}, ${aA(s[3])})`}case"vec4":{if(e instanceof u.Vector4)return`vec4(${q(e.x)}, ${q(e.y)}, ${q(e.z)}, ${q(e.w)})`;if(e instanceof u.Quaternion)return`vec4(${q(e.x)}, ${q(e.y)}, ${q(e.z)}, ${q(e.w)})`;const s=e;return`vec4(${q(s[0])}, ${q(s[1])}, ${q(s[2])}, ${q(s[3])})`}case"mat2":case"mat2x2":{const s=e,n=s instanceof u.Matrix2?s.elements:e,i=new Array(4).fill(0).map((r,a)=>q(n[a]));return`${A}(${i.join(", ")})`}case"mat2x3":{const s=e,n=new Array(6).fill(0).map((i,r)=>q(s[r]));return`${A}(${n.join(", ")})`}case"mat2x4":{const s=e,n=new Array(8).fill(0).map((i,r)=>q(s[r]));return`${A}(${n.join(", ")})`}case"mat3":case"mat3x3":{const s=e,n=s instanceof u.Matrix3?s.elements:e,i=new Array(9).fill(0).map((r,a)=>q(n[a]));return`${A}(${i.join(", ")})`}case"mat3x2":{const s=e,n=new Array(6).fill(0).map((i,r)=>q(s[r]));return`${A}(${n.join(", ")})`}case"mat3x4":{const s=e,n=new Array(12).fill(0).map((i,r)=>q(s[r]));return`${A}(${n.join(", ")})`}case"mat4":case"mat4x4":{const s=e,n=s instanceof u.Matrix4?s.elements:e,i=new Array(16).fill(0).map((r,a)=>q(n[a]));return`${A}(${i.join(", ")})`}case"mat4x2":{const s=e,n=new Array(8).fill(0).map((i,r)=>q(s[r]));return`${A}(${n.join(", ")})`}case"mat4x3":{const s=e,n=new Array(12).fill(0).map((i,r)=>q(s[r]));return`${A}(${n.join(", ")})`}default:throw new Error(`Type not implemented: ${String(A)}`)}}}function J(t,A){return new qs(t,A)}function Lt(t){const A=String(t);if(pt(t))return`${A}(false)`;if(ot(t))return`${A}(0.0)`;if(QA(t))return`${A}(0)`;if(EA(t))return`${A}(0u)`;throw new Error(`Type not implemented: ${A}`)}function Bg(t){const A=String(t);if(pt(t))return`${A}(true)`;if(ot(t))return`${A}(1.0)`;if(QA(t))return`${A}(1)`;if(EA(t))return`${A}(1u)`;throw new Error(`Type not implemented: ${A}`)}function Qg(t){const A=String(t);if(pt(t))return`${A}(true)`;if(ot(t))return`${A}(-1.0)`;if(QA(t))return`${A}(-1)`;if(EA(t))return`${A}(0xFFFFFFFFu)`;throw new Error(`Type not implemented: ${A}`)}const hs=" ";class Hs{constructor({indent:A}={}){this.globals=new Set,this.statements=[],this.uniforms={},this.declares=new Set,this.updaters=[],this.sequence=0,this.indent=hs,this.indent=A??hs}nextSequence(){return this.sequence++}}class V{constructor({inTypes:A,outTypes:e,inputs:s,update:n,globals:i,statements:r,generate:a}){this.inTypes=A??{},this.outTypes=e??{},this.inputs=s??{},this.update=n,this.globals=i,this.statements=r,this.generate=a??(({inputs:o,outputs:c,compile:l})=>{var g,I;return{globals:(g=this.globals)==null?void 0:g.call(this,{inputs:o,outputs:c,compile:l}),statements:(I=this.statements)==null?void 0:I.call(this,{inputs:o,outputs:c,compile:l})}})}get outputs(){const A={};for(const e in this.outTypes)A[e]=new K(this,e);return A}apply(A){return Object.assign(this.inputs,A),this.outputs}compile({inputs:A,outputs:e,compile:s}){const n=[`// ${this.constructor.name}(${Object.values(A).join(", ")}) => (${Object.values(e).join(", ")})`],i=[];for(const c in e){const l=e[c];l&&!s.declares.has(l)&&(s.declares.add(l),i.push(c))}const{globals:r,statements:a,uniforms:o}=this.generate({inputs:A,outputs:e,compile:s});for(const c of r??[])s.globals.add(c);for(const c in o)s.uniforms[c]=o[c];this.update&&s.updaters.push(this.update);for(const c of i){const l=e[c];l&&(s.uniforms[l]||n.push(`${Ze(l,this.outTypes[c])};`))}return a!=null&&a.length&&(n.push("{"),n.push(...a.map(c=>s.indent+c)),n.push("}")),n}}class VA extends V{constructor({inTypes:A,outTypes:e,inputs:s,update:n,globals:i,construct:r}){super({inTypes:A,outTypes:e,inputs:s,update:n,globals:i,generate:a=>this.generateBlock(a)}),this.construct=r}generateBlock({inputs:A,outputs:e,compile:s}){var B,C;const n={},i={};for(const Q in A)A[Q]!=null&&(n[Q]=new vt(this.inTypes[Q],A[Q]));for(const Q in e)e[Q]!=null&&(i[Q]=new it(this.outTypes[Q]));const r={roots:[]},a=this.construct(n,i,r);for(const Q of((B=this.globals)==null?void 0:B.call(this,{inputs:A,outputs:e,compile:s}))??[])s.globals.add(Q);const o=[],c=new Map;function l(Q,E,f){let p=c.get(Q);if(!p){p={sequence:s.nextSequence(),outNames:new Map,newOuts:new Set},c.set(Q,p);for(const d in Q.inputs){let w=Q.inputs[d];for(;w;){if(w instanceof it){w instanceof K&&l(w.dyno,w.key);break}w=w.dynoOut()}}o.push(Q)}E&&(f||p.newOuts.add(E),p.outNames.set(E,f??`${E}_${p.sequence}`))}for(const Q of r.roots)l(Q);for(const Q in i){let E=(a==null?void 0:a[Q])??i[Q];for(;E;){if(E instanceof it){E instanceof K&&l(E.dyno,E.key,e[Q]);break}E=E.dynoOut()}i[Q]=E}const g=[];for(const Q of o){const E={},f={};for(const w in Q.inputs){let D=Q.inputs[w];for(;D;){if(D instanceof it){if(D instanceof vt)E[w]=D.getLiteral();else if(D instanceof K){const x=(C=c.get(D.dyno))==null?void 0:C.outNames.get(D.key);if(!x)throw new Error(`Source not found for ${D.dyno.constructor.name}.${D.key}`);E[w]=x}break}D=D.dynoOut()}}const p=c.get(Q)??{outNames:new Map};for(const[w,D]of p.outNames.entries())f[w]=D;const d=Q.compile({inputs:E,outputs:f,compile:s});g.push(d)}const I=[];for(const Q in e)i[Q]instanceof vt&&I.push(`${e[Q]} = ${i[Q].getLiteral()};`);return I.length>0&&g.push(I),{statements:g.flatMap((Q,E)=>E===0?Q:["",...Q])}}}function bA(t,A,e,{update:s,globals:n}={}){return new VA({inTypes:t,outTypes:A,construct:e,update:s,globals:n})}function ee({inTypes:t,outTypes:A,inputs:e,update:s,globals:n,statements:i,generate:r}){return new V({inTypes:t,outTypes:A,inputs:e,update:s,globals:n,statements:i,generate:r})}function Ze(t,A,e){const s=typeof A=="string"?A:A.type;if(!s)throw new Error(`Invalid DynoType: ${String(A)}`);return`${s} ${t}${e!=null?`[${e}]`:""}`}function RA(t){var i;let A=!1;const e=t.split(`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const sA=require("three");var ke=typeof document<"u"?document.currentScript:null;function Fo(t){const A=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const e in t)if(e!=="default"){const s=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(A,e,s.get?s:{enumerable:!0,get:()=>t[e]})}}return A.default=t,Object.freeze(A)}const u=Fo(sA),ko=new sA.OrthographicCamera(-1,1,1,-1,0,1);class No extends sA.BufferGeometry{constructor(){super(),this.setAttribute("position",new sA.Float32BufferAttribute([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new sA.Float32BufferAttribute([0,2,0,0,2,0],2))}}const To=new No;class ws{constructor(A){this._mesh=new sA.Mesh(To,A)}dispose(){this._mesh.geometry.dispose()}render(A){A.render(this._mesh,ko)}get material(){return this._mesh.material}set material(A){this._mesh.material=A}}var uA=Uint8Array,xt=Uint16Array,Uo=Int32Array,ms=new uA([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,0,0,0]),xs=new uA([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,0,0]),Go=new uA([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Ss=function(t,A){for(var e=new xt(31),s=0;s<31;++s)e[s]=A+=1<<t[s-1];for(var n=new Uo(e[30]),s=1;s<30;++s)for(var i=e[s];i<e[s+1];++i)n[i]=i-e[s]<<5|s;return{b:e,r:n}},Ds=Ss(ms,2),Ms=Ds.b,Ro=Ds.r;Ms[28]=258,Ro[258]=28;var Yo=Ss(xs,0),Jo=Yo.b,Je=new xt(32768);for(var nA=0;nA<32768;++nA){var tt=(nA&43690)>>1|(nA&21845)<<1;tt=(tt&52428)>>2|(tt&13107)<<2,tt=(tt&61680)>>4|(tt&3855)<<4,Je[nA]=((tt&65280)>>8|(tt&255)<<8)>>1}var zt=function(t,A,e){for(var s=t.length,n=0,i=new xt(A);n<s;++n)t[n]&&++i[t[n]-1];var r=new xt(A);for(n=1;n<A;++n)r[n]=r[n-1]+i[n-1]<<1;var a;if(e){a=new xt(1<<A);var o=15-A;for(n=0;n<s;++n)if(t[n])for(var c=n<<4|t[n],l=A-t[n],g=r[t[n]-1]++<<l,I=g|(1<<l)-1;g<=I;++g)a[Je[g]>>o]=c}else for(a=new xt(s),n=0;n<s;++n)t[n]&&(a[n]=Je[r[t[n]-1]++]>>15-t[n]);return a},Zt=new uA(288);for(var nA=0;nA<144;++nA)Zt[nA]=8;for(var nA=144;nA<256;++nA)Zt[nA]=9;for(var nA=256;nA<280;++nA)Zt[nA]=7;for(var nA=280;nA<288;++nA)Zt[nA]=8;var vs=new uA(32);for(var nA=0;nA<32;++nA)vs[nA]=5;var _o=zt(Zt,9,1),Lo=zt(vs,5,1),Ne=function(t){for(var A=t[0],e=1;e<t.length;++e)t[e]>A&&(A=t[e]);return A},JA=function(t,A,e){var s=A/8|0;return(t[s]|t[s+1]<<8)>>(A&7)&e},Te=function(t,A){var e=A/8|0;return(t[e]|t[e+1]<<8|t[e+2]<<16)>>(A&7)},bs=function(t){return(t+7)/8|0},Mt=function(t,A,e){return(A==null||A<0)&&(A=0),(e==null||e>t.length)&&(e=t.length),new uA(t.subarray(A,e))},zo=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],mA=function(t,A,e){var s=new Error(A||zo[t]);if(s.code=t,Error.captureStackTrace&&Error.captureStackTrace(s,mA),!e)throw s;return s},Fs=function(t,A,e,s){var n=t.length,i=s?s.length:0;if(!n||A.f&&!A.l)return e||new uA(0);var r=!e,a=r||A.i!=2,o=A.i;r&&(e=new uA(n*3));var c=function(wA){var SA=e.length;if(wA>SA){var CA=new uA(Math.max(SA*2,wA));CA.set(e),e=CA}},l=A.f||0,g=A.p||0,I=A.b||0,h=A.l,B=A.d,C=A.m,Q=A.n,E=n*8;do{if(!h){l=JA(t,g,1);var f=JA(t,g+1,3);if(g+=3,f)if(f==1)h=_o,B=Lo,C=9,Q=5;else if(f==2){var D=JA(t,g,31)+257,x=JA(t,g+10,15)+4,y=D+JA(t,g+5,31)+1;g+=14;for(var m=new uA(y),N=new uA(19),M=0;M<x;++M)N[Go[M]]=JA(t,g+M*3,7);g+=x*3;for(var S=Ne(N),U=(1<<S)-1,F=zt(N,S,1),M=0;M<y;){var b=F[JA(t,g,U)];g+=b&15;var p=b>>4;if(p<16)m[M++]=p;else{var T=0,R=0;for(p==16?(R=3+JA(t,g,3),g+=2,T=m[M-1]):p==17?(R=3+JA(t,g,7),g+=3):p==18&&(R=11+JA(t,g,127),g+=7);R--;)m[M++]=T}}var O=m.subarray(0,D),_=m.subarray(D);C=Ne(O),Q=Ne(_),h=zt(O,C,1),B=zt(_,Q,1)}else mA(1);else{var p=bs(g)+4,d=t[p-4]|t[p-3]<<8,w=p+d;if(w>n){o&&mA(0);break}a&&c(I+d),e.set(t.subarray(p,w),I),A.b=I+=d,A.p=g=w*8,A.f=l;continue}if(g>E){o&&mA(0);break}}a&&c(I+131072);for(var eA=(1<<C)-1,H=(1<<Q)-1,W=g;;W=g){var T=h[Te(t,g)&eA],L=T>>4;if(g+=T&15,g>E){o&&mA(0);break}if(T||mA(2),L<256)e[I++]=L;else if(L==256){W=g,h=null;break}else{var j=L-254;if(L>264){var M=L-257,P=ms[M];j=JA(t,g,(1<<P)-1)+Ms[M],g+=P}var Z=B[Te(t,g)&H],G=Z>>4;Z||mA(3),g+=Z&15;var _=Jo[G];if(G>3){var P=xs[G];_+=Te(t,g)&(1<<P)-1,g+=P}if(g>E){o&&mA(0);break}a&&c(I+131072);var dA=I+j;if(I<_){var lA=i-_,yA=Math.min(_,dA);for(lA+I<0&&mA(3);I<yA;++I)e[I]=s[lA+I]}for(;I<dA;++I)e[I]=e[I-_]}}A.l=h,A.p=W,A.b=I,A.f=l,h&&(l=1,A.m=C,A.d=B,A.n=Q)}while(!l);return I!=e.length&&r?Mt(e,0,I):e.subarray(0,I)},qo=new uA(0),qA=function(t,A){return t[A]|t[A+1]<<8},_A=function(t,A){return(t[A]|t[A+1]<<8|t[A+2]<<16|t[A+3]<<24)>>>0},Ue=function(t,A){return _A(t,A)+_A(t,A+4)*4294967296},Ho=function(t){(t[0]!=31||t[1]!=139||t[2]!=8)&&mA(6,"invalid gzip data");var A=t[3],e=10;A&4&&(e+=(t[10]|t[11]<<8)+2);for(var s=(A>>3&1)+(A>>4&1);s>0;s-=!t[e++]);return e+(A&2)},Ge=function(){function t(A,e){typeof A=="function"&&(e=A,A={}),this.ondata=e;var s=A&&A.dictionary&&A.dictionary.subarray(-32768);this.s={i:0,b:s?s.length:0},this.o=new uA(32768),this.p=new uA(0),s&&this.o.set(s)}return t.prototype.e=function(A){if(this.ondata||mA(5),this.d&&mA(4),!this.p.length)this.p=A;else if(A.length){var e=new uA(this.p.length+A.length);e.set(this.p),e.set(A,this.p.length),this.p=e}},t.prototype.c=function(A){this.s.i=+(this.d=A||!1);var e=this.s.b,s=Fs(this.p,this.s,this.o);this.ondata(Mt(s,e,this.s.b),this.d),this.o=Mt(s,this.s.b-32768),this.s.b=this.o.length,this.p=Mt(this.p,this.s.p/8|0),this.s.p&=7},t.prototype.push=function(A,e){this.e(A),this.c(e)},t}();function Ko(t,A){return Fs(t,{i:2},A&&A.out,A&&A.dictionary)}var ks=function(){function t(A,e){this.v=1,this.r=0,Ge.call(this,A,e)}return t.prototype.push=function(A,e){if(Ge.prototype.e.call(this,A),this.r+=A.length,this.v){var s=this.p.subarray(this.v-1),n=s.length>3?Ho(s):4;if(n>s.length){if(!e)return}else this.v>1&&this.onmember&&this.onmember(this.r-s.length);this.p=s.subarray(n),this.v=0}Ge.prototype.c.call(this,e),this.s.f&&!this.s.l&&!e&&(this.v=bs(this.s.p)+9,this.s={i:0},this.o=new uA(0),this.push(new uA(0),e))},t}(),_e=typeof TextDecoder<"u"&&new TextDecoder,Vo=0;try{_e.decode(qo,{stream:!0}),Vo=1}catch{}var $o=function(t){for(var A="",e=0;;){var s=t[e++],n=(s>127)+(s>223)+(s>239);if(e+n>t.length)return{s:A,r:Mt(t,e-1)};n?n==3?(s=((s&15)<<18|(t[e++]&63)<<12|(t[e++]&63)<<6|t[e++]&63)-65536,A+=String.fromCharCode(55296|s>>10,56320|s&1023)):n&1?A+=String.fromCharCode((s&31)<<6|t[e++]&63):A+=String.fromCharCode((s&15)<<12|(t[e++]&63)<<6|t[e++]&63):A+=String.fromCharCode(s)}};function Po(t,A){if(A){for(var e="",s=0;s<t.length;s+=16384)e+=String.fromCharCode.apply(null,t.subarray(s,s+16384));return e}else{if(_e)return _e.decode(t);var n=$o(t),i=n.s,e=n.r;return e.length&&mA(8),i}}var Xo=function(t,A){return A+30+qA(t,A+26)+qA(t,A+28)},Oo=function(t,A,e){var s=qA(t,A+28),n=Po(t.subarray(A+46,A+46+s),!(qA(t,A+8)&2048)),i=A+46+s,r=_A(t,A+20),a=e&&r==4294967295?Wo(t,i):[r,_A(t,A+24),_A(t,A+42)],o=a[0],c=a[1],l=a[2];return[qA(t,A+10),o,c,n,i+qA(t,A+30)+qA(t,A+32),l]},Wo=function(t,A){for(;qA(t,A)!=1;A+=4+qA(t,A+2));return[Ue(t,A+12),Ue(t,A+4),Ue(t,A+20)]};function jo(t,A){for(var e={},s=t.length-22;_A(t,s)!=101010256;--s)(!s||t.length-s>65558)&&mA(13);var n=qA(t,s+8);if(!n)return{};var i=_A(t,s+16),r=i==4294967295||n==65535;if(r){var a=_A(t,s-12);r=_A(t,a)==101075792,r&&(n=_A(t,a+32),i=_A(t,a+48))}for(var o=A&&A.filter,c=0;c<n;++c){var l=Oo(t,i,r),g=l[0],I=l[1],h=l[2],B=l[3],C=l[4],Q=l[5],E=Xo(t,Q);i=C,(!o||o({name:B,size:I,originalSize:h,compression:g}))&&(g?g==8?e[B]=Ko(t.subarray(E,E+I),{out:new uA(h)}):mA(14,"unknown compression type "+g):e[B]=Mt(t,E,E+I))}return e}let WA;const Ns=typeof TextDecoder<"u"?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};typeof TextDecoder<"u"&&Ns.decode();let Jt=null;function Zo(){return(Jt===null||Jt.byteLength===0)&&(Jt=new Uint8Array(WA.memory.buffer)),Jt}function Ag(t,A){return t=t>>>0,Ns.decode(Zo().subarray(t,t+A))}function tg(t,A,e,s,n,i,r,a,o,c,l,g,I){return WA.raycast_splats(t,A,e,s,n,i,r,a,o,c,l,g,I)}async function eg(t,A){if(typeof Response=="function"&&t instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(t,A)}catch(s){if(t.headers.get("Content-Type")!="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",s);else throw s}const e=await t.arrayBuffer();return await WebAssembly.instantiate(e,A)}else{const e=await WebAssembly.instantiate(t,A);return e instanceof WebAssembly.Instance?{instance:e,module:t}:e}}function sg(){const t={};return t.wbg={},t.wbg.__wbg_buffer_609cc3eee51ed158=function(A){return A.buffer},t.wbg.__wbg_length_3b4f022188ae8db6=function(A){return A.length},t.wbg.__wbg_length_6ca527665d89694d=function(A){return A.length},t.wbg.__wbg_length_8cfd2c6409af88ad=function(A){return A.length},t.wbg.__wbg_new_9fee97a409b32b68=function(A){return new Uint16Array(A)},t.wbg.__wbg_new_e3b321dcfef89fc7=function(A){return new Uint32Array(A)},t.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354=function(A,e,s){return new Float32Array(A,e>>>0,s>>>0)},t.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212=function(A,e,s){return new Uint32Array(A,e>>>0,s>>>0)},t.wbg.__wbg_newwithlength_5a5efe313cfd59f1=function(A){return new Float32Array(A>>>0)},t.wbg.__wbg_set_10bad9bee0e9c58b=function(A,e,s){A.set(e,s>>>0)},t.wbg.__wbg_set_d23661d19148b229=function(A,e,s){A.set(e,s>>>0)},t.wbg.__wbg_set_f4f1f0daa30696fc=function(A,e,s){A.set(e,s>>>0)},t.wbg.__wbg_subarray_3aaeec89bb2544f0=function(A,e,s){return A.subarray(e>>>0,s>>>0)},t.wbg.__wbg_subarray_769e1e0f81bb259b=function(A,e,s){return A.subarray(e>>>0,s>>>0)},t.wbg.__wbindgen_init_externref_table=function(){const A=WA.__wbindgen_export_0,e=A.grow(4);A.set(0,void 0),A.set(e+0,void 0),A.set(e+1,null),A.set(e+2,!0),A.set(e+3,!1)},t.wbg.__wbindgen_memory=function(){return WA.memory},t.wbg.__wbindgen_throw=function(A,e){throw new Error(Ag(A,e))},t}function ng(t,A){return WA=t.exports,Ts.__wbindgen_wasm_module=A,Jt=null,WA.__wbindgen_start(),WA}async function Ts(t){if(WA!==void 0)return WA;typeof t<"u"&&(Object.getPrototypeOf(t)===Object.prototype?{module_or_path:t}=t:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),typeof t>"u"&&(t=new URL("data:application/wasm;base64,AGFzbQEAAAABzAEeYAJ/fwF/YAJ/fwBgA39/fwF/YAF/AX9gA39/fwBgAX8AYAV/f39/fwBgA29/fwFvYAV/f39/fwF/YAFvAW9gA29vfwBgAW8Bf2AAAX9gBH9/f38AYAAAYAR/f39/AX9gA39vbwF/YAF/AW9gAAFvYAF9AX1gBn9/f39/fwBgDX19fX19fX19f29/fX0Bb2AGf39/f39/AX9gBX9/fH9/AGAEf3x/fwBgBX9/fX9/AGAEf31/fwBgBX9/fn9/AGAEf35/fwBgAn19AX0C8gQRA3diZx1fX3diZ19idWZmZXJfNjA5Y2MzZWVlNTFlZDE1OAAJA3diZxpfX3diZ19uZXdfOWZlZTk3YTQwOWIzMmI2OAAJA3diZxpfX3diZ19zZXRfZjRmMWYwZGFhMzA2OTZmYwAKA3diZx1fX3diZ19sZW5ndGhfOGNmZDJjNjQwOWFmODhhZAALA3diZzFfX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9mMWRlYWQ0NGQxZmM3MjEyAAcDd2JnGl9fd2JnX25ld19lM2IzMjFkY2ZlZjg5ZmM3AAkDd2JnGl9fd2JnX3NldF9kMjM2NjFkMTkxNDhiMjI5AAoDd2JnHV9fd2JnX2xlbmd0aF82Y2E1Mjc2NjVkODk2OTRkAAsDd2JnMV9fd2JnX25ld3dpdGhieXRlb2Zmc2V0YW5kbGVuZ3RoX2U2YjdlNjlhY2Q0YzczNTQABwN3YmcaX193Ymdfc2V0XzEwYmFkOWJlZTBlOWM1OGIACgN3YmcdX193YmdfbGVuZ3RoXzNiNGYwMjIxODhhZThkYjYACwN3YmcfX193Ymdfc3ViYXJyYXlfNzY5ZTFlMGY4MWJiMjU5YgAHA3diZx9fX3diZ19zdWJhcnJheV8zYWFlZWM4OWJiMjU0NGYwAAcDd2JnJF9fd2JnX25ld3dpdGhsZW5ndGhfNWE1ZWZlMzEzY2ZkNTlmMQARA3diZxBfX3diaW5kZ2VuX3Rocm93AAEDd2JnEV9fd2JpbmRnZW5fbWVtb3J5ABIDd2JnH19fd2JpbmRnZW5faW5pdF9leHRlcm5yZWZfdGFibGUADgNhYAMAAQIIBQQCEwEMAAEBAgAAAQwBBAYFBQQAAQYFFAENBAAGBQQEAQQOAgECAQAIBAAVARYG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ACIDKAIEQXhxRgRAIAMhAgwBCyABQRkgAkEBdmtBACACQR9HG3QhBQNAIAMgBUEddkEEcWpBEGoiBCgCACICRQ0CIAVBAXQhBSACIQMgAigCBEF4cSABRw0ACwsgAigCCCIBIAA2AgwgAiAANgIIIABBADYCGCAAIAI2AgwgACABNgIIDwsgBCAANgIAIAAgAzYCGCAAIAA2AgwgACAANgIIC/MCAQR/IwBBMGsiACQAAkACQEGQksAAKAIARQRAQaiSwAAoAgAhAUGoksAAQQA2AgAgAUUNASAAQRhqIAERBQAgAEEQaiICIABBJGopAgA3AwAgACAAKQIcNwMIIAAoAhghAUGQksAAKAIAIgMNAgJAIANFDQBBlJLAACgCACICRQ0AQZiSwAAoAgAgAkECdBBlC0GUksAAIAE2AgBBkJLAAEEBNgIAQZiSwAAgACkDCDcCAEGgksAAIABBEGopAwA3AgALIABBMGokAEGUksAADwsgAEEANgIoIABBATYCHCAAQaCHwAA2AhggAEIENwIgIABBGGpBiIjAABBDAAsgAEEoaiACKQMANwIAIAAgACkDCDcCICAAIAE2AhwgAEEBNgIYAkAgAEEYaiIBKAIARQ0AIAEoAgQiAkUNACABKAIIIAJBAnQQZQsgAEEANgIoIABBATYCHCAAQaiIwAA2AhggAEIENwIgIAFBsIjAABBDAAuoAgIDfwF+IwBBQGoiAiQAIAEoAgBBgICAgHhGBEAgASgCDCEDIAJBJGoiBEEANgIAIAJCgICAgBA3AhwgAkEwaiADKAIAIgNBCGopAgA3AwAgAkE4aiADQRBqKQIANwMAIAIgAykCADcDKCACQRxqQcCIwAAgAkEoahAYGiACQRhqIAQoAgAiAzYCACACIAIpAhwiBTcDECABQQhqIAM2AgAgASAFNwIACyABKQIAIQUgAUKAgICAEDcCACACQQhqIgMgAUEIaiIBKAIANgIAIAFBADYCAEGxk8AALQAAGiACIAU3AwBBDEEEEF0iAUUEQEEEQQwQbQALIAEgAikDADcCACABQQhqIAMoAgA2AgAgAEHgisAANgIEIAAgATYCACACQUBrJAAL0gECBH8BfiMAQSBrIgMkACABIAEgAmoiAksEQEEAQQAQUgALQQggACgCACIEQQF0IgEgAiABIAJLGyICIAJBCEkb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QQRqrUKAgICA4ACENwMoIAEgAa1CgICAgOAAhDcDICABIAFBIGo2AhAgAUEIakHIj8AAEEMAC2kCAX8BfiMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQfyNwAA2AgggA0ICNwIUIANCgICAgOAAIgQgA62ENwMoIAMgBCADQQRqrYQ3AyAgAyADQSBqNgIQIANBCGogAhBDAAtpAgF/AX4jAEEwayIDJAAgAyAANgIAIAMgATYCBCADQQI2AgwgA0H4kcAANgIIIANCAjcCFCADQoCAgIDgACIEIANBBGqthDcDKCADIAQgA62ENwMgIAMgA0EgajYCECADQQhqIAIQQwALZgAjAEEwayIAJABBsJPAAC0AAARAIABBAjYCDCAAQbCKwAA2AgggAEIBNwIUIAAgATYCLCAAIABBLGqtQoCAgIDgAIQ3AyAgACAAQSBqNgIQIABBCGpB0IrAABBDAAsgAEEwaiQAC5QBAgN/AW8jAEEgayIDJAAgAyAAKAIAEHAiBDYCACADIAI2AgQgAiAERwRAIANBADYCCCADIANBBGogA0EIahBAAAsQWyIEEFMiBSUBEAUhBhAbIgIgBiYBIAVBhAFPBEAgBRAtCyACIAAoAgAgAUECdhBkIAJBhAFPBEAgAhAtCyAEQYQBTwRAIAQQLQsgA0EgaiQAC08BAX8jAEEwayIAJAAgAEEBNgIMIABBwI3AADYCCCAAQgE3AhQgACAAQS9qrUKAgICAoAWENwMgIAAgAEEgajYCECAAQQhqQcSBwAAQQwALQQEBfyACIAAoAgAgACgCCCIDa0sEQCAAIAMgAhAlIAAoAgghAwsgACgCBCADaiABIAIQHxogACACIANqNgIIQQALTQECf0Gxk8AALQAAGiABKAIEIQIgASgCACEDQQhBBBBdIgFFBEBBBEEIEG0ACyABIAI2AgQgASADNgIAIABB8IrAADYCBCAAIAE2AgALQQEBfyACIAAoAgAgACgCCCIDa0sEQCAAIAMgAhApIAAoAgghAwsgACgCBCADaiABIAIQHxogACACIANqNgIIQQALQQEBfyMAQSBrIgIkACACQQA2AhAgAkEBNgIEIAJCBDcCCCACQS42AhwgAiAANgIYIAIgAkEYajYCACACIAEQQwALswIBA38gACgCACECIAEoAhwiAEEQcUUE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ZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkTGF6eSBpbnN0YW5jZSBoYXMgcHJldmlvdXNseSBiZWVuIHBvaXNvbmVkdgMQACoAAAAvVXNlcnMvZG1hcmNvcy8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL29uY2VfY2VsbC0xLjIxLjMvc3JjL2xpYi5ycwCoAxAAXwAAAAgDAAAZAAAAcmVlbnRyYW50IGluaXQAABgEEAAOAAAAqAMQAF8AAAB6AgAADQAAABYAAAAMAAAABAAAABcAAAAYAAAAGQAAAC9ydXN0L2RlcHMvZGxtYWxsb2MtMC4yLjYvc3JjL2RsbWFsbG9jLnJzYXNzZXJ0aW9uIGZhaWxlZDogcHNpemUgPj0gc2l6ZSArIG1pbl9vdmVyaGVhZABYBBAAKQAAAKgEAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogcHNpemUgPD0gc2l6ZSArIG1heF9vdmVyaGVhZAAAWAQQACkAAACuBAAADQAAAEFjY2Vzc0Vycm9ybWVtb3J5IGFsbG9jYXRpb24gb2YgIGJ5dGVzIGZhaWxlZAAAAAsFEAAVAAAAIAUQAA0AAABzdGQvc3JjL2FsbG9jLnJzQAUQABAAAABjAQAACQAAABYAAAAMAAAABAAAABoAAAAAAAAACAAAAAQAAAAbAAAAAAAAAAgAAAAEAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAQAAAABAAAACEAAAAiAAAAIwAAACQAAABFcnJvcgAAACUAAAAMAAAABAAAACYAAAAnAAAAKAAAAGNhcGFjaXR5IG92ZXJmbG93AAAA2AUQABEAAABhbGxvYy9zcmMvcmF3X3ZlYy5yc/QFEAAUAAAAGAAAAAUAQaCMwAAL8AUBAAAAKQAAAGEgZm9ybWF0dGluZyB0cmFpdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB3aGVuIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBkaWQgbm90YWxsb2Mvc3JjL2ZtdC5ycwAAfgYQABAAAAB+AgAADgAAAEJvcnJvd011dEVycm9yYWxyZWFkeSBib3Jyb3dlZDogrgYQABIAAABpbmRleCBvdXQgb2YgYm91bmRzOiB0aGUgbGVuIGlzICBidXQgdGhlIGluZGV4IGlzIAAAyAYQACAAAADoBhAAEgAAAD09IT1tYXRjaGVzYXNzZXJ0aW9uIGBsZWZ0ICByaWdodGAgZmFpbGVkCiAgbGVmdDogCiByaWdodDogABcHEAAQAAAAJwcQABcAAAA+BxAACQAAACByaWdodGAgZmFpbGVkOiAKICBsZWZ0OiAAAAAXBxAAEAAAAGAHEAAQAAAAcAcQAAkAAAA+BxAACQAAADogAAABAAAAAAAAAJwHEAACAAAAfSB9Y29yZS9zcmMvZm10L251bS5ycwAAswcQABMAAABmAAAAFwAAADB4MDAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTIwMjEyMjIzMjQyNTI2MjcyODI5MzAzMTMyMzMzNDM1MzYzNzM4Mzk0MDQxNDI0MzQ0NDU0NjQ3NDg0OTUwNTE1MjUzNTQ1NTU2NTc1ODU5NjA2MTYyNjM2NDY1NjY2NzY4Njk3MDcxNzI3Mzc0NzU3Njc3Nzg3OTgwODE4MjgzODQ4NTg2ODc4ODg5OTA5MTkyOTM5NDk1OTY5Nzk4OTlyYW5nZSBzdGFydCBpbmRleCAgb3V0IG9mIHJhbmdlIGZvciBzbGljZSBvZiBsZW5ndGggAACiCBAAEgAAALQIEAAiAAAAcmFuZ2UgZW5kIGluZGV4IOgIEAAQAAAAtAgQACIAAAAAAAA/AAAAvwBBqJLAAAsBFABwCXByb2R1Y2VycwIIbGFuZ3VhZ2UBBFJ1c3QADHByb2Nlc3NlZC1ieQMFcnVzdGMdMS44My4wICg5MGIzNWE2MjMgMjAyNC0xMS0yNikGd2FscnVzBjAuMjMuMwx3YXNtLWJpbmRnZW4HMC4yLjEwMABJD3RhcmdldF9mZWF0dXJlcwQrD211dGFibGUtZ2xvYmFscysIc2lnbi1leHQrD3JlZmVyZW5jZS10eXBlcysKbXVsdGl2YWx1ZQ==",typeof document>"u"?require("url").pathToFileURL(__filename).href:ke&&ke.tagName.toUpperCase()==="SCRIPT"&&ke.src||new URL("spark.cjs.min.js",document.baseURI).href));const A=sg();(typeof t=="string"||typeof Request=="function"&&t instanceof Request||typeof URL=="function"&&t instanceof URL)&&(t=fetch(t));const{instance:e,module:s}=await eg(await t,A);return ng(e,s)}const kA=-12,NA=9,ig=Math.exp(kA),rg=Math.exp(NA),Us=-30,ht=Math.exp(Us),Oe=11,We=11,Gs=11,ag=Oe+We,X=1<<Oe,HA=1<<We,Rs=1<<Gs,je=1,og=X-1,gg=HA-1,cg=Rs-1,lg=!0,Ig=Object.freeze(Object.defineProperty({__proto__:null,LN_SCALE_MAX:NA,LN_SCALE_MIN:kA,LN_SCALE_ZERO:Us,SCALE_MAX:rg,SCALE_MIN:ig,SCALE_ZERO:ht,SPLAT_TEX_DEPTH:Rs,SPLAT_TEX_DEPTH_BITS:Gs,SPLAT_TEX_DEPTH_MASK:cg,SPLAT_TEX_HEIGHT:HA,SPLAT_TEX_HEIGHT_BITS:We,SPLAT_TEX_HEIGHT_MASK:gg,SPLAT_TEX_LAYER_BITS:ag,SPLAT_TEX_MIN_HEIGHT:je,SPLAT_TEX_WIDTH:X,SPLAT_TEX_WIDTH_BITS:Oe,SPLAT_TEX_WIDTH_MASK:og,WASM_SPLAT_SORT:lg},Symbol.toStringTag,{value:"Module"}));function pt(t){return t==="bool"||t==="bvec2"||t==="bvec3"||t==="bvec4"}function dt(t){return t==="int"||t==="uint"||t==="float"}function QA(t){return t==="int"||t==="ivec2"||t==="ivec3"||t==="ivec4"}function EA(t){return t==="uint"||t==="uvec2"||t==="uvec3"||t==="uvec4"}function Ae(t){return t==="float"||t==="vec2"||t==="vec3"||t==="vec4"}function Ys(t){return t==="mat2"||t==="mat2x2"||t==="mat2x3"||t==="mat2x4"||t==="mat3"||t==="mat3x2"||t==="mat3x3"||t==="mat3x4"||t==="mat4"||t==="mat4x2"||t==="mat4x3"||t==="mat4x4"}function ot(t){return Ae(t)||Ys(t)}function Nt(t){return t==="vec2"||t==="ivec2"||t==="uvec2"}function Tt(t){return t==="vec3"||t==="ivec3"||t==="uvec3"}function te(t){return t==="vec4"||t==="ivec4"||t==="uvec4"}function ug(t){return Nt(t)||Tt(t)||te(t)}function gt(t){return t==="mat2"||t==="mat2x2"}function ct(t){return t==="mat3"||t==="mat3x3"}function lt(t){return t==="mat4"||t==="mat4x4"}function Js(t){switch(t){case"vec2":return"float";case"vec3":return"float";case"vec4":return"float";case"ivec2":return"int";case"ivec3":return"int";case"ivec4":return"int";case"uvec2":return"uint";case"uvec3":return"uint";case"uvec4":return"uint";default:throw new Error(`Invalid vector type: ${t}`)}}function _s(t){switch(t){case"vec2":case"ivec2":case"uvec2":return 2;case"vec3":case"ivec3":case"uvec3":return 3;case"vec4":case"ivec4":case"uvec4":return 4;default:throw new Error(`Invalid vector type: ${t}`)}}function hg(t){if(dt(t))return"float";if(Nt(t))return"vec2";if(Tt(t))return"vec3";if(te(t))return"vec4";throw new Error(`Invalid vector type: ${t}`)}function Ls(t){if(dt(t))return"uint";if(Nt(t))return"uvec2";if(Tt(t))return"uvec3";if(te(t))return"uvec4";throw new Error(`Invalid vector type: ${t}`)}function Cg(t){if(dt(t))return"int";if(Nt(t))return"ivec2";if(Tt(t))return"ivec3";if(te(t))return"ivec4";throw new Error(`Invalid vector type: ${t}`)}function zs(t){if(typeof t=="string")return t;if(typeof t=="object"&&t.type)return t.type;throw new Error(`Invalid DynoType: ${String(t)}`)}function aA(t){return Math.trunc(t).toString()}function oA(t){return`${Math.max(0,Math.trunc(t)).toString()}u`}function q(t){return t===Number.POSITIVE_INFINITY?"INFINITY":t===Number.NEGATIVE_INFINITY?"-INFINITY":Number.isInteger(t)?t.toFixed(1):t.toString()}function V(t){return t instanceof it?t.type:t.dynoOut().type}class it{constructor(A){this.__isDynoValue=!0,this.type=A}}class K extends it{constructor(A,e){super(A.outTypes[e]),this.dyno=A,this.key=e}}class vt extends it{constructor(A,e){super(A),this.literal=e}getLiteral(){return this.literal}}function ue(t,A){return new vt(t,A)}class qs extends vt{constructor(A,e){super(A,""),this.value=e}getLiteral(){const{type:A,value:e}=this;switch(A){case"bool":return e?"true":"false";case"uint":return oA(e);case"int":return aA(e);case"float":return q(e);case"bvec2":{const s=e;return`bvec2(${s[0]}, ${s[1]})`}case"uvec2":{if(e instanceof u.Vector2)return`uvec2(${oA(e.x)}, ${oA(e.y)})`;const s=e;return`uvec2(${oA(s[0])}, ${oA(s[1])})`}case"ivec2":{if(e instanceof u.Vector2)return`ivec2(${aA(e.x)}, ${aA(e.y)})`;const s=e;return`ivec2(${aA(s[0])}, ${aA(s[1])})`}case"vec2":{if(e instanceof u.Vector2)return`vec2(${q(e.x)}, ${q(e.y)})`;const s=e;return`vec2(${q(s[0])}, ${q(s[1])})`}case"bvec3":{const s=e;return`bvec3(${s[0]}, ${s[1]}, ${s[2]})`}case"uvec3":{if(e instanceof u.Vector3)return`uvec3(${oA(e.x)}, ${oA(e.y)}, ${oA(e.z)})`;const s=e;return`uvec3(${oA(s[0])}, ${oA(s[1])}, ${oA(s[2])})`}case"ivec3":{if(e instanceof u.Vector3)return`ivec3(${aA(e.x)}, ${aA(e.y)}, ${aA(e.z)})`;const s=e;return`ivec3(${aA(s[0])}, ${aA(s[1])}, ${aA(s[2])})`}case"vec3":{if(e instanceof u.Vector3)return`vec3(${q(e.x)}, ${q(e.y)}, ${q(e.z)})`;const s=e;return`vec3(${q(s[0])}, ${q(s[1])}, ${q(s[2])})`}case"bvec4":{const s=e;return`bvec4(${s[0]}, ${s[1]}, ${s[2]}, ${s[3]})`}case"uvec4":{if(e instanceof u.Vector4)return`uvec4(${oA(e.x)}, ${oA(e.y)}, ${oA(e.z)}, ${oA(e.w)})`;const s=e;return`uvec4(${oA(s[0])}, ${oA(s[1])}, ${oA(s[2])}, ${oA(s[3])})`}case"ivec4":{if(e instanceof u.Vector4)return`ivec4(${aA(e.x)}, ${aA(e.y)}, ${aA(e.z)}, ${aA(e.w)})`;const s=e;return`ivec4(${aA(s[0])}, ${aA(s[1])}, ${aA(s[2])}, ${aA(s[3])})`}case"vec4":{if(e instanceof u.Vector4)return`vec4(${q(e.x)}, ${q(e.y)}, ${q(e.z)}, ${q(e.w)})`;if(e instanceof u.Quaternion)return`vec4(${q(e.x)}, ${q(e.y)}, ${q(e.z)}, ${q(e.w)})`;const s=e;return`vec4(${q(s[0])}, ${q(s[1])}, ${q(s[2])}, ${q(s[3])})`}case"mat2":case"mat2x2":{const s=e,n=s instanceof u.Matrix2?s.elements:e,i=new Array(4).fill(0).map((r,a)=>q(n[a]));return`${A}(${i.join(", ")})`}case"mat2x3":{const s=e,n=new Array(6).fill(0).map((i,r)=>q(s[r]));return`${A}(${n.join(", ")})`}case"mat2x4":{const s=e,n=new Array(8).fill(0).map((i,r)=>q(s[r]));return`${A}(${n.join(", ")})`}case"mat3":case"mat3x3":{const s=e,n=s instanceof u.Matrix3?s.elements:e,i=new Array(9).fill(0).map((r,a)=>q(n[a]));return`${A}(${i.join(", ")})`}case"mat3x2":{const s=e,n=new Array(6).fill(0).map((i,r)=>q(s[r]));return`${A}(${n.join(", ")})`}case"mat3x4":{const s=e,n=new Array(12).fill(0).map((i,r)=>q(s[r]));return`${A}(${n.join(", ")})`}case"mat4":case"mat4x4":{const s=e,n=s instanceof u.Matrix4?s.elements:e,i=new Array(16).fill(0).map((r,a)=>q(n[a]));return`${A}(${i.join(", ")})`}case"mat4x2":{const s=e,n=new Array(8).fill(0).map((i,r)=>q(s[r]));return`${A}(${n.join(", ")})`}case"mat4x3":{const s=e,n=new Array(12).fill(0).map((i,r)=>q(s[r]));return`${A}(${n.join(", ")})`}default:throw new Error(`Type not implemented: ${String(A)}`)}}}function J(t,A){return new qs(t,A)}function _t(t){const A=String(t);if(pt(t))return`${A}(false)`;if(ot(t))return`${A}(0.0)`;if(QA(t))return`${A}(0)`;if(EA(t))return`${A}(0u)`;throw new Error(`Type not implemented: ${A}`)}function Bg(t){const A=String(t);if(pt(t))return`${A}(true)`;if(ot(t))return`${A}(1.0)`;if(QA(t))return`${A}(1)`;if(EA(t))return`${A}(1u)`;throw new Error(`Type not implemented: ${A}`)}function Qg(t){const A=String(t);if(pt(t))return`${A}(true)`;if(ot(t))return`${A}(-1.0)`;if(QA(t))return`${A}(-1)`;if(EA(t))return`${A}(0xFFFFFFFFu)`;throw new Error(`Type not implemented: ${A}`)}const hs=" ";class Hs{constructor({indent:A}={}){this.globals=new Set,this.statements=[],this.uniforms={},this.declares=new Set,this.updaters=[],this.sequence=0,this.indent=hs,this.indent=A??hs}nextSequence(){return this.sequence++}}class ${constructor({inTypes:A,outTypes:e,inputs:s,update:n,globals:i,statements:r,generate:a}){this.inTypes=A??{},this.outTypes=e??{},this.inputs=s??{},this.update=n,this.globals=i,this.statements=r,this.generate=a??(({inputs:o,outputs:c,compile:l})=>{var g,I;return{globals:(g=this.globals)==null?void 0:g.call(this,{inputs:o,outputs:c,compile:l}),statements:(I=this.statements)==null?void 0:I.call(this,{inputs:o,outputs:c,compile:l})}})}get outputs(){const A={};for(const e in this.outTypes)A[e]=new K(this,e);return A}apply(A){return Object.assign(this.inputs,A),this.outputs}compile({inputs:A,outputs:e,compile:s}){const n=[`// ${this.constructor.name}(${Object.values(A).join(", ")}) => (${Object.values(e).join(", ")})`],i=[];for(const c in e){const l=e[c];l&&!s.declares.has(l)&&(s.declares.add(l),i.push(c))}const{globals:r,statements:a,uniforms:o}=this.generate({inputs:A,outputs:e,compile:s});for(const c of r??[])s.globals.add(c);for(const c in o)s.uniforms[c]=o[c];this.update&&s.updaters.push(this.update);for(const c of i){const l=e[c];l&&(s.uniforms[l]||n.push(`${Ze(l,this.outTypes[c])};`))}return a!=null&&a.length&&(n.push("{"),n.push(...a.map(c=>s.indent+c)),n.push("}")),n}}class $A extends ${constructor({inTypes:A,outTypes:e,inputs:s,update:n,globals:i,construct:r}){super({inTypes:A,outTypes:e,inputs:s,update:n,globals:i,generate:a=>this.generateBlock(a)}),this.construct=r}generateBlock({inputs:A,outputs:e,compile:s}){var B,C;const n={},i={};for(const Q in A)A[Q]!=null&&(n[Q]=new vt(this.inTypes[Q],A[Q]));for(const Q in e)e[Q]!=null&&(i[Q]=new it(this.outTypes[Q]));const r={roots:[]},a=this.construct(n,i,r);for(const Q of((B=this.globals)==null?void 0:B.call(this,{inputs:A,outputs:e,compile:s}))??[])s.globals.add(Q);const o=[],c=new Map;function l(Q,E,f){let p=c.get(Q);if(!p){p={sequence:s.nextSequence(),outNames:new Map,newOuts:new Set},c.set(Q,p);for(const d in Q.inputs){let w=Q.inputs[d];for(;w;){if(w instanceof it){w instanceof K&&l(w.dyno,w.key);break}w=w.dynoOut()}}o.push(Q)}E&&(f||p.newOuts.add(E),p.outNames.set(E,f??`${E}_${p.sequence}`))}for(const Q of r.roots)l(Q);for(const Q in i){let E=(a==null?void 0:a[Q])??i[Q];for(;E;){if(E instanceof it){E instanceof K&&l(E.dyno,E.key,e[Q]);break}E=E.dynoOut()}i[Q]=E}const g=[];for(const Q of o){const E={},f={};for(const w in Q.inputs){let D=Q.inputs[w];for(;D;){if(D instanceof it){if(D instanceof vt)E[w]=D.getLiteral();else if(D instanceof K){const x=(C=c.get(D.dyno))==null?void 0:C.outNames.get(D.key);if(!x)throw new Error(`Source not found for ${D.dyno.constructor.name}.${D.key}`);E[w]=x}break}D=D.dynoOut()}}const p=c.get(Q)??{outNames:new Map};for(const[w,D]of p.outNames.entries())f[w]=D;const d=Q.compile({inputs:E,outputs:f,compile:s});g.push(d)}const I=[];for(const Q in e)i[Q]instanceof vt&&I.push(`${e[Q]} = ${i[Q].getLiteral()};`);return I.length>0&&g.push(I),{statements:g.flatMap((Q,E)=>E===0?Q:["",...Q])}}}function bA(t,A,e,{update:s,globals:n}={}){return new $A({inTypes:t,outTypes:A,construct:e,update:s,globals:n})}function ee({inTypes:t,outTypes:A,inputs:e,update:s,globals:n,statements:i,generate:r}){return new $({inTypes:t,outTypes:A,inputs:e,update:s,globals:n,statements:i,generate:r})}function Ze(t,A,e){const s=typeof A=="string"?A:A.type;if(!s)throw new Error(`Invalid DynoType: ${String(A)}`);return`${s} ${t}${e!=null?`[${e}]`:""}`}function RA(t){var i;let A=!1;const e=t.split(`
2
2
  `).map(r=>{const a=r.trimEnd();return A?a:a.length>0?(A=!0,a):null}).filter(r=>r!=null);for(;e.length>0&&e[e.length-1].length===0;)e.pop();if(e.length===0)return[];const s=(i=e[0].match(/^\s*/))==null?void 0:i[0];if(!s)return e;const n=new RegExp(`^${s}`);return e.map(r=>r.replace(n,""))}function hA(t){return RA(t).join(`
3
- `)}class v extends V{constructor({a:A,outKey:e,outTypeFunc:s}){const n={a:$(A)},i=s($(A)),r={[e]:i};super({inTypes:n,outTypes:r,inputs:{a:A}}),this.outKey=e}dynoOut(){return new K(this,this.outKey)}}class tA extends V{constructor({a:A,b:e,outKey:s,outTypeFunc:n}){const i={a:$(A),b:$(e)},r=n($(A),$(e)),a={[s]:r};super({inTypes:i,outTypes:a,inputs:{a:A,b:e}}),this.outKey=s}dynoOut(){return new K(this,this.outKey)}}class yt extends V{constructor({a:A,b:e,c:s,outKey:n,outTypeFunc:i}){const r={a:$(A),b:$(e),c:$(s)},a=i($(A),$(e),$(s)),o={[n]:a};super({inTypes:r,outTypes:o,inputs:{a:A,b:e,c:s}}),this.outKey=n}dynoOut(){return new K(this,this.outKey)}}const AA={type:"Gsplat"},se={type:"PackedSplats"},Eg=t=>new $s({packedSplats:t}),bt=(t,A)=>new Ps({packedSplats:t,index:A}),Ks=(t,A,e,s)=>new Xs({packedSplats:t,index:A,base:e,count:s}),Ct=t=>new Os({gsplat:t}),rt=({gsplat:t,flags:A,index:e,center:s,scales:n,quaternion:i,rgba:r,rgb:a,opacity:o,x:c,y:l,z:g,r:I,g:h,b:B})=>new Ws({gsplat:t,flags:A,index:e,center:s,scales:n,quaternion:i,rgba:r,rgb:a,opacity:o,x:c,y:l,z:g,r:I,g:h,b:B}),_e=t=>new Zs({gsplat:t}),As=(t,{scale:A,rotate:e,translate:s,recolor:n})=>new An({gsplat:t,scale:A,rotate:e,translate:s,recolor:n}),FA=hA(`
3
+ `)}class v extends ${constructor({a:A,outKey:e,outTypeFunc:s}){const n={a:V(A)},i=s(V(A)),r={[e]:i};super({inTypes:n,outTypes:r,inputs:{a:A}}),this.outKey=e}dynoOut(){return new K(this,this.outKey)}}class tA extends ${constructor({a:A,b:e,outKey:s,outTypeFunc:n}){const i={a:V(A),b:V(e)},r=n(V(A),V(e)),a={[s]:r};super({inTypes:i,outTypes:a,inputs:{a:A,b:e}}),this.outKey=s}dynoOut(){return new K(this,this.outKey)}}class yt extends ${constructor({a:A,b:e,c:s,outKey:n,outTypeFunc:i}){const r={a:V(A),b:V(e),c:V(s)},a=i(V(A),V(e),V(s)),o={[n]:a};super({inTypes:r,outTypes:o,inputs:{a:A,b:e,c:s}}),this.outKey=n}dynoOut(){return new K(this,this.outKey)}}const AA={type:"Gsplat"},se={type:"PackedSplats"},Eg=t=>new Vs({packedSplats:t}),bt=(t,A)=>new Ps({packedSplats:t,index:A}),Ks=(t,A,e,s)=>new Xs({packedSplats:t,index:A,base:e,count:s}),Ct=t=>new Os({gsplat:t}),rt=({gsplat:t,flags:A,index:e,center:s,scales:n,quaternion:i,rgba:r,rgb:a,opacity:o,x:c,y:l,z:g,r:I,g:h,b:B})=>new Ws({gsplat:t,flags:A,index:e,center:s,scales:n,quaternion:i,rgba:r,rgb:a,opacity:o,x:c,y:l,z:g,r:I,g:h,b:B}),Le=t=>new Zs({gsplat:t}),As=(t,{scale:A,rotate:e,translate:s,recolor:n})=>new An({gsplat:t,scale:A,rotate:e,translate:s,recolor:n}),FA=hA(`
4
4
  struct Gsplat {
5
5
  vec3 center;
6
6
  uint flags;
@@ -20,7 +20,7 @@
20
20
  int numSplats;
21
21
  vec4 rgbMinMaxLnScaleMinMax;
22
22
  };
23
- `);class $s extends v{constructor({packedSplats:A}){super({a:A,outKey:"numSplats",outTypeFunc:()=>"int"}),this.statements=({inputs:e,outputs:s})=>[`${s.numSplats} = ${e.a}.numSplats;`]}}const Vs=hA(`
23
+ `);class Vs extends v{constructor({packedSplats:A}){super({a:A,outKey:"numSplats",outTypeFunc:()=>"int"}),this.statements=({inputs:e,outputs:s})=>[`${s.numSplats} = ${e.a}.numSplats;`]}}const $s=hA(`
24
24
  bool readPackedSplat(usampler2DArray texture, int numSplats, vec4 rgbMinMaxLnScaleMinMax, int index, out Gsplat gsplat) {
25
25
  if ((index >= 0) && (index < numSplats)) {
26
26
  uvec4 packed = texelFetch(texture, splatTexCoord(index), 0);
@@ -30,14 +30,14 @@
30
30
  return false;
31
31
  }
32
32
  }
33
- `);class Ps extends V{constructor({packedSplats:A,index:e}){super({inTypes:{packedSplats:se,index:"int"},outTypes:{gsplat:AA},inputs:{packedSplats:A,index:e},globals:()=>[FA,ye,Vs],statements:({inputs:s,outputs:n})=>{const{gsplat:i}=n;if(!i)return[];const{packedSplats:r,index:a}=s;let o;return r&&a?o=RA(`
33
+ `);class Ps extends ${constructor({packedSplats:A,index:e}){super({inTypes:{packedSplats:se,index:"int"},outTypes:{gsplat:AA},inputs:{packedSplats:A,index:e},globals:()=>[FA,ye,$s],statements:({inputs:s,outputs:n})=>{const{gsplat:i}=n;if(!i)return[];const{packedSplats:r,index:a}=s;let o;return r&&a?o=RA(`
34
34
  if (readPackedSplat(${r}.texture, ${r}.numSplats, ${r}.rgbMinMaxLnScaleMinMax, ${a}, ${i})) {
35
35
  bool zeroSize = all(equal(${i}.scales, vec3(0.0, 0.0, 0.0)));
36
36
  ${i}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE;
37
37
  } else {
38
38
  ${i}.flags = 0u;
39
39
  }
40
- `):o=[`${i}.flags = 0u;`],o.push(`${i}.index = ${a??"0"};`),o}})}dynoOut(){return new K(this,"gsplat")}}class Xs extends V{constructor({packedSplats:A,index:e,base:s,count:n}){super({inTypes:{packedSplats:se,index:"int",base:"int",count:"int"},outTypes:{gsplat:AA},inputs:{packedSplats:A,index:e,base:s,count:n},globals:()=>[FA,ye,Vs],statements:({inputs:i,outputs:r})=>{const{gsplat:a}=r;if(!a)return[];const{packedSplats:o,index:c,base:l,count:g}=i;let I;return o&&c&&l&&g?I=RA(`
40
+ `):o=[`${i}.flags = 0u;`],o.push(`${i}.index = ${a??"0"};`),o}})}dynoOut(){return new K(this,"gsplat")}}class Xs extends ${constructor({packedSplats:A,index:e,base:s,count:n}){super({inTypes:{packedSplats:se,index:"int",base:"int",count:"int"},outTypes:{gsplat:AA},inputs:{packedSplats:A,index:e,base:s,count:n},globals:()=>[FA,ye,$s],statements:({inputs:i,outputs:r})=>{const{gsplat:a}=r;if(!a)return[];const{packedSplats:o,index:c,base:l,count:g}=i;let I;return o&&c&&l&&g?I=RA(`
41
41
  ${a}.flags = 0u;
42
42
  if ((${c} >= ${l}) && (${c} < (${l} + ${g}))) {
43
43
  if (readPackedSplat(${o}.texture, ${o}.numSplats, ${o}.rgbMinMaxLnScaleMinMax, ${c}, ${a})) {
@@ -45,7 +45,7 @@
45
45
  ${a}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE;
46
46
  }
47
47
  }
48
- `):I=[`${a}.flags = 0u;`],I.push(`${a}.index = ${c??"0"};`),I}})}dynoOut(){return new K(this,"gsplat")}}class Os extends V{constructor({gsplat:A}){super({inTypes:{gsplat:AA},outTypes:{flags:"uint",active:"bool",index:"int",center:"vec3",scales:"vec3",quaternion:"vec4",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},inputs:{gsplat:A},globals:()=>[FA],statements:({inputs:e,outputs:s})=>{const{gsplat:n}=e,{flags:i,active:r,index:a,center:o,scales:c,quaternion:l,rgba:g,rgb:I,opacity:h,x:B,y:C,z:Q,r:E,g:f,b:p}=s;return[i?`${i} = ${n?`${n}.flags`:"0u"};`:null,r?`${r} = isGsplatActive(${n?`${n}.flags`:"0u"});`:null,a?`${a} = ${n?`${n}.index`:"0"};`:null,o?`${o} = ${n?`${n}.center`:"vec3(0.0, 0.0, 0.0)"};`:null,c?`${c} = ${n?`${n}.scales`:"vec3(0.0, 0.0, 0.0)"};`:null,l?`${l} = ${n?`${n}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)"};`:null,g?`${g} = ${n?`${n}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)"};`:null,I?`${I} = ${n?`${n}.rgba.rgb`:"vec3(0.0, 0.0, 0.0)"};`:null,h?`${h} = ${n?`${n}.rgba.a`:"0.0"};`:null,B?`${B} = ${n?`${n}.center.x`:"0.0"};`:null,C?`${C} = ${n?`${n}.center.y`:"0.0"};`:null,Q?`${Q} = ${n?`${n}.center.z`:"0.0"};`:null,E?`${E} = ${n?`${n}.rgba.r`:"0.0"};`:null,f?`${f} = ${n?`${n}.rgba.g`:"0.0"};`:null,p?`${p} = ${n?`${n}.rgba.b`:"0.0"};`:null].filter(Boolean)}})}}class Ws extends V{constructor({gsplat:A,flags:e,index:s,center:n,scales:i,quaternion:r,rgba:a,rgb:o,opacity:c,x:l,y:g,z:I,r:h,g:B,b:C}){super({inTypes:{gsplat:AA,flags:"uint",index:"int",center:"vec3",scales:"vec3",quaternion:"vec4",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},outTypes:{gsplat:AA},inputs:{gsplat:A,flags:e,index:s,center:n,scales:i,quaternion:r,rgba:a,rgb:o,opacity:c,x:l,y:g,z:I,r:h,g:B,b:C},globals:()=>[FA],statements:({inputs:Q,outputs:E})=>{const{gsplat:f}=E;if(!f)return[];const{gsplat:p,flags:d,index:w,center:D,scales:x,quaternion:y,rgba:m,rgb:N,opacity:M,x:S,y:U,z:F,r:b,g:T,b:R}=Q;return[`${f}.flags = ${d??(p?`${p}.flags`:"0u")};`,`${f}.index = ${w??(p?`${p}.index`:"0")};`,`${f}.center = ${D??(p?`${p}.center`:"vec3(0.0, 0.0, 0.0)")};`,`${f}.scales = ${x??(p?`${p}.scales`:"vec3(0.0, 0.0, 0.0)")};`,`${f}.quaternion = ${y??(p?`${p}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)")};`,`${f}.rgba = ${m??(p?`${p}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)")};`,N?`${f}.rgba.rgb = ${N};`:null,M?`${f}.rgba.a = ${M};`:null,S?`${f}.center.x = ${S};`:null,U?`${f}.center.y = ${U};`:null,F?`${f}.center.z = ${F};`:null,b?`${f}.rgba.r = ${b};`:null,T?`${f}.rgba.g = ${T};`:null,R?`${f}.rgba.b = ${R};`:null].filter(Boolean)}})}dynoOut(){return new K(this,"gsplat")}}const js=hA(`
48
+ `):I=[`${a}.flags = 0u;`],I.push(`${a}.index = ${c??"0"};`),I}})}dynoOut(){return new K(this,"gsplat")}}class Os extends ${constructor({gsplat:A}){super({inTypes:{gsplat:AA},outTypes:{flags:"uint",active:"bool",index:"int",center:"vec3",scales:"vec3",quaternion:"vec4",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},inputs:{gsplat:A},globals:()=>[FA],statements:({inputs:e,outputs:s})=>{const{gsplat:n}=e,{flags:i,active:r,index:a,center:o,scales:c,quaternion:l,rgba:g,rgb:I,opacity:h,x:B,y:C,z:Q,r:E,g:f,b:p}=s;return[i?`${i} = ${n?`${n}.flags`:"0u"};`:null,r?`${r} = isGsplatActive(${n?`${n}.flags`:"0u"});`:null,a?`${a} = ${n?`${n}.index`:"0"};`:null,o?`${o} = ${n?`${n}.center`:"vec3(0.0, 0.0, 0.0)"};`:null,c?`${c} = ${n?`${n}.scales`:"vec3(0.0, 0.0, 0.0)"};`:null,l?`${l} = ${n?`${n}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)"};`:null,g?`${g} = ${n?`${n}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)"};`:null,I?`${I} = ${n?`${n}.rgba.rgb`:"vec3(0.0, 0.0, 0.0)"};`:null,h?`${h} = ${n?`${n}.rgba.a`:"0.0"};`:null,B?`${B} = ${n?`${n}.center.x`:"0.0"};`:null,C?`${C} = ${n?`${n}.center.y`:"0.0"};`:null,Q?`${Q} = ${n?`${n}.center.z`:"0.0"};`:null,E?`${E} = ${n?`${n}.rgba.r`:"0.0"};`:null,f?`${f} = ${n?`${n}.rgba.g`:"0.0"};`:null,p?`${p} = ${n?`${n}.rgba.b`:"0.0"};`:null].filter(Boolean)}})}}class Ws extends ${constructor({gsplat:A,flags:e,index:s,center:n,scales:i,quaternion:r,rgba:a,rgb:o,opacity:c,x:l,y:g,z:I,r:h,g:B,b:C}){super({inTypes:{gsplat:AA,flags:"uint",index:"int",center:"vec3",scales:"vec3",quaternion:"vec4",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},outTypes:{gsplat:AA},inputs:{gsplat:A,flags:e,index:s,center:n,scales:i,quaternion:r,rgba:a,rgb:o,opacity:c,x:l,y:g,z:I,r:h,g:B,b:C},globals:()=>[FA],statements:({inputs:Q,outputs:E})=>{const{gsplat:f}=E;if(!f)return[];const{gsplat:p,flags:d,index:w,center:D,scales:x,quaternion:y,rgba:m,rgb:N,opacity:M,x:S,y:U,z:F,r:b,g:T,b:R}=Q;return[`${f}.flags = ${d??(p?`${p}.flags`:"0u")};`,`${f}.index = ${w??(p?`${p}.index`:"0")};`,`${f}.center = ${D??(p?`${p}.center`:"vec3(0.0, 0.0, 0.0)")};`,`${f}.scales = ${x??(p?`${p}.scales`:"vec3(0.0, 0.0, 0.0)")};`,`${f}.quaternion = ${y??(p?`${p}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)")};`,`${f}.rgba = ${m??(p?`${p}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)")};`,N?`${f}.rgba.rgb = ${N};`:null,M?`${f}.rgba.a = ${M};`:null,S?`${f}.center.x = ${S};`:null,U?`${f}.center.y = ${U};`:null,F?`${f}.center.z = ${F};`:null,b?`${f}.rgba.r = ${b};`:null,T?`${f}.rgba.g = ${T};`:null,R?`${f}.rgba.b = ${R};`:null].filter(Boolean)}})}dynoOut(){return new K(this,"gsplat")}}const js=hA(`
49
49
  vec3 gsplatNormal(vec3 scales, vec4 quaternion) {
50
50
  float minScale = min(scales.x, min(scales.y, scales.z));
51
51
  vec3 normal;
@@ -58,13 +58,13 @@
58
58
  }
59
59
  return quatVec(quaternion, normal);
60
60
  }
61
- `);class Zs extends v{constructor({gsplat:A}){super({a:A,outKey:"normal",outTypeFunc:()=>"vec3"}),this.globals=()=>[FA,js],this.statements=({inputs:e,outputs:s})=>[`${s.normal} = gsplatNormal(${e.a}.scales, ${e.a}.quaternion);`]}}class An extends V{constructor({gsplat:A,scale:e,rotate:s,translate:n,recolor:i}){super({inTypes:{gsplat:AA,scale:"float",rotate:"vec4",translate:"vec3",recolor:"vec4"},outTypes:{gsplat:AA},inputs:{gsplat:A,scale:e,rotate:s,translate:n,recolor:i},globals:()=>[FA],statements:({inputs:r,outputs:a,compile:o})=>{const{gsplat:c}=a;if(!c||!r.gsplat)return[];const{scale:l,rotate:g,translate:I,recolor:h}=r,B=o.indent;return[`${c} = ${r.gsplat};`,`if (isGsplatActive(${c}.flags)) {`,l?`${B}${c}.center *= ${l};`:null,g?`${B}${c}.center = quatVec(${g}, ${c}.center);`:null,I?`${B}${c}.center += ${I};`:null,l?`${B}${c}.scales *= ${l};`:null,g?`${B}${c}.quaternion = quatQuat(${g}, ${c}.quaternion);`:null,h?`${B}${c}.rgba *= ${h};`:null,"}"].filter(Boolean)}})}dynoOut(){return new K(this,"gsplat")}}const tn=(t,A)=>new en({gsplat:t,rgbMinMaxLnScaleMinMax:A}),fg=t=>new ts({rgba8:t});class en extends V{constructor({gsplat:A,rgbMinMaxLnScaleMinMax:e}){super({inTypes:{gsplat:AA,rgbMinMaxLnScaleMinMax:"vec4"},inputs:{gsplat:A,rgbMinMaxLnScaleMinMax:e},globals:()=>[FA],statements:({inputs:s,outputs:n})=>{const{output:i}=n;if(!i)return[];const{gsplat:r,rgbMinMaxLnScaleMinMax:a}=s;return r?RA(`
61
+ `);class Zs extends v{constructor({gsplat:A}){super({a:A,outKey:"normal",outTypeFunc:()=>"vec3"}),this.globals=()=>[FA,js],this.statements=({inputs:e,outputs:s})=>[`${s.normal} = gsplatNormal(${e.a}.scales, ${e.a}.quaternion);`]}}class An extends ${constructor({gsplat:A,scale:e,rotate:s,translate:n,recolor:i}){super({inTypes:{gsplat:AA,scale:"float",rotate:"vec4",translate:"vec3",recolor:"vec4"},outTypes:{gsplat:AA},inputs:{gsplat:A,scale:e,rotate:s,translate:n,recolor:i},globals:()=>[FA],statements:({inputs:r,outputs:a,compile:o})=>{const{gsplat:c}=a;if(!c||!r.gsplat)return[];const{scale:l,rotate:g,translate:I,recolor:h}=r,B=o.indent;return[`${c} = ${r.gsplat};`,`if (isGsplatActive(${c}.flags)) {`,l?`${B}${c}.center *= ${l};`:null,g?`${B}${c}.center = quatVec(${g}, ${c}.center);`:null,I?`${B}${c}.center += ${I};`:null,l?`${B}${c}.scales *= ${l};`:null,g?`${B}${c}.quaternion = quatQuat(${g}, ${c}.quaternion);`:null,h?`${B}${c}.rgba *= ${h};`:null,"}"].filter(Boolean)}})}dynoOut(){return new K(this,"gsplat")}}const tn=(t,A)=>new en({gsplat:t,rgbMinMaxLnScaleMinMax:A}),fg=t=>new ts({rgba8:t});class en extends ${constructor({gsplat:A,rgbMinMaxLnScaleMinMax:e}){super({inTypes:{gsplat:AA,rgbMinMaxLnScaleMinMax:"vec4"},inputs:{gsplat:A,rgbMinMaxLnScaleMinMax:e},globals:()=>[FA],statements:({inputs:s,outputs:n})=>{const{output:i}=n;if(!i)return[];const{gsplat:r,rgbMinMaxLnScaleMinMax:a}=s;return r?RA(`
62
62
  if (isGsplatActive(${r}.flags)) {
63
63
  ${i} = packSplatEncoding(${r}.center, ${r}.scales, ${r}.quaternion, ${r}.rgba, ${a});
64
64
  } else {
65
65
  ${i} = uvec4(0u, 0u, 0u, 0u);
66
66
  }
67
- `):[`${i} = uvec4(0u, 0u, 0u, 0u);`]}})}dynoOut(){return new K(this,"output")}}class ts extends V{constructor({rgba8:A}){super({inTypes:{rgba8:"vec4"},inputs:{rgba8:A},statements:({inputs:e,outputs:s})=>[`target = ${e.rgba8??"vec4(0.0, 0.0, 0.0, 0.0)"};`]})}dynoOut(){return new K(this,"rgba8")}}const pg=(t,A,e)=>new k({key:t,type:A,value:e}),dg=(t=!1,A)=>new he({key:A,value:t}),yg=(t=0,A)=>new sn({key:A,value:t}),wg=(t=0,A)=>new Vt({key:A,value:t}),zA=(t=0,A)=>new Bt({key:A,value:t}),mg=(t,A)=>new nn({key:A,value:t}),xg=(t,A)=>new rn({key:A,value:t}),Sg=(t,A)=>new an({key:A,value:t}),Dg=(t,A)=>new qt({key:A,value:t}),Mg=(t,A)=>new on({key:A,value:t}),vg=(t,A)=>new gn({key:A,value:t}),bg=(t,A)=>new cn({key:A,value:t}),et=(t,A)=>new Ft({key:A,value:t}),Fg=(t,A)=>new ln({key:A,value:t}),kg=(t,A)=>new In({key:A,value:t}),Ng=(t,A)=>new un({key:A,value:t}),Tg=(t,A)=>new Ut({key:A,value:t}),Ug=(t,A)=>new hn({key:A,value:t}),Gg=(t,A)=>new Cn({key:A,value:t}),Rg=(t,A)=>new Bn({key:A,value:t}),Yg=(t,A)=>new Qn({key:A,value:t}),Jg=(t,A)=>new En({key:A,value:t}),Lg=(t,A)=>new fn({key:A,value:t}),_g=(t,A)=>new pn({key:A,value:t}),zg=(t,A)=>new dn({key:A,value:t}),qg=(t,A)=>new yn({key:A,value:t}),Hg=(t,A)=>new wn({key:A,value:t}),Kg=(t,A)=>new mn({key:A,value:t}),$g=(t,A)=>new xn({key:A,value:t}),Vg=(t,A)=>new Sn({key:A,value:t}),Pg=(t,A)=>new Dn({key:A,value:t}),Xg=(t,A)=>new Mn({key:A,value:t}),Og=(t,A)=>new Ht({key:A,value:t}),Wg=(t,A)=>new vn({key:t,value:A}),jg=(t,A)=>new bn({key:A,value:t}),Zg=(t,A)=>new Fn({key:A,value:t}),Ac=(t,A)=>new kn({key:A,value:t}),tc=(t,A)=>new Nn({key:A,value:t}),ec=(t,A)=>new Tn({key:A,value:t}),sc=(t,A)=>new Un({key:A,value:t}),nc=(t,A)=>new Gn({key:A,value:t}),ic=(t,A)=>new Rn({key:A,value:t}),rc=(t,A)=>new Yn({key:A,value:t}),ac=(t,A)=>new Jn({key:A,value:t});class k extends V{constructor({key:A,type:e,count:s,value:n,update:i,globals:r}){A=A??"value",super({outTypes:{[A]:e},update:()=>{if(i){const a=i(this.value);a!==void 0&&(this.value=a)}this.uniform.value=this.value},generate:({inputs:a,outputs:o})=>{const c=(r==null?void 0:r({inputs:a,outputs:o}))??[],l={},g=o[A];return g&&(c.push(`uniform ${Ze(g,e,s)};`),l[g]=this.uniform),{globals:c,uniforms:l}}}),this.type=e,this.count=s,this.value=n,this.uniform={value:n},this.outKey=A}dynoOut(){return new K(this,this.outKey)}}class he extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"bool",value:e,update:s})}}class sn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"uint",value:e,update:s})}}class Vt extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"int",value:e,update:s})}}class Bt extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"float",value:e,update:s})}}class nn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"bvec2",value:e,update:s})}}class rn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"uvec2",value:e,update:s})}}class an extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"ivec2",value:e,update:s})}}class qt extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"vec2",value:e,update:s})}}class on extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"bvec3",value:e,update:s})}}class gn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"uvec3",value:e,update:s})}}class cn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"ivec3",value:e,update:s})}}class Ft extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"vec3",value:e,update:s})}}class ln extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"bvec4",value:e,update:s})}}class In extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"uvec4",value:e,update:s})}}class un extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"ivec4",value:e,update:s})}}class Ut extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"vec4",value:e,update:s})}}class hn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat2",value:e,update:s})}}class Cn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat2x2",value:e,update:s})}}class Bn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat2x3",value:e,update:s})}}class Qn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat2x4",value:e,update:s})}}class En extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat3",value:e,update:s})}}class fn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat3x2",value:e,update:s})}}class pn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat3x3",value:e,update:s})}}class dn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat3x4",value:e,update:s})}}class yn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat4",value:e,update:s})}}class wn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat4x2",value:e,update:s})}}class mn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat4x3",value:e,update:s})}}class xn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat4x4",value:e,update:s})}}class Sn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"usampler2D",value:e,update:s})}}class Dn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"isampler2D",value:e,update:s})}}class Mn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"sampler2D",value:e,update:s})}}class Ht extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"usampler2DArray",value:e,update:s})}}class vn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"isampler2DArray",value:e,update:s})}}class bn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"sampler2DArray",value:e,update:s})}}class Fn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"usampler3D",value:e,update:s})}}class kn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"isampler3D",value:e,update:s})}}class Nn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"sampler3D",value:e,update:s})}}class Tn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"usamplerCube",value:e,update:s})}}class Un extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"isamplerCube",value:e,update:s})}}class Gn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"samplerCube",value:e,update:s})}}class Rn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"sampler2DShadow",value:e,update:s})}}class Yn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"sampler2DArrayShadow",value:e,update:s})}}class Jn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"samplerCubeShadow",value:e,update:s})}}const ne=new Float32Array(1),we=new Uint32Array(ne.buffer);function oc(t){return ne[0]=t,we[0]}function gc(t){return we[0]=t,ne[0]}function at(t){ne[0]=t;const A=we[0],e=A>>31&1,s=A>>23&255,n=A&8388607,i=e<<15;if(s===255)return n!==0?i|32767:i|31744;const r=s-127+15;if(r>=31)return i|31744;if(r<=0){if(r<-10)return i;const o=(n|8388608)>>1-r+13;return i|o}const a=n>>13;return i|r<<10|a}function pA(t){const A=t>>15&1,e=t>>10&31,s=t&1023;let n;if(e===0)if(s===0)n=A<<31;else{let i=s,r=-14;for(;(i&1024)===0;)i<<=1,r--;i&=1023;const a=r+127,o=i<<13;n=A<<31|a<<23|o}else if(e===31)s===0?n=A<<31|2139095040:n=A<<31|2143289344;else{const i=e-15+127,r=s<<13;n=A<<31|i<<23|r}return we[0]=n,ne[0]}function vA(t){return Math.max(0,Math.min(255,Math.round(t*255)))}function Kt(t){return Math.max(-127,Math.min(127,Math.round(t*127)))}function Ln(t){return t/255}function _n(t){return t/127}class cc{constructor({asyncFetch:A,maxItems:e=5}){this.asyncFetch=A,this.maxItems=e,this.items=[]}async getFetch(A){const e=this.items.findIndex(n=>n.key===A);if(e>=0){const n=this.items.splice(e,1)[0];return this.items.push(n),n.data}const s=await this.asyncFetch(A);for(this.items.push({key:A,data:s});this.items.length>this.maxItems;)this.items.shift();return s}}function lc(t,A){const e=Object.entries(t).map(([s,n])=>[s,A(n,s)]);return Object.fromEntries(e)}function Ic(t,A){const e=Object.entries(t).map(([s,n])=>[s,A(n,s)]).filter(([s,n])=>n!==void 0);return Object.fromEntries(e)}function zn(t){const A=[],e=new Set;function s(n){n&&typeof n=="object"&&!e.has(n)&&(e.add(n),n instanceof ArrayBuffer?A.push(n):ArrayBuffer.isView(n)?A.push(n.buffer):Array.isArray(n)?n.forEach(s):Object.values(n).forEach(s))}return s(t),A}function uc(t,A){return new Array(t).fill(null).map((e,s)=>A(s))}class qn{constructor({allocate:A,dispose:e,valid:s}){this.items=[],this.allocate=A,this.dispose=e,this.valid=s}alloc(A){for(;;){const e=this.items.pop();if(!e)break;if(this.valid(e,A))return e;this.dispose&&this.dispose(e)}return this.allocate(A)}free(A){this.items.push(A)}disposeAll(){let A;for(A=this.items.pop();A;)this.dispose&&this.dispose(A),A=this.items.pop()}}function Ce(t,A,e,s,n,i,r,a,o,c,l,g,I,h,B,C,Q){const E=(Q==null?void 0:Q.rgbMin)??0,p=((Q==null?void 0:Q.rgbMax)??1)-E,d=vA((h-E)/p),w=vA((B-E)/p),D=vA((C-E)/p),x=vA(I),y=es(new u.Quaternion(o,c,l,g)),m=y&255,N=y>>>8&255,M=y>>>16&255,S=(Q==null?void 0:Q.lnScaleMin)??kA,F=254/(((Q==null?void 0:Q.lnScaleMax)??NA)-S),b=i<ht?0:Math.min(255,Math.max(1,Math.round((Math.log(i)-S)*F)+1)),T=r<ht?0:Math.min(255,Math.max(1,Math.round((Math.log(r)-S)*F)+1)),R=a<ht?0:Math.min(255,Math.max(1,Math.round((Math.log(a)-S)*F)+1)),O=at(e),L=at(s),eA=at(n),H=A*4;t[H]=d|w<<8|D<<16|x<<24,t[H+1]=O|L<<16,t[H+2]=eA|m<<16|N<<24,t[H+3]=b|T<<8|R<<16|M<<24}function hc(t,A,e,s,n){const i=at(e),r=at(s),a=at(n),o=A*4;t[o+1]=i|r<<16,t[o+2]=a|t[o+2]&4294901760}function Cc(t,A,e,s,n,i){const r=(i==null?void 0:i.lnScaleMin)??kA,o=254/(((i==null?void 0:i.lnScaleMax)??NA)-r),c=e<ht?0:Math.min(255,Math.max(1,Math.round((Math.log(e)-r)*o)+1)),l=s<ht?0:Math.min(255,Math.max(1,Math.round((Math.log(s)-r)*o)+1)),g=n<ht?0:Math.min(255,Math.max(1,Math.round((Math.log(n)-r)*o)+1)),I=A*4;t[I+3]=c|l<<8|g<<16|t[I+3]&4278190080}function Bc(t,A,e,s,n,i){const r=es(new u.Quaternion(e,s,n,i)),a=r&255,o=r>>>8&255,c=r>>>16&255,l=A*4;t[l+2]=t[l+2]&65535|a<<16|o<<24,t[l+3]=t[l+3]&16777215|c<<24}function Qc(t,A,e,s,n,i,r){const a=(r==null?void 0:r.rgbMin)??0,c=((r==null?void 0:r.rgbMax)??1)-a,l=vA((e-a)/c),g=vA((s-a)/c),I=vA((n-a)/c),h=vA(i),B=A*4;t[B]=l|g<<8|I<<16|h<<24}function Ec(t,A,e,s,n,i){const r=(i==null?void 0:i.rgbMin)??0,o=((i==null?void 0:i.rgbMax)??1)-r,c=vA((e-r)/o),l=vA((s-r)/o),g=vA((n-r)/o),I=A*4;t[I]=c|l<<8|g<<16|t[I]&4278190080}function fc(t,A,e){const s=vA(e),n=A*4;t[n]=t[n]&16777215|s<<24}const pc=new u.Vector3,dc=new u.Vector3,yc=new u.Quaternion,wc=new u.Color,mc={center:pc,scales:dc,quaternion:yc,color:wc,opacity:0};function Be(t,A,e){const s=mc,n=A*4,i=t[n],r=t[n+1],a=t[n+2],o=t[n+3],c=(e==null?void 0:e.rgbMin)??0,g=((e==null?void 0:e.rgbMax)??1)-c;s.color.set(c+(i&255)/255*g,c+(i>>>8&255)/255*g,c+(i>>>16&255)/255*g),s.opacity=(i>>>24&255)/255,s.center.set(pA(r&65535),pA(r>>>16&65535),pA(a&65535));const I=(e==null?void 0:e.lnScaleMin)??kA,B=(((e==null?void 0:e.lnScaleMax)??NA)-I)/254,C=o&255;s.scales.x=C===0?0:Math.exp(I+(C-1)*B);const Q=o>>>8&255;s.scales.y=Q===0?0:Math.exp(I+(Q-1)*B);const E=o>>>16&255;s.scales.z=E===0?0:Math.exp(I+(E-1)*B);const f=a>>>16&65535|o>>>8&16711680;return ti(f,s.quaternion),s}function xA(t){const A=X,e=Math.max(je,Math.min(HA,Math.ceil(t/A))),s=Math.ceil(t/(A*e)),n=A*e*s;return{width:A,height:e,depth:s,maxSplats:n}}function xc(t){const A=X,e=Math.max(je,Math.min(HA,Math.ceil(t/A))),s=Math.ceil(t/(A*e));return A*e*s}function Hn(){return navigator.maxTouchPoints>0?!0:/Mobi|Android|iPhone|iPad|iPod|Opera Mini|IEMobile/.test(navigator.userAgent)}function Kn(){return/Android/.test(navigator.userAgent)}function $n(){return/Oculus/.test(navigator.userAgent)}function Vn(t,A,e){const s=new Uint8Array(A*4);for(let n=0;n<e/2;n++){const i=n*A*4,r=(e-1-n)*A*4;s.set(t.subarray(i,i+A*4)),t.set(t.subarray(r,r+A*4),i),t.set(s,r)}return t}function Pn(t,A,e){const s=document.createElement("canvas");s.width=A,s.height=e;const n=s.getContext("2d");if(!n)throw new Error("Can't get 2d context");const i=n.createImageData(A,e);return i.data.set(t),n.putImageData(i,0,0),s.toDataURL("image/png")}function Xn(t){const A=new u.Clock(t.autoStart);return A.startTime=t.startTime,A.oldTime=t.oldTime,A.elapsedTime=t.elapsedTime,A.running=t.running,A}function Sc(t){return Object.fromEntries(Object.entries(t).filter(([A,e])=>e!==void 0))}const On=hA(`
67
+ `):[`${i} = uvec4(0u, 0u, 0u, 0u);`]}})}dynoOut(){return new K(this,"output")}}class ts extends ${constructor({rgba8:A}){super({inTypes:{rgba8:"vec4"},inputs:{rgba8:A},statements:({inputs:e,outputs:s})=>[`target = ${e.rgba8??"vec4(0.0, 0.0, 0.0, 0.0)"};`]})}dynoOut(){return new K(this,"rgba8")}}const pg=(t,A,e)=>new k({key:t,type:A,value:e}),dg=(t=!1,A)=>new he({key:A,value:t}),yg=(t=0,A)=>new sn({key:A,value:t}),wg=(t=0,A)=>new $t({key:A,value:t}),zA=(t=0,A)=>new Bt({key:A,value:t}),mg=(t,A)=>new nn({key:A,value:t}),xg=(t,A)=>new rn({key:A,value:t}),Sg=(t,A)=>new an({key:A,value:t}),Dg=(t,A)=>new qt({key:A,value:t}),Mg=(t,A)=>new on({key:A,value:t}),vg=(t,A)=>new gn({key:A,value:t}),bg=(t,A)=>new cn({key:A,value:t}),et=(t,A)=>new Ft({key:A,value:t}),Fg=(t,A)=>new ln({key:A,value:t}),kg=(t,A)=>new In({key:A,value:t}),Ng=(t,A)=>new un({key:A,value:t}),Tg=(t,A)=>new Ut({key:A,value:t}),Ug=(t,A)=>new hn({key:A,value:t}),Gg=(t,A)=>new Cn({key:A,value:t}),Rg=(t,A)=>new Bn({key:A,value:t}),Yg=(t,A)=>new Qn({key:A,value:t}),Jg=(t,A)=>new En({key:A,value:t}),_g=(t,A)=>new fn({key:A,value:t}),Lg=(t,A)=>new pn({key:A,value:t}),zg=(t,A)=>new dn({key:A,value:t}),qg=(t,A)=>new yn({key:A,value:t}),Hg=(t,A)=>new wn({key:A,value:t}),Kg=(t,A)=>new mn({key:A,value:t}),Vg=(t,A)=>new xn({key:A,value:t}),$g=(t,A)=>new Sn({key:A,value:t}),Pg=(t,A)=>new Dn({key:A,value:t}),Xg=(t,A)=>new Mn({key:A,value:t}),Og=(t,A)=>new Ht({key:A,value:t}),Wg=(t,A)=>new vn({key:t,value:A}),jg=(t,A)=>new bn({key:A,value:t}),Zg=(t,A)=>new Fn({key:A,value:t}),Ac=(t,A)=>new kn({key:A,value:t}),tc=(t,A)=>new Nn({key:A,value:t}),ec=(t,A)=>new Tn({key:A,value:t}),sc=(t,A)=>new Un({key:A,value:t}),nc=(t,A)=>new Gn({key:A,value:t}),ic=(t,A)=>new Rn({key:A,value:t}),rc=(t,A)=>new Yn({key:A,value:t}),ac=(t,A)=>new Jn({key:A,value:t});class k extends ${constructor({key:A,type:e,count:s,value:n,update:i,globals:r}){A=A??"value",super({outTypes:{[A]:e},update:()=>{if(i){const a=i(this.value);a!==void 0&&(this.value=a)}this.uniform.value=this.value},generate:({inputs:a,outputs:o})=>{const c=(r==null?void 0:r({inputs:a,outputs:o}))??[],l={},g=o[A];return g&&(c.push(`uniform ${Ze(g,e,s)};`),l[g]=this.uniform),{globals:c,uniforms:l}}}),this.type=e,this.count=s,this.value=n,this.uniform={value:n},this.outKey=A}dynoOut(){return new K(this,this.outKey)}}class he extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"bool",value:e,update:s})}}class sn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"uint",value:e,update:s})}}class $t extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"int",value:e,update:s})}}class Bt extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"float",value:e,update:s})}}class nn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"bvec2",value:e,update:s})}}class rn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"uvec2",value:e,update:s})}}class an extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"ivec2",value:e,update:s})}}class qt extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"vec2",value:e,update:s})}}class on extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"bvec3",value:e,update:s})}}class gn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"uvec3",value:e,update:s})}}class cn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"ivec3",value:e,update:s})}}class Ft extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"vec3",value:e,update:s})}}class ln extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"bvec4",value:e,update:s})}}class In extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"uvec4",value:e,update:s})}}class un extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"ivec4",value:e,update:s})}}class Ut extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"vec4",value:e,update:s})}}class hn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat2",value:e,update:s})}}class Cn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat2x2",value:e,update:s})}}class Bn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat2x3",value:e,update:s})}}class Qn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat2x4",value:e,update:s})}}class En extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat3",value:e,update:s})}}class fn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat3x2",value:e,update:s})}}class pn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat3x3",value:e,update:s})}}class dn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat3x4",value:e,update:s})}}class yn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat4",value:e,update:s})}}class wn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat4x2",value:e,update:s})}}class mn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat4x3",value:e,update:s})}}class xn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"mat4x4",value:e,update:s})}}class Sn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"usampler2D",value:e,update:s})}}class Dn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"isampler2D",value:e,update:s})}}class Mn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"sampler2D",value:e,update:s})}}class Ht extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"usampler2DArray",value:e,update:s})}}class vn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"isampler2DArray",value:e,update:s})}}class bn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"sampler2DArray",value:e,update:s})}}class Fn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"usampler3D",value:e,update:s})}}class kn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"isampler3D",value:e,update:s})}}class Nn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"sampler3D",value:e,update:s})}}class Tn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"usamplerCube",value:e,update:s})}}class Un extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"isamplerCube",value:e,update:s})}}class Gn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"samplerCube",value:e,update:s})}}class Rn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"sampler2DShadow",value:e,update:s})}}class Yn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"sampler2DArrayShadow",value:e,update:s})}}class Jn extends k{constructor({key:A,value:e,update:s}){super({key:A,type:"samplerCubeShadow",value:e,update:s})}}const ne=new Float32Array(1),we=new Uint32Array(ne.buffer);function oc(t){return ne[0]=t,we[0]}function gc(t){return we[0]=t,ne[0]}function at(t){ne[0]=t;const A=we[0],e=A>>31&1,s=A>>23&255,n=A&8388607,i=e<<15;if(s===255)return n!==0?i|32767:i|31744;const r=s-127+15;if(r>=31)return i|31744;if(r<=0){if(r<-10)return i;const o=(n|8388608)>>1-r+13;return i|o}const a=n>>13;return i|r<<10|a}function pA(t){const A=t>>15&1,e=t>>10&31,s=t&1023;let n;if(e===0)if(s===0)n=A<<31;else{let i=s,r=-14;for(;(i&1024)===0;)i<<=1,r--;i&=1023;const a=r+127,o=i<<13;n=A<<31|a<<23|o}else if(e===31)s===0?n=A<<31|2139095040:n=A<<31|2143289344;else{const i=e-15+127,r=s<<13;n=A<<31|i<<23|r}return we[0]=n,ne[0]}function vA(t){return Math.max(0,Math.min(255,Math.round(t*255)))}function Kt(t){return Math.max(-127,Math.min(127,Math.round(t*127)))}function _n(t){return t/255}function Ln(t){return t/127}class cc{constructor({asyncFetch:A,maxItems:e=5}){this.asyncFetch=A,this.maxItems=e,this.items=[]}async getFetch(A){const e=this.items.findIndex(n=>n.key===A);if(e>=0){const n=this.items.splice(e,1)[0];return this.items.push(n),n.data}const s=await this.asyncFetch(A);for(this.items.push({key:A,data:s});this.items.length>this.maxItems;)this.items.shift();return s}}function lc(t,A){const e=Object.entries(t).map(([s,n])=>[s,A(n,s)]);return Object.fromEntries(e)}function Ic(t,A){const e=Object.entries(t).map(([s,n])=>[s,A(n,s)]).filter(([s,n])=>n!==void 0);return Object.fromEntries(e)}function zn(t){const A=[],e=new Set;function s(n){n&&typeof n=="object"&&!e.has(n)&&(e.add(n),n instanceof ArrayBuffer?A.push(n):ArrayBuffer.isView(n)?A.push(n.buffer):Array.isArray(n)?n.forEach(s):Object.values(n).forEach(s))}return s(t),A}function uc(t,A){return new Array(t).fill(null).map((e,s)=>A(s))}class qn{constructor({allocate:A,dispose:e,valid:s}){this.items=[],this.allocate=A,this.dispose=e,this.valid=s}alloc(A){for(;;){const e=this.items.pop();if(!e)break;if(this.valid(e,A))return e;this.dispose&&this.dispose(e)}return this.allocate(A)}free(A){this.items.push(A)}disposeAll(){let A;for(A=this.items.pop();A;)this.dispose&&this.dispose(A),A=this.items.pop()}}function Ce(t,A,e,s,n,i,r,a,o,c,l,g,I,h,B,C,Q){const E=(Q==null?void 0:Q.rgbMin)??0,p=((Q==null?void 0:Q.rgbMax)??1)-E,d=vA((h-E)/p),w=vA((B-E)/p),D=vA((C-E)/p),x=vA(I),y=es(new u.Quaternion(o,c,l,g)),m=y&255,N=y>>>8&255,M=y>>>16&255,S=(Q==null?void 0:Q.lnScaleMin)??kA,F=254/(((Q==null?void 0:Q.lnScaleMax)??NA)-S),b=i<ht?0:Math.min(255,Math.max(1,Math.round((Math.log(i)-S)*F)+1)),T=r<ht?0:Math.min(255,Math.max(1,Math.round((Math.log(r)-S)*F)+1)),R=a<ht?0:Math.min(255,Math.max(1,Math.round((Math.log(a)-S)*F)+1)),O=at(e),_=at(s),eA=at(n),H=A*4;t[H]=d|w<<8|D<<16|x<<24,t[H+1]=O|_<<16,t[H+2]=eA|m<<16|N<<24,t[H+3]=b|T<<8|R<<16|M<<24}function hc(t,A,e,s,n){const i=at(e),r=at(s),a=at(n),o=A*4;t[o+1]=i|r<<16,t[o+2]=a|t[o+2]&4294901760}function Cc(t,A,e,s,n,i){const r=(i==null?void 0:i.lnScaleMin)??kA,o=254/(((i==null?void 0:i.lnScaleMax)??NA)-r),c=e<ht?0:Math.min(255,Math.max(1,Math.round((Math.log(e)-r)*o)+1)),l=s<ht?0:Math.min(255,Math.max(1,Math.round((Math.log(s)-r)*o)+1)),g=n<ht?0:Math.min(255,Math.max(1,Math.round((Math.log(n)-r)*o)+1)),I=A*4;t[I+3]=c|l<<8|g<<16|t[I+3]&4278190080}function Bc(t,A,e,s,n,i){const r=es(new u.Quaternion(e,s,n,i)),a=r&255,o=r>>>8&255,c=r>>>16&255,l=A*4;t[l+2]=t[l+2]&65535|a<<16|o<<24,t[l+3]=t[l+3]&16777215|c<<24}function Qc(t,A,e,s,n,i,r){const a=(r==null?void 0:r.rgbMin)??0,c=((r==null?void 0:r.rgbMax)??1)-a,l=vA((e-a)/c),g=vA((s-a)/c),I=vA((n-a)/c),h=vA(i),B=A*4;t[B]=l|g<<8|I<<16|h<<24}function Ec(t,A,e,s,n,i){const r=(i==null?void 0:i.rgbMin)??0,o=((i==null?void 0:i.rgbMax)??1)-r,c=vA((e-r)/o),l=vA((s-r)/o),g=vA((n-r)/o),I=A*4;t[I]=c|l<<8|g<<16|t[I]&4278190080}function fc(t,A,e){const s=vA(e),n=A*4;t[n]=t[n]&16777215|s<<24}const pc=new u.Vector3,dc=new u.Vector3,yc=new u.Quaternion,wc=new u.Color,mc={center:pc,scales:dc,quaternion:yc,color:wc,opacity:0};function Be(t,A,e){const s=mc,n=A*4,i=t[n],r=t[n+1],a=t[n+2],o=t[n+3],c=(e==null?void 0:e.rgbMin)??0,g=((e==null?void 0:e.rgbMax)??1)-c;s.color.set(c+(i&255)/255*g,c+(i>>>8&255)/255*g,c+(i>>>16&255)/255*g),s.opacity=(i>>>24&255)/255,s.center.set(pA(r&65535),pA(r>>>16&65535),pA(a&65535));const I=(e==null?void 0:e.lnScaleMin)??kA,B=(((e==null?void 0:e.lnScaleMax)??NA)-I)/254,C=o&255;s.scales.x=C===0?0:Math.exp(I+(C-1)*B);const Q=o>>>8&255;s.scales.y=Q===0?0:Math.exp(I+(Q-1)*B);const E=o>>>16&255;s.scales.z=E===0?0:Math.exp(I+(E-1)*B);const f=a>>>16&65535|o>>>8&16711680;return ti(f,s.quaternion),s}function xA(t){const A=X,e=Math.max(je,Math.min(HA,Math.ceil(t/A))),s=Math.ceil(t/(A*e)),n=A*e*s;return{width:A,height:e,depth:s,maxSplats:n}}function xc(t){const A=X,e=Math.max(je,Math.min(HA,Math.ceil(t/A))),s=Math.ceil(t/(A*e));return A*e*s}function Hn(){return navigator.maxTouchPoints>0?!0:/Mobi|Android|iPhone|iPad|iPod|Opera Mini|IEMobile/.test(navigator.userAgent)}function Kn(){return/Android/.test(navigator.userAgent)}function Vn(){return/Oculus/.test(navigator.userAgent)}function $n(t,A,e){const s=new Uint8Array(A*4);for(let n=0;n<e/2;n++){const i=n*A*4,r=(e-1-n)*A*4;s.set(t.subarray(i,i+A*4)),t.set(t.subarray(r,r+A*4),i),t.set(s,r)}return t}function Pn(t,A,e){const s=document.createElement("canvas");s.width=A,s.height=e;const n=s.getContext("2d");if(!n)throw new Error("Can't get 2d context");const i=n.createImageData(A,e);return i.data.set(t),n.putImageData(i,0,0),s.toDataURL("image/png")}function Xn(t){const A=new u.Clock(t.autoStart);return A.startTime=t.startTime,A.oldTime=t.oldTime,A.elapsedTime=t.elapsedTime,A.running=t.running,A}function Sc(t){return Object.fromEntries(Object.entries(t).filter(([A,e])=>e!==void 0))}const On=hA(`
68
68
  precision highp float;
69
69
 
70
70
  in vec3 position;
@@ -72,19 +72,19 @@
72
72
  void main() {
73
73
  gl_Position = vec4(position.xy, 0.0, 1.0);
74
74
  }
75
- `);function Wn(t){const A=new u.Vector3;for(const e of t)A.add(e);return A.divideScalar(t.length)}function jn(t){if(t.length===0)return new u.Quaternion;const A=t[0].clone();for(let e=1;e<t.length;e++)t[e].dot(t[0])<0?(A.x-=t[e].x,A.y-=t[e].y,A.z-=t[e].z,A.w-=t[e].w):(A.x+=t[e].x,A.y+=t[e].y,A.z+=t[e].z,A.w+=t[e].w);return A.normalize()}function Zn(t,A){const e=new u.Vector3(0,0,0).applyMatrix4(t),s=new u.Vector3(0,0,0).applyMatrix4(A),n=new u.Vector3(0,0,-1).applyMatrix4(t).sub(e).normalize(),i=new u.Vector3(0,0,-1).applyMatrix4(A).sub(s).normalize(),r=e.distanceTo(s),a=n.dot(i);return{distance:r,coincidence:a}}function Dc({matrix1:t,matrix2:A,maxDistance:e}){const s=new u.Vector3(0,0,0).applyMatrix4(t),n=new u.Vector3(0,0,0).applyMatrix4(A);return s.distanceTo(n)<=e}function Mc({matrix1:t,matrix2:A,maxDistance:e,minCoincidence:s}){const{distance:n,coincidence:i}=Zn(t,A);return n<=e&&(s==null||i>=s)}function Ai(t,A){const[e,s]=[new u.Vector3,new u.Quaternion],[n,i]=[new u.Vector3,new u.Quaternion];t.decompose(e,s,new u.Vector3),A.decompose(n,i,new u.Vector3);const r=e.distanceTo(n),a=Math.abs(s.dot(i));return{distance:r,coorient:a}}function Qe({matrix1:t,matrix2:A,maxDistance:e,minCoorient:s}){const{distance:n,coorient:i}=Ai(t,A);return n<=e&&(s==null||i>=s)}function vc(t,A=.001){return Math.abs(t)<A?0:Math.sign(t)}function bc(t){const A=t.w<0,e=Kt(A?-t.x:t.x),s=Kt(A?-t.y:t.y),n=Kt(A?-t.z:t.z),i=e&255,r=s&255,a=n&255;return i|r<<8|a<<16}function Fc(t,A){const e=t<<24>>24,s=t<<16>>24,n=t<<8>>24;A.set(e/127,s/127,n/127,0);const i=A.x*A.x+A.y*A.y+A.z*A.z;return A.w=Math.sqrt(Math.max(0,1-i)),A}function es(t){const A=t.clone().normalize();A.w<0&&A.set(-A.x,-A.y,-A.z,-A.w);const e=2*Math.acos(A.w),s=Math.sqrt(A.x*A.x+A.y*A.y+A.z*A.z),n=s<1e-6?new u.Vector3(1,0,0):new u.Vector3(A.x,A.y,A.z).divideScalar(s),i=Math.abs(n.x)+Math.abs(n.y)+Math.abs(n.z);let r=n.x/i,a=n.y/i;if(n.z<0){const h=r;r=(1-Math.abs(a))*(r>=0?1:-1),a=(1-Math.abs(h))*(a>=0?1:-1)}const o=r*.5+.5,c=a*.5+.5,l=Math.round(o*255),g=Math.round(c*255);return Math.round(e*(255/Math.PI))<<16|g<<8|l}function ti(t,A){const e=t&255,s=t>>>8&255,n=t>>>16&255,i=e/255,r=s/255;let a=(i-.5)*2,o=(r-.5)*2;const c=1-(Math.abs(a)+Math.abs(o)),l=Math.max(-c,0);a+=a>=0?-l:l,o+=o>=0?-l:l;const g=new u.Vector3(a,o,c).normalize(),h=n/255*Math.PI*.5,B=Math.sin(h),C=Math.cos(h);return A.set(g.x*B,g.y*B,g.z*B,C),A}function kc(t){const A=t.clone().normalize(),e=2*(A.w*A.x+A.y*A.z),s=1-2*(A.x*A.x+A.y*A.y),n=Math.atan2(e,s),i=2*(A.w*A.y-A.z*A.x),r=Math.abs(i)>=1?Math.sign(i)*(Math.PI/2):Math.asin(i),a=2*(A.w*A.z+A.x*A.y),o=1-2*(A.y*A.y+A.z*A.z),c=Math.atan2(a,o),l=(n+Math.PI)/(2*Math.PI),g=(r+Math.PI)/(2*Math.PI),I=(c+Math.PI)/(2*Math.PI),h=Math.round(l*255),B=Math.round(g*255);return Math.round(I*255)<<16|B<<8|h}function Nc(t,A){const e=t&255,s=t>>>8&255,n=t>>>16&255,i=e/255,r=s/255,a=n/255,o=i*(2*Math.PI)-Math.PI,c=r*(2*Math.PI)-Math.PI,l=a*(2*Math.PI)-Math.PI,g=Math.cos(o*.5),I=Math.sin(o*.5),h=Math.cos(c*.5),B=Math.sin(c*.5),C=Math.cos(l*.5),Q=Math.sin(l*.5);return A.w=g*h*C+I*B*Q,A.x=I*h*C-g*B*Q,A.y=g*B*C+I*h*Q,A.z=g*h*Q-I*B*C,A.normalize(),A}function re(t,A,e,s){const n=Math.max(-127,Math.min(127,t*127)),i=Math.max(-127,Math.min(127,A*127)),r=Math.max(-127,Math.min(127,e*127)),a=Math.max(-127,Math.min(127,s*127));return n&255|(i&255)<<8|(r&255)<<16|(a&255)<<24}function Tc(t,A,e,s){const n=(s==null?void 0:s.sh1Min)??-1,i=(s==null?void 0:s.sh1Max)??1,r=.5*(n+i),a=63/(i-n),o=A*2;for(let c=0;c<9;++c){const l=(e[c]-r)*a,g=Math.round(Math.max(-63,Math.min(63,l)))&127,I=c*7,h=I+7,B=Math.floor(I/32),C=I-B*32,Q=g<<C&4294967295;if(t[o+B]|=Q,h>B*32+32){const E=g>>>32-C&4294967295;t[o+B+1]|=E}}}function Uc(t,A,e,s){const n=(s==null?void 0:s.sh2Min)??-1,i=(s==null?void 0:s.sh2Max)??1,r=.5*(n+i),a=.5/(i-n);t[A*4+0]=re((e[0]-r)*a,(e[1]-r)*a,(e[2]-r)*a,(e[3]-r)*a),t[A*4+1]=re((e[4]-r)*a,(e[5]-r)*a,(e[6]-r)*a,(e[7]-r)*a),t[A*4+2]=re((e[8]-r)*a,(e[9]-r)*a,(e[10]-r)*a,(e[11]-r)*a),t[A*4+3]=re((e[12]-r)*a,(e[13]-r)*a,(e[14]-r)*a,0)}function Gc(t,A,e,s){const n=(s==null?void 0:s.sh3Min)??-1,i=(s==null?void 0:s.sh3Max)??1,r=.5*(n+i),a=31/(i-n),o=A*4;for(let c=0;c<21;++c){const l=(e[c]-r)*a,g=Math.round(Math.max(-31,Math.min(31,l)))&63,I=c*6,h=I+6,B=Math.floor(I/32),C=I-B*32,Q=g<<C&4294967295;if(t[o+B]|=Q,h>B*32+32){const E=g>>>32-C&4294967295;t[o+B+1]|=E}}}function ei(t,A){const e=[];let s=0,n=null;const i=new ks((o,c)=>{if(e.push(o),s+=o.length,c||s>=A){const l=new Uint8Array(s);let g=0;for(const I of e)l.set(I,g),g+=I.length;n=l.slice(0,A)}}),r=1024;let a=0;for(;n==null&&a<t.length;){const o=t.slice(a,a+r);i.push(o,!1),a+=r}if(n==null&&(i.push(new Uint8Array,!0),n==null))throw new Error("Failed to decompress partial gzip");return n}class si{constructor({fileBytes:A,chunkBytes:e=64*1024}){this.fileBytes=A,this.chunkBytes=e,this.offset=0,this.chunks=[],this.totalBytes=0,this.gunzip=new ks((s,n)=>{this.chunks.push(s),this.totalBytes+=s.length})}read(A){for(;this.totalBytes<A&&this.offset<this.fileBytes.length;){const i=Math.min(this.offset+this.chunkBytes,this.fileBytes.length);this.gunzip.push(this.fileBytes.subarray(this.offset,i),!1),this.offset=i}if(this.totalBytes<A&&this.offset>=this.fileBytes.length&&this.gunzip.push(new Uint8Array(0),!0),this.totalBytes<A)throw new Error(`Unexpected EOF: needed ${A}, got ${this.totalBytes}`);const e=new Uint8Array(this.totalBytes);let s=0;for(const i of this.chunks)e.set(i,s),s+=i.length;const n=e.subarray(0,A);return this.chunks=[e.subarray(A)],this.totalBytes-=A,n}}const Rc=Object.freeze(Object.defineProperty({__proto__:null,DataCache:cc,FreeList:qn,GunzipReader:si,IDENT_VERTEX_SHADER:On,Sint8ToFloat:_n,Uint8ToFloat:Ln,averagePositions:Wn,averageQuaternions:jn,cloneClock:Xn,coinciDist:Zn,computeMaxSplats:xc,coorientDist:Ai,decodeQuatEulerXyz888:Nc,decodeQuatOctXy88R8:ti,decodeQuatXyz888:Fc,decompressPartialGzip:ei,encodeQuatEulerXyz888:kc,encodeQuatOctXy88R8:es,encodeQuatXyz888:bc,encodeSh1Rgb:Tc,encodeSh2Rgb:Uc,encodeSh3Rgb:Gc,epsilonSign:vc,flipPixels:Vn,floatBitsToUint:oc,floatToSint8:Kt,floatToUint8:vA,fromHalf:pA,getArrayBuffers:zn,getTextureSize:xA,isAndroid:Kn,isMobile:Hn,isOculus:$n,mapFilterObject:Ic,mapObject:lc,newArray:uc,omitUndefined:Sc,pixelsToPngUrl:Pn,setPackedSplat:Ce,setPackedSplatCenter:hc,setPackedSplatOpacity:fc,setPackedSplatQuat:Bc,setPackedSplatRgb:Ec,setPackedSplatRgba:Qc,setPackedSplatScales:Cc,toHalf:at,uintBitsToFloat:gc,unpackSplat:Be,withinCoinciDist:Mc,withinCoorientDist:Qe,withinDist:Dc},Symbol.toStringTag,{value:"Module"}));class ss{constructor({graph:A,inputs:e,outputs:s,template:n}){this.graph=A,this.template=n,this.inputs=e??{},this.outputs=s??{};const i=new Hs({indent:this.template.indent});for(const a in this.outputs)this.outputs[a]&&i.declares.add(this.outputs[a]);const r=A.compile({inputs:this.inputs,outputs:this.outputs,compile:i});this.shader=n.generate({globals:i.globals,statements:r}),this.uniforms=i.uniforms,this.updaters=i.updaters}prepareMaterial(){return Yc(this)}update(){for(const A of this.updaters)A()}}class ns{constructor(A){const e=A.match(/^([ \t]*)\{\{\s*GLOBALS\s*\}\}/m),s=A.match(/^([ \t]*)\{\{\s*STATEMENTS\s*\}\}/m);if(!e||!s)throw new Error("Template must contain {{ GLOBALS }} and {{ STATEMENTS }}");this.before=A.substring(0,e.index),this.between=A.substring(e.index+e[0].length,s.index),this.after=A.substring(s.index+s[0].length),this.indent=s[1]}generate({globals:A,statements:e}){return this.before+Array.from(A).join(`
75
+ `);function Wn(t){const A=new u.Vector3;for(const e of t)A.add(e);return A.divideScalar(t.length)}function jn(t){if(t.length===0)return new u.Quaternion;const A=t[0].clone();for(let e=1;e<t.length;e++)t[e].dot(t[0])<0?(A.x-=t[e].x,A.y-=t[e].y,A.z-=t[e].z,A.w-=t[e].w):(A.x+=t[e].x,A.y+=t[e].y,A.z+=t[e].z,A.w+=t[e].w);return A.normalize()}function Zn(t,A){const e=new u.Vector3(0,0,0).applyMatrix4(t),s=new u.Vector3(0,0,0).applyMatrix4(A),n=new u.Vector3(0,0,-1).applyMatrix4(t).sub(e).normalize(),i=new u.Vector3(0,0,-1).applyMatrix4(A).sub(s).normalize(),r=e.distanceTo(s),a=n.dot(i);return{distance:r,coincidence:a}}function Dc({matrix1:t,matrix2:A,maxDistance:e}){const s=new u.Vector3(0,0,0).applyMatrix4(t),n=new u.Vector3(0,0,0).applyMatrix4(A);return s.distanceTo(n)<=e}function Mc({matrix1:t,matrix2:A,maxDistance:e,minCoincidence:s}){const{distance:n,coincidence:i}=Zn(t,A);return n<=e&&(s==null||i>=s)}function Ai(t,A){const[e,s]=[new u.Vector3,new u.Quaternion],[n,i]=[new u.Vector3,new u.Quaternion];t.decompose(e,s,new u.Vector3),A.decompose(n,i,new u.Vector3);const r=e.distanceTo(n),a=Math.abs(s.dot(i));return{distance:r,coorient:a}}function Qe({matrix1:t,matrix2:A,maxDistance:e,minCoorient:s}){const{distance:n,coorient:i}=Ai(t,A);return n<=e&&(s==null||i>=s)}function vc(t,A=.001){return Math.abs(t)<A?0:Math.sign(t)}function bc(t){const A=t.w<0,e=Kt(A?-t.x:t.x),s=Kt(A?-t.y:t.y),n=Kt(A?-t.z:t.z),i=e&255,r=s&255,a=n&255;return i|r<<8|a<<16}function Fc(t,A){const e=t<<24>>24,s=t<<16>>24,n=t<<8>>24;A.set(e/127,s/127,n/127,0);const i=A.x*A.x+A.y*A.y+A.z*A.z;return A.w=Math.sqrt(Math.max(0,1-i)),A}function es(t){const A=t.clone().normalize();A.w<0&&A.set(-A.x,-A.y,-A.z,-A.w);const e=2*Math.acos(A.w),s=Math.sqrt(A.x*A.x+A.y*A.y+A.z*A.z),n=s<1e-6?new u.Vector3(1,0,0):new u.Vector3(A.x,A.y,A.z).divideScalar(s),i=Math.abs(n.x)+Math.abs(n.y)+Math.abs(n.z);let r=n.x/i,a=n.y/i;if(n.z<0){const h=r;r=(1-Math.abs(a))*(r>=0?1:-1),a=(1-Math.abs(h))*(a>=0?1:-1)}const o=r*.5+.5,c=a*.5+.5,l=Math.round(o*255),g=Math.round(c*255);return Math.round(e*(255/Math.PI))<<16|g<<8|l}function ti(t,A){const e=t&255,s=t>>>8&255,n=t>>>16&255,i=e/255,r=s/255;let a=(i-.5)*2,o=(r-.5)*2;const c=1-(Math.abs(a)+Math.abs(o)),l=Math.max(-c,0);a+=a>=0?-l:l,o+=o>=0?-l:l;const g=new u.Vector3(a,o,c).normalize(),h=n/255*Math.PI*.5,B=Math.sin(h),C=Math.cos(h);return A.set(g.x*B,g.y*B,g.z*B,C),A}function kc(t){const A=t.clone().normalize(),e=2*(A.w*A.x+A.y*A.z),s=1-2*(A.x*A.x+A.y*A.y),n=Math.atan2(e,s),i=2*(A.w*A.y-A.z*A.x),r=Math.abs(i)>=1?Math.sign(i)*(Math.PI/2):Math.asin(i),a=2*(A.w*A.z+A.x*A.y),o=1-2*(A.y*A.y+A.z*A.z),c=Math.atan2(a,o),l=(n+Math.PI)/(2*Math.PI),g=(r+Math.PI)/(2*Math.PI),I=(c+Math.PI)/(2*Math.PI),h=Math.round(l*255),B=Math.round(g*255);return Math.round(I*255)<<16|B<<8|h}function Nc(t,A){const e=t&255,s=t>>>8&255,n=t>>>16&255,i=e/255,r=s/255,a=n/255,o=i*(2*Math.PI)-Math.PI,c=r*(2*Math.PI)-Math.PI,l=a*(2*Math.PI)-Math.PI,g=Math.cos(o*.5),I=Math.sin(o*.5),h=Math.cos(c*.5),B=Math.sin(c*.5),C=Math.cos(l*.5),Q=Math.sin(l*.5);return A.w=g*h*C+I*B*Q,A.x=I*h*C-g*B*Q,A.y=g*B*C+I*h*Q,A.z=g*h*Q-I*B*C,A.normalize(),A}function re(t,A,e,s){const n=Math.max(-127,Math.min(127,t*127)),i=Math.max(-127,Math.min(127,A*127)),r=Math.max(-127,Math.min(127,e*127)),a=Math.max(-127,Math.min(127,s*127));return n&255|(i&255)<<8|(r&255)<<16|(a&255)<<24}function Tc(t,A,e,s){const n=(s==null?void 0:s.sh1Min)??-1,i=(s==null?void 0:s.sh1Max)??1,r=.5*(n+i),a=126/(i-n),o=A*2;for(let c=0;c<9;++c){const l=(e[c]-r)*a,g=Math.round(Math.max(-63,Math.min(63,l)))&127,I=c*7,h=I+7,B=Math.floor(I/32),C=I-B*32,Q=g<<C&4294967295;if(t[o+B]|=Q,h>B*32+32){const E=g>>>32-C&4294967295;t[o+B+1]|=E}}}function Uc(t,A,e,s){const n=(s==null?void 0:s.sh2Min)??-1,i=(s==null?void 0:s.sh2Max)??1,r=.5*(n+i),a=2/(i-n);t[A*4+0]=re((e[0]-r)*a,(e[1]-r)*a,(e[2]-r)*a,(e[3]-r)*a),t[A*4+1]=re((e[4]-r)*a,(e[5]-r)*a,(e[6]-r)*a,(e[7]-r)*a),t[A*4+2]=re((e[8]-r)*a,(e[9]-r)*a,(e[10]-r)*a,(e[11]-r)*a),t[A*4+3]=re((e[12]-r)*a,(e[13]-r)*a,(e[14]-r)*a,0)}function Gc(t,A,e,s){const n=(s==null?void 0:s.sh3Min)??-1,i=(s==null?void 0:s.sh3Max)??1,r=.5*(n+i),a=62/(i-n),o=A*4;for(let c=0;c<21;++c){const l=(e[c]-r)*a,g=Math.round(Math.max(-31,Math.min(31,l)))&63,I=c*6,h=I+6,B=Math.floor(I/32),C=I-B*32,Q=g<<C&4294967295;if(t[o+B]|=Q,h>B*32+32){const E=g>>>32-C&4294967295;t[o+B+1]|=E}}}function ei(t,A){const e=[];let s=0,n=null;const i=new ks((o,c)=>{if(e.push(o),s+=o.length,c||s>=A){const l=new Uint8Array(s);let g=0;for(const I of e)l.set(I,g),g+=I.length;n=l.slice(0,A)}}),r=1024;let a=0;for(;n==null&&a<t.length;){const o=t.slice(a,a+r);i.push(o,!1),a+=r}if(n==null&&(i.push(new Uint8Array,!0),n==null))throw new Error("Failed to decompress partial gzip");return n}class si{constructor({fileBytes:A,chunkBytes:e=64*1024}){this.fileBytes=A,this.chunkBytes=e,this.offset=0,this.chunks=[],this.totalBytes=0,this.gunzip=new ks((s,n)=>{this.chunks.push(s),this.totalBytes+=s.length})}read(A){for(;this.totalBytes<A&&this.offset<this.fileBytes.length;){const i=Math.min(this.offset+this.chunkBytes,this.fileBytes.length);this.gunzip.push(this.fileBytes.subarray(this.offset,i),!1),this.offset=i}if(this.totalBytes<A&&this.offset>=this.fileBytes.length&&this.gunzip.push(new Uint8Array(0),!0),this.totalBytes<A)throw new Error(`Unexpected EOF: needed ${A}, got ${this.totalBytes}`);const e=new Uint8Array(this.totalBytes);let s=0;for(const i of this.chunks)e.set(i,s),s+=i.length;const n=e.subarray(0,A);return this.chunks=[e.subarray(A)],this.totalBytes-=A,n}}const Rc=Object.freeze(Object.defineProperty({__proto__:null,DataCache:cc,FreeList:qn,GunzipReader:si,IDENT_VERTEX_SHADER:On,Sint8ToFloat:Ln,Uint8ToFloat:_n,averagePositions:Wn,averageQuaternions:jn,cloneClock:Xn,coinciDist:Zn,computeMaxSplats:xc,coorientDist:Ai,decodeQuatEulerXyz888:Nc,decodeQuatOctXy88R8:ti,decodeQuatXyz888:Fc,decompressPartialGzip:ei,encodeQuatEulerXyz888:kc,encodeQuatOctXy88R8:es,encodeQuatXyz888:bc,encodeSh1Rgb:Tc,encodeSh2Rgb:Uc,encodeSh3Rgb:Gc,epsilonSign:vc,flipPixels:$n,floatBitsToUint:oc,floatToSint8:Kt,floatToUint8:vA,fromHalf:pA,getArrayBuffers:zn,getTextureSize:xA,isAndroid:Kn,isMobile:Hn,isOculus:Vn,mapFilterObject:Ic,mapObject:lc,newArray:uc,omitUndefined:Sc,pixelsToPngUrl:Pn,setPackedSplat:Ce,setPackedSplatCenter:hc,setPackedSplatOpacity:fc,setPackedSplatQuat:Bc,setPackedSplatRgb:Ec,setPackedSplatRgba:Qc,setPackedSplatScales:Cc,toHalf:at,uintBitsToFloat:gc,unpackSplat:Be,withinCoinciDist:Mc,withinCoorientDist:Qe,withinDist:Dc},Symbol.toStringTag,{value:"Module"}));class ss{constructor({graph:A,inputs:e,outputs:s,template:n}){this.graph=A,this.template=n,this.inputs=e??{},this.outputs=s??{};const i=new Hs({indent:this.template.indent});for(const a in this.outputs)this.outputs[a]&&i.declares.add(this.outputs[a]);const r=A.compile({inputs:this.inputs,outputs:this.outputs,compile:i});this.shader=n.generate({globals:i.globals,statements:r}),this.uniforms=i.uniforms,this.updaters=i.updaters}prepareMaterial(){return Yc(this)}update(){for(const A of this.updaters)A()}}class ns{constructor(A){const e=A.match(/^([ \t]*)\{\{\s*GLOBALS\s*\}\}/m),s=A.match(/^([ \t]*)\{\{\s*STATEMENTS\s*\}\}/m);if(!e||!s)throw new Error("Template must contain {{ GLOBALS }} and {{ STATEMENTS }}");this.before=A.substring(0,e.index),this.between=A.substring(e.index+e[0].length,s.index),this.after=A.substring(s.index+s[0].length),this.indent=s[1]}generate({globals:A,statements:e}){return this.before+Array.from(A).join(`
76
76
 
77
77
  `)+this.between+e.map(s=>this.indent+s).join(`
78
- `)+this.after}}const Cs=new Map;function Yc(t){let A=Cs.get(t);return A||(A=new u.RawShaderMaterial({glslVersion:u.GLSL3,vertexShader:On,fragmentShader:t.shader,uniforms:t.uniforms}),Cs.set(t,A),A)}function is(t,A,e="add"){const s=()=>{throw new Error(`Invalid ${e} types: ${t}, ${A}`)};if(t===A)return t;if(t==="int"){if(QA(A))return A;s()}if(A==="int"){if(QA(t))return t;s()}if(t==="uint"){if(EA(A))return A;s()}if(A==="uint"){if(EA(t))return t;s()}if(t==="float"){if(ot(A))return A;s()}if(A==="float"){if(ot(t))return t;s()}throw new Error(`Invalid ${e} types: ${t}, ${A}`)}function Jc(t,A){return is(t,A,"sub")}function Lc(t,A){const e=()=>{throw new Error(`Invalid mul types: ${t}, ${A}`)},s=n=>n;if(t==="int"){if(QA(A))return s(A);e()}if(A==="int"){if(QA(t))return s(t);e()}if(t==="uint"){if(EA(A))return s(A);e()}if(A==="uint"){if(EA(t))return s(t);e()}if(t==="float"){if(ot(A))return s(A);e()}if(A==="float"){if(ot(t))return s(t);e()}if(QA(t)||EA(t)||QA(A)||EA(A)){if(t===A)return s(t);e()}if(t==="vec2"){if(A==="vec2"||gt(A))return s("vec2");if(A==="mat3x2")return s("vec3");if(A==="mat4x2")return s("vec4");e()}if(t==="vec3"){if(A==="mat2x3")return s("vec2");if(A==="vec3"||ct(A))return s("vec3");if(A==="mat4x3")return s("vec4");e()}if(t==="vec4"){if(A==="mat2x4")return s("vec2");if(A==="mat3x4")return s("vec3");if(A==="vec4"||lt(A))return s("vec4");e()}if(A==="vec2"){if(gt(t))return s("vec2");if(t==="mat2x3")return s("vec3");if(t==="mat2x4")return s("vec4");e()}if(A==="vec3"){if(t==="mat3x2")return s("vec2");if(ct(t))return s("vec3");if(t==="mat3x4")return s("vec4");e()}if(A==="vec4"){if(t==="mat4x2")return s("vec2");if(t==="mat4x3")return s("vec3");if(lt(t))return s("vec4");e()}if(gt(t)){if(gt(A))return s("mat2");if(A==="mat3x2")return s("mat3x2");if(A==="mat4x2")return s("mat4x2");e()}if(t==="mat2x3"){if(gt(A))return s("mat2x3");if(A==="mat3x2")return s("mat3");if(A==="mat4x2")return s("mat4x3");e()}if(t==="mat2x4"){if(gt(A))return s("mat2x4");if(A==="mat3x2")return s("mat3x4");if(A==="mat4x2")return s("mat4");e()}if(t==="mat3x2"){if(A==="mat2x3")return s("mat2");if(ct(A))return s("mat3x2");if(A==="mat4x3")return s("mat4x2");e()}if(ct(t)){if(A==="mat2x3")return s("mat2x3");if(ct(A))return s("mat3");if(A==="mat4x3")return s("mat4x3");e()}if(t==="mat3x4"){if(A==="mat2x3")return s("mat2x4");if(ct(A))return s("mat3x4");if(A==="mat4x3")return s("mat4");e()}if(t==="mat4x2"){if(A==="mat2x4")return s("mat2");if(A==="mat3x4")return s("mat3x2");if(lt(A))return s("mat4x2");e()}if(t==="mat4x3"){if(A==="mat2x4")return s("mat2x3");if(A==="mat3x4")return s("mat3");if(lt(A))return s("mat4x3");e()}if(lt(t)){if(A==="mat2x4")return s("mat2x4");if(A==="mat3x4")return s("mat3x4");if(lt(A))return s("mat4");e()}throw new Error(`Invalid mul types: ${t}, ${A}`)}function _c(t,A){return is(t,A,"div")}function zc(t,A){if(t===A)return t;if(t==="int"){if(QA(A))return A}else if(A==="int"){if(QA(t))return t}else if(t==="uint"){if(EA(A))return A}else if(A==="uint"&&EA(t))return t;throw new Error(`Invalid imod types: ${t}, ${A}`)}function qc(t,A){if(t===A||A==="float")return t;throw new Error(`Invalid mod types: ${t}, ${A}`)}function Hc(t){return t}function Kc(t){return t}function $c(t){return t}function Vc(t){return t}function Pc(t){return t}function Xc(t){return t}function Oc(t){return t}function Wc(t){return t}function jc(t){return t}function Zc(t){return t}function Al(t){return t}function tl(t){return t}function el(t){return t}function sl(t){return t}function nl(t){return t}function il(t){return t}function ni(t,A,e="min"){if(t===A)return t;if(A==="float"){if(Ae(t))return t}else if(A==="int"){if(QA(t))return t}else if(A==="uint"&&EA(t))return t;throw new Error(`Invalid ${e} types: ${t}, ${A}`)}function rl(t,A){return ni(t,A,"max")}function al(t,A,e){if(A==="float"){if(Ae(t))return t}else if(A==="int"){if(QA(t))return t}else if(A==="uint"&&EA(t))return t;throw new Error(`Invalid clamp types: ${t}, ${A}`)}function ol(t,A,e){if(e===t||e==="float"||e==="bool"&&t==="float"||e==="bvec2"&&t==="vec2"||e==="bvec3"&&t==="vec3"||e==="bvec4"&&t==="vec4")return t;throw new Error(`Invalid mix types: ${t}, ${A}, ${e}`)}function gl(t,A){if(t===A||A==="float")return A;throw new Error(`Invalid step types: ${t}, ${A}`)}function cl(t,A,e){if(t===A&&(t===e||t==="float"))return e;throw new Error(`Invalid smoothstep types: ${t}, ${A}, ${e}`)}function ii(t,A="isNan"){if(t==="float")return"bool";if(t==="vec2")return"bvec2";if(t==="vec3")return"bvec3";if(t==="vec4")return"bvec4";throw new Error(`Invalid ${A} types: ${t}`)}function ll(t){return ii(t,"isInf")}const BA=(t,A)=>new gi({a:t,b:A}),ft=(t,A)=>new ci({a:t,b:A}),rA=(t,A)=>new li({a:t,b:A}),ce=(t,A)=>new Ii({a:t,b:A}),ze=(t,A)=>new ui({a:t,b:A}),ri=(t,A)=>new hi({a:t,b:A}),Il=t=>new Ci({a:t}).outputs,rs=t=>new Bi({a:t}),ul=t=>new Qi({a:t}),hl=t=>new Ei({a:t}),Cl=t=>new fi({a:t}),Bl=t=>new pi({a:t}),Ql=t=>new di({a:t}),El=t=>new yi({a:t}),le=t=>new wi({a:t}),fl=(t,A)=>new mi({a:t,b:A}),pl=t=>new xi({a:t}),dl=t=>new Si({a:t}),yl=t=>new Di({a:t}),wl=t=>new Mi({a:t}),ml=t=>new vi({a:t}),xl=t=>new bi({a:t}),Sl=t=>new Fi({a:t}),Dl=(t,A)=>new ki({a:t,b:A}),ai=(t,A)=>new Ni({a:t,b:A}),Ml=(t,A,e)=>new Ti({a:t,min:A,max:e}),oi=(t,A,e)=>new Ui({a:t,b:A,t:e}),vl=(t,A)=>new Gi({edge:t,x:A}),bl=(t,A,e)=>new Ri({edge0:t,edge1:A,x:e}),Fl=t=>new Yi({a:t}),kl=t=>new Ji({a:t});class gi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"sum",outTypeFunc:is}),this.statements=({inputs:s,outputs:n})=>[`${n.sum} = ${s.a} + ${s.b};`]}}class ci extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"difference",outTypeFunc:Jc}),this.statements=({inputs:s,outputs:n})=>[`${n.difference} = ${s.a} - ${s.b};`]}}class li extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"product",outTypeFunc:Lc}),this.statements=({inputs:s,outputs:n})=>[`${n.product} = ${s.a} * ${s.b};`]}}class Ii extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"quotient",outTypeFunc:_c}),this.statements=({inputs:s,outputs:n})=>[`${n.quotient} = ${s.a} / ${s.b};`]}}class ui extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"remainder",outTypeFunc:zc}),this.statements=({inputs:s,outputs:n})=>[`${n.remainder} = ${s.a} % ${s.b};`]}}class hi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"remainder",outTypeFunc:qc}),this.statements=({inputs:s,outputs:n})=>[`${n.remainder} = mod(${s.a}, ${s.b});`]}}class Ci extends V{constructor({a:A}){const e={a:$(A)},s=e.a,n={fract:s,integer:s};super({inTypes:e,outTypes:n,inputs:{a:A}}),this.statements=({inputs:i,outputs:r})=>[`${r.fract} = modf(${i.a}, ${r.integer});`]}}class Bi extends v{constructor({a:A}){super({a:A,outKey:"neg",outTypeFunc:Hc}),this.statements=({inputs:e,outputs:s})=>[`${s.neg} = -${e.a};`]}}class Qi extends v{constructor({a:A}){super({a:A,outKey:"abs",outTypeFunc:Kc}),this.statements=({inputs:e,outputs:s})=>[`${s.abs} = abs(${e.a});`]}}class Ei extends v{constructor({a:A}){super({a:A,outKey:"sign",outTypeFunc:$c}),this.statements=({inputs:e,outputs:s})=>[`${s.sign} = sign(${e.a});`]}}class fi extends v{constructor({a:A}){super({a:A,outKey:"floor",outTypeFunc:Vc}),this.statements=({inputs:e,outputs:s})=>[`${s.floor} = floor(${e.a});`]}}class pi extends v{constructor({a:A}){super({a:A,outKey:"ceil",outTypeFunc:Pc}),this.statements=({inputs:e,outputs:s})=>[`${s.ceil} = ceil(${e.a});`]}}class di extends v{constructor({a:A}){super({a:A,outKey:"trunc",outTypeFunc:Xc}),this.statements=({inputs:e,outputs:s})=>[`${s.trunc} = trunc(${e.a});`]}}class yi extends v{constructor({a:A}){super({a:A,outKey:"round",outTypeFunc:Oc}),this.statements=({inputs:e,outputs:s})=>[`${s.round} = round(${e.a});`]}}class wi extends v{constructor({a:A}){super({a:A,outKey:"fract",outTypeFunc:Wc}),this.statements=({inputs:e,outputs:s})=>[`${s.fract} = fract(${e.a});`]}}class mi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"power",outTypeFunc:jc}),this.statements=({inputs:s,outputs:n})=>[`${n.power} = pow(${s.a}, ${s.b});`]}}class xi extends v{constructor({a:A}){super({a:A,outKey:"exp",outTypeFunc:Zc}),this.statements=({inputs:e,outputs:s})=>[`${s.exp} = exp(${e.a});`]}}class Si extends v{constructor({a:A}){super({a:A,outKey:"exp2",outTypeFunc:Al}),this.statements=({inputs:e,outputs:s})=>[`${s.exp2} = exp2(${e.a});`]}}class Di extends v{constructor({a:A}){super({a:A,outKey:"log",outTypeFunc:tl}),this.statements=({inputs:e,outputs:s})=>[`${s.log} = log(${e.a});`]}}class Mi extends v{constructor({a:A}){super({a:A,outKey:"log2",outTypeFunc:el}),this.statements=({inputs:e,outputs:s})=>[`${s.log2} = log2(${e.a});`]}}class vi extends v{constructor({a:A}){super({a:A,outKey:"sqr",outTypeFunc:sl}),this.statements=({inputs:e,outputs:s})=>[`${s.sqr} = ${e.a} * ${e.a};`]}}class bi extends v{constructor({a:A}){super({a:A,outKey:"sqrt",outTypeFunc:nl}),this.statements=({inputs:e,outputs:s})=>[`${s.sqrt} = sqrt(${e.a});`]}}class Fi extends v{constructor({a:A}){super({a:A,outKey:"inversesqrt",outTypeFunc:il}),this.statements=({inputs:e,outputs:s})=>[`${s.inversesqrt} = inversesqrt(${e.a});`]}}class ki extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"min",outTypeFunc:ni}),this.statements=({inputs:s,outputs:n})=>[`${n.min} = min(${s.a}, ${s.b});`]}}class Ni extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"max",outTypeFunc:rl}),this.statements=({inputs:s,outputs:n})=>[`${n.max} = max(${s.a}, ${s.b});`]}}class Ti extends yt{constructor({a:A,min:e,max:s}){super({a:A,b:e,c:s,outKey:"clamp",outTypeFunc:al}),this.statements=({inputs:n,outputs:i})=>{const{a:r,b:a,c:o}=n;return[`${i.clamp} = clamp(${r}, ${a}, ${o});`]}}}class Ui extends yt{constructor({a:A,b:e,t:s}){super({a:A,b:e,c:s,outKey:"mix",outTypeFunc:ol}),this.statements=({inputs:n,outputs:i})=>{const{a:r,b:a,c:o}=n;return[`${i.mix} = mix(${r}, ${a}, ${o});`]}}}class Gi extends tA{constructor({edge:A,x:e}){super({a:A,b:e,outKey:"step",outTypeFunc:gl}),this.statements=({inputs:s,outputs:n})=>{const{a:i,b:r}=s;return[`${n.step} = step(${i}, ${r});`]}}}class Ri extends yt{constructor({edge0:A,edge1:e,x:s}){super({a:A,b:e,c:s,outKey:"smoothstep",outTypeFunc:cl}),this.statements=({inputs:n,outputs:i})=>{const{a:r,b:a,c:o}=n;return[`${i.smoothstep} = smoothstep(${r}, ${a}, ${o});`]}}}class Yi extends v{constructor({a:A}){super({a:A,outKey:"isNan",outTypeFunc:ii}),this.statements=({inputs:e,outputs:s})=>[`${s.isNan} = isNan(${e.a});`]}}class Ji extends v{constructor({a:A}){super({a:A,outKey:"isInf",outTypeFunc:ll}),this.statements=({inputs:e,outputs:s})=>[`${s.isInf} = isInf(${e.a});`]}}const Nl=(t,A)=>new _i({a:t,b:A}),Tl=(t,A)=>new zi({a:t,b:A}),Ul=(t,A)=>new qi({a:t,b:A}),Gl=t=>new Hi({a:t}),Rl=(t,A)=>new Ki({a:t,b:A}),Yl=(t,A)=>new $i({a:t,b:A}),Jl=(t,A)=>new Vi({a:t,b:A}),Li=(t,A)=>new Pi({a:t,b:A}),Ll=(t,A)=>new Xi({a:t,b:A}),_l=(t,A)=>new Oi({a:t,b:A}),zl=t=>new Wi({a:t}),ql=t=>new ji({a:t}),as=(t,A,e)=>new Zi({cond:t,t:A,f:e}),Hl=t=>new tr({a:t});class _i extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,n)=>s,outKey:"and"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.and==="bool"?[`${n.and} = ${s.a} && ${s.b};`]:[`${n.and} = ${s.a} & ${s.b};`]}}class zi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,n)=>s,outKey:"or"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.or==="bool"?[`${n.or} = ${s.a} || ${s.b};`]:[`${n.or} = ${s.a} | ${s.b};`]}}class qi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,n)=>s,outKey:"xor"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.xor==="bool"?[`${n.xor} = ${s.a} ^^ ${s.b};`]:[`${n.xor} = ${s.a} ^ ${s.b};`]}}class Hi extends v{constructor({a:A}){super({a:A,outTypeFunc:e=>e,outKey:"not"}),this.statements=({inputs:e,outputs:s})=>this.outTypes.not==="bool"?[`${s.not} = !${e.a};`]:[`${s.not} = not(${e.a});`]}}class Ki extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,n)=>me(s,"lessThan"),outKey:"lessThan"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.lessThan==="bool"?[`${n.lessThan} = ${s.a} < ${s.b};`]:[`${n.lessThan} = lessThan(${s.a}, ${s.b});`]}}class $i extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,n)=>me(s,"lessThanEqual"),outKey:"lessThanEqual"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.lessThanEqual==="bool"?[`${n.lessThanEqual} = ${s.a} <= ${s.b};`]:[`${n.lessThanEqual} = lessThanEqual(${s.a}, ${s.b});`]}}class Vi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,n)=>me(s,"greaterThan"),outKey:"greaterThan"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.greaterThan==="bool"?[`${n.greaterThan} = ${s.a} > ${s.b};`]:[`${n.greaterThan} = greaterThan(${s.a}, ${s.b});`]}}class Pi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,n)=>me(s,"greaterThanEqual"),outKey:"greaterThanEqual"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.greaterThanEqual==="bool"?[`${n.greaterThanEqual} = ${s.a} >= ${s.b};`]:[`${n.greaterThanEqual} = greaterThanEqual(${s.a}, ${s.b});`]}}class Xi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:Ar,outKey:"equal"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.equal==="bool"?[`${n.equal} = ${s.a} == ${s.b};`]:[`${n.equal} = equal(${s.a}, ${s.b});`]}}class Oi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:Kl,outKey:"notEqual"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.notEqual==="bool"?[`${n.notEqual} = ${s.a} != ${s.b};`]:[`${n.notEqual} = notEqual(${s.a}, ${s.b});`]}}class Wi extends v{constructor({a:A}){super({a:A,outTypeFunc:e=>"bool",outKey:"any"}),this.statements=({inputs:e,outputs:s})=>[`${s.any} = any(${e.a});`]}}class ji extends v{constructor({a:A}){super({a:A,outTypeFunc:e=>"bool",outKey:"all"}),this.statements=({inputs:e,outputs:s})=>[`${s.all} = all(${e.a});`]}}class Zi extends yt{constructor({cond:A,t:e,f:s}){super({a:A,b:e,c:s,outKey:"select",outTypeFunc:(n,i,r)=>i}),this.statements=({inputs:n,outputs:i})=>{const{a:r,b:a,c:o}=n;return[`${i.select} = (${r}) ? (${a}) : (${o});`]}}}function me(t,A){if(dt(t))return"bool";if(t==="ivec2"||t==="uvec2"||t==="vec2")return"bvec2";if(t==="ivec3"||t==="uvec3"||t==="vec3")return"bvec3";if(t==="ivec4"||t==="uvec4"||t==="vec4")return"bvec4";throw new Error(`Invalid ${A} type: ${t}`)}function Ar(t,A="equal"){if(dt(t))return"bool";if(pt(t))return t;if(t==="ivec2"||t==="uvec2"||t==="vec2")return"bvec2";if(t==="ivec3"||t==="uvec3"||t==="vec3")return"bvec3";if(t==="ivec4"||t==="uvec4"||t==="vec4")return"bvec4";throw new Error(`Invalid ${A} type: ${t}`)}function Kl(t){return Ar(t,"notEqual")}function $l(t){if(pt(t))return"bool";if(QA(t))return"int";if(EA(t))return"uint";throw new Error(`Invalid compXor type: ${t}`)}class tr extends v{constructor({a:A}){const e=$l($(A));super({a:A,outTypeFunc:s=>e,outKey:"compXor"}),this.statements=({inputs:s,outputs:n})=>{if(dt(this.outTypes.compXor))return[`${n.compXor} = ${s.a};`];const r=(Nt(e)?["x","y"]:Tt(e)?["x","y","z"]:["x","y","z","w"]).map(o=>`${s.a}.${o}`),a=pt(e)?"^^":"^";return[`${n.compXor} = ${r.join(` ${a} `)};`]}}}const Vl=t=>new or({value:t}),Pl=t=>new gr({value:t}),Xl=t=>new cr({value:t}),er=t=>new lr({value:t}),Ol=t=>new Ir({value:t}),Wl=t=>new ur({value:t}),jl=t=>new hr({value:t}),Zl=t=>new Cr({value:t}),AI=t=>new Br({value:t}),tI=t=>new Qr({value:t}),eI=t=>new Er({value:t}),sI=t=>new fr({value:t}),nI=t=>new pr({value:t}),sr=t=>new dr({value:t}),Qt=t=>new yr({value:t}),nr=t=>new wr({value:t}),iI=t=>new mr({value:t}),rI=t=>new xr({value:t}),aI=t=>new Sr({value:t}),ir=t=>new Dr({value:t}),rr=t=>new Mr({value:t}),oI=t=>new vr({value:t}),gI=t=>new br({value:t}),cI=t=>new Fr({value:t}),lI=t=>new kr({value:t}),II=t=>new Nr({value:t}),uI=t=>new Tr({value:t}),ar=t=>new Ur({value:t}),hI=t=>new Gr({value:t}),qe=t=>new Rr({value:t});class cA extends v{constructor({value:A,outType:e,outKey:s}){super({a:A,outTypeFunc:()=>e,outKey:s}),this.statements=({inputs:n,outputs:i})=>[`${i[s]} = ${zs(e)}(${n.a});`]}}class or extends cA{constructor({value:A}){super({value:A,outType:"bool",outKey:"bool"})}}class gr extends cA{constructor({value:A}){super({value:A,outType:"int",outKey:"int"})}}class cr extends cA{constructor({value:A}){super({value:A,outType:"uint",outKey:"uint"})}}class lr extends cA{constructor({value:A}){super({value:A,outType:"float",outKey:"float"})}}class Ir extends cA{constructor({value:A}){super({value:A,outType:"bvec2",outKey:"bvec2"})}}class ur extends cA{constructor({value:A}){super({value:A,outType:"bvec3",outKey:"bvec3"})}}class hr extends cA{constructor({value:A}){super({value:A,outType:"bvec4",outKey:"bvec4"})}}class Cr extends cA{constructor({value:A}){super({value:A,outType:"ivec2",outKey:"ivec2"})}}class Br extends cA{constructor({value:A}){super({value:A,outType:"ivec3",outKey:"ivec3"})}}class Qr extends cA{constructor({value:A}){super({value:A,outType:"ivec4",outKey:"ivec4"})}}class Er extends cA{constructor({value:A}){super({value:A,outType:"uvec2",outKey:"uvec2"})}}class fr extends cA{constructor({value:A}){super({value:A,outType:"uvec3",outKey:"uvec3"})}}class pr extends cA{constructor({value:A}){super({value:A,outType:"uvec4",outKey:"uvec4"})}}class dr extends cA{constructor({value:A}){super({value:A,outType:"vec2",outKey:"vec2"})}}class yr extends cA{constructor({value:A}){super({value:A,outType:"vec3",outKey:"vec3"})}}class wr extends cA{constructor({value:A}){super({value:A,outType:"vec4",outKey:"vec4"})}}class mr extends cA{constructor({value:A}){super({value:A,outType:"mat2",outKey:"mat2"})}}class xr extends cA{constructor({value:A}){super({value:A,outType:"mat3",outKey:"mat3"})}}class Sr extends cA{constructor({value:A}){super({value:A,outType:"mat4",outKey:"mat4"})}}class Dr extends v{constructor({value:A}){super({a:A,outKey:"int",outTypeFunc:()=>"int"}),this.statements=({inputs:e,outputs:s})=>[`${s.int} = floatBitsToInt(${e.a});`]}}class Mr extends v{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:e,outputs:s})=>[`${s.uint} = floatBitsToUint(${e.a});`]}}class vr extends v{constructor({value:A}){super({a:A,outKey:"float",outTypeFunc:()=>"float"}),this.statements=({inputs:e,outputs:s})=>[`${s.float} = intBitsToFloat(${e.a});`]}}class br extends v{constructor({value:A}){super({a:A,outKey:"float",outTypeFunc:()=>"float"}),this.statements=({inputs:e,outputs:s})=>[`${s.float} = uintBitsToFloat(${e.a});`]}}class Fr extends v{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:e,outputs:s})=>[`${s.uint} = packSnorm2x16(${e.a});`]}}class kr extends v{constructor({value:A}){super({a:A,outKey:"vec2",outTypeFunc:()=>"vec2"}),this.statements=({inputs:e,outputs:s})=>[`${s.vec2} = unpackSnorm2x16(${e.a});`]}}class Nr extends v{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:e,outputs:s})=>[`${s.uint} = packUnorm2x16(${e.a});`]}}class Tr extends v{constructor({value:A}){super({a:A,outKey:"vec2",outTypeFunc:()=>"vec2"}),this.statements=({inputs:e,outputs:s})=>[`${s.vec2} = unpackUnorm2x16(${e.a});`]}}class Ur extends v{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:e,outputs:s})=>[`${s.uint} = packHalf2x16(${e.a});`]}}class Gr extends v{constructor({value:A}){super({a:A,outKey:"vec2",outTypeFunc:()=>"vec2"}),this.statements=({inputs:e,outputs:s})=>[`${s.vec2} = unpackHalf2x16(${e.a});`]}}class Rr extends v{constructor({value:A}){super({a:A,outKey:"rgba8",outTypeFunc:()=>"vec4"}),this.statements=({inputs:e,outputs:s})=>[`uvec4 uRgba = uvec4(${e.a} & 0xffu, (${e.a} >> 8u) & 0xffu, (${e.a} >> 16u) & 0xffu, (${e.a} >> 24u) & 0xffu);`,`${s.rgba8} = vec4(uRgba) / 255.0;`]}}const CI=t=>new _r({a:t}),BI=(t,A)=>new zr({a:t,b:A}),Yr=(t,A)=>new qr({a:t,b:A}),QI=(t,A)=>new Hr({a:t,b:A}),Jr=t=>new Kr({a:t}),EI=(t,A,e)=>new Pr({a:t,b:A,c:e}),fI=(t,A)=>new Xr({incident:t,normal:A}),pI=(t,A,e)=>new Or({incident:t,normal:A,eta:e}),Et=t=>new ea({vector:t}),KA=({vector:t,vectorType:A,x:e,y:s,z:n,w:i,r,g:a,b:o,a:c})=>new sa({vector:t,vectorType:A,x:e,y:s,z:n,w:i,r,g:a,b:o,a:c}),dI=t=>new $r({a:t}),Lr=(t,A)=>new Vr({a:t,b:A}),yI=(t,A)=>new na({vector:t,select:A}),wI=(t,A)=>new Wr({a:t,b:A}),mI=(t,A)=>new jr({a:t,b:A}),xI=t=>new Zr({a:t}),SI=t=>new Aa({a:t}),DI=t=>new ta({a:t});class _r extends v{constructor({a:A}){super({a:A,outTypeFunc:e=>"float",outKey:"length"}),this.statements=({inputs:e,outputs:s})=>[`${s.length} = length(${e.a});`]}}class zr extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"distance",outTypeFunc:(s,n)=>"float"}),this.statements=({inputs:s,outputs:n})=>[`${n.distance} = distance(${s.a}, ${s.b});`]}}class qr extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"dot",outTypeFunc:(s,n)=>"float"}),this.statements=({inputs:s,outputs:n})=>[`${n.dot} = dot(${s.a}, ${s.b});`]}}class Hr extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"cross",outTypeFunc:(s,n)=>"vec3"}),this.statements=({inputs:s,outputs:n})=>[`${n.cross} = cross(${s.a}, ${s.b});`]}}class Kr extends v{constructor({a:A}){super({a:A,outTypeFunc:e=>e,outKey:"normalize"}),this.statements=({inputs:e,outputs:s})=>[`${s.normalize} = normalize(${e.a});`]}}function MI(t){if(t==="vec3")return"vec2";if(t==="vec4")return"vec3";throw new Error("Invalid type")}class $r extends v{constructor({a:A}){super({a:A,outTypeFunc:e=>MI(e),outKey:"projected"}),this.statements=({inputs:e,outputs:s})=>{if(this.inTypes.a==="vec3")return[`${s.projected} = ${e.a}.xy / ${e.a}.z;`];if(this.inTypes.a==="vec4")return[`${s.projected} = ${e.a}.xyz / ${e.a}.w;`];throw new Error("Invalid type")}}}function vI(t){if(t==="float")return"vec2";if(t==="vec2")return"vec3";if(t==="vec3")return"vec4";throw new Error("Invalid type")}class Vr extends tA{constructor({a:A,b:e}){const s=$(A),n=vI(s);super({a:A,b:e,outKey:"extend",outTypeFunc:()=>n}),this.statements=({inputs:i,outputs:r})=>[`${r.extend} = ${n}(${i.a}, ${i.b});`]}}class Pr extends yt{constructor({a:A,b:e,c:s}){super({a:A,b:e,c:s,outKey:"forward",outTypeFunc:(n,i,r)=>n}),this.statements=({inputs:n,outputs:i})=>[`${i.forward} = faceforward(${n.a}, ${n.b}, ${n.c});`]}}class Xr extends tA{constructor({incident:A,normal:e}){super({a:A,b:e,outKey:"reflection",outTypeFunc:(s,n)=>s}),this.statements=({inputs:s,outputs:n})=>[`${n.reflection} = reflect(${s.a}, ${s.b});`]}}class Or extends yt{constructor({incident:A,normal:e,eta:s}){super({a:A,b:e,c:s,outKey:"refraction",outTypeFunc:(n,i,r)=>n}),this.statements=({inputs:n,outputs:i})=>[`${i.refraction} = refract(${n.a}, ${n.b}, ${n.c});`]}}class Wr extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"product",outTypeFunc:(s,n)=>s}),this.statements=({inputs:s,outputs:n})=>[`${n.product} = matrixCompMult(${A}, ${e});`]}}function bI(t,A){if(t==="vec2"){if(A==="vec2")return"mat2";if(A==="vec3")return"mat3x2";if(A==="vec4")return"mat4x2"}if(t==="vec3"){if(A==="vec2")return"mat2x3";if(A==="vec3")return"mat3";if(A==="vec4")return"mat4x3"}if(t==="vec4"){if(A==="vec2")return"mat2x4";if(A==="vec3")return"mat3x4";if(A==="vec4")return"mat4"}throw new Error(`Invalid outer type: ${t}, ${A}`)}class jr extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"outer",outTypeFunc:bI}),this.statements=({inputs:s,outputs:n})=>[`${n.outer} = outerProduct(${s.a}, ${s.b});`]}}function FI(t){if(t==="mat2")return"mat2";if(t==="mat3")return"mat3";if(t==="mat4")return"mat4";if(t==="mat2x2")return"mat2x2";if(t==="mat2x3")return"mat3x2";if(t==="mat2x4")return"mat4x2";if(t==="mat3x2")return"mat2x3";if(t==="mat3x3")return"mat3x3";if(t==="mat3x4")return"mat4x3";if(t==="mat4x2")return"mat2x4";if(t==="mat4x3")return"mat3x4";if(t==="mat4x4")return"mat4x4";throw new Error(`Invalid transpose type: ${t}`)}class Zr extends v{constructor({a:A}){super({a:A,outKey:"transpose",outTypeFunc:FI}),this.statements=({inputs:e,outputs:s})=>[`${s.transpose} = transpose(${e.a});`]}}class Aa extends v{constructor({a:A}){super({a:A,outKey:"det",outTypeFunc:e=>"float"}),this.statements=({inputs:e,outputs:s})=>[`${s.det} = determinant(${e.a});`]}}class ta extends v{constructor({a:A}){super({a:A,outKey:"inverse",outTypeFunc:e=>e}),this.statements=({inputs:e,outputs:s})=>[`${s.inverse} = inverse(${A});`]}}function kI(t){const A=e=>e;switch(t){case"vec2":return A({x:"float",y:"float",r:"float",g:"float"});case"vec3":return A({x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"});case"vec4":return A({x:"float",y:"float",z:"float",w:"float",r:"float",g:"float",b:"float",a:"float"});case"ivec2":return A({x:"int",y:"int",r:"int",g:"int"});case"ivec3":return A({x:"int",y:"int",z:"int",r:"int",g:"int",b:"int"});case"ivec4":return A({x:"int",y:"int",z:"int",w:"int",r:"int",g:"int",b:"int",a:"int"});case"uvec2":return A({x:"uint",y:"uint",r:"uint",g:"uint"});case"uvec3":return A({x:"uint",y:"uint",z:"uint",r:"uint",g:"uint",b:"uint"});case"uvec4":return A({x:"uint",y:"uint",z:"uint",w:"uint",r:"uint",g:"uint",b:"uint",a:"uint"});default:throw new Error(`Invalid vector type: ${t}`)}}class ea extends V{constructor({vector:A}){const s={vector:$(A)},n=kI(s.vector);super({inTypes:s,outTypes:n,inputs:{vector:A}}),this.statements=({inputs:i,outputs:r})=>{const{x:a,y:o,z:c,w:l,r:g,g:I,b:h,a:B}=r,{vector:C}=i;return[a?`${a} = ${C}.x;`:null,o?`${o} = ${C}.y;`:null,c?`${c} = ${C}.z;`:null,l?`${l} = ${C}.w;`:null,g?`${g} = ${C}.r;`:null,I?`${I} = ${C}.g;`:null,h?`${h} = ${C}.b;`:null,B?`${B} = ${C}.a;`:null].filter(Boolean)}}}class sa extends V{constructor({vector:A,vectorType:e,x:s,y:n,z:i,w:r,r:a,g:o,b:c,a:l}){if(!A&&!e)throw new Error("Either vector or vectorType must be provided");const g=e??$(A),I=Js(g),h=Ls(g),B={vector:g,x:I,y:I,r:I,g:I},C={vector:A,x:s,y:n,r:a,g:o};h>=3&&(Object.assign(B,{z:I,b:I}),Object.assign(C,{z:i,b:c})),h>=4&&(Object.assign(B,{w:I,a:I}),Object.assign(C,{w:r,a:l})),super({inTypes:B,outTypes:{vector:g},inputs:C}),this.statements=({inputs:Q,outputs:E})=>{const{vector:f}=E,{vector:p,x:d,y:w,z:D,w:x,r:y,g:m,b:N,a:M}=Q,S=[`${f}.x = ${d??y??(p?`${p}.x`:Lt(I))};`,`${f}.y = ${w??m??(p?`${p}.y`:Lt(I))};`];return h>=3&&S.push(`${f}.z = ${D??N??(p?`${p}.z`:Lt(I))};`),h>=4&&S.push(`${f}.w = ${x??M??(p?`${p}.w`:Lt(I))};`),S}}dynoOut(){return new K(this,"vector")}}function NI(t,A){let e=null;if(Ae(t)?e=A.length===1?"float":A.length===2?"vec2":A.length===3?"vec3":A.length===4?"vec4":null:QA(t)?e=A.length===1?"int":A.length===2?"ivec2":A.length===3?"ivec3":A.length===4?"ivec4":null:EA(t)&&(e=A.length===1?"uint":A.length===2?"uvec2":A.length===3?"uvec3":A.length===4?"uvec4":null),e==null)throw new Error(`Invalid swizzle: ${A}`);return e}class na extends v{constructor({vector:A,select:e}){super({a:A,outKey:"swizzle",outTypeFunc:s=>NI(s,e)}),this.statements=({inputs:s,outputs:n})=>[`${n.swizzle} = ${s.a}.${e};`]}}const TI=(t,A,e)=>new la({index:t,from:A,to:e}),UI=t=>new Gt({value:t}),GI=t=>new UA({state:t}),RI=t=>new GA({state:t}),ia=t=>new Ia({value:t}),ra=t=>new ua({value:t}),aa=t=>new ha({value:t}),oa=t=>new Ca({value:t}),YI=t=>new Ba({value:t}),JI=t=>new Qa({value:t}),ga=t=>new Ea({value:t}),He=t=>new fa({value:t}),ca=(t,A,e)=>new pa({z:t,zNear:A,zFar:e}).outputs.depth;class la extends V{constructor({from:A,to:e,index:s}){super({inTypes:{from:"int",to:"int",index:"int"},outTypes:{index:"int"},inputs:{from:A,to:e,index:s},statements:({inputs:n,outputs:i})=>[`${i.index} = ${n.index} - ${n.from} + ${n.to};`]})}dynoOut(){return new K(this,"index")}}class UA extends V{constructor({state:A}){const e=$(A);super({inTypes:{state:e},outTypes:{state:"uint"},inputs:{state:A},globals:()=>[hA(`
78
+ `)+this.after}}const Cs=new Map;function Yc(t){let A=Cs.get(t);return A||(A=new u.RawShaderMaterial({glslVersion:u.GLSL3,vertexShader:On,fragmentShader:t.shader,uniforms:t.uniforms}),Cs.set(t,A),A)}function is(t,A,e="add"){const s=()=>{throw new Error(`Invalid ${e} types: ${t}, ${A}`)};if(t===A)return t;if(t==="int"){if(QA(A))return A;s()}if(A==="int"){if(QA(t))return t;s()}if(t==="uint"){if(EA(A))return A;s()}if(A==="uint"){if(EA(t))return t;s()}if(t==="float"){if(ot(A))return A;s()}if(A==="float"){if(ot(t))return t;s()}throw new Error(`Invalid ${e} types: ${t}, ${A}`)}function Jc(t,A){return is(t,A,"sub")}function _c(t,A){const e=()=>{throw new Error(`Invalid mul types: ${t}, ${A}`)},s=n=>n;if(t==="int"){if(QA(A))return s(A);e()}if(A==="int"){if(QA(t))return s(t);e()}if(t==="uint"){if(EA(A))return s(A);e()}if(A==="uint"){if(EA(t))return s(t);e()}if(t==="float"){if(ot(A))return s(A);e()}if(A==="float"){if(ot(t))return s(t);e()}if(QA(t)||EA(t)||QA(A)||EA(A)){if(t===A)return s(t);e()}if(t==="vec2"){if(A==="vec2"||gt(A))return s("vec2");if(A==="mat3x2")return s("vec3");if(A==="mat4x2")return s("vec4");e()}if(t==="vec3"){if(A==="mat2x3")return s("vec2");if(A==="vec3"||ct(A))return s("vec3");if(A==="mat4x3")return s("vec4");e()}if(t==="vec4"){if(A==="mat2x4")return s("vec2");if(A==="mat3x4")return s("vec3");if(A==="vec4"||lt(A))return s("vec4");e()}if(A==="vec2"){if(gt(t))return s("vec2");if(t==="mat2x3")return s("vec3");if(t==="mat2x4")return s("vec4");e()}if(A==="vec3"){if(t==="mat3x2")return s("vec2");if(ct(t))return s("vec3");if(t==="mat3x4")return s("vec4");e()}if(A==="vec4"){if(t==="mat4x2")return s("vec2");if(t==="mat4x3")return s("vec3");if(lt(t))return s("vec4");e()}if(gt(t)){if(gt(A))return s("mat2");if(A==="mat3x2")return s("mat3x2");if(A==="mat4x2")return s("mat4x2");e()}if(t==="mat2x3"){if(gt(A))return s("mat2x3");if(A==="mat3x2")return s("mat3");if(A==="mat4x2")return s("mat4x3");e()}if(t==="mat2x4"){if(gt(A))return s("mat2x4");if(A==="mat3x2")return s("mat3x4");if(A==="mat4x2")return s("mat4");e()}if(t==="mat3x2"){if(A==="mat2x3")return s("mat2");if(ct(A))return s("mat3x2");if(A==="mat4x3")return s("mat4x2");e()}if(ct(t)){if(A==="mat2x3")return s("mat2x3");if(ct(A))return s("mat3");if(A==="mat4x3")return s("mat4x3");e()}if(t==="mat3x4"){if(A==="mat2x3")return s("mat2x4");if(ct(A))return s("mat3x4");if(A==="mat4x3")return s("mat4");e()}if(t==="mat4x2"){if(A==="mat2x4")return s("mat2");if(A==="mat3x4")return s("mat3x2");if(lt(A))return s("mat4x2");e()}if(t==="mat4x3"){if(A==="mat2x4")return s("mat2x3");if(A==="mat3x4")return s("mat3");if(lt(A))return s("mat4x3");e()}if(lt(t)){if(A==="mat2x4")return s("mat2x4");if(A==="mat3x4")return s("mat3x4");if(lt(A))return s("mat4");e()}throw new Error(`Invalid mul types: ${t}, ${A}`)}function Lc(t,A){return is(t,A,"div")}function zc(t,A){if(t===A)return t;if(t==="int"){if(QA(A))return A}else if(A==="int"){if(QA(t))return t}else if(t==="uint"){if(EA(A))return A}else if(A==="uint"&&EA(t))return t;throw new Error(`Invalid imod types: ${t}, ${A}`)}function qc(t,A){if(t===A||A==="float")return t;throw new Error(`Invalid mod types: ${t}, ${A}`)}function Hc(t){return t}function Kc(t){return t}function Vc(t){return t}function $c(t){return t}function Pc(t){return t}function Xc(t){return t}function Oc(t){return t}function Wc(t){return t}function jc(t){return t}function Zc(t){return t}function Al(t){return t}function tl(t){return t}function el(t){return t}function sl(t){return t}function nl(t){return t}function il(t){return t}function ni(t,A,e="min"){if(t===A)return t;if(A==="float"){if(Ae(t))return t}else if(A==="int"){if(QA(t))return t}else if(A==="uint"&&EA(t))return t;throw new Error(`Invalid ${e} types: ${t}, ${A}`)}function rl(t,A){return ni(t,A,"max")}function al(t,A,e){if(A==="float"){if(Ae(t))return t}else if(A==="int"){if(QA(t))return t}else if(A==="uint"&&EA(t))return t;throw new Error(`Invalid clamp types: ${t}, ${A}`)}function ol(t,A,e){if(e===t||e==="float"||e==="bool"&&t==="float"||e==="bvec2"&&t==="vec2"||e==="bvec3"&&t==="vec3"||e==="bvec4"&&t==="vec4")return t;throw new Error(`Invalid mix types: ${t}, ${A}, ${e}`)}function gl(t,A){if(t===A||A==="float")return A;throw new Error(`Invalid step types: ${t}, ${A}`)}function cl(t,A,e){if(t===A&&(t===e||t==="float"))return e;throw new Error(`Invalid smoothstep types: ${t}, ${A}, ${e}`)}function ii(t,A="isNan"){if(t==="float")return"bool";if(t==="vec2")return"bvec2";if(t==="vec3")return"bvec3";if(t==="vec4")return"bvec4";throw new Error(`Invalid ${A} types: ${t}`)}function ll(t){return ii(t,"isInf")}const BA=(t,A)=>new gi({a:t,b:A}),ft=(t,A)=>new ci({a:t,b:A}),rA=(t,A)=>new li({a:t,b:A}),ce=(t,A)=>new Ii({a:t,b:A}),ze=(t,A)=>new ui({a:t,b:A}),ri=(t,A)=>new hi({a:t,b:A}),Il=t=>new Ci({a:t}).outputs,rs=t=>new Bi({a:t}),ul=t=>new Qi({a:t}),hl=t=>new Ei({a:t}),Cl=t=>new fi({a:t}),Bl=t=>new pi({a:t}),Ql=t=>new di({a:t}),El=t=>new yi({a:t}),le=t=>new wi({a:t}),fl=(t,A)=>new mi({a:t,b:A}),pl=t=>new xi({a:t}),dl=t=>new Si({a:t}),yl=t=>new Di({a:t}),wl=t=>new Mi({a:t}),ml=t=>new vi({a:t}),xl=t=>new bi({a:t}),Sl=t=>new Fi({a:t}),Dl=(t,A)=>new ki({a:t,b:A}),ai=(t,A)=>new Ni({a:t,b:A}),Ml=(t,A,e)=>new Ti({a:t,min:A,max:e}),oi=(t,A,e)=>new Ui({a:t,b:A,t:e}),vl=(t,A)=>new Gi({edge:t,x:A}),bl=(t,A,e)=>new Ri({edge0:t,edge1:A,x:e}),Fl=t=>new Yi({a:t}),kl=t=>new Ji({a:t});class gi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"sum",outTypeFunc:is}),this.statements=({inputs:s,outputs:n})=>[`${n.sum} = ${s.a} + ${s.b};`]}}class ci extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"difference",outTypeFunc:Jc}),this.statements=({inputs:s,outputs:n})=>[`${n.difference} = ${s.a} - ${s.b};`]}}class li extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"product",outTypeFunc:_c}),this.statements=({inputs:s,outputs:n})=>[`${n.product} = ${s.a} * ${s.b};`]}}class Ii extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"quotient",outTypeFunc:Lc}),this.statements=({inputs:s,outputs:n})=>[`${n.quotient} = ${s.a} / ${s.b};`]}}class ui extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"remainder",outTypeFunc:zc}),this.statements=({inputs:s,outputs:n})=>[`${n.remainder} = ${s.a} % ${s.b};`]}}class hi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"remainder",outTypeFunc:qc}),this.statements=({inputs:s,outputs:n})=>[`${n.remainder} = mod(${s.a}, ${s.b});`]}}class Ci extends ${constructor({a:A}){const e={a:V(A)},s=e.a,n={fract:s,integer:s};super({inTypes:e,outTypes:n,inputs:{a:A}}),this.statements=({inputs:i,outputs:r})=>[`${r.fract} = modf(${i.a}, ${r.integer});`]}}class Bi extends v{constructor({a:A}){super({a:A,outKey:"neg",outTypeFunc:Hc}),this.statements=({inputs:e,outputs:s})=>[`${s.neg} = -${e.a};`]}}class Qi extends v{constructor({a:A}){super({a:A,outKey:"abs",outTypeFunc:Kc}),this.statements=({inputs:e,outputs:s})=>[`${s.abs} = abs(${e.a});`]}}class Ei extends v{constructor({a:A}){super({a:A,outKey:"sign",outTypeFunc:Vc}),this.statements=({inputs:e,outputs:s})=>[`${s.sign} = sign(${e.a});`]}}class fi extends v{constructor({a:A}){super({a:A,outKey:"floor",outTypeFunc:$c}),this.statements=({inputs:e,outputs:s})=>[`${s.floor} = floor(${e.a});`]}}class pi extends v{constructor({a:A}){super({a:A,outKey:"ceil",outTypeFunc:Pc}),this.statements=({inputs:e,outputs:s})=>[`${s.ceil} = ceil(${e.a});`]}}class di extends v{constructor({a:A}){super({a:A,outKey:"trunc",outTypeFunc:Xc}),this.statements=({inputs:e,outputs:s})=>[`${s.trunc} = trunc(${e.a});`]}}class yi extends v{constructor({a:A}){super({a:A,outKey:"round",outTypeFunc:Oc}),this.statements=({inputs:e,outputs:s})=>[`${s.round} = round(${e.a});`]}}class wi extends v{constructor({a:A}){super({a:A,outKey:"fract",outTypeFunc:Wc}),this.statements=({inputs:e,outputs:s})=>[`${s.fract} = fract(${e.a});`]}}class mi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"power",outTypeFunc:jc}),this.statements=({inputs:s,outputs:n})=>[`${n.power} = pow(${s.a}, ${s.b});`]}}class xi extends v{constructor({a:A}){super({a:A,outKey:"exp",outTypeFunc:Zc}),this.statements=({inputs:e,outputs:s})=>[`${s.exp} = exp(${e.a});`]}}class Si extends v{constructor({a:A}){super({a:A,outKey:"exp2",outTypeFunc:Al}),this.statements=({inputs:e,outputs:s})=>[`${s.exp2} = exp2(${e.a});`]}}class Di extends v{constructor({a:A}){super({a:A,outKey:"log",outTypeFunc:tl}),this.statements=({inputs:e,outputs:s})=>[`${s.log} = log(${e.a});`]}}class Mi extends v{constructor({a:A}){super({a:A,outKey:"log2",outTypeFunc:el}),this.statements=({inputs:e,outputs:s})=>[`${s.log2} = log2(${e.a});`]}}class vi extends v{constructor({a:A}){super({a:A,outKey:"sqr",outTypeFunc:sl}),this.statements=({inputs:e,outputs:s})=>[`${s.sqr} = ${e.a} * ${e.a};`]}}class bi extends v{constructor({a:A}){super({a:A,outKey:"sqrt",outTypeFunc:nl}),this.statements=({inputs:e,outputs:s})=>[`${s.sqrt} = sqrt(${e.a});`]}}class Fi extends v{constructor({a:A}){super({a:A,outKey:"inversesqrt",outTypeFunc:il}),this.statements=({inputs:e,outputs:s})=>[`${s.inversesqrt} = inversesqrt(${e.a});`]}}class ki extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"min",outTypeFunc:ni}),this.statements=({inputs:s,outputs:n})=>[`${n.min} = min(${s.a}, ${s.b});`]}}class Ni extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"max",outTypeFunc:rl}),this.statements=({inputs:s,outputs:n})=>[`${n.max} = max(${s.a}, ${s.b});`]}}class Ti extends yt{constructor({a:A,min:e,max:s}){super({a:A,b:e,c:s,outKey:"clamp",outTypeFunc:al}),this.statements=({inputs:n,outputs:i})=>{const{a:r,b:a,c:o}=n;return[`${i.clamp} = clamp(${r}, ${a}, ${o});`]}}}class Ui extends yt{constructor({a:A,b:e,t:s}){super({a:A,b:e,c:s,outKey:"mix",outTypeFunc:ol}),this.statements=({inputs:n,outputs:i})=>{const{a:r,b:a,c:o}=n;return[`${i.mix} = mix(${r}, ${a}, ${o});`]}}}class Gi extends tA{constructor({edge:A,x:e}){super({a:A,b:e,outKey:"step",outTypeFunc:gl}),this.statements=({inputs:s,outputs:n})=>{const{a:i,b:r}=s;return[`${n.step} = step(${i}, ${r});`]}}}class Ri extends yt{constructor({edge0:A,edge1:e,x:s}){super({a:A,b:e,c:s,outKey:"smoothstep",outTypeFunc:cl}),this.statements=({inputs:n,outputs:i})=>{const{a:r,b:a,c:o}=n;return[`${i.smoothstep} = smoothstep(${r}, ${a}, ${o});`]}}}class Yi extends v{constructor({a:A}){super({a:A,outKey:"isNan",outTypeFunc:ii}),this.statements=({inputs:e,outputs:s})=>[`${s.isNan} = isNan(${e.a});`]}}class Ji extends v{constructor({a:A}){super({a:A,outKey:"isInf",outTypeFunc:ll}),this.statements=({inputs:e,outputs:s})=>[`${s.isInf} = isInf(${e.a});`]}}const Nl=(t,A)=>new Li({a:t,b:A}),Tl=(t,A)=>new zi({a:t,b:A}),Ul=(t,A)=>new qi({a:t,b:A}),Gl=t=>new Hi({a:t}),Rl=(t,A)=>new Ki({a:t,b:A}),Yl=(t,A)=>new Vi({a:t,b:A}),Jl=(t,A)=>new $i({a:t,b:A}),_i=(t,A)=>new Pi({a:t,b:A}),_l=(t,A)=>new Xi({a:t,b:A}),Ll=(t,A)=>new Oi({a:t,b:A}),zl=t=>new Wi({a:t}),ql=t=>new ji({a:t}),as=(t,A,e)=>new Zi({cond:t,t:A,f:e}),Hl=t=>new tr({a:t});class Li extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,n)=>s,outKey:"and"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.and==="bool"?[`${n.and} = ${s.a} && ${s.b};`]:[`${n.and} = ${s.a} & ${s.b};`]}}class zi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,n)=>s,outKey:"or"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.or==="bool"?[`${n.or} = ${s.a} || ${s.b};`]:[`${n.or} = ${s.a} | ${s.b};`]}}class qi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,n)=>s,outKey:"xor"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.xor==="bool"?[`${n.xor} = ${s.a} ^^ ${s.b};`]:[`${n.xor} = ${s.a} ^ ${s.b};`]}}class Hi extends v{constructor({a:A}){super({a:A,outTypeFunc:e=>e,outKey:"not"}),this.statements=({inputs:e,outputs:s})=>this.outTypes.not==="bool"?[`${s.not} = !${e.a};`]:[`${s.not} = not(${e.a});`]}}class Ki extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,n)=>me(s,"lessThan"),outKey:"lessThan"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.lessThan==="bool"?[`${n.lessThan} = ${s.a} < ${s.b};`]:[`${n.lessThan} = lessThan(${s.a}, ${s.b});`]}}class Vi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,n)=>me(s,"lessThanEqual"),outKey:"lessThanEqual"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.lessThanEqual==="bool"?[`${n.lessThanEqual} = ${s.a} <= ${s.b};`]:[`${n.lessThanEqual} = lessThanEqual(${s.a}, ${s.b});`]}}class $i extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,n)=>me(s,"greaterThan"),outKey:"greaterThan"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.greaterThan==="bool"?[`${n.greaterThan} = ${s.a} > ${s.b};`]:[`${n.greaterThan} = greaterThan(${s.a}, ${s.b});`]}}class Pi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,n)=>me(s,"greaterThanEqual"),outKey:"greaterThanEqual"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.greaterThanEqual==="bool"?[`${n.greaterThanEqual} = ${s.a} >= ${s.b};`]:[`${n.greaterThanEqual} = greaterThanEqual(${s.a}, ${s.b});`]}}class Xi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:Ar,outKey:"equal"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.equal==="bool"?[`${n.equal} = ${s.a} == ${s.b};`]:[`${n.equal} = equal(${s.a}, ${s.b});`]}}class Oi extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:Kl,outKey:"notEqual"}),this.statements=({inputs:s,outputs:n})=>this.outTypes.notEqual==="bool"?[`${n.notEqual} = ${s.a} != ${s.b};`]:[`${n.notEqual} = notEqual(${s.a}, ${s.b});`]}}class Wi extends v{constructor({a:A}){super({a:A,outTypeFunc:e=>"bool",outKey:"any"}),this.statements=({inputs:e,outputs:s})=>[`${s.any} = any(${e.a});`]}}class ji extends v{constructor({a:A}){super({a:A,outTypeFunc:e=>"bool",outKey:"all"}),this.statements=({inputs:e,outputs:s})=>[`${s.all} = all(${e.a});`]}}class Zi extends yt{constructor({cond:A,t:e,f:s}){super({a:A,b:e,c:s,outKey:"select",outTypeFunc:(n,i,r)=>i}),this.statements=({inputs:n,outputs:i})=>{const{a:r,b:a,c:o}=n;return[`${i.select} = (${r}) ? (${a}) : (${o});`]}}}function me(t,A){if(dt(t))return"bool";if(t==="ivec2"||t==="uvec2"||t==="vec2")return"bvec2";if(t==="ivec3"||t==="uvec3"||t==="vec3")return"bvec3";if(t==="ivec4"||t==="uvec4"||t==="vec4")return"bvec4";throw new Error(`Invalid ${A} type: ${t}`)}function Ar(t,A="equal"){if(dt(t))return"bool";if(pt(t))return t;if(t==="ivec2"||t==="uvec2"||t==="vec2")return"bvec2";if(t==="ivec3"||t==="uvec3"||t==="vec3")return"bvec3";if(t==="ivec4"||t==="uvec4"||t==="vec4")return"bvec4";throw new Error(`Invalid ${A} type: ${t}`)}function Kl(t){return Ar(t,"notEqual")}function Vl(t){if(pt(t))return"bool";if(QA(t))return"int";if(EA(t))return"uint";throw new Error(`Invalid compXor type: ${t}`)}class tr extends v{constructor({a:A}){const e=Vl(V(A));super({a:A,outTypeFunc:s=>e,outKey:"compXor"}),this.statements=({inputs:s,outputs:n})=>{if(dt(this.outTypes.compXor))return[`${n.compXor} = ${s.a};`];const r=(Nt(e)?["x","y"]:Tt(e)?["x","y","z"]:["x","y","z","w"]).map(o=>`${s.a}.${o}`),a=pt(e)?"^^":"^";return[`${n.compXor} = ${r.join(` ${a} `)};`]}}}const $l=t=>new or({value:t}),Pl=t=>new gr({value:t}),Xl=t=>new cr({value:t}),er=t=>new lr({value:t}),Ol=t=>new Ir({value:t}),Wl=t=>new ur({value:t}),jl=t=>new hr({value:t}),Zl=t=>new Cr({value:t}),AI=t=>new Br({value:t}),tI=t=>new Qr({value:t}),eI=t=>new Er({value:t}),sI=t=>new fr({value:t}),nI=t=>new pr({value:t}),sr=t=>new dr({value:t}),Qt=t=>new yr({value:t}),nr=t=>new wr({value:t}),iI=t=>new mr({value:t}),rI=t=>new xr({value:t}),aI=t=>new Sr({value:t}),ir=t=>new Dr({value:t}),rr=t=>new Mr({value:t}),oI=t=>new vr({value:t}),gI=t=>new br({value:t}),cI=t=>new Fr({value:t}),lI=t=>new kr({value:t}),II=t=>new Nr({value:t}),uI=t=>new Tr({value:t}),ar=t=>new Ur({value:t}),hI=t=>new Gr({value:t}),qe=t=>new Rr({value:t});class cA extends v{constructor({value:A,outType:e,outKey:s}){super({a:A,outTypeFunc:()=>e,outKey:s}),this.statements=({inputs:n,outputs:i})=>[`${i[s]} = ${zs(e)}(${n.a});`]}}class or extends cA{constructor({value:A}){super({value:A,outType:"bool",outKey:"bool"})}}class gr extends cA{constructor({value:A}){super({value:A,outType:"int",outKey:"int"})}}class cr extends cA{constructor({value:A}){super({value:A,outType:"uint",outKey:"uint"})}}class lr extends cA{constructor({value:A}){super({value:A,outType:"float",outKey:"float"})}}class Ir extends cA{constructor({value:A}){super({value:A,outType:"bvec2",outKey:"bvec2"})}}class ur extends cA{constructor({value:A}){super({value:A,outType:"bvec3",outKey:"bvec3"})}}class hr extends cA{constructor({value:A}){super({value:A,outType:"bvec4",outKey:"bvec4"})}}class Cr extends cA{constructor({value:A}){super({value:A,outType:"ivec2",outKey:"ivec2"})}}class Br extends cA{constructor({value:A}){super({value:A,outType:"ivec3",outKey:"ivec3"})}}class Qr extends cA{constructor({value:A}){super({value:A,outType:"ivec4",outKey:"ivec4"})}}class Er extends cA{constructor({value:A}){super({value:A,outType:"uvec2",outKey:"uvec2"})}}class fr extends cA{constructor({value:A}){super({value:A,outType:"uvec3",outKey:"uvec3"})}}class pr extends cA{constructor({value:A}){super({value:A,outType:"uvec4",outKey:"uvec4"})}}class dr extends cA{constructor({value:A}){super({value:A,outType:"vec2",outKey:"vec2"})}}class yr extends cA{constructor({value:A}){super({value:A,outType:"vec3",outKey:"vec3"})}}class wr extends cA{constructor({value:A}){super({value:A,outType:"vec4",outKey:"vec4"})}}class mr extends cA{constructor({value:A}){super({value:A,outType:"mat2",outKey:"mat2"})}}class xr extends cA{constructor({value:A}){super({value:A,outType:"mat3",outKey:"mat3"})}}class Sr extends cA{constructor({value:A}){super({value:A,outType:"mat4",outKey:"mat4"})}}class Dr extends v{constructor({value:A}){super({a:A,outKey:"int",outTypeFunc:()=>"int"}),this.statements=({inputs:e,outputs:s})=>[`${s.int} = floatBitsToInt(${e.a});`]}}class Mr extends v{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:e,outputs:s})=>[`${s.uint} = floatBitsToUint(${e.a});`]}}class vr extends v{constructor({value:A}){super({a:A,outKey:"float",outTypeFunc:()=>"float"}),this.statements=({inputs:e,outputs:s})=>[`${s.float} = intBitsToFloat(${e.a});`]}}class br extends v{constructor({value:A}){super({a:A,outKey:"float",outTypeFunc:()=>"float"}),this.statements=({inputs:e,outputs:s})=>[`${s.float} = uintBitsToFloat(${e.a});`]}}class Fr extends v{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:e,outputs:s})=>[`${s.uint} = packSnorm2x16(${e.a});`]}}class kr extends v{constructor({value:A}){super({a:A,outKey:"vec2",outTypeFunc:()=>"vec2"}),this.statements=({inputs:e,outputs:s})=>[`${s.vec2} = unpackSnorm2x16(${e.a});`]}}class Nr extends v{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:e,outputs:s})=>[`${s.uint} = packUnorm2x16(${e.a});`]}}class Tr extends v{constructor({value:A}){super({a:A,outKey:"vec2",outTypeFunc:()=>"vec2"}),this.statements=({inputs:e,outputs:s})=>[`${s.vec2} = unpackUnorm2x16(${e.a});`]}}class Ur extends v{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:e,outputs:s})=>[`${s.uint} = packHalf2x16(${e.a});`]}}class Gr extends v{constructor({value:A}){super({a:A,outKey:"vec2",outTypeFunc:()=>"vec2"}),this.statements=({inputs:e,outputs:s})=>[`${s.vec2} = unpackHalf2x16(${e.a});`]}}class Rr extends v{constructor({value:A}){super({a:A,outKey:"rgba8",outTypeFunc:()=>"vec4"}),this.statements=({inputs:e,outputs:s})=>[`uvec4 uRgba = uvec4(${e.a} & 0xffu, (${e.a} >> 8u) & 0xffu, (${e.a} >> 16u) & 0xffu, (${e.a} >> 24u) & 0xffu);`,`${s.rgba8} = vec4(uRgba) / 255.0;`]}}const CI=t=>new Lr({a:t}),BI=(t,A)=>new zr({a:t,b:A}),Yr=(t,A)=>new qr({a:t,b:A}),QI=(t,A)=>new Hr({a:t,b:A}),Jr=t=>new Kr({a:t}),EI=(t,A,e)=>new Pr({a:t,b:A,c:e}),fI=(t,A)=>new Xr({incident:t,normal:A}),pI=(t,A,e)=>new Or({incident:t,normal:A,eta:e}),Et=t=>new ea({vector:t}),KA=({vector:t,vectorType:A,x:e,y:s,z:n,w:i,r,g:a,b:o,a:c})=>new sa({vector:t,vectorType:A,x:e,y:s,z:n,w:i,r,g:a,b:o,a:c}),dI=t=>new Vr({a:t}),_r=(t,A)=>new $r({a:t,b:A}),yI=(t,A)=>new na({vector:t,select:A}),wI=(t,A)=>new Wr({a:t,b:A}),mI=(t,A)=>new jr({a:t,b:A}),xI=t=>new Zr({a:t}),SI=t=>new Aa({a:t}),DI=t=>new ta({a:t});class Lr extends v{constructor({a:A}){super({a:A,outTypeFunc:e=>"float",outKey:"length"}),this.statements=({inputs:e,outputs:s})=>[`${s.length} = length(${e.a});`]}}class zr extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"distance",outTypeFunc:(s,n)=>"float"}),this.statements=({inputs:s,outputs:n})=>[`${n.distance} = distance(${s.a}, ${s.b});`]}}class qr extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"dot",outTypeFunc:(s,n)=>"float"}),this.statements=({inputs:s,outputs:n})=>[`${n.dot} = dot(${s.a}, ${s.b});`]}}class Hr extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"cross",outTypeFunc:(s,n)=>"vec3"}),this.statements=({inputs:s,outputs:n})=>[`${n.cross} = cross(${s.a}, ${s.b});`]}}class Kr extends v{constructor({a:A}){super({a:A,outTypeFunc:e=>e,outKey:"normalize"}),this.statements=({inputs:e,outputs:s})=>[`${s.normalize} = normalize(${e.a});`]}}function MI(t){if(t==="vec3")return"vec2";if(t==="vec4")return"vec3";throw new Error("Invalid type")}class Vr extends v{constructor({a:A}){super({a:A,outTypeFunc:e=>MI(e),outKey:"projected"}),this.statements=({inputs:e,outputs:s})=>{if(this.inTypes.a==="vec3")return[`${s.projected} = ${e.a}.xy / ${e.a}.z;`];if(this.inTypes.a==="vec4")return[`${s.projected} = ${e.a}.xyz / ${e.a}.w;`];throw new Error("Invalid type")}}}function vI(t){if(t==="float")return"vec2";if(t==="vec2")return"vec3";if(t==="vec3")return"vec4";throw new Error("Invalid type")}class $r extends tA{constructor({a:A,b:e}){const s=V(A),n=vI(s);super({a:A,b:e,outKey:"extend",outTypeFunc:()=>n}),this.statements=({inputs:i,outputs:r})=>[`${r.extend} = ${n}(${i.a}, ${i.b});`]}}class Pr extends yt{constructor({a:A,b:e,c:s}){super({a:A,b:e,c:s,outKey:"forward",outTypeFunc:(n,i,r)=>n}),this.statements=({inputs:n,outputs:i})=>[`${i.forward} = faceforward(${n.a}, ${n.b}, ${n.c});`]}}class Xr extends tA{constructor({incident:A,normal:e}){super({a:A,b:e,outKey:"reflection",outTypeFunc:(s,n)=>s}),this.statements=({inputs:s,outputs:n})=>[`${n.reflection} = reflect(${s.a}, ${s.b});`]}}class Or extends yt{constructor({incident:A,normal:e,eta:s}){super({a:A,b:e,c:s,outKey:"refraction",outTypeFunc:(n,i,r)=>n}),this.statements=({inputs:n,outputs:i})=>[`${i.refraction} = refract(${n.a}, ${n.b}, ${n.c});`]}}class Wr extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"product",outTypeFunc:(s,n)=>s}),this.statements=({inputs:s,outputs:n})=>[`${n.product} = matrixCompMult(${A}, ${e});`]}}function bI(t,A){if(t==="vec2"){if(A==="vec2")return"mat2";if(A==="vec3")return"mat3x2";if(A==="vec4")return"mat4x2"}if(t==="vec3"){if(A==="vec2")return"mat2x3";if(A==="vec3")return"mat3";if(A==="vec4")return"mat4x3"}if(t==="vec4"){if(A==="vec2")return"mat2x4";if(A==="vec3")return"mat3x4";if(A==="vec4")return"mat4"}throw new Error(`Invalid outer type: ${t}, ${A}`)}class jr extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"outer",outTypeFunc:bI}),this.statements=({inputs:s,outputs:n})=>[`${n.outer} = outerProduct(${s.a}, ${s.b});`]}}function FI(t){if(t==="mat2")return"mat2";if(t==="mat3")return"mat3";if(t==="mat4")return"mat4";if(t==="mat2x2")return"mat2x2";if(t==="mat2x3")return"mat3x2";if(t==="mat2x4")return"mat4x2";if(t==="mat3x2")return"mat2x3";if(t==="mat3x3")return"mat3x3";if(t==="mat3x4")return"mat4x3";if(t==="mat4x2")return"mat2x4";if(t==="mat4x3")return"mat3x4";if(t==="mat4x4")return"mat4x4";throw new Error(`Invalid transpose type: ${t}`)}class Zr extends v{constructor({a:A}){super({a:A,outKey:"transpose",outTypeFunc:FI}),this.statements=({inputs:e,outputs:s})=>[`${s.transpose} = transpose(${e.a});`]}}class Aa extends v{constructor({a:A}){super({a:A,outKey:"det",outTypeFunc:e=>"float"}),this.statements=({inputs:e,outputs:s})=>[`${s.det} = determinant(${e.a});`]}}class ta extends v{constructor({a:A}){super({a:A,outKey:"inverse",outTypeFunc:e=>e}),this.statements=({inputs:e,outputs:s})=>[`${s.inverse} = inverse(${A});`]}}function kI(t){const A=e=>e;switch(t){case"vec2":return A({x:"float",y:"float",r:"float",g:"float"});case"vec3":return A({x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"});case"vec4":return A({x:"float",y:"float",z:"float",w:"float",r:"float",g:"float",b:"float",a:"float"});case"ivec2":return A({x:"int",y:"int",r:"int",g:"int"});case"ivec3":return A({x:"int",y:"int",z:"int",r:"int",g:"int",b:"int"});case"ivec4":return A({x:"int",y:"int",z:"int",w:"int",r:"int",g:"int",b:"int",a:"int"});case"uvec2":return A({x:"uint",y:"uint",r:"uint",g:"uint"});case"uvec3":return A({x:"uint",y:"uint",z:"uint",r:"uint",g:"uint",b:"uint"});case"uvec4":return A({x:"uint",y:"uint",z:"uint",w:"uint",r:"uint",g:"uint",b:"uint",a:"uint"});default:throw new Error(`Invalid vector type: ${t}`)}}class ea extends ${constructor({vector:A}){const s={vector:V(A)},n=kI(s.vector);super({inTypes:s,outTypes:n,inputs:{vector:A}}),this.statements=({inputs:i,outputs:r})=>{const{x:a,y:o,z:c,w:l,r:g,g:I,b:h,a:B}=r,{vector:C}=i;return[a?`${a} = ${C}.x;`:null,o?`${o} = ${C}.y;`:null,c?`${c} = ${C}.z;`:null,l?`${l} = ${C}.w;`:null,g?`${g} = ${C}.r;`:null,I?`${I} = ${C}.g;`:null,h?`${h} = ${C}.b;`:null,B?`${B} = ${C}.a;`:null].filter(Boolean)}}}class sa extends ${constructor({vector:A,vectorType:e,x:s,y:n,z:i,w:r,r:a,g:o,b:c,a:l}){if(!A&&!e)throw new Error("Either vector or vectorType must be provided");const g=e??V(A),I=Js(g),h=_s(g),B={vector:g,x:I,y:I,r:I,g:I},C={vector:A,x:s,y:n,r:a,g:o};h>=3&&(Object.assign(B,{z:I,b:I}),Object.assign(C,{z:i,b:c})),h>=4&&(Object.assign(B,{w:I,a:I}),Object.assign(C,{w:r,a:l})),super({inTypes:B,outTypes:{vector:g},inputs:C}),this.statements=({inputs:Q,outputs:E})=>{const{vector:f}=E,{vector:p,x:d,y:w,z:D,w:x,r:y,g:m,b:N,a:M}=Q,S=[`${f}.x = ${d??y??(p?`${p}.x`:_t(I))};`,`${f}.y = ${w??m??(p?`${p}.y`:_t(I))};`];return h>=3&&S.push(`${f}.z = ${D??N??(p?`${p}.z`:_t(I))};`),h>=4&&S.push(`${f}.w = ${x??M??(p?`${p}.w`:_t(I))};`),S}}dynoOut(){return new K(this,"vector")}}function NI(t,A){let e=null;if(Ae(t)?e=A.length===1?"float":A.length===2?"vec2":A.length===3?"vec3":A.length===4?"vec4":null:QA(t)?e=A.length===1?"int":A.length===2?"ivec2":A.length===3?"ivec3":A.length===4?"ivec4":null:EA(t)&&(e=A.length===1?"uint":A.length===2?"uvec2":A.length===3?"uvec3":A.length===4?"uvec4":null),e==null)throw new Error(`Invalid swizzle: ${A}`);return e}class na extends v{constructor({vector:A,select:e}){super({a:A,outKey:"swizzle",outTypeFunc:s=>NI(s,e)}),this.statements=({inputs:s,outputs:n})=>[`${n.swizzle} = ${s.a}.${e};`]}}const TI=(t,A,e)=>new la({index:t,from:A,to:e}),UI=t=>new Gt({value:t}),GI=t=>new UA({state:t}),RI=t=>new GA({state:t}),ia=t=>new Ia({value:t}),ra=t=>new ua({value:t}),aa=t=>new ha({value:t}),oa=t=>new Ca({value:t}),YI=t=>new Ba({value:t}),JI=t=>new Qa({value:t}),ga=t=>new Ea({value:t}),He=t=>new fa({value:t}),ca=(t,A,e)=>new pa({z:t,zNear:A,zFar:e}).outputs.depth;class la extends ${constructor({from:A,to:e,index:s}){super({inTypes:{from:"int",to:"int",index:"int"},outTypes:{index:"int"},inputs:{from:A,to:e,index:s},statements:({inputs:n,outputs:i})=>[`${i.index} = ${n.index} - ${n.from} + ${n.to};`]})}dynoOut(){return new K(this,"index")}}class UA extends ${constructor({state:A}){const e=V(A);super({inTypes:{state:e},outTypes:{state:"uint"},inputs:{state:A},globals:()=>[hA(`
79
79
  uint pcg_next(uint state) {
80
80
  return state * 747796405u + 2891336453u;
81
81
  }
82
- `)],statements:({inputs:s,outputs:n})=>{const i=e==="uint"?`${s.state}`:e==="int"?`uint(${s.state})`:`floatBitsToUint(${s.state})`;return[`${n.state} = pcg_next(${i});`]}})}dynoOut(){return new K(this,"state")}}class GA extends V{constructor({state:A}){super({inTypes:{state:"uint"},outTypes:{hash:"uint"},inputs:{state:A},globals:()=>[hA(`
82
+ `)],statements:({inputs:s,outputs:n})=>{const i=e==="uint"?`${s.state}`:e==="int"?`uint(${s.state})`:`floatBitsToUint(${s.state})`;return[`${n.state} = pcg_next(${i});`]}})}dynoOut(){return new K(this,"state")}}class GA extends ${constructor({state:A}){super({inTypes:{state:"uint"},outTypes:{hash:"uint"},inputs:{state:A},globals:()=>[hA(`
83
83
  uint pcg_hash(uint state) {
84
84
  uint hash = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u;
85
85
  return (hash >> 22u) ^ hash;
86
86
  }
87
- `)],statements:({inputs:e,outputs:s})=>[`${s.hash} = pcg_hash(${e.state});`]})}dynoOut(){return new K(this,"hash")}}class Gt extends V{constructor({value:A}){const e=$(A),s=_s(e);super({inTypes:{value:e},outTypes:{state:"uint"},inputs:{value:A},globals:()=>[hA(`
87
+ `)],statements:({inputs:e,outputs:s})=>[`${s.hash} = pcg_hash(${e.state});`]})}dynoOut(){return new K(this,"hash")}}class Gt extends ${constructor({value:A}){const e=V(A),s=Ls(e);super({inTypes:{value:e},outTypes:{state:"uint"},inputs:{value:A},globals:()=>[hA(`
88
88
  uint pcg_mix(uint value) {
89
89
  return value;
90
90
  }
@@ -97,7 +97,7 @@
97
97
  uint pcg_mix(uvec4 value) {
98
98
  return value.x + 0x9e3779b9u * value.y + 0x85ebca6bu * value.z + 0xc2b2ae35u * value.w;
99
99
  }
100
- `)],statements:({inputs:n,outputs:i})=>{const r=EA(e)?`${n.value}`:QA(e)?`${s}(${n.value})`:`floatBitsToUint(${n.value})`;return[`${s} bits = ${r};`,`${i.state} = pcg_mix(bits);`]}})}dynoOut(){return new K(this,"state")}}class Ia extends VA{constructor({value:A}){super({inTypes:{value:$(A)},outTypes:{hash:"uint"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");let s=new Gt({value:e}).outputs.state;return s=new UA({state:s}).outputs.state,new GA({state:s}).outputs}})}dynoOut(){return new K(this,"hash")}}class ua extends VA{constructor({value:A}){super({inTypes:{value:$(A)},outTypes:{hash:"uvec2"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");let s=new Gt({value:e}).outputs.state;s=new UA({state:s}).outputs.state;const n=new GA({state:s}).outputs.hash;s=new UA({state:s}).outputs.state;const i=new GA({state:s}).outputs.hash;return{hash:KA({vectorType:"uvec2",x:n,y:i})}}})}dynoOut(){return new K(this,"hash")}}class ha extends VA{constructor({value:A}){super({inTypes:{value:$(A)},outTypes:{hash:"uvec3"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");let s=new Gt({value:e}).outputs.state;s=new UA({state:s}).outputs.state;const n=new GA({state:s}).outputs.hash;s=new UA({state:s}).outputs.state;const i=new GA({state:s}).outputs.hash;s=new UA({state:s}).outputs.state;const r=new GA({state:s}).outputs.hash;return{hash:KA({vectorType:"uvec3",x:n,y:i,z:r})}}})}dynoOut(){return new K(this,"hash")}}class Ca extends VA{constructor({value:A}){super({inTypes:{value:$(A)},outTypes:{hash:"uvec4"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");let s=new Gt({value:e}).outputs.state;s=new UA({state:s}).outputs.state;const n=new GA({state:s}).outputs.hash;s=new UA({state:s}).outputs.state;const i=new GA({state:s}).outputs.hash;s=new UA({state:s}).outputs.state;const r=new GA({state:s}).outputs.hash;s=new UA({state:s}).outputs.state;const a=new GA({state:s}).outputs.hash;return{hash:KA({vectorType:"uvec4",x:n,y:i,z:r,w:a})}}})}dynoOut(){return new K(this,"hash")}}class Ba extends VA{constructor({value:A}){super({inTypes:{value:$(A)},outTypes:{hash:"float"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");const s=ia(e);return{hash:rA(er(s),J("float",1/2**32))}}})}dynoOut(){return new K(this,"hash")}}class Qa extends VA{constructor({value:A}){super({inTypes:{value:$(A)},outTypes:{hash:"vec2"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");const s=ra(e);return{hash:rA(sr(s),J("float",1/2**32))}}})}dynoOut(){return new K(this,"hash")}}class Ea extends VA{constructor({value:A}){super({inTypes:{value:$(A)},outTypes:{hash:"vec3"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");const s=aa(e);return{hash:rA(Qt(s),J("float",1/2**32))}}})}dynoOut(){return new K(this,"hash")}}class fa extends VA{constructor({value:A}){super({inTypes:{value:$(A)},outTypes:{hash:"vec4"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");const s=oa(e);return{hash:rA(nr(s),J("float",1/2**32))}}})}dynoOut(){return new K(this,"hash")}}class pa extends V{constructor({z:A,zNear:e,zFar:s}){super({inTypes:{z:"float",zNear:"float",zFar:"float"},outTypes:{depth:"float"},inputs:{z:A,zNear:e,zFar:s},statements:({inputs:n,outputs:i})=>[`float clamped = clamp(${n.z}, ${n.zNear}, ${n.zFar});`,`${i.depth} = (log2(clamped + 1.0) - log2(${n.zNear} + 1.0)) / (log2(${n.zFar} + 1.0) - log2(${n.zNear} + 1.0));`]})}dynoOut(){return new K(this,"depth")}}const da=(t,{scale:A,scales:e,rotate:s,translate:n})=>new wa({position:t,scale:A,scales:e,rotate:s,translate:n}).outputs.position,ya=(t,{scale:A,scales:e,rotate:s})=>new ma({dir:t,scale:A,scales:e,rotate:s}).outputs.dir,LI=(t,{rotate:A})=>new xa({quaternion:t,rotate:A}).outputs.quaternion;class wa extends V{constructor({position:A,scale:e,scales:s,rotate:n,translate:i}){super({inTypes:{position:"vec3",scale:"float",scales:"vec3",rotate:"vec4",translate:"vec3"},outTypes:{position:"vec3"},inputs:{position:A,scale:e,scales:s,rotate:n,translate:i},statements:({inputs:r,outputs:a})=>{const{position:o}=a;if(!o)return[];const{scale:c,scales:l,rotate:g,translate:I}=r;return[`${o} = ${r.position??"vec3(0.0, 0.0, 0.0)"};`,c?`${o} *= ${c};`:null,l?`${o} *= ${l};`:null,g?`${o} = quatVec(${g}, ${o});`:null,I?`${o} += ${I};`:null].filter(Boolean)}})}}class ma extends V{constructor({dir:A,scale:e,scales:s,rotate:n}){super({inTypes:{dir:"vec3",scale:"float",scales:"vec3",rotate:"vec4"},outTypes:{dir:"vec3"},inputs:{dir:A,scale:e,scales:s,rotate:n},statements:({inputs:i,outputs:r})=>{const{dir:a}=r;if(!a)return[];const{scale:o,scales:c,rotate:l}=i;return[`${a} = ${i.dir??"vec3(0.0, 0.0, 0.0)"};`,o?`${a} *= ${o};`:null,c?`${a} *= ${c};`:null,l?`${a} = quatVec(${l}, ${a});`:null].filter(Boolean)}})}}class xa extends V{constructor({quaternion:A,rotate:e}){super({inTypes:{quaternion:"vec4",rotate:"vec4"},outTypes:{quaternion:"vec4"},inputs:{quaternion:A,rotate:e},statements:({inputs:s,outputs:n})=>{const{quaternion:i}=n;return i?[`${i} = ${s.quaternion??"vec4(0.0, 0.0, 0.0, 1.0)"};`,e?`${i} = quatQuat(${s.rotate}, ${i});`:null].filter(Boolean):[]}})}}const _I=()=>{throw new Error("Not implemented")},zI=()=>{throw new Error("Not implemented")},qI=()=>{throw new Error("Not implemented")},HI=()=>{throw new Error("Not implemented")},KI=()=>{throw new Error("Not implemented")},$I=()=>{throw new Error("Not implemented")},VI=(t,A)=>new Sa({texture:t,lod:A}),PI=(t,A,e)=>new Da({texture:t,coord:A,bias:e}),XI=(t,A,e)=>new Ma({texture:t,coord:A,lod:e});class Sa extends V{constructor({texture:A,lod:e}){const s=$(A);super({inTypes:{texture:s,lod:"int"},outTypes:{size:va(s)},inputs:{texture:A,lod:e},statements:({inputs:n,outputs:i})=>[`${i.size} = textureSize(${n.texture}, ${n.lod??"0"});`]})}dynoOut(){return new K(this,"size")}}class Da extends V{constructor({texture:A,coord:e,bias:s}){const n=$(A);super({inTypes:{texture:n,coord:OI(n),bias:"float"},outTypes:{sample:ba(n)},inputs:{texture:A,coord:e,bias:s},statements:({inputs:i,outputs:r})=>[`${r.sample} = texture(${i.texture}, ${i.coord}${i.bias?`, ${i.bias}`:""});`]})}dynoOut(){return new K(this,"sample")}}class Ma extends V{constructor({texture:A,coord:e,lod:s}){const n=$(A);super({inTypes:{texture:n,coord:va(n),lod:"int"},outTypes:{texel:ba(n)},inputs:{texture:A,coord:e,lod:s},statements:({inputs:i,outputs:r})=>[`${r.texel} = texelFetch(${i.texture}, ${i.coord}, ${i.lod??"0"});`]})}dynoOut(){return new K(this,"texel")}}function va(t){switch(t){case"sampler2D":case"usampler2D":case"isampler2D":case"samplerCube":case"usamplerCube":case"isamplerCube":case"sampler2DShadow":case"samplerCubeShadow":return"ivec2";case"sampler3D":case"usampler3D":case"isampler3D":case"sampler2DArray":case"usampler2DArray":case"isampler2DArray":case"sampler2DArrayShadow":return"ivec3";default:throw new Error(`Invalid texture type: ${t}`)}}function OI(t){switch(t){case"sampler2D":case"usampler2D":case"isampler2D":return"vec2";case"sampler3D":case"usampler3D":case"isampler3D":case"samplerCube":case"usamplerCube":case"isamplerCube":case"sampler2DArray":case"usampler2DArray":case"isampler2DArray":case"sampler2DShadow":return"vec3";case"samplerCubeShadow":case"sampler2DArrayShadow":return"vec4";default:throw new Error(`Invalid texture type: ${t}`)}}function ba(t){switch(t){case"sampler2D":case"sampler2DArray":case"sampler3D":case"samplerCube":case"sampler2DShadow":return"vec4";case"usampler2D":case"usampler2DArray":case"usampler3D":case"usamplerCube":return"uvec4";case"isampler2D":case"isampler2DArray":case"isampler3D":case"isamplerCube":return"ivec4";case"samplerCubeShadow":case"sampler2DArrayShadow":return"float";default:throw new Error(`Invalid texture type: ${t}`)}}const WI=t=>new Fa({degrees:t}),jI=t=>new ka({radians:t}),Ke=t=>new Na({radians:t}),ZI=t=>new Ta({radians:t}),Au=t=>new Ua({radians:t}),tu=t=>new Ga({sin:t}),eu=t=>new Ra({cos:t}),su=t=>new Ya({tan:t}),nu=(t,A)=>new Ja({y:t,x:A}),iu=t=>new La({x:t}),ru=t=>new _a({x:t}),au=t=>new za({x:t}),ou=t=>new qa({x:t}),gu=t=>new Ha({x:t}),cu=t=>new Ka({x:t});class Fa extends v{constructor({degrees:A}){super({a:A,outTypeFunc:e=>e,outKey:"radians"}),this.statements=({inputs:e,outputs:s})=>[`${s.radians} = radians(${e.a});`]}}class ka extends v{constructor({radians:A}){super({a:A,outTypeFunc:e=>e,outKey:"degrees"}),this.statements=({inputs:e,outputs:s})=>[`${s.degrees} = degrees(${e.a});`]}}class Na extends v{constructor({radians:A}){super({a:A,outTypeFunc:e=>e,outKey:"sin"}),this.statements=({inputs:e,outputs:s})=>[`${s.sin} = sin(${e.a});`]}}class Ta extends v{constructor({radians:A}){super({a:A,outTypeFunc:e=>e,outKey:"cos"}),this.statements=({inputs:e,outputs:s})=>[`${s.cos} = cos(${e.a});`]}}class Ua extends v{constructor({radians:A}){super({a:A,outTypeFunc:e=>e,outKey:"tan"}),this.statements=({inputs:e,outputs:s})=>[`${s.tan} = tan(${e.a});`]}}class Ga extends v{constructor({sin:A}){super({a:A,outTypeFunc:e=>e,outKey:"asin"}),this.statements=({inputs:e,outputs:s})=>[`${s.asin} = asin(${e.a});`]}}class Ra extends v{constructor({cos:A}){super({a:A,outTypeFunc:e=>e,outKey:"acos"}),this.statements=({inputs:e,outputs:s})=>[`${s.acos} = acos(${e.a});`]}}class Ya extends v{constructor({tan:A}){super({a:A,outTypeFunc:e=>e,outKey:"atan"}),this.statements=({inputs:e,outputs:s})=>[`${s.atan} = atan(${e.a});`]}}class Ja extends tA{constructor({y:A,x:e}){super({a:A,b:e,outTypeFunc:(s,n)=>s,outKey:"atan2"}),this.statements=({inputs:s,outputs:n})=>[`${n.atan2} = atan2(${s.a}, ${s.b});`]}}class La extends v{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"sinh"}),this.statements=({inputs:e,outputs:s})=>[`${s.sinh} = sinh(${e.a});`]}}class _a extends v{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"cosh"}),this.statements=({inputs:e,outputs:s})=>[`${s.cosh} = cosh(${e.a});`]}}class za extends v{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"tanh"}),this.statements=({inputs:e,outputs:s})=>[`${s.tanh} = tanh(${e.a});`]}}class qa extends v{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"asinh"}),this.statements=({inputs:e,outputs:s})=>[`${s.asinh} = asinh(${e.a});`]}}class Ha extends v{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"acosh"}),this.statements=({inputs:e,outputs:s})=>[`${s.acosh} = acosh(${e.a});`]}}class Ka extends v{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"atanh"}),this.statements=({inputs:e,outputs:s})=>[`${s.atanh} = atanh(${e.a});`]}}const lu=Object.freeze(Object.defineProperty({__proto__:null,Abs:Qi,Acos:Ra,Acosh:Ha,Add:gi,All:ji,And:_i,Any:Wi,Asin:Ga,Asinh:qa,Atan:Ya,Atan2:Ja,Atanh:Ka,BVec2:Ir,BVec3:ur,BVec4:hr,BinaryOp:tA,Bool:or,Ceil:pi,Clamp:Ti,Combine:sa,CombineGsplat:Ws,CompMult:Wr,CompXor:tr,Compilation:Hs,Cos:Ta,Cosh:_a,Cross:Hr,Degrees:ka,Determinant:Aa,Distance:zr,Div:Ii,Dot:qr,Dyno:V,DynoBlock:VA,DynoBool:he,DynoBvec2:nn,DynoBvec3:on,DynoBvec4:ln,DynoConst:qs,DynoFloat:Bt,DynoInt:Vt,DynoIsampler2D:Dn,DynoIsampler2DArray:vn,DynoIsampler3D:kn,DynoIsamplerCube:Un,DynoIvec2:an,DynoIvec3:cn,DynoIvec4:un,DynoLiteral:vt,DynoMat2:hn,DynoMat2x2:Cn,DynoMat2x3:Bn,DynoMat2x4:Qn,DynoMat3:En,DynoMat3x2:fn,DynoMat3x3:pn,DynoMat3x4:dn,DynoMat4:yn,DynoMat4x2:wn,DynoMat4x3:mn,DynoMat4x4:xn,DynoOutput:K,DynoProgram:ss,DynoProgramTemplate:ns,DynoRemapIndex:la,DynoSampler2D:Mn,DynoSampler2DArray:bn,DynoSampler2DArrayShadow:Yn,DynoSampler2DShadow:Rn,DynoSampler3D:Nn,DynoSamplerCube:Gn,DynoSamplerCubeShadow:Jn,DynoUint:sn,DynoUniform:k,DynoUsampler2D:Sn,DynoUsampler2DArray:Ht,DynoUsampler3D:Fn,DynoUsamplerCube:Tn,DynoUvec2:rn,DynoUvec3:gn,DynoUvec4:In,DynoValue:it,DynoVec2:qt,DynoVec3:Ft,DynoVec4:Ut,Equal:Xi,Exp:xi,Exp2:Si,ExtendVec:Vr,FaceForward:Pr,Float:lr,FloatBitsToInt:Dr,FloatBitsToUint:Mr,Floor:fi,Fract:wi,GreaterThan:Vi,GreaterThanEqual:Pi,Gsplat:AA,GsplatNormal:Zs,Hash:Ia,Hash2:ua,Hash3:ha,Hash4:Ca,HashFloat:Ba,HashVec2:Qa,HashVec3:Ea,HashVec4:fa,IMod:ui,IVec2:Cr,IVec3:Br,IVec4:Qr,Int:gr,IntBitsToFloat:vr,Inverse:ta,InverseSqrt:Fi,IsInf:Ji,IsNan:Yi,Length:_r,LessThan:Ki,LessThanEqual:$i,Log:Di,Log2:Mi,Mat2:mr,Mat3:xr,Mat4:Sr,Max:Ni,Min:ki,Mix:Ui,Mod:hi,Modf:Ci,Mul:li,Neg:Bi,Normalize:Kr,NormalizedDepth:pa,Not:Hi,NotEqual:Oi,NumPackedSplats:$s,Or:zi,Outer:jr,OutputPackedSplat:en,OutputRgba8:ts,PackHalf2x16:Ur,PackSnorm2x16:Fr,PackUnorm2x16:Nr,PcgHash:GA,PcgMix:Gt,PcgNext:UA,Pow:mi,ProjectH:$r,Radians:Fa,ReadPackedSplat:Ps,ReadPackedSplatRange:Xs,ReflectVec:Xr,RefractVec:Or,Round:yi,Select:Zi,Sign:Ei,SimpleCast:cA,Sin:Na,Sinh:La,Smoothstep:Ri,Split:ea,SplitGsplat:Os,Sqr:vi,Sqrt:bi,Step:Gi,Sub:ci,Swizzle:na,TPackedSplats:se,Tan:Ua,Tanh:za,TexelFetch:Ma,Texture:Da,TextureSize:Sa,TransformDir:ma,TransformGsplat:An,TransformPosition:wa,TransformQuaternion:xa,Transpose:Zr,TrinaryOp:yt,Trunc:di,UVec2:Er,UVec3:fr,UVec4:pr,Uint:cr,UintBitsToFloat:br,UintToRgba8:Rr,UnaryOp:v,UnpackHalf2x16:Gr,UnpackSnorm2x16:kr,UnpackUnorm2x16:Tr,Vec2:dr,Vec3:yr,Vec4:wr,Xor:qi,abs:ul,acos:eu,acosh:gu,add:BA,all:ql,and:Nl,any:zl,arrayIndex:KI,arrayLength:$I,asin:tu,asinh:ou,atan:su,atan2:nu,atanh:cu,bool:Vl,bvec2:Ol,bvec3:Wl,bvec4:jl,ceil:Bl,clamp:Ml,combine:KA,combineGsplat:rt,comment:HI,compMult:wI,compXor:Hl,cos:ZI,cosh:ru,cross:QI,defineGsplat:FA,defineGsplatNormal:js,definePackedSplats:ye,degrees:jI,determinant:SI,distance:BI,div:ce,dot:Yr,dyno:ee,dynoBlock:bA,dynoBool:dg,dynoBvec2:mg,dynoBvec3:Mg,dynoBvec4:Fg,dynoConst:J,dynoDeclare:Ze,dynoFloat:zA,dynoFor:qI,dynoIf:_I,dynoInt:wg,dynoIsampler2D:Pg,dynoIsampler2DArray:Wg,dynoIsampler3D:Ac,dynoIsamplerCube:sc,dynoIvec2:Sg,dynoIvec3:bg,dynoIvec4:Ng,dynoLiteral:ue,dynoMat2:Ug,dynoMat2x2:Gg,dynoMat2x3:Rg,dynoMat2x4:Yg,dynoMat3:Jg,dynoMat3x2:Lg,dynoMat3x3:_g,dynoMat3x4:zg,dynoMat4:qg,dynoMat4x2:Hg,dynoMat4x3:Kg,dynoMat4x4:$g,dynoSampler2D:Xg,dynoSampler2DArray:jg,dynoSampler2DArrayShadow:rc,dynoSampler2DShadow:ic,dynoSampler3D:tc,dynoSamplerCube:nc,dynoSamplerCubeShadow:ac,dynoSwitch:zI,dynoUint:yg,dynoUsampler2D:Vg,dynoUsampler2DArray:Og,dynoUsampler3D:Zg,dynoUsamplerCube:ec,dynoUvec2:xg,dynoUvec3:vg,dynoUvec4:kg,dynoVec2:Dg,dynoVec3:et,dynoVec4:Tg,equal:Ll,exp:pl,exp2:dl,extendVec:Lr,faceforward:EI,float:er,floatBitsToInt:ir,floatBitsToUint:rr,floor:Cl,fract:le,greaterThan:Jl,greaterThanEqual:Li,gsplatNormal:_e,hash:ia,hash2:ra,hash3:aa,hash4:oa,hashFloat:YI,hashVec2:JI,hashVec3:ga,hashVec4:He,imod:ze,int:Pl,intBitsToFloat:oI,inverse:DI,inversesqrt:Sl,isAllFloatType:ot,isBoolType:pt,isFloatType:Ae,isInf:kl,isIntType:QA,isMat2:gt,isMat3:ct,isMat4:lt,isMatFloatType:Ys,isNan:Fl,isScalarType:dt,isUintType:EA,isVector2Type:Nt,isVector3Type:Tt,isVector4Type:te,isVectorType:ug,ivec2:Zl,ivec3:AI,ivec4:tI,length:CI,lessThan:Rl,lessThanEqual:Yl,literalNegOne:Qg,literalOne:Bg,literalZero:Lt,log:yl,log2:wl,mat2:iI,mat3:rI,mat4:aI,max:ai,min:Dl,mix:oi,mod:ri,modf:Il,mul:rA,neg:rs,normalize:Jr,normalizedDepth:ca,not:Gl,notEqual:_l,numPackedSplats:Eg,numberAsFloat:q,numberAsInt:aA,numberAsUint:oA,or:Tl,outer:mI,outputPackedSplat:tn,outputRgba8:fg,packHalf2x16:ar,packSnorm2x16:cI,packUnorm2x16:II,pcgHash:RI,pcgMix:UI,pcgNext:GI,pow:fl,projectH:dI,radians:WI,readPackedSplat:bt,readPackedSplatRange:Ks,reflectVec:fI,refractVec:pI,remapIndex:TI,round:El,sameSizeIvec:Cg,sameSizeUvec:_s,sameSizeVec:hg,select:as,sign:hl,sin:Ke,sinh:iu,smoothstep:bl,split:Et,splitGsplat:Ct,sqr:ml,sqrt:xl,step:vl,sub:ft,swizzle:yI,tan:Au,tanh:au,texelFetch:XI,texture:PI,textureSize:VI,transformDir:ya,transformGsplat:As,transformPos:da,transformQuat:LI,transpose:xI,trunc:Ql,typeLiteral:zs,uint:Xl,uintBitsToFloat:gI,uintToRgba8:qe,uniform:pg,unindent:hA,unindentLines:RA,unpackHalf2x16:hI,unpackSnorm2x16:lI,unpackUnorm2x16:uI,uvec2:eI,uvec3:sI,uvec4:nI,valType:$,vec2:sr,vec3:Qt,vec4:nr,vectorDim:Ls,vectorElementType:Js,xor:Ul},Symbol.toStringTag,{value:"Module"}));var Iu=`precision highp float;
100
+ `)],statements:({inputs:n,outputs:i})=>{const r=EA(e)?`${n.value}`:QA(e)?`${s}(${n.value})`:`floatBitsToUint(${n.value})`;return[`${s} bits = ${r};`,`${i.state} = pcg_mix(bits);`]}})}dynoOut(){return new K(this,"state")}}class Ia extends $A{constructor({value:A}){super({inTypes:{value:V(A)},outTypes:{hash:"uint"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");let s=new Gt({value:e}).outputs.state;return s=new UA({state:s}).outputs.state,new GA({state:s}).outputs}})}dynoOut(){return new K(this,"hash")}}class ua extends $A{constructor({value:A}){super({inTypes:{value:V(A)},outTypes:{hash:"uvec2"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");let s=new Gt({value:e}).outputs.state;s=new UA({state:s}).outputs.state;const n=new GA({state:s}).outputs.hash;s=new UA({state:s}).outputs.state;const i=new GA({state:s}).outputs.hash;return{hash:KA({vectorType:"uvec2",x:n,y:i})}}})}dynoOut(){return new K(this,"hash")}}class ha extends $A{constructor({value:A}){super({inTypes:{value:V(A)},outTypes:{hash:"uvec3"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");let s=new Gt({value:e}).outputs.state;s=new UA({state:s}).outputs.state;const n=new GA({state:s}).outputs.hash;s=new UA({state:s}).outputs.state;const i=new GA({state:s}).outputs.hash;s=new UA({state:s}).outputs.state;const r=new GA({state:s}).outputs.hash;return{hash:KA({vectorType:"uvec3",x:n,y:i,z:r})}}})}dynoOut(){return new K(this,"hash")}}class Ca extends $A{constructor({value:A}){super({inTypes:{value:V(A)},outTypes:{hash:"uvec4"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");let s=new Gt({value:e}).outputs.state;s=new UA({state:s}).outputs.state;const n=new GA({state:s}).outputs.hash;s=new UA({state:s}).outputs.state;const i=new GA({state:s}).outputs.hash;s=new UA({state:s}).outputs.state;const r=new GA({state:s}).outputs.hash;s=new UA({state:s}).outputs.state;const a=new GA({state:s}).outputs.hash;return{hash:KA({vectorType:"uvec4",x:n,y:i,z:r,w:a})}}})}dynoOut(){return new K(this,"hash")}}class Ba extends $A{constructor({value:A}){super({inTypes:{value:V(A)},outTypes:{hash:"float"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");const s=ia(e);return{hash:rA(er(s),J("float",1/2**32))}}})}dynoOut(){return new K(this,"hash")}}class Qa extends $A{constructor({value:A}){super({inTypes:{value:V(A)},outTypes:{hash:"vec2"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");const s=ra(e);return{hash:rA(sr(s),J("float",1/2**32))}}})}dynoOut(){return new K(this,"hash")}}class Ea extends $A{constructor({value:A}){super({inTypes:{value:V(A)},outTypes:{hash:"vec3"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");const s=aa(e);return{hash:rA(Qt(s),J("float",1/2**32))}}})}dynoOut(){return new K(this,"hash")}}class fa extends $A{constructor({value:A}){super({inTypes:{value:V(A)},outTypes:{hash:"vec4"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");const s=oa(e);return{hash:rA(nr(s),J("float",1/2**32))}}})}dynoOut(){return new K(this,"hash")}}class pa extends ${constructor({z:A,zNear:e,zFar:s}){super({inTypes:{z:"float",zNear:"float",zFar:"float"},outTypes:{depth:"float"},inputs:{z:A,zNear:e,zFar:s},statements:({inputs:n,outputs:i})=>[`float clamped = clamp(${n.z}, ${n.zNear}, ${n.zFar});`,`${i.depth} = (log2(clamped + 1.0) - log2(${n.zNear} + 1.0)) / (log2(${n.zFar} + 1.0) - log2(${n.zNear} + 1.0));`]})}dynoOut(){return new K(this,"depth")}}const da=(t,{scale:A,scales:e,rotate:s,translate:n})=>new wa({position:t,scale:A,scales:e,rotate:s,translate:n}).outputs.position,ya=(t,{scale:A,scales:e,rotate:s})=>new ma({dir:t,scale:A,scales:e,rotate:s}).outputs.dir,_I=(t,{rotate:A})=>new xa({quaternion:t,rotate:A}).outputs.quaternion;class wa extends ${constructor({position:A,scale:e,scales:s,rotate:n,translate:i}){super({inTypes:{position:"vec3",scale:"float",scales:"vec3",rotate:"vec4",translate:"vec3"},outTypes:{position:"vec3"},inputs:{position:A,scale:e,scales:s,rotate:n,translate:i},statements:({inputs:r,outputs:a})=>{const{position:o}=a;if(!o)return[];const{scale:c,scales:l,rotate:g,translate:I}=r;return[`${o} = ${r.position??"vec3(0.0, 0.0, 0.0)"};`,c?`${o} *= ${c};`:null,l?`${o} *= ${l};`:null,g?`${o} = quatVec(${g}, ${o});`:null,I?`${o} += ${I};`:null].filter(Boolean)}})}}class ma extends ${constructor({dir:A,scale:e,scales:s,rotate:n}){super({inTypes:{dir:"vec3",scale:"float",scales:"vec3",rotate:"vec4"},outTypes:{dir:"vec3"},inputs:{dir:A,scale:e,scales:s,rotate:n},statements:({inputs:i,outputs:r})=>{const{dir:a}=r;if(!a)return[];const{scale:o,scales:c,rotate:l}=i;return[`${a} = ${i.dir??"vec3(0.0, 0.0, 0.0)"};`,o?`${a} *= ${o};`:null,c?`${a} *= ${c};`:null,l?`${a} = quatVec(${l}, ${a});`:null].filter(Boolean)}})}}class xa extends ${constructor({quaternion:A,rotate:e}){super({inTypes:{quaternion:"vec4",rotate:"vec4"},outTypes:{quaternion:"vec4"},inputs:{quaternion:A,rotate:e},statements:({inputs:s,outputs:n})=>{const{quaternion:i}=n;return i?[`${i} = ${s.quaternion??"vec4(0.0, 0.0, 0.0, 1.0)"};`,e?`${i} = quatQuat(${s.rotate}, ${i});`:null].filter(Boolean):[]}})}}const LI=()=>{throw new Error("Not implemented")},zI=()=>{throw new Error("Not implemented")},qI=()=>{throw new Error("Not implemented")},HI=()=>{throw new Error("Not implemented")},KI=()=>{throw new Error("Not implemented")},VI=()=>{throw new Error("Not implemented")},$I=(t,A)=>new Sa({texture:t,lod:A}),PI=(t,A,e)=>new Da({texture:t,coord:A,bias:e}),XI=(t,A,e)=>new Ma({texture:t,coord:A,lod:e});class Sa extends ${constructor({texture:A,lod:e}){const s=V(A);super({inTypes:{texture:s,lod:"int"},outTypes:{size:va(s)},inputs:{texture:A,lod:e},statements:({inputs:n,outputs:i})=>[`${i.size} = textureSize(${n.texture}, ${n.lod??"0"});`]})}dynoOut(){return new K(this,"size")}}class Da extends ${constructor({texture:A,coord:e,bias:s}){const n=V(A);super({inTypes:{texture:n,coord:OI(n),bias:"float"},outTypes:{sample:ba(n)},inputs:{texture:A,coord:e,bias:s},statements:({inputs:i,outputs:r})=>[`${r.sample} = texture(${i.texture}, ${i.coord}${i.bias?`, ${i.bias}`:""});`]})}dynoOut(){return new K(this,"sample")}}class Ma extends ${constructor({texture:A,coord:e,lod:s}){const n=V(A);super({inTypes:{texture:n,coord:va(n),lod:"int"},outTypes:{texel:ba(n)},inputs:{texture:A,coord:e,lod:s},statements:({inputs:i,outputs:r})=>[`${r.texel} = texelFetch(${i.texture}, ${i.coord}, ${i.lod??"0"});`]})}dynoOut(){return new K(this,"texel")}}function va(t){switch(t){case"sampler2D":case"usampler2D":case"isampler2D":case"samplerCube":case"usamplerCube":case"isamplerCube":case"sampler2DShadow":case"samplerCubeShadow":return"ivec2";case"sampler3D":case"usampler3D":case"isampler3D":case"sampler2DArray":case"usampler2DArray":case"isampler2DArray":case"sampler2DArrayShadow":return"ivec3";default:throw new Error(`Invalid texture type: ${t}`)}}function OI(t){switch(t){case"sampler2D":case"usampler2D":case"isampler2D":return"vec2";case"sampler3D":case"usampler3D":case"isampler3D":case"samplerCube":case"usamplerCube":case"isamplerCube":case"sampler2DArray":case"usampler2DArray":case"isampler2DArray":case"sampler2DShadow":return"vec3";case"samplerCubeShadow":case"sampler2DArrayShadow":return"vec4";default:throw new Error(`Invalid texture type: ${t}`)}}function ba(t){switch(t){case"sampler2D":case"sampler2DArray":case"sampler3D":case"samplerCube":case"sampler2DShadow":return"vec4";case"usampler2D":case"usampler2DArray":case"usampler3D":case"usamplerCube":return"uvec4";case"isampler2D":case"isampler2DArray":case"isampler3D":case"isamplerCube":return"ivec4";case"samplerCubeShadow":case"sampler2DArrayShadow":return"float";default:throw new Error(`Invalid texture type: ${t}`)}}const WI=t=>new Fa({degrees:t}),jI=t=>new ka({radians:t}),Ke=t=>new Na({radians:t}),ZI=t=>new Ta({radians:t}),Au=t=>new Ua({radians:t}),tu=t=>new Ga({sin:t}),eu=t=>new Ra({cos:t}),su=t=>new Ya({tan:t}),nu=(t,A)=>new Ja({y:t,x:A}),iu=t=>new _a({x:t}),ru=t=>new La({x:t}),au=t=>new za({x:t}),ou=t=>new qa({x:t}),gu=t=>new Ha({x:t}),cu=t=>new Ka({x:t});class Fa extends v{constructor({degrees:A}){super({a:A,outTypeFunc:e=>e,outKey:"radians"}),this.statements=({inputs:e,outputs:s})=>[`${s.radians} = radians(${e.a});`]}}class ka extends v{constructor({radians:A}){super({a:A,outTypeFunc:e=>e,outKey:"degrees"}),this.statements=({inputs:e,outputs:s})=>[`${s.degrees} = degrees(${e.a});`]}}class Na extends v{constructor({radians:A}){super({a:A,outTypeFunc:e=>e,outKey:"sin"}),this.statements=({inputs:e,outputs:s})=>[`${s.sin} = sin(${e.a});`]}}class Ta extends v{constructor({radians:A}){super({a:A,outTypeFunc:e=>e,outKey:"cos"}),this.statements=({inputs:e,outputs:s})=>[`${s.cos} = cos(${e.a});`]}}class Ua extends v{constructor({radians:A}){super({a:A,outTypeFunc:e=>e,outKey:"tan"}),this.statements=({inputs:e,outputs:s})=>[`${s.tan} = tan(${e.a});`]}}class Ga extends v{constructor({sin:A}){super({a:A,outTypeFunc:e=>e,outKey:"asin"}),this.statements=({inputs:e,outputs:s})=>[`${s.asin} = asin(${e.a});`]}}class Ra extends v{constructor({cos:A}){super({a:A,outTypeFunc:e=>e,outKey:"acos"}),this.statements=({inputs:e,outputs:s})=>[`${s.acos} = acos(${e.a});`]}}class Ya extends v{constructor({tan:A}){super({a:A,outTypeFunc:e=>e,outKey:"atan"}),this.statements=({inputs:e,outputs:s})=>[`${s.atan} = atan(${e.a});`]}}class Ja extends tA{constructor({y:A,x:e}){super({a:A,b:e,outTypeFunc:(s,n)=>s,outKey:"atan2"}),this.statements=({inputs:s,outputs:n})=>[`${n.atan2} = atan2(${s.a}, ${s.b});`]}}class _a extends v{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"sinh"}),this.statements=({inputs:e,outputs:s})=>[`${s.sinh} = sinh(${e.a});`]}}class La extends v{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"cosh"}),this.statements=({inputs:e,outputs:s})=>[`${s.cosh} = cosh(${e.a});`]}}class za extends v{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"tanh"}),this.statements=({inputs:e,outputs:s})=>[`${s.tanh} = tanh(${e.a});`]}}class qa extends v{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"asinh"}),this.statements=({inputs:e,outputs:s})=>[`${s.asinh} = asinh(${e.a});`]}}class Ha extends v{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"acosh"}),this.statements=({inputs:e,outputs:s})=>[`${s.acosh} = acosh(${e.a});`]}}class Ka extends v{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"atanh"}),this.statements=({inputs:e,outputs:s})=>[`${s.atanh} = atanh(${e.a});`]}}const lu=Object.freeze(Object.defineProperty({__proto__:null,Abs:Qi,Acos:Ra,Acosh:Ha,Add:gi,All:ji,And:Li,Any:Wi,Asin:Ga,Asinh:qa,Atan:Ya,Atan2:Ja,Atanh:Ka,BVec2:Ir,BVec3:ur,BVec4:hr,BinaryOp:tA,Bool:or,Ceil:pi,Clamp:Ti,Combine:sa,CombineGsplat:Ws,CompMult:Wr,CompXor:tr,Compilation:Hs,Cos:Ta,Cosh:La,Cross:Hr,Degrees:ka,Determinant:Aa,Distance:zr,Div:Ii,Dot:qr,Dyno:$,DynoBlock:$A,DynoBool:he,DynoBvec2:nn,DynoBvec3:on,DynoBvec4:ln,DynoConst:qs,DynoFloat:Bt,DynoInt:$t,DynoIsampler2D:Dn,DynoIsampler2DArray:vn,DynoIsampler3D:kn,DynoIsamplerCube:Un,DynoIvec2:an,DynoIvec3:cn,DynoIvec4:un,DynoLiteral:vt,DynoMat2:hn,DynoMat2x2:Cn,DynoMat2x3:Bn,DynoMat2x4:Qn,DynoMat3:En,DynoMat3x2:fn,DynoMat3x3:pn,DynoMat3x4:dn,DynoMat4:yn,DynoMat4x2:wn,DynoMat4x3:mn,DynoMat4x4:xn,DynoOutput:K,DynoProgram:ss,DynoProgramTemplate:ns,DynoRemapIndex:la,DynoSampler2D:Mn,DynoSampler2DArray:bn,DynoSampler2DArrayShadow:Yn,DynoSampler2DShadow:Rn,DynoSampler3D:Nn,DynoSamplerCube:Gn,DynoSamplerCubeShadow:Jn,DynoUint:sn,DynoUniform:k,DynoUsampler2D:Sn,DynoUsampler2DArray:Ht,DynoUsampler3D:Fn,DynoUsamplerCube:Tn,DynoUvec2:rn,DynoUvec3:gn,DynoUvec4:In,DynoValue:it,DynoVec2:qt,DynoVec3:Ft,DynoVec4:Ut,Equal:Xi,Exp:xi,Exp2:Si,ExtendVec:$r,FaceForward:Pr,Float:lr,FloatBitsToInt:Dr,FloatBitsToUint:Mr,Floor:fi,Fract:wi,GreaterThan:$i,GreaterThanEqual:Pi,Gsplat:AA,GsplatNormal:Zs,Hash:Ia,Hash2:ua,Hash3:ha,Hash4:Ca,HashFloat:Ba,HashVec2:Qa,HashVec3:Ea,HashVec4:fa,IMod:ui,IVec2:Cr,IVec3:Br,IVec4:Qr,Int:gr,IntBitsToFloat:vr,Inverse:ta,InverseSqrt:Fi,IsInf:Ji,IsNan:Yi,Length:Lr,LessThan:Ki,LessThanEqual:Vi,Log:Di,Log2:Mi,Mat2:mr,Mat3:xr,Mat4:Sr,Max:Ni,Min:ki,Mix:Ui,Mod:hi,Modf:Ci,Mul:li,Neg:Bi,Normalize:Kr,NormalizedDepth:pa,Not:Hi,NotEqual:Oi,NumPackedSplats:Vs,Or:zi,Outer:jr,OutputPackedSplat:en,OutputRgba8:ts,PackHalf2x16:Ur,PackSnorm2x16:Fr,PackUnorm2x16:Nr,PcgHash:GA,PcgMix:Gt,PcgNext:UA,Pow:mi,ProjectH:Vr,Radians:Fa,ReadPackedSplat:Ps,ReadPackedSplatRange:Xs,ReflectVec:Xr,RefractVec:Or,Round:yi,Select:Zi,Sign:Ei,SimpleCast:cA,Sin:Na,Sinh:_a,Smoothstep:Ri,Split:ea,SplitGsplat:Os,Sqr:vi,Sqrt:bi,Step:Gi,Sub:ci,Swizzle:na,TPackedSplats:se,Tan:Ua,Tanh:za,TexelFetch:Ma,Texture:Da,TextureSize:Sa,TransformDir:ma,TransformGsplat:An,TransformPosition:wa,TransformQuaternion:xa,Transpose:Zr,TrinaryOp:yt,Trunc:di,UVec2:Er,UVec3:fr,UVec4:pr,Uint:cr,UintBitsToFloat:br,UintToRgba8:Rr,UnaryOp:v,UnpackHalf2x16:Gr,UnpackSnorm2x16:kr,UnpackUnorm2x16:Tr,Vec2:dr,Vec3:yr,Vec4:wr,Xor:qi,abs:ul,acos:eu,acosh:gu,add:BA,all:ql,and:Nl,any:zl,arrayIndex:KI,arrayLength:VI,asin:tu,asinh:ou,atan:su,atan2:nu,atanh:cu,bool:$l,bvec2:Ol,bvec3:Wl,bvec4:jl,ceil:Bl,clamp:Ml,combine:KA,combineGsplat:rt,comment:HI,compMult:wI,compXor:Hl,cos:ZI,cosh:ru,cross:QI,defineGsplat:FA,defineGsplatNormal:js,definePackedSplats:ye,degrees:jI,determinant:SI,distance:BI,div:ce,dot:Yr,dyno:ee,dynoBlock:bA,dynoBool:dg,dynoBvec2:mg,dynoBvec3:Mg,dynoBvec4:Fg,dynoConst:J,dynoDeclare:Ze,dynoFloat:zA,dynoFor:qI,dynoIf:LI,dynoInt:wg,dynoIsampler2D:Pg,dynoIsampler2DArray:Wg,dynoIsampler3D:Ac,dynoIsamplerCube:sc,dynoIvec2:Sg,dynoIvec3:bg,dynoIvec4:Ng,dynoLiteral:ue,dynoMat2:Ug,dynoMat2x2:Gg,dynoMat2x3:Rg,dynoMat2x4:Yg,dynoMat3:Jg,dynoMat3x2:_g,dynoMat3x3:Lg,dynoMat3x4:zg,dynoMat4:qg,dynoMat4x2:Hg,dynoMat4x3:Kg,dynoMat4x4:Vg,dynoSampler2D:Xg,dynoSampler2DArray:jg,dynoSampler2DArrayShadow:rc,dynoSampler2DShadow:ic,dynoSampler3D:tc,dynoSamplerCube:nc,dynoSamplerCubeShadow:ac,dynoSwitch:zI,dynoUint:yg,dynoUsampler2D:$g,dynoUsampler2DArray:Og,dynoUsampler3D:Zg,dynoUsamplerCube:ec,dynoUvec2:xg,dynoUvec3:vg,dynoUvec4:kg,dynoVec2:Dg,dynoVec3:et,dynoVec4:Tg,equal:_l,exp:pl,exp2:dl,extendVec:_r,faceforward:EI,float:er,floatBitsToInt:ir,floatBitsToUint:rr,floor:Cl,fract:le,greaterThan:Jl,greaterThanEqual:_i,gsplatNormal:Le,hash:ia,hash2:ra,hash3:aa,hash4:oa,hashFloat:YI,hashVec2:JI,hashVec3:ga,hashVec4:He,imod:ze,int:Pl,intBitsToFloat:oI,inverse:DI,inversesqrt:Sl,isAllFloatType:ot,isBoolType:pt,isFloatType:Ae,isInf:kl,isIntType:QA,isMat2:gt,isMat3:ct,isMat4:lt,isMatFloatType:Ys,isNan:Fl,isScalarType:dt,isUintType:EA,isVector2Type:Nt,isVector3Type:Tt,isVector4Type:te,isVectorType:ug,ivec2:Zl,ivec3:AI,ivec4:tI,length:CI,lessThan:Rl,lessThanEqual:Yl,literalNegOne:Qg,literalOne:Bg,literalZero:_t,log:yl,log2:wl,mat2:iI,mat3:rI,mat4:aI,max:ai,min:Dl,mix:oi,mod:ri,modf:Il,mul:rA,neg:rs,normalize:Jr,normalizedDepth:ca,not:Gl,notEqual:Ll,numPackedSplats:Eg,numberAsFloat:q,numberAsInt:aA,numberAsUint:oA,or:Tl,outer:mI,outputPackedSplat:tn,outputRgba8:fg,packHalf2x16:ar,packSnorm2x16:cI,packUnorm2x16:II,pcgHash:RI,pcgMix:UI,pcgNext:GI,pow:fl,projectH:dI,radians:WI,readPackedSplat:bt,readPackedSplatRange:Ks,reflectVec:fI,refractVec:pI,remapIndex:TI,round:El,sameSizeIvec:Cg,sameSizeUvec:Ls,sameSizeVec:hg,select:as,sign:hl,sin:Ke,sinh:iu,smoothstep:bl,split:Et,splitGsplat:Ct,sqr:ml,sqrt:xl,step:vl,sub:ft,swizzle:yI,tan:Au,tanh:au,texelFetch:XI,texture:PI,textureSize:$I,transformDir:ya,transformGsplat:As,transformPos:da,transformQuat:_I,transpose:xI,trunc:Ql,typeLiteral:zs,uint:Xl,uintBitsToFloat:gI,uintToRgba8:qe,uniform:pg,unindent:hA,unindentLines:RA,unpackHalf2x16:hI,unpackSnorm2x16:lI,unpackUnorm2x16:uI,uvec2:eI,uvec3:sI,uvec4:nI,valType:V,vec2:sr,vec3:Qt,vec4:nr,vectorDim:_s,vectorElementType:Js,xor:Ul},Symbol.toStringTag,{value:"Module"}));var Iu=`precision highp float;
101
101
  precision highp int;
102
102
  precision highp sampler2D;
103
103
  precision highp usampler2D;
@@ -132,18 +132,18 @@ void main() {
132
132
  } else {
133
133
  target = vec4(0.0, 0.0, 0.0, 0.0);
134
134
  }
135
- }`;const TA=class TA{constructor({renderer:A}={}){this.renderer=A,this.capacity=0,this.count=0}dispose(){this.target&&(this.target.dispose(),this.target=void 0)}ensureBuffer(A,e){const n=Math.ceil(Math.max(1,A)/X)*X*4;if(e.byteLength>=n)return e;const i=new ArrayBuffer(n);if(e instanceof ArrayBuffer)return i;const r=e.constructor;return new r(i)}ensureCapacity(A){const{width:e,height:s,depth:n,maxSplats:i}=xA(A);(!this.target||i>this.capacity)&&(this.dispose(),this.capacity=i,this.target=new u.WebGLArrayRenderTarget(e,s,n,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:u.NearestFilter,minFilter:u.NearestFilter}),this.target.texture.format=u.RGBAFormat,this.target.texture.type=u.UnsignedByteType,this.target.texture.internalFormat="RGBA8",this.target.scissorTest=!0)}prepareProgramMaterial(A){let e=TA.readbackProgram.get(A);if(!e){const n=bA({index:"int"},{rgba8:"vec4"},({index:i})=>(A.inputs.index=i,{rgba8:new ts({rgba8:A.outputs.rgba8})}));TA.programTemplate||(TA.programTemplate=new ns(Iu)),e=new ss({graph:n,inputs:{index:"index"},outputs:{rgba8:"target"},template:TA.programTemplate}),Object.assign(e.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),TA.readbackProgram.set(A,e)}const s=e.prepareMaterial();return TA.fullScreenQuad.material=s,{program:e,material:s}}saveRenderState(A){return{xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,e){A.setRenderTarget(null),A.xr.enabled=e.xrEnabled,A.autoClear=e.autoClear}process({count:A,material:e}){const s=this.renderer;if(!s)throw new Error("No renderer");if(!this.target)throw new Error("No target");const n=X*HA;e.uniforms.targetBase.value=0,e.uniforms.targetCount.value=A;let i=0;for(;i<A;){const r=Math.floor(i/n),a=r*n,o=Math.min(HA,Math.ceil((A-a)/X));e.uniforms.targetLayer.value=r,this.target.scissor.set(0,0,X,o),s.setRenderTarget(this.target,r),s.xr.enabled=!1,s.autoClear=!1,TA.fullScreenQuad.render(s),i+=X*o}this.count=A}async read({readback:A}){const e=this.renderer;if(!e)throw new Error("No renderer");if(!this.target)throw new Error("No target");const s=Math.ceil(this.count/X)*X;if(A.byteLength<s*4)throw new Error(`Readback buffer too small: ${A.byteLength} < ${s*4}`);const n=new Uint8Array(A instanceof ArrayBuffer?A:A.buffer),i=X*HA;let r=0;const a=[];for(;r<this.count;){const o=Math.floor(r/i),c=o*i,l=Math.min(HA,Math.ceil((this.count-c)/X));e.setRenderTarget(this.target,o);const g=X*l*4,I=n.subarray(c*4,c*4+g),h=e==null?void 0:e.readRenderTargetPixelsAsync(this.target,0,0,X,l,I);a.push(h),r+=X*l}return Promise.all(a).then(()=>A)}render({reader:A,count:e,renderer:s}){if(this.renderer=s||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(e);const{program:n,material:i}=this.prepareProgramMaterial(A);n.update();const r=this.saveRenderState(this.renderer);this.process({count:e,material:i}),this.resetRenderState(this.renderer,r)}async readback({readback:A}){if(!this.renderer)throw new Error("No renderer");const e=this.saveRenderState(this.renderer),s=this.read({readback:A});return this.resetRenderState(this.renderer,e),s}async renderReadback({reader:A,count:e,renderer:s,readback:n}){if(this.renderer=s||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(e);const{program:i,material:r}=this.prepareProgramMaterial(A);i.update();const a=this.saveRenderState(this.renderer);this.process({count:e,material:r});const o=this.read({readback:n});return this.resetRenderState(this.renderer,a),o}getTexture(){var A;return(A=this.target)==null?void 0:A.texture}};TA.programTemplate=null,TA.readbackProgram=new Map,TA.fullScreenQuad=new ws(new u.RawShaderMaterial({visible:!1}));let Pt=TA;const IA=class IA{constructor(A={}){this.capacity=0,this.count=0,this.array=null,this.readback=null,this.source=null,this.needsUpdate=!0,this.dyno=new k({key:"rgbaArray",type:$a,globals:()=>[Va],value:{texture:IA.getEmpty(),count:0},update:e=>{var s;return e.texture=((s=this.readback)==null?void 0:s.getTexture())??this.source??IA.getEmpty(),e.count=this.count,e}}),A.array?(this.array=A.array,this.capacity=Math.floor(this.array.length/4),this.capacity=Math.floor(this.capacity/X)*X,this.count=Math.min(this.capacity,A.count??Number.POSITIVE_INFINITY)):(this.capacity=A.capacity??0,this.count=0)}dispose(){this.readback&&(this.readback.dispose(),this.readback=null),this.source&&(this.source.dispose(),this.source=null)}ensureCapacity(A){var e;if(!this.array||A>(((e=this.array)==null?void 0:e.length)??0)/4){this.capacity=xA(A).maxSplats;const s=new Uint8Array(this.capacity*4);this.array&&s.set(this.array),this.array=s}return this.array}getTexture(){var e;let A=(e=this.readback)==null?void 0:e.getTexture();return(this.source||this.array)&&(A=this.maybeUpdateSource()),A??IA.getEmpty()}maybeUpdateSource(){if(!this.array)throw new Error("No array");if(this.needsUpdate||!this.source){if(this.needsUpdate=!1,this.source){const{width:A,height:e,depth:s}=this.source.image;this.capacity!==A*e*s&&(this.source.dispose(),this.source=null)}if(this.source)this.array.buffer!==this.source.image.data.buffer&&(this.source.image.data=new Uint8Array(this.array.buffer));else{const{width:A,height:e,depth:s}=xA(this.capacity);this.source=new u.DataArrayTexture(this.array,A,e,s),this.source.format=u.RGBAFormat,this.source.type=u.UnsignedByteType,this.source.internalFormat="RGBA8",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}render({reader:A,count:e,renderer:s}){this.readback||(this.readback=new Pt({renderer:s})),this.readback.render({reader:A,count:e,renderer:s}),this.capacity=this.readback.capacity,this.count=this.readback.count}fromPackedSplats({packedSplats:A,base:e,count:s,renderer:n}){const{dynoSplats:i,dynoBase:r,dynoCount:a,reader:o}=IA.makeDynos();return i.packedSplats=A,r.value=e,a.value=s,this.render({reader:o,count:s,renderer:n}),this}async read(){if(!this.readback)throw new Error("No readback");return(!this.array||this.array.length<this.count*4)&&(this.array=new Uint8Array(this.capacity*4)),(await this.readback.readback({readback:this.array})).subarray(0,this.count*4)}static getEmpty(){if(!IA.emptySource){const A=new Uint8Array(4);IA.emptySource=new u.DataArrayTexture(A,1,1,1),IA.emptySource.format=u.RGBAFormat,IA.emptySource.type=u.UnsignedByteType,IA.emptySource.internalFormat="RGBA8",IA.emptySource.needsUpdate=!0}return IA.emptySource}static makeDynos(){if(!IA.dynos){const A=new ls,e=new Vt({value:0}),s=new Vt({value:0}),n=bA({index:"int"},{rgba8:"vec4"},({index:i})=>{if(!i)throw new Error("index is undefined");i=BA(i,e);const r=Ks(A,i,e,s);return{rgba8:Ct(r).outputs.rgba}});IA.dynos={dynoSplats:A,dynoBase:e,dynoCount:s,reader:n}}return IA.dynos}};IA.emptySource=null,IA.dynos=null;let $e=IA;const $a={type:"RgbaArray"},Va=hA(`
135
+ }`;const TA=class TA{constructor({renderer:A}={}){this.renderer=A,this.capacity=0,this.count=0}dispose(){this.target&&(this.target.dispose(),this.target=void 0)}ensureBuffer(A,e){const n=Math.ceil(Math.max(1,A)/X)*X*4;if(e.byteLength>=n)return e;const i=new ArrayBuffer(n);if(e instanceof ArrayBuffer)return i;const r=e.constructor;return new r(i)}ensureCapacity(A){const{width:e,height:s,depth:n,maxSplats:i}=xA(A);(!this.target||i>this.capacity)&&(this.dispose(),this.capacity=i,this.target=new u.WebGLArrayRenderTarget(e,s,n,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:u.NearestFilter,minFilter:u.NearestFilter}),this.target.texture.format=u.RGBAFormat,this.target.texture.type=u.UnsignedByteType,this.target.texture.internalFormat="RGBA8",this.target.scissorTest=!0)}prepareProgramMaterial(A){let e=TA.readbackProgram.get(A);if(!e){const n=bA({index:"int"},{rgba8:"vec4"},({index:i})=>(A.inputs.index=i,{rgba8:new ts({rgba8:A.outputs.rgba8})}));TA.programTemplate||(TA.programTemplate=new ns(Iu)),e=new ss({graph:n,inputs:{index:"index"},outputs:{rgba8:"target"},template:TA.programTemplate}),Object.assign(e.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),TA.readbackProgram.set(A,e)}const s=e.prepareMaterial();return TA.fullScreenQuad.material=s,{program:e,material:s}}saveRenderState(A){return{xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,e){A.setRenderTarget(null),A.xr.enabled=e.xrEnabled,A.autoClear=e.autoClear}process({count:A,material:e}){const s=this.renderer;if(!s)throw new Error("No renderer");if(!this.target)throw new Error("No target");const n=X*HA;e.uniforms.targetBase.value=0,e.uniforms.targetCount.value=A;let i=0;for(;i<A;){const r=Math.floor(i/n),a=r*n,o=Math.min(HA,Math.ceil((A-a)/X));e.uniforms.targetLayer.value=r,this.target.scissor.set(0,0,X,o),s.setRenderTarget(this.target,r),s.xr.enabled=!1,s.autoClear=!1,TA.fullScreenQuad.render(s),i+=X*o}this.count=A}async read({readback:A}){const e=this.renderer;if(!e)throw new Error("No renderer");if(!this.target)throw new Error("No target");const s=Math.ceil(this.count/X)*X;if(A.byteLength<s*4)throw new Error(`Readback buffer too small: ${A.byteLength} < ${s*4}`);const n=new Uint8Array(A instanceof ArrayBuffer?A:A.buffer),i=X*HA;let r=0;const a=[];for(;r<this.count;){const o=Math.floor(r/i),c=o*i,l=Math.min(HA,Math.ceil((this.count-c)/X));e.setRenderTarget(this.target,o);const g=X*l*4,I=n.subarray(c*4,c*4+g),h=e==null?void 0:e.readRenderTargetPixelsAsync(this.target,0,0,X,l,I);a.push(h),r+=X*l}return Promise.all(a).then(()=>A)}render({reader:A,count:e,renderer:s}){if(this.renderer=s||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(e);const{program:n,material:i}=this.prepareProgramMaterial(A);n.update();const r=this.saveRenderState(this.renderer);this.process({count:e,material:i}),this.resetRenderState(this.renderer,r)}async readback({readback:A}){if(!this.renderer)throw new Error("No renderer");const e=this.saveRenderState(this.renderer),s=this.read({readback:A});return this.resetRenderState(this.renderer,e),s}async renderReadback({reader:A,count:e,renderer:s,readback:n}){if(this.renderer=s||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(e);const{program:i,material:r}=this.prepareProgramMaterial(A);i.update();const a=this.saveRenderState(this.renderer);this.process({count:e,material:r});const o=this.read({readback:n});return this.resetRenderState(this.renderer,a),o}getTexture(){var A;return(A=this.target)==null?void 0:A.texture}};TA.programTemplate=null,TA.readbackProgram=new Map,TA.fullScreenQuad=new ws(new u.RawShaderMaterial({visible:!1}));let Pt=TA;const IA=class IA{constructor(A={}){this.capacity=0,this.count=0,this.array=null,this.readback=null,this.source=null,this.needsUpdate=!0,this.dyno=new k({key:"rgbaArray",type:Va,globals:()=>[$a],value:{texture:IA.getEmpty(),count:0},update:e=>{var s;return e.texture=((s=this.readback)==null?void 0:s.getTexture())??this.source??IA.getEmpty(),e.count=this.count,e}}),A.array?(this.array=A.array,this.capacity=Math.floor(this.array.length/4),this.capacity=Math.floor(this.capacity/X)*X,this.count=Math.min(this.capacity,A.count??Number.POSITIVE_INFINITY)):(this.capacity=A.capacity??0,this.count=0)}dispose(){this.readback&&(this.readback.dispose(),this.readback=null),this.source&&(this.source.dispose(),this.source=null)}ensureCapacity(A){var e;if(!this.array||A>(((e=this.array)==null?void 0:e.length)??0)/4){this.capacity=xA(A).maxSplats;const s=new Uint8Array(this.capacity*4);this.array&&s.set(this.array),this.array=s}return this.array}getTexture(){var e;let A=(e=this.readback)==null?void 0:e.getTexture();return(this.source||this.array)&&(A=this.maybeUpdateSource()),A??IA.getEmpty()}maybeUpdateSource(){if(!this.array)throw new Error("No array");if(this.needsUpdate||!this.source){if(this.needsUpdate=!1,this.source){const{width:A,height:e,depth:s}=this.source.image;this.capacity!==A*e*s&&(this.source.dispose(),this.source=null)}if(this.source)this.array.buffer!==this.source.image.data.buffer&&(this.source.image.data=new Uint8Array(this.array.buffer));else{const{width:A,height:e,depth:s}=xA(this.capacity);this.source=new u.DataArrayTexture(this.array,A,e,s),this.source.format=u.RGBAFormat,this.source.type=u.UnsignedByteType,this.source.internalFormat="RGBA8",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}render({reader:A,count:e,renderer:s}){this.readback||(this.readback=new Pt({renderer:s})),this.readback.render({reader:A,count:e,renderer:s}),this.capacity=this.readback.capacity,this.count=this.readback.count}fromPackedSplats({packedSplats:A,base:e,count:s,renderer:n}){const{dynoSplats:i,dynoBase:r,dynoCount:a,reader:o}=IA.makeDynos();return i.packedSplats=A,r.value=e,a.value=s,this.render({reader:o,count:s,renderer:n}),this}async read(){if(!this.readback)throw new Error("No readback");return(!this.array||this.array.length<this.count*4)&&(this.array=new Uint8Array(this.capacity*4)),(await this.readback.readback({readback:this.array})).subarray(0,this.count*4)}static getEmpty(){if(!IA.emptySource){const A=new Uint8Array(4);IA.emptySource=new u.DataArrayTexture(A,1,1,1),IA.emptySource.format=u.RGBAFormat,IA.emptySource.type=u.UnsignedByteType,IA.emptySource.internalFormat="RGBA8",IA.emptySource.needsUpdate=!0}return IA.emptySource}static makeDynos(){if(!IA.dynos){const A=new ls,e=new $t({value:0}),s=new $t({value:0}),n=bA({index:"int"},{rgba8:"vec4"},({index:i})=>{if(!i)throw new Error("index is undefined");i=BA(i,e);const r=Ks(A,i,e,s);return{rgba8:Ct(r).outputs.rgba}});IA.dynos={dynoSplats:A,dynoBase:e,dynoCount:s,reader:n}}return IA.dynos}};IA.emptySource=null,IA.dynos=null;let Ve=IA;const Va={type:"RgbaArray"},$a=hA(`
136
136
  struct RgbaArray {
137
137
  sampler2DArray texture;
138
138
  int count;
139
139
  };
140
- `);function uu(t,A){return new V({inTypes:{rgba:$a,index:"int"},outTypes:{rgba:"vec4"},inputs:{rgba:t,index:A},globals:()=>[Va],statements:({inputs:s,outputs:n})=>RA(`
140
+ `);function uu(t,A){return new $({inTypes:{rgba:Va,index:"int"},outTypes:{rgba:"vec4"},inputs:{rgba:t,index:A},globals:()=>[$a],statements:({inputs:s,outputs:n})=>RA(`
141
141
  if ((index >= 0) && (index < ${s.rgba}.count)) {
142
142
  ${n.rgba} = texelFetch(${s.rgba}.texture, splatTexCoord(index), 0);
143
143
  } else {
144
144
  ${n.rgba} = vec4(0.0, 0.0, 0.0, 0.0);
145
145
  }
146
- `)}).outputs.rgba}var Pa=(t=>(t.ALL="all",t.PLANE="plane",t.SPHERE="sphere",t.BOX="box",t.ELLIPSOID="ellipsoid",t.CYLINDER="cylinder",t.CAPSULE="capsule",t.INFINITE_CONE="infinite_cone",t))(Pa||{});function hu(t){switch(t){case"all":return 0;case"plane":return 1;case"sphere":return 2;case"box":return 3;case"ellipsoid":return 4;case"cylinder":return 5;case"capsule":return 6;case"infinite_cone":return 7;default:throw new Error(`Unknown SDF type: ${t}`)}}var Xa=(t=>(t.MULTIPLY="multiply",t.SET_RGB="set_rgb",t.ADD_RGBA="add_rgba",t))(Xa||{});function Cu(t){switch(t){case"multiply":return 0;case"set_rgb":return 1;case"add_rgba":return 2;default:throw new Error(`Unknown blend mode: ${t}`)}}class Oa extends u.Object3D{constructor(A={}){super();const{type:e,invert:s,opacity:n,color:i,displace:r,radius:a}=A;this.type=e??"sphere",this.invert=s??!1,this.opacity=n??1,this.color=i??new u.Color(1,1,1),this.displace=r??new u.Vector3(0,0,0),this.radius=a??0}}const de=class de extends u.Object3D{constructor(A={}){const{name:e,rgbaBlendMode:s="multiply",sdfSmooth:n=0,softEdge:i=0,invert:r=!1,sdfs:a=null}=A;super(),this.rgbaBlendMode=s,this.sdfSmooth=n,this.softEdge=i,this.invert=r,this.sdfs=a,this.ordering=de.nextOrdering++,this.name=e??`Edit ${this.ordering}`}addSdf(A){this.sdfs==null&&(this.sdfs=[]),this.sdfs.includes(A)||this.sdfs.push(A)}removeSdf(A){this.sdfs!=null&&(this.sdfs=this.sdfs.filter(e=>e!==A))}};de.nextOrdering=1;let Xt=de;class Wa{constructor({maxSdfs:A,maxEdits:e}){this.maxSdfs=Math.max(16,A??0),this.numSdfs=0,this.sdfData=new Uint32Array(this.maxSdfs*8*4),this.sdfFloatData=new Float32Array(this.sdfData.buffer),this.sdfTexture=this.newSdfTexture(this.sdfData,this.maxSdfs),this.dynoSdfArray=new k({key:"sdfArray",type:ja,globals:()=>[Za],value:{numSdfs:0,sdfTexture:this.sdfTexture},update:s=>(s.numSdfs=this.numSdfs,s.sdfTexture=this.sdfTexture,s)}),this.maxEdits=Math.max(16,e??0),this.numEdits=0,this.editData=new Uint32Array(this.maxEdits*4),this.editFloatData=new Float32Array(this.editData.buffer),this.dynoNumEdits=new Vt({value:0}),this.dynoEdits=this.newEdits(this.editData,this.maxEdits)}newSdfTexture(A,e){const s=new u.DataTexture(A,8,e,u.RGBAIntegerFormat,u.UnsignedIntType);return s.internalFormat="RGBA32UI",s.needsUpdate=!0,s}newEdits(A,e){return new k({key:"edits",type:"uvec4",count:e,globals:()=>[Ao],value:A})}ensureCapacity({maxSdfs:A,maxEdits:e}){let s=!1;return A>this.sdfTexture.image.height&&(this.sdfTexture.dispose(),this.maxSdfs=Math.max(this.maxSdfs*2,A),this.sdfData=new Uint32Array(this.maxSdfs*8*4),this.sdfFloatData=new Float32Array(this.sdfData.buffer),this.sdfTexture=this.newSdfTexture(this.sdfData,this.maxSdfs)),e>(this.dynoEdits.count??0)&&(this.maxEdits=Math.max(this.maxEdits*2,e),this.editData=new Uint32Array(this.maxEdits*4),this.editFloatData=new Float32Array(this.editData.buffer),this.dynoEdits=this.newEdits(this.editData,this.maxEdits),s=!0),s}updateEditData(A,e){const s=this.editData[A]!==e;return this.editData[A]=e,s}updateEditFloatData(A,e){wt[0]=e;const s=this.editFloatData[A]!==wt[0];return s&&(this.editFloatData[A]=wt[0]),s}encodeEdit(A,{sdfFirst:e,sdfCount:s,invert:n,rgbaBlendMode:i,softEdge:r,sdfSmooth:a}){const o=A*4;let c=!1;return c=this.updateEditData(o+0,i|(n?256:0))||c,c=this.updateEditData(o+1,e|s<<16)||c,c=this.updateEditFloatData(o+2,r)||c,c=this.updateEditFloatData(o+3,a)||c,c}updateSdfData(A,e){const s=this.sdfData[A]!==e;return this.sdfData[A]=e,s}updateSdfFloatData(A,e){wt[0]=e;const s=this.sdfFloatData[A]!==wt[0];return s&&(this.sdfFloatData[A]=wt[0]),s}encodeSdf(A,{sdfType:e,invert:s,center:n,quaternion:i,scale:r,sizes:a},o){const c=A*32,l=e|(s?256:0);let g=!1;g=this.updateSdfFloatData(c+0,(n==null?void 0:n.x)??0)||g,g=this.updateSdfFloatData(c+1,(n==null?void 0:n.y)??0)||g,g=this.updateSdfFloatData(c+2,(n==null?void 0:n.z)??0)||g,g=this.updateSdfData(c+3,l)||g,g=this.updateSdfFloatData(c+4,(i==null?void 0:i.x)??0)||g,g=this.updateSdfFloatData(c+5,(i==null?void 0:i.y)??0)||g,g=this.updateSdfFloatData(c+6,(i==null?void 0:i.z)??0)||g,g=this.updateSdfFloatData(c+7,(i==null?void 0:i.w)??0)||g,g=this.updateSdfFloatData(c+8,(r==null?void 0:r.x)??0)||g,g=this.updateSdfFloatData(c+9,(r==null?void 0:r.y)??0)||g,g=this.updateSdfFloatData(c+10,(r==null?void 0:r.z)??0)||g,g=this.updateSdfData(c+11,0)||g,g=this.updateSdfFloatData(c+12,(a==null?void 0:a.x)??0)||g,g=this.updateSdfFloatData(c+13,(a==null?void 0:a.y)??0)||g,g=this.updateSdfFloatData(c+14,(a==null?void 0:a.z)??0)||g,g=this.updateSdfFloatData(c+15,(a==null?void 0:a.w)??0)||g;const I=Math.min(4,o.length);for(let h=0;h<I;++h){const B=c+16+h*4;g=this.updateSdfFloatData(B+0,o[h].x)||g,g=this.updateSdfFloatData(B+1,o[h].y)||g,g=this.updateSdfFloatData(B+2,o[h].z)||g,g=this.updateSdfFloatData(B+3,o[h].w)||g}return g}update(A){const e=A.reduce((g,{sdfs:I})=>g+I.length,0),s=this.ensureCapacity({maxEdits:A.length,maxSdfs:e}),n=[new u.Vector4,new u.Vector4],i=new u.Vector3,r=new u.Quaternion,a=new u.Vector3,o=new u.Vector4;let c=0,l=s;A.length!==this.dynoNumEdits.value&&(this.dynoNumEdits.value=A.length,this.numEdits=A.length,l=!0);for(const[g,{edit:I,sdfs:h}]of A.entries()){l=this.encodeEdit(g,{sdfFirst:c,sdfCount:h.length,invert:I.invert,rgbaBlendMode:Cu(I.rgbaBlendMode),softEdge:I.softEdge,sdfSmooth:I.sdfSmooth})||l;let B=!1;for(const C of h)o.set(C.scale.x,C.scale.y,C.scale.z,C.radius),C.scale.setScalar(1),C.updateMatrixWorld(),C.matrixWorld.clone().invert().decompose(i,r,a),C.scale.set(o.x,o.y,o.z),C.updateMatrixWorld(),n[0].set(C.color.r,C.color.g,C.color.b,C.opacity),n[1].set(C.displace.x,C.displace.y,C.displace.z,1),B=this.encodeSdf(c,{sdfType:hu(C.type),invert:C.invert,center:i,quaternion:r,scale:a,sizes:o},n)||B,c+=1;this.numSdfs=c,B&&(this.sdfTexture.needsUpdate=!0),l||(l=B)}return{updated:l,dynoUpdated:s}}modify(A){return Bu(A,this.dynoSdfArray,this.dynoNumEdits,this.dynoEdits)}}const ja={type:"SdfArray"},Za=hA(`
146
+ `)}).outputs.rgba}var Pa=(t=>(t.ALL="all",t.PLANE="plane",t.SPHERE="sphere",t.BOX="box",t.ELLIPSOID="ellipsoid",t.CYLINDER="cylinder",t.CAPSULE="capsule",t.INFINITE_CONE="infinite_cone",t))(Pa||{});function hu(t){switch(t){case"all":return 0;case"plane":return 1;case"sphere":return 2;case"box":return 3;case"ellipsoid":return 4;case"cylinder":return 5;case"capsule":return 6;case"infinite_cone":return 7;default:throw new Error(`Unknown SDF type: ${t}`)}}var Xa=(t=>(t.MULTIPLY="multiply",t.SET_RGB="set_rgb",t.ADD_RGBA="add_rgba",t))(Xa||{});function Cu(t){switch(t){case"multiply":return 0;case"set_rgb":return 1;case"add_rgba":return 2;default:throw new Error(`Unknown blend mode: ${t}`)}}class Oa extends u.Object3D{constructor(A={}){super();const{type:e,invert:s,opacity:n,color:i,displace:r,radius:a}=A;this.type=e??"sphere",this.invert=s??!1,this.opacity=n??1,this.color=i??new u.Color(1,1,1),this.displace=r??new u.Vector3(0,0,0),this.radius=a??0}}const de=class de extends u.Object3D{constructor(A={}){const{name:e,rgbaBlendMode:s="multiply",sdfSmooth:n=0,softEdge:i=0,invert:r=!1,sdfs:a=null}=A;super(),this.rgbaBlendMode=s,this.sdfSmooth=n,this.softEdge=i,this.invert=r,this.sdfs=a,this.ordering=de.nextOrdering++,this.name=e??`Edit ${this.ordering}`}addSdf(A){this.sdfs==null&&(this.sdfs=[]),this.sdfs.includes(A)||this.sdfs.push(A)}removeSdf(A){this.sdfs!=null&&(this.sdfs=this.sdfs.filter(e=>e!==A))}};de.nextOrdering=1;let Xt=de;class Wa{constructor({maxSdfs:A,maxEdits:e}){this.maxSdfs=Math.max(16,A??0),this.numSdfs=0,this.sdfData=new Uint32Array(this.maxSdfs*8*4),this.sdfFloatData=new Float32Array(this.sdfData.buffer),this.sdfTexture=this.newSdfTexture(this.sdfData,this.maxSdfs),this.dynoSdfArray=new k({key:"sdfArray",type:ja,globals:()=>[Za],value:{numSdfs:0,sdfTexture:this.sdfTexture},update:s=>(s.numSdfs=this.numSdfs,s.sdfTexture=this.sdfTexture,s)}),this.maxEdits=Math.max(16,e??0),this.numEdits=0,this.editData=new Uint32Array(this.maxEdits*4),this.editFloatData=new Float32Array(this.editData.buffer),this.dynoNumEdits=new $t({value:0}),this.dynoEdits=this.newEdits(this.editData,this.maxEdits)}newSdfTexture(A,e){const s=new u.DataTexture(A,8,e,u.RGBAIntegerFormat,u.UnsignedIntType);return s.internalFormat="RGBA32UI",s.needsUpdate=!0,s}newEdits(A,e){return new k({key:"edits",type:"uvec4",count:e,globals:()=>[Ao],value:A})}ensureCapacity({maxSdfs:A,maxEdits:e}){let s=!1;return A>this.sdfTexture.image.height&&(this.sdfTexture.dispose(),this.maxSdfs=Math.max(this.maxSdfs*2,A),this.sdfData=new Uint32Array(this.maxSdfs*8*4),this.sdfFloatData=new Float32Array(this.sdfData.buffer),this.sdfTexture=this.newSdfTexture(this.sdfData,this.maxSdfs)),e>(this.dynoEdits.count??0)&&(this.maxEdits=Math.max(this.maxEdits*2,e),this.editData=new Uint32Array(this.maxEdits*4),this.editFloatData=new Float32Array(this.editData.buffer),this.dynoEdits=this.newEdits(this.editData,this.maxEdits),s=!0),s}updateEditData(A,e){const s=this.editData[A]!==e;return this.editData[A]=e,s}updateEditFloatData(A,e){wt[0]=e;const s=this.editFloatData[A]!==wt[0];return s&&(this.editFloatData[A]=wt[0]),s}encodeEdit(A,{sdfFirst:e,sdfCount:s,invert:n,rgbaBlendMode:i,softEdge:r,sdfSmooth:a}){const o=A*4;let c=!1;return c=this.updateEditData(o+0,i|(n?256:0))||c,c=this.updateEditData(o+1,e|s<<16)||c,c=this.updateEditFloatData(o+2,r)||c,c=this.updateEditFloatData(o+3,a)||c,c}updateSdfData(A,e){const s=this.sdfData[A]!==e;return this.sdfData[A]=e,s}updateSdfFloatData(A,e){wt[0]=e;const s=this.sdfFloatData[A]!==wt[0];return s&&(this.sdfFloatData[A]=wt[0]),s}encodeSdf(A,{sdfType:e,invert:s,center:n,quaternion:i,scale:r,sizes:a},o){const c=A*32,l=e|(s?256:0);let g=!1;g=this.updateSdfFloatData(c+0,(n==null?void 0:n.x)??0)||g,g=this.updateSdfFloatData(c+1,(n==null?void 0:n.y)??0)||g,g=this.updateSdfFloatData(c+2,(n==null?void 0:n.z)??0)||g,g=this.updateSdfData(c+3,l)||g,g=this.updateSdfFloatData(c+4,(i==null?void 0:i.x)??0)||g,g=this.updateSdfFloatData(c+5,(i==null?void 0:i.y)??0)||g,g=this.updateSdfFloatData(c+6,(i==null?void 0:i.z)??0)||g,g=this.updateSdfFloatData(c+7,(i==null?void 0:i.w)??0)||g,g=this.updateSdfFloatData(c+8,(r==null?void 0:r.x)??0)||g,g=this.updateSdfFloatData(c+9,(r==null?void 0:r.y)??0)||g,g=this.updateSdfFloatData(c+10,(r==null?void 0:r.z)??0)||g,g=this.updateSdfData(c+11,0)||g,g=this.updateSdfFloatData(c+12,(a==null?void 0:a.x)??0)||g,g=this.updateSdfFloatData(c+13,(a==null?void 0:a.y)??0)||g,g=this.updateSdfFloatData(c+14,(a==null?void 0:a.z)??0)||g,g=this.updateSdfFloatData(c+15,(a==null?void 0:a.w)??0)||g;const I=Math.min(4,o.length);for(let h=0;h<I;++h){const B=c+16+h*4;g=this.updateSdfFloatData(B+0,o[h].x)||g,g=this.updateSdfFloatData(B+1,o[h].y)||g,g=this.updateSdfFloatData(B+2,o[h].z)||g,g=this.updateSdfFloatData(B+3,o[h].w)||g}return g}update(A){const e=A.reduce((g,{sdfs:I})=>g+I.length,0),s=this.ensureCapacity({maxEdits:A.length,maxSdfs:e}),n=[new u.Vector4,new u.Vector4],i=new u.Vector3,r=new u.Quaternion,a=new u.Vector3,o=new u.Vector4;let c=0,l=s;A.length!==this.dynoNumEdits.value&&(this.dynoNumEdits.value=A.length,this.numEdits=A.length,l=!0);for(const[g,{edit:I,sdfs:h}]of A.entries()){l=this.encodeEdit(g,{sdfFirst:c,sdfCount:h.length,invert:I.invert,rgbaBlendMode:Cu(I.rgbaBlendMode),softEdge:I.softEdge,sdfSmooth:I.sdfSmooth})||l;let B=!1;for(const C of h)o.set(C.scale.x,C.scale.y,C.scale.z,C.radius),C.scale.setScalar(1),C.updateMatrixWorld(),C.matrixWorld.clone().invert().decompose(i,r,a),C.scale.set(o.x,o.y,o.z),C.updateMatrixWorld(),n[0].set(C.color.r,C.color.g,C.color.b,C.opacity),n[1].set(C.displace.x,C.displace.y,C.displace.z,1),B=this.encodeSdf(c,{sdfType:hu(C.type),invert:C.invert,center:i,quaternion:r,scale:a,sizes:o},n)||B,c+=1;this.numSdfs=c,B&&(this.sdfTexture.needsUpdate=!0),l||(l=B)}return{updated:l,dynoUpdated:s}}modify(A){return Bu(A,this.dynoSdfArray,this.dynoNumEdits,this.dynoEdits)}}const ja={type:"SdfArray"},Za=hA(`
147
147
  struct SdfArray {
148
148
  int numSdfs;
149
149
  usampler2D sdfTexture;
@@ -366,7 +366,7 @@ void main() {
366
366
  decodeEdit(packedEdit, sdfFirst, sdfCount, invert, rgbaBlendMode, softEdge, sdfSmooth);
367
367
  applyRgbaDisplaceEdit(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, sdfSmooth, softEdge, invert, rgbaBlendMode, rgba);
368
368
  }
369
- `);function Bu(t,A,e,s){return new V({inTypes:{gsplat:AA,sdfArray:ja,numEdits:"int",rgbaDisplaceEdits:"uvec4"},outTypes:{gsplat:AA},globals:()=>[Za,Ao],inputs:{gsplat:t,sdfArray:A,numEdits:e,rgbaDisplaceEdits:s},statements:({inputs:i,outputs:r})=>{const{sdfArray:a,numEdits:o,rgbaDisplaceEdits:c}=i,{gsplat:l}=r;return RA(`
369
+ `);function Bu(t,A,e,s){return new $({inTypes:{gsplat:AA,sdfArray:ja,numEdits:"int",rgbaDisplaceEdits:"uvec4"},outTypes:{gsplat:AA},globals:()=>[Za,Ao],inputs:{gsplat:t,sdfArray:A,numEdits:e,rgbaDisplaceEdits:s},statements:({inputs:i,outputs:r})=>{const{sdfArray:a,numEdits:o,rgbaDisplaceEdits:c}=i,{gsplat:l}=r;return RA(`
370
370
  ${l} = ${i.gsplat};
371
371
  if (isGsplatActive(${l}.flags)) {
372
372
  for (int editIndex = 0; editIndex < ${o}; ++editIndex) {
@@ -376,7 +376,7 @@ void main() {
376
376
  );
377
377
  }
378
378
  }
379
- `)}}).outputs.gsplat}const wt=new Float32Array(1);class to{constructor(A){this.modifier=A,this.cache=new Map}apply(A){let e=this.cache.get(A);return e||(e=bA({index:"int"},{gsplat:AA},({index:s})=>{const{gsplat:n}=A.apply({index:s});return this.modifier.apply({gsplat:n})}),this.cache.set(A,e)),e}}class ut{constructor(){this.scale=new Bt({value:Number.NEGATIVE_INFINITY}),this.rotate=new Ut({value:new u.Quaternion(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)}),this.translate=new Ft({value:new u.Vector3(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)})}apply(A){return da(A,{scale:this.scale,rotate:this.rotate,translate:this.translate})}applyDir(A){return ya(A,{rotate:this.rotate})}applyGsplat(A){return As(A,{scale:this.scale,rotate:this.rotate,translate:this.translate})}updateFromMatrix(A){const e=new u.Vector3,s=new u.Quaternion,n=new u.Vector3;A.decompose(n,s,e);const i=(e.x+e.y+e.z)/3;let r=!1;return i!==this.scale.value&&(this.scale.value=i,r=!0),n.equals(this.translate.value)||(this.translate.value.copy(n),r=!0),s.equals(this.rotate.value)||(this.rotate.value.copy(s),r=!0),r}update(A){return A.updateMatrixWorld(),this.updateFromMatrix(A.matrixWorld)}}class kt extends u.Object3D{constructor({numSplats:A,generator:e,construct:s,update:n}){if(super(),this.numSplats=A??0,this.generator=e,this.frameUpdate=n,this.version=0,s){const i=s(this);Object.assign(this,i)}}updateVersion(){this.version+=1}set needsUpdate(A){A&&this.updateVersion()}}const st=class st extends kt{constructor(A={}){const e=new ut,s=new ut,n=new ut,i=new ut,r=new Ut({value:new u.Vector4(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY)}),a=new Bt({value:0}),o=new Bt({value:0}),c={transform:e,viewToWorld:s,worldToView:n,viewToObject:i,recolor:r,time:a,deltaTime:o};if(super({update:({time:l,deltaTime:g,viewToWorld:I,globalEdits:h})=>this.update({time:l,deltaTime:g,viewToWorld:I,globalEdits:h})}),this.isInitialized=!1,this.recolor=new u.Color(1,1,1),this.opacity=1,this.enableViewToObject=!1,this.enableViewToWorld=!1,this.enableWorldToView=!1,this.skinning=null,this.edits=null,this.rgbaDisplaceEdits=null,this.splatRgba=null,this.maxSh=3,this.packedSplats=A.packedSplats??new _A,this.packedSplats.splatEncoding=A.splatEncoding??{...xe},this.numSplats=this.packedSplats.numSplats,this.editable=A.editable??!0,this.onFrame=A.onFrame,this.context=c,this.objectModifier=A.objectModifier,this.worldModifier=A.worldModifier,this.updateGenerator(),A.url||A.fileBytes||A.constructSplats||A.packedSplats&&!A.packedSplats.isInitialized)this.initialized=this.asyncInitialize(A).then(async()=>{if(this.updateGenerator(),this.isInitialized=!0,A.onLoad){const l=A.onLoad(this);l instanceof Promise&&await l}return this});else if(this.isInitialized=!0,this.initialized=Promise.resolve(this),A.onLoad){const l=A.onLoad(this);l instanceof Promise&&(this.initialized=l.then(()=>this))}}async asyncInitialize(A){const{url:e,fileBytes:s,fileType:n,fileName:i,maxSplats:r,constructSplats:a,splatEncoding:o}=A;if(e||s||a){const c={url:e,fileBytes:s,fileType:n,fileName:i,maxSplats:r,construct:a,splatEncoding:o};this.packedSplats.reinitialize(c)}this.packedSplats&&(await this.packedSplats.initialized,this.numSplats=this.packedSplats.numSplats,this.updateGenerator())}static async staticInitialize(){await Ts(),st.isStaticInitialized=!0}pushSplat(A,e,s,n,i){this.packedSplats.pushSplat(A,e,s,n,i)}forEachSplat(A){this.packedSplats.forEachSplat(A)}dispose(){this.packedSplats.dispose()}constructGenerator(A){const{transform:e,viewToObject:s,recolor:n}=A,i=bA({index:"int"},{gsplat:AA},({index:r})=>{if(!r)throw new Error("index is undefined");let a=bt(this.packedSplats.dyno,r);if(this.maxSh>=1){const{sh1Texture:c,sh2Texture:l,sh3Texture:g}=this.ensureShTextures();if(c){let I=function(p,d){const{x:w,y:D}=Et(d).outputs,x=rA(BA(w,D),J("float",.5)),y=rA(ft(D,w),J("float",.5));return BA(x,rA(p,y))};const h=s.translate,{center:B}=Ct(a).outputs,C=Jr(ft(B,h)),Q=pu(a,c,C);let E=I(Q,this.packedSplats.dynoSh1MinMax);if(this.maxSh>=2&&l){const p=du(a,l,C);E=BA(E,I(p,this.packedSplats.dynoSh2MinMax))}if(this.maxSh>=3&&g){const p=yu(a,g,C);E=BA(E,I(p,this.packedSplats.dynoSh3MinMax))}let{rgba:f}=Ct(a).outputs;f=BA(f,Lr(E,J("float",0))),a=rt({gsplat:a,rgba:f})}}if(this.splatRgba){const c=uu(this.splatRgba.dyno,r);a=rt({gsplat:a,rgba:c})}this.skinning&&(a=this.skinning.modify(a)),this.objectModifier&&(a=this.objectModifier.apply({gsplat:a}).gsplat),a=e.applyGsplat(a);const o=rA(n,Ct(a).outputs.rgba);return a=rt({gsplat:a,rgba:o}),this.rgbaDisplaceEdits&&(a=this.rgbaDisplaceEdits.modify(a)),this.worldModifier&&(a=this.worldModifier.apply({gsplat:a}).gsplat),{gsplat:a}});this.generator=i}updateGenerator(){this.constructGenerator(this.context)}update({time:A,viewToWorld:e,deltaTime:s,globalEdits:n}){var Q;this.numSplats=this.packedSplats.numSplats,this.context.time.value=A,this.context.deltaTime.value=s,st.dynoTime.value=A;const{transform:i,viewToObject:r,recolor:a}=this.context;let o=i.update(this);this.context.viewToWorld.updateFromMatrix(e)&&this.enableViewToWorld&&(o=!0);const c=e.clone().invert();this.context.worldToView.updateFromMatrix(c)&&this.enableWorldToView&&(o=!0);const I=new u.Matrix4().compose(i.translate.value,i.rotate.value,new u.Vector3().setScalar(i.scale.value)).invert().multiply(e);r.updateFromMatrix(I)&&(this.enableViewToObject||this.packedSplats.extra.sh1)&&(o=!0);const h=new u.Vector4(this.recolor.r,this.recolor.g,this.recolor.b,this.opacity);h.equals(a.value)||(a.value.copy(h),o=!0);const B=this.editable?(this.edits??[]).concat(n):[];this.editable&&!this.edits&&this.traverseVisible(E=>{E instanceof Xt&&B.push(E)}),B.sort((E,f)=>E.ordering-f.ordering);const C=B.map(E=>{if(E.sdfs!=null)return{edit:E,sdfs:E.sdfs};const f=[];return E.traverseVisible(p=>{p instanceof Oa&&f.push(p)}),{edit:E,sdfs:f}});if(C.length>0&&!this.rgbaDisplaceEdits){const E=C.length,f=C.reduce((p,d)=>p+d.sdfs.length,0);this.rgbaDisplaceEdits=new Wa({maxEdits:E,maxSdfs:f}),this.updateGenerator()}if(this.rgbaDisplaceEdits){const E=this.rgbaDisplaceEdits.update(C);o||(o=E.updated),E.dynoUpdated&&this.updateGenerator()}o&&this.updateVersion(),(Q=this.onFrame)==null||Q.call(this,{mesh:this,time:A,deltaTime:s})}raycast(A,e){var h,B;if(!this.packedSplats.packedArray||!this.packedSplats.numSplats)return;const{near:s,far:n,ray:i}=A,r=this.matrixWorld.clone().invert(),a=new u.Matrix3().setFromMatrix4(r),o=i.origin.clone().applyMatrix4(r),c=i.direction.clone().applyMatrix3(a),l=new u.Vector3;r.decompose(new u.Vector3,new u.Quaternion,l),(l.x*l.y*l.z)**(1/3);const I=tg(o.x,o.y,o.z,c.x,c.y,c.z,s,n,this.packedSplats.numSplats,this.packedSplats.packedArray,!0,((h=this.packedSplats.splatEncoding)==null?void 0:h.lnScaleMin)??kA,((B=this.packedSplats.splatEncoding)==null?void 0:B.lnScaleMax)??NA);for(const C of I){const Q=i.direction.clone().multiplyScalar(C).add(i.origin);e.push({distance:C,point:Q,object:this})}}ensureShTextures(){if(!this.packedSplats.extra.sh1)return{};let A=this.packedSplats.extra.sh1Texture;if(!A){let n=this.packedSplats.extra.sh1;const{width:i,height:r,depth:a,maxSplats:o}=xA(n.length/2);if(n.length<o*2){const l=new Uint32Array(o*2);l.set(n),this.packedSplats.extra.sh1=l,n=l}const c=new u.DataArrayTexture(n,i,r,a);c.format=u.RGIntegerFormat,c.type=u.UnsignedIntType,c.internalFormat="RG32UI",c.needsUpdate=!0,A=new Ht({value:c,key:"sh1"}),this.packedSplats.extra.sh1Texture=A}if(!this.packedSplats.extra.sh2)return{sh1Texture:A};let e=this.packedSplats.extra.sh2Texture;if(!e){let n=this.packedSplats.extra.sh2;const{width:i,height:r,depth:a,maxSplats:o}=xA(n.length/4);if(n.length<o*4){const l=new Uint32Array(o*4);l.set(n),this.packedSplats.extra.sh2=l,n=l}const c=new u.DataArrayTexture(n,i,r,a);c.format=u.RGBAIntegerFormat,c.type=u.UnsignedIntType,c.internalFormat="RGBA32UI",c.needsUpdate=!0,e=new Ht({value:c,key:"sh2"}),this.packedSplats.extra.sh2Texture=e}if(!this.packedSplats.extra.sh3)return{sh1Texture:A,sh2Texture:e};let s=this.packedSplats.extra.sh3Texture;if(!s){let n=this.packedSplats.extra.sh3;const{width:i,height:r,depth:a,maxSplats:o}=xA(n.length/4);if(n.length<o*4){const l=new Uint32Array(o*4);l.set(n),this.packedSplats.extra.sh3=l,n=l}const c=new u.DataArrayTexture(n,i,r,a);c.format=u.RGBAIntegerFormat,c.type=u.UnsignedIntType,c.internalFormat="RGBA32UI",c.needsUpdate=!0,s=new Ht({value:c,key:"sh3"}),this.packedSplats.extra.sh3Texture=s}return{sh1Texture:A,sh2Texture:e,sh3Texture:s}}};st.staticInitialized=st.staticInitialize(),st.isStaticInitialized=!1,st.dynoTime=new Bt({value:0});let $A=st;const Qu=hA(`
379
+ `)}}).outputs.gsplat}const wt=new Float32Array(1);class to{constructor(A){this.modifier=A,this.cache=new Map}apply(A){let e=this.cache.get(A);return e||(e=bA({index:"int"},{gsplat:AA},({index:s})=>{const{gsplat:n}=A.apply({index:s});return this.modifier.apply({gsplat:n})}),this.cache.set(A,e)),e}}class ut{constructor(){this.scale=new Bt({value:Number.NEGATIVE_INFINITY}),this.rotate=new Ut({value:new u.Quaternion(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)}),this.translate=new Ft({value:new u.Vector3(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)})}apply(A){return da(A,{scale:this.scale,rotate:this.rotate,translate:this.translate})}applyDir(A){return ya(A,{rotate:this.rotate})}applyGsplat(A){return As(A,{scale:this.scale,rotate:this.rotate,translate:this.translate})}updateFromMatrix(A){const e=new u.Vector3,s=new u.Quaternion,n=new u.Vector3;A.decompose(n,s,e);const i=(e.x+e.y+e.z)/3;let r=!1;return i!==this.scale.value&&(this.scale.value=i,r=!0),n.equals(this.translate.value)||(this.translate.value.copy(n),r=!0),s.equals(this.rotate.value)||(this.rotate.value.copy(s),r=!0),r}update(A){return A.updateMatrixWorld(),this.updateFromMatrix(A.matrixWorld)}}class kt extends u.Object3D{constructor({numSplats:A,generator:e,construct:s,update:n}){if(super(),this.numSplats=A??0,this.generator=e,this.frameUpdate=n,this.version=0,s){const i=s(this);Object.assign(this,i)}}updateVersion(){this.version+=1}set needsUpdate(A){A&&this.updateVersion()}}const st=class st extends kt{constructor(A={}){const e=new ut,s=new ut,n=new ut,i=new ut,r=new Ut({value:new u.Vector4(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY)}),a=new Bt({value:0}),o=new Bt({value:0}),c={transform:e,viewToWorld:s,worldToView:n,viewToObject:i,recolor:r,time:a,deltaTime:o};if(super({update:({time:l,deltaTime:g,viewToWorld:I,globalEdits:h})=>this.update({time:l,deltaTime:g,viewToWorld:I,globalEdits:h})}),this.isInitialized=!1,this.recolor=new u.Color(1,1,1),this.opacity=1,this.enableViewToObject=!1,this.enableViewToWorld=!1,this.enableWorldToView=!1,this.skinning=null,this.edits=null,this.rgbaDisplaceEdits=null,this.splatRgba=null,this.maxSh=3,this.packedSplats=A.packedSplats??new LA,this.packedSplats.splatEncoding=A.splatEncoding??{...xe},this.numSplats=this.packedSplats.numSplats,this.editable=A.editable??!0,this.onFrame=A.onFrame,this.context=c,this.objectModifier=A.objectModifier,this.worldModifier=A.worldModifier,this.updateGenerator(),A.url||A.fileBytes||A.constructSplats||A.packedSplats&&!A.packedSplats.isInitialized)this.initialized=this.asyncInitialize(A).then(async()=>{if(this.updateGenerator(),this.isInitialized=!0,A.onLoad){const l=A.onLoad(this);l instanceof Promise&&await l}return this});else if(this.isInitialized=!0,this.initialized=Promise.resolve(this),A.onLoad){const l=A.onLoad(this);l instanceof Promise&&(this.initialized=l.then(()=>this))}}async asyncInitialize(A){const{url:e,fileBytes:s,fileType:n,fileName:i,maxSplats:r,constructSplats:a,splatEncoding:o}=A;if(e||s||a){const c={url:e,fileBytes:s,fileType:n,fileName:i,maxSplats:r,construct:a,splatEncoding:o};this.packedSplats.reinitialize(c)}this.packedSplats&&(await this.packedSplats.initialized,this.numSplats=this.packedSplats.numSplats,this.updateGenerator())}static async staticInitialize(){await Ts(),st.isStaticInitialized=!0}pushSplat(A,e,s,n,i){this.packedSplats.pushSplat(A,e,s,n,i)}forEachSplat(A){this.packedSplats.forEachSplat(A)}dispose(){this.packedSplats.dispose()}getBoundingBox(A=!0){if(!this.initialized)throw new Error("Cannot get bounding box before SplatMesh is initialized");const e=new u.Vector3(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),s=new u.Vector3(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),n=new u.Vector3,i=[-1,1];return this.packedSplats.forEachSplat((a,o,c,l,g,I)=>{if(A)e.min(o),s.max(o);else for(const h of i)for(const B of i)for(const C of i)n.set(h*c.x,B*c.y,C*c.z),n.applyQuaternion(l),n.add(o),e.min(n),s.max(n)}),new u.Box3(e,s)}constructGenerator(A){const{transform:e,viewToObject:s,recolor:n}=A,i=bA({index:"int"},{gsplat:AA},({index:r})=>{if(!r)throw new Error("index is undefined");let a=bt(this.packedSplats.dyno,r);if(this.maxSh>=1){const{sh1Texture:c,sh2Texture:l,sh3Texture:g}=this.ensureShTextures();if(c){let I=function(p,d){const{x:w,y:D}=Et(d).outputs,x=rA(BA(w,D),J("float",.5)),y=rA(ft(D,w),J("float",.5));return BA(x,rA(p,y))};const h=s.translate,{center:B}=Ct(a).outputs,C=Jr(ft(B,h)),Q=pu(a,c,C);let E=I(Q,this.packedSplats.dynoSh1MinMax);if(this.maxSh>=2&&l){const p=du(a,l,C);E=BA(E,I(p,this.packedSplats.dynoSh2MinMax))}if(this.maxSh>=3&&g){const p=yu(a,g,C);E=BA(E,I(p,this.packedSplats.dynoSh3MinMax))}let{rgba:f}=Ct(a).outputs;f=BA(f,_r(E,J("float",0))),a=rt({gsplat:a,rgba:f})}}if(this.splatRgba){const c=uu(this.splatRgba.dyno,r);a=rt({gsplat:a,rgba:c})}this.skinning&&(a=this.skinning.modify(a)),this.objectModifier&&(a=this.objectModifier.apply({gsplat:a}).gsplat),a=e.applyGsplat(a);const o=rA(n,Ct(a).outputs.rgba);return a=rt({gsplat:a,rgba:o}),this.rgbaDisplaceEdits&&(a=this.rgbaDisplaceEdits.modify(a)),this.worldModifier&&(a=this.worldModifier.apply({gsplat:a}).gsplat),{gsplat:a}});this.generator=i}updateGenerator(){this.constructGenerator(this.context)}update({time:A,viewToWorld:e,deltaTime:s,globalEdits:n}){var Q;this.numSplats=this.packedSplats.numSplats,this.context.time.value=A,this.context.deltaTime.value=s,st.dynoTime.value=A;const{transform:i,viewToObject:r,recolor:a}=this.context;let o=i.update(this);this.context.viewToWorld.updateFromMatrix(e)&&this.enableViewToWorld&&(o=!0);const c=e.clone().invert();this.context.worldToView.updateFromMatrix(c)&&this.enableWorldToView&&(o=!0);const I=new u.Matrix4().compose(i.translate.value,i.rotate.value,new u.Vector3().setScalar(i.scale.value)).invert().multiply(e);r.updateFromMatrix(I)&&(this.enableViewToObject||this.packedSplats.extra.sh1)&&(o=!0);const h=new u.Vector4(this.recolor.r,this.recolor.g,this.recolor.b,this.opacity);h.equals(a.value)||(a.value.copy(h),o=!0);const B=this.editable?(this.edits??[]).concat(n):[];this.editable&&!this.edits&&this.traverseVisible(E=>{E instanceof Xt&&B.push(E)}),B.sort((E,f)=>E.ordering-f.ordering);const C=B.map(E=>{if(E.sdfs!=null)return{edit:E,sdfs:E.sdfs};const f=[];return E.traverseVisible(p=>{p instanceof Oa&&f.push(p)}),{edit:E,sdfs:f}});if(C.length>0&&!this.rgbaDisplaceEdits){const E=C.length,f=C.reduce((p,d)=>p+d.sdfs.length,0);this.rgbaDisplaceEdits=new Wa({maxEdits:E,maxSdfs:f}),this.updateGenerator()}if(this.rgbaDisplaceEdits){const E=this.rgbaDisplaceEdits.update(C);o||(o=E.updated),E.dynoUpdated&&this.updateGenerator()}o&&this.updateVersion(),(Q=this.onFrame)==null||Q.call(this,{mesh:this,time:A,deltaTime:s})}raycast(A,e){var h,B;if(!this.packedSplats.packedArray||!this.packedSplats.numSplats)return;const{near:s,far:n,ray:i}=A,r=this.matrixWorld.clone().invert(),a=new u.Matrix3().setFromMatrix4(r),o=i.origin.clone().applyMatrix4(r),c=i.direction.clone().applyMatrix3(a),l=new u.Vector3;r.decompose(new u.Vector3,new u.Quaternion,l),(l.x*l.y*l.z)**(1/3);const I=tg(o.x,o.y,o.z,c.x,c.y,c.z,s,n,this.packedSplats.numSplats,this.packedSplats.packedArray,!0,((h=this.packedSplats.splatEncoding)==null?void 0:h.lnScaleMin)??kA,((B=this.packedSplats.splatEncoding)==null?void 0:B.lnScaleMax)??NA);for(const C of I){const Q=i.direction.clone().multiplyScalar(C).add(i.origin);e.push({distance:C,point:Q,object:this})}}ensureShTextures(){if(!this.packedSplats.extra.sh1)return{};let A=this.packedSplats.extra.sh1Texture;if(!A){let n=this.packedSplats.extra.sh1;const{width:i,height:r,depth:a,maxSplats:o}=xA(n.length/2);if(n.length<o*2){const l=new Uint32Array(o*2);l.set(n),this.packedSplats.extra.sh1=l,n=l}const c=new u.DataArrayTexture(n,i,r,a);c.format=u.RGIntegerFormat,c.type=u.UnsignedIntType,c.internalFormat="RG32UI",c.needsUpdate=!0,A=new Ht({value:c,key:"sh1"}),this.packedSplats.extra.sh1Texture=A}if(!this.packedSplats.extra.sh2)return{sh1Texture:A};let e=this.packedSplats.extra.sh2Texture;if(!e){let n=this.packedSplats.extra.sh2;const{width:i,height:r,depth:a,maxSplats:o}=xA(n.length/4);if(n.length<o*4){const l=new Uint32Array(o*4);l.set(n),this.packedSplats.extra.sh2=l,n=l}const c=new u.DataArrayTexture(n,i,r,a);c.format=u.RGBAIntegerFormat,c.type=u.UnsignedIntType,c.internalFormat="RGBA32UI",c.needsUpdate=!0,e=new Ht({value:c,key:"sh2"}),this.packedSplats.extra.sh2Texture=e}if(!this.packedSplats.extra.sh3)return{sh1Texture:A,sh2Texture:e};let s=this.packedSplats.extra.sh3Texture;if(!s){let n=this.packedSplats.extra.sh3;const{width:i,height:r,depth:a,maxSplats:o}=xA(n.length/4);if(n.length<o*4){const l=new Uint32Array(o*4);l.set(n),this.packedSplats.extra.sh3=l,n=l}const c=new u.DataArrayTexture(n,i,r,a);c.format=u.RGBAIntegerFormat,c.type=u.UnsignedIntType,c.internalFormat="RGBA32UI",c.needsUpdate=!0,s=new Ht({value:c,key:"sh3"}),this.packedSplats.extra.sh3Texture=s}return{sh1Texture:A,sh2Texture:e,sh3Texture:s}}};st.staticInitialized=st.staticInitialize(),st.isStaticInitialized=!1,st.dynoTime=new Bt({value:0});let VA=st;const Qu=hA(`
380
380
  vec3 evaluateSH1(Gsplat gsplat, usampler2DArray sh1, vec3 viewDir) {
381
381
  // Extract sint7 values packed into 2 x uint32
382
382
  uvec2 packed = texelFetch(sh1, splatTexCoord(gsplat.index), 0).rg;
@@ -511,7 +511,7 @@ void main() {
511
511
  }
512
512
  `)}).outputs.rgb}const Dt=class Dt{constructor({fileBytes:A}){this.header="",this.littleEndian=!0,this.elements={},this.comments=[],this.data=null,this.numSplats=0,this.fileBytes=A instanceof ArrayBuffer?new Uint8Array(A):A}async parseHeader(){const e=new ReadableStream({start:r=>{r.enqueue(this.fileBytes.slice(0,65536)),r.close()}}).pipeThrough(new TextDecoderStream).getReader();this.header="";const s=`end_header
513
513
  `;for(;;){const{value:r,done:a}=await e.read();if(a)throw new Error("Failed to read header");this.header+=r;const o=this.header.indexOf(s);if(o>=0){this.header=this.header.slice(0,o+s.length);break}}const n=new TextEncoder().encode(this.header).length;this.data=new DataView(this.fileBytes.buffer,n),this.elements={};let i=null;this.comments=[],this.header.trim().split(`
514
- `).forEach((r,a)=>{const o=r.trim();if(a===0){if(o!=="ply")throw new Error("Invalid PLY header");return}if(o.length===0)return;const c=o.split(" ");switch(c[0]){case"format":if(c[1]==="binary_little_endian")this.littleEndian=!0;else if(c[1]==="binary_big_endian")this.littleEndian=!1;else throw new Error(`Unsupported PLY format: ${c[1]}`);if(c[2]!=="1.0")throw new Error(`Unsupported PLY version: ${c[2]}`);break;case"end_header":break;case"comment":this.comments.push(o.slice(8));break;case"element":{const l=c[1];i={name:l,count:Number.parseInt(c[2]),properties:{}},this.elements[l]=i;break}case"property":if(i==null)throw new Error("Property must be inside an element");c[1]==="list"?i.properties[c[4]]={isList:!0,type:c[3],countType:c[2]}:i.properties[c[2]]={isList:!1,type:c[1]};break}}),this.elements.vertex&&(this.numSplats=this.elements.vertex.count)}parseData(A){let e=0;const s=this.data;if(s==null)throw new Error("No data to parse");for(const n in this.elements){const i=this.elements[n],{count:r,properties:a}=i,o={},c=[];for(const[g,I]of Object.entries(a))I.isList?(o[g]=[],c.push(()=>{const h=o[g];h.length=oe[I.countType](s,e,this.littleEndian),e+=mt[I.countType];for(let B=0;B<h.length;B++)h[B]=oe[I.type](s,e,this.littleEndian),e+=mt[I.type]})):(o[g]=0,c.push(()=>{o[g]=oe[I.type](s,e,this.littleEndian),e+=mt[I.type]}));const l=A(i)??(()=>{});for(let g=0;g<r;g++){for(const I of c)I();l(g,o)}}}parseSplats(A,e){if(this.elements.vertex==null)throw new Error("No vertex element found");let s=!1;const n=[];let i=0,r=[],a=[],o=[],c,l,g;function I(){const E=mu[i];r=new Array(3).fill(null).flatMap((f,p)=>[0,1,2].map((d,w)=>`f_rest_${p+w*E/3}`)),a=new Array(5).fill(null).flatMap((f,p)=>[0,1,2].map((d,w)=>`f_rest_${3+p+w*E/3}`)),o=new Array(7).fill(null).flatMap((f,p)=>[0,1,2].map((d,w)=>`f_rest_${8+p+w*E/3}`)),c=i>=1?new Float32Array(3*3):void 0,l=i>=2?new Float32Array(5*3):void 0,g=i>=3?new Float32Array(7*3):void 0}function h(E,f){if(!c)throw new Error("Missing sh1");for(const[p,d]of r.entries())c[p]=f[d]*8/255-4;if(l)for(const[p,d]of a.entries())l[p]=f[d]*8/255-4;if(g)for(const[p,d]of o.entries())g[p]=f[d]*8/255-4;e==null||e(E,c,l,g)}function B(E){const{min_x:f,min_y:p,min_z:d,max_x:w,max_y:D,max_z:x,min_scale_x:y,min_scale_y:m,min_scale_z:N,max_scale_x:M,max_scale_y:S,max_scale_z:U}=E.properties;if(!f||!p||!d||!w||!D||!x||!y||!m||!N||!M||!S||!U)throw new Error("Missing PLY chunk properties");return s=!0,(F,b)=>{const{min_x:T,min_y:R,min_z:O,max_x:L,max_y:eA,max_z:H,min_scale_x:W,min_scale_y:_,min_scale_z:j,max_scale_x:P,max_scale_y:Z,max_scale_z:G,min_r:dA,min_g:lA,min_b:yA,max_r:wA,max_g:SA,max_b:CA}=b;n.push({min_x:T,min_y:R,min_z:O,max_x:L,max_y:eA,max_z:H,min_scale_x:W,min_scale_y:_,min_scale_z:j,max_scale_x:P,max_scale_y:Z,max_scale_z:G,min_r:dA,min_g:lA,min_b:yA,max_r:wA,max_g:SA,max_b:CA})}}function C(E){if(e&&E.name==="sh")return i=Qs(E.properties),I(),h;if(E.name!=="vertex")return null;const{packed_position:f,packed_rotation:p,packed_scale:d,packed_color:w}=E.properties;if(!f||!p||!d||!w)throw new Error("Missing PLY properties: packed_position, packed_rotation, packed_scale, packed_color");const D=Math.sqrt(2);return(x,y)=>{const m=n[x>>>8];if(m==null)throw new Error("Missing PLY chunk");const{min_x:N,min_y:M,min_z:S,max_x:U,max_y:F,max_z:b,min_scale_x:T,min_scale_y:R,min_scale_z:O,max_scale_x:L,max_scale_y:eA,max_scale_z:H,min_r:W,min_g:_,min_b:j,max_r:P,max_g:Z,max_b:G}=m,{packed_position:dA,packed_rotation:lA,packed_scale:yA,packed_color:wA}=y,SA=(dA>>>21&2047)/2047*(U-N)+N,CA=(dA>>>11&1023)/1023*(F-M)+M,YA=(dA&2047)/2047*(b-S)+S,DA=((lA>>>20&1023)/1023-.5)*D,jA=((lA>>>10&1023)/1023-.5)*D,ZA=((lA&1023)/1023-.5)*D,Y=Math.sqrt(Math.max(0,1-DA*DA-jA*jA-ZA*ZA)),fA=lA>>>30,PA=fA===0?DA:fA===1?Y:jA,Rt=fA<=1?jA:fA===2?Y:ZA,ie=fA<=2?ZA:Y,MA=fA===0?Y:DA,z=Math.exp((yA>>>21&2047)/2047*(L-T)+T),XA=Math.exp((yA>>>11&1023)/1023*(eA-R)+R),De=Math.exp((yA&2047)/2047*(H-O)+O),Me=(wA>>>24&255)/255*((P??1)-(W??0))+(W??0),ve=(wA>>>16&255)/255*((Z??1)-(_??0))+(_??0),be=(wA>>>8&255)/255*((G??1)-(j??0))+(j??0),Fe=(wA&255)/255;A(x,SA,CA,YA,z,XA,De,PA,Rt,ie,MA,Fe,Me,ve,be)}}const Q=E=>{if(E.name==="chunk")return B(E);if(s)return C(E);if(E.name!=="vertex")return null;const{x:f,y:p,z:d,scale_0:w,scale_1:D,scale_2:x,rot_0:y,rot_1:m,rot_2:N,rot_3:M,opacity:S,f_dc_0:U,f_dc_1:F,f_dc_2:b,red:T,green:R,blue:O,alpha:L}=E.properties;if(!f||!p||!d)throw new Error("Missing PLY properties: x, y, z");const eA=w&&D&&x,H=y&&m&&N&&M,W=L!=null?ge[L.type]:1,_=T!=null?ge[T.type]:1,j=R!=null?ge[R.type]:1,P=O!=null?ge[O.type]:1;return i=Qs(E.properties),I(),(Z,G)=>{const dA=eA?Math.exp(G.scale_0):Dt.defaultPointScale,lA=eA?Math.exp(G.scale_1):Dt.defaultPointScale,yA=eA?Math.exp(G.scale_2):Dt.defaultPointScale,wA=H?G.rot_1:0,SA=H?G.rot_2:0,CA=H?G.rot_3:0,YA=H?G.rot_0:1,DA=S!=null?1/(1+Math.exp(-G.opacity)):L!=null?G.alpha/W:1,jA=U!=null?G.f_dc_0*ae+.5:T!=null?G.red/_:1,ZA=F!=null?G.f_dc_1*ae+.5:R!=null?G.green/j:1,Y=b!=null?G.f_dc_2*ae+.5:O!=null?G.blue/P:1;if(A(Z,G.x,G.y,G.z,dA,lA,yA,wA,SA,CA,YA,DA,jA,ZA,Y),e&&c){if(c)for(const[fA,PA]of r.entries())c[fA]=G[PA];if(l)for(const[fA,PA]of a.entries())l[fA]=G[PA];if(g)for(const[fA,PA]of o.entries())g[fA]=G[PA];e(Z,c,l,g)}}};this.parseData(Q)}injectRgba(A){let e=0;const s=this.data;if(s==null)throw new Error("No parsed data");if(A.length!==this.numSplats*4)throw new Error("Invalid RGBA array length");for(const n in this.elements){const i=this.elements[n],{count:r,properties:a}=i,o=[];let c=0;const l=n==="vertex";if(l){for(const g of["opacity","f_dc_0","f_dc_1","f_dc_2"])if(!a[g]||a[g].type!=="float")throw new Error(`Can't injectRgba due to property: ${g}`)}for(const[g,I]of Object.entries(a))if(I.isList)o.push(()=>{const h=oe[I.countType](s,e,this.littleEndian);e+=mt[I.countType],e+=h*mt[I.type]});else{if(l)if(g==="f_dc_0"||g==="f_dc_1"||g==="f_dc_2"){const h=Number.parseInt(g.slice(5));o.push(()=>{const B=(A[c+h]/255-.5)/ae;Bs[I.type](s,e,this.littleEndian,B)})}else g==="opacity"&&o.push(()=>{const h=Math.max(-100,Math.min(100,-Math.log(1/(A[c+3]/255)-1)));Bs[I.type](s,e,this.littleEndian,h)});o.push(()=>{e+=mt[I.type]})}for(let g=0;g<r;g++){for(const I of o)I();l&&(c+=4)}}}};Dt.defaultPointScale=.001;let Ot=Dt;const ae=.28209479177387814,oe={char:(t,A,e)=>t.getInt8(A),uchar:(t,A,e)=>t.getUint8(A),short:(t,A,e)=>t.getInt16(A,e),ushort:(t,A,e)=>t.getUint16(A,e),int:(t,A,e)=>t.getInt32(A,e),uint:(t,A,e)=>t.getUint32(A,e),float:(t,A,e)=>t.getFloat32(A,e),double:(t,A,e)=>t.getFloat64(A,e)},Bs={char:(t,A,e,s)=>{t.setInt8(A,s)},uchar:(t,A,e,s)=>{t.setUint8(A,s)},short:(t,A,e,s)=>{t.setInt16(A,s,e)},ushort:(t,A,e,s)=>{t.setUint16(A,s,e)},int:(t,A,e,s)=>{t.setInt32(A,s,e)},uint:(t,A,e,s)=>{t.setUint32(A,s,e)},float:(t,A,e,s)=>{t.setFloat32(A,s,e)},double:(t,A,e,s)=>{t.setFloat64(A,s,e)}},mt={char:1,uchar:1,short:2,ushort:2,int:4,uint:4,float:4,double:8},ge={char:127,uchar:255,short:32767,ushort:65535,int:2147483647,uint:4294967295,float:1,double:1},wu={0:0,9:1,24:2,45:3},mu={0:0,1:9,2:24,3:45};function Qs(t){let A=0;for(;t[`f_rest_${A}`];)A+=1;const e=wu[A];if(e==null)throw new Error(`Unsupported number of SH coefficients: ${A}`);return e}const eo='(function(){"use strict";let xA;const ss=typeof TextDecoder<"u"?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};typeof TextDecoder<"u"&&ss.decode();let jA=null;function Vs(){return(jA===null||jA.byteLength===0)&&(jA=new Uint8Array(xA.memory.buffer)),jA}function js(e,A){return e=e>>>0,ss.decode(Vs().subarray(e,e+A))}function Os(e,A,t){return xA.sort_splats(e,A,t)>>>0}function $s(e,A,t){return xA.sort32_splats(e,A,t)>>>0}async function Ae(e,A){if(typeof Response=="function"&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(e,A)}catch(s){if(e.headers.get("Content-Type")!="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n",s);else throw s}const t=await e.arrayBuffer();return await WebAssembly.instantiate(t,A)}else{const t=await WebAssembly.instantiate(e,A);return t instanceof WebAssembly.Instance?{instance:t,module:e}:t}}function te(){const e={};return e.wbg={},e.wbg.__wbg_buffer_609cc3eee51ed158=function(A){return A.buffer},e.wbg.__wbg_length_3b4f022188ae8db6=function(A){return A.length},e.wbg.__wbg_length_6ca527665d89694d=function(A){return A.length},e.wbg.__wbg_length_8cfd2c6409af88ad=function(A){return A.length},e.wbg.__wbg_new_9fee97a409b32b68=function(A){return new Uint16Array(A)},e.wbg.__wbg_new_e3b321dcfef89fc7=function(A){return new Uint32Array(A)},e.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354=function(A,t,s){return new Float32Array(A,t>>>0,s>>>0)},e.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212=function(A,t,s){return new Uint32Array(A,t>>>0,s>>>0)},e.wbg.__wbg_newwithlength_5a5efe313cfd59f1=function(A){return new Float32Array(A>>>0)},e.wbg.__wbg_set_10bad9bee0e9c58b=function(A,t,s){A.set(t,s>>>0)},e.wbg.__wbg_set_d23661d19148b229=function(A,t,s){A.set(t,s>>>0)},e.wbg.__wbg_set_f4f1f0daa30696fc=function(A,t,s){A.set(t,s>>>0)},e.wbg.__wbg_subarray_3aaeec89bb2544f0=function(A,t,s){return A.subarray(t>>>0,s>>>0)},e.wbg.__wbg_subarray_769e1e0f81bb259b=function(A,t,s){return A.subarray(t>>>0,s>>>0)},e.wbg.__wbindgen_init_externref_table=function(){const A=xA.__wbindgen_export_0,t=A.grow(4);A.set(0,void 0),A.set(t+0,void 0),A.set(t+1,null),A.set(t+2,!0),A.set(t+3,!1)},e.wbg.__wbindgen_memory=function(){return xA.memory},e.wbg.__wbindgen_throw=function(A,t){throw new Error(js(A,t))},e}function se(e,A){return xA=e.exports,es.__wbindgen_wasm_module=A,jA=null,xA.__wbindgen_start(),xA}async function es(e){if(xA!==void 0)return xA;typeof e<"u"&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),typeof e>"u"&&(e=new URL("data:application/wasm;base64,AGFzbQEAAAABzAEeYAJ/fwF/YAJ/fwBgA39/fwF/YAF/AX9gA39/fwBgAX8AYAV/f39/fwBgA29/fwFvYAV/f39/fwF/YAFvAW9gA29vfwBgAW8Bf2AAAX9gBH9/f38AYAAAYAR/f39/AX9gA39vbwF/YAF/AW9gAAFvYAF9AX1gBn9/f39/fwBgDX19fX19fX19f29/fX0Bb2AGf39/f39/AX9gBX9/fH9/AGAEf3x/fwBgBX9/fX9/AGAEf31/fwBgBX9/fn9/AGAEf35/fwBgAn19AX0C8gQRA3diZx1fX3diZ19idWZmZXJfNjA5Y2MzZWVlNTFlZDE1OAAJA3diZxpfX3diZ19uZXdfOWZlZTk3YTQwOWIzMmI2OAAJA3diZxpfX3diZ19zZXRfZjRmMWYwZGFhMzA2OTZmYwAKA3diZx1fX3diZ19sZW5ndGhfOGNmZDJjNjQwOWFmODhhZAALA3diZzFfX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9mMWRlYWQ0NGQxZmM3MjEyAAcDd2JnGl9fd2JnX25ld19lM2IzMjFkY2ZlZjg5ZmM3AAkDd2JnGl9fd2JnX3NldF9kMjM2NjFkMTkxNDhiMjI5AAoDd2JnHV9fd2JnX2xlbmd0aF82Y2E1Mjc2NjVkODk2OTRkAAsDd2JnMV9fd2JnX25ld3dpdGhieXRlb2Zmc2V0YW5kbGVuZ3RoX2U2YjdlNjlhY2Q0YzczNTQABwN3YmcaX193Ymdfc2V0XzEwYmFkOWJlZTBlOWM1OGIACgN3YmcdX193YmdfbGVuZ3RoXzNiNGYwMjIxODhhZThkYjYACwN3YmcfX193Ymdfc3ViYXJyYXlfNzY5ZTFlMGY4MWJiMjU5YgAHA3diZx9fX3diZ19zdWJhcnJheV8zYWFlZWM4OWJiMjU0NGYwAAcDd2JnJF9fd2JnX25ld3dpdGhsZW5ndGhfNWE1ZWZlMzEzY2ZkNTlmMQARA3diZxBfX3diaW5kZ2VuX3Rocm93AAEDd2JnEV9fd2JpbmRnZW5fbWVtb3J5ABIDd2JnH19fd2JpbmRnZW5faW5pdF9leHRlcm5yZWZfdGFibGUADgNhYAMAAQIIBQQCEwEMAAEBAgAAAQwBBAYFBQQAAQYFFAENBAAGBQQEAQQOAgECAQAIBAAVARYG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ACIDKAIEQXhxRgRAIAMhAgwBCyABQRkgAkEBdmtBACACQR9HG3QhBQNAIAMgBUEddkEEcWpBEGoiBCgCACICRQ0CIAVBAXQhBSACIQMgAigCBEF4cSABRw0ACwsgAigCCCIBIAA2AgwgAiAANgIIIABBADYCGCAAIAI2AgwgACABNgIIDwsgBCAANgIAIAAgAzYCGCAAIAA2AgwgACAANgIIC/MCAQR/IwBBMGsiACQAAkACQEGQksAAKAIARQRAQaiSwAAoAgAhAUGoksAAQQA2AgAgAUUNASAAQRhqIAERBQAgAEEQaiICIABBJGopAgA3AwAgACAAKQIcNwMIIAAoAhghAUGQksAAKAIAIgMNAgJAIANFDQBBlJLAACgCACICRQ0AQZiSwAAoAgAgAkECdBBlC0GUksAAIAE2AgBBkJLAAEEBNgIAQZiSwAAgACkDCDcCAEGgksAAIABBEGopAwA3AgALIABBMGokAEGUksAADwsgAEEANgIoIABBATYCHCAAQaCHwAA2AhggAEIENwIgIABBGGpBiIjAABBDAAsgAEEoaiACKQMANwIAIAAgACkDCDcCICAAIAE2AhwgAEEBNgIYAkAgAEEYaiIBKAIARQ0AIAEoAgQiAkUNACABKAIIIAJBAnQQZQsgAEEANgIoIABBATYCHCAAQaiIwAA2AhggAEIENwIgIAFBsIjAABBDAAuoAgIDfwF+IwBBQGoiAiQAIAEoAgBBgICAgHhGBEAgASgCDCEDIAJBJGoiBEEANgIAIAJCgICAgBA3AhwgAkEwaiADKAIAIgNBCGopAgA3AwAgAkE4aiADQRBqKQIANwMAIAIgAykCADcDKCACQRxqQcCIwAAgAkEoahAYGiACQRhqIAQoAgAiAzYCACACIAIpAhwiBTcDECABQQhqIAM2AgAgASAFNwIACyABKQIAIQUgAUKAgICAEDcCACACQQhqIgMgAUEIaiIBKAIANgIAIAFBADYCAEGxk8AALQAAGiACIAU3AwBBDEEEEF0iAUUEQEEEQQwQbQALIAEgAikDADcCACABQQhqIAMoAgA2AgAgAEHgisAANgIEIAAgATYCACACQUBrJAAL0gECBH8BfiMAQSBrIgMkACABIAEgAmoiAksEQEEAQQAQUgALQQggACgCACIEQQF0IgEgAiABIAJLGyICIAJBCEkb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QQRqrUKAgICA4ACENwMoIAEgAa1CgICAgOAAhDcDICABIAFBIGo2AhAgAUEIakHIj8AAEEMAC2kCAX8BfiMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQfyNwAA2AgggA0ICNwIUIANCgICAgOAAIgQgA62ENwMoIAMgBCADQQRqrYQ3AyAgAyADQSBqNgIQIANBCGogAhBDAAtpAgF/AX4jAEEwayIDJAAgAyAANgIAIAMgATYCBCADQQI2AgwgA0H4kcAANgIIIANCAjcCFCADQoCAgIDgACIEIANBBGqthDcDKCADIAQgA62ENwMgIAMgA0EgajYCECADQQhqIAIQQwALZgAjAEEwayIAJABBsJPAAC0AAARAIABBAjYCDCAAQbCKwAA2AgggAEIBNwIUIAAgATYCLCAAIABBLGqtQoCAgIDgAIQ3AyAgACAAQSBqNgIQIABBCGpB0IrAABBDAAsgAEEwaiQAC5QBAgN/AW8jAEEgayIDJAAgAyAAKAIAEHAiBDYCACADIAI2AgQgAiAERwRAIANBADYCCCADIANBBGogA0EIahBAAAsQWyIEEFMiBSUBEAUhBhAbIgIgBiYBIAVBhAFPBEAgBRAtCyACIAAoAgAgAUECdhBkIAJBhAFPBEAgAhAtCyAEQYQBTwRAIAQQLQsgA0EgaiQAC08BAX8jAEEwayIAJAAgAEEBNgIMIABBwI3AADYCCCAAQgE3AhQgACAAQS9qrUKAgICAoAWENwMgIAAgAEEgajYCECAAQQhqQcSBwAAQQwALQQEBfyACIAAoAgAgACgCCCIDa0sEQCAAIAMgAhAlIAAoAgghAwsgACgCBCADaiABIAIQHxogACACIANqNgIIQQALTQECf0Gxk8AALQAAGiABKAIEIQIgASgCACEDQQhBBBBdIgFFBEBBBEEIEG0ACyABIAI2AgQgASADNgIAIABB8IrAADYCBCAAIAE2AgALQQEBfyACIAAoAgAgACgCCCIDa0sEQCAAIAMgAhApIAAoAgghAwsgACgCBCADaiABIAIQHxogACACIANqNgIIQQALQQEBfyMAQSBrIgIkACACQQA2AhAgAkEBNgIEIAJCBDcCCCACQS42AhwgAiAANgIYIAIgAkEYajYCACACIAEQQwALswIBA38gACgCACECIAEoAhwiAEEQcUUE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ZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkTGF6eSBpbnN0YW5jZSBoYXMgcHJldmlvdXNseSBiZWVuIHBvaXNvbmVkdgMQACoAAAAvVXNlcnMvZG1hcmNvcy8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL29uY2VfY2VsbC0xLjIxLjMvc3JjL2xpYi5ycwCoAxAAXwAAAAgDAAAZAAAAcmVlbnRyYW50IGluaXQAABgEEAAOAAAAqAMQAF8AAAB6AgAADQAAABYAAAAMAAAABAAAABcAAAAYAAAAGQAAAC9ydXN0L2RlcHMvZGxtYWxsb2MtMC4yLjYvc3JjL2RsbWFsbG9jLnJzYXNzZXJ0aW9uIGZhaWxlZDogcHNpemUgPj0gc2l6ZSArIG1pbl9vdmVyaGVhZABYBBAAKQAAAKgEAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogcHNpemUgPD0gc2l6ZSArIG1heF9vdmVyaGVhZAAAWAQQACkAAACuBAAADQAAAEFjY2Vzc0Vycm9ybWVtb3J5IGFsbG9jYXRpb24gb2YgIGJ5dGVzIGZhaWxlZAAAAAsFEAAVAAAAIAUQAA0AAABzdGQvc3JjL2FsbG9jLnJzQAUQABAAAABjAQAACQAAABYAAAAMAAAABAAAABoAAAAAAAAACAAAAAQAAAAbAAAAAAAAAAgAAAAEAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAQAAAABAAAACEAAAAiAAAAIwAAACQAAABFcnJvcgAAACUAAAAMAAAABAAAACYAAAAnAAAAKAAAAGNhcGFjaXR5IG92ZXJmbG93AAAA2AUQABEAAABhbGxvYy9zcmMvcmF3X3ZlYy5yc/QFEAAUAAAAGAAAAAUAQaCMwAAL8AUBAAAAKQAAAGEgZm9ybWF0dGluZyB0cmFpdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB3aGVuIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBkaWQgbm90YWxsb2Mvc3JjL2ZtdC5ycwAAfgYQABAAAAB+AgAADgAAAEJvcnJvd011dEVycm9yYWxyZWFkeSBib3Jyb3dlZDogrgYQABIAAABpbmRleCBvdXQgb2YgYm91bmRzOiB0aGUgbGVuIGlzICBidXQgdGhlIGluZGV4IGlzIAAAyAYQACAAAADoBhAAEgAAAD09IT1tYXRjaGVzYXNzZXJ0aW9uIGBsZWZ0ICByaWdodGAgZmFpbGVkCiAgbGVmdDogCiByaWdodDogABcHEAAQAAAAJwcQABcAAAA+BxAACQAAACByaWdodGAgZmFpbGVkOiAKICBsZWZ0OiAAAAAXBxAAEAAAAGAHEAAQAAAAcAcQAAkAAAA+BxAACQAAADogAAABAAAAAAAAAJwHEAACAAAAfSB9Y29yZS9zcmMvZm10L251bS5ycwAAswcQABMAAABmAAAAFwAAADB4MDAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTIwMjEyMjIzMjQyNTI2MjcyODI5MzAzMTMyMzMzNDM1MzYzNzM4Mzk0MDQxNDI0MzQ0NDU0NjQ3NDg0OTUwNTE1MjUzNTQ1NTU2NTc1ODU5NjA2MTYyNjM2NDY1NjY2NzY4Njk3MDcxNzI3Mzc0NzU3Njc3Nzg3OTgwODE4MjgzODQ4NTg2ODc4ODg5OTA5MTkyOTM5NDk1OTY5Nzk4OTlyYW5nZSBzdGFydCBpbmRleCAgb3V0IG9mIHJhbmdlIGZvciBzbGljZSBvZiBsZW5ndGggAACiCBAAEgAAALQIEAAiAAAAcmFuZ2UgZW5kIGluZGV4IOgIEAAQAAAAtAgQACIAAAAAAAA/AAAAvwBBqJLAAAsBFABwCXByb2R1Y2VycwIIbGFuZ3VhZ2UBBFJ1c3QADHByb2Nlc3NlZC1ieQMFcnVzdGMdMS44My4wICg5MGIzNWE2MjMgMjAyNC0xMS0yNikGd2FscnVzBjAuMjMuMwx3YXNtLWJpbmRnZW4HMC4yLjEwMABJD3RhcmdldF9mZWF0dXJlcwQrD211dGFibGUtZ2xvYmFscysIc2lnbi1leHQrD3JlZmVyZW5jZS10eXBlcysKbXVsdGl2YWx1ZQ==",self.location.href));const A=te();(typeof e=="string"||typeof Request=="function"&&e instanceof Request||typeof URL=="function"&&e instanceof URL)&&(e=fetch(e));const{instance:t,module:s}=await Ae(await e,A);return se(t,s)}var is={},ee=function(e,A,t,s,i){var n=new Worker(is[A]||(is[A]=URL.createObjectURL(new Blob([e+\';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})\'],{type:"text/javascript"}))));return n.onmessage=function(g){var r=g.data,I=r.$e$;if(I){var o=new Error(I[0]);o.code=I[1],o.stack=I[2],i(o,null)}else i(null,r)},n.postMessage(t,s),n},V=Uint8Array,JA=Uint16Array,ns=Int32Array,Ft=new V([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,0,0,0]),St=new V([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,0,0]),gs=new V([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),rs=function(e,A){for(var t=new JA(31),s=0;s<31;++s)t[s]=A+=1<<e[s-1];for(var i=new ns(t[30]),s=1;s<30;++s)for(var n=t[s];n<t[s+1];++n)i[n]=n-t[s]<<5|s;return{b:t,r:i}},Is=rs(Ft,2),dt=Is.b,ie=Is.r;dt[28]=258,ie[258]=28;for(var ne=rs(St,0),os=ne.b,gt=new JA(32768),X=0;X<32768;++X){var SA=(X&43690)>>1|(X&21845)<<1;SA=(SA&52428)>>2|(SA&13107)<<2,SA=(SA&61680)>>4|(SA&3855)<<4,gt[X]=((SA&65280)>>8|(SA&255)<<8)>>1}for(var HA=function(e,A,t){for(var s=e.length,i=0,n=new JA(A);i<s;++i)e[i]&&++n[e[i]-1];var g=new JA(A);for(i=1;i<A;++i)g[i]=g[i-1]+n[i-1]<<1;var r;if(t){r=new JA(1<<A);var I=15-A;for(i=0;i<s;++i)if(e[i])for(var o=i<<4|e[i],a=A-e[i],C=g[e[i]-1]++<<a,Q=C|(1<<a)-1;C<=Q;++C)r[gt[C]>>I]=o}else for(r=new JA(s),i=0;i<s;++i)e[i]&&(r[i]=gt[g[e[i]-1]++]>>15-e[i]);return r},OA=new V(288),X=0;X<144;++X)OA[X]=8;for(var X=144;X<256;++X)OA[X]=9;for(var X=256;X<280;++X)OA[X]=7;for(var X=280;X<288;++X)OA[X]=8;for(var as=new V(32),X=0;X<32;++X)as[X]=5;var Cs=HA(OA,9,1),Bs=HA(as,5,1),rt=function(e){for(var A=e[0],t=1;t<e.length;++t)e[t]>A&&(A=e[t]);return A},BA=function(e,A,t){var s=A/8|0;return(e[s]|e[s+1]<<8)>>(A&7)&t},It=function(e,A){var t=A/8|0;return(e[t]|e[t+1]<<8|e[t+2]<<16)>>(A&7)},Nt=function(e){return(e+7)/8|0},dA=function(e,A,t){return(A==null||A<0)&&(A=0),(t==null||t>e.length)&&(t=e.length),new V(e.subarray(A,t))},Qs=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],j=function(e,A,t){var s=new Error(A||Qs[e]);if(s.code=e,Error.captureStackTrace&&Error.captureStackTrace(s,j),!t)throw s;return s},kt=function(e,A,t,s){var i=e.length,n=s?s.length:0;if(!i||A.f&&!A.l)return t||new V(0);var g=!t,r=g||A.i!=2,I=A.i;g&&(t=new V(i*3));var o=function(gA){var oA=t.length;if(gA>oA){var aA=new V(Math.max(oA*2,gA));aA.set(t),t=aA}},a=A.f||0,C=A.p||0,Q=A.b||0,B=A.l,h=A.d,l=A.m,c=A.n,E=i*8;do{if(!B){a=BA(e,C,1);var u=BA(e,C+1,3);if(C+=3,u)if(u==1)B=Cs,h=Bs,l=9,c=5;else if(u==2){var S=BA(e,C,31)+257,b=BA(e,C+10,15)+4,x=S+BA(e,C+5,31)+1;C+=14;for(var m=new V(x),G=new V(19),p=0;p<b;++p)G[gs[p]]=BA(e,C+p*3,7);C+=b*3;for(var w=rt(G),M=(1<<w)-1,z=HA(G,w,1),p=0;p<x;){var Y=z[BA(e,C,M)];C+=Y&15;var y=Y>>4;if(y<16)m[p++]=y;else{var N=0,q=0;for(y==16?(q=3+BA(e,C,3),C+=2,N=m[p-1]):y==17?(q=3+BA(e,C,7),C+=3):y==18&&(q=11+BA(e,C,127),C+=7);q--;)m[p++]=N}}var T=m.subarray(0,S),v=m.subarray(S);l=rt(T),c=rt(v),B=HA(T,l,1),h=HA(v,c,1)}else j(1);else{var y=Nt(C)+4,f=e[y-4]|e[y-3]<<8,D=y+f;if(D>i){I&&j(0);break}r&&o(Q+f),t.set(e.subarray(y,D),Q),A.b=Q+=f,A.p=C=D*8,A.f=a;continue}if(C>E){I&&j(0);break}}r&&o(Q+131072);for(var P=(1<<l)-1,Z=(1<<c)-1,W=C;;W=C){var N=B[It(e,C)&P],L=N>>4;if(C+=N&15,C>E){I&&j(0);break}if(N||j(2),L<256)t[Q++]=L;else if(L==256){W=C,B=null;break}else{var K=L-254;if(L>264){var p=L-257,J=Ft[p];K=BA(e,C,(1<<J)-1)+dt[p],C+=J}var R=h[It(e,C)&Z],F=R>>4;R||j(3),C+=R&15;var v=os[F];if(F>3){var J=St[F];v+=It(e,C)&(1<<J)-1,C+=J}if(C>E){I&&j(0);break}r&&o(Q+131072);var eA=Q+K;if(Q<v){var iA=n-v,IA=Math.min(v,eA);for(iA+Q<0&&j(3);Q<IA;++Q)t[Q]=s[iA+Q]}for(;Q<eA;++Q)t[Q]=t[Q-v]}}A.l=B,A.p=W,A.b=Q,A.f=a,B&&(a=1,A.m=l,A.d=h,A.n=c)}while(!a);return Q!=t.length&&g?dA(t,0,Q):t.subarray(0,Q)},ge=new V(0),re=function(e,A){var t={};for(var s in e)t[s]=e[s];for(var s in A)t[s]=A[s];return t},hs=function(e,A,t){for(var s=e(),i=e.toString(),n=i.slice(i.indexOf("[")+1,i.lastIndexOf("]")).replace(/\\s+/g,"").split(","),g=0;g<s.length;++g){var r=s[g],I=n[g];if(typeof r=="function"){A+=";"+I+"=";var o=r.toString();if(r.prototype)if(o.indexOf("[native code]")!=-1){var a=o.indexOf(" ",8)+1;A+=o.slice(a,o.indexOf("(",a))}else{A+=o;for(var C in r.prototype)A+=";"+I+".prototype."+C+"="+r.prototype[C].toString()}else A+=o}else t[I]=r}return A},ot=[],Ie=function(e){var A=[];for(var t in e)e[t].buffer&&A.push((e[t]=new e[t].constructor(e[t])).buffer);return A},oe=function(e,A,t,s){if(!ot[t]){for(var i="",n={},g=e.length-1,r=0;r<g;++r)i=hs(e[r],i,n);ot[t]={c:hs(e[g],i,n),e:n}}var I=re({},ot[t].e);return ee(ot[t].c+";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage="+A.toString()+"}",t,I,Ie(I),s)},ae=function(){return[V,JA,ns,Ft,St,gs,dt,os,Cs,Bs,gt,Qs,HA,rt,BA,It,Nt,dA,j,kt,at,Es,cs]},Es=function(e){return postMessage(e,[e.buffer])},cs=function(e){return e&&{out:e.size&&new V(e.size),dictionary:e.dictionary}},Ce=function(e,A,t,s,i,n){var g=oe(t,s,i,function(r,I){g.terminate(),n(r,I)});return g.postMessage([e,A],A.consume?[e.buffer]:[]),function(){g.terminate()}},lA=function(e,A){return e[A]|e[A+1]<<8},tA=function(e,A){return(e[A]|e[A+1]<<8|e[A+2]<<16|e[A+3]<<24)>>>0},Gt=function(e,A){return tA(e,A)+tA(e,A+4)*4294967296},Be=function(e){(e[0]!=31||e[1]!=139||e[2]!=8)&&j(6,"invalid gzip data");var A=e[3],t=10;A&4&&(t+=(e[10]|e[11]<<8)+2);for(var s=(A>>3&1)+(A>>4&1);s>0;s-=!e[t++]);return t+(A&2)},Ut=function(){function e(A,t){typeof A=="function"&&(t=A,A={}),this.ondata=t;var s=A&&A.dictionary&&A.dictionary.subarray(-32768);this.s={i:0,b:s?s.length:0},this.o=new V(32768),this.p=new V(0),s&&this.o.set(s)}return e.prototype.e=function(A){if(this.ondata||j(5),this.d&&j(4),!this.p.length)this.p=A;else if(A.length){var t=new V(this.p.length+A.length);t.set(this.p),t.set(A,this.p.length),this.p=t}},e.prototype.c=function(A){this.s.i=+(this.d=A||!1);var t=this.s.b,s=kt(this.p,this.s,this.o);this.ondata(dA(s,t,this.s.b),this.d),this.o=dA(s,this.s.b-32768),this.s.b=this.o.length,this.p=dA(this.p,this.s.p/8|0),this.s.p&=7},e.prototype.push=function(A,t){this.e(A),this.c(t)},e}();function Qe(e,A,t){return t||(t=A,A={}),typeof t!="function"&&j(7),Ce(e,A,[ae],function(s){return Es(at(s.data[0],cs(s.data[1])))},1,t)}function at(e,A){return kt(e,{i:2},A&&A.out,A&&A.dictionary)}var ls=function(){function e(A,t){this.v=1,this.r=0,Ut.call(this,A,t)}return e.prototype.push=function(A,t){if(Ut.prototype.e.call(this,A),this.r+=A.length,this.v){var s=this.p.subarray(this.v-1),i=s.length>3?Be(s):4;if(i>s.length){if(!t)return}else this.v>1&&this.onmember&&this.onmember(this.r-s.length);this.p=s.subarray(i),this.v=0}Ut.prototype.c.call(this,t),this.s.f&&!this.s.l&&!t&&(this.v=Nt(this.s.p)+9,this.s={i:0},this.o=new V(0),this.push(new V(0),t))},e}(),Yt=typeof TextDecoder<"u"&&new TextDecoder;try{Yt.decode(ge,{stream:!0})}catch{}var he=function(e){for(var A="",t=0;;){var s=e[t++],i=(s>127)+(s>223)+(s>239);if(t+i>e.length)return{s:A,r:dA(e,t-1)};i?i==3?(s=((s&15)<<18|(e[t++]&63)<<12|(e[t++]&63)<<6|e[t++]&63)-65536,A+=String.fromCharCode(55296|s>>10,56320|s&1023)):i&1?A+=String.fromCharCode((s&31)<<6|e[t++]&63):A+=String.fromCharCode((s&15)<<12|(e[t++]&63)<<6|e[t++]&63):A+=String.fromCharCode(s)}};function Ee(e,A){if(A){for(var t="",s=0;s<e.length;s+=16384)t+=String.fromCharCode.apply(null,e.subarray(s,s+16384));return t}else{if(Yt)return Yt.decode(e);var i=he(e),n=i.s,t=i.r;return t.length&&j(8),n}}var us=function(e,A){return A+30+lA(e,A+26)+lA(e,A+28)},ys=function(e,A,t){var s=lA(e,A+28),i=Ee(e.subarray(A+46,A+46+s),!(lA(e,A+8)&2048)),n=A+46+s,g=tA(e,A+20),r=t&&g==4294967295?ce(e,n):[g,tA(e,A+24),tA(e,A+42)],I=r[0],o=r[1],a=r[2];return[lA(e,A+10),I,o,i,n+lA(e,A+30)+lA(e,A+32),a]},ce=function(e,A){for(;lA(e,A)!=1;A+=4+lA(e,A+2));return[Gt(e,A+12),Gt(e,A+4),Gt(e,A+20)]},fs=typeof queueMicrotask=="function"?queueMicrotask:typeof setTimeout=="function"?setTimeout:function(e){e()};function le(e,A,t){t||(t=A,A={}),typeof t!="function"&&j(7);var s=[],i=function(){for(var c=0;c<s.length;++c)s[c]()},n={},g=function(c,E){fs(function(){t(c,E)})};fs(function(){g=t});for(var r=e.length-22;tA(e,r)!=101010256;--r)if(!r||e.length-r>65558)return g(j(13,0,1),null),i;var I=lA(e,r+8);if(I){var o=I,a=tA(e,r+16),C=a==4294967295||o==65535;if(C){var Q=tA(e,r-12);C=tA(e,Q)==101075792,C&&(o=I=tA(e,Q+32),a=tA(e,Q+48))}for(var B=A&&A.filter,h=function(c){var E=ys(e,a,C),u=E[0],y=E[1],f=E[2],D=E[3],S=E[4],b=E[5],x=us(e,b);a=S;var m=function(p,w){p?(i(),g(p,null)):(w&&(n[D]=w),--I||g(null,n))};if(!B||B({name:D,size:y,originalSize:f,compression:u}))if(!u)m(null,dA(e,x,x+y));else if(u==8){var G=e.subarray(x,x+y);if(f<524288||y>.8*f)try{m(null,at(G,{out:new V(f)}))}catch(p){m(p,null)}else s.push(Qe(G,{size:f},m))}else m(j(14,"unknown compression type "+u,1),null);else m(null,null)},l=0;l<o;++l)h(l)}else g(null,{});return i}function ue(e,A){for(var t={},s=e.length-22;tA(e,s)!=101010256;--s)(!s||e.length-s>65558)&&j(13);var i=lA(e,s+8);if(!i)return{};var n=tA(e,s+16),g=n==4294967295||i==65535;if(g){var r=tA(e,s-12);g=tA(e,r)==101075792,g&&(i=tA(e,r+32),n=tA(e,r+48))}for(var I=A&&A.filter,o=0;o<i;++o){var a=ys(e,n,g),C=a[0],Q=a[1],B=a[2],h=a[3],l=a[4],c=a[5],E=us(e,c);n=l,(!I||I({name:h,size:Q,originalSize:B,compression:C}))&&(C?C==8?t[h]=at(e.subarray(E,E+Q),{out:new V(B)}):j(14,"unknown compression type "+C):t[h]=dA(e,E,E+Q))}return t}/**\n * @license\n * Copyright 2010-2024 Three.js Authors\n * SPDX-License-Identifier: MIT\n */const ws="172",ye="",uA="srgb",ms="srgb-linear",xs="linear",Rt="srgb";function rA(e,A,t){return Math.max(A,Math.min(t,e))}function fe(e,A){return(e%A+A)%A}function bt(e,A,t){return(1-t)*e+t*A}class $A{constructor(A,t,s,i,n,g,r,I,o){$A.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],A!==void 0&&this.set(A,t,s,i,n,g,r,I,o)}set(A,t,s,i,n,g,r,I,o){const a=this.elements;return a[0]=A,a[1]=i,a[2]=r,a[3]=t,a[4]=n,a[5]=I,a[6]=s,a[7]=g,a[8]=o,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(A){const t=this.elements,s=A.elements;return t[0]=s[0],t[1]=s[1],t[2]=s[2],t[3]=s[3],t[4]=s[4],t[5]=s[5],t[6]=s[6],t[7]=s[7],t[8]=s[8],this}extractBasis(A,t,s){return A.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),s.setFromMatrix3Column(this,2),this}setFromMatrix4(A){const t=A.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(A){return this.multiplyMatrices(this,A)}premultiply(A){return this.multiplyMatrices(A,this)}multiplyMatrices(A,t){const s=A.elements,i=t.elements,n=this.elements,g=s[0],r=s[3],I=s[6],o=s[1],a=s[4],C=s[7],Q=s[2],B=s[5],h=s[8],l=i[0],c=i[3],E=i[6],u=i[1],y=i[4],f=i[7],D=i[2],S=i[5],b=i[8];return n[0]=g*l+r*u+I*D,n[3]=g*c+r*y+I*S,n[6]=g*E+r*f+I*b,n[1]=o*l+a*u+C*D,n[4]=o*c+a*y+C*S,n[7]=o*E+a*f+C*b,n[2]=Q*l+B*u+h*D,n[5]=Q*c+B*y+h*S,n[8]=Q*E+B*f+h*b,this}multiplyScalar(A){const t=this.elements;return t[0]*=A,t[3]*=A,t[6]*=A,t[1]*=A,t[4]*=A,t[7]*=A,t[2]*=A,t[5]*=A,t[8]*=A,this}determinant(){const A=this.elements,t=A[0],s=A[1],i=A[2],n=A[3],g=A[4],r=A[5],I=A[6],o=A[7],a=A[8];return t*g*a-t*r*o-s*n*a+s*r*I+i*n*o-i*g*I}invert(){const A=this.elements,t=A[0],s=A[1],i=A[2],n=A[3],g=A[4],r=A[5],I=A[6],o=A[7],a=A[8],C=a*g-r*o,Q=r*I-a*n,B=o*n-g*I,h=t*C+s*Q+i*B;if(h===0)return this.set(0,0,0,0,0,0,0,0,0);const l=1/h;return A[0]=C*l,A[1]=(i*o-a*s)*l,A[2]=(r*s-i*g)*l,A[3]=Q*l,A[4]=(a*t-i*I)*l,A[5]=(i*n-r*t)*l,A[6]=B*l,A[7]=(s*I-o*t)*l,A[8]=(g*t-s*n)*l,this}transpose(){let A;const t=this.elements;return A=t[1],t[1]=t[3],t[3]=A,A=t[2],t[2]=t[6],t[6]=A,A=t[5],t[5]=t[7],t[7]=A,this}getNormalMatrix(A){return this.setFromMatrix4(A).invert().transpose()}transposeIntoArray(A){const t=this.elements;return A[0]=t[0],A[1]=t[3],A[2]=t[6],A[3]=t[1],A[4]=t[4],A[5]=t[7],A[6]=t[2],A[7]=t[5],A[8]=t[8],this}setUvTransform(A,t,s,i,n,g,r){const I=Math.cos(n),o=Math.sin(n);return this.set(s*I,s*o,-s*(I*g+o*r)+g+A,-i*o,i*I,-i*(-o*g+I*r)+r+t,0,0,1),this}scale(A,t){return this.premultiply(Jt.makeScale(A,t)),this}rotate(A){return this.premultiply(Jt.makeRotation(-A)),this}translate(A,t){return this.premultiply(Jt.makeTranslation(A,t)),this}makeTranslation(A,t){return A.isVector2?this.set(1,0,A.x,0,1,A.y,0,0,1):this.set(1,0,A,0,1,t,0,0,1),this}makeRotation(A){const t=Math.cos(A),s=Math.sin(A);return this.set(t,-s,0,s,t,0,0,0,1),this}makeScale(A,t){return this.set(A,0,0,0,t,0,0,0,1),this}equals(A){const t=this.elements,s=A.elements;for(let i=0;i<9;i++)if(t[i]!==s[i])return!1;return!0}fromArray(A,t=0){for(let s=0;s<9;s++)this.elements[s]=A[s+t];return this}toArray(A=[],t=0){const s=this.elements;return A[t]=s[0],A[t+1]=s[1],A[t+2]=s[2],A[t+3]=s[3],A[t+4]=s[4],A[t+5]=s[5],A[t+6]=s[6],A[t+7]=s[7],A[t+8]=s[8],A}clone(){return new this.constructor().fromArray(this.elements)}}const Jt=new $A,Ds=new $A().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),ps=new $A().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function we(){const e={enabled:!0,workingColorSpace:ms,spaces:{},convert:function(i,n,g){return this.enabled===!1||n===g||!n||!g||(this.spaces[n].transfer===Rt&&(i.r=qA(i.r),i.g=qA(i.g),i.b=qA(i.b)),this.spaces[n].primaries!==this.spaces[g].primaries&&(i.applyMatrix3(this.spaces[n].toXYZ),i.applyMatrix3(this.spaces[g].fromXYZ)),this.spaces[g].transfer===Rt&&(i.r=vA(i.r),i.g=vA(i.g),i.b=vA(i.b))),i},fromWorkingColorSpace:function(i,n){return this.convert(i,this.workingColorSpace,n)},toWorkingColorSpace:function(i,n){return this.convert(i,n,this.workingColorSpace)},getPrimaries:function(i){return this.spaces[i].primaries},getTransfer:function(i){return i===ye?xs:this.spaces[i].transfer},getLuminanceCoefficients:function(i,n=this.workingColorSpace){return i.fromArray(this.spaces[n].luminanceCoefficients)},define:function(i){Object.assign(this.spaces,i)},_getMatrix:function(i,n,g){return i.copy(this.spaces[n].toXYZ).multiply(this.spaces[g].fromXYZ)},_getDrawingBufferColorSpace:function(i){return this.spaces[i].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(i=this.workingColorSpace){return this.spaces[i].workingColorSpaceConfig.unpackColorSpace}},A=[.64,.33,.3,.6,.15,.06],t=[.2126,.7152,.0722],s=[.3127,.329];return e.define({[ms]:{primaries:A,whitePoint:s,transfer:xs,toXYZ:Ds,fromXYZ:ps,luminanceCoefficients:t,workingColorSpaceConfig:{unpackColorSpace:uA},outputColorSpaceConfig:{drawingBufferColorSpace:uA}},[uA]:{primaries:A,whitePoint:s,transfer:Rt,toXYZ:Ds,fromXYZ:ps,luminanceCoefficients:t,outputColorSpaceConfig:{drawingBufferColorSpace:uA}}}),e}const yA=we();function qA(e){return e<.04045?e*.0773993808:Math.pow(e*.9478672986+.0521327014,2.4)}function vA(e){return e<.0031308?e*12.92:1.055*Math.pow(e,.41666)-.055}class NA{constructor(A=0,t=0,s=0,i=1){this.isQuaternion=!0,this._x=A,this._y=t,this._z=s,this._w=i}static slerpFlat(A,t,s,i,n,g,r){let I=s[i+0],o=s[i+1],a=s[i+2],C=s[i+3];const Q=n[g+0],B=n[g+1],h=n[g+2],l=n[g+3];if(r===0){A[t+0]=I,A[t+1]=o,A[t+2]=a,A[t+3]=C;return}if(r===1){A[t+0]=Q,A[t+1]=B,A[t+2]=h,A[t+3]=l;return}if(C!==l||I!==Q||o!==B||a!==h){let c=1-r;const E=I*Q+o*B+a*h+C*l,u=E>=0?1:-1,y=1-E*E;if(y>Number.EPSILON){const D=Math.sqrt(y),S=Math.atan2(D,E*u);c=Math.sin(c*S)/D,r=Math.sin(r*S)/D}const f=r*u;if(I=I*c+Q*f,o=o*c+B*f,a=a*c+h*f,C=C*c+l*f,c===1-r){const D=1/Math.sqrt(I*I+o*o+a*a+C*C);I*=D,o*=D,a*=D,C*=D}}A[t]=I,A[t+1]=o,A[t+2]=a,A[t+3]=C}static multiplyQuaternionsFlat(A,t,s,i,n,g){const r=s[i],I=s[i+1],o=s[i+2],a=s[i+3],C=n[g],Q=n[g+1],B=n[g+2],h=n[g+3];return A[t]=r*h+a*C+I*B-o*Q,A[t+1]=I*h+a*Q+o*C-r*B,A[t+2]=o*h+a*B+r*Q-I*C,A[t+3]=a*h-r*C-I*Q-o*B,A}get x(){return this._x}set x(A){this._x=A,this._onChangeCallback()}get y(){return this._y}set y(A){this._y=A,this._onChangeCallback()}get z(){return this._z}set z(A){this._z=A,this._onChangeCallback()}get w(){return this._w}set w(A){this._w=A,this._onChangeCallback()}set(A,t,s,i){return this._x=A,this._y=t,this._z=s,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(A){return this._x=A.x,this._y=A.y,this._z=A.z,this._w=A.w,this._onChangeCallback(),this}setFromEuler(A,t=!0){const s=A._x,i=A._y,n=A._z,g=A._order,r=Math.cos,I=Math.sin,o=r(s/2),a=r(i/2),C=r(n/2),Q=I(s/2),B=I(i/2),h=I(n/2);switch(g){case"XYZ":this._x=Q*a*C+o*B*h,this._y=o*B*C-Q*a*h,this._z=o*a*h+Q*B*C,this._w=o*a*C-Q*B*h;break;case"YXZ":this._x=Q*a*C+o*B*h,this._y=o*B*C-Q*a*h,this._z=o*a*h-Q*B*C,this._w=o*a*C+Q*B*h;break;case"ZXY":this._x=Q*a*C-o*B*h,this._y=o*B*C+Q*a*h,this._z=o*a*h+Q*B*C,this._w=o*a*C-Q*B*h;break;case"ZYX":this._x=Q*a*C-o*B*h,this._y=o*B*C+Q*a*h,this._z=o*a*h-Q*B*C,this._w=o*a*C+Q*B*h;break;case"YZX":this._x=Q*a*C+o*B*h,this._y=o*B*C+Q*a*h,this._z=o*a*h-Q*B*C,this._w=o*a*C-Q*B*h;break;case"XZY":this._x=Q*a*C-o*B*h,this._y=o*B*C-Q*a*h,this._z=o*a*h+Q*B*C,this._w=o*a*C+Q*B*h;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+g)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(A,t){const s=t/2,i=Math.sin(s);return this._x=A.x*i,this._y=A.y*i,this._z=A.z*i,this._w=Math.cos(s),this._onChangeCallback(),this}setFromRotationMatrix(A){const t=A.elements,s=t[0],i=t[4],n=t[8],g=t[1],r=t[5],I=t[9],o=t[2],a=t[6],C=t[10],Q=s+r+C;if(Q>0){const B=.5/Math.sqrt(Q+1);this._w=.25/B,this._x=(a-I)*B,this._y=(n-o)*B,this._z=(g-i)*B}else if(s>r&&s>C){const B=2*Math.sqrt(1+s-r-C);this._w=(a-I)/B,this._x=.25*B,this._y=(i+g)/B,this._z=(n+o)/B}else if(r>C){const B=2*Math.sqrt(1+r-s-C);this._w=(n-o)/B,this._x=(i+g)/B,this._y=.25*B,this._z=(I+a)/B}else{const B=2*Math.sqrt(1+C-s-r);this._w=(g-i)/B,this._x=(n+o)/B,this._y=(I+a)/B,this._z=.25*B}return this._onChangeCallback(),this}setFromUnitVectors(A,t){let s=A.dot(t)+1;return s<Number.EPSILON?(s=0,Math.abs(A.x)>Math.abs(A.z)?(this._x=-A.y,this._y=A.x,this._z=0,this._w=s):(this._x=0,this._y=-A.z,this._z=A.y,this._w=s)):(this._x=A.y*t.z-A.z*t.y,this._y=A.z*t.x-A.x*t.z,this._z=A.x*t.y-A.y*t.x,this._w=s),this.normalize()}angleTo(A){return 2*Math.acos(Math.abs(rA(this.dot(A),-1,1)))}rotateTowards(A,t){const s=this.angleTo(A);if(s===0)return this;const i=Math.min(1,t/s);return this.slerp(A,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(A){return this._x*A._x+this._y*A._y+this._z*A._z+this._w*A._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let A=this.length();return A===0?(this._x=0,this._y=0,this._z=0,this._w=1):(A=1/A,this._x=this._x*A,this._y=this._y*A,this._z=this._z*A,this._w=this._w*A),this._onChangeCallback(),this}multiply(A){return this.multiplyQuaternions(this,A)}premultiply(A){return this.multiplyQuaternions(A,this)}multiplyQuaternions(A,t){const s=A._x,i=A._y,n=A._z,g=A._w,r=t._x,I=t._y,o=t._z,a=t._w;return this._x=s*a+g*r+i*o-n*I,this._y=i*a+g*I+n*r-s*o,this._z=n*a+g*o+s*I-i*r,this._w=g*a-s*r-i*I-n*o,this._onChangeCallback(),this}slerp(A,t){if(t===0)return this;if(t===1)return this.copy(A);const s=this._x,i=this._y,n=this._z,g=this._w;let r=g*A._w+s*A._x+i*A._y+n*A._z;if(r<0?(this._w=-A._w,this._x=-A._x,this._y=-A._y,this._z=-A._z,r=-r):this.copy(A),r>=1)return this._w=g,this._x=s,this._y=i,this._z=n,this;const I=1-r*r;if(I<=Number.EPSILON){const B=1-t;return this._w=B*g+t*this._w,this._x=B*s+t*this._x,this._y=B*i+t*this._y,this._z=B*n+t*this._z,this.normalize(),this}const o=Math.sqrt(I),a=Math.atan2(o,r),C=Math.sin((1-t)*a)/o,Q=Math.sin(t*a)/o;return this._w=g*C+this._w*Q,this._x=s*C+this._x*Q,this._y=i*C+this._y*Q,this._z=n*C+this._z*Q,this._onChangeCallback(),this}slerpQuaternions(A,t,s){return this.copy(A).slerp(t,s)}random(){const A=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),s=Math.random(),i=Math.sqrt(1-s),n=Math.sqrt(s);return this.set(i*Math.sin(A),i*Math.cos(A),n*Math.sin(t),n*Math.cos(t))}equals(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._w===this._w}fromArray(A,t=0){return this._x=A[t],this._y=A[t+1],this._z=A[t+2],this._w=A[t+3],this._onChangeCallback(),this}toArray(A=[],t=0){return A[t]=this._x,A[t+1]=this._y,A[t+2]=this._z,A[t+3]=this._w,A}fromBufferAttribute(A,t){return this._x=A.getX(t),this._y=A.getY(t),this._z=A.getZ(t),this._w=A.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(A){return this._onChangeCallback=A,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class d{constructor(A=0,t=0,s=0){d.prototype.isVector3=!0,this.x=A,this.y=t,this.z=s}set(A,t,s){return s===void 0&&(s=this.z),this.x=A,this.y=t,this.z=s,this}setScalar(A){return this.x=A,this.y=A,this.z=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setZ(A){return this.z=A,this}setComponent(A,t){switch(A){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+A)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(A){return this.x=A.x,this.y=A.y,this.z=A.z,this}add(A){return this.x+=A.x,this.y+=A.y,this.z+=A.z,this}addScalar(A){return this.x+=A,this.y+=A,this.z+=A,this}addVectors(A,t){return this.x=A.x+t.x,this.y=A.y+t.y,this.z=A.z+t.z,this}addScaledVector(A,t){return this.x+=A.x*t,this.y+=A.y*t,this.z+=A.z*t,this}sub(A){return this.x-=A.x,this.y-=A.y,this.z-=A.z,this}subScalar(A){return this.x-=A,this.y-=A,this.z-=A,this}subVectors(A,t){return this.x=A.x-t.x,this.y=A.y-t.y,this.z=A.z-t.z,this}multiply(A){return this.x*=A.x,this.y*=A.y,this.z*=A.z,this}multiplyScalar(A){return this.x*=A,this.y*=A,this.z*=A,this}multiplyVectors(A,t){return this.x=A.x*t.x,this.y=A.y*t.y,this.z=A.z*t.z,this}applyEuler(A){return this.applyQuaternion(Ms.setFromEuler(A))}applyAxisAngle(A,t){return this.applyQuaternion(Ms.setFromAxisAngle(A,t))}applyMatrix3(A){const t=this.x,s=this.y,i=this.z,n=A.elements;return this.x=n[0]*t+n[3]*s+n[6]*i,this.y=n[1]*t+n[4]*s+n[7]*i,this.z=n[2]*t+n[5]*s+n[8]*i,this}applyNormalMatrix(A){return this.applyMatrix3(A).normalize()}applyMatrix4(A){const t=this.x,s=this.y,i=this.z,n=A.elements,g=1/(n[3]*t+n[7]*s+n[11]*i+n[15]);return this.x=(n[0]*t+n[4]*s+n[8]*i+n[12])*g,this.y=(n[1]*t+n[5]*s+n[9]*i+n[13])*g,this.z=(n[2]*t+n[6]*s+n[10]*i+n[14])*g,this}applyQuaternion(A){const t=this.x,s=this.y,i=this.z,n=A.x,g=A.y,r=A.z,I=A.w,o=2*(g*i-r*s),a=2*(r*t-n*i),C=2*(n*s-g*t);return this.x=t+I*o+g*C-r*a,this.y=s+I*a+r*o-n*C,this.z=i+I*C+n*a-g*o,this}project(A){return this.applyMatrix4(A.matrixWorldInverse).applyMatrix4(A.projectionMatrix)}unproject(A){return this.applyMatrix4(A.projectionMatrixInverse).applyMatrix4(A.matrixWorld)}transformDirection(A){const t=this.x,s=this.y,i=this.z,n=A.elements;return this.x=n[0]*t+n[4]*s+n[8]*i,this.y=n[1]*t+n[5]*s+n[9]*i,this.z=n[2]*t+n[6]*s+n[10]*i,this.normalize()}divide(A){return this.x/=A.x,this.y/=A.y,this.z/=A.z,this}divideScalar(A){return this.multiplyScalar(1/A)}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this}clamp(A,t){return this.x=rA(this.x,A.x,t.x),this.y=rA(this.y,A.y,t.y),this.z=rA(this.z,A.z,t.z),this}clampScalar(A,t){return this.x=rA(this.x,A,t),this.y=rA(this.y,A,t),this.z=rA(this.z,A,t),this}clampLength(A,t){const s=this.length();return this.divideScalar(s||1).multiplyScalar(rA(s,A,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(A){return this.x*A.x+this.y*A.y+this.z*A.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,t){return this.x+=(A.x-this.x)*t,this.y+=(A.y-this.y)*t,this.z+=(A.z-this.z)*t,this}lerpVectors(A,t,s){return this.x=A.x+(t.x-A.x)*s,this.y=A.y+(t.y-A.y)*s,this.z=A.z+(t.z-A.z)*s,this}cross(A){return this.crossVectors(this,A)}crossVectors(A,t){const s=A.x,i=A.y,n=A.z,g=t.x,r=t.y,I=t.z;return this.x=i*I-n*r,this.y=n*g-s*I,this.z=s*r-i*g,this}projectOnVector(A){const t=A.lengthSq();if(t===0)return this.set(0,0,0);const s=A.dot(this)/t;return this.copy(A).multiplyScalar(s)}projectOnPlane(A){return _t.copy(this).projectOnVector(A),this.sub(_t)}reflect(A){return this.sub(_t.copy(A).multiplyScalar(2*this.dot(A)))}angleTo(A){const t=Math.sqrt(this.lengthSq()*A.lengthSq());if(t===0)return Math.PI/2;const s=this.dot(A)/t;return Math.acos(rA(s,-1,1))}distanceTo(A){return Math.sqrt(this.distanceToSquared(A))}distanceToSquared(A){const t=this.x-A.x,s=this.y-A.y,i=this.z-A.z;return t*t+s*s+i*i}manhattanDistanceTo(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)+Math.abs(this.z-A.z)}setFromSpherical(A){return this.setFromSphericalCoords(A.radius,A.phi,A.theta)}setFromSphericalCoords(A,t,s){const i=Math.sin(t)*A;return this.x=i*Math.sin(s),this.y=Math.cos(t)*A,this.z=i*Math.cos(s),this}setFromCylindrical(A){return this.setFromCylindricalCoords(A.radius,A.theta,A.y)}setFromCylindricalCoords(A,t,s){return this.x=A*Math.sin(t),this.y=s,this.z=A*Math.cos(t),this}setFromMatrixPosition(A){const t=A.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(A){const t=this.setFromMatrixColumn(A,0).length(),s=this.setFromMatrixColumn(A,1).length(),i=this.setFromMatrixColumn(A,2).length();return this.x=t,this.y=s,this.z=i,this}setFromMatrixColumn(A,t){return this.fromArray(A.elements,t*4)}setFromMatrix3Column(A,t){return this.fromArray(A.elements,t*3)}setFromEuler(A){return this.x=A._x,this.y=A._y,this.z=A._z,this}setFromColor(A){return this.x=A.r,this.y=A.g,this.z=A.b,this}equals(A){return A.x===this.x&&A.y===this.y&&A.z===this.z}fromArray(A,t=0){return this.x=A[t],this.y=A[t+1],this.z=A[t+2],this}toArray(A=[],t=0){return A[t]=this.x,A[t+1]=this.y,A[t+2]=this.z,A}fromBufferAttribute(A,t){return this.x=A.getX(t),this.y=A.getY(t),this.z=A.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const A=Math.random()*Math.PI*2,t=Math.random()*2-1,s=Math.sqrt(1-t*t);return this.x=s*Math.cos(A),this.y=t,this.z=s*Math.sin(A),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const _t=new d,Ms=new NA;class Fs{constructor(A=new d(1/0,1/0,1/0),t=new d(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=A,this.max=t}set(A,t){return this.min.copy(A),this.max.copy(t),this}setFromArray(A){this.makeEmpty();for(let t=0,s=A.length;t<s;t+=3)this.expandByPoint(fA.fromArray(A,t));return this}setFromBufferAttribute(A){this.makeEmpty();for(let t=0,s=A.count;t<s;t++)this.expandByPoint(fA.fromBufferAttribute(A,t));return this}setFromPoints(A){this.makeEmpty();for(let t=0,s=A.length;t<s;t++)this.expandByPoint(A[t]);return this}setFromCenterAndSize(A,t){const s=fA.copy(t).multiplyScalar(.5);return this.min.copy(A).sub(s),this.max.copy(A).add(s),this}setFromObject(A,t=!1){return this.makeEmpty(),this.expandByObject(A,t)}clone(){return new this.constructor().copy(this)}copy(A){return this.min.copy(A.min),this.max.copy(A.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(A){return this.isEmpty()?A.set(0,0,0):A.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(A){return this.isEmpty()?A.set(0,0,0):A.subVectors(this.max,this.min)}expandByPoint(A){return this.min.min(A),this.max.max(A),this}expandByVector(A){return this.min.sub(A),this.max.add(A),this}expandByScalar(A){return this.min.addScalar(-A),this.max.addScalar(A),this}expandByObject(A,t=!1){A.updateWorldMatrix(!1,!1);const s=A.geometry;if(s!==void 0){const n=s.getAttribute("position");if(t===!0&&n!==void 0&&A.isInstancedMesh!==!0)for(let g=0,r=n.count;g<r;g++)A.isMesh===!0?A.getVertexPosition(g,fA):fA.fromBufferAttribute(n,g),fA.applyMatrix4(A.matrixWorld),this.expandByPoint(fA);else A.boundingBox!==void 0?(A.boundingBox===null&&A.computeBoundingBox(),Ct.copy(A.boundingBox)):(s.boundingBox===null&&s.computeBoundingBox(),Ct.copy(s.boundingBox)),Ct.applyMatrix4(A.matrixWorld),this.union(Ct)}const i=A.children;for(let n=0,g=i.length;n<g;n++)this.expandByObject(i[n],t);return this}containsPoint(A){return A.x>=this.min.x&&A.x<=this.max.x&&A.y>=this.min.y&&A.y<=this.max.y&&A.z>=this.min.z&&A.z<=this.max.z}containsBox(A){return this.min.x<=A.min.x&&A.max.x<=this.max.x&&this.min.y<=A.min.y&&A.max.y<=this.max.y&&this.min.z<=A.min.z&&A.max.z<=this.max.z}getParameter(A,t){return t.set((A.x-this.min.x)/(this.max.x-this.min.x),(A.y-this.min.y)/(this.max.y-this.min.y),(A.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(A){return A.max.x>=this.min.x&&A.min.x<=this.max.x&&A.max.y>=this.min.y&&A.min.y<=this.max.y&&A.max.z>=this.min.z&&A.min.z<=this.max.z}intersectsSphere(A){return this.clampPoint(A.center,fA),fA.distanceToSquared(A.center)<=A.radius*A.radius}intersectsPlane(A){let t,s;return A.normal.x>0?(t=A.normal.x*this.min.x,s=A.normal.x*this.max.x):(t=A.normal.x*this.max.x,s=A.normal.x*this.min.x),A.normal.y>0?(t+=A.normal.y*this.min.y,s+=A.normal.y*this.max.y):(t+=A.normal.y*this.max.y,s+=A.normal.y*this.min.y),A.normal.z>0?(t+=A.normal.z*this.min.z,s+=A.normal.z*this.max.z):(t+=A.normal.z*this.max.z,s+=A.normal.z*this.min.z),t<=-A.constant&&s>=-A.constant}intersectsTriangle(A){if(this.isEmpty())return!1;this.getCenter(At),Bt.subVectors(this.max,At),KA.subVectors(A.a,At),TA.subVectors(A.b,At),ZA.subVectors(A.c,At),kA.subVectors(TA,KA),GA.subVectors(ZA,TA),_A.subVectors(KA,ZA);let t=[0,-kA.z,kA.y,0,-GA.z,GA.y,0,-_A.z,_A.y,kA.z,0,-kA.x,GA.z,0,-GA.x,_A.z,0,-_A.x,-kA.y,kA.x,0,-GA.y,GA.x,0,-_A.y,_A.x,0];return!zt(t,KA,TA,ZA,Bt)||(t=[1,0,0,0,1,0,0,0,1],!zt(t,KA,TA,ZA,Bt))?!1:(Qt.crossVectors(kA,GA),t=[Qt.x,Qt.y,Qt.z],zt(t,KA,TA,ZA,Bt))}clampPoint(A,t){return t.copy(A).clamp(this.min,this.max)}distanceToPoint(A){return this.clampPoint(A,fA).distanceTo(A)}getBoundingSphere(A){return this.isEmpty()?A.makeEmpty():(this.getCenter(A.center),A.radius=this.getSize(fA).length()*.5),A}intersect(A){return this.min.max(A.min),this.max.min(A.max),this.isEmpty()&&this.makeEmpty(),this}union(A){return this.min.min(A.min),this.max.max(A.max),this}applyMatrix4(A){return this.isEmpty()?this:(MA[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(A),MA[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(A),MA[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(A),MA[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(A),MA[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(A),MA[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(A),MA[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(A),MA[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(A),this.setFromPoints(MA),this)}translate(A){return this.min.add(A),this.max.add(A),this}equals(A){return A.min.equals(this.min)&&A.max.equals(this.max)}}const MA=[new d,new d,new d,new d,new d,new d,new d,new d],fA=new d,Ct=new Fs,KA=new d,TA=new d,ZA=new d,kA=new d,GA=new d,_A=new d,At=new d,Bt=new d,Qt=new d,zA=new d;function zt(e,A,t,s,i){for(let n=0,g=e.length-3;n<=g;n+=3){zA.fromArray(e,n);const r=i.x*Math.abs(zA.x)+i.y*Math.abs(zA.y)+i.z*Math.abs(zA.z),I=A.dot(zA),o=t.dot(zA),a=s.dot(zA);if(Math.max(-Math.max(I,o,a),Math.min(I,o,a))>r)return!1}return!0}const Ss={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},UA={h:0,s:0,l:0},ht={h:0,s:0,l:0};function Lt(e,A,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?e+(A-e)*6*t:t<1/2?A:t<2/3?e+(A-e)*6*(2/3-t):e}class Ht{constructor(A,t,s){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(A,t,s)}set(A,t,s){if(t===void 0&&s===void 0){const i=A;i&&i.isColor?this.copy(i):typeof i=="number"?this.setHex(i):typeof i=="string"&&this.setStyle(i)}else this.setRGB(A,t,s);return this}setScalar(A){return this.r=A,this.g=A,this.b=A,this}setHex(A,t=uA){return A=Math.floor(A),this.r=(A>>16&255)/255,this.g=(A>>8&255)/255,this.b=(A&255)/255,yA.toWorkingColorSpace(this,t),this}setRGB(A,t,s,i=yA.workingColorSpace){return this.r=A,this.g=t,this.b=s,yA.toWorkingColorSpace(this,i),this}setHSL(A,t,s,i=yA.workingColorSpace){if(A=fe(A,1),t=rA(t,0,1),s=rA(s,0,1),t===0)this.r=this.g=this.b=s;else{const n=s<=.5?s*(1+t):s+t-s*t,g=2*s-n;this.r=Lt(g,n,A+1/3),this.g=Lt(g,n,A),this.b=Lt(g,n,A-1/3)}return yA.toWorkingColorSpace(this,i),this}setStyle(A,t=uA){function s(n){n!==void 0&&parseFloat(n)<1&&console.warn("THREE.Color: Alpha component of "+A+" will be ignored.")}let i;if(i=/^(\\w+)\\(([^\\)]*)\\)/.exec(A)){let n;const g=i[1],r=i[2];switch(g){case"rgb":case"rgba":if(n=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r))return s(n[4]),this.setRGB(Math.min(255,parseInt(n[1],10))/255,Math.min(255,parseInt(n[2],10))/255,Math.min(255,parseInt(n[3],10))/255,t);if(n=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r))return s(n[4]),this.setRGB(Math.min(100,parseInt(n[1],10))/100,Math.min(100,parseInt(n[2],10))/100,Math.min(100,parseInt(n[3],10))/100,t);break;case"hsl":case"hsla":if(n=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r))return s(n[4]),this.setHSL(parseFloat(n[1])/360,parseFloat(n[2])/100,parseFloat(n[3])/100,t);break;default:console.warn("THREE.Color: Unknown color model "+A)}}else if(i=/^\\#([A-Fa-f\\d]+)$/.exec(A)){const n=i[1],g=n.length;if(g===3)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,t);if(g===6)return this.setHex(parseInt(n,16),t);console.warn("THREE.Color: Invalid hex color "+A)}else if(A&&A.length>0)return this.setColorName(A,t);return this}setColorName(A,t=uA){const s=Ss[A.toLowerCase()];return s!==void 0?this.setHex(s,t):console.warn("THREE.Color: Unknown color "+A),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(A){return this.r=A.r,this.g=A.g,this.b=A.b,this}copySRGBToLinear(A){return this.r=qA(A.r),this.g=qA(A.g),this.b=qA(A.b),this}copyLinearToSRGB(A){return this.r=vA(A.r),this.g=vA(A.g),this.b=vA(A.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(A=uA){return yA.fromWorkingColorSpace(sA.copy(this),A),Math.round(rA(sA.r*255,0,255))*65536+Math.round(rA(sA.g*255,0,255))*256+Math.round(rA(sA.b*255,0,255))}getHexString(A=uA){return("000000"+this.getHex(A).toString(16)).slice(-6)}getHSL(A,t=yA.workingColorSpace){yA.fromWorkingColorSpace(sA.copy(this),t);const s=sA.r,i=sA.g,n=sA.b,g=Math.max(s,i,n),r=Math.min(s,i,n);let I,o;const a=(r+g)/2;if(r===g)I=0,o=0;else{const C=g-r;switch(o=a<=.5?C/(g+r):C/(2-g-r),g){case s:I=(i-n)/C+(i<n?6:0);break;case i:I=(n-s)/C+2;break;case n:I=(s-i)/C+4;break}I/=6}return A.h=I,A.s=o,A.l=a,A}getRGB(A,t=yA.workingColorSpace){return yA.fromWorkingColorSpace(sA.copy(this),t),A.r=sA.r,A.g=sA.g,A.b=sA.b,A}getStyle(A=uA){yA.fromWorkingColorSpace(sA.copy(this),A);const t=sA.r,s=sA.g,i=sA.b;return A!==uA?`color(${A} ${t.toFixed(3)} ${s.toFixed(3)} ${i.toFixed(3)})`:`rgb(${Math.round(t*255)},${Math.round(s*255)},${Math.round(i*255)})`}offsetHSL(A,t,s){return this.getHSL(UA),this.setHSL(UA.h+A,UA.s+t,UA.l+s)}add(A){return this.r+=A.r,this.g+=A.g,this.b+=A.b,this}addColors(A,t){return this.r=A.r+t.r,this.g=A.g+t.g,this.b=A.b+t.b,this}addScalar(A){return this.r+=A,this.g+=A,this.b+=A,this}sub(A){return this.r=Math.max(0,this.r-A.r),this.g=Math.max(0,this.g-A.g),this.b=Math.max(0,this.b-A.b),this}multiply(A){return this.r*=A.r,this.g*=A.g,this.b*=A.b,this}multiplyScalar(A){return this.r*=A,this.g*=A,this.b*=A,this}lerp(A,t){return this.r+=(A.r-this.r)*t,this.g+=(A.g-this.g)*t,this.b+=(A.b-this.b)*t,this}lerpColors(A,t,s){return this.r=A.r+(t.r-A.r)*s,this.g=A.g+(t.g-A.g)*s,this.b=A.b+(t.b-A.b)*s,this}lerpHSL(A,t){this.getHSL(UA),A.getHSL(ht);const s=bt(UA.h,ht.h,t),i=bt(UA.s,ht.s,t),n=bt(UA.l,ht.l,t);return this.setHSL(s,i,n),this}setFromVector3(A){return this.r=A.x,this.g=A.y,this.b=A.z,this}applyMatrix3(A){const t=this.r,s=this.g,i=this.b,n=A.elements;return this.r=n[0]*t+n[3]*s+n[6]*i,this.g=n[1]*t+n[4]*s+n[7]*i,this.b=n[2]*t+n[5]*s+n[8]*i,this}equals(A){return A.r===this.r&&A.g===this.g&&A.b===this.b}fromArray(A,t=0){return this.r=A[t],this.g=A[t+1],this.b=A[t+2],this}toArray(A=[],t=0){return A[t]=this.r,A[t+1]=this.g,A[t+2]=this.b,A}fromBufferAttribute(A,t){return this.r=A.getX(t),this.g=A.getY(t),this.b=A.getZ(t),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}}const sA=new Ht;Ht.NAMES=Ss,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:ws}})),typeof window<"u"&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=ws);const ds=-12,Ns=9,XA=Math.exp(-30),me=11,xe=11,ks=1<<me,Gs=1<<xe,Us=1;function De(e){var n;let A=!1;const t=e.split(`\n`).map(g=>{const r=g.trimEnd();return A?r:r.length>0?(A=!0,r):null}).filter(g=>g!=null);for(;t.length>0&&t[t.length-1].length===0;)t.pop();if(t.length===0)return[];const s=(n=t[0].match(/^\\s*/))==null?void 0:n[0];if(!s)return t;const i=new RegExp(`^${s}`);return t.map(g=>g.replace(i,""))}function pe(e){return De(e).join(`\n`)}const qt=new Float32Array(1),Ys=new Uint32Array(qt.buffer);function WA(e){qt[0]=e;const A=Ys[0],t=A>>31&1,s=A>>23&255,i=A&8388607,n=t<<15;if(s===255)return i!==0?n|32767:n|31744;const g=s-127+15;if(g>=31)return n|31744;if(g<=0){if(g<-10)return n;const I=(i|8388608)>>1-g+13;return n|I}const r=i>>13;return n|g<<10|r}function O(e){const A=e>>15&1,t=e>>10&31,s=e&1023;let i;if(t===0)if(s===0)i=A<<31;else{let n=s,g=-14;for(;(n&1024)===0;)n<<=1,g--;n&=1023;const r=g+127,I=n<<13;i=A<<31|r<<23|I}else if(t===31)s===0?i=A<<31|2139095040:i=A<<31|2143289344;else{const n=t-15+127,g=s<<13;i=A<<31|n<<23|g}return Ys[0]=i,qt[0]}function QA(e){return Math.max(0,Math.min(255,Math.round(e*255)))}function Me(e){const A=[],t=new Set;function s(i){i&&typeof i=="object"&&!t.has(i)&&(t.add(i),i instanceof ArrayBuffer?A.push(i):ArrayBuffer.isView(i)?A.push(i.buffer):Array.isArray(i)?i.forEach(s):Object.values(i).forEach(s))}return s(e),A}function vt(e,A,t,s,i,n,g,r,I,o,a,C,Q,B,h,l,c){const E=(c==null?void 0:c.rgbMin)??0,y=((c==null?void 0:c.rgbMax)??1)-E,f=QA((B-E)/y),D=QA((h-E)/y),S=QA((l-E)/y),b=QA(Q),x=_s(new NA(I,o,a,C)),m=x&255,G=x>>>8&255,p=x>>>16&255,w=(c==null?void 0:c.lnScaleMin)??ds,z=254/(((c==null?void 0:c.lnScaleMax)??Ns)-w),Y=n<XA?0:Math.min(255,Math.max(1,Math.round((Math.log(n)-w)*z)+1)),N=g<XA?0:Math.min(255,Math.max(1,Math.round((Math.log(g)-w)*z)+1)),q=r<XA?0:Math.min(255,Math.max(1,Math.round((Math.log(r)-w)*z)+1)),T=WA(t),v=WA(s),P=WA(i),Z=A*4;e[Z]=f|D<<8|S<<16|b<<24,e[Z+1]=T|v<<16,e[Z+2]=P|m<<16|G<<24,e[Z+3]=Y|N<<8|q<<16|p<<24}function Rs(e,A,t,s,i){const n=WA(t),g=WA(s),r=WA(i),I=A*4;e[I+1]=n|g<<16,e[I+2]=r|e[I+2]&4294901760}function bs(e,A,t,s,i,n){const g=(n==null?void 0:n.lnScaleMin)??ds,I=254/(((n==null?void 0:n.lnScaleMax)??Ns)-g),o=t<XA?0:Math.min(255,Math.max(1,Math.round((Math.log(t)-g)*I)+1)),a=s<XA?0:Math.min(255,Math.max(1,Math.round((Math.log(s)-g)*I)+1)),C=i<XA?0:Math.min(255,Math.max(1,Math.round((Math.log(i)-g)*I)+1)),Q=A*4;e[Q+3]=o|a<<8|C<<16|e[Q+3]&4278190080}function Js(e,A,t,s,i,n){const g=_s(new NA(t,s,i,n)),r=g&255,I=g>>>8&255,o=g>>>16&255,a=A*4;e[a+2]=e[a+2]&65535|r<<16|I<<24,e[a+3]=e[a+3]&16777215|o<<24}function Fe(e,A,t,s,i,n,g){const r=(g==null?void 0:g.rgbMin)??0,o=((g==null?void 0:g.rgbMax)??1)-r,a=QA((t-r)/o),C=QA((s-r)/o),Q=QA((i-r)/o),B=QA(n),h=A*4;e[h]=a|C<<8|Q<<16|B<<24}function Se(e,A,t,s,i,n){const g=(n==null?void 0:n.rgbMin)??0,I=((n==null?void 0:n.rgbMax)??1)-g,o=QA((t-g)/I),a=QA((s-g)/I),C=QA((i-g)/I),Q=A*4;e[Q]=o|a<<8|C<<16|e[Q]&4278190080}function de(e,A,t){const s=QA(t),i=A*4;e[i]=e[i]&16777215|s<<24}new d,new d,new Ht;function Ne(e){const A=ks,t=Math.max(Us,Math.min(Gs,Math.ceil(e/A))),s=Math.ceil(e/(A*t)),i=A*t*s;return{width:A,height:t,depth:s,maxSplats:i}}function Et(e){const A=ks,t=Math.max(Us,Math.min(Gs,Math.ceil(e/A))),s=Math.ceil(e/(A*t));return A*t*s}pe(`\n precision highp float;\n\n in vec3 position;\n\n void main() {\n gl_Position = vec4(position.xy, 0.0, 1.0);\n }\n`);function _s(e){const A=e.clone().normalize();A.w<0&&A.set(-A.x,-A.y,-A.z,-A.w);const t=2*Math.acos(A.w),s=Math.sqrt(A.x*A.x+A.y*A.y+A.z*A.z),i=s<1e-6?new d(1,0,0):new d(A.x,A.y,A.z).divideScalar(s),n=Math.abs(i.x)+Math.abs(i.y)+Math.abs(i.z);let g=i.x/n,r=i.y/n;if(i.z<0){const B=g;g=(1-Math.abs(r))*(g>=0?1:-1),r=(1-Math.abs(B))*(r>=0?1:-1)}const I=g*.5+.5,o=r*.5+.5,a=Math.round(I*255),C=Math.round(o*255);return Math.round(t*(255/Math.PI))<<16|C<<8|a}function ct(e,A,t,s){const i=Math.max(-127,Math.min(127,e*127)),n=Math.max(-127,Math.min(127,A*127)),g=Math.max(-127,Math.min(127,t*127)),r=Math.max(-127,Math.min(127,s*127));return i&255|(n&255)<<8|(g&255)<<16|(r&255)<<24}function lt(e,A,t,s){const i=(s==null?void 0:s.sh1Min)??-1,n=(s==null?void 0:s.sh1Max)??1,g=.5*(i+n),r=63/(n-i),I=A*2;for(let o=0;o<9;++o){const a=(t[o]-g)*r,C=Math.round(Math.max(-63,Math.min(63,a)))&127,Q=o*7,B=Q+7,h=Math.floor(Q/32),l=Q-h*32,c=C<<l&4294967295;if(e[I+h]|=c,B>h*32+32){const E=C>>>32-l&4294967295;e[I+h+1]|=E}}}function ut(e,A,t,s){const i=(s==null?void 0:s.sh2Min)??-1,n=(s==null?void 0:s.sh2Max)??1,g=.5*(i+n),r=.5/(n-i);e[A*4+0]=ct((t[0]-g)*r,(t[1]-g)*r,(t[2]-g)*r,(t[3]-g)*r),e[A*4+1]=ct((t[4]-g)*r,(t[5]-g)*r,(t[6]-g)*r,(t[7]-g)*r),e[A*4+2]=ct((t[8]-g)*r,(t[9]-g)*r,(t[10]-g)*r,(t[11]-g)*r),e[A*4+3]=ct((t[12]-g)*r,(t[13]-g)*r,(t[14]-g)*r,0)}function yt(e,A,t,s){const i=(s==null?void 0:s.sh3Min)??-1,n=(s==null?void 0:s.sh3Max)??1,g=.5*(i+n),r=31/(n-i),I=A*4;for(let o=0;o<21;++o){const a=(t[o]-g)*r,C=Math.round(Math.max(-31,Math.min(31,a)))&63,Q=o*6,B=Q+6,h=Math.floor(Q/32),l=Q-h*32,c=C<<l&4294967295;if(e[I+h]|=c,B>h*32+32){const E=C>>>32-l&4294967295;e[I+h+1]|=E}}}function ke(e,A){const t=[];let s=0,i=null;const n=new ls((I,o)=>{if(t.push(I),s+=I.length,o||s>=A){const a=new Uint8Array(s);let C=0;for(const Q of t)a.set(Q,C),C+=Q.length;i=a.slice(0,A)}}),g=1024;let r=0;for(;i==null&&r<e.length;){const I=e.slice(r,r+g);n.push(I,!1),r+=g}if(i==null&&(n.push(new Uint8Array,!0),i==null))throw new Error("Failed to decompress partial gzip");return i}class Ge{constructor({fileBytes:A,chunkBytes:t=64*1024}){this.fileBytes=A,this.chunkBytes=t,this.offset=0,this.chunks=[],this.totalBytes=0,this.gunzip=new ls((s,i)=>{this.chunks.push(s),this.totalBytes+=s.length})}read(A){for(;this.totalBytes<A&&this.offset<this.fileBytes.length;){const n=Math.min(this.offset+this.chunkBytes,this.fileBytes.length);this.gunzip.push(this.fileBytes.subarray(this.offset,n),!1),this.offset=n}if(this.totalBytes<A&&this.offset>=this.fileBytes.length&&this.gunzip.push(new Uint8Array(0),!0),this.totalBytes<A)throw new Error(`Unexpected EOF: needed ${A}, got ${this.totalBytes}`);const t=new Uint8Array(this.totalBytes);let s=0;for(const n of this.chunks)t.set(n,s),s+=n.length;const i=t.subarray(0,A);return this.chunks=[t.subarray(A)],this.totalBytes-=A,i}}function zs(e,A,t){const s=Math.floor(e.length/32);if(s*32!==e.length)throw new Error("Invalid .splat file size");A(s);const i=new Float32Array(e.buffer);for(let n=0;n<s;++n){const g=n*32,r=n*8,I=i[r+0],o=i[r+1],a=i[r+2],C=i[r+3],Q=i[r+4],B=i[r+5],h=e[g+24]/255,l=e[g+25]/255,c=e[g+26]/255,E=e[g+27]/255,u=(e[g+28]-128)/128,y=(e[g+29]-128)/128,f=(e[g+30]-128)/128,D=(e[g+31]-128)/128;t(n,I,o,a,C,Q,B,y,f,D,u,E,h,l,c)}}function Ue(e,A){let t=0,s=0,i=new Uint32Array(0);return zs(e,n=>{t=n,s=Et(t),i=new Uint32Array(s*4)},(n,g,r,I,o,a,C,Q,B,h,l,c,E,u,y)=>{vt(i,n,g,r,I,o,a,C,Q,B,h,l,c,E,u,y,A)}),{packedArray:i,numSplats:t}}const ft={0:{bytesPerCenter:12,bytesPerScale:12,bytesPerRotation:16,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:4,scaleOffsetBytes:12,rotationOffsetBytes:24,colorOffsetBytes:40,sphericalHarmonicsOffsetBytes:44,scaleRange:1},1:{bytesPerCenter:6,bytesPerScale:6,bytesPerRotation:8,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:2,scaleOffsetBytes:6,rotationOffsetBytes:12,colorOffsetBytes:20,sphericalHarmonicsOffsetBytes:24,scaleRange:32767},2:{bytesPerCenter:6,bytesPerScale:6,bytesPerRotation:8,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:1,scaleOffsetBytes:6,rotationOffsetBytes:12,colorOffsetBytes:20,sphericalHarmonicsOffsetBytes:24,scaleRange:32767}},Ls={0:0,1:9,2:24,3:45};function Ye(e,A,t,s){var l;let g=0;const r=new DataView(e.buffer,g,4096);g+=4096;const I=r.getUint8(0),o=r.getUint8(1);if(I!==0||o<1)throw new Error(`Unsupported .ksplat version: ${I}.${o}`);const a=r.getUint32(4,!0);r.getUint32(16,!0);const C=r.getUint16(20,!0);if(C<0||C>2)throw new Error(`Invalid .ksplat compression level: ${C}`);const Q=r.getFloat32(36,!0)||-1.5,B=r.getFloat32(40,!0)||1.5;let h=4096+a*1024;for(let c=0;c<a;++c){let E=function(nA,U){if(C===0)return k.getFloat32(nA+J+U*4,!0);if(C===1)return O(k.getUint16(nA+J+U*2,!0));const cA=k.getUint8(nA+J+U)/255;return Q+cA*(B-Q)};const u=new DataView(e.buffer,g,1024);g+=1024;const y=u.getUint32(0,!0),f=u.getUint32(4,!0),D=u.getUint32(8,!0),S=u.getUint32(12,!0),b=u.getFloat32(16,!0),x=u.getUint16(20,!0),m=(u.getUint32(24,!0)||((l=ft[C])==null?void 0:l.scaleRange))??1,G=u.getUint32(32,!0),p=G*D,w=u.getUint32(36,!0),M=w*4,z=x*S+M,Y=u.getUint16(40,!0),N=Ls[Y],{bytesPerCenter:q,bytesPerScale:T,bytesPerRotation:v,bytesPerColor:P,bytesPerSphericalHarmonicsComponent:Z,scaleOffsetBytes:W,rotationOffsetBytes:L,colorOffsetBytes:K,sphericalHarmonicsOffsetBytes:J}=ft[C],R=q+T+v+P+N*Z,F=R*f,eA=F+z,iA=[0,3,6,1,4,7,2,5,8],IA=[9,14,19,10,15,20,11,16,21,12,17,22,13,18,23],gA=[24,31,38,25,32,39,26,33,40,27,34,41,28,35,42,29,36,43,30,37,44],oA=Y>=1?new Float32Array(3*3):void 0,aA=Y>=2?new Float32Array(5*3):void 0,FA=Y>=3?new Float32Array(7*3):void 0,CA=b/2/m,hA=h+M,EA=h+z,k=new DataView(e.buffer,EA,F),$=new Float32Array(e.buffer,hA,S*3),wA=new Uint32Array(e.buffer,h,w);let H=G,RA=p;for(let nA=0;nA<y;++nA){const U=nA*R;let cA;if(nA<p)cA=Math.floor(nA/D);else{const pA=wA[H-G];nA>=RA+pA&&(H+=1,RA+=pA),cA=H}const AA=C===0?k.getFloat32(U+0,!0):(k.getUint16(U+0,!0)-m)*CA+$[3*cA+0],_=C===0?k.getFloat32(U+4,!0):(k.getUint16(U+2,!0)-m)*CA+$[3*cA+1],mA=C===0?k.getFloat32(U+8,!0):(k.getUint16(U+4,!0)-m)*CA+$[3*cA+2],et=C===0?k.getFloat32(U+W+0,!0):O(k.getUint16(U+W+0,!0)),it=C===0?k.getFloat32(U+W+4,!0):O(k.getUint16(U+W+2,!0)),Xt=C===0?k.getFloat32(U+W+8,!0):O(k.getUint16(U+W+4,!0)),Wt=C===0?k.getFloat32(U+L+0,!0):O(k.getUint16(U+L+0,!0)),Pt=C===0?k.getFloat32(U+L+4,!0):O(k.getUint16(U+L+2,!0)),Vt=C===0?k.getFloat32(U+L+8,!0):O(k.getUint16(U+L+4,!0)),jt=C===0?k.getFloat32(U+L+12,!0):O(k.getUint16(U+L+6,!0)),Ot=k.getUint8(U+K+0)/255,$t=k.getUint8(U+K+1)/255,As=k.getUint8(U+K+2)/255,ts=k.getUint8(U+K+3)/255;if(t(nA,AA,_,mA,et,it,Xt,Pt,Vt,jt,Wt,ts,Ot,$t,As),Y>=1&&oA){for(const[pA,LA]of iA.entries())oA[pA]=E(U,LA);if(aA)for(const[pA,LA]of IA.entries())aA[pA]=E(U,LA);if(FA)for(const[pA,LA]of gA.entries())FA[pA]=E(U,LA);s==null||s(nA,oA,aA,FA)}}h+=eA}}function Re(e,A){var u;let i=0;const n=new DataView(e.buffer,i,4096);i+=4096;const g=n.getUint8(0),r=n.getUint8(1);if(g!==0||r<1)throw new Error(`Unsupported .ksplat version: ${g}.${r}`);const I=n.getUint32(4,!0),o=n.getUint32(16,!0),a=n.getUint16(20,!0);if(a<0||a>2)throw new Error(`Invalid .ksplat compression level: ${a}`);const C=n.getFloat32(36,!0)||-1.5,Q=n.getFloat32(40,!0)||1.5,B=o,h=Et(B),l=new Uint32Array(h*4),c={};let E=4096+I*1024;for(let y=0;y<I;++y){let f=function(AA,_){if(a===0)return H.getFloat32(AA+eA+_*4,!0);if(a===1)return O(H.getUint16(AA+eA+_*2,!0));const mA=H.getUint8(AA+eA+_)/255;return C+mA*(Q-C)};const D=new DataView(e.buffer,i,1024);i+=1024;const S=D.getUint32(0,!0),b=D.getUint32(4,!0),x=D.getUint32(8,!0),m=D.getUint32(12,!0),G=D.getFloat32(16,!0),p=D.getUint16(20,!0),w=(D.getUint32(24,!0)||((u=ft[a])==null?void 0:u.scaleRange))??1,M=D.getUint32(32,!0),z=M*x,Y=D.getUint32(36,!0),N=Y*4,q=p*m+N,T=D.getUint16(40,!0),v=Ls[T],{bytesPerCenter:P,bytesPerScale:Z,bytesPerRotation:W,bytesPerColor:L,bytesPerSphericalHarmonicsComponent:K,scaleOffsetBytes:J,rotationOffsetBytes:R,colorOffsetBytes:F,sphericalHarmonicsOffsetBytes:eA}=ft[a],iA=P+Z+W+L+v*K,IA=iA*b,gA=IA+q,oA=[0,3,6,1,4,7,2,5,8],aA=[9,14,19,10,15,20,11,16,21,12,17,22,13,18,23],FA=[24,31,38,25,32,39,26,33,40,27,34,41,28,35,42,29,36,43,30,37,44],CA=T>=1?new Float32Array(3*3):void 0,hA=T>=2?new Float32Array(5*3):void 0,EA=T>=3?new Float32Array(7*3):void 0,k=G/2/w,$=E+N,wA=E+q,H=new DataView(e.buffer,wA,IA),RA=new Float32Array(e.buffer,$,m*3),nA=new Uint32Array(e.buffer,E,Y);let U=M,cA=z;for(let AA=0;AA<S;++AA){const _=AA*iA;let mA;if(AA<z)mA=Math.floor(AA/x);else{const bA=nA[U-M];AA>=cA+bA&&(U+=1,cA+=bA),mA=U}const et=a===0?H.getFloat32(_+0,!0):(H.getUint16(_+0,!0)-w)*k+RA[3*mA+0],it=a===0?H.getFloat32(_+4,!0):(H.getUint16(_+2,!0)-w)*k+RA[3*mA+1],Xt=a===0?H.getFloat32(_+8,!0):(H.getUint16(_+4,!0)-w)*k+RA[3*mA+2],Wt=a===0?H.getFloat32(_+J+0,!0):O(H.getUint16(_+J+0,!0)),Pt=a===0?H.getFloat32(_+J+4,!0):O(H.getUint16(_+J+2,!0)),Vt=a===0?H.getFloat32(_+J+8,!0):O(H.getUint16(_+J+4,!0)),jt=a===0?H.getFloat32(_+R+0,!0):O(H.getUint16(_+R+0,!0)),Ot=a===0?H.getFloat32(_+R+4,!0):O(H.getUint16(_+R+2,!0)),$t=a===0?H.getFloat32(_+R+8,!0):O(H.getUint16(_+R+4,!0)),As=a===0?H.getFloat32(_+R+12,!0):O(H.getUint16(_+R+6,!0)),ts=H.getUint8(_+F+0)/255,pA=H.getUint8(_+F+1)/255,LA=H.getUint8(_+F+2)/255,Oe=H.getUint8(_+F+3)/255;if(vt(l,AA,et,it,Xt,Wt,Pt,Vt,Ot,$t,As,jt,Oe,ts,pA,LA,A),T>=1){if(CA){c.sh1||(c.sh1=new Uint32Array(B*2));for(const[bA,nt]of oA.entries())CA[bA]=f(_,nt);lt(c.sh1,AA,CA,A)}if(hA){c.sh2||(c.sh2=new Uint32Array(B*4));for(const[bA,nt]of aA.entries())hA[bA]=f(_,nt);ut(c.sh2,AA,hA,A)}if(EA){c.sh3||(c.sh3=new Uint32Array(B*4));for(const[bA,nt]of FA.entries())EA[bA]=f(_,nt);yt(c.sh3,AA,EA,A)}}}E+=gA}return{packedArray:l,numSplats:B,extra:c}}const VA=class VA{constructor({fileBytes:A}){this.header="",this.littleEndian=!0,this.elements={},this.comments=[],this.data=null,this.numSplats=0,this.fileBytes=A instanceof ArrayBuffer?new Uint8Array(A):A}async parseHeader(){const t=new ReadableStream({start:g=>{g.enqueue(this.fileBytes.slice(0,65536)),g.close()}}).pipeThrough(new TextDecoderStream).getReader();this.header="";const s=`end_header\n`;for(;;){const{value:g,done:r}=await t.read();if(r)throw new Error("Failed to read header");this.header+=g;const I=this.header.indexOf(s);if(I>=0){this.header=this.header.slice(0,I+s.length);break}}const i=new TextEncoder().encode(this.header).length;this.data=new DataView(this.fileBytes.buffer,i),this.elements={};let n=null;this.comments=[],this.header.trim().split(`\n`).forEach((g,r)=>{const I=g.trim();if(r===0){if(I!=="ply")throw new Error("Invalid PLY header");return}if(I.length===0)return;const o=I.split(" ");switch(o[0]){case"format":if(o[1]==="binary_little_endian")this.littleEndian=!0;else if(o[1]==="binary_big_endian")this.littleEndian=!1;else throw new Error(`Unsupported PLY format: ${o[1]}`);if(o[2]!=="1.0")throw new Error(`Unsupported PLY version: ${o[2]}`);break;case"end_header":break;case"comment":this.comments.push(I.slice(8));break;case"element":{const a=o[1];n={name:a,count:Number.parseInt(o[2]),properties:{}},this.elements[a]=n;break}case"property":if(n==null)throw new Error("Property must be inside an element");o[1]==="list"?n.properties[o[4]]={isList:!0,type:o[3],countType:o[2]}:n.properties[o[2]]={isList:!1,type:o[1]};break}}),this.elements.vertex&&(this.numSplats=this.elements.vertex.count)}parseData(A){let t=0;const s=this.data;if(s==null)throw new Error("No data to parse");for(const i in this.elements){const n=this.elements[i],{count:g,properties:r}=n,I={},o=[];for(const[C,Q]of Object.entries(r))Q.isList?(I[C]=[],o.push(()=>{const B=I[C];B.length=xt[Q.countType](s,t,this.littleEndian),t+=PA[Q.countType];for(let h=0;h<B.length;h++)B[h]=xt[Q.type](s,t,this.littleEndian),t+=PA[Q.type]})):(I[C]=0,o.push(()=>{I[C]=xt[Q.type](s,t,this.littleEndian),t+=PA[Q.type]}));const a=A(n)??(()=>{});for(let C=0;C<g;C++){for(const Q of o)Q();a(C,I)}}}parseSplats(A,t){if(this.elements.vertex==null)throw new Error("No vertex element found");let s=!1;const i=[];let n=0,g=[],r=[],I=[],o,a,C;function Q(){const E=Je[n];g=new Array(3).fill(null).flatMap((u,y)=>[0,1,2].map((f,D)=>`f_rest_${y+D*E/3}`)),r=new Array(5).fill(null).flatMap((u,y)=>[0,1,2].map((f,D)=>`f_rest_${3+y+D*E/3}`)),I=new Array(7).fill(null).flatMap((u,y)=>[0,1,2].map((f,D)=>`f_rest_${8+y+D*E/3}`)),o=n>=1?new Float32Array(3*3):void 0,a=n>=2?new Float32Array(5*3):void 0,C=n>=3?new Float32Array(7*3):void 0}function B(E,u){if(!o)throw new Error("Missing sh1");for(const[y,f]of g.entries())o[y]=u[f]*8/255-4;if(a)for(const[y,f]of r.entries())a[y]=u[f]*8/255-4;if(C)for(const[y,f]of I.entries())C[y]=u[f]*8/255-4;t==null||t(E,o,a,C)}function h(E){const{min_x:u,min_y:y,min_z:f,max_x:D,max_y:S,max_z:b,min_scale_x:x,min_scale_y:m,min_scale_z:G,max_scale_x:p,max_scale_y:w,max_scale_z:M}=E.properties;if(!u||!y||!f||!D||!S||!b||!x||!m||!G||!p||!w||!M)throw new Error("Missing PLY chunk properties");return s=!0,(z,Y)=>{const{min_x:N,min_y:q,min_z:T,max_x:v,max_y:P,max_z:Z,min_scale_x:W,min_scale_y:L,min_scale_z:K,max_scale_x:J,max_scale_y:R,max_scale_z:F,min_r:eA,min_g:iA,min_b:IA,max_r:gA,max_g:oA,max_b:aA}=Y;i.push({min_x:N,min_y:q,min_z:T,max_x:v,max_y:P,max_z:Z,min_scale_x:W,min_scale_y:L,min_scale_z:K,max_scale_x:J,max_scale_y:R,max_scale_z:F,min_r:eA,min_g:iA,min_b:IA,max_r:gA,max_g:oA,max_b:aA})}}function l(E){if(t&&E.name==="sh")return n=qs(E.properties),Q(),B;if(E.name!=="vertex")return null;const{packed_position:u,packed_rotation:y,packed_scale:f,packed_color:D}=E.properties;if(!u||!y||!f||!D)throw new Error("Missing PLY properties: packed_position, packed_rotation, packed_scale, packed_color");const S=Math.sqrt(2);return(b,x)=>{const m=i[b>>>8];if(m==null)throw new Error("Missing PLY chunk");const{min_x:G,min_y:p,min_z:w,max_x:M,max_y:z,max_z:Y,min_scale_x:N,min_scale_y:q,min_scale_z:T,max_scale_x:v,max_scale_y:P,max_scale_z:Z,min_r:W,min_g:L,min_b:K,max_r:J,max_g:R,max_b:F}=m,{packed_position:eA,packed_rotation:iA,packed_scale:IA,packed_color:gA}=x,oA=(eA>>>21&2047)/2047*(M-G)+G,aA=(eA>>>11&1023)/1023*(z-p)+p,FA=(eA&2047)/2047*(Y-w)+w,CA=((iA>>>20&1023)/1023-.5)*S,hA=((iA>>>10&1023)/1023-.5)*S,EA=((iA&1023)/1023-.5)*S,k=Math.sqrt(Math.max(0,1-CA*CA-hA*hA-EA*EA)),$=iA>>>30,wA=$===0?CA:$===1?k:hA,H=$<=1?hA:$===2?k:EA,RA=$<=2?EA:k,nA=$===0?k:CA,U=Math.exp((IA>>>21&2047)/2047*(v-N)+N),cA=Math.exp((IA>>>11&1023)/1023*(P-q)+q),AA=Math.exp((IA&2047)/2047*(Z-T)+T),_=(gA>>>24&255)/255*((J??1)-(W??0))+(W??0),mA=(gA>>>16&255)/255*((R??1)-(L??0))+(L??0),et=(gA>>>8&255)/255*((F??1)-(K??0))+(K??0),it=(gA&255)/255;A(b,oA,aA,FA,U,cA,AA,wA,H,RA,nA,it,_,mA,et)}}const c=E=>{if(E.name==="chunk")return h(E);if(s)return l(E);if(E.name!=="vertex")return null;const{x:u,y,z:f,scale_0:D,scale_1:S,scale_2:b,rot_0:x,rot_1:m,rot_2:G,rot_3:p,opacity:w,f_dc_0:M,f_dc_1:z,f_dc_2:Y,red:N,green:q,blue:T,alpha:v}=E.properties;if(!u||!y||!f)throw new Error("Missing PLY properties: x, y, z");const P=D&&S&&b,Z=x&&m&&G&&p,W=v!=null?Dt[v.type]:1,L=N!=null?Dt[N.type]:1,K=q!=null?Dt[q.type]:1,J=T!=null?Dt[T.type]:1;return n=qs(E.properties),Q(),(R,F)=>{const eA=P?Math.exp(F.scale_0):VA.defaultPointScale,iA=P?Math.exp(F.scale_1):VA.defaultPointScale,IA=P?Math.exp(F.scale_2):VA.defaultPointScale,gA=Z?F.rot_1:0,oA=Z?F.rot_2:0,aA=Z?F.rot_3:0,FA=Z?F.rot_0:1,CA=w!=null?1/(1+Math.exp(-F.opacity)):v!=null?F.alpha/W:1,hA=M!=null?F.f_dc_0*mt+.5:N!=null?F.red/L:1,EA=z!=null?F.f_dc_1*mt+.5:q!=null?F.green/K:1,k=Y!=null?F.f_dc_2*mt+.5:T!=null?F.blue/J:1;if(A(R,F.x,F.y,F.z,eA,iA,IA,gA,oA,aA,FA,CA,hA,EA,k),t&&o){if(o)for(const[$,wA]of g.entries())o[$]=F[wA];if(a)for(const[$,wA]of r.entries())a[$]=F[wA];if(C)for(const[$,wA]of I.entries())C[$]=F[wA];t(R,o,a,C)}}};this.parseData(c)}injectRgba(A){let t=0;const s=this.data;if(s==null)throw new Error("No parsed data");if(A.length!==this.numSplats*4)throw new Error("Invalid RGBA array length");for(const i in this.elements){const n=this.elements[i],{count:g,properties:r}=n,I=[];let o=0;const a=i==="vertex";if(a){for(const C of["opacity","f_dc_0","f_dc_1","f_dc_2"])if(!r[C]||r[C].type!=="float")throw new Error(`Can\'t injectRgba due to property: ${C}`)}for(const[C,Q]of Object.entries(r))if(Q.isList)I.push(()=>{const B=xt[Q.countType](s,t,this.littleEndian);t+=PA[Q.countType],t+=B*PA[Q.type]});else{if(a)if(C==="f_dc_0"||C==="f_dc_1"||C==="f_dc_2"){const B=Number.parseInt(C.slice(5));I.push(()=>{const h=(A[o+B]/255-.5)/mt;Hs[Q.type](s,t,this.littleEndian,h)})}else C==="opacity"&&I.push(()=>{const B=Math.max(-100,Math.min(100,-Math.log(1/(A[o+3]/255)-1)));Hs[Q.type](s,t,this.littleEndian,B)});I.push(()=>{t+=PA[Q.type]})}for(let C=0;C<g;C++){for(const Q of I)Q();a&&(o+=4)}}}};VA.defaultPointScale=.001;let wt=VA;const mt=.28209479177387814,xt={char:(e,A,t)=>e.getInt8(A),uchar:(e,A,t)=>e.getUint8(A),short:(e,A,t)=>e.getInt16(A,t),ushort:(e,A,t)=>e.getUint16(A,t),int:(e,A,t)=>e.getInt32(A,t),uint:(e,A,t)=>e.getUint32(A,t),float:(e,A,t)=>e.getFloat32(A,t),double:(e,A,t)=>e.getFloat64(A,t)},Hs={char:(e,A,t,s)=>{e.setInt8(A,s)},uchar:(e,A,t,s)=>{e.setUint8(A,s)},short:(e,A,t,s)=>{e.setInt16(A,s,t)},ushort:(e,A,t,s)=>{e.setUint16(A,s,t)},int:(e,A,t,s)=>{e.setInt32(A,s,t)},uint:(e,A,t,s)=>{e.setUint32(A,s,t)},float:(e,A,t,s)=>{e.setFloat32(A,s,t)},double:(e,A,t,s)=>{e.setFloat64(A,s,t)}},PA={char:1,uchar:1,short:2,ushort:2,int:4,uint:4,float:4,double:8},Dt={char:127,uchar:255,short:32767,ushort:65535,int:2147483647,uint:4294967295,float:1,double:1},be={0:0,9:1,24:2,45:3},Je={0:0,1:9,2:24,3:45};function qs(e){let A=0;for(;e[`f_rest_${A}`];)A+=1;const t=be[A];if(t==null)throw new Error(`Unsupported number of SH coefficients: ${A}`);return t}var tt=(e=>(e.PLY="ply",e.SPZ="spz",e.SPLAT="splat",e.KSPLAT="ksplat",e.PCSOGS="pcsogs",e.PCSOGSZIP="pcsogszip",e))(tt||{});function _e(e){const A=new DataView(e.buffer);if((A.getUint32(0,!0)&16777215)===7957616)return"ply";if((A.getUint32(0,!0)&16777215)===559903){const t=ke(e,4);return new DataView(t.buffer).getUint32(0,!0)===1347635022?"spz":void 0}if(A.getUint32(0,!0)===67324752)return vs(e)?"pcsogszip":void 0}function ze(e){const A=e.split(/[?#]/,1)[0],t=Math.max(A.lastIndexOf("/"),A.lastIndexOf("\\\\")),s=A.slice(t+1),i=s.lastIndexOf(".");return i<=0||i===s.length-1?"":s.slice(i+1).toLowerCase()}function Le(e){const A=ze(e);if(A==="ply")return"ply";if(A==="spz")return"spz";if(A==="splat")return"splat";if(A==="ksplat")return"ksplat"}function He(e){try{let A;if(typeof e=="string")A=e;else{const s=e instanceof ArrayBuffer?new Uint8Array(e):e;if(s.length>65536)return;A=new TextDecoder().decode(s)}const t=JSON.parse(A);if(!t||typeof t!="object"||Array.isArray(t))return;for(const s of["means","scales","quats","sh0"])if(!t[s]||typeof t[s]!="object"||Array.isArray(t[s])||!t[s].shape||!t[s].files||s!=="quats"&&(!t[s].mins||!t[s].maxs))return;return t}catch{return}}function vs(e){try{const A=e instanceof ArrayBuffer?new Uint8Array(e):e;let t=null;const s=ue(A,{filter:({name:n})=>n.split(/[\\\\/]/).pop()==="meta.json"?(t=n,!0):!1});if(!t)return;const i=He(s[t]);return i?{name:t,json:i}:void 0}catch{return}}class qe{constructor({maxSplats:A=1}={}){this.numSplats=0,this.maxSplats=Ne(A).maxSplats,this.centers=new Float32Array(this.maxSplats*3),this.scales=new Float32Array(this.maxSplats*3),this.quaternions=new Float32Array(this.maxSplats*4),this.opacities=new Float32Array(this.maxSplats),this.colors=new Float32Array(this.maxSplats*3)}pushSplat(){const A=this.numSplats;return this.ensureIndex(A),this.numSplats+=1,A}unpushSplat(A){if(A===this.numSplats-1)this.numSplats-=1;else throw new Error("Cannot unpush splat from non-last position")}ensureCapacity(A){if(A>this.maxSplats){const t=Math.max(A,this.maxSplats*2),s=new Float32Array(t*3),i=new Float32Array(t*3),n=new Float32Array(t*4),g=new Float32Array(t),r=new Float32Array(t*3);if(s.set(this.centers),i.set(this.scales),n.set(this.quaternions),g.set(this.opacities),r.set(this.colors),this.centers=s,this.scales=i,this.quaternions=n,this.opacities=g,this.colors=r,this.sh1){const I=new Float32Array(t*9);I.set(this.sh1),this.sh1=I}if(this.sh2){const I=new Float32Array(t*15);I.set(this.sh2),this.sh2=I}if(this.sh3){const I=new Float32Array(t*21);I.set(this.sh3),this.sh3=I}this.maxSplats=t}}ensureIndex(A){this.ensureCapacity(A+1)}setCenter(A,t,s,i){this.centers[A*3]=t,this.centers[A*3+1]=s,this.centers[A*3+2]=i}setScale(A,t,s,i){this.scales[A*3]=t,this.scales[A*3+1]=s,this.scales[A*3+2]=i}setQuaternion(A,t,s,i,n){this.quaternions[A*4]=t,this.quaternions[A*4+1]=s,this.quaternions[A*4+2]=i,this.quaternions[A*4+3]=n}setOpacity(A,t){this.opacities[A]=t}setColor(A,t,s,i){this.colors[A*3]=t,this.colors[A*3+1]=s,this.colors[A*3+2]=i}setSh1(A,t){this.sh1||(this.sh1=new Float32Array(this.maxSplats*9));for(let s=0;s<9;++s)this.sh1[A*9+s]=t[s]}setSh2(A,t){this.sh2||(this.sh2=new Float32Array(this.maxSplats*15));for(let s=0;s<15;++s)this.sh2[A*15+s]=t[s]}setSh3(A,t){this.sh3||(this.sh3=new Float32Array(this.maxSplats*21));for(let s=0;s<21;++s)this.sh3[A*21+s]=t[s]}}async function Ks(e,A,t){if(e.quats.encoding!=="quaternion_packed")throw new Error("Unsupported quaternion encoding");const s=e.means.shape[0],i=Et(s),n=new Uint32Array(i*4),g={},r=Promise.all([st(A[e.means.files[0]]),st(A[e.means.files[1]])]).then(Q=>{for(let B=0;B<s;++B){const h=B*4,l=(Q[0][h+0]+(Q[1][h+0]<<8))/65535,c=(Q[0][h+1]+(Q[1][h+1]<<8))/65535,E=(Q[0][h+2]+(Q[1][h+2]<<8))/65535;let u=e.means.mins[0]+(e.means.maxs[0]-e.means.mins[0])*l,y=e.means.mins[1]+(e.means.maxs[1]-e.means.mins[1])*c,f=e.means.mins[2]+(e.means.maxs[2]-e.means.mins[2])*E;u=Math.sign(u)*(Math.exp(Math.abs(u))-1),y=Math.sign(y)*(Math.exp(Math.abs(y))-1),f=Math.sign(f)*(Math.exp(Math.abs(f))-1),Rs(n,B,u,y,f)}}),I=st(A[e.scales.files[0]]).then(Q=>{for(let B=0;B<s;++B){const h=B*4,l=Q[h+0]/255,c=Q[h+1]/255,E=Q[h+2]/255,u=e.scales.mins[0]+(e.scales.maxs[0]-e.scales.mins[0])*l,y=e.scales.mins[1]+(e.scales.maxs[1]-e.scales.mins[1])*c,f=e.scales.mins[2]+(e.scales.maxs[2]-e.scales.mins[2])*E;bs(n,B,Math.exp(u),Math.exp(y),Math.exp(f),t)}}),o=st(A[e.quats.files[0]]).then(Q=>{const B=Math.sqrt(2);for(let h=0;h<s;++h){const l=h*4,c=(Q[l+0]/255-.5)*B,E=(Q[l+1]/255-.5)*B,u=(Q[l+2]/255-.5)*B,y=Math.sqrt(Math.max(0,1-c*c-E*E-u*u)),f=Q[l+3]-252,D=f===0?c:f===1?y:E,S=f<=1?E:f===2?y:u,b=f<=2?u:y;Js(n,h,D,S,b,f===0?y:c)}}),a=st(A[e.sh0.files[0]]).then(Q=>{const B=.28209479177387814;for(let h=0;h<s;++h){const l=h*4,c=Q[l+0]/255,E=Q[l+1]/255,u=Q[l+2]/255,y=Q[l+3]/255,f=e.sh0.mins[0]+(e.sh0.maxs[0]-e.sh0.mins[0])*c,D=e.sh0.mins[1]+(e.sh0.maxs[1]-e.sh0.mins[1])*E,S=e.sh0.mins[2]+(e.sh0.maxs[2]-e.sh0.mins[2])*u,b=e.sh0.mins[3]+(e.sh0.maxs[3]-e.sh0.mins[3])*y,x=B*f+.5,m=B*D+.5,G=B*S+.5,p=1/(1+Math.exp(-b));Fe(n,h,x,m,G,p,t)}}),C=[r,I,o,a];if(e.shN){const Q=e.shN.shape[1]>=45,B=e.shN.shape[1]>=24,h=e.shN.shape[1]>=9;h&&(g.sh1=new Uint32Array(s*2)),B&&(g.sh2=new Uint32Array(s*4)),Q&&(g.sh3=new Uint32Array(s*4));const l=new Float32Array(9),c=new Float32Array(15),E=new Float32Array(21),u=e.shN,y=Promise.all([Kt(A[e.shN.files[0]]),Kt(A[e.shN.files[1]])]).then(([f,D])=>{for(let S=0;S<s;++S){const b=S*4,x=D.rgba[b+0]+(D.rgba[b+1]<<8),m=(x&63)*15,p=(x>>>6)*f.width+m;for(let w=0;w<3;++w){if(h)for(let M=0;M<3;++M)l[M*3+w]=u.mins+(u.maxs-u.mins)*f.rgba[(p+M)*4+w]/255;if(B)for(let M=0;M<5;++M)c[M*3+w]=u.mins+(u.maxs-u.mins)*f.rgba[(p+3+M)*4+w]/255;if(Q)for(let M=0;M<7;++M)E[M*3+w]=u.mins+(u.maxs-u.mins)*f.rgba[(p+8+M)*4+w]/255}h&&lt(g.sh1,S,l,t),B&&ut(g.sh2,S,c,t),Q&&yt(g.sh3,S,E,t)}});C.push(y)}return await Promise.all(C),{packedArray:n,numSplats:s,extra:g}}let pt=null;async function Kt(e){if(!pt&&(pt=new OffscreenCanvas(1,1).getContext("webgl2"),!pt))throw new Error("Failed to create WebGL2 context");const A=new Blob([e]),t=await createImageBitmap(A,{premultiplyAlpha:"none"}),s=pt,i=s.createTexture();s.bindTexture(s.TEXTURE_2D,i),s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,!0),s.texImage2D(s.TEXTURE_2D,0,s.RGBA,s.RGBA,s.UNSIGNED_BYTE,t),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST);const n=s.createFramebuffer();s.bindFramebuffer(s.FRAMEBUFFER,n),s.framebufferTexture2D(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0,s.TEXTURE_2D,i,0);const g=new Uint8Array(t.width*t.height*4);return s.readPixels(0,0,t.width,t.height,s.RGBA,s.UNSIGNED_BYTE,g),s.deleteTexture(i),s.deleteFramebuffer(n),{rgba:g,width:t.width,height:t.height}}async function st(e){const{rgba:A}=await Kt(e);return A}async function ve(e,A){var Q;const t=vs(e);if(!t)throw new Error("Invalid PC SOGS zip file");const{name:s,json:i}=t,n=s.lastIndexOf("/"),g=s.lastIndexOf("\\\\"),r=s.slice(0,Math.max(n,g)+1),I=new Map,o=[...i.means.files,...i.scales.files,...i.quats.files,...i.sh0.files,...((Q=i.shN)==null?void 0:Q.files)??[]];for(const B of o)I.set(r+B,B);const a=await new Promise((B,h)=>{le(e,{filter:({name:l})=>I.has(l)},(l,c)=>{l?h(l):B(c)})}),C={};for(const[B,h]of I.entries())C[h]=a[B];return await Ks(i,C,A)}class Ts{constructor({fileBytes:A}){this.fileBytes=A instanceof ArrayBuffer?new Uint8Array(A):A,this.reader=new Ge({fileBytes:this.fileBytes});const t=new DataView(this.reader.read(16).buffer);if(t.getUint32(0,!0)!==1347635022)throw new Error("Invalid SPZ file");if(this.version=t.getUint32(4,!0),this.version<1||this.version>2)throw new Error(`Unsupported SPZ version: ${this.version}`);this.numSplats=t.getUint32(8,!0),this.shDegree=t.getUint8(12),this.fractionalBits=t.getUint8(13),this.flags=t.getUint8(14),this.flagAntiAlias=(this.flags&1)!==0,this.reserved=t.getUint8(15),this.parsed=!1}parseSplats(A,t,s,i,n,g){if(this.parsed)throw new Error("SPZ file already parsed");if(this.parsed=!0,this.version===1){const r=this.reader.read(this.numSplats*3*2),I=new Uint16Array(r.buffer);for(let o=0;o<this.numSplats;o++){const a=o*3,C=O(I[a]),Q=O(I[a+1]),B=O(I[a+2]);A==null||A(o,C,Q,B)}}else if(this.version===2){const r=1<<this.fractionalBits,I=this.reader.read(this.numSplats*3*3);for(let o=0;o<this.numSplats;o++){const a=o*9,C=((I[a+2]<<24|I[a+1]<<16|I[a]<<8)>>8)/r,Q=((I[a+5]<<24|I[a+4]<<16|I[a+3]<<8)>>8)/r,B=((I[a+8]<<24|I[a+7]<<16|I[a+6]<<8)>>8)/r;A==null||A(o,C,Q,B)}}else throw new Error("Unreachable");{const r=this.reader.read(this.numSplats);for(let I=0;I<this.numSplats;I++)t==null||t(I,r[I]/255)}{const r=this.reader.read(this.numSplats*3),I=Xs/.15;for(let o=0;o<this.numSplats;o++){const a=o*3,C=(r[a]/255-.5)*I+.5,Q=(r[a+1]/255-.5)*I+.5,B=(r[a+2]/255-.5)*I+.5;s==null||s(o,C,Q,B)}}{const r=this.reader.read(this.numSplats*3);for(let I=0;I<this.numSplats;I++){const o=I*3,a=Math.exp(r[o]/16-10),C=Math.exp(r[o+1]/16-10),Q=Math.exp(r[o+2]/16-10);i==null||i(I,a,C,Q)}}{const r=this.reader.read(this.numSplats*3);for(let I=0;I<this.numSplats;I++){const o=I*3,a=r[o]/127.5-1,C=r[o+1]/127.5-1,Q=r[o+2]/127.5-1,B=Math.sqrt(Math.max(0,1-a*a-C*C-Q*Q));n==null||n(I,a,C,Q,B)}}if(g&&this.shDegree>=1){const r=new Float32Array(9),I=this.shDegree>=2?new Float32Array(5*3):void 0,o=this.shDegree>=3?new Float32Array(7*3):void 0,a=this.reader.read(this.numSplats*Zs[this.shDegree]*3);let C=0;for(let Q=0;Q<this.numSplats;Q++){for(let B=0;B<9;++B)r[B]=(a[C+B]-128)/128;if(C+=9,I){for(let B=0;B<15;++B)I[B]=(a[C+B]-128)/128;C+=15}if(o){for(let B=0;B<21;++B)o[B]=(a[C+B]-128)/128;C+=21}g==null||g(Q,r,I,o)}}}}const Zs={1:3,2:8,3:15},Xs=.28209479177387814,Ke=1347635022,Te=2,Ze=1;class YA{constructor({numSplats:A,shDegree:t,fractionalBits:s=12,flagAntiAlias:i=!0}){this.clippedCount=0;const n=19+(t>=1?9:0)+(t>=2?15:0)+(t>=3?21:0),g=16+A*n;this.buffer=new ArrayBuffer(g),this.view=new DataView(this.buffer),this.view.setUint32(0,Ke,!0),this.view.setUint32(4,Te,!0),this.view.setUint32(8,A,!0),this.view.setUint8(12,t),this.view.setUint8(13,s),this.view.setUint8(14,i?Ze:0),this.view.setUint8(15,0),this.numSplats=A,this.shDegree=t,this.fractionalBits=s,this.fraction=1<<s,this.flagAntiAlias=i}setCenter(A,t,s,i){const n=Math.round(t*this.fraction),g=Math.max(-8388607,Math.min(8388607,n)),r=Math.round(s*this.fraction),I=Math.max(-8388607,Math.min(8388607,r)),o=Math.round(i*this.fraction),a=Math.max(-8388607,Math.min(8388607,o));(n!==g||r!==I||o!==a)&&(this.clippedCount+=1);const B=16+A*9;this.view.setUint8(B,g&255),this.view.setUint8(B+1,g>>8&255),this.view.setUint8(B+2,g>>16&255),this.view.setUint8(B+3,I&255),this.view.setUint8(B+4,I>>8&255),this.view.setUint8(B+5,I>>16&255),this.view.setUint8(B+6,a&255),this.view.setUint8(B+7,a>>8&255),this.view.setUint8(B+8,a>>16&255)}setAlpha(A,t){const s=16+this.numSplats*9+A;this.view.setUint8(s,Math.max(0,Math.min(255,Math.round(t*255))))}static scaleRgb(A){const t=((A-.5)/(Xs/.15)+.5)*255;return Math.max(0,Math.min(255,Math.round(t)))}setRgb(A,t,s,i){const n=16+this.numSplats*10+A*3;this.view.setUint8(n,YA.scaleRgb(t)),this.view.setUint8(n+1,YA.scaleRgb(s)),this.view.setUint8(n+2,YA.scaleRgb(i))}setScale(A,t,s,i){const n=16+this.numSplats*13+A*3;this.view.setUint8(n,Math.max(0,Math.min(255,Math.round((Math.log(t)+10)*16)))),this.view.setUint8(n+1,Math.max(0,Math.min(255,Math.round((Math.log(s)+10)*16)))),this.view.setUint8(n+2,Math.max(0,Math.min(255,Math.round((Math.log(i)+10)*16))))}setQuat(A,t,s,i,n){const g=16+this.numSplats*16+A*3,r=n<0;this.view.setUint8(g,Math.max(0,Math.min(255,Math.round(((r?-t:t)+1)*127.5)))),this.view.setUint8(g+1,Math.max(0,Math.min(255,Math.round(((r?-s:s)+1)*127.5)))),this.view.setUint8(g+2,Math.max(0,Math.min(255,Math.round(((r?-i:i)+1)*127.5))))}static quantizeSh(A,t){const s=Math.round(A*128)+128,i=1<<8-t,n=Math.floor((s+i/2)/i)*i;return Math.max(0,Math.min(255,n))}setSh(A,t,s,i){const n=Zs[this.shDegree]||0,g=16+this.numSplats*19+A*n*3;for(let r=0;r<9;++r)this.view.setUint8(g+r,YA.quantizeSh(t[r],5));if(s){const r=g+9;for(let I=0;I<15;++I)this.view.setUint8(r+I,YA.quantizeSh(s[I],4));if(i){const I=r+15;for(let o=0;o<21;++o)this.view.setUint8(I+o,YA.quantizeSh(i[o],4))}}}async finalize(){const A=new Uint8Array(this.buffer),s=new ReadableStream({async start(g){g.enqueue(A),g.close()}}).pipeThrough(new CompressionStream("gzip")),n=await new Response(s).arrayBuffer();return console.log("Compressed",A.length,"bytes to",n.byteLength,"bytes"),new Uint8Array(n)}}async function Xe(e){var a,C,Q;const A=new qe,{inputs:t,clipXyz:s,maxSh:i,fractionalBits:n=12,opacityThreshold:g}=e;for(const B of t){let h=function(x){return x.multiplyScalar(y),x.applyQuaternion(f),x.add(D),x},l=function(x){return x.multiplyScalar(y),x},c=function(x){return x.premultiply(f),x},E=function(x){return!S||S.containsPoint(x)},u=function(x){return g!==void 0?x>=g:!0};const y=((a=B.transform)==null?void 0:a.scale)??1,f=new NA().fromArray(((C=B.transform)==null?void 0:C.quaternion)??[0,0,0,1]),D=new d().fromArray(((Q=B.transform)==null?void 0:Q.translate)??[0,0,0]),S=s?new Fs(new d().fromArray(s.min),new d().fromArray(s.max)):void 0;let b=B.fileType;switch(b||(b=_e(B.fileBytes),!b&&B.pathOrUrl&&(b=Le(B.pathOrUrl))),b){case tt.PLY:{const x=new wt({fileBytes:B.fileBytes});await x.parseHeader();let m=null;x.parseSplats((G,p,w,M,z,Y,N,q,T,v,P,Z,W,L,K)=>{const J=h(new d(p,w,M));if(E(J)&&u(Z)){m=A.pushSplat(),A.setCenter(m,J.x,J.y,J.z);const R=l(new d(z,Y,N));A.setScale(m,R.x,R.y,R.z);const F=c(new NA(q,T,v,P));A.setQuaternion(m,F.x,F.y,F.z,F.w),A.setOpacity(m,Z),A.setColor(m,W,L,K)}else m=null},(G,p,w,M)=>{p&&m!==null&&A.setSh1(m,p),w&&m!==null&&A.setSh2(m,w),M&&m!==null&&A.setSh3(m,M)});break}case tt.SPZ:{const x=new Ts({fileBytes:B.fileBytes}),m=new Int32Array(x.numSplats);m.fill(-1);const G=new Float32Array(x.numSplats*3),p=new d;x.parseSplats((w,M,z,Y)=>{const N=h(new d(M,z,Y));G[w*3]=N.x,G[w*3+1]=N.y,G[w*3+2]=N.z},(w,M)=>{p.fromArray(G,w*3),E(p)&&u(M)&&(m[w]=A.pushSplat(),A.setCenter(m[w],p.x,p.y,p.z),A.setOpacity(m[w],M))},(w,M,z,Y)=>{m[w]>=0&&A.setColor(m[w],M,z,Y)},(w,M,z,Y)=>{if(m[w]>=0){const N=l(new d(M,z,Y));A.setScale(m[w],N.x,N.y,N.z)}},(w,M,z,Y,N)=>{if(m[w]>=0){const q=c(new NA(M,z,Y,N));A.setQuaternion(m[w],q.x,q.y,q.z,q.w)}},(w,M,z,Y)=>{m[w]>=0&&(A.setSh1(m[w],M),z&&A.setSh2(m[w],z),Y&&A.setSh3(m[w],Y))});break}case tt.SPLAT:zs(B.fileBytes,x=>{},(x,m,G,p,w,M,z,Y,N,q,T,v,P,Z,W)=>{const L=h(new d(m,G,p));if(E(L)&&u(v)){const K=A.pushSplat();A.setCenter(K,L.x,L.y,L.z);const J=l(new d(w,M,z));A.setScale(K,J.x,J.y,J.z);const R=c(new NA(Y,N,q,T));A.setQuaternion(K,R.x,R.y,R.z,R.w),A.setOpacity(K,v),A.setColor(K,P,Z,W)}});break;case tt.KSPLAT:{let x=null;Ye(B.fileBytes,m=>{},(m,G,p,w,M,z,Y,N,q,T,v,P,Z,W,L)=>{const K=h(new d(G,p,w));if(E(K)&&u(P)){x=A.pushSplat(),A.setCenter(x,K.x,K.y,K.z);const J=l(new d(M,z,Y));A.setScale(x,J.x,J.y,J.z);const R=c(new NA(N,q,T,v));A.setQuaternion(x,R.x,R.y,R.z,R.w),A.setOpacity(x,P),A.setColor(x,Z,W,L)}else x=null},(m,G,p,w)=>{x!==null&&(A.setSh1(x,G),p&&A.setSh2(x,p),w&&A.setSh3(x,w))});break}default:throw new Error(`transcodeSpz not implemented for ${b}`)}}const r=Math.min(i??3,A.sh3?3:A.sh2?2:A.sh1?1:0),I=new YA({numSplats:A.numSplats,shDegree:r,fractionalBits:n,flagAntiAlias:!0});for(let B=0;B<A.numSplats;++B){const h=B*3,l=B*4;I.setCenter(B,A.centers[h],A.centers[h+1],A.centers[h+2]),I.setScale(B,A.scales[h],A.scales[h+1],A.scales[h+2]),I.setQuat(B,A.quaternions[l],A.quaternions[l+1],A.quaternions[l+2],A.quaternions[l+3]),I.setAlpha(B,A.opacities[B]),I.setRgb(B,A.colors[h],A.colors[h+1],A.colors[h+2]),A.sh1&&r>=1&&I.setSh(B,A.sh1.slice(B*9,(B+1)*9),r>=2&&A.sh2?A.sh2.slice(B*15,(B+1)*15):void 0,r>=3&&A.sh3?A.sh3.slice(B*21,(B+1)*21):void 0)}return{fileBytes:await I.finalize(),clippedCount:I.clippedCount}}async function Ws(e){const{name:A,args:t,id:s}=e.data;let i,n;try{switch(A){case"unpackPly":{const{packedArray:g,fileBytes:r,splatEncoding:I}=t,o=await We({packedArray:g,fileBytes:r,splatEncoding:I});i={id:s,numSplats:o.numSplats,packedArray:o.packedArray,extra:o.extra};break}case"decodeSpz":{const{fileBytes:g,splatEncoding:r}=t,I=Pe(g,r);i={id:s,numSplats:I.numSplats,packedArray:I.packedArray,extra:I.extra};break}case"decodeAntiSplat":{const{fileBytes:g,splatEncoding:r}=t,I=Ue(g,r);i={id:s,numSplats:I.numSplats,packedArray:I.packedArray};break}case"decodeKsplat":{const{fileBytes:g,splatEncoding:r}=t,I=Re(g,r);i={id:s,numSplats:I.numSplats,packedArray:I.packedArray,extra:I.extra};break}case"decodePcSogs":{const{fileBytes:g,extraFiles:r,splatEncoding:I}=t,o=JSON.parse(new TextDecoder().decode(g)),a=await Ks(o,r,I);i={id:s,numSplats:a.numSplats,packedArray:a.packedArray,extra:a.extra};break}case"decodePcSogsZip":{const{fileBytes:g,splatEncoding:r}=t,I=await ve(g,r);i={id:s,numSplats:I.numSplats,packedArray:I.packedArray,extra:I.extra};break}case"sortSplats":{const{totalSplats:g,readback:r,ordering:I}=t;i={id:s,readback:r,...Ve({totalSplats:g,readback:r,ordering:I})};break}case"sortDoubleSplats":{const{numSplats:g,readback:r,ordering:I}=t;i={id:s,readback:r,ordering:I,activeSplats:Os(g,r,I)};break}case"sort32Splats":{const{numSplats:g,readback:r,ordering:I}=t;i={id:s,readback:r,ordering:I,activeSplats:$s(g,r,I)};break}case"transcodeSpz":{const g=t,r=await Xe(g);i={id:s,fileBytes:r,input:g};break}default:throw new Error(`Unknown name: ${A}`)}}catch(g){n=g,console.error(n)}self.postMessage({id:s,result:i,error:n},{transfer:Me(i)})}async function We({packedArray:e,fileBytes:A,splatEncoding:t}){const s=new wt({fileBytes:A});await s.parseHeader();const i=s.numSplats,n={};return s.parseSplats((g,r,I,o,a,C,Q,B,h,l,c,E,u,y,f)=>{vt(e,g,r,I,o,a,C,Q,B,h,l,c,E,u,y,f,t)},(g,r,I,o)=>{r&&(n.sh1||(n.sh1=new Uint32Array(i*2)),lt(n.sh1,g,r,t)),I&&(n.sh2||(n.sh2=new Uint32Array(i*4)),ut(n.sh2,g,I,t)),o&&(n.sh3||(n.sh3=new Uint32Array(i*4)),yt(n.sh3,g,o,t))}),{packedArray:e,numSplats:i,extra:n}}function Pe(e,A){const t=new Ts({fileBytes:e}),s=t.numSplats,i=Et(s),n=new Uint32Array(i*4),g={};return t.parseSplats((r,I,o,a)=>{Rs(n,r,I,o,a)},(r,I)=>{de(n,r,I)},(r,I,o,a)=>{Se(n,r,I,o,a,A)},(r,I,o,a)=>{bs(n,r,I,o,a,A)},(r,I,o,a,C)=>{Js(n,r,I,o,a,C)},(r,I,o,a)=>{I&&(g.sh1||(g.sh1=new Uint32Array(s*2)),lt(g.sh1,r,I,A)),o&&(g.sh2||(g.sh2=new Uint32Array(s*4)),ut(g.sh2,r,o,A)),a&&(g.sh3||(g.sh3=new Uint32Array(s*4)),yt(g.sh3,r,a,A))}),{packedArray:n,numSplats:s,extra:g}}const Tt=31744,Mt=Tt+1;let DA=null;function Ve({totalSplats:e,readback:A,ordering:t}){DA||(DA=new Uint32Array(Mt)),DA.fill(0);const s=A.map(I=>new Uint32Array(I.buffer)),i=s[0].length,n=Math.ceil(e/i);let g=0;for(let I=0;I<n;++I){const o=s[I],a=Math.min(o.length,e-g);for(let C=0;C<a;++C){const Q=o[C]&32767;Q<Tt&&(DA[Q]+=1)}g+=a}let r=0;for(let I=0;I<Mt;++I){const o=r+DA[I];DA[I]=r,r=o}g=0;for(let I=0;I<n;++I){const o=s[I],a=Math.min(o.length,e-g);for(let C=0;C<a;++C){const Q=o[C]&32767;Q<Tt&&(t[DA[Q]]=g+C,DA[Q]+=1)}g+=a}if(DA[Mt-1]!==r)throw new Error(`Expected ${r} active splats but got ${DA[Mt-1]}`);return{activeSplats:r,ordering:t}}const Zt=[];function Ps(e){Zt.push(e)}async function je(){self.addEventListener("message",Ps),await es(),self.removeEventListener("message",Ps),self.addEventListener("message",Ws);for(const e of Zt)Ws(e);Zt.length=0}je().catch(console.error)})();\n//# sourceMappingURL=worker-BeZ_BG0A.js.map\n',Es=typeof self<"u"&&self.Blob&&new Blob([eo],{type:"text/javascript;charset=utf-8"});function xu(t){let A;try{if(A=Es&&(self.URL||self.webkitURL).createObjectURL(Es),!A)throw"";const e=new Worker(A,{name:t==null?void 0:t.name});return e.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(A)}),e}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(eo),{name:t==null?void 0:t.name})}finally{A&&(self.URL||self.webkitURL).revokeObjectURL(A)}}class Su{constructor(){this.messages={},this.messageIdNext=0,this.worker=new xu,this.worker.onmessage=A=>this.onMessage(A)}makeMessageId(){return++this.messageIdNext}makeMessagePromiseId(){const A=this.makeMessageId(),e=new Promise((s,n)=>{this.messages[A]={resolve:s,reject:n}});return{id:A,promise:e}}onMessage(A){const{id:e,result:s,error:n}=A.data,i=this.messages[e];i&&(delete this.messages[e],n?i.reject(n):i.resolve(s))}async call(A,e){const{id:s,promise:n}=this.makeMessagePromiseId();return this.worker.postMessage({name:A,args:e,id:s},{transfer:zn(e)}),n}}let so=4,Ee=0;const no=[],io=[];async function Du(){const t=no.shift();if(t)return t;if(Ee<so){const A=new Su;return Ee+=1,A}return new Promise(A=>{io.push(A)})}function Mu(t){if(Ee>so){Ee-=1;return}const A=io.shift();if(A){A(t);return}no.push(t)}async function It(t){const A=await Du();try{return await t(A)}finally{Mu(A)}}class ro extends sA.Loader{constructor(A){super(A),this.fileLoader=new sA.FileLoader(A)}load(A,e,s,n){const i=this.manager.resolveURL((this.path??"")+(A??"")),r=new Headers(this.requestHeader),a=this.withCredentials?"include":"same-origin",o=new Request(i,{headers:r,credentials:a});let c=this.fileType;this.manager.itemStart(i),fs(o,s).then(async l=>{var Q;const g=[new ProgressEvent("progress",{lengthComputable:!0,loaded:l.byteLength,total:l.byteLength})];function I(){if(s){const E=g.every(d=>d.lengthComputable||d.loaded===0&&d.total===0),f=g.reduce((d,w)=>d+w.loaded,0),p=g.reduce((d,w)=>d+w.total,0);s(new ProgressEvent("progress",{lengthComputable:E,loaded:f,total:p}))}}const h={},B=[],C=gs(l);if(c==="pcsogs"&&C===void 0)throw new Error("Invalid PC SOGS file");if(C!==void 0){c="pcsogs";for(const E of["means","scales","quats","sh0","shN"]){const f=C[E];if(f)for(const p of f.files){const d=new URL(p,i).toString(),w=g.length;g.push(new ProgressEvent("progress")),this.manager.itemStart(d);const D=new Request(d,{headers:r,credentials:a}),x=fs(D,y=>{g[w]=y,I()}).then(y=>{h[p]=y}).catch(y=>{throw this.manager.itemError(d),y}).finally(()=>{this.manager.itemEnd(d)});B.push(x)}}}if(await Promise.all(B),e){const E=((Q=this.packedSplats)==null?void 0:Q.splatEncoding)??xe,f=await cs({input:l,extraFiles:h,fileType:c,pathOrUrl:i,splatEncoding:E});this.packedSplats?(this.packedSplats.initialize(f),e(this.packedSplats)):e(new _A(f))}}).catch(l=>{this.manager.itemError(i),n==null||n(l)}).finally(()=>{this.manager.itemEnd(i)})}async loadAsync(A,e){return new Promise((s,n)=>{this.load(A,i=>{s(i)},e,n)})}parse(A){return new $A({packedSplats:A})}}async function fs(t,A){const e=await fetch(t);if(!e.ok)throw new Error(`${e.status} "${e.statusText}" fetching URL: ${t.url}`);if(!e.body)throw new Error(`Response body is null for URL: ${t.url}`);const s=e.body.getReader(),n=Number.parseInt(e.headers.get("Content-Length")||"0"),i=Number.isNaN(n)?0:n;let r=0;const a=[];for(;;){const{done:l,value:g}=await s.read();if(l)break;a.push(g),r+=g.length,A&&A(new ProgressEvent("progress",{lengthComputable:i!==0,loaded:r,total:i}))}const o=new Uint8Array(r);let c=0;for(const l of a)o.set(l,c),c+=l.length;return o.buffer}var St=(t=>(t.PLY="ply",t.SPZ="spz",t.SPLAT="splat",t.KSPLAT="ksplat",t.PCSOGS="pcsogs",t.PCSOGSZIP="pcsogszip",t))(St||{});function os(t){const A=new DataView(t.buffer);if((A.getUint32(0,!0)&16777215)===7957616)return"ply";if((A.getUint32(0,!0)&16777215)===559903){const e=ei(t,4);return new DataView(e.buffer).getUint32(0,!0)===1347635022?"spz":void 0}if(A.getUint32(0,!0)===67324752)return Fu(t)?"pcsogszip":void 0}function vu(t){const A=t.split(/[?#]/,1)[0],e=Math.max(A.lastIndexOf("/"),A.lastIndexOf("\\")),s=A.slice(e+1),n=s.lastIndexOf(".");return n<=0||n===s.length-1?"":s.slice(n+1).toLowerCase()}function ao(t){const A=vu(t);if(A==="ply")return"ply";if(A==="spz")return"spz";if(A==="splat")return"splat";if(A==="ksplat")return"ksplat"}function bu(t){return gs(t)!==void 0}function gs(t){try{let A;if(typeof t=="string")A=t;else{const s=t instanceof ArrayBuffer?new Uint8Array(t):t;if(s.length>65536)return;A=new TextDecoder().decode(s)}const e=JSON.parse(A);if(!e||typeof e!="object"||Array.isArray(e))return;for(const s of["means","scales","quats","sh0"])if(!e[s]||typeof e[s]!="object"||Array.isArray(e[s])||!e[s].shape||!e[s].files||s!=="quats"&&(!e[s].mins||!e[s].maxs))return;return e}catch{return}}function Fu(t){try{const A=t instanceof ArrayBuffer?new Uint8Array(t):t;let e=null;const s=jo(A,{filter:({name:i})=>i.split(/[\\/]/).pop()==="meta.json"?(e=i,!0):!1});if(!e)return;const n=gs(s[e]);return n?{name:e,json:n}:void 0}catch{return}}async function cs({input:t,extraFiles:A,fileType:e,pathOrUrl:s,splatEncoding:n}){const i=t instanceof ArrayBuffer?new Uint8Array(t):t;let r=e;switch(e||(r=os(i),!r&&s&&(r=ao(s))),r){case"ply":{const a=new Ot({fileBytes:i});await a.parseHeader();const o=a.numSplats,c=xA(o).maxSplats,l={fileBytes:i,packedArray:new Uint32Array(c*4),splatEncoding:n};return await It(async g=>{const{packedArray:I,numSplats:h,extra:B}=await g.call("unpackPly",l);return{packedArray:I,numSplats:h,extra:B}})}case"spz":return await It(async a=>{const{packedArray:o,numSplats:c,extra:l}=await a.call("decodeSpz",{fileBytes:i,splatEncoding:n});return{packedArray:o,numSplats:c,extra:l}});case"splat":return await It(async a=>{const{packedArray:o,numSplats:c}=await a.call("decodeAntiSplat",{fileBytes:i,splatEncoding:n});return{packedArray:o,numSplats:c}});case"ksplat":return await It(async a=>{const{packedArray:o,numSplats:c,extra:l}=await a.call("decodeKsplat",{fileBytes:i,splatEncoding:n});return{packedArray:o,numSplats:c,extra:l}});case"pcsogs":return await It(async a=>{const{packedArray:o,numSplats:c,extra:l}=await a.call("decodePcSogs",{fileBytes:i,extraFiles:A,splatEncoding:n});return{packedArray:o,numSplats:c,extra:l}});case"pcsogszip":return await It(async a=>{const{packedArray:o,numSplats:c,extra:l}=await a.call("decodePcSogsZip",{fileBytes:i,splatEncoding:n});return{packedArray:o,numSplats:c,extra:l}});default:throw new Error(`Unknown splat file type: ${r}`)}}class ku{constructor({maxSplats:A=1}={}){this.numSplats=0,this.maxSplats=xA(A).maxSplats,this.centers=new Float32Array(this.maxSplats*3),this.scales=new Float32Array(this.maxSplats*3),this.quaternions=new Float32Array(this.maxSplats*4),this.opacities=new Float32Array(this.maxSplats),this.colors=new Float32Array(this.maxSplats*3)}pushSplat(){const A=this.numSplats;return this.ensureIndex(A),this.numSplats+=1,A}unpushSplat(A){if(A===this.numSplats-1)this.numSplats-=1;else throw new Error("Cannot unpush splat from non-last position")}ensureCapacity(A){if(A>this.maxSplats){const e=Math.max(A,this.maxSplats*2),s=new Float32Array(e*3),n=new Float32Array(e*3),i=new Float32Array(e*4),r=new Float32Array(e),a=new Float32Array(e*3);if(s.set(this.centers),n.set(this.scales),i.set(this.quaternions),r.set(this.opacities),a.set(this.colors),this.centers=s,this.scales=n,this.quaternions=i,this.opacities=r,this.colors=a,this.sh1){const o=new Float32Array(e*9);o.set(this.sh1),this.sh1=o}if(this.sh2){const o=new Float32Array(e*15);o.set(this.sh2),this.sh2=o}if(this.sh3){const o=new Float32Array(e*21);o.set(this.sh3),this.sh3=o}this.maxSplats=e}}ensureIndex(A){this.ensureCapacity(A+1)}setCenter(A,e,s,n){this.centers[A*3]=e,this.centers[A*3+1]=s,this.centers[A*3+2]=n}setScale(A,e,s,n){this.scales[A*3]=e,this.scales[A*3+1]=s,this.scales[A*3+2]=n}setQuaternion(A,e,s,n,i){this.quaternions[A*4]=e,this.quaternions[A*4+1]=s,this.quaternions[A*4+2]=n,this.quaternions[A*4+3]=i}setOpacity(A,e){this.opacities[A]=e}setColor(A,e,s,n){this.colors[A*3]=e,this.colors[A*3+1]=s,this.colors[A*3+2]=n}setSh1(A,e){this.sh1||(this.sh1=new Float32Array(this.maxSplats*9));for(let s=0;s<9;++s)this.sh1[A*9+s]=e[s]}setSh2(A,e){this.sh2||(this.sh2=new Float32Array(this.maxSplats*15));for(let s=0;s<15;++s)this.sh2[A*15+s]=e[s]}setSh3(A,e){this.sh3||(this.sh3=new Float32Array(this.maxSplats*21));for(let s=0;s<21;++s)this.sh3[A*21+s]=e[s]}}var Nu=`precision highp float;
514
+ `).forEach((r,a)=>{const o=r.trim();if(a===0){if(o!=="ply")throw new Error("Invalid PLY header");return}if(o.length===0)return;const c=o.split(" ");switch(c[0]){case"format":if(c[1]==="binary_little_endian")this.littleEndian=!0;else if(c[1]==="binary_big_endian")this.littleEndian=!1;else throw new Error(`Unsupported PLY format: ${c[1]}`);if(c[2]!=="1.0")throw new Error(`Unsupported PLY version: ${c[2]}`);break;case"end_header":break;case"comment":this.comments.push(o.slice(8));break;case"element":{const l=c[1];i={name:l,count:Number.parseInt(c[2]),properties:{}},this.elements[l]=i;break}case"property":if(i==null)throw new Error("Property must be inside an element");c[1]==="list"?i.properties[c[4]]={isList:!0,type:c[3],countType:c[2]}:i.properties[c[2]]={isList:!1,type:c[1]};break}}),this.elements.vertex&&(this.numSplats=this.elements.vertex.count)}parseData(A){let e=0;const s=this.data;if(s==null)throw new Error("No data to parse");for(const n in this.elements){const i=this.elements[n],{count:r,properties:a}=i,o={},c=[];for(const[g,I]of Object.entries(a))I.isList?(o[g]=[],c.push(()=>{const h=o[g];h.length=oe[I.countType](s,e,this.littleEndian),e+=mt[I.countType];for(let B=0;B<h.length;B++)h[B]=oe[I.type](s,e,this.littleEndian),e+=mt[I.type]})):(o[g]=0,c.push(()=>{o[g]=oe[I.type](s,e,this.littleEndian),e+=mt[I.type]}));const l=A(i)??(()=>{});for(let g=0;g<r;g++){for(const I of c)I();l(g,o)}}}parseSplats(A,e){if(this.elements.vertex==null)throw new Error("No vertex element found");let s=!1;const n=[];let i=0,r=[],a=[],o=[],c,l,g;function I(){const E=mu[i];r=new Array(3).fill(null).flatMap((f,p)=>[0,1,2].map((d,w)=>`f_rest_${p+w*E/3}`)),a=new Array(5).fill(null).flatMap((f,p)=>[0,1,2].map((d,w)=>`f_rest_${3+p+w*E/3}`)),o=new Array(7).fill(null).flatMap((f,p)=>[0,1,2].map((d,w)=>`f_rest_${8+p+w*E/3}`)),c=i>=1?new Float32Array(3*3):void 0,l=i>=2?new Float32Array(5*3):void 0,g=i>=3?new Float32Array(7*3):void 0}function h(E,f){if(!c)throw new Error("Missing sh1");for(const[p,d]of r.entries())c[p]=f[d]*8/255-4;if(l)for(const[p,d]of a.entries())l[p]=f[d]*8/255-4;if(g)for(const[p,d]of o.entries())g[p]=f[d]*8/255-4;e==null||e(E,c,l,g)}function B(E){const{min_x:f,min_y:p,min_z:d,max_x:w,max_y:D,max_z:x,min_scale_x:y,min_scale_y:m,min_scale_z:N,max_scale_x:M,max_scale_y:S,max_scale_z:U}=E.properties;if(!f||!p||!d||!w||!D||!x||!y||!m||!N||!M||!S||!U)throw new Error("Missing PLY chunk properties");return s=!0,(F,b)=>{const{min_x:T,min_y:R,min_z:O,max_x:_,max_y:eA,max_z:H,min_scale_x:W,min_scale_y:L,min_scale_z:j,max_scale_x:P,max_scale_y:Z,max_scale_z:G,min_r:dA,min_g:lA,min_b:yA,max_r:wA,max_g:SA,max_b:CA}=b;n.push({min_x:T,min_y:R,min_z:O,max_x:_,max_y:eA,max_z:H,min_scale_x:W,min_scale_y:L,min_scale_z:j,max_scale_x:P,max_scale_y:Z,max_scale_z:G,min_r:dA,min_g:lA,min_b:yA,max_r:wA,max_g:SA,max_b:CA})}}function C(E){if(e&&E.name==="sh")return i=Qs(E.properties),I(),h;if(E.name!=="vertex")return null;const{packed_position:f,packed_rotation:p,packed_scale:d,packed_color:w}=E.properties;if(!f||!p||!d||!w)throw new Error("Missing PLY properties: packed_position, packed_rotation, packed_scale, packed_color");const D=Math.sqrt(2);return(x,y)=>{const m=n[x>>>8];if(m==null)throw new Error("Missing PLY chunk");const{min_x:N,min_y:M,min_z:S,max_x:U,max_y:F,max_z:b,min_scale_x:T,min_scale_y:R,min_scale_z:O,max_scale_x:_,max_scale_y:eA,max_scale_z:H,min_r:W,min_g:L,min_b:j,max_r:P,max_g:Z,max_b:G}=m,{packed_position:dA,packed_rotation:lA,packed_scale:yA,packed_color:wA}=y,SA=(dA>>>21&2047)/2047*(U-N)+N,CA=(dA>>>11&1023)/1023*(F-M)+M,YA=(dA&2047)/2047*(b-S)+S,DA=((lA>>>20&1023)/1023-.5)*D,jA=((lA>>>10&1023)/1023-.5)*D,ZA=((lA&1023)/1023-.5)*D,Y=Math.sqrt(Math.max(0,1-DA*DA-jA*jA-ZA*ZA)),fA=lA>>>30,PA=fA===0?DA:fA===1?Y:jA,Rt=fA<=1?jA:fA===2?Y:ZA,ie=fA<=2?ZA:Y,MA=fA===0?Y:DA,z=Math.exp((yA>>>21&2047)/2047*(_-T)+T),XA=Math.exp((yA>>>11&1023)/1023*(eA-R)+R),De=Math.exp((yA&2047)/2047*(H-O)+O),Me=(wA>>>24&255)/255*((P??1)-(W??0))+(W??0),ve=(wA>>>16&255)/255*((Z??1)-(L??0))+(L??0),be=(wA>>>8&255)/255*((G??1)-(j??0))+(j??0),Fe=(wA&255)/255;A(x,SA,CA,YA,z,XA,De,PA,Rt,ie,MA,Fe,Me,ve,be)}}const Q=E=>{if(E.name==="chunk")return B(E);if(s)return C(E);if(E.name!=="vertex")return null;const{x:f,y:p,z:d,scale_0:w,scale_1:D,scale_2:x,rot_0:y,rot_1:m,rot_2:N,rot_3:M,opacity:S,f_dc_0:U,f_dc_1:F,f_dc_2:b,red:T,green:R,blue:O,alpha:_}=E.properties;if(!f||!p||!d)throw new Error("Missing PLY properties: x, y, z");const eA=w&&D&&x,H=y&&m&&N&&M,W=_!=null?ge[_.type]:1,L=T!=null?ge[T.type]:1,j=R!=null?ge[R.type]:1,P=O!=null?ge[O.type]:1;return i=Qs(E.properties),I(),(Z,G)=>{const dA=eA?Math.exp(G.scale_0):Dt.defaultPointScale,lA=eA?Math.exp(G.scale_1):Dt.defaultPointScale,yA=eA?Math.exp(G.scale_2):Dt.defaultPointScale,wA=H?G.rot_1:0,SA=H?G.rot_2:0,CA=H?G.rot_3:0,YA=H?G.rot_0:1,DA=S!=null?1/(1+Math.exp(-G.opacity)):_!=null?G.alpha/W:1,jA=U!=null?G.f_dc_0*ae+.5:T!=null?G.red/L:1,ZA=F!=null?G.f_dc_1*ae+.5:R!=null?G.green/j:1,Y=b!=null?G.f_dc_2*ae+.5:O!=null?G.blue/P:1;if(A(Z,G.x,G.y,G.z,dA,lA,yA,wA,SA,CA,YA,DA,jA,ZA,Y),e&&c){if(c)for(const[fA,PA]of r.entries())c[fA]=G[PA];if(l)for(const[fA,PA]of a.entries())l[fA]=G[PA];if(g)for(const[fA,PA]of o.entries())g[fA]=G[PA];e(Z,c,l,g)}}};this.parseData(Q)}injectRgba(A){let e=0;const s=this.data;if(s==null)throw new Error("No parsed data");if(A.length!==this.numSplats*4)throw new Error("Invalid RGBA array length");for(const n in this.elements){const i=this.elements[n],{count:r,properties:a}=i,o=[];let c=0;const l=n==="vertex";if(l){for(const g of["opacity","f_dc_0","f_dc_1","f_dc_2"])if(!a[g]||a[g].type!=="float")throw new Error(`Can't injectRgba due to property: ${g}`)}for(const[g,I]of Object.entries(a))if(I.isList)o.push(()=>{const h=oe[I.countType](s,e,this.littleEndian);e+=mt[I.countType],e+=h*mt[I.type]});else{if(l)if(g==="f_dc_0"||g==="f_dc_1"||g==="f_dc_2"){const h=Number.parseInt(g.slice(5));o.push(()=>{const B=(A[c+h]/255-.5)/ae;Bs[I.type](s,e,this.littleEndian,B)})}else g==="opacity"&&o.push(()=>{const h=Math.max(-100,Math.min(100,-Math.log(1/(A[c+3]/255)-1)));Bs[I.type](s,e,this.littleEndian,h)});o.push(()=>{e+=mt[I.type]})}for(let g=0;g<r;g++){for(const I of o)I();l&&(c+=4)}}}};Dt.defaultPointScale=.001;let Ot=Dt;const ae=.28209479177387814,oe={char:(t,A,e)=>t.getInt8(A),uchar:(t,A,e)=>t.getUint8(A),short:(t,A,e)=>t.getInt16(A,e),ushort:(t,A,e)=>t.getUint16(A,e),int:(t,A,e)=>t.getInt32(A,e),uint:(t,A,e)=>t.getUint32(A,e),float:(t,A,e)=>t.getFloat32(A,e),double:(t,A,e)=>t.getFloat64(A,e)},Bs={char:(t,A,e,s)=>{t.setInt8(A,s)},uchar:(t,A,e,s)=>{t.setUint8(A,s)},short:(t,A,e,s)=>{t.setInt16(A,s,e)},ushort:(t,A,e,s)=>{t.setUint16(A,s,e)},int:(t,A,e,s)=>{t.setInt32(A,s,e)},uint:(t,A,e,s)=>{t.setUint32(A,s,e)},float:(t,A,e,s)=>{t.setFloat32(A,s,e)},double:(t,A,e,s)=>{t.setFloat64(A,s,e)}},mt={char:1,uchar:1,short:2,ushort:2,int:4,uint:4,float:4,double:8},ge={char:127,uchar:255,short:32767,ushort:65535,int:2147483647,uint:4294967295,float:1,double:1},wu={0:0,9:1,24:2,45:3},mu={0:0,1:9,2:24,3:45};function Qs(t){let A=0;for(;t[`f_rest_${A}`];)A+=1;const e=wu[A];if(e==null)throw new Error(`Unsupported number of SH coefficients: ${A}`);return e}const eo='(function(){"use strict";let xA;const ss=typeof TextDecoder<"u"?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};typeof TextDecoder<"u"&&ss.decode();let jA=null;function Vs(){return(jA===null||jA.byteLength===0)&&(jA=new Uint8Array(xA.memory.buffer)),jA}function js(e,A){return e=e>>>0,ss.decode(Vs().subarray(e,e+A))}function Os(e,A,t){return xA.sort_splats(e,A,t)>>>0}function $s(e,A,t){return xA.sort32_splats(e,A,t)>>>0}async function Ae(e,A){if(typeof Response=="function"&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(e,A)}catch(s){if(e.headers.get("Content-Type")!="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n",s);else throw s}const t=await e.arrayBuffer();return await WebAssembly.instantiate(t,A)}else{const t=await WebAssembly.instantiate(e,A);return t instanceof WebAssembly.Instance?{instance:t,module:e}:t}}function te(){const e={};return e.wbg={},e.wbg.__wbg_buffer_609cc3eee51ed158=function(A){return A.buffer},e.wbg.__wbg_length_3b4f022188ae8db6=function(A){return A.length},e.wbg.__wbg_length_6ca527665d89694d=function(A){return A.length},e.wbg.__wbg_length_8cfd2c6409af88ad=function(A){return A.length},e.wbg.__wbg_new_9fee97a409b32b68=function(A){return new Uint16Array(A)},e.wbg.__wbg_new_e3b321dcfef89fc7=function(A){return new Uint32Array(A)},e.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354=function(A,t,s){return new Float32Array(A,t>>>0,s>>>0)},e.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212=function(A,t,s){return new Uint32Array(A,t>>>0,s>>>0)},e.wbg.__wbg_newwithlength_5a5efe313cfd59f1=function(A){return new Float32Array(A>>>0)},e.wbg.__wbg_set_10bad9bee0e9c58b=function(A,t,s){A.set(t,s>>>0)},e.wbg.__wbg_set_d23661d19148b229=function(A,t,s){A.set(t,s>>>0)},e.wbg.__wbg_set_f4f1f0daa30696fc=function(A,t,s){A.set(t,s>>>0)},e.wbg.__wbg_subarray_3aaeec89bb2544f0=function(A,t,s){return A.subarray(t>>>0,s>>>0)},e.wbg.__wbg_subarray_769e1e0f81bb259b=function(A,t,s){return A.subarray(t>>>0,s>>>0)},e.wbg.__wbindgen_init_externref_table=function(){const A=xA.__wbindgen_export_0,t=A.grow(4);A.set(0,void 0),A.set(t+0,void 0),A.set(t+1,null),A.set(t+2,!0),A.set(t+3,!1)},e.wbg.__wbindgen_memory=function(){return xA.memory},e.wbg.__wbindgen_throw=function(A,t){throw new Error(js(A,t))},e}function se(e,A){return xA=e.exports,es.__wbindgen_wasm_module=A,jA=null,xA.__wbindgen_start(),xA}async function es(e){if(xA!==void 0)return xA;typeof e<"u"&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),typeof e>"u"&&(e=new URL("data:application/wasm;base64,AGFzbQEAAAABzAEeYAJ/fwF/YAJ/fwBgA39/fwF/YAF/AX9gA39/fwBgAX8AYAV/f39/fwBgA29/fwFvYAV/f39/fwF/YAFvAW9gA29vfwBgAW8Bf2AAAX9gBH9/f38AYAAAYAR/f39/AX9gA39vbwF/YAF/AW9gAAFvYAF9AX1gBn9/f39/fwBgDX19fX19fX19f29/fX0Bb2AGf39/f39/AX9gBX9/fH9/AGAEf3x/fwBgBX9/fX9/AGAEf31/fwBgBX9/fn9/AGAEf35/fwBgAn19AX0C8gQRA3diZx1fX3diZ19idWZmZXJfNjA5Y2MzZWVlNTFlZDE1OAAJA3diZxpfX3diZ19uZXdfOWZlZTk3YTQwOWIzMmI2OAAJA3diZxpfX3diZ19zZXRfZjRmMWYwZGFhMzA2OTZmYwAKA3diZx1fX3diZ19sZW5ndGhfOGNmZDJjNjQwOWFmODhhZAALA3diZzFfX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9mMWRlYWQ0NGQxZmM3MjEyAAcDd2JnGl9fd2JnX25ld19lM2IzMjFkY2ZlZjg5ZmM3AAkDd2JnGl9fd2JnX3NldF9kMjM2NjFkMTkxNDhiMjI5AAoDd2JnHV9fd2JnX2xlbmd0aF82Y2E1Mjc2NjVkODk2OTRkAAsDd2JnMV9fd2JnX25ld3dpdGhieXRlb2Zmc2V0YW5kbGVuZ3RoX2U2YjdlNjlhY2Q0YzczNTQABwN3YmcaX193Ymdfc2V0XzEwYmFkOWJlZTBlOWM1OGIACgN3YmcdX193YmdfbGVuZ3RoXzNiNGYwMjIxODhhZThkYjYACwN3YmcfX193Ymdfc3ViYXJyYXlfNzY5ZTFlMGY4MWJiMjU5YgAHA3diZx9fX3diZ19zdWJhcnJheV8zYWFlZWM4OWJiMjU0NGYwAAcDd2JnJF9fd2JnX25ld3dpdGhsZW5ndGhfNWE1ZWZlMzEzY2ZkNTlmMQARA3diZxBfX3diaW5kZ2VuX3Rocm93AAEDd2JnEV9fd2JpbmRnZW5fbWVtb3J5ABIDd2JnH19fd2JpbmRnZW5faW5pdF9leHRlcm5yZWZfdGFibGUADgNhYAMAAQIIBQQCEwEMAAEBAgAAAQwBBAYFBQQAAQYFFAENBAAGBQQEAQQOAgECAQAIBAAVARYG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ACIDKAIEQXhxRgRAIAMhAgwBCyABQRkgAkEBdmtBACACQR9HG3QhBQNAIAMgBUEddkEEcWpBEGoiBCgCACICRQ0CIAVBAXQhBSACIQMgAigCBEF4cSABRw0ACwsgAigCCCIBIAA2AgwgAiAANgIIIABBADYCGCAAIAI2AgwgACABNgIIDwsgBCAANgIAIAAgAzYCGCAAIAA2AgwgACAANgIIC/MCAQR/IwBBMGsiACQAAkACQEGQksAAKAIARQRAQaiSwAAoAgAhAUGoksAAQQA2AgAgAUUNASAAQRhqIAERBQAgAEEQaiICIABBJGopAgA3AwAgACAAKQIcNwMIIAAoAhghAUGQksAAKAIAIgMNAgJAIANFDQBBlJLAACgCACICRQ0AQZiSwAAoAgAgAkECdBBlC0GUksAAIAE2AgBBkJLAAEEBNgIAQZiSwAAgACkDCDcCAEGgksAAIABBEGopAwA3AgALIABBMGokAEGUksAADwsgAEEANgIoIABBATYCHCAAQaCHwAA2AhggAEIENwIgIABBGGpBiIjAABBDAAsgAEEoaiACKQMANwIAIAAgACkDCDcCICAAIAE2AhwgAEEBNgIYAkAgAEEYaiIBKAIARQ0AIAEoAgQiAkUNACABKAIIIAJBAnQQZQsgAEEANgIoIABBATYCHCAAQaiIwAA2AhggAEIENwIgIAFBsIjAABBDAAuoAgIDfwF+IwBBQGoiAiQAIAEoAgBBgICAgHhGBEAgASgCDCEDIAJBJGoiBEEANgIAIAJCgICAgBA3AhwgAkEwaiADKAIAIgNBCGopAgA3AwAgAkE4aiADQRBqKQIANwMAIAIgAykCADcDKCACQRxqQcCIwAAgAkEoahAYGiACQRhqIAQoAgAiAzYCACACIAIpAhwiBTcDECABQQhqIAM2AgAgASAFNwIACyABKQIAIQUgAUKAgICAEDcCACACQQhqIgMgAUEIaiIBKAIANgIAIAFBADYCAEGxk8AALQAAGiACIAU3AwBBDEEEEF0iAUUEQEEEQQwQbQALIAEgAikDADcCACABQQhqIAMoAgA2AgAgAEHgisAANgIEIAAgATYCACACQUBrJAAL0gECBH8BfiMAQSBrIgMkACABIAEgAmoiAksEQEEAQQAQUgALQQggACgCACIEQQF0IgEgAiABIAJLGyICIAJBCEkb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QQRqrUKAgICA4ACENwMoIAEgAa1CgICAgOAAhDcDICABIAFBIGo2AhAgAUEIakHIj8AAEEMAC2kCAX8BfiMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQfyNwAA2AgggA0ICNwIUIANCgICAgOAAIgQgA62ENwMoIAMgBCADQQRqrYQ3AyAgAyADQSBqNgIQIANBCGogAhBDAAtpAgF/AX4jAEEwayIDJAAgAyAANgIAIAMgATYCBCADQQI2AgwgA0H4kcAANgIIIANCAjcCFCADQoCAgIDgACIEIANBBGqthDcDKCADIAQgA62ENwMgIAMgA0EgajYCECADQQhqIAIQQwALZgAjAEEwayIAJABBsJPAAC0AAARAIABBAjYCDCAAQbCKwAA2AgggAEIBNwIUIAAgATYCLCAAIABBLGqtQoCAgIDgAIQ3AyAgACAAQSBqNgIQIABBCGpB0IrAABBDAAsgAEEwaiQAC5QBAgN/AW8jAEEgayIDJAAgAyAAKAIAEHAiBDYCACADIAI2AgQgAiAERwRAIANBADYCCCADIANBBGogA0EIahBAAAsQWyIEEFMiBSUBEAUhBhAbIgIgBiYBIAVBhAFPBEAgBRAtCyACIAAoAgAgAUECdhBkIAJBhAFPBEAgAhAtCyAEQYQBTwRAIAQQLQsgA0EgaiQAC08BAX8jAEEwayIAJAAgAEEBNgIMIABBwI3AADYCCCAAQgE3AhQgACAAQS9qrUKAgICAoAWENwMgIAAgAEEgajYCECAAQQhqQcSBwAAQQwALQQEBfyACIAAoAgAgACgCCCIDa0sEQCAAIAMgAhAlIAAoAgghAwsgACgCBCADaiABIAIQHxogACACIANqNgIIQQALTQECf0Gxk8AALQAAGiABKAIEIQIgASgCACEDQQhBBBBdIgFFBEBBBEEIEG0ACyABIAI2AgQgASADNgIAIABB8IrAADYCBCAAIAE2AgALQQEBfyACIAAoAgAgACgCCCIDa0sEQCAAIAMgAhApIAAoAgghAwsgACgCBCADaiABIAIQHxogACACIANqNgIIQQALQQEBfyMAQSBrIgIkACACQQA2AhAgAkEBNgIEIAJCBDcCCCACQS42AhwgAiAANgIYIAIgAkEYajYCACACIAEQQwALswIBA38gACgCACECIAEoAhwiAEEQcUUE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ZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkTGF6eSBpbnN0YW5jZSBoYXMgcHJldmlvdXNseSBiZWVuIHBvaXNvbmVkdgMQACoAAAAvVXNlcnMvZG1hcmNvcy8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL29uY2VfY2VsbC0xLjIxLjMvc3JjL2xpYi5ycwCoAxAAXwAAAAgDAAAZAAAAcmVlbnRyYW50IGluaXQAABgEEAAOAAAAqAMQAF8AAAB6AgAADQAAABYAAAAMAAAABAAAABcAAAAYAAAAGQAAAC9ydXN0L2RlcHMvZGxtYWxsb2MtMC4yLjYvc3JjL2RsbWFsbG9jLnJzYXNzZXJ0aW9uIGZhaWxlZDogcHNpemUgPj0gc2l6ZSArIG1pbl9vdmVyaGVhZABYBBAAKQAAAKgEAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogcHNpemUgPD0gc2l6ZSArIG1heF9vdmVyaGVhZAAAWAQQACkAAACuBAAADQAAAEFjY2Vzc0Vycm9ybWVtb3J5IGFsbG9jYXRpb24gb2YgIGJ5dGVzIGZhaWxlZAAAAAsFEAAVAAAAIAUQAA0AAABzdGQvc3JjL2FsbG9jLnJzQAUQABAAAABjAQAACQAAABYAAAAMAAAABAAAABoAAAAAAAAACAAAAAQAAAAbAAAAAAAAAAgAAAAEAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAQAAAABAAAACEAAAAiAAAAIwAAACQAAABFcnJvcgAAACUAAAAMAAAABAAAACYAAAAnAAAAKAAAAGNhcGFjaXR5IG92ZXJmbG93AAAA2AUQABEAAABhbGxvYy9zcmMvcmF3X3ZlYy5yc/QFEAAUAAAAGAAAAAUAQaCMwAAL8AUBAAAAKQAAAGEgZm9ybWF0dGluZyB0cmFpdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB3aGVuIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBkaWQgbm90YWxsb2Mvc3JjL2ZtdC5ycwAAfgYQABAAAAB+AgAADgAAAEJvcnJvd011dEVycm9yYWxyZWFkeSBib3Jyb3dlZDogrgYQABIAAABpbmRleCBvdXQgb2YgYm91bmRzOiB0aGUgbGVuIGlzICBidXQgdGhlIGluZGV4IGlzIAAAyAYQACAAAADoBhAAEgAAAD09IT1tYXRjaGVzYXNzZXJ0aW9uIGBsZWZ0ICByaWdodGAgZmFpbGVkCiAgbGVmdDogCiByaWdodDogABcHEAAQAAAAJwcQABcAAAA+BxAACQAAACByaWdodGAgZmFpbGVkOiAKICBsZWZ0OiAAAAAXBxAAEAAAAGAHEAAQAAAAcAcQAAkAAAA+BxAACQAAADogAAABAAAAAAAAAJwHEAACAAAAfSB9Y29yZS9zcmMvZm10L251bS5ycwAAswcQABMAAABmAAAAFwAAADB4MDAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTIwMjEyMjIzMjQyNTI2MjcyODI5MzAzMTMyMzMzNDM1MzYzNzM4Mzk0MDQxNDI0MzQ0NDU0NjQ3NDg0OTUwNTE1MjUzNTQ1NTU2NTc1ODU5NjA2MTYyNjM2NDY1NjY2NzY4Njk3MDcxNzI3Mzc0NzU3Njc3Nzg3OTgwODE4MjgzODQ4NTg2ODc4ODg5OTA5MTkyOTM5NDk1OTY5Nzk4OTlyYW5nZSBzdGFydCBpbmRleCAgb3V0IG9mIHJhbmdlIGZvciBzbGljZSBvZiBsZW5ndGggAACiCBAAEgAAALQIEAAiAAAAcmFuZ2UgZW5kIGluZGV4IOgIEAAQAAAAtAgQACIAAAAAAAA/AAAAvwBBqJLAAAsBFABwCXByb2R1Y2VycwIIbGFuZ3VhZ2UBBFJ1c3QADHByb2Nlc3NlZC1ieQMFcnVzdGMdMS44My4wICg5MGIzNWE2MjMgMjAyNC0xMS0yNikGd2FscnVzBjAuMjMuMwx3YXNtLWJpbmRnZW4HMC4yLjEwMABJD3RhcmdldF9mZWF0dXJlcwQrD211dGFibGUtZ2xvYmFscysIc2lnbi1leHQrD3JlZmVyZW5jZS10eXBlcysKbXVsdGl2YWx1ZQ==",self.location.href));const A=te();(typeof e=="string"||typeof Request=="function"&&e instanceof Request||typeof URL=="function"&&e instanceof URL)&&(e=fetch(e));const{instance:t,module:s}=await Ae(await e,A);return se(t,s)}var is={},ee=function(e,A,t,s,i){var n=new Worker(is[A]||(is[A]=URL.createObjectURL(new Blob([e+\';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})\'],{type:"text/javascript"}))));return n.onmessage=function(g){var r=g.data,I=r.$e$;if(I){var o=new Error(I[0]);o.code=I[1],o.stack=I[2],i(o,null)}else i(null,r)},n.postMessage(t,s),n},V=Uint8Array,JA=Uint16Array,ns=Int32Array,Ft=new V([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,0,0,0]),St=new V([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,0,0]),gs=new V([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),rs=function(e,A){for(var t=new JA(31),s=0;s<31;++s)t[s]=A+=1<<e[s-1];for(var i=new ns(t[30]),s=1;s<30;++s)for(var n=t[s];n<t[s+1];++n)i[n]=n-t[s]<<5|s;return{b:t,r:i}},Is=rs(Ft,2),dt=Is.b,ie=Is.r;dt[28]=258,ie[258]=28;for(var ne=rs(St,0),os=ne.b,gt=new JA(32768),X=0;X<32768;++X){var SA=(X&43690)>>1|(X&21845)<<1;SA=(SA&52428)>>2|(SA&13107)<<2,SA=(SA&61680)>>4|(SA&3855)<<4,gt[X]=((SA&65280)>>8|(SA&255)<<8)>>1}for(var HA=function(e,A,t){for(var s=e.length,i=0,n=new JA(A);i<s;++i)e[i]&&++n[e[i]-1];var g=new JA(A);for(i=1;i<A;++i)g[i]=g[i-1]+n[i-1]<<1;var r;if(t){r=new JA(1<<A);var I=15-A;for(i=0;i<s;++i)if(e[i])for(var o=i<<4|e[i],a=A-e[i],C=g[e[i]-1]++<<a,Q=C|(1<<a)-1;C<=Q;++C)r[gt[C]>>I]=o}else for(r=new JA(s),i=0;i<s;++i)e[i]&&(r[i]=gt[g[e[i]-1]++]>>15-e[i]);return r},OA=new V(288),X=0;X<144;++X)OA[X]=8;for(var X=144;X<256;++X)OA[X]=9;for(var X=256;X<280;++X)OA[X]=7;for(var X=280;X<288;++X)OA[X]=8;for(var as=new V(32),X=0;X<32;++X)as[X]=5;var Cs=HA(OA,9,1),Bs=HA(as,5,1),rt=function(e){for(var A=e[0],t=1;t<e.length;++t)e[t]>A&&(A=e[t]);return A},BA=function(e,A,t){var s=A/8|0;return(e[s]|e[s+1]<<8)>>(A&7)&t},It=function(e,A){var t=A/8|0;return(e[t]|e[t+1]<<8|e[t+2]<<16)>>(A&7)},Nt=function(e){return(e+7)/8|0},dA=function(e,A,t){return(A==null||A<0)&&(A=0),(t==null||t>e.length)&&(t=e.length),new V(e.subarray(A,t))},Qs=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],j=function(e,A,t){var s=new Error(A||Qs[e]);if(s.code=e,Error.captureStackTrace&&Error.captureStackTrace(s,j),!t)throw s;return s},kt=function(e,A,t,s){var i=e.length,n=s?s.length:0;if(!i||A.f&&!A.l)return t||new V(0);var g=!t,r=g||A.i!=2,I=A.i;g&&(t=new V(i*3));var o=function(gA){var oA=t.length;if(gA>oA){var aA=new V(Math.max(oA*2,gA));aA.set(t),t=aA}},a=A.f||0,C=A.p||0,Q=A.b||0,B=A.l,h=A.d,l=A.m,c=A.n,E=i*8;do{if(!B){a=BA(e,C,1);var u=BA(e,C+1,3);if(C+=3,u)if(u==1)B=Cs,h=Bs,l=9,c=5;else if(u==2){var S=BA(e,C,31)+257,b=BA(e,C+10,15)+4,x=S+BA(e,C+5,31)+1;C+=14;for(var m=new V(x),G=new V(19),p=0;p<b;++p)G[gs[p]]=BA(e,C+p*3,7);C+=b*3;for(var w=rt(G),M=(1<<w)-1,z=HA(G,w,1),p=0;p<x;){var Y=z[BA(e,C,M)];C+=Y&15;var y=Y>>4;if(y<16)m[p++]=y;else{var N=0,q=0;for(y==16?(q=3+BA(e,C,3),C+=2,N=m[p-1]):y==17?(q=3+BA(e,C,7),C+=3):y==18&&(q=11+BA(e,C,127),C+=7);q--;)m[p++]=N}}var T=m.subarray(0,S),v=m.subarray(S);l=rt(T),c=rt(v),B=HA(T,l,1),h=HA(v,c,1)}else j(1);else{var y=Nt(C)+4,f=e[y-4]|e[y-3]<<8,D=y+f;if(D>i){I&&j(0);break}r&&o(Q+f),t.set(e.subarray(y,D),Q),A.b=Q+=f,A.p=C=D*8,A.f=a;continue}if(C>E){I&&j(0);break}}r&&o(Q+131072);for(var P=(1<<l)-1,Z=(1<<c)-1,W=C;;W=C){var N=B[It(e,C)&P],L=N>>4;if(C+=N&15,C>E){I&&j(0);break}if(N||j(2),L<256)t[Q++]=L;else if(L==256){W=C,B=null;break}else{var K=L-254;if(L>264){var p=L-257,J=Ft[p];K=BA(e,C,(1<<J)-1)+dt[p],C+=J}var R=h[It(e,C)&Z],F=R>>4;R||j(3),C+=R&15;var v=os[F];if(F>3){var J=St[F];v+=It(e,C)&(1<<J)-1,C+=J}if(C>E){I&&j(0);break}r&&o(Q+131072);var eA=Q+K;if(Q<v){var iA=n-v,IA=Math.min(v,eA);for(iA+Q<0&&j(3);Q<IA;++Q)t[Q]=s[iA+Q]}for(;Q<eA;++Q)t[Q]=t[Q-v]}}A.l=B,A.p=W,A.b=Q,A.f=a,B&&(a=1,A.m=l,A.d=h,A.n=c)}while(!a);return Q!=t.length&&g?dA(t,0,Q):t.subarray(0,Q)},ge=new V(0),re=function(e,A){var t={};for(var s in e)t[s]=e[s];for(var s in A)t[s]=A[s];return t},hs=function(e,A,t){for(var s=e(),i=e.toString(),n=i.slice(i.indexOf("[")+1,i.lastIndexOf("]")).replace(/\\s+/g,"").split(","),g=0;g<s.length;++g){var r=s[g],I=n[g];if(typeof r=="function"){A+=";"+I+"=";var o=r.toString();if(r.prototype)if(o.indexOf("[native code]")!=-1){var a=o.indexOf(" ",8)+1;A+=o.slice(a,o.indexOf("(",a))}else{A+=o;for(var C in r.prototype)A+=";"+I+".prototype."+C+"="+r.prototype[C].toString()}else A+=o}else t[I]=r}return A},ot=[],Ie=function(e){var A=[];for(var t in e)e[t].buffer&&A.push((e[t]=new e[t].constructor(e[t])).buffer);return A},oe=function(e,A,t,s){if(!ot[t]){for(var i="",n={},g=e.length-1,r=0;r<g;++r)i=hs(e[r],i,n);ot[t]={c:hs(e[g],i,n),e:n}}var I=re({},ot[t].e);return ee(ot[t].c+";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage="+A.toString()+"}",t,I,Ie(I),s)},ae=function(){return[V,JA,ns,Ft,St,gs,dt,os,Cs,Bs,gt,Qs,HA,rt,BA,It,Nt,dA,j,kt,at,Es,cs]},Es=function(e){return postMessage(e,[e.buffer])},cs=function(e){return e&&{out:e.size&&new V(e.size),dictionary:e.dictionary}},Ce=function(e,A,t,s,i,n){var g=oe(t,s,i,function(r,I){g.terminate(),n(r,I)});return g.postMessage([e,A],A.consume?[e.buffer]:[]),function(){g.terminate()}},lA=function(e,A){return e[A]|e[A+1]<<8},tA=function(e,A){return(e[A]|e[A+1]<<8|e[A+2]<<16|e[A+3]<<24)>>>0},Gt=function(e,A){return tA(e,A)+tA(e,A+4)*4294967296},Be=function(e){(e[0]!=31||e[1]!=139||e[2]!=8)&&j(6,"invalid gzip data");var A=e[3],t=10;A&4&&(t+=(e[10]|e[11]<<8)+2);for(var s=(A>>3&1)+(A>>4&1);s>0;s-=!e[t++]);return t+(A&2)},Ut=function(){function e(A,t){typeof A=="function"&&(t=A,A={}),this.ondata=t;var s=A&&A.dictionary&&A.dictionary.subarray(-32768);this.s={i:0,b:s?s.length:0},this.o=new V(32768),this.p=new V(0),s&&this.o.set(s)}return e.prototype.e=function(A){if(this.ondata||j(5),this.d&&j(4),!this.p.length)this.p=A;else if(A.length){var t=new V(this.p.length+A.length);t.set(this.p),t.set(A,this.p.length),this.p=t}},e.prototype.c=function(A){this.s.i=+(this.d=A||!1);var t=this.s.b,s=kt(this.p,this.s,this.o);this.ondata(dA(s,t,this.s.b),this.d),this.o=dA(s,this.s.b-32768),this.s.b=this.o.length,this.p=dA(this.p,this.s.p/8|0),this.s.p&=7},e.prototype.push=function(A,t){this.e(A),this.c(t)},e}();function Qe(e,A,t){return t||(t=A,A={}),typeof t!="function"&&j(7),Ce(e,A,[ae],function(s){return Es(at(s.data[0],cs(s.data[1])))},1,t)}function at(e,A){return kt(e,{i:2},A&&A.out,A&&A.dictionary)}var ls=function(){function e(A,t){this.v=1,this.r=0,Ut.call(this,A,t)}return e.prototype.push=function(A,t){if(Ut.prototype.e.call(this,A),this.r+=A.length,this.v){var s=this.p.subarray(this.v-1),i=s.length>3?Be(s):4;if(i>s.length){if(!t)return}else this.v>1&&this.onmember&&this.onmember(this.r-s.length);this.p=s.subarray(i),this.v=0}Ut.prototype.c.call(this,t),this.s.f&&!this.s.l&&!t&&(this.v=Nt(this.s.p)+9,this.s={i:0},this.o=new V(0),this.push(new V(0),t))},e}(),Yt=typeof TextDecoder<"u"&&new TextDecoder;try{Yt.decode(ge,{stream:!0})}catch{}var he=function(e){for(var A="",t=0;;){var s=e[t++],i=(s>127)+(s>223)+(s>239);if(t+i>e.length)return{s:A,r:dA(e,t-1)};i?i==3?(s=((s&15)<<18|(e[t++]&63)<<12|(e[t++]&63)<<6|e[t++]&63)-65536,A+=String.fromCharCode(55296|s>>10,56320|s&1023)):i&1?A+=String.fromCharCode((s&31)<<6|e[t++]&63):A+=String.fromCharCode((s&15)<<12|(e[t++]&63)<<6|e[t++]&63):A+=String.fromCharCode(s)}};function Ee(e,A){if(A){for(var t="",s=0;s<e.length;s+=16384)t+=String.fromCharCode.apply(null,e.subarray(s,s+16384));return t}else{if(Yt)return Yt.decode(e);var i=he(e),n=i.s,t=i.r;return t.length&&j(8),n}}var us=function(e,A){return A+30+lA(e,A+26)+lA(e,A+28)},ys=function(e,A,t){var s=lA(e,A+28),i=Ee(e.subarray(A+46,A+46+s),!(lA(e,A+8)&2048)),n=A+46+s,g=tA(e,A+20),r=t&&g==4294967295?ce(e,n):[g,tA(e,A+24),tA(e,A+42)],I=r[0],o=r[1],a=r[2];return[lA(e,A+10),I,o,i,n+lA(e,A+30)+lA(e,A+32),a]},ce=function(e,A){for(;lA(e,A)!=1;A+=4+lA(e,A+2));return[Gt(e,A+12),Gt(e,A+4),Gt(e,A+20)]},fs=typeof queueMicrotask=="function"?queueMicrotask:typeof setTimeout=="function"?setTimeout:function(e){e()};function le(e,A,t){t||(t=A,A={}),typeof t!="function"&&j(7);var s=[],i=function(){for(var c=0;c<s.length;++c)s[c]()},n={},g=function(c,E){fs(function(){t(c,E)})};fs(function(){g=t});for(var r=e.length-22;tA(e,r)!=101010256;--r)if(!r||e.length-r>65558)return g(j(13,0,1),null),i;var I=lA(e,r+8);if(I){var o=I,a=tA(e,r+16),C=a==4294967295||o==65535;if(C){var Q=tA(e,r-12);C=tA(e,Q)==101075792,C&&(o=I=tA(e,Q+32),a=tA(e,Q+48))}for(var B=A&&A.filter,h=function(c){var E=ys(e,a,C),u=E[0],y=E[1],f=E[2],D=E[3],S=E[4],b=E[5],x=us(e,b);a=S;var m=function(p,w){p?(i(),g(p,null)):(w&&(n[D]=w),--I||g(null,n))};if(!B||B({name:D,size:y,originalSize:f,compression:u}))if(!u)m(null,dA(e,x,x+y));else if(u==8){var G=e.subarray(x,x+y);if(f<524288||y>.8*f)try{m(null,at(G,{out:new V(f)}))}catch(p){m(p,null)}else s.push(Qe(G,{size:f},m))}else m(j(14,"unknown compression type "+u,1),null);else m(null,null)},l=0;l<o;++l)h(l)}else g(null,{});return i}function ue(e,A){for(var t={},s=e.length-22;tA(e,s)!=101010256;--s)(!s||e.length-s>65558)&&j(13);var i=lA(e,s+8);if(!i)return{};var n=tA(e,s+16),g=n==4294967295||i==65535;if(g){var r=tA(e,s-12);g=tA(e,r)==101075792,g&&(i=tA(e,r+32),n=tA(e,r+48))}for(var I=A&&A.filter,o=0;o<i;++o){var a=ys(e,n,g),C=a[0],Q=a[1],B=a[2],h=a[3],l=a[4],c=a[5],E=us(e,c);n=l,(!I||I({name:h,size:Q,originalSize:B,compression:C}))&&(C?C==8?t[h]=at(e.subarray(E,E+Q),{out:new V(B)}):j(14,"unknown compression type "+C):t[h]=dA(e,E,E+Q))}return t}/**\n * @license\n * Copyright 2010-2024 Three.js Authors\n * SPDX-License-Identifier: MIT\n */const ws="172",ye="",uA="srgb",ms="srgb-linear",xs="linear",Rt="srgb";function rA(e,A,t){return Math.max(A,Math.min(t,e))}function fe(e,A){return(e%A+A)%A}function bt(e,A,t){return(1-t)*e+t*A}class $A{constructor(A,t,s,i,n,g,r,I,o){$A.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],A!==void 0&&this.set(A,t,s,i,n,g,r,I,o)}set(A,t,s,i,n,g,r,I,o){const a=this.elements;return a[0]=A,a[1]=i,a[2]=r,a[3]=t,a[4]=n,a[5]=I,a[6]=s,a[7]=g,a[8]=o,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(A){const t=this.elements,s=A.elements;return t[0]=s[0],t[1]=s[1],t[2]=s[2],t[3]=s[3],t[4]=s[4],t[5]=s[5],t[6]=s[6],t[7]=s[7],t[8]=s[8],this}extractBasis(A,t,s){return A.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),s.setFromMatrix3Column(this,2),this}setFromMatrix4(A){const t=A.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(A){return this.multiplyMatrices(this,A)}premultiply(A){return this.multiplyMatrices(A,this)}multiplyMatrices(A,t){const s=A.elements,i=t.elements,n=this.elements,g=s[0],r=s[3],I=s[6],o=s[1],a=s[4],C=s[7],Q=s[2],B=s[5],h=s[8],l=i[0],c=i[3],E=i[6],u=i[1],y=i[4],f=i[7],D=i[2],S=i[5],b=i[8];return n[0]=g*l+r*u+I*D,n[3]=g*c+r*y+I*S,n[6]=g*E+r*f+I*b,n[1]=o*l+a*u+C*D,n[4]=o*c+a*y+C*S,n[7]=o*E+a*f+C*b,n[2]=Q*l+B*u+h*D,n[5]=Q*c+B*y+h*S,n[8]=Q*E+B*f+h*b,this}multiplyScalar(A){const t=this.elements;return t[0]*=A,t[3]*=A,t[6]*=A,t[1]*=A,t[4]*=A,t[7]*=A,t[2]*=A,t[5]*=A,t[8]*=A,this}determinant(){const A=this.elements,t=A[0],s=A[1],i=A[2],n=A[3],g=A[4],r=A[5],I=A[6],o=A[7],a=A[8];return t*g*a-t*r*o-s*n*a+s*r*I+i*n*o-i*g*I}invert(){const A=this.elements,t=A[0],s=A[1],i=A[2],n=A[3],g=A[4],r=A[5],I=A[6],o=A[7],a=A[8],C=a*g-r*o,Q=r*I-a*n,B=o*n-g*I,h=t*C+s*Q+i*B;if(h===0)return this.set(0,0,0,0,0,0,0,0,0);const l=1/h;return A[0]=C*l,A[1]=(i*o-a*s)*l,A[2]=(r*s-i*g)*l,A[3]=Q*l,A[4]=(a*t-i*I)*l,A[5]=(i*n-r*t)*l,A[6]=B*l,A[7]=(s*I-o*t)*l,A[8]=(g*t-s*n)*l,this}transpose(){let A;const t=this.elements;return A=t[1],t[1]=t[3],t[3]=A,A=t[2],t[2]=t[6],t[6]=A,A=t[5],t[5]=t[7],t[7]=A,this}getNormalMatrix(A){return this.setFromMatrix4(A).invert().transpose()}transposeIntoArray(A){const t=this.elements;return A[0]=t[0],A[1]=t[3],A[2]=t[6],A[3]=t[1],A[4]=t[4],A[5]=t[7],A[6]=t[2],A[7]=t[5],A[8]=t[8],this}setUvTransform(A,t,s,i,n,g,r){const I=Math.cos(n),o=Math.sin(n);return this.set(s*I,s*o,-s*(I*g+o*r)+g+A,-i*o,i*I,-i*(-o*g+I*r)+r+t,0,0,1),this}scale(A,t){return this.premultiply(Jt.makeScale(A,t)),this}rotate(A){return this.premultiply(Jt.makeRotation(-A)),this}translate(A,t){return this.premultiply(Jt.makeTranslation(A,t)),this}makeTranslation(A,t){return A.isVector2?this.set(1,0,A.x,0,1,A.y,0,0,1):this.set(1,0,A,0,1,t,0,0,1),this}makeRotation(A){const t=Math.cos(A),s=Math.sin(A);return this.set(t,-s,0,s,t,0,0,0,1),this}makeScale(A,t){return this.set(A,0,0,0,t,0,0,0,1),this}equals(A){const t=this.elements,s=A.elements;for(let i=0;i<9;i++)if(t[i]!==s[i])return!1;return!0}fromArray(A,t=0){for(let s=0;s<9;s++)this.elements[s]=A[s+t];return this}toArray(A=[],t=0){const s=this.elements;return A[t]=s[0],A[t+1]=s[1],A[t+2]=s[2],A[t+3]=s[3],A[t+4]=s[4],A[t+5]=s[5],A[t+6]=s[6],A[t+7]=s[7],A[t+8]=s[8],A}clone(){return new this.constructor().fromArray(this.elements)}}const Jt=new $A,Ds=new $A().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),ps=new $A().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function we(){const e={enabled:!0,workingColorSpace:ms,spaces:{},convert:function(i,n,g){return this.enabled===!1||n===g||!n||!g||(this.spaces[n].transfer===Rt&&(i.r=qA(i.r),i.g=qA(i.g),i.b=qA(i.b)),this.spaces[n].primaries!==this.spaces[g].primaries&&(i.applyMatrix3(this.spaces[n].toXYZ),i.applyMatrix3(this.spaces[g].fromXYZ)),this.spaces[g].transfer===Rt&&(i.r=vA(i.r),i.g=vA(i.g),i.b=vA(i.b))),i},fromWorkingColorSpace:function(i,n){return this.convert(i,this.workingColorSpace,n)},toWorkingColorSpace:function(i,n){return this.convert(i,n,this.workingColorSpace)},getPrimaries:function(i){return this.spaces[i].primaries},getTransfer:function(i){return i===ye?xs:this.spaces[i].transfer},getLuminanceCoefficients:function(i,n=this.workingColorSpace){return i.fromArray(this.spaces[n].luminanceCoefficients)},define:function(i){Object.assign(this.spaces,i)},_getMatrix:function(i,n,g){return i.copy(this.spaces[n].toXYZ).multiply(this.spaces[g].fromXYZ)},_getDrawingBufferColorSpace:function(i){return this.spaces[i].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(i=this.workingColorSpace){return this.spaces[i].workingColorSpaceConfig.unpackColorSpace}},A=[.64,.33,.3,.6,.15,.06],t=[.2126,.7152,.0722],s=[.3127,.329];return e.define({[ms]:{primaries:A,whitePoint:s,transfer:xs,toXYZ:Ds,fromXYZ:ps,luminanceCoefficients:t,workingColorSpaceConfig:{unpackColorSpace:uA},outputColorSpaceConfig:{drawingBufferColorSpace:uA}},[uA]:{primaries:A,whitePoint:s,transfer:Rt,toXYZ:Ds,fromXYZ:ps,luminanceCoefficients:t,outputColorSpaceConfig:{drawingBufferColorSpace:uA}}}),e}const yA=we();function qA(e){return e<.04045?e*.0773993808:Math.pow(e*.9478672986+.0521327014,2.4)}function vA(e){return e<.0031308?e*12.92:1.055*Math.pow(e,.41666)-.055}class NA{constructor(A=0,t=0,s=0,i=1){this.isQuaternion=!0,this._x=A,this._y=t,this._z=s,this._w=i}static slerpFlat(A,t,s,i,n,g,r){let I=s[i+0],o=s[i+1],a=s[i+2],C=s[i+3];const Q=n[g+0],B=n[g+1],h=n[g+2],l=n[g+3];if(r===0){A[t+0]=I,A[t+1]=o,A[t+2]=a,A[t+3]=C;return}if(r===1){A[t+0]=Q,A[t+1]=B,A[t+2]=h,A[t+3]=l;return}if(C!==l||I!==Q||o!==B||a!==h){let c=1-r;const E=I*Q+o*B+a*h+C*l,u=E>=0?1:-1,y=1-E*E;if(y>Number.EPSILON){const D=Math.sqrt(y),S=Math.atan2(D,E*u);c=Math.sin(c*S)/D,r=Math.sin(r*S)/D}const f=r*u;if(I=I*c+Q*f,o=o*c+B*f,a=a*c+h*f,C=C*c+l*f,c===1-r){const D=1/Math.sqrt(I*I+o*o+a*a+C*C);I*=D,o*=D,a*=D,C*=D}}A[t]=I,A[t+1]=o,A[t+2]=a,A[t+3]=C}static multiplyQuaternionsFlat(A,t,s,i,n,g){const r=s[i],I=s[i+1],o=s[i+2],a=s[i+3],C=n[g],Q=n[g+1],B=n[g+2],h=n[g+3];return A[t]=r*h+a*C+I*B-o*Q,A[t+1]=I*h+a*Q+o*C-r*B,A[t+2]=o*h+a*B+r*Q-I*C,A[t+3]=a*h-r*C-I*Q-o*B,A}get x(){return this._x}set x(A){this._x=A,this._onChangeCallback()}get y(){return this._y}set y(A){this._y=A,this._onChangeCallback()}get z(){return this._z}set z(A){this._z=A,this._onChangeCallback()}get w(){return this._w}set w(A){this._w=A,this._onChangeCallback()}set(A,t,s,i){return this._x=A,this._y=t,this._z=s,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(A){return this._x=A.x,this._y=A.y,this._z=A.z,this._w=A.w,this._onChangeCallback(),this}setFromEuler(A,t=!0){const s=A._x,i=A._y,n=A._z,g=A._order,r=Math.cos,I=Math.sin,o=r(s/2),a=r(i/2),C=r(n/2),Q=I(s/2),B=I(i/2),h=I(n/2);switch(g){case"XYZ":this._x=Q*a*C+o*B*h,this._y=o*B*C-Q*a*h,this._z=o*a*h+Q*B*C,this._w=o*a*C-Q*B*h;break;case"YXZ":this._x=Q*a*C+o*B*h,this._y=o*B*C-Q*a*h,this._z=o*a*h-Q*B*C,this._w=o*a*C+Q*B*h;break;case"ZXY":this._x=Q*a*C-o*B*h,this._y=o*B*C+Q*a*h,this._z=o*a*h+Q*B*C,this._w=o*a*C-Q*B*h;break;case"ZYX":this._x=Q*a*C-o*B*h,this._y=o*B*C+Q*a*h,this._z=o*a*h-Q*B*C,this._w=o*a*C+Q*B*h;break;case"YZX":this._x=Q*a*C+o*B*h,this._y=o*B*C+Q*a*h,this._z=o*a*h-Q*B*C,this._w=o*a*C-Q*B*h;break;case"XZY":this._x=Q*a*C-o*B*h,this._y=o*B*C-Q*a*h,this._z=o*a*h+Q*B*C,this._w=o*a*C+Q*B*h;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+g)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(A,t){const s=t/2,i=Math.sin(s);return this._x=A.x*i,this._y=A.y*i,this._z=A.z*i,this._w=Math.cos(s),this._onChangeCallback(),this}setFromRotationMatrix(A){const t=A.elements,s=t[0],i=t[4],n=t[8],g=t[1],r=t[5],I=t[9],o=t[2],a=t[6],C=t[10],Q=s+r+C;if(Q>0){const B=.5/Math.sqrt(Q+1);this._w=.25/B,this._x=(a-I)*B,this._y=(n-o)*B,this._z=(g-i)*B}else if(s>r&&s>C){const B=2*Math.sqrt(1+s-r-C);this._w=(a-I)/B,this._x=.25*B,this._y=(i+g)/B,this._z=(n+o)/B}else if(r>C){const B=2*Math.sqrt(1+r-s-C);this._w=(n-o)/B,this._x=(i+g)/B,this._y=.25*B,this._z=(I+a)/B}else{const B=2*Math.sqrt(1+C-s-r);this._w=(g-i)/B,this._x=(n+o)/B,this._y=(I+a)/B,this._z=.25*B}return this._onChangeCallback(),this}setFromUnitVectors(A,t){let s=A.dot(t)+1;return s<Number.EPSILON?(s=0,Math.abs(A.x)>Math.abs(A.z)?(this._x=-A.y,this._y=A.x,this._z=0,this._w=s):(this._x=0,this._y=-A.z,this._z=A.y,this._w=s)):(this._x=A.y*t.z-A.z*t.y,this._y=A.z*t.x-A.x*t.z,this._z=A.x*t.y-A.y*t.x,this._w=s),this.normalize()}angleTo(A){return 2*Math.acos(Math.abs(rA(this.dot(A),-1,1)))}rotateTowards(A,t){const s=this.angleTo(A);if(s===0)return this;const i=Math.min(1,t/s);return this.slerp(A,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(A){return this._x*A._x+this._y*A._y+this._z*A._z+this._w*A._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let A=this.length();return A===0?(this._x=0,this._y=0,this._z=0,this._w=1):(A=1/A,this._x=this._x*A,this._y=this._y*A,this._z=this._z*A,this._w=this._w*A),this._onChangeCallback(),this}multiply(A){return this.multiplyQuaternions(this,A)}premultiply(A){return this.multiplyQuaternions(A,this)}multiplyQuaternions(A,t){const s=A._x,i=A._y,n=A._z,g=A._w,r=t._x,I=t._y,o=t._z,a=t._w;return this._x=s*a+g*r+i*o-n*I,this._y=i*a+g*I+n*r-s*o,this._z=n*a+g*o+s*I-i*r,this._w=g*a-s*r-i*I-n*o,this._onChangeCallback(),this}slerp(A,t){if(t===0)return this;if(t===1)return this.copy(A);const s=this._x,i=this._y,n=this._z,g=this._w;let r=g*A._w+s*A._x+i*A._y+n*A._z;if(r<0?(this._w=-A._w,this._x=-A._x,this._y=-A._y,this._z=-A._z,r=-r):this.copy(A),r>=1)return this._w=g,this._x=s,this._y=i,this._z=n,this;const I=1-r*r;if(I<=Number.EPSILON){const B=1-t;return this._w=B*g+t*this._w,this._x=B*s+t*this._x,this._y=B*i+t*this._y,this._z=B*n+t*this._z,this.normalize(),this}const o=Math.sqrt(I),a=Math.atan2(o,r),C=Math.sin((1-t)*a)/o,Q=Math.sin(t*a)/o;return this._w=g*C+this._w*Q,this._x=s*C+this._x*Q,this._y=i*C+this._y*Q,this._z=n*C+this._z*Q,this._onChangeCallback(),this}slerpQuaternions(A,t,s){return this.copy(A).slerp(t,s)}random(){const A=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),s=Math.random(),i=Math.sqrt(1-s),n=Math.sqrt(s);return this.set(i*Math.sin(A),i*Math.cos(A),n*Math.sin(t),n*Math.cos(t))}equals(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._w===this._w}fromArray(A,t=0){return this._x=A[t],this._y=A[t+1],this._z=A[t+2],this._w=A[t+3],this._onChangeCallback(),this}toArray(A=[],t=0){return A[t]=this._x,A[t+1]=this._y,A[t+2]=this._z,A[t+3]=this._w,A}fromBufferAttribute(A,t){return this._x=A.getX(t),this._y=A.getY(t),this._z=A.getZ(t),this._w=A.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(A){return this._onChangeCallback=A,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class d{constructor(A=0,t=0,s=0){d.prototype.isVector3=!0,this.x=A,this.y=t,this.z=s}set(A,t,s){return s===void 0&&(s=this.z),this.x=A,this.y=t,this.z=s,this}setScalar(A){return this.x=A,this.y=A,this.z=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setZ(A){return this.z=A,this}setComponent(A,t){switch(A){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+A)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(A){return this.x=A.x,this.y=A.y,this.z=A.z,this}add(A){return this.x+=A.x,this.y+=A.y,this.z+=A.z,this}addScalar(A){return this.x+=A,this.y+=A,this.z+=A,this}addVectors(A,t){return this.x=A.x+t.x,this.y=A.y+t.y,this.z=A.z+t.z,this}addScaledVector(A,t){return this.x+=A.x*t,this.y+=A.y*t,this.z+=A.z*t,this}sub(A){return this.x-=A.x,this.y-=A.y,this.z-=A.z,this}subScalar(A){return this.x-=A,this.y-=A,this.z-=A,this}subVectors(A,t){return this.x=A.x-t.x,this.y=A.y-t.y,this.z=A.z-t.z,this}multiply(A){return this.x*=A.x,this.y*=A.y,this.z*=A.z,this}multiplyScalar(A){return this.x*=A,this.y*=A,this.z*=A,this}multiplyVectors(A,t){return this.x=A.x*t.x,this.y=A.y*t.y,this.z=A.z*t.z,this}applyEuler(A){return this.applyQuaternion(Ms.setFromEuler(A))}applyAxisAngle(A,t){return this.applyQuaternion(Ms.setFromAxisAngle(A,t))}applyMatrix3(A){const t=this.x,s=this.y,i=this.z,n=A.elements;return this.x=n[0]*t+n[3]*s+n[6]*i,this.y=n[1]*t+n[4]*s+n[7]*i,this.z=n[2]*t+n[5]*s+n[8]*i,this}applyNormalMatrix(A){return this.applyMatrix3(A).normalize()}applyMatrix4(A){const t=this.x,s=this.y,i=this.z,n=A.elements,g=1/(n[3]*t+n[7]*s+n[11]*i+n[15]);return this.x=(n[0]*t+n[4]*s+n[8]*i+n[12])*g,this.y=(n[1]*t+n[5]*s+n[9]*i+n[13])*g,this.z=(n[2]*t+n[6]*s+n[10]*i+n[14])*g,this}applyQuaternion(A){const t=this.x,s=this.y,i=this.z,n=A.x,g=A.y,r=A.z,I=A.w,o=2*(g*i-r*s),a=2*(r*t-n*i),C=2*(n*s-g*t);return this.x=t+I*o+g*C-r*a,this.y=s+I*a+r*o-n*C,this.z=i+I*C+n*a-g*o,this}project(A){return this.applyMatrix4(A.matrixWorldInverse).applyMatrix4(A.projectionMatrix)}unproject(A){return this.applyMatrix4(A.projectionMatrixInverse).applyMatrix4(A.matrixWorld)}transformDirection(A){const t=this.x,s=this.y,i=this.z,n=A.elements;return this.x=n[0]*t+n[4]*s+n[8]*i,this.y=n[1]*t+n[5]*s+n[9]*i,this.z=n[2]*t+n[6]*s+n[10]*i,this.normalize()}divide(A){return this.x/=A.x,this.y/=A.y,this.z/=A.z,this}divideScalar(A){return this.multiplyScalar(1/A)}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this}clamp(A,t){return this.x=rA(this.x,A.x,t.x),this.y=rA(this.y,A.y,t.y),this.z=rA(this.z,A.z,t.z),this}clampScalar(A,t){return this.x=rA(this.x,A,t),this.y=rA(this.y,A,t),this.z=rA(this.z,A,t),this}clampLength(A,t){const s=this.length();return this.divideScalar(s||1).multiplyScalar(rA(s,A,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(A){return this.x*A.x+this.y*A.y+this.z*A.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,t){return this.x+=(A.x-this.x)*t,this.y+=(A.y-this.y)*t,this.z+=(A.z-this.z)*t,this}lerpVectors(A,t,s){return this.x=A.x+(t.x-A.x)*s,this.y=A.y+(t.y-A.y)*s,this.z=A.z+(t.z-A.z)*s,this}cross(A){return this.crossVectors(this,A)}crossVectors(A,t){const s=A.x,i=A.y,n=A.z,g=t.x,r=t.y,I=t.z;return this.x=i*I-n*r,this.y=n*g-s*I,this.z=s*r-i*g,this}projectOnVector(A){const t=A.lengthSq();if(t===0)return this.set(0,0,0);const s=A.dot(this)/t;return this.copy(A).multiplyScalar(s)}projectOnPlane(A){return _t.copy(this).projectOnVector(A),this.sub(_t)}reflect(A){return this.sub(_t.copy(A).multiplyScalar(2*this.dot(A)))}angleTo(A){const t=Math.sqrt(this.lengthSq()*A.lengthSq());if(t===0)return Math.PI/2;const s=this.dot(A)/t;return Math.acos(rA(s,-1,1))}distanceTo(A){return Math.sqrt(this.distanceToSquared(A))}distanceToSquared(A){const t=this.x-A.x,s=this.y-A.y,i=this.z-A.z;return t*t+s*s+i*i}manhattanDistanceTo(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)+Math.abs(this.z-A.z)}setFromSpherical(A){return this.setFromSphericalCoords(A.radius,A.phi,A.theta)}setFromSphericalCoords(A,t,s){const i=Math.sin(t)*A;return this.x=i*Math.sin(s),this.y=Math.cos(t)*A,this.z=i*Math.cos(s),this}setFromCylindrical(A){return this.setFromCylindricalCoords(A.radius,A.theta,A.y)}setFromCylindricalCoords(A,t,s){return this.x=A*Math.sin(t),this.y=s,this.z=A*Math.cos(t),this}setFromMatrixPosition(A){const t=A.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(A){const t=this.setFromMatrixColumn(A,0).length(),s=this.setFromMatrixColumn(A,1).length(),i=this.setFromMatrixColumn(A,2).length();return this.x=t,this.y=s,this.z=i,this}setFromMatrixColumn(A,t){return this.fromArray(A.elements,t*4)}setFromMatrix3Column(A,t){return this.fromArray(A.elements,t*3)}setFromEuler(A){return this.x=A._x,this.y=A._y,this.z=A._z,this}setFromColor(A){return this.x=A.r,this.y=A.g,this.z=A.b,this}equals(A){return A.x===this.x&&A.y===this.y&&A.z===this.z}fromArray(A,t=0){return this.x=A[t],this.y=A[t+1],this.z=A[t+2],this}toArray(A=[],t=0){return A[t]=this.x,A[t+1]=this.y,A[t+2]=this.z,A}fromBufferAttribute(A,t){return this.x=A.getX(t),this.y=A.getY(t),this.z=A.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const A=Math.random()*Math.PI*2,t=Math.random()*2-1,s=Math.sqrt(1-t*t);return this.x=s*Math.cos(A),this.y=t,this.z=s*Math.sin(A),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const _t=new d,Ms=new NA;class Fs{constructor(A=new d(1/0,1/0,1/0),t=new d(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=A,this.max=t}set(A,t){return this.min.copy(A),this.max.copy(t),this}setFromArray(A){this.makeEmpty();for(let t=0,s=A.length;t<s;t+=3)this.expandByPoint(fA.fromArray(A,t));return this}setFromBufferAttribute(A){this.makeEmpty();for(let t=0,s=A.count;t<s;t++)this.expandByPoint(fA.fromBufferAttribute(A,t));return this}setFromPoints(A){this.makeEmpty();for(let t=0,s=A.length;t<s;t++)this.expandByPoint(A[t]);return this}setFromCenterAndSize(A,t){const s=fA.copy(t).multiplyScalar(.5);return this.min.copy(A).sub(s),this.max.copy(A).add(s),this}setFromObject(A,t=!1){return this.makeEmpty(),this.expandByObject(A,t)}clone(){return new this.constructor().copy(this)}copy(A){return this.min.copy(A.min),this.max.copy(A.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(A){return this.isEmpty()?A.set(0,0,0):A.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(A){return this.isEmpty()?A.set(0,0,0):A.subVectors(this.max,this.min)}expandByPoint(A){return this.min.min(A),this.max.max(A),this}expandByVector(A){return this.min.sub(A),this.max.add(A),this}expandByScalar(A){return this.min.addScalar(-A),this.max.addScalar(A),this}expandByObject(A,t=!1){A.updateWorldMatrix(!1,!1);const s=A.geometry;if(s!==void 0){const n=s.getAttribute("position");if(t===!0&&n!==void 0&&A.isInstancedMesh!==!0)for(let g=0,r=n.count;g<r;g++)A.isMesh===!0?A.getVertexPosition(g,fA):fA.fromBufferAttribute(n,g),fA.applyMatrix4(A.matrixWorld),this.expandByPoint(fA);else A.boundingBox!==void 0?(A.boundingBox===null&&A.computeBoundingBox(),Ct.copy(A.boundingBox)):(s.boundingBox===null&&s.computeBoundingBox(),Ct.copy(s.boundingBox)),Ct.applyMatrix4(A.matrixWorld),this.union(Ct)}const i=A.children;for(let n=0,g=i.length;n<g;n++)this.expandByObject(i[n],t);return this}containsPoint(A){return A.x>=this.min.x&&A.x<=this.max.x&&A.y>=this.min.y&&A.y<=this.max.y&&A.z>=this.min.z&&A.z<=this.max.z}containsBox(A){return this.min.x<=A.min.x&&A.max.x<=this.max.x&&this.min.y<=A.min.y&&A.max.y<=this.max.y&&this.min.z<=A.min.z&&A.max.z<=this.max.z}getParameter(A,t){return t.set((A.x-this.min.x)/(this.max.x-this.min.x),(A.y-this.min.y)/(this.max.y-this.min.y),(A.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(A){return A.max.x>=this.min.x&&A.min.x<=this.max.x&&A.max.y>=this.min.y&&A.min.y<=this.max.y&&A.max.z>=this.min.z&&A.min.z<=this.max.z}intersectsSphere(A){return this.clampPoint(A.center,fA),fA.distanceToSquared(A.center)<=A.radius*A.radius}intersectsPlane(A){let t,s;return A.normal.x>0?(t=A.normal.x*this.min.x,s=A.normal.x*this.max.x):(t=A.normal.x*this.max.x,s=A.normal.x*this.min.x),A.normal.y>0?(t+=A.normal.y*this.min.y,s+=A.normal.y*this.max.y):(t+=A.normal.y*this.max.y,s+=A.normal.y*this.min.y),A.normal.z>0?(t+=A.normal.z*this.min.z,s+=A.normal.z*this.max.z):(t+=A.normal.z*this.max.z,s+=A.normal.z*this.min.z),t<=-A.constant&&s>=-A.constant}intersectsTriangle(A){if(this.isEmpty())return!1;this.getCenter(At),Bt.subVectors(this.max,At),KA.subVectors(A.a,At),TA.subVectors(A.b,At),ZA.subVectors(A.c,At),kA.subVectors(TA,KA),GA.subVectors(ZA,TA),_A.subVectors(KA,ZA);let t=[0,-kA.z,kA.y,0,-GA.z,GA.y,0,-_A.z,_A.y,kA.z,0,-kA.x,GA.z,0,-GA.x,_A.z,0,-_A.x,-kA.y,kA.x,0,-GA.y,GA.x,0,-_A.y,_A.x,0];return!zt(t,KA,TA,ZA,Bt)||(t=[1,0,0,0,1,0,0,0,1],!zt(t,KA,TA,ZA,Bt))?!1:(Qt.crossVectors(kA,GA),t=[Qt.x,Qt.y,Qt.z],zt(t,KA,TA,ZA,Bt))}clampPoint(A,t){return t.copy(A).clamp(this.min,this.max)}distanceToPoint(A){return this.clampPoint(A,fA).distanceTo(A)}getBoundingSphere(A){return this.isEmpty()?A.makeEmpty():(this.getCenter(A.center),A.radius=this.getSize(fA).length()*.5),A}intersect(A){return this.min.max(A.min),this.max.min(A.max),this.isEmpty()&&this.makeEmpty(),this}union(A){return this.min.min(A.min),this.max.max(A.max),this}applyMatrix4(A){return this.isEmpty()?this:(MA[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(A),MA[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(A),MA[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(A),MA[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(A),MA[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(A),MA[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(A),MA[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(A),MA[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(A),this.setFromPoints(MA),this)}translate(A){return this.min.add(A),this.max.add(A),this}equals(A){return A.min.equals(this.min)&&A.max.equals(this.max)}}const MA=[new d,new d,new d,new d,new d,new d,new d,new d],fA=new d,Ct=new Fs,KA=new d,TA=new d,ZA=new d,kA=new d,GA=new d,_A=new d,At=new d,Bt=new d,Qt=new d,zA=new d;function zt(e,A,t,s,i){for(let n=0,g=e.length-3;n<=g;n+=3){zA.fromArray(e,n);const r=i.x*Math.abs(zA.x)+i.y*Math.abs(zA.y)+i.z*Math.abs(zA.z),I=A.dot(zA),o=t.dot(zA),a=s.dot(zA);if(Math.max(-Math.max(I,o,a),Math.min(I,o,a))>r)return!1}return!0}const Ss={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},UA={h:0,s:0,l:0},ht={h:0,s:0,l:0};function Lt(e,A,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?e+(A-e)*6*t:t<1/2?A:t<2/3?e+(A-e)*6*(2/3-t):e}class Ht{constructor(A,t,s){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(A,t,s)}set(A,t,s){if(t===void 0&&s===void 0){const i=A;i&&i.isColor?this.copy(i):typeof i=="number"?this.setHex(i):typeof i=="string"&&this.setStyle(i)}else this.setRGB(A,t,s);return this}setScalar(A){return this.r=A,this.g=A,this.b=A,this}setHex(A,t=uA){return A=Math.floor(A),this.r=(A>>16&255)/255,this.g=(A>>8&255)/255,this.b=(A&255)/255,yA.toWorkingColorSpace(this,t),this}setRGB(A,t,s,i=yA.workingColorSpace){return this.r=A,this.g=t,this.b=s,yA.toWorkingColorSpace(this,i),this}setHSL(A,t,s,i=yA.workingColorSpace){if(A=fe(A,1),t=rA(t,0,1),s=rA(s,0,1),t===0)this.r=this.g=this.b=s;else{const n=s<=.5?s*(1+t):s+t-s*t,g=2*s-n;this.r=Lt(g,n,A+1/3),this.g=Lt(g,n,A),this.b=Lt(g,n,A-1/3)}return yA.toWorkingColorSpace(this,i),this}setStyle(A,t=uA){function s(n){n!==void 0&&parseFloat(n)<1&&console.warn("THREE.Color: Alpha component of "+A+" will be ignored.")}let i;if(i=/^(\\w+)\\(([^\\)]*)\\)/.exec(A)){let n;const g=i[1],r=i[2];switch(g){case"rgb":case"rgba":if(n=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r))return s(n[4]),this.setRGB(Math.min(255,parseInt(n[1],10))/255,Math.min(255,parseInt(n[2],10))/255,Math.min(255,parseInt(n[3],10))/255,t);if(n=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r))return s(n[4]),this.setRGB(Math.min(100,parseInt(n[1],10))/100,Math.min(100,parseInt(n[2],10))/100,Math.min(100,parseInt(n[3],10))/100,t);break;case"hsl":case"hsla":if(n=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r))return s(n[4]),this.setHSL(parseFloat(n[1])/360,parseFloat(n[2])/100,parseFloat(n[3])/100,t);break;default:console.warn("THREE.Color: Unknown color model "+A)}}else if(i=/^\\#([A-Fa-f\\d]+)$/.exec(A)){const n=i[1],g=n.length;if(g===3)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,t);if(g===6)return this.setHex(parseInt(n,16),t);console.warn("THREE.Color: Invalid hex color "+A)}else if(A&&A.length>0)return this.setColorName(A,t);return this}setColorName(A,t=uA){const s=Ss[A.toLowerCase()];return s!==void 0?this.setHex(s,t):console.warn("THREE.Color: Unknown color "+A),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(A){return this.r=A.r,this.g=A.g,this.b=A.b,this}copySRGBToLinear(A){return this.r=qA(A.r),this.g=qA(A.g),this.b=qA(A.b),this}copyLinearToSRGB(A){return this.r=vA(A.r),this.g=vA(A.g),this.b=vA(A.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(A=uA){return yA.fromWorkingColorSpace(sA.copy(this),A),Math.round(rA(sA.r*255,0,255))*65536+Math.round(rA(sA.g*255,0,255))*256+Math.round(rA(sA.b*255,0,255))}getHexString(A=uA){return("000000"+this.getHex(A).toString(16)).slice(-6)}getHSL(A,t=yA.workingColorSpace){yA.fromWorkingColorSpace(sA.copy(this),t);const s=sA.r,i=sA.g,n=sA.b,g=Math.max(s,i,n),r=Math.min(s,i,n);let I,o;const a=(r+g)/2;if(r===g)I=0,o=0;else{const C=g-r;switch(o=a<=.5?C/(g+r):C/(2-g-r),g){case s:I=(i-n)/C+(i<n?6:0);break;case i:I=(n-s)/C+2;break;case n:I=(s-i)/C+4;break}I/=6}return A.h=I,A.s=o,A.l=a,A}getRGB(A,t=yA.workingColorSpace){return yA.fromWorkingColorSpace(sA.copy(this),t),A.r=sA.r,A.g=sA.g,A.b=sA.b,A}getStyle(A=uA){yA.fromWorkingColorSpace(sA.copy(this),A);const t=sA.r,s=sA.g,i=sA.b;return A!==uA?`color(${A} ${t.toFixed(3)} ${s.toFixed(3)} ${i.toFixed(3)})`:`rgb(${Math.round(t*255)},${Math.round(s*255)},${Math.round(i*255)})`}offsetHSL(A,t,s){return this.getHSL(UA),this.setHSL(UA.h+A,UA.s+t,UA.l+s)}add(A){return this.r+=A.r,this.g+=A.g,this.b+=A.b,this}addColors(A,t){return this.r=A.r+t.r,this.g=A.g+t.g,this.b=A.b+t.b,this}addScalar(A){return this.r+=A,this.g+=A,this.b+=A,this}sub(A){return this.r=Math.max(0,this.r-A.r),this.g=Math.max(0,this.g-A.g),this.b=Math.max(0,this.b-A.b),this}multiply(A){return this.r*=A.r,this.g*=A.g,this.b*=A.b,this}multiplyScalar(A){return this.r*=A,this.g*=A,this.b*=A,this}lerp(A,t){return this.r+=(A.r-this.r)*t,this.g+=(A.g-this.g)*t,this.b+=(A.b-this.b)*t,this}lerpColors(A,t,s){return this.r=A.r+(t.r-A.r)*s,this.g=A.g+(t.g-A.g)*s,this.b=A.b+(t.b-A.b)*s,this}lerpHSL(A,t){this.getHSL(UA),A.getHSL(ht);const s=bt(UA.h,ht.h,t),i=bt(UA.s,ht.s,t),n=bt(UA.l,ht.l,t);return this.setHSL(s,i,n),this}setFromVector3(A){return this.r=A.x,this.g=A.y,this.b=A.z,this}applyMatrix3(A){const t=this.r,s=this.g,i=this.b,n=A.elements;return this.r=n[0]*t+n[3]*s+n[6]*i,this.g=n[1]*t+n[4]*s+n[7]*i,this.b=n[2]*t+n[5]*s+n[8]*i,this}equals(A){return A.r===this.r&&A.g===this.g&&A.b===this.b}fromArray(A,t=0){return this.r=A[t],this.g=A[t+1],this.b=A[t+2],this}toArray(A=[],t=0){return A[t]=this.r,A[t+1]=this.g,A[t+2]=this.b,A}fromBufferAttribute(A,t){return this.r=A.getX(t),this.g=A.getY(t),this.b=A.getZ(t),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}}const sA=new Ht;Ht.NAMES=Ss,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:ws}})),typeof window<"u"&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=ws);const ds=-12,Ns=9,XA=Math.exp(-30),me=11,xe=11,ks=1<<me,Gs=1<<xe,Us=1;function De(e){var n;let A=!1;const t=e.split(`\n`).map(g=>{const r=g.trimEnd();return A?r:r.length>0?(A=!0,r):null}).filter(g=>g!=null);for(;t.length>0&&t[t.length-1].length===0;)t.pop();if(t.length===0)return[];const s=(n=t[0].match(/^\\s*/))==null?void 0:n[0];if(!s)return t;const i=new RegExp(`^${s}`);return t.map(g=>g.replace(i,""))}function pe(e){return De(e).join(`\n`)}const qt=new Float32Array(1),Ys=new Uint32Array(qt.buffer);function WA(e){qt[0]=e;const A=Ys[0],t=A>>31&1,s=A>>23&255,i=A&8388607,n=t<<15;if(s===255)return i!==0?n|32767:n|31744;const g=s-127+15;if(g>=31)return n|31744;if(g<=0){if(g<-10)return n;const I=(i|8388608)>>1-g+13;return n|I}const r=i>>13;return n|g<<10|r}function O(e){const A=e>>15&1,t=e>>10&31,s=e&1023;let i;if(t===0)if(s===0)i=A<<31;else{let n=s,g=-14;for(;(n&1024)===0;)n<<=1,g--;n&=1023;const r=g+127,I=n<<13;i=A<<31|r<<23|I}else if(t===31)s===0?i=A<<31|2139095040:i=A<<31|2143289344;else{const n=t-15+127,g=s<<13;i=A<<31|n<<23|g}return Ys[0]=i,qt[0]}function QA(e){return Math.max(0,Math.min(255,Math.round(e*255)))}function Me(e){const A=[],t=new Set;function s(i){i&&typeof i=="object"&&!t.has(i)&&(t.add(i),i instanceof ArrayBuffer?A.push(i):ArrayBuffer.isView(i)?A.push(i.buffer):Array.isArray(i)?i.forEach(s):Object.values(i).forEach(s))}return s(e),A}function vt(e,A,t,s,i,n,g,r,I,o,a,C,Q,B,h,l,c){const E=(c==null?void 0:c.rgbMin)??0,y=((c==null?void 0:c.rgbMax)??1)-E,f=QA((B-E)/y),D=QA((h-E)/y),S=QA((l-E)/y),b=QA(Q),x=_s(new NA(I,o,a,C)),m=x&255,G=x>>>8&255,p=x>>>16&255,w=(c==null?void 0:c.lnScaleMin)??ds,z=254/(((c==null?void 0:c.lnScaleMax)??Ns)-w),Y=n<XA?0:Math.min(255,Math.max(1,Math.round((Math.log(n)-w)*z)+1)),N=g<XA?0:Math.min(255,Math.max(1,Math.round((Math.log(g)-w)*z)+1)),q=r<XA?0:Math.min(255,Math.max(1,Math.round((Math.log(r)-w)*z)+1)),T=WA(t),v=WA(s),P=WA(i),Z=A*4;e[Z]=f|D<<8|S<<16|b<<24,e[Z+1]=T|v<<16,e[Z+2]=P|m<<16|G<<24,e[Z+3]=Y|N<<8|q<<16|p<<24}function Rs(e,A,t,s,i){const n=WA(t),g=WA(s),r=WA(i),I=A*4;e[I+1]=n|g<<16,e[I+2]=r|e[I+2]&4294901760}function bs(e,A,t,s,i,n){const g=(n==null?void 0:n.lnScaleMin)??ds,I=254/(((n==null?void 0:n.lnScaleMax)??Ns)-g),o=t<XA?0:Math.min(255,Math.max(1,Math.round((Math.log(t)-g)*I)+1)),a=s<XA?0:Math.min(255,Math.max(1,Math.round((Math.log(s)-g)*I)+1)),C=i<XA?0:Math.min(255,Math.max(1,Math.round((Math.log(i)-g)*I)+1)),Q=A*4;e[Q+3]=o|a<<8|C<<16|e[Q+3]&4278190080}function Js(e,A,t,s,i,n){const g=_s(new NA(t,s,i,n)),r=g&255,I=g>>>8&255,o=g>>>16&255,a=A*4;e[a+2]=e[a+2]&65535|r<<16|I<<24,e[a+3]=e[a+3]&16777215|o<<24}function Fe(e,A,t,s,i,n,g){const r=(g==null?void 0:g.rgbMin)??0,o=((g==null?void 0:g.rgbMax)??1)-r,a=QA((t-r)/o),C=QA((s-r)/o),Q=QA((i-r)/o),B=QA(n),h=A*4;e[h]=a|C<<8|Q<<16|B<<24}function Se(e,A,t,s,i,n){const g=(n==null?void 0:n.rgbMin)??0,I=((n==null?void 0:n.rgbMax)??1)-g,o=QA((t-g)/I),a=QA((s-g)/I),C=QA((i-g)/I),Q=A*4;e[Q]=o|a<<8|C<<16|e[Q]&4278190080}function de(e,A,t){const s=QA(t),i=A*4;e[i]=e[i]&16777215|s<<24}new d,new d,new Ht;function Ne(e){const A=ks,t=Math.max(Us,Math.min(Gs,Math.ceil(e/A))),s=Math.ceil(e/(A*t)),i=A*t*s;return{width:A,height:t,depth:s,maxSplats:i}}function Et(e){const A=ks,t=Math.max(Us,Math.min(Gs,Math.ceil(e/A))),s=Math.ceil(e/(A*t));return A*t*s}pe(`\n precision highp float;\n\n in vec3 position;\n\n void main() {\n gl_Position = vec4(position.xy, 0.0, 1.0);\n }\n`);function _s(e){const A=e.clone().normalize();A.w<0&&A.set(-A.x,-A.y,-A.z,-A.w);const t=2*Math.acos(A.w),s=Math.sqrt(A.x*A.x+A.y*A.y+A.z*A.z),i=s<1e-6?new d(1,0,0):new d(A.x,A.y,A.z).divideScalar(s),n=Math.abs(i.x)+Math.abs(i.y)+Math.abs(i.z);let g=i.x/n,r=i.y/n;if(i.z<0){const B=g;g=(1-Math.abs(r))*(g>=0?1:-1),r=(1-Math.abs(B))*(r>=0?1:-1)}const I=g*.5+.5,o=r*.5+.5,a=Math.round(I*255),C=Math.round(o*255);return Math.round(t*(255/Math.PI))<<16|C<<8|a}function ct(e,A,t,s){const i=Math.max(-127,Math.min(127,e*127)),n=Math.max(-127,Math.min(127,A*127)),g=Math.max(-127,Math.min(127,t*127)),r=Math.max(-127,Math.min(127,s*127));return i&255|(n&255)<<8|(g&255)<<16|(r&255)<<24}function lt(e,A,t,s){const i=(s==null?void 0:s.sh1Min)??-1,n=(s==null?void 0:s.sh1Max)??1,g=.5*(i+n),r=126/(n-i),I=A*2;for(let o=0;o<9;++o){const a=(t[o]-g)*r,C=Math.round(Math.max(-63,Math.min(63,a)))&127,Q=o*7,B=Q+7,h=Math.floor(Q/32),l=Q-h*32,c=C<<l&4294967295;if(e[I+h]|=c,B>h*32+32){const E=C>>>32-l&4294967295;e[I+h+1]|=E}}}function ut(e,A,t,s){const i=(s==null?void 0:s.sh2Min)??-1,n=(s==null?void 0:s.sh2Max)??1,g=.5*(i+n),r=2/(n-i);e[A*4+0]=ct((t[0]-g)*r,(t[1]-g)*r,(t[2]-g)*r,(t[3]-g)*r),e[A*4+1]=ct((t[4]-g)*r,(t[5]-g)*r,(t[6]-g)*r,(t[7]-g)*r),e[A*4+2]=ct((t[8]-g)*r,(t[9]-g)*r,(t[10]-g)*r,(t[11]-g)*r),e[A*4+3]=ct((t[12]-g)*r,(t[13]-g)*r,(t[14]-g)*r,0)}function yt(e,A,t,s){const i=(s==null?void 0:s.sh3Min)??-1,n=(s==null?void 0:s.sh3Max)??1,g=.5*(i+n),r=62/(n-i),I=A*4;for(let o=0;o<21;++o){const a=(t[o]-g)*r,C=Math.round(Math.max(-31,Math.min(31,a)))&63,Q=o*6,B=Q+6,h=Math.floor(Q/32),l=Q-h*32,c=C<<l&4294967295;if(e[I+h]|=c,B>h*32+32){const E=C>>>32-l&4294967295;e[I+h+1]|=E}}}function ke(e,A){const t=[];let s=0,i=null;const n=new ls((I,o)=>{if(t.push(I),s+=I.length,o||s>=A){const a=new Uint8Array(s);let C=0;for(const Q of t)a.set(Q,C),C+=Q.length;i=a.slice(0,A)}}),g=1024;let r=0;for(;i==null&&r<e.length;){const I=e.slice(r,r+g);n.push(I,!1),r+=g}if(i==null&&(n.push(new Uint8Array,!0),i==null))throw new Error("Failed to decompress partial gzip");return i}class Ge{constructor({fileBytes:A,chunkBytes:t=64*1024}){this.fileBytes=A,this.chunkBytes=t,this.offset=0,this.chunks=[],this.totalBytes=0,this.gunzip=new ls((s,i)=>{this.chunks.push(s),this.totalBytes+=s.length})}read(A){for(;this.totalBytes<A&&this.offset<this.fileBytes.length;){const n=Math.min(this.offset+this.chunkBytes,this.fileBytes.length);this.gunzip.push(this.fileBytes.subarray(this.offset,n),!1),this.offset=n}if(this.totalBytes<A&&this.offset>=this.fileBytes.length&&this.gunzip.push(new Uint8Array(0),!0),this.totalBytes<A)throw new Error(`Unexpected EOF: needed ${A}, got ${this.totalBytes}`);const t=new Uint8Array(this.totalBytes);let s=0;for(const n of this.chunks)t.set(n,s),s+=n.length;const i=t.subarray(0,A);return this.chunks=[t.subarray(A)],this.totalBytes-=A,i}}function zs(e,A,t){const s=Math.floor(e.length/32);if(s*32!==e.length)throw new Error("Invalid .splat file size");A(s);const i=new Float32Array(e.buffer);for(let n=0;n<s;++n){const g=n*32,r=n*8,I=i[r+0],o=i[r+1],a=i[r+2],C=i[r+3],Q=i[r+4],B=i[r+5],h=e[g+24]/255,l=e[g+25]/255,c=e[g+26]/255,E=e[g+27]/255,u=(e[g+28]-128)/128,y=(e[g+29]-128)/128,f=(e[g+30]-128)/128,D=(e[g+31]-128)/128;t(n,I,o,a,C,Q,B,y,f,D,u,E,h,l,c)}}function Ue(e,A){let t=0,s=0,i=new Uint32Array(0);return zs(e,n=>{t=n,s=Et(t),i=new Uint32Array(s*4)},(n,g,r,I,o,a,C,Q,B,h,l,c,E,u,y)=>{vt(i,n,g,r,I,o,a,C,Q,B,h,l,c,E,u,y,A)}),{packedArray:i,numSplats:t}}const ft={0:{bytesPerCenter:12,bytesPerScale:12,bytesPerRotation:16,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:4,scaleOffsetBytes:12,rotationOffsetBytes:24,colorOffsetBytes:40,sphericalHarmonicsOffsetBytes:44,scaleRange:1},1:{bytesPerCenter:6,bytesPerScale:6,bytesPerRotation:8,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:2,scaleOffsetBytes:6,rotationOffsetBytes:12,colorOffsetBytes:20,sphericalHarmonicsOffsetBytes:24,scaleRange:32767},2:{bytesPerCenter:6,bytesPerScale:6,bytesPerRotation:8,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:1,scaleOffsetBytes:6,rotationOffsetBytes:12,colorOffsetBytes:20,sphericalHarmonicsOffsetBytes:24,scaleRange:32767}},Ls={0:0,1:9,2:24,3:45};function Ye(e,A,t,s){var l;let g=0;const r=new DataView(e.buffer,g,4096);g+=4096;const I=r.getUint8(0),o=r.getUint8(1);if(I!==0||o<1)throw new Error(`Unsupported .ksplat version: ${I}.${o}`);const a=r.getUint32(4,!0);r.getUint32(16,!0);const C=r.getUint16(20,!0);if(C<0||C>2)throw new Error(`Invalid .ksplat compression level: ${C}`);const Q=r.getFloat32(36,!0)||-1.5,B=r.getFloat32(40,!0)||1.5;let h=4096+a*1024;for(let c=0;c<a;++c){let E=function(nA,U){if(C===0)return k.getFloat32(nA+J+U*4,!0);if(C===1)return O(k.getUint16(nA+J+U*2,!0));const cA=k.getUint8(nA+J+U)/255;return Q+cA*(B-Q)};const u=new DataView(e.buffer,g,1024);g+=1024;const y=u.getUint32(0,!0),f=u.getUint32(4,!0),D=u.getUint32(8,!0),S=u.getUint32(12,!0),b=u.getFloat32(16,!0),x=u.getUint16(20,!0),m=(u.getUint32(24,!0)||((l=ft[C])==null?void 0:l.scaleRange))??1,G=u.getUint32(32,!0),p=G*D,w=u.getUint32(36,!0),M=w*4,z=x*S+M,Y=u.getUint16(40,!0),N=Ls[Y],{bytesPerCenter:q,bytesPerScale:T,bytesPerRotation:v,bytesPerColor:P,bytesPerSphericalHarmonicsComponent:Z,scaleOffsetBytes:W,rotationOffsetBytes:L,colorOffsetBytes:K,sphericalHarmonicsOffsetBytes:J}=ft[C],R=q+T+v+P+N*Z,F=R*f,eA=F+z,iA=[0,3,6,1,4,7,2,5,8],IA=[9,14,19,10,15,20,11,16,21,12,17,22,13,18,23],gA=[24,31,38,25,32,39,26,33,40,27,34,41,28,35,42,29,36,43,30,37,44],oA=Y>=1?new Float32Array(3*3):void 0,aA=Y>=2?new Float32Array(5*3):void 0,FA=Y>=3?new Float32Array(7*3):void 0,CA=b/2/m,hA=h+M,EA=h+z,k=new DataView(e.buffer,EA,F),$=new Float32Array(e.buffer,hA,S*3),wA=new Uint32Array(e.buffer,h,w);let H=G,RA=p;for(let nA=0;nA<y;++nA){const U=nA*R;let cA;if(nA<p)cA=Math.floor(nA/D);else{const pA=wA[H-G];nA>=RA+pA&&(H+=1,RA+=pA),cA=H}const AA=C===0?k.getFloat32(U+0,!0):(k.getUint16(U+0,!0)-m)*CA+$[3*cA+0],_=C===0?k.getFloat32(U+4,!0):(k.getUint16(U+2,!0)-m)*CA+$[3*cA+1],mA=C===0?k.getFloat32(U+8,!0):(k.getUint16(U+4,!0)-m)*CA+$[3*cA+2],et=C===0?k.getFloat32(U+W+0,!0):O(k.getUint16(U+W+0,!0)),it=C===0?k.getFloat32(U+W+4,!0):O(k.getUint16(U+W+2,!0)),Xt=C===0?k.getFloat32(U+W+8,!0):O(k.getUint16(U+W+4,!0)),Wt=C===0?k.getFloat32(U+L+0,!0):O(k.getUint16(U+L+0,!0)),Pt=C===0?k.getFloat32(U+L+4,!0):O(k.getUint16(U+L+2,!0)),Vt=C===0?k.getFloat32(U+L+8,!0):O(k.getUint16(U+L+4,!0)),jt=C===0?k.getFloat32(U+L+12,!0):O(k.getUint16(U+L+6,!0)),Ot=k.getUint8(U+K+0)/255,$t=k.getUint8(U+K+1)/255,As=k.getUint8(U+K+2)/255,ts=k.getUint8(U+K+3)/255;if(t(nA,AA,_,mA,et,it,Xt,Pt,Vt,jt,Wt,ts,Ot,$t,As),Y>=1&&oA){for(const[pA,LA]of iA.entries())oA[pA]=E(U,LA);if(aA)for(const[pA,LA]of IA.entries())aA[pA]=E(U,LA);if(FA)for(const[pA,LA]of gA.entries())FA[pA]=E(U,LA);s==null||s(nA,oA,aA,FA)}}h+=eA}}function Re(e,A){var u;let i=0;const n=new DataView(e.buffer,i,4096);i+=4096;const g=n.getUint8(0),r=n.getUint8(1);if(g!==0||r<1)throw new Error(`Unsupported .ksplat version: ${g}.${r}`);const I=n.getUint32(4,!0),o=n.getUint32(16,!0),a=n.getUint16(20,!0);if(a<0||a>2)throw new Error(`Invalid .ksplat compression level: ${a}`);const C=n.getFloat32(36,!0)||-1.5,Q=n.getFloat32(40,!0)||1.5,B=o,h=Et(B),l=new Uint32Array(h*4),c={};let E=4096+I*1024;for(let y=0;y<I;++y){let f=function(AA,_){if(a===0)return H.getFloat32(AA+eA+_*4,!0);if(a===1)return O(H.getUint16(AA+eA+_*2,!0));const mA=H.getUint8(AA+eA+_)/255;return C+mA*(Q-C)};const D=new DataView(e.buffer,i,1024);i+=1024;const S=D.getUint32(0,!0),b=D.getUint32(4,!0),x=D.getUint32(8,!0),m=D.getUint32(12,!0),G=D.getFloat32(16,!0),p=D.getUint16(20,!0),w=(D.getUint32(24,!0)||((u=ft[a])==null?void 0:u.scaleRange))??1,M=D.getUint32(32,!0),z=M*x,Y=D.getUint32(36,!0),N=Y*4,q=p*m+N,T=D.getUint16(40,!0),v=Ls[T],{bytesPerCenter:P,bytesPerScale:Z,bytesPerRotation:W,bytesPerColor:L,bytesPerSphericalHarmonicsComponent:K,scaleOffsetBytes:J,rotationOffsetBytes:R,colorOffsetBytes:F,sphericalHarmonicsOffsetBytes:eA}=ft[a],iA=P+Z+W+L+v*K,IA=iA*b,gA=IA+q,oA=[0,3,6,1,4,7,2,5,8],aA=[9,14,19,10,15,20,11,16,21,12,17,22,13,18,23],FA=[24,31,38,25,32,39,26,33,40,27,34,41,28,35,42,29,36,43,30,37,44],CA=T>=1?new Float32Array(3*3):void 0,hA=T>=2?new Float32Array(5*3):void 0,EA=T>=3?new Float32Array(7*3):void 0,k=G/2/w,$=E+N,wA=E+q,H=new DataView(e.buffer,wA,IA),RA=new Float32Array(e.buffer,$,m*3),nA=new Uint32Array(e.buffer,E,Y);let U=M,cA=z;for(let AA=0;AA<S;++AA){const _=AA*iA;let mA;if(AA<z)mA=Math.floor(AA/x);else{const bA=nA[U-M];AA>=cA+bA&&(U+=1,cA+=bA),mA=U}const et=a===0?H.getFloat32(_+0,!0):(H.getUint16(_+0,!0)-w)*k+RA[3*mA+0],it=a===0?H.getFloat32(_+4,!0):(H.getUint16(_+2,!0)-w)*k+RA[3*mA+1],Xt=a===0?H.getFloat32(_+8,!0):(H.getUint16(_+4,!0)-w)*k+RA[3*mA+2],Wt=a===0?H.getFloat32(_+J+0,!0):O(H.getUint16(_+J+0,!0)),Pt=a===0?H.getFloat32(_+J+4,!0):O(H.getUint16(_+J+2,!0)),Vt=a===0?H.getFloat32(_+J+8,!0):O(H.getUint16(_+J+4,!0)),jt=a===0?H.getFloat32(_+R+0,!0):O(H.getUint16(_+R+0,!0)),Ot=a===0?H.getFloat32(_+R+4,!0):O(H.getUint16(_+R+2,!0)),$t=a===0?H.getFloat32(_+R+8,!0):O(H.getUint16(_+R+4,!0)),As=a===0?H.getFloat32(_+R+12,!0):O(H.getUint16(_+R+6,!0)),ts=H.getUint8(_+F+0)/255,pA=H.getUint8(_+F+1)/255,LA=H.getUint8(_+F+2)/255,Oe=H.getUint8(_+F+3)/255;if(vt(l,AA,et,it,Xt,Wt,Pt,Vt,Ot,$t,As,jt,Oe,ts,pA,LA,A),T>=1){if(CA){c.sh1||(c.sh1=new Uint32Array(B*2));for(const[bA,nt]of oA.entries())CA[bA]=f(_,nt);lt(c.sh1,AA,CA,A)}if(hA){c.sh2||(c.sh2=new Uint32Array(B*4));for(const[bA,nt]of aA.entries())hA[bA]=f(_,nt);ut(c.sh2,AA,hA,A)}if(EA){c.sh3||(c.sh3=new Uint32Array(B*4));for(const[bA,nt]of FA.entries())EA[bA]=f(_,nt);yt(c.sh3,AA,EA,A)}}}E+=gA}return{packedArray:l,numSplats:B,extra:c}}const VA=class VA{constructor({fileBytes:A}){this.header="",this.littleEndian=!0,this.elements={},this.comments=[],this.data=null,this.numSplats=0,this.fileBytes=A instanceof ArrayBuffer?new Uint8Array(A):A}async parseHeader(){const t=new ReadableStream({start:g=>{g.enqueue(this.fileBytes.slice(0,65536)),g.close()}}).pipeThrough(new TextDecoderStream).getReader();this.header="";const s=`end_header\n`;for(;;){const{value:g,done:r}=await t.read();if(r)throw new Error("Failed to read header");this.header+=g;const I=this.header.indexOf(s);if(I>=0){this.header=this.header.slice(0,I+s.length);break}}const i=new TextEncoder().encode(this.header).length;this.data=new DataView(this.fileBytes.buffer,i),this.elements={};let n=null;this.comments=[],this.header.trim().split(`\n`).forEach((g,r)=>{const I=g.trim();if(r===0){if(I!=="ply")throw new Error("Invalid PLY header");return}if(I.length===0)return;const o=I.split(" ");switch(o[0]){case"format":if(o[1]==="binary_little_endian")this.littleEndian=!0;else if(o[1]==="binary_big_endian")this.littleEndian=!1;else throw new Error(`Unsupported PLY format: ${o[1]}`);if(o[2]!=="1.0")throw new Error(`Unsupported PLY version: ${o[2]}`);break;case"end_header":break;case"comment":this.comments.push(I.slice(8));break;case"element":{const a=o[1];n={name:a,count:Number.parseInt(o[2]),properties:{}},this.elements[a]=n;break}case"property":if(n==null)throw new Error("Property must be inside an element");o[1]==="list"?n.properties[o[4]]={isList:!0,type:o[3],countType:o[2]}:n.properties[o[2]]={isList:!1,type:o[1]};break}}),this.elements.vertex&&(this.numSplats=this.elements.vertex.count)}parseData(A){let t=0;const s=this.data;if(s==null)throw new Error("No data to parse");for(const i in this.elements){const n=this.elements[i],{count:g,properties:r}=n,I={},o=[];for(const[C,Q]of Object.entries(r))Q.isList?(I[C]=[],o.push(()=>{const B=I[C];B.length=xt[Q.countType](s,t,this.littleEndian),t+=PA[Q.countType];for(let h=0;h<B.length;h++)B[h]=xt[Q.type](s,t,this.littleEndian),t+=PA[Q.type]})):(I[C]=0,o.push(()=>{I[C]=xt[Q.type](s,t,this.littleEndian),t+=PA[Q.type]}));const a=A(n)??(()=>{});for(let C=0;C<g;C++){for(const Q of o)Q();a(C,I)}}}parseSplats(A,t){if(this.elements.vertex==null)throw new Error("No vertex element found");let s=!1;const i=[];let n=0,g=[],r=[],I=[],o,a,C;function Q(){const E=Je[n];g=new Array(3).fill(null).flatMap((u,y)=>[0,1,2].map((f,D)=>`f_rest_${y+D*E/3}`)),r=new Array(5).fill(null).flatMap((u,y)=>[0,1,2].map((f,D)=>`f_rest_${3+y+D*E/3}`)),I=new Array(7).fill(null).flatMap((u,y)=>[0,1,2].map((f,D)=>`f_rest_${8+y+D*E/3}`)),o=n>=1?new Float32Array(3*3):void 0,a=n>=2?new Float32Array(5*3):void 0,C=n>=3?new Float32Array(7*3):void 0}function B(E,u){if(!o)throw new Error("Missing sh1");for(const[y,f]of g.entries())o[y]=u[f]*8/255-4;if(a)for(const[y,f]of r.entries())a[y]=u[f]*8/255-4;if(C)for(const[y,f]of I.entries())C[y]=u[f]*8/255-4;t==null||t(E,o,a,C)}function h(E){const{min_x:u,min_y:y,min_z:f,max_x:D,max_y:S,max_z:b,min_scale_x:x,min_scale_y:m,min_scale_z:G,max_scale_x:p,max_scale_y:w,max_scale_z:M}=E.properties;if(!u||!y||!f||!D||!S||!b||!x||!m||!G||!p||!w||!M)throw new Error("Missing PLY chunk properties");return s=!0,(z,Y)=>{const{min_x:N,min_y:q,min_z:T,max_x:v,max_y:P,max_z:Z,min_scale_x:W,min_scale_y:L,min_scale_z:K,max_scale_x:J,max_scale_y:R,max_scale_z:F,min_r:eA,min_g:iA,min_b:IA,max_r:gA,max_g:oA,max_b:aA}=Y;i.push({min_x:N,min_y:q,min_z:T,max_x:v,max_y:P,max_z:Z,min_scale_x:W,min_scale_y:L,min_scale_z:K,max_scale_x:J,max_scale_y:R,max_scale_z:F,min_r:eA,min_g:iA,min_b:IA,max_r:gA,max_g:oA,max_b:aA})}}function l(E){if(t&&E.name==="sh")return n=qs(E.properties),Q(),B;if(E.name!=="vertex")return null;const{packed_position:u,packed_rotation:y,packed_scale:f,packed_color:D}=E.properties;if(!u||!y||!f||!D)throw new Error("Missing PLY properties: packed_position, packed_rotation, packed_scale, packed_color");const S=Math.sqrt(2);return(b,x)=>{const m=i[b>>>8];if(m==null)throw new Error("Missing PLY chunk");const{min_x:G,min_y:p,min_z:w,max_x:M,max_y:z,max_z:Y,min_scale_x:N,min_scale_y:q,min_scale_z:T,max_scale_x:v,max_scale_y:P,max_scale_z:Z,min_r:W,min_g:L,min_b:K,max_r:J,max_g:R,max_b:F}=m,{packed_position:eA,packed_rotation:iA,packed_scale:IA,packed_color:gA}=x,oA=(eA>>>21&2047)/2047*(M-G)+G,aA=(eA>>>11&1023)/1023*(z-p)+p,FA=(eA&2047)/2047*(Y-w)+w,CA=((iA>>>20&1023)/1023-.5)*S,hA=((iA>>>10&1023)/1023-.5)*S,EA=((iA&1023)/1023-.5)*S,k=Math.sqrt(Math.max(0,1-CA*CA-hA*hA-EA*EA)),$=iA>>>30,wA=$===0?CA:$===1?k:hA,H=$<=1?hA:$===2?k:EA,RA=$<=2?EA:k,nA=$===0?k:CA,U=Math.exp((IA>>>21&2047)/2047*(v-N)+N),cA=Math.exp((IA>>>11&1023)/1023*(P-q)+q),AA=Math.exp((IA&2047)/2047*(Z-T)+T),_=(gA>>>24&255)/255*((J??1)-(W??0))+(W??0),mA=(gA>>>16&255)/255*((R??1)-(L??0))+(L??0),et=(gA>>>8&255)/255*((F??1)-(K??0))+(K??0),it=(gA&255)/255;A(b,oA,aA,FA,U,cA,AA,wA,H,RA,nA,it,_,mA,et)}}const c=E=>{if(E.name==="chunk")return h(E);if(s)return l(E);if(E.name!=="vertex")return null;const{x:u,y,z:f,scale_0:D,scale_1:S,scale_2:b,rot_0:x,rot_1:m,rot_2:G,rot_3:p,opacity:w,f_dc_0:M,f_dc_1:z,f_dc_2:Y,red:N,green:q,blue:T,alpha:v}=E.properties;if(!u||!y||!f)throw new Error("Missing PLY properties: x, y, z");const P=D&&S&&b,Z=x&&m&&G&&p,W=v!=null?Dt[v.type]:1,L=N!=null?Dt[N.type]:1,K=q!=null?Dt[q.type]:1,J=T!=null?Dt[T.type]:1;return n=qs(E.properties),Q(),(R,F)=>{const eA=P?Math.exp(F.scale_0):VA.defaultPointScale,iA=P?Math.exp(F.scale_1):VA.defaultPointScale,IA=P?Math.exp(F.scale_2):VA.defaultPointScale,gA=Z?F.rot_1:0,oA=Z?F.rot_2:0,aA=Z?F.rot_3:0,FA=Z?F.rot_0:1,CA=w!=null?1/(1+Math.exp(-F.opacity)):v!=null?F.alpha/W:1,hA=M!=null?F.f_dc_0*mt+.5:N!=null?F.red/L:1,EA=z!=null?F.f_dc_1*mt+.5:q!=null?F.green/K:1,k=Y!=null?F.f_dc_2*mt+.5:T!=null?F.blue/J:1;if(A(R,F.x,F.y,F.z,eA,iA,IA,gA,oA,aA,FA,CA,hA,EA,k),t&&o){if(o)for(const[$,wA]of g.entries())o[$]=F[wA];if(a)for(const[$,wA]of r.entries())a[$]=F[wA];if(C)for(const[$,wA]of I.entries())C[$]=F[wA];t(R,o,a,C)}}};this.parseData(c)}injectRgba(A){let t=0;const s=this.data;if(s==null)throw new Error("No parsed data");if(A.length!==this.numSplats*4)throw new Error("Invalid RGBA array length");for(const i in this.elements){const n=this.elements[i],{count:g,properties:r}=n,I=[];let o=0;const a=i==="vertex";if(a){for(const C of["opacity","f_dc_0","f_dc_1","f_dc_2"])if(!r[C]||r[C].type!=="float")throw new Error(`Can\'t injectRgba due to property: ${C}`)}for(const[C,Q]of Object.entries(r))if(Q.isList)I.push(()=>{const B=xt[Q.countType](s,t,this.littleEndian);t+=PA[Q.countType],t+=B*PA[Q.type]});else{if(a)if(C==="f_dc_0"||C==="f_dc_1"||C==="f_dc_2"){const B=Number.parseInt(C.slice(5));I.push(()=>{const h=(A[o+B]/255-.5)/mt;Hs[Q.type](s,t,this.littleEndian,h)})}else C==="opacity"&&I.push(()=>{const B=Math.max(-100,Math.min(100,-Math.log(1/(A[o+3]/255)-1)));Hs[Q.type](s,t,this.littleEndian,B)});I.push(()=>{t+=PA[Q.type]})}for(let C=0;C<g;C++){for(const Q of I)Q();a&&(o+=4)}}}};VA.defaultPointScale=.001;let wt=VA;const mt=.28209479177387814,xt={char:(e,A,t)=>e.getInt8(A),uchar:(e,A,t)=>e.getUint8(A),short:(e,A,t)=>e.getInt16(A,t),ushort:(e,A,t)=>e.getUint16(A,t),int:(e,A,t)=>e.getInt32(A,t),uint:(e,A,t)=>e.getUint32(A,t),float:(e,A,t)=>e.getFloat32(A,t),double:(e,A,t)=>e.getFloat64(A,t)},Hs={char:(e,A,t,s)=>{e.setInt8(A,s)},uchar:(e,A,t,s)=>{e.setUint8(A,s)},short:(e,A,t,s)=>{e.setInt16(A,s,t)},ushort:(e,A,t,s)=>{e.setUint16(A,s,t)},int:(e,A,t,s)=>{e.setInt32(A,s,t)},uint:(e,A,t,s)=>{e.setUint32(A,s,t)},float:(e,A,t,s)=>{e.setFloat32(A,s,t)},double:(e,A,t,s)=>{e.setFloat64(A,s,t)}},PA={char:1,uchar:1,short:2,ushort:2,int:4,uint:4,float:4,double:8},Dt={char:127,uchar:255,short:32767,ushort:65535,int:2147483647,uint:4294967295,float:1,double:1},be={0:0,9:1,24:2,45:3},Je={0:0,1:9,2:24,3:45};function qs(e){let A=0;for(;e[`f_rest_${A}`];)A+=1;const t=be[A];if(t==null)throw new Error(`Unsupported number of SH coefficients: ${A}`);return t}var tt=(e=>(e.PLY="ply",e.SPZ="spz",e.SPLAT="splat",e.KSPLAT="ksplat",e.PCSOGS="pcsogs",e.PCSOGSZIP="pcsogszip",e))(tt||{});function _e(e){const A=new DataView(e.buffer);if((A.getUint32(0,!0)&16777215)===7957616)return"ply";if((A.getUint32(0,!0)&16777215)===559903){const t=ke(e,4);return new DataView(t.buffer).getUint32(0,!0)===1347635022?"spz":void 0}if(A.getUint32(0,!0)===67324752)return vs(e)?"pcsogszip":void 0}function ze(e){const A=e.split(/[?#]/,1)[0],t=Math.max(A.lastIndexOf("/"),A.lastIndexOf("\\\\")),s=A.slice(t+1),i=s.lastIndexOf(".");return i<=0||i===s.length-1?"":s.slice(i+1).toLowerCase()}function Le(e){const A=ze(e);if(A==="ply")return"ply";if(A==="spz")return"spz";if(A==="splat")return"splat";if(A==="ksplat")return"ksplat"}function He(e){try{let A;if(typeof e=="string")A=e;else{const s=e instanceof ArrayBuffer?new Uint8Array(e):e;if(s.length>65536)return;A=new TextDecoder().decode(s)}const t=JSON.parse(A);if(!t||typeof t!="object"||Array.isArray(t))return;for(const s of["means","scales","quats","sh0"])if(!t[s]||typeof t[s]!="object"||Array.isArray(t[s])||!t[s].shape||!t[s].files||s!=="quats"&&(!t[s].mins||!t[s].maxs))return;return t}catch{return}}function vs(e){try{const A=e instanceof ArrayBuffer?new Uint8Array(e):e;let t=null;const s=ue(A,{filter:({name:n})=>n.split(/[\\\\/]/).pop()==="meta.json"?(t=n,!0):!1});if(!t)return;const i=He(s[t]);return i?{name:t,json:i}:void 0}catch{return}}class qe{constructor({maxSplats:A=1}={}){this.numSplats=0,this.maxSplats=Ne(A).maxSplats,this.centers=new Float32Array(this.maxSplats*3),this.scales=new Float32Array(this.maxSplats*3),this.quaternions=new Float32Array(this.maxSplats*4),this.opacities=new Float32Array(this.maxSplats),this.colors=new Float32Array(this.maxSplats*3)}pushSplat(){const A=this.numSplats;return this.ensureIndex(A),this.numSplats+=1,A}unpushSplat(A){if(A===this.numSplats-1)this.numSplats-=1;else throw new Error("Cannot unpush splat from non-last position")}ensureCapacity(A){if(A>this.maxSplats){const t=Math.max(A,this.maxSplats*2),s=new Float32Array(t*3),i=new Float32Array(t*3),n=new Float32Array(t*4),g=new Float32Array(t),r=new Float32Array(t*3);if(s.set(this.centers),i.set(this.scales),n.set(this.quaternions),g.set(this.opacities),r.set(this.colors),this.centers=s,this.scales=i,this.quaternions=n,this.opacities=g,this.colors=r,this.sh1){const I=new Float32Array(t*9);I.set(this.sh1),this.sh1=I}if(this.sh2){const I=new Float32Array(t*15);I.set(this.sh2),this.sh2=I}if(this.sh3){const I=new Float32Array(t*21);I.set(this.sh3),this.sh3=I}this.maxSplats=t}}ensureIndex(A){this.ensureCapacity(A+1)}setCenter(A,t,s,i){this.centers[A*3]=t,this.centers[A*3+1]=s,this.centers[A*3+2]=i}setScale(A,t,s,i){this.scales[A*3]=t,this.scales[A*3+1]=s,this.scales[A*3+2]=i}setQuaternion(A,t,s,i,n){this.quaternions[A*4]=t,this.quaternions[A*4+1]=s,this.quaternions[A*4+2]=i,this.quaternions[A*4+3]=n}setOpacity(A,t){this.opacities[A]=t}setColor(A,t,s,i){this.colors[A*3]=t,this.colors[A*3+1]=s,this.colors[A*3+2]=i}setSh1(A,t){this.sh1||(this.sh1=new Float32Array(this.maxSplats*9));for(let s=0;s<9;++s)this.sh1[A*9+s]=t[s]}setSh2(A,t){this.sh2||(this.sh2=new Float32Array(this.maxSplats*15));for(let s=0;s<15;++s)this.sh2[A*15+s]=t[s]}setSh3(A,t){this.sh3||(this.sh3=new Float32Array(this.maxSplats*21));for(let s=0;s<21;++s)this.sh3[A*21+s]=t[s]}}async function Ks(e,A,t){if(e.quats.encoding!=="quaternion_packed")throw new Error("Unsupported quaternion encoding");const s=e.means.shape[0],i=Et(s),n=new Uint32Array(i*4),g={},r=Promise.all([st(A[e.means.files[0]]),st(A[e.means.files[1]])]).then(Q=>{for(let B=0;B<s;++B){const h=B*4,l=(Q[0][h+0]+(Q[1][h+0]<<8))/65535,c=(Q[0][h+1]+(Q[1][h+1]<<8))/65535,E=(Q[0][h+2]+(Q[1][h+2]<<8))/65535;let u=e.means.mins[0]+(e.means.maxs[0]-e.means.mins[0])*l,y=e.means.mins[1]+(e.means.maxs[1]-e.means.mins[1])*c,f=e.means.mins[2]+(e.means.maxs[2]-e.means.mins[2])*E;u=Math.sign(u)*(Math.exp(Math.abs(u))-1),y=Math.sign(y)*(Math.exp(Math.abs(y))-1),f=Math.sign(f)*(Math.exp(Math.abs(f))-1),Rs(n,B,u,y,f)}}),I=st(A[e.scales.files[0]]).then(Q=>{for(let B=0;B<s;++B){const h=B*4,l=Q[h+0]/255,c=Q[h+1]/255,E=Q[h+2]/255,u=e.scales.mins[0]+(e.scales.maxs[0]-e.scales.mins[0])*l,y=e.scales.mins[1]+(e.scales.maxs[1]-e.scales.mins[1])*c,f=e.scales.mins[2]+(e.scales.maxs[2]-e.scales.mins[2])*E;bs(n,B,Math.exp(u),Math.exp(y),Math.exp(f),t)}}),o=st(A[e.quats.files[0]]).then(Q=>{const B=Math.sqrt(2);for(let h=0;h<s;++h){const l=h*4,c=(Q[l+0]/255-.5)*B,E=(Q[l+1]/255-.5)*B,u=(Q[l+2]/255-.5)*B,y=Math.sqrt(Math.max(0,1-c*c-E*E-u*u)),f=Q[l+3]-252,D=f===0?c:f===1?y:E,S=f<=1?E:f===2?y:u,b=f<=2?u:y;Js(n,h,D,S,b,f===0?y:c)}}),a=st(A[e.sh0.files[0]]).then(Q=>{const B=.28209479177387814;for(let h=0;h<s;++h){const l=h*4,c=Q[l+0]/255,E=Q[l+1]/255,u=Q[l+2]/255,y=Q[l+3]/255,f=e.sh0.mins[0]+(e.sh0.maxs[0]-e.sh0.mins[0])*c,D=e.sh0.mins[1]+(e.sh0.maxs[1]-e.sh0.mins[1])*E,S=e.sh0.mins[2]+(e.sh0.maxs[2]-e.sh0.mins[2])*u,b=e.sh0.mins[3]+(e.sh0.maxs[3]-e.sh0.mins[3])*y,x=B*f+.5,m=B*D+.5,G=B*S+.5,p=1/(1+Math.exp(-b));Fe(n,h,x,m,G,p,t)}}),C=[r,I,o,a];if(e.shN){const Q=e.shN.shape[1]>=45,B=e.shN.shape[1]>=24,h=e.shN.shape[1]>=9;h&&(g.sh1=new Uint32Array(s*2)),B&&(g.sh2=new Uint32Array(s*4)),Q&&(g.sh3=new Uint32Array(s*4));const l=new Float32Array(9),c=new Float32Array(15),E=new Float32Array(21),u=e.shN,y=Promise.all([Kt(A[e.shN.files[0]]),Kt(A[e.shN.files[1]])]).then(([f,D])=>{for(let S=0;S<s;++S){const b=S*4,x=D.rgba[b+0]+(D.rgba[b+1]<<8),m=(x&63)*15,p=(x>>>6)*f.width+m;for(let w=0;w<3;++w){if(h)for(let M=0;M<3;++M)l[M*3+w]=u.mins+(u.maxs-u.mins)*f.rgba[(p+M)*4+w]/255;if(B)for(let M=0;M<5;++M)c[M*3+w]=u.mins+(u.maxs-u.mins)*f.rgba[(p+3+M)*4+w]/255;if(Q)for(let M=0;M<7;++M)E[M*3+w]=u.mins+(u.maxs-u.mins)*f.rgba[(p+8+M)*4+w]/255}h&&lt(g.sh1,S,l,t),B&&ut(g.sh2,S,c,t),Q&&yt(g.sh3,S,E,t)}});C.push(y)}return await Promise.all(C),{packedArray:n,numSplats:s,extra:g}}let pt=null;async function Kt(e){if(!pt&&(pt=new OffscreenCanvas(1,1).getContext("webgl2"),!pt))throw new Error("Failed to create WebGL2 context");const A=new Blob([e]),t=await createImageBitmap(A,{premultiplyAlpha:"none"}),s=pt,i=s.createTexture();s.bindTexture(s.TEXTURE_2D,i),s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,!0),s.texImage2D(s.TEXTURE_2D,0,s.RGBA,s.RGBA,s.UNSIGNED_BYTE,t),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST);const n=s.createFramebuffer();s.bindFramebuffer(s.FRAMEBUFFER,n),s.framebufferTexture2D(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0,s.TEXTURE_2D,i,0);const g=new Uint8Array(t.width*t.height*4);return s.readPixels(0,0,t.width,t.height,s.RGBA,s.UNSIGNED_BYTE,g),s.deleteTexture(i),s.deleteFramebuffer(n),{rgba:g,width:t.width,height:t.height}}async function st(e){const{rgba:A}=await Kt(e);return A}async function ve(e,A){var Q;const t=vs(e);if(!t)throw new Error("Invalid PC SOGS zip file");const{name:s,json:i}=t,n=s.lastIndexOf("/"),g=s.lastIndexOf("\\\\"),r=s.slice(0,Math.max(n,g)+1),I=new Map,o=[...i.means.files,...i.scales.files,...i.quats.files,...i.sh0.files,...((Q=i.shN)==null?void 0:Q.files)??[]];for(const B of o)I.set(r+B,B);const a=await new Promise((B,h)=>{le(e,{filter:({name:l})=>I.has(l)},(l,c)=>{l?h(l):B(c)})}),C={};for(const[B,h]of I.entries())C[h]=a[B];return await Ks(i,C,A)}class Ts{constructor({fileBytes:A}){this.fileBytes=A instanceof ArrayBuffer?new Uint8Array(A):A,this.reader=new Ge({fileBytes:this.fileBytes});const t=new DataView(this.reader.read(16).buffer);if(t.getUint32(0,!0)!==1347635022)throw new Error("Invalid SPZ file");if(this.version=t.getUint32(4,!0),this.version<1||this.version>2)throw new Error(`Unsupported SPZ version: ${this.version}`);this.numSplats=t.getUint32(8,!0),this.shDegree=t.getUint8(12),this.fractionalBits=t.getUint8(13),this.flags=t.getUint8(14),this.flagAntiAlias=(this.flags&1)!==0,this.reserved=t.getUint8(15),this.parsed=!1}parseSplats(A,t,s,i,n,g){if(this.parsed)throw new Error("SPZ file already parsed");if(this.parsed=!0,this.version===1){const r=this.reader.read(this.numSplats*3*2),I=new Uint16Array(r.buffer);for(let o=0;o<this.numSplats;o++){const a=o*3,C=O(I[a]),Q=O(I[a+1]),B=O(I[a+2]);A==null||A(o,C,Q,B)}}else if(this.version===2){const r=1<<this.fractionalBits,I=this.reader.read(this.numSplats*3*3);for(let o=0;o<this.numSplats;o++){const a=o*9,C=((I[a+2]<<24|I[a+1]<<16|I[a]<<8)>>8)/r,Q=((I[a+5]<<24|I[a+4]<<16|I[a+3]<<8)>>8)/r,B=((I[a+8]<<24|I[a+7]<<16|I[a+6]<<8)>>8)/r;A==null||A(o,C,Q,B)}}else throw new Error("Unreachable");{const r=this.reader.read(this.numSplats);for(let I=0;I<this.numSplats;I++)t==null||t(I,r[I]/255)}{const r=this.reader.read(this.numSplats*3),I=Xs/.15;for(let o=0;o<this.numSplats;o++){const a=o*3,C=(r[a]/255-.5)*I+.5,Q=(r[a+1]/255-.5)*I+.5,B=(r[a+2]/255-.5)*I+.5;s==null||s(o,C,Q,B)}}{const r=this.reader.read(this.numSplats*3);for(let I=0;I<this.numSplats;I++){const o=I*3,a=Math.exp(r[o]/16-10),C=Math.exp(r[o+1]/16-10),Q=Math.exp(r[o+2]/16-10);i==null||i(I,a,C,Q)}}{const r=this.reader.read(this.numSplats*3);for(let I=0;I<this.numSplats;I++){const o=I*3,a=r[o]/127.5-1,C=r[o+1]/127.5-1,Q=r[o+2]/127.5-1,B=Math.sqrt(Math.max(0,1-a*a-C*C-Q*Q));n==null||n(I,a,C,Q,B)}}if(g&&this.shDegree>=1){const r=new Float32Array(9),I=this.shDegree>=2?new Float32Array(5*3):void 0,o=this.shDegree>=3?new Float32Array(7*3):void 0,a=this.reader.read(this.numSplats*Zs[this.shDegree]*3);let C=0;for(let Q=0;Q<this.numSplats;Q++){for(let B=0;B<9;++B)r[B]=(a[C+B]-128)/128;if(C+=9,I){for(let B=0;B<15;++B)I[B]=(a[C+B]-128)/128;C+=15}if(o){for(let B=0;B<21;++B)o[B]=(a[C+B]-128)/128;C+=21}g==null||g(Q,r,I,o)}}}}const Zs={1:3,2:8,3:15},Xs=.28209479177387814,Ke=1347635022,Te=2,Ze=1;class YA{constructor({numSplats:A,shDegree:t,fractionalBits:s=12,flagAntiAlias:i=!0}){this.clippedCount=0;const n=19+(t>=1?9:0)+(t>=2?15:0)+(t>=3?21:0),g=16+A*n;this.buffer=new ArrayBuffer(g),this.view=new DataView(this.buffer),this.view.setUint32(0,Ke,!0),this.view.setUint32(4,Te,!0),this.view.setUint32(8,A,!0),this.view.setUint8(12,t),this.view.setUint8(13,s),this.view.setUint8(14,i?Ze:0),this.view.setUint8(15,0),this.numSplats=A,this.shDegree=t,this.fractionalBits=s,this.fraction=1<<s,this.flagAntiAlias=i}setCenter(A,t,s,i){const n=Math.round(t*this.fraction),g=Math.max(-8388607,Math.min(8388607,n)),r=Math.round(s*this.fraction),I=Math.max(-8388607,Math.min(8388607,r)),o=Math.round(i*this.fraction),a=Math.max(-8388607,Math.min(8388607,o));(n!==g||r!==I||o!==a)&&(this.clippedCount+=1);const B=16+A*9;this.view.setUint8(B,g&255),this.view.setUint8(B+1,g>>8&255),this.view.setUint8(B+2,g>>16&255),this.view.setUint8(B+3,I&255),this.view.setUint8(B+4,I>>8&255),this.view.setUint8(B+5,I>>16&255),this.view.setUint8(B+6,a&255),this.view.setUint8(B+7,a>>8&255),this.view.setUint8(B+8,a>>16&255)}setAlpha(A,t){const s=16+this.numSplats*9+A;this.view.setUint8(s,Math.max(0,Math.min(255,Math.round(t*255))))}static scaleRgb(A){const t=((A-.5)/(Xs/.15)+.5)*255;return Math.max(0,Math.min(255,Math.round(t)))}setRgb(A,t,s,i){const n=16+this.numSplats*10+A*3;this.view.setUint8(n,YA.scaleRgb(t)),this.view.setUint8(n+1,YA.scaleRgb(s)),this.view.setUint8(n+2,YA.scaleRgb(i))}setScale(A,t,s,i){const n=16+this.numSplats*13+A*3;this.view.setUint8(n,Math.max(0,Math.min(255,Math.round((Math.log(t)+10)*16)))),this.view.setUint8(n+1,Math.max(0,Math.min(255,Math.round((Math.log(s)+10)*16)))),this.view.setUint8(n+2,Math.max(0,Math.min(255,Math.round((Math.log(i)+10)*16))))}setQuat(A,t,s,i,n){const g=16+this.numSplats*16+A*3,r=n<0;this.view.setUint8(g,Math.max(0,Math.min(255,Math.round(((r?-t:t)+1)*127.5)))),this.view.setUint8(g+1,Math.max(0,Math.min(255,Math.round(((r?-s:s)+1)*127.5)))),this.view.setUint8(g+2,Math.max(0,Math.min(255,Math.round(((r?-i:i)+1)*127.5))))}static quantizeSh(A,t){const s=Math.round(A*128)+128,i=1<<8-t,n=Math.floor((s+i/2)/i)*i;return Math.max(0,Math.min(255,n))}setSh(A,t,s,i){const n=Zs[this.shDegree]||0,g=16+this.numSplats*19+A*n*3;for(let r=0;r<9;++r)this.view.setUint8(g+r,YA.quantizeSh(t[r],5));if(s){const r=g+9;for(let I=0;I<15;++I)this.view.setUint8(r+I,YA.quantizeSh(s[I],4));if(i){const I=r+15;for(let o=0;o<21;++o)this.view.setUint8(I+o,YA.quantizeSh(i[o],4))}}}async finalize(){const A=new Uint8Array(this.buffer),s=new ReadableStream({async start(g){g.enqueue(A),g.close()}}).pipeThrough(new CompressionStream("gzip")),n=await new Response(s).arrayBuffer();return console.log("Compressed",A.length,"bytes to",n.byteLength,"bytes"),new Uint8Array(n)}}async function Xe(e){var a,C,Q;const A=new qe,{inputs:t,clipXyz:s,maxSh:i,fractionalBits:n=12,opacityThreshold:g}=e;for(const B of t){let h=function(x){return x.multiplyScalar(y),x.applyQuaternion(f),x.add(D),x},l=function(x){return x.multiplyScalar(y),x},c=function(x){return x.premultiply(f),x},E=function(x){return!S||S.containsPoint(x)},u=function(x){return g!==void 0?x>=g:!0};const y=((a=B.transform)==null?void 0:a.scale)??1,f=new NA().fromArray(((C=B.transform)==null?void 0:C.quaternion)??[0,0,0,1]),D=new d().fromArray(((Q=B.transform)==null?void 0:Q.translate)??[0,0,0]),S=s?new Fs(new d().fromArray(s.min),new d().fromArray(s.max)):void 0;let b=B.fileType;switch(b||(b=_e(B.fileBytes),!b&&B.pathOrUrl&&(b=Le(B.pathOrUrl))),b){case tt.PLY:{const x=new wt({fileBytes:B.fileBytes});await x.parseHeader();let m=null;x.parseSplats((G,p,w,M,z,Y,N,q,T,v,P,Z,W,L,K)=>{const J=h(new d(p,w,M));if(E(J)&&u(Z)){m=A.pushSplat(),A.setCenter(m,J.x,J.y,J.z);const R=l(new d(z,Y,N));A.setScale(m,R.x,R.y,R.z);const F=c(new NA(q,T,v,P));A.setQuaternion(m,F.x,F.y,F.z,F.w),A.setOpacity(m,Z),A.setColor(m,W,L,K)}else m=null},(G,p,w,M)=>{p&&m!==null&&A.setSh1(m,p),w&&m!==null&&A.setSh2(m,w),M&&m!==null&&A.setSh3(m,M)});break}case tt.SPZ:{const x=new Ts({fileBytes:B.fileBytes}),m=new Int32Array(x.numSplats);m.fill(-1);const G=new Float32Array(x.numSplats*3),p=new d;x.parseSplats((w,M,z,Y)=>{const N=h(new d(M,z,Y));G[w*3]=N.x,G[w*3+1]=N.y,G[w*3+2]=N.z},(w,M)=>{p.fromArray(G,w*3),E(p)&&u(M)&&(m[w]=A.pushSplat(),A.setCenter(m[w],p.x,p.y,p.z),A.setOpacity(m[w],M))},(w,M,z,Y)=>{m[w]>=0&&A.setColor(m[w],M,z,Y)},(w,M,z,Y)=>{if(m[w]>=0){const N=l(new d(M,z,Y));A.setScale(m[w],N.x,N.y,N.z)}},(w,M,z,Y,N)=>{if(m[w]>=0){const q=c(new NA(M,z,Y,N));A.setQuaternion(m[w],q.x,q.y,q.z,q.w)}},(w,M,z,Y)=>{m[w]>=0&&(A.setSh1(m[w],M),z&&A.setSh2(m[w],z),Y&&A.setSh3(m[w],Y))});break}case tt.SPLAT:zs(B.fileBytes,x=>{},(x,m,G,p,w,M,z,Y,N,q,T,v,P,Z,W)=>{const L=h(new d(m,G,p));if(E(L)&&u(v)){const K=A.pushSplat();A.setCenter(K,L.x,L.y,L.z);const J=l(new d(w,M,z));A.setScale(K,J.x,J.y,J.z);const R=c(new NA(Y,N,q,T));A.setQuaternion(K,R.x,R.y,R.z,R.w),A.setOpacity(K,v),A.setColor(K,P,Z,W)}});break;case tt.KSPLAT:{let x=null;Ye(B.fileBytes,m=>{},(m,G,p,w,M,z,Y,N,q,T,v,P,Z,W,L)=>{const K=h(new d(G,p,w));if(E(K)&&u(P)){x=A.pushSplat(),A.setCenter(x,K.x,K.y,K.z);const J=l(new d(M,z,Y));A.setScale(x,J.x,J.y,J.z);const R=c(new NA(N,q,T,v));A.setQuaternion(x,R.x,R.y,R.z,R.w),A.setOpacity(x,P),A.setColor(x,Z,W,L)}else x=null},(m,G,p,w)=>{x!==null&&(A.setSh1(x,G),p&&A.setSh2(x,p),w&&A.setSh3(x,w))});break}default:throw new Error(`transcodeSpz not implemented for ${b}`)}}const r=Math.min(i??3,A.sh3?3:A.sh2?2:A.sh1?1:0),I=new YA({numSplats:A.numSplats,shDegree:r,fractionalBits:n,flagAntiAlias:!0});for(let B=0;B<A.numSplats;++B){const h=B*3,l=B*4;I.setCenter(B,A.centers[h],A.centers[h+1],A.centers[h+2]),I.setScale(B,A.scales[h],A.scales[h+1],A.scales[h+2]),I.setQuat(B,A.quaternions[l],A.quaternions[l+1],A.quaternions[l+2],A.quaternions[l+3]),I.setAlpha(B,A.opacities[B]),I.setRgb(B,A.colors[h],A.colors[h+1],A.colors[h+2]),A.sh1&&r>=1&&I.setSh(B,A.sh1.slice(B*9,(B+1)*9),r>=2&&A.sh2?A.sh2.slice(B*15,(B+1)*15):void 0,r>=3&&A.sh3?A.sh3.slice(B*21,(B+1)*21):void 0)}return{fileBytes:await I.finalize(),clippedCount:I.clippedCount}}async function Ws(e){const{name:A,args:t,id:s}=e.data;let i,n;try{switch(A){case"unpackPly":{const{packedArray:g,fileBytes:r,splatEncoding:I}=t,o=await We({packedArray:g,fileBytes:r,splatEncoding:I});i={id:s,numSplats:o.numSplats,packedArray:o.packedArray,extra:o.extra};break}case"decodeSpz":{const{fileBytes:g,splatEncoding:r}=t,I=Pe(g,r);i={id:s,numSplats:I.numSplats,packedArray:I.packedArray,extra:I.extra};break}case"decodeAntiSplat":{const{fileBytes:g,splatEncoding:r}=t,I=Ue(g,r);i={id:s,numSplats:I.numSplats,packedArray:I.packedArray};break}case"decodeKsplat":{const{fileBytes:g,splatEncoding:r}=t,I=Re(g,r);i={id:s,numSplats:I.numSplats,packedArray:I.packedArray,extra:I.extra};break}case"decodePcSogs":{const{fileBytes:g,extraFiles:r,splatEncoding:I}=t,o=JSON.parse(new TextDecoder().decode(g)),a=await Ks(o,r,I);i={id:s,numSplats:a.numSplats,packedArray:a.packedArray,extra:a.extra};break}case"decodePcSogsZip":{const{fileBytes:g,splatEncoding:r}=t,I=await ve(g,r);i={id:s,numSplats:I.numSplats,packedArray:I.packedArray,extra:I.extra};break}case"sortSplats":{const{totalSplats:g,readback:r,ordering:I}=t;i={id:s,readback:r,...Ve({totalSplats:g,readback:r,ordering:I})};break}case"sortDoubleSplats":{const{numSplats:g,readback:r,ordering:I}=t;i={id:s,readback:r,ordering:I,activeSplats:Os(g,r,I)};break}case"sort32Splats":{const{numSplats:g,readback:r,ordering:I}=t;i={id:s,readback:r,ordering:I,activeSplats:$s(g,r,I)};break}case"transcodeSpz":{const g=t,r=await Xe(g);i={id:s,fileBytes:r,input:g};break}default:throw new Error(`Unknown name: ${A}`)}}catch(g){n=g,console.error(n)}self.postMessage({id:s,result:i,error:n},{transfer:Me(i)})}async function We({packedArray:e,fileBytes:A,splatEncoding:t}){const s=new wt({fileBytes:A});await s.parseHeader();const i=s.numSplats,n={};return s.parseSplats((g,r,I,o,a,C,Q,B,h,l,c,E,u,y,f)=>{vt(e,g,r,I,o,a,C,Q,B,h,l,c,E,u,y,f,t)},(g,r,I,o)=>{r&&(n.sh1||(n.sh1=new Uint32Array(i*2)),lt(n.sh1,g,r,t)),I&&(n.sh2||(n.sh2=new Uint32Array(i*4)),ut(n.sh2,g,I,t)),o&&(n.sh3||(n.sh3=new Uint32Array(i*4)),yt(n.sh3,g,o,t))}),{packedArray:e,numSplats:i,extra:n}}function Pe(e,A){const t=new Ts({fileBytes:e}),s=t.numSplats,i=Et(s),n=new Uint32Array(i*4),g={};return t.parseSplats((r,I,o,a)=>{Rs(n,r,I,o,a)},(r,I)=>{de(n,r,I)},(r,I,o,a)=>{Se(n,r,I,o,a,A)},(r,I,o,a)=>{bs(n,r,I,o,a,A)},(r,I,o,a,C)=>{Js(n,r,I,o,a,C)},(r,I,o,a)=>{I&&(g.sh1||(g.sh1=new Uint32Array(s*2)),lt(g.sh1,r,I,A)),o&&(g.sh2||(g.sh2=new Uint32Array(s*4)),ut(g.sh2,r,o,A)),a&&(g.sh3||(g.sh3=new Uint32Array(s*4)),yt(g.sh3,r,a,A))}),{packedArray:n,numSplats:s,extra:g}}const Tt=31744,Mt=Tt+1;let DA=null;function Ve({totalSplats:e,readback:A,ordering:t}){DA||(DA=new Uint32Array(Mt)),DA.fill(0);const s=A.map(I=>new Uint32Array(I.buffer)),i=s[0].length,n=Math.ceil(e/i);let g=0;for(let I=0;I<n;++I){const o=s[I],a=Math.min(o.length,e-g);for(let C=0;C<a;++C){const Q=o[C]&32767;Q<Tt&&(DA[Q]+=1)}g+=a}let r=0;for(let I=0;I<Mt;++I){const o=r+DA[I];DA[I]=r,r=o}g=0;for(let I=0;I<n;++I){const o=s[I],a=Math.min(o.length,e-g);for(let C=0;C<a;++C){const Q=o[C]&32767;Q<Tt&&(t[DA[Q]]=g+C,DA[Q]+=1)}g+=a}if(DA[Mt-1]!==r)throw new Error(`Expected ${r} active splats but got ${DA[Mt-1]}`);return{activeSplats:r,ordering:t}}const Zt=[];function Ps(e){Zt.push(e)}async function je(){self.addEventListener("message",Ps),await es(),self.removeEventListener("message",Ps),self.addEventListener("message",Ws);for(const e of Zt)Ws(e);Zt.length=0}je().catch(console.error)})();\n//# sourceMappingURL=worker-DXCsnY0K.js.map\n',Es=typeof self<"u"&&self.Blob&&new Blob([eo],{type:"text/javascript;charset=utf-8"});function xu(t){let A;try{if(A=Es&&(self.URL||self.webkitURL).createObjectURL(Es),!A)throw"";const e=new Worker(A,{name:t==null?void 0:t.name});return e.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(A)}),e}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(eo),{name:t==null?void 0:t.name})}finally{A&&(self.URL||self.webkitURL).revokeObjectURL(A)}}class Su{constructor(){this.messages={},this.messageIdNext=0,this.worker=new xu,this.worker.onmessage=A=>this.onMessage(A)}makeMessageId(){return++this.messageIdNext}makeMessagePromiseId(){const A=this.makeMessageId(),e=new Promise((s,n)=>{this.messages[A]={resolve:s,reject:n}});return{id:A,promise:e}}onMessage(A){const{id:e,result:s,error:n}=A.data,i=this.messages[e];i&&(delete this.messages[e],n?i.reject(n):i.resolve(s))}async call(A,e){const{id:s,promise:n}=this.makeMessagePromiseId();return this.worker.postMessage({name:A,args:e,id:s},{transfer:zn(e)}),n}}let so=4,Ee=0;const no=[],io=[];async function Du(){const t=no.shift();if(t)return t;if(Ee<so){const A=new Su;return Ee+=1,A}return new Promise(A=>{io.push(A)})}function Mu(t){if(Ee>so){Ee-=1;return}const A=io.shift();if(A){A(t);return}no.push(t)}async function It(t){const A=await Du();try{return await t(A)}finally{Mu(A)}}class ro extends sA.Loader{constructor(A){super(A),this.fileLoader=new sA.FileLoader(A)}load(A,e,s,n){const i=this.manager.resolveURL((this.path??"")+(A??"")),r=new Headers(this.requestHeader),a=this.withCredentials?"include":"same-origin",o=new Request(i,{headers:r,credentials:a});let c=this.fileType;this.manager.itemStart(i),fs(o,s).then(async l=>{var Q;const g=[new ProgressEvent("progress",{lengthComputable:!0,loaded:l.byteLength,total:l.byteLength})];function I(){if(s){const E=g.every(d=>d.lengthComputable||d.loaded===0&&d.total===0),f=g.reduce((d,w)=>d+w.loaded,0),p=g.reduce((d,w)=>d+w.total,0);s(new ProgressEvent("progress",{lengthComputable:E,loaded:f,total:p}))}}const h={},B=[],C=gs(l);if(c==="pcsogs"&&C===void 0)throw new Error("Invalid PC SOGS file");if(C!==void 0){c="pcsogs";for(const E of["means","scales","quats","sh0","shN"]){const f=C[E];if(f)for(const p of f.files){const d=new URL(p,i).toString(),w=g.length;g.push(new ProgressEvent("progress")),this.manager.itemStart(d);const D=new Request(d,{headers:r,credentials:a}),x=fs(D,y=>{g[w]=y,I()}).then(y=>{h[p]=y}).catch(y=>{throw this.manager.itemError(d),y}).finally(()=>{this.manager.itemEnd(d)});B.push(x)}}}if(await Promise.all(B),e){const E=((Q=this.packedSplats)==null?void 0:Q.splatEncoding)??xe,f=await cs({input:l,extraFiles:h,fileType:c,pathOrUrl:i,splatEncoding:E});this.packedSplats?(this.packedSplats.initialize(f),e(this.packedSplats)):e(new LA(f))}}).catch(l=>{this.manager.itemError(i),n==null||n(l)}).finally(()=>{this.manager.itemEnd(i)})}async loadAsync(A,e){return new Promise((s,n)=>{this.load(A,i=>{s(i)},e,n)})}parse(A){return new VA({packedSplats:A})}}async function fs(t,A){const e=await fetch(t);if(!e.ok)throw new Error(`${e.status} "${e.statusText}" fetching URL: ${t.url}`);if(!e.body)throw new Error(`Response body is null for URL: ${t.url}`);const s=e.body.getReader(),n=Number.parseInt(e.headers.get("Content-Length")||"0"),i=Number.isNaN(n)?0:n;let r=0;const a=[];for(;;){const{done:l,value:g}=await s.read();if(l)break;a.push(g),r+=g.length,A&&A(new ProgressEvent("progress",{lengthComputable:i!==0,loaded:r,total:i}))}const o=new Uint8Array(r);let c=0;for(const l of a)o.set(l,c),c+=l.length;return o.buffer}var St=(t=>(t.PLY="ply",t.SPZ="spz",t.SPLAT="splat",t.KSPLAT="ksplat",t.PCSOGS="pcsogs",t.PCSOGSZIP="pcsogszip",t))(St||{});function os(t){const A=new DataView(t.buffer);if((A.getUint32(0,!0)&16777215)===7957616)return"ply";if((A.getUint32(0,!0)&16777215)===559903){const e=ei(t,4);return new DataView(e.buffer).getUint32(0,!0)===1347635022?"spz":void 0}if(A.getUint32(0,!0)===67324752)return Fu(t)?"pcsogszip":void 0}function vu(t){const A=t.split(/[?#]/,1)[0],e=Math.max(A.lastIndexOf("/"),A.lastIndexOf("\\")),s=A.slice(e+1),n=s.lastIndexOf(".");return n<=0||n===s.length-1?"":s.slice(n+1).toLowerCase()}function ao(t){const A=vu(t);if(A==="ply")return"ply";if(A==="spz")return"spz";if(A==="splat")return"splat";if(A==="ksplat")return"ksplat"}function bu(t){return gs(t)!==void 0}function gs(t){try{let A;if(typeof t=="string")A=t;else{const s=t instanceof ArrayBuffer?new Uint8Array(t):t;if(s.length>65536)return;A=new TextDecoder().decode(s)}const e=JSON.parse(A);if(!e||typeof e!="object"||Array.isArray(e))return;for(const s of["means","scales","quats","sh0"])if(!e[s]||typeof e[s]!="object"||Array.isArray(e[s])||!e[s].shape||!e[s].files||s!=="quats"&&(!e[s].mins||!e[s].maxs))return;return e}catch{return}}function Fu(t){try{const A=t instanceof ArrayBuffer?new Uint8Array(t):t;let e=null;const s=jo(A,{filter:({name:i})=>i.split(/[\\/]/).pop()==="meta.json"?(e=i,!0):!1});if(!e)return;const n=gs(s[e]);return n?{name:e,json:n}:void 0}catch{return}}async function cs({input:t,extraFiles:A,fileType:e,pathOrUrl:s,splatEncoding:n}){const i=t instanceof ArrayBuffer?new Uint8Array(t):t;let r=e;switch(e||(r=os(i),!r&&s&&(r=ao(s))),r){case"ply":{const a=new Ot({fileBytes:i});await a.parseHeader();const o=a.numSplats,c=xA(o).maxSplats,l={fileBytes:i,packedArray:new Uint32Array(c*4),splatEncoding:n};return await It(async g=>{const{packedArray:I,numSplats:h,extra:B}=await g.call("unpackPly",l);return{packedArray:I,numSplats:h,extra:B}})}case"spz":return await It(async a=>{const{packedArray:o,numSplats:c,extra:l}=await a.call("decodeSpz",{fileBytes:i,splatEncoding:n});return{packedArray:o,numSplats:c,extra:l}});case"splat":return await It(async a=>{const{packedArray:o,numSplats:c}=await a.call("decodeAntiSplat",{fileBytes:i,splatEncoding:n});return{packedArray:o,numSplats:c}});case"ksplat":return await It(async a=>{const{packedArray:o,numSplats:c,extra:l}=await a.call("decodeKsplat",{fileBytes:i,splatEncoding:n});return{packedArray:o,numSplats:c,extra:l}});case"pcsogs":return await It(async a=>{const{packedArray:o,numSplats:c,extra:l}=await a.call("decodePcSogs",{fileBytes:i,extraFiles:A,splatEncoding:n});return{packedArray:o,numSplats:c,extra:l}});case"pcsogszip":return await It(async a=>{const{packedArray:o,numSplats:c,extra:l}=await a.call("decodePcSogsZip",{fileBytes:i,splatEncoding:n});return{packedArray:o,numSplats:c,extra:l}});default:throw new Error(`Unknown splat file type: ${r}`)}}class ku{constructor({maxSplats:A=1}={}){this.numSplats=0,this.maxSplats=xA(A).maxSplats,this.centers=new Float32Array(this.maxSplats*3),this.scales=new Float32Array(this.maxSplats*3),this.quaternions=new Float32Array(this.maxSplats*4),this.opacities=new Float32Array(this.maxSplats),this.colors=new Float32Array(this.maxSplats*3)}pushSplat(){const A=this.numSplats;return this.ensureIndex(A),this.numSplats+=1,A}unpushSplat(A){if(A===this.numSplats-1)this.numSplats-=1;else throw new Error("Cannot unpush splat from non-last position")}ensureCapacity(A){if(A>this.maxSplats){const e=Math.max(A,this.maxSplats*2),s=new Float32Array(e*3),n=new Float32Array(e*3),i=new Float32Array(e*4),r=new Float32Array(e),a=new Float32Array(e*3);if(s.set(this.centers),n.set(this.scales),i.set(this.quaternions),r.set(this.opacities),a.set(this.colors),this.centers=s,this.scales=n,this.quaternions=i,this.opacities=r,this.colors=a,this.sh1){const o=new Float32Array(e*9);o.set(this.sh1),this.sh1=o}if(this.sh2){const o=new Float32Array(e*15);o.set(this.sh2),this.sh2=o}if(this.sh3){const o=new Float32Array(e*21);o.set(this.sh3),this.sh3=o}this.maxSplats=e}}ensureIndex(A){this.ensureCapacity(A+1)}setCenter(A,e,s,n){this.centers[A*3]=e,this.centers[A*3+1]=s,this.centers[A*3+2]=n}setScale(A,e,s,n){this.scales[A*3]=e,this.scales[A*3+1]=s,this.scales[A*3+2]=n}setQuaternion(A,e,s,n,i){this.quaternions[A*4]=e,this.quaternions[A*4+1]=s,this.quaternions[A*4+2]=n,this.quaternions[A*4+3]=i}setOpacity(A,e){this.opacities[A]=e}setColor(A,e,s,n){this.colors[A*3]=e,this.colors[A*3+1]=s,this.colors[A*3+2]=n}setSh1(A,e){this.sh1||(this.sh1=new Float32Array(this.maxSplats*9));for(let s=0;s<9;++s)this.sh1[A*9+s]=e[s]}setSh2(A,e){this.sh2||(this.sh2=new Float32Array(this.maxSplats*15));for(let s=0;s<15;++s)this.sh2[A*15+s]=e[s]}setSh3(A,e){this.sh3||(this.sh3=new Float32Array(this.maxSplats*21));for(let s=0;s<21;++s)this.sh3[A*21+s]=e[s]}}var Nu=`precision highp float;
515
515
  precision highp int;
516
516
  precision highp sampler2D;
517
517
  precision highp usampler2D;
@@ -546,7 +546,7 @@ void main() {
546
546
  } else {
547
547
  target = uvec4(0u, 0u, 0u, 0u);
548
548
  }
549
- }`;const xe={rgbMin:0,rgbMax:1,lnScaleMin:kA,lnScaleMax:NA,sh1Min:-1,sh1Max:1,sh2Min:-1,sh2Max:1,sh3Min:-1,sh3Max:1},iA=class iA{constructor(A={}){this.maxSplats=0,this.numSplats=0,this.packedArray=null,this.isInitialized=!1,this.target=null,this.source=null,this.needsUpdate=!0,this.extra={},this.dyno=new ls({packedSplats:this}),this.dynoRgbMinMaxLnScaleMinMax=new Ut({key:"rgbMinMaxLnScaleMinMax",value:new u.Vector4(0,1,kA,NA),update:e=>{var s,n,i,r;return e.set(((s=this.splatEncoding)==null?void 0:s.rgbMin)??0,((n=this.splatEncoding)==null?void 0:n.rgbMax)??1,((i=this.splatEncoding)==null?void 0:i.lnScaleMin)??kA,((r=this.splatEncoding)==null?void 0:r.lnScaleMax)??NA),e}}),this.dynoSh1MinMax=new qt({key:"sh1MinMax",value:new u.Vector2(-1,1),update:e=>{var s,n;return e.set(((s=this.splatEncoding)==null?void 0:s.sh1Min)??-1,((n=this.splatEncoding)==null?void 0:n.sh1Max)??1),e}}),this.dynoSh2MinMax=new qt({key:"sh2MinMax",value:new u.Vector2(-1,1),update:e=>{var s,n;return e.set(((s=this.splatEncoding)==null?void 0:s.sh2Min)??-1,((n=this.splatEncoding)==null?void 0:n.sh2Max)??1),e}}),this.dynoSh3MinMax=new qt({key:"sh3MinMax",value:new u.Vector2(-1,1),update:e=>{var s,n;return e.set(((s=this.splatEncoding)==null?void 0:s.sh3Min)??-1,((n=this.splatEncoding)==null?void 0:n.sh3Max)??1),e}}),this.initialized=Promise.resolve(this),this.reinitialize(A)}reinitialize(A){this.isInitialized=!1,this.extra={},this.splatEncoding=A.splatEncoding,A.url||A.fileBytes||A.construct?this.initialized=this.asyncInitialize(A).then(()=>(this.isInitialized=!0,this)):(this.initialize(A),this.isInitialized=!0,this.initialized=Promise.resolve(this))}initialize(A){A.packedArray?(this.packedArray=A.packedArray,this.maxSplats=Math.floor(this.packedArray.length/4),this.maxSplats=Math.floor(this.maxSplats/X)*X,this.numSplats=Math.min(this.maxSplats,A.numSplats??Number.POSITIVE_INFINITY)):(this.maxSplats=A.maxSplats??0,this.numSplats=0),this.extra=A.extra??{}}async asyncInitialize(A){const{url:e,fileBytes:s,construct:n}=A;if(e){const i=new ro;i.packedSplats=this,await i.loadAsync(e)}else if(s){const i=await cs({input:s,fileType:A.fileType,pathOrUrl:A.fileName??e,splatEncoding:A.splatEncoding??xe});this.initialize(i)}if(n){const i=n(this);i instanceof Promise&&await i}}dispose(){this.target&&(this.target.dispose(),this.target=null),this.source&&(this.source.dispose(),this.source=null)}ensureSplats(A){const e=A<=this.maxSplats?this.maxSplats:Math.max(A,2*this.maxSplats),s=this.packedArray?this.packedArray.length/4:0;if(!this.packedArray||e>s){this.maxSplats=xA(e).maxSplats;const n=new Uint32Array(this.maxSplats*4);this.packedArray&&n.set(this.packedArray),this.packedArray=n}return this.packedArray}ensureSplatsSh(A,e){let s,n;if(A===0)return this.ensureSplats(e);if(A===1)s=2,n="sh1";else if(A===2)s=4,n="sh2";else if(A===3)s=4,n="sh3";else throw new Error(`Invalid level: ${A}`);let i=this.extra[n]?this.extra[n].length/s:0;const r=e<=i?i:Math.max(e,2*i);if(!this.extra[n]||r>i){i=xA(r).maxSplats;const a=new Uint32Array(i*s);this.extra[n]&&a.set(this.extra[n]),this.extra[n]=a}return this.extra[n]}getSplat(A){if(!this.packedArray||A>=this.numSplats)throw new Error("Invalid index");return Be(this.packedArray,A,this.splatEncoding)}setSplat(A,e,s,n,i,r){const a=this.ensureSplats(A+1);Ce(a,A,e.x,e.y,e.z,s.x,s.y,s.z,n.x,n.y,n.z,n.w,i,r.r,r.g,r.b),this.numSplats=Math.max(this.numSplats,A+1)}pushSplat(A,e,s,n,i){const r=this.ensureSplats(this.numSplats+1);Ce(r,this.numSplats,A.x,A.y,A.z,e.x,e.y,e.z,s.x,s.y,s.z,s.w,n,i.r,i.g,i.b),++this.numSplats}forEachSplat(A){if(!(!this.packedArray||!this.numSplats))for(let e=0;e<this.numSplats;++e){const s=Be(this.packedArray,e,this.splatEncoding);A(e,s.center,s.scales,s.quaternion,s.opacity,s.color)}}ensureGenerate(A){if(this.target&&(A??1)<=this.maxSplats)return!1;this.dispose();const e=xA(A??1),{width:s,height:n,depth:i}=e;return this.maxSplats=e.maxSplats,this.target=new u.WebGLArrayRenderTarget(s,n,i,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:u.NearestFilter,minFilter:u.NearestFilter}),this.target.texture.format=u.RGBAIntegerFormat,this.target.texture.type=u.UnsignedIntType,this.target.texture.internalFormat="RGBA32UI",this.target.scissorTest=!0,!0}generateMapping(A){let e=0;const s=A.map(n=>{const i=e,r=Math.ceil(n/X)*X;return e+=r,{base:i,count:n}});return{maxSplats:e,mapping:s}}getTexture(){return this.target?this.target.texture:this.source||this.packedArray?this.maybeUpdateSource():iA.getEmpty()}maybeUpdateSource(){if(!this.packedArray)throw new Error("No packed splats");if(this.needsUpdate||!this.source){if(this.needsUpdate=!1,this.source){const{width:A,height:e,depth:s}=this.source.image;this.maxSplats!==A*e*s&&(this.source.dispose(),this.source=null)}if(this.source)this.packedArray.buffer!==this.source.image.data.buffer&&(this.source.image.data=new Uint8Array(this.packedArray.buffer));else{const{width:A,height:e,depth:s}=xA(this.maxSplats);this.source=new u.DataArrayTexture(this.packedArray,A,e,s),this.source.format=u.RGBAIntegerFormat,this.source.type=u.UnsignedIntType,this.source.internalFormat="RGBA32UI",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}static getEmpty(){if(!iA.emptySource){const{width:A,height:e,depth:s,maxSplats:n}=xA(1),i=new Uint32Array(n*4);iA.emptySource=new u.DataArrayTexture(i,A,e,s),iA.emptySource.format=u.RGBAIntegerFormat,iA.emptySource.type=u.UnsignedIntType,iA.emptySource.internalFormat="RGBA32UI",iA.emptySource.needsUpdate=!0}return iA.emptySource}prepareProgramMaterial(A){let e=iA.generatorProgram.get(A);if(!e){const n=bA({index:"int"},{output:"uvec4"},({index:i})=>{A.inputs.index=i;const r=A.outputs.gsplat;return{output:tn(r,this.dynoRgbMinMaxLnScaleMinMax)}});iA.programTemplate||(iA.programTemplate=new ns(Nu)),e=new ss({graph:n,inputs:{index:"index"},outputs:{output:"target"},template:iA.programTemplate}),Object.assign(e.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),iA.generatorProgram.set(A,e)}const s=e.prepareMaterial();return iA.fullScreenQuad.material=s,{program:e,material:s}}saveRenderState(A){return{xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,e){A.setRenderTarget(null),A.xr.enabled=e.xrEnabled,A.autoClear=e.autoClear}generate({generator:A,base:e,count:s,renderer:n}){if(!this.target)throw new Error("Target must be initialized with ensureSplats");if(e+s>this.maxSplats)throw new Error("Base + count exceeds maxSplats");const{program:i,material:r}=this.prepareProgramMaterial(A);i.update();const a=this.saveRenderState(n),o=Math.ceil((e+s)/X)*X,c=X*HA;for(r.uniforms.targetBase.value=e,r.uniforms.targetCount.value=s;e<o;){const l=Math.floor(e/c);r.uniforms.targetLayer.value=l;const g=l*c,I=Math.floor((e-g)/X),h=Math.min(HA,Math.ceil((o-g)/X));this.target.scissor.set(0,I,X,h-I),n.setRenderTarget(this.target,l),n.xr.enabled=!1,n.autoClear=!1,iA.fullScreenQuad.render(n),e+=X*(h-I)}return this.resetRenderState(n,a),{nextBase:o}}};iA.emptySource=null,iA.programTemplate=null,iA.generatorProgram=new Map,iA.fullScreenQuad=new ws(new u.RawShaderMaterial({visible:!1}));let _A=iA;class ls extends k{constructor({packedSplats:A}={}){super({key:"packedSplats",type:se,globals:()=>[ye],value:{texture:_A.getEmpty(),numSplats:0,rgbMinMaxLnScaleMinMax:new u.Vector4(0,1,kA,NA)},update:e=>{var s,n,i,r,a,o,c,l,g,I;return e.texture=((s=this.packedSplats)==null?void 0:s.getTexture())??_A.getEmpty(),e.numSplats=((n=this.packedSplats)==null?void 0:n.numSplats)??0,e.rgbMinMaxLnScaleMinMax.set(((r=(i=this.packedSplats)==null?void 0:i.splatEncoding)==null?void 0:r.rgbMin)??0,((o=(a=this.packedSplats)==null?void 0:a.splatEncoding)==null?void 0:o.rgbMax)??1,((l=(c=this.packedSplats)==null?void 0:c.splatEncoding)==null?void 0:l.lnScaleMin)??kA,((I=(g=this.packedSplats)==null?void 0:g.splatEncoding)==null?void 0:I.lnScaleMax)??NA),e}}),this.packedSplats=A}}class Ve extends u.InstancedBufferGeometry{constructor(A,e){super(),this.ordering=A,this.setAttribute("position",new u.BufferAttribute(Tu,3)),this.setIndex(new u.BufferAttribute(Uu,1)),this._maxInstanceCount=A.length,this.instanceCount=e,this.attribute=new u.InstancedBufferAttribute(A,1,!1,1),this.attribute.setUsage(u.DynamicDrawUsage),this.setAttribute("splatIndex",this.attribute)}update(A,e){this.ordering=A,this.attribute.array=A,this.instanceCount=e,this.attribute.addUpdateRange(0,e),this.attribute.needsUpdate=!0}}const Tu=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]),Uu=new Uint16Array([0,1,2,0,2,3]),nt=class nt{constructor(A){if(this.lastTime=null,this.encodeLinear=!1,this.superXY=1,this.display=null,this.sorting=null,this.pending=null,this.sortingCheck=!1,this.readback16=new Uint16Array(0),this.readback32=new Uint32Array(0),this.spark=A.spark,this.camera=A.camera,this.viewToWorld=A.viewToWorld??new u.Matrix4,A.target){const{width:e,height:s,doubleBuffer:n}=A.target,i=Math.max(1,Math.min(4,A.target.superXY??1));if(this.superXY=i,e*i>8192||s*i>8192)throw new Error("Target size too large");this.target=new u.WebGLRenderTarget(e*i,s*i,{format:u.RGBAFormat,type:u.UnsignedByteType,colorSpace:u.SRGBColorSpace}),n&&(this.back=new u.WebGLRenderTarget(e*i,s*i,{format:u.RGBAFormat,type:u.UnsignedByteType,colorSpace:u.SRGBColorSpace})),this.encodeLinear=!0}this.onTextureUpdated=A.onTextureUpdated,this.sortRadial=A.sortRadial??!0,this.sortDistance=A.sortDistance,this.sortCoorient=A.sortCoorient,this.depthBias=A.depthBias,this.sort360=A.sort360,this.sort32=A.sort32,this.orderingFreelist=new qn({allocate:e=>new Uint32Array(e),valid:(e,s)=>e.length===s}),this.autoUpdate=!1,this.setAutoUpdate(A.autoUpdate??!1)}dispose(){var A;this.setAutoUpdate(!1),this.target&&(this.target.dispose(),this.target=void 0),this.back&&(this.back.dispose(),this.back=void 0),this.display&&(this.spark.releaseAccumulator(this.display.accumulator),this.display.geometry.dispose(),this.display=null),(A=this.pending)!=null&&A.accumulator&&(this.spark.releaseAccumulator(this.pending.accumulator),this.pending=null)}setAutoUpdate(A){!this.autoUpdate&&A?this.spark.autoViewpoints.push(this):this.autoUpdate&&!A&&(this.spark.autoViewpoints=this.spark.autoViewpoints.filter(e=>e!==this)),this.autoUpdate=A}async prepare({scene:A,camera:e,viewToWorld:s,update:n,forceOrigin:i}){var a;for(s?this.viewToWorld=s:(this.camera=e??this.camera,this.camera&&(this.camera.updateMatrixWorld(),this.viewToWorld=this.camera.matrixWorld.clone()));n??!0;){const o=i?this.viewToWorld:void 0;if(this.spark.updateInternal({scene:A,originToWorld:o}))break;await new Promise(l=>setTimeout(l,10))}const r=this.spark.active;r!==((a=this.display)==null?void 0:a.accumulator)&&(this.spark.active.refCount+=1),await this.sortUpdate({accumulator:r,viewToWorld:this.viewToWorld})}renderTarget({scene:A,camera:e}){var n;const s=this.back??this.target;if(!s)throw new Error("Must initialize SparkViewpoint with target");if(e=e??this.camera,!e)throw new Error("Must provide camera");if(e instanceof u.PerspectiveCamera){const i=new u.PerspectiveCamera().copy(e,!1);i.aspect=s.width/s.height,i.updateProjectionMatrix(),e=i}this.viewToWorld=e.matrixWorld.clone();try{this.spark.renderer.setRenderTarget(s),this.spark.prepareViewpoint(this),this.spark.renderer.render(A,e)}finally{this.spark.prepareViewpoint(this.spark.defaultView),this.spark.renderer.setRenderTarget(null)}s!==this.target&&([this.target,this.back]=[this.back,this.target]),(n=this.onTextureUpdated)==null||n.call(this,s.texture)}async readTarget(){if(!this.target)throw new Error("Must initialize SparkViewpoint with target");const{width:A,height:e}=this.target,s=A*e*4;(!this.superPixels||this.superPixels.length<s)&&(this.superPixels=new Uint8Array(s)),await this.spark.renderer.readRenderTargetPixelsAsync(this.target,0,0,A,e,this.superPixels);const{superXY:n}=this;if(n===1)return this.superPixels;const i=A/n,r=e/n,a=i*r*4;(!this.pixels||this.pixels.length<a)&&(this.pixels=new Uint8Array(a));const{superPixels:o,pixels:c}=this,l=n*n;for(let g=0;g<r;g++){const I=g*i;for(let h=0;h<i;h++){const B=h*n;let C=0,Q=0,E=0,f=0;for(let d=0;d<n;d++){const w=(g*n+d)*this.target.width;for(let D=0;D<n;D++){const x=(w+B+D)*4;C+=o[x],Q+=o[x+1],E+=o[x+2],f+=o[x+3]}}const p=(I+h)*4;c[p]=C/l,c[p+1]=Q/l,c[p+2]=E/l,c[p+3]=f/l}}return c}async prepareRenderPixels({scene:A,camera:e,viewToWorld:s,update:n,forceOrigin:i}){return await this.prepare({scene:A,camera:e,viewToWorld:s,update:n,forceOrigin:i}),this.renderTarget({scene:A,camera:e}),this.readTarget()}autoPoll({accumulator:A}){var i,r,a,o;this.camera&&(this.camera.updateMatrixWorld(),this.viewToWorld=this.camera.matrixWorld.clone());let e=!1,s=!1;if(!this.display)e=!0;else if(A){e=!0;const{mappingVersion:c}=this.display.accumulator;A.mappingVersion===c&&(this.spark.releaseAccumulator(this.display.accumulator),this.display.accumulator=A,s=!0)}const n=((i=this.sorting)==null?void 0:i.viewToWorld)??((r=this.display)==null?void 0:r.viewToWorld);n&&!Qe({matrix1:this.viewToWorld,matrix2:n,maxDistance:this.sortDistance??.01,minCoorient:this.sortCoorient??this.sortRadial?.99:.999})&&(e=!0),e&&(A&&(A.refCount+=1),A&&((a=this.pending)!=null&&a.accumulator)&&this.pending.accumulator!==((o=this.display)==null?void 0:o.accumulator)&&this.spark.releaseAccumulator(this.pending.accumulator),this.pending={accumulator:A,viewToWorld:this.viewToWorld,displayed:s},this.driveSort())}async driveSort(){var A;for(;;){if(this.sorting||!this.pending)return;const{viewToWorld:e,displayed:s}=this.pending;let n=this.pending.accumulator??((A=this.display)==null?void 0:A.accumulator);if(n||(n=this.spark.active,n.refCount+=1),this.pending=null,!n)throw new Error("No accumulator to sort");this.sorting={viewToWorld:e},await this.sortUpdate({accumulator:n,viewToWorld:e,displayed:s}),this.sorting=null}}async sortUpdate({accumulator:A,viewToWorld:e,displayed:s=!1}){if(this.sortingCheck)throw new Error("Only one sort at a time");this.sortingCheck=!0,A=A??this.spark.active;const{numSplats:n,maxSplats:i}=A.splats;let r=0,a=this.orderingFreelist.alloc(i);if(n>0){const{reader:o,doubleSortReader:c,sort32Reader:l,dynoSortRadial:g,dynoOrigin:I,dynoDirection:h,dynoDepthBias:B,dynoSort360:C,dynoSplats:Q}=nt.makeSorter(),E=this.sort32??!1;let f;if(E)this.readback32=o.ensureBuffer(i,this.readback32),f=this.readback32;else{const y=Math.ceil(i/2);this.readback16=o.ensureBuffer(y,this.readback16),f=this.readback16}const p=A.toWorld.clone().invert(),d=e.clone().premultiply(p);g.value=this.sort360?!0:this.sortRadial,I.value.set(0,0,0).applyMatrix4(d),h.value.set(0,0,-1).applyMatrix4(d).sub(I.value).normalize(),B.value=this.depthBias??1,C.value=this.sort360??!1,Q.packedSplats=A.splats;const w=E?l:c,D=E?n:Math.ceil(n/2);await o.renderReadback({renderer:this.spark.renderer,reader:w,count:D,readback:f});const x=await It(async y=>{const m=E?"sort32Splats":"sortDoubleSplats";return y.call(m,{maxSplats:i,numSplats:n,readback:f,ordering:a})});E?this.readback32=x.readback:this.readback16=x.readback,a=x.ordering,r=x.activeSplats}this.updateDisplay({accumulator:A,viewToWorld:e,ordering:a,activeSplats:r,displayed:s}),this.sortingCheck=!1}updateDisplay({accumulator:A,viewToWorld:e,ordering:s,activeSplats:n,displayed:i=!1}){if(!this.display)this.display={accumulator:A,viewToWorld:e,geometry:new Ve(s,n)};else{!i&&A!==this.display.accumulator&&(this.spark.releaseAccumulator(this.display.accumulator),this.display.accumulator=A),this.display.viewToWorld=e;const r=this.display.geometry.ordering;r.length===s.length?this.display.geometry.update(s,n):(this.display.geometry.dispose(),this.display.geometry=new Ve(s,n)),this.orderingFreelist.free(r)}this.spark.viewpoint===this&&this.spark.prepareViewpoint(this)}static makeSorter(){if(!nt.dynos){const A=new he({value:!0}),e=new Ft({value:new u.Vector3}),s=new Ft({value:new u.Vector3}),n=new Bt({value:1}),i=new he({value:!1}),r=new ls,a=new Pt,o=bA({index:"int"},{rgba8:"vec4"},({index:l})=>{if(!l)throw new Error("No index");const g={sortRadial:A,sortOrigin:e,sortDirection:s,sortDepthBias:n,sort360:i},I=rA(l,J("int",2)),h=bt(r,I),B=Re({gsplat:h,...g}),C=bt(r,BA(I,J("int",1))),Q=Re({gsplat:C,...g}),E=KA({vectorType:"vec2",x:B,y:Q});return{rgba8:qe(ar(E))}}),c=bA({index:"int"},{rgba8:"vec4"},({index:l})=>{if(!l)throw new Error("No index");const g={sortRadial:A,sortOrigin:e,sortDirection:s,sortDepthBias:n,sort360:i},I=bt(r,l),h=Re({gsplat:I,...g});return{rgba8:qe(rr(h))}});nt.dynos={dynoSortRadial:A,dynoOrigin:e,dynoDirection:s,dynoDepthBias:n,dynoSort360:i,dynoSplats:r,reader:a,doubleSortReader:o,sort32Reader:c}}return nt.dynos}};nt.EMPTY_TEXTURE=new u.Texture,nt.dynos=null;let Wt=nt;const Gu=hA(`
549
+ }`;const xe={rgbMin:0,rgbMax:1,lnScaleMin:kA,lnScaleMax:NA,sh1Min:-1,sh1Max:1,sh2Min:-1,sh2Max:1,sh3Min:-1,sh3Max:1},iA=class iA{constructor(A={}){this.maxSplats=0,this.numSplats=0,this.packedArray=null,this.isInitialized=!1,this.target=null,this.source=null,this.needsUpdate=!0,this.extra={},this.dyno=new ls({packedSplats:this}),this.dynoRgbMinMaxLnScaleMinMax=new Ut({key:"rgbMinMaxLnScaleMinMax",value:new u.Vector4(0,1,kA,NA),update:e=>{var s,n,i,r;return e.set(((s=this.splatEncoding)==null?void 0:s.rgbMin)??0,((n=this.splatEncoding)==null?void 0:n.rgbMax)??1,((i=this.splatEncoding)==null?void 0:i.lnScaleMin)??kA,((r=this.splatEncoding)==null?void 0:r.lnScaleMax)??NA),e}}),this.dynoSh1MinMax=new qt({key:"sh1MinMax",value:new u.Vector2(-1,1),update:e=>{var s,n;return e.set(((s=this.splatEncoding)==null?void 0:s.sh1Min)??-1,((n=this.splatEncoding)==null?void 0:n.sh1Max)??1),e}}),this.dynoSh2MinMax=new qt({key:"sh2MinMax",value:new u.Vector2(-1,1),update:e=>{var s,n;return e.set(((s=this.splatEncoding)==null?void 0:s.sh2Min)??-1,((n=this.splatEncoding)==null?void 0:n.sh2Max)??1),e}}),this.dynoSh3MinMax=new qt({key:"sh3MinMax",value:new u.Vector2(-1,1),update:e=>{var s,n;return e.set(((s=this.splatEncoding)==null?void 0:s.sh3Min)??-1,((n=this.splatEncoding)==null?void 0:n.sh3Max)??1),e}}),this.initialized=Promise.resolve(this),this.reinitialize(A)}reinitialize(A){this.isInitialized=!1,this.extra={},this.splatEncoding=A.splatEncoding,A.url||A.fileBytes||A.construct?this.initialized=this.asyncInitialize(A).then(()=>(this.isInitialized=!0,this)):(this.initialize(A),this.isInitialized=!0,this.initialized=Promise.resolve(this))}initialize(A){A.packedArray?(this.packedArray=A.packedArray,this.maxSplats=Math.floor(this.packedArray.length/4),this.maxSplats=Math.floor(this.maxSplats/X)*X,this.numSplats=Math.min(this.maxSplats,A.numSplats??Number.POSITIVE_INFINITY)):(this.maxSplats=A.maxSplats??0,this.numSplats=0),this.extra=A.extra??{}}async asyncInitialize(A){const{url:e,fileBytes:s,construct:n}=A;if(e){const i=new ro;i.packedSplats=this,await i.loadAsync(e)}else if(s){const i=await cs({input:s,fileType:A.fileType,pathOrUrl:A.fileName??e,splatEncoding:A.splatEncoding??xe});this.initialize(i)}if(n){const i=n(this);i instanceof Promise&&await i}}dispose(){this.target&&(this.target.dispose(),this.target=null),this.source&&(this.source.dispose(),this.source=null)}ensureSplats(A){const e=A<=this.maxSplats?this.maxSplats:Math.max(A,2*this.maxSplats),s=this.packedArray?this.packedArray.length/4:0;if(!this.packedArray||e>s){this.maxSplats=xA(e).maxSplats;const n=new Uint32Array(this.maxSplats*4);this.packedArray&&n.set(this.packedArray),this.packedArray=n}return this.packedArray}ensureSplatsSh(A,e){let s,n;if(A===0)return this.ensureSplats(e);if(A===1)s=2,n="sh1";else if(A===2)s=4,n="sh2";else if(A===3)s=4,n="sh3";else throw new Error(`Invalid level: ${A}`);let i=this.extra[n]?this.extra[n].length/s:0;const r=e<=i?i:Math.max(e,2*i);if(!this.extra[n]||r>i){i=xA(r).maxSplats;const a=new Uint32Array(i*s);this.extra[n]&&a.set(this.extra[n]),this.extra[n]=a}return this.extra[n]}getSplat(A){if(!this.packedArray||A>=this.numSplats)throw new Error("Invalid index");return Be(this.packedArray,A,this.splatEncoding)}setSplat(A,e,s,n,i,r){const a=this.ensureSplats(A+1);Ce(a,A,e.x,e.y,e.z,s.x,s.y,s.z,n.x,n.y,n.z,n.w,i,r.r,r.g,r.b),this.numSplats=Math.max(this.numSplats,A+1)}pushSplat(A,e,s,n,i){const r=this.ensureSplats(this.numSplats+1);Ce(r,this.numSplats,A.x,A.y,A.z,e.x,e.y,e.z,s.x,s.y,s.z,s.w,n,i.r,i.g,i.b),++this.numSplats}forEachSplat(A){if(!(!this.packedArray||!this.numSplats))for(let e=0;e<this.numSplats;++e){const s=Be(this.packedArray,e,this.splatEncoding);A(e,s.center,s.scales,s.quaternion,s.opacity,s.color)}}ensureGenerate(A){if(this.target&&(A??1)<=this.maxSplats)return!1;this.dispose();const e=xA(A??1),{width:s,height:n,depth:i}=e;return this.maxSplats=e.maxSplats,this.target=new u.WebGLArrayRenderTarget(s,n,i,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:u.NearestFilter,minFilter:u.NearestFilter}),this.target.texture.format=u.RGBAIntegerFormat,this.target.texture.type=u.UnsignedIntType,this.target.texture.internalFormat="RGBA32UI",this.target.scissorTest=!0,!0}generateMapping(A){let e=0;const s=A.map(n=>{const i=e,r=Math.ceil(n/X)*X;return e+=r,{base:i,count:n}});return{maxSplats:e,mapping:s}}getTexture(){return this.target?this.target.texture:this.source||this.packedArray?this.maybeUpdateSource():iA.getEmpty()}maybeUpdateSource(){if(!this.packedArray)throw new Error("No packed splats");if(this.needsUpdate||!this.source){if(this.needsUpdate=!1,this.source){const{width:A,height:e,depth:s}=this.source.image;this.maxSplats!==A*e*s&&(this.source.dispose(),this.source=null)}if(this.source)this.packedArray.buffer!==this.source.image.data.buffer&&(this.source.image.data=new Uint8Array(this.packedArray.buffer));else{const{width:A,height:e,depth:s}=xA(this.maxSplats);this.source=new u.DataArrayTexture(this.packedArray,A,e,s),this.source.format=u.RGBAIntegerFormat,this.source.type=u.UnsignedIntType,this.source.internalFormat="RGBA32UI",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}static getEmpty(){if(!iA.emptySource){const{width:A,height:e,depth:s,maxSplats:n}=xA(1),i=new Uint32Array(n*4);iA.emptySource=new u.DataArrayTexture(i,A,e,s),iA.emptySource.format=u.RGBAIntegerFormat,iA.emptySource.type=u.UnsignedIntType,iA.emptySource.internalFormat="RGBA32UI",iA.emptySource.needsUpdate=!0}return iA.emptySource}prepareProgramMaterial(A){let e=iA.generatorProgram.get(A);if(!e){const n=bA({index:"int"},{output:"uvec4"},({index:i})=>{A.inputs.index=i;const r=A.outputs.gsplat;return{output:tn(r,this.dynoRgbMinMaxLnScaleMinMax)}});iA.programTemplate||(iA.programTemplate=new ns(Nu)),e=new ss({graph:n,inputs:{index:"index"},outputs:{output:"target"},template:iA.programTemplate}),Object.assign(e.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),iA.generatorProgram.set(A,e)}const s=e.prepareMaterial();return iA.fullScreenQuad.material=s,{program:e,material:s}}saveRenderState(A){return{xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,e){A.setRenderTarget(null),A.xr.enabled=e.xrEnabled,A.autoClear=e.autoClear}generate({generator:A,base:e,count:s,renderer:n}){if(!this.target)throw new Error("Target must be initialized with ensureSplats");if(e+s>this.maxSplats)throw new Error("Base + count exceeds maxSplats");const{program:i,material:r}=this.prepareProgramMaterial(A);i.update();const a=this.saveRenderState(n),o=Math.ceil((e+s)/X)*X,c=X*HA;for(r.uniforms.targetBase.value=e,r.uniforms.targetCount.value=s;e<o;){const l=Math.floor(e/c);r.uniforms.targetLayer.value=l;const g=l*c,I=Math.floor((e-g)/X),h=Math.min(HA,Math.ceil((o-g)/X));this.target.scissor.set(0,I,X,h-I),n.setRenderTarget(this.target,l),n.xr.enabled=!1,n.autoClear=!1,iA.fullScreenQuad.render(n),e+=X*(h-I)}return this.resetRenderState(n,a),{nextBase:o}}};iA.emptySource=null,iA.programTemplate=null,iA.generatorProgram=new Map,iA.fullScreenQuad=new ws(new u.RawShaderMaterial({visible:!1}));let LA=iA;class ls extends k{constructor({packedSplats:A}={}){super({key:"packedSplats",type:se,globals:()=>[ye],value:{texture:LA.getEmpty(),numSplats:0,rgbMinMaxLnScaleMinMax:new u.Vector4(0,1,kA,NA)},update:e=>{var s,n,i,r,a,o,c,l,g,I;return e.texture=((s=this.packedSplats)==null?void 0:s.getTexture())??LA.getEmpty(),e.numSplats=((n=this.packedSplats)==null?void 0:n.numSplats)??0,e.rgbMinMaxLnScaleMinMax.set(((r=(i=this.packedSplats)==null?void 0:i.splatEncoding)==null?void 0:r.rgbMin)??0,((o=(a=this.packedSplats)==null?void 0:a.splatEncoding)==null?void 0:o.rgbMax)??1,((l=(c=this.packedSplats)==null?void 0:c.splatEncoding)==null?void 0:l.lnScaleMin)??kA,((I=(g=this.packedSplats)==null?void 0:g.splatEncoding)==null?void 0:I.lnScaleMax)??NA),e}}),this.packedSplats=A}}class $e extends u.InstancedBufferGeometry{constructor(A,e){super(),this.ordering=A,this.setAttribute("position",new u.BufferAttribute(Tu,3)),this.setIndex(new u.BufferAttribute(Uu,1)),this._maxInstanceCount=A.length,this.instanceCount=e,this.attribute=new u.InstancedBufferAttribute(A,1,!1,1),this.attribute.setUsage(u.DynamicDrawUsage),this.setAttribute("splatIndex",this.attribute)}update(A,e){this.ordering=A,this.attribute.array=A,this.instanceCount=e,this.attribute.addUpdateRange(0,e),this.attribute.needsUpdate=!0}}const Tu=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]),Uu=new Uint16Array([0,1,2,0,2,3]),nt=class nt{constructor(A){if(this.lastTime=null,this.encodeLinear=!1,this.superXY=1,this.display=null,this.sorting=null,this.pending=null,this.sortingCheck=!1,this.readback16=new Uint16Array(0),this.readback32=new Uint32Array(0),this.spark=A.spark,this.camera=A.camera,this.viewToWorld=A.viewToWorld??new u.Matrix4,A.target){const{width:e,height:s,doubleBuffer:n}=A.target,i=Math.max(1,Math.min(4,A.target.superXY??1));if(this.superXY=i,e*i>8192||s*i>8192)throw new Error("Target size too large");this.target=new u.WebGLRenderTarget(e*i,s*i,{format:u.RGBAFormat,type:u.UnsignedByteType,colorSpace:u.SRGBColorSpace}),n&&(this.back=new u.WebGLRenderTarget(e*i,s*i,{format:u.RGBAFormat,type:u.UnsignedByteType,colorSpace:u.SRGBColorSpace})),this.encodeLinear=!0}this.onTextureUpdated=A.onTextureUpdated,this.sortRadial=A.sortRadial??!0,this.sortDistance=A.sortDistance,this.sortCoorient=A.sortCoorient,this.depthBias=A.depthBias,this.sort360=A.sort360,this.sort32=A.sort32,this.stochastic=A.stochastic??!1,this.orderingFreelist=new qn({allocate:e=>new Uint32Array(e),valid:(e,s)=>e.length===s}),this.autoUpdate=!1,this.setAutoUpdate(A.autoUpdate??!1)}dispose(){var A;this.setAutoUpdate(!1),this.target&&(this.target.dispose(),this.target=void 0),this.back&&(this.back.dispose(),this.back=void 0),this.display&&(this.spark.releaseAccumulator(this.display.accumulator),this.display.geometry.dispose(),this.display=null),(A=this.pending)!=null&&A.accumulator&&(this.spark.releaseAccumulator(this.pending.accumulator),this.pending=null)}setAutoUpdate(A){!this.autoUpdate&&A?this.spark.autoViewpoints.push(this):this.autoUpdate&&!A&&(this.spark.autoViewpoints=this.spark.autoViewpoints.filter(e=>e!==this)),this.autoUpdate=A}async prepare({scene:A,camera:e,viewToWorld:s,update:n,forceOrigin:i}){var a;for(s?this.viewToWorld=s:(this.camera=e??this.camera,this.camera&&(this.camera.updateMatrixWorld(),this.viewToWorld=this.camera.matrixWorld.clone()));n??!0;){const o=i?this.viewToWorld:void 0;if(this.spark.updateInternal({scene:A,originToWorld:o}))break;await new Promise(l=>setTimeout(l,10))}const r=this.spark.active;r!==((a=this.display)==null?void 0:a.accumulator)&&(this.spark.active.refCount+=1),await this.sortUpdate({accumulator:r,viewToWorld:this.viewToWorld})}renderTarget({scene:A,camera:e}){var n;const s=this.back??this.target;if(!s)throw new Error("Must initialize SparkViewpoint with target");if(e=e??this.camera,!e)throw new Error("Must provide camera");if(e instanceof u.PerspectiveCamera){const i=new u.PerspectiveCamera().copy(e,!1);i.aspect=s.width/s.height,i.updateProjectionMatrix(),e=i}this.viewToWorld=e.matrixWorld.clone();try{this.spark.renderer.setRenderTarget(s),this.spark.prepareViewpoint(this),this.spark.renderer.render(A,e)}finally{this.spark.prepareViewpoint(this.spark.defaultView),this.spark.renderer.setRenderTarget(null)}s!==this.target&&([this.target,this.back]=[this.back,this.target]),(n=this.onTextureUpdated)==null||n.call(this,s.texture)}async readTarget(){if(!this.target)throw new Error("Must initialize SparkViewpoint with target");const{width:A,height:e}=this.target,s=A*e*4;(!this.superPixels||this.superPixels.length<s)&&(this.superPixels=new Uint8Array(s)),await this.spark.renderer.readRenderTargetPixelsAsync(this.target,0,0,A,e,this.superPixels);const{superXY:n}=this;if(n===1)return this.superPixels;const i=A/n,r=e/n,a=i*r*4;(!this.pixels||this.pixels.length<a)&&(this.pixels=new Uint8Array(a));const{superPixels:o,pixels:c}=this,l=n*n;for(let g=0;g<r;g++){const I=g*i;for(let h=0;h<i;h++){const B=h*n;let C=0,Q=0,E=0,f=0;for(let d=0;d<n;d++){const w=(g*n+d)*this.target.width;for(let D=0;D<n;D++){const x=(w+B+D)*4;C+=o[x],Q+=o[x+1],E+=o[x+2],f+=o[x+3]}}const p=(I+h)*4;c[p]=C/l,c[p+1]=Q/l,c[p+2]=E/l,c[p+3]=f/l}}return c}async prepareRenderPixels({scene:A,camera:e,viewToWorld:s,update:n,forceOrigin:i}){return await this.prepare({scene:A,camera:e,viewToWorld:s,update:n,forceOrigin:i}),this.renderTarget({scene:A,camera:e}),this.readTarget()}autoPoll({accumulator:A}){var i,r,a,o;this.camera&&(this.camera.updateMatrixWorld(),this.viewToWorld=this.camera.matrixWorld.clone());let e=!1,s=!1;if(!this.display)e=!0;else if(A){e=!0;const{mappingVersion:c}=this.display.accumulator;A.mappingVersion===c&&(this.spark.releaseAccumulator(this.display.accumulator),this.display.accumulator=A,s=!0)}const n=((i=this.sorting)==null?void 0:i.viewToWorld)??((r=this.display)==null?void 0:r.viewToWorld);n&&!Qe({matrix1:this.viewToWorld,matrix2:n,maxDistance:this.sortDistance??.01,minCoorient:this.sortCoorient??this.sortRadial?.99:.999})&&(e=!0),e&&(A&&(A.refCount+=1),A&&((a=this.pending)!=null&&a.accumulator)&&this.pending.accumulator!==((o=this.display)==null?void 0:o.accumulator)&&this.spark.releaseAccumulator(this.pending.accumulator),this.pending={accumulator:A,viewToWorld:this.viewToWorld,displayed:s},this.driveSort())}async driveSort(){var A;for(;;){if(this.sorting||!this.pending)return;const{viewToWorld:e,displayed:s}=this.pending;let n=this.pending.accumulator??((A=this.display)==null?void 0:A.accumulator);if(n||(n=this.spark.active,n.refCount+=1),this.pending=null,!n)throw new Error("No accumulator to sort");this.sorting={viewToWorld:e},await this.sortUpdate({accumulator:n,viewToWorld:e,displayed:s}),this.sorting=null}}async sortUpdate({accumulator:A,viewToWorld:e,displayed:s=!1}){if(this.sortingCheck)throw new Error("Only one sort at a time");this.sortingCheck=!0,A=A??this.spark.active;const{numSplats:n,maxSplats:i}=A.splats;let r=0,a=this.orderingFreelist.alloc(i);if(this.stochastic){r=n;for(let o=0;o<n;++o)a[o]=o}else if(n>0){const{reader:o,doubleSortReader:c,sort32Reader:l,dynoSortRadial:g,dynoOrigin:I,dynoDirection:h,dynoDepthBias:B,dynoSort360:C,dynoSplats:Q}=nt.makeSorter(),E=this.sort32??!1;let f;if(E)this.readback32=o.ensureBuffer(i,this.readback32),f=this.readback32;else{const y=Math.ceil(i/2);this.readback16=o.ensureBuffer(y,this.readback16),f=this.readback16}const p=A.toWorld.clone().invert(),d=e.clone().premultiply(p);g.value=this.sort360?!0:this.sortRadial,I.value.set(0,0,0).applyMatrix4(d),h.value.set(0,0,-1).applyMatrix4(d).sub(I.value).normalize(),B.value=this.depthBias??1,C.value=this.sort360??!1,Q.packedSplats=A.splats;const w=E?l:c,D=E?n:Math.ceil(n/2);await o.renderReadback({renderer:this.spark.renderer,reader:w,count:D,readback:f});const x=await It(async y=>{const m=E?"sort32Splats":"sortDoubleSplats";return y.call(m,{maxSplats:i,numSplats:n,readback:f,ordering:a})});E?this.readback32=x.readback:this.readback16=x.readback,a=x.ordering,r=x.activeSplats}this.updateDisplay({accumulator:A,viewToWorld:e,ordering:a,activeSplats:r,displayed:s}),this.sortingCheck=!1}updateDisplay({accumulator:A,viewToWorld:e,ordering:s,activeSplats:n,displayed:i=!1}){if(!this.display)this.display={accumulator:A,viewToWorld:e,geometry:new $e(s,n)};else{!i&&A!==this.display.accumulator&&(this.spark.releaseAccumulator(this.display.accumulator),this.display.accumulator=A),this.display.viewToWorld=e;const r=this.display.geometry.ordering;r.length===s.length?this.display.geometry.update(s,n):(this.display.geometry.dispose(),this.display.geometry=new $e(s,n)),this.orderingFreelist.free(r)}this.spark.viewpoint===this&&this.spark.prepareViewpoint(this)}static makeSorter(){if(!nt.dynos){const A=new he({value:!0}),e=new Ft({value:new u.Vector3}),s=new Ft({value:new u.Vector3}),n=new Bt({value:1}),i=new he({value:!1}),r=new ls,a=new Pt,o=bA({index:"int"},{rgba8:"vec4"},({index:l})=>{if(!l)throw new Error("No index");const g={sortRadial:A,sortOrigin:e,sortDirection:s,sortDepthBias:n,sort360:i},I=rA(l,J("int",2)),h=bt(r,I),B=Re({gsplat:h,...g}),C=bt(r,BA(I,J("int",1))),Q=Re({gsplat:C,...g}),E=KA({vectorType:"vec2",x:B,y:Q});return{rgba8:qe(ar(E))}}),c=bA({index:"int"},{rgba8:"vec4"},({index:l})=>{if(!l)throw new Error("No index");const g={sortRadial:A,sortOrigin:e,sortDirection:s,sortDepthBias:n,sort360:i},I=bt(r,l),h=Re({gsplat:I,...g});return{rgba8:qe(rr(h))}});nt.dynos={dynoSortRadial:A,dynoOrigin:e,dynoDirection:s,dynoDepthBias:n,dynoSort360:i,dynoSplats:r,reader:a,doubleSortReader:o,sort32Reader:c}}return nt.dynos}};nt.EMPTY_TEXTURE=new u.Texture,nt.dynos=null;let Wt=nt;const Gu=hA(`
550
550
  float computeSort(Gsplat gsplat, bool sortRadial, vec3 sortOrigin, vec3 sortDirection, float sortDepthBias, bool sort360) {
551
551
  if (!isGsplatActive(gsplat.flags)) {
552
552
  return INFINITY;
@@ -562,7 +562,7 @@ void main() {
562
562
  }
563
563
  `);function Re({gsplat:t,sortRadial:A,sortOrigin:e,sortDirection:s,sortDepthBias:n,sort360:i}){return ee({inTypes:{gsplat:AA,sortRadial:"bool",sortOrigin:"vec3",sortDirection:"vec3",sortDepthBias:"float",sort360:"bool"},outTypes:{metric:"float"},globals:()=>[FA,Gu],inputs:{gsplat:t,sortRadial:A,sortOrigin:e,sortDirection:s,sortDepthBias:n,sort360:i},statements:({inputs:r,outputs:a})=>{const{gsplat:o,sortRadial:c,sortOrigin:l,sortDirection:g,sortDepthBias:I,sort360:h}=r;return RA(`
564
564
  ${a.metric} = computeSort(${o}, ${c}, ${l}, ${g}, ${I}, ${h});
565
- `)}}).outputs.metric}class Ie{constructor(){this.splats=new _A,this.toWorld=new u.Matrix4,this.mapping=[],this.refCount=0,this.splatsVersion=-1,this.mappingVersion=-1}ensureGenerate(A){this.splats.ensureGenerate(A)&&(this.mapping=[])}generateSplats({renderer:A,modifier:e,generators:s,forceUpdate:n,originToWorld:i}){const r=this.mapping.reduce((c,l)=>(c.set(l.node,l),c),new Map);let a=0,o=0;for(const{node:c,generator:l,version:g,base:I,count:h}of s){const B=r.get(c);if((n||l!==(B==null?void 0:B.generator)||g!==(B==null?void 0:B.version)||I!==(B==null?void 0:B.base)||h!==(B==null?void 0:B.count))&&l&&h>0){const C=e.apply(l);try{this.splats.generate({generator:C,base:I,count:h,renderer:A})}catch(Q){c.generator=void 0,c.generatorError=Q}a+=1}o=Math.max(o,I+h)}return this.splats.numSplats=o,this.toWorld=i,this.mapping=s,a!==0}hasCorrespondence(A){return this.mapping.length!==A.mapping.length?!1:this.mapping.every(({node:e,base:s,count:n},i)=>{const{node:r,base:a,count:o}=A.mapping[i];return e===r&&s===a&&n===o})}}var Ru=`const float LN_SCALE_MIN = -12.0;
565
+ `)}}).outputs.metric}class Ie{constructor(){this.splats=new LA,this.toWorld=new u.Matrix4,this.mapping=[],this.refCount=0,this.splatsVersion=-1,this.mappingVersion=-1}ensureGenerate(A){this.splats.ensureGenerate(A)&&(this.mapping=[])}generateSplats({renderer:A,modifier:e,generators:s,forceUpdate:n,originToWorld:i}){const r=this.mapping.reduce((c,l)=>(c.set(l.node,l),c),new Map);let a=0,o=0;for(const{node:c,generator:l,version:g,base:I,count:h}of s){const B=r.get(c);if((n||l!==(B==null?void 0:B.generator)||g!==(B==null?void 0:B.version)||I!==(B==null?void 0:B.base)||h!==(B==null?void 0:B.count))&&l&&h>0){const C=e.apply(l);try{this.splats.generate({generator:C,base:I,count:h,renderer:A})}catch(Q){c.generator=void 0,c.generatorError=Q}a+=1}o=Math.max(o,I+h)}return this.splats.numSplats=o,this.toWorld=i,this.mapping=s,a!==0}hasCorrespondence(A){return this.mapping.length!==A.mapping.length?!1:this.mapping.every(({node:e,base:s,count:n},i)=>{const{node:r,base:a,count:o}=A.mapping[i];return e===r&&s===a&&n===o})}}var Ru=`const float LN_SCALE_MIN = -12.0;
566
566
  const float LN_SCALE_MAX = 9.0;
567
567
 
568
568
  const uint SPLAT_TEX_WIDTH_BITS = 11u;
@@ -829,8 +829,11 @@ precision highp int;
829
829
  uniform float near;
830
830
  uniform float far;
831
831
  uniform bool encodeLinear;
832
+ uniform float time;
833
+ uniform bool debugFlag;
832
834
  uniform float maxStdDev;
833
835
  uniform float minAlpha;
836
+ uniform bool stochastic;
834
837
  uniform bool disableFalloff;
835
838
  uniform float falloff;
836
839
 
@@ -847,6 +850,7 @@ out vec4 fragColor;
847
850
  in vec4 vRgba;
848
851
  in vec2 vSplatUv;
849
852
  in vec3 vNdc;
853
+ flat in uint vSplatIndex;
850
854
 
851
855
  void main() {
852
856
  vec4 rgba = vRgba;
@@ -889,12 +893,28 @@ void main() {
889
893
  if (encodeLinear) {
890
894
  rgba.rgb = srgbToLinear(rgba.rgb);
891
895
  }
892
-
893
- #ifdef PREMULTIPLIED_ALPHA
894
- fragColor = vec4(rgba.rgb * rgba.a, rgba.a);
895
- #else
896
- fragColor = rgba;
897
- #endif
896
+
897
+ if (stochastic) {
898
+ const bool STEADY = false;
899
+ uint uTime = STEADY ? 0u : floatBitsToUint(time);
900
+ uvec2 coord = uvec2(gl_FragCoord.xy);
901
+ uint state = uTime + 0x9e3779b9u * coord.x + 0x85ebca6bu * coord.y + 0xc2b2ae35u * uint(vSplatIndex);
902
+ state = state * 747796405u + 2891336453u;
903
+ uint hash = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u;
904
+ hash = (hash >> 22u) ^ hash;
905
+ float rand = float(hash) / 4294967296.0;
906
+ if (rand < rgba.a) {
907
+ fragColor = vec4(rgba.rgb, 1.0);
908
+ } else {
909
+ discard;
910
+ }
911
+ } else {
912
+ #ifdef PREMULTIPLIED_ALPHA
913
+ fragColor = vec4(rgba.rgb * rgba.a, rgba.a);
914
+ #else
915
+ fragColor = rgba;
916
+ #endif
917
+ }
898
918
  }`,Ju=`precision highp float;
899
919
  precision highp int;
900
920
  precision highp usampler2DArray;
@@ -906,6 +926,7 @@ attribute uint splatIndex;
906
926
  out vec4 vRgba;
907
927
  out vec2 vSplatUv;
908
928
  out vec3 vNdc;
929
+ flat out uint vSplatIndex;
909
930
 
910
931
  uniform vec2 renderSize;
911
932
  uniform uint numSplats;
@@ -917,6 +938,7 @@ uniform float time;
917
938
  uniform float deltaTime;
918
939
  uniform bool debugFlag;
919
940
  uniform float minAlpha;
941
+ uniform bool stochastic;
920
942
  uniform bool enable2DGS;
921
943
  uniform float blurAmount;
922
944
  uniform float preBlurAmount;
@@ -935,16 +957,25 @@ void main() {
935
957
  if (uint(gl_InstanceID) >= numSplats) {
936
958
  return;
937
959
  }
938
- if (splatIndex == 0xffffffffu) {
939
-
940
- return;
941
- }
942
960
 
943
- ivec3 texCoord = ivec3(
944
- splatIndex & SPLAT_TEX_WIDTH_MASK,
945
- (splatIndex >> SPLAT_TEX_WIDTH_BITS) & SPLAT_TEX_HEIGHT_MASK,
946
- splatIndex >> SPLAT_TEX_LAYER_BITS
947
- );
961
+ ivec3 texCoord;
962
+ if (stochastic) {
963
+ texCoord = ivec3(
964
+ uint(gl_InstanceID) & SPLAT_TEX_WIDTH_MASK,
965
+ (uint(gl_InstanceID) >> SPLAT_TEX_WIDTH_BITS) & SPLAT_TEX_HEIGHT_MASK,
966
+ (uint(gl_InstanceID) >> SPLAT_TEX_LAYER_BITS)
967
+ );
968
+ } else {
969
+ if (splatIndex == 0xffffffffu) {
970
+
971
+ return;
972
+ }
973
+ texCoord = ivec3(
974
+ splatIndex & SPLAT_TEX_WIDTH_MASK,
975
+ (splatIndex >> SPLAT_TEX_WIDTH_BITS) & SPLAT_TEX_HEIGHT_MASK,
976
+ splatIndex >> SPLAT_TEX_LAYER_BITS
977
+ );
978
+ }
948
979
  uvec4 packed = texelFetch(packedSplats, texCoord, 0);
949
980
 
950
981
  vec3 center, scales;
@@ -982,6 +1013,9 @@ void main() {
982
1013
  }
983
1014
 
984
1015
 
1016
+ vSplatIndex = splatIndex;
1017
+
1018
+
985
1019
  vec4 viewQuaternion = quatQuat(renderToViewQuat, quaternion);
986
1020
 
987
1021
  if (enable2DGS && any(zeroScales)) {
@@ -1083,7 +1117,7 @@ void main() {
1083
1117
  vSplatUv = position.xy * maxStdDev;
1084
1118
  vNdc = ndc;
1085
1119
  gl_Position = vec4(ndc.xy * clipCenter.w, clipCenter.zw);
1086
- }`;let Ye=null;function Lu(){return Ye||(u.ShaderChunk.splatDefines=Ru,Ye={splatVertex:Ju,splatFragment:Yu}),Ye}const ps=5;let Pe=!1,Xe=!1,oo;function _u(t){let A=!1;return t instanceof $A?!0:(t.traverse(e=>{A=A||e instanceof $A}),A)}const go=u.Scene.prototype.add;u.Scene.prototype.add=function(t){return Pe=Pe||_u(t),Xe=Xe||t instanceof jt,go.call(this,t),this};const zu=u.Scene.prototype.onBeforeRender;u.Scene.prototype.onBeforeRender=function(t){if(Pe){if(!Xe){const A=oo||new jt({renderer:t});this.add(A)}u.Scene.prototype.onBeforeRender=zu,u.Scene.prototype.add=go}};const gA=class gA extends u.Mesh{constructor(A){const e=gA.makeUniforms(),s=Lu(),n=A.premultipliedAlpha??!0,i=new u.ShaderMaterial({glslVersion:u.GLSL3,vertexShader:s.splatVertex,fragmentShader:s.splatFragment,uniforms:e,premultipliedAlpha:n,transparent:!0,depthTest:!0,depthWrite:!1,side:u.DoubleSide});super(ds,i),this.splatTexture=null,this.autoViewpoints=[],this.rotateToAccumulator=new Ut({value:new u.Quaternion}),this.translateToAccumulator=new Ft({value:new u.Vector3}),this.lastFrame=-1,this.lastUpdateTime=null,this.defaultCameras=[],this.pendingUpdate=null,this.envViewpoint=null,this.frustumCulled=!1,this.renderer=A.renderer,this.material=i,this.uniforms=e;const r=bA({gsplat:AA},{gsplat:AA},({gsplat:a})=>{if(!a)throw new Error("gsplat not defined");return a=As(a,{rotate:this.rotateToAccumulator,translate:this.translateToAccumulator}),{gsplat:a}});this.modifier=new to(r),this.premultipliedAlpha=n,this.autoUpdate=A.autoUpdate??!0,this.preUpdate=A.preUpdate??!1,this.needsUpdate=!1,this.originDistance=A.originDistance??1,this.maxStdDev=A.maxStdDev??Math.sqrt(8),this.maxPixelRadius=A.maxPixelRadius??512,this.minAlpha=A.minAlpha??.5*(1/255),this.enable2DGS=A.enable2DGS??!1,this.preBlurAmount=A.preBlurAmount??0,this.blurAmount=A.blurAmount??.3,this.focalDistance=A.focalDistance??0,this.apertureAngle=A.apertureAngle??0,this.falloff=A.falloff??1,this.clipXY=A.clipXY??1.4,this.focalAdjustment=A.focalAdjustment??1,this.splatEncoding=A.splatEncoding??{...xe},this.active=new Ie,this.accumulatorCount=1,this.freeAccumulators=[];for(let a=0;a<1;++a)this.freeAccumulators.push(new Ie),this.accumulatorCount+=1;this.defaultView=new Wt({...A.view,autoUpdate:!0,spark:this}),this.viewpoint=this.defaultView,this.prepareViewpoint(this.viewpoint),this.clock=A.clock?Xn(A.clock):new u.Clock,oo=this}static makeUniforms(){return{renderSize:{value:new u.Vector2},near:{value:.1},far:{value:1e3},numSplats:{value:0},renderToViewQuat:{value:new u.Quaternion},renderToViewPos:{value:new u.Vector3},maxStdDev:{value:1},maxPixelRadius:{value:512},minAlpha:{value:.00196078431372549},enable2DGS:{value:!1},preBlurAmount:{value:0},blurAmount:{value:.3},focalDistance:{value:0},apertureAngle:{value:0},falloff:{value:1},clipXY:{value:1.4},focalAdjustment:{value:1},splatTexEnable:{value:!1},splatTexture:{type:"t",value:gA.EMPTY_SPLAT_TEXTURE},splatTexMul:{value:new u.Matrix2},splatTexAdd:{value:new u.Vector2},splatTexNear:{value:.1},splatTexFar:{value:1e3},splatTexMid:{value:0},packedSplats:{type:"t",value:_A.getEmpty()},rgbMinMaxLnScaleMinMax:{value:new u.Vector4},time:{value:0},deltaTime:{value:0},encodeLinear:{value:!1},debugFlag:{value:!1}}}canAllocAccumulator(){return this.freeAccumulators.length>0||this.accumulatorCount<ps}maybeAllocAccumulator(){let A=this.freeAccumulators.pop();if(A===void 0){if(this.accumulatorCount>=ps)return null;A=new Ie,this.accumulatorCount+=1}return A.refCount=1,A}releaseAccumulator(A){A.refCount-=1,A.refCount===0&&this.freeAccumulators.push(A)}newViewpoint(A){return new Wt({...A,spark:this})}onBeforeRender(A,e,s){var h,B;const n=this.time??this.clock.getElapsedTime(),i=n-(this.viewpoint.lastTime??n);this.viewpoint.lastTime=n;const r=A.info.render.frame,a=r!==this.lastFrame;this.lastFrame=r;const o=this.viewpoint;if(o===this.defaultView){if(a)if(!A.xr.isPresenting)this.defaultView.viewToWorld=s.matrixWorld.clone(),this.defaultCameras=[this.defaultView.viewToWorld];else{const C=A.xr.getCamera().cameras;this.defaultCameras=C.map(Q=>Q.matrixWorld),this.defaultView.viewToWorld=qu(this.defaultCameras)??new u.Matrix4}this.autoUpdate&&this.update({scene:e,viewToWorld:this.defaultView.viewToWorld})}if(a&&(this.material.premultipliedAlpha!==this.premultipliedAlpha&&(this.material.premultipliedAlpha=this.premultipliedAlpha,this.material.needsUpdate=!0),this.uniforms.time.value=n,this.uniforms.deltaTime.value=i,this.uniforms.debugFlag.value=performance.now()/1e3%2<1),o.target)this.uniforms.renderSize.value.set(o.target.width,o.target.height);else{const C=A.getDrawingBufferSize(this.uniforms.renderSize.value);if(C.x===1&&C.y===1){const Q=(h=A.xr.getSession())==null?void 0:h.renderState.baseLayer;Q&&(C.x=Q.framebufferWidth,C.y=Q.framebufferHeight)}}const c=s;if(this.uniforms.near.value=c.near,this.uniforms.far.value=c.far,this.uniforms.encodeLinear.value=o.encodeLinear,this.uniforms.maxStdDev.value=this.maxStdDev,this.uniforms.maxPixelRadius.value=this.maxPixelRadius,this.uniforms.minAlpha.value=this.minAlpha,this.uniforms.enable2DGS.value=this.enable2DGS,this.uniforms.preBlurAmount.value=this.preBlurAmount,this.uniforms.blurAmount.value=this.blurAmount,this.uniforms.focalDistance.value=this.focalDistance,this.uniforms.apertureAngle.value=this.apertureAngle,this.uniforms.falloff.value=this.falloff,this.uniforms.clipXY.value=this.clipXY,this.uniforms.focalAdjustment.value=this.focalAdjustment,this.splatTexture){const{enable:C,texture:Q,multiply:E,add:f,near:p,far:d,mid:w}=this.splatTexture;C&&Q?(this.uniforms.splatTexEnable.value=!0,this.uniforms.splatTexture.value=Q,E?this.uniforms.splatTexMul.value.fromArray(E.elements):this.uniforms.splatTexMul.value.set(.5/this.maxStdDev,0,0,.5/this.maxStdDev),this.uniforms.splatTexAdd.value.set((f==null?void 0:f.x)??.5,(f==null?void 0:f.y)??.5),this.uniforms.splatTexNear.value=p??this.uniforms.near.value,this.uniforms.splatTexFar.value=d??this.uniforms.far.value,this.uniforms.splatTexMid.value=w??0):(this.uniforms.splatTexEnable.value=!1,this.uniforms.splatTexture.value=gA.EMPTY_SPLAT_TEXTURE)}else this.uniforms.splatTexEnable.value=!1,this.uniforms.splatTexture.value=gA.EMPTY_SPLAT_TEXTURE;const l=((B=o.display)==null?void 0:B.accumulator.toWorld)??new u.Matrix4,g=s.matrixWorld.clone().invert();l.clone().premultiply(g).decompose(this.uniforms.renderToViewPos.value,this.uniforms.renderToViewQuat.value,new u.Vector3)}prepareViewpoint(A){var e,s,n,i;if(this.viewpoint=A??this.viewpoint,this.viewpoint.display){const{accumulator:r,geometry:a}=this.viewpoint.display;this.uniforms.numSplats.value=r.splats.numSplats,this.uniforms.packedSplats.value=r.splats.getTexture(),this.uniforms.rgbMinMaxLnScaleMinMax.value.set(((e=r.splats.splatEncoding)==null?void 0:e.rgbMin)??0,((s=r.splats.splatEncoding)==null?void 0:s.rgbMax)??1,((n=r.splats.splatEncoding)==null?void 0:n.lnScaleMin)??kA,((i=r.splats.splatEncoding)==null?void 0:i.lnScaleMax)??NA),this.geometry=a}else this.uniforms.numSplats.value=0,this.uniforms.packedSplats.value=_A.getEmpty(),this.geometry=ds}update({scene:A,viewToWorld:e}){const s=this.matrixWorld.clone();this.preUpdate?this.updateInternal({scene:A,originToWorld:s,viewToWorld:e}):(this.pendingUpdate={scene:A,originToWorld:s},setTimeout(()=>{if(this.pendingUpdate){const{scene:n,originToWorld:i}=this.pendingUpdate;this.pendingUpdate=null,this.updateInternal({scene:n,originToWorld:i,viewToWorld:e})}},1))}updateInternal({scene:A,originToWorld:e,viewToWorld:s}){var B;if(!this.canAllocAccumulator())return!1;e||(e=this.active.toWorld),s=s??e.clone();const n=this.time??this.clock.getElapsedTime(),i=n-(this.lastUpdateTime??n);this.lastUpdateTime=n;const r=this.active.mapping.reduce((C,Q)=>(C.set(Q.node,Q),C),new Map),{generators:a,visibleGenerators:o,globalEdits:c}=this.compileScene(A);for(const C of a)(B=C.frameUpdate)==null||B.call(C,{object:C,time:n,deltaTime:i,viewToWorld:s,globalEdits:c});const l=new Set(o.map(C=>C.uuid));for(const C of a){const Q=r.get(C),f=C.generator&&l.has(C.uuid)?C.numSplats:0;(this.needsUpdate||C.generator!==(Q==null?void 0:Q.generator)||f!==(Q==null?void 0:Q.count))&&C.updateVersion()}const g=!Qe({matrix1:e,matrix2:this.active.toWorld,maxDistance:this.originDistance}),I=this.needsUpdate||g||a.length!==r.size||a.some(C=>{var Q;return C.version!==((Q=r.get(C))==null?void 0:Q.version)});this.needsUpdate=!1;let h=null;if(I){if(h=this.maybeAllocAccumulator(),!h)throw new Error("Unreachable");const C=!Qe({matrix1:e,matrix2:this.active.toWorld,maxDistance:1e-5,minCoorient:.99999}),E=o.map((x,y)=>{const m=r.get(x);return m?[x.version-m.version,m.base,x]:[Number.POSITIVE_INFINITY,x.version,x]}).sort((x,y)=>x[0]!==y[0]?x[0]-y[0]:x[1]-y[1]).map(([x,y,m])=>m),f=E.map(x=>x.numSplats),{maxSplats:p,mapping:d}=h.splats.generateMapping(f),w=E.map((x,y)=>{const{base:m,count:N}=d[y];return{node:x,generator:x.generator,version:x.version,base:m,count:N}});e.clone().invert().decompose(this.translateToAccumulator.value,this.rotateToAccumulator.value,new u.Vector3),h.ensureGenerate(p),h.splats.splatEncoding={...this.splatEncoding},h.generateSplats({renderer:this.renderer,modifier:this.modifier,generators:w,forceUpdate:C,originToWorld:e}),h.splatsVersion=this.active.splatsVersion+1;const D=h.hasCorrespondence(this.active);h.mappingVersion=this.active.mappingVersion+(D?0:1),this.releaseAccumulator(this.active),this.active=h,this.prepareViewpoint()}return setTimeout(()=>{for(const C of this.autoViewpoints)C.autoPoll({accumulator:h??void 0})},1),!0}compileScene(A){const e=[];A.traverse(i=>{i instanceof kt&&e.push(i)});const s=[];A.traverseVisible(i=>{i instanceof kt&&s.push(i)});const n=new Set;return A.traverseVisible(i=>{if(i instanceof Xt){let r=i.parent;for(;r!=null&&!(r instanceof $A);)r=r.parent;r==null&&n.add(i)}}),{generators:e,visibleGenerators:s,globalEdits:Array.from(n)}}async renderEnvMap({renderer:A,scene:e,worldCenter:s,size:n=256,near:i=.1,far:r=1e3,hideObjects:a=[],update:o=!1}){var h,B;if(this.envViewpoint||(this.envViewpoint=this.newViewpoint({sort360:!0})),!gA.cubeRender||gA.cubeRender.target.width!==n||gA.cubeRender.near!==i||gA.cubeRender.far!==r){gA.cubeRender&&gA.cubeRender.target.dispose();const C=new u.WebGLCubeRenderTarget(n,{format:u.RGBAFormat,generateMipmaps:!0,minFilter:u.LinearMipMapLinearFilter}),Q=new u.CubeCamera(i,r,C);gA.cubeRender={target:C,camera:Q,near:i,far:r}}gA.pmrem||(gA.pmrem=new u.PMREMGenerator(A??this.renderer));const c=new u.Matrix4().setPosition(s);await((h=this.envViewpoint)==null?void 0:h.prepare({scene:e,viewToWorld:c,update:o}));const{target:l,camera:g}=gA.cubeRender;g.position.copy(s);const I=new Map;for(const C of a)I.set(C,C.visible),C.visible=!1;this.prepareViewpoint(this.envViewpoint),g.update(A??this.renderer,e),this.prepareViewpoint(this.defaultView);for(const[C,Q]of I.entries())C.visible=Q;return(B=gA.pmrem)==null?void 0:B.fromCubemap(l.texture).texture}recurseSetEnvMap(A,e){A.traverse(s=>{if(s instanceof u.Mesh)if(Array.isArray(s.material))for(const n of s.material)n instanceof u.MeshStandardMaterial&&(n.envMap=e);else s.material instanceof u.MeshStandardMaterial&&(s.material.envMap=e)})}getRgba({generator:A,rgba:e}){const s=this.active.mapping.find(({node:n})=>n===A);if(!s)throw new Error("Generator not found");return e=e??new $e,e.fromPackedSplats({packedSplats:this.active.splats,base:s.base,count:s.count,renderer:this.renderer}),e}async readRgba({generator:A,rgba:e}){return e=this.getRgba({generator:A,rgba:e}),e.read()}};gA.cubeRender=null,gA.pmrem=null,gA.EMPTY_SPLAT_TEXTURE=new u.Data3DTexture;let jt=gA;const ds=new Ve(new Uint32Array(1),0);bA({packedSplats:se,index:"int"},{gsplat:AA},({packedSplats:t,index:A})=>{if(!t||!A)throw new Error("Invalid input");return{gsplat:bt(t,A)}});function qu(t){if(t.length===0)return null;const A=new u.Vector3,e=new u.Quaternion,s=new u.Vector3,n=[],i=[];for(const r of t)r.decompose(A,e,s),n.push(A),i.push(e);return new u.Matrix4().compose(Wn(n),jn(i),new u.Vector3(1,1,1))}function Hu(t,A,e){const s=Math.floor(t.length/32);if(s*32!==t.length)throw new Error("Invalid .splat file size");const n=new Float32Array(t.buffer);for(let i=0;i<s;++i){const r=i*32,a=i*8,o=n[a+0],c=n[a+1],l=n[a+2],g=n[a+3],I=n[a+4],h=n[a+5],B=t[r+24]/255,C=t[r+25]/255,Q=t[r+26]/255,E=t[r+27]/255,f=(t[r+28]-128)/128,p=(t[r+29]-128)/128,d=(t[r+30]-128)/128,w=(t[r+31]-128)/128;e(i,o,c,l,g,I,h,p,d,w,f,E,B,C,Q)}}const ys={0:{bytesPerCenter:12,bytesPerScale:12,bytesPerRotation:16,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:4,scaleOffsetBytes:12,rotationOffsetBytes:24,colorOffsetBytes:40,sphericalHarmonicsOffsetBytes:44,scaleRange:1},1:{bytesPerCenter:6,bytesPerScale:6,bytesPerRotation:8,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:2,scaleOffsetBytes:6,rotationOffsetBytes:12,colorOffsetBytes:20,sphericalHarmonicsOffsetBytes:24,scaleRange:32767},2:{bytesPerCenter:6,bytesPerScale:6,bytesPerRotation:8,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:1,scaleOffsetBytes:6,rotationOffsetBytes:12,colorOffsetBytes:20,sphericalHarmonicsOffsetBytes:24,scaleRange:32767}},Ku={0:0,1:9,2:24,3:45};function $u(t,A,e,s){var C;let r=0;const a=new DataView(t.buffer,r,4096);r+=4096;const o=a.getUint8(0),c=a.getUint8(1);if(o!==0||c<1)throw new Error(`Unsupported .ksplat version: ${o}.${c}`);const l=a.getUint32(4,!0);a.getUint32(16,!0);const g=a.getUint16(20,!0);if(g<0||g>2)throw new Error(`Invalid .ksplat compression level: ${g}`);const I=a.getFloat32(36,!0)||-1.5,h=a.getFloat32(40,!0)||1.5;let B=4096+l*1024;for(let Q=0;Q<l;++Q){let E=function(MA,z){if(g===0)return Y.getFloat32(MA+P+z*4,!0);if(g===1)return pA(Y.getUint16(MA+P+z*2,!0));const XA=Y.getUint8(MA+P+z)/255;return I+XA*(h-I)};const f=new DataView(t.buffer,r,1024);r+=1024;const p=f.getUint32(0,!0),d=f.getUint32(4,!0),w=f.getUint32(8,!0),D=f.getUint32(12,!0),x=f.getFloat32(16,!0),y=f.getUint16(20,!0),m=(f.getUint32(24,!0)||((C=ys[g])==null?void 0:C.scaleRange))??1,N=f.getUint32(32,!0),M=N*w,S=f.getUint32(36,!0),U=S*4,F=y*D+U,b=f.getUint16(40,!0),T=Ku[b],{bytesPerCenter:R,bytesPerScale:O,bytesPerRotation:L,bytesPerColor:eA,bytesPerSphericalHarmonicsComponent:H,scaleOffsetBytes:W,rotationOffsetBytes:_,colorOffsetBytes:j,sphericalHarmonicsOffsetBytes:P}=ys[g],Z=R+O+L+eA+T*H,G=Z*d,dA=G+F,lA=[0,3,6,1,4,7,2,5,8],yA=[9,14,19,10,15,20,11,16,21,12,17,22,13,18,23],wA=[24,31,38,25,32,39,26,33,40,27,34,41,28,35,42,29,36,43,30,37,44],SA=b>=1?new Float32Array(3*3):void 0,CA=b>=2?new Float32Array(5*3):void 0,YA=b>=3?new Float32Array(7*3):void 0,DA=x/2/m,jA=B+U,ZA=B+F,Y=new DataView(t.buffer,ZA,G),fA=new Float32Array(t.buffer,jA,D*3),PA=new Uint32Array(t.buffer,B,S);let Rt=N,ie=M;for(let MA=0;MA<p;++MA){const z=MA*Z;let XA;if(MA<M)XA=Math.floor(MA/w);else{const At=PA[Rt-N];MA>=ie+At&&(Rt+=1,ie+=At),XA=Rt}const De=g===0?Y.getFloat32(z+0,!0):(Y.getUint16(z+0,!0)-m)*DA+fA[3*XA+0],Me=g===0?Y.getFloat32(z+4,!0):(Y.getUint16(z+2,!0)-m)*DA+fA[3*XA+1],ve=g===0?Y.getFloat32(z+8,!0):(Y.getUint16(z+4,!0)-m)*DA+fA[3*XA+2],be=g===0?Y.getFloat32(z+W+0,!0):pA(Y.getUint16(z+W+0,!0)),Fe=g===0?Y.getFloat32(z+W+4,!0):pA(Y.getUint16(z+W+2,!0)),yo=g===0?Y.getFloat32(z+W+8,!0):pA(Y.getUint16(z+W+4,!0)),wo=g===0?Y.getFloat32(z+_+0,!0):pA(Y.getUint16(z+_+0,!0)),mo=g===0?Y.getFloat32(z+_+4,!0):pA(Y.getUint16(z+_+2,!0)),xo=g===0?Y.getFloat32(z+_+8,!0):pA(Y.getUint16(z+_+4,!0)),So=g===0?Y.getFloat32(z+_+12,!0):pA(Y.getUint16(z+_+6,!0)),Do=Y.getUint8(z+j+0)/255,Mo=Y.getUint8(z+j+1)/255,vo=Y.getUint8(z+j+2)/255,bo=Y.getUint8(z+j+3)/255;if(e(MA,De,Me,ve,be,Fe,yo,mo,xo,So,wo,bo,Do,Mo,vo),b>=1&&SA){for(const[At,Yt]of lA.entries())SA[At]=E(z,Yt);if(CA)for(const[At,Yt]of yA.entries())CA[At]=E(z,Yt);if(YA)for(const[At,Yt]of wA.entries())YA[At]=E(z,Yt);s==null||s(MA,SA,CA,YA)}}B+=dA}}class co{constructor({fileBytes:A}){this.fileBytes=A instanceof ArrayBuffer?new Uint8Array(A):A,this.reader=new si({fileBytes:this.fileBytes});const e=new DataView(this.reader.read(16).buffer);if(e.getUint32(0,!0)!==1347635022)throw new Error("Invalid SPZ file");if(this.version=e.getUint32(4,!0),this.version<1||this.version>2)throw new Error(`Unsupported SPZ version: ${this.version}`);this.numSplats=e.getUint32(8,!0),this.shDegree=e.getUint8(12),this.fractionalBits=e.getUint8(13),this.flags=e.getUint8(14),this.flagAntiAlias=(this.flags&1)!==0,this.reserved=e.getUint8(15),this.parsed=!1}parseSplats(A,e,s,n,i,r){if(this.parsed)throw new Error("SPZ file already parsed");if(this.parsed=!0,this.version===1){const a=this.reader.read(this.numSplats*3*2),o=new Uint16Array(a.buffer);for(let c=0;c<this.numSplats;c++){const l=c*3,g=pA(o[l]),I=pA(o[l+1]),h=pA(o[l+2]);A==null||A(c,g,I,h)}}else if(this.version===2){const a=1<<this.fractionalBits,o=this.reader.read(this.numSplats*3*3);for(let c=0;c<this.numSplats;c++){const l=c*9,g=((o[l+2]<<24|o[l+1]<<16|o[l]<<8)>>8)/a,I=((o[l+5]<<24|o[l+4]<<16|o[l+3]<<8)>>8)/a,h=((o[l+8]<<24|o[l+7]<<16|o[l+6]<<8)>>8)/a;A==null||A(c,g,I,h)}}else throw new Error("Unreachable");{const a=this.reader.read(this.numSplats);for(let o=0;o<this.numSplats;o++)e==null||e(o,a[o]/255)}{const a=this.reader.read(this.numSplats*3),o=Io/.15;for(let c=0;c<this.numSplats;c++){const l=c*3,g=(a[l]/255-.5)*o+.5,I=(a[l+1]/255-.5)*o+.5,h=(a[l+2]/255-.5)*o+.5;s==null||s(c,g,I,h)}}{const a=this.reader.read(this.numSplats*3);for(let o=0;o<this.numSplats;o++){const c=o*3,l=Math.exp(a[c]/16-10),g=Math.exp(a[c+1]/16-10),I=Math.exp(a[c+2]/16-10);n==null||n(o,l,g,I)}}{const a=this.reader.read(this.numSplats*3);for(let o=0;o<this.numSplats;o++){const c=o*3,l=a[c]/127.5-1,g=a[c+1]/127.5-1,I=a[c+2]/127.5-1,h=Math.sqrt(Math.max(0,1-l*l-g*g-I*I));i==null||i(o,l,g,I,h)}}if(r&&this.shDegree>=1){const a=new Float32Array(9),o=this.shDegree>=2?new Float32Array(5*3):void 0,c=this.shDegree>=3?new Float32Array(7*3):void 0,l=this.reader.read(this.numSplats*lo[this.shDegree]*3);let g=0;for(let I=0;I<this.numSplats;I++){for(let h=0;h<9;++h)a[h]=(l[g+h]-128)/128;if(g+=9,o){for(let h=0;h<15;++h)o[h]=(l[g+h]-128)/128;g+=15}if(c){for(let h=0;h<21;++h)c[h]=(l[g+h]-128)/128;g+=21}r==null||r(I,a,o,c)}}}}const lo={1:3,2:8,3:15},Io=.28209479177387814,Vu=1347635022,Pu=2,Xu=1;class OA{constructor({numSplats:A,shDegree:e,fractionalBits:s=12,flagAntiAlias:n=!0}){this.clippedCount=0;const i=19+(e>=1?9:0)+(e>=2?15:0)+(e>=3?21:0),r=16+A*i;this.buffer=new ArrayBuffer(r),this.view=new DataView(this.buffer),this.view.setUint32(0,Vu,!0),this.view.setUint32(4,Pu,!0),this.view.setUint32(8,A,!0),this.view.setUint8(12,e),this.view.setUint8(13,s),this.view.setUint8(14,n?Xu:0),this.view.setUint8(15,0),this.numSplats=A,this.shDegree=e,this.fractionalBits=s,this.fraction=1<<s,this.flagAntiAlias=n}setCenter(A,e,s,n){const i=Math.round(e*this.fraction),r=Math.max(-8388607,Math.min(8388607,i)),a=Math.round(s*this.fraction),o=Math.max(-8388607,Math.min(8388607,a)),c=Math.round(n*this.fraction),l=Math.max(-8388607,Math.min(8388607,c));(i!==r||a!==o||c!==l)&&(this.clippedCount+=1);const h=16+A*9;this.view.setUint8(h,r&255),this.view.setUint8(h+1,r>>8&255),this.view.setUint8(h+2,r>>16&255),this.view.setUint8(h+3,o&255),this.view.setUint8(h+4,o>>8&255),this.view.setUint8(h+5,o>>16&255),this.view.setUint8(h+6,l&255),this.view.setUint8(h+7,l>>8&255),this.view.setUint8(h+8,l>>16&255)}setAlpha(A,e){const s=16+this.numSplats*9+A;this.view.setUint8(s,Math.max(0,Math.min(255,Math.round(e*255))))}static scaleRgb(A){const e=((A-.5)/(Io/.15)+.5)*255;return Math.max(0,Math.min(255,Math.round(e)))}setRgb(A,e,s,n){const i=16+this.numSplats*10+A*3;this.view.setUint8(i,OA.scaleRgb(e)),this.view.setUint8(i+1,OA.scaleRgb(s)),this.view.setUint8(i+2,OA.scaleRgb(n))}setScale(A,e,s,n){const i=16+this.numSplats*13+A*3;this.view.setUint8(i,Math.max(0,Math.min(255,Math.round((Math.log(e)+10)*16)))),this.view.setUint8(i+1,Math.max(0,Math.min(255,Math.round((Math.log(s)+10)*16)))),this.view.setUint8(i+2,Math.max(0,Math.min(255,Math.round((Math.log(n)+10)*16))))}setQuat(A,e,s,n,i){const r=16+this.numSplats*16+A*3,a=i<0;this.view.setUint8(r,Math.max(0,Math.min(255,Math.round(((a?-e:e)+1)*127.5)))),this.view.setUint8(r+1,Math.max(0,Math.min(255,Math.round(((a?-s:s)+1)*127.5)))),this.view.setUint8(r+2,Math.max(0,Math.min(255,Math.round(((a?-n:n)+1)*127.5))))}static quantizeSh(A,e){const s=Math.round(A*128)+128,n=1<<8-e,i=Math.floor((s+n/2)/n)*n;return Math.max(0,Math.min(255,i))}setSh(A,e,s,n){const i=lo[this.shDegree]||0,r=16+this.numSplats*19+A*i*3;for(let a=0;a<9;++a)this.view.setUint8(r+a,OA.quantizeSh(e[a],5));if(s){const a=r+9;for(let o=0;o<15;++o)this.view.setUint8(a+o,OA.quantizeSh(s[o],4));if(n){const o=a+15;for(let c=0;c<21;++c)this.view.setUint8(o+c,OA.quantizeSh(n[c],4))}}}async finalize(){const A=new Uint8Array(this.buffer),s=new ReadableStream({async start(r){r.enqueue(A),r.close()}}).pipeThrough(new CompressionStream("gzip")),i=await new Response(s).arrayBuffer();return console.log("Compressed",A.length,"bytes to",i.byteLength,"bytes"),new Uint8Array(i)}}async function Ou(t){var l,g,I;const A=new ku,{inputs:e,clipXyz:s,maxSh:n,fractionalBits:i=12,opacityThreshold:r}=t;for(const h of e){let B=function(y){return y.multiplyScalar(p),y.applyQuaternion(d),y.add(w),y},C=function(y){return y.multiplyScalar(p),y},Q=function(y){return y.premultiply(d),y},E=function(y){return!D||D.containsPoint(y)},f=function(y){return r!==void 0?y>=r:!0};const p=((l=h.transform)==null?void 0:l.scale)??1,d=new u.Quaternion().fromArray(((g=h.transform)==null?void 0:g.quaternion)??[0,0,0,1]),w=new u.Vector3().fromArray(((I=h.transform)==null?void 0:I.translate)??[0,0,0]),D=s?new u.Box3(new u.Vector3().fromArray(s.min),new u.Vector3().fromArray(s.max)):void 0;let x=h.fileType;switch(x||(x=os(h.fileBytes),!x&&h.pathOrUrl&&(x=ao(h.pathOrUrl))),x){case St.PLY:{const y=new Ot({fileBytes:h.fileBytes});await y.parseHeader();let m=null;y.parseSplats((N,M,S,U,F,b,T,R,O,L,eA,H,W,_,j)=>{const P=B(new u.Vector3(M,S,U));if(E(P)&&f(H)){m=A.pushSplat(),A.setCenter(m,P.x,P.y,P.z);const Z=C(new u.Vector3(F,b,T));A.setScale(m,Z.x,Z.y,Z.z);const G=Q(new u.Quaternion(R,O,L,eA));A.setQuaternion(m,G.x,G.y,G.z,G.w),A.setOpacity(m,H),A.setColor(m,W,_,j)}else m=null},(N,M,S,U)=>{M&&m!==null&&A.setSh1(m,M),S&&m!==null&&A.setSh2(m,S),U&&m!==null&&A.setSh3(m,U)});break}case St.SPZ:{const y=new co({fileBytes:h.fileBytes}),m=new Int32Array(y.numSplats);m.fill(-1);const N=new Float32Array(y.numSplats*3),M=new u.Vector3;y.parseSplats((S,U,F,b)=>{const T=B(new u.Vector3(U,F,b));N[S*3]=T.x,N[S*3+1]=T.y,N[S*3+2]=T.z},(S,U)=>{M.fromArray(N,S*3),E(M)&&f(U)&&(m[S]=A.pushSplat(),A.setCenter(m[S],M.x,M.y,M.z),A.setOpacity(m[S],U))},(S,U,F,b)=>{m[S]>=0&&A.setColor(m[S],U,F,b)},(S,U,F,b)=>{if(m[S]>=0){const T=C(new u.Vector3(U,F,b));A.setScale(m[S],T.x,T.y,T.z)}},(S,U,F,b,T)=>{if(m[S]>=0){const R=Q(new u.Quaternion(U,F,b,T));A.setQuaternion(m[S],R.x,R.y,R.z,R.w)}},(S,U,F,b)=>{m[S]>=0&&(A.setSh1(m[S],U),F&&A.setSh2(m[S],F),b&&A.setSh3(m[S],b))});break}case St.SPLAT:Hu(h.fileBytes,y=>{},(y,m,N,M,S,U,F,b,T,R,O,L,eA,H,W)=>{const _=B(new u.Vector3(m,N,M));if(E(_)&&f(L)){const j=A.pushSplat();A.setCenter(j,_.x,_.y,_.z);const P=C(new u.Vector3(S,U,F));A.setScale(j,P.x,P.y,P.z);const Z=Q(new u.Quaternion(b,T,R,O));A.setQuaternion(j,Z.x,Z.y,Z.z,Z.w),A.setOpacity(j,L),A.setColor(j,eA,H,W)}});break;case St.KSPLAT:{let y=null;$u(h.fileBytes,m=>{},(m,N,M,S,U,F,b,T,R,O,L,eA,H,W,_)=>{const j=B(new u.Vector3(N,M,S));if(E(j)&&f(eA)){y=A.pushSplat(),A.setCenter(y,j.x,j.y,j.z);const P=C(new u.Vector3(U,F,b));A.setScale(y,P.x,P.y,P.z);const Z=Q(new u.Quaternion(T,R,O,L));A.setQuaternion(y,Z.x,Z.y,Z.z,Z.w),A.setOpacity(y,eA),A.setColor(y,H,W,_)}else y=null},(m,N,M,S)=>{y!==null&&(A.setSh1(y,N),M&&A.setSh2(y,M),S&&A.setSh3(y,S))});break}default:throw new Error(`transcodeSpz not implemented for ${x}`)}}const a=Math.min(n??3,A.sh3?3:A.sh2?2:A.sh1?1:0),o=new OA({numSplats:A.numSplats,shDegree:a,fractionalBits:i,flagAntiAlias:!0});for(let h=0;h<A.numSplats;++h){const B=h*3,C=h*4;o.setCenter(h,A.centers[B],A.centers[B+1],A.centers[B+2]),o.setScale(h,A.scales[B],A.scales[B+1],A.scales[B+2]),o.setQuat(h,A.quaternions[C],A.quaternions[C+1],A.quaternions[C+2],A.quaternions[C+3]),o.setAlpha(h,A.opacities[h]),o.setRgb(h,A.colors[B],A.colors[B+1],A.colors[B+2]),A.sh1&&a>=1&&o.setSh(h,A.sh1.slice(h*9,(h+1)*9),a>=2&&A.sh2?A.sh2.slice(h*15,(h+1)*15):void 0,a>=3&&A.sh3?A.sh3.slice(h*21,(h+1)*21):void 0)}return{fileBytes:await o.finalize(),clippedCount:o.clippedCount}}class Wu{constructor(A){this.mesh=A.mesh,this.numSplats=A.numSplats??this.mesh.numSplats;const{width:e,height:s,depth:n,maxSplats:i}=xA(this.numSplats);this.skinData=new Uint16Array(i*4),this.skinTexture=new u.DataArrayTexture(this.skinData,e,s,n),this.skinTexture.format=u.RGBAIntegerFormat,this.skinTexture.type=u.UnsignedShortType,this.skinTexture.internalFormat="RGBA16UI",this.skinTexture.needsUpdate=!0,this.numBones=A.numBones??256,this.boneData=new Float32Array(this.numBones*16),this.boneTexture=new u.DataTexture(this.boneData,4,this.numBones,u.RGBAFormat,u.FloatType),this.boneTexture.internalFormat="RGBA32F",this.boneTexture.needsUpdate=!0,this.uniform=new k({key:"skinning",type:uo,globals:()=>[ho],value:{numSplats:this.numSplats,numBones:this.numBones,skinTexture:this.skinTexture,boneTexture:this.boneTexture}})}modify(A){return Zu(A,this.uniform)}setRestQuatPos(A,e,s){const n=A*16;this.boneData[n+0]=e.x,this.boneData[n+1]=e.y,this.boneData[n+2]=e.z,this.boneData[n+3]=e.w,this.boneData[n+4]=s.x,this.boneData[n+5]=s.y,this.boneData[n+6]=s.z,this.boneData[n+7]=0,this.boneData[n+8]=0,this.boneData[n+9]=0,this.boneData[n+10]=0,this.boneData[n+11]=1,this.boneData[n+12]=0,this.boneData[n+13]=0,this.boneData[n+14]=0,this.boneData[n+15]=0}setBoneQuatPos(A,e,s){const n=A*16,i=new u.Quaternion(this.boneData[n+0],this.boneData[n+1],this.boneData[n+2],this.boneData[n+3]),r=new u.Vector3(this.boneData[n+4],this.boneData[n+5],this.boneData[n+6]),a=i.clone().invert(),o=s.clone().sub(r);o.applyQuaternion(a),a.multiply(e);const c=new u.Quaternion(o.x,o.y,o.z,0).multiply(i);this.boneData[n+8]=a.x,this.boneData[n+9]=a.y,this.boneData[n+10]=a.z,this.boneData[n+11]=a.w,this.boneData[n+12]=.5*c.x,this.boneData[n+13]=.5*c.y,this.boneData[n+14]=.5*c.z,this.boneData[n+15]=.5*c.w}setSplatBones(A,e,s){const n=A*4;this.skinData[n+0]=Math.min(255,Math.max(0,Math.round(s.x*255)))+(e.x<<8),this.skinData[n+1]=Math.min(255,Math.max(0,Math.round(s.y*255)))+(e.y<<8),this.skinData[n+2]=Math.min(255,Math.max(0,Math.round(s.z*255)))+(e.z<<8),this.skinData[n+3]=Math.min(255,Math.max(0,Math.round(s.w*255)))+(e.w<<8)}updateBones(){this.boneTexture.needsUpdate=!0,this.mesh.needsUpdate=!0}}const uo={type:"GsplatSkinning"},ho=hA(`
1120
+ }`;let Ye=null;function _u(){return Ye||(u.ShaderChunk.splatDefines=Ru,Ye={splatVertex:Ju,splatFragment:Yu}),Ye}const ps=5;let Pe=!1,Xe=!1,oo;function Lu(t){let A=!1;return t instanceof VA?!0:(t.traverse(e=>{A=A||e instanceof VA}),A)}const go=u.Scene.prototype.add;u.Scene.prototype.add=function(t){return Pe=Pe||Lu(t),Xe=Xe||t instanceof jt,go.call(this,t),this};const zu=u.Scene.prototype.onBeforeRender;u.Scene.prototype.onBeforeRender=function(t){if(Pe){if(!Xe){const A=oo||new jt({renderer:t});this.add(A)}u.Scene.prototype.onBeforeRender=zu,u.Scene.prototype.add=go}};const gA=class gA extends u.Mesh{constructor(A){const e=gA.makeUniforms(),s=_u(),n=A.premultipliedAlpha??!0,i=new u.ShaderMaterial({glslVersion:u.GLSL3,vertexShader:s.splatVertex,fragmentShader:s.splatFragment,uniforms:e,premultipliedAlpha:n,transparent:!0,depthTest:!0,depthWrite:!1,side:u.DoubleSide});super(ds,i),this.splatTexture=null,this.autoViewpoints=[],this.rotateToAccumulator=new Ut({value:new u.Quaternion}),this.translateToAccumulator=new Ft({value:new u.Vector3}),this.lastFrame=-1,this.lastUpdateTime=null,this.defaultCameras=[],this.lastStochastic=null,this.pendingUpdate=null,this.envViewpoint=null,this.frustumCulled=!1,this.renderer=A.renderer,this.material=i,this.uniforms=e;const r=bA({gsplat:AA},{gsplat:AA},({gsplat:a})=>{if(!a)throw new Error("gsplat not defined");return a=As(a,{rotate:this.rotateToAccumulator,translate:this.translateToAccumulator}),{gsplat:a}});this.modifier=new to(r),this.premultipliedAlpha=n,this.autoUpdate=A.autoUpdate??!0,this.preUpdate=A.preUpdate??!1,this.needsUpdate=!1,this.originDistance=A.originDistance??1,this.maxStdDev=A.maxStdDev??Math.sqrt(8),this.maxPixelRadius=A.maxPixelRadius??512,this.minAlpha=A.minAlpha??.5*(1/255),this.enable2DGS=A.enable2DGS??!1,this.preBlurAmount=A.preBlurAmount??0,this.blurAmount=A.blurAmount??.3,this.focalDistance=A.focalDistance??0,this.apertureAngle=A.apertureAngle??0,this.falloff=A.falloff??1,this.clipXY=A.clipXY??1.4,this.focalAdjustment=A.focalAdjustment??1,this.splatEncoding=A.splatEncoding??{...xe},this.active=new Ie,this.accumulatorCount=1,this.freeAccumulators=[];for(let a=0;a<1;++a)this.freeAccumulators.push(new Ie),this.accumulatorCount+=1;this.defaultView=new Wt({...A.view,autoUpdate:!0,spark:this}),this.viewpoint=this.defaultView,this.prepareViewpoint(this.viewpoint),this.clock=A.clock?Xn(A.clock):new u.Clock,oo=this}static makeUniforms(){return{renderSize:{value:new u.Vector2},near:{value:.1},far:{value:1e3},numSplats:{value:0},renderToViewQuat:{value:new u.Quaternion},renderToViewPos:{value:new u.Vector3},maxStdDev:{value:1},maxPixelRadius:{value:512},minAlpha:{value:.00196078431372549},stochastic:{value:!1},enable2DGS:{value:!1},preBlurAmount:{value:0},blurAmount:{value:.3},focalDistance:{value:0},apertureAngle:{value:0},falloff:{value:1},clipXY:{value:1.4},focalAdjustment:{value:1},splatTexEnable:{value:!1},splatTexture:{type:"t",value:gA.EMPTY_SPLAT_TEXTURE},splatTexMul:{value:new u.Matrix2},splatTexAdd:{value:new u.Vector2},splatTexNear:{value:.1},splatTexFar:{value:1e3},splatTexMid:{value:0},packedSplats:{type:"t",value:LA.getEmpty()},rgbMinMaxLnScaleMinMax:{value:new u.Vector4},time:{value:0},deltaTime:{value:0},encodeLinear:{value:!1},debugFlag:{value:!1}}}canAllocAccumulator(){return this.freeAccumulators.length>0||this.accumulatorCount<ps}maybeAllocAccumulator(){let A=this.freeAccumulators.pop();if(A===void 0){if(this.accumulatorCount>=ps)return null;A=new Ie,this.accumulatorCount+=1}return A.refCount=1,A}releaseAccumulator(A){A.refCount-=1,A.refCount===0&&this.freeAccumulators.push(A)}newViewpoint(A){return new Wt({...A,spark:this})}onBeforeRender(A,e,s){var h,B;const n=this.time??this.clock.getElapsedTime(),i=n-(this.viewpoint.lastTime??n);this.viewpoint.lastTime=n;const r=A.info.render.frame,a=r!==this.lastFrame;this.lastFrame=r;const o=this.viewpoint;if(o===this.defaultView){if(a)if(!A.xr.isPresenting)this.defaultView.viewToWorld=s.matrixWorld.clone(),this.defaultCameras=[this.defaultView.viewToWorld];else{const C=A.xr.getCamera().cameras;this.defaultCameras=C.map(Q=>Q.matrixWorld),this.defaultView.viewToWorld=qu(this.defaultCameras)??new u.Matrix4}this.autoUpdate&&this.update({scene:e,viewToWorld:this.defaultView.viewToWorld})}if(a&&(this.material.premultipliedAlpha!==this.premultipliedAlpha&&(this.material.premultipliedAlpha=this.premultipliedAlpha,this.material.needsUpdate=!0),this.uniforms.time.value=n,this.uniforms.deltaTime.value=i,this.uniforms.debugFlag.value=performance.now()/1e3%2<1,o.display&&o.stochastic&&(this.geometry.instanceCount=this.uniforms.numSplats.value)),o.target)this.uniforms.renderSize.value.set(o.target.width,o.target.height);else{const C=A.getDrawingBufferSize(this.uniforms.renderSize.value);if(C.x===1&&C.y===1){const Q=(h=A.xr.getSession())==null?void 0:h.renderState.baseLayer;Q&&(C.x=Q.framebufferWidth,C.y=Q.framebufferHeight)}}const c=s;if(this.uniforms.near.value=c.near,this.uniforms.far.value=c.far,this.uniforms.encodeLinear.value=o.encodeLinear,this.uniforms.maxStdDev.value=this.maxStdDev,this.uniforms.maxPixelRadius.value=this.maxPixelRadius,this.uniforms.minAlpha.value=this.minAlpha,this.uniforms.stochastic.value=o.stochastic,this.uniforms.enable2DGS.value=this.enable2DGS,this.uniforms.preBlurAmount.value=this.preBlurAmount,this.uniforms.blurAmount.value=this.blurAmount,this.uniforms.focalDistance.value=this.focalDistance,this.uniforms.apertureAngle.value=this.apertureAngle,this.uniforms.falloff.value=this.falloff,this.uniforms.clipXY.value=this.clipXY,this.uniforms.focalAdjustment.value=this.focalAdjustment,this.lastStochastic!==!o.stochastic&&(this.lastStochastic=!o.stochastic,this.material.transparent=!o.stochastic,this.material.depthWrite=o.stochastic,this.material.needsUpdate=!0),this.splatTexture){const{enable:C,texture:Q,multiply:E,add:f,near:p,far:d,mid:w}=this.splatTexture;C&&Q?(this.uniforms.splatTexEnable.value=!0,this.uniforms.splatTexture.value=Q,E?this.uniforms.splatTexMul.value.fromArray(E.elements):this.uniforms.splatTexMul.value.set(.5/this.maxStdDev,0,0,.5/this.maxStdDev),this.uniforms.splatTexAdd.value.set((f==null?void 0:f.x)??.5,(f==null?void 0:f.y)??.5),this.uniforms.splatTexNear.value=p??this.uniforms.near.value,this.uniforms.splatTexFar.value=d??this.uniforms.far.value,this.uniforms.splatTexMid.value=w??0):(this.uniforms.splatTexEnable.value=!1,this.uniforms.splatTexture.value=gA.EMPTY_SPLAT_TEXTURE)}else this.uniforms.splatTexEnable.value=!1,this.uniforms.splatTexture.value=gA.EMPTY_SPLAT_TEXTURE;const l=((B=o.display)==null?void 0:B.accumulator.toWorld)??new u.Matrix4,g=s.matrixWorld.clone().invert();l.clone().premultiply(g).decompose(this.uniforms.renderToViewPos.value,this.uniforms.renderToViewQuat.value,new u.Vector3)}prepareViewpoint(A){var e,s,n,i;if(this.viewpoint=A??this.viewpoint,this.viewpoint.display){const{accumulator:r,geometry:a}=this.viewpoint.display;this.uniforms.numSplats.value=r.splats.numSplats,this.uniforms.packedSplats.value=r.splats.getTexture(),this.uniforms.rgbMinMaxLnScaleMinMax.value.set(((e=r.splats.splatEncoding)==null?void 0:e.rgbMin)??0,((s=r.splats.splatEncoding)==null?void 0:s.rgbMax)??1,((n=r.splats.splatEncoding)==null?void 0:n.lnScaleMin)??kA,((i=r.splats.splatEncoding)==null?void 0:i.lnScaleMax)??NA),this.geometry=a,this.material.transparent=!this.viewpoint.stochastic,this.material.depthWrite=this.viewpoint.stochastic,this.material.needsUpdate=!0}else this.uniforms.numSplats.value=0,this.uniforms.packedSplats.value=LA.getEmpty(),this.geometry=ds}update({scene:A,viewToWorld:e}){const s=this.matrixWorld.clone();this.preUpdate?this.updateInternal({scene:A,originToWorld:s,viewToWorld:e}):(this.pendingUpdate={scene:A,originToWorld:s},setTimeout(()=>{if(this.pendingUpdate){const{scene:n,originToWorld:i}=this.pendingUpdate;this.pendingUpdate=null,this.updateInternal({scene:n,originToWorld:i,viewToWorld:e})}},1))}updateInternal({scene:A,originToWorld:e,viewToWorld:s}){var B;if(!this.canAllocAccumulator())return!1;e||(e=this.active.toWorld),s=s??e.clone();const n=this.time??this.clock.getElapsedTime(),i=n-(this.lastUpdateTime??n);this.lastUpdateTime=n;const r=this.active.mapping.reduce((C,Q)=>(C.set(Q.node,Q),C),new Map),{generators:a,visibleGenerators:o,globalEdits:c}=this.compileScene(A);for(const C of a)(B=C.frameUpdate)==null||B.call(C,{object:C,time:n,deltaTime:i,viewToWorld:s,globalEdits:c});const l=new Set(o.map(C=>C.uuid));for(const C of a){const Q=r.get(C),f=C.generator&&l.has(C.uuid)?C.numSplats:0;(this.needsUpdate||C.generator!==(Q==null?void 0:Q.generator)||f!==(Q==null?void 0:Q.count))&&C.updateVersion()}const g=!Qe({matrix1:e,matrix2:this.active.toWorld,maxDistance:this.originDistance}),I=this.needsUpdate||g||a.length!==r.size||a.some(C=>{var Q;return C.version!==((Q=r.get(C))==null?void 0:Q.version)});this.needsUpdate=!1;let h=null;if(I){if(h=this.maybeAllocAccumulator(),!h)throw new Error("Unreachable");const C=!Qe({matrix1:e,matrix2:this.active.toWorld,maxDistance:1e-5,minCoorient:.99999}),E=o.map((x,y)=>{const m=r.get(x);return m?[x.version-m.version,m.base,x]:[Number.POSITIVE_INFINITY,x.version,x]}).sort((x,y)=>x[0]!==y[0]?x[0]-y[0]:x[1]-y[1]).map(([x,y,m])=>m),f=E.map(x=>x.numSplats),{maxSplats:p,mapping:d}=h.splats.generateMapping(f),w=E.map((x,y)=>{const{base:m,count:N}=d[y];return{node:x,generator:x.generator,version:x.version,base:m,count:N}});e.clone().invert().decompose(this.translateToAccumulator.value,this.rotateToAccumulator.value,new u.Vector3),h.ensureGenerate(p),h.splats.splatEncoding={...this.splatEncoding},h.generateSplats({renderer:this.renderer,modifier:this.modifier,generators:w,forceUpdate:C,originToWorld:e}),h.splatsVersion=this.active.splatsVersion+1;const D=h.hasCorrespondence(this.active);h.mappingVersion=this.active.mappingVersion+(D?0:1),this.releaseAccumulator(this.active),this.active=h,this.prepareViewpoint()}return setTimeout(()=>{for(const C of this.autoViewpoints)C.autoPoll({accumulator:h??void 0})},1),!0}compileScene(A){const e=[];A.traverse(i=>{i instanceof kt&&e.push(i)});const s=[];A.traverseVisible(i=>{i instanceof kt&&s.push(i)});const n=new Set;return A.traverseVisible(i=>{if(i instanceof Xt){let r=i.parent;for(;r!=null&&!(r instanceof VA);)r=r.parent;r==null&&n.add(i)}}),{generators:e,visibleGenerators:s,globalEdits:Array.from(n)}}async renderEnvMap({renderer:A,scene:e,worldCenter:s,size:n=256,near:i=.1,far:r=1e3,hideObjects:a=[],update:o=!1}){var h,B;if(this.envViewpoint||(this.envViewpoint=this.newViewpoint({sort360:!0})),!gA.cubeRender||gA.cubeRender.target.width!==n||gA.cubeRender.near!==i||gA.cubeRender.far!==r){gA.cubeRender&&gA.cubeRender.target.dispose();const C=new u.WebGLCubeRenderTarget(n,{format:u.RGBAFormat,generateMipmaps:!0,minFilter:u.LinearMipMapLinearFilter}),Q=new u.CubeCamera(i,r,C);gA.cubeRender={target:C,camera:Q,near:i,far:r}}gA.pmrem||(gA.pmrem=new u.PMREMGenerator(A??this.renderer));const c=new u.Matrix4().setPosition(s);await((h=this.envViewpoint)==null?void 0:h.prepare({scene:e,viewToWorld:c,update:o}));const{target:l,camera:g}=gA.cubeRender;g.position.copy(s);const I=new Map;for(const C of a)I.set(C,C.visible),C.visible=!1;this.prepareViewpoint(this.envViewpoint),g.update(A??this.renderer,e),this.prepareViewpoint(this.defaultView);for(const[C,Q]of I.entries())C.visible=Q;return(B=gA.pmrem)==null?void 0:B.fromCubemap(l.texture).texture}recurseSetEnvMap(A,e){A.traverse(s=>{if(s instanceof u.Mesh)if(Array.isArray(s.material))for(const n of s.material)n instanceof u.MeshStandardMaterial&&(n.envMap=e);else s.material instanceof u.MeshStandardMaterial&&(s.material.envMap=e)})}getRgba({generator:A,rgba:e}){const s=this.active.mapping.find(({node:n})=>n===A);if(!s)throw new Error("Generator not found");return e=e??new Ve,e.fromPackedSplats({packedSplats:this.active.splats,base:s.base,count:s.count,renderer:this.renderer}),e}async readRgba({generator:A,rgba:e}){return e=this.getRgba({generator:A,rgba:e}),e.read()}};gA.cubeRender=null,gA.pmrem=null,gA.EMPTY_SPLAT_TEXTURE=new u.Data3DTexture;let jt=gA;const ds=new $e(new Uint32Array(1),0);bA({packedSplats:se,index:"int"},{gsplat:AA},({packedSplats:t,index:A})=>{if(!t||!A)throw new Error("Invalid input");return{gsplat:bt(t,A)}});function qu(t){if(t.length===0)return null;const A=new u.Vector3,e=new u.Quaternion,s=new u.Vector3,n=[],i=[];for(const r of t)r.decompose(A,e,s),n.push(A),i.push(e);return new u.Matrix4().compose(Wn(n),jn(i),new u.Vector3(1,1,1))}function Hu(t,A,e){const s=Math.floor(t.length/32);if(s*32!==t.length)throw new Error("Invalid .splat file size");const n=new Float32Array(t.buffer);for(let i=0;i<s;++i){const r=i*32,a=i*8,o=n[a+0],c=n[a+1],l=n[a+2],g=n[a+3],I=n[a+4],h=n[a+5],B=t[r+24]/255,C=t[r+25]/255,Q=t[r+26]/255,E=t[r+27]/255,f=(t[r+28]-128)/128,p=(t[r+29]-128)/128,d=(t[r+30]-128)/128,w=(t[r+31]-128)/128;e(i,o,c,l,g,I,h,p,d,w,f,E,B,C,Q)}}const ys={0:{bytesPerCenter:12,bytesPerScale:12,bytesPerRotation:16,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:4,scaleOffsetBytes:12,rotationOffsetBytes:24,colorOffsetBytes:40,sphericalHarmonicsOffsetBytes:44,scaleRange:1},1:{bytesPerCenter:6,bytesPerScale:6,bytesPerRotation:8,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:2,scaleOffsetBytes:6,rotationOffsetBytes:12,colorOffsetBytes:20,sphericalHarmonicsOffsetBytes:24,scaleRange:32767},2:{bytesPerCenter:6,bytesPerScale:6,bytesPerRotation:8,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:1,scaleOffsetBytes:6,rotationOffsetBytes:12,colorOffsetBytes:20,sphericalHarmonicsOffsetBytes:24,scaleRange:32767}},Ku={0:0,1:9,2:24,3:45};function Vu(t,A,e,s){var C;let r=0;const a=new DataView(t.buffer,r,4096);r+=4096;const o=a.getUint8(0),c=a.getUint8(1);if(o!==0||c<1)throw new Error(`Unsupported .ksplat version: ${o}.${c}`);const l=a.getUint32(4,!0);a.getUint32(16,!0);const g=a.getUint16(20,!0);if(g<0||g>2)throw new Error(`Invalid .ksplat compression level: ${g}`);const I=a.getFloat32(36,!0)||-1.5,h=a.getFloat32(40,!0)||1.5;let B=4096+l*1024;for(let Q=0;Q<l;++Q){let E=function(MA,z){if(g===0)return Y.getFloat32(MA+P+z*4,!0);if(g===1)return pA(Y.getUint16(MA+P+z*2,!0));const XA=Y.getUint8(MA+P+z)/255;return I+XA*(h-I)};const f=new DataView(t.buffer,r,1024);r+=1024;const p=f.getUint32(0,!0),d=f.getUint32(4,!0),w=f.getUint32(8,!0),D=f.getUint32(12,!0),x=f.getFloat32(16,!0),y=f.getUint16(20,!0),m=(f.getUint32(24,!0)||((C=ys[g])==null?void 0:C.scaleRange))??1,N=f.getUint32(32,!0),M=N*w,S=f.getUint32(36,!0),U=S*4,F=y*D+U,b=f.getUint16(40,!0),T=Ku[b],{bytesPerCenter:R,bytesPerScale:O,bytesPerRotation:_,bytesPerColor:eA,bytesPerSphericalHarmonicsComponent:H,scaleOffsetBytes:W,rotationOffsetBytes:L,colorOffsetBytes:j,sphericalHarmonicsOffsetBytes:P}=ys[g],Z=R+O+_+eA+T*H,G=Z*d,dA=G+F,lA=[0,3,6,1,4,7,2,5,8],yA=[9,14,19,10,15,20,11,16,21,12,17,22,13,18,23],wA=[24,31,38,25,32,39,26,33,40,27,34,41,28,35,42,29,36,43,30,37,44],SA=b>=1?new Float32Array(3*3):void 0,CA=b>=2?new Float32Array(5*3):void 0,YA=b>=3?new Float32Array(7*3):void 0,DA=x/2/m,jA=B+U,ZA=B+F,Y=new DataView(t.buffer,ZA,G),fA=new Float32Array(t.buffer,jA,D*3),PA=new Uint32Array(t.buffer,B,S);let Rt=N,ie=M;for(let MA=0;MA<p;++MA){const z=MA*Z;let XA;if(MA<M)XA=Math.floor(MA/w);else{const At=PA[Rt-N];MA>=ie+At&&(Rt+=1,ie+=At),XA=Rt}const De=g===0?Y.getFloat32(z+0,!0):(Y.getUint16(z+0,!0)-m)*DA+fA[3*XA+0],Me=g===0?Y.getFloat32(z+4,!0):(Y.getUint16(z+2,!0)-m)*DA+fA[3*XA+1],ve=g===0?Y.getFloat32(z+8,!0):(Y.getUint16(z+4,!0)-m)*DA+fA[3*XA+2],be=g===0?Y.getFloat32(z+W+0,!0):pA(Y.getUint16(z+W+0,!0)),Fe=g===0?Y.getFloat32(z+W+4,!0):pA(Y.getUint16(z+W+2,!0)),yo=g===0?Y.getFloat32(z+W+8,!0):pA(Y.getUint16(z+W+4,!0)),wo=g===0?Y.getFloat32(z+L+0,!0):pA(Y.getUint16(z+L+0,!0)),mo=g===0?Y.getFloat32(z+L+4,!0):pA(Y.getUint16(z+L+2,!0)),xo=g===0?Y.getFloat32(z+L+8,!0):pA(Y.getUint16(z+L+4,!0)),So=g===0?Y.getFloat32(z+L+12,!0):pA(Y.getUint16(z+L+6,!0)),Do=Y.getUint8(z+j+0)/255,Mo=Y.getUint8(z+j+1)/255,vo=Y.getUint8(z+j+2)/255,bo=Y.getUint8(z+j+3)/255;if(e(MA,De,Me,ve,be,Fe,yo,mo,xo,So,wo,bo,Do,Mo,vo),b>=1&&SA){for(const[At,Yt]of lA.entries())SA[At]=E(z,Yt);if(CA)for(const[At,Yt]of yA.entries())CA[At]=E(z,Yt);if(YA)for(const[At,Yt]of wA.entries())YA[At]=E(z,Yt);s==null||s(MA,SA,CA,YA)}}B+=dA}}class co{constructor({fileBytes:A}){this.fileBytes=A instanceof ArrayBuffer?new Uint8Array(A):A,this.reader=new si({fileBytes:this.fileBytes});const e=new DataView(this.reader.read(16).buffer);if(e.getUint32(0,!0)!==1347635022)throw new Error("Invalid SPZ file");if(this.version=e.getUint32(4,!0),this.version<1||this.version>2)throw new Error(`Unsupported SPZ version: ${this.version}`);this.numSplats=e.getUint32(8,!0),this.shDegree=e.getUint8(12),this.fractionalBits=e.getUint8(13),this.flags=e.getUint8(14),this.flagAntiAlias=(this.flags&1)!==0,this.reserved=e.getUint8(15),this.parsed=!1}parseSplats(A,e,s,n,i,r){if(this.parsed)throw new Error("SPZ file already parsed");if(this.parsed=!0,this.version===1){const a=this.reader.read(this.numSplats*3*2),o=new Uint16Array(a.buffer);for(let c=0;c<this.numSplats;c++){const l=c*3,g=pA(o[l]),I=pA(o[l+1]),h=pA(o[l+2]);A==null||A(c,g,I,h)}}else if(this.version===2){const a=1<<this.fractionalBits,o=this.reader.read(this.numSplats*3*3);for(let c=0;c<this.numSplats;c++){const l=c*9,g=((o[l+2]<<24|o[l+1]<<16|o[l]<<8)>>8)/a,I=((o[l+5]<<24|o[l+4]<<16|o[l+3]<<8)>>8)/a,h=((o[l+8]<<24|o[l+7]<<16|o[l+6]<<8)>>8)/a;A==null||A(c,g,I,h)}}else throw new Error("Unreachable");{const a=this.reader.read(this.numSplats);for(let o=0;o<this.numSplats;o++)e==null||e(o,a[o]/255)}{const a=this.reader.read(this.numSplats*3),o=Io/.15;for(let c=0;c<this.numSplats;c++){const l=c*3,g=(a[l]/255-.5)*o+.5,I=(a[l+1]/255-.5)*o+.5,h=(a[l+2]/255-.5)*o+.5;s==null||s(c,g,I,h)}}{const a=this.reader.read(this.numSplats*3);for(let o=0;o<this.numSplats;o++){const c=o*3,l=Math.exp(a[c]/16-10),g=Math.exp(a[c+1]/16-10),I=Math.exp(a[c+2]/16-10);n==null||n(o,l,g,I)}}{const a=this.reader.read(this.numSplats*3);for(let o=0;o<this.numSplats;o++){const c=o*3,l=a[c]/127.5-1,g=a[c+1]/127.5-1,I=a[c+2]/127.5-1,h=Math.sqrt(Math.max(0,1-l*l-g*g-I*I));i==null||i(o,l,g,I,h)}}if(r&&this.shDegree>=1){const a=new Float32Array(9),o=this.shDegree>=2?new Float32Array(5*3):void 0,c=this.shDegree>=3?new Float32Array(7*3):void 0,l=this.reader.read(this.numSplats*lo[this.shDegree]*3);let g=0;for(let I=0;I<this.numSplats;I++){for(let h=0;h<9;++h)a[h]=(l[g+h]-128)/128;if(g+=9,o){for(let h=0;h<15;++h)o[h]=(l[g+h]-128)/128;g+=15}if(c){for(let h=0;h<21;++h)c[h]=(l[g+h]-128)/128;g+=21}r==null||r(I,a,o,c)}}}}const lo={1:3,2:8,3:15},Io=.28209479177387814,$u=1347635022,Pu=2,Xu=1;class OA{constructor({numSplats:A,shDegree:e,fractionalBits:s=12,flagAntiAlias:n=!0}){this.clippedCount=0;const i=19+(e>=1?9:0)+(e>=2?15:0)+(e>=3?21:0),r=16+A*i;this.buffer=new ArrayBuffer(r),this.view=new DataView(this.buffer),this.view.setUint32(0,$u,!0),this.view.setUint32(4,Pu,!0),this.view.setUint32(8,A,!0),this.view.setUint8(12,e),this.view.setUint8(13,s),this.view.setUint8(14,n?Xu:0),this.view.setUint8(15,0),this.numSplats=A,this.shDegree=e,this.fractionalBits=s,this.fraction=1<<s,this.flagAntiAlias=n}setCenter(A,e,s,n){const i=Math.round(e*this.fraction),r=Math.max(-8388607,Math.min(8388607,i)),a=Math.round(s*this.fraction),o=Math.max(-8388607,Math.min(8388607,a)),c=Math.round(n*this.fraction),l=Math.max(-8388607,Math.min(8388607,c));(i!==r||a!==o||c!==l)&&(this.clippedCount+=1);const h=16+A*9;this.view.setUint8(h,r&255),this.view.setUint8(h+1,r>>8&255),this.view.setUint8(h+2,r>>16&255),this.view.setUint8(h+3,o&255),this.view.setUint8(h+4,o>>8&255),this.view.setUint8(h+5,o>>16&255),this.view.setUint8(h+6,l&255),this.view.setUint8(h+7,l>>8&255),this.view.setUint8(h+8,l>>16&255)}setAlpha(A,e){const s=16+this.numSplats*9+A;this.view.setUint8(s,Math.max(0,Math.min(255,Math.round(e*255))))}static scaleRgb(A){const e=((A-.5)/(Io/.15)+.5)*255;return Math.max(0,Math.min(255,Math.round(e)))}setRgb(A,e,s,n){const i=16+this.numSplats*10+A*3;this.view.setUint8(i,OA.scaleRgb(e)),this.view.setUint8(i+1,OA.scaleRgb(s)),this.view.setUint8(i+2,OA.scaleRgb(n))}setScale(A,e,s,n){const i=16+this.numSplats*13+A*3;this.view.setUint8(i,Math.max(0,Math.min(255,Math.round((Math.log(e)+10)*16)))),this.view.setUint8(i+1,Math.max(0,Math.min(255,Math.round((Math.log(s)+10)*16)))),this.view.setUint8(i+2,Math.max(0,Math.min(255,Math.round((Math.log(n)+10)*16))))}setQuat(A,e,s,n,i){const r=16+this.numSplats*16+A*3,a=i<0;this.view.setUint8(r,Math.max(0,Math.min(255,Math.round(((a?-e:e)+1)*127.5)))),this.view.setUint8(r+1,Math.max(0,Math.min(255,Math.round(((a?-s:s)+1)*127.5)))),this.view.setUint8(r+2,Math.max(0,Math.min(255,Math.round(((a?-n:n)+1)*127.5))))}static quantizeSh(A,e){const s=Math.round(A*128)+128,n=1<<8-e,i=Math.floor((s+n/2)/n)*n;return Math.max(0,Math.min(255,i))}setSh(A,e,s,n){const i=lo[this.shDegree]||0,r=16+this.numSplats*19+A*i*3;for(let a=0;a<9;++a)this.view.setUint8(r+a,OA.quantizeSh(e[a],5));if(s){const a=r+9;for(let o=0;o<15;++o)this.view.setUint8(a+o,OA.quantizeSh(s[o],4));if(n){const o=a+15;for(let c=0;c<21;++c)this.view.setUint8(o+c,OA.quantizeSh(n[c],4))}}}async finalize(){const A=new Uint8Array(this.buffer),s=new ReadableStream({async start(r){r.enqueue(A),r.close()}}).pipeThrough(new CompressionStream("gzip")),i=await new Response(s).arrayBuffer();return console.log("Compressed",A.length,"bytes to",i.byteLength,"bytes"),new Uint8Array(i)}}async function Ou(t){var l,g,I;const A=new ku,{inputs:e,clipXyz:s,maxSh:n,fractionalBits:i=12,opacityThreshold:r}=t;for(const h of e){let B=function(y){return y.multiplyScalar(p),y.applyQuaternion(d),y.add(w),y},C=function(y){return y.multiplyScalar(p),y},Q=function(y){return y.premultiply(d),y},E=function(y){return!D||D.containsPoint(y)},f=function(y){return r!==void 0?y>=r:!0};const p=((l=h.transform)==null?void 0:l.scale)??1,d=new u.Quaternion().fromArray(((g=h.transform)==null?void 0:g.quaternion)??[0,0,0,1]),w=new u.Vector3().fromArray(((I=h.transform)==null?void 0:I.translate)??[0,0,0]),D=s?new u.Box3(new u.Vector3().fromArray(s.min),new u.Vector3().fromArray(s.max)):void 0;let x=h.fileType;switch(x||(x=os(h.fileBytes),!x&&h.pathOrUrl&&(x=ao(h.pathOrUrl))),x){case St.PLY:{const y=new Ot({fileBytes:h.fileBytes});await y.parseHeader();let m=null;y.parseSplats((N,M,S,U,F,b,T,R,O,_,eA,H,W,L,j)=>{const P=B(new u.Vector3(M,S,U));if(E(P)&&f(H)){m=A.pushSplat(),A.setCenter(m,P.x,P.y,P.z);const Z=C(new u.Vector3(F,b,T));A.setScale(m,Z.x,Z.y,Z.z);const G=Q(new u.Quaternion(R,O,_,eA));A.setQuaternion(m,G.x,G.y,G.z,G.w),A.setOpacity(m,H),A.setColor(m,W,L,j)}else m=null},(N,M,S,U)=>{M&&m!==null&&A.setSh1(m,M),S&&m!==null&&A.setSh2(m,S),U&&m!==null&&A.setSh3(m,U)});break}case St.SPZ:{const y=new co({fileBytes:h.fileBytes}),m=new Int32Array(y.numSplats);m.fill(-1);const N=new Float32Array(y.numSplats*3),M=new u.Vector3;y.parseSplats((S,U,F,b)=>{const T=B(new u.Vector3(U,F,b));N[S*3]=T.x,N[S*3+1]=T.y,N[S*3+2]=T.z},(S,U)=>{M.fromArray(N,S*3),E(M)&&f(U)&&(m[S]=A.pushSplat(),A.setCenter(m[S],M.x,M.y,M.z),A.setOpacity(m[S],U))},(S,U,F,b)=>{m[S]>=0&&A.setColor(m[S],U,F,b)},(S,U,F,b)=>{if(m[S]>=0){const T=C(new u.Vector3(U,F,b));A.setScale(m[S],T.x,T.y,T.z)}},(S,U,F,b,T)=>{if(m[S]>=0){const R=Q(new u.Quaternion(U,F,b,T));A.setQuaternion(m[S],R.x,R.y,R.z,R.w)}},(S,U,F,b)=>{m[S]>=0&&(A.setSh1(m[S],U),F&&A.setSh2(m[S],F),b&&A.setSh3(m[S],b))});break}case St.SPLAT:Hu(h.fileBytes,y=>{},(y,m,N,M,S,U,F,b,T,R,O,_,eA,H,W)=>{const L=B(new u.Vector3(m,N,M));if(E(L)&&f(_)){const j=A.pushSplat();A.setCenter(j,L.x,L.y,L.z);const P=C(new u.Vector3(S,U,F));A.setScale(j,P.x,P.y,P.z);const Z=Q(new u.Quaternion(b,T,R,O));A.setQuaternion(j,Z.x,Z.y,Z.z,Z.w),A.setOpacity(j,_),A.setColor(j,eA,H,W)}});break;case St.KSPLAT:{let y=null;Vu(h.fileBytes,m=>{},(m,N,M,S,U,F,b,T,R,O,_,eA,H,W,L)=>{const j=B(new u.Vector3(N,M,S));if(E(j)&&f(eA)){y=A.pushSplat(),A.setCenter(y,j.x,j.y,j.z);const P=C(new u.Vector3(U,F,b));A.setScale(y,P.x,P.y,P.z);const Z=Q(new u.Quaternion(T,R,O,_));A.setQuaternion(y,Z.x,Z.y,Z.z,Z.w),A.setOpacity(y,eA),A.setColor(y,H,W,L)}else y=null},(m,N,M,S)=>{y!==null&&(A.setSh1(y,N),M&&A.setSh2(y,M),S&&A.setSh3(y,S))});break}default:throw new Error(`transcodeSpz not implemented for ${x}`)}}const a=Math.min(n??3,A.sh3?3:A.sh2?2:A.sh1?1:0),o=new OA({numSplats:A.numSplats,shDegree:a,fractionalBits:i,flagAntiAlias:!0});for(let h=0;h<A.numSplats;++h){const B=h*3,C=h*4;o.setCenter(h,A.centers[B],A.centers[B+1],A.centers[B+2]),o.setScale(h,A.scales[B],A.scales[B+1],A.scales[B+2]),o.setQuat(h,A.quaternions[C],A.quaternions[C+1],A.quaternions[C+2],A.quaternions[C+3]),o.setAlpha(h,A.opacities[h]),o.setRgb(h,A.colors[B],A.colors[B+1],A.colors[B+2]),A.sh1&&a>=1&&o.setSh(h,A.sh1.slice(h*9,(h+1)*9),a>=2&&A.sh2?A.sh2.slice(h*15,(h+1)*15):void 0,a>=3&&A.sh3?A.sh3.slice(h*21,(h+1)*21):void 0)}return{fileBytes:await o.finalize(),clippedCount:o.clippedCount}}class Wu{constructor(A){this.mesh=A.mesh,this.numSplats=A.numSplats??this.mesh.numSplats;const{width:e,height:s,depth:n,maxSplats:i}=xA(this.numSplats);this.skinData=new Uint16Array(i*4),this.skinTexture=new u.DataArrayTexture(this.skinData,e,s,n),this.skinTexture.format=u.RGBAIntegerFormat,this.skinTexture.type=u.UnsignedShortType,this.skinTexture.internalFormat="RGBA16UI",this.skinTexture.needsUpdate=!0,this.numBones=A.numBones??256,this.boneData=new Float32Array(this.numBones*16),this.boneTexture=new u.DataTexture(this.boneData,4,this.numBones,u.RGBAFormat,u.FloatType),this.boneTexture.internalFormat="RGBA32F",this.boneTexture.needsUpdate=!0,this.uniform=new k({key:"skinning",type:uo,globals:()=>[ho],value:{numSplats:this.numSplats,numBones:this.numBones,skinTexture:this.skinTexture,boneTexture:this.boneTexture}})}modify(A){return Zu(A,this.uniform)}setRestQuatPos(A,e,s){const n=A*16;this.boneData[n+0]=e.x,this.boneData[n+1]=e.y,this.boneData[n+2]=e.z,this.boneData[n+3]=e.w,this.boneData[n+4]=s.x,this.boneData[n+5]=s.y,this.boneData[n+6]=s.z,this.boneData[n+7]=0,this.boneData[n+8]=0,this.boneData[n+9]=0,this.boneData[n+10]=0,this.boneData[n+11]=1,this.boneData[n+12]=0,this.boneData[n+13]=0,this.boneData[n+14]=0,this.boneData[n+15]=0}setBoneQuatPos(A,e,s){const n=A*16,i=new u.Quaternion(this.boneData[n+0],this.boneData[n+1],this.boneData[n+2],this.boneData[n+3]),r=new u.Vector3(this.boneData[n+4],this.boneData[n+5],this.boneData[n+6]),a=i.clone().invert(),o=s.clone().sub(r);o.applyQuaternion(a),a.multiply(e);const c=new u.Quaternion(o.x,o.y,o.z,0).multiply(i);this.boneData[n+8]=a.x,this.boneData[n+9]=a.y,this.boneData[n+10]=a.z,this.boneData[n+11]=a.w,this.boneData[n+12]=.5*c.x,this.boneData[n+13]=.5*c.y,this.boneData[n+14]=.5*c.z,this.boneData[n+15]=.5*c.w}setSplatBones(A,e,s){const n=A*4;this.skinData[n+0]=Math.min(255,Math.max(0,Math.round(s.x*255)))+(e.x<<8),this.skinData[n+1]=Math.min(255,Math.max(0,Math.round(s.y*255)))+(e.y<<8),this.skinData[n+2]=Math.min(255,Math.max(0,Math.round(s.z*255)))+(e.z<<8),this.skinData[n+3]=Math.min(255,Math.max(0,Math.round(s.w*255)))+(e.w<<8)}updateBones(){this.boneTexture.needsUpdate=!0,this.mesh.needsUpdate=!0}}const uo={type:"GsplatSkinning"},ho=hA(`
1087
1121
  struct GsplatSkinning {
1088
1122
  int numSplats;
1089
1123
  int numBones;
@@ -1149,7 +1183,7 @@ void main() {
1149
1183
  center = quatVec(quat, center) + translate;
1150
1184
  quaternion = quatQuat(quat, quaternion);
1151
1185
  }
1152
- `);function Zu(t,A){return new V({inTypes:{gsplat:AA,skinning:uo},outTypes:{gsplat:AA},globals:()=>[ho,ju],inputs:{gsplat:t,skinning:A},statements:({inputs:s,outputs:n})=>{const{skinning:i}=s,{gsplat:r}=n;return RA(`
1186
+ `);function Zu(t,A){return new $({inTypes:{gsplat:AA,skinning:uo},outTypes:{gsplat:AA},globals:()=>[ho,ju],inputs:{gsplat:t,skinning:A},statements:({inputs:s,outputs:n})=>{const{skinning:i}=s,{gsplat:r}=n;return RA(`
1153
1187
  ${r} = ${s.gsplat};
1154
1188
  if (isGsplatActive(${r}.flags)) {
1155
1189
  applyGsplatSkinning(
@@ -1159,5 +1193,5 @@ void main() {
1159
1193
  );
1160
1194
  }
1161
1195
  `)}}).outputs.gsplat}function Ah({splats:t,extents:A,stepSize:e=1,pointRadius:s=.01,pointShadowScale:n=2,opacity:i=1,color:r}){const o=new u.Vector3,c=new u.Vector3,l=new u.Quaternion(0,0,0,1);r==null&&(r=(I,h)=>I.set(.55+.45*Math.cos(h.x*1),.55+.45*Math.cos(h.y*1),.55+.45*Math.cos(h.z*1)));const g=new u.Color;for(let I=A.min.z;I<A.max.z+1e-6;I+=e)for(let h=A.min.y;h<A.max.y+1e-6;h+=e)for(let B=A.min.x;B<A.max.x+1e-6;B+=e){o.set(B,h,I);for(let C=0;C<2;++C)c.setScalar(s*(C?1:n)),C?typeof r=="function"?r(g,o):g.copy(r):g.setScalar(0),t.pushSplat(o,c,l,i,g)}}function th({splats:t,scale:A=.25,axisRadius:e=.0075,axisShadowScale:s=2,origins:n=[new u.Vector3]}){const i=new u.Vector3,r=new u.Vector3,a=new u.Quaternion(0,0,0,1),o=new u.Color,c=1;for(const l of n)for(let g=0;g<3;++g){i.set(l.x+(g===0?A:0),l.y+(g===1?A:0),l.z+(g===2?A:0));for(let I=0;I<2;++I)r.set((g===0?A:e)*(I?1:s),(g===1?A:e)*(I?1:s),(g===2?A:e)*(I?1:s)),o.setRGB(I===0?0:g===0?1:0,I===0?0:g===1?1:0,I===0?0:g===2?1:0),t.pushSplat(i,r,a,c,o)}}function eh({splats:t,origin:A=new u.Vector3,radius:e=1,maxDepth:s=3,filter:n=null,pointRadius:i=.02,pointThickness:r=.001,color:a=new u.Color(1,1,1)}){const o={};function c(C){if(n&&!n(C))return;const Q=`${C.x},${C.y},${C.z}`;o[Q]||(o[Q]=C)}function l(C,Q,E,f){if(c(Q),c(E),c(f),C>=s)return;const p=new u.Vector3().addVectors(Q,E).normalize(),d=new u.Vector3().addVectors(E,f).normalize(),w=new u.Vector3().addVectors(f,Q).normalize();l(C+1,Q,p,w),l(C+1,p,E,d),l(C+1,w,d,f),l(C+1,p,d,w)}for(const C of[-1,1])for(const Q of[-1,1])for(const E of[-1,1]){const f=new u.Vector3(C,0,0),p=new u.Vector3(0,Q,0),d=new u.Vector3(0,0,E);l(0,f,p,d)}const g=Object.values(o),I=new u.Vector3(i,i,r),h=new u.Quaternion,B=typeof a=="function"?new u.Color:a;for(const C of g)h.setFromUnitVectors(new u.Vector3(0,0,-1),C),typeof a=="function"&&a(B,C),C.multiplyScalar(e),C.add(A),t.pushSplat(C,I,h,1,B)}function sh({text:t,font:A,fontSize:e,color:s,rgb:n,dotRadius:i,textAlign:r,lineHeight:a,objectScale:o}){A=A??"Arial",e=e??32,s=s??new u.Color(1,1,1),i=i??.8,r=r??"start",a=a??1,o=o??1;const c=t.split(`
1162
- `),l=document.createElement("canvas"),g=l.getContext("2d");if(!g)throw new Error("Failed to create canvas context");g.font=`${e}px ${A}`,g.textAlign=r;const I=g.measureText(""),h=I.fontBoundingBoxAscent+I.fontBoundingBoxDescent;let B=Number.POSITIVE_INFINITY,C=Number.NEGATIVE_INFINITY,Q=Number.POSITIVE_INFINITY,E=Number.NEGATIVE_INFINITY;for(let F=0;F<c.length;++F){const b=g.measureText(c[F]),T=h*a*F;B=Math.min(B,-b.actualBoundingBoxLeft),C=Math.max(C,b.actualBoundingBoxRight),Q=Math.min(Q,T-b.actualBoundingBoxAscent),E=Math.max(E,T+b.actualBoundingBoxDescent)}const f=Math.floor(B),p=Math.floor(Q),d=Math.ceil(C)-f,w=Math.ceil(E)-p;l.width=d,l.height=w,g.font=`${e}px ${A}`,g.textAlign=r,g.textBaseline="alphabetic",g.fillStyle="#FFFFFF";for(let F=0;F<c.length;++F){const b=h*a*F-p;g.fillText(c[F],-f,b)}const D=g.getImageData(0,0,d,w),x=new Uint8Array(D.data.buffer),y=new _A,m=new u.Vector3,N=new u.Vector3().setScalar(i*o),M=new u.Quaternion(0,0,0,1);n=n??new u.Color(1,1,1);let S=0;for(let F=0;F<w;++F)for(let b=0;b<d;++b){const T=x[S+3];if(T>0){const R=T/255;m.set(b-.5*(d-1),.5*(w-1)-F,0),m.multiplyScalar(o),y.pushSplat(m,N,M,R,n)}S+=4}const U=new $A({packedSplats:y});return U.recolor=s,U}function nh({url:t,dotRadius:A,subXY:e,forEachSplat:s}){return A=A??.8,e=Math.max(1,Math.floor(e??1)),new $A({constructSplats:async n=>new Promise((i,r)=>{const a=new Image;a.crossOrigin="anonymous",a.onerror=r,a.onload=()=>{const{width:o,height:c}=a,l=document.createElement("canvas");l.width=o,l.height=c;const g=l.getContext("2d");if(!g){r(new Error("Failed to create canvas context"));return}g.imageSmoothingEnabled=!0,g.imageSmoothingQuality="high";const I=Math.round(o/e),h=Math.round(c/e);g.drawImage(a,0,0,I,h);try{const B=g.getImageData(0,0,I,h),C=new Uint8Array(B.data.buffer),Q=new u.Vector3,E=new u.Vector3().setScalar(A),f=new u.Quaternion(0,0,0,1),p=new u.Color;let d=0;for(let w=0;w<h;++w)for(let D=0;D<I;++D){const x=d*4,y=C[x+3];if(y>0){let m=y/255;p.set(C[x+0]/255,C[x+1]/255,C[x+2]/255),Q.set(D-.5*(I-1),.5*(h-1)-w,0),E.setScalar(A),f.set(0,0,0,1);let N=!0;if(s){const M=s(I,h,d,Q,E,f,m,p);m=M??m,N=M!==null}N&&n.pushSplat(Q,E,f,m,p)}d+=1}i()}catch(B){r(B)}},a.src=t})})}function ih({box:t,cells:A,dotScale:e,color:s,opacity:n}){A.x=Math.max(1,Math.round(A.x)),A.y=Math.max(1,Math.round(A.y)),A.z=Math.max(1,Math.round(A.z)),n=n??1;const i=A.x*A.y*A.z,r=J("int",A.x),a=J("int",A.y);J("int",A.z);const o=zA(0),c=new kt({numSplats:i,generator:bA({index:"int"},{gsplat:AA},({index:g})=>{if(!g)throw new Error("index is undefined");const I=ze(g,r),h=ce(g,r),B=ze(h,a),C=ce(h,a),Q=KA({vectorType:"ivec3",x:I,y:B,z:C}),E=ir(o),f=KA({vectorType:"ivec2",x:g,y:E}),p=ga(f),d=J("vec3",t.min),w=J("vec3",t.max),D=ft(w,d),x=ce(BA(Qt(Q),p),J("vec3",A));let y,m,N;s?(y=J("float",s.r),m=J("float",s.g),N=J("float",s.b)):{r:y,g:m,b:N}=Et(x).outputs;const M=KA({vectorType:"vec4",r:y,g:m,b:N,a:J("float",n)}),S=BA(d,rA(D,x)),U=Qt(J("float",e)),F=J("vec4",new u.Quaternion(0,0,0,1));let b=rt({flags:ue("uint","GSPLAT_FLAG_ACTIVE"),index:g,center:S,scales:U,quaternion:F,rgba:M});return b=l.applyGsplat(b),{gsplat:b}},{globals:()=>[FA]}),update:({time:g})=>{o.value=g,l.update(c),c.updateVersion()}}),l=new ut;return c}const rh={box:new u.Box3(new u.Vector3(-1,-1,-1),new u.Vector3(1,1,1)),density:100,fallDirection:new u.Vector3(-1,-3,1).normalize(),fallVelocity:.02,wanderScale:.04,wanderVariance:2,color1:new u.Color(1,1,1),color2:new u.Color(.5,.5,1),minScale:.001,maxScale:.005,anisoScale:new u.Vector3(1,1,1)},ah={box:new u.Box3(new u.Vector3(-2,-1,-2),new u.Vector3(2,5,2)),density:10,fallDirection:new u.Vector3(0,-1,0),fallVelocity:2,wanderScale:.1,wanderVariance:1,color1:new u.Color(1,1,1),color2:new u.Color(.25,.25,.5),minScale:.005,maxScale:.01,anisoScale:new u.Vector3(.1,1,.1)};function oh({box:t,minY:A,numSplats:e,density:s,anisoScale:n,minScale:i,maxScale:r,fallDirection:a,fallVelocity:o,wanderScale:c,wanderVariance:l,color1:g,color2:I,opacity:h,onFrame:B}){t=t??new u.Box3(new u.Vector3(-1,-1,-1),new u.Vector3(1,1,1));const C=(t.max.x-t.min.x)*(t.max.y-t.min.y)*(t.max.z-t.min.z);s=s??100,e=e??Math.max(1,Math.min(1e6,Math.round(C*s)));const Q=zA(i??.001),E=zA(r??.005),f=et(((n==null?void 0:n.clone())??new u.Vector3(1,1,1)).normalize()),p=et((a??new u.Vector3(0,-1,0)).normalize()),d=zA(o??.02),w=zA(c??.01),D=zA(l??2),x=et(g??new u.Color(1,1,1)),y=et(I??new u.Color(.5,.5,1)),m=zA(h??1),N=zA(0),M=et(new u.Vector3(0,0,0)),S=et(t.min),U=et(t.max),F=zA(A??Number.NEGATIVE_INFINITY),b=ft(U,S),T=new kt({numSplats:e,generator:bA({index:"int"},{gsplat:AA},({index:O})=>{if(!O)throw new Error("index not defined");const L=He(O),eA=Et(L).outputs.w;let H=Qt(L),W=le(rA(eA,J("float",100)));W=Ke(rA(ue("float","PI"),W)),W=BA(Q,rA(W,ft(E,Q)));const _=rA(W,f),j=le(rA(eA,J("float",10))),P=le(eA),Z=oi(x,y,P),G=rA(Z,j),dA=He(KA({vectorType:"ivec2",x:O,y:J("int",6837)}));let lA=Qt(dA),yA=rA(Et(dA).outputs.w,D);yA=BA(N,yA),H=BA(H,M);const wA=ri(H,J("vec3",new u.Vector3(1,1,1)));H=BA(S,rA(b,wA));const SA=J("vec4",new u.Quaternion(0,0,0,1));lA=Ke(BA(Qt(yA),lA)),lA=rA(lA,w);let CA=BA(H,lA),YA=Et(CA).outputs.y;YA=ai(F,YA),CA=KA({vector:CA,y:YA});let DA=rt({flags:ue("uint","GSPLAT_FLAG_ACTIVE"),index:O,center:CA,scales:_,quaternion:SA,rgb:G,opacity:m});return DA=R.applyGsplat(DA),{gsplat:DA}},{globals:()=>[FA]}),update:({object:O,time:L,deltaTime:eA})=>{N.value=L,R.update(T);const H=p.value.clone().multiplyScalar(d.value*eA);M.value.add(H),O.visible=m.value>0,B==null||B({object:O,time:L,deltaTime:eA}),T.updateVersion()}}),R=new ut;return{snow:T,min:S,max:U,minY:F,color1:x,color2:y,opacity:m,fallVelocity:d,wanderVariance:D,wanderScale:w,fallDirection:p,minScale:Q,maxScale:E,anisoScale:f}}const gh=Object.freeze(Object.defineProperty({__proto__:null,DEFAULT_RAIN:ah,DEFAULT_SNOW:rh,snowBox:oh,staticBox:ih},Symbol.toStringTag,{value:"Module"}));function Co(t){return bA({gsplat:AA},{gsplat:AA},({gsplat:A})=>{if(!A)throw new Error("No gsplat input");let e=_e(A);const s=t.applyGsplat(A),n=Ct(s).outputs.center,i=_e(s),r=Yr(n,i),a=Li(r,J("float",0));e=as(a,rs(e),e);const o=BA(rA(e,J("float",.5)),J("float",.5));return A=rt({gsplat:A,rgb:o}),{gsplat:A}})}function ch(t){t.enableWorldToView=!0,t.worldModifier=Co(t.context.worldToView),t.updateGenerator()}function Bo(t,A,e,s){return bA({gsplat:AA},{gsplat:AA},({gsplat:n})=>{if(!n)throw new Error("No gsplat input");let{center:i}=Ct(n).outputs;i=t.apply(i);const{z:r}=Et(i).outputs;let a=ca(rs(r),A,e);return a=as(s,ft(J("float",1),a),a),n=rt({gsplat:n,r:a,g:a,b:a}),{gsplat:n}})}function lh(t,A,e,s){t.enableWorldToView=!0;const n=J("float",A),i=J("float",e),r=J("bool",s??!1);return t.worldModifier=Bo(t.context.worldToView,n,i,r),t.updateGenerator(),{minDepth:n,maxDepth:i,reverse:r}}const Ih=Object.freeze(Object.defineProperty({__proto__:null,makeDepthColorModifier:Bo,makeNormalColorModifier:Co,setDepthColor:lh,setWorldNormalColor:ch},Symbol.toStringTag,{value:"Module"})),$t=class $t{static createButton(A,e={}){const s=navigator.xr;if(!s)return null;const n=s,i=document.createElement("button");A.xr.enabled=!0,A.xr.setReferenceSpaceType("local");function r(){let g=null;async function I(C){console.log("onSessionStarted"),C.addEventListener("end",h),await A.xr.setSession(C),i.textContent="EXIT VR",g=C}function h(){console.log("onSessionEnded"),g==null||g.removeEventListener("end",h),i.textContent="ENTER VR",g=null}i.style.display="",i.style.cursor="pointer",i.style.left="calc(50% - 100px)",i.style.width="200px",i.style.height="100px",i.textContent="ENTER VR";const B={...e,optionalFeatures:[...e.optionalFeatures||[]]};i.onmouseenter=()=>{i.style.opacity="1.0"},i.onmouseleave=()=>{i.style.opacity="0.5"},i.onclick=()=>{g===null?(console.log("requesting session"),n.requestSession("immersive-vr",B).then(I)):(console.log("ending session"),g.end())}}function a(){i.style.display="none",i.style.cursor="auto",i.style.left="calc(50% - 75px)",i.style.width="150px",i.onmouseenter=null,i.onmouseleave=null,i.onclick=null}function o(){a(),i.textContent="VR NOT SUPPORTED"}function c(g){a(),console.warn("Exception when trying to call xr.isSessionSupported",g),i.textContent="VR NOT ALLOWED"}function l(g){g.style.position="absolute",g.style.bottom="20px",g.style.padding="12px 6px",g.style.border="1px solid #fff",g.style.borderRadius="4px",g.style.background="rgba(0,0,0,0.1)",g.style.color="#fff",g.style.font="normal 13px sans-serif",g.style.textAlign="center",g.style.opacity="0.5",g.style.outline="none",g.style.zIndex="999"}return i.id="VRButton",i.style.display="none",l(i),n.isSessionSupported("immersive-vr").then(g=>{g?r():o(),g&&$t.xrSessionIsGranted&&i.click()}).catch(c),i}static registerSessionGrantedListener(){const A=navigator.xr;if(!A)return null;const e=A;/WebXRViewer\//i.test(navigator.userAgent)||e.addEventListener("sessiongranted",()=>{$t.xrSessionIsGranted=!0})}};$t.xrSessionIsGranted=!1;let fe=$t;fe.registerSessionGrantedListener();const uh=.5,hh=.5,Ch=0;var Se=(t=>(t.w="wrist",t.t0="thumb-metacarpal",t.t1="thumb-phalanx-proximal",t.t2="thumb-phalanx-distal",t.t3="thumb-tip",t.i0="index-finger-metacarpal",t.i1="index-finger-phalanx-proximal",t.i2="index-finger-phalanx-intermediate",t.i3="index-finger-phalanx-distal",t.i4="index-finger-tip",t.m0="middle-finger-metacarpal",t.m1="middle-finger-phalanx-proximal",t.m2="middle-finger-phalanx-intermediate",t.m3="middle-finger-phalanx-distal",t.m4="middle-finger-tip",t.r0="ring-finger-metacarpal",t.r1="ring-finger-phalanx-proximal",t.r2="ring-finger-phalanx-intermediate",t.r3="ring-finger-phalanx-distal",t.r4="ring-finger-tip",t.p0="pinky-finger-metacarpal",t.p1="pinky-finger-phalanx-proximal",t.p2="pinky-finger-phalanx-intermediate",t.p3="pinky-finger-phalanx-distal",t.p4="pinky-finger-tip",t))(Se||{});const Is=Object.keys(Se),Bh=Is.length,Qh={w:0,t0:1,t1:2,t2:3,t3:4,i0:5,i1:6,i2:7,i3:8,i4:9,m0:10,m1:11,m2:12,m3:13,m4:14,r0:15,r1:16,r2:17,r3:18,r4:19,p0:20,p1:21,p2:22,p3:23,p4:24},_t={w:.02,t0:.02,t1:.014,t2:.0115,t3:.0085,i0:.022,i1:.012,i2:.0085,i3:.0075,i4:.0065,m0:.021,m1:.012,m2:.008,m3:.0075,m4:.0065,r0:.019,r1:.011,r2:.0075,r3:.007,r4:.006,p0:.012,p1:.01,p2:.007,p3:.0065,p4:.0055},Qo=[["w","t0","t1","t2","t3"],["w","i0","i1","i2","i3","i4"],["w","m0","m1","m2","m3","m4"],["w","r0","r1","r2","r3","r4"],["w","p0","p1","p2","p3","p4"]],Eo=[[8,10,8,6],[8,19,14,8,6],[8,19,14,8,6],[8,19,14,8,6],[8,19,14,8,6]],Eh=["t3","i4","m4","r4","p4"],fh=["i4","m4","r4","p4"];var us=(t=>(t.left="left",t.right="right",t))(us||{});const pe=Object.keys(us);class ph{constructor(){this.hands={},this.last={},this.values={},this.tests={},this.lastTests={},this.updated=!1}update({xr:A,xrFrame:e}){const s=A.getSession();if(!s)return;const n=A.getReferenceSpace();if(n&&e.getJointPose){this.last=this.hands,this.lastTests=this.tests,this.hands={},this.values={},this.tests={};for(const i of s.inputSources){if(!i.hand)continue;const r=i.handedness;this.hands[r]={};for(const a of Is){const o=i.hand.get(Se[a]);if(o){const c=e.getJointPose(o,n);if(c){const{position:l,orientation:g}=c.transform;this.hands[r][a]={position:new sA.Vector3(l.x,l.y,l.z),quaternion:new sA.Quaternion(g.x,g.y,g.z,g.w),radius:c.radius||.001}}}}}for(const i of pe)for(const{key:r,value:a}of[{key:`${i}AllTips`,value:this.allTipsTouching(i)},{key:`${i}IndexThumb`,value:this.touching(i,"i4",i,"t3")},{key:`${i}MiddleThumb`,value:this.touching(i,"m4",i,"t3")},{key:`${i}RingThumb`,value:this.touching(i,"r4",i,"t3")},{key:`${i}PinkyThumb`,value:this.touching(i,"p4",i,"t3")},{key:`${i}TriTips`,value:this.triTipsTouching(i)}])this.values[r]=a,this.tests[r]=a===1?!0:a===0?!1:this.lastTests[r]??!1}}makeGhostMesh(){const A=new sA.Vector3,e=new sA.Vector3(.01,.01,.01),s=new sA.Quaternion(0,0,0,1),n=new sA.Color(1,1,1),i=Math.PI*3;new sA.Color(1,1,1);let r=1;const a=new $A({onFrame:()=>{let o=0;for(const c of pe){const l=this.hands[c];for(const[g,I]of Qo.entries())for(let h=1;h<I.length;++h){const B=Eo[g][h-1]*2,C=h+1===I.length,Q=l==null?void 0:l[I[h-1]],E=l==null?void 0:l[I[h]];for(let f=0;f<B;++f){const p=(f+.5)/B;if(r=0,Q&&E){A.copy(Q.position).lerp(E.position,p),s.copy(Q.quaternion).slerp(E.quaternion,p);const d=_t[I[h-1]],w=_t[I[h]];let D=(1-p)*d+p*w;C&&p>.8&&(D*=Math.sqrt(1-((p-.8)/.2)**2)),e.set(.65*D,.5*D,.003),n.set(.55+.45*Math.sin(A.x*i),.55+.45*Math.sin(A.y*i),.55+.45*Math.sin(A.z*i)),c==="right"&&n.set(1-n.r,1-n.g,1-n.b),r=.75}a.packedSplats.setSplat(o,A,e,s,r,n),o+=1}}}a.packedSplats.numSplats=o,a.packedSplats.needsUpdate=!0,a.numSplats=o,a.updateVersion()}});return a}distance(A,e,s,n,i=!1){const r=i?this.last[A]:this.hands[A],a=i?this.last[s]:this.hands[s],o=r==null?void 0:r[e],c=a==null?void 0:a[n];return!o||!c?Number.POSITIVE_INFINITY:o.position.distanceTo(c.position)}separation(A,e,s,n,i=!1){const r=this.distance(A,e,s,n,i);return r===Number.POSITIVE_INFINITY?Number.POSITIVE_INFINITY:r-_t[e]-_t[n]}touching(A,e,s,n,i=!1){const r=this.separation(A,e,s,n,i);return r===Number.POSITIVE_INFINITY?Number.POSITIVE_INFINITY:1-Math.max(0,Math.min(1,r/.01-Ch))}allTipsTouching(A,e=!1){return Math.min(this.touching(A,"t3",A,"i4",e),this.touching(A,"i4",A,"m4",e),this.touching(A,"m4",A,"r4",e),this.touching(A,"r4",A,"p4",e))}triTipsTouching(A,e=!1){return Math.min(this.touching(A,"t3",A,"i4",e),this.touching(A,"i4",A,"m4",e),this.touching(A,"m4",A,"t3",e))}}class dh{constructor({xrHands:A,control:e,moveInertia:s,rotateInertia:n}){this.lastGrip={},this.lastPivot=new sA.Vector3,this.rotateVelocity=0,this.velocity=new sA.Vector3,this.xrHands=A,this.control=e,this.moveInertia=s??uh,this.rotateInertia=n??hh}update(A){var i,r,a,o,c;const e={};for(const l of pe){const g=this.xrHands.hands[l];g&&this.xrHands.tests[`${l}MiddleThumb`]&&(e[l]=new sA.Vector3().add(((i=g.t3)==null?void 0:i.position)??new sA.Vector3).add(((r=g.i4)==null?void 0:r.position)??new sA.Vector3).add(((a=g.m4)==null?void 0:a.position)??new sA.Vector3).add(((o=g.r4)==null?void 0:o.position)??new sA.Vector3).add(((c=g.p4)==null?void 0:c.position)??new sA.Vector3).multiplyScalar(1/5))}if(e.left&&e.right&&this.lastGrip.left&&this.lastGrip.right){const l=e.left.clone().add(e.right).multiplyScalar(.5),g=this.lastGrip.left.clone().add(this.lastGrip.right).multiplyScalar(.5);this.lastPivot=l;const I=l.clone().applyMatrix4(this.control.matrix);I.sub(g.clone().applyMatrix4(this.control.matrix)),I.multiplyScalar(1/A),this.velocity.lerp(I,1-Math.exp(-20*A));const h=Math.atan2(e.left.z-l.z,e.left.x-l.x),B=Math.atan2(this.lastGrip.left.z-g.z,this.lastGrip.left.x-g.x);let C=h-B;C>Math.PI?C-=Math.PI*2:C<-Math.PI&&(C+=Math.PI*2);const Q=C/A,E=Math.exp(-20*A);this.rotateVelocity=this.rotateVelocity*E+Q*(1-E)}else if(this.rotateVelocity*=Math.exp(-A/this.rotateInertia),e.left&&this.lastGrip.left){const l=e.left.clone().applyMatrix4(this.control.matrix);l.sub(this.lastGrip.left.clone().applyMatrix4(this.control.matrix)),l.multiplyScalar(1/A),this.velocity.lerp(l,1-Math.exp(-20*A))}else if(e.right&&this.lastGrip.right){const l=e.right.clone().applyMatrix4(this.control.matrix);l.sub(this.lastGrip.right.clone().applyMatrix4(this.control.matrix)),l.multiplyScalar(1/A),this.velocity.lerp(l,1-Math.exp(-20*A))}else this.velocity.multiplyScalar(Math.exp(-A/this.moveInertia));const s=this.lastPivot.clone().negate(),n=new sA.Matrix4().makeTranslation(s).premultiply(new sA.Matrix4().makeRotationY(this.rotateVelocity*A)).premultiply(new sA.Matrix4().makeTranslation(this.lastPivot));this.control.matrix.multiply(n),this.control.matrix.decompose(this.control.position,this.control.quaternion,this.control.scale),this.control.updateMatrixWorld(!0),this.control.position.sub(this.velocity.clone().multiplyScalar(A)),this.lastGrip=e}}const yh=1,wh=2,mh=.002,xh=.006,Sh=.0015,Dh=.15,Mh=.15,vh=.1,bh=2,Fh=1,kh=200,Nh=400,Th=50,Uh={KeyW:new u.Vector3(0,0,-1),KeyS:new u.Vector3(0,0,1),KeyA:new u.Vector3(-1,0,0),KeyD:new u.Vector3(1,0,0),KeyR:new u.Vector3(0,1,0),KeyF:new u.Vector3(0,-1,0)},Gh={ArrowUp:new u.Vector3(0,0,-1),ArrowDown:new u.Vector3(0,0,1),ArrowLeft:new u.Vector3(-1,0,0),ArrowRight:new u.Vector3(1,0,0),PageUp:new u.Vector3(0,1,0),PageDown:new u.Vector3(0,-1,0)},Rh={KeyQ:new u.Vector3(0,0,1),KeyE:new u.Vector3(0,0,-1)},Yh={Home:new u.Vector3(0,-1,0),End:new u.Vector3(0,1,0),Insert:new u.Vector3(-1,0,0),Delete:new u.Vector3(1,0,0)};class Jh{constructor({canvas:A}){this.lastTime=0,this.fpsMovement=new fo({}),this.pointerControls=new po({canvas:A})}update(A){const e=performance.now(),s=(e-(this.lastTime||e))/1e3;this.lastTime=e,this.fpsMovement.update(s,A),this.pointerControls.update(s,A)}}class fo{constructor({moveSpeed:A,rollSpeed:e,stickThreshold:s,rotateSpeed:n,keycodeMoveMapping:i,keycodeRotateMapping:r,gamepadMapping:a,capsMultiplier:o,shiftMultiplier:c,ctrlMultiplier:l,xr:g}={}){this.enable=!0,this.moveSpeed=A??yh,this.rollSpeed=e??wh,this.stickThreshold=s??vh,this.rotateSpeed=n??bh,this.keycodeMoveMapping=i??{...Uh,...Gh},this.keycodeRotateMapping=r??{...Rh,...Yh},this.gamepadMapping=a??{4:"rollLeft",5:"rollRight",6:"ctrl",7:"shift"},this.capsMultiplier=o??10,this.shiftMultiplier=c??5,this.ctrlMultiplier=l??1/5,this.xr=g,this.keydown={},this.keycode={},document.addEventListener("keydown",I=>{this.keydown[I.key]=!0,this.keycode[I.code]=!0}),document.addEventListener("keyup",I=>{this.keydown[I.key]=!1,this.keycode[I.code]=!1}),window.addEventListener("blur",()=>{this.keydown={},this.keycode={}})}update(A,e){var l,g;if(!this.enable)return;const s=[new u.Vector2,new u.Vector2],n=navigator.getGamepads()[0];n&&(s[0].set(n.axes[0],n.axes[1]),s[1].set(n.axes[2],n.axes[3]));const i=(n==null?void 0:n.buttons.map(I=>I.pressed))||[],r=Array.from(((g=(l=this.xr)==null?void 0:l.getSession())==null?void 0:g.inputSources)??[]);for(const I of r){const h=I.gamepad;if(h)switch(I.handedness){case"none":{s[0].x+=h.axes[0],s[0].y+=h.axes[1],s[1].x+=h.axes[2],s[1].y+=h.axes[3];break}case"left":{s[0].x+=h.axes[2],s[0].y+=h.axes[3];break}case"right":{s[1].x+=h.axes[2],s[1].y+=h.axes[3];break}}}for(const I of s)I.x=Math.abs(I.x)>=this.stickThreshold?I.x:0,I.y=Math.abs(I.y)>=this.stickThreshold?I.y:0;const a=new u.Vector3(s[1].x,s[1].y,0).multiplyScalar(this.rotateSpeed);for(const[I,h]of Object.entries(this.keycodeRotateMapping))this.keycode[I]&&a.add(h);for(const I in this.gamepadMapping)if(i[Number.parseInt(I)])switch(this.gamepadMapping[I]){case"rollLeft":a.z+=1;break;case"rollRight":a.z-=1;break}if(a.multiply(new u.Vector3(this.rotateSpeed,this.rotateSpeed,this.rollSpeed)),a.manhattanLength()>0){a.multiplyScalar(A);const I=new u.Euler().setFromQuaternion(e.quaternion,"YXZ");I.y-=a.x,I.x=Math.max(-Math.PI/2,Math.min(Math.PI/2,I.x-a.y)),I.z=Math.max(-Math.PI,Math.min(Math.PI,I.z+a.z)),e.quaternion.setFromEuler(I)}const o=new u.Vector3(s[0].x,0,s[0].y);for(const[I,h]of Object.entries(this.keycodeMoveMapping))this.keycode[I]&&o.add(h);let c=1;this.keydown.CapsLock&&(c*=this.capsMultiplier),(this.keycode.ShiftLeft||this.keycode.ShiftRight)&&(c*=this.shiftMultiplier),(this.keycode.ControlLeft||this.keycode.ControlRight)&&(c*=this.ctrlMultiplier);for(const I in this.gamepadMapping)if(i[Number.parseInt(I)])switch(this.gamepadMapping[I]){case"shift":c*=this.shiftMultiplier;break;case"ctrl":c*=this.ctrlMultiplier;break}o.applyQuaternion(e.quaternion),e.position.add(o.multiplyScalar(this.moveSpeed*c*A))}}class po{constructor({canvas:A,rotateSpeed:e,slideSpeed:s,scrollSpeed:n,swapRotateSlide:i,reverseRotate:r,reverseSlide:a,reverseSwipe:o,reverseScroll:c,moveInertia:l,rotateInertia:g,pointerRollScale:I,doublePress:h}){this.enable=!0,this.canvas=A,this.rotateSpeed=e??mh,this.slideSpeed=s??xh,this.scrollSpeed=n??Sh,this.swapRotateSlide=i??!1,this.reverseRotate=r??!1,this.reverseSlide=a??!1,this.reverseSwipe=o??!1,this.reverseScroll=c??!1,this.moveInertia=l??Mh,this.rotateInertia=g??Dh,this.pointerRollScale=I??Fh,this.doublePress=h??(()=>{}),this.doublePressLimitMs=Nh,this.doublePressDistance=Th,this.lastUp=null,this.rotating=null,this.sliding=null,this.dualPress=!1,this.scroll=new u.Vector3,this.rotateVelocity=new u.Vector3,this.moveVelocity=new u.Vector3,A.addEventListener("pointerdown",C=>{const Q=this.getPointerPosition(C),E=Q.clone(),f=Q.clone(),p=!this.swapRotateSlide&&!this.rotating&&(C.pointerType!=="mouse"||C.button===0)||this.swapRotateSlide&&this.sliding&&!this.rotating&&(C.pointerType!=="mouse"||C.button===1),{pointerId:d,timeStamp:w}=C;if(p)this.rotating={initial:E,last:f,position:Q,pointerId:d,timeStamp:w},A.setPointerCapture(C.pointerId),this.dualPress=!1;else if(!this.sliding){const D=C.pointerType==="mouse"?C.button:void 0;this.sliding={initial:E,last:f,position:Q,pointerId:d,button:D,timeStamp:w},A.setPointerCapture(C.pointerId),this.dualPress=this.rotating!=null&&w-this.rotating.timeStamp<kh}});const B=C=>{var f,p;((f=this.rotating)==null?void 0:f.pointerId)===C.pointerId?(this.rotating=null,A.releasePointerCapture(C.pointerId),this.dualPress&&this.sliding&&(A.releasePointerCapture(this.sliding.pointerId),this.sliding=null)):((p=this.sliding)==null?void 0:p.pointerId)===C.pointerId&&(this.sliding=null,A.releasePointerCapture(C.pointerId),this.dualPress&&this.rotating&&(A.releasePointerCapture(this.rotating.pointerId),this.rotating=null));const Q=this.getPointerPosition(C),E=this.lastUp;if(this.lastUp={position:Q,time:C.timeStamp},E&&E.position.distanceTo(Q)<this.doublePressDistance){const w=C.timeStamp-E.time;w<this.doublePressLimitMs&&(this.lastUp=null,this.doublePress({position:Q,intervalMs:w}))}};document.addEventListener("pointerup",B),document.addEventListener("pointercancel",B),document.addEventListener("pointermove",C=>{var Q,E;((Q=this.rotating)==null?void 0:Q.pointerId)===C.pointerId?this.rotating.position=this.getPointerPosition(C):((E=this.sliding)==null?void 0:E.pointerId)===C.pointerId&&(this.sliding.position=this.getPointerPosition(C))}),A.addEventListener("contextmenu",C=>{C.preventDefault()}),A.addEventListener("wheel",C=>{this.scroll.add(new u.Vector3(C.deltaX,C.deltaY,C.deltaZ)),C.preventDefault()})}getPointerPosition(A){const e=this.canvas.getBoundingClientRect();return new u.Vector2(A.clientX-e.left,A.clientY-e.top)}update(A,e){if(!this.enable)return;if(this.dualPress&&this.rotating&&this.sliding){const n=[this.rotating.position.clone().sub(this.rotating.last),this.sliding.position.clone().sub(this.sliding.last)],i=n[0].dot(n[1]);if(i>=.2){const r=n[0].clone().add(n[1]),a=new u.Vector3(r.x,-r.y,0);a.multiplyScalar(this.slideSpeed*(this.reverseSwipe?1:-1)),a.applyQuaternion(e.quaternion),e.position.add(a),this.moveVelocity=a.clone().multiplyScalar(1/A)}else if(i<=-.2){const r=this.sliding.last.clone().sub(this.rotating.last),a=r.length();r.multiplyScalar(1/a).normalize();const o=new u.Vector2(-r.y,r.x),c=[n[0].dot(r),n[1].dot(r)],l=[n[0].dot(o),n[1].dot(o)],g=this.rotating.last.clone().add(this.sliding.last).multiplyScalar(.5);let I=new u.Vector3;if(e instanceof u.Camera){const f=new u.Vector2(g.x/this.canvas.clientWidth*2-1,-(g.y/this.canvas.clientHeight)*2+1),p=new u.Raycaster;p.setFromCamera(f,e),I=p.ray.direction}const h=c[1]-c[0],B=I.multiplyScalar(h*this.slideSpeed);e.position.add(B),this.moveVelocity=B.clone().multiplyScalar(1/A);const C=[Math.atan(l[0]/(-.5*a)),Math.atan(l[1]/(.5*a))],Q=.5*(C[0]+C[1])*this.pointerRollScale,E=new u.Euler().setFromQuaternion(e.quaternion,"YXZ");E.z=Math.max(-Math.PI,Math.min(Math.PI,E.z+.5*Q)),e.quaternion.setFromEuler(E)}this.rotating.last.copy(this.rotating.position),this.sliding.last.copy(this.sliding.position)}else{const n=new u.Vector3;if(this.rotating&&!this.dualPress){const r=this.rotating.position.clone().sub(this.rotating.last);this.rotating.last.copy(this.rotating.position),n.set(r.x,r.y,0),n.multiplyScalar(this.rotateSpeed*(this.reverseRotate?-1:1)),this.rotateVelocity=n.clone().multiplyScalar(1/A)}else this.rotateVelocity.multiplyScalar(Math.exp(-A/this.rotateInertia)),n.addScaledVector(this.rotateVelocity,A);const i=new u.Euler().setFromQuaternion(e.quaternion,"YXZ");if(i.y-=n.x,i.x=Math.max(-Math.PI/2,Math.min(Math.PI/2,i.x-n.y)),i.z*=Math.exp(-0*A),e.quaternion.setFromEuler(i),this.sliding&&!this.dualPress){const r=this.sliding.position.clone().sub(this.sliding.last);this.sliding.last.copy(this.sliding.position);const a=this.sliding.button!==2?new u.Vector3(r.x,0,r.y):new u.Vector3(r.x,-r.y,0);a.multiplyScalar(this.slideSpeed*(this.reverseSlide?-1:1)),a.applyQuaternion(e.quaternion),e.position.add(a),this.moveVelocity=a.clone().multiplyScalar(1/A)}else this.moveVelocity.multiplyScalar(Math.exp(-A/this.moveInertia)),e.position.addScaledVector(this.moveVelocity,A)}const s=this.scroll.multiplyScalar(this.scrollSpeed);s.set(s.x,s.z,s.y),this.reverseScroll&&s.multiplyScalar(-1),s.applyQuaternion(e.quaternion),e.position.add(s),this.scroll.set(0,0,0)}}exports.FINGER_TIPS=fh;exports.FpsMovement=fo;exports.HANDS=pe;exports.Hand=us;exports.HandMovement=dh;exports.JOINT_IDS=Is;exports.JOINT_INDEX=Qh;exports.JOINT_RADIUS=_t;exports.JOINT_SEGMENTS=Qo;exports.JOINT_SEGMENT_STEPS=Eo;exports.JOINT_TIPS=Eh;exports.JointEnum=Se;exports.LN_SCALE_MAX=NA;exports.LN_SCALE_MIN=kA;exports.NUM_JOINTS=Bh;exports.PackedSplats=_A;exports.PlyReader=Ot;exports.PointerControls=po;exports.Readback=Pt;exports.Sint8ToFloat=_n;exports.SparkControls=Jh;exports.SparkRenderer=jt;exports.SparkViewpoint=Wt;exports.SplatAccumulator=Ie;exports.SplatEdit=Xt;exports.SplatEditRgbaBlendMode=Xa;exports.SplatEditSdf=Oa;exports.SplatEditSdfType=Pa;exports.SplatEdits=Wa;exports.SplatFileType=St;exports.SplatGenerator=kt;exports.SplatLoader=ro;exports.SplatMesh=$A;exports.SplatModifier=to;exports.SplatSkinning=Wu;exports.SplatTransformer=ut;exports.SpzReader=co;exports.SpzWriter=OA;exports.Uint8ToFloat=Ln;exports.VRButton=fe;exports.XrHands=ph;exports.constructAxes=th;exports.constructGrid=Ah;exports.constructSpherePoints=eh;exports.defines=Ig;exports.dyno=lu;exports.flipPixels=Vn;exports.floatToSint8=Kt;exports.floatToUint8=vA;exports.fromHalf=pA;exports.generators=gh;exports.getSplatFileType=os;exports.imageSplats=nh;exports.isAndroid=Kn;exports.isMobile=Hn;exports.isOculus=$n;exports.isPcSogs=bu;exports.modifiers=Ih;exports.pixelsToPngUrl=Pn;exports.setPackedSplat=Ce;exports.textSplats=sh;exports.toHalf=at;exports.transcodeSpz=Ou;exports.unpackSplat=Be;exports.unpackSplats=cs;exports.utils=Rc;
1196
+ `),l=document.createElement("canvas"),g=l.getContext("2d");if(!g)throw new Error("Failed to create canvas context");g.font=`${e}px ${A}`,g.textAlign=r;const I=g.measureText(""),h=I.fontBoundingBoxAscent+I.fontBoundingBoxDescent;let B=Number.POSITIVE_INFINITY,C=Number.NEGATIVE_INFINITY,Q=Number.POSITIVE_INFINITY,E=Number.NEGATIVE_INFINITY;for(let F=0;F<c.length;++F){const b=g.measureText(c[F]),T=h*a*F;B=Math.min(B,-b.actualBoundingBoxLeft),C=Math.max(C,b.actualBoundingBoxRight),Q=Math.min(Q,T-b.actualBoundingBoxAscent),E=Math.max(E,T+b.actualBoundingBoxDescent)}const f=Math.floor(B),p=Math.floor(Q),d=Math.ceil(C)-f,w=Math.ceil(E)-p;l.width=d,l.height=w,g.font=`${e}px ${A}`,g.textAlign=r,g.textBaseline="alphabetic",g.fillStyle="#FFFFFF";for(let F=0;F<c.length;++F){const b=h*a*F-p;g.fillText(c[F],-f,b)}const D=g.getImageData(0,0,d,w),x=new Uint8Array(D.data.buffer),y=new LA,m=new u.Vector3,N=new u.Vector3().setScalar(i*o),M=new u.Quaternion(0,0,0,1);n=n??new u.Color(1,1,1);let S=0;for(let F=0;F<w;++F)for(let b=0;b<d;++b){const T=x[S+3];if(T>0){const R=T/255;m.set(b-.5*(d-1),.5*(w-1)-F,0),m.multiplyScalar(o),y.pushSplat(m,N,M,R,n)}S+=4}const U=new VA({packedSplats:y});return U.recolor=s,U}function nh({url:t,dotRadius:A,subXY:e,forEachSplat:s}){return A=A??.8,e=Math.max(1,Math.floor(e??1)),new VA({constructSplats:async n=>new Promise((i,r)=>{const a=new Image;a.crossOrigin="anonymous",a.onerror=r,a.onload=()=>{const{width:o,height:c}=a,l=document.createElement("canvas");l.width=o,l.height=c;const g=l.getContext("2d");if(!g){r(new Error("Failed to create canvas context"));return}g.imageSmoothingEnabled=!0,g.imageSmoothingQuality="high";const I=Math.round(o/e),h=Math.round(c/e);g.drawImage(a,0,0,I,h);try{const B=g.getImageData(0,0,I,h),C=new Uint8Array(B.data.buffer),Q=new u.Vector3,E=new u.Vector3().setScalar(A),f=new u.Quaternion(0,0,0,1),p=new u.Color;let d=0;for(let w=0;w<h;++w)for(let D=0;D<I;++D){const x=d*4,y=C[x+3];if(y>0){let m=y/255;p.set(C[x+0]/255,C[x+1]/255,C[x+2]/255),Q.set(D-.5*(I-1),.5*(h-1)-w,0),E.setScalar(A),f.set(0,0,0,1);let N=!0;if(s){const M=s(I,h,d,Q,E,f,m,p);m=M??m,N=M!==null}N&&n.pushSplat(Q,E,f,m,p)}d+=1}i()}catch(B){r(B)}},a.src=t})})}function ih({box:t,cells:A,dotScale:e,color:s,opacity:n}){A.x=Math.max(1,Math.round(A.x)),A.y=Math.max(1,Math.round(A.y)),A.z=Math.max(1,Math.round(A.z)),n=n??1;const i=A.x*A.y*A.z,r=J("int",A.x),a=J("int",A.y);J("int",A.z);const o=zA(0),c=new kt({numSplats:i,generator:bA({index:"int"},{gsplat:AA},({index:g})=>{if(!g)throw new Error("index is undefined");const I=ze(g,r),h=ce(g,r),B=ze(h,a),C=ce(h,a),Q=KA({vectorType:"ivec3",x:I,y:B,z:C}),E=ir(o),f=KA({vectorType:"ivec2",x:g,y:E}),p=ga(f),d=J("vec3",t.min),w=J("vec3",t.max),D=ft(w,d),x=ce(BA(Qt(Q),p),J("vec3",A));let y,m,N;s?(y=J("float",s.r),m=J("float",s.g),N=J("float",s.b)):{r:y,g:m,b:N}=Et(x).outputs;const M=KA({vectorType:"vec4",r:y,g:m,b:N,a:J("float",n)}),S=BA(d,rA(D,x)),U=Qt(J("float",e)),F=J("vec4",new u.Quaternion(0,0,0,1));let b=rt({flags:ue("uint","GSPLAT_FLAG_ACTIVE"),index:g,center:S,scales:U,quaternion:F,rgba:M});return b=l.applyGsplat(b),{gsplat:b}},{globals:()=>[FA]}),update:({time:g})=>{o.value=g,l.update(c),c.updateVersion()}}),l=new ut;return c}const rh={box:new u.Box3(new u.Vector3(-1,-1,-1),new u.Vector3(1,1,1)),density:100,fallDirection:new u.Vector3(-1,-3,1).normalize(),fallVelocity:.02,wanderScale:.04,wanderVariance:2,color1:new u.Color(1,1,1),color2:new u.Color(.5,.5,1),minScale:.001,maxScale:.005,anisoScale:new u.Vector3(1,1,1)},ah={box:new u.Box3(new u.Vector3(-2,-1,-2),new u.Vector3(2,5,2)),density:10,fallDirection:new u.Vector3(0,-1,0),fallVelocity:2,wanderScale:.1,wanderVariance:1,color1:new u.Color(1,1,1),color2:new u.Color(.25,.25,.5),minScale:.005,maxScale:.01,anisoScale:new u.Vector3(.1,1,.1)};function oh({box:t,minY:A,numSplats:e,density:s,anisoScale:n,minScale:i,maxScale:r,fallDirection:a,fallVelocity:o,wanderScale:c,wanderVariance:l,color1:g,color2:I,opacity:h,onFrame:B}){t=t??new u.Box3(new u.Vector3(-1,-1,-1),new u.Vector3(1,1,1));const C=(t.max.x-t.min.x)*(t.max.y-t.min.y)*(t.max.z-t.min.z);s=s??100,e=e??Math.max(1,Math.min(1e6,Math.round(C*s)));const Q=zA(i??.001),E=zA(r??.005),f=et(((n==null?void 0:n.clone())??new u.Vector3(1,1,1)).normalize()),p=et((a??new u.Vector3(0,-1,0)).normalize()),d=zA(o??.02),w=zA(c??.01),D=zA(l??2),x=et(g??new u.Color(1,1,1)),y=et(I??new u.Color(.5,.5,1)),m=zA(h??1),N=zA(0),M=et(new u.Vector3(0,0,0)),S=et(t.min),U=et(t.max),F=zA(A??Number.NEGATIVE_INFINITY),b=ft(U,S),T=new kt({numSplats:e,generator:bA({index:"int"},{gsplat:AA},({index:O})=>{if(!O)throw new Error("index not defined");const _=He(O),eA=Et(_).outputs.w;let H=Qt(_),W=le(rA(eA,J("float",100)));W=Ke(rA(ue("float","PI"),W)),W=BA(Q,rA(W,ft(E,Q)));const L=rA(W,f),j=le(rA(eA,J("float",10))),P=le(eA),Z=oi(x,y,P),G=rA(Z,j),dA=He(KA({vectorType:"ivec2",x:O,y:J("int",6837)}));let lA=Qt(dA),yA=rA(Et(dA).outputs.w,D);yA=BA(N,yA),H=BA(H,M);const wA=ri(H,J("vec3",new u.Vector3(1,1,1)));H=BA(S,rA(b,wA));const SA=J("vec4",new u.Quaternion(0,0,0,1));lA=Ke(BA(Qt(yA),lA)),lA=rA(lA,w);let CA=BA(H,lA),YA=Et(CA).outputs.y;YA=ai(F,YA),CA=KA({vector:CA,y:YA});let DA=rt({flags:ue("uint","GSPLAT_FLAG_ACTIVE"),index:O,center:CA,scales:L,quaternion:SA,rgb:G,opacity:m});return DA=R.applyGsplat(DA),{gsplat:DA}},{globals:()=>[FA]}),update:({object:O,time:_,deltaTime:eA})=>{N.value=_,R.update(T);const H=p.value.clone().multiplyScalar(d.value*eA);M.value.add(H),O.visible=m.value>0,B==null||B({object:O,time:_,deltaTime:eA}),T.updateVersion()}}),R=new ut;return{snow:T,min:S,max:U,minY:F,color1:x,color2:y,opacity:m,fallVelocity:d,wanderVariance:D,wanderScale:w,fallDirection:p,minScale:Q,maxScale:E,anisoScale:f}}const gh=Object.freeze(Object.defineProperty({__proto__:null,DEFAULT_RAIN:ah,DEFAULT_SNOW:rh,snowBox:oh,staticBox:ih},Symbol.toStringTag,{value:"Module"}));function Co(t){return bA({gsplat:AA},{gsplat:AA},({gsplat:A})=>{if(!A)throw new Error("No gsplat input");let e=Le(A);const s=t.applyGsplat(A),n=Ct(s).outputs.center,i=Le(s),r=Yr(n,i),a=_i(r,J("float",0));e=as(a,rs(e),e);const o=BA(rA(e,J("float",.5)),J("float",.5));return A=rt({gsplat:A,rgb:o}),{gsplat:A}})}function ch(t){t.enableWorldToView=!0,t.worldModifier=Co(t.context.worldToView),t.updateGenerator()}function Bo(t,A,e,s){return bA({gsplat:AA},{gsplat:AA},({gsplat:n})=>{if(!n)throw new Error("No gsplat input");let{center:i}=Ct(n).outputs;i=t.apply(i);const{z:r}=Et(i).outputs;let a=ca(rs(r),A,e);return a=as(s,ft(J("float",1),a),a),n=rt({gsplat:n,r:a,g:a,b:a}),{gsplat:n}})}function lh(t,A,e,s){t.enableWorldToView=!0;const n=J("float",A),i=J("float",e),r=J("bool",s??!1);return t.worldModifier=Bo(t.context.worldToView,n,i,r),t.updateGenerator(),{minDepth:n,maxDepth:i,reverse:r}}const Ih=Object.freeze(Object.defineProperty({__proto__:null,makeDepthColorModifier:Bo,makeNormalColorModifier:Co,setDepthColor:lh,setWorldNormalColor:ch},Symbol.toStringTag,{value:"Module"})),Vt=class Vt{static createButton(A,e={}){const s=navigator.xr;if(!s)return null;const n=s,i=document.createElement("button");A.xr.enabled=!0,A.xr.setReferenceSpaceType("local");function r(){let g=null;async function I(C){console.log("onSessionStarted"),C.addEventListener("end",h),await A.xr.setSession(C),i.textContent="EXIT VR",g=C}function h(){console.log("onSessionEnded"),g==null||g.removeEventListener("end",h),i.textContent="ENTER VR",g=null}i.style.display="",i.style.cursor="pointer",i.style.left="calc(50% - 100px)",i.style.width="200px",i.style.height="100px",i.textContent="ENTER VR";const B={...e,optionalFeatures:[...e.optionalFeatures||[]]};i.onmouseenter=()=>{i.style.opacity="1.0"},i.onmouseleave=()=>{i.style.opacity="0.5"},i.onclick=()=>{g===null?(console.log("requesting session"),n.requestSession("immersive-vr",B).then(I)):(console.log("ending session"),g.end())}}function a(){i.style.display="none",i.style.cursor="auto",i.style.left="calc(50% - 75px)",i.style.width="150px",i.onmouseenter=null,i.onmouseleave=null,i.onclick=null}function o(){a(),i.textContent="VR NOT SUPPORTED"}function c(g){a(),console.warn("Exception when trying to call xr.isSessionSupported",g),i.textContent="VR NOT ALLOWED"}function l(g){g.style.position="absolute",g.style.bottom="20px",g.style.padding="12px 6px",g.style.border="1px solid #fff",g.style.borderRadius="4px",g.style.background="rgba(0,0,0,0.1)",g.style.color="#fff",g.style.font="normal 13px sans-serif",g.style.textAlign="center",g.style.opacity="0.5",g.style.outline="none",g.style.zIndex="999"}return i.id="VRButton",i.style.display="none",l(i),n.isSessionSupported("immersive-vr").then(g=>{g?r():o(),g&&Vt.xrSessionIsGranted&&i.click()}).catch(c),i}static registerSessionGrantedListener(){const A=navigator.xr;if(!A)return null;const e=A;/WebXRViewer\//i.test(navigator.userAgent)||e.addEventListener("sessiongranted",()=>{Vt.xrSessionIsGranted=!0})}};Vt.xrSessionIsGranted=!1;let fe=Vt;fe.registerSessionGrantedListener();const uh=.5,hh=.5,Ch=0;var Se=(t=>(t.w="wrist",t.t0="thumb-metacarpal",t.t1="thumb-phalanx-proximal",t.t2="thumb-phalanx-distal",t.t3="thumb-tip",t.i0="index-finger-metacarpal",t.i1="index-finger-phalanx-proximal",t.i2="index-finger-phalanx-intermediate",t.i3="index-finger-phalanx-distal",t.i4="index-finger-tip",t.m0="middle-finger-metacarpal",t.m1="middle-finger-phalanx-proximal",t.m2="middle-finger-phalanx-intermediate",t.m3="middle-finger-phalanx-distal",t.m4="middle-finger-tip",t.r0="ring-finger-metacarpal",t.r1="ring-finger-phalanx-proximal",t.r2="ring-finger-phalanx-intermediate",t.r3="ring-finger-phalanx-distal",t.r4="ring-finger-tip",t.p0="pinky-finger-metacarpal",t.p1="pinky-finger-phalanx-proximal",t.p2="pinky-finger-phalanx-intermediate",t.p3="pinky-finger-phalanx-distal",t.p4="pinky-finger-tip",t))(Se||{});const Is=Object.keys(Se),Bh=Is.length,Qh={w:0,t0:1,t1:2,t2:3,t3:4,i0:5,i1:6,i2:7,i3:8,i4:9,m0:10,m1:11,m2:12,m3:13,m4:14,r0:15,r1:16,r2:17,r3:18,r4:19,p0:20,p1:21,p2:22,p3:23,p4:24},Lt={w:.02,t0:.02,t1:.014,t2:.0115,t3:.0085,i0:.022,i1:.012,i2:.0085,i3:.0075,i4:.0065,m0:.021,m1:.012,m2:.008,m3:.0075,m4:.0065,r0:.019,r1:.011,r2:.0075,r3:.007,r4:.006,p0:.012,p1:.01,p2:.007,p3:.0065,p4:.0055},Qo=[["w","t0","t1","t2","t3"],["w","i0","i1","i2","i3","i4"],["w","m0","m1","m2","m3","m4"],["w","r0","r1","r2","r3","r4"],["w","p0","p1","p2","p3","p4"]],Eo=[[8,10,8,6],[8,19,14,8,6],[8,19,14,8,6],[8,19,14,8,6],[8,19,14,8,6]],Eh=["t3","i4","m4","r4","p4"],fh=["i4","m4","r4","p4"];var us=(t=>(t.left="left",t.right="right",t))(us||{});const pe=Object.keys(us);class ph{constructor(){this.hands={},this.last={},this.values={},this.tests={},this.lastTests={},this.updated=!1}update({xr:A,xrFrame:e}){const s=A.getSession();if(!s)return;const n=A.getReferenceSpace();if(n&&e.getJointPose){this.last=this.hands,this.lastTests=this.tests,this.hands={},this.values={},this.tests={};for(const i of s.inputSources){if(!i.hand)continue;const r=i.handedness;this.hands[r]={};for(const a of Is){const o=i.hand.get(Se[a]);if(o){const c=e.getJointPose(o,n);if(c){const{position:l,orientation:g}=c.transform;this.hands[r][a]={position:new sA.Vector3(l.x,l.y,l.z),quaternion:new sA.Quaternion(g.x,g.y,g.z,g.w),radius:c.radius||.001}}}}}for(const i of pe)for(const{key:r,value:a}of[{key:`${i}AllTips`,value:this.allTipsTouching(i)},{key:`${i}IndexThumb`,value:this.touching(i,"i4",i,"t3")},{key:`${i}MiddleThumb`,value:this.touching(i,"m4",i,"t3")},{key:`${i}RingThumb`,value:this.touching(i,"r4",i,"t3")},{key:`${i}PinkyThumb`,value:this.touching(i,"p4",i,"t3")},{key:`${i}TriTips`,value:this.triTipsTouching(i)}])this.values[r]=a,this.tests[r]=a===1?!0:a===0?!1:this.lastTests[r]??!1}}makeGhostMesh(){const A=new sA.Vector3,e=new sA.Vector3(.01,.01,.01),s=new sA.Quaternion(0,0,0,1),n=new sA.Color(1,1,1),i=Math.PI*3;new sA.Color(1,1,1);let r=1;const a=new VA({onFrame:()=>{let o=0;for(const c of pe){const l=this.hands[c];for(const[g,I]of Qo.entries())for(let h=1;h<I.length;++h){const B=Eo[g][h-1]*2,C=h+1===I.length,Q=l==null?void 0:l[I[h-1]],E=l==null?void 0:l[I[h]];for(let f=0;f<B;++f){const p=(f+.5)/B;if(r=0,Q&&E){A.copy(Q.position).lerp(E.position,p),s.copy(Q.quaternion).slerp(E.quaternion,p);const d=Lt[I[h-1]],w=Lt[I[h]];let D=(1-p)*d+p*w;C&&p>.8&&(D*=Math.sqrt(1-((p-.8)/.2)**2)),e.set(.65*D,.5*D,.003),n.set(.55+.45*Math.sin(A.x*i),.55+.45*Math.sin(A.y*i),.55+.45*Math.sin(A.z*i)),c==="right"&&n.set(1-n.r,1-n.g,1-n.b),r=.75}a.packedSplats.setSplat(o,A,e,s,r,n),o+=1}}}a.packedSplats.numSplats=o,a.packedSplats.needsUpdate=!0,a.numSplats=o,a.updateVersion()}});return a}distance(A,e,s,n,i=!1){const r=i?this.last[A]:this.hands[A],a=i?this.last[s]:this.hands[s],o=r==null?void 0:r[e],c=a==null?void 0:a[n];return!o||!c?Number.POSITIVE_INFINITY:o.position.distanceTo(c.position)}separation(A,e,s,n,i=!1){const r=this.distance(A,e,s,n,i);return r===Number.POSITIVE_INFINITY?Number.POSITIVE_INFINITY:r-Lt[e]-Lt[n]}touching(A,e,s,n,i=!1){const r=this.separation(A,e,s,n,i);return r===Number.POSITIVE_INFINITY?Number.POSITIVE_INFINITY:1-Math.max(0,Math.min(1,r/.01-Ch))}allTipsTouching(A,e=!1){return Math.min(this.touching(A,"t3",A,"i4",e),this.touching(A,"i4",A,"m4",e),this.touching(A,"m4",A,"r4",e),this.touching(A,"r4",A,"p4",e))}triTipsTouching(A,e=!1){return Math.min(this.touching(A,"t3",A,"i4",e),this.touching(A,"i4",A,"m4",e),this.touching(A,"m4",A,"t3",e))}}class dh{constructor({xrHands:A,control:e,moveInertia:s,rotateInertia:n}){this.lastGrip={},this.lastPivot=new sA.Vector3,this.rotateVelocity=0,this.velocity=new sA.Vector3,this.xrHands=A,this.control=e,this.moveInertia=s??uh,this.rotateInertia=n??hh}update(A){var i,r,a,o,c;const e={};for(const l of pe){const g=this.xrHands.hands[l];g&&this.xrHands.tests[`${l}MiddleThumb`]&&(e[l]=new sA.Vector3().add(((i=g.t3)==null?void 0:i.position)??new sA.Vector3).add(((r=g.i4)==null?void 0:r.position)??new sA.Vector3).add(((a=g.m4)==null?void 0:a.position)??new sA.Vector3).add(((o=g.r4)==null?void 0:o.position)??new sA.Vector3).add(((c=g.p4)==null?void 0:c.position)??new sA.Vector3).multiplyScalar(1/5))}if(e.left&&e.right&&this.lastGrip.left&&this.lastGrip.right){const l=e.left.clone().add(e.right).multiplyScalar(.5),g=this.lastGrip.left.clone().add(this.lastGrip.right).multiplyScalar(.5);this.lastPivot=l;const I=l.clone().applyMatrix4(this.control.matrix);I.sub(g.clone().applyMatrix4(this.control.matrix)),I.multiplyScalar(1/A),this.velocity.lerp(I,1-Math.exp(-20*A));const h=Math.atan2(e.left.z-l.z,e.left.x-l.x),B=Math.atan2(this.lastGrip.left.z-g.z,this.lastGrip.left.x-g.x);let C=h-B;C>Math.PI?C-=Math.PI*2:C<-Math.PI&&(C+=Math.PI*2);const Q=C/A,E=Math.exp(-20*A);this.rotateVelocity=this.rotateVelocity*E+Q*(1-E)}else if(this.rotateVelocity*=Math.exp(-A/this.rotateInertia),e.left&&this.lastGrip.left){const l=e.left.clone().applyMatrix4(this.control.matrix);l.sub(this.lastGrip.left.clone().applyMatrix4(this.control.matrix)),l.multiplyScalar(1/A),this.velocity.lerp(l,1-Math.exp(-20*A))}else if(e.right&&this.lastGrip.right){const l=e.right.clone().applyMatrix4(this.control.matrix);l.sub(this.lastGrip.right.clone().applyMatrix4(this.control.matrix)),l.multiplyScalar(1/A),this.velocity.lerp(l,1-Math.exp(-20*A))}else this.velocity.multiplyScalar(Math.exp(-A/this.moveInertia));const s=this.lastPivot.clone().negate(),n=new sA.Matrix4().makeTranslation(s).premultiply(new sA.Matrix4().makeRotationY(this.rotateVelocity*A)).premultiply(new sA.Matrix4().makeTranslation(this.lastPivot));this.control.matrix.multiply(n),this.control.matrix.decompose(this.control.position,this.control.quaternion,this.control.scale),this.control.updateMatrixWorld(!0),this.control.position.sub(this.velocity.clone().multiplyScalar(A)),this.lastGrip=e}}const yh=1,wh=2,mh=.002,xh=.006,Sh=.0015,Dh=.15,Mh=.15,vh=.1,bh=2,Fh=1,kh=200,Nh=400,Th=50,Uh={KeyW:new u.Vector3(0,0,-1),KeyS:new u.Vector3(0,0,1),KeyA:new u.Vector3(-1,0,0),KeyD:new u.Vector3(1,0,0),KeyR:new u.Vector3(0,1,0),KeyF:new u.Vector3(0,-1,0)},Gh={ArrowUp:new u.Vector3(0,0,-1),ArrowDown:new u.Vector3(0,0,1),ArrowLeft:new u.Vector3(-1,0,0),ArrowRight:new u.Vector3(1,0,0),PageUp:new u.Vector3(0,1,0),PageDown:new u.Vector3(0,-1,0)},Rh={KeyQ:new u.Vector3(0,0,1),KeyE:new u.Vector3(0,0,-1)},Yh={Home:new u.Vector3(0,-1,0),End:new u.Vector3(0,1,0),Insert:new u.Vector3(-1,0,0),Delete:new u.Vector3(1,0,0)};class Jh{constructor({canvas:A}){this.lastTime=0,this.fpsMovement=new fo({}),this.pointerControls=new po({canvas:A})}update(A){const e=performance.now(),s=(e-(this.lastTime||e))/1e3;this.lastTime=e,this.fpsMovement.update(s,A),this.pointerControls.update(s,A)}}class fo{constructor({moveSpeed:A,rollSpeed:e,stickThreshold:s,rotateSpeed:n,keycodeMoveMapping:i,keycodeRotateMapping:r,gamepadMapping:a,capsMultiplier:o,shiftMultiplier:c,ctrlMultiplier:l,xr:g}={}){this.enable=!0,this.moveSpeed=A??yh,this.rollSpeed=e??wh,this.stickThreshold=s??vh,this.rotateSpeed=n??bh,this.keycodeMoveMapping=i??{...Uh,...Gh},this.keycodeRotateMapping=r??{...Rh,...Yh},this.gamepadMapping=a??{4:"rollLeft",5:"rollRight",6:"ctrl",7:"shift"},this.capsMultiplier=o??10,this.shiftMultiplier=c??5,this.ctrlMultiplier=l??1/5,this.xr=g,this.keydown={},this.keycode={},document.addEventListener("keydown",I=>{this.keydown[I.key]=!0,this.keycode[I.code]=!0}),document.addEventListener("keyup",I=>{this.keydown[I.key]=!1,this.keycode[I.code]=!1}),window.addEventListener("blur",()=>{this.keydown={},this.keycode={}})}update(A,e){var l,g;if(!this.enable)return;const s=[new u.Vector2,new u.Vector2],n=navigator.getGamepads()[0];n&&(s[0].set(n.axes[0],n.axes[1]),s[1].set(n.axes[2],n.axes[3]));const i=(n==null?void 0:n.buttons.map(I=>I.pressed))||[],r=Array.from(((g=(l=this.xr)==null?void 0:l.getSession())==null?void 0:g.inputSources)??[]);for(const I of r){const h=I.gamepad;if(h)switch(I.handedness){case"none":{s[0].x+=h.axes[0],s[0].y+=h.axes[1],s[1].x+=h.axes[2],s[1].y+=h.axes[3];break}case"left":{s[0].x+=h.axes[2],s[0].y+=h.axes[3];break}case"right":{s[1].x+=h.axes[2],s[1].y+=h.axes[3];break}}}for(const I of s)I.x=Math.abs(I.x)>=this.stickThreshold?I.x:0,I.y=Math.abs(I.y)>=this.stickThreshold?I.y:0;const a=new u.Vector3(s[1].x,s[1].y,0).multiplyScalar(this.rotateSpeed);for(const[I,h]of Object.entries(this.keycodeRotateMapping))this.keycode[I]&&a.add(h);for(const I in this.gamepadMapping)if(i[Number.parseInt(I)])switch(this.gamepadMapping[I]){case"rollLeft":a.z+=1;break;case"rollRight":a.z-=1;break}if(a.multiply(new u.Vector3(this.rotateSpeed,this.rotateSpeed,this.rollSpeed)),a.manhattanLength()>0){a.multiplyScalar(A);const I=new u.Euler().setFromQuaternion(e.quaternion,"YXZ");I.y-=a.x,I.x=Math.max(-Math.PI/2,Math.min(Math.PI/2,I.x-a.y)),I.z=Math.max(-Math.PI,Math.min(Math.PI,I.z+a.z)),e.quaternion.setFromEuler(I)}const o=new u.Vector3(s[0].x,0,s[0].y);for(const[I,h]of Object.entries(this.keycodeMoveMapping))this.keycode[I]&&o.add(h);let c=1;this.keydown.CapsLock&&(c*=this.capsMultiplier),(this.keycode.ShiftLeft||this.keycode.ShiftRight)&&(c*=this.shiftMultiplier),(this.keycode.ControlLeft||this.keycode.ControlRight)&&(c*=this.ctrlMultiplier);for(const I in this.gamepadMapping)if(i[Number.parseInt(I)])switch(this.gamepadMapping[I]){case"shift":c*=this.shiftMultiplier;break;case"ctrl":c*=this.ctrlMultiplier;break}o.applyQuaternion(e.quaternion),e.position.add(o.multiplyScalar(this.moveSpeed*c*A))}}class po{constructor({canvas:A,rotateSpeed:e,slideSpeed:s,scrollSpeed:n,swapRotateSlide:i,reverseRotate:r,reverseSlide:a,reverseSwipe:o,reverseScroll:c,moveInertia:l,rotateInertia:g,pointerRollScale:I,doublePress:h}){this.enable=!0,this.canvas=A,this.rotateSpeed=e??mh,this.slideSpeed=s??xh,this.scrollSpeed=n??Sh,this.swapRotateSlide=i??!1,this.reverseRotate=r??!1,this.reverseSlide=a??!1,this.reverseSwipe=o??!1,this.reverseScroll=c??!1,this.moveInertia=l??Mh,this.rotateInertia=g??Dh,this.pointerRollScale=I??Fh,this.doublePress=h??(()=>{}),this.doublePressLimitMs=Nh,this.doublePressDistance=Th,this.lastUp=null,this.rotating=null,this.sliding=null,this.dualPress=!1,this.scroll=new u.Vector3,this.rotateVelocity=new u.Vector3,this.moveVelocity=new u.Vector3,A.addEventListener("pointerdown",C=>{const Q=this.getPointerPosition(C),E=Q.clone(),f=Q.clone(),p=!this.swapRotateSlide&&!this.rotating&&(C.pointerType!=="mouse"||C.button===0)||this.swapRotateSlide&&this.sliding&&!this.rotating&&(C.pointerType!=="mouse"||C.button===1),{pointerId:d,timeStamp:w}=C;if(p)this.rotating={initial:E,last:f,position:Q,pointerId:d,timeStamp:w},A.setPointerCapture(C.pointerId),this.dualPress=!1;else if(!this.sliding){const D=C.pointerType==="mouse"?C.button:void 0;this.sliding={initial:E,last:f,position:Q,pointerId:d,button:D,timeStamp:w},A.setPointerCapture(C.pointerId),this.dualPress=this.rotating!=null&&w-this.rotating.timeStamp<kh}});const B=C=>{var f,p;((f=this.rotating)==null?void 0:f.pointerId)===C.pointerId?(this.rotating=null,A.releasePointerCapture(C.pointerId),this.dualPress&&this.sliding&&(A.releasePointerCapture(this.sliding.pointerId),this.sliding=null)):((p=this.sliding)==null?void 0:p.pointerId)===C.pointerId&&(this.sliding=null,A.releasePointerCapture(C.pointerId),this.dualPress&&this.rotating&&(A.releasePointerCapture(this.rotating.pointerId),this.rotating=null));const Q=this.getPointerPosition(C),E=this.lastUp;if(this.lastUp={position:Q,time:C.timeStamp},E&&E.position.distanceTo(Q)<this.doublePressDistance){const w=C.timeStamp-E.time;w<this.doublePressLimitMs&&(this.lastUp=null,this.doublePress({position:Q,intervalMs:w}))}};document.addEventListener("pointerup",B),document.addEventListener("pointercancel",B),document.addEventListener("pointermove",C=>{var Q,E;((Q=this.rotating)==null?void 0:Q.pointerId)===C.pointerId?this.rotating.position=this.getPointerPosition(C):((E=this.sliding)==null?void 0:E.pointerId)===C.pointerId&&(this.sliding.position=this.getPointerPosition(C))}),A.addEventListener("contextmenu",C=>{C.preventDefault()}),A.addEventListener("wheel",C=>{this.scroll.add(new u.Vector3(C.deltaX,C.deltaY,C.deltaZ)),C.preventDefault()})}getPointerPosition(A){const e=this.canvas.getBoundingClientRect();return new u.Vector2(A.clientX-e.left,A.clientY-e.top)}update(A,e){if(!this.enable)return;if(this.dualPress&&this.rotating&&this.sliding){const n=[this.rotating.position.clone().sub(this.rotating.last),this.sliding.position.clone().sub(this.sliding.last)],i=n[0].dot(n[1]);if(i>=.2){const r=n[0].clone().add(n[1]),a=new u.Vector3(r.x,-r.y,0);a.multiplyScalar(this.slideSpeed*(this.reverseSwipe?1:-1)),a.applyQuaternion(e.quaternion),e.position.add(a),this.moveVelocity=a.clone().multiplyScalar(1/A)}else if(i<=-.2){const r=this.sliding.last.clone().sub(this.rotating.last),a=r.length();r.multiplyScalar(1/a).normalize();const o=new u.Vector2(-r.y,r.x),c=[n[0].dot(r),n[1].dot(r)],l=[n[0].dot(o),n[1].dot(o)],g=this.rotating.last.clone().add(this.sliding.last).multiplyScalar(.5);let I=new u.Vector3;if(e instanceof u.Camera){const f=new u.Vector2(g.x/this.canvas.clientWidth*2-1,-(g.y/this.canvas.clientHeight)*2+1),p=new u.Raycaster;p.setFromCamera(f,e),I=p.ray.direction}const h=c[1]-c[0],B=I.multiplyScalar(h*this.slideSpeed);e.position.add(B),this.moveVelocity=B.clone().multiplyScalar(1/A);const C=[Math.atan(l[0]/(-.5*a)),Math.atan(l[1]/(.5*a))],Q=.5*(C[0]+C[1])*this.pointerRollScale,E=new u.Euler().setFromQuaternion(e.quaternion,"YXZ");E.z=Math.max(-Math.PI,Math.min(Math.PI,E.z+.5*Q)),e.quaternion.setFromEuler(E)}this.rotating.last.copy(this.rotating.position),this.sliding.last.copy(this.sliding.position)}else{const n=new u.Vector3;if(this.rotating&&!this.dualPress){const r=this.rotating.position.clone().sub(this.rotating.last);this.rotating.last.copy(this.rotating.position),n.set(r.x,r.y,0),n.multiplyScalar(this.rotateSpeed*(this.reverseRotate?-1:1)),this.rotateVelocity=n.clone().multiplyScalar(1/A)}else this.rotateVelocity.multiplyScalar(Math.exp(-A/this.rotateInertia)),n.addScaledVector(this.rotateVelocity,A);const i=new u.Euler().setFromQuaternion(e.quaternion,"YXZ");if(i.y-=n.x,i.x=Math.max(-Math.PI/2,Math.min(Math.PI/2,i.x-n.y)),i.z*=Math.exp(-0*A),e.quaternion.setFromEuler(i),this.sliding&&!this.dualPress){const r=this.sliding.position.clone().sub(this.sliding.last);this.sliding.last.copy(this.sliding.position);const a=this.sliding.button!==2?new u.Vector3(r.x,0,r.y):new u.Vector3(r.x,-r.y,0);a.multiplyScalar(this.slideSpeed*(this.reverseSlide?-1:1)),a.applyQuaternion(e.quaternion),e.position.add(a),this.moveVelocity=a.clone().multiplyScalar(1/A)}else this.moveVelocity.multiplyScalar(Math.exp(-A/this.moveInertia)),e.position.addScaledVector(this.moveVelocity,A)}const s=this.scroll.multiplyScalar(this.scrollSpeed);s.set(s.x,s.z,s.y),this.reverseScroll&&s.multiplyScalar(-1),s.applyQuaternion(e.quaternion),e.position.add(s),this.scroll.set(0,0,0)}}exports.FINGER_TIPS=fh;exports.FpsMovement=fo;exports.HANDS=pe;exports.Hand=us;exports.HandMovement=dh;exports.JOINT_IDS=Is;exports.JOINT_INDEX=Qh;exports.JOINT_RADIUS=Lt;exports.JOINT_SEGMENTS=Qo;exports.JOINT_SEGMENT_STEPS=Eo;exports.JOINT_TIPS=Eh;exports.JointEnum=Se;exports.LN_SCALE_MAX=NA;exports.LN_SCALE_MIN=kA;exports.NUM_JOINTS=Bh;exports.PackedSplats=LA;exports.PlyReader=Ot;exports.PointerControls=po;exports.Readback=Pt;exports.Sint8ToFloat=Ln;exports.SparkControls=Jh;exports.SparkRenderer=jt;exports.SparkViewpoint=Wt;exports.SplatAccumulator=Ie;exports.SplatEdit=Xt;exports.SplatEditRgbaBlendMode=Xa;exports.SplatEditSdf=Oa;exports.SplatEditSdfType=Pa;exports.SplatEdits=Wa;exports.SplatFileType=St;exports.SplatGenerator=kt;exports.SplatLoader=ro;exports.SplatMesh=VA;exports.SplatModifier=to;exports.SplatSkinning=Wu;exports.SplatTransformer=ut;exports.SpzReader=co;exports.SpzWriter=OA;exports.Uint8ToFloat=_n;exports.VRButton=fe;exports.XrHands=ph;exports.constructAxes=th;exports.constructGrid=Ah;exports.constructSpherePoints=eh;exports.defines=Ig;exports.dyno=lu;exports.flipPixels=$n;exports.floatToSint8=Kt;exports.floatToUint8=vA;exports.fromHalf=pA;exports.generators=gh;exports.getSplatFileType=os;exports.imageSplats=nh;exports.isAndroid=Kn;exports.isMobile=Hn;exports.isOculus=Vn;exports.isPcSogs=bu;exports.modifiers=Ih;exports.pixelsToPngUrl=Pn;exports.setPackedSplat=Ce;exports.textSplats=sh;exports.toHalf=at;exports.transcodeSpz=Ou;exports.unpackSplat=Be;exports.unpackSplats=cs;exports.utils=Rc;
1163
1197
  //# sourceMappingURL=spark.cjs.min.js.map