@needle-tools/engine 4.17.0-alpha.5 → 4.17.0-alpha.6

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.
@@ -4010,7 +4010,7 @@ void main() {
4010
4010
 
4011
4011
  }`;class O_{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){const i=new ol(e.texture);(e.depthNear!==t.depthNear||e.depthFar!==t.depthFar)&&(this.depthNear=e.depthNear,this.depthFar=e.depthFar),this.texture=i}}getMesh(e){if(this.texture!==null&&this.mesh===null){const t=e.cameras[0].viewport,i=new _i({vertexShader:P_,fragmentShader:F_,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new ft(new bn(20,20),i)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class k_ extends yr{constructor(e,t){super();const i=this;let r=null,n=1,s=null,o="local-floor",l=1,c=null,h=null,A=null,u=null,d=null,f=null;const m=typeof XRWebGLBinding<"u",g=new O_,p={},b=t.getContextAttributes();let x=null,I=null;const y=[],S=[],M=new We;let R=null;const E=new Ft;E.viewport=new ot;const C=new Ft;C.viewport=new ot;const B=[E,C],P=new iA;let F=null,z=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(X){let J=y[X];return J===void 0&&(J=new Cs,y[X]=J),J.getTargetRaySpace()},this.getControllerGrip=function(X){let J=y[X];return J===void 0&&(J=new Cs,y[X]=J),J.getGripSpace()},this.getHand=function(X){let J=y[X];return J===void 0&&(J=new Cs,y[X]=J),J.getHandSpace()};function q(X){const J=S.indexOf(X.inputSource);if(J===-1)return;const ge=y[J];ge!==void 0&&(ge.update(X.inputSource,X.frame,c||s),ge.dispatchEvent({type:X.type,data:X.inputSource}))}function G(){r.removeEventListener("select",q),r.removeEventListener("selectstart",q),r.removeEventListener("selectend",q),r.removeEventListener("squeeze",q),r.removeEventListener("squeezestart",q),r.removeEventListener("squeezeend",q),r.removeEventListener("end",G),r.removeEventListener("inputsourceschange",H);for(let X=0;X<y.length;X++){const J=S[X];J!==null&&(S[X]=null,y[X].disconnect(J))}F=null,z=null,g.reset();for(const X in p)delete p[X];e.setRenderTarget(x),d=null,u=null,A=null,r=null,I=null,lt.stop(),i.isPresenting=!1,e.setPixelRatio(R),e.setSize(M.width,M.height,!1),i.dispatchEvent({type:"sessionend"})}this.setFramebufferScaleFactor=function(X){n=X,i.isPresenting===!0&&xe("WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(X){o=X,i.isPresenting===!0&&xe("WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return c||s},this.setReferenceSpace=function(X){c=X},this.getBaseLayer=function(){return u!==null?u:d},this.getBinding=function(){return A===null&&m&&(A=new XRWebGLBinding(r,t)),A},this.getFrame=function(){return f},this.getSession=function(){return r},this.setSession=async function(X){if(r=X,r!==null){if(x=e.getRenderTarget(),r.addEventListener("select",q),r.addEventListener("selectstart",q),r.addEventListener("selectend",q),r.addEventListener("squeeze",q),r.addEventListener("squeezestart",q),r.addEventListener("squeezeend",q),r.addEventListener("end",G),r.addEventListener("inputsourceschange",H),b.xrCompatible!==!0&&await t.makeXRCompatible(),R=e.getPixelRatio(),e.getSize(M),m&&"createProjectionLayer"in XRWebGLBinding.prototype){let J=null,ge=null,Pe=null;b.depth&&(Pe=b.stencil?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT24,J=b.stencil?Yi:Mi,ge=b.stencil?Wr:ci);const me={colorFormat:t.RGBA8,depthFormat:Pe,scaleFactor:n};A=this.getBinding(),u=A.createProjectionLayer(me),r.updateRenderState({layers:[u]}),e.setPixelRatio(1),e.setSize(u.textureWidth,u.textureHeight,!1),I=new di(u.textureWidth,u.textureHeight,{format:It,type:De,depthTexture:new ma(u.textureWidth,u.textureHeight,ge,void 0,void 0,void 0,void 0,void 0,void 0,J),stencilBuffer:b.stencil,colorSpace:e.outputColorSpace,samples:b.antialias?4:0,resolveDepthBuffer:u.ignoreDepthValues===!1,resolveStencilBuffer:u.ignoreDepthValues===!1})}else{const J={antialias:b.antialias,alpha:!0,depth:b.depth,stencil:b.stencil,framebufferScaleFactor:n};d=new XRWebGLLayer(r,t,J),r.updateRenderState({baseLayer:d}),e.setPixelRatio(1),e.setSize(d.framebufferWidth,d.framebufferHeight,!1),I=new di(d.framebufferWidth,d.framebufferHeight,{format:It,type:De,colorSpace:e.outputColorSpace,stencilBuffer:b.stencil,resolveDepthBuffer:d.ignoreDepthValues===!1,resolveStencilBuffer:d.ignoreDepthValues===!1})}I.isXRRenderTarget=!0,this.setFoveation(l),c=null,s=await r.requestReferenceSpace(o),lt.setContext(r),lt.start(),i.isPresenting=!0,i.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(r!==null)return r.environmentBlendMode},this.getDepthTexture=function(){return g.getDepthTexture()};function H(X){for(let J=0;J<X.removed.length;J++){const ge=X.removed[J],Pe=S.indexOf(ge);Pe>=0&&(S[Pe]=null,y[Pe].disconnect(ge))}for(let J=0;J<X.added.length;J++){const ge=X.added[J];let Pe=S.indexOf(ge);if(Pe===-1){for(let Re=0;Re<y.length;Re++)if(Re>=S.length){S.push(ge),Pe=Re;break}else if(S[Re]===null){S[Re]=ge,Pe=Re;break}if(Pe===-1)break}const me=y[Pe];me&&me.connect(ge)}}const Y=new N,ie=new N;function ce(X,J,ge){Y.setFromMatrixPosition(J.matrixWorld),ie.setFromMatrixPosition(ge.matrixWorld);const Pe=Y.distanceTo(ie),me=J.projectionMatrix.elements,Re=ge.projectionMatrix.elements,tt=me[14]/(me[10]-1),it=me[14]/(me[10]+1),ke=(me[9]+1)/me[5],vt=(me[9]-1)/me[5],_t=(me[8]-1)/me[0],Dt=(Re[8]+1)/Re[0],T=tt*_t,Et=tt*Dt,Xe=Pe/(-_t+Dt),rt=Xe*-_t;if(J.matrixWorld.decompose(X.position,X.quaternion,X.scale),X.translateX(rt),X.translateZ(Xe),X.matrixWorld.compose(X.position,X.quaternion,X.scale),X.matrixWorldInverse.copy(X.matrixWorld).invert(),me[10]===-1)X.projectionMatrix.copy(J.projectionMatrix),X.projectionMatrixInverse.copy(J.projectionMatrixInverse);else{const _e=tt+Xe,w=it+Xe,_=T-rt,L=Et+(Pe-rt),W=ke*it/w*_e,j=vt*it/w*_e;X.projectionMatrix.makePerspective(_,L,W,j,_e,w),X.projectionMatrixInverse.copy(X.projectionMatrix).invert()}}function re(X,J){J===null?X.matrixWorld.copy(X.matrix):X.matrixWorld.multiplyMatrices(J.matrixWorld,X.matrix),X.matrixWorldInverse.copy(X.matrixWorld).invert()}this.updateCamera=function(X){if(r===null)return;let J=X.near,ge=X.far;g.texture!==null&&(g.depthNear>0&&(J=g.depthNear),g.depthFar>0&&(ge=g.depthFar)),P.near=C.near=E.near=J,P.far=C.far=E.far=ge,(F!==P.near||z!==P.far)&&(r.updateRenderState({depthNear:P.near,depthFar:P.far}),F=P.near,z=P.far),P.layers.mask=X.layers.mask|6,E.layers.mask=P.layers.mask&3,C.layers.mask=P.layers.mask&5;const Pe=X.parent,me=P.cameras;re(P,Pe);for(let Re=0;Re<me.length;Re++)re(me[Re],Pe);me.length===2?ce(P,E,C):P.projectionMatrix.copy(E.projectionMatrix),fe(X,P,Pe)};function fe(X,J,ge){ge===null?X.matrix.copy(J.matrixWorld):(X.matrix.copy(ge.matrixWorld),X.matrix.invert(),X.matrix.multiply(J.matrixWorld)),X.matrix.decompose(X.position,X.quaternion,X.scale),X.updateMatrixWorld(!0),X.projectionMatrix.copy(J.projectionMatrix),X.projectionMatrixInverse.copy(J.projectionMatrixInverse),X.isPerspectiveCamera&&(X.fov=ea*2*Math.atan(1/X.projectionMatrix.elements[5]),X.zoom=1)}this.getCamera=function(){return P},this.getFoveation=function(){if(!(u===null&&d===null))return l},this.setFoveation=function(X){l=X,u!==null&&(u.fixedFoveation=X),d!==null&&d.fixedFoveation!==void 0&&(d.fixedFoveation=X)},this.hasDepthSensing=function(){return g.texture!==null},this.getDepthSensingMesh=function(){return g.getMesh(P)},this.getCameraTexture=function(X){return p[X]};let Se=null;function et(X,J){if(h=J.getViewerPose(c||s),f=J,h!==null){const ge=h.views;d!==null&&(e.setRenderTargetFramebuffer(I,d.framebuffer),e.setRenderTarget(I));let Pe=!1;ge.length!==P.cameras.length&&(P.cameras.length=0,Pe=!0);for(let Re=0;Re<ge.length;Re++){const tt=ge[Re];let it=null;if(d!==null)it=d.getViewport(tt);else{const vt=A.getViewSubImage(u,tt);it=vt.viewport,Re===0&&(e.setRenderTargetTextures(I,vt.colorTexture,vt.depthStencilTexture),e.setRenderTarget(I))}let ke=B[Re];ke===void 0&&(ke=new Ft,ke.layers.enable(Re),ke.viewport=new ot,B[Re]=ke),ke.matrix.fromArray(tt.transform.matrix),ke.matrix.decompose(ke.position,ke.quaternion,ke.scale),ke.projectionMatrix.fromArray(tt.projectionMatrix),ke.projectionMatrixInverse.copy(ke.projectionMatrix).invert(),ke.viewport.set(it.x,it.y,it.width,it.height),Re===0&&(P.matrix.copy(ke.matrix),P.matrix.decompose(P.position,P.quaternion,P.scale)),Pe===!0&&P.cameras.push(ke)}const me=r.enabledFeatures;if(me&&me.includes("depth-sensing")&&r.depthUsage=="gpu-optimized"&&m){A=i.getBinding();const Re=A.getDepthInformation(ge[0]);Re&&Re.isValid&&Re.texture&&g.init(Re,r.renderState)}if(me&&me.includes("camera-access")&&m){e.state.unbindTexture(),A=i.getBinding();for(let Re=0;Re<ge.length;Re++){const tt=ge[Re].camera;if(tt){let it=p[tt];it||(it=new ol,p[tt]=it);const ke=A.getCameraImage(tt);it.sourceTexture=ke}}}}for(let ge=0;ge<y.length;ge++){const Pe=S[ge],me=y[ge];Pe!==null&&me!==void 0&&me.update(Pe,J,c||s)}Se&&Se(X,J),J.detectedPlanes&&i.dispatchEvent({type:"planesdetected",data:J}),f=null}const lt=new nA;lt.setAnimationLoop(et),this.setAnimationLoop=function(X){Se=X},this.dispose=function(){}}}const Pr=new ji,G_=new Qe;function H_(a,e){function t(g,p){g.matrixAutoUpdate===!0&&g.updateMatrix(),p.value.copy(g.matrix)}function i(g,p){p.color.getRGB(g.fogColor.value,hh(a)),p.isFog?(g.fogNear.value=p.near,g.fogFar.value=p.far):p.isFogExp2&&(g.fogDensity.value=p.density)}function r(g,p,b,x,I){p.isMeshBasicMaterial||p.isMeshLambertMaterial?n(g,p):p.isMeshToonMaterial?(n(g,p),A(g,p)):p.isMeshPhongMaterial?(n(g,p),h(g,p)):p.isMeshStandardMaterial?(n(g,p),u(g,p),p.isMeshPhysicalMaterial&&d(g,p,I)):p.isMeshMatcapMaterial?(n(g,p),f(g,p)):p.isMeshDepthMaterial?n(g,p):p.isMeshDistanceMaterial?(n(g,p),m(g,p)):p.isMeshNormalMaterial?n(g,p):p.isLineBasicMaterial?(s(g,p),p.isLineDashedMaterial&&o(g,p)):p.isPointsMaterial?l(g,p,b,x):p.isSpriteMaterial?c(g,p):p.isShadowMaterial?(g.color.value.copy(p.color),g.opacity.value=p.opacity):p.isShaderMaterial&&(p.uniformsNeedUpdate=!1)}function n(g,p){g.opacity.value=p.opacity,p.color&&g.diffuse.value.copy(p.color),p.emissive&&g.emissive.value.copy(p.emissive).multiplyScalar(p.emissiveIntensity),p.map&&(g.map.value=p.map,t(p.map,g.mapTransform)),p.alphaMap&&(g.alphaMap.value=p.alphaMap,t(p.alphaMap,g.alphaMapTransform)),p.bumpMap&&(g.bumpMap.value=p.bumpMap,t(p.bumpMap,g.bumpMapTransform),g.bumpScale.value=p.bumpScale,p.side===Qt&&(g.bumpScale.value*=-1)),p.normalMap&&(g.normalMap.value=p.normalMap,t(p.normalMap,g.normalMapTransform),g.normalScale.value.copy(p.normalScale),p.side===Qt&&g.normalScale.value.negate()),p.displacementMap&&(g.displacementMap.value=p.displacementMap,t(p.displacementMap,g.displacementMapTransform),g.displacementScale.value=p.displacementScale,g.displacementBias.value=p.displacementBias),p.emissiveMap&&(g.emissiveMap.value=p.emissiveMap,t(p.emissiveMap,g.emissiveMapTransform)),p.specularMap&&(g.specularMap.value=p.specularMap,t(p.specularMap,g.specularMapTransform)),p.alphaTest>0&&(g.alphaTest.value=p.alphaTest);const b=e.get(p),x=b.envMap,I=b.envMapRotation;x&&(g.envMap.value=x,Pr.copy(I),Pr.x*=-1,Pr.y*=-1,Pr.z*=-1,x.isCubeTexture&&x.isRenderTargetTexture===!1&&(Pr.y*=-1,Pr.z*=-1),g.envMapRotation.value.setFromMatrix4(G_.makeRotationFromEuler(Pr)),g.flipEnvMap.value=x.isCubeTexture&&x.isRenderTargetTexture===!1?-1:1,g.reflectivity.value=p.reflectivity,g.ior.value=p.ior,g.refractionRatio.value=p.refractionRatio),p.lightMap&&(g.lightMap.value=p.lightMap,g.lightMapIntensity.value=p.lightMapIntensity,t(p.lightMap,g.lightMapTransform)),p.aoMap&&(g.aoMap.value=p.aoMap,g.aoMapIntensity.value=p.aoMapIntensity,t(p.aoMap,g.aoMapTransform))}function s(g,p){g.diffuse.value.copy(p.color),g.opacity.value=p.opacity,p.map&&(g.map.value=p.map,t(p.map,g.mapTransform))}function o(g,p){g.dashSize.value=p.dashSize,g.totalSize.value=p.dashSize+p.gapSize,g.scale.value=p.scale}function l(g,p,b,x){g.diffuse.value.copy(p.color),g.opacity.value=p.opacity,g.size.value=p.size*b,g.scale.value=x*.5,p.map&&(g.map.value=p.map,t(p.map,g.uvTransform)),p.alphaMap&&(g.alphaMap.value=p.alphaMap,t(p.alphaMap,g.alphaMapTransform)),p.alphaTest>0&&(g.alphaTest.value=p.alphaTest)}function c(g,p){g.diffuse.value.copy(p.color),g.opacity.value=p.opacity,g.rotation.value=p.rotation,p.map&&(g.map.value=p.map,t(p.map,g.mapTransform)),p.alphaMap&&(g.alphaMap.value=p.alphaMap,t(p.alphaMap,g.alphaMapTransform)),p.alphaTest>0&&(g.alphaTest.value=p.alphaTest)}function h(g,p){g.specular.value.copy(p.specular),g.shininess.value=Math.max(p.shininess,1e-4)}function A(g,p){p.gradientMap&&(g.gradientMap.value=p.gradientMap)}function u(g,p){g.metalness.value=p.metalness,p.metalnessMap&&(g.metalnessMap.value=p.metalnessMap,t(p.metalnessMap,g.metalnessMapTransform)),g.roughness.value=p.roughness,p.roughnessMap&&(g.roughnessMap.value=p.roughnessMap,t(p.roughnessMap,g.roughnessMapTransform)),p.envMap&&(g.envMapIntensity.value=p.envMapIntensity)}function d(g,p,b){g.ior.value=p.ior,p.sheen>0&&(g.sheenColor.value.copy(p.sheenColor).multiplyScalar(p.sheen),g.sheenRoughness.value=p.sheenRoughness,p.sheenColorMap&&(g.sheenColorMap.value=p.sheenColorMap,t(p.sheenColorMap,g.sheenColorMapTransform)),p.sheenRoughnessMap&&(g.sheenRoughnessMap.value=p.sheenRoughnessMap,t(p.sheenRoughnessMap,g.sheenRoughnessMapTransform))),p.clearcoat>0&&(g.clearcoat.value=p.clearcoat,g.clearcoatRoughness.value=p.clearcoatRoughness,p.clearcoatMap&&(g.clearcoatMap.value=p.clearcoatMap,t(p.clearcoatMap,g.clearcoatMapTransform)),p.clearcoatRoughnessMap&&(g.clearcoatRoughnessMap.value=p.clearcoatRoughnessMap,t(p.clearcoatRoughnessMap,g.clearcoatRoughnessMapTransform)),p.clearcoatNormalMap&&(g.clearcoatNormalMap.value=p.clearcoatNormalMap,t(p.clearcoatNormalMap,g.clearcoatNormalMapTransform),g.clearcoatNormalScale.value.copy(p.clearcoatNormalScale),p.side===Qt&&g.clearcoatNormalScale.value.negate())),p.dispersion>0&&(g.dispersion.value=p.dispersion),p.iridescence>0&&(g.iridescence.value=p.iridescence,g.iridescenceIOR.value=p.iridescenceIOR,g.iridescenceThicknessMinimum.value=p.iridescenceThicknessRange[0],g.iridescenceThicknessMaximum.value=p.iridescenceThicknessRange[1],p.iridescenceMap&&(g.iridescenceMap.value=p.iridescenceMap,t(p.iridescenceMap,g.iridescenceMapTransform)),p.iridescenceThicknessMap&&(g.iridescenceThicknessMap.value=p.iridescenceThicknessMap,t(p.iridescenceThicknessMap,g.iridescenceThicknessMapTransform))),p.transmission>0&&(g.transmission.value=p.transmission,g.transmissionSamplerMap.value=b.texture,g.transmissionSamplerSize.value.set(b.width,b.height),p.transmissionMap&&(g.transmissionMap.value=p.transmissionMap,t(p.transmissionMap,g.transmissionMapTransform)),g.thickness.value=p.thickness,p.thicknessMap&&(g.thicknessMap.value=p.thicknessMap,t(p.thicknessMap,g.thicknessMapTransform)),g.attenuationDistance.value=p.attenuationDistance,g.attenuationColor.value.copy(p.attenuationColor)),p.anisotropy>0&&(g.anisotropyVector.value.set(p.anisotropy*Math.cos(p.anisotropyRotation),p.anisotropy*Math.sin(p.anisotropyRotation)),p.anisotropyMap&&(g.anisotropyMap.value=p.anisotropyMap,t(p.anisotropyMap,g.anisotropyMapTransform))),g.specularIntensity.value=p.specularIntensity,g.specularColor.value.copy(p.specularColor),p.specularColorMap&&(g.specularColorMap.value=p.specularColorMap,t(p.specularColorMap,g.specularColorMapTransform)),p.specularIntensityMap&&(g.specularIntensityMap.value=p.specularIntensityMap,t(p.specularIntensityMap,g.specularIntensityMapTransform))}function f(g,p){p.matcap&&(g.matcap.value=p.matcap)}function m(g,p){const b=e.get(p).light;g.referencePosition.value.setFromMatrixPosition(b.matrixWorld),g.nearDistance.value=b.shadow.camera.near,g.farDistance.value=b.shadow.camera.far}return{refreshFogUniforms:i,refreshMaterialUniforms:r}}function z_(a,e,t,i){let r={},n={},s=[];const o=a.getParameter(a.MAX_UNIFORM_BUFFER_BINDINGS);function l(b,x){const I=x.program;i.uniformBlockBinding(b,I)}function c(b,x){let I=r[b.id];I===void 0&&(f(b),I=h(b),r[b.id]=I,b.addEventListener("dispose",g));const y=x.program;i.updateUBOMapping(b,y);const S=e.render.frame;n[b.id]!==S&&(u(b),n[b.id]=S)}function h(b){const x=A();b.__bindingPointIndex=x;const I=a.createBuffer(),y=b.__size,S=b.usage;return a.bindBuffer(a.UNIFORM_BUFFER,I),a.bufferData(a.UNIFORM_BUFFER,y,S),a.bindBuffer(a.UNIFORM_BUFFER,null),a.bindBufferBase(a.UNIFORM_BUFFER,x,I),I}function A(){for(let b=0;b<o;b++)if(s.indexOf(b)===-1)return s.push(b),b;return Te("WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}function u(b){const x=r[b.id],I=b.uniforms,y=b.__cache;a.bindBuffer(a.UNIFORM_BUFFER,x);for(let S=0,M=I.length;S<M;S++){const R=Array.isArray(I[S])?I[S]:[I[S]];for(let E=0,C=R.length;E<C;E++){const B=R[E];if(d(B,S,E,y)===!0){const P=B.__offset,F=Array.isArray(B.value)?B.value:[B.value];let z=0;for(let q=0;q<F.length;q++){const G=F[q],H=m(G);typeof G=="number"||typeof G=="boolean"?(B.__data[0]=G,a.bufferSubData(a.UNIFORM_BUFFER,P+z,B.__data)):G.isMatrix3?(B.__data[0]=G.elements[0],B.__data[1]=G.elements[1],B.__data[2]=G.elements[2],B.__data[3]=0,B.__data[4]=G.elements[3],B.__data[5]=G.elements[4],B.__data[6]=G.elements[5],B.__data[7]=0,B.__data[8]=G.elements[6],B.__data[9]=G.elements[7],B.__data[10]=G.elements[8],B.__data[11]=0):(G.toArray(B.__data,z),z+=H.storage/Float32Array.BYTES_PER_ELEMENT)}a.bufferSubData(a.UNIFORM_BUFFER,P,B.__data)}}}a.bindBuffer(a.UNIFORM_BUFFER,null)}function d(b,x,I,y){const S=b.value,M=x+"_"+I;if(y[M]===void 0)return typeof S=="number"||typeof S=="boolean"?y[M]=S:y[M]=S.clone(),!0;{const R=y[M];if(typeof S=="number"||typeof S=="boolean"){if(R!==S)return y[M]=S,!0}else if(R.equals(S)===!1)return R.copy(S),!0}return!1}function f(b){const x=b.uniforms;let I=0;const y=16;for(let M=0,R=x.length;M<R;M++){const E=Array.isArray(x[M])?x[M]:[x[M]];for(let C=0,B=E.length;C<B;C++){const P=E[C],F=Array.isArray(P.value)?P.value:[P.value];for(let z=0,q=F.length;z<q;z++){const G=F[z],H=m(G),Y=I%y,ie=Y%H.boundary,ce=Y+ie;I+=ie,ce!==0&&y-ce<H.storage&&(I+=y-ce),P.__data=new Float32Array(H.storage/Float32Array.BYTES_PER_ELEMENT),P.__offset=I,I+=H.storage}}}const S=I%y;return S>0&&(I+=y-S),b.__size=I,b.__cache={},this}function m(b){const x={boundary:0,storage:0};return typeof b=="number"||typeof b=="boolean"?(x.boundary=4,x.storage=4):b.isVector2?(x.boundary=8,x.storage=8):b.isVector3||b.isColor?(x.boundary=16,x.storage=12):b.isVector4?(x.boundary=16,x.storage=16):b.isMatrix3?(x.boundary=48,x.storage=48):b.isMatrix4?(x.boundary=64,x.storage=64):b.isTexture?xe("WebGLRenderer: Texture samplers can not be part of an uniforms group."):xe("WebGLRenderer: Unsupported uniform value type.",b),x}function g(b){const x=b.target;x.removeEventListener("dispose",g);const I=s.indexOf(x.__bindingPointIndex);s.splice(I,1),a.deleteBuffer(r[x.id]),delete r[x.id],delete n[x.id]}function p(){for(const b in r)a.deleteBuffer(r[b]);s=[],r={},n={}}return{bind:l,update:c,dispose:p}}const V_=new Uint16Array([12469,15057,12620,14925,13266,14620,13807,14376,14323,13990,14545,13625,14713,13328,14840,12882,14931,12528,14996,12233,15039,11829,15066,11525,15080,11295,15085,10976,15082,10705,15073,10495,13880,14564,13898,14542,13977,14430,14158,14124,14393,13732,14556,13410,14702,12996,14814,12596,14891,12291,14937,11834,14957,11489,14958,11194,14943,10803,14921,10506,14893,10278,14858,9960,14484,14039,14487,14025,14499,13941,14524,13740,14574,13468,14654,13106,14743,12678,14818,12344,14867,11893,14889,11509,14893,11180,14881,10751,14852,10428,14812,10128,14765,9754,14712,9466,14764,13480,14764,13475,14766,13440,14766,13347,14769,13070,14786,12713,14816,12387,14844,11957,14860,11549,14868,11215,14855,10751,14825,10403,14782,10044,14729,9651,14666,9352,14599,9029,14967,12835,14966,12831,14963,12804,14954,12723,14936,12564,14917,12347,14900,11958,14886,11569,14878,11247,14859,10765,14828,10401,14784,10011,14727,9600,14660,9289,14586,8893,14508,8533,15111,12234,15110,12234,15104,12216,15092,12156,15067,12010,15028,11776,14981,11500,14942,11205,14902,10752,14861,10393,14812,9991,14752,9570,14682,9252,14603,8808,14519,8445,14431,8145,15209,11449,15208,11451,15202,11451,15190,11438,15163,11384,15117,11274,15055,10979,14994,10648,14932,10343,14871,9936,14803,9532,14729,9218,14645,8742,14556,8381,14461,8020,14365,7603,15273,10603,15272,10607,15267,10619,15256,10631,15231,10614,15182,10535,15118,10389,15042,10167,14963,9787,14883,9447,14800,9115,14710,8665,14615,8318,14514,7911,14411,7507,14279,7198,15314,9675,15313,9683,15309,9712,15298,9759,15277,9797,15229,9773,15166,9668,15084,9487,14995,9274,14898,8910,14800,8539,14697,8234,14590,7790,14479,7409,14367,7067,14178,6621,15337,8619,15337,8631,15333,8677,15325,8769,15305,8871,15264,8940,15202,8909,15119,8775,15022,8565,14916,8328,14804,8009,14688,7614,14569,7287,14448,6888,14321,6483,14088,6171,15350,7402,15350,7419,15347,7480,15340,7613,15322,7804,15287,7973,15229,8057,15148,8012,15046,7846,14933,7611,14810,7357,14682,7069,14552,6656,14421,6316,14251,5948,14007,5528,15356,5942,15356,5977,15353,6119,15348,6294,15332,6551,15302,6824,15249,7044,15171,7122,15070,7050,14949,6861,14818,6611,14679,6349,14538,6067,14398,5651,14189,5311,13935,4958,15359,4123,15359,4153,15356,4296,15353,4646,15338,5160,15311,5508,15263,5829,15188,6042,15088,6094,14966,6001,14826,5796,14678,5543,14527,5287,14377,4985,14133,4586,13869,4257,15360,1563,15360,1642,15358,2076,15354,2636,15341,3350,15317,4019,15273,4429,15203,4732,15105,4911,14981,4932,14836,4818,14679,4621,14517,4386,14359,4156,14083,3795,13808,3437,15360,122,15360,137,15358,285,15355,636,15344,1274,15322,2177,15281,2765,15215,3223,15120,3451,14995,3569,14846,3567,14681,3466,14511,3305,14344,3121,14037,2800,13753,2467,15360,0,15360,1,15359,21,15355,89,15346,253,15325,479,15287,796,15225,1148,15133,1492,15008,1749,14856,1882,14685,1886,14506,1783,14324,1608,13996,1398,13702,1183]);let Bi=null;function W_(){return Bi===null&&(Bi=new nn(V_,16,16,Zt,Rt),Bi.name="DFG_LUT",Bi.minFilter=ct,Bi.magFilter=ct,Bi.wrapS=Kt,Bi.wrapT=Kt,Bi.generateMipmaps=!1,Bi.needsUpdate=!0),Bi}class q_{constructor(e={}){const{canvas:t=zc(),context:i=null,depth:r=!0,stencil:n=!1,alpha:s=!1,antialias:o=!1,premultipliedAlpha:l=!0,preserveDrawingBuffer:c=!1,powerPreference:h="default",failIfMajorPerformanceCaveat:A=!1,reversedDepthBuffer:u=!1,outputBufferType:d=De}=e;this.isWebGLRenderer=!0;let f;if(i!==null){if(typeof WebGLRenderingContext<"u"&&i instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");f=i.getContextAttributes().alpha}else f=s;const m=d,g=new Set([Gn,kn,On]),p=new Set([De,ci,Vr,Wr,Pn,Fn]),b=new Uint32Array(4),x=new Int32Array(4);let I=null,y=null;const S=[],M=[];let R=null;this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=li,this.toneMappingExposure=1,this.transmissionResolutionScale=1;const E=this;let C=!1;this._outputColorSpace=ut;let B=0,P=0,F=null,z=-1,q=null;const G=new ot,H=new ot;let Y=null;const ie=new Ue(0);let ce=0,re=t.width,fe=t.height,Se=1,et=null,lt=null;const X=new ot(0,0,re,fe),J=new ot(0,0,re,fe);let ge=!1;const Pe=new Bs;let me=!1,Re=!1;const tt=new Qe,it=new N,ke=new ot,vt={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let _t=!1;function Dt(){return F===null?Se:1}let T=i;function Et(v,U){return t.getContext(v,U)}try{const v={alpha:!0,depth:r,stencil:n,antialias:o,premultipliedAlpha:l,preserveDrawingBuffer:c,powerPreference:h,failIfMajorPerformanceCaveat:A};if("setAttribute"in t&&t.setAttribute("data-engine",`three.js r${In}`),t.addEventListener("webglcontextlost",Me,!1),t.addEventListener("webglcontextrestored",xt,!1),t.addEventListener("webglcontextcreationerror",Ze,!1),T===null){const U="webgl2";if(T=Et(U,v),T===null)throw Et(U)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}}catch(v){throw Te("WebGLRenderer: "+v.message),v}let Xe,rt,_e,w,_,L,W,j,V,Ce,ne,Ee,ye,Z,oe,Ie,be,se,He,D,he,ee,de,$;function K(){Xe=new qf(T),Xe.init(),ee=new DA(T,Xe),rt=new Pf(T,Xe,e,ee),_e=new N_(T,Xe),rt.reversedDepthBuffer&&u&&_e.buffers.depth.setReversed(!0),w=new Yf(T),_=new b_,L=new Q_(T,Xe,_e,_,rt,ee,w),W=new Of(E),j=new Wf(E),V=new Zd(T),de=new Nf(T,V),Ce=new jf(T,V,w,de),ne=new Jf(T,Ce,V,w),He=new Kf(T,rt,L),Ie=new Ff(_),Ee=new E_(E,W,j,Xe,rt,de,Ie),ye=new H_(E,_),Z=new x_,oe=new w_(Xe),se=new Uf(E,W,j,_e,ne,f,l),be=new L_(E,ne,rt),$=new z_(T,w,rt,_e),D=new Qf(T,Xe,w),he=new Xf(T,Xe,w),w.programs=Ee.programs,E.capabilities=rt,E.extensions=Xe,E.properties=_,E.renderLists=Z,E.shadowMap=be,E.state=_e,E.info=w}K(),m!==De&&(R=new $f(m,t.width,t.height,r,n));const ae=new k_(E,T);this.xr=ae,this.getContext=function(){return T},this.getContextAttributes=function(){return T.getContextAttributes()},this.forceContextLoss=function(){const v=Xe.get("WEBGL_lose_context");v&&v.loseContext()},this.forceContextRestore=function(){const v=Xe.get("WEBGL_lose_context");v&&v.restoreContext()},this.getPixelRatio=function(){return Se},this.setPixelRatio=function(v){v!==void 0&&(Se=v,this.setSize(re,fe,!1))},this.getSize=function(v){return v.set(re,fe)},this.setSize=function(v,U,k=!0){if(ae.isPresenting){xe("WebGLRenderer: Can't change size while VR device is presenting.");return}re=v,fe=U,t.width=Math.floor(v*Se),t.height=Math.floor(U*Se),k===!0&&(t.style.width=v+"px",t.style.height=U+"px"),R!==null&&R.setSize(t.width,t.height),this.setViewport(0,0,v,U)},this.getDrawingBufferSize=function(v){return v.set(re*Se,fe*Se).floor()},this.setDrawingBufferSize=function(v,U,k){re=v,fe=U,Se=k,t.width=Math.floor(v*k),t.height=Math.floor(U*k),this.setViewport(0,0,v,U)},this.setEffects=function(v){if(m===De){console.error("THREE.WebGLRenderer: setEffects() requires outputBufferType set to HalfFloatType or FloatType.");return}if(v){for(let U=0;U<v.length;U++)if(v[U].isOutputPass===!0){console.warn("THREE.WebGLRenderer: OutputPass is not needed in setEffects(). Tone mapping and color space conversion are applied automatically.");break}}R.setEffects(v||[])},this.getCurrentViewport=function(v){return v.copy(G)},this.getViewport=function(v){return v.copy(X)},this.setViewport=function(v,U,k,O){v.isVector4?X.set(v.x,v.y,v.z,v.w):X.set(v,U,k,O),_e.viewport(G.copy(X).multiplyScalar(Se).round())},this.getScissor=function(v){return v.copy(J)},this.setScissor=function(v,U,k,O){v.isVector4?J.set(v.x,v.y,v.z,v.w):J.set(v,U,k,O),_e.scissor(H.copy(J).multiplyScalar(Se).round())},this.getScissorTest=function(){return ge},this.setScissorTest=function(v){_e.setScissorTest(ge=v)},this.setOpaqueSort=function(v){et=v},this.setTransparentSort=function(v){lt=v},this.getClearColor=function(v){return v.copy(se.getClearColor())},this.setClearColor=function(){se.setClearColor(...arguments)},this.getClearAlpha=function(){return se.getClearAlpha()},this.setClearAlpha=function(){se.setClearAlpha(...arguments)},this.clear=function(v=!0,U=!0,k=!0){let O=0;if(v){let Q=!1;if(F!==null){const te=F.texture.format;Q=g.has(te)}if(Q){const te=F.texture.type,Ae=p.has(te),pe=se.getClearColor(),ue=se.getClearAlpha(),Be=pe.r,Le=pe.g,we=pe.b;Ae?(b[0]=Be,b[1]=Le,b[2]=we,b[3]=ue,T.clearBufferuiv(T.COLOR,0,b)):(x[0]=Be,x[1]=Le,x[2]=we,x[3]=ue,T.clearBufferiv(T.COLOR,0,x))}else O|=T.COLOR_BUFFER_BIT}U&&(O|=T.DEPTH_BUFFER_BIT),k&&(O|=T.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),T.clear(O)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){t.removeEventListener("webglcontextlost",Me,!1),t.removeEventListener("webglcontextrestored",xt,!1),t.removeEventListener("webglcontextcreationerror",Ze,!1),se.dispose(),Z.dispose(),oe.dispose(),_.dispose(),W.dispose(),j.dispose(),ne.dispose(),de.dispose(),$.dispose(),Ee.dispose(),ae.dispose(),ae.removeEventListener("sessionstart",tc),ae.removeEventListener("sessionend",ic),dr.stop()};function Me(v){v.preventDefault(),Ka("WebGLRenderer: Context Lost."),C=!0}function xt(){Ka("WebGLRenderer: Context Restored."),C=!1;const v=w.autoReset,U=be.enabled,k=be.autoUpdate,O=be.needsUpdate,Q=be.type;K(),w.autoReset=v,be.enabled=U,be.autoUpdate=k,be.needsUpdate=O,be.type=Q}function Ze(v){Te("WebGLRenderer: A WebGL context could not be created. Reason: ",v.statusMessage)}function Ci(v){const U=v.target;U.removeEventListener("dispose",Ci),Di(U)}function Di(v){Ou(v),_.remove(v)}function Ou(v){const U=_.get(v).programs;U!==void 0&&(U.forEach(function(k){Ee.releaseProgram(k)}),v.isShaderMaterial&&Ee.releaseShaderCache(v))}this.renderBufferDirect=function(v,U,k,O,Q,te){U===null&&(U=vt);const Ae=Q.isMesh&&Q.matrixWorld.determinant()<0,pe=Gu(v,U,k,O,Q);_e.setMaterial(O,Ae);let ue=k.index,Be=1;if(O.wireframe===!0){if(ue=Ce.getWireframeAttribute(k),ue===void 0)return;Be=2}const Le=k.drawRange,we=k.attributes.position;let je=Le.start*Be,at=(Le.start+Le.count)*Be;te!==null&&(je=Math.max(je,te.start*Be),at=Math.min(at,(te.start+te.count)*Be)),ue!==null?(je=Math.max(je,0),at=Math.min(at,ue.count)):we!=null&&(je=Math.max(je,0),at=Math.min(at,we.count));const pt=at-je;if(pt<0||pt===1/0)return;de.setup(Q,O,pe,k,ue);let ht,nt=D;if(ue!==null&&(ht=V.get(ue),nt=he,nt.setIndex(ht)),Q.isMesh)O.wireframe===!0?(_e.setLineWidth(O.wireframeLinewidth*Dt()),nt.setMode(T.LINES)):nt.setMode(T.TRIANGLES);else if(Q.isLine){let ve=O.linewidth;ve===void 0&&(ve=1),_e.setLineWidth(ve*Dt()),Q.isLineSegments?nt.setMode(T.LINES):Q.isLineLoop?nt.setMode(T.LINE_LOOP):nt.setMode(T.LINE_STRIP)}else Q.isPoints?nt.setMode(T.POINTS):Q.isSprite&&nt.setMode(T.TRIANGLES);if(Q.isBatchedMesh)if(Q._multiDrawInstances!==null)$r("WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),nt.renderMultiDrawInstances(Q._multiDrawStarts,Q._multiDrawCounts,Q._multiDrawCount,Q._multiDrawInstances);else if(Xe.get("WEBGL_multi_draw"))nt.renderMultiDraw(Q._multiDrawStarts,Q._multiDrawCounts,Q._multiDrawCount);else{const ve=Q._multiDrawStarts,At=Q._multiDrawCounts,Li=Q._multiDrawCount,ni=ue?V.get(ue).bytesPerElement:1,Gr=_.get(O).currentProgram.getUniforms();for(let zt=0;zt<Li;zt++)Gr.setValue(T,"_gl_DrawID",zt),nt.render(ve[zt]/ni,At[zt])}else if(Q.isInstancedMesh)nt.renderInstances(je,pt,Q.count);else if(k.isInstancedBufferGeometry){const ve=k._maxInstanceCount!==void 0?k._maxInstanceCount:1/0,At=Math.min(k.instanceCount,ve);nt.renderInstances(je,pt,At)}else nt.render(je,pt)};function ec(v,U,k){v.transparent===!0&&v.side===oi&&v.forceSinglePass===!1?(v.side=Qt,v.needsUpdate=!0,xn(v,U,k),v.side=yi,v.needsUpdate=!0,xn(v,U,k),v.side=oi):xn(v,U,k)}this.compile=function(v,U,k=null){k===null&&(k=v),y=oe.get(k),y.init(U),M.push(y),k.traverseVisible(function(Q){Q.isLight&&Q.layers.test(U.layers)&&(y.pushLight(Q),Q.castShadow&&y.pushShadow(Q))}),v!==k&&v.traverseVisible(function(Q){Q.isLight&&Q.layers.test(U.layers)&&(y.pushLight(Q),Q.castShadow&&y.pushShadow(Q))}),y.setupLights();const O=new Set;return v.traverse(function(Q){if(!(Q.isMesh||Q.isPoints||Q.isLine||Q.isSprite))return;const te=Q.material;if(te)if(Array.isArray(te))for(let Ae=0;Ae<te.length;Ae++){const pe=te[Ae];ec(pe,k,Q),O.add(pe)}else ec(te,k,Q),O.add(te)}),y=M.pop(),O},this.compileAsync=function(v,U,k=null){const O=this.compile(v,U,k);return new Promise(Q=>{function te(){if(O.forEach(function(Ae){_.get(Ae).currentProgram.isReady()&&O.delete(Ae)}),O.size===0){Q(v);return}setTimeout(te,10)}Xe.get("KHR_parallel_shader_compile")!==null?te():setTimeout(te,10)})};let Ks=null;function ku(v){Ks&&Ks(v)}function tc(){dr.stop()}function ic(){dr.start()}const dr=new nA;dr.setAnimationLoop(ku),typeof self<"u"&&dr.setContext(self),this.setAnimationLoop=function(v){Ks=v,ae.setAnimationLoop(v),v===null?dr.stop():dr.start()},ae.addEventListener("sessionstart",tc),ae.addEventListener("sessionend",ic),this.render=function(v,U){if(U!==void 0&&U.isCamera!==!0){Te("WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(C===!0)return;const k=ae.enabled===!0&&ae.isPresenting===!0,O=R!==null&&(F===null||k)&&R.begin(E,F);if(v.matrixWorldAutoUpdate===!0&&v.updateMatrixWorld(),U.parent===null&&U.matrixWorldAutoUpdate===!0&&U.updateMatrixWorld(),ae.enabled===!0&&ae.isPresenting===!0&&(R===null||R.isCompositing()===!1)&&(ae.cameraAutoUpdate===!0&&ae.updateCamera(U),U=ae.getCamera()),v.isScene===!0&&v.onBeforeRender(E,v,U,F),y=oe.get(v,M.length),y.init(U),M.push(y),tt.multiplyMatrices(U.projectionMatrix,U.matrixWorldInverse),Pe.setFromProjectionMatrix(tt,hi,U.reversedDepth),Re=this.localClippingEnabled,me=Ie.init(this.clippingPlanes,Re),I=Z.get(v,S.length),I.init(),S.push(I),ae.enabled===!0&&ae.isPresenting===!0){const te=E.xr.getDepthSensingMesh();te!==null&&Js(te,U,-1/0,E.sortObjects)}Js(v,U,0,E.sortObjects),I.finish(),E.sortObjects===!0&&I.sort(et,lt),_t=ae.enabled===!1||ae.isPresenting===!1||ae.hasDepthSensing()===!1,_t&&se.addToRenderList(I,v),this.info.render.frame++,me===!0&&Ie.beginShadows();const Q=y.state.shadowsArray;if(be.render(Q,v,U),me===!0&&Ie.endShadows(),this.info.autoReset===!0&&this.info.reset(),(O&&R.hasRenderPass())===!1){const te=I.opaque,Ae=I.transmissive;if(y.setupLights(),U.isArrayCamera){const pe=U.cameras;if(Ae.length>0)for(let ue=0,Be=pe.length;ue<Be;ue++){const Le=pe[ue];ac(te,Ae,v,Le)}_t&&se.render(v);for(let ue=0,Be=pe.length;ue<Be;ue++){const Le=pe[ue];rc(I,v,Le,Le.viewport)}}else Ae.length>0&&ac(te,Ae,v,U),_t&&se.render(v),rc(I,v,U)}F!==null&&P===0&&(L.updateMultisampleRenderTarget(F),L.updateRenderTargetMipmap(F)),O&&R.end(E),v.isScene===!0&&v.onAfterRender(E,v,U),de.resetDefaultState(),z=-1,q=null,M.pop(),M.length>0?(y=M[M.length-1],me===!0&&Ie.setGlobalState(E.clippingPlanes,y.state.camera)):y=null,S.pop(),S.length>0?I=S[S.length-1]:I=null};function Js(v,U,k,O){if(v.visible===!1)return;if(v.layers.test(U.layers)){if(v.isGroup)k=v.renderOrder;else if(v.isLOD)v.autoUpdate===!0&&v.update(U);else if(v.isLight)y.pushLight(v),v.castShadow&&y.pushShadow(v);else if(v.isSprite){if(!v.frustumCulled||Pe.intersectsSprite(v)){O&&ke.setFromMatrixPosition(v.matrixWorld).applyMatrix4(tt);const te=ne.update(v),Ae=v.material;Ae.visible&&I.push(v,te,Ae,k,ke.z,null)}}else if((v.isMesh||v.isLine||v.isPoints)&&(!v.frustumCulled||Pe.intersectsObject(v))){const te=ne.update(v),Ae=v.material;if(O&&(v.boundingSphere!==void 0?(v.boundingSphere===null&&v.computeBoundingSphere(),ke.copy(v.boundingSphere.center)):(te.boundingSphere===null&&te.computeBoundingSphere(),ke.copy(te.boundingSphere.center)),ke.applyMatrix4(v.matrixWorld).applyMatrix4(tt)),Array.isArray(Ae)){const pe=te.groups;for(let ue=0,Be=pe.length;ue<Be;ue++){const Le=pe[ue],we=Ae[Le.materialIndex];we&&we.visible&&I.push(v,te,we,k,ke.z,Le)}}else Ae.visible&&I.push(v,te,Ae,k,ke.z,null)}}const Q=v.children;for(let te=0,Ae=Q.length;te<Ae;te++)Js(Q[te],U,k,O)}function rc(v,U,k,O){const{opaque:Q,transmissive:te,transparent:Ae}=v;y.setupLightsView(k),me===!0&&Ie.setGlobalState(E.clippingPlanes,k),O&&_e.viewport(G.copy(O)),Q.length>0&&vn(Q,U,k),te.length>0&&vn(te,U,k),Ae.length>0&&vn(Ae,U,k),_e.buffers.depth.setTest(!0),_e.buffers.depth.setMask(!0),_e.buffers.color.setMask(!0),_e.setPolygonOffset(!1)}function ac(v,U,k,O){if((k.isScene===!0?k.overrideMaterial:null)!==null)return;if(y.state.transmissionRenderTarget[O.id]===void 0){const we=Xe.has("EXT_color_buffer_half_float")||Xe.has("EXT_color_buffer_float");y.state.transmissionRenderTarget[O.id]=new di(1,1,{generateMipmaps:!0,type:we?Rt:De,minFilter:Jt,samples:rt.samples,stencilBuffer:n,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:Ge.workingColorSpace})}const Q=y.state.transmissionRenderTarget[O.id],te=O.viewport||G;Q.setSize(te.z*E.transmissionResolutionScale,te.w*E.transmissionResolutionScale);const Ae=E.getRenderTarget(),pe=E.getActiveCubeFace(),ue=E.getActiveMipmapLevel();E.setRenderTarget(Q),E.getClearColor(ie),ce=E.getClearAlpha(),ce<1&&E.setClearColor(16777215,.5),E.clear(),_t&&se.render(k);const Be=E.toneMapping;E.toneMapping=li;const Le=O.viewport;if(O.viewport!==void 0&&(O.viewport=void 0),y.setupLightsView(O),me===!0&&Ie.setGlobalState(E.clippingPlanes,O),vn(v,k,O),L.updateMultisampleRenderTarget(Q),L.updateRenderTargetMipmap(Q),Xe.has("WEBGL_multisampled_render_to_texture")===!1){let we=!1;for(let je=0,at=U.length;je<at;je++){const pt=U[je],{object:ht,geometry:nt,material:ve,group:At}=pt;if(ve.side===oi&&ht.layers.test(O.layers)){const Li=ve.side;ve.side=Qt,ve.needsUpdate=!0,nc(ht,k,O,nt,ve,At),ve.side=Li,ve.needsUpdate=!0,we=!0}}we===!0&&(L.updateMultisampleRenderTarget(Q),L.updateRenderTargetMipmap(Q))}E.setRenderTarget(Ae,pe,ue),E.setClearColor(ie,ce),Le!==void 0&&(O.viewport=Le),E.toneMapping=Be}function vn(v,U,k){const O=U.isScene===!0?U.overrideMaterial:null;for(let Q=0,te=v.length;Q<te;Q++){const Ae=v[Q],{object:pe,geometry:ue,group:Be}=Ae;let Le=Ae.material;Le.allowOverride===!0&&O!==null&&(Le=O),pe.layers.test(k.layers)&&nc(pe,U,k,ue,Le,Be)}}function nc(v,U,k,O,Q,te){v.onBeforeRender(E,U,k,O,Q,te),v.modelViewMatrix.multiplyMatrices(k.matrixWorldInverse,v.matrixWorld),v.normalMatrix.getNormalMatrix(v.modelViewMatrix),Q.onBeforeRender(E,U,k,O,v,te),Q.transparent===!0&&Q.side===oi&&Q.forceSinglePass===!1?(Q.side=Qt,Q.needsUpdate=!0,E.renderBufferDirect(k,U,O,Q,v,te),Q.side=yi,Q.needsUpdate=!0,E.renderBufferDirect(k,U,O,Q,v,te),Q.side=oi):E.renderBufferDirect(k,U,O,Q,v,te),v.onAfterRender(E,U,k,O,Q,te)}function xn(v,U,k){U.isScene!==!0&&(U=vt);const O=_.get(v),Q=y.state.lights,te=y.state.shadowsArray,Ae=Q.state.version,pe=Ee.getParameters(v,Q.state,te,U,k),ue=Ee.getProgramCacheKey(pe);let Be=O.programs;O.environment=v.isMeshStandardMaterial?U.environment:null,O.fog=U.fog,O.envMap=(v.isMeshStandardMaterial?j:W).get(v.envMap||O.environment),O.envMapRotation=O.environment!==null&&v.envMap===null?U.environmentRotation:v.envMapRotation,Be===void 0&&(v.addEventListener("dispose",Ci),Be=new Map,O.programs=Be);let Le=Be.get(ue);if(Le!==void 0){if(O.currentProgram===Le&&O.lightsStateVersion===Ae)return oc(v,pe),Le}else pe.uniforms=Ee.getUniforms(v),v.onBeforeCompile(pe,E),Le=Ee.acquireProgram(pe,ue),Be.set(ue,Le),O.uniforms=pe.uniforms;const we=O.uniforms;return(!v.isShaderMaterial&&!v.isRawShaderMaterial||v.clipping===!0)&&(we.clippingPlanes=Ie.uniform),oc(v,pe),O.needsLights=zu(v),O.lightsStateVersion=Ae,O.needsLights&&(we.ambientLightColor.value=Q.state.ambient,we.lightProbe.value=Q.state.probe,we.directionalLights.value=Q.state.directional,we.directionalLightShadows.value=Q.state.directionalShadow,we.spotLights.value=Q.state.spot,we.spotLightShadows.value=Q.state.spotShadow,we.rectAreaLights.value=Q.state.rectArea,we.ltc_1.value=Q.state.rectAreaLTC1,we.ltc_2.value=Q.state.rectAreaLTC2,we.pointLights.value=Q.state.point,we.pointLightShadows.value=Q.state.pointShadow,we.hemisphereLights.value=Q.state.hemi,we.directionalShadowMap.value=Q.state.directionalShadowMap,we.directionalShadowMatrix.value=Q.state.directionalShadowMatrix,we.spotShadowMap.value=Q.state.spotShadowMap,we.spotLightMatrix.value=Q.state.spotLightMatrix,we.spotLightMap.value=Q.state.spotLightMap,we.pointShadowMap.value=Q.state.pointShadowMap,we.pointShadowMatrix.value=Q.state.pointShadowMatrix),O.currentProgram=Le,O.uniformsList=null,Le}function sc(v){if(v.uniformsList===null){const U=v.currentProgram.getUniforms();v.uniformsList=zs.seqWithValue(U.seq,v.uniforms)}return v.uniformsList}function oc(v,U){const k=_.get(v);k.outputColorSpace=U.outputColorSpace,k.batching=U.batching,k.batchingColor=U.batchingColor,k.instancing=U.instancing,k.instancingColor=U.instancingColor,k.instancingMorph=U.instancingMorph,k.skinning=U.skinning,k.morphTargets=U.morphTargets,k.morphNormals=U.morphNormals,k.morphColors=U.morphColors,k.morphTargetsCount=U.morphTargetsCount,k.numClippingPlanes=U.numClippingPlanes,k.numIntersection=U.numClipIntersection,k.vertexAlphas=U.vertexAlphas,k.vertexTangents=U.vertexTangents,k.toneMapping=U.toneMapping}function Gu(v,U,k,O,Q){U.isScene!==!0&&(U=vt),L.resetTextureUnits();const te=U.fog,Ae=O.isMeshStandardMaterial?U.environment:null,pe=F===null?E.outputColorSpace:F.isXRRenderTarget===!0?F.texture.colorSpace:wt,ue=(O.isMeshStandardMaterial?j:W).get(O.envMap||Ae),Be=O.vertexColors===!0&&!!k.attributes.color&&k.attributes.color.itemSize===4,Le=!!k.attributes.tangent&&(!!O.normalMap||O.anisotropy>0),we=!!k.morphAttributes.position,je=!!k.morphAttributes.normal,at=!!k.morphAttributes.color;let pt=li;O.toneMapped&&(F===null||F.isXRRenderTarget===!0)&&(pt=E.toneMapping);const ht=k.morphAttributes.position||k.morphAttributes.normal||k.morphAttributes.color,nt=ht!==void 0?ht.length:0,ve=_.get(O),At=y.state.lights;if(me===!0&&(Re===!0||v!==q)){const Bt=v===q&&O.id===z;Ie.setState(O,v,Bt)}let Li=!1;O.version===ve.__version?(ve.needsLights&&ve.lightsStateVersion!==At.state.version||ve.outputColorSpace!==pe||Q.isBatchedMesh&&ve.batching===!1||!Q.isBatchedMesh&&ve.batching===!0||Q.isBatchedMesh&&ve.batchingColor===!0&&Q.colorTexture===null||Q.isBatchedMesh&&ve.batchingColor===!1&&Q.colorTexture!==null||Q.isInstancedMesh&&ve.instancing===!1||!Q.isInstancedMesh&&ve.instancing===!0||Q.isSkinnedMesh&&ve.skinning===!1||!Q.isSkinnedMesh&&ve.skinning===!0||Q.isInstancedMesh&&ve.instancingColor===!0&&Q.instanceColor===null||Q.isInstancedMesh&&ve.instancingColor===!1&&Q.instanceColor!==null||Q.isInstancedMesh&&ve.instancingMorph===!0&&Q.morphTexture===null||Q.isInstancedMesh&&ve.instancingMorph===!1&&Q.morphTexture!==null||ve.envMap!==ue||O.fog===!0&&ve.fog!==te||ve.numClippingPlanes!==void 0&&(ve.numClippingPlanes!==Ie.numPlanes||ve.numIntersection!==Ie.numIntersection)||ve.vertexAlphas!==Be||ve.vertexTangents!==Le||ve.morphTargets!==we||ve.morphNormals!==je||ve.morphColors!==at||ve.toneMapping!==pt||ve.morphTargetsCount!==nt)&&(Li=!0):(Li=!0,ve.__version=O.version);let ni=ve.currentProgram;Li===!0&&(ni=xn(O,U,Q));let Gr=!1,zt=!1,Ta=!1;const st=ni.getUniforms(),Gt=ve.uniforms;if(_e.useProgram(ni.program)&&(Gr=!0,zt=!0,Ta=!0),O.id!==z&&(z=O.id,zt=!0),Gr||q!==v){_e.buffers.depth.getReversed()&&v.reversedDepth!==!0&&(v._reversedDepth=!0,v.updateProjectionMatrix()),st.setValue(T,"projectionMatrix",v.projectionMatrix),st.setValue(T,"viewMatrix",v.matrixWorldInverse);const Bt=st.map.cameraPosition;Bt!==void 0&&Bt.setValue(T,it.setFromMatrixPosition(v.matrixWorld)),rt.logarithmicDepthBuffer&&st.setValue(T,"logDepthBufFC",2/(Math.log(v.far+1)/Math.LN2)),(O.isMeshPhongMaterial||O.isMeshToonMaterial||O.isMeshLambertMaterial||O.isMeshBasicMaterial||O.isMeshStandardMaterial||O.isShaderMaterial)&&st.setValue(T,"isOrthographic",v.isOrthographicCamera===!0),q!==v&&(q=v,zt=!0,Ta=!0)}if(ve.needsLights&&(At.state.directionalShadowMap.length>0&&st.setValue(T,"directionalShadowMap",At.state.directionalShadowMap,L),At.state.spotShadowMap.length>0&&st.setValue(T,"spotShadowMap",At.state.spotShadowMap,L),At.state.pointShadowMap.length>0&&st.setValue(T,"pointShadowMap",At.state.pointShadowMap,L)),Q.isSkinnedMesh){st.setOptional(T,Q,"bindMatrix"),st.setOptional(T,Q,"bindMatrixInverse");const Bt=Q.skeleton;Bt&&(Bt.boneTexture===null&&Bt.computeBoneTexture(),st.setValue(T,"boneTexture",Bt.boneTexture,L))}Q.isBatchedMesh&&(st.setOptional(T,Q,"batchingTexture"),st.setValue(T,"batchingTexture",Q._matricesTexture,L),st.setOptional(T,Q,"batchingIdTexture"),st.setValue(T,"batchingIdTexture",Q._indirectTexture,L),st.setOptional(T,Q,"batchingColorTexture"),Q._colorsTexture!==null&&st.setValue(T,"batchingColorTexture",Q._colorsTexture,L));const Yt=k.morphAttributes;if((Yt.position!==void 0||Yt.normal!==void 0||Yt.color!==void 0)&&He.update(Q,k,ni),(zt||ve.receiveShadow!==Q.receiveShadow)&&(ve.receiveShadow=Q.receiveShadow,st.setValue(T,"receiveShadow",Q.receiveShadow)),O.isMeshGouraudMaterial&&O.envMap!==null&&(Gt.envMap.value=ue,Gt.flipEnvMap.value=ue.isCubeTexture&&ue.isRenderTargetTexture===!1?-1:1),O.isMeshStandardMaterial&&O.envMap===null&&U.environment!==null&&(Gt.envMapIntensity.value=U.environmentIntensity),Gt.dfgLUT!==void 0&&(Gt.dfgLUT.value=W_()),zt&&(st.setValue(T,"toneMappingExposure",E.toneMappingExposure),ve.needsLights&&Hu(Gt,Ta),te&&O.fog===!0&&ye.refreshFogUniforms(Gt,te),ye.refreshMaterialUniforms(Gt,O,Se,fe,y.state.transmissionRenderTarget[v.id]),zs.upload(T,sc(ve),Gt,L)),O.isShaderMaterial&&O.uniformsNeedUpdate===!0&&(zs.upload(T,sc(ve),Gt,L),O.uniformsNeedUpdate=!1),O.isSpriteMaterial&&st.setValue(T,"center",Q.center),st.setValue(T,"modelViewMatrix",Q.modelViewMatrix),st.setValue(T,"normalMatrix",Q.normalMatrix),st.setValue(T,"modelMatrix",Q.matrixWorld),O.isShaderMaterial||O.isRawShaderMaterial){const Bt=O.uniformsGroups;for(let si=0,Zs=Bt.length;si<Zs;si++){const pr=Bt[si];$.update(pr,ni),$.bind(pr,ni)}}return ni}function Hu(v,U){v.ambientLightColor.needsUpdate=U,v.lightProbe.needsUpdate=U,v.directionalLights.needsUpdate=U,v.directionalLightShadows.needsUpdate=U,v.pointLights.needsUpdate=U,v.pointLightShadows.needsUpdate=U,v.spotLights.needsUpdate=U,v.spotLightShadows.needsUpdate=U,v.rectAreaLights.needsUpdate=U,v.hemisphereLights.needsUpdate=U}function zu(v){return v.isMeshLambertMaterial||v.isMeshToonMaterial||v.isMeshPhongMaterial||v.isMeshStandardMaterial||v.isShadowMaterial||v.isShaderMaterial&&v.lights===!0}this.getActiveCubeFace=function(){return B},this.getActiveMipmapLevel=function(){return P},this.getRenderTarget=function(){return F},this.setRenderTargetTextures=function(v,U,k){const O=_.get(v);O.__autoAllocateDepthBuffer=v.resolveDepthBuffer===!1,O.__autoAllocateDepthBuffer===!1&&(O.__useRenderToTexture=!1),_.get(v.texture).__webglTexture=U,_.get(v.depthTexture).__webglTexture=O.__autoAllocateDepthBuffer?void 0:k,O.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(v,U){const k=_.get(v);k.__webglFramebuffer=U,k.__useDefaultFramebuffer=U===void 0};const Vu=T.createFramebuffer();this.setRenderTarget=function(v,U=0,k=0){F=v,B=U,P=k;let O=null,Q=!1,te=!1;if(v){const Ae=_.get(v);if(Ae.__useDefaultFramebuffer!==void 0){_e.bindFramebuffer(T.FRAMEBUFFER,Ae.__webglFramebuffer),G.copy(v.viewport),H.copy(v.scissor),Y=v.scissorTest,_e.viewport(G),_e.scissor(H),_e.setScissorTest(Y),z=-1;return}else if(Ae.__webglFramebuffer===void 0)L.setupRenderTarget(v);else if(Ae.__hasExternalTextures)L.rebindTextures(v,_.get(v.texture).__webglTexture,_.get(v.depthTexture).__webglTexture);else if(v.depthBuffer){const Be=v.depthTexture;if(Ae.__boundDepthTexture!==Be){if(Be!==null&&_.has(Be)&&(v.width!==Be.image.width||v.height!==Be.image.height))throw new Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.");L.setupDepthRenderbuffer(v)}}const pe=v.texture;(pe.isData3DTexture||pe.isDataArrayTexture||pe.isCompressedArrayTexture)&&(te=!0);const ue=_.get(v).__webglFramebuffer;v.isWebGLCubeRenderTarget?(Array.isArray(ue[U])?O=ue[U][k]:O=ue[U],Q=!0):v.samples>0&&L.useMultisampledRTT(v)===!1?O=_.get(v).__webglMultisampledFramebuffer:Array.isArray(ue)?O=ue[k]:O=ue,G.copy(v.viewport),H.copy(v.scissor),Y=v.scissorTest}else G.copy(X).multiplyScalar(Se).floor(),H.copy(J).multiplyScalar(Se).floor(),Y=ge;if(k!==0&&(O=Vu),_e.bindFramebuffer(T.FRAMEBUFFER,O)&&_e.drawBuffers(v,O),_e.viewport(G),_e.scissor(H),_e.setScissorTest(Y),Q){const Ae=_.get(v.texture);T.framebufferTexture2D(T.FRAMEBUFFER,T.COLOR_ATTACHMENT0,T.TEXTURE_CUBE_MAP_POSITIVE_X+U,Ae.__webglTexture,k)}else if(te){const Ae=U;for(let pe=0;pe<v.textures.length;pe++){const ue=_.get(v.textures[pe]);T.framebufferTextureLayer(T.FRAMEBUFFER,T.COLOR_ATTACHMENT0+pe,ue.__webglTexture,k,Ae)}}else if(v!==null&&k!==0){const Ae=_.get(v.texture);T.framebufferTexture2D(T.FRAMEBUFFER,T.COLOR_ATTACHMENT0,T.TEXTURE_2D,Ae.__webglTexture,k)}z=-1},this.readRenderTargetPixels=function(v,U,k,O,Q,te,Ae,pe=0){if(!(v&&v.isWebGLRenderTarget)){Te("WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let ue=_.get(v).__webglFramebuffer;if(v.isWebGLCubeRenderTarget&&Ae!==void 0&&(ue=ue[Ae]),ue){_e.bindFramebuffer(T.FRAMEBUFFER,ue);try{const Be=v.textures[pe],Le=Be.format,we=Be.type;if(!rt.textureFormatReadable(Le)){Te("WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!rt.textureTypeReadable(we)){Te("WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}U>=0&&U<=v.width-O&&k>=0&&k<=v.height-Q&&(v.textures.length>1&&T.readBuffer(T.COLOR_ATTACHMENT0+pe),T.readPixels(U,k,O,Q,ee.convert(Le),ee.convert(we),te))}finally{const Be=F!==null?_.get(F).__webglFramebuffer:null;_e.bindFramebuffer(T.FRAMEBUFFER,Be)}}},this.readRenderTargetPixelsAsync=async function(v,U,k,O,Q,te,Ae,pe=0){if(!(v&&v.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let ue=_.get(v).__webglFramebuffer;if(v.isWebGLCubeRenderTarget&&Ae!==void 0&&(ue=ue[Ae]),ue)if(U>=0&&U<=v.width-O&&k>=0&&k<=v.height-Q){_e.bindFramebuffer(T.FRAMEBUFFER,ue);const Be=v.textures[pe],Le=Be.format,we=Be.type;if(!rt.textureFormatReadable(Le))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!rt.textureTypeReadable(we))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const je=T.createBuffer();T.bindBuffer(T.PIXEL_PACK_BUFFER,je),T.bufferData(T.PIXEL_PACK_BUFFER,te.byteLength,T.STREAM_READ),v.textures.length>1&&T.readBuffer(T.COLOR_ATTACHMENT0+pe),T.readPixels(U,k,O,Q,ee.convert(Le),ee.convert(we),0);const at=F!==null?_.get(F).__webglFramebuffer:null;_e.bindFramebuffer(T.FRAMEBUFFER,at);const pt=T.fenceSync(T.SYNC_GPU_COMMANDS_COMPLETE,0);return T.flush(),await Xu(T,pt,4),T.bindBuffer(T.PIXEL_PACK_BUFFER,je),T.getBufferSubData(T.PIXEL_PACK_BUFFER,0,te),T.deleteBuffer(je),T.deleteSync(pt),te}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(v,U=null,k=0){const O=Math.pow(2,-k),Q=Math.floor(v.image.width*O),te=Math.floor(v.image.height*O),Ae=U!==null?U.x:0,pe=U!==null?U.y:0;L.setTexture2D(v,0),T.copyTexSubImage2D(T.TEXTURE_2D,k,0,0,Ae,pe,Q,te),_e.unbindTexture()};const Wu=T.createFramebuffer(),qu=T.createFramebuffer();this.copyTextureToTexture=function(v,U,k=null,O=null,Q=0,te=null){te===null&&(Q!==0?($r("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),te=Q,Q=0):te=0);let Ae,pe,ue,Be,Le,we,je,at,pt;const ht=v.isCompressedTexture?v.mipmaps[te]:v.image;if(k!==null)Ae=k.max.x-k.min.x,pe=k.max.y-k.min.y,ue=k.isBox3?k.max.z-k.min.z:1,Be=k.min.x,Le=k.min.y,we=k.isBox3?k.min.z:0;else{const Yt=Math.pow(2,-Q);Ae=Math.floor(ht.width*Yt),pe=Math.floor(ht.height*Yt),v.isDataArrayTexture?ue=ht.depth:v.isData3DTexture?ue=Math.floor(ht.depth*Yt):ue=1,Be=0,Le=0,we=0}O!==null?(je=O.x,at=O.y,pt=O.z):(je=0,at=0,pt=0);const nt=ee.convert(U.format),ve=ee.convert(U.type);let At;U.isData3DTexture?(L.setTexture3D(U,0),At=T.TEXTURE_3D):U.isDataArrayTexture||U.isCompressedArrayTexture?(L.setTexture2DArray(U,0),At=T.TEXTURE_2D_ARRAY):(L.setTexture2D(U,0),At=T.TEXTURE_2D),T.pixelStorei(T.UNPACK_FLIP_Y_WEBGL,U.flipY),T.pixelStorei(T.UNPACK_PREMULTIPLY_ALPHA_WEBGL,U.premultiplyAlpha),T.pixelStorei(T.UNPACK_ALIGNMENT,U.unpackAlignment);const Li=T.getParameter(T.UNPACK_ROW_LENGTH),ni=T.getParameter(T.UNPACK_IMAGE_HEIGHT),Gr=T.getParameter(T.UNPACK_SKIP_PIXELS),zt=T.getParameter(T.UNPACK_SKIP_ROWS),Ta=T.getParameter(T.UNPACK_SKIP_IMAGES);T.pixelStorei(T.UNPACK_ROW_LENGTH,ht.width),T.pixelStorei(T.UNPACK_IMAGE_HEIGHT,ht.height),T.pixelStorei(T.UNPACK_SKIP_PIXELS,Be),T.pixelStorei(T.UNPACK_SKIP_ROWS,Le),T.pixelStorei(T.UNPACK_SKIP_IMAGES,we);const st=v.isDataArrayTexture||v.isData3DTexture,Gt=U.isDataArrayTexture||U.isData3DTexture;if(v.isDepthTexture){const Yt=_.get(v),Bt=_.get(U),si=_.get(Yt.__renderTarget),Zs=_.get(Bt.__renderTarget);_e.bindFramebuffer(T.READ_FRAMEBUFFER,si.__webglFramebuffer),_e.bindFramebuffer(T.DRAW_FRAMEBUFFER,Zs.__webglFramebuffer);for(let pr=0;pr<ue;pr++)st&&(T.framebufferTextureLayer(T.READ_FRAMEBUFFER,T.COLOR_ATTACHMENT0,_.get(v).__webglTexture,Q,we+pr),T.framebufferTextureLayer(T.DRAW_FRAMEBUFFER,T.COLOR_ATTACHMENT0,_.get(U).__webglTexture,te,pt+pr)),T.blitFramebuffer(Be,Le,Ae,pe,je,at,Ae,pe,T.DEPTH_BUFFER_BIT,T.NEAREST);_e.bindFramebuffer(T.READ_FRAMEBUFFER,null),_e.bindFramebuffer(T.DRAW_FRAMEBUFFER,null)}else if(Q!==0||v.isRenderTargetTexture||_.has(v)){const Yt=_.get(v),Bt=_.get(U);_e.bindFramebuffer(T.READ_FRAMEBUFFER,Wu),_e.bindFramebuffer(T.DRAW_FRAMEBUFFER,qu);for(let si=0;si<ue;si++)st?T.framebufferTextureLayer(T.READ_FRAMEBUFFER,T.COLOR_ATTACHMENT0,Yt.__webglTexture,Q,we+si):T.framebufferTexture2D(T.READ_FRAMEBUFFER,T.COLOR_ATTACHMENT0,T.TEXTURE_2D,Yt.__webglTexture,Q),Gt?T.framebufferTextureLayer(T.DRAW_FRAMEBUFFER,T.COLOR_ATTACHMENT0,Bt.__webglTexture,te,pt+si):T.framebufferTexture2D(T.DRAW_FRAMEBUFFER,T.COLOR_ATTACHMENT0,T.TEXTURE_2D,Bt.__webglTexture,te),Q!==0?T.blitFramebuffer(Be,Le,Ae,pe,je,at,Ae,pe,T.COLOR_BUFFER_BIT,T.NEAREST):Gt?T.copyTexSubImage3D(At,te,je,at,pt+si,Be,Le,Ae,pe):T.copyTexSubImage2D(At,te,je,at,Be,Le,Ae,pe);_e.bindFramebuffer(T.READ_FRAMEBUFFER,null),_e.bindFramebuffer(T.DRAW_FRAMEBUFFER,null)}else Gt?v.isDataTexture||v.isData3DTexture?T.texSubImage3D(At,te,je,at,pt,Ae,pe,ue,nt,ve,ht.data):U.isCompressedArrayTexture?T.compressedTexSubImage3D(At,te,je,at,pt,Ae,pe,ue,nt,ht.data):T.texSubImage3D(At,te,je,at,pt,Ae,pe,ue,nt,ve,ht):v.isDataTexture?T.texSubImage2D(T.TEXTURE_2D,te,je,at,Ae,pe,nt,ve,ht.data):v.isCompressedTexture?T.compressedTexSubImage2D(T.TEXTURE_2D,te,je,at,ht.width,ht.height,nt,ht.data):T.texSubImage2D(T.TEXTURE_2D,te,je,at,Ae,pe,nt,ve,ht);T.pixelStorei(T.UNPACK_ROW_LENGTH,Li),T.pixelStorei(T.UNPACK_IMAGE_HEIGHT,ni),T.pixelStorei(T.UNPACK_SKIP_PIXELS,Gr),T.pixelStorei(T.UNPACK_SKIP_ROWS,zt),T.pixelStorei(T.UNPACK_SKIP_IMAGES,Ta),te===0&&U.generateMipmaps&&T.generateMipmap(At),_e.unbindTexture()},this.initRenderTarget=function(v){_.get(v).__webglFramebuffer===void 0&&L.setupRenderTarget(v)},this.initTexture=function(v){v.isCubeTexture?L.setTextureCube(v,0):v.isData3DTexture?L.setTexture3D(v,0):v.isDataArrayTexture||v.isCompressedArrayTexture?L.setTexture2DArray(v,0):L.setTexture2D(v,0),_e.unbindTexture()},this.resetState=function(){B=0,P=0,F=null,_e.reset(),de.reset()},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return hi}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(e){this._outputColorSpace=e;const t=this.getContext();t.drawingBufferColorSpace=Ge._getDrawingBufferColorSpace(e),t.unpackColorSpace=Ge._getUnpackColorSpace()}}const j_=Object.freeze(Object.defineProperty({__proto__:null,ACESFilmicToneMapping:oo,AddEquation:Xi,AddOperation:Bc,AdditiveBlending:eo,AgXToneMapping:co,AlphaFormat:fo,AlwaysCompare:Gc,AlwaysDepth:Mn,AlwaysStencilFunc:xo,AnimationClip:qh,ArrayCamera:iA,AttachedBindMode:Ao,BackSide:Qt,BasicDepthPacking:Uc,Bone:tl,BooleanKeyframeTrack:Br,Box3:Vt,BoxGeometry:Ma,BufferAttribute:Ct,BufferGeometry:mt,ByteType:po,Cache:Ti,Camera:Ko,CineonToneMapping:so,ClampToEdgeWrapping:Kt,Clock:rA,Color:Ue,ColorKeyframeTrack:ll,ColorManagement:Ge,CompressedArrayTexture:Uh,CompressedCubeTexture:Nh,CompressedTexture:fa,ConstantAlphaFactor:Mc,ConstantColorFactor:yc,CubeCamera:ph,CubeDepthTexture:Qh,CubeReflectionMapping:Ui,CubeRefractionMapping:mr,CubeTexture:Jo,CubeUVReflectionMapping:Ra,CubicInterpolant:Hh,CullFaceBack:$s,CullFaceFront:cc,CullFaceNone:lc,CustomBlending:Ac,CustomToneMapping:lo,Data3DTexture:Bo,DataArrayTexture:To,DataTexture:nn,DefaultLoadingManager:Xh,DepthFormat:Mi,DepthStencilFormat:Yi,DepthTexture:ma,DetachedBindMode:Rc,DirectionalLight:eA,DiscreteInterpolant:Vh,DoubleSide:oi,DstAlphaFactor:bc,DstColorFactor:xc,EqualCompare:Fc,EqualDepth:Tn,EquirectangularReflectionMapping:Ln,EquirectangularRefractionMapping:Un,Euler:ji,EventDispatcher:yr,ExternalTexture:ol,FileLoader:or,Float32BufferAttribute:$t,FloatType:Mt,FrontSide:yi,Frustum:Bs,GLSL3:Io,GreaterCompare:Oc,GreaterDepth:Rn,GreaterEqualCompare:ns,GreaterEqualDepth:Bn,Group:nr,HalfFloatType:Rt,ImageBitmapLoader:tA,ImageLoader:Yh,ImageUtils:Kc,InstancedBufferAttribute:Ms,InstancedMesh:Ch,IntType:Qn,InterleavedBuffer:ys,InterleavedBufferAttribute:wa,Interpolant:_a,InterpolateDiscrete:Jr,InterpolateLinear:Zr,InterpolateSmooth:is,KeepStencilOp:Cr,KeyframeTrack:ti,Layers:Qo,LessCompare:Pc,LessDepth:wn,LessEqualCompare:as,LessEqualDepth:fr,Light:Os,Line:Us,LineBasicMaterial:rl,LineLoop:Bh,LineSegments:Th,LinearFilter:ct,LinearInterpolant:zh,LinearMipmapLinearFilter:Jt,LinearMipmapNearestFilter:La,LinearSRGBColorSpace:wt,LinearToneMapping:ao,LinearTransfer:ja,Loader:zi,LoaderUtils:ba,LoadingManager:jh,Material:mi,MathUtils:qc,Matrix3:Ne,Matrix4:Qe,MaxEquation:gc,Mesh:ft,MeshBasicMaterial:rr,MeshDepthMaterial:Fh,MeshDistanceMaterial:Oh,MeshPhysicalMaterial:Ei,MeshStandardMaterial:cn,MinEquation:pc,MirroredRepeatWrapping:Da,MixOperation:Tc,MultiplyBlending:io,MultiplyOperation:ro,NearestFilter:gt,NearestMipmapLinearFilter:zr,NearestMipmapNearestFilter:Nn,NeutralToneMapping:ho,NeverCompare:Qc,NeverDepth:Sn,NoBlending:Si,NoColorSpace:wi,NoToneMapping:li,NormalAnimationBlendMode:Dc,NormalBlending:gr,NotEqualCompare:kc,NotEqualDepth:Dn,NumberKeyframeTrack:Rr,Object3D:dt,ObjectSpaceNormalMap:Nc,OneFactor:mc,OneMinusConstantAlphaFactor:wc,OneMinusConstantColorFactor:Sc,OneMinusDstAlphaFactor:vc,OneMinusDstColorFactor:Ic,OneMinusSrcAlphaFactor:yn,OneMinusSrcColorFactor:Ec,OrthographicCamera:hn,PCFShadowMap:Ba,PCFSoftShadowMap:hc,PMREMGenerator:El,PerspectiveCamera:Ft,Plane:sr,PlaneGeometry:bn,PointLight:$h,Points:Dh,PointsMaterial:nl,PropertyBinding:Je,Quaternion:Qi,QuaternionKeyframeTrack:Dr,QuaternionLinearInterpolant:Wh,R11_EAC_Format:Fa,RED_GREEN_RGTC2_Format:Wa,RED_RGTC1_Format:za,REVISION:In,RG11_EAC_Format:ka,RGBAFormat:It,RGBAIntegerFormat:Gn,RGBA_ASTC_10x10_Format:Zn,RGBA_ASTC_10x5_Format:Yn,RGBA_ASTC_10x6_Format:Kn,RGBA_ASTC_10x8_Format:Jn,RGBA_ASTC_12x10_Format:$n,RGBA_ASTC_12x12_Format:es,RGBA_ASTC_4x4_Format:Ji,RGBA_ASTC_5x4_Format:zn,RGBA_ASTC_5x5_Format:Vn,RGBA_ASTC_6x5_Format:Wn,RGBA_ASTC_6x6_Format:xr,RGBA_ASTC_8x5_Format:qn,RGBA_ASTC_8x6_Format:jn,RGBA_ASTC_8x8_Format:Xn,RGBA_BPTC_Format:Ir,RGBA_ETC2_EAC_Format:Kr,RGBA_PVRTC_2BPPV1_Format:Xr,RGBA_PVRTC_4BPPV1_Format:vr,RGBA_S3TC_DXT1_Format:Ki,RGBA_S3TC_DXT3_Format:br,RGBA_S3TC_DXT5_Format:jr,RGBFormat:qr,RGB_BPTC_SIGNED_Format:ts,RGB_BPTC_UNSIGNED_Format:Ha,RGB_ETC1_Format:Pa,RGB_ETC2_Format:Yr,RGB_PVRTC_2BPPV1_Format:Hn,RGB_PVRTC_4BPPV1_Format:Qa,RGB_S3TC_DXT1_Format:Er,RGFormat:Zt,RGIntegerFormat:kn,RawShaderMaterial:Ph,Ray:tn,RedFormat:Ni,RedIntegerFormat:On,ReinhardToneMapping:no,RenderTarget:Jc,RepeatWrapping:_r,ReverseSubtractEquation:dc,SIGNED_R11_EAC_Format:Oa,SIGNED_RED_GREEN_RGTC2_Format:qa,SIGNED_RED_RGTC1_Format:Va,SIGNED_RG11_EAC_Format:Ga,SRGBColorSpace:ut,SRGBTransfer:Ye,ShaderChunk:Fe,ShaderLib:bi,ShaderMaterial:_i,ShortType:go,Skeleton:Ys,SkinnedMesh:bh,Source:os,Sphere:Wt,SpotLight:Zh,SrcAlphaFactor:Cn,SrcAlphaSaturateFactor:Cc,SrcColorFactor:_c,StaticDrawUsage:ss,StringKeyframeTrack:Lr,SubtractEquation:uc,SubtractiveBlending:to,TangentSpaceNormalMap:vo,Texture:Ke,TextureLoader:cl,Triangle:ri,TriangleFanDrawMode:rs,TriangleStripDrawMode:bo,TrianglesDrawMode:Lc,UVMapping:uo,Uint16BufferAttribute:qo,Uint32BufferAttribute:jo,UniformsLib:le,UniformsUtils:Ah,UnsignedByteType:De,UnsignedInt101111Type:Na,UnsignedInt248Type:Wr,UnsignedInt5999Type:Ua,UnsignedIntType:ci,UnsignedShort4444Type:Pn,UnsignedShort5551Type:Fn,UnsignedShortType:Vr,VSMShadowMap:Hr,Vector2:We,Vector3:N,Vector4:ot,VectorKeyframeTrack:Ur,WebGLCoordinateSystem:hi,WebGLCubeRenderTarget:Zo,WebGLRenderTarget:di,WebGLRenderer:q_,WebGLUtils:DA,WebGPUCoordinateSystem:Xa,WebXRController:Cs,WrapAroundEnding:Eo,ZeroCurvatureEnding:mo,ZeroFactor:fc,ZeroSlopeEnding:_o,createCanvasElement:zc,error:Te,log:Ka,warn:xe,warnOnce:$r},Symbol.toStringTag,{value:"Module"}));function LA(a,e){if(e===Lc)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),a;if(e===rs||e===bo){let t=a.getIndex();if(t===null){const s=[],o=a.getAttribute("position");if(o!==void 0){for(let l=0;l<o.count;l++)s.push(l);a.setIndex(s),t=a.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),a}const i=t.count-2,r=[];if(e===rs)for(let s=1;s<=i;s++)r.push(t.getX(0)),r.push(t.getX(s)),r.push(t.getX(s+1));else for(let s=0;s<i;s++)s%2===0?(r.push(t.getX(s)),r.push(t.getX(s+1)),r.push(t.getX(s+2))):(r.push(t.getX(s+2)),r.push(t.getX(s+1)),r.push(t.getX(s)));r.length/3!==i&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const n=a.clone();return n.setIndex(r),n.clearGroups(),n}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",e),a}class Cl extends zi{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(t){return new Z_(t)}),this.register(function(t){return new $_(t)}),this.register(function(t){return new l0(t)}),this.register(function(t){return new c0(t)}),this.register(function(t){return new h0(t)}),this.register(function(t){return new t0(t)}),this.register(function(t){return new i0(t)}),this.register(function(t){return new r0(t)}),this.register(function(t){return new a0(t)}),this.register(function(t){return new J_(t)}),this.register(function(t){return new n0(t)}),this.register(function(t){return new e0(t)}),this.register(function(t){return new o0(t)}),this.register(function(t){return new s0(t)}),this.register(function(t){return new Y_(t)}),this.register(function(t){return new A0(t)}),this.register(function(t){return new u0(t)})}load(e,t,i,r){const n=this;let s;if(this.resourcePath!=="")s=this.resourcePath;else if(this.path!==""){const c=ba.extractUrlBase(e);s=ba.resolveURL(c,this.path)}else s=ba.extractUrlBase(e);this.manager.itemStart(e);const o=function(c){r?r(c):console.error(c),n.manager.itemError(e),n.manager.itemEnd(e)},l=new or(this.manager);l.setPath(this.path),l.setResponseType("arraybuffer"),l.setRequestHeader(this.requestHeader),l.setWithCredentials(this.withCredentials),l.load(e,function(c){try{n.parse(c,s,function(h){t(h),n.manager.itemEnd(e)},o)}catch(h){o(h)}},i,o)}setDRACOLoader(e){return this.dracoLoader=e,this}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,i,r){let n;const s={},o={},l=new TextDecoder;if(typeof e=="string")n=JSON.parse(e);else if(e instanceof ArrayBuffer)if(l.decode(new Uint8Array(e,0,4))===UA){try{s[Ve.KHR_BINARY_GLTF]=new d0(e)}catch(h){r&&r(h);return}n=JSON.parse(s[Ve.KHR_BINARY_GLTF].content)}else n=JSON.parse(l.decode(e));else n=e;if(n.asset===void 0||n.asset.version[0]<2){r&&r(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));return}const c=new S0(n,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});c.fileLoader.setRequestHeader(this.requestHeader);for(let h=0;h<this.pluginCallbacks.length;h++){const A=this.pluginCallbacks[h](c);A.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),o[A.name]=A,s[A.name]=!0}if(n.extensionsUsed)for(let h=0;h<n.extensionsUsed.length;++h){const A=n.extensionsUsed[h],u=n.extensionsRequired||[];switch(A){case Ve.KHR_MATERIALS_UNLIT:s[A]=new K_;break;case Ve.KHR_DRACO_MESH_COMPRESSION:s[A]=new p0(n,this.dracoLoader);break;case Ve.KHR_TEXTURE_TRANSFORM:s[A]=new g0;break;case Ve.KHR_MESH_QUANTIZATION:s[A]=new f0;break;default:u.indexOf(A)>=0&&o[A]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+A+'".')}}c.setExtensions(s),c.setPlugins(o),c.parse(i,r)}parseAsync(e,t){const i=this;return new Promise(function(r,n){i.parse(e,t,r,n)})}}function X_(){let a={};return{get:function(e){return a[e]},add:function(e,t){a[e]=t},remove:function(e){delete a[e]},removeAll:function(){a={}}}}const Ve={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class Y_{constructor(e){this.parser=e,this.name=Ve.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let i=0,r=t.length;i<r;i++){const n=t[i];n.extensions&&n.extensions[this.name]&&n.extensions[this.name].light!==void 0&&e._addNodeRef(this.cache,n.extensions[this.name].light)}}_loadLight(e){const t=this.parser,i="light:"+e;let r=t.cache.get(i);if(r)return r;const n=t.json,s=((n.extensions&&n.extensions[this.name]||{}).lights||[])[e];let o;const l=new Ue(16777215);s.color!==void 0&&l.setRGB(s.color[0],s.color[1],s.color[2],wt);const c=s.range!==void 0?s.range:0;switch(s.type){case"directional":o=new eA(l),o.target.position.set(0,0,-1),o.add(o.target);break;case"point":o=new $h(l),o.distance=c;break;case"spot":o=new Zh(l),o.distance=c,s.spot=s.spot||{},s.spot.innerConeAngle=s.spot.innerConeAngle!==void 0?s.spot.innerConeAngle:0,s.spot.outerConeAngle=s.spot.outerConeAngle!==void 0?s.spot.outerConeAngle:Math.PI/4,o.angle=s.spot.outerConeAngle,o.penumbra=1-s.spot.innerConeAngle/s.spot.outerConeAngle,o.target.position.set(0,0,-1),o.add(o.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+s.type)}return o.position.set(0,0,0),Ri(o,s),s.intensity!==void 0&&(o.intensity=s.intensity),o.name=t.createUniqueName(s.name||"light_"+e),r=Promise.resolve(o),t.cache.add(i,r),r}getDependency(e,t){if(e==="light")return this._loadLight(t)}createNodeAttachment(e){const t=this,i=this.parser,r=i.json.nodes[e],n=(r.extensions&&r.extensions[this.name]||{}).light;return n===void 0?null:this._loadLight(n).then(function(s){return i._getNodeRef(t.cache,n,s)})}}class K_{constructor(){this.name=Ve.KHR_MATERIALS_UNLIT}getMaterialType(){return rr}extendParams(e,t,i){const r=[];e.color=new Ue(1,1,1),e.opacity=1;const n=t.pbrMetallicRoughness;if(n){if(Array.isArray(n.baseColorFactor)){const s=n.baseColorFactor;e.color.setRGB(s[0],s[1],s[2],wt),e.opacity=s[3]}n.baseColorTexture!==void 0&&r.push(i.assignTexture(e,"map",n.baseColorTexture,ut))}return Promise.all(r)}}class J_{constructor(e){this.parser=e,this.name=Ve.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const r=i.extensions[this.name].emissiveStrength;return r!==void 0&&(t.emissiveIntensity=r),Promise.resolve()}}class Z_{constructor(e){this.parser=e,this.name=Ve.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const t=this.parser.json.materials[e];return!t.extensions||!t.extensions[this.name]?null:Ei}extendMaterialParams(e,t){const i=this.parser,r=i.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const n=[],s=r.extensions[this.name];if(s.clearcoatFactor!==void 0&&(t.clearcoat=s.clearcoatFactor),s.clearcoatTexture!==void 0&&n.push(i.assignTexture(t,"clearcoatMap",s.clearcoatTexture)),s.clearcoatRoughnessFactor!==void 0&&(t.clearcoatRoughness=s.clearcoatRoughnessFactor),s.clearcoatRoughnessTexture!==void 0&&n.push(i.assignTexture(t,"clearcoatRoughnessMap",s.clearcoatRoughnessTexture)),s.clearcoatNormalTexture!==void 0&&(n.push(i.assignTexture(t,"clearcoatNormalMap",s.clearcoatNormalTexture)),s.clearcoatNormalTexture.scale!==void 0)){const o=s.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new We(o,o)}return Promise.all(n)}}class $_{constructor(e){this.parser=e,this.name=Ve.KHR_MATERIALS_DISPERSION}getMaterialType(e){const t=this.parser.json.materials[e];return!t.extensions||!t.extensions[this.name]?null:Ei}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const r=i.extensions[this.name];return t.dispersion=r.dispersion!==void 0?r.dispersion:0,Promise.resolve()}}class e0{constructor(e){this.parser=e,this.name=Ve.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const t=this.parser.json.materials[e];return!t.extensions||!t.extensions[this.name]?null:Ei}extendMaterialParams(e,t){const i=this.parser,r=i.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const n=[],s=r.extensions[this.name];return s.iridescenceFactor!==void 0&&(t.iridescence=s.iridescenceFactor),s.iridescenceTexture!==void 0&&n.push(i.assignTexture(t,"iridescenceMap",s.iridescenceTexture)),s.iridescenceIor!==void 0&&(t.iridescenceIOR=s.iridescenceIor),t.iridescenceThicknessRange===void 0&&(t.iridescenceThicknessRange=[100,400]),s.iridescenceThicknessMinimum!==void 0&&(t.iridescenceThicknessRange[0]=s.iridescenceThicknessMinimum),s.iridescenceThicknessMaximum!==void 0&&(t.iridescenceThicknessRange[1]=s.iridescenceThicknessMaximum),s.iridescenceThicknessTexture!==void 0&&n.push(i.assignTexture(t,"iridescenceThicknessMap",s.iridescenceThicknessTexture)),Promise.all(n)}}class t0{constructor(e){this.parser=e,this.name=Ve.KHR_MATERIALS_SHEEN}getMaterialType(e){const t=this.parser.json.materials[e];return!t.extensions||!t.extensions[this.name]?null:Ei}extendMaterialParams(e,t){const i=this.parser,r=i.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const n=[];t.sheenColor=new Ue(0,0,0),t.sheenRoughness=0,t.sheen=1;const s=r.extensions[this.name];if(s.sheenColorFactor!==void 0){const o=s.sheenColorFactor;t.sheenColor.setRGB(o[0],o[1],o[2],wt)}return s.sheenRoughnessFactor!==void 0&&(t.sheenRoughness=s.sheenRoughnessFactor),s.sheenColorTexture!==void 0&&n.push(i.assignTexture(t,"sheenColorMap",s.sheenColorTexture,ut)),s.sheenRoughnessTexture!==void 0&&n.push(i.assignTexture(t,"sheenRoughnessMap",s.sheenRoughnessTexture)),Promise.all(n)}}class i0{constructor(e){this.parser=e,this.name=Ve.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const t=this.parser.json.materials[e];return!t.extensions||!t.extensions[this.name]?null:Ei}extendMaterialParams(e,t){const i=this.parser,r=i.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const n=[],s=r.extensions[this.name];return s.transmissionFactor!==void 0&&(t.transmission=s.transmissionFactor),s.transmissionTexture!==void 0&&n.push(i.assignTexture(t,"transmissionMap",s.transmissionTexture)),Promise.all(n)}}class r0{constructor(e){this.parser=e,this.name=Ve.KHR_MATERIALS_VOLUME}getMaterialType(e){const t=this.parser.json.materials[e];return!t.extensions||!t.extensions[this.name]?null:Ei}extendMaterialParams(e,t){const i=this.parser,r=i.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const n=[],s=r.extensions[this.name];t.thickness=s.thicknessFactor!==void 0?s.thicknessFactor:0,s.thicknessTexture!==void 0&&n.push(i.assignTexture(t,"thicknessMap",s.thicknessTexture)),t.attenuationDistance=s.attenuationDistance||1/0;const o=s.attenuationColor||[1,1,1];return t.attenuationColor=new Ue().setRGB(o[0],o[1],o[2],wt),Promise.all(n)}}class a0{constructor(e){this.parser=e,this.name=Ve.KHR_MATERIALS_IOR}getMaterialType(e){const t=this.parser.json.materials[e];return!t.extensions||!t.extensions[this.name]?null:Ei}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const r=i.extensions[this.name];return t.ior=r.ior!==void 0?r.ior:1.5,Promise.resolve()}}class n0{constructor(e){this.parser=e,this.name=Ve.KHR_MATERIALS_SPECULAR}getMaterialType(e){const t=this.parser.json.materials[e];return!t.extensions||!t.extensions[this.name]?null:Ei}extendMaterialParams(e,t){const i=this.parser,r=i.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const n=[],s=r.extensions[this.name];t.specularIntensity=s.specularFactor!==void 0?s.specularFactor:1,s.specularTexture!==void 0&&n.push(i.assignTexture(t,"specularIntensityMap",s.specularTexture));const o=s.specularColorFactor||[1,1,1];return t.specularColor=new Ue().setRGB(o[0],o[1],o[2],wt),s.specularColorTexture!==void 0&&n.push(i.assignTexture(t,"specularColorMap",s.specularColorTexture,ut)),Promise.all(n)}}class s0{constructor(e){this.parser=e,this.name=Ve.EXT_MATERIALS_BUMP}getMaterialType(e){const t=this.parser.json.materials[e];return!t.extensions||!t.extensions[this.name]?null:Ei}extendMaterialParams(e,t){const i=this.parser,r=i.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const n=[],s=r.extensions[this.name];return t.bumpScale=s.bumpFactor!==void 0?s.bumpFactor:1,s.bumpTexture!==void 0&&n.push(i.assignTexture(t,"bumpMap",s.bumpTexture)),Promise.all(n)}}class o0{constructor(e){this.parser=e,this.name=Ve.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const t=this.parser.json.materials[e];return!t.extensions||!t.extensions[this.name]?null:Ei}extendMaterialParams(e,t){const i=this.parser,r=i.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const n=[],s=r.extensions[this.name];return s.anisotropyStrength!==void 0&&(t.anisotropy=s.anisotropyStrength),s.anisotropyRotation!==void 0&&(t.anisotropyRotation=s.anisotropyRotation),s.anisotropyTexture!==void 0&&n.push(i.assignTexture(t,"anisotropyMap",s.anisotropyTexture)),Promise.all(n)}}class l0{constructor(e){this.parser=e,this.name=Ve.KHR_TEXTURE_BASISU}loadTexture(e){const t=this.parser,i=t.json,r=i.textures[e];if(!r.extensions||!r.extensions[this.name])return null;const n=r.extensions[this.name],s=t.options.ktx2Loader;if(!s){if(i.extensionsRequired&&i.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,n.source,s)}}class c0{constructor(e){this.parser=e,this.name=Ve.EXT_TEXTURE_WEBP}loadTexture(e){const t=this.name,i=this.parser,r=i.json,n=r.textures[e];if(!n.extensions||!n.extensions[t])return null;const s=n.extensions[t],o=r.images[s.source];let l=i.textureLoader;if(o.uri){const c=i.options.manager.getHandler(o.uri);c!==null&&(l=c)}return i.loadTextureImage(e,s.source,l)}}class h0{constructor(e){this.parser=e,this.name=Ve.EXT_TEXTURE_AVIF}loadTexture(e){const t=this.name,i=this.parser,r=i.json,n=r.textures[e];if(!n.extensions||!n.extensions[t])return null;const s=n.extensions[t],o=r.images[s.source];let l=i.textureLoader;if(o.uri){const c=i.options.manager.getHandler(o.uri);c!==null&&(l=c)}return i.loadTextureImage(e,s.source,l)}}class A0{constructor(e){this.name=Ve.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,i=t.bufferViews[e];if(i.extensions&&i.extensions[this.name]){const r=i.extensions[this.name],n=this.parser.getDependency("buffer",r.buffer),s=this.parser.options.meshoptDecoder;if(!s||!s.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return n.then(function(o){const l=r.byteOffset||0,c=r.byteLength||0,h=r.count,A=r.byteStride,u=new Uint8Array(o,l,c);return s.decodeGltfBufferAsync?s.decodeGltfBufferAsync(h,A,u,r.mode,r.filter).then(function(d){return d.buffer}):s.ready.then(function(){const d=new ArrayBuffer(h*A);return s.decodeGltfBuffer(new Uint8Array(d),h,A,u,r.mode,r.filter),d})})}else return null}}class u0{constructor(e){this.name=Ve.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,i=t.nodes[e];if(!i.extensions||!i.extensions[this.name]||i.mesh===void 0)return null;const r=t.meshes[i.mesh];for(const l of r.primitives)if(l.mode!==ii.TRIANGLES&&l.mode!==ii.TRIANGLE_STRIP&&l.mode!==ii.TRIANGLE_FAN&&l.mode!==void 0)return null;const n=i.extensions[this.name].attributes,s=[],o={};for(const l in n)s.push(this.parser.getDependency("accessor",n[l]).then(c=>(o[l]=c,o[l])));return s.length<1?null:(s.push(this.parser.createNodeMesh(e)),Promise.all(s).then(l=>{const c=l.pop(),h=c.isGroup?c.children:[c],A=l[0].count,u=[];for(const d of h){const f=new Qe,m=new N,g=new Qi,p=new N(1,1,1),b=new Ch(d.geometry,d.material,A);for(let x=0;x<A;x++)o.TRANSLATION&&m.fromBufferAttribute(o.TRANSLATION,x),o.ROTATION&&g.fromBufferAttribute(o.ROTATION,x),o.SCALE&&p.fromBufferAttribute(o.SCALE,x),b.setMatrixAt(x,f.compose(m,g,p));for(const x in o)if(x==="_COLOR_0"){const I=o[x];b.instanceColor=new Ms(I.array,I.itemSize,I.normalized)}else x!=="TRANSLATION"&&x!=="ROTATION"&&x!=="SCALE"&&d.geometry.setAttribute(x,o[x]);dt.prototype.copy.call(b,d),this.parser.assignFinalMaterial(b),u.push(b)}return c.isGroup?(c.clear(),c.add(...u),c):u[0]}))}}const UA="glTF",pn=12,NA={JSON:1313821514,BIN:5130562};class d0{constructor(e){this.name=Ve.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,pn),i=new TextDecoder;if(this.header={magic:i.decode(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==UA)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const r=this.header.length-pn,n=new DataView(e,pn);let s=0;for(;s<r;){const o=n.getUint32(s,!0);s+=4;const l=n.getUint32(s,!0);if(s+=4,l===NA.JSON){const c=new Uint8Array(e,pn+s,o);this.content=i.decode(c)}else if(l===NA.BIN){const c=pn+s;this.body=e.slice(c,c+o)}s+=o}if(this.content===null)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class p0{constructor(e,t){if(!t)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=Ve.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){const i=this.json,r=this.dracoLoader,n=e.extensions[this.name].bufferView,s=e.extensions[this.name].attributes,o={},l={},c={};for(const h in s){const A=Sl[h]||h.toLowerCase();o[A]=s[h]}for(const h in e.attributes){const A=Sl[h]||h.toLowerCase();if(s[h]!==void 0){const u=i.accessors[e.attributes[h]],d=Ia[u.componentType];c[A]=d.name,l[A]=u.normalized===!0}}return t.getDependency("bufferView",n).then(function(h){return new Promise(function(A,u){r.decodeDracoFile(h,function(d){for(const f in d.attributes){const m=d.attributes[f],g=l[f];g!==void 0&&(m.normalized=g)}A(d)},o,c,wt,u)})})}}class g0{constructor(){this.name=Ve.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return(t.texCoord===void 0||t.texCoord===e.channel)&&t.offset===void 0&&t.rotation===void 0&&t.scale===void 0||(e=e.clone(),t.texCoord!==void 0&&(e.channel=t.texCoord),t.offset!==void 0&&e.offset.fromArray(t.offset),t.rotation!==void 0&&(e.rotation=t.rotation),t.scale!==void 0&&e.repeat.fromArray(t.scale),e.needsUpdate=!0),e}}class f0{constructor(){this.name=Ve.KHR_MESH_QUANTIZATION}}class QA extends _a{constructor(e,t,i,r){super(e,t,i,r)}copySampleValue_(e){const t=this.resultBuffer,i=this.sampleValues,r=this.valueSize,n=e*r*3+r;for(let s=0;s!==r;s++)t[s]=i[n+s];return t}interpolate_(e,t,i,r){const n=this.resultBuffer,s=this.sampleValues,o=this.valueSize,l=o*2,c=o*3,h=r-t,A=(i-t)/h,u=A*A,d=u*A,f=e*c,m=f-c,g=-2*d+3*u,p=d-u,b=1-g,x=p-u+A;for(let I=0;I!==o;I++){const y=s[m+I+o],S=s[m+I+l]*h,M=s[f+I+o],R=s[f+I]*h;n[I]=b*y+x*S+g*M+p*R}return n}}const m0=new Qi;class _0 extends QA{interpolate_(e,t,i,r){const n=super.interpolate_(e,t,i,r);return m0.fromArray(n).normalize().toArray(n),n}}const ii={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6},Ia={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},PA={9728:gt,9729:ct,9984:Nn,9985:La,9986:zr,9987:Jt},FA={33071:Kt,33648:Da,10497:_r},yl={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},Sl={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},cr={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},E0={CUBICSPLINE:void 0,LINEAR:Zr,STEP:Jr},Ml={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};function b0(a){return a.DefaultMaterial===void 0&&(a.DefaultMaterial=new cn({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:yi})),a.DefaultMaterial}function Fr(a,e,t){for(const i in t.extensions)a[i]===void 0&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[i]=t.extensions[i])}function Ri(a,e){e.extras!==void 0&&(typeof e.extras=="object"?Object.assign(a.userData,e.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+e.extras))}function v0(a,e,t){let i=!1,r=!1,n=!1;for(let c=0,h=e.length;c<h;c++){const A=e[c];if(A.POSITION!==void 0&&(i=!0),A.NORMAL!==void 0&&(r=!0),A.COLOR_0!==void 0&&(n=!0),i&&r&&n)break}if(!i&&!r&&!n)return Promise.resolve(a);const s=[],o=[],l=[];for(let c=0,h=e.length;c<h;c++){const A=e[c];if(i){const u=A.POSITION!==void 0?t.getDependency("accessor",A.POSITION):a.attributes.position;s.push(u)}if(r){const u=A.NORMAL!==void 0?t.getDependency("accessor",A.NORMAL):a.attributes.normal;o.push(u)}if(n){const u=A.COLOR_0!==void 0?t.getDependency("accessor",A.COLOR_0):a.attributes.color;l.push(u)}}return Promise.all([Promise.all(s),Promise.all(o),Promise.all(l)]).then(function(c){const h=c[0],A=c[1],u=c[2];return i&&(a.morphAttributes.position=h),r&&(a.morphAttributes.normal=A),n&&(a.morphAttributes.color=u),a.morphTargetsRelative=!0,a})}function x0(a,e){if(a.updateMorphTargets(),e.weights!==void 0)for(let t=0,i=e.weights.length;t<i;t++)a.morphTargetInfluences[t]=e.weights[t];if(e.extras&&Array.isArray(e.extras.targetNames)){const t=e.extras.targetNames;if(a.morphTargetInfluences.length===t.length){a.morphTargetDictionary={};for(let i=0,r=t.length;i<r;i++)a.morphTargetDictionary[t[i]]=i}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function I0(a){let e;const t=a.extensions&&a.extensions[Ve.KHR_DRACO_MESH_COMPRESSION];if(t?e="draco:"+t.bufferView+":"+t.indices+":"+wl(t.attributes):e=a.indices+":"+wl(a.attributes)+":"+a.mode,a.targets!==void 0)for(let i=0,r=a.targets.length;i<r;i++)e+=":"+wl(a.targets[i]);return e}function wl(a){let e="";const t=Object.keys(a).sort();for(let i=0,r=t.length;i<r;i++)e+=t[i]+":"+a[t[i]]+";";return e}function Tl(a){switch(a){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}function C0(a){return a.search(/\.jpe?g($|\?)/i)>0||a.search(/^data\:image\/jpeg/)===0?"image/jpeg":a.search(/\.webp($|\?)/i)>0||a.search(/^data\:image\/webp/)===0?"image/webp":a.search(/\.ktx2($|\?)/i)>0||a.search(/^data\:image\/ktx2/)===0?"image/ktx2":"image/png"}const y0=new Qe;class S0{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new X_,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let i=!1,r=-1,n=!1,s=-1;if(typeof navigator<"u"){const o=navigator.userAgent;i=/^((?!chrome|android).)*safari/i.test(o)===!0;const l=o.match(/Version\/(\d+)/);r=i&&l?parseInt(l[1],10):-1,n=o.indexOf("Firefox")>-1,s=n?o.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>"u"||i&&r<17||n&&s<98?this.textureLoader=new cl(this.options.manager):this.textureLoader=new tA(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new or(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const i=this,r=this.json,n=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(s){return s._markDefs&&s._markDefs()}),Promise.all(this._invokeAll(function(s){return s.beforeRoot&&s.beforeRoot()})).then(function(){return Promise.all([i.getDependencies("scene"),i.getDependencies("animation"),i.getDependencies("camera")])}).then(function(s){const o={scene:s[0][r.scene||0],scenes:s[0],animations:s[1],cameras:s[2],asset:r.asset,parser:i,userData:{}};return Fr(n,o,r),Ri(o,r),Promise.all(i._invokeAll(function(l){return l.afterRoot&&l.afterRoot(o)})).then(function(){for(const l of o.scenes)l.updateMatrixWorld();e(o)})}).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],i=this.json.meshes||[];for(let r=0,n=t.length;r<n;r++){const s=t[r].joints;for(let o=0,l=s.length;o<l;o++)e[s[o]].isBone=!0}for(let r=0,n=e.length;r<n;r++){const s=e[r];s.mesh!==void 0&&(this._addNodeRef(this.meshCache,s.mesh),s.skin!==void 0&&(i[s.mesh].isSkinnedMesh=!0)),s.camera!==void 0&&this._addNodeRef(this.cameraCache,s.camera)}}_addNodeRef(e,t){t!==void 0&&(e.refs[t]===void 0&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,i){if(e.refs[t]<=1)return i;const r=i.clone(),n=(s,o)=>{const l=this.associations.get(s);l!=null&&this.associations.set(o,l);for(const[c,h]of s.children.entries())n(h,o.children[c])};return n(i,r),r.name+="_instance_"+e.uses[t]++,r}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let i=0;i<t.length;i++){const r=e(t[i]);if(r)return r}return null}_invokeAll(e){const t=Object.values(this.plugins);t.unshift(this);const i=[];for(let r=0;r<t.length;r++){const n=e(t[r]);n&&i.push(n)}return i}getDependency(e,t){const i=e+":"+t;let r=this.cache.get(i);if(!r){switch(e){case"scene":r=this.loadScene(t);break;case"node":r=this._invokeOne(function(n){return n.loadNode&&n.loadNode(t)});break;case"mesh":r=this._invokeOne(function(n){return n.loadMesh&&n.loadMesh(t)});break;case"accessor":r=this.loadAccessor(t);break;case"bufferView":r=this._invokeOne(function(n){return n.loadBufferView&&n.loadBufferView(t)});break;case"buffer":r=this.loadBuffer(t);break;case"material":r=this._invokeOne(function(n){return n.loadMaterial&&n.loadMaterial(t)});break;case"texture":r=this._invokeOne(function(n){return n.loadTexture&&n.loadTexture(t)});break;case"skin":r=this.loadSkin(t);break;case"animation":r=this._invokeOne(function(n){return n.loadAnimation&&n.loadAnimation(t)});break;case"camera":r=this.loadCamera(t);break;default:if(r=this._invokeOne(function(n){return n!=this&&n.getDependency&&n.getDependency(e,t)}),!r)throw new Error("Unknown type: "+e);break}this.cache.add(i,r)}return r}getDependencies(e){let t=this.cache.get(e);if(!t){const i=this,r=this.json[e+(e==="mesh"?"es":"s")]||[];t=Promise.all(r.map(function(n,s){return i.getDependency(e,s)})),this.cache.add(e,t)}return t}loadBuffer(e){const t=this.json.buffers[e],i=this.fileLoader;if(t.type&&t.type!=="arraybuffer")throw new Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(t.uri===void 0&&e===0)return Promise.resolve(this.extensions[Ve.KHR_BINARY_GLTF].body);const r=this.options;return new Promise(function(n,s){i.load(ba.resolveURL(t.uri,r.path),n,void 0,function(){s(new Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))})})}loadBufferView(e){const t=this.json.bufferViews[e];return this.getDependency("buffer",t.buffer).then(function(i){const r=t.byteLength||0,n=t.byteOffset||0;return i.slice(n,n+r)})}loadAccessor(e){const t=this,i=this.json,r=this.json.accessors[e];if(r.bufferView===void 0&&r.sparse===void 0){const s=yl[r.type],o=Ia[r.componentType],l=r.normalized===!0,c=new o(r.count*s);return Promise.resolve(new Ct(c,s,l))}const n=[];return r.bufferView!==void 0?n.push(this.getDependency("bufferView",r.bufferView)):n.push(null),r.sparse!==void 0&&(n.push(this.getDependency("bufferView",r.sparse.indices.bufferView)),n.push(this.getDependency("bufferView",r.sparse.values.bufferView))),Promise.all(n).then(function(s){const o=s[0],l=yl[r.type],c=Ia[r.componentType],h=c.BYTES_PER_ELEMENT,A=h*l,u=r.byteOffset||0,d=r.bufferView!==void 0?i.bufferViews[r.bufferView].byteStride:void 0,f=r.normalized===!0;let m,g;if(d&&d!==A){const p=Math.floor(u/d),b="InterleavedBuffer:"+r.bufferView+":"+r.componentType+":"+p+":"+r.count;let x=t.cache.get(b);x||(m=new c(o,p*d,r.count*d/h),x=new ys(m,d/h),t.cache.add(b,x)),g=new wa(x,l,u%d/h,f)}else o===null?m=new c(r.count*l):m=new c(o,u,r.count*l),g=new Ct(m,l,f);if(r.sparse!==void 0){const p=yl.SCALAR,b=Ia[r.sparse.indices.componentType],x=r.sparse.indices.byteOffset||0,I=r.sparse.values.byteOffset||0,y=new b(s[1],x,r.sparse.count*p),S=new c(s[2],I,r.sparse.count*l);o!==null&&(g=new Ct(g.array.slice(),g.itemSize,g.normalized)),g.normalized=!1;for(let M=0,R=y.length;M<R;M++){const E=y[M];if(g.setX(E,S[M*l]),l>=2&&g.setY(E,S[M*l+1]),l>=3&&g.setZ(E,S[M*l+2]),l>=4&&g.setW(E,S[M*l+3]),l>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}g.normalized=f}return g})}loadTexture(e){const t=this.json,i=this.options,r=t.textures[e].source,n=t.images[r];let s=this.textureLoader;if(n.uri){const o=i.manager.getHandler(n.uri);o!==null&&(s=o)}return this.loadTextureImage(e,r,s)}loadTextureImage(e,t,i){const r=this,n=this.json,s=n.textures[e],o=n.images[t],l=(o.uri||o.bufferView)+":"+s.sampler;if(this.textureCache[l])return this.textureCache[l];const c=this.loadImageSource(t,i).then(function(h){h.flipY=!1,h.name=s.name||o.name||"",h.name===""&&typeof o.uri=="string"&&o.uri.startsWith("data:image/")===!1&&(h.name=o.uri);const A=(n.samplers||{})[s.sampler]||{};return h.magFilter=PA[A.magFilter]||ct,h.minFilter=PA[A.minFilter]||Jt,h.wrapS=FA[A.wrapS]||_r,h.wrapT=FA[A.wrapT]||_r,h.generateMipmaps=!h.isCompressedTexture&&h.minFilter!==gt&&h.minFilter!==ct,r.associations.set(h,{textures:e}),h}).catch(function(){return null});return this.textureCache[l]=c,c}loadImageSource(e,t){const i=this,r=this.json,n=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(A=>A.clone());const s=r.images[e],o=self.URL||self.webkitURL;let l=s.uri||"",c=!1;if(s.bufferView!==void 0)l=i.getDependency("bufferView",s.bufferView).then(function(A){c=!0;const u=new Blob([A],{type:s.mimeType});return l=o.createObjectURL(u),l});else if(s.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const h=Promise.resolve(l).then(function(A){return new Promise(function(u,d){let f=u;t.isImageBitmapLoader===!0&&(f=function(m){const g=new Ke(m);g.needsUpdate=!0,u(g)}),t.load(ba.resolveURL(A,n.path),f,void 0,d)})}).then(function(A){return c===!0&&o.revokeObjectURL(l),Ri(A,s),A.userData.mimeType=s.mimeType||C0(s.uri),A}).catch(function(A){throw console.error("THREE.GLTFLoader: Couldn't load texture",l),A});return this.sourceCache[e]=h,h}assignTexture(e,t,i,r){const n=this;return this.getDependency("texture",i.index).then(function(s){if(!s)return null;if(i.texCoord!==void 0&&i.texCoord>0&&(s=s.clone(),s.channel=i.texCoord),n.extensions[Ve.KHR_TEXTURE_TRANSFORM]){const o=i.extensions!==void 0?i.extensions[Ve.KHR_TEXTURE_TRANSFORM]:void 0;if(o){const l=n.associations.get(s);s=n.extensions[Ve.KHR_TEXTURE_TRANSFORM].extendTexture(s,o),n.associations.set(s,l)}}return r!==void 0&&(s.colorSpace=r),e[t]=s,s})}assignFinalMaterial(e){const t=e.geometry;let i=e.material;const r=t.attributes.tangent===void 0,n=t.attributes.color!==void 0,s=t.attributes.normal===void 0;if(e.isPoints){const o="PointsMaterial:"+i.uuid;let l=this.cache.get(o);l||(l=new nl,mi.prototype.copy.call(l,i),l.color.copy(i.color),l.map=i.map,l.sizeAttenuation=!1,this.cache.add(o,l)),i=l}else if(e.isLine){const o="LineBasicMaterial:"+i.uuid;let l=this.cache.get(o);l||(l=new rl,mi.prototype.copy.call(l,i),l.color.copy(i.color),l.map=i.map,this.cache.add(o,l)),i=l}if(r||n||s){let o="ClonedMaterial:"+i.uuid+":";r&&(o+="derivative-tangents:"),n&&(o+="vertex-colors:"),s&&(o+="flat-shading:");let l=this.cache.get(o);l||(l=i.clone(),n&&(l.vertexColors=!0),s&&(l.flatShading=!0),r&&(l.normalScale&&(l.normalScale.y*=-1),l.clearcoatNormalScale&&(l.clearcoatNormalScale.y*=-1)),this.cache.add(o,l),this.associations.set(l,this.associations.get(i))),i=l}e.material=i}getMaterialType(){return cn}loadMaterial(e){const t=this,i=this.json,r=this.extensions,n=i.materials[e];let s;const o={},l=n.extensions||{},c=[];if(l[Ve.KHR_MATERIALS_UNLIT]){const A=r[Ve.KHR_MATERIALS_UNLIT];s=A.getMaterialType(),c.push(A.extendParams(o,n,t))}else{const A=n.pbrMetallicRoughness||{};if(o.color=new Ue(1,1,1),o.opacity=1,Array.isArray(A.baseColorFactor)){const u=A.baseColorFactor;o.color.setRGB(u[0],u[1],u[2],wt),o.opacity=u[3]}A.baseColorTexture!==void 0&&c.push(t.assignTexture(o,"map",A.baseColorTexture,ut)),o.metalness=A.metallicFactor!==void 0?A.metallicFactor:1,o.roughness=A.roughnessFactor!==void 0?A.roughnessFactor:1,A.metallicRoughnessTexture!==void 0&&(c.push(t.assignTexture(o,"metalnessMap",A.metallicRoughnessTexture)),c.push(t.assignTexture(o,"roughnessMap",A.metallicRoughnessTexture))),s=this._invokeOne(function(u){return u.getMaterialType&&u.getMaterialType(e)}),c.push(Promise.all(this._invokeAll(function(u){return u.extendMaterialParams&&u.extendMaterialParams(e,o)})))}n.doubleSided===!0&&(o.side=oi);const h=n.alphaMode||Ml.OPAQUE;if(h===Ml.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,h===Ml.MASK&&(o.alphaTest=n.alphaCutoff!==void 0?n.alphaCutoff:.5)),n.normalTexture!==void 0&&s!==rr&&(c.push(t.assignTexture(o,"normalMap",n.normalTexture)),o.normalScale=new We(1,1),n.normalTexture.scale!==void 0)){const A=n.normalTexture.scale;o.normalScale.set(A,A)}if(n.occlusionTexture!==void 0&&s!==rr&&(c.push(t.assignTexture(o,"aoMap",n.occlusionTexture)),n.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=n.occlusionTexture.strength)),n.emissiveFactor!==void 0&&s!==rr){const A=n.emissiveFactor;o.emissive=new Ue().setRGB(A[0],A[1],A[2],wt)}return n.emissiveTexture!==void 0&&s!==rr&&c.push(t.assignTexture(o,"emissiveMap",n.emissiveTexture,ut)),Promise.all(c).then(function(){const A=new s(o);return n.name&&(A.name=n.name),Ri(A,n),t.associations.set(A,{materials:e}),n.extensions&&Fr(r,A,n),A})}createUniqueName(e){const t=Je.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,i=this.extensions,r=this.primitiveCache;function n(o){return i[Ve.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(o,t).then(function(l){return OA(l,o,t)})}const s=[];for(let o=0,l=e.length;o<l;o++){const c=e[o],h=I0(c),A=r[h];if(A)s.push(A.promise);else{let u;c.extensions&&c.extensions[Ve.KHR_DRACO_MESH_COMPRESSION]?u=n(c):u=OA(new mt,c,t),r[h]={primitive:c,promise:u},s.push(u)}}return Promise.all(s)}loadMesh(e){const t=this,i=this.json,r=this.extensions,n=i.meshes[e],s=n.primitives,o=[];for(let l=0,c=s.length;l<c;l++){const h=s[l].material===void 0?b0(this.cache):this.getDependency("material",s[l].material);o.push(h)}return o.push(t.loadGeometries(s)),Promise.all(o).then(function(l){const c=l.slice(0,l.length-1),h=l[l.length-1],A=[];for(let d=0,f=h.length;d<f;d++){const m=h[d],g=s[d];let p;const b=c[d];if(g.mode===ii.TRIANGLES||g.mode===ii.TRIANGLE_STRIP||g.mode===ii.TRIANGLE_FAN||g.mode===void 0)p=n.isSkinnedMesh===!0?new bh(m,b):new ft(m,b),p.isSkinnedMesh===!0&&p.normalizeSkinWeights(),g.mode===ii.TRIANGLE_STRIP?p.geometry=LA(p.geometry,bo):g.mode===ii.TRIANGLE_FAN&&(p.geometry=LA(p.geometry,rs));else if(g.mode===ii.LINES)p=new Th(m,b);else if(g.mode===ii.LINE_STRIP)p=new Us(m,b);else if(g.mode===ii.LINE_LOOP)p=new Bh(m,b);else if(g.mode===ii.POINTS)p=new Dh(m,b);else throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+g.mode);Object.keys(p.geometry.morphAttributes).length>0&&x0(p,n),p.name=t.createUniqueName(n.name||"mesh_"+e),Ri(p,n),g.extensions&&Fr(r,p,g),t.assignFinalMaterial(p),A.push(p)}for(let d=0,f=A.length;d<f;d++)t.associations.set(A[d],{meshes:e,primitives:d});if(A.length===1)return n.extensions&&Fr(r,A[0],n),A[0];const u=new nr;n.extensions&&Fr(r,u,n),t.associations.set(u,{meshes:e});for(let d=0,f=A.length;d<f;d++)u.add(A[d]);return u})}loadCamera(e){let t;const i=this.json.cameras[e],r=i[i.type];if(!r){console.warn("THREE.GLTFLoader: Missing camera parameters.");return}return i.type==="perspective"?t=new Ft(qc.radToDeg(r.yfov),r.aspectRatio||1,r.znear||1,r.zfar||2e6):i.type==="orthographic"&&(t=new hn(-r.xmag,r.xmag,r.ymag,-r.ymag,r.znear,r.zfar)),i.name&&(t.name=this.createUniqueName(i.name)),Ri(t,i),Promise.resolve(t)}loadSkin(e){const t=this.json.skins[e],i=[];for(let r=0,n=t.joints.length;r<n;r++)i.push(this._loadNodeShallow(t.joints[r]));return t.inverseBindMatrices!==void 0?i.push(this.getDependency("accessor",t.inverseBindMatrices)):i.push(null),Promise.all(i).then(function(r){const n=r.pop(),s=r,o=[],l=[];for(let c=0,h=s.length;c<h;c++){const A=s[c];if(A){o.push(A);const u=new Qe;n!==null&&u.fromArray(n.array,c*16),l.push(u)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[c])}return new Ys(o,l)})}loadAnimation(e){const t=this.json,i=this,r=t.animations[e],n=r.name?r.name:"animation_"+e,s=[],o=[],l=[],c=[],h=[];for(let A=0,u=r.channels.length;A<u;A++){const d=r.channels[A],f=r.samplers[d.sampler],m=d.target,g=m.node,p=r.parameters!==void 0?r.parameters[f.input]:f.input,b=r.parameters!==void 0?r.parameters[f.output]:f.output;m.node!==void 0&&(s.push(this.getDependency("node",g)),o.push(this.getDependency("accessor",p)),l.push(this.getDependency("accessor",b)),c.push(f),h.push(m))}return Promise.all([Promise.all(s),Promise.all(o),Promise.all(l),Promise.all(c),Promise.all(h)]).then(function(A){const u=A[0],d=A[1],f=A[2],m=A[3],g=A[4],p=[];for(let x=0,I=u.length;x<I;x++){const y=u[x],S=d[x],M=f[x],R=m[x],E=g[x];if(y===void 0)continue;y.updateMatrix&&y.updateMatrix();const C=i._createAnimationTracks(y,S,M,R,E);if(C)for(let B=0;B<C.length;B++)p.push(C[B])}const b=new qh(n,void 0,p);return Ri(b,r),b})}createNodeMesh(e){const t=this.json,i=this,r=t.nodes[e];return r.mesh===void 0?null:i.getDependency("mesh",r.mesh).then(function(n){const s=i._getNodeRef(i.meshCache,r.mesh,n);return r.weights!==void 0&&s.traverse(function(o){if(o.isMesh)for(let l=0,c=r.weights.length;l<c;l++)o.morphTargetInfluences[l]=r.weights[l]}),s})}loadNode(e){const t=this.json,i=this,r=t.nodes[e],n=i._loadNodeShallow(e),s=[],o=r.children||[];for(let c=0,h=o.length;c<h;c++)s.push(i.getDependency("node",o[c]));const l=r.skin===void 0?Promise.resolve(null):i.getDependency("skin",r.skin);return Promise.all([n,Promise.all(s),l]).then(function(c){const h=c[0],A=c[1],u=c[2];u!==null&&h.traverse(function(d){d.isSkinnedMesh&&d.bind(u,y0)});for(let d=0,f=A.length;d<f;d++)h.add(A[d]);return h})}_loadNodeShallow(e){const t=this.json,i=this.extensions,r=this;if(this.nodeCache[e]!==void 0)return this.nodeCache[e];const n=t.nodes[e],s=n.name?r.createUniqueName(n.name):"",o=[],l=r._invokeOne(function(c){return c.createNodeMesh&&c.createNodeMesh(e)});return l&&o.push(l),n.camera!==void 0&&o.push(r.getDependency("camera",n.camera).then(function(c){return r._getNodeRef(r.cameraCache,n.camera,c)})),r._invokeAll(function(c){return c.createNodeAttachment&&c.createNodeAttachment(e)}).forEach(function(c){o.push(c)}),this.nodeCache[e]=Promise.all(o).then(function(c){let h;if(n.isBone===!0?h=new tl:c.length>1?h=new nr:c.length===1?h=c[0]:h=new dt,h!==c[0])for(let A=0,u=c.length;A<u;A++)h.add(c[A]);if(n.name&&(h.userData.name=n.name,h.name=s),Ri(h,n),n.extensions&&Fr(i,h,n),n.matrix!==void 0){const A=new Qe;A.fromArray(n.matrix),h.applyMatrix4(A)}else n.translation!==void 0&&h.position.fromArray(n.translation),n.rotation!==void 0&&h.quaternion.fromArray(n.rotation),n.scale!==void 0&&h.scale.fromArray(n.scale);if(!r.associations.has(h))r.associations.set(h,{});else if(n.mesh!==void 0&&r.meshCache.refs[n.mesh]>1){const A=r.associations.get(h);r.associations.set(h,{...A})}return r.associations.get(h).nodes=e,h}),this.nodeCache[e]}loadScene(e){const t=this.extensions,i=this.json.scenes[e],r=this,n=new nr;i.name&&(n.name=r.createUniqueName(i.name)),Ri(n,i),i.extensions&&Fr(t,n,i);const s=i.nodes||[],o=[];for(let l=0,c=s.length;l<c;l++)o.push(r.getDependency("node",s[l]));return Promise.all(o).then(function(l){for(let h=0,A=l.length;h<A;h++)n.add(l[h]);const c=h=>{const A=new Map;for(const[u,d]of r.associations)(u instanceof mi||u instanceof Ke)&&A.set(u,d);return h.traverse(u=>{const d=r.associations.get(u);d!=null&&A.set(u,d)}),A};return r.associations=c(n),n})}_createAnimationTracks(e,t,i,r,n){const s=[],o=e.name?e.name:e.uuid,l=[];cr[n.path]===cr.weights?e.traverse(function(u){u.morphTargetInfluences&&l.push(u.name?u.name:u.uuid)}):l.push(o);let c;switch(cr[n.path]){case cr.weights:c=Rr;break;case cr.rotation:c=Dr;break;case cr.translation:case cr.scale:c=Ur;break;default:i.itemSize===1?c=Rr:c=Ur;break}const h=r.interpolation!==void 0?E0[r.interpolation]:Zr,A=this._getArrayFromAccessor(i);for(let u=0,d=l.length;u<d;u++){const f=new c(l[u]+"."+cr[n.path],t.array,A,h);r.interpolation==="CUBICSPLINE"&&this._createCubicSplineTrackInterpolant(f),s.push(f)}return s}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){const i=Tl(t.constructor),r=new Float32Array(t.length);for(let n=0,s=t.length;n<s;n++)r[n]=t[n]*i;t=r}return t}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(t){const i=this instanceof Dr?_0:QA;return new i(this.times,this.values,this.getValueSize()/3,t)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function M0(a,e,t){const i=e.attributes,r=new Vt;if(i.POSITION!==void 0){const o=t.json.accessors[i.POSITION],l=o.min,c=o.max;if(l!==void 0&&c!==void 0){if(r.set(new N(l[0],l[1],l[2]),new N(c[0],c[1],c[2])),o.normalized){const h=Tl(Ia[o.componentType]);r.min.multiplyScalar(h),r.max.multiplyScalar(h)}}else{console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");return}}else return;const n=e.targets;if(n!==void 0){const o=new N,l=new N;for(let c=0,h=n.length;c<h;c++){const A=n[c];if(A.POSITION!==void 0){const u=t.json.accessors[A.POSITION],d=u.min,f=u.max;if(d!==void 0&&f!==void 0){if(l.setX(Math.max(Math.abs(d[0]),Math.abs(f[0]))),l.setY(Math.max(Math.abs(d[1]),Math.abs(f[1]))),l.setZ(Math.max(Math.abs(d[2]),Math.abs(f[2]))),u.normalized){const m=Tl(Ia[u.componentType]);l.multiplyScalar(m)}o.max(l)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}r.expandByVector(o)}a.boundingBox=r;const s=new Wt;r.getCenter(s.center),s.radius=r.min.distanceTo(r.max)/2,a.boundingSphere=s}function OA(a,e,t){const i=e.attributes,r=[];function n(s,o){return t.getDependency("accessor",s).then(function(l){a.setAttribute(o,l)})}for(const s in i){const o=Sl[s]||s.toLowerCase();o in a.attributes||r.push(n(i[s],o))}if(e.indices!==void 0&&!a.index){const s=t.getDependency("accessor",e.indices).then(function(o){a.setIndex(o)});r.push(s)}return Ge.workingColorSpace!==wt&&"COLOR_0"in i&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${Ge.workingColorSpace}" not supported.`),Ri(a,e),M0(a,e,t),Promise.all(r).then(function(){return e.targets!==void 0?v0(a,e.targets,t):a})}var w0=function(){var a="b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q:Odkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq;w8Wqdbk;esezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9Uc;WFbGgocjdaocjd6EhDaicefhocbhqdnindndndnaeaq9nmbaDaeaq9RaqaDfae6Egkcsfglcl4cifcd4hxalc9WGgmTmecbhPawcjdfhsaohzinaraz9Rax6mvarazaxfgo9RcK6mvczhlcbhHinalgic9WfgOawcj;cbffhldndndndndnazaOco4fRbbaHcoG4ciGPlbedibkal9cb83ibalcwf9cb83ibxikalaoRblaoRbbgOco4gAaAciSgAE86bbawcj;cbfaifglcGfaoclfaAfgARbbaOcl4ciGgCaCciSgCE86bbalcVfaAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc7faAaCfgARbbaOciGgOaOciSgOE86bbalctfaAaOfgARbbaoRbegOco4gCaCciSgCE86bbalc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc93faAaCfgARbbaOciGgOaOciSgOE86bbalc94faAaOfgARbbaoRbdgOco4gCaCciSgCE86bbalc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc97faAaCfgARbbaOciGgOaOciSgOE86bbalc98faAaOfgORbbaoRbigoco4gAaAciSgAE86bbalc99faOaAfgORbbaocl4ciGgAaAciSgAE86bbalc9:faOaAfgORbbaocd4ciGgAaAciSgAE86bbalcufaOaAfglRbbaociGgoaociSgoE86bbalaofhoxdkalaoRbwaoRbbgOcl4gAaAcsSgAE86bbawcj;cbfaifglcGfaocwfaAfgARbbaOcsGgOaOcsSgOE86bbalcVfaAaOfgORbbaoRbegAcl4gCaCcsSgCE86bbalc7faOaCfgORbbaAcsGgAaAcsSgAE86bbalctfaOaAfgORbbaoRbdgAcl4gCaCcsSgCE86bbalc91faOaCfgORbbaAcsGgAaAcsSgAE86bbalc4faOaAfgORbbaoRbigAcl4gCaCcsSgCE86bbalc93faOaCfgORbbaAcsGgAaAcsSgAE86bbalc94faOaAfgORbbaoRblgAcl4gCaCcsSgCE86bbalc95faOaCfgORbbaAcsGgAaAcsSgAE86bbalc96faOaAfgORbbaoRbvgAcl4gCaCcsSgCE86bbalc97faOaCfgORbbaAcsGgAaAcsSgAE86bbalc98faOaAfgORbbaoRbogAcl4gCaCcsSgCE86bbalc99faOaCfgORbbaAcsGgAaAcsSgAE86bbalc9:faOaAfgORbbaoRbrgocl4gAaAcsSgAE86bbalcufaOaAfglRbbaocsGgoaocsSgoE86bbalaofhoxekalao8Pbb83bbalcwfaocwf8Pbb83bbaoczfhokdnaiam9pmbaHcdfhHaiczfhlarao9RcL0mekkaiam6mvaoTmvdnakTmbawaPfRbbhHawcj;cbfhlashiakhOinaialRbbgzce4cbazceG9R7aHfgH86bbaiadfhialcefhlaOcufgOmbkkascefhsaohzaPcefgPad9hmbxikkcbc99arao9Radcaadca0ESEhoxlkaoaxad2fhCdnakmbadhlinaoTmlarao9Rax6mlaoaxfhoalcufglmbkaChoxekcbhmawcjdfhAinarao9Rax6miawamfRbbhHawcj;cbfhlaAhiakhOinaialRbbgzce4cbazceG9R7aHfgH86bbaiadfhialcefhlaOcufgOmbkaAcefhAaoaxfhoamcefgmad9hmbkaChokabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqaombkc9:hoxekc9:hokavcj;ebf8Kjjjjbaok;cseHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;oiliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabaiavcefciGfcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavciGfgkcd7cetfaD87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavcufciGfcetfaD87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohvxekcjjjj94hvkabakcetfav87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklzNbb",e="b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q:6dkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq:p9sqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk:N8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhlaicefhodnaeTmbadTmbalc;WFbGglcjdalcjd6EhwcbhDinawaeaD9RaDawfae6Egqcsfglc9WGgkci2hxakcethmalcl4cifcd4hPabaDad2fhsakc;ab6hzcbhHincbhOaohAdndninaraA9RaP6meavcj;cbfaOak2fhCaAaPfhocbhidnazmbarao9Rc;Gb6mbcbhlinaCalfhidndndndndnaAalco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklbaoczfhokdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklzaoczfhokdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklaaoczfhokdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WaoclfaYpQbfaXc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WaocwfaYpQbfaXc:q:yjjbfRbbfhoxekaiaopbbbpkl8Waoczfhokalc;abfhialcjefak0meaihlarao9Rc;Fb0mbkkdnaiak9pmbaici4hlinarao9RcK6miaCaifhXdndndndndnaAaico4fRbbalcoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpkbbxikaXaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkbbaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaXaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkbbaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaXaopbbbpkbbaoczfhokalcdfhlaiczfgiak6mbkkaoTmeaohAaOcefgOclSmdxbkkc9:hoxlkdnakTmbavcjdfaHfhiavaHfpbdbhYcbhXinaiavcj;cbfaXfglpblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLalakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEalamfpblbg3cep9Ta3aQp9op9Hp9rg3alaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfhiaXczfgXak6mbkkaHclfgHad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfgDae6mbkkcbc99arao9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk::seHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:wPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalaeSmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskdnalTmbcbhvabhdinadczfgxaxpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oaoarpmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalaeSmbaiaeciGgvcitgdfcbcaad9R;8kbaiabalcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oaoarpmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalaeSmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnavalSmbaialciGgecdtgdVcbc;abad9R;8kbaiabavcdtfgvad;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkavaiad;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz:Dbb",t=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),i=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var r=WebAssembly.validate(t)?o(e):o(a),n,s=WebAssembly.instantiate(r,{}).then(function(p){n=p.instance,n.exports.__wasm_call_ctors()});function o(p){for(var b=new Uint8Array(p.length),x=0;x<p.length;++x){var I=p.charCodeAt(x);b[x]=I>96?I-97:I>64?I-39:I+4}for(var y=0,x=0;x<p.length;++x)b[y++]=b[x]<60?i[b[x]]:(b[x]-60)*64+b[++x];return b.buffer.slice(0,y)}function l(p,b,x,I,y,S,M){var R=p.exports.sbrk,E=I+3&-4,C=R(E*y),B=R(S.length),P=new Uint8Array(p.exports.memory.buffer);P.set(S,B);var F=b(C,I,y,B,S.length);if(F==0&&M&&M(C,E,y),x.set(P.subarray(C,C+I*y)),R(C-R(0)),F!=0)throw new Error("Malformed buffer data: "+F)}var c={NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},h={ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"},A=[],u=0;function d(p){var b={object:new Worker(p),pending:0,requests:{}};return b.object.onmessage=function(x){var I=x.data;b.pending-=I.count,b.requests[I.id][I.action](I.value),delete b.requests[I.id]},b}function f(p){for(var b="self.ready = WebAssembly.instantiate(new Uint8Array(["+new Uint8Array(r)+"]), {}).then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });self.onmessage = "+g.name+";"+l.toString()+g.toString(),x=new Blob([b],{type:"text/javascript"}),I=URL.createObjectURL(x),y=A.length;y<p;++y)A[y]=d(I);for(var y=p;y<A.length;++y)A[y].object.postMessage({});A.length=p,URL.revokeObjectURL(I)}function m(p,b,x,I,y){for(var S=A[0],M=1;M<A.length;++M)A[M].pending<S.pending&&(S=A[M]);return new Promise(function(R,E){var C=new Uint8Array(x),B=++u;S.pending+=p,S.requests[B]={resolve:R,reject:E},S.object.postMessage({id:B,count:p,size:b,source:C,mode:I,filter:y},[C.buffer])})}function g(p){var b=p.data;if(!b.id)return self.close();self.ready.then(function(x){try{var I=new Uint8Array(b.count*b.size);l(x,x.exports[b.mode],I,b.count,b.size,b.source,x.exports[b.filter]),self.postMessage({id:b.id,count:b.count,action:"resolve",value:I},[I.buffer])}catch(y){self.postMessage({id:b.id,count:b.count,action:"reject",value:y})}})}return{ready:s,supported:!0,useWorkers:function(p){f(p)},decodeVertexBuffer:function(p,b,x,I,y){l(n,n.exports.meshopt_decodeVertexBuffer,p,b,x,I,n.exports[c[y]])},decodeIndexBuffer:function(p,b,x,I){l(n,n.exports.meshopt_decodeIndexBuffer,p,b,x,I)},decodeIndexSequence:function(p,b,x,I){l(n,n.exports.meshopt_decodeIndexSequence,p,b,x,I)},decodeGltfBuffer:function(p,b,x,I,y,S){l(n,n.exports[h[y]],p,b,x,I,n.exports[c[S]])},decodeGltfBufferAsync:function(p,b,x,I,y){return A.length>0?m(p,b,x,h[I],c[y]):s.then(function(){var S=new Uint8Array(p*b);return l(n,n.exports[h[I]],S,p,b,x,n.exports[c[y]]),S})}}}();const Bl=new WeakMap;class T0 extends zi{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,i,r){const n=new or(this.manager);n.setPath(this.path),n.setResponseType("arraybuffer"),n.setRequestHeader(this.requestHeader),n.setWithCredentials(this.withCredentials),n.load(e,s=>{this.parse(s,t,r)},i,r)}parse(e,t,i=()=>{}){this.decodeDracoFile(e,t,null,null,ut,i).catch(i)}decodeDracoFile(e,t,i,r,n=wt,s=()=>{}){const o={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:r||this.defaultAttributeTypes,useUniqueIDs:!!i,vertexColorSpace:n};return this.decodeGeometry(e,o).then(t).catch(s)}decodeGeometry(e,t){const i=JSON.stringify(t);if(Bl.has(e)){const l=Bl.get(e);if(l.key===i)return l.promise;if(e.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let r;const n=this.workerNextTaskID++,s=e.byteLength,o=this._getWorker(n,s).then(l=>(r=l,new Promise((c,h)=>{r._callbacks[n]={resolve:c,reject:h},r.postMessage({type:"decode",id:n,taskConfig:t,buffer:e},[e])}))).then(l=>this._createGeometry(l.geometry));return o.catch(()=>!0).then(()=>{r&&n&&this._releaseTask(r,n)}),Bl.set(e,{key:i,promise:o}),o}_createGeometry(e){const t=new mt;e.index&&t.setIndex(new Ct(e.index.array,1));for(let i=0;i<e.attributes.length;i++){const{name:r,array:n,itemSize:s,stride:o,vertexColorSpace:l}=e.attributes[i];let c;if(s===o)c=new Ct(n,s);else{const h=new ys(n,o);c=new wa(h,s,0)}r==="color"&&(this._assignVertexColorSpace(c,l),c.normalized=!(n instanceof Float32Array)),t.setAttribute(r,c)}return t}_assignVertexColorSpace(e,t){if(t!==ut)return;const i=new Ue;for(let r=0,n=e.count;r<n;r++)i.fromBufferAttribute(e,r),Ge.colorSpaceToWorking(i,ut),e.setXYZ(r,i.r,i.g,i.b)}_loadLibrary(e,t){const i=new or(this.manager);return i.setPath(this.decoderPath),i.setResponseType(t),i.setWithCredentials(this.withCredentials),new Promise((r,n)=>{i.load(e,r,void 0,n)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e=typeof WebAssembly!="object"||this.decoderConfig.type==="js",t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(i=>{const r=i[0];e||(this.decoderConfig.wasmBinary=i[1]);const n=B0.toString(),s=["/* draco decoder */",r,"","/* worker */",n.substring(n.indexOf("{")+1,n.lastIndexOf("}"))].join(`
