@jdultra/threedtiles 9.2.16 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -41,13 +41,22 @@ const ogc3DTile = new OGC3DTile({
41
41
  scene.add(ogc3DTile);
42
42
  ```
43
43
 
44
- It's up to the user to call updates on the tileset. You might call them whenever the camera moves or at regular time intervals like here:
44
+ It's up to the user to call updates on the tileset.
45
45
  ```
46
- setInterval(function () {
46
+ function animate() {
47
+ requestAnimationFrame(animate);
48
+
47
49
  ogc3DTile.update(camera);
48
- }, 20);
50
+ ogc3DTile.tileLoader.update(); // important, since v10!
51
+
52
+ ...
53
+
54
+ }
49
55
  ```
50
56
 
57
+ It is discouraged to call the update functions outside the render loop in a setInterval for example.
58
+ While that may work fine on desktop, mobile browsers tend to block an entire frame when a timeout triggers in it.
59
+
51
60
  Here is a simple project : [Getting started](https://drive.google.com/file/d/1kJ-yfYmy8ShOMMPPXgqW2gMgGkLOIidf/view?usp=share_link)
52
61
 
53
62
  Unzip and run :
@@ -175,9 +184,11 @@ const ogc3DTile = new OGC3DTile({
175
184
  ```
176
185
  If using a shared cache between tilesets, check out the next section.
177
186
 
178
- ### Cache
179
- You may instanciate a cache through the TileLoader class and re-use it for several or all your tilesets.
180
- The limitation is that all the tilesets using the same cache will have the same callback.
187
+ ### Cache and TileLoader
188
+ The Tile loader handles the loading strategy, managing a cache and the order for tile downloads and loads.
189
+
190
+ You may re-use the Tile loader for several or all your tilesets.
191
+ The limitation is that all the tilesets using the same TileLoader will have the same mesh/points callback.
181
192
 
182
193
  The TileLoader takes an optional object as argument:
183
194
  @param {Object} [options] - Optional configuration object.
@@ -203,12 +214,33 @@ const tileLoader = new TileLoader({
203
214
  points.material.sizeAttenuation = true;
204
215
  }
205
216
  });
206
- const ogc3DTile = new OGC3DTile({
207
- url: "https://storage.googleapis.com/ogc-3d-tiles/ayutthaya/tileset.json",
217
+ const ogc3DTile1 = new OGC3DTile({
218
+ url: "...",
208
219
  renderer: renderer,
209
220
  tileLoader: tileLoader,
210
221
  meshCallback: mesh => { mesh.material.wireframe = true;} // This callback will not be used as the callback provided to the TileLoader takes priority
211
222
  });
223
+
224
+ const ogc3DTile2 = new OGC3DTile({
225
+ url: "...",
226
+ renderer: renderer,
227
+ tileLoader: tileLoader
228
+ });
229
+ ```
230
+
231
+ If you use the same tile loader for several tilesets, you can call update on it just once per frame:
232
+
233
+ ```
234
+ function animate() {
235
+ requestAnimationFrame(animate);
236
+
237
+ ogc3DTile1.update(camera);
238
+ ogc3DTile2.update(camera);
239
+ tileLoader.update(); // important! since v10
240
+
241
+ ...
242
+
243
+ }
212
244
  ```
213
245
 
214
246
  ### Transformations
@@ -305,11 +337,11 @@ for (let i = 0; i < 100; i++) {
305
337
  geometricErrorMultiplier: 1.0,
306
338
  loadOutsideView: false,
307
339
  tileLoader: instancedTileLoader,
308
- static: true // when static is set to true, don't forget to call InstancedOGC3DTile#updateMatrix manually
340
+ static: true // when static is set to true, you must call InstancedOGC3DTile#updateMatrix manually
309
341
  });
310
342
 
311
343
  tileset.translateOnAxis(new THREE.Vector3(1, 0, 0), 50 * i);
312
- tileset.updateMatrix();
344
+ tileset.updateMatrix(); // important when static property is true
313
345
  scene.add(tileset);
314
346
  instancedTilesets.push(tileset);
315
347
  }
@@ -344,27 +376,40 @@ const ogc3DTile = new OGC3DTile({
344
376
  ```
345
377
  This property is also available for instanced models.
346
378
 
347
- ### static tilesets and other performance tips
348
- When you know your tileset will be static, you can specify it in the OGC3DTile object constructor parameter.
379
+ ### Performance tips
380
+
381
+ #### static tilesets
382
+ When you know your tileset will be static or move rarely, you can specify it in the OGC3DTile object constructor parameter.
349
383
  This will skip recalculating the transformation matrix of every tile each frame and give a few extra frames per second.
350
384
 
385
+ However, you'll need to manually call #updateMatrix and #updateMatrixWorld on the OGC3DTile object whenever you apply a transformation.
386
+
351
387
  ```
352
388
  const ogc3DTile = new OGC3DTile({
353
389
  url: "path/to/tileset.json",
354
390
  renderer: renderer,
355
391
  static: true
356
392
  });
357
- ```
358
393
 
359
- Either way, it's advised to set the autoUpdate property of the scene to false and call Scene#updateMatrixWorld manually whenever you move things around.
394
+ setTimeout(()=>{
360
395
 
396
+ ogc3DTile.rotateOnAxis(new THREE.Vector3(1, 0, 0), Math.PI * -0.5);
397
+ ogc3DTile.updateMatrix();
398
+ ogc3DTile.updateMatrixWorld(true);
399
+ },1000)
361
400
  ```
362
- scene.matrixAutoUpdate = false;
363
- scene.matrixWorldAutoUpdate = false;
364
401
 
365
- // and when objects move:
366
- scene.updateMatrixWorld(true);
402
+ For InstancedOGC3DTile objects, You only need to call instancedOgc3DTile#updateMatrix() and the gains will be much less significant.
403
+
404
+ ```
405
+ const ogc3DTile = new InstancedOGC3DTile({
406
+ ...
407
+ });
367
408
 
409
+ setTimeout(()=>{
410
+ ogc3DTile.rotateOnAxis(new THREE.Vector3(1, 0, 0), Math.PI * -0.5);
411
+ ogc3DTile.updateMatrix();
412
+ },1000)
368
413
  ```
369
414
  ### Draco and Ktx2
370
415
  Compressed meshes via Draco and compressed textures in Ktx2 format are supported automatically using the threejs plugins.
@@ -1,3 +1,3 @@
1
1
  /*! For license information please see threedtiles.min.js.LICENSE.txt */
2
- !function(A,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("three")):"function"==typeof define&&define.amd?define(["three"],e):"object"==typeof exports?exports.threedtiles=e(require("three")):A.threedtiles=e(A.THREE)}(this,(A=>(()=>{var e={649:(A,e,t)=>{const s=t(180),r=t(31),i=t(839);A.exports={Heap:s,Queue:r,LinkedHashMap:i}},180:A=>{A.exports=class{constructor(A,e){if(this._data=[],this._comparator=function(A,e){return A>=e},null!=A){if(!Array.isArray(A))throw Error("Constructor expects data to be an array");this._data=A}if(null!=e){if("function"!=typeof e)throw Error("Constructor expects comparator to be a function");this._comparator=e}}peek(){return this.size()<1?null:this._data[0]}pop(){if(this.size()<1)return null;const A=this._data[0];return this.swap(this.size()-1,0),this._data.pop(),this.heapifyDown(0),A}replaceTop(A){if(this.size()<1)return null;const e=this._data[0];return this._data[0]=A,this.heapifyDown(0),e}push(A){this._data.push(A),this.heapifyUp(this._data.length-1)}size(){return this._data.length}swap(A,e){const t=this._data[A];this._data[A]=this._data[e],this._data[e]=t}heapifyUp(A){if(0===A)return;const e=Math.floor((A-1)/2);this._comparator(this._data[A],this._data[e])||(this.swap(A,e),this.heapifyUp(e))}heapifyDown(A){const e=2*A+1,t=2*A+2;if(e>=this._data.length)return;const s=t<this._data.length&&!this._comparator(this._data[t],this._data[e])?t:e;this._comparator(this._data[A],this._data[s])&&(this.swap(A,s),this.heapifyDown(s))}}},839:A=>{A.exports=class{constructor(){this._data=new Map,this._link=new Map,this._head=void 0,this._tail=void 0}put(A,e,t=!1){this.has(A)?this._data.set(A,e):(this._data.set(A,e),this._link.set(A,{previous:void 0,next:void 0}),null==this._head?(this._head=A,this._tail=A):t?(this._link.get(this._head).previous=A,this._link.get(A).next=this._head,this._head=A):(this._link.get(this._tail).next=A,this._link.get(A).previous=this._tail,this._tail=A))}head(){return{key:this._head,value:this.get(this._head),next:()=>this.next(this._head),previous:()=>null}}tail(){return{key:this._tail,value:this.get(this._tail),next:()=>null,previous:()=>this.previous(this._tail)}}get(A){return this._data.get(A)}previousKey(A){const e=this._link.get(A);return null!=e?e.previous:void 0}previousValue(A){return this.get(this.previousKey(A))}previous(A){const e=this.previousKey(A);return{key:e,value:this.get(e),next:()=>this.next(e),previous:()=>this.previous(e)}}nextKey(A){const e=this._link.get(A);return null!=e?e.next:void 0}nextValue(A){return this.get(this.nextKey(A))}next(A){const e=this.nextKey(A);return{key:e,value:this.get(e),next:()=>this.next(e),previous:()=>this.previous(e)}}remove(A){const e=this._data.get(A);if(null!=e)if(1===this.size())this.reset();else{if(A===this._head){const A=this._link.get(this._head);this._link.get(A.next).previous=null,this._head=A.next}else if(A===this._tail){const A=this._link.get(this._tail);this._link.get(A.previous).next=null,this._tail=A.previous}else{const e=this._link.get(A),t=this._link.get(e.previous),s=this._link.get(e.next);t.next=e.next,s.previous=e.previous}this._link.delete(A),this._data.delete(A)}return e}has(A){return this._data.has(A)}size(){return this._data.size}reset(){this._data.clear(),this._link.clear(),this._head=void 0,this._tail=void 0}keys(){return this._data.keys()}values(){return this._data.values()}entries(){return this._data.entries()}toArray(A="orderByInsert"){if("orderByInsert"!==A){const A=[];let e=this._head;for(;null!=e;)A.push({key:e,value:this.get(e)}),e=this.nextKey(e);return A}return Array.from(this.keys()).map((A=>({key:A,value:this.get(A)})))}}},31:A=>{A.exports=class{constructor(A,e){if(this._data=[],this._head=0,this._cap=null,null!=A){if(!Array.isArray(A))throw Error("Constructor expects data to be an array");this._data=A}if(null!=e){if("number"!=typeof e)throw Error("Constructor expects capacity to be a number");this._cap=e}}enqueue(A){return!(null!=this._cap&&this.size()>=this._cap)&&(this._data.push(A),!0)}dequeue(){if(0===this.size())return null;const A=this._data[this._head];return this._head+=1,2*this._head>=this._data.length&&(this._data=this._data.slice(this._head),this._head=0),A}peek(A=!1){return this.size()>0?A?this._data[this._data.length-1]:this._data[this._head]:null}size(){return this._data.length-this._head}updateCapacity(A){this._cap=A}reset(){this._data=[],this._head=0}forEach(A){for(let e=this._head;e<this._data.length;e+=1)A(this._data[e],e-this._head)}toArray(){return this._data.slice(this._head)}}},975:A=>{"use strict";function e(A){if("string"!=typeof A)throw new TypeError("Path must be a string. Received "+JSON.stringify(A))}function t(A,e){for(var t,s="",r=0,i=-1,o=0,n=0;n<=A.length;++n){if(n<A.length)t=A.charCodeAt(n);else{if(47===t)break;t=47}if(47===t){if(i===n-1||1===o);else if(i!==n-1&&2===o){if(s.length<2||2!==r||46!==s.charCodeAt(s.length-1)||46!==s.charCodeAt(s.length-2))if(s.length>2){var a=s.lastIndexOf("/");if(a!==s.length-1){-1===a?(s="",r=0):r=(s=s.slice(0,a)).length-1-s.lastIndexOf("/"),i=n,o=0;continue}}else if(2===s.length||1===s.length){s="",r=0,i=n,o=0;continue}e&&(s.length>0?s+="/..":s="..",r=2)}else s.length>0?s+="/"+A.slice(i+1,n):s=A.slice(i+1,n),r=n-i-1;i=n,o=0}else 46===t&&-1!==o?++o:o=-1}return s}var s={resolve:function(){for(var A,s="",r=!1,i=arguments.length-1;i>=-1&&!r;i--){var o;i>=0?o=arguments[i]:(void 0===A&&(A=process.cwd()),o=A),e(o),0!==o.length&&(s=o+"/"+s,r=47===o.charCodeAt(0))}return s=t(s,!r),r?s.length>0?"/"+s:"/":s.length>0?s:"."},normalize:function(A){if(e(A),0===A.length)return".";var s=47===A.charCodeAt(0),r=47===A.charCodeAt(A.length-1);return 0!==(A=t(A,!s)).length||s||(A="."),A.length>0&&r&&(A+="/"),s?"/"+A:A},isAbsolute:function(A){return e(A),A.length>0&&47===A.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var A,t=0;t<arguments.length;++t){var r=arguments[t];e(r),r.length>0&&(void 0===A?A=r:A+="/"+r)}return void 0===A?".":s.normalize(A)},relative:function(A,t){if(e(A),e(t),A===t)return"";if((A=s.resolve(A))===(t=s.resolve(t)))return"";for(var r=1;r<A.length&&47===A.charCodeAt(r);++r);for(var i=A.length,o=i-r,n=1;n<t.length&&47===t.charCodeAt(n);++n);for(var a=t.length-n,g=o<a?o:a,l=-1,c=0;c<=g;++c){if(c===g){if(a>g){if(47===t.charCodeAt(n+c))return t.slice(n+c+1);if(0===c)return t.slice(n+c)}else o>g&&(47===A.charCodeAt(r+c)?l=c:0===c&&(l=0));break}var h=A.charCodeAt(r+c);if(h!==t.charCodeAt(n+c))break;47===h&&(l=c)}var I="";for(c=r+l+1;c<=i;++c)c!==i&&47!==A.charCodeAt(c)||(0===I.length?I+="..":I+="/..");return I.length>0?I+t.slice(n+l):(n+=l,47===t.charCodeAt(n)&&++n,t.slice(n))},_makeLong:function(A){return A},dirname:function(A){if(e(A),0===A.length)return".";for(var t=A.charCodeAt(0),s=47===t,r=-1,i=!0,o=A.length-1;o>=1;--o)if(47===(t=A.charCodeAt(o))){if(!i){r=o;break}}else i=!1;return-1===r?s?"/":".":s&&1===r?"//":A.slice(0,r)},basename:function(A,t){if(void 0!==t&&"string"!=typeof t)throw new TypeError('"ext" argument must be a string');e(A);var s,r=0,i=-1,o=!0;if(void 0!==t&&t.length>0&&t.length<=A.length){if(t.length===A.length&&t===A)return"";var n=t.length-1,a=-1;for(s=A.length-1;s>=0;--s){var g=A.charCodeAt(s);if(47===g){if(!o){r=s+1;break}}else-1===a&&(o=!1,a=s+1),n>=0&&(g===t.charCodeAt(n)?-1==--n&&(i=s):(n=-1,i=a))}return r===i?i=a:-1===i&&(i=A.length),A.slice(r,i)}for(s=A.length-1;s>=0;--s)if(47===A.charCodeAt(s)){if(!o){r=s+1;break}}else-1===i&&(o=!1,i=s+1);return-1===i?"":A.slice(r,i)},extname:function(A){e(A);for(var t=-1,s=0,r=-1,i=!0,o=0,n=A.length-1;n>=0;--n){var a=A.charCodeAt(n);if(47!==a)-1===r&&(i=!1,r=n+1),46===a?-1===t?t=n:1!==o&&(o=1):-1!==t&&(o=-1);else if(!i){s=n+1;break}}return-1===t||-1===r||0===o||1===o&&t===r-1&&t===s+1?"":A.slice(t,r)},format:function(A){if(null===A||"object"!=typeof A)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof A);return function(A,e){var t=e.dir||e.root,s=e.base||(e.name||"")+(e.ext||"");return t?t===e.root?t+s:t+A+s:s}("/",A)},parse:function(A){e(A);var t={root:"",dir:"",base:"",ext:"",name:""};if(0===A.length)return t;var s,r=A.charCodeAt(0),i=47===r;i?(t.root="/",s=1):s=0;for(var o=-1,n=0,a=-1,g=!0,l=A.length-1,c=0;l>=s;--l)if(47!==(r=A.charCodeAt(l)))-1===a&&(g=!1,a=l+1),46===r?-1===o?o=l:1!==c&&(c=1):-1!==o&&(c=-1);else if(!g){n=l+1;break}return-1===o||-1===a||0===c||1===c&&o===a-1&&o===n+1?-1!==a&&(t.base=t.name=0===n&&i?A.slice(1,a):A.slice(n,a)):(0===n&&i?(t.name=A.slice(1,o),t.base=A.slice(1,a)):(t.name=A.slice(n,o),t.base=A.slice(n,a)),t.ext=A.slice(o,a)),n>0?t.dir=A.slice(0,n-1):i&&(t.dir="/"),t},sep:"/",delimiter:":",win32:null,posix:null};s.posix=s,A.exports=s},818:e=>{"use strict";e.exports=A}},t={};function s(A){var r=t[A];if(void 0!==r)return r.exports;var i=t[A]={exports:{}};return e[A](i,i.exports,s),i.exports}s.d=(A,e)=>{for(var t in e)s.o(e,t)&&!s.o(A,t)&&Object.defineProperty(A,t,{enumerable:!0,get:e[t]})},s.o=(A,e)=>Object.prototype.hasOwnProperty.call(A,e),s.r=A=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(A,"__esModule",{value:!0})};var r={};return(()=>{"use strict";s.r(r),s.d(r,{B3DMDecoder:()=>_A,InstancedOGC3DTile:()=>Te,InstancedTileLoader:()=>Fe,OBB:()=>i,OGC3DTile:()=>ue,OcclusionCullingService:()=>t,TileLoader:()=>zA});var A=s(818);Math.PI,Math.PI;function e(A,e,t){return Math.max(e,Math.min(t,A))}class t{constructor(){this.cullMap=[],this.cullMaterial=new A.MeshBasicMaterial({vertexColors:!0}),this.cullMaterial.side=A.FrontSide,this.cullTarget=this.createCullTarget(),this.cullPixels=new Uint8Array(4*this.cullTarget.width*this.cullTarget.height)}setSide(A){this.cullMaterial.side=A}createCullTarget(){const e=new A.WebGLRenderTarget(Math.floor(.05*window.innerWidth),Math.floor(.05*window.innerHeight));return e.texture.format=A.RGBAFormat,e.texture.colorSpace=A.LinearEncoding,e.texture.minFilter=A.NearestFilter,e.texture.magFilter=A.NearestFilter,e.texture.generateMipmaps=!1,e.stencilBuffer=!1,e.depthBuffer=!0,e.depthTexture=new A.DepthTexture,e.depthTexture.format=A.DepthFormat,e.depthTexture.type=A.UnsignedShortType,e}update(A,t,s){let r=t.getRenderTarget(),i=A.overrideMaterial;A.overrideMaterial=this.cullMaterial,t.setRenderTarget(this.cullTarget),t.render(A,s),A.overrideMaterial=i,t.setRenderTarget(r),t.readRenderTargetPixels(this.cullTarget,0,0,this.cullTarget.width,this.cullTarget.height,this.cullPixels),this.cullMap=[];for(let A=0;A<this.cullPixels.length;A+=4){const t=e(this.cullPixels[A],0,255)<<16^e(this.cullPixels[A+1],0,255)<<8^e(this.cullPixels[A+2],0,255)<<0;this.cullMap[t]=!0}}hasID(A){return this.cullMap[A]}}class i{constructor(e){this.center=new A.Vector3(e[0],e[1],e[2]);var t=new A.Vector3(e[3],e[4],e[4]),s=new A.Vector3(e[6],e[7],e[8]),r=new A.Vector3(e[9],e[10],e[11]);this.halfWidth=t.length(),this.halfHeight=s.length(),this.halfDepth=r.length(),t.normalize(),s.normalize(),r.normalize(),this.sphere=new A.Sphere(this.center,Math.sqrt(this.halfWidth*this.halfWidth+this.halfHeight*this.halfHeight+this.halfDepth*this.halfDepth)),this.matrixToOBBCoordinateSystem=new A.Matrix3,this.matrixToOBBCoordinateSystem.set(t.x,t.y,t.z,s.x,s.y,s.z,r.x,r.y,r.z)}inFrustum(A){return A.intersectsSphere(this.sphere)}distanceToPoint(A){let e=A.clone();e.sub(this.center),e.applyMatrix3(this.matrixToOBBCoordinateSystem);let t=Math.max(0,Math.max(-this.halfWidth-e.x,e.x-this.halfWidth)),s=Math.max(0,Math.max(-this.halfHeight-e.y,e.y-this.halfHeight)),r=Math.max(0,Math.max(-this.halfDepth-e.z,e.z-this.halfDepth));return Math.sqrt(t*t+s*s+r*r)}}var o=s(649);function n(e,t=!1){const s=null!==e[0].index,r=new Set(Object.keys(e[0].attributes)),i=new Set(Object.keys(e[0].morphAttributes)),o={},n={},g=e[0].morphTargetsRelative,l=new A.BufferGeometry;let c=0;for(let A=0;A<e.length;++A){const a=e[A];let h=0;if(s!==(null!==a.index))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(const e in a.attributes){if(!r.has(e))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+'. All geometries must have compatible attributes; make sure "'+e+'" attribute exists among all geometries, or in none of them.'),null;void 0===o[e]&&(o[e]=[]),o[e].push(a.attributes[e]),h++}if(h!==r.size)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". Make sure all geometries have the same number of attributes."),null;if(g!==a.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(const e in a.morphAttributes){if(!i.has(e))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". .morphAttributes must be consistent throughout all geometries."),null;void 0===n[e]&&(n[e]=[]),n[e].push(a.morphAttributes[e])}if(t){let e;if(s)e=a.index.count;else{if(void 0===a.attributes.position)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". The geometry must have either an index or a position attribute"),null;e=a.attributes.position.count}l.addGroup(c,e,A),c+=e}}if(s){let A=0;const t=[];for(let s=0;s<e.length;++s){const r=e[s].index;for(let e=0;e<r.count;++e)t.push(r.getX(e)+A);A+=e[s].attributes.position.count}l.setIndex(t)}for(const A in o){const e=a(o[A]);if(!e)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+A+" attribute."),null;l.setAttribute(A,e)}for(const A in n){const e=n[A][0].length;if(0===e)break;l.morphAttributes=l.morphAttributes||{},l.morphAttributes[A]=[];for(let t=0;t<e;++t){const e=[];for(let s=0;s<n[A].length;++s)e.push(n[A][s][t]);const s=a(e);if(!s)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+A+" morphAttribute."),null;l.morphAttributes[A].push(s)}}return l}function a(e){let t,s,r,i=-1,o=0;for(let A=0;A<e.length;++A){const n=e[A];if(n.isInterleavedBufferAttribute)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. InterleavedBufferAttributes are not supported."),null;if(void 0===t&&(t=n.array.constructor),t!==n.array.constructor)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."),null;if(void 0===s&&(s=n.itemSize),s!==n.itemSize)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."),null;if(void 0===r&&(r=n.normalized),r!==n.normalized)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."),null;if(-1===i&&(i=n.gpuType),i!==n.gpuType)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."),null;o+=n.array.length}const n=new t(o);let a=0;for(let A=0;A<e.length;++A)n.set(e[A].array,a),a+=e[A].array.length;const g=new A.BufferAttribute(n,s,r);return void 0!==i&&(g.gpuType=i),g}function g(e,t){if(t===A.TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),e;if(t===A.TriangleFanDrawMode||t===A.TriangleStripDrawMode){let s=e.getIndex();if(null===s){const A=[],t=e.getAttribute("position");if(void 0===t)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),e;for(let e=0;e<t.count;e++)A.push(e);e.setIndex(A),s=e.getIndex()}const r=s.count-2,i=[];if(t===A.TriangleFanDrawMode)for(let A=1;A<=r;A++)i.push(s.getX(0)),i.push(s.getX(A)),i.push(s.getX(A+1));else for(let A=0;A<r;A++)A%2==0?(i.push(s.getX(A)),i.push(s.getX(A+1)),i.push(s.getX(A+2))):(i.push(s.getX(A+2)),i.push(s.getX(A+1)),i.push(s.getX(A)));i.length/3!==r&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const o=e.clone();return o.setIndex(i),o.clearGroups(),o}return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",t),e}class l extends A.Loader{constructor(A){super(A),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register((function(A){return new d(A)})),this.register((function(A){return new w(A)})),this.register((function(A){return new D(A)})),this.register((function(A){return new x(A)})),this.register((function(A){return new u(A)})),this.register((function(A){return new Q(A)})),this.register((function(A){return new f(A)})),this.register((function(A){return new p(A)})),this.register((function(A){return new B(A)})),this.register((function(A){return new m(A)})),this.register((function(A){return new E(A)})),this.register((function(A){return new y(A)})),this.register((function(A){return new I(A)})),this.register((function(A){return new R(A)})),this.register((function(A){return new S(A)}))}load(e,t,s,r){const i=this;let o;o=""!==this.resourcePath?this.resourcePath:""!==this.path?this.path:A.LoaderUtils.extractUrlBase(e),this.manager.itemStart(e);const n=function(A){r?r(A):console.error(A),i.manager.itemError(e),i.manager.itemEnd(e)},a=new A.FileLoader(this.manager);a.setPath(this.path),a.setResponseType("arraybuffer"),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,(function(A){try{i.parse(A,o,(function(A){t(A),i.manager.itemEnd(e)}),n)}catch(A){n(A)}}),s,n)}setDRACOLoader(A){return this.dracoLoader=A,this}setDDSLoader(){throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".')}setKTX2Loader(A){return this.ktx2Loader=A,this}setMeshoptDecoder(A){return this.meshoptDecoder=A,this}register(A){return-1===this.pluginCallbacks.indexOf(A)&&this.pluginCallbacks.push(A),this}unregister(A){return-1!==this.pluginCallbacks.indexOf(A)&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(A),1),this}parse(A,e,t,s){let r;const i={},o={},n=new TextDecoder;if("string"==typeof A)r=JSON.parse(A);else if(A instanceof ArrayBuffer){if(n.decode(new Uint8Array(A,0,4))===T){try{i[h.KHR_BINARY_GLTF]=new L(A)}catch(A){return void(s&&s(A))}r=JSON.parse(i[h.KHR_BINARY_GLTF].content)}else r=JSON.parse(n.decode(A))}else r=A;if(void 0===r.asset||r.asset.version[0]<2)return void(s&&s(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")));const a=new rA(r,{path:e||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});a.fileLoader.setRequestHeader(this.requestHeader);for(let A=0;A<this.pluginCallbacks.length;A++){const e=this.pluginCallbacks[A](a);o[e.name]=e,i[e.name]=!0}if(r.extensionsUsed)for(let A=0;A<r.extensionsUsed.length;++A){const e=r.extensionsUsed[A],t=r.extensionsRequired||[];switch(e){case h.KHR_MATERIALS_UNLIT:i[e]=new C;break;case h.KHR_DRACO_MESH_COMPRESSION:i[e]=new F(r,this.dracoLoader);break;case h.KHR_TEXTURE_TRANSFORM:i[e]=new G;break;case h.KHR_MESH_QUANTIZATION:i[e]=new k;break;default:t.indexOf(e)>=0&&void 0===o[e]&&console.warn('THREE.GLTFLoader: Unknown extension "'+e+'".')}}a.setExtensions(i),a.setPlugins(o),a.parse(t,s)}parseAsync(A,e){const t=this;return new Promise((function(s,r){t.parse(A,e,s,r)}))}}function c(){let A={};return{get:function(e){return A[e]},add:function(e,t){A[e]=t},remove:function(e){delete A[e]},removeAll:function(){A={}}}}const h={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_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_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 I{constructor(A){this.parser=A,this.name=h.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const A=this.parser,e=this.parser.json.nodes||[];for(let t=0,s=e.length;t<s;t++){const s=e[t];s.extensions&&s.extensions[this.name]&&void 0!==s.extensions[this.name].light&&A._addNodeRef(this.cache,s.extensions[this.name].light)}}_loadLight(e){const t=this.parser,s="light:"+e;let r=t.cache.get(s);if(r)return r;const i=t.json,o=((i.extensions&&i.extensions[this.name]||{}).lights||[])[e];let n;const a=new A.Color(16777215);void 0!==o.color&&a.fromArray(o.color);const g=void 0!==o.range?o.range:0;switch(o.type){case"directional":n=new A.DirectionalLight(a),n.target.position.set(0,0,-1),n.add(n.target);break;case"point":n=new A.PointLight(a),n.distance=g;break;case"spot":n=new A.SpotLight(a),n.distance=g,o.spot=o.spot||{},o.spot.innerConeAngle=void 0!==o.spot.innerConeAngle?o.spot.innerConeAngle:0,o.spot.outerConeAngle=void 0!==o.spot.outerConeAngle?o.spot.outerConeAngle:Math.PI/4,n.angle=o.spot.outerConeAngle,n.penumbra=1-o.spot.innerConeAngle/o.spot.outerConeAngle,n.target.position.set(0,0,-1),n.add(n.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+o.type)}return n.position.set(0,0,0),n.decay=2,Z(n,o),void 0!==o.intensity&&(n.intensity=o.intensity),n.name=t.createUniqueName(o.name||"light_"+e),r=Promise.resolve(n),t.cache.add(s,r),r}getDependency(A,e){if("light"===A)return this._loadLight(e)}createNodeAttachment(A){const e=this,t=this.parser,s=t.json.nodes[A],r=(s.extensions&&s.extensions[this.name]||{}).light;return void 0===r?null:this._loadLight(r).then((function(A){return t._getNodeRef(e.cache,r,A)}))}}class C{constructor(){this.name=h.KHR_MATERIALS_UNLIT}getMaterialType(){return A.MeshBasicMaterial}extendParams(e,t,s){const r=[];e.color=new A.Color(1,1,1),e.opacity=1;const i=t.pbrMetallicRoughness;if(i){if(Array.isArray(i.baseColorFactor)){const A=i.baseColorFactor;e.color.fromArray(A),e.opacity=A[3]}void 0!==i.baseColorTexture&&r.push(s.assignTexture(e,"map",i.baseColorTexture,A.SRGBColorSpace))}return Promise.all(r)}}class B{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(A,e){const t=this.parser.json.materials[A];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const s=t.extensions[this.name].emissiveStrength;return void 0!==s&&(e.emissiveIntensity=s),Promise.resolve()}}class d{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const s=this.parser,r=s.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const i=[],o=r.extensions[this.name];if(void 0!==o.clearcoatFactor&&(t.clearcoat=o.clearcoatFactor),void 0!==o.clearcoatTexture&&i.push(s.assignTexture(t,"clearcoatMap",o.clearcoatTexture)),void 0!==o.clearcoatRoughnessFactor&&(t.clearcoatRoughness=o.clearcoatRoughnessFactor),void 0!==o.clearcoatRoughnessTexture&&i.push(s.assignTexture(t,"clearcoatRoughnessMap",o.clearcoatRoughnessTexture)),void 0!==o.clearcoatNormalTexture&&(i.push(s.assignTexture(t,"clearcoatNormalMap",o.clearcoatNormalTexture)),void 0!==o.clearcoatNormalTexture.scale)){const e=o.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new A.Vector2(e,e)}return Promise.all(i)}}class E{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser,s=t.json.materials[A];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],i=s.extensions[this.name];return void 0!==i.iridescenceFactor&&(e.iridescence=i.iridescenceFactor),void 0!==i.iridescenceTexture&&r.push(t.assignTexture(e,"iridescenceMap",i.iridescenceTexture)),void 0!==i.iridescenceIor&&(e.iridescenceIOR=i.iridescenceIor),void 0===e.iridescenceThicknessRange&&(e.iridescenceThicknessRange=[100,400]),void 0!==i.iridescenceThicknessMinimum&&(e.iridescenceThicknessRange[0]=i.iridescenceThicknessMinimum),void 0!==i.iridescenceThicknessMaximum&&(e.iridescenceThicknessRange[1]=i.iridescenceThicknessMaximum),void 0!==i.iridescenceThicknessTexture&&r.push(t.assignTexture(e,"iridescenceThicknessMap",i.iridescenceThicknessTexture)),Promise.all(r)}}class u{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_SHEEN}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const s=this.parser,r=s.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const i=[];t.sheenColor=new A.Color(0,0,0),t.sheenRoughness=0,t.sheen=1;const o=r.extensions[this.name];return void 0!==o.sheenColorFactor&&t.sheenColor.fromArray(o.sheenColorFactor),void 0!==o.sheenRoughnessFactor&&(t.sheenRoughness=o.sheenRoughnessFactor),void 0!==o.sheenColorTexture&&i.push(s.assignTexture(t,"sheenColorMap",o.sheenColorTexture,A.SRGBColorSpace)),void 0!==o.sheenRoughnessTexture&&i.push(s.assignTexture(t,"sheenRoughnessMap",o.sheenRoughnessTexture)),Promise.all(i)}}class Q{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser,s=t.json.materials[A];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],i=s.extensions[this.name];return void 0!==i.transmissionFactor&&(e.transmission=i.transmissionFactor),void 0!==i.transmissionTexture&&r.push(t.assignTexture(e,"transmissionMap",i.transmissionTexture)),Promise.all(r)}}class f{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_VOLUME}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const s=this.parser,r=s.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const i=[],o=r.extensions[this.name];t.thickness=void 0!==o.thicknessFactor?o.thicknessFactor:0,void 0!==o.thicknessTexture&&i.push(s.assignTexture(t,"thicknessMap",o.thicknessTexture)),t.attenuationDistance=o.attenuationDistance||1/0;const n=o.attenuationColor||[1,1,1];return t.attenuationColor=new A.Color(n[0],n[1],n[2]),Promise.all(i)}}class p{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_IOR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser.json.materials[A];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const s=t.extensions[this.name];return e.ior=void 0!==s.ior?s.ior:1.5,Promise.resolve()}}class m{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_SPECULAR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const s=this.parser,r=s.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const i=[],o=r.extensions[this.name];t.specularIntensity=void 0!==o.specularFactor?o.specularFactor:1,void 0!==o.specularTexture&&i.push(s.assignTexture(t,"specularIntensityMap",o.specularTexture));const n=o.specularColorFactor||[1,1,1];return t.specularColor=new A.Color(n[0],n[1],n[2]),void 0!==o.specularColorTexture&&i.push(s.assignTexture(t,"specularColorMap",o.specularColorTexture,A.SRGBColorSpace)),Promise.all(i)}}class y{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser,s=t.json.materials[A];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],i=s.extensions[this.name];return void 0!==i.anisotropyStrength&&(e.anisotropy=i.anisotropyStrength),void 0!==i.anisotropyRotation&&(e.anisotropyRotation=i.anisotropyRotation),void 0!==i.anisotropyTexture&&r.push(t.assignTexture(e,"anisotropyMap",i.anisotropyTexture)),Promise.all(r)}}class w{constructor(A){this.parser=A,this.name=h.KHR_TEXTURE_BASISU}loadTexture(A){const e=this.parser,t=e.json,s=t.textures[A];if(!s.extensions||!s.extensions[this.name])return null;const r=s.extensions[this.name],i=e.options.ktx2Loader;if(!i){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return e.loadTextureImage(A,r.source,i)}}class D{constructor(A){this.parser=A,this.name=h.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(A){const e=this.name,t=this.parser,s=t.json,r=s.textures[A];if(!r.extensions||!r.extensions[e])return null;const i=r.extensions[e],o=s.images[i.source];let n=t.textureLoader;if(o.uri){const A=t.options.manager.getHandler(o.uri);null!==A&&(n=A)}return this.detectSupport().then((function(r){if(r)return t.loadTextureImage(A,i.source,n);if(s.extensionsRequired&&s.extensionsRequired.indexOf(e)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return t.loadTexture(A)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(A){const e=new Image;e.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",e.onload=e.onerror=function(){A(1===e.height)}}))),this.isSupported}}class x{constructor(A){this.parser=A,this.name=h.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(A){const e=this.name,t=this.parser,s=t.json,r=s.textures[A];if(!r.extensions||!r.extensions[e])return null;const i=r.extensions[e],o=s.images[i.source];let n=t.textureLoader;if(o.uri){const A=t.options.manager.getHandler(o.uri);null!==A&&(n=A)}return this.detectSupport().then((function(r){if(r)return t.loadTextureImage(A,i.source,n);if(s.extensionsRequired&&s.extensionsRequired.indexOf(e)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return t.loadTexture(A)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(A){const e=new Image;e.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",e.onload=e.onerror=function(){A(1===e.height)}}))),this.isSupported}}class R{constructor(A){this.name=h.EXT_MESHOPT_COMPRESSION,this.parser=A}loadBufferView(A){const e=this.parser.json,t=e.bufferViews[A];if(t.extensions&&t.extensions[this.name]){const A=t.extensions[this.name],s=this.parser.getDependency("buffer",A.buffer),r=this.parser.options.meshoptDecoder;if(!r||!r.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 s.then((function(e){const t=A.byteOffset||0,s=A.byteLength||0,i=A.count,o=A.byteStride,n=new Uint8Array(e,t,s);return r.decodeGltfBufferAsync?r.decodeGltfBufferAsync(i,o,n,A.mode,A.filter).then((function(A){return A.buffer})):r.ready.then((function(){const e=new ArrayBuffer(i*o);return r.decodeGltfBuffer(new Uint8Array(e),i,o,n,A.mode,A.filter),e}))}))}return null}}class S{constructor(A){this.name=h.EXT_MESH_GPU_INSTANCING,this.parser=A}createNodeMesh(e){const t=this.parser.json,s=t.nodes[e];if(!s.extensions||!s.extensions[this.name]||void 0===s.mesh)return null;const r=t.meshes[s.mesh];for(const A of r.primitives)if(A.mode!==v.TRIANGLES&&A.mode!==v.TRIANGLE_STRIP&&A.mode!==v.TRIANGLE_FAN&&void 0!==A.mode)return null;const i=s.extensions[this.name].attributes,o=[],n={};for(const A in i)o.push(this.parser.getDependency("accessor",i[A]).then((e=>(n[A]=e,n[A]))));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then((e=>{const t=e.pop(),s=t.isGroup?t.children:[t],r=e[0].count,i=[];for(const e of s){const t=new A.Matrix4,s=new A.Vector3,o=new A.Quaternion,a=new A.Vector3(1,1,1),g=new A.InstancedMesh(e.geometry,e.material,r);for(let A=0;A<r;A++)n.TRANSLATION&&s.fromBufferAttribute(n.TRANSLATION,A),n.ROTATION&&o.fromBufferAttribute(n.ROTATION,A),n.SCALE&&a.fromBufferAttribute(n.SCALE,A),g.setMatrixAt(A,t.compose(s,o,a));for(const A in n)"TRANSLATION"!==A&&"ROTATION"!==A&&"SCALE"!==A&&e.geometry.setAttribute(A,n[A]);A.Object3D.prototype.copy.call(g,e),this.parser.assignFinalMaterial(g),i.push(g)}return t.isGroup?(t.clear(),t.add(...i),t):i[0]})))}}const T="glTF",M=1313821514,b=5130562;class L{constructor(A){this.name=h.KHR_BINARY_GLTF,this.content=null,this.body=null;const e=new DataView(A,0,12),t=new TextDecoder;if(this.header={magic:t.decode(new Uint8Array(A.slice(0,4))),version:e.getUint32(4,!0),length:e.getUint32(8,!0)},this.header.magic!==T)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const s=this.header.length-12,r=new DataView(A,12);let i=0;for(;i<s;){const e=r.getUint32(i,!0);i+=4;const s=r.getUint32(i,!0);if(i+=4,s===M){const s=new Uint8Array(A,12+i,e);this.content=t.decode(s)}else if(s===b){const t=12+i;this.body=A.slice(t,t+e)}i+=e}if(null===this.content)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class F{constructor(A,e){if(!e)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=h.KHR_DRACO_MESH_COMPRESSION,this.json=A,this.dracoLoader=e,this.dracoLoader.preload()}decodePrimitive(A,e){const t=this.json,s=this.dracoLoader,r=A.extensions[this.name].bufferView,i=A.extensions[this.name].attributes,o={},n={},a={};for(const A in i){const e=J[A]||A.toLowerCase();o[e]=i[A]}for(const e in A.attributes){const s=J[e]||e.toLowerCase();if(void 0!==i[e]){const r=t.accessors[A.attributes[e]],i=H[r.componentType];a[s]=i.name,n[s]=!0===r.normalized}}return e.getDependency("bufferView",r).then((function(A){return new Promise((function(e){s.decodeDracoFile(A,(function(A){for(const e in A.attributes){const t=A.attributes[e],s=n[e];void 0!==s&&(t.normalized=s)}e(A)}),o,a)}))}))}}class G{constructor(){this.name=h.KHR_TEXTURE_TRANSFORM}extendTexture(A,e){return void 0!==e.texCoord&&e.texCoord!==A.channel||void 0!==e.offset||void 0!==e.rotation||void 0!==e.scale?(A=A.clone(),void 0!==e.texCoord&&(A.channel=e.texCoord),void 0!==e.offset&&A.offset.fromArray(e.offset),void 0!==e.rotation&&(A.rotation=e.rotation),void 0!==e.scale&&A.repeat.fromArray(e.scale),A.needsUpdate=!0,A):A}}class k{constructor(){this.name=h.KHR_MESH_QUANTIZATION}}class U extends A.Interpolant{constructor(A,e,t,s){super(A,e,t,s)}copySampleValue_(A){const e=this.resultBuffer,t=this.sampleValues,s=this.valueSize,r=A*s*3+s;for(let A=0;A!==s;A++)e[A]=t[r+A];return e}interpolate_(A,e,t,s){const r=this.resultBuffer,i=this.sampleValues,o=this.valueSize,n=2*o,a=3*o,g=s-e,l=(t-e)/g,c=l*l,h=c*l,I=A*a,C=I-a,B=-2*h+3*c,d=h-c,E=1-B,u=d-c+l;for(let A=0;A!==o;A++){const e=i[C+A+o],t=i[C+A+n]*g,s=i[I+A+o],a=i[I+A]*g;r[A]=E*e+u*t+B*s+d*a}return r}}const _=new A.Quaternion;class N extends U{interpolate_(A,e,t,s){const r=super.interpolate_(A,e,t,s);return _.fromArray(r).normalize().toArray(r),r}}const v={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},H={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},q={9728:A.NearestFilter,9729:A.LinearFilter,9984:A.NearestMipmapNearestFilter,9985:A.LinearMipmapNearestFilter,9986:A.NearestMipmapLinearFilter,9987:A.LinearMipmapLinearFilter},P={33071:A.ClampToEdgeWrapping,33648:A.MirroredRepeatWrapping,10497:A.RepeatWrapping},O={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},J={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"},V={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},j={CUBICSPLINE:void 0,LINEAR:A.InterpolateLinear,STEP:A.InterpolateDiscrete},K="OPAQUE",Y="MASK",W="BLEND";function X(A,e,t){for(const s in t.extensions)void 0===A[s]&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[s]=t.extensions[s])}function Z(A,e){void 0!==e.extras&&("object"==typeof e.extras?Object.assign(A.userData,e.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+e.extras))}function $(A,e){if(A.updateMorphTargets(),void 0!==e.weights)for(let t=0,s=e.weights.length;t<s;t++)A.morphTargetInfluences[t]=e.weights[t];if(e.extras&&Array.isArray(e.extras.targetNames)){const t=e.extras.targetNames;if(A.morphTargetInfluences.length===t.length){A.morphTargetDictionary={};for(let e=0,s=t.length;e<s;e++)A.morphTargetDictionary[t[e]]=e}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function AA(A){let e;const t=A.extensions&&A.extensions[h.KHR_DRACO_MESH_COMPRESSION];if(e=t?"draco:"+t.bufferView+":"+t.indices+":"+eA(t.attributes):A.indices+":"+eA(A.attributes)+":"+A.mode,void 0!==A.targets)for(let t=0,s=A.targets.length;t<s;t++)e+=":"+eA(A.targets[t]);return e}function eA(A){let e="";const t=Object.keys(A).sort();for(let s=0,r=t.length;s<r;s++)e+=t[s]+":"+A[t[s]]+";";return e}function tA(A){switch(A){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}const sA=new A.Matrix4;class rA{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new c,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,r=!1,i=-1;"undefined"!=typeof navigator&&(s=!0===/^((?!chrome|android).)*safari/i.test(navigator.userAgent),r=navigator.userAgent.indexOf("Firefox")>-1,i=r?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1),"undefined"==typeof createImageBitmap||s||r&&i<98?this.textureLoader=new A.TextureLoader(this.options.manager):this.textureLoader=new A.ImageBitmapLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new A.FileLoader(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),"use-credentials"===this.options.crossOrigin&&this.fileLoader.setWithCredentials(!0)}setExtensions(A){this.extensions=A}setPlugins(A){this.plugins=A}parse(A,e){const t=this,s=this.json,r=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([t.getDependencies("scene"),t.getDependencies("animation"),t.getDependencies("camera")])})).then((function(e){const i={scene:e[0][s.scene||0],scenes:e[0],animations:e[1],cameras:e[2],asset:s.asset,parser:t,userData:{}};X(r,i,s),Z(i,s),Promise.all(t._invokeAll((function(A){return A.afterRoot&&A.afterRoot(i)}))).then((function(){A(i)}))})).catch(e)}_markDefs(){const A=this.json.nodes||[],e=this.json.skins||[],t=this.json.meshes||[];for(let t=0,s=e.length;t<s;t++){const s=e[t].joints;for(let e=0,t=s.length;e<t;e++)A[s[e]].isBone=!0}for(let e=0,s=A.length;e<s;e++){const s=A[e];void 0!==s.mesh&&(this._addNodeRef(this.meshCache,s.mesh),void 0!==s.skin&&(t[s.mesh].isSkinnedMesh=!0)),void 0!==s.camera&&this._addNodeRef(this.cameraCache,s.camera)}}_addNodeRef(A,e){void 0!==e&&(void 0===A.refs[e]&&(A.refs[e]=A.uses[e]=0),A.refs[e]++)}_getNodeRef(A,e,t){if(A.refs[e]<=1)return t;const s=t.clone(),r=(A,e)=>{const t=this.associations.get(A);null!=t&&this.associations.set(e,t);for(const[t,s]of A.children.entries())r(s,e.children[t])};return r(t,s),s.name+="_instance_"+A.uses[e]++,s}_invokeOne(A){const e=Object.values(this.plugins);e.push(this);for(let t=0;t<e.length;t++){const s=A(e[t]);if(s)return s}return null}_invokeAll(A){const e=Object.values(this.plugins);e.unshift(this);const t=[];for(let s=0;s<e.length;s++){const r=A(e[s]);r&&t.push(r)}return t}getDependency(A,e){const t=A+":"+e;let s=this.cache.get(t);if(!s){switch(A){case"scene":s=this.loadScene(e);break;case"node":s=this._invokeOne((function(A){return A.loadNode&&A.loadNode(e)}));break;case"mesh":s=this._invokeOne((function(A){return A.loadMesh&&A.loadMesh(e)}));break;case"accessor":s=this.loadAccessor(e);break;case"bufferView":s=this._invokeOne((function(A){return A.loadBufferView&&A.loadBufferView(e)}));break;case"buffer":s=this.loadBuffer(e);break;case"material":s=this._invokeOne((function(A){return A.loadMaterial&&A.loadMaterial(e)}));break;case"texture":s=this._invokeOne((function(A){return A.loadTexture&&A.loadTexture(e)}));break;case"skin":s=this.loadSkin(e);break;case"animation":s=this._invokeOne((function(A){return A.loadAnimation&&A.loadAnimation(e)}));break;case"camera":s=this.loadCamera(e);break;default:if(s=this._invokeOne((function(t){return t!=this&&t.getDependency&&t.getDependency(A,e)})),!s)throw new Error("Unknown type: "+A)}this.cache.add(t,s)}return s}getDependencies(A){let e=this.cache.get(A);if(!e){const t=this,s=this.json[A+("mesh"===A?"es":"s")]||[];e=Promise.all(s.map((function(e,s){return t.getDependency(A,s)}))),this.cache.add(A,e)}return e}loadBuffer(e){const t=this.json.buffers[e],s=this.fileLoader;if(t.type&&"arraybuffer"!==t.type)throw new Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(void 0===t.uri&&0===e)return Promise.resolve(this.extensions[h.KHR_BINARY_GLTF].body);const r=this.options;return new Promise((function(e,i){s.load(A.LoaderUtils.resolveURL(t.uri,r.path),e,void 0,(function(){i(new Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))}))}))}loadBufferView(A){const e=this.json.bufferViews[A];return this.getDependency("buffer",e.buffer).then((function(A){const t=e.byteLength||0,s=e.byteOffset||0;return A.slice(s,s+t)}))}loadAccessor(e){const t=this,s=this.json,r=this.json.accessors[e];if(void 0===r.bufferView&&void 0===r.sparse){const e=O[r.type],t=H[r.componentType],s=!0===r.normalized,i=new t(r.count*e);return Promise.resolve(new A.BufferAttribute(i,e,s))}const i=[];return void 0!==r.bufferView?i.push(this.getDependency("bufferView",r.bufferView)):i.push(null),void 0!==r.sparse&&(i.push(this.getDependency("bufferView",r.sparse.indices.bufferView)),i.push(this.getDependency("bufferView",r.sparse.values.bufferView))),Promise.all(i).then((function(e){const i=e[0],o=O[r.type],n=H[r.componentType],a=n.BYTES_PER_ELEMENT,g=a*o,l=r.byteOffset||0,c=void 0!==r.bufferView?s.bufferViews[r.bufferView].byteStride:void 0,h=!0===r.normalized;let I,C;if(c&&c!==g){const e=Math.floor(l/c),s="InterleavedBuffer:"+r.bufferView+":"+r.componentType+":"+e+":"+r.count;let g=t.cache.get(s);g||(I=new n(i,e*c,r.count*c/a),g=new A.InterleavedBuffer(I,c/a),t.cache.add(s,g)),C=new A.InterleavedBufferAttribute(g,o,l%c/a,h)}else I=null===i?new n(r.count*o):new n(i,l,r.count*o),C=new A.BufferAttribute(I,o,h);if(void 0!==r.sparse){const t=O.SCALAR,s=H[r.sparse.indices.componentType],a=r.sparse.indices.byteOffset||0,g=r.sparse.values.byteOffset||0,l=new s(e[1],a,r.sparse.count*t),c=new n(e[2],g,r.sparse.count*o);null!==i&&(C=new A.BufferAttribute(C.array.slice(),C.itemSize,C.normalized));for(let A=0,e=l.length;A<e;A++){const e=l[A];if(C.setX(e,c[A*o]),o>=2&&C.setY(e,c[A*o+1]),o>=3&&C.setZ(e,c[A*o+2]),o>=4&&C.setW(e,c[A*o+3]),o>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return C}))}loadTexture(A){const e=this.json,t=this.options,s=e.textures[A].source,r=e.images[s];let i=this.textureLoader;if(r.uri){const A=t.manager.getHandler(r.uri);null!==A&&(i=A)}return this.loadTextureImage(A,s,i)}loadTextureImage(e,t,s){const r=this,i=this.json,o=i.textures[e],n=i.images[t],a=(n.uri||n.bufferView)+":"+o.sampler;if(this.textureCache[a])return this.textureCache[a];const g=this.loadImageSource(t,s).then((function(t){t.flipY=!1,t.name=o.name||n.name||"",""===t.name&&"string"==typeof n.uri&&!1===n.uri.startsWith("data:image/")&&(t.name=n.uri);const s=(i.samplers||{})[o.sampler]||{};return t.magFilter=q[s.magFilter]||A.LinearFilter,t.minFilter=q[s.minFilter]||A.LinearMipmapLinearFilter,t.wrapS=P[s.wrapS]||A.RepeatWrapping,t.wrapT=P[s.wrapT]||A.RepeatWrapping,r.associations.set(t,{textures:e}),t})).catch((function(){return null}));return this.textureCache[a]=g,g}loadImageSource(e,t){const s=this,r=this.json,i=this.options;if(void 0!==this.sourceCache[e])return this.sourceCache[e].then((A=>A.clone()));const o=r.images[e],n=self.URL||self.webkitURL;let a=o.uri||"",g=!1;if(void 0!==o.bufferView)a=s.getDependency("bufferView",o.bufferView).then((function(A){g=!0;const e=new Blob([A],{type:o.mimeType});return a=n.createObjectURL(e),a}));else if(void 0===o.uri)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const l=Promise.resolve(a).then((function(e){return new Promise((function(s,r){let o=s;!0===t.isImageBitmapLoader&&(o=function(e){const t=new A.Texture(e);t.needsUpdate=!0,s(t)}),t.load(A.LoaderUtils.resolveURL(e,i.path),o,void 0,r)}))})).then((function(A){var e;return!0===g&&n.revokeObjectURL(a),A.userData.mimeType=o.mimeType||((e=o.uri).search(/\.jpe?g($|\?)/i)>0||0===e.search(/^data\:image\/jpeg/)?"image/jpeg":e.search(/\.webp($|\?)/i)>0||0===e.search(/^data\:image\/webp/)?"image/webp":"image/png"),A})).catch((function(A){throw console.error("THREE.GLTFLoader: Couldn't load texture",a),A}));return this.sourceCache[e]=l,l}assignTexture(A,e,t,s){const r=this;return this.getDependency("texture",t.index).then((function(i){if(!i)return null;if(void 0!==t.texCoord&&t.texCoord>0&&((i=i.clone()).channel=t.texCoord),r.extensions[h.KHR_TEXTURE_TRANSFORM]){const A=void 0!==t.extensions?t.extensions[h.KHR_TEXTURE_TRANSFORM]:void 0;if(A){const e=r.associations.get(i);i=r.extensions[h.KHR_TEXTURE_TRANSFORM].extendTexture(i,A),r.associations.set(i,e)}}return void 0!==s&&(i.colorSpace=s),A[e]=i,i}))}assignFinalMaterial(e){const t=e.geometry;let s=e.material;const r=void 0===t.attributes.tangent,i=void 0!==t.attributes.color,o=void 0===t.attributes.normal;if(e.isPoints){const e="PointsMaterial:"+s.uuid;let t=this.cache.get(e);t||(t=new A.PointsMaterial,A.Material.prototype.copy.call(t,s),t.color.copy(s.color),t.map=s.map,t.sizeAttenuation=!1,this.cache.add(e,t)),s=t}else if(e.isLine){const e="LineBasicMaterial:"+s.uuid;let t=this.cache.get(e);t||(t=new A.LineBasicMaterial,A.Material.prototype.copy.call(t,s),t.color.copy(s.color),t.map=s.map,this.cache.add(e,t)),s=t}if(r||i||o){let A="ClonedMaterial:"+s.uuid+":";r&&(A+="derivative-tangents:"),i&&(A+="vertex-colors:"),o&&(A+="flat-shading:");let e=this.cache.get(A);e||(e=s.clone(),i&&(e.vertexColors=!0),o&&(e.flatShading=!0),r&&(e.normalScale&&(e.normalScale.y*=-1),e.clearcoatNormalScale&&(e.clearcoatNormalScale.y*=-1)),this.cache.add(A,e),this.associations.set(e,this.associations.get(s))),s=e}e.material=s}getMaterialType(){return A.MeshStandardMaterial}loadMaterial(e){const t=this,s=this.json,r=this.extensions,i=s.materials[e];let o;const n={},a=[];if((i.extensions||{})[h.KHR_MATERIALS_UNLIT]){const A=r[h.KHR_MATERIALS_UNLIT];o=A.getMaterialType(),a.push(A.extendParams(n,i,t))}else{const s=i.pbrMetallicRoughness||{};if(n.color=new A.Color(1,1,1),n.opacity=1,Array.isArray(s.baseColorFactor)){const A=s.baseColorFactor;n.color.fromArray(A),n.opacity=A[3]}void 0!==s.baseColorTexture&&a.push(t.assignTexture(n,"map",s.baseColorTexture,A.SRGBColorSpace)),n.metalness=void 0!==s.metallicFactor?s.metallicFactor:1,n.roughness=void 0!==s.roughnessFactor?s.roughnessFactor:1,void 0!==s.metallicRoughnessTexture&&(a.push(t.assignTexture(n,"metalnessMap",s.metallicRoughnessTexture)),a.push(t.assignTexture(n,"roughnessMap",s.metallicRoughnessTexture))),o=this._invokeOne((function(A){return A.getMaterialType&&A.getMaterialType(e)})),a.push(Promise.all(this._invokeAll((function(A){return A.extendMaterialParams&&A.extendMaterialParams(e,n)}))))}!0===i.doubleSided&&(n.side=A.DoubleSide);const g=i.alphaMode||K;if(g===W?(n.transparent=!0,n.depthWrite=!1):(n.transparent=!1,g===Y&&(n.alphaTest=void 0!==i.alphaCutoff?i.alphaCutoff:.5)),void 0!==i.normalTexture&&o!==A.MeshBasicMaterial&&(a.push(t.assignTexture(n,"normalMap",i.normalTexture)),n.normalScale=new A.Vector2(1,1),void 0!==i.normalTexture.scale)){const A=i.normalTexture.scale;n.normalScale.set(A,A)}return void 0!==i.occlusionTexture&&o!==A.MeshBasicMaterial&&(a.push(t.assignTexture(n,"aoMap",i.occlusionTexture)),void 0!==i.occlusionTexture.strength&&(n.aoMapIntensity=i.occlusionTexture.strength)),void 0!==i.emissiveFactor&&o!==A.MeshBasicMaterial&&(n.emissive=(new A.Color).fromArray(i.emissiveFactor)),void 0!==i.emissiveTexture&&o!==A.MeshBasicMaterial&&a.push(t.assignTexture(n,"emissiveMap",i.emissiveTexture,A.SRGBColorSpace)),Promise.all(a).then((function(){const A=new o(n);return i.name&&(A.name=i.name),Z(A,i),t.associations.set(A,{materials:e}),i.extensions&&X(r,A,i),A}))}createUniqueName(e){const t=A.PropertyBinding.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,s=this.extensions,r=this.primitiveCache;function i(A){return s[h.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(A,t).then((function(e){return iA(e,A,t)}))}const o=[];for(let s=0,n=e.length;s<n;s++){const n=e[s],a=AA(n),g=r[a];if(g)o.push(g.promise);else{let e;e=n.extensions&&n.extensions[h.KHR_DRACO_MESH_COMPRESSION]?i(n):iA(new A.BufferGeometry,n,t),r[a]={primitive:n,promise:e},o.push(e)}}return Promise.all(o)}loadMesh(e){const t=this,s=this.json,r=this.extensions,i=s.meshes[e],o=i.primitives,n=[];for(let e=0,t=o.length;e<t;e++){const t=void 0===o[e].material?(void 0===(a=this.cache).DefaultMaterial&&(a.DefaultMaterial=new A.MeshStandardMaterial({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:A.FrontSide})),a.DefaultMaterial):this.getDependency("material",o[e].material);n.push(t)}var a;return n.push(t.loadGeometries(o)),Promise.all(n).then((function(s){const n=s.slice(0,s.length-1),a=s[s.length-1],l=[];for(let s=0,c=a.length;s<c;s++){const c=a[s],h=o[s];let I;const C=n[s];if(h.mode===v.TRIANGLES||h.mode===v.TRIANGLE_STRIP||h.mode===v.TRIANGLE_FAN||void 0===h.mode)I=!0===i.isSkinnedMesh?new A.SkinnedMesh(c,C):new A.Mesh(c,C),!0===I.isSkinnedMesh&&I.normalizeSkinWeights(),h.mode===v.TRIANGLE_STRIP?I.geometry=g(I.geometry,A.TriangleStripDrawMode):h.mode===v.TRIANGLE_FAN&&(I.geometry=g(I.geometry,A.TriangleFanDrawMode));else if(h.mode===v.LINES)I=new A.LineSegments(c,C);else if(h.mode===v.LINE_STRIP)I=new A.Line(c,C);else if(h.mode===v.LINE_LOOP)I=new A.LineLoop(c,C);else{if(h.mode!==v.POINTS)throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+h.mode);I=new A.Points(c,C)}Object.keys(I.geometry.morphAttributes).length>0&&$(I,i),I.name=t.createUniqueName(i.name||"mesh_"+e),Z(I,i),h.extensions&&X(r,I,h),t.assignFinalMaterial(I),l.push(I)}for(let A=0,s=l.length;A<s;A++)t.associations.set(l[A],{meshes:e,primitives:A});if(1===l.length)return i.extensions&&X(r,l[0],i),l[0];const c=new A.Group;i.extensions&&X(r,c,i),t.associations.set(c,{meshes:e});for(let A=0,e=l.length;A<e;A++)c.add(l[A]);return c}))}loadCamera(e){let t;const s=this.json.cameras[e],r=s[s.type];if(r)return"perspective"===s.type?t=new A.PerspectiveCamera(A.MathUtils.radToDeg(r.yfov),r.aspectRatio||1,r.znear||1,r.zfar||2e6):"orthographic"===s.type&&(t=new A.OrthographicCamera(-r.xmag,r.xmag,r.ymag,-r.ymag,r.znear,r.zfar)),s.name&&(t.name=this.createUniqueName(s.name)),Z(t,s),Promise.resolve(t);console.warn("THREE.GLTFLoader: Missing camera parameters.")}loadSkin(e){const t=this.json.skins[e],s=[];for(let A=0,e=t.joints.length;A<e;A++)s.push(this._loadNodeShallow(t.joints[A]));return void 0!==t.inverseBindMatrices?s.push(this.getDependency("accessor",t.inverseBindMatrices)):s.push(null),Promise.all(s).then((function(e){const s=e.pop(),r=e,i=[],o=[];for(let e=0,n=r.length;e<n;e++){const n=r[e];if(n){i.push(n);const t=new A.Matrix4;null!==s&&t.fromArray(s.array,16*e),o.push(t)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[e])}return new A.Skeleton(i,o)}))}loadAnimation(e){const t=this.json,s=this,r=t.animations[e],i=r.name?r.name:"animation_"+e,o=[],n=[],a=[],g=[],l=[];for(let A=0,e=r.channels.length;A<e;A++){const e=r.channels[A],t=r.samplers[e.sampler],s=e.target,i=s.node,c=void 0!==r.parameters?r.parameters[t.input]:t.input,h=void 0!==r.parameters?r.parameters[t.output]:t.output;void 0!==s.node&&(o.push(this.getDependency("node",i)),n.push(this.getDependency("accessor",c)),a.push(this.getDependency("accessor",h)),g.push(t),l.push(s))}return Promise.all([Promise.all(o),Promise.all(n),Promise.all(a),Promise.all(g),Promise.all(l)]).then((function(e){const t=e[0],r=e[1],o=e[2],n=e[3],a=e[4],g=[];for(let A=0,e=t.length;A<e;A++){const e=t[A],i=r[A],l=o[A],c=n[A],h=a[A];if(void 0===e)continue;e.updateMatrix&&e.updateMatrix();const I=s._createAnimationTracks(e,i,l,c,h);if(I)for(let A=0;A<I.length;A++)g.push(I[A])}return new A.AnimationClip(i,void 0,g)}))}createNodeMesh(A){const e=this.json,t=this,s=e.nodes[A];return void 0===s.mesh?null:t.getDependency("mesh",s.mesh).then((function(A){const e=t._getNodeRef(t.meshCache,s.mesh,A);return void 0!==s.weights&&e.traverse((function(A){if(A.isMesh)for(let e=0,t=s.weights.length;e<t;e++)A.morphTargetInfluences[e]=s.weights[e]})),e}))}loadNode(A){const e=this,t=this.json.nodes[A],s=e._loadNodeShallow(A),r=[],i=t.children||[];for(let A=0,t=i.length;A<t;A++)r.push(e.getDependency("node",i[A]));const o=void 0===t.skin?Promise.resolve(null):e.getDependency("skin",t.skin);return Promise.all([s,Promise.all(r),o]).then((function(A){const e=A[0],t=A[1],s=A[2];null!==s&&e.traverse((function(A){A.isSkinnedMesh&&A.bind(s,sA)}));for(let A=0,s=t.length;A<s;A++)e.add(t[A]);return e}))}_loadNodeShallow(e){const t=this.json,s=this.extensions,r=this;if(void 0!==this.nodeCache[e])return this.nodeCache[e];const i=t.nodes[e],o=i.name?r.createUniqueName(i.name):"",n=[],a=r._invokeOne((function(A){return A.createNodeMesh&&A.createNodeMesh(e)}));return a&&n.push(a),void 0!==i.camera&&n.push(r.getDependency("camera",i.camera).then((function(A){return r._getNodeRef(r.cameraCache,i.camera,A)}))),r._invokeAll((function(A){return A.createNodeAttachment&&A.createNodeAttachment(e)})).forEach((function(A){n.push(A)})),this.nodeCache[e]=Promise.all(n).then((function(t){let n;if(n=!0===i.isBone?new A.Bone:t.length>1?new A.Group:1===t.length?t[0]:new A.Object3D,n!==t[0])for(let A=0,e=t.length;A<e;A++)n.add(t[A]);if(i.name&&(n.userData.name=i.name,n.name=o),Z(n,i),i.extensions&&X(s,n,i),void 0!==i.matrix){const e=new A.Matrix4;e.fromArray(i.matrix),n.applyMatrix4(e)}else void 0!==i.translation&&n.position.fromArray(i.translation),void 0!==i.rotation&&n.quaternion.fromArray(i.rotation),void 0!==i.scale&&n.scale.fromArray(i.scale);return r.associations.has(n)||r.associations.set(n,{}),r.associations.get(n).nodes=e,n})),this.nodeCache[e]}loadScene(e){const t=this.extensions,s=this.json.scenes[e],r=this,i=new A.Group;s.name&&(i.name=r.createUniqueName(s.name)),Z(i,s),s.extensions&&X(t,i,s);const o=s.nodes||[],n=[];for(let A=0,e=o.length;A<e;A++)n.push(r.getDependency("node",o[A]));return Promise.all(n).then((function(e){for(let A=0,t=e.length;A<t;A++)i.add(e[A]);return r.associations=(e=>{const t=new Map;for(const[e,s]of r.associations)(e instanceof A.Material||e instanceof A.Texture)&&t.set(e,s);return e.traverse((A=>{const e=r.associations.get(A);null!=e&&t.set(A,e)})),t})(i),i}))}_createAnimationTracks(e,t,s,r,i){const o=[],n=e.name?e.name:e.uuid,a=[];let g;switch(V[i.path]===V.weights?e.traverse((function(A){A.morphTargetInfluences&&a.push(A.name?A.name:A.uuid)})):a.push(n),V[i.path]){case V.weights:g=A.NumberKeyframeTrack;break;case V.rotation:g=A.QuaternionKeyframeTrack;break;case V.position:case V.scale:g=A.VectorKeyframeTrack;break;default:if(1===s.itemSize)g=A.NumberKeyframeTrack;else g=A.VectorKeyframeTrack}const l=void 0!==r.interpolation?j[r.interpolation]:A.InterpolateLinear,c=this._getArrayFromAccessor(s);for(let A=0,e=a.length;A<e;A++){const e=new g(a[A]+"."+V[i.path],t.array,c,l);"CUBICSPLINE"===r.interpolation&&this._createCubicSplineTrackInterpolant(e),o.push(e)}return o}_getArrayFromAccessor(A){let e=A.array;if(A.normalized){const A=tA(e.constructor),t=new Float32Array(e.length);for(let s=0,r=e.length;s<r;s++)t[s]=e[s]*A;e=t}return e}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(e){return new(this instanceof A.QuaternionKeyframeTrack?N:U)(this.times,this.values,this.getValueSize()/3,e)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function iA(e,t,s){const r=t.attributes,i=[];function o(A,t){return s.getDependency("accessor",A).then((function(A){e.setAttribute(t,A)}))}for(const A in r){const t=J[A]||A.toLowerCase();t in e.attributes||i.push(o(r[A],t))}if(void 0!==t.indices&&!e.index){const A=s.getDependency("accessor",t.indices).then((function(A){e.setIndex(A)}));i.push(A)}return Z(e,t),function(e,t,s){const r=t.attributes,i=new A.Box3;if(void 0===r.POSITION)return;{const e=s.json.accessors[r.POSITION],t=e.min,o=e.max;if(void 0===t||void 0===o)return void console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");if(i.set(new A.Vector3(t[0],t[1],t[2]),new A.Vector3(o[0],o[1],o[2])),e.normalized){const A=tA(H[e.componentType]);i.min.multiplyScalar(A),i.max.multiplyScalar(A)}}const o=t.targets;if(void 0!==o){const e=new A.Vector3,t=new A.Vector3;for(let A=0,r=o.length;A<r;A++){const r=o[A];if(void 0!==r.POSITION){const A=s.json.accessors[r.POSITION],i=A.min,o=A.max;if(void 0!==i&&void 0!==o){if(t.setX(Math.max(Math.abs(i[0]),Math.abs(o[0]))),t.setY(Math.max(Math.abs(i[1]),Math.abs(o[1]))),t.setZ(Math.max(Math.abs(i[2]),Math.abs(o[2]))),A.normalized){const e=tA(H[A.componentType]);t.multiplyScalar(e)}e.max(t)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}i.expandByVector(e)}e.boundingBox=i;const n=new A.Sphere;i.getCenter(n.center),n.radius=i.min.distanceTo(i.max)/2,e.boundingSphere=n}(e,t,s),Promise.all(i).then((function(){return void 0!==t.targets?function(A,e,t){let s=!1,r=!1,i=!1;for(let A=0,t=e.length;A<t;A++){const t=e[A];if(void 0!==t.POSITION&&(s=!0),void 0!==t.NORMAL&&(r=!0),void 0!==t.COLOR_0&&(i=!0),s&&r&&i)break}if(!s&&!r&&!i)return Promise.resolve(A);const o=[],n=[],a=[];for(let g=0,l=e.length;g<l;g++){const l=e[g];if(s){const e=void 0!==l.POSITION?t.getDependency("accessor",l.POSITION):A.attributes.position;o.push(e)}if(r){const e=void 0!==l.NORMAL?t.getDependency("accessor",l.NORMAL):A.attributes.normal;n.push(e)}if(i){const e=void 0!==l.COLOR_0?t.getDependency("accessor",l.COLOR_0):A.attributes.color;a.push(e)}}return Promise.all([Promise.all(o),Promise.all(n),Promise.all(a)]).then((function(e){const t=e[0],o=e[1],n=e[2];return s&&(A.morphAttributes.position=t),r&&(A.morphAttributes.normal=o),i&&(A.morphAttributes.color=n),A.morphTargetsRelative=!0,A}))}(e,t.targets,s):e}))}const oA=new WeakMap;class nA extends A.Loader{constructor(A){super(A),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(A){return this.decoderPath=A,this}setDecoderConfig(A){return this.decoderConfig=A,this}setWorkerLimit(A){return this.workerLimit=A,this}load(e,t,s,r){const i=new A.FileLoader(this.manager);i.setPath(this.path),i.setResponseType("arraybuffer"),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,(A=>{this.parse(A,t,r)}),s,r)}parse(e,t,s){this.decodeDracoFile(e,t,null,null,A.SRGBColorSpace).catch(s)}decodeDracoFile(e,t,s,r,i=A.LinearSRGBColorSpace){const o={attributeIDs:s||this.defaultAttributeIDs,attributeTypes:r||this.defaultAttributeTypes,useUniqueIDs:!!s,vertexColorSpace:i};return this.decodeGeometry(e,o).then(t)}decodeGeometry(A,e){const t=JSON.stringify(e);if(oA.has(A)){const e=oA.get(A);if(e.key===t)return e.promise;if(0===A.byteLength)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let s;const r=this.workerNextTaskID++,i=A.byteLength,o=this._getWorker(r,i).then((t=>(s=t,new Promise(((t,i)=>{s._callbacks[r]={resolve:t,reject:i},s.postMessage({type:"decode",id:r,taskConfig:e,buffer:A},[A])}))))).then((A=>this._createGeometry(A.geometry)));return o.catch((()=>!0)).then((()=>{s&&r&&this._releaseTask(s,r)})),oA.set(A,{key:t,promise:o}),o}_createGeometry(e){const t=new A.BufferGeometry;e.index&&t.setIndex(new A.BufferAttribute(e.index.array,1));for(let s=0;s<e.attributes.length;s++){const r=e.attributes[s],i=r.name,o=r.array,n=r.itemSize,a=new A.BufferAttribute(o,n);"color"===i&&(this._assignVertexColorSpace(a,r.vertexColorSpace),a.normalized=o instanceof Float32Array==!1),t.setAttribute(i,a)}return t}_assignVertexColorSpace(e,t){if(t!==A.SRGBColorSpace)return;const s=new A.Color;for(let A=0,t=e.count;A<t;A++)s.fromBufferAttribute(e,A).convertSRGBToLinear(),e.setXYZ(A,s.r,s.g,s.b)}_loadLibrary(e,t){const s=new A.FileLoader(this.manager);return s.setPath(this.decoderPath),s.setResponseType(t),s.setWithCredentials(this.withCredentials),new Promise(((A,t)=>{s.load(e,A,void 0,t)}))}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const A="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,e=[];return A?e.push(this._loadLibrary("draco_decoder.js","text")):(e.push(this._loadLibrary("draco_wasm_wrapper.js","text")),e.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(e).then((e=>{const t=e[0];A||(this.decoderConfig.wasmBinary=e[1]);const s=aA.toString(),r=["/* draco decoder */",t,"","/* worker */",s.substring(s.indexOf("{")+1,s.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([r]))})),this.decoderPending}_getWorker(A,e){return this._initDecoder().then((()=>{if(this.workerPool.length<this.workerLimit){const A=new Worker(this.workerSourceURL);A._callbacks={},A._taskCosts={},A._taskLoad=0,A.postMessage({type:"init",decoderConfig:this.decoderConfig}),A.onmessage=function(e){const t=e.data;switch(t.type){case"decode":A._callbacks[t.id].resolve(t);break;case"error":A._callbacks[t.id].reject(t);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+t.type+'"')}},this.workerPool.push(A)}else this.workerPool.sort((function(A,e){return A._taskLoad>e._taskLoad?-1:1}));const t=this.workerPool[this.workerPool.length-1];return t._taskCosts[A]=e,t._taskLoad+=e,t}))}_releaseTask(A,e){A._taskLoad-=A._taskCosts[e],delete A._callbacks[e],delete A._taskCosts[e]}debug(){console.log("Task load: ",this.workerPool.map((A=>A._taskLoad)))}dispose(){for(let A=0;A<this.workerPool.length;++A)this.workerPool[A].terminate();return this.workerPool.length=0,""!==this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),this}}function aA(){let A,e;function t(A,e,t,s,r,i){const o=i.num_components(),n=t.num_points()*o,a=n*r.BYTES_PER_ELEMENT,g=function(A,e){switch(e){case Float32Array:return A.DT_FLOAT32;case Int8Array:return A.DT_INT8;case Int16Array:return A.DT_INT16;case Int32Array:return A.DT_INT32;case Uint8Array:return A.DT_UINT8;case Uint16Array:return A.DT_UINT16;case Uint32Array:return A.DT_UINT32}}(A,r),l=A._malloc(a);e.GetAttributeDataArrayForAllPoints(t,i,g,a,l);const c=new r(A.HEAPF32.buffer,l,n).slice();return A._free(l),{name:s,array:c,itemSize:o}}onmessage=function(s){const r=s.data;switch(r.type){case"init":A=r.decoderConfig,e=new Promise((function(e){A.onModuleLoaded=function(A){e({draco:A})},DracoDecoderModule(A)}));break;case"decode":const s=r.buffer,i=r.taskConfig;e.then((A=>{const e=A.draco,o=new e.Decoder;try{const A=function(A,e,s,r){const i=r.attributeIDs,o=r.attributeTypes;let n,a;const g=e.GetEncodedGeometryType(s);if(g===A.TRIANGULAR_MESH)n=new A.Mesh,a=e.DecodeArrayToMesh(s,s.byteLength,n);else{if(g!==A.POINT_CLOUD)throw new Error("THREE.DRACOLoader: Unexpected geometry type.");n=new A.PointCloud,a=e.DecodeArrayToPointCloud(s,s.byteLength,n)}if(!a.ok()||0===n.ptr)throw new Error("THREE.DRACOLoader: Decoding failed: "+a.error_msg());const l={index:null,attributes:[]};for(const s in i){const a=self[o[s]];let g,c;if(r.useUniqueIDs)c=i[s],g=e.GetAttributeByUniqueId(n,c);else{if(c=e.GetAttributeId(n,A[i[s]]),-1===c)continue;g=e.GetAttribute(n,c)}const h=t(A,e,n,s,a,g);"color"===s&&(h.vertexColorSpace=r.vertexColorSpace),l.attributes.push(h)}g===A.TRIANGULAR_MESH&&(l.index=function(A,e,t){const s=t.num_faces(),r=3*s,i=4*r,o=A._malloc(i);e.GetTrianglesUInt32Array(t,i,o);const n=new Uint32Array(A.HEAPF32.buffer,o,r).slice();return A._free(o),{array:n,itemSize:1}}(A,e,n));return A.destroy(n),l}(e,o,new Int8Array(s),i),n=A.attributes.map((A=>A.array.buffer));A.index&&n.push(A.index.array.buffer),self.postMessage({type:"decode",id:r.id,geometry:A},n)}catch(A){console.error(A),self.postMessage({type:"error",id:r.id,error:A.message})}finally{e.destroy(o)}}))}}}class gA{constructor(A=4){this.pool=A,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0}_initWorker(A){if(!this.workers[A]){const e=this.workerCreator();e.addEventListener("message",this._onMessage.bind(this,A)),this.workers[A]=e}}_getIdleWorker(){for(let A=0;A<this.pool;A++)if(!(this.workerStatus&1<<A))return A;return-1}_onMessage(A,e){const t=this.workersResolve[A];if(t&&t(e),this.queue.length){const{resolve:e,msg:t,transfer:s}=this.queue.shift();this.workersResolve[A]=e,this.workers[A].postMessage(t,s)}else this.workerStatus^=1<<A}setWorkerCreator(A){this.workerCreator=A}setWorkerLimit(A){this.pool=A}postMessage(A,e){return new Promise((t=>{const s=this._getIdleWorker();-1!==s?(this._initWorker(s),this.workerStatus|=1<<s,this.workersResolve[s]=t,this.workers[s].postMessage(A,e)):this.queue.push({resolve:t,msg:A,transfer:e})}))}dispose(){this.workers.forEach((A=>A.terminate())),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}class lA{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 cA{constructor(A,e,t,s){this._dataView=new DataView(A.buffer,A.byteOffset+e,t),this._littleEndian=s,this._offset=0}_nextUint8(){const A=this._dataView.getUint8(this._offset);return this._offset+=1,A}_nextUint16(){const A=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,A}_nextUint32(){const A=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,A}_nextUint64(){const A=this._dataView.getUint32(this._offset,this._littleEndian)+2**32*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,A}_nextInt32(){const A=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,A}_skip(A){return this._offset+=A,this}_scan(A,e=0){const t=this._offset;let s=0;for(;this._dataView.getUint8(this._offset)!==e&&s<A;)s++,this._offset++;return s<A&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+t,s)}}new Uint8Array([0]);const hA=[171,75,84,88,32,50,48,187,13,10,26,10];function IA(A){return"undefined"!=typeof TextDecoder?(new TextDecoder).decode(A):Buffer.from(A).toString("utf8")}let CA,BA,dA;const EA={env:{emscripten_notify_memory_growth:function(A){dA=new Uint8Array(BA.exports.memory.buffer)}}};class uA{init(){return CA||(CA="undefined"!=typeof fetch?fetch("data:application/wasm;base64,"+QA).then((A=>A.arrayBuffer())).then((A=>WebAssembly.instantiate(A,EA))).then(this._init):WebAssembly.instantiate(Buffer.from(QA,"base64"),EA).then(this._init),CA)}_init(A){BA=A.instance,EA.env.emscripten_notify_memory_growth(0)}decode(A,e=0){if(!BA)throw new Error("ZSTDDecoder: Await .init() before decoding.");const t=A.byteLength,s=BA.exports.malloc(t);dA.set(A,s),e=e||Number(BA.exports.ZSTD_findDecompressedSize(s,t));const r=BA.exports.malloc(e),i=BA.exports.ZSTD_decompress(r,e,s,t),o=dA.slice(r,r+i);return BA.exports.free(s),BA.exports.free(r),o}}const QA="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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/QQ8hAiABIABJBEAgAUEEdCAAbiECCyAAQQh2IgEgAkEYbCIAQYwIaigCAGwgAEGICGooAgBqIgJBA3YgAmogAEGACGooAgAgAEGECGooAgAgAWxqSQs3ACAAIAMgBCAFQYAQEDMiBRADBEAgBQ8LIAUgBEkEfyABIAIgAyAFaiAEIAVrIAAQMgVBuH8LC78DAQN/IwBBIGsiBSQAIAVBCGogAiADEAYiAhADRQRAIAAgAWoiB0F9aiEGIAUgBBAOIARBBGohAiAFLQACIQMDQEEAIAAgBkkgBUEIahAEGwRAIAAgAiAFQQhqIAMQAkECdGoiBC8BADsAACAFQQhqIAQtAAIQASAAIAQtAANqIgQgAiAFQQhqIAMQAkECdGoiAC8BADsAACAFQQhqIAAtAAIQASAEIAAtAANqIQAMAQUgB0F+aiEEA0AgBUEIahAEIAAgBEtyRQRAIAAgAiAFQQhqIAMQAkECdGoiBi8BADsAACAFQQhqIAYtAAIQASAAIAYtAANqIQAMAQsLA0AgACAES0UEQCAAIAIgBUEIaiADEAJBAnRqIgYvAQA7AAAgBUEIaiAGLQACEAEgACAGLQADaiEADAELCwJAIAAgB08NACAAIAIgBUEIaiADEAIiA0ECdGoiAC0AADoAACAALQADQQFGBEAgBUEIaiAALQACEAEMAQsgBSgCDEEfSw0AIAVBCGogAiADQQJ0ai0AAhABIAUoAgxBIUkNACAFQSA2AgwLIAFBbCAFQQhqEAobIQILCwsgBUEgaiQAIAILkgIBBH8jAEFAaiIJJAAgCSADQTQQCyEDAkAgBEECSA0AIAMgBEECdGooAgAhCSADQTxqIAgQIyADQQE6AD8gAyACOgA+QQAhBCADKAI8IQoDQCAEIAlGDQEgACAEQQJ0aiAKNgEAIARBAWohBAwAAAsAC0EAIQkDQCAGIAlGRQRAIAMgBSAJQQF0aiIKLQABIgtBAnRqIgwoAgAhBCADQTxqIAotAABBCHQgCGpB//8DcRAjIANBAjoAPyADIAcgC2siCiACajoAPiAEQQEgASAKa3RqIQogAygCPCELA0AgACAEQQJ0aiALNgEAIARBAWoiBCAKSQ0ACyAMIAo2AgAgCUEBaiEJDAELCyADQUBrJAALowIBCX8jAEHQAGsiCSQAIAlBEGogBUE0EAsaIAcgBmshDyAHIAFrIRADQAJAIAMgCkcEQEEBIAEgByACIApBAXRqIgYtAAEiDGsiCGsiC3QhDSAGLQAAIQ4gCUEQaiAMQQJ0aiIMKAIAIQYgCyAPTwRAIAAgBkECdGogCyAIIAUgCEE0bGogCCAQaiIIQQEgCEEBShsiCCACIAQgCEECdGooAgAiCEEBdGogAyAIayAHIA4QYyAGIA1qIQgMAgsgCUEMaiAOECMgCUEBOgAPIAkgCDoADiAGIA1qIQggCSgCDCELA0AgBiAITw0CIAAgBkECdGogCzYBACAGQQFqIQYMAAALAAsgCUHQAGokAA8LIAwgCDYCACAKQQFqIQoMAAALAAs0ACAAIAMgBCAFEDYiBRADBEAgBQ8LIAUgBEkEfyABIAIgAyAFaiAEIAVrIAAQNAVBuH8LCyMAIAA/AEEQdGtB//8DakEQdkAAQX9GBEBBAA8LQQAQAEEBCzsBAX8gAgRAA0AgACABIAJBgCAgAkGAIEkbIgMQCyEAIAFBgCBqIQEgAEGAIGohACACIANrIgINAAsLCwYAIAAQAwsLqBUJAEGICAsNAQAAAAEAAAACAAAAAgBBoAgLswYBAAAAAQAAAAIAAAACAAAAJgAAAIIAAAAhBQAASgAAAGcIAAAmAAAAwAEAAIAAAABJBQAASgAAAL4IAAApAAAALAIAAIAAAABJBQAASgAAAL4IAAAvAAAAygIAAIAAAACKBQAASgAAAIQJAAA1AAAAcwMAAIAAAACdBQAASgAAAKAJAAA9AAAAgQMAAIAAAADrBQAASwAAAD4KAABEAAAAngMAAIAAAABNBgAASwAAAKoKAABLAAAAswMAAIAAAADBBgAATQAAAB8NAABNAAAAUwQAAIAAAAAjCAAAUQAAAKYPAABUAAAAmQQAAIAAAABLCQAAVwAAALESAABYAAAA2gQAAIAAAABvCQAAXQAAACMUAABUAAAARQUAAIAAAABUCgAAagAAAIwUAABqAAAArwUAAIAAAAB2CQAAfAAAAE4QAAB8AAAA0gIAAIAAAABjBwAAkQAAAJAHAACSAAAAAAAAAAEAAAABAAAABQAAAA0AAAAdAAAAPQAAAH0AAAD9AAAA/QEAAP0DAAD9BwAA/Q8AAP0fAAD9PwAA/X8AAP3/AAD9/wEA/f8DAP3/BwD9/w8A/f8fAP3/PwD9/38A/f//AP3//wH9//8D/f//B/3//w/9//8f/f//P/3//38AAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACUAAAAnAAAAKQAAACsAAAAvAAAAMwAAADsAAABDAAAAUwAAAGMAAACDAAAAAwEAAAMCAAADBAAAAwgAAAMQAAADIAAAA0AAAAOAAAADAAEAQeAPC1EBAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAEAAAABQAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAQcQQC4sBAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABIAAAAUAAAAFgAAABgAAAAcAAAAIAAAACgAAAAwAAAAQAAAAIAAAAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAAAAQBBkBIL5gQBAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAAAEAAAAEAAAACAAAAAAAAAABAAEBBgAAAAAAAAQAAAAAEAAABAAAAAAgAAAFAQAAAAAAAAUDAAAAAAAABQQAAAAAAAAFBgAAAAAAAAUHAAAAAAAABQkAAAAAAAAFCgAAAAAAAAUMAAAAAAAABg4AAAAAAAEFEAAAAAAAAQUUAAAAAAABBRYAAAAAAAIFHAAAAAAAAwUgAAAAAAAEBTAAAAAgAAYFQAAAAAAABwWAAAAAAAAIBgABAAAAAAoGAAQAAAAADAYAEAAAIAAABAAAAAAAAAAEAQAAAAAAAAUCAAAAIAAABQQAAAAAAAAFBQAAACAAAAUHAAAAAAAABQgAAAAgAAAFCgAAAAAAAAULAAAAAAAABg0AAAAgAAEFEAAAAAAAAQUSAAAAIAABBRYAAAAAAAIFGAAAACAAAwUgAAAAAAADBSgAAAAAAAYEQAAAABAABgRAAAAAIAAHBYAAAAAAAAkGAAIAAAAACwYACAAAMAAABAAAAAAQAAAEAQAAACAAAAUCAAAAIAAABQMAAAAgAAAFBQAAACAAAAUGAAAAIAAABQgAAAAgAAAFCQAAACAAAAULAAAAIAAABQwAAAAAAAAGDwAAACAAAQUSAAAAIAABBRQAAAAgAAIFGAAAACAAAgUcAAAAIAADBSgAAAAgAAQFMAAAAAAAEAYAAAEAAAAPBgCAAAAAAA4GAEAAAAAADQYAIABBgBcLhwIBAAEBBQAAAAAAAAUAAAAAAAAGBD0AAAAAAAkF/QEAAAAADwX9fwAAAAAVBf3/HwAAAAMFBQAAAAAABwR9AAAAAAAMBf0PAAAAABIF/f8DAAAAFwX9/38AAAAFBR0AAAAAAAgE/QAAAAAADgX9PwAAAAAUBf3/DwAAAAIFAQAAABAABwR9AAAAAAALBf0HAAAAABEF/f8BAAAAFgX9/z8AAAAEBQ0AAAAQAAgE/QAAAAAADQX9HwAAAAATBf3/BwAAAAEFAQAAABAABgQ9AAAAAAAKBf0DAAAAABAF/f8AAAAAHAX9//8PAAAbBf3//wcAABoF/f//AwAAGQX9//8BAAAYBf3//wBBkBkLhgQBAAEBBgAAAAAAAAYDAAAAAAAABAQAAAAgAAAFBQAAAAAAAAUGAAAAAAAABQgAAAAAAAAFCQAAAAAAAAULAAAAAAAABg0AAAAAAAAGEAAAAAAAAAYTAAAAAAAABhYAAAAAAAAGGQAAAAAAAAYcAAAAAAAABh8AAAAAAAAGIgAAAAAAAQYlAAAAAAABBikAAAAAAAIGLwAAAAAAAwY7AAAAAAAEBlMAAAAAAAcGgwAAAAAACQYDAgAAEAAABAQAAAAAAAAEBQAAACAAAAUGAAAAAAAABQcAAAAgAAAFCQAAAAAAAAUKAAAAAAAABgwAAAAAAAAGDwAAAAAAAAYSAAAAAAAABhUAAAAAAAAGGAAAAAAAAAYbAAAAAAAABh4AAAAAAAAGIQAAAAAAAQYjAAAAAAABBicAAAAAAAIGKwAAAAAAAwYzAAAAAAAEBkMAAAAAAAUGYwAAAAAACAYDAQAAIAAABAQAAAAwAAAEBAAAABAAAAQFAAAAIAAABQcAAAAgAAAFCAAAACAAAAUKAAAAIAAABQsAAAAAAAAGDgAAAAAAAAYRAAAAAAAABhQAAAAAAAAGFwAAAAAAAAYaAAAAAAAABh0AAAAAAAAGIAAAAAAAEAYDAAEAAAAPBgOAAAAAAA4GA0AAAAAADQYDIAAAAAAMBgMQAAAAAAsGAwgAAAAACgYDBABBpB0L2QEBAAAAAwAAAAcAAAAPAAAAHwAAAD8AAAB/AAAA/wAAAP8BAAD/AwAA/wcAAP8PAAD/HwAA/z8AAP9/AAD//wAA//8BAP//AwD//wcA//8PAP//HwD//z8A//9/AP///wD///8B////A////wf///8P////H////z////9/AAAAAAEAAAACAAAABAAAAAAAAAACAAAABAAAAAgAAAAAAAAAAQAAAAIAAAABAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAcAAAAIAAAACQAAAAoAAAALAEGgIAsDwBBQ",fA=new WeakMap;let pA,mA=0;class yA extends A.Loader{constructor(A){super(A),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new gA,this.workerSourceURL="",this.workerConfig=null,"undefined"!=typeof MSC_TRANSCODER&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(A){return this.transcoderPath=A,this}setWorkerLimit(A){return this.workerPool.setWorkerLimit(A),this}detectSupport(A){return!0===A.isWebGPURenderer?this.workerConfig={astcSupported:A.hasFeature("texture-compression-astc"),etc1Supported:!1,etc2Supported:A.hasFeature("texture-compression-etc2"),dxtSupported:A.hasFeature("texture-compression-bc"),bptcSupported:!1,pvrtcSupported:!1}:(this.workerConfig={astcSupported:A.extensions.has("WEBGL_compressed_texture_astc"),etc1Supported:A.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:A.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:A.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:A.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:A.extensions.has("WEBGL_compressed_texture_pvrtc")||A.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},A.capabilities.isWebGL2&&(this.workerConfig.etc1Supported=!1)),this}init(){if(!this.transcoderPending){const e=new A.FileLoader(this.manager);e.setPath(this.transcoderPath),e.setWithCredentials(this.withCredentials);const t=e.loadAsync("basis_transcoder.js"),s=new A.FileLoader(this.manager);s.setPath(this.transcoderPath),s.setResponseType("arraybuffer"),s.setWithCredentials(this.withCredentials);const r=s.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([t,r]).then((([A,e])=>{const t=yA.BasisWorker.toString(),s=["/* constants */","let _EngineFormat = "+JSON.stringify(yA.EngineFormat),"let _TranscoderFormat = "+JSON.stringify(yA.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(yA.BasisFormat),"/* basis_transcoder.js */",A,"/* worker */",t.substring(t.indexOf("{")+1,t.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([s])),this.transcoderBinary=e,this.workerPool.setWorkerCreator((()=>{const A=new Worker(this.workerSourceURL),e=this.transcoderBinary.slice(0);return A.postMessage({type:"init",config:this.workerConfig,transcoderBinary:e},[e]),A}))})),mA>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),mA++}return this.transcoderPending}load(e,t,s,r){if(null===this.workerConfig)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const i=new A.FileLoader(this.manager);i.setResponseType("arraybuffer"),i.setWithCredentials(this.withCredentials),i.load(e,(A=>{if(fA.has(A)){return fA.get(A).promise.then(t).catch(r)}this._createTexture(A).then((A=>t?t(A):null)).catch(r)}),s,r)}_createTextureFrom(e,t){const{faces:s,width:r,height:i,format:o,type:n,error:a,dfdTransferFn:g,dfdFlags:l}=e;if("error"===n)return Promise.reject(a);let c;if(6===t.faceCount)c=new A.CompressedCubeTexture(s,o,A.UnsignedByteType);else{const e=s[0].mipmaps;c=t.layerCount>1?new A.CompressedArrayTexture(e,r,i,t.layerCount,o,A.UnsignedByteType):new A.CompressedTexture(e,r,i,o,A.UnsignedByteType)}return c.minFilter=1===s[0].mipmaps.length?A.LinearFilter:A.LinearMipmapLinearFilter,c.magFilter=A.LinearFilter,c.generateMipmaps=!1,c.needsUpdate=!0,c.colorSpace=2===g?A.SRGBColorSpace:A.NoColorSpace,c.premultiplyAlpha=!!(1&l),c}async _createTexture(A,e={}){const t=function(A){const e=new Uint8Array(A.buffer,A.byteOffset,hA.length);if(e[0]!==hA[0]||e[1]!==hA[1]||e[2]!==hA[2]||e[3]!==hA[3]||e[4]!==hA[4]||e[5]!==hA[5]||e[6]!==hA[6]||e[7]!==hA[7]||e[8]!==hA[8]||e[9]!==hA[9]||e[10]!==hA[10]||e[11]!==hA[11])throw new Error("Missing KTX 2.0 identifier.");const t=new lA,s=17*Uint32Array.BYTES_PER_ELEMENT,r=new cA(A,hA.length,s,!0);t.vkFormat=r._nextUint32(),t.typeSize=r._nextUint32(),t.pixelWidth=r._nextUint32(),t.pixelHeight=r._nextUint32(),t.pixelDepth=r._nextUint32(),t.layerCount=r._nextUint32(),t.faceCount=r._nextUint32();const i=r._nextUint32();t.supercompressionScheme=r._nextUint32();const o=r._nextUint32(),n=r._nextUint32(),a=r._nextUint32(),g=r._nextUint32(),l=r._nextUint64(),c=r._nextUint64(),h=new cA(A,hA.length+s,3*i*8,!0);for(let e=0;e<i;e++)t.levels.push({levelData:new Uint8Array(A.buffer,A.byteOffset+h._nextUint64(),h._nextUint64()),uncompressedByteLength:h._nextUint64()});const I=new cA(A,o,n,!0),C={vendorId:I._skip(4)._nextUint16(),descriptorType:I._nextUint16(),versionNumber:I._nextUint16(),descriptorBlockSize:I._nextUint16(),colorModel:I._nextUint8(),colorPrimaries:I._nextUint8(),transferFunction:I._nextUint8(),flags:I._nextUint8(),texelBlockDimension:[I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8()],bytesPlane:[I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8()],samples:[]},B=(C.descriptorBlockSize/4-6)/4;for(let A=0;A<B;A++){const e={bitOffset:I._nextUint16(),bitLength:I._nextUint8(),channelType:I._nextUint8(),samplePosition:[I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8()],sampleLower:-1/0,sampleUpper:1/0};64&e.channelType?(e.sampleLower=I._nextInt32(),e.sampleUpper=I._nextInt32()):(e.sampleLower=I._nextUint32(),e.sampleUpper=I._nextUint32()),C.samples[A]=e}t.dataFormatDescriptor.length=0,t.dataFormatDescriptor.push(C);const d=new cA(A,a,g,!0);for(;d._offset<g;){const A=d._nextUint32(),e=d._scan(A),s=IA(e),r=d._scan(A-e.byteLength);t.keyValue[s]=s.match(/^ktx/i)?IA(r):r,d._offset%4&&d._skip(4-d._offset%4)}if(c<=0)return t;const E=new cA(A,l,c,!0),u=E._nextUint16(),Q=E._nextUint16(),f=E._nextUint32(),p=E._nextUint32(),m=E._nextUint32(),y=E._nextUint32(),w=[];for(let A=0;A<i;A++)w.push({imageFlags:E._nextUint32(),rgbSliceByteOffset:E._nextUint32(),rgbSliceByteLength:E._nextUint32(),alphaSliceByteOffset:E._nextUint32(),alphaSliceByteLength:E._nextUint32()});const D=l+E._offset,x=D+f,R=x+p,S=R+m,T=new Uint8Array(A.buffer,A.byteOffset+D,f),M=new Uint8Array(A.buffer,A.byteOffset+x,p),b=new Uint8Array(A.buffer,A.byteOffset+R,m),L=new Uint8Array(A.buffer,A.byteOffset+S,y);return t.globalData={endpointCount:u,selectorCount:Q,imageDescs:w,endpointsData:T,selectorsData:M,tablesData:b,extendedData:L},t}(new Uint8Array(A));if(0!==t.vkFormat){const A=[],e=[];for(let s=0;s<t.levels.length;s++)e.push(RA(t,s).then((function(e){A[s]=e})));await Promise.all(e);const s=A[0];return s.mipmaps=A.map((A=>({data:A.source.data,width:A.source.data.width,height:A.source.data.height,depth:A.source.data.depth}))),s}const s=e,r=this.init().then((()=>this.workerPool.postMessage({type:"transcode",buffer:A,taskConfig:s},[A]))).then((A=>this._createTextureFrom(A.data,t)));return fA.set(A,{promise:r}),r}dispose(){return this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),mA--,this}}yA.BasisFormat={ETC1S:0,UASTC_4x4:1},yA.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},yA.EngineFormat={RGBAFormat:A.RGBAFormat,RGBA_ASTC_4x4_Format:A.RGBA_ASTC_4x4_Format,RGBA_BPTC_Format:A.RGBA_BPTC_Format,RGBA_ETC2_EAC_Format:A.RGBA_ETC2_EAC_Format,RGBA_PVRTC_4BPPV1_Format:A.RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT5_Format:A.RGBA_S3TC_DXT5_Format,RGB_ETC1_Format:A.RGB_ETC1_Format,RGB_ETC2_Format:A.RGB_ETC2_Format,RGB_PVRTC_4BPPV1_Format:A.RGB_PVRTC_4BPPV1_Format,RGB_S3TC_DXT1_Format:A.RGB_S3TC_DXT1_Format},yA.BasisWorker=function(){let A,e,t;const s=_EngineFormat,r=_TranscoderFormat,i=_BasisFormat;self.addEventListener("message",(function(o){const c=o.data;switch(c.type){case"init":A=c.config,h=c.transcoderBinary,e=new Promise((A=>{t={wasmBinary:h,onRuntimeInitialized:A},BASIS(t)})).then((()=>{t.initializeBasis(),void 0===t.KTX2File&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")}));break;case"transcode":e.then((()=>{try{const{faces:e,buffers:o,width:h,height:I,hasAlpha:C,format:B,dfdTransferFn:d,dfdFlags:E}=function(e){const o=new t.KTX2File(new Uint8Array(e));function c(){o.close(),o.delete()}if(!o.isValid())throw c(),new Error("THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file");const h=o.isUASTC()?i.UASTC_4x4:i.ETC1S,I=o.getWidth(),C=o.getHeight(),B=o.getLayers()||1,d=o.getLevels(),E=o.getFaces(),u=o.getHasAlpha(),Q=o.getDFDTransferFunc(),f=o.getDFDFlags(),{transcoderFormat:p,engineFormat:m}=function(e,t,o,l){let c,h;const I=e===i.ETC1S?n:a;for(let s=0;s<I.length;s++){const r=I[s];if(A[r.if]&&(r.basisFormat.includes(e)&&!(l&&r.transcoderFormat.length<2)&&(!r.needsPowerOfTwo||g(t)&&g(o))))return c=r.transcoderFormat[l?1:0],h=r.engineFormat[l?1:0],{transcoderFormat:c,engineFormat:h}}return console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."),c=r.RGBA32,h=s.RGBAFormat,{transcoderFormat:c,engineFormat:h}}(h,I,C,u);if(!I||!C||!d)throw c(),new Error("THREE.KTX2Loader:\tInvalid texture");if(!o.startTranscoding())throw c(),new Error("THREE.KTX2Loader: .startTranscoding failed");const y=[],w=[];for(let A=0;A<E;A++){const e=[];for(let t=0;t<d;t++){const s=[];let r,i;for(let e=0;e<B;e++){const n=o.getImageLevelInfo(t,e,A);0!==A||0!==t||0!==e||n.origWidth%4==0&&n.origHeight%4==0||console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),d>1?(r=n.origWidth,i=n.origHeight):(r=n.width,i=n.height);const a=new Uint8Array(o.getImageTranscodedSizeInBytes(t,e,0,p));if(!o.transcodeImage(a,t,e,A,p,0,-1,-1))throw c(),new Error("THREE.KTX2Loader: .transcodeImage failed.");s.push(a)}const n=l(s);e.push({data:n,width:r,height:i}),w.push(n.buffer)}y.push({mipmaps:e,width:I,height:C,format:m})}return c(),{faces:y,buffers:w,width:I,height:C,hasAlpha:u,format:m,dfdTransferFn:Q,dfdFlags:f}}(c.buffer);self.postMessage({type:"transcode",id:c.id,faces:e,width:h,height:I,hasAlpha:C,format:B,dfdTransferFn:d,dfdFlags:E},o)}catch(A){console.error(A),self.postMessage({type:"error",id:c.id,error:A.message})}}))}var h}));const o=[{if:"astcSupported",basisFormat:[i.UASTC_4x4],transcoderFormat:[r.ASTC_4x4,r.ASTC_4x4],engineFormat:[s.RGBA_ASTC_4x4_Format,s.RGBA_ASTC_4x4_Format],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[r.BC7_M5,r.BC7_M5],engineFormat:[s.RGBA_BPTC_Format,s.RGBA_BPTC_Format],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[r.BC1,r.BC3],engineFormat:[s.RGB_S3TC_DXT1_Format,s.RGBA_S3TC_DXT5_Format],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[r.ETC1,r.ETC2],engineFormat:[s.RGB_ETC2_Format,s.RGBA_ETC2_EAC_Format],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[r.ETC1],engineFormat:[s.RGB_ETC1_Format],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[r.PVRTC1_4_RGB,r.PVRTC1_4_RGBA],engineFormat:[s.RGB_PVRTC_4BPPV1_Format,s.RGBA_PVRTC_4BPPV1_Format],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0}],n=o.sort((function(A,e){return A.priorityETC1S-e.priorityETC1S})),a=o.sort((function(A,e){return A.priorityUASTC-e.priorityUASTC}));function g(A){return A<=2||0==(A&A-1)&&0!==A}function l(A){if(1===A.length)return A[0];let e=0;for(let t=0;t<A.length;t++){e+=A[t].byteLength}const t=new Uint8Array(e);let s=0;for(let e=0;e<A.length;e++){const r=A[e];t.set(r,s),s+=r.byteLength}return t}};const wA={109:A.RGBAFormat,97:A.RGBAFormat,37:A.RGBAFormat,43:A.RGBAFormat,103:A.RGFormat,83:A.RGFormat,16:A.RGFormat,22:A.RGFormat,100:A.RedFormat,76:A.RedFormat,15:A.RedFormat,9:A.RedFormat},DA={109:A.FloatType,97:A.HalfFloatType,37:A.UnsignedByteType,43:A.UnsignedByteType,103:A.FloatType,83:A.HalfFloatType,16:A.UnsignedByteType,22:A.UnsignedByteType,100:A.FloatType,76:A.HalfFloatType,15:A.UnsignedByteType,9:A.UnsignedByteType},xA={43:A.SRGBColorSpace,22:A.SRGBColorSpace,15:A.SRGBColorSpace};async function RA(e,t=0){const{vkFormat:s}=e,r=Math.max(1,e.pixelWidth>>t),i=Math.max(1,e.pixelHeight>>t),o=Math.max(1,e.pixelDepth>>t);if(void 0===wA[s])throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");const n=e.levels[t];let a,g;if(0===e.supercompressionScheme)a=n.levelData;else{if(2!==e.supercompressionScheme)throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");pA||(pA=new Promise((async A=>{const e=new uA;await e.init(),A(e)}))),a=(await pA).decode(n.levelData,n.uncompressedByteLength)}g=DA[s]===A.FloatType?new Float32Array(a.buffer,a.byteOffset,a.byteLength/Float32Array.BYTES_PER_ELEMENT):DA[s]===A.HalfFloatType?new Uint16Array(a.buffer,a.byteOffset,a.byteLength/Uint16Array.BYTES_PER_ELEMENT):a;const l=0===o?new A.DataTexture(g,r,i):new A.Data3DTexture(g,r,i,o);return l.type=DA[s],l.format=wA[s],l.colorSpace=xA[s]||A.NoColorSpace,l.needsUpdate=!0,Promise.resolve(l)}const SA=new TextDecoder;class TA{constructor(A,e,t,s){this.buffer=A,this.binOffset=e+t,this.binLength=s;let r=null;if(0!==t)try{const s=new Uint8Array(A,e,t);r=JSON.parse(SA.decode(s))}catch(A){r={}}else r={};this.header=r}getKeys(){return Object.keys(this.header)}getData(A,e){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;const r=this.header;if(!(A in r))return null;const i=r[A];if(i instanceof Object){if(Array.isArray(i))return i;{const{buffer:r,binOffset:o,binLength:n}=this,a=i.byteOffset||0,g=i.type||s,l=i.componentType||t;if("type"in i&&s&&i.type!==s)throw new Error("FeatureTable: Specified type does not match expected type.");let c,h;switch(g){case"SCALAR":c=1;break;case"VEC2":c=2;break;case"VEC3":c=3;break;case"VEC4":c=4;break;default:throw new Error('FeatureTable : Feature type not provided for "'.concat(A,'".'))}const I=o+a,C=e*c;switch(l){case"BYTE":h=new Int8Array(r,I,C);break;case"UNSIGNED_BYTE":h=new Uint8Array(r,I,C);break;case"SHORT":h=new Int16Array(r,I,C);break;case"UNSIGNED_SHORT":h=new Uint16Array(r,I,C);break;case"INT":h=new Int32Array(r,I,C);break;case"UNSIGNED_INT":h=new Uint32Array(r,I,C);break;case"FLOAT":h=new Float32Array(r,I,C);break;case"DOUBLE":h=new Float64Array(r,I,C);break;default:throw new Error('FeatureTable : Feature component type not provided for "'.concat(A,'".'))}if(I+C*h.BYTES_PER_ELEMENT>o+n)throw new Error("FeatureTable: Feature data read outside binary body length.");return h}}return i}}class MA extends TA{constructor(A,e,t,s,r){super(A,t,s,r),this.batchSize=e}getData(A){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return super.getData(A,this.batchSize,e,t)}}function bA(A,e,t){return e=function(A){var e=function(A,e){if("object"!=typeof A||!A)return A;var t=A[Symbol.toPrimitive];if(void 0!==t){var s=t.call(A,e||"default");if("object"!=typeof s)return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}(A,"string");return"symbol"==typeof e?e:String(e)}(e),e in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const LA=new A.Matrix4;LA.set(1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1);const FA="https://www.gstatic.com/draco/versioned/decoders/1.4.3/",GA="https://storage.googleapis.com/ogc-3d-tiles/basis/",kA="draco-decoders/",UA="ktx2-decoders/";class _A{constructor(e){bA(this,"checkLoaderInitialized",(async()=>new Promise((A=>{const e=setInterval((()=>{this.gltfLoader.dracoLoader&&this.gltfLoader.ktx2Loader&&(clearInterval(e),A())}),10)})))),this.gltfLoader=new l,this.tempMatrix=new A.Matrix4;const t=new nA,s=new yA;async function r(A){return fetch(A,{method:"HEAD"}).then((A=>A.ok)).catch((A=>!1))}r(kA+"draco_decoder.wasm").then((A=>(A?t.setDecoderPath(kA):(console.log("no local draco decoder found in "+kA+", fetching online at "+FA),t.setDecoderPath(FA)),r(UA+"basis_transcoder.wasm")))).then((A=>{A?s.setTranscoderPath(UA).detectSupport(e):(console.log("no local ktx2 decoder found in "+UA+", fetching online at "+GA),s.setTranscoderPath(GA).detectSupport(e))})).then((()=>{this.gltfLoader.setDRACOLoader(t),this.gltfLoader.setKTX2Loader(s)}))}parseB3DM(A,e,t,s){const r=new DataView(A),i=String.fromCharCode(r.getUint8(0))+String.fromCharCode(r.getUint8(1))+String.fromCharCode(r.getUint8(2))+String.fromCharCode(r.getUint8(3));console.assert("b3dm"===i);const o=r.getUint32(8,!0);console.assert(o===A.byteLength);const n=r.getUint32(12,!0),a=r.getUint32(16,!0),g=r.getUint32(20,!0),l=r.getUint32(24,!0),c=new TA(A,28,n,a),h=28+n+a,I=(new MA(A,c.getData("BATCH_LENGTH"),h,g,l),h+g+l),C=new Uint8Array(A,I,o-I).slice().buffer;return new Promise((async(A,r)=>{await this.checkLoaderInitialized(),this.gltfLoader.parse(C,null,(r=>{const i=c.getData("RTC_CENTER");i?(this.tempMatrix.makeTranslation(i[0],i[1],i[2]),r.scene.applyMatrix4(this.tempMatrix)):r.userData.gltfExtensions&&r.userData.gltfExtensions.CESIUM_RTC&&(this.tempMatrix.makeTranslation(r.userData.gltfExtensions.CESIUM_RTC.center[0],r.userData.gltfExtensions.CESIUM_RTC.center[1],r.userData.gltfExtensions.CESIUM_RTC.center[2]),r.scene.applyMatrix4(this.tempMatrix)),t&&r.scene.applyMatrix4(LA),r.scene.asset=r.asset,r.scene.traverse((A=>{A.isMesh&&(s&&A.applyMatrix4(LA),e&&e(A))})),A(r.scene)}),(A=>{console.error(A)}))}))}parseB3DMInstanced(e,t,s,r,i){return this.parseB3DM(e,t,r,i).then((e=>{let t,r=[],i=[];e.updateWorldMatrix(!1,!0),e.traverse((A=>{A.isMesh&&(A.geometry.applyMatrix4(A.matrixWorld),r.push(A.geometry),i.push(A.material))}));let o=function(e){let t=new Set;e.forEach((A=>{for(let e in A.attributes)t.add(e)})),e.forEach((e=>{t.forEach((t=>{if(!e.attributes[t]){const s=function(A){switch(A){case"position":case"normal":case"color":return 3;case"uv":case"uv2":return 2;default:throw new Error("Unknown attribute ".concat(A))}}(t),r=new Float32Array(s*e.getAttribute("position").count).fill(0);e.setAttribute(t,new A.BufferAttribute(r,s))}}))}));let s=n(e,!0);return s}(r);return t=new A.InstancedMesh(o,i,s),t.baseMatrix=(new A.Matrix4).identity(),t}))}}async function NA(A){const e=A.split("?")[0].split(".").pop(),t=await fetch(A);if(!t.ok)throw new Error("Failed to fetch ".concat(A,": ").concat(t.statusText));if("json"===e){const e=await t.json();return handleJSONSubtree(e,vA(A))}if("subtree"===e){return async function(A,e){const t=new DataView(A),s=t.getBigUint64(8,!0),r=t.getBigUint64(16,!0),i=24,o=i+Number(s),n=o+(8-o%8)%8,a=n+Number(r),g=A.slice(i,o),l=(new TextDecoder).decode(g).trim(),c=JSON.parse(l);if(!c.buffers)throw new Error("subtree has no buffers");const h=c.buffers.map((async t=>{if(t.uri){const A=new URL(t.uri,e).href,s=await fetch(A);if(!s.ok)throw new Error("Failed to fetch binary file ".concat(A,": ").concat(s.statusText));return new Uint8Array(await s.arrayBuffer())}return new Uint8Array(A.slice(n,a))})),I=await Promise.all(h);return HA(c,I)}(await t.arrayBuffer(),vA(A))}throw new Error("Unsupported file extension: ".concat(e))}function vA(A){const e=A.split("?")[0];return e.substring(0,e.lastIndexOf("/")+1)}function HA(A,e){function t(t,s){if(!t)throw new Error("incomplete json subtree");if(t.constant){if(0==t.constant)return!1;if(1==t.constant)return!0}if(null==t.bitstream)throw new Error('json subtree "tileAvailability" does not specify a bitstream');if(!A.bufferViews||!A.bufferViews[t.bitstream])throw new Error('json subtree "bufferViews" does not specify a bitstream');const r=A.bufferViews[t.bitstream];return function(A,e,t){const s=e+Math.floor(t/8),r=t%8;return A[s]>>r&!0}(e[r.buffer],r.byteOffset,s)}return{isTileAvailable:function(e){let s=0;return s=null==e.z?PA(e.x,e.y,e.level):JA(e.x,e.y,e.z,e.level),t(A.tileAvailability,s)},isContentAvailable:function(e){let s=0;s=null==e.z?PA(e.x,e.y,e.level):JA(e.x,e.y,e.z,e.level);const r=[];return A.contentAvailability.forEach((A=>{r.push(t(A,s))})),r},isChildSubtreeAvailable:function(e){let s=0;return s=null==e.z?PA(e.x,e.y):JA(e.x,e.y,e.z),t(A.childSubtreeAvailability,s)}}}function qA(A){return A=1431655765&((A=858993459&((A=252645135&((A=16711935&((A&=65535)^A<<8))^A<<4))^A<<2))^A<<1)}function PA(A,e,t){let s=0;return t&&(s=(Math.pow(4,t)-1)/3),s+(qA(A)|qA(e)<<1)}function OA(A){return A=153391689&((A=51130563&((A=50393103&((A=4278190335&((A&=1023)^A<<16))^A<<8))^A<<4))^A<<2)}function JA(A,e,t,s){let r=0;return s&&(r=(Math.pow(8,s)-1)/7),r+(OA(A)|OA(e)<<1|OA(t)<<2)}const VA=new Map;async function jA(A,e){if(!A.root||!A.root.implicitTiling)return A;if(!A.root.content&&!A.root.contents)throw new Error("implicit tiling requires a Template URI");let t=!0;A.root.implicitTiling.subdivisionScheme&&(t="QUADTREE"===A.root.implicitTiling.subdivisionScheme.toUpperCase());let s="";A.root.implicitTiling.subtrees&&(A.root.implicitTiling.subtrees.uri?s=A.root.implicitTiling.subtrees.uri:A.root.implicitTiling.subtrees.url&&(s=A.root.implicitTiling.subtrees.url));let r=[];A.root.content?A.root.content.uri?r.push(A.root.content.uri):A.root.content.url&&r.push(A.root.content.url):A.root.contents&&A.root.contents.forEach((A=>{A.uri?r.push(A.uri):A.url&&r.push(A.url)}));const i=function(A){const e=A.split("?")[0];return e.substring(0,e.lastIndexOf("/")+1)}(e);let o;t&&(o=s.replace("{level}",0).replace("{x}",0).replace("{y}",0)),t||(o=s.replace("{level}",0).replace("{x}",0).replace("{y}",0).replace("{z}",0));const n={level:0,x:0,y:0},a={level:0,x:0,y:0};t||(n.z=0,a.z=0),VA.set(o,await NA(i+o));const g=VA.get(o),l=[];g.isContentAvailable(a)&&r.forEach((A=>{let e;t&&(e=A.replace("{level}",n.level).replace("{x}",n.x).replace("{y}",n.y)),t||(e=A.replace("{level}",n.level).replace("{x}",n.x).replace("{y}",n.y).replace("{z}",n.z)),l.push({uri:e})}));const c={geometricError:A.root.geometricError,boundingVolume:A.root.boundingVolume,refine:A.root.refine,globalAddress:n,localAddress:a,subtree:g,contents:l,getChildren:async()=>h(c)};return{root:c};async function h(e){const n=[];if(e.localAddress.level==A.root.implicitTiling.availableLevels-1)return n;if((e.localAddress.level+1)%A.root.implicitTiling.subtreeLevels==0){const a=KA(e.localAddress),g=KA(e.globalAddress),l=YA(t,A.root.boundingVolume,g);for(let c=0;c<a.length;c++){const I=a[c],C=g[c];if(e.subtree.isChildSubtreeAvailable(I)){let A;t&&(A=s.replace("{level}",C.level).replace("{x}",C.x).replace("{y}",C.y)),t||(A=s.replace("{level}",C.level).replace("{x}",C.x).replace("{y}",C.y).replace("{z}",C.z))}VA.has(o)||VA.set(o,await NA(i+o));const B=VA.get(o),d={level:0,x:0,y:0};t||(d.z=0);const E=[];B.isContentAvailable(d)&&r.forEach((A=>{let e;if(t&&(e=A.replace("{level}",C.level).replace("{x}",C.x).replace("{y}",C.y)),!t){Math.floor(z/factor);e=A.replace("{level}",C.level).replace("{x}",C.x).replace("{y}",C.y).replace("{z}",C.z)}E.push({uri:e})}));const u={geometricError:e.geometricError/2,boundingVolume:l[c],refine:A.root.refine,globalAddress:C,localAddress:d,subtree:B,contents:E,getChildren:async()=>h(u)};n.push(u)}}else{const s=KA(e.localAddress),i=KA(e.globalAddress),o=YA(t,A.root.boundingVolume,i);for(let a=0;a<s.length;a++){const g=s[a],l=i[a];if(!e.subtree.isTileAvailable(g))continue;const c=[],I=e.subtree.isContentAvailable(g);for(let A=0;A<r.length;A++){if(!I[A])continue;const e=r[A];let s;t&&(s=e.replace("{level}",l.level).replace("{x}",l.x).replace("{y}",l.y)),t||(s=e.replace("{level}",l.level).replace("{x}",l.x).replace("{y}",l.y).replace("{z}",l.z)),c.push({uri:s})}const C={geometricError:e.geometricError/2,boundingVolume:o[a],refine:A.root.refine,globalAddress:l,localAddress:g,subtree:e.subtree,contents:c,getChildren:async()=>h(C)};n.push(C)}}return n.length>0?n:void 0}}function KA(A){const{level:e,x:t,y:s,z:r}=A,i=e+1;let o=[];return o=void 0===r?[{level:i,x:2*t,y:2*s},{level:i,x:2*t+1,y:2*s},{level:i,x:2*t,y:2*s+1},{level:i,x:2*t+1,y:2*s+1}]:[{level:i,x:2*t,y:2*s,z:2*r},{level:i,x:2*t+1,y:2*s,z:2*r},{level:i,x:2*t,y:2*s+1,z:2*r},{level:i,x:2*t+1,y:2*s+1,z:2*r},{level:i,x:2*t,y:2*s,z:2*r+1},{level:i,x:2*t+1,y:2*s,z:2*r+1},{level:i,x:2*t,y:2*s+1,z:2*r+1},{level:i,x:2*t+1,y:2*s+1,z:2*r+1}],o}function YA(A,e,t){const s=[];for(let r=0;r<t.length;r++)s.push(WA(A,e,t[r]));return s}function WA(A,e,t){if(e.region)return function(A,e,t){const[s,r,i,o,n,a]=e,g=(i-s)/2**t.level,l=(o-r)/2**t.level,c=A?0:(a-n)/2**t.level,h=s+g*t.x,I=r+l*t.y,C=h+g,B=I+l,d=A?n:n+c*t.z,E=A?a:d+c;return{region:[h,I,C,B,d,E]}}(A,e.region,t);if(e.box)return function(A,e,t){const s=e.slice(0,3),r=[e.slice(3,6),e.slice(6,9),e.slice(9,12)],i=1/Math.pow(2,t.level),o=[i,i,A?1:i],n=r.map(((A,e)=>A.map((A=>A*o[e])))),a=[s[0]-r[0][0]-r[1][0]-r[2][0],s[1]-r[0][1]-r[1][1]-r[2][1],s[2]-r[0][2]-r[1][2]-r[2][2]],g=[a[0]+(2*t.x+1)*(n[0][0]+n[1][0]+n[2][0]),a[1]+(2*t.y+1)*(n[0][1]+n[1][1]+n[2][1]),A?s[2]:a[2]+(2*t.z+1)*(n[0][2]+n[1][2]+n[2][2])];return{box:g.concat(...n)}}(A,e.box,t);throw new Error("Unsupported bounding volume type")}const XA=new A.Matrix4;XA.set(1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1);class zA{constructor(A){this.maxCachedItems=100,this.proxy=A.proxy,A&&(this.meshCallback=A.meshCallback,this.pointsCallback=A.pointsCallback,A.maxCachedItems&&(this.maxCachedItems=A.maxCachedItems)),this.gltfLoader=new l;const e=new nA;if(e.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.4.3/"),this.gltfLoader.setDRACOLoader(e),A&&A.renderer){const e=new yA;e.setTranscoderPath("https://storage.googleapis.com/ogc-3d-tiles/basis/").detectSupport(A.renderer),this.gltfLoader.setKTX2Loader(e),this.b3dmDecoder=new _A(A.renderer)}else this.b3dmDecoder=new _A(null);this.cache=new o.LinkedHashMap,this.register={},this.concurrentDownloads=0,this.ready=[],this.downloads=[],this.nextReady=[],this.nextDownloads=[],this.init()}init(){const A=this;ZA((()=>{A.concurrentDownloads>8||A.download()}),10),ZA((()=>{const e=Date.now();let t=0;do{t=A.loadBatch()}while(t>0&&Date.now()-e<=0)}),10)}scheduleDownload(A){this.downloads.unshift(A)}download(){if(0!=this.nextDownloads.length||(this.getNextDownloads(),0!=this.nextDownloads.length))for(;this.nextDownloads.length>0;){const A=this.nextDownloads.shift();A&&A.shouldDoDownload()&&A.doDownload()}}meshReceived(A,e,t,s,r,i,o){this.ready.unshift([A,e,t,s,r,i,o])}loadBatch(){if(0==this.nextReady.length&&(this.getNextReady(),0==this.nextReady.length))return 0;const A=this.nextReady.shift();if(!A)return 0;const e=A[0],t=A[1],s=A[2],r=e.get(s);return r&&t[s]&&Object.keys(t[s]).forEach((A=>{const e=t[s][A];e&&(e(r),t[s][A]=null)})),1}getNextDownloads(){let A=Number.MAX_VALUE,e=-1;for(let A=this.downloads.length-1;A>=0;A--)this.downloads[A].shouldDoDownload()?this.downloads[A].distanceFunction||this.nextDownloads.push(this.downloads.splice(A,1)[0]):this.downloads.splice(A,1);if(!(this.nextDownloads.length>0)){for(let t=this.downloads.length-1;t>=0;t--){const s=this.downloads[t].distanceFunction()*this.downloads[t].level;s<A&&(A=s,e=t)}if(e>=0){const A=this.downloads.splice(e,1).pop();this.nextDownloads.push(A);const t=A.getSiblings();for(let A=this.downloads.length-1;A>=0;A--)t.map((A=>A.uuid)).includes(this.downloads[A].uuid)&&this.nextDownloads.push(this.downloads.splice(A,1).pop())}}}getNextReady(){let A=Number.MAX_VALUE,e=-1;for(let A=this.ready.length-1;A>=0;A--)this.ready[A][3]||this.nextReady.push(this.ready.splice(A,1)[0]);if(!(this.nextReady.length>0)){for(let t=this.ready.length-1;t>=0;t--){const s=this.ready[t][3]()*this.ready[t][5];s<A&&(A=s,e=t)}if(e>=0){const A=this.ready.splice(e,1).pop();this.nextReady.push(A)}}}get(A,e,t,s,r,i,o,n,a,g){const l=this,c=$A(t),h=new AbortController;if(A.signal.addEventListener("abort",(()=>{l.register[c]&&0!=Object.keys(l.register[c]).length||h.abort()})),!(t.includes(".b3dm")||t.includes(".json")||t.includes(".gltf")||t.includes(".glb")))return void console.error("the 3DTiles cache can only be used to load B3DM, gltf and json data");l.register[c]||(l.register[c]={}),l.register[c][e]&&console.error(" a tile should only be loaded once"),l.register[c][e]=s;if(l.cache.get(c))this.meshReceived(l.cache,l.register,c,r,i,o,e);else if(1==Object.keys(l.register[c]).length){let s;t.includes(".b3dm")?s=()=>{var A;A=l.proxy?()=>fetch(l.proxy,{method:"POST",body:t,signal:h.signal}):()=>fetch(t,{signal:h.signal}),l.concurrentDownloads++,A().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+t),new Error("couldn't load \"".concat(t,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.arrayBuffer()})).then((A=>this.b3dmDecoder.parseB3DM(A,l.meshCallback,n,a))).then((A=>{l.cache.put(c,A),l.checkSize(),this.meshReceived(l.cache,l.register,c,r,i,o,e)})).catch((A=>{console.error(A)})).finally((()=>{l.concurrentDownloads--}))}:t.includes(".glb")||t.includes(".gltf")?s=()=>{var A;A=l.proxy?()=>fetch(l.proxy,{method:"POST",body:t,signal:h.signal}):()=>fetch(t,{signal:h.signal}),l.concurrentDownloads++,A().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+t),new Error("couldn't load \"".concat(t,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.arrayBuffer()})).then((async A=>{await async function(A){return new Promise((e=>{const t=setInterval((()=>{A.dracoLoader&&A.ktx2Loader&&(clearInterval(t),e())}),10)}))}(this.gltfLoader),this.gltfLoader.parse(A,null,(A=>{A.scene.asset=A.asset,n&&A.scene.applyMatrix4(XA),A.scene.traverse((A=>{A.isMesh&&(a&&A.applyMatrix4(XA),l.meshCallback&&l.meshCallback(A,g)),A.isPoints&&l.pointsCallback&&l.pointsCallback(A,g)})),l.cache.put(c,A.scene),l.checkSize(),l.meshReceived(l.cache,l.register,c,r,i,o,e)}))})).catch((A=>{console.error(A)})).finally((()=>{l.concurrentDownloads--}))}:t.includes(".json")&&(s=()=>{var A;A=l.proxy?()=>fetch(l.proxy,{method:"POST",body:t,signal:h.signal}):()=>fetch(t,{signal:h.signal}),l.concurrentDownloads++,A().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+t),new Error("couldn't load \"".concat(t,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.json()})).then((A=>jA(A,t))).then((A=>{l.cache.put(c,A),l.checkSize(),l.meshReceived(l.cache,l.register,c)})).catch((A=>{console.error(A)})).finally((()=>{l.concurrentDownloads--}))}),this.scheduleDownload({shouldDoDownload:()=>!A.signal.aborted&&!!l.register[c]&&Object.keys(l.register[c]).length>0,doDownload:s,distanceFunction:r,getSiblings:i,level:o,uuid:e})}}invalidate(A,e){const t=$A(A);this.register[t]&&delete this.register[t][e]}checkSize(){const A=this;let e=0;for(;A.cache.size()>A.maxCachedItems&&e<A.cache.size();){e++;const t=A.cache.head(),s=A.register[t.key];s&&(Object.keys(s).length>0?(A.cache.remove(t.key),A.cache.put(t.key,t.value)):(A.cache.remove(t.key),delete A.register[t.key],t.value.traverse((A=>{if(A.material)if(A.material.length)for(let e=0;e<A.material.length;++e)A.material[e].dispose();else A.material.dispose();A.geometry&&A.geometry.dispose()}))))}}}function ZA(A,e){let t;const s=async()=>{const r=Date.now();try{await A()}catch(A){console.error(A)}finally{const A=Date.now()-r;t=setTimeout(s,A>=e?0:e-A)}};return t=setTimeout(s,e),{clearInterval:()=>clearTimeout(t)}}function $A(A){for(var e=A.split("/"),t=[],s=0,r=0;r<e.length;r++){var i=e[r];"."!==i&&""!==i&&".."!==i?t[s++]=i:".."===i&&s>0&&s--}if(0===s)return"/";var o="";for(r=0;r<s;r++)o+="/"+t[r];return o}var Ae,ee=new Uint8Array(16);function te(){if(!Ae&&!(Ae="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ae(ee)}const se=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;const re=function(A){return"string"==typeof A&&se.test(A)};for(var ie=[],oe=0;oe<256;++oe)ie.push((oe+256).toString(16).substr(1));const ne=function(A){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(ie[A[e+0]]+ie[A[e+1]]+ie[A[e+2]]+ie[A[e+3]]+"-"+ie[A[e+4]]+ie[A[e+5]]+"-"+ie[A[e+6]]+ie[A[e+7]]+"-"+ie[A[e+8]]+ie[A[e+9]]+"-"+ie[A[e+10]]+ie[A[e+11]]+ie[A[e+12]]+ie[A[e+13]]+ie[A[e+14]]+ie[A[e+15]]).toLowerCase();if(!re(t))throw TypeError("Stringified UUID is invalid");return t};const ae=function(A,e,t){var s=(A=A||{}).random||(A.rng||te)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,e){t=t||0;for(var r=0;r<16;++r)e[t+r]=s[r];return e}return ne(s)};var ge,le=s(975);const ce=new A.Sphere(new A.Vector3(0,0,0),1),he=new A.Vector3(0,0,0),Ie=new A.Vector3(0,0,0),Ce=new A.Vector3(0,1,0),Be=new A.Vector2(1e3,1e3),de=new A.Quaternion,Ee={};class ue extends A.Object3D{constructor(t){super();const s=this;if(this.proxy=t.proxy,this.displayErrors=t.displayErrors,this.displayCopyright=t.displayCopyright,t.queryParams&&(this.queryParams={...t.queryParams}),this.uuid=ae(),t.tileLoader)this.tileLoader=t.tileLoader;else{const e={};e.meshCallback=t.meshCallback?t.meshCallback:(e,t)=>{e.material.wireframe=!1,e.material.side=A.DoubleSide},e.pointsCallback=t.pointsCallback?t.pointsCallback:(A,e)=>{A.material.size=Math.pow(e,.33),A.material.sizeAttenuation=!0},e.proxy=this.proxy,e.renderer=t.renderer,this.tileLoader=new zA(e)}if(this.displayCopyright=!!t.displayCopyright,this.geometricErrorMultiplier=t.geometricErrorMultiplier?t.geometricErrorMultiplier:1,this.renderer=t.renderer,this.meshCallback=t.meshCallback,this.loadOutsideView=t.loadOutsideView,this.cameraOnLoad=t.cameraOnLoad,this.parentTile=t.parentTile,this.occlusionCullingService=t.occlusionCullingService,this.static=t.static,this.occlusionCullingService&&(this.color=new A.Color,this.color.setHex(16777215*Math.random()),this.colorID=e(255*s.color.r,0,255)<<16^e(255*s.color.g,0,255)<<8^e(255*s.color.b,0,255)<<0),this.static&&(this.matrixAutoUpdate=!1),this.childrenTiles=[],this.meshContent=[],this.tileContent,this.refine,this.rootPath,this.geometricError,this.boundingVolume,this.json,this.materialVisibility=!1,this.inFrustum=!0,this.level=t.level?t.level:0,this.hasMeshContent=0,this.hasUnloadedJSONContent=0,this.centerModel=t.centerModel,this.abortController=new AbortController,t.json)s.setup(t);else if(t.url){var r=t.url;if(s.queryParams){var i="";for(let A in s.queryParams)s.queryParams.hasOwnProperty(A)&&(i+="&"+A+"="+s.queryParams[A]);r.includes("?")?r+=i:r+="?"+i.substring(1)}(s.proxy?()=>fetch(s.proxy,{method:"POST",body:r,signal:s.abortController.signal}):()=>fetch(r,{signal:s.abortController.signal}))().then((A=>{if(!A.ok)throw new Error("couldn't load \"".concat(t.url,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));A.json().then((A=>jA(A,r))).then((A=>{s.setup({rootPath:le.dirname(t.url),json:A,onLoadCallback:t.onLoadCallback})}))})).catch((A=>{s.displayErrors&&Qe(A)}))}}async setup(e){const t=this;if(e.json.root?(t.json=e.json.root,t.json.refine||(t.json.refine=e.json.refine),t.json.geometricError||(t.json.geometricError=e.json.geometricError),t.json.transform||(t.json.transform=e.json.transform),t.json.boundingVolume||(t.json.boundingVolume=e.json.boundingVolume)):t.json=e.json,t.json.children||(t.json.getChildren?t.json.children=await t.json.getChildren():t.json.children=[]),t.rootPath=e.json.rootPath?e.json.rootPath:e.rootPath,t.json.refine?t.refine=t.json.refine:t.refine=e.parentRefine,t.json.geometricError?t.geometricError=t.json.geometricError:t.geometricError=e.parentGeometricError,t.json.transform&&!t.centerModel){let e=new A.Matrix4;e.elements=t.json.transform,t.applyMatrix4(e)}if(t.json.boundingVolume)if(t.json.boundingVolume.box)t.boundingVolume=new i(t.json.boundingVolume.box);else if(t.json.boundingVolume.region){const e=t.json.boundingVolume.region;t.transformWGS84ToCartesian(e[0],e[1],e[4],he),t.transformWGS84ToCartesian(e[2],e[3],e[5],Ie),he.lerp(Ie,.5),t.boundingVolume=new A.Sphere(new A.Vector3(he.x,he.y,he.z),he.distanceTo(Ie))}else if(t.json.boundingVolume.sphere){const e=t.json.boundingVolume.sphere;t.boundingVolume=new A.Sphere(new A.Vector3(e[0],e[1],e[2]),e[3])}else t.boundingVolume=e.parentBoundingVolume;else t.boundingVolume=e.parentBoundingVolume;function s(A){A.uri&&A.uri.includes("json")||A.url&&A.url.includes("json")?t.hasUnloadedJSONContent++:t.hasMeshContent++}if(t.json.content?(s(t.json.content),t.load()):t.json.contents&&(t.json.contents.forEach((A=>s(A))),t.load()),t.centerModel){const e=new A.Sphere;t.boundingVolume instanceof i?e.copy(t.boundingVolume.sphere):t.boundingVolume instanceof A.Sphere&&e.copy(t.boundingVolume),this.json.boundingVolume.region&&(this.transformWGS84ToCartesian(.5*(this.json.boundingVolume.region[0]+this.json.boundingVolume.region[2]),.5*(this.json.boundingVolume.region[1]+this.json.boundingVolume.region[3]),.5*(this.json.boundingVolume.region[4]+this.json.boundingVolume.region[5]),he),de.setFromUnitVectors(he.normalize(),Ce.normalize()),t.applyQuaternion(de)),t.translateX(-e.center.x*t.scale.x),t.translateY(-e.center.y*t.scale.y),t.translateZ(-e.center.z*t.scale.z)}e.onLoadCallback&&e.onLoadCallback(t),t.isSetup=!0}assembleURL(A,e){A.endsWith("/")||(A+="/");const t=new URL(A);let s=t.pathname.split("/").filter((A=>""!==A)),r=e.split("/").filter((A=>""!==A));for(let A=1;A<=s.length&&!(A>=r.length);A++){if(s.slice(s.length-A,s.length).join("/")===r.slice(0,A).join("/")){for(let e=0;e<A;e++)s.pop();break}}for(;r.length>0&&".."===r[0];)s.pop(),r.shift();return"".concat(t.protocol,"//").concat(t.host,"/").concat([...s,...r].join("/"))}extractQueryParams(A,e){const t=new URL(A);for(let[A,s]of t.searchParams)e[A]=s;return t.search="",t.toString()}async load(){var e=this;if(!e.deleted)if(e.json.content)await t(e.json.content,null);else if(e.json.contents){let A=e.json.contents.map(((A,e)=>t(A,e)));Promise.all(A)}async function t(t,s){let r;t.uri?r=t.uri:t.url&&(r=t.url);const i=/^(?:http|https|ftp|tcp|udp):\/\/\S+/;if(i.test(e.rootPath)?i.test(r)||(r=e.assembleURL(e.rootPath,r)):le.isAbsolute(e.rootPath)&&(r=e.rootPath+le.sep+r),r=e.extractQueryParams(r,e.queryParams),e.queryParams){var o="";for(let A in e.queryParams)e.queryParams.hasOwnProperty(A)&&(o+="&"+A+"="+e.queryParams[A]);r.includes("?")?r+=o:r+="?"+o.substring(1)}if(r)if(r.includes(".b3dm")||r.includes(".glb")||r.includes(".gltf")){e.contentURL=r;try{e.tileLoader.get(e.abortController,e.uuid,r,(t=>{if(e.deleted)return;t.asset&&t.asset.copyright&&(t.asset.copyright.split(";").forEach((A=>{Ee[A]?Ee[A]++:Ee[A]=1})),e.displayCopyright&&fe()),t.traverse((t=>{if((t.isMesh||t.isPoints)&&(t.layers.disable(0),e.static&&(t.matrixAutoUpdate=!1)),t.isMesh&&e.occlusionCullingService){const s=t.geometry.attributes.position,r=[];for(let A=0;A<s.count;A++)r.push(e.color.r,e.color.g,e.color.b);t.geometry.setAttribute("color",new A.Float32BufferAttribute(r,3))}}));Date.now();e.add(t),e.updateWorldMatrix(!1,!0),e.meshContent.push(t)}),e.cameraOnLoad?()=>e.calculateDistanceToCamera(e.cameraOnLoad):()=>0,(()=>e.getSiblings()),e.level,!e.json.boundingVolume.region,!!e.json.boundingVolume.region,e.geometricError)}catch(A){e.displayErrors&&Qe(A)}}else r.includes(".json")&&e.tileLoader.get(e.abortController,e.uuid,r,(async A=>{e.deleted||(A.rootPath=le.dirname(r),e.json.children.push(A),null==s?delete e.json.content:e.json.contents.splice(s,1),e.hasUnloadedJSONContent--)}))}}dispose(){const A=this;A.meshContent.forEach((e=>{e&&e.asset&&e.asset.copyright&&(e.asset.copyright.split(";").forEach((A=>{Ee[A]&&Ee[A]--})),A.displayCopyright&&fe())})),A.childrenTiles.forEach((A=>A.dispose())),A.deleted=!0,this.traverse((function(e){e.contentURL&&A.tileLoader.invalidate(e.contentURL,e.uuid),e.abortController&&e.abortController.abort()})),this.parent=null,this.parentTile=null,this.dispatchEvent({type:"removed"})}disposeChildren(){var A=this;A.childrenTiles.forEach((A=>A.dispose())),A.childrenTiles=[],A.children=[],A.meshContent.length>0&&A.meshContent.forEach((e=>{A.children.push(e)}))}update(e){const t=new A.Frustum;t.setFromProjectionMatrix((new A.Matrix4).multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse)),this._update(e,t)}_update(A,e){const t=this;if(!t.isSetup)return;const s=t.materialVisibility;function r(A){if(t.hasMeshContent&&!(t.meshContent<t.hasMeshContent)){if(A<0)return t.inFrustum=!1,void t.changeContentVisibility(!!t.loadOutsideView);if(t.inFrustum=!0,0!=t.childrenTiles.length){if(A>=t.geometricErrorMultiplier*t.geometricError)t.changeContentVisibility(!0);else if(A<t.geometricErrorMultiplier*t.geometricError&&"REPLACE"==t.refine){let A=!0;t.childrenTiles.every((e=>!!e.isReady()||(A=!1,!1))),A&&t.changeContentVisibility(!1)}}else t.changeContentVisibility(!0)}}t.boundingVolume&&t.geometricError&&(t.metric=t.calculateUpdateMetric(A,e)),t.childrenTiles.forEach((t=>t._update(A,e))),r(t.metric),function(e){if(e<0&&t.hasMeshContent)return;if(t.occlusionCullingService&&t.hasMeshContent&&!t.occlusionCullingService.hasID(t.colorID))return;if((!t.hasMeshContent||e<t.geometricErrorMultiplier*t.geometricError&&t.meshContent.length>0)&&t.json&&t.json.children&&t.childrenTiles.length!=t.json.children.length)!function(){for(let A=t.json.children.length-1;A>=0;A--)t.json.children[A].root||t.json.children[A].children||t.json.children[A].getChildren||t.json.children[A].content||t.json.children[A].contents||t.json.children.splice(A,1);t.json.children.forEach((e=>{let s=new ue({parentTile:t,queryParams:t.queryParams,parentGeometricError:t.geometricError,parentBoundingVolume:t.boundingVolume,parentRefine:t.refine,json:e,rootPath:t.rootPath,geometricErrorMultiplier:t.geometricErrorMultiplier,loadOutsideView:t.loadOutsideView,level:t.level+1,tileLoader:t.tileLoader,cameraOnLoad:A,occlusionCullingService:t.occlusionCullingService,renderer:t.renderer,static:t.static,centerModel:!1,displayErrors:t.displayErrors,displayCopyright:t.displayCopyright});t.childrenTiles.push(s),t.add(s)}))}()}(t.metric),function(A,e){if(!t.hasMeshContent)return;if(!t.inFrustum)return t.disposeChildren(),void r(A);if(t.occlusionCullingService&&!e&&t.hasMeshContent&&t.meshContent.length>0&&t.meshDisplayed&&t.areAllChildrenLoadedAndHidden())return t.disposeChildren(),void r(A);if(A>=t.geometricErrorMultiplier*t.geometricError)t.disposeChildren(),r(A)}(t.metric,s)}areAllChildrenLoadedAndHidden(){let A=!0;const e=this;return this.childrenTiles.every((t=>{if(t.hasMeshContent){if(t.childrenTiles.length>0)return A=!1,!1;if(!t.inFrustum)return!0;if(!t.materialVisibility||t.meshDisplayed)return A=!1,!1;if(e.occlusionCullingService.hasID(t.colorID))return A=!1,!1}else if(!t.areAllChildrenLoadedAndHidden())return A=!1,!1;return!0})),A}isReady(){if(!this.inFrustum)return!0;if(this.hasUnloadedJSONContent)return!1;if(!this.hasMeshContent||0==this.meshContent.length||!this.materialVisibility){if(this.children.length>0){var A=!0;return this.childrenTiles.every((e=>!!e.isReady()||(A=!1,!1))),A}return!1}return!this.hasMeshContent||!(this.meshContent.length<this.hasMeshContent)&&(!!this.materialVisibility&&!!this.meshDisplayed)}changeContentVisibility(A){const e=this;e.hasMeshContent&&e.meshContent.length>0&&(A?e.meshContent.forEach((A=>{A.traverse((A=>{(A.isMesh||A.isPoints)&&A.layers.enable(0)}))})):e.meshContent.forEach((A=>{A.traverse((A=>{(A.isMesh||A.isPoints)&&A.layers.disable(0)}))}))),e.materialVisibility!=A&&(e.materialVisibility=A,e.meshDisplayed=!0)}calculateUpdateMetric(e,t){if(this.boundingVolume instanceof i){if(ce.copy(this.boundingVolume.sphere),ce.applyMatrix4(this.matrixWorld),!t.intersectsSphere(ce))return-1}else{if(!(this.boundingVolume instanceof A.Sphere))return console.error("unsupported shape"),-1;if(ce.copy(this.boundingVolume),ce.applyMatrix4(this.matrixWorld),!t.intersectsSphere(ce))return-1}const s=Math.max(0,e.position.distanceTo(ce.center)-ce.radius);if(0==s)return 0;const r=this.matrixWorld.getMaxScaleOnAxis();this.renderer&&this.renderer.getDrawingBufferSize(Be);let o=Be.y,n=e.fov;e.aspect<1&&(n*=e.aspect,o=Be.x);let a=2*Math.tan(.5*n*.017453292519943295)*s;return 16*window.devicePixelRatio*a/(o*r)}getSiblings(){const A=this,e=[];if(!A.parentTile)return e;let t=A.parentTile;for(;!t.hasMeshContent&&t.parentTile;)t=t.parentTile;return t.childrenTiles.forEach((t=>{if(t&&t!=A){for(;!t.hasMeshContent&&t.childrenTiles[0];)t=t.childrenTiles[0];e.push(t)}})),e}calculateDistanceToCamera(e){return this.boundingVolume instanceof i?(ce.copy(this.boundingVolume.sphere),ce.applyMatrix4(this.matrixWorld)):this.boundingVolume instanceof A.Sphere?(ce.copy(this.boundingVolume),ce.applyMatrix4(this.matrixWorld)):console.error("unsupported shape"),Math.max(0,e.position.distanceTo(ce.center)-ce.radius)}setGeometricErrorMultiplier(A){this.geometricErrorMultiplier=A,this.childrenTiles.forEach((e=>e.setGeometricErrorMultiplier(A)))}transformWGS84ToCartesian(A,e,t,s){const r=6378137/Math.sqrt(1-.006694384442042*Math.pow(Math.sin(e),2)),i=Math.cos(e),o=Math.cos(A),n=Math.sin(e),a=r+t,g=a*i*o,l=a*i*Math.sin(A),c=(.993305615557957*r+t)*n;s.set(g,l,c)}}function Qe(A){var e=document.createElement("div");e.textContent=A,e.style.position="fixed",e.style.top="10px",e.style.left="50%",e.style.transform="translateX(-50%)",e.style.padding="10px",e.style.backgroundColor="#ff8800",e.style.color="#ffffff",e.style.zIndex="9999",document.body.appendChild(e),setTimeout((function(){e.remove()}),8e3)}function fe(){ge||(ge=document.createElement("div"));var A="";for(let e in Ee)Ee.hasOwnProperty(e)&&Ee[e]>0&&(A+=e+", ");ge.textContent=A,ge.style.position="fixed",ge.style.bottom="20px",ge.style.left="20px",ge.style.color="white",ge.style.textShadow="2px 2px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000",ge.style.padding="10px",ge.style.backgroundColor="rgba(0, 0, 0, 0.1)",document.body.appendChild(ge)}const pe=new A.Sphere(new A.Vector3(0,0,0),1),me=new A.Vector3(0,0,0),ye=new A.Vector3(0,0,0),we=new A.Vector3(0,1,0),De=new A.Vector2,xe=new A.Quaternion,Re=new A.Matrix4;class Se extends A.Object3D{constructor(A){super();const e=this;if(A.queryParams&&(this.queryParams={...A.queryParams}),this.uuid=ae(),A.tileLoader?this.tileLoader=A.tileLoader:console.error("an instanced tileset must be provided an InstancedTilesetLoader"),this.master=A.master,this.meshCallback=A.meshCallback,this.loadOutsideView=A.loadOutsideView,this.cameraOnLoad=A.cameraOnLoad,this.parentTile=A.parentTile,this.childrenTiles=[],this.jsonChildren=[],this.meshContent=new Set,this.tileContent,this.refinement,this.rootPath,this.geometricError,this.boundingVolume,this.json,this.materialVisibility=!1,this.inFrustum=!0,this.level=A.level?A.level:0,this.hasMeshContent=0,this.hasUnloadedJSONContent=0,this.centerModel=A.centerModel,this.deleted=!1,this.abortController=new AbortController,A.json)this.rootPath=A.json.rootPath?A.json.rootPath:A.rootPath,A.json.children&&(this.jsonChildren=A.json.children),e.setup(A);else if(A.url){this.loadJson=(t,s)=>{const r=le.dirname(s);e.setup({rootPath:r,json:t,onLoadCallback:A.onLoadCallback})};var t=A.url;if(e.queryParams){var s="";for(let A in e.queryParams)e.queryParams.hasOwnProperty(A)&&(s+="&"+A+"="+e.queryParams[A]);t.includes("?")?t+=s:t+="?"+s.substring(1)}e.tileLoader.get(e.abortController,t,e.uuid,e)}}async setup(e){const t=this;if(e.json.root?(t.json=e.json.root,!t.json.children&&t.json.getChildren&&(t.json.children=await t.json.getChildren()),t.jsonChildren=t.json.children,t.json.refinement||(t.json.refinement=e.json.refinement),t.json.geometricError||(t.json.geometricError=e.json.geometricError),t.json.transform||(t.json.transform=e.json.transform),t.json.boundingVolume||(t.json.boundingVolume=e.json.boundingVolume)):(t.json=e.json,!t.json.children&&t.json.getChildren&&(t.json.children=await t.json.getChildren(),t.jsonChildren=t.json.children)),t.rootPath=e.json.rootPath?e.json.rootPath:e.rootPath,t.json.refinement?t.refinement=t.json.refinement:t.refinement=e.parentRefinement,t.json.geometricError?t.geometricError=t.json.geometricError:t.geometricError=e.parentGeometricError,t.json.transform&&!t.centerModel){let e=new A.Matrix4;e.elements=t.json.transform,t.master.applyMatrix4(e)}if(t.json.boundingVolume)if(t.json.boundingVolume.box)t.boundingVolume=new i(t.json.boundingVolume.box);else if(t.json.boundingVolume.region){const e=t.json.boundingVolume.region;t.transformWGS84ToCartesian(e[0],e[1],e[4],me),t.transformWGS84ToCartesian(e[2],e[3],e[5],ye),me.lerp(ye,.5),t.boundingVolume=new A.Sphere(new A.Vector3(me.x,me.y,me.z),me.distanceTo(ye))}else if(t.json.boundingVolume.sphere){const e=t.json.boundingVolume.sphere;t.boundingVolume=new A.Sphere(new A.Vector3(e[0],e[1],e[2]),e[3])}else t.boundingVolume=e.parentBoundingVolume;else t.boundingVolume=e.parentBoundingVolume;function s(A){A.uri&&A.uri.includes("json")||A.url&&A.url.includes("json")?t.hasUnloadedJSONContent++:t.hasMeshContent++}if(t.json.content?(s(t.json.content),t.load()):t.json.contents&&(t.json.contents.forEach((A=>s(A))),t.load()),t.centerModel){const e=new A.Sphere;t.boundingVolume instanceof i?e.copy(t.boundingVolume.sphere):t.boundingVolume instanceof A.Sphere&&e.copy(t.boundingVolume),this.json.boundingVolume.region&&(t.transformWGS84ToCartesian(.5*(t.json.boundingVolume.region[0]+t.json.boundingVolume.region[2]),.5*(t.json.boundingVolume.region[1]+t.json.boundingVolume.region[3]),.5*(t.json.boundingVolume.region[4]+t.json.boundingVolume.region[5]),me),xe.setFromUnitVectors(me.normalize(),we.normalize()),t.master.applyQuaternion(xe),t.master.updateWorldMatrix(!1,!1)),Re.makeTranslation(-e.center.x*t.scale.x,-e.center.y*t.scale.y,-e.center.z*t.scale.z),t.master.matrix.multiply(Re),t.master.matrix.decompose(t.master.position,t.master.quaternion,t.master.scale)}t.isSetup=!0,e.onLoadCallback&&e.onLoadCallback(t)}isAbsolutePathOrURL(A){const e=/^(?:http|https|ftp|tcp|udp):\/\/\S+/.test(A),t=A.startsWith("/")&&!A.startsWith("//");return e||t}assembleURL(A,e){A.endsWith("/")||(A+="/");const t=new URL(A);let s=t.pathname.split("/").filter((A=>""!==A)),r=e.split("/").filter((A=>""!==A));for(let A=1;A<=s.length&&!(A>=r.length);A++){if(s.slice(s.length-A,s.length).join("/")===r.slice(0,A).join("/")){for(let e=0;e<A;e++)s.pop();break}}for(;r.length>0&&".."===r[0];)s.pop(),r.shift();return"".concat(t.protocol,"//").concat(t.host,"/").concat([...s,...r].join("/"))}extractQueryParams(A,e){const t=new URL(A);for(let[A,s]of t.searchParams)e[A]=s;return t.search="",t.toString()}load(){var A=this;function e(e){let t;e.uri?t=e.uri:e.url&&(t=e.url);const s=/^(?:http|https|ftp|tcp|udp):\/\/\S+/;if(s.test(A.rootPath)?s.test(t)||(t=A.assembleURL(A.rootPath,t)):le.isAbsolute(A.rootPath)&&(t=A.rootPath+le.sep+t),t=A.extractQueryParams(t,A.queryParams),A.queryParams){var r="";for(let e in A.queryParams)A.queryParams.hasOwnProperty(e)&&(r+="&"+e+"="+A.queryParams[e]);t.includes("?")?t+=r:t+="?"+r.substring(1)}t&&(t.includes(".b3dm")||t.includes(".glb")||t.includes(".gltf")?(A.contentURL=t,A.tileLoader.get(A.abortController,t,A.uuid,A,A.cameraOnLoad?()=>A.calculateDistanceToCamera(A.cameraOnLoad):()=>0,(()=>A.getSiblings()),A.level,!A.json.boundingVolume.region,!!A.json.boundingVolume.region,A.geometricError)):t.includes(".json")&&A.tileLoader.get(A.abortController,t,A.uuid,A))}A.deleted||(A.json.content?e(A.json.content):A.json.contents&&A.json.contents.forEach((A=>e(A))),A.matrixWorldNeedsUpdate=!0,A.updateWorldMatrix(!0,!0))}loadMesh(A){this.deleted||this.meshContent.add(A)}loadJson(A,e){this.deleted||(this.json.children&&(this.jsonChildren=this.json.children),A.rootPath=le.dirname(e),this.jsonChildren.push(A),this.hasUnloadedJSONContent--)}dispose(){const A=this;A.childrenTiles.forEach((A=>A.dispose())),A.deleted=!0,A.abortController&&A.abortController.abort(),this.parent=null,this.parentTile=null,this.dispatchEvent({type:"removed"})}disposeChildren(){this.childrenTiles.forEach((A=>A.dispose())),this.childrenTiles=[]}_update(A,e){const t=this;if(!t.isSetup)return;t.materialVisibility;function s(A){if(t.hasMeshContent&&!(t.meshContent.size<t.hasMeshContent)){if(A<0)return t.inFrustum=!1,void t.changeContentVisibility(!!t.loadOutsideView);if(t.inFrustum=!0,0!=t.childrenTiles.length){if(A>=t.master.geometricErrorMultiplier*t.geometricError)t.changeContentVisibility(!0);else if(A<t.master.geometricErrorMultiplier*t.geometricError){let A=!0;t.childrenTiles.every((e=>!!e.isReady()||(A=!1,!1))),A&&t.changeContentVisibility(!1)}}else t.changeContentVisibility(!0)}}t.boundingVolume&&t.geometricError&&(t.metric=t.calculateUpdateMetric(A,e)),t.childrenTiles.forEach((t=>t._update(A,e))),s(t.metric),function(e){if(e<0&&t.hasMeshContent)return;if((!t.hasMeshContent&&t.rootPath||e<t.master.geometricErrorMultiplier*t.geometricError&&t.meshContent.size>0)&&t.json&&t.jsonChildren&&t.childrenTiles.length!=t.jsonChildren.length)t.jsonChildren.forEach((e=>{if(!(e.root||e.children||e.getChildren||e.content||e.contents))return;let s=new Se({parentTile:t,queryParams:t.queryParams,parentGeometricError:t.geometricError,parentBoundingVolume:t.boundingVolume,parentRefinement:t.refinement,json:e,rootPath:t.rootPath,loadOutsideView:t.loadOutsideView,level:t.level+1,tileLoader:t.tileLoader,cameraOnLoad:A,master:t.master,centerModel:!1});t.childrenTiles.push(s)}))}(t.metric),function(A,e){if(!t.hasMeshContent)return;if(!t.inFrustum)return t.disposeChildren(),void s(A);if(A>=t.master.geometricErrorMultiplier*t.geometricError)t.disposeChildren(),s(A)}(t.metric)}areAllChildrenLoadedAndHidden(){let A=!0;return this.childrenTiles.every((e=>{if(e.hasMeshContent){if(e.childrenTiles.length>0)return A=!1,!1;if(!e.inFrustum)return!0;if(!e.materialVisibility||e.meshesToDisplay!=e.meshesDisplayed)return A=!1,!1}else if(!e.areAllChildrenLoadedAndHidden())return A=!1,!1;return!0})),A}isReady(){if(!this.inFrustum)return!0;if(this.hasUnloadedJSONContent)return!1;if(!this.hasMeshContent||0==this.meshContent.size||!this.materialVisibility){if(this.childrenTiles.length>0){var A=!0;return this.childrenTiles.every((e=>!!e.isReady()||(A=!1,!1))),A}return!1}return!this.hasMeshContent||!(this.meshContent.size<this.hasMeshContent)&&!!this.materialVisibility}changeContentVisibility(A){this.materialVisibility=A}calculateUpdateMetric(e,t){if(this.boundingVolume instanceof i){if(pe.copy(this.boundingVolume.sphere),pe.applyMatrix4(this.master.matrixWorld),!t.intersectsSphere(pe))return-1}else{if(!(this.boundingVolume instanceof A.Sphere))return console.error("unsupported shape"),-1;if(pe.copy(this.boundingVolume),pe.applyMatrix4(this.master.matrixWorld),!t.intersectsSphere(pe))return-1}const s=Math.max(0,e.position.distanceTo(pe.center)-pe.radius);if(0==s)return 0;const r=this.master.matrixWorld.getMaxScaleOnAxis();this.master.renderer.getDrawingBufferSize(De);let o=De.y,n=e.fov;e.aspect<1&&(n*=e.aspect,o=De.x);let a=2*Math.tan(.5*n*.017453292519943295)*s;return 16*window.devicePixelRatio*a/(o*r)}getSiblings(){const A=this,e=[];if(!A.parentTile)return e;let t=A.parentTile;for(;!t.hasMeshContent&&t.parentTile;)t=t.parentTile;return t.childrenTiles.forEach((t=>{if(t&&t!=A){for(;!t.hasMeshContent&&t.childrenTiles[0];)t=t.childrenTiles[0];e.push(t)}})),e}calculateDistanceToCamera(e){return this.boundingVolume instanceof i?(pe.copy(this.boundingVolume.sphere),pe.applyMatrix4(this.master.matrixWorld)):this.boundingVolume instanceof A.Sphere?(pe.copy(this.boundingVolume),pe.applyMatrix4(this.master.matrixWorld)):console.error("unsupported shape"),Math.max(0,e.position.distanceTo(pe.center)-pe.radius)}getWorldMatrix(){return this.master.matrixWorld}transformWGS84ToCartesian(A,e,t,s){const r=6378137/Math.sqrt(1-.006694384442042*Math.pow(Math.sin(e),2)),i=Math.cos(e),o=Math.cos(A),n=Math.sin(e),a=r+t,g=a*i*o,l=a*i*Math.sin(A),c=(.993305615557957*r+t)*n;s.set(g,l,c)}}class Te extends A.Object3D{constructor(A){super(),A.master=this,this.renderer=A.renderer,this.geometricErrorMultiplier=A.geometricErrorMultiplier?A.geometricErrorMultiplier:1,this.tileset=new Se(A),A.static&&(this.matrixAutoUpdate=!1)}update(e,t){if(t)this.tileset._update(e,t);else{const t=new A.Frustum;t.setFromProjectionMatrix((new A.Matrix4).multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse)),this.tileset._update(e,t)}}updateWithFrustum(A,e){this.tileset._update(A,e)}setGeometricErrorMultiplier(A){this.geometricErrorMultiplier=A||1}}class Me{constructor(e){const t=this;t.scene=e,t.instancedTiles=[],t.instancedMesh,t.reuseableMatrix=new A.Matrix4}addInstance(A){const e=this;A.added=!0,A.listOMesh=e.instancedTiles,e.instancedTiles.push(A),e.instancedMesh&&A.loadMesh(e.instancedMesh)}addToScene(){const e=this;e.instancedMesh.setMatrixAt(0,new A.Matrix4),e.instancedMesh.instanceMatrix.needsUpdate=!0,e.instancedMesh.count=1,e.scene.add(e.instancedMesh),e.instancedMesh.onAfterRender=()=>{delete e.instancedMesh.onAfterRender,e.instancedMesh.displayedOnce=!0}}setObject(A){const e=this;e.instancedMesh=A,e.scene.children.includes(A)||this.addToScene();for(let A=0;A<e.instancedTiles.length;A++)e.instancedTiles[A].loadMesh(e.instancedMesh)}update(){const A=this;for(let e=A.instancedTiles.length-1;e>=0;e--)A.instancedTiles[e].deleted&&A.instancedTiles.splice(e,1);if(A.instancedMesh){A.instancedMesh.count=0,A.instancedMesh.instancedTiles=[];for(let e=0;e<A.instancedTiles.length;e++)A.instancedTiles[e].meshContent.add(A.instancedMesh),A.instancedTiles[e].materialVisibility&&(A.instancedMesh.count++,A.reuseableMatrix.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),A.reuseableMatrix.multiply(A.instancedTiles[e].master.matrixWorld),A.reuseableMatrix.multiply(A.instancedMesh.baseMatrix),A.instancedMesh.setMatrixAt(A.instancedMesh.count-1,A.reuseableMatrix),A.instancedMesh.instancedTiles.push(A.instancedTiles[e]));A.instancedMesh.instanceMatrix.needsUpdate=!0,A.instancedMesh.needsUpdate=!0,A.instancedMesh.computeBoundingSphere()}}getCount(){return this.instancedTiles.length}dispose(){const A=this;return!(A.instancedTiles.length>0)&&(!!A.instancedMesh&&(A.scene.remove(A.instancedMesh),A.instancedMesh.traverse((A=>{if(A.dispose&&A.dispose(),A.material)if(A.material.length)for(let e=0;e<A.material.length;++e)A.material[e].dispose();else A.material.dispose();A.geometry&&A.geometry.dispose()})),A.instancedMesh.dispose(),!0))}}class be{constructor(){const A=this;A.count=0,A.json,A.instancedTiles=[]}addInstance(A){this.instancedTiles.push(A),this.json&&A.loadJson(this.json,this.url)}setObject(A,e){const t=this;t.json=A,t.url=e;for(let A=0;A<t.instancedTiles.length;A++)t.instancedTiles[A].loadJson(t.json,t.url)}getCount(){return this.instancedTiles.length}update(){const A=this;for(let e=A.instancedTiles.length-1;e>=0;e--)A.instancedTiles[e].deleted&&A.instancedTiles.splice(e,1)}dispose(){return!(!this.json||0!=this.instancedTiles.length)}}const Le=new A.Matrix4;Le.set(1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1);class Fe{constructor(A,e){this.maxCachedItems=100,this.maxInstances=1,this.proxy=e.proxy,e&&(this.meshCallback=e.meshCallback,this.pointsCallback=e.pointsCallback,e.maxCachedItems&&(this.maxCachedItems=e.maxCachedItems),e.maxInstances&&(this.maxInstances=e.maxInstances)),this.gltfLoader=new l;const t=new nA;if(t.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.4.3/"),this.gltfLoader.setDRACOLoader(t),e&&e.renderer){const A=new yA;A.setTranscoderPath("https://storage.googleapis.com/ogc-3d-tiles/basis/").detectSupport(e.renderer),this.gltfLoader.setKTX2Loader(A),this.b3dmDecoder=new _A(e.renderer)}else this.b3dmDecoder=new _A(null);this.cache=new o.LinkedHashMap,this.scene=A,this.ready=[],this.downloads=[],this.nextReady=[],this.nextDownloads=[],this.init()}update(){this.checkSize(),this.cache._data.forEach((A=>{A.update()}))}init(){const A=this;ke((()=>{A.download()}),10),ke((()=>{const e=Date.now();let t=0;do{t=A.loadBatch()}while(t>0&&Date.now()-e<=0)}),10)}download(){const e=this;if(0!=e.nextDownloads.length||(e.getNextDownloads(),0!=e.nextDownloads.length))for(;e.nextDownloads.length>0;){const t=e.nextDownloads.shift();if(t){if(t.path.includes(".b3dm"))(e.proxy?()=>fetch(e.proxy,{method:"POST",body:t.path}):()=>fetch(t.path))().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+t.path),new Error("couldn't load \"".concat(t.path,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.arrayBuffer()})).then((A=>this.b3dmDecoder.parseB3DMInstanced(A,e.meshCallback,e.maxInstances,t.sceneZupToYup,t.meshZupToYup))).then((A=>{A.frustumCulled=!1,t.tile.setObject(A),e.ready.unshift(t)})).catch((A=>console.error(A)));if(t.path.includes(".glb")||t.path.includes(".gltf"))(e.proxy?()=>fetch(e.proxy,{method:"POST",body:t.path}):()=>fetch(t.path))().then((A=>{if(!A.ok)throw new Error("missing content");return A.arrayBuffer()})).then((async s=>{await Ge(this.gltfLoader),this.gltfLoader.parse(s,null,(s=>{let r;s.scene.asset=s.asset,t.sceneZupToYup&&s.scene.applyMatrix4(Le),s.scene.traverse((A=>{A.geometricError=t.geometricError,A.isMesh&&(t.meshZupToYup&&A.applyMatrix4(Le),e.meshCallback&&e.meshCallback(A,A.geometricError)),A.isPoints&&console.error("instanced point cloud is not supported")})),s.scene.updateWorldMatrix(!1,!0),s.scene.traverse((t=>{t.isMesh&&(r=new A.InstancedMesh(t.geometry,t.material,e.maxInstances),r.baseMatrix=t.matrixWorld)})),e.ready.unshift(t),r?(r.frustumCulled=!1,t.tile.setObject(r)):s.scene.traverse((A=>{A.dispose&&A.dispose(),A.material&&A.material.dispose()}))}))}),(A=>{console.error("could not load tile : "+t.path)}));else if(t.path.includes(".json")){(e.proxy?()=>fetch(e.proxy,{method:"POST",body:t.path}):()=>fetch(t.path))().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+t.path),new Error("couldn't load \"".concat(t.path,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.json()})).then((A=>jA(A,t.path))).then((A=>{t.tile.setObject(A,t.path),e.ready.unshift(t)})).catch((A=>console.error(A)))}}}}loadBatch(){if(0==this.nextReady.length&&(this.getNextReady(),0==this.nextReady.length))return 0;return this.nextReady.shift()?1:0}getNextReady(){let A=Number.MAX_VALUE,e=-1;for(let A=this.ready.length-1;A>=0;A--)this.ready[A].distanceFunction||this.nextReady.push(this.ready.splice(A,1)[0]);if(!(this.nextReady.length>0)){for(let t=this.ready.length-1;t>=0;t--){const s=this.ready[t].distanceFunction()*this.ready[t].level;s<A&&(A=s,e=t)}if(e>=0){const A=this.ready.splice(e,1).pop();this.nextReady.push(A);const t=A.getSiblings();for(let A=this.ready.length-1;A>=0;A--)t.includes(this.ready[A].uuid)&&this.nextready.push(this.ready.splice(A,1).pop())}}}get(A,e,t,s,r,i,o,n,a,g){const l=this,c=function(A){for(var e=A.split("/"),t=[],s=0,r=0;r<e.length;r++){var i=e[r];"."!==i&&""!==i&&".."!==i?t[s++]=i:".."===i&&s>0&&s--}if(0===s)return"/";var o="";for(r=0;r<s;r++)o+="/"+t[r];return o}(e);if(!(e.includes(".b3dm")||e.includes(".json")||e.includes(".glb")||e.includes(".gltf")))return void console.error("the 3DTiles cache can only be used to load B3DM, gltf and json data");const h=l.cache.get(c);if(h)h.addInstance(s);else if(e.includes(".b3dm")||e.includes(".glb")||e.includes(".gltf")){const h=new Me(l.scene);h.addInstance(s),l.cache.put(c,h);const I=new AbortController;A.signal.addEventListener("abort",(()=>{0==h.getCount()&&I.abort()})),this.downloads.push({abortController:I,tile:h,key:c,path:e,distanceFunction:r,getSiblings:i,level:o,uuid:t,sceneZupToYup:n,meshZupToYup:a,geometricError:g,shouldDoDownload:()=>!0})}else if(e.includes(".json")){const t=new be;t.addInstance(s),l.cache.put(c,t);const n=new AbortController;A.signal.addEventListener("abort",(()=>{0==t.getCount()&&n.abort()})),this.downloads.push({abortController:n,tile:t,key:c,path:e,distanceFunction:r,getSiblings:i,level:o,shouldDoDownload:()=>!0})}}getNextDownloads(){let A=Number.MAX_VALUE,e=-1;for(let A=this.downloads.length-1;A>=0;A--){const e=this.downloads[A];e.shouldDoDownload()?e.distanceFunction||this.nextDownloads.push(this.downloads.splice(A,1)[0]):this.downloads.splice(A,1)}if(!(this.nextDownloads.length>0)){for(let t=this.downloads.length-1;t>=0;t--){const s=this.downloads[t],r=s.distanceFunction()*s.level;r<A&&(A=r,e=t)}if(e>=0){const A=this.downloads.splice(e,1).pop();this.nextDownloads.push(A);const t=A.getSiblings();for(let A=this.downloads.length-1;A>=0;A--)t.includes(this.downloads[A].uuid)&&this.nextDownloads.push(this.downloads.splice(A,1).pop())}}}checkSize(){const A=this;let e=0;for(;A.cache.size()>A.maxCachedItems&&e<A.cache.size();){e++;const t=A.cache.head();A.cache.remove(t.key),t.value.dispose()||A.cache.put(t.key,t.value)}}}async function Ge(A){return new Promise((e=>{const t=setInterval((()=>{A.dracoLoader&&A.ktx2Loader&&(clearInterval(t),e())}),10)}))}function ke(A,e){let t;const s=async()=>{const r=Date.now();try{await A()}catch(A){console.error(A)}finally{const A=Date.now()-r;t=setTimeout(s,A>=e?0:e-A)}};return t=setTimeout(s,e),{clearInterval:()=>clearTimeout(t)}}})(),r})()));
2
+ !function(A,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("three")):"function"==typeof define&&define.amd?define(["three"],e):"object"==typeof exports?exports.threedtiles=e(require("three")):A.threedtiles=e(A.THREE)}(this,(A=>(()=>{var e={649:(A,e,t)=>{const s=t(180),r=t(31),i=t(839);A.exports={Heap:s,Queue:r,LinkedHashMap:i}},180:A=>{A.exports=class{constructor(A,e){if(this._data=[],this._comparator=function(A,e){return A>=e},null!=A){if(!Array.isArray(A))throw Error("Constructor expects data to be an array");this._data=A}if(null!=e){if("function"!=typeof e)throw Error("Constructor expects comparator to be a function");this._comparator=e}}peek(){return this.size()<1?null:this._data[0]}pop(){if(this.size()<1)return null;const A=this._data[0];return this.swap(this.size()-1,0),this._data.pop(),this.heapifyDown(0),A}replaceTop(A){if(this.size()<1)return null;const e=this._data[0];return this._data[0]=A,this.heapifyDown(0),e}push(A){this._data.push(A),this.heapifyUp(this._data.length-1)}size(){return this._data.length}swap(A,e){const t=this._data[A];this._data[A]=this._data[e],this._data[e]=t}heapifyUp(A){if(0===A)return;const e=Math.floor((A-1)/2);this._comparator(this._data[A],this._data[e])||(this.swap(A,e),this.heapifyUp(e))}heapifyDown(A){const e=2*A+1,t=2*A+2;if(e>=this._data.length)return;const s=t<this._data.length&&!this._comparator(this._data[t],this._data[e])?t:e;this._comparator(this._data[A],this._data[s])&&(this.swap(A,s),this.heapifyDown(s))}}},839:A=>{A.exports=class{constructor(){this._data=new Map,this._link=new Map,this._head=void 0,this._tail=void 0}put(A,e,t=!1){this.has(A)?this._data.set(A,e):(this._data.set(A,e),this._link.set(A,{previous:void 0,next:void 0}),null==this._head?(this._head=A,this._tail=A):t?(this._link.get(this._head).previous=A,this._link.get(A).next=this._head,this._head=A):(this._link.get(this._tail).next=A,this._link.get(A).previous=this._tail,this._tail=A))}head(){return{key:this._head,value:this.get(this._head),next:()=>this.next(this._head),previous:()=>null}}tail(){return{key:this._tail,value:this.get(this._tail),next:()=>null,previous:()=>this.previous(this._tail)}}get(A){return this._data.get(A)}previousKey(A){const e=this._link.get(A);return null!=e?e.previous:void 0}previousValue(A){return this.get(this.previousKey(A))}previous(A){const e=this.previousKey(A);return{key:e,value:this.get(e),next:()=>this.next(e),previous:()=>this.previous(e)}}nextKey(A){const e=this._link.get(A);return null!=e?e.next:void 0}nextValue(A){return this.get(this.nextKey(A))}next(A){const e=this.nextKey(A);return{key:e,value:this.get(e),next:()=>this.next(e),previous:()=>this.previous(e)}}remove(A){const e=this._data.get(A);if(null!=e)if(1===this.size())this.reset();else{if(A===this._head){const A=this._link.get(this._head);this._link.get(A.next).previous=null,this._head=A.next}else if(A===this._tail){const A=this._link.get(this._tail);this._link.get(A.previous).next=null,this._tail=A.previous}else{const e=this._link.get(A),t=this._link.get(e.previous),s=this._link.get(e.next);t.next=e.next,s.previous=e.previous}this._link.delete(A),this._data.delete(A)}return e}has(A){return this._data.has(A)}size(){return this._data.size}reset(){this._data.clear(),this._link.clear(),this._head=void 0,this._tail=void 0}keys(){return this._data.keys()}values(){return this._data.values()}entries(){return this._data.entries()}toArray(A="orderByInsert"){if("orderByInsert"!==A){const A=[];let e=this._head;for(;null!=e;)A.push({key:e,value:this.get(e)}),e=this.nextKey(e);return A}return Array.from(this.keys()).map((A=>({key:A,value:this.get(A)})))}}},31:A=>{A.exports=class{constructor(A,e){if(this._data=[],this._head=0,this._cap=null,null!=A){if(!Array.isArray(A))throw Error("Constructor expects data to be an array");this._data=A}if(null!=e){if("number"!=typeof e)throw Error("Constructor expects capacity to be a number");this._cap=e}}enqueue(A){return!(null!=this._cap&&this.size()>=this._cap)&&(this._data.push(A),!0)}dequeue(){if(0===this.size())return null;const A=this._data[this._head];return this._head+=1,2*this._head>=this._data.length&&(this._data=this._data.slice(this._head),this._head=0),A}peek(A=!1){return this.size()>0?A?this._data[this._data.length-1]:this._data[this._head]:null}size(){return this._data.length-this._head}updateCapacity(A){this._cap=A}reset(){this._data=[],this._head=0}forEach(A){for(let e=this._head;e<this._data.length;e+=1)A(this._data[e],e-this._head)}toArray(){return this._data.slice(this._head)}}},975:A=>{"use strict";function e(A){if("string"!=typeof A)throw new TypeError("Path must be a string. Received "+JSON.stringify(A))}function t(A,e){for(var t,s="",r=0,i=-1,o=0,n=0;n<=A.length;++n){if(n<A.length)t=A.charCodeAt(n);else{if(47===t)break;t=47}if(47===t){if(i===n-1||1===o);else if(i!==n-1&&2===o){if(s.length<2||2!==r||46!==s.charCodeAt(s.length-1)||46!==s.charCodeAt(s.length-2))if(s.length>2){var a=s.lastIndexOf("/");if(a!==s.length-1){-1===a?(s="",r=0):r=(s=s.slice(0,a)).length-1-s.lastIndexOf("/"),i=n,o=0;continue}}else if(2===s.length||1===s.length){s="",r=0,i=n,o=0;continue}e&&(s.length>0?s+="/..":s="..",r=2)}else s.length>0?s+="/"+A.slice(i+1,n):s=A.slice(i+1,n),r=n-i-1;i=n,o=0}else 46===t&&-1!==o?++o:o=-1}return s}var s={resolve:function(){for(var A,s="",r=!1,i=arguments.length-1;i>=-1&&!r;i--){var o;i>=0?o=arguments[i]:(void 0===A&&(A=process.cwd()),o=A),e(o),0!==o.length&&(s=o+"/"+s,r=47===o.charCodeAt(0))}return s=t(s,!r),r?s.length>0?"/"+s:"/":s.length>0?s:"."},normalize:function(A){if(e(A),0===A.length)return".";var s=47===A.charCodeAt(0),r=47===A.charCodeAt(A.length-1);return 0!==(A=t(A,!s)).length||s||(A="."),A.length>0&&r&&(A+="/"),s?"/"+A:A},isAbsolute:function(A){return e(A),A.length>0&&47===A.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var A,t=0;t<arguments.length;++t){var r=arguments[t];e(r),r.length>0&&(void 0===A?A=r:A+="/"+r)}return void 0===A?".":s.normalize(A)},relative:function(A,t){if(e(A),e(t),A===t)return"";if((A=s.resolve(A))===(t=s.resolve(t)))return"";for(var r=1;r<A.length&&47===A.charCodeAt(r);++r);for(var i=A.length,o=i-r,n=1;n<t.length&&47===t.charCodeAt(n);++n);for(var a=t.length-n,g=o<a?o:a,l=-1,c=0;c<=g;++c){if(c===g){if(a>g){if(47===t.charCodeAt(n+c))return t.slice(n+c+1);if(0===c)return t.slice(n+c)}else o>g&&(47===A.charCodeAt(r+c)?l=c:0===c&&(l=0));break}var h=A.charCodeAt(r+c);if(h!==t.charCodeAt(n+c))break;47===h&&(l=c)}var I="";for(c=r+l+1;c<=i;++c)c!==i&&47!==A.charCodeAt(c)||(0===I.length?I+="..":I+="/..");return I.length>0?I+t.slice(n+l):(n+=l,47===t.charCodeAt(n)&&++n,t.slice(n))},_makeLong:function(A){return A},dirname:function(A){if(e(A),0===A.length)return".";for(var t=A.charCodeAt(0),s=47===t,r=-1,i=!0,o=A.length-1;o>=1;--o)if(47===(t=A.charCodeAt(o))){if(!i){r=o;break}}else i=!1;return-1===r?s?"/":".":s&&1===r?"//":A.slice(0,r)},basename:function(A,t){if(void 0!==t&&"string"!=typeof t)throw new TypeError('"ext" argument must be a string');e(A);var s,r=0,i=-1,o=!0;if(void 0!==t&&t.length>0&&t.length<=A.length){if(t.length===A.length&&t===A)return"";var n=t.length-1,a=-1;for(s=A.length-1;s>=0;--s){var g=A.charCodeAt(s);if(47===g){if(!o){r=s+1;break}}else-1===a&&(o=!1,a=s+1),n>=0&&(g===t.charCodeAt(n)?-1==--n&&(i=s):(n=-1,i=a))}return r===i?i=a:-1===i&&(i=A.length),A.slice(r,i)}for(s=A.length-1;s>=0;--s)if(47===A.charCodeAt(s)){if(!o){r=s+1;break}}else-1===i&&(o=!1,i=s+1);return-1===i?"":A.slice(r,i)},extname:function(A){e(A);for(var t=-1,s=0,r=-1,i=!0,o=0,n=A.length-1;n>=0;--n){var a=A.charCodeAt(n);if(47!==a)-1===r&&(i=!1,r=n+1),46===a?-1===t?t=n:1!==o&&(o=1):-1!==t&&(o=-1);else if(!i){s=n+1;break}}return-1===t||-1===r||0===o||1===o&&t===r-1&&t===s+1?"":A.slice(t,r)},format:function(A){if(null===A||"object"!=typeof A)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof A);return function(A,e){var t=e.dir||e.root,s=e.base||(e.name||"")+(e.ext||"");return t?t===e.root?t+s:t+A+s:s}("/",A)},parse:function(A){e(A);var t={root:"",dir:"",base:"",ext:"",name:""};if(0===A.length)return t;var s,r=A.charCodeAt(0),i=47===r;i?(t.root="/",s=1):s=0;for(var o=-1,n=0,a=-1,g=!0,l=A.length-1,c=0;l>=s;--l)if(47!==(r=A.charCodeAt(l)))-1===a&&(g=!1,a=l+1),46===r?-1===o?o=l:1!==c&&(c=1):-1!==o&&(c=-1);else if(!g){n=l+1;break}return-1===o||-1===a||0===c||1===c&&o===a-1&&o===n+1?-1!==a&&(t.base=t.name=0===n&&i?A.slice(1,a):A.slice(n,a)):(0===n&&i?(t.name=A.slice(1,o),t.base=A.slice(1,a)):(t.name=A.slice(n,o),t.base=A.slice(n,a)),t.ext=A.slice(o,a)),n>0?t.dir=A.slice(0,n-1):i&&(t.dir="/"),t},sep:"/",delimiter:":",win32:null,posix:null};s.posix=s,A.exports=s},818:e=>{"use strict";e.exports=A}},t={};function s(A){var r=t[A];if(void 0!==r)return r.exports;var i=t[A]={exports:{}};return e[A](i,i.exports,s),i.exports}s.d=(A,e)=>{for(var t in e)s.o(e,t)&&!s.o(A,t)&&Object.defineProperty(A,t,{enumerable:!0,get:e[t]})},s.o=(A,e)=>Object.prototype.hasOwnProperty.call(A,e),s.r=A=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(A,"__esModule",{value:!0})};var r={};return(()=>{"use strict";s.r(r),s.d(r,{B3DMDecoder:()=>_A,InstancedOGC3DTile:()=>Te,InstancedTileLoader:()=>Ge,OBB:()=>i,OGC3DTile:()=>ue,OcclusionCullingService:()=>t,TileLoader:()=>ZA});var A=s(818);Math.PI,Math.PI;function e(A,e,t){return Math.max(e,Math.min(t,A))}class t{constructor(){this.cullMap=[],this.cullMaterial=new A.MeshBasicMaterial({vertexColors:!0}),this.cullMaterial.side=A.FrontSide,this.cullTarget=this.createCullTarget(),this.cullPixels=new Uint8Array(4*this.cullTarget.width*this.cullTarget.height)}setSide(A){this.cullMaterial.side=A}createCullTarget(){const e=new A.WebGLRenderTarget(Math.floor(.05*window.innerWidth),Math.floor(.05*window.innerHeight));return e.texture.format=A.RGBAFormat,e.texture.colorSpace=A.LinearEncoding,e.texture.minFilter=A.NearestFilter,e.texture.magFilter=A.NearestFilter,e.texture.generateMipmaps=!1,e.stencilBuffer=!1,e.depthBuffer=!0,e.depthTexture=new A.DepthTexture,e.depthTexture.format=A.DepthFormat,e.depthTexture.type=A.UnsignedShortType,e}update(A,t,s){let r=t.getRenderTarget(),i=A.overrideMaterial;A.overrideMaterial=this.cullMaterial,t.setRenderTarget(this.cullTarget),t.render(A,s),A.overrideMaterial=i,t.setRenderTarget(r),t.readRenderTargetPixels(this.cullTarget,0,0,this.cullTarget.width,this.cullTarget.height,this.cullPixels),this.cullMap=[];for(let A=0;A<this.cullPixels.length;A+=4){const t=e(this.cullPixels[A],0,255)<<16^e(this.cullPixels[A+1],0,255)<<8^e(this.cullPixels[A+2],0,255)<<0;this.cullMap[t]=!0}}hasID(A){return this.cullMap[A]}}class i{constructor(e){this.center=new A.Vector3(e[0],e[1],e[2]);var t=new A.Vector3(e[3],e[4],e[4]),s=new A.Vector3(e[6],e[7],e[8]),r=new A.Vector3(e[9],e[10],e[11]);this.halfWidth=t.length(),this.halfHeight=s.length(),this.halfDepth=r.length(),t.normalize(),s.normalize(),r.normalize(),this.sphere=new A.Sphere(this.center,Math.sqrt(this.halfWidth*this.halfWidth+this.halfHeight*this.halfHeight+this.halfDepth*this.halfDepth)),this.matrixToOBBCoordinateSystem=new A.Matrix3,this.matrixToOBBCoordinateSystem.set(t.x,t.y,t.z,s.x,s.y,s.z,r.x,r.y,r.z)}inFrustum(A){return A.intersectsSphere(this.sphere)}distanceToPoint(A){let e=A.clone();e.sub(this.center),e.applyMatrix3(this.matrixToOBBCoordinateSystem);let t=Math.max(0,Math.max(-this.halfWidth-e.x,e.x-this.halfWidth)),s=Math.max(0,Math.max(-this.halfHeight-e.y,e.y-this.halfHeight)),r=Math.max(0,Math.max(-this.halfDepth-e.z,e.z-this.halfDepth));return Math.sqrt(t*t+s*s+r*r)}}var o=s(649);function n(e,t=!1){const s=null!==e[0].index,r=new Set(Object.keys(e[0].attributes)),i=new Set(Object.keys(e[0].morphAttributes)),o={},n={},g=e[0].morphTargetsRelative,l=new A.BufferGeometry;let c=0;for(let A=0;A<e.length;++A){const a=e[A];let h=0;if(s!==(null!==a.index))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(const e in a.attributes){if(!r.has(e))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+'. All geometries must have compatible attributes; make sure "'+e+'" attribute exists among all geometries, or in none of them.'),null;void 0===o[e]&&(o[e]=[]),o[e].push(a.attributes[e]),h++}if(h!==r.size)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". Make sure all geometries have the same number of attributes."),null;if(g!==a.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(const e in a.morphAttributes){if(!i.has(e))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". .morphAttributes must be consistent throughout all geometries."),null;void 0===n[e]&&(n[e]=[]),n[e].push(a.morphAttributes[e])}if(t){let e;if(s)e=a.index.count;else{if(void 0===a.attributes.position)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". The geometry must have either an index or a position attribute"),null;e=a.attributes.position.count}l.addGroup(c,e,A),c+=e}}if(s){let A=0;const t=[];for(let s=0;s<e.length;++s){const r=e[s].index;for(let e=0;e<r.count;++e)t.push(r.getX(e)+A);A+=e[s].attributes.position.count}l.setIndex(t)}for(const A in o){const e=a(o[A]);if(!e)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+A+" attribute."),null;l.setAttribute(A,e)}for(const A in n){const e=n[A][0].length;if(0===e)break;l.morphAttributes=l.morphAttributes||{},l.morphAttributes[A]=[];for(let t=0;t<e;++t){const e=[];for(let s=0;s<n[A].length;++s)e.push(n[A][s][t]);const s=a(e);if(!s)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+A+" morphAttribute."),null;l.morphAttributes[A].push(s)}}return l}function a(e){let t,s,r,i=-1,o=0;for(let A=0;A<e.length;++A){const n=e[A];if(n.isInterleavedBufferAttribute)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. InterleavedBufferAttributes are not supported."),null;if(void 0===t&&(t=n.array.constructor),t!==n.array.constructor)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."),null;if(void 0===s&&(s=n.itemSize),s!==n.itemSize)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."),null;if(void 0===r&&(r=n.normalized),r!==n.normalized)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."),null;if(-1===i&&(i=n.gpuType),i!==n.gpuType)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."),null;o+=n.array.length}const n=new t(o);let a=0;for(let A=0;A<e.length;++A)n.set(e[A].array,a),a+=e[A].array.length;const g=new A.BufferAttribute(n,s,r);return void 0!==i&&(g.gpuType=i),g}function g(e,t){if(t===A.TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),e;if(t===A.TriangleFanDrawMode||t===A.TriangleStripDrawMode){let s=e.getIndex();if(null===s){const A=[],t=e.getAttribute("position");if(void 0===t)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),e;for(let e=0;e<t.count;e++)A.push(e);e.setIndex(A),s=e.getIndex()}const r=s.count-2,i=[];if(t===A.TriangleFanDrawMode)for(let A=1;A<=r;A++)i.push(s.getX(0)),i.push(s.getX(A)),i.push(s.getX(A+1));else for(let A=0;A<r;A++)A%2==0?(i.push(s.getX(A)),i.push(s.getX(A+1)),i.push(s.getX(A+2))):(i.push(s.getX(A+2)),i.push(s.getX(A+1)),i.push(s.getX(A)));i.length/3!==r&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const o=e.clone();return o.setIndex(i),o.clearGroups(),o}return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",t),e}class l extends A.Loader{constructor(A){super(A),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register((function(A){return new d(A)})),this.register((function(A){return new w(A)})),this.register((function(A){return new D(A)})),this.register((function(A){return new x(A)})),this.register((function(A){return new u(A)})),this.register((function(A){return new Q(A)})),this.register((function(A){return new f(A)})),this.register((function(A){return new p(A)})),this.register((function(A){return new B(A)})),this.register((function(A){return new m(A)})),this.register((function(A){return new E(A)})),this.register((function(A){return new y(A)})),this.register((function(A){return new I(A)})),this.register((function(A){return new R(A)})),this.register((function(A){return new S(A)}))}load(e,t,s,r){const i=this;let o;o=""!==this.resourcePath?this.resourcePath:""!==this.path?this.path:A.LoaderUtils.extractUrlBase(e),this.manager.itemStart(e);const n=function(A){r?r(A):console.error(A),i.manager.itemError(e),i.manager.itemEnd(e)},a=new A.FileLoader(this.manager);a.setPath(this.path),a.setResponseType("arraybuffer"),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,(function(A){try{i.parse(A,o,(function(A){t(A),i.manager.itemEnd(e)}),n)}catch(A){n(A)}}),s,n)}setDRACOLoader(A){return this.dracoLoader=A,this}setDDSLoader(){throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".')}setKTX2Loader(A){return this.ktx2Loader=A,this}setMeshoptDecoder(A){return this.meshoptDecoder=A,this}register(A){return-1===this.pluginCallbacks.indexOf(A)&&this.pluginCallbacks.push(A),this}unregister(A){return-1!==this.pluginCallbacks.indexOf(A)&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(A),1),this}parse(A,e,t,s){let r;const i={},o={},n=new TextDecoder;if("string"==typeof A)r=JSON.parse(A);else if(A instanceof ArrayBuffer){if(n.decode(new Uint8Array(A,0,4))===T){try{i[h.KHR_BINARY_GLTF]=new L(A)}catch(A){return void(s&&s(A))}r=JSON.parse(i[h.KHR_BINARY_GLTF].content)}else r=JSON.parse(n.decode(A))}else r=A;if(void 0===r.asset||r.asset.version[0]<2)return void(s&&s(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")));const a=new rA(r,{path:e||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});a.fileLoader.setRequestHeader(this.requestHeader);for(let A=0;A<this.pluginCallbacks.length;A++){const e=this.pluginCallbacks[A](a);o[e.name]=e,i[e.name]=!0}if(r.extensionsUsed)for(let A=0;A<r.extensionsUsed.length;++A){const e=r.extensionsUsed[A],t=r.extensionsRequired||[];switch(e){case h.KHR_MATERIALS_UNLIT:i[e]=new C;break;case h.KHR_DRACO_MESH_COMPRESSION:i[e]=new F(r,this.dracoLoader);break;case h.KHR_TEXTURE_TRANSFORM:i[e]=new G;break;case h.KHR_MESH_QUANTIZATION:i[e]=new k;break;default:t.indexOf(e)>=0&&void 0===o[e]&&console.warn('THREE.GLTFLoader: Unknown extension "'+e+'".')}}a.setExtensions(i),a.setPlugins(o),a.parse(t,s)}parseAsync(A,e){const t=this;return new Promise((function(s,r){t.parse(A,e,s,r)}))}}function c(){let A={};return{get:function(e){return A[e]},add:function(e,t){A[e]=t},remove:function(e){delete A[e]},removeAll:function(){A={}}}}const h={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_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_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 I{constructor(A){this.parser=A,this.name=h.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const A=this.parser,e=this.parser.json.nodes||[];for(let t=0,s=e.length;t<s;t++){const s=e[t];s.extensions&&s.extensions[this.name]&&void 0!==s.extensions[this.name].light&&A._addNodeRef(this.cache,s.extensions[this.name].light)}}_loadLight(e){const t=this.parser,s="light:"+e;let r=t.cache.get(s);if(r)return r;const i=t.json,o=((i.extensions&&i.extensions[this.name]||{}).lights||[])[e];let n;const a=new A.Color(16777215);void 0!==o.color&&a.fromArray(o.color);const g=void 0!==o.range?o.range:0;switch(o.type){case"directional":n=new A.DirectionalLight(a),n.target.position.set(0,0,-1),n.add(n.target);break;case"point":n=new A.PointLight(a),n.distance=g;break;case"spot":n=new A.SpotLight(a),n.distance=g,o.spot=o.spot||{},o.spot.innerConeAngle=void 0!==o.spot.innerConeAngle?o.spot.innerConeAngle:0,o.spot.outerConeAngle=void 0!==o.spot.outerConeAngle?o.spot.outerConeAngle:Math.PI/4,n.angle=o.spot.outerConeAngle,n.penumbra=1-o.spot.innerConeAngle/o.spot.outerConeAngle,n.target.position.set(0,0,-1),n.add(n.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+o.type)}return n.position.set(0,0,0),n.decay=2,Z(n,o),void 0!==o.intensity&&(n.intensity=o.intensity),n.name=t.createUniqueName(o.name||"light_"+e),r=Promise.resolve(n),t.cache.add(s,r),r}getDependency(A,e){if("light"===A)return this._loadLight(e)}createNodeAttachment(A){const e=this,t=this.parser,s=t.json.nodes[A],r=(s.extensions&&s.extensions[this.name]||{}).light;return void 0===r?null:this._loadLight(r).then((function(A){return t._getNodeRef(e.cache,r,A)}))}}class C{constructor(){this.name=h.KHR_MATERIALS_UNLIT}getMaterialType(){return A.MeshBasicMaterial}extendParams(e,t,s){const r=[];e.color=new A.Color(1,1,1),e.opacity=1;const i=t.pbrMetallicRoughness;if(i){if(Array.isArray(i.baseColorFactor)){const A=i.baseColorFactor;e.color.fromArray(A),e.opacity=A[3]}void 0!==i.baseColorTexture&&r.push(s.assignTexture(e,"map",i.baseColorTexture,A.SRGBColorSpace))}return Promise.all(r)}}class B{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(A,e){const t=this.parser.json.materials[A];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const s=t.extensions[this.name].emissiveStrength;return void 0!==s&&(e.emissiveIntensity=s),Promise.resolve()}}class d{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const s=this.parser,r=s.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const i=[],o=r.extensions[this.name];if(void 0!==o.clearcoatFactor&&(t.clearcoat=o.clearcoatFactor),void 0!==o.clearcoatTexture&&i.push(s.assignTexture(t,"clearcoatMap",o.clearcoatTexture)),void 0!==o.clearcoatRoughnessFactor&&(t.clearcoatRoughness=o.clearcoatRoughnessFactor),void 0!==o.clearcoatRoughnessTexture&&i.push(s.assignTexture(t,"clearcoatRoughnessMap",o.clearcoatRoughnessTexture)),void 0!==o.clearcoatNormalTexture&&(i.push(s.assignTexture(t,"clearcoatNormalMap",o.clearcoatNormalTexture)),void 0!==o.clearcoatNormalTexture.scale)){const e=o.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new A.Vector2(e,e)}return Promise.all(i)}}class E{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser,s=t.json.materials[A];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],i=s.extensions[this.name];return void 0!==i.iridescenceFactor&&(e.iridescence=i.iridescenceFactor),void 0!==i.iridescenceTexture&&r.push(t.assignTexture(e,"iridescenceMap",i.iridescenceTexture)),void 0!==i.iridescenceIor&&(e.iridescenceIOR=i.iridescenceIor),void 0===e.iridescenceThicknessRange&&(e.iridescenceThicknessRange=[100,400]),void 0!==i.iridescenceThicknessMinimum&&(e.iridescenceThicknessRange[0]=i.iridescenceThicknessMinimum),void 0!==i.iridescenceThicknessMaximum&&(e.iridescenceThicknessRange[1]=i.iridescenceThicknessMaximum),void 0!==i.iridescenceThicknessTexture&&r.push(t.assignTexture(e,"iridescenceThicknessMap",i.iridescenceThicknessTexture)),Promise.all(r)}}class u{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_SHEEN}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const s=this.parser,r=s.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const i=[];t.sheenColor=new A.Color(0,0,0),t.sheenRoughness=0,t.sheen=1;const o=r.extensions[this.name];return void 0!==o.sheenColorFactor&&t.sheenColor.fromArray(o.sheenColorFactor),void 0!==o.sheenRoughnessFactor&&(t.sheenRoughness=o.sheenRoughnessFactor),void 0!==o.sheenColorTexture&&i.push(s.assignTexture(t,"sheenColorMap",o.sheenColorTexture,A.SRGBColorSpace)),void 0!==o.sheenRoughnessTexture&&i.push(s.assignTexture(t,"sheenRoughnessMap",o.sheenRoughnessTexture)),Promise.all(i)}}class Q{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser,s=t.json.materials[A];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],i=s.extensions[this.name];return void 0!==i.transmissionFactor&&(e.transmission=i.transmissionFactor),void 0!==i.transmissionTexture&&r.push(t.assignTexture(e,"transmissionMap",i.transmissionTexture)),Promise.all(r)}}class f{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_VOLUME}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const s=this.parser,r=s.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const i=[],o=r.extensions[this.name];t.thickness=void 0!==o.thicknessFactor?o.thicknessFactor:0,void 0!==o.thicknessTexture&&i.push(s.assignTexture(t,"thicknessMap",o.thicknessTexture)),t.attenuationDistance=o.attenuationDistance||1/0;const n=o.attenuationColor||[1,1,1];return t.attenuationColor=new A.Color(n[0],n[1],n[2]),Promise.all(i)}}class p{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_IOR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser.json.materials[A];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const s=t.extensions[this.name];return e.ior=void 0!==s.ior?s.ior:1.5,Promise.resolve()}}class m{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_SPECULAR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const s=this.parser,r=s.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const i=[],o=r.extensions[this.name];t.specularIntensity=void 0!==o.specularFactor?o.specularFactor:1,void 0!==o.specularTexture&&i.push(s.assignTexture(t,"specularIntensityMap",o.specularTexture));const n=o.specularColorFactor||[1,1,1];return t.specularColor=new A.Color(n[0],n[1],n[2]),void 0!==o.specularColorTexture&&i.push(s.assignTexture(t,"specularColorMap",o.specularColorTexture,A.SRGBColorSpace)),Promise.all(i)}}class y{constructor(A){this.parser=A,this.name=h.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser,s=t.json.materials[A];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],i=s.extensions[this.name];return void 0!==i.anisotropyStrength&&(e.anisotropy=i.anisotropyStrength),void 0!==i.anisotropyRotation&&(e.anisotropyRotation=i.anisotropyRotation),void 0!==i.anisotropyTexture&&r.push(t.assignTexture(e,"anisotropyMap",i.anisotropyTexture)),Promise.all(r)}}class w{constructor(A){this.parser=A,this.name=h.KHR_TEXTURE_BASISU}loadTexture(A){const e=this.parser,t=e.json,s=t.textures[A];if(!s.extensions||!s.extensions[this.name])return null;const r=s.extensions[this.name],i=e.options.ktx2Loader;if(!i){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return e.loadTextureImage(A,r.source,i)}}class D{constructor(A){this.parser=A,this.name=h.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(A){const e=this.name,t=this.parser,s=t.json,r=s.textures[A];if(!r.extensions||!r.extensions[e])return null;const i=r.extensions[e],o=s.images[i.source];let n=t.textureLoader;if(o.uri){const A=t.options.manager.getHandler(o.uri);null!==A&&(n=A)}return this.detectSupport().then((function(r){if(r)return t.loadTextureImage(A,i.source,n);if(s.extensionsRequired&&s.extensionsRequired.indexOf(e)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return t.loadTexture(A)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(A){const e=new Image;e.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",e.onload=e.onerror=function(){A(1===e.height)}}))),this.isSupported}}class x{constructor(A){this.parser=A,this.name=h.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(A){const e=this.name,t=this.parser,s=t.json,r=s.textures[A];if(!r.extensions||!r.extensions[e])return null;const i=r.extensions[e],o=s.images[i.source];let n=t.textureLoader;if(o.uri){const A=t.options.manager.getHandler(o.uri);null!==A&&(n=A)}return this.detectSupport().then((function(r){if(r)return t.loadTextureImage(A,i.source,n);if(s.extensionsRequired&&s.extensionsRequired.indexOf(e)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return t.loadTexture(A)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(A){const e=new Image;e.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",e.onload=e.onerror=function(){A(1===e.height)}}))),this.isSupported}}class R{constructor(A){this.name=h.EXT_MESHOPT_COMPRESSION,this.parser=A}loadBufferView(A){const e=this.parser.json,t=e.bufferViews[A];if(t.extensions&&t.extensions[this.name]){const A=t.extensions[this.name],s=this.parser.getDependency("buffer",A.buffer),r=this.parser.options.meshoptDecoder;if(!r||!r.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 s.then((function(e){const t=A.byteOffset||0,s=A.byteLength||0,i=A.count,o=A.byteStride,n=new Uint8Array(e,t,s);return r.decodeGltfBufferAsync?r.decodeGltfBufferAsync(i,o,n,A.mode,A.filter).then((function(A){return A.buffer})):r.ready.then((function(){const e=new ArrayBuffer(i*o);return r.decodeGltfBuffer(new Uint8Array(e),i,o,n,A.mode,A.filter),e}))}))}return null}}class S{constructor(A){this.name=h.EXT_MESH_GPU_INSTANCING,this.parser=A}createNodeMesh(e){const t=this.parser.json,s=t.nodes[e];if(!s.extensions||!s.extensions[this.name]||void 0===s.mesh)return null;const r=t.meshes[s.mesh];for(const A of r.primitives)if(A.mode!==v.TRIANGLES&&A.mode!==v.TRIANGLE_STRIP&&A.mode!==v.TRIANGLE_FAN&&void 0!==A.mode)return null;const i=s.extensions[this.name].attributes,o=[],n={};for(const A in i)o.push(this.parser.getDependency("accessor",i[A]).then((e=>(n[A]=e,n[A]))));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then((e=>{const t=e.pop(),s=t.isGroup?t.children:[t],r=e[0].count,i=[];for(const e of s){const t=new A.Matrix4,s=new A.Vector3,o=new A.Quaternion,a=new A.Vector3(1,1,1),g=new A.InstancedMesh(e.geometry,e.material,r);for(let A=0;A<r;A++)n.TRANSLATION&&s.fromBufferAttribute(n.TRANSLATION,A),n.ROTATION&&o.fromBufferAttribute(n.ROTATION,A),n.SCALE&&a.fromBufferAttribute(n.SCALE,A),g.setMatrixAt(A,t.compose(s,o,a));for(const A in n)"TRANSLATION"!==A&&"ROTATION"!==A&&"SCALE"!==A&&e.geometry.setAttribute(A,n[A]);A.Object3D.prototype.copy.call(g,e),this.parser.assignFinalMaterial(g),i.push(g)}return t.isGroup?(t.clear(),t.add(...i),t):i[0]})))}}const T="glTF",M=1313821514,b=5130562;class L{constructor(A){this.name=h.KHR_BINARY_GLTF,this.content=null,this.body=null;const e=new DataView(A,0,12),t=new TextDecoder;if(this.header={magic:t.decode(new Uint8Array(A.slice(0,4))),version:e.getUint32(4,!0),length:e.getUint32(8,!0)},this.header.magic!==T)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const s=this.header.length-12,r=new DataView(A,12);let i=0;for(;i<s;){const e=r.getUint32(i,!0);i+=4;const s=r.getUint32(i,!0);if(i+=4,s===M){const s=new Uint8Array(A,12+i,e);this.content=t.decode(s)}else if(s===b){const t=12+i;this.body=A.slice(t,t+e)}i+=e}if(null===this.content)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class F{constructor(A,e){if(!e)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=h.KHR_DRACO_MESH_COMPRESSION,this.json=A,this.dracoLoader=e,this.dracoLoader.preload()}decodePrimitive(A,e){const t=this.json,s=this.dracoLoader,r=A.extensions[this.name].bufferView,i=A.extensions[this.name].attributes,o={},n={},a={};for(const A in i){const e=J[A]||A.toLowerCase();o[e]=i[A]}for(const e in A.attributes){const s=J[e]||e.toLowerCase();if(void 0!==i[e]){const r=t.accessors[A.attributes[e]],i=H[r.componentType];a[s]=i.name,n[s]=!0===r.normalized}}return e.getDependency("bufferView",r).then((function(A){return new Promise((function(e){s.decodeDracoFile(A,(function(A){for(const e in A.attributes){const t=A.attributes[e],s=n[e];void 0!==s&&(t.normalized=s)}e(A)}),o,a)}))}))}}class G{constructor(){this.name=h.KHR_TEXTURE_TRANSFORM}extendTexture(A,e){return void 0!==e.texCoord&&e.texCoord!==A.channel||void 0!==e.offset||void 0!==e.rotation||void 0!==e.scale?(A=A.clone(),void 0!==e.texCoord&&(A.channel=e.texCoord),void 0!==e.offset&&A.offset.fromArray(e.offset),void 0!==e.rotation&&(A.rotation=e.rotation),void 0!==e.scale&&A.repeat.fromArray(e.scale),A.needsUpdate=!0,A):A}}class k{constructor(){this.name=h.KHR_MESH_QUANTIZATION}}class U extends A.Interpolant{constructor(A,e,t,s){super(A,e,t,s)}copySampleValue_(A){const e=this.resultBuffer,t=this.sampleValues,s=this.valueSize,r=A*s*3+s;for(let A=0;A!==s;A++)e[A]=t[r+A];return e}interpolate_(A,e,t,s){const r=this.resultBuffer,i=this.sampleValues,o=this.valueSize,n=2*o,a=3*o,g=s-e,l=(t-e)/g,c=l*l,h=c*l,I=A*a,C=I-a,B=-2*h+3*c,d=h-c,E=1-B,u=d-c+l;for(let A=0;A!==o;A++){const e=i[C+A+o],t=i[C+A+n]*g,s=i[I+A+o],a=i[I+A]*g;r[A]=E*e+u*t+B*s+d*a}return r}}const _=new A.Quaternion;class N extends U{interpolate_(A,e,t,s){const r=super.interpolate_(A,e,t,s);return _.fromArray(r).normalize().toArray(r),r}}const v={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},H={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},q={9728:A.NearestFilter,9729:A.LinearFilter,9984:A.NearestMipmapNearestFilter,9985:A.LinearMipmapNearestFilter,9986:A.NearestMipmapLinearFilter,9987:A.LinearMipmapLinearFilter},P={33071:A.ClampToEdgeWrapping,33648:A.MirroredRepeatWrapping,10497:A.RepeatWrapping},O={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},J={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"},V={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},j={CUBICSPLINE:void 0,LINEAR:A.InterpolateLinear,STEP:A.InterpolateDiscrete},K="OPAQUE",Y="MASK",W="BLEND";function X(A,e,t){for(const s in t.extensions)void 0===A[s]&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[s]=t.extensions[s])}function Z(A,e){void 0!==e.extras&&("object"==typeof e.extras?Object.assign(A.userData,e.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+e.extras))}function $(A,e){if(A.updateMorphTargets(),void 0!==e.weights)for(let t=0,s=e.weights.length;t<s;t++)A.morphTargetInfluences[t]=e.weights[t];if(e.extras&&Array.isArray(e.extras.targetNames)){const t=e.extras.targetNames;if(A.morphTargetInfluences.length===t.length){A.morphTargetDictionary={};for(let e=0,s=t.length;e<s;e++)A.morphTargetDictionary[t[e]]=e}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function AA(A){let e;const t=A.extensions&&A.extensions[h.KHR_DRACO_MESH_COMPRESSION];if(e=t?"draco:"+t.bufferView+":"+t.indices+":"+eA(t.attributes):A.indices+":"+eA(A.attributes)+":"+A.mode,void 0!==A.targets)for(let t=0,s=A.targets.length;t<s;t++)e+=":"+eA(A.targets[t]);return e}function eA(A){let e="";const t=Object.keys(A).sort();for(let s=0,r=t.length;s<r;s++)e+=t[s]+":"+A[t[s]]+";";return e}function tA(A){switch(A){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}const sA=new A.Matrix4;class rA{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new c,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,r=!1,i=-1;"undefined"!=typeof navigator&&(s=!0===/^((?!chrome|android).)*safari/i.test(navigator.userAgent),r=navigator.userAgent.indexOf("Firefox")>-1,i=r?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1),"undefined"==typeof createImageBitmap||s||r&&i<98?this.textureLoader=new A.TextureLoader(this.options.manager):this.textureLoader=new A.ImageBitmapLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new A.FileLoader(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),"use-credentials"===this.options.crossOrigin&&this.fileLoader.setWithCredentials(!0)}setExtensions(A){this.extensions=A}setPlugins(A){this.plugins=A}parse(A,e){const t=this,s=this.json,r=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([t.getDependencies("scene"),t.getDependencies("animation"),t.getDependencies("camera")])})).then((function(e){const i={scene:e[0][s.scene||0],scenes:e[0],animations:e[1],cameras:e[2],asset:s.asset,parser:t,userData:{}};X(r,i,s),Z(i,s),Promise.all(t._invokeAll((function(A){return A.afterRoot&&A.afterRoot(i)}))).then((function(){A(i)}))})).catch(e)}_markDefs(){const A=this.json.nodes||[],e=this.json.skins||[],t=this.json.meshes||[];for(let t=0,s=e.length;t<s;t++){const s=e[t].joints;for(let e=0,t=s.length;e<t;e++)A[s[e]].isBone=!0}for(let e=0,s=A.length;e<s;e++){const s=A[e];void 0!==s.mesh&&(this._addNodeRef(this.meshCache,s.mesh),void 0!==s.skin&&(t[s.mesh].isSkinnedMesh=!0)),void 0!==s.camera&&this._addNodeRef(this.cameraCache,s.camera)}}_addNodeRef(A,e){void 0!==e&&(void 0===A.refs[e]&&(A.refs[e]=A.uses[e]=0),A.refs[e]++)}_getNodeRef(A,e,t){if(A.refs[e]<=1)return t;const s=t.clone(),r=(A,e)=>{const t=this.associations.get(A);null!=t&&this.associations.set(e,t);for(const[t,s]of A.children.entries())r(s,e.children[t])};return r(t,s),s.name+="_instance_"+A.uses[e]++,s}_invokeOne(A){const e=Object.values(this.plugins);e.push(this);for(let t=0;t<e.length;t++){const s=A(e[t]);if(s)return s}return null}_invokeAll(A){const e=Object.values(this.plugins);e.unshift(this);const t=[];for(let s=0;s<e.length;s++){const r=A(e[s]);r&&t.push(r)}return t}getDependency(A,e){const t=A+":"+e;let s=this.cache.get(t);if(!s){switch(A){case"scene":s=this.loadScene(e);break;case"node":s=this._invokeOne((function(A){return A.loadNode&&A.loadNode(e)}));break;case"mesh":s=this._invokeOne((function(A){return A.loadMesh&&A.loadMesh(e)}));break;case"accessor":s=this.loadAccessor(e);break;case"bufferView":s=this._invokeOne((function(A){return A.loadBufferView&&A.loadBufferView(e)}));break;case"buffer":s=this.loadBuffer(e);break;case"material":s=this._invokeOne((function(A){return A.loadMaterial&&A.loadMaterial(e)}));break;case"texture":s=this._invokeOne((function(A){return A.loadTexture&&A.loadTexture(e)}));break;case"skin":s=this.loadSkin(e);break;case"animation":s=this._invokeOne((function(A){return A.loadAnimation&&A.loadAnimation(e)}));break;case"camera":s=this.loadCamera(e);break;default:if(s=this._invokeOne((function(t){return t!=this&&t.getDependency&&t.getDependency(A,e)})),!s)throw new Error("Unknown type: "+A)}this.cache.add(t,s)}return s}getDependencies(A){let e=this.cache.get(A);if(!e){const t=this,s=this.json[A+("mesh"===A?"es":"s")]||[];e=Promise.all(s.map((function(e,s){return t.getDependency(A,s)}))),this.cache.add(A,e)}return e}loadBuffer(e){const t=this.json.buffers[e],s=this.fileLoader;if(t.type&&"arraybuffer"!==t.type)throw new Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(void 0===t.uri&&0===e)return Promise.resolve(this.extensions[h.KHR_BINARY_GLTF].body);const r=this.options;return new Promise((function(e,i){s.load(A.LoaderUtils.resolveURL(t.uri,r.path),e,void 0,(function(){i(new Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))}))}))}loadBufferView(A){const e=this.json.bufferViews[A];return this.getDependency("buffer",e.buffer).then((function(A){const t=e.byteLength||0,s=e.byteOffset||0;return A.slice(s,s+t)}))}loadAccessor(e){const t=this,s=this.json,r=this.json.accessors[e];if(void 0===r.bufferView&&void 0===r.sparse){const e=O[r.type],t=H[r.componentType],s=!0===r.normalized,i=new t(r.count*e);return Promise.resolve(new A.BufferAttribute(i,e,s))}const i=[];return void 0!==r.bufferView?i.push(this.getDependency("bufferView",r.bufferView)):i.push(null),void 0!==r.sparse&&(i.push(this.getDependency("bufferView",r.sparse.indices.bufferView)),i.push(this.getDependency("bufferView",r.sparse.values.bufferView))),Promise.all(i).then((function(e){const i=e[0],o=O[r.type],n=H[r.componentType],a=n.BYTES_PER_ELEMENT,g=a*o,l=r.byteOffset||0,c=void 0!==r.bufferView?s.bufferViews[r.bufferView].byteStride:void 0,h=!0===r.normalized;let I,C;if(c&&c!==g){const e=Math.floor(l/c),s="InterleavedBuffer:"+r.bufferView+":"+r.componentType+":"+e+":"+r.count;let g=t.cache.get(s);g||(I=new n(i,e*c,r.count*c/a),g=new A.InterleavedBuffer(I,c/a),t.cache.add(s,g)),C=new A.InterleavedBufferAttribute(g,o,l%c/a,h)}else I=null===i?new n(r.count*o):new n(i,l,r.count*o),C=new A.BufferAttribute(I,o,h);if(void 0!==r.sparse){const t=O.SCALAR,s=H[r.sparse.indices.componentType],a=r.sparse.indices.byteOffset||0,g=r.sparse.values.byteOffset||0,l=new s(e[1],a,r.sparse.count*t),c=new n(e[2],g,r.sparse.count*o);null!==i&&(C=new A.BufferAttribute(C.array.slice(),C.itemSize,C.normalized));for(let A=0,e=l.length;A<e;A++){const e=l[A];if(C.setX(e,c[A*o]),o>=2&&C.setY(e,c[A*o+1]),o>=3&&C.setZ(e,c[A*o+2]),o>=4&&C.setW(e,c[A*o+3]),o>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return C}))}loadTexture(A){const e=this.json,t=this.options,s=e.textures[A].source,r=e.images[s];let i=this.textureLoader;if(r.uri){const A=t.manager.getHandler(r.uri);null!==A&&(i=A)}return this.loadTextureImage(A,s,i)}loadTextureImage(e,t,s){const r=this,i=this.json,o=i.textures[e],n=i.images[t],a=(n.uri||n.bufferView)+":"+o.sampler;if(this.textureCache[a])return this.textureCache[a];const g=this.loadImageSource(t,s).then((function(t){t.flipY=!1,t.name=o.name||n.name||"",""===t.name&&"string"==typeof n.uri&&!1===n.uri.startsWith("data:image/")&&(t.name=n.uri);const s=(i.samplers||{})[o.sampler]||{};return t.magFilter=q[s.magFilter]||A.LinearFilter,t.minFilter=q[s.minFilter]||A.LinearMipmapLinearFilter,t.wrapS=P[s.wrapS]||A.RepeatWrapping,t.wrapT=P[s.wrapT]||A.RepeatWrapping,r.associations.set(t,{textures:e}),t})).catch((function(){return null}));return this.textureCache[a]=g,g}loadImageSource(e,t){const s=this,r=this.json,i=this.options;if(void 0!==this.sourceCache[e])return this.sourceCache[e].then((A=>A.clone()));const o=r.images[e],n=self.URL||self.webkitURL;let a=o.uri||"",g=!1;if(void 0!==o.bufferView)a=s.getDependency("bufferView",o.bufferView).then((function(A){g=!0;const e=new Blob([A],{type:o.mimeType});return a=n.createObjectURL(e),a}));else if(void 0===o.uri)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const l=Promise.resolve(a).then((function(e){return new Promise((function(s,r){let o=s;!0===t.isImageBitmapLoader&&(o=function(e){const t=new A.Texture(e);t.needsUpdate=!0,s(t)}),t.load(A.LoaderUtils.resolveURL(e,i.path),o,void 0,r)}))})).then((function(A){var e;return!0===g&&n.revokeObjectURL(a),A.userData.mimeType=o.mimeType||((e=o.uri).search(/\.jpe?g($|\?)/i)>0||0===e.search(/^data\:image\/jpeg/)?"image/jpeg":e.search(/\.webp($|\?)/i)>0||0===e.search(/^data\:image\/webp/)?"image/webp":"image/png"),A})).catch((function(A){throw console.error("THREE.GLTFLoader: Couldn't load texture",a),A}));return this.sourceCache[e]=l,l}assignTexture(A,e,t,s){const r=this;return this.getDependency("texture",t.index).then((function(i){if(!i)return null;if(void 0!==t.texCoord&&t.texCoord>0&&((i=i.clone()).channel=t.texCoord),r.extensions[h.KHR_TEXTURE_TRANSFORM]){const A=void 0!==t.extensions?t.extensions[h.KHR_TEXTURE_TRANSFORM]:void 0;if(A){const e=r.associations.get(i);i=r.extensions[h.KHR_TEXTURE_TRANSFORM].extendTexture(i,A),r.associations.set(i,e)}}return void 0!==s&&(i.colorSpace=s),A[e]=i,i}))}assignFinalMaterial(e){const t=e.geometry;let s=e.material;const r=void 0===t.attributes.tangent,i=void 0!==t.attributes.color,o=void 0===t.attributes.normal;if(e.isPoints){const e="PointsMaterial:"+s.uuid;let t=this.cache.get(e);t||(t=new A.PointsMaterial,A.Material.prototype.copy.call(t,s),t.color.copy(s.color),t.map=s.map,t.sizeAttenuation=!1,this.cache.add(e,t)),s=t}else if(e.isLine){const e="LineBasicMaterial:"+s.uuid;let t=this.cache.get(e);t||(t=new A.LineBasicMaterial,A.Material.prototype.copy.call(t,s),t.color.copy(s.color),t.map=s.map,this.cache.add(e,t)),s=t}if(r||i||o){let A="ClonedMaterial:"+s.uuid+":";r&&(A+="derivative-tangents:"),i&&(A+="vertex-colors:"),o&&(A+="flat-shading:");let e=this.cache.get(A);e||(e=s.clone(),i&&(e.vertexColors=!0),o&&(e.flatShading=!0),r&&(e.normalScale&&(e.normalScale.y*=-1),e.clearcoatNormalScale&&(e.clearcoatNormalScale.y*=-1)),this.cache.add(A,e),this.associations.set(e,this.associations.get(s))),s=e}e.material=s}getMaterialType(){return A.MeshStandardMaterial}loadMaterial(e){const t=this,s=this.json,r=this.extensions,i=s.materials[e];let o;const n={},a=[];if((i.extensions||{})[h.KHR_MATERIALS_UNLIT]){const A=r[h.KHR_MATERIALS_UNLIT];o=A.getMaterialType(),a.push(A.extendParams(n,i,t))}else{const s=i.pbrMetallicRoughness||{};if(n.color=new A.Color(1,1,1),n.opacity=1,Array.isArray(s.baseColorFactor)){const A=s.baseColorFactor;n.color.fromArray(A),n.opacity=A[3]}void 0!==s.baseColorTexture&&a.push(t.assignTexture(n,"map",s.baseColorTexture,A.SRGBColorSpace)),n.metalness=void 0!==s.metallicFactor?s.metallicFactor:1,n.roughness=void 0!==s.roughnessFactor?s.roughnessFactor:1,void 0!==s.metallicRoughnessTexture&&(a.push(t.assignTexture(n,"metalnessMap",s.metallicRoughnessTexture)),a.push(t.assignTexture(n,"roughnessMap",s.metallicRoughnessTexture))),o=this._invokeOne((function(A){return A.getMaterialType&&A.getMaterialType(e)})),a.push(Promise.all(this._invokeAll((function(A){return A.extendMaterialParams&&A.extendMaterialParams(e,n)}))))}!0===i.doubleSided&&(n.side=A.DoubleSide);const g=i.alphaMode||K;if(g===W?(n.transparent=!0,n.depthWrite=!1):(n.transparent=!1,g===Y&&(n.alphaTest=void 0!==i.alphaCutoff?i.alphaCutoff:.5)),void 0!==i.normalTexture&&o!==A.MeshBasicMaterial&&(a.push(t.assignTexture(n,"normalMap",i.normalTexture)),n.normalScale=new A.Vector2(1,1),void 0!==i.normalTexture.scale)){const A=i.normalTexture.scale;n.normalScale.set(A,A)}return void 0!==i.occlusionTexture&&o!==A.MeshBasicMaterial&&(a.push(t.assignTexture(n,"aoMap",i.occlusionTexture)),void 0!==i.occlusionTexture.strength&&(n.aoMapIntensity=i.occlusionTexture.strength)),void 0!==i.emissiveFactor&&o!==A.MeshBasicMaterial&&(n.emissive=(new A.Color).fromArray(i.emissiveFactor)),void 0!==i.emissiveTexture&&o!==A.MeshBasicMaterial&&a.push(t.assignTexture(n,"emissiveMap",i.emissiveTexture,A.SRGBColorSpace)),Promise.all(a).then((function(){const A=new o(n);return i.name&&(A.name=i.name),Z(A,i),t.associations.set(A,{materials:e}),i.extensions&&X(r,A,i),A}))}createUniqueName(e){const t=A.PropertyBinding.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,s=this.extensions,r=this.primitiveCache;function i(A){return s[h.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(A,t).then((function(e){return iA(e,A,t)}))}const o=[];for(let s=0,n=e.length;s<n;s++){const n=e[s],a=AA(n),g=r[a];if(g)o.push(g.promise);else{let e;e=n.extensions&&n.extensions[h.KHR_DRACO_MESH_COMPRESSION]?i(n):iA(new A.BufferGeometry,n,t),r[a]={primitive:n,promise:e},o.push(e)}}return Promise.all(o)}loadMesh(e){const t=this,s=this.json,r=this.extensions,i=s.meshes[e],o=i.primitives,n=[];for(let e=0,t=o.length;e<t;e++){const t=void 0===o[e].material?(void 0===(a=this.cache).DefaultMaterial&&(a.DefaultMaterial=new A.MeshStandardMaterial({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:A.FrontSide})),a.DefaultMaterial):this.getDependency("material",o[e].material);n.push(t)}var a;return n.push(t.loadGeometries(o)),Promise.all(n).then((function(s){const n=s.slice(0,s.length-1),a=s[s.length-1],l=[];for(let s=0,c=a.length;s<c;s++){const c=a[s],h=o[s];let I;const C=n[s];if(h.mode===v.TRIANGLES||h.mode===v.TRIANGLE_STRIP||h.mode===v.TRIANGLE_FAN||void 0===h.mode)I=!0===i.isSkinnedMesh?new A.SkinnedMesh(c,C):new A.Mesh(c,C),!0===I.isSkinnedMesh&&I.normalizeSkinWeights(),h.mode===v.TRIANGLE_STRIP?I.geometry=g(I.geometry,A.TriangleStripDrawMode):h.mode===v.TRIANGLE_FAN&&(I.geometry=g(I.geometry,A.TriangleFanDrawMode));else if(h.mode===v.LINES)I=new A.LineSegments(c,C);else if(h.mode===v.LINE_STRIP)I=new A.Line(c,C);else if(h.mode===v.LINE_LOOP)I=new A.LineLoop(c,C);else{if(h.mode!==v.POINTS)throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+h.mode);I=new A.Points(c,C)}Object.keys(I.geometry.morphAttributes).length>0&&$(I,i),I.name=t.createUniqueName(i.name||"mesh_"+e),Z(I,i),h.extensions&&X(r,I,h),t.assignFinalMaterial(I),l.push(I)}for(let A=0,s=l.length;A<s;A++)t.associations.set(l[A],{meshes:e,primitives:A});if(1===l.length)return i.extensions&&X(r,l[0],i),l[0];const c=new A.Group;i.extensions&&X(r,c,i),t.associations.set(c,{meshes:e});for(let A=0,e=l.length;A<e;A++)c.add(l[A]);return c}))}loadCamera(e){let t;const s=this.json.cameras[e],r=s[s.type];if(r)return"perspective"===s.type?t=new A.PerspectiveCamera(A.MathUtils.radToDeg(r.yfov),r.aspectRatio||1,r.znear||1,r.zfar||2e6):"orthographic"===s.type&&(t=new A.OrthographicCamera(-r.xmag,r.xmag,r.ymag,-r.ymag,r.znear,r.zfar)),s.name&&(t.name=this.createUniqueName(s.name)),Z(t,s),Promise.resolve(t);console.warn("THREE.GLTFLoader: Missing camera parameters.")}loadSkin(e){const t=this.json.skins[e],s=[];for(let A=0,e=t.joints.length;A<e;A++)s.push(this._loadNodeShallow(t.joints[A]));return void 0!==t.inverseBindMatrices?s.push(this.getDependency("accessor",t.inverseBindMatrices)):s.push(null),Promise.all(s).then((function(e){const s=e.pop(),r=e,i=[],o=[];for(let e=0,n=r.length;e<n;e++){const n=r[e];if(n){i.push(n);const t=new A.Matrix4;null!==s&&t.fromArray(s.array,16*e),o.push(t)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[e])}return new A.Skeleton(i,o)}))}loadAnimation(e){const t=this.json,s=this,r=t.animations[e],i=r.name?r.name:"animation_"+e,o=[],n=[],a=[],g=[],l=[];for(let A=0,e=r.channels.length;A<e;A++){const e=r.channels[A],t=r.samplers[e.sampler],s=e.target,i=s.node,c=void 0!==r.parameters?r.parameters[t.input]:t.input,h=void 0!==r.parameters?r.parameters[t.output]:t.output;void 0!==s.node&&(o.push(this.getDependency("node",i)),n.push(this.getDependency("accessor",c)),a.push(this.getDependency("accessor",h)),g.push(t),l.push(s))}return Promise.all([Promise.all(o),Promise.all(n),Promise.all(a),Promise.all(g),Promise.all(l)]).then((function(e){const t=e[0],r=e[1],o=e[2],n=e[3],a=e[4],g=[];for(let A=0,e=t.length;A<e;A++){const e=t[A],i=r[A],l=o[A],c=n[A],h=a[A];if(void 0===e)continue;e.updateMatrix&&e.updateMatrix();const I=s._createAnimationTracks(e,i,l,c,h);if(I)for(let A=0;A<I.length;A++)g.push(I[A])}return new A.AnimationClip(i,void 0,g)}))}createNodeMesh(A){const e=this.json,t=this,s=e.nodes[A];return void 0===s.mesh?null:t.getDependency("mesh",s.mesh).then((function(A){const e=t._getNodeRef(t.meshCache,s.mesh,A);return void 0!==s.weights&&e.traverse((function(A){if(A.isMesh)for(let e=0,t=s.weights.length;e<t;e++)A.morphTargetInfluences[e]=s.weights[e]})),e}))}loadNode(A){const e=this,t=this.json.nodes[A],s=e._loadNodeShallow(A),r=[],i=t.children||[];for(let A=0,t=i.length;A<t;A++)r.push(e.getDependency("node",i[A]));const o=void 0===t.skin?Promise.resolve(null):e.getDependency("skin",t.skin);return Promise.all([s,Promise.all(r),o]).then((function(A){const e=A[0],t=A[1],s=A[2];null!==s&&e.traverse((function(A){A.isSkinnedMesh&&A.bind(s,sA)}));for(let A=0,s=t.length;A<s;A++)e.add(t[A]);return e}))}_loadNodeShallow(e){const t=this.json,s=this.extensions,r=this;if(void 0!==this.nodeCache[e])return this.nodeCache[e];const i=t.nodes[e],o=i.name?r.createUniqueName(i.name):"",n=[],a=r._invokeOne((function(A){return A.createNodeMesh&&A.createNodeMesh(e)}));return a&&n.push(a),void 0!==i.camera&&n.push(r.getDependency("camera",i.camera).then((function(A){return r._getNodeRef(r.cameraCache,i.camera,A)}))),r._invokeAll((function(A){return A.createNodeAttachment&&A.createNodeAttachment(e)})).forEach((function(A){n.push(A)})),this.nodeCache[e]=Promise.all(n).then((function(t){let n;if(n=!0===i.isBone?new A.Bone:t.length>1?new A.Group:1===t.length?t[0]:new A.Object3D,n!==t[0])for(let A=0,e=t.length;A<e;A++)n.add(t[A]);if(i.name&&(n.userData.name=i.name,n.name=o),Z(n,i),i.extensions&&X(s,n,i),void 0!==i.matrix){const e=new A.Matrix4;e.fromArray(i.matrix),n.applyMatrix4(e)}else void 0!==i.translation&&n.position.fromArray(i.translation),void 0!==i.rotation&&n.quaternion.fromArray(i.rotation),void 0!==i.scale&&n.scale.fromArray(i.scale);return r.associations.has(n)||r.associations.set(n,{}),r.associations.get(n).nodes=e,n})),this.nodeCache[e]}loadScene(e){const t=this.extensions,s=this.json.scenes[e],r=this,i=new A.Group;s.name&&(i.name=r.createUniqueName(s.name)),Z(i,s),s.extensions&&X(t,i,s);const o=s.nodes||[],n=[];for(let A=0,e=o.length;A<e;A++)n.push(r.getDependency("node",o[A]));return Promise.all(n).then((function(e){for(let A=0,t=e.length;A<t;A++)i.add(e[A]);return r.associations=(e=>{const t=new Map;for(const[e,s]of r.associations)(e instanceof A.Material||e instanceof A.Texture)&&t.set(e,s);return e.traverse((A=>{const e=r.associations.get(A);null!=e&&t.set(A,e)})),t})(i),i}))}_createAnimationTracks(e,t,s,r,i){const o=[],n=e.name?e.name:e.uuid,a=[];let g;switch(V[i.path]===V.weights?e.traverse((function(A){A.morphTargetInfluences&&a.push(A.name?A.name:A.uuid)})):a.push(n),V[i.path]){case V.weights:g=A.NumberKeyframeTrack;break;case V.rotation:g=A.QuaternionKeyframeTrack;break;case V.position:case V.scale:g=A.VectorKeyframeTrack;break;default:if(1===s.itemSize)g=A.NumberKeyframeTrack;else g=A.VectorKeyframeTrack}const l=void 0!==r.interpolation?j[r.interpolation]:A.InterpolateLinear,c=this._getArrayFromAccessor(s);for(let A=0,e=a.length;A<e;A++){const e=new g(a[A]+"."+V[i.path],t.array,c,l);"CUBICSPLINE"===r.interpolation&&this._createCubicSplineTrackInterpolant(e),o.push(e)}return o}_getArrayFromAccessor(A){let e=A.array;if(A.normalized){const A=tA(e.constructor),t=new Float32Array(e.length);for(let s=0,r=e.length;s<r;s++)t[s]=e[s]*A;e=t}return e}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(e){return new(this instanceof A.QuaternionKeyframeTrack?N:U)(this.times,this.values,this.getValueSize()/3,e)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function iA(e,t,s){const r=t.attributes,i=[];function o(A,t){return s.getDependency("accessor",A).then((function(A){e.setAttribute(t,A)}))}for(const A in r){const t=J[A]||A.toLowerCase();t in e.attributes||i.push(o(r[A],t))}if(void 0!==t.indices&&!e.index){const A=s.getDependency("accessor",t.indices).then((function(A){e.setIndex(A)}));i.push(A)}return Z(e,t),function(e,t,s){const r=t.attributes,i=new A.Box3;if(void 0===r.POSITION)return;{const e=s.json.accessors[r.POSITION],t=e.min,o=e.max;if(void 0===t||void 0===o)return void console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");if(i.set(new A.Vector3(t[0],t[1],t[2]),new A.Vector3(o[0],o[1],o[2])),e.normalized){const A=tA(H[e.componentType]);i.min.multiplyScalar(A),i.max.multiplyScalar(A)}}const o=t.targets;if(void 0!==o){const e=new A.Vector3,t=new A.Vector3;for(let A=0,r=o.length;A<r;A++){const r=o[A];if(void 0!==r.POSITION){const A=s.json.accessors[r.POSITION],i=A.min,o=A.max;if(void 0!==i&&void 0!==o){if(t.setX(Math.max(Math.abs(i[0]),Math.abs(o[0]))),t.setY(Math.max(Math.abs(i[1]),Math.abs(o[1]))),t.setZ(Math.max(Math.abs(i[2]),Math.abs(o[2]))),A.normalized){const e=tA(H[A.componentType]);t.multiplyScalar(e)}e.max(t)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}i.expandByVector(e)}e.boundingBox=i;const n=new A.Sphere;i.getCenter(n.center),n.radius=i.min.distanceTo(i.max)/2,e.boundingSphere=n}(e,t,s),Promise.all(i).then((function(){return void 0!==t.targets?function(A,e,t){let s=!1,r=!1,i=!1;for(let A=0,t=e.length;A<t;A++){const t=e[A];if(void 0!==t.POSITION&&(s=!0),void 0!==t.NORMAL&&(r=!0),void 0!==t.COLOR_0&&(i=!0),s&&r&&i)break}if(!s&&!r&&!i)return Promise.resolve(A);const o=[],n=[],a=[];for(let g=0,l=e.length;g<l;g++){const l=e[g];if(s){const e=void 0!==l.POSITION?t.getDependency("accessor",l.POSITION):A.attributes.position;o.push(e)}if(r){const e=void 0!==l.NORMAL?t.getDependency("accessor",l.NORMAL):A.attributes.normal;n.push(e)}if(i){const e=void 0!==l.COLOR_0?t.getDependency("accessor",l.COLOR_0):A.attributes.color;a.push(e)}}return Promise.all([Promise.all(o),Promise.all(n),Promise.all(a)]).then((function(e){const t=e[0],o=e[1],n=e[2];return s&&(A.morphAttributes.position=t),r&&(A.morphAttributes.normal=o),i&&(A.morphAttributes.color=n),A.morphTargetsRelative=!0,A}))}(e,t.targets,s):e}))}const oA=new WeakMap;class nA extends A.Loader{constructor(A){super(A),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(A){return this.decoderPath=A,this}setDecoderConfig(A){return this.decoderConfig=A,this}setWorkerLimit(A){return this.workerLimit=A,this}load(e,t,s,r){const i=new A.FileLoader(this.manager);i.setPath(this.path),i.setResponseType("arraybuffer"),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,(A=>{this.parse(A,t,r)}),s,r)}parse(e,t,s){this.decodeDracoFile(e,t,null,null,A.SRGBColorSpace).catch(s)}decodeDracoFile(e,t,s,r,i=A.LinearSRGBColorSpace){const o={attributeIDs:s||this.defaultAttributeIDs,attributeTypes:r||this.defaultAttributeTypes,useUniqueIDs:!!s,vertexColorSpace:i};return this.decodeGeometry(e,o).then(t)}decodeGeometry(A,e){const t=JSON.stringify(e);if(oA.has(A)){const e=oA.get(A);if(e.key===t)return e.promise;if(0===A.byteLength)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let s;const r=this.workerNextTaskID++,i=A.byteLength,o=this._getWorker(r,i).then((t=>(s=t,new Promise(((t,i)=>{s._callbacks[r]={resolve:t,reject:i},s.postMessage({type:"decode",id:r,taskConfig:e,buffer:A},[A])}))))).then((A=>this._createGeometry(A.geometry)));return o.catch((()=>!0)).then((()=>{s&&r&&this._releaseTask(s,r)})),oA.set(A,{key:t,promise:o}),o}_createGeometry(e){const t=new A.BufferGeometry;e.index&&t.setIndex(new A.BufferAttribute(e.index.array,1));for(let s=0;s<e.attributes.length;s++){const r=e.attributes[s],i=r.name,o=r.array,n=r.itemSize,a=new A.BufferAttribute(o,n);"color"===i&&(this._assignVertexColorSpace(a,r.vertexColorSpace),a.normalized=o instanceof Float32Array==!1),t.setAttribute(i,a)}return t}_assignVertexColorSpace(e,t){if(t!==A.SRGBColorSpace)return;const s=new A.Color;for(let A=0,t=e.count;A<t;A++)s.fromBufferAttribute(e,A).convertSRGBToLinear(),e.setXYZ(A,s.r,s.g,s.b)}_loadLibrary(e,t){const s=new A.FileLoader(this.manager);return s.setPath(this.decoderPath),s.setResponseType(t),s.setWithCredentials(this.withCredentials),new Promise(((A,t)=>{s.load(e,A,void 0,t)}))}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const A="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,e=[];return A?e.push(this._loadLibrary("draco_decoder.js","text")):(e.push(this._loadLibrary("draco_wasm_wrapper.js","text")),e.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(e).then((e=>{const t=e[0];A||(this.decoderConfig.wasmBinary=e[1]);const s=aA.toString(),r=["/* draco decoder */",t,"","/* worker */",s.substring(s.indexOf("{")+1,s.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([r]))})),this.decoderPending}_getWorker(A,e){return this._initDecoder().then((()=>{if(this.workerPool.length<this.workerLimit){const A=new Worker(this.workerSourceURL);A._callbacks={},A._taskCosts={},A._taskLoad=0,A.postMessage({type:"init",decoderConfig:this.decoderConfig}),A.onmessage=function(e){const t=e.data;switch(t.type){case"decode":A._callbacks[t.id].resolve(t);break;case"error":A._callbacks[t.id].reject(t);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+t.type+'"')}},this.workerPool.push(A)}else this.workerPool.sort((function(A,e){return A._taskLoad>e._taskLoad?-1:1}));const t=this.workerPool[this.workerPool.length-1];return t._taskCosts[A]=e,t._taskLoad+=e,t}))}_releaseTask(A,e){A._taskLoad-=A._taskCosts[e],delete A._callbacks[e],delete A._taskCosts[e]}debug(){console.log("Task load: ",this.workerPool.map((A=>A._taskLoad)))}dispose(){for(let A=0;A<this.workerPool.length;++A)this.workerPool[A].terminate();return this.workerPool.length=0,""!==this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),this}}function aA(){let A,e;function t(A,e,t,s,r,i){const o=i.num_components(),n=t.num_points()*o,a=n*r.BYTES_PER_ELEMENT,g=function(A,e){switch(e){case Float32Array:return A.DT_FLOAT32;case Int8Array:return A.DT_INT8;case Int16Array:return A.DT_INT16;case Int32Array:return A.DT_INT32;case Uint8Array:return A.DT_UINT8;case Uint16Array:return A.DT_UINT16;case Uint32Array:return A.DT_UINT32}}(A,r),l=A._malloc(a);e.GetAttributeDataArrayForAllPoints(t,i,g,a,l);const c=new r(A.HEAPF32.buffer,l,n).slice();return A._free(l),{name:s,array:c,itemSize:o}}onmessage=function(s){const r=s.data;switch(r.type){case"init":A=r.decoderConfig,e=new Promise((function(e){A.onModuleLoaded=function(A){e({draco:A})},DracoDecoderModule(A)}));break;case"decode":const s=r.buffer,i=r.taskConfig;e.then((A=>{const e=A.draco,o=new e.Decoder;try{const A=function(A,e,s,r){const i=r.attributeIDs,o=r.attributeTypes;let n,a;const g=e.GetEncodedGeometryType(s);if(g===A.TRIANGULAR_MESH)n=new A.Mesh,a=e.DecodeArrayToMesh(s,s.byteLength,n);else{if(g!==A.POINT_CLOUD)throw new Error("THREE.DRACOLoader: Unexpected geometry type.");n=new A.PointCloud,a=e.DecodeArrayToPointCloud(s,s.byteLength,n)}if(!a.ok()||0===n.ptr)throw new Error("THREE.DRACOLoader: Decoding failed: "+a.error_msg());const l={index:null,attributes:[]};for(const s in i){const a=self[o[s]];let g,c;if(r.useUniqueIDs)c=i[s],g=e.GetAttributeByUniqueId(n,c);else{if(c=e.GetAttributeId(n,A[i[s]]),-1===c)continue;g=e.GetAttribute(n,c)}const h=t(A,e,n,s,a,g);"color"===s&&(h.vertexColorSpace=r.vertexColorSpace),l.attributes.push(h)}g===A.TRIANGULAR_MESH&&(l.index=function(A,e,t){const s=t.num_faces(),r=3*s,i=4*r,o=A._malloc(i);e.GetTrianglesUInt32Array(t,i,o);const n=new Uint32Array(A.HEAPF32.buffer,o,r).slice();return A._free(o),{array:n,itemSize:1}}(A,e,n));return A.destroy(n),l}(e,o,new Int8Array(s),i),n=A.attributes.map((A=>A.array.buffer));A.index&&n.push(A.index.array.buffer),self.postMessage({type:"decode",id:r.id,geometry:A},n)}catch(A){console.error(A),self.postMessage({type:"error",id:r.id,error:A.message})}finally{e.destroy(o)}}))}}}class gA{constructor(A=4){this.pool=A,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0}_initWorker(A){if(!this.workers[A]){const e=this.workerCreator();e.addEventListener("message",this._onMessage.bind(this,A)),this.workers[A]=e}}_getIdleWorker(){for(let A=0;A<this.pool;A++)if(!(this.workerStatus&1<<A))return A;return-1}_onMessage(A,e){const t=this.workersResolve[A];if(t&&t(e),this.queue.length){const{resolve:e,msg:t,transfer:s}=this.queue.shift();this.workersResolve[A]=e,this.workers[A].postMessage(t,s)}else this.workerStatus^=1<<A}setWorkerCreator(A){this.workerCreator=A}setWorkerLimit(A){this.pool=A}postMessage(A,e){return new Promise((t=>{const s=this._getIdleWorker();-1!==s?(this._initWorker(s),this.workerStatus|=1<<s,this.workersResolve[s]=t,this.workers[s].postMessage(A,e)):this.queue.push({resolve:t,msg:A,transfer:e})}))}dispose(){this.workers.forEach((A=>A.terminate())),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}class lA{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 cA{constructor(A,e,t,s){this._dataView=new DataView(A.buffer,A.byteOffset+e,t),this._littleEndian=s,this._offset=0}_nextUint8(){const A=this._dataView.getUint8(this._offset);return this._offset+=1,A}_nextUint16(){const A=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,A}_nextUint32(){const A=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,A}_nextUint64(){const A=this._dataView.getUint32(this._offset,this._littleEndian)+2**32*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,A}_nextInt32(){const A=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,A}_skip(A){return this._offset+=A,this}_scan(A,e=0){const t=this._offset;let s=0;for(;this._dataView.getUint8(this._offset)!==e&&s<A;)s++,this._offset++;return s<A&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+t,s)}}new Uint8Array([0]);const hA=[171,75,84,88,32,50,48,187,13,10,26,10];function IA(A){return"undefined"!=typeof TextDecoder?(new TextDecoder).decode(A):Buffer.from(A).toString("utf8")}let CA,BA,dA;const EA={env:{emscripten_notify_memory_growth:function(A){dA=new Uint8Array(BA.exports.memory.buffer)}}};class uA{init(){return CA||(CA="undefined"!=typeof fetch?fetch("data:application/wasm;base64,"+QA).then((A=>A.arrayBuffer())).then((A=>WebAssembly.instantiate(A,EA))).then(this._init):WebAssembly.instantiate(Buffer.from(QA,"base64"),EA).then(this._init),CA)}_init(A){BA=A.instance,EA.env.emscripten_notify_memory_growth(0)}decode(A,e=0){if(!BA)throw new Error("ZSTDDecoder: Await .init() before decoding.");const t=A.byteLength,s=BA.exports.malloc(t);dA.set(A,s),e=e||Number(BA.exports.ZSTD_findDecompressedSize(s,t));const r=BA.exports.malloc(e),i=BA.exports.ZSTD_decompress(r,e,s,t),o=dA.slice(r,r+i);return BA.exports.free(s),BA.exports.free(r),o}}const QA="AGFzbQEAAAABpQEVYAF/AX9gAn9/AGADf39/AX9gBX9/f39/AX9gAX8AYAJ/fwF/YAR/f39/AX9gA39/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gAn9/AX5gAn5+AX5gAABgBX9/f39/AGAGf39/f39/AGAIf39/f39/f38AYAl/f39/f39/f38AYAABf2AIf39/f39/f38Bf2ANf39/f39/f39/f39/fwF/YAF/AX4CJwEDZW52H2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgABANpaAEFAAAFAgEFCwACAQABAgIFBQcAAwABDgsBAQcAEhMHAAUBDAQEAAANBwQCAgYCBAgDAwMDBgEACQkHBgICAAYGAgQUBwYGAwIGAAMCAQgBBwUGCgoEEQAEBAEIAwgDBQgDEA8IAAcABAUBcAECAgUEAQCAAgYJAX8BQaCgwAILB2AHBm1lbW9yeQIABm1hbGxvYwAoBGZyZWUAJgxaU1REX2lzRXJyb3IAaBlaU1REX2ZpbmREZWNvbXByZXNzZWRTaXplAFQPWlNURF9kZWNvbXByZXNzAEoGX3N0YXJ0ACQJBwEAQQELASQKussBaA8AIAAgACgCBCABajYCBAsZACAAKAIAIAAoAgRBH3F0QQAgAWtBH3F2CwgAIABBiH9LC34BBH9BAyEBIAAoAgQiA0EgTQRAIAAoAggiASAAKAIQTwRAIAAQDQ8LIAAoAgwiAiABRgRAQQFBAiADQSBJGw8LIAAgASABIAJrIANBA3YiBCABIARrIAJJIgEbIgJrIgQ2AgggACADIAJBA3RrNgIEIAAgBCgAADYCAAsgAQsUAQF/IAAgARACIQIgACABEAEgAgv3AQECfyACRQRAIABCADcCACAAQQA2AhAgAEIANwIIQbh/DwsgACABNgIMIAAgAUEEajYCECACQQRPBEAgACABIAJqIgFBfGoiAzYCCCAAIAMoAAA2AgAgAUF/ai0AACIBBEAgAEEIIAEQFGs2AgQgAg8LIABBADYCBEF/DwsgACABNgIIIAAgAS0AACIDNgIAIAJBfmoiBEEBTQRAIARBAWtFBEAgACABLQACQRB0IANyIgM2AgALIAAgAS0AAUEIdCADajYCAAsgASACakF/ai0AACIBRQRAIABBADYCBEFsDwsgAEEoIAEQFCACQQN0ams2AgQgAgsWACAAIAEpAAA3AAAgACABKQAINwAICy8BAX8gAUECdEGgHWooAgAgACgCAEEgIAEgACgCBGprQR9xdnEhAiAAIAEQASACCyEAIAFCz9bTvtLHq9lCfiAAfEIfiUKHla+vmLbem55/fgsdAQF/IAAoAgggACgCDEYEfyAAKAIEQSBGBUEACwuCBAEDfyACQYDAAE8EQCAAIAEgAhBnIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgA0F8aiIEIABJBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAsMACAAIAEpAAA3AAALQQECfyAAKAIIIgEgACgCEEkEQEEDDwsgACAAKAIEIgJBB3E2AgQgACABIAJBA3ZrIgE2AgggACABKAAANgIAQQALDAAgACABKAIANgAAC/cCAQJ/AkAgACABRg0AAkAgASACaiAASwRAIAAgAmoiBCABSw0BCyAAIAEgAhALDwsgACABc0EDcSEDAkACQCAAIAFJBEAgAwRAIAAhAwwDCyAAQQNxRQRAIAAhAwwCCyAAIQMDQCACRQ0EIAMgAS0AADoAACABQQFqIQEgAkF/aiECIANBAWoiA0EDcQ0ACwwBCwJAIAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigCACACaiAAQQZ2IgFBAnRBsB5qKAIAaiAAQSBxIgBFaiABRSAAQQV2cWoFQbh/CwsdACAAKAKQ4gEQWiAAQQA2AqDiASAAQgA3A5DiAQu1AwEFfyMAQZACayIKJABBuH8hBgJAIAVFDQAgBCwAACIIQf8BcSEHAkAgCEF/TARAIAdBgn9qQQF2IgggBU8NAkFsIQYgB0GBf2oiBUGAAk8NAiAEQQFqIQdBACEGA0AgBiAFTwRAIAUhBiAIIQcMAwUgACAGaiAHIAZBAXZqIgQtAABBBHY6AAAgACAGQQFyaiAELQAAQQ9xOgAAIAZBAmohBgwBCwAACwALIAcgBU8NASAAIARBAWogByAKEFMiBhADDQELIAYhBEEAIQYgAUEAQTQQECEJQQAhBQNAIAQgBkcEQCAAIAZqIggtAAAiAUELSwRAQWwhBgwDBSAJIAFBAnRqIgEgASgCAEEBajYCACAGQQFqIQZBASAILQAAdEEBdSAFaiEFDAILAAsLQWwhBiAFRQ0AIAUQFEEBaiIBQQxLDQAgAyABNgIAQQFBASABdCAFayIDEBQiAXQgA0cNACAAIARqIAFBAWoiADoAACAJIABBAnRqIgAgACgCAEEBajYCACAJKAIEIgBBAkkgAEEBcXINACACIARBAWo2AgAgB0EBaiEGCyAKQZACaiQAIAYLxhEBDH8jAEHwAGsiBSQAQWwhCwJAIANBCkkNACACLwAAIQogAi8AAiEJIAIvAAQhByAFQQhqIAQQDgJAIAMgByAJIApqakEGaiIMSQ0AIAUtAAohCCAFQdgAaiACQQZqIgIgChAGIgsQAw0BIAVBQGsgAiAKaiICIAkQBiILEAMNASAFQShqIAIgCWoiAiAHEAYiCxADDQEgBUEQaiACIAdqIAMgDGsQBiILEAMNASAAIAFqIg9BfWohECAEQQRqIQZBASELIAAgAUEDakECdiIDaiIMIANqIgIgA2oiDiEDIAIhBCAMIQcDQCALIAMgEElxBEAgACAGIAVB2ABqIAgQAkECdGoiCS8BADsAACAFQdgAaiAJLQACEAEgCS0AAyELIAcgBiAFQUBrIAgQAkECdGoiCS8BADsAACAFQUBrIAktAAIQASAJLQADIQogBCAGIAVBKGogCBACQQJ0aiIJLwEAOwAAIAVBKGogCS0AAhABIAktAAMhCSADIAYgBUEQaiAIEAJBAnRqIg0vAQA7AAAgBUEQaiANLQACEAEgDS0AAyENIAAgC2oiCyAGIAVB2ABqIAgQAkECdGoiAC8BADsAACAFQdgAaiAALQACEAEgAC0AAyEAIAcgCmoiCiAGIAVBQGsgCBACQQJ0aiIHLwEAOwAAIAVBQGsgBy0AAhABIActAAMhByAEIAlqIgkgBiAFQShqIAgQAkECdGoiBC8BADsAACAFQShqIAQtAAIQASAELQADIQQgAyANaiIDIAYgBUEQaiAIEAJBAnRqIg0vAQA7AAAgBUEQaiANLQACEAEgACALaiEAIAcgCmohByAEIAlqIQQgAyANLQADaiEDIAVB2ABqEA0gBUFAaxANciAFQShqEA1yIAVBEGoQDXJFIQsMAQsLIAQgDksgByACS3INAEFsIQsgACAMSw0BIAxBfWohCQNAQQAgACAJSSAFQdgAahAEGwRAIAAgBiAFQdgAaiAIEAJBAnRqIgovAQA7AAAgBUHYAGogCi0AAhABIAAgCi0AA2oiACAGIAVB2ABqIAgQAkECdGoiCi8BADsAACAFQdgAaiAKLQACEAEgACAKLQADaiEADAEFIAxBfmohCgNAIAVB2ABqEAQgACAKS3JFBEAgACAGIAVB2ABqIAgQAkECdGoiCS8BADsAACAFQdgAaiAJLQACEAEgACAJLQADaiEADAELCwNAIAAgCk0EQCAAIAYgBUHYAGogCBACQQJ0aiIJLwEAOwAAIAVB2ABqIAktAAIQASAAIAktAANqIQAMAQsLAkAgACAMTw0AIAAgBiAFQdgAaiAIEAIiAEECdGoiDC0AADoAACAMLQADQQFGBEAgBUHYAGogDC0AAhABDAELIAUoAlxBH0sNACAFQdgAaiAGIABBAnRqLQACEAEgBSgCXEEhSQ0AIAVBIDYCXAsgAkF9aiEMA0BBACAHIAxJIAVBQGsQBBsEQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiIAIAYgBUFAayAIEAJBAnRqIgcvAQA7AAAgBUFAayAHLQACEAEgACAHLQADaiEHDAEFIAJBfmohDANAIAVBQGsQBCAHIAxLckUEQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiEHDAELCwNAIAcgDE0EQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiEHDAELCwJAIAcgAk8NACAHIAYgBUFAayAIEAIiAEECdGoiAi0AADoAACACLQADQQFGBEAgBUFAayACLQACEAEMAQsgBSgCREEfSw0AIAVBQGsgBiAAQQJ0ai0AAhABIAUoAkRBIUkNACAFQSA2AkQLIA5BfWohAgNAQQAgBCACSSAFQShqEAQbBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2oiACAGIAVBKGogCBACQQJ0aiIELwEAOwAAIAVBKGogBC0AAhABIAAgBC0AA2ohBAwBBSAOQX5qIQIDQCAFQShqEAQgBCACS3JFBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2ohBAwBCwsDQCAEIAJNBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2ohBAwBCwsCQCAEIA5PDQAgBCAGIAVBKGogCBACIgBBAnRqIgItAAA6AAAgAi0AA0EBRgRAIAVBKGogAi0AAhABDAELIAUoAixBH0sNACAFQShqIAYgAEECdGotAAIQASAFKAIsQSFJDQAgBUEgNgIsCwNAQQAgAyAQSSAFQRBqEAQbBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2oiACAGIAVBEGogCBACQQJ0aiICLwEAOwAAIAVBEGogAi0AAhABIAAgAi0AA2ohAwwBBSAPQX5qIQIDQCAFQRBqEAQgAyACS3JFBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2ohAwwBCwsDQCADIAJNBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2ohAwwBCwsCQCADIA9PDQAgAyAGIAVBEGogCBACIgBBAnRqIgItAAA6AAAgAi0AA0EBRgRAIAVBEGogAi0AAhABDAELIAUoAhRBH0sNACAFQRBqIAYgAEECdGotAAIQASAFKAIUQSFJDQAgBUEgNgIUCyABQWwgBUHYAGoQCiAFQUBrEApxIAVBKGoQCnEgBUEQahAKcRshCwwJCwAACwALAAALAAsAAAsACwAACwALQWwhCwsgBUHwAGokACALC7UEAQ5/IwBBEGsiBiQAIAZBBGogABAOQVQhBQJAIARB3AtJDQAgBi0ABCEHIANB8ARqQQBB7AAQECEIIAdBDEsNACADQdwJaiIJIAggBkEIaiAGQQxqIAEgAhAxIhAQA0UEQCAGKAIMIgQgB0sNASADQdwFaiEPIANBpAVqIREgAEEEaiESIANBqAVqIQEgBCEFA0AgBSICQX9qIQUgCCACQQJ0aigCAEUNAAsgAkEBaiEOQQEhBQNAIAUgDk9FBEAgCCAFQQJ0IgtqKAIAIQwgASALaiAKNgIAIAVBAWohBSAKIAxqIQoMAQsLIAEgCjYCAEEAIQUgBigCCCELA0AgBSALRkUEQCABIAUgCWotAAAiDEECdGoiDSANKAIAIg1BAWo2AgAgDyANQQF0aiINIAw6AAEgDSAFOgAAIAVBAWohBQwBCwtBACEBIANBADYCqAUgBEF/cyAHaiEJQQEhBQNAIAUgDk9FBEAgCCAFQQJ0IgtqKAIAIQwgAyALaiABNgIAIAwgBSAJanQgAWohASAFQQFqIQUMAQsLIAcgBEEBaiIBIAJrIgRrQQFqIQgDQEEBIQUgBCAIT0UEQANAIAUgDk9FBEAgBUECdCIJIAMgBEE0bGpqIAMgCWooAgAgBHY2AgAgBUEBaiEFDAELCyAEQQFqIQQMAQsLIBIgByAPIAogESADIAIgARBkIAZBAToABSAGIAc6AAYgACAGKAIENgIACyAQIQULIAZBEGokACAFC8ENAQt/IwBB8ABrIgUkAEFsIQkCQCADQQpJDQAgAi8AACEKIAIvAAIhDCACLwAEIQYgBUEIaiAEEA4CQCADIAYgCiAMampBBmoiDUkNACAFLQAKIQcgBUHYAGogAkEGaiICIAoQBiIJEAMNASAFQUBrIAIgCmoiAiAMEAYiCRADDQEgBUEoaiACIAxqIgIgBhAGIgkQAw0BIAVBEGogAiAGaiADIA1rEAYiCRADDQEgACABaiIOQX1qIQ8gBEEEaiEGQQEhCSAAIAFBA2pBAnYiAmoiCiACaiIMIAJqIg0hAyAMIQQgCiECA0AgCSADIA9JcQRAIAYgBUHYAGogBxACQQF0aiIILQAAIQsgBUHYAGogCC0AARABIAAgCzoAACAGIAVBQGsgBxACQQF0aiIILQAAIQsgBUFAayAILQABEAEgAiALOgAAIAYgBUEoaiAHEAJBAXRqIggtAAAhCyAFQShqIAgtAAEQASAEIAs6AAAgBiAFQRBqIAcQAkEBdGoiCC0AACELIAVBEGogCC0AARABIAMgCzoAACAGIAVB2ABqIAcQAkEBdGoiCC0AACELIAVB2ABqIAgtAAEQASAAIAs6AAEgBiAFQUBrIAcQAkEBdGoiCC0AACELIAVBQGsgCC0AARABIAIgCzoAASAGIAVBKGogBxACQQF0aiIILQAAIQsgBUEoaiAILQABEAEgBCALOgABIAYgBUEQaiAHEAJBAXRqIggtAAAhCyAFQRBqIAgtAAEQASADIAs6AAEgA0ECaiEDIARBAmohBCACQQJqIQIgAEECaiEAIAkgBUHYAGoQDUVxIAVBQGsQDUVxIAVBKGoQDUVxIAVBEGoQDUVxIQkMAQsLIAQgDUsgAiAMS3INAEFsIQkgACAKSw0BIApBfWohCQNAIAVB2ABqEAQgACAJT3JFBEAgBiAFQdgAaiAHEAJBAXRqIggtAAAhCyAFQdgAaiAILQABEAEgACALOgAAIAYgBUHYAGogBxACQQF0aiIILQAAIQsgBUHYAGogCC0AARABIAAgCzoAASAAQQJqIQAMAQsLA0AgBUHYAGoQBCAAIApPckUEQCAGIAVB2ABqIAcQAkEBdGoiCS0AACEIIAVB2ABqIAktAAEQASAAIAg6AAAgAEEBaiEADAELCwNAIAAgCkkEQCAGIAVB2ABqIAcQAkEBdGoiCS0AACEIIAVB2ABqIAktAAEQASAAIAg6AAAgAEEBaiEADAELCyAMQX1qIQADQCAFQUBrEAQgAiAAT3JFBEAgBiAFQUBrIAcQAkEBdGoiCi0AACEJIAVBQGsgCi0AARABIAIgCToAACAGIAVBQGsgBxACQQF0aiIKLQAAIQkgBUFAayAKLQABEAEgAiAJOgABIAJBAmohAgwBCwsDQCAFQUBrEAQgAiAMT3JFBEAgBiAFQUBrIAcQAkEBdGoiAC0AACEKIAVBQGsgAC0AARABIAIgCjoAACACQQFqIQIMAQsLA0AgAiAMSQRAIAYgBUFAayAHEAJBAXRqIgAtAAAhCiAFQUBrIAAtAAEQASACIAo6AAAgAkEBaiECDAELCyANQX1qIQADQCAFQShqEAQgBCAAT3JFBEAgBiAFQShqIAcQAkEBdGoiAi0AACEKIAVBKGogAi0AARABIAQgCjoAACAGIAVBKGogBxACQQF0aiICLQAAIQogBUEoaiACLQABEAEgBCAKOgABIARBAmohBAwBCwsDQCAFQShqEAQgBCANT3JFBEAgBiAFQShqIAcQAkEBdGoiAC0AACECIAVBKGogAC0AARABIAQgAjoAACAEQQFqIQQMAQsLA0AgBCANSQRAIAYgBUEoaiAHEAJBAXRqIgAtAAAhAiAFQShqIAAtAAEQASAEIAI6AAAgBEEBaiEEDAELCwNAIAVBEGoQBCADIA9PckUEQCAGIAVBEGogBxACQQF0aiIALQAAIQIgBUEQaiAALQABEAEgAyACOgAAIAYgBUEQaiAHEAJBAXRqIgAtAAAhAiAFQRBqIAAtAAEQASADIAI6AAEgA0ECaiEDDAELCwNAIAVBEGoQBCADIA5PckUEQCAGIAVBEGogBxACQQF0aiIALQAAIQIgBUEQaiAALQABEAEgAyACOgAAIANBAWohAwwBCwsDQCADIA5JBEAgBiAFQRBqIAcQAkEBdGoiAC0AACECIAVBEGogAC0AARABIAMgAjoAACADQQFqIQMMAQsLIAFBbCAFQdgAahAKIAVBQGsQCnEgBUEoahAKcSAFQRBqEApxGyEJDAELQWwhCQsgBUHwAGokACAJC8oCAQR/IwBBIGsiBSQAIAUgBBAOIAUtAAIhByAFQQhqIAIgAxAGIgIQA0UEQCAEQQRqIQIgACABaiIDQX1qIQQDQCAFQQhqEAQgACAET3JFBEAgAiAFQQhqIAcQAkEBdGoiBi0AACEIIAVBCGogBi0AARABIAAgCDoAACACIAVBCGogBxACQQF0aiIGLQAAIQggBUEIaiAGLQABEAEgACAIOgABIABBAmohAAwBCwsDQCAFQQhqEAQgACADT3JFBEAgAiAFQQhqIAcQAkEBdGoiBC0AACEGIAVBCGogBC0AARABIAAgBjoAACAAQQFqIQAMAQsLA0AgACADT0UEQCACIAVBCGogBxACQQF0aiIELQAAIQYgBUEIaiAELQABEAEgACAGOgAAIABBAWohAAwBCwsgAUFsIAVBCGoQChshAgsgBUEgaiQAIAILtgMBCX8jAEEQayIGJAAgBkEANgIMIAZBADYCCEFUIQQCQAJAIANBQGsiDCADIAZBCGogBkEMaiABIAIQMSICEAMNACAGQQRqIAAQDiAGKAIMIgcgBi0ABEEBaksNASAAQQRqIQogBkEAOgAFIAYgBzoABiAAIAYoAgQ2AgAgB0EBaiEJQQEhBANAIAQgCUkEQCADIARBAnRqIgEoAgAhACABIAU2AgAgACAEQX9qdCAFaiEFIARBAWohBAwBCwsgB0EBaiEHQQAhBSAGKAIIIQkDQCAFIAlGDQEgAyAFIAxqLQAAIgRBAnRqIgBBASAEdEEBdSILIAAoAgAiAWoiADYCACAHIARrIQhBACEEAkAgC0EDTQRAA0AgBCALRg0CIAogASAEakEBdGoiACAIOgABIAAgBToAACAEQQFqIQQMAAALAAsDQCABIABPDQEgCiABQQF0aiIEIAg6AAEgBCAFOgAAIAQgCDoAAyAEIAU6AAIgBCAIOgAFIAQgBToABCAEIAg6AAcgBCAFOgAGIAFBBGohAQwAAAsACyAFQQFqIQUMAAALAAsgAiEECyAGQRBqJAAgBAutAQECfwJAQYQgKAIAIABHIAAoAgBBAXYiAyABa0F4aiICQXhxQQhHcgR/IAIFIAMQJ0UNASACQQhqC0EQSQ0AIAAgACgCACICQQFxIAAgAWpBD2pBeHEiASAAa0EBdHI2AgAgASAANgIEIAEgASgCAEEBcSAAIAJBAXZqIAFrIgJBAXRyNgIAQYQgIAEgAkH/////B3FqQQRqQYQgKAIAIABGGyABNgIAIAEQJQsLygIBBX8CQAJAAkAgAEEIIABBCEsbZ0EfcyAAaUEBR2oiAUEESSAAIAF2cg0AIAFBAnRB/B5qKAIAIgJFDQADQCACQXhqIgMoAgBBAXZBeGoiBSAATwRAIAIgBUEIIAVBCEsbZ0Efc0ECdEGAH2oiASgCAEYEQCABIAIoAgQ2AgALDAMLIARBHksNASAEQQFqIQQgAigCBCICDQALC0EAIQMgAUEgTw0BA0AgAUECdEGAH2ooAgAiAkUEQCABQR5LIQIgAUEBaiEBIAJFDQEMAwsLIAIgAkF4aiIDKAIAQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgEoAgBGBEAgASACKAIENgIACwsgAigCACIBBEAgASACKAIENgIECyACKAIEIgEEQCABIAIoAgA2AgALIAMgAygCAEEBcjYCACADIAAQNwsgAwvhCwINfwV+IwBB8ABrIgckACAHIAAoAvDhASIINgJcIAEgAmohDSAIIAAoAoDiAWohDwJAAkAgBUUEQCABIQQMAQsgACgCxOABIRAgACgCwOABIREgACgCvOABIQ4gAEEBNgKM4QFBACEIA0AgCEEDRwRAIAcgCEECdCICaiAAIAJqQazQAWooAgA2AkQgCEEBaiEIDAELC0FsIQwgB0EYaiADIAQQBhADDQEgB0EsaiAHQRhqIAAoAgAQEyAHQTRqIAdBGGogACgCCBATIAdBPGogB0EYaiAAKAIEEBMgDUFgaiESIAEhBEEAIQwDQCAHKAIwIAcoAixBA3RqKQIAIhRCEIinQf8BcSEIIAcoAkAgBygCPEEDdGopAgAiFUIQiKdB/wFxIQsgBygCOCAHKAI0QQN0aikCACIWQiCIpyEJIBVCIIghFyAUQiCIpyECAkAgFkIQiKdB/wFxIgNBAk8EQAJAIAZFIANBGUlyRQRAIAkgB0EYaiADQSAgBygCHGsiCiAKIANLGyIKEAUgAyAKayIDdGohCSAHQRhqEAQaIANFDQEgB0EYaiADEAUgCWohCQwBCyAHQRhqIAMQBSAJaiEJIAdBGGoQBBoLIAcpAkQhGCAHIAk2AkQgByAYNwNIDAELAkAgA0UEQCACBEAgBygCRCEJDAMLIAcoAkghCQwBCwJAAkAgB0EYakEBEAUgCSACRWpqIgNBA0YEQCAHKAJEQX9qIgMgA0VqIQkMAQsgA0ECdCAHaigCRCIJIAlFaiEJIANBAUYNAQsgByAHKAJINgJMCwsgByAHKAJENgJIIAcgCTYCRAsgF6chAyALBEAgB0EYaiALEAUgA2ohAwsgCCALakEUTwRAIAdBGGoQBBoLIAgEQCAHQRhqIAgQBSACaiECCyAHQRhqEAQaIAcgB0EYaiAUQhiIp0H/AXEQCCAUp0H//wNxajYCLCAHIAdBGGogFUIYiKdB/wFxEAggFadB//8DcWo2AjwgB0EYahAEGiAHIAdBGGogFkIYiKdB/wFxEAggFqdB//8DcWo2AjQgByACNgJgIAcoAlwhCiAHIAk2AmggByADNgJkAkACQAJAIAQgAiADaiILaiASSw0AIAIgCmoiEyAPSw0AIA0gBGsgC0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEEdCAAbiECCyAAQQh2IgEgAkEYbCIAQYwIaigCAGwgAEGICGooAgBqIgJBA3YgAmogAEGACGooAgAgAEGECGooAgAgAWxqSQs3ACAAIAMgBCAFQYAQEDMiBRADBEAgBQ8LIAUgBEkEfyABIAIgAyAFaiAEIAVrIAAQMgVBuH8LC78DAQN/IwBBIGsiBSQAIAVBCGogAiADEAYiAhADRQRAIAAgAWoiB0F9aiEGIAUgBBAOIARBBGohAiAFLQACIQMDQEEAIAAgBkkgBUEIahAEGwRAIAAgAiAFQQhqIAMQAkECdGoiBC8BADsAACAFQQhqIAQtAAIQASAAIAQtAANqIgQgAiAFQQhqIAMQAkECdGoiAC8BADsAACAFQQhqIAAtAAIQASAEIAAtAANqIQAMAQUgB0F+aiEEA0AgBUEIahAEIAAgBEtyRQRAIAAgAiAFQQhqIAMQAkECdGoiBi8BADsAACAFQQhqIAYtAAIQASAAIAYtAANqIQAMAQsLA0AgACAES0UEQCAAIAIgBUEIaiADEAJBAnRqIgYvAQA7AAAgBUEIaiAGLQACEAEgACAGLQADaiEADAELCwJAIAAgB08NACAAIAIgBUEIaiADEAIiA0ECdGoiAC0AADoAACAALQADQQFGBEAgBUEIaiAALQACEAEMAQsgBSgCDEEfSw0AIAVBCGogAiADQQJ0ai0AAhABIAUoAgxBIUkNACAFQSA2AgwLIAFBbCAFQQhqEAobIQILCwsgBUEgaiQAIAILkgIBBH8jAEFAaiIJJAAgCSADQTQQCyEDAkAgBEECSA0AIAMgBEECdGooAgAhCSADQTxqIAgQIyADQQE6AD8gAyACOgA+QQAhBCADKAI8IQoDQCAEIAlGDQEgACAEQQJ0aiAKNgEAIARBAWohBAwAAAsAC0EAIQkDQCAGIAlGRQRAIAMgBSAJQQF0aiIKLQABIgtBAnRqIgwoAgAhBCADQTxqIAotAABBCHQgCGpB//8DcRAjIANBAjoAPyADIAcgC2siCiACajoAPiAEQQEgASAKa3RqIQogAygCPCELA0AgACAEQQJ0aiALNgEAIARBAWoiBCAKSQ0ACyAMIAo2AgAgCUEBaiEJDAELCyADQUBrJAALowIBCX8jAEHQAGsiCSQAIAlBEGogBUE0EAsaIAcgBmshDyAHIAFrIRADQAJAIAMgCkcEQEEBIAEgByACIApBAXRqIgYtAAEiDGsiCGsiC3QhDSAGLQAAIQ4gCUEQaiAMQQJ0aiIMKAIAIQYgCyAPTwRAIAAgBkECdGogCyAIIAUgCEE0bGogCCAQaiIIQQEgCEEBShsiCCACIAQgCEECdGooAgAiCEEBdGogAyAIayAHIA4QYyAGIA1qIQgMAgsgCUEMaiAOECMgCUEBOgAPIAkgCDoADiAGIA1qIQggCSgCDCELA0AgBiAITw0CIAAgBkECdGogCzYBACAGQQFqIQYMAAALAAsgCUHQAGokAA8LIAwgCDYCACAKQQFqIQoMAAALAAs0ACAAIAMgBCAFEDYiBRADBEAgBQ8LIAUgBEkEfyABIAIgAyAFaiAEIAVrIAAQNAVBuH8LCyMAIAA/AEEQdGtB//8DakEQdkAAQX9GBEBBAA8LQQAQAEEBCzsBAX8gAgRAA0AgACABIAJBgCAgAkGAIEkbIgMQCyEAIAFBgCBqIQEgAEGAIGohACACIANrIgINAAsLCwYAIAAQAwsLqBUJAEGICAsNAQAAAAEAAAACAAAAAgBBoAgLswYBAAAAAQAAAAIAAAACAAAAJgAAAIIAAAAhBQAASgAAAGcIAAAmAAAAwAEAAIAAAABJBQAASgAAAL4IAAApAAAALAIAAIAAAABJBQAASgAAAL4IAAAvAAAAygIAAIAAAACKBQAASgAAAIQJAAA1AAAAcwMAAIAAAACdBQAASgAAAKAJAAA9AAAAgQMAAIAAAADrBQAASwAAAD4KAABEAAAAngMAAIAAAABNBgAASwAAAKoKAABLAAAAswMAAIAAAADBBgAATQAAAB8NAABNAAAAUwQAAIAAAAAjCAAAUQAAAKYPAABUAAAAmQQAAIAAAABLCQAAVwAAALESAABYAAAA2gQAAIAAAABvCQAAXQAAACMUAABUAAAARQUAAIAAAABUCgAAagAAAIwUAABqAAAArwUAAIAAAAB2CQAAfAAAAE4QAAB8AAAA0gIAAIAAAABjBwAAkQAAAJAHAACSAAAAAAAAAAEAAAABAAAABQAAAA0AAAAdAAAAPQAAAH0AAAD9AAAA/QEAAP0DAAD9BwAA/Q8AAP0fAAD9PwAA/X8AAP3/AAD9/wEA/f8DAP3/BwD9/w8A/f8fAP3/PwD9/38A/f//AP3//wH9//8D/f//B/3//w/9//8f/f//P/3//38AAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACUAAAAnAAAAKQAAACsAAAAvAAAAMwAAADsAAABDAAAAUwAAAGMAAACDAAAAAwEAAAMCAAADBAAAAwgAAAMQAAADIAAAA0AAAAOAAAADAAEAQeAPC1EBAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAEAAAABQAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAQcQQC4sBAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABIAAAAUAAAAFgAAABgAAAAcAAAAIAAAACgAAAAwAAAAQAAAAIAAAAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAAAAQBBkBIL5gQBAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAAAEAAAAEAAAACAAAAAAAAAABAAEBBgAAAAAAAAQAAAAAEAAABAAAAAAgAAAFAQAAAAAAAAUDAAAAAAAABQQAAAAAAAAFBgAAAAAAAAUHAAAAAAAABQkAAAAAAAAFCgAAAAAAAAUMAAAAAAAABg4AAAAAAAEFEAAAAAAAAQUUAAAAAAABBRYAAAAAAAIFHAAAAAAAAwUgAAAAAAAEBTAAAAAgAAYFQAAAAAAABwWAAAAAAAAIBgABAAAAAAoGAAQAAAAADAYAEAAAIAAABAAAAAAAAAAEAQAAAAAAAAUCAAAAIAAABQQAAAAAAAAFBQAAACAAAAUHAAAAAAAABQgAAAAgAAAFCgAAAAAAAAULAAAAAAAABg0AAAAgAAEFEAAAAAAAAQUSAAAAIAABBRYAAAAAAAIFGAAAACAAAwUgAAAAAAADBSgAAAAAAAYEQAAAABAABgRAAAAAIAAHBYAAAAAAAAkGAAIAAAAACwYACAAAMAAABAAAAAAQAAAEAQAAACAAAAUCAAAAIAAABQMAAAAgAAAFBQAAACAAAAUGAAAAIAAABQgAAAAgAAAFCQAAACAAAAULAAAAIAAABQwAAAAAAAAGDwAAACAAAQUSAAAAIAABBRQAAAAgAAIFGAAAACAAAgUcAAAAIAADBSgAAAAgAAQFMAAAAAAAEAYAAAEAAAAPBgCAAAAAAA4GAEAAAAAADQYAIABBgBcLhwIBAAEBBQAAAAAAAAUAAAAAAAAGBD0AAAAAAAkF/QEAAAAADwX9fwAAAAAVBf3/HwAAAAMFBQAAAAAABwR9AAAAAAAMBf0PAAAAABIF/f8DAAAAFwX9/38AAAAFBR0AAAAAAAgE/QAAAAAADgX9PwAAAAAUBf3/DwAAAAIFAQAAABAABwR9AAAAAAALBf0HAAAAABEF/f8BAAAAFgX9/z8AAAAEBQ0AAAAQAAgE/QAAAAAADQX9HwAAAAATBf3/BwAAAAEFAQAAABAABgQ9AAAAAAAKBf0DAAAAABAF/f8AAAAAHAX9//8PAAAbBf3//wcAABoF/f//AwAAGQX9//8BAAAYBf3//wBBkBkLhgQBAAEBBgAAAAAAAAYDAAAAAAAABAQAAAAgAAAFBQAAAAAAAAUGAAAAAAAABQgAAAAAAAAFCQAAAAAAAAULAAAAAAAABg0AAAAAAAAGEAAAAAAAAAYTAAAAAAAABhYAAAAAAAAGGQAAAAAAAAYcAAAAAAAABh8AAAAAAAAGIgAAAAAAAQYlAAAAAAABBikAAAAAAAIGLwAAAAAAAwY7AAAAAAAEBlMAAAAAAAcGgwAAAAAACQYDAgAAEAAABAQAAAAAAAAEBQAAACAAAAUGAAAAAAAABQcAAAAgAAAFCQAAAAAAAAUKAAAAAAAABgwAAAAAAAAGDwAAAAAAAAYSAAAAAAAABhUAAAAAAAAGGAAAAAAAAAYbAAAAAAAABh4AAAAAAAAGIQAAAAAAAQYjAAAAAAABBicAAAAAAAIGKwAAAAAAAwYzAAAAAAAEBkMAAAAAAAUGYwAAAAAACAYDAQAAIAAABAQAAAAwAAAEBAAAABAAAAQFAAAAIAAABQcAAAAgAAAFCAAAACAAAAUKAAAAIAAABQsAAAAAAAAGDgAAAAAAAAYRAAAAAAAABhQAAAAAAAAGFwAAAAAAAAYaAAAAAAAABh0AAAAAAAAGIAAAAAAAEAYDAAEAAAAPBgOAAAAAAA4GA0AAAAAADQYDIAAAAAAMBgMQAAAAAAsGAwgAAAAACgYDBABBpB0L2QEBAAAAAwAAAAcAAAAPAAAAHwAAAD8AAAB/AAAA/wAAAP8BAAD/AwAA/wcAAP8PAAD/HwAA/z8AAP9/AAD//wAA//8BAP//AwD//wcA//8PAP//HwD//z8A//9/AP///wD///8B////A////wf///8P////H////z////9/AAAAAAEAAAACAAAABAAAAAAAAAACAAAABAAAAAgAAAAAAAAAAQAAAAIAAAABAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAcAAAAIAAAACQAAAAoAAAALAEGgIAsDwBBQ",fA=new WeakMap;let pA,mA=0;class yA extends A.Loader{constructor(A){super(A),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new gA,this.workerSourceURL="",this.workerConfig=null,"undefined"!=typeof MSC_TRANSCODER&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(A){return this.transcoderPath=A,this}setWorkerLimit(A){return this.workerPool.setWorkerLimit(A),this}detectSupport(A){return!0===A.isWebGPURenderer?this.workerConfig={astcSupported:A.hasFeature("texture-compression-astc"),etc1Supported:!1,etc2Supported:A.hasFeature("texture-compression-etc2"),dxtSupported:A.hasFeature("texture-compression-bc"),bptcSupported:!1,pvrtcSupported:!1}:(this.workerConfig={astcSupported:A.extensions.has("WEBGL_compressed_texture_astc"),etc1Supported:A.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:A.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:A.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:A.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:A.extensions.has("WEBGL_compressed_texture_pvrtc")||A.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},A.capabilities.isWebGL2&&(this.workerConfig.etc1Supported=!1)),this}init(){if(!this.transcoderPending){const e=new A.FileLoader(this.manager);e.setPath(this.transcoderPath),e.setWithCredentials(this.withCredentials);const t=e.loadAsync("basis_transcoder.js"),s=new A.FileLoader(this.manager);s.setPath(this.transcoderPath),s.setResponseType("arraybuffer"),s.setWithCredentials(this.withCredentials);const r=s.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([t,r]).then((([A,e])=>{const t=yA.BasisWorker.toString(),s=["/* constants */","let _EngineFormat = "+JSON.stringify(yA.EngineFormat),"let _TranscoderFormat = "+JSON.stringify(yA.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(yA.BasisFormat),"/* basis_transcoder.js */",A,"/* worker */",t.substring(t.indexOf("{")+1,t.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([s])),this.transcoderBinary=e,this.workerPool.setWorkerCreator((()=>{const A=new Worker(this.workerSourceURL),e=this.transcoderBinary.slice(0);return A.postMessage({type:"init",config:this.workerConfig,transcoderBinary:e},[e]),A}))})),mA>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),mA++}return this.transcoderPending}load(e,t,s,r){if(null===this.workerConfig)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const i=new A.FileLoader(this.manager);i.setResponseType("arraybuffer"),i.setWithCredentials(this.withCredentials),i.load(e,(A=>{if(fA.has(A)){return fA.get(A).promise.then(t).catch(r)}this._createTexture(A).then((A=>t?t(A):null)).catch(r)}),s,r)}_createTextureFrom(e,t){const{faces:s,width:r,height:i,format:o,type:n,error:a,dfdTransferFn:g,dfdFlags:l}=e;if("error"===n)return Promise.reject(a);let c;if(6===t.faceCount)c=new A.CompressedCubeTexture(s,o,A.UnsignedByteType);else{const e=s[0].mipmaps;c=t.layerCount>1?new A.CompressedArrayTexture(e,r,i,t.layerCount,o,A.UnsignedByteType):new A.CompressedTexture(e,r,i,o,A.UnsignedByteType)}return c.minFilter=1===s[0].mipmaps.length?A.LinearFilter:A.LinearMipmapLinearFilter,c.magFilter=A.LinearFilter,c.generateMipmaps=!1,c.needsUpdate=!0,c.colorSpace=2===g?A.SRGBColorSpace:A.NoColorSpace,c.premultiplyAlpha=!!(1&l),c}async _createTexture(A,e={}){const t=function(A){const e=new Uint8Array(A.buffer,A.byteOffset,hA.length);if(e[0]!==hA[0]||e[1]!==hA[1]||e[2]!==hA[2]||e[3]!==hA[3]||e[4]!==hA[4]||e[5]!==hA[5]||e[6]!==hA[6]||e[7]!==hA[7]||e[8]!==hA[8]||e[9]!==hA[9]||e[10]!==hA[10]||e[11]!==hA[11])throw new Error("Missing KTX 2.0 identifier.");const t=new lA,s=17*Uint32Array.BYTES_PER_ELEMENT,r=new cA(A,hA.length,s,!0);t.vkFormat=r._nextUint32(),t.typeSize=r._nextUint32(),t.pixelWidth=r._nextUint32(),t.pixelHeight=r._nextUint32(),t.pixelDepth=r._nextUint32(),t.layerCount=r._nextUint32(),t.faceCount=r._nextUint32();const i=r._nextUint32();t.supercompressionScheme=r._nextUint32();const o=r._nextUint32(),n=r._nextUint32(),a=r._nextUint32(),g=r._nextUint32(),l=r._nextUint64(),c=r._nextUint64(),h=new cA(A,hA.length+s,3*i*8,!0);for(let e=0;e<i;e++)t.levels.push({levelData:new Uint8Array(A.buffer,A.byteOffset+h._nextUint64(),h._nextUint64()),uncompressedByteLength:h._nextUint64()});const I=new cA(A,o,n,!0),C={vendorId:I._skip(4)._nextUint16(),descriptorType:I._nextUint16(),versionNumber:I._nextUint16(),descriptorBlockSize:I._nextUint16(),colorModel:I._nextUint8(),colorPrimaries:I._nextUint8(),transferFunction:I._nextUint8(),flags:I._nextUint8(),texelBlockDimension:[I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8()],bytesPlane:[I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8()],samples:[]},B=(C.descriptorBlockSize/4-6)/4;for(let A=0;A<B;A++){const e={bitOffset:I._nextUint16(),bitLength:I._nextUint8(),channelType:I._nextUint8(),samplePosition:[I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8()],sampleLower:-1/0,sampleUpper:1/0};64&e.channelType?(e.sampleLower=I._nextInt32(),e.sampleUpper=I._nextInt32()):(e.sampleLower=I._nextUint32(),e.sampleUpper=I._nextUint32()),C.samples[A]=e}t.dataFormatDescriptor.length=0,t.dataFormatDescriptor.push(C);const d=new cA(A,a,g,!0);for(;d._offset<g;){const A=d._nextUint32(),e=d._scan(A),s=IA(e),r=d._scan(A-e.byteLength);t.keyValue[s]=s.match(/^ktx/i)?IA(r):r,d._offset%4&&d._skip(4-d._offset%4)}if(c<=0)return t;const E=new cA(A,l,c,!0),u=E._nextUint16(),Q=E._nextUint16(),f=E._nextUint32(),p=E._nextUint32(),m=E._nextUint32(),y=E._nextUint32(),w=[];for(let A=0;A<i;A++)w.push({imageFlags:E._nextUint32(),rgbSliceByteOffset:E._nextUint32(),rgbSliceByteLength:E._nextUint32(),alphaSliceByteOffset:E._nextUint32(),alphaSliceByteLength:E._nextUint32()});const D=l+E._offset,x=D+f,R=x+p,S=R+m,T=new Uint8Array(A.buffer,A.byteOffset+D,f),M=new Uint8Array(A.buffer,A.byteOffset+x,p),b=new Uint8Array(A.buffer,A.byteOffset+R,m),L=new Uint8Array(A.buffer,A.byteOffset+S,y);return t.globalData={endpointCount:u,selectorCount:Q,imageDescs:w,endpointsData:T,selectorsData:M,tablesData:b,extendedData:L},t}(new Uint8Array(A));if(0!==t.vkFormat){const A=[],e=[];for(let s=0;s<t.levels.length;s++)e.push(RA(t,s).then((function(e){A[s]=e})));await Promise.all(e);const s=A[0];return s.mipmaps=A.map((A=>({data:A.source.data,width:A.source.data.width,height:A.source.data.height,depth:A.source.data.depth}))),s}const s=e,r=this.init().then((()=>this.workerPool.postMessage({type:"transcode",buffer:A,taskConfig:s},[A]))).then((A=>this._createTextureFrom(A.data,t)));return fA.set(A,{promise:r}),r}dispose(){return this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),mA--,this}}yA.BasisFormat={ETC1S:0,UASTC_4x4:1},yA.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},yA.EngineFormat={RGBAFormat:A.RGBAFormat,RGBA_ASTC_4x4_Format:A.RGBA_ASTC_4x4_Format,RGBA_BPTC_Format:A.RGBA_BPTC_Format,RGBA_ETC2_EAC_Format:A.RGBA_ETC2_EAC_Format,RGBA_PVRTC_4BPPV1_Format:A.RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT5_Format:A.RGBA_S3TC_DXT5_Format,RGB_ETC1_Format:A.RGB_ETC1_Format,RGB_ETC2_Format:A.RGB_ETC2_Format,RGB_PVRTC_4BPPV1_Format:A.RGB_PVRTC_4BPPV1_Format,RGB_S3TC_DXT1_Format:A.RGB_S3TC_DXT1_Format},yA.BasisWorker=function(){let A,e,t;const s=_EngineFormat,r=_TranscoderFormat,i=_BasisFormat;self.addEventListener("message",(function(o){const c=o.data;switch(c.type){case"init":A=c.config,h=c.transcoderBinary,e=new Promise((A=>{t={wasmBinary:h,onRuntimeInitialized:A},BASIS(t)})).then((()=>{t.initializeBasis(),void 0===t.KTX2File&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")}));break;case"transcode":e.then((()=>{try{const{faces:e,buffers:o,width:h,height:I,hasAlpha:C,format:B,dfdTransferFn:d,dfdFlags:E}=function(e){const o=new t.KTX2File(new Uint8Array(e));function c(){o.close(),o.delete()}if(!o.isValid())throw c(),new Error("THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file");const h=o.isUASTC()?i.UASTC_4x4:i.ETC1S,I=o.getWidth(),C=o.getHeight(),B=o.getLayers()||1,d=o.getLevels(),E=o.getFaces(),u=o.getHasAlpha(),Q=o.getDFDTransferFunc(),f=o.getDFDFlags(),{transcoderFormat:p,engineFormat:m}=function(e,t,o,l){let c,h;const I=e===i.ETC1S?n:a;for(let s=0;s<I.length;s++){const r=I[s];if(A[r.if]&&(r.basisFormat.includes(e)&&!(l&&r.transcoderFormat.length<2)&&(!r.needsPowerOfTwo||g(t)&&g(o))))return c=r.transcoderFormat[l?1:0],h=r.engineFormat[l?1:0],{transcoderFormat:c,engineFormat:h}}return console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."),c=r.RGBA32,h=s.RGBAFormat,{transcoderFormat:c,engineFormat:h}}(h,I,C,u);if(!I||!C||!d)throw c(),new Error("THREE.KTX2Loader:\tInvalid texture");if(!o.startTranscoding())throw c(),new Error("THREE.KTX2Loader: .startTranscoding failed");const y=[],w=[];for(let A=0;A<E;A++){const e=[];for(let t=0;t<d;t++){const s=[];let r,i;for(let e=0;e<B;e++){const n=o.getImageLevelInfo(t,e,A);0!==A||0!==t||0!==e||n.origWidth%4==0&&n.origHeight%4==0||console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),d>1?(r=n.origWidth,i=n.origHeight):(r=n.width,i=n.height);const a=new Uint8Array(o.getImageTranscodedSizeInBytes(t,e,0,p));if(!o.transcodeImage(a,t,e,A,p,0,-1,-1))throw c(),new Error("THREE.KTX2Loader: .transcodeImage failed.");s.push(a)}const n=l(s);e.push({data:n,width:r,height:i}),w.push(n.buffer)}y.push({mipmaps:e,width:I,height:C,format:m})}return c(),{faces:y,buffers:w,width:I,height:C,hasAlpha:u,format:m,dfdTransferFn:Q,dfdFlags:f}}(c.buffer);self.postMessage({type:"transcode",id:c.id,faces:e,width:h,height:I,hasAlpha:C,format:B,dfdTransferFn:d,dfdFlags:E},o)}catch(A){console.error(A),self.postMessage({type:"error",id:c.id,error:A.message})}}))}var h}));const o=[{if:"astcSupported",basisFormat:[i.UASTC_4x4],transcoderFormat:[r.ASTC_4x4,r.ASTC_4x4],engineFormat:[s.RGBA_ASTC_4x4_Format,s.RGBA_ASTC_4x4_Format],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[r.BC7_M5,r.BC7_M5],engineFormat:[s.RGBA_BPTC_Format,s.RGBA_BPTC_Format],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[r.BC1,r.BC3],engineFormat:[s.RGB_S3TC_DXT1_Format,s.RGBA_S3TC_DXT5_Format],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[r.ETC1,r.ETC2],engineFormat:[s.RGB_ETC2_Format,s.RGBA_ETC2_EAC_Format],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[r.ETC1],engineFormat:[s.RGB_ETC1_Format],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[r.PVRTC1_4_RGB,r.PVRTC1_4_RGBA],engineFormat:[s.RGB_PVRTC_4BPPV1_Format,s.RGBA_PVRTC_4BPPV1_Format],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0}],n=o.sort((function(A,e){return A.priorityETC1S-e.priorityETC1S})),a=o.sort((function(A,e){return A.priorityUASTC-e.priorityUASTC}));function g(A){return A<=2||0==(A&A-1)&&0!==A}function l(A){if(1===A.length)return A[0];let e=0;for(let t=0;t<A.length;t++){e+=A[t].byteLength}const t=new Uint8Array(e);let s=0;for(let e=0;e<A.length;e++){const r=A[e];t.set(r,s),s+=r.byteLength}return t}};const wA={109:A.RGBAFormat,97:A.RGBAFormat,37:A.RGBAFormat,43:A.RGBAFormat,103:A.RGFormat,83:A.RGFormat,16:A.RGFormat,22:A.RGFormat,100:A.RedFormat,76:A.RedFormat,15:A.RedFormat,9:A.RedFormat},DA={109:A.FloatType,97:A.HalfFloatType,37:A.UnsignedByteType,43:A.UnsignedByteType,103:A.FloatType,83:A.HalfFloatType,16:A.UnsignedByteType,22:A.UnsignedByteType,100:A.FloatType,76:A.HalfFloatType,15:A.UnsignedByteType,9:A.UnsignedByteType},xA={43:A.SRGBColorSpace,22:A.SRGBColorSpace,15:A.SRGBColorSpace};async function RA(e,t=0){const{vkFormat:s}=e,r=Math.max(1,e.pixelWidth>>t),i=Math.max(1,e.pixelHeight>>t),o=Math.max(1,e.pixelDepth>>t);if(void 0===wA[s])throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");const n=e.levels[t];let a,g;if(0===e.supercompressionScheme)a=n.levelData;else{if(2!==e.supercompressionScheme)throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");pA||(pA=new Promise((async A=>{const e=new uA;await e.init(),A(e)}))),a=(await pA).decode(n.levelData,n.uncompressedByteLength)}g=DA[s]===A.FloatType?new Float32Array(a.buffer,a.byteOffset,a.byteLength/Float32Array.BYTES_PER_ELEMENT):DA[s]===A.HalfFloatType?new Uint16Array(a.buffer,a.byteOffset,a.byteLength/Uint16Array.BYTES_PER_ELEMENT):a;const l=0===o?new A.DataTexture(g,r,i):new A.Data3DTexture(g,r,i,o);return l.type=DA[s],l.format=wA[s],l.colorSpace=xA[s]||A.NoColorSpace,l.needsUpdate=!0,Promise.resolve(l)}const SA=new TextDecoder;class TA{constructor(A,e,t,s){this.buffer=A,this.binOffset=e+t,this.binLength=s;let r=null;if(0!==t)try{const s=new Uint8Array(A,e,t);r=JSON.parse(SA.decode(s))}catch(A){r={}}else r={};this.header=r}getKeys(){return Object.keys(this.header)}getData(A,e){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;const r=this.header;if(!(A in r))return null;const i=r[A];if(i instanceof Object){if(Array.isArray(i))return i;{const{buffer:r,binOffset:o,binLength:n}=this,a=i.byteOffset||0,g=i.type||s,l=i.componentType||t;if("type"in i&&s&&i.type!==s)throw new Error("FeatureTable: Specified type does not match expected type.");let c,h;switch(g){case"SCALAR":c=1;break;case"VEC2":c=2;break;case"VEC3":c=3;break;case"VEC4":c=4;break;default:throw new Error('FeatureTable : Feature type not provided for "'.concat(A,'".'))}const I=o+a,C=e*c;switch(l){case"BYTE":h=new Int8Array(r,I,C);break;case"UNSIGNED_BYTE":h=new Uint8Array(r,I,C);break;case"SHORT":h=new Int16Array(r,I,C);break;case"UNSIGNED_SHORT":h=new Uint16Array(r,I,C);break;case"INT":h=new Int32Array(r,I,C);break;case"UNSIGNED_INT":h=new Uint32Array(r,I,C);break;case"FLOAT":h=new Float32Array(r,I,C);break;case"DOUBLE":h=new Float64Array(r,I,C);break;default:throw new Error('FeatureTable : Feature component type not provided for "'.concat(A,'".'))}if(I+C*h.BYTES_PER_ELEMENT>o+n)throw new Error("FeatureTable: Feature data read outside binary body length.");return h}}return i}}class MA extends TA{constructor(A,e,t,s,r){super(A,t,s,r),this.batchSize=e}getData(A){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return super.getData(A,this.batchSize,e,t)}}function bA(A,e,t){return e=function(A){var e=function(A,e){if("object"!=typeof A||!A)return A;var t=A[Symbol.toPrimitive];if(void 0!==t){var s=t.call(A,e||"default");if("object"!=typeof s)return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}(A,"string");return"symbol"==typeof e?e:String(e)}(e),e in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const LA=new A.Matrix4;LA.set(1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1);const FA="https://www.gstatic.com/draco/versioned/decoders/1.4.3/",GA="https://storage.googleapis.com/ogc-3d-tiles/basis/",kA="draco-decoders/",UA="ktx2-decoders/";class _A{constructor(e){bA(this,"checkLoaderInitialized",(async()=>new Promise((A=>{const e=setInterval((()=>{this.gltfLoader.dracoLoader&&this.gltfLoader.ktx2Loader&&(clearInterval(e),A())}),10)})))),this.gltfLoader=new l,this.tempMatrix=new A.Matrix4;const t=new nA,s=new yA;async function r(A){return fetch(A,{method:"HEAD"}).then((A=>A.ok)).catch((A=>!1))}r(kA+"draco_decoder.wasm").then((A=>(A?t.setDecoderPath(kA):(console.log("no local draco decoder found in "+kA+", fetching online at "+FA),t.setDecoderPath(FA)),r(UA+"basis_transcoder.wasm")))).then((A=>{A?s.setTranscoderPath(UA).detectSupport(e):(console.log("no local ktx2 decoder found in "+UA+", fetching online at "+GA),s.setTranscoderPath(GA).detectSupport(e))})).then((()=>{this.gltfLoader.setDRACOLoader(t),this.gltfLoader.setKTX2Loader(s)}))}parseB3DM(A,e,t,s){const r=new DataView(A),i=String.fromCharCode(r.getUint8(0))+String.fromCharCode(r.getUint8(1))+String.fromCharCode(r.getUint8(2))+String.fromCharCode(r.getUint8(3));console.assert("b3dm"===i);const o=r.getUint32(8,!0);console.assert(o===A.byteLength);const n=r.getUint32(12,!0),a=r.getUint32(16,!0),g=r.getUint32(20,!0),l=r.getUint32(24,!0),c=new TA(A,28,n,a),h=28+n+a,I=(new MA(A,c.getData("BATCH_LENGTH"),h,g,l),h+g+l),C=new Uint8Array(A,I,o-I).slice().buffer;return new Promise((async(A,r)=>{await this.checkLoaderInitialized(),this.gltfLoader.parse(C,null,(r=>{const i=c.getData("RTC_CENTER");i?(this.tempMatrix.makeTranslation(i[0],i[1],i[2]),r.scene.applyMatrix4(this.tempMatrix)):r.userData.gltfExtensions&&r.userData.gltfExtensions.CESIUM_RTC&&(this.tempMatrix.makeTranslation(r.userData.gltfExtensions.CESIUM_RTC.center[0],r.userData.gltfExtensions.CESIUM_RTC.center[1],r.userData.gltfExtensions.CESIUM_RTC.center[2]),r.scene.applyMatrix4(this.tempMatrix)),t&&r.scene.applyMatrix4(LA),r.scene.asset=r.asset,r.scene.traverse((A=>{A.isMesh&&(s&&A.applyMatrix4(LA),e&&e(A))})),A(r.scene)}),(A=>{console.error(A)}))}))}parseB3DMInstanced(e,t,s,r,i){return this.parseB3DM(e,t,r,i).then((e=>{let t,r=[],i=[];e.updateWorldMatrix(!1,!0),e.traverse((A=>{A.isMesh&&(A.geometry.applyMatrix4(A.matrixWorld),r.push(A.geometry),i.push(A.material))}));let o=function(e){let t=new Set;e.forEach((A=>{for(let e in A.attributes)t.add(e)})),e.forEach((e=>{t.forEach((t=>{if(!e.attributes[t]){const s=function(A){switch(A){case"position":case"normal":case"color":return 3;case"uv":case"uv2":return 2;default:throw new Error("Unknown attribute ".concat(A))}}(t),r=new Float32Array(s*e.getAttribute("position").count).fill(0);e.setAttribute(t,new A.BufferAttribute(r,s))}}))}));let s=n(e,!0);return s}(r);return t=new A.InstancedMesh(o,i,s),t.baseMatrix=(new A.Matrix4).identity(),t}))}}async function NA(A){const e=A.split("?")[0].split(".").pop(),t=await fetch(A);if(!t.ok)throw new Error("Failed to fetch ".concat(A,": ").concat(t.statusText));if("json"===e){const e=await t.json();return handleJSONSubtree(e,vA(A))}if("subtree"===e){return async function(A,e){const t=new DataView(A),s=t.getBigUint64(8,!0),r=t.getBigUint64(16,!0),i=24,o=i+Number(s),n=o+(8-o%8)%8,a=n+Number(r),g=A.slice(i,o),l=(new TextDecoder).decode(g).trim(),c=JSON.parse(l);if(!c.buffers)throw new Error("subtree has no buffers");const h=c.buffers.map((async t=>{if(t.uri){const A=new URL(t.uri,e).href,s=await fetch(A);if(!s.ok)throw new Error("Failed to fetch binary file ".concat(A,": ").concat(s.statusText));return new Uint8Array(await s.arrayBuffer())}return new Uint8Array(A.slice(n,a))})),I=await Promise.all(h);return HA(c,I)}(await t.arrayBuffer(),vA(A))}throw new Error("Unsupported file extension: ".concat(e))}function vA(A){const e=A.split("?")[0];return e.substring(0,e.lastIndexOf("/")+1)}function HA(A,e){function t(t,s){if(!t)throw new Error("incomplete json subtree");if(t.constant){if(0==t.constant)return!1;if(1==t.constant)return!0}if(null==t.bitstream)throw new Error('json subtree "tileAvailability" does not specify a bitstream');if(!A.bufferViews||!A.bufferViews[t.bitstream])throw new Error('json subtree "bufferViews" does not specify a bitstream');const r=A.bufferViews[t.bitstream];return function(A,e,t){const s=e+Math.floor(t/8),r=t%8;return A[s]>>r&!0}(e[r.buffer],r.byteOffset,s)}return{isTileAvailable:function(e){let s=0;return s=null==e.z?PA(e.x,e.y,e.level):JA(e.x,e.y,e.z,e.level),t(A.tileAvailability,s)},isContentAvailable:function(e){let s=0;s=null==e.z?PA(e.x,e.y,e.level):JA(e.x,e.y,e.z,e.level);const r=[];return A.contentAvailability.forEach((A=>{r.push(t(A,s))})),r},isChildSubtreeAvailable:function(e){let s=0;return s=null==e.z?PA(e.x,e.y):JA(e.x,e.y,e.z),t(A.childSubtreeAvailability,s)}}}function qA(A){return A=1431655765&((A=858993459&((A=252645135&((A=16711935&((A&=65535)^A<<8))^A<<4))^A<<2))^A<<1)}function PA(A,e,t){let s=0;return t&&(s=(Math.pow(4,t)-1)/3),s+(qA(A)|qA(e)<<1)}function OA(A){return A=153391689&((A=51130563&((A=50393103&((A=4278190335&((A&=1023)^A<<16))^A<<8))^A<<4))^A<<2)}function JA(A,e,t,s){let r=0;return s&&(r=(Math.pow(8,s)-1)/7),r+(OA(A)|OA(e)<<1|OA(t)<<2)}const VA=new Map;async function jA(A,e){if(!A.root||!A.root.implicitTiling)return A;if(!A.root.content&&!A.root.contents)throw new Error("implicit tiling requires a Template URI");let t=!0;A.root.implicitTiling.subdivisionScheme&&(t="QUADTREE"===A.root.implicitTiling.subdivisionScheme.toUpperCase());let s="";A.root.implicitTiling.subtrees&&(A.root.implicitTiling.subtrees.uri?s=A.root.implicitTiling.subtrees.uri:A.root.implicitTiling.subtrees.url&&(s=A.root.implicitTiling.subtrees.url));let r=[];A.root.content?A.root.content.uri?r.push(A.root.content.uri):A.root.content.url&&r.push(A.root.content.url):A.root.contents&&A.root.contents.forEach((A=>{A.uri?r.push(A.uri):A.url&&r.push(A.url)}));const i=function(A){const e=A.split("?")[0];return e.substring(0,e.lastIndexOf("/")+1)}(e);let o;t&&(o=s.replace("{level}",0).replace("{x}",0).replace("{y}",0)),t||(o=s.replace("{level}",0).replace("{x}",0).replace("{y}",0).replace("{z}",0));const n={level:0,x:0,y:0},a={level:0,x:0,y:0};t||(n.z=0,a.z=0),VA.set(o,await NA(i+o));const g=VA.get(o),l=[];g.isContentAvailable(a)&&r.forEach((A=>{let e;t&&(e=A.replace("{level}",n.level).replace("{x}",n.x).replace("{y}",n.y)),t||(e=A.replace("{level}",n.level).replace("{x}",n.x).replace("{y}",n.y).replace("{z}",n.z)),l.push({uri:e})}));const c={geometricError:A.root.geometricError,boundingVolume:A.root.boundingVolume,refine:A.root.refine,globalAddress:n,localAddress:a,subtree:g,contents:l,getChildren:async()=>h(c)};return{root:c};async function h(e){const n=[];if(e.localAddress.level==A.root.implicitTiling.availableLevels-1)return n;if((e.localAddress.level+1)%A.root.implicitTiling.subtreeLevels==0){const a=KA(e.localAddress),g=KA(e.globalAddress),l=YA(t,A.root.boundingVolume,g);for(let c=0;c<a.length;c++){const I=a[c],C=g[c];if(e.subtree.isChildSubtreeAvailable(I)){let A;t&&(A=s.replace("{level}",C.level).replace("{x}",C.x).replace("{y}",C.y)),t||(A=s.replace("{level}",C.level).replace("{x}",C.x).replace("{y}",C.y).replace("{z}",C.z))}VA.has(o)||VA.set(o,await NA(i+o));const B=VA.get(o),d={level:0,x:0,y:0};t||(d.z=0);const E=[];B.isContentAvailable(d)&&r.forEach((A=>{let e;if(t&&(e=A.replace("{level}",C.level).replace("{x}",C.x).replace("{y}",C.y)),!t){Math.floor(z/factor);e=A.replace("{level}",C.level).replace("{x}",C.x).replace("{y}",C.y).replace("{z}",C.z)}E.push({uri:e})}));const u={geometricError:e.geometricError/2,boundingVolume:l[c],refine:A.root.refine,globalAddress:C,localAddress:d,subtree:B,contents:E,getChildren:async()=>h(u)};n.push(u)}}else{const s=KA(e.localAddress),i=KA(e.globalAddress),o=YA(t,A.root.boundingVolume,i);for(let a=0;a<s.length;a++){const g=s[a],l=i[a];if(!e.subtree.isTileAvailable(g))continue;const c=[],I=e.subtree.isContentAvailable(g);for(let A=0;A<r.length;A++){if(!I[A])continue;const e=r[A];let s;t&&(s=e.replace("{level}",l.level).replace("{x}",l.x).replace("{y}",l.y)),t||(s=e.replace("{level}",l.level).replace("{x}",l.x).replace("{y}",l.y).replace("{z}",l.z)),c.push({uri:s})}const C={geometricError:e.geometricError/2,boundingVolume:o[a],refine:A.root.refine,globalAddress:l,localAddress:g,subtree:e.subtree,contents:c,getChildren:async()=>h(C)};n.push(C)}}return n.length>0?n:void 0}}function KA(A){const{level:e,x:t,y:s,z:r}=A,i=e+1;let o=[];return o=void 0===r?[{level:i,x:2*t,y:2*s},{level:i,x:2*t+1,y:2*s},{level:i,x:2*t,y:2*s+1},{level:i,x:2*t+1,y:2*s+1}]:[{level:i,x:2*t,y:2*s,z:2*r},{level:i,x:2*t+1,y:2*s,z:2*r},{level:i,x:2*t,y:2*s+1,z:2*r},{level:i,x:2*t+1,y:2*s+1,z:2*r},{level:i,x:2*t,y:2*s,z:2*r+1},{level:i,x:2*t+1,y:2*s,z:2*r+1},{level:i,x:2*t,y:2*s+1,z:2*r+1},{level:i,x:2*t+1,y:2*s+1,z:2*r+1}],o}function YA(A,e,t){const s=[];for(let r=0;r<t.length;r++)s.push(WA(A,e,t[r]));return s}function WA(A,e,t){if(e.region)return function(A,e,t){const[s,r,i,o,n,a]=e,g=(i-s)/2**t.level,l=(o-r)/2**t.level,c=A?0:(a-n)/2**t.level,h=s+g*t.x,I=r+l*t.y,C=h+g,B=I+l,d=A?n:n+c*t.z,E=A?a:d+c;return{region:[h,I,C,B,d,E]}}(A,e.region,t);if(e.box)return function(A,e,t){const s=e.slice(0,3),r=[e.slice(3,6),e.slice(6,9),e.slice(9,12)],i=1/Math.pow(2,t.level),o=[i,i,A?1:i],n=r.map(((A,e)=>A.map((A=>A*o[e])))),a=[s[0]-r[0][0]-r[1][0]-r[2][0],s[1]-r[0][1]-r[1][1]-r[2][1],s[2]-r[0][2]-r[1][2]-r[2][2]],g=[a[0]+(2*t.x+1)*(n[0][0]+n[1][0]+n[2][0]),a[1]+(2*t.y+1)*(n[0][1]+n[1][1]+n[2][1]),A?s[2]:a[2]+(2*t.z+1)*(n[0][2]+n[1][2]+n[2][2])];return{box:g.concat(...n)}}(A,e.box,t);throw new Error("Unsupported bounding volume type")}let XA=0;const zA=new A.Matrix4;zA.set(1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1);class ZA{constructor(A){this.maxCachedItems=100,this.proxy=A.proxy,A&&(this.meshCallback=A.meshCallback,this.pointsCallback=A.pointsCallback,A.maxCachedItems&&(this.maxCachedItems=A.maxCachedItems)),this.gltfLoader=new l;const e=new nA;if(e.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.4.3/"),this.gltfLoader.setDRACOLoader(e),A&&A.renderer){const e=new yA;e.setTranscoderPath("https://storage.googleapis.com/ogc-3d-tiles/basis/").detectSupport(A.renderer),this.gltfLoader.setKTX2Loader(e),this.b3dmDecoder=new _A(A.renderer)}else this.b3dmDecoder=new _A(null);this.cache=new o.LinkedHashMap,this.register={},this.ready=[],this.downloads=[],this.nextReady=[],this.nextDownloads=[]}update(){const A=this;XA<8&&A.download(),A.loadBatch()}scheduleDownload(A){this.downloads.unshift(A)}download(){if(0!=this.nextDownloads.length||(this.getNextDownloads(),0!=this.nextDownloads.length))for(;this.nextDownloads.length>0;){const A=this.nextDownloads.shift();A&&A.shouldDoDownload()&&A.doDownload()}}meshReceived(A,e,t,s,r,i,o){this.ready.unshift([A,e,t,s,r,i,o])}loadBatch(){if(0==this.nextReady.length&&(this.getNextReady(),0==this.nextReady.length))return 0;const A=this.nextReady.shift();if(!A)return 0;const e=A[0],t=A[1],s=A[2],r=e.get(s);return r&&t[s]&&Object.keys(t[s]).forEach((A=>{const e=t[s][A];e&&(e(r),t[s][A]=null)})),1}getNextDownloads(){let A=Number.MAX_VALUE,e=-1;for(let A=this.downloads.length-1;A>=0;A--)this.downloads[A].shouldDoDownload()?this.downloads[A].distanceFunction||this.nextDownloads.push(this.downloads.splice(A,1)[0]):this.downloads.splice(A,1);if(!(this.nextDownloads.length>0)){for(let t=this.downloads.length-1;t>=0;t--){const s=this.downloads[t].distanceFunction()*this.downloads[t].level;s<A&&(A=s,e=t)}if(e>=0){const A=this.downloads.splice(e,1).pop();this.nextDownloads.push(A);const t=A.getSiblings();for(let A=this.downloads.length-1;A>=0;A--)t.map((A=>A.uuid)).includes(this.downloads[A].uuid)&&this.nextDownloads.push(this.downloads.splice(A,1).pop())}}}getNextReady(){let A=Number.MAX_VALUE,e=-1;for(let A=this.ready.length-1;A>=0;A--)this.ready[A][3]||this.nextReady.push(this.ready.splice(A,1)[0]);if(!(this.nextReady.length>0)){for(let t=this.ready.length-1;t>=0;t--){const s=this.ready[t][3]()*this.ready[t][5];s<A&&(A=s,e=t)}if(e>=0){const A=this.ready.splice(e,1).pop();this.nextReady.push(A)}}}get(A,e,t,s,r,i,o,n,a,g){const l=this,c=$A(t),h=new AbortController;if(A.signal.addEventListener("abort",(()=>{l.register[c]&&0!=Object.keys(l.register[c]).length||h.abort()})),!(t.includes(".b3dm")||t.includes(".json")||t.includes(".gltf")||t.includes(".glb")))return void console.error("the 3DTiles cache can only be used to load B3DM, gltf and json data");l.register[c]||(l.register[c]={}),l.register[c][e]&&console.error(" a tile should only be loaded once"),l.register[c][e]=s;if(l.cache.get(c))this.meshReceived(l.cache,l.register,c,r,i,o,e);else if(1==Object.keys(l.register[c]).length){let s;t.includes(".b3dm")?s=()=>{var A;A=l.proxy?()=>fetch(l.proxy,{method:"POST",body:t,signal:h.signal}):()=>fetch(t,{signal:h.signal}),XA++,A().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+t),new Error("couldn't load \"".concat(t,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.arrayBuffer()})).then((A=>this.b3dmDecoder.parseB3DM(A,l.meshCallback,n,a))).then((A=>{l.cache.put(c,A),l.checkSize(),this.meshReceived(l.cache,l.register,c,r,i,o,e)})).catch((A=>{console.error(A)})).finally((()=>{XA--}))}:t.includes(".glb")||t.includes(".gltf")?s=()=>{var A;A=l.proxy?()=>fetch(l.proxy,{method:"POST",body:t,signal:h.signal}):()=>fetch(t,{signal:h.signal}),XA++,A().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+t),new Error("couldn't load \"".concat(t,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.arrayBuffer()})).then((async A=>{await async function(A){return new Promise((e=>{const t=setInterval((()=>{A.dracoLoader&&A.ktx2Loader&&(clearInterval(t),e())}),10)}))}(this.gltfLoader),this.gltfLoader.parse(A,null,(A=>{A.scene.asset=A.asset,n&&A.scene.applyMatrix4(zA),A.scene.traverse((A=>{A.isMesh&&(a&&A.applyMatrix4(zA),l.meshCallback&&l.meshCallback(A,g)),A.isPoints&&l.pointsCallback&&l.pointsCallback(A,g)})),l.cache.put(c,A.scene),l.checkSize(),l.meshReceived(l.cache,l.register,c,r,i,o,e)}))})).catch((A=>{console.error(A)})).finally((()=>{XA--}))}:t.includes(".json")&&(s=()=>{var A;A=l.proxy?()=>fetch(l.proxy,{method:"POST",body:t,signal:h.signal}):()=>fetch(t,{signal:h.signal}),XA++,A().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+t),new Error("couldn't load \"".concat(t,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.json()})).then((A=>jA(A,t))).then((A=>{l.cache.put(c,A),l.checkSize(),l.meshReceived(l.cache,l.register,c)})).catch((A=>{console.error(A)})).finally((()=>{XA--}))}),this.scheduleDownload({shouldDoDownload:()=>!A.signal.aborted&&!!l.register[c]&&Object.keys(l.register[c]).length>0,doDownload:s,distanceFunction:r,getSiblings:i,level:o,uuid:e})}}invalidate(A,e){const t=$A(A);this.register[t]&&delete this.register[t][e]}checkSize(){const A=this;let e=0;for(;A.cache.size()>A.maxCachedItems&&e<A.cache.size();){e++;const t=A.cache.head(),s=A.register[t.key];s&&(Object.keys(s).length>0?(A.cache.remove(t.key),A.cache.put(t.key,t.value)):(A.cache.remove(t.key),delete A.register[t.key],t.value.traverse((A=>{if(A.material)if(A.material.length)for(let e=0;e<A.material.length;++e)A.material[e].dispose();else A.material.dispose();A.geometry&&A.geometry.dispose()}))))}}}function $A(A){for(var e=A.split("/"),t=[],s=0,r=0;r<e.length;r++){var i=e[r];"."!==i&&""!==i&&".."!==i?t[s++]=i:".."===i&&s>0&&s--}if(0===s)return"/";var o="";for(r=0;r<s;r++)o+="/"+t[r];return o}var Ae,ee=new Uint8Array(16);function te(){if(!Ae&&!(Ae="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ae(ee)}const se=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;const re=function(A){return"string"==typeof A&&se.test(A)};for(var ie=[],oe=0;oe<256;++oe)ie.push((oe+256).toString(16).substr(1));const ne=function(A){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(ie[A[e+0]]+ie[A[e+1]]+ie[A[e+2]]+ie[A[e+3]]+"-"+ie[A[e+4]]+ie[A[e+5]]+"-"+ie[A[e+6]]+ie[A[e+7]]+"-"+ie[A[e+8]]+ie[A[e+9]]+"-"+ie[A[e+10]]+ie[A[e+11]]+ie[A[e+12]]+ie[A[e+13]]+ie[A[e+14]]+ie[A[e+15]]).toLowerCase();if(!re(t))throw TypeError("Stringified UUID is invalid");return t};const ae=function(A,e,t){var s=(A=A||{}).random||(A.rng||te)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,e){t=t||0;for(var r=0;r<16;++r)e[t+r]=s[r];return e}return ne(s)};var ge,le=s(975);const ce=new A.Sphere(new A.Vector3(0,0,0),1),he=new A.Vector3(0,0,0),Ie=new A.Vector3(0,0,0),Ce=new A.Vector3(0,1,0),Be=new A.Vector2(1e3,1e3),de=new A.Quaternion,Ee={};class ue extends A.Object3D{constructor(t){super();const s=this;if(this.proxy=t.proxy,this.displayErrors=t.displayErrors,this.displayCopyright=t.displayCopyright,t.queryParams&&(this.queryParams={...t.queryParams}),this.uuid=ae(),t.tileLoader)this.tileLoader=t.tileLoader;else{const e={};e.meshCallback=t.meshCallback?t.meshCallback:(e,t)=>{e.material.wireframe=!1,e.material.side=A.DoubleSide},e.pointsCallback=t.pointsCallback?t.pointsCallback:(A,e)=>{A.material.size=Math.pow(e,.33),A.material.sizeAttenuation=!0},e.proxy=this.proxy,e.renderer=t.renderer,this.tileLoader=new ZA(e),this.update=A=>{this.update(A),this.tileLoader.update()}}if(this.displayCopyright=!!t.displayCopyright,this.geometricErrorMultiplier=t.geometricErrorMultiplier?t.geometricErrorMultiplier:1,this.renderer=t.renderer,this.meshCallback=t.meshCallback,this.loadOutsideView=t.loadOutsideView,this.cameraOnLoad=t.cameraOnLoad,this.parentTile=t.parentTile,this.occlusionCullingService=t.occlusionCullingService,this.static=t.static,this.occlusionCullingService&&(this.color=new A.Color,this.color.setHex(16777215*Math.random()),this.colorID=e(255*s.color.r,0,255)<<16^e(255*s.color.g,0,255)<<8^e(255*s.color.b,0,255)<<0),this.static&&(this.matrixAutoUpdate=!1,this.matrixWorldAutoUpdate=!1),this.childrenTiles=[],this.meshContent=[],this.tileContent,this.refine,this.rootPath,this.geometricError,this.boundingVolume,this.json,this.materialVisibility=!1,this.inFrustum=!0,this.level=t.level?t.level:0,this.hasMeshContent=0,this.hasUnloadedJSONContent=0,this.centerModel=t.centerModel,this.abortController=new AbortController,t.json)s.setup(t);else if(t.url){var r=t.url;if(s.queryParams){var i="";for(let A in s.queryParams)s.queryParams.hasOwnProperty(A)&&(i+="&"+A+"="+s.queryParams[A]);r.includes("?")?r+=i:r+="?"+i.substring(1)}(s.proxy?()=>fetch(s.proxy,{method:"POST",body:r,signal:s.abortController.signal}):()=>fetch(r,{signal:s.abortController.signal}))().then((A=>{if(!A.ok)throw new Error("couldn't load \"".concat(t.url,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));A.json().then((A=>jA(A,r))).then((A=>{s.setup({rootPath:le.dirname(t.url),json:A,onLoadCallback:t.onLoadCallback})}))})).catch((A=>{s.displayErrors&&Qe(A)}))}}async setup(e){const t=this;if(e.json.root?(t.json=e.json.root,t.json.refine||(t.json.refine=e.json.refine),t.json.geometricError||(t.json.geometricError=e.json.geometricError),t.json.transform||(t.json.transform=e.json.transform),t.json.boundingVolume||(t.json.boundingVolume=e.json.boundingVolume)):t.json=e.json,t.json.children||(t.json.getChildren?t.json.children=await t.json.getChildren():t.json.children=[]),t.rootPath=e.json.rootPath?e.json.rootPath:e.rootPath,t.json.refine?t.refine=t.json.refine:t.refine=e.parentRefine,t.json.geometricError?t.geometricError=t.json.geometricError:t.geometricError=e.parentGeometricError,t.json.transform&&!t.centerModel){let e=new A.Matrix4;e.elements=t.json.transform,t.applyMatrix4(e)}if(t.json.boundingVolume)if(t.json.boundingVolume.box)t.boundingVolume=new i(t.json.boundingVolume.box);else if(t.json.boundingVolume.region){const e=t.json.boundingVolume.region;t.transformWGS84ToCartesian(e[0],e[1],e[4],he),t.transformWGS84ToCartesian(e[2],e[3],e[5],Ie),he.lerp(Ie,.5),t.boundingVolume=new A.Sphere(new A.Vector3(he.x,he.y,he.z),he.distanceTo(Ie))}else if(t.json.boundingVolume.sphere){const e=t.json.boundingVolume.sphere;t.boundingVolume=new A.Sphere(new A.Vector3(e[0],e[1],e[2]),e[3])}else t.boundingVolume=e.parentBoundingVolume;else t.boundingVolume=e.parentBoundingVolume;function s(A){A.uri&&A.uri.includes("json")||A.url&&A.url.includes("json")?t.hasUnloadedJSONContent++:t.hasMeshContent++}if(t.json.content?(s(t.json.content),t.load()):t.json.contents&&(t.json.contents.forEach((A=>s(A))),t.load()),t.centerModel){const e=new A.Sphere;t.boundingVolume instanceof i?e.copy(t.boundingVolume.sphere):t.boundingVolume instanceof A.Sphere&&e.copy(t.boundingVolume),this.json.boundingVolume.region&&(this.transformWGS84ToCartesian(.5*(this.json.boundingVolume.region[0]+this.json.boundingVolume.region[2]),.5*(this.json.boundingVolume.region[1]+this.json.boundingVolume.region[3]),.5*(this.json.boundingVolume.region[4]+this.json.boundingVolume.region[5]),he),de.setFromUnitVectors(he.normalize(),Ce.normalize()),t.applyQuaternion(de)),t.translateX(-e.center.x*t.scale.x),t.translateY(-e.center.y*t.scale.y),t.translateZ(-e.center.z*t.scale.z)}e.onLoadCallback&&e.onLoadCallback(t),t.isSetup=!0}assembleURL(A,e){A.endsWith("/")||(A+="/");const t=new URL(A);let s=t.pathname.split("/").filter((A=>""!==A)),r=e.split("/").filter((A=>""!==A));for(let A=1;A<=s.length&&!(A>=r.length);A++){if(s.slice(s.length-A,s.length).join("/")===r.slice(0,A).join("/")){for(let e=0;e<A;e++)s.pop();break}}for(;r.length>0&&".."===r[0];)s.pop(),r.shift();return"".concat(t.protocol,"//").concat(t.host,"/").concat([...s,...r].join("/"))}extractQueryParams(A,e){const t=new URL(A);for(let[A,s]of t.searchParams)e[A]=s;return t.search="",t.toString()}async load(){var e=this;if(!e.deleted)if(e.json.content)await t(e.json.content,null);else if(e.json.contents){let A=e.json.contents.map(((A,e)=>t(A,e)));Promise.all(A)}async function t(t,s){let r;t.uri?r=t.uri:t.url&&(r=t.url);const i=/^(?:http|https|ftp|tcp|udp):\/\/\S+/;if(i.test(e.rootPath)?i.test(r)||(r=e.assembleURL(e.rootPath,r)):le.isAbsolute(e.rootPath)&&(r=e.rootPath+le.sep+r),r=e.extractQueryParams(r,e.queryParams),e.queryParams){var o="";for(let A in e.queryParams)e.queryParams.hasOwnProperty(A)&&(o+="&"+A+"="+e.queryParams[A]);r.includes("?")?r+=o:r+="?"+o.substring(1)}if(r)if(r.includes(".b3dm")||r.includes(".glb")||r.includes(".gltf")){e.contentURL=r;try{e.tileLoader.get(e.abortController,e.uuid,r,(t=>{if(e.deleted)return;t.asset&&t.asset.copyright&&(t.asset.copyright.split(";").forEach((A=>{Ee[A]?Ee[A]++:Ee[A]=1})),e.displayCopyright&&fe()),t.traverse((t=>{if((t.isMesh||t.isPoints)&&(t.layers.disable(0),e.static&&(t.matrixAutoUpdate=!1)),t.isMesh&&e.occlusionCullingService){const s=t.geometry.attributes.position,r=[];for(let A=0;A<s.count;A++)r.push(e.color.r,e.color.g,e.color.b);t.geometry.setAttribute("color",new A.Float32BufferAttribute(r,3))}}));Date.now();e.add(t),e.static&&(e.matrixWorldNeedsUpdate=!0,e.updateMatrix(),e.parentTile&&e.parentTile.updateMatrixWorld(!0)),e.meshContent.push(t)}),e.cameraOnLoad?()=>e.calculateDistanceToCamera(e.cameraOnLoad):()=>0,(()=>e.getSiblings()),e.level,!e.json.boundingVolume.region,!!e.json.boundingVolume.region,e.geometricError)}catch(A){e.displayErrors&&Qe(A)}}else r.includes(".json")&&e.tileLoader.get(e.abortController,e.uuid,r,(async A=>{e.deleted||(A.rootPath=le.dirname(r),e.json.children.push(A),null==s?delete e.json.content:e.json.contents.splice(s,1),e.hasUnloadedJSONContent--)}))}}dispose(){const A=this;A.meshContent.forEach((e=>{e&&e.asset&&e.asset.copyright&&(e.asset.copyright.split(";").forEach((A=>{Ee[A]&&Ee[A]--})),A.displayCopyright&&fe())})),A.childrenTiles.forEach((A=>A.dispose())),A.deleted=!0,this.traverse((function(e){e.contentURL&&A.tileLoader.invalidate(e.contentURL,e.uuid),e.abortController&&e.abortController.abort()})),this.parent=null,this.parentTile=null,this.dispatchEvent({type:"removed"})}disposeChildren(){var A=this;A.childrenTiles.forEach((A=>A.dispose())),A.childrenTiles=[],A.children=[],A.meshContent.length>0&&A.meshContent.forEach((e=>{A.children.push(e)}))}update(e){const t=new A.Frustum;t.setFromProjectionMatrix((new A.Matrix4).multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse)),this._update(e,t)}_update(A,e){const t=this;if(!t.isSetup)return;const s=t.materialVisibility;function r(A){if(t.hasMeshContent&&!(t.meshContent<t.hasMeshContent)){if(A<0)return t.inFrustum=!1,void t.changeContentVisibility(!!t.loadOutsideView);if(t.inFrustum=!0,0!=t.childrenTiles.length){if(A>=t.geometricErrorMultiplier*t.geometricError)t.changeContentVisibility(!0);else if(A<t.geometricErrorMultiplier*t.geometricError&&"REPLACE"==t.refine){let A=!0;t.childrenTiles.every((e=>!!e.isReady()||(A=!1,!1))),A&&t.changeContentVisibility(!1)}}else t.changeContentVisibility(!0)}}t.boundingVolume&&t.geometricError&&(t.metric=t.calculateUpdateMetric(A,e)),t.childrenTiles.forEach((t=>t._update(A,e))),r(t.metric),function(e){if(e<0&&t.hasMeshContent)return;if(t.occlusionCullingService&&t.hasMeshContent&&!t.occlusionCullingService.hasID(t.colorID))return;if((!t.hasMeshContent||e<t.geometricErrorMultiplier*t.geometricError&&t.meshContent.length>0)&&t.json&&t.json.children&&t.childrenTiles.length!=t.json.children.length)!function(){for(let A=t.json.children.length-1;A>=0;A--)t.json.children[A].root||t.json.children[A].children||t.json.children[A].getChildren||t.json.children[A].content||t.json.children[A].contents||t.json.children.splice(A,1);t.json.children.forEach((e=>{let s=new ue({parentTile:t,queryParams:t.queryParams,parentGeometricError:t.geometricError,parentBoundingVolume:t.boundingVolume,parentRefine:t.refine,json:e,rootPath:t.rootPath,geometricErrorMultiplier:t.geometricErrorMultiplier,loadOutsideView:t.loadOutsideView,level:t.level+1,tileLoader:t.tileLoader,cameraOnLoad:A,occlusionCullingService:t.occlusionCullingService,renderer:t.renderer,static:t.static,centerModel:!1,displayErrors:t.displayErrors,displayCopyright:t.displayCopyright});t.childrenTiles.push(s),t.add(s)}))}()}(t.metric),function(A,e){if(!t.hasMeshContent)return;if(!t.inFrustum)return t.disposeChildren(),void r(A);if(t.occlusionCullingService&&!e&&t.hasMeshContent&&t.meshContent.length>0&&t.meshDisplayed&&t.areAllChildrenLoadedAndHidden())return t.disposeChildren(),void r(A);if(A>=t.geometricErrorMultiplier*t.geometricError)t.disposeChildren(),r(A)}(t.metric,s)}areAllChildrenLoadedAndHidden(){let A=!0;const e=this;return this.childrenTiles.every((t=>{if(t.hasMeshContent){if(t.childrenTiles.length>0)return A=!1,!1;if(!t.inFrustum)return!0;if(!t.materialVisibility||t.meshDisplayed)return A=!1,!1;if(e.occlusionCullingService.hasID(t.colorID))return A=!1,!1}else if(!t.areAllChildrenLoadedAndHidden())return A=!1,!1;return!0})),A}isReady(){if(!this.inFrustum)return!0;if(this.hasUnloadedJSONContent)return!1;if(!this.hasMeshContent||0==this.meshContent.length||!this.materialVisibility){if(this.children.length>0){var A=!0;return this.childrenTiles.every((e=>!!e.isReady()||(A=!1,!1))),A}return!1}return!this.hasMeshContent||!(this.meshContent.length<this.hasMeshContent)&&(!!this.materialVisibility&&!!this.meshDisplayed)}changeContentVisibility(A){const e=this;e.hasMeshContent&&e.meshContent.length>0&&(A?e.meshContent.forEach((A=>{A.traverse((A=>{(A.isMesh||A.isPoints)&&A.layers.enable(0)}))})):e.meshContent.forEach((A=>{A.traverse((A=>{(A.isMesh||A.isPoints)&&A.layers.disable(0)}))}))),e.materialVisibility!=A&&(e.materialVisibility=A,e.meshDisplayed=!0)}calculateUpdateMetric(e,t){if(this.boundingVolume instanceof i){if(ce.copy(this.boundingVolume.sphere),ce.applyMatrix4(this.matrixWorld),!t.intersectsSphere(ce))return-1}else{if(!(this.boundingVolume instanceof A.Sphere))return console.error("unsupported shape"),-1;if(ce.copy(this.boundingVolume),ce.applyMatrix4(this.matrixWorld),!t.intersectsSphere(ce))return-1}const s=Math.max(0,e.position.distanceTo(ce.center)-ce.radius);if(0==s)return 0;const r=this.matrixWorld.getMaxScaleOnAxis();this.renderer&&this.renderer.getDrawingBufferSize(Be);let o=Be.y,n=e.fov;e.aspect<1&&(n*=e.aspect,o=Be.x);let a=2*Math.tan(.5*n*.017453292519943295)*s;return 16*window.devicePixelRatio*a/(o*r)}getSiblings(){const A=this,e=[];if(!A.parentTile)return e;let t=A.parentTile;for(;!t.hasMeshContent&&t.parentTile;)t=t.parentTile;return t.childrenTiles.forEach((t=>{if(t&&t!=A){for(;!t.hasMeshContent&&t.childrenTiles[0];)t=t.childrenTiles[0];e.push(t)}})),e}calculateDistanceToCamera(e){return this.boundingVolume instanceof i?(ce.copy(this.boundingVolume.sphere),ce.applyMatrix4(this.matrixWorld)):this.boundingVolume instanceof A.Sphere?(ce.copy(this.boundingVolume),ce.applyMatrix4(this.matrixWorld)):console.error("unsupported shape"),Math.max(0,e.position.distanceTo(ce.center)-ce.radius)}setGeometricErrorMultiplier(A){this.geometricErrorMultiplier=A,this.childrenTiles.forEach((e=>e.setGeometricErrorMultiplier(A)))}transformWGS84ToCartesian(A,e,t,s){const r=6378137/Math.sqrt(1-.006694384442042*Math.pow(Math.sin(e),2)),i=Math.cos(e),o=Math.cos(A),n=Math.sin(e),a=r+t,g=a*i*o,l=a*i*Math.sin(A),c=(.993305615557957*r+t)*n;s.set(g,l,c)}}function Qe(A){var e=document.createElement("div");e.textContent=A,e.style.position="fixed",e.style.top="10px",e.style.left="50%",e.style.transform="translateX(-50%)",e.style.padding="10px",e.style.backgroundColor="#ff8800",e.style.color="#ffffff",e.style.zIndex="9999",document.body.appendChild(e),setTimeout((function(){e.remove()}),8e3)}function fe(){ge||(ge=document.createElement("div"));var A="";for(let e in Ee)Ee.hasOwnProperty(e)&&Ee[e]>0&&(A+=e+", ");ge.textContent=A,ge.style.position="fixed",ge.style.bottom="20px",ge.style.left="20px",ge.style.color="white",ge.style.textShadow="2px 2px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000",ge.style.padding="10px",ge.style.backgroundColor="rgba(0, 0, 0, 0.1)",document.body.appendChild(ge)}const pe=new A.Sphere(new A.Vector3(0,0,0),1),me=new A.Vector3(0,0,0),ye=new A.Vector3(0,0,0),we=new A.Vector3(0,1,0),De=new A.Vector2,xe=new A.Quaternion,Re=new A.Matrix4;class Se extends A.Object3D{constructor(A){super();const e=this;if(A.queryParams&&(this.queryParams={...A.queryParams}),this.uuid=ae(),A.tileLoader?this.tileLoader=A.tileLoader:console.error("an instanced tileset must be provided an InstancedTilesetLoader"),this.master=A.master,this.meshCallback=A.meshCallback,this.loadOutsideView=A.loadOutsideView,this.cameraOnLoad=A.cameraOnLoad,this.parentTile=A.parentTile,this.childrenTiles=[],this.jsonChildren=[],this.meshContent=new Set,this.static=A.static,this.static&&(this.matrixAutoUpdate=!1,this.matrixWorldAutoUpdate=!1),this.tileContent,this.refinement,this.rootPath,this.geometricError,this.boundingVolume,this.json,this.materialVisibility=!1,this.inFrustum=!0,this.level=A.level?A.level:0,this.hasMeshContent=0,this.hasUnloadedJSONContent=0,this.centerModel=A.centerModel,this.deleted=!1,this.abortController=new AbortController,A.json)this.rootPath=A.json.rootPath?A.json.rootPath:A.rootPath,A.json.children&&(this.jsonChildren=A.json.children),e.setup(A);else if(A.url){this.loadJson=(t,s)=>{const r=le.dirname(s);e.setup({rootPath:r,json:t,onLoadCallback:A.onLoadCallback})};var t=A.url;if(e.queryParams){var s="";for(let A in e.queryParams)e.queryParams.hasOwnProperty(A)&&(s+="&"+A+"="+e.queryParams[A]);t.includes("?")?t+=s:t+="?"+s.substring(1)}e.tileLoader.get(e.abortController,t,e.uuid,e)}}async setup(e){const t=this;if(e.json.root?(t.json=e.json.root,!t.json.children&&t.json.getChildren&&(t.json.children=await t.json.getChildren()),t.jsonChildren=t.json.children,t.json.refinement||(t.json.refinement=e.json.refinement),t.json.geometricError||(t.json.geometricError=e.json.geometricError),t.json.transform||(t.json.transform=e.json.transform),t.json.boundingVolume||(t.json.boundingVolume=e.json.boundingVolume)):(t.json=e.json,!t.json.children&&t.json.getChildren&&(t.json.children=await t.json.getChildren(),t.jsonChildren=t.json.children)),t.rootPath=e.json.rootPath?e.json.rootPath:e.rootPath,t.json.refinement?t.refinement=t.json.refinement:t.refinement=e.parentRefinement,t.json.geometricError?t.geometricError=t.json.geometricError:t.geometricError=e.parentGeometricError,t.json.transform&&!t.centerModel){let e=new A.Matrix4;e.elements=t.json.transform,t.master.applyMatrix4(e)}if(t.json.boundingVolume)if(t.json.boundingVolume.box)t.boundingVolume=new i(t.json.boundingVolume.box);else if(t.json.boundingVolume.region){const e=t.json.boundingVolume.region;t.transformWGS84ToCartesian(e[0],e[1],e[4],me),t.transformWGS84ToCartesian(e[2],e[3],e[5],ye),me.lerp(ye,.5),t.boundingVolume=new A.Sphere(new A.Vector3(me.x,me.y,me.z),me.distanceTo(ye))}else if(t.json.boundingVolume.sphere){const e=t.json.boundingVolume.sphere;t.boundingVolume=new A.Sphere(new A.Vector3(e[0],e[1],e[2]),e[3])}else t.boundingVolume=e.parentBoundingVolume;else t.boundingVolume=e.parentBoundingVolume;function s(A){A.uri&&A.uri.includes("json")||A.url&&A.url.includes("json")?t.hasUnloadedJSONContent++:t.hasMeshContent++}if(t.json.content?(s(t.json.content),t.load()):t.json.contents&&(t.json.contents.forEach((A=>s(A))),t.load()),t.centerModel){const e=new A.Sphere;t.boundingVolume instanceof i?e.copy(t.boundingVolume.sphere):t.boundingVolume instanceof A.Sphere&&e.copy(t.boundingVolume),this.json.boundingVolume.region&&(t.transformWGS84ToCartesian(.5*(t.json.boundingVolume.region[0]+t.json.boundingVolume.region[2]),.5*(t.json.boundingVolume.region[1]+t.json.boundingVolume.region[3]),.5*(t.json.boundingVolume.region[4]+t.json.boundingVolume.region[5]),me),xe.setFromUnitVectors(me.normalize(),we.normalize()),t.master.applyQuaternion(xe),t.master.updateWorldMatrix(!1,!1)),Re.makeTranslation(-e.center.x*t.scale.x,-e.center.y*t.scale.y,-e.center.z*t.scale.z),t.master.matrix.multiply(Re),t.master.matrix.decompose(t.master.position,t.master.quaternion,t.master.scale)}t.isSetup=!0,e.onLoadCallback&&e.onLoadCallback(t)}isAbsolutePathOrURL(A){const e=/^(?:http|https|ftp|tcp|udp):\/\/\S+/.test(A),t=A.startsWith("/")&&!A.startsWith("//");return e||t}assembleURL(A,e){A.endsWith("/")||(A+="/");const t=new URL(A);let s=t.pathname.split("/").filter((A=>""!==A)),r=e.split("/").filter((A=>""!==A));for(let A=1;A<=s.length&&!(A>=r.length);A++){if(s.slice(s.length-A,s.length).join("/")===r.slice(0,A).join("/")){for(let e=0;e<A;e++)s.pop();break}}for(;r.length>0&&".."===r[0];)s.pop(),r.shift();return"".concat(t.protocol,"//").concat(t.host,"/").concat([...s,...r].join("/"))}extractQueryParams(A,e){const t=new URL(A);for(let[A,s]of t.searchParams)e[A]=s;return t.search="",t.toString()}load(){var A=this;function e(e){let t;e.uri?t=e.uri:e.url&&(t=e.url);const s=/^(?:http|https|ftp|tcp|udp):\/\/\S+/;if(s.test(A.rootPath)?s.test(t)||(t=A.assembleURL(A.rootPath,t)):le.isAbsolute(A.rootPath)&&(t=A.rootPath+le.sep+t),t=A.extractQueryParams(t,A.queryParams),A.queryParams){var r="";for(let e in A.queryParams)A.queryParams.hasOwnProperty(e)&&(r+="&"+e+"="+A.queryParams[e]);t.includes("?")?t+=r:t+="?"+r.substring(1)}t&&(t.includes(".b3dm")||t.includes(".glb")||t.includes(".gltf")?(A.contentURL=t,A.tileLoader.get(A.abortController,t,A.uuid,A,A.cameraOnLoad?()=>A.calculateDistanceToCamera(A.cameraOnLoad):()=>0,(()=>A.getSiblings()),A.level,!A.json.boundingVolume.region,!!A.json.boundingVolume.region,A.geometricError)):t.includes(".json")&&A.tileLoader.get(A.abortController,t,A.uuid,A))}A.deleted||(A.json.content?e(A.json.content):A.json.contents&&A.json.contents.forEach((A=>e(A))),A.matrixWorldNeedsUpdate=!0,A.updateWorldMatrix(!0,!0))}loadMesh(A){this.deleted||this.meshContent.add(A)}loadJson(A,e){this.deleted||(this.json.children&&(this.jsonChildren=this.json.children),A.rootPath=le.dirname(e),this.jsonChildren.push(A),this.hasUnloadedJSONContent--)}dispose(){const A=this;A.childrenTiles.forEach((A=>A.dispose())),A.deleted=!0,A.abortController&&A.abortController.abort(),this.parent=null,this.parentTile=null,this.dispatchEvent({type:"removed"})}disposeChildren(){this.childrenTiles.forEach((A=>A.dispose())),this.childrenTiles=[]}_update(A,e){const t=this;if(!t.isSetup)return;t.materialVisibility;function s(A){if(t.hasMeshContent&&!(t.meshContent.size<t.hasMeshContent)){if(A<0)return t.inFrustum=!1,void t.changeContentVisibility(!!t.loadOutsideView);if(t.inFrustum=!0,0!=t.childrenTiles.length){if(A>=t.master.geometricErrorMultiplier*t.geometricError)t.changeContentVisibility(!0);else if(A<t.master.geometricErrorMultiplier*t.geometricError){let A=!0;t.childrenTiles.every((e=>!!e.isReady()||(A=!1,!1))),A&&t.changeContentVisibility(!1)}}else t.changeContentVisibility(!0)}}t.boundingVolume&&t.geometricError&&(t.metric=t.calculateUpdateMetric(A,e)),t.childrenTiles.forEach((t=>t._update(A,e))),s(t.metric),function(e){if(e<0&&t.hasMeshContent)return;if((!t.hasMeshContent&&t.rootPath||e<t.master.geometricErrorMultiplier*t.geometricError&&t.meshContent.size>0)&&t.json&&t.jsonChildren&&t.childrenTiles.length!=t.jsonChildren.length)t.jsonChildren.forEach((e=>{if(!(e.root||e.children||e.getChildren||e.content||e.contents))return;let s=new Se({parentTile:t,queryParams:t.queryParams,parentGeometricError:t.geometricError,parentBoundingVolume:t.boundingVolume,parentRefinement:t.refinement,json:e,rootPath:t.rootPath,loadOutsideView:t.loadOutsideView,level:t.level+1,tileLoader:t.tileLoader,cameraOnLoad:A,master:t.master,centerModel:!1});t.childrenTiles.push(s)}))}(t.metric),function(A,e){if(!t.hasMeshContent)return;if(!t.inFrustum)return t.disposeChildren(),void s(A);if(A>=t.master.geometricErrorMultiplier*t.geometricError)t.disposeChildren(),s(A)}(t.metric)}areAllChildrenLoadedAndHidden(){let A=!0;return this.childrenTiles.every((e=>{if(e.hasMeshContent){if(e.childrenTiles.length>0)return A=!1,!1;if(!e.inFrustum)return!0;if(!e.materialVisibility||e.meshesToDisplay!=e.meshesDisplayed)return A=!1,!1}else if(!e.areAllChildrenLoadedAndHidden())return A=!1,!1;return!0})),A}isReady(){if(!this.inFrustum)return!0;if(this.hasUnloadedJSONContent)return!1;if(!this.hasMeshContent||0==this.meshContent.size||!this.materialVisibility){if(this.childrenTiles.length>0){var A=!0;return this.childrenTiles.every((e=>!!e.isReady()||(A=!1,!1))),A}return!1}return!this.hasMeshContent||!(this.meshContent.size<this.hasMeshContent)&&!!this.materialVisibility}changeContentVisibility(A){this.materialVisibility=A}calculateUpdateMetric(e,t){if(this.boundingVolume instanceof i){if(pe.copy(this.boundingVolume.sphere),pe.applyMatrix4(this.master.matrixWorld),!t.intersectsSphere(pe))return-1}else{if(!(this.boundingVolume instanceof A.Sphere))return console.error("unsupported shape"),-1;if(pe.copy(this.boundingVolume),pe.applyMatrix4(this.master.matrixWorld),!t.intersectsSphere(pe))return-1}const s=Math.max(0,e.position.distanceTo(pe.center)-pe.radius);if(0==s)return 0;const r=this.master.matrixWorld.getMaxScaleOnAxis();this.master.renderer.getDrawingBufferSize(De);let o=De.y,n=e.fov;e.aspect<1&&(n*=e.aspect,o=De.x);let a=2*Math.tan(.5*n*.017453292519943295)*s;return 16*window.devicePixelRatio*a/(o*r)}getSiblings(){const A=this,e=[];if(!A.parentTile)return e;let t=A.parentTile;for(;!t.hasMeshContent&&t.parentTile;)t=t.parentTile;return t.childrenTiles.forEach((t=>{if(t&&t!=A){for(;!t.hasMeshContent&&t.childrenTiles[0];)t=t.childrenTiles[0];e.push(t)}})),e}calculateDistanceToCamera(e){return this.boundingVolume instanceof i?(pe.copy(this.boundingVolume.sphere),pe.applyMatrix4(this.master.matrixWorld)):this.boundingVolume instanceof A.Sphere?(pe.copy(this.boundingVolume),pe.applyMatrix4(this.master.matrixWorld)):console.error("unsupported shape"),Math.max(0,e.position.distanceTo(pe.center)-pe.radius)}getWorldMatrix(){return this.master.matrixWorld}transformWGS84ToCartesian(A,e,t,s){const r=6378137/Math.sqrt(1-.006694384442042*Math.pow(Math.sin(e),2)),i=Math.cos(e),o=Math.cos(A),n=Math.sin(e),a=r+t,g=a*i*o,l=a*i*Math.sin(A),c=(.993305615557957*r+t)*n;s.set(g,l,c)}}class Te extends A.Object3D{constructor(A){super(),A.master=this,this.renderer=A.renderer,this.geometricErrorMultiplier=A.geometricErrorMultiplier?A.geometricErrorMultiplier:1,this.tileset=new Se(A),A.static&&(this.matrixAutoUpdate=!1),this.tileLoader=A.tileLoader}update(e,t){if(t)this.tileset._update(e,t);else{const t=new A.Frustum;t.setFromProjectionMatrix((new A.Matrix4).multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse)),this.tileset._update(e,t)}}updateWithFrustum(A,e){this.tileset._update(A,e)}setGeometricErrorMultiplier(A){this.geometricErrorMultiplier=A||1}}class Me{constructor(e){const t=this;t.scene=e,t.instancedTiles=[],t.instancedMesh,t.reuseableMatrix=new A.Matrix4}addInstance(A){const e=this;A.added=!0,A.listOMesh=e.instancedTiles,e.instancedTiles.push(A),e.instancedMesh&&A.loadMesh(e.instancedMesh)}addToScene(){const e=this;e.instancedMesh.setMatrixAt(0,new A.Matrix4),e.instancedMesh.instanceMatrix.needsUpdate=!0,e.instancedMesh.count=1,e.scene.add(e.instancedMesh),e.instancedMesh.onAfterRender=()=>{delete e.instancedMesh.onAfterRender,e.instancedMesh.displayedOnce=!0}}setObject(A){const e=this;e.instancedMesh=A,e.instancedMesh.matrixAutoUpdate=!1,e.instancedMesh.matrixWorldAutoUpdate=!1,e.scene.children.includes(A)||this.addToScene();for(let A=0;A<e.instancedTiles.length;A++)e.instancedTiles[A].loadMesh(e.instancedMesh)}update(){const A=this;for(let e=A.instancedTiles.length-1;e>=0;e--)A.instancedTiles[e].deleted&&A.instancedTiles.splice(e,1);if(A.instancedMesh){A.instancedMesh.count=0,A.instancedMesh.instancedTiles=[];for(let e=0;e<A.instancedTiles.length;e++)A.instancedTiles[e].meshContent.add(A.instancedMesh),A.instancedTiles[e].materialVisibility&&(A.instancedMesh.count++,A.reuseableMatrix.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),A.reuseableMatrix.multiply(A.instancedTiles[e].master.matrixWorld),A.reuseableMatrix.multiply(A.instancedMesh.baseMatrix),A.instancedMesh.setMatrixAt(A.instancedMesh.count-1,A.reuseableMatrix),A.instancedMesh.instancedTiles.push(A.instancedTiles[e]));A.instancedMesh.instanceMatrix.needsUpdate=!0,A.instancedMesh.needsUpdate=!0,A.instancedMesh.computeBoundingSphere()}}getCount(){return this.instancedTiles.length}dispose(){const A=this;return!(A.instancedTiles.length>0)&&(!!A.instancedMesh&&(A.scene.remove(A.instancedMesh),A.instancedMesh.traverse((A=>{if(A.dispose&&A.dispose(),A.material)if(A.material.length)for(let e=0;e<A.material.length;++e)A.material[e].dispose();else A.material.dispose();A.geometry&&A.geometry.dispose()})),A.instancedMesh.dispose(),!0))}}class be{constructor(){const A=this;A.count=0,A.json,A.instancedTiles=[]}addInstance(A){this.instancedTiles.push(A),this.json&&A.loadJson(this.json,this.url)}setObject(A,e){const t=this;t.json=A,t.url=e;for(let A=0;A<t.instancedTiles.length;A++)t.instancedTiles[A].loadJson(t.json,t.url)}getCount(){return this.instancedTiles.length}update(){const A=this;for(let e=A.instancedTiles.length-1;e>=0;e--)A.instancedTiles[e].deleted&&A.instancedTiles.splice(e,1)}dispose(){return!(!this.json||0!=this.instancedTiles.length)}}let Le=0;const Fe=new A.Matrix4;Fe.set(1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1);class Ge{constructor(A,e){this.maxCachedItems=100,this.maxInstances=1,this.proxy=e.proxy,e&&(this.meshCallback=e.meshCallback,this.pointsCallback=e.pointsCallback,e.maxCachedItems&&(this.maxCachedItems=e.maxCachedItems),e.maxInstances&&(this.maxInstances=e.maxInstances)),this.gltfLoader=new l;const t=new nA;if(t.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.4.3/"),this.gltfLoader.setDRACOLoader(t),e&&e.renderer){const A=new yA;A.setTranscoderPath("https://storage.googleapis.com/ogc-3d-tiles/basis/").detectSupport(e.renderer),this.gltfLoader.setKTX2Loader(A),this.b3dmDecoder=new _A(e.renderer)}else this.b3dmDecoder=new _A(null);this.cache=new o.LinkedHashMap,this.scene=A,this.ready=[],this.downloads=[],this.nextReady=[],this.nextDownloads=[]}update(){const A=this;A.checkSize(),A.cache._data.forEach((A=>{A.update()})),Le<8&&A.download(),A.loadBatch()}download(){const e=this;if(0!=e.nextDownloads.length||(e.getNextDownloads(),0!=e.nextDownloads.length))for(;e.nextDownloads.length>0;){const s=e.nextDownloads.shift();if(s){if(s.path.includes(".b3dm"))t=e.proxy?()=>fetch(e.proxy,{method:"POST",body:s.path}):()=>fetch(s.path),Le++,t().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+s.path),new Error("couldn't load \"".concat(s.path,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.arrayBuffer()})).then((A=>this.b3dmDecoder.parseB3DMInstanced(A,e.meshCallback,e.maxInstances,s.sceneZupToYup,s.meshZupToYup))).then((A=>{A.frustumCulled=!1,s.tile.setObject(A),e.ready.unshift(s)})).catch((A=>console.error(A))).finally((()=>{Le--}));if(s.path.includes(".glb")||s.path.includes(".gltf"))t=e.proxy?()=>fetch(e.proxy,{method:"POST",body:s.path}):()=>fetch(s.path),Le++,t().then((A=>{if(!A.ok)throw new Error("missing content");return A.arrayBuffer()})).then((async t=>{await ke(this.gltfLoader),this.gltfLoader.parse(t,null,(t=>{let r;t.scene.asset=t.asset,s.sceneZupToYup&&t.scene.applyMatrix4(Fe),t.scene.traverse((A=>{A.geometricError=s.geometricError,A.isMesh&&(s.meshZupToYup&&A.applyMatrix4(Fe),e.meshCallback&&e.meshCallback(A,A.geometricError)),A.isPoints&&console.error("instanced point cloud is not supported")})),t.scene.updateWorldMatrix(!1,!0),t.scene.traverse((t=>{t.isMesh&&(r=new A.InstancedMesh(t.geometry,t.material,e.maxInstances),r.baseMatrix=t.matrixWorld)})),e.ready.unshift(s),r?(r.frustumCulled=!1,s.tile.setObject(r)):t.scene.traverse((A=>{A.dispose&&A.dispose(),A.material&&A.material.dispose()}))}))}),(A=>{console.error("could not load tile : "+s.path)})).finally((()=>{Le--}));else if(s.path.includes(".json")){var t;t=e.proxy?()=>fetch(e.proxy,{method:"POST",body:s.path}):()=>fetch(s.path),Le++,t().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+s.path),new Error("couldn't load \"".concat(s.path,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.json()})).then((A=>jA(A,s.path))).then((A=>{s.tile.setObject(A,s.path),e.ready.unshift(s)})).catch((A=>console.error(A))).finally((()=>{Le--}))}}}}loadBatch(){if(0==this.nextReady.length&&(this.getNextReady(),0==this.nextReady.length))return 0;return this.nextReady.shift()?1:0}getNextReady(){let A=Number.MAX_VALUE,e=-1;for(let A=this.ready.length-1;A>=0;A--)this.ready[A].distanceFunction||this.nextReady.push(this.ready.splice(A,1)[0]);if(!(this.nextReady.length>0)){for(let t=this.ready.length-1;t>=0;t--){const s=this.ready[t].distanceFunction()*this.ready[t].level;s<A&&(A=s,e=t)}if(e>=0){const A=this.ready.splice(e,1).pop();this.nextReady.push(A);const t=A.getSiblings();for(let A=this.ready.length-1;A>=0;A--)t.includes(this.ready[A].uuid)&&this.nextready.push(this.ready.splice(A,1).pop())}}}get(A,e,t,s,r,i,o,n,a,g){const l=this,c=function(A){for(var e=A.split("/"),t=[],s=0,r=0;r<e.length;r++){var i=e[r];"."!==i&&""!==i&&".."!==i?t[s++]=i:".."===i&&s>0&&s--}if(0===s)return"/";var o="";for(r=0;r<s;r++)o+="/"+t[r];return o}(e);if(!(e.includes(".b3dm")||e.includes(".json")||e.includes(".glb")||e.includes(".gltf")))return void console.error("the 3DTiles cache can only be used to load B3DM, gltf and json data");const h=l.cache.get(c);if(h)h.addInstance(s);else if(e.includes(".b3dm")||e.includes(".glb")||e.includes(".gltf")){const h=new Me(l.scene);h.addInstance(s),l.cache.put(c,h);const I=new AbortController;A.signal.addEventListener("abort",(()=>{0==h.getCount()&&I.abort()})),this.downloads.push({abortController:I,tile:h,key:c,path:e,distanceFunction:r,getSiblings:i,level:o,uuid:t,sceneZupToYup:n,meshZupToYup:a,geometricError:g,shouldDoDownload:()=>!0})}else if(e.includes(".json")){const t=new be;t.addInstance(s),l.cache.put(c,t);const n=new AbortController;A.signal.addEventListener("abort",(()=>{0==t.getCount()&&n.abort()})),this.downloads.push({abortController:n,tile:t,key:c,path:e,distanceFunction:r,getSiblings:i,level:o,shouldDoDownload:()=>!0})}}getNextDownloads(){let A=Number.MAX_VALUE,e=-1;for(let A=this.downloads.length-1;A>=0;A--){const e=this.downloads[A];e.shouldDoDownload()?e.distanceFunction||this.nextDownloads.push(this.downloads.splice(A,1)[0]):this.downloads.splice(A,1)}if(!(this.nextDownloads.length>0)){for(let t=this.downloads.length-1;t>=0;t--){const s=this.downloads[t],r=s.distanceFunction()*s.level;r<A&&(A=r,e=t)}if(e>=0){const A=this.downloads.splice(e,1).pop();this.nextDownloads.push(A);const t=A.getSiblings();for(let A=this.downloads.length-1;A>=0;A--)t.includes(this.downloads[A].uuid)&&this.nextDownloads.push(this.downloads.splice(A,1).pop())}}}checkSize(){const A=this;let e=0;for(;A.cache.size()>A.maxCachedItems&&e<A.cache.size();){e++;const t=A.cache.head();A.cache.remove(t.key),t.value.dispose()||A.cache.put(t.key,t.value)}}}async function ke(A){return new Promise((e=>{const t=setInterval((()=>{A.dracoLoader&&A.ktx2Loader&&(clearInterval(t),e())}),10)}))}})(),r})()));
3
3
  //# sourceMappingURL=threedtiles.min.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jdultra/threedtiles",
3
- "version": "9.2.16",
3
+ "version": "10.0.0",
4
4
  "description": "An OGC 3DTiles viewer for Three.js",
5
5
  "main": "dist/threedtiles.min.js",
6
6
  "files": [
@@ -10,6 +10,7 @@
10
10
  ],
11
11
  "scripts": {
12
12
  "build": "webpack --config webpack.prod.config.js",
13
+ "build-dev": "webpack --config webpack.dev.config.js",
13
14
  "watch": "webpack --watch --config webpack.dev.config.js",
14
15
  "dev": "webpack-dev-server --config webpack.dev.config.js"
15
16
  },
@@ -28,7 +29,7 @@
28
29
  "author": "Emeric Beaufays",
29
30
  "license": "MIT",
30
31
  "peerDependencies": {
31
- "three": "0.155.0"
32
+ "three": "0.162.0"
32
33
  },
33
34
  "dependencies": {
34
35
  "js-utils-z": "^1.2.1",