playcanvas
Version:
PlayCanvas WebGL game engine
1 lines • 1.65 MB
JavaScript
var e,t;e=this,t=function(e){let t,s,i,r,a,n,o,l,h,d,c,u,p,m,f,_,g,y,v;var x,S,b,T="undefined"!=typeof document?document.currentScript:null;function w(e,t,s){e.prototype[t]||Object.defineProperty(e.prototype,t,{value:s,configurable:true,enumerable:false,writable:true});}for(let e of(w(Array,"fill",function(e){if(this==null)throw TypeError("this is null or not defined");for(var t=Object(this),s=t.length>>>0,i=arguments[1],r=i>>0,a=r<0?Math.max(s+r,0):Math.min(r,s),n=arguments[2],o=undefined===n?s:n>>0,l=o<0?Math.max(s+o,0):Math.min(o,s);a<l;)t[a]=e,a++;return t}),w(Array,"find",function(e){if(this==null)throw TypeError('"this" is null or not defined');var t=Object(this),s=t.length>>>0;if("function"!=typeof e)throw TypeError("predicate must be a function");for(var i=arguments[1],r=0;r<s;){var a=t[r];if(e.call(i,a,r,t))return a;r++;}}),w(Array,"findIndex",function(e){if(this==null)throw TypeError('"this" is null or not defined');var t=Object(this),s=t.length>>>0;if("function"!=typeof e)throw TypeError("predicate must be a function");for(var i=arguments[1],r=0;r<s;){var a=t[r];if(e.call(i,a,r,t))return r;r++;}return -1}),Math.log2=Math.log2||function(e){return Math.log(e)*Math.LOG2E},Math.sign||(Math.sign=function(e){return (e>0)-(e<0)||+e}),undefined===Number.isFinite&&(Number.isFinite=function(e){return "number"==typeof e&&isFinite(e)}),"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(e,t){if(null==e)throw TypeError("Cannot convert undefined or null to object");for(var s=Object(e),i=1;i<arguments.length;i++){var r=arguments[i];if(null!=r)for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(s[a]=r[a]);}return s},writable:true,configurable:true}),Object.fromEntries=Object.fromEntries||function(e){if(!e||!e[Symbol.iterator])throw Error("Object.fromEntries() requires a single iterable argument");for(var t={},s=0;s<e.length;s++)t[e[s][0]]=e[s][1];return t},Object.entries=Object.entries||function(e){for(var t=Object.keys(e),s=t.length,i=Array(s);s--;)i[s]=[t[s],e[t[s]]];return i},Object.values=Object.values||function(e){return Object.keys(e).map(t=>e[t])},function(){if("undefined"!=typeof navigator&&"undefined"!=typeof document){navigator.pointer=navigator.pointer||navigator.webkitPointer||navigator.mozPointer;var e=function(){var e=document.createEvent("CustomEvent");e.initCustomEvent("pointerlockchange",true,false,null),document.dispatchEvent(e);},t=function(){var e=document.createEvent("CustomEvent");e.initCustomEvent("pointerlockerror",true,false,null),document.dispatchEvent(e);};document.addEventListener("webkitpointerlockchange",e,false),document.addEventListener("webkitpointerlocklost",e,false),document.addEventListener("mozpointerlockchange",e,false),document.addEventListener("mozpointerlocklost",e,false),document.addEventListener("webkitpointerlockerror",t,false),document.addEventListener("mozpointerlockerror",t,false),Element.prototype.mozRequestPointerLock?Element.prototype.requestPointerLock=function(){this.mozRequestPointerLock();}:Element.prototype.requestPointerLock=Element.prototype.requestPointerLock||Element.prototype.webkitRequestPointerLock||Element.prototype.mozRequestPointerLock,!Element.prototype.requestPointerLock&&navigator.pointer&&(Element.prototype.requestPointerLock=function(){document.pointerLockElement=this,navigator.pointer.lock(this,e,t);}),document.exitPointerLock=document.exitPointerLock||document.webkitExitPointerLock||document.mozExitPointerLock,document.exitPointerLock||(document.exitPointerLock=function(){navigator.pointer&&(document.pointerLockElement=null,navigator.pointer.unlock());});}}(),w(String,"endsWith",function(e,t){return (undefined===t||t>this.length)&&(t=this.length),this.substring(t-e.length,t)===e}),w(String,"includes",function(e,t){return "number"!=typeof t&&(t=0),!(t+e.length>this.length)&&-1!==this.indexOf(e,t)}),w(String,"startsWith",function(e,t){var s=t>0?0|t:0;return this.substring(s,s+e.length)===e}),w(String,"trimEnd",function(){return this.replace(RegExp(/[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/.source+"$","g"),"")}),[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array]))w(e,"fill",Array.prototype.fill),w(e,"join",Array.prototype.join);let E="GpuTimings",A="2.5.0",C="2abde2e";function P(e,t){for(let s in t){let i=t[s];Array.isArray(i)?e[s]=P([],i):i&&"object"==typeof i?e[s]=P({},i):e[s]=i;}return e}let M={create:()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=16*Math.random()|0;return ("x"===e?t:3&t|8).toString(16)})},R={delimiter:"/",join(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];let i=t[0];for(let e=0;e<t.length-1;e++){let s=t[e],r=t[e+1];if(r[0]===R.delimiter){i=r;continue}s&&r&&s[s.length-1]!==R.delimiter&&r[0]!==R.delimiter?i+=R.delimiter+r:i+=r;}return i},normalize(e){let t=e.startsWith(R.delimiter),s=e.endsWith(R.delimiter),i=e.split("/"),r="",a=[];for(let e=0;e<i.length;e++)if(""!==i[e]&&"."!==i[e]){if(".."===i[e]&&a.length>0){a=a.slice(0,a.length-2);continue}e>0&&a.push(R.delimiter),a.push(i[e]);}return r=a.join(""),t||r[0]!==R.delimiter||(r=r.slice(1)),s&&r[r.length-1]!==R.delimiter&&(r+=R.delimiter),r},split(e){let t=e.lastIndexOf(R.delimiter);return -1!==t?[e.substring(0,t),e.substring(t+1)]:["",e]},getBasename:e=>R.split(e)[1],getDirectory:e=>R.split(e)[0],getExtension(e){let t=e.split("?")[0].split(".").pop();return t!==e?"."+t:""},isRelativePath:e=>"/"!==e.charAt(0)&&null===e.match(/:\/\//),extractPath(e){let t="",s=e.split("/"),i=0;if(s.length>1){if(R.isRelativePath(e)){if("."===s[0])for(i=0;i<s.length-1;++i)t+=0===i?s[i]:"/"+s[i];else if(".."===s[0])for(i=0;i<s.length-1;++i)t+=0===i?s[i]:"/"+s[i];else for(i=0,t=".";i<s.length-1;++i)t+="/"+s[i];}else for(i=0;i<s.length-1;++i)t+=0===i?s[i]:"/"+s[i];}return t}},I="undefined"!=typeof navigator?navigator.userAgent:"",D="undefined"!=typeof window?"browser":"undefined"!=typeof global?"node":"worker",L=/android/i.test(I)?"android":/ip(?:[ao]d|hone)/i.test(I)?"ios":/windows/i.test(I)?"windows":/mac os/i.test(I)?"osx":/linux/i.test(I)?"linux":/cros/i.test(I)?"cros":null,O="browser"!==D?null:/Chrome\/|Chromium\/|Edg.*\//.test(I)?"chrome":/Safari\//.test(I)?"safari":/Firefox\//.test(I)?"firefox":"other",F=/xbox/i.test(I),B="browser"===D&&("ontouchstart"in window||"maxTouchPoints"in navigator&&navigator.maxTouchPoints>0),k="browser"===D&&(!!navigator.getGamepads||!!navigator.webkitGetGamepads),N="undefined"!=typeof Worker,z=(()=>{let e=false;try{let t=Object.defineProperty({},"passive",{get:function(){return e=!0,!1}});window.addEventListener("testpassive",null,t),window.removeEventListener("testpassive",null,t);}catch(e){}return e})(),U={name:L,environment:D,global:null!=(b=null!=(S=null!=(x="undefined"!=typeof globalThis&&globalThis)?x:"browser"===D&&window)?S:"node"===D&&global)?b:"worker"===D&&self,browser:"browser"===D,worker:"worker"===D,desktop:["windows","osx","linux","cros"].includes(L),mobile:["android","ios"].includes(L),ios:"ios"===L,android:"android"===L,xbox:F,gamepads:k,touch:B,workers:N,passiveEvents:z,browserName:O},V="abcdefghijklmnopqrstuvwxyz",G="ABCDEFGHIJKLMNOPQRSTUVWXYZ";function H(e,t){ undefined===t&&(t=0);let s=e.length;if(t<0||t>=s)return null;let i=e.charCodeAt(t);if(s>1&&i>=55296&&i<=56319){let s=e.charCodeAt(t+1);if(s>=56320&&s<=57343)return {code:(i-55296)*1024+s-56320+65536,long:true}}return {code:i,long:false}}function W(e,t,s){if(!e)return false;let i=H(e);if(i){let e=i.code;return e>=t&&e<=s}return false}let X={ASCII_LOWERCASE:V,ASCII_UPPERCASE:G,ASCII_LETTERS:V+G,format(e){for(var t=arguments.length,s=Array(t>1?t-1:0),i=1;i<t;i++)s[i-1]=arguments[i];for(let t=0;t<s.length;t++)e=e.replace("{"+t+"}",s[t]);return e},getCodePoint(e,t){let s=H(e,t);return s&&s.code},getCodePoints(e){let t;if("string"!=typeof e)throw TypeError("Not a string");let s=0,i=[];for(;t=H(e,s);)i.push(t.code),s+=t.long?2:1;return i},getSymbols(e){let t;if("string"!=typeof e)throw TypeError("Not a string");let s=0,i=e.length,r=[],a=0;for(;s<i;){if(a+=function(e,t){if(t===e.length-1)return 1;if(W(e[t],55296,56319)){let s=e.substring(t,t+2),i=e.substring(t+2,t+4);return W(i,127995,127999)||W(s,127462,127487)&&W(i,127462,127487)?4:W(i,65024,65039)?3:2}return W(e[t+1],65024,65039)?2:1}(e,s+a),W(t=e[s+a],8400,8447)&&(t=e[s+a++]),W(t,65024,65039)&&(t=e[s+a++]),t&&8205===t.charCodeAt(0)){t=e[s+a++];continue}let i=e.substring(s,s+a);r.push(i),s+=a,a=0;}return r},fromCodePoint(){let e,t,s;let i=[];for(let r=0;r<arguments.length;++r)e=Number(arguments[r]),t=e-65536,s=e>65535?[(t>>10)+55296,t%1024+56320]:[e],i.push(String.fromCharCode.apply(null,s));return i.join("")}};class j{off(){this._removed||this.handler.offByHandle(this);}on(e,t,s){return undefined===s&&(s=this),this.handler._addCallback(e,t,s,false)}once(e,t,s){return undefined===s&&(s=this),this.handler._addCallback(e,t,s,true)}set removed(e){e&&(this._removed=true);}get removed(){return this._removed}constructor(e,t,s,i,r=false){this._removed=false,this.handler=e,this.name=t,this.callback=s,this.scope=i,this._once=r;}}class Y{initEventHandler(){this._callbacks=new Map,this._callbackActive=new Map;}_addCallback(e,t,s,i){if(this._callbacks.has(e)||this._callbacks.set(e,[]),this._callbackActive.has(e)){let t=this._callbackActive.get(e);t&&t===this._callbacks.get(e)&&this._callbackActive.set(e,t.slice());}let r=new j(this,e,t,s,i);return this._callbacks.get(e).push(r),r}on(e,t,s){return undefined===s&&(s=this),this._addCallback(e,t,s,false)}once(e,t,s){return undefined===s&&(s=this),this._addCallback(e,t,s,true)}off(e,t,s){if(e)this._callbackActive.has(e)&&this._callbackActive.get(e)===this._callbacks.get(e)&&this._callbackActive.set(e,this._callbackActive.get(e).slice());else for(let[e,t]of this._callbackActive)this._callbacks.has(e)&&this._callbacks.get(e)===t&&this._callbackActive.set(e,t.slice());if(e){if(t){let i=this._callbacks.get(e);if(!i)return this;for(let e=0;e<i.length;e++)i[e].callback===t&&(!s||i[e].scope===s)&&(i[e].removed=true,i.splice(e,1),e--);0===i.length&&this._callbacks.delete(e);}else {let t=this._callbacks.get(e);if(t){for(let e=0;e<t.length;e++)t[e].removed=true;this._callbacks.delete(e);}}}else {for(let e of this._callbacks.values())for(let t=0;t<e.length;t++)e[t].removed=true;this._callbacks.clear();}return this}offByHandle(e){let t=e.name;e.removed=true,this._callbackActive.has(t)&&this._callbackActive.get(t)===this._callbacks.get(t)&&this._callbackActive.set(t,this._callbackActive.get(t).slice());let s=this._callbacks.get(t);if(!s)return this;let i=s.indexOf(e);return -1!==i&&(s.splice(i,1),0===s.length&&this._callbacks.delete(t)),this}fire(e,t,s,i,r,a,n,o,l){let h;if(!e)return this;let d=this._callbacks.get(e);if(!d)return this;this._callbackActive.has(e)?this._callbackActive.get(e)!==d&&(h=d.slice()):this._callbackActive.set(e,d);for(let d=0;(h||this._callbackActive.get(e))&&d<(h||this._callbackActive.get(e)).length;d++){let c=(h||this._callbackActive.get(e))[d];if(c.callback&&(c.callback.call(c.scope,t,s,i,r,a,n,o,l),c._once)){let t=this._callbacks.get(e),s=t?t.indexOf(c):-1;if(-1!==s){this._callbackActive.get(e)===t&&this._callbackActive.set(e,this._callbackActive.get(e).slice());let i=this._callbacks.get(e);if(!i)continue;i[s].removed=true,i.splice(s,1),0===i.length&&this._callbacks.delete(e);}}}return h||this._callbackActive.delete(e),this}hasEvent(e){var t;return !!(null==(t=this._callbacks.get(e))?undefined:t.length)}constructor(){this._callbacks=new Map,this._callbackActive=new Map;}}class q{push(e,t){if(this._index[e])throw Error("Key already in index "+e);let s=this._list.push(t)-1;this._index[e]=s;}has(e){return undefined!==this._index[e]}get(e){let t=this._index[e];return undefined!==t?this._list[t]:null}remove(e){let t=this._index[e];if(undefined!==t){for(e in this._list.splice(t,1),delete this._index[e],this._index){let s=this._index[e];s>t&&(this._index[e]=s-1);}return true}return false}list(){return this._list}clear(){for(let e in this._list.length=0,this._index)delete this._index[e];}constructor(){this._list=[],this._index={};}}class K{static loadScript(e,t){let s=document.createElement("script");s.setAttribute("src",e),s.onload=()=>{t(null);},s.onerror=()=>{t("Failed to load script='"+e+"'");},document.body.appendChild(s);}static loadWasm(e,t,s){let i=K.wasmSupported()&&t.glueUrl&&t.wasmUrl?t.glueUrl:t.fallbackUrl;i?K.loadScript(i,i=>{if(i)s(i,null);else {let i=window[e];window[e]=undefined,i({locateFile:()=>t.wasmUrl,onAbort:()=>{s("wasm module aborted.");}}).then(e=>{s(null,e);});}}):s("No supported wasm modules found.",null);}static getModule(e){return K.modules.hasOwnProperty(e)||(K.modules[e]={config:null,initializing:false,instance:null,callbacks:[]}),K.modules[e]}static initialize(e,t){if(t.initializing)return;let s=t.config;(s.glueUrl||s.wasmUrl||s.fallbackUrl)&&(t.initializing=true,K.loadWasm(e,s,(e,i)=>{e?s.errorHandler&&s.errorHandler(e):(t.instance=i,t.callbacks.forEach(e=>{e(i);}));}));}}K.modules={},K.wasmSupported=(e=>{let t={},s=t;return ()=>(s===t&&(s=e()),s)})(()=>{try{if("object"==typeof WebAssembly&&"function"==typeof WebAssembly.instantiate){let e=new WebAssembly.Module(Uint8Array.of(0,97,115,109,1,0,0,0));if(e instanceof WebAssembly.Module)return new WebAssembly.Instance(e)instanceof WebAssembly.Instance}}catch(e){}return false});class Z{static setConfig(e,t){let s=K.getModule(e);s.config=t,s.callbacks.length>0&&K.initialize(e,s);}static getConfig(e){var t,s;return null==(s=K.modules)?undefined:null==(t=s[e])?undefined:t.config}static getInstance(e,t){let s=K.getModule(e);s.instance?t(s.instance):(s.callbacks.push(t),s.config&&K.initialize(e,s));}}class Q{get remainingBytes(){return this.dataView.byteLength-this.offset}reset(e){ undefined===e&&(e=0),this.offset=e;}skip(e){this.offset+=e;}align(e){this.offset=this.offset+e-1&~(e-1);}_inc(e){return this.offset+=e,this.offset-e}readChar(){return String.fromCharCode(this.dataView.getUint8(this.offset++))}readChars(e){let t="";for(let s=0;s<e;++s)t+=this.readChar();return t}readU8(){return this.dataView.getUint8(this.offset++)}readU16(){return this.dataView.getUint16(this._inc(2),true)}readU32(){return this.dataView.getUint32(this._inc(4),true)}readU64(){return this.readU32()+0x100000000*this.readU32()}readU32be(){return this.dataView.getUint32(this._inc(4),false)}readArray(e){for(let t=0;t<e.length;++t)e[t]=this.readU8();}readLine(){let e=this.dataView,t="";for(;!(this.offset>=e.byteLength);){let e=String.fromCharCode(this.readU8());if("\n"===e)break;t+=e;}return t}constructor(e){this.offset=0,this.arraybuffer=e,this.dataView=new DataView(e);}}class J{_binarySearch(e){let t,s,i=0,r=this.items.length-1,a=e[this._sortBy];for(;i<=r;)t=Math.floor((i+r)/2),(s=this.items[t][this._sortBy])<=a?i=t+1:s>a&&(r=t-1);return i}_doSort(e,t){let s=this._sortBy;return e[s]-t[s]}insert(e){let t=this._binarySearch(e);this.items.splice(t,0,e),this.length++,this.loopIndex>=t&&this.loopIndex++;}append(e){this.items.push(e),this.length++;}remove(e){let t=this.items.indexOf(e);!(t<0)&&(this.items.splice(t,1),this.length--,this.loopIndex>=t&&this.loopIndex--);}sort(){let e=this.loopIndex>=0?this.items[this.loopIndex]:null;this.items.sort(this._sortHandler),null!==e&&(this.loopIndex=this.items.indexOf(e));}constructor(e){this.items=[],this.length=0,this.loopIndex=-1,this._sortBy=e.sortBy,this._sortHandler=this._doSort.bind(this);}}class $ extends Y{add(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];let i=false,r=this._processArguments(t,true);if(!r.length)return i;for(let e=0;e<r.length;e++)this._index[r[e]]||(i=true,this._index[r[e]]=true,this._list.push(r[e]),this.fire("add",r[e],this._parent));return i&&this.fire("change",this._parent),i}remove(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];let i=false;if(!this._list.length)return i;let r=this._processArguments(t,true);if(!r.length)return i;for(let e=0;e<r.length;e++)this._index[r[e]]&&(i=true,delete this._index[r[e]],this._list.splice(this._list.indexOf(r[e]),1),this.fire("remove",r[e],this._parent));return i&&this.fire("change",this._parent),i}clear(){if(!this._list.length)return;let e=this._list.slice(0);this._list=[],this._index={};for(let t=0;t<e.length;t++)this.fire("remove",e[t],this._parent);this.fire("change",this._parent);}has(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return !!this._list.length&&this._has(this._processArguments(t))}_has(e){if(!this._list.length||!e.length)return false;for(let t=0;t<e.length;t++)if(1===e[t].length){if(this._index[e[t][0]])return true}else {let s=true;for(let i=0;i<e[t].length;i++)if(!this._index[e[t][i]]){s=false;break}if(s)return true}return false}list(){return this._list.slice(0)}_processArguments(e,t){let s=[],i=[];if(!e||!e.length)return s;for(let r=0;r<e.length;r++)if(e[r]instanceof Array){t||(i=[]);for(let a=0;a<e[r].length;a++)"string"==typeof e[r][a]&&(t?s.push(e[r][a]):i.push(e[r][a]));!t&&i.length&&s.push(i);}else "string"==typeof e[r]&&(t?s.push(e[r]):s.push([e[r]]));return s}get size(){return this._list.length}constructor(e){super(),this._index={},this._list=[],this._parent=e;}}$.EVENT_ADD="add",$.EVENT_REMOVE="remove",$.EVENT_CHANGE="change";let ee="undefined"!=typeof window&&window.performance&&window.performance.now?performance.now.bind(performance):Date.now,et=/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class es{toString(){let e="";return this.scheme&&(e+=""+this.scheme+":"),this.authority&&(e+="//"+this.authority),e+=this.path,this.query&&(e+="?"+this.query),this.fragment&&(e+="#"+this.fragment),e}getQuery(){let e={};if(this.query)for(let t of decodeURIComponent(this.query).split("&")){let s=t.split("=");e[s[0]]=s[1];}return e}setQuery(e){let t="";for(let s in e)e.hasOwnProperty(s)&&(""!==t&&(t+="&"),t+=encodeURIComponent(s)+"="+encodeURIComponent(e[s]));this.query=t;}constructor(e){let t=e.match(et);this.scheme=t[2],this.authority=t[4],this.path=t[5],this.query=t[7],this.fragment=t[9];}}class ei{static set(e,t){}static get(e){return ei._traceChannels.has(e)}}ei._traceChannels=new Set,ei.stack=false;let er={DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,clamp:(e,t,s)=>e>=s?s:e<=t?t:e,intToBytes24:e=>[e>>16&255,e>>8&255,255&e],intToBytes32:e=>[e>>24&255,e>>16&255,e>>8&255,255&e],bytesToInt24:(e,t,s)=>(e.length&&(s=e[2],t=e[1],e=e[0]),e<<16|t<<8|s),bytesToInt32:(e,t,s,i)=>(e.length&&(i=e[3],s=e[2],t=e[1],e=e[0]),(e<<24|t<<16|s<<8|i)>>>0),lerp:(e,t,s)=>e+(t-e)*er.clamp(s,0,1),lerpAngle:(e,t,s)=>(t-e>180&&(t-=360),t-e<-180&&(t+=360),er.lerp(e,t,er.clamp(s,0,1))),powerOfTwo:e=>0!==e&&!(e&e-1),nextPowerOfTwo:e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),nearestPowerOfTwo:e=>Math.pow(2,Math.round(Math.log(e)/Math.log(2))),random:(e,t)=>Math.random()*(t-e)+e,smoothstep:(e,t,s)=>s<=e?0:s>=t?1:(s=(s-e)/(t-e))*s*(3-2*s),smootherstep:(e,t,s)=>s<=e?0:s>=t?1:(s=(s-e)/(t-e))*s*s*(s*(6*s-15)+10),roundUp:(e,t)=>0===t?e:Math.ceil(e/t)*t,between(e,t,s,i){let r=Math.min(t,s),a=Math.max(t,s);return i?e>=r&&e<=a:e>r&&e<a}};class ea{clone(){return new this.constructor(this.r,this.g,this.b,this.a)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this.a=e.a,this}equals(e){return this.r===e.r&&this.g===e.g&&this.b===e.b&&this.a===e.a}set(e,t,s,i){return undefined===i&&(i=1),this.r=e,this.g=t,this.b=s,this.a=i,this}lerp(e,t,s){return this.r=e.r+s*(t.r-e.r),this.g=e.g+s*(t.g-e.g),this.b=e.b+s*(t.b-e.b),this.a=e.a+s*(t.a-e.a),this}linear(e){return undefined===e&&(e=this),this.r=Math.pow(e.r,2.2),this.g=Math.pow(e.g,2.2),this.b=Math.pow(e.b,2.2),this.a=e.a,this}gamma(e){return undefined===e&&(e=this),this.r=Math.pow(e.r,1/2.2),this.g=Math.pow(e.g,1/2.2),this.b=Math.pow(e.b,1/2.2),this.a=e.a,this}mulScalar(e){return this.r*=e,this.g*=e,this.b*=e,this}fromString(e){let t;let s=parseInt(e.replace("#","0x"),16);return e.length>7?t=er.intToBytes32(s):(t=er.intToBytes24(s))[3]=255,this.set(t[0]/255,t[1]/255,t[2]/255,t[3]/255),this}fromArray(e,t){var s,i,r,a;return undefined===t&&(t=0),this.r=null!=(s=e[t])?s:this.r,this.g=null!=(i=e[t+1])?i:this.g,this.b=null!=(r=e[t+2])?r:this.b,this.a=null!=(a=e[t+3])?a:this.a,this}toString(e,t){let{r:s,g:i,b:r,a}=this;if(t||s>1||i>1||r>1)return s.toFixed(3)+", "+i.toFixed(3)+", "+r.toFixed(3)+", "+a.toFixed(3);let n="#"+(0x1000000+(Math.round(255*s)<<16)+(Math.round(255*i)<<8)+Math.round(255*r)).toString(16).slice(1);if(true===e){let e=Math.round(255*a).toString(16);this.a<16/255?n+="0"+e:n+=e;}return n}toArray(e,t,s){return undefined===e&&(e=[]),undefined===t&&(t=0),undefined===s&&(s=true),e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,s&&(e[t+3]=this.a),e}constructor(e=0,t=0,s=0,i=1){let r=e.length;if(3===r||4===r){var a;this.r=e[0],this.g=e[1],this.b=e[2],this.a=null!=(a=e[3])?a:1;}else this.r=e,this.g=t,this.b=s,this.a=i;}}ea.BLACK=Object.freeze(new ea(0,0,0,1)),ea.BLUE=Object.freeze(new ea(0,0,1,1)),ea.CYAN=Object.freeze(new ea(0,1,1,1)),ea.GRAY=Object.freeze(new ea(.5,.5,.5,1)),ea.GREEN=Object.freeze(new ea(0,1,0,1)),ea.MAGENTA=Object.freeze(new ea(1,0,1,1)),ea.RED=Object.freeze(new ea(1,0,0,1)),ea.WHITE=Object.freeze(new ea(1,1,1,1)),ea.YELLOW=Object.freeze(new ea(1,1,0,1));class en{evaluate(e,t){let s;undefined===t&&(t=false),(t||e<this._left||e>=this._right)&&this._reset(e);let i=this._curve.type;if(5===i)s=this._p0;else {let t=0===this._recip?0:(e-this._left)*this._recip;s=0===i?er.lerp(this._p0,this._p1,t):1===i?er.lerp(this._p0,this._p1,t*t*(3-2*t)):this._evaluateHermite(this._p0,this._p1,this._m0,this._m1,t);}return s}_reset(e){let t=this._curve.keys,s=t.length;if(s){if(e<t[0][0])this._left=-1/0,this._right=t[0][0],this._recip=0,this._p0=this._p1=t[0][1],this._m0=this._m1=0;else if(e>=t[s-1][0])this._left=t[s-1][0],this._right=1/0,this._recip=0,this._p0=this._p1=t[s-1][1],this._m0=this._m1=0;else {let s=0;for(;e>=t[s+1][0];)s++;this._left=t[s][0],this._right=t[s+1][0];let i=1/(this._right-this._left);this._recip=isFinite(i)?i:0,this._p0=t[s][1],this._p1=t[s+1][1],4===this._curve.type&&this._calcTangents(t,s);}}else this._left=-1/0,this._right=1/0,this._recip=0,this._p0=this._p1=this._m0=this._m1=0;}_calcTangents(e,t){let s,i;let r=e[t],a=e[t+1];if(s=0===t?[e[0][0]+(e[0][0]-e[1][0]),e[0][1]+(e[0][1]-e[1][1])]:e[t-1],i=t===e.length-2?[e[t+1][0]+(e[t+1][0]-e[t][0]),e[t+1][1]+(e[t+1][1]-e[t][1])]:e[t+2],4===this._curve.type){let e=2*(a[0]-r[0])/(a[0]-s[0]),t=2*(a[0]-r[0])/(i[0]-r[0]);this._m0=this._curve.tension*(isFinite(e)?e:0)*(a[1]-s[1]),this._m1=this._curve.tension*(isFinite(t)?t:0)*(i[1]-r[1]);}else {let e=(a[0]-r[0])/(r[0]-s[0]),t=(a[0]-r[0])/(i[0]-a[0]),n=r[1]+(s[1]-r[1])*(isFinite(e)?e:0),o=a[1]+(i[1]-a[1])*(isFinite(t)?t:0),l=this._curve.tension;this._m0=l*(a[1]-n),this._m1=l*(o-r[1]);}}_evaluateHermite(e,t,s,i,r){let a=r*r,n=r+r,o=1-r,l=o*o;return (1+n)*l*e+r*l*s+a*(3-n)*t+a*(r-1)*i}constructor(e,t=0){this._left=-1/0,this._right=1/0,this._recip=0,this._p0=0,this._p1=0,this._m0=0,this._m1=0,this._curve=e,this._reset(t);}}class eo{get length(){return this.keys.length}add(e,t){let s=this.keys,i=s.length,r=0;for(;r<i&&!(s[r][0]>e);r++);let a=[e,t];return this.keys.splice(r,0,a),a}get(e){return this.keys[e]}sort(){this.keys.sort((e,t)=>e[0]-t[0]);}value(e){return this._eval.evaluate(e,true)}closest(e){let t=this.keys,s=t.length,i=2,r=null;for(let a=0;a<s;a++){let s=Math.abs(e-t[a][0]);if(i>=s)i=s,r=t[a];else break}return r}clone(){let e=new this.constructor;return e.keys=this.keys.map(e=>[...e]),e.type=this.type,e.tension=this.tension,e}quantize(e){let t=new Float32Array(e=Math.max(e,2)),s=1/(e-1);t[0]=this._eval.evaluate(0,true);for(let i=1;i<e;i++)t[i]=this._eval.evaluate(s*i);return t}quantizeClamped(e,t,s){let i=this.quantize(e);for(let e=0;e<i.length;++e)i[e]=Math.min(s,Math.max(t,i[e]));return i}constructor(e){if(this.keys=[],this.type=1,this.tension=.5,this._eval=new en(this),e)for(let t=0;t<e.length-1;t+=2)this.keys.push([e[t],e[t+1]]);this.sort();}}class el{get length(){return this.curves.length}set type(e){this._type=e;for(let t=0;t<this.curves.length;t++)this.curves[t].type=e;}get type(){return this._type}get(e){return this.curves[e]}value(e,t){ undefined===t&&(t=[]);let s=this.curves.length;t.length=s;for(let i=0;i<s;i++)t[i]=this.curves[i].value(e);return t}clone(){let e=new this.constructor;e.curves=[];for(let t=0;t<this.curves.length;t++)e.curves.push(this.curves[t].clone());return e._type=this._type,e}quantize(e){e=Math.max(e,2);let t=this.curves.length,s=new Float32Array(e*t),i=1/(e-1);for(let r=0;r<t;r++){let a=new en(this.curves[r]);for(let n=0;n<e;n++)s[n*t+r]=a.evaluate(i*n);}return s}quantizeClamped(e,t,s){let i=this.quantize(e);for(let e=0;e<i.length;++e)i[e]=Math.min(s,Math.max(t,i[e]));return i}constructor(){if(this.curves=[],this._type=1,arguments.length>1)for(let e=0;e<arguments.length;e++)this.curves.push(new eo(arguments[e]));else if(0==arguments.length)this.curves.push(new eo);else {let e=arguments[0];if("number"==typeof e)for(let t=0;t<e;t++)this.curves.push(new eo);else for(let t=0;t<e.length;t++)this.curves.push(new eo(e[t]));}}}let eh=1/255,ed=new Float32Array(1),ec=new Int32Array(ed.buffer);class eu{static float2Half(e){ed[0]=e;let t=ec[0],s=t>>16&32768,i=t>>12&2047,r=t>>23&255;return r<103?s:r>142?(s|=31744,s|=(255===r?0:1)&&8388607&t):r<113?(i|=2048,s|=(i>>114-r)+(i>>113-r&1)):(s|=r-112<<10|i>>1,s+=1&i)}static float2Bytes(e,t,s,i){let r=255*e%1;if(t[s+0]=Math.round((e%1-eh*r)*255),i>1){let a=65025*e%1;if(t[s+1]=Math.round((r-eh*a)*255),i>2){let r=0xfd02ff*e%1;t[s+2]=Math.round((a-eh*r)*255),i>3&&(t[s+3]=Math.round(255*r));}}}static float2BytesRange(e,t,s,i,r,a){e=er.clamp((e-i)/(r-i),0,1),eu.float2Bytes(e,t,s,a);}static float2RGBA8(e,t){ed[0]=e;let s=ec[0];t.r=(s>>24&255)/255,t.g=(s>>16&255)/255,t.b=(s>>8&255)/255,t.a=(255&s)/255;}}class ep{static concentric(e,t){let s=[];s.push(0,0);let i=2*Math.PI/e/t;for(let t=1;t<=e;t++){let r=t/e,a=Math.max(1,Math.floor(2*Math.PI*r/i)),n=2*Math.PI/a;for(let e=0;e<a;e++){let t=e*n,i=r*Math.cos(t),a=r*Math.sin(t);s.push(i,a);}}return s}}class em{add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}add2(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addScaled(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}cross(e,t){let s=e.x,i=e.y,r=e.z,a=t.x,n=t.y,o=t.z;return this.x=i*o-n*r,this.y=r*a-o*s,this.z=s*n-a*i,this}distance(e){let t=this.x-e.x,s=this.y-e.y,i=this.z-e.z;return Math.sqrt(t*t+s*s+i*i)}div(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}div2(e,t){return this.x=e.x/t.x,this.y=e.y/t.y,this.z=e.z/t.z,this}divScalar(e){return this.x/=e,this.y/=e,this.z/=e,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}equals(e){return this.x===e.x&&this.y===e.y&&this.z===e.z}equalsApprox(e,t){return undefined===t&&(t=1e-6),Math.abs(this.x-e.x)<t&&Math.abs(this.y-e.y)<t&&Math.abs(this.z-e.z)<t}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}lerp(e,t,s){return this.x=e.x+s*(t.x-e.x),this.y=e.y+s*(t.y-e.y),this.z=e.z+s*(t.z-e.z),this}mul(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}mul2(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}mulScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}normalize(e){ undefined===e&&(e=this);let t=e.x*e.x+e.y*e.y+e.z*e.z;if(t>0){let s=1/Math.sqrt(t);this.x=e.x*s,this.y=e.y*s,this.z=e.z*s;}return this}floor(e){return undefined===e&&(e=this),this.x=Math.floor(e.x),this.y=Math.floor(e.y),this.z=Math.floor(e.z),this}ceil(e){return undefined===e&&(e=this),this.x=Math.ceil(e.x),this.y=Math.ceil(e.y),this.z=Math.ceil(e.z),this}round(e){return undefined===e&&(e=this),this.x=Math.round(e.x),this.y=Math.round(e.y),this.z=Math.round(e.z),this}min(e){return e.x<this.x&&(this.x=e.x),e.y<this.y&&(this.y=e.y),e.z<this.z&&(this.z=e.z),this}max(e){return e.x>this.x&&(this.x=e.x),e.y>this.y&&(this.y=e.y),e.z>this.z&&(this.z=e.z),this}project(e){let t=(this.x*e.x+this.y*e.y+this.z*e.z)/(e.x*e.x+e.y*e.y+e.z*e.z);return this.x=e.x*t,this.y=e.y*t,this.z=e.z*t,this}set(e,t,s){return this.x=e,this.y=t,this.z=s,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}sub2(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}fromArray(e,t){var s,i,r;return undefined===t&&(t=0),this.x=null!=(s=e[t])?s:this.x,this.y=null!=(i=e[t+1])?i:this.y,this.z=null!=(r=e[t+2])?r:this.z,this}toString(){return "["+this.x+", "+this.y+", "+this.z+"]"}toArray(e,t){return undefined===e&&(e=[]),undefined===t&&(t=0),e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}constructor(e=0,t=0,s=0){3===e.length?(this.x=e[0],this.y=e[1],this.z=e[2]):(this.x=e,this.y=t,this.z=s);}}em.ZERO=Object.freeze(new em(0,0,0)),em.HALF=Object.freeze(new em(.5,.5,.5)),em.ONE=Object.freeze(new em(1,1,1)),em.UP=Object.freeze(new em(0,1,0)),em.DOWN=Object.freeze(new em(0,-1,0)),em.RIGHT=Object.freeze(new em(1,0,0)),em.LEFT=Object.freeze(new em(-1,0,0)),em.FORWARD=Object.freeze(new em(0,0,-1)),em.BACK=Object.freeze(new em(0,0,1));class ef{clone(){return new this.constructor().copy(this)}copy(e){let t=e.data,s=this.data;return s[0]=t[0],s[1]=t[1],s[2]=t[2],s[3]=t[3],s[4]=t[4],s[5]=t[5],s[6]=t[6],s[7]=t[7],s[8]=t[8],this}set(e){let t=this.data;return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],this}getX(e){return undefined===e&&(e=new em),e.set(this.data[0],this.data[1],this.data[2])}getY(e){return undefined===e&&(e=new em),e.set(this.data[3],this.data[4],this.data[5])}getZ(e){return undefined===e&&(e=new em),e.set(this.data[6],this.data[7],this.data[8])}equals(e){let t=this.data,s=e.data;return t[0]===s[0]&&t[1]===s[1]&&t[2]===s[2]&&t[3]===s[3]&&t[4]===s[4]&&t[5]===s[5]&&t[6]===s[6]&&t[7]===s[7]&&t[8]===s[8]}isIdentity(){let e=this.data;return 1===e[0]&&0===e[1]&&0===e[2]&&0===e[3]&&1===e[4]&&0===e[5]&&0===e[6]&&0===e[7]&&1===e[8]}setIdentity(){let e=this.data;return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=0,e[7]=0,e[8]=1,this}toString(){return "["+this.data.join(", ")+"]"}transpose(e){ undefined===e&&(e=this);let t=e.data,s=this.data;if(t===s){let e;e=t[1],s[1]=t[3],s[3]=e,e=t[2],s[2]=t[6],s[6]=e,e=t[5],s[5]=t[7],s[7]=e;}else s[0]=t[0],s[1]=t[3],s[2]=t[6],s[3]=t[1],s[4]=t[4],s[5]=t[7],s[6]=t[2],s[7]=t[5],s[8]=t[8];return this}setFromMat4(e){let t=e.data,s=this.data;return s[0]=t[0],s[1]=t[1],s[2]=t[2],s[3]=t[4],s[4]=t[5],s[5]=t[6],s[6]=t[8],s[7]=t[9],s[8]=t[10],this}setFromQuat(e){let t=e.x,s=e.y,i=e.z,r=e.w,a=t+t,n=s+s,o=i+i,l=t*a,h=t*n,d=t*o,c=s*n,u=s*o,p=i*o,m=r*a,f=r*n,_=r*o,g=this.data;return g[0]=1-(c+p),g[1]=h+_,g[2]=d-f,g[3]=h-_,g[4]=1-(l+p),g[5]=u+m,g[6]=d+f,g[7]=u-m,g[8]=1-(l+c),this}invertMat4(e){let t=e.data,s=t[0],i=t[1],r=t[2],a=t[4],n=t[5],o=t[6],l=t[8],h=t[9],d=t[10],c=d*n-o*h,u=-d*a+o*l,p=h*a-n*l,m=s*c+i*u+r*p;if(0===m)this.setIdentity();else {let e=1/m,t=this.data;t[0]=c*e,t[1]=(-d*i+r*h)*e,t[2]=(o*i-r*n)*e,t[3]=u*e,t[4]=(d*s-r*l)*e,t[5]=(-o*s+r*a)*e,t[6]=p*e,t[7]=(-h*s+i*l)*e,t[8]=(n*s-i*a)*e;}return this}transformVector(e,t){ undefined===t&&(t=new em);let s=this.data,{x:i,y:r,z:a}=e;return t.x=i*s[0]+r*s[3]+a*s[6],t.y=i*s[1]+r*s[4]+a*s[7],t.z=i*s[2]+r*s[5]+a*s[8],t}constructor(){this.data=new Float32Array(9),this.data[0]=this.data[4]=this.data[8]=1;}}ef.IDENTITY=Object.freeze(new ef),ef.ZERO=Object.freeze(new ef().set([0,0,0,0,0,0,0,0,0]));class e_{add(e){return this.x+=e.x,this.y+=e.y,this}add2(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addScaled(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}cross(e){return this.x*e.y-this.y*e.x}distance(e){let t=this.x-e.x,s=this.y-e.y;return Math.sqrt(t*t+s*s)}div(e){return this.x/=e.x,this.y/=e.y,this}div2(e,t){return this.x=e.x/t.x,this.y=e.y/t.y,this}divScalar(e){return this.x/=e,this.y/=e,this}dot(e){return this.x*e.x+this.y*e.y}equals(e){return this.x===e.x&&this.y===e.y}equalsApprox(e,t){return undefined===t&&(t=1e-6),Math.abs(this.x-e.x)<t&&Math.abs(this.y-e.y)<t}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}lengthSq(){return this.x*this.x+this.y*this.y}lerp(e,t,s){return this.x=e.x+s*(t.x-e.x),this.y=e.y+s*(t.y-e.y),this}mul(e){return this.x*=e.x,this.y*=e.y,this}mul2(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this}mulScalar(e){return this.x*=e,this.y*=e,this}normalize(e){ undefined===e&&(e=this);let t=e.x*e.x+e.y*e.y;if(t>0){let s=1/Math.sqrt(t);this.x=e.x*s,this.y=e.y*s;}return this}rotate(e){let t=Math.atan2(this.x,this.y)+e*er.DEG_TO_RAD,s=Math.sqrt(this.x*this.x+this.y*this.y);return this.x=Math.sin(t)*s,this.y=Math.cos(t)*s,this}angle(){return Math.atan2(this.x,this.y)*er.RAD_TO_DEG}angleTo(e){return Math.atan2(this.x*e.y+this.y*e.x,this.x*e.x+this.y*e.y)*er.RAD_TO_DEG}floor(e){return undefined===e&&(e=this),this.x=Math.floor(e.x),this.y=Math.floor(e.y),this}ceil(e){return undefined===e&&(e=this),this.x=Math.ceil(e.x),this.y=Math.ceil(e.y),this}round(e){return undefined===e&&(e=this),this.x=Math.round(e.x),this.y=Math.round(e.y),this}min(e){return e.x<this.x&&(this.x=e.x),e.y<this.y&&(this.y=e.y),this}max(e){return e.x>this.x&&(this.x=e.x),e.y>this.y&&(this.y=e.y),this}set(e,t){return this.x=e,this.y=t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}sub2(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}subScalar(e){return this.x-=e,this.y-=e,this}fromArray(e,t){var s,i;return undefined===t&&(t=0),this.x=null!=(s=e[t])?s:this.x,this.y=null!=(i=e[t+1])?i:this.y,this}toString(){return "["+this.x+", "+this.y+"]"}toArray(e,t){return undefined===e&&(e=[]),undefined===t&&(t=0),e[t]=this.x,e[t+1]=this.y,e}static angleRad(e,t){return Math.atan2(e.x*t.y-e.y*t.x,e.x*t.x+e.y*t.y)}constructor(e=0,t=0){2===e.length?(this.x=e[0],this.y=e[1]):(this.x=e,this.y=t);}}e_.ZERO=Object.freeze(new e_(0,0)),e_.HALF=Object.freeze(new e_(.5,.5)),e_.ONE=Object.freeze(new e_(1,1)),e_.UP=Object.freeze(new e_(0,1)),e_.DOWN=Object.freeze(new e_(0,-1)),e_.RIGHT=Object.freeze(new e_(1,0)),e_.LEFT=Object.freeze(new e_(-1,0));class eg{add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}add2(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addScaled(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w,this}div(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}div2(e,t){return this.x=e.x/t.x,this.y=e.y/t.y,this.z=e.z/t.z,this.w=e.w/t.w,this}divScalar(e){return this.x/=e,this.y/=e,this.z/=e,this.w/=e,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}equals(e){return this.x===e.x&&this.y===e.y&&this.z===e.z&&this.w===e.w}equalsApprox(e,t){return undefined===t&&(t=1e-6),Math.abs(this.x-e.x)<t&&Math.abs(this.y-e.y)<t&&Math.abs(this.z-e.z)<t&&Math.abs(this.w-e.w)<t}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}lerp(e,t,s){return this.x=e.x+s*(t.x-e.x),this.y=e.y+s*(t.y-e.y),this.z=e.z+s*(t.z-e.z),this.w=e.w+s*(t.w-e.w),this}mul(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}mul2(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this.w=e.w*t.w,this}mulScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}normalize(e){ undefined===e&&(e=this);let t=e.x*e.x+e.y*e.y+e.z*e.z+e.w*e.w;if(t>0){let s=1/Math.sqrt(t);this.x=e.x*s,this.y=e.y*s,this.z=e.z*s,this.w=e.w*s;}return this}floor(e){return undefined===e&&(e=this),this.x=Math.floor(e.x),this.y=Math.floor(e.y),this.z=Math.floor(e.z),this.w=Math.floor(e.w),this}ceil(e){return undefined===e&&(e=this),this.x=Math.ceil(e.x),this.y=Math.ceil(e.y),this.z=Math.ceil(e.z),this.w=Math.ceil(e.w),this}round(e){return undefined===e&&(e=this),this.x=Math.round(e.x),this.y=Math.round(e.y),this.z=Math.round(e.z),this.w=Math.round(e.w),this}min(e){return e.x<this.x&&(this.x=e.x),e.y<this.y&&(this.y=e.y),e.z<this.z&&(this.z=e.z),e.w<this.w&&(this.w=e.w),this}max(e){return e.x>this.x&&(this.x=e.x),e.y>this.y&&(this.y=e.y),e.z>this.z&&(this.z=e.z),e.w>this.w&&(this.w=e.w),this}set(e,t,s,i){return this.x=e,this.y=t,this.z=s,this.w=i,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}sub2(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}fromArray(e,t){var s,i,r,a;return undefined===t&&(t=0),this.x=null!=(s=e[t])?s:this.x,this.y=null!=(i=e[t+1])?i:this.y,this.z=null!=(r=e[t+2])?r:this.z,this.w=null!=(a=e[t+3])?a:this.w,this}toString(){return "["+this.x+", "+this.y+", "+this.z+", "+this.w+"]"}toArray(e,t){return undefined===e&&(e=[]),undefined===t&&(t=0),e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}constructor(e=0,t=0,s=0,i=0){4===e.length?(this.x=e[0],this.y=e[1],this.z=e[2],this.w=e[3]):(this.x=e,this.y=t,this.z=s,this.w=i);}}eg.ZERO=Object.freeze(new eg(0,0,0,0)),eg.HALF=Object.freeze(new eg(.5,.5,.5,.5)),eg.ONE=Object.freeze(new eg(1,1,1,1));let ey=new e_,ev=new em,ex=new em,eS=new em,eb=new em;class eT{static _getPerspectiveHalfSize(e,t,s,i,r){r?(e.x=i*Math.tan(t*Math.PI/360),e.y=e.x/s):(e.y=i*Math.tan(t*Math.PI/360),e.x=e.y*s);}add2(e,t){let s=e.data,i=t.data,r=this.data;return r[0]=s[0]+i[0],r[1]=s[1]+i[1],r[2]=s[2]+i[2],r[3]=s[3]+i[3],r[4]=s[4]+i[4],r[5]=s[5]+i[5],r[6]=s[6]+i[6],r[7]=s[7]+i[7],r[8]=s[8]+i[8],r[9]=s[9]+i[9],r[10]=s[10]+i[10],r[11]=s[11]+i[11],r[12]=s[12]+i[12],r[13]=s[13]+i[13],r[14]=s[14]+i[14],r[15]=s[15]+i[15],this}add(e){return this.add2(this,e)}clone(){return new this.constructor().copy(this)}copy(e){let t=e.data,s=this.data;return s[0]=t[0],s[1]=t[1],s[2]=t[2],s[3]=t[3],s[4]=t[4],s[5]=t[5],s[6]=t[6],s[7]=t[7],s[8]=t[8],s[9]=t[9],s[10]=t[10],s[11]=t[11],s[12]=t[12],s[13]=t[13],s[14]=t[14],s[15]=t[15],this}equals(e){let t=this.data,s=e.data;return t[0]===s[0]&&t[1]===s[1]&&t[2]===s[2]&&t[3]===s[3]&&t[4]===s[4]&&t[5]===s[5]&&t[6]===s[6]&&t[7]===s[7]&&t[8]===s[8]&&t[9]===s[9]&&t[10]===s[10]&&t[11]===s[11]&&t[12]===s[12]&&t[13]===s[13]&&t[14]===s[14]&&t[15]===s[15]}isIdentity(){let e=this.data;return 1===e[0]&&0===e[1]&&0===e[2]&&0===e[3]&&0===e[4]&&1===e[5]&&0===e[6]&&0===e[7]&&0===e[8]&&0===e[9]&&1===e[10]&&0===e[11]&&0===e[12]&&0===e[13]&&0===e[14]&&1===e[15]}mul2(e,t){let s,i,r,a;let n=e.data,o=t.data,l=this.data,h=n[0],d=n[1],c=n[2],u=n[3],p=n[4],m=n[5],f=n[6],_=n[7],g=n[8],y=n[9],v=n[10],x=n[11],S=n[12],b=n[13],T=n[14],w=n[15];return s=o[0],i=o[1],r=o[2],a=o[3],l[0]=h*s+p*i+g*r+S*a,l[1]=d*s+m*i+y*r+b*a,l[2]=c*s+f*i+v*r+T*a,l[3]=u*s+_*i+x*r+w*a,s=o[4],i=o[5],r=o[6],a=o[7],l[4]=h*s+p*i+g*r+S*a,l[5]=d*s+m*i+y*r+b*a,l[6]=c*s+f*i+v*r+T*a,l[7]=u*s+_*i+x*r+w*a,s=o[8],i=o[9],r=o[10],a=o[11],l[8]=h*s+p*i+g*r+S*a,l[9]=d*s+m*i+y*r+b*a,l[10]=c*s+f*i+v*r+T*a,l[11]=u*s+_*i+x*r+w*a,s=o[12],i=o[13],r=o[14],a=o[15],l[12]=h*s+p*i+g*r+S*a,l[13]=d*s+m*i+y*r+b*a,l[14]=c*s+f*i+v*r+T*a,l[15]=u*s+_*i+x*r+w*a,this}mulAffine2(e,t){let s,i,r;let a=e.data,n=t.data,o=this.data,l=a[0],h=a[1],d=a[2],c=a[4],u=a[5],p=a[6],m=a[8],f=a[9],_=a[10],g=a[12],y=a[13],v=a[14];return s=n[0],i=n[1],r=n[2],o[0]=l*s+c*i+m*r,o[1]=h*s+u*i+f*r,o[2]=d*s+p*i+_*r,o[3]=0,s=n[4],i=n[5],r=n[6],o[4]=l*s+c*i+m*r,o[5]=h*s+u*i+f*r,o[6]=d*s+p*i+_*r,o[7]=0,s=n[8],i=n[9],r=n[10],o[8]=l*s+c*i+m*r,o[9]=h*s+u*i+f*r,o[10]=d*s+p*i+_*r,o[11]=0,s=n[12],i=n[13],r=n[14],o[12]=l*s+c*i+m*r+g,o[13]=h*s+u*i+f*r+y,o[14]=d*s+p*i+_*r+v,o[15]=1,this}mul(e){return this.mul2(this,e)}transformPoint(e,t){ undefined===t&&(t=new em);let s=this.data,{x:i,y:r,z:a}=e;return t.x=i*s[0]+r*s[4]+a*s[8]+s[12],t.y=i*s[1]+r*s[5]+a*s[9]+s[13],t.z=i*s[2]+r*s[6]+a*s[10]+s[14],t}transformVector(e,t){ undefined===t&&(t=new em);let s=this.data,{x:i,y:r,z:a}=e;return t.x=i*s[0]+r*s[4]+a*s[8],t.y=i*s[1]+r*s[5]+a*s[9],t.z=i*s[2]+r*s[6]+a*s[10],t}transformVec4(e,t){ undefined===t&&(t=new eg);let s=this.data,{x:i,y:r,z:a,w:n}=e;return t.x=i*s[0]+r*s[4]+a*s[8]+n*s[12],t.y=i*s[1]+r*s[5]+a*s[9]+n*s[13],t.z=i*s[2]+r*s[6]+a*s[10]+n*s[14],t.w=i*s[3]+r*s[7]+a*s[11]+n*s[15],t}setLookAt(e,t,s){eS.sub2(e,t).normalize(),ex.copy(s).normalize(),ev.cross(ex,eS).normalize(),ex.cross(eS,ev);let i=this.data;return i[0]=ev.x,i[1]=ev.y,i[2]=ev.z,i[3]=0,i[4]=ex.x,i[5]=ex.y,i[6]=ex.z,i[7]=0,i[8]=eS.x,i[9]=eS.y,i[10]=eS.z,i[11]=0,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=1,this}setFrustum(e,t,s,i,r,a){let n=2*r,o=t-e,l=i-s,h=a-r,d=this.data;return d[0]=n/o,d[1]=0,d[2]=0,d[3]=0,d[4]=0,d[5]=n/l,d[6]=0,d[7]=0,d[8]=(t+e)/o,d[9]=(i+s)/l,d[10]=(-a-r)/h,d[11]=-1,d[12]=0,d[13]=0,d[14]=-n*a/h,d[15]=0,this}setPerspective(e,t,s,i,r){return eT._getPerspectiveHalfSize(ey,e,t,s,r),this.setFrustum(-ey.x,ey.x,-ey.y,ey.y,s,i)}setOrtho(e,t,s,i,r,a){let n=this.data;return n[0]=2/(t-e),n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=2/(i-s),n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[10]=-2/(a-r),n[11]=0,n[12]=-(t+e)/(t-e),n[13]=-(i+s)/(i-s),n[14]=-(a+r)/(a-r),n[15]=1,this}setFromAxisAngle(e,t){t*=er.DEG_TO_RAD;let{x:s,y:i,z:r}=e,a=Math.cos(t),n=Math.sin(t),o=1-a,l=o*s,h=o*i,d=this.data;return d[0]=l*s+a,d[1]=l*i+n*r,d[2]=l*r-n*i,d[3]=0,d[4]=l*i-n*r,d[5]=h*i+a,d[6]=h*r+n*s,d[7]=0,d[8]=l*r+n*i,d[9]=h*r-s*n,d[10]=o*r*r+a,d[11]=0,d[12]=0,d[13]=0,d[14]=0,d[15]=1,this}setTranslate(e,t,s){let i=this.data;return i[0]=1,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=1,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=1,i[11]=0,i[12]=e,i[13]=t,i[14]=s,i[15]=1,this}setScale(e,t,s){let i=this.data;return i[0]=e,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=t,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=s,i[11]=0,i[12]=0,i[13]=0,i[14]=0,i[15]=1,this}setViewport(e,t,s,i){let r=this.data;return r[0]=.5*s,r[1]=0,r[2]=0,r[3]=0,r[4]=0,r[5]=.5*i,r[6]=0,r[7]=0,r[8]=0,r[9]=0,r[10]=.5,r[11]=0,r[12]=e+.5*s,r[13]=t+.5*i,r[14]=.5,r[15]=1,this}setReflection(e,t){let s=e.x,i=e.y,r=e.z,a=this.data;return a[0]=1-2*s*s,a[1]=-2*s*i,a[2]=-2*s*r,a[3]=0,a[4]=-2*s*i,a[5]=1-2*i*i,a[6]=-2*i*r,a[7]=0,a[8]=-2*s*r,a[9]=-2*i*r,a[10]=1-2*r*r,a[11]=0,a[12]=-2*s*t,a[13]=-2*i*t,a[14]=-2*r*t,a[15]=1,this}invert(e){ undefined===e&&(e=this);let t=e.data,s=t[0],i=t[1],r=t[2],a=t[3],n=t[4],o=t[5],l=t[6],h=t[7],d=t[8],c=t[9],u=t[10],p=t[11],m=t[12],f=t[13],_=t[14],g=t[15],y=s*o-i*n,v=s*l-r*n,x=s*h-a*n,S=i*l-r*o,b=i*h-a*o,T=r*h-a*l,w=d*f-c*m,E=d*_-u*m,A=d*g-p*m,C=c*_-u*f,P=c*g-p*f,M=u*g-p*_,R=y*M-v*P+x*C+S*A-b*E+T*w;if(0===R)this.setIdentity();else {let e=1/R,t=this.data;t[0]=(o*M-l*P+h*C)*e,t[1]=(-i*M+r*P-a*C)*e,t[2]=(f*T-_*b+g*S)*e,t[3]=(-c*T+u*b-p*S)*e,t[4]=(-n*M+l*A-h*E)*e,t[5]=(s*M-r*A+a*E)*e,t[6]=(-m*T+_*x-g*v)*e,t[7]=(d*T-u*x+p*v)*e,t[8]=(n*P-o*A+h*w)*e,t[9]=(-s*P+i*A-a*w)*e,t[10]=(m*b-f*x+g*y)*e,t[11]=(-d*b+c*x-p*y)*e,t[12]=(-n*C+o*E-l*w)*e,t[13]=(s*C-i*E+r*w)*e,t[14]=(-m*S+f*v-_*y)*e,t[15]=(d*S-c*v+u*y)*e;}return this}set(e){let t=this.data;return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],this}setIdentity(){let e=this.data;return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}setTRS(e,t,s){let i=t.x,r=t.y,a=t.z,n=t.w,o=s.x,l=s.y,h=s.z,d=i+i,c=r+r,u=a+a,p=i*d,m=i*c,f=i*u,_=r*c,g=r*u,y=a*u,v=n*d,x=n*c,S=n*u,b=this.data;return b[0]=(1-(_+y))*o,b[1]=(m+S)*o,b[2]=(f-x)*o,b[3]=0,b[4]=(m-S)*l,b[5]=(1-(p+y))*l,b[6]=(g+v)*l,b[7]=0,b[8]=(f+x)*h,b[9]=(g-v)*h,b[10]=(1-(p+_))*h,b[11]=0,b[12]=e.x,b[13]=e.y,b[14]=e.z,b[15]=1,this}transpose(e){ undefined===e&&(e=this);let t=e.data,s=this.data;if(t===s){let e;e=t[1],s[1]=t[4],s[4]=e,e=t[2],s[2]=t[8],s[8]=e,e=t[3],s[3]=t[12],s[12]=e,e=t[6],s[6]=t[9],s[9]=e,e=t[7],s[7]=t[13],s[13]=e,e=t[11],s[11]=t[14],s[14]=e;}else s[0]=t[0],s[1]=t[4],s[2]=t[8],s[3]=t[12],s[4]=t[1],s[5]=t[5],s[6]=t[9],s[7]=t[13],s[8]=t[2],s[9]=t[6],s[10]=t[10],s[11]=t[14],s[12]=t[3],s[13]=t[7],s[14]=t[11],s[15]=t[15];return this}getTranslation(e){return undefined===e&&(e=new em),e.set(this.data[12],this.data[13],this.data[14])}getX(e){return undefined===e&&(e=new em),e.set(this.data[0],this.data[1],this.data[2])}getY(e){return undefined===e&&(e=new em),e.set(this.data[4],this.data[5],this.data[6])}getZ(e){return undefined===e&&(e=new em),e.set(this.data[8],this.data[9],this.data[10])}getScale(e){return undefined===e&&(e=new em),this.getX(ev),this.getY(ex),this.getZ(eS),e.set(ev.length(),ex.length(),eS.length()),e}get scaleSign(){return this.getX(ev),this.getY(ex),this.getZ(eS),ev.cross(ev,ex),0>ev.dot(eS)?-1:1}setFromEulerAngles(e,t,s){e*=er.DEG_TO_RAD,t*=er.DEG_TO_RAD,s*=er.DEG_TO_RAD;let i=Math.sin(-e),r=Math.cos(-e),a=Math.sin(-t),n=Math.cos(-t),o=Math.sin(-s),l=Math.cos(-s),h=this.data;return h[0]=n*l,h[1]=-n*o,h[2]=a,h[3]=0,h[4]=r*o+l*i*a,h[5]=r*l-i*a*o,h[6]=-n*i,h[7]=0,h[8]=i*o-r*l*a,h[9]=l*i+r*a*o,h[10]=r*n,h[11]=0,h[12]=0,h[13]=0,h[14]=0,h[15]=1,this}getEulerAngles(e){let t,s;undefined===e&&(e=new em),this.getScale(eb);let i=eb.x,r=eb.y,a=eb.z;if(0===i||0===r||0===a)return e.set(0,0,0);let n=this.data,o=Math.asin(-n[2]/i),l=.5*Math.PI;return o<l?o>-l?(t=Math.atan2(n[6]/r,n[10]/a),s=Math.atan2(n[1]/i,n[0]/i)):(s=0,t=-Math.atan2(n[4]/r,n[5]/r)):(s=0,t=Math.atan2(n[4]/r,n[5]/r)),e.set(t,o,s).mulScalar(er.RAD_TO_DEG)}toString(){return "["+this.data.join(", ")+"]"}constructor(){this.data=new Float32Array(16),this.data[0]=this.data[5]=this.data[10]=this.data[15]=1;}}eT.IDENTITY=Object.freeze(new eT),eT.ZERO=Object.freeze(new eT().set([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]));class ew{clone(){return new this.constructor(this.x,this.y,this.z,this.w)}conjugate(e){return undefined===e&&(e=this),this.x=-1*e.x,this.y=-1*e.y,this.z=-1*e.z,this.w=e.w,this}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w,this}equals(e){return this.x===e.x&&this.y===e.y&&this.z===e.z&&this.w===e.w}equalsApprox(e,t){return undefined===t&&(t=1e-6),Math.abs(this.x-e.x)<t&&Math.abs(this.y-e.y)<t&&Math.abs(this.z-e.z)<t&&Math.abs(this.w-e.w)<t}getAxisAngle(e){let t=2*Math.acos(this.w),s=Math.sin(t/2);return 0!==s?(e.x=this.x/s,e.y=this.y/s,e.z=this.z/s,(e.x<0||e.y<0||e.z<0)&&(e.x*=-1,e.y*=-1,e.z*=-1,t*=-1)):(e.x=1,e.y=0,e.z=0),t*er.RAD_TO_DEG}getEulerAngles(e){let t,s,i;undefined===e&&(e=new em);let r=this.x,a=this.y,n=this.z,o=this.w,l=2*(o*a-r*n);return l<=-0.99999?(t=2*Math.atan2(r,o),s=-Math.PI/2,i=0):l>=.99999?(t=2*Math.atan2(r,o),s=Math.PI/2,i=0):(t=Math.atan2(2*(o*r+a*n),1-2*(r*r+a*a)),s=Math.asin(l),i=Math.atan2(2*(o*n+r*a),1-2*(a*a+n*n))),e.set(t,s,i).mulScalar(er.RAD_TO_DEG)}invert(e){return undefined===e&&(e=this),this.conjugate(e).normalize()}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}mul(e){let t=this.x,s=this.y,i=this.z,r=this.w,a=e.x,n=e.y,o=e.z,l=e.w;return this.x=r*a+t*l+s*o-i*n,this.y=r*n+s*l+i*a-t*o,this.z=r*o+i*l+t*n-s*a,this.w=r*l-t*a-s*n-i*o,this}mulScalar(e,t){return undefined===t&&(t=this),this.x=t.x*e,this.y=t.y*e,this.z=t.z*e,this.w=t.w*e,this}mul2(e,t){let s=e.x,i=e.y,r=e.z,a=e.w,n=t.x,o=t.y,l=t.z,h=t.w;return this.x=a*n+s*h+i*l-r*o,this.y=a*o+i*h+r*n-s*l,this.z=a*l+r*h+s*o-i*n,this.w=a*h-s*n-i*o-r*l,this}normalize(e){ undefined===e&&(e=this);let t=e.length();return 0===t?(this.x=this.y=this.z=0,this.w=1):(t=1/t,this.x=e.x*t,this.y=e.y*t,this.z=e.z*t,this.w=e.w*t),this}set(e,t,s,i){return this.x=e,this.y=t,this.z=s,this.w=i,this}setFromAxisAngle(e,t){let s=Math.sin(t*=.5*er.DEG_TO_RAD),i=Math.cos(t);return this.x=s*e.x,this.y=s*e.y,this.z=s*e.z,this.w=i,this}setFromEulerAngles(e,t,s){if(e instanceof em){let i=e;e=i.x,t=i.y,s=i.z;}let i=.5*er.DEG_TO_RAD;e*=i,t*=i,s*=i;let r=Math.sin(e),a=Math.cos(e),n=Math.sin(t),o=Math.cos(t),l=Math.sin(s),h=Math.cos(s);return this.x=r*o*h-a*n*l,this.y=a*n*h+r*o*l,this.z=a*o*l-r*n*h,this.w=a*o*h+r*n*l,this}setFromMat4(e){let t;let s=e.data,i=s[0],r=s[1],a=s[2],n=s[4],o=s[5],l=s[6],h=s[8],d=s[9],c=s[10];return 0==(t=i*i+r*r+a*a)?this.set(0,0,0,1):(i*=t=1/Math.sqrt(t),r*=t,a*=t,0==(t=n*n+o*o+l*l))?this.set(0,0,0,1):(n*=t=1/Math.sqrt(t),o*=t,l*=t,0==(t=h*h+d*d+c*c))?this.set(0,0,0,1):(h*=t=1/Math.sqrt(t),d*=t,(c*=t)<0?i>o?this.set(1+i-o-c,r+n,h+a,l-d):this.set(r+n,1-i+o-c,l+d,h-a):i<-o?this.set(h+a,l+d,1-i-o+c,r-n):this.set(l-d,h-a,r-n,1+i+o+c),this.mulScalar(1/this.length()))}setFromDirections(e,t){let s=1+e.dot(t);return s<Number.EPSILON?(Math.abs(e.x)>Math.abs(e.y)?(this.x=-e.z,this.y=0,this.z=e.x):(this.x=0,this.y=-e.z,this.z=e.y),this.w=0):(this.x=e.y*t.z-e.z*t.y,this.y=e.z*t.x-e.x*t.z,this.z=e.x*t.y-e.y*t.x,this.w=s),this.normalize()}slerp(e,t,s){let i=e.x,r=e.y,a=e.z,n=e.w,o=t.x,l=t.y,h=t.z,d=t.w,c=n*d+i*o+r*l+a*h;if(c<0&&(d=-d,o=-o,l=-l,h=-h,c=-c),Math.abs(c)>=1)return this.w=n,this.x=i,this.y=r,this.z=a,this;let u=Math.acos(c),p=Math.sqrt(1-c*c);if(.001>Math.abs(p))return this.w=.5*n+.5*d,this.x=.5*i+.5*o,this.y=.5*r+.5*l,this.z=.5*a+.5*h,this;let m=Math.sin((1-s)*u)/p,f=Math.sin(s*u)/p;return this.w=n*m+d*f,this.x=i*m+o*f,this.y=r*m+l*f,this.z=a*m+h*f,this}transformVector(e,t){ undefined===t&&(t=new em);let s=e.x,i=e.y,r=e.z,a=this.x,n=this.y,o=this.z,l=this.w,h=l*s+n*r-o*i,d=l*i+o*s-a*r,c=l*r+a*i-n*s,u=-a*s-n*i-o*r;return t.x=h*l+-(u*a)+-(d*o)- -(c*n),t.y=d*l+-(u*n)+-(c*a)- -(h*o),t.z=c*l+-(u*o)+-(h*n)- -(d*a),t}toString(){return "["+this.x+", "+this.y+", "+this.z+", "+this.w+"]"}constructor(e=0,t=0,s=0,i=1){4===e.length?(this.x=e[0],this.y=e[1],this.z=e[2],this.w=e[3]):(this.x=e,this.y=t,this.z=s,this.w=i);}}ew.IDENTITY=Object.freeze(new ew(0,0,0,1)),ew.ZERO=Object.freeze(new ew(0,0,0,0));let eE=new em,eA=new em,eC=new em,eP=new em,eM=new em;class eR{add(e){let t=this.center,s=t.x,i=t.y,r=t.z,a=this.halfExtents,n=a.x,o=a.y,l=a.z,h=s-n,d=s+n,c=i-o,u=i+o,