4012
4012
  `);this.workerSourceURL=URL.createObjectURL(new Blob([s]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){const r=new Worker(this.workerSourceURL);r._callbacks={},r._taskCosts={},r._taskLoad=0,r.postMessage({type:"init",decoderConfig:this.decoderConfig}),r.onmessage=function(n){const s=n.data;switch(s.type){case"decode":r._callbacks[s.id].resolve(s);break;case"error":r._callbacks[s.id].reject(s);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+s.type+'"')}},this.workerPool.push(r)}else this.workerPool.sort(function(r,n){return r._taskLoad>n._taskLoad?-1:1});const i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=t,i._taskLoad+=t,i})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,this.workerSourceURL!==""&&URL.revokeObjectURL(this.workerSourceURL),this}}function B0(){let a,e;onmessage=function(s){const o=s.data;switch(o.type){case"init":a=o.decoderConfig,e=new Promise(function(h){a.onModuleLoaded=function(A){h({draco:A})},DracoDecoderModule(a)});break;case"decode":const l=o.buffer,c=o.taskConfig;e.then(h=>{const A=h.draco,u=new A.Decoder;try{const d=t(A,u,new Int8Array(l),c),f=d.attributes.map(m=>m.array.buffer);d.index&&f.push(d.index.array.buffer),self.postMessage({type:"decode",id:o.id,geometry:d},f)}catch(d){console.error(d),self.postMessage({type:"error",id:o.id,error:d.message})}finally{A.destroy(u)}});break}};function t(s,o,l,c){const h=c.attributeIDs,A=c.attributeTypes;let u,d;const f=o.GetEncodedGeometryType(l);if(f===s.TRIANGULAR_MESH)u=new s.Mesh,d=o.DecodeArrayToMesh(l,l.byteLength,u);else if(f===s.POINT_CLOUD)u=new s.PointCloud,d=o.DecodeArrayToPointCloud(l,l.byteLength,u);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!d.ok()||u.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+d.error_msg());const m={index:null,attributes:[]};for(const g in h){const p=self[A[g]];let b,x;if(c.useUniqueIDs)x=h[g],b=o.GetAttributeByUniqueId(u,x);else{if(x=o.GetAttributeId(u,s[h[g]]),x===-1)continue;b=o.GetAttribute(u,x)}const I=r(s,o,u,g,p,b);g==="color"&&(I.vertexColorSpace=c.vertexColorSpace),m.attributes.push(I)}return f===s.TRIANGULAR_MESH&&(m.index=i(s,o,u)),s.destroy(u),m}function i(s,o,l){const c=l.num_faces()*3,h=c*4,A=s._malloc(h);o.GetTrianglesUInt32Array(l,h,A);const u=new Uint32Array(s.HEAPF32.buffer,A,c).slice();return s._free(A),{array:u,itemSize:1}}function r(s,o,l,c,h,A){const u=l.num_points(),d=A.num_components(),f=n(s,h),m=d*h.BYTES_PER_ELEMENT,g=Math.ceil(m/4)*4,p=g/h.BYTES_PER_ELEMENT,b=u*m,x=u*g,I=s._malloc(b);o.GetAttributeDataArrayForAllPoints(l,A,f,b,I);const y=new h(s.HEAPF32.buffer,I,b/h.BYTES_PER_ELEMENT);let S;if(m===g)S=y.slice();else{S=new h(x/h.BYTES_PER_ELEMENT);let M=0;for(let R=0,E=y.length;R<E;R++){for(let C=0;C<d;C++)S[M+C]=y[R*d+C];M+=p}}return s._free(I),{name:c,count:u,itemSize:d,array:S,stride:p}}function n(s,o){switch(o){case Float32Array:return s.DT_FLOAT32;case Int8Array:return s.DT_INT8;case Int16Array:return s.DT_INT16;case Int32Array:return s.DT_INT32;case Uint8Array:return s.DT_UINT8;case Uint16Array:return s.DT_UINT16;case Uint32Array:return s.DT_UINT32}}}class R0{constructor(e=4){this.pool=e,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0,this.workerCreator=null}_initWorker(e){if(!this.workers[e]){const t=this.workerCreator();t.addEventListener("message",this._onMessage.bind(this,e)),this.workers[e]=t}}_getIdleWorker(){for(let e=0;e<this.pool;e++)if(!(this.workerStatus&1<<e))return e;return-1}_onMessage(e,t){const i=this.workersResolve[e];if(i&&i(t),this.queue.length){const{resolve:r,msg:n,transfer:s}=this.queue.shift();this.workersResolve[e]=r,this.workers[e].postMessage(n,s)}else this.workerStatus^=1<<e}setWorkerCreator(e){this.workerCreator=e}setWorkerLimit(e){this.pool=e}postMessage(e,t){return new Promise(i=>{const r=this._getIdleWorker();r!==-1?(this._initWorker(r),this.workerStatus|=1<<r,this.workersResolve[r]=i,this.workers[r].postMessage(e,t)):this.queue.push({resolve:i,msg:e,transfer:t})})}dispose(){this.workers.forEach(e=>e.terminate()),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}const D0=0,kA=2,L0=1,GA=2,U0=0,N0=1,Q0=10,P0=0,HA=9,zA=15,VA=16,WA=22,qA=37,jA=43,XA=76,YA=83,KA=97,JA=100,ZA=103,$A=109,eu=122,tu=123,iu=131,ru=132,au=133,nu=134,su=137,ou=138,lu=139,cu=140,hu=141,Au=142,uu=145,du=146,pu=148,gu=152,Rl=153,F0=154,Dl=155,O0=156,fu=157,mu=158,_u=165,Eu=166,bu=1000054e3,vu=1000054001,xu=1000054004,Iu=1000054005,Ll=1000066e3,Cu=1000066004;class gn{constructor(e,t,i,r){this._dataView=void 0,this._littleEndian=void 0,this._offset=void 0,this._dataView=new DataView(e.buffer,e.byteOffset+t,i),this._littleEndian=r,this._offset=0}_nextUint8(){const e=this._dataView.getUint8(this._offset);return this._offset+=1,e}_nextUint16(){const e=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,e}_nextUint32(){const e=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint64(){const e=this._dataView.getUint32(this._offset,this._littleEndian)+4294967296*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,e}_nextInt32(){const e=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint8Array(e){const t=new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+this._offset,e);return this._offset+=e,t}_skip(e){return this._offset+=e,this}_scan(e,t=0){const i=this._offset;let r=0;for(;this._dataView.getUint8(this._offset)!==t&&r<e;)r++,this._offset++;return r<e&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+i,r)}}const kt=[171,75,84,88,32,50,48,187,13,10,26,10];function yu(a){return new TextDecoder().decode(a)}function k0(a){const e=new Uint8Array(a.buffer,a.byteOffset,kt.length);if(e[0]!==kt[0]||e[1]!==kt[1]||e[2]!==kt[2]||e[3]!==kt[3]||e[4]!==kt[4]||e[5]!==kt[5]||e[6]!==kt[6]||e[7]!==kt[7]||e[8]!==kt[8]||e[9]!==kt[9]||e[10]!==kt[10]||e[11]!==kt[11])throw new Error("Missing KTX 2.0 identifier.");const t={vkFormat:0,typeSize:1,pixelWidth:0,pixelHeight:0,pixelDepth:0,layerCount:0,faceCount:1,levelCount:0,supercompressionScheme:0,levels:[],dataFormatDescriptor:[{vendorId:0,descriptorType:0,versionNumber:2,colorModel:0,colorPrimaries:1,transferFunction:2,flags:0,texelBlockDimension:[0,0,0,0],bytesPlane:[0,0,0,0,0,0,0,0],samples:[]}],keyValue:{},globalData:null},i=17*Uint32Array.BYTES_PER_ELEMENT,r=new gn(a,kt.length,i,!0);t.vkFormat=r._nextUint32(),t.typeSize=r._nextUint32(),t.pixelWidth=r._nextUint32(),t.pixelHeight=r._nextUint32(),t.pixelDepth=r._nextUint32(),t.layerCount=r._nextUint32(),t.faceCount=r._nextUint32(),t.levelCount=r._nextUint32(),t.supercompressionScheme=r._nextUint32();const n=r._nextUint32(),s=r._nextUint32(),o=r._nextUint32(),l=r._nextUint32(),c=r._nextUint64(),h=r._nextUint64(),A=3*Math.max(t.levelCount,1)*8,u=new gn(a,kt.length+i,A,!0);for(let re=0,fe=Math.max(t.levelCount,1);re<fe;re++)t.levels.push({levelData:new Uint8Array(a.buffer,a.byteOffset+u._nextUint64(),u._nextUint64()),uncompressedByteLength:u._nextUint64()});const d=new gn(a,n,s,!0);d._skip(4);const f=d._nextUint16(),m=d._nextUint16(),g=d._nextUint16(),p=d._nextUint16(),b={vendorId:f,descriptorType:m,versionNumber:g,colorModel:d._nextUint8(),colorPrimaries:d._nextUint8(),transferFunction:d._nextUint8(),flags:d._nextUint8(),texelBlockDimension:[d._nextUint8(),d._nextUint8(),d._nextUint8(),d._nextUint8()],bytesPlane:[d._nextUint8(),d._nextUint8(),d._nextUint8(),d._nextUint8(),d._nextUint8(),d._nextUint8(),d._nextUint8(),d._nextUint8()],samples:[]},x=(p/4-6)/4;for(let re=0;re<x;re++){const fe={bitOffset:d._nextUint16(),bitLength:d._nextUint8(),channelType:d._nextUint8(),samplePosition:[d._nextUint8(),d._nextUint8(),d._nextUint8(),d._nextUint8()],sampleLower:Number.NEGATIVE_INFINITY,sampleUpper:Number.POSITIVE_INFINITY};64&fe.channelType?(fe.sampleLower=d._nextInt32(),fe.sampleUpper=d._nextInt32()):(fe.sampleLower=d._nextUint32(),fe.sampleUpper=d._nextUint32()),b.samples[re]=fe}t.dataFormatDescriptor.length=0,t.dataFormatDescriptor.push(b);const I=new gn(a,o,l,!0);for(;I._offset<l;){const re=I._nextUint32(),fe=I._scan(re),Se=yu(fe);if(t.keyValue[Se]=I._nextUint8Array(re-fe.byteLength-1),Se.match(/^ktx/i)){const et=yu(t.keyValue[Se]);t.keyValue[Se]=et.substring(0,et.lastIndexOf("\0"))}I._skip(re%4?4-re%4:0)}if(h<=0)return t;const y=new gn(a,c,h,!0),S=y._nextUint16(),M=y._nextUint16(),R=y._nextUint32(),E=y._nextUint32(),C=y._nextUint32(),B=y._nextUint32(),P=[];for(let re=0,fe=Math.max(t.levelCount,1);re<fe;re++)P.push({imageFlags:y._nextUint32(),rgbSliceByteOffset:y._nextUint32(),rgbSliceByteLength:y._nextUint32(),alphaSliceByteOffset:y._nextUint32(),alphaSliceByteLength:y._nextUint32()});const F=c+y._offset,z=F+R,q=z+E,G=q+C,H=new Uint8Array(a.buffer,a.byteOffset+F,R),Y=new Uint8Array(a.buffer,a.byteOffset+z,E),ie=new Uint8Array(a.buffer,a.byteOffset+q,C),ce=new Uint8Array(a.buffer,a.byteOffset+G,B);return t.globalData={endpointCount:S,selectorCount:M,imageDescs:P,endpointsData:H,selectorsData:Y,tablesData:ie,extendedData:ce},t}let Ul,Wi,Nl;const Ql={env:{emscripten_notify_memory_growth:function(a){Nl=new Uint8Array(Wi.exports.memory.buffer)}}};class G0{init(){return Ul||(Ul=typeof fetch<"u"?fetch("data:application/wasm;base64,"+Su).then(e=>e.arrayBuffer()).then(e=>WebAssembly.instantiate(e,Ql)).then(this._init):WebAssembly.instantiate(Buffer.from(Su,"base64"),Ql).then(this._init),Ul)}_init(e){Wi=e.instance,Ql.env.emscripten_notify_memory_growth(0)}decode(e,t=0){if(!Wi)throw new Error("ZSTDDecoder: Await .init() before decoding.");const i=e.byteLength,r=Wi.exports.malloc(i);Nl.set(e,r),t=t||Number(Wi.exports.ZSTD_findDecompressedSize(r,i));const n=Wi.exports.malloc(t),s=Wi.exports.ZSTD_decompress(n,t,r,i),o=Nl.slice(n,n+s);return Wi.exports.free(r),Wi.exports.free(n),o}}const Su="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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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",H0="display-p3",z0="display-p3-linear";({...Ge.spaces[ut]});const Pl=new WeakMap;let Fl=0,Ol;class ai extends zi{constructor(e){super(e),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new R0,this.workerSourceURL="",this.workerConfig=null,typeof MSC_TRANSCODER<"u"&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(e){return this.transcoderPath=e,this}setWorkerLimit(e){return this.workerPool.setWorkerLimit(e),this}async detectSupportAsync(e){return console.warn('KTX2Loader: "detectSupportAsync()" has been deprecated. Use "detectSupport()" and "await renderer.init();" when creating the renderer.'),await e.init(),this.detectSupport(e)}detectSupport(e){return e.isWebGPURenderer===!0?this.workerConfig={astcSupported:e.hasFeature("texture-compression-astc"),astcHDRSupported:!1,etc1Supported:e.hasFeature("texture-compression-etc1"),etc2Supported:e.hasFeature("texture-compression-etc2"),dxtSupported:e.hasFeature("texture-compression-s3tc"),bptcSupported:e.hasFeature("texture-compression-bc"),pvrtcSupported:e.hasFeature("texture-compression-pvrtc")}:(this.workerConfig={astcSupported:e.extensions.has("WEBGL_compressed_texture_astc"),astcHDRSupported:e.extensions.has("WEBGL_compressed_texture_astc")&&e.extensions.get("WEBGL_compressed_texture_astc").getSupportedProfiles().includes("hdr"),etc1Supported:e.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:e.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:e.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:e.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:e.extensions.has("WEBGL_compressed_texture_pvrtc")||e.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},typeof navigator<"u"&&navigator.platform.indexOf("Linux")>=0&&navigator.userAgent.indexOf("Firefox")>=0&&this.workerConfig.astcSupported&&this.workerConfig.etc2Supported&&this.workerConfig.bptcSupported&&this.workerConfig.dxtSupported&&(this.workerConfig.astcSupported=!1,this.workerConfig.etc2Supported=!1)),this}init(){if(!this.transcoderPending){const e=new or(this.manager);e.setPath(this.transcoderPath),e.setWithCredentials(this.withCredentials);const t=e.loadAsync("basis_transcoder.js"),i=new or(this.manager);i.setPath(this.transcoderPath),i.setResponseType("arraybuffer"),i.setWithCredentials(this.withCredentials);const r=i.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([t,r]).then(([n,s])=>{const o=ai.BasisWorker.toString(),l=["/* constants */","let _EngineFormat = "+JSON.stringify(ai.EngineFormat),"let _EngineType = "+JSON.stringify(ai.EngineType),"let _TranscoderFormat = "+JSON.stringify(ai.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(ai.BasisFormat),"/* basis_transcoder.js */",n,"/* worker */",o.substring(o.indexOf("{")+1,o.lastIndexOf("}"))].join(`
