@polygon-streaming/web-player-threejs 2.4.6 → 2.7.3
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.
- package/README.md +10 -26
- package/dist/polygon-streaming.es.js +7558 -5733
- package/dist/polygon-streaming.umd.js +37 -2
- package/dist/service-worker.js +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,37 @@
|
|
|
1
|
-
(function(ne,g){typeof exports=="object"&&typeof module<"u"?g(exports,require("three")):typeof define=="function"&&define.amd?define(["exports","three"],g):(ne=typeof globalThis<"u"?globalThis:ne||self,g(ne["polygon-streaming"]={},ne.THREE))})(this,function(ne,g){"use strict";var od=Object.defineProperty;var ld=(ne,g,Oe)=>g in ne?od(ne,g,{enumerable:!0,configurable:!0,writable:!0,value:Oe}):ne[g]=Oe;var d=(ne,g,Oe)=>ld(ne,typeof g!="symbol"?g+"":g,Oe);var mn,In,Gn,bn,fn,yn,Xn,Bn,xn,Qn,Ln,En,Rn,Sn,Mn,Zn,wn,Wn;function Oe(i){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(i){for(const e in i)if(e!=="default"){const s=Object.getOwnPropertyDescriptor(i,e);Object.defineProperty(t,e,s.get?s:{enumerable:!0,get:()=>i[e]})}}return t.default=i,Object.freeze(t)}const L=Oe(g);var Ke=(i=>(i.Mesh="mesh",i.BoundingBox="boundingBox",i))(Ke||{}),Ai=(i=>(i.BoundingBoxCenter="boundingBoxCenter",i.BoundingBox="boundingBox",i))(Ai||{}),Re=(i=>(i.NonPlayer="nonPlayer",i.Player="player",i))(Re||{}),As=(i=>(i[i.Custom=0]="Custom",i[i.PlayCanvas=1]="PlayCanvas",i[i.ThreeJs=2]="ThreeJs",i[i.BabylonJs=3]="BabylonJs",i))(As||{}),Ne=(i=>(i[i.Refine=0]="Refine",i[i.Simplify=1]="Simplify",i[i.SwapLod=2]="SwapLod",i))(Ne||{}),je=(i=>(i[i.Opaque=0]="Opaque",i[i.Transparent=1]="Transparent",i[i.Cutoff=2]="Cutoff",i))(je||{}),ns=(i=>(i[i.Quality=0]="Quality",i[i.DistanceToCamera=1]="DistanceToCamera",i))(ns||{}),ni=(i=>(i[i.Development=0]="Development",i[i.DevRemote=1]="DevRemote",i[i.Staging=2]="Staging",i[i.Production=3]="Production",i[i.Viewer=4]="Viewer",i[i.Viverse=5]="Viverse",i[i.Public=6]="Public",i[i.Core=7]="Core",i))(ni||{});function Tn(i,t){return i.replace(/\$\(([^()]*)\)/g,(e,s)=>{const A=t[s];return A!==void 0?A:e})}function kn(i,t){return new URL(i,t).href}function Kn(i){return i.endsWith("/")?i:`${i}/`}function as(i){return i.endsWith("/")?i.substring(0,i.length-1):i}function Nn(i,t,e){return Math.max(Math.min(i,e),t)}function pe(i,t){return Math.abs(i-t)<=Number.EPSILON}function zn(i,t,e){return i>=t&&e<=t||e>=t&&i<=t?t:t>=i&&e<=i||e>=i&&t<=i?i:e}const qe={DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,clamp(i,t,e){return i>=e?e:i<=t?t:i},intToBytes24(i){const t=i>>16&255,e=i>>8&255,s=i&255;return[t,e,s]},intToBytes32(i){const t=i>>24&255,e=i>>16&255,s=i>>8&255,A=i&255;return[t,e,s,A]},bytesToInt24(i,t,e){return i.length&&(e=i[2],t=i[1],i=i[0]),i<<16|t<<8|e},bytesToInt32(i,t,e,s){return i.length&&(s=i[3],e=i[2],t=i[1],i=i[0]),(i<<24|t<<16|e<<8|s)>>>0},lerp(i,t,e){return i+(t-i)*qe.clamp(e,0,1)},lerpAngle(i,t,e){return t-i>180&&(t-=360),t-i<-180&&(t+=360),qe.lerp(i,t,qe.clamp(e,0,1))},powerOfTwo(i){return i!==0&&!(i&i-1)},nextPowerOfTwo(i){return i--,i|=i>>1,i|=i>>2,i|=i>>4,i|=i>>8,i|=i>>16,i++,i},nearestPowerOfTwo(i){return Math.pow(2,Math.round(Math.log(i)/Math.log(2)))},random(i,t){const e=t-i;return Math.random()*e+i},smoothstep(i,t,e){return e<=i?0:e>=t?1:(e=(e-i)/(t-i),e*e*(3-2*e))},smootherstep(i,t,e){return e<=i?0:e>=t?1:(e=(e-i)/(t-i),e*e*e*(e*(e*6-15)+10))},roundUp(i,t){return t===0?i:Math.ceil(i/t)*t},between(i,t,e,s){const A=Math.min(t,e),n=Math.max(t,e);return s?i>=A&&i<=n:i>A&&i<n}};var ye;class Ce{constructor(t=0,e=0,s=0){this.x=void 0,this.y=void 0,this.z=void 0,t.length===3?(this.x=t[0],this.y=t[1],this.z=t[2]):(this.x=t,this.y=e,this.z=s)}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}add2(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addScaled(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}clone(){const t=this.constructor;return new t(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}cross(t,e){const s=t.x,A=t.y,n=t.z,a=e.x,o=e.y,r=e.z;return this.x=A*r-o*n,this.y=n*a-r*s,this.z=s*o-a*A,this}distance(t){const e=this.x-t.x,s=this.y-t.y,A=this.z-t.z;return Math.sqrt(e*e+s*s+A*A)}div(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}div2(t,e){return this.x=t.x/e.x,this.y=t.y/e.y,this.z=t.z/e.z,this}divScalar(t){return this.x/=t,this.y/=t,this.z/=t,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}equals(t){return this.x===t.x&&this.y===t.y&&this.z===t.z}equalsApprox(t,e=1e-6){return Math.abs(this.x-t.x)<e&&Math.abs(this.y-t.y)<e&&Math.abs(this.z-t.z)<e}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}lerp(t,e,s){return this.x=t.x+s*(e.x-t.x),this.y=t.y+s*(e.y-t.y),this.z=t.z+s*(e.z-t.z),this}mul(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}mul2(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}mulScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}normalize(t=this){const e=t.x*t.x+t.y*t.y+t.z*t.z;if(e>0){const s=1/Math.sqrt(e);this.x=t.x*s,this.y=t.y*s,this.z=t.z*s}return this}floor(t=this){return this.x=Math.floor(t.x),this.y=Math.floor(t.y),this.z=Math.floor(t.z),this}ceil(t=this){return this.x=Math.ceil(t.x),this.y=Math.ceil(t.y),this.z=Math.ceil(t.z),this}round(t=this){return this.x=Math.round(t.x),this.y=Math.round(t.y),this.z=Math.round(t.z),this}min(t){return t.x<this.x&&(this.x=t.x),t.y<this.y&&(this.y=t.y),t.z<this.z&&(this.z=t.z),this}max(t){return t.x>this.x&&(this.x=t.x),t.y>this.y&&(this.y=t.y),t.z>this.z&&(this.z=t.z),this}project(t){const e=this.x*t.x+this.y*t.y+this.z*t.z,s=t.x*t.x+t.y*t.y+t.z*t.z,A=e/s;return this.x=t.x*A,this.y=t.y*A,this.z=t.z*A,this}set(t,e,s){return this.x=t,this.y=e,this.z=s,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}sub2(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}toString(){return`[${this.x}, ${this.y}, ${this.z}]`}}ye=Ce,Ce.ZERO=Object.freeze(new ye(0,0,0)),Ce.ONE=Object.freeze(new ye(1,1,1)),Ce.UP=Object.freeze(new ye(0,1,0)),Ce.DOWN=Object.freeze(new ye(0,-1,0)),Ce.RIGHT=Object.freeze(new ye(1,0,0)),Ce.LEFT=Object.freeze(new ye(-1,0,0)),Ce.FORWARD=Object.freeze(new ye(0,0,-1)),Ce.BACK=Object.freeze(new ye(0,0,1));var ze;class Se{constructor(t=0,e=0){this.x=void 0,this.y=void 0,t.length===2?(this.x=t[0],this.y=t[1]):(this.x=t,this.y=e)}add(t){return this.x+=t.x,this.y+=t.y,this}add2(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addScaled(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}clone(){const t=this.constructor;return new t(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}cross(t){return this.x*t.y-this.y*t.x}distance(t){const e=this.x-t.x,s=this.y-t.y;return Math.sqrt(e*e+s*s)}div(t){return this.x/=t.x,this.y/=t.y,this}div2(t,e){return this.x=t.x/e.x,this.y=t.y/e.y,this}divScalar(t){return this.x/=t,this.y/=t,this}dot(t){return this.x*t.x+this.y*t.y}equals(t){return this.x===t.x&&this.y===t.y}equalsApprox(t,e=1e-6){return Math.abs(this.x-t.x)<e&&Math.abs(this.y-t.y)<e}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}lengthSq(){return this.x*this.x+this.y*this.y}lerp(t,e,s){return this.x=t.x+s*(e.x-t.x),this.y=t.y+s*(e.y-t.y),this}mul(t){return this.x*=t.x,this.y*=t.y,this}mul2(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this}mulScalar(t){return this.x*=t,this.y*=t,this}normalize(t=this){const e=t.x*t.x+t.y*t.y;if(e>0){const s=1/Math.sqrt(e);this.x=t.x*s,this.y=t.y*s}return this}rotate(t){const e=Math.atan2(this.x,this.y)+t*qe.DEG_TO_RAD,s=Math.sqrt(this.x*this.x+this.y*this.y);return this.x=Math.sin(e)*s,this.y=Math.cos(e)*s,this}angle(){return Math.atan2(this.x,this.y)*qe.RAD_TO_DEG}angleTo(t){return Math.atan2(this.x*t.y+this.y*t.x,this.x*t.x+this.y*t.y)*qe.RAD_TO_DEG}floor(t=this){return this.x=Math.floor(t.x),this.y=Math.floor(t.y),this}ceil(t=this){return this.x=Math.ceil(t.x),this.y=Math.ceil(t.y),this}round(t=this){return this.x=Math.round(t.x),this.y=Math.round(t.y),this}min(t){return t.x<this.x&&(this.x=t.x),t.y<this.y&&(this.y=t.y),this}max(t){return t.x>this.x&&(this.x=t.x),t.y>this.y&&(this.y=t.y),this}set(t,e){return this.x=t,this.y=e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}sub2(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}subScalar(t){return this.x-=t,this.y-=t,this}toString(){return`[${this.x}, ${this.y}]`}static angleRad(t,e){return Math.atan2(t.x*e.y-t.y*e.x,t.x*e.x+t.y*e.y)}}ze=Se,Se.ZERO=Object.freeze(new ze(0,0)),Se.ONE=Object.freeze(new ze(1,1)),Se.UP=Object.freeze(new ze(0,1)),Se.DOWN=Object.freeze(new ze(0,-1)),Se.RIGHT=Object.freeze(new ze(1,0)),Se.LEFT=Object.freeze(new ze(-1,0));class Y{constructor(t=0,e=0,s=0){d(this,"x");d(this,"y");d(this,"z");typeof t=="number"?(this.x=t,this.y=e,this.z=s):(this.x=t.x,this.y=t.y,this.z=t.z)}static fromArray(t){return t==null?null:new Y(t[0],t[1],t[2])}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}static add(t,e){return new Y(t.x+e.x,t.y+e.y,t.z+e.z)}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}static sub(t,e){return new Y(t.x-e.x,t.y-e.y,t.z-e.z)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}static subScalar(t,e){return new Y(t.x-e,t.y-e,t.z-e)}mul(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}static mul(t,e){return new Y(t.x*e.x,t.y*e.y,t.z*e.z)}mulScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}static mulScalar(t,e){return new Y(t.x*e,t.y*e,t.z*e)}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}static dot(t,e){return t.x*e.x+t.y*e.y+t.z*e.z}cross(t){return this.x=this.y*t.z-t.y*this.z,this.y=this.z*t.x-t.z*this.x,this.z=this.x*t.y-t.x*this.y,this}static cross(t,e){return new Y(t.y*e.z-e.y*t.z,t.z*e.x-e.z*t.x,t.x*e.y-e.x*t.y)}div(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}static div(t,e){return new Y(t.x/e.x,t.y/e.y,t.z/e.z)}divScalar(t){return this.x/=t,this.y/=t,this.z/=t,this}static divScalar(t,e){return new Y(t.x/e,t.y/e,t.z/e)}normalize(){const t=this.lengthSq();if(t>0){const e=1/Math.sqrt(t);this.x*=e,this.y*=e,this.z*=e}return this}static normalize(t){const e=t.x*t.x+t.y*t.y+t.z*t.z;if(e>0){const s=1/Math.sqrt(e);t.x*=s,t.y*=s,t.z*=s}return t}lerp(t,e,s){return this.x=t.x+s*(e.x-t.x),this.y=t.y+s*(e.y-t.y),this.z=t.z+s*(e.z-t.z),this}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}static length(t){return Math.sqrt(t.x*t.x+t.y*t.y+t.z*t.z)}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}static lengthSq(t){return t.x*t.x+t.y*t.y+t.z*t.z}distance(t){const e=this.x-t.x,s=this.y-t.y,A=this.z-t.z;return Math.sqrt(e*e+s*s+A*A)}static distance(t,e){const s=t.x-e.x,A=t.y-e.y,n=t.z-e.z;return Math.sqrt(s*s+A*A+n*n)}distanceSq(t){const e=this.x-t.x,s=this.y-t.y,A=this.z-t.z;return e*e+s*s+A*A}static distanceSq(t,e){const s=t.x-e.x,A=t.y-e.y,n=t.z-e.z;return s*s+A*A+n*n}clone(){return new Y(this.x,this.y,this.z)}static clone(t){return new Y(t.x,t.y,t.z)}set(t,e,s){return this.x=t,this.y=e,this.z=s,this}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}equals(t,e=!1){return e?pe(this.x,t.x)&&pe(this.y,t.y)&&pe(this.z,t.z):this.x===t.x&&this.y===t.y&&this.z===t.z}static equals(t,e,s=!1){return s?pe(t.x,e.x)&&pe(t.y,e.y)&&pe(t.z,e.z):t.x===e.x&&t.y===e.y&&t.z===e.z}toString(){return`${this.x}, ${this.y}, ${this.z}`}static toString(t){return`${t.x}, ${t.y}, ${t.z}`}toPlayCanvasVector(t=new Ce){return t.set(this.x,this.y,this.z),t}}const Fn=4*1024*1024,Hn=250,Yn=3,Un=1e3,Dn=100,Jn=0,vn=256*1024,_n=1,os=.5,Pn="initially-reached-target-tree";function On(i,t){return t[Object.keys(t)[Object.values(t).indexOf(i)]]}const $=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function jn(){const i=Math.random()*4294967295|0,t=Math.random()*4294967295|0,e=Math.random()*4294967295|0,s=Math.random()*4294967295|0;return($[i&255]+$[i>>8&255]+$[i>>16&255]+$[i>>24&255]+"-"+$[t&255]+$[t>>8&255]+"-"+$[t>>16&15|64]+$[t>>24&255]+"-"+$[e&63|128]+$[e>>8&255]+"-"+$[e>>16&255]+$[e>>24&255]+$[s&255]+$[s>>8&255]+$[s>>16&255]+$[s>>24&255]).toLowerCase()}function qn(i,t,e,s){const A=i.getCameraFov(s)/2*Math.PI/180,n=i.getPosition(s),a=e.clone().sub(n).length();return t>a?null:1/Math.tan(A)*t/Math.sqrt(Math.pow(a,2)-Math.pow(t,2))*.5}function $n(){"serviceWorker"in navigator&&navigator.serviceWorker.register("/service-worker.js").then(i=>{console.log("Polygon Streaming service worker registration successful with scope: ",i.scope)},i=>{console.error(`Unable to register Polygon Streaming service worker: ${i}`)})}function wt(i,t){return i<<t|i>>>32-t}function _(i,t){const e=i&2147483648,s=t&2147483648,A=i&1073741824,n=t&1073741824,a=(i&1073741823)+(t&1073741823);return A&n?a^2147483648^e^s:A|n?a&1073741824?a^3221225472^e^s:a^1073741824^e^s:a^e^s}function ea(i){let t=[],e,s,A,n,a,o,r,l,c;i=i.toString();function Z(W){let N;const z=W.length,J=((z+8-(z+8)%64)/64+1)*16,U=new Array(J-1);let ie=0,O=0;for(;O<z;)N=(O-O%4)/4,ie=O%4*8,U[N]=U[N]|W.charCodeAt(O)<<ie,O++;return N=(O-O%4)/4,ie=O%4*8,U[N]=U[N]|128<<ie,U[J-2]=z<<3,U[J-1]=z>>>29,U}t=Z(i);function K(W,N,z,J,U,ie,O){return W=_(W,_(_(N&z|~N&J,U),O)),_(wt(W,ie),N)}function F(W,N,z,J,U,ie,O){return W=_(W,_(_(N&J|z&~J,U),O)),_(wt(W,ie),N)}function H(W,N,z,J,U,ie,O){return W=_(W,_(_(N^z^J,U),O)),_(wt(W,ie),N)}function T(W,N,z,J,U,ie,O){return W=_(W,_(_(z^(N|~J),U),O)),_(wt(W,ie),N)}for(o=1732584193,r=4023233417,l=2562383102,c=271733878,e=0;e<t.length;e+=16)s=o,A=r,n=l,a=c,o=K(o,r,l,c,t[e+0],7,3614090360),c=K(c,o,r,l,t[e+1],12,3905402710),l=K(l,c,o,r,t[e+2],17,606105819),r=K(r,l,c,o,t[e+3],22,3250441966),o=K(o,r,l,c,t[e+4],7,4118548399),c=K(c,o,r,l,t[e+5],12,1200080426),l=K(l,c,o,r,t[e+6],17,2821735955),r=K(r,l,c,o,t[e+7],22,4249261313),o=K(o,r,l,c,t[e+8],7,1770035416),c=K(c,o,r,l,t[e+9],12,2336552879),l=K(l,c,o,r,t[e+10],17,4294925233),r=K(r,l,c,o,t[e+11],22,2304563134),o=K(o,r,l,c,t[e+12],7,1804603682),c=K(c,o,r,l,t[e+13],12,4254626195),l=K(l,c,o,r,t[e+14],17,2792965006),r=K(r,l,c,o,t[e+15],22,1236535329),o=F(o,r,l,c,t[e+1],5,4129170786),c=F(c,o,r,l,t[e+6],9,3225465664),l=F(l,c,o,r,t[e+11],14,643717713),r=F(r,l,c,o,t[e+0],20,3921069994),o=F(o,r,l,c,t[e+5],5,3593408605),c=F(c,o,r,l,t[e+10],9,38016083),l=F(l,c,o,r,t[e+15],14,3634488961),r=F(r,l,c,o,t[e+4],20,3889429448),o=F(o,r,l,c,t[e+9],5,568446438),c=F(c,o,r,l,t[e+14],9,3275163606),l=F(l,c,o,r,t[e+3],14,4107603335),r=F(r,l,c,o,t[e+8],20,1163531501),o=F(o,r,l,c,t[e+13],5,2850285829),c=F(c,o,r,l,t[e+2],9,4243563512),l=F(l,c,o,r,t[e+7],14,1735328473),r=F(r,l,c,o,t[e+12],20,2368359562),o=H(o,r,l,c,t[e+5],4,4294588738),c=H(c,o,r,l,t[e+8],11,2272392833),l=H(l,c,o,r,t[e+11],16,1839030562),r=H(r,l,c,o,t[e+14],23,4259657740),o=H(o,r,l,c,t[e+1],4,2763975236),c=H(c,o,r,l,t[e+4],11,1272893353),l=H(l,c,o,r,t[e+7],16,4139469664),r=H(r,l,c,o,t[e+10],23,3200236656),o=H(o,r,l,c,t[e+13],4,681279174),c=H(c,o,r,l,t[e+0],11,3936430074),l=H(l,c,o,r,t[e+3],16,3572445317),r=H(r,l,c,o,t[e+6],23,76029189),o=H(o,r,l,c,t[e+9],4,3654602809),c=H(c,o,r,l,t[e+12],11,3873151461),l=H(l,c,o,r,t[e+15],16,530742520),r=H(r,l,c,o,t[e+2],23,3299628645),o=T(o,r,l,c,t[e+0],6,4096336452),c=T(c,o,r,l,t[e+7],10,1126891415),l=T(l,c,o,r,t[e+14],15,2878612391),r=T(r,l,c,o,t[e+5],21,4237533241),o=T(o,r,l,c,t[e+12],6,1700485571),c=T(c,o,r,l,t[e+3],10,2399980690),l=T(l,c,o,r,t[e+10],15,4293915773),r=T(r,l,c,o,t[e+1],21,2240044497),o=T(o,r,l,c,t[e+8],6,1873313359),c=T(c,o,r,l,t[e+15],10,4264355552),l=T(l,c,o,r,t[e+6],15,2734768916),r=T(r,l,c,o,t[e+13],21,1309151649),o=T(o,r,l,c,t[e+4],6,4149444226),c=T(c,o,r,l,t[e+11],10,3174756917),l=T(l,c,o,r,t[e+2],15,718787259),r=T(r,l,c,o,t[e+9],21,3951481745),o=_(o,s),r=_(r,A),l=_(l,n),c=_(c,a);function he(W){let N="",z="",J,U;for(U=0;U<=3;U++)J=W>>>U*8&255,z="0"+J.toString(16),N=N+z.substring(z.length-2,z.length);return N}return(he(o)+he(r)+he(l)+he(c)).toLowerCase()}function ta(i){return new Y(.5*(i.maxX+i.minX),.5*(i.maxY+i.minY),.5*(i.maxZ+i.minZ))}function ia(i){return new Y(i.maxX-i.minX,i.maxY-i.minY,i.maxZ-i.minZ)}const sa={BASE_URL:"/",DEV:!1,MODE:"public",PROD:!0,SSR:!1,VITE_BASE_URL:"",VITE_SHARED_ASSETS_PATH:"/assets"},ti=class ti{constructor(t=sa,e={version:"2.4.6",variant:"threejs",build:"1726657673733",s3Domain:"stream.viverse.com"}){d(this,"type");d(this,"toggleColliderVisualization",!0);d(this,"baseUrl");d(this,"sharedAssetsUrl");d(this,"registerServiceWorker",!0);d(this,"sendTrafficRecord",!0);d(this,"unsetTrafficMaxSize",104857600);d(this,"sendTrafficPeriod",60);d(this,"showLoadingModel",!0);d(this,"version");d(this,"variant");d(this,"logInitialModelDataLoaded",!1);d(this,"logCollider",!1);d(this,"logOperations",!1);d(this,"logIndividualOperations",!1);d(this,"logSettings",!1);d(this,"showNodeInfo",!1);d(this,"showNodeMaterialInfo",!1);d(this,"showDistancePoint",!1);d(this,"useDebugMaterial",!1);d(this,"showBoundingBoxes",!1);d(this,"showOverlay",!1);d(this,"visualizeOperation",!1);d(this,"renderWireframe",!1);d(this,"visualizeBoundingSphere",!1);d(this,"showReferencePosition",!1);d(this,"colliderOpacity",.3);d(this,"visualizationType",ns.Quality);this.type=ni.Public,this.version=e.version,this.variant=e.variant;const s={VERSION:e.version,VARIANT:e.variant,S3_DOMAIN:e.s3Domain};this.baseUrl=t.VITE_BASE_URL!=null&&t.VITE_BASE_URL.trim().length>0?as(Tn(Kn(t.VITE_BASE_URL),s)):"",this.sharedAssetsUrl=this.baseUrl.length>0?as(kn(t.VITE_SHARED_ASSETS_PATH,this.baseUrl)):t.VITE_SHARED_ASSETS_PATH,t.VITE_SHOW_LOADING_MODEL!=null&&(this.showLoadingModel=t.VITE_SHOW_LOADING_MODEL==="true"),t.VITE_REGISTER_SERVICE_WORKER!=null&&(this.registerServiceWorker=t.VITE_REGISTER_SERVICE_WORKER==="true"),t.VITE_TOGGLE_COLLIDER_VISUALIZATION!=null&&(this.toggleColliderVisualization=t.VITE_TOGGLE_COLLIDER_VISUALIZATION==="true"),t.VITE_SEND_TRAFFIC_RECORD!=null&&(this.sendTrafficRecord=t.VITE_SEND_TRAFFIC_RECORD==="true"),t.VITE_UNSENT_TRAFFIC_MAX_SIZE!=null&&(this.unsetTrafficMaxSize=parseInt(t.VITE_UNSENT_TRAFFIC_MAX_SIZE)),t.VITE_SEND_TRAFFIC_PERIOD!=null&&(this.sendTrafficPeriod=parseInt(t.VITE_SEND_TRAFFIC_PERIOD)),this.showLoadingModel=!0,typeof window<"u"&&(console.log(`Polygon Streaming web player: version: ${e.version}, variant: ${e.variant}, build: ${e.build}`),this.registerServiceWorker&&$n())}static get instance(){return this._instance===void 0&&console.error("Env needs to be initialized with initInstance() first"),this._instance}static initInstance(t,e){if(this._instance!==void 0){console.warn("Env already initialized");return}this._instance=new ti(t,e)}logProperties(){console.log(`Env properties for environment: ${ni[this.type]}:`);for(const t in this)this.hasOwnProperty(t)&&t!=="type"&&console.log(` ${t}: ${this[t]}`)}};d(ti,"_instance");let se=ti;function ls(i,t=0){if(!+i)return"0 B";const e=1024,s=t<0?0:t,A=["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],n=Math.floor(Math.log(i)/Math.log(e));return`${parseFloat((i/Math.pow(e,n)).toFixed(s))} ${A[n]}`}function Aa(i,t=0){return i.toLocaleString("en-IE",{maximumFractionDigits:t})}var rs=(i=>(i[i.NotLoaded=0]="NotLoaded",i[i.Loading=1]="Loading",i[i.Available=2]="Available",i))(rs||{});class na{constructor(t,e){d(this,"state");d(this,"fileName");d(this,"refCount");d(this,"texture");d(this,"queue");d(this,"renderer");this.fileName=t,this.renderer=e,this.state=0,this.refCount=0,this.queue=[]}async createTexture(t){if(this.state===1)await this.waitUntilLoaded();else if(this.state===0){this.state=1;const e=!!this.fileName.endsWith("ktx2"),s=await new Promise(A=>{setTimeout(()=>{A(new Blob([t]))},0)});e?this.texture=await this.renderer.createKtxTexture(this.fileName,s):this.texture=await this.renderer.createTexture(this.fileName,s),this.state=2,this.releaseSemaphore()}return this.texture}async waitUntilLoaded(){this.state===1&&await new Promise(t=>this.queue.push(t))}releaseSemaphore(){this.state=2;for(const t of this.queue)t()}loadTexture(){return this.texture}addCount(){this.refCount++}release(){if(this.state!=2){this.refCount=0,this.state=0;return}--this.refCount<=0&&(this.state=0,this.refCount=0,this.texture&&this.renderer.disposeTexture(this.texture))}}let ai;function aa(){if(!ai){let i=!1;(function(t){(t.includes("vr")||t.includes("VR"))&&(i=!0)})(navigator.userAgent||navigator.vendor||window.opera),ai=i}return ai}let oi;function Wt(){if(!oi){let i=!1;(function(t){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4)))&&(i=!0)})(navigator.userAgent||navigator.vendor||window.opera),!i&&aa()&&(i=!0),oi=i}return oi}function oa(){return["iPad Simulator","iPhone Simulator","iPod Simulator","iPad","iPhone","iPod"].includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document}const ii=class ii{constructor(){d(this,"head");d(this,"tail");d(this,"usage");d(this,"limit");d(this,"elements");d(this,"index");this.elements=[],this.index={},this.head=0,this.tail=0,this.usage=0,this.limit=Wt()?10*1024*1024:50*1024*1024}static get instance(){return this._instance==null&&(this._instance=new ii),this._instance}addElement(t,e,s){if(!this.hasElement(s)){const A=[t,e,s];for(this.index[s]=A,this.elements.push(A),this.usage+=e,this.tail++;this.length>1&&this.usage>this.limit;)this.drop()}}getElement(t){return this.hasElement(t)?this.index[t][0]:null}get length(){return this.tail-this.head}drop(){const t=this.elements[this.head][1];this.usage-=t,delete this.index[this.elements[this.head][2]],this.elements.splice(this.head,1),this.head++}hasElement(t){if(this.index[t]){if(this.index[t][0].length==this.index[t][1])return!0;this.doCleanup()}return!1}doCleanup(){const t=[];for(const s of this.elements)s&&s[0].length==s[1]&&t.push(s);const e={};this.usage=0;for(const s of t)e[s[2]]=s,this.usage+=s[1];this.head=0,this.tail=t.length,this.elements=t,this.index=e}};d(ii,"_instance");let ct=ii;/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */const la=4,cs=0,ds=1,ra=2;function $e(i){let t=i.length;for(;--t>=0;)i[t]=0}const ca=0,hs=1,da=2,ha=3,ua=258,li=29,dt=256,ht=dt+1+li,et=30,ri=19,us=2*ht+1,Fe=15,ci=16,ga=7,di=256,gs=16,ps=17,Cs=18,hi=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),Vt=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),pa=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),ms=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Ca=512,Xe=new Array((ht+2)*2);$e(Xe);const ut=new Array(et*2);$e(ut);const gt=new Array(Ca);$e(gt);const pt=new Array(ua-ha+1);$e(pt);const ui=new Array(li);$e(ui);const Tt=new Array(et);$e(Tt);function gi(i,t,e,s,A){this.static_tree=i,this.extra_bits=t,this.extra_base=e,this.elems=s,this.max_length=A,this.has_stree=i&&i.length}let Is,Gs,bs;function pi(i,t){this.dyn_tree=i,this.max_code=0,this.stat_desc=t}const fs=i=>i<256?gt[i]:gt[256+(i>>>7)],Ct=(i,t)=>{i.pending_buf[i.pending++]=t&255,i.pending_buf[i.pending++]=t>>>8&255},Ae=(i,t,e)=>{i.bi_valid>ci-e?(i.bi_buf|=t<<i.bi_valid&65535,Ct(i,i.bi_buf),i.bi_buf=t>>ci-i.bi_valid,i.bi_valid+=e-ci):(i.bi_buf|=t<<i.bi_valid&65535,i.bi_valid+=e)},me=(i,t,e)=>{Ae(i,e[t*2],e[t*2+1])},ys=(i,t)=>{let e=0;do e|=i&1,i>>>=1,e<<=1;while(--t>0);return e>>>1},ma=i=>{i.bi_valid===16?(Ct(i,i.bi_buf),i.bi_buf=0,i.bi_valid=0):i.bi_valid>=8&&(i.pending_buf[i.pending++]=i.bi_buf&255,i.bi_buf>>=8,i.bi_valid-=8)},Ia=(i,t)=>{const e=t.dyn_tree,s=t.max_code,A=t.stat_desc.static_tree,n=t.stat_desc.has_stree,a=t.stat_desc.extra_bits,o=t.stat_desc.extra_base,r=t.stat_desc.max_length;let l,c,h,p,u,C,b=0;for(p=0;p<=Fe;p++)i.bl_count[p]=0;for(e[i.heap[i.heap_max]*2+1]=0,l=i.heap_max+1;l<us;l++)c=i.heap[l],p=e[e[c*2+1]*2+1]+1,p>r&&(p=r,b++),e[c*2+1]=p,!(c>s)&&(i.bl_count[p]++,u=0,c>=o&&(u=a[c-o]),C=e[c*2],i.opt_len+=C*(p+u),n&&(i.static_len+=C*(A[c*2+1]+u)));if(b!==0){do{for(p=r-1;i.bl_count[p]===0;)p--;i.bl_count[p]--,i.bl_count[p+1]+=2,i.bl_count[r]--,b-=2}while(b>0);for(p=r;p!==0;p--)for(c=i.bl_count[p];c!==0;)h=i.heap[--l],!(h>s)&&(e[h*2+1]!==p&&(i.opt_len+=(p-e[h*2+1])*e[h*2],e[h*2+1]=p),c--)}},Xs=(i,t,e)=>{const s=new Array(Fe+1);let A=0,n,a;for(n=1;n<=Fe;n++)A=A+e[n-1]<<1,s[n]=A;for(a=0;a<=t;a++){let o=i[a*2+1];o!==0&&(i[a*2]=ys(s[o]++,o))}},Ga=()=>{let i,t,e,s,A;const n=new Array(Fe+1);for(e=0,s=0;s<li-1;s++)for(ui[s]=e,i=0;i<1<<hi[s];i++)pt[e++]=s;for(pt[e-1]=s,A=0,s=0;s<16;s++)for(Tt[s]=A,i=0;i<1<<Vt[s];i++)gt[A++]=s;for(A>>=7;s<et;s++)for(Tt[s]=A<<7,i=0;i<1<<Vt[s]-7;i++)gt[256+A++]=s;for(t=0;t<=Fe;t++)n[t]=0;for(i=0;i<=143;)Xe[i*2+1]=8,i++,n[8]++;for(;i<=255;)Xe[i*2+1]=9,i++,n[9]++;for(;i<=279;)Xe[i*2+1]=7,i++,n[7]++;for(;i<=287;)Xe[i*2+1]=8,i++,n[8]++;for(Xs(Xe,ht+1,n),i=0;i<et;i++)ut[i*2+1]=5,ut[i*2]=ys(i,5);Is=new gi(Xe,hi,dt+1,ht,Fe),Gs=new gi(ut,Vt,0,et,Fe),bs=new gi(new Array(0),pa,0,ri,ga)},Bs=i=>{let t;for(t=0;t<ht;t++)i.dyn_ltree[t*2]=0;for(t=0;t<et;t++)i.dyn_dtree[t*2]=0;for(t=0;t<ri;t++)i.bl_tree[t*2]=0;i.dyn_ltree[di*2]=1,i.opt_len=i.static_len=0,i.sym_next=i.matches=0},xs=i=>{i.bi_valid>8?Ct(i,i.bi_buf):i.bi_valid>0&&(i.pending_buf[i.pending++]=i.bi_buf),i.bi_buf=0,i.bi_valid=0},Qs=(i,t,e,s)=>{const A=t*2,n=e*2;return i[A]<i[n]||i[A]===i[n]&&s[t]<=s[e]},Ci=(i,t,e)=>{const s=i.heap[e];let A=e<<1;for(;A<=i.heap_len&&(A<i.heap_len&&Qs(t,i.heap[A+1],i.heap[A],i.depth)&&A++,!Qs(t,s,i.heap[A],i.depth));)i.heap[e]=i.heap[A],e=A,A<<=1;i.heap[e]=s},Ls=(i,t,e)=>{let s,A,n=0,a,o;if(i.sym_next!==0)do s=i.pending_buf[i.sym_buf+n++]&255,s+=(i.pending_buf[i.sym_buf+n++]&255)<<8,A=i.pending_buf[i.sym_buf+n++],s===0?me(i,A,t):(a=pt[A],me(i,a+dt+1,t),o=hi[a],o!==0&&(A-=ui[a],Ae(i,A,o)),s--,a=fs(s),me(i,a,e),o=Vt[a],o!==0&&(s-=Tt[a],Ae(i,s,o)));while(n<i.sym_next);me(i,di,t)},mi=(i,t)=>{const e=t.dyn_tree,s=t.stat_desc.static_tree,A=t.stat_desc.has_stree,n=t.stat_desc.elems;let a,o,r=-1,l;for(i.heap_len=0,i.heap_max=us,a=0;a<n;a++)e[a*2]!==0?(i.heap[++i.heap_len]=r=a,i.depth[a]=0):e[a*2+1]=0;for(;i.heap_len<2;)l=i.heap[++i.heap_len]=r<2?++r:0,e[l*2]=1,i.depth[l]=0,i.opt_len--,A&&(i.static_len-=s[l*2+1]);for(t.max_code=r,a=i.heap_len>>1;a>=1;a--)Ci(i,e,a);l=n;do a=i.heap[1],i.heap[1]=i.heap[i.heap_len--],Ci(i,e,1),o=i.heap[1],i.heap[--i.heap_max]=a,i.heap[--i.heap_max]=o,e[l*2]=e[a*2]+e[o*2],i.depth[l]=(i.depth[a]>=i.depth[o]?i.depth[a]:i.depth[o])+1,e[a*2+1]=e[o*2+1]=l,i.heap[1]=l++,Ci(i,e,1);while(i.heap_len>=2);i.heap[--i.heap_max]=i.heap[1],Ia(i,t),Xs(e,r,i.bl_count)},Es=(i,t,e)=>{let s,A=-1,n,a=t[0*2+1],o=0,r=7,l=4;for(a===0&&(r=138,l=3),t[(e+1)*2+1]=65535,s=0;s<=e;s++)n=a,a=t[(s+1)*2+1],!(++o<r&&n===a)&&(o<l?i.bl_tree[n*2]+=o:n!==0?(n!==A&&i.bl_tree[n*2]++,i.bl_tree[gs*2]++):o<=10?i.bl_tree[ps*2]++:i.bl_tree[Cs*2]++,o=0,A=n,a===0?(r=138,l=3):n===a?(r=6,l=3):(r=7,l=4))},Rs=(i,t,e)=>{let s,A=-1,n,a=t[0*2+1],o=0,r=7,l=4;for(a===0&&(r=138,l=3),s=0;s<=e;s++)if(n=a,a=t[(s+1)*2+1],!(++o<r&&n===a)){if(o<l)do me(i,n,i.bl_tree);while(--o!==0);else n!==0?(n!==A&&(me(i,n,i.bl_tree),o--),me(i,gs,i.bl_tree),Ae(i,o-3,2)):o<=10?(me(i,ps,i.bl_tree),Ae(i,o-3,3)):(me(i,Cs,i.bl_tree),Ae(i,o-11,7));o=0,A=n,a===0?(r=138,l=3):n===a?(r=6,l=3):(r=7,l=4)}},ba=i=>{let t;for(Es(i,i.dyn_ltree,i.l_desc.max_code),Es(i,i.dyn_dtree,i.d_desc.max_code),mi(i,i.bl_desc),t=ri-1;t>=3&&i.bl_tree[ms[t]*2+1]===0;t--);return i.opt_len+=3*(t+1)+5+5+4,t},fa=(i,t,e,s)=>{let A;for(Ae(i,t-257,5),Ae(i,e-1,5),Ae(i,s-4,4),A=0;A<s;A++)Ae(i,i.bl_tree[ms[A]*2+1],3);Rs(i,i.dyn_ltree,t-1),Rs(i,i.dyn_dtree,e-1)},ya=i=>{let t=4093624447,e;for(e=0;e<=31;e++,t>>>=1)if(t&1&&i.dyn_ltree[e*2]!==0)return cs;if(i.dyn_ltree[9*2]!==0||i.dyn_ltree[10*2]!==0||i.dyn_ltree[13*2]!==0)return ds;for(e=32;e<dt;e++)if(i.dyn_ltree[e*2]!==0)return ds;return cs};let Ss=!1;const Xa=i=>{Ss||(Ga(),Ss=!0),i.l_desc=new pi(i.dyn_ltree,Is),i.d_desc=new pi(i.dyn_dtree,Gs),i.bl_desc=new pi(i.bl_tree,bs),i.bi_buf=0,i.bi_valid=0,Bs(i)},Ms=(i,t,e,s)=>{Ae(i,(ca<<1)+(s?1:0),3),xs(i),Ct(i,e),Ct(i,~e),e&&i.pending_buf.set(i.window.subarray(t,t+e),i.pending),i.pending+=e},Ba=i=>{Ae(i,hs<<1,3),me(i,di,Xe),ma(i)},xa=(i,t,e,s)=>{let A,n,a=0;i.level>0?(i.strm.data_type===ra&&(i.strm.data_type=ya(i)),mi(i,i.l_desc),mi(i,i.d_desc),a=ba(i),A=i.opt_len+3+7>>>3,n=i.static_len+3+7>>>3,n<=A&&(A=n)):A=n=e+5,e+4<=A&&t!==-1?Ms(i,t,e,s):i.strategy===la||n===A?(Ae(i,(hs<<1)+(s?1:0),3),Ls(i,Xe,ut)):(Ae(i,(da<<1)+(s?1:0),3),fa(i,i.l_desc.max_code+1,i.d_desc.max_code+1,a+1),Ls(i,i.dyn_ltree,i.dyn_dtree)),Bs(i),s&&xs(i)},Qa=(i,t,e)=>(i.pending_buf[i.sym_buf+i.sym_next++]=t,i.pending_buf[i.sym_buf+i.sym_next++]=t>>8,i.pending_buf[i.sym_buf+i.sym_next++]=e,t===0?i.dyn_ltree[e*2]++:(i.matches++,t--,i.dyn_ltree[(pt[e]+dt+1)*2]++,i.dyn_dtree[fs(t)*2]++),i.sym_next===i.sym_end);var La=Xa,Ea=Ms,Ra=xa,Sa=Qa,Ma=Ba,Za={_tr_init:La,_tr_stored_block:Ea,_tr_flush_block:Ra,_tr_tally:Sa,_tr_align:Ma},mt=(i,t,e,s)=>{let A=i&65535|0,n=i>>>16&65535|0,a=0;for(;e!==0;){a=e>2e3?2e3:e,e-=a;do A=A+t[s++]|0,n=n+A|0;while(--a);A%=65521,n%=65521}return A|n<<16|0};const wa=()=>{let i,t=[];for(var e=0;e<256;e++){i=e;for(var s=0;s<8;s++)i=i&1?3988292384^i>>>1:i>>>1;t[e]=i}return t},Wa=new Uint32Array(wa());var j=(i,t,e,s)=>{const A=Wa,n=s+e;i^=-1;for(let a=s;a<n;a++)i=i>>>8^A[(i^t[a])&255];return i^-1},He={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},Ye={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:Va,_tr_stored_block:Ii,_tr_flush_block:Ta,_tr_tally:Me,_tr_align:ka}=Za,{Z_NO_FLUSH:Ze,Z_PARTIAL_FLUSH:Ka,Z_FULL_FLUSH:Na,Z_FINISH:le,Z_BLOCK:Zs,Z_OK:q,Z_STREAM_END:ws,Z_STREAM_ERROR:Ie,Z_DATA_ERROR:za,Z_BUF_ERROR:Gi,Z_DEFAULT_COMPRESSION:Fa,Z_FILTERED:Ha,Z_HUFFMAN_ONLY:kt,Z_RLE:Ya,Z_FIXED:Ua,Z_DEFAULT_STRATEGY:Da,Z_UNKNOWN:Ja,Z_DEFLATED:Kt}=Ye,va=9,_a=15,Pa=8,bi=256+1+29,Oa=30,ja=19,qa=2*bi+1,$a=15,V=3,we=258,Ge=we+V+1,eo=32,tt=42,fi=57,yi=69,Xi=73,Bi=91,xi=103,Ue=113,It=666,ee=1,it=2,De=3,st=4,to=3,Je=(i,t)=>(i.msg=He[t],t),Ws=i=>i*2-(i>4?9:0),We=i=>{let t=i.length;for(;--t>=0;)i[t]=0},io=i=>{let t,e,s,A=i.w_size;t=i.hash_size,s=t;do e=i.head[--s],i.head[s]=e>=A?e-A:0;while(--t);t=A,s=t;do e=i.prev[--s],i.prev[s]=e>=A?e-A:0;while(--t)};let Ve=(i,t,e)=>(t<<i.hash_shift^e)&i.hash_mask;const ae=i=>{const t=i.state;let e=t.pending;e>i.avail_out&&(e=i.avail_out),e!==0&&(i.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+e),i.next_out),i.next_out+=e,t.pending_out+=e,i.total_out+=e,i.avail_out-=e,t.pending-=e,t.pending===0&&(t.pending_out=0))},oe=(i,t)=>{Ta(i,i.block_start>=0?i.block_start:-1,i.strstart-i.block_start,t),i.block_start=i.strstart,ae(i.strm)},k=(i,t)=>{i.pending_buf[i.pending++]=t},Gt=(i,t)=>{i.pending_buf[i.pending++]=t>>>8&255,i.pending_buf[i.pending++]=t&255},Qi=(i,t,e,s)=>{let A=i.avail_in;return A>s&&(A=s),A===0?0:(i.avail_in-=A,t.set(i.input.subarray(i.next_in,i.next_in+A),e),i.state.wrap===1?i.adler=mt(i.adler,t,A,e):i.state.wrap===2&&(i.adler=j(i.adler,t,A,e)),i.next_in+=A,i.total_in+=A,A)},Vs=(i,t)=>{let e=i.max_chain_length,s=i.strstart,A,n,a=i.prev_length,o=i.nice_match;const r=i.strstart>i.w_size-Ge?i.strstart-(i.w_size-Ge):0,l=i.window,c=i.w_mask,h=i.prev,p=i.strstart+we;let u=l[s+a-1],C=l[s+a];i.prev_length>=i.good_match&&(e>>=2),o>i.lookahead&&(o=i.lookahead);do if(A=t,!(l[A+a]!==C||l[A+a-1]!==u||l[A]!==l[s]||l[++A]!==l[s+1])){s+=2,A++;do;while(l[++s]===l[++A]&&l[++s]===l[++A]&&l[++s]===l[++A]&&l[++s]===l[++A]&&l[++s]===l[++A]&&l[++s]===l[++A]&&l[++s]===l[++A]&&l[++s]===l[++A]&&s<p);if(n=we-(p-s),s=p-we,n>a){if(i.match_start=t,a=n,n>=o)break;u=l[s+a-1],C=l[s+a]}}while((t=h[t&c])>r&&--e!==0);return a<=i.lookahead?a:i.lookahead},At=i=>{const t=i.w_size;let e,s,A;do{if(s=i.window_size-i.lookahead-i.strstart,i.strstart>=t+(t-Ge)&&(i.window.set(i.window.subarray(t,t+t-s),0),i.match_start-=t,i.strstart-=t,i.block_start-=t,i.insert>i.strstart&&(i.insert=i.strstart),io(i),s+=t),i.strm.avail_in===0)break;if(e=Qi(i.strm,i.window,i.strstart+i.lookahead,s),i.lookahead+=e,i.lookahead+i.insert>=V)for(A=i.strstart-i.insert,i.ins_h=i.window[A],i.ins_h=Ve(i,i.ins_h,i.window[A+1]);i.insert&&(i.ins_h=Ve(i,i.ins_h,i.window[A+V-1]),i.prev[A&i.w_mask]=i.head[i.ins_h],i.head[i.ins_h]=A,A++,i.insert--,!(i.lookahead+i.insert<V)););}while(i.lookahead<Ge&&i.strm.avail_in!==0)},Ts=(i,t)=>{let e=i.pending_buf_size-5>i.w_size?i.w_size:i.pending_buf_size-5,s,A,n,a=0,o=i.strm.avail_in;do{if(s=65535,n=i.bi_valid+42>>3,i.strm.avail_out<n||(n=i.strm.avail_out-n,A=i.strstart-i.block_start,s>A+i.strm.avail_in&&(s=A+i.strm.avail_in),s>n&&(s=n),s<e&&(s===0&&t!==le||t===Ze||s!==A+i.strm.avail_in)))break;a=t===le&&s===A+i.strm.avail_in?1:0,Ii(i,0,0,a),i.pending_buf[i.pending-4]=s,i.pending_buf[i.pending-3]=s>>8,i.pending_buf[i.pending-2]=~s,i.pending_buf[i.pending-1]=~s>>8,ae(i.strm),A&&(A>s&&(A=s),i.strm.output.set(i.window.subarray(i.block_start,i.block_start+A),i.strm.next_out),i.strm.next_out+=A,i.strm.avail_out-=A,i.strm.total_out+=A,i.block_start+=A,s-=A),s&&(Qi(i.strm,i.strm.output,i.strm.next_out,s),i.strm.next_out+=s,i.strm.avail_out-=s,i.strm.total_out+=s)}while(a===0);return o-=i.strm.avail_in,o&&(o>=i.w_size?(i.matches=2,i.window.set(i.strm.input.subarray(i.strm.next_in-i.w_size,i.strm.next_in),0),i.strstart=i.w_size,i.insert=i.strstart):(i.window_size-i.strstart<=o&&(i.strstart-=i.w_size,i.window.set(i.window.subarray(i.w_size,i.w_size+i.strstart),0),i.matches<2&&i.matches++,i.insert>i.strstart&&(i.insert=i.strstart)),i.window.set(i.strm.input.subarray(i.strm.next_in-o,i.strm.next_in),i.strstart),i.strstart+=o,i.insert+=o>i.w_size-i.insert?i.w_size-i.insert:o),i.block_start=i.strstart),i.high_water<i.strstart&&(i.high_water=i.strstart),a?st:t!==Ze&&t!==le&&i.strm.avail_in===0&&i.strstart===i.block_start?it:(n=i.window_size-i.strstart,i.strm.avail_in>n&&i.block_start>=i.w_size&&(i.block_start-=i.w_size,i.strstart-=i.w_size,i.window.set(i.window.subarray(i.w_size,i.w_size+i.strstart),0),i.matches<2&&i.matches++,n+=i.w_size,i.insert>i.strstart&&(i.insert=i.strstart)),n>i.strm.avail_in&&(n=i.strm.avail_in),n&&(Qi(i.strm,i.window,i.strstart,n),i.strstart+=n,i.insert+=n>i.w_size-i.insert?i.w_size-i.insert:n),i.high_water<i.strstart&&(i.high_water=i.strstart),n=i.bi_valid+42>>3,n=i.pending_buf_size-n>65535?65535:i.pending_buf_size-n,e=n>i.w_size?i.w_size:n,A=i.strstart-i.block_start,(A>=e||(A||t===le)&&t!==Ze&&i.strm.avail_in===0&&A<=n)&&(s=A>n?n:A,a=t===le&&i.strm.avail_in===0&&s===A?1:0,Ii(i,i.block_start,s,a),i.block_start+=s,ae(i.strm)),a?De:ee)},Li=(i,t)=>{let e,s;for(;;){if(i.lookahead<Ge){if(At(i),i.lookahead<Ge&&t===Ze)return ee;if(i.lookahead===0)break}if(e=0,i.lookahead>=V&&(i.ins_h=Ve(i,i.ins_h,i.window[i.strstart+V-1]),e=i.prev[i.strstart&i.w_mask]=i.head[i.ins_h],i.head[i.ins_h]=i.strstart),e!==0&&i.strstart-e<=i.w_size-Ge&&(i.match_length=Vs(i,e)),i.match_length>=V)if(s=Me(i,i.strstart-i.match_start,i.match_length-V),i.lookahead-=i.match_length,i.match_length<=i.max_lazy_match&&i.lookahead>=V){i.match_length--;do i.strstart++,i.ins_h=Ve(i,i.ins_h,i.window[i.strstart+V-1]),e=i.prev[i.strstart&i.w_mask]=i.head[i.ins_h],i.head[i.ins_h]=i.strstart;while(--i.match_length!==0);i.strstart++}else i.strstart+=i.match_length,i.match_length=0,i.ins_h=i.window[i.strstart],i.ins_h=Ve(i,i.ins_h,i.window[i.strstart+1]);else s=Me(i,0,i.window[i.strstart]),i.lookahead--,i.strstart++;if(s&&(oe(i,!1),i.strm.avail_out===0))return ee}return i.insert=i.strstart<V-1?i.strstart:V-1,t===le?(oe(i,!0),i.strm.avail_out===0?De:st):i.sym_next&&(oe(i,!1),i.strm.avail_out===0)?ee:it},nt=(i,t)=>{let e,s,A;for(;;){if(i.lookahead<Ge){if(At(i),i.lookahead<Ge&&t===Ze)return ee;if(i.lookahead===0)break}if(e=0,i.lookahead>=V&&(i.ins_h=Ve(i,i.ins_h,i.window[i.strstart+V-1]),e=i.prev[i.strstart&i.w_mask]=i.head[i.ins_h],i.head[i.ins_h]=i.strstart),i.prev_length=i.match_length,i.prev_match=i.match_start,i.match_length=V-1,e!==0&&i.prev_length<i.max_lazy_match&&i.strstart-e<=i.w_size-Ge&&(i.match_length=Vs(i,e),i.match_length<=5&&(i.strategy===Ha||i.match_length===V&&i.strstart-i.match_start>4096)&&(i.match_length=V-1)),i.prev_length>=V&&i.match_length<=i.prev_length){A=i.strstart+i.lookahead-V,s=Me(i,i.strstart-1-i.prev_match,i.prev_length-V),i.lookahead-=i.prev_length-1,i.prev_length-=2;do++i.strstart<=A&&(i.ins_h=Ve(i,i.ins_h,i.window[i.strstart+V-1]),e=i.prev[i.strstart&i.w_mask]=i.head[i.ins_h],i.head[i.ins_h]=i.strstart);while(--i.prev_length!==0);if(i.match_available=0,i.match_length=V-1,i.strstart++,s&&(oe(i,!1),i.strm.avail_out===0))return ee}else if(i.match_available){if(s=Me(i,0,i.window[i.strstart-1]),s&&oe(i,!1),i.strstart++,i.lookahead--,i.strm.avail_out===0)return ee}else i.match_available=1,i.strstart++,i.lookahead--}return i.match_available&&(s=Me(i,0,i.window[i.strstart-1]),i.match_available=0),i.insert=i.strstart<V-1?i.strstart:V-1,t===le?(oe(i,!0),i.strm.avail_out===0?De:st):i.sym_next&&(oe(i,!1),i.strm.avail_out===0)?ee:it},so=(i,t)=>{let e,s,A,n;const a=i.window;for(;;){if(i.lookahead<=we){if(At(i),i.lookahead<=we&&t===Ze)return ee;if(i.lookahead===0)break}if(i.match_length=0,i.lookahead>=V&&i.strstart>0&&(A=i.strstart-1,s=a[A],s===a[++A]&&s===a[++A]&&s===a[++A])){n=i.strstart+we;do;while(s===a[++A]&&s===a[++A]&&s===a[++A]&&s===a[++A]&&s===a[++A]&&s===a[++A]&&s===a[++A]&&s===a[++A]&&A<n);i.match_length=we-(n-A),i.match_length>i.lookahead&&(i.match_length=i.lookahead)}if(i.match_length>=V?(e=Me(i,1,i.match_length-V),i.lookahead-=i.match_length,i.strstart+=i.match_length,i.match_length=0):(e=Me(i,0,i.window[i.strstart]),i.lookahead--,i.strstart++),e&&(oe(i,!1),i.strm.avail_out===0))return ee}return i.insert=0,t===le?(oe(i,!0),i.strm.avail_out===0?De:st):i.sym_next&&(oe(i,!1),i.strm.avail_out===0)?ee:it},Ao=(i,t)=>{let e;for(;;){if(i.lookahead===0&&(At(i),i.lookahead===0)){if(t===Ze)return ee;break}if(i.match_length=0,e=Me(i,0,i.window[i.strstart]),i.lookahead--,i.strstart++,e&&(oe(i,!1),i.strm.avail_out===0))return ee}return i.insert=0,t===le?(oe(i,!0),i.strm.avail_out===0?De:st):i.sym_next&&(oe(i,!1),i.strm.avail_out===0)?ee:it};function be(i,t,e,s,A){this.good_length=i,this.max_lazy=t,this.nice_length=e,this.max_chain=s,this.func=A}const bt=[new be(0,0,0,0,Ts),new be(4,4,8,4,Li),new be(4,5,16,8,Li),new be(4,6,32,32,Li),new be(4,4,16,16,nt),new be(8,16,32,32,nt),new be(8,16,128,128,nt),new be(8,32,128,256,nt),new be(32,128,258,1024,nt),new be(32,258,258,4096,nt)],no=i=>{i.window_size=2*i.w_size,We(i.head),i.max_lazy_match=bt[i.level].max_lazy,i.good_match=bt[i.level].good_length,i.nice_match=bt[i.level].nice_length,i.max_chain_length=bt[i.level].max_chain,i.strstart=0,i.block_start=0,i.lookahead=0,i.insert=0,i.match_length=i.prev_length=V-1,i.match_available=0,i.ins_h=0};function ao(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Kt,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(qa*2),this.dyn_dtree=new Uint16Array((2*Oa+1)*2),this.bl_tree=new Uint16Array((2*ja+1)*2),We(this.dyn_ltree),We(this.dyn_dtree),We(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array($a+1),this.heap=new Uint16Array(2*bi+1),We(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(2*bi+1),We(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const ft=i=>{if(!i)return 1;const t=i.state;return!t||t.strm!==i||t.status!==tt&&t.status!==fi&&t.status!==yi&&t.status!==Xi&&t.status!==Bi&&t.status!==xi&&t.status!==Ue&&t.status!==It?1:0},ks=i=>{if(ft(i))return Je(i,Ie);i.total_in=i.total_out=0,i.data_type=Ja;const t=i.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap===2?fi:t.wrap?tt:Ue,i.adler=t.wrap===2?0:1,t.last_flush=-2,Va(t),q},Ks=i=>{const t=ks(i);return t===q&&no(i.state),t},oo=(i,t)=>ft(i)||i.state.wrap!==2?Ie:(i.state.gzhead=t,q),Ns=(i,t,e,s,A,n)=>{if(!i)return Ie;let a=1;if(t===Fa&&(t=6),s<0?(a=0,s=-s):s>15&&(a=2,s-=16),A<1||A>va||e!==Kt||s<8||s>15||t<0||t>9||n<0||n>Ua||s===8&&a!==1)return Je(i,Ie);s===8&&(s=9);const o=new ao;return i.state=o,o.strm=i,o.status=tt,o.wrap=a,o.gzhead=null,o.w_bits=s,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=A+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+V-1)/V),o.window=new Uint8Array(o.w_size*2),o.head=new Uint16Array(o.hash_size),o.prev=new Uint16Array(o.w_size),o.lit_bufsize=1<<A+6,o.pending_buf_size=o.lit_bufsize*4,o.pending_buf=new Uint8Array(o.pending_buf_size),o.sym_buf=o.lit_bufsize,o.sym_end=(o.lit_bufsize-1)*3,o.level=t,o.strategy=n,o.method=e,Ks(i)},lo=(i,t)=>Ns(i,t,Kt,_a,Pa,Da),ro=(i,t)=>{if(ft(i)||t>Zs||t<0)return i?Je(i,Ie):Ie;const e=i.state;if(!i.output||i.avail_in!==0&&!i.input||e.status===It&&t!==le)return Je(i,i.avail_out===0?Gi:Ie);const s=e.last_flush;if(e.last_flush=t,e.pending!==0){if(ae(i),i.avail_out===0)return e.last_flush=-1,q}else if(i.avail_in===0&&Ws(t)<=Ws(s)&&t!==le)return Je(i,Gi);if(e.status===It&&i.avail_in!==0)return Je(i,Gi);if(e.status===tt&&e.wrap===0&&(e.status=Ue),e.status===tt){let A=Kt+(e.w_bits-8<<4)<<8,n=-1;if(e.strategy>=kt||e.level<2?n=0:e.level<6?n=1:e.level===6?n=2:n=3,A|=n<<6,e.strstart!==0&&(A|=eo),A+=31-A%31,Gt(e,A),e.strstart!==0&&(Gt(e,i.adler>>>16),Gt(e,i.adler&65535)),i.adler=1,e.status=Ue,ae(i),e.pending!==0)return e.last_flush=-1,q}if(e.status===fi){if(i.adler=0,k(e,31),k(e,139),k(e,8),e.gzhead)k(e,(e.gzhead.text?1:0)+(e.gzhead.hcrc?2:0)+(e.gzhead.extra?4:0)+(e.gzhead.name?8:0)+(e.gzhead.comment?16:0)),k(e,e.gzhead.time&255),k(e,e.gzhead.time>>8&255),k(e,e.gzhead.time>>16&255),k(e,e.gzhead.time>>24&255),k(e,e.level===9?2:e.strategy>=kt||e.level<2?4:0),k(e,e.gzhead.os&255),e.gzhead.extra&&e.gzhead.extra.length&&(k(e,e.gzhead.extra.length&255),k(e,e.gzhead.extra.length>>8&255)),e.gzhead.hcrc&&(i.adler=j(i.adler,e.pending_buf,e.pending,0)),e.gzindex=0,e.status=yi;else if(k(e,0),k(e,0),k(e,0),k(e,0),k(e,0),k(e,e.level===9?2:e.strategy>=kt||e.level<2?4:0),k(e,to),e.status=Ue,ae(i),e.pending!==0)return e.last_flush=-1,q}if(e.status===yi){if(e.gzhead.extra){let A=e.pending,n=(e.gzhead.extra.length&65535)-e.gzindex;for(;e.pending+n>e.pending_buf_size;){let o=e.pending_buf_size-e.pending;if(e.pending_buf.set(e.gzhead.extra.subarray(e.gzindex,e.gzindex+o),e.pending),e.pending=e.pending_buf_size,e.gzhead.hcrc&&e.pending>A&&(i.adler=j(i.adler,e.pending_buf,e.pending-A,A)),e.gzindex+=o,ae(i),e.pending!==0)return e.last_flush=-1,q;A=0,n-=o}let a=new Uint8Array(e.gzhead.extra);e.pending_buf.set(a.subarray(e.gzindex,e.gzindex+n),e.pending),e.pending+=n,e.gzhead.hcrc&&e.pending>A&&(i.adler=j(i.adler,e.pending_buf,e.pending-A,A)),e.gzindex=0}e.status=Xi}if(e.status===Xi){if(e.gzhead.name){let A=e.pending,n;do{if(e.pending===e.pending_buf_size){if(e.gzhead.hcrc&&e.pending>A&&(i.adler=j(i.adler,e.pending_buf,e.pending-A,A)),ae(i),e.pending!==0)return e.last_flush=-1,q;A=0}e.gzindex<e.gzhead.name.length?n=e.gzhead.name.charCodeAt(e.gzindex++)&255:n=0,k(e,n)}while(n!==0);e.gzhead.hcrc&&e.pending>A&&(i.adler=j(i.adler,e.pending_buf,e.pending-A,A)),e.gzindex=0}e.status=Bi}if(e.status===Bi){if(e.gzhead.comment){let A=e.pending,n;do{if(e.pending===e.pending_buf_size){if(e.gzhead.hcrc&&e.pending>A&&(i.adler=j(i.adler,e.pending_buf,e.pending-A,A)),ae(i),e.pending!==0)return e.last_flush=-1,q;A=0}e.gzindex<e.gzhead.comment.length?n=e.gzhead.comment.charCodeAt(e.gzindex++)&255:n=0,k(e,n)}while(n!==0);e.gzhead.hcrc&&e.pending>A&&(i.adler=j(i.adler,e.pending_buf,e.pending-A,A))}e.status=xi}if(e.status===xi){if(e.gzhead.hcrc){if(e.pending+2>e.pending_buf_size&&(ae(i),e.pending!==0))return e.last_flush=-1,q;k(e,i.adler&255),k(e,i.adler>>8&255),i.adler=0}if(e.status=Ue,ae(i),e.pending!==0)return e.last_flush=-1,q}if(i.avail_in!==0||e.lookahead!==0||t!==Ze&&e.status!==It){let A=e.level===0?Ts(e,t):e.strategy===kt?Ao(e,t):e.strategy===Ya?so(e,t):bt[e.level].func(e,t);if((A===De||A===st)&&(e.status=It),A===ee||A===De)return i.avail_out===0&&(e.last_flush=-1),q;if(A===it&&(t===Ka?ka(e):t!==Zs&&(Ii(e,0,0,!1),t===Na&&(We(e.head),e.lookahead===0&&(e.strstart=0,e.block_start=0,e.insert=0))),ae(i),i.avail_out===0))return e.last_flush=-1,q}return t!==le?q:e.wrap<=0?ws:(e.wrap===2?(k(e,i.adler&255),k(e,i.adler>>8&255),k(e,i.adler>>16&255),k(e,i.adler>>24&255),k(e,i.total_in&255),k(e,i.total_in>>8&255),k(e,i.total_in>>16&255),k(e,i.total_in>>24&255)):(Gt(e,i.adler>>>16),Gt(e,i.adler&65535)),ae(i),e.wrap>0&&(e.wrap=-e.wrap),e.pending!==0?q:ws)},co=i=>{if(ft(i))return Ie;const t=i.state.status;return i.state=null,t===Ue?Je(i,za):q},ho=(i,t)=>{let e=t.length;if(ft(i))return Ie;const s=i.state,A=s.wrap;if(A===2||A===1&&s.status!==tt||s.lookahead)return Ie;if(A===1&&(i.adler=mt(i.adler,t,e,0)),s.wrap=0,e>=s.w_size){A===0&&(We(s.head),s.strstart=0,s.block_start=0,s.insert=0);let r=new Uint8Array(s.w_size);r.set(t.subarray(e-s.w_size,e),0),t=r,e=s.w_size}const n=i.avail_in,a=i.next_in,o=i.input;for(i.avail_in=e,i.next_in=0,i.input=t,At(s);s.lookahead>=V;){let r=s.strstart,l=s.lookahead-(V-1);do s.ins_h=Ve(s,s.ins_h,s.window[r+V-1]),s.prev[r&s.w_mask]=s.head[s.ins_h],s.head[s.ins_h]=r,r++;while(--l);s.strstart=r,s.lookahead=V-1,At(s)}return s.strstart+=s.lookahead,s.block_start=s.strstart,s.insert=s.lookahead,s.lookahead=0,s.match_length=s.prev_length=V-1,s.match_available=0,i.next_in=a,i.input=o,i.avail_in=n,s.wrap=A,q};var uo=lo,go=Ns,po=Ks,Co=ks,mo=oo,Io=ro,Go=co,bo=ho,fo="pako deflate (from Nodeca project)",yt={deflateInit:uo,deflateInit2:go,deflateReset:po,deflateResetKeep:Co,deflateSetHeader:mo,deflate:Io,deflateEnd:Go,deflateSetDictionary:bo,deflateInfo:fo};const yo=(i,t)=>Object.prototype.hasOwnProperty.call(i,t);var Xo=function(i){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const e=t.shift();if(e){if(typeof e!="object")throw new TypeError(e+"must be non-object");for(const s in e)yo(e,s)&&(i[s]=e[s])}}return i},Bo=i=>{let t=0;for(let s=0,A=i.length;s<A;s++)t+=i[s].length;const e=new Uint8Array(t);for(let s=0,A=0,n=i.length;s<n;s++){let a=i[s];e.set(a,A),A+=a.length}return e},Nt={assign:Xo,flattenChunks:Bo};let zs=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{zs=!1}const Xt=new Uint8Array(256);for(let i=0;i<256;i++)Xt[i]=i>=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1;Xt[254]=Xt[254]=1;var xo=i=>{if(typeof TextEncoder=="function"&&TextEncoder.prototype.encode)return new TextEncoder().encode(i);let t,e,s,A,n,a=i.length,o=0;for(A=0;A<a;A++)e=i.charCodeAt(A),(e&64512)===55296&&A+1<a&&(s=i.charCodeAt(A+1),(s&64512)===56320&&(e=65536+(e-55296<<10)+(s-56320),A++)),o+=e<128?1:e<2048?2:e<65536?3:4;for(t=new Uint8Array(o),n=0,A=0;n<o;A++)e=i.charCodeAt(A),(e&64512)===55296&&A+1<a&&(s=i.charCodeAt(A+1),(s&64512)===56320&&(e=65536+(e-55296<<10)+(s-56320),A++)),e<128?t[n++]=e:e<2048?(t[n++]=192|e>>>6,t[n++]=128|e&63):e<65536?(t[n++]=224|e>>>12,t[n++]=128|e>>>6&63,t[n++]=128|e&63):(t[n++]=240|e>>>18,t[n++]=128|e>>>12&63,t[n++]=128|e>>>6&63,t[n++]=128|e&63);return t};const Qo=(i,t)=>{if(t<65534&&i.subarray&&zs)return String.fromCharCode.apply(null,i.length===t?i:i.subarray(0,t));let e="";for(let s=0;s<t;s++)e+=String.fromCharCode(i[s]);return e};var Lo=(i,t)=>{const e=t||i.length;if(typeof TextDecoder=="function"&&TextDecoder.prototype.decode)return new TextDecoder().decode(i.subarray(0,t));let s,A;const n=new Array(e*2);for(A=0,s=0;s<e;){let a=i[s++];if(a<128){n[A++]=a;continue}let o=Xt[a];if(o>4){n[A++]=65533,s+=o-1;continue}for(a&=o===2?31:o===3?15:7;o>1&&s<e;)a=a<<6|i[s++]&63,o--;if(o>1){n[A++]=65533;continue}a<65536?n[A++]=a:(a-=65536,n[A++]=55296|a>>10&1023,n[A++]=56320|a&1023)}return Qo(n,A)},Eo=(i,t)=>{t=t||i.length,t>i.length&&(t=i.length);let e=t-1;for(;e>=0&&(i[e]&192)===128;)e--;return e<0||e===0?t:e+Xt[i[e]]>t?e:t},Bt={string2buf:xo,buf2string:Lo,utf8border:Eo};function Ro(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}var Fs=Ro;const Hs=Object.prototype.toString,{Z_NO_FLUSH:So,Z_SYNC_FLUSH:Mo,Z_FULL_FLUSH:Zo,Z_FINISH:wo,Z_OK:zt,Z_STREAM_END:Wo,Z_DEFAULT_COMPRESSION:Vo,Z_DEFAULT_STRATEGY:To,Z_DEFLATED:ko}=Ye;function xt(i){this.options=Nt.assign({level:Vo,method:ko,chunkSize:16384,windowBits:15,memLevel:8,strategy:To},i||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Fs,this.strm.avail_out=0;let e=yt.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(e!==zt)throw new Error(He[e]);if(t.header&&yt.deflateSetHeader(this.strm,t.header),t.dictionary){let s;if(typeof t.dictionary=="string"?s=Bt.string2buf(t.dictionary):Hs.call(t.dictionary)==="[object ArrayBuffer]"?s=new Uint8Array(t.dictionary):s=t.dictionary,e=yt.deflateSetDictionary(this.strm,s),e!==zt)throw new Error(He[e]);this._dict_set=!0}}xt.prototype.push=function(i,t){const e=this.strm,s=this.options.chunkSize;let A,n;if(this.ended)return!1;for(t===~~t?n=t:n=t===!0?wo:So,typeof i=="string"?e.input=Bt.string2buf(i):Hs.call(i)==="[object ArrayBuffer]"?e.input=new Uint8Array(i):e.input=i,e.next_in=0,e.avail_in=e.input.length;;){if(e.avail_out===0&&(e.output=new Uint8Array(s),e.next_out=0,e.avail_out=s),(n===Mo||n===Zo)&&e.avail_out<=6){this.onData(e.output.subarray(0,e.next_out)),e.avail_out=0;continue}if(A=yt.deflate(e,n),A===Wo)return e.next_out>0&&this.onData(e.output.subarray(0,e.next_out)),A=yt.deflateEnd(this.strm),this.onEnd(A),this.ended=!0,A===zt;if(e.avail_out===0){this.onData(e.output);continue}if(n>0&&e.next_out>0){this.onData(e.output.subarray(0,e.next_out)),e.avail_out=0;continue}if(e.avail_in===0)break}return!0},xt.prototype.onData=function(i){this.chunks.push(i)},xt.prototype.onEnd=function(i){i===zt&&(this.result=Nt.flattenChunks(this.chunks)),this.chunks=[],this.err=i,this.msg=this.strm.msg};function Ei(i,t){const e=new xt(t);if(e.push(i,!0),e.err)throw e.msg||He[e.err];return e.result}function Ko(i,t){return t=t||{},t.raw=!0,Ei(i,t)}function No(i,t){return t=t||{},t.gzip=!0,Ei(i,t)}var zo=xt,Fo=Ei,Ho=Ko,Yo=No,Uo=Ye,Do={Deflate:zo,deflate:Fo,deflateRaw:Ho,gzip:Yo,constants:Uo};const Ft=16209,Jo=16191;var vo=function(t,e){let s,A,n,a,o,r,l,c,h,p,u,C,b,I,G,f,X,m,x,R,B,M,E,Q;const Z=t.state;s=t.next_in,E=t.input,A=s+(t.avail_in-5),n=t.next_out,Q=t.output,a=n-(e-t.avail_out),o=n+(t.avail_out-257),r=Z.dmax,l=Z.wsize,c=Z.whave,h=Z.wnext,p=Z.window,u=Z.hold,C=Z.bits,b=Z.lencode,I=Z.distcode,G=(1<<Z.lenbits)-1,f=(1<<Z.distbits)-1;e:do{C<15&&(u+=E[s++]<<C,C+=8,u+=E[s++]<<C,C+=8),X=b[u&G];t:for(;;){if(m=X>>>24,u>>>=m,C-=m,m=X>>>16&255,m===0)Q[n++]=X&65535;else if(m&16){x=X&65535,m&=15,m&&(C<m&&(u+=E[s++]<<C,C+=8),x+=u&(1<<m)-1,u>>>=m,C-=m),C<15&&(u+=E[s++]<<C,C+=8,u+=E[s++]<<C,C+=8),X=I[u&f];i:for(;;){if(m=X>>>24,u>>>=m,C-=m,m=X>>>16&255,m&16){if(R=X&65535,m&=15,C<m&&(u+=E[s++]<<C,C+=8,C<m&&(u+=E[s++]<<C,C+=8)),R+=u&(1<<m)-1,R>r){t.msg="invalid distance too far back",Z.mode=Ft;break e}if(u>>>=m,C-=m,m=n-a,R>m){if(m=R-m,m>c&&Z.sane){t.msg="invalid distance too far back",Z.mode=Ft;break e}if(B=0,M=p,h===0){if(B+=l-m,m<x){x-=m;do Q[n++]=p[B++];while(--m);B=n-R,M=Q}}else if(h<m){if(B+=l+h-m,m-=h,m<x){x-=m;do Q[n++]=p[B++];while(--m);if(B=0,h<x){m=h,x-=m;do Q[n++]=p[B++];while(--m);B=n-R,M=Q}}}else if(B+=h-m,m<x){x-=m;do Q[n++]=p[B++];while(--m);B=n-R,M=Q}for(;x>2;)Q[n++]=M[B++],Q[n++]=M[B++],Q[n++]=M[B++],x-=3;x&&(Q[n++]=M[B++],x>1&&(Q[n++]=M[B++]))}else{B=n-R;do Q[n++]=Q[B++],Q[n++]=Q[B++],Q[n++]=Q[B++],x-=3;while(x>2);x&&(Q[n++]=Q[B++],x>1&&(Q[n++]=Q[B++]))}}else if(m&64){t.msg="invalid distance code",Z.mode=Ft;break e}else{X=I[(X&65535)+(u&(1<<m)-1)];continue i}break}}else if(m&64)if(m&32){Z.mode=Jo;break e}else{t.msg="invalid literal/length code",Z.mode=Ft;break e}else{X=b[(X&65535)+(u&(1<<m)-1)];continue t}break}}while(s<A&&n<o);x=C>>3,s-=x,C-=x<<3,u&=(1<<C)-1,t.next_in=s,t.next_out=n,t.avail_in=s<A?5+(A-s):5-(s-A),t.avail_out=n<o?257+(o-n):257-(n-o),Z.hold=u,Z.bits=C};const at=15,Ys=852,Us=592,Ds=0,Ri=1,Js=2,_o=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),Po=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),Oo=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),jo=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]);var Qt=(i,t,e,s,A,n,a,o)=>{const r=o.bits;let l=0,c=0,h=0,p=0,u=0,C=0,b=0,I=0,G=0,f=0,X,m,x,R,B,M=null,E;const Q=new Uint16Array(at+1),Z=new Uint16Array(at+1);let K=null,F,H,T;for(l=0;l<=at;l++)Q[l]=0;for(c=0;c<s;c++)Q[t[e+c]]++;for(u=r,p=at;p>=1&&Q[p]===0;p--);if(u>p&&(u=p),p===0)return A[n++]=1<<24|64<<16|0,A[n++]=1<<24|64<<16|0,o.bits=1,0;for(h=1;h<p&&Q[h]===0;h++);for(u<h&&(u=h),I=1,l=1;l<=at;l++)if(I<<=1,I-=Q[l],I<0)return-1;if(I>0&&(i===Ds||p!==1))return-1;for(Z[1]=0,l=1;l<at;l++)Z[l+1]=Z[l]+Q[l];for(c=0;c<s;c++)t[e+c]!==0&&(a[Z[t[e+c]]++]=c);if(i===Ds?(M=K=a,E=20):i===Ri?(M=_o,K=Po,E=257):(M=Oo,K=jo,E=0),f=0,c=0,l=h,B=n,C=u,b=0,x=-1,G=1<<u,R=G-1,i===Ri&&G>Ys||i===Js&&G>Us)return 1;for(;;){F=l-b,a[c]+1<E?(H=0,T=a[c]):a[c]>=E?(H=K[a[c]-E],T=M[a[c]-E]):(H=96,T=0),X=1<<l-b,m=1<<C,h=m;do m-=X,A[B+(f>>b)+m]=F<<24|H<<16|T|0;while(m!==0);for(X=1<<l-1;f&X;)X>>=1;if(X!==0?(f&=X-1,f+=X):f=0,c++,--Q[l]===0){if(l===p)break;l=t[e+a[c]]}if(l>u&&(f&R)!==x){for(b===0&&(b=u),B+=h,C=l-b,I=1<<C;C+b<p&&(I-=Q[C+b],!(I<=0));)C++,I<<=1;if(G+=1<<C,i===Ri&&G>Ys||i===Js&&G>Us)return 1;x=f&R,A[x]=u<<24|C<<16|B-n|0}}return f!==0&&(A[B+f]=l-b<<24|64<<16|0),o.bits=u,0};const qo=0,vs=1,_s=2,{Z_FINISH:Ps,Z_BLOCK:$o,Z_TREES:Ht,Z_OK:ve,Z_STREAM_END:el,Z_NEED_DICT:tl,Z_STREAM_ERROR:re,Z_DATA_ERROR:Os,Z_MEM_ERROR:js,Z_BUF_ERROR:il,Z_DEFLATED:qs}=Ye,Yt=16180,$s=16181,eA=16182,tA=16183,iA=16184,sA=16185,AA=16186,nA=16187,aA=16188,oA=16189,Ut=16190,Be=16191,Si=16192,lA=16193,Mi=16194,rA=16195,cA=16196,dA=16197,hA=16198,Dt=16199,Jt=16200,uA=16201,gA=16202,pA=16203,CA=16204,mA=16205,Zi=16206,IA=16207,GA=16208,D=16209,bA=16210,fA=16211,sl=852,Al=592,nl=15,yA=i=>(i>>>24&255)+(i>>>8&65280)+((i&65280)<<8)+((i&255)<<24);function al(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const _e=i=>{if(!i)return 1;const t=i.state;return!t||t.strm!==i||t.mode<Yt||t.mode>fA?1:0},XA=i=>{if(_e(i))return re;const t=i.state;return i.total_in=i.total_out=t.total=0,i.msg="",t.wrap&&(i.adler=t.wrap&1),t.mode=Yt,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(sl),t.distcode=t.distdyn=new Int32Array(Al),t.sane=1,t.back=-1,ve},BA=i=>{if(_e(i))return re;const t=i.state;return t.wsize=0,t.whave=0,t.wnext=0,XA(i)},xA=(i,t)=>{let e;if(_e(i))return re;const s=i.state;return t<0?(e=0,t=-t):(e=(t>>4)+5,t<48&&(t&=15)),t&&(t<8||t>15)?re:(s.window!==null&&s.wbits!==t&&(s.window=null),s.wrap=e,s.wbits=t,BA(i))},QA=(i,t)=>{if(!i)return re;const e=new al;i.state=e,e.strm=i,e.window=null,e.mode=Yt;const s=xA(i,t);return s!==ve&&(i.state=null),s},ol=i=>QA(i,nl);let LA=!0,wi,Wi;const ll=i=>{if(LA){wi=new Int32Array(512),Wi=new Int32Array(32);let t=0;for(;t<144;)i.lens[t++]=8;for(;t<256;)i.lens[t++]=9;for(;t<280;)i.lens[t++]=7;for(;t<288;)i.lens[t++]=8;for(Qt(vs,i.lens,0,288,wi,0,i.work,{bits:9}),t=0;t<32;)i.lens[t++]=5;Qt(_s,i.lens,0,32,Wi,0,i.work,{bits:5}),LA=!1}i.lencode=wi,i.lenbits=9,i.distcode=Wi,i.distbits=5},EA=(i,t,e,s)=>{let A;const n=i.state;return n.window===null&&(n.wsize=1<<n.wbits,n.wnext=0,n.whave=0,n.window=new Uint8Array(n.wsize)),s>=n.wsize?(n.window.set(t.subarray(e-n.wsize,e),0),n.wnext=0,n.whave=n.wsize):(A=n.wsize-n.wnext,A>s&&(A=s),n.window.set(t.subarray(e-s,e-s+A),n.wnext),s-=A,s?(n.window.set(t.subarray(e-s,e),0),n.wnext=s,n.whave=n.wsize):(n.wnext+=A,n.wnext===n.wsize&&(n.wnext=0),n.whave<n.wsize&&(n.whave+=A))),0},rl=(i,t)=>{let e,s,A,n,a,o,r,l,c,h,p,u,C,b,I=0,G,f,X,m,x,R,B,M;const E=new Uint8Array(4);let Q,Z;const K=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(_e(i)||!i.output||!i.input&&i.avail_in!==0)return re;e=i.state,e.mode===Be&&(e.mode=Si),a=i.next_out,A=i.output,r=i.avail_out,n=i.next_in,s=i.input,o=i.avail_in,l=e.hold,c=e.bits,h=o,p=r,M=ve;e:for(;;)switch(e.mode){case Yt:if(e.wrap===0){e.mode=Si;break}for(;c<16;){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}if(e.wrap&2&&l===35615){e.wbits===0&&(e.wbits=15),e.check=0,E[0]=l&255,E[1]=l>>>8&255,e.check=j(e.check,E,2,0),l=0,c=0,e.mode=$s;break}if(e.head&&(e.head.done=!1),!(e.wrap&1)||(((l&255)<<8)+(l>>8))%31){i.msg="incorrect header check",e.mode=D;break}if((l&15)!==qs){i.msg="unknown compression method",e.mode=D;break}if(l>>>=4,c-=4,B=(l&15)+8,e.wbits===0&&(e.wbits=B),B>15||B>e.wbits){i.msg="invalid window size",e.mode=D;break}e.dmax=1<<e.wbits,e.flags=0,i.adler=e.check=1,e.mode=l&512?oA:Be,l=0,c=0;break;case $s:for(;c<16;){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}if(e.flags=l,(e.flags&255)!==qs){i.msg="unknown compression method",e.mode=D;break}if(e.flags&57344){i.msg="unknown header flags set",e.mode=D;break}e.head&&(e.head.text=l>>8&1),e.flags&512&&e.wrap&4&&(E[0]=l&255,E[1]=l>>>8&255,e.check=j(e.check,E,2,0)),l=0,c=0,e.mode=eA;case eA:for(;c<32;){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}e.head&&(e.head.time=l),e.flags&512&&e.wrap&4&&(E[0]=l&255,E[1]=l>>>8&255,E[2]=l>>>16&255,E[3]=l>>>24&255,e.check=j(e.check,E,4,0)),l=0,c=0,e.mode=tA;case tA:for(;c<16;){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}e.head&&(e.head.xflags=l&255,e.head.os=l>>8),e.flags&512&&e.wrap&4&&(E[0]=l&255,E[1]=l>>>8&255,e.check=j(e.check,E,2,0)),l=0,c=0,e.mode=iA;case iA:if(e.flags&1024){for(;c<16;){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}e.length=l,e.head&&(e.head.extra_len=l),e.flags&512&&e.wrap&4&&(E[0]=l&255,E[1]=l>>>8&255,e.check=j(e.check,E,2,0)),l=0,c=0}else e.head&&(e.head.extra=null);e.mode=sA;case sA:if(e.flags&1024&&(u=e.length,u>o&&(u=o),u&&(e.head&&(B=e.head.extra_len-e.length,e.head.extra||(e.head.extra=new Uint8Array(e.head.extra_len)),e.head.extra.set(s.subarray(n,n+u),B)),e.flags&512&&e.wrap&4&&(e.check=j(e.check,s,u,n)),o-=u,n+=u,e.length-=u),e.length))break e;e.length=0,e.mode=AA;case AA:if(e.flags&2048){if(o===0)break e;u=0;do B=s[n+u++],e.head&&B&&e.length<65536&&(e.head.name+=String.fromCharCode(B));while(B&&u<o);if(e.flags&512&&e.wrap&4&&(e.check=j(e.check,s,u,n)),o-=u,n+=u,B)break e}else e.head&&(e.head.name=null);e.length=0,e.mode=nA;case nA:if(e.flags&4096){if(o===0)break e;u=0;do B=s[n+u++],e.head&&B&&e.length<65536&&(e.head.comment+=String.fromCharCode(B));while(B&&u<o);if(e.flags&512&&e.wrap&4&&(e.check=j(e.check,s,u,n)),o-=u,n+=u,B)break e}else e.head&&(e.head.comment=null);e.mode=aA;case aA:if(e.flags&512){for(;c<16;){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}if(e.wrap&4&&l!==(e.check&65535)){i.msg="header crc mismatch",e.mode=D;break}l=0,c=0}e.head&&(e.head.hcrc=e.flags>>9&1,e.head.done=!0),i.adler=e.check=0,e.mode=Be;break;case oA:for(;c<32;){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}i.adler=e.check=yA(l),l=0,c=0,e.mode=Ut;case Ut:if(e.havedict===0)return i.next_out=a,i.avail_out=r,i.next_in=n,i.avail_in=o,e.hold=l,e.bits=c,tl;i.adler=e.check=1,e.mode=Be;case Be:if(t===$o||t===Ht)break e;case Si:if(e.last){l>>>=c&7,c-=c&7,e.mode=Zi;break}for(;c<3;){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}switch(e.last=l&1,l>>>=1,c-=1,l&3){case 0:e.mode=lA;break;case 1:if(ll(e),e.mode=Dt,t===Ht){l>>>=2,c-=2;break e}break;case 2:e.mode=cA;break;case 3:i.msg="invalid block type",e.mode=D}l>>>=2,c-=2;break;case lA:for(l>>>=c&7,c-=c&7;c<32;){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}if((l&65535)!==(l>>>16^65535)){i.msg="invalid stored block lengths",e.mode=D;break}if(e.length=l&65535,l=0,c=0,e.mode=Mi,t===Ht)break e;case Mi:e.mode=rA;case rA:if(u=e.length,u){if(u>o&&(u=o),u>r&&(u=r),u===0)break e;A.set(s.subarray(n,n+u),a),o-=u,n+=u,r-=u,a+=u,e.length-=u;break}e.mode=Be;break;case cA:for(;c<14;){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}if(e.nlen=(l&31)+257,l>>>=5,c-=5,e.ndist=(l&31)+1,l>>>=5,c-=5,e.ncode=(l&15)+4,l>>>=4,c-=4,e.nlen>286||e.ndist>30){i.msg="too many length or distance symbols",e.mode=D;break}e.have=0,e.mode=dA;case dA:for(;e.have<e.ncode;){for(;c<3;){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}e.lens[K[e.have++]]=l&7,l>>>=3,c-=3}for(;e.have<19;)e.lens[K[e.have++]]=0;if(e.lencode=e.lendyn,e.lenbits=7,Q={bits:e.lenbits},M=Qt(qo,e.lens,0,19,e.lencode,0,e.work,Q),e.lenbits=Q.bits,M){i.msg="invalid code lengths set",e.mode=D;break}e.have=0,e.mode=hA;case hA:for(;e.have<e.nlen+e.ndist;){for(;I=e.lencode[l&(1<<e.lenbits)-1],G=I>>>24,f=I>>>16&255,X=I&65535,!(G<=c);){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}if(X<16)l>>>=G,c-=G,e.lens[e.have++]=X;else{if(X===16){for(Z=G+2;c<Z;){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}if(l>>>=G,c-=G,e.have===0){i.msg="invalid bit length repeat",e.mode=D;break}B=e.lens[e.have-1],u=3+(l&3),l>>>=2,c-=2}else if(X===17){for(Z=G+3;c<Z;){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}l>>>=G,c-=G,B=0,u=3+(l&7),l>>>=3,c-=3}else{for(Z=G+7;c<Z;){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}l>>>=G,c-=G,B=0,u=11+(l&127),l>>>=7,c-=7}if(e.have+u>e.nlen+e.ndist){i.msg="invalid bit length repeat",e.mode=D;break}for(;u--;)e.lens[e.have++]=B}}if(e.mode===D)break;if(e.lens[256]===0){i.msg="invalid code -- missing end-of-block",e.mode=D;break}if(e.lenbits=9,Q={bits:e.lenbits},M=Qt(vs,e.lens,0,e.nlen,e.lencode,0,e.work,Q),e.lenbits=Q.bits,M){i.msg="invalid literal/lengths set",e.mode=D;break}if(e.distbits=6,e.distcode=e.distdyn,Q={bits:e.distbits},M=Qt(_s,e.lens,e.nlen,e.ndist,e.distcode,0,e.work,Q),e.distbits=Q.bits,M){i.msg="invalid distances set",e.mode=D;break}if(e.mode=Dt,t===Ht)break e;case Dt:e.mode=Jt;case Jt:if(o>=6&&r>=258){i.next_out=a,i.avail_out=r,i.next_in=n,i.avail_in=o,e.hold=l,e.bits=c,vo(i,p),a=i.next_out,A=i.output,r=i.avail_out,n=i.next_in,s=i.input,o=i.avail_in,l=e.hold,c=e.bits,e.mode===Be&&(e.back=-1);break}for(e.back=0;I=e.lencode[l&(1<<e.lenbits)-1],G=I>>>24,f=I>>>16&255,X=I&65535,!(G<=c);){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}if(f&&!(f&240)){for(m=G,x=f,R=X;I=e.lencode[R+((l&(1<<m+x)-1)>>m)],G=I>>>24,f=I>>>16&255,X=I&65535,!(m+G<=c);){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}l>>>=m,c-=m,e.back+=m}if(l>>>=G,c-=G,e.back+=G,e.length=X,f===0){e.mode=mA;break}if(f&32){e.back=-1,e.mode=Be;break}if(f&64){i.msg="invalid literal/length code",e.mode=D;break}e.extra=f&15,e.mode=uA;case uA:if(e.extra){for(Z=e.extra;c<Z;){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}e.length+=l&(1<<e.extra)-1,l>>>=e.extra,c-=e.extra,e.back+=e.extra}e.was=e.length,e.mode=gA;case gA:for(;I=e.distcode[l&(1<<e.distbits)-1],G=I>>>24,f=I>>>16&255,X=I&65535,!(G<=c);){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}if(!(f&240)){for(m=G,x=f,R=X;I=e.distcode[R+((l&(1<<m+x)-1)>>m)],G=I>>>24,f=I>>>16&255,X=I&65535,!(m+G<=c);){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}l>>>=m,c-=m,e.back+=m}if(l>>>=G,c-=G,e.back+=G,f&64){i.msg="invalid distance code",e.mode=D;break}e.offset=X,e.extra=f&15,e.mode=pA;case pA:if(e.extra){for(Z=e.extra;c<Z;){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}e.offset+=l&(1<<e.extra)-1,l>>>=e.extra,c-=e.extra,e.back+=e.extra}if(e.offset>e.dmax){i.msg="invalid distance too far back",e.mode=D;break}e.mode=CA;case CA:if(r===0)break e;if(u=p-r,e.offset>u){if(u=e.offset-u,u>e.whave&&e.sane){i.msg="invalid distance too far back",e.mode=D;break}u>e.wnext?(u-=e.wnext,C=e.wsize-u):C=e.wnext-u,u>e.length&&(u=e.length),b=e.window}else b=A,C=a-e.offset,u=e.length;u>r&&(u=r),r-=u,e.length-=u;do A[a++]=b[C++];while(--u);e.length===0&&(e.mode=Jt);break;case mA:if(r===0)break e;A[a++]=e.length,r--,e.mode=Jt;break;case Zi:if(e.wrap){for(;c<32;){if(o===0)break e;o--,l|=s[n++]<<c,c+=8}if(p-=r,i.total_out+=p,e.total+=p,e.wrap&4&&p&&(i.adler=e.check=e.flags?j(e.check,A,p,a-p):mt(e.check,A,p,a-p)),p=r,e.wrap&4&&(e.flags?l:yA(l))!==e.check){i.msg="incorrect data check",e.mode=D;break}l=0,c=0}e.mode=IA;case IA:if(e.wrap&&e.flags){for(;c<32;){if(o===0)break e;o--,l+=s[n++]<<c,c+=8}if(e.wrap&4&&l!==(e.total&4294967295)){i.msg="incorrect length check",e.mode=D;break}l=0,c=0}e.mode=GA;case GA:M=el;break e;case D:M=Os;break e;case bA:return js;case fA:default:return re}return i.next_out=a,i.avail_out=r,i.next_in=n,i.avail_in=o,e.hold=l,e.bits=c,(e.wsize||p!==i.avail_out&&e.mode<D&&(e.mode<Zi||t!==Ps))&&EA(i,i.output,i.next_out,p-i.avail_out),h-=i.avail_in,p-=i.avail_out,i.total_in+=h,i.total_out+=p,e.total+=p,e.wrap&4&&p&&(i.adler=e.check=e.flags?j(e.check,A,p,i.next_out-p):mt(e.check,A,p,i.next_out-p)),i.data_type=e.bits+(e.last?64:0)+(e.mode===Be?128:0)+(e.mode===Dt||e.mode===Mi?256:0),(h===0&&p===0||t===Ps)&&M===ve&&(M=il),M},cl=i=>{if(_e(i))return re;let t=i.state;return t.window&&(t.window=null),i.state=null,ve},dl=(i,t)=>{if(_e(i))return re;const e=i.state;return e.wrap&2?(e.head=t,t.done=!1,ve):re},hl=(i,t)=>{const e=t.length;let s,A,n;return _e(i)||(s=i.state,s.wrap!==0&&s.mode!==Ut)?re:s.mode===Ut&&(A=1,A=mt(A,t,e,0),A!==s.check)?Os:(n=EA(i,t,e,e),n?(s.mode=bA,js):(s.havedict=1,ve))};var ul=BA,gl=xA,pl=XA,Cl=ol,ml=QA,Il=rl,Gl=cl,bl=dl,fl=hl,yl="pako inflate (from Nodeca project)",xe={inflateReset:ul,inflateReset2:gl,inflateResetKeep:pl,inflateInit:Cl,inflateInit2:ml,inflate:Il,inflateEnd:Gl,inflateGetHeader:bl,inflateSetDictionary:fl,inflateInfo:yl};function Xl(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}var Bl=Xl;const RA=Object.prototype.toString,{Z_NO_FLUSH:xl,Z_FINISH:Ql,Z_OK:Lt,Z_STREAM_END:Vi,Z_NEED_DICT:Ti,Z_STREAM_ERROR:Ll,Z_DATA_ERROR:SA,Z_MEM_ERROR:El}=Ye;function Et(i){this.options=Nt.assign({chunkSize:1024*64,windowBits:15,to:""},i||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,t.windowBits===0&&(t.windowBits=-15)),t.windowBits>=0&&t.windowBits<16&&!(i&&i.windowBits)&&(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(t.windowBits&15||(t.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Fs,this.strm.avail_out=0;let e=xe.inflateInit2(this.strm,t.windowBits);if(e!==Lt)throw new Error(He[e]);if(this.header=new Bl,xe.inflateGetHeader(this.strm,this.header),t.dictionary&&(typeof t.dictionary=="string"?t.dictionary=Bt.string2buf(t.dictionary):RA.call(t.dictionary)==="[object ArrayBuffer]"&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(e=xe.inflateSetDictionary(this.strm,t.dictionary),e!==Lt)))throw new Error(He[e])}Et.prototype.push=function(i,t){const e=this.strm,s=this.options.chunkSize,A=this.options.dictionary;let n,a,o;if(this.ended)return!1;for(t===~~t?a=t:a=t===!0?Ql:xl,RA.call(i)==="[object ArrayBuffer]"?e.input=new Uint8Array(i):e.input=i,e.next_in=0,e.avail_in=e.input.length;;){for(e.avail_out===0&&(e.output=new Uint8Array(s),e.next_out=0,e.avail_out=s),n=xe.inflate(e,a),n===Ti&&A&&(n=xe.inflateSetDictionary(e,A),n===Lt?n=xe.inflate(e,a):n===SA&&(n=Ti));e.avail_in>0&&n===Vi&&e.state.wrap>0&&i[e.next_in]!==0;)xe.inflateReset(e),n=xe.inflate(e,a);switch(n){case Ll:case SA:case Ti:case El:return this.onEnd(n),this.ended=!0,!1}if(o=e.avail_out,e.next_out&&(e.avail_out===0||n===Vi))if(this.options.to==="string"){let r=Bt.utf8border(e.output,e.next_out),l=e.next_out-r,c=Bt.buf2string(e.output,r);e.next_out=l,e.avail_out=s-l,l&&e.output.set(e.output.subarray(r,r+l),0),this.onData(c)}else this.onData(e.output.length===e.next_out?e.output:e.output.subarray(0,e.next_out));if(!(n===Lt&&o===0)){if(n===Vi)return n=xe.inflateEnd(this.strm),this.onEnd(n),this.ended=!0,!0;if(e.avail_in===0)break}}return!0},Et.prototype.onData=function(i){this.chunks.push(i)},Et.prototype.onEnd=function(i){i===Lt&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=Nt.flattenChunks(this.chunks)),this.chunks=[],this.err=i,this.msg=this.strm.msg};function ki(i,t){const e=new Et(t);if(e.push(i),e.err)throw e.msg||He[e.err];return e.result}function Rl(i,t){return t=t||{},t.raw=!0,ki(i,t)}var Sl=Et,Ml=ki,Zl=Rl,wl=ki,Wl=Ye,Vl={Inflate:Sl,inflate:Ml,inflateRaw:Zl,ungzip:wl,constants:Wl};const{Deflate:Tl,deflate:kl,deflateRaw:Kl,gzip:Nl}=Do,{Inflate:zl,inflate:Fl,inflateRaw:Hl,ungzip:Yl}=Vl;var Ul=Tl,Dl=kl,Jl=Kl,vl=Nl,_l=zl,Pl=Fl,Ol=Hl,jl=Yl,ql=Ye,MA={Deflate:Ul,deflate:Dl,deflateRaw:Jl,gzip:vl,Inflate:_l,inflate:Pl,inflateRaw:Ol,ungzip:jl,constants:ql};class Ki{constructor(t,e,s,A){d(this,"pathOrUrl");d(this,"headers");d(this,"stats");d(this,"isInitializing");d(this,"isInitialized");d(this,"textureType");d(this,"fileIndex");d(this,"textures");d(this,"renderer");d(this,"hashCode");if(this.pathOrUrl=t,this.renderer=e,this.hashCode=s,this.headers={pragma:"no-cache","cache-control":"no-cache","content-type":"multipart/byteranges"},this.isInitialized=!1,A!=null)for(const n of Object.keys(A))A[n]!=null?this.headers[n]=A[n]:delete this.headers[n]}async init(){this.stats={packagesDownloaded:0,bytesDownloaded:0,bytesFromCache:0},this.isInitializing=!0;const t=await this.fetchRangeText([0,16]);if(t.substring(0,8)!="v.00001;")return!1;const s=Number(t.substring(8,15)),n=(await this.fetchRangeText([16,s-16])).split(";"),a={};for(const h of n){const p=h.split("=");a[p[0]]=p[1]}if(!a.indexSize)return!1;if(a.signature){const h=ea(this.hashCode),p=h.substring(0,4)+h.substring(6,8)+h.substring(10,14)+h.substring(18,22)+h.substring(24,26);if(a.signature!=p)return console.error("Signature mismatch!"),!1}const o=Number(a.indexSize),r=await this.fetchRange([s,s+o-1]),l=MA.inflate(r);a.textureType?this.textureType=a.textureType:this.textureType="jpg";const c=new TextDecoder().decode(l).split(";");this.fileIndex={},this.textures={};for(let h=0;h<c.length-3;){const p=Number(c[h++]),u=Number(c[h++]),C=c[h++];this.fileIndex[C]=[p+s+o,u],se.instance.logCollider&&C==="collider.xrgc"&&console.log(`Embedded collider size: ${ls(u)} (path: ${this.pathOrUrl})`)}for(const h in this.fileIndex)this.fileIndex.hasOwnProperty(h)&&(h.endsWith("ktx2")||h.endsWith("jpg")||h.endsWith("png"))&&(this.textures[h]=new na(h,this.renderer));return this.isInitializing=!1,this.isInitialized=!0,!0}getFileSize(t){return this.isInitialized&&this.fileIndex[t]?this.fileIndex[t][1]:0}getFileIndex(){return this.fileIndex}releaseFiles(t){for(const e of t)e in this.textures&&this.textures[e].release()}async fetchFiles(t){const e={},s=[],A=new Set;for(const a of t)a in this.textures&&this.textures[a].addCount(),a in this.textures&&this.textures[a].state==rs.Available?e[a]=this.textures[a].loadTexture():this.fileIndex[a]&&!A.has(a)&&(s.push({p:this.fileIndex[a][0],f:a}),A.add(a));s.sort((a,o)=>a.p-o.p);const n=[];for(let a=0;a<s.length;a++){const o=this.fileIndex[s[a].f][0],r=this.fileIndex[s[a].f][1],l=s[a].f;if(a==0||o>n[n.length-1].e+1){const c={s:o,e:o+r-1,fs:[l],fr:[[0,r]]};n.push(c)}else{n[n.length-1].e=o+r-1,n[n.length-1].fs.push(l);const c=n[n.length-1].fr,h=c[c.length-1][1];n[n.length-1].fr.push([h,h+r])}}try{let a=[];for(const o of n)a.push(this.fetchRange([o.s,o.e]).then(r=>{o.b=r})),a.length>=200&&(await Promise.all(a),a=[]);await Promise.all(a)}catch(a){console.error("Error fetching : "+t+" _ "+a)}for(const a of n){const o=a.b,r=[];for(let l=0;l<a.fs.length;l++){const c=a.fr[l],h=o.slice(c[0],c[1]);a.fs[l]in this.textures?r.push(this.textures[a.fs[l]].createTexture(h).then(p=>{e[a.fs[l]]=p})):e[a.fs[l]]=h}await Promise.all(r)}return e}async fetchFileText(t){const e=await this.fetchFile(t);return new TextDecoder().decode(e)}async fetchRange(t){this.stats.packagesDownloaded++,this.stats.bytesDownloaded+=t[1]-t[0]+1;const e=this.headers;return e.range="bytes="+t[0].toString()+"-"+t[1].toString(),fetch(this.pathOrUrl,{headers:e}).then(s=>{if(s.ok)return s.arrayBuffer();throw"Range "+t[0].toString()+"-"+t[1].toString()+" failed!"}).then(s=>new Uint8Array(s)).catch(s=>{throw console.error(s),s})}async fetchRangeText(t){const e={...this.headers};return e.range=`bytes=${t[0].toString()}-${(t[0]+t[1]-1).toString()}`,fetch(this.pathOrUrl,{headers:e}).then(s=>{if(s.ok)return s.text();throw new Error(`Range ${t[0]}-${t[1]} failed`)}).catch(s=>{throw console.error(s),s})}async fetchFile(t){for(!this.isInitialized&&!this.isInitializing&&await this.init();this.isInitializing;)await new Promise(A=>{setTimeout(A,100)});const e=this.pathOrUrl+"/"+t,s=ct.instance.getElement(e);if(s)return s;if(this.fileIndex[t]){const A=this.fileIndex[t][0],n=this.fileIndex[t][1],a=await this.fetchRange([A,A+n-1]);return ct.instance.addElement(a,a.length,e),a}else if(this.fileIndex[t+".compressed"]){const A=this.fileIndex[t+".compressed"][0],n=this.fileIndex[t+".compressed"][1],a=await this.fetchRange([A,A+n-1]),o=MA.inflate(a);return ct.instance.addElement(o,o.length,e),o}else return new Uint8Array}}class de{constructor(t=0,e=0,s=0,A=1){d(this,"r");d(this,"g");d(this,"b");d(this,"a");typeof t=="number"?(this.r=t,this.g=e,this.b=s,this.a=A):(this.r=t.r,this.g=t.g,this.b=t.b,this.a=t.a)}static fromArray(t){return t==null?null:new de(t[0],t[1],t[2],t.length>=4?t[3]:1)}static fromArrayAllowNull(t){return t==null?null:de.fromArray(t)}}class $l{constructor(t){d(this,"indices");d(this,"positions");d(this,"normals");d(this,"uvs");d(this,"colors");d(this,"boundingSphere");this.indices=t.indBuff,this.positions=t.posBuff,this.normals=t.norBuff,this.uvs=[],this.uvs.push(t.uvBuff[0]??new Float32Array);for(let e=1;e<t.uvBuff.length;e++)this.uvs.push(t.uvBuff[e]);this.colors=t.colorBuff,this.boundingSphere=t.boundingSphere}}class vt extends $l{constructor(e,s,A,n){super(n);d(this,"node");d(this,"colorMapAlpha");d(this,"colorMap");d(this,"metRoughMap");d(this,"diffuseMap");d(this,"specularGlossinessMap");d(this,"normalMap");d(this,"aoMap");d(this,"emissiveMap");d(this,"lightMap");d(this,"transmissionMap");d(this,"thicknessMap");d(this,"clearCoatMap");d(this,"clearCoatRoughnessMap");d(this,"clearCoatNormalMap");d(this,"specularMap");d(this,"specularColorMap");d(this,"sheenMap");d(this,"sheenRoughnessMap");d(this,"normalScale");d(this,"emissiveColor");d(this,"alphaMode");d(this,"color");d(this,"metalness");d(this,"roughness");d(this,"aoScale");d(this,"isDoubleSided");d(this,"isLightMapRgbm");this.node=e,s!==-1&&(this.colorMapAlpha=A[e.colorMapAlpha[s]],this.colorMap=A[e.colorMap[s]],this.aoMap=A[e.occlusionMap[s]],this.emissiveMap=A[e.emissiveMap[s]],this.metRoughMap=A[e.metRoughMap[s]],this.normalMap=A[e.normalMap[s]],this.normalScale=n.normalScale,this.emissiveColor=de.fromArrayAllowNull(n.emissiveScale)),this.alphaMode=n.alphaMode,this.color=de.fromArrayAllowNull(n.albedo),this.metalness=n.metalness,this.roughness=n.roughness,this.aoScale=n.occlusionScale,this.isDoubleSided=n.isDoubleSided,e.lightMap&&(this.lightMap=A[e.lightMap[s]],this.isLightMapRgbm=n.isLightMapRgbm),e.transmissionMap&&(this.transmissionMap=A[e.transmissionMap[s]]),e.thicknessMap&&(this.thicknessMap=A[e.thicknessMap[s]]),e.clearCoatMap&&(this.clearCoatMap=A[e.clearCoatMap[s]]),e.clearCoatRoughnessMap&&(this.clearCoatRoughnessMap=A[e.clearCoatRoughnessMap[s]]),e.clearCoatNormalMap&&(this.clearCoatNormalMap=A[e.clearCoatNormalMap[s]]),e.specularMap&&(this.specularMap=A[e.specularMap[s]]),e.specularColorMap&&(this.specularColorMap=A[e.specularColorMap[s]]),e.diffuseMap&&(this.diffuseMap=A[e.diffuseMap[s]]),e.specularGlossinessMap&&(this.specularGlossinessMap=A[e.specularGlossinessMap[s]]),e.sheenMap&&(this.sheenMap=A[e.sheenMap[s]]),e.sheenRoughnessMap&&(this.sheenRoughnessMap=A[e.sheenRoughnessMap[s]])}}class S{constructor(t=0,e=0){d(this,"x");d(this,"y");typeof t=="number"?(this.x=t,this.y=e):(this.x=t.x,this.y=t.y)}static fromArray(t){return t==null?null:new S(t[0],t[1])}add(t){return this.x+=t.x,this.y+=t.y,this}static add(t,e){return new S(t.x+e.x,t.y+e.y)}sub(t){return this.x-=t.x,this.y-=t.y,this}static sub(t,e){return new S(t.x-e.x,t.y-e.y)}subScalar(t){return this.x-=t,this.y-=t,this}static subScalar(t,e){return new S(t.x-e,t.y-e)}mul(t){return this.x*=t.x,this.y*=t.y,this}static mul(t,e){return new S(t.x*e.x,t.y*e.y)}mulScalar(t){return this.x*=t,this.y*=t,this}static mulScalar(t,e){return new S(t.x*e,t.y*e)}div(t){return this.x/=t.x,this.y/=t.y,this}static div(t,e){return new S(t.x/e.x,t.y/e.y)}divScalar(t){return this.x/=t,this.y/=t,this}static divScalar(t,e){return new S(t.x/e,t.y/e)}normalize(){const t=this.lengthSq();if(t>0){const e=1/Math.sqrt(t);this.x*=e,this.y*=e}return this}static normalize(t){const e=t.x*t.x+t.y*t.y;if(e>0){const s=1/Math.sqrt(e);t.x*=s,t.y*=s}return t}lerp(t,e,s){return this.x=t.x+s*(e.x-t.x),this.y=t.y+s*(e.y-t.y),this}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}static length(t){return Math.sqrt(t.x*t.x+t.y*t.y)}lengthSq(){return this.x*this.x+this.y*this.y}static lengthSq(t){return t.x*t.x+t.y*t.y}distance(t){const e=this.x-t.x,s=this.y-t.y;return Math.sqrt(e*e+s*s)}static distance(t,e){const s=t.x-e.x,A=t.y-e.y;return Math.sqrt(s*s+A*A)}distanceSq(t){const e=this.x-t.x,s=this.y-t.y;return e*e+s*s}static distanceSq(t,e){const s=t.x-e.x,A=t.y-e.y;return s*s+A*A}clone(){return new S(this.x,this.y)}static clone(t){return new S(t.x,t.y)}set(t,e){return this.x=t,this.y=e,this}copy(t){return this.x=t.x,this.y=t.y,this}equals(t,e=!1){return e?pe(this.x,t.x)&&pe(this.y,t.y):this.x===t.x&&this.y===t.y}static equals(t,e,s=!1){return s?pe(t.x,e.x)&&pe(t.y,e.y):t.x===e.x&&t.y===e.y}toString(){return`${this.x}, ${this.y}`}static toString(t){return`${t.x}, ${t.y}`}toPlayCanvasVector(t=new Se){return t.set(this.x,this.y),t}}const ZA="dmFyIExlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgVmU9KHR0LGV0LFN0KT0+ZXQgaW4gdHQ/TGUodHQsZXQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlN0fSk6dHRbZXRdPVN0O3ZhciBjdD0odHQsZXQsU3QpPT5WZSh0dCx0eXBlb2YgZXQhPSJzeW1ib2wiP2V0KyIiOmV0LFN0KTsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7LyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAyMDEwLTIwMjQgVGhyZWUuanMgQXV0aG9ycwogKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCiAqL2NvbnN0IHR0PSIxNjciLGdlPSIiO2NsYXNzIEx0e2FkZEV2ZW50TGlzdGVuZXIodCxlKXt0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDAmJih0aGlzLl9saXN0ZW5lcnM9e30pO2NvbnN0IGk9dGhpcy5fbGlzdGVuZXJzO2lbdF09PT12b2lkIDAmJihpW3RdPVtdKSxpW3RdLmluZGV4T2YoZSk9PT0tMSYmaVt0XS5wdXNoKGUpfWhhc0V2ZW50TGlzdGVuZXIodCxlKXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuITE7Y29uc3QgaT10aGlzLl9saXN0ZW5lcnM7cmV0dXJuIGlbdF0hPT12b2lkIDAmJmlbdF0uaW5kZXhPZihlKSE9PS0xfXJlbW92ZUV2ZW50TGlzdGVuZXIodCxlKXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuO2NvbnN0IHM9dGhpcy5fbGlzdGVuZXJzW3RdO2lmKHMhPT12b2lkIDApe2NvbnN0IG49cy5pbmRleE9mKGUpO24hPT0tMSYmcy5zcGxpY2UobiwxKX19ZGlzcGF0Y2hFdmVudCh0KXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuO2NvbnN0IGk9dGhpcy5fbGlzdGVuZXJzW3QudHlwZV07aWYoaSE9PXZvaWQgMCl7dC50YXJnZXQ9dGhpcztjb25zdCBzPWkuc2xpY2UoMCk7Zm9yKGxldCBuPTAsbz1zLmxlbmd0aDtuPG87bisrKXNbbl0uY2FsbCh0aGlzLHQpO3QudGFyZ2V0PW51bGx9fX1jb25zdCBJPVsiMDAiLCIwMSIsIjAyIiwiMDMiLCIwNCIsIjA1IiwiMDYiLCIwNyIsIjA4IiwiMDkiLCIwYSIsIjBiIiwiMGMiLCIwZCIsIjBlIiwiMGYiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSIsIjFhIiwiMWIiLCIxYyIsIjFkIiwiMWUiLCIxZiIsIjIwIiwiMjEiLCIyMiIsIjIzIiwiMjQiLCIyNSIsIjI2IiwiMjciLCIyOCIsIjI5IiwiMmEiLCIyYiIsIjJjIiwiMmQiLCIyZSIsIjJmIiwiMzAiLCIzMSIsIjMyIiwiMzMiLCIzNCIsIjM1IiwiMzYiLCIzNyIsIjM4IiwiMzkiLCIzYSIsIjNiIiwiM2MiLCIzZCIsIjNlIiwiM2YiLCI0MCIsIjQxIiwiNDIiLCI0MyIsIjQ0IiwiNDUiLCI0NiIsIjQ3IiwiNDgiLCI0OSIsIjRhIiwiNGIiLCI0YyIsIjRkIiwiNGUiLCI0ZiIsIjUwIiwiNTEiLCI1MiIsIjUzIiwiNTQiLCI1NSIsIjU2IiwiNTciLCI1OCIsIjU5IiwiNWEiLCI1YiIsIjVjIiwiNWQiLCI1ZSIsIjVmIiwiNjAiLCI2MSIsIjYyIiwiNjMiLCI2NCIsIjY1IiwiNjYiLCI2NyIsIjY4IiwiNjkiLCI2YSIsIjZiIiwiNmMiLCI2ZCIsIjZlIiwiNmYiLCI3MCIsIjcxIiwiNzIiLCI3MyIsIjc0IiwiNzUiLCI3NiIsIjc3IiwiNzgiLCI3OSIsIjdhIiwiN2IiLCI3YyIsIjdkIiwiN2UiLCI3ZiIsIjgwIiwiODEiLCI4MiIsIjgzIiwiODQiLCI4NSIsIjg2IiwiODciLCI4OCIsIjg5IiwiOGEiLCI4YiIsIjhjIiwiOGQiLCI4ZSIsIjhmIiwiOTAiLCI5MSIsIjkyIiwiOTMiLCI5NCIsIjk1IiwiOTYiLCI5NyIsIjk4IiwiOTkiLCI5YSIsIjliIiwiOWMiLCI5ZCIsIjllIiwiOWYiLCJhMCIsImExIiwiYTIiLCJhMyIsImE0IiwiYTUiLCJhNiIsImE3IiwiYTgiLCJhOSIsImFhIiwiYWIiLCJhYyIsImFkIiwiYWUiLCJhZiIsImIwIiwiYjEiLCJiMiIsImIzIiwiYjQiLCJiNSIsImI2IiwiYjciLCJiOCIsImI5IiwiYmEiLCJiYiIsImJjIiwiYmQiLCJiZSIsImJmIiwiYzAiLCJjMSIsImMyIiwiYzMiLCJjNCIsImM1IiwiYzYiLCJjNyIsImM4IiwiYzkiLCJjYSIsImNiIiwiY2MiLCJjZCIsImNlIiwiY2YiLCJkMCIsImQxIiwiZDIiLCJkMyIsImQ0IiwiZDUiLCJkNiIsImQ3IiwiZDgiLCJkOSIsImRhIiwiZGIiLCJkYyIsImRkIiwiZGUiLCJkZiIsImUwIiwiZTEiLCJlMiIsImUzIiwiZTQiLCJlNSIsImU2IiwiZTciLCJlOCIsImU5IiwiZWEiLCJlYiIsImVjIiwiZWQiLCJlZSIsImVmIiwiZjAiLCJmMSIsImYyIiwiZjMiLCJmNCIsImY1IiwiZjYiLCJmNyIsImY4IiwiZjkiLCJmYSIsImZiIiwiZmMiLCJmZCIsImZlIiwiZmYiXTtmdW5jdGlvbiBQdCgpe2NvbnN0IGM9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAsdD1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCxlPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLGk9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDA7cmV0dXJuKElbYyYyNTVdK0lbYz4+OCYyNTVdK0lbYz4+MTYmMjU1XStJW2M+PjI0JjI1NV0rIi0iK0lbdCYyNTVdK0lbdD4+OCYyNTVdKyItIitJW3Q+PjE2JjE1fDY0XStJW3Q+PjI0JjI1NV0rIi0iK0lbZSY2M3wxMjhdK0lbZT4+OCYyNTVdKyItIitJW2U+PjE2JjI1NV0rSVtlPj4yNCYyNTVdK0lbaSYyNTVdK0lbaT4+OCYyNTVdK0lbaT4+MTYmMjU1XStJW2k+PjI0JjI1NV0pLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gSihjLHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4oZSxjKSl9ZnVuY3Rpb24gQnQoYyx0KXtzd2l0Y2godC5jb25zdHJ1Y3Rvcil7Y2FzZSBGbG9hdDMyQXJyYXk6cmV0dXJuIGM7Y2FzZSBVaW50MzJBcnJheTpyZXR1cm4gYy80Mjk0OTY3Mjk1O2Nhc2UgVWludDE2QXJyYXk6cmV0dXJuIGMvNjU1MzU7Y2FzZSBVaW50OEFycmF5OnJldHVybiBjLzI1NTtjYXNlIEludDMyQXJyYXk6cmV0dXJuIE1hdGgubWF4KGMvMjE0NzQ4MzY0NywtMSk7Y2FzZSBJbnQxNkFycmF5OnJldHVybiBNYXRoLm1heChjLzMyNzY3LC0xKTtjYXNlIEludDhBcnJheTpyZXR1cm4gTWF0aC5tYXgoYy8xMjcsLTEpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbXBvbmVudCB0eXBlLiIpfX1mdW5jdGlvbiBEKGMsdCl7c3dpdGNoKHQuY29uc3RydWN0b3Ipe2Nhc2UgRmxvYXQzMkFycmF5OnJldHVybiBjO2Nhc2UgVWludDMyQXJyYXk6cmV0dXJuIE1hdGgucm91bmQoYyo0Mjk0OTY3Mjk1KTtjYXNlIFVpbnQxNkFycmF5OnJldHVybiBNYXRoLnJvdW5kKGMqNjU1MzUpO2Nhc2UgVWludDhBcnJheTpyZXR1cm4gTWF0aC5yb3VuZChjKjI1NSk7Y2FzZSBJbnQzMkFycmF5OnJldHVybiBNYXRoLnJvdW5kKGMqMjE0NzQ4MzY0Nyk7Y2FzZSBJbnQxNkFycmF5OnJldHVybiBNYXRoLnJvdW5kKGMqMzI3NjcpO2Nhc2UgSW50OEFycmF5OnJldHVybiBNYXRoLnJvdW5kKGMqMTI3KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb21wb25lbnQgdHlwZS4iKX19Y2xhc3MgJHtjb25zdHJ1Y3Rvcih0PTAsZT0wKXskLnByb3RvdHlwZS5pc1ZlY3RvcjI9ITAsdGhpcy54PXQsdGhpcy55PWV9Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMueH1zZXQgd2lkdGgodCl7dGhpcy54PXR9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnl9c2V0IGhlaWdodCh0KXt0aGlzLnk9dH1zZXQodCxlKXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PWUsdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpc31hZGQodCl7cmV0dXJuIHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXN9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpc31zdWIodCl7cmV0dXJuIHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXN9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9ZGl2aWRlKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfWFwcGx5TWF0cml4Myh0KXtjb25zdCBlPXRoaXMueCxpPXRoaXMueSxzPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1zWzBdKmUrc1szXSppK3NbNl0sdGhpcy55PXNbMV0qZStzWzRdKmkrc1s3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtjb25zdCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD1NYXRoLnRydW5jKHRoaXMueCksdGhpcy55PU1hdGgudHJ1bmModGhpcy55KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55fWNyb3NzKHQpe3JldHVybiB0aGlzLngqdC55LXRoaXMueSp0Lnh9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1hbmdsZSgpe3JldHVybiBNYXRoLmF0YW4yKC10aGlzLnksLXRoaXMueCkrTWF0aC5QSX1hbmdsZVRvKHQpe2NvbnN0IGU9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoU3EoKSp0Lmxlbmd0aFNxKCkpO2lmKGU9PT0wKXJldHVybiBNYXRoLlBJLzI7Y29uc3QgaT10aGlzLmRvdCh0KS9lO3JldHVybiBNYXRoLmFjb3MoSihpLC0xLDEpKX1kaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VUb1NxdWFyZWQodCl7Y29uc3QgZT10aGlzLngtdC54LGk9dGhpcy55LXQueTtyZXR1cm4gZSplK2kqaX1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsaSl7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKmksdGhpcy55PXQueSsoZS55LXQueSkqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMueCx0W2UrMV09dGhpcy55LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpc31yb3RhdGVBcm91bmQodCxlKXtjb25zdCBpPU1hdGguY29zKGUpLHM9TWF0aC5zaW4oZSksbj10aGlzLngtdC54LG89dGhpcy55LXQueTtyZXR1cm4gdGhpcy54PW4qaS1vKnMrdC54LHRoaXMueT1uKnMrbyppK3QueSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnl9fWNsYXNzIG10e2NvbnN0cnVjdG9yKHQsZSxpLHMsbixvLGEsaCx1KXttdC5wcm90b3R5cGUuaXNNYXRyaXgzPSEwLHRoaXMuZWxlbWVudHM9WzEsMCwwLDAsMSwwLDAsMCwxXSx0IT09dm9pZCAwJiZ0aGlzLnNldCh0LGUsaSxzLG4sbyxhLGgsdSl9c2V0KHQsZSxpLHMsbixvLGEsaCx1KXtjb25zdCBsPXRoaXMuZWxlbWVudHM7cmV0dXJuIGxbMF09dCxsWzFdPXMsbFsyXT1hLGxbM109ZSxsWzRdPW4sbFs1XT1oLGxbNl09aSxsWzddPW8sbFs4XT11LHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzBdPWlbMF0sZVsxXT1pWzFdLGVbMl09aVsyXSxlWzNdPWlbM10sZVs0XT1pWzRdLGVbNV09aVs1XSxlWzZdPWlbNl0sZVs3XT1pWzddLGVbOF09aVs4XSx0aGlzfWV4dHJhY3RCYXNpcyh0LGUsaSl7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMSksaS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDIpLHRoaXN9c2V0RnJvbU1hdHJpeDQodCl7Y29uc3QgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChlWzBdLGVbNF0sZVs4XSxlWzFdLGVbNV0sZVs5XSxlWzJdLGVbNl0sZVsxMF0pLHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQsZSl7Y29uc3QgaT10LmVsZW1lbnRzLHM9ZS5lbGVtZW50cyxuPXRoaXMuZWxlbWVudHMsbz1pWzBdLGE9aVszXSxoPWlbNl0sdT1pWzFdLGw9aVs0XSxyPWlbN10sZD1pWzJdLG09aVs1XSx5PWlbOF0seD1zWzBdLF89c1szXSxwPXNbNl0sdz1zWzFdLEE9c1s0XSxTPXNbN10sej1zWzJdLFQ9c1s1XSxiPXNbOF07cmV0dXJuIG5bMF09byp4K2EqdytoKnosblszXT1vKl8rYSpBK2gqVCxuWzZdPW8qcCthKlMraCpiLG5bMV09dSp4K2wqdytyKnosbls0XT11Kl8rbCpBK3IqVCxuWzddPXUqcCtsKlMrcipiLG5bMl09ZCp4K20qdyt5Knosbls1XT1kKl8rbSpBK3kqVCxuWzhdPWQqcCttKlMreSpiLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzO3JldHVybiBlWzBdKj10LGVbM10qPXQsZVs2XSo9dCxlWzFdKj10LGVbNF0qPXQsZVs3XSo9dCxlWzJdKj10LGVbNV0qPXQsZVs4XSo9dCx0aGlzfWRldGVybWluYW50KCl7Y29uc3QgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scz10WzJdLG49dFszXSxvPXRbNF0sYT10WzVdLGg9dFs2XSx1PXRbN10sbD10WzhdO3JldHVybiBlKm8qbC1lKmEqdS1pKm4qbCtpKmEqaCtzKm4qdS1zKm8qaH1pbnZlcnQoKXtjb25zdCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFsxXSxzPXRbMl0sbj10WzNdLG89dFs0XSxhPXRbNV0saD10WzZdLHU9dFs3XSxsPXRbOF0scj1sKm8tYSp1LGQ9YSpoLWwqbixtPXUqbi1vKmgseT1lKnIraSpkK3MqbTtpZih5PT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDApO2NvbnN0IHg9MS95O3JldHVybiB0WzBdPXIqeCx0WzFdPShzKnUtbCppKSp4LHRbMl09KGEqaS1zKm8pKngsdFszXT1kKngsdFs0XT0obCplLXMqaCkqeCx0WzVdPShzKm4tYSplKSp4LHRbNl09bSp4LHRbN109KGkqaC11KmUpKngsdFs4XT0obyplLWkqbikqeCx0aGlzfXRyYW5zcG9zZSgpe2xldCB0O2NvbnN0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdD1lWzFdLGVbMV09ZVszXSxlWzNdPXQsdD1lWzJdLGVbMl09ZVs2XSxlWzZdPXQsdD1lWzVdLGVbNV09ZVs3XSxlWzddPXQsdGhpc31nZXROb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeDQodCkuaW52ZXJ0KCkudHJhbnNwb3NlKCl9dHJhbnNwb3NlSW50b0FycmF5KHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVszXSx0WzJdPWVbNl0sdFszXT1lWzFdLHRbNF09ZVs0XSx0WzVdPWVbN10sdFs2XT1lWzJdLHRbN109ZVs1XSx0WzhdPWVbOF0sdGhpc31zZXRVdlRyYW5zZm9ybSh0LGUsaSxzLG4sbyxhKXtjb25zdCBoPU1hdGguY29zKG4pLHU9TWF0aC5zaW4obik7cmV0dXJuIHRoaXMuc2V0KGkqaCxpKnUsLWkqKGgqbyt1KmEpK28rdCwtcyp1LHMqaCwtcyooLXUqbytoKmEpK2ErZSwwLDAsMSksdGhpc31zY2FsZSh0LGUpe3JldHVybiB0aGlzLnByZW11bHRpcGx5KFZ0Lm1ha2VTY2FsZSh0LGUpKSx0aGlzfXJvdGF0ZSh0KXtyZXR1cm4gdGhpcy5wcmVtdWx0aXBseShWdC5tYWtlUm90YXRpb24oLXQpKSx0aGlzfXRyYW5zbGF0ZSh0LGUpe3JldHVybiB0aGlzLnByZW11bHRpcGx5KFZ0Lm1ha2VUcmFuc2xhdGlvbih0LGUpKSx0aGlzfW1ha2VUcmFuc2xhdGlvbih0LGUpe3JldHVybiB0LmlzVmVjdG9yMj90aGlzLnNldCgxLDAsdC54LDAsMSx0LnksMCwwLDEpOnRoaXMuc2V0KDEsMCx0LDAsMSxlLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbih0KXtjb25zdCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsLWksMCxpLGUsMCwwLDAsMSksdGhpc31tYWtlU2NhbGUodCxlKXtyZXR1cm4gdGhpcy5zZXQodCwwLDAsMCxlLDAsMCwwLDEpLHRoaXN9ZXF1YWxzKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7Zm9yKGxldCBzPTA7czw5O3MrKylpZihlW3NdIT09aVtzXSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxlPTApe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5lbGVtZW50c1tpXT10W2krZV07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7Y29uc3QgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPWlbMF0sdFtlKzFdPWlbMV0sdFtlKzJdPWlbMl0sdFtlKzNdPWlbM10sdFtlKzRdPWlbNF0sdFtlKzVdPWlbNV0sdFtlKzZdPWlbNl0sdFtlKzddPWlbN10sdFtlKzhdPWlbOF0sdH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX19Y29uc3QgVnQ9bmV3IG10O2Z1bmN0aW9uIF9lKGMpe2ZvcihsZXQgdD1jLmxlbmd0aC0xO3Q+PTA7LS10KWlmKGNbdF0+PTY1NTM1KXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGllKGMpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGMpfWNvbnN0IHNlPXt9O2Z1bmN0aW9uIE1lKGMpe2MgaW4gc2V8fChzZVtjXT0hMCxjb25zb2xlLndhcm4oYykpfWZ1bmN0aW9uIFp0KGMpe3JldHVybiBjPC4wNDA0NT9jKi4wNzczOTkzODA4Ok1hdGgucG93KGMqLjk0Nzg2NzI5ODYrLjA1MjEzMjcwMTQsMi40KX1sZXQgZHQ7Y2xhc3MgYmV7c3RhdGljIGdldERhdGFVUkwodCl7aWYoL15kYXRhOi9pLnRlc3QodC5zcmMpfHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ+InUiKXJldHVybiB0LnNyYztsZXQgZTtpZih0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpZT10O2Vsc2V7ZHQ9PT12b2lkIDAmJihkdD1pZSgiY2FudmFzIikpLGR0LndpZHRoPXQud2lkdGgsZHQuaGVpZ2h0PXQuaGVpZ2h0O2NvbnN0IGk9ZHQuZ2V0Q29udGV4dCgiMmQiKTt0IGluc3RhbmNlb2YgSW1hZ2VEYXRhP2kucHV0SW1hZ2VEYXRhKHQsMCwwKTppLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxlPWR0fXJldHVybiBlLndpZHRoPjIwNDh8fGUuaGVpZ2h0PjIwNDg/KGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5nZXREYXRhVVJMOiBJbWFnZSBjb252ZXJ0ZWQgdG8ganBnIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIix0KSxlLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpKTplLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9c3RhdGljIHNSR0JUb0xpbmVhcih0KXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ8InUiJiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7Y29uc3QgZT1pZSgiY2FudmFzIik7ZS53aWR0aD10LndpZHRoLGUuaGVpZ2h0PXQuaGVpZ2h0O2NvbnN0IGk9ZS5nZXRDb250ZXh0KCIyZCIpO2kuZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpO2NvbnN0IHM9aS5nZXRJbWFnZURhdGEoMCwwLHQud2lkdGgsdC5oZWlnaHQpLG49cy5kYXRhO2ZvcihsZXQgbz0wO288bi5sZW5ndGg7bysrKW5bb109WnQobltvXS8yNTUpKjI1NTtyZXR1cm4gaS5wdXRJbWFnZURhdGEocywwLDApLGV9ZWxzZSBpZih0LmRhdGEpe2NvbnN0IGU9dC5kYXRhLnNsaWNlKDApO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKWUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXk/ZVtpXT1NYXRoLmZsb29yKFp0KGVbaV0vMjU1KSoyNTUpOmVbaV09WnQoZVtpXSk7cmV0dXJue2RhdGE6ZSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19ZWxzZSByZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLnNSR0JUb0xpbmVhcigpOiBVbnN1cHBvcnRlZCBpbWFnZSB0eXBlLiBObyBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGFwcGxpZWQuIiksdH19bGV0IHplPTA7Y2xhc3Mgd2V7Y29uc3RydWN0b3IodD1udWxsKXt0aGlzLmlzU291cmNlPSEwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOnplKyt9KSx0aGlzLnV1aWQ9UHQoKSx0aGlzLmRhdGE9dCx0aGlzLmRhdGFSZWFkeT0hMCx0aGlzLnZlcnNpb249MH1zZXQgbmVlZHNVcGRhdGUodCl7dD09PSEwJiZ0aGlzLnZlcnNpb24rK310b0pTT04odCl7Y29uc3QgZT10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7aWYoIWUmJnQuaW1hZ2VzW3RoaXMudXVpZF0hPT12b2lkIDApcmV0dXJuIHQuaW1hZ2VzW3RoaXMudXVpZF07Y29uc3QgaT17dXVpZDp0aGlzLnV1aWQsdXJsOiIifSxzPXRoaXMuZGF0YTtpZihzIT09bnVsbCl7bGV0IG47aWYoQXJyYXkuaXNBcnJheShzKSl7bj1bXTtmb3IobGV0IG89MCxhPXMubGVuZ3RoO288YTtvKyspc1tvXS5pc0RhdGFUZXh0dXJlP24ucHVzaChHdChzW29dLmltYWdlKSk6bi5wdXNoKEd0KHNbb10pKX1lbHNlIG49R3Qocyk7aS51cmw9bn1yZXR1cm4gZXx8KHQuaW1hZ2VzW3RoaXMudXVpZF09aSksaX19ZnVuY3Rpb24gR3QoYyl7cmV0dXJuIHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50PCJ1IiYmYyBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudDwidSImJmMgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwPCJ1IiYmYyBpbnN0YW5jZW9mIEltYWdlQml0bWFwP2JlLmdldERhdGFVUkwoYyk6Yy5kYXRhP3tkYXRhOkFycmF5LmZyb20oYy5kYXRhKSx3aWR0aDpjLndpZHRoLGhlaWdodDpjLmhlaWdodCx0eXBlOmMuZGF0YS5jb25zdHJ1Y3Rvci5uYW1lfTooY29uc29sZS53YXJuKCJUSFJFRS5UZXh0dXJlOiBVbmFibGUgdG8gc2VyaWFsaXplIFRleHR1cmUuIikse30pfWxldCBBZT0wO2NsYXNzIG90IGV4dGVuZHMgTHR7Y29uc3RydWN0b3IodD1vdC5ERUZBVUxUX0lNQUdFLGU9b3QuREVGQVVMVF9NQVBQSU5HLGk9MTAwMSxzPTEwMDEsbj0xMDA2LG89MTAwOCxhPTEwMjMsaD0xMDA5LHU9b3QuREVGQVVMVF9BTklTT1RST1BZLGw9Z2Upe3N1cGVyKCksdGhpcy5pc1RleHR1cmU9ITAsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6QWUrK30pLHRoaXMudXVpZD1QdCgpLHRoaXMubmFtZT0iIix0aGlzLnNvdXJjZT1uZXcgd2UodCksdGhpcy5taXBtYXBzPVtdLHRoaXMubWFwcGluZz1lLHRoaXMuY2hhbm5lbD0wLHRoaXMud3JhcFM9aSx0aGlzLndyYXBUPXMsdGhpcy5tYWdGaWx0ZXI9bix0aGlzLm1pbkZpbHRlcj1vLHRoaXMuYW5pc290cm9weT11LHRoaXMuZm9ybWF0PWEsdGhpcy5pbnRlcm5hbEZvcm1hdD1udWxsLHRoaXMudHlwZT1oLHRoaXMub2Zmc2V0PW5ldyAkKDAsMCksdGhpcy5yZXBlYXQ9bmV3ICQoMSwxKSx0aGlzLmNlbnRlcj1uZXcgJCgwLDApLHRoaXMucm90YXRpb249MCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITAsdGhpcy5tYXRyaXg9bmV3IG10LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5jb2xvclNwYWNlPWwsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MCx0aGlzLm9uVXBkYXRlPW51bGwsdGhpcy5pc1JlbmRlclRhcmdldFRleHR1cmU9ITEsdGhpcy5wbXJlbVZlcnNpb249MH1nZXQgaW1hZ2UoKXtyZXR1cm4gdGhpcy5zb3VyY2UuZGF0YX1zZXQgaW1hZ2UodD1udWxsKXt0aGlzLnNvdXJjZS5kYXRhPXR9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguc2V0VXZUcmFuc2Zvcm0odGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55LHRoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueSx0aGlzLnJvdGF0aW9uLHRoaXMuY2VudGVyLngsdGhpcy5jZW50ZXIueSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5zb3VyY2U9dC5zb3VyY2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMuY2hhbm5lbD10LmNoYW5uZWwsdGhpcy53cmFwUz10LndyYXBTLHRoaXMud3JhcFQ9dC53cmFwVCx0aGlzLm1hZ0ZpbHRlcj10Lm1hZ0ZpbHRlcix0aGlzLm1pbkZpbHRlcj10Lm1pbkZpbHRlcix0aGlzLmFuaXNvdHJvcHk9dC5hbmlzb3Ryb3B5LHRoaXMuZm9ybWF0PXQuZm9ybWF0LHRoaXMuaW50ZXJuYWxGb3JtYXQ9dC5pbnRlcm5hbEZvcm1hdCx0aGlzLnR5cGU9dC50eXBlLHRoaXMub2Zmc2V0LmNvcHkodC5vZmZzZXQpLHRoaXMucmVwZWF0LmNvcHkodC5yZXBlYXQpLHRoaXMuY2VudGVyLmNvcHkodC5jZW50ZXIpLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4LmNvcHkodC5tYXRyaXgpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPXQuZ2VuZXJhdGVNaXBtYXBzLHRoaXMucHJlbXVsdGlwbHlBbHBoYT10LnByZW11bHRpcGx5QWxwaGEsdGhpcy5mbGlwWT10LmZsaXBZLHRoaXMudW5wYWNrQWxpZ25tZW50PXQudW5wYWNrQWxpZ25tZW50LHRoaXMuY29sb3JTcGFjZT10LmNvbG9yU3BhY2UsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXN9dG9KU09OKHQpe2NvbnN0IGU9dD09PXZvaWQgMHx8dHlwZW9mIHQ9PSJzdHJpbmciO2lmKCFlJiZ0LnRleHR1cmVzW3RoaXMudXVpZF0hPT12b2lkIDApcmV0dXJuIHQudGV4dHVyZXNbdGhpcy51dWlkXTtjb25zdCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjYsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLGltYWdlOnRoaXMuc291cmNlLnRvSlNPTih0KS51dWlkLG1hcHBpbmc6dGhpcy5tYXBwaW5nLGNoYW5uZWw6dGhpcy5jaGFubmVsLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsaW50ZXJuYWxGb3JtYXQ6dGhpcy5pbnRlcm5hbEZvcm1hdCx0eXBlOnRoaXMudHlwZSxjb2xvclNwYWNlOnRoaXMuY29sb3JTcGFjZSxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFksZ2VuZXJhdGVNaXBtYXBzOnRoaXMuZ2VuZXJhdGVNaXBtYXBzLHByZW11bHRpcGx5QWxwaGE6dGhpcy5wcmVtdWx0aXBseUFscGhhLHVucGFja0FsaWdubWVudDp0aGlzLnVucGFja0FsaWdubWVudH07cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMudXNlckRhdGEpLmxlbmd0aD4wJiYoaS51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxlfHwodC50ZXh0dXJlc1t0aGlzLnV1aWRdPWkpLGl9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX10cmFuc2Zvcm1Vdih0KXtpZih0aGlzLm1hcHBpbmchPT0zMDApcmV0dXJuIHQ7aWYodC5hcHBseU1hdHJpeDModGhpcy5tYXRyaXgpLHQueDwwfHx0Lng+MSlzd2l0Y2godGhpcy53cmFwUyl7Y2FzZSAxZTM6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWs7Y2FzZSAxMDAxOnQueD10Lng8MD8wOjE7YnJlYWs7Y2FzZSAxMDAyOk1hdGguYWJzKE1hdGguZmxvb3IodC54KSUyKT09PTE/dC54PU1hdGguY2VpbCh0LngpLXQueDp0Lng9dC54LU1hdGguZmxvb3IodC54KTticmVha31pZih0Lnk8MHx8dC55PjEpc3dpdGNoKHRoaXMud3JhcFQpe2Nhc2UgMWUzOnQueT10LnktTWF0aC5mbG9vcih0LnkpO2JyZWFrO2Nhc2UgMTAwMTp0Lnk9dC55PDA/MDoxO2JyZWFrO2Nhc2UgMTAwMjpNYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik9PT0xP3QueT1NYXRoLmNlaWwodC55KS10Lnk6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWt9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmKHRoaXMudmVyc2lvbisrLHRoaXMuc291cmNlLm5lZWRzVXBkYXRlPSEwKX1zZXQgbmVlZHNQTVJFTVVwZGF0ZSh0KXt0PT09ITAmJnRoaXMucG1yZW1WZXJzaW9uKyt9fW90LkRFRkFVTFRfSU1BR0U9bnVsbCxvdC5ERUZBVUxUX01BUFBJTkc9MzAwLG90LkRFRkFVTFRfQU5JU09UUk9QWT0xO2NsYXNzIFR0e2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wLHM9MSl7dGhpcy5pc1F1YXRlcm5pb249ITAsdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fdz1zfXN0YXRpYyBzbGVycEZsYXQodCxlLGkscyxuLG8sYSl7bGV0IGg9aVtzKzBdLHU9aVtzKzFdLGw9aVtzKzJdLHI9aVtzKzNdO2NvbnN0IGQ9bltvKzBdLG09bltvKzFdLHk9bltvKzJdLHg9bltvKzNdO2lmKGE9PT0wKXt0W2UrMF09aCx0W2UrMV09dSx0W2UrMl09bCx0W2UrM109cjtyZXR1cm59aWYoYT09PTEpe3RbZSswXT1kLHRbZSsxXT1tLHRbZSsyXT15LHRbZSszXT14O3JldHVybn1pZihyIT09eHx8aCE9PWR8fHUhPT1tfHxsIT09eSl7bGV0IF89MS1hO2NvbnN0IHA9aCpkK3UqbStsKnkrcip4LHc9cD49MD8xOi0xLEE9MS1wKnA7aWYoQT5OdW1iZXIuRVBTSUxPTil7Y29uc3Qgej1NYXRoLnNxcnQoQSksVD1NYXRoLmF0YW4yKHoscCp3KTtfPU1hdGguc2luKF8qVCkveixhPU1hdGguc2luKGEqVCkven1jb25zdCBTPWEqdztpZihoPWgqXytkKlMsdT11Kl8rbSpTLGw9bCpfK3kqUyxyPXIqXyt4KlMsXz09PTEtYSl7Y29uc3Qgej0xL01hdGguc3FydChoKmgrdSp1K2wqbCtyKnIpO2gqPXosdSo9eixsKj16LHIqPXp9fXRbZV09aCx0W2UrMV09dSx0W2UrMl09bCx0W2UrM109cn1zdGF0aWMgbXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxlLGkscyxuLG8pe2NvbnN0IGE9aVtzXSxoPWlbcysxXSx1PWlbcysyXSxsPWlbcyszXSxyPW5bb10sZD1uW28rMV0sbT1uW28rMl0seT1uW28rM107cmV0dXJuIHRbZV09YSp5K2wqcitoKm0tdSpkLHRbZSsxXT1oKnkrbCpkK3Uqci1hKm0sdFtlKzJdPXUqeStsKm0rYSpkLWgqcix0W2UrM109bCp5LWEqci1oKmQtdSptLHR9Z2V0IHgoKXtyZXR1cm4gdGhpcy5feH1zZXQgeCh0KXt0aGlzLl94PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3l9c2V0IHkodCl7dGhpcy5feT10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeigpe3JldHVybiB0aGlzLl96fXNldCB6KHQpe3RoaXMuX3o9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHcoKXtyZXR1cm4gdGhpcy5fd31zZXQgdyh0KXt0aGlzLl93PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsaSxzKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fdz1zLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96LHRoaXMuX3cpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC54LHRoaXMuX3k9dC55LHRoaXMuX3o9dC56LHRoaXMuX3c9dC53LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21FdWxlcih0LGU9ITApe2NvbnN0IGk9dC5feCxzPXQuX3ksbj10Ll96LG89dC5fb3JkZXIsYT1NYXRoLmNvcyxoPU1hdGguc2luLHU9YShpLzIpLGw9YShzLzIpLHI9YShuLzIpLGQ9aChpLzIpLG09aChzLzIpLHk9aChuLzIpO3N3aXRjaChvKXtjYXNlIlhZWiI6dGhpcy5feD1kKmwqcit1Km0qeSx0aGlzLl95PXUqbSpyLWQqbCp5LHRoaXMuX3o9dSpsKnkrZCptKnIsdGhpcy5fdz11Kmwqci1kKm0qeTticmVhaztjYXNlIllYWiI6dGhpcy5feD1kKmwqcit1Km0qeSx0aGlzLl95PXUqbSpyLWQqbCp5LHRoaXMuX3o9dSpsKnktZCptKnIsdGhpcy5fdz11KmwqcitkKm0qeTticmVhaztjYXNlIlpYWSI6dGhpcy5feD1kKmwqci11Km0qeSx0aGlzLl95PXUqbSpyK2QqbCp5LHRoaXMuX3o9dSpsKnkrZCptKnIsdGhpcy5fdz11Kmwqci1kKm0qeTticmVhaztjYXNlIlpZWCI6dGhpcy5feD1kKmwqci11Km0qeSx0aGlzLl95PXUqbSpyK2QqbCp5LHRoaXMuX3o9dSpsKnktZCptKnIsdGhpcy5fdz11KmwqcitkKm0qeTticmVhaztjYXNlIllaWCI6dGhpcy5feD1kKmwqcit1Km0qeSx0aGlzLl95PXUqbSpyK2QqbCp5LHRoaXMuX3o9dSpsKnktZCptKnIsdGhpcy5fdz11Kmwqci1kKm0qeTticmVhaztjYXNlIlhaWSI6dGhpcy5feD1kKmwqci11Km0qeSx0aGlzLl95PXUqbSpyLWQqbCp5LHRoaXMuX3o9dSpsKnkrZCptKnIsdGhpcy5fdz11KmwqcitkKm0qeTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrbyl9cmV0dXJuIGU9PT0hMCYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUF4aXNBbmdsZSh0LGUpe2NvbnN0IGk9ZS8yLHM9TWF0aC5zaW4oaSk7cmV0dXJuIHRoaXMuX3g9dC54KnMsdGhpcy5feT10Lnkqcyx0aGlzLl96PXQueipzLHRoaXMuX3c9TWF0aC5jb3MoaSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpe2NvbnN0IGU9dC5lbGVtZW50cyxpPWVbMF0scz1lWzRdLG49ZVs4XSxvPWVbMV0sYT1lWzVdLGg9ZVs5XSx1PWVbMl0sbD1lWzZdLHI9ZVsxMF0sZD1pK2ErcjtpZihkPjApe2NvbnN0IG09LjUvTWF0aC5zcXJ0KGQrMSk7dGhpcy5fdz0uMjUvbSx0aGlzLl94PShsLWgpKm0sdGhpcy5feT0obi11KSptLHRoaXMuX3o9KG8tcykqbX1lbHNlIGlmKGk+YSYmaT5yKXtjb25zdCBtPTIqTWF0aC5zcXJ0KDEraS1hLXIpO3RoaXMuX3c9KGwtaCkvbSx0aGlzLl94PS4yNSptLHRoaXMuX3k9KHMrbykvbSx0aGlzLl96PShuK3UpL219ZWxzZSBpZihhPnIpe2NvbnN0IG09MipNYXRoLnNxcnQoMSthLWktcik7dGhpcy5fdz0obi11KS9tLHRoaXMuX3g9KHMrbykvbSx0aGlzLl95PS4yNSptLHRoaXMuX3o9KGgrbCkvbX1lbHNle2NvbnN0IG09MipNYXRoLnNxcnQoMStyLWktYSk7dGhpcy5fdz0oby1zKS9tLHRoaXMuX3g9KG4rdSkvbSx0aGlzLl95PShoK2wpL20sdGhpcy5fej0uMjUqbX1yZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVVuaXRWZWN0b3JzKHQsZSl7bGV0IGk9dC5kb3QoZSkrMTtyZXR1cm4gaTxOdW1iZXIuRVBTSUxPTj8oaT0wLE1hdGguYWJzKHQueCk+TWF0aC5hYnModC56KT8odGhpcy5feD0tdC55LHRoaXMuX3k9dC54LHRoaXMuX3o9MCx0aGlzLl93PWkpOih0aGlzLl94PTAsdGhpcy5feT0tdC56LHRoaXMuX3o9dC55LHRoaXMuX3c9aSkpOih0aGlzLl94PXQueSplLnotdC56KmUueSx0aGlzLl95PXQueiplLngtdC54KmUueix0aGlzLl96PXQueCplLnktdC55KmUueCx0aGlzLl93PWkpLHRoaXMubm9ybWFsaXplKCl9YW5nbGVUbyh0KXtyZXR1cm4gMipNYXRoLmFjb3MoTWF0aC5hYnMoSih0aGlzLmRvdCh0KSwtMSwxKSkpfXJvdGF0ZVRvd2FyZHModCxlKXtjb25zdCBpPXRoaXMuYW5nbGVUbyh0KTtpZihpPT09MClyZXR1cm4gdGhpcztjb25zdCBzPU1hdGgubWluKDEsZS9pKTtyZXR1cm4gdGhpcy5zbGVycCh0LHMpLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMSl9aW52ZXJ0KCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCl9Y29uanVnYXRlKCl7cmV0dXJuIHRoaXMuX3gqPS0xLHRoaXMuX3kqPS0xLHRoaXMuX3oqPS0xLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy5feCp0Ll94K3RoaXMuX3kqdC5feSt0aGlzLl96KnQuX3ordGhpcy5fdyp0Ll93fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fd31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fdyl9bm9ybWFsaXplKCl7bGV0IHQ9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdD09PTA/KHRoaXMuX3g9MCx0aGlzLl95PTAsdGhpcy5fej0wLHRoaXMuX3c9MSk6KHQ9MS90LHRoaXMuX3g9dGhpcy5feCp0LHRoaXMuX3k9dGhpcy5feSp0LHRoaXMuX3o9dGhpcy5feip0LHRoaXMuX3c9dGhpcy5fdyp0KSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHRoaXMpfW11bHRpcGx5UXVhdGVybmlvbnModCxlKXtjb25zdCBpPXQuX3gscz10Ll95LG49dC5feixvPXQuX3csYT1lLl94LGg9ZS5feSx1PWUuX3osbD1lLl93O3JldHVybiB0aGlzLl94PWkqbCtvKmErcyp1LW4qaCx0aGlzLl95PXMqbCtvKmgrbiphLWkqdSx0aGlzLl96PW4qbCtvKnUraSpoLXMqYSx0aGlzLl93PW8qbC1pKmEtcypoLW4qdSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycCh0LGUpe2lmKGU9PT0wKXJldHVybiB0aGlzO2lmKGU9PT0xKXJldHVybiB0aGlzLmNvcHkodCk7Y29uc3QgaT10aGlzLl94LHM9dGhpcy5feSxuPXRoaXMuX3osbz10aGlzLl93O2xldCBhPW8qdC5fdytpKnQuX3grcyp0Ll95K24qdC5fejtpZihhPDA/KHRoaXMuX3c9LXQuX3csdGhpcy5feD0tdC5feCx0aGlzLl95PS10Ll95LHRoaXMuX3o9LXQuX3osYT0tYSk6dGhpcy5jb3B5KHQpLGE+PTEpcmV0dXJuIHRoaXMuX3c9byx0aGlzLl94PWksdGhpcy5feT1zLHRoaXMuX3o9bix0aGlzO2NvbnN0IGg9MS1hKmE7aWYoaDw9TnVtYmVyLkVQU0lMT04pe2NvbnN0IG09MS1lO3JldHVybiB0aGlzLl93PW0qbytlKnRoaXMuX3csdGhpcy5feD1tKmkrZSp0aGlzLl94LHRoaXMuX3k9bSpzK2UqdGhpcy5feSx0aGlzLl96PW0qbitlKnRoaXMuX3osdGhpcy5ub3JtYWxpemUoKSx0aGlzfWNvbnN0IHU9TWF0aC5zcXJ0KGgpLGw9TWF0aC5hdGFuMih1LGEpLHI9TWF0aC5zaW4oKDEtZSkqbCkvdSxkPU1hdGguc2luKGUqbCkvdTtyZXR1cm4gdGhpcy5fdz1vKnIrdGhpcy5fdypkLHRoaXMuX3g9aSpyK3RoaXMuX3gqZCx0aGlzLl95PXMqcit0aGlzLl95KmQsdGhpcy5fej1uKnIrdGhpcy5feipkLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNsZXJwUXVhdGVybmlvbnModCxlLGkpe3JldHVybiB0aGlzLmNvcHkodCkuc2xlcnAoZSxpKX1yYW5kb20oKXtjb25zdCB0PTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpLGU9MipNYXRoLlBJKk1hdGgucmFuZG9tKCksaT1NYXRoLnJhbmRvbSgpLHM9TWF0aC5zcXJ0KDEtaSksbj1NYXRoLnNxcnQoaSk7cmV0dXJuIHRoaXMuc2V0KHMqTWF0aC5zaW4odCkscypNYXRoLmNvcyh0KSxuKk1hdGguc2luKGUpLG4qTWF0aC5jb3MoZSkpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fdz09PXRoaXMuX3d9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy5feD10W2VdLHRoaXMuX3k9dFtlKzFdLHRoaXMuX3o9dFtlKzJdLHRoaXMuX3c9dFtlKzNdLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMuX3gsdFtlKzFdPXRoaXMuX3ksdFtlKzJdPXRoaXMuX3osdFtlKzNdPXRoaXMuX3csdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMuX3g9dC5nZXRYKGUpLHRoaXMuX3k9dC5nZXRZKGUpLHRoaXMuX3o9dC5nZXRaKGUpLHRoaXMuX3c9dC5nZXRXKGUpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLnRvQXJyYXkoKX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMuX3gseWllbGQgdGhpcy5feSx5aWVsZCB0aGlzLl96LHlpZWxkIHRoaXMuX3d9fWNsYXNzIGZ7Y29uc3RydWN0b3IodD0wLGU9MCxpPTApe2YucHJvdG90eXBlLmlzVmVjdG9yMz0hMCx0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aX1zZXQodCxlLGkpe3JldHVybiBpPT09dm9pZCAwJiYoaT10aGlzLnopLHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXN9YWRkKHQpe3JldHVybiB0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXMuej10LnorZS56LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzLnorPXQueiplLHRoaXN9c3ViKHQpe3JldHVybiB0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXN9bXVsdGlwbHlWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngqZS54LHRoaXMueT10LnkqZS55LHRoaXMuej10LnoqZS56LHRoaXN9YXBwbHlFdWxlcih0KXtyZXR1cm4gdGhpcy5hcHBseVF1YXRlcm5pb24obmUuc2V0RnJvbUV1bGVyKHQpKX1hcHBseUF4aXNBbmdsZSh0LGUpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihuZS5zZXRGcm9tQXhpc0FuZ2xlKHQsZSkpfWFwcGx5TWF0cml4Myh0KXtjb25zdCBlPXRoaXMueCxpPXRoaXMueSxzPXRoaXMueixuPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1uWzBdKmUrblszXSppK25bNl0qcyx0aGlzLnk9blsxXSplK25bNF0qaStuWzddKnMsdGhpcy56PW5bMl0qZStuWzVdKmkrbls4XSpzLHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXgzKHQpLm5vcm1hbGl6ZSgpfWFwcGx5TWF0cml4NCh0KXtjb25zdCBlPXRoaXMueCxpPXRoaXMueSxzPXRoaXMueixuPXQuZWxlbWVudHMsbz0xLyhuWzNdKmUrbls3XSppK25bMTFdKnMrblsxNV0pO3JldHVybiB0aGlzLng9KG5bMF0qZStuWzRdKmkrbls4XSpzK25bMTJdKSpvLHRoaXMueT0oblsxXSplK25bNV0qaStuWzldKnMrblsxM10pKm8sdGhpcy56PShuWzJdKmUrbls2XSppK25bMTBdKnMrblsxNF0pKm8sdGhpc31hcHBseVF1YXRlcm5pb24odCl7Y29uc3QgZT10aGlzLngsaT10aGlzLnkscz10aGlzLnosbj10Lngsbz10LnksYT10LnosaD10LncsdT0yKihvKnMtYSppKSxsPTIqKGEqZS1uKnMpLHI9MioobippLW8qZSk7cmV0dXJuIHRoaXMueD1lK2gqdStvKnItYSpsLHRoaXMueT1pK2gqbCthKnUtbipyLHRoaXMuej1zK2gqcituKmwtbyp1LHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtjb25zdCBlPXRoaXMueCxpPXRoaXMueSxzPXRoaXMueixuPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1uWzBdKmUrbls0XSppK25bOF0qcyx0aGlzLnk9blsxXSplK25bNV0qaStuWzldKnMsdGhpcy56PW5bMl0qZStuWzZdKmkrblsxMF0qcyx0aGlzLm5vcm1hbGl6ZSgpfWRpdmlkZSh0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpcy56Lz10LnosdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2NvbnN0IGk9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoaXx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLGkpKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9TWF0aC50cnVuYyh0aGlzLngpLHRoaXMueT1NYXRoLnRydW5jKHRoaXMueSksdGhpcy56PU1hdGgudHJ1bmModGhpcy56KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzLno9LXRoaXMueix0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55K3RoaXMueip0Lnp9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnp9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueil9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpcy56Kz0odC56LXRoaXMueikqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXMuej10LnorKGUuei10LnopKmksdGhpc31jcm9zcyh0KXtyZXR1cm4gdGhpcy5jcm9zc1ZlY3RvcnModGhpcyx0KX1jcm9zc1ZlY3RvcnModCxlKXtjb25zdCBpPXQueCxzPXQueSxuPXQueixvPWUueCxhPWUueSxoPWUuejtyZXR1cm4gdGhpcy54PXMqaC1uKmEsdGhpcy55PW4qby1pKmgsdGhpcy56PWkqYS1zKm8sdGhpc31wcm9qZWN0T25WZWN0b3IodCl7Y29uc3QgZT10Lmxlbmd0aFNxKCk7aWYoZT09PTApcmV0dXJuIHRoaXMuc2V0KDAsMCwwKTtjb25zdCBpPXQuZG90KHRoaXMpL2U7cmV0dXJuIHRoaXMuY29weSh0KS5tdWx0aXBseVNjYWxhcihpKX1wcm9qZWN0T25QbGFuZSh0KXtyZXR1cm4gSHQuY29weSh0aGlzKS5wcm9qZWN0T25WZWN0b3IodCksdGhpcy5zdWIoSHQpfXJlZmxlY3QodCl7cmV0dXJuIHRoaXMuc3ViKEh0LmNvcHkodCkubXVsdGlwbHlTY2FsYXIoMip0aGlzLmRvdCh0KSkpfWFuZ2xlVG8odCl7Y29uc3QgZT1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYoZT09PTApcmV0dXJuIE1hdGguUEkvMjtjb25zdCBpPXRoaXMuZG90KHQpL2U7cmV0dXJuIE1hdGguYWNvcyhKKGksLTEsMSkpfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtjb25zdCBlPXRoaXMueC10LngsaT10aGlzLnktdC55LHM9dGhpcy56LXQuejtyZXR1cm4gZSplK2kqaStzKnN9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxlLGkpe2NvbnN0IHM9TWF0aC5zaW4oZSkqdDtyZXR1cm4gdGhpcy54PXMqTWF0aC5zaW4oaSksdGhpcy55PU1hdGguY29zKGUpKnQsdGhpcy56PXMqTWF0aC5jb3MoaSksdGhpc31zZXRGcm9tQ3lsaW5kcmljYWwodCl7cmV0dXJuIHRoaXMuc2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQucmFkaXVzLHQudGhldGEsdC55KX1zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHModCxlLGkpe3JldHVybiB0aGlzLng9dCpNYXRoLnNpbihlKSx0aGlzLnk9aSx0aGlzLno9dCpNYXRoLmNvcyhlKSx0aGlzfXNldEZyb21NYXRyaXhQb3NpdGlvbih0KXtjb25zdCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1lWzEyXSx0aGlzLnk9ZVsxM10sdGhpcy56PWVbMTRdLHRoaXN9c2V0RnJvbU1hdHJpeFNjYWxlKHQpe2NvbnN0IGU9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksaT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxzPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9ZSx0aGlzLnk9aSx0aGlzLno9cyx0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyxlKjQpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQsZSl7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsZSozKX1zZXRGcm9tRXVsZXIodCl7cmV0dXJuIHRoaXMueD10Ll94LHRoaXMueT10Ll95LHRoaXMuej10Ll96LHRoaXN9c2V0RnJvbUNvbG9yKHQpe3JldHVybiB0aGlzLng9dC5yLHRoaXMueT10LmcsdGhpcy56PXQuYix0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMuen1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXMuej10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpcy56PXQuZ2V0WihlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2NvbnN0IHQ9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsZT1NYXRoLnJhbmRvbSgpKjItMSxpPU1hdGguc3FydCgxLWUqZSk7cmV0dXJuIHRoaXMueD1pKk1hdGguY29zKHQpLHRoaXMueT1lLHRoaXMuej1pKk1hdGguc2luKHQpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueSx5aWVsZCB0aGlzLnp9fWNvbnN0IEh0PW5ldyBmLG5lPW5ldyBUdDtjbGFzcyBDdHtjb25zdHJ1Y3Rvcih0PW5ldyBmKDEvMCwxLzAsMS8wKSxlPW5ldyBmKC0xLzAsLTEvMCwtMS8wKSl7dGhpcy5pc0JveDM9ITAsdGhpcy5taW49dCx0aGlzLm1heD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tQXJyYXkodCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKz0zKXRoaXMuZXhwYW5kQnlQb2ludChYLmZyb21BcnJheSh0LGUpKTtyZXR1cm4gdGhpc31zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsaT10LmNvdW50O2U8aTtlKyspdGhpcy5leHBhbmRCeVBvaW50KFguZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpKTtyZXR1cm4gdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2NvbnN0IGk9WC5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKC41KTtyZXR1cm4gdGhpcy5taW4uY29weSh0KS5zdWIoaSksdGhpcy5tYXguY29weSh0KS5hZGQoaSksdGhpc31zZXRGcm9tT2JqZWN0KHQsZT0hMSl7cmV0dXJuIHRoaXMubWFrZUVtcHR5KCksdGhpcy5leHBhbmRCeU9iamVjdCh0LGUpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0LGU9ITEpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2NvbnN0IGk9dC5nZW9tZXRyeTtpZihpIT09dm9pZCAwKXtjb25zdCBuPWkuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO2lmKGU9PT0hMCYmbiE9PXZvaWQgMCYmdC5pc0luc3RhbmNlZE1lc2ghPT0hMClmb3IobGV0IG89MCxhPW4uY291bnQ7bzxhO28rKyl0LmlzTWVzaD09PSEwP3QuZ2V0VmVydGV4UG9zaXRpb24obyxYKTpYLmZyb21CdWZmZXJBdHRyaWJ1dGUobixvKSxYLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmV4cGFuZEJ5UG9pbnQoWCk7ZWxzZSB0LmJvdW5kaW5nQm94IT09dm9pZCAwPyh0LmJvdW5kaW5nQm94PT09bnVsbCYmdC5jb21wdXRlQm91bmRpbmdCb3goKSxEdC5jb3B5KHQuYm91bmRpbmdCb3gpKTooaS5ib3VuZGluZ0JveD09PW51bGwmJmkuY29tcHV0ZUJvdW5kaW5nQm94KCksRHQuY29weShpLmJvdW5kaW5nQm94KSksRHQuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMudW5pb24oRHQpfWNvbnN0IHM9dC5jaGlsZHJlbjtmb3IobGV0IG49MCxvPXMubGVuZ3RoO248bztuKyspdGhpcy5leHBhbmRCeU9iamVjdChzW25dLGUpO3JldHVybiB0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHQueD49dGhpcy5taW4ueCYmdC54PD10aGlzLm1heC54JiZ0Lnk+PXRoaXMubWluLnkmJnQueTw9dGhpcy5tYXgueSYmdC56Pj10aGlzLm1pbi56JiZ0Lno8PXRoaXMubWF4Lnp9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSwodC56LXRoaXMubWluLnopLyh0aGlzLm1heC56LXRoaXMubWluLnopKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0Lm1heC54Pj10aGlzLm1pbi54JiZ0Lm1pbi54PD10aGlzLm1heC54JiZ0Lm1heC55Pj10aGlzLm1pbi55JiZ0Lm1pbi55PD10aGlzLm1heC55JiZ0Lm1heC56Pj10aGlzLm1pbi56JiZ0Lm1pbi56PD10aGlzLm1heC56fWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuY2xhbXBQb2ludCh0LmNlbnRlcixYKSxYLmRpc3RhbmNlVG9TcXVhcmVkKHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCBlLGk7cmV0dXJuIHQubm9ybWFsLng+MD8oZT10Lm5vcm1hbC54KnRoaXMubWluLngsaT10Lm5vcm1hbC54KnRoaXMubWF4LngpOihlPXQubm9ybWFsLngqdGhpcy5tYXgueCxpPXQubm9ybWFsLngqdGhpcy5taW4ueCksdC5ub3JtYWwueT4wPyhlKz10Lm5vcm1hbC55KnRoaXMubWluLnksaSs9dC5ub3JtYWwueSp0aGlzLm1heC55KTooZSs9dC5ub3JtYWwueSp0aGlzLm1heC55LGkrPXQubm9ybWFsLnkqdGhpcy5taW4ueSksdC5ub3JtYWwuej4wPyhlKz10Lm5vcm1hbC56KnRoaXMubWluLnosaSs9dC5ub3JtYWwueip0aGlzLm1heC56KTooZSs9dC5ub3JtYWwueip0aGlzLm1heC56LGkrPXQubm9ybWFsLnoqdGhpcy5taW4ueiksZTw9LXQuY29uc3RhbnQmJmk+PS10LmNvbnN0YW50fWludGVyc2VjdHNUcmlhbmdsZSh0KXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4hMTt0aGlzLmdldENlbnRlcihFdCksTnQuc3ViVmVjdG9ycyh0aGlzLm1heCxFdCkseXQuc3ViVmVjdG9ycyh0LmEsRXQpLHh0LnN1YlZlY3RvcnModC5iLEV0KSxwdC5zdWJWZWN0b3JzKHQuYyxFdCksaXQuc3ViVmVjdG9ycyh4dCx5dCksc3Quc3ViVmVjdG9ycyhwdCx4dCksdXQuc3ViVmVjdG9ycyh5dCxwdCk7bGV0IGU9WzAsLWl0LnosaXQueSwwLC1zdC56LHN0LnksMCwtdXQueix1dC55LGl0LnosMCwtaXQueCxzdC56LDAsLXN0LngsdXQueiwwLC11dC54LC1pdC55LGl0LngsMCwtc3QueSxzdC54LDAsLXV0LnksdXQueCwwXTtyZXR1cm4hanQoZSx5dCx4dCxwdCxOdCl8fChlPVsxLDAsMCwwLDEsMCwwLDAsMV0sIWp0KGUseXQseHQscHQsTnQpKT8hMTooV3QuY3Jvc3NWZWN0b3JzKGl0LHN0KSxlPVtXdC54LFd0LnksV3Quel0sanQoZSx5dCx4dCxwdCxOdCkpfWNsYW1wUG9pbnQodCxlKXtyZXR1cm4gZS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHRoaXMuY2xhbXBQb2ludCh0LFgpLmRpc3RhbmNlVG8odCl9Z2V0Qm91bmRpbmdTcGhlcmUodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3QubWFrZUVtcHR5KCk6KHRoaXMuZ2V0Q2VudGVyKHQuY2VudGVyKSx0LnJhZGl1cz10aGlzLmdldFNpemUoWCkubGVuZ3RoKCkqLjUpLHR9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90aGlzOihRWzBdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFFbMV0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksUVsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxRWzNdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFFbNF0uc2V0KHRoaXMubWF4LngsdGhpcy5taW4ueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksUVs1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxRWzZdLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFFbN10uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRGcm9tUG9pbnRzKFEpLHRoaXMpfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19Y29uc3QgUT1bbmV3IGYsbmV3IGYsbmV3IGYsbmV3IGYsbmV3IGYsbmV3IGYsbmV3IGYsbmV3IGZdLFg9bmV3IGYsRHQ9bmV3IEN0LHl0PW5ldyBmLHh0PW5ldyBmLHB0PW5ldyBmLGl0PW5ldyBmLHN0PW5ldyBmLHV0PW5ldyBmLEV0PW5ldyBmLE50PW5ldyBmLFd0PW5ldyBmLGx0PW5ldyBmO2Z1bmN0aW9uIGp0KGMsdCxlLGkscyl7Zm9yKGxldCBuPTAsbz1jLmxlbmd0aC0zO248PW87bis9Myl7bHQuZnJvbUFycmF5KGMsbik7Y29uc3QgYT1zLngqTWF0aC5hYnMobHQueCkrcy55Kk1hdGguYWJzKGx0LnkpK3MueipNYXRoLmFicyhsdC56KSxoPXQuZG90KGx0KSx1PWUuZG90KGx0KSxsPWkuZG90KGx0KTtpZihNYXRoLm1heCgtTWF0aC5tYXgoaCx1LGwpLE1hdGgubWluKGgsdSxsKSk+YSlyZXR1cm4hMX1yZXR1cm4hMH1jb25zdCBTZT1uZXcgQ3Qsa3Q9bmV3IGYsSnQ9bmV3IGY7Y2xhc3MgQmV7Y29uc3RydWN0b3IodD1uZXcgZixlPS0xKXt0aGlzLmlzU3BoZXJlPSEwLHRoaXMuY2VudGVyPXQsdGhpcy5yYWRpdXM9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0KSx0aGlzLnJhZGl1cz1lLHRoaXN9c2V0RnJvbVBvaW50cyh0LGUpe2NvbnN0IGk9dGhpcy5jZW50ZXI7ZSE9PXZvaWQgMD9pLmNvcHkoZSk6U2Uuc2V0RnJvbVBvaW50cyh0KS5nZXRDZW50ZXIoaSk7bGV0IHM9MDtmb3IobGV0IG49MCxvPXQubGVuZ3RoO248bztuKyspcz1NYXRoLm1heChzLGkuZGlzdGFuY2VUb1NxdWFyZWQodFtuXSkpO3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQocyksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5yYWRpdXM8MH1tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5jZW50ZXIuc2V0KDAsMCwwKSx0aGlzLnJhZGl1cz0tMSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLmNlbnRlciktdGhpcy5yYWRpdXN9aW50ZXJzZWN0c1NwaGVyZSh0KXtjb25zdCBlPXRoaXMucmFkaXVzK3QucmFkaXVzO3JldHVybiB0LmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmNlbnRlcik8PWUqZX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNTcGhlcmUodGhpcyl9aW50ZXJzZWN0c1BsYW5lKHQpe3JldHVybiBNYXRoLmFicyh0LmRpc3RhbmNlVG9Qb2ludCh0aGlzLmNlbnRlcikpPD10aGlzLnJhZGl1c31jbGFtcFBvaW50KHQsZSl7Y29uc3QgaT10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gZS5jb3B5KHQpLGk+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSksZX1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWV4cGFuZEJ5UG9pbnQodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodCksdGhpcy5yYWRpdXM9MCx0aGlzO2t0LnN1YlZlY3RvcnModCx0aGlzLmNlbnRlcik7Y29uc3QgZT1rdC5sZW5ndGhTcSgpO2lmKGU+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMpe2NvbnN0IGk9TWF0aC5zcXJ0KGUpLHM9KGktdGhpcy5yYWRpdXMpKi41O3RoaXMuY2VudGVyLmFkZFNjYWxlZFZlY3RvcihrdCxzL2kpLHRoaXMucmFkaXVzKz1zfXJldHVybiB0aGlzfXVuaW9uKHQpe3JldHVybiB0LmlzRW1wdHkoKT90aGlzOnRoaXMuaXNFbXB0eSgpPyh0aGlzLmNvcHkodCksdGhpcyk6KHRoaXMuY2VudGVyLmVxdWFscyh0LmNlbnRlcik9PT0hMD90aGlzLnJhZGl1cz1NYXRoLm1heCh0aGlzLnJhZGl1cyx0LnJhZGl1cyk6KEp0LnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5jZW50ZXIpLnNldExlbmd0aCh0LnJhZGl1cyksdGhpcy5leHBhbmRCeVBvaW50KGt0LmNvcHkodC5jZW50ZXIpLmFkZChKdCkpLHRoaXMuZXhwYW5kQnlQb2ludChrdC5jb3B5KHQuY2VudGVyKS5zdWIoSnQpKSksdGhpcyl9ZXF1YWxzKHQpe3JldHVybiB0LmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZ0LnJhZGl1cz09PXRoaXMucmFkaXVzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19Y2xhc3MgWntjb25zdHJ1Y3Rvcih0LGUsaSxzLG4sbyxhLGgsdSxsLHIsZCxtLHkseCxfKXtaLnByb3RvdHlwZS5pc01hdHJpeDQ9ITAsdGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sdCE9PXZvaWQgMCYmdGhpcy5zZXQodCxlLGkscyxuLG8sYSxoLHUsbCxyLGQsbSx5LHgsXyl9c2V0KHQsZSxpLHMsbixvLGEsaCx1LGwscixkLG0seSx4LF8pe2NvbnN0IHA9dGhpcy5lbGVtZW50cztyZXR1cm4gcFswXT10LHBbNF09ZSxwWzhdPWkscFsxMl09cyxwWzFdPW4scFs1XT1vLHBbOV09YSxwWzEzXT1oLHBbMl09dSxwWzZdPWwscFsxMF09cixwWzE0XT1kLHBbM109bSxwWzddPXkscFsxMV09eCxwWzE1XT1fLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgWigpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX1jb3B5KHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7cmV0dXJuIGVbMF09aVswXSxlWzFdPWlbMV0sZVsyXT1pWzJdLGVbM109aVszXSxlWzRdPWlbNF0sZVs1XT1pWzVdLGVbNl09aVs2XSxlWzddPWlbN10sZVs4XT1pWzhdLGVbOV09aVs5XSxlWzEwXT1pWzEwXSxlWzExXT1pWzExXSxlWzEyXT1pWzEyXSxlWzEzXT1pWzEzXSxlWzE0XT1pWzE0XSxlWzE1XT1pWzE1XSx0aGlzfWNvcHlQb3NpdGlvbih0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzEyXT1pWzEyXSxlWzEzXT1pWzEzXSxlWzE0XT1pWzE0XSx0aGlzfXNldEZyb21NYXRyaXgzKHQpe2NvbnN0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy5zZXQoZVswXSxlWzNdLGVbNl0sMCxlWzFdLGVbNF0sZVs3XSwwLGVbMl0sZVs1XSxlWzhdLDAsMCwwLDAsMSksdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywxKSxpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywyKSx0aGlzfW1ha2VCYXNpcyh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQueCxlLngsaS54LDAsdC55LGUueSxpLnksMCx0LnosZS56LGkueiwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdFJvdGF0aW9uKHQpe2NvbnN0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHMscz0xL2Z0LnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxuPTEvZnQuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLG89MS9mdC5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIGVbMF09aVswXSpzLGVbMV09aVsxXSpzLGVbMl09aVsyXSpzLGVbM109MCxlWzRdPWlbNF0qbixlWzVdPWlbNV0qbixlWzZdPWlbNl0qbixlWzddPTAsZVs4XT1pWzhdKm8sZVs5XT1pWzldKm8sZVsxMF09aVsxMF0qbyxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tRXVsZXIodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLGk9dC54LHM9dC55LG49dC56LG89TWF0aC5jb3MoaSksYT1NYXRoLnNpbihpKSxoPU1hdGguY29zKHMpLHU9TWF0aC5zaW4ocyksbD1NYXRoLmNvcyhuKSxyPU1hdGguc2luKG4pO2lmKHQub3JkZXI9PT0iWFlaIil7Y29uc3QgZD1vKmwsbT1vKnIseT1hKmwseD1hKnI7ZVswXT1oKmwsZVs0XT0taCpyLGVbOF09dSxlWzFdPW0reSp1LGVbNV09ZC14KnUsZVs5XT0tYSpoLGVbMl09eC1kKnUsZVs2XT15K20qdSxlWzEwXT1vKmh9ZWxzZSBpZih0Lm9yZGVyPT09IllYWiIpe2NvbnN0IGQ9aCpsLG09aCpyLHk9dSpsLHg9dSpyO2VbMF09ZCt4KmEsZVs0XT15KmEtbSxlWzhdPW8qdSxlWzFdPW8qcixlWzVdPW8qbCxlWzldPS1hLGVbMl09bSphLXksZVs2XT14K2QqYSxlWzEwXT1vKmh9ZWxzZSBpZih0Lm9yZGVyPT09IlpYWSIpe2NvbnN0IGQ9aCpsLG09aCpyLHk9dSpsLHg9dSpyO2VbMF09ZC14KmEsZVs0XT0tbypyLGVbOF09eSttKmEsZVsxXT1tK3kqYSxlWzVdPW8qbCxlWzldPXgtZCphLGVbMl09LW8qdSxlWzZdPWEsZVsxMF09bypofWVsc2UgaWYodC5vcmRlcj09PSJaWVgiKXtjb25zdCBkPW8qbCxtPW8qcix5PWEqbCx4PWEqcjtlWzBdPWgqbCxlWzRdPXkqdS1tLGVbOF09ZCp1K3gsZVsxXT1oKnIsZVs1XT14KnUrZCxlWzldPW0qdS15LGVbMl09LXUsZVs2XT1hKmgsZVsxMF09bypofWVsc2UgaWYodC5vcmRlcj09PSJZWlgiKXtjb25zdCBkPW8qaCxtPW8qdSx5PWEqaCx4PWEqdTtlWzBdPWgqbCxlWzRdPXgtZCpyLGVbOF09eSpyK20sZVsxXT1yLGVbNV09bypsLGVbOV09LWEqbCxlWzJdPS11KmwsZVs2XT1tKnIreSxlWzEwXT1kLXgqcn1lbHNlIGlmKHQub3JkZXI9PT0iWFpZIil7Y29uc3QgZD1vKmgsbT1vKnUseT1hKmgseD1hKnU7ZVswXT1oKmwsZVs0XT0tcixlWzhdPXUqbCxlWzFdPWQqcit4LGVbNV09bypsLGVbOV09bSpyLXksZVsyXT15KnItbSxlWzZdPWEqbCxlWzEwXT14KnIrZH1yZXR1cm4gZVszXT0wLGVbN109MCxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5jb21wb3NlKFRlLHQsQ2UpfWxvb2tBdCh0LGUsaSl7Y29uc3Qgcz10aGlzLmVsZW1lbnRzO3JldHVybiBOLnN1YlZlY3RvcnModCxlKSxOLmxlbmd0aFNxKCk9PT0wJiYoTi56PTEpLE4ubm9ybWFsaXplKCksbnQuY3Jvc3NWZWN0b3JzKGksTiksbnQubGVuZ3RoU3EoKT09PTAmJihNYXRoLmFicyhpLnopPT09MT9OLngrPTFlLTQ6Ti56Kz0xZS00LE4ubm9ybWFsaXplKCksbnQuY3Jvc3NWZWN0b3JzKGksTikpLG50Lm5vcm1hbGl6ZSgpLE90LmNyb3NzVmVjdG9ycyhOLG50KSxzWzBdPW50Lngsc1s0XT1PdC54LHNbOF09Ti54LHNbMV09bnQueSxzWzVdPU90Lnksc1s5XT1OLnksc1syXT1udC56LHNbNl09T3QueixzWzEwXT1OLnosdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtjb25zdCBpPXQuZWxlbWVudHMscz1lLmVsZW1lbnRzLG49dGhpcy5lbGVtZW50cyxvPWlbMF0sYT1pWzRdLGg9aVs4XSx1PWlbMTJdLGw9aVsxXSxyPWlbNV0sZD1pWzldLG09aVsxM10seT1pWzJdLHg9aVs2XSxfPWlbMTBdLHA9aVsxNF0sdz1pWzNdLEE9aVs3XSxTPWlbMTFdLHo9aVsxNV0sVD1zWzBdLGI9c1s0XSxnPXNbOF0sRT1zWzEyXSxGPXNbMV0sQj1zWzVdLE89c1s5XSxrPXNbMTNdLEg9c1syXSxidD1zWzZdLGF0PXNbMTBdLGo9c1sxNF0sTD1zWzNdLFY9c1s3XSx6dD1zWzExXSx3dD1zWzE1XTtyZXR1cm4gblswXT1vKlQrYSpGK2gqSCt1Kkwsbls0XT1vKmIrYSpCK2gqYnQrdSpWLG5bOF09bypnK2EqTytoKmF0K3UqenQsblsxMl09bypFK2EqaytoKmordSp3dCxuWzFdPWwqVCtyKkYrZCpIK20qTCxuWzVdPWwqYityKkIrZCpidCttKlYsbls5XT1sKmcrcipPK2QqYXQrbSp6dCxuWzEzXT1sKkUrciprK2QqaittKnd0LG5bMl09eSpUK3gqRitfKkgrcCpMLG5bNl09eSpiK3gqQitfKmJ0K3AqVixuWzEwXT15KmcreCpPK18qYXQrcCp6dCxuWzE0XT15KkUreCprK18qaitwKnd0LG5bM109dypUK0EqRitTKkgreipMLG5bN109dypiK0EqQitTKmJ0K3oqVixuWzExXT13KmcrQSpPK1MqYXQreip6dCxuWzE1XT13KkUrQSprK1Mqait6Knd0LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzO3JldHVybiBlWzBdKj10LGVbNF0qPXQsZVs4XSo9dCxlWzEyXSo9dCxlWzFdKj10LGVbNV0qPXQsZVs5XSo9dCxlWzEzXSo9dCxlWzJdKj10LGVbNl0qPXQsZVsxMF0qPXQsZVsxNF0qPXQsZVszXSo9dCxlWzddKj10LGVbMTFdKj10LGVbMTVdKj10LHRoaXN9ZGV0ZXJtaW5hbnQoKXtjb25zdCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFs0XSxzPXRbOF0sbj10WzEyXSxvPXRbMV0sYT10WzVdLGg9dFs5XSx1PXRbMTNdLGw9dFsyXSxyPXRbNl0sZD10WzEwXSxtPXRbMTRdLHk9dFszXSx4PXRbN10sXz10WzExXSxwPXRbMTVdO3JldHVybiB5KigrbipoKnItcyp1KnItbiphKmQraSp1KmQrcyphKm0taSpoKm0pK3gqKCtlKmgqbS1lKnUqZCtuKm8qZC1zKm8qbStzKnUqbC1uKmgqbCkrXyooK2UqdSpyLWUqYSptLW4qbypyK2kqbyptK24qYSpsLWkqdSpsKStwKigtcyphKmwtZSpoKnIrZSphKmQrcypvKnItaSpvKmQraSpoKmwpfXRyYW5zcG9zZSgpe2NvbnN0IHQ9dGhpcy5lbGVtZW50cztsZXQgZTtyZXR1cm4gZT10WzFdLHRbMV09dFs0XSx0WzRdPWUsZT10WzJdLHRbMl09dFs4XSx0WzhdPWUsZT10WzZdLHRbNl09dFs5XSx0WzldPWUsZT10WzNdLHRbM109dFsxMl0sdFsxMl09ZSxlPXRbN10sdFs3XT10WzEzXSx0WzEzXT1lLGU9dFsxMV0sdFsxMV09dFsxNF0sdFsxNF09ZSx0aGlzfXNldFBvc2l0aW9uKHQsZSxpKXtjb25zdCBzPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQuaXNWZWN0b3IzPyhzWzEyXT10Lngsc1sxM109dC55LHNbMTRdPXQueik6KHNbMTJdPXQsc1sxM109ZSxzWzE0XT1pKSx0aGlzfWludmVydCgpe2NvbnN0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHM9dFsyXSxuPXRbM10sbz10WzRdLGE9dFs1XSxoPXRbNl0sdT10WzddLGw9dFs4XSxyPXRbOV0sZD10WzEwXSxtPXRbMTFdLHk9dFsxMl0seD10WzEzXSxfPXRbMTRdLHA9dFsxNV0sdz1yKl8qdS14KmQqdSt4KmgqbS1hKl8qbS1yKmgqcCthKmQqcCxBPXkqZCp1LWwqXyp1LXkqaCptK28qXyptK2wqaCpwLW8qZCpwLFM9bCp4KnUteSpyKnUreSphKm0tbyp4Km0tbCphKnArbypyKnAsej15KnIqaC1sKngqaC15KmEqZCtvKngqZCtsKmEqXy1vKnIqXyxUPWUqdytpKkErcypTK24qejtpZihUPT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCk7Y29uc3QgYj0xL1Q7cmV0dXJuIHRbMF09dypiLHRbMV09KHgqZCpuLXIqXypuLXgqcyptK2kqXyptK3IqcypwLWkqZCpwKSpiLHRbMl09KGEqXypuLXgqaCpuK3gqcyp1LWkqXyp1LWEqcypwK2kqaCpwKSpiLHRbM109KHIqaCpuLWEqZCpuLXIqcyp1K2kqZCp1K2EqcyptLWkqaCptKSpiLHRbNF09QSpiLHRbNV09KGwqXypuLXkqZCpuK3kqcyptLWUqXyptLWwqcypwK2UqZCpwKSpiLHRbNl09KHkqaCpuLW8qXypuLXkqcyp1K2UqXyp1K28qcypwLWUqaCpwKSpiLHRbN109KG8qZCpuLWwqaCpuK2wqcyp1LWUqZCp1LW8qcyptK2UqaCptKSpiLHRbOF09UypiLHRbOV09KHkqcipuLWwqeCpuLXkqaSptK2UqeCptK2wqaSpwLWUqcipwKSpiLHRbMTBdPShvKngqbi15KmEqbit5KmkqdS1lKngqdS1vKmkqcCtlKmEqcCkqYix0WzExXT0obCphKm4tbypyKm4tbCppKnUrZSpyKnUrbyppKm0tZSphKm0pKmIsdFsxMl09eipiLHRbMTNdPShsKngqcy15KnIqcyt5KmkqZC1lKngqZC1sKmkqXytlKnIqXykqYix0WzE0XT0oeSphKnMtbyp4KnMteSppKmgrZSp4KmgrbyppKl8tZSphKl8pKmIsdFsxNV09KG8qcipzLWwqYSpzK2wqaSpoLWUqcipoLW8qaSpkK2UqYSpkKSpiLHRoaXN9c2NhbGUodCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLGk9dC54LHM9dC55LG49dC56O3JldHVybiBlWzBdKj1pLGVbNF0qPXMsZVs4XSo9bixlWzFdKj1pLGVbNV0qPXMsZVs5XSo9bixlWzJdKj1pLGVbNl0qPXMsZVsxMF0qPW4sZVszXSo9aSxlWzddKj1zLGVbMTFdKj1uLHRoaXN9Z2V0TWF4U2NhbGVPbkF4aXMoKXtjb25zdCB0PXRoaXMuZWxlbWVudHMsZT10WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSxpPXRbNF0qdFs0XSt0WzVdKnRbNV0rdFs2XSp0WzZdLHM9dFs4XSp0WzhdK3RbOV0qdFs5XSt0WzEwXSp0WzEwXTtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgubWF4KGUsaSxzKSl9bWFrZVRyYW5zbGF0aW9uKHQsZSxpKXtyZXR1cm4gdC5pc1ZlY3RvcjM/dGhpcy5zZXQoMSwwLDAsdC54LDAsMSwwLHQueSwwLDAsMSx0LnosMCwwLDAsMSk6dGhpcy5zZXQoMSwwLDAsdCwwLDEsMCxlLDAsMCwxLGksMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25YKHQpe2NvbnN0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLGUsLWksMCwwLGksZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWSh0KXtjb25zdCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsMCxpLDAsMCwxLDAsMCwtaSwwLGUsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbloodCl7Y29uc3QgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLC1pLDAsMCxpLGUsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25BeGlzKHQsZSl7Y29uc3QgaT1NYXRoLmNvcyhlKSxzPU1hdGguc2luKGUpLG49MS1pLG89dC54LGE9dC55LGg9dC56LHU9bipvLGw9biphO3JldHVybiB0aGlzLnNldCh1Km8raSx1KmEtcypoLHUqaCtzKmEsMCx1KmErcypoLGwqYStpLGwqaC1zKm8sMCx1KmgtcyphLGwqaCtzKm8sbipoKmgraSwwLDAsMCwwLDEpLHRoaXN9bWFrZVNjYWxlKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQodCwwLDAsMCwwLGUsMCwwLDAsMCxpLDAsMCwwLDAsMSksdGhpc31tYWtlU2hlYXIodCxlLGkscyxuLG8pe3JldHVybiB0aGlzLnNldCgxLGksbiwwLHQsMSxvLDAsZSxzLDEsMCwwLDAsMCwxKSx0aGlzfWNvbXBvc2UodCxlLGkpe2NvbnN0IHM9dGhpcy5lbGVtZW50cyxuPWUuX3gsbz1lLl95LGE9ZS5feixoPWUuX3csdT1uK24sbD1vK28scj1hK2EsZD1uKnUsbT1uKmwseT1uKnIseD1vKmwsXz1vKnIscD1hKnIsdz1oKnUsQT1oKmwsUz1oKnIsej1pLngsVD1pLnksYj1pLno7cmV0dXJuIHNbMF09KDEtKHgrcCkpKnosc1sxXT0obStTKSp6LHNbMl09KHktQSkqeixzWzNdPTAsc1s0XT0obS1TKSpULHNbNV09KDEtKGQrcCkpKlQsc1s2XT0oXyt3KSpULHNbN109MCxzWzhdPSh5K0EpKmIsc1s5XT0oXy13KSpiLHNbMTBdPSgxLShkK3gpKSpiLHNbMTFdPTAsc1sxMl09dC54LHNbMTNdPXQueSxzWzE0XT10Lnosc1sxNV09MSx0aGlzfWRlY29tcG9zZSh0LGUsaSl7Y29uc3Qgcz10aGlzLmVsZW1lbnRzO2xldCBuPWZ0LnNldChzWzBdLHNbMV0sc1syXSkubGVuZ3RoKCk7Y29uc3Qgbz1mdC5zZXQoc1s0XSxzWzVdLHNbNl0pLmxlbmd0aCgpLGE9ZnQuc2V0KHNbOF0sc1s5XSxzWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihuPS1uKSx0Lng9c1sxMl0sdC55PXNbMTNdLHQuej1zWzE0XSxZLmNvcHkodGhpcyk7Y29uc3QgdT0xL24sbD0xL28scj0xL2E7cmV0dXJuIFkuZWxlbWVudHNbMF0qPXUsWS5lbGVtZW50c1sxXSo9dSxZLmVsZW1lbnRzWzJdKj11LFkuZWxlbWVudHNbNF0qPWwsWS5lbGVtZW50c1s1XSo9bCxZLmVsZW1lbnRzWzZdKj1sLFkuZWxlbWVudHNbOF0qPXIsWS5lbGVtZW50c1s5XSo9cixZLmVsZW1lbnRzWzEwXSo9cixlLnNldEZyb21Sb3RhdGlvbk1hdHJpeChZKSxpLng9bixpLnk9byxpLno9YSx0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LGUsaSxzLG4sbyxhPTJlMyl7Y29uc3QgaD10aGlzLmVsZW1lbnRzLHU9MipuLyhlLXQpLGw9MipuLyhpLXMpLHI9KGUrdCkvKGUtdCksZD0oaStzKS8oaS1zKTtsZXQgbSx5O2lmKGE9PT0yZTMpbT0tKG8rbikvKG8tbikseT0tMipvKm4vKG8tbik7ZWxzZSBpZihhPT09MjAwMSltPS1vLyhvLW4pLHk9LW8qbi8oby1uKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVEhSRUUuTWF0cml4NC5tYWtlUGVyc3BlY3RpdmUoKTogSW52YWxpZCBjb29yZGluYXRlIHN5c3RlbTogIithKTtyZXR1cm4gaFswXT11LGhbNF09MCxoWzhdPXIsaFsxMl09MCxoWzFdPTAsaFs1XT1sLGhbOV09ZCxoWzEzXT0wLGhbMl09MCxoWzZdPTAsaFsxMF09bSxoWzE0XT15LGhbM109MCxoWzddPTAsaFsxMV09LTEsaFsxNV09MCx0aGlzfW1ha2VPcnRob2dyYXBoaWModCxlLGkscyxuLG8sYT0yZTMpe2NvbnN0IGg9dGhpcy5lbGVtZW50cyx1PTEvKGUtdCksbD0xLyhpLXMpLHI9MS8oby1uKSxkPShlK3QpKnUsbT0oaStzKSpsO2xldCB5LHg7aWYoYT09PTJlMyl5PShvK24pKnIseD0tMipyO2Vsc2UgaWYoYT09PTIwMDEpeT1uKnIseD0tMSpyO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5NYXRyaXg0Lm1ha2VPcnRob2dyYXBoaWMoKTogSW52YWxpZCBjb29yZGluYXRlIHN5c3RlbTogIithKTtyZXR1cm4gaFswXT0yKnUsaFs0XT0wLGhbOF09MCxoWzEyXT0tZCxoWzFdPTAsaFs1XT0yKmwsaFs5XT0wLGhbMTNdPS1tLGhbMl09MCxoWzZdPTAsaFsxMF09eCxoWzE0XT0teSxoWzNdPTAsaFs3XT0wLGhbMTFdPTAsaFsxNV09MSx0aGlzfWVxdWFscyh0KXtjb25zdCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO2ZvcihsZXQgcz0wO3M8MTY7cysrKWlmKGVbc10hPT1pW3NdKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LGU9MCl7Zm9yKGxldCBpPTA7aTwxNjtpKyspdGhpcy5lbGVtZW50c1tpXT10W2krZV07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7Y29uc3QgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPWlbMF0sdFtlKzFdPWlbMV0sdFtlKzJdPWlbMl0sdFtlKzNdPWlbM10sdFtlKzRdPWlbNF0sdFtlKzVdPWlbNV0sdFtlKzZdPWlbNl0sdFtlKzddPWlbN10sdFtlKzhdPWlbOF0sdFtlKzldPWlbOV0sdFtlKzEwXT1pWzEwXSx0W2UrMTFdPWlbMTFdLHRbZSsxMl09aVsxMl0sdFtlKzEzXT1pWzEzXSx0W2UrMTRdPWlbMTRdLHRbZSsxNV09aVsxNV0sdH19Y29uc3QgZnQ9bmV3IGYsWT1uZXcgWixUZT1uZXcgZigwLDAsMCksQ2U9bmV3IGYoMSwxLDEpLG50PW5ldyBmLE90PW5ldyBmLE49bmV3IGYscmU9bmV3IFosaGU9bmV3IFR0O2NsYXNzIHF0e2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wLHM9cXQuREVGQVVMVF9PUkRFUil7dGhpcy5pc0V1bGVyPSEwLHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX29yZGVyPXN9Z2V0IHgoKXtyZXR1cm4gdGhpcy5feH1zZXQgeCh0KXt0aGlzLl94PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3l9c2V0IHkodCl7dGhpcy5feT10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeigpe3JldHVybiB0aGlzLl96fXNldCB6KHQpe3RoaXMuX3o9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IG9yZGVyKCl7cmV0dXJuIHRoaXMuX29yZGVyfXNldCBvcmRlcih0KXt0aGlzLl9vcmRlcj10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxlLGkscz10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX29yZGVyPXMsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fb3JkZXIpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC5feCx0aGlzLl95PXQuX3ksdGhpcy5fej10Ll96LHRoaXMuX29yZGVyPXQuX29yZGVyLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0LGU9dGhpcy5fb3JkZXIsaT0hMCl7Y29uc3Qgcz10LmVsZW1lbnRzLG49c1swXSxvPXNbNF0sYT1zWzhdLGg9c1sxXSx1PXNbNV0sbD1zWzldLHI9c1syXSxkPXNbNl0sbT1zWzEwXTtzd2l0Y2goZSl7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKEooYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtbCxtKSx0aGlzLl96PU1hdGguYXRhbjIoLW8sbikpOih0aGlzLl94PU1hdGguYXRhbjIoZCx1KSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PU1hdGguYXNpbigtSihsLC0xLDEpKSxNYXRoLmFicyhsKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKGEsbSksdGhpcy5fej1NYXRoLmF0YW4yKGgsdSkpOih0aGlzLl95PU1hdGguYXRhbjIoLXIsbiksdGhpcy5fej0wKTticmVhaztjYXNlIlpYWSI6dGhpcy5feD1NYXRoLmFzaW4oSihkLC0xLDEpKSxNYXRoLmFicyhkKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC1yLG0pLHRoaXMuX3o9TWF0aC5hdGFuMigtbyx1KSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIoaCxuKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1KKHIsLTEsMSkpLE1hdGguYWJzKHIpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoZCxtKSx0aGlzLl96PU1hdGguYXRhbjIoaCxuKSk6KHRoaXMuX3g9MCx0aGlzLl96PU1hdGguYXRhbjIoLW8sdSkpO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl96PU1hdGguYXNpbihKKGgsLTEsMSkpLE1hdGguYWJzKGgpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLWwsdSksdGhpcy5feT1NYXRoLmF0YW4yKC1yLG4pKToodGhpcy5feD0wLHRoaXMuX3k9TWF0aC5hdGFuMihhLG0pKTticmVhaztjYXNlIlhaWSI6dGhpcy5fej1NYXRoLmFzaW4oLUoobywtMSwxKSksTWF0aC5hYnMobyk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihkLHUpLHRoaXMuX3k9TWF0aC5hdGFuMihhLG4pKToodGhpcy5feD1NYXRoLmF0YW4yKC1sLG0pLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitlKX1yZXR1cm4gdGhpcy5fb3JkZXI9ZSxpPT09ITAmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQsZSxpKXtyZXR1cm4gcmUubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgocmUsZSxpKX1zZXRGcm9tVmVjdG9yMyh0LGU9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLnNldCh0LngsdC55LHQueixlKX1yZW9yZGVyKHQpe3JldHVybiBoZS5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihoZSx0KX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX29yZGVyPT09dGhpcy5fb3JkZXJ9ZnJvbUFycmF5KHQpe3JldHVybiB0aGlzLl94PXRbMF0sdGhpcy5feT10WzFdLHRoaXMuX3o9dFsyXSx0WzNdIT09dm9pZCAwJiYodGhpcy5fb3JkZXI9dFszXSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fb3JkZXIsdH1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMuX3gseWllbGQgdGhpcy5feSx5aWVsZCB0aGlzLl96LHlpZWxkIHRoaXMuX29yZGVyfX1xdC5ERUZBVUxUX09SREVSPSJYWVoiO2NsYXNzIEVle2NvbnN0cnVjdG9yKCl7dGhpcy5tYXNrPTF9c2V0KHQpe3RoaXMubWFzaz0oMTw8dHwwKT4+PjB9ZW5hYmxlKHQpe3RoaXMubWFza3w9MTw8dHwwfWVuYWJsZUFsbCgpe3RoaXMubWFzaz0tMX10b2dnbGUodCl7dGhpcy5tYXNrXj0xPDx0fDB9ZGlzYWJsZSh0KXt0aGlzLm1hc2smPX4oMTw8dHwwKX1kaXNhYmxlQWxsKCl7dGhpcy5tYXNrPTB9dGVzdCh0KXtyZXR1cm4odGhpcy5tYXNrJnQubWFzaykhPT0wfWlzRW5hYmxlZCh0KXtyZXR1cm4odGhpcy5tYXNrJigxPDx0fDApKSE9PTB9fWxldCBrZT0wO2NvbnN0IGFlPW5ldyBmLGd0PW5ldyBUdCxLPW5ldyBaLHZ0PW5ldyBmLFJ0PW5ldyBmLFJlPW5ldyBmLEZlPW5ldyBUdCxvZT1uZXcgZigxLDAsMCksdWU9bmV3IGYoMCwxLDApLGxlPW5ldyBmKDAsMCwxKSxjZT17dHlwZToiYWRkZWQifSxVZT17dHlwZToicmVtb3ZlZCJ9LF90PXt0eXBlOiJjaGlsZGFkZGVkIixjaGlsZDpudWxsfSwkdD17dHlwZToiY2hpbGRyZW1vdmVkIixjaGlsZDpudWxsfTtjbGFzcyBydCBleHRlbmRzIEx0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmlzT2JqZWN0M0Q9ITAsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6a2UrK30pLHRoaXMudXVpZD1QdCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik9iamVjdDNEIix0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49W10sdGhpcy51cD1ydC5ERUZBVUxUX1VQLmNsb25lKCk7Y29uc3QgdD1uZXcgZixlPW5ldyBxdCxpPW5ldyBUdCxzPW5ldyBmKDEsMSwxKTtmdW5jdGlvbiBuKCl7aS5zZXRGcm9tRXVsZXIoZSwhMSl9ZnVuY3Rpb24gbygpe2Uuc2V0RnJvbVF1YXRlcm5pb24oaSx2b2lkIDAsITEpfWUuX29uQ2hhbmdlKG4pLGkuX29uQ2hhbmdlKG8pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3Bvc2l0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTp0fSxyb3RhdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZX0scXVhdGVybmlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6aX0sc2NhbGU6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnN9LG1vZGVsVmlld01hdHJpeDp7dmFsdWU6bmV3IFp9LG5vcm1hbE1hdHJpeDp7dmFsdWU6bmV3IG10fX0pLHRoaXMubWF0cml4PW5ldyBaLHRoaXMubWF0cml4V29ybGQ9bmV3IFosdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXJ0LkRFRkFVTFRfTUFUUklYX0FVVE9fVVBEQVRFLHRoaXMubWF0cml4V29ybGRBdXRvVXBkYXRlPXJ0LkRFRkFVTFRfTUFUUklYX1dPUkxEX0FVVE9fVVBEQVRFLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0aGlzLmxheWVycz1uZXcgRWUsdGhpcy52aXNpYmxlPSEwLHRoaXMuY2FzdFNoYWRvdz0hMSx0aGlzLnJlY2VpdmVTaGFkb3c9ITEsdGhpcy5mcnVzdHVtQ3VsbGVkPSEwLHRoaXMucmVuZGVyT3JkZXI9MCx0aGlzLmFuaW1hdGlvbnM9W10sdGhpcy51c2VyRGF0YT17fX1vbkJlZm9yZVNoYWRvdygpe31vbkFmdGVyU2hhZG93KCl7fW9uQmVmb3JlUmVuZGVyKCl7fW9uQWZ0ZXJSZW5kZXIoKXt9YXBwbHlNYXRyaXg0KHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSh0KSx0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodCksdGhpc31zZXRSb3RhdGlvbkZyb21BeGlzQW5nbGUodCxlKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0LGUpfXNldFJvdGF0aW9uRnJvbUV1bGVyKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIodCwhMCl9c2V0Um90YXRpb25Gcm9tTWF0cml4KHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodCl9c2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbih0KXt0aGlzLnF1YXRlcm5pb24uY29weSh0KX1yb3RhdGVPbkF4aXModCxlKXtyZXR1cm4gZ3Quc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5tdWx0aXBseShndCksdGhpc31yb3RhdGVPbldvcmxkQXhpcyh0LGUpe3JldHVybiBndC5zZXRGcm9tQXhpc0FuZ2xlKHQsZSksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KGd0KSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKG9lLHQpfXJvdGF0ZVkodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKHVlLHQpfXJvdGF0ZVoodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKGxlLHQpfXRyYW5zbGF0ZU9uQXhpcyh0LGUpe3JldHVybiBhZS5jb3B5KHQpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pLHRoaXMucG9zaXRpb24uYWRkKGFlLm11bHRpcGx5U2NhbGFyKGUpKSx0aGlzfXRyYW5zbGF0ZVgodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKG9lLHQpfXRyYW5zbGF0ZVkodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKHVlLHQpfXRyYW5zbGF0ZVoodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGxlLHQpfWxvY2FsVG9Xb3JsZCh0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCl9d29ybGRUb0xvY2FsKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0LmFwcGx5TWF0cml4NChLLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCkpfWxvb2tBdCh0LGUsaSl7dC5pc1ZlY3RvcjM/dnQuY29weSh0KTp2dC5zZXQodCxlLGkpO2NvbnN0IHM9dGhpcy5wYXJlbnQ7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksUnQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpLHRoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD9LLmxvb2tBdChSdCx2dCx0aGlzLnVwKTpLLmxvb2tBdCh2dCxSdCx0aGlzLnVwKSx0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KEspLHMmJihLLmV4dHJhY3RSb3RhdGlvbihzLm1hdHJpeFdvcmxkKSxndC5zZXRGcm9tUm90YXRpb25NYXRyaXgoSyksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KGd0LmludmVydCgpKSl9YWRkKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCBlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0aGlzLmFkZChhcmd1bWVudHNbZV0pO3JldHVybiB0aGlzfXJldHVybiB0PT09dGhpcz8oY29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNlbGYuIix0KSx0aGlzKToodCYmdC5pc09iamVjdDNEPyh0LnJlbW92ZUZyb21QYXJlbnQoKSx0LnBhcmVudD10aGlzLHRoaXMuY2hpbGRyZW4ucHVzaCh0KSx0LmRpc3BhdGNoRXZlbnQoY2UpLF90LmNoaWxkPXQsdGhpcy5kaXNwYXRjaEV2ZW50KF90KSxfdC5jaGlsZD1udWxsKTpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuT2JqZWN0M0QuIix0KSx0aGlzKX1yZW1vdmUodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXRoaXMucmVtb3ZlKGFyZ3VtZW50c1tpXSk7cmV0dXJuIHRoaXN9Y29uc3QgZT10aGlzLmNoaWxkcmVuLmluZGV4T2YodCk7cmV0dXJuIGUhPT0tMSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UoZSwxKSx0LmRpc3BhdGNoRXZlbnQoVWUpLCR0LmNoaWxkPXQsdGhpcy5kaXNwYXRjaEV2ZW50KCR0KSwkdC5jaGlsZD1udWxsKSx0aGlzfXJlbW92ZUZyb21QYXJlbnQoKXtjb25zdCB0PXRoaXMucGFyZW50O3JldHVybiB0IT09bnVsbCYmdC5yZW1vdmUodGhpcyksdGhpc31jbGVhcigpe3JldHVybiB0aGlzLnJlbW92ZSguLi50aGlzLmNoaWxkcmVuKX1hdHRhY2godCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLEsuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSx0LnBhcmVudCE9PW51bGwmJih0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksSy5tdWx0aXBseSh0LnBhcmVudC5tYXRyaXhXb3JsZCkpLHQuYXBwbHlNYXRyaXg0KEspLHQucmVtb3ZlRnJvbVBhcmVudCgpLHQucGFyZW50PXRoaXMsdGhpcy5jaGlsZHJlbi5wdXNoKHQpLHQudXBkYXRlV29ybGRNYXRyaXgoITEsITApLHQuZGlzcGF0Y2hFdmVudChjZSksX3QuY2hpbGQ9dCx0aGlzLmRpc3BhdGNoRXZlbnQoX3QpLF90LmNoaWxkPW51bGwsdGhpc31nZXRPYmplY3RCeUlkKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoImlkIix0KX1nZXRPYmplY3RCeU5hbWUodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgibmFtZSIsdCl9Z2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpe2lmKHRoaXNbdF09PT1lKXJldHVybiB0aGlzO2ZvcihsZXQgaT0wLHM9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aTxzO2krKyl7Y29uc3Qgbz10aGlzLmNoaWxkcmVuW2ldLmdldE9iamVjdEJ5UHJvcGVydHkodCxlKTtpZihvIT09dm9pZCAwKXJldHVybiBvfX1nZXRPYmplY3RzQnlQcm9wZXJ0eSh0LGUsaT1bXSl7dGhpc1t0XT09PWUmJmkucHVzaCh0aGlzKTtjb25zdCBzPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsbz1zLmxlbmd0aDtuPG87bisrKXNbbl0uZ2V0T2JqZWN0c0J5UHJvcGVydHkodCxlLGkpO3JldHVybiBpfWdldFdvcmxkUG9zaXRpb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpfWdldFdvcmxkUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoUnQsdCxSZSksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShSdCxGZSx0KSx0fWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2NvbnN0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoZVs4XSxlWzldLGVbMTBdKS5ub3JtYWxpemUoKX1yYXljYXN0KCl7fXRyYXZlcnNlKHQpe3QodGhpcyk7Y29uc3QgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHM9ZS5sZW5ndGg7aTxzO2krKyllW2ldLnRyYXZlcnNlKHQpfXRyYXZlcnNlVmlzaWJsZSh0KXtpZih0aGlzLnZpc2libGU9PT0hMSlyZXR1cm47dCh0aGlzKTtjb25zdCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBpPTAscz1lLmxlbmd0aDtpPHM7aSsrKWVbaV0udHJhdmVyc2VWaXNpYmxlKHQpfXRyYXZlcnNlQW5jZXN0b3JzKHQpe2NvbnN0IGU9dGhpcy5wYXJlbnQ7ZSE9PW51bGwmJih0KGUpLGUudHJhdmVyc2VBbmNlc3RvcnModCkpfXVwZGF0ZU1hdHJpeCgpe3RoaXMubWF0cml4LmNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSwodGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlfHx0KSYmKHRoaXMubWF0cml4V29ybGRBdXRvVXBkYXRlPT09ITAmJih0aGlzLnBhcmVudD09PW51bGw/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpKSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdD0hMCk7Y29uc3QgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHM9ZS5sZW5ndGg7aTxzO2krKyllW2ldLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7Y29uc3QgaT10aGlzLnBhcmVudDtpZih0PT09ITAmJmkhPT1udWxsJiZpLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5tYXRyaXhXb3JsZEF1dG9VcGRhdGU9PT0hMCYmKHRoaXMucGFyZW50PT09bnVsbD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCkpLGU9PT0hMCl7Y29uc3Qgcz10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLG89cy5sZW5ndGg7bjxvO24rKylzW25dLnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKX19dG9KU09OKHQpe2NvbnN0IGU9dD09PXZvaWQgMHx8dHlwZW9mIHQ9PSJzdHJpbmciLGk9e307ZSYmKHQ9e2dlb21ldHJpZXM6e30sbWF0ZXJpYWxzOnt9LHRleHR1cmVzOnt9LGltYWdlczp7fSxzaGFwZXM6e30sc2tlbGV0b25zOnt9LGFuaW1hdGlvbnM6e30sbm9kZXM6e319LGkubWV0YWRhdGE9e3ZlcnNpb246NC42LHR5cGU6Ik9iamVjdCIsZ2VuZXJhdG9yOiJPYmplY3QzRC50b0pTT04ifSk7Y29uc3Qgcz17fTtzLnV1aWQ9dGhpcy51dWlkLHMudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJihzLm5hbWU9dGhpcy5uYW1lKSx0aGlzLmNhc3RTaGFkb3c9PT0hMCYmKHMuY2FzdFNoYWRvdz0hMCksdGhpcy5yZWNlaXZlU2hhZG93PT09ITAmJihzLnJlY2VpdmVTaGFkb3c9ITApLHRoaXMudmlzaWJsZT09PSExJiYocy52aXNpYmxlPSExKSx0aGlzLmZydXN0dW1DdWxsZWQ9PT0hMSYmKHMuZnJ1c3R1bUN1bGxlZD0hMSksdGhpcy5yZW5kZXJPcmRlciE9PTAmJihzLnJlbmRlck9yZGVyPXRoaXMucmVuZGVyT3JkZXIpLE9iamVjdC5rZXlzKHRoaXMudXNlckRhdGEpLmxlbmd0aD4wJiYocy51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxzLmxheWVycz10aGlzLmxheWVycy5tYXNrLHMubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSxzLnVwPXRoaXMudXAudG9BcnJheSgpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT09PSExJiYocy5tYXRyaXhBdXRvVXBkYXRlPSExKSx0aGlzLmlzSW5zdGFuY2VkTWVzaCYmKHMudHlwZT0iSW5zdGFuY2VkTWVzaCIscy5jb3VudD10aGlzLmNvdW50LHMuaW5zdGFuY2VNYXRyaXg9dGhpcy5pbnN0YW5jZU1hdHJpeC50b0pTT04oKSx0aGlzLmluc3RhbmNlQ29sb3IhPT1udWxsJiYocy5pbnN0YW5jZUNvbG9yPXRoaXMuaW5zdGFuY2VDb2xvci50b0pTT04oKSkpLHRoaXMuaXNCYXRjaGVkTWVzaCYmKHMudHlwZT0iQmF0Y2hlZE1lc2giLHMucGVyT2JqZWN0RnJ1c3R1bUN1bGxlZD10aGlzLnBlck9iamVjdEZydXN0dW1DdWxsZWQscy5zb3J0T2JqZWN0cz10aGlzLnNvcnRPYmplY3RzLHMuZHJhd1Jhbmdlcz10aGlzLl9kcmF3UmFuZ2VzLHMucmVzZXJ2ZWRSYW5nZXM9dGhpcy5fcmVzZXJ2ZWRSYW5nZXMscy52aXNpYmlsaXR5PXRoaXMuX3Zpc2liaWxpdHkscy5hY3RpdmU9dGhpcy5fYWN0aXZlLHMuYm91bmRzPXRoaXMuX2JvdW5kcy5tYXAoYT0+KHtib3hJbml0aWFsaXplZDphLmJveEluaXRpYWxpemVkLGJveE1pbjphLmJveC5taW4udG9BcnJheSgpLGJveE1heDphLmJveC5tYXgudG9BcnJheSgpLHNwaGVyZUluaXRpYWxpemVkOmEuc3BoZXJlSW5pdGlhbGl6ZWQsc3BoZXJlUmFkaXVzOmEuc3BoZXJlLnJhZGl1cyxzcGhlcmVDZW50ZXI6YS5zcGhlcmUuY2VudGVyLnRvQXJyYXkoKX0pKSxzLm1heEluc3RhbmNlQ291bnQ9dGhpcy5fbWF4SW5zdGFuY2VDb3VudCxzLm1heFZlcnRleENvdW50PXRoaXMuX21heFZlcnRleENvdW50LHMubWF4SW5kZXhDb3VudD10aGlzLl9tYXhJbmRleENvdW50LHMuZ2VvbWV0cnlJbml0aWFsaXplZD10aGlzLl9nZW9tZXRyeUluaXRpYWxpemVkLHMuZ2VvbWV0cnlDb3VudD10aGlzLl9nZW9tZXRyeUNvdW50LHMubWF0cmljZXNUZXh0dXJlPXRoaXMuX21hdHJpY2VzVGV4dHVyZS50b0pTT04odCksdGhpcy5fY29sb3JzVGV4dHVyZSE9PW51bGwmJihzLmNvbG9yc1RleHR1cmU9dGhpcy5fY29sb3JzVGV4dHVyZS50b0pTT04odCkpLHRoaXMuYm91bmRpbmdTcGhlcmUhPT1udWxsJiYocy5ib3VuZGluZ1NwaGVyZT17Y2VudGVyOnMuYm91bmRpbmdTcGhlcmUuY2VudGVyLnRvQXJyYXkoKSxyYWRpdXM6cy5ib3VuZGluZ1NwaGVyZS5yYWRpdXN9KSx0aGlzLmJvdW5kaW5nQm94IT09bnVsbCYmKHMuYm91bmRpbmdCb3g9e21pbjpzLmJvdW5kaW5nQm94Lm1pbi50b0FycmF5KCksbWF4OnMuYm91bmRpbmdCb3gubWF4LnRvQXJyYXkoKX0pKTtmdW5jdGlvbiBuKGEsaCl7cmV0dXJuIGFbaC51dWlkXT09PXZvaWQgMCYmKGFbaC51dWlkXT1oLnRvSlNPTih0KSksaC51dWlkfWlmKHRoaXMuaXNTY2VuZSl0aGlzLmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQuaXNDb2xvcj9zLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTigpOnRoaXMuYmFja2dyb3VuZC5pc1RleHR1cmUmJihzLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTih0KS51dWlkKSksdGhpcy5lbnZpcm9ubWVudCYmdGhpcy5lbnZpcm9ubWVudC5pc1RleHR1cmUmJnRoaXMuZW52aXJvbm1lbnQuaXNSZW5kZXJUYXJnZXRUZXh0dXJlIT09ITAmJihzLmVudmlyb25tZW50PXRoaXMuZW52aXJvbm1lbnQudG9KU09OKHQpLnV1aWQpO2Vsc2UgaWYodGhpcy5pc01lc2h8fHRoaXMuaXNMaW5lfHx0aGlzLmlzUG9pbnRzKXtzLmdlb21ldHJ5PW4odC5nZW9tZXRyaWVzLHRoaXMuZ2VvbWV0cnkpO2NvbnN0IGE9dGhpcy5nZW9tZXRyeS5wYXJhbWV0ZXJzO2lmKGEhPT12b2lkIDAmJmEuc2hhcGVzIT09dm9pZCAwKXtjb25zdCBoPWEuc2hhcGVzO2lmKEFycmF5LmlzQXJyYXkoaCkpZm9yKGxldCB1PTAsbD1oLmxlbmd0aDt1PGw7dSsrKXtjb25zdCByPWhbdV07bih0LnNoYXBlcyxyKX1lbHNlIG4odC5zaGFwZXMsaCl9fWlmKHRoaXMuaXNTa2lubmVkTWVzaCYmKHMuYmluZE1vZGU9dGhpcy5iaW5kTW9kZSxzLmJpbmRNYXRyaXg9dGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKSx0aGlzLnNrZWxldG9uIT09dm9pZCAwJiYobih0LnNrZWxldG9ucyx0aGlzLnNrZWxldG9uKSxzLnNrZWxldG9uPXRoaXMuc2tlbGV0b24udXVpZCkpLHRoaXMubWF0ZXJpYWwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7Y29uc3QgYT1bXTtmb3IobGV0IGg9MCx1PXRoaXMubWF0ZXJpYWwubGVuZ3RoO2g8dTtoKyspYS5wdXNoKG4odC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbFtoXSkpO3MubWF0ZXJpYWw9YX1lbHNlIHMubWF0ZXJpYWw9bih0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsKTtpZih0aGlzLmNoaWxkcmVuLmxlbmd0aD4wKXtzLmNoaWxkcmVuPVtdO2ZvcihsZXQgYT0wO2E8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YSsrKXMuY2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2FdLnRvSlNPTih0KS5vYmplY3QpfWlmKHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg+MCl7cy5hbmltYXRpb25zPVtdO2ZvcihsZXQgYT0wO2E8dGhpcy5hbmltYXRpb25zLmxlbmd0aDthKyspe2NvbnN0IGg9dGhpcy5hbmltYXRpb25zW2FdO3MuYW5pbWF0aW9ucy5wdXNoKG4odC5hbmltYXRpb25zLGgpKX19aWYoZSl7Y29uc3QgYT1vKHQuZ2VvbWV0cmllcyksaD1vKHQubWF0ZXJpYWxzKSx1PW8odC50ZXh0dXJlcyksbD1vKHQuaW1hZ2VzKSxyPW8odC5zaGFwZXMpLGQ9byh0LnNrZWxldG9ucyksbT1vKHQuYW5pbWF0aW9ucykseT1vKHQubm9kZXMpO2EubGVuZ3RoPjAmJihpLmdlb21ldHJpZXM9YSksaC5sZW5ndGg+MCYmKGkubWF0ZXJpYWxzPWgpLHUubGVuZ3RoPjAmJihpLnRleHR1cmVzPXUpLGwubGVuZ3RoPjAmJihpLmltYWdlcz1sKSxyLmxlbmd0aD4wJiYoaS5zaGFwZXM9ciksZC5sZW5ndGg+MCYmKGkuc2tlbGV0b25zPWQpLG0ubGVuZ3RoPjAmJihpLmFuaW1hdGlvbnM9bSkseS5sZW5ndGg+MCYmKGkubm9kZXM9eSl9cmV0dXJuIGkub2JqZWN0PXMsaTtmdW5jdGlvbiBvKGEpe2NvbnN0IGg9W107Zm9yKGNvbnN0IHUgaW4gYSl7Y29uc3QgbD1hW3VdO2RlbGV0ZSBsLm1ldGFkYXRhLGgucHVzaChsKX1yZXR1cm4gaH19Y2xvbmUodCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzLHQpfWNvcHkodCxlPSEwKXtpZih0aGlzLm5hbWU9dC5uYW1lLHRoaXMudXAuY29weSh0LnVwKSx0aGlzLnBvc2l0aW9uLmNvcHkodC5wb3NpdGlvbiksdGhpcy5yb3RhdGlvbi5vcmRlcj10LnJvdGF0aW9uLm9yZGVyLHRoaXMucXVhdGVybmlvbi5jb3B5KHQucXVhdGVybmlvbiksdGhpcy5zY2FsZS5jb3B5KHQuc2NhbGUpLHRoaXMubWF0cml4LmNvcHkodC5tYXRyaXgpLHRoaXMubWF0cml4V29ybGQuY29weSh0Lm1hdHJpeFdvcmxkKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGRBdXRvVXBkYXRlPXQubWF0cml4V29ybGRBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT10Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUsdGhpcy5sYXllcnMubWFzaz10LmxheWVycy5tYXNrLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy5jYXN0U2hhZG93PXQuY2FzdFNoYWRvdyx0aGlzLnJlY2VpdmVTaGFkb3c9dC5yZWNlaXZlU2hhZG93LHRoaXMuZnJ1c3R1bUN1bGxlZD10LmZydXN0dW1DdWxsZWQsdGhpcy5yZW5kZXJPcmRlcj10LnJlbmRlck9yZGVyLHRoaXMuYW5pbWF0aW9ucz10LmFuaW1hdGlvbnMuc2xpY2UoKSx0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLGU9PT0hMClmb3IobGV0IGk9MDtpPHQuY2hpbGRyZW4ubGVuZ3RoO2krKyl7Y29uc3Qgcz10LmNoaWxkcmVuW2ldO3RoaXMuYWRkKHMuY2xvbmUoKSl9cmV0dXJuIHRoaXN9fXJ0LkRFRkFVTFRfVVA9bmV3IGYoMCwxLDApLHJ0LkRFRkFVTFRfTUFUUklYX0FVVE9fVVBEQVRFPSEwLHJ0LkRFRkFVTFRfTUFUUklYX1dPUkxEX0FVVE9fVVBEQVRFPSEwO2NvbnN0IFI9bmV3IGYsWHQ9bmV3ICQ7Y2xhc3MgaHR7Y29uc3RydWN0b3IodCxlLGk9ITEpe2lmKEFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4iKTt0aGlzLmlzQnVmZmVyQXR0cmlidXRlPSEwLHRoaXMubmFtZT0iIix0aGlzLmFycmF5PXQsdGhpcy5pdGVtU2l6ZT1lLHRoaXMuY291bnQ9dCE9PXZvaWQgMD90Lmxlbmd0aC9lOjAsdGhpcy5ub3JtYWxpemVkPWksdGhpcy51c2FnZT0zNTA0NCx0aGlzLl91cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudXBkYXRlUmFuZ2VzPVtdLHRoaXMuZ3B1VHlwZT0xMDE1LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9Z2V0IHVwZGF0ZVJhbmdlKCl7cmV0dXJuIE1lKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IHVwZGF0ZVJhbmdlKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHIxNjkuIFVzZSBhZGRVcGRhdGVSYW5nZSgpIGluc3RlYWQuIiksdGhpcy5fdXBkYXRlUmFuZ2V9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWFkZFVwZGF0ZVJhbmdlKHQsZSl7dGhpcy51cGRhdGVSYW5nZXMucHVzaCh7c3RhcnQ6dCxjb3VudDplfSl9Y2xlYXJVcGRhdGVSYW5nZXMoKXt0aGlzLnVwZGF0ZVJhbmdlcy5sZW5ndGg9MH1jb3B5KHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5pdGVtU2l6ZT10Lml0ZW1TaXplLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLm5vcm1hbGl6ZWQ9dC5ub3JtYWxpemVkLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzLmdwdVR5cGU9dC5ncHVUeXBlLHRoaXN9Y29weUF0KHQsZSxpKXt0Kj10aGlzLml0ZW1TaXplLGkqPWUuaXRlbVNpemU7Zm9yKGxldCBzPTAsbj10aGlzLml0ZW1TaXplO3M8bjtzKyspdGhpcy5hcnJheVt0K3NdPWUuYXJyYXlbaStzXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKHRoaXMuaXRlbVNpemU9PT0yKWZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKVh0LmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxYdC5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShlLFh0LngsWHQueSk7ZWxzZSBpZih0aGlzLml0ZW1TaXplPT09Mylmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylSLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxSLmFwcGx5TWF0cml4Myh0KSx0aGlzLnNldFhZWihlLFIueCxSLnksUi56KTtyZXR1cm4gdGhpc31hcHBseU1hdHJpeDQodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspUi5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksUi5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxSLngsUi55LFIueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspUi5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksUi5hcHBseU5vcm1hbE1hdHJpeCh0KSx0aGlzLnNldFhZWihlLFIueCxSLnksUi56KTtyZXR1cm4gdGhpc310cmFuc2Zvcm1EaXJlY3Rpb24odCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspUi5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksUi50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVooZSxSLngsUi55LFIueik7cmV0dXJuIHRoaXN9c2V0KHQsZT0wKXtyZXR1cm4gdGhpcy5hcnJheS5zZXQodCxlKSx0aGlzfWdldENvbXBvbmVudCh0LGUpe2xldCBpPXRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplK2VdO3JldHVybiB0aGlzLm5vcm1hbGl6ZWQmJihpPUJ0KGksdGhpcy5hcnJheSkpLGl9c2V0Q29tcG9uZW50KHQsZSxpKXtyZXR1cm4gdGhpcy5ub3JtYWxpemVkJiYoaT1EKGksdGhpcy5hcnJheSkpLHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplK2VdPWksdGhpc31nZXRYKHQpe2xldCBlPXRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplXTtyZXR1cm4gdGhpcy5ub3JtYWxpemVkJiYoZT1CdChlLHRoaXMuYXJyYXkpKSxlfXNldFgodCxlKXtyZXR1cm4gdGhpcy5ub3JtYWxpemVkJiYoZT1EKGUsdGhpcy5hcnJheSkpLHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplXT1lLHRoaXN9Z2V0WSh0KXtsZXQgZT10aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXTtyZXR1cm4gdGhpcy5ub3JtYWxpemVkJiYoZT1CdChlLHRoaXMuYXJyYXkpKSxlfXNldFkodCxlKXtyZXR1cm4gdGhpcy5ub3JtYWxpemVkJiYoZT1EKGUsdGhpcy5hcnJheSkpLHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPWUsdGhpc31nZXRaKHQpe2xldCBlPXRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdO3JldHVybiB0aGlzLm5vcm1hbGl6ZWQmJihlPUJ0KGUsdGhpcy5hcnJheSkpLGV9c2V0Wih0LGUpe3JldHVybiB0aGlzLm5vcm1hbGl6ZWQmJihlPUQoZSx0aGlzLmFycmF5KSksdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMl09ZSx0aGlzfWdldFcodCl7bGV0IGU9dGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrM107cmV0dXJuIHRoaXMubm9ybWFsaXplZCYmKGU9QnQoZSx0aGlzLmFycmF5KSksZX1zZXRXKHQsZSl7cmV0dXJuIHRoaXMubm9ybWFsaXplZCYmKGU9RChlLHRoaXMuYXJyYXkpKSx0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXT1lLHRoaXN9c2V0WFkodCxlLGkpe3JldHVybiB0Kj10aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCYmKGU9RChlLHRoaXMuYXJyYXkpLGk9RChpLHRoaXMuYXJyYXkpKSx0aGlzLmFycmF5W3QrMF09ZSx0aGlzLmFycmF5W3QrMV09aSx0aGlzfXNldFhZWih0LGUsaSxzKXtyZXR1cm4gdCo9dGhpcy5pdGVtU2l6ZSx0aGlzLm5vcm1hbGl6ZWQmJihlPUQoZSx0aGlzLmFycmF5KSxpPUQoaSx0aGlzLmFycmF5KSxzPUQocyx0aGlzLmFycmF5KSksdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXMsdGhpc31zZXRYWVpXKHQsZSxpLHMsbil7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5ub3JtYWxpemVkJiYoZT1EKGUsdGhpcy5hcnJheSksaT1EKGksdGhpcy5hcnJheSkscz1EKHMsdGhpcy5hcnJheSksbj1EKG4sdGhpcy5hcnJheSkpLHRoaXMuYXJyYXlbdCswXT1lLHRoaXMuYXJyYXlbdCsxXT1pLHRoaXMuYXJyYXlbdCsyXT1zLHRoaXMuYXJyYXlbdCszXT1uLHRoaXN9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5hcnJheSx0aGlzLml0ZW1TaXplKS5jb3B5KHRoaXMpfXRvSlNPTigpe2NvbnN0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkuZnJvbSh0aGlzLmFycmF5KSxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH07cmV0dXJuIHRoaXMubmFtZSE9PSIiJiYodC5uYW1lPXRoaXMubmFtZSksdGhpcy51c2FnZSE9PTM1MDQ0JiYodC51c2FnZT10aGlzLnVzYWdlKSx0fX1jbGFzcyBJZSBleHRlbmRzIGh0e2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxpKX19Y2xhc3MgUGUgZXh0ZW5kcyBodHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQzMkFycmF5KHQpLGUsaSl9fWNsYXNzIERlIGV4dGVuZHMgaHR7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBGbG9hdDMyQXJyYXkodCksZSxpKX19bGV0IE5lPTA7Y29uc3Qgdj1uZXcgWixRdD1uZXcgcnQsTXQ9bmV3IGYsVz1uZXcgQ3QsRnQ9bmV3IEN0LFU9bmV3IGY7Y2xhc3MgS3QgZXh0ZW5kcyBMdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5pc0J1ZmZlckdlb21ldHJ5PSEwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOk5lKyt9KSx0aGlzLnV1aWQ9UHQoKSx0aGlzLm5hbWU9IiIsdGhpcy50eXBlPSJCdWZmZXJHZW9tZXRyeSIsdGhpcy5pbmRleD1udWxsLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLm1vcnBoQXR0cmlidXRlcz17fSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPSExLHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGwsdGhpcy5kcmF3UmFuZ2U9e3N0YXJ0OjAsY291bnQ6MS8wfSx0aGlzLnVzZXJEYXRhPXt9fWdldEluZGV4KCl7cmV0dXJuIHRoaXMuaW5kZXh9c2V0SW5kZXgodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dGhpcy5pbmRleD1uZXcoX2UodCk/UGU6SWUpKHQsMSk6dGhpcy5pbmRleD10LHRoaXN9Z2V0QXR0cmlidXRlKHQpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF19c2V0QXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XT1lLHRoaXN9ZGVsZXRlQXR0cmlidXRlKHQpe3JldHVybiBkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW3RdLHRoaXN9aGFzQXR0cmlidXRlKHQpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF0hPT12b2lkIDB9YWRkR3JvdXAodCxlLGk9MCl7dGhpcy5ncm91cHMucHVzaCh7c3RhcnQ6dCxjb3VudDplLG1hdGVyaWFsSW5kZXg6aX0pfWNsZWFyR3JvdXBzKCl7dGhpcy5ncm91cHM9W119c2V0RHJhd1JhbmdlKHQsZSl7dGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dCx0aGlzLmRyYXdSYW5nZS5jb3VudD1lfWFwcGx5TWF0cml4NCh0KXtjb25zdCBlPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtlIT09dm9pZCAwJiYoZS5hcHBseU1hdHJpeDQodCksZS5uZWVkc1VwZGF0ZT0hMCk7Y29uc3QgaT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2lmKGkhPT12b2lkIDApe2NvbnN0IG49bmV3IG10KCkuZ2V0Tm9ybWFsTWF0cml4KHQpO2kuYXBwbHlOb3JtYWxNYXRyaXgobiksaS5uZWVkc1VwZGF0ZT0hMH1jb25zdCBzPXRoaXMuYXR0cmlidXRlcy50YW5nZW50O3JldHVybiBzIT09dm9pZCAwJiYocy50cmFuc2Zvcm1EaXJlY3Rpb24odCkscy5uZWVkc1VwZGF0ZT0hMCksdGhpcy5ib3VuZGluZ0JveCE9PW51bGwmJnRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksdGhpcy5ib3VuZGluZ1NwaGVyZSE9PW51bGwmJnRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksdGhpc31hcHBseVF1YXRlcm5pb24odCl7cmV0dXJuIHYubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5hcHBseU1hdHJpeDQodiksdGhpc31yb3RhdGVYKHQpe3JldHVybiB2Lm1ha2VSb3RhdGlvblgodCksdGhpcy5hcHBseU1hdHJpeDQodiksdGhpc31yb3RhdGVZKHQpe3JldHVybiB2Lm1ha2VSb3RhdGlvblkodCksdGhpcy5hcHBseU1hdHJpeDQodiksdGhpc31yb3RhdGVaKHQpe3JldHVybiB2Lm1ha2VSb3RhdGlvbloodCksdGhpcy5hcHBseU1hdHJpeDQodiksdGhpc310cmFuc2xhdGUodCxlLGkpe3JldHVybiB2Lm1ha2VUcmFuc2xhdGlvbih0LGUsaSksdGhpcy5hcHBseU1hdHJpeDQodiksdGhpc31zY2FsZSh0LGUsaSl7cmV0dXJuIHYubWFrZVNjYWxlKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NCh2KSx0aGlzfWxvb2tBdCh0KXtyZXR1cm4gUXQubG9va0F0KHQpLFF0LnVwZGF0ZU1hdHJpeCgpLHRoaXMuYXBwbHlNYXRyaXg0KFF0Lm1hdHJpeCksdGhpc31jZW50ZXIoKXtyZXR1cm4gdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSx0aGlzLmJvdW5kaW5nQm94LmdldENlbnRlcihNdCkubmVnYXRlKCksdGhpcy50cmFuc2xhdGUoTXQueCxNdC55LE10LnopLHRoaXN9c2V0RnJvbVBvaW50cyh0KXtjb25zdCBlPVtdO2ZvcihsZXQgaT0wLHM9dC5sZW5ndGg7aTxzO2krKyl7Y29uc3Qgbj10W2ldO2UucHVzaChuLngsbi55LG4uenx8MCl9cmV0dXJuIHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IERlKGUsMykpLHRoaXN9Y29tcHV0ZUJvdW5kaW5nQm94KCl7dGhpcy5ib3VuZGluZ0JveD09PW51bGwmJih0aGlzLmJvdW5kaW5nQm94PW5ldyBDdCk7Y29uc3QgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24sZT10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBib3guIix0aGlzKSx0aGlzLmJvdW5kaW5nQm94LnNldChuZXcgZigtMS8wLC0xLzAsLTEvMCksbmV3IGYoMS8wLDEvMCwxLzApKTtyZXR1cm59aWYodCE9PXZvaWQgMCl7aWYodGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCBpPTAscz1lLmxlbmd0aDtpPHM7aSsrKXtjb25zdCBuPWVbaV07Vy5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKG4pLHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU/KFUuYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1pbixXLm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KFUpLFUuYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1heCxXLm1heCksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KFUpKToodGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KFcubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoVy5tYXgpKX19ZWxzZSB0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpOyhpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi54KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueSl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnopKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfWNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpe3RoaXMuYm91bmRpbmdTcGhlcmU9PT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgQmUpO2NvbnN0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLGU9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgc3BoZXJlLiIsdGhpcyksdGhpcy5ib3VuZGluZ1NwaGVyZS5zZXQobmV3IGYsMS8wKTtyZXR1cm59aWYodCl7Y29uc3QgaT10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtpZihXLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IG49MCxvPWUubGVuZ3RoO248bztuKyspe2NvbnN0IGE9ZVtuXTtGdC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKGEpLHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU/KFUuYWRkVmVjdG9ycyhXLm1pbixGdC5taW4pLFcuZXhwYW5kQnlQb2ludChVKSxVLmFkZFZlY3RvcnMoVy5tYXgsRnQubWF4KSxXLmV4cGFuZEJ5UG9pbnQoVSkpOihXLmV4cGFuZEJ5UG9pbnQoRnQubWluKSxXLmV4cGFuZEJ5UG9pbnQoRnQubWF4KSl9Vy5nZXRDZW50ZXIoaSk7bGV0IHM9MDtmb3IobGV0IG49MCxvPXQuY291bnQ7bjxvO24rKylVLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxuKSxzPU1hdGgubWF4KHMsaS5kaXN0YW5jZVRvU3F1YXJlZChVKSk7aWYoZSlmb3IobGV0IG49MCxvPWUubGVuZ3RoO248bztuKyspe2NvbnN0IGE9ZVtuXSxoPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7Zm9yKGxldCB1PTAsbD1hLmNvdW50O3U8bDt1KyspVS5mcm9tQnVmZmVyQXR0cmlidXRlKGEsdSksaCYmKE10LmZyb21CdWZmZXJBdHRyaWJ1dGUodCx1KSxVLmFkZChNdCkpLHM9TWF0aC5tYXgocyxpLmRpc3RhbmNlVG9TcXVhcmVkKFUpKX10aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cz1NYXRoLnNxcnQocyksaXNOYU4odGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXMpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogQ29tcHV0ZWQgcmFkaXVzIGlzIE5hTi4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX19Y29tcHV0ZVRhbmdlbnRzKCl7Y29uc3QgdD10aGlzLmluZGV4LGU9dGhpcy5hdHRyaWJ1dGVzO2lmKHQ9PT1udWxsfHxlLnBvc2l0aW9uPT09dm9pZCAwfHxlLm5vcm1hbD09PXZvaWQgMHx8ZS51dj09PXZvaWQgMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlVGFuZ2VudHMoKSBmYWlsZWQuIE1pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlcyAoaW5kZXgsIHBvc2l0aW9uLCBub3JtYWwgb3IgdXYpIik7cmV0dXJufWNvbnN0IGk9ZS5wb3NpdGlvbixzPWUubm9ybWFsLG49ZS51djt0aGlzLmhhc0F0dHJpYnV0ZSgidGFuZ2VudCIpPT09ITEmJnRoaXMuc2V0QXR0cmlidXRlKCJ0YW5nZW50IixuZXcgaHQobmV3IEZsb2F0MzJBcnJheSg0KmkuY291bnQpLDQpKTtjb25zdCBvPXRoaXMuZ2V0QXR0cmlidXRlKCJ0YW5nZW50IiksYT1bXSxoPVtdO2ZvcihsZXQgZz0wO2c8aS5jb3VudDtnKyspYVtnXT1uZXcgZixoW2ddPW5ldyBmO2NvbnN0IHU9bmV3IGYsbD1uZXcgZixyPW5ldyBmLGQ9bmV3ICQsbT1uZXcgJCx5PW5ldyAkLHg9bmV3IGYsXz1uZXcgZjtmdW5jdGlvbiBwKGcsRSxGKXt1LmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxnKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxFKSxyLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxGKSxkLmZyb21CdWZmZXJBdHRyaWJ1dGUobixnKSxtLmZyb21CdWZmZXJBdHRyaWJ1dGUobixFKSx5LmZyb21CdWZmZXJBdHRyaWJ1dGUobixGKSxsLnN1Yih1KSxyLnN1Yih1KSxtLnN1YihkKSx5LnN1YihkKTtjb25zdCBCPTEvKG0ueCp5LnkteS54Km0ueSk7aXNGaW5pdGUoQikmJih4LmNvcHkobCkubXVsdGlwbHlTY2FsYXIoeS55KS5hZGRTY2FsZWRWZWN0b3IociwtbS55KS5tdWx0aXBseVNjYWxhcihCKSxfLmNvcHkocikubXVsdGlwbHlTY2FsYXIobS54KS5hZGRTY2FsZWRWZWN0b3IobCwteS54KS5tdWx0aXBseVNjYWxhcihCKSxhW2ddLmFkZCh4KSxhW0VdLmFkZCh4KSxhW0ZdLmFkZCh4KSxoW2ddLmFkZChfKSxoW0VdLmFkZChfKSxoW0ZdLmFkZChfKSl9bGV0IHc9dGhpcy5ncm91cHM7dy5sZW5ndGg9PT0wJiYodz1be3N0YXJ0OjAsY291bnQ6dC5jb3VudH1dKTtmb3IobGV0IGc9MCxFPXcubGVuZ3RoO2c8RTsrK2cpe2NvbnN0IEY9d1tnXSxCPUYuc3RhcnQsTz1GLmNvdW50O2ZvcihsZXQgaz1CLEg9QitPO2s8SDtrKz0zKXAodC5nZXRYKGsrMCksdC5nZXRYKGsrMSksdC5nZXRYKGsrMikpfWNvbnN0IEE9bmV3IGYsUz1uZXcgZix6PW5ldyBmLFQ9bmV3IGY7ZnVuY3Rpb24gYihnKXt6LmZyb21CdWZmZXJBdHRyaWJ1dGUocyxnKSxULmNvcHkoeik7Y29uc3QgRT1hW2ddO0EuY29weShFKSxBLnN1Yih6Lm11bHRpcGx5U2NhbGFyKHouZG90KEUpKSkubm9ybWFsaXplKCksUy5jcm9zc1ZlY3RvcnMoVCxFKTtjb25zdCBCPVMuZG90KGhbZ10pPDA/LTE6MTtvLnNldFhZWlcoZyxBLngsQS55LEEueixCKX1mb3IobGV0IGc9MCxFPXcubGVuZ3RoO2c8RTsrK2cpe2NvbnN0IEY9d1tnXSxCPUYuc3RhcnQsTz1GLmNvdW50O2ZvcihsZXQgaz1CLEg9QitPO2s8SDtrKz0zKWIodC5nZXRYKGsrMCkpLGIodC5nZXRYKGsrMSkpLGIodC5nZXRYKGsrMikpfX1jb21wdXRlVmVydGV4Tm9ybWFscygpe2NvbnN0IHQ9dGhpcy5pbmRleCxlPXRoaXMuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO2lmKGUhPT12b2lkIDApe2xldCBpPXRoaXMuZ2V0QXR0cmlidXRlKCJub3JtYWwiKTtpZihpPT09dm9pZCAwKWk9bmV3IGh0KG5ldyBGbG9hdDMyQXJyYXkoZS5jb3VudCozKSwzKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixpKTtlbHNlIGZvcihsZXQgZD0wLG09aS5jb3VudDtkPG07ZCsrKWkuc2V0WFlaKGQsMCwwLDApO2NvbnN0IHM9bmV3IGYsbj1uZXcgZixvPW5ldyBmLGE9bmV3IGYsaD1uZXcgZix1PW5ldyBmLGw9bmV3IGYscj1uZXcgZjtpZih0KWZvcihsZXQgZD0wLG09dC5jb3VudDtkPG07ZCs9Myl7Y29uc3QgeT10LmdldFgoZCswKSx4PXQuZ2V0WChkKzEpLF89dC5nZXRYKGQrMik7cy5mcm9tQnVmZmVyQXR0cmlidXRlKGUseSksbi5mcm9tQnVmZmVyQXR0cmlidXRlKGUseCksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsXyksbC5zdWJWZWN0b3JzKG8sbiksci5zdWJWZWN0b3JzKHMsbiksbC5jcm9zcyhyKSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSx5KSxoLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSx4KSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxfKSxhLmFkZChsKSxoLmFkZChsKSx1LmFkZChsKSxpLnNldFhZWih5LGEueCxhLnksYS56KSxpLnNldFhZWih4LGgueCxoLnksaC56KSxpLnNldFhZWihfLHUueCx1LnksdS56KX1lbHNlIGZvcihsZXQgZD0wLG09ZS5jb3VudDtkPG07ZCs9MylzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxkKzApLG4uZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGQrMSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZCsyKSxsLnN1YlZlY3RvcnMobyxuKSxyLnN1YlZlY3RvcnMocyxuKSxsLmNyb3NzKHIpLGkuc2V0WFlaKGQrMCxsLngsbC55LGwueiksaS5zZXRYWVooZCsxLGwueCxsLnksbC56KSxpLnNldFhZWihkKzIsbC54LGwueSxsLnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLGkubmVlZHNVcGRhdGU9ITB9fW5vcm1hbGl6ZU5vcm1hbHMoKXtjb25zdCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCBlPTAsaT10LmNvdW50O2U8aTtlKyspVS5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSksVS5ub3JtYWxpemUoKSx0LnNldFhZWihlLFUueCxVLnksVS56KX10b05vbkluZGV4ZWQoKXtmdW5jdGlvbiB0KGEsaCl7Y29uc3QgdT1hLmFycmF5LGw9YS5pdGVtU2l6ZSxyPWEubm9ybWFsaXplZCxkPW5ldyB1LmNvbnN0cnVjdG9yKGgubGVuZ3RoKmwpO2xldCBtPTAseT0wO2ZvcihsZXQgeD0wLF89aC5sZW5ndGg7eDxfO3grKyl7YS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP209aFt4XSphLmRhdGEuc3RyaWRlK2Eub2Zmc2V0Om09aFt4XSpsO2ZvcihsZXQgcD0wO3A8bDtwKyspZFt5KytdPXVbbSsrXX1yZXR1cm4gbmV3IGh0KGQsbCxyKX1pZih0aGlzLmluZGV4PT09bnVsbClyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS50b05vbkluZGV4ZWQoKTogQnVmZmVyR2VvbWV0cnkgaXMgYWxyZWFkeSBub24taW5kZXhlZC4iKSx0aGlzO2NvbnN0IGU9bmV3IEt0LGk9dGhpcy5pbmRleC5hcnJheSxzPXRoaXMuYXR0cmlidXRlcztmb3IoY29uc3QgYSBpbiBzKXtjb25zdCBoPXNbYV0sdT10KGgsaSk7ZS5zZXRBdHRyaWJ1dGUoYSx1KX1jb25zdCBuPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2Zvcihjb25zdCBhIGluIG4pe2NvbnN0IGg9W10sdT1uW2FdO2ZvcihsZXQgbD0wLHI9dS5sZW5ndGg7bDxyO2wrKyl7Y29uc3QgZD11W2xdLG09dChkLGkpO2gucHVzaChtKX1lLm1vcnBoQXR0cmlidXRlc1thXT1ofWUubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtjb25zdCBvPXRoaXMuZ3JvdXBzO2ZvcihsZXQgYT0wLGg9by5sZW5ndGg7YTxoO2ErKyl7Y29uc3QgdT1vW2FdO2UuYWRkR3JvdXAodS5zdGFydCx1LmNvdW50LHUubWF0ZXJpYWxJbmRleCl9cmV0dXJuIGV9dG9KU09OKCl7Y29uc3QgdD17bWV0YWRhdGE6e3ZlcnNpb246NC42LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdGhpcy5wYXJhbWV0ZXJzIT09dm9pZCAwKXtjb25zdCBoPXRoaXMucGFyYW1ldGVycztmb3IoY29uc3QgdSBpbiBoKWhbdV0hPT12b2lkIDAmJih0W3VdPWhbdV0pO3JldHVybiB0fXQuZGF0YT17YXR0cmlidXRlczp7fX07Y29uc3QgZT10aGlzLmluZGV4O2UhPT1udWxsJiYodC5kYXRhLmluZGV4PXt0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KX0pO2NvbnN0IGk9dGhpcy5hdHRyaWJ1dGVzO2Zvcihjb25zdCBoIGluIGkpe2NvbnN0IHU9aVtoXTt0LmRhdGEuYXR0cmlidXRlc1toXT11LnRvSlNPTih0LmRhdGEpfWNvbnN0IHM9e307bGV0IG49ITE7Zm9yKGNvbnN0IGggaW4gdGhpcy5tb3JwaEF0dHJpYnV0ZXMpe2NvbnN0IHU9dGhpcy5tb3JwaEF0dHJpYnV0ZXNbaF0sbD1bXTtmb3IobGV0IHI9MCxkPXUubGVuZ3RoO3I8ZDtyKyspe2NvbnN0IG09dVtyXTtsLnB1c2gobS50b0pTT04odC5kYXRhKSl9bC5sZW5ndGg+MCYmKHNbaF09bCxuPSEwKX1uJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1zLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtjb25zdCBvPXRoaXMuZ3JvdXBzO28ubGVuZ3RoPjAmJih0LmRhdGEuZ3JvdXBzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobykpKTtjb25zdCBhPXRoaXMuYm91bmRpbmdTcGhlcmU7cmV0dXJuIGEhPT1udWxsJiYodC5kYXRhLmJvdW5kaW5nU3BoZXJlPXtjZW50ZXI6YS5jZW50ZXIudG9BcnJheSgpLHJhZGl1czphLnJhZGl1c30pLHR9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7dGhpcy5pbmRleD1udWxsLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLm1vcnBoQXR0cmlidXRlcz17fSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsO2NvbnN0IGU9e307dGhpcy5uYW1lPXQubmFtZTtjb25zdCBpPXQuaW5kZXg7aSE9PW51bGwmJnRoaXMuc2V0SW5kZXgoaS5jbG9uZShlKSk7Y29uc3Qgcz10LmF0dHJpYnV0ZXM7Zm9yKGNvbnN0IHUgaW4gcyl7Y29uc3QgbD1zW3VdO3RoaXMuc2V0QXR0cmlidXRlKHUsbC5jbG9uZShlKSl9Y29uc3Qgbj10Lm1vcnBoQXR0cmlidXRlcztmb3IoY29uc3QgdSBpbiBuKXtjb25zdCBsPVtdLHI9blt1XTtmb3IobGV0IGQ9MCxtPXIubGVuZ3RoO2Q8bTtkKyspbC5wdXNoKHJbZF0uY2xvbmUoZSkpO3RoaXMubW9ycGhBdHRyaWJ1dGVzW3VdPWx9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT10Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2NvbnN0IG89dC5ncm91cHM7Zm9yKGxldCB1PTAsbD1vLmxlbmd0aDt1PGw7dSsrKXtjb25zdCByPW9bdV07dGhpcy5hZGRHcm91cChyLnN0YXJ0LHIuY291bnQsci5tYXRlcmlhbEluZGV4KX1jb25zdCBhPXQuYm91bmRpbmdCb3g7YSE9PW51bGwmJih0aGlzLmJvdW5kaW5nQm94PWEuY2xvbmUoKSk7Y29uc3QgaD10LmJvdW5kaW5nU3BoZXJlO3JldHVybiBoIT09bnVsbCYmKHRoaXMuYm91bmRpbmdTcGhlcmU9aC5jbG9uZSgpKSx0aGlzLmRyYXdSYW5nZS5zdGFydD10LmRyYXdSYW5nZS5zdGFydCx0aGlzLmRyYXdSYW5nZS5jb3VudD10LmRyYXdSYW5nZS5jb3VudCx0aGlzLnVzZXJEYXRhPXQudXNlckRhdGEsdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX10eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246dHR9fSkpLHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPXR0KTtjbGFzcyBXZXtjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxzPTAsbj0wLG89MCl7Y3QodGhpcywibWluWCIpO2N0KHRoaXMsIm1pblkiKTtjdCh0aGlzLCJtaW5aIik7Y3QodGhpcywibWF4WCIpO2N0KHRoaXMsIm1heFkiKTtjdCh0aGlzLCJtYXhaIik7dGhpcy5taW5YPXQsdGhpcy5taW5ZPWUsdGhpcy5taW5aPWksdGhpcy5tYXhYPXMsdGhpcy5tYXhZPW4sdGhpcy5tYXhaPW99fWxldCBVdD1bXTtmdW5jdGlvbiBNKGMsdCxlKXtsZXQgaT0wLHM9dDtmb3IoO3M+MDspe2NvbnN0IG49OC0oYy52YWx1ZS0oYy52YWx1ZT4+Mzw8MykpLG89bjxzP246cyxhPW4tbztpPWl8KH4oLTE8PG8pPDxhJmVbYy52YWx1ZT4+M10pPj5hPDxzLW8scy09byxjLnZhbHVlKz1vfXJldHVybiBpfWZ1bmN0aW9uIEMoYyx0LGUpe3JldHVybiBNKGMsdCxlKS8oKDE8PHQpLTEpfWZ1bmN0aW9uIEcoYyx0KXtjb25zdCBlPVtdO2ZvcihsZXQgaT0wO2k8NDtpKyspZS5wdXNoKE0oYyw4LHQpKTtyZXR1cm4gT2UoZS5yZXZlcnNlKCkpfWZ1bmN0aW9uIE9lKGMpe2NvbnN0IHQ9bmV3IEFycmF5QnVmZmVyKDQpLGU9bmV3IERhdGFWaWV3KHQpO3JldHVybiBjLmZvckVhY2goZnVuY3Rpb24oaSxzKXtlLnNldFVpbnQ4KHMsaSl9KSxlLmdldEZsb2F0MzIoMCl9ZnVuY3Rpb24gbWUoYyl7cmV0dXJuIGM+PTA/MTotMX1mdW5jdGlvbiBkZShjLHQpe2NvbnN0IGU9YyoyLTEsaT10KjItMTtsZXQgcz1lLG49aTtjb25zdCBvPU1hdGguYWJzKGUpK01hdGguYWJzKGkpPjE7byYmKHM9KDEtTWF0aC5hYnMoaSkpKm1lKGUpLG49KDEtTWF0aC5hYnMoZSkpKm1lKGkpKTtsZXQgYT0oMS1NYXRoLmFicyhzKS1NYXRoLmFicyhuKSkqKG8/LTE6MSk7Y29uc3QgaD1NYXRoLnNxcnQocypzK24qbithKmEpO3JldHVybiBzLz1oLG4vPWgsYS89aCxbcyxuLGFdfWZ1bmN0aW9uIHllKGMsdCxlKXtjb25zdCBpPVtdO2ZvcihsZXQgcz0wO3M8dDtzKyspaS5wdXNoKE0oYyw4LGUpKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGkpfWZ1bmN0aW9uIHFlKGMsdCl7bGV0IGU9eWUoYyw0LHQpO3JldHVybiBlPT0ieHJnYyI/MDooYy52YWx1ZT0wLGU9eWUoYyw1LHQpLGU9PSJfeHJnYyI/TShjLDgsdCkqNjU1MzYrTShjLDgsdCkqMjU2K00oYyw4LHQpOihjLnZhbHVlPTAsLTEpKX1mdW5jdGlvbiB2ZShjLHQpe2NvbnN0IGU9bmV3IEZsb2F0MzJBcnJheSguNipjLmxlbmd0aCksaT1uZXcgRmxvYXQzMkFycmF5KDMvNSpjLmxlbmd0aCk7bGV0IHM9MDtjb25zdCBuPVtdO2xldCBvPTA7Y29uc3QgYT1uZXcgRmxvYXQzMkFycmF5KDQvNSpjLmxlbmd0aCk7bGV0IGg9MDtjb25zdCB1PW5ldyBVaW50MzJBcnJheShjLmxlbmd0aCk7bGV0IGw9MCxyPXt2YWx1ZTowfSxkPS0xO2NvbnN0IG09Yy5sZW5ndGgqODtsZXQgeT1uZXcgV2UseD0wLF89MDtjb25zdCBwPXFlKHIsYyk7cD49MD8oeS5taW5YPUcocixjKSx5Lm1heFg9RyhyLGMpLHkubWluWT1HKHIsYykseS5tYXhZPUcocixjKSx5Lm1pblo9RyhyLGMpLHkubWF4Wj1HKHIsYykscD49MSYmKHg9RyhyLGMpLEcocixjKSxfPUcocixjKSxHKHIsYykpKToocj17dmFsdWU6MH0seT10KTtsZXQgdz0xMSxBPTExLFM9MTE7cD49MyYmKHc9TShyLDgsYyksQT1NKHIsOCxjKSxTPU0ociw4LGMpKTtjb25zdCB6PTEvKCgxPDx3KS0xKSxUPTEvKCgxPDxBKS0xKSxiPTEvKCgxPDxTKS0xKSxnPXt9O3A8NCYmKGcuYWxiZWRvPVtdLGcuYWxiZWRvLnB1c2goQyhyLDgsYykpLGcuYWxiZWRvLnB1c2goQyhyLDgsYykpLGcuYWxiZWRvLnB1c2goQyhyLDgsYykpLGcuYWxiZWRvLnB1c2goQyhyLDgsYykpLGcuYWxiZWRvTWFwPU0ociw4LGMpLTEsZy5hbGJlZG9VdnM9TShyLDgsYyktMSxnLmVtaXNzaXZlU2NhbGU9W10sZy5lbWlzc2l2ZVNjYWxlLnB1c2goQyhyLDgsYykpLGcuZW1pc3NpdmVTY2FsZS5wdXNoKEMociw4LGMpKSxnLmVtaXNzaXZlU2NhbGUucHVzaChDKHIsOCxjKSksZy5lbWlzc2l2ZU1hcD1NKHIsOCxjKS0xLGcuZW1pc3NpdmVVdnM9TShyLDgsYyktMSxnLm1ldGFsbmVzcz1DKHIsOCxjKSxnLnJvdWdobmVzcz1DKHIsOCxjKSxnLm1ldGFsUm91Z2huZXNzTWFwPU0ociw4LGMpLTEsZy5tZXRhbFJvdWdobmVzc1V2cz1NKHIsOCxjKS0xLGcubm9ybWFsU2NhbGU9QyhyLDgsYyksZy5ub3JtYWxNYXA9TShyLDgsYyksZy5ub3JtYWxVdnM9TShyLDgsYyksZy5vY2NsdXNpb25TY2FsZT1DKHIsOCxjKSxnLm9jY2x1c2lvbk1hcD1NKHIsOCxjKSxnLm9jY2x1c2lvblV2cz1NKHIsOCxjKSxwPj0yJiYoZy5saWdodE1hcD1NKHIsOCxjKSxnLmxpZ2h0VXZzPU0ociw4LGMpLGcubGlnaHRNYXBSR0JNPU0ociw4LGMpKSxnLmFscGhhTW9kZT1NKHIsOCxjKSxwPj0zP2cuZG91YmxlU2lkZWQ9TShyLDgsYyk6Zy5kb3VibGVTaWRlZD0xKTtsZXQgRT0hMTtmb3IoO3IudmFsdWU8bTspe2xldCBCPU0ociwxNixjKSxPPU0ociwxNixjKSxrPU0ociwxNixjKTtjb25zdCBIPUMociw4LGMpLGJ0PUMociw4LGMpLGF0PWRlKEgsYnQpLGo9TShyLDE2LGMpLEw9W10sVj1bXTtmb3IobGV0IFA9MDtQPGo7UCsrKXA8MT8oTC5wdXNoKE0ociwxNixjKSksVi5wdXNoKE0ociwxNixjKSkpOihMLnB1c2goTShyLDI0LGMpKSxWLnB1c2goTShyLDI0LGMpKSk7Zm9yKDtuLmxlbmd0aDxqOyluLnB1c2gobmV3IEZsb2F0MzJBcnJheSgyLzUqYy5sZW5ndGgpKTtjb25zdCB6dD1NKHIsMTYsYyksd3Q9TShyLDE2LGMpO2xldCB0ZT0hMTtwPj01JiYoRT1NKHIsOCxjKT4wLEUmJih0ZT1NKHIsOCxjKT49NCxhW2hdPUMociw4LGMpLGFbaCsxXT1DKHIsOCxjKSxhW2grMl09QyhyLDgsYyksYVtoKzNdPXRlP0Mociw4LGMpOjEsaCs9NCkpLGlbc109YXRbMF0sZVtzKytdPXkubWluWCtCKnoqKHkubWF4WC15Lm1pblgpLGlbc109YXRbMV0sZVtzKytdPXkubWluWStPKlQqKHkubWF4WS15Lm1pblkpLGlbc109YXRbMl0sZVtzKytdPXkubWluWitrKmIqKHkubWF4Wi15Lm1pblopO2ZvcihsZXQgUD0wO1A8ajtQKyspbltQXVtvXT14K0xbUF0vMjA0OCxuW1BdW28rMV09XytWW1BdLzIwNDg7bys9Mjtmb3IobGV0IFA9MTtQPHp0O1ArKyl7Y29uc3QgQXQ9TShyLDgsYyk7QXQ8MjU1P0IrPUF0LTEyNzpCPU0ociwxNixjKTtjb25zdCBJdD1NKHIsOCxjKTtJdDwyNTU/Tys9SXQtMTI3Ok89TShyLDE2LGMpO2NvbnN0IFl0PU0ociw4LGMpO1l0PDI1NT9rKz1ZdC0xMjc6az1NKHIsMTYsYyk7Y29uc3QgWGU9QyhyLDgsYyksWWU9QyhyLDgsYyksZWU9ZGUoWGUsWWUpO2ZvcihsZXQgcT0wO3E8ajtxKyspe2NvbnN0IHBlPU0ociw4LGMpO3BlPDI1NT9MW3FdKz1wZS0xMjc6TFtxXT1NKHIscDwxPzE2OjI0LGMpO2NvbnN0IGZlPU0ociw4LGMpO2ZlPDI1NT9WW3FdKz1mZS0xMjc6VltxXT1NKHIscDwxPzE2OjI0LGMpfXA+PTUmJkUmJihhW2hdPUMociw4LGMpLGFbaCsxXT1DKHIsOCxjKSxhW2grMl09QyhyLDgsYyksYVtoKzNdPXRlP0Mociw4LGMpOjEsaCs9NCksaVtzXT1lZVswXSxlW3MrK109eS5taW5YK0IqeiooeS5tYXhYLXkubWluWCksaVtzXT1lZVsxXSxlW3MrK109eS5taW5ZK08qVCooeS5tYXhZLXkubWluWSksaVtzXT1lZVsyXSxlW3MrK109eS5taW5aK2sqYiooeS5tYXhaLXkubWluWik7Zm9yKGxldCBxPTA7cTxqO3ErKyluW3FdW29dPXgrTFtxXS8yMDQ3LG5bcV1bbysxXT1fK1ZbcV0vMjA0NztvKz0yfWZvcihsZXQgUD0wO1A8d3QqMztQKyspaWYoTShyLDEsYyk9PTApZCsrLHVbbCsrXT1kO2Vsc2V7Y29uc3QgQXQ9TShyLDIsYyk7aWYoQXQ9PTApdVtsXT11W2wtMV0sbCsrO2Vsc2UgaWYoQXQ9PTEpdVtsXT11W2wtMl0sbCsrO2Vsc2UgaWYoQXQ9PTIpdVtsXT11W2wtM10sbCsrO2Vsc2V7Y29uc3QgSXQ9TShyLDUsYyk7aWYoSXQ8MzEpdVtsKytdPWQtSXQ7ZWxzZXtjb25zdCBZdD1NKHIsMTYsYyk7dVtsKytdPWQtWXR9fX1yLnZhbHVlJTghPTAmJihyLnZhbHVlKz04LXIudmFsdWUlOCl9Y29uc3QgRj17bWF0OmcsaW5kQnVmZjpuZXcgVWludDMyQXJyYXkodS5zbGljZSgwLGwpKSxwb3NCdWZmOm5ldyBGbG9hdDMyQXJyYXkoZS5zbGljZSgwLHMpKSxub3JCdWZmOm5ldyBGbG9hdDMyQXJyYXkoaS5zbGljZSgwLHMpKSx1dkJ1ZmY6W10sY29sb3JCdWZmOm5ldyBGbG9hdDMyQXJyYXkoYS5zbGljZSgwLGgpKSxhbHBoYU1vZGU6Zy5hbHBoYU1vZGUsYWxiZWRvOmcuYWxiZWRvLGVtaXNzaXZlU2NhbGU6Zy5lbWlzc2l2ZVNjYWxlLG1ldGFsbmVzczpnLm1ldGFsbmVzcyxyb3VnaG5lc3M6Zy5yb3VnaG5lc3Msbm9ybWFsU2NhbGU6Zy5ub3JtYWxTY2FsZSxvY2NsdXNpb25TY2FsZTpnLm9jY2x1c2lvblNjYWxlLGxpZ2h0VXZzOmcubGlnaHRVdnMsaXNMaWdodE1hcFJnYm06ISFnLmxpZ2h0TWFwUkdCTSxpc0RvdWJsZVNpZGVkOiEhZy5kb3VibGVTaWRlZH07Zm9yKGxldCBCPTA7QjxuLmxlbmd0aDtCKyspRi51dkJ1ZmYucHVzaChuZXcgRmxvYXQzMkFycmF5KG5bQl0uc2xpY2UoMCxvKSkpO3JldHVybiBGfW9ubWVzc2FnZT1hc3luYyBmdW5jdGlvbihjKXtjb25zdCB0PXNlbGY7dHJ5e2lmKGMuZGF0YS5nZW9tZXRyeUFycmF5JiZjLmRhdGEuaW5mbyl7Y29uc3QgZT1jLmRhdGEuZ2VvbWV0cnlBcnJheTtVdC5wdXNoKGFzeW5jKCk9Pntjb25zdCBpPXZlKGUsYy5kYXRhLmluZm8pLHM9bmV3IEt0O3Muc2V0SW5kZXgobmV3IGh0KGkuaW5kQnVmZiwxKSkscy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgaHQoaS5wb3NCdWZmLDMpKSxzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLGkuYm91bmRpbmdTcGhlcmU9cy5ib3VuZGluZ1NwaGVyZTtjb25zdCBuPXtnZW9tOmksaGFuZGxlOmMuZGF0YS5oYW5kbGV9O3MuZGlzcG9zZSgpLGkuaW5kQnVmZiYmaS5wb3NCdWZmJiZpLm5vckJ1ZmYmJmkudXZCdWZmWzBdJiZlLmJ1ZmZlcj90LnBvc3RNZXNzYWdlKG4sW2kuaW5kQnVmZi5idWZmZXIsaS5wb3NCdWZmLmJ1ZmZlcixpLm5vckJ1ZmYuYnVmZmVyLGkudXZCdWZmWzBdLmJ1ZmZlcixlLmJ1ZmZlcl0pOnQucG9zdE1lc3NhZ2Uobil9KX19Y2F0Y2goZSl7Y29uc3QgaT17ZXJyOmUsaGFuZGxlOmMuZGF0YS5oYW5kbGV9O3QucG9zdE1lc3NhZ2UoaSl9fTthc3luYyBmdW5jdGlvbiB4ZSgpe2Zvcig7VXQubGVuZ3RoOyl7Y29uc3QgYz1VdFswXTtVdD1VdC5zbGljZSgxKSxhd2FpdCBjKCl9c2V0VGltZW91dCh4ZSwwKX14ZSgpfSkoKTsK",er=i=>Uint8Array.from(atob(i),t=>t.charCodeAt(0)),wA=typeof self<"u"&&self.Blob&&new Blob([er(ZA)],{type:"text/javascript;charset=utf-8"});function tr(i){let t;try{if(t=wA&&(self.URL||self.webkitURL).createObjectURL(wA),!t)throw"";const e=new Worker(t,{name:i==null?void 0:i.name});return e.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),e}catch{return new Worker("data:text/javascript;base64,"+ZA,{name:i==null?void 0:i.name})}finally{t&&(self.URL||self.webkitURL).revokeObjectURL(t)}}const ir=4,ot=[];let sr=0;class Ar{constructor(t,e,s,A){d(this,"modelSource");d(this,"headers");d(this,"pathOrUrl");d(this,"renderer");d(this,"isInitiating");d(this,"isInitiated");d(this,"modelOptions");this.pathOrUrl=t,this.renderer=e,this.modelOptions=s,A!==void 0&&(this.headers=A),this.isInitiated=!1}async init(){if(this.isInitiating=!0,ot.length==0)for(let t=0;t<ir;t++)ot[t]=new tr;(this.pathOrUrl.endsWith(".xrg")||this.pathOrUrl.endsWith(".sxrweb"))&&(this.modelSource=new Ki(this.pathOrUrl,this.renderer,this.modelOptions.hashCode,this.headers),await this.modelSource.init()),this.isInitiating=!1,this.isInitiated=!0}async downloadNodeData(t,e=0){const s={},A=this.getFilesToDownload(t,e),n=await this.modelSource.fetchFiles(A),a=[];for(const o of t){const r=o.modelNode,l=o.lod;if(l!==-1){const c=r.geometry[l];a.push(this.decompressInThread(n[c].slice(),r.boundingBox).then(h=>{s[c]=new vt(r,l,n,h)}))}if(r.collider){const c=r.collider;a.push(this.decompressInThread(n[c].slice(),r.boundingBox).then(h=>{s[c]=new vt(r,l,n,h)}))}}return await Promise.all(a),s}async downloadNodeDataLod(t,e=-1){const s={},A=[];for(const o of t)e!==-1&&(o.geometry[e]&&A.push(o.geometry[e]),o.colorMap[e]&&A.push(o.colorMap[e]),o.colorMapAlpha[e]&&A.push(o.colorMapAlpha[e]),o.emissiveMap[e]&&A.push(o.emissiveMap[e]),o.metRoughMap[e]&&A.push(o.metRoughMap[e]),o.normalMap[e]&&A.push(o.normalMap[e]),o.occlusionMap[e]&&!A.includes(o.occlusionMap[e])&&A.push(o.occlusionMap[e]),o.lightMap&&o.lightMap[e]&&A.push(o.lightMap[e]),o.transmissionMap&&o.transmissionMap[e]&&A.push(o.transmissionMap[e]),o.thicknessMap&&o.thicknessMap[e]&&!A.includes(o.thicknessMap[e])&&A.push(o.thicknessMap[e]),o.clearCoatMap&&o.clearCoatMap[e]&&A.push(o.clearCoatMap[e]),o.clearCoatRoughnessMap&&o.clearCoatRoughnessMap[e]&&!A.includes(o.clearCoatRoughnessMap[e])&&A.push(o.clearCoatRoughnessMap[e]),o.clearCoatNormalMap&&o.clearCoatNormalMap[e]&&A.push(o.clearCoatNormalMap[e]),o.specularMap&&o.specularMap[e]&&A.push(o.specularMap[e]),o.specularColorMap&&o.specularColorMap[e]&&!A.includes(o.specularColorMap[e])&&A.push(o.specularColorMap[e]),o.diffuseMap&&o.diffuseMap[e]&&A.push(o.diffuseMap[e]),o.specularGlossinessMap&&o.specularGlossinessMap[e]&&A.push(o.specularGlossinessMap[e]),o.sheenMap&&o.sheenMap[e]&&A.push(o.sheenMap[e]),o.sheenRoughnessMap&&o.sheenRoughnessMap[e]&&!A.includes(o.sheenRoughnessMap[e])&&A.push(o.sheenRoughnessMap[e])),o.collider&&A.push(o.collider);const n=await this.modelSource.fetchFiles(A),a=[];for(const o of t){if(e!==-1){const r=o.geometry[e];a.push(this.decompressInThread(n[r],o.boundingBox).then(l=>{s[r]=new vt(o,e,n,l)}))}if(o.collider){const r=o.collider;a.push(this.decompressInThread(n[r],o.boundingBox).then(l=>{s[r]=new vt(o,e,n,l)}))}}return await Promise.all(a),s}getDownloadSize(t,e){const s=this.getFilesToDownload(t,e);let A=0;for(const n of s){const a=this.modelSource.getFileSize(n);A+=isNaN(a)?0:a}return A}getDownloadSizeOfNode(t,e){const s=[];this.addFileNamesForNode(t,e,s);let A=0;for(const n of s)A+=this.modelSource.getFileSize(n);return A}releaseNodeData(t){const e=[];this.addFileNamesForNode(t.modelNode,t.lod,e),this.modelSource.releaseFiles(e)}async createMesh(t,e,s,A,n,a){for(let o=0;o<t.geometry.length;o++){const r=t.geometry[o],l=s[r],c=e?e[t.material[o]]:void 0;if(l){const h=`${t.model.id}.${r}`;return this.getMaterial(l,c).then(p=>{const[u,C]=this.renderer.createObject3d(l,p,t,h,o,A,a);if(u.psNodeId=h,u.psNode=t,u.psLod=o,n!=null?n.push({node:t,object3d:u}):t.object3d=u,C!=null&&(C.psNode=t,C.psIsOcclusionMesh=!0,u.psOcclusionMesh=C,a!=null))for(const b of a)b.displayObject3d=u})}}}async getMaterial(t,e){const s=e!==void 0;function A(ue,ss,Vn){const ge=e;if(s&&ge[ue]!==void 0){if(Vn===1||!Array.isArray(ss))return ge[ue];switch(Vn??ss.length){case 2:return[ge[ue].x,ge[ue].y];case 3:return[ge[ue].x,ge[ue].y,ge[ue].z];case 4:return[ge[ue].x,ge[ue].y,ge[ue].z,ge[ue].w];default:throw new Error("Only know how to handle a material property with 2 to 4 components")}}else return ss}const n=!!A("unlit",!1),a=this.modelOptions.forceDoubleSided?!0:!!A("doubleSided",!1),o=A("alphaMode",je.Opaque),r=A("alphaCutoff",.5),l=!!A("usePbrMR",!0),c=de.fromArray(A("albedo",[1,1,1,1])),h=A("albedoUvs",0),p=S.fromArray(A("albedoUvScale",[1,1])),u=S.fromArray(A("albedoUvOffset",[0,0])),C=A("metalness",1),b=A("roughness",1),I=A("metalRoughnessUvs",0),G=S.fromArray(A("metalRoughnessUvScale",[1,1])),f=S.fromArray(A("metalRoughnessUvOffset",[0,0])),X=de.fromArray(A("diffuseColor",null,3)),m=A("diffuseUvs",0),x=S.fromArray(A("diffuseUvScale",null,2)),R=S.fromArray(A("diffuseUvOffset",null,2)),B=de.fromArray(A("specularColor",[1,1,1])),M=A("glossiness",null),E=A("specularGlossinessUvs",0),Q=S.fromArray(A("specularGlossinessUvScale",null,2)),Z=S.fromArray(A("specularGlossinessUvOffset",null,2)),K=A("normalScale",1),F=A("normalUvs",0),H=S.fromArray(A("normalUvScale",[1,1])),T=S.fromArray(A("normalUvOffset",[0,0])),he=A("occlusionScale",1),P=A("occlusionUvs",0),W=S.fromArray(A("occlusionUvScale",[1,1])),N=S.fromArray(A("occlusionUvOffset",[0,0])),z=de.fromArray(A("emissiveScale",[0,0,0])),J=A("emissiveUvs",0),U=S.fromArray(A("emissiveUvScale",[1,1])),ie=S.fromArray(A("emissiveUvOffset",[0,0])),O=A("emissiveStrength",null),uc=A("lightUvs",0),gc=S.fromArray(A("lightUvScale",[1,1])),pc=S.fromArray(A("lightUvOffset",[0,0])),Cc=!!A("lightMapRGBM",!1),mc=A("ior",null),Ic=!!A("useTransmission",!1),Gc=A("transmission",null),bc=A("transmissionUvs",0),fc=S.fromArray(A("transmissionMapUvScale",[1,1])),yc=S.fromArray(A("transmissionMapUvOffset",[0,0])),Xc=!!A("useVolume",!1),Bc=A("thickness",0),xc=A("thicknessUvs",0),Qc=S.fromArray(A("thicknessMapUvScale",[1,1])),Lc=S.fromArray(A("thicknessMapUvOffset",[0,0])),Ec=de.fromArray(A("attenuationColor",[0,0,0])),Rc=A("attenuationDistance",null),Sc=A("clearcoat",null),Mc=A("clearcoatUvs",0),Zc=S.fromArray(A("clearcoatUvScale",[1,1])),wc=S.fromArray(A("clearcoatUvOffset",[0,0])),Wc=A("clearcoatRoughness",null),Vc=A("clearcoatRoughnessUvs",0),Tc=S.fromArray(A("clearcoatRoughnessUvScale",[1,1])),kc=S.fromArray(A("clearcoatRoughnessUvOffset",[0,0])),Kc=A("clearcoatNormalUvs",0),Nc=S.fromArray(A("clearcoatNormalMapUVScale",[1,1])),zc=S.fromArray(A("clearcoatNormalMapUVOffset",[0,0])),Fc=A("clearcoatNormalScale",1),Hc=!!A("useSpecular",!1),Yc=A("specular",1),Uc=A("specularUvs",0),Dc=S.fromArray(A("specularUvScale",[1,1])),Jc=S.fromArray(A("specularUvOffset",[0,0])),vc=A("specularColorUv",0),_c=S.fromArray(A("specularColorUvScale",[1,1])),Pc=S.fromArray(A("specularColorUvOffset",[0,0])),Oc=A("dispersion",null),jc=!!A("useSheen",!1),qc=de.fromArray(A("sheenColorFactor",[1,1,1])),$c=A("sheenUvs",0),ed=S.fromArray(A("sheenUvScale",[1,1])),td=S.fromArray(A("sheenUvOffset",[0,0])),id=A("sheenRoughness",null),sd=A("sheenRoughnessUvs",0),Ad=S.fromArray(A("sheenRoughnessUvScale",[1,1])),nd=S.fromArray(A("sheenRoughnessUvOffset",[0,0])),ad={isUnlit:n,isDoubleSided:s?a:t.isDoubleSided,alphaMode:this.modelOptions.useAlpha?s?o:t.alphaMode:je.Opaque,alphaCutoff:r,useMetalRoughness:l,colorMap:t.colorMap,colorMapUvs:h,colorMapTiling:p,colorMapOffset:u,albedoColor:s?c:t.color,alphaMap:t.colorMapAlpha,alphaMapUvs:h,metalRoughnessMap:t.metRoughMap,metalRoughnessMapUvs:I,metalRoughnessMapTiling:G,metalRoughnessMapOffset:f,metalness:s?C:t.metalness,roughness:s?b:t.roughness,diffuseColor:X,diffuseMap:t.diffuseMap,diffuseMapUvs:m,diffuseMapTiling:x,diffuseMapOffset:R,specularColor:B,glossiness:M,specularGlossinessMap:t.specularGlossinessMap,specularGlossinessMapUvs:E,specularGlossinessMapTiling:Q,specularGlossinessMapOffset:Z,normalMap:t.normalMap,normalMapUvs:F,normalMapTiling:H,normalMapOffset:T,normalScale:s?K:t.normalScale,aoMap:t.aoMap,aoMapUvs:P,aoMapTiling:W,aoMapOffset:N,aoScale:s?he:t.aoScale,emissiveMap:t.emissiveMap,emissiveMapUvs:J,emissiveMapTiling:U,emissiveMapOffset:ie,emissiveColor:s?z:t.emissiveColor,emissiveStrength:O,lightMap:t.lightMap,lightMapUvs:uc,lightMapTiling:gc,lightMapOffset:pc,isLightMapRgbm:s?Cc:t.isLightMapRgbm,ior:mc,useTransmission:Ic,transmissionMap:t.transmissionMap,transmissionMapUvs:bc,transmissionMapTiling:fc,transmissionMapOffset:yc,transmission:Gc,useVolume:Xc,thicknessMap:t.thicknessMap,thicknessMapUvs:xc,thicknessMapTiling:Qc,thicknessMapOffset:Lc,thickness:Bc,attenuationColor:Ec,attenuationDistance:Rc,clearCoatMap:t.clearCoatMap,clearCoatMapUvs:Mc,clearCoatMapTiling:Zc,clearCoatMapOffet:wc,clearCoat:Sc,clearCoatRoughnessMap:t.clearCoatRoughnessMap,clearCoatRoughnessMapUvs:Vc,clearCoatRoughnessMapTiling:Tc,clearCoatRoughnessMapOffset:kc,clearCoatRoughness:Wc,clearCoatNormalMap:t.clearCoatNormalMap,clearCoatNormalMapUvs:Kc,clearCoatNormalMapTiling:Nc,clearCoatNormalMapOffset:zc,clearCoatNormalScale:Fc,useSpecular:Hc,specular:Yc,specularMap:t.specularMap,specularMapUvs:Uc,specularMapTiling:Dc,specularMapOffset:Jc,specularColorMap:t.specularColorMap,specularColorMapUvs:vc,specularColorMapTiling:_c,specularColorMapOffset:Pc,dispersion:Oc,useSheen:jc,sheenColor:qc,sheenMap:t.sheenMap,sheenMapUvs:$c,sheenMapTiling:ed,sheenMapOffset:td,sheenRoughness:id,sheenRoughnessMap:t.sheenRoughnessMap,sheenRoughnessMapUvs:sd,sheenRoughnessMapTiling:Ad,sheenRoughnessMapOffset:nd,environmentMap:this.modelOptions.environmentMap};return await this.renderer.createMaterial(ad)}getFilesToDownload(t,e){let s=[];if(e===0)for(const A of t){const n=A.modelNode;let a=A.lod;for(;a>0&&this.modelSource.getFileIndex()[n.geometry[a]][1]<25;)a--;this.addFileNamesForNode(n,a,s)}else{let A=null;for(const r of t){const l=r.modelNode;l.geometry&&l.geometry.length&&(A==null||A>l.geometry.length)&&(A=l.geometry.length-1)}let n=A,a=0,o=[];for(;a<e&&n>=0;){a=0,o=[];for(const r of t){const l=r.modelNode,c=Math.min(A,r.lod+n);l.geometry[c]&&this.addFileNamesForNode(l,c,o)}for(const r of o)a+=this.modelSource.getFileIndex()[r][1];n--}s=o}return s}addFileNamesForNode(t,e,s){t.colorMap[e]&&s.push(t.colorMap[e]),t.colorMapAlpha[e]&&s.push(t.colorMapAlpha[e]),t.emissiveMap[e]&&s.push(t.emissiveMap[e]),t.geometry[e]&&s.push(t.geometry[e]),t.metRoughMap[e]&&s.push(t.metRoughMap[e]),t.normalMap[e]&&s.push(t.normalMap[e]),t.occlusionMap[e]&&s.push(t.occlusionMap[e]),t.lightMap&&t.lightMap[e]&&s.push(t.lightMap[e]),t.transmissionMap&&t.transmissionMap[e]&&s.push(t.transmissionMap[e]),t.thicknessMap&&t.thicknessMap[e]&&s.push(t.thicknessMap[e]),t.clearCoatMap&&t.clearCoatMap[e]&&s.push(t.clearCoatMap[e]),t.clearCoatRoughnessMap&&t.clearCoatRoughnessMap[e]&&s.push(t.clearCoatRoughnessMap[e]),t.clearCoatNormalMap&&t.clearCoatNormalMap[e]&&s.push(t.clearCoatNormalMap[e]),t.specularMap&&t.specularMap[e]&&s.push(t.specularMap[e]),t.specularColorMap&&t.specularColorMap[e]&&s.push(t.specularColorMap[e]),t.diffuseMap&&t.diffuseMap[e]&&s.push(t.diffuseMap[e]),t.specularGlossinessMap&&t.specularGlossinessMap[e]&&s.push(t.specularGlossinessMap[e]),t.sheenMap&&t.sheenMap[e]&&s.push(t.sheenMap[e]),t.sheenRoughnessMap&&t.sheenRoughnessMap[e]&&s.push(t.sheenRoughnessMap[e])}async decompressInThread(t,e){return new Promise((s,A)=>{const n=sr++,a=n%ot.length;ot[a].postMessage({geometryArray:t,info:e.toBasicBoundingBox(),handle:n},[t.buffer]);const o=r=>{r.data.handle==n&&(ot[a].removeEventListener("message",o),r.data&&r.data.geom?s(r.data.geom):r.data&&r.data.err?A(r.data.err):A("Unknow decompression error in the worker thread."))};ot[a].addEventListener("message",o)})}}class nr{constructor(t,e,s){d(this,"children");d(this,"version");d(this,"parent");d(this,"model");d(this,"activeLod");d(this,"object3d");d(this,"isInsideBBox");d(this,"id");d(this,"material");d(this,"geometry");d(this,"colorMap");d(this,"colorMapAlpha");d(this,"emissiveMap");d(this,"metRoughMap");d(this,"normalMap");d(this,"occlusionMap");d(this,"lightMap");d(this,"transmissionMap");d(this,"thicknessMap");d(this,"clearCoatMap");d(this,"clearCoatRoughnessMap");d(this,"clearCoatNormalMap");d(this,"specularMap");d(this,"specularColorMap");d(this,"specularGlossinessMap");d(this,"diffuseMap");d(this,"sheenMap");d(this,"sheenRoughnessMap");d(this,"triangleCounts");d(this,"downloadSizes");d(this,"collider");d(this,"materials");d(this,"boundingBox");d(this,"_surfaceArea");d(this,"_isHidden");d(this,"lockCount");d(this,"selfLocked");d(this,"_surfaceAreaSqrt");d(this,"renderer");this.model=t,this.renderer=e,this.id=s,this.isHidden=!1,this.activeLod=-1,this.lockCount=0,this.selfLocked=!1,this.downloadSizes=[],this.isInsideBBox=!1}set clearcoatMap(t){this.clearCoatMap=t}set clearcoatRoughnessMap(t){this.clearCoatRoughnessMap=t}set clearcoatNormalMap(t){this.clearCoatNormalMap=t}get isLocked(){return this.lockCount>0}lock(){if(this.selfLocked)return;this.selfLocked=!0;let t=this;for(;t!=null;)t.lockCount++,t=t.parent}unlock(){if(!this.selfLocked)return;this.selfLocked=!1;let t=this;for(;t!=null;)t.lockCount--,t=t.parent}get isHidden(){return this._isHidden}set isHidden(t){if(this._isHidden=t,this.children)for(const e of this.children)e.isHidden=t}getTriangleCount(t){return t>=0&&t<this.triangleCounts.length?this.triangleCounts[t]:0}getDistance(t,e=!0){const s=e?t.minimumDistance:0;return t.distanceType===Ai.BoundingBoxCenter?this.boundingBox.getDistanceToCenter(this.model.cameraPositionLs)+s:this.boundingBox.getDistance(this.model.cameraPositionLs)+s}get worstLod(){return this.triangleCounts.length-1}get isInScene(){return this.object3d!=null}get surfaceArea(){return this._surfaceArea??0}set surfaceArea(t){this._surfaceArea=t,this._surfaceAreaSqrt=null}get surfaceAreaSqrt(){return this._surfaceAreaSqrt==null&&(this._surfaceAreaSqrt=Math.sqrt(this.surfaceArea)),this._surfaceAreaSqrt??0}getTriangleDensity(t){return this.getTriangleCount(t)/this.surfaceArea}get lodCount(){return this.triangleCounts.length}get sizeInView(){const t=this.boundingBox.getDistance(this.model.cameraPositionLs);return this.surfaceAreaSqrt/t}get desiredLod(){const e=Nn(this.model.quality,0,7),s=this.sizeInView;let A=.5+(7-e)*.3;A/=3;for(let n=0;n<this.lodCount-1;n++){const a=this.triangleCounts[n+1]/this.triangleCounts[n];if(s>=A)return n;A*=a}return this.lodCount-1}getTargetLod(t){return Math.min(this.lodCount-1,t)}getDownloadSize(t){return this.downloadSizes[t]==null&&(this.downloadSizes[t]=this.model.nodeDataSource.getDownloadSizeOfNode(this,t)),this.downloadSizes[t]}}class WA{constructor(t=0,e=0,s=0,A=0,n=0,a=0){d(this,"minX");d(this,"minY");d(this,"minZ");d(this,"maxX");d(this,"maxY");d(this,"maxZ");this.minX=t,this.minY=e,this.minZ=s,this.maxX=A,this.maxY=n,this.maxZ=a}}class Qe extends WA{constructor(e,s=0,A=0,n=0,a=0,o=0,r=0){super(s,A,n,a,o,r);d(this,"renderer");d(this,"_center");d(this,"_dimensions");d(this,"_volume");d(this,"_cubeEdgeLength");d(this,"_medianEdgeLength");d(this,"_surfaceArea");d(this,"_halfExtents");d(this,"_radius");this.renderer=e}toBasicBoundingBox(){return new WA(this.minX,this.minY,this.minZ,this.maxX,this.maxY,this.maxZ)}get center(){return this._center||(this._center=new Y(.5*(this.maxX+this.minX),.5*(this.maxY+this.minY),.5*(this.maxZ+this.minZ))),this._center}get dimensions(){return this._dimensions||(this._dimensions=new Y(this.maxX-this.minX,this.maxY-this.minY,this.maxZ-this.minZ)),this._dimensions}getDistance(e){const s=Qe.getDistance1D(e.x,this.minX,this.maxX),A=Qe.getDistance1D(e.y,this.minY,this.maxY),n=Qe.getDistance1D(e.z,this.minZ,this.maxZ);return Math.sqrt(s*s+A*A+n*n)}getDistanceToCenter(e){return this.center.distance(e)}containsPoint(e){return e.x>this.minX&&e.x<=this.maxX&&e.y>=this.minY&&e.y<=this.maxY&&e.z>=this.minZ&&e.z<=this.maxZ}get volume(){return this._volume==null&&(this._volume=(this.maxX-this.minX)*(this.maxY-this.minY)*(this.maxZ-this.minZ)),this._volume}get cubeEdgeLength(){return this._cubeEdgeLength==null&&(this._cubeEdgeLength=Math.pow(this.volume,1/3)),this._cubeEdgeLength}get medianEdgeLength(){return this._medianEdgeLength==null&&(this._medianEdgeLength=zn(this.maxX-this.minX,this.maxY-this.minY,this.maxZ-this.minZ)),this._medianEdgeLength}get surfaceArea(){if(this._surfaceArea==null){const e=this.maxX-this.minX,s=this.maxY-this.minY,A=this.maxZ-this.minZ,n=2*e*s,a=2*A*s,o=2*A*e;this._surfaceArea=n+a+o}return this._surfaceArea}get halfExtents(){return this._halfExtents==null&&(this._halfExtents=new Y((this.maxX-this.minX)/2,(this.maxY-this.minY)/2,(this.maxZ-this.minZ)/2)),this._halfExtents}get radius(){return this._radius==null&&(this._radius=new Y(this.minX,this.minY,this.minZ).sub(new Y(this.maxX,this.maxY,this.maxZ)).length()/2),this._radius}add(e,s=new Y){e.minX+s.x<this.minX&&(this.minX=e.minX+s.x),e.minY+s.y<this.minY&&(this.minY=e.minY+s.y),e.minZ+s.z<this.minZ&&(this.minZ=e.minZ+s.z),e.maxX+s.x>this.maxX&&(this.maxX=e.maxX+s.x),e.maxY+s.y>this.maxY&&(this.maxY=e.maxY+s.y),e.maxZ+s.z>this.maxZ&&(this.maxZ=e.maxZ+s.z),this.resetCache()}clone(e=new Y){return new Qe(this.renderer,this.minX+e.x,this.minY+e.y,this.minZ+e.z,this.maxX+e.x,this.maxY+e.y,this.maxZ+e.z)}toString(){return`min: ${this.minX}, ${this.minY}, ${this.minZ}, max: ${this.maxX}, ${this.maxY}, ${this.maxZ}`}static getDistance1D(e,s,A){return e<s?s-e:e>A?e-A:0}getNearestPoint(e,s=!1){const A=Qe.getNearestValue1D(e.x,this.minX,this.maxX,s),n=Qe.getNearestValue1D(e.y,this.minY,this.maxY,s),a=Qe.getNearestValue1D(e.z,this.minZ,this.maxZ,s);return new Y(A,n,a)}static getNearestValue1D(e,s,A,n){if(e<s)return s;if(e>A)return A;{const a=(A-s)/2+s;if(n)return a;const o=e-s,r=A-e,l=Math.abs(a-e),c=[[o,s],[l,a],[r,A]];return c.sort((h,p)=>h[0]-p[0]),c[0][1]}}resetCache(){this._center=null,this._dimensions=null,this._volume=null,this._cubeEdgeLength=null,this._medianEdgeLength=null,this._surfaceArea=null,this._halfExtents=null,this._radius=null}}const ar=["0.0.2","0.0.3","0.0.4"];class or{constructor(t,e,s,A,n,a){d(this,"initialTrianglePercent");d(this,"sceneGroup");d(this,"rootNode");d(this,"quality");d(this,"pathOrUrl");d(this,"cameraType");d(this,"qualityPriority");d(this,"parentGroup");d(this,"isRemoving");d(this,"isInitializing");d(this,"isUpdatingCount");d(this,"minDistanceToCamera");d(this,"maxDistanceToCamera");d(this,"useEmbeddedCollider");d(this,"id");d(this,"nodeDataSource");d(this,"options");d(this,"camera");d(this,"renderer");d(this,"_maxDepth");d(this,"streamController");this.streamController=t,this.renderer=e,this.parentGroup=s,this.camera=A,this.cameraType=n,this.options=a,this.isInitializing=!0,this.isRemoving=!1,this.isUpdatingCount=0,this.sceneGroup=a.sceneGroup,this.qualityPriority=a.qualityPriority,this.initialTrianglePercent=a.initialTrianglePercent,this.useEmbeddedCollider=a.useEmbeddedCollider===void 0?!0:a.useEmbeddedCollider,this.pathOrUrl=a.pathOrUrl,this.quality=4,this.id=jn()}async init(){if(this.nodeDataSource=new Ar(this.pathOrUrl,this.renderer,this.options),await this.nodeDataSource.init(),this.pathOrUrl.endsWith(".xrg")||this.pathOrUrl.endsWith(".sxrweb"))this.rootNode=await this.buildPartitionTree(this.nodeDataSource.modelSource);else throw new Error("Non-xrg or non-sxrweb sources are not supported")}setCamera(t){this.camera=t}dispose(){this.nodeDataSource=null,this.rootNode=null,this.sceneGroup=null,this.parentGroup=null}get cameraPositionLs(){switch(this.cameraType){case Re.NonPlayer:return this.renderer.getLocalPosition(this.renderer.getPosition(this.camera),this.sceneGroup);case Re.Player:return this.renderer.getLocalPosition(this.streamController.getReferencePosition(),this.sceneGroup);default:throw new Error(`Invalid camera type: ${this.cameraType}`)}}get cameraDirection(){return this.renderer.getDirection(this.camera)}async buildPartitionTree(t){const e=await t.fetchFileText("info.json"),s=this.buildNode(JSON.parse(e));if(!this.isValidVersion(s))throw new Error("Unsupported model info version");return s}buildNode(t,e,s=0,A=0){const n=e?`${e.id}.${s}`:String(s),a=new nr(this,this.renderer,n);Object.keys(t).forEach(o=>{switch(o){case"boundingBox":{const r=t.boundingBox;a.boundingBox=new Qe(this.renderer,r.minX,r.minY,r.minZ,r.maxX,r.maxY,r.maxZ);break}case"children":a.children=[];break;default:a[o]=t[o]}});for(let o=0;o<t.children.length;o++){const r=t.children[o],l=this.buildNode(r,a,o,A+1);l&&(l.parent=a,a.children.push(l))}return a}isValidVersion(t){return ar.includes(t.version)}}function lr(i){return i.cameraType==null&&(i.cameraType=Re.NonPlayer),i.useOcclusionCulling==null&&(i.useOcclusionCulling=!1),i.occlusionGeometryType==null&&(i.occlusionGeometryType=Ke.BoundingBox),i.occlusionQueryFrequency==null&&(i.occlusionQueryFrequency=8),i.triangleBudget==null&&(i.triangleBudget=3e6),i.mobileTriangleBudget==null&&(i.mobileTriangleBudget=1e6),i.minimumDistance==null&&(i.minimumDistance=.01),i.distanceFactor==null&&(i.distanceFactor=1.1),i.distanceType==null&&(i.distanceType=Ai.BoundingBoxCenter),i.maximumQuality==null&&(i.maximumQuality=15e3),i.closeUpDistance==null&&(i.closeUpDistance=3),i.closeUpDistanceFactor==null&&(i.closeUpDistanceFactor=5),i}function rr(i){return i.qualityPriority==null&&(i.qualityPriority=1),i.initialTrianglePercent==null&&(i.initialTrianglePercent=.1),i.castShadows==null&&(i.castShadows=!0),i.receiveShadows==null&&(i.receiveShadows=!0),i.castShadowsLightmap==null&&(i.castShadowsLightmap=!0),i.forceDoubleSided==null&&(i.forceDoubleSided=!1),i.useAlpha==null&&(i.useAlpha=!0),i.useEmbeddedCollider==null&&(i.useEmbeddedCollider=!0),i.hashCode==null&&(i.hashCode=""),i}class _t{constructor(t,e=-1,s){d(this,"modelNode");d(this,"lod");d(this,"children");d(this,"parent");this.modelNode=t,this.lod=e,this.parent=s,this.children=[]}get selfVisible(){var t;return this.children==null||((t=this.children)==null?void 0:t.length)===0}get childrenVisible(){return this.children!=null&&this.children.length>0}addChild(t,e){this.children==null&&(this.children=[]);const s=new _t(t,t.activeLod,this);return e!==void 0&&(s.lod=e),this.children.push(s),s}get model(){return this.modelNode.model}get downloadSize(){return this.modelNode.getDownloadSize(this.lod)}get triangleDensity(){return this.modelNode.getTriangleDensity(this.lod)}}class cr{constructor(){d(this,"items");d(this,"indicesByValue");this.items=[],this.indicesByValue=new Map}push(t,e){this.delete(t);const s=this.getInsertIndex(e);this.items.splice(s,0,{value:t,score:e}),this.indicesByValue.set(t,s)}popMax(){if(this.items.length===0)return;const t=this.items.splice(this.items.length-1,1)[0];return this.indicesByValue.delete(t.value),t.value}popMin(){if(this.items.length===0)return;const t=this.items.splice(0,1)[0];return this.indicesByValue.delete(t.value),t.value}peekMax(){return this.items.length===0?void 0:this.items[this.items.length-1].value}peekMin(){return this.items.length===0?void 0:this.items[0].value}peekMaxScore(){return this.items.length===0?void 0:this.items[this.items.length-1].score}peekMinScore(){return this.items.length===0?void 0:this.items[0].score}delete(t){const e=this.indicesByValue.get(t);e!=null&&(this.indicesByValue.delete(t),this.items.splice(e,1))}get length(){return this.items.length}getInsertIndex(t){let e=0,s=this.items.length-1,A=0,n;for(;e<=s;)if(A=(e+s)/2|0,n=this.items[A],n.score<t)e=A+1;else if(n.score>t)s=A-1;else return A;return n==null?0:n.score<t?A+1:A}}function VA(i,t,e,s,A,n,a,o){o==null&&(o=a.triangleBudget);const r=[],l=new cr;let c=Number.MAX_VALUE,h=0;const p={value:c},u={value:h};for(const G of t){const f=new _t(G);r.push(f),kA(l,f,G,a,p,u)}c=p.value,h=u.value;let C,b,I;for(a.closeUpDistance===0||c==null||c>a.closeUpDistance?(b=a.distanceFactor,I=hr(i,e,s,n),a.maximumQuality!==0&&I!=null&&I<_n&&(C=a.maximumQuality)):b=a.closeUpDistanceFactor;l.length>0&&h<o;){const G=l.peekMinScore(),f=l.popMin();if(C!=null&&G!=null&&G>=C)continue;const X=KA(f.modelNode,f.lod);if(X!=-1){const m=f.modelNode.getTriangleCount(f.lod),R=f.modelNode.getTriangleCount(X)-m;h+=R,f.lod=X,l.push(f,Rt(f.modelNode,f.lod,a,b))}else if(f.modelNode.children.length){const m=f.modelNode.getTriangleCount(f.lod);let x=0;for(const B of f.modelNode.children){const M=ur(B,G??0,a,b),E=f.addChild(B,M);x+=B.getTriangleCount(M),l.push(E,Rt(B,M,a,b))}const R=x-m;h+=R}}return[r,{distanceFactor:b,maximumQuality:C,coverage:I,minDistance:c}]}function dr(i){const t=new _t(i),e={value:0};return TA(i,t,e),[t,e.value]}function TA(i,t,e){if(i.isInScene)t.lod=i.activeLod,e.value+=i.getTriangleCount(i.activeLod);else for(const s of i.children){const A=t.addChild(s,-1);TA(s,A,e)}}function kA(i,t,e,s,A,n){for(const a of e.children){const o=NA(a);if(o>=0){const r=a.getDistance(s,!1);r<A.value&&(A.value=r);const l=t.addChild(a,o);i.push(l,Rt(a,o,s)),n.value+=a.getTriangleCount(o)}else{const r=t.addChild(a);kA(i,r,a,s,A,n)}}}function hr(i,t,e,s){const A=qn(i,t.radius,t.center,e);return A==null?void 0:Math.PI*Math.pow(A,2)/s}function KA(i,t){let e=t-1;for(e<-1&&(e=-1);e>=0;){if(i.getTriangleCount(e)>0)return e;e--}return e}function NA(i){let t=i.worstLod;for(;t>=0&&!(i.getTriangleCount(t)>0);)t--;return t}function ur(i,t,e,s){let A=NA(i),n=Rt(i,A,e,s);for(;n<=t&&A>0;){const a=KA(i,A);a>=0&&(A=a,n=Rt(i,A,e,s))}return A}function Rt(i,t,e,s=e.distanceFactor){let n=i.getTriangleCount(t)/i.surfaceArea;n/=i.model.qualityPriority;let a=i.getDistance(e);return a=Math.pow(a,s),n*a}class Te{constructor(t,e=-1){d(this,"modelNode");d(this,"lod");d(this,"_geometryPath");this.modelNode=t,this.lod=e}get geometryPath(){return this._geometryPath==null&&this.modelNode&&this.lod!==-1&&(this._geometryPath=`${this.modelNode.model.pathOrUrl}/${this.modelNode.geometry[this.lod]}`),this._geometryPath}get downloadSize(){return this.modelNode.getDownloadSize(this.lod)}getTriangleCount(){return this.modelNode.getTriangleCount(this.lod)}}class Ni{constructor(t,e,s){d(this,"triangleDifference");d(this,"priorityScore");d(this,"nodesToAdd");d(this,"nodesToRemove");d(this,"type");d(this,"downloadSize");d(this,"model");d(this,"nodeData");d(this,"options");d(this,"_id");d(this,"averageDistance");d(this,"minDistance");d(this,"visibleSurfaceArea");d(this,"visibleSurfaceAreaScore");d(this,"percentHidden");this.type=t,this.model=e,this.options=s,this.triangleDifference=0,this.priorityScore=0,this.downloadSize=0,this.nodesToAdd=[],this.nodesToRemove=[]}get id(){return this._id==null&&(this._id=`${this.type};${this.nodesToAdd.map(t=>t.geometryPath).join(",")};${this.nodesToRemove.map(t=>t.geometryPath).join(",")}`),this._id}update(){this.updateTriangleDifference(),this.updateDownloadSize(),this.updatePriorityScore()}get isLocked(){for(const t of this.nodesToRemove)if(t.modelNode.isLocked)return!0;return!1}get triangleDifferenceScore(){return this.triangleDifference<0?0:1}toString(){let t;switch(this.model.cameraType){case Re.Player:t=`${this.visibleSurfaceAreaScore.toLocaleString()} (${this.visibleSurfaceArea.toLocaleString()}) / ${this.averageDistance.toLocaleString()}`;break;case Re.NonPlayer:t=`${this.percentHidden} / ${this.averageDistance.toLocaleString()}`;break}const e=`add: ${this.nodesToAdd.length} (delta: ${this.nodesToAdd[0].modelNode.depth-this.nodesToRemove[0].modelNode.depth}, depth: ${this.getDepths(this.nodesToAdd).join(",")}, LOD: ${this.getLods(this.nodesToAdd).join(",")})`,s=`remove: ${this.nodesToRemove.length} (depth: ${this.getDepths(this.nodesToRemove).join(",")}, LOD: ${this.getLods(this.nodesToRemove).join(",")})`,A=`tri diff: ${this.triangleDifference.toLocaleString()}, priority: ${this.priorityScore.toLocaleString()} (${t}), download: ${ls(this.downloadSize)}`;return this.type===Ne.Simplify?`${Ne[this.type]}, ${s}, ${e}, ${A}`:`${Ne[this.type]}, ${e}, ${s}, ${A}`}updateTriangleDifference(){this.triangleDifference=0;for(const t of this.nodesToRemove)this.triangleDifference-=t.modelNode.getTriangleCount(t.lod);for(const t of this.nodesToAdd)this.triangleDifference+=t.modelNode.getTriangleCount(t.lod)}updateDownloadSize(){this.downloadSize=0;for(const t of this.nodesToAdd)this.downloadSize+=t.downloadSize}updatePriorityScore(){const t=this.nodesToAdd.length;let e=0,s=null;for(const A of this.nodesToAdd){const n=A.modelNode.getDistance(this.options);e+=n,(s==null||n<s)&&(s=n)}if(this.averageDistance=e/t,this.minDistance=s,this.model.cameraType===Re.Player){this.visibleSurfaceArea=0;for(const A of this.nodesToAdd)A.modelNode.isHidden||(this.visibleSurfaceArea+=A.modelNode.surfaceArea);this.visibleSurfaceAreaScore=this.visibleSurfaceArea!==0?Math.log10(Math.sqrt(this.visibleSurfaceArea)):.1,this.priorityScore=this.visibleSurfaceAreaScore/this.averageDistance}else{let A=0;for(const n of this.nodesToAdd)n.modelNode.isHidden||A++;this.percentHidden=A/t,this.priorityScore=Math.max(this.percentHidden,.1)/t/this.averageDistance}}getDepths(t){const e=new Set;for(const s of t)e.add(s.modelNode.depth);return Array.from(e.values()).sort()}getLods(t){const e=new Set;for(const s of t)e.add(s.lod);return Array.from(e.values()).sort()}}function gr(i,t){t?i.sort((e,s)=>e.triangleDifference-s.triangleDifference):i.sort((e,s)=>s.triangleDifferenceScore-e.triangleDifferenceScore||s.priorityScore-e.priorityScore)}function pr(i){const t=[];return FA(i,t),t}function zA(i,t,e,s,A){const n=i.model;if(i.selfVisible&&t.childrenVisible){const a=new Ni(Ne.Refine,n,A);a.nodesToRemove=[new Te(i.modelNode,i.lod)],a.nodesToAdd=Cr(t,vn),a.update(),e.push(a)}else if(i.childrenVisible&&t.selfVisible){const a=new Ni(Ne.Simplify,n,A);a.nodesToRemove=pr(i),a.nodesToAdd=[new Te(t.modelNode,t.lod)],a.update(),e.push(a)}else if(i.selfVisible&&t.selfVisible&&i.lod!==t.lod){const a=new Ni(Ne.SwapLod,n,A);a.nodesToRemove=[new Te(i.modelNode,i.lod)],a.nodesToAdd=[new Te(t.modelNode,t.lod)],a.update(),e.push(a)}else if(i.childrenVisible&&t.childrenVisible)for(let a=0;a<i.children.length;a++)zA(i.children[a],t.children[a],e,s,A)}function FA(i,t){if(i.selfVisible)t.push(new Te(i.modelNode,i.lod));else if(i.childrenVisible)for(const e of i.children)FA(e,t)}function Cr(i,t){const e=[];return HA(i,e,0,{value:0},t),e}function HA(i,t,e,s,A){if(i.childrenVisible){let n=0;for(const a of i.children)n+=a.downloadSize;if(e===0||s.value-i.downloadSize+n<=A){if(e>0){const a=t.findIndex(o=>o.modelNode===i.modelNode);a!==-1&&(t.splice(a,1),s.value-=i.downloadSize)}for(const a of i.children)t.push(new Te(a.modelNode,a.lod));s.value+=n;for(const a of i.children)HA(a,t,e+1,s,A)}}}const si=class si extends EventTarget{constructor(e,s,A,n=0,a,o){super();d(this,"camera");d(this,"options");d(this,"screenAspectRatio");d(this,"models");d(this,"modelLoadedHandlers");d(this,"totalNumModels");d(this,"boundingBox");d(this,"renderer");d(this,"referencePositionTimestamp");d(this,"referencePosition");d(this,"cameraSpeed");d(this,"lastUpdatedCameraSpeed");d(this,"prevCameraPositionForSpeed");d(this,"numModelsInitialDataLoaded");d(this,"prevCameraPosition");d(this,"currentDownloadSize");d(this,"reachedTargetTree");d(this,"lastGeneratedOperations");d(this,"numOperationsDownloading");d(this,"processingOperationIds");d(this,"renderQueue");d(this,"occlusionQueryInterval");d(this,"isColliderVisable",!1);d(this,"sentInitiallyReachedTargetTreeEvent",!1);se.initInstance(a,o),this.camera=e,this.renderer=s,this.totalNumModels=n;const r=lr(A);this.models=[],this.modelLoadedHandlers=[],this.numModelsInitialDataLoaded=0,this.processingOperationIds=new Set,this.renderQueue=[],this.currentDownloadSize=0,this.numOperationsDownloading=0,this.reachedTargetTree=!1;let l=this.getIntSetting(["tb","triangle-budget"],r.triangleBudget,r.mobileTriangleBudget!==0?r.mobileTriangleBudget:r.triangleBudget);oa()&&(l*=2/3),this.options={cameraType:r.cameraType,triangleBudget:l,mobileTriangleBudget:r.mobileTriangleBudget,minimumDistance:r.minimumDistance,distanceFactor:this.getFloatSetting(["df","distance-factor"],r.distanceFactor),distanceType:r.distanceType,maximumQuality:this.getFloatSetting(["mq","maximum-quality"],r.maximumQuality),closeUpDistance:this.getFloatSetting(["cd","close-up-distance"],r.closeUpDistance),closeUpDistanceFactor:this.getFloatSetting(["cdf","close-up-distance-factor"],r.closeUpDistanceFactor),useOcclusionCulling:this.getBooleanSetting(["oc","occlusion-culling"],r.useOcclusionCulling&&this.renderer.supportsOcclusionCulling),occlusionGeometryType:this.getEnumSetting(["og","occlusion-geometry"],r.occlusionGeometryType,Ke),occlusionQueryFrequency:r.occlusionQueryFrequency},se.instance.logSettings&&console.log(`Triangle budget: ${this.options.triangleBudget.toLocaleString()}, distance factor: ${this.options.distanceFactor}`),window.addEventListener("resize",()=>{this.getScreenAspectRatio()}),this.getScreenAspectRatio(),se.instance.toggleColliderVisualization&&document.addEventListener("keypress",c=>{c.key.toLowerCase()==="c"&&this.toggleColliderVisualization()}),this.options.useOcclusionCulling&&this.initOcclusionCulling(),this.renderOperation()}async addModel(e){const s=rr(e);if(!(s.pathOrUrl.endsWith(".sxrweb")||s.pathOrUrl.endsWith(".xrg"))){const{exists:o,url:r}=await this.checkModelExists(s.pathOrUrl,s.hashCode);if(o)s.pathOrUrl=r;else throw new Error(`The path ${s.pathOrUrl} does not contain a model`)}const A=this.renderer.newGroup();this.renderer.addToGroup(A,s.sceneGroup);const n=new or(this,this.renderer,A,this.camera,this.options.cameraType,s);await n.init();const a=this.models.length;if(s.onModelLoaded&&(this.modelLoadedHandlers[a]=s.onModelLoaded),this.models.push(n),this.totalNumModels>0&&this.models.length===this.totalNumModels)this.loadInitialModelsData();else if(this.totalNumModels!==-1){let o=0;for(let l=0;l<this.models.length-1;l++)o+=this.models[l].initialTrianglePercent;const r=o+n.initialTrianglePercent>1?Math.max(1-o,0):n.initialTrianglePercent;try{await this.loadInitialModelData(n,this.models.length-1,this.options.triangleBudget*r)}catch(l){console.warn(l)}}}removeModel(e,s=!1,A){if(!e){console.warn("Trying to remove wrong or empty object!");return}const n=this.models.find(o=>o.sceneGroup===e);if(!n||!n.parentGroup&&!n.sceneGroup&&!n.rootNode&&!n.nodeDataSource){console.warn("Trying to remove wrong or empty object!");return}else if(!n.parentGroup||!n.sceneGroup||!n.rootNode||!n.nodeDataSource){setTimeout(()=>{this.removeModel(e,s,A)},1e3);return}if(n.isRemoving=!0,n.isUpdatingCount>0||n.isInitializing){setTimeout(()=>{this.removeModel(e,s,A)},1e3);return}this.removeAll(n.parentGroup,n.rootNode),this.renderer.removeFromParent(e),n.dispose();const a=this.models.indexOf(n);this.models.splice(a,1),this.numModelsInitialDataLoaded--,A&&A(this.models.length===0),this.models.length===0&&s&&(si._instance=null)}update(){this.totalNumModels===-1&&this.models.length&&(this.totalNumModels=this.models.length,this.loadInitialModelsData()),this.generateOperations(),this.options.cameraType===Re.Player&&this.updateCameraSpeed()}getReferencePosition(){const e=Date.now();if(this.referencePositionTimestamp==null||e-this.referencePositionTimestamp>=Dn){const s=new Y(this.renderer.getPosition(this.camera)),A=new Y(this.renderer.getDirection(this.camera));A.y=0,this.referencePosition=s.add(A.mulScalar(this.cameraSpeed*Jn)),this.referencePositionTimestamp=e}return this.referencePosition}setCamera(e){this.camera=e;for(const s of this.models)s.setCamera(e)}get numModels(){return this.models.length}get modelsInitialDataLoaded(){return this.numModelsInitialDataLoaded>=this.numModels}generateOperations(){if(!this.camera||this.models.length===0||this.numModelsInitialDataLoaded===0||Wt()&&!this.modelsInitialDataLoaded||this.highlightedNodeSoloed)return;const e=this.cameraHasMoved();if(this.currentDownloadSize<Fn&&(!this.modelsInitialDataLoaded||e||!this.reachedTargetTree)&&(this.lastGeneratedOperations==null||Date.now()-this.lastGeneratedOperations>Hn)){this.lastGeneratedOperations=Date.now();const s=[];for(const A of this.models)!A.isRemoving&&!A.isInitializing&&s.push(A.rootNode);if(s.length>0){const[A,n]=VA(this.renderer,s,this.boundingBox,this.camera,this.options.cameraType,this.screenAspectRatio,this.options);let a=0;const o=[];for(const h of A){const[p,u]=dr(h.modelNode);o.push(p),a+=u}const r=[];let l=0;const c=a>this.options.triangleBudget;for(const h of A){const p=o[l];zA(p,h,r,c,this.options),l++}gr(r,c);for(let h=0;h<r.length&&this.numOperationsDownloading<Yn;h++){const p=r[h];!this.processingOperationIds.has(p.id)&&!p.isLocked&&(this.processingOperationIds.add(p.id),this.downloadOperation(p),this.numOperationsDownloading++)}this.reachedTargetTree=r.length===0,this.reachedTargetTree&&!this.sentInitiallyReachedTargetTreeEvent&&(this.dispatchEvent(new Event(Pn)),this.sentInitiallyReachedTargetTreeEvent=!0)}}}async downloadOperation(e){for(const s of e.nodesToRemove)s.modelNode.lock();try{e.model.isUpdatingCount++,this.currentDownloadSize+=e.downloadSize;const s=await e.model.nodeDataSource.downloadNodeData(e.nodesToAdd);this.currentDownloadSize-=e.downloadSize,e.nodeData=s,this.renderQueue.push(e),this.numOperationsDownloading--}catch(s){console.error(`Failed to download node data: ${s}`),this.currentDownloadSize-=e.downloadSize,this.processingOperationIds.delete(e.id),this.numOperationsDownloading--}}async renderOperation(){if(this.renderQueue.length>0){const s=this.renderQueue.shift();if(!s)return;const A=s.model,n=A.rootNode.materials;if(!A.isRemoving){const a=[],o=[];for(const r of s.nodesToAdd){const l=r.modelNode;a.push(A.nodeDataSource.createMesh(l,n,s.nodeData,this.options,o,this.createMeshOcclusionData(l)))}await Promise.all(a);for(const r of s.nodesToRemove){this.removeMeshFromScene(s.model.parentGroup,r);const l=r.modelNode;l.activeLod=-1}for(const r of o)r.node.object3d=r.object3d;for(const r of s.nodesToAdd){const l=r.modelNode;this.addMeshToScene(A.parentGroup,l),l.activeLod=r.lod}for(const r of s.nodesToRemove)r.modelNode.unlock()}this.processingOperationIds.delete(s.id),A.isUpdatingCount--}const e=this.renderQueue.length>0?0:25;setTimeout(()=>this.renderOperation(),e)}addMeshToScene(e,s){const A=s.object3d;if(A){const n=this.renderer.getChildren(e).filter(a=>a.psNode===s);for(const a of n)this.renderer.removeFromGroup(a,e),a!==A&&!a.psIsOcclusionMesh&&this.renderer.disposeObject3d(a);this.renderer.addToGroup(A,e)}}removeMeshFromScene(e,s){const A=s.modelNode;A.model.nodeDataSource.releaseNodeData(s);const n=this.renderer.getChildren(e).filter(a=>a.psNode===A&&!a.psIsOcclusionMesh);for(const a of n)this.renderer.removeFromGroup(a,e),this.renderer.disposeObject3d(a);A.object3d=null}removeAll(e,s){for(const n of s.children)this.removeAll(e,n);const A=s.object3d;A&&(this.renderer.removeFromGroup(A,e),this.renderer.disposeObject3d(A),s.object3d=null)}initOcclusionCulling(){this.renderer.initializeOcclusionCulling&&(this.occlusionQueryInterval=this.options.occlusionQueryFrequency===0?0:1/this.options.occlusionQueryFrequency*1e3,this.renderer.initializeOcclusionCulling(this.camera,this.occlusionQueryInterval))}createMeshOcclusionData(e){if(!this.options.useOcclusionCulling)return;const s=Math.random()*this.occlusionQueryInterval;if(this.options.occlusionGeometryType===Ke.BoundingBox){const A=this.createQueryDataObject(e,s,!0),n=this.createQueryDataObject(e,s,!1);return[A,n]}else return[this.createQueryDataObject(e,s)]}createQueryDataObject(e,s,A=!0){return{inProgress:!1,query:this.renderer.createGpuQuery(),node:e,queryInterval:A?this.occlusionQueryInterval:this.occlusionQueryInterval*4,queryTimestampOffset:s,isOcclusionQuery:A}}cameraHasMoved(){const e=new Y(this.renderer.getPosition(this.camera));let s=!0;return this.prevCameraPosition!=null&&(s=!e.equals(this.prevCameraPosition)),this.prevCameraPosition=e,s}async loadInitialModelsData(){const e=[];let s=0;for(const A of this.models)e.push(A.initialTrianglePercent),s+=A.initialTrianglePercent;if(s>1)for(let A=0;A<e.length;A++)e[A]=e[A]/s;for(const[A,n]of this.models.entries())try{await this.loadInitialModelData(n,A,this.options.triangleBudget*e[A])}catch(a){console.warn(a)}}async loadInitialModelData(e,s,A){const n=this.renderer.getPosition(e.sceneGroup);this.boundingBox==null?this.boundingBox=e.rootNode.boundingBox.clone(n):this.boundingBox.add(e.rootNode.boundingBox,n);const a=e.rootNode.collider;se.instance.logCollider&&a!==void 0&&!e.useEmbeddedCollider&&console.log("useEmbeddedCollider is set to false for model even though it has an embedded collider");const o=!!(e.useEmbeddedCollider&&a);if(o&&this.renderer.supportsColliders&&this.renderer.addCollider){const u=Date.now();se.instance.logCollider&&console.log("Downloading embedded collider...");const C=await e.nodeDataSource.downloadNodeDataLod([e.rootNode]);this.renderer.addCollider(e.parentGroup,C[a]),se.instance.logCollider&&console.log(`Downloaded and applied embedded collider in ${Aa((Date.now()-u)/1e3)} seconds`)}let r;if(A!==0){const[u,C]=VA(this.renderer,[e.rootNode],this.boundingBox,this.camera,this.options.cameraType,this.screenAspectRatio,this.options,A);r=this.getLeafNodeLods(u[0])}else{r=[];for(const u of e.rootNode.children)r.push(new Te(u,0))}const l=await e.nodeDataSource.downloadNodeData(r),c=[],h=new Set,p=e.rootNode.materials;for(const u of r){h.add(u.lod);const C=u.modelNode;c.push(e.nodeDataSource.createMesh(C,p,l,this.options,void 0,this.createMeshOcclusionData(C)))}await Promise.all(c);for(const u of r){const C=u.modelNode;this.addMeshToScene(e.parentGroup,C),C.activeLod=u.lod}e.isInitializing=!1,this.numModelsInitialDataLoaded++,se.instance.logInitialModelDataLoaded&&console.log(`Downloaded initial model data (${this.numModelsInitialDataLoaded}/${this.totalNumModels}), LODs: ${Array.from(h.values()).join(", ")}`),this.modelLoadedHandlers[s]&&this.modelLoadedHandlers[s](e.rootNode.boundingBox.center,e.rootNode.boundingBox.halfExtents,o,this.numModelsInitialDataLoaded>=this.totalNumModels),this.dispatchEvent(new Event("model-loaded"))}getLeafNodeLods(e,s=[]){if(!e.children||e.children.length===0){const A=new Te(e.modelNode,e.lod);s.push(A)}else e.children.forEach(A=>this.getLeafNodeLods(A,s));return s}async checkModelExists(e,s){e.endsWith("/")||(e+="/");let A=e+"model.xrg",n=await new Ki(A,this.renderer,s).fetchRangeText([0,1]);return n!=null?{exists:!0,url:A}:(A=e+"model.sxrweb",n=await new Ki(A,this.renderer,s).fetchRangeText([0,1]),n!=null?{exists:!0,url:A}:{exists:!1,url:""})}getIntSetting(e,s,A){return this.getSetting(e,s,A,n=>parseInt(n),n=>!isNaN(n))}getFloatSetting(e,s,A){return this.getSetting(e,s,A,n=>parseFloat(n),n=>!isNaN(n))}getBooleanSetting(e,s,A){return this.getSetting(e,s,A,n=>n==="true"?!0:n==="false"?!1:null,n=>n===!0||n===!1)}getEnumSetting(e,s,A,n){const a=this.getSetting(e,s,n,o=>o,o=>Object.values(A).includes(o));return On(a,A)}getSetting(e,s,A,n,a){const o=new URLSearchParams(window.location.search);let r;for(const l of e)if(r=o.get(l),r!=null)break;if(r!=null){if(r.indexOf(",")!==-1){const l=Wt()?1:0;r=r.split(",")[l]}if(r==="desktop")return s;if(r!==""){const l=n(r);if(l!=null&&a(l))return l}}return A===void 0||!Wt()?s:A}getScreenAspectRatio(){this.renderer.screenWidth&&this.renderer.screenHeight&&(this.screenAspectRatio=this.renderer.screenWidth/this.renderer.screenHeight)}toggleColliderVisualization(){if(this.renderer.visualizeCollider){this.isColliderVisable=!this.isColliderVisable;for(const e of this.models)this.renderer.visualizeCollider(this.isColliderVisable,e.parentGroup)}}updateCameraSpeed(){const e=Date.now();if(this.lastUpdatedCameraSpeed==null||e-this.lastUpdatedCameraSpeed>=Un){const s=new Y(this.renderer.getPosition(this.camera));if(this.lastUpdatedCameraSpeed!=null){let A=e-this.lastUpdatedCameraSpeed;A!==0&&(A/=1e3),this.cameraSpeed=s.clone().sub(this.prevCameraPositionForSpeed).length()/A}this.lastUpdatedCameraSpeed=e,this.prevCameraPositionForSpeed=s}}get playCanvasApp(){return this.renderer.app}};d(si,"_instance");let zi=si;class mr{constructor(t=4){this.pool=t,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0}_initWorker(t){if(!this.workers[t]){const e=this.workerCreator();e.addEventListener("message",this._onMessage.bind(this,t)),this.workers[t]=e}}_getIdleWorker(){for(let t=0;t<this.pool;t++)if(!(this.workerStatus&1<<t))return t;return-1}_onMessage(t,e){const s=this.workersResolve[t];if(s&&s(e),this.queue.length){const{resolve:A,msg:n,transfer:a}=this.queue.shift();this.workersResolve[t]=A,this.workers[t].postMessage(n,a)}else this.workerStatus^=1<<t}setWorkerCreator(t){this.workerCreator=t}setWorkerLimit(t){this.pool=t}postMessage(t,e){return new Promise(s=>{const A=this._getIdleWorker();A!==-1?(this._initWorker(A),this.workerStatus|=1<<A,this.workersResolve[A]=s,this.workers[A].postMessage(t,e)):this.queue.push({resolve:s,msg:t,transfer:e})})}dispose(){this.workers.forEach(t=>t.terminate()),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}const Ir=0,YA=2,Gr=1,UA=2,br=0,fr=1,yr=10,Xr=0,DA=9,JA=15,vA=16,_A=22,PA=37,OA=43,jA=76,qA=83,$A=97,en=100,tn=103,sn=109,An=165,nn=166;class Br{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=0,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:0,descriptorBlockSize: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:[]}],this.keyValue={},this.globalData=null}}class St{constructor(t,e,s,A){this._dataView=new DataView(t.buffer,t.byteOffset+e,s),this._littleEndian=A,this._offset=0}_nextUint8(){const t=this._dataView.getUint8(this._offset);return this._offset+=1,t}_nextUint16(){const t=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,t}_nextUint32(){const t=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,t}_nextUint64(){const t=this._dataView.getUint32(this._offset,this._littleEndian)+4294967296*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,t}_nextInt32(){const t=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,t}_skip(t){return this._offset+=t,this}_scan(t,e=0){const s=this._offset;let A=0;for(;this._dataView.getUint8(this._offset)!==e&&A<t;)A++,this._offset++;return A<t&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+s,A)}}const te=[171,75,84,88,32,50,48,187,13,10,26,10];function an(i){return typeof TextDecoder<"u"?new TextDecoder().decode(i):Buffer.from(i).toString("utf8")}function xr(i){const t=new Uint8Array(i.buffer,i.byteOffset,te.length);if(t[0]!==te[0]||t[1]!==te[1]||t[2]!==te[2]||t[3]!==te[3]||t[4]!==te[4]||t[5]!==te[5]||t[6]!==te[6]||t[7]!==te[7]||t[8]!==te[8]||t[9]!==te[9]||t[10]!==te[10]||t[11]!==te[11])throw new Error("Missing KTX 2.0 identifier.");const e=new Br,s=17*Uint32Array.BYTES_PER_ELEMENT,A=new St(i,te.length,s,!0);e.vkFormat=A._nextUint32(),e.typeSize=A._nextUint32(),e.pixelWidth=A._nextUint32(),e.pixelHeight=A._nextUint32(),e.pixelDepth=A._nextUint32(),e.layerCount=A._nextUint32(),e.faceCount=A._nextUint32();const n=A._nextUint32();e.supercompressionScheme=A._nextUint32();const a=A._nextUint32(),o=A._nextUint32(),r=A._nextUint32(),l=A._nextUint32(),c=A._nextUint64(),h=A._nextUint64(),p=new St(i,te.length+s,3*n*8,!0);for(let P=0;P<n;P++)e.levels.push({levelData:new Uint8Array(i.buffer,i.byteOffset+p._nextUint64(),p._nextUint64()),uncompressedByteLength:p._nextUint64()});const u=new St(i,a,o,!0),C={vendorId:u._skip(4)._nextUint16(),descriptorType:u._nextUint16(),versionNumber:u._nextUint16(),descriptorBlockSize:u._nextUint16(),colorModel:u._nextUint8(),colorPrimaries:u._nextUint8(),transferFunction:u._nextUint8(),flags:u._nextUint8(),texelBlockDimension:[u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8()],bytesPlane:[u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8()],samples:[]},b=(C.descriptorBlockSize/4-6)/4;for(let P=0;P<b;P++){const W={bitOffset:u._nextUint16(),bitLength:u._nextUint8(),channelType:u._nextUint8(),samplePosition:[u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8()],sampleLower:-1/0,sampleUpper:1/0};64&W.channelType?(W.sampleLower=u._nextInt32(),W.sampleUpper=u._nextInt32()):(W.sampleLower=u._nextUint32(),W.sampleUpper=u._nextUint32()),C.samples[P]=W}e.dataFormatDescriptor.length=0,e.dataFormatDescriptor.push(C);const I=new St(i,r,l,!0);for(;I._offset<l;){const P=I._nextUint32(),W=I._scan(P),N=an(W),z=I._scan(P-W.byteLength);e.keyValue[N]=N.match(/^ktx/i)?an(z):z,I._offset%4&&I._skip(4-I._offset%4)}if(h<=0)return e;const G=new St(i,c,h,!0),f=G._nextUint16(),X=G._nextUint16(),m=G._nextUint32(),x=G._nextUint32(),R=G._nextUint32(),B=G._nextUint32(),M=[];for(let P=0;P<n;P++)M.push({imageFlags:G._nextUint32(),rgbSliceByteOffset:G._nextUint32(),rgbSliceByteLength:G._nextUint32(),alphaSliceByteOffset:G._nextUint32(),alphaSliceByteLength:G._nextUint32()});const E=c+G._offset,Q=E+m,Z=Q+x,K=Z+R,F=new Uint8Array(i.buffer,i.byteOffset+E,m),H=new Uint8Array(i.buffer,i.byteOffset+Q,x),T=new Uint8Array(i.buffer,i.byteOffset+Z,R),he=new Uint8Array(i.buffer,i.byteOffset+K,B);return e.globalData={endpointCount:f,selectorCount:X,imageDescs:M,endpointsData:F,selectorsData:H,tablesData:T,extendedData:he},e}let Fi,Le,Hi;const Yi={env:{emscripten_notify_memory_growth:function(i){Hi=new Uint8Array(Le.exports.memory.buffer)}}};class Qr{init(){return Fi||(Fi=typeof fetch<"u"?fetch("data:application/wasm;base64,"+on).then(t=>t.arrayBuffer()).then(t=>WebAssembly.instantiate(t,Yi)).then(this._init):WebAssembly.instantiate(Buffer.from(on,"base64"),Yi).then(this._init),Fi)}_init(t){Le=t.instance,Yi.env.emscripten_notify_memory_growth(0)}decode(t,e=0){if(!Le)throw new Error("ZSTDDecoder: Await .init() before decoding.");const s=t.byteLength,A=Le.exports.malloc(s);Hi.set(t,A),e=e||Number(Le.exports.ZSTD_findDecompressedSize(A,s));const n=Le.exports.malloc(e),a=Le.exports.ZSTD_decompress(n,e,A,s),o=Hi.slice(n,n+a);return Le.exports.free(A),Le.exports.free(n),o}}const on="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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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",Ui=new WeakMap;let Di=0,Ji;class fe extends g.Loader{constructor(t){super(t),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new mr,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(t){return this.transcoderPath=t,this}setWorkerLimit(t){return this.workerPool.setWorkerLimit(t),this}async detectSupportAsync(t){return this.workerConfig={astcSupported:await t.hasFeatureAsync("texture-compression-astc"),etc1Supported:await t.hasFeatureAsync("texture-compression-etc1"),etc2Supported:await t.hasFeatureAsync("texture-compression-etc2"),dxtSupported:await t.hasFeatureAsync("texture-compression-bc"),bptcSupported:await t.hasFeatureAsync("texture-compression-bptc"),pvrtcSupported:await t.hasFeatureAsync("texture-compression-pvrtc")},this}detectSupport(t){return t.isWebGPURenderer===!0?this.workerConfig={astcSupported:t.hasFeature("texture-compression-astc"),etc1Supported:t.hasFeature("texture-compression-etc1"),etc2Supported:t.hasFeature("texture-compression-etc2"),dxtSupported:t.hasFeature("texture-compression-bc"),bptcSupported:t.hasFeature("texture-compression-bptc"),pvrtcSupported:t.hasFeature("texture-compression-pvrtc")}:this.workerConfig={astcSupported:t.extensions.has("WEBGL_compressed_texture_astc"),etc1Supported:t.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:t.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:t.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:t.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:t.extensions.has("WEBGL_compressed_texture_pvrtc")||t.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},this}init(){if(!this.transcoderPending){const t=new g.FileLoader(this.manager);t.setPath(this.transcoderPath),t.setWithCredentials(this.withCredentials);const e=t.loadAsync("basis_transcoder.js"),s=new g.FileLoader(this.manager);s.setPath(this.transcoderPath),s.setResponseType("arraybuffer"),s.setWithCredentials(this.withCredentials);const A=s.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([e,A]).then(([n,a])=>{const o=fe.BasisWorker.toString(),r=["/* constants */","let _EngineFormat = "+JSON.stringify(fe.EngineFormat),"let _TranscoderFormat = "+JSON.stringify(fe.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(fe.BasisFormat),"/* basis_transcoder.js */",n,"/* worker */",o.substring(o.indexOf("{")+1,o.lastIndexOf("}"))].join(`
|
|
2
|
-
`);this.workerSourceURL=URL.createObjectURL(new Blob([r])),this.transcoderBinary=a,this.workerPool.setWorkerCreator(()=>{const l=new Worker(this.workerSourceURL),c=this.transcoderBinary.slice(0);return l.postMessage({type:"init",config:this.workerConfig,transcoderBinary:c},[c]),l})}),Di>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),Di++}return this.transcoderPending}load(t,e,s,A){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const n=new g.FileLoader(this.manager);n.setResponseType("arraybuffer"),n.setWithCredentials(this.withCredentials),n.load(t,a=>{if(Ui.has(a))return Ui.get(a).promise.then(e).catch(A);this._createTexture(a).then(o=>e?e(o):null).catch(A)},s,A)}_createTextureFrom(t,e){const{faces:s,width:A,height:n,format:a,type:o,error:r,dfdFlags:l}=t;if(o==="error")return Promise.reject(r);let c;if(e.faceCount===6)c=new g.CompressedCubeTexture(s,a,g.UnsignedByteType);else{const h=s[0].mipmaps;c=e.layerCount>1?new g.CompressedArrayTexture(h,A,n,e.layerCount,a,g.UnsignedByteType):new g.CompressedTexture(h,A,n,a,g.UnsignedByteType)}return c.minFilter=s[0].mipmaps.length===1?g.LinearFilter:g.LinearMipmapLinearFilter,c.magFilter=g.LinearFilter,c.generateMipmaps=!1,c.needsUpdate=!0,c.colorSpace=ln(e),c.premultiplyAlpha=!!(l&Gr),c}async _createTexture(t,e={}){const s=xr(new Uint8Array(t));if(s.vkFormat!==Xr)return Er(s);const A=e,n=this.init().then(()=>this.workerPool.postMessage({type:"transcode",buffer:t,taskConfig:A},[t])).then(a=>this._createTextureFrom(a.data,s));return Ui.set(t,{promise:n}),n}dispose(){return this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),Di--,this}}fe.BasisFormat={ETC1S:0,UASTC_4x4:1},fe.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},fe.EngineFormat={RGBAFormat:g.RGBAFormat,RGBA_ASTC_4x4_Format:g.RGBA_ASTC_4x4_Format,RGBA_BPTC_Format:g.RGBA_BPTC_Format,RGBA_ETC2_EAC_Format:g.RGBA_ETC2_EAC_Format,RGBA_PVRTC_4BPPV1_Format:g.RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT5_Format:g.RGBA_S3TC_DXT5_Format,RGB_ETC1_Format:g.RGB_ETC1_Format,RGB_ETC2_Format:g.RGB_ETC2_Format,RGB_PVRTC_4BPPV1_Format:g.RGB_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT1_Format:g.RGBA_S3TC_DXT1_Format},fe.BasisWorker=function(){let i,t,e;const s=_EngineFormat,A=_TranscoderFormat,n=_BasisFormat;self.addEventListener("message",function(C){const b=C.data;switch(b.type){case"init":i=b.config,a(b.transcoderBinary);break;case"transcode":t.then(()=>{try{const{faces:I,buffers:G,width:f,height:X,hasAlpha:m,format:x,dfdFlags:R}=o(b.buffer);self.postMessage({type:"transcode",id:b.id,faces:I,width:f,height:X,hasAlpha:m,format:x,dfdFlags:R},G)}catch(I){console.error(I),self.postMessage({type:"error",id:b.id,error:I.message})}});break}});function a(C){t=new Promise(b=>{e={wasmBinary:C,onRuntimeInitialized:b},BASIS(e)}).then(()=>{e.initializeBasis(),e.KTX2File===void 0&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")})}function o(C){const b=new e.KTX2File(new Uint8Array(C));function I(){b.close(),b.delete()}if(!b.isValid())throw I(),new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");const G=b.isUASTC()?n.UASTC_4x4:n.ETC1S,f=b.getWidth(),X=b.getHeight(),m=b.getLayers()||1,x=b.getLevels(),R=b.getFaces(),B=b.getHasAlpha(),M=b.getDFDFlags(),{transcoderFormat:E,engineFormat:Q}=h(G,f,X,B);if(!f||!X||!x)throw I(),new Error("THREE.KTX2Loader: Invalid texture");if(!b.startTranscoding())throw I(),new Error("THREE.KTX2Loader: .startTranscoding failed");const Z=[],K=[];for(let F=0;F<R;F++){const H=[];for(let T=0;T<x;T++){const he=[];let P,W;for(let z=0;z<m;z++){const J=b.getImageLevelInfo(T,z,F);F===0&&T===0&&z===0&&(J.origWidth%4!==0||J.origHeight%4!==0)&&console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),x>1?(P=J.origWidth,W=J.origHeight):(P=J.width,W=J.height);const U=new Uint8Array(b.getImageTranscodedSizeInBytes(T,z,0,E));if(!b.transcodeImage(U,T,z,F,E,0,-1,-1))throw I(),new Error("THREE.KTX2Loader: .transcodeImage failed.");he.push(U)}const N=u(he);H.push({data:N,width:P,height:W}),K.push(N.buffer)}Z.push({mipmaps:H,width:f,height:X,format:Q})}return I(),{faces:Z,buffers:K,width:f,height:X,hasAlpha:B,format:Q,dfdFlags:M}}const r=[{if:"astcSupported",basisFormat:[n.UASTC_4x4],transcoderFormat:[A.ASTC_4x4,A.ASTC_4x4],engineFormat:[s.RGBA_ASTC_4x4_Format,s.RGBA_ASTC_4x4_Format],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[n.ETC1S,n.UASTC_4x4],transcoderFormat:[A.BC7_M5,A.BC7_M5],engineFormat:[s.RGBA_BPTC_Format,s.RGBA_BPTC_Format],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[n.ETC1S,n.UASTC_4x4],transcoderFormat:[A.BC1,A.BC3],engineFormat:[s.RGBA_S3TC_DXT1_Format,s.RGBA_S3TC_DXT5_Format],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[n.ETC1S,n.UASTC_4x4],transcoderFormat:[A.ETC1,A.ETC2],engineFormat:[s.RGB_ETC2_Format,s.RGBA_ETC2_EAC_Format],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[n.ETC1S,n.UASTC_4x4],transcoderFormat:[A.ETC1],engineFormat:[s.RGB_ETC1_Format],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[n.ETC1S,n.UASTC_4x4],transcoderFormat:[A.PVRTC1_4_RGB,A.PVRTC1_4_RGBA],engineFormat:[s.RGB_PVRTC_4BPPV1_Format,s.RGBA_PVRTC_4BPPV1_Format],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0}],l=r.sort(function(C,b){return C.priorityETC1S-b.priorityETC1S}),c=r.sort(function(C,b){return C.priorityUASTC-b.priorityUASTC});function h(C,b,I,G){let f,X;const m=C===n.ETC1S?l:c;for(let x=0;x<m.length;x++){const R=m[x];if(i[R.if]&&R.basisFormat.includes(C)&&!(G&&R.transcoderFormat.length<2)&&!(R.needsPowerOfTwo&&!(p(b)&&p(I))))return f=R.transcoderFormat[G?1:0],X=R.engineFormat[G?1:0],{transcoderFormat:f,engineFormat:X}}return console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."),f=A.RGBA32,X=s.RGBAFormat,{transcoderFormat:f,engineFormat:X}}function p(C){return C<=2?!0:(C&C-1)===0&&C!==0}function u(C){if(C.length===1)return C[0];let b=0;for(let f=0;f<C.length;f++){const X=C[f];b+=X.byteLength}const I=new Uint8Array(b);let G=0;for(let f=0;f<C.length;f++){const X=C[f];I.set(X,G),G+=X.byteLength}return I}};const Lr=new Set([g.RGBAFormat,g.RGFormat,g.RedFormat]),vi={[sn]:g.RGBAFormat,[$A]:g.RGBAFormat,[PA]:g.RGBAFormat,[OA]:g.RGBAFormat,[tn]:g.RGFormat,[qA]:g.RGFormat,[vA]:g.RGFormat,[_A]:g.RGFormat,[en]:g.RedFormat,[jA]:g.RedFormat,[JA]:g.RedFormat,[DA]:g.RedFormat,[nn]:g.RGBA_ASTC_6x6_Format,[An]:g.RGBA_ASTC_6x6_Format},_i={[sn]:g.FloatType,[$A]:g.HalfFloatType,[PA]:g.UnsignedByteType,[OA]:g.UnsignedByteType,[tn]:g.FloatType,[qA]:g.HalfFloatType,[vA]:g.UnsignedByteType,[_A]:g.UnsignedByteType,[en]:g.FloatType,[jA]:g.HalfFloatType,[JA]:g.UnsignedByteType,[DA]:g.UnsignedByteType,[nn]:g.UnsignedByteType,[An]:g.UnsignedByteType};async function Er(i){const{vkFormat:t}=i;if(vi[t]===void 0)throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");let e;i.supercompressionScheme===YA&&(Ji||(Ji=new Promise(async n=>{const a=new Qr;await a.init(),n(a)})),e=await Ji);const s=[];for(let n=0;n<i.levels.length;n++){const a=Math.max(1,i.pixelWidth>>n),o=Math.max(1,i.pixelHeight>>n),r=i.pixelDepth?Math.max(1,i.pixelDepth>>n):0,l=i.levels[n];let c;if(i.supercompressionScheme===Ir)c=l.levelData;else if(i.supercompressionScheme===YA)c=e.decode(l.levelData,l.uncompressedByteLength);else throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");let h;_i[t]===g.FloatType?h=new Float32Array(c.buffer,c.byteOffset,c.byteLength/Float32Array.BYTES_PER_ELEMENT):_i[t]===g.HalfFloatType?h=new Uint16Array(c.buffer,c.byteOffset,c.byteLength/Uint16Array.BYTES_PER_ELEMENT):h=c,s.push({data:h,width:a,height:o,depth:r})}let A;if(Lr.has(vi[t]))A=i.pixelDepth===0?new g.DataTexture(s[0].data,i.pixelWidth,i.pixelHeight):new g.Data3DTexture(s[0].data,i.pixelWidth,i.pixelHeight,i.pixelDepth);else{if(i.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");A=new g.CompressedTexture(s,i.pixelWidth,i.pixelHeight)}return A.mipmaps=s,A.type=_i[t],A.format=vi[t],A.colorSpace=ln(i),A.needsUpdate=!0,Promise.resolve(A)}function ln(i){const t=i.dataFormatDescriptor[0];return t.colorPrimaries===fr?t.transferFunction===UA?g.SRGBColorSpace:g.LinearSRGBColorSpace:t.colorPrimaries===yr?t.transferFunction===UA?g.DisplayP3ColorSpace:g.LinearDisplayP3ColorSpace:(t.colorPrimaries===br||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${t.colorPrimaries}"`),g.NoColorSpace)}(function(i,t){for(var e=Oi,s=i();;)try{var A=-parseInt(e(184))/1+parseInt(e(180))/2*(-parseInt(e(185))/3)+parseInt(e(183))/4+parseInt(e(179))/5+parseInt(e(177))/6*(parseInt(e(186))/7)+-parseInt(e(178))/8*(parseInt(e(181))/9)+parseInt(e(182))/10;if(A===t)break;s.push(s.shift())}catch{s.push(s.shift())}})(Pt,250643);function Pt(){var i=["960028ydFAdR","435672ZtCTCw","4698QJsDPz","46228nZOabq","144XvyjSA","8VzRpek","620065QPSorp","284fpQuta","1074888tXPIsn","5056030sXGwQE"];return Pt=function(){return i},Pt()}function Pi(i){return new L.Vector3(i.x,i.y,i.z)}function Oi(i,t){var e=Pt();return Oi=function(s,A){s=s-177;var n=e[s];return n},Oi(i,t)}function lt(i){return new L.Color(i.r,i.g,i.b)}const y=Mt;function Ot(){const i=["isUnlit","attenuationDistance"," not recognised.","clearcoatRoughnessMap","emissiveStrength","wrapT","disposeObject3d","useVolume","lightMap","108sCDXlq","raycast","revokeObjectURL","map","clearCoatNormalMap","Mesh","psGpuQuery","addToGroup","receiveShadow","dispersion","project","attenuationColor","disposeTexture","supportsOcclusionCulling","psOcclusionObject3d","remove","thickness","aoMap","Group","34exWwjT","alphaCutoff","createKtxTexture","opacity","NoColorSpace","setFromCamera","setAttribute","clearCoatRoughness","psGpuQueriesData","supportsColliders","metalness","1476335eSWSrB","MeshBasicMaterial","highlightMaterial","specularColorMap","18UfPDrk","positions","material","clearCoat","deleteQuery","BufferAttribute","normalMap","getSize","clearCoatMap","_textureLoader","1210420sbTftj","createGpuQuery","envMap","136297dIXJnp","emissive","setTranscoderPath","fov","BoundingBox","setIndex","renderer","setTextureProperties","specularIntensity","length","Vector3","albedoColor","screenHeight","alphaMap","castShadows","alphaMode","getDirection","getLocalPosition","load","emissiveMap","normal","BufferGeometry","removeFromParent","object","instance","MeshPhysicalMaterial","Opaque","ignoreObjectIds","3D object as no parent","raycaster","createBoundingBoxMesh","add","createBoundingBoxObject3d","unignoreObject3d","negate","createQueryMesh","specularColor","boundingBox","375176QDTSYP","clearcoatNormalMap","RepeatWrapping","visible","center","createMaterial","screenWidth","wrapS","isDoubleSided","name","clearCoatNormalScale","createQuery","getCameraFov","transmission","normals","SRGBColorSpace","createBoundingBoxGeometry","useSheen","alphaTest","getPosition","boundingBoxMaterial","getQueryMaterial","colors","TextureLoader","castShadow","position","Transparent","intersectObjects","environmentMap","ignoreObject3d","14615HrjFNl","queryMaterials","receiveShadows","sheenColorMap","createObject3d","819404DalsGU","sheenMap","BoxGeometry","clearCoatRoughnessMap","Vector2","occlusionGeometryType","ior","_ktx2Loader","sheenRoughness","generateMipmaps","colorMap","FrontSide","thicknessMap","options","sheenRoughnessMap","clearcoatMap","geometry","colorSpace","model","getWorldPosition","getContext","hide","parent","useTransmission","metalnessMap","getChildren","depthTest","aoMapIntensity","textureLoader","Color",".occlusion","specular","query","specularMap","normalScale","transmissionMap","Raycaster","clearcoatRoughness","localToWorld","_raycaster","transparent","createObjectURL","/lib/","side","roughness","capabilities","_ignoreObjectIds","dispose","getBoundingBoxMaterial","MeshStandardMaterial","warn","isWebGL2","color","metalRoughnessMap","getMaterial","newGroup","renderWireframe","type","sheenColor","943206fcRAXJ","getName","scene","set","emissiveColor"];return Ot=function(){return i},Ot()}(function(i,t){const e=Mt,s=i();for(;;)try{if(-parseInt(e(287))/1*(parseInt(e(384))/2)+parseInt(e(351))/3+-parseInt(e(292))/4+parseInt(e(202))/5+-parseInt(e(365))/6*(-parseInt(e(219))/7)+-parseInt(e(257))/8+-parseInt(e(206))/9*(parseInt(e(216))/10)===t)break;s.push(s.shift())}catch{s.push(s.shift())}})(Ot,217860);function Mt(i,t){const e=Ot();return Mt=function(s,A){return s=s-202,e[s]},Mt(i,t)}const jt=new L[y(296)];class Rr{constructor(t,e){d(this,xn);d(this,Bn);d(this,Xn);d(this,yn);d(this,fn);d(this,bn);d(this,Gn);d(this,In);d(this,mn);const s=y;this[s(225)]=t,this[s(353)]=e}get[(xn=y(225),Bn=y(353),Xn=y(215),yn=y(299),fn=y(277),bn=y(288),Gn=y(331),In=y(338),mn=y(204),y(349))](){return As.ThreeJs}get[y(263)](){return this[y(225)].getSize(jt),jt.x}get[y(231)](){const t=y;return this[t(225)][t(213)](jt),jt.y}get[y(378)](){return!1}get[y(393)](){return!1}[y(276)](t){const e=y;return t.getWorldPosition(new L[e(229)])}[y(235)](t){const e=y,s=new L.Vector3;return t.getWorldDirection(s),s[e(253)]()}[y(236)](t,e){return e.worldToLocal(Pi(t))}[y(311)](t,e){return e[y(330)](Pi(t))}projectPoint(t,e){const s=y,A=Pi(t)[s(375)](e),n=this[s(263)]*.5,a=this[s(231)]*.5;return A.x=A.x*n+n,A.y=-(A.y*a)+a,A}[y(269)](t){return t[y(222)]}[y(347)](){const t=y;return new L[t(383)]}[y(372)](t,e){const s=y,A=e;A[s(250)](t);const n=t[s(379)];n&&A[s(250)](n)}removeFromGroup(t,e){const s=y,A=e;A[s(380)](t);const n=t.psOcclusionObject3d;n&&A[s(380)](n)}[y(241)](t){const e=y,s=t;s[e(314)]?s[e(314)][e(380)](s):console[e(342)](e(247))}[y(317)](t){return t.children}[y(313)](t){const e=y;t[e(260)]=!1}show(t){const e=y;t[e(260)]=!0}[y(352)](t){return t[y(266)]}[y(262)](t){const e=y;let s={};if(t[e(265)]&&(s[e(335)]=L.DoubleSide),t[e(356)]){const A=new L[e(203)];return t[e(230)]&&(A[e(344)]=lt(t[e(230)])),t[e(302)]&&(t[e(302)][e(309)]=L.SRGBColorSpace,A[e(368)]=t[e(302)]),A}else{switch(t[e(302)]&&(t[e(302)][e(309)]=L[e(272)],s[e(368)]=t[e(302)]),t.albedoColor&&(s[e(344)]=lt(t[e(230)]),s.opacity=t[e(230)].a),t[e(234)]){case je[e(283)]:s[e(332)]=!0;break;case je.Cutoff:s[e(275)]=t[e(385)];break}t[e(232)]&&t.alphaMap!=t[e(302)]?s[e(232)]=t[e(232)]:t[e(234)]===je[e(245)]&&s[e(387)]!=null&&s.alphaTest!=null&&s.opacity<s[e(275)]&&(s={},s[e(260)]=!1),t.useMetalRoughness&&(t[e(345)]?(t[e(345)][e(309)]=L[e(388)],s[e(316)]=t.metalRoughnessMap,s.roughnessMap=t[e(345)],t[e(394)]!=null?s[e(394)]=t[e(394)]:s.metalness=1,t[e(336)]!=null?s[e(336)]=t.roughness:s[e(336)]=1):t[e(394)]!=null&&t[e(336)]!=null&&(s[e(394)]=t[e(394)],s[e(336)]=t[e(336)])),t[e(212)]&&(t[e(212)][e(309)]=L[e(388)],s[e(212)]=t[e(212)],s[e(326)]=new L[e(296)](t.normalScale,t[e(326)])),t[e(382)]&&(t[e(382)][e(309)]=L[e(388)],s[e(382)]=t.aoMap,t.aoScale!=null&&(s[e(319)]=t.aoScale)),t[e(238)]&&(t[e(238)][e(309)]=L[e(272)],s[e(238)]=t[e(238)],s[e(220)]=new L.Color(1,1,1)),t.emissiveColor&&(s.emissive=lt(t[e(355)])),t[e(360)]!=null&&(s.emissiveIntensity=t.emissiveStrength)}return t.lightMap&&(t[e(364)].colorSpace=L[e(272)],s[e(364)]=t[e(364)]),t[e(298)]!=null&&(s.ior=t[e(298)]),t[e(315)]&&(t[e(270)]!=null&&(s.transmission=t[e(270)]),t[e(327)]&&(t[e(327)][e(309)]=L.NoColorSpace,s[e(327)]=t[e(327)])),t[e(363)]&&(t[e(381)]!=null&&(s[e(381)]=t[e(381)]),t.thicknessMap&&(t.thicknessMap[e(309)]=L[e(388)],s.thicknessMap=t[e(304)]),t.attenuationColor&&t[e(376)].r!=0&&t.attenuationColor.g!=0&&t[e(376)].b!=0&&(s.attenuationColor=lt(t.attenuationColor)),t[e(357)]!=null&&(s[e(357)]=t[e(357)])),t[e(209)]!=null&&(s.clearcoat=t.clearCoat),t[e(214)]&&(t[e(214)][e(309)]=L.NoColorSpace,s[e(307)]=t[e(214)]),t.clearCoatRoughness!=null&&(s[e(329)]=t[e(391)]),t.clearCoatRoughnessMap&&(t[e(295)][e(309)]=L.NoColorSpace,s[e(359)]=t[e(295)]),t[e(369)]&&(t[e(369)][e(309)]=L[e(388)],s[e(258)]=t[e(369)],s.clearcoatNormalScale=new L[e(296)](t[e(267)],t.clearCoatNormalScale)),t.useSpecular&&(t.specularColorMap&&(t[e(205)][e(309)]=L[e(272)],s.specularColorMap=t[e(205)]),t[e(255)]?s.specularColor=lt(t[e(255)]):s.specularColor=new L[e(321)](1,1,1),t[e(323)]!=null?s[e(227)]=t.specular:s.specularIntensity=1,t[e(325)]&&(t[e(325)]=L[e(388)],s.specularIntensityMap=t[e(325)])),t[e(374)]!=null&&(s[e(374)]=t[e(374)]),t[e(274)]&&(s.sheen=1,t[e(350)]&&(s[e(350)]=lt(t[e(350)])),t[e(293)]&&(t[e(293)].colorSpace=L[e(388)],s[e(290)]=t[e(293)]),t[e(300)]!=null&&(s.sheenRoughness=t[e(300)]),t[e(306)]&&(t.sheenRoughnessMap[e(309)]=L[e(388)],s.sheenRoughnessMap=t[e(306)])),t[e(285)]&&(s[e(218)]=t.environmentMap),new L[e(244)](s)}async createTexture(t,e){const s=URL.createObjectURL(e);return new Promise((A,n)=>{const a=Mt;this.textureLoader[a(237)](s,o=>{const r=a;URL[r(367)](s),this[r(226)](o,t),o[r(301)]=!0,A(o)},void 0,o=>{n(o)})})}async[y(386)](t,e){const s=y,A=URL[s(333)](e);return new Promise((n,a)=>{const o=s;this.ktx2Loader[o(237)](A,r=>{const l=o;r[l(266)]=t,URL.revokeObjectURL(A),this[l(226)](r,t),n(r)},void 0,r=>{URL[o(367)](A),a(r)})})}[y(377)](t){t[y(339)]()}[y(291)](t,e,s,A,n,a,o){const r=y,l=t.indices,c=new L[r(240)];if(l[r(228)]>0){c[r(224)](new L[r(211)](l,1)),c[r(390)](r(282),new L[r(211)](t[r(207)],3)),c[r(390)](r(239),new L.BufferAttribute(t[r(271)],3)),c[r(390)]("uv",new L[r(211)](t.uvs[0],2));for(let C=1;C<t.uvs[r(228)];C++)c[r(390)]("uv"+C,new L[r(211)](t.uvs[C],2));t[r(279)][r(228)]>0&&c[r(390)](r(344),new L[r(211)](t.colors,4))}const h=new L.Mesh(c,e),p=s[r(310)][r(305)];h[r(281)]=p[r(233)],h[r(373)]=p[r(289)];let u=null;if(a.occlusionGeometryType!=null&&o!=null)switch(u=new L.Group,u[r(266)]=A+r(322),u[r(392)]=o,a[r(297)]){case Ke[r(223)]:{u[r(282)][r(354)](s[r(256)][r(261)].x,s[r(256)][r(261)].y,s[r(256)].center.z);const C=this[r(273)](s[r(256)]),b=this[r(254)](C,o[0],!0),I=this[r(254)](C,o[1],!1);u[r(250)](b),u.add(I);break}case Ke.Mesh:{const C=new L.Mesh(c,this[r(278)]());C.psGpuQuery=o[0],u[r(250)](C);break}default:throw new Error("Occlusion geometry type "+Ke[a[r(297)]]+r(358))}return[h,u]}[y(362)](t){const e=y,s=t,A=t,n=A[e(379)];if(n){const a=A[e(392)];if(a)for(const r of a)r.query&&this[e(225)][e(337)].isWebGL2&&this[e(225)][e(312)]()[e(210)](r[e(324)]);const o=n;o.material[e(339)](),o[e(308)][e(339)]()}s.material.dispose(),s.geometry.dispose()}[y(217)](){const t=y;this[t(225)][t(337)][t(343)]&&this[t(225)].getContext()[t(268)]()}[y(366)](t,e){const s=y,A=new L.Vector2(t.x/this[s(263)]*2-1,-(t.y/this[s(231)])*2+1);this.raycaster[s(389)](A,e);const n=this[s(248)][s(284)](this[s(353)].children);for(const a of n)if(!this[s(246)].has(a[s(242)].id))return a[s(242)];return null}[y(286)](t){this[y(246)].add(t.id)}[y(252)](t){this[y(246)].delete(t.id)}getHighlightMaterial(){const t=y;return!this[t(204)]&&(this[t(204)]=new L[t(341)]({color:16711680})),this[t(204)]}[y(346)](t){return t[y(208)]}setMaterial(t,e){const s=y;t[s(208)]=e}[y(251)](t){const e=y;return this[e(249)](t,this[e(340)]())}[y(348)](t,e){const s=y;t[s(208)].wireframe=e}[y(254)](t,e,s){const A=y,n=this[A(278)](s),a=new L[A(370)](t,n);return a[A(371)]=e,a}[y(278)](t=!0){const e=y,s=t?0:1;if(this[e(288)]==null||this.queryMaterials[s]==null){const A=new L[e(203)]({color:16777215,depthWrite:!1,colorWrite:!1});!t&&(A[e(335)]=L[e(303)],A[e(318)]=!1),this[e(288)]==null&&(this.queryMaterials=[]),this[e(288)][s]=A}return this[e(288)][s]}[y(249)](t,e){const s=y,A=new L[s(370)](this.createBoundingBoxGeometry(t),e),n=ta(t);return A[s(282)][s(354)](n.x,n.y,n.z),A}[y(273)](t){const e=y,s=ia(t);return new L[e(294)](s.x,s.y,s.z)}[y(340)](){const t=y;return this.boundingBoxMaterial==null&&(this[t(277)]=new L[t(341)]({color:16777215,opacity:os,transparent:os!==1})),this[t(277)]}setTextureProperties(t,e){const s=y;t.name=e,t[s(264)]=L.RepeatWrapping,t[s(361)]=L[s(259)],t.repeat.set(1,1)}get[y(320)](){const t=y;return this[t(215)]==null&&(this[t(215)]=new L[t(280)]),this[t(215)]}get ktx2Loader(){const t=y;return this[t(299)]==null&&(this[t(299)]=new fe,this[t(299)][t(221)](se[t(243)].baseUrl+t(334)),this._ktx2Loader.detectSupport(this[t(225)])),this[t(299)]}get[y(248)](){const t=y;return this[t(331)]==null&&(this[t(331)]=new L[t(328)]),this._raycaster}get[y(246)](){const t=y;return this[t(338)]==null&&(this[t(338)]=new Set),this[t(338)]}}function rn(i,t){if(t===g.TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),i;if(t===g.TriangleFanDrawMode||t===g.TriangleStripDrawMode){let e=i.getIndex();if(e===null){const a=[],o=i.getAttribute("position");if(o!==void 0){for(let r=0;r<o.count;r++)a.push(r);i.setIndex(a),e=i.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),i}const s=e.count-2,A=[];if(t===g.TriangleFanDrawMode)for(let a=1;a<=s;a++)A.push(e.getX(0)),A.push(e.getX(a)),A.push(e.getX(a+1));else for(let a=0;a<s;a++)a%2===0?(A.push(e.getX(a)),A.push(e.getX(a+1)),A.push(e.getX(a+2))):(A.push(e.getX(a+2)),A.push(e.getX(a+1)),A.push(e.getX(a)));A.length/3!==s&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const n=i.clone();return n.setIndex(A),n.clearGroups(),n}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",t),i}class Sr extends g.Loader{constructor(t){super(t),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(e){return new Vr(e)}),this.register(function(e){return new Tr(e)}),this.register(function(e){return new Dr(e)}),this.register(function(e){return new Jr(e)}),this.register(function(e){return new vr(e)}),this.register(function(e){return new Kr(e)}),this.register(function(e){return new Nr(e)}),this.register(function(e){return new zr(e)}),this.register(function(e){return new Fr(e)}),this.register(function(e){return new Wr(e)}),this.register(function(e){return new Hr(e)}),this.register(function(e){return new kr(e)}),this.register(function(e){return new Ur(e)}),this.register(function(e){return new Yr(e)}),this.register(function(e){return new Zr(e)}),this.register(function(e){return new _r(e)}),this.register(function(e){return new Pr(e)})}load(t,e,s,A){const n=this;let a;if(this.resourcePath!=="")a=this.resourcePath;else if(this.path!==""){const l=g.LoaderUtils.extractUrlBase(t);a=g.LoaderUtils.resolveURL(l,this.path)}else a=g.LoaderUtils.extractUrlBase(t);this.manager.itemStart(t);const o=function(l){A?A(l):console.error(l),n.manager.itemError(t),n.manager.itemEnd(t)},r=new g.FileLoader(this.manager);r.setPath(this.path),r.setResponseType("arraybuffer"),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(t,function(l){try{n.parse(l,a,function(c){e(c),n.manager.itemEnd(t)},o)}catch(c){o(c)}},s,o)}setDRACOLoader(t){return this.dracoLoader=t,this}setDDSLoader(){throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".')}setKTX2Loader(t){return this.ktx2Loader=t,this}setMeshoptDecoder(t){return this.meshoptDecoder=t,this}register(t){return this.pluginCallbacks.indexOf(t)===-1&&this.pluginCallbacks.push(t),this}unregister(t){return this.pluginCallbacks.indexOf(t)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(t),1),this}parse(t,e,s,A){let n;const a={},o={},r=new TextDecoder;if(typeof t=="string")n=JSON.parse(t);else if(t instanceof ArrayBuffer)if(r.decode(new Uint8Array(t,0,4))===cn){try{a[w.KHR_BINARY_GLTF]=new Or(t)}catch(h){A&&A(h);return}n=JSON.parse(a[w.KHR_BINARY_GLTF].content)}else n=JSON.parse(r.decode(t));else n=t;if(n.asset===void 0||n.asset.version[0]<2){A&&A(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));return}const l=new rc(n,{path:e||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});l.fileLoader.setRequestHeader(this.requestHeader);for(let c=0;c<this.pluginCallbacks.length;c++){const h=this.pluginCallbacks[c](l);h.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),o[h.name]=h,a[h.name]=!0}if(n.extensionsUsed)for(let c=0;c<n.extensionsUsed.length;++c){const h=n.extensionsUsed[c],p=n.extensionsRequired||[];switch(h){case w.KHR_MATERIALS_UNLIT:a[h]=new wr;break;case w.KHR_DRACO_MESH_COMPRESSION:a[h]=new jr(n,this.dracoLoader);break;case w.KHR_TEXTURE_TRANSFORM:a[h]=new qr;break;case w.KHR_MESH_QUANTIZATION:a[h]=new $r;break;default:p.indexOf(h)>=0&&o[h]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+h+'".')}}l.setExtensions(a),l.setPlugins(o),l.parse(s,A)}parseAsync(t,e){const s=this;return new Promise(function(A,n){s.parse(t,e,A,n)})}}function Mr(){let i={};return{get:function(t){return i[t]},add:function(t,e){i[t]=e},remove:function(t){delete i[t]},removeAll:function(){i={}}}}const w={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 Zr{constructor(t){this.parser=t,this.name=w.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const t=this.parser,e=this.parser.json.nodes||[];for(let s=0,A=e.length;s<A;s++){const n=e[s];n.extensions&&n.extensions[this.name]&&n.extensions[this.name].light!==void 0&&t._addNodeRef(this.cache,n.extensions[this.name].light)}}_loadLight(t){const e=this.parser,s="light:"+t;let A=e.cache.get(s);if(A)return A;const n=e.json,r=((n.extensions&&n.extensions[this.name]||{}).lights||[])[t];let l;const c=new g.Color(16777215);r.color!==void 0&&c.setRGB(r.color[0],r.color[1],r.color[2],g.LinearSRGBColorSpace);const h=r.range!==void 0?r.range:0;switch(r.type){case"directional":l=new g.DirectionalLight(c),l.target.position.set(0,0,-1),l.add(l.target);break;case"point":l=new g.PointLight(c),l.distance=h;break;case"spot":l=new g.SpotLight(c),l.distance=h,r.spot=r.spot||{},r.spot.innerConeAngle=r.spot.innerConeAngle!==void 0?r.spot.innerConeAngle:0,r.spot.outerConeAngle=r.spot.outerConeAngle!==void 0?r.spot.outerConeAngle:Math.PI/4,l.angle=r.spot.outerConeAngle,l.penumbra=1-r.spot.innerConeAngle/r.spot.outerConeAngle,l.target.position.set(0,0,-1),l.add(l.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+r.type)}return l.position.set(0,0,0),l.decay=2,Ee(l,r),r.intensity!==void 0&&(l.intensity=r.intensity),l.name=e.createUniqueName(r.name||"light_"+t),A=Promise.resolve(l),e.cache.add(s,A),A}getDependency(t,e){if(t==="light")return this._loadLight(e)}createNodeAttachment(t){const e=this,s=this.parser,n=s.json.nodes[t],o=(n.extensions&&n.extensions[this.name]||{}).light;return o===void 0?null:this._loadLight(o).then(function(r){return s._getNodeRef(e.cache,o,r)})}}class wr{constructor(){this.name=w.KHR_MATERIALS_UNLIT}getMaterialType(){return g.MeshBasicMaterial}extendParams(t,e,s){const A=[];t.color=new g.Color(1,1,1),t.opacity=1;const n=e.pbrMetallicRoughness;if(n){if(Array.isArray(n.baseColorFactor)){const a=n.baseColorFactor;t.color.setRGB(a[0],a[1],a[2],g.LinearSRGBColorSpace),t.opacity=a[3]}n.baseColorTexture!==void 0&&A.push(s.assignTexture(t,"map",n.baseColorTexture,g.SRGBColorSpace))}return Promise.all(A)}}class Wr{constructor(t){this.parser=t,this.name=w.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(t,e){const A=this.parser.json.materials[t];if(!A.extensions||!A.extensions[this.name])return Promise.resolve();const n=A.extensions[this.name].emissiveStrength;return n!==void 0&&(e.emissiveIntensity=n),Promise.resolve()}}class Vr{constructor(t){this.parser=t,this.name=w.KHR_MATERIALS_CLEARCOAT}getMaterialType(t){const s=this.parser.json.materials[t];return!s.extensions||!s.extensions[this.name]?null:g.MeshPhysicalMaterial}extendMaterialParams(t,e){const s=this.parser,A=s.json.materials[t];if(!A.extensions||!A.extensions[this.name])return Promise.resolve();const n=[],a=A.extensions[this.name];if(a.clearcoatFactor!==void 0&&(e.clearcoat=a.clearcoatFactor),a.clearcoatTexture!==void 0&&n.push(s.assignTexture(e,"clearcoatMap",a.clearcoatTexture)),a.clearcoatRoughnessFactor!==void 0&&(e.clearcoatRoughness=a.clearcoatRoughnessFactor),a.clearcoatRoughnessTexture!==void 0&&n.push(s.assignTexture(e,"clearcoatRoughnessMap",a.clearcoatRoughnessTexture)),a.clearcoatNormalTexture!==void 0&&(n.push(s.assignTexture(e,"clearcoatNormalMap",a.clearcoatNormalTexture)),a.clearcoatNormalTexture.scale!==void 0)){const o=a.clearcoatNormalTexture.scale;e.clearcoatNormalScale=new g.Vector2(o,o)}return Promise.all(n)}}class Tr{constructor(t){this.parser=t,this.name=w.KHR_MATERIALS_DISPERSION}getMaterialType(t){const s=this.parser.json.materials[t];return!s.extensions||!s.extensions[this.name]?null:g.MeshPhysicalMaterial}extendMaterialParams(t,e){const A=this.parser.json.materials[t];if(!A.extensions||!A.extensions[this.name])return Promise.resolve();const n=A.extensions[this.name];return e.dispersion=n.dispersion!==void 0?n.dispersion:0,Promise.resolve()}}class kr{constructor(t){this.parser=t,this.name=w.KHR_MATERIALS_IRIDESCENCE}getMaterialType(t){const s=this.parser.json.materials[t];return!s.extensions||!s.extensions[this.name]?null:g.MeshPhysicalMaterial}extendMaterialParams(t,e){const s=this.parser,A=s.json.materials[t];if(!A.extensions||!A.extensions[this.name])return Promise.resolve();const n=[],a=A.extensions[this.name];return a.iridescenceFactor!==void 0&&(e.iridescence=a.iridescenceFactor),a.iridescenceTexture!==void 0&&n.push(s.assignTexture(e,"iridescenceMap",a.iridescenceTexture)),a.iridescenceIor!==void 0&&(e.iridescenceIOR=a.iridescenceIor),e.iridescenceThicknessRange===void 0&&(e.iridescenceThicknessRange=[100,400]),a.iridescenceThicknessMinimum!==void 0&&(e.iridescenceThicknessRange[0]=a.iridescenceThicknessMinimum),a.iridescenceThicknessMaximum!==void 0&&(e.iridescenceThicknessRange[1]=a.iridescenceThicknessMaximum),a.iridescenceThicknessTexture!==void 0&&n.push(s.assignTexture(e,"iridescenceThicknessMap",a.iridescenceThicknessTexture)),Promise.all(n)}}class Kr{constructor(t){this.parser=t,this.name=w.KHR_MATERIALS_SHEEN}getMaterialType(t){const s=this.parser.json.materials[t];return!s.extensions||!s.extensions[this.name]?null:g.MeshPhysicalMaterial}extendMaterialParams(t,e){const s=this.parser,A=s.json.materials[t];if(!A.extensions||!A.extensions[this.name])return Promise.resolve();const n=[];e.sheenColor=new g.Color(0,0,0),e.sheenRoughness=0,e.sheen=1;const a=A.extensions[this.name];if(a.sheenColorFactor!==void 0){const o=a.sheenColorFactor;e.sheenColor.setRGB(o[0],o[1],o[2],g.LinearSRGBColorSpace)}return a.sheenRoughnessFactor!==void 0&&(e.sheenRoughness=a.sheenRoughnessFactor),a.sheenColorTexture!==void 0&&n.push(s.assignTexture(e,"sheenColorMap",a.sheenColorTexture,g.SRGBColorSpace)),a.sheenRoughnessTexture!==void 0&&n.push(s.assignTexture(e,"sheenRoughnessMap",a.sheenRoughnessTexture)),Promise.all(n)}}class Nr{constructor(t){this.parser=t,this.name=w.KHR_MATERIALS_TRANSMISSION}getMaterialType(t){const s=this.parser.json.materials[t];return!s.extensions||!s.extensions[this.name]?null:g.MeshPhysicalMaterial}extendMaterialParams(t,e){const s=this.parser,A=s.json.materials[t];if(!A.extensions||!A.extensions[this.name])return Promise.resolve();const n=[],a=A.extensions[this.name];return a.transmissionFactor!==void 0&&(e.transmission=a.transmissionFactor),a.transmissionTexture!==void 0&&n.push(s.assignTexture(e,"transmissionMap",a.transmissionTexture)),Promise.all(n)}}class zr{constructor(t){this.parser=t,this.name=w.KHR_MATERIALS_VOLUME}getMaterialType(t){const s=this.parser.json.materials[t];return!s.extensions||!s.extensions[this.name]?null:g.MeshPhysicalMaterial}extendMaterialParams(t,e){const s=this.parser,A=s.json.materials[t];if(!A.extensions||!A.extensions[this.name])return Promise.resolve();const n=[],a=A.extensions[this.name];e.thickness=a.thicknessFactor!==void 0?a.thicknessFactor:0,a.thicknessTexture!==void 0&&n.push(s.assignTexture(e,"thicknessMap",a.thicknessTexture)),e.attenuationDistance=a.attenuationDistance||1/0;const o=a.attenuationColor||[1,1,1];return e.attenuationColor=new g.Color().setRGB(o[0],o[1],o[2],g.LinearSRGBColorSpace),Promise.all(n)}}class Fr{constructor(t){this.parser=t,this.name=w.KHR_MATERIALS_IOR}getMaterialType(t){const s=this.parser.json.materials[t];return!s.extensions||!s.extensions[this.name]?null:g.MeshPhysicalMaterial}extendMaterialParams(t,e){const A=this.parser.json.materials[t];if(!A.extensions||!A.extensions[this.name])return Promise.resolve();const n=A.extensions[this.name];return e.ior=n.ior!==void 0?n.ior:1.5,Promise.resolve()}}class Hr{constructor(t){this.parser=t,this.name=w.KHR_MATERIALS_SPECULAR}getMaterialType(t){const s=this.parser.json.materials[t];return!s.extensions||!s.extensions[this.name]?null:g.MeshPhysicalMaterial}extendMaterialParams(t,e){const s=this.parser,A=s.json.materials[t];if(!A.extensions||!A.extensions[this.name])return Promise.resolve();const n=[],a=A.extensions[this.name];e.specularIntensity=a.specularFactor!==void 0?a.specularFactor:1,a.specularTexture!==void 0&&n.push(s.assignTexture(e,"specularIntensityMap",a.specularTexture));const o=a.specularColorFactor||[1,1,1];return e.specularColor=new g.Color().setRGB(o[0],o[1],o[2],g.LinearSRGBColorSpace),a.specularColorTexture!==void 0&&n.push(s.assignTexture(e,"specularColorMap",a.specularColorTexture,g.SRGBColorSpace)),Promise.all(n)}}class Yr{constructor(t){this.parser=t,this.name=w.EXT_MATERIALS_BUMP}getMaterialType(t){const s=this.parser.json.materials[t];return!s.extensions||!s.extensions[this.name]?null:g.MeshPhysicalMaterial}extendMaterialParams(t,e){const s=this.parser,A=s.json.materials[t];if(!A.extensions||!A.extensions[this.name])return Promise.resolve();const n=[],a=A.extensions[this.name];return e.bumpScale=a.bumpFactor!==void 0?a.bumpFactor:1,a.bumpTexture!==void 0&&n.push(s.assignTexture(e,"bumpMap",a.bumpTexture)),Promise.all(n)}}class Ur{constructor(t){this.parser=t,this.name=w.KHR_MATERIALS_ANISOTROPY}getMaterialType(t){const s=this.parser.json.materials[t];return!s.extensions||!s.extensions[this.name]?null:g.MeshPhysicalMaterial}extendMaterialParams(t,e){const s=this.parser,A=s.json.materials[t];if(!A.extensions||!A.extensions[this.name])return Promise.resolve();const n=[],a=A.extensions[this.name];return a.anisotropyStrength!==void 0&&(e.anisotropy=a.anisotropyStrength),a.anisotropyRotation!==void 0&&(e.anisotropyRotation=a.anisotropyRotation),a.anisotropyTexture!==void 0&&n.push(s.assignTexture(e,"anisotropyMap",a.anisotropyTexture)),Promise.all(n)}}class Dr{constructor(t){this.parser=t,this.name=w.KHR_TEXTURE_BASISU}loadTexture(t){const e=this.parser,s=e.json,A=s.textures[t];if(!A.extensions||!A.extensions[this.name])return null;const n=A.extensions[this.name],a=e.options.ktx2Loader;if(!a){if(s.extensionsRequired&&s.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return e.loadTextureImage(t,n.source,a)}}class Jr{constructor(t){this.parser=t,this.name=w.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(t){const e=this.name,s=this.parser,A=s.json,n=A.textures[t];if(!n.extensions||!n.extensions[e])return null;const a=n.extensions[e],o=A.images[a.source];let r=s.textureLoader;if(o.uri){const l=s.options.manager.getHandler(o.uri);l!==null&&(r=l)}return this.detectSupport().then(function(l){if(l)return s.loadTextureImage(t,a.source,r);if(A.extensionsRequired&&A.extensionsRequired.indexOf(e)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return s.loadTexture(t)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(t){const e=new Image;e.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",e.onload=e.onerror=function(){t(e.height===1)}})),this.isSupported}}class vr{constructor(t){this.parser=t,this.name=w.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(t){const e=this.name,s=this.parser,A=s.json,n=A.textures[t];if(!n.extensions||!n.extensions[e])return null;const a=n.extensions[e],o=A.images[a.source];let r=s.textureLoader;if(o.uri){const l=s.options.manager.getHandler(o.uri);l!==null&&(r=l)}return this.detectSupport().then(function(l){if(l)return s.loadTextureImage(t,a.source,r);if(A.extensionsRequired&&A.extensionsRequired.indexOf(e)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return s.loadTexture(t)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(t){const e=new Image;e.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",e.onload=e.onerror=function(){t(e.height===1)}})),this.isSupported}}class _r{constructor(t){this.name=w.EXT_MESHOPT_COMPRESSION,this.parser=t}loadBufferView(t){const e=this.parser.json,s=e.bufferViews[t];if(s.extensions&&s.extensions[this.name]){const A=s.extensions[this.name],n=this.parser.getDependency("buffer",A.buffer),a=this.parser.options.meshoptDecoder;if(!a||!a.supported){if(e.extensionsRequired&&e.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 r=A.byteOffset||0,l=A.byteLength||0,c=A.count,h=A.byteStride,p=new Uint8Array(o,r,l);return a.decodeGltfBufferAsync?a.decodeGltfBufferAsync(c,h,p,A.mode,A.filter).then(function(u){return u.buffer}):a.ready.then(function(){const u=new ArrayBuffer(c*h);return a.decodeGltfBuffer(new Uint8Array(u),c,h,p,A.mode,A.filter),u})})}else return null}}class Pr{constructor(t){this.name=w.EXT_MESH_GPU_INSTANCING,this.parser=t}createNodeMesh(t){const e=this.parser.json,s=e.nodes[t];if(!s.extensions||!s.extensions[this.name]||s.mesh===void 0)return null;const A=e.meshes[s.mesh];for(const l of A.primitives)if(l.mode!==ce.TRIANGLES&&l.mode!==ce.TRIANGLE_STRIP&&l.mode!==ce.TRIANGLE_FAN&&l.mode!==void 0)return null;const a=s.extensions[this.name].attributes,o=[],r={};for(const l in a)o.push(this.parser.getDependency("accessor",a[l]).then(c=>(r[l]=c,r[l])));return o.length<1?null:(o.push(this.parser.createNodeMesh(t)),Promise.all(o).then(l=>{const c=l.pop(),h=c.isGroup?c.children:[c],p=l[0].count,u=[];for(const C of h){const b=new g.Matrix4,I=new g.Vector3,G=new g.Quaternion,f=new g.Vector3(1,1,1),X=new g.InstancedMesh(C.geometry,C.material,p);for(let m=0;m<p;m++)r.TRANSLATION&&I.fromBufferAttribute(r.TRANSLATION,m),r.ROTATION&&G.fromBufferAttribute(r.ROTATION,m),r.SCALE&&f.fromBufferAttribute(r.SCALE,m),X.setMatrixAt(m,b.compose(I,G,f));for(const m in r)if(m==="_COLOR_0"){const x=r[m];X.instanceColor=new g.InstancedBufferAttribute(x.array,x.itemSize,x.normalized)}else m!=="TRANSLATION"&&m!=="ROTATION"&&m!=="SCALE"&&C.geometry.setAttribute(m,r[m]);g.Object3D.prototype.copy.call(X,C),this.parser.assignFinalMaterial(X),u.push(X)}return c.isGroup?(c.clear(),c.add(...u),c):u[0]}))}}const cn="glTF",Zt=12,dn={JSON:1313821514,BIN:5130562};class Or{constructor(t){this.name=w.KHR_BINARY_GLTF,this.content=null,this.body=null;const e=new DataView(t,0,Zt),s=new TextDecoder;if(this.header={magic:s.decode(new Uint8Array(t.slice(0,4))),version:e.getUint32(4,!0),length:e.getUint32(8,!0)},this.header.magic!==cn)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const A=this.header.length-Zt,n=new DataView(t,Zt);let a=0;for(;a<A;){const o=n.getUint32(a,!0);a+=4;const r=n.getUint32(a,!0);if(a+=4,r===dn.JSON){const l=new Uint8Array(t,Zt+a,o);this.content=s.decode(l)}else if(r===dn.BIN){const l=Zt+a;this.body=t.slice(l,l+o)}a+=o}if(this.content===null)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class jr{constructor(t,e){if(!e)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=w.KHR_DRACO_MESH_COMPRESSION,this.json=t,this.dracoLoader=e,this.dracoLoader.preload()}decodePrimitive(t,e){const s=this.json,A=this.dracoLoader,n=t.extensions[this.name].bufferView,a=t.extensions[this.name].attributes,o={},r={},l={};for(const c in a){const h=qi[c]||c.toLowerCase();o[h]=a[c]}for(const c in t.attributes){const h=qi[c]||c.toLowerCase();if(a[c]!==void 0){const p=s.accessors[t.attributes[c]],u=rt[p.componentType];l[h]=u.name,r[h]=p.normalized===!0}}return e.getDependency("bufferView",n).then(function(c){return new Promise(function(h,p){A.decodeDracoFile(c,function(u){for(const C in u.attributes){const b=u.attributes[C],I=r[C];I!==void 0&&(b.normalized=I)}h(u)},o,l,g.LinearSRGBColorSpace,p)})})}}class qr{constructor(){this.name=w.KHR_TEXTURE_TRANSFORM}extendTexture(t,e){return(e.texCoord===void 0||e.texCoord===t.channel)&&e.offset===void 0&&e.rotation===void 0&&e.scale===void 0||(t=t.clone(),e.texCoord!==void 0&&(t.channel=e.texCoord),e.offset!==void 0&&t.offset.fromArray(e.offset),e.rotation!==void 0&&(t.rotation=e.rotation),e.scale!==void 0&&t.repeat.fromArray(e.scale),t.needsUpdate=!0),t}}class $r{constructor(){this.name=w.KHR_MESH_QUANTIZATION}}class hn extends g.Interpolant{constructor(t,e,s,A){super(t,e,s,A)}copySampleValue_(t){const e=this.resultBuffer,s=this.sampleValues,A=this.valueSize,n=t*A*3+A;for(let a=0;a!==A;a++)e[a]=s[n+a];return e}interpolate_(t,e,s,A){const n=this.resultBuffer,a=this.sampleValues,o=this.valueSize,r=o*2,l=o*3,c=A-e,h=(s-e)/c,p=h*h,u=p*h,C=t*l,b=C-l,I=-2*u+3*p,G=u-p,f=1-I,X=G-p+h;for(let m=0;m!==o;m++){const x=a[b+m+o],R=a[b+m+r]*c,B=a[C+m+o],M=a[C+m]*c;n[m]=f*x+X*R+I*B+G*M}return n}}const ec=new g.Quaternion;class tc extends hn{interpolate_(t,e,s,A){const n=super.interpolate_(t,e,s,A);return ec.fromArray(n).normalize().toArray(n),n}}const ce={FLOAT:5126,FLOAT_MAT3:35675,FLOAT_MAT4:35676,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,LINEAR:9729,REPEAT:10497,SAMPLER_2D:35678,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123},rt={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},un={9728:g.NearestFilter,9729:g.LinearFilter,9984:g.NearestMipmapNearestFilter,9985:g.LinearMipmapNearestFilter,9986:g.NearestMipmapLinearFilter,9987:g.LinearMipmapLinearFilter},gn={33071:g.ClampToEdgeWrapping,33648:g.MirroredRepeatWrapping,10497:g.RepeatWrapping},ji={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},qi={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"},ke={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},ic={CUBICSPLINE:void 0,LINEAR:g.InterpolateLinear,STEP:g.InterpolateDiscrete},$i={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};function sc(i){return i.DefaultMaterial===void 0&&(i.DefaultMaterial=new g.MeshStandardMaterial({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:g.FrontSide})),i.DefaultMaterial}function Pe(i,t,e){for(const s in e.extensions)i[s]===void 0&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[s]=e.extensions[s])}function Ee(i,t){t.extras!==void 0&&(typeof t.extras=="object"?Object.assign(i.userData,t.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+t.extras))}function Ac(i,t,e){let s=!1,A=!1,n=!1;for(let l=0,c=t.length;l<c;l++){const h=t[l];if(h.POSITION!==void 0&&(s=!0),h.NORMAL!==void 0&&(A=!0),h.COLOR_0!==void 0&&(n=!0),s&&A&&n)break}if(!s&&!A&&!n)return Promise.resolve(i);const a=[],o=[],r=[];for(let l=0,c=t.length;l<c;l++){const h=t[l];if(s){const p=h.POSITION!==void 0?e.getDependency("accessor",h.POSITION):i.attributes.position;a.push(p)}if(A){const p=h.NORMAL!==void 0?e.getDependency("accessor",h.NORMAL):i.attributes.normal;o.push(p)}if(n){const p=h.COLOR_0!==void 0?e.getDependency("accessor",h.COLOR_0):i.attributes.color;r.push(p)}}return Promise.all([Promise.all(a),Promise.all(o),Promise.all(r)]).then(function(l){const c=l[0],h=l[1],p=l[2];return s&&(i.morphAttributes.position=c),A&&(i.morphAttributes.normal=h),n&&(i.morphAttributes.color=p),i.morphTargetsRelative=!0,i})}function nc(i,t){if(i.updateMorphTargets(),t.weights!==void 0)for(let e=0,s=t.weights.length;e<s;e++)i.morphTargetInfluences[e]=t.weights[e];if(t.extras&&Array.isArray(t.extras.targetNames)){const e=t.extras.targetNames;if(i.morphTargetInfluences.length===e.length){i.morphTargetDictionary={};for(let s=0,A=e.length;s<A;s++)i.morphTargetDictionary[e[s]]=s}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function ac(i){let t;const e=i.extensions&&i.extensions[w.KHR_DRACO_MESH_COMPRESSION];if(e?t="draco:"+e.bufferView+":"+e.indices+":"+es(e.attributes):t=i.indices+":"+es(i.attributes)+":"+i.mode,i.targets!==void 0)for(let s=0,A=i.targets.length;s<A;s++)t+=":"+es(i.targets[s]);return t}function es(i){let t="";const e=Object.keys(i).sort();for(let s=0,A=e.length;s<A;s++)t+=e[s]+":"+i[e[s]]+";";return t}function ts(i){switch(i){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 oc(i){return i.search(/\.jpe?g($|\?)/i)>0||i.search(/^data\:image\/jpeg/)===0?"image/jpeg":i.search(/\.webp($|\?)/i)>0||i.search(/^data\:image\/webp/)===0?"image/webp":"image/png"}const lc=new g.Matrix4;class rc{constructor(t={},e={}){this.json=t,this.extensions={},this.plugins={},this.options=e,this.cache=new Mr,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 s=!1,A=-1,n=!1,a=-1;if(typeof navigator<"u"){const o=navigator.userAgent;s=/^((?!chrome|android).)*safari/i.test(o)===!0;const r=o.match(/Version\/(\d+)/);A=s&&r?parseInt(r[1],10):-1,n=o.indexOf("Firefox")>-1,a=n?o.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>"u"||s&&A<17||n&&a<98?this.textureLoader=new g.TextureLoader(this.options.manager):this.textureLoader=new g.ImageBitmapLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new g.FileLoader(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(t){this.extensions=t}setPlugins(t){this.plugins=t}parse(t,e){const s=this,A=this.json,n=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(a){return a._markDefs&&a._markDefs()}),Promise.all(this._invokeAll(function(a){return a.beforeRoot&&a.beforeRoot()})).then(function(){return Promise.all([s.getDependencies("scene"),s.getDependencies("animation"),s.getDependencies("camera")])}).then(function(a){const o={scene:a[0][A.scene||0],scenes:a[0],animations:a[1],cameras:a[2],asset:A.asset,parser:s,userData:{}};return Pe(n,o,A),Ee(o,A),Promise.all(s._invokeAll(function(r){return r.afterRoot&&r.afterRoot(o)})).then(function(){for(const r of o.scenes)r.updateMatrixWorld();t(o)})}).catch(e)}_markDefs(){const t=this.json.nodes||[],e=this.json.skins||[],s=this.json.meshes||[];for(let A=0,n=e.length;A<n;A++){const a=e[A].joints;for(let o=0,r=a.length;o<r;o++)t[a[o]].isBone=!0}for(let A=0,n=t.length;A<n;A++){const a=t[A];a.mesh!==void 0&&(this._addNodeRef(this.meshCache,a.mesh),a.skin!==void 0&&(s[a.mesh].isSkinnedMesh=!0)),a.camera!==void 0&&this._addNodeRef(this.cameraCache,a.camera)}}_addNodeRef(t,e){e!==void 0&&(t.refs[e]===void 0&&(t.refs[e]=t.uses[e]=0),t.refs[e]++)}_getNodeRef(t,e,s){if(t.refs[e]<=1)return s;const A=s.clone(),n=(a,o)=>{const r=this.associations.get(a);r!=null&&this.associations.set(o,r);for(const[l,c]of a.children.entries())n(c,o.children[l])};return n(s,A),A.name+="_instance_"+t.uses[e]++,A}_invokeOne(t){const e=Object.values(this.plugins);e.push(this);for(let s=0;s<e.length;s++){const A=t(e[s]);if(A)return A}return null}_invokeAll(t){const e=Object.values(this.plugins);e.unshift(this);const s=[];for(let A=0;A<e.length;A++){const n=t(e[A]);n&&s.push(n)}return s}getDependency(t,e){const s=t+":"+e;let A=this.cache.get(s);if(!A){switch(t){case"scene":A=this.loadScene(e);break;case"node":A=this._invokeOne(function(n){return n.loadNode&&n.loadNode(e)});break;case"mesh":A=this._invokeOne(function(n){return n.loadMesh&&n.loadMesh(e)});break;case"accessor":A=this.loadAccessor(e);break;case"bufferView":A=this._invokeOne(function(n){return n.loadBufferView&&n.loadBufferView(e)});break;case"buffer":A=this.loadBuffer(e);break;case"material":A=this._invokeOne(function(n){return n.loadMaterial&&n.loadMaterial(e)});break;case"texture":A=this._invokeOne(function(n){return n.loadTexture&&n.loadTexture(e)});break;case"skin":A=this.loadSkin(e);break;case"animation":A=this._invokeOne(function(n){return n.loadAnimation&&n.loadAnimation(e)});break;case"camera":A=this.loadCamera(e);break;default:if(A=this._invokeOne(function(n){return n!=this&&n.getDependency&&n.getDependency(t,e)}),!A)throw new Error("Unknown type: "+t);break}this.cache.add(s,A)}return A}getDependencies(t){let e=this.cache.get(t);if(!e){const s=this,A=this.json[t+(t==="mesh"?"es":"s")]||[];e=Promise.all(A.map(function(n,a){return s.getDependency(t,a)})),this.cache.add(t,e)}return e}loadBuffer(t){const e=this.json.buffers[t],s=this.fileLoader;if(e.type&&e.type!=="arraybuffer")throw new Error("THREE.GLTFLoader: "+e.type+" buffer type is not supported.");if(e.uri===void 0&&t===0)return Promise.resolve(this.extensions[w.KHR_BINARY_GLTF].body);const A=this.options;return new Promise(function(n,a){s.load(g.LoaderUtils.resolveURL(e.uri,A.path),n,void 0,function(){a(new Error('THREE.GLTFLoader: Failed to load buffer "'+e.uri+'".'))})})}loadBufferView(t){const e=this.json.bufferViews[t];return this.getDependency("buffer",e.buffer).then(function(s){const A=e.byteLength||0,n=e.byteOffset||0;return s.slice(n,n+A)})}loadAccessor(t){const e=this,s=this.json,A=this.json.accessors[t];if(A.bufferView===void 0&&A.sparse===void 0){const a=ji[A.type],o=rt[A.componentType],r=A.normalized===!0,l=new o(A.count*a);return Promise.resolve(new g.BufferAttribute(l,a,r))}const n=[];return A.bufferView!==void 0?n.push(this.getDependency("bufferView",A.bufferView)):n.push(null),A.sparse!==void 0&&(n.push(this.getDependency("bufferView",A.sparse.indices.bufferView)),n.push(this.getDependency("bufferView",A.sparse.values.bufferView))),Promise.all(n).then(function(a){const o=a[0],r=ji[A.type],l=rt[A.componentType],c=l.BYTES_PER_ELEMENT,h=c*r,p=A.byteOffset||0,u=A.bufferView!==void 0?s.bufferViews[A.bufferView].byteStride:void 0,C=A.normalized===!0;let b,I;if(u&&u!==h){const G=Math.floor(p/u),f="InterleavedBuffer:"+A.bufferView+":"+A.componentType+":"+G+":"+A.count;let X=e.cache.get(f);X||(b=new l(o,G*u,A.count*u/c),X=new g.InterleavedBuffer(b,u/c),e.cache.add(f,X)),I=new g.InterleavedBufferAttribute(X,r,p%u/c,C)}else o===null?b=new l(A.count*r):b=new l(o,p,A.count*r),I=new g.BufferAttribute(b,r,C);if(A.sparse!==void 0){const G=ji.SCALAR,f=rt[A.sparse.indices.componentType],X=A.sparse.indices.byteOffset||0,m=A.sparse.values.byteOffset||0,x=new f(a[1],X,A.sparse.count*G),R=new l(a[2],m,A.sparse.count*r);o!==null&&(I=new g.BufferAttribute(I.array.slice(),I.itemSize,I.normalized));for(let B=0,M=x.length;B<M;B++){const E=x[B];if(I.setX(E,R[B*r]),r>=2&&I.setY(E,R[B*r+1]),r>=3&&I.setZ(E,R[B*r+2]),r>=4&&I.setW(E,R[B*r+3]),r>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return I})}loadTexture(t){const e=this.json,s=this.options,n=e.textures[t].source,a=e.images[n];let o=this.textureLoader;if(a.uri){const r=s.manager.getHandler(a.uri);r!==null&&(o=r)}return this.loadTextureImage(t,n,o)}loadTextureImage(t,e,s){const A=this,n=this.json,a=n.textures[t],o=n.images[e],r=(o.uri||o.bufferView)+":"+a.sampler;if(this.textureCache[r])return this.textureCache[r];const l=this.loadImageSource(e,s).then(function(c){c.flipY=!1,c.name=a.name||o.name||"",c.name===""&&typeof o.uri=="string"&&o.uri.startsWith("data:image/")===!1&&(c.name=o.uri);const p=(n.samplers||{})[a.sampler]||{};return c.magFilter=un[p.magFilter]||g.LinearFilter,c.minFilter=un[p.minFilter]||g.LinearMipmapLinearFilter,c.wrapS=gn[p.wrapS]||g.RepeatWrapping,c.wrapT=gn[p.wrapT]||g.RepeatWrapping,A.associations.set(c,{textures:t}),c}).catch(function(){return null});return this.textureCache[r]=l,l}loadImageSource(t,e){const s=this,A=this.json,n=this.options;if(this.sourceCache[t]!==void 0)return this.sourceCache[t].then(h=>h.clone());const a=A.images[t],o=self.URL||self.webkitURL;let r=a.uri||"",l=!1;if(a.bufferView!==void 0)r=s.getDependency("bufferView",a.bufferView).then(function(h){l=!0;const p=new Blob([h],{type:a.mimeType});return r=o.createObjectURL(p),r});else if(a.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+t+" is missing URI and bufferView");const c=Promise.resolve(r).then(function(h){return new Promise(function(p,u){let C=p;e.isImageBitmapLoader===!0&&(C=function(b){const I=new g.Texture(b);I.needsUpdate=!0,p(I)}),e.load(g.LoaderUtils.resolveURL(h,n.path),C,void 0,u)})}).then(function(h){return l===!0&&o.revokeObjectURL(r),Ee(h,a),h.userData.mimeType=a.mimeType||oc(a.uri),h}).catch(function(h){throw console.error("THREE.GLTFLoader: Couldn't load texture",r),h});return this.sourceCache[t]=c,c}assignTexture(t,e,s,A){const n=this;return this.getDependency("texture",s.index).then(function(a){if(!a)return null;if(s.texCoord!==void 0&&s.texCoord>0&&(a=a.clone(),a.channel=s.texCoord),n.extensions[w.KHR_TEXTURE_TRANSFORM]){const o=s.extensions!==void 0?s.extensions[w.KHR_TEXTURE_TRANSFORM]:void 0;if(o){const r=n.associations.get(a);a=n.extensions[w.KHR_TEXTURE_TRANSFORM].extendTexture(a,o),n.associations.set(a,r)}}return A!==void 0&&(a.colorSpace=A),t[e]=a,a})}assignFinalMaterial(t){const e=t.geometry;let s=t.material;const A=e.attributes.tangent===void 0,n=e.attributes.color!==void 0,a=e.attributes.normal===void 0;if(t.isPoints){const o="PointsMaterial:"+s.uuid;let r=this.cache.get(o);r||(r=new g.PointsMaterial,g.Material.prototype.copy.call(r,s),r.color.copy(s.color),r.map=s.map,r.sizeAttenuation=!1,this.cache.add(o,r)),s=r}else if(t.isLine){const o="LineBasicMaterial:"+s.uuid;let r=this.cache.get(o);r||(r=new g.LineBasicMaterial,g.Material.prototype.copy.call(r,s),r.color.copy(s.color),r.map=s.map,this.cache.add(o,r)),s=r}if(A||n||a){let o="ClonedMaterial:"+s.uuid+":";A&&(o+="derivative-tangents:"),n&&(o+="vertex-colors:"),a&&(o+="flat-shading:");let r=this.cache.get(o);r||(r=s.clone(),n&&(r.vertexColors=!0),a&&(r.flatShading=!0),A&&(r.normalScale&&(r.normalScale.y*=-1),r.clearcoatNormalScale&&(r.clearcoatNormalScale.y*=-1)),this.cache.add(o,r),this.associations.set(r,this.associations.get(s))),s=r}t.material=s}getMaterialType(){return g.MeshStandardMaterial}loadMaterial(t){const e=this,s=this.json,A=this.extensions,n=s.materials[t];let a;const o={},r=n.extensions||{},l=[];if(r[w.KHR_MATERIALS_UNLIT]){const h=A[w.KHR_MATERIALS_UNLIT];a=h.getMaterialType(),l.push(h.extendParams(o,n,e))}else{const h=n.pbrMetallicRoughness||{};if(o.color=new g.Color(1,1,1),o.opacity=1,Array.isArray(h.baseColorFactor)){const p=h.baseColorFactor;o.color.setRGB(p[0],p[1],p[2],g.LinearSRGBColorSpace),o.opacity=p[3]}h.baseColorTexture!==void 0&&l.push(e.assignTexture(o,"map",h.baseColorTexture,g.SRGBColorSpace)),o.metalness=h.metallicFactor!==void 0?h.metallicFactor:1,o.roughness=h.roughnessFactor!==void 0?h.roughnessFactor:1,h.metallicRoughnessTexture!==void 0&&(l.push(e.assignTexture(o,"metalnessMap",h.metallicRoughnessTexture)),l.push(e.assignTexture(o,"roughnessMap",h.metallicRoughnessTexture))),a=this._invokeOne(function(p){return p.getMaterialType&&p.getMaterialType(t)}),l.push(Promise.all(this._invokeAll(function(p){return p.extendMaterialParams&&p.extendMaterialParams(t,o)})))}n.doubleSided===!0&&(o.side=g.DoubleSide);const c=n.alphaMode||$i.OPAQUE;if(c===$i.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,c===$i.MASK&&(o.alphaTest=n.alphaCutoff!==void 0?n.alphaCutoff:.5)),n.normalTexture!==void 0&&a!==g.MeshBasicMaterial&&(l.push(e.assignTexture(o,"normalMap",n.normalTexture)),o.normalScale=new g.Vector2(1,1),n.normalTexture.scale!==void 0)){const h=n.normalTexture.scale;o.normalScale.set(h,h)}if(n.occlusionTexture!==void 0&&a!==g.MeshBasicMaterial&&(l.push(e.assignTexture(o,"aoMap",n.occlusionTexture)),n.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=n.occlusionTexture.strength)),n.emissiveFactor!==void 0&&a!==g.MeshBasicMaterial){const h=n.emissiveFactor;o.emissive=new g.Color().setRGB(h[0],h[1],h[2],g.LinearSRGBColorSpace)}return n.emissiveTexture!==void 0&&a!==g.MeshBasicMaterial&&l.push(e.assignTexture(o,"emissiveMap",n.emissiveTexture,g.SRGBColorSpace)),Promise.all(l).then(function(){const h=new a(o);return n.name&&(h.name=n.name),Ee(h,n),e.associations.set(h,{materials:t}),n.extensions&&Pe(A,h,n),h})}createUniqueName(t){const e=g.PropertyBinding.sanitizeNodeName(t||"");return e in this.nodeNamesUsed?e+"_"+ ++this.nodeNamesUsed[e]:(this.nodeNamesUsed[e]=0,e)}loadGeometries(t){const e=this,s=this.extensions,A=this.primitiveCache;function n(o){return s[w.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(o,e).then(function(r){return pn(r,o,e)})}const a=[];for(let o=0,r=t.length;o<r;o++){const l=t[o],c=ac(l),h=A[c];if(h)a.push(h.promise);else{let p;l.extensions&&l.extensions[w.KHR_DRACO_MESH_COMPRESSION]?p=n(l):p=pn(new g.BufferGeometry,l,e),A[c]={primitive:l,promise:p},a.push(p)}}return Promise.all(a)}loadMesh(t){const e=this,s=this.json,A=this.extensions,n=s.meshes[t],a=n.primitives,o=[];for(let r=0,l=a.length;r<l;r++){const c=a[r].material===void 0?sc(this.cache):this.getDependency("material",a[r].material);o.push(c)}return o.push(e.loadGeometries(a)),Promise.all(o).then(function(r){const l=r.slice(0,r.length-1),c=r[r.length-1],h=[];for(let u=0,C=c.length;u<C;u++){const b=c[u],I=a[u];let G;const f=l[u];if(I.mode===ce.TRIANGLES||I.mode===ce.TRIANGLE_STRIP||I.mode===ce.TRIANGLE_FAN||I.mode===void 0)G=n.isSkinnedMesh===!0?new g.SkinnedMesh(b,f):new g.Mesh(b,f),G.isSkinnedMesh===!0&&G.normalizeSkinWeights(),I.mode===ce.TRIANGLE_STRIP?G.geometry=rn(G.geometry,g.TriangleStripDrawMode):I.mode===ce.TRIANGLE_FAN&&(G.geometry=rn(G.geometry,g.TriangleFanDrawMode));else if(I.mode===ce.LINES)G=new g.LineSegments(b,f);else if(I.mode===ce.LINE_STRIP)G=new g.Line(b,f);else if(I.mode===ce.LINE_LOOP)G=new g.LineLoop(b,f);else if(I.mode===ce.POINTS)G=new g.Points(b,f);else throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+I.mode);Object.keys(G.geometry.morphAttributes).length>0&&nc(G,n),G.name=e.createUniqueName(n.name||"mesh_"+t),Ee(G,n),I.extensions&&Pe(A,G,I),e.assignFinalMaterial(G),h.push(G)}for(let u=0,C=h.length;u<C;u++)e.associations.set(h[u],{meshes:t,primitives:u});if(h.length===1)return n.extensions&&Pe(A,h[0],n),h[0];const p=new g.Group;n.extensions&&Pe(A,p,n),e.associations.set(p,{meshes:t});for(let u=0,C=h.length;u<C;u++)p.add(h[u]);return p})}loadCamera(t){let e;const s=this.json.cameras[t],A=s[s.type];if(!A){console.warn("THREE.GLTFLoader: Missing camera parameters.");return}return s.type==="perspective"?e=new g.PerspectiveCamera(g.MathUtils.radToDeg(A.yfov),A.aspectRatio||1,A.znear||1,A.zfar||2e6):s.type==="orthographic"&&(e=new g.OrthographicCamera(-A.xmag,A.xmag,A.ymag,-A.ymag,A.znear,A.zfar)),s.name&&(e.name=this.createUniqueName(s.name)),Ee(e,s),Promise.resolve(e)}loadSkin(t){const e=this.json.skins[t],s=[];for(let A=0,n=e.joints.length;A<n;A++)s.push(this._loadNodeShallow(e.joints[A]));return e.inverseBindMatrices!==void 0?s.push(this.getDependency("accessor",e.inverseBindMatrices)):s.push(null),Promise.all(s).then(function(A){const n=A.pop(),a=A,o=[],r=[];for(let l=0,c=a.length;l<c;l++){const h=a[l];if(h){o.push(h);const p=new g.Matrix4;n!==null&&p.fromArray(n.array,l*16),r.push(p)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',e.joints[l])}return new g.Skeleton(o,r)})}loadAnimation(t){const e=this.json,s=this,A=e.animations[t],n=A.name?A.name:"animation_"+t,a=[],o=[],r=[],l=[],c=[];for(let h=0,p=A.channels.length;h<p;h++){const u=A.channels[h],C=A.samplers[u.sampler],b=u.target,I=b.node,G=A.parameters!==void 0?A.parameters[C.input]:C.input,f=A.parameters!==void 0?A.parameters[C.output]:C.output;b.node!==void 0&&(a.push(this.getDependency("node",I)),o.push(this.getDependency("accessor",G)),r.push(this.getDependency("accessor",f)),l.push(C),c.push(b))}return Promise.all([Promise.all(a),Promise.all(o),Promise.all(r),Promise.all(l),Promise.all(c)]).then(function(h){const p=h[0],u=h[1],C=h[2],b=h[3],I=h[4],G=[];for(let f=0,X=p.length;f<X;f++){const m=p[f],x=u[f],R=C[f],B=b[f],M=I[f];if(m===void 0)continue;m.updateMatrix&&m.updateMatrix();const E=s._createAnimationTracks(m,x,R,B,M);if(E)for(let Q=0;Q<E.length;Q++)G.push(E[Q])}return new g.AnimationClip(n,void 0,G)})}createNodeMesh(t){const e=this.json,s=this,A=e.nodes[t];return A.mesh===void 0?null:s.getDependency("mesh",A.mesh).then(function(n){const a=s._getNodeRef(s.meshCache,A.mesh,n);return A.weights!==void 0&&a.traverse(function(o){if(o.isMesh)for(let r=0,l=A.weights.length;r<l;r++)o.morphTargetInfluences[r]=A.weights[r]}),a})}loadNode(t){const e=this.json,s=this,A=e.nodes[t],n=s._loadNodeShallow(t),a=[],o=A.children||[];for(let l=0,c=o.length;l<c;l++)a.push(s.getDependency("node",o[l]));const r=A.skin===void 0?Promise.resolve(null):s.getDependency("skin",A.skin);return Promise.all([n,Promise.all(a),r]).then(function(l){const c=l[0],h=l[1],p=l[2];p!==null&&c.traverse(function(u){u.isSkinnedMesh&&u.bind(p,lc)});for(let u=0,C=h.length;u<C;u++)c.add(h[u]);return c})}_loadNodeShallow(t){const e=this.json,s=this.extensions,A=this;if(this.nodeCache[t]!==void 0)return this.nodeCache[t];const n=e.nodes[t],a=n.name?A.createUniqueName(n.name):"",o=[],r=A._invokeOne(function(l){return l.createNodeMesh&&l.createNodeMesh(t)});return r&&o.push(r),n.camera!==void 0&&o.push(A.getDependency("camera",n.camera).then(function(l){return A._getNodeRef(A.cameraCache,n.camera,l)})),A._invokeAll(function(l){return l.createNodeAttachment&&l.createNodeAttachment(t)}).forEach(function(l){o.push(l)}),this.nodeCache[t]=Promise.all(o).then(function(l){let c;if(n.isBone===!0?c=new g.Bone:l.length>1?c=new g.Group:l.length===1?c=l[0]:c=new g.Object3D,c!==l[0])for(let h=0,p=l.length;h<p;h++)c.add(l[h]);if(n.name&&(c.userData.name=n.name,c.name=a),Ee(c,n),n.extensions&&Pe(s,c,n),n.matrix!==void 0){const h=new g.Matrix4;h.fromArray(n.matrix),c.applyMatrix4(h)}else n.translation!==void 0&&c.position.fromArray(n.translation),n.rotation!==void 0&&c.quaternion.fromArray(n.rotation),n.scale!==void 0&&c.scale.fromArray(n.scale);return A.associations.has(c)||A.associations.set(c,{}),A.associations.get(c).nodes=t,c}),this.nodeCache[t]}loadScene(t){const e=this.extensions,s=this.json.scenes[t],A=this,n=new g.Group;s.name&&(n.name=A.createUniqueName(s.name)),Ee(n,s),s.extensions&&Pe(e,n,s);const a=s.nodes||[],o=[];for(let r=0,l=a.length;r<l;r++)o.push(A.getDependency("node",a[r]));return Promise.all(o).then(function(r){for(let c=0,h=r.length;c<h;c++)n.add(r[c]);const l=c=>{const h=new Map;for(const[p,u]of A.associations)(p instanceof g.Material||p instanceof g.Texture)&&h.set(p,u);return c.traverse(p=>{const u=A.associations.get(p);u!=null&&h.set(p,u)}),h};return A.associations=l(n),n})}_createAnimationTracks(t,e,s,A,n){const a=[],o=t.name?t.name:t.uuid,r=[];ke[n.path]===ke.weights?t.traverse(function(p){p.morphTargetInfluences&&r.push(p.name?p.name:p.uuid)}):r.push(o);let l;switch(ke[n.path]){case ke.weights:l=g.NumberKeyframeTrack;break;case ke.rotation:l=g.QuaternionKeyframeTrack;break;case ke.position:case ke.scale:l=g.VectorKeyframeTrack;break;default:switch(s.itemSize){case 1:l=g.NumberKeyframeTrack;break;case 2:case 3:default:l=g.VectorKeyframeTrack;break}break}const c=A.interpolation!==void 0?ic[A.interpolation]:g.InterpolateLinear,h=this._getArrayFromAccessor(s);for(let p=0,u=r.length;p<u;p++){const C=new l(r[p]+"."+ke[n.path],e.array,h,c);A.interpolation==="CUBICSPLINE"&&this._createCubicSplineTrackInterpolant(C),a.push(C)}return a}_getArrayFromAccessor(t){let e=t.array;if(t.normalized){const s=ts(e.constructor),A=new Float32Array(e.length);for(let n=0,a=e.length;n<a;n++)A[n]=e[n]*s;e=A}return e}_createCubicSplineTrackInterpolant(t){t.createInterpolant=function(s){const A=this instanceof g.QuaternionKeyframeTrack?tc:hn;return new A(this.times,this.values,this.getValueSize()/3,s)},t.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function cc(i,t,e){const s=t.attributes,A=new g.Box3;if(s.POSITION!==void 0){const o=e.json.accessors[s.POSITION],r=o.min,l=o.max;if(r!==void 0&&l!==void 0){if(A.set(new g.Vector3(r[0],r[1],r[2]),new g.Vector3(l[0],l[1],l[2])),o.normalized){const c=ts(rt[o.componentType]);A.min.multiplyScalar(c),A.max.multiplyScalar(c)}}else{console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");return}}else return;const n=t.targets;if(n!==void 0){const o=new g.Vector3,r=new g.Vector3;for(let l=0,c=n.length;l<c;l++){const h=n[l];if(h.POSITION!==void 0){const p=e.json.accessors[h.POSITION],u=p.min,C=p.max;if(u!==void 0&&C!==void 0){if(r.setX(Math.max(Math.abs(u[0]),Math.abs(C[0]))),r.setY(Math.max(Math.abs(u[1]),Math.abs(C[1]))),r.setZ(Math.max(Math.abs(u[2]),Math.abs(C[2]))),p.normalized){const b=ts(rt[p.componentType]);r.multiplyScalar(b)}o.max(r)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}A.expandByVector(o)}i.boundingBox=A;const a=new g.Sphere;A.getCenter(a.center),a.radius=A.min.distanceTo(A.max)/2,i.boundingSphere=a}function pn(i,t,e){const s=t.attributes,A=[];function n(a,o){return e.getDependency("accessor",a).then(function(r){i.setAttribute(o,r)})}for(const a in s){const o=qi[a]||a.toLowerCase();o in i.attributes||A.push(n(s[a],o))}if(t.indices!==void 0&&!i.index){const a=e.getDependency("accessor",t.indices).then(function(o){i.setIndex(o)});A.push(a)}return g.ColorManagement.workingColorSpace!==g.LinearSRGBColorSpace&&"COLOR_0"in s&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${g.ColorManagement.workingColorSpace}" not supported.`),Ee(i,t),cc(i,t,e),Promise.all(A).then(function(){return t.targets!==void 0?Ac(i,t.targets,e):i})}const v=qt;(function(i,t){const e=qt,s=i();for(;;)try{if(parseInt(e(314))/1*(-parseInt(e(297))/2)+-parseInt(e(277))/3*(-parseInt(e(265))/4)+parseInt(e(266))/5*(-parseInt(e(269))/6)+-parseInt(e(294))/7*(parseInt(e(279))/8)+-parseInt(e(309))/9+parseInt(e(295))/10*(parseInt(e(305))/11)+-parseInt(e(303))/12*(-parseInt(e(304))/13)===t)break;s.push(s.shift())}catch{s.push(s.shift())}})($t,895561);const dc={BASE_URL:"/",DEV:!1,MODE:v(282),PROD:!0,SSR:!1,VITE_BASE_URL:"",VITE_SHARED_ASSETS_PATH:v(293)};function qt(i,t){const e=$t();return qt=function(s,A){return s=s-263,e[s]},qt(i,t)}function $t(){const i=["instance","play","_instance","load","Clock","removeLoadingModel","sceneGroup","constructor","/assets","2166584Wficft","995460LTKMli","numModels","2770VOgpsR","cameraTarget","2.4.6","animationMixer","set","camera","19137108sJvmtP","26qMhoct","55vUHCBF","addModel","onModelLoaded","showLoadingModel","4081464LYmjlb","stream.viverse.com","addLoadingModel","getWorldPosition","clipAction","593VDdzjm","scene","clock","remove","AnimationMixer","Unable to load loading model: ","1206440awRlVZ","31970peeLsS","add","getDelta","1416cMeruC","animations","threejs","sharedAssetsUrl","removeModel","position","1726657673733","/viverse-symbol-anim.glb","3ABasjF","update","8loQurW","distanceTo","streamController","public","isModelLoaded","loadingModel"];return $t=function(){return i},$t()}const hc=new L.Vector3;class Cn{constructor(t,e,s,A,n){d(this,wn);d(this,Zn,!1);d(this,Mn);d(this,Sn);d(this,Rn);d(this,En);d(this,Ln);d(this,Qn);const a=v;this[a(302)]=t,this[a(315)]=s,this[a(298)]=A;const o={version:a(299),variant:a(271),build:a(275),s3Domain:a(310)};this[a(281)]=new zi(t,new Rr(e,s),n??{},-1,dc,o),se[a(285)][a(308)]&&this[a(311)]()}[(Wn=v(287),wn=v(281),Zn=v(283),Mn=v(284),Sn=v(302),Rn=v(315),En=v(298),Ln=v(300),Qn=v(316),v(278))](){const t=v;this.streamController[t(278)](),this[t(300)]&&this[t(316)]&&this[t(300)][t(278)](this[t(316)][t(268)]())}async addModel(t,e,s){const A=v,n=s??{};n.pathOrUrl=t,n[A(291)]=e,n[A(307)]=()=>{const a=A;se[a(285)][a(308)]&&this[a(290)]()},await this[A(281)][A(306)](n)}[v(273)](t,e=!1,s){const A=v;this[A(281)][A(273)](t,e,s),e&&this.streamController[A(296)]===0&&(this[A(292)][A(287)]=null)}[v(311)](){const t=v;if(this[t(283)])return;new Sr()[t(288)](se.instance[t(272)]+t(276),s=>{const A=t,n=this[A(302)][A(312)](hc)[A(280)](this[A(298)]),a=n*.009;this[A(284)]=s[A(315)],this[A(284)].scale[A(301)](a,a,a),this[A(284)][A(274)][A(301)](0,.4,0),this[A(316)]=new L[A(289)],this.animationMixer=new L[A(263)](s[A(315)]),this[A(300)][A(313)](s[A(270)][0])[A(286)](),this[A(315)][A(267)](this[A(284)])},void 0,s=>{console.error(t(264)+s)})}[v(290)](){const t=v;this[t(283)]=!0,this.loadingModel!=null&&(this[t(315)][t(317)](this.loadingModel),this[t(284)]=null,this[t(300)]=null)}}d(Cn,Wn);function is(i,t){var e=ei();return is=function(s,A){s=s-102;var n=e[s];return n},is(i,t)}(function(i,t){for(var e=is,s=i();;)try{var A=parseInt(e(106))/1+parseInt(e(102))/2*(-parseInt(e(107))/3)+parseInt(e(108))/4*(-parseInt(e(111))/5)+parseInt(e(112))/6*(parseInt(e(104))/7)+parseInt(e(113))/8*(parseInt(e(109))/9)+parseInt(e(105))/10*(-parseInt(e(103))/11)+parseInt(e(110))/12*(parseInt(e(114))/13);if(A===t)break;s.push(s.shift())}catch{s.push(s.shift())}})(ei,714504);function ei(){var i=["2gzDuIh","1379510hXYGno","1570289MTGKNE","60pHfeAa","1178247xwzFJg","2923290LvErDr","30292XLHcZW","1251UXATVQ","2676192erJPcg","595wtzcub","18RNxmKZ","21656AERiaR","65KRRZkI"];return ei=function(){return i},ei()}ne.StreamController=Cn,Object.defineProperty(ne,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(dt,C){typeof exports=="object"&&typeof module<"u"?C(exports,require("three")):typeof define=="function"&&define.amd?define(["exports","three"],C):C((dt=typeof globalThis<"u"?globalThis:dt||self)["polygon-streaming"]={},dt.THREE)})(this,function(dt,C){"use strict";var cm=Object.defineProperty;var um=(dt,C,Te)=>C in dt?cm(dt,C,{enumerable:!0,configurable:!0,writable:!0,value:Te}):dt[C]=Te;var g=(dt,C,Te)=>um(dt,typeof C!="symbol"?C+"":C,Te);var Il,Cl,Bl,yl,El,wl,xl,Ql,Ml,bl,Sl,_l,Gl;function Te(n){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const e in n)if(e!=="default"){const i=Object.getOwnPropertyDescriptor(n,e);Object.defineProperty(t,e,i.get?i:{enumerable:!0,get:()=>n[e]})}}return t.default=n,Object.freeze(t)}const _=Te(C);function st(n,t){return Math.abs(n-t)<=Number.EPSILON}const De={DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,clamp:(n,t,e)=>n>=e?e:n<=t?t:n,intToBytes24:n=>[n>>16&255,n>>8&255,255&n],intToBytes32:n=>[n>>24&255,n>>16&255,n>>8&255,255&n],bytesToInt24:(n,t,e)=>(n.length&&(e=n[2],t=n[1],n=n[0]),n<<16|t<<8|e),bytesToInt32:(n,t,e,i)=>(n.length&&(i=n[3],e=n[2],t=n[1],n=n[0]),(n<<24|t<<16|e<<8|i)>>>0),lerp:(n,t,e)=>n+(t-n)*De.clamp(e,0,1),lerpAngle:(n,t,e)=>(t-n>180&&(t-=360),t-n<-180&&(t+=360),De.lerp(n,t,De.clamp(e,0,1))),powerOfTwo:n=>n!==0&&!(n&n-1),nextPowerOfTwo:n=>(n--,n|=n>>1,n|=n>>2,n|=n>>4,n|=n>>8,n|=n>>16,++n),nearestPowerOfTwo:n=>Math.pow(2,Math.round(Math.log2(n))),random(n,t){const e=t-n;return Math.random()*e+n},smoothstep:(n,t,e)=>e<=n?0:e>=t?1:(e=(e-n)/(t-n))*e*(3-2*e),smootherstep:(n,t,e)=>e<=n?0:e>=t?1:(e=(e-n)/(t-n))*e*e*(e*(6*e-15)+10),roundUp:(n,t)=>t===0?n:Math.ceil(n/t)*t,between(n,t,e,i){const s=Math.min(t,e),r=Math.max(t,e);return i?n>=s&&n<=r:n>s&&n<r}},et=class et{constructor(t=0,e=0,i=0){t.length===3?(this.x=t[0],this.y=t[1],this.z=t[2]):(this.x=t,this.y=e,this.z=i)}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}add2(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addScaled(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}cross(t,e){const i=t.x,s=t.y,r=t.z,o=e.x,a=e.y,A=e.z;return this.x=s*A-a*r,this.y=r*o-A*i,this.z=i*a-o*s,this}distance(t){const e=this.x-t.x,i=this.y-t.y,s=this.z-t.z;return Math.sqrt(e*e+i*i+s*s)}div(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}div2(t,e){return this.x=t.x/e.x,this.y=t.y/e.y,this.z=t.z/e.z,this}divScalar(t){return this.x/=t,this.y/=t,this.z/=t,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}equals(t){return this.x===t.x&&this.y===t.y&&this.z===t.z}equalsApprox(t,e=1e-6){return Math.abs(this.x-t.x)<e&&Math.abs(this.y-t.y)<e&&Math.abs(this.z-t.z)<e}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}lerp(t,e,i){return this.x=t.x+i*(e.x-t.x),this.y=t.y+i*(e.y-t.y),this.z=t.z+i*(e.z-t.z),this}mul(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}mul2(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}mulScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}normalize(t=this){const e=t.x*t.x+t.y*t.y+t.z*t.z;if(e>0){const i=1/Math.sqrt(e);this.x=t.x*i,this.y=t.y*i,this.z=t.z*i}return this}floor(t=this){return this.x=Math.floor(t.x),this.y=Math.floor(t.y),this.z=Math.floor(t.z),this}ceil(t=this){return this.x=Math.ceil(t.x),this.y=Math.ceil(t.y),this.z=Math.ceil(t.z),this}round(t=this){return this.x=Math.round(t.x),this.y=Math.round(t.y),this.z=Math.round(t.z),this}min(t){return t.x<this.x&&(this.x=t.x),t.y<this.y&&(this.y=t.y),t.z<this.z&&(this.z=t.z),this}max(t){return t.x>this.x&&(this.x=t.x),t.y>this.y&&(this.y=t.y),t.z>this.z&&(this.z=t.z),this}project(t){const e=(this.x*t.x+this.y*t.y+this.z*t.z)/(t.x*t.x+t.y*t.y+t.z*t.z);return this.x=t.x*e,this.y=t.y*e,this.z=t.z*e,this}set(t,e,i){return this.x=t,this.y=e,this.z=i,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}sub2(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}fromArray(t,e=0){return this.x=t[e]??this.x,this.y=t[e+1]??this.y,this.z=t[e+2]??this.z,this}toString(){return`[${this.x}, ${this.y}, ${this.z}]`}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}};et.ZERO=Object.freeze(new et(0,0,0)),et.HALF=Object.freeze(new et(.5,.5,.5)),et.ONE=Object.freeze(new et(1,1,1)),et.UP=Object.freeze(new et(0,1,0)),et.DOWN=Object.freeze(new et(0,-1,0)),et.RIGHT=Object.freeze(new et(1,0,0)),et.LEFT=Object.freeze(new et(-1,0,0)),et.FORWARD=Object.freeze(new et(0,0,-1)),et.BACK=Object.freeze(new et(0,0,1));let Si=et;const ht=class ht{constructor(t=0,e=0){t.length===2?(this.x=t[0],this.y=t[1]):(this.x=t,this.y=e)}add(t){return this.x+=t.x,this.y+=t.y,this}add2(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addScaled(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}cross(t){return this.x*t.y-this.y*t.x}distance(t){const e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)}div(t){return this.x/=t.x,this.y/=t.y,this}div2(t,e){return this.x=t.x/e.x,this.y=t.y/e.y,this}divScalar(t){return this.x/=t,this.y/=t,this}dot(t){return this.x*t.x+this.y*t.y}equals(t){return this.x===t.x&&this.y===t.y}equalsApprox(t,e=1e-6){return Math.abs(this.x-t.x)<e&&Math.abs(this.y-t.y)<e}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}lengthSq(){return this.x*this.x+this.y*this.y}lerp(t,e,i){return this.x=t.x+i*(e.x-t.x),this.y=t.y+i*(e.y-t.y),this}mul(t){return this.x*=t.x,this.y*=t.y,this}mul2(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this}mulScalar(t){return this.x*=t,this.y*=t,this}normalize(t=this){const e=t.x*t.x+t.y*t.y;if(e>0){const i=1/Math.sqrt(e);this.x=t.x*i,this.y=t.y*i}return this}rotate(t){const e=Math.atan2(this.x,this.y)+t*De.DEG_TO_RAD,i=Math.sqrt(this.x*this.x+this.y*this.y);return this.x=Math.sin(e)*i,this.y=Math.cos(e)*i,this}angle(){return Math.atan2(this.x,this.y)*De.RAD_TO_DEG}angleTo(t){return Math.atan2(this.x*t.y+this.y*t.x,this.x*t.x+this.y*t.y)*De.RAD_TO_DEG}floor(t=this){return this.x=Math.floor(t.x),this.y=Math.floor(t.y),this}ceil(t=this){return this.x=Math.ceil(t.x),this.y=Math.ceil(t.y),this}round(t=this){return this.x=Math.round(t.x),this.y=Math.round(t.y),this}min(t){return t.x<this.x&&(this.x=t.x),t.y<this.y&&(this.y=t.y),this}max(t){return t.x>this.x&&(this.x=t.x),t.y>this.y&&(this.y=t.y),this}set(t,e){return this.x=t,this.y=e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}sub2(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}subScalar(t){return this.x-=t,this.y-=t,this}fromArray(t,e=0){return this.x=t[e]??this.x,this.y=t[e+1]??this.y,this}toString(){return`[${this.x}, ${this.y}]`}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}static angleRad(t,e){return Math.atan2(t.x*e.y-t.y*e.x,t.x*e.x+t.y*e.y)}};ht.ZERO=Object.freeze(new ht(0,0)),ht.HALF=Object.freeze(new ht(.5,.5)),ht.ONE=Object.freeze(new ht(1,1)),ht.UP=Object.freeze(new ht(0,1)),ht.DOWN=Object.freeze(new ht(0,-1)),ht.RIGHT=Object.freeze(new ht(1,0)),ht.LEFT=Object.freeze(new ht(-1,0));let _i=ht,P=class vt{constructor(t=0,e=0,i=0){g(this,"x");g(this,"y");g(this,"z");typeof t=="number"?(this.x=t,this.y=e,this.z=i):(this.x=t.x,this.y=t.y,this.z=t.z)}static fromArray(t){return t==null?null:new vt(t[0],t[1],t[2])}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}static add(t,e){return new vt(t.x+e.x,t.y+e.y,t.z+e.z)}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}static sub(t,e){return new vt(t.x-e.x,t.y-e.y,t.z-e.z)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}static subScalar(t,e){return new vt(t.x-e,t.y-e,t.z-e)}mul(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}static mul(t,e){return new vt(t.x*e.x,t.y*e.y,t.z*e.z)}mulScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}static mulScalar(t,e){return new vt(t.x*e,t.y*e,t.z*e)}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}static dot(t,e){return t.x*e.x+t.y*e.y+t.z*e.z}cross(t){return this.x=this.y*t.z-t.y*this.z,this.y=this.z*t.x-t.z*this.x,this.z=this.x*t.y-t.x*this.y,this}static cross(t,e){return new vt(t.y*e.z-e.y*t.z,t.z*e.x-e.z*t.x,t.x*e.y-e.x*t.y)}div(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}static div(t,e){return new vt(t.x/e.x,t.y/e.y,t.z/e.z)}divScalar(t){return this.x/=t,this.y/=t,this.z/=t,this}static divScalar(t,e){return new vt(t.x/e,t.y/e,t.z/e)}normalize(){const t=this.lengthSq();if(t>0){const e=1/Math.sqrt(t);this.x*=e,this.y*=e,this.z*=e}return this}static normalize(t){const e=t.x*t.x+t.y*t.y+t.z*t.z;if(e>0){const i=1/Math.sqrt(e);t.x*=i,t.y*=i,t.z*=i}return t}lerp(t,e,i){return this.x=t.x+i*(e.x-t.x),this.y=t.y+i*(e.y-t.y),this.z=t.z+i*(e.z-t.z),this}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}static length(t){return Math.sqrt(t.x*t.x+t.y*t.y+t.z*t.z)}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}static lengthSq(t){return t.x*t.x+t.y*t.y+t.z*t.z}distance(t){const e=this.x-t.x,i=this.y-t.y,s=this.z-t.z;return Math.sqrt(e*e+i*i+s*s)}static distance(t,e){const i=t.x-e.x,s=t.y-e.y,r=t.z-e.z;return Math.sqrt(i*i+s*s+r*r)}distanceSq(t){const e=this.x-t.x,i=this.y-t.y,s=this.z-t.z;return e*e+i*i+s*s}static distanceSq(t,e){const i=t.x-e.x,s=t.y-e.y,r=t.z-e.z;return i*i+s*s+r*r}clone(){return new vt(this.x,this.y,this.z)}static clone(t){return new vt(t.x,t.y,t.z)}set(t,e,i){return typeof t=="number"?(this.x=t,this.y=e,this.z=i):(this.x=t.x,this.y=t.y,this.z=t.z),this}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}equals(t,e=!1){return e?st(this.x,t.x)&&st(this.y,t.y)&&st(this.z,t.z):this.x===t.x&&this.y===t.y&&this.z===t.z}static equals(t,e,i=!1){return i?st(t.x,e.x)&&st(t.y,e.y)&&st(t.z,e.z):t.x===e.x&&t.y===e.y&&t.z===e.z}toString(){return`${this.x}, ${this.y}, ${this.z}`}static toString(t){return`${t.x}, ${t.y}, ${t.z}`}toPlayCanvasVector(t=new Si){return t.set(this.x,this.y,this.z),t}};class ke{constructor(t,e){g(this,"normal");g(this,"distance");this.normal=t?new P(t):new P,this.distance=e??0}setNormal(t){this.normal instanceof P?this.normal.set(t):this.normal=new P(t)}}var Gi=(n=>(n.Mesh="mesh",n.BoundingBox="boundingBox",n))(Gi||{}),je=(n=>(n.NonPlayer="nonPlayer",n.Player="player",n))(je||{}),xr=(n=>(n[n.Custom=0]="Custom",n[n.PlayCanvas=1]="PlayCanvas",n[n.ThreeJs=2]="ThreeJs",n[n.BabylonJs=3]="BabylonJs",n))(xr||{}),Bt=(n=>(n[n.Refine=0]="Refine",n[n.Simplify=1]="Simplify",n[n.SwapLod=2]="SwapLod",n[n.Add=3]="Add",n[n.Remove=4]="Remove",n))(Bt||{}),$t=(n=>(n[n.Opaque=0]="Opaque",n[n.Transparent=1]="Transparent",n[n.Cutoff=2]="Cutoff",n))($t||{}),Li=(n=>(n[n.Default=0]="Default",n[n.SwizzleGGGR=1]="SwizzleGGGR",n))(Li||{}),Nn=(n=>(n[n.None=0]="None",n[n.DistanceToCamera=1]="DistanceToCamera",n[n.Depth=2]="Depth",n[n.DepthAndMaxDepth=3]="DepthAndMaxDepth",n[n.PerceivedTriangleDensity=4]="PerceivedTriangleDensity",n[n.TriangleDensity=5]="TriangleDensity",n[n.Nodes=6]="Nodes",n[n.Normal=7]="Normal",n))(Nn||{}),vi=(n=>(n[n.Development=0]="Development",n[n.DevRemote=1]="DevRemote",n[n.Staging=2]="Staging",n[n.Production=3]="Production",n[n.Viverse=4]="Viverse",n[n.Viewer=5]="Viewer",n[n.EditorExtension=6]="EditorExtension",n[n.Downloadable=7]="Downloadable",n[n.Public=8]="Public",n[n.Core=9]="Core",n))(vi||{}),Mt=(n=>(n[n.Geometry=0]="Geometry",n[n.Transforms=1]="Transforms",n))(Mt||{}),Fn=(n=>(n[n.WebGl1=0]="WebGl1",n[n.WebGl2=1]="WebGl2",n[n.WebGpu=2]="WebGpu",n))(Fn||{});const vl=/\$\(([^()]*)\)/g,Rl=/\${([^{}]*)}/g;function Qr(n,t){return t?` ${n}`:""}function Un(n,t=!0,e=0){if(!+n)return`0${Qr("B",t)}`;const i=e<0?0:e,s=Math.floor(Math.log(n)/Math.log(1024));return`${parseFloat((n/Math.pow(1024,s)).toFixed(i))}${Qr(["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"][s],t)}`}function gt(n,t=0){if(n==null)return"null";if(t===-1){let e=n.toString();const i=e.split(".");let s=null;if(i.length===2){const r=function(o){for(let a=0;a<o.length;a++)if(o.substring(a,a+1)!=="0")return a;return-1}(i[1]);r>0&&r!==i[1].length-1?s=i[1].substring(0,r+1):r===0&&i[1].substring(0,1)!=="0"&&(s=i[1].substring(0,1))}return s!=null?`${i[0]}.${s}`:e}return n.toLocaleString("en-IE",{maximumFractionDigits:t})}const Ri={r:1,g:1,b:1,a:1},Tl=Math.pow(15,2),Mr=75e4,br="0.0.6",Sr="psNode",_r="bounding-box",Gr="cpuTaskDuration",Lr="cpuTaskTimestamp",vr="cpuTaskVersion";let Dl;Dl=!0;function Pn(n,t){return n<<t|n>>>32-t}function tt(n,t){const e=2147483648&n,i=2147483648&t,s=1073741824&n,r=1073741824&t,o=(1073741823&n)+(1073741823&t);return s&r?2147483648^o^e^i:s|r?1073741824&o?3221225472^o^e^i:1073741824^o^e^i:o^e^i}function Rr(n){const t=localStorage.getItem(n);if(t!=null){const e=parseInt(t);if(!Number.isNaN(e))return e}return null}function Ti(n){let t=0,e=0,i=0;try{const s=(n??"0.0.0").split(".");t=parseInt(s[0],10)||0,e=parseInt(s[1],10)||0,i=parseInt(s[2],10)||0}catch{}return[t,e,i]}function zn(n,t){return n[0]!==t[0]?n[0]>t[0]:n[1]!==t[1]?n[1]>t[1]:n[2]>=t[2]}function Di(n,t){var s;const e=((s=n==null?void 0:n.lods)==null?void 0:s.length)??0;if(e===0||t==="best")return 0;if(t==="worst"||t==null)return e-1;const i=Math.floor(t);return Math.max(0,Math.min(i,e-1))}function Tr(n,t){const e=n.split("."),i=t.split(".");for(let s=0;s<Math.min(e.length,i.length);s++){const r=parseInt(e[s]),o=parseInt(i[s]);if(r<o)return-1;if(r>o)return 1}return 0}let kl;kl=5;const Nl=6048e5;let ki,Ni,Fi,Ui,Pi,zi;function Xi(){if(Ni==null){let t=!1;n=navigator.userAgent||navigator.vendor||window.opera,(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(n)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(n.substr(0,4)))&&(t=!0),!t&&function(){if(ki==null){let i=!1;((e=navigator.userAgent||navigator.vendor||window.opera).includes("vr")||e.includes("VR"))&&(i=!0),ki=i}var e;return ki}()&&(t=!0),Ni=t}var n;return Ni}function Zi(){return Fi==null&&(Fi=["iPad Simulator","iPhone Simulator","iPod Simulator","iPad","iPhone","iPod"].includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document),Fi}class G{constructor(t,e,i,s,r,o,a){g(this,"name");g(this,"id");g(this,"ram");g(this,"dpr");g(this,"res");g(this,"ua");g(this,"cpu");g(this,"limit");g(this,"_ctd");this.name=t,this.ram=e,this.dpr=i,this.res=s,this.ua=r,this.cpu=o,this.limit=a}get ctd(){if(this._ctd===void 0)if(this.cpu){const t=(Ui==null&&(Ui={A13:{ctd:42.3},A14:{ctd:36.2},A14Pro:{ctd:36.8},A15:{ctd:34},A15Pro:{ctd:33.8},A16:{ctd:31.4},A16Pro:{ctd:28.2},A18:{ctd:23.1},A18Pro:{ctd:23.1},M1:{ctd:33.9}}),Ui)[this.cpu];t&&(this._ctd=t.ctd)}else this._ctd=null;return this._ctd}}let Dr,Hi=null;async function Fl(){if(Hi==null){let n=[],t=window.devicePixelRatio,e=`${window.screen.width}x${window.screen.height}`,i=navigator.userAgent;const s=[],r=new Map,o=(Pi==null&&(Pi={iPhone:new G("iPhone",.125,1,"320x480","iPhone","S5L8900"),iPhone3G:new G("iPhone 3G",.125,1,"320x480","iPhone",""),iPhone3GS:new G("iPhone 3GS",.25,1,"320x480","iPhone","S5L8920"),iPhone4:new G("iPhone 4",.5,2,"320x480","iPhone","A4"),iPhone4s:new G("iPhone 4S",.5,2,"320x480","iPhone","A5"),iPhone5:new G("iPhone 5",1,2,"320x568","iPhone","A6"),iPhone5c:new G("iPhone 5C",1,2,"320x568","iPhone","A6"),iPhone5s:new G("iPhone 5S",1,2,"320x568","iPhone","A7"),iPhoneSe1stGen:new G("iPhone SE 1st Gen",2,2,"320x568","iPhone","A9"),iPhone6:new G("iPhone 6",1,2,"375x667","iPhone","A8"),iPhone6Plus:new G("iPhone 6 Plus",1,3,"360x640","iPhone","A8"),iPhone6s:new G("iPhone 6S",2,2,"375x667","iPhone","A9"),iPhone6sPlus:new G("iPhone 6S Plus",2,3,"414x736","iPhone","A9"),iPhone7:new G("iPhone 7",2,2,"375x667","iPhone","A10"),iPhone7Plus:new G("iPhone 7 Plus",3,3,"414x736","iPhone","A10"),iPhone8:new G("iPhone 8",2,2,"375x667","iPhone","A11"),iPhone8Plus:new G("iPhone 8 Plus",3,3,"414x736","iPhone","A11"),iPhoneX:new G("iPhone X",3,3,"375x812","iPhone","A11"),iPhoneXR:new G("iPhone XR",3,2,"414x896","iPhone","A12"),iPhoneXS:new G("iPhone XS",4,3,"375x812","iPhone","A12"),iPhoneXSMax:new G("iPhone XS Max",4,3,"414x896","iPhone","A12"),iPhone11:new G("iPhone 11",4,2,"414x896","iPhone","A13"),iPhone11Pro:new G("iPhone 11 Pro",4,3,"375x812","iPhone","A13Pro"),iPhone11ProMax:new G("iPhone 11 Pro Max",4,3,"414x896","iPhone","A13Pro"),iPhoneSe2ndGen:new G("iPhone SE 2nd Gen",3,2,"375x667","iPhone","A13"),iPhone12:new G("iPhone 12",4,3,"390x844","iPhone","A14"),iPhone12Mini:new G("iPhone 12 Mini",4,3,"375x812","iPhone","A14"),iPhone12Pro:new G("iPhone 12 Pro",6,3,"390x844","iPhone","A14Pro"),iPhone12ProMax:new G("iPhone 12 Pro Max",6,3,"428x926","iPhone","A14Pro"),iPhone13:new G("iPhone 13",4,3,"390x844","iPhone","A15"),iPhone13Mini:new G("iPhone 13 Mini",4,3,"375x812","iPhone","A15"),iPhone13Pro:new G("iPhone 13 Pro",6,3,"390x844","iPhone","A15Pro"),iPhone13ProMax:new G("iPhone 13 Pro Max",6,3,"428x926","iPhone","A15Pro"),iPhoneSe3rdGen:new G("iPhone SE 3rd Gen",6,2,"375x667","iPhone","A15"),iPhone14:new G("iPhone 14",6,3,"390x844","iPhone","A15"),iPhone14Plus:new G("iPhone 14 Plus",6,3,"428x926","iPhone","A15"),iPhone14Pro:new G("iPhone 14 Pro",6,3,"393x852","iPhone","A15Pro"),iPhone14ProMax:new G("iPhone 14 Pro Max",6,3,"430x932","iPhone","A15Pro"),iPhone15:new G("iPhone 15",6,3,"393x852","iPhone","A16"),iPhone15Plus:new G("iPhone 15 Plus",6,3,"420x932","iPhone","A16"),iPhone15Pro:new G("iPhone 15 Pro",8,3,"393x852","iPhone","A16Pro"),iPhone15ProMax:new G("iPhone 15 Pro Max",8,3,"430x932","iPhone","A16Pro"),iPhone16:new G("iPhone 16",8,3,"440x956","iPhone","A18"),iPhone16Plus:new G("iPhone 16 Plus",8,3,"430x932","iPhone","A18"),iPhone16e:new G("iPhone 16E",8,3,"390x844","iPhone","A18"),iPhone16Pro:new G("iPhone 16 Pro",8,3,"402x874","iPhone","A18Pro"),iPhone16ProMax:new G("iPhone 16 Pro Max",8,3,"440x956","iPhone","A18Pro"),iPodTouch1stGen:new G("iPod Touch 1st Gen",.125,1,"320x480","iPod","S5L8900"),iPodTouch2ndGen:new G("iPod Touch 2nd Gen",.125,1,"320x480","iPod","S5L8720"),iPodTouch3rdGen:new G("iPod Touch 3rd Gen",.25,1,"320x480","iPod","S5L8922"),iPodTouch4thGen:new G("iPod Touch 4th Gen",.25,2,"320x480","iPod","A4"),iPodTouch5thGen:new G("iPod Touch 5th Gen",.5,2,"320x568","iPod","A5"),iPodTouch6thGen:new G("iPod Touch 6th Gen",1,2,"320x568","iPod","A8"),iPodTouch7thGen:new G("iPod Touch 7th Gen",2,2,"320x568","iPod","A10"),iPad1stGen:new G("iPad 1st Gen",.25,1,"768x1024","iPad,Intel Mac","A4"),iPad2ndGen:new G("iPad 2nd Gen",.5,1,"768x1024","iPad,Intel Mac","A5"),iPad3rdGen:new G("iPad 3rd Gen",1,2,"768x1024","iPad,Intel Mac","A5X"),iPad4thGen:new G("iPad 4th Gen",1,2,"768x1024","iPad,Intel Mac","A6X"),iPad5thGen:new G("iPad 5th Gen",2,2,"768x1024","iPad,Intel Mac","A9"),iPad6thGen:new G("iPad 6th Gen",2,2,"768x1024","iPad,Intel Mac","A10"),iPad7thGen:new G("iPad 7th Gen",3,2,"810x1080","iPad,Intel Mac","A10"),iPad8thGen:new G("iPad 8th Gen",3,2,"810x1080","iPad,Intel Mac","A12"),iPad9thGen:new G("iPad 9th Gen",3,2,"810x1080","iPad,Intel Mac","A13"),iPad10thGen:new G("iPad 10th Gen",4,2,"820x1180","iPad,Intel Mac","A14"),iPadMini1stGen:new G("iPad Mini 1st Gen",.5,1,"768x1024","iPad,Intel Mac","A5"),iPadMini2ndGen:new G("iPad Mini 2nd Gen",1,2,"768x1024","iPad,Intel Mac","A7"),iPadMini3rdGen:new G("iPad Mini 3rd Gen",1,2,"768x1024","iPad,Intel Mac","A7"),iPadMini4thGen:new G("iPad Mini 4th Gen",2,2,"768x1024","iPad,Intel Mac","A8"),iPadMini5thGen:new G("iPad Mini 5th Gen",3,2,"768x1024","iPad,Intel Mac","A12"),iPadMini6thGen:new G("iPad Mini 6th Gen",4,2,"744x1133","iPad,Intel Mac","A15"),iPadMini7thGen:new G("iPad Mini 7th Gen",8,2,"744x1133","iPad,Intel Mac","A17Pro"),iPadAir1stGen:new G("iPad Air 1st Gen",1,2,"768x1024","iPad,Intel Mac","A7"),iPadAir2ndGen:new G("iPad Air 2nd Gen",2,2,"768x1024","iPad,Intel Mac","A8X"),iPadAir3rdGen:new G("iPad Air 3rd Gen",3,2,"834x1112","iPad,Intel Mac","A12"),iPadAir4thGen:new G("iPad Air 4th Gen",4,2,"820x1180","iPad,Intel Mac","A14"),iPadAir5thGen:new G("iPad Air 5th Gen",8,2,"820x1180","iPad,Intel Mac","M1"),iPadAir6thGen11:new G('iPad Air 6th Gen 11"',8,2,"820x1180","iPad,Intel Mac","M2"),iPadAir6thGen13:new G('iPad Air 6th Gen 13"',8,2,"1024x1366","iPad,Intel Mac","M2"),"iPadPro1stGen9.7":new G('iPad Pro 1st Gen 9.7"',2,2,"768x1024","iPad,Intel Mac","A9X"),"iPadPro1stGen12.9":new G('iPad Pro 1st Gen 12.9"',2,2,"1024x1366","iPad,Intel Mac","A9X"),"iPadPro2ndGen10.5":new G('iPad Pro 2nd Gen 10.5"',4,2,"834x1112","iPad,Intel Mac","A10X"),"iPadPro2ndGen12.9":new G('iPad Pro 2nd Gen 12.9"',4,2,"1024x1366","iPad,Intel Mac","A10X"),iPadPro3rdGen11:new G('iPad Pro 3rd Gen 11"n',8,2,"834x1194","iPad,Intel Mac","A12X"),"iPadPro3rdGen12.9":new G('iPad Pro 3rd Gen 12.9"',6,2,"1024x1366","iPad,Intel Mac","A12X"),iPadPro4thGen11:new G('iPad Pro 4th Gen 11"',6,2,"834x1194","iPad,Intel Mac","A12Z"),"iPadPro4thGen12.9":new G('iPad Pro 4th Gen 12.9"',6,2,"1024x1366","iPad,Intel Mac","A12Z"),iPadPro5thGen11:new G('iPad Pro 5th Gen 11"',8,2,"834x1194","iPad,Intel Mac","M1"),"iPadPro5thGen12.9":new G('iPad Pro 5th Gen 12.9"',8,2,"1024x1366","iPad,Intel Mac","M1"),iPadPro6thGen11:new G('iPad Pro 6th Gen 11"',8,2,"834x1194","iPad,Intel Mac","M2"),"iPadPro6thGen12.9":new G('iPad Pro 6th Gen 12.9"',8,2,"1024x1366","iPad,Intel Mac","M2"),iPadPro7thGen11:new G('iPad Pro 7th Gen 11"',8,2,"834x1210","iPad,Intel Mac","M4"),iPadPro7thGen13:new G('iPad Pro 7th Gen 13"',8,2,"1024x1376","iPad,Intel Mac","M4")}),Pi);for(const d in o){const u=o[d];u.id=d;let p=0;if(u.dpr){if(t!==u.dpr)continue;p++}if(u.res){if(e!==u.res)continue;p++}if(u.ua){let I=!1;const f=u.ua.split(",");for(const m of f)if(i.indexOf(m)!==-1){I=!0,p++;break}if(!I)continue}p>0&&(s.push(u),r.set(d,p))}s.sort((d,u)=>r.get(u.id)-r.get(d.id));let a=null;for(const d of s){const u=r.get(d.id);if(a!=null&&u!==a)break;n.push(d),a=u}let A={duration:-1,range:-1};const l=function(d){const u=d.map(f=>f.ram),p=Math.min(...u),I=Math.max(...u);return[p,I]}(n),h=l[1]-l[0],c=n.some(d=>d.name.toLowerCase().indexOf("pro")!==-1);if(n.length>1&&n.some(d=>d.ctd!=null)&&(h>0||c)&&(A=await async function(){if(Rr(vr)===1){const u=Rr(Lr);if(u!=null&&Date.now()-u<Nl){const p=function(I){const f=localStorage.getItem(I);if(f!=null){const m=parseFloat(f);if(!Number.isNaN(m))return m}return null}(Gr);if(p!=null)return{duration:p,range:-1}}}const d=await async function(){const u=[];return new Promise(p=>{setTimeout(kr,100,u,p)})}();return Nr(d)&&(localStorage.setItem(Gr,d.duration.toString()),localStorage.setItem(Lr,Date.now().toString()),localStorage.setItem(vr,"1")),d}(),Nr(A))){const d=n.filter(u=>u.ctd==null||Math.abs(u.ctd-A.duration)<=2);d.length>0&&(n=d)}Hi=n,Dr=A}return[Hi,Dr]}let Ne=null;async function Ul(){if(Ne==null){const[n]=await Fl();if(n.length>0)if(n.every(t=>t.limit!=null)){const t=n.map(i=>i.limit);Ne=Math.min(...t)}else{const t=n.every(r=>r.name.toLowerCase().indexOf("pro")!==-1),e=n.map(r=>r.ram),i=Math.min(...e),s=(zi==null&&(zi=[{ram:8,limit:700,proLimit:-1},{ram:6,limit:525,proLimit:650},{ram:4,limit:300},{ram:1,limit:300}]),zi);for(const r of s)if(i>=r.ram){Ne=t&&r.proLimit!=null?r.proLimit:r.limit;break}}Ne==null&&(Ne=425)}return Ne}function kr(n,t){const e=Date.now();if(function(i){Fr(i).filter(Pl).pop()}(1e12),n.push(Date.now()-e),n.length===5){const i=n.reduce((r,o)=>r+o,0)/n.length,s=Math.min(...n);t({duration:i,range:Math.max(...n)-s})}else setTimeout(kr,100,n,t)}function Nr(n){return n.range<=4&&n.duration<=50}function Fr(n){let t;const e=[],i=Math.sqrt(n);for(t=2;t<=i;t++)n%t===0&&e.push(t);return e}function Pl(n){return Fr(n).length===0}function Ur(n){return n.endsWith("/")?n.substring(0,n.length-1):n}function Xn(n,t,e,i,s){const r=new URLSearchParams(window.location.search);let o;for(const a of n)if(o=r.get(a),o!=null)break;if(o!=null){if(o.indexOf(",")!==-1){const a=Xi()?1:0;o=o.split(",")[a]}if(o==="desktop")return t;if(o!==""){const a=i(o);if(a!=null&&s(a))return a}}return e!==void 0&&Xi()?e:t}function te(n,t,e){return Xn(n,t,e,i=>parseFloat(i),i=>!isNaN(i))}function Zn(n,t,e){return Xn(n,t,e,i=>i==="true"||i!=="false"&&null,i=>i===!0||i===!1)}function zl(n,t,e,i){return function(s,r){return r[Object.keys(r)[Object.values(r).indexOf(s)]]}(Xn(n,t,i,s=>s,s=>Object.values(e).includes(s)),e)}const Xl={BASE_URL:"/",DEV:!1,MODE:"public",PROD:!0,SSR:!1,VITE_BASE_URL:"",VITE_SHARED_ASSETS_PATH:"/assets"},bi=class bi{constructor(t=Xl,e={version:"2.7.3",variant:"threejs",build:"1772707372872",s3Domain:"stream.viverse.com"}){g(this,"type");g(this,"toggleColliderVisualization",!0);g(this,"baseUrl");g(this,"sharedAssetsUrl");g(this,"registerServiceWorker",!0);g(this,"serviceWorkerSuffix");g(this,"sendTrafficRecord",!0);g(this,"unsetTrafficMaxSize",104857600);g(this,"sendTrafficPeriod",60);g(this,"showLoadingModel",!0);g(this,"version");g(this,"variant");g(this,"isMinimizeCpuMode",!1);g(this,"envBuildVars");g(this,"trafficApiUrl","https://stream.viverse.com/management/traffics");g(this,"trackedModelUrlPrefix","https://stream.viverse.com/polygon_file");g(this,"textureLodPolicy","coverage");g(this,"textureLodScaleFactor",1.6);g(this,"logInitialModelDataLoaded",!1);g(this,"logRootFiles",!1);g(this,"logOperations",!1);g(this,"logAllOperations",!1);g(this,"logIndividualOperations",!1);g(this,"logOperationNodes",!1);g(this,"logInitialTrees",!1);g(this,"logOptimalTree",!1);g(this,"logCurrentTree",!1);g(this,"logOptions",!1);g(this,"logNumHiddenNodes",!1);g(this,"logTextureLods",!1);g(this,"showNodeInfo",!1);g(this,"showNodeInfoOverlay",!0);g(this,"showNodeMaterialInfo",!1);g(this,"showDistancePoint",!0);g(this,"useDebugMaterial",!1);g(this,"showBoundingBoxes",!1);g(this,"boundingBoxesWireframeOnly",!1);g(this,"showOverlay",!1);g(this,"showDebugInfo",!1);g(this,"visualizeOperation",!1);g(this,"renderWireframe",!1);g(this,"visualizeBoundingSphere",!1);g(this,"colliderOpacity",.3);g(this,"visualizationType",Nn.None);g(this,"showSkeletons",!1);g(this,"highlightInstancedMeshes",!1);g(this,"skipVisualizationTypes",[Nn.PerceivedTriangleDensity,Nn.TriangleDensity]);this.type=vi.Public,this.version=e.version,this.variant=e.variant;const i={VERSION:e.version,VARIANT:e.variant,S3_DOMAIN:e.s3Domain};var s,r,o;this.baseUrl=t.VITE_BASE_URL!=null&&t.VITE_BASE_URL.trim().length>0?Ur(function(a,A,l=!0){const h=l?vl:Rl;return a.replace(h,(c,d)=>{const u=A[d];return u!==void 0?u:c})}((s=t.VITE_BASE_URL).endsWith("/")?s:`${s}/`,i)):"",this.sharedAssetsUrl=this.baseUrl.length>0?Ur((r=t.VITE_SHARED_ASSETS_PATH,o=this.baseUrl,new URL(r,o).href)):t.VITE_SHARED_ASSETS_PATH,t.VITE_SHOW_LOADING_MODEL!=null&&(this.showLoadingModel=t.VITE_SHOW_LOADING_MODEL==="true"),t.VITE_REGISTER_SERVICE_WORKER!=null&&(this.registerServiceWorker=t.VITE_REGISTER_SERVICE_WORKER==="true"),t.VITE_TOGGLE_COLLIDER_VISUALIZATION!=null&&(this.toggleColliderVisualization=t.VITE_TOGGLE_COLLIDER_VISUALIZATION==="true"),t.VITE_SEND_TRAFFIC_RECORD!=="false"&&location.host!=="create-dev.viverse.com"||(this.sendTrafficRecord=!1),t.VITE_UNSENT_TRAFFIC_MAX_SIZE!=null&&(this.unsetTrafficMaxSize=parseInt(t.VITE_UNSENT_TRAFFIC_MAX_SIZE)),t.VITE_SEND_TRAFFIC_PERIOD!=null&&(this.sendTrafficPeriod=parseInt(t.VITE_SEND_TRAFFIC_PERIOD)),this.showLoadingModel=!0,typeof window<"u"&&(this.registerServiceWorker=Zn(["sw","service-worker"],this.registerServiceWorker),this.toggleColliderVisualization=Zn(["cv","collider-visualization"],this.toggleColliderVisualization),console.log(`Polygon Streaming web player: version: ${e.version}, variant: ${e.variant}, build: ${e.build}`),this.registerServiceWorker&&"serviceWorker"in navigator&&navigator.serviceWorker.register(this.getServiceWorkerUrl(e)).then(a=>{console.log("Polygon Streaming service worker registration successful with scope: ",a.scope)},a=>{console.error(`Unable to register Polygon Streaming service worker: ${a}`)}))}static get instance(){return this._instance===void 0&&console.error("Env needs to be initialized with initInstance() first"),this._instance}static initInstance(t,e){return this._instance==null&&(this._instance=new bi(t,e)),this._instance}logProperties(){console.log(`Env properties for environment ${vi[this.type]}:`);const t=Object.getOwnPropertyNames(this);t.sort();for(const e of t)this.hasOwnProperty(e)&&e!=="type"&&console.log(` ${e}: ${this[e]}`)}getServiceWorkerUrl(t){return`/service-worker${this.serviceWorkerSuffix!=null?`-${this.serviceWorkerSuffix}`:""}.js?${t.build}`}};g(bi,"_instance");let Y=bi;var Fe=(n=>(n[n.NotLoaded=0]="NotLoaded",n[n.Loading=1]="Loading",n[n.Available=2]="Available",n))(Fe||{});class Zl{constructor(t,e){g(this,"state");g(this,"size");g(this,"fileName");g(this,"refCount");g(this,"texture");g(this,"queue");g(this,"renderer");g(this,"disposed");g(this,"pendingAutoDispose",!1);g(this,"disposeTimer");this.fileName=t,this.renderer=e,this.state=0,this.refCount=0,this.queue=[],this.size=0,this.disposed=!1}async createTexture(t,e){if(!this.disposed){if(this.state===1)await this.waitUntilLoaded();else if(this.state===0){this.state=1;const i=!!this.fileName.endsWith("ktx2"),s=await new Promise(r=>{setTimeout(()=>{r(new Blob([t.buffer]))},0)});if(this.disposed)return void(this.state=0);if(this.texture=i?await this.renderer.createKtxTexture(this.fileName,s):await this.renderer.createTexture(this.fileName,s,e),this.disposed)return this.renderer.disposeTexture(this.texture),this.texture=void 0,this.state=0,void this.releaseSemaphore();this.state=2,this.size=this.renderer.getTextureSizeInBytes(this.texture),this.disposeTimer&&(clearTimeout(this.disposeTimer),this.disposeTimer=void 0),this.pendingAutoDispose&&(this.renderer.disposeTexture(this.texture),this.texture=void 0,this.state=0,this.size=0,this.pendingAutoDispose=!1),this.releaseSemaphore()}return this.texture}}async waitUntilLoaded(){if(this.state===1&&await new Promise(t=>this.queue.push(t))===null)return null}releaseSemaphore(){if(this.disposed){console.warn("Texture was disposed while loading");for(const t of this.queue)t(null);this.state=0}else{this.state=2;for(const t of this.queue)t(this.texture)}}loadTexture(){return this.texture}getFileName(){return this.fileName}getGpuTexture(){return this.texture}addCount(){this.disposeTimer&&(clearTimeout(this.disposeTimer),this.disposeTimer=void 0),this.refCount++}release(){return this.state===1?(this.refCount=0,this.pendingAutoDispose=!0,!0):this.state!==2?(this.refCount=0,this.state=0,!1):--this.refCount<=0&&(this.refCount=0,this.disposeTimer=setTimeout(()=>{this.refCount===0&&this.state===2&&(this.state=0,this.texture&&(this.renderer.disposeTexture(this.texture),this.texture=void 0)),this.disposeTimer=void 0},2e3),!0)}dispose(){this.state===2&&(this.state=0,this.refCount=0,this.texture&&(this.renderer.disposeTexture(this.texture),this.texture=void 0,this.size=0))}}/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */function Ue(n){let t=n.length;for(;--t>=0;)n[t]=0}const Ki=256,Pr=286,$e=30,tn=15,Wi=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),Hn=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),Hl=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),zr=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Ht=new Array(576);Ue(Ht);const en=new Array(60);Ue(en);const nn=new Array(512);Ue(nn);const sn=new Array(256);Ue(sn);const Oi=new Array(29);Ue(Oi);const Kn=new Array($e);function Yi(n,t,e,i,s){this.static_tree=n,this.extra_bits=t,this.extra_base=e,this.elems=i,this.max_length=s,this.has_stree=n&&n.length}let Xr,Zr,Hr;function Vi(n,t){this.dyn_tree=n,this.max_code=0,this.stat_desc=t}Ue(Kn);const Kr=n=>n<256?nn[n]:nn[256+(n>>>7)],rn=(n,t)=>{n.pending_buf[n.pending++]=255&t,n.pending_buf[n.pending++]=t>>>8&255},pt=(n,t,e)=>{n.bi_valid>16-e?(n.bi_buf|=t<<n.bi_valid&65535,rn(n,n.bi_buf),n.bi_buf=t>>16-n.bi_valid,n.bi_valid+=e-16):(n.bi_buf|=t<<n.bi_valid&65535,n.bi_valid+=e)},Nt=(n,t,e)=>{pt(n,e[2*t],e[2*t+1])},Wr=(n,t)=>{let e=0;do e|=1&n,n>>>=1,e<<=1;while(--t>0);return e>>>1},Or=(n,t,e)=>{const i=new Array(16);let s,r,o=0;for(s=1;s<=tn;s++)o=o+e[s-1]<<1,i[s]=o;for(r=0;r<=t;r++){let a=n[2*r+1];a!==0&&(n[2*r]=Wr(i[a]++,a))}},Yr=n=>{let t;for(t=0;t<Pr;t++)n.dyn_ltree[2*t]=0;for(t=0;t<$e;t++)n.dyn_dtree[2*t]=0;for(t=0;t<19;t++)n.bl_tree[2*t]=0;n.dyn_ltree[512]=1,n.opt_len=n.static_len=0,n.sym_next=n.matches=0},Vr=n=>{n.bi_valid>8?rn(n,n.bi_buf):n.bi_valid>0&&(n.pending_buf[n.pending++]=n.bi_buf),n.bi_buf=0,n.bi_valid=0},Jr=(n,t,e,i)=>{const s=2*t,r=2*e;return n[s]<n[r]||n[s]===n[r]&&i[t]<=i[e]},Ji=(n,t,e)=>{const i=n.heap[e];let s=e<<1;for(;s<=n.heap_len&&(s<n.heap_len&&Jr(t,n.heap[s+1],n.heap[s],n.depth)&&s++,!Jr(t,i,n.heap[s],n.depth));)n.heap[e]=n.heap[s],e=s,s<<=1;n.heap[e]=i},qr=(n,t,e)=>{let i,s,r,o,a=0;if(n.sym_next!==0)do i=255&n.pending_buf[n.sym_buf+a++],i+=(255&n.pending_buf[n.sym_buf+a++])<<8,s=n.pending_buf[n.sym_buf+a++],i===0?Nt(n,s,t):(r=sn[s],Nt(n,r+Ki+1,t),o=Wi[r],o!==0&&(s-=Oi[r],pt(n,s,o)),i--,r=Kr(i),Nt(n,r,e),o=Hn[r],o!==0&&(i-=Kn[r],pt(n,i,o)));while(a<n.sym_next);Nt(n,256,t)},qi=(n,t)=>{const e=t.dyn_tree,i=t.stat_desc.static_tree,s=t.stat_desc.has_stree,r=t.stat_desc.elems;let o,a,A,l=-1;for(n.heap_len=0,n.heap_max=573,o=0;o<r;o++)e[2*o]!==0?(n.heap[++n.heap_len]=l=o,n.depth[o]=0):e[2*o+1]=0;for(;n.heap_len<2;)A=n.heap[++n.heap_len]=l<2?++l:0,e[2*A]=1,n.depth[A]=0,n.opt_len--,s&&(n.static_len-=i[2*A+1]);for(t.max_code=l,o=n.heap_len>>1;o>=1;o--)Ji(n,e,o);A=r;do o=n.heap[1],n.heap[1]=n.heap[n.heap_len--],Ji(n,e,1),a=n.heap[1],n.heap[--n.heap_max]=o,n.heap[--n.heap_max]=a,e[2*A]=e[2*o]+e[2*a],n.depth[A]=(n.depth[o]>=n.depth[a]?n.depth[o]:n.depth[a])+1,e[2*o+1]=e[2*a+1]=A,n.heap[1]=A++,Ji(n,e,1);while(n.heap_len>=2);n.heap[--n.heap_max]=n.heap[1],((h,c)=>{const d=c.dyn_tree,u=c.max_code,p=c.stat_desc.static_tree,I=c.stat_desc.has_stree,f=c.stat_desc.extra_bits,m=c.stat_desc.extra_base,x=c.stat_desc.max_length;let E,M,L,B,w,y,Q=0;for(B=0;B<=tn;B++)h.bl_count[B]=0;for(d[2*h.heap[h.heap_max]+1]=0,E=h.heap_max+1;E<573;E++)M=h.heap[E],B=d[2*d[2*M+1]+1]+1,B>x&&(B=x,Q++),d[2*M+1]=B,M>u||(h.bl_count[B]++,w=0,M>=m&&(w=f[M-m]),y=d[2*M],h.opt_len+=y*(B+w),I&&(h.static_len+=y*(p[2*M+1]+w)));if(Q!==0){do{for(B=x-1;h.bl_count[B]===0;)B--;h.bl_count[B]--,h.bl_count[B+1]+=2,h.bl_count[x]--,Q-=2}while(Q>0);for(B=x;B!==0;B--)for(M=h.bl_count[B];M!==0;)L=h.heap[--E],L>u||(d[2*L+1]!==B&&(h.opt_len+=(B-d[2*L+1])*d[2*L],d[2*L+1]=B),M--)}})(n,t),Or(e,l,n.bl_count)},jr=(n,t,e)=>{let i,s,r=-1,o=t[1],a=0,A=7,l=4;for(o===0&&(A=138,l=3),t[2*(e+1)+1]=65535,i=0;i<=e;i++)s=o,o=t[2*(i+1)+1],++a<A&&s===o||(a<l?n.bl_tree[2*s]+=a:s!==0?(s!==r&&n.bl_tree[2*s]++,n.bl_tree[32]++):a<=10?n.bl_tree[34]++:n.bl_tree[36]++,a=0,r=s,o===0?(A=138,l=3):s===o?(A=6,l=3):(A=7,l=4))},$r=(n,t,e)=>{let i,s,r=-1,o=t[1],a=0,A=7,l=4;for(o===0&&(A=138,l=3),i=0;i<=e;i++)if(s=o,o=t[2*(i+1)+1],!(++a<A&&s===o)){if(a<l)do Nt(n,s,n.bl_tree);while(--a!==0);else s!==0?(s!==r&&(Nt(n,s,n.bl_tree),a--),Nt(n,16,n.bl_tree),pt(n,a-3,2)):a<=10?(Nt(n,17,n.bl_tree),pt(n,a-3,3)):(Nt(n,18,n.bl_tree),pt(n,a-11,7));a=0,r=s,o===0?(A=138,l=3):s===o?(A=6,l=3):(A=7,l=4)}};let to=!1;const eo=(n,t,e,i)=>{pt(n,0+(i?1:0),3),Vr(n),rn(n,e),rn(n,~e),e&&n.pending_buf.set(n.window.subarray(t,t+e),n.pending),n.pending+=e};var Kl=n=>{to||((()=>{let t,e,i,s,r;const o=new Array(16);for(i=0,s=0;s<28;s++)for(Oi[s]=i,t=0;t<1<<Wi[s];t++)sn[i++]=s;for(sn[i-1]=s,r=0,s=0;s<16;s++)for(Kn[s]=r,t=0;t<1<<Hn[s];t++)nn[r++]=s;for(r>>=7;s<$e;s++)for(Kn[s]=r<<7,t=0;t<1<<Hn[s]-7;t++)nn[256+r++]=s;for(e=0;e<=tn;e++)o[e]=0;for(t=0;t<=143;)Ht[2*t+1]=8,t++,o[8]++;for(;t<=255;)Ht[2*t+1]=9,t++,o[9]++;for(;t<=279;)Ht[2*t+1]=7,t++,o[7]++;for(;t<=287;)Ht[2*t+1]=8,t++,o[8]++;for(Or(Ht,287,o),t=0;t<$e;t++)en[2*t+1]=5,en[2*t]=Wr(t,5);Xr=new Yi(Ht,Wi,257,Pr,tn),Zr=new Yi(en,Hn,0,$e,tn),Hr=new Yi(new Array(0),Hl,0,19,7)})(),to=!0),n.l_desc=new Vi(n.dyn_ltree,Xr),n.d_desc=new Vi(n.dyn_dtree,Zr),n.bl_desc=new Vi(n.bl_tree,Hr),n.bi_buf=0,n.bi_valid=0,Yr(n)},Wl=(n,t,e,i)=>{let s,r,o=0;n.level>0?(n.strm.data_type===2&&(n.strm.data_type=(a=>{let A,l=4093624447;for(A=0;A<=31;A++,l>>>=1)if(1&l&&a.dyn_ltree[2*A]!==0)return 0;if(a.dyn_ltree[18]!==0||a.dyn_ltree[20]!==0||a.dyn_ltree[26]!==0)return 1;for(A=32;A<Ki;A++)if(a.dyn_ltree[2*A]!==0)return 1;return 0})(n)),qi(n,n.l_desc),qi(n,n.d_desc),o=(a=>{let A;for(jr(a,a.dyn_ltree,a.l_desc.max_code),jr(a,a.dyn_dtree,a.d_desc.max_code),qi(a,a.bl_desc),A=18;A>=3&&a.bl_tree[2*zr[A]+1]===0;A--);return a.opt_len+=3*(A+1)+5+5+4,A})(n),s=n.opt_len+3+7>>>3,r=n.static_len+3+7>>>3,r<=s&&(s=r)):s=r=e+5,e+4<=s&&t!==-1?eo(n,t,e,i):n.strategy===4||r===s?(pt(n,2+(i?1:0),3),qr(n,Ht,en)):(pt(n,4+(i?1:0),3),((a,A,l,h)=>{let c;for(pt(a,A-257,5),pt(a,l-1,5),pt(a,h-4,4),c=0;c<h;c++)pt(a,a.bl_tree[2*zr[c]+1],3);$r(a,a.dyn_ltree,A-1),$r(a,a.dyn_dtree,l-1)})(n,n.l_desc.max_code+1,n.d_desc.max_code+1,o+1),qr(n,n.dyn_ltree,n.dyn_dtree)),Yr(n),i&&Vr(n)},Ol=(n,t,e)=>(n.pending_buf[n.sym_buf+n.sym_next++]=t,n.pending_buf[n.sym_buf+n.sym_next++]=t>>8,n.pending_buf[n.sym_buf+n.sym_next++]=e,t===0?n.dyn_ltree[2*e]++:(n.matches++,t--,n.dyn_ltree[2*(sn[e]+Ki+1)]++,n.dyn_dtree[2*Kr(t)]++),n.sym_next===n.sym_end),Yl=n=>{pt(n,2,3),Nt(n,256,Ht),(t=>{t.bi_valid===16?(rn(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(n)},Vl={_tr_init:Kl,_tr_stored_block:eo,_tr_flush_block:Wl,_tr_tally:Ol,_tr_align:Yl},on=(n,t,e,i)=>{let s=65535&n,r=n>>>16&65535,o=0;for(;e!==0;){o=e>2e3?2e3:e,e-=o;do s=s+t[i++]|0,r=r+s|0;while(--o);s%=65521,r%=65521}return s|r<<16};const Jl=new Uint32Array((()=>{let n,t=[];for(var e=0;e<256;e++){n=e;for(var i=0;i<8;i++)n=1&n?3988292384^n>>>1:n>>>1;t[e]=n}return t})());var rt=(n,t,e,i)=>{const s=Jl,r=i+e;n^=-1;for(let o=i;o<r;o++)n=n>>>8^s[255&(n^t[o])];return-1^n},pe={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},fe={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:ql,_tr_stored_block:ji,_tr_flush_block:jl,_tr_tally:ee,_tr_align:$l}=Vl,{Z_NO_FLUSH:ne,Z_PARTIAL_FLUSH:th,Z_FULL_FLUSH:eh,Z_FINISH:bt,Z_BLOCK:no,Z_OK:At,Z_STREAM_END:io,Z_STREAM_ERROR:Ft,Z_DATA_ERROR:nh,Z_BUF_ERROR:$i,Z_DEFAULT_COMPRESSION:ih,Z_FILTERED:sh,Z_HUFFMAN_ONLY:Wn,Z_RLE:rh,Z_FIXED:oh,Z_DEFAULT_STRATEGY:ah,Z_UNKNOWN:Ah,Z_DEFLATED:On}=fe,me=258,Ut=262,Pe=42,Ie=113,an=666,Ce=(n,t)=>(n.msg=pe[t],t),so=n=>2*n-(n>4?9:0),ie=n=>{let t=n.length;for(;--t>=0;)n[t]=0},lh=n=>{let t,e,i,s=n.w_size;t=n.hash_size,i=t;do e=n.head[--i],n.head[i]=e>=s?e-s:0;while(--t);t=s,i=t;do e=n.prev[--i],n.prev[i]=e>=s?e-s:0;while(--t)};let se=(n,t,e)=>(t<<n.hash_shift^e)&n.hash_mask;const yt=n=>{const t=n.state;let e=t.pending;e>n.avail_out&&(e=n.avail_out),e!==0&&(n.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+e),n.next_out),n.next_out+=e,t.pending_out+=e,n.total_out+=e,n.avail_out-=e,t.pending-=e,t.pending===0&&(t.pending_out=0))},Et=(n,t)=>{jl(n,n.block_start>=0?n.block_start:-1,n.strstart-n.block_start,t),n.block_start=n.strstart,yt(n.strm)},Z=(n,t)=>{n.pending_buf[n.pending++]=t},An=(n,t)=>{n.pending_buf[n.pending++]=t>>>8&255,n.pending_buf[n.pending++]=255&t},ts=(n,t,e,i)=>{let s=n.avail_in;return s>i&&(s=i),s===0?0:(n.avail_in-=s,t.set(n.input.subarray(n.next_in,n.next_in+s),e),n.state.wrap===1?n.adler=on(n.adler,t,s,e):n.state.wrap===2&&(n.adler=rt(n.adler,t,s,e)),n.next_in+=s,n.total_in+=s,s)},ro=(n,t)=>{let e,i,s=n.max_chain_length,r=n.strstart,o=n.prev_length,a=n.nice_match;const A=n.strstart>n.w_size-Ut?n.strstart-(n.w_size-Ut):0,l=n.window,h=n.w_mask,c=n.prev,d=n.strstart+me;let u=l[r+o-1],p=l[r+o];n.prev_length>=n.good_match&&(s>>=2),a>n.lookahead&&(a=n.lookahead);do if(e=t,l[e+o]===p&&l[e+o-1]===u&&l[e]===l[r]&&l[++e]===l[r+1]){r+=2,e++;do;while(l[++r]===l[++e]&&l[++r]===l[++e]&&l[++r]===l[++e]&&l[++r]===l[++e]&&l[++r]===l[++e]&&l[++r]===l[++e]&&l[++r]===l[++e]&&l[++r]===l[++e]&&r<d);if(i=me-(d-r),r=d-me,i>o){if(n.match_start=t,o=i,i>=a)break;u=l[r+o-1],p=l[r+o]}}while((t=c[t&h])>A&&--s!==0);return o<=n.lookahead?o:n.lookahead},ze=n=>{const t=n.w_size;let e,i,s;do{if(i=n.window_size-n.lookahead-n.strstart,n.strstart>=t+(t-Ut)&&(n.window.set(n.window.subarray(t,t+t-i),0),n.match_start-=t,n.strstart-=t,n.block_start-=t,n.insert>n.strstart&&(n.insert=n.strstart),lh(n),i+=t),n.strm.avail_in===0)break;if(e=ts(n.strm,n.window,n.strstart+n.lookahead,i),n.lookahead+=e,n.lookahead+n.insert>=3)for(s=n.strstart-n.insert,n.ins_h=n.window[s],n.ins_h=se(n,n.ins_h,n.window[s+1]);n.insert&&(n.ins_h=se(n,n.ins_h,n.window[s+3-1]),n.prev[s&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=s,s++,n.insert--,!(n.lookahead+n.insert<3)););}while(n.lookahead<Ut&&n.strm.avail_in!==0)},oo=(n,t)=>{let e,i,s,r=n.pending_buf_size-5>n.w_size?n.w_size:n.pending_buf_size-5,o=0,a=n.strm.avail_in;do{if(e=65535,s=n.bi_valid+42>>3,n.strm.avail_out<s||(s=n.strm.avail_out-s,i=n.strstart-n.block_start,e>i+n.strm.avail_in&&(e=i+n.strm.avail_in),e>s&&(e=s),e<r&&(e===0&&t!==bt||t===ne||e!==i+n.strm.avail_in)))break;o=t===bt&&e===i+n.strm.avail_in?1:0,ji(n,0,0,o),n.pending_buf[n.pending-4]=e,n.pending_buf[n.pending-3]=e>>8,n.pending_buf[n.pending-2]=~e,n.pending_buf[n.pending-1]=~e>>8,yt(n.strm),i&&(i>e&&(i=e),n.strm.output.set(n.window.subarray(n.block_start,n.block_start+i),n.strm.next_out),n.strm.next_out+=i,n.strm.avail_out-=i,n.strm.total_out+=i,n.block_start+=i,e-=i),e&&(ts(n.strm,n.strm.output,n.strm.next_out,e),n.strm.next_out+=e,n.strm.avail_out-=e,n.strm.total_out+=e)}while(o===0);return a-=n.strm.avail_in,a&&(a>=n.w_size?(n.matches=2,n.window.set(n.strm.input.subarray(n.strm.next_in-n.w_size,n.strm.next_in),0),n.strstart=n.w_size,n.insert=n.strstart):(n.window_size-n.strstart<=a&&(n.strstart-=n.w_size,n.window.set(n.window.subarray(n.w_size,n.w_size+n.strstart),0),n.matches<2&&n.matches++,n.insert>n.strstart&&(n.insert=n.strstart)),n.window.set(n.strm.input.subarray(n.strm.next_in-a,n.strm.next_in),n.strstart),n.strstart+=a,n.insert+=a>n.w_size-n.insert?n.w_size-n.insert:a),n.block_start=n.strstart),n.high_water<n.strstart&&(n.high_water=n.strstart),o?4:t!==ne&&t!==bt&&n.strm.avail_in===0&&n.strstart===n.block_start?2:(s=n.window_size-n.strstart,n.strm.avail_in>s&&n.block_start>=n.w_size&&(n.block_start-=n.w_size,n.strstart-=n.w_size,n.window.set(n.window.subarray(n.w_size,n.w_size+n.strstart),0),n.matches<2&&n.matches++,s+=n.w_size,n.insert>n.strstart&&(n.insert=n.strstart)),s>n.strm.avail_in&&(s=n.strm.avail_in),s&&(ts(n.strm,n.window,n.strstart,s),n.strstart+=s,n.insert+=s>n.w_size-n.insert?n.w_size-n.insert:s),n.high_water<n.strstart&&(n.high_water=n.strstart),s=n.bi_valid+42>>3,s=n.pending_buf_size-s>65535?65535:n.pending_buf_size-s,r=s>n.w_size?n.w_size:s,i=n.strstart-n.block_start,(i>=r||(i||t===bt)&&t!==ne&&n.strm.avail_in===0&&i<=s)&&(e=i>s?s:i,o=t===bt&&n.strm.avail_in===0&&e===i?1:0,ji(n,n.block_start,e,o),n.block_start+=e,yt(n.strm)),o?3:1)},es=(n,t)=>{let e,i;for(;;){if(n.lookahead<Ut){if(ze(n),n.lookahead<Ut&&t===ne)return 1;if(n.lookahead===0)break}if(e=0,n.lookahead>=3&&(n.ins_h=se(n,n.ins_h,n.window[n.strstart+3-1]),e=n.prev[n.strstart&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=n.strstart),e!==0&&n.strstart-e<=n.w_size-Ut&&(n.match_length=ro(n,e)),n.match_length>=3)if(i=ee(n,n.strstart-n.match_start,n.match_length-3),n.lookahead-=n.match_length,n.match_length<=n.max_lazy_match&&n.lookahead>=3){n.match_length--;do n.strstart++,n.ins_h=se(n,n.ins_h,n.window[n.strstart+3-1]),e=n.prev[n.strstart&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=n.strstart;while(--n.match_length!==0);n.strstart++}else n.strstart+=n.match_length,n.match_length=0,n.ins_h=n.window[n.strstart],n.ins_h=se(n,n.ins_h,n.window[n.strstart+1]);else i=ee(n,0,n.window[n.strstart]),n.lookahead--,n.strstart++;if(i&&(Et(n,!1),n.strm.avail_out===0))return 1}return n.insert=n.strstart<2?n.strstart:2,t===bt?(Et(n,!0),n.strm.avail_out===0?3:4):n.sym_next&&(Et(n,!1),n.strm.avail_out===0)?1:2},Xe=(n,t)=>{let e,i,s;for(;;){if(n.lookahead<Ut){if(ze(n),n.lookahead<Ut&&t===ne)return 1;if(n.lookahead===0)break}if(e=0,n.lookahead>=3&&(n.ins_h=se(n,n.ins_h,n.window[n.strstart+3-1]),e=n.prev[n.strstart&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=n.strstart),n.prev_length=n.match_length,n.prev_match=n.match_start,n.match_length=2,e!==0&&n.prev_length<n.max_lazy_match&&n.strstart-e<=n.w_size-Ut&&(n.match_length=ro(n,e),n.match_length<=5&&(n.strategy===sh||n.match_length===3&&n.strstart-n.match_start>4096)&&(n.match_length=2)),n.prev_length>=3&&n.match_length<=n.prev_length){s=n.strstart+n.lookahead-3,i=ee(n,n.strstart-1-n.prev_match,n.prev_length-3),n.lookahead-=n.prev_length-1,n.prev_length-=2;do++n.strstart<=s&&(n.ins_h=se(n,n.ins_h,n.window[n.strstart+3-1]),e=n.prev[n.strstart&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=n.strstart);while(--n.prev_length!==0);if(n.match_available=0,n.match_length=2,n.strstart++,i&&(Et(n,!1),n.strm.avail_out===0))return 1}else if(n.match_available){if(i=ee(n,0,n.window[n.strstart-1]),i&&Et(n,!1),n.strstart++,n.lookahead--,n.strm.avail_out===0)return 1}else n.match_available=1,n.strstart++,n.lookahead--}return n.match_available&&(i=ee(n,0,n.window[n.strstart-1]),n.match_available=0),n.insert=n.strstart<2?n.strstart:2,t===bt?(Et(n,!0),n.strm.avail_out===0?3:4):n.sym_next&&(Et(n,!1),n.strm.avail_out===0)?1:2};function Pt(n,t,e,i,s){this.good_length=n,this.max_lazy=t,this.nice_length=e,this.max_chain=i,this.func=s}const ln=[new Pt(0,0,0,0,oo),new Pt(4,4,8,4,es),new Pt(4,5,16,8,es),new Pt(4,6,32,32,es),new Pt(4,4,16,16,Xe),new Pt(8,16,32,32,Xe),new Pt(8,16,128,128,Xe),new Pt(8,32,128,256,Xe),new Pt(32,128,258,1024,Xe),new Pt(32,258,258,4096,Xe)];function hh(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=On,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),ie(this.dyn_ltree),ie(this.dyn_dtree),ie(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),ie(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),ie(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const hn=n=>{if(!n)return 1;const t=n.state;return!t||t.strm!==n||t.status!==Pe&&t.status!==57&&t.status!==69&&t.status!==73&&t.status!==91&&t.status!==103&&t.status!==Ie&&t.status!==an?1:0},ao=n=>{if(hn(n))return Ce(n,Ft);n.total_in=n.total_out=0,n.data_type=Ah;const t=n.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap===2?57:t.wrap?Pe:Ie,n.adler=t.wrap===2?0:1,t.last_flush=-2,ql(t),At},Ao=n=>{const t=ao(n);return t===At&&(e=>{e.window_size=2*e.w_size,ie(e.head),e.max_lazy_match=ln[e.level].max_lazy,e.good_match=ln[e.level].good_length,e.nice_match=ln[e.level].nice_length,e.max_chain_length=ln[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=2,e.match_available=0,e.ins_h=0})(n.state),t},lo=(n,t,e,i,s,r)=>{if(!n)return Ft;let o=1;if(t===ih&&(t=6),i<0?(o=0,i=-i):i>15&&(o=2,i-=16),s<1||s>9||e!==On||i<8||i>15||t<0||t>9||r<0||r>oh||i===8&&o!==1)return Ce(n,Ft);i===8&&(i=9);const a=new hh;return n.state=a,a.strm=n,a.status=Pe,a.wrap=o,a.gzhead=null,a.w_bits=i,a.w_size=1<<a.w_bits,a.w_mask=a.w_size-1,a.hash_bits=s+7,a.hash_size=1<<a.hash_bits,a.hash_mask=a.hash_size-1,a.hash_shift=~~((a.hash_bits+3-1)/3),a.window=new Uint8Array(2*a.w_size),a.head=new Uint16Array(a.hash_size),a.prev=new Uint16Array(a.w_size),a.lit_bufsize=1<<s+6,a.pending_buf_size=4*a.lit_bufsize,a.pending_buf=new Uint8Array(a.pending_buf_size),a.sym_buf=a.lit_bufsize,a.sym_end=3*(a.lit_bufsize-1),a.level=t,a.strategy=r,a.method=e,Ao(n)};var ch=(n,t)=>{if(hn(n)||t>no||t<0)return n?Ce(n,Ft):Ft;const e=n.state;if(!n.output||n.avail_in!==0&&!n.input||e.status===an&&t!==bt)return Ce(n,n.avail_out===0?$i:Ft);const i=e.last_flush;if(e.last_flush=t,e.pending!==0){if(yt(n),n.avail_out===0)return e.last_flush=-1,At}else if(n.avail_in===0&&so(t)<=so(i)&&t!==bt)return Ce(n,$i);if(e.status===an&&n.avail_in!==0)return Ce(n,$i);if(e.status===Pe&&e.wrap===0&&(e.status=Ie),e.status===Pe){let s=On+(e.w_bits-8<<4)<<8,r=-1;if(r=e.strategy>=Wn||e.level<2?0:e.level<6?1:e.level===6?2:3,s|=r<<6,e.strstart!==0&&(s|=32),s+=31-s%31,An(e,s),e.strstart!==0&&(An(e,n.adler>>>16),An(e,65535&n.adler)),n.adler=1,e.status=Ie,yt(n),e.pending!==0)return e.last_flush=-1,At}if(e.status===57){if(n.adler=0,Z(e,31),Z(e,139),Z(e,8),e.gzhead)Z(e,(e.gzhead.text?1:0)+(e.gzhead.hcrc?2:0)+(e.gzhead.extra?4:0)+(e.gzhead.name?8:0)+(e.gzhead.comment?16:0)),Z(e,255&e.gzhead.time),Z(e,e.gzhead.time>>8&255),Z(e,e.gzhead.time>>16&255),Z(e,e.gzhead.time>>24&255),Z(e,e.level===9?2:e.strategy>=Wn||e.level<2?4:0),Z(e,255&e.gzhead.os),e.gzhead.extra&&e.gzhead.extra.length&&(Z(e,255&e.gzhead.extra.length),Z(e,e.gzhead.extra.length>>8&255)),e.gzhead.hcrc&&(n.adler=rt(n.adler,e.pending_buf,e.pending,0)),e.gzindex=0,e.status=69;else if(Z(e,0),Z(e,0),Z(e,0),Z(e,0),Z(e,0),Z(e,e.level===9?2:e.strategy>=Wn||e.level<2?4:0),Z(e,3),e.status=Ie,yt(n),e.pending!==0)return e.last_flush=-1,At}if(e.status===69){if(e.gzhead.extra){let s=e.pending,r=(65535&e.gzhead.extra.length)-e.gzindex;for(;e.pending+r>e.pending_buf_size;){let a=e.pending_buf_size-e.pending;if(e.pending_buf.set(e.gzhead.extra.subarray(e.gzindex,e.gzindex+a),e.pending),e.pending=e.pending_buf_size,e.gzhead.hcrc&&e.pending>s&&(n.adler=rt(n.adler,e.pending_buf,e.pending-s,s)),e.gzindex+=a,yt(n),e.pending!==0)return e.last_flush=-1,At;s=0,r-=a}let o=new Uint8Array(e.gzhead.extra);e.pending_buf.set(o.subarray(e.gzindex,e.gzindex+r),e.pending),e.pending+=r,e.gzhead.hcrc&&e.pending>s&&(n.adler=rt(n.adler,e.pending_buf,e.pending-s,s)),e.gzindex=0}e.status=73}if(e.status===73){if(e.gzhead.name){let s,r=e.pending;do{if(e.pending===e.pending_buf_size){if(e.gzhead.hcrc&&e.pending>r&&(n.adler=rt(n.adler,e.pending_buf,e.pending-r,r)),yt(n),e.pending!==0)return e.last_flush=-1,At;r=0}s=e.gzindex<e.gzhead.name.length?255&e.gzhead.name.charCodeAt(e.gzindex++):0,Z(e,s)}while(s!==0);e.gzhead.hcrc&&e.pending>r&&(n.adler=rt(n.adler,e.pending_buf,e.pending-r,r)),e.gzindex=0}e.status=91}if(e.status===91){if(e.gzhead.comment){let s,r=e.pending;do{if(e.pending===e.pending_buf_size){if(e.gzhead.hcrc&&e.pending>r&&(n.adler=rt(n.adler,e.pending_buf,e.pending-r,r)),yt(n),e.pending!==0)return e.last_flush=-1,At;r=0}s=e.gzindex<e.gzhead.comment.length?255&e.gzhead.comment.charCodeAt(e.gzindex++):0,Z(e,s)}while(s!==0);e.gzhead.hcrc&&e.pending>r&&(n.adler=rt(n.adler,e.pending_buf,e.pending-r,r))}e.status=103}if(e.status===103){if(e.gzhead.hcrc){if(e.pending+2>e.pending_buf_size&&(yt(n),e.pending!==0))return e.last_flush=-1,At;Z(e,255&n.adler),Z(e,n.adler>>8&255),n.adler=0}if(e.status=Ie,yt(n),e.pending!==0)return e.last_flush=-1,At}if(n.avail_in!==0||e.lookahead!==0||t!==ne&&e.status!==an){let s=e.level===0?oo(e,t):e.strategy===Wn?((r,o)=>{let a;for(;;){if(r.lookahead===0&&(ze(r),r.lookahead===0)){if(o===ne)return 1;break}if(r.match_length=0,a=ee(r,0,r.window[r.strstart]),r.lookahead--,r.strstart++,a&&(Et(r,!1),r.strm.avail_out===0))return 1}return r.insert=0,o===bt?(Et(r,!0),r.strm.avail_out===0?3:4):r.sym_next&&(Et(r,!1),r.strm.avail_out===0)?1:2})(e,t):e.strategy===rh?((r,o)=>{let a,A,l,h;const c=r.window;for(;;){if(r.lookahead<=me){if(ze(r),r.lookahead<=me&&o===ne)return 1;if(r.lookahead===0)break}if(r.match_length=0,r.lookahead>=3&&r.strstart>0&&(l=r.strstart-1,A=c[l],A===c[++l]&&A===c[++l]&&A===c[++l])){h=r.strstart+me;do;while(A===c[++l]&&A===c[++l]&&A===c[++l]&&A===c[++l]&&A===c[++l]&&A===c[++l]&&A===c[++l]&&A===c[++l]&&l<h);r.match_length=me-(h-l),r.match_length>r.lookahead&&(r.match_length=r.lookahead)}if(r.match_length>=3?(a=ee(r,1,r.match_length-3),r.lookahead-=r.match_length,r.strstart+=r.match_length,r.match_length=0):(a=ee(r,0,r.window[r.strstart]),r.lookahead--,r.strstart++),a&&(Et(r,!1),r.strm.avail_out===0))return 1}return r.insert=0,o===bt?(Et(r,!0),r.strm.avail_out===0?3:4):r.sym_next&&(Et(r,!1),r.strm.avail_out===0)?1:2})(e,t):ln[e.level].func(e,t);if(s!==3&&s!==4||(e.status=an),s===1||s===3)return n.avail_out===0&&(e.last_flush=-1),At;if(s===2&&(t===th?$l(e):t!==no&&(ji(e,0,0,!1),t===eh&&(ie(e.head),e.lookahead===0&&(e.strstart=0,e.block_start=0,e.insert=0))),yt(n),n.avail_out===0))return e.last_flush=-1,At}return t!==bt?At:e.wrap<=0?io:(e.wrap===2?(Z(e,255&n.adler),Z(e,n.adler>>8&255),Z(e,n.adler>>16&255),Z(e,n.adler>>24&255),Z(e,255&n.total_in),Z(e,n.total_in>>8&255),Z(e,n.total_in>>16&255),Z(e,n.total_in>>24&255)):(An(e,n.adler>>>16),An(e,65535&n.adler)),yt(n),e.wrap>0&&(e.wrap=-e.wrap),e.pending!==0?At:io)},uh=(n,t)=>{let e=t.length;if(hn(n))return Ft;const i=n.state,s=i.wrap;if(s===2||s===1&&i.status!==Pe||i.lookahead)return Ft;if(s===1&&(n.adler=on(n.adler,t,e,0)),i.wrap=0,e>=i.w_size){s===0&&(ie(i.head),i.strstart=0,i.block_start=0,i.insert=0);let A=new Uint8Array(i.w_size);A.set(t.subarray(e-i.w_size,e),0),t=A,e=i.w_size}const r=n.avail_in,o=n.next_in,a=n.input;for(n.avail_in=e,n.next_in=0,n.input=t,ze(i);i.lookahead>=3;){let A=i.strstart,l=i.lookahead-2;do i.ins_h=se(i,i.ins_h,i.window[A+3-1]),i.prev[A&i.w_mask]=i.head[i.ins_h],i.head[i.ins_h]=A,A++;while(--l);i.strstart=A,i.lookahead=2,ze(i)}return i.strstart+=i.lookahead,i.block_start=i.strstart,i.insert=i.lookahead,i.lookahead=0,i.match_length=i.prev_length=2,i.match_available=0,n.next_in=o,n.input=a,n.avail_in=r,i.wrap=s,At},cn={deflateInit:(n,t)=>lo(n,t,On,15,8,ah),deflateInit2:lo,deflateReset:Ao,deflateResetKeep:ao,deflateSetHeader:(n,t)=>hn(n)||n.state.wrap!==2?Ft:(n.state.gzhead=t,At),deflate:ch,deflateEnd:n=>{if(hn(n))return Ft;const t=n.state.status;return n.state=null,t===Ie?Ce(n,nh):At},deflateSetDictionary:uh,deflateInfo:"pako deflate (from Nodeca project)"};const dh=(n,t)=>Object.prototype.hasOwnProperty.call(n,t);var ho=function(n){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const e=t.shift();if(e){if(typeof e!="object")throw new TypeError(e+"must be non-object");for(const i in e)dh(e,i)&&(n[i]=e[i])}}return n},co=n=>{let t=0;for(let i=0,s=n.length;i<s;i++)t+=n[i].length;const e=new Uint8Array(t);for(let i=0,s=0,r=n.length;i<r;i++){let o=n[i];e.set(o,s),s+=o.length}return e};let uo=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{uo=!1}const un=new Uint8Array(256);for(let n=0;n<256;n++)un[n]=n>=252?6:n>=248?5:n>=240?4:n>=224?3:n>=192?2:1;un[254]=un[254]=1;var ns=n=>{if(typeof TextEncoder=="function"&&TextEncoder.prototype.encode)return new TextEncoder().encode(n);let t,e,i,s,r,o=n.length,a=0;for(s=0;s<o;s++)e=n.charCodeAt(s),(64512&e)==55296&&s+1<o&&(i=n.charCodeAt(s+1),(64512&i)==56320&&(e=65536+(e-55296<<10)+(i-56320),s++)),a+=e<128?1:e<2048?2:e<65536?3:4;for(t=new Uint8Array(a),r=0,s=0;r<a;s++)e=n.charCodeAt(s),(64512&e)==55296&&s+1<o&&(i=n.charCodeAt(s+1),(64512&i)==56320&&(e=65536+(e-55296<<10)+(i-56320),s++)),e<128?t[r++]=e:e<2048?(t[r++]=192|e>>>6,t[r++]=128|63&e):e<65536?(t[r++]=224|e>>>12,t[r++]=128|e>>>6&63,t[r++]=128|63&e):(t[r++]=240|e>>>18,t[r++]=128|e>>>12&63,t[r++]=128|e>>>6&63,t[r++]=128|63&e);return t},gh=(n,t)=>{const e=t||n.length;if(typeof TextDecoder=="function"&&TextDecoder.prototype.decode)return new TextDecoder().decode(n.subarray(0,t));let i,s;const r=new Array(2*e);for(s=0,i=0;i<e;){let o=n[i++];if(o<128){r[s++]=o;continue}let a=un[o];if(a>4)r[s++]=65533,i+=a-1;else{for(o&=a===2?31:a===3?15:7;a>1&&i<e;)o=o<<6|63&n[i++],a--;a>1?r[s++]=65533:o<65536?r[s++]=o:(o-=65536,r[s++]=55296|o>>10&1023,r[s++]=56320|1023&o)}}return((o,a)=>{if(a<65534&&o.subarray&&uo)return String.fromCharCode.apply(null,o.length===a?o:o.subarray(0,a));let A="";for(let l=0;l<a;l++)A+=String.fromCharCode(o[l]);return A})(r,s)},ph=(n,t)=>{(t=t||n.length)>n.length&&(t=n.length);let e=t-1;for(;e>=0&&(192&n[e])==128;)e--;return e<0||e===0?t:e+un[n[e]]>t?e:t},go=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const po=Object.prototype.toString,{Z_NO_FLUSH:fh,Z_SYNC_FLUSH:mh,Z_FULL_FLUSH:Ih,Z_FINISH:Ch,Z_OK:Yn,Z_STREAM_END:Bh,Z_DEFAULT_COMPRESSION:yh,Z_DEFAULT_STRATEGY:Eh,Z_DEFLATED:wh}=fe;function dn(n){this.options=ho({level:yh,method:wh,chunkSize:16384,windowBits:15,memLevel:8,strategy:Eh},n||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new go,this.strm.avail_out=0;let e=cn.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(e!==Yn)throw new Error(pe[e]);if(t.header&&cn.deflateSetHeader(this.strm,t.header),t.dictionary){let i;if(i=typeof t.dictionary=="string"?ns(t.dictionary):po.call(t.dictionary)==="[object ArrayBuffer]"?new Uint8Array(t.dictionary):t.dictionary,e=cn.deflateSetDictionary(this.strm,i),e!==Yn)throw new Error(pe[e]);this._dict_set=!0}}function is(n,t){const e=new dn(t);if(e.push(n,!0),e.err)throw e.msg||pe[e.err];return e.result}dn.prototype.push=function(n,t){const e=this.strm,i=this.options.chunkSize;let s,r;if(this.ended)return!1;for(r=t===~~t?t:t===!0?Ch:fh,typeof n=="string"?e.input=ns(n):po.call(n)==="[object ArrayBuffer]"?e.input=new Uint8Array(n):e.input=n,e.next_in=0,e.avail_in=e.input.length;;)if(e.avail_out===0&&(e.output=new Uint8Array(i),e.next_out=0,e.avail_out=i),(r===mh||r===Ih)&&e.avail_out<=6)this.onData(e.output.subarray(0,e.next_out)),e.avail_out=0;else{if(s=cn.deflate(e,r),s===Bh)return e.next_out>0&&this.onData(e.output.subarray(0,e.next_out)),s=cn.deflateEnd(this.strm),this.onEnd(s),this.ended=!0,s===Yn;if(e.avail_out!==0){if(r>0&&e.next_out>0)this.onData(e.output.subarray(0,e.next_out)),e.avail_out=0;else if(e.avail_in===0)break}else this.onData(e.output)}return!0},dn.prototype.onData=function(n){this.chunks.push(n)},dn.prototype.onEnd=function(n){n===Yn&&(this.result=co(this.chunks)),this.chunks=[],this.err=n,this.msg=this.strm.msg};var xh={Deflate:dn,deflate:is,deflateRaw:function(n,t){return(t=t||{}).raw=!0,is(n,t)},gzip:function(n,t){return(t=t||{}).gzip=!0,is(n,t)},constants:fe};const Vn=16209;var Qh=function(n,t){let e,i,s,r,o,a,A,l,h,c,d,u,p,I,f,m,x,E,M,L,B,w,y,Q;const b=n.state;e=n.next_in,y=n.input,i=e+(n.avail_in-5),s=n.next_out,Q=n.output,r=s-(t-n.avail_out),o=s+(n.avail_out-257),a=b.dmax,A=b.wsize,l=b.whave,h=b.wnext,c=b.window,d=b.hold,u=b.bits,p=b.lencode,I=b.distcode,f=(1<<b.lenbits)-1,m=(1<<b.distbits)-1;t:do{u<15&&(d+=y[e++]<<u,u+=8,d+=y[e++]<<u,u+=8),x=p[d&f];e:for(;;){if(E=x>>>24,d>>>=E,u-=E,E=x>>>16&255,E===0)Q[s++]=65535&x;else{if(!(16&E)){if(64&E){if(32&E){b.mode=16191;break t}n.msg="invalid literal/length code",b.mode=Vn;break t}x=p[(65535&x)+(d&(1<<E)-1)];continue e}for(M=65535&x,E&=15,E&&(u<E&&(d+=y[e++]<<u,u+=8),M+=d&(1<<E)-1,d>>>=E,u-=E),u<15&&(d+=y[e++]<<u,u+=8,d+=y[e++]<<u,u+=8),x=I[d&m];;){if(E=x>>>24,d>>>=E,u-=E,E=x>>>16&255,16&E){if(L=65535&x,E&=15,u<E&&(d+=y[e++]<<u,u+=8,u<E&&(d+=y[e++]<<u,u+=8)),L+=d&(1<<E)-1,L>a){n.msg="invalid distance too far back",b.mode=Vn;break t}if(d>>>=E,u-=E,E=s-r,L>E){if(E=L-E,E>l&&b.sane){n.msg="invalid distance too far back",b.mode=Vn;break t}if(B=0,w=c,h===0){if(B+=A-E,E<M){M-=E;do Q[s++]=c[B++];while(--E);B=s-L,w=Q}}else if(h<E){if(B+=A+h-E,E-=h,E<M){M-=E;do Q[s++]=c[B++];while(--E);if(B=0,h<M){E=h,M-=E;do Q[s++]=c[B++];while(--E);B=s-L,w=Q}}}else if(B+=h-E,E<M){M-=E;do Q[s++]=c[B++];while(--E);B=s-L,w=Q}for(;M>2;)Q[s++]=w[B++],Q[s++]=w[B++],Q[s++]=w[B++],M-=3;M&&(Q[s++]=w[B++],M>1&&(Q[s++]=w[B++]))}else{B=s-L;do Q[s++]=Q[B++],Q[s++]=Q[B++],Q[s++]=Q[B++],M-=3;while(M>2);M&&(Q[s++]=Q[B++],M>1&&(Q[s++]=Q[B++]))}break}if(64&E){n.msg="invalid distance code",b.mode=Vn;break t}x=I[(65535&x)+(d&(1<<E)-1)]}}break}}while(e<i&&s<o);M=u>>3,e-=M,u-=M<<3,d&=(1<<u)-1,n.next_in=e,n.next_out=s,n.avail_in=e<i?i-e+5:5-(e-i),n.avail_out=s<o?o-s+257:257-(s-o),b.hold=d,b.bits=u};const Jn=15,Mh=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),bh=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),Sh=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),_h=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]);var gn=(n,t,e,i,s,r,o,a)=>{const A=a.bits;let l,h,c,d,u,p,I=0,f=0,m=0,x=0,E=0,M=0,L=0,B=0,w=0,y=0,Q=null;const b=new Uint16Array(16),v=new Uint16Array(16);let T,N,R,D=null;for(I=0;I<=Jn;I++)b[I]=0;for(f=0;f<i;f++)b[t[e+f]]++;for(E=A,x=Jn;x>=1&&b[x]===0;x--);if(E>x&&(E=x),x===0)return s[r++]=20971520,s[r++]=20971520,a.bits=1,0;for(m=1;m<x&&b[m]===0;m++);for(E<m&&(E=m),B=1,I=1;I<=Jn;I++)if(B<<=1,B-=b[I],B<0)return-1;if(B>0&&(n===0||x!==1))return-1;for(v[1]=0,I=1;I<Jn;I++)v[I+1]=v[I]+b[I];for(f=0;f<i;f++)t[e+f]!==0&&(o[v[t[e+f]]++]=f);if(n===0?(Q=D=o,p=20):n===1?(Q=Mh,D=bh,p=257):(Q=Sh,D=_h,p=0),y=0,f=0,I=m,u=r,M=E,L=0,c=-1,w=1<<E,d=w-1,n===1&&w>852||n===2&&w>592)return 1;for(;;){T=I-L,o[f]+1<p?(N=0,R=o[f]):o[f]>=p?(N=D[o[f]-p],R=Q[o[f]-p]):(N=96,R=0),l=1<<I-L,h=1<<M,m=h;do h-=l,s[u+(y>>L)+h]=T<<24|N<<16|R;while(h!==0);for(l=1<<I-1;y&l;)l>>=1;if(l!==0?(y&=l-1,y+=l):y=0,f++,--b[I]===0){if(I===x)break;I=t[e+o[f]]}if(I>E&&(y&d)!==c){for(L===0&&(L=E),u+=m,M=I-L,B=1<<M;M+L<x&&(B-=b[M+L],!(B<=0));)M++,B<<=1;if(w+=1<<M,n===1&&w>852||n===2&&w>592)return 1;c=y&d,s[c]=E<<24|M<<16|u-r}}return y!==0&&(s[u+y]=I-L<<24|64<<16),a.bits=E,0};const{Z_FINISH:fo,Z_BLOCK:Gh,Z_TREES:qn,Z_OK:Be,Z_STREAM_END:Lh,Z_NEED_DICT:vh,Z_STREAM_ERROR:St,Z_DATA_ERROR:mo,Z_MEM_ERROR:Io,Z_BUF_ERROR:Rh,Z_DEFLATED:Co}=fe,jn=16180,$n=16190,Kt=16191,ss=16192,rs=16194,ti=16199,ei=16200,os=16206,J=16209,Bo=n=>(n>>>24&255)+(n>>>8&65280)+((65280&n)<<8)+((255&n)<<24);function Th(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const ye=n=>{if(!n)return 1;const t=n.state;return!t||t.strm!==n||t.mode<jn||t.mode>16211?1:0},yo=n=>{if(ye(n))return St;const t=n.state;return n.total_in=n.total_out=t.total=0,n.msg="",t.wrap&&(n.adler=1&t.wrap),t.mode=jn,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,Be},Eo=n=>{if(ye(n))return St;const t=n.state;return t.wsize=0,t.whave=0,t.wnext=0,yo(n)},wo=(n,t)=>{let e;if(ye(n))return St;const i=n.state;return t<0?(e=0,t=-t):(e=5+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?St:(i.window!==null&&i.wbits!==t&&(i.window=null),i.wrap=e,i.wbits=t,Eo(n))},xo=(n,t)=>{if(!n)return St;const e=new Th;n.state=e,e.strm=n,e.window=null,e.mode=jn;const i=wo(n,t);return i!==Be&&(n.state=null),i};let as,As,Qo=!0;const Dh=n=>{if(Qo){as=new Int32Array(512),As=new Int32Array(32);let t=0;for(;t<144;)n.lens[t++]=8;for(;t<256;)n.lens[t++]=9;for(;t<280;)n.lens[t++]=7;for(;t<288;)n.lens[t++]=8;for(gn(1,n.lens,0,288,as,0,n.work,{bits:9}),t=0;t<32;)n.lens[t++]=5;gn(2,n.lens,0,32,As,0,n.work,{bits:5}),Qo=!1}n.lencode=as,n.lenbits=9,n.distcode=As,n.distbits=5},Mo=(n,t,e,i)=>{let s;const r=n.state;return r.window===null&&(r.wsize=1<<r.wbits,r.wnext=0,r.whave=0,r.window=new Uint8Array(r.wsize)),i>=r.wsize?(r.window.set(t.subarray(e-r.wsize,e),0),r.wnext=0,r.whave=r.wsize):(s=r.wsize-r.wnext,s>i&&(s=i),r.window.set(t.subarray(e-i,e-i+s),r.wnext),(i-=s)?(r.window.set(t.subarray(e-i,e),0),r.wnext=i,r.whave=r.wsize):(r.wnext+=s,r.wnext===r.wsize&&(r.wnext=0),r.whave<r.wsize&&(r.whave+=s))),0};var kh=(n,t)=>{let e,i,s,r,o,a,A,l,h,c,d,u,p,I,f,m,x,E,M,L,B,w,y=0;const Q=new Uint8Array(4);let b,v;const T=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(ye(n)||!n.output||!n.input&&n.avail_in!==0)return St;e=n.state,e.mode===Kt&&(e.mode=ss),o=n.next_out,s=n.output,A=n.avail_out,r=n.next_in,i=n.input,a=n.avail_in,l=e.hold,h=e.bits,c=a,d=A,w=Be;t:for(;;)switch(e.mode){case jn:if(e.wrap===0){e.mode=ss;break}for(;h<16;){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}if(2&e.wrap&&l===35615){e.wbits===0&&(e.wbits=15),e.check=0,Q[0]=255&l,Q[1]=l>>>8&255,e.check=rt(e.check,Q,2,0),l=0,h=0,e.mode=16181;break}if(e.head&&(e.head.done=!1),!(1&e.wrap)||(((255&l)<<8)+(l>>8))%31){n.msg="incorrect header check",e.mode=J;break}if((15&l)!==Co){n.msg="unknown compression method",e.mode=J;break}if(l>>>=4,h-=4,B=8+(15&l),e.wbits===0&&(e.wbits=B),B>15||B>e.wbits){n.msg="invalid window size",e.mode=J;break}e.dmax=1<<e.wbits,e.flags=0,n.adler=e.check=1,e.mode=512&l?16189:Kt,l=0,h=0;break;case 16181:for(;h<16;){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}if(e.flags=l,(255&e.flags)!==Co){n.msg="unknown compression method",e.mode=J;break}if(57344&e.flags){n.msg="unknown header flags set",e.mode=J;break}e.head&&(e.head.text=l>>8&1),512&e.flags&&4&e.wrap&&(Q[0]=255&l,Q[1]=l>>>8&255,e.check=rt(e.check,Q,2,0)),l=0,h=0,e.mode=16182;case 16182:for(;h<32;){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}e.head&&(e.head.time=l),512&e.flags&&4&e.wrap&&(Q[0]=255&l,Q[1]=l>>>8&255,Q[2]=l>>>16&255,Q[3]=l>>>24&255,e.check=rt(e.check,Q,4,0)),l=0,h=0,e.mode=16183;case 16183:for(;h<16;){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}e.head&&(e.head.xflags=255&l,e.head.os=l>>8),512&e.flags&&4&e.wrap&&(Q[0]=255&l,Q[1]=l>>>8&255,e.check=rt(e.check,Q,2,0)),l=0,h=0,e.mode=16184;case 16184:if(1024&e.flags){for(;h<16;){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}e.length=l,e.head&&(e.head.extra_len=l),512&e.flags&&4&e.wrap&&(Q[0]=255&l,Q[1]=l>>>8&255,e.check=rt(e.check,Q,2,0)),l=0,h=0}else e.head&&(e.head.extra=null);e.mode=16185;case 16185:if(1024&e.flags&&(u=e.length,u>a&&(u=a),u&&(e.head&&(B=e.head.extra_len-e.length,e.head.extra||(e.head.extra=new Uint8Array(e.head.extra_len)),e.head.extra.set(i.subarray(r,r+u),B)),512&e.flags&&4&e.wrap&&(e.check=rt(e.check,i,u,r)),a-=u,r+=u,e.length-=u),e.length))break t;e.length=0,e.mode=16186;case 16186:if(2048&e.flags){if(a===0)break t;u=0;do B=i[r+u++],e.head&&B&&e.length<65536&&(e.head.name+=String.fromCharCode(B));while(B&&u<a);if(512&e.flags&&4&e.wrap&&(e.check=rt(e.check,i,u,r)),a-=u,r+=u,B)break t}else e.head&&(e.head.name=null);e.length=0,e.mode=16187;case 16187:if(4096&e.flags){if(a===0)break t;u=0;do B=i[r+u++],e.head&&B&&e.length<65536&&(e.head.comment+=String.fromCharCode(B));while(B&&u<a);if(512&e.flags&&4&e.wrap&&(e.check=rt(e.check,i,u,r)),a-=u,r+=u,B)break t}else e.head&&(e.head.comment=null);e.mode=16188;case 16188:if(512&e.flags){for(;h<16;){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}if(4&e.wrap&&l!==(65535&e.check)){n.msg="header crc mismatch",e.mode=J;break}l=0,h=0}e.head&&(e.head.hcrc=e.flags>>9&1,e.head.done=!0),n.adler=e.check=0,e.mode=Kt;break;case 16189:for(;h<32;){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}n.adler=e.check=Bo(l),l=0,h=0,e.mode=$n;case $n:if(e.havedict===0)return n.next_out=o,n.avail_out=A,n.next_in=r,n.avail_in=a,e.hold=l,e.bits=h,vh;n.adler=e.check=1,e.mode=Kt;case Kt:if(t===Gh||t===qn)break t;case ss:if(e.last){l>>>=7&h,h-=7&h,e.mode=os;break}for(;h<3;){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}switch(e.last=1&l,l>>>=1,h-=1,3&l){case 0:e.mode=16193;break;case 1:if(Dh(e),e.mode=ti,t===qn){l>>>=2,h-=2;break t}break;case 2:e.mode=16196;break;case 3:n.msg="invalid block type",e.mode=J}l>>>=2,h-=2;break;case 16193:for(l>>>=7&h,h-=7&h;h<32;){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}if((65535&l)!=(l>>>16^65535)){n.msg="invalid stored block lengths",e.mode=J;break}if(e.length=65535&l,l=0,h=0,e.mode=rs,t===qn)break t;case rs:e.mode=16195;case 16195:if(u=e.length,u){if(u>a&&(u=a),u>A&&(u=A),u===0)break t;s.set(i.subarray(r,r+u),o),a-=u,r+=u,A-=u,o+=u,e.length-=u;break}e.mode=Kt;break;case 16196:for(;h<14;){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}if(e.nlen=257+(31&l),l>>>=5,h-=5,e.ndist=1+(31&l),l>>>=5,h-=5,e.ncode=4+(15&l),l>>>=4,h-=4,e.nlen>286||e.ndist>30){n.msg="too many length or distance symbols",e.mode=J;break}e.have=0,e.mode=16197;case 16197:for(;e.have<e.ncode;){for(;h<3;){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}e.lens[T[e.have++]]=7&l,l>>>=3,h-=3}for(;e.have<19;)e.lens[T[e.have++]]=0;if(e.lencode=e.lendyn,e.lenbits=7,b={bits:e.lenbits},w=gn(0,e.lens,0,19,e.lencode,0,e.work,b),e.lenbits=b.bits,w){n.msg="invalid code lengths set",e.mode=J;break}e.have=0,e.mode=16198;case 16198:for(;e.have<e.nlen+e.ndist;){for(;y=e.lencode[l&(1<<e.lenbits)-1],f=y>>>24,m=y>>>16&255,x=65535&y,!(f<=h);){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}if(x<16)l>>>=f,h-=f,e.lens[e.have++]=x;else{if(x===16){for(v=f+2;h<v;){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}if(l>>>=f,h-=f,e.have===0){n.msg="invalid bit length repeat",e.mode=J;break}B=e.lens[e.have-1],u=3+(3&l),l>>>=2,h-=2}else if(x===17){for(v=f+3;h<v;){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}l>>>=f,h-=f,B=0,u=3+(7&l),l>>>=3,h-=3}else{for(v=f+7;h<v;){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}l>>>=f,h-=f,B=0,u=11+(127&l),l>>>=7,h-=7}if(e.have+u>e.nlen+e.ndist){n.msg="invalid bit length repeat",e.mode=J;break}for(;u--;)e.lens[e.have++]=B}}if(e.mode===J)break;if(e.lens[256]===0){n.msg="invalid code -- missing end-of-block",e.mode=J;break}if(e.lenbits=9,b={bits:e.lenbits},w=gn(1,e.lens,0,e.nlen,e.lencode,0,e.work,b),e.lenbits=b.bits,w){n.msg="invalid literal/lengths set",e.mode=J;break}if(e.distbits=6,e.distcode=e.distdyn,b={bits:e.distbits},w=gn(2,e.lens,e.nlen,e.ndist,e.distcode,0,e.work,b),e.distbits=b.bits,w){n.msg="invalid distances set",e.mode=J;break}if(e.mode=ti,t===qn)break t;case ti:e.mode=ei;case ei:if(a>=6&&A>=258){n.next_out=o,n.avail_out=A,n.next_in=r,n.avail_in=a,e.hold=l,e.bits=h,Qh(n,d),o=n.next_out,s=n.output,A=n.avail_out,r=n.next_in,i=n.input,a=n.avail_in,l=e.hold,h=e.bits,e.mode===Kt&&(e.back=-1);break}for(e.back=0;y=e.lencode[l&(1<<e.lenbits)-1],f=y>>>24,m=y>>>16&255,x=65535&y,!(f<=h);){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}if(m&&!(240&m)){for(E=f,M=m,L=x;y=e.lencode[L+((l&(1<<E+M)-1)>>E)],f=y>>>24,m=y>>>16&255,x=65535&y,!(E+f<=h);){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}l>>>=E,h-=E,e.back+=E}if(l>>>=f,h-=f,e.back+=f,e.length=x,m===0){e.mode=16205;break}if(32&m){e.back=-1,e.mode=Kt;break}if(64&m){n.msg="invalid literal/length code",e.mode=J;break}e.extra=15&m,e.mode=16201;case 16201:if(e.extra){for(v=e.extra;h<v;){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}e.length+=l&(1<<e.extra)-1,l>>>=e.extra,h-=e.extra,e.back+=e.extra}e.was=e.length,e.mode=16202;case 16202:for(;y=e.distcode[l&(1<<e.distbits)-1],f=y>>>24,m=y>>>16&255,x=65535&y,!(f<=h);){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}if(!(240&m)){for(E=f,M=m,L=x;y=e.distcode[L+((l&(1<<E+M)-1)>>E)],f=y>>>24,m=y>>>16&255,x=65535&y,!(E+f<=h);){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}l>>>=E,h-=E,e.back+=E}if(l>>>=f,h-=f,e.back+=f,64&m){n.msg="invalid distance code",e.mode=J;break}e.offset=x,e.extra=15&m,e.mode=16203;case 16203:if(e.extra){for(v=e.extra;h<v;){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}e.offset+=l&(1<<e.extra)-1,l>>>=e.extra,h-=e.extra,e.back+=e.extra}if(e.offset>e.dmax){n.msg="invalid distance too far back",e.mode=J;break}e.mode=16204;case 16204:if(A===0)break t;if(u=d-A,e.offset>u){if(u=e.offset-u,u>e.whave&&e.sane){n.msg="invalid distance too far back",e.mode=J;break}u>e.wnext?(u-=e.wnext,p=e.wsize-u):p=e.wnext-u,u>e.length&&(u=e.length),I=e.window}else I=s,p=o-e.offset,u=e.length;u>A&&(u=A),A-=u,e.length-=u;do s[o++]=I[p++];while(--u);e.length===0&&(e.mode=ei);break;case 16205:if(A===0)break t;s[o++]=e.length,A--,e.mode=ei;break;case os:if(e.wrap){for(;h<32;){if(a===0)break t;a--,l|=i[r++]<<h,h+=8}if(d-=A,n.total_out+=d,e.total+=d,4&e.wrap&&d&&(n.adler=e.check=e.flags?rt(e.check,s,d,o-d):on(e.check,s,d,o-d)),d=A,4&e.wrap&&(e.flags?l:Bo(l))!==e.check){n.msg="incorrect data check",e.mode=J;break}l=0,h=0}e.mode=16207;case 16207:if(e.wrap&&e.flags){for(;h<32;){if(a===0)break t;a--,l+=i[r++]<<h,h+=8}if(4&e.wrap&&l!==(4294967295&e.total)){n.msg="incorrect length check",e.mode=J;break}l=0,h=0}e.mode=16208;case 16208:w=Lh;break t;case J:w=mo;break t;case 16210:return Io;default:return St}return n.next_out=o,n.avail_out=A,n.next_in=r,n.avail_in=a,e.hold=l,e.bits=h,(e.wsize||d!==n.avail_out&&e.mode<J&&(e.mode<os||t!==fo))&&Mo(n,n.output,n.next_out,d-n.avail_out),c-=n.avail_in,d-=n.avail_out,n.total_in+=c,n.total_out+=d,e.total+=d,4&e.wrap&&d&&(n.adler=e.check=e.flags?rt(e.check,s,d,n.next_out-d):on(e.check,s,d,n.next_out-d)),n.data_type=e.bits+(e.last?64:0)+(e.mode===Kt?128:0)+(e.mode===ti||e.mode===rs?256:0),(c===0&&d===0||t===fo)&&w===Be&&(w=Rh),w},Wt={inflateReset:Eo,inflateReset2:wo,inflateResetKeep:yo,inflateInit:n=>xo(n,15),inflateInit2:xo,inflate:kh,inflateEnd:n=>{if(ye(n))return St;let t=n.state;return t.window&&(t.window=null),n.state=null,Be},inflateGetHeader:(n,t)=>{if(ye(n))return St;const e=n.state;return 2&e.wrap?(e.head=t,t.done=!1,Be):St},inflateSetDictionary:(n,t)=>{const e=t.length;let i,s,r;return ye(n)?St:(i=n.state,i.wrap!==0&&i.mode!==$n?St:i.mode===$n&&(s=1,s=on(s,t,e,0),s!==i.check)?mo:(r=Mo(n,t,e,e),r?(i.mode=16210,Io):(i.havedict=1,Be)))},inflateInfo:"pako inflate (from Nodeca project)"},Nh=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1};const bo=Object.prototype.toString,{Z_NO_FLUSH:Fh,Z_FINISH:Uh,Z_OK:pn,Z_STREAM_END:ls,Z_NEED_DICT:hs,Z_STREAM_ERROR:Ph,Z_DATA_ERROR:So,Z_MEM_ERROR:zh}=fe;function fn(n){this.options=ho({chunkSize:65536,windowBits:15,to:""},n||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,t.windowBits===0&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||n&&n.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(15&t.windowBits||(t.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new go,this.strm.avail_out=0;let e=Wt.inflateInit2(this.strm,t.windowBits);if(e!==pn)throw new Error(pe[e]);if(this.header=new Nh,Wt.inflateGetHeader(this.strm,this.header),t.dictionary&&(typeof t.dictionary=="string"?t.dictionary=ns(t.dictionary):bo.call(t.dictionary)==="[object ArrayBuffer]"&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(e=Wt.inflateSetDictionary(this.strm,t.dictionary),e!==pn)))throw new Error(pe[e])}function cs(n,t){const e=new fn(t);if(e.push(n),e.err)throw e.msg||pe[e.err];return e.result}fn.prototype.push=function(n,t){const e=this.strm,i=this.options.chunkSize,s=this.options.dictionary;let r,o,a;if(this.ended)return!1;for(o=t===~~t?t:t===!0?Uh:Fh,bo.call(n)==="[object ArrayBuffer]"?e.input=new Uint8Array(n):e.input=n,e.next_in=0,e.avail_in=e.input.length;;){for(e.avail_out===0&&(e.output=new Uint8Array(i),e.next_out=0,e.avail_out=i),r=Wt.inflate(e,o),r===hs&&s&&(r=Wt.inflateSetDictionary(e,s),r===pn?r=Wt.inflate(e,o):r===So&&(r=hs));e.avail_in>0&&r===ls&&e.state.wrap>0&&n[e.next_in]!==0;)Wt.inflateReset(e),r=Wt.inflate(e,o);switch(r){case Ph:case So:case hs:case zh:return this.onEnd(r),this.ended=!0,!1}if(a=e.avail_out,e.next_out&&(e.avail_out===0||r===ls))if(this.options.to==="string"){let A=ph(e.output,e.next_out),l=e.next_out-A,h=gh(e.output,A);e.next_out=l,e.avail_out=i-l,l&&e.output.set(e.output.subarray(A,A+l),0),this.onData(h)}else this.onData(e.output.length===e.next_out?e.output:e.output.subarray(0,e.next_out));if(r!==pn||a!==0){if(r===ls)return r=Wt.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,!0;if(e.avail_in===0)break}}return!0},fn.prototype.onData=function(n){this.chunks.push(n)},fn.prototype.onEnd=function(n){n===pn&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=co(this.chunks)),this.chunks=[],this.err=n,this.msg=this.strm.msg};var Xh={Inflate:fn,inflate:cs,inflateRaw:function(n,t){return(t=t||{}).raw=!0,cs(n,t)},ungzip:cs,constants:fe};const{Deflate:Zh,deflate:Hh,deflateRaw:Kh,gzip:Wh}=xh,{Inflate:Oh,inflate:Yh,inflateRaw:Vh,ungzip:Jh}=Xh;var us={Deflate:Zh,deflate:Hh,deflateRaw:Kh,gzip:Wh,Inflate:Oh,inflate:Yh,inflateRaw:Vh,ungzip:Jh,constants:fe};class ds{constructor(t,e,i,s){g(this,"texturesSize",0);g(this,"url");g(this,"headers");g(this,"stats");g(this,"isInitializing");g(this,"isInitialized");g(this,"textureType");g(this,"textureFormatHints",{});g(this,"fileIndex");g(this,"textures");g(this,"renderer");g(this,"hashCode");if(this.url=t,this.renderer=e,this.hashCode=i,this.headers={pragma:"no-cache","cache-control":"no-cache","content-type":"multipart/byteranges"},this.isInitialized=!1,s!=null)for(const r of Object.keys(s))s[r]!=null?this.headers[r]=s[r]:delete this.headers[r]}async init(){this.stats={packagesDownloaded:0,bytesDownloaded:0,bytesFromCache:0},this.isInitializing=!0;const{response:t,warning:e,lastModified:i}=await this.fetchRangeText([0,256]);if(t==null)return{success:!1,message:`Failed to fetch initial header: ${e}.`};let s=t;const r=s.substring(0,16),o=r.substring(0,8);if(o!=="v.00001;")return{success:!1,message:`Invalid version: ${o}.`};const a=Number(r.substring(8,15));if(a>256){const{response:p,warning:I}=await this.fetchRangeText([16,a-16]);if(p==null)return{success:!1,message:`Failed to fetch extended header: ${I}.`};s=p}else s=s.substring(16,a);const A=s.split(";"),l={};for(const p of A){const I=p.split("=");l[I[0]]=I[1]}if(!l.indexSize)return{success:!1,message:"indexSize missing in header.;"};if(l.signature){const p=function(f){let m,x,E,M,L,B,w,y,Q,b=[];function v(U,z,K,V,W,$,X){return U=tt(U,tt(tt(z&K|~z&V,W),X)),tt(Pn(U,$),z)}function T(U,z,K,V,W,$,X){return U=tt(U,tt(tt(z&V|K&~V,W),X)),tt(Pn(U,$),z)}function N(U,z,K,V,W,$,X){return U=tt(U,tt(tt(z^K^V,W),X)),tt(Pn(U,$),z)}function R(U,z,K,V,W,$,X){return U=tt(U,tt(tt(K^(z|~V),W),X)),tt(Pn(U,$),z)}for(b=function(U){let z;const K=U.length,V=16*((K+8-(K+8)%64)/64+1),W=new Array(V-1);let $=0,X=0;for(;X<K;)z=(X-X%4)/4,$=X%4*8,W[z]=W[z]|U.charCodeAt(X)<<$,X++;return z=(X-X%4)/4,$=X%4*8,W[z]=W[z]|128<<$,W[V-2]=K<<3,W[V-1]=K>>>29,W}(f=f.toString()),B=1732584193,w=4023233417,y=2562383102,Q=271733878,m=0;m<b.length;m+=16)x=B,E=w,M=y,L=Q,B=v(B,w,y,Q,b[m+0],7,3614090360),Q=v(Q,B,w,y,b[m+1],12,3905402710),y=v(y,Q,B,w,b[m+2],17,606105819),w=v(w,y,Q,B,b[m+3],22,3250441966),B=v(B,w,y,Q,b[m+4],7,4118548399),Q=v(Q,B,w,y,b[m+5],12,1200080426),y=v(y,Q,B,w,b[m+6],17,2821735955),w=v(w,y,Q,B,b[m+7],22,4249261313),B=v(B,w,y,Q,b[m+8],7,1770035416),Q=v(Q,B,w,y,b[m+9],12,2336552879),y=v(y,Q,B,w,b[m+10],17,4294925233),w=v(w,y,Q,B,b[m+11],22,2304563134),B=v(B,w,y,Q,b[m+12],7,1804603682),Q=v(Q,B,w,y,b[m+13],12,4254626195),y=v(y,Q,B,w,b[m+14],17,2792965006),w=v(w,y,Q,B,b[m+15],22,1236535329),B=T(B,w,y,Q,b[m+1],5,4129170786),Q=T(Q,B,w,y,b[m+6],9,3225465664),y=T(y,Q,B,w,b[m+11],14,643717713),w=T(w,y,Q,B,b[m+0],20,3921069994),B=T(B,w,y,Q,b[m+5],5,3593408605),Q=T(Q,B,w,y,b[m+10],9,38016083),y=T(y,Q,B,w,b[m+15],14,3634488961),w=T(w,y,Q,B,b[m+4],20,3889429448),B=T(B,w,y,Q,b[m+9],5,568446438),Q=T(Q,B,w,y,b[m+14],9,3275163606),y=T(y,Q,B,w,b[m+3],14,4107603335),w=T(w,y,Q,B,b[m+8],20,1163531501),B=T(B,w,y,Q,b[m+13],5,2850285829),Q=T(Q,B,w,y,b[m+2],9,4243563512),y=T(y,Q,B,w,b[m+7],14,1735328473),w=T(w,y,Q,B,b[m+12],20,2368359562),B=N(B,w,y,Q,b[m+5],4,4294588738),Q=N(Q,B,w,y,b[m+8],11,2272392833),y=N(y,Q,B,w,b[m+11],16,1839030562),w=N(w,y,Q,B,b[m+14],23,4259657740),B=N(B,w,y,Q,b[m+1],4,2763975236),Q=N(Q,B,w,y,b[m+4],11,1272893353),y=N(y,Q,B,w,b[m+7],16,4139469664),w=N(w,y,Q,B,b[m+10],23,3200236656),B=N(B,w,y,Q,b[m+13],4,681279174),Q=N(Q,B,w,y,b[m+0],11,3936430074),y=N(y,Q,B,w,b[m+3],16,3572445317),w=N(w,y,Q,B,b[m+6],23,76029189),B=N(B,w,y,Q,b[m+9],4,3654602809),Q=N(Q,B,w,y,b[m+12],11,3873151461),y=N(y,Q,B,w,b[m+15],16,530742520),w=N(w,y,Q,B,b[m+2],23,3299628645),B=R(B,w,y,Q,b[m+0],6,4096336452),Q=R(Q,B,w,y,b[m+7],10,1126891415),y=R(y,Q,B,w,b[m+14],15,2878612391),w=R(w,y,Q,B,b[m+5],21,4237533241),B=R(B,w,y,Q,b[m+12],6,1700485571),Q=R(Q,B,w,y,b[m+3],10,2399980690),y=R(y,Q,B,w,b[m+10],15,4293915773),w=R(w,y,Q,B,b[m+1],21,2240044497),B=R(B,w,y,Q,b[m+8],6,1873313359),Q=R(Q,B,w,y,b[m+15],10,4264355552),y=R(y,Q,B,w,b[m+6],15,2734768916),w=R(w,y,Q,B,b[m+13],21,1309151649),B=R(B,w,y,Q,b[m+4],6,4149444226),Q=R(Q,B,w,y,b[m+11],10,3174756917),y=R(y,Q,B,w,b[m+2],15,718787259),w=R(w,y,Q,B,b[m+9],21,3951481745),B=tt(B,x),w=tt(w,E),y=tt(y,M),Q=tt(Q,L);function D(U){let z,K,V="",W="";for(K=0;K<=3;K++)z=U>>>8*K&255,W="0"+z.toString(16),V+=W.substring(W.length-2,W.length);return V}return(D(B)+D(w)+D(y)+D(Q)).toLowerCase()}(this.hashCode),I=p.substring(0,4)+p.substring(6,8)+p.substring(10,14)+p.substring(18,22)+p.substring(24,26);if(l.signature!==I)return{success:!1,message:`Signature mismatch: expected ${I}, got ${l.signature}.`}}const h=Number(l.indexSize),c=await this.fetchRange([a,a+h-1]),d=us.inflate(c);this.textureType=l.textureType||"jpg";const u=new TextDecoder().decode(d).split(";");this.fileIndex={},this.textures={};for(let p=0;p<u.length-3;){const I=Number(u[p++]),f=Number(u[p++]),m=u[p++];this.fileIndex[m]=[I+a+h,f],Y.instance.logRootFiles&&m==="collider.xrgc"&&console.log(`Embedded collider file size: ${Un(f)}`)}for(const p in this.fileIndex)this.fileIndex.hasOwnProperty(p)&&(p.endsWith("ktx2")||p.endsWith("jpg")||p.endsWith("png"))&&(this.textures[p]=new Zl(p,this.renderer));return this.isInitializing=!1,this.isInitialized=!0,{success:!0,lastModified:i}}getFileSize(t){return this.isInitialized&&this.fileIndex[t]?this.fileIndex[t][1]:0}getFileIndex(){return this.fileIndex}releaseFiles(t){for(const e of t)if(e in this.textures){const i=this.textures[e];i.release()&&(this.texturesSize-=i.size)}}dispose(){Object.values(this.textures).forEach(t=>{this.texturesSize-=t.size,t.dispose()}),this.textures={}}async fetchFiles(t){const e={},i=[],s=new Set;for(const o of t)if(o in this.textures&&this.textures[o].state==Fe.Available){const a=this.textures[o];e[o]=a.loadTexture(),a.disposeTimer&&(clearTimeout(a.disposeTimer),a.disposeTimer=void 0)}else if(this.fileIndex[o]&&!s.has(o))i.push({p:this.fileIndex[o][0],f:o}),s.add(o);else{const a=`${o}.compressed`;this.fileIndex[a]&&!s.has(a)&&(i.push({p:this.fileIndex[a][0],f:a}),s.add(a))}i.sort((o,a)=>o.p-a.p);const r=[];for(let o=0;o<i.length;o++){const a=this.fileIndex[i[o].f][0],A=this.fileIndex[i[o].f][1],l=i[o].f;if(o==0||a>r[r.length-1].e+1){const h={s:a,e:a+A-1,fs:[l],fr:[[0,A]]};r.push(h)}else{r[r.length-1].e=a+A-1,r[r.length-1].fs.push(l);const h=r[r.length-1].fr,c=h[h.length-1][1];r[r.length-1].fr.push([c,c+A])}}try{let o=[];for(const a of r)o.push(this.fetchRange([a.s,a.e]).then(A=>{a.b=A})),o.length>=200&&(await Promise.all(o),o=[]);await Promise.all(o)}catch(o){console.error("Error fetching : "+t+" _ "+o)}for(const o of r){const a=o.b,A=[];for(let l=0;l<o.fs.length;l++){const h=o.fr[l],c=a.slice(h[0],h[1]);if(o.fs[l]in this.textures){const d=o.fs[l],u=this.getTextureOptions(d);A.push(this.textures[d].createTexture(c,u).then(p=>{e[d]=p,this.texturesSize+=this.textures[d].size}))}else e[o.fs[l]]=c}await Promise.all(A)}for(const o in e){const a=o.indexOf(".compressed");a!==-1&&(e[o.substring(0,a)]=us.inflate(e[o]),delete e[o])}return e}async fetchFileText(t){const e=await this.fetchFile(t);return new TextDecoder().decode(e)}async fetchRange(t){this.stats.packagesDownloaded++,this.stats.bytesDownloaded+=t[1]-t[0]+1;const e=this.headers;return e.range="bytes="+t[0].toString()+"-"+t[1].toString(),fetch(this.url,{headers:e}).then(i=>{if(i.ok)return i.arrayBuffer();throw"Range "+t[0].toString()+"-"+t[1].toString()+" failed!"}).then(i=>new Uint8Array(i)).catch(i=>{throw console.error(i),i})}async fetchHttpHeader(){try{const t=await fetch(this.url,{method:"HEAD",headers:this.headers});return t.ok?{headers:t.headers}:{warning:`Request failed with status ${t.status}.`}}catch(t){return{warning:t.message||"Unknown error"}}}async fetchRangeText(t){const e={...this.headers};e.range=`bytes=${t[0]}-${t[0]+t[1]-1}`;try{const i=await fetch(this.url,{headers:e});return i.ok?{response:await i.text()}:{warning:`Range ${t[0]}-${t[1]} failed with status ${i.status}.`}}catch(i){return{warning:i.message||"Unknown error"}}}async fetchFile(t){if(!this.isInitialized&&!this.isInitializing)throw new Error("ModelSource needs to be initialised before fetching files.");for(;this.isInitializing;)await new Promise(e=>{setTimeout(e,100)});if(this.fileIndex[t]){const e=this.fileIndex[t][0],i=this.fileIndex[t][1];return await this.fetchRange([e,e+i-1])}if(this.fileIndex[t+".compressed"]){const e=this.fileIndex[t+".compressed"][0],i=this.fileIndex[t+".compressed"][1],s=await this.fetchRange([e,e+i-1]);return us.inflate(s)}return new Uint8Array}setTextureFormatHint(t,e){this.textureFormatHints[t]=this.textureFormatHints[t]==="rgba"?"rgba":e}getTextureFormatHint(t){return this.textureFormatHints[t]}getTextureOptions(t){const e=this.getTextureFormatHint(t);return e?{format:e}:void 0}}let re=class wr{constructor(t=0,e=0,i=0,s=1){g(this,"r");g(this,"g");g(this,"b");g(this,"a");typeof t=="number"?(this.r=t,this.g=e,this.b=i,this.a=s):(this.r=t.r,this.g=t.g,this.b=t.b,this.a=t.a)}static fromArray(t){return t==null?null:new wr(t[0],t[1],t[2],t.length>=4?t[3]:1)}static fromArrayAllowNull(t){return t==null?null:wr.fromArray(t)}};class qh{constructor(t,e){g(this,"indices");g(this,"positions");g(this,"normals");g(this,"uvs");g(this,"colors");g(this,"boneWeights");g(this,"boneIndices");g(this,"morphTargets");g(this,"uvBoundsMinX");g(this,"uvBoundsMaxX");g(this,"uvBoundsMinY");g(this,"uvBoundsMaxY");if(t&&e===Mt.Geometry){const i=t;this.indices=i.indBuff,this.positions=i.posBuff,this.normals=i.norBuff,this.uvs=[],this.uvs.push(i.uvBuff[0]??new Float32Array);for(let s=1;s<i.uvBuff.length;s++)this.uvs.push(i.uvBuff[s]);this.colors=i.colorBuff,this.boneWeights=i.boneWeights,this.boneIndices=i.boneIndices,this.morphTargets=i.morphTargets,this.uvBoundsMinX=i.uvBoundsMinX||[],this.uvBoundsMaxX=i.uvBoundsMaxX||[],this.uvBoundsMinY=i.uvBoundsMinY||[],this.uvBoundsMaxY=i.uvBoundsMaxY||[]}}get hasBoneWeights(){return this.boneWeights&&this.boneIndices}get hasMorphTargets(){return this.morphTargets!=null}}class Ee extends qh{constructor(e,i,s,r){super(s,r);g(this,"node");g(this,"animation");g(this,"normalScale");g(this,"emissiveColor");g(this,"alphaMode");g(this,"color");g(this,"metalness");g(this,"roughness");g(this,"aoScale");g(this,"isDoubleSided");g(this,"isLightMapRgbm");g(this,"instanceTransforms");if(this.node=e,e.animation&&(this.animation=i[e.animation]),s)switch(r){case Mt.Geometry:{const o=s;this.alphaMode=o.alphaMode,this.color=re.fromArrayAllowNull(o.albedo),this.metalness=o.metalness,this.roughness=o.roughness,this.aoScale=o.occlusionScale,this.isDoubleSided=o.isDoubleSided,this.isLightMapRgbm=o.isLightMapRgbm,this.normalScale=o.normalScale,this.emissiveColor=re.fromArrayAllowNull(o.emissiveScale);break}case Mt.Transforms:this.instanceTransforms=s}}}const _o="dmFyIFplPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgQmU9KEEsRSxGKT0+RSBpbiBBP1plKEEsRSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Rn0pOkFbRV09Rjt2YXIgbD0oQSxFLEYpPT5CZShBLHR5cGVvZiBFIT0ic3ltYm9sIj9FKyIiOkUsRik7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBBPShzPT4oc1tzLkdlb21ldHJ5PTBdPSJHZW9tZXRyeSIsc1tzLlRyYW5zZm9ybXM9MV09IlRyYW5zZm9ybXMiLHMpKShBfHx7fSk7ZnVuY3Rpb24gRShzLGUpe3JldHVybiBNYXRoLmFicyhzLWUpPD1OdW1iZXIuRVBTSUxPTn1jb25zdCBiPWNsYXNzIGJ7Y29uc3RydWN0b3IoZT0wLHQ9MCxpPTApe2UubGVuZ3RoPT09Mz8odGhpcy54PWVbMF0sdGhpcy55PWVbMV0sdGhpcy56PWVbMl0pOih0aGlzLng9ZSx0aGlzLnk9dCx0aGlzLno9aSl9YWRkKGUpe3JldHVybiB0aGlzLngrPWUueCx0aGlzLnkrPWUueSx0aGlzLnorPWUueix0aGlzfWFkZDIoZSx0KXtyZXR1cm4gdGhpcy54PWUueCt0LngsdGhpcy55PWUueSt0LnksdGhpcy56PWUueit0LnosdGhpc31hZGRTY2FsYXIoZSl7cmV0dXJuIHRoaXMueCs9ZSx0aGlzLnkrPWUsdGhpcy56Kz1lLHRoaXN9YWRkU2NhbGVkKGUsdCl7cmV0dXJuIHRoaXMueCs9ZS54KnQsdGhpcy55Kz1lLnkqdCx0aGlzLnorPWUueip0LHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfWNvcHkoZSl7cmV0dXJuIHRoaXMueD1lLngsdGhpcy55PWUueSx0aGlzLno9ZS56LHRoaXN9Y3Jvc3MoZSx0KXtjb25zdCBpPWUueCxuPWUueSxoPWUueix5PXQueCxhPXQueSxyPXQuejtyZXR1cm4gdGhpcy54PW4qci1hKmgsdGhpcy55PWgqeS1yKmksdGhpcy56PWkqYS15Km4sdGhpc31kaXN0YW5jZShlKXtjb25zdCB0PXRoaXMueC1lLngsaT10aGlzLnktZS55LG49dGhpcy56LWUuejtyZXR1cm4gTWF0aC5zcXJ0KHQqdCtpKmkrbipuKX1kaXYoZSl7cmV0dXJuIHRoaXMueC89ZS54LHRoaXMueS89ZS55LHRoaXMuei89ZS56LHRoaXN9ZGl2MihlLHQpe3JldHVybiB0aGlzLng9ZS54L3QueCx0aGlzLnk9ZS55L3QueSx0aGlzLno9ZS56L3Queix0aGlzfWRpdlNjYWxhcihlKXtyZXR1cm4gdGhpcy54Lz1lLHRoaXMueS89ZSx0aGlzLnovPWUsdGhpc31kb3QoZSl7cmV0dXJuIHRoaXMueCplLngrdGhpcy55KmUueSt0aGlzLnoqZS56fWVxdWFscyhlKXtyZXR1cm4gdGhpcy54PT09ZS54JiZ0aGlzLnk9PT1lLnkmJnRoaXMuej09PWUuen1lcXVhbHNBcHByb3goZSx0PTFlLTYpe3JldHVybiBNYXRoLmFicyh0aGlzLngtZS54KTx0JiZNYXRoLmFicyh0aGlzLnktZS55KTx0JiZNYXRoLmFicyh0aGlzLnotZS56KTx0fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnopfWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56fWxlcnAoZSx0LGkpe3JldHVybiB0aGlzLng9ZS54K2kqKHQueC1lLngpLHRoaXMueT1lLnkraSoodC55LWUueSksdGhpcy56PWUueitpKih0LnotZS56KSx0aGlzfW11bChlKXtyZXR1cm4gdGhpcy54Kj1lLngsdGhpcy55Kj1lLnksdGhpcy56Kj1lLnosdGhpc31tdWwyKGUsdCl7cmV0dXJuIHRoaXMueD1lLngqdC54LHRoaXMueT1lLnkqdC55LHRoaXMuej1lLnoqdC56LHRoaXN9bXVsU2NhbGFyKGUpe3JldHVybiB0aGlzLngqPWUsdGhpcy55Kj1lLHRoaXMueio9ZSx0aGlzfW5vcm1hbGl6ZShlPXRoaXMpe2NvbnN0IHQ9ZS54KmUueCtlLnkqZS55K2UueiplLno7aWYodD4wKXtjb25zdCBpPTEvTWF0aC5zcXJ0KHQpO3RoaXMueD1lLngqaSx0aGlzLnk9ZS55KmksdGhpcy56PWUueippfXJldHVybiB0aGlzfWZsb29yKGU9dGhpcyl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKGUueCksdGhpcy55PU1hdGguZmxvb3IoZS55KSx0aGlzLno9TWF0aC5mbG9vcihlLnopLHRoaXN9Y2VpbChlPXRoaXMpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKGUueCksdGhpcy55PU1hdGguY2VpbChlLnkpLHRoaXMuej1NYXRoLmNlaWwoZS56KSx0aGlzfXJvdW5kKGU9dGhpcyl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKGUueCksdGhpcy55PU1hdGgucm91bmQoZS55KSx0aGlzLno9TWF0aC5yb3VuZChlLnopLHRoaXN9bWluKGUpe3JldHVybiBlLng8dGhpcy54JiYodGhpcy54PWUueCksZS55PHRoaXMueSYmKHRoaXMueT1lLnkpLGUuejx0aGlzLnomJih0aGlzLno9ZS56KSx0aGlzfW1heChlKXtyZXR1cm4gZS54PnRoaXMueCYmKHRoaXMueD1lLngpLGUueT50aGlzLnkmJih0aGlzLnk9ZS55KSxlLno+dGhpcy56JiYodGhpcy56PWUueiksdGhpc31wcm9qZWN0KGUpe2NvbnN0IHQ9KHRoaXMueCplLngrdGhpcy55KmUueSt0aGlzLnoqZS56KS8oZS54KmUueCtlLnkqZS55K2UueiplLnopO3JldHVybiB0aGlzLng9ZS54KnQsdGhpcy55PWUueSp0LHRoaXMuej1lLnoqdCx0aGlzfXNldChlLHQsaSl7cmV0dXJuIHRoaXMueD1lLHRoaXMueT10LHRoaXMuej1pLHRoaXN9c3ViKGUpe3JldHVybiB0aGlzLngtPWUueCx0aGlzLnktPWUueSx0aGlzLnotPWUueix0aGlzfXN1YjIoZSx0KXtyZXR1cm4gdGhpcy54PWUueC10LngsdGhpcy55PWUueS10LnksdGhpcy56PWUuei10LnosdGhpc31zdWJTY2FsYXIoZSl7cmV0dXJuIHRoaXMueC09ZSx0aGlzLnktPWUsdGhpcy56LT1lLHRoaXN9ZnJvbUFycmF5KGUsdD0wKXtyZXR1cm4gdGhpcy54PWVbdF0/P3RoaXMueCx0aGlzLnk9ZVt0KzFdPz90aGlzLnksdGhpcy56PWVbdCsyXT8/dGhpcy56LHRoaXN9dG9TdHJpbmcoKXtyZXR1cm5gWyR7dGhpcy54fSwgJHt0aGlzLnl9LCAke3RoaXMuen1dYH10b0FycmF5KGU9W10sdD0wKXtyZXR1cm4gZVt0XT10aGlzLngsZVt0KzFdPXRoaXMueSxlW3QrMl09dGhpcy56LGV9fTtiLlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgYigwLDAsMCkpLGIuSEFMRj1PYmplY3QuZnJlZXplKG5ldyBiKC41LC41LC41KSksYi5PTkU9T2JqZWN0LmZyZWV6ZShuZXcgYigxLDEsMSkpLGIuVVA9T2JqZWN0LmZyZWV6ZShuZXcgYigwLDEsMCkpLGIuRE9XTj1PYmplY3QuZnJlZXplKG5ldyBiKDAsLTEsMCkpLGIuUklHSFQ9T2JqZWN0LmZyZWV6ZShuZXcgYigxLDAsMCkpLGIuTEVGVD1PYmplY3QuZnJlZXplKG5ldyBiKC0xLDAsMCkpLGIuRk9SV0FSRD1PYmplY3QuZnJlZXplKG5ldyBiKDAsMCwtMSkpLGIuQkFDSz1PYmplY3QuZnJlZXplKG5ldyBiKDAsMCwxKSk7bGV0IEY9YjtjbGFzcyBZe2NvbnN0cnVjdG9yKGU9MCx0PTAsaT0wKXtsKHRoaXMsIngiKTtsKHRoaXMsInkiKTtsKHRoaXMsInoiKTt0eXBlb2YgZT09Im51bWJlciI/KHRoaXMueD1lLHRoaXMueT10LHRoaXMuej1pKToodGhpcy54PWUueCx0aGlzLnk9ZS55LHRoaXMuej1lLnopfXN0YXRpYyBmcm9tQXJyYXkoZSl7cmV0dXJuIGU9PW51bGw/bnVsbDpuZXcgWShlWzBdLGVbMV0sZVsyXSl9YWRkKGUpe3JldHVybiB0aGlzLngrPWUueCx0aGlzLnkrPWUueSx0aGlzLnorPWUueix0aGlzfXN0YXRpYyBhZGQoZSx0KXtyZXR1cm4gbmV3IFkoZS54K3QueCxlLnkrdC55LGUueit0LnopfXN1YihlKXtyZXR1cm4gdGhpcy54LT1lLngsdGhpcy55LT1lLnksdGhpcy56LT1lLnosdGhpc31zdGF0aWMgc3ViKGUsdCl7cmV0dXJuIG5ldyBZKGUueC10LngsZS55LXQueSxlLnotdC56KX1zdWJTY2FsYXIoZSl7cmV0dXJuIHRoaXMueC09ZSx0aGlzLnktPWUsdGhpcy56LT1lLHRoaXN9c3RhdGljIHN1YlNjYWxhcihlLHQpe3JldHVybiBuZXcgWShlLngtdCxlLnktdCxlLnotdCl9bXVsKGUpe3JldHVybiB0aGlzLngqPWUueCx0aGlzLnkqPWUueSx0aGlzLnoqPWUueix0aGlzfXN0YXRpYyBtdWwoZSx0KXtyZXR1cm4gbmV3IFkoZS54KnQueCxlLnkqdC55LGUueip0LnopfW11bFNjYWxhcihlKXtyZXR1cm4gdGhpcy54Kj1lLHRoaXMueSo9ZSx0aGlzLnoqPWUsdGhpc31zdGF0aWMgbXVsU2NhbGFyKGUsdCl7cmV0dXJuIG5ldyBZKGUueCp0LGUueSp0LGUueip0KX1kb3QoZSl7cmV0dXJuIHRoaXMueCplLngrdGhpcy55KmUueSt0aGlzLnoqZS56fXN0YXRpYyBkb3QoZSx0KXtyZXR1cm4gZS54KnQueCtlLnkqdC55K2Uueip0Lnp9Y3Jvc3MoZSl7cmV0dXJuIHRoaXMueD10aGlzLnkqZS56LWUueSp0aGlzLnosdGhpcy55PXRoaXMueiplLngtZS56KnRoaXMueCx0aGlzLno9dGhpcy54KmUueS1lLngqdGhpcy55LHRoaXN9c3RhdGljIGNyb3NzKGUsdCl7cmV0dXJuIG5ldyBZKGUueSp0LnotdC55KmUueixlLnoqdC54LXQueiplLngsZS54KnQueS10LngqZS55KX1kaXYoZSl7cmV0dXJuIHRoaXMueC89ZS54LHRoaXMueS89ZS55LHRoaXMuei89ZS56LHRoaXN9c3RhdGljIGRpdihlLHQpe3JldHVybiBuZXcgWShlLngvdC54LGUueS90LnksZS56L3Queil9ZGl2U2NhbGFyKGUpe3JldHVybiB0aGlzLngvPWUsdGhpcy55Lz1lLHRoaXMuei89ZSx0aGlzfXN0YXRpYyBkaXZTY2FsYXIoZSx0KXtyZXR1cm4gbmV3IFkoZS54L3QsZS55L3QsZS56L3QpfW5vcm1hbGl6ZSgpe2NvbnN0IGU9dGhpcy5sZW5ndGhTcSgpO2lmKGU+MCl7Y29uc3QgdD0xL01hdGguc3FydChlKTt0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dH1yZXR1cm4gdGhpc31zdGF0aWMgbm9ybWFsaXplKGUpe2NvbnN0IHQ9ZS54KmUueCtlLnkqZS55K2UueiplLno7aWYodD4wKXtjb25zdCBpPTEvTWF0aC5zcXJ0KHQpO2UueCo9aSxlLnkqPWksZS56Kj1pfXJldHVybiBlfWxlcnAoZSx0LGkpe3JldHVybiB0aGlzLng9ZS54K2kqKHQueC1lLngpLHRoaXMueT1lLnkraSoodC55LWUueSksdGhpcy56PWUueitpKih0LnotZS56KSx0aGlzfWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnopfXN0YXRpYyBsZW5ndGgoZSl7cmV0dXJuIE1hdGguc3FydChlLngqZS54K2UueSplLnkrZS56KmUueil9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnp9c3RhdGljIGxlbmd0aFNxKGUpe3JldHVybiBlLngqZS54K2UueSplLnkrZS56KmUuen1kaXN0YW5jZShlKXtjb25zdCB0PXRoaXMueC1lLngsaT10aGlzLnktZS55LG49dGhpcy56LWUuejtyZXR1cm4gTWF0aC5zcXJ0KHQqdCtpKmkrbipuKX1zdGF0aWMgZGlzdGFuY2UoZSx0KXtjb25zdCBpPWUueC10Lngsbj1lLnktdC55LGg9ZS56LXQuejtyZXR1cm4gTWF0aC5zcXJ0KGkqaStuKm4raCpoKX1kaXN0YW5jZVNxKGUpe2NvbnN0IHQ9dGhpcy54LWUueCxpPXRoaXMueS1lLnksbj10aGlzLnotZS56O3JldHVybiB0KnQraSppK24qbn1zdGF0aWMgZGlzdGFuY2VTcShlLHQpe2NvbnN0IGk9ZS54LXQueCxuPWUueS10LnksaD1lLnotdC56O3JldHVybiBpKmkrbipuK2gqaH1jbG9uZSgpe3JldHVybiBuZXcgWSh0aGlzLngsdGhpcy55LHRoaXMueil9c3RhdGljIGNsb25lKGUpe3JldHVybiBuZXcgWShlLngsZS55LGUueil9c2V0KGUsdCxpKXtyZXR1cm4gdHlwZW9mIGU9PSJudW1iZXIiPyh0aGlzLng9ZSx0aGlzLnk9dCx0aGlzLno9aSk6KHRoaXMueD1lLngsdGhpcy55PWUueSx0aGlzLno9ZS56KSx0aGlzfWNvcHkoZSl7cmV0dXJuIHRoaXMueD1lLngsdGhpcy55PWUueSx0aGlzLno9ZS56LHRoaXN9ZXF1YWxzKGUsdD0hMSl7cmV0dXJuIHQ/RSh0aGlzLngsZS54KSYmRSh0aGlzLnksZS55KSYmRSh0aGlzLnosZS56KTp0aGlzLng9PT1lLngmJnRoaXMueT09PWUueSYmdGhpcy56PT09ZS56fXN0YXRpYyBlcXVhbHMoZSx0LGk9ITEpe3JldHVybiBpP0UoZS54LHQueCkmJkUoZS55LHQueSkmJkUoZS56LHQueik6ZS54PT09dC54JiZlLnk9PT10LnkmJmUuej09PXQuen10b1N0cmluZygpe3JldHVybmAke3RoaXMueH0sICR7dGhpcy55fSwgJHt0aGlzLnp9YH1zdGF0aWMgdG9TdHJpbmcoZSl7cmV0dXJuYCR7ZS54fSwgJHtlLnl9LCAke2Uuen1gfXRvUGxheUNhbnZhc1ZlY3RvcihlPW5ldyBGKXtyZXR1cm4gZS5zZXQodGhpcy54LHRoaXMueSx0aGlzLnopLGV9fWNsYXNzIEx7Y29uc3RydWN0b3IoZT0wLHQ9MCxpPTAsbj0wLGg9MCx5PTApe2wodGhpcywiX21pblgiKTtsKHRoaXMsIl9taW5ZIik7bCh0aGlzLCJfbWluWiIpO2wodGhpcywiX21heFgiKTtsKHRoaXMsIl9tYXhZIik7bCh0aGlzLCJfbWF4WiIpO2wodGhpcywiX2NlbnRlciIpO2wodGhpcywiX2hhbGZFeHRlbnRzIik7bCh0aGlzLCJfZXh0ZW50cyIpO3RoaXMuX21pblg9ZSx0aGlzLl9taW5ZPXQsdGhpcy5fbWluWj1pLHRoaXMuX21heFg9bix0aGlzLl9tYXhZPWgsdGhpcy5fbWF4Wj15fWdldCBtaW5YKCl7cmV0dXJuIHRoaXMuX21pblh9c2V0IG1pblgoZSl7dGhpcy5fbWluWD1lLHRoaXMucmVzZXRDYWNoZSgpfWdldCBtYXhYKCl7cmV0dXJuIHRoaXMuX21heFh9c2V0IG1heFgoZSl7dGhpcy5fbWF4WD1lLHRoaXMucmVzZXRDYWNoZSgpfWdldCBtaW5ZKCl7cmV0dXJuIHRoaXMuX21pbll9c2V0IG1pblkoZSl7dGhpcy5fbWluWT1lLHRoaXMucmVzZXRDYWNoZSgpfWdldCBtYXhZKCl7cmV0dXJuIHRoaXMuX21heFl9c2V0IG1heFkoZSl7dGhpcy5fbWF4WT1lLHRoaXMucmVzZXRDYWNoZSgpfWdldCBtaW5aKCl7cmV0dXJuIHRoaXMuX21pblp9c2V0IG1pblooZSl7dGhpcy5fbWluWj1lLHRoaXMucmVzZXRDYWNoZSgpfWdldCBtYXhaKCl7cmV0dXJuIHRoaXMuX21heFp9c2V0IG1heFooZSl7dGhpcy5fbWF4Wj1lLHRoaXMucmVzZXRDYWNoZSgpfWdldCBjZW50ZXIoKXtyZXR1cm4gdGhpcy5fY2VudGVyfHwodGhpcy5fY2VudGVyPW5ldyBZKC41Kih0aGlzLl9tYXhYK3RoaXMuX21pblgpLC41Kih0aGlzLl9tYXhZK3RoaXMuX21pblkpLC41Kih0aGlzLl9tYXhaK3RoaXMuX21pblopKSksdGhpcy5fY2VudGVyfWdldCBoYWxmRXh0ZW50cygpe3JldHVybiB0aGlzLl9oYWxmRXh0ZW50c3x8KHRoaXMuX2hhbGZFeHRlbnRzPW5ldyBZKCh0aGlzLl9tYXhYLXRoaXMuX21pblgpLzIsKHRoaXMuX21heFktdGhpcy5fbWluWSkvMiwodGhpcy5fbWF4Wi10aGlzLl9taW5aKS8yKSksdGhpcy5faGFsZkV4dGVudHN9Z2V0IGV4dGVudHMoKXtyZXR1cm4gdGhpcy5fZXh0ZW50c3x8KHRoaXMuX2V4dGVudHM9bmV3IFkodGhpcy5fbWF4WC10aGlzLl9taW5YLHRoaXMuX21heFktdGhpcy5fbWluWSx0aGlzLl9tYXhaLXRoaXMuX21pblopKSx0aGlzLl9leHRlbnRzfWFkZChlLHQ9bmV3IFkpe2UubWluWCt0Lng8dGhpcy5fbWluWCYmKHRoaXMuX21pblg9ZS5taW5YK3QueCksZS5taW5ZK3QueTx0aGlzLl9taW5ZJiYodGhpcy5fbWluWT1lLm1pblkrdC55KSxlLm1pblordC56PHRoaXMuX21pblomJih0aGlzLl9taW5aPWUubWluWit0LnopLGUubWF4WCt0Lng+dGhpcy5fbWF4WCYmKHRoaXMuX21heFg9ZS5tYXhYK3QueCksZS5tYXhZK3QueT50aGlzLl9tYXhZJiYodGhpcy5fbWF4WT1lLm1heFkrdC55KSxlLm1heFordC56PnRoaXMuX21heFomJih0aGlzLl9tYXhaPWUubWF4Wit0LnopLHRoaXMucmVzZXRDYWNoZSgpfXRyYW5zZm9ybShlKXtjb25zdCB0PWUuZGF0YSxpPXRoaXMuY2VudGVyLmNsb25lKCksbj10aGlzLmhhbGZFeHRlbnRzLmNsb25lKCk7bGV0IGg9dFswXSx5PXRbNF0sYT10WzhdLHI9dFsxXSx6PXRbNV0sbz10WzldLGM9dFsyXSxwPXRbNl0sXz10WzEwXTt0aGlzLl9jZW50ZXI9PW51bGwmJih0aGlzLl9jZW50ZXI9bmV3IFkpLHRoaXMuX2NlbnRlci5zZXQodFsxMl0raCppLngreSppLnkrYSppLnosdFsxM10rcippLngreippLnkrbyppLnosdFsxNF0rYyppLngrcCppLnkrXyppLnopLHRoaXMuX2hhbGZFeHRlbnRzPT1udWxsJiYodGhpcy5faGFsZkV4dGVudHM9bmV3IFkpLHRoaXMuX2hhbGZFeHRlbnRzLnNldChNYXRoLmFicyhoKSpuLngrTWF0aC5hYnMoeSkqbi55K01hdGguYWJzKGEpKm4ueixNYXRoLmFicyhyKSpuLngrTWF0aC5hYnMoeikqbi55K01hdGguYWJzKG8pKm4ueixNYXRoLmFicyhjKSpuLngrTWF0aC5hYnMocCkqbi55K01hdGguYWJzKF8pKm4ueiksdGhpcy5fbWluWD10aGlzLl9jZW50ZXIueC10aGlzLl9oYWxmRXh0ZW50cy54LHRoaXMuX21heFg9dGhpcy5fY2VudGVyLngrdGhpcy5faGFsZkV4dGVudHMueCx0aGlzLl9taW5ZPXRoaXMuX2NlbnRlci55LXRoaXMuX2hhbGZFeHRlbnRzLnksdGhpcy5fbWF4WT10aGlzLl9jZW50ZXIueSt0aGlzLl9oYWxmRXh0ZW50cy55LHRoaXMuX21pblo9dGhpcy5fY2VudGVyLnotdGhpcy5faGFsZkV4dGVudHMueix0aGlzLl9tYXhaPXRoaXMuX2NlbnRlci56K3RoaXMuX2hhbGZFeHRlbnRzLnosdGhpcy5fZXh0ZW50cz12b2lkIDB9ZXF1YWxzKGUpe3JldHVybiB0aGlzLl9taW5YPT09ZS5taW5YJiZ0aGlzLl9taW5ZPT09ZS5taW5ZJiZ0aGlzLl9taW5aPT09ZS5taW5aJiZ0aGlzLl9tYXhYPT09ZS5tYXhYJiZ0aGlzLl9tYXhZPT09ZS5tYXhZJiZ0aGlzLl9tYXhaPT09ZS5tYXhaJiZ0aGlzLmNlbnRlci5lcXVhbHMoZS5jZW50ZXIpfWNsb25lKGU9bmV3IFkpe3JldHVybiBuZXcgTCh0aGlzLl9taW5YK2UueCx0aGlzLl9taW5ZK2UueSx0aGlzLl9taW5aK2Uueix0aGlzLl9tYXhYK2UueCx0aGlzLl9tYXhZK2UueSx0aGlzLl9tYXhaK2Uueil9Z2V0TWluKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHRoaXMuX21pblg7Y2FzZSAxOnJldHVybiB0aGlzLl9taW5ZO2Nhc2UgMjpyZXR1cm4gdGhpcy5fbWluWjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgSW5kZXggb3V0IG9mIHJhbmdlOiAke2V9YCl9fWdldE1heChlKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiB0aGlzLl9tYXhYO2Nhc2UgMTpyZXR1cm4gdGhpcy5fbWF4WTtjYXNlIDI6cmV0dXJuIHRoaXMuX21heFo7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYEluZGV4IG91dCBvZiByYW5nZTogJHtlfWApfX10b1N0cmluZygpe3JldHVybmBtaW46ICR7dGhpcy5fbWluWH0sICR7dGhpcy5fbWluWX0sICR7dGhpcy5fbWluWn0sIG1heDogJHt0aGlzLl9tYXhYfSwgJHt0aGlzLl9tYXhZfSwgJHt0aGlzLl9tYXhafWB9cmVzZXRDYWNoZSgpe3RoaXMuX2NlbnRlcj12b2lkIDAsdGhpcy5fZXh0ZW50cz12b2lkIDAsdGhpcy5faGFsZkV4dGVudHM9dm9pZCAwfX1mdW5jdGlvbiB1KHMsZSx0KXtsZXQgaT0wLG49ZTtmb3IoO24+MDspe2NvbnN0IGg9OC0ocy52YWx1ZS0ocy52YWx1ZT4+Mzw8MykpLHk9aDxuP2g6bixhPWgteTtpfD0ofigtMTw8eSk8PGEmdFtzLnZhbHVlPj4zXSk+PmE8PG4teSxuLT15LHMudmFsdWUrPXl9cmV0dXJuIGl9ZnVuY3Rpb24gVChzLGUsdCl7cmV0dXJuIHUocyw4KmUsdCl9ZnVuY3Rpb24gcShzLGUsdD00KXtjb25zdCBpPXMudmFsdWUvODtsZXQgbj0wO2ZvcihsZXQgaD0wO2g8dDtoKyspbnw9ZVtpK2hdPDw4Kmg7cmV0dXJuIHMudmFsdWUrPTgqdCxufWZ1bmN0aW9uIFMocyxlKXtjb25zdCB0PVtdO2ZvcihsZXQgaT0wO2k8NDtpKyspdC5wdXNoKHUocyw4LGUpKTtyZXR1cm4gZnVuY3Rpb24oaSl7Y29uc3Qgbj1uZXcgQXJyYXlCdWZmZXIoNCksaD1uZXcgRGF0YVZpZXcobik7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbih5LGEpe2guc2V0VWludDgoYSx5KX0pLGguZ2V0RmxvYXQzMigwKX0odC5yZXZlcnNlKCkpfWZ1bmN0aW9uIGllKHMpe3JldHVybiBzPj0wPzE6LTF9ZnVuY3Rpb24gZyhzLGUsdCl7cmV0dXJuIHUocyxlLHQpLygoMTw8ZSktMSl9ZnVuY3Rpb24gbmUocyxlLHQpe2NvbnN0IGk9W107Zm9yKGxldCBuPTA7bjxlO24rKylpLnB1c2goUyhzLHQpKTtyZXR1cm4gaX1mdW5jdGlvbiBoZShzLGUsdCl7Y29uc3QgaT1bXTtmb3IobGV0IG49MDtuPGU7bisrKWkucHVzaCh1KHMsOCx0KSk7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxpKX1mdW5jdGlvbiBwZShzLGUpe2NvbnN0IHQ9cy52YWx1ZS84O2xldCBpPXQ7Zm9yKDtlW2ldIT09MDspaSsrO3JldHVybiBzLnZhbHVlKz04KihpKzEtdCksbmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpLmRlY29kZShlLnNsaWNlKHQsaSkpfWZ1bmN0aW9uIEsocyxlKXtyZXR1cm4ocyZlKT09PWV9Y2xhc3Mgd2V7Y29uc3RydWN0b3IoKXtsKHRoaXMsIm5hbWUiKTtsKHRoaXMsIndlaWdodCIpO2wodGhpcywiZGVsdGFQb3NpdGlvbnMiKTtsKHRoaXMsImRlbHRhTm9ybWFscyIpfX1jbGFzcyBfZXtjb25zdHJ1Y3Rvcigpe2wodGhpcywibWF0Iik7bCh0aGlzLCJpbmRCdWZmIik7bCh0aGlzLCJwb3NCdWZmIik7bCh0aGlzLCJub3JCdWZmIik7bCh0aGlzLCJhbHBoYU1vZGUiKTtsKHRoaXMsInV2QnVmZiIpO2wodGhpcywiY29sb3JCdWZmIik7bCh0aGlzLCJib25lV2VpZ2h0cyIpO2wodGhpcywiYm9uZUluZGljZXMiKTtsKHRoaXMsImFsYmVkbyIpO2wodGhpcywiZW1pc3NpdmVTY2FsZSIpO2wodGhpcywibWV0YWxuZXNzIik7bCh0aGlzLCJyb3VnaG5lc3MiKTtsKHRoaXMsIm5vcm1hbFNjYWxlIik7bCh0aGlzLCJvY2NsdXNpb25TY2FsZSIpO2wodGhpcywibGlnaHRVdnMiKTtsKHRoaXMsImlzTGlnaHRNYXBSZ2JtIik7bCh0aGlzLCJpc0RvdWJsZVNpZGVkIik7bCh0aGlzLCJ1dkJvdW5kc01pblgiKTtsKHRoaXMsInV2Qm91bmRzTWF4WCIpO2wodGhpcywidXZCb3VuZHNNaW5ZIik7bCh0aGlzLCJ1dkJvdW5kc01heFkiKTtsKHRoaXMsIm1vcnBoVGFyZ2V0cyIpfX1jbGFzcyB2ZXtjb25zdHJ1Y3Rvcigpe2wodGhpcywic2l6ZSIpO2wodGhpcywic2VjdGlvblR5cGUiKTtsKHRoaXMsInNlY3Rpb25Db21wcmVzc2lvblR5cGUiKX19ZnVuY3Rpb24gcmUocyxlKXtjb25zdCB0PTIqZyhzLDgsZSktMSxpPTIqZyhzLDgsZSktMTtsZXQgbj10LGg9aTtjb25zdCB5PU1hdGguYWJzKHQpK01hdGguYWJzKGkpPjE7eSYmKG49KDEtTWF0aC5hYnMoaSkpKmllKHQpLGg9KDEtTWF0aC5hYnModCkpKmllKGkpKTtsZXQgYT0oMS1NYXRoLmFicyhuKS1NYXRoLmFicyhoKSkqKHk/LTE6MSk7Y29uc3Qgcj1NYXRoLnNxcnQobipuK2gqaCthKmEpO3JldHVybiBuLz1yLGgvPXIsYS89cixbbixoLGFdfWZ1bmN0aW9uIE1lKHMsZSl7cmV0dXJuW1MocyxlKSxTKHMsZSksUyhzLGUpXX1mdW5jdGlvbiBhZShzLGUsdD1uZXcgTCl7cmV0dXJuIHQubWluWD1TKHMsZSksdC5tYXhYPVMocyxlKSx0Lm1pblk9UyhzLGUpLHQubWF4WT1TKHMsZSksdC5taW5aPVMocyxlKSx0Lm1heFo9UyhzLGUpLHR9ZnVuY3Rpb24gb2UocyxlKXtjb25zdCB0PVtdO2ZvcihsZXQgaT0wO2k8MztpKyspdC5wdXNoKHUocyw4LGUpKTtyZXR1cm4gdH1mdW5jdGlvbiB1ZShzLGUpe2xldCB0PVtdO2ZvcihsZXQgaT0wO2k8MztpKyspdC5wdXNoKHUocywxNixlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gZ2UocyxlLHQpe2NvbnN0IGk9dShzLDgsZSk7cmV0dXJuIGk8MjU1P3QraS0xMjc6dShzLDE2LGUpfWZ1bmN0aW9uIGNlKHMsZSx0KXtjb25zdCBpPVtdO2ZvcihsZXQgbj0wO248MztuKyspaS5wdXNoKGdlKHMsZSx0W25dKSk7cmV0dXJuIGl9ZnVuY3Rpb24gVyhzLGUsdCxpLG4pe2ZvcihsZXQgaD0wO2g8MztoKyspc1szKmUraF09bi5nZXRNaW4oaCkrdFtoXSppW2hdKihuLmdldE1heChoKS1uLmdldE1pbihoKSl9ZnVuY3Rpb24gSihzLGUsdCl7Zm9yKGxldCBpPTA7aTwzO2krKylzWzMqdCtpXT1lW2ldfWZ1bmN0aW9uIGxlKHMpe2NvbnN0IGU9W107Zm9yKGxldCB0PTA7dDwzO3QrKyllLnB1c2goMS8oKDE8PHNbdF0pLTEpKTtyZXR1cm4gZX1mdW5jdGlvbiB4ZShzLGUsdCxpLG4saCl7Y29uc3QgeT1uZXcgRmxvYXQzMkFycmF5KC42KnQpLGE9bmV3IEZsb2F0MzJBcnJheSguNip0KTtsZXQgcj0wO2NvbnN0IHo9W107bGV0IG89MDtjb25zdCBjPW5ldyBGbG9hdDMyQXJyYXkoLjgqdCk7bGV0IHA9MDtjb25zdCBfPW5ldyBVaW50MzJBcnJheSh0KTtsZXQgdj0wLEI9LTE7Y29uc3Qgdz04KnQ7bGV0IFg9bmV3IEwsTT0wLFo9MCxEPTEsUj0wLGo9MTtjb25zdCBDPVtdLCQ9W10sTz1bXSx5ZT1bXTtpZihuPj0wKXtpZihhZShzLGUsWCksbj49MSYmbjw2KVo9UyhzLGUpLEQ9UyhzLGUpLFI9UyhzLGUpLGo9UyhzLGUpO2Vsc2UgaWYobj49Nil7TT11KHMsMTYsZSk7Zm9yKGxldCBtPTA7bTxNO20rKylDW21dPVMocyxlKSwkW21dPVMocyxlKSxPW21dPVMocyxlKSx5ZVttXT1TKHMsZSl9fWVsc2Ugcz17dmFsdWU6MH0sWD1oO2NvbnN0IG1lPWxlKG4+PTM/b2UocyxlKTpbMTEsMTEsMTFdKTtsZXQgRz0xMSxOPTExO24+PTYmJihHPXUocyw4LGUpLE49dShzLDgsZSkpO2NvbnN0IHg9e307bjw0JiYoeC5hbGJlZG89W10seC5hbGJlZG8ucHVzaChnKHMsOCxlKSkseC5hbGJlZG8ucHVzaChnKHMsOCxlKSkseC5hbGJlZG8ucHVzaChnKHMsOCxlKSkseC5hbGJlZG8ucHVzaChnKHMsOCxlKSkseC5hbGJlZG9NYXA9dShzLDgsZSktMSx4LmFsYmVkb1V2cz11KHMsOCxlKS0xLHguZW1pc3NpdmVTY2FsZT1bXSx4LmVtaXNzaXZlU2NhbGUucHVzaChnKHMsOCxlKSkseC5lbWlzc2l2ZVNjYWxlLnB1c2goZyhzLDgsZSkpLHguZW1pc3NpdmVTY2FsZS5wdXNoKGcocyw4LGUpKSx4LmVtaXNzaXZlTWFwPXUocyw4LGUpLTEseC5lbWlzc2l2ZVV2cz11KHMsOCxlKS0xLHgubWV0YWxuZXNzPWcocyw4LGUpLHgucm91Z2huZXNzPWcocyw4LGUpLHgubWV0YWxSb3VnaG5lc3NNYXA9dShzLDgsZSktMSx4Lm1ldGFsUm91Z2huZXNzVXZzPXUocyw4LGUpLTEseC5ub3JtYWxTY2FsZT1nKHMsOCxlKSx4Lm5vcm1hbE1hcD11KHMsOCxlKSx4Lm5vcm1hbFV2cz11KHMsOCxlKSx4Lm9jY2x1c2lvblNjYWxlPWcocyw4LGUpLHgub2NjbHVzaW9uTWFwPXUocyw4LGUpLHgub2NjbHVzaW9uVXZzPXUocyw4LGUpLG4+PTImJih4LmxpZ2h0TWFwPXUocyw4LGUpLHgubGlnaHRVdnM9dShzLDgsZSkseC5saWdodE1hcFJHQk09dShzLDgsZSkpLHguYWxwaGFNb2RlPXUocyw4LGUpLHguZG91YmxlU2lkZWQ9bj49Mz91KHMsOCxlKToxKTtsZXQgdGU9ITEsemU9MDtmb3IoO3MudmFsdWU8dzspe2xldCBtPXVlKHMsZSk7Y29uc3QgWWU9cmUocyxlKTtuPD01JiYoTT11KHMsMTYsZSkpO2NvbnN0IFU9W10saz1bXTtmb3IobGV0IGQ9MDtkPE07ZCsrKW48MT8oVS5wdXNoKHUocywxNixlKSksay5wdXNoKHUocywxNixlKSkpOihVLnB1c2godShzLDI0LGUpKSxrLnB1c2godShzLDI0LGUpKSk7Zm9yKDt6Lmxlbmd0aDxNOyl6LnB1c2gobmV3IEZsb2F0MzJBcnJheSguNCp0KSk7Y29uc3QgZmU9dShzLDE2LGUpO3plKz1mZTtjb25zdCBTZT11KHMsMTYsZSk7bGV0IHNlPSExO2lmKG4+PTUmJih0ZT11KHMsOCxlKT4wLHRlJiYoc2U9dShzLDgsZSk+PTQsY1twXT1nKHMsOCxlKSxjW3ArMV09ZyhzLDgsZSksY1twKzJdPWcocyw4LGUpLGNbcCszXT1zZT9nKHMsOCxlKToxLHArPTQpKSxXKHkscixtLG1lLFgpLEooYSxZZSxyKSxyKyssbj49Nilmb3IobGV0IGQ9MDtkPE07ZCsrKXpbZF1bb109Q1tkXStVW2RdLygxPDxHKSx6W2RdW28rMV09T1tkXStrW2RdLygxPDxOKTtlbHNlIGZvcihsZXQgZD0wO2Q8TTtkKyspeltkXVtvXT1aK1VbZF0vKDE8PEcpLHpbZF1bbysxXT1SK2tbZF0vKDE8PE4pO28rPTI7Zm9yKGxldCBkPTE7ZDxmZTtkKyspe209Y2UocyxlLG0pO2NvbnN0IFA9cmUocyxlKTtmb3IobGV0IGY9MDtmPE07ZisrKXtjb25zdCBWPXUocyw4LGUpO1Y8MjU1P1VbZl0rPVYtMTI3OlVbZl09dShzLG48MT8xNjoyNCxlKTtjb25zdCBkZT11KHMsOCxlKTtkZTwyNTU/a1tmXSs9ZGUtMTI3OmtbZl09dShzLG48MT8xNjoyNCxlKX1pZihuPj01JiZ0ZSYmKGNbcF09ZyhzLDgsZSksY1twKzFdPWcocyw4LGUpLGNbcCsyXT1nKHMsOCxlKSxjW3ArM109c2U/ZyhzLDgsZSk6MSxwKz00KSxXKHkscixtLG1lLFgpLEooYSxQLHIpLHIrKyxuPj02KWZvcihsZXQgZj0wO2Y8TTtmKyspeltmXVtvXT1DW2ZdK1VbZl0vKCgxPDxHKS0xKSx6W2ZdW28rMV09T1tmXStrW2ZdLygoMTw8TiktMSk7ZWxzZSBmb3IobGV0IGY9MDtmPE07ZisrKXpbZl1bb109WitVW2ZdLygoMTw8RyktMSkseltmXVtvKzFdPVIra1tmXS8oKDE8PE4pLTEpO28rPTJ9Zm9yKGxldCBkPTA7ZDwzKlNlO2QrKylpZih1KHMsMSxlKT09MClCKyssX1t2KytdPUI7ZWxzZXtjb25zdCBQPXUocywyLGUpO2lmKFA9PTApX1t2XT1fW3YtMV0sdisrO2Vsc2UgaWYoUD09MSlfW3ZdPV9bdi0yXSx2Kys7ZWxzZSBpZihQPT0yKV9bdl09X1t2LTNdLHYrKztlbHNle2NvbnN0IGY9dShzLDUsZSk7aWYoZjwzMSlfW3YrK109Qi1mO2Vsc2V7Y29uc3QgVj11KHMsMTYsZSk7X1t2KytdPUItVn19fXMudmFsdWUlOCE9MCYmKHMudmFsdWUrPTgtcy52YWx1ZSU4KX1pLm1hdD14LGkuaW5kQnVmZj1uZXcgVWludDMyQXJyYXkoXy5zbGljZSgwLHYpKSxpLnBvc0J1ZmY9bmV3IEZsb2F0MzJBcnJheSh5LnNsaWNlKDAsMypyKSksaS5ub3JCdWZmPW5ldyBGbG9hdDMyQXJyYXkoYS5zbGljZSgwLDMqcikpLGkudXZCdWZmPVtdLGkuY29sb3JCdWZmPW5ldyBGbG9hdDMyQXJyYXkoYy5zbGljZSgwLHApKSxpLmFscGhhTW9kZT14LmFscGhhTW9kZSxpLmFsYmVkbz14LmFsYmVkbyxpLmVtaXNzaXZlU2NhbGU9eC5lbWlzc2l2ZVNjYWxlLGkubWV0YWxuZXNzPXgubWV0YWxuZXNzLGkucm91Z2huZXNzPXgucm91Z2huZXNzLGkubm9ybWFsU2NhbGU9eC5ub3JtYWxTY2FsZSxpLm9jY2x1c2lvblNjYWxlPXgub2NjbHVzaW9uU2NhbGUsaS5saWdodFV2cz14LmxpZ2h0VXZzLGkuaXNMaWdodE1hcFJnYm09ISF4LmxpZ2h0TWFwUkdCTSxpLmlzRG91YmxlU2lkZWQ9ISF4LmRvdWJsZVNpZGVkLGkudXZCb3VuZHNNaW5YPVtdLGkudXZCb3VuZHNNYXhYPVtdLGkudXZCb3VuZHNNaW5ZPVtdLGkudXZCb3VuZHNNYXhZPVtdO2ZvcihsZXQgbT0wO208ei5sZW5ndGg7bSsrKWkudXZCdWZmLnB1c2gobmV3IEZsb2F0MzJBcnJheSh6W21dLnNsaWNlKDAsbykpKSxuPj02JiZtPEMubGVuZ3RoPyhpLnV2Qm91bmRzTWluWFttXT1DW21dLGkudXZCb3VuZHNNYXhYW21dPSRbbV0saS51dkJvdW5kc01pbllbbV09T1ttXSxpLnV2Qm91bmRzTWF4WVttXT15ZVttXSk6bj49MSYmbjw2PyhpLnV2Qm91bmRzTWluWFttXT1aLGkudXZCb3VuZHNNYXhYW21dPUQsaS51dkJvdW5kc01pbllbbV09UixpLnV2Qm91bmRzTWF4WVttXT1qKTooaS51dkJvdW5kc01pblhbbV09MCxpLnV2Qm91bmRzTWF4WFttXT0xLGkudXZCb3VuZHNNaW5ZW21dPTAsaS51dkJvdW5kc01heFlbbV09MSk7cmV0dXJuIHplfWZ1bmN0aW9uIGJlKHMsZSx0LGksbixoKXtjb25zdCB5PWZ1bmN0aW9uKGEscil7Y29uc3Qgej1uZXcgdmU7cmV0dXJuIHouc2l6ZT1UKGEsNCxyKSx6LnNlY3Rpb25UeXBlPVQoYSwyLHIpLHouc2VjdGlvbkNvbXByZXNzaW9uVHlwZT1UKGEsMixyKSx6fShzLGUpO3N3aXRjaCh5LnNlY3Rpb25UeXBlKXtjYXNlIDE6aC52YWx1ZT14ZShzLGUseS5zaXplLTgsdCxpLG4pO2JyZWFrO2Nhc2UgMTA6KGZ1bmN0aW9uKGEscix6LG8pe2NvbnN0IGM9by5zaXplLTg7aWYoYz4wKXN3aXRjaChvLnNlY3Rpb25Db21wcmVzc2lvblR5cGUpe2Nhc2UgMTp7Y29uc3QgcD1hLnZhbHVlLzgsXz1UKGEsMSxyKSx2PVQoYSwxLHIpLEI9W107Zm9yKDthLnZhbHVlLzgtcDxjOyl7Y29uc3Qgdz1bXTtmb3IobGV0IE09MDtNPDQ7TSsrKXcucHVzaChUKGEsXyxyKSk7Y29uc3QgWD1UKGEsdixyKTtmb3IobGV0IE09MDtNPFg7TSsrKWZvcihsZXQgWj0wO1o8NDtaKyspQi5wdXNoKHdbWl0pfXouYm9uZUluZGljZXM9bmV3IFVpbnQzMkFycmF5KEIubGVuZ3RoKTtmb3IobGV0IHc9MDt3PEIubGVuZ3RoO3crKyl6LmJvbmVJbmRpY2VzW3ddPUJbd107YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYERvbid0IGtub3cgaG93IHRvIGhhbmRsZSBjb21wcmVzc2lvbiB0eXBlOiAke28uc2VjdGlvbkNvbXByZXNzaW9uVHlwZX0gaW4gYm9uZSBpbmRpY2VzIHNlY3Rpb25gKX19KShzLGUsdCx5KTticmVhaztjYXNlIDExOihmdW5jdGlvbihhLHIseixvKXtjb25zdCBjPW8uc2l6ZS04O2lmKGM+MClzd2l0Y2goby5zZWN0aW9uQ29tcHJlc3Npb25UeXBlKXtjYXNlIDE6e2NvbnN0IHA9YS52YWx1ZS84LF89VChhLDEsciksdj1UKGEsMSxyKSxCPSgxPDw4Kl8pLTEsdz1bXTtmb3IoO2EudmFsdWUvOC1wPGM7KXtjb25zdCBYPVtdO2ZvcihsZXQgWj0wO1o8NDtaKyspWC5wdXNoKFQoYSxfLHIpL0IpO2NvbnN0IE09VChhLHYscik7Zm9yKGxldCBaPTA7WjxNO1orKylmb3IobGV0IEQ9MDtEPDQ7RCsrKXcucHVzaChYW0RdKX16LmJvbmVXZWlnaHRzPW5ldyBGbG9hdDMyQXJyYXkody5sZW5ndGgpO2ZvcihsZXQgWD0wO1g8dy5sZW5ndGg7WCsrKXouYm9uZVdlaWdodHNbWF09d1tYXTticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcihgRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGNvbXByZXNzaW9uIHR5cGU6ICR7by5zZWN0aW9uQ29tcHJlc3Npb25UeXBlfSBpbiBib25lIHdlaWdodHMgc2VjdGlvbmApfX0pKHMsZSx0LHkpO2JyZWFrO2Nhc2UgMTM6KGZ1bmN0aW9uKGEscix6LG8sYyl7aWYoby5zaXplLTg+MClzd2l0Y2goby5zZWN0aW9uQ29tcHJlc3Npb25UeXBlKXtjYXNlIDE6e2NvbnN0IHA9bGUob2UoYSxyKSksXz1UKGEsMixyKSx2PVtdO2ZvcihsZXQgQj0wO0I8XztCKyspe2NvbnN0IHc9bmV3IHdlLFg9VChhLDEsciksTT1LKFgsMSksWj1LKFgsMiksRD1LKFgsNCk7TSYmKHcubmFtZT1wZShhLHIpKSxaJiYody53ZWlnaHQ9UyhhLHIpKTtjb25zdCBSPWFlKGEscik7bGV0IGo9dWUoYSxyKTtjb25zdCBDPW5ldyBGbG9hdDMyQXJyYXkoMypjKTtXKEMsMCxqLHAsUik7Zm9yKGxldCAkPTE7JDxjOyQrKylqPWNlKGEscixqKSxXKEMsJCxqLHAsUik7aWYody5kZWx0YVBvc2l0aW9ucz1DLEQpe2NvbnN0ICQ9bmV3IEZsb2F0MzJBcnJheSgzKmMpO2ZvcihsZXQgTz0wO088YztPKyspSigkLE1lKGEsciksTyk7dy5kZWx0YU5vcm1hbHM9JH12LnB1c2godyl9ei5tb3JwaFRhcmdldHM9djticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcihgRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGNvbXByZXNzaW9uIHR5cGU6ICR7by5zZWN0aW9uQ29tcHJlc3Npb25UeXBlfSBpbiBtb3JwaCB0YXJnZXRzIHNlY3Rpb25gKX19KShzLGUsdCx5LGgudmFsdWUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBEb24ndCBrbm93IGhvdyB0byBoYW5kbGUgc2VjdGlvbiB0eXBlOiAke3kuc2VjdGlvblR5cGV9YCl9fWZ1bmN0aW9uIFhlKHMsZSl7Y29uc3QgdD17dmFsdWU6MH0saT1mdW5jdGlvbihoLHkpe2xldCBhPWhlKGgsNCx5KTtyZXR1cm4gYT09InhyZ2MiPzA6KGgudmFsdWU9MCxhPWhlKGgsNSx5KSxhPT0iX3hyZ2MiPzY1NTM2KnUoaCw4LHkpKzI1Nip1KGgsOCx5KSt1KGgsOCx5KTooaC52YWx1ZT0wLC0xKSl9KHQscyksbj1uZXcgX2U7aWYoaTw3KXhlKHQscyxzLmxlbmd0aCxuLGksZSk7ZWxzZXtjb25zdCBoPXt2YWx1ZTowfTtmb3IoO3QudmFsdWUvODxzLmxlbmd0aDspYmUodCxzLG4saSxlLGgpfXJldHVybiBufWxldCBRLEk9ITEsSD1bXTthc3luYyBmdW5jdGlvbiBlZSgpe2Zvcig7SC5sZW5ndGg7KXtjb25zdCBzPUgucG9wKCk7aWYocyl0cnl7cy5mdW5jdGlvbigpfWNhdGNoKGUpe3NlbGYucG9zdE1lc3NhZ2Uoe2Vycm9yOmUsaGFuZGxlOnMuaGFuZGxlfSl9fVE9ST9udWxsOnNldFRpbWVvdXQoZWUsMCl9b25tZXNzYWdlPWFzeW5jIGZ1bmN0aW9uKHMpe2NvbnN0IGU9STtpZihJPSEhcy5kYXRhLmlzUGF1c2VkLGUmJiFJJiYoUSE9bnVsbCYmY2xlYXJUaW1lb3V0KFEpLGVlKCkpLCFJKXN3aXRjaChzLmRhdGEuZGF0YVR5cGUpe2Nhc2UgQS5HZW9tZXRyeTpILnB1c2goe2Z1bmN0aW9uOigpPT57Y29uc3QgdD1YZShzLmRhdGEuY29tcHJlc3NlZERhdGEscy5kYXRhLmRhdGFUeXBlU3BlY2lmaWNEYXRhLmJvdW5kaW5nQm94KTtzZWxmLnBvc3RNZXNzYWdlKHtkZWNvbXByZXNzZWREYXRhOnQsaGFuZGxlOnMuZGF0YS5oYW5kbGV9KX0saGFuZGxlOnMuZGF0YS5oYW5kbGV9KTticmVhaztjYXNlIEEuVHJhbnNmb3JtczpILnB1c2goe2Z1bmN0aW9uOigpPT57Y29uc3QgdD1mdW5jdGlvbihpKXtpZihpLmxlbmd0aDwxMil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29tcHJlc3NlZCB0cmFuc2Zvcm0gZGF0YS4iKTtjb25zdCBuPW5ldyBUZXh0RW5jb2RlcjtpZihpLmxlbmd0aDw0fHxpWzBdIT09bi5lbmNvZGUoIngiKVswXXx8aVsxXSE9PW4uZW5jb2RlKCJyIilbMF18fGlbMl0hPT1uLmVuY29kZSgidCIpWzBdfHxpWzNdIT09bi5lbmNvZGUoImMiKVswXSl0aHJvdyBuZXcgRXJyb3IoIkNvbXByZXNzZWQgdHJhbnNmb3JtIGRhdGEgaXMgbWlzc2luZyBtYWdpYyBieXRlcy4iKTtjb25zdCBoPXt2YWx1ZTozMn0seT1xKGgsaSk7aWYoeT4xKXRocm93IG5ldyBFcnJvcihgWFJUQyB2ZXJzaW9uICR7eX0gbm90IHN1cHBvcnRlZC5gKTtjb25zdCBhPXEoaCxpKSxyPVtdO2ZvcihsZXQgbz0wO288MTI7bysrKXJbb109W107Zm9yKGxldCBvPTA7bzwxMjtvKyspaWYocShoLGksMSk9PT0wKXJbb109bmUoaCxhLGkpO2Vsc2V7Y29uc3QgYz1uZShoLHEoaCxpKSxpKSxwPXEoaCxpKSxfPXEoaCxpLDEpLHY9cShoLGksMSk7bGV0IEI9MDtmb3IobGV0IHc9MDt3PHA7dysrKXtjb25zdCBYPXEoaCxpLF8pLE09cShoLGksdik7Zm9yKGxldCBaPTA7WjxNO1orKylyW29dW0IrK109Y1tYXX19Y29uc3Qgej1bXTtmb3IobGV0IG89MDtvPGE7bysrKXtjb25zdCBjPW5ldyBGbG9hdDMyQXJyYXkoMTYpO2NbMF09clswXVtvXSxjWzFdPXJbMV1bb10sY1syXT1yWzJdW29dLGNbM109MCxjWzRdPXJbM11bb10sY1s1XT1yWzRdW29dLGNbNl09cls1XVtvXSxjWzddPTAsY1s4XT1yWzZdW29dLGNbOV09cls3XVtvXSxjWzEwXT1yWzhdW29dLGNbMTFdPTAsY1sxMl09cls5XVtvXSxjWzEzXT1yWzEwXVtvXSxjWzE0XT1yWzExXVtvXSxjWzE1XT0xLHoucHVzaChjKX1yZXR1cm4gen0ocy5kYXRhLmNvbXByZXNzZWREYXRhKTtzZWxmLnBvc3RNZXNzYWdlKHtkZWNvbXByZXNzZWREYXRhOnQsaGFuZGxlOnMuZGF0YS5oYW5kbGV9KX0saGFuZGxlOnMuZGF0YS5oYW5kbGV9KX19LGVlKCl9KSgpOwo=",Go=typeof self<"u"&&self.Blob&&new Blob([(Lo=_o,Uint8Array.from(atob(Lo),n=>n.charCodeAt(0)))],{type:"text/javascript;charset=utf-8"});var Lo;function jh(n){let t;try{if(t=Go&&(self.URL||self.webkitURL).createObjectURL(Go),!t)throw"";const e=new Worker(t,{name:n==null?void 0:n.name});return e.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),e}catch{return new Worker("data:text/javascript;base64,"+_o,{name:n==null?void 0:n.name})}finally{t&&(self.URL||self.webkitURL).revokeObjectURL(t)}}const Ze=[];let $h=0;class tc{constructor(t,e,i,s){g(this,"modelSource");g(this,"headers");g(this,"url");g(this,"renderer");g(this,"modelOptions");this.url=t,this.renderer=e,this.modelOptions=i,s!==void 0&&(this.headers=s)}async init(){if(Ze.length===0)for(let t=0;t<4;t++)Ze[t]=new jh;return this.modelSource=new ds(this.url,this.renderer,this.modelOptions.hashCode,this.headers),await this.modelSource.init()}async downloadNodeData(t,e=0,i,s=!0){const r={},o=this.getFilesToDownload(t,e,i,s),a=await this.modelSource.fetchFiles(o),A=[];for(const l of t){const h=l.modelNode,c=l.lod;if(c!==-1){const d=h.geometry[c];A.push(this.decompressGeometry(a[d].slice(),h.boundingBox).then(p=>{r[d]=new Ee(h,a,p,Mt.Geometry)}));const u=h.instanceTransforms[c];u&&A.push(this.decompressTransforms(a[u].slice()).then(p=>{r[u]=new Ee(h,a,p,Mt.Transforms)}))}if(h.collider){const d=h.collider;A.push(this.decompressGeometry(a[d].slice(),h.boundingBox).then(u=>{r[d]=new Ee(h,a,u,Mt.Geometry)}))}}return await Promise.all(A),r}async downloadNodeDataLod(t,e=-1){const i={},s=[];for(const a of t)e!==-1&&(a.geometry[e]&&s.push(a.geometry[e]),a.colorMap[e]&&s.push(a.colorMap[e]),a.colorMapAlpha[e]&&s.push(a.colorMapAlpha[e]),a.emissiveMap[e]&&s.push(a.emissiveMap[e]),a.metRoughMap[e]&&s.push(a.metRoughMap[e]),a.normalMap[e]&&s.push(a.normalMap[e]),a.occlusionMap[e]&&!s.includes(a.occlusionMap[e])&&s.push(a.occlusionMap[e]),a.lightMap&&a.lightMap[e]&&s.push(a.lightMap[e]),a.transmissionMap&&a.transmissionMap[e]&&s.push(a.transmissionMap[e]),a.thicknessMap&&a.thicknessMap[e]&&!s.includes(a.thicknessMap[e])&&s.push(a.thicknessMap[e]),a.clearCoatMap&&a.clearCoatMap[e]&&s.push(a.clearCoatMap[e]),a.clearCoatRoughnessMap&&a.clearCoatRoughnessMap[e]&&!s.includes(a.clearCoatRoughnessMap[e])&&s.push(a.clearCoatRoughnessMap[e]),a.clearCoatNormalMap&&a.clearCoatNormalMap[e]&&s.push(a.clearCoatNormalMap[e]),a.specularMap&&a.specularMap[e]&&s.push(a.specularMap[e]),a.specularColorMap&&a.specularColorMap[e]&&!s.includes(a.specularColorMap[e])&&s.push(a.specularColorMap[e]),a.diffuseMap&&a.diffuseMap[e]&&s.push(a.diffuseMap[e]),a.specularGlossinessMap&&a.specularGlossinessMap[e]&&s.push(a.specularGlossinessMap[e]),a.sheenMap&&a.sheenMap[e]&&s.push(a.sheenMap[e]),a.sheenRoughnessMap&&a.sheenRoughnessMap[e]&&!s.includes(a.sheenRoughnessMap[e])&&s.push(a.sheenRoughnessMap[e])),a.collider&&s.push(a.collider),a.animation&&s.push(a.animation);const r=await this.modelSource.fetchFiles(s),o=[];for(const a of t){if(e!==-1){const A=a.geometry[e];o.push(this.decompressGeometry(r[A],a.boundingBox).then(h=>{i[A]=new Ee(a,r,h,Mt.Geometry)}));const l=a.instanceTransforms[e];l&&o.push(this.decompressTransforms(r[l].slice()).then(h=>{i[l]=new Ee(a,r,h,Mt.Transforms)}))}if(a.collider){const A=a.collider;o.push(this.decompressGeometry(r[A],a.boundingBox).then(l=>{i[A]=new Ee(a,r,l,Mt.Geometry)}))}a.animation&&(i[a.animation]=new Ee(a,r))}return await Promise.all(o),i}getDownloadSize(t,e){const i=this.getFilesToDownload(t,e);let s=0;for(const r of i){const o=this.modelSource.getFileSize(r);s+=isNaN(o)?0:o}return s}getDownloadSizeOfNode(t,e){const i=[];this.addFileNamesForNode(t,e,i);let s=0;for(const r of i)s+=this.modelSource.getFileSize(r);return s}releaseNodeData(t){try{const s=t.modelNode,r=s.model.materialCache,o=s.object3d,a=h=>this.renderer.disposeMaterial(h),A=this.renderer.listMaterialOwners(o);let l=!1;for(const h of A){const c=h.psMatKey;if(c)r.releaseForOwner(c.matName,c.tier,h,a),l=!0;else{const d=h.psMaterial;d&&(r.releaseByMat(d,a),l=!0)}h.psMatKey=void 0,h.psMaterial=void 0}s.ownersByLod&&(s.ownersByLod.delete(t.lod),s.ownersByLod.size===0&&(s.ownersByLod=void 0)),s.activeTexLodByLod&&(s.activeTexLodByLod.delete(t.lod),s.activeTexLodByLod.size===0&&(s.activeTexLodByLod=void 0))}catch{}const e=[];this.addFileNamesForNode(t.modelNode,t.lod,e);const i=e.filter(s=>!/\.(ktx2|png|jpg|jpeg|webp)$/i.test(s));this.modelSource.releaseFiles(i)}dispose(){}async createMesh(t,e,i,s,r,o,a="best"){var h,c,d;if(!t.geometry)return;const A=t.model.materialCache,l=typeof a=="number"?a:a==="best"?0:Number.MAX_SAFE_INTEGER;for(let u=0;u<t.streamableMaterials.length;u++){const p=e[t.geometry[u]];if(!p)continue;let I;const f=t.instanceTransforms[u];f&&(I=e[f].instanceTransforms),t.lastNodeLodData=p;const m=`${t.model.name}.${t.id}`;let x=(h=t.material)==null?void 0:h[u];if(!x){const b=(c=t.geometry)==null?void 0:c[u];x=b?b.replace(".xrgc","").replace("geometry","mat"):`${t.id}|mat_${u}`}const E=(d=t.streamableMaterials)==null?void 0:d[u];if(!E){console.warn(`Missing StreamableMaterial for node ${t.id} lod ${u}`);continue}const M=E.getCacheTierForRequest(l),L=E.getTexturesForTier(M).filter(b=>b&&b.state===Fe.NotLoaded);if(L.length>0){const b=L.map(v=>v.fileName);await this.modelSource.fetchFiles(b)}const B=await A.getOrCreate(x,M,()=>E.load(p,l)),[w,y]=this.renderer.createObject3d(p,B,t,m,u,i,s,I,o);w.psMatKey={matName:x,tier:M};const Q=this.renderer.listMaterialOwners(w);for(const b of Q)b.psMatKey={matName:x,tier:M},b.psMaterial=B,A.retainForOwner(x,M,b);if((t.activeTexLodByLod||(t.activeTexLodByLod=new Map)).set(u,M),(t.ownersByLod||(t.ownersByLod=new Map)).set(u,Q),w.psMatKey={matName:x,tier:M},w.psMaterial=B,w.psNodeId=m,w.psNode=t,w.psLod=u,r!=null?r.push({node:t,object3d:w,occlusionObject3d:y}):(t.object3d=w,y&&!t.occlusionObject3d&&(w.psAddedOcclusionObject3d=!0),t.occlusionObject3d=y),y!=null){y.psNode=t,y.psIsOcclusionMesh=!0,w.psOcclusionObject3d=y;const b=y.psGpuQueryData;b!=null&&(b.displayObject3d=w,b.occlusionObject3d=y)}return}}get texturesSize(){return this.modelSource.texturesSize}getFilesToDownload(t,e,i,s=!0){let r=[];if(e===0)for(const o of t){const a=o.modelNode;let A=o.lod;for(;A>0&&this.modelSource.getFileIndex()[a.geometry[A]][1]<25;)A--;this.addFileNamesForNode(a,A,r,i,s)}else{let o=null;for(const h of t){const c=h.modelNode;c.geometry&&c.geometry.length&&(o==null||o<c.geometry.length-1)&&(o=c.geometry.length-1)}let a=o,A=0,l=[];for(;A<e&&a>=0;){A=0,l=[];for(const h of t){const c=h.modelNode,d=Math.min(o,h.lod+a);c.geometry[d]&&this.addFileNamesForNode(c,d,l,void 0,s)}for(const h of l)A+=this.modelSource.getFileIndex()[h][1];a--}r=l}return Array.from(new Set(r))}addFileNamesForNode(t,e,i,s,r=!0){var l,h,c,d,u,p,I,f,m,x,E,M,L,B,w,y,Q,b,v,T,N,R;if(e===-1)return;const o=(D,U)=>{this.modelSource.setTextureFormatHint(D,U?"rgba":"rgb")},a=(D,U=!1)=>{i.push(D),o(D,U)},A=t.model.rootNode;if(zn(Ti(A.version),[0,0,6])){if(t.geometry&&t.geometry[e]&&i.push(t.geometry[e]),t.instanceTransforms&&t.instanceTransforms[e]&&i.push(t.instanceTransforms[e]),!r)return;const D=(l=t.material)==null?void 0:l[e];if(!D)return;const U=A.materials,z=U==null?void 0:U[D];if(!z)return;const K=A.textures??[];if(K.length){const V=s??"best",W=["albedoMap","colorMap","alphaMap","colorMapAlpha","metalRoughnessMap","emissiveMap","occlusionMap","normalMap","lightMap","transmissionMap","thicknessMap","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","specularMap","specularColorMap","diffuseMap","specularGlossinessMap","sheenMap","sheenRoughnessMap"],$=new Set(["albedoMap","colorMap","diffuseMap","specularGlossinessMap","alphaMap","colorMapAlpha","lightMap"]);for(const X of W){const xt=z[X];if(typeof xt=="number"&&xt>=0&&xt<K.length){const O=K[xt],nt=Di(O,V),at=(h=O.lods)==null?void 0:h[nt];at!=null&&at.file&&a(at.file,$.has(X))}}}}else{if(!r)return void(((c=t.geometry)==null?void 0:c[e])&&i.push(t.geometry[e]));(d=t.colorMap)!=null&&d[e]&&a(t.colorMap[e],!0),(u=t.colorMapAlpha)!=null&&u[e]&&a(t.colorMapAlpha[e],!0),(p=t.emissiveMap)!=null&&p[e]&&a(t.emissiveMap[e],!1),(I=t.geometry)!=null&&I[e]&&i.push(t.geometry[e]),(f=t.metRoughMap)!=null&&f[e]&&a(t.metRoughMap[e],!1),(m=t.normalMap)!=null&&m[e]&&a(t.normalMap[e],!1),(x=t.occlusionMap)!=null&&x[e]&&a(t.occlusionMap[e],!1),(E=t.lightMap)!=null&&E[e]&&a(t.lightMap[e],!0),(M=t.transmissionMap)!=null&&M[e]&&a(t.transmissionMap[e],!1),(L=t.thicknessMap)!=null&&L[e]&&a(t.thicknessMap[e],!1),(B=t.clearCoatMap)!=null&&B[e]&&a(t.clearCoatMap[e],!1),(w=t.clearCoatRoughnessMap)!=null&&w[e]&&a(t.clearCoatRoughnessMap[e],!1),(y=t.clearCoatNormalMap)!=null&&y[e]&&a(t.clearCoatNormalMap[e],!1),(Q=t.specularMap)!=null&&Q[e]&&a(t.specularMap[e],!1),(b=t.specularColorMap)!=null&&b[e]&&a(t.specularColorMap[e],!1),(v=t.diffuseMap)!=null&&v[e]&&a(t.diffuseMap[e],!1),(T=t.specularGlossinessMap)!=null&&T[e]&&a(t.specularGlossinessMap[e],!1),(N=t.sheenMap)!=null&&N[e]&&a(t.sheenMap[e],!1),(R=t.sheenRoughnessMap)!=null&&R[e]&&a(t.sheenRoughnessMap[e],!1)}}decompressGeometry(t,e){return this.decompressData(t,Mt.Geometry,{boundingBox:e.toBasicBoundingBox()})}decompressTransforms(t){return this.decompressData(t,Mt.Transforms)}async decompressData(t,e,i){return new Promise((s,r)=>{const o=$h++,a=o%Ze.length;Ze[a].postMessage({compressedData:t,dataType:e,handle:o,dataTypeSpecificData:i},[t.buffer]);const A=l=>{var h,c;l.data.handle===o&&(Ze[a].removeEventListener("message",A),(h=l.data)!=null&&h.decompressedData?s(l.data.decompressedData):(c=l.data)!=null&&c.error?r(l.data.error):r("Unknow decompression error in the worker thread."))};Ze[a].addEventListener("message",A)})}}class ec{constructor(t,e){g(this,"children");g(this,"bboxOnlyChildren");g(this,"hasBoundingBoxOnly");g(this,"version");g(this,"parent");g(this,"model");g(this,"activeLod");g(this,"object3d");g(this,"isInsideBBox");g(this,"id");g(this,"priority");g(this,"material");g(this,"geometry");g(this,"colorMap");g(this,"colorMapAlpha");g(this,"emissiveMap");g(this,"metRoughMap");g(this,"normalMap");g(this,"occlusionMap");g(this,"lightMap");g(this,"transmissionMap");g(this,"thicknessMap");g(this,"clearCoatMap");g(this,"clearCoatRoughnessMap");g(this,"clearCoatNormalMap");g(this,"specularMap");g(this,"specularColorMap");g(this,"specularGlossinessMap");g(this,"diffuseMap");g(this,"sheenMap");g(this,"sheenRoughnessMap");g(this,"triangleCounts");g(this,"downloadSizes");g(this,"instanceCounts");g(this,"instanceTransforms");g(this,"instanceTriangleCounts");g(this,"normalMapType");g(this,"collider");g(this,"materials");g(this,"streamableMaterials");g(this,"streamableMaterialsLow");g(this,"streamableMaterialsHigh");g(this,"lastNodeLodData");g(this,"activeTexLodByLod");g(this,"ownersByLod");g(this,"pendingRemoval");g(this,"lastGeomSwapAt");g(this,"textures");g(this,"boundingBox");g(this,"animation");g(this,"skeletonIndex",-1);g(this,"parentSceneNodeIndex",-1);g(this,"parentGroup");g(this,"rootBone");g(this,"_surfaceArea");g(this,"_isOCHidden");g(this,"lockCount");g(this,"selfLocked");g(this,"_hasLeafChild");g(this,"_occlusionObject3d");g(this,"_surfaceAreaSqrt");g(this,"_sqDistance");g(this,"_nearestLeafNode");g(this,"_isBBoxInCameraFrustum");g(this,"_hasLeafBBoxInCameraFrustrum");g(this,"_visibleLeafNodes");g(this,"_isCameraInside");this.model=t,this.id=e,this.isOCHidden=!1,this.activeLod=-1,this.lockCount=0,this.selfLocked=!1,this.downloadSizes=[],this.isInsideBBox=!1,this.instanceTransforms=[]}set clearcoatMap(t){this.clearCoatMap=t}set clearcoatRoughnessMap(t){this.clearCoatRoughnessMap=t}set clearcoatNormalMap(t){this.clearCoatNormalMap=t}set instances(t){this.instanceTransforms=t}get isLocked(){return this.lockCount>0}lock(){if(this.selfLocked)return;this.selfLocked=!0;let t=this;for(;t!=null;)t.lockCount++,t=t.parent}unlock(){if(!this.selfLocked)return;this.selfLocked=!1;let t=this;for(;t!=null;)t.lockCount--,t=t.parent}get isHidden(){return!this.hasSkeleton&&(this.model.useOcclusionCulling?this.isOCHidden:this.isFCHidden)}get isFCHidden(){return!this.isBBoxInCameraFrustum()}get isOCHidden(){return this._isOCHidden}set isOCHidden(t){if(this._isOCHidden=t,this.children)for(const e of this.children)e.isOCHidden=t}isBBoxInCameraFrustum(){return!!this.hasSkeleton||(this._isBBoxInCameraFrustum==null&&(this._isBBoxInCameraFrustum=this.boundingBox.isVisible(this.model.camera,this.model.sceneGroup)),this._isBBoxInCameraFrustum)}hasLeafBBoxInCameraFrustrum(){if(this.hasSkeleton)return!0;if(this._hasLeafBBoxInCameraFrustrum!=null)return this._hasLeafBBoxInCameraFrustrum;if(this.hasAnyTypeOfChildren){for(const t of this.anyTypeOfChildren)if(t.hasLeafBBoxInCameraFrustrum())return this._hasLeafBBoxInCameraFrustrum=!0,this._hasLeafBBoxInCameraFrustrum;return this._hasLeafBBoxInCameraFrustrum=!1,this._hasLeafBBoxInCameraFrustrum}return this._hasLeafBBoxInCameraFrustrum=this.isBBoxInCameraFrustum(),this._hasLeafBBoxInCameraFrustrum}get occlusionObject3d(){return this._occlusionObject3d}set occlusionObject3d(t){this._occlusionObject3d=t,t==null&&(this.isOCHidden=!1)}getTriangleCount(t){var e;if(t>=0&&t<this.triangleCountsLength){const i=this.triangleCounts[t],s=((e=this.instanceTriangleCounts)==null?void 0:e.length)>0?this.instanceTriangleCounts[t]:i;return s+1*(i-s)}return 0}get triangleCountsLength(){return this.triangleCounts?this.triangleCounts.length:0}get hasInstances(){const t=Math.max(0,this.activeLod);return this.instanceCounts&&this.activeLod>=0&&this.instanceCounts[t]>1}getNearestStandardNodeInScene(){let t=this;for(;t!=null&&!t.isInScene&&t.hasBoundingBoxOnly;)t=t.parent;return t}getDistance(t,e=!0){let i=null;if(this.hasSkeleton)i=this.rootBone!=null?P.distanceSq(this.model.cameraPositionWs,this.renderer.getPosition(this.rootBone)):P.distanceSq(this.cameraPositionLs,this.boundingBox.center);else{if(this.shouldGetNearestLeafNode(t)){const r={};this.getLeafBBoxSqDistance(r),i=r.sqDistance}i==null&&(i=this.getSqDistance())}const s=e&&t!=null?t.minimumDistance:0;return Math.sqrt(i)+s}get worstLod(){return this.triangleCountsLength-1}get isInScene(){return this.object3d!=null}get surfaceArea(){return this._surfaceArea??0}set surfaceArea(t){this._surfaceArea=t,this._surfaceAreaSqrt=null}get hasGeometry(){return this.lodCount>0}get isCameraInside(){if(this._isCameraInside==null){let t=0,e=this.renderer.getNearFarClippingDistances(this.camera);if(e&&(t=4*e[0]),this.boundingBox.containsPoint(this.cameraPositionLs,t))if(this.hasBBoxOnlyChildren){for(const i of this.bboxOnlyChildren)if(i.isCameraInside){this._isCameraInside=!0;break}this._isCameraInside==null&&(this._isCameraInside=!1)}else this._isCameraInside=!0;else this._isCameraInside=!1}return this._isCameraInside}get hasLeafChild(){if(this._hasLeafChild!=null)return this._hasLeafChild;if(this.isInScene)return this._hasLeafChild=!0,!0;if(this.hasChildren){for(const t of this.children)if(t.hasLeafChild)return this._hasLeafChild=!0,!0}return this._hasLeafChild=!1,!1}clearCache(t=!1){if(this._isCameraInside=null,t||(this._sqDistance=null,this._nearestLeafNode=null,this._visibleLeafNodes=null,this._isBBoxInCameraFrustum=null,this._hasLeafBBoxInCameraFrustrum=null,this._hasLeafChild=null),this.hasAnyTypeOfChildren)for(const e of this.anyTypeOfChildren)e.clearCache(t)}get surfaceAreaSqrt(){return this._surfaceAreaSqrt==null&&(this._surfaceAreaSqrt=Math.sqrt(this.surfaceArea)),this._surfaceAreaSqrt??0}getTriangleDensity(t){return this.getTriangleCount(t)/this.surfaceArea}get lodCount(){return this.triangleCountsLength}get sizeInView(){const t=this.boundingBox.getDistance(this.cameraPositionLs);return this.surfaceAreaSqrt/t}get desiredLod(){const t=function(s,r,o){return Math.max(Math.min(s,o),r)}(this.model.quality,0,7),e=this.sizeInView;let i=.5+.3*(7-t);i/=3;for(let s=0;s<this.lodCount-1;s++){const r=this.triangleCounts[s+1]/this.triangleCounts[s];if(e>=i)return s;i*=r}return this.lodCount-1}getTargetLod(t){return Math.min(this.lodCount-1,t)}getDownloadSize(t){return this.downloadSizes[t]==null&&(this.downloadSizes[t]=this.model.nodeDataSource.getDownloadSizeOfNode(this,t)),this.downloadSizes[t]}get hasChildren(){var t;return(t=this.children)==null?void 0:t.length}get hasBBoxOnlyChildren(){var t;return(t=this.bboxOnlyChildren)==null?void 0:t.length}get anyTypeOfChildren(){return this.hasChildren?this.children:this.bboxOnlyChildren}get hasAnyTypeOfChildren(){var t,e;return((t=this.children)==null?void 0:t.length)||((e=this.bboxOnlyChildren)==null?void 0:e.length)}get hasSkeleton(){return this.skeletonIndex!==-1&&this.model.skeletons!=null&&this.skeletonIndex<this.model.skeletons.length}resolveParentGroup(t){if(this.parentSceneNodeIndex!==-1&&(this.parentGroup=t[this.parentSceneNodeIndex]),this.children!=null)for(const e of this.children)e.resolveParentGroup(t)}getLeafBoundingBoxes(t=-1){const e=[];return this.getLeafBoundingBoxesRecurse(e),t!==-1&&e.length>t?(e.sort((i,s)=>s.volume-i.volume),e.slice(0,t)):e}get effectiveParentGroup(){return this.parentGroup!=null?this.parentGroup:this.model.parentGroup}getLeafBBoxSqDistance(t){if(this._nearestLeafNode)return t.sqDistance=this._nearestLeafNode.sqDistance,void(t.node=this._nearestLeafNode.node);const e=this.visibleLeafNodes;if(e.length>0){e.sort((s,r)=>s.getSqDistance()-r.getSqDistance());const i=e[0];t.sqDistance=i.getSqDistance(),t.node=i,this._nearestLeafNode=t}}getSqDistance(){return this._sqDistance==null&&(this._sqDistance=this.boundingBox.getSqDistance(this.cameraPositionLs)),this._sqDistance}shouldGetNearestLeafNode(t){return t.cameraType===je.NonPlayer||this.boundingBox.containsPoint(this.cameraPositionLs)||this.getSqDistance()<Tl}get visibleLeafNodes(){return this._visibleLeafNodes==null&&(this._visibleLeafNodes=[],this.getVisibleLeafNodesRecurse(this._visibleLeafNodes)),this._visibleLeafNodes}getVisibleLeafNodesRecurse(t){if(this.hasAnyTypeOfChildren)for(const e of this.anyTypeOfChildren)e.getVisibleLeafNodesRecurse(t);else this.isBBoxInCameraFrustum()&&t.push(this)}getLeafBoundingBoxesRecurse(t){if(this.hasAnyTypeOfChildren)for(const e of this.anyTypeOfChildren)e.getLeafBoundingBoxesRecurse(t);else t.push(this.boundingBox)}get cameraPositionLs(){return this.parentGroup==null?this.model.cameraPositionLs:this.renderer.getLocalPosition(this.renderer.getPosition(this.camera),this.parentGroup)}get renderer(){return this.model.renderer}get camera(){return this.model.camera}}class j{constructor(t=0,e=0,i=0,s=0){g(this,"x");g(this,"y");g(this,"z");g(this,"w");typeof t=="number"?(this.x=t,this.y=e,this.z=i,this.w=s):(this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w)}static fromArray(t){return t==null?null:new j(t[0],t[1],t[2],t[3])}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}static add(t,e){return new j(t.x+e.x,t.y+e.y,t.z+e.z,t.w+e.w)}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}static sub(t,e){return new j(t.x-e.x,t.y-e.y,t.z-e.z,t.w-e.w)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}static subScalar(t,e){return new j(t.x-e,t.y-e,t.z-e,t.w-e)}mul(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}static mul(t,e){return new j(t.x*e.x,t.y*e.y,t.z*e.z,t.w*e.w)}mulScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}static mulScalar(t,e){return new j(t.x*e,t.y*e,t.z*e,t.w*e)}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}static dot(t,e){return t.x*e.x+t.y*e.y+t.z*e.z+t.w*e.w}div(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}static div(t,e){return new j(t.x/e.x,t.y/e.y,t.z/e.z,t.w/e.w)}divScalar(t){return this.x/=t,this.y/=t,this.z/=t,this.w/=t,this}static divScalar(t,e){return new j(t.x/e,t.y/e,t.z/e,t.w/e)}normalize(){const t=this.lengthSq();if(t>0){const e=1/Math.sqrt(t);this.x*=e,this.y*=e,this.z*=e,this.w*=e}return this}static normalize(t){const e=t.x*t.x+t.y*t.y+t.z*t.z+t.w*t.w;if(e>0){const i=1/Math.sqrt(e);t.x*=i,t.y*=i,t.z*=i,t.w*=i}return t}lerp(t,e,i){return this.x=t.x+i*(e.x-t.x),this.y=t.y+i*(e.y-t.y),this.z=t.z+i*(e.z-t.z),this.w=t.w+i*(e.w-t.w),this}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}static length(t){return Math.sqrt(t.x*t.x+t.y*t.y+t.z*t.z+t.w*t.w)}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}static lengthSq(t){return t.x*t.x+t.y*t.y+t.z*t.z+t.w*t.w}distance(t){const e=this.x-t.x,i=this.y-t.y,s=this.z-t.z,r=this.w-t.w;return Math.sqrt(e*e+i*i+s*s+r*r)}static distance(t,e){const i=t.x-e.x,s=t.y-e.y,r=t.z-e.z,o=t.w-e.w;return Math.sqrt(i*i+s*s+r*r+o*o)}distanceSq(t){const e=this.x-t.x,i=this.y-t.y,s=this.z-t.z,r=this.w-t.w;return e*e+i*i+s*s+r*r}static distanceSq(t,e){const i=t.x-e.x,s=t.y-e.y,r=t.z-e.z,o=t.w-e.w;return i*i+s*s+r*r+o*o}clone(){return new j(this.x,this.y,this.z)}static clone(t){return new j(t.x,t.y,t.z,t.w)}set(t,e,i,s){return typeof t=="number"?(this.x=t,this.y=e,this.z=i,this.w=s):(this.x=t.x,this.y=t.y,this.z=t.z,this.z=t.w),this}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w,this}equals(t,e=!1){return e?st(this.x,t.x)&&st(this.y,t.y)&&st(this.z,t.z)&&st(this.w,t.w):this.x===t.x&&this.y===t.y&&this.z===t.z&&this.w===t.w}static equals(t,e,i=!1){return i?st(t.x,e.x)&&st(t.y,e.y)&&st(t.z,e.z)&&st(t.w,e.w):t.x===e.x&&t.y===e.y&&t.z===e.z&&t.w===e.w}toString(){return`${this.x}, ${this.y}, ${this.z}, ${this.w}`}static toString(t){return`${t.x}, ${t.y}, ${t.z}, ${t.w}`}}class ni{constructor(t=0,e=0,i=0,s=0,r=0,o=0){g(this,"_minX");g(this,"_minY");g(this,"_minZ");g(this,"_maxX");g(this,"_maxY");g(this,"_maxZ");g(this,"_center");g(this,"_halfExtents");g(this,"_extents");this._minX=t,this._minY=e,this._minZ=i,this._maxX=s,this._maxY=r,this._maxZ=o}get minX(){return this._minX}set minX(t){this._minX=t,this.resetCache()}get maxX(){return this._maxX}set maxX(t){this._maxX=t,this.resetCache()}get minY(){return this._minY}set minY(t){this._minY=t,this.resetCache()}get maxY(){return this._maxY}set maxY(t){this._maxY=t,this.resetCache()}get minZ(){return this._minZ}set minZ(t){this._minZ=t,this.resetCache()}get maxZ(){return this._maxZ}set maxZ(t){this._maxZ=t,this.resetCache()}get center(){return this._center||(this._center=new P(.5*(this._maxX+this._minX),.5*(this._maxY+this._minY),.5*(this._maxZ+this._minZ))),this._center}get halfExtents(){return this._halfExtents||(this._halfExtents=new P((this._maxX-this._minX)/2,(this._maxY-this._minY)/2,(this._maxZ-this._minZ)/2)),this._halfExtents}get extents(){return this._extents||(this._extents=new P(this._maxX-this._minX,this._maxY-this._minY,this._maxZ-this._minZ)),this._extents}add(t,e=new P){t.minX+e.x<this._minX&&(this._minX=t.minX+e.x),t.minY+e.y<this._minY&&(this._minY=t.minY+e.y),t.minZ+e.z<this._minZ&&(this._minZ=t.minZ+e.z),t.maxX+e.x>this._maxX&&(this._maxX=t.maxX+e.x),t.maxY+e.y>this._maxY&&(this._maxY=t.maxY+e.y),t.maxZ+e.z>this._maxZ&&(this._maxZ=t.maxZ+e.z),this.resetCache()}transform(t){const e=t.data,i=this.center.clone(),s=this.halfExtents.clone();let r=e[0],o=e[4],a=e[8],A=e[1],l=e[5],h=e[9],c=e[2],d=e[6],u=e[10];this._center==null&&(this._center=new P),this._center.set(e[12]+r*i.x+o*i.y+a*i.z,e[13]+A*i.x+l*i.y+h*i.z,e[14]+c*i.x+d*i.y+u*i.z),this._halfExtents==null&&(this._halfExtents=new P),this._halfExtents.set(Math.abs(r)*s.x+Math.abs(o)*s.y+Math.abs(a)*s.z,Math.abs(A)*s.x+Math.abs(l)*s.y+Math.abs(h)*s.z,Math.abs(c)*s.x+Math.abs(d)*s.y+Math.abs(u)*s.z),this._minX=this._center.x-this._halfExtents.x,this._maxX=this._center.x+this._halfExtents.x,this._minY=this._center.y-this._halfExtents.y,this._maxY=this._center.y+this._halfExtents.y,this._minZ=this._center.z-this._halfExtents.z,this._maxZ=this._center.z+this._halfExtents.z,this._extents=void 0}equals(t){return this._minX===t.minX&&this._minY===t.minY&&this._minZ===t.minZ&&this._maxX===t.maxX&&this._maxY===t.maxY&&this._maxZ===t.maxZ&&this.center.equals(t.center)}clone(t=new P){return new ni(this._minX+t.x,this._minY+t.y,this._minZ+t.z,this._maxX+t.x,this._maxY+t.y,this._maxZ+t.z)}getMin(t){switch(t){case 0:return this._minX;case 1:return this._minY;case 2:return this._minZ;default:throw new Error(`Index out of range: ${t}`)}}getMax(t){switch(t){case 0:return this._maxX;case 1:return this._maxY;case 2:return this._maxZ;default:throw new Error(`Index out of range: ${t}`)}}toString(){return`min: ${this._minX}, ${this._minY}, ${this._minZ}, max: ${this._maxX}, ${this._maxY}, ${this._maxZ}`}resetCache(){this._center=void 0,this._extents=void 0,this._halfExtents=void 0}}const vo=new P,nc=new j,oe=new j;class ae extends ni{constructor(e,i,s=0,r=0,o=0,a=0,A=0,l=0){super(s,r,o,a,A,l);g(this,"modelNode");g(this,"renderer");g(this,"_volume");g(this,"_surfaceArea");g(this,"_radius");this.renderer=e,this.modelNode=i}get volume(){return this._volume==null&&(this._volume=(this.maxX-this.minX)*(this.maxY-this.minY)*(this.maxZ-this.minZ)),this._volume}get surfaceArea(){if(this._surfaceArea==null){const e=this.maxX-this.minX,i=this.maxY-this.minY,s=this.maxZ-this.minZ,r=2*e*i,o=2*s*i,a=2*s*e;this._surfaceArea=r+o+a}return this._surfaceArea}toBasicBoundingBox(){return new ni(this.minX,this.minY,this.minZ,this.maxX,this.maxY,this.maxZ)}getSqDistance(e){return this._getDistance(e,!0,!0)}getMaxSqDistance(e){return this._getDistance(e,!1,!0)}getDistance(e){return this._getDistance(e,!0,!1)}containsPoint(e,i=0){return e.x>=this.minX-i&&e.x<=this.maxX+i&&e.y>=this.minY-i&&e.y<=this.maxY+i&&e.z>=this.minZ-i&&e.z<=this.maxZ+i}isVisible(e,i){const s=this.renderer.getWorldPosition(vo.set(this.minX,this.minY,this.minZ),i),r=this.renderer.getWorldPosition(vo.set(this.maxX,this.maxY,this.maxZ),i),o=this.renderer.getFrustrumPlanes(e);if(o!=null){let a;for(const A of o){a=0;const l=nc.set(A.normal.x,A.normal.y,A.normal.z,A.distance);if(a+=j.dot(l,oe.set(s.x,s.y,s.z,1))<0?1:0,a+=j.dot(l,oe.set(r.x,s.y,s.z,1))<0?1:0,a+=j.dot(l,oe.set(s.x,r.y,s.z,1))<0?1:0,a+=j.dot(l,oe.set(r.x,r.y,s.z,1))<0?1:0,a+=j.dot(l,oe.set(s.x,s.y,r.z,1))<0?1:0,a+=j.dot(l,oe.set(r.x,s.y,r.z,1))<0?1:0,a+=j.dot(l,oe.set(s.x,r.y,r.z,1))<0?1:0,a+=j.dot(l,oe.set(r.x,r.y,r.z,1))<0?1:0,a===8)return!1}}return!0}get floorArea(){return(this.maxX-this.minX)*(this.maxZ-this.minZ)}get radius(){return this._radius==null&&(this._radius=new P(this.minX,this.minY,this.minZ).sub(new P(this.maxX,this.maxY,this.maxZ)).length()/2),this._radius}get meanDimension(){return(this.maxX-this.minX+(this.maxY-this.minY)+(this.maxZ-this.minZ))/3}get largestDimension(){const e=this.maxX-this.minX,i=this.maxY-this.minY,s=this.maxZ-this.minZ;return Math.max(Math.max(e,i),s)}clone(e=new P){return new ae(this.renderer,this.modelNode,this.minX+e.x,this.minY+e.y,this.minZ+e.z,this.maxX+e.x,this.maxY+e.y,this.maxZ+e.z)}resetCache(){super.resetCache(),this._volume=void 0,this._surfaceArea=void 0,this._radius=void 0}_getDistance(e,i,s){const r=this.containsPoint(e),o=ae.getDistance1D(e.x,this.minX,this.maxX,i,r),a=ae.getDistance1D(e.y,this.minY,this.maxY,i,r),A=ae.getDistance1D(e.z,this.minZ,this.maxZ,i,r);if(r){const l=i?Math.min(Math.min(o,a),A):Math.max(Math.min(o,a),A);return s?Math.pow(l,2):l}return s?o*o+a*a+A*A:Math.sqrt(o*o+a*a+A*A)}static getDistance1D(e,i,s,r,o){if(e<i)return r?i-e:s-e;if(e>s)return r?e-s:e-i;if(r&&!o)return 0;{const a=e-i,A=s-e;return r?Math.min(a,A):Math.max(a,A)}}}class ic{constructor(t,e,i){g(this,"index");g(this,"isBaked");g(this,"lods");this.index=t,this.isBaked=e,this.lods=i}}class k{constructor(t=0,e=0){g(this,"x");g(this,"y");typeof t=="number"?(this.x=t,this.y=e):(this.x=t.x,this.y=t.y)}static fromArray(t){return t==null?null:new k(t[0],t[1])}add(t){return this.x+=t.x,this.y+=t.y,this}static add(t,e){return new k(t.x+e.x,t.y+e.y)}sub(t){return this.x-=t.x,this.y-=t.y,this}static sub(t,e){return new k(t.x-e.x,t.y-e.y)}subScalar(t){return this.x-=t,this.y-=t,this}static subScalar(t,e){return new k(t.x-e,t.y-e)}mul(t){return this.x*=t.x,this.y*=t.y,this}static mul(t,e){return new k(t.x*e.x,t.y*e.y)}mulScalar(t){return this.x*=t,this.y*=t,this}static mulScalar(t,e){return new k(t.x*e,t.y*e)}div(t){return this.x/=t.x,this.y/=t.y,this}static div(t,e){return new k(t.x/e.x,t.y/e.y)}divScalar(t){return this.x/=t,this.y/=t,this}static divScalar(t,e){return new k(t.x/e,t.y/e)}normalize(){const t=this.lengthSq();if(t>0){const e=1/Math.sqrt(t);this.x*=e,this.y*=e}return this}static normalize(t){const e=t.x*t.x+t.y*t.y;if(e>0){const i=1/Math.sqrt(e);t.x*=i,t.y*=i}return t}lerp(t,e,i){return this.x=t.x+i*(e.x-t.x),this.y=t.y+i*(e.y-t.y),this}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}static length(t){return Math.sqrt(t.x*t.x+t.y*t.y)}lengthSq(){return this.x*this.x+this.y*this.y}static lengthSq(t){return t.x*t.x+t.y*t.y}distance(t){const e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)}static distance(t,e){const i=t.x-e.x,s=t.y-e.y;return Math.sqrt(i*i+s*s)}distanceSq(t){const e=this.x-t.x,i=this.y-t.y;return e*e+i*i}static distanceSq(t,e){const i=t.x-e.x,s=t.y-e.y;return i*i+s*s}clone(){return new k(this.x,this.y)}static clone(t){return new k(t.x,t.y)}set(t,e){return typeof t=="number"?(this.x=t,this.y=e):(this.x=t.x,this.y=t.y),this}copy(t){return this.x=t.x,this.y=t.y,this}equals(t,e=!1){return e?st(this.x,t.x)&&st(this.y,t.y):this.x===t.x&&this.y===t.y}static equals(t,e,i=!1){return i?st(t.x,e.x)&&st(t.y,e.y):t.x===e.x&&t.y===e.y}toString(){return`${this.x}, ${this.y}`}static toString(t){return`${t.x}, ${t.y}`}toPlayCanvasVector(t=new _i){return t.set(this.x,this.y),t}}const ii=["albedoMap","diffuseMap","normalMap","metalRoughnessMap","specularGlossinessMap","emissiveMap","occlusionMap","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","lightMap","transmissionMap","thicknessMap","sheenMap","sheenRoughnessMap","specularMap","specularColorMap"];class we{constructor(t,e,i,s,r,o,a,A,l,h,c){g(this,"name");g(this,"matParams");g(this,"nodeJson");g(this,"lod");g(this,"colorMap");g(this,"colorMapAlpha");g(this,"emissiveMap");g(this,"metallicRoughnessMap");g(this,"occlusionMap");g(this,"normalMap");g(this,"diffuseMap");g(this,"specularGlossinessMap");g(this,"clearcoatMap");g(this,"clearcoatRoughnessMap");g(this,"clearcoatNormalMap");g(this,"lightMap");g(this,"transmissionMap");g(this,"thicknessMap");g(this,"sheenMap");g(this,"sheenRoughnessMap");g(this,"specularMap");g(this,"specularColorMap");g(this,"renderer");g(this,"useAlpha");g(this,"forceDoubleSided");g(this,"environmentMap");g(this,"texPref");g(this,"rootTextures");g(this,"texturesMap");this.name=t,this.matParams=e,this.nodeJson=i,this.lod=s,this.renderer=a,this.useAlpha=A,this.forceDoubleSided=l,this.environmentMap=h,this.rootTextures=r??null,this.texturesMap=o,c!==void 0&&(this.texPref=c),this.nodeJson!==null&&this.lod!==null&&this.setupTexturesFromJsonNode(this.nodeJson,this.lod,this.texturesMap)}static fromNewest(t,e,i,s,r,o,a,A,l){return new we(t,e,null,null,i,s,r,o,a,A,l)}static fromMid(t,e,i,s,r,o,a,A,l){return new we(t,e,i,s,null,r,o,a,A,l)}static fromOldest(t,e,i,s,r,o,a,A){return new we(t,null,e,i,null,s,r,o,a,A)}pickLodIndexForCoverage(t,e=1.6,i,s=.85){if(!this.rootTextures||!this.matParams)return-1;const r=Math.max(1,e*t);if(i&&t>=s*i)return 0;const o=this.matParams;for(const a of ii){const A=o[a];if(A==null||A<0)continue;const l=this.rootTextures[A];if(l&&l.lods&&l.lods.length!==0){for(let h=l.lods.length-1;h>=0;h--)if((l.lods[h].width??0)>=r)return h;return 0}}return 0}pickLodIndexForCoverageHysteresis(t,e,i){var u;if(!this.rootTextures||!this.matParams)return-1;const s=(i==null?void 0:i.scaleFactor)??1.6,r=(i==null?void 0:i.promote)??.9,o=(i==null?void 0:i.demote)??.9,a=i==null?void 0:i.screenPx;if(a&&t>=((i==null?void 0:i.fullScreenFrac)??.85)*a)return 0;const A=this.pickLodIndexForCoverage(t,s);if(e==null||e<0)return A;const l=this.matParams;let h=null;for(const p of ii){const I=l[p];if(I==null||I<0)continue;const f=this.rootTextures[I];if((u=f==null?void 0:f.lods)!=null&&u.length){h=f;break}}if(!h)return A;const c=h.lods.map(p=>p.width??0),d=Math.max(1,s*t);return A<e?d>=r*(c[e]??0)?A:e:A>e&&d<=o*(c[A]??0)?A:e}getCacheTierForRequest(t){var i;if(!this.rootTextures||!this.matParams)return 0;let e=0;for(const s of ii){const r=this.matParams[s];if(r==null||r<0)continue;const o=this.rootTextures[r],a=((i=o==null?void 0:o.lods)==null?void 0:i.length)??0;a>1&&(e=Math.max(e,a-1))}return t==="best"?0:t==="worst"||t==null?e:Math.max(0,Math.min(Math.floor(t),e))}getTexturesForTier(t){if(!this.rootTextures||!this.matParams)return[];const e=this.matParams,i=this.rootTextures,s=this.texturesMap,r=[],o=a=>{var c;if(typeof a!="number"||a<0||a>=i.length)return;const A=i[a],l=Di(A,t),h=(c=A.lods)==null?void 0:c[l];return h!=null&&h.file?s[h.file]:void 0};for(const a of ii)r.push(o(e[a]));return r.filter(a=>a!==void 0)}setupTexturesFromJsonNode(t,e,i){const s=(r,o)=>{const a=t[r];a&&a[e]&&(this[o]=i[a[e]])};s("colorMap","colorMap"),s("colorMapAlpha","colorMapAlpha"),s("emissiveMap","emissiveMap"),s("metRoughMap","metallicRoughnessMap"),s("occlusionMap","occlusionMap"),s("normalMap","normalMap"),s("diffuseMap","diffuseMap"),s("specularGlossinessMap","specularGlossinessMap"),s("clearCoatMap","clearcoatMap"),s("clearCoatRoughnessMap","clearcoatRoughnessMap"),s("clearCoatNormalMap","clearcoatNormalMap"),s("lightMap","lightMap"),s("transmissionMap","transmissionMap"),s("thicknessMap","thicknessMap"),s("sheenMap","sheenMap"),s("sheenRoughnessMap","sheenRoughnessMap"),s("specularMap","specularMap"),s("specularColorMap","specularColorMap")}setupTexturesFromIndices(t,e,i,s="best"){const r=(o,a)=>{var u,p,I;const A=t[o];if(A==null||A<0)return;const l=e[A];if(!((u=l==null?void 0:l.lods)!=null&&u.length))return;const h=Di(l,s),c=(I=(p=l.lods)==null?void 0:p[h])==null?void 0:I.file;if(!c)return;const d=i[c];d&&(this[a]=d)};r("albedoMap","colorMap"),r("alphaMap","colorMapAlpha"),r("emissiveMap","emissiveMap"),r("metalRoughnessMap","metallicRoughnessMap"),r("occlusionMap","occlusionMap"),r("normalMap","normalMap"),r("diffuseMap","diffuseMap"),r("specularGlossinessMap","specularGlossinessMap"),r("clearcoatMap","clearcoatMap"),r("clearcoatRoughnessMap","clearcoatRoughnessMap"),r("clearcoatNormalMap","clearcoatNormalMap"),r("lightMap","lightMap"),r("transmissionMap","transmissionMap"),r("thicknessMap","thicknessMap"),r("sheenMap","sheenMap"),r("sheenRoughnessMap","sheenRoughnessMap"),r("specularMap","specularMap"),r("specularColorMap","specularColorMap")}async load(t,e){const i=this.matParams||{},s=!!this.matParams;let r={};const o=new Map,a=it=>{if(!it)return;const ge=o.get(it)||0;return o.set(it,ge+1),it.addCount(),it.loadTexture()};if(this.rootTextures&&s){const it=e??this.texPref??"best";this.setupTexturesFromIndices(i,this.rootTextures,this.texturesMap,it);const ge=[this.colorMap,this.colorMapAlpha,this.emissiveMap,this.metallicRoughnessMap,this.occlusionMap,this.normalMap,this.diffuseMap,this.specularGlossinessMap,this.clearcoatMap,this.clearcoatRoughnessMap,this.clearcoatNormalMap,this.lightMap,this.transmissionMap,this.thicknessMap,this.sheenMap,this.sheenRoughnessMap,this.specularMap,this.specularColorMap].filter(Re=>Re&&Re.state===Fe.Loading);ge.length>0&&await Promise.all(ge.map(Re=>Re.waitUntilLoaded()))}function A(it,ge,Re){const kt=i;if(!s||kt[it]===void 0)return ge;if(Re===1||!Array.isArray(ge))return kt[it];switch(Re??ge.length){case 2:return[kt[it].x,kt[it].y];case 3:return[kt[it].x,kt[it].y,kt[it].z];case 4:return[kt[it].x,kt[it].y,kt[it].z,kt[it].w];default:throw new Error("Only know how to handle a material property with 2 to 4 components")}}(this.rootTextures&&s||this.nodeJson&&this.lod!=null)&&(r.colorMap=a(this.colorMap),r.colorMapAlpha=a(this.colorMapAlpha),r.emissiveMap=a(this.emissiveMap),r.metallicRoughnessMap=a(this.metallicRoughnessMap),r.occlusionMap=a(this.occlusionMap),r.normalMap=a(this.normalMap),r.diffuseMap=a(this.diffuseMap),r.specularGlossinessMap=a(this.specularGlossinessMap),r.clearcoatMap=a(this.clearcoatMap),r.clearcoatRoughnessMap=a(this.clearcoatRoughnessMap),r.clearcoatNormalMap=a(this.clearcoatNormalMap),r.lightMap=a(this.lightMap),r.transmissionMap=a(this.transmissionMap),r.thicknessMap=a(this.thicknessMap),r.sheenMap=a(this.sheenMap),r.sheenRoughnessMap=a(this.sheenRoughnessMap),r.specularMap=a(this.specularMap),r.specularColorMap=a(this.specularColorMap));const l=!!A("unlit",!1),h=!!this.forceDoubleSided||!!A("doubleSided",!1),c=A("alphaMode",$t.Opaque),d=A("alphaCutoff",.5),u=!!A("usePbrMR",!0),p=re.fromArray(A("albedo",[1,1,1,1])),I=A("albedoUvs",0),f=k.fromArray(A("albedoUvScale",[1,1])),m=k.fromArray(A("albedoUvOffset",[0,0])),x=A("albedoUvRotation",0),E=A("albedoMagFilter",9729),M=A("albedoMinFilter",9987),L=A("albedoWrapS",10497),B=A("albedoWrapT",10497),w=A("metalness",1),y=A("roughness",1),Q=A("metalRoughnessUvs",0),b=k.fromArray(A("metalRoughnessUvScale",[1,1])),v=k.fromArray(A("metalRoughnessUvOffset",[0,0])),T=A("metalRoughnessUvRotation",0),N=A("metalRoughnessMagFilter",9729),R=A("metalRoughnessMinFilter",9987),D=A("metalRoughnessWrapS",10497),U=A("metalRoughnessWrapT",10497),z=re.fromArray(A("diffuseColor",[1,1,1],3)),K=A("diffuseUvs",0),V=k.fromArray(A("diffuseUvScale",[1,1],2)),W=k.fromArray(A("diffuseUvOffset",[0,0],2)),$=A("diffuseUvRotation",0),X=A("diffuseMagFilter",9729),xt=A("diffuseMinFilter",9987),O=A("diffuseWrapS",10497),nt=A("diffuseWrapT",10497),at=re.fromArray(A("specularColor",[1,1,1])),Lt=A("glossiness",null),Qt=A("specularGlossinessUvs",0),ce=k.fromArray(A("specularGlossinessUvScale",null,2)),ue=k.fromArray(A("specularGlossinessUvOffset",null,2)),de=A("specularGlossinessUvRotation",0),Er=A("specularGlossinessMagFilter",9729),kg=A("specularGlossinessMinFilter",9987),Ng=A("specularGlossinessWrapS",10497),Fg=A("specularGlossinessWrapT",10497),Ug=A("normalScale",1),Pg=A("normalUvs",0),zg=k.fromArray(A("normalUvScale",[1,1])),Xg=k.fromArray(A("normalUvOffset",[0,0])),Zg=A("normalUvRotation",0),Hg=A("normalMagFilter",9729),Kg=A("normalMinFilter",9987),Wg=A("normalWrapS",10497),Og=A("normalWrapT",10497),Yg=A("occlusionScale",1),Vg=A("occlusionUvs",0),Jg=k.fromArray(A("occlusionUvScale",[1,1])),qg=k.fromArray(A("occlusionUvOffset",[0,0])),jg=A("occlusionUvRotation",0),$g=A("occlusionMagFilter",9729),tp=A("occlusionMinFilter",9987),ep=A("occlusionWrapS",10497),np=A("occlusionWrapT",10497),ip=re.fromArray(A("emissiveScale",[0,0,0])),sp=A("emissiveUvs",0),rp=k.fromArray(A("emissiveUvScale",[1,1])),op=k.fromArray(A("emissiveUvOffset",[0,0])),ap=A("emissiveUvRotation",0),Ap=A("emissiveMagFilter",9729),lp=A("emissiveMinFilter",9987),hp=A("emissiveWrapS",10497),cp=A("emissiveWrapT",10497),up=A("emissiveStrength",null),dp=A("lightUvs",0),gp=k.fromArray(A("lightUvScale",[1,1])),pp=k.fromArray(A("lightUvOffset",[0,0])),fp=A("lightUvRotation",0),mp=A("lightMagFilter",9729),Ip=A("lightMinFilter",9987),Cp=A("lightWrapS",10497),Bp=A("lightWrapT",10497),yp=!!A("lightMapRGBM",!1),Ep=A("ior",null),wp=!!A("useTransmission",!1),xp=A("transmission",null),Qp=A("transmissionUvs",0),Mp=k.fromArray(A("transmissionUvScale",[1,1])),bp=k.fromArray(A("transmissionUvOffset",[0,0])),Sp=A("transmissionUvRotation",0),_p=A("transmissionMagFilter",9729),Gp=A("transmissionMinFilter",9987),Lp=A("transmissionWrapS",10497),vp=A("transmissionWrapT",10497),Rp=!!A("useVolume",!1),Tp=A("thickness",0),Dp=A("thicknessUvs",0),kp=k.fromArray(A("thicknessUvScale",[1,1])),Np=k.fromArray(A("thicknessUvOffset",[0,0])),Fp=A("thicknessUvRotation",0),Up=A("thicknessMagFilter",9729),Pp=A("thicknessMinFilter",9987),zp=A("thicknessWrapS",10497),Xp=A("thicknessWrapT",10497),Zp=re.fromArray(A("attenuationColor",[0,0,0])),Hp=A("attenuationDistance",null),Kp=A("clearcoat",null),Wp=A("clearcoatUvs",0),Op=k.fromArray(A("clearcoatUvScale",[1,1])),Yp=k.fromArray(A("clearcoatUvOffset",[0,0])),Vp=A("clearcoatUvRotation",0),Jp=A("clearcoatMagFilter",9729),qp=A("clearcoatMinFilter",9987),jp=A("clearcoatWrapS",10497),$p=A("clearcoatWrapT",10497),tf=A("clearcoatRoughness",null),ef=A("clearcoatRoughnessUvs",0),nf=k.fromArray(A("clearcoatRoughnessUvScale",[1,1])),sf=k.fromArray(A("clearcoatRoughnessUvOffset",[0,0])),rf=A("clearcoatRoughnessUvRotation",0),of=A("clearcoatRoughnessMagFilter",9729),af=A("clearcoatRoughnessMinFilter",9987),Af=A("clearcoatRoughnessWrapS",10497),lf=A("clearcoatRoughnessWrapT",10497),hf=A("clearcoatNormalUvs",0),cf=k.fromArray(A("clearcoatNormalUvScale",[1,1])),uf=k.fromArray(A("clearcoatNormalUvOffset",[0,0])),df=A("clearcoatNormalUvRotation",0),gf=A("clearcoatNormalScale",1),pf=A("clearcoatNormalMagFilter",9729),ff=A("clearcoatNormalMinFilter",9987),mf=A("clearcoatNormalWrapS",10497),If=A("clearcoatNormalWrapT",10497),Cf=!!A("useSpecular",!1),Bf=A("specular",1),yf=A("specularUvs",0),Ef=k.fromArray(A("specularUvScale",[1,1])),wf=k.fromArray(A("specularUvOffset",[0,0])),xf=A("specularUvRotation",0),Qf=A("specularMagFilter",9729),Mf=A("specularMinFilter",9987),bf=A("specularWrapS",10497),Sf=A("specularWrapT",10497),_f=A("specularColorUvs",0),Gf=k.fromArray(A("specularColorUvScale",[1,1])),Lf=k.fromArray(A("specularColorUvOffset",[0,0])),vf=A("specularColorUvRotation",0),Rf=A("specularColorMagFilter",9729),Tf=A("specularColorMinFilter",9987),Df=A("specularColorWrapS",10497),kf=A("specularColorWrapT",10497),Nf=A("dispersion",null),Ff=!!A("useSheen",!1),Uf=re.fromArray(A("sheenColorFactor",[1,1,1])),Pf=A("sheenUvs",0),zf=k.fromArray(A("sheenUvScale",[1,1])),Xf=k.fromArray(A("sheenUvOffset",[0,0])),Zf=A("sheenUvRotation",0),Hf=A("sheenMagFilter",9729),Kf=A("sheenMinFilter",9987),Wf=A("sheenWrapS",10497),Of=A("sheenWrapT",10497),Yf=A("sheenRoughness",null),Vf=A("sheenRoughnessUvs",0),Jf=k.fromArray(A("sheenRoughnessUvScale",[1,1])),qf=k.fromArray(A("sheenRoughnessUvOffset",[0,0])),jf=A("sheenRoughnessUvRotation",0),$f=A("sheenRoughnessMagFilter",9729),tm=A("sheenRoughnessMinFilter",9987),em=A("sheenRoughnessWrapS",10497),nm=A("sheenRoughnessWrapT",10497),im=!!A("opacityVertexColor",null),sm=A("opacityVertexColorChannel",null),rm=A("opacityDither",null),om=!!A("opacityFadesSpecular",null),am=A("blendType",null),Am=A("alphaTest",null),lm=!!A("alphaToCoverage",null),hm={isUnlit:l,isDoubleSided:s?h:t.isDoubleSided,alphaMode:this.useAlpha?s?c:t.alphaMode:$t.Opaque,alphaCutoff:d,useMetalRoughness:u,colorMap:r.colorMap,colorMapUvs:I,colorMapTiling:f,colorMapOffset:m,colorMapRotation:x,colorMapMagFilter:E,colorMapMinFilter:M,colorMapWrapS:L,colorMapWrapT:B,albedoColor:s?p:t.color,alphaMap:r.colorMapAlpha,alphaMapUvs:I,metalRoughnessMap:r.metallicRoughnessMap,metalRoughnessMapUvs:Q,metalRoughnessMapTiling:b,metalRoughnessMapOffset:v,metalRoughnessMapRotation:T,metalRoughnessMapMagFilter:N,metalRoughnessMapMinFilter:R,metalRoughnessMapWrapS:D,metalRoughnessMapWrapT:U,metalness:s?w:t.metalness,roughness:s?y:t.roughness,diffuseColor:z,diffuseMap:r.diffuseMap,diffuseMapUvs:K,diffuseMapTiling:V,diffuseMapOffset:W,diffuseMapRotation:$,diffuseMapMagFilter:X,diffuseMapMinFilter:xt,diffuseMapWrapS:O,diffuseMapWrapT:nt,specularColor:at,glossiness:Lt,specularGlossinessMap:r.specularGlossinessMap,specularGlossinessMapUvs:Qt,specularGlossinessMapTiling:ce,specularGlossinessMapOffset:ue,specularGlossinessMapRotation:de,specularGlossinessMapMagFilter:Er,specularGlossinessMapMinFilter:kg,specularGlossinessMapWrapS:Ng,specularGlossinessMapWrapT:Fg,normalMap:r.normalMap,normalMapUvs:Pg,normalMapTiling:zg,normalMapOffset:Xg,normalMapRotation:Zg,normalMapMagFilter:Hg,normalMapMinFilter:Kg,normalMapWrapS:Wg,normalMapWrapT:Og,normalScale:s?Ug:t.normalScale,normalMapType:t.node.model.rootNode.normalMapType??Li.Default,aoMap:r.occlusionMap,aoMapUvs:Vg,aoMapTiling:Jg,aoMapOffset:qg,aoMapRotation:jg,aoMapMagFilter:$g,aoMapMinFilter:tp,aoMapWrapS:ep,aoMapWrapT:np,aoScale:s?Yg:t.aoScale,emissiveMap:r.emissiveMap,emissiveMapUvs:sp,emissiveMapTiling:rp,emissiveMapOffset:op,emissiveMapRotation:ap,emissiveMapMagFilter:Ap,emissiveMapMinFilter:lp,emissiveMapWrapS:hp,emissiveMapWrapT:cp,emissiveColor:s?ip:t.emissiveColor,emissiveStrength:up,lightMap:r.lightMap,lightMapUvs:dp,lightMapTiling:gp,lightMapOffset:pp,lightMapRotation:fp,lightMapMagFilter:mp,lightMapMinFilter:Ip,lightMapWrapS:Cp,lightMapWrapT:Bp,isLightMapRgbm:s?yp:t.isLightMapRgbm,ior:Ep,useTransmission:wp,transmissionMap:r.transmissionMap,transmissionMapUvs:Qp,transmissionMapTiling:Mp,transmissionMapOffset:bp,transmissionMapRotation:Sp,transmissionMapMagFilter:_p,transmissionMapMinFilter:Gp,transmissionMapWrapS:Lp,transmissionMapWrapT:vp,transmission:xp,useVolume:Rp,thicknessMap:r.thicknessMap,thicknessMapUvs:Dp,thicknessMapTiling:kp,thicknessMapOffset:Np,thicknessMapRotation:Fp,thicknessMapMagFilter:Up,thicknessMapMinFilter:Pp,thicknessMapWrapS:zp,thicknessMapWrapT:Xp,thickness:Tp,attenuationColor:Zp,attenuationDistance:Hp,clearCoatMap:r.clearcoatMap,clearCoatMapUvs:Wp,clearCoatMapTiling:Op,clearCoatMapOffset:Yp,clearCoatMapRotation:Vp,clearCoatMapMagFilter:Jp,clearCoatMapMinFilter:qp,clearCoatMapWrapS:jp,clearCoatMapWrapT:$p,clearCoat:Kp,clearCoatRoughnessMap:r.clearcoatRoughnessMap,clearCoatRoughnessMapUvs:ef,clearCoatRoughnessMapTiling:nf,clearCoatRoughnessMapOffset:sf,clearCoatRoughnessMapRotation:rf,clearCoatRoughnessMapMagFilter:of,clearCoatRoughnessMapMinFilter:af,clearCoatRoughnessMapWrapS:Af,clearCoatRoughnessMapWrapT:lf,clearCoatRoughness:tf,clearCoatNormalMap:r.clearcoatNormalMap,clearCoatNormalMapUvs:hf,clearCoatNormalMapTiling:cf,clearCoatNormalMapOffset:uf,clearCoatNormalMapRotation:df,clearCoatNormalMapMagFilter:pf,clearCoatNormalMapMinFilter:ff,clearCoatNormalMapWrapS:mf,clearCoatNormalMapWrapT:If,clearCoatNormalScale:gf,useSpecular:Cf,specular:Bf,specularMap:r.specularMap,specularMapUvs:yf,specularMapTiling:Ef,specularMapOffset:wf,specularMapRotation:xf,specularMapMagFilter:Qf,specularMapMinFilter:Mf,specularMapWrapS:bf,specularMapWrapT:Sf,specularColorMap:r.specularColorMap,specularColorMapUvs:_f,specularColorMapTiling:Gf,specularColorMapOffset:Lf,specularColorMapRotation:vf,specularColorMapMagFilter:Rf,specularColorMapMinFilter:Tf,specularColorMapWrapS:Df,specularColorMapWrapT:kf,dispersion:Nf,useSheen:Ff,sheenColor:Uf,sheenMap:r.sheenMap,sheenMapUvs:Pf,sheenMapTiling:zf,sheenMapOffset:Xf,sheenMapRotation:Zf,sheenMapMagFilter:Hf,sheenMapMinFilter:Kf,sheenMapWrapS:Wf,sheenMapWrapT:Of,sheenRoughness:Yf,sheenRoughnessMap:r.sheenRoughnessMap,sheenRoughnessMapUvs:Vf,sheenRoughnessMapTiling:Jf,sheenRoughnessMapOffset:qf,sheenRoughnessMapRotation:jf,sheenRoughnessMapMagFilter:$f,sheenRoughnessMapMinFilter:tm,sheenRoughnessMapWrapS:em,sheenRoughnessMapWrapT:nm,opacityVertexColor:im,opacityVertexColorChannel:sm,opacityDither:rm,opacityFadesSpecular:om,blendType:am,alphaTest:Am,alphaToCoverage:lm,environmentMap:this.environmentMap},Ll=await this.renderer.createMaterial(hm);return Object.defineProperty(Ll,"psTexRefs",{value:o,enumerable:!1,configurable:!0,writable:!0}),Ll}}function Ro(n,t,e,i,s,r,o){if(n.geometry)for(let a=0;a<n.geometry.length;a++){const A=n.geometry[a].replace(".xrgc","").replace("geometry","mat");t[A]||(t[A]=we.fromOldest(A,n,a,e,i,s,r,o))}if(n.children)for(const a of n.children)Ro(a,t,e,i,s,r,o)}function To(n,t){if(n.material){for(let e=0;e<n.material.length;e++)if(n.material[e]===t)return{node:n,lod:e}}if(n.children)for(const e of n.children){const i=To(e,t);if(i)return i}return null}class sc{constructor(){g(this,"byKey",new Map);g(this,"byMat",new Map)}key(t,e){return`${t}::tex:${e}`}async getOrCreate(t,e,i){const s=this.key(t,e),r=this.byKey.get(s);if(r)return r.mat;const o=await i(),a={name:t,tier:e,mat:o,refs:0};return this.byKey.set(s,a),this.byMat.set(o,a),o}retain(t,e){const i=this.key(t,e),s=this.byKey.get(i);s&&s.refs++}releaseByKey(t,e,i){const s=this.key(t,e),r=this.byKey.get(s);return!!r&&(r.refs=Math.max(0,r.refs-1),r.refs===0&&this.safeFinalize(r,i),!0)}releaseByMat(t,e){const i=this.byMat.get(t);return!!i&&(i.refs=Math.max(0,i.refs-1),i.refs===0&&this.safeFinalize(i,e),!0)}finalize(t,e){var i,s,r;(i=t.owners)==null||i.clear();try{(function(o){if(!o)return;const a=o.psTexRefs;a&&(a.forEach((A,l)=>{for(let h=0;h<A;h++)l.release(),l.refCount<0&&(l.refCount=0)}),a.clear(),o.psTexRefs=void 0)})(t.mat)}catch{}try{e?e(t.mat):(r=(s=t.mat).destroy)==null||r.call(s)}catch{}this.byMat.delete(t.mat),this.byKey.delete(this.key(t.name,t.tier))}clearAll(t){for(const e of this.byKey.values())this.finalize(e,t);this.byKey.clear(),this.byMat.clear()}retainForOwner(t,e,i){const s=this.key(t,e),r=this.byKey.get(s);if(!r)return;const o=r.owners??(r.owners=new Set);o.has(i)||(o.add(i),r.refs++)}releaseForOwner(t,e,i,s){const r=this.key(t,e),o=this.byKey.get(r);if(!o)return;const a=o.owners;a&&a.has(i)&&(a.delete(i),o.refs=Math.max(0,o.refs-1),o.refs===0?this.safeFinalize(o,s):this._scrubEntryOwners(o,s))}_scrubEntryOwners(t,e){const i=t.owners;if(!i||i.size===0)return;let s=0;const r=[];for(const o of i)o.material===t.mat?s++:r.push(o);if(s!==t.refs){for(const o of r)i.delete(o);t.refs=s,t.refs===0&&this.safeFinalize(t,e)}}safeFinalize(t,e){(()=>{const i=t.owners;if(!i||i.size===0)return!1;for(const s of i)if(s.material===t.mat)return!0;return!1})()||this.finalize(t,e)}}const Do=new P,ko=new P,No=new P,si=new P,ri=new P;let gs,rc=new class{constructor(n){g(this,"data");if(n)if(this.data=new Float32Array(16),n instanceof Float32Array)this.data.set(n);else for(let t=0;t<16;t++)this.data[t]=n[t];else this.data=new Float32Array(16),this.data[0]=this.data[5]=this.data[10]=this.data[15]=1}copy(n){const t=n.data,e=this.data;for(let i=0;i<16;i++)e[i]=t[i];return this}set(n){const t=this.data;for(let e=0;e<16;e++)t[e]=n[e];return this}invert(){const n=this.data,t=n[0],e=n[1],i=n[2],s=n[3],r=n[4],o=n[5],a=n[6],A=n[7],l=n[8],h=n[9],c=n[10],d=n[11],u=n[12],p=n[13],I=n[14],f=n[15],m=t*o-e*r,x=t*a-i*r,E=t*A-s*r,M=e*a-i*o,L=e*A-s*o,B=i*A-s*a,w=l*p-h*u,y=l*I-c*u,Q=l*f-d*u,b=h*I-c*p,v=h*f-d*p,T=c*f-d*I,N=m*T-x*v+E*b+M*Q-L*y+B*w;if(N===0)this.setIdentity();else{const R=1/N,D=this.data;D[0]=(o*T-a*v+A*b)*R,D[1]=(-e*T+i*v-s*b)*R,D[2]=(p*B-I*L+f*M)*R,D[3]=(-h*B+c*L-d*M)*R,D[4]=(-r*T+a*Q-A*y)*R,D[5]=(t*T-i*Q+s*y)*R,D[6]=(-u*B+I*E-f*x)*R,D[7]=(l*B-c*E+d*x)*R,D[8]=(r*v-o*Q+A*w)*R,D[9]=(-t*v+e*Q-s*w)*R,D[10]=(u*L-p*E+f*m)*R,D[11]=(-l*L+h*E-d*m)*R,D[12]=(-r*b+o*y-a*w)*R,D[13]=(t*b-e*y+i*w)*R,D[14]=(-u*M+p*x-I*m)*R,D[15]=(l*M-h*x+c*m)*R}return this}setIdentity(){const n=this.data;return n[0]=1,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=1,n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[10]=1,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,this}transformPoint(n,t=new P){return t.x=n.x*this.data[0]+n.y*this.data[4]+n.z*this.data[8]+this.data[12],t.y=n.x*this.data[1]+n.y*this.data[5]+n.z*this.data[9]+this.data[13],t.z=n.x*this.data[2]+n.y*this.data[6]+n.z*this.data[10]+this.data[14],t}transformVector(n,t=new P){return t.x=n.x*this.data[0]+n.y*this.data[4]+n.z*this.data[8],t.y=n.x*this.data[1]+n.y*this.data[5]+n.z*this.data[9],t.z=n.x*this.data[2]+n.y*this.data[6]+n.z*this.data[10],t}get(n,t){return this.data[4*n+t]}getX(n=new P){return n.set(this.data[0],this.data[1],this.data[2])}getY(n=new P){return n.set(this.data[4],this.data[5],this.data[6])}getZ(n=new P){return n.set(this.data[8],this.data[9],this.data[10])}getScale(n=new P){return this.getX(Do),this.getY(ko),this.getZ(No),n.set(Do.length(),ko.length(),No.length()),n}getEulerAngles(n=new P){this.getScale(si);const t=si.x,e=si.y,i=si.z;if(t===0||e===0||i===0)return n.set(0,0,0);const s=this.data,r=Math.asin(-s[2]/t),o=.5*Math.PI;let a,A;return r<o?r>-o?(a=Math.atan2(s[6]/e,s[10]/i),A=Math.atan2(s[2]/t,s[0]/t)):(A=0,a=-Math.atan2(s[4]/e,s[5]/e)):(A=0,a=Math.atan2(s[4]/e,s[5]/e)),n.set(a,r,A).mulScalar(180/Math.PI)}get hasRotation(){return this.getEulerAngles(ri),ri.x>0||ri.y>0||ri.z>0}getTranslation(n=new P){return n.set(this.data[12],this.data[13],this.data[14])}};class oc{constructor(t,e,i,s,r,o){g(this,"initialTrianglePercent");g(this,"sceneGroup");g(this,"parentGroup");g(this,"rootNode");g(this,"quality");g(this,"url");g(this,"cameraType");g(this,"qualityPriority");g(this,"isRemoving");g(this,"isInitializing");g(this,"isUpdatingCount");g(this,"useEmbeddedCollider");g(this,"nodeDataSource");g(this,"options");g(this,"camera");g(this,"streamController");g(this,"skeletons");g(this,"renderer");g(this,"isAnimated",!1);g(this,"hasAutoPlayAnimation",!1);g(this,"onModelLoadError");g(this,"materialCache");g(this,"dynamicTexLodEnabled",!1);g(this,"_boundingBox");g(this,"hasCollider",!1);this.streamController=t,this.renderer=e,this.parentGroup=i,this.camera=s,this.cameraType=r,this.options=o,this.isInitializing=!0,this.isRemoving=!1,this.isUpdatingCount=0,this.sceneGroup=o.sceneGroup,this.qualityPriority=o.qualityPriority,this.initialTrianglePercent=o.initialTrianglePercent,this.useEmbeddedCollider=o.useEmbeddedCollider===void 0||o.useEmbeddedCollider,this.url=o.pathOrUrl,this.quality=4,this.materialCache=new sc,o.onModelLoadError&&(this.onModelLoadError=o.onModelLoadError)}async init(){try{this.nodeDataSource=new tc(this.url,this.renderer,this.options);const t=await this.nodeDataSource.init();if(!t.success)throw new Error("Polygon Streaming, "+t.message);this.rootNode=await this.buildPartitionTree(this.nodeDataSource.modelSource)}catch(t){throw t instanceof Error||(t=new Error(`Polygon Streaming, Unexpected error: ${String(t)}`)),t}}setCamera(t){this.camera=t}addCollider(t){const e=t.indices.length/3;return e<=Mr?(this.renderer.addCollider(this.parentGroup,t),this.hasCollider=!0,!0):(console.warn(`Not adding collider which has ${gt(e)} triangles, as it exceeds the maximum number of triangles of ${gt(Mr)}`),this.hasCollider=!1,!1)}updateCollider(){this.hasCollider&&this.renderer.updateCollider&&this.renderer.updateCollider(this.parentGroup)}dispose(){this.materialCache.clearAll(),this.nodeDataSource.dispose(),this.nodeDataSource.modelSource.dispose(),this.nodeDataSource=null,this.rootNode=null,this.sceneGroup=null,this.parentGroup=null}get cameraPositionLs(){return this.renderer.getLocalPosition(this.renderer.getPosition(this.camera),this.parentGroup)}get cameraPositionWs(){return this.renderer.getPosition(this.camera)}get cameraDirection(){return this.renderer.getDirection(this.camera)}get texturesSize(){return this.nodeDataSource.texturesSize}get useOcclusionCulling(){return this.streamController.options.useOcclusionCulling}calculateBoundingBox(){if(this.isAnimated){if(this._boundingBox==null){if(!this.renderer.getBoundingBox)throw new Error("Polygon Streaming, This renderer does not support calculating model bounding box for animated models");gs==null&&(gs=new ae),this.applyAnimationTransforms();const t={};this.calculateBoundingBoxRecurse(this.parentGroup,this.sceneGroup,t),this._boundingBox=t.value}return this._boundingBox}return this.rootNode.boundingBox}get name(){const t=this.url.split("/");return t.length>=2?t[t.length-2]:this.url}clearCache(t=!1){this.rootNode.clearCache(t)}async addAnimations(t){if(this.isAnimated=!0,!this.renderer.addAnimations)throw new Error("Polygon Streaming, Renderer doesn't support animations.");{let e;({sceneNodes:e,skeletons:this.skeletons}=await this.renderer.addAnimations(t,this.url,this.sceneGroup,this.parentGroup,this.options)),this.rootNode.resolveParentGroup(e),this.hasAutoPlayAnimation=this.options.playAnimationAutomatically||this.options.animationStateGraph!=null}}enableAnimation(){this.isAnimated&&this.renderer.enableAnimation&&this.renderer.enableAnimation(this.sceneGroup)}applyAnimationTransforms(){this.renderer.applyAnimationTransforms&&this.renderer.applyAnimationTransforms(this.sceneGroup)}async buildPartitionTree(t){const e=await t.fetchFileText("info.json"),i=JSON.parse(e),s=this.buildNode(i,{numStandardNodes:0,numBboxOnlyNodes:0});if(!this.isValidVersion(s)){const l=new Error("Polygon Streaming: Unsupported model version.");throw console.error(`Unsupported model version. Model version ${s.version}, max version supported by player: ${br}`),l}const r=t.textures,o={},a=Ti(i.version);if(zn(a,[0,0,6])){s.textures=(i.textures??[]).map(l=>new ic(l.index,l.isBaked,(l.lods??[]).map(h=>({file:h.file,width:h.width,height:h.height,vramUsage:h.vramUsage}))));for(const[l,h]of Object.entries(i.materials))o[l]=we.fromNewest(l,h,s.textures,r,this.renderer,this.options.useAlpha,this.options.forceDoubleSided??!1,this.options.environmentMap??null)}else if(zn(a,[0,0,4]))for(const[l,h]of Object.entries(i.materials)){const c=To(s,l);c&&(o[l]=we.fromMid(l,h,c.node,c.lod,r,this.renderer,this.options.useAlpha,this.options.forceDoubleSided??!1,this.options.environmentMap??null))}else Ro(s,o,r,this.renderer,this.options.useAlpha,this.options.forceDoubleSided??!1,this.options.environmentMap??null);const A=l=>{var c,d,u;const h=((c=l.geometry)==null?void 0:c.length)??0;l.streamableMaterials=new Array(h);for(let p=0;p<h;p++){let I;const f=(d=l.material)==null?void 0:d[p],m=x=>{if(!x)return;const E=o[x];E&&(I=E)};m(f),!I&&((u=l.geometry)!=null&&u[p])&&m(l.geometry[p].replace(".xrgc","").replace("geometry","mat")),I?l.streamableMaterials[p]=I:console.warn(`No StreamableMaterial seed for node ${l.id} lod ${p}`)}for(const p of l.children??[])A(p);for(const p of l.bboxOnlyChildren??[])A(p)};return A(s),s.materials=i.materials,s.collider=i.collider,s.normalMapType=i.normalMapType,s}buildNode(t,e,i,s=0,r=0){const o=i?i.id!==""?`${i.id}.${s}`:String(s):"",a=new ec(this,o);if(Object.keys(t).forEach(A=>{switch(A){case"boundingBox":{const l=t.boundingBox;a.boundingBox=new ae(this.renderer,a,l.minX,l.minY,l.minZ,l.maxX,l.maxY,l.maxZ);break}case"children":case"id":break;case"animations":a.animation=t.animations.file;break;case"skin":a.skeletonIndex=t.skin;break;case"glbParentNode":a.parentSceneNodeIndex=t.glbParentNode;break;default:a[A]=t[A]}}),a.hasBoundingBoxOnly?e.numBboxOnlyNodes++:e.numStandardNodes++,t.children&&t.children.length>0){let A;t.children[0].hasBoundingBoxOnly?(a.bboxOnlyChildren=[],A=a.bboxOnlyChildren):(a.children=[],A=a.children);for(let l=0;l<t.children.length;l++){const h=t.children[l],c=this.buildNode(h,e,a,l,r+1);c&&(c.parent=a,A.push(c))}}return a}isValidVersion(t){return Tr(t.version,"0.0.2")>=0&&Tr(t.version,br)<=0}calculateBoundingBoxRecurse(t,e,i){if(t.psNode!=null){const r=this.renderer.getBoundingBox(t,gs);r!=null&&(r.transform(rc.set(this.renderer.getWorldTransform(e)).invert()),i.value==null?i.value=r.clone():i.value.add(r))}const s=this.renderer.getChildren(t);for(const r of s)this.calculateBoundingBoxRecurse(r,e,i)}}class oi{constructor(t,e=-1){g(this,"modelNode");g(this,"lod");g(this,"children");this.modelNode=t,this.lod=e,this.children=[]}get selfVisible(){return this.children==null||this.children.length===0}get childrenVisible(){return this.children!=null&&this.children.length>0}hasVisibleChildren(t){return this.childrenVisible&&(!t||this.children.some(e=>!e.isHidden))}addChild(t,e,i){this.children==null&&(this.children=[]);const s=new oi(t,t.activeLod);return e!==void 0&&(s.lod=e),this.lod=-1,i!=null?this.children.splice(i,0,s):this.children.push(s),s}get isInScene(){return this.modelNode.isInScene}get isHidden(){return this.modelNode.isHidden}get hasGeometry(){return this.modelNode.hasGeometry}get effectiveLod(){return this.lod!==-1?this.lod:this.modelNode.worstLod}get model(){return this.modelNode.model}get downloadSize(){return this.modelNode.getDownloadSize(this.lod)}getDownloadSize(t){return this.modelNode.getDownloadSize(t)}get triangleDensity(){return this.modelNode.getTriangleDensity(this.lod)}get triangleCount(){return this.modelNode.getTriangleCount(this.lod)}get lodCount(){return this.modelNode.lodCount}}class ac{constructor(){g(this,"items");g(this,"indicesByValue");this.items=[],this.indicesByValue=new Map}push(t,e){this.delete(t);const i=this.getInsertIndex(e);this.items.splice(i,0,{value:t,score:e}),this.indicesByValue.set(t,i)}popMax(){if(this.items.length===0)return;const t=this.items.splice(this.items.length-1,1)[0];return this.indicesByValue.delete(t.value),t.value}popMin(){if(this.items.length===0)return;const t=this.items.splice(0,1)[0];return this.indicesByValue.delete(t.value),t.value}peekMax(){if(this.items.length!==0)return this.items[this.items.length-1].value}peekMin(){if(this.items.length!==0)return this.items[0].value}peekMaxScore(){if(this.items.length!==0)return this.items[this.items.length-1].score}peekMinScore(){if(this.items.length!==0)return this.items[0].score}delete(t){const e=this.indicesByValue.get(t);e!=null&&(this.indicesByValue.delete(t),this.items.splice(e,1))}get length(){return this.items.length}getInsertIndex(t){let e,i=0,s=this.items.length-1,r=0;for(;i<=s;)if(r=(i+s)/2|0,e=this.items[r],e.score<t)i=r+1;else{if(!(e.score>t))return r;s=r-1}return e==null?0:e.score<t?r+1:r}}function Fo(n,t,e,i,s,r,o,a,A){A==null&&(A=o.triangleBudget);const l=[],h=new ac;let c=Number.MAX_VALUE,d=0;const u={value:c},p={value:d};for(const x of t){const E=new oi(x);o.removeHiddenNodeMesh&&E.isHidden||(l.push(E),zo(x,p,o,E,h,u))}let I,f,m;if(c=u.value,d=p.value,o.closeUpDistance===0||o.cameraType===je.Player||c==null||c>o.closeUpDistance?(f=o.distanceFactor,m=function(x,E,M,L){const B=function(w,y,Q,b){const v=w.getCameraFov(b);if(v==null)return;const T=v/2*Math.PI/180,N=w.getPosition(b),R=Q.clone().sub(N).length();return y>R?void 0:1/Math.tan(T)*y/Math.sqrt(Math.pow(R,2)-Math.pow(y,2))*.5}(x,E.radius,E.center,M);if(B!=null)return Math.PI*Math.pow(B,2)/L}(n,e,i,r),o.maximumQuality!==0&&m!=null&&m<1&&(I=o.maximumQuality)):f=o.closeUpDistanceFactor,A!==-1)for(;h.length>0&&d<A;){const x=h.peekMinScore(),E=h.popMin();if(E==null||I!=null&&x!=null&&x>=I||!E.modelNode.hasSkeleton&&o.removeHiddenNodeMesh&&E.isHidden||!o.removeHiddenNodeMesh&&(E.modelNode.isOCHidden||o.cameraType===je.Player&&!E.modelNode.hasLeafBBoxInCameraFrustrum()))continue;const M=Xo(E.modelNode,E.lod);if(M!=-1){const L=E.modelNode.getTriangleCount(E.lod);d+=E.modelNode.getTriangleCount(M)-L,E.lod=M,h.push(E,xe(E.modelNode,E.lod,o,f))}else if(E.modelNode.hasChildren){const L=E.modelNode.getTriangleCount(E.lod);let B=0;for(const w of E.modelNode.children){const y=Ac(w,x??0,o,f),Q=E.addChild(w,y);o.removeHiddenNodeMesh&&Q.isHidden||(B+=w.getTriangleCount(y),h.push(Q,xe(w,y,o,f)))}d+=B-L}}return[l,{distanceFactor:f,maximumQuality:I,coverage:m,minDistance:c,triangleCount:d}]}function Uo(n,t){const e=new oi(n),i={value:0};return Po(e,i,t),[e,i.value]}function Po(n,t,e){if(n.modelNode.isInScene)n.lod=n.modelNode.activeLod,t.value+=n.modelNode.getTriangleCount(n.modelNode.activeLod);else if(n.modelNode.children)for(const i of n.modelNode.children)(!e.removeHiddenNodeMesh||i.hasLeafChild)&&Po(n.addChild(i,-1),t,e)}function zo(n,t,e,i,s,r){if(n.children)for(const o of n.children){const a=Zo(o);if(a>=0)if(e.removeHiddenNodeMesh&&o.isHidden)i.addChild(o,a);else{if(r){const A=o.getDistance(e,!1);A<r.value&&(r.value=A)}if(s){const A=i.addChild(o,a);s.push(A,xe(o,a,e))}t.value+=o.getTriangleCount(a)}else{let A;i&&(A=i.addChild(o)),zo(o,t,e,A,s,r)}}}function Xo(n,t){let e=t-1;for(e<-1&&(e=-1);e>=0;){if(n.getTriangleCount(e)>0)return e;e--}return e}function Zo(n){let t=n.worstLod;for(;t>=0&&!(n.getTriangleCount(t)>0);)t--;return t}function Ac(n,t,e,i){let s=Zo(n),r=xe(n,s,e,i);for(;r<=t&&s>0;){const o=Xo(n,s);o>=0&&(s=o,r=xe(n,s,e,i))}return s}function xe(n,t,e,i=e.distanceFactor){let s=n.getTriangleCount(t)/n.surfaceArea;s/=n.model.qualityPriority;let r=n.getDistance(e);return r=Math.pow(r,i),s*r}class zt{constructor(t,e=-1){g(this,"modelNode");g(this,"lod");g(this,"_geometryPath");this.modelNode=t,this.lod=e}get geometryPath(){return this._geometryPath==null&&this.modelNode&&this.lod!==-1&&(this._geometryPath=`${this.modelNode.model.url}/${this.modelNode.geometry[this.lod]}`),this._geometryPath}get downloadSize(){return this.modelNode.getDownloadSize(this.lod)}getTriangleCount(){return this.modelNode.getTriangleCount(this.lod)}get id(){return this.modelNode.id}}class mn{constructor(t,e,i){g(this,"triangleDifference");g(this,"priorityScore");g(this,"nodesToAdd");g(this,"nodesToRemove");g(this,"type");g(this,"downloadSize");g(this,"model");g(this,"nodeData");g(this,"texTierByNode");g(this,"options");g(this,"_id");g(this,"averageDistance");g(this,"averageVisibleSurfaceAreaSqrt");this.type=t,this.model=e,this.options=i,this.triangleDifference=0,this.priorityScore=0,this.downloadSize=0,this.nodesToAdd=[],this.nodesToRemove=[]}get id(){return this._id==null&&(this._id=`${this.type};${this.nodesToAdd.map(t=>t.geometryPath).join(",")};${this.nodesToRemove.map(t=>t.geometryPath).join(",")}`),this._id}update(){this.updateTriangleDifference(),this.updateDownloadSize(),this.updatePriorityScore()}get isLocked(){for(const t of this.nodesToRemove)if(t.modelNode.isLocked)return!0;return!1}get triangleDifferenceScore(){return this.triangleDifference<0?-1:this.triangleDifference===0?0:1}toString(){const t=`surf sqrt: ${this.averageVisibleSurfaceAreaSqrt.toLocaleString()} / dist: ${this.averageDistance.toLocaleString()}`,e=this.nodesToAdd.length?`add: ${this.nodesToAdd.length} (${this.type!==Bt.Refine&&this.type!==Bt.Simplify||!this.nodesToRemove.length?"":`delta: ${this.nodesToAdd[0].modelNode.depth-this.nodesToRemove[0].modelNode.depth}, `}depth: ${this.getDepths(this.nodesToAdd).join(",")}, ids(lod): ${this.nodesToAdd.map(r=>`${r.modelNode.id}(${r.lod})`).join(", ")})`:null,i=this.nodesToRemove.length?`remove: ${this.nodesToRemove.length} (depth: ${this.getDepths(this.nodesToRemove).join(",")}, ids(lod): ${this.nodesToRemove.map(r=>`${r.modelNode.id}(${r.lod})`).join(", ")})`:null,s=`tri diff: ${this.triangleDifference.toLocaleString()}, priority: ${this.priorityScore.toLocaleString()} (${t}), download: ${Un(this.downloadSize)}`;return this.type===Bt.Simplify?`${Bt[this.type]}, ${i?`${i}, `:""}${e?`${e}, `:""}${s}`:`${Bt[this.type]}, ${e?`${e}, `:""}${i?`${i}, `:""}${s}`}get typePriority(){return this.type===Bt.Add?1:0}updateTriangleDifference(){this.triangleDifference=0;for(const t of this.nodesToRemove)this.triangleDifference-=t.modelNode.getTriangleCount(t.lod);for(const t of this.nodesToAdd)this.triangleDifference+=t.modelNode.getTriangleCount(t.lod)}updateDownloadSize(){this.downloadSize=0;for(const t of this.nodesToAdd)this.downloadSize+=t.downloadSize}updatePriorityScore(){let t=0,e=0,i=0;for(const s of this.nodesToAdd)s.modelNode.isOCHidden||(e+=s.modelNode.getDistance(this.options),i+=s.modelNode.surfaceArea,t++);this.averageVisibleSurfaceAreaSqrt=t===0?0:Math.sqrt(i/t),this.averageDistance=e/this.nodesToAdd.length,this.priorityScore=Math.max(this.averageVisibleSurfaceAreaSqrt,.1)/this.averageDistance}getDepths(t){const e=new Set;for(const i of t)e.add(i.modelNode.depth);return Array.from(e.values()).sort()}getLods(t){const e=new Set;for(const i of t)e.add(i.lod);return Array.from(e.values()).sort()}}function lc(n){const t=[];return Ko(n,t),t}function Ho(n,t,e,i){const s=n.model;if(n.selfVisible&&t.childrenVisible){const r=function(o,a,A){const l=[];return Wo(o,l,{value:0},a,!0,A),l}(t,262144,i.removeHiddenNodeMesh);if(r.length>0){const o=new mn(Bt.Refine,s,i);o.nodesToRemove=[new zt(n.modelNode,n.lod)],o.nodesToAdd=r,o.update(),e.push(o)}}else if(n.childrenVisible&&t.selfVisible){const r=new mn(Bt.Simplify,s,i);r.nodesToRemove=lc(n),r.nodesToAdd=[new zt(t.modelNode,t.lod)],r.update(),e.push(r)}else if(n.selfVisible&&t.selfVisible){let r;n.lod!==t.lod?(n.modelNode.isInScene?(r=new mn(Bt.SwapLod,s,i),r.nodesToRemove=[new zt(n.modelNode,n.lod)]):r=new mn(Bt.Add,s,i),r.nodesToAdd=[new zt(t.modelNode,t.lod)]):i.removeHiddenNodeMesh&&t.isHidden&&(r=new mn(Bt.Remove,s,i),r.nodesToRemove=[new zt(n.modelNode,n.lod)]),r&&(r.update(),e.push(r))}else if(n.childrenVisible&&t.childrenVisible){let r=0;for(let o=0;o<t.children.length;o++){const a=t.children[o];let A;r<n.children.length?(A=n.children[r],A.modelNode.id!==a.modelNode.id?a.isHidden?A=null:(A=n.addChild(a.modelNode,-1,r),r++):r++):a.isHidden||(A=n.addChild(a.modelNode,-1),r++),A&&Ho(A,a,e,i)}}}function Ko(n,t){if(n.selfVisible&&n.modelNode.isInScene)t.push(new zt(n.modelNode,n.lod));else if(n.childrenVisible)for(const e of n.children)Ko(e,t)}function Wo(n,t,e,i,s,r){let o=0;if(!s)for(const a of n.children)r&&a.isHidden||(o+=a.getDownloadSize(a.effectiveLod));if(s||e.value-n.downloadSize+o<=i){if(!s){const a=t.findIndex(A=>A.modelNode===n.modelNode);a!==-1&&(t.splice(a,1),e.value-=n.downloadSize)}for(const a of n.children)r&&a.isHidden||t.push(new zt(a.modelNode,a.effectiveLod));e.value+=o;for(const a of n.children)!a.childrenVisible||r&&a.isHidden||Wo(a,t,e,i,!1,r)}}var Oo,ps;(ps=Oo||(Oo={})).sfc32="sfc32",ps.mulberry32="mulberry32",ps.xoshiro128ss="xoshiro128ss";var hc={value:()=>{}};function Yo(){for(var n,t=0,e=arguments.length,i={};t<e;++t){if(!(n=arguments[t]+"")||n in i||/[\s.]/.test(n))throw new Error("illegal type: "+n);i[n]=[]}return new ai(i)}function ai(n){this._=n}function cc(n,t){for(var e,i=0,s=n.length;i<s;++i)if((e=n[i]).name===t)return e.value}function Vo(n,t,e){for(var i=0,s=n.length;i<s;++i)if(n[i].name===t){n[i]=hc,n=n.slice(0,i).concat(n.slice(i+1));break}return e!=null&&n.push({name:t,value:e}),n}ai.prototype=Yo.prototype={constructor:ai,on:function(n,t){var e,i,s=this._,r=(i=s,(n+"").trim().split(/^|\s+/).map(function(A){var l="",h=A.indexOf(".");if(h>=0&&(l=A.slice(h+1),A=A.slice(0,h)),A&&!i.hasOwnProperty(A))throw new Error("unknown type: "+A);return{type:A,name:l}})),o=-1,a=r.length;if(!(arguments.length<2)){if(t!=null&&typeof t!="function")throw new Error("invalid callback: "+t);for(;++o<a;)if(e=(n=r[o]).type)s[e]=Vo(s[e],n.name,t);else if(t==null)for(e in s)s[e]=Vo(s[e],n.name,null);return this}for(;++o<a;)if((e=(n=r[o]).type)&&(e=cc(s[e],n.name)))return e},copy:function(){var n={},t=this._;for(var e in t)n[e]=t[e].slice();return new ai(n)},call:function(n,t){if((e=arguments.length-2)>0)for(var e,i,s=new Array(e),r=0;r<e;++r)s[r]=arguments[r+2];if(!this._.hasOwnProperty(n))throw new Error("unknown type: "+n);for(r=0,e=(i=this._[n]).length;r<e;++r)i[r].value.apply(t,s)},apply:function(n,t,e){if(!this._.hasOwnProperty(n))throw new Error("unknown type: "+n);for(var i=this._[n],s=0,r=i.length;s<r;++s)i[s].value.apply(t,e)}};var fs="http://www.w3.org/1999/xhtml";const Jo={svg:"http://www.w3.org/2000/svg",xhtml:fs,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Ai(n){var t=n+="",e=t.indexOf(":");return e>=0&&(t=n.slice(0,e))!=="xmlns"&&(n=n.slice(e+1)),Jo.hasOwnProperty(t)?{space:Jo[t],local:n}:n}function uc(n){return function(){var t=this.ownerDocument,e=this.namespaceURI;return e===fs&&t.documentElement.namespaceURI===fs?t.createElement(n):t.createElementNS(e,n)}}function dc(n){return function(){return this.ownerDocument.createElementNS(n.space,n.local)}}function qo(n){var t=Ai(n);return(t.local?dc:uc)(t)}function gc(){}function ms(n){return n==null?gc:function(){return this.querySelector(n)}}function pc(){return[]}function jo(n){return n==null?pc:function(){return this.querySelectorAll(n)}}function fc(n){return function(){return function(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}(n.apply(this,arguments))}}function $o(n){return function(){return this.matches(n)}}function ta(n){return function(t){return t.matches(n)}}var mc=Array.prototype.find;function Ic(){return this.firstElementChild}var Cc=Array.prototype.filter;function Bc(){return Array.from(this.children)}function ea(n){return new Array(n.length)}function li(n,t){this.ownerDocument=n.ownerDocument,this.namespaceURI=n.namespaceURI,this._next=null,this._parent=n,this.__data__=t}function yc(n,t,e,i,s,r){for(var o,a=0,A=t.length,l=r.length;a<l;++a)(o=t[a])?(o.__data__=r[a],i[a]=o):e[a]=new li(n,r[a]);for(;a<A;++a)(o=t[a])&&(s[a]=o)}function Ec(n,t,e,i,s,r,o){var a,A,l,h=new Map,c=t.length,d=r.length,u=new Array(c);for(a=0;a<c;++a)(A=t[a])&&(u[a]=l=o.call(A,A.__data__,a,t)+"",h.has(l)?s[a]=A:h.set(l,A));for(a=0;a<d;++a)l=o.call(n,r[a],a,r)+"",(A=h.get(l))?(i[a]=A,A.__data__=r[a],h.delete(l)):e[a]=new li(n,r[a]);for(a=0;a<c;++a)(A=t[a])&&h.get(u[a])===A&&(s[a]=A)}function wc(n){return n.__data__}function xc(n){return typeof n=="object"&&"length"in n?n:Array.from(n)}function Qc(n,t){return n<t?-1:n>t?1:n>=t?0:NaN}function Mc(n){return function(){this.removeAttribute(n)}}function bc(n){return function(){this.removeAttributeNS(n.space,n.local)}}function Sc(n,t){return function(){this.setAttribute(n,t)}}function _c(n,t){return function(){this.setAttributeNS(n.space,n.local,t)}}function Gc(n,t){return function(){var e=t.apply(this,arguments);e==null?this.removeAttribute(n):this.setAttribute(n,e)}}function Lc(n,t){return function(){var e=t.apply(this,arguments);e==null?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}}function na(n){return n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView}function vc(n){return function(){this.style.removeProperty(n)}}function Rc(n,t,e){return function(){this.style.setProperty(n,t,e)}}function Tc(n,t,e){return function(){var i=t.apply(this,arguments);i==null?this.style.removeProperty(n):this.style.setProperty(n,i,e)}}function He(n,t){return n.style.getPropertyValue(t)||na(n).getComputedStyle(n,null).getPropertyValue(t)}function Dc(n){return function(){delete this[n]}}function kc(n,t){return function(){this[n]=t}}function Nc(n,t){return function(){var e=t.apply(this,arguments);e==null?delete this[n]:this[n]=e}}function ia(n){return n.trim().split(/^|\s+/)}function Is(n){return n.classList||new sa(n)}function sa(n){this._node=n,this._names=ia(n.getAttribute("class")||"")}function ra(n,t){for(var e=Is(n),i=-1,s=t.length;++i<s;)e.add(t[i])}function oa(n,t){for(var e=Is(n),i=-1,s=t.length;++i<s;)e.remove(t[i])}function Fc(n){return function(){ra(this,n)}}function Uc(n){return function(){oa(this,n)}}function Pc(n,t){return function(){(t.apply(this,arguments)?ra:oa)(this,n)}}function zc(){this.textContent=""}function Xc(n){return function(){this.textContent=n}}function Zc(n){return function(){var t=n.apply(this,arguments);this.textContent=t??""}}function Hc(){this.innerHTML=""}function Kc(n){return function(){this.innerHTML=n}}function Wc(n){return function(){var t=n.apply(this,arguments);this.innerHTML=t??""}}function Oc(){this.nextSibling&&this.parentNode.appendChild(this)}function Yc(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function Vc(){return null}function Jc(){var n=this.parentNode;n&&n.removeChild(this)}function qc(){var n=this.cloneNode(!1),t=this.parentNode;return t?t.insertBefore(n,this.nextSibling):n}function jc(){var n=this.cloneNode(!0),t=this.parentNode;return t?t.insertBefore(n,this.nextSibling):n}function $c(n){return function(){var t=this.__on;if(t){for(var e,i=0,s=-1,r=t.length;i<r;++i)e=t[i],n.type&&e.type!==n.type||e.name!==n.name?t[++s]=e:this.removeEventListener(e.type,e.listener,e.options);++s?t.length=s:delete this.__on}}}function tu(n,t,e){return function(){var i,s=this.__on,r=function(A){return function(l){A.call(this,l,this.__data__)}}(t);if(s){for(var o=0,a=s.length;o<a;++o)if((i=s[o]).type===n.type&&i.name===n.name)return this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=r,i.options=e),void(i.value=t)}this.addEventListener(n.type,r,e),i={type:n.type,name:n.name,value:t,listener:r,options:e},s?s.push(i):this.__on=[i]}}function aa(n,t,e){var i=na(n),s=i.CustomEvent;typeof s=="function"?s=new s(t,e):(s=i.document.createEvent("Event"),e?(s.initEvent(t,e.bubbles,e.cancelable),s.detail=e.detail):s.initEvent(t,!1,!1)),n.dispatchEvent(s)}function eu(n,t){return function(){return aa(this,n,t)}}function nu(n,t){return function(){return aa(this,n,t.apply(this,arguments))}}li.prototype={constructor:li,appendChild:function(n){return this._parent.insertBefore(n,this._next)},insertBefore:function(n,t){return this._parent.insertBefore(n,t)},querySelector:function(n){return this._parent.querySelector(n)},querySelectorAll:function(n){return this._parent.querySelectorAll(n)}},sa.prototype={add:function(n){this._names.indexOf(n)<0&&(this._names.push(n),this._node.setAttribute("class",this._names.join(" ")))},remove:function(n){var t=this._names.indexOf(n);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(n){return this._names.indexOf(n)>=0}};var iu=[null];function Rt(n,t){this._groups=n,this._parents=t}function In(){return new Rt([[document.documentElement]],iu)}function Cs(n,t,e){n.prototype=t.prototype=e,e.constructor=n}function Aa(n,t){var e=Object.create(n.prototype);for(var i in t)e[i]=t[i];return e}function Cn(){}Rt.prototype=In.prototype={constructor:Rt,select:function(n){typeof n!="function"&&(n=ms(n));for(var t=this._groups,e=t.length,i=new Array(e),s=0;s<e;++s)for(var r,o,a=t[s],A=a.length,l=i[s]=new Array(A),h=0;h<A;++h)(r=a[h])&&(o=n.call(r,r.__data__,h,a))&&("__data__"in r&&(o.__data__=r.__data__),l[h]=o);return new Rt(i,this._parents)},selectAll:function(n){n=typeof n=="function"?fc(n):jo(n);for(var t=this._groups,e=t.length,i=[],s=[],r=0;r<e;++r)for(var o,a=t[r],A=a.length,l=0;l<A;++l)(o=a[l])&&(i.push(n.call(o,o.__data__,l,a)),s.push(o));return new Rt(i,s)},selectChild:function(n){return this.select(n==null?Ic:function(t){return function(){return mc.call(this.children,t)}}(typeof n=="function"?n:ta(n)))},selectChildren:function(n){return this.selectAll(n==null?Bc:function(t){return function(){return Cc.call(this.children,t)}}(typeof n=="function"?n:ta(n)))},filter:function(n){typeof n!="function"&&(n=$o(n));for(var t=this._groups,e=t.length,i=new Array(e),s=0;s<e;++s)for(var r,o=t[s],a=o.length,A=i[s]=[],l=0;l<a;++l)(r=o[l])&&n.call(r,r.__data__,l,o)&&A.push(r);return new Rt(i,this._parents)},data:function(n,t){if(!arguments.length)return Array.from(this,wc);var e=t?Ec:yc,i=this._parents,s=this._groups;typeof n!="function"&&(n=function(L){return function(){return L}}(n));for(var r=s.length,o=new Array(r),a=new Array(r),A=new Array(r),l=0;l<r;++l){var h=i[l],c=s[l],d=c.length,u=xc(n.call(h,h&&h.__data__,l,i)),p=u.length,I=a[l]=new Array(p),f=o[l]=new Array(p);e(h,c,I,f,A[l]=new Array(d),u,t);for(var m,x,E=0,M=0;E<p;++E)if(m=I[E]){for(E>=M&&(M=E+1);!(x=f[M])&&++M<p;);m._next=x||null}}return(o=new Rt(o,i))._enter=a,o._exit=A,o},enter:function(){return new Rt(this._enter||this._groups.map(ea),this._parents)},exit:function(){return new Rt(this._exit||this._groups.map(ea),this._parents)},join:function(n,t,e){var i=this.enter(),s=this,r=this.exit();return typeof n=="function"?(i=n(i))&&(i=i.selection()):i=i.append(n+""),t!=null&&(s=t(s))&&(s=s.selection()),e==null?r.remove():e(r),i&&s?i.merge(s).order():s},merge:function(n){for(var t=n.selection?n.selection():n,e=this._groups,i=t._groups,s=e.length,r=i.length,o=Math.min(s,r),a=new Array(s),A=0;A<o;++A)for(var l,h=e[A],c=i[A],d=h.length,u=a[A]=new Array(d),p=0;p<d;++p)(l=h[p]||c[p])&&(u[p]=l);for(;A<s;++A)a[A]=e[A];return new Rt(a,this._parents)},selection:function(){return this},order:function(){for(var n=this._groups,t=-1,e=n.length;++t<e;)for(var i,s=n[t],r=s.length-1,o=s[r];--r>=0;)(i=s[r])&&(o&&4^i.compareDocumentPosition(o)&&o.parentNode.insertBefore(i,o),o=i);return this},sort:function(n){function t(c,d){return c&&d?n(c.__data__,d.__data__):!c-!d}n||(n=Qc);for(var e=this._groups,i=e.length,s=new Array(i),r=0;r<i;++r){for(var o,a=e[r],A=a.length,l=s[r]=new Array(A),h=0;h<A;++h)(o=a[h])&&(l[h]=o);l.sort(t)}return new Rt(s,this._parents).order()},call:function(){var n=arguments[0];return arguments[0]=this,n.apply(null,arguments),this},nodes:function(){return Array.from(this)},node:function(){for(var n=this._groups,t=0,e=n.length;t<e;++t)for(var i=n[t],s=0,r=i.length;s<r;++s){var o=i[s];if(o)return o}return null},size:function(){let n=0;for(const t of this)++n;return n},empty:function(){return!this.node()},each:function(n){for(var t=this._groups,e=0,i=t.length;e<i;++e)for(var s,r=t[e],o=0,a=r.length;o<a;++o)(s=r[o])&&n.call(s,s.__data__,o,r);return this},attr:function(n,t){var e=Ai(n);if(arguments.length<2){var i=this.node();return e.local?i.getAttributeNS(e.space,e.local):i.getAttribute(e)}return this.each((t==null?e.local?bc:Mc:typeof t=="function"?e.local?Lc:Gc:e.local?_c:Sc)(e,t))},style:function(n,t,e){return arguments.length>1?this.each((t==null?vc:typeof t=="function"?Tc:Rc)(n,t,e??"")):He(this.node(),n)},property:function(n,t){return arguments.length>1?this.each((t==null?Dc:typeof t=="function"?Nc:kc)(n,t)):this.node()[n]},classed:function(n,t){var e=ia(n+"");if(arguments.length<2){for(var i=Is(this.node()),s=-1,r=e.length;++s<r;)if(!i.contains(e[s]))return!1;return!0}return this.each((typeof t=="function"?Pc:t?Fc:Uc)(e,t))},text:function(n){return arguments.length?this.each(n==null?zc:(typeof n=="function"?Zc:Xc)(n)):this.node().textContent},html:function(n){return arguments.length?this.each(n==null?Hc:(typeof n=="function"?Wc:Kc)(n)):this.node().innerHTML},raise:function(){return this.each(Oc)},lower:function(){return this.each(Yc)},append:function(n){var t=typeof n=="function"?n:qo(n);return this.select(function(){return this.appendChild(t.apply(this,arguments))})},insert:function(n,t){var e=typeof n=="function"?n:qo(n),i=t==null?Vc:typeof t=="function"?t:ms(t);return this.select(function(){return this.insertBefore(e.apply(this,arguments),i.apply(this,arguments)||null)})},remove:function(){return this.each(Jc)},clone:function(n){return this.select(n?jc:qc)},datum:function(n){return arguments.length?this.property("__data__",n):this.node().__data__},on:function(n,t,e){var i,s,r=function(c){return c.trim().split(/^|\s+/).map(function(d){var u="",p=d.indexOf(".");return p>=0&&(u=d.slice(p+1),d=d.slice(0,p)),{type:d,name:u}})}(n+""),o=r.length;if(!(arguments.length<2)){for(a=t?tu:$c,i=0;i<o;++i)this.each(a(r[i],t,e));return this}var a=this.node().__on;if(a){for(var A,l=0,h=a.length;l<h;++l)for(i=0,A=a[l];i<o;++i)if((s=r[i]).type===A.type&&s.name===A.name)return A.value}},dispatch:function(n,t){return this.each((typeof t=="function"?nu:eu)(n,t))},[Symbol.iterator]:function*(){for(var n=this._groups,t=0,e=n.length;t<e;++t)for(var i,s=n[t],r=0,o=s.length;r<o;++r)(i=s[r])&&(yield i)}};var Bn=.7,hi=1/Bn,Ke="\\s*([+-]?\\d+)\\s*",yn="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Xt="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",su=/^#([0-9a-f]{3,8})$/,ru=new RegExp(`^rgb\\(${Ke},${Ke},${Ke}\\)$`),ou=new RegExp(`^rgb\\(${Xt},${Xt},${Xt}\\)$`),au=new RegExp(`^rgba\\(${Ke},${Ke},${Ke},${yn}\\)$`),Au=new RegExp(`^rgba\\(${Xt},${Xt},${Xt},${yn}\\)$`),lu=new RegExp(`^hsl\\(${yn},${Xt},${Xt}\\)$`),hu=new RegExp(`^hsla\\(${yn},${Xt},${Xt},${yn}\\)$`),la={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function ha(){return this.rgb().formatHex()}function ca(){return this.rgb().formatRgb()}function En(n){var t,e;return n=(n+"").trim().toLowerCase(),(t=su.exec(n))?(e=t[1].length,t=parseInt(t[1],16),e===6?ua(t):e===3?new ft(t>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):e===8?ci(t>>24&255,t>>16&255,t>>8&255,(255&t)/255):e===4?ci(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|240&t,((15&t)<<4|15&t)/255):null):(t=ru.exec(n))?new ft(t[1],t[2],t[3],1):(t=ou.exec(n))?new ft(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=au.exec(n))?ci(t[1],t[2],t[3],t[4]):(t=Au.exec(n))?ci(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=lu.exec(n))?pa(t[1],t[2]/100,t[3]/100,1):(t=hu.exec(n))?pa(t[1],t[2]/100,t[3]/100,t[4]):la.hasOwnProperty(n)?ua(la[n]):n==="transparent"?new ft(NaN,NaN,NaN,0):null}function ua(n){return new ft(n>>16&255,n>>8&255,255&n,1)}function ci(n,t,e,i){return i<=0&&(n=t=e=NaN),new ft(n,t,e,i)}function Bs(n,t,e,i){return arguments.length===1?((s=n)instanceof Cn||(s=En(s)),s?new ft((s=s.rgb()).r,s.g,s.b,s.opacity):new ft):new ft(n,t,e,i??1);var s}function ft(n,t,e,i){this.r=+n,this.g=+t,this.b=+e,this.opacity=+i}function da(){return`#${Me(this.r)}${Me(this.g)}${Me(this.b)}`}function ga(){const n=ui(this.opacity);return`${n===1?"rgb(":"rgba("}${Qe(this.r)}, ${Qe(this.g)}, ${Qe(this.b)}${n===1?")":`, ${n})`}`}function ui(n){return isNaN(n)?1:Math.max(0,Math.min(1,n))}function Qe(n){return Math.max(0,Math.min(255,Math.round(n)||0))}function Me(n){return((n=Qe(n))<16?"0":"")+n.toString(16)}function pa(n,t,e,i){return i<=0?n=t=e=NaN:e<=0||e>=1?n=t=NaN:t<=0&&(n=NaN),new Tt(n,t,e,i)}function fa(n){if(n instanceof Tt)return new Tt(n.h,n.s,n.l,n.opacity);if(n instanceof Cn||(n=En(n)),!n)return new Tt;if(n instanceof Tt)return n;var t=(n=n.rgb()).r/255,e=n.g/255,i=n.b/255,s=Math.min(t,e,i),r=Math.max(t,e,i),o=NaN,a=r-s,A=(r+s)/2;return a?(o=t===r?(e-i)/a+6*(e<i):e===r?(i-t)/a+2:(t-e)/a+4,a/=A<.5?r+s:2-r-s,o*=60):a=A>0&&A<1?0:o,new Tt(o,a,A,n.opacity)}function Tt(n,t,e,i){this.h=+n,this.s=+t,this.l=+e,this.opacity=+i}function ma(n){return(n=(n||0)%360)<0?n+360:n}function di(n){return Math.max(0,Math.min(1,n||0))}function ys(n,t,e){return 255*(n<60?t+(e-t)*n/60:n<180?e:n<240?t+(e-t)*(240-n)/60:t)}Cs(Cn,En,{copy(n){return Object.assign(new this.constructor,this,n)},displayable(){return this.rgb().displayable()},hex:ha,formatHex:ha,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return fa(this).formatHsl()},formatRgb:ca,toString:ca}),Cs(ft,Bs,Aa(Cn,{brighter(n){return n=n==null?hi:Math.pow(hi,n),new ft(this.r*n,this.g*n,this.b*n,this.opacity)},darker(n){return n=n==null?Bn:Math.pow(Bn,n),new ft(this.r*n,this.g*n,this.b*n,this.opacity)},rgb(){return this},clamp(){return new ft(Qe(this.r),Qe(this.g),Qe(this.b),ui(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:da,formatHex:da,formatHex8:function(){return`#${Me(this.r)}${Me(this.g)}${Me(this.b)}${Me(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:ga,toString:ga})),Cs(Tt,function(n,t,e,i){return arguments.length===1?fa(n):new Tt(n,t,e,i??1)},Aa(Cn,{brighter(n){return n=n==null?hi:Math.pow(hi,n),new Tt(this.h,this.s,this.l*n,this.opacity)},darker(n){return n=n==null?Bn:Math.pow(Bn,n),new Tt(this.h,this.s,this.l*n,this.opacity)},rgb(){var n=this.h%360+360*(this.h<0),t=isNaN(n)||isNaN(this.s)?0:this.s,e=this.l,i=e+(e<.5?e:1-e)*t,s=2*e-i;return new ft(ys(n>=240?n-240:n+120,s,i),ys(n,s,i),ys(n<120?n+240:n-120,s,i),this.opacity)},clamp(){return new Tt(ma(this.h),di(this.s),di(this.l),ui(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const n=ui(this.opacity);return`${n===1?"hsl(":"hsla("}${ma(this.h)}, ${100*di(this.s)}%, ${100*di(this.l)}%${n===1?")":`, ${n})`}`}}));const Ia=n=>()=>n;function cu(n){return(n=+n)==1?Ca:function(t,e){return e-t?function(i,s,r){return i=Math.pow(i,r),s=Math.pow(s,r)-i,r=1/r,function(o){return Math.pow(i+o*s,r)}}(t,e,n):Ia(isNaN(t)?e:t)}}function Ca(n,t){var e=t-n;return e?function(i,s){return function(r){return i+r*s}}(n,e):Ia(isNaN(n)?t:n)}const Ba=function n(t){var e=cu(t);function i(s,r){var o=e((s=Bs(s)).r,(r=Bs(r)).r),a=e(s.g,r.g),A=e(s.b,r.b),l=Ca(s.opacity,r.opacity);return function(h){return s.r=o(h),s.g=a(h),s.b=A(h),s.opacity=l(h),s+""}}return i.gamma=n,i}(1);function Ae(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}var Es=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,ws=new RegExp(Es.source,"g");function uu(n,t){var e,i,s,r=Es.lastIndex=ws.lastIndex=0,o=-1,a=[],A=[];for(n+="",t+="";(e=Es.exec(n))&&(i=ws.exec(t));)(s=i.index)>r&&(s=t.slice(r,s),a[o]?a[o]+=s:a[++o]=s),(e=e[0])===(i=i[0])?a[o]?a[o]+=i:a[++o]=i:(a[++o]=null,A.push({i:o,x:Ae(e,i)})),r=ws.lastIndex;return r<t.length&&(s=t.slice(r),a[o]?a[o]+=s:a[++o]=s),a.length<2?A[0]?function(l){return function(h){return l(h)+""}}(A[0].x):function(l){return function(){return l}}(t):(t=A.length,function(l){for(var h,c=0;c<t;++c)a[(h=A[c]).i]=h.x(l);return a.join("")})}var gi,ya=180/Math.PI,xs={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function Ea(n,t,e,i,s,r){var o,a,A;return(o=Math.sqrt(n*n+t*t))&&(n/=o,t/=o),(A=n*e+t*i)&&(e-=n*A,i-=t*A),(a=Math.sqrt(e*e+i*i))&&(e/=a,i/=a,A/=a),n*i<t*e&&(n=-n,t=-t,A=-A,o=-o),{translateX:s,translateY:r,rotate:Math.atan2(t,n)*ya,skewX:Math.atan(A)*ya,scaleX:o,scaleY:a}}function wa(n,t,e,i){function s(r){return r.length?r.pop()+" ":""}return function(r,o){var a=[],A=[];return r=n(r),o=n(o),function(l,h,c,d,u,p){if(l!==c||h!==d){var I=u.push("translate(",null,t,null,e);p.push({i:I-4,x:Ae(l,c)},{i:I-2,x:Ae(h,d)})}else(c||d)&&u.push("translate("+c+t+d+e)}(r.translateX,r.translateY,o.translateX,o.translateY,a,A),function(l,h,c,d){l!==h?(l-h>180?h+=360:h-l>180&&(l+=360),d.push({i:c.push(s(c)+"rotate(",null,i)-2,x:Ae(l,h)})):h&&c.push(s(c)+"rotate("+h+i)}(r.rotate,o.rotate,a,A),function(l,h,c,d){l!==h?d.push({i:c.push(s(c)+"skewX(",null,i)-2,x:Ae(l,h)}):h&&c.push(s(c)+"skewX("+h+i)}(r.skewX,o.skewX,a,A),function(l,h,c,d,u,p){if(l!==c||h!==d){var I=u.push(s(u)+"scale(",null,",",null,")");p.push({i:I-4,x:Ae(l,c)},{i:I-2,x:Ae(h,d)})}else c===1&&d===1||u.push(s(u)+"scale("+c+","+d+")")}(r.scaleX,r.scaleY,o.scaleX,o.scaleY,a,A),r=o=null,function(l){for(var h,c=-1,d=A.length;++c<d;)a[(h=A[c]).i]=h.x(l);return a.join("")}}}var pi,wn,du=wa(function(n){const t=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(n+"");return t.isIdentity?xs:Ea(t.a,t.b,t.c,t.d,t.e,t.f)},"px, ","px)","deg)"),gu=wa(function(n){return n==null?xs:(gi||(gi=document.createElementNS("http://www.w3.org/2000/svg","g")),gi.setAttribute("transform",n),(n=gi.transform.baseVal.consolidate())?Ea((n=n.matrix).a,n.b,n.c,n.d,n.e,n.f):xs)},", ",")",")"),We=0,xn=0,Qn=0,fi=0,be=0,mi=0,Mn=typeof performance=="object"&&performance.now?performance:Date,xa=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(n){setTimeout(n,17)};function Qs(){return be||(xa(pu),be=Mn.now()+mi)}function pu(){be=0}function Ii(){this._call=this._time=this._next=null}function Qa(n,t,e){var i=new Ii;return i.restart(n,t,e),i}function Ma(){be=(fi=Mn.now())+mi,We=xn=0;try{(function(){Qs(),++We;for(var n,t=pi;t;)(n=be-t._time)>=0&&t._call.call(void 0,n),t=t._next;--We})()}finally{We=0,function(){for(var n,t,e=pi,i=1/0;e;)e._call?(i>e._time&&(i=e._time),n=e,e=e._next):(t=e._next,e._next=null,e=n?n._next=t:pi=t);wn=n,Ms(i)}(),be=0}}function fu(){var n=Mn.now(),t=n-fi;t>1e3&&(mi-=t,fi=n)}function Ms(n){We||(xn&&(xn=clearTimeout(xn)),n-be>24?(n<1/0&&(xn=setTimeout(Ma,n-Mn.now()-mi)),Qn&&(Qn=clearInterval(Qn))):(Qn||(fi=Mn.now(),Qn=setInterval(fu,1e3)),We=1,xa(Ma)))}function ba(n,t,e){var i=new Ii;return t=t==null?0:+t,i.restart(s=>{i.stop(),n(s+t)},t,e),i}Ii.prototype=Qa.prototype={constructor:Ii,restart:function(n,t,e){if(typeof n!="function")throw new TypeError("callback is not a function");e=(e==null?Qs():+e)+(t==null?0:+t),this._next||wn===this||(wn?wn._next=this:pi=this,wn=this),this._call=n,this._time=e,Ms()},stop:function(){this._call&&(this._call=null,this._time=1/0,Ms())}};var mu=Yo("start","end","cancel","interrupt"),Iu=[];function Ci(n,t,e,i,s,r){var o=n.__transition;if(o){if(e in o)return}else n.__transition={};(function(a,A,l){var h,c=a.__transition;function d(f){l.state=1,l.timer.restart(u,l.delay,l.time),l.delay<=f&&u(f-l.delay)}function u(f){var m,x,E,M;if(l.state!==1)return I();for(m in c)if((M=c[m]).name===l.name){if(M.state===3)return ba(u);M.state===4?(M.state=6,M.timer.stop(),M.on.call("interrupt",a,a.__data__,M.index,M.group),delete c[m]):+m<A&&(M.state=6,M.timer.stop(),M.on.call("cancel",a,a.__data__,M.index,M.group),delete c[m])}if(ba(function(){l.state===3&&(l.state=4,l.timer.restart(p,l.delay,l.time),p(f))}),l.state=2,l.on.call("start",a,a.__data__,l.index,l.group),l.state===2){for(l.state=3,h=new Array(E=l.tween.length),m=0,x=-1;m<E;++m)(M=l.tween[m].value.call(a,a.__data__,l.index,l.group))&&(h[++x]=M);h.length=x+1}}function p(f){for(var m=f<l.duration?l.ease.call(null,f/l.duration):(l.timer.restart(I),l.state=5,1),x=-1,E=h.length;++x<E;)h[x].call(a,m);l.state===5&&(l.on.call("end",a,a.__data__,l.index,l.group),I())}function I(){for(var f in l.state=6,l.timer.stop(),delete c[A],c)return;delete a.__transition}c[A]=l,l.timer=Qa(d,0,l.time)})(n,e,{name:t,index:i,group:s,on:mu,tween:Iu,time:r.time,delay:r.delay,duration:r.duration,ease:r.ease,timer:null,state:0})}function bs(n,t){var e=Dt(n,t);if(e.state>0)throw new Error("too late; already scheduled");return e}function Zt(n,t){var e=Dt(n,t);if(e.state>3)throw new Error("too late; already running");return e}function Dt(n,t){var e=n.__transition;if(!e||!(e=e[t]))throw new Error("transition not found");return e}function Cu(n,t){var e,i;return function(){var s=Zt(this,n),r=s.tween;if(r!==e){for(var o=0,a=(i=e=r).length;o<a;++o)if(i[o].name===t){(i=i.slice()).splice(o,1);break}}s.tween=i}}function Bu(n,t,e){var i,s;if(typeof e!="function")throw new Error;return function(){var r=Zt(this,n),o=r.tween;if(o!==i){s=(i=o).slice();for(var a={name:t,value:e},A=0,l=s.length;A<l;++A)if(s[A].name===t){s[A]=a;break}A===l&&s.push(a)}r.tween=s}}function Ss(n,t,e){var i=n._id;return n.each(function(){var s=Zt(this,i);(s.value||(s.value={}))[t]=e.apply(this,arguments)}),function(s){return Dt(s,i).value[t]}}function Sa(n,t){var e;return(typeof t=="number"?Ae:t instanceof En?Ba:(e=En(t))?(t=e,Ba):uu)(n,t)}function yu(n){return function(){this.removeAttribute(n)}}function Eu(n){return function(){this.removeAttributeNS(n.space,n.local)}}function wu(n,t,e){var i,s,r=e+"";return function(){var o=this.getAttribute(n);return o===r?null:o===i?s:s=t(i=o,e)}}function xu(n,t,e){var i,s,r=e+"";return function(){var o=this.getAttributeNS(n.space,n.local);return o===r?null:o===i?s:s=t(i=o,e)}}function Qu(n,t,e){var i,s,r;return function(){var o,a,A=e(this);if(A!=null)return(o=this.getAttribute(n))===(a=A+"")?null:o===i&&a===s?r:(s=a,r=t(i=o,A));this.removeAttribute(n)}}function Mu(n,t,e){var i,s,r;return function(){var o,a,A=e(this);if(A!=null)return(o=this.getAttributeNS(n.space,n.local))===(a=A+"")?null:o===i&&a===s?r:(s=a,r=t(i=o,A));this.removeAttributeNS(n.space,n.local)}}function bu(n,t){var e,i;function s(){var r=t.apply(this,arguments);return r!==i&&(e=(i=r)&&function(o,a){return function(A){this.setAttributeNS(o.space,o.local,a.call(this,A))}}(n,r)),e}return s._value=t,s}function Su(n,t){var e,i;function s(){var r=t.apply(this,arguments);return r!==i&&(e=(i=r)&&function(o,a){return function(A){this.setAttribute(o,a.call(this,A))}}(n,r)),e}return s._value=t,s}function _u(n,t){return function(){bs(this,n).delay=+t.apply(this,arguments)}}function Gu(n,t){return t=+t,function(){bs(this,n).delay=t}}function Lu(n,t){return function(){Zt(this,n).duration=+t.apply(this,arguments)}}function vu(n,t){return t=+t,function(){Zt(this,n).duration=t}}var Ru=In.prototype.constructor;function _a(n){return function(){this.style.removeProperty(n)}}var Tu=0;function Ot(n,t,e,i){this._groups=n,this._parents=t,this._name=e,this._id=i}function Ga(){return++Tu}var Yt=In.prototype;Ot.prototype={constructor:Ot,select:function(n){var t=this._name,e=this._id;typeof n!="function"&&(n=ms(n));for(var i=this._groups,s=i.length,r=new Array(s),o=0;o<s;++o)for(var a,A,l=i[o],h=l.length,c=r[o]=new Array(h),d=0;d<h;++d)(a=l[d])&&(A=n.call(a,a.__data__,d,l))&&("__data__"in a&&(A.__data__=a.__data__),c[d]=A,Ci(c[d],t,e,d,c,Dt(a,e)));return new Ot(r,this._parents,t,e)},selectAll:function(n){var t=this._name,e=this._id;typeof n!="function"&&(n=jo(n));for(var i=this._groups,s=i.length,r=[],o=[],a=0;a<s;++a)for(var A,l=i[a],h=l.length,c=0;c<h;++c)if(A=l[c]){for(var d,u=n.call(A,A.__data__,c,l),p=Dt(A,e),I=0,f=u.length;I<f;++I)(d=u[I])&&Ci(d,t,e,I,u,p);r.push(u),o.push(A)}return new Ot(r,o,t,e)},selectChild:Yt.selectChild,selectChildren:Yt.selectChildren,filter:function(n){typeof n!="function"&&(n=$o(n));for(var t=this._groups,e=t.length,i=new Array(e),s=0;s<e;++s)for(var r,o=t[s],a=o.length,A=i[s]=[],l=0;l<a;++l)(r=o[l])&&n.call(r,r.__data__,l,o)&&A.push(r);return new Ot(i,this._parents,this._name,this._id)},merge:function(n){if(n._id!==this._id)throw new Error;for(var t=this._groups,e=n._groups,i=t.length,s=e.length,r=Math.min(i,s),o=new Array(i),a=0;a<r;++a)for(var A,l=t[a],h=e[a],c=l.length,d=o[a]=new Array(c),u=0;u<c;++u)(A=l[u]||h[u])&&(d[u]=A);for(;a<i;++a)o[a]=t[a];return new Ot(o,this._parents,this._name,this._id)},selection:function(){return new Ru(this._groups,this._parents)},transition:function(){for(var n=this._name,t=this._id,e=Ga(),i=this._groups,s=i.length,r=0;r<s;++r)for(var o,a=i[r],A=a.length,l=0;l<A;++l)if(o=a[l]){var h=Dt(o,t);Ci(o,n,e,l,a,{time:h.time+h.delay+h.duration,delay:0,duration:h.duration,ease:h.ease})}return new Ot(i,this._parents,n,e)},call:Yt.call,nodes:Yt.nodes,node:Yt.node,size:Yt.size,empty:Yt.empty,each:Yt.each,on:function(n,t){var e=this._id;return arguments.length<2?Dt(this.node(),e).on.on(n):this.each(function(i,s,r){var o,a,A=function(l){return(l+"").trim().split(/^|\s+/).every(function(h){var c=h.indexOf(".");return c>=0&&(h=h.slice(0,c)),!h||h==="start"})}(s)?bs:Zt;return function(){var l=A(this,i),h=l.on;h!==o&&(a=(o=h).copy()).on(s,r),l.on=a}}(e,n,t))},attr:function(n,t){var e=Ai(n),i=e==="transform"?gu:Sa;return this.attrTween(n,typeof t=="function"?(e.local?Mu:Qu)(e,i,Ss(this,"attr."+n,t)):t==null?(e.local?Eu:yu)(e):(e.local?xu:wu)(e,i,t))},attrTween:function(n,t){var e="attr."+n;if(arguments.length<2)return(e=this.tween(e))&&e._value;if(t==null)return this.tween(e,null);if(typeof t!="function")throw new Error;var i=Ai(n);return this.tween(e,(i.local?bu:Su)(i,t))},style:function(n,t,e){var i=(n+="")=="transform"?du:Sa;return t==null?this.styleTween(n,function(s,r){var o,a,A;return function(){var l=He(this,s),h=(this.style.removeProperty(s),He(this,s));return l===h?null:l===o&&h===a?A:A=r(o=l,a=h)}}(n,i)).on("end.style."+n,_a(n)):typeof t=="function"?this.styleTween(n,function(s,r,o){var a,A,l;return function(){var h=He(this,s),c=o(this),d=c+"";return c==null&&(this.style.removeProperty(s),d=c=He(this,s)),h===d?null:h===a&&d===A?l:(A=d,l=r(a=h,c))}}(n,i,Ss(this,"style."+n,t))).each(function(s,r){var o,a,A,l,h="style."+r,c="end."+h;return function(){var d=Zt(this,s),u=d.on,p=d.value[h]==null?l||(l=_a(r)):void 0;u===o&&A===p||(a=(o=u).copy()).on(c,A=p),d.on=a}}(this._id,n)):this.styleTween(n,function(s,r,o){var a,A,l=o+"";return function(){var h=He(this,s);return h===l?null:h===a?A:A=r(a=h,o)}}(n,i,t),e).on("end.style."+n,null)},styleTween:function(n,t,e){var i="style."+(n+="");if(arguments.length<2)return(i=this.tween(i))&&i._value;if(t==null)return this.tween(i,null);if(typeof t!="function")throw new Error;return this.tween(i,function(s,r,o){var a,A;function l(){var h=r.apply(this,arguments);return h!==A&&(a=(A=h)&&function(c,d,u){return function(p){this.style.setProperty(c,d.call(this,p),u)}}(s,h,o)),a}return l._value=r,l}(n,t,e??""))},text:function(n){return this.tween("text",typeof n=="function"?function(t){return function(){var e=t(this);this.textContent=e??""}}(Ss(this,"text",n)):function(t){return function(){this.textContent=t}}(n==null?"":n+""))},textTween:function(n){var t="text";if(arguments.length<1)return(t=this.tween(t))&&t._value;if(n==null)return this.tween(t,null);if(typeof n!="function")throw new Error;return this.tween(t,function(e){var i,s;function r(){var o=e.apply(this,arguments);return o!==s&&(i=(s=o)&&function(a){return function(A){this.textContent=a.call(this,A)}}(o)),i}return r._value=e,r}(n))},remove:function(){return this.on("end.remove",function(n){return function(){var t=this.parentNode;for(var e in this.__transition)if(+e!==n)return;t&&t.removeChild(this)}}(this._id))},tween:function(n,t){var e=this._id;if(n+="",arguments.length<2){for(var i,s=Dt(this.node(),e).tween,r=0,o=s.length;r<o;++r)if((i=s[r]).name===n)return i.value;return null}return this.each((t==null?Cu:Bu)(e,n,t))},delay:function(n){var t=this._id;return arguments.length?this.each((typeof n=="function"?_u:Gu)(t,n)):Dt(this.node(),t).delay},duration:function(n){var t=this._id;return arguments.length?this.each((typeof n=="function"?Lu:vu)(t,n)):Dt(this.node(),t).duration},ease:function(n){var t=this._id;return arguments.length?this.each(function(e,i){if(typeof i!="function")throw new Error;return function(){Zt(this,e).ease=i}}(t,n)):Dt(this.node(),t).ease},easeVarying:function(n){if(typeof n!="function")throw new Error;return this.each(function(t,e){return function(){var i=e.apply(this,arguments);if(typeof i!="function")throw new Error;Zt(this,t).ease=i}}(this._id,n))},end:function(){var n,t,e=this,i=e._id,s=e.size();return new Promise(function(r,o){var a={value:o},A={value:function(){--s===0&&r()}};e.each(function(){var l=Zt(this,i),h=l.on;h!==n&&((t=(n=h).copy())._.cancel.push(a),t._.interrupt.push(a),t._.end.push(A)),l.on=t}),s===0&&r()})},[Symbol.iterator]:Yt[Symbol.iterator]};var Du={time:null,delay:0,duration:250,ease:function(n){return((n*=2)<=1?n*n*n:(n-=2)*n*n+2)/2}};function ku(n,t){for(var e;!(e=n.__transition)||!(e=e[t]);)if(!(n=n.parentNode))throw new Error(`transition ${t} not found`);return e}function bn(n,t,e){this.k=n,this.x=t,this.y=e}In.prototype.interrupt=function(n){return this.each(function(){(function(t,e){var i,s,r,o=t.__transition,a=!0;if(o){for(r in e=e==null?null:e+"",o)(i=o[r]).name===e?(s=i.state>2&&i.state<5,i.state=6,i.timer.stop(),i.on.call(s?"interrupt":"cancel",t,t.__data__,i.index,i.group),delete o[r]):a=!1;a&&delete t.__transition}})(this,n)})},In.prototype.transition=function(n){var t,e;n instanceof Ot?(t=n._id,n=n._name):(t=Ga(),(e=Du).time=Qs(),n=n==null?null:n+"");for(var i=this._groups,s=i.length,r=0;r<s;++r)for(var o,a=i[r],A=a.length,l=0;l<A;++l)(o=a[l])&&Ci(o,n,t,l,a,e||ku(o,t));return new Ot(i,this._parents,n,t)},bn.prototype={constructor:bn,scale:function(n){return n===1?this:new bn(this.k*n,this.x,this.y)},translate:function(n,t){return n===0&t===0?this:new bn(this.k,this.x+this.k*n,this.y+this.k*t)},apply:function(n){return[n[0]*this.k+this.x,n[1]*this.k+this.y]},applyX:function(n){return n*this.k+this.x},applyY:function(n){return n*this.k+this.y},invert:function(n){return[(n[0]-this.x)/this.k,(n[1]-this.y)/this.k]},invertX:function(n){return(n-this.x)/this.k},invertY:function(n){return(n-this.y)/this.k},rescaleX:function(n){return n.copy().domain(n.range().map(this.invertX,this).map(n.invert,n))},rescaleY:function(n){return n.copy().domain(n.range().map(this.invertY,this).map(n.invert,n))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}},bn.prototype;var La="1.13.7",va=typeof self=="object"&&self.self===self&&self||typeof global=="object"&&global.global===global&&global||Function("return this")()||{},Bi=Array.prototype,_s=Object.prototype,Ra=typeof Symbol<"u"?Symbol.prototype:null,Nu=Bi.push,Sn=Bi.slice,_n=_s.toString,Fu=_s.hasOwnProperty,Ta=typeof ArrayBuffer<"u",Uu=typeof DataView<"u",Pu=Array.isArray,Da=Object.keys,ka=Object.create,Na=Ta&&ArrayBuffer.isView,zu=isNaN,Xu=isFinite,Fa=!{toString:null}.propertyIsEnumerable("toString"),Ua=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],Zu=Math.pow(2,53)-1;function mt(n,t){return t=t==null?n.length-1:+t,function(){for(var e=Math.max(arguments.length-t,0),i=Array(e),s=0;s<e;s++)i[s]=arguments[s+t];switch(t){case 0:return n.call(this,i);case 1:return n.call(this,arguments[0],i);case 2:return n.call(this,arguments[0],arguments[1],i)}var r=Array(t+1);for(s=0;s<t;s++)r[s]=arguments[s];return r[t]=i,n.apply(this,r)}}function Se(n){var t=typeof n;return t==="function"||t==="object"&&!!n}function Pa(n){return n===void 0}function za(n){return n===!0||n===!1||_n.call(n)==="[object Boolean]"}function lt(n){var t="[object "+n+"]";return function(e){return _n.call(e)===t}}const Gs=lt("String"),Xa=lt("Number"),Hu=lt("Date"),Ku=lt("RegExp"),Wu=lt("Error"),Za=lt("Symbol"),Ha=lt("ArrayBuffer");var Ka=lt("Function"),Ou=va.document&&va.document.childNodes;typeof/./!="function"&&typeof Int8Array!="object"&&typeof Ou!="function"&&(Ka=function(n){return typeof n=="function"||!1});const ct=Ka,Wa=lt("Object");var Oa=Uu&&(!/\[native code\]/.test(String(DataView))||Wa(new DataView(new ArrayBuffer(8)))),Ls=typeof Map<"u"&&Wa(new Map),Yu=lt("DataView");const yi=Oa?function(n){return n!=null&&ct(n.getInt8)&&Ha(n.buffer)}:Yu,_e=Pu||lt("Array");function le(n,t){return n!=null&&Fu.call(n,t)}var vs=lt("Arguments");(function(){vs(arguments)||(vs=function(n){return le(n,"callee")})})();const Rs=vs;function Ya(n){return Xa(n)&&zu(n)}function Va(n){return function(){return n}}function Ja(n){return function(t){var e=n(t);return typeof e=="number"&&e>=0&&e<=Zu}}function qa(n){return function(t){return t==null?void 0:t[n]}}const Ei=qa("byteLength"),Vu=Ja(Ei);var Ju=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;const ja=Ta?function(n){return Na?Na(n)&&!yi(n):Vu(n)&&Ju.test(_n.call(n))}:Va(!1),It=qa("length");function $a(n,t){t=function(o){for(var a={},A=o.length,l=0;l<A;++l)a[o[l]]=!0;return{contains:function(h){return a[h]===!0},push:function(h){return a[h]=!0,o.push(h)}}}(t);var e=Ua.length,i=n.constructor,s=ct(i)&&i.prototype||_s,r="constructor";for(le(n,r)&&!t.contains(r)&&t.push(r);e--;)(r=Ua[e])in n&&n[r]!==s[r]&&!t.contains(r)&&t.push(r)}function ot(n){if(!Se(n))return[];if(Da)return Da(n);var t=[];for(var e in n)le(n,e)&&t.push(e);return Fa&&$a(n,t),t}function tA(n,t){var e=ot(t),i=e.length;if(n==null)return!i;for(var s=Object(n),r=0;r<i;r++){var o=e[r];if(t[o]!==s[o]||!(o in s))return!1}return!0}function H(n){return n instanceof H?n:this instanceof H?void(this._wrapped=n):new H(n)}function eA(n){return new Uint8Array(n.buffer||n,n.byteOffset||0,Ei(n))}H.VERSION=La,H.prototype.value=function(){return this._wrapped},H.prototype.valueOf=H.prototype.toJSON=H.prototype.value,H.prototype.toString=function(){return String(this._wrapped)};var nA="[object DataView]";function Ts(n,t,e,i){if(n===t)return n!==0||1/n==1/t;if(n==null||t==null)return!1;if(n!=n)return t!=t;var s=typeof n;return(s==="function"||s==="object"||typeof t=="object")&&iA(n,t,e,i)}function iA(n,t,e,i){n instanceof H&&(n=n._wrapped),t instanceof H&&(t=t._wrapped);var s=_n.call(n);if(s!==_n.call(t))return!1;if(Oa&&s=="[object Object]"&&yi(n)){if(!yi(t))return!1;s=nA}switch(s){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!=+n?+t!=+t:+n==0?1/+n==1/t:+n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object Symbol]":return Ra.valueOf.call(n)===Ra.valueOf.call(t);case"[object ArrayBuffer]":case nA:return iA(eA(n),eA(t),e,i)}var r=s==="[object Array]";if(!r&&ja(n)){if(Ei(n)!==Ei(t))return!1;if(n.buffer===t.buffer&&n.byteOffset===t.byteOffset)return!0;r=!0}if(!r){if(typeof n!="object"||typeof t!="object")return!1;var o=n.constructor,a=t.constructor;if(o!==a&&!(ct(o)&&o instanceof o&&ct(a)&&a instanceof a)&&"constructor"in n&&"constructor"in t)return!1}i=i||[];for(var A=(e=e||[]).length;A--;)if(e[A]===n)return i[A]===t;if(e.push(n),i.push(t),r){if((A=n.length)!==t.length)return!1;for(;A--;)if(!Ts(n[A],t[A],e,i))return!1}else{var l,h=ot(n);if(A=h.length,ot(t).length!==A)return!1;for(;A--;)if(!le(t,l=h[A])||!Ts(n[l],t[l],e,i))return!1}return e.pop(),i.pop(),!0}function Gn(n){if(!Se(n))return[];var t=[];for(var e in n)t.push(e);return Fa&&$a(n,t),t}function Ds(n){var t=It(n);return function(e){if(e==null)return!1;var i=Gn(e);if(It(i))return!1;for(var s=0;s<t;s++)if(!ct(e[n[s]]))return!1;return n!==rA||!ct(e[ks])}}var ks="forEach",Ns=["clear","delete"],sA=["get","has","set"],qu=Ns.concat(ks,sA),rA=Ns.concat(sA),ju=["add"].concat(Ns,ks,"has");const $u=Ls?Ds(qu):lt("Map"),td=Ls?Ds(rA):lt("WeakMap"),ed=Ls?Ds(ju):lt("Set"),nd=lt("WeakSet");function Oe(n){for(var t=ot(n),e=t.length,i=Array(e),s=0;s<e;s++)i[s]=n[t[s]];return i}function oA(n){for(var t={},e=ot(n),i=0,s=e.length;i<s;i++)t[n[e[i]]]=e[i];return t}function Fs(n){var t=[];for(var e in n)ct(n[e])&&t.push(e);return t.sort()}function Us(n,t){return function(e){var i=arguments.length;if(t&&(e=Object(e)),i<2||e==null)return e;for(var s=1;s<i;s++)for(var r=arguments[s],o=n(r),a=o.length,A=0;A<a;A++){var l=o[A];t&&e[l]!==void 0||(e[l]=r[l])}return e}}const aA=Us(Gn),wi=Us(ot),AA=Us(Gn,!0);function lA(n){if(!Se(n))return{};if(ka)return ka(n);var t=function(){};t.prototype=n;var e=new t;return t.prototype=null,e}function hA(n){return _e(n)?n:[n]}function Ln(n){return H.toPath(n)}function Ps(n,t){for(var e=t.length,i=0;i<e;i++){if(n==null)return;n=n[t[i]]}return e?n:void 0}function cA(n,t,e){var i=Ps(n,Ln(t));return Pa(i)?e:i}function zs(n){return n}function vn(n){return n=wi({},n),function(t){return tA(t,n)}}function Xs(n){return n=Ln(n),function(t){return Ps(t,n)}}function Rn(n,t,e){if(t===void 0)return n;switch(e??3){case 1:return function(i){return n.call(t,i)};case 3:return function(i,s,r){return n.call(t,i,s,r)};case 4:return function(i,s,r,o){return n.call(t,i,s,r,o)}}return function(){return n.apply(t,arguments)}}function uA(n,t,e){return n==null?zs:ct(n)?Rn(n,t,e):Se(n)&&!_e(n)?vn(n):Xs(n)}function Zs(n,t){return uA(n,t,1/0)}function Ct(n,t,e){return H.iteratee!==Zs?H.iteratee(n,t):uA(n,t,e)}function dA(){}function Hs(n,t){return t==null&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))}H.toPath=hA,H.iteratee=Zs;const Tn=Date.now||function(){return new Date().getTime()};function gA(n){var t=function(r){return n[r]},e="(?:"+ot(n).join("|")+")",i=RegExp(e),s=RegExp(e,"g");return function(r){return r=r==null?"":""+r,i.test(r)?r.replace(s,t):r}}const pA={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},id=gA(pA),sd=gA(oA(pA)),rd=H.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var Ks=/(.)^/,od={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},ad=/\\|'|\r|\n|\u2028|\u2029/g;function Ad(n){return"\\"+od[n]}var ld=/^\s*(\w|\$)+\s*$/,hd=0;function fA(n,t,e,i,s){if(!(i instanceof t))return n.apply(e,s);var r=lA(n.prototype),o=n.apply(r,s);return Se(o)?o:r}var Ye=mt(function(n,t){var e=Ye.placeholder,i=function(){for(var s=0,r=t.length,o=Array(r),a=0;a<r;a++)o[a]=t[a]===e?arguments[s++]:t[a];for(;s<arguments.length;)o.push(arguments[s++]);return fA(n,i,this,this,o)};return i});Ye.placeholder=H;const mA=mt(function(n,t,e){if(!ct(n))throw new TypeError("Bind must be called on a function");var i=mt(function(s){return fA(n,i,t,this,e.concat(s))});return i}),wt=Ja(It);function Ge(n,t,e,i){if(i=i||[],t||t===0){if(t<=0)return i.concat(n)}else t=1/0;for(var s=i.length,r=0,o=It(n);r<o;r++){var a=n[r];if(wt(a)&&(_e(a)||Rs(a)))if(t>1)Ge(a,t-1,e,i),s=i.length;else for(var A=0,l=a.length;A<l;)i[s++]=a[A++];else e||(i[s++]=a)}return i}const cd=mt(function(n,t){var e=(t=Ge(t,!1,!1)).length;if(e<1)throw new Error("bindAll must be passed function names");for(;e--;){var i=t[e];n[i]=mA(n[i],n)}return n}),IA=mt(function(n,t,e){return setTimeout(function(){return n.apply(null,e)},t)}),ud=Ye(IA,H,1);function Ws(n){return function(){return!n.apply(this,arguments)}}function CA(n,t){var e;return function(){return--n>0&&(e=t.apply(this,arguments)),n<=1&&(t=null),e}}const dd=Ye(CA,2);function BA(n,t,e){t=Ct(t,e);for(var i,s=ot(n),r=0,o=s.length;r<o;r++)if(t(n[i=s[r]],i,n))return i}function yA(n){return function(t,e,i){e=Ct(e,i);for(var s=It(t),r=n>0?0:s-1;r>=0&&r<s;r+=n)if(e(t[r],r,t))return r;return-1}}const Os=yA(1),EA=yA(-1);function wA(n,t,e,i){for(var s=(e=Ct(e,i,1))(t),r=0,o=It(n);r<o;){var a=Math.floor((r+o)/2);e(n[a])<s?r=a+1:o=a}return r}function xA(n,t,e){return function(i,s,r){var o=0,a=It(i);if(typeof r=="number")n>0?o=r>=0?r:Math.max(r+a,o):a=r>=0?Math.min(r+1,a):r+a+1;else if(e&&r&&a)return i[r=e(i,s)]===s?r:-1;if(s!=s)return(r=t(Sn.call(i,o,a),Ya))>=0?r+o:-1;for(r=n>0?o:a-1;r>=0&&r<a;r+=n)if(i[r]===s)return r;return-1}}const QA=xA(1,Os,wA),gd=xA(-1,EA);function Ys(n,t,e){var i=(wt(n)?Os:BA)(n,t,e);if(i!==void 0&&i!==-1)return n[i]}function Vt(n,t,e){var i,s;if(t=Rn(t,e),wt(n))for(i=0,s=n.length;i<s;i++)t(n[i],i,n);else{var r=ot(n);for(i=0,s=r.length;i<s;i++)t(n[r[i]],r[i],n)}return n}function Le(n,t,e){t=Ct(t,e);for(var i=!wt(n)&&ot(n),s=(i||n).length,r=Array(s),o=0;o<s;o++){var a=i?i[o]:o;r[o]=t(n[a],a,n)}return r}function MA(n){return function(t,e,i,s){var r=arguments.length>=3;return function(o,a,A,l){var h=!wt(o)&&ot(o),c=(h||o).length,d=n>0?0:c-1;for(l||(A=o[h?h[d]:d],d+=n);d>=0&&d<c;d+=n){var u=h?h[d]:d;A=a(A,o[u],u,o)}return A}(t,Rn(e,s,4),i,r)}}const Vs=MA(1),bA=MA(-1);function Ve(n,t,e){var i=[];return t=Ct(t,e),Vt(n,function(s,r,o){t(s,r,o)&&i.push(s)}),i}function SA(n,t,e){t=Ct(t,e);for(var i=!wt(n)&&ot(n),s=(i||n).length,r=0;r<s;r++){var o=i?i[r]:r;if(!t(n[o],o,n))return!1}return!0}function _A(n,t,e){t=Ct(t,e);for(var i=!wt(n)&&ot(n),s=(i||n).length,r=0;r<s;r++){var o=i?i[r]:r;if(t(n[o],o,n))return!0}return!1}function Jt(n,t,e,i){return wt(n)||(n=Oe(n)),(typeof e!="number"||i)&&(e=0),QA(n,t,e)>=0}const pd=mt(function(n,t,e){var i,s;return ct(t)?s=t:(t=Ln(t),i=t.slice(0,-1),t=t[t.length-1]),Le(n,function(r){var o=s;if(!o){if(i&&i.length&&(r=Ps(r,i)),r==null)return;o=r[t]}return o==null?o:o.apply(r,e)})});function Js(n,t){return Le(n,Xs(t))}function GA(n,t,e){var i,s,r=-1/0,o=-1/0;if(t==null||typeof t=="number"&&typeof n[0]!="object"&&n!=null)for(var a=0,A=(n=wt(n)?n:Oe(n)).length;a<A;a++)(i=n[a])!=null&&i>r&&(r=i);else t=Ct(t,e),Vt(n,function(l,h,c){((s=t(l,h,c))>o||s===-1/0&&r===-1/0)&&(r=l,o=s)});return r}var fd=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function LA(n){return n?_e(n)?Sn.call(n):Gs(n)?n.match(fd):wt(n)?Le(n,zs):Oe(n):[]}function vA(n,t,e){if(t==null||e)return wt(n)||(n=Oe(n)),n[Hs(n.length-1)];var i=LA(n),s=It(i);t=Math.max(Math.min(t,s),0);for(var r=s-1,o=0;o<t;o++){var a=Hs(o,r),A=i[o];i[o]=i[a],i[a]=A}return i.slice(0,t)}function xi(n,t){return function(e,i,s){var r=t?[[],[]]:{};return i=Ct(i,s),Vt(e,function(o,a){var A=i(o,a,e);n(r,o,A)}),r}}const md=xi(function(n,t,e){le(n,e)?n[e].push(t):n[e]=[t]}),Id=xi(function(n,t,e){n[e]=t}),Cd=xi(function(n,t,e){le(n,e)?n[e]++:n[e]=1}),Bd=xi(function(n,t,e){n[e?0:1].push(t)},!0);function yd(n,t,e){return t in e}const RA=mt(function(n,t){var e={},i=t[0];if(n==null)return e;ct(i)?(t.length>1&&(i=Rn(i,t[1])),t=Gn(n)):(i=yd,t=Ge(t,!1,!1),n=Object(n));for(var s=0,r=t.length;s<r;s++){var o=t[s],a=n[o];i(a,o,n)&&(e[o]=a)}return e}),Ed=mt(function(n,t){var e,i=t[0];return ct(i)?(i=Ws(i),t.length>1&&(e=t[1])):(t=Le(Ge(t,!1,!1),String),i=function(s,r){return!Jt(t,r)}),RA(n,i,e)});function TA(n,t,e){return Sn.call(n,0,Math.max(0,n.length-(t==null||e?1:t)))}function qs(n,t,e){return n==null||n.length<1?t==null||e?void 0:[]:t==null||e?n[0]:TA(n,n.length-t)}function Qi(n,t,e){return Sn.call(n,t==null||e?1:t)}const DA=mt(function(n,t){return t=Ge(t,!0,!0),Ve(n,function(e){return!Jt(t,e)})}),wd=mt(function(n,t){return DA(n,t)});function js(n,t,e,i){za(t)||(i=e,e=t,t=!1),e!=null&&(e=Ct(e,i));for(var s=[],r=[],o=0,a=It(n);o<a;o++){var A=n[o],l=e?e(A,o,n):A;t&&!e?(o&&r===l||s.push(A),r=l):e?Jt(r,l)||(r.push(l),s.push(A)):Jt(s,A)||s.push(A)}return s}const xd=mt(function(n){return js(Ge(n,!0,!0))});function $s(n){for(var t=n&&GA(n,It).length||0,e=Array(t),i=0;i<t;i++)e[i]=Js(n,i);return e}const Qd=mt($s);function tr(n,t){return n._chain?H(t).chain():t}function kA(n){return Vt(Fs(n),function(t){var e=H[t]=n[t];H.prototype[t]=function(){var i=[this._wrapped];return Nu.apply(i,arguments),tr(this,e.apply(H,i))}}),H}Vt(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=Bi[n];H.prototype[n]=function(){var e=this._wrapped;return e!=null&&(t.apply(e,arguments),n!=="shift"&&n!=="splice"||e.length!==0||delete e[0]),tr(this,e)}}),Vt(["concat","join","slice"],function(n){var t=Bi[n];H.prototype[n]=function(){var e=this._wrapped;return e!=null&&(e=t.apply(e,arguments)),tr(this,e)}});const Md=Object.freeze(Object.defineProperty({__proto__:null,VERSION:La,after:function(n,t){return function(){if(--n<1)return t.apply(this,arguments)}},all:SA,allKeys:Gn,any:_A,assign:wi,before:CA,bind:mA,bindAll:cd,chain:function(n){var t=H(n);return t._chain=!0,t},chunk:function(n,t){if(t==null||t<1)return[];for(var e=[],i=0,s=n.length;i<s;)e.push(Sn.call(n,i,i+=t));return e},clone:function(n){return Se(n)?_e(n)?n.slice():aA({},n):n},collect:Le,compact:function(n){return Ve(n,Boolean)},compose:function(){var n=arguments,t=n.length-1;return function(){for(var e=t,i=n[t].apply(this,arguments);e--;)i=n[e].call(this,i);return i}},constant:Va,contains:Jt,countBy:Cd,create:function(n,t){var e=lA(n);return t&&wi(e,t),e},debounce:function(n,t,e){var i,s,r,o,a,A=function(){var h=Tn()-s;t>h?i=setTimeout(A,t-h):(i=null,e||(o=n.apply(a,r)),i||(r=a=null))},l=mt(function(h){return a=this,r=h,s=Tn(),i||(i=setTimeout(A,t),e&&(o=n.apply(a,r))),o});return l.cancel=function(){clearTimeout(i),i=r=a=null},l},default:H,defaults:AA,defer:ud,delay:IA,detect:Ys,difference:DA,drop:Qi,each:Vt,escape:id,every:SA,extend:aA,extendOwn:wi,filter:Ve,find:Ys,findIndex:Os,findKey:BA,findLastIndex:EA,findWhere:function(n,t){return Ys(n,vn(t))},first:qs,flatten:function(n,t){return Ge(n,t,!1)},foldl:Vs,foldr:bA,forEach:Vt,functions:Fs,get:cA,groupBy:md,has:function(n,t){for(var e=(t=Ln(t)).length,i=0;i<e;i++){var s=t[i];if(!le(n,s))return!1;n=n[s]}return!!e},head:qs,identity:zs,include:Jt,includes:Jt,indexBy:Id,indexOf:QA,initial:TA,inject:Vs,intersection:function(n){for(var t=[],e=arguments.length,i=0,s=It(n);i<s;i++){var r=n[i];if(!Jt(t,r)){var o;for(o=1;o<e&&Jt(arguments[o],r);o++);o===e&&t.push(r)}}return t},invert:oA,invoke:pd,isArguments:Rs,isArray:_e,isArrayBuffer:Ha,isBoolean:za,isDataView:yi,isDate:Hu,isElement:function(n){return!(!n||n.nodeType!==1)},isEmpty:function(n){if(n==null)return!0;var t=It(n);return typeof t=="number"&&(_e(n)||Gs(n)||Rs(n))?t===0:It(ot(n))===0},isEqual:function(n,t){return Ts(n,t)},isError:Wu,isFinite:function(n){return!Za(n)&&Xu(n)&&!isNaN(parseFloat(n))},isFunction:ct,isMap:$u,isMatch:tA,isNaN:Ya,isNull:function(n){return n===null},isNumber:Xa,isObject:Se,isRegExp:Ku,isSet:ed,isString:Gs,isSymbol:Za,isTypedArray:ja,isUndefined:Pa,isWeakMap:td,isWeakSet:nd,iteratee:Zs,keys:ot,last:function(n,t,e){return n==null||n.length<1?t==null||e?void 0:[]:t==null||e?n[n.length-1]:Qi(n,Math.max(0,n.length-t))},lastIndexOf:gd,map:Le,mapObject:function(n,t,e){t=Ct(t,e);for(var i=ot(n),s=i.length,r={},o=0;o<s;o++){var a=i[o];r[a]=t(n[a],a,n)}return r},matcher:vn,matches:vn,max:GA,memoize:function(n,t){var e=function(i){var s=e.cache,r=""+(t?t.apply(this,arguments):i);return le(s,r)||(s[r]=n.apply(this,arguments)),s[r]};return e.cache={},e},methods:Fs,min:function(n,t,e){var i,s,r=1/0,o=1/0;if(t==null||typeof t=="number"&&typeof n[0]!="object"&&n!=null)for(var a=0,A=(n=wt(n)?n:Oe(n)).length;a<A;a++)(i=n[a])!=null&&i<r&&(r=i);else t=Ct(t,e),Vt(n,function(l,h,c){((s=t(l,h,c))<o||s===1/0&&r===1/0)&&(r=l,o=s)});return r},mixin:kA,negate:Ws,noop:dA,now:Tn,object:function(n,t){for(var e={},i=0,s=It(n);i<s;i++)t?e[n[i]]=t[i]:e[n[i][0]]=n[i][1];return e},omit:Ed,once:dd,pairs:function(n){for(var t=ot(n),e=t.length,i=Array(e),s=0;s<e;s++)i[s]=[t[s],n[t[s]]];return i},partial:Ye,partition:Bd,pick:RA,pluck:Js,property:Xs,propertyOf:function(n){return n==null?dA:function(t){return cA(n,t)}},random:Hs,range:function(n,t,e){t==null&&(t=n||0,n=0),e||(e=t<n?-1:1);for(var i=Math.max(Math.ceil((t-n)/e),0),s=Array(i),r=0;r<i;r++,n+=e)s[r]=n;return s},reduce:Vs,reduceRight:bA,reject:function(n,t,e){return Ve(n,Ws(Ct(t)),e)},rest:Qi,restArguments:mt,result:function(n,t,e){var i=(t=Ln(t)).length;if(!i)return ct(e)?e.call(n):e;for(var s=0;s<i;s++){var r=n==null?void 0:n[t[s]];r===void 0&&(r=e,s=i),n=ct(r)?r.call(n):r}return n},sample:vA,select:Ve,shuffle:function(n){return vA(n,1/0)},size:function(n){return n==null?0:wt(n)?n.length:ot(n).length},some:_A,sortBy:function(n,t,e){var i=0;return t=Ct(t,e),Js(Le(n,function(s,r,o){return{value:s,index:i++,criteria:t(s,r,o)}}).sort(function(s,r){var o=s.criteria,a=r.criteria;if(o!==a){if(o>a||o===void 0)return 1;if(o<a||a===void 0)return-1}return s.index-r.index}),"value")},sortedIndex:wA,tail:Qi,take:qs,tap:function(n,t){return t(n),n},template:function(n,t,e){!t&&e&&(t=e),t=AA({},t,H.templateSettings);var i=RegExp([(t.escape||Ks).source,(t.interpolate||Ks).source,(t.evaluate||Ks).source].join("|")+"|$","g"),s=0,r="__p+='";n.replace(i,function(l,h,c,d,u){return r+=n.slice(s,u).replace(ad,Ad),s=u+l.length,h?r+=`'+
|
|
2
|
+
((__t=(`+h+`))==null?'':_.escape(__t))+
|
|
3
|
+
'`:c?r+=`'+
|
|
4
|
+
((__t=(`+c+`))==null?'':__t)+
|
|
5
|
+
'`:d&&(r+=`';
|
|
6
|
+
`+d+`
|
|
7
|
+
__p+='`),l}),r+=`';
|
|
8
|
+
`;var o,a=t.variable;if(a){if(!ld.test(a))throw new Error("variable is not a bare identifier: "+a)}else r=`with(obj||{}){
|
|
9
|
+
`+r+`}
|
|
10
|
+
`,a="obj";r=`var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
|
|
11
|
+
`+r+`return __p;
|
|
12
|
+
`;try{o=new Function(a,"_",r)}catch(l){throw l.source=r,l}var A=function(l){return o.call(this,l,H)};return A.source="function("+a+`){
|
|
13
|
+
`+r+"}",A},templateSettings:rd,throttle:function(n,t,e){var i,s,r,o,a=0;e||(e={});var A=function(){a=e.leading===!1?0:Tn(),i=null,o=n.apply(s,r),i||(s=r=null)},l=function(){var h=Tn();a||e.leading!==!1||(a=h);var c=t-(h-a);return s=this,r=arguments,c<=0||c>t?(i&&(clearTimeout(i),i=null),a=h,o=n.apply(s,r),i||(s=r=null)):i||e.trailing===!1||(i=setTimeout(A,c)),o};return l.cancel=function(){clearTimeout(i),a=0,i=s=r=null},l},times:function(n,t,e){var i=Array(Math.max(0,n));t=Rn(t,e,1);for(var s=0;s<n;s++)i[s]=t(s);return i},toArray:LA,toPath:hA,transpose:$s,unescape:sd,union:xd,uniq:js,unique:js,uniqueId:function(n){var t=++hd+"";return n?n+t:t},unzip:$s,values:Oe,where:function(n,t){return Ve(n,vn(t))},without:wd,wrap:function(n,t){return Ye(t,n)},zip:Qd},Symbol.toStringTag,{value:"Module"}));var NA=kA(Md);NA._=NA;class bd{constructor(){g(this,"numNodesOCHidden",0);g(this,"numNodesFCHidden",0);g(this,"numNodes",0);g(this,"numVisibleTriangles",0)}}function FA(n,t,e,i,s){if(console.log(`%c${t} -------------------------------------------------`,"font-weight: bold"),n.length===0)return void console.log("The tree is empty");const r=new bd;for(const o of n)UA(o,e,i,r,s);console.log(i?`Vis tris: ${gt(r.numVisibleTriangles)}`:`Vis tris: ${gt(r.numVisibleTriangles)}, nodes: OC: ${r.numNodesOCHidden} (${gt(r.numNodesOCHidden/r.numNodes*100)}%), FC: ${r.numNodesFCHidden} (${gt(r.numNodesFCHidden/r.numNodes*100)}%), total: ${r.numNodes}`)}function UA(n,t,e,i,s,r=0){let o,a=!1,A=!1;n.modelNode.isOCHidden?(i.numNodesOCHidden++,a=!0):(A=n.modelNode.isFCHidden,A&&(i.numNodesFCHidden++,a=!0)),i.numNodes++,!a&&n.selfVisible&&(i.numVisibleTriangles+=n.triangleCount),o=n.modelNode.hasSkeleton||!n.modelNode.isOCHidden&&!A?n.hasGeometry?n.selfVisible&&n.lod<0?"#FF0000":"#000000":"#b0b151ff":"#AAAAAA";const l=n.modelNode.getDistance(t),h=n.modelNode.isCameraInside;let c="",d="",u="";if(n.lod!==-1)c=`, PQD: ${gt(xe(n.modelNode,n.lod,t))} (${n.modelNode.priority})`,d=`, tris: ${gt(n.modelNode.getTriangleCount(n.lod))}`,u=`, tri den: ${gt(n.triangleDensity,3)}`;else if(n.children&&n.children.length&&n.children[0].lod!==-1){let p=0;for(const I of n.children)p+=xe(I.modelNode,I.lod,t);c=`, avg child PQD: ${gt(p/n.children.length)}`}if(n.modelNode.id!==null&&n.modelNode.id!==""||console.log(`%c${n.modelNode.model.name}`,"font-weight: bold"),console.log(`${function(p,I=2){let f="";for(let m=0;m<p;m++)for(let x=0;x<I;x++)f+=" ";return f}(r+1)}%c${n.modelNode.id!=null&&n.modelNode.id!==""?`${n.modelNode.id}: `:""}depth: ${r} (${n.modelNode.maxDepth}), lod: ${n.lod} (${n.lodCount})${d}, surf: ${n.modelNode.surfaceArea.toLocaleString()}${u}, dist: ${l.toLocaleString()}${h?" (inside)":""}${c}${n.modelNode.isOCHidden?", OC hidden":A&&!n.modelNode.hasSkeleton?", FC hidden":""}${n.modelNode.hasSkeleton?", skeleton":""}${n.hasGeometry?"":", no geo"}`,`${e&&n.modelNode.isInScene?"font-weight: bold":""};color: ${o}`),n.children)for(const p of n.children)UA(p,t,e,i,s,r+1)}function PA(n){return n===-1?-1:1024*n*1024}class Sd extends EventTarget{constructor(e,i,s,r=0,o,a){super();g(this,"options");g(this,"camera");g(this,"screenAspectRatio");g(this,"models");g(this,"modelLoadedHandlers");g(this,"totalNumModels");g(this,"boundingBox");g(this,"renderer");g(this,"numModelsInitialDataLoaded");g(this,"prevCameraPosition");g(this,"prevCameraDirection");g(this,"currentDownloadSize");g(this,"reachedTargetTree");g(this,"lastGeneratedOperations");g(this,"numOperationsDownloading");g(this,"processingOperationIds");g(this,"renderQueue");g(this,"occlusionQueryInterval");g(this,"isColliderVisable",!1);g(this,"sentInitiallyReachedTargetTreeEvent",!1);g(this,"softVramLimit");g(this,"hardVramLimit");g(this,"iosVramLimit");g(this,"reachedSoftMemoryLimit",!1);g(this,"meshesSize",0);g(this,"initialTriangleCount",0);g(this,"lastUpdateDebugInfo");g(this,"nodesWithOphanedOcclusionObject3ds");g(this,"lastTexLodUpdate",0);g(this,"texLodUpdateIntervalMs",300);g(this,"texLodBusy",!1);g(this,"texAfterGeomCooldownMs",120);g(this,"maxTexLodChangesPerTick",10);g(this,"initialBatchStarted",!1);g(this,"modelsWithInitialData",new WeakSet);g(this,"promo",{queued:new Set,ready:new Set,inflight:new Set,joinOpen:!1,joinDeadline:0,timerId:null,joinWindowMs:1500,quietMs:350});Y.initInstance(o,a),this.camera=e,this.renderer=i,this.totalNumModels=r;const A=function(u){return u.cameraType==null&&(u.cameraType=je.NonPlayer),u.useOcclusionCulling==null&&(u.useOcclusionCulling=!1),u.occlusionGeometryType==null&&(u.occlusionGeometryType=Gi.BoundingBox),u.occlusionQueryFrequency==null&&(u.occlusionQueryFrequency=8),u.triangleBudget==null&&(u.triangleBudget=5e6),u.mobileTriangleBudget==null&&(u.mobileTriangleBudget=3e6),u.minimumDistance==null&&(u.minimumDistance=.01),u.distanceFactor==null&&(u.distanceFactor=1.1),u.maximumQuality==null&&(u.maximumQuality=15e3),u.closeUpDistance==null&&(u.closeUpDistance=3),u.closeUpDistanceFactor==null&&(u.closeUpDistanceFactor=5),u.iosMemoryLimit==null&&(u.iosMemoryLimit=0),u}(s);this.models=[],this.modelLoadedHandlers=[],this.numModelsInitialDataLoaded=0,this.processingOperationIds=new Set,this.renderQueue=[],this.currentDownloadSize=0,this.numOperationsDownloading=0,this.reachedTargetTree=!1,this.nodesWithOphanedOcclusionObject3ds=new Map,this.softVramLimit=-1,this.hardVramLimit=-1,Zi()&&(this.iosVramLimit=-1,this.getIosVramLimit(te(["iosml","ios-memory-limit"],A.iosMemoryLimit)).then(u=>{this.iosVramLimit=u,this.softVramLimit=this.getVramLimit(u,!0),this.hardVramLimit=this.getVramLimit(u,!1)}));const l=(h=["tb","triangle-budget"],c=A.triangleBudget,d=A.mobileTriangleBudget!==0?A.mobileTriangleBudget:A.triangleBudget,Xn(h,c,d,u=>parseInt(u),u=>!isNaN(u)));var h,c,d;if(this.options={cameraType:A.cameraType,triangleBudget:l,mobileTriangleBudget:A.mobileTriangleBudget,minimumDistance:te(["md","minimum-distance"],A.minimumDistance),distanceFactor:te(["df","distance-factor"],A.distanceFactor),maximumQuality:te(["mq","maximum-quality"],A.maximumQuality),closeUpDistance:te(["cd","close-up-distance"],A.closeUpDistance),closeUpDistanceFactor:te(["cdf","close-up-distance-factor"],A.closeUpDistanceFactor),useOcclusionCulling:Zn(["oc","occlusion-culling"],A.useOcclusionCulling),occlusionGeometryType:zl(["og","occlusion-geometry"],A.occlusionGeometryType,Gi),occlusionQueryFrequency:te(["of","occlusion-frequency"],A.occlusionQueryFrequency),iosMemoryLimit:te(["iosml","ios-memory-limit"],A.iosMemoryLimit),removeHiddenNodeMesh:Zn(["rhn","remove-hidden-nodes"],Zi())},new URLSearchParams(window.location.search),Y.instance.logOptions){console.log("Stream controller options:");for(const u in this.options)this.options.hasOwnProperty(u)&&u!=="mobileTriangleBudget"&&console.log(` ${u}: ${this.options[u]}`)}window.addEventListener("resize",()=>{this.getScreenAspectRatio()}),this.getScreenAspectRatio(),this.options.useOcclusionCulling&&(this.options.useOcclusionCulling=this.initOcclusionCulling()),this.renderer.visualizeCollider&&Y.instance.toggleColliderVisualization&&document.addEventListener("keypress",u=>{u.key.toLowerCase()==="c"&&this.toggleColliderVisualization()}),this.renderOperation()}computeNodeCoveragePx(e){if(!e.isInScene||e.isOCHidden)return 0;const i=this.renderer.screenWidth||window.innerWidth||1,s=this.renderer.screenHeight||window.innerHeight||1,r=Math.max(i,s),o=(window==null?void 0:window.devicePixelRatio)||1,a=e.model.cameraPositionLs,A=e.boundingBox.containsPoint(a),l=e.boundingBox.getDistance(a);if(A){const p=r*o;return this.adjustCoverageForUvBounds(e,p)}const h=(e.boundingBox.maxX-e.boundingBox.minX+(e.boundingBox.maxY-e.boundingBox.minY)+(e.boundingBox.maxZ-e.boundingBox.minZ))/3,c=this.renderer.getCameraFov(this.camera);if(!c)return 0;const d=c/2*Math.PI/180,u=2*Math.atan(h/(2*Math.max(.001,l)))/(2*d)*r*o;return this.adjustCoverageForUvBounds(e,u)}adjustCoverageForUvBounds(e,i){const s=e.lastNodeLodData;if(!s||!s.uvBoundsMinX||s.uvBoundsMinX.length===0||0>=s.uvBoundsMinX.length)return i;const r=s.uvBoundsMinX[0],o=s.uvBoundsMaxX[0],a=s.uvBoundsMinY[0],A=(o-r)*(s.uvBoundsMaxY[0]-a);if(A>=.95)return i;const l=Math.sqrt(A);return i/Math.max(.01,Math.min(1,l))}screenMajorPx(){const e=this.renderer.screenWidth||window.innerWidth||1,i=this.renderer.screenHeight||window.innerHeight||1,s=(window==null?void 0:window.devicePixelRatio)||1;return Math.max(e,i)*s}pickInitialTexTier(e,i){var o,a;const s=Y.instance.textureLodPolicy;if(s==="off")return 0;if(s==="match-geom")return Math.max(0,i);const r=(o=e.streamableMaterials)==null?void 0:o[i];if(r&&typeof r.pickLodIndexForCoverage=="function"){const A=this.computeNodeCoveragePx(e),l=((a=e.activeTexLodByLod)==null?void 0:a.get(i))??-1;return r.pickLodIndexForCoverageHysteresis(A,l,{scaleFactor:Y.instance.textureLodScaleFactor,promote:.9,demote:.9,screenPx:this.screenMajorPx(),fullScreenFrac:.85})}return 0}async updateTextureLodsDynamic(e){var s,r,o,a;const i=performance&&performance.now?performance.now():Date.now();if(!(i-this.lastTexLodUpdate<this.texLodUpdateIntervalMs||(this.lastTexLodUpdate=i,this.texLodBusy))){this.texLodBusy=!0;try{if(Y.instance.textureLodPolicy==="off")return;const A=(e??this.models).filter(p=>p&&!p.isInitializing&&!p.isRemoving&&p.dynamicTexLodEnabled);if(A.length===0)return;const l=[],h=p=>!!p&&!("mesh"in p&&!(p.mesh&&p.node&&p.material)),c=(p,I)=>{var E,M,L,B,w;if(I.pendingRemoval||!I.object3d){for(const y of I.children||[])c(p,y);return}const f=I.ownersByLod,m=I.activeTexLodByLod,x=Array.isArray(I.geometry)?I.geometry.length:0;for(let y=0;y<x;y++){if(I.activeLod!=null&&I.activeLod!==y)continue;const Q=this.texAfterGeomCooldownMs??0;if(Q&&I.lastGeomSwapAt&&i-I.lastGeomSwapAt<Q)continue;let b=f==null?void 0:f.get(y);if(b&&b.length!==0||!I.object3d||I.activeLod!==y||(b=this.renderer.listMaterialOwners(I.object3d)),!b||b.length===0||(b=b.filter(h),b.length===0))continue;const v=(E=I.streamableMaterials)==null?void 0:E[y];if(!v||typeof v.pickLodIndexForCoverage!="function")continue;const T=this.computeNodeCoveragePx(I),N=((M=I.activeTexLodByLod)==null?void 0:M.get(y))??-1,R=v.pickLodIndexForCoverageHysteresis(T,N,{scaleFactor:Y.instance.textureLodScaleFactor,promote:.9,demote:.9,screenPx:this.screenMajorPx(),fullScreenFrac:.85});if(R<0)continue;const D=m==null?void 0:m.get(y);if(D!=null&&R===D)continue;const U=((L=I.material)==null?void 0:L[y])??((w=(B=I.geometry)==null?void 0:B[y])==null?void 0:w.replace(".xrgc","").replace("geometry","mat"))??`${I.id}|mat_${y}`;l.push({model:p,node:I,lod:y,owners:b,matName:U,from:D??-1,to:R})}for(const y of I.children||[])c(p,y)};for(const p of A)p.rootNode&&c(p,p.rootNode);if(l.length===0)return;l.length>this.maxTexLodChangesPerTick&&(l.sort((p,I)=>p.to-(p.from<0?p.to:p.from)-(I.to-(I.from<0?I.to:I.from))),l.length=this.maxTexLodChangesPerTick);{const p=new Map;for(const I of l){const f=I.matName.split("::")[0],m=p.get(f);(m==null||I.to<m)&&p.set(f,I.to)}for(const I of l){const f=I.matName.split("::")[0],m=p.get(f);m!=null&&m!==I.to&&(I.to=m)}}const d=l.filter(p=>p.node.activeLod==null||p.node.activeLod===p.lod),u=new Map;for(const p of d){let I=u.get(p.model);I||(I=new Map,u.set(p.model,I));let f=I.get(p.to);f||(f=[],I.set(p.to,f)),f.push(new zt(p.node,p.lod))}await Promise.all([...u.entries()].flatMap(([p,I])=>[...I.entries()].map(([f,m])=>p.nodeDataSource.downloadNodeData(m,0,f,!0))));for(const p of d){if(p.node.activeLod!=null&&p.node.activeLod!==p.lod){const B=(s=p.node.streamableMaterials)==null?void 0:s[p.lod];if(B){const w=B.getTexturesForTier(p.to);for(const y of w)y&&y.state===Fe.Available&&y.refCount===0&&y.release()}continue}const I=p.model.materialCache,f=(r=p.node.streamableMaterials)==null?void 0:r[p.lod],m=p.node.lastNodeLodData;if(!f||!m)continue;const x=f.getTexturesForTier(p.to).filter(B=>B&&B.state===Fe.NotLoaded);if(x.length>0){const B=x.map(w=>w.fileName);await p.model.nodeDataSource.modelSource.fetchFiles(B)}const E=await I.getOrCreate(p.matName,p.to,()=>f.load(m,p.to)),M=(((o=p.node.ownersByLod)==null?void 0:o.get(p.lod))||[]).filter(h);if(M.length===0)continue;const L=p.from>=0&&M.length?this.renderer.getOwnerMaterial(M[0]):null;for(const B of M)I.retainForOwner(p.matName,p.to,B),this.renderer.setOwnerMaterial(B,E),B.psMaterial=E,B.psMatKey={matName:p.matName,tier:p.to};if(L&&p.from>=0&&p.from!==p.to){let B=!1;for(const w of M)if(this.renderer.getOwnerMaterial(w)===L){B=!0;break}if(!B)for(const w of M)I.releaseForOwner(p.matName,p.from,w,y=>this.renderer.disposeMaterial(y))}(a=p.node).activeTexLodByLod??(a.activeTexLodByLod=new Map),p.node.activeTexLodByLod.set(p.lod,p.to)}}finally{this.texLodBusy=!1}}}modelSupportsTextureLods(e){if(!zn(Ti(e.rootNode.version),[0,0,6]))return!1;const i=e.rootNode.textures??[];return i.length===0?!1:!!i.some(r=>{var o;return(((o=r.lods)==null?void 0:o.length)??0)>1})}openJoinWindow(){this.promo.joinOpen=!0,this.promo.joinDeadline=performance.now()+this.promo.joinWindowMs,this.promo.timerId!=null&&clearTimeout(this.promo.timerId);const e=Math.max(0,this.promo.joinDeadline-performance.now());this.promo.timerId=window.setTimeout(()=>this.maybePromoteBatch(),e)}closeJoinWindow(){this.promo.joinOpen=!1,this.promo.joinDeadline=0,this.promo.timerId!=null&&(clearTimeout(this.promo.timerId),this.promo.timerId=null)}startQuietDebounce(){this.promo.timerId!=null&&clearTimeout(this.promo.timerId),this.promo.timerId=window.setTimeout(()=>this.maybePromoteBatch(),this.promo.quietMs)}async maybePromoteBatch(){this.promo.timerId=null;const e=!this.promo.joinOpen||performance.now()>=this.promo.joinDeadline,i=this.promo.inflight.size===0;if(!e&&!i)return;if(this.promo.joinOpen&&i&&!e)return void this.startQuietDebounce();if(this.closeJoinWindow(),this.promo.queued.size===0)return;const s=[...this.promo.queued];this.promo.queued.clear(),this.promo.ready.clear(),this.promo.inflight.clear(),await this.promoteBatch(s)}async promoteBatch(e){var r,o,a,A,l;const i=this.collectPromotionTargets(e);if(i.length===0)return;const s=new Map;for(const h of i){let c=s.get(h.model);c||(c=[],s.set(h.model,c)),c.push(new zt(h.node,h.lod))}await Promise.all([...s.entries()].map(([h,c])=>h.nodeDataSource.downloadNodeData(c,0,"best")));for(const h of i){const c=h.model.materialCache;let d=(r=h.node.material)==null?void 0:r[h.lod];!d&&((o=h.node.geometry)!=null&&o[h.lod])&&(d=h.node.geometry[h.lod].replace(".xrgc","").replace("geometry","mat"));const u=(a=h.node.streamableMaterials)==null?void 0:a[h.lod];if(!u||!h.node.lastNodeLodData)continue;const p=h.node.lastNodeLodData,I=await c.getOrCreate(h.matName,0,()=>u.load(p,0)),f=h.owners[0],m=((A=f.psMatKey)==null?void 0:A.tier)??-1;for(const x of h.owners){const E=this.renderer.getOwnerMaterial(x)||x.psMaterial;this.renderer.setOwnerMaterial(x,I),x.psMaterial=I,x.psMatKey={matName:h.matName,tier:0},c.retainForOwner(h.matName,0,x),E&&E!==I&&m>=0?c.releaseForOwner(h.matName,m,x,M=>this.renderer.disposeMaterial(M)):E&&E!==I&&c.releaseByMat(E,M=>this.renderer.disposeMaterial(M))}(l=h.node).activeTexLodByLod??(l.activeTexLodByLod=new Map),h.node.activeTexLodByLod.set(h.lod,0)}}registerForPromotion(e){this.promo.queued.add(e),this.promo.inflight.add(e)}notifyMiniReady(e){if(Y.instance.textureLodPolicy==="off")return this.promo.queued.has(e)||this.promo.queued.add(e),this.promo.inflight.delete(e),this.promo.ready.add(e),this.promo.joinOpen||this.openJoinWindow(),void(this.promo.inflight.size===0&&this.startQuietDebounce());e.dynamicTexLodEnabled=!1,requestAnimationFrame(()=>requestAnimationFrame(()=>{e.dynamicTexLodEnabled=!0,this.updateTextureLodsDynamic([e]).catch(()=>{})}))}collectPromotionTargets(e){const i=[],s=e??this.models;for(const r of s){if(!this.modelSupportsTextureLods(r))continue;const o=a=>{var c,d,u;const A=a.ownersByLod,l=a.activeTexLodByLod,h=Array.isArray(a.geometry)?a.geometry.length:0;for(let p=0;p<h;p++){let I=A==null?void 0:A.get(p),f=l==null?void 0:l.get(p);I&&I.length!==0||!a.object3d||a.activeLod!==p||(I=this.renderer.listMaterialOwners(a.object3d));const m=((c=a.material)==null?void 0:c[p])??((u=(d=a.geometry)==null?void 0:d[p])==null?void 0:u.replace(".xrgc","").replace("geometry","mat"))??`${a.id}|mat_${p}`;I&&I.length>0&&f!=null&&f>0&&i.push({model:r,node:a,lod:p,owners:I,matName:m,currentTexLod:f})}for(const p of a.children||[])o(p)};r.rootNode&&o(r.rootNode)}return i}async addModel(e){const i=((s=e).qualityPriority==null&&(s.qualityPriority=1),s.initialTrianglePercent==null&&(s.initialTrianglePercent=.1),s.castShadows==null&&(s.castShadows=!0),s.receiveShadows==null&&(s.receiveShadows=!0),s.forceDoubleSided==null&&(s.forceDoubleSided=!1),s.useAlpha==null&&(s.useAlpha=!0),s.useEmbeddedCollider==null&&(s.useEmbeddedCollider=!0),s.playAnimationAutomatically==null&&(s.playAnimationAutomatically=!0),s.hashCode==null&&(s.hashCode=""),s);var s;if(!i.pathOrUrl.endsWith(".sxrweb")&&!i.pathOrUrl.endsWith(".xrg")){const{exists:a,url:A,warning:l}=await this.checkModelExists(i.pathOrUrl,i.hashCode);if(!a){const h=`The URL ${i.pathOrUrl} does not contain a model.${l!=null?` ${l}`:""}`,c=new Error(h);if(i.onModelLoadError)return console.error(c),void i.onModelLoadError(c);throw c}i.pathOrUrl=A}const r=this.renderer.newGroup("Streaming Model Root Node");this.renderer.addToGroup(r,i.sceneGroup);const o=new oc(this,this.renderer,r,this.camera,this.options.cameraType,i);try{await o.init();const a=this.models.length;if(i.onModelLoaded&&(this.modelLoadedHandlers[a]=i.onModelLoaded),this.models.push(o),this.registerForPromotion(o),this.totalNumModels>0)this.models.length===this.totalNumModels&&await this.loadInitialModelsData();else if(this.totalNumModels!==-1){let A=0;for(let h=0;h<this.models.length-1;h++)A+=this.models[h].initialTrianglePercent;const l=A+o.initialTrianglePercent>1?Math.max(1-A,0):o.initialTrianglePercent;await this.loadInitialModelData(o,this.models.length-1,this.options.triangleBudget*l)}}catch(a){console.error(a),i.onModelLoadError&&a instanceof Error&&i.onModelLoadError(a)}}removeModel(e,i){if(!e)return void console.warn("Trying to remove wrong or empty object!");const s=this.models.find(o=>o.sceneGroup===e);if(!s||!(s.parentGroup||s.sceneGroup||s.rootNode||s.nodeDataSource))return void console.warn("Trying to remove wrong or empty object!");if(!(s.parentGroup&&s.sceneGroup&&s.rootNode&&s.nodeDataSource))return void setTimeout(()=>{this.removeModel(e,i)},1e3);if(s.isRemoving=!0,s.isUpdatingCount>0||s.isInitializing)return void setTimeout(()=>{this.removeModel(e,i)},1e3);this.removeAll(s.parentGroup,s.rootNode),s.dispose();const r=this.models.indexOf(s);this.models.splice(r,1),this.numModelsInitialDataLoaded--,this.clearModelPropertyCache(),i&&i(this.models.length===0)}update(){this.totalNumModels===-1&&this.models.length&&!this.initialBatchStarted&&(this.totalNumModels=this.models.length,this.initialBatchStarted=!0,this.loadInitialModelsData()),this.generateOperations()}setCamera(e){this.camera=e;for(const i of this.models)i.setCamera(e)}get numModels(){return this.models.length}setPausedInternal(e){if(Y.instance.isMinimizeCpuMode&&!this.hasAutoPlayAnimation&&(!e||!this.isUserInteracting&&this.isPausedExternally&&this.reachedTargetTree)&&e!==this.isPaused){this.renderer.setPaused&&this.renderer.setPaused(e),e||this.startRenderOperation();for(const i of this.models)i.setPaused(e);this.isPaused=e}}async getIosVramLimit(e){return e!==0?e:Ul()}getVramLimit(e,i){return i?e!==-1?PA(.85*e):-1:PA(e)}getVramUsage(e=!1){let i=0,s=0;if(!e&&this.renderer.getVramUsage)({meshes:i,textures:s}=this.renderer.getVramUsage());else{i=this.meshesSize;for(const r of this.models)s+=r.texturesSize}return[i+s,i,s]}get modelsInitialDataLoaded(){return this.numModelsInitialDataLoaded>=this.numModels}generateOperations(){if(!this.camera||this.models.length===0||this.numModelsInitialDataLoaded===0||Xi()&&!this.modelsInitialDataLoaded||this.highlightedNodeSoloed)return;const e=this.cameraHasMoved();if(this.currentDownloadSize<4194304&&(!this.modelsInitialDataLoaded||e||!this.reachedTargetTree)&&(this.lastGeneratedOperations==null||Date.now()-this.lastGeneratedOperations>500)||this.logCurrentTree||this.logOptimalTree){this.lastGeneratedOperations=Date.now();const i=[];for(const s of this.models)s.isRemoving||s.isInitializing||(s.clearCache(),i.push(s.rootNode));if(i.length>0){let s,r;[s,r]=Fo(this.renderer,i,this.boundingBox,this.camera,this.options.cameraType,this.screenAspectRatio,this.options);let o=0;const a=[];for(const c of s){const[d,u]=Uo(c.modelNode,this.options);a.push(d),o+=u}const A=[];let l=0;for(const c of s)Ho(a[l],c,A,this.options),l++;const h=this.hardVramLimit!==-1&&this.getVramUsage()[0]>this.hardVramLimit;(function(c,d){d?c.sort((u,p)=>p.typePriority-u.typePriority||u.triangleDifferenceScore-p.triangleDifferenceScore||p.priorityScore-u.priorityScore):c.sort((u,p)=>p.typePriority-u.typePriority||p.triangleDifferenceScore-u.triangleDifferenceScore||p.priorityScore-u.priorityScore)})(A,o>this.options.triangleBudget||h);for(let c=0;c<A.length&&this.numOperationsDownloading<3;c++){const d=A[c];this.processingOperationIds.has(d.id)||d.isLocked||h&&d.type!==Bt.Add&&!(h&&d.triangleDifference<=0)||(this.processingOperationIds.add(d.id),this.downloadOperation(d),this.numOperationsDownloading++)}this.reachedTargetTree=A.length===0,this.reachedTargetTree&&!this.sentInitiallyReachedTargetTreeEvent&&(this.dispatchEvent(new Event("initially-reached-target-tree")),this.sentInitiallyReachedTargetTreeEvent=!0),this.options.removeHiddenNodeMesh&&this.removeOrphanedOcclusionObject3ds()}}else if(e)for(const i of this.models)i.isRemoving||i.isInitializing||i.clearCache(!0)}async downloadOperation(e){for(const i of e.nodesToRemove)i.modelNode.lock(),i.modelNode.pendingRemoval=!0;try{e.model.isUpdatingCount++,this.currentDownloadSize+=e.downloadSize;const i=new Map,s=new Map;for(const o of e.nodesToAdd){e.model;const a=o.modelNode,A=o.lod,l=this.pickInitialTexTier(a,A),h=`${a.id}|${A}`;i.set(h,l),s.has(l)||s.set(l,[]),s.get(l).push(o)}const r={};for(const[o,a]of s){const A=await e.model.nodeDataSource.downloadNodeData(a,0,o);Object.assign(r,A)}e.texTierByNode=i,e.nodeData=r,this.currentDownloadSize-=e.downloadSize,this.renderQueue.push(e)}catch(i){console.error(`Failed to download node data: ${i}`),this.currentDownloadSize-=e.downloadSize,this.processingOperationIds.delete(e.id)}this.numOperationsDownloading--}async renderOperation(){var i;if(this.renderQueue.length>0){const s=this.renderQueue.shift();if(!s)return;this.triangleCount+=s.triangleDifference;const r=s.model;if(!r.isRemoving){const o=[],a=[];for(const l of s.nodesToAdd){const h=l.modelNode,c=this.createGpuQuery(h),d=`${h.id}|${l.lod}`,u=((i=s.texTierByNode)==null?void 0:i.get(d))??0;o.push(r.nodeDataSource.createMesh(h,s.nodeData,this.options,this.camera,a,c,u))}await Promise.all(o);const A=new Set(s.nodesToAdd.map(l=>l.id));for(const l of s.nodesToRemove)this.removeMeshFromScene(l,!A.has(l.id)),l.modelNode.activeLod=-1;for(const l of a)l.node.object3d=l.object3d,l.occlusionObject3d&&!l.node.occlusionObject3d&&(l.node.object3d.psAddedOcclusionObject3d=!0),l.node.occlusionObject3d=l.occlusionObject3d;for(const l of s.nodesToAdd){const h=l.modelNode;this.addMeshToScene(h),h.activeLod=l.lod,h.lastGeomSwapAt=performance&&performance.now?performance.now():Date.now()}this.reachedSoftMemoryLimit?Y.instance.logOperations&&this.hardVramLimit!==-1&&this.getVramUsage()[0]>this.hardVramLimit&&console.log(`%cSurpassed hard memory limit (${Un(this.hardVramLimit)})`,"font-weight: bold; color: #c91818"):this.softVramLimit!==-1&&this.getVramUsage()[0]>this.softVramLimit&&(this.reachedSoftMemoryLimit=!0,this.options.triangleBudget>this.triangleCount&&(this.options.triangleBudget=this.triangleCount,Y.instance.logOperations&&console.log(`Reduced triangle budget to ${gt(this.options.triangleBudget)} because soft memory limit was reached (${Un(this.softVramLimit)})`)));for(const l of s.nodesToRemove)l.modelNode.unlock()}this.processingOperationIds.delete(s.id),r.isUpdatingCount--}const e=this.renderQueue.length>0?0:25;this.updateTextureLodsDynamic().catch(s=>console.warn(s)),setTimeout(()=>this.renderOperation(),e)}removeOrphanedOcclusionObject3ds(){const e=[];for(const i of this.nodesWithOphanedOcclusionObject3ds.values())!i.object3d&&i.occlusionObject3d&&i.isFCHidden&&(this.renderer.removeFromGroup(i.occlusionObject3d,i.effectiveParentGroup,!1),this.renderer.disposeObject3d(i.occlusionObject3d),i.occlusionObject3d=null,e.push(i.id));for(const i of e)this.nodesWithOphanedOcclusionObject3ds.delete(i)}addMeshToScene(e){const i=e.effectiveParentGroup,s=e.object3d;if(s){const r=this.renderer.getChildren(i).filter(o=>o.psNode===e&&!o.psIsOcclusionMesh);for(const o of r)this.renderer.removeFromGroup(o,i,!1),o!==s&&this.disposeObject3d(o,!1);this.renderer.addToGroup(s,i),this.meshesSize+=this.renderer.getObject3dSizeInBytes(s),s.psOcclusionObject3d&&s.psAddedOcclusionObject3d&&(this.meshesSize+=this.renderer.getObject3dSizeInBytes(s.psOcclusionObject3d),s.psAddedOcclusionObject3d=!1)}}removeMeshFromScene(e,i){const s=e.modelNode;s.model.nodeDataSource.releaseNodeData(e);const r=s.effectiveParentGroup,o=this.renderer.getChildren(r).filter(l=>l.psNode===s&&!l.psIsOcclusionMesh),a=this.includeOcclusionObject3d(s),A=i&&a;for(const l of o)this.renderer.removeFromGroup(l,r,A),this.disposeObject3d(l,A);s.object3d=null,A?s.occlusionObject3d=null:a||this.nodesWithOphanedOcclusionObject3ds.set(s.id,s),s.pendingRemoval=!1}includeOcclusionObject3d(e){return!this.options.removeHiddenNodeMesh||this.options.removeHiddenNodeMesh&&e.isFCHidden}removeAll(e,i){if(i.children)for(const r of i.children)this.removeAll(e,r);const s=i.object3d;s&&(this.renderer.removeFromGroup(s,i.effectiveParentGroup,!0),this.disposeObject3d(s,!0),i.object3d=null,i.occlusionObject3d=null)}disposeObject3d(e,i){if(this.meshesSize-=this.renderer.getObject3dSizeInBytes(e),i&&e.psOcclusionObject3d&&(this.meshesSize-=this.renderer.getObject3dSizeInBytes(e.psOcclusionObject3d)),i){const s=e,r=s.psOcclusionObject3d;if(r){const o=s.psGpuQueryData;o&&(o.query&&this.renderer.deleteGpuQuery(o.query),s.psGpuQueryData=void 0),this.renderer.disposeObject3d(r),s.psOcclusionObject3d=void 0}}else{const s=e.psGpuQueryData;s&&(s.displayObject3d=void 0)}this.renderer.disposeObject3d(e)}initOcclusionCulling(){return!!this.renderer.initializeOcclusionCulling&&(this.occlusionQueryInterval=this.options.occlusionQueryFrequency===0?0:1/this.options.occlusionQueryFrequency*1e3,this.renderer.initializeOcclusionCulling(this.camera,this.occlusionQueryInterval))}createGpuQuery(e){if(!this.options.useOcclusionCulling||e.hasSkeleton)return;if(e.occlusionObject3d!=null)return e.occlusionObject3d.psGpuQueryData;const i=Math.random()*this.occlusionQueryInterval,s=this.renderer.createGpuQuery();return s?{inProgress:!1,query:s,node:e,queryInterval:this.occlusionQueryInterval,queryTimestampOffset:i}:void 0}cameraHasMoved(){const e=new P(this.renderer.getPosition(this.camera)),i=new P(this.renderer.getDirection(this.camera));let s=!0;return this.prevCameraPosition!=null&&(s=!e.equals(this.prevCameraPosition)),s||this.prevCameraDirection==null||(s=!i.equals(this.prevCameraDirection)),this.prevCameraPosition=e,this.prevCameraDirection=i,s}async loadInitialModelsData(){const e=[];let i=0;for(const s of this.models)e.push(s.initialTrianglePercent),i+=s.initialTrianglePercent;if(i>1)for(let s=0;s<e.length;s++)e[s]=e[s]/i;for(const[s,r]of this.models.entries())try{const o=e[s]!=null?e[s]:r.initialTrianglePercent;await this.loadInitialModelData(r,s,this.options.triangleBudget*o)}catch(o){console.error(o),r.onModelLoadError!=null&&o instanceof Error&&r.onModelLoadError(o)}}async loadInitialModelData(e,i,s){if(this.modelsWithInitialData.has(e))return;this.modelsWithInitialData.add(e);const r=this.renderer.getPosition(e.sceneGroup);this.boundingBox==null?this.boundingBox=e.rootNode.boundingBox.clone(r):this.boundingBox.add(e.rootNode.boundingBox,r);const o=e.rootNode.collider;Y.instance.logRootFiles&&o!==void 0&&!e.useEmbeddedCollider&&console.log("useEmbeddedCollider is set to false for model even though it has an embedded collider");let a=!(!e.useEmbeddedCollider||!o)&&this.renderer.supportsColliders;const A=e.rootNode.animation;if(a||A){const d=await e.nodeDataSource.downloadNodeDataLod([e.rootNode]);a&&this.renderer.addCollider&&e.addCollider(d[o]),A&&(await e.addAnimations(d[A].animation.buffer),Y.instance.logRootFiles&&console.log("Downloaded embedded animation data"))}const l=Zi()?-1:s,[h,{triangleCount:c}]=Fo(this.renderer,[e.rootNode],this.boundingBox,this.camera,this.options.cameraType,this.screenAspectRatio,this.options,0,l);if(Y.instance.logInitialTrees&&Y.instance.logOptimalTree&&FA(h,"Initial Optimal Tree",this.options,!1),h.length>0){this.initialTriangleCount+=c,this.initialTriangleCount>this.options.triangleBudget&&console.warn(`After the initial loading of the model the current triangle count of ${gt(this.initialTriangleCount)} is greater than the triangle budget. You might consider increasing the triangle budget.`);const d=this.getLeafNodeLods(h[0],!this.options.removeHiddenNodeMesh),u=await e.nodeDataSource.downloadNodeData(d,0,"worst"),p=[],I=new Set;for(const f of d){I.add(f.lod);const m=f.modelNode;p.push(e.nodeDataSource.createMesh(m,u,this.options,this.camera,void 0,this.createGpuQuery(m),"worst"))}await Promise.all(p);for(const f of d){const m=f.modelNode;this.addMeshToScene(m),m.activeLod=f.lod}if(this.notifyMiniReady(e),Y.instance.logInitialTrees&&Y.instance.logCurrentTree){const[f,m]=Uo(h[0].modelNode,this.options);FA([f],"Initial Current Tree",this.options,!0)}}if(e.enableAnimation(),e.isInitializing=!1,this.numModelsInitialDataLoaded++,this.clearModelPropertyCache(),Y.instance.logInitialModelDataLoaded&&console.log(`Downloaded initial model data (${this.numModelsInitialDataLoaded}${this.totalNumModels>0?`/${this.totalNumModels}`:""}, tris: ${gt(c)}/${gt(this.initialTriangleCount)})`),this.modelLoadedHandlers[i]){const d=this.numModelsInitialDataLoaded>=this.totalNumModels;if(e.isAnimated){const u=e.calculateBoundingBox();this.modelLoadedHandlers[i](u.center,u.halfExtents,a,d,e.isAnimated,e)}else this.modelLoadedHandlers[i](e.rootNode.boundingBox.center,e.rootNode.boundingBox.halfExtents,a,d,e.isAnimated,e)}this.dispatchEvent(new Event("model-loaded"))}getLeafNodeLods(e,i,s=[]){return e.children&&e.children.length!==0?e.children.forEach(r=>this.getLeafNodeLods(r,i,s)):!i&&e.isHidden||s.push(new zt(e.modelNode,e.lod)),s}async checkModelExists(e,i){e.endsWith("/")||(e+="/");let s=e+"model.xrg",{warning:r}=await new ds(s,this.renderer,i).fetchHttpHeader();return r==null?{exists:!0,url:s}:(s=e+"model.sxrweb",{warning:r}=await new ds(s,this.renderer,i).fetchHttpHeader(),r==null?{exists:!0,url:s}:{exists:!1,url:"",warning:r})}getScreenAspectRatio(){this.renderer.screenWidth&&this.renderer.screenHeight&&(this.screenAspectRatio=this.renderer.screenWidth/this.renderer.screenHeight)}toggleColliderVisualization(){if(this.renderer.visualizeCollider){this.isColliderVisable=!this.isColliderVisable;for(const e of this.models)this.renderer.visualizeCollider(this.isColliderVisable,e.parentGroup)}}get playCanvasApp(){return this.renderer.app}clearModelPropertyCache(){this._hasAnimation=null,this._hasAutoPlayAnimation=null}}class _d{constructor(t,e,i){g(this,"skeleton");g(this,"skeletonInstance");g(this,"rootBone");g(this,"commonRoot");this.skeleton=t,this.rootBone=e,this.commonRoot=i}}function Gd(n,t,e){let i;if(typeof n=="number")n>=0&&n<e.length&&(i=e[n]);else if(i=t.get(n),!(i||(s=n,isNaN(Number(s))||typeof s!="number"&&isNaN(parseFloat(s))))){const r=parseInt(n);r>=0&&r<e.length&&(i=e[r])}var s;return i||console.warn(`Polygon Streaming: Couldn't find embedded animation with name or index: ${n}`),i}function Ld(n,t=0){const e=new Float32Array(72*n.length),i=(s=36*n.length)<=65536?new Uint16Array(s):new Uint32Array(s);var s;const r=new Float32Array(72*n.length),o=[[0,0,1],[-1,0,0],[0,0,-1],[1,0,0],[0,-1,0],[0,1,0]],a=[0,1,3,0,3,2,4,5,7,4,7,6,8,9,11,8,11,10,12,13,15,12,15,14,16,17,19,16,19,18,20,21,23,20,23,22];let A=0;for(const l of n){const h=l.minX-t,c=l.minY-t,d=l.minZ-t,u=l.maxX+t,p=l.maxY+t,I=l.maxZ+t,f=72*A;e[f+0]=h,e[f+1]=c,e[f+2]=I,e[f+3]=u,e[f+4]=c,e[f+5]=I,e[f+6]=h,e[f+7]=p,e[f+8]=I,e[f+9]=u,e[f+10]=p,e[f+11]=I,e[f+12]=h,e[f+13]=c,e[f+14]=d,e[f+15]=h,e[f+16]=c,e[f+17]=I,e[f+18]=h,e[f+19]=p,e[f+20]=d,e[f+21]=h,e[f+22]=p,e[f+23]=I,e[f+24]=u,e[f+25]=c,e[f+26]=d,e[f+27]=h,e[f+28]=c,e[f+29]=d,e[f+30]=u,e[f+31]=p,e[f+32]=d,e[f+33]=h,e[f+34]=p,e[f+35]=d,e[f+36]=u,e[f+37]=c,e[f+38]=I,e[f+39]=u,e[f+40]=c,e[f+41]=d,e[f+42]=u,e[f+43]=p,e[f+44]=I,e[f+45]=u,e[f+46]=p,e[f+47]=d,e[f+48]=h,e[f+49]=c,e[f+50]=d,e[f+51]=u,e[f+52]=c,e[f+53]=d,e[f+54]=h,e[f+55]=c,e[f+56]=I,e[f+57]=u,e[f+58]=c,e[f+59]=I,e[f+60]=h,e[f+61]=p,e[f+62]=I,e[f+63]=u,e[f+64]=p,e[f+65]=I,e[f+66]=h,e[f+67]=p,e[f+68]=d,e[f+69]=u,e[f+70]=p,e[f+71]=d;for(let m=0;m<a.length;m++)i[36*A+m]=24*A+a[m];for(let m=0;m<o.length;m++)for(let x=0;x<4;x++)for(let E=0;E<3;E++)r[f+12*m+3*x+E]=o[m][E];A++}return{positions:e,indices:i,normals:r}}class vd{constructor(t=4){this.pool=t,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0,this.workerCreator=null}_initWorker(t){if(!this.workers[t]){const e=this.workerCreator();e.addEventListener("message",this._onMessage.bind(this,t)),this.workers[t]=e}}_getIdleWorker(){for(let t=0;t<this.pool;t++)if(!(this.workerStatus&1<<t))return t;return-1}_onMessage(t,e){const i=this.workersResolve[t];if(i&&i(e),this.queue.length){const{resolve:s,msg:r,transfer:o}=this.queue.shift();this.workersResolve[t]=s,this.workers[t].postMessage(r,o)}else this.workerStatus^=1<<t}setWorkerCreator(t){this.workerCreator=t}setWorkerLimit(t){this.pool=t}postMessage(t,e){return new Promise(i=>{const s=this._getIdleWorker();s!==-1?(this._initWorker(s),this.workerStatus|=1<<s,this.workersResolve[s]=i,this.workers[s].postMessage(t,e)):this.queue.push({resolve:i,msg:t,transfer:e})})}dispose(){this.workers.forEach(t=>t.terminate()),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}const zA=9,XA=15,ZA=16,HA=22,KA=37,WA=43,OA=76,YA=83,VA=97,JA=100,qA=103,jA=109,Rd=131,Td=132,Dd=133,kd=134,Nd=137,Fd=138,Ud=141,Pd=142,zd=145,Xd=146,$A=148,tl=152,Zd=157,Hd=158,el=165,nl=166,er=1000066e3;class Kd{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=0,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:0,descriptorBlockSize: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:[]}],this.keyValue={},this.globalData=null}}class Dn{constructor(t,e,i,s){this._dataView=void 0,this._littleEndian=void 0,this._offset=void 0,this._dataView=new DataView(t.buffer,t.byteOffset+e,i),this._littleEndian=s,this._offset=0}_nextUint8(){const t=this._dataView.getUint8(this._offset);return this._offset+=1,t}_nextUint16(){const t=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,t}_nextUint32(){const t=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,t}_nextUint64(){const t=this._dataView.getUint32(this._offset,this._littleEndian)+4294967296*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,t}_nextInt32(){const t=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,t}_nextUint8Array(t){const e=new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+this._offset,t);return this._offset+=t,e}_skip(t){return this._offset+=t,this}_scan(t,e){e===void 0&&(e=0);const i=this._offset;let s=0;for(;this._dataView.getUint8(this._offset)!==e&&s<t;)s++,this._offset++;return s<t&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+i,s)}}const ut=[171,75,84,88,32,50,48,187,13,10,26,10];function il(n){return new TextDecoder().decode(n)}let nr,qt,ir;const sr={env:{emscripten_notify_memory_growth:function(n){ir=new Uint8Array(qt.exports.memory.buffer)}}};class Wd{init(){return nr||(nr=typeof fetch<"u"?fetch("data:application/wasm;base64,"+sl).then(t=>t.arrayBuffer()).then(t=>WebAssembly.instantiate(t,sr)).then(this._init):WebAssembly.instantiate(Buffer.from(sl,"base64"),sr).then(this._init),nr)}_init(t){qt=t.instance,sr.env.emscripten_notify_memory_growth(0)}decode(t,e=0){if(!qt)throw new Error("ZSTDDecoder: Await .init() before decoding.");const i=t.byteLength,s=qt.exports.malloc(i);ir.set(t,s),e=e||Number(qt.exports.ZSTD_findDecompressedSize(s,i));const r=qt.exports.malloc(e),o=qt.exports.ZSTD_decompress(r,e,s,i),a=ir.slice(r,r+o);return qt.exports.free(s),qt.exports.free(r),a}}const sl="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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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",rr=new WeakMap;let or,ar=0;class _t extends C.Loader{constructor(t){super(t),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new vd,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(t){return this.transcoderPath=t,this}setWorkerLimit(t){return this.workerPool.setWorkerLimit(t),this}async detectSupportAsync(t){return this.workerConfig={astcSupported:await t.hasFeatureAsync("texture-compression-astc"),astcHDRSupported:!1,etc1Supported:await t.hasFeatureAsync("texture-compression-etc1"),etc2Supported:await t.hasFeatureAsync("texture-compression-etc2"),dxtSupported:await t.hasFeatureAsync("texture-compression-bc"),bptcSupported:await t.hasFeatureAsync("texture-compression-bptc"),pvrtcSupported:await t.hasFeatureAsync("texture-compression-pvrtc")},this}detectSupport(t){return t.isWebGPURenderer===!0?this.workerConfig={astcSupported:t.hasFeature("texture-compression-astc"),astcHDRSupported:!1,etc1Supported:t.hasFeature("texture-compression-etc1"),etc2Supported:t.hasFeature("texture-compression-etc2"),dxtSupported:t.hasFeature("texture-compression-bc"),bptcSupported:t.hasFeature("texture-compression-bptc"),pvrtcSupported:t.hasFeature("texture-compression-pvrtc")}:this.workerConfig={astcSupported:t.extensions.has("WEBGL_compressed_texture_astc"),astcHDRSupported:t.extensions.has("WEBGL_compressed_texture_astc")&&t.extensions.get("WEBGL_compressed_texture_astc").getSupportedProfiles().includes("hdr"),etc1Supported:t.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:t.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:t.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:t.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:t.extensions.has("WEBGL_compressed_texture_pvrtc")||t.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},this}init(){if(!this.transcoderPending){const t=new C.FileLoader(this.manager);t.setPath(this.transcoderPath),t.setWithCredentials(this.withCredentials);const e=t.loadAsync("basis_transcoder.js"),i=new C.FileLoader(this.manager);i.setPath(this.transcoderPath),i.setResponseType("arraybuffer"),i.setWithCredentials(this.withCredentials);const s=i.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([e,s]).then(([r,o])=>{const a=_t.BasisWorker.toString(),A=["/* constants */","let _EngineFormat = "+JSON.stringify(_t.EngineFormat),"let _EngineType = "+JSON.stringify(_t.EngineType),"let _TranscoderFormat = "+JSON.stringify(_t.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(_t.BasisFormat),"/* basis_transcoder.js */",r,"/* worker */",a.substring(a.indexOf("{")+1,a.lastIndexOf("}"))].join(`
|
|
14
|
+
`);this.workerSourceURL=URL.createObjectURL(new Blob([A])),this.transcoderBinary=o,this.workerPool.setWorkerCreator(()=>{const l=new Worker(this.workerSourceURL),h=this.transcoderBinary.slice(0);return l.postMessage({type:"init",config:this.workerConfig,transcoderBinary:h},[h]),l})}),ar>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),ar++}return this.transcoderPending}load(t,e,i,s){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const r=new C.FileLoader(this.manager);r.setPath(this.path),r.setCrossOrigin(this.crossOrigin),r.setWithCredentials(this.withCredentials),r.setResponseType("arraybuffer"),r.load(t,o=>{this.parse(o,e,s)},i,s)}parse(t,e,i){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");if(rr.has(t))return rr.get(t).promise.then(e).catch(i);this._createTexture(t).then(s=>e?e(s):null).catch(i)}_createTextureFrom(t,e){const{type:i,error:s,data:{faces:r,width:o,height:a,format:A,type:l,dfdFlags:h}}=t;if(i==="error")return Promise.reject(s);let c;if(e.faceCount===6)c=new C.CompressedCubeTexture(r,A,l);else{const d=r[0].mipmaps;c=e.layerCount>1?new C.CompressedArrayTexture(d,o,a,e.layerCount,A,l):new C.CompressedTexture(d,o,a,A,l)}return c.minFilter=r[0].mipmaps.length===1?C.LinearFilter:C.LinearMipmapLinearFilter,c.magFilter=C.LinearFilter,c.generateMipmaps=!1,c.needsUpdate=!0,c.colorSpace=rl(e),c.premultiplyAlpha=!!(1&h),c}async _createTexture(t,e={}){const i=function(a){const A=new Uint8Array(a.buffer,a.byteOffset,ut.length);if(A[0]!==ut[0]||A[1]!==ut[1]||A[2]!==ut[2]||A[3]!==ut[3]||A[4]!==ut[4]||A[5]!==ut[5]||A[6]!==ut[6]||A[7]!==ut[7]||A[8]!==ut[8]||A[9]!==ut[9]||A[10]!==ut[10]||A[11]!==ut[11])throw new Error("Missing KTX 2.0 identifier.");const l=new Kd,h=17*Uint32Array.BYTES_PER_ELEMENT,c=new Dn(a,ut.length,h,!0);l.vkFormat=c._nextUint32(),l.typeSize=c._nextUint32(),l.pixelWidth=c._nextUint32(),l.pixelHeight=c._nextUint32(),l.pixelDepth=c._nextUint32(),l.layerCount=c._nextUint32(),l.faceCount=c._nextUint32();const d=c._nextUint32();l.supercompressionScheme=c._nextUint32();const u=c._nextUint32(),p=c._nextUint32(),I=c._nextUint32(),f=c._nextUint32(),m=c._nextUint64(),x=c._nextUint64(),E=new Dn(a,ut.length+h,3*d*8,!0);for(let O=0;O<d;O++)l.levels.push({levelData:new Uint8Array(a.buffer,a.byteOffset+E._nextUint64(),E._nextUint64()),uncompressedByteLength:E._nextUint64()});const M=new Dn(a,u,p,!0),L={vendorId:M._skip(4)._nextUint16(),descriptorType:M._nextUint16(),versionNumber:M._nextUint16(),descriptorBlockSize:M._nextUint16(),colorModel:M._nextUint8(),colorPrimaries:M._nextUint8(),transferFunction:M._nextUint8(),flags:M._nextUint8(),texelBlockDimension:[M._nextUint8(),M._nextUint8(),M._nextUint8(),M._nextUint8()],bytesPlane:[M._nextUint8(),M._nextUint8(),M._nextUint8(),M._nextUint8(),M._nextUint8(),M._nextUint8(),M._nextUint8(),M._nextUint8()],samples:[]},B=(L.descriptorBlockSize/4-6)/4;for(let O=0;O<B;O++){const nt={bitOffset:M._nextUint16(),bitLength:M._nextUint8(),channelType:M._nextUint8(),samplePosition:[M._nextUint8(),M._nextUint8(),M._nextUint8(),M._nextUint8()],sampleLower:-1/0,sampleUpper:1/0};64&nt.channelType?(nt.sampleLower=M._nextInt32(),nt.sampleUpper=M._nextInt32()):(nt.sampleLower=M._nextUint32(),nt.sampleUpper=M._nextUint32()),L.samples[O]=nt}l.dataFormatDescriptor.length=0,l.dataFormatDescriptor.push(L);const w=new Dn(a,I,f,!0);for(;w._offset<f;){const O=w._nextUint32(),nt=w._scan(O),at=il(nt);if(l.keyValue[at]=w._nextUint8Array(O-nt.byteLength-1),at.match(/^ktx/i)){const Lt=il(l.keyValue[at]);l.keyValue[at]=Lt.substring(0,Lt.lastIndexOf("\0"))}w._skip(O%4?4-O%4:0)}if(x<=0)return l;const y=new Dn(a,m,x,!0),Q=y._nextUint16(),b=y._nextUint16(),v=y._nextUint32(),T=y._nextUint32(),N=y._nextUint32(),R=y._nextUint32(),D=[];for(let O=0;O<d;O++)D.push({imageFlags:y._nextUint32(),rgbSliceByteOffset:y._nextUint32(),rgbSliceByteLength:y._nextUint32(),alphaSliceByteOffset:y._nextUint32(),alphaSliceByteLength:y._nextUint32()});const U=m+y._offset,z=U+v,K=z+T,V=K+N,W=new Uint8Array(a.buffer,a.byteOffset+U,v),$=new Uint8Array(a.buffer,a.byteOffset+z,T),X=new Uint8Array(a.buffer,a.byteOffset+K,N),xt=new Uint8Array(a.buffer,a.byteOffset+V,R);return l.globalData={endpointCount:Q,selectorCount:b,imageDescs:D,endpointsData:W,selectorsData:$,tablesData:X,extendedData:xt},l}(new Uint8Array(t)),s=i.vkFormat===er&&i.dataFormatDescriptor[0].colorModel===167;if(!(i.vkFormat===0||s&&!this.workerConfig.astcHDRSupported))return async function(a){const{vkFormat:A}=a;if(Ar[A]===void 0)throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");let l;a.supercompressionScheme===2&&(or||(or=new Promise(async d=>{const u=new Wd;await u.init(),d(u)})),l=await or);const h=[];for(let d=0;d<a.levels.length;d++){const u=Math.max(1,a.pixelWidth>>d),p=Math.max(1,a.pixelHeight>>d),I=a.pixelDepth?Math.max(1,a.pixelDepth>>d):0,f=a.levels[d];let m,x;if(a.supercompressionScheme===0)m=f.levelData;else{if(a.supercompressionScheme!==2)throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");m=l.decode(f.levelData,f.uncompressedByteLength)}x=lr[A]===C.FloatType?new Float32Array(m.buffer,m.byteOffset,m.byteLength/Float32Array.BYTES_PER_ELEMENT):lr[A]===C.HalfFloatType?new Uint16Array(m.buffer,m.byteOffset,m.byteLength/Uint16Array.BYTES_PER_ELEMENT):m,h.push({data:x,width:u,height:p,depth:I})}let c;if(Od.has(Ar[A]))c=a.pixelDepth===0?new C.DataTexture(h[0].data,a.pixelWidth,a.pixelHeight):new C.Data3DTexture(h[0].data,a.pixelWidth,a.pixelHeight,a.pixelDepth);else{if(a.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");c=new C.CompressedTexture(h,a.pixelWidth,a.pixelHeight),c.minFilter=h.length===1?C.LinearFilter:C.LinearMipmapLinearFilter,c.magFilter=C.LinearFilter}return c.mipmaps=h,c.type=lr[A],c.format=Ar[A],c.colorSpace=rl(a),c.needsUpdate=!0,Promise.resolve(c)}(i);const r=e,o=this.init().then(()=>this.workerPool.postMessage({type:"transcode",buffer:t,taskConfig:r},[t])).then(a=>this._createTextureFrom(a.data,i));return rr.set(t,{promise:o}),o}dispose(){this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),ar--}}_t.BasisFormat={ETC1S:0,UASTC:1,UASTC_HDR:2},_t.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},_t.EngineFormat={RGBAFormat:C.RGBAFormat,RGBA_ASTC_4x4_Format:C.RGBA_ASTC_4x4_Format,RGB_BPTC_UNSIGNED_Format:C.RGB_BPTC_UNSIGNED_Format,RGBA_BPTC_Format:C.RGBA_BPTC_Format,RGBA_ETC2_EAC_Format:C.RGBA_ETC2_EAC_Format,RGBA_PVRTC_4BPPV1_Format:C.RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT5_Format:C.RGBA_S3TC_DXT5_Format,RGB_ETC1_Format:C.RGB_ETC1_Format,RGB_ETC2_Format:C.RGB_ETC2_Format,RGB_PVRTC_4BPPV1_Format:C.RGB_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT1_Format:C.RGBA_S3TC_DXT1_Format},_t.EngineType={UnsignedByteType:C.UnsignedByteType,HalfFloatType:C.HalfFloatType,FloatType:C.FloatType},_t.BasisWorker=function(){let n,t,e;const i=_EngineFormat,s=_EngineType,r=_TranscoderFormat,o=_BasisFormat;self.addEventListener("message",function(c){const d=c.data;switch(d.type){case"init":n=d.config,u=d.transcoderBinary,t=new Promise(p=>{e={wasmBinary:u,onRuntimeInitialized:p},BASIS(e)}).then(()=>{e.initializeBasis(),e.KTX2File===void 0&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")});break;case"transcode":t.then(()=>{try{const{faces:p,buffers:I,width:f,height:m,hasAlpha:x,format:E,type:M,dfdFlags:L}=function(B){const w=new e.KTX2File(new Uint8Array(B));function y(){w.close(),w.delete()}if(!w.isValid())throw y(),new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");let Q;if(w.isUASTC())Q=o.UASTC;else if(w.isETC1S())Q=o.ETC1S;else{if(!w.isHDR())throw new Error("THREE.KTX2Loader: Unknown Basis encoding");Q=o.UASTC_HDR}const b=w.getWidth(),v=w.getHeight(),T=w.getLayers()||1,N=w.getLevels(),R=w.getFaces(),D=w.getHasAlpha(),U=w.getDFDFlags(),{transcoderFormat:z,engineFormat:K,engineType:V}=function(X,xt,O,nt){const at=A[X];for(let Lt=0;Lt<at.length;Lt++){const Qt=at[Lt];if(!(Qt.if&&!n[Qt.if])&&Qt.basisFormat.includes(X)&&!(nt&&Qt.transcoderFormat.length<2)&&!(Qt.needsPowerOfTwo&&(!l(xt)||!l(O))))return{transcoderFormat:Qt.transcoderFormat[nt?1:0],engineFormat:Qt.engineFormat[nt?1:0],engineType:Qt.engineType[0]}}throw new Error("THREE.KTX2Loader: Failed to identify transcoding target.")}(Q,b,v,D);if(!b||!v||!N)throw y(),new Error("THREE.KTX2Loader: Invalid texture");if(!w.startTranscoding())throw y(),new Error("THREE.KTX2Loader: .startTranscoding failed");const W=[],$=[];for(let X=0;X<R;X++){const xt=[];for(let O=0;O<N;O++){const nt=[];let at,Lt;for(let ce=0;ce<T;ce++){const ue=w.getImageLevelInfo(O,ce,X);X!==0||O!==0||ce!==0||ue.origWidth%4==0&&ue.origHeight%4==0||console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),N>1?(at=ue.origWidth,Lt=ue.origHeight):(at=ue.width,Lt=ue.height);let de=new Uint8Array(w.getImageTranscodedSizeInBytes(O,ce,0,z));const Er=w.transcodeImage(de,O,ce,X,z,0,-1,-1);if(V===s.HalfFloatType&&(de=new Uint16Array(de.buffer,de.byteOffset,de.byteLength/Uint16Array.BYTES_PER_ELEMENT)),!Er)throw y(),new Error("THREE.KTX2Loader: .transcodeImage failed.");nt.push(de)}const Qt=h(nt);xt.push({data:Qt,width:at,height:Lt}),$.push(Qt.buffer)}W.push({mipmaps:xt,width:b,height:v,format:K,type:V})}return y(),{faces:W,buffers:$,width:b,height:v,hasAlpha:D,dfdFlags:U,format:K,type:V}}(d.buffer);self.postMessage({type:"transcode",id:d.id,data:{faces:p,width:f,height:m,hasAlpha:x,format:E,type:M,dfdFlags:L}},I)}catch(p){console.error(p),self.postMessage({type:"error",id:d.id,error:p.message})}})}var u});const a=[{if:"astcSupported",basisFormat:[o.UASTC],transcoderFormat:[r.ASTC_4x4,r.ASTC_4x4],engineFormat:[i.RGBA_ASTC_4x4_Format,i.RGBA_ASTC_4x4_Format],engineType:[s.UnsignedByteType],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[r.BC7_M5,r.BC7_M5],engineFormat:[i.RGBA_BPTC_Format,i.RGBA_BPTC_Format],engineType:[s.UnsignedByteType],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[r.BC1,r.BC3],engineFormat:[i.RGBA_S3TC_DXT1_Format,i.RGBA_S3TC_DXT5_Format],engineType:[s.UnsignedByteType],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[r.ETC1,r.ETC2],engineFormat:[i.RGB_ETC2_Format,i.RGBA_ETC2_EAC_Format],engineType:[s.UnsignedByteType],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[r.ETC1],engineFormat:[i.RGB_ETC1_Format],engineType:[s.UnsignedByteType],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[r.PVRTC1_4_RGB,r.PVRTC1_4_RGBA],engineFormat:[i.RGB_PVRTC_4BPPV1_Format,i.RGBA_PVRTC_4BPPV1_Format],engineType:[s.UnsignedByteType],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0},{if:"bptcSupported",basisFormat:[o.UASTC_HDR],transcoderFormat:[r.BC6H],engineFormat:[i.RGB_BPTC_UNSIGNED_Format],engineType:[s.HalfFloatType],priorityHDR:1,needsPowerOfTwo:!1},{basisFormat:[o.ETC1S,o.UASTC],transcoderFormat:[r.RGBA32,r.RGBA32],engineFormat:[i.RGBAFormat,i.RGBAFormat],engineType:[s.UnsignedByteType,s.UnsignedByteType],priorityETC1S:100,priorityUASTC:100,needsPowerOfTwo:!1},{basisFormat:[o.UASTC_HDR],transcoderFormat:[r.RGBA_HALF],engineFormat:[i.RGBAFormat],engineType:[s.HalfFloatType],priorityHDR:100,needsPowerOfTwo:!1}],A={[o.ETC1S]:a.filter(c=>c.basisFormat.includes(o.ETC1S)).sort((c,d)=>c.priorityUASTC-d.priorityUASTC),[o.UASTC]:a.filter(c=>c.basisFormat.includes(o.UASTC)).sort((c,d)=>c.priorityUASTC-d.priorityUASTC),[o.UASTC_HDR]:a.filter(c=>c.basisFormat.includes(o.UASTC_HDR)).sort((c,d)=>c.priorityHDR-d.priorityHDR)};function l(c){return c<=2||!(c&c-1)&&c!==0}function h(c){if(c.length===1)return c[0];let d=0;for(let I=0;I<c.length;I++)d+=c[I].byteLength;const u=new Uint8Array(d);let p=0;for(let I=0;I<c.length;I++){const f=c[I];u.set(f,p),p+=f.byteLength}return u}};const Od=new Set([C.RGBAFormat,C.RGFormat,C.RedFormat]),Ar={[jA]:C.RGBAFormat,[VA]:C.RGBAFormat,[KA]:C.RGBAFormat,[WA]:C.RGBAFormat,[qA]:C.RGFormat,[YA]:C.RGFormat,[ZA]:C.RGFormat,[HA]:C.RGFormat,[JA]:C.RedFormat,[OA]:C.RedFormat,[XA]:C.RedFormat,[zA]:C.RedFormat,[$A]:C.RGB_ETC2_Format,[tl]:C.RGBA_ETC2_EAC_Format,[er]:C.RGBA_ASTC_4x4_Format,[Hd]:C.RGBA_ASTC_4x4_Format,[Zd]:C.RGBA_ASTC_4x4_Format,[nl]:C.RGBA_ASTC_6x6_Format,[el]:C.RGBA_ASTC_6x6_Format,[Dd]:C.RGBA_S3TC_DXT1_Format,[kd]:C.RGBA_S3TC_DXT1_Format,[Rd]:C.RGB_S3TC_DXT1_Format,[Td]:C.RGB_S3TC_DXT1_Format,[Fd]:C.RGBA_S3TC_DXT3_Format,[Nd]:C.RGBA_S3TC_DXT3_Format,[Pd]:C.RGBA_S3TC_DXT5_Format,[Ud]:C.RGBA_S3TC_DXT5_Format,[Xd]:C.RGBA_BPTC_Format,[zd]:C.RGBA_BPTC_Format},lr={[jA]:C.FloatType,[VA]:C.HalfFloatType,[KA]:C.UnsignedByteType,[WA]:C.UnsignedByteType,[qA]:C.FloatType,[YA]:C.HalfFloatType,[ZA]:C.UnsignedByteType,[HA]:C.UnsignedByteType,[JA]:C.FloatType,[OA]:C.HalfFloatType,[XA]:C.UnsignedByteType,[zA]:C.UnsignedByteType,[$A]:C.UnsignedByteType,[tl]:C.UnsignedByteType,[er]:C.HalfFloatType,[nl]:C.UnsignedByteType,[el]:C.UnsignedByteType};function rl(n){const t=n.dataFormatDescriptor[0];return t.colorPrimaries===1?t.transferFunction===2?C.SRGBColorSpace:C.LinearSRGBColorSpace:t.colorPrimaries===10?t.transferFunction===2?"display-p3":"display-p3-linear":(t.colorPrimaries===0||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${t.colorPrimaries}"`),C.NoColorSpace)}function hr(n,t){var e=cr();return(hr=function(i,s){return e[i-=145]})(n,t)}function cr(){var n=["1050411pZfCav","6535488KdQdlP","528EVVLsg","Color","6941iqEgqn","36QZKbUa","Vector2","6659548sEcnsl","42010VPJNGG","119925azpdte","3506824nNlQXv"];return(cr=function(){return n})()}function ur(n){return new _.Vector3(n.x,n.y,n.z)}function Je(n){return new _[hr(154)](n.r,n.g,n.b)}function ol(n,t){if(t===C.TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),n;if(t===C.TriangleFanDrawMode||t===C.TriangleStripDrawMode){let e=n.getIndex();if(e===null){const o=[],a=n.getAttribute("position");if(a===void 0)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),n;for(let A=0;A<a.count;A++)o.push(A);n.setIndex(o),e=n.getIndex()}const i=e.count-2,s=[];if(t===C.TriangleFanDrawMode)for(let o=1;o<=i;o++)s.push(e.getX(0)),s.push(e.getX(o)),s.push(e.getX(o+1));else for(let o=0;o<i;o++)o%2==0?(s.push(e.getX(o)),s.push(e.getX(o+1)),s.push(e.getX(o+2))):(s.push(e.getX(o+2)),s.push(e.getX(o+1)),s.push(e.getX(o)));s.length/3!==i&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const r=n.clone();return r.setIndex(s),r.clearGroups(),r}return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",t),n}(function(n){for(var t=hr,e=n();;)try{if(parseInt(t(155))/1*(parseInt(t(145))/2)+parseInt(t(151))/3+parseInt(t(150))/4+-parseInt(t(148))/5*(parseInt(t(153))/6)+-parseInt(t(147))/7+parseInt(t(152))/8+parseInt(t(149))/9===491302)break;e.push(e.shift())}catch{e.push(e.shift())}})(cr);class al extends C.Loader{constructor(t){super(t),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(e){return new jd(e)}),this.register(function(e){return new $d(e)}),this.register(function(e){return new Ag(e)}),this.register(function(e){return new lg(e)}),this.register(function(e){return new hg(e)}),this.register(function(e){return new eg(e)}),this.register(function(e){return new ng(e)}),this.register(function(e){return new ig(e)}),this.register(function(e){return new sg(e)}),this.register(function(e){return new qd(e)}),this.register(function(e){return new rg(e)}),this.register(function(e){return new tg(e)}),this.register(function(e){return new ag(e)}),this.register(function(e){return new og(e)}),this.register(function(e){return new Vd(e)}),this.register(function(e){return new cg(e)}),this.register(function(e){return new ug(e)})}load(t,e,i,s){const r=this;let o;if(this.resourcePath!=="")o=this.resourcePath;else if(this.path!==""){const l=C.LoaderUtils.extractUrlBase(t);o=C.LoaderUtils.resolveURL(l,this.path)}else o=C.LoaderUtils.extractUrlBase(t);this.manager.itemStart(t);const a=function(l){s?s(l):console.error(l),r.manager.itemError(t),r.manager.itemEnd(t)},A=new C.FileLoader(this.manager);A.setPath(this.path),A.setResponseType("arraybuffer"),A.setRequestHeader(this.requestHeader),A.setWithCredentials(this.withCredentials),A.load(t,function(l){try{r.parse(l,o,function(h){e(h),r.manager.itemEnd(t)},a)}catch(h){a(h)}},i,a)}setDRACOLoader(t){return this.dracoLoader=t,this}setKTX2Loader(t){return this.ktx2Loader=t,this}setMeshoptDecoder(t){return this.meshoptDecoder=t,this}register(t){return this.pluginCallbacks.indexOf(t)===-1&&this.pluginCallbacks.push(t),this}unregister(t){return this.pluginCallbacks.indexOf(t)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(t),1),this}parse(t,e,i,s){let r;const o={},a={},A=new TextDecoder;if(typeof t=="string")r=JSON.parse(t);else if(t instanceof ArrayBuffer)if(A.decode(new Uint8Array(t,0,4))===Al){try{o[F.KHR_BINARY_GLTF]=new pg(t)}catch(h){return void(s&&s(h))}r=JSON.parse(o[F.KHR_BINARY_GLTF].content)}else r=JSON.parse(A.decode(t));else r=t;if(r.asset===void 0||r.asset.version[0]<2)return void(s&&s(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")));const l=new _g(r,{path:e||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});l.fileLoader.setRequestHeader(this.requestHeader);for(let h=0;h<this.pluginCallbacks.length;h++){const c=this.pluginCallbacks[h](l);c.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),a[c.name]=c,o[c.name]=!0}if(r.extensionsUsed)for(let h=0;h<r.extensionsUsed.length;++h){const c=r.extensionsUsed[h],d=r.extensionsRequired||[];switch(c){case F.KHR_MATERIALS_UNLIT:o[c]=new Jd;break;case F.KHR_DRACO_MESH_COMPRESSION:o[c]=new fg(r,this.dracoLoader);break;case F.KHR_TEXTURE_TRANSFORM:o[c]=new mg;break;case F.KHR_MESH_QUANTIZATION:o[c]=new Ig;break;default:d.indexOf(c)>=0&&a[c]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+c+'".')}}l.setExtensions(o),l.setPlugins(a),l.parse(i,s)}parseAsync(t,e){const i=this;return new Promise(function(s,r){i.parse(t,e,s,r)})}}function Yd(){let n={};return{get:function(t){return n[t]},add:function(t,e){n[t]=e},remove:function(t){delete n[t]},removeAll:function(){n={}}}}const F={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 Vd{constructor(t){this.parser=t,this.name=F.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const t=this.parser,e=this.parser.json.nodes||[];for(let i=0,s=e.length;i<s;i++){const r=e[i];r.extensions&&r.extensions[this.name]&&r.extensions[this.name].light!==void 0&&t._addNodeRef(this.cache,r.extensions[this.name].light)}}_loadLight(t){const e=this.parser,i="light:"+t;let s=e.cache.get(i);if(s)return s;const r=e.json,o=((r.extensions&&r.extensions[this.name]||{}).lights||[])[t];let a;const A=new C.Color(16777215);o.color!==void 0&&A.setRGB(o.color[0],o.color[1],o.color[2],C.LinearSRGBColorSpace);const l=o.range!==void 0?o.range:0;switch(o.type){case"directional":a=new C.DirectionalLight(A),a.target.position.set(0,0,-1),a.add(a.target);break;case"point":a=new C.PointLight(A),a.distance=l;break;case"spot":a=new C.SpotLight(A),a.distance=l,o.spot=o.spot||{},o.spot.innerConeAngle=o.spot.innerConeAngle!==void 0?o.spot.innerConeAngle:0,o.spot.outerConeAngle=o.spot.outerConeAngle!==void 0?o.spot.outerConeAngle:Math.PI/4,a.angle=o.spot.outerConeAngle,a.penumbra=1-o.spot.innerConeAngle/o.spot.outerConeAngle,a.target.position.set(0,0,-1),a.add(a.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+o.type)}return a.position.set(0,0,0),jt(a,o),o.intensity!==void 0&&(a.intensity=o.intensity),a.name=e.createUniqueName(o.name||"light_"+t),s=Promise.resolve(a),e.cache.add(i,s),s}getDependency(t,e){if(t==="light")return this._loadLight(e)}createNodeAttachment(t){const e=this,i=this.parser,s=i.json.nodes[t],r=(s.extensions&&s.extensions[this.name]||{}).light;return r===void 0?null:this._loadLight(r).then(function(o){return i._getNodeRef(e.cache,r,o)})}}class Jd{constructor(){this.name=F.KHR_MATERIALS_UNLIT}getMaterialType(){return C.MeshBasicMaterial}extendParams(t,e,i){const s=[];t.color=new C.Color(1,1,1),t.opacity=1;const r=e.pbrMetallicRoughness;if(r){if(Array.isArray(r.baseColorFactor)){const o=r.baseColorFactor;t.color.setRGB(o[0],o[1],o[2],C.LinearSRGBColorSpace),t.opacity=o[3]}r.baseColorTexture!==void 0&&s.push(i.assignTexture(t,"map",r.baseColorTexture,C.SRGBColorSpace))}return Promise.all(s)}}class qd{constructor(t){this.parser=t,this.name=F.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(t,e){const i=this.parser.json.materials[t];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const s=i.extensions[this.name].emissiveStrength;return s!==void 0&&(e.emissiveIntensity=s),Promise.resolve()}}class jd{constructor(t){this.parser=t,this.name=F.KHR_MATERIALS_CLEARCOAT}getMaterialType(t){const e=this.parser.json.materials[t];return e.extensions&&e.extensions[this.name]?C.MeshPhysicalMaterial:null}extendMaterialParams(t,e){const i=this.parser,s=i.json.materials[t];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],o=s.extensions[this.name];if(o.clearcoatFactor!==void 0&&(e.clearcoat=o.clearcoatFactor),o.clearcoatTexture!==void 0&&r.push(i.assignTexture(e,"clearcoatMap",o.clearcoatTexture)),o.clearcoatRoughnessFactor!==void 0&&(e.clearcoatRoughness=o.clearcoatRoughnessFactor),o.clearcoatRoughnessTexture!==void 0&&r.push(i.assignTexture(e,"clearcoatRoughnessMap",o.clearcoatRoughnessTexture)),o.clearcoatNormalTexture!==void 0&&(r.push(i.assignTexture(e,"clearcoatNormalMap",o.clearcoatNormalTexture)),o.clearcoatNormalTexture.scale!==void 0)){const a=o.clearcoatNormalTexture.scale;e.clearcoatNormalScale=new C.Vector2(a,a)}return Promise.all(r)}}class $d{constructor(t){this.parser=t,this.name=F.KHR_MATERIALS_DISPERSION}getMaterialType(t){const e=this.parser.json.materials[t];return e.extensions&&e.extensions[this.name]?C.MeshPhysicalMaterial:null}extendMaterialParams(t,e){const i=this.parser.json.materials[t];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const s=i.extensions[this.name];return e.dispersion=s.dispersion!==void 0?s.dispersion:0,Promise.resolve()}}class tg{constructor(t){this.parser=t,this.name=F.KHR_MATERIALS_IRIDESCENCE}getMaterialType(t){const e=this.parser.json.materials[t];return e.extensions&&e.extensions[this.name]?C.MeshPhysicalMaterial:null}extendMaterialParams(t,e){const i=this.parser,s=i.json.materials[t];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],o=s.extensions[this.name];return o.iridescenceFactor!==void 0&&(e.iridescence=o.iridescenceFactor),o.iridescenceTexture!==void 0&&r.push(i.assignTexture(e,"iridescenceMap",o.iridescenceTexture)),o.iridescenceIor!==void 0&&(e.iridescenceIOR=o.iridescenceIor),e.iridescenceThicknessRange===void 0&&(e.iridescenceThicknessRange=[100,400]),o.iridescenceThicknessMinimum!==void 0&&(e.iridescenceThicknessRange[0]=o.iridescenceThicknessMinimum),o.iridescenceThicknessMaximum!==void 0&&(e.iridescenceThicknessRange[1]=o.iridescenceThicknessMaximum),o.iridescenceThicknessTexture!==void 0&&r.push(i.assignTexture(e,"iridescenceThicknessMap",o.iridescenceThicknessTexture)),Promise.all(r)}}class eg{constructor(t){this.parser=t,this.name=F.KHR_MATERIALS_SHEEN}getMaterialType(t){const e=this.parser.json.materials[t];return e.extensions&&e.extensions[this.name]?C.MeshPhysicalMaterial:null}extendMaterialParams(t,e){const i=this.parser,s=i.json.materials[t];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[];e.sheenColor=new C.Color(0,0,0),e.sheenRoughness=0,e.sheen=1;const o=s.extensions[this.name];if(o.sheenColorFactor!==void 0){const a=o.sheenColorFactor;e.sheenColor.setRGB(a[0],a[1],a[2],C.LinearSRGBColorSpace)}return o.sheenRoughnessFactor!==void 0&&(e.sheenRoughness=o.sheenRoughnessFactor),o.sheenColorTexture!==void 0&&r.push(i.assignTexture(e,"sheenColorMap",o.sheenColorTexture,C.SRGBColorSpace)),o.sheenRoughnessTexture!==void 0&&r.push(i.assignTexture(e,"sheenRoughnessMap",o.sheenRoughnessTexture)),Promise.all(r)}}class ng{constructor(t){this.parser=t,this.name=F.KHR_MATERIALS_TRANSMISSION}getMaterialType(t){const e=this.parser.json.materials[t];return e.extensions&&e.extensions[this.name]?C.MeshPhysicalMaterial:null}extendMaterialParams(t,e){const i=this.parser,s=i.json.materials[t];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],o=s.extensions[this.name];return o.transmissionFactor!==void 0&&(e.transmission=o.transmissionFactor),o.transmissionTexture!==void 0&&r.push(i.assignTexture(e,"transmissionMap",o.transmissionTexture)),Promise.all(r)}}class ig{constructor(t){this.parser=t,this.name=F.KHR_MATERIALS_VOLUME}getMaterialType(t){const e=this.parser.json.materials[t];return e.extensions&&e.extensions[this.name]?C.MeshPhysicalMaterial:null}extendMaterialParams(t,e){const i=this.parser,s=i.json.materials[t];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],o=s.extensions[this.name];e.thickness=o.thicknessFactor!==void 0?o.thicknessFactor:0,o.thicknessTexture!==void 0&&r.push(i.assignTexture(e,"thicknessMap",o.thicknessTexture)),e.attenuationDistance=o.attenuationDistance||1/0;const a=o.attenuationColor||[1,1,1];return e.attenuationColor=new C.Color().setRGB(a[0],a[1],a[2],C.LinearSRGBColorSpace),Promise.all(r)}}class sg{constructor(t){this.parser=t,this.name=F.KHR_MATERIALS_IOR}getMaterialType(t){const e=this.parser.json.materials[t];return e.extensions&&e.extensions[this.name]?C.MeshPhysicalMaterial:null}extendMaterialParams(t,e){const i=this.parser.json.materials[t];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const s=i.extensions[this.name];return e.ior=s.ior!==void 0?s.ior:1.5,Promise.resolve()}}class rg{constructor(t){this.parser=t,this.name=F.KHR_MATERIALS_SPECULAR}getMaterialType(t){const e=this.parser.json.materials[t];return e.extensions&&e.extensions[this.name]?C.MeshPhysicalMaterial:null}extendMaterialParams(t,e){const i=this.parser,s=i.json.materials[t];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],o=s.extensions[this.name];e.specularIntensity=o.specularFactor!==void 0?o.specularFactor:1,o.specularTexture!==void 0&&r.push(i.assignTexture(e,"specularIntensityMap",o.specularTexture));const a=o.specularColorFactor||[1,1,1];return e.specularColor=new C.Color().setRGB(a[0],a[1],a[2],C.LinearSRGBColorSpace),o.specularColorTexture!==void 0&&r.push(i.assignTexture(e,"specularColorMap",o.specularColorTexture,C.SRGBColorSpace)),Promise.all(r)}}class og{constructor(t){this.parser=t,this.name=F.EXT_MATERIALS_BUMP}getMaterialType(t){const e=this.parser.json.materials[t];return e.extensions&&e.extensions[this.name]?C.MeshPhysicalMaterial:null}extendMaterialParams(t,e){const i=this.parser,s=i.json.materials[t];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],o=s.extensions[this.name];return e.bumpScale=o.bumpFactor!==void 0?o.bumpFactor:1,o.bumpTexture!==void 0&&r.push(i.assignTexture(e,"bumpMap",o.bumpTexture)),Promise.all(r)}}class ag{constructor(t){this.parser=t,this.name=F.KHR_MATERIALS_ANISOTROPY}getMaterialType(t){const e=this.parser.json.materials[t];return e.extensions&&e.extensions[this.name]?C.MeshPhysicalMaterial:null}extendMaterialParams(t,e){const i=this.parser,s=i.json.materials[t];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],o=s.extensions[this.name];return o.anisotropyStrength!==void 0&&(e.anisotropy=o.anisotropyStrength),o.anisotropyRotation!==void 0&&(e.anisotropyRotation=o.anisotropyRotation),o.anisotropyTexture!==void 0&&r.push(i.assignTexture(e,"anisotropyMap",o.anisotropyTexture)),Promise.all(r)}}class Ag{constructor(t){this.parser=t,this.name=F.KHR_TEXTURE_BASISU}loadTexture(t){const e=this.parser,i=e.json,s=i.textures[t];if(!s.extensions||!s.extensions[this.name])return null;const r=s.extensions[this.name],o=e.options.ktx2Loader;if(!o){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 e.loadTextureImage(t,r.source,o)}}class lg{constructor(t){this.parser=t,this.name=F.EXT_TEXTURE_WEBP}loadTexture(t){const e=this.name,i=this.parser,s=i.json,r=s.textures[t];if(!r.extensions||!r.extensions[e])return null;const o=r.extensions[e],a=s.images[o.source];let A=i.textureLoader;if(a.uri){const l=i.options.manager.getHandler(a.uri);l!==null&&(A=l)}return i.loadTextureImage(t,o.source,A)}}class hg{constructor(t){this.parser=t,this.name=F.EXT_TEXTURE_AVIF}loadTexture(t){const e=this.name,i=this.parser,s=i.json,r=s.textures[t];if(!r.extensions||!r.extensions[e])return null;const o=r.extensions[e],a=s.images[o.source];let A=i.textureLoader;if(a.uri){const l=i.options.manager.getHandler(a.uri);l!==null&&(A=l)}return i.loadTextureImage(t,o.source,A)}}class cg{constructor(t){this.name=F.EXT_MESHOPT_COMPRESSION,this.parser=t}loadBufferView(t){const e=this.parser.json,i=e.bufferViews[t];if(i.extensions&&i.extensions[this.name]){const s=i.extensions[this.name],r=this.parser.getDependency("buffer",s.buffer),o=this.parser.options.meshoptDecoder;if(!o||!o.supported){if(e.extensionsRequired&&e.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return r.then(function(a){const A=s.byteOffset||0,l=s.byteLength||0,h=s.count,c=s.byteStride,d=new Uint8Array(a,A,l);return o.decodeGltfBufferAsync?o.decodeGltfBufferAsync(h,c,d,s.mode,s.filter).then(function(u){return u.buffer}):o.ready.then(function(){const u=new ArrayBuffer(h*c);return o.decodeGltfBuffer(new Uint8Array(u),h,c,d,s.mode,s.filter),u})})}return null}}class ug{constructor(t){this.name=F.EXT_MESH_GPU_INSTANCING,this.parser=t}createNodeMesh(t){const e=this.parser.json,i=e.nodes[t];if(!i.extensions||!i.extensions[this.name]||i.mesh===void 0)return null;const s=e.meshes[i.mesh];for(const A of s.primitives)if(A.mode!==Gt.TRIANGLES&&A.mode!==Gt.TRIANGLE_STRIP&&A.mode!==Gt.TRIANGLE_FAN&&A.mode!==void 0)return null;const r=i.extensions[this.name].attributes,o=[],a={};for(const A in r)o.push(this.parser.getDependency("accessor",r[A]).then(l=>(a[A]=l,a[A])));return o.length<1?null:(o.push(this.parser.createNodeMesh(t)),Promise.all(o).then(A=>{const l=A.pop(),h=l.isGroup?l.children:[l],c=A[0].count,d=[];for(const u of h){const p=new C.Matrix4,I=new C.Vector3,f=new C.Quaternion,m=new C.Vector3(1,1,1),x=new C.InstancedMesh(u.geometry,u.material,c);for(let E=0;E<c;E++)a.TRANSLATION&&I.fromBufferAttribute(a.TRANSLATION,E),a.ROTATION&&f.fromBufferAttribute(a.ROTATION,E),a.SCALE&&m.fromBufferAttribute(a.SCALE,E),x.setMatrixAt(E,p.compose(I,f,m));for(const E in a)if(E==="_COLOR_0"){const M=a[E];x.instanceColor=new C.InstancedBufferAttribute(M.array,M.itemSize,M.normalized)}else E!=="TRANSLATION"&&E!=="ROTATION"&&E!=="SCALE"&&u.geometry.setAttribute(E,a[E]);C.Object3D.prototype.copy.call(x,u),this.parser.assignFinalMaterial(x),d.push(x)}return l.isGroup?(l.clear(),l.add(...d),l):d[0]}))}}const Al="glTF",dg=1313821514,gg=5130562;class pg{constructor(t){this.name=F.KHR_BINARY_GLTF,this.content=null,this.body=null;const e=new DataView(t,0,12),i=new TextDecoder;if(this.header={magic:i.decode(new Uint8Array(t.slice(0,4))),version:e.getUint32(4,!0),length:e.getUint32(8,!0)},this.header.magic!==Al)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const s=this.header.length-12,r=new DataView(t,12);let o=0;for(;o<s;){const a=r.getUint32(o,!0);o+=4;const A=r.getUint32(o,!0);if(o+=4,A===dg){const l=new Uint8Array(t,12+o,a);this.content=i.decode(l)}else if(A===gg){const l=12+o;this.body=t.slice(l,l+a)}o+=a}if(this.content===null)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class fg{constructor(t,e){if(!e)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=F.KHR_DRACO_MESH_COMPRESSION,this.json=t,this.dracoLoader=e,this.dracoLoader.preload()}decodePrimitive(t,e){const i=this.json,s=this.dracoLoader,r=t.extensions[this.name].bufferView,o=t.extensions[this.name].attributes,a={},A={},l={};for(const h in o){const c=gr[h]||h.toLowerCase();a[c]=o[h]}for(const h in t.attributes){const c=gr[h]||h.toLowerCase();if(o[h]!==void 0){const d=i.accessors[t.attributes[h]],u=qe[d.componentType];l[c]=u.name,A[c]=d.normalized===!0}}return e.getDependency("bufferView",r).then(function(h){return new Promise(function(c,d){s.decodeDracoFile(h,function(u){for(const p in u.attributes){const I=u.attributes[p],f=A[p];f!==void 0&&(I.normalized=f)}c(u)},a,l,C.LinearSRGBColorSpace,d)})})}}class mg{constructor(){this.name=F.KHR_TEXTURE_TRANSFORM}extendTexture(t,e){return(e.texCoord!==void 0&&e.texCoord!==t.channel||e.offset!==void 0||e.rotation!==void 0||e.scale!==void 0)&&(t=t.clone(),e.texCoord!==void 0&&(t.channel=e.texCoord),e.offset!==void 0&&t.offset.fromArray(e.offset),e.rotation!==void 0&&(t.rotation=e.rotation),e.scale!==void 0&&t.repeat.fromArray(e.scale),t.needsUpdate=!0),t}}class Ig{constructor(){this.name=F.KHR_MESH_QUANTIZATION}}class ll extends C.Interpolant{constructor(t,e,i,s){super(t,e,i,s)}copySampleValue_(t){const e=this.resultBuffer,i=this.sampleValues,s=this.valueSize,r=t*s*3+s;for(let o=0;o!==s;o++)e[o]=i[r+o];return e}interpolate_(t,e,i,s){const r=this.resultBuffer,o=this.sampleValues,a=this.valueSize,A=2*a,l=3*a,h=s-e,c=(i-e)/h,d=c*c,u=d*c,p=t*l,I=p-l,f=-2*u+3*d,m=u-d,x=1-f,E=m-d+c;for(let M=0;M!==a;M++){const L=o[I+M+a],B=o[I+M+A]*h,w=o[p+M+a],y=o[p+M]*h;r[M]=x*L+E*B+f*w+m*y}return r}}const Cg=new C.Quaternion;class Bg extends ll{interpolate_(t,e,i,s){const r=super.interpolate_(t,e,i,s);return Cg.fromArray(r).normalize().toArray(r),r}}const Gt={FLOAT:5126,FLOAT_MAT3:35675,FLOAT_MAT4:35676,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,LINEAR:9729,REPEAT:10497,SAMPLER_2D:35678,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123},qe={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},hl={9728:C.NearestFilter,9729:C.LinearFilter,9984:C.NearestMipmapNearestFilter,9985:C.LinearMipmapNearestFilter,9986:C.NearestMipmapLinearFilter,9987:C.LinearMipmapLinearFilter},cl={33071:C.ClampToEdgeWrapping,33648:C.MirroredRepeatWrapping,10497:C.RepeatWrapping},dr={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},gr={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"},he={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},yg={CUBICSPLINE:void 0,LINEAR:C.InterpolateLinear,STEP:C.InterpolateDiscrete},Eg="OPAQUE",wg="MASK",xg="BLEND";function Qg(n){return n.DefaultMaterial===void 0&&(n.DefaultMaterial=new C.MeshStandardMaterial({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:C.FrontSide})),n.DefaultMaterial}function ve(n,t,e){for(const i in e.extensions)n[i]===void 0&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[i]=e.extensions[i])}function jt(n,t){t.extras!==void 0&&(typeof t.extras=="object"?Object.assign(n.userData,t.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+t.extras))}function Mg(n,t){if(n.updateMorphTargets(),t.weights!==void 0)for(let e=0,i=t.weights.length;e<i;e++)n.morphTargetInfluences[e]=t.weights[e];if(t.extras&&Array.isArray(t.extras.targetNames)){const e=t.extras.targetNames;if(n.morphTargetInfluences.length===e.length){n.morphTargetDictionary={};for(let i=0,s=e.length;i<s;i++)n.morphTargetDictionary[e[i]]=i}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function bg(n){let t;const e=n.extensions&&n.extensions[F.KHR_DRACO_MESH_COMPRESSION];if(t=e?"draco:"+e.bufferView+":"+e.indices+":"+pr(e.attributes):n.indices+":"+pr(n.attributes)+":"+n.mode,n.targets!==void 0)for(let i=0,s=n.targets.length;i<s;i++)t+=":"+pr(n.targets[i]);return t}function pr(n){let t="";const e=Object.keys(n).sort();for(let i=0,s=e.length;i<s;i++)t+=e[i]+":"+n[e[i]]+";";return t}function fr(n){switch(n){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.")}}const Sg=new C.Matrix4;class _g{constructor(t={},e={}){this.json=t,this.extensions={},this.plugins={},this.options=e,this.cache=new Yd,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,s=-1,r=!1,o=-1;if(typeof navigator<"u"){const a=navigator.userAgent;i=/^((?!chrome|android).)*safari/i.test(a)===!0;const A=a.match(/Version\/(\d+)/);s=i&&A?parseInt(A[1],10):-1,r=a.indexOf("Firefox")>-1,o=r?a.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>"u"||i&&s<17||r&&o<98?this.textureLoader=new C.TextureLoader(this.options.manager):this.textureLoader=new C.ImageBitmapLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new C.FileLoader(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(t){this.extensions=t}setPlugins(t){this.plugins=t}parse(t,e){const i=this,s=this.json,r=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(o){return o._markDefs&&o._markDefs()}),Promise.all(this._invokeAll(function(o){return o.beforeRoot&&o.beforeRoot()})).then(function(){return Promise.all([i.getDependencies("scene"),i.getDependencies("animation"),i.getDependencies("camera")])}).then(function(o){const a={scene:o[0][s.scene||0],scenes:o[0],animations:o[1],cameras:o[2],asset:s.asset,parser:i,userData:{}};return ve(r,a,s),jt(a,s),Promise.all(i._invokeAll(function(A){return A.afterRoot&&A.afterRoot(a)})).then(function(){for(const A of a.scenes)A.updateMatrixWorld();t(a)})}).catch(e)}_markDefs(){const t=this.json.nodes||[],e=this.json.skins||[],i=this.json.meshes||[];for(let s=0,r=e.length;s<r;s++){const o=e[s].joints;for(let a=0,A=o.length;a<A;a++)t[o[a]].isBone=!0}for(let s=0,r=t.length;s<r;s++){const o=t[s];o.mesh!==void 0&&(this._addNodeRef(this.meshCache,o.mesh),o.skin!==void 0&&(i[o.mesh].isSkinnedMesh=!0)),o.camera!==void 0&&this._addNodeRef(this.cameraCache,o.camera)}}_addNodeRef(t,e){e!==void 0&&(t.refs[e]===void 0&&(t.refs[e]=t.uses[e]=0),t.refs[e]++)}_getNodeRef(t,e,i){if(t.refs[e]<=1)return i;const s=i.clone(),r=(o,a)=>{const A=this.associations.get(o);A!=null&&this.associations.set(a,A);for(const[l,h]of o.children.entries())r(h,a.children[l])};return r(i,s),s.name+="_instance_"+t.uses[e]++,s}_invokeOne(t){const e=Object.values(this.plugins);e.push(this);for(let i=0;i<e.length;i++){const s=t(e[i]);if(s)return s}return null}_invokeAll(t){const e=Object.values(this.plugins);e.unshift(this);const i=[];for(let s=0;s<e.length;s++){const r=t(e[s]);r&&i.push(r)}return i}getDependency(t,e){const i=t+":"+e;let s=this.cache.get(i);if(!s){switch(t){case"scene":s=this.loadScene(e);break;case"node":s=this._invokeOne(function(r){return r.loadNode&&r.loadNode(e)});break;case"mesh":s=this._invokeOne(function(r){return r.loadMesh&&r.loadMesh(e)});break;case"accessor":s=this.loadAccessor(e);break;case"bufferView":s=this._invokeOne(function(r){return r.loadBufferView&&r.loadBufferView(e)});break;case"buffer":s=this.loadBuffer(e);break;case"material":s=this._invokeOne(function(r){return r.loadMaterial&&r.loadMaterial(e)});break;case"texture":s=this._invokeOne(function(r){return r.loadTexture&&r.loadTexture(e)});break;case"skin":s=this.loadSkin(e);break;case"animation":s=this._invokeOne(function(r){return r.loadAnimation&&r.loadAnimation(e)});break;case"camera":s=this.loadCamera(e);break;default:if(s=this._invokeOne(function(r){return r!=this&&r.getDependency&&r.getDependency(t,e)}),!s)throw new Error("Unknown type: "+t)}this.cache.add(i,s)}return s}getDependencies(t){let e=this.cache.get(t);if(!e){const i=this,s=this.json[t+(t==="mesh"?"es":"s")]||[];e=Promise.all(s.map(function(r,o){return i.getDependency(t,o)})),this.cache.add(t,e)}return e}loadBuffer(t){const e=this.json.buffers[t],i=this.fileLoader;if(e.type&&e.type!=="arraybuffer")throw new Error("THREE.GLTFLoader: "+e.type+" buffer type is not supported.");if(e.uri===void 0&&t===0)return Promise.resolve(this.extensions[F.KHR_BINARY_GLTF].body);const s=this.options;return new Promise(function(r,o){i.load(C.LoaderUtils.resolveURL(e.uri,s.path),r,void 0,function(){o(new Error('THREE.GLTFLoader: Failed to load buffer "'+e.uri+'".'))})})}loadBufferView(t){const e=this.json.bufferViews[t];return this.getDependency("buffer",e.buffer).then(function(i){const s=e.byteLength||0,r=e.byteOffset||0;return i.slice(r,r+s)})}loadAccessor(t){const e=this,i=this.json,s=this.json.accessors[t];if(s.bufferView===void 0&&s.sparse===void 0){const o=dr[s.type],a=qe[s.componentType],A=s.normalized===!0,l=new a(s.count*o);return Promise.resolve(new C.BufferAttribute(l,o,A))}const r=[];return s.bufferView!==void 0?r.push(this.getDependency("bufferView",s.bufferView)):r.push(null),s.sparse!==void 0&&(r.push(this.getDependency("bufferView",s.sparse.indices.bufferView)),r.push(this.getDependency("bufferView",s.sparse.values.bufferView))),Promise.all(r).then(function(o){const a=o[0],A=dr[s.type],l=qe[s.componentType],h=l.BYTES_PER_ELEMENT,c=h*A,d=s.byteOffset||0,u=s.bufferView!==void 0?i.bufferViews[s.bufferView].byteStride:void 0,p=s.normalized===!0;let I,f;if(u&&u!==c){const m=Math.floor(d/u),x="InterleavedBuffer:"+s.bufferView+":"+s.componentType+":"+m+":"+s.count;let E=e.cache.get(x);E||(I=new l(a,m*u,s.count*u/h),E=new C.InterleavedBuffer(I,u/h),e.cache.add(x,E)),f=new C.InterleavedBufferAttribute(E,A,d%u/h,p)}else I=a===null?new l(s.count*A):new l(a,d,s.count*A),f=new C.BufferAttribute(I,A,p);if(s.sparse!==void 0){const m=dr.SCALAR,x=qe[s.sparse.indices.componentType],E=s.sparse.indices.byteOffset||0,M=s.sparse.values.byteOffset||0,L=new x(o[1],E,s.sparse.count*m),B=new l(o[2],M,s.sparse.count*A);a!==null&&(f=new C.BufferAttribute(f.array.slice(),f.itemSize,f.normalized)),f.normalized=!1;for(let w=0,y=L.length;w<y;w++){const Q=L[w];if(f.setX(Q,B[w*A]),A>=2&&f.setY(Q,B[w*A+1]),A>=3&&f.setZ(Q,B[w*A+2]),A>=4&&f.setW(Q,B[w*A+3]),A>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}f.normalized=p}return f})}loadTexture(t){const e=this.json,i=this.options,s=e.textures[t].source,r=e.images[s];let o=this.textureLoader;if(r.uri){const a=i.manager.getHandler(r.uri);a!==null&&(o=a)}return this.loadTextureImage(t,s,o)}loadTextureImage(t,e,i){const s=this,r=this.json,o=r.textures[t],a=r.images[e],A=(a.uri||a.bufferView)+":"+o.sampler;if(this.textureCache[A])return this.textureCache[A];const l=this.loadImageSource(e,i).then(function(h){h.flipY=!1,h.name=o.name||a.name||"",h.name===""&&typeof a.uri=="string"&&a.uri.startsWith("data:image/")===!1&&(h.name=a.uri);const c=(r.samplers||{})[o.sampler]||{};return h.magFilter=hl[c.magFilter]||C.LinearFilter,h.minFilter=hl[c.minFilter]||C.LinearMipmapLinearFilter,h.wrapS=cl[c.wrapS]||C.RepeatWrapping,h.wrapT=cl[c.wrapT]||C.RepeatWrapping,h.generateMipmaps=!h.isCompressedTexture&&h.minFilter!==C.NearestFilter&&h.minFilter!==C.LinearFilter,s.associations.set(h,{textures:t}),h}).catch(function(){return null});return this.textureCache[A]=l,l}loadImageSource(t,e){const i=this,s=this.json,r=this.options;if(this.sourceCache[t]!==void 0)return this.sourceCache[t].then(c=>c.clone());const o=s.images[t],a=self.URL||self.webkitURL;let A=o.uri||"",l=!1;if(o.bufferView!==void 0)A=i.getDependency("bufferView",o.bufferView).then(function(c){l=!0;const d=new Blob([c],{type:o.mimeType});return A=a.createObjectURL(d),A});else if(o.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+t+" is missing URI and bufferView");const h=Promise.resolve(A).then(function(c){return new Promise(function(d,u){let p=d;e.isImageBitmapLoader===!0&&(p=function(I){const f=new C.Texture(I);f.needsUpdate=!0,d(f)}),e.load(C.LoaderUtils.resolveURL(c,r.path),p,void 0,u)})}).then(function(c){var d;return l===!0&&a.revokeObjectURL(A),jt(c,o),c.userData.mimeType=o.mimeType||((d=o.uri).search(/\.jpe?g($|\?)/i)>0||d.search(/^data\:image\/jpeg/)===0?"image/jpeg":d.search(/\.webp($|\?)/i)>0||d.search(/^data\:image\/webp/)===0?"image/webp":d.search(/\.ktx2($|\?)/i)>0||d.search(/^data\:image\/ktx2/)===0?"image/ktx2":"image/png"),c}).catch(function(c){throw console.error("THREE.GLTFLoader: Couldn't load texture",A),c});return this.sourceCache[t]=h,h}assignTexture(t,e,i,s){const r=this;return this.getDependency("texture",i.index).then(function(o){if(!o)return null;if(i.texCoord!==void 0&&i.texCoord>0&&((o=o.clone()).channel=i.texCoord),r.extensions[F.KHR_TEXTURE_TRANSFORM]){const a=i.extensions!==void 0?i.extensions[F.KHR_TEXTURE_TRANSFORM]:void 0;if(a){const A=r.associations.get(o);o=r.extensions[F.KHR_TEXTURE_TRANSFORM].extendTexture(o,a),r.associations.set(o,A)}}return s!==void 0&&(o.colorSpace=s),t[e]=o,o})}assignFinalMaterial(t){const e=t.geometry;let i=t.material;const s=e.attributes.tangent===void 0,r=e.attributes.color!==void 0,o=e.attributes.normal===void 0;if(t.isPoints){const a="PointsMaterial:"+i.uuid;let A=this.cache.get(a);A||(A=new C.PointsMaterial,C.Material.prototype.copy.call(A,i),A.color.copy(i.color),A.map=i.map,A.sizeAttenuation=!1,this.cache.add(a,A)),i=A}else if(t.isLine){const a="LineBasicMaterial:"+i.uuid;let A=this.cache.get(a);A||(A=new C.LineBasicMaterial,C.Material.prototype.copy.call(A,i),A.color.copy(i.color),A.map=i.map,this.cache.add(a,A)),i=A}if(s||r||o){let a="ClonedMaterial:"+i.uuid+":";s&&(a+="derivative-tangents:"),r&&(a+="vertex-colors:"),o&&(a+="flat-shading:");let A=this.cache.get(a);A||(A=i.clone(),r&&(A.vertexColors=!0),o&&(A.flatShading=!0),s&&(A.normalScale&&(A.normalScale.y*=-1),A.clearcoatNormalScale&&(A.clearcoatNormalScale.y*=-1)),this.cache.add(a,A),this.associations.set(A,this.associations.get(i))),i=A}t.material=i}getMaterialType(){return C.MeshStandardMaterial}loadMaterial(t){const e=this,i=this.json,s=this.extensions,r=i.materials[t];let o;const a={},A=[];if((r.extensions||{})[F.KHR_MATERIALS_UNLIT]){const h=s[F.KHR_MATERIALS_UNLIT];o=h.getMaterialType(),A.push(h.extendParams(a,r,e))}else{const h=r.pbrMetallicRoughness||{};if(a.color=new C.Color(1,1,1),a.opacity=1,Array.isArray(h.baseColorFactor)){const c=h.baseColorFactor;a.color.setRGB(c[0],c[1],c[2],C.LinearSRGBColorSpace),a.opacity=c[3]}h.baseColorTexture!==void 0&&A.push(e.assignTexture(a,"map",h.baseColorTexture,C.SRGBColorSpace)),a.metalness=h.metallicFactor!==void 0?h.metallicFactor:1,a.roughness=h.roughnessFactor!==void 0?h.roughnessFactor:1,h.metallicRoughnessTexture!==void 0&&(A.push(e.assignTexture(a,"metalnessMap",h.metallicRoughnessTexture)),A.push(e.assignTexture(a,"roughnessMap",h.metallicRoughnessTexture))),o=this._invokeOne(function(c){return c.getMaterialType&&c.getMaterialType(t)}),A.push(Promise.all(this._invokeAll(function(c){return c.extendMaterialParams&&c.extendMaterialParams(t,a)})))}r.doubleSided===!0&&(a.side=C.DoubleSide);const l=r.alphaMode||Eg;if(l===xg?(a.transparent=!0,a.depthWrite=!1):(a.transparent=!1,l===wg&&(a.alphaTest=r.alphaCutoff!==void 0?r.alphaCutoff:.5)),r.normalTexture!==void 0&&o!==C.MeshBasicMaterial&&(A.push(e.assignTexture(a,"normalMap",r.normalTexture)),a.normalScale=new C.Vector2(1,1),r.normalTexture.scale!==void 0)){const h=r.normalTexture.scale;a.normalScale.set(h,h)}if(r.occlusionTexture!==void 0&&o!==C.MeshBasicMaterial&&(A.push(e.assignTexture(a,"aoMap",r.occlusionTexture)),r.occlusionTexture.strength!==void 0&&(a.aoMapIntensity=r.occlusionTexture.strength)),r.emissiveFactor!==void 0&&o!==C.MeshBasicMaterial){const h=r.emissiveFactor;a.emissive=new C.Color().setRGB(h[0],h[1],h[2],C.LinearSRGBColorSpace)}return r.emissiveTexture!==void 0&&o!==C.MeshBasicMaterial&&A.push(e.assignTexture(a,"emissiveMap",r.emissiveTexture,C.SRGBColorSpace)),Promise.all(A).then(function(){const h=new o(a);return r.name&&(h.name=r.name),jt(h,r),e.associations.set(h,{materials:t}),r.extensions&&ve(s,h,r),h})}createUniqueName(t){const e=C.PropertyBinding.sanitizeNodeName(t||"");return e in this.nodeNamesUsed?e+"_"+ ++this.nodeNamesUsed[e]:(this.nodeNamesUsed[e]=0,e)}loadGeometries(t){const e=this,i=this.extensions,s=this.primitiveCache;function r(a){return i[F.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(a,e).then(function(A){return ul(A,a,e)})}const o=[];for(let a=0,A=t.length;a<A;a++){const l=t[a],h=bg(l),c=s[h];if(c)o.push(c.promise);else{let d;d=l.extensions&&l.extensions[F.KHR_DRACO_MESH_COMPRESSION]?r(l):ul(new C.BufferGeometry,l,e),s[h]={primitive:l,promise:d},o.push(d)}}return Promise.all(o)}loadMesh(t){const e=this,i=this.json,s=this.extensions,r=i.meshes[t],o=r.primitives,a=[];for(let A=0,l=o.length;A<l;A++){const h=o[A].material===void 0?Qg(this.cache):this.getDependency("material",o[A].material);a.push(h)}return a.push(e.loadGeometries(o)),Promise.all(a).then(function(A){const l=A.slice(0,A.length-1),h=A[A.length-1],c=[];for(let u=0,p=h.length;u<p;u++){const I=h[u],f=o[u];let m;const x=l[u];if(f.mode===Gt.TRIANGLES||f.mode===Gt.TRIANGLE_STRIP||f.mode===Gt.TRIANGLE_FAN||f.mode===void 0)m=r.isSkinnedMesh===!0?new C.SkinnedMesh(I,x):new C.Mesh(I,x),m.isSkinnedMesh===!0&&m.normalizeSkinWeights(),f.mode===Gt.TRIANGLE_STRIP?m.geometry=ol(m.geometry,C.TriangleStripDrawMode):f.mode===Gt.TRIANGLE_FAN&&(m.geometry=ol(m.geometry,C.TriangleFanDrawMode));else if(f.mode===Gt.LINES)m=new C.LineSegments(I,x);else if(f.mode===Gt.LINE_STRIP)m=new C.Line(I,x);else if(f.mode===Gt.LINE_LOOP)m=new C.LineLoop(I,x);else{if(f.mode!==Gt.POINTS)throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+f.mode);m=new C.Points(I,x)}Object.keys(m.geometry.morphAttributes).length>0&&Mg(m,r),m.name=e.createUniqueName(r.name||"mesh_"+t),jt(m,r),f.extensions&&ve(s,m,f),e.assignFinalMaterial(m),c.push(m)}for(let u=0,p=c.length;u<p;u++)e.associations.set(c[u],{meshes:t,primitives:u});if(c.length===1)return r.extensions&&ve(s,c[0],r),c[0];const d=new C.Group;r.extensions&&ve(s,d,r),e.associations.set(d,{meshes:t});for(let u=0,p=c.length;u<p;u++)d.add(c[u]);return d})}loadCamera(t){let e;const i=this.json.cameras[t],s=i[i.type];if(s)return i.type==="perspective"?e=new C.PerspectiveCamera(C.MathUtils.radToDeg(s.yfov),s.aspectRatio||1,s.znear||1,s.zfar||2e6):i.type==="orthographic"&&(e=new C.OrthographicCamera(-s.xmag,s.xmag,s.ymag,-s.ymag,s.znear,s.zfar)),i.name&&(e.name=this.createUniqueName(i.name)),jt(e,i),Promise.resolve(e);console.warn("THREE.GLTFLoader: Missing camera parameters.")}loadSkin(t){const e=this.json.skins[t],i=[];for(let s=0,r=e.joints.length;s<r;s++)i.push(this._loadNodeShallow(e.joints[s]));return e.inverseBindMatrices!==void 0?i.push(this.getDependency("accessor",e.inverseBindMatrices)):i.push(null),Promise.all(i).then(function(s){const r=s.pop(),o=s,a=[],A=[];for(let l=0,h=o.length;l<h;l++){const c=o[l];if(c){a.push(c);const d=new C.Matrix4;r!==null&&d.fromArray(r.array,16*l),A.push(d)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',e.joints[l])}return new C.Skeleton(a,A)})}loadAnimation(t){const e=this.json,i=this,s=e.animations[t],r=s.name?s.name:"animation_"+t,o=[],a=[],A=[],l=[],h=[];for(let c=0,d=s.channels.length;c<d;c++){const u=s.channels[c],p=s.samplers[u.sampler],I=u.target,f=I.node,m=s.parameters!==void 0?s.parameters[p.input]:p.input,x=s.parameters!==void 0?s.parameters[p.output]:p.output;I.node!==void 0&&(o.push(this.getDependency("node",f)),a.push(this.getDependency("accessor",m)),A.push(this.getDependency("accessor",x)),l.push(p),h.push(I))}return Promise.all([Promise.all(o),Promise.all(a),Promise.all(A),Promise.all(l),Promise.all(h)]).then(function(c){const d=c[0],u=c[1],p=c[2],I=c[3],f=c[4],m=[];for(let x=0,E=d.length;x<E;x++){const M=d[x],L=u[x],B=p[x],w=I[x],y=f[x];if(M===void 0)continue;M.updateMatrix&&M.updateMatrix();const Q=i._createAnimationTracks(M,L,B,w,y);if(Q)for(let b=0;b<Q.length;b++)m.push(Q[b])}return new C.AnimationClip(r,void 0,m)})}createNodeMesh(t){const e=this.json,i=this,s=e.nodes[t];return s.mesh===void 0?null:i.getDependency("mesh",s.mesh).then(function(r){const o=i._getNodeRef(i.meshCache,s.mesh,r);return s.weights!==void 0&&o.traverse(function(a){if(a.isMesh)for(let A=0,l=s.weights.length;A<l;A++)a.morphTargetInfluences[A]=s.weights[A]}),o})}loadNode(t){const e=this,i=this.json.nodes[t],s=e._loadNodeShallow(t),r=[],o=i.children||[];for(let A=0,l=o.length;A<l;A++)r.push(e.getDependency("node",o[A]));const a=i.skin===void 0?Promise.resolve(null):e.getDependency("skin",i.skin);return Promise.all([s,Promise.all(r),a]).then(function(A){const l=A[0],h=A[1],c=A[2];c!==null&&l.traverse(function(d){d.isSkinnedMesh&&d.bind(c,Sg)});for(let d=0,u=h.length;d<u;d++)l.add(h[d]);return l})}_loadNodeShallow(t){const e=this.json,i=this.extensions,s=this;if(this.nodeCache[t]!==void 0)return this.nodeCache[t];const r=e.nodes[t],o=r.name?s.createUniqueName(r.name):"",a=[],A=s._invokeOne(function(l){return l.createNodeMesh&&l.createNodeMesh(t)});return A&&a.push(A),r.camera!==void 0&&a.push(s.getDependency("camera",r.camera).then(function(l){return s._getNodeRef(s.cameraCache,r.camera,l)})),s._invokeAll(function(l){return l.createNodeAttachment&&l.createNodeAttachment(t)}).forEach(function(l){a.push(l)}),this.nodeCache[t]=Promise.all(a).then(function(l){let h;if(h=r.isBone===!0?new C.Bone:l.length>1?new C.Group:l.length===1?l[0]:new C.Object3D,h!==l[0])for(let c=0,d=l.length;c<d;c++)h.add(l[c]);if(r.name&&(h.userData.name=r.name,h.name=o),jt(h,r),r.extensions&&ve(i,h,r),r.matrix!==void 0){const c=new C.Matrix4;c.fromArray(r.matrix),h.applyMatrix4(c)}else r.translation!==void 0&&h.position.fromArray(r.translation),r.rotation!==void 0&&h.quaternion.fromArray(r.rotation),r.scale!==void 0&&h.scale.fromArray(r.scale);if(s.associations.has(h)){if(r.mesh!==void 0&&s.meshCache.refs[r.mesh]>1){const c=s.associations.get(h);s.associations.set(h,{...c})}}else s.associations.set(h,{});return s.associations.get(h).nodes=t,h}),this.nodeCache[t]}loadScene(t){const e=this.extensions,i=this.json.scenes[t],s=this,r=new C.Group;i.name&&(r.name=s.createUniqueName(i.name)),jt(r,i),i.extensions&&ve(e,r,i);const o=i.nodes||[],a=[];for(let A=0,l=o.length;A<l;A++)a.push(s.getDependency("node",o[A]));return Promise.all(a).then(function(A){for(let l=0,h=A.length;l<h;l++)r.add(A[l]);return s.associations=(l=>{const h=new Map;for(const[c,d]of s.associations)(c instanceof C.Material||c instanceof C.Texture)&&h.set(c,d);return l.traverse(c=>{const d=s.associations.get(c);d!=null&&h.set(c,d)}),h})(r),r})}_createAnimationTracks(t,e,i,s,r){const o=[],a=t.name?t.name:t.uuid,A=[];let l;switch(he[r.path]===he.weights?t.traverse(function(d){d.morphTargetInfluences&&A.push(d.name?d.name:d.uuid)}):A.push(a),he[r.path]){case he.weights:l=C.NumberKeyframeTrack;break;case he.rotation:l=C.QuaternionKeyframeTrack;break;case he.translation:case he.scale:l=C.VectorKeyframeTrack;break;default:i.itemSize===1?l=C.NumberKeyframeTrack:l=C.VectorKeyframeTrack}const h=s.interpolation!==void 0?yg[s.interpolation]:C.InterpolateLinear,c=this._getArrayFromAccessor(i);for(let d=0,u=A.length;d<u;d++){const p=new l(A[d]+"."+he[r.path],e.array,c,h);s.interpolation==="CUBICSPLINE"&&this._createCubicSplineTrackInterpolant(p),o.push(p)}return o}_getArrayFromAccessor(t){let e=t.array;if(t.normalized){const i=fr(e.constructor),s=new Float32Array(e.length);for(let r=0,o=e.length;r<o;r++)s[r]=e[r]*i;e=s}return e}_createCubicSplineTrackInterpolant(t){t.createInterpolant=function(e){return new(this instanceof C.QuaternionKeyframeTrack?Bg:ll)(this.times,this.values,this.getValueSize()/3,e)},t.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function ul(n,t,e){const i=t.attributes,s=[];function r(o,a){return e.getDependency("accessor",o).then(function(A){n.setAttribute(a,A)})}for(const o in i){const a=gr[o]||o.toLowerCase();a in n.attributes||s.push(r(i[o],a))}if(t.indices!==void 0&&!n.index){const o=e.getDependency("accessor",t.indices).then(function(a){n.setIndex(a)});s.push(o)}return C.ColorManagement.workingColorSpace!==C.LinearSRGBColorSpace&&"COLOR_0"in i&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${C.ColorManagement.workingColorSpace}" not supported.`),jt(n,t),function(o,a,A){const l=a.attributes,h=new C.Box3;if(l.POSITION===void 0)return;{const u=A.json.accessors[l.POSITION],p=u.min,I=u.max;if(p===void 0||I===void 0)return void console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");if(h.set(new C.Vector3(p[0],p[1],p[2]),new C.Vector3(I[0],I[1],I[2])),u.normalized){const f=fr(qe[u.componentType]);h.min.multiplyScalar(f),h.max.multiplyScalar(f)}}const c=a.targets;if(c!==void 0){const u=new C.Vector3,p=new C.Vector3;for(let I=0,f=c.length;I<f;I++){const m=c[I];if(m.POSITION!==void 0){const x=A.json.accessors[m.POSITION],E=x.min,M=x.max;if(E!==void 0&&M!==void 0){if(p.setX(Math.max(Math.abs(E[0]),Math.abs(M[0]))),p.setY(Math.max(Math.abs(E[1]),Math.abs(M[1]))),p.setZ(Math.max(Math.abs(E[2]),Math.abs(M[2]))),x.normalized){const L=fr(qe[x.componentType]);p.multiplyScalar(L)}u.max(p)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}h.expandByVector(u)}o.boundingBox=h;const d=new C.Sphere;h.getCenter(d.center),d.radius=h.min.distanceTo(h.max)/2,o.boundingSphere=d}(n,t,e),Promise.all(s).then(function(){return t.targets!==void 0?function(o,a,A){let l=!1,h=!1,c=!1;for(let I=0,f=a.length;I<f;I++){const m=a[I];if(m.POSITION!==void 0&&(l=!0),m.NORMAL!==void 0&&(h=!0),m.COLOR_0!==void 0&&(c=!0),l&&h&&c)break}if(!l&&!h&&!c)return Promise.resolve(o);const d=[],u=[],p=[];for(let I=0,f=a.length;I<f;I++){const m=a[I];if(l){const x=m.POSITION!==void 0?A.getDependency("accessor",m.POSITION):o.attributes.position;d.push(x)}if(h){const x=m.NORMAL!==void 0?A.getDependency("accessor",m.NORMAL):o.attributes.normal;u.push(x)}if(c){const x=m.COLOR_0!==void 0?A.getDependency("accessor",m.COLOR_0):o.attributes.color;p.push(x)}}return Promise.all([Promise.all(d),Promise.all(u),Promise.all(p)]).then(function(I){const f=I[0],m=I[1],x=I[2];return l&&(o.morphAttributes.position=f),h&&(o.morphAttributes.normal=m),c&&(o.morphAttributes.color=x),o.morphTargetsRelative=!0,o})}(n,t.targets,e):n})}const S=kn;function mr(){const n=["color","max","load","hasSkeleton","TextureLoader","_ignoreObjectIds","getNearFarClippingDistances","normalized","isWebGL2","input","createBoundingBoxGeometry","getGraphicsApiType","dispersion","21512NpHbvx","show","useMetalRoughness","set","minX","768714fjFMHV","ignoreObjectIds","mesh","getLocalPosition","createMaterial","getOwnerMaterial","emissiveColor","raycaster","options","getWorldTransform","useVolume","clone","clearcoat","alphaCutoff","createKtxTexture","elements","getContext","fromArray","tags","transmissionMap","vertexColors","Mesh","SwizzleGGGR","addToGroup","disposeMaterial","You need to provide a node or a bounding box","createMorphTargetAnimationTracks","clearCoat","entries","parser","maxX","unignoreObject3d","accessors","isArray","MeshPhysicalMaterial","ktx2Loader","RepeatWrapping","hasMorphTargets","baseUrl","positions","instance","getQueryMaterial","hide","thickness","update","scenes","getObject3dSizeInBytes","WrapT","MeshBasicMaterial","createObject3d","bufferCache","depthWrite","createBoundingBoxObject3d","getBoundingBoxMaterial","getChildren","bind","project","useSpecular","populateClonedObject3ds","binding","distance","attenuationColor","parentGroup","albedoColor","clearCoatRoughnessMap","clipAction","type","getArrayFromBufferAttribute","enableAnimation","highlightMaterial","castShadow","aoMap","position","Embedded animation GLB has no animations","clearcoatNormalMap","flipY","removeFromGroup","ignoreObject3d","clearcoatMap","toString","FrontSide","normalMap","play","target","PBR specular workflow materials not supported","LinearFilter","skinWeight","Color","wrapS","transparent","void main() {","setFromObject","constructor","add","getDirection","node","morphTargetsRelative","setMaterialVertexColors","1274naHQhT","children","useSheen","Offset","listMaterialOwners","scene","minZ","attenuationDistance","normal","transmission","animationMixer","addTag","depthTest","_ktx2Loader","LinearMipMapNearestFilter","length","object3d","getHighlightMaterial","detectSupport","mapMagFilter","paused","60EMfLga","data:application/octet-stream;base64,","number","newGroup","setIndex","setFromCamera","side","deleteGpuQuery","planes","deltaNormals","currentAction","Frustum","uvs","revokeObjectURL","deltaPositions","joints","Skeleton","near","NearestMipMapNearestFilter","createBoundingBoxesGeometry","sheenRoughness","getLeafBoundingBoxes","channel","specularColorMap","InstancedBufferAttribute","normalScale","skeleton","morphTargets","intersectObjects","skinIndex","userData","fragmentShader",`
|
|
15
|
+
|
|
16
|
+
void main() {`,"getFrustrumPlanes","wrapT","psGpuQuery","map","uuid","roughness","getWorldDirection","hasTag","has","getPosition","mapMinFilter","MinFilter","sheenRoughnessMap","getBufferData","disposeTexture","matrixWorld","castShadows","_textureLoader","addAnimations","componentType","SkinnedMesh","Unsupported normalized accessor component type: ",".morphTargetInfluences","#include <normal_fragment_maps>","alphaMode","Matrix4","5311380ekwNSu","normalMapType","visible","emissiveStrength","animation","byteOffset","Uvs","getAccessorTypedArray","clearCoatMap","far","capabilities","repeat","emissiveMap","setNormal","size","bufferViews","setTextureProps","ior","playAnimationAutomatically","parent","specularIntensity","array","_raycaster","InterpolateDiscrete","getSize","/lib/","clearCoatRoughness","metalRoughnessMap","replace","clearcoatRoughness","MeshStandardMaterial","morphAttributes","specularColor","thicknessMap","raycast","wireframe","getWorldPosition","output","createGpuQuery","mipmaps","createQueryMesh","inverseBindMatrices","buffer","queryMaterials","ps-modifications:","rotation","getAccessorBufferAttribute","Cutoff","specular","supportsColliders","clearCoatNormalScale","indices","renderer","customProgramCacheKey","Opaque","psOcclusionObject3d","Box3","BufferGeometry","NoColorSpace","dispose","roughnessMap","projectPoint","channels","index","clearCoatNormalMap","boundingBoxMaterials","morphTargetDictionary","InstancedMesh","remove","textureLoader","byteLength","Vector3","colorSpace","colors","sheenMap","apply","setOwnerMaterial","Tiling","clearcoatRoughnessMap","SRGBColorSpace","needsUpdate","push","Transparent","isUnlit","geometry","psHasVertexColors","buffers","domElement","NearestFilter","cloneHierarchy","colorMap","generateMipmaps","model","emissiveIntensity","resetDuration","InterpolateLinear","json","alphaMap","Vector2","692996iYMmLk","boneWeights","screenHeight","morphTargetInfluences","metalness","nodes","opacity","projectionMatrix","createBoundingBoxMesh","screenWidth","8546832AsZjhn","NearestMipMapLinearFilter","mapWrap","6479862kQqnDr","name","sheenColor","createTexture","weight","instanceMatrix","envMap","aoScale","BufferAttribute","interpolation","getNormalizedComponentScale","environmentMap","get","getCameraFov","setTranscoderPath","sampler","AnimationMixer","ThreeJs","lightMap","clearcoatNormalScale","minFilter","hasBoneWeights","BoxGeometry","tracks","setAttribute","offset","material","warn","setTextureProperties","WrapS","alphaTest","sheenColorMap","skins","animations","weights","8DiDVFv","toVector2","emissive","createQuery","Group","receiveShadow","sheen","DoubleSide","object","102332RPHpFd","min","localToWorld"];return(mr=function(){return n})()}function kn(n,t){const e=mr();return(kn=function(i,s){return e[i-=142]})(n,t)}(function(n){const t=kn,e=n();for(;;)try{if(-parseInt(t(419))/1+parseInt(t(467))/2*(-parseInt(t(142))/3)+parseInt(t(476))/4*(parseInt(t(261))/5)+parseInt(t(432))/6+parseInt(t(240))/7*(parseInt(t(492))/8)+parseInt(t(429))/9+-parseInt(t(320))/10===576933)break;e.push(e.shift())}catch{e.push(e.shift())}})(mr);const Mi=new _[S(418)],dl=new _[S(272)],Ir=[new ke,new ke,new ke,new ke,new ke,new ke],Gg={CUBICSPLINE:void 0,LINEAR:_[S(415)],STEP:_[S(343)]},Lg={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},gl={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16};class vg{constructor(t,e){g(this,"renderer");g(this,"scene");g(this,xl);g(this,"_ktx2Loader");g(this,wl);g(this,El);g(this,yl);g(this,Bl);g(this,"animationMixer");g(this,"currentAction");g(this,Cl);g(this,Il);const i=S;this[i(372)]=t,this[i(245)]=e}[(xl=S(311),wl=S(363),El=S(342),yl=S(484),Bl=S(211),Cl=S(192),Il=S(385),S(186))](t){const e=S;this[e(250)]&&this[e(250)][e(186)](t)}get[S(208)](){return xr[S(449)]}get[S(428)](){const t=S;return this[t(372)][t(344)](Mi),Mi.x}get screenHeight(){const t=S;return this[t(372)][t(344)](Mi),Mi.y}get[S(369)](){return!1}[S(303)](t){const e=S;return t[e(356)](new _[e(391)])}[S(236)](t){const e=S,i=new _.Vector3;return t[e(300)](i),i.negate()}[S(145)](t,e){return e.worldToLocal(ur(t))}getWorldPosition(t,e){return e[S(478)](ur(t))}[S(151)](t){const e=S;return t[e(309)][e(157)]}[S(381)](t,e){const i=S,s=ur(t)[i(198)](e),r=.5*this[i(428)],o=.5*this[i(421)];return s.x=s.x*r+r,s.y=-s.y*o+o,s}[S(445)](t){return t.fov}[S(294)](t){const e=S;dl.setFromProjectionMatrix(t[e(426)]);const i=dl[e(269)];for(let s=0;s<i[e(255)];s++){const r=i[s];Ir[s][e(333)](r[e(248)]),Ir[s][e(202)]=r.constant}return Ir}[S(485)](t){const e=S,i=t;return[i[e(278)],i[e(329)]]}[S(264)](t){const e=new _[S(471)];return t&&(e.name=t),e}[S(165)](t,e){const i=S,s=e;s[i(235)](t);const r=t[i(375)];r&&s.add(r)}[S(218)](t,e){const i=S,s=e;s[i(388)](t);const r=t.psOcclusionObject3d;r&&s[i(388)](r)}removeFromParent(t){const e=S,i=t;i[e(339)]?i[e(339)][e(388)](i):console[e(459)]("3D object as no parent")}[S(196)](t){return t[S(241)]}[S(184)](t){t.visible=!1}[S(493)](t){t[S(322)]=!0}getName(t){return t[S(433)]}getBoundingBox(t,e=new ae){const i=S,s=new _[i(376)]()[i(233)](t,!0);return e[i(496)]=s.min.x,e[i(172)]=s[i(480)].x,e.minY=s.min.y,e.maxY=s[i(480)].y,e[i(246)]=s[i(477)].z,e.maxZ=s[i(480)].z,e}getCanvas(){const t=S;return this[t(372)][t(407)]}async[S(146)](t){const e=S;let i={};if(t.isDoubleSided&&(i[e(267)]=_[e(474)]),t[e(403)]){const A=new _.MeshBasicMaterial;switch(t[e(205)]&&(A.color=Je(t[e(205)])),t[e(410)]&&(this[e(336)](t,e(410),_[e(399)]),A[e(297)]=t[e(410)]),t[e(318)]){case $t[e(402)]:A[e(231)]=!0,A[e(193)]=!1;break;case $t[e(367)]:A[e(462)]=t[e(155)]}return A}switch(t[e(410)]&&(this[e(336)](t,e(410),_[e(399)]),i.map=t.colorMap),t[e(205)]&&(i[e(479)]=Je(t[e(205)]),i[e(425)]=t.albedoColor.a),t[e(318)]){case $t.Transparent:i[e(231)]=!0,i[e(193)]=!1;break;case $t[e(367)]:i.alphaTest=t[e(155)]}t[e(417)]&&t[e(417)]!=t.colorMap?(this.setTextureProps(t,e(417),_[e(378)]),i.alphaMap=t.alphaMap):t.alphaMode===$t[e(374)]&&i[e(425)]!=null&&i[e(462)]!=null&&i[e(425)]<i[e(462)]&&(i={},i[e(322)]=!1),t[e(494)]?t.metalRoughnessMap?(this[e(336)](t,e(347),_[e(378)]),i.metalnessMap=t.metalRoughnessMap,i[e(380)]=t[e(347)],t.metalness!=null?i[e(423)]=t.metalness:i[e(423)]=1,t[e(299)]!=null?i[e(299)]=t.roughness:i[e(299)]=1):t[e(423)]!=null&&t[e(299)]!=null&&(i[e(423)]=t.metalness,i[e(299)]=t.roughness):console[e(459)](e(226)),t.normalMap&&(this.setTextureProps(t,e(223),_.NoColorSpace),i.normalMap=t[e(223)],i.normalScale=new _[e(418)](t[e(286)],t[e(286)])),t.aoMap&&(this.setTextureProps(t,e(213),_[e(378)]),i[e(213)]=t.aoMap,t[e(439)]!=null&&(i.aoMapIntensity=t[e(439)])),t[e(332)]&&(this[e(336)](t,e(332),_[e(399)]),i[e(332)]=t.emissiveMap,i[e(469)]=new _[e(229)](1,1,1)),t[e(148)]&&(i[e(469)]=Je(t.emissiveColor)),t[e(323)]!=null&&(i[e(413)]=t[e(323)]),t[e(450)]&&(this[e(336)](t,e(450),_.SRGBColorSpace),i[e(450)]=t[e(450)]),t.ior!=null&&(i[e(337)]=t[e(337)]),t.useTransmission&&(t[e(249)]!=null&&(i[e(249)]=t.transmission),t[e(161)]&&(this[e(336)](t,"transmissionMap",_[e(378)]),i[e(161)]=t.transmissionMap)),t[e(152)]&&(t[e(185)]!=null&&(i.thickness=t.thickness),t[e(353)]&&(this[e(336)](t,e(353),_[e(378)]),i[e(353)]=t[e(353)]),t.attenuationColor&&t.attenuationColor.r!=0&&t[e(203)].g!=0&&t[e(203)].b!=0&&(i[e(203)]=Je(t.attenuationColor)),t[e(247)]!=null&&(i[e(247)]=t[e(247)])),t[e(169)]!=null&&(i[e(154)]=t[e(169)]),t[e(328)]&&(this.setTextureProps(t,e(328),_[e(378)]),i[e(220)]=t[e(328)]),t.clearCoatRoughness!=null&&(i[e(349)]=t[e(346)]),t[e(206)]&&(this[e(336)](t,e(206),_[e(378)]),i[e(398)]=t[e(206)]),t[e(384)]&&(this.setTextureProps(t,e(384),_[e(378)]),i[e(216)]=t.clearCoatNormalMap,i[e(451)]=new _[e(418)](t[e(370)],t[e(370)])),t[e(199)]&&(t[e(284)]&&(this[e(336)](t,e(284),_[e(399)]),i[e(284)]=t[e(284)]),t[e(352)]?i[e(352)]=Je(t[e(352)]):i[e(352)]=new _[e(229)](1,1,1),t[e(368)]!=null?i.specularIntensity=t[e(368)]:i[e(340)]=1,t.specularMap&&(this[e(336)](t,"specularMap",_[e(378)]),i.specularIntensityMap=t.specularMap)),t[e(491)]!=null&&(i[e(491)]=t[e(491)]),t[e(242)]&&(i[e(473)]=1,t.sheenColor&&(i.sheenColor=Je(t[e(434)])),t.sheenMap&&(this.setTextureProps(t,e(394),_[e(378)]),i[e(463)]=t.sheenMap),t[e(281)]!=null&&(i[e(281)]=t[e(281)]),t.sheenRoughnessMap&&(this[e(336)](t,e(306),_[e(378)]),i.sheenRoughnessMap=t.sheenRoughnessMap)),t[e(443)]&&(i[e(438)]=t[e(443)]);const s=new _[e(176)](i);let r=[];const o=new Map,a=[];return t[e(321)]==Li[e(164)]&&(r[e(401)](`vec3 unpackNormalXY(vec4 nmap) {
|
|
17
|
+
vec3 normal;
|
|
18
|
+
normal.xy = nmap.wy * 2.0 - 1.0;
|
|
19
|
+
normal.z = sqrt(1.0 - clamp(dot(normal.xy, normal.xy), 0.0, 1.0));
|
|
20
|
+
return normal;
|
|
21
|
+
}`),o[e(495)](e(317),`#ifdef USE_NORMALMAP_OBJECTSPACE
|
|
22
|
+
normal = unpackNormalXY(texture2D( normalMap, vNormalMapUv ));
|
|
23
|
+
#ifdef FLIP_SIDED
|
|
24
|
+
normal = - normal;
|
|
25
|
+
#endif
|
|
26
|
+
#ifdef DOUBLE_SIDED
|
|
27
|
+
normal = normal * faceDirection;
|
|
28
|
+
#endif
|
|
29
|
+
normal = normalize( normalMatrix * normal );
|
|
30
|
+
#elif defined( USE_NORMALMAP_TANGENTSPACE )
|
|
31
|
+
vec3 mapN = unpackNormalXY(texture2D( normalMap, vNormalMapUv ));
|
|
32
|
+
mapN.xy *= normalScale;
|
|
33
|
+
normal = normalize( tbn * mapN );
|
|
34
|
+
#elif defined( USE_BUMPMAP )
|
|
35
|
+
normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );
|
|
36
|
+
#endif`),a.push("packed-normals")),(r!=null||o[e(334)]>0)&&(s.onBeforeCompile=function(A){const l=e;A[l(292)]=A[l(292)][l(348)](l(232),r.join(`
|
|
37
|
+
`)+l(293));for(const[h,c]of o[l(170)]())A[l(292)]=A[l(292)][l(348)](h,c)},s[e(373)]=function(){return e(364)+a.join(".")}),s}async[S(435)](t,e){const i=URL.createObjectURL(e);return new Promise((s,r)=>{const o=kn;this[o(389)][o(481)](i,a=>{const A=o;a[A(433)]=t,URL[A(274)](i),this[A(460)](a,t),a[A(411)]=!0,s(a)},void 0,a=>{URL[o(274)](i),r(a)})})}async[S(156)](t,e){const i=URL.createObjectURL(e);return new Promise((s,r)=>{const o=kn;this[o(177)][o(481)](i,a=>{const A=o;a[A(433)]=t,URL[A(274)](i),this[A(460)](a,t),s(a)},void 0,a=>{URL[o(274)](i),r(a)})})}[S(308)](t){t.dispose()}[S(166)](t){t!==void 0&&t[S(379)]()}[S(244)](t){const e=S,i=[],s=t,r=s[e(458)];if(!r)return i;if(Array.isArray(r))for(let o=0;o<r[e(255)];o++)i[e(401)]({mesh:s,index:o});else i[e(401)](s);return i}[S(147)](t){const e=S;if(t&&t[e(144)]&&typeof t[e(383)]===e(263)){const i=t[e(144)][e(458)];return i==null?void 0:i[t[e(383)]]}return t.material}[S(396)](t,e){const i=S;if(t&&t[i(144)]&&typeof t[i(383)]===i(263)){const s=t[i(144)].material;return Array[i(175)](s)&&(s[t.index]=e),void this[i(239)](t.mesh,e)}this[i(239)](t,e),t[i(458)]=e}getTextureSizeInBytes(t){const e=S;let i=0;const s=t[e(359)];if(s)for(const r of s){const o=r.data;o&&(i+=o[e(390)])}return i}[S(191)](t,e,i,s,r,o,a,A,l){var I;const h=S,c=t[h(371)],d=new _[h(377)];if(c[h(255)]>0){d.setIndex(new _.BufferAttribute(c,1)),d.setAttribute(h(214),new _[h(440)](t[h(181)],3)),d[h(456)](h(248),new _.BufferAttribute(t.normals,3)),((I=t[h(273)][0])==null?void 0:I[h(255)])>0&&d[h(456)]("uv",new _[h(440)](t[h(273)][0],2));for(let f=1;f<t.uvs[h(255)];f++)d[h(456)]("uv"+f,new _[h(440)](t[h(273)][f],2));if(t[h(393)].length>0&&(d[h(456)](h(479),new _[h(440)](t[h(393)],4)),e[h(479)].set(4294967295),e[h(162)]=!0),t[h(453)]&&(d[h(456)](h(290),new _.Uint16BufferAttribute(t.boneIndices,4)),d.setAttribute(h(228),new _[h(440)](t[h(420)],4))),t.hasMorphTargets){d[h(351)][h(214)]=[];let f=0;for(const x of t[h(288)])x[h(270)]&&f++;const m=f===t.morphTargets[h(255)];m&&(d[h(351)][h(248)]=[]);for(let x=0;x<t[h(288)][h(255)];x++){const E=t[h(288)][x];d[h(351)].position[x]=new _[h(440)](E[h(275)],3),m&&(d[h(351)][h(248)][x]=new _[h(440)](E.deltaNormals,3))}d[h(238)]=!0}}let u;if(A)u=new _[h(387)](d,e,A[h(255)]),u[h(437)]=new _[h(285)](function(f){const m=new Float32Array(16*f.length);for(let x=0;x<f.length;x++)for(let E=0;E<16;E++)m[16*x+E]=f[x][E];return m}(A),16,!1,1);else if(i[h(482)]){u=new _[h(314)](d,e),u.normalizeSkinWeights();const f=i[h(412)].skeletons[i.skeletonIndex];u.bind(f[h(287)],new _.Matrix4)}else u=new _[h(163)](d,e);u[h(405)]=t[h(393)].length>0;const p=i[h(412)][h(150)];if(u[h(433)]=i[h(204)]!=null&&t[h(179)]?i[h(204)][h(433)]+"_"+Sr:s,u[h(212)]=p[h(310)],u[h(472)]=p.receiveShadows,t.hasMorphTargets){for(let f=0;f<t[h(288)][h(255)];f++){const m=t[h(288)][f];m[h(436)]!=null&&(u[h(422)]==null&&(u.morphTargetInfluences=[]),u[h(422)][f]=m[h(436)]),m[h(433)]&&(u.morphTargetDictionary==null&&(u[h(386)]={}),u[h(386)][m.name]=f)}if(this.currentAction)for(const f of this[h(271)]._propertyBindings){const m=f[h(201)];m.node!=null&&m[h(237)][h(433)]===u.name&&(m[h(237)]=u,m[h(197)]())}}return[u,null]}disposeObject3d(t){t[S(404)].dispose()}[S(188)](t){const e=S,i=t,s=Object.values(i[e(404)].attributes);let r=0;for(const o of s)r+=o.array[e(390)];return i[e(404)][e(383)]&&(r+=i[e(404)][e(383)].array[e(390)]),r}[S(358)](){const t=S;if(this[t(372)].capabilities[t(487)])return this[t(372)][t(158)]()[t(470)]()}[S(268)](t){const e=S;this.renderer[e(330)].isWebGL2&&this[e(372)][e(158)]().deleteQuery(t)}[S(490)](){const t=S;return this[t(372)][t(234)][t(433)]==="WebGPURenderer"?Fn.WebGpu:this[t(372)][t(330)].isWebGL2?Fn.WebGl2:Fn.WebGl1}async[S(312)](t,e,i,s,r){const o=S,a=new al,A=await a.parseAsync(t,e);if(A[o(465)][o(255)]===0)throw new Error(o(215));const l=A[o(171)][o(416)],h=[],c=this[o(409)](A[o(245)][o(241)][0],h,l[o(187)][l[o(245)]][o(424)][0],l[o(424)]);s[o(235)](c);const d=A[o(465)];for(const m of d)i.animations[o(401)](m);const u=new Map;for(let m=0;m<A.animations[o(255)];m++){const x=A[o(465)][m];u[o(495)](x.name,x);const E=this[o(168)](l[o(465)][m],l,h);x[o(455)][o(401)][o(395)](x[o(455)],E),x[o(414)]()}let p;var I;p=typeof r.animation=="number"||(I=r[o(324)])!=null&&I.trim().length!==0?Gd(r[o(324)],u,d):d[0],this[o(250)]=new _[o(448)](i),this[o(271)]=this.animationMixer[o(207)](p),!r[o(338)]&&(this[o(271)][o(260)]=!0);const f=[];if(l[o(464)])for(const m of l.skins){const x=h[m.joints[0]],E=[];for(const T of m[o(276)])E[o(401)](h[T]);const M=m[o(361)],L=l[o(174)][M],B=this[o(327)](M,l),w=[];let y,Q=[];const b=16*L.count;for(let T=0;T<b;T++)T!==0&&T%16==0&&(y=new _[o(319)],y[o(159)](Q),w.push(y),Q=[]),Q[o(401)](B[T]);y=new _[o(319)],y[o(159)](Q),w[o(401)](y);const v=new _d(new _[o(277)](E,w),x);f[o(401)](v)}return{sceneNodes:h,skeletons:f}}[S(210)](){const t=S;this.currentAction&&this[t(271)][t(224)]()}[S(354)](t,e){const i=S,s=new _[i(418)](t.x/this[i(428)]*2-1,-t.y/this[i(421)]*2+1);this.raycaster[i(266)](s,e);const r=this[i(149)][i(289)](this.scene[i(241)]);for(const o of r)if(!this[i(143)][i(302)](o[i(475)].id))return o[i(475)];return null}[S(219)](t){this.ignoreObjectIds.add(t.id)}[S(173)](t){this.ignoreObjectIds.delete(t.id)}[S(257)](){const t=S;return!this[t(211)]&&(this[t(211)]=new _[t(350)]({color:16711680})),this[t(211)]}getMaterial(t){return t[S(458)]}setMaterial(t,e){t[S(458)]=e}[S(194)](t,e,i=Ri,s=!1){return this[S(427)](t,this.getBoundingBoxMaterial(e,i,s))}renderWireframe(t,e){const i=S,s=t.material;s&&(s[i(355)]=e)}addBoundingBoxes(t,e,i,s=Ri,r=!1){const o=S,a=e??(t==null?void 0:t[o(256)]);if(!a)throw new Error("You need to provide a node or a parent object");let A;if(t)A=this[o(280)](t[o(282)]());else{if(!i)throw new Error(o(167));A=this[o(280)]([i])}if(!r){const h=new _[o(163)](A,this[o(195)](.2,s));this.addTag(h,_r),a[o(235)](h)}const l=new _.Mesh(A,this[o(195)](1,Ri,!0));this[o(251)](l,_r),a.add(l)}[S(301)](t,e){var r;const i=S,s=t;return((r=s[i(291)])==null?void 0:r.tags)!=null&&(s[i(291)][i(160)]==null&&(s[i(291)].tags=new Set),s[i(291)].tags[i(302)](e))}[S(360)](t,e,i){const s=S,r=this.getQueryMaterial(i),o=new _[s(163)](t,r);return o[s(296)]=e,o}[S(183)](t=!0){const e=S,i=t?0:1;if(this[e(363)]==null||this.queryMaterials[i]==null){const s=new _[e(190)]({color:16777215,depthWrite:!1,colorWrite:!1});!t&&(s.side=_[e(222)],s[e(252)]=!1),this.queryMaterials==null&&(this[e(363)]=[]),this[e(363)][i]=s}return this[e(363)][i]}[S(427)](t,e){const i=S,s=new _[i(163)](this[i(489)](t),e),r=new P(.5*((o=t).maxX+o.minX),.5*(o.maxY+o.minY),.5*(o.maxZ+o.minZ));var o;return s.position.set(r.x,r.y,r.z),s}[S(195)](t,e,i=!1){const s=S;this[s(385)]==null&&(this[s(385)]=new Map);const r=t+"."+e.r+"."+e.g+"."+e.b+"."+i[s(221)]();if(!this[s(385)][s(302)](r)){const o=new _[s(350)];return o.opacity=t,o[s(479)].set(e.r,e.g,e.b),o[s(355)]=i,o[s(231)]=t!==1,this[s(385)].set(r,o),o}return this[s(385)][s(444)](r)}[S(489)](t){const e=S,i=new P((s=t).maxX-s.minX,s.maxY-s.minY,s.maxZ-s.minZ);var s;return new _[e(454)](i.x,i.y,i.z)}[S(280)](t){const e=S,{positions:i,indices:s,normals:r}=Ld(t),o=new _[e(377)];return o[e(456)](e(214),new _.BufferAttribute(i,3)),o[e(265)](new _[e(440)](s,1)),o[e(456)](e(248),new _[e(440)](r,3)),o}setTextureProperties(t,e){const i=S;t[i(433)]=e,t.wrapS=_.RepeatWrapping,t[i(295)]=_[i(178)],t[i(331)].set(1,1),t[i(217)]=!1}get textureLoader(){const t=S;return this[t(311)]==null&&(this._textureLoader=new _[t(483)]),this._textureLoader}get[S(177)](){const t=S;return this[t(253)]==null&&(this[t(253)]=new _t,this[t(253)][t(446)](Y[t(182)][t(180)]+t(345)),this[t(253)][t(258)](this[t(372)])),this[t(253)]}get[S(149)](){const t=S;return this[t(342)]==null&&(this._raycaster=new _.Raycaster),this[t(342)]}get ignoreObjectIds(){const t=S;return this._ignoreObjectIds==null&&(this[t(484)]=new Set),this[t(484)]}[S(409)](t,e,i,s){const r=S,o=t[r(153)]();return this[r(200)](o,e,i,s),o}[S(200)](t,e,i,s){const r=S;e[i]=t;const o=s[i];for(let a=0;a<t[r(241)][r(255)];a++){const A=t.children[a],l=o[r(241)][a];this[r(200)](A,e,l,s)}}[S(168)](t,e,i){const s=S,r=[];for(const o of t[s(382)])if(o.target.path===s(466)){const a=i[o[s(225)][s(237)]],A=a[s(433)]?a.name:a[s(298)],l=t.samplers[o[s(447)]],h=l[s(441)]!==void 0?Gg[l[s(441)]]:_[s(415)],c=this[s(366)](l[s(488)],e),d=this[s(366)](l[s(357)],e),u=this[s(209)](d);r[s(401)](new _.NumberKeyframeTrack(A+"_"+Sr+s(316),c.array,u,h))}return r}getArrayFromBufferAttribute(t){const e=S;let i=t[e(341)];if(t[e(486)]){const s=this[e(442)](t[e(234)]),r=new Float32Array(i[e(255)]);for(let o=0;o<i[e(255)];o++)r[o]=i[o]*s;i=r}return i}[S(442)](t){const e=S;switch(t){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error(e(315)+t)}}[S(366)](t,e){const i=S,s=e.accessors[t],r=gl[s.type],o=s.normalized===!0,a=this[i(327)](t,e);return new _.BufferAttribute(a,r,o)}[S(327)](t,e){const i=S,s=e[i(174)][t],r=gl[s.type],o=Lg[s[i(313)]],a=e[i(335)][t],A=this[i(307)](a[i(362)],e),l=a[i(325)]+(s[i(325)]??0);return new o(A[i(362)],l,s.count*r)}getBufferData(t,e){const i=S;this[i(192)]==null&&(this[i(192)]=[]);let s=this.bufferCache[t];if(s)return s;const r=e[i(406)][t],o=atob(r.uri.replace(i(262),"")),a=r[i(390)];s=new Uint8Array(a);for(let A=0;A<a;A++)s[A]=o.charCodeAt(A);return this[i(192)][t]=s,s}[S(251)](t,e){const i=S;t[i(291)][i(160)]==null&&(t[i(291)][i(160)]=new Set),t[i(291)][i(160)][i(235)](e)}[S(336)](t,e,i){const s=S,r=t[e];r[s(392)]=i,r.magFilter=this[s(259)](t[e+"MagFilter"]),r[s(452)]=this[s(304)](t[e+s(305)]),r[s(230)]=this[s(431)](t[e+s(461)]),r[s(295)]=this.mapWrap(t[e+s(189)]),r.repeat=this[s(468)](t[e+s(397)]),r[s(457)]=this[s(468)](t[e+s(243)]),r[s(365)]=t[e+"Rotation"],r[s(283)]=t[e+s(326)]}[S(259)](t){return t===9728?_.NearestFilter:_.LinearFilter}[S(304)](t){const e=S;switch(t){case 9728:return _[e(408)];case 9729:return _[e(227)];case 9984:return _[e(279)];case 9985:return _[e(254)];case 9986:return _[e(430)];default:return _.LinearMipMapLinearFilter}}mapWrap(t){const e=S;switch(t){case 10497:return _[e(178)];case 33071:return _.ClampToEdgeWrapping;case 33648:return _.MirroredRepeatWrapping;default:return _.RepeatWrapping}}[S(468)](t){return new _[S(418)](t.x,t.y)}[S(239)](t,e){const i=S;t[i(405)]&&(e[i(162)]=!0,e[i(400)]=!0)}}function Cr(n,t){const e=Br();return(Cr=function(i,s){return e[i-=146]})(n,t)}const q=Cr;(function(n){const t=Cr,e=n();for(;;)try{if(-parseInt(t(198))/1+-parseInt(t(203))/2+parseInt(t(172))/3*(-parseInt(t(146))/4)+parseInt(t(168))/5*(parseInt(t(149))/6)+parseInt(t(159))/7*(-parseInt(t(201))/8)+parseInt(t(179))/9+parseInt(t(156))/10*(parseInt(t(186))/11)===200195)break;e.push(e.shift())}catch{e.push(e.shift())}})(Br);const Rg={BASE_URL:"/",DEV:!1,MODE:q(166),PROD:!0,SSR:!1,VITE_BASE_URL:"",VITE_SHARED_ASSETS_PATH:q(197)};function Br(){const n=["Vector3","position","/assets","148775wkSIQV","modelIndex","/viverse-symbol-anim.glb","168JzwAFN","clock","126208VTmmfS","error","8TQXkFp","distanceTo","EventDispatcher","2195028dRwBsQ","add","dispatchEvent","onModelLoaded","model-load","clipAction","loadingModel","10jLmbdT","cameraTarget","Unable to load loading model: ","14385qwuVel","animations","removeLoadingModel","getWorldPosition","addLoadingModel","sceneGroup","streamController","public","onModelLoadError","5xunpRD","set","addModel","animationMixer","552039WpLKBD","2.7.3","model-load-error","isModelLoaded","renderer","load","camera","3125574tlIYYA","instance","scene","update","remove","AnimationMixer","getDelta","1211441mRFsmB","showLoadingModel","pathOrUrl","play","sharedAssetsUrl","scale","1772707372872","Clock","removeModel"];return(Br=function(){return n})()}const pl=q(153),fl=q(174),Tg=new _[q(195)];class Dg extends _[q(148)]{constructor(e,i,s,r,o){const a=q;super();g(this,Gl);g(this,_l,!1);g(this,"loadingModel");g(this,"camera");g(this,Sl);g(this,"cameraTarget");g(this,bl);g(this,Ml);g(this,Ql);g(this,"modelIndex",0);this[a(178)]=e,this[a(181)]=s,this[a(157)]=r;const A={version:a(173),variant:"threejs",build:a(192),s3Domain:"stream.viverse.com"};this[a(202)]=new _[a(193)],this.renderer=new vg(i,s),this[a(165)]=new Sd(e,this[a(176)],o??{},-1,Rg,A),Y[a(180)][a(187)]&&this[a(163)]()}[(Gl=q(165),_l=q(175),Sl=q(181),bl=q(171),Ml=q(202),Ql=q(176),q(182))](){const e=q;this[e(165)][e(182)]();let i=this[e(202)][e(185)]();this[e(171)]&&this[e(171)][e(182)](i),this.renderer[e(182)](i)}async[q(170)](e,i,s){const r=q,o=s??{};o[r(188)]=e,o[r(164)]=i;const a=this[r(199)];o[r(152)]=(A,l,h,c,d)=>{const u=r;Y[u(180)][u(187)]&&this[u(161)]();const p={minX:A.x-l.x,minY:A.y-l.y,minZ:A.z-l.z,maxX:A.x+l.x,maxY:A.y+l.y,maxZ:A.z+l.z};this[u(151)]({type:pl,modelIndex:a,boundingBox:p,isAnimated:d,willUseEmbeddedCollider:h,isLastModelToLoad:c})},o[r(167)]=A=>{const l=r;Y[l(180)].showLoadingModel&&this[l(161)](),!A&&(A=new Error("Unknown model loading error")),this.dispatchEvent({type:fl,modelIndex:a,error:A})},this.modelIndex++,await this[r(165)][r(170)](o)}[q(194)](e,i){const s=q;this[s(165)][s(194)](e,i)}addLoadingModel(){const e=q;this.isModelLoaded||new al()[e(177)](Y.instance[e(190)]+e(200),i=>{const s=e;if(this.isModelLoaded)return;const r=.009*this[s(178)][s(162)](Tg)[s(147)](this[s(157)]);this.loadingModel=i[s(181)],this[s(155)][s(191)][s(169)](r,r,r),this[s(155)][s(196)][s(169)](0,.4,0),this[s(171)]=new _[s(184)](i[s(181)]),this[s(171)][s(154)](i[s(160)][0])[s(189)](),this[s(181)][s(150)](this.loadingModel)},void 0,i=>{const s=e;console[s(204)](s(158)+i)})}[q(161)](){const e=q;this[e(175)]=!0,this[e(155)]!=null&&(this.scene[e(183)](this[e(155)]),this.loadingModel=null,this.animationMixer=null)}}function ml(n,t){var e=yr();return(ml=function(i,s){return e[i-=410]})(n,t)}function yr(){var n=["12oglvIo","995394tGspUy","15869eegJGM","3WEZzHw","3419192Xyjmhi","9lIhWws","2700288jnGahL","325415mpijxr","70036AZxExs","130Dbtmvu","780EposTv","225401LNYFXG"];return(yr=function(){return n})()}(function(n){for(var t=ml,e=n();;)try{if(-parseInt(t(416))/1+parseInt(t(421))/2*(parseInt(t(411))/3)+-parseInt(t(420))/4*(-parseInt(t(415))/5)+-parseInt(t(418))/6*(parseInt(t(410))/7)+-parseInt(t(412))/8*(-parseInt(t(413))/9)+-parseInt(t(417))/10*(parseInt(t(419))/11)+-parseInt(t(414))/12===264192)break;e.push(e.shift())}catch{e.push(e.shift())}})(yr),dt.EVENT_MODEL_LOAD=pl,dt.EVENT_MODEL_LOAD_ERROR=fl,dt.StreamController=Dg,Object.defineProperty(dt,Symbol.toStringTag,{value:"Module"})});
|