@polygon-streaming/web-player-threejs 2.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENCE +80 -0
- package/README.md +122 -0
- package/dist/polygon-streaming.es.js +7011 -0
- package/dist/polygon-streaming.umd.js +2 -0
- package/dist/service-worker.js +1 -0
- package/package.json +15 -0
|
@@ -0,0 +1,2 @@
|
|
|
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+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY0AAQMyIFEAMiBg0AIANBHzYCfCADIANB/ABqIANB+ABqIAQgBCAFaiAGGyIEIAEgAmoiAiAEaxAVIgUQAw0AIAMoAnwiBkEfSw0AIAMoAngiB0EJTw0AIABBiCBqIAMgBkGAC0GADCAHEBggA0E0NgJ8IAMgA0H8AGogA0H4AGogBCAFaiIEIAIgBGsQFSIFEAMNACADKAJ8IgZBNEsNACADKAJ4IgdBCk8NACAAQZAwaiADIAZBgA1B4A4gBxAYIANBIzYCfCADIANB/ABqIANB+ABqIAQgBWoiBCACIARrEBUiBRADDQAgAygCfCIGQSNLDQAgAygCeCIHQQpPDQAgACADIAZBwBBB0BEgBxAYIAQgBWoiBEEMaiIFIAJLDQAgAiAFayEFQQAhAgNAIAJBA0cEQCAEKAAAIgZBf2ogBU8NAiAAIAJBAnRqQZzQAWogBjYCACACQQFqIQIgBEEEaiEEDAELCyAEIAFrIQgLIANBgAFqJAAgCAtGAQN/IABBCGohAyAAKAIEIQJBACEAA0AgACACdkUEQCABIAMgAEEDdGotAAJBFktqIQEgAEEBaiEADAELCyABQQggAmt0C4YDAQV/Qbh/IQcCQCADRQ0AIAItAAAiBEUEQCABQQA2AgBBAUG4fyADQQFGGw8LAn8gAkEBaiIFIARBGHRBGHUiBkF/Sg0AGiAGQX9GBEAgA0EDSA0CIAUvAABBgP4BaiEEIAJBA2oMAQsgA0ECSA0BIAItAAEgBEEIdHJBgIB+aiEEIAJBAmoLIQUgASAENgIAIAVBAWoiASACIANqIgNLDQBBbCEHIABBEGogACAFLQAAIgVBBnZBI0EJIAEgAyABa0HAEEHQEUHwEiAAKAKM4QEgACgCnOIBIAQQHyIGEAMiCA0AIABBmCBqIABBCGogBUEEdkEDcUEfQQggASABIAZqIAgbIgEgAyABa0GAC0GADEGAFyAAKAKM4QEgACgCnOIBIAQQHyIGEAMiCA0AIABBoDBqIABBBGogBUECdkEDcUE0QQkgASABIAZqIAgbIgEgAyABa0GADUHgDkGQGSAAKAKM4QEgACgCnOIBIAQQHyIAEAMNACAAIAFqIAJrIQcLIAcLrQMBCn8jAEGABGsiCCQAAn9BUiACQf8BSw0AGkFUIANBDEsNABogAkEBaiELIABBBGohCUGAgAQgA0F/anRBEHUhCkEAIQJBASEEQQEgA3QiB0F/aiIMIQUDQCACIAtGRQRAAkAgASACQQF0Ig1qLwEAIgZB//8DRgRAIAkgBUECdGogAjoAAiAFQX9qIQVBASEGDAELIARBACAKIAZBEHRBEHVKGyEECyAIIA1qIAY7AQAgAkEBaiECDAELCyAAIAQ7AQIgACADOwEAIAdBA3YgB0EBdmpBA2ohBkEAIQRBACECA0AgBCALRkUEQCABIARBAXRqLgEAIQpBACEAA0AgACAKTkUEQCAJIAJBAnRqIAQ6AAIDQCACIAZqIAxxIgIgBUsNAAsgAEEBaiEADAELCyAEQQFqIQQMAQsLQX8gAg0AGkEAIQIDfyACIAdGBH9BAAUgCCAJIAJBAnRqIgAtAAJBAXRqIgEgAS8BACIBQQFqOwEAIAAgAyABEBRrIgU6AAMgACABIAVB/wFxdCAHazsBACACQQFqIQIMAQsLCyEFIAhBgARqJAAgBQvjBgEIf0FsIQcCQCACQQNJDQACQAJAAkACQCABLQAAIgNBA3EiCUEBaw4DAwEAAgsgACgCiOEBDQBBYg8LIAJBBUkNAkEDIQYgASgAACEFAn8CQAJAIANBAnZBA3EiCEF+aiIEQQFNBEAgBEEBaw0BDAILIAVBDnZB/wdxIQQgBUEEdkH/B3EhAyAIRQwCCyAFQRJ2IQRBBCEGIAVBBHZB//8AcSEDQQAMAQsgBUEEdkH//w9xIgNBgIAISw0DIAEtAARBCnQgBUEWdnIhBEEFIQZBAAshBSAEIAZqIgogAksNAgJAIANBgQZJDQAgACgCnOIBRQ0AQQAhAgNAIAJBg4ABSw0BIAJBQGshAgwAAAsACwJ/IAlBA0YEQCABIAZqIQEgAEHw4gFqIQIgACgCDCEGIAUEQCACIAMgASAEIAYQXwwCCyACIAMgASAEIAYQXQwBCyAAQbjQAWohAiABIAZqIQEgAEHw4gFqIQYgAEGo0ABqIQggBQRAIAggBiADIAEgBCACEF4MAQsgCCAGIAMgASAEIAIQXAsQAw0CIAAgAzYCgOIBIABBATYCiOEBIAAgAEHw4gFqNgLw4QEgCUECRgRAIAAgAEGo0ABqNgIMCyAAIANqIgBBiOMBakIANwAAIABBgOMBakIANwAAIABB+OIBakIANwAAIABB8OIBakIANwAAIAoPCwJ/AkACQAJAIANBAnZBA3FBf2oiBEECSw0AIARBAWsOAgACAQtBASEEIANBA3YMAgtBAiEEIAEvAABBBHYMAQtBAyEEIAEQIUEEdgsiAyAEaiIFQSBqIAJLBEAgBSACSw0CIABB8OIBaiABIARqIAMQCyEBIAAgAzYCgOIBIAAgATYC8OEBIAEgA2oiAEIANwAYIABCADcAECAAQgA3AAggAEIANwAAIAUPCyAAIAM2AoDiASAAIAEgBGo2AvDhASAFDwsCfwJAAkACQCADQQJ2QQNxQX9qIgRBAksNACAEQQFrDgIAAgELQQEhByADQQN2DAILQQIhByABLwAAQQR2DAELIAJBBEkgARAhIgJBj4CAAUtyDQFBAyEHIAJBBHYLIQIgAEHw4gFqIAEgB2otAAAgAkEgahAQIQEgACACNgKA4gEgACABNgLw4QEgB0EBaiEHCyAHC0sAIABC+erQ0OfJoeThADcDICAAQgA3AxggAELP1tO+0ser2UI3AxAgAELW64Lu6v2J9eAANwMIIABCADcDACAAQShqQQBBKBAQGgviAgICfwV+IABBKGoiASAAKAJIaiECAn4gACkDACIDQiBaBEAgACkDECIEQgeJIAApAwgiBUIBiXwgACkDGCIGQgyJfCAAKQMgIgdCEol8IAUQGSAEEBkgBhAZIAcQGQwBCyAAKQMYQsXP2bLx5brqJ3wLIAN8IQMDQCABQQhqIgAgAk0EQEIAIAEpAAAQCSADhUIbiUKHla+vmLbem55/fkLj3MqV/M7y9YV/fCEDIAAhAQwBCwsCQCABQQRqIgAgAksEQCABIQAMAQsgASgAAK1Ch5Wvr5i23puef34gA4VCF4lCz9bTvtLHq9lCfkL5893xmfaZqxZ8IQMLA0AgACACSQRAIAAxAABCxc/ZsvHluuonfiADhUILiUKHla+vmLbem55/fiEDIABBAWohAAwBCwsgA0IhiCADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC+8CAgJ/BH4gACAAKQMAIAKtfDcDAAJAAkAgACgCSCIDIAJqIgRBH00EQCABRQ0BIAAgA2pBKGogASACECAgACgCSCACaiEEDAELIAEgAmohAgJ/IAMEQCAAQShqIgQgA2ogAUEgIANrECAgACAAKQMIIAQpAAAQCTcDCCAAIAApAxAgACkAMBAJNwMQIAAgACkDGCAAKQA4EAk3AxggACAAKQMgIABBQGspAAAQCTcDICAAKAJIIQMgAEEANgJIIAEgA2tBIGohAQsgAUEgaiACTQsEQCACQWBqIQMgACkDICEFIAApAxghBiAAKQMQIQcgACkDCCEIA0AgCCABKQAAEAkhCCAHIAEpAAgQCSEHIAYgASkAEBAJIQYgBSABKQAYEAkhBSABQSBqIgEgA00NAAsgACAFNwMgIAAgBjcDGCAAIAc3AxAgACAINwMICyABIAJPDQEgAEEoaiABIAIgAWsiBBAgCyAAIAQ2AkgLCy8BAX8gAEUEQEG2f0EAIAMbDwtBun8hBCADIAFNBH8gACACIAMQEBogAwVBun8LCy8BAX8gAEUEQEG2f0EAIAMbDwtBun8hBCADIAFNBH8gACACIAMQCxogAwVBun8LC6gCAQZ/IwBBEGsiByQAIABB2OABaikDAEKAgIAQViEIQbh/IQUCQCAEQf//B0sNACAAIAMgBBBCIgUQAyIGDQAgACgCnOIBIQkgACAHQQxqIAMgAyAFaiAGGyIKIARBACAFIAYbayIGEEAiAxADBEAgAyEFDAELIAcoAgwhBCABRQRAQbp/IQUgBEEASg0BCyAGIANrIQUgAyAKaiEDAkAgCQRAIABBADYCnOIBDAELAkACQAJAIARBBUgNACAAQdjgAWopAwBCgICACFgNAAwBCyAAQQA2ApziAQwBCyAAKAIIED8hBiAAQQA2ApziASAGQRRPDQELIAAgASACIAMgBSAEIAgQOSEFDAELIAAgASACIAMgBSAEIAgQOiEFCyAHQRBqJAAgBQtnACAAQdDgAWogASACIAAoAuzhARAuIgEQAwRAIAEPC0G4fyECAkAgAQ0AIABB7OABaigCACIBBEBBYCECIAAoApjiASABRw0BC0EAIQIgAEHw4AFqKAIARQ0AIABBkOEBahBDCyACCycBAX8QVyIERQRAQUAPCyAEIAAgASACIAMgBBBLEE8hACAEEFYgAAs/AQF/AkACQAJAIAAoAqDiAUEBaiIBQQJLDQAgAUEBaw4CAAECCyAAEDBBAA8LIABBADYCoOIBCyAAKAKU4gELvAMCB38BfiMAQRBrIgkkAEG4fyEGAkAgBCgCACIIQQVBCSAAKALs4QEiBRtJDQAgAygCACIHQQFBBSAFGyAFEC8iBRADBEAgBSEGDAELIAggBUEDakkNACAAIAcgBRBJIgYQAw0AIAEgAmohCiAAQZDhAWohCyAIIAVrIQIgBSAHaiEHIAEhBQNAIAcgAiAJECwiBhADDQEgAkF9aiICIAZJBEBBuH8hBgwCCyAJKAIAIghBAksEQEFsIQYMAgsgB0EDaiEHAn8CQAJAAkAgCEEBaw4CAgABCyAAIAUgCiAFayAHIAYQSAwCCyAFIAogBWsgByAGEEcMAQsgBSAKIAVrIActAAAgCSgCCBBGCyIIEAMEQCAIIQYMAgsgACgC8OABBEAgCyAFIAgQRQsgAiAGayECIAYgB2ohByAFIAhqIQUgCSgCBEUNAAsgACkD0OABIgxCf1IEQEFsIQYgDCAFIAFrrFINAQsgACgC8OABBEBBaiEGIAJBBEkNASALEEQhDCAHKAAAIAynRw0BIAdBBGohByACQXxqIQILIAMgBzYCACAEIAI2AgAgBSABayEGCyAJQRBqJAAgBgsuACAAECsCf0EAQQAQAw0AGiABRSACRXJFBEBBYiAAIAEgAhA9EAMNARoLQQALCzcAIAEEQCAAIAAoAsTgASABKAIEIAEoAghqRzYCnOIBCyAAECtBABADIAFFckUEQCAAIAEQWwsL0QIBB38jAEEQayIGJAAgBiAENgIIIAYgAzYCDCAFBEAgBSgCBCEKIAUoAgghCQsgASEIAkACQANAIAAoAuzhARAWIQsCQANAIAQgC0kNASADKAAAQXBxQdDUtMIBRgRAIAMgBBAiIgcQAw0EIAQgB2shBCADIAdqIQMMAQsLIAYgAzYCDCAGIAQ2AggCQCAFBEAgACAFEE5BACEHQQAQA0UNAQwFCyAAIAogCRBNIgcQAw0ECyAAIAgQUCAMQQFHQQAgACAIIAIgBkEMaiAGQQhqEEwiByIDa0EAIAMQAxtBCkdyRQRAQbh/IQcMBAsgBxADDQMgAiAHayECIAcgCGohCEEBIQwgBigCDCEDIAYoAgghBAwBCwsgBiADNgIMIAYgBDYCCEG4fyEHIAQNASAIIAFrIQcMAQsgBiADNgIMIAYgBDYCCAsgBkEQaiQAIAcLRgECfyABIAAoArjgASICRwRAIAAgAjYCxOABIAAgATYCuOABIAAoArzgASEDIAAgATYCvOABIAAgASADIAJrajYCwOABCwutAgIEfwF+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"})});
|