4013
- `);this.workerSourceURL=URL.createObjectURL(new Blob([l])),this.transcoderBinary=s,this.workerPool.setWorkerCreator(()=>{const c=new Worker(this.workerSourceURL),h=this.transcoderBinary.slice(0);return c.postMessage({type:"init",config:this.workerConfig,transcoderBinary:h},[h]),c})}),Fl>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),Fl++}return this.transcoderPending}load(e,t,i,r){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const n=new or(this.manager);n.setPath(this.path),n.setCrossOrigin(this.crossOrigin),n.setWithCredentials(this.withCredentials),n.setRequestHeader(this.requestHeader),n.setResponseType("arraybuffer"),n.load(e,s=>{this.parse(s,t,r)},i,r)}parse(e,t,i){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");if(Pl.has(e))return Pl.get(e).promise.then(t).catch(i);this._createTexture(e).then(r=>t?t(r):null).catch(i)}_createTextureFrom(e,t){const{type:i,error:r,data:{faces:n,width:s,height:o,format:l,type:c,dfdFlags:h}}=e;if(i==="error")return Promise.reject(r);let A;if(t.faceCount===6)A=new Nh(n,l,c);else{const u=n[0].mipmaps;A=t.layerCount>1?new Uh(u,s,o,t.layerCount,l,c):new fa(u,s,o,l,c)}return A.minFilter=n[0].mipmaps.length===1?ct:Jt,A.magFilter=ct,A.generateMipmaps=!1,A.needsUpdate=!0,A.colorSpace=Mu(t),A.premultiplyAlpha=!!(h&L0),A}async _createTexture(e,t={}){const i=k0(new Uint8Array(e)),r=i.vkFormat===Ll&&i.dataFormatDescriptor[0].colorModel===167;if(!(i.vkFormat===P0||r&&!this.workerConfig.astcHDRSupported))return W0(i);const n=t,s=this.init().then(()=>this.workerPool.postMessage({type:"transcode",buffer:e,taskConfig:n},[e])).then(o=>this._createTextureFrom(o.data,i));return Pl.set(e,{promise:s}),s}dispose(){this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),Fl--}}ai.BasisFormat={ETC1S:0,UASTC:1,UASTC_HDR:2},ai.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16,BC6H:22,RGB_HALF:24,RGBA_HALF:25},ai.EngineFormat={RGBAFormat:It,RGBA_ASTC_4x4_Format:Ji,RGB_BPTC_UNSIGNED_Format:Ha,RGBA_BPTC_Format:Ir,RGBA_ETC2_EAC_Format:Kr,RGBA_PVRTC_4BPPV1_Format:vr,RGBA_S3TC_DXT5_Format:jr,RGB_ETC1_Format:Pa,RGB_ETC2_Format:Yr,RGB_PVRTC_4BPPV1_Format:Qa,RGBA_S3TC_DXT1_Format:Ki},ai.EngineType={UnsignedByteType:De,HalfFloatType:Rt,FloatType:Mt},ai.BasisWorker=function(){let a,e,t;const i=_EngineFormat,r=_EngineType,n=_TranscoderFormat,s=_BasisFormat;self.addEventListener("message",function(f){const m=f.data;switch(m.type){case"init":a=m.config,o(m.transcoderBinary);break;case"transcode":e.then(()=>{try{const{faces:g,buffers:p,width:b,height:x,hasAlpha:I,format:y,type:S,dfdFlags:M}=l(m.buffer);self.postMessage({type:"transcode",id:m.id,data:{faces:g,width:b,height:x,hasAlpha:I,format:y,type:S,dfdFlags:M}},p)}catch(g){console.error(g),self.postMessage({type:"error",id:m.id,error:g.message})}});break}});function o(f){e=new Promise(m=>{t={wasmBinary:f,onRuntimeInitialized:m},BASIS(t)}).then(()=>{t.initializeBasis(),t.KTX2File===void 0&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")})}function l(f){const m=new t.KTX2File(new Uint8Array(f));function g(){m.close(),m.delete()}if(!m.isValid())throw g(),new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");let p;if(m.isUASTC())p=s.UASTC;else if(m.isETC1S())p=s.ETC1S;else if(m.isHDR())p=s.UASTC_HDR;else throw new Error("THREE.KTX2Loader: Unknown Basis encoding");const b=m.getWidth(),x=m.getHeight(),I=m.getLayers()||1,y=m.getLevels(),S=m.getFaces(),M=m.getHasAlpha(),R=m.getDFDFlags(),{transcoderFormat:E,engineFormat:C,engineType:B}=A(p,b,x,M);if(!b||!x||!y)throw g(),new Error("THREE.KTX2Loader: Invalid texture");if(!m.startTranscoding())throw g(),new Error("THREE.KTX2Loader: .startTranscoding failed");const P=[],F=[];for(let z=0;z<S;z++){const q=[];for(let G=0;G<y;G++){const H=[];let Y,ie;for(let re=0;re<I;re++){const fe=m.getImageLevelInfo(G,re,z);z===0&&G===0&&re===0&&(fe.origWidth%4!==0||fe.origHeight%4!==0)&&console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),y>1?(Y=fe.origWidth,ie=fe.origHeight):(Y=fe.width,ie=fe.height);let Se=new Uint8Array(m.getImageTranscodedSizeInBytes(G,re,0,E));const et=m.transcodeImage(Se,G,re,z,E,0,-1,-1);if(B===r.HalfFloatType&&(Se=new Uint16Array(Se.buffer,Se.byteOffset,Se.byteLength/Uint16Array.BYTES_PER_ELEMENT)),!et)throw g(),new Error("THREE.KTX2Loader: .transcodeImage failed.");H.push(Se)}const ce=d(H);q.push({data:ce,width:Y,height:ie}),F.push(ce.buffer)}P.push({mipmaps:q,width:b,height:x,format:C,type:B})}return g(),{faces:P,buffers:F,width:b,height:x,hasAlpha:M,dfdFlags:R,format:C,type:B}}const c=[{if:"astcSupported",basisFormat:[s.UASTC],transcoderFormat:[n.ASTC_4x4,n.ASTC_4x4],engineFormat:[i.RGBA_ASTC_4x4_Format,i.RGBA_ASTC_4x4_Format],engineType:[r.UnsignedByteType],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[n.BC7_M5,n.BC7_M5],engineFormat:[i.RGBA_BPTC_Format,i.RGBA_BPTC_Format],engineType:[r.UnsignedByteType],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[n.BC1,n.BC3],engineFormat:[i.RGBA_S3TC_DXT1_Format,i.RGBA_S3TC_DXT5_Format],engineType:[r.UnsignedByteType],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[n.ETC1,n.ETC2],engineFormat:[i.RGB_ETC2_Format,i.RGBA_ETC2_EAC_Format],engineType:[r.UnsignedByteType],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[n.ETC1],engineFormat:[i.RGB_ETC1_Format],engineType:[r.UnsignedByteType],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[n.PVRTC1_4_RGB,n.PVRTC1_4_RGBA],engineFormat:[i.RGB_PVRTC_4BPPV1_Format,i.RGBA_PVRTC_4BPPV1_Format],engineType:[r.UnsignedByteType],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0},{if:"bptcSupported",basisFormat:[s.UASTC_HDR],transcoderFormat:[n.BC6H],engineFormat:[i.RGB_BPTC_UNSIGNED_Format],engineType:[r.HalfFloatType],priorityHDR:1,needsPowerOfTwo:!1},{basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[n.RGBA32,n.RGBA32],engineFormat:[i.RGBAFormat,i.RGBAFormat],engineType:[r.UnsignedByteType,r.UnsignedByteType],priorityETC1S:100,priorityUASTC:100,needsPowerOfTwo:!1},{basisFormat:[s.UASTC_HDR],transcoderFormat:[n.RGBA_HALF],engineFormat:[i.RGBAFormat],engineType:[r.HalfFloatType],priorityHDR:100,needsPowerOfTwo:!1}],h={[s.ETC1S]:c.filter(f=>f.basisFormat.includes(s.ETC1S)).sort((f,m)=>f.priorityETC1S-m.priorityETC1S),[s.UASTC]:c.filter(f=>f.basisFormat.includes(s.UASTC)).sort((f,m)=>f.priorityUASTC-m.priorityUASTC),[s.UASTC_HDR]:c.filter(f=>f.basisFormat.includes(s.UASTC_HDR)).sort((f,m)=>f.priorityHDR-m.priorityHDR)};function A(f,m,g,p){const b=h[f];for(let x=0;x<b.length;x++){const I=b[x];if(I.if&&!a[I.if]||!I.basisFormat.includes(f)||p&&I.transcoderFormat.length<2||I.needsPowerOfTwo&&!(u(m)&&u(g)))continue;const y=I.transcoderFormat[p?1:0],S=I.engineFormat[p?1:0],M=I.engineType[0];return{transcoderFormat:y,engineFormat:S,engineType:M}}throw new Error("THREE.KTX2Loader: Failed to identify transcoding target.")}function u(f){return f<=2?!0:(f&f-1)===0&&f!==0}function d(f){if(f.length===1)return f[0];let m=0;for(let b=0;b<f.length;b++){const x=f[b];m+=x.byteLength}const g=new Uint8Array(m);let p=0;for(let b=0;b<f.length;b++){const x=f[b];g.set(x,p),p+=x.byteLength}return g}};const V0=new Set([It,qr,Zt,Ni]),kl={[$A]:It,[ZA]:Zt,[JA]:Ni,[KA]:It,[YA]:Zt,[XA]:Ni,[jA]:It,[qA]:It,[WA]:Zt,[VA]:Zt,[zA]:Ni,[HA]:Ni,[tu]:qr,[eu]:qr,[gu]:Kr,[pu]:Yr,[Rl]:Fa,[F0]:Oa,[Dl]:ka,[O0]:Ga,[Ll]:Ji,[mu]:Ji,[fu]:Ji,[Cu]:xr,[Eu]:xr,[_u]:xr,[nu]:Ki,[au]:Ki,[ru]:Er,[iu]:Er,[ou]:br,[su]:br,[cu]:Va,[lu]:za,[Au]:qa,[hu]:Wa,[du]:Ir,[uu]:Ir,[Iu]:vr,[vu]:vr,[xu]:Xr,[bu]:Xr},Ca={[$A]:Mt,[ZA]:Mt,[JA]:Mt,[KA]:Rt,[YA]:Rt,[XA]:Rt,[jA]:De,[qA]:De,[WA]:De,[VA]:De,[zA]:De,[HA]:De,[tu]:Ua,[eu]:Na,[gu]:De,[pu]:De,[Rl]:De,[Rl]:De,[Dl]:De,[Dl]:De,[Ll]:Rt,[mu]:De,[fu]:De,[Cu]:Rt,[Eu]:De,[_u]:De,[nu]:De,[au]:De,[ru]:De,[iu]:De,[ou]:De,[su]:De,[cu]:De,[lu]:De,[Au]:De,[hu]:De,[du]:De,[uu]:De,[Iu]:De,[vu]:De,[xu]:De,[bu]:De};async function W0(a){const{vkFormat:e}=a;if(kl[e]===void 0)throw new Error("THREE.KTX2Loader: Unsupported vkFormat: "+e);Ca[e]===void 0&&console.warn('THREE.KTX2Loader: Missing ".type" for vkFormat: '+e);let t;a.supercompressionScheme===kA&&(Ol||(Ol=new Promise(async s=>{const o=new G0;await o.init(),s(o)})),t=await Ol);const i=[];for(let s=0;s<a.levels.length;s++){const o=Math.max(1,a.pixelWidth>>s),l=Math.max(1,a.pixelHeight>>s),c=a.pixelDepth?Math.max(1,a.pixelDepth>>s):0,h=a.levels[s];let A;if(a.supercompressionScheme===D0)A=h.levelData;else if(a.supercompressionScheme===kA)A=t.decode(h.levelData,h.uncompressedByteLength);else throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");let u;Ca[e]===Mt?u=new Float32Array(A.buffer,A.byteOffset,A.byteLength/Float32Array.BYTES_PER_ELEMENT):Ca[e]===Rt?u=new Uint16Array(A.buffer,A.byteOffset,A.byteLength/Uint16Array.BYTES_PER_ELEMENT):Ca[e]===Ua||Ca[e]===Na?u=new Uint32Array(A.buffer,A.byteOffset,A.byteLength/Uint32Array.BYTES_PER_ELEMENT):u=A,i.push({data:u,width:o,height:l,depth:c})}const r=a.levelCount===0||i.length>1;let n;if(V0.has(kl[e]))n=a.pixelDepth===0?new nn(i[0].data,a.pixelWidth,a.pixelHeight):new Bo(i[0].data,a.pixelWidth,a.pixelHeight,a.pixelDepth),n.minFilter=r?Nn:gt,n.magFilter=gt,n.generateMipmaps=a.levelCount===0;else{if(a.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");n=new fa(i,a.pixelWidth,a.pixelHeight),n.minFilter=r?Jt:ct,n.magFilter=ct}return n.mipmaps=i,n.type=Ca[e],n.format=kl[e],n.colorSpace=Mu(a),n.needsUpdate=!0,Promise.resolve(n)}function Mu(a){const e=a.dataFormatDescriptor[0];return e.colorPrimaries===N0?e.transferFunction===GA?ut:wt:e.colorPrimaries===Q0?e.transferFunction===GA?H0:z0:(e.colorPrimaries===U0||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${e.colorPrimaries}"`),wi)}let vi="https://www.gstatic.com/draco/versioned/decoders/1.5.7/",Or="https://cdn.needle.tools/static/three/0.179.1/basis2/";const q0=vi,j0=Or,wu=new URL(vi+"draco_decoder.js");wu.searchParams.append("range","true"),fetch(wu,{method:"GET",headers:{Range:"bytes=0-1"}}).catch(a=>{console.debug(`Failed to fetch remote Draco decoder from ${vi} (offline: ${typeof navigator<"u"?navigator.onLine:"unknown"})`),vi===q0&&Tu("./include/draco/"),Or===j0&&Bu("./include/ktx2/")}).finally(()=>{Ru()});const X0=()=>({dracoDecoderPath:vi,ktx2TranscoderPath:Or});function Tu(a){vi=a,Xt&&Xt[Hl]!=vi?(console.debug("Updating Draco decoder path to "+a),Xt[Hl]=vi,Xt.setDecoderPath(vi),Xt.preload()):console.debug("Setting Draco decoder path to "+a)}function Bu(a){Or=a,xi&&xi.transcoderPath!=Or?(console.debug("Updating KTX2 transcoder path to "+a),xi.setTranscoderPath(Or),xi.init()):console.debug("Setting KTX2 transcoder path to "+a)}function Ws(a){return Ru(),a?xi.detectSupport(a):a!==null&&console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures might fail"),{dracoLoader:Xt,ktx2Loader:xi,meshoptDecoder:qs}}function Gl(a){a.dracoLoader||a.setDRACOLoader(Xt),a.ktx2Loader||a.setKTX2Loader(xi),a.meshoptDecoder||a.setMeshoptDecoder(qs)}const Hl=Symbol("dracoDecoderPath");let Xt,qs,xi;function Ru(){Xt||(Xt=new T0,Xt[Hl]=vi,Xt.setDecoderPath(vi),Xt.setDecoderConfig({type:"js"}),Xt.preload()),xi||(xi=new ai,xi.setTranscoderPath(Or),xi.init()),qs||(qs=w0)}const zl=new WeakMap;function Vl(a,e){let t=zl.get(a);t?t=Object.assign(t,e):t=e,zl.set(a,t)}const Y0=Cl.prototype.load;function K0(...a){const e=zl.get(this);let t=a[0];const i=new URL(t,window.location.href);if(i.hostname.endsWith("needle.tools")){const r=e?.progressive!==void 0?e.progressive:!0,n=e?.usecase?e.usecase:"default";r?this.requestHeader.Accept=`*/*;progressive=allowed;usecase=${n}`:this.requestHeader.Accept=`*/*;usecase=${n}`,t=i.toString()}return a[0]=t,Y0?.call(this,...a)}Cl.prototype.load=K0,hr("debugprogressive");function hr(a){if(typeof window>"u")return!1;const e=new URL(window.location.href).searchParams.get(a);return e==null||e==="0"||e==="false"?!1:e===""?!0:e}function J0(a,e){if(e===void 0||a===void 0||e.startsWith("./")||e.startsWith("http")||e.startsWith("data:")||e.startsWith("blob:"))return e;const t=a.lastIndexOf("/");if(t>=0){const i=a.substring(0,t+1);for(;i.endsWith("/")&&e.startsWith("/");)e=e.substring(1);return i+e}return e}function Wl(){return js!==void 0||(js=/iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent),hr("debugprogressive")&&console.log("[glTF Progressive]: isMobileDevice",js)),js}let js;function Du(){if(typeof window>"u")return!1;const a=new URL(window.location.href),e=a.hostname==="localhost"||/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(a.hostname);return a.hostname==="127.0.0.1"||e}class Z0{constructor(e,t={}){this.maxConcurrent=e,this.debug=t.debug??!1,window.requestAnimationFrame(this.tick)}_running=new Map;_queue=[];debug=!1;tick=()=>{this.internalUpdate(),setTimeout(this.tick,10)};slot(e){return this.debug&&console.debug(`[PromiseQueue]: Requesting slot for key ${e}, running: ${this._running.size}, waiting: ${this._queue.length}`),new Promise(t=>{this._queue.push({key:e,resolve:t})})}add(e,t){this._running.has(e)||(this._running.set(e,t),t.finally(()=>{this._running.delete(e),this.debug&&console.debug(`[PromiseQueue]: Promise finished now running: ${this._running.size}, waiting: ${this._queue.length}. (finished ${e})`)}),this.debug&&console.debug(`[PromiseQueue]: Added new promise, now running: ${this._running.size}, waiting: ${this._queue.length}. (added ${e})`))}internalUpdate(){const e=this.maxConcurrent-this._running.size;for(let t=0;t<e&&this._queue.length>0;t++){this.debug&&console.debug(`[PromiseQueue]: Running ${this._running.size} promises, waiting for ${this._queue.length} more.`);const{key:i,resolve:r}=this._queue.shift();r({use:n=>this.add(i,n)})}}}function $0(a){const e=a.image?.width??0,t=a.image?.height??0,i=a.image?.depth??1,r=Math.floor(Math.log2(Math.max(e,t,i)))+1,n=eE(a);return e*t*i*n*(1-Math.pow(.25,r))/(1-.25)}function eE(a){let e=4;const t=a.format;t===1024||t===1025?e=1:t===1026||t===1027?e=2:t===1022||t===1029?e=3:(t===1023||t===1033)&&(e=4);let i=1;const r=a.type;return r===1009||r===1010?i=1:r===1011||r===1012?i=2:r===1013||r===1014||r===1015?i=4:r===1016&&(i=2),e*i}const tE=typeof window>"u"&&typeof document>"u",ql=Symbol("needle:raycast-mesh");function ya(a){return a?.[ql]instanceof mt?a[ql]:null}function iE(a,e){if((a.type==="Mesh"||a.type==="SkinnedMesh")&&!ya(a)){const t=aE(e);t.userData={isRaycastMesh:!0},a[ql]=t}}function rE(a=!0){if(a){if(fn)return;const e=fn=ft.prototype.raycast;ft.prototype.raycast=function(t,i){const r=this,n=ya(r);let s;n&&r.isMesh&&(s=r.geometry,r.geometry=n),e.call(this,t,i),s&&(r.geometry=s)}}else{if(!fn)return;ft.prototype.raycast=fn,fn=null}}let fn=null;function aE(a){const e=new mt;for(const t in a.attributes)e.setAttribute(t,a.getAttribute(t));return e.setIndex(a.getIndex()),e}const Ar=new Array,Oe=hr("debugprogressive");let mn,kr=-1;if(Oe){let a=function(){kr+=1,kr>=e&&(kr=-1),console.log(`Toggle LOD level [${kr}]`)},e=6;window.addEventListener("keyup",t=>{t.key==="p"&&a(),t.key==="w"&&(mn=!mn,console.log(`Toggle wireframe [${mn}]`));const i=parseInt(t.key);!isNaN(i)&&i>=0&&(kr=i,console.log(`Set LOD level to [${kr}]`))})}function Lu(a){if(Oe&&mn!==void 0)if(Array.isArray(a))for(const e of a)Lu(e);else a&&"wireframe"in a&&(a.wireframe=mn===!0)}const _n=new Array;let nE=0;const sE=Wl()?2:10;function oE(a){if(_n.length<sE){const t=_n.length;Oe&&console.warn(`[Worker] Creating new worker #${t}`);const i=$l.createWorker(a||{});return _n.push(i),i}const e=nE++%_n.length;return _n[e]}class $l{constructor(e,t){this.worker=e,this._debug=t.debug??!1,e.onmessage=i=>{const r=i.data;switch(this._debug&&console.log("[Worker] EVENT",r),r.type){case"loaded-gltf":for(const n of this._running)if(n.url===r.result.url){lE(r.result),n.resolve(r.result);const s=n.url;s.startsWith("blob:")&&URL.revokeObjectURL(s)}}},e.onerror=i=>{console.error("[Worker] Error in gltf-progressive worker:",i)},e.postMessage({type:"init"})}static async createWorker(e){const t=new Worker(URL.createObjectURL(new Blob([`import '${new URL("./loader.worker-CCrD-Ycm.js",import.meta.url).toString()}';`],{type:"text/javascript"})),{type:"module"});return new $l(t,e)}_running=[];_webglRenderer=null;async load(e,t){const i=X0();let r=t?.renderer;r||(this._webglRenderer??=(async()=>{const{WebGLRenderer:o}=await Promise.resolve().then(()=>j_);return new o})(),r=await this._webglRenderer);const n=Ws(r).ktx2Loader.workerConfig;e instanceof URL?e=e.toString():e.startsWith("file:")?e=URL.createObjectURL(new Blob([e])):!e.startsWith("blob:")&&!e.startsWith("http:")&&!e.startsWith("https:")&&(e=new URL(e,window.location.href).toString());const s={type:"load",url:e,dracoDecoderPath:i.dracoDecoderPath,ktx2TranscoderPath:i.ktx2TranscoderPath,ktx2LoaderConfig:n};return this._debug&&console.debug("[Worker] Sending load request",s),this.worker.postMessage(s),new Promise(o=>{this._running.push({url:e.toString(),resolve:o})})}_debug=!1}function lE(a){for(const e of a.geometries){const t=e.geometry,i=new mt;if(i.name=t.name||"",t.index){const r=t.index;i.setIndex(jl(r))}for(const r in t.attributes){const n=t.attributes[r],s=jl(n);i.setAttribute(r,s)}if(t.morphAttributes)for(const r in t.morphAttributes){const n=t.morphAttributes[r].map(s=>jl(s));i.morphAttributes[r]=n}if(i.morphTargetsRelative=t.morphTargetsRelative??!1,i.boundingBox=new Vt,i.boundingBox.min=new N(t.boundingBox?.min.x,t.boundingBox?.min.y,t.boundingBox?.min.z),i.boundingBox.max=new N(t.boundingBox?.max.x,t.boundingBox?.max.y,t.boundingBox?.max.z),i.boundingSphere=new Wt(new N(t.boundingSphere?.center.x,t.boundingSphere?.center.y,t.boundingSphere?.center.z),t.boundingSphere?.radius),t.groups)for(const r of t.groups)i.addGroup(r.start,r.count,r.materialIndex);t.userData&&(i.userData=t.userData),e.geometry=i}for(const e of a.textures){const t=e.texture;let i=null;if(t.isCompressedTexture){const r=t.mipmaps,n=t.image?.width||t.source?.data?.width||-1,s=t.image?.height||t.source?.data?.height||-1;i=new fa(r,n,s,t.format,t.type,t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.anisotropy,t.colorSpace)}else i=new Ke(t.image,t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.colorSpace),i.mipmaps=t.mipmaps,i.channel=t.channel,i.source.data=t.source.data,i.flipY=t.flipY,i.premultiplyAlpha=t.premultiplyAlpha,i.unpackAlignment=t.unpackAlignment,i.matrix=new Ne(...t.matrix.elements);if(!i){console.error("[Worker] Failed to create new texture from received data. Texture is not a CompressedTexture or Texture.");continue}e.texture=i}return a}function jl(a){let e=a;if("isInterleavedBufferAttribute"in a&&a.isInterleavedBufferAttribute){const t=a.data,i=t.array,r=new ys(i,t.stride);e=new wa(r,a.itemSize,i.byteOffset,a.normalized),e.offset=a.offset}else"isBufferAttribute"in a&&a.isBufferAttribute&&(e=new Ct(a.array,a.itemSize,a.normalized),e.usage=a.usage,e.gpuType=a.gpuType,e.updateRanges=a.updateRanges);return e}const cE=hr("gltf-progressive-worker");hr("gltf-progressive-reduce-mipmaps");const Sa=hr("gltf-progressive-gc"),Xl=Symbol("needle-progressive-texture"),qi="NEEDLE_progressive";class qe{get name(){return qi}static getMeshLODExtension(e){const t=this.getAssignedLODInformation(e);return t?.key?this.lodInfos.get(t.key):null}static getPrimitiveIndex(e){return this.getAssignedLODInformation(e)?.index??-1}static getMaterialMinMaxLODsCount(e,t){const i=this,r="LODS:minmax",n=e[r];if(n!=null)return n;if(t||(t={min_count:1/0,max_count:0,lods:[]}),Array.isArray(e)){for(const o of e)this.getMaterialMinMaxLODsCount(o,t);return e[r]=t,t}if(Oe==="verbose"&&console.log("getMaterialMinMaxLODsCount",e),e.type==="ShaderMaterial"||e.type==="RawShaderMaterial"){const o=e;for(const l of Object.keys(o.uniforms)){const c=o.uniforms[l].value;c?.isTexture===!0&&s(c,t)}}else if(e.isMaterial)for(const o of Object.keys(e)){const l=e[o];l?.isTexture===!0&&s(l,t)}else Oe&&console.warn(`[getMaterialMinMaxLODsCount] Unsupported material type: ${e.type}`);return e[r]=t,t;function s(o,l){const c=i.getAssignedLODInformation(o);if(c){const h=i.lodInfos.get(c.key);if(h&&h.lods){l.min_count=Math.min(l.min_count,h.lods.length),l.max_count=Math.max(l.max_count,h.lods.length);for(let A=0;A<h.lods.length;A++){const u=h.lods[A];u.width&&(l.lods[A]=l.lods[A]||{min_height:1/0,max_height:0},l.lods[A].min_height=Math.min(l.lods[A].min_height,u.height),l.lods[A].max_height=Math.max(l.lods[A].max_height,u.height))}}}}}static hasLODLevelAvailable(e,t){if(Array.isArray(e)){for(const n of e)if(this.hasLODLevelAvailable(n,t))return!0;return!1}if(e.isMaterial===!0){for(const n of Object.keys(e)){const s=e[n];if(s&&s.isTexture&&this.hasLODLevelAvailable(s,t))return!0}return!1}else if(e.isGroup===!0){for(const n of e.children)if(n.isMesh===!0&&this.hasLODLevelAvailable(n,t))return!0}let i,r;if(e.isMesh?i=e.geometry:(e.isBufferGeometry||e.isTexture)&&(i=e),i&&i?.userData?.LODS){const n=i.userData.LODS;if(r=this.lodInfos.get(n.key),t===void 0)return r!=null;if(r)return Array.isArray(r.lods)?t<r.lods.length:t===0}return!1}static assignMeshLOD(e,t){if(!e)return Promise.resolve(null);if(e instanceof ft||e.isMesh===!0){const i=e.geometry,r=this.getAssignedLODInformation(i);if(!r)return Promise.resolve(null);for(const n of Ar)n.onBeforeGetLODMesh?.(e,t);return e["LOD:requested level"]=t,qe.getOrLoadLOD(i,t).then(n=>{if(Array.isArray(n)){const s=r.index||0;n=n[s]}return e["LOD:requested level"]===t&&(delete e["LOD:requested level"],n&&i!=n&&(n?.isBufferGeometry?e.geometry=n:Oe&&console.error("Invalid LOD geometry",n))),n}).catch(n=>(console.error("Error loading mesh LOD",e,n),null))}else Oe&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",e);return Promise.resolve(null)}static assignTextureLOD(e,t=0){if(!e)return Promise.resolve(null);if(e.isMesh===!0){const i=e;if(Array.isArray(i.material)){const r=new Array;for(const n of i.material){const s=this.assignTextureLOD(n,t);r.push(s)}return Promise.all(r).then(n=>{const s=new Array;for(const o of n)Array.isArray(o)&&s.push(...o);return s})}else return this.assignTextureLOD(i.material,t)}if(e.isMaterial===!0){const i=e,r=[],n=new Array;if(i.uniforms&&(i.isRawShaderMaterial||i.isShaderMaterial===!0)){const s=i;for(const o of Object.keys(s.uniforms)){const l=s.uniforms[o].value;if(l?.isTexture===!0){const c=this.assignTextureLODForSlot(l,t,i,o).then(h=>(h&&s.uniforms[o].value!=h&&(s.uniforms[o].value=h,s.uniformsNeedUpdate=!0),h));r.push(c),n.push(o)}}}else for(const s of Object.keys(i)){const o=i[s];if(o?.isTexture===!0){const l=this.assignTextureLODForSlot(o,t,i,s);r.push(l),n.push(s)}}return Promise.all(r).then(s=>{const o=new Array;for(let l=0;l<s.length;l++){const c=s[l],h=n[l];c&&c.isTexture===!0?o.push({material:i,slot:h,texture:c,level:t}):o.push({material:i,slot:h,texture:null,level:t})}return o})}if(e instanceof Ke||e.isTexture===!0){const i=e;return this.assignTextureLODForSlot(i,t,null,null)}return Promise.resolve(null)}static set maxConcurrentLoadingTasks(e){qe.queue.maxConcurrent=e}static get maxConcurrentLoadingTasks(){return qe.queue.maxConcurrent}static assignTextureLODForSlot(e,t,i,r){return e?.isTexture!==!0?Promise.resolve(null):r==="glyphMap"?Promise.resolve(e):qe.getOrLoadLOD(e,t).then(n=>{if(Array.isArray(n))return console.warn("Progressive: Got an array of textures for a texture slot, this should not happen..."),null;if(n?.isTexture===!0){if(n!=e&&i&&r){const s=i[r];if(s&&!Oe){const o=this.getAssignedLODInformation(s);if(o&&o?.level<t)return Oe==="verbose"&&console.warn("Assigned texture level is already higher: ",o.level,t,i,s,n),n&&n!==s&&((Oe||Sa)&&console.log(`[gltf-progressive] Disposing rejected lower-quality texture LOD ${t} (assigned is ${o.level})`,n.uuid),n.dispose()),null}if(this.trackTextureUsage(n),s&&s!==n&&this.untrackTextureUsage(s)&&(Oe||Sa)){const o=this.getAssignedLODInformation(s);console.log(`[gltf-progressive] Disposed old texture LOD ${o?.level??"?"} \u2192 ${t} for ${i.name||i.type}.${r}`,s.uuid)}i[r]=n}return n}else Oe=="verbose"&&console.warn("No LOD found for",e,t);return null}).catch(n=>(console.error("Error loading LOD",e,n),null))}parser;url;constructor(e){const t=e.options.path;Oe&&console.log("Progressive extension registered for",t),this.parser=e,this.url=t}_isLoadingMesh;loadMesh=e=>{if(this._isLoadingMesh)return null;const t=this.parser.json.meshes[e]?.extensions?.[qi];return t?(this._isLoadingMesh=!0,this.parser.getDependency("mesh",e).then(i=>(this._isLoadingMesh=!1,i&&qe.registerMesh(this.url,t.guid,i,t.lods?.length,0,t),i))):null};afterRoot(e){return Oe&&console.log("AFTER",this.url,e),this.parser.json.textures?.forEach((t,i)=>{if(t?.extensions){const r=t?.extensions[qi];if(r){if(!r.lods){Oe&&console.warn("Texture has no LODs",r);return}let n=!1;for(const s of this.parser.associations.keys())s.isTexture===!0&&this.parser.associations.get(s)?.textures===i&&(n=!0,qe.registerTexture(this.url,s,r.lods?.length,i,r));n||this.parser.getDependency("texture",i).then(s=>{s&&qe.registerTexture(this.url,s,r.lods?.length,i,r)})}}}),this.parser.json.meshes?.forEach((t,i)=>{if(t?.extensions){const r=t?.extensions[qi];if(r&&r.lods){for(const n of this.parser.associations.keys())if(n.isMesh){const s=this.parser.associations.get(n);s?.meshes===i&&qe.registerMesh(this.url,r.guid,n,r.lods.length,s.primitives,r)}}}}),null}static registerTexture=(e,t,i,r,n)=>{if(!t){Oe&&console.error("!! gltf-progressive: Called register texture without texture");return}if(Oe){const o=t.image?.width||t.source?.data?.width||0,l=t.image?.height||t.source?.data?.height||0;console.log(`> gltf-progressive: register texture[${r}] "${t.name||t.uuid}", Current: ${o}x${l}, Max: ${n.lods[0]?.width}x${n.lods[0]?.height}, uuid: ${t.uuid}`,n,t)}t.source&&(t.source[Xl]=n);const s=n.guid;qe.assignLODInformation(e,t,s,i,r),qe.lodInfos.set(s,n),qe.lowresCache.set(s,new WeakRef(t))};static registerMesh=(e,t,i,r,n,s)=>{const o=i.geometry;if(!o){Oe&&console.warn("gltf-progressive: Register mesh without geometry");return}o.userData||(o.userData={}),Oe&&console.log("> Progressive: register mesh "+i.name,{index:n,uuid:i.uuid},s,i),qe.assignLODInformation(e,o,t,r,n),qe.lodInfos.set(t,s);let l=qe.lowresCache.get(t)?.deref();l?l.push(i.geometry):l=[i.geometry],qe.lowresCache.set(t,new WeakRef(l)),r>0&&!ya(i)&&iE(i,o);for(const c of Ar)c.onRegisteredNewMesh?.(i,s)};static dispose(e){if(e){this.lodInfos.delete(e);const t=this.lowresCache.get(e);if(t){const i=t.deref();if(i){if(i.isTexture){const r=i;this.textureRefCounts.delete(r.uuid),r.dispose()}else if(Array.isArray(i))for(const r of i)r.dispose()}this.lowresCache.delete(e)}for(const[i,r]of this.cache)i.includes(e)&&(this._disposeCacheEntry(r),this.cache.delete(i))}else{this.lodInfos.clear();for(const[,t]of this.lowresCache){const i=t.deref();if(i){if(i.isTexture){const r=i;this.textureRefCounts.delete(r.uuid),r.dispose()}else if(Array.isArray(i))for(const r of i)r.dispose()}}this.lowresCache.clear();for(const[,t]of this.cache)this._disposeCacheEntry(t);this.cache.clear(),this.textureRefCounts.clear()}}static _disposeCacheEntry(e){if(e instanceof WeakRef){const t=e.deref();t&&(t.isTexture&&this.textureRefCounts.delete(t.uuid),t.dispose())}else e.then(t=>{if(t)if(Array.isArray(t))for(const i of t)i.dispose();else t.isTexture&&this.textureRefCounts.delete(t.uuid),t.dispose()}).catch(()=>{})}static lodInfos=new Map;static cache=new Map;static lowresCache=new Map;static textureRefCounts=new Map;static _resourceRegistry=new FinalizationRegistry(e=>{const t=qe.cache.get(e);(Oe||Sa)&&console.debug(`[gltf-progressive] Memory: Resource GC'd
4013
+ `);this.workerSourceURL=URL.createObjectURL(new Blob([l])),this.transcoderBinary=s,this.workerPool.setWorkerCreator(()=>{const c=new Worker(this.workerSourceURL),h=this.transcoderBinary.slice(0);return c.postMessage({type:"init",config:this.workerConfig,transcoderBinary:h},[h]),c})}),Fl>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),Fl++}return this.transcoderPending}load(e,t,i,r){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const n=new or(this.manager);n.setPath(this.path),n.setCrossOrigin(this.crossOrigin),n.setWithCredentials(this.withCredentials),n.setRequestHeader(this.requestHeader),n.setResponseType("arraybuffer"),n.load(e,s=>{this.parse(s,t,r)},i,r)}parse(e,t,i){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");if(Pl.has(e))return Pl.get(e).promise.then(t).catch(i);this._createTexture(e).then(r=>t?t(r):null).catch(i)}_createTextureFrom(e,t){const{type:i,error:r,data:{faces:n,width:s,height:o,format:l,type:c,dfdFlags:h}}=e;if(i==="error")return Promise.reject(r);let A;if(t.faceCount===6)A=new Nh(n,l,c);else{const u=n[0].mipmaps;A=t.layerCount>1?new Uh(u,s,o,t.layerCount,l,c):new fa(u,s,o,l,c)}return A.minFilter=n[0].mipmaps.length===1?ct:Jt,A.magFilter=ct,A.generateMipmaps=!1,A.needsUpdate=!0,A.colorSpace=Mu(t),A.premultiplyAlpha=!!(h&L0),A}async _createTexture(e,t={}){const i=k0(new Uint8Array(e)),r=i.vkFormat===Ll&&i.dataFormatDescriptor[0].colorModel===167;if(!(i.vkFormat===P0||r&&!this.workerConfig.astcHDRSupported))return W0(i);const n=t,s=this.init().then(()=>this.workerPool.postMessage({type:"transcode",buffer:e,taskConfig:n},[e])).then(o=>this._createTextureFrom(o.data,i));return Pl.set(e,{promise:s}),s}dispose(){this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),Fl--}}ai.BasisFormat={ETC1S:0,UASTC:1,UASTC_HDR:2},ai.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16,BC6H:22,RGB_HALF:24,RGBA_HALF:25},ai.EngineFormat={RGBAFormat:It,RGBA_ASTC_4x4_Format:Ji,RGB_BPTC_UNSIGNED_Format:Ha,RGBA_BPTC_Format:Ir,RGBA_ETC2_EAC_Format:Kr,RGBA_PVRTC_4BPPV1_Format:vr,RGBA_S3TC_DXT5_Format:jr,RGB_ETC1_Format:Pa,RGB_ETC2_Format:Yr,RGB_PVRTC_4BPPV1_Format:Qa,RGBA_S3TC_DXT1_Format:Ki},ai.EngineType={UnsignedByteType:De,HalfFloatType:Rt,FloatType:Mt},ai.BasisWorker=function(){let a,e,t;const i=_EngineFormat,r=_EngineType,n=_TranscoderFormat,s=_BasisFormat;self.addEventListener("message",function(f){const m=f.data;switch(m.type){case"init":a=m.config,o(m.transcoderBinary);break;case"transcode":e.then(()=>{try{const{faces:g,buffers:p,width:b,height:x,hasAlpha:I,format:y,type:S,dfdFlags:M}=l(m.buffer);self.postMessage({type:"transcode",id:m.id,data:{faces:g,width:b,height:x,hasAlpha:I,format:y,type:S,dfdFlags:M}},p)}catch(g){console.error(g),self.postMessage({type:"error",id:m.id,error:g.message})}});break}});function o(f){e=new Promise(m=>{t={wasmBinary:f,onRuntimeInitialized:m},BASIS(t)}).then(()=>{t.initializeBasis(),t.KTX2File===void 0&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")})}function l(f){const m=new t.KTX2File(new Uint8Array(f));function g(){m.close(),m.delete()}if(!m.isValid())throw g(),new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");let p;if(m.isUASTC())p=s.UASTC;else if(m.isETC1S())p=s.ETC1S;else if(m.isHDR())p=s.UASTC_HDR;else throw new Error("THREE.KTX2Loader: Unknown Basis encoding");const b=m.getWidth(),x=m.getHeight(),I=m.getLayers()||1,y=m.getLevels(),S=m.getFaces(),M=m.getHasAlpha(),R=m.getDFDFlags(),{transcoderFormat:E,engineFormat:C,engineType:B}=A(p,b,x,M);if(!b||!x||!y)throw g(),new Error("THREE.KTX2Loader: Invalid texture");if(!m.startTranscoding())throw g(),new Error("THREE.KTX2Loader: .startTranscoding failed");const P=[],F=[];for(let z=0;z<S;z++){const q=[];for(let G=0;G<y;G++){const H=[];let Y,ie;for(let re=0;re<I;re++){const fe=m.getImageLevelInfo(G,re,z);z===0&&G===0&&re===0&&(fe.origWidth%4!==0||fe.origHeight%4!==0)&&console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),y>1?(Y=fe.origWidth,ie=fe.origHeight):(Y=fe.width,ie=fe.height);let Se=new Uint8Array(m.getImageTranscodedSizeInBytes(G,re,0,E));const et=m.transcodeImage(Se,G,re,z,E,0,-1,-1);if(B===r.HalfFloatType&&(Se=new Uint16Array(Se.buffer,Se.byteOffset,Se.byteLength/Uint16Array.BYTES_PER_ELEMENT)),!et)throw g(),new Error("THREE.KTX2Loader: .transcodeImage failed.");H.push(Se)}const ce=d(H);q.push({data:ce,width:Y,height:ie}),F.push(ce.buffer)}P.push({mipmaps:q,width:b,height:x,format:C,type:B})}return g(),{faces:P,buffers:F,width:b,height:x,hasAlpha:M,dfdFlags:R,format:C,type:B}}const c=[{if:"astcSupported",basisFormat:[s.UASTC],transcoderFormat:[n.ASTC_4x4,n.ASTC_4x4],engineFormat:[i.RGBA_ASTC_4x4_Format,i.RGBA_ASTC_4x4_Format],engineType:[r.UnsignedByteType],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[n.BC7_M5,n.BC7_M5],engineFormat:[i.RGBA_BPTC_Format,i.RGBA_BPTC_Format],engineType:[r.UnsignedByteType],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[n.BC1,n.BC3],engineFormat:[i.RGBA_S3TC_DXT1_Format,i.RGBA_S3TC_DXT5_Format],engineType:[r.UnsignedByteType],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[n.ETC1,n.ETC2],engineFormat:[i.RGB_ETC2_Format,i.RGBA_ETC2_EAC_Format],engineType:[r.UnsignedByteType],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[n.ETC1],engineFormat:[i.RGB_ETC1_Format],engineType:[r.UnsignedByteType],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[n.PVRTC1_4_RGB,n.PVRTC1_4_RGBA],engineFormat:[i.RGB_PVRTC_4BPPV1_Format,i.RGBA_PVRTC_4BPPV1_Format],engineType:[r.UnsignedByteType],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0},{if:"bptcSupported",basisFormat:[s.UASTC_HDR],transcoderFormat:[n.BC6H],engineFormat:[i.RGB_BPTC_UNSIGNED_Format],engineType:[r.HalfFloatType],priorityHDR:1,needsPowerOfTwo:!1},{basisFormat:[s.ETC1S,s.UASTC],transcoderFormat:[n.RGBA32,n.RGBA32],engineFormat:[i.RGBAFormat,i.RGBAFormat],engineType:[r.UnsignedByteType,r.UnsignedByteType],priorityETC1S:100,priorityUASTC:100,needsPowerOfTwo:!1},{basisFormat:[s.UASTC_HDR],transcoderFormat:[n.RGBA_HALF],engineFormat:[i.RGBAFormat],engineType:[r.HalfFloatType],priorityHDR:100,needsPowerOfTwo:!1}],h={[s.ETC1S]:c.filter(f=>f.basisFormat.includes(s.ETC1S)).sort((f,m)=>f.priorityETC1S-m.priorityETC1S),[s.UASTC]:c.filter(f=>f.basisFormat.includes(s.UASTC)).sort((f,m)=>f.priorityUASTC-m.priorityUASTC),[s.UASTC_HDR]:c.filter(f=>f.basisFormat.includes(s.UASTC_HDR)).sort((f,m)=>f.priorityHDR-m.priorityHDR)};function A(f,m,g,p){const b=h[f];for(let x=0;x<b.length;x++){const I=b[x];if(I.if&&!a[I.if]||!I.basisFormat.includes(f)||p&&I.transcoderFormat.length<2||I.needsPowerOfTwo&&!(u(m)&&u(g)))continue;const y=I.transcoderFormat[p?1:0],S=I.engineFormat[p?1:0],M=I.engineType[0];return{transcoderFormat:y,engineFormat:S,engineType:M}}throw new Error("THREE.KTX2Loader: Failed to identify transcoding target.")}function u(f){return f<=2?!0:(f&f-1)===0&&f!==0}function d(f){if(f.length===1)return f[0];let m=0;for(let b=0;b<f.length;b++){const x=f[b];m+=x.byteLength}const g=new Uint8Array(m);let p=0;for(let b=0;b<f.length;b++){const x=f[b];g.set(x,p),p+=x.byteLength}return g}};const V0=new Set([It,qr,Zt,Ni]),kl={[$A]:It,[ZA]:Zt,[JA]:Ni,[KA]:It,[YA]:Zt,[XA]:Ni,[jA]:It,[qA]:It,[WA]:Zt,[VA]:Zt,[zA]:Ni,[HA]:Ni,[tu]:qr,[eu]:qr,[gu]:Kr,[pu]:Yr,[Rl]:Fa,[F0]:Oa,[Dl]:ka,[O0]:Ga,[Ll]:Ji,[mu]:Ji,[fu]:Ji,[Cu]:xr,[Eu]:xr,[_u]:xr,[nu]:Ki,[au]:Ki,[ru]:Er,[iu]:Er,[ou]:br,[su]:br,[cu]:Va,[lu]:za,[Au]:qa,[hu]:Wa,[du]:Ir,[uu]:Ir,[Iu]:vr,[vu]:vr,[xu]:Xr,[bu]:Xr},Ca={[$A]:Mt,[ZA]:Mt,[JA]:Mt,[KA]:Rt,[YA]:Rt,[XA]:Rt,[jA]:De,[qA]:De,[WA]:De,[VA]:De,[zA]:De,[HA]:De,[tu]:Ua,[eu]:Na,[gu]:De,[pu]:De,[Rl]:De,[Rl]:De,[Dl]:De,[Dl]:De,[Ll]:Rt,[mu]:De,[fu]:De,[Cu]:Rt,[Eu]:De,[_u]:De,[nu]:De,[au]:De,[ru]:De,[iu]:De,[ou]:De,[su]:De,[cu]:De,[lu]:De,[Au]:De,[hu]:De,[du]:De,[uu]:De,[Iu]:De,[vu]:De,[xu]:De,[bu]:De};async function W0(a){const{vkFormat:e}=a;if(kl[e]===void 0)throw new Error("THREE.KTX2Loader: Unsupported vkFormat: "+e);Ca[e]===void 0&&console.warn('THREE.KTX2Loader: Missing ".type" for vkFormat: '+e);let t;a.supercompressionScheme===kA&&(Ol||(Ol=new Promise(async s=>{const o=new G0;await o.init(),s(o)})),t=await Ol);const i=[];for(let s=0;s<a.levels.length;s++){const o=Math.max(1,a.pixelWidth>>s),l=Math.max(1,a.pixelHeight>>s),c=a.pixelDepth?Math.max(1,a.pixelDepth>>s):0,h=a.levels[s];let A;if(a.supercompressionScheme===D0)A=h.levelData;else if(a.supercompressionScheme===kA)A=t.decode(h.levelData,h.uncompressedByteLength);else throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");let u;Ca[e]===Mt?u=new Float32Array(A.buffer,A.byteOffset,A.byteLength/Float32Array.BYTES_PER_ELEMENT):Ca[e]===Rt?u=new Uint16Array(A.buffer,A.byteOffset,A.byteLength/Uint16Array.BYTES_PER_ELEMENT):Ca[e]===Ua||Ca[e]===Na?u=new Uint32Array(A.buffer,A.byteOffset,A.byteLength/Uint32Array.BYTES_PER_ELEMENT):u=A,i.push({data:u,width:o,height:l,depth:c})}const r=a.levelCount===0||i.length>1;let n;if(V0.has(kl[e]))n=a.pixelDepth===0?new nn(i[0].data,a.pixelWidth,a.pixelHeight):new Bo(i[0].data,a.pixelWidth,a.pixelHeight,a.pixelDepth),n.minFilter=r?Nn:gt,n.magFilter=gt,n.generateMipmaps=a.levelCount===0;else{if(a.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");n=new fa(i,a.pixelWidth,a.pixelHeight),n.minFilter=r?Jt:ct,n.magFilter=ct}return n.mipmaps=i,n.type=Ca[e],n.format=kl[e],n.colorSpace=Mu(a),n.needsUpdate=!0,Promise.resolve(n)}function Mu(a){const e=a.dataFormatDescriptor[0];return e.colorPrimaries===N0?e.transferFunction===GA?ut:wt:e.colorPrimaries===Q0?e.transferFunction===GA?H0:z0:(e.colorPrimaries===U0||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${e.colorPrimaries}"`),wi)}let vi="https://www.gstatic.com/draco/versioned/decoders/1.5.7/",Or="https://cdn.needle.tools/static/three/0.179.1/basis2/";const q0=vi,j0=Or,wu=new URL(vi+"draco_decoder.js");wu.searchParams.append("range","true"),fetch(wu,{method:"GET",headers:{Range:"bytes=0-1"}}).catch(a=>{console.debug(`Failed to fetch remote Draco decoder from ${vi} (offline: ${typeof navigator<"u"?navigator.onLine:"unknown"})`),vi===q0&&Tu("./include/draco/"),Or===j0&&Bu("./include/ktx2/")}).finally(()=>{Ru()});const X0=()=>({dracoDecoderPath:vi,ktx2TranscoderPath:Or});function Tu(a){vi=a,Xt&&Xt[Hl]!=vi?(console.debug("Updating Draco decoder path to "+a),Xt[Hl]=vi,Xt.setDecoderPath(vi),Xt.preload()):console.debug("Setting Draco decoder path to "+a)}function Bu(a){Or=a,xi&&xi.transcoderPath!=Or?(console.debug("Updating KTX2 transcoder path to "+a),xi.setTranscoderPath(Or),xi.init()):console.debug("Setting KTX2 transcoder path to "+a)}function Ws(a){return Ru(),a?xi.detectSupport(a):a!==null&&console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures might fail"),{dracoLoader:Xt,ktx2Loader:xi,meshoptDecoder:qs}}function Gl(a){a.dracoLoader||a.setDRACOLoader(Xt),a.ktx2Loader||a.setKTX2Loader(xi),a.meshoptDecoder||a.setMeshoptDecoder(qs)}const Hl=Symbol("dracoDecoderPath");let Xt,qs,xi;function Ru(){Xt||(Xt=new T0,Xt[Hl]=vi,Xt.setDecoderPath(vi),Xt.setDecoderConfig({type:"js"}),Xt.preload()),xi||(xi=new ai,xi.setTranscoderPath(Or),xi.init()),qs||(qs=w0)}const zl=new WeakMap;function Vl(a,e){let t=zl.get(a);t?t=Object.assign(t,e):t=e,zl.set(a,t)}const Y0=Cl.prototype.load;function K0(...a){const e=zl.get(this);let t=a[0];const i=new URL(t,window.location.href);if(i.hostname.endsWith("needle.tools")){const r=e?.progressive!==void 0?e.progressive:!0,n=e?.usecase?e.usecase:"default";r?this.requestHeader.Accept=`*/*;progressive=allowed;usecase=${n}`:this.requestHeader.Accept=`*/*;usecase=${n}`,t=i.toString()}return a[0]=t,Y0?.call(this,...a)}Cl.prototype.load=K0,hr("debugprogressive");function hr(a){if(typeof window>"u")return!1;const e=new URL(window.location.href).searchParams.get(a);return e==null||e==="0"||e==="false"?!1:e===""?!0:e}function J0(a,e){if(e===void 0||a===void 0||e.startsWith("./")||e.startsWith("http")||e.startsWith("data:")||e.startsWith("blob:"))return e;const t=a.lastIndexOf("/");if(t>=0){const i=a.substring(0,t+1);for(;i.endsWith("/")&&e.startsWith("/");)e=e.substring(1);return i+e}return e}function Wl(){return js!==void 0||(js=/iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent),hr("debugprogressive")&&console.log("[glTF Progressive]: isMobileDevice",js)),js}let js;function Du(){if(typeof window>"u")return!1;const a=new URL(window.location.href),e=a.hostname==="localhost"||/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(a.hostname);return a.hostname==="127.0.0.1"||e}class Z0{constructor(e,t={}){this.maxConcurrent=e,this.debug=t.debug??!1,window.requestAnimationFrame(this.tick)}_running=new Map;_queue=[];debug=!1;tick=()=>{this.internalUpdate(),setTimeout(this.tick,10)};slot(e){return this.debug&&console.debug(`[PromiseQueue]: Requesting slot for key ${e}, running: ${this._running.size}, waiting: ${this._queue.length}`),new Promise(t=>{this._queue.push({key:e,resolve:t})})}add(e,t){this._running.has(e)||(this._running.set(e,t),t.finally(()=>{this._running.delete(e),this.debug&&console.debug(`[PromiseQueue]: Promise finished now running: ${this._running.size}, waiting: ${this._queue.length}. (finished ${e})`)}),this.debug&&console.debug(`[PromiseQueue]: Added new promise, now running: ${this._running.size}, waiting: ${this._queue.length}. (added ${e})`))}internalUpdate(){const e=this.maxConcurrent-this._running.size;for(let t=0;t<e&&this._queue.length>0;t++){this.debug&&console.debug(`[PromiseQueue]: Running ${this._running.size} promises, waiting for ${this._queue.length} more.`);const{key:i,resolve:r}=this._queue.shift();r({use:n=>this.add(i,n)})}}}function $0(a){const e=a.image?.width??0,t=a.image?.height??0,i=a.image?.depth??1,r=Math.floor(Math.log2(Math.max(e,t,i)))+1,n=eE(a);return e*t*i*n*(1-Math.pow(.25,r))/(1-.25)}function eE(a){let e=4;const t=a.format;t===1024||t===1025?e=1:t===1026||t===1027?e=2:t===1022||t===1029?e=3:(t===1023||t===1033)&&(e=4);let i=1;const r=a.type;return r===1009||r===1010?i=1:r===1011||r===1012?i=2:r===1013||r===1014||r===1015?i=4:r===1016&&(i=2),e*i}const tE=typeof window>"u"&&typeof document>"u",ql=Symbol("needle:raycast-mesh");function ya(a){return a?.[ql]instanceof mt?a[ql]:null}function iE(a,e){if((a.type==="Mesh"||a.type==="SkinnedMesh")&&!ya(a)){const t=aE(e);t.userData={isRaycastMesh:!0},a[ql]=t}}function rE(a=!0){if(a){if(fn)return;const e=fn=ft.prototype.raycast;ft.prototype.raycast=function(t,i){const r=this,n=ya(r);let s;n&&r.isMesh&&(s=r.geometry,r.geometry=n),e.call(this,t,i),s&&(r.geometry=s)}}else{if(!fn)return;ft.prototype.raycast=fn,fn=null}}let fn=null;function aE(a){const e=new mt;for(const t in a.attributes)e.setAttribute(t,a.getAttribute(t));return e.setIndex(a.getIndex()),e}const Ar=new Array,Oe=hr("debugprogressive");let mn,kr=-1;if(Oe){let a=function(){kr+=1,kr>=e&&(kr=-1),console.log(`Toggle LOD level [${kr}]`)},e=6;window.addEventListener("keyup",t=>{t.key==="p"&&a(),t.key==="w"&&(mn=!mn,console.log(`Toggle wireframe [${mn}]`));const i=parseInt(t.key);!isNaN(i)&&i>=0&&(kr=i,console.log(`Set LOD level to [${kr}]`))})}function Lu(a){if(Oe&&mn!==void 0)if(Array.isArray(a))for(const e of a)Lu(e);else a&&"wireframe"in a&&(a.wireframe=mn===!0)}const _n=new Array;let nE=0;const sE=Wl()?2:10;function oE(a){if(_n.length<sE){const t=_n.length;Oe&&console.warn(`[Worker] Creating new worker #${t}`);const i=$l.createWorker(a||{});return _n.push(i),i}const e=nE++%_n.length;return _n[e]}class $l{constructor(e,t){this.worker=e,this._debug=t.debug??!1,e.onmessage=i=>{const r=i.data;switch(this._debug&&console.log("[Worker] EVENT",r),r.type){case"loaded-gltf":for(const n of this._running)if(n.url===r.result.url){lE(r.result),n.resolve(r.result);const s=n.url;s.startsWith("blob:")&&URL.revokeObjectURL(s)}}},e.onerror=i=>{console.error("[Worker] Error in gltf-progressive worker:",i)},e.postMessage({type:"init"})}static async createWorker(e){const t=new Worker(URL.createObjectURL(new Blob([`import '${new URL("./gltf-progressive.worker-CCrD-Ycm.js",import.meta.url).toString()}';`],{type:"text/javascript"})),{type:"module"});return new $l(t,e)}_running=[];_webglRenderer=null;async load(e,t){const i=X0();let r=t?.renderer;r||(this._webglRenderer??=(async()=>{const{WebGLRenderer:o}=await Promise.resolve().then(()=>j_);return new o})(),r=await this._webglRenderer);const n=Ws(r).ktx2Loader.workerConfig;e instanceof URL?e=e.toString():e.startsWith("file:")?e=URL.createObjectURL(new Blob([e])):!e.startsWith("blob:")&&!e.startsWith("http:")&&!e.startsWith("https:")&&(e=new URL(e,window.location.href).toString());const s={type:"load",url:e,dracoDecoderPath:i.dracoDecoderPath,ktx2TranscoderPath:i.ktx2TranscoderPath,ktx2LoaderConfig:n};return this._debug&&console.debug("[Worker] Sending load request",s),this.worker.postMessage(s),new Promise(o=>{this._running.push({url:e.toString(),resolve:o})})}_debug=!1}function lE(a){for(const e of a.geometries){const t=e.geometry,i=new mt;if(i.name=t.name||"",t.index){const r=t.index;i.setIndex(jl(r))}for(const r in t.attributes){const n=t.attributes[r],s=jl(n);i.setAttribute(r,s)}if(t.morphAttributes)for(const r in t.morphAttributes){const n=t.morphAttributes[r].map(s=>jl(s));i.morphAttributes[r]=n}if(i.morphTargetsRelative=t.morphTargetsRelative??!1,i.boundingBox=new Vt,i.boundingBox.min=new N(t.boundingBox?.min.x,t.boundingBox?.min.y,t.boundingBox?.min.z),i.boundingBox.max=new N(t.boundingBox?.max.x,t.boundingBox?.max.y,t.boundingBox?.max.z),i.boundingSphere=new Wt(new N(t.boundingSphere?.center.x,t.boundingSphere?.center.y,t.boundingSphere?.center.z),t.boundingSphere?.radius),t.groups)for(const r of t.groups)i.addGroup(r.start,r.count,r.materialIndex);t.userData&&(i.userData=t.userData),e.geometry=i}for(const e of a.textures){const t=e.texture;let i=null;if(t.isCompressedTexture){const r=t.mipmaps,n=t.image?.width||t.source?.data?.width||-1,s=t.image?.height||t.source?.data?.height||-1;i=new fa(r,n,s,t.format,t.type,t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.anisotropy,t.colorSpace)}else i=new Ke(t.image,t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.colorSpace),i.mipmaps=t.mipmaps,i.channel=t.channel,i.source.data=t.source.data,i.flipY=t.flipY,i.premultiplyAlpha=t.premultiplyAlpha,i.unpackAlignment=t.unpackAlignment,i.matrix=new Ne(...t.matrix.elements);if(!i){console.error("[Worker] Failed to create new texture from received data. Texture is not a CompressedTexture or Texture.");continue}e.texture=i}return a}function jl(a){let e=a;if("isInterleavedBufferAttribute"in a&&a.isInterleavedBufferAttribute){const t=a.data,i=t.array,r=new ys(i,t.stride);e=new wa(r,a.itemSize,i.byteOffset,a.normalized),e.offset=a.offset}else"isBufferAttribute"in a&&a.isBufferAttribute&&(e=new Ct(a.array,a.itemSize,a.normalized),e.usage=a.usage,e.gpuType=a.gpuType,e.updateRanges=a.updateRanges);return e}const cE=hr("gltf-progressive-worker");hr("gltf-progressive-reduce-mipmaps");const Sa=hr("gltf-progressive-gc"),Xl=Symbol("needle-progressive-texture"),qi="NEEDLE_progressive";class qe{get name(){return qi}static getMeshLODExtension(e){const t=this.getAssignedLODInformation(e);return t?.key?this.lodInfos.get(t.key):null}static getPrimitiveIndex(e){return this.getAssignedLODInformation(e)?.index??-1}static getMaterialMinMaxLODsCount(e,t){const i=this,r="LODS:minmax",n=e[r];if(n!=null)return n;if(t||(t={min_count:1/0,max_count:0,lods:[]}),Array.isArray(e)){for(const o of e)this.getMaterialMinMaxLODsCount(o,t);return e[r]=t,t}if(Oe==="verbose"&&console.log("getMaterialMinMaxLODsCount",e),e.type==="ShaderMaterial"||e.type==="RawShaderMaterial"){const o=e;for(const l of Object.keys(o.uniforms)){const c=o.uniforms[l].value;c?.isTexture===!0&&s(c,t)}}else if(e.isMaterial)for(const o of Object.keys(e)){const l=e[o];l?.isTexture===!0&&s(l,t)}else Oe&&console.warn(`[getMaterialMinMaxLODsCount] Unsupported material type: ${e.type}`);return e[r]=t,t;function s(o,l){const c=i.getAssignedLODInformation(o);if(c){const h=i.lodInfos.get(c.key);if(h&&h.lods){l.min_count=Math.min(l.min_count,h.lods.length),l.max_count=Math.max(l.max_count,h.lods.length);for(let A=0;A<h.lods.length;A++){const u=h.lods[A];u.width&&(l.lods[A]=l.lods[A]||{min_height:1/0,max_height:0},l.lods[A].min_height=Math.min(l.lods[A].min_height,u.height),l.lods[A].max_height=Math.max(l.lods[A].max_height,u.height))}}}}}static hasLODLevelAvailable(e,t){if(Array.isArray(e)){for(const n of e)if(this.hasLODLevelAvailable(n,t))return!0;return!1}if(e.isMaterial===!0){for(const n of Object.keys(e)){const s=e[n];if(s&&s.isTexture&&this.hasLODLevelAvailable(s,t))return!0}return!1}else if(e.isGroup===!0){for(const n of e.children)if(n.isMesh===!0&&this.hasLODLevelAvailable(n,t))return!0}let i,r;if(e.isMesh?i=e.geometry:(e.isBufferGeometry||e.isTexture)&&(i=e),i&&i?.userData?.LODS){const n=i.userData.LODS;if(r=this.lodInfos.get(n.key),t===void 0)return r!=null;if(r)return Array.isArray(r.lods)?t<r.lods.length:t===0}return!1}static assignMeshLOD(e,t){if(!e)return Promise.resolve(null);if(e instanceof ft||e.isMesh===!0){const i=e.geometry,r=this.getAssignedLODInformation(i);if(!r)return Promise.resolve(null);for(const n of Ar)n.onBeforeGetLODMesh?.(e,t);return e["LOD:requested level"]=t,qe.getOrLoadLOD(i,t).then(n=>{if(Array.isArray(n)){const s=r.index||0;n=n[s]}return e["LOD:requested level"]===t&&(delete e["LOD:requested level"],n&&i!=n&&(n?.isBufferGeometry?e.geometry=n:Oe&&console.error("Invalid LOD geometry",n))),n}).catch(n=>(console.error("Error loading mesh LOD",e,n),null))}else Oe&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",e);return Promise.resolve(null)}static assignTextureLOD(e,t=0){if(!e)return Promise.resolve(null);if(e.isMesh===!0){const i=e;if(Array.isArray(i.material)){const r=new Array;for(const n of i.material){const s=this.assignTextureLOD(n,t);r.push(s)}return Promise.all(r).then(n=>{const s=new Array;for(const o of n)Array.isArray(o)&&s.push(...o);return s})}else return this.assignTextureLOD(i.material,t)}if(e.isMaterial===!0){const i=e,r=[],n=new Array;if(i.uniforms&&(i.isRawShaderMaterial||i.isShaderMaterial===!0)){const s=i;for(const o of Object.keys(s.uniforms)){const l=s.uniforms[o].value;if(l?.isTexture===!0){const c=this.assignTextureLODForSlot(l,t,i,o).then(h=>(h&&s.uniforms[o].value!=h&&(s.uniforms[o].value=h,s.uniformsNeedUpdate=!0),h));r.push(c),n.push(o)}}}else for(const s of Object.keys(i)){const o=i[s];if(o?.isTexture===!0){const l=this.assignTextureLODForSlot(o,t,i,s);r.push(l),n.push(s)}}return Promise.all(r).then(s=>{const o=new Array;for(let l=0;l<s.length;l++){const c=s[l],h=n[l];c&&c.isTexture===!0?o.push({material:i,slot:h,texture:c,level:t}):o.push({material:i,slot:h,texture:null,level:t})}return o})}if(e instanceof Ke||e.isTexture===!0){const i=e;return this.assignTextureLODForSlot(i,t,null,null)}return Promise.resolve(null)}static set maxConcurrentLoadingTasks(e){qe.queue.maxConcurrent=e}static get maxConcurrentLoadingTasks(){return qe.queue.maxConcurrent}static assignTextureLODForSlot(e,t,i,r){return e?.isTexture!==!0?Promise.resolve(null):r==="glyphMap"?Promise.resolve(e):qe.getOrLoadLOD(e,t).then(n=>{if(Array.isArray(n))return console.warn("Progressive: Got an array of textures for a texture slot, this should not happen..."),null;if(n?.isTexture===!0){if(n!=e&&i&&r){const s=i[r];if(s&&!Oe){const o=this.getAssignedLODInformation(s);if(o&&o?.level<t)return Oe==="verbose"&&console.warn("Assigned texture level is already higher: ",o.level,t,i,s,n),n&&n!==s&&((Oe||Sa)&&console.log(`[gltf-progressive] Disposing rejected lower-quality texture LOD ${t} (assigned is ${o.level})`,n.uuid),n.dispose()),null}if(this.trackTextureUsage(n),s&&s!==n&&this.untrackTextureUsage(s)&&(Oe||Sa)){const o=this.getAssignedLODInformation(s);console.log(`[gltf-progressive] Disposed old texture LOD ${o?.level??"?"} \u2192 ${t} for ${i.name||i.type}.${r}`,s.uuid)}i[r]=n}return n}else Oe=="verbose"&&console.warn("No LOD found for",e,t);return null}).catch(n=>(console.error("Error loading LOD",e,n),null))}parser;url;constructor(e){const t=e.options.path;Oe&&console.log("Progressive extension registered for",t),this.parser=e,this.url=t}_isLoadingMesh;loadMesh=e=>{if(this._isLoadingMesh)return null;const t=this.parser.json.meshes[e]?.extensions?.[qi];return t?(this._isLoadingMesh=!0,this.parser.getDependency("mesh",e).then(i=>(this._isLoadingMesh=!1,i&&qe.registerMesh(this.url,t.guid,i,t.lods?.length,0,t),i))):null};afterRoot(e){return Oe&&console.log("AFTER",this.url,e),this.parser.json.textures?.forEach((t,i)=>{if(t?.extensions){const r=t?.extensions[qi];if(r){if(!r.lods){Oe&&console.warn("Texture has no LODs",r);return}let n=!1;for(const s of this.parser.associations.keys())s.isTexture===!0&&this.parser.associations.get(s)?.textures===i&&(n=!0,qe.registerTexture(this.url,s,r.lods?.length,i,r));n||this.parser.getDependency("texture",i).then(s=>{s&&qe.registerTexture(this.url,s,r.lods?.length,i,r)})}}}),this.parser.json.meshes?.forEach((t,i)=>{if(t?.extensions){const r=t?.extensions[qi];if(r&&r.lods){for(const n of this.parser.associations.keys())if(n.isMesh){const s=this.parser.associations.get(n);s?.meshes===i&&qe.registerMesh(this.url,r.guid,n,r.lods.length,s.primitives,r)}}}}),null}static registerTexture=(e,t,i,r,n)=>{if(!t){Oe&&console.error("!! gltf-progressive: Called register texture without texture");return}if(Oe){const o=t.image?.width||t.source?.data?.width||0,l=t.image?.height||t.source?.data?.height||0;console.log(`> gltf-progressive: register texture[${r}] "${t.name||t.uuid}", Current: ${o}x${l}, Max: ${n.lods[0]?.width}x${n.lods[0]?.height}, uuid: ${t.uuid}`,n,t)}t.source&&(t.source[Xl]=n);const s=n.guid;qe.assignLODInformation(e,t,s,i,r),qe.lodInfos.set(s,n),qe.lowresCache.set(s,new WeakRef(t))};static registerMesh=(e,t,i,r,n,s)=>{const o=i.geometry;if(!o){Oe&&console.warn("gltf-progressive: Register mesh without geometry");return}o.userData||(o.userData={}),Oe&&console.log("> Progressive: register mesh "+i.name,{index:n,uuid:i.uuid},s,i),qe.assignLODInformation(e,o,t,r,n),qe.lodInfos.set(t,s);let l=qe.lowresCache.get(t)?.deref();l?l.push(i.geometry):l=[i.geometry],qe.lowresCache.set(t,new WeakRef(l)),r>0&&!ya(i)&&iE(i,o);for(const c of Ar)c.onRegisteredNewMesh?.(i,s)};static dispose(e){if(e){this.lodInfos.delete(e);const t=this.lowresCache.get(e);if(t){const i=t.deref();if(i){if(i.isTexture){const r=i;this.textureRefCounts.delete(r.uuid),r.dispose()}else if(Array.isArray(i))for(const r of i)r.dispose()}this.lowresCache.delete(e)}for(const[i,r]of this.cache)i.includes(e)&&(this._disposeCacheEntry(r),this.cache.delete(i))}else{this.lodInfos.clear();for(const[,t]of this.lowresCache){const i=t.deref();if(i){if(i.isTexture){const r=i;this.textureRefCounts.delete(r.uuid),r.dispose()}else if(Array.isArray(i))for(const r of i)r.dispose()}}this.lowresCache.clear();for(const[,t]of this.cache)this._disposeCacheEntry(t);this.cache.clear(),this.textureRefCounts.clear()}}static _disposeCacheEntry(e){if(e instanceof WeakRef){const t=e.deref();t&&(t.isTexture&&this.textureRefCounts.delete(t.uuid),t.dispose())}else e.then(t=>{if(t)if(Array.isArray(t))for(const i of t)i.dispose();else t.isTexture&&this.textureRefCounts.delete(t.uuid),t.dispose()}).catch(()=>{})}static lodInfos=new Map;static cache=new Map;static lowresCache=new Map;static textureRefCounts=new Map;static _resourceRegistry=new FinalizationRegistry(e=>{const t=qe.cache.get(e);(Oe||Sa)&&console.debug(`[gltf-progressive] Memory: Resource GC'd
4014
4014
  ${e}`),t instanceof WeakRef&&(t.deref()||(qe.cache.delete(e),(Oe||Sa)&&console.log("[gltf-progressive] \u21AA Cache entry deleted (GC)")))});static trackTextureUsage(e){const t=e.uuid,i=this.textureRefCounts.get(t)||0;this.textureRefCounts.set(t,i+1),Oe==="verbose"&&console.log(`[gltf-progressive] Track texture ${t}, refCount: ${i} \u2192 ${i+1}`)}static untrackTextureUsage(e){const t=e.uuid,i=this.textureRefCounts.get(t);if(!i)return(Oe==="verbose"||Sa)&&n("[gltf-progressive] Memory: Untrack untracked texture (dispose immediately)",0),e.dispose(),!0;const r=i-1;if(r<=0)return this.textureRefCounts.delete(t),(Oe||Sa)&&n("[gltf-progressive] Memory: Dispose texture",r),e.dispose(),!0;return this.textureRefCounts.set(t,r),Oe==="verbose"&&n("[gltf-progressive] Memory: Untrack texture",r),!1;function n(s,o){let l=e.image?.width||e.source?.data?.width||0,c=e.image?.height||e.source?.data?.height||0;const h=l&&c?`${l}x${c}`:"N/A";let A="N/A";l&&c&&(A=`~${($0(e)/(1024*1024)).toFixed(2)} MB`),console.log(`${s} \u2014 ${e.name} ${h} (${A}), refCount: ${i} \u2192 ${o}
4015
4015
  ${t}`)}}static workers=[];static _workersIndex=0;static async getOrLoadLOD(e,t){const i=Oe=="verbose",r=this.getAssignedLODInformation(e);if(!r)return Oe&&console.warn(`[gltf-progressive] No LOD information found: ${e.name}, uuid: ${e.uuid}, type: ${e.type}`,e),null;const n=r?.key;let s;if(e.isTexture===!0){const o=e;o.source&&o.source[Xl]&&(s=o.source[Xl])}if(s||(s=qe.lodInfos.get(n)),!s)Oe&&console.warn(`Can not load LOD ${t}: no LOD info found for "${n}" ${e.name}`,e.type,qe.lodInfos);else{if(t>0){let c=!1;const h=Array.isArray(s.lods);if(h&&t>=s.lods.length?c=!0:h||(c=!0),c){const A=this.lowresCache.get(n);if(A){const u=A.deref();if(u)return u;this.lowresCache.delete(n),Oe&&console.log(`[gltf-progressive] Lowres cache entry was GC'd: ${n}`)}return null}}const o=Array.isArray(s.lods)?s.lods[t]?.path:s.lods;if(!o)return Oe&&!s["missing:uri"]&&(s["missing:uri"]=!0,console.warn("Missing uri for progressive asset for LOD "+t,s)),null;const l=J0(r.url,o);if(l.endsWith(".glb")||l.endsWith(".gltf")){if(!s.guid)return console.warn("missing pointer for glb/gltf texture",s),null;const c=l+"_"+s.guid,h=await this.queue.slot(l),A=this.cache.get(c);if(A!==void 0)if(i&&console.log(`LOD ${t} was already loading/loaded: ${c}`),A instanceof WeakRef){const m=A.deref();if(m){let g=m,p=!1;if(g instanceof Ke&&e instanceof Ke?g.image?.data||g.source?.data?g=this.copySettings(e,g):p=!0:g instanceof mt&&e instanceof mt&&(g.attributes.position?.array||(p=!0)),!p)return g}this.cache.delete(c),Oe&&console.log(`[gltf-progressive] Re-loading GC'd/disposed resource: ${c}`)}else{let m=await A.catch(p=>(console.error(`Error loading LOD ${t} from ${l}
4016
4016
  `,p),null)),g=!1;if(m==null||(m instanceof Ke&&e instanceof Ke?m.image?.data||m.source?.data?m=this.copySettings(e,m):(g=!0,this.cache.delete(c)):m instanceof mt&&e instanceof mt&&(m.attributes.position?.array||(g=!0,this.cache.delete(c)))),!g)return m}if(!h.use)return Oe&&console.log(`LOD ${t} was aborted: ${l}`),null;const u=s,d=new Promise(async(m,g)=>{if(cE){const S=await(await oE({})).load(l);if(S.textures.length>0)for(const M of S.textures){let R=M.texture;return qe.assignLODInformation(r.url,R,n,t,void 0),e instanceof Ke&&(R=this.copySettings(e,R)),R&&(R.guid=u.guid),m(R)}if(S.geometries.length>0){const M=new Array;for(const R of S.geometries){const E=R.geometry;qe.assignLODInformation(r.url,E,n,t,R.primitiveIndex),M.push(E)}return m(M)}return m(null)}const p=new Cl;Gl(p),Oe&&(await new Promise(S=>setTimeout(S,1e3)),i&&console.warn("Start loading (delayed) "+l,u.guid));let b=l;if(u&&Array.isArray(u.lods)){const S=u.lods[t];S.hash&&(b+="?v="+S.hash)}const x=await p.loadAsync(b).catch(S=>(console.error(`Error loading LOD ${t} from ${l}