PageSourceSearch

https://techx.dev/_next/static/chunks/c6a54c64-0ea66e31fbfa7ce4.js

js techx.dev collected 2026-10-03 21:17:59 UTC 1,998,414 bytes, 8,472 lines download raw bytes

1!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="cbfb56b8-6922-401a-906e-ae81b2750a55",e._sentryDebugIdIdentifier="sentry-dbid-cbfb56b8-6922-401a-906e-ae81b2750a55")}catch(e){}}();"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[210],{63598:function(e,t,i){let r,s,a,o,l,h,c,d,u,p,f,m,g,v,y,x,b,w,S,_,A,M,E,C,T,P,D,I,O,R,L,B,z,F,N,k,U,V,j,G,H,W,q,X,Y,Q,K,Z,J,$,ee,et,ei,er,es,ea,en,eo,el,eh,ec,ed,eu,ep,ef,em,eg,ev,ey,ex,eb,ew,eS,e_,eA,eM,eE,eC,eT,eP,eD,eI,eO,eR,eL,eB,ez,eF,eN,ek,eU,eV,ej,eG,eH,eW,eq,eX,eY,eQ,eK,eZ,eJ,e$,e0,e1,e2,e3,e4,e5,e6,e8,e9,e7,te,tt,ti,tr,ts,ta,tn,to;i.d(t,{M:function(){return B3}});var tl,th,tc=i(40257),td=i(82957).lW,tu=Object.create,tp=Object.defineProperty,tf=Object.getOwnPropertyDescriptor,tm=Object.getOwnPropertyNames,tg=Object.getPrototypeOf,tv=Object.prototype.hasOwnProperty,ty=(e,t,i)=>t in e?tp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,tx=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),tb=(e,t,i,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of tm(t))tv.call(e,s)||s===i||tp(e,s,{get:()=>t[s],enumerable:!(r=tf(t,s))||r.enumerable});return e},tw=(e,t,i)=>(i=null!=e?tu(tg(e)):{},tb(!t&&e&&e.__esModule?i:tp(i,"default",{value:e,enumerable:!0}),e)),tS=(e,t,i)=>(ty(e,"symbol"!=typeof t?t+"":t,i),i),t_=tx((e,t)=>{var i;i=function(){"use strict";return e.importState=function(t){var i=new e;return i.importState(t),i},e;function e(){return function(e){var t,i,r=0,s=0,a=0,o=1;0==e.length&&(e=[+new Date]);var l=(t=4022871197,(i=function(e){e=e.toString();for(var i=0;i<e.length;i++){var r=.02519603282416938*(t+=e.charCodeAt(i));t=r>>>0,r-=t,r*=t,t=r>>>0,r-=t,t+=4294967296*r}return(t>>>0)*23283064365386963e-26}).version="Mash 0.9",i);r=l(" "),s=l(" "),a=l(" ");for(var h=0;h<e.length;h++)(r-=l(e[h]))<0&&(r+=1),(s-=l(e[h]))<0&&(s+=1),(a-=l(e[h]))<0&&(a+=1);l=null;var c=function(){var e=2091639*r+23283064365386963e-26*o;return r=s,s=a,a=e-(o=0|e)};return c.next=c,c.uint32=function(){return 4294967296*c()},c.fract53=function(){return c()+(2097152*c()|0)*11102230246251565e-32},c.version="Alea 0.9",c.args=e,c.exportState=function(){return[r,s,a,o]},c.importState=function(e){r=+e[0]||0,s=+e[1]||0,a=+e[2]||0,o=+e[3]||0},c}(Array.prototype.slice.call(arguments))}},"object"==typeof e?t.exports=i():"function"==typeof define&&define.amd?define(i):e.Alea=i()}),tA=tx((e,t)=>{var i,r;i=e,r=function(e){"use strict";e.SVD=function(e,t,i,r,s){if(t=void 0===t||t,i=void 0===i||i,s=1e-64/(r=r||2220446049250313e-31),!e)throw TypeError("Matrix a is not defined");var a,o,l,h,c,d,u,p,f,m,g,v,y=e[0].length,x=e.length;if(x<y)throw TypeError("Invalid matrix: m < n");for(var b=[],w=[],S=[],_="f"===t?x:y,A=m=u=0;A<x;A++)w[A]=Array(_).fill(0);for(A=0;A<y;A++)S[A]=Array(y).fill(0);var M,E=Array(y).fill(0);for(A=0;A<x;A++)for(a=0;a<y;a++)w[A][a]=e[A][a];for(A=0;A<y;A++){for(b[A]=u,f=0,l=A+1,a=A;a<x;a++)f+=Math.pow(w[a][A],2);if(f<s)u=0;else for(p=(d=w[A][A])*(u=d<0?Math.sqrt(f):-Math.sqrt(f))-f,w[A][A]=d-u,a=l;a<y;a++){for(f=0,o=A;o<x;o++)f+=w[o][A]*w[o][a];for(d=f/p,o=A;o<x;o++)w[o][a]=w[o][a]+d*w[o][A]}for(E[A]=u,f=0,a=l;a<y;a++)f+=Math.pow(w[A][a],2);if(f<s)u=0;else{for(p=(d=w[A][A+1])*(u=d<0?Math.sqrt(f):-Math.sqrt(f))-f,w[A][A+1]=d-u,a=l;a<y;a++)b[a]=w[A][a]/p;for(a=l;a<x;a++){for(f=0,o=l;o<y;o++)f+=w[a][o]*w[A][o];for(o=l;o<y;o++)w[a][o]=w[a][o]+f*b[o]}}m<(g=Math.abs(E[A])+Math.abs(b[A]))&&(m=g)}if(i)for(A=y-1;0<=A;A--){if(0!==u){for(p=w[A][A+1]*u,a=l;a<y;a++)S[a][A]=w[A][a]/p;for(a=l;a<y;a++){for(f=0,o=l;o<y;o++)f+=w[A][o]*S[o][a];for(o=l;o<y;o++)S[o][a]=S[o][a]+f*S[o][A]}}for(a=l;a<y;a++)S[A][a]=0,S[a][A]=0;S[A][A]=1,u=b[A],l=A}if(t){if("f"===t)for(A=y;A<x;A++){for(a=y;a<x;a++)w[A][a]=0;w[A][A]=1}for(A=y-1;0<=A;A--){for(l=A+1,u=E[A],a=l;a<_;a++)w[A][a]=0;if(0!==u){for(p=w[A][A]*u,a=l;a<_;a++){for(f=0,o=l;o<x;o++)f+=w[o][A]*w[o][a];for(d=f/p,o=A;o<x;o++)w[o][a]=w[o][a]+d*w[o][A]}for(a=A;a<x;a++)w[a][A]=w[a][A]/u}else for(a=A;a<x;a++)w[a][A]=0;w[A][A]=w[A][A]+1}}for(r*=m,o=y-1;0<=o;o--)for(var C=0;C<50;C++){for(M=!1,l=o;0<=l;l--){if(Math.abs(b[l])<=r){M=!0;break}if(Math.abs(E[l-1])<=r)break}if(!M){for(c=0,h=l-(f=1),A=l;A<o+1&&(d=f*b[A],b[A]=c*b[A],!(Math.abs(d)<=r));A++)if(u=E[A],E[A]=Math.sqrt(d*d+u*u),c=u/(p=E[A]),f=-d/p,t)for(a=0;a<x;a++)g=w[a][h],v=w[a][A],w[a][h]=g*c+v*f,w[a][A]=-g*f+v*c}if(v=E[o],l===o){if(v<0&&(E[o]=-v,i))for(a=0;a<y;a++)S[a][o]=-S[a][o];break}for(m=E[l],u=Math.sqrt((d=(((g=E[o-1])-v)*(g+v)+((u=b[o-1])-(p=b[o]))*(u+p))/(2*p*g))*d+1),d=((m-v)*(m+v)+p*(g/(d<0?d-u:d+u)-p))/m,A=l+(f=c=1);A<o+1;A++){if(u=b[A],g=E[A],p=f*u,u*=c,v=Math.sqrt(d*d+p*p),d=m*(c=d/(b[A-1]=v))+u*(f=p/v),u=-m*f+u*c,p=g*f,g*=c,i)for(a=0;a<y;a++)m=S[a][A-1],v=S[a][A],S[a][A-1]=m*c+v*f,S[a][A]=-m*f+v*c;if(v=Math.sqrt(d*d+p*p),d=(c=d/(E[A-1]=v))*u+(f=p/v)*g,m=-f*u+c*g,t)for(a=0;a<x;a++)g=w[a][A-1],v=w[a][A],w[a][A-1]=g*c+v*f,w[a][A]=-g*f+v*c}b[l]=0,b[o]=d,E[o]=m}for(A=0;A<y;A++)E[A]<r&&(E[A]=0);return{u:w,q:E,v:S}}
1,e.VERSION="1.1.1",Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof e&&"u">typeof t?r(e):"function"==typeof define&&define.amd?define(["exports"],r):r((i="u">typeof globalThis?globalThis:i||self).SVDJS={})}),tM=tx((e,t)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){if(null===e||!0===e||!1===e)return NaN;var t=Number(e);return isNaN(t)?t:t<0?Math.ceil(t):Math.floor(t)},t.exports=e.default}),tE=tx((e,t)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){var t=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return t.setUTCFullYear(e.getFullYear()),e.getTime()-t.getTime()},t.exports=e.default}),tC=tx((e,t)=>{"use strict";function i(e,t,r,s){this.message=e,this.expected=t,this.found=r,this.location=s,this.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,i)}!function(e,t){function i(){this.constructor=e}i.prototype=t.prototype,e.prototype=new i}(i,Error),i.buildMessage=function(e,t){var i={literal:function(e){return'"'+s(e.text)+'"'},class:function(e){var t,i="";for(t=0;t<e.parts.length;t++)i+=e.parts[t]instanceof Array?a(e.parts[t][0])+"-"+a(e.parts[t][1]):a(e.parts[t]);return"["+(e.inverted?"^":"")+i+"]"},any:function(e){return"any character"},end:function(e){return"end of input"},other:function(e){return e.description}};function r(e){return e.charCodeAt(0).toString(16).toUpperCase()}function s(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(e){return"\\x0"+r(e)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(e){return"\\x"+r(e)})}function a(e){return e.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(e){return"\\x0"+r(e)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(e){return"\\x"+r(e)})}return"Expected "+function(e){var t,r,s,a=Array(e.length);for(r=0;r<e.length;r++)a[r]=i[(t=e[r]).type](t);if(a.sort(),a.length>0){for(r=1,s=1;r<a.length;r++)a[r-1]!==a[r]&&(a[s]=a[r],s++);a.length=s}switch(a.length){case 1:return a[0];case 2:return a[0]+" or "+a[1];default:return a.slice(0,-1).join(", ")+", or "+a[a.length-1]}}(e)+" but "+(t?'"'+s(t)+'"':"end of input")+" found."},t.exports={SyntaxError:i,parse:function(e,t){t=void 0!==t?t:{};var r,s,a,o,l,h,c,d,u={},p={svg_path:eo},f=eo,m=function(e){if(!e)return[];for(var t=[],i=0;i<e.length;i++)t=t.concat.apply(t,e[i]);var r=t[0];return r&&"m"==r.code&&(delete r.relative,r.code="M"),t},g=function(e,t){return function(e,t){if(!t)return[e];for(var i=[e],r=0,s=t.length;r<s;r++)i[r+1]=t[r][1];return i}(e,t)},v=/^[Mm]/,y=es(["M","m"],!1,!1),x=function(e,t,i){var r=eP(e,[t]);return i&&(r=r.concat(eP("M"==e?"L":"l",i[1]))),r},b=/^[Zz]/,w=es(["Z","z"],!1,!1),S=/^[Ll]/,_=es(["L","l"],!1,!1),A=function(e,t){return eP(e,t)},M=/^[Hh]/,E=es(["H","h"],!1,!1),C=/^[Vv]/,T=es(["V","v"],!1,!1),P=/^[Cc]/,D=es(["C","c"],!1,!1),I=/^[Ss]/,O=es(["S","s"],!1,!1),R=/^[Qq]/,L=es(["Q","q"],!1,!1),B=/^[Tt]/,z=es(["T","t"],!1,!1),F=/^[Aa]/,N=es(["A","a"],!1,!1),k=/^[01]/,U=es(["0","1"],!1,!1),V=function(){return""},j=er(",",!1),G=function(e){return e.join("")},H=er(".",!1),W=/^[eE]/,q=es(["e","E"],!1,!1),X=/^[+\-]/,Y=es(["+","-"],!1,!1),Q=/^[0-9]/,K=es([["0","9"]],!1,!1),Z=/^[ \t\n\r]/,J=es([" ","	",`
2`,"\r"],!1,!1),$=0,ee=[{line:1,column:1}],et=0,ei=[];if("startRule"in t){if(!(t.startRule in p))throw Error("Can't start parsing from rule \""+t.startRule+'".');f=p[t.startRule]}function er(e,t){return{type:"literal",text:e,ignoreCase:t}}function es(e,t,i){return{type:"class",parts:e,inverted:t,ignoreCase:i}}function ea(t){var i,r=ee[t];if(r)return r;for(i=t-1;!ee[i];)i--;for(r={line:(r=ee[i]).line,column:r.column};i<t;)10===e.charCodeAt(i)?(r.line++,r.column=1):r.column++,i++;return ee[t]=r,r}function en(e){$<et||($>et&&(et=$,ei=[]),ei.push(e))}function eo(){var e,t,i,r,s;for(e=$,t=[],i=eE();i!==u;)t.push(i),i=eE();if(t!==u){if((i=function(){var e,t,i,r,s,a;if(e=$,(t=el())!==u){for(i=[],r=$,s=[],a=eE();a!==u;)s.push(a),a=eE();for(s!==u&&(a=el())!==u?r=s=[s,a]:($=r,r=u);r!==u;){for(i.push(r),r=$,s=[],a=eE();a!==u;)s.push(a),a=eE();s!==u&&(a=el())!==u?r=s=[s,a]:($=r,r=u)}i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())===u&&(i=null),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u?e=t=m(i):($=e,e=u)}else $=e,e=u}else $=e,e=u;return e}function el(){var t,i,r,s,a,o;if(t=$,(i=function(){var t,i,r,s,a,o,l;if(t=$,v.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(y)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=eg())!==u?(a=$,(o=eb())===u&&(o=null),o!==u&&(l=ec())!==u?a=o=[o,l]:($=a,a=u),a===u&&(a=null),a!==u?t=i=x(i,s,a):($=t,t=u)):($=t,t=u)}else $=t,t=u;return t}())!==u){for(r=[],s=$,a=[],o=eE();o!==u;)a.push(o),o=eE();for(a!==u&&(o=eh())!==u?s=a=[a,o]:($=s,s=u);s!==u;){for(r.push(s),s=$,a=[],o=eE();o!==u;)a.push(o),o=eE();a!==u&&(o=eh())!==u?s=a=[a,o]:($=s,s=u)}r!==u?t=i=g(i,r):($=t,t=u)}else $=t,t=u;return t}function eh(){var t,i;return b.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(w)),i!==u&&(i=eP("Z")),(t=i)===u&&(t=function(){var t,i,r,s;if(t=$,S.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(_)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=ec())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,M.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(E)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=ed())!==u?t=i=eP(i,s.map(function(e){return{x:e}})):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,C.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(T)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=ed())!==u?t=i=eP(i,s.map(function(e){return{y:e}})):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,P.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(D)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=function(){var e,t,i,r,s,a;
2if(e=$,(t=eu())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=eu())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=eu())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,I.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(O)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=function(){var e,t,i,r,s,a;if(e=$,(t=ep())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=ep())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=ep())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,R.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(L)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=function(){var e,t,i,r,s,a;if(e=$,(t=ef())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=ef())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=ef())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,B.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(z)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=function(){var e,t,i,r,s,a;if(e=$,(t=eg())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=eg())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=eg())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}())===u&&(t=function(){var t,i,r,s;if(t=$,F.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(N)),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u&&(s=function(){var e,t,i,r,s,a;if(e=$,(t=em())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=em())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=em())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}())!==u?t=i=A(i,s):($=t,t=u)}else $=t,t=u;return t}()),t}function ec(){var e,t,i,r,s,a;if(e=$,(t=eg())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=eg())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=eg())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}function ed(){var e,t,i,r,s,a;if(e=$,(t=ey())!==u){for(i=[],r=$,(s=eb())===u&&(s=null),s!==u&&(a=ey())!==u?r=s=[s,a]:($=r,r=u);r!==u;)i.push(r),r=$,(s=eb())===u&&(s=null),s!==u&&(a=ey())!==u?r=s=[s,a]:($=r,r=u);i!==u?e=t=g(t,i):($=e,e=u)}else $=e,e=u;return e}function eu(){var e,t,i,r,s,a,o,l,h;return e=$,(t=eg())!==u?((i=eb())===u&&(i=null),i!==u&&(r=eg())!==u?((s=eb())===u&&(s=null),s!==u&&(a=eg())!==u?(o=t,l=r,h=a,e=t={x1:o.x,y1:o.y,x2:l.x,y2:l.y,x:h.x,y:h.y}):($=e,e=u)):($=e,e=u)):($=e,e=u),e}function ep(){var e,t,i,r,s,a;return e=$,(t=eg())!==u?((i=eb())===u&&(i=null),i!==u&&(r=eg())!==u?(s=t,a=r,e=t={x2:s.x,y2:s.y,x:a.x,y:a.y}):($=e,e=u)):($=e,e=u),e}function ef(){var e,t,i,r,s,a;return e=$,(t=eg())!==u?((i=eb())===u&&(i=null),i!==u&&(r=eg())!==u?(s=t,a=r,e=t={x1:s.x,y1:s.y,x:a.x,y:a.y}):($=e,e=u)):($=e,e=u),e}function em(){var e,t,i,r,s,a,o,l,h,c,d,p;return e=$,(t=ev())!==u?((i=eb())===u&&(i=null),i!==u&&(r=ev())!==u?((s=eb())===u&&(s=null),s!==u&&(a=ey())!==u&&eb()!==u&&(o=ex())!==u?((l=eb())===u&&(l=null),l!==u&&(h=ex())!==u?((c=eb())===u&&(c=null),c!==u&&(d=eg())!==u?e=t={rx:t,ry:r,xAxisRotation:a,largeArc:o,sweep:h,x:(p=d).x,y:p.y}:($=e,e=u)):($=e,e=u)):($=e,e=u)):($=e,e=u)):($=e,e=u),e}function eg(){var e,t,i,r;return e=$,(t=ey())!==u?((i=eb())===u&&(i=null),i!==u&&(r=ey())!==u?e=t={x:t,y:r}:($=e,e=u)):($=e,e=u),e}function ev(){var e;return(e=eS())===u&&(e=eM()),e!==u&&(e*=1),e}function ey(){var e,t,i;return e=$,(t=eA())===u&&(t=null),t!==u&&(i=eS())!==u?e=t=[t,i]:($=e,e=u),e===u&&(e=$,(t=eA())===u&&(t=null),t!==u&&(i=eM())!==u?e=t=[t,i]:($=e,e=u)),e!==u&&(e=1*e.join("")),e}function ex(){var t;return k.test(e.charAt($))?(t=e.charAt($),$++):(t=u,en(U)),t!==u&&(t="1"==t),t}function eb(){var e,t,i,r,s;if(e=$,t=[],(i=eE())!==u)for(;i!==u;)t.push(i),i=eE();else t=u;if(t!==u){if((i=ew())===u&&(i=null),i!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u?e=t=[t,i,r]:($=e,e=u)}else $=e,e=u}else $=e,e=u;if(e===u){if(e=$,t=$,(i=ew())!==u){for(r=[],s=eE();s!==u;)r.push(s),s=eE();r!==u?t=i=[i,r]:($=t,t=u)}else $=t,t=u;t!==u&&(t=V()),e=t}return e}function ew(){var t;return 44===e.charCodeAt($)?(t=",",$++):(t=u,en(j)),t}function eS(){var t,i,r,s,a,o,l;return t=$,(s=$,(a=eM())===u&&(a=null),a!==u?(46===e.charCodeAt($)?(o=".",$++):(o=u,en(H)),o!==u&&(l=eM())!==u?s=a=[a,o,l]:($=s,s=u)):($=s,s=u),s===u&&(s=$,(a=eM())!==u?(46===e.charCodeAt($)?(o=".",$++):(o=u,en(H)),o!==u?s=a=[a,o]:($=s,s=u)):($=s,s=u)),s!==u&&(s=G(s)),(i=s)!==u)?((r=e_())===u&&(r=null),r!==u?t=i=[i,r]:($=t,t=u)):($=t,t=u),t===u&&(t=$,(i=eM())!==u&&(r=e_())!==u?t=i=[i,r]:($=t,t=u)),t!==u&&(t=G(t)),t}function e_(){var t,i,r,s;return t=$,W.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(q)),i!==u?((r=eA())===u&&(r=null),r!==u&&(s=eM())!==u?t=i=[i,r,s]:($=t,t=u)):($=t,t=u),t!==u&&(t=G(t)),t}function eA(){var t;return X.test(e.charAt($))?(t=e.charAt($),$++):(t=u,en(Y)),t}function eM(){var t,i;if(t=[],Q.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(K)),i!==u)for(;i!==u;)t.push(i),Q.test(e.charAt($))?(i=e.charAt($),$++):(i=u,en(K));else t=u;return t!==u&&(t=t.join("")),t}function eE(){var t;return Z.test(e.charAt($))?(t=e.charAt($),$++):(t=u,en(J)),t!==u&&(t=V()),t}var eC={m:"moveto",l:"lineto",h:"horizontal lineto",v:"vertical lineto",c:"curveto",s:"smooth curveto",q:"quadratic curveto",t:"smooth quadratic curveto",a:"elliptical arc",z:"closepath"};for(var eT in eC)eC[eT.toUpperCase()]=eC[eT];function eP(e,t){t||(t=[{}]);for(var i=t.length;i--;){var r={code:e,command:eC[e]};for(var s in e==e.toLowerCase()&&(r.relative=!0),t[i])r[s]=t[i][s];t[i]=r}return t}if((d=f())!==u&&$===e.length)return d;throw d!==u&&$<e.length&&en({type:"end"}),l=ei,h=et<e.length?e.charAt(et):null,r=et,s=et<e.length?et+1:et,a=ea(r),o=ea(s),c={start:{offset:r,line:a.line,column:a.column},end:{offset:s,line:o.line,column:o.column}},new i(i.buildMessage(l,h),l,h,c)}}}),tT=tx((e,t)=>{var i=tC().parse;i.parseSVG=i,i.makeAbsolute=function(e){var t,i={x:0,y:0},r={x:"x0",y:"y0",x1:"x0",y1:"y0",x2:"x0",y2:"y0"};return e.forEach(function(e){for(var s in"moveto"===e.command&&(t=e),e.x0=i.x,e.y0=i.y,r)s in e&&(e[s]+=e.relative?e[r[s]]:0);"x"in e||(e.x=i.x),"y"in e||(e.y=i.y),e.relative=!1,e.code=e.code.toUpperCase(),"closepath"==e.command&&(e.x=t.x,e.y=t.y),i=e}),e},t.exports=i}),tP=tx((e,t)=>{t.exports=function(e,t){for(var i=e.split("."),r=t.split("."),s=0;s<3;s++){var a=Number(i[s]),o=Number(r[s]);if(a>o)return 1;if(o>a)return -1;if(!isNaN(a)&&isNaN(o))return 1;if(isNaN(a)&&!isNaN(o))return -1}return 0}}),tD={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},tI="srgb",tO="srgb-linear",tR="300 es",tL=class{addEventListener(e,t){void 0===this._listeners&&(this._listeners={});let i=this._listeners;void 0===i[e]&&(i[e]=[]),-1===i[e].indexOf(t)&&i[e].push(t)}hasEventListener(e,t){if(void 0===this._listeners)return!1;let i=this._listeners;return void 0!==i[e]&&-1!==i[e].indexOf(t)}removeEventListener(e,t){if(void 0===this._listeners)return;let i=this._listeners[e];if(void 0!==i){let e=i.indexOf(t);-1!==e&&i.splice(e,1)}}dispatchEvent(e){if(void 0===this._listeners)return;let t=this._listeners[e.type];if(void 0!==t){e.target=this;let i=t.slice(0);for(let t=0,r=i.length;t<r;t++)i[t].call(this,e);e.target=null}}},tB=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","5
25","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"],tz=1234567,tF=Math.PI/180,tN=180/Math.PI;function tk(){let e=4294967295*Math.random()|0,t=4294967295*Math.random()|0,i=4294967295*Math.random()|0,r=4294967295*Math.random()|0;return(tB[255&e]+tB[e>>8&255]+tB[e>>16&255]+tB[e>>24&255]+"-"+tB[255&t]+tB[t>>8&255]+"-"+tB[t>>16&15|64]+tB[t>>24&255]+"-"+tB[63&i|128]+tB[i>>8&255]+"-"+tB[i>>16&255]+tB[i>>24&255]+tB[255&r]+tB[r>>8&255]+tB[r>>16&255]+tB[r>>24&255]).toLowerCase()}function tU(e,t,i){return Math.max(t,Math.min(i,e))}function tV(e,t){return(e%t+t)%t}function tj(e,t,i){return(1-i)*e+i*t}function tG(e){return(e&e-1)==0&&0!==e}function tH(e){return Math.pow(2,Math.ceil(Math.log(e)/Math.LN2))}function tW(e){return Math.pow(2,Math.floor(Math.log(e)/Math.LN2))}function tq(e,t){switch(t.constructor){case Float32Array:return e;case Uint16Array:return e/65535;case Uint8Array:return e/255;case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw Error("Invalid component type.")}}function tX(e,t){switch(t.constructor){case Float32Array:return e;case Uint16Array:return Math.round(65535*e);case Uint8Array:return Math.round(255*e);case Int16Array:return Math.round(32767*e);case Int8Array:return Math.round(127*e);default:throw Error("Invalid component type.")}}var tY=Object.freeze({__proto__:null,DEG2RAD:tF,RAD2DEG:tN,ceilPowerOfTwo:tH,clamp:tU,damp:function(e,t,i,r){return tj(e,t,1-Math.exp(-i*r))},degToRad:function(e){return e*tF},denormalize:tq,euclideanModulo:tV,floorPowerOfTwo:tW,generateUUID:tk,inverseLerp:function(e,t,i){return e!==t?(i-e)/(t-e):0},isPowerOfTwo:tG,lerp:tj,mapLinear:function(e,t,i,r,s){return r+(e-t)*(s-r)/(i-t)},normalize:tX,pingpong:function(e,t=1){return t-Math.abs(tV(e,2*t)-t)},radToDeg:function(e){return e*tN},randFloat:function(e,t){return e+Math.random()*(t-e)},randFloatSpread:function(e){return e*(.5-Math.random())},randInt:function(e,t){return e+Math.floor(Math.random()*(t-e+1))},seededRandom:function(e){void 0!==e&&(tz=e);let t=tz+=1831565813;return t=Math.imul(t^t>>>15,1|t),(((t^=t+Math.imul(t^t>>>7,61|t))^t>>>14)>>>0)/4294967296},setQuaternionFromProperEuler:function(e,t,i,r,s){let a=Math.cos,o=Math.sin,l=a(i/2),h=o(i/2),c=a((t+r)/2),d=o((t+r)/2),u=a((t-r)/2),p=o((t-r)/2),f=a((r-t)/2),m=o((r-t)/2);switch(s){case"XYX":e.set(l*d,h*u,h*p,l*c);break;case"YZY":e.set(h*p,l*d,h*u,l*c);break;case"ZXZ":e.set(h*u,h*p,l*d,l*c);break;case"XZX":e.set(l*d,h*m,h*f,l*c);break;case"YXY":e.set(h*f,l*d,h*m,l*c);break;case"ZYZ":e.set(h*m,h*f,l*d,l*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+s)}},smootherstep:function(e,t,i){return e<=t?0:e>=i?1:(e=(e-t)/(i-t))*e*e*(e*(6*e-15)+10)},smoothstep:function(e,t,i){return e<=t?0:e>=i?1:(e=(e-t)/(i-t))*e*(3-2*e)}}),tQ=class{constructor(e=0,t=0){tQ.prototype.isVector2=!0,this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}
vendor: 4,588 bytes, line 2
2sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,i=this.y,r=e.elements;return this.x=r[0]*t+r[3]*i+r[6],this.y=r[1]*t+r[4]*i+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this}clampLength(e,t){let i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,i=this.y-e.y;return t*t+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let i=Math.cos(t),r=Math.sin(t),s=this.x-e.x,a=this.y-e.y;return this.x=s*i-a*r+e.x,this.y=s*r+a*i+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},tK=class{constructor(){tK.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1]}set(e,t,i,r,s,a,o,l,h){let c=this.elements;return c[0]=e,c[1]=r,c[2]=o,c[3]=t,c[4]=s,c[5]=l,c[6]=i,c[7]=a,c[8]=h,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],this}extractBasis(e,t,i){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let i=e.elements,r=t.elements,s=this.elements,a=i[0],o=i[3],l=i[6],h=i[1],c=i[4],d=i[7],u=i[2],p=i[5],f=i[8],m=r[0],g=r[3],v=r[6],y=r[1],x=r[4],b=r[7],w=r[2],S=r[5],_=r[8];return s[0]=a*m+o*y+l*w,s[3]=a*g+o*x+l*S,s[6]=a*v+o*b+l*_,s[1]=h*m+c*y+d*w,s[4]=h*g+c*x+d*S,s[7]=h*v+c*b+d*_,s[2]=u*m+p*y+f*w,s[5]=u*g+p*x+f*S,s[8]=u*v+p*b+f*_,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],i=e[1],r=e[2],s=e[3],a=e[4],o=e[5],l=e[6],h=e[7],c=e[8];return t*a*c-t*o*h-i*s*c+i*o*l+r*s*h-r*a*l}invert(){let e=this.elements,t=e[0],i=e[1],r=e[2],s=e[3],a=e[4],o=e[5],l=e[6],h=e[7],c=e[8],d=c*a-o*h,u=o*l-c*s,p=h*s-a*l,f=t*d+i*u+r*p;if(0===f)return this.set(0,0,0,0,0,0,0,0,0);let m=1/f;return e[0]=d*m,e[1]=(r*h-c*i)*m,e[2]=(o*i-r*a)*m,e[3]=u*m,e[4]=(c*t-r*l)*m,e[5]=(r*s-o*t)*m,e[6]=p*m,e[7]=(i*l-h*t)*m,e[8]=(a*t-i*s)*m,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,i,r,s,a,o){let l=Math.cos(s),h=Math.sin(s);
2return this.set(i*l,i*h,-i*(l*a+h*o)+a+e,-r*h,r*l,-r*(-h*a+l*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(tZ.makeScale(e,t)),this}rotate(e){return this.premultiply(tZ.makeRotation(-e)),this}translate(e,t){return this.premultiply(tZ.makeTranslation(e,t)),this}makeTranslation(e,t){return this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,i,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,i=e.elements;for(let e=0;e<9;e++)if(t[e]!==i[e])return!1;return!0}fromArray(e,t=0){for(let i=0;i<9;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){let i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e}clone(){return new this.constructor().fromArray(this.elements)}},tZ=new tK;function tJ(e){for(let t=e.length-1;t>=0;--t)if(e[t]>=65535)return!0;return!1}var t$={Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array};function t0(e,t){return new t$[e](t)}function t1(e){return document.createElementNS("http://www.w3.org/1999/xhtml",e)}function t2(e){return e<.04045?.0773993808*e:Math.pow(.9478672986*e+.0521327014,2.4)}function t3(e){return e<.0031308?12.92*e:1.055*Math.pow(e,.41666)-.055}var t4={[tI]:{[tO]:t2},[tO]:{[tI]:t3}},t5={legacyMode:!0,get workingColorSpace(){return tO},set workingColorSpace(n){console.warn("THREE.ColorManagement: .workingColorSpace is readonly.")},convert:function(e,t,i){if(this.legacyMode||t===i||!t||!i)return e;if(t4[t]&&void 0!==t4[t][i]){let r=t4[t][i];return e.r=r(e.r),e.g=r(e.g),e.b=r(e.b),e}throw Error("Unsupported color space conversion.")},fromWorkingColorSpace:function(e,t){return this.convert(e,this.workingColorSpace,t)},toWorkingColorSpace:function(e,t){return this.convert(e,t,this.workingColorSpace)}},t6={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},t8={r:0,g:0,b:0},t9={h:0,s:0,l:0},t7={h:0,s:0,l:0};function ie(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+(t-e)*6*i:i<.5?t:i<2/3?e+(t-e)*6*(2/3-i):e}function it(e,t){return t.r=e.r,t.g=e.g,t.b=e.b,t}var ii=class{constructor(e,t,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,void 0===t&&void 0===i?this.set(e):this.setRGB(e,t,i)}set(e){return e&&e.isColor?this.copy(e):"number"==typeof e?this.setHex(e):"string"==typeof e&&this.setStyle(e),this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=tI){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(255&e)/255,t5.toWorkingColorSpace(this,t),this}setRGB(e,t,i,r=t5.workingColorSpace){return this.r=e,this.g=t,this.b=i,t5.toWorkingColorSpace(this,r),this}setHSL(e,t,i,r=t5.workingColorSpace){if(e=tV(e,1),t=tU(t,0,1),i=tU(i,0,1),0===t)this.r=this.g=this.b=i;else{let r=i<=.5?i*(1+t):i+t-i*t,s=2*i-r;this.r=ie(s,r,e+1/3),this.g=ie(s,r,e),this.b=ie(s,r,e-1/3)}return t5.toWorkingColorSpace(this,r),this}setStyle(e,t=tI){let i;function r(t){void 0!==t&&1>parseFloat(t)&&console.warn("THREE.Color: Alpha component of "+e+" will be ignored.")}if(i=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(e)){let e,s=i[1],a=i[2];switch(s){case"rgb":case"rgba":if(e=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return this.r=Math.min(255,parseInt(e[1],10))/255,this.g=Math.min(255,parseInt(e[2],10))/255,this.b=Math.min(255,parseInt(e[3],10))/255,t5.toWorkingColorSpace(this,t),r(e[4]),this;if(e=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return this.r=Math.min(100,parseInt(e[1],10))/100,this.g=Math.min(100,parseInt(e[2],10))/100,this.b=Math.min(100,parseInt(e[3],10))/100,t5.toWorkingColorSpace(this,t),r(e[4]),this;break;case"hsl":case"hsla":if(e=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a)){let i=parseFloat(e[1])/360,s=parseFloat(e[2])/100,a=parseFloat(e[3])/100;return r(e[4]),this.setHSL(i,s,a,t)}}}else if(i=/^\#([A-Fa-f\d]+)$/.exec(e)){let e=i[1],r=e.length;if(3===r)return this.r=parseInt(e.charAt(0)+e.charAt(0),16)/255,this.g=parseInt(e.charAt(1)+e.charAt(1),16)/255,this.b=parseInt(e.charAt(2)+e.charAt(2),16)/255,t5.toWorkingColorSpace(this,t),this;if(6===r)return this.r=parseInt(e.charAt(0)+e.charAt(1),16)/255,this.g=parseInt(e.charAt(2)+e.charAt(3),16)/255,this.b=parseInt(e.charAt(4)+e.charAt(5),16)/255,t5.toWorkingColorSpace(this,t),this}return e&&e.length>0?this.setColorName(e,t):this}setColorName(e,t=tI){let i=t6[e.toLowerCase()];return void 0!==i?this.setHex(i,t):console.warn("THREE.Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=t2(e.r),this.g=t2(e.g),this.b=t2(e.b),this}copyLinearToSRGB(e){return this.r=t3(e.r),this.g=t3(e.g),this.b=t3(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=tI){return t5.fromWorkingColorSpace(it(this,t8),e),tU(255*t8.r,0,255)<<16^tU(255*t8.g,0,255)<<8^tU(255*t8.b,0,255)<<0}getHexString(e=tI){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=t5.workingColorSpace){t5.fromWorkingColorSpace(it(this,t8),t);let i=t8.r,r=t8.g,s=t8.b,a=Math.max(i,r,s),o=Math.min(i,r,s),l,h,c=(o+a)/2;if(o===a)l=0,h=0;else{let e=a-o;switch(h=c<=.5?e/(a+o):e/(2-a-o),a){case i:l=(r-s)/e+(r<s?6:0);break;case r:l=(s-i)/e+2;break;case s:l=(i-r)/e+4}l/=6}return e.h=l,e.s=h,e.l=c,e}getRGB(e,t=t5.workingColorSpace){return t5.fromWorkingColorSpace(it(this,t8),t),e.r=t8.r,e.g=t8.g,e.b=t8.b,e}getStyle(e=tI){return t5.fromWorkingColorSpace(it(this,t8),e),e!==tI?`color(${e} ${t8.r} ${t8.g} ${t8.b})`:`rgb(${255*t8.r|0},${255*t8.g|0},${255*t8.b|0})`}offsetHSL(e,t,i){return this.getHSL(t9),t9.h+=e,t9.s+=t,t9.l+=i,this.setHSL(t9.h,t9.s,t9.l),this}add(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addColors(e,t){return this.r=e.r+t.r,this.g=e.g+t.g,this.b=e.b+t.b,this}addScalar(e){return this.r+=e,this.g+=e,this.b+=e,this}sub(e){return this.r=Math.max(0,this.r-e.r),this.g=Math.max(0,this.g-e.g),this.b=Math.max(0,this.b-e.b),this}multiply(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyScalar(e){return this.r*=e,this.g*=e,this.b*=e,this}lerp(e,t){return this.r+=(e.r-this.r)*t,this.g+=(e.g-this.g)*t,this.b+=(e.b-this.b)*t,this}lerpColors(e,t,i){return this.r=e.r+(t.r-e.r)*i,this.g=e.g+(t.g-e.g)*i,this.b=e.b+(t.b-e.b)*i,this}lerpHSL(e,t){this.getHSL(t9),e.getHSL(t7);let i=tj(t9.h,t7.h,t),r=tj(t9.s,t7.s,t),s=tj(t9.l,t7.l,t);return this.setHSL(i,r,s),this}equals(e){return e.r===this.r&&e.g===this.g&&e.b===this.b}fromArray(e,t=0){return this.r=e[t],this.g=e[t+1],this.b=e[t+2],this}toArray(e=[],t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,e}fromBufferAttribute(e,t){return this.r=e.getX(t),this.g=e.getY(t),this.b=e.getZ(t),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}};ii.NAMES=t6;var ir,is=class{static getDataURL(e){let t;if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>"u")return e.src;if(e instanceof HTMLCanvasElement)t=e;else{void 0===ir&&(ir=t1("canvas")),ir.width=e.width,ir.height=e.height;let i=ir.getContext("2d");e instanceof ImageData?i.putImageData(e,0,0):i.drawImage(e,0,0,e.width,e.height),t=ir}return t.width>2048||t.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",e),t.toDataURL("image/jpeg",.6)):t.toDataURL("image/png")}static sRGBToLinear(e){if("u">typeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap){let t=t1("canvas");t.width=e.width,t.height=e.height;let i=t.getContext("2d");i.drawImage(e,0,0,e.width,e.height);let r=i.getImageData(0,0,e.width,e.height),s=r.data;for(let e=0;e<s.length;e++)s[e]=255*t2(s[e]/255);return i.putImageData(r,0,0),t}if(!e.data)return console.warn("THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),e;{let t=e.data.slice(0);for(let e=0;e<t.length;e++)t instanceof Uint8Array||t instanceof Uint8ClampedArray?t[e]=Math.floor(255*t2(t[e]/255
2)):t[e]=t2(t[e]);return{data:t,width:e.width,height:e.height}}}},ia=class{constructor(e=null){this.isSource=!0,this.uuid=tk(),this.data=e,this.version=0}set needsUpdate(e){!0===e&&this.version++}toJSON(e){let t=void 0===e||"string"==typeof e;if(!t&&void 0!==e.images[this.uuid])return e.images[this.uuid];let i={uuid:this.uuid,url:""},r=this.data;if(null!==r){let e;if(Array.isArray(r)){e=[];for(let t=0,i=r.length;t<i;t++)r[t].isDataTexture?e.push(io(r[t].image)):e.push(io(r[t]))}else e=io(r);i.url=e}return t||(e.images[this.uuid]=i),i}};function io(e){return"u">typeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap?is.getDataURL(e):e.data?{data:Array.from(e.data),width:e.width,height:e.height,type:e.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}var il=0,ih=class extends tL{constructor(e=ih.DEFAULT_IMAGE,t=ih.DEFAULT_MAPPING,i=1001,r=1001,s=1006,a=1008,o=1023,l=1009,h=ih.DEFAULT_ANISOTROPY,c=3e3){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:il++}),this.uuid=tk(),this.name="",this.source=new ia(e),this.mipmaps=[],this.mapping=t,this.wrapS=i,this.wrapT=r,this.magFilter=s,this.minFilter=a,this.anisotropy=h,this.format=o,this.internalFormat=null,this.type=l,this.offset=new tQ(0,0),this.repeat=new tQ(1,1),this.center=new tQ(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new tK,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.userData={},this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1,this.needsPMREMUpdate=!1}get image(){return this.source.data}set image(e){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.encoding=e.encoding,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}toJSON(e){let t=void 0===e||"string"==typeof e;if(!t&&void 0!==e.textures[this.uuid])return e.textures[this.uuid];let i={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),t||(e.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(300!==this.mapping)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case 1e3:e.x=e.x-Math.floor(e.x);break;case 1001:e.x=e.x<0?0:1;break;case 1002:1===Math.abs(Math.floor(e.x)%2)?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x)}if(e.y<0||e.y>1)switch(this.wrapT){case 1e3:e.y=e.y-Math.floor(e.y);break;case 1001:e.y=e.y<0?0:1;break;case 1002:1===Math.abs(Math.floor(e.y)%2)?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y)}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){!0===e&&(this.version++,this.source.needsUpdate=!0)}};ih.DEFAULT_IMAGE=null,ih.DEFAULT_MAPPING=300,ih.DEFAULT_ANISOTROPY=1;var ic=class{constructor(e=0,t=0,i=0,r=1){ic.prototype.isVector4=!0,this.x=e,this.y=t,this.z=i,this.w=r}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,i,r){return this.x=e,this.y=t,this.z=i,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+e)}}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=void 0!==e.w?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(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}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}
2sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(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}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,i=this.y,r=this.z,s=this.w,a=e.elements;return this.x=a[0]*t+a[4]*i+a[8]*r+a[12]*s,this.y=a[1]*t+a[5]*i+a[9]*r+a[13]*s,this.z=a[2]*t+a[6]*i+a[10]*r+a[14]*s,this.w=a[3]*t+a[7]*i+a[11]*r+a[15]*s,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,i,r,s,a=e.elements,o=a[0],l=a[4],h=a[8],c=a[1],d=a[5],u=a[9],p=a[2],f=a[6],m=a[10];if(.01>Math.abs(l-c)&&.01>Math.abs(h-p)&&.01>Math.abs(u-f)){if(.1>Math.abs(l+c)&&.1>Math.abs(h+p)&&.1>Math.abs(u+f)&&.1>Math.abs(o+d+m-3))return this.set(1,0,0,0),this;t=Math.PI;let e=(o+1)/2,a=(d+1)/2,g=(m+1)/2,v=(l+c)/4,y=(h+p)/4,x=(u+f)/4;return e>a&&e>g?e<.01?(i=0,r=.707106781,s=.707106781):(r=v/(i=Math.sqrt(e)),s=y/i):a>g?a<.01?(i=.707106781,r=0,s=.707106781):(i=v/(r=Math.sqrt(a)),s=x/r):g<.01?(i=.707106781,r=.707106781,s=0):(i=y/(s=Math.sqrt(g)),r=x/s),this.set(i,r,s,t),this}let g=Math.sqrt((f-u)*(f-u)+(h-p)*(h-p)+(c-l)*(c-l));return .001>Math.abs(g)&&(g=1),this.x=(f-u)/g,this.y=(h-p)/g,this.z=(c-l)/g,this.w=Math.acos((o+d+m-1)/2),this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this.w=Math.max(e.w,Math.min(t.w,this.w)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this.w=Math.max(e,Math.min(t,this.w)),this}clampLength(e,t){let i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this.w=e.w+(t.w-e.w)*i,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}},id=class extends tL{constructor(e=1,t=1,i={}
2){super(),this.isWebGLRenderTarget=!0,this.width=e,this.height=t,this.depth=1,this.scissor=new ic(0,0,e,t),this.scissorTest=!1,this.viewport=new ic(0,0,e,t),this.texture=new ih({width:e,height:t,depth:1},i.mapping,i.wrapS,i.wrapT,i.magFilter,i.minFilter,i.format,i.type,i.anisotropy,i.encoding),this.texture.isRenderTargetTexture=!0,this.texture.flipY=!1,this.texture.generateMipmaps=void 0!==i.generateMipmaps&&i.generateMipmaps,this.texture.internalFormat=void 0!==i.internalFormat?i.internalFormat:null,this.texture.minFilter=void 0!==i.minFilter?i.minFilter:1006,this.depthBuffer=void 0===i.depthBuffer||i.depthBuffer,this.stencilBuffer=void 0!==i.stencilBuffer&&i.stencilBuffer,this.depthTexture=void 0!==i.depthTexture?i.depthTexture:null,this.samples=void 0!==i.samples?i.samples:0}setSize(e,t,i=1){(this.width!==e||this.height!==t||this.depth!==i)&&(this.width=e,this.height=t,this.depth=i,this.texture.image.width=e,this.texture.image.height=t,this.texture.image.depth=i,this.dispose()),this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.viewport.copy(e.viewport),this.texture=e.texture.clone(),this.texture.isRenderTargetTexture=!0;let t=Object.assign({},e.texture.image);return this.texture.source=new ia(t),this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,null!==e.depthTexture&&(this.depthTexture=e.depthTexture.clone()),this.samples=e.samples,this}dispose(){this.dispatchEvent({type:"dispose"})}},iu=class extends ih{constructor(e=null,t=1,i=1,r=1){super(null),this.isDataArrayTexture=!0,this.image={data:e,width:t,height:i,depth:r},this.magFilter=1003,this.minFilter=1003,this.wrapR=1001,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}},ip=class extends ih{constructor(e=null,t=1,i=1,r=1){super(null),this.isData3DTexture=!0,this.image={data:e,width:t,height:i,depth:r},this.magFilter=1003,this.minFilter=1003,this.wrapR=1001,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}},im=class extends id{constructor(e=1,t=1,i=1,r={}){super(e,t,r),this.isWebGLMultipleRenderTargets=!0;let s=this.texture;this.texture=[];for(let e=0;e<i;e++)this.texture[e]=s.clone(),this.texture[e].isRenderTargetTexture=!0}setSize(e,t,i=1){if(this.width!==e||this.height!==t||this.depth!==i){this.width=e,this.height=t,this.depth=i;for(let r=0,s=this.texture.length;r<s;r++)this.texture[r].image.width=e,this.texture[r].image.height=t,this.texture[r].image.depth=i;this.dispose()}return this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t),this}copy(e){this.dispose(),this.width=e.width,this.height=e.height,this.depth=e.depth,this.viewport.set(0,0,this.width,this.height),this.scissor.set(0,0,this.width,this.height),this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,null!==e.depthTexture&&(this.depthTexture=e.depthTexture.clone()),this.texture.length=0;for(let t=0,i=e.texture.length;t<i;t++)this.texture[t]=e.texture[t].clone(),this.texture[t].isRenderTargetTexture=!0;return this}},ig=class{constructor(e=0,t=0,i=0,r=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=i,this._w=r}static slerpFlat(e,t,i,r,s,a,o){let l=i[r+0],h=i[r+1],c=i[r+2],d=i[r+3],u=s[a+0],p=s[a+1],f=s[a+2],m=s[a+3];if(0===o){e[t+0]=l,e[t+1]=h,e[t+2]=c,e[t+3]=d;return}if(1===o){e[t+0]=u,e[t+1]=p,e[t+2]=f,e[t+3]=m;return}if(d!==m||l!==u||h!==p||c!==f){let e=1-o,t=l*u+h*p+c*f+d*m,i=t>=0?1:-1,r=1-t*t;if(r>Number.EPSILON){let s=Math.sqrt(r),a=Math.atan2(s,t*i);e=Math.sin(e*a)/s,o=Math.sin(o*a)/s}let s=o*i;if(l=l*e+u*s,h=h*e+p*s,c=c*e+f*s,d=d*e+m*s,e===1-o){let e=1/Math.sqrt(l*l+h*h+c*c+d*d);l*=e,h*=e,c*=e,d*=e}}e[t]=l,e[t+1]=h,e[t+2]=c,e[t+3]=d}static multiplyQuaternionsFlat(e,t,i,r,s,a){let o=i[r],l=i[r+1],h=i[r+2],c=i[r+3],d=s[a],u=s[a+1],p=s[a+2],f=s[a+3];return e[t]=o*f+c*d+l*p-h*u,e[t+1]=l*f+c*u+h*d-o*p,e[t+2]=h*f+c*p+o*u-l*d,e[t+3]=c*f-o*d-l*u-h*p,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,i,r){return this._x=e,this._y=t,this._z=i,this._w=r,this._onChangeCallback(),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._onChangeCallback(),this}setFromEuler(e,t){let i=e._x,r=e._y,s=e._z,a=e._order,o=Math.cos,l=Math.sin,h=o(i/2),c=o(r/2),d=o(s/2),u=l(i/2),p=l(r/2),f=l(s/2);switch(a){case"XYZ":this._x=u*c*d+h*p*f,this._y=h*p*d-u*c*f,this._z=h*c*f+u*p*d,this._w=h*c*d-u*p*f;break;case"YXZ":this._x=u*c*d+h*p*f,this._y=h*p*d-u*c*f,this._z=h*c*f-u*p*d,this._w=h*c*d+u*p*f;break;case"ZXY":this._x=u*c*d-h*p*f,this._y=h*p*d+u*c*f,this._z=h*c*f+u*p*d,this._w=h*c*d-u*p*f;break;case"ZYX":this._x=u*c*d-h*p*f,this._y=h*p*d+u*c*f,this._z=h*c*f-u*p*d,this._w=h*c*d+u*p*f;break;case"YZX":this._x=u*c*d+h*p*f,this._y=h*p*d+u*c*f,this._z=h*c*f-u*p*d,this._w=h*c*d-u*p*f;break;case"XZY":this._x=u*c*d-h*p*f,this._y=h*p*d-u*c*f,this._z=h*c*f+u*p*d,this._w=h*c*d+u*p*f;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return!1!==t&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let i=t/2,r=Math.sin(i);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,i=t[0],r=t[4],s=t[8],a=t[1],o=t[5],l=t[9],h=t[2],c=t[6],d=t[10],u=i+o+d;if(u>0){let e=.5/Math.sqrt(u+1);this._w=.25/e,this._x=(c-l)*e,this._y=(s-h)*e,this._z=(a-r)*e}else if(i>o&&i>d){let e=2*Math.sqrt(1+i-o-d);
2this._w=(c-l)/e,this._x=.25*e,this._y=(r+a)/e,this._z=(s+h)/e}else if(o>d){let e=2*Math.sqrt(1+o-i-d);this._w=(s-h)/e,this._x=(r+a)/e,this._y=.25*e,this._z=(l+c)/e}else{let e=2*Math.sqrt(1+d-i-o);this._w=(a-r)/e,this._x=(s+h)/e,this._y=(l+c)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let i=e.dot(t)+1;return i<Number.EPSILON?(i=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0):(this._x=0,this._y=-e.z,this._z=e.y)):(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=i,this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(tU(this.dot(e),-1,1)))}rotateTowards(e,t){let i=this.angleTo(e);if(0===i)return this;let r=Math.min(1,t/i);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return 0===e?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let i=e._x,r=e._y,s=e._z,a=e._w,o=t._x,l=t._y,h=t._z,c=t._w;return this._x=i*c+a*o+r*h-s*l,this._y=r*c+a*l+s*o-i*h,this._z=s*c+a*h+i*l-r*o,this._w=a*c-i*o-r*l-s*h,this._onChangeCallback(),this}slerp(e,t){if(0===t)return this;if(1===t)return this.copy(e);let i=this._x,r=this._y,s=this._z,a=this._w,o=a*e._w+i*e._x+r*e._y+s*e._z;if(o<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,o=-o):this.copy(e),o>=1)return this._w=a,this._x=i,this._y=r,this._z=s,this;let l=1-o*o;if(l<=Number.EPSILON){let e=1-t;return this._w=e*a+t*this._w,this._x=e*i+t*this._x,this._y=e*r+t*this._y,this._z=e*s+t*this._z,this.normalize(),this._onChangeCallback(),this}let h=Math.sqrt(l),c=Math.atan2(h,o),d=Math.sin((1-t)*c)/h,u=Math.sin(t*c)/h;return this._w=a*d+this._w*u,this._x=i*d+this._x*u,this._y=r*d+this._y*u,this._z=s*d+this._z*u,this._onChangeCallback(),this}slerpQuaternions(e,t,i){return this.copy(e).slerp(t,i)}random(){let e=Math.random(),t=Math.sqrt(1-e),i=Math.sqrt(e),r=2*Math.PI*Math.random(),s=2*Math.PI*Math.random();return this.set(t*Math.cos(r),i*Math.sin(s),i*Math.cos(s),t*Math.sin(r))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},iv=class{constructor(e=0,t=0,i=0){iv.prototype.isVector3=!0,this.x=e,this.y=t,this.z=i}set(e,t,i){return void 0===i&&(i=this.z),this.x=e,this.y=t,this.z=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+e)}}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}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}
2sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(ix.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(ix.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,i=this.y,r=this.z,s=e.elements;return this.x=s[0]*t+s[3]*i+s[6]*r,this.y=s[1]*t+s[4]*i+s[7]*r,this.z=s[2]*t+s[5]*i+s[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,i=this.y,r=this.z,s=e.elements,a=1/(s[3]*t+s[7]*i+s[11]*r+s[15]);return this.x=(s[0]*t+s[4]*i+s[8]*r+s[12])*a,this.y=(s[1]*t+s[5]*i+s[9]*r+s[13])*a,this.z=(s[2]*t+s[6]*i+s[10]*r+s[14])*a,this}applyQuaternion(e){let t=this.x,i=this.y,r=this.z,s=e.x,a=e.y,o=e.z,l=e.w,h=l*t+a*r-o*i,c=l*i+o*t-s*r,d=l*r+s*i-a*t,u=-s*t-a*i-o*r;return this.x=h*l+-(u*s)+-(c*o)- -(d*a),this.y=c*l+-(u*a)+-(d*s)- -(h*o),this.z=d*l+-(u*o)+-(h*a)- -(c*s),this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,i=this.y,r=this.z,s=e.elements;return this.x=s[0]*t+s[4]*i+s[8]*r,this.y=s[1]*t+s[5]*i+s[9]*r,this.z=s[2]*t+s[6]*i+s[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this}clampLength(e,t){let i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let i=e.x,r=e.y,s=e.z,a=t.x,o=t.y,l=t.z;return this.x=r*l-s*o,this.y=s*a-i*l,this.z=i*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(0===t)return this.set(0,0,0);let i=e.dot(this)/t;return this.copy(e).multiplyScalar(i)}projectOnPlane(e){return iy.copy(this).projectOnVector(e),this.sub(iy)}reflect(e){return this.sub(iy.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());return 0===t?Math.PI/2:Math.acos(tU(this.dot(e)/t,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,i=this.y-e.y,r=this.z-e.z;return t*t+i*i+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,i){let r=Math.sin(t)*e;return this.x=r*Math.sin(i),this.y=Math.cos(t)*e,this.z=r*Math.cos(i),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,i){return this.x=e*Math.sin(t),this.y=i,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),i=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=i,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,4*t)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,3*t)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=(Math.random()-.5)*2,t=Math.random()*Math.PI*2,i=Math.sqrt(1-e**2);return this.x=i*Math.cos(t),this.y=i*Math.sin(t),this.z=e,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},iy=new iv,ix=new ig,ib=class{constructor(e=new iv(1/0,1/0,1/0),t=new iv(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){let t=1/0,i=1/0,r=1/0,s=-1/0,a=-1/0,o=-1/0;for(let l=0,h=e.length;l<h;l+=3){let h=e[l],c=e[l+1],d=e[l+2];h<t&&(t=h),c<i&&(i=c),d<r&&(r=d),h>s&&(s=h),c>a&&(a=c),d>o&&(o=d)}return this.min.set(t,i,r),this.max.set(s,a,o),this}setFromBufferAttribute(e){let t=1/0,i=1/0,r=1/0,s=-1/0,a=-1/0,o=-1/0;for(let l=0,h=e.count;l<h;l++){let h=e.getX(l),c=e.getY(l),d=e.getZ(l);h<t&&(t=h),c<i&&(i=c),d<r&&(r=d),h>s&&(s=h),c>a&&(a=c),d>o&&(o=d)}return this.min.set(t,i,r),this.max.set(s,a,o),this}setFromPoints(e){this.makeEmpty();for(let t=0,i=e.length;t<i;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let i=iS.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(i),this.max.copy(e).add(i),this}setFromObject(e,t=!1){return this.makeEmpty(),this.expandByObject(e,t)}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}expandByObject(e,t=!1){e.updateWorldMatrix(!1,!1);let i=e.geometry;if(void 0!==i){if(t&&null!=i.attributes&&void 0!==i.attributes.position){let t=i.attributes.position;for(let i=0,r=t.count;i<r;i++)iS.fromBufferAttribute(t,i).applyMatrix4(e.matrixWorld),this.expandByPoint(iS)}else null===i.boundingBox&&i.computeBoundingBox(),i_.copy(i.boundingBox),i_.applyM
2atrix4(e.matrixWorld),this.union(i_)}let r=e.children;for(let e=0,i=r.length;e<i;e++)this.expandByObject(r[e],t);return this}containsPoint(e){return!(e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y||e.z<this.min.z||e.z>this.max.z)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return!(e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y||e.max.z<this.min.z||e.min.z>this.max.z)}intersectsSphere(e){return this.clampPoint(e.center,iS),iS.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,i;return e.normal.x>0?(t=e.normal.x*this.min.x,i=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,i=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,i+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,i+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,i+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,i+=e.normal.z*this.min.z),t<=-e.constant&&i>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(iD),iI.subVectors(this.max,iD),iA.subVectors(e.a,iD),iM.subVectors(e.b,iD),iE.subVectors(e.c,iD),iC.subVectors(iM,iA),iT.subVectors(iE,iM),iP.subVectors(iA,iE);let t=[0,-iC.z,iC.y,0,-iT.z,iT.y,0,-iP.z,iP.y,iC.z,0,-iC.x,iT.z,0,-iT.x,iP.z,0,-iP.x,-iC.y,iC.x,0,-iT.y,iT.x,0,-iP.y,iP.x,0];return!!(iL(t,iA,iM,iE,iI)&&iL(t=[1,0,0,0,1,0,0,0,1],iA,iM,iE,iI))&&(iO.crossVectors(iC,iT),iL(t=[iO.x,iO.y,iO.z],iA,iM,iE,iI))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return iS.copy(e).clamp(this.min,this.max).sub(e).length()}getBoundingSphere(e){return this.getCenter(e.center),e.radius=.5*this.getSize(iS).length(),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()||(iw[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),iw[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),iw[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),iw[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),iw[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),iw[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),iw[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),iw[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(iw)),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}},iw=[new iv,new iv,new iv,new iv,new iv,new iv,new iv,new iv],iS=new iv,i_=new ib,iA=new iv,iM=new iv,iE=new iv,iC=new iv,iT=new iv,iP=new iv,iD=new iv,iI=new iv,iO=new iv,iR=new iv;function iL(e,t,i,r,s){for(let a=0,o=e.length-3;a<=o;a+=3){iR.fromArray(e,a);let o=s.x*Math.abs(iR.x)+s.y*Math.abs(iR.y)+s.z*Math.abs(iR.z),l=t.dot(iR),h=i.dot(iR),c=r.dot(iR);if(Math.max(-Math.max(l,h,c),Math.min(l,h,c))>o)return!1}return!0}var iB=new ib,iz=new iv,iF=new iv,iN=class{constructor(e=new iv,t=-1){this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){let i=this.center;void 0!==t?i.copy(t):iB.setFromPoints(e).getCenter(i);let r=0;for(let t=0,s=e.length;t<s;t++)r=Math.max(r,i.distanceToSquared(e[t]));return this.radius=Math.sqrt(r),this}copy(e){return this.center.copy(e.center),this.radius=e.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(e){return e.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(e){return e.distanceTo(this.center)-this.radius}intersectsSphere(e){let t=this.radius+e.radius;return e.center.distanceToSquared(this.center)<=t*t}intersectsBox(e){return e.intersectsSphere(this)}intersectsPlane(e){return Math.abs(e.distanceToPoint(this.center))<=this.radius}clampPoint(e,t){let i=this.center.distanceToSquared(e);return t.copy(e),i>this.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?e.makeEmpty():(e.set(this.center,this.center),e.expandByScalar(this.radius)),e}
2applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;iz.subVectors(e,this.center);let t=iz.lengthSq();if(t>this.radius*this.radius){let e=Math.sqrt(t),i=(e-this.radius)*.5;this.center.addScaledVector(iz,i/e),this.radius+=i}return this}union(e){return e.isEmpty()||(this.isEmpty()?this.copy(e):!0===this.center.equals(e.center)?this.radius=Math.max(this.radius,e.radius):(iF.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(iz.copy(e.center).add(iF)),this.expandByPoint(iz.copy(e.center).sub(iF)))),this}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}},ik=new iv,iU=new iv,iV=new iv,ij=new iv,iG=new iv,iH=new iv,iW=new iv,iq=class{constructor(e=new iv,t=new iv(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.direction).multiplyScalar(e).add(this.origin)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,ik)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let i=t.dot(this.direction);return i<0?t.copy(this.origin):t.copy(this.direction).multiplyScalar(i).add(this.origin)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=ik.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(ik.copy(this.direction).multiplyScalar(t).add(this.origin),ik.distanceToSquared(e))}distanceSqToSegment(e,t,i,r){iU.copy(e).add(t).multiplyScalar(.5),iV.copy(t).sub(e).normalize(),ij.copy(this.origin).sub(iU);let s=.5*e.distanceTo(t),a=-this.direction.dot(iV),o=ij.dot(this.direction),l=-ij.dot(iV),h=ij.lengthSq(),c=Math.abs(1-a*a),d,u,p,f;if(c>0){if(d=a*l-o,u=a*o-l,f=s*c,d>=0){if(u>=-f){if(u<=f){let e=1/c;d*=e,u*=e,p=d*(d+a*u+2*o)+u*(a*d+u+2*l)+h}else p=-(d=Math.max(0,-(a*(u=s)+o)))*d+u*(u+2*l)+h}else p=-(d=Math.max(0,-(a*(u=-s)+o)))*d+u*(u+2*l)+h}else u<=-f?(u=(d=Math.max(0,-(-a*s+o)))>0?-s:Math.min(Math.max(-s,-l),s),p=-d*d+u*(u+2*l)+h):u<=f?(d=0,p=(u=Math.min(Math.max(-s,-l),s))*(u+2*l)+h):(u=(d=Math.max(0,-(a*s+o)))>0?s:Math.min(Math.max(-s,-l),s),p=-d*d+u*(u+2*l)+h)}else u=a>0?-s:s,p=-(d=Math.max(0,-(a*u+o)))*d+u*(u+2*l)+h;return i&&i.copy(this.direction).multiplyScalar(d).add(this.origin),r&&r.copy(iV).multiplyScalar(u).add(iU),p}intersectSphere(e,t){ik.subVectors(e.center,this.origin);let i=ik.dot(this.direction),r=ik.dot(ik)-i*i,s=e.radius*e.radius;if(r>s)return null;let a=Math.sqrt(s-r),o=i-a,l=i+a;return o<0&&l<0?null:o<0?this.at(l,t):this.at(o,t)}intersectsSphere(e){return this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(0===t)return 0===e.distanceToPoint(this.origin)?0:null;let i=-(this.origin.dot(e.normal)+e.constant)/t;return i>=0?i:null}intersectPlane(e,t){let i=this.distanceToPlane(e);return null===i?null:this.at(i,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return 0===t||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let i,r,s,a,o,l,h=1/this.direction.x,c=1/this.direction.y,d=1/this.direction.z,u=this.origin;return h>=0?(i=(e.min.x-u.x)*h,r=(e.max.x-u.x)*h):(i=(e.max.x-u.x)*h,r=(e.min.x-u.x)*h),c>=0?(s=(e.min.y-u.y)*c,a=(e.max.y-u.y)*c):(s=(e.max.y-u.y)*c,a=(e.min.y-u.y)*c),i>a||s>r||((s>i||isNaN(i))&&(i=s),(a<r||isNaN(r))&&(r=a),d>=0?(o=(e.min.z-u.z)*d,l=(e.max.z-u.z)*d):(o=(e.max.z-u.z)*d,l=(e.min.z-u.z)*d),i>l||o>r)||((o>i||i!=i)&&(i=o),(l<r||r!=r)&&(r=l),r<0)?null:this.at(i>=0?i:r,t)}intersectsBox(e){return null!==this.intersectBox(e,ik)}intersectTriangle(e,t,i,r,s){iG.subVectors(t,e),iH.subVectors(i,e),iW.crossVectors(iG,iH);let a=this.direction.dot(iW),o;if(a>0){if(r)return null;o=1}else{if(!(a<0))return null;o=-1,a=-a}ij.subVectors(this.origin,e);let l=o*this.direction.dot(iH.crossVectors(ij,iH));if(l<0)return null;let h=o*this.direction.dot(iG.cross(ij));if(h<0||l+h>a)return null;
2let c=-o*ij.dot(iW);return c<0?null:this.at(c/a,s)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},iX=class{constructor(){iX.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}set(e,t,i,r,s,a,o,l,h,c,d,u,p,f,m,g){let v=this.elements;return v[0]=e,v[4]=t,v[8]=i,v[12]=r,v[1]=s,v[5]=a,v[9]=o,v[13]=l,v[2]=h,v[6]=c,v[10]=d,v[14]=u,v[3]=p,v[7]=f,v[11]=m,v[15]=g,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new iX().fromArray(this.elements)}copy(e){let t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],t[9]=i[9],t[10]=i[10],t[11]=i[11],t[12]=i[12],t[13]=i[13],t[14]=i[14],t[15]=i[15],this}copyPosition(e){let t=this.elements,i=e.elements;return t[12]=i[12],t[13]=i[13],t[14]=i[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,i){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(e,t,i){return this.set(e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,0,0,0,1),this}extractRotation(e){let t=this.elements,i=e.elements,r=1/iY.setFromMatrixColumn(e,0).length(),s=1/iY.setFromMatrixColumn(e,1).length(),a=1/iY.setFromMatrixColumn(e,2).length();return t[0]=i[0]*r,t[1]=i[1]*r,t[2]=i[2]*r,t[3]=0,t[4]=i[4]*s,t[5]=i[5]*s,t[6]=i[6]*s,t[7]=0,t[8]=i[8]*a,t[9]=i[9]*a,t[10]=i[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,i=e.x,r=e.y,s=e.z,a=Math.cos(i),o=Math.sin(i),l=Math.cos(r),h=Math.sin(r),c=Math.cos(s),d=Math.sin(s);if("XYZ"===e.order){let e=a*c,i=a*d,r=o*c,s=o*d;t[0]=l*c,t[4]=-l*d,t[8]=h,t[1]=i+r*h,t[5]=e-s*h,t[9]=-o*l,t[2]=s-e*h,t[6]=r+i*h,t[10]=a*l}else if("YXZ"===e.order){let e=l*c,i=l*d,r=h*c,s=h*d;t[0]=e+s*o,t[4]=r*o-i,t[8]=a*h,t[1]=a*d,t[5]=a*c,t[9]=-o,t[2]=i*o-r,t[6]=s+e*o,t[10]=a*l}else if("ZXY"===e.order){let e=l*c,i=l*d,r=h*c,s=h*d;t[0]=e-s*o,t[4]=-a*d,t[8]=r+i*o,t[1]=i+r*o,t[5]=a*c,t[9]=s-e*o,t[2]=-a*h,t[6]=o,t[10]=a*l}else if("ZYX"===e.order){let e=a*c,i=a*d,r=o*c,s=o*d;t[0]=l*c,t[4]=r*h-i,t[8]=e*h+s,t[1]=l*d,t[5]=s*h+e,t[9]=i*h-r,t[2]=-h,t[6]=o*l,t[10]=a*l}else if("YZX"===e.order){let e=a*l,i=a*h,r=o*l,s=o*h;t[0]=l*c,t[4]=s-e*d,t[8]=r*d+i,t[1]=d,t[5]=a*c,t[9]=-o*c,t[2]=-h*c,t[6]=i*d+r,t[10]=e-s*d}else if("XZY"===e.order){let e=a*l,i=a*h,r=o*l,s=o*h;t[0]=l*c,t[4]=-d,t[8]=h*c,t[1]=e*d+s,t[5]=a*c,t[9]=i*d-r,t[2]=r*d-i,t[6]=o*c,t[10]=s*d+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(iK,e,iZ)}lookAt(e,t,i){let r=this.elements;return i0.subVectors(e,t),0===i0.lengthSq()&&(i0.z=1),i0.normalize(),iJ.crossVectors(i,i0),0===iJ.lengthSq()&&(1===Math.abs(i.z)?i0.x+=1e-4:i0.z+=1e-4,i0.normalize(),iJ.crossVectors(i,i0)),iJ.normalize(),i$.crossVectors(i0,iJ),r[0]=iJ.x,r[4]=i$.x,r[8]=i0.x,r[1]=iJ.y,r[5]=i$.y,r[9]=i0.y,r[2]=iJ.z,r[6]=i$.z,r[10]=i0.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let i=e.elements,r=t.elements,s=this.elements,a=i[0],o=i[4],l=i[8],h=i[12],c=i[1],d=i[5],u=i[9],p=i[13],f=i[2],m=i[6],g=i[10],v=i[14],y=i[3],x=i[7],b=i[11],w=i[15],S=r[0],_=r[4],A=r[8],M=r[12],E=r[1],C=r[5],T=r[9],P=r[13],D=r[2],I=r[6],O=r[10],R=r[14],L=r[3],B=r[7],z=r[11],F=r[15];return s[0]=a*S+o*E+l*D+h*L,s[4]=a*_+o*C+l*I+h*B,s[8]=a*A+o*T+l*O+h*z,s[12]=a*M+o*P+l*R+h*F,s[1]=c*S+d*E+u*D+p*L,s[5]=c*_+d*C+u*I+p*B,s[9]=c*A+d*T+u*O+p*z,s[13]=c*M+d*P+u*R+p*F,s[2]=f*S+m*E+g*D+v*L,s[6]=f*_+m*C+g*I+v*B,s[10]=f*A+m*T+g*O+v*z,s[14]=f*M+m*P+g*R+v*F,s[3]=y*S+x*E+b*D+w*L,s[7]=y*_+x*C+b*I+w*B,s[11]=y*A+x*T+b*O+w*z,s[15]=y*M+x*P+b*R+w*F,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],i=e[4],r=e[8],s=e[12],a=e[1],o=e[5],l=e[9],h=e[13],c=e[2],d=e[6],u=e[10],p=e[14];return e[3]*(+s*l*d-r*h*d-s*o*u+i*h*u+r*o*p-i*l*p)+e[7]*(+t*l*p-t*h*u+s*a*u-r*a*p+r*h*c-s*l*c)+e[11]*(+t*h*d-t*o*p-s*a*d+i*a*p+s*o*c-i*h*c)+e[15]*(-r*o*c-t*l*d+t*o*u+r*a*d-i*a*u+i*l*c)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,i){let r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=i),this}invert(){let e=this.elements,t=e[0],i=e[1],r=e[2],s=e[3],a=e[4],o=e[5],l=e[6],h=e[7],c=e[8],d=e[9],u=e[10],p=e[11],f=e[12],m=e[13],g=e[14],v=e[15],y=d
2*g*h-m*u*h+m*l*p-o*g*p-d*l*v+o*u*v,x=f*u*h-c*g*h-f*l*p+a*g*p+c*l*v-a*u*v,b=c*m*h-f*d*h+f*o*p-a*m*p-c*o*v+a*d*v,w=f*d*l-c*m*l-f*o*u+a*m*u+c*o*g-a*d*g,S=t*y+i*x+r*b+s*w;if(0===S)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let _=1/S;return e[0]=y*_,e[1]=(m*u*s-d*g*s-m*r*p+i*g*p+d*r*v-i*u*v)*_,e[2]=(o*g*s-m*l*s+m*r*h-i*g*h-o*r*v+i*l*v)*_,e[3]=(d*l*s-o*u*s-d*r*h+i*u*h+o*r*p-i*l*p)*_,e[4]=x*_,e[5]=(c*g*s-f*u*s+f*r*p-t*g*p-c*r*v+t*u*v)*_,e[6]=(f*l*s-a*g*s-f*r*h+t*g*h+a*r*v-t*l*v)*_,e[7]=(a*u*s-c*l*s+c*r*h-t*u*h-a*r*p+t*l*p)*_,e[8]=b*_,e[9]=(f*d*s-c*m*s-f*i*p+t*m*p+c*i*v-t*d*v)*_,e[10]=(a*m*s-f*o*s+f*i*h-t*m*h-a*i*v+t*o*v)*_,e[11]=(c*o*s-a*d*s-c*i*h+t*d*h+a*i*p-t*o*p)*_,e[12]=w*_,e[13]=(c*m*r-f*d*r+f*i*u-t*m*u-c*i*g+t*d*g)*_,e[14]=(f*o*r-a*m*r-f*i*l+t*m*l+a*i*g-t*o*g)*_,e[15]=(a*d*r-c*o*r+c*i*l-t*d*l-a*i*u+t*o*u)*_,this}scale(e){let t=this.elements,i=e.x,r=e.y,s=e.z;return t[0]*=i,t[4]*=r,t[8]*=s,t[1]*=i,t[5]*=r,t[9]*=s,t[2]*=i,t[6]*=r,t[10]*=s,t[3]*=i,t[7]*=r,t[11]*=s,this}getMaxScaleOnAxis(){let e=this.elements;return Math.sqrt(Math.max(e[0]*e[0]+e[1]*e[1]+e[2]*e[2],e[4]*e[4]+e[5]*e[5]+e[6]*e[6],e[8]*e[8]+e[9]*e[9]+e[10]*e[10]))}makeTranslation(e,t,i){return this.set(1,0,0,e,0,1,0,t,0,0,1,i,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),i=Math.sin(e);return this.set(1,0,0,0,0,t,-i,0,0,i,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),i=Math.sin(e);return this.set(t,0,i,0,0,1,0,0,-i,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,0,i,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let i=Math.cos(t),r=Math.sin(t),s=1-i,a=e.x,o=e.y,l=e.z,h=s*a,c=s*o;return this.set(h*a+i,h*o-r*l,h*l+r*o,0,h*o+r*l,c*o+i,c*l-r*a,0,h*l-r*o,c*l+r*a,s*l*l+i,0,0,0,0,1),this}makeScale(e,t,i){return this.set(e,0,0,0,0,t,0,0,0,0,i,0,0,0,0,1),this}makeShear(e,t,i,r,s,a){return this.set(1,i,s,0,e,1,a,0,t,r,1,0,0,0,0,1),this}compose(e,t,i){let r=this.elements,s=t._x,a=t._y,o=t._z,l=t._w,h=s+s,c=a+a,d=o+o,u=s*h,p=s*c,f=s*d,m=a*c,g=a*d,v=o*d,y=l*h,x=l*c,b=l*d,w=i.x,S=i.y,_=i.z;return r[0]=(1-(m+v))*w,r[1]=(p+b)*w,r[2]=(f-x)*w,r[3]=0,r[4]=(p-b)*S,r[5]=(1-(u+v))*S,r[6]=(g+y)*S,r[7]=0,r[8]=(f+x)*_,r[9]=(g-y)*_,r[10]=(1-(u+m))*_,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}decompose(e,t,i){let r=this.elements,s=iY.set(r[0],r[1],r[2]).length(),a=iY.set(r[4],r[5],r[6]).length(),o=iY.set(r[8],r[9],r[10]).length();0>this.determinant()&&(s=-s),e.x=r[12],e.y=r[13],e.z=r[14],iQ.copy(this);let l=1/s,h=1/a,c=1/o;return iQ.elements[0]*=l,iQ.elements[1]*=l,iQ.elements[2]*=l,iQ.elements[4]*=h,iQ.elements[5]*=h,iQ.elements[6]*=h,iQ.elements[8]*=c,iQ.elements[9]*=c,iQ.elements[10]*=c,t.setFromRotationMatrix(iQ),i.x=s,i.y=a,i.z=o,this}makePerspective(e,t,i,r,s,a){let o=this.elements;return o[0]=2*s/(t-e),o[4]=0,o[8]=(t+e)/(t-e),o[12]=0,o[1]=0,o[5]=2*s/(i-r),o[9]=(i+r)/(i-r),o[13]=0,o[2]=0,o[6]=0,o[10]=-(a+s)/(a-s),o[14]=-2*a
2*s/(a-s),o[3]=0,o[7]=0,o[11]=-1,o[15]=0,this}makeOrthographic(e,t,i,r,s,a){let o=this.elements,l=1/(t-e),h=1/(i-r),c=1/(a-s);return o[0]=2*l,o[4]=0,o[8]=0,o[12]=-((t+e)*l),o[1]=0,o[5]=2*h,o[9]=0,o[13]=-((i+r)*h),o[2]=0,o[6]=0,o[10]=-2*c,o[14]=-((a+s)*c),o[3]=0,o[7]=0,o[11]=0,o[15]=1,this}equals(e){let t=this.elements,i=e.elements;for(let e=0;e<16;e++)if(t[e]!==i[e])return!1;return!0}fromArray(e,t=0){for(let i=0;i<16;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){let i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e[t+9]=i[9],e[t+10]=i[10],e[t+11]=i[11],e[t+12]=i[12],e[t+13]=i[13],e[t+14]=i[14],e[t+15]=i[15],e}},iY=new iv,iQ=new iX,iK=new iv(0,0,0),iZ=new iv(1,1,1),iJ=new iv,i$=new iv,i0=new iv,i1=new iX,i2=new ig,i3=class{constructor(e=0,t=0,i=0,r=i3.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=t,this._z=i,this._order=r}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,i,r=this._order){return this._x=e,this._y=t,this._z=i,this._order=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,i=!0){let r=e.elements,s=r[0],a=r[4],o=r[8],l=r[1],h=r[5],c=r[9],d=r[2],u=r[6],p=r[10];switch(t){case"XYZ":this._y=Math.asin(tU(o,-1,1)),.9999999>Math.abs(o)?(this._x=Math.atan2(-c,p),this._z=Math.atan2(-a,s)):(this._x=Math.atan2(u,h),this._z=0);break;case"YXZ":this._x=Math.asin(-tU(c,-1,1)),.9999999>Math.abs(c)?(this._y=Math.atan2(o,p),this._z=Math.atan2(l,h)):(this._y=Math.atan2(-d,s),this._z=0);break;case"ZXY":this._x=Math.asin(tU(u,-1,1)),.9999999>Math.abs(u)?(this._y=Math.atan2(-d,p),this._z=Math.atan2(-a,h)):(this._y=0,this._z=Math.atan2(l,s));break;case"ZYX":this._y=Math.asin(-tU(d,-1,1)),.9999999>Math.abs(d)?(this._x=Math.atan2(u,p),this._z=Math.atan2(l,s)):(this._x=0,this._z=Math.atan2(-a,h));break;case"YZX":this._z=Math.asin(tU(l,-1,1)),.9999999>Math.abs(l)?(this._x=Math.atan2(-c,h),this._y=Math.atan2(-d,s)):(this._x=0,this._y=Math.atan2(o,p));break;case"XZY":this._z=Math.asin(-tU(a,-1,1)),.9999999>Math.abs(a)?(this._x=Math.atan2(u,h),this._y=Math.atan2(o,s)):(this._x=Math.atan2(-c,p),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+t)}return this._order=t,!0===i&&this._onChangeCallback(),this}setFromQuaternion(e,t,i){return i1.makeRotationFromQuaternion(e),this.setFromRotationMatrix(i1,t,i)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return i2.setFromEuler(this),this.setFromQuaternion(i2,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],void 0!==e[3]&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};i3.DEFAULT_ORDER="XYZ";var i4=class{constructor(){this.mask=1}set(e){this.mask=(1<<e|0)>>>0}enable(e){this.mask|=1<<e|0}enableAll(){this.mask=-1}toggle(e){this.mask^=1<<e|0}disable(e){this.mask&=~(1<<e|0)}disableAll(){this.mask=0}test(e){return(this.mask&e.mask)!=0}isEnabled(e){return(this.mask&(1<<e|0))!=0}},i5=0,i6=new iv,i8=new ig,i9=new iX,i7=new iv,re=new iv,rt=new iv,ri=new ig,rr=new iv(1,0,0),rs=new iv(0,1,0),ra=new iv(0,0,1),rn={type:"added"},ro={type:"removed"},rl=class extends tL{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:i5++}),this.uuid=tk(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=rl.DEFAULT_UP.clone();let e=new iv,t=new i3,i=new ig,r=new iv(1,1,1);t._onChange(function(){i.setFromEuler(t,!1)}),i._onChange(function(){t.setFromQuaternion(i,void 0,!1)}),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:e},rotation:{configurable:!0,enumerable:!0,value:t},quaternion:{configurable:!0,enumerable:!0,value:i},scale:{configurable:!0,enumerable:!0,value:r},modelViewMatrix:{value:new iX},normalMatrix:{value:new tK}}),this.matrix=new iX,this.matrixWorld=new iX,this.matrixAutoUpdate=rl.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.matrixWorldAutoUpdate=rl.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.layers=new i4,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeRender(){}onAfterRender(){}applyMatrix4(e){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(e),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(e){return this.quaternion.premultiply(e),this}setRotationFromAxisAngle(e,t){this.quaternion.setFromAxisAngle(e,t)}setRotationFromEuler(e){this.quaternion.setFromEuler(e,!0)}
2setRotationFromMatrix(e){this.quaternion.setFromRotationMatrix(e)}setRotationFromQuaternion(e){this.quaternion.copy(e)}rotateOnAxis(e,t){return i8.setFromAxisAngle(e,t),this.quaternion.multiply(i8),this}rotateOnWorldAxis(e,t){return i8.setFromAxisAngle(e,t),this.quaternion.premultiply(i8),this}rotateX(e){return this.rotateOnAxis(rr,e)}rotateY(e){return this.rotateOnAxis(rs,e)}rotateZ(e){return this.rotateOnAxis(ra,e)}translateOnAxis(e,t){return i6.copy(e).applyQuaternion(this.quaternion),this.position.add(i6.multiplyScalar(t)),this}translateX(e){return this.translateOnAxis(rr,e)}translateY(e){return this.translateOnAxis(rs,e)}translateZ(e){return this.translateOnAxis(ra,e)}localToWorld(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(this.matrixWorld)}worldToLocal(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(i9.copy(this.matrixWorld).invert())}lookAt(e,t,i){e.isVector3?i7.copy(e):i7.set(e,t,i);let r=this.parent;this.updateWorldMatrix(!0,!1),re.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?i9.lookAt(re,i7,this.up):i9.lookAt(i7,re,this.up),this.quaternion.setFromRotationMatrix(i9),r&&(i9.extractRotation(r.matrixWorld),i8.setFromRotationMatrix(i9),this.quaternion.premultiply(i8.invert()))}add(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return e===this?console.error("THREE.Object3D.add: object can't be added as a child of itself.",e):e&&e.isObject3D?(null!==e.parent&&e.parent.remove(e),e.parent=this,this.children.push(e),e.dispatchEvent(rn)):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",e),this}remove(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.remove(arguments[e]);return this}let t=this.children.indexOf(e);return -1!==t&&(e.parent=null,this.children.splice(t,1),e.dispatchEvent(ro)),this}removeFromParent(){let e=this.parent;return null!==e&&e.remove(this),this}clear(){for(let e=0;e<this.children.length;e++){let t=this.children[e];t.parent=null,t.dispatchEvent(ro)}return this.children.length=0,this}attach(e){return this.updateWorldMatrix(!0,!1),i9.copy(this.matrixWorld).invert(),null!==e.parent&&(e.parent.updateWorldMatrix(!0,!1),i9.multiply(e.parent.matrixWorld)),e.applyMatrix4(i9),this.add(e),e.updateWorldMatrix(!1,!0),this}getObjectById(e){return this.getObjectByProperty("id",e)}getObjectByName(e){return this.getObjectByProperty("name",e)}getObjectByProperty(e,t){if(this[e]===t)return this;for(let i=0,r=this.children.length;i<r;i++){let r=this.children[i].getObjectByProperty(e,t);if(void 0!==r)return r}}getObjectsByProperty(e,t){let i=[];this[e]===t&&i.push(this);for(let r=0,s=this.children.length;r<s;r++){let s=this.children[r].getObjectsByProperty(e,t);s.length>0&&(i=i.concat(s))}return i}getWorldPosition(e){return this.updateWorldMatrix(!0,!1),e.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(re,e,rt),e}getWorldScale(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(re,ri,e),e}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(t[8],t[9],t[10]).normalize()}raycast(){}traverse(e){e(this);let t=this.children;for(let i=0,r=t.length;i<r;i++)t[i].traverse(e)}traverseVisible(e){if(!1===this.visible)return;e(this);let t=this.children;for(let i=0,r=t.length;i<r;i++)t[i].traverseVisible(e)}traverseAncestors(e){let t=this.parent;null!==t&&(e(t),t.traverseAncestors(e))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(e){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)&&(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,e=!0);let t=this.children;for(let i=0,r=t.length;i<r;i++){let r=t[i];(!0===r.matrixWorldAutoUpdate||!0===e)&&r.updateMatrixWorld(e)}}updateWorldMatrix(e,t){let i=this.parent;if(!0===e&&null!==i&&!0===i.matrixWorldAutoUpdate&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),null===this.parent?this.matrixWorld.copy(this.matrix
2):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),!0===t){let e=this.children;for(let t=0,i=e.length;t<i;t++){let i=e[t];!0===i.matrixWorldAutoUpdate&&i.updateWorldMatrix(!1,!0)}}}toJSON(e){let t=void 0===e||"string"==typeof e,i={};t&&(e={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},i.metadata={version:4.5,type:"Object",generator:"Object3D.toJSON"});let r={};function s(t,i){return void 0===t[i.uuid]&&(t[i.uuid]=i.toJSON(e)),i.uuid}if(r.uuid=this.uuid,r.type=this.type,""!==this.name&&(r.name=this.name),!0===this.castShadow&&(r.castShadow=!0),!0===this.receiveShadow&&(r.receiveShadow=!0),!1===this.visible&&(r.visible=!1),!1===this.frustumCulled&&(r.frustumCulled=!1),0!==this.renderOrder&&(r.renderOrder=this.renderOrder),Object.keys(this.userData).length>0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate&&(r.matrixAutoUpdate=!1),this.isInstancedMesh&&(r.type="InstancedMesh",r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(r.instanceColor=this.instanceColor.toJSON())),this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&!0!==this.environment.isRenderTargetTexture&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=s(e.geometries,this.geometry);let t=this.geometry.parameters;if(void 0!==t&&void 0!==t.shapes){let i=t.shapes;if(Array.isArray(i))for(let t=0,r=i.length;t<r;t++){let r=i[t];s(e.shapes,r)}else s(e.shapes,i)}}if(this.isSkinnedMesh&&(r.bindMode=this.bindMode,r.bindMatrix=this.bindMatrix.toArray(),void 0!==this.skeleton&&(s(e.skeletons,this.skeleton),r.skeleton=this.skeleton.uuid)),void 0!==this.material){if(Array.isArray(this.material)){let t=[];for(let i=0,r=this.material.length;i<r;i++)t.push(s(e.materials,this.material[i]));r.material=t}else r.material=s(e.materials,this.material)}if(this.children.length>0){r.children=[];for(let t=0;t<this.children.length;t++)r.children.push(this.children[t].toJSON(e).object)}if(this.animations.length>0){r.animations=[];for(let t=0;t<this.animations.length;t++){let i=this.animations[t];r.animations.push(s(e.animations,i))}}if(t){let t=a(e.geometries),r=a(e.materials),s=a(e.textures),o=a(e.images),l=a(e.shapes),h=a(e.skeletons),c=a(e.animations),d=a(e.nodes);t.length>0&&(i.geometries=t),r.length>0&&(i.materials=r),s.length>0&&(i.textures=s),o.length>0&&(i.images=o),l.length>0&&(i.shapes=l),h.length>0&&(i.skeletons=h),c.length>0&&(i.animations=c),d.length>0&&(i.nodes=d)}return i.object=r,i;function a(e){let t=[];for(let i in e){let r=e[i];delete r.metadata,t.push(r)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.userData=JSON.parse(JSON.stringify(e.userData)),!0===t)for(let t=0;t<e.children.length;t++){let i=e.children[t];this.add(i.clone())}return this}};rl.DEFAULT_UP=new iv(0,1,0),rl.DEFAULT_MATRIX_AUTO_UPDATE=!0,rl.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;var rh=new iv,rc=new iv,rd=new iv,ru=new iv,rp=new iv,rf=new iv,rm=new iv,rg=new iv,rv=new iv,ry=new iv,rx=class{constructor(e=new iv,t=new iv,i=new iv){this.a=e,this.b=t,this.c=i}static getNormal(e,t,i,r){r.subVectors(i,t),rh.subVectors(e,t),r.cross(rh);let s=r.lengthSq();return s>0?r.multiplyScalar(1/Math.sqrt(s)):r.set(0,0,0)}static getBarycoord(e,t,i,r,s){rh.subVectors(r,t),rc.subVectors(i,t),rd.subVectors(e,t);let a=rh.dot(rh),o=rh.dot(rc),l=rh.dot(rd),h=rc.dot(rc),c=rc.dot(rd),d=a*h-o*o;if(0===d)return s.set(-2,-1,-1);let u=1/d,p=(h*l-o*c)*u,f=(a*c-o*l)*u;return s.set(1-p-f,f,p)}static containsPoint(e,t,i,r){return this.getBarycoord(e,t,i,r,ru),ru.x>=0&&ru.y>=0&&ru.x+ru.y<=1}static getUV(e,t,i,r,s,a,o,l){return this.getBarycoord(e,t,i,r,ru),l.set(0,0),l.addScaledVector(s,ru.x),l.addScaledVector(a,ru.y),l.addScaledVector(o,ru.z),l}static isFrontFacing(e,t,i,r){return rh.subVectors(i,t),rc.subVectors(e,t),0>rh.cross(rc).dot(r)}set(e,t,i){return this.a.copy(e),this.b.copy(t),this.c.copy(i),this}setFromPointsAndIndices(e,t,i,r){return this.a.copy(e[t]),this.b.copy(e[i]),this.c.copy(e[r]),this}setFromAttributeAndIndices(e,t,i,r){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,i),this.c.fromBufferAttribute(e,r),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return rh.subVectors(this.c,this.b),rc.subVectors(this.a,this.b),.5*rh.cross(rc).length()}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return rx.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return rx.getBarycoord(e,this.a,this.b,this.c,t)}
2getUV(e,t,i,r,s){return rx.getUV(e,this.a,this.b,this.c,t,i,r,s)}containsPoint(e){return rx.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return rx.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let i=this.a,r=this.b,s=this.c,a,o;rp.subVectors(r,i),rf.subVectors(s,i),rg.subVectors(e,i);let l=rp.dot(rg),h=rf.dot(rg);if(l<=0&&h<=0)return t.copy(i);rv.subVectors(e,r);let c=rp.dot(rv),d=rf.dot(rv);if(c>=0&&d<=c)return t.copy(r);let u=l*d-c*h;if(u<=0&&l>=0&&c<=0)return a=l/(l-c),t.copy(i).addScaledVector(rp,a);ry.subVectors(e,s);let p=rp.dot(ry),f=rf.dot(ry);if(f>=0&&p<=f)return t.copy(s);let m=p*h-l*f;if(m<=0&&h>=0&&f<=0)return o=h/(h-f),t.copy(i).addScaledVector(rf,o);let g=c*f-p*d;if(g<=0&&d-c>=0&&p-f>=0)return rm.subVectors(s,r),o=(d-c)/(d-c+(p-f)),t.copy(r).addScaledVector(rm,o);let v=1/(g+m+u);return a=m*v,o=u*v,t.copy(i).addScaledVector(rp,a).addScaledVector(rf,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},rb=0,rw=class extends tL{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:rb++}),this.uuid=tk(),this.name="",this.type="Material",this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=7680,this.stencilZFail=7680,this.stencilZPass=7680,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(e){this._alphaTest>0!=e>0&&this.version++,this._alphaTest=e}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(void 0!==e)for(let t in e){let i=e[t];if(void 0===i){console.warn("THREE.Material: '"+t+"' parameter is undefined.");continue}let r=this[t];if(void 0===r){console.warn("THREE."+this.type+": '"+t+"' is not a property of this material.");continue}r&&r.isColor?r.set(i):r&&r.isVector3&&i&&i.isVector3?r.copy(i):this[t]=i}}toJSON(e){let t=void 0===e||"string"==typeof e;t&&(e={textures:{},images:{}});let i={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function r(e){let t=[];for(let i in e){let r=e[i];delete r.metadata,t.push(r)}return t}
vendor: 11,949 bytes, line 2
2if(i.uuid=this.uuid,i.type=this.type,""!==this.name&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),void 0!==this.roughness&&(i.roughness=this.roughness),void 0!==this.metalness&&(i.metalness=this.metalness),void 0!==this.sheen&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(i.shininess=this.shininess),void 0!==this.clearcoat&&(i.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),void 0!==this.iridescence&&(i.iridescence=this.iridescence),void 0!==this.iridescenceIOR&&(i.iridescenceIOR=this.iridescenceIOR),void 0!==this.iridescenceThicknessRange&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(e).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(e).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(e).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(e).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(e).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(e).uuid,void 0!==this.combine&&(i.combine=this.combine)),void 0!==this.envMapIntensity&&(i.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(i.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(e).uuid),void 0!==this.transmission&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(e).uuid),void 0!==this.thickness&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(e).uuid),void 0!==this.attenuationDistance&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(i.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(i.size=this.size),null!==this.shadowSide&&(i.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(i.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(i.blending=this.blending),0!==this.side&&(i.side=this.side),this.vertexColors&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),!0===this.transparent&&(i.transparent=this.transparent),i.depthFunc=this.depthFunc,i.depthTest=this.depthTest,i.depthWrite=this.depthWrite,i.colorWrite=this.colorWrite,i.stencilWrite=this.stencilWrite,i.stencilWriteMask=this.stencilWriteMask,i.stencilFunc=this.stencilFunc,i.stencilRef=this.stencilRef,i.stencilFuncMask=this.stencilFuncMask,i.stencilFail=this.stencilFail,i.stencilZFail=this.stencilZFail,i.stencilZPass=this.stencilZPass,void 0!==this.rotation&&0!==this.rotation&&(i.rotation=this.rotation),!0===this.polygonOffset&&(i.polygonOffset=!0),0!==this.polygonOffsetFactor&&(i.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(i.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(i.linewidth=this.linewidth),void 0!==this.dashSize&&(i.dashSize=this.dashSize),void 0!==this.gapSize&&(i.gapSize=this.gapSize),void 0!==this.scale&&(i.scale=this.scale),!0===this.dithering&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(i.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(i.premultipliedAlpha=this.premultipliedAlpha),!0===this.forceSinglePass&&(i.forceSinglePass=this.forceSinglePass),!0===this.wireframe&&(i.wireframe=this.wireframe),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(i.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(i.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(i.flatShading=this.flatShading),!1===this.visible&&(i.visible=!1),!1===this.toneMapped&&(i.toneMapped=!1),!1===this.fog&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData),t){let t=r(e.textures),s=r(e.images);t.length>0&&(i.textures=t),s.length>0&&(i.images=s)}return i}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;let t=e.clippingPlanes,i=null;if(null!==t){let e=t.length;i=Array(e);for(let r=0;r!==e;++r)i[r]=t[r].clone()}return this.clippingPlanes=i,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){!0===e&&this.version++}},rS=class extends rw{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new ii(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}},r_=new iv,rA=new tQ,rM=class{constructor(e,t,i=!1){if(Array.isArray(e))throw TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,this.name="",this.array=e,this.itemSize=t,this.count=void 0!==e?e.length/t:0,this.normalized=i,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}setUsage(e){return this.usage=e,this}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this}copyAt(e,t,i){e*=this.itemSize,i*=t.itemSize;for(let r=0,s=this.itemSize;r<s;r++)this.array[e+r]=t.array[i+r];return this}copyArray(e){return this.array.set(e),this}applyMatrix3(e){if(2===this.itemSize)for(let t=0,i=this.count;t<i;t++)rA.fromBufferAttribute(this,t),rA.applyMatrix3(e),this.setXY(t,rA.x,rA.y);else if(3===this.itemSize)for(let t=0,i=this.count;t<i;t++)r_.fromBufferAttribute(this,t),r_.applyMatrix3(e),this.setXYZ(t,r_.x,r_.y,r_.z);return this}applyMatrix4(e){for(let t=0,i=this.count;t<i;t++)r_.fromBufferAttribute(this,t),r_.applyMatrix4(e),this.setXYZ(t,r_.x,r_.y,r_.z);return this}applyNormalMatrix(e){for(let t=0,i=this.count;t<i;t++)r_.fromBufferAttribute(this,t),r_.applyNormalMatrix(e),this.setXYZ(t,r_.x,r_.y,r_.z);return this}transformDirection(e){for(let t=0,i=this.count;t<i;t++)r_.fromBufferAttribute(this,t),r_.transformDirection(e),this.setXYZ(t,r_.x,r_.y,r_.z);return this}set(e,t=0){return this.array.set(e,t),this}getX(e){let t=this.array[e*this.itemSize];return this.normalized&&(t=tq(t,this.array)),t}setX(e,t){return this.normalized&&(t=tX(t,this.array)),this.array[e*this.itemSize]=t,this}getY(e){let t=this.array[e*this.itemSize+1];return this.normalized&&(t=tq(t,this.array)),t}setY(e,t){return this.normalized&&(t=tX(t,this.array)),this.array[e*this.itemSize+1]=t,this}getZ(e){let t=this.array[e*this.itemSize+2];return this.normalized&&(t=tq(t,this.array)),t}setZ(e,t){return this.normalized&&(t=tX(t,this.array)),this.array[e*this.itemSize+2]=t,this}getW(e){let t=this.array[e*this.itemSize+3];return this.normalized&&(t=tq(t,this.array)),t}setW(e,t){return this.normalized&&(t=tX(t,this.array)),this.array[e*this.itemSize+3]=t,this}setXY(e,t,i){return e*=this.itemSize,this.normalized&&(t=tX(t,this.array),i=tX(i,this.array)),this.array[e+0]=t,this.array[e+1]=i,this}setXYZ(e,t,i,r){return e*=this.itemSize,this.normalized&&(t=tX(t,this.array),i=tX(i,this.array),r=tX(r,this.array)),this.array[e+0]=t,this.array[e+1]=i,this.array[e+2]=r,this}setXYZW(e,t,i,r,s){return e*=this.itemSize,this.normalized&&(t=tX(t,this.array),i=tX(i,this.array),r=tX(r,this.array),s=tX(s,this.array)),this.array[e+0]=t,this.array[e+1]=i,this.array[e+2]=r,this.array[e+3]=s,this}
2onUpload(e){return this.onUploadCallback=e,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){let e={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return""!==this.name&&(e.name=this.name),35044!==this.usage&&(e.usage=this.usage),(0!==this.updateRange.offset||-1!==this.updateRange.count)&&(e.updateRange=this.updateRange),e}copyColorsArray(){console.error("THREE.BufferAttribute: copyColorsArray() was removed in r144.")}copyVector2sArray(){console.error("THREE.BufferAttribute: copyVector2sArray() was removed in r144.")}copyVector3sArray(){console.error("THREE.BufferAttribute: copyVector3sArray() was removed in r144.")}copyVector4sArray(){console.error("THREE.BufferAttribute: copyVector4sArray() was removed in r144.")}},rE=class extends rM{constructor(e,t,i){super(new Uint16Array(e),t,i)}},rC=class extends rM{constructor(e,t,i){super(new Uint32Array(e),t,i)}},rT=class extends rM{constructor(e,t,i){super(new Float32Array(e),t,i)}},rP=0,rD=new iX,rI=new rl,rO=new iv,rR=new ib,rL=new ib,rB=new iv,rz=class extends tL{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:rP++}),this.uuid=tk(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(e){return Array.isArray(e)?this.index=new(tJ(e)?rC:rE)(e,1):this.index=e,this}getAttribute(e){return this.attributes[e]}setAttribute(e,t){return this.attributes[e]=t,this}deleteAttribute(e){return delete this.attributes[e],this}hasAttribute(e){return void 0!==this.attributes[e]}addGroup(e,t,i=0){this.groups.push({start:e,count:t,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){let t=this.attributes.position;void 0!==t&&(t.applyMatrix4(e),t.needsUpdate=!0);let i=this.attributes.normal;if(void 0!==i){let t=new tK().getNormalMatrix(e);i.applyNormalMatrix(t),i.needsUpdate=!0}let r=this.attributes.tangent;return void 0!==r&&(r.transformDirection(e),r.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}applyQuaternion(e){return rD.makeRotationFromQuaternion(e),this.applyMatrix4(rD),this}rotateX(e){return rD.makeRotationX(e),this.applyMatrix4(rD),this}rotateY(e){return rD.makeRotationY(e),this.applyMatrix4(rD),this}rotateZ(e){return rD.makeRotationZ(e),this.applyMatrix4(rD),this}translate(e,t,i){return rD.makeTranslation(e,t,i),this.applyMatrix4(rD),this}scale(e,t,i){return rD.makeScale(e,t,i),this.applyMatrix4(rD),this}lookAt(e){return rI.lookAt(e),rI.updateMatrix(),this.applyMatrix4(rI.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(rO).negate(),this.translate(rO.x,rO.y,rO.z),this}setFromPoints(e){let t=[];for(let i=0,r=e.length;i<r;i++){let r=e[i];t.push(r.x,r.y,r.z||0)}return this.setAttribute("position",new rT(t,3)),this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new ib);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "fal
2se".',this),this.boundingBox.set(new iv(-1/0,-1/0,-1/0),new iv(1/0,1/0,1/0));return}if(void 0!==e){if(this.boundingBox.setFromBufferAttribute(e),t)for(let e=0,i=t.length;e<i;e++){let i=t[e];rR.setFromBufferAttribute(i),this.morphTargetsRelative?(rB.addVectors(this.boundingBox.min,rR.min),this.boundingBox.expandByPoint(rB),rB.addVectors(this.boundingBox.max,rR.max),this.boundingBox.expandByPoint(rB)):(this.boundingBox.expandByPoint(rR.min),this.boundingBox.expandByPoint(rR.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}computeBoundingSphere(){null===this.boundingSphere&&(this.boundingSphere=new iN);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "fal
2se".',this),this.boundingSphere.set(new iv,1/0);return}if(e){let i=this.boundingSphere.center;if(rR.setFromBufferAttribute(e),t)for(let e=0,i=t.length;e<i;e++){let i=t[e];rL.setFromBufferAttribute(i),this.morphTargetsRelative?(rB.addVectors(rR.min,rL.min),rR.expandByPoint(rB),rB.addVectors(rR.max,rL.max),rR.expandByPoint(rB)):(rR.expandByPoint(rL.min),rR.expandByPoint(rL.max))}rR.getCenter(i);let r=0;for(let t=0,s=e.count;t<s;t++)rB.fromBufferAttribute(e,t),r=Math.max(r,i.distanceToSquared(rB));if(t)for(let s=0,a=t.length;s<a;s++){let a=t[s],o=this.morphTargetsRelative;for(let t=0,s=a.count;t<s;t++)rB.fromBufferAttribute(a,t),o&&(rO.fromBufferAttribute(e,t),rB.add(rO)),r=Math.max(r,i.distanceToSquared(rB))}this.boundingSphere.radius=Math.sqrt(r),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}computeTangents(){let e=this.index,t=this.attributes;if(null===e||void 0===t.position||void 0===t.normal||void 0===t.uv){console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}let i=e.array,r=t.position.array,s=t.normal.array,a=t.uv.array,o=r.length/3;!1===this.hasAttribute("tangent")&&this.setAttribute("tangent",new rM(new Float32Array(4*o),4));let l=this.getAttribute("tangent").array,h=[],c=[];for(let e=0;e<o;e++)h[e]=new iv,c[e]=new iv;let d=new iv,u=new iv,p=new iv,f=new tQ,m=new tQ,g=new tQ,v=new iv,y=new iv,x=this.groups;0===x.length&&(x=[{start:0,count:i.length}]);for(let e=0,t=x.length;e<t;++e){let t=x[e],s=t.start,o=t.count;for(let e=s,t=s+o;e<t;e+=3)!function(e,t,i){d.fromArray(r,3*e),u.fromArray(r,3*t),p.fromArray(r,3*i),f.fromArray(a,2*e),m.fromArray(a,2*t),g.fromArray(a,2*i),u.sub(d),p.sub(d),m.sub(f),g.sub(f);let s=1/(m.x*g.y-g.x*m.y);isFinite(s)&&(v.copy(u).multiplyScalar(g.y).addScaledVector(p,-m.y).multiplyScalar(s),y.copy(p).multiplyScalar(m.x).addScaledVector(u,-g.x).multiplyScalar(s),h[e].add(v),h[t].add(v),h[i].add(v),c[e].add(y),c[t].add(y),c[i].add(y))}(i[e+0],i[e+1],i[e+2])}let b=new iv,w=new iv,S=new iv,_=new iv;function A(e){S.fromArray(s,3*e),_.copy(S);let t=h[e];b.copy(t),b.sub(S.multiplyScalar(S.dot(t))).normalize(),w.crossVectors(_,t);let i=0>w.dot(c[e])?-1:1;l[4*e]=b.x,l[4*e+1]=b.y,l[4*e+2]=b.z,l[4*e+3]=i}for(let e=0,t=x.length;e<t;++e){let t=x[e],r=t.start,s=t.count;for(let e=r,t=r+s;e<t;e+=3)A(i[e+0]),A(i[e+1]),A(i[e+2])}}computeVertexNormals(){let e=this.index,t=this.getAttribute("position");if(void 0!==t){let i=this.getAttribute("normal");if(void 0===i)i=new rM(new Float32Array(3*t.count),3),this.setAttribute("normal",i);else for(let e=0,t=i.count;e<t;e++)i.setXYZ(e,0,0,0);let r=new iv,s=new iv,a=new iv,o=new iv,l=new iv,h=new iv,c=new iv,d=new iv;if(e)for(let u=0,p=e.count;u<p;u+=3){let p=e.getX(u+0),f=e.getX(u+1),m=e.getX(u+2);r.fromBufferAttribute(t,p),s.fromBufferAttribute(t,f),a.fromBufferAttribute(t,m),c.subVectors(a,s),d.subVectors(r,s),c.cross(d),o.fromBufferAttribute(i,p),l.fromBufferAttribute(i,f),h.fromBufferAttribute(i,m),o.add(c),l.add(c),h.add(c),i.setXYZ(p,o.x,o.y,o.z),i.setXYZ(f,l.x,l.y,l.z),i.setXYZ(m,h.x,h.y,h.z)}else for(let e=0,o=t.count;e<o;e+=3)r.fromBufferAttribute(t,e+0),s.fromBufferAttribute(t,e+1),a.fromBufferAttribute(t,e+2),c.subVectors(a,s),d.subVectors(r,s),c.cross(d),i.setXYZ(e+0,c.x,c.y,c.z),i.setXYZ(e+1,c.x,c.y,c.z),i.setXYZ(e+2,c.x,c.y,c.z);this.normalizeNormals(),i.needsUpdate=!0}}merge(){return console.error("THREE.BufferGeometry.merge() has been removed. Use THREE.BufferGeometryUtils.mergeBufferGeometries() instead."),this}normalizeNormals(){let e=this.attributes.normal;for(let t=0,i=e.count;t<i;t++)rB.fromBufferAttribute(e,t),rB.normalize(),e.setXYZ(t,rB.x,rB.y,rB.z)}toNonIndexed(){function e(e,t){let i=e.array,r=e.itemSize,s=e.normalized,a=new i.constructor(t.length*r),o=0,l=0;for(let s=0,h=t.length;s<h;s++){o=e.isInterleavedBufferAttribute?t[s]*e.data.stride+e.offset:t[s]*r;for(let e=0;e<r;e++)a[l++]=i[o++]}return new rM(a,r,s)}if(null===this.index)return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;let t=new rz,i=this.index.array,r=this.attributes;for(let s in r){let a=e(r[s],i);t.setAttribute(s,a)}let s=this.morphAttributes;for(let r in s){let a=[],o=s[r];for(let t=0,r=o.length;t<r;t++){let r=e(o[t],i);a.push(r)}t.morphAttributes[r]=a}t.morphTargetsRelative=this.morphTargetsRelative;let a=this.groups;for(let e=0,i=a.length;e<i;e++){let i=a[e];t.addGroup(i.start,i.count,i.materialIndex)}return t}toJSON(){let e={metadata:{version:4.5,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};
2if(e.uuid=this.uuid,e.type=this.type,""!==this.name&&(e.name=this.name),Object.keys(this.userData).length>0&&(e.userData=this.userData),void 0!==this.parameters){let t=this.parameters;for(let i in t)void 0!==t[i]&&(e[i]=t[i]);return e}e.data={attributes:{}};let t=this.index;null!==t&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let i=this.attributes;for(let t in i){let r=i[t];e.data.attributes[t]=r.toJSON(e.data)}let r={},s=!1;for(let t in this.morphAttributes){let i=this.morphAttributes[t],a=[];for(let t=0,r=i.length;t<r;t++){let r=i[t];a.push(r.toJSON(e.data))}a.length>0&&(r[t]=a,s=!0)}s&&(e.data.morphAttributes=r,e.data.morphTargetsRelative=this.morphTargetsRelative);let a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));let o=this.boundingSphere;return null!==o&&(e.data.boundingSphere={center:o.center.toArray(),radius:o.radius}),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let i=e.index;null!==i&&this.setIndex(i.clone(t));let r=e.attributes;for(let e in r){let i=r[e];this.setAttribute(e,i.clone(t))}let s=e.morphAttributes;for(let e in s){let i=[],r=s[e];for(let e=0,s=r.length;e<s;e++)i.push(r[e].clone(t));this.morphAttributes[e]=i}this.morphTargetsRelative=e.morphTargetsRelative;let a=e.groups;for(let e=0,t=a.length;e<t;e++){let t=a[e];this.addGroup(t.start,t.count,t.materialIndex)}let o=e.boundingBox;null!==o&&(this.boundingBox=o.clone());let l=e.boundingSphere;return null!==l&&(this.boundingSphere=l.clone()),this.drawRange.start=e.drawRange.start,this.drawRange.count=e.drawRange.count,this.userData=e.userData,void 0!==e.parameters&&(this.parameters=Object.assign({},e.parameters)),this}dispose(){this.dispatchEvent({type:"dispose"})}},rF=new iX,rN=new iq,rk=new iN,rU=new iv,rV=new iv,rj=new iv,rG=new iv,rH=new iv,rW=new tQ,rq=new tQ,rX=new tQ,rY=new iv,rQ=new iv,rK=class extends rl{constructor(e=new rz,t=new rS){super(),this.isMesh=!0,this.type="Mesh",this.geometry=e,this.material=t,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),void 0!==e.morphTargetInfluences&&(this.morphTargetInfluences=e.morphTargetInfluences.slice()),void 0!==e.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary)),this.material=e.material,this.geometry=e.geometry,this}updateMorphTargets(){let e=this.geometry.morphAttributes,t=Object.keys(e);if(t.length>0){let i=e[t[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=i.length;e<t;e++){let t=i[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[t]=e}}}}getVertexPosition(e,t){let i=this.geometry,r=i.attributes.position,s=i.morphAttributes.position,a=i.morphTargetsRelative;t.fromBufferAttribute(r,e);let o=this.morphTargetInfluences;if(s&&o){rH.set(0,0,0);for(let i=0,r=s.length;i<r;i++){let r=o[i],l=s[i];0!==r&&(rG.fromBufferAttribute(l,e),a?rH.addScaledVector(rG,r):rH.addScaledVector(rG.sub(t),r))}t.add(rH)}return this.isSkinnedMesh&&this.boneTransform(e,t),t}raycast(e,t){let i=this.geometry,r=this.material,s=this.matrixWorld;if(void 0===r||(null===i.boundingSphere&&i.computeBoundingSphere(),rk.copy(i.boundingSphere),rk.applyMatrix4(s),!1===e.ray.intersectsSphere(rk))||(rF.copy(s).invert(),rN.copy(e.ray).applyMatrix4(rF),null!==i.boundingBox&&!1===rN.intersectsBox(i.boundingBox)))return;let a,o=i.index,l=i.attributes.position,h=i.attributes.uv,c=i.attributes.uv2,d=i.groups,u=i.drawRange;if(null!==o){if(Array.isArray(r))for(let i=0,s=d.length;i<s;i++){let s=d[i],l=r[s.materialIndex],p=Math.max(s.start,u.start),f=Math.min(o.count,Math.min(s.start+s.count,u.start+u.count));for(let i=p;i<f;i+=3)(a=rZ(this,l,e,rN,h,c,o.getX(i),o.getX(i+1),o.getX(i+2)))&&(a.faceIndex=Math.floor(i/3),a.face.materialIndex=s.materialIndex,t.push(a))}else{let i=Math.max(0,u.start),s=Math.min(o.count,u.start+u.count);for(let l=i;l<s;l+=3)(a=rZ(this,r,e,rN,h,c,o.getX(l),o.getX(l+1),o.getX(l+2)))&&(a.faceIndex=Math.floor(l/3),t.push(a))}}else if(void 0!==l){if(Array.isArray(r))for(let i=0,s=d.length;i<s;i++){let s=d[i],o=r[s.materialIndex],p=Math.max(s.start,u.start),f=Math.min(l.count,Math.min(s.start+s.count,u.start+u.count));for(let i=p;i<f;i+=3)(a=rZ(this,o,e,rN,h,c,i,i+1,i+2))&&(a.faceIndex=Math.floor(i/3),a.face.materialIndex=s.materialIndex,t.push(a))}else{let i=Math.max(0,u.start),s=Math.min(l.count,u.start+u.count);for(let o=i;o<s;o+=3)(a=rZ(this,r,e,rN,h,c,o,o+1,o+2))&&(a.faceIndex=Math.floor(o/3),t.pu
2sh(a))}}}};function rZ(e,t,i,r,s,a,o,l,h){e.getVertexPosition(o,rU),e.getVertexPosition(l,rV),e.getVertexPosition(h,rj);let c=function(e,t,i,r,s,a,o,l){if(null===(1===t.side?r.intersectTriangle(o,a,s,!0,l):r.intersectTriangle(s,a,o,0===t.side,l)))return null;rQ.copy(l),rQ.applyMatrix4(e.matrixWorld);let h=i.ray.origin.distanceTo(rQ);return h<i.near||h>i.far?null:{distance:h,point:rQ.clone(),object:e}}(e,t,i,r,rU,rV,rj,rY);if(c){s&&(rW.fromBufferAttribute(s,o),rq.fromBufferAttribute(s,l),rX.fromBufferAttribute(s,h),c.uv=rx.getUV(rY,rU,rV,rj,rW,rq,rX,new tQ)),a&&(rW.fromBufferAttribute(a,o),rq.fromBufferAttribute(a,l),rX.fromBufferAttribute(a,h),c.uv2=rx.getUV(rY,rU,rV,rj,rW,rq,rX,new tQ));let e={a:o,b:l,c:h,normal:new iv,materialIndex:0};rx.getNormal(rU,rV,rj,e.normal),c.face=e}return c}var rJ=class extends rz{constructor(e=1,t=1,i=1,r=1,s=1,a=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:t,depth:i,widthSegments:r,heightSegments:s,depthSegments:a};let o=this;r=Math.floor(r),s=Math.floor(s);let l=[],h=[],c=[],d=[],u=0,p=0;function f(e,t,i,r,s,a,f,m,g,v,y){let x=a/g,b=f/v,w=a/2,S=f/2,_=m/2,A=g+1,M=v+1,E=0,C=0,T=new iv;for(let a=0;a<M;a++){let o=a*b-S;for(let l=0;l<A;l++){let u=l*x-w;T[e]=u*r,T[t]=o*s,T[i]=_,h.push(T.x,T.y,T.z),T[e]=0,T[t]=0,T[i]=m>0?1:-1,c.push(T.x,T.y,T.z),d.push(l/g),d.push(1-a/v),E+=1}}for(let e=0;e<v;e++)for(let t=0;t<g;t++){let i=u+t+A*e,r=u+t+A*(e+1),s=u+(t+1)+A*(e+1),a=u+(t+1)+A*e;l.push(i,r,a),l.push(r,s,a),C+=6}o.addGroup(p,C,y),p+=C,u+=E}f("z","y","x",-1,-1,i,t,e,a=Math.floor(a),s,0),f("z","y","x",1,-1,i,t,-e,a,s,1),f("x","z","y",1,1,e,i,t,r,a,2),f("x","z","y",1,-1,e,i,-t,r,a,3),f("x","y","z",1,-1,e,t,i,r,s,4),f("x","y","z",-1,-1,e,t,-i,r,s,5),this.setIndex(l),this.setAttribute("position",new rT(h,3)),this.setAttribute("normal",new rT(c,3)),this.setAttribute("uv",new rT(d,2))}static fromJSON(e){return new rJ(e.width,e.height,e.depth,e.widthSegments,e.heightSegments,e.depthSegments)}};function r$(e){let t={};for(let i in e)for(let r in t[i]={},e[i]){let s=e[i][r];s&&(s.isColor||s.isMatrix3||s.isMatrix4||s.isVector2||s.isVector3||s.isVector4||s.isTexture||s.isQuaternion)?t[i][r]=s.clone():Array.isArray(s)?t[i][r]=s.slice():t[i][r]=s}return t}function r0(e){let t={};for(let i=0;i<e.length;i++){let r=r$(e[i]);for(let e in r)t[e]=r[e]}return t}function r1(e){return null===e.getRenderTarget()&&3001===e.outputEncoding?tI:tO}var r2={clone:r$,merge:r0},r3=`void main() {
3	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
4}`,r4=`void main() {
5	gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );
6}`,r5=class extends rw{constructor(e){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=r3,this.fragmentShader=r4,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,void 0!==e&&this.setValues(e)}copy(e){return super.copy(e),this.fragmentShader=e.fragmentShader,this.vertexShader=e.vertexShader,this.uniforms=r$(e.uniforms),this.uniformsGroups=function(e){let t=[];for(let i=0;i<e.length;i++)t.push(e[i].clone());return t}(e.uniformsGroups),this.defines=Object.assign({},e.defines),this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.fog=e.fog,this.lights=e.lights,this.clipping=e.clipping,this.extensions=Object.assign({},e.extensions),this.glslVersion=e.glslVersion,this}toJSON(e){let t=super.toJSON(e);for(let i in t.glslVersion=this.glslVersion,t.uniforms={},this.uniforms){let r=this.uniforms[i].value;r&&r.isTexture?t.uniforms[i]={type:"t",value:r.toJSON(e).uuid}:r&&r.isColor?t.uniforms[i]={type:"c",value:r.getHex()}:r&&r.isVector2?t.uniforms[i]={type:"v2",value:r.toArray()}:r&&r.isVector3?t.uniforms[i]={type:"v3",value:r.toArray()}:r&&r.isVector4?t.uniforms[i]={type:"v4",value:r.toArray()}:r&&r.isMatrix3?t.uniforms[i]={type:"m3",value:r.toArray()}:r&&r.isMatrix4?t.uniforms[i]={type:"m4",value:r.toArray()}:t.uniforms[i]={value:r}}Object.keys(this.defines).length>0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader;let i={};for(let e in this.extensions)!0===this.extensions[e]&&(i[e]=!0);return Object.keys(i).length>0&&(t.extensions=i),t}},r6=class extends rl{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new iX,this.projectionMatrix=new iX,this.projectionMatrixInverse=new iX}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(-t[8],-t[9],-t[10]).normalize()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}},r8=class extends r6{constructor(e=50,t=1,i=.1,r=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=i,this.far=r,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=null===e.view?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){let t=.5*this.getFilmHeight()/e;this.fov=2*tN*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){let e=Math.tan(.5*tF*this.fov);return .5*this.getFilmHeight()/e}
6getEffectiveFOV(){return 2*tN*Math.atan(Math.tan(.5*tF*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(e,t,i,r,s,a){this.aspect=e/t,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=r,this.view.width=s,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=this.near,t=e*Math.tan(.5*tF*this.fov)/this.zoom,i=2*t,r=this.aspect*i,s=-.5*r,a=this.view;if(null!==this.view&&this.view.enabled){let e=a.fullWidth,o=a.fullHeight;s+=a.offsetX*r/e,t-=a.offsetY*i/o,r*=a.width/e,i*=a.height/o}let o=this.filmOffset;0!==o&&(s+=e*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(s,s+r,t,t-i,e,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,null!==this.view&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}},r9=class extends rl{constructor(e,t,i){super(),this.type="CubeCamera",this.renderTarget=i;let r=new r8(-90,1,e,t);r.layers=this.layers,r.up.set(0,1,0),r.lookAt(1,0,0),this.add(r);let s=new r8(-90,1,e,t);s.layers=this.layers,s.up.set(0,1,0),s.lookAt(-1,0,0),this.add(s);let a=new r8(-90,1,e,t);a.layers=this.layers,a.up.set(0,0,-1),a.lookAt(0,1,0),this.add(a);let o=new r8(-90,1,e,t);o.layers=this.layers,o.up.set(0,0,1),o.lookAt(0,-1,0),this.add(o);let l=new r8(-90,1,e,t);l.layers=this.layers,l.up.set(0,1,0),l.lookAt(0,0,1),this.add(l);let h=new r8(-90,1,e,t);h.layers=this.layers,h.up.set(0,1,0),h.lookAt(0,0,-1),this.add(h)}update(e,t){null===this.parent&&this.updateMatrixWorld();let i=this.renderTarget,[r,s,a,o,l,h]=this.children,c=e.getRenderTarget(),d=e.toneMapping,u=e.xr.enabled;e.toneMapping=0,e.xr.enabled=!1;let p=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,e.setRenderTarget(i,0),e.render(t,r),e.setRenderTarget(i,1),e.render(t,s),e.setRenderTarget(i,2),e.render(t,a),e.setRenderTarget(i,3),e.render(t,o),e.setRenderTarget(i,4),e.render(t,l),i.texture.generateMipmaps=p,e.setRenderTarget(i,5),e.render(t,h),e.setRenderTarget(c),e.toneMapping=d,e.xr.enabled=u,i.texture.needsPMREMUpdate=!0}},r7=class extends ih{constructor(e,t,i,r,s,a,o,l,h,c){super(e=void 0!==e?e:[],t=void 0!==t?t:301,i,r,s,a,o,l,h,c),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}},se=class extends id{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;let i={width:e,height:e,depth:1};this.texture=new r7([i,i,i,i,i,i],t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==t.generateMipmaps&&t.generateMipmaps,this.texture.minFilter=void 0!==t.minFilter?t.minFilter:1006}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.encoding=t.encoding,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;let i={uniforms:{tEquirect:{value:null}},vertexShader:`
7
8				varying vec3 vWorldDirection;
9
10				vec3 transformDirection( in vec3 dir, in mat4 matrix ) {
11
12					return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );
13
14				}
15
16				void main() {
17
18					vWorldDirection = transformDirection( position, modelMatrix );
19
20					#include <begin_vertex>
21					#include <project_vertex>
22
23				}
24			`,fragmentShader:`
25
26				uniform sampler2D tEquirect;
27
28				varying vec3 vWorldDirection;
29
30				#include <common>
31
32				void main() {
33
34					vec3 direction = normalize( vWorldDirection );
35
36					vec2 sampleUV = equirectUv( direction );
37
38					gl_FragColor = texture2D( tEquirect, sampleUV );
39
40				}
41			`},r=new rJ(5,5,5),s=new r5({name:"CubemapFromEquirect",uniforms:r$(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:1,blending:0});s.uniforms.tEquirect.value=t;let a=new rK(r,s),o=t.minFilter;return 1008===t.minFilter&&(t.minFilter=1006),new r9(1,10,this).update(e,a),t.minFilter=o,a.geometry.dispose(),a.material.dispose(),this}clear(e,t,i,r){let s=e.getRenderTarget();for(let s=0;s<6;s++)e.setRenderTarget(this,s),e.clear(t,i,r);e.setRenderTarget(s)}},st=new iv,si=new iv,sr=new tK,ss=class{constructor(e=new iv(1,0,0),t=0){this.isPlane=!0,this.normal=e,this.constant=t}set(e,t){return this.normal.copy(e),this.constant=t,this}setComponents(e,t,i,r){return this.normal.set(e,t,i),this.constant=r,this}setFromNormalAndCoplanarPoint(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this}
41setFromCoplanarPoints(e,t,i){let r=st.subVectors(i,t).cross(si.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(r,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){let e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}distanceToSphere(e){return this.distanceToPoint(e.center)-e.radius}projectPoint(e,t){return t.copy(this.normal).multiplyScalar(-this.distanceToPoint(e)).add(e)}intersectLine(e,t){let i=e.delta(st),r=this.normal.dot(i);if(0===r)return 0===this.distanceToPoint(e.start)?t.copy(e.start):null;let s=-(e.start.dot(this.normal)+this.constant)/r;return s<0||s>1?null:t.copy(i).multiplyScalar(s).add(e.start)}intersectsLine(e){let t=this.distanceToPoint(e.start),i=this.distanceToPoint(e.end);return t<0&&i>0||i<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let i=t||sr.getNormalMatrix(e),r=this.coplanarPoint(st).applyMatrix4(e),s=this.normal.applyMatrix3(i).normalize();return this.constant=-r.dot(s),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}},sa=new iN,sn=new iv,so=class{constructor(e=new ss,t=new ss,i=new ss,r=new ss,s=new ss,a=new ss){this.planes=[e,t,i,r,s,a]}set(e,t,i,r,s,a){let o=this.planes;return o[0].copy(e),o[1].copy(t),o[2].copy(i),o[3].copy(r),o[4].copy(s),o[5].copy(a),this}copy(e){let t=this.planes;for(let i=0;i<6;i++)t[i].copy(e.planes[i]);return this}setFromProjectionMatrix(e){let t=this.planes,i=e.elements,r=i[0],s=i[1],a=i[2],o=i[3],l=i[4],h=i[5],c=i[6],d=i[7],u=i[8],p=i[9],f=i[10],m=i[11],g=i[12],v=i[13],y=i[14],x=i[15];return t[0].setComponents(o-r,d-l,m-u,x-g).normalize(),t[1].setComponents(o+r,d+l,m+u,x+g).normalize(),t[2].setComponents(o+s,d+h,m+p,x+v).normalize(),t[3].setComponents(o-s,d-h,m-p,x-v).normalize(),t[4].setComponents(o-a,d-c,m-f,x-y).normalize(),t[5].setComponents(o+a,d+c,m+f,x+y).normalize(),this}intersectsObject(e){let t=e.geometry;return null===t.boundingSphere&&t.computeBoundingSphere(),sa.copy(t.boundingSphere).applyMatrix4(e.matrixWorld),this.intersectsSphere(sa)}intersectsSprite(e){return sa.center.set(0,0,0),sa.radius=.7071067811865476,sa.applyMatrix4(e.matrixWorld),this.intersectsSphere(sa)}intersectsSphere(e){let t=this.planes,i=e.center,r=-e.radius;for(let e=0;e<6;e++)if(t[e].distanceToPoint(i)<r)return!1;return!0}intersectsBox(e){let t=this.planes;for(let i=0;i<6;i++){let r=t[i];if(sn.x=r.normal.x>0?e.max.x:e.min.x,sn.y=r.normal.y>0?e.max.y:e.min.y,sn.z=r.normal.z>0?e.max.z:e.min.z,0>r.distanceToPoint(sn))return!1}return!0}containsPoint(e){let t=this.planes;for(let i=0;i<6;i++)if(0>t[i].distanceToPoint(e))return!1;return!0}clone(){return new this.constructor().copy(this)}};function sl(){let e=null,t=!1,i=null,r=null;function s(t,a){i(t,a),r=e.requestAnimationFrame(s)}return{start:function(){!0!==t&&null!==i&&(r=e.requestAnimationFrame(s),t=!0)},stop:function(){e.cancelAnimationFrame(r),t=!1},setAnimationLoop:function(e){i=e},setContext:function(t){e=t}}}function sh(e,t){let i=t.isWebGL2,r=new WeakMap;return{get:function(e){return e.isInterleavedBufferAttribute&&(e=e.data),r.get(e)},remove:function(t){t.isInterleavedBufferAttribute&&(t=t.data);let i=r.get(t);i&&(e.deleteBuffer(i.buffer),r.delete(t))},update:function(t,s){var a,o;let l,h;if(t.isGLBufferAttribute){let e=r.get(t);(!e||e.version<t.version)&&r.set(t,{buffer:t.buffer,type:t.type,bytesPerElement:t.elementSize,version:t.version});return}t.isInterleavedBufferAttribute&&(t=t.data);let c=r.get(t);void 0===c?r.set(t,function(t,r){let s,a=t.array,o=t.usage,l=e.createBuffer();if(e.bindBuffer(r,l),e.bufferData(r,a,o),t.onUploadCallback(),a instanceof Float32Array)s=5126;else if(a instanceof Uint16Array){if(t.isFloat16BufferAttribute){if(i)s=5131;else throw Error("THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.")}else s=5123}else if(a instanceof Int16Array)s=5122;else if(a instanceof Uint32Array)s=5125;else if(a instanceof Int32Array)s=5124;else if(a instanceof Int8Array)s=5120;else if(a instanceof Uint8Array)s=5121;else if(a instanceof Uint8ClampedArray)s=5121;else throw Error("THREE.WebGLAttributes: Unsupported buffer data format: "+a);return{buffer:l,type:s,bytesPerElement:a.BYTES_PER_ELEMENT,version:t.version}}(t,s)):c.version<t.version&&(a=c.buffer,l=(o=t).array,h=o.updateRange,e.bindBuffer(s,a),-1===h.count?e.bufferSubData(s,0,l):(i?e.bufferSubData(s,h.offset*l.BYTES_PER_ELEMENT,l,h.offset,h.count):e.bufferSubData(s,h.offset*l.BYTES_PER_ELEMENT,l.subarray(h.offset,h.offset+h.count)),h.count=-1),o.onUploadCallback(),c.version=t.version)}}}var sc=class extends rz{constructor(e=1,t=1,i=1,r=1){super(),this.type="PlaneGeometry",this.parameters={width:e,height:t,widthSegments:i,heightSegments:r};let s=e/2,a=t/2,o=Math.floor(i),l=Math.floor(r),h=o+1,c=l+1,d=e/o,u=t/l,p=[],f=[],m=[],g=[];for(let e=0;e<c;
vendor: 4,273 bytes, lines 41-119
41e++){let t=e*u-a;for(let i=0;i<h;i++){let r=i*d-s;f.push(r,-t,0),m.push(0,0,1),g.push(i/o),g.push(1-e/l)}}for(let e=0;e<l;e++)for(let t=0;t<o;t++){let i=t+h*e,r=t+h*(e+1),s=t+1+h*(e+1),a=t+1+h*e;p.push(i,r,a),p.push(r,s,a)}this.setIndex(p),this.setAttribute("position",new rT(f,3)),this.setAttribute("normal",new rT(m,3)),this.setAttribute("uv",new rT(g,2))}static fromJSON(e){return new sc(e.width,e.height,e.widthSegments,e.heightSegments)}},sd={alphamap_fragment:`#ifdef USE_ALPHAMAP
42	diffuseColor.a *= texture2D( alphaMap, vUv ).g;
43#endif`,alphamap_pars_fragment:`#ifdef USE_ALPHAMAP
44	uniform sampler2D alphaMap;
45#endif`,alphatest_fragment:`#ifdef USE_ALPHATEST
46	if ( diffuseColor.a < alphaTest ) discard;
47#endif`,alphatest_pars_fragment:`#ifdef USE_ALPHATEST
48	uniform float alphaTest;
49#endif`,aomap_fragment:`#ifdef USE_AOMAP
50	float ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;
51	reflectedLight.indirectDiffuse *= ambientOcclusion;
52	#if defined( USE_ENVMAP ) && defined( STANDARD )
53		float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );
54		reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );
55	#endif
56#endif`,aomap_pars_fragment:`#ifdef USE_AOMAP
57	uniform sampler2D aoMap;
58	uniform float aoMapIntensity;
59#endif`,begin_vertex:"vec3 transformed = vec3( position );",beginnormal_vertex:`vec3 objectNormal = vec3( normal );
60#ifdef USE_TANGENT
61	vec3 objectTangent = vec3( tangent.xyz );
62#endif`,bsdfs:`vec3 BRDF_Lambert( const in vec3 diffuseColor ) {
63	return RECIPROCAL_PI * diffuseColor;
64}
65vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {
66	float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );
67	return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );
68}
69float F_Schlick( const in float f0, const in float f90, const in float dotVH ) {
70	float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );
71	return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );
72}
73vec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {
74    float x = clamp( 1.0 - dotVH, 0.0, 1.0 );
75    float x2 = x * x;
76    float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );
77    return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );
78}
79float V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {
80	float a2 = pow2( alpha );
81	float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );
82	float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );
83	return 0.5 / max( gv + gl, EPSILON );
84}
85float D_GGX( const in float alpha, const in float dotNH ) {
86	float a2 = pow2( alpha );
87	float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;
88	return RECIPROCAL_PI * a2 / pow2( denom );
89}
90vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness ) {
91	float alpha = pow2( roughness );
92	vec3 halfDir = normalize( lightDir + viewDir );
93	float dotNL = saturate( dot( normal, lightDir ) );
94	float dotNV = saturate( dot( normal, viewDir ) );
95	float dotNH = saturate( dot( normal, halfDir ) );
96	float dotVH = saturate( dot( viewDir, halfDir ) );
97	vec3 F = F_Schlick( f0, f90, dotVH );
98	float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );
99	float D = D_GGX( alpha, dotNH );
100	return F * ( V * D );
101}
102#ifdef USE_IRIDESCENCE
103	vec3 BRDF_GGX_Iridescence( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float iridescence, const in vec3 iridescenceFresnel, const in float roughness ) {
104		float alpha = pow2( roughness );
105		vec3 halfDir = normalize( lightDir + viewDir );
106		float dotNL = saturate( dot( normal, lightDir ) );
107		float dotNV = saturate( dot( normal, viewDir ) );
108		float dotNH = saturate( dot( normal, halfDir ) );
109		float dotVH = saturate( dot( viewDir, halfDir ) );
110		vec3 F = mix( F_Schlick( f0, f90, dotVH ), iridescenceFresnel, iridescence );
111		float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );
112		float D = D_GGX( alpha, dotNH );
113		return F * ( V * D );
114	}
115#endif
116vec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {
117	const float LUT_SIZE = 64.0;
118	const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;
119	const float LUT_BIAS = 0.5 / LUT_SIZE;
120	float dotNV = saturate( dot( N, V ) );
121	vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );
122	uv = uv * LUT_SCALE + LUT_BIAS;
123	return uv;
124}
125float LTC_ClippedSphereFormFactor( const in vec3 f ) {
126	float l = length( f );
127	return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );
128}
129vec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {
130	float x = dot( v1, v2 );
131	float y = abs( x );
132	float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;
133	float b = 3.4175940 + ( 4.1616724 + y ) * y;
134	float v = a / b;
135	float theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;
136	return cross( v1, v2 ) * theta_sintheta;
137}
138vec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {
139	vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];
140	vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];
141	vec3 lightNormal = cross( v1, v2 );
142	if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );
143	vec3 T1, T2;
144	T1 = normalize( V - N * dot( V, N ) );
145	T2 = - cross( N, T1 );
146	mat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );
147	vec3 coords[ 4 ];
148	coords[ 0 ] = mat * ( rectCoords[ 0 ] - P );
149	coords[ 1 ] = mat * ( rectCoords[ 1 ] - P );
150	coords[ 2 ] = mat * ( rectCoords[ 2 ] - P );
151	coords[ 3 ] = mat * ( rectCoords[ 3 ] - P );
152	coords[ 0 ] = normalize( coords[ 0 ] );
153	coords[ 1 ] = normalize( coords[ 1 ] );
154	coords[ 2 ] = normalize( coords[ 2 ] );
155	coords[ 3 ] = normalize( coords[ 3 ] );
156	vec3 vectorFormFactor = vec3( 0.0 );
157	vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );
158	vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );
159	vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );
160	vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );
161	float result = LTC_ClippedSphereFormFactor( vectorFormFactor );
162	return vec3( result );
163}
164float G_BlinnPhong_Implicit( ) {
165	return 0.25;
166}
167float D_BlinnPhong( const in float shininess, const in float dotNH ) {
168	return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );
169}
170vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {
171	vec3 halfDir = normalize( lightDir + viewDir );
172	float dotNH = saturate( dot( normal, halfDir ) );
173	float dotVH = saturate( dot( viewDir, halfDir ) );
174	vec3 F = F_Schlick( specularColor, 1.0, dotVH );
175	float G = G_BlinnPhong_Implicit( );
176	float D = D_BlinnPhong( shininess, dotNH );
177	return F * ( G * D );
178}
179#if defined( USE_SHEEN )
180float D_Charlie( float roughness, float dotNH ) {
181	float alpha = pow2( roughness );
182	float invAlpha = 1.0 / alpha;
183	float cos2h = dotNH * dotNH;
184	float sin2h = max( 1.0 - cos2h, 0.0078125 );
185	return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );
186}
187float V_Neubelt( float dotNV, float dotNL ) {
188	return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );
189}
190vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {
191	vec3 halfDir = normalize( lightDir + viewDir );
192	float dotNL = saturate( dot( normal, lightDir ) );
193	float dotNV = saturate( dot( normal, viewDir ) );
194	float dotNH = saturate( dot( normal, halfDir ) );
195	float D = D_Charlie( sheenRoughness, dotNH );
196	float V = V_Neubelt( dotNV, dotNL );
197	return sheenColor * ( D * V );
198}
199#endif`,iridescence_fragment:`#ifdef USE_IRIDESCENCE
200	const mat3 XYZ_TO_REC709 = mat3(
201		 3.2404542, -0.9692660,  0.0556434,
202		-1.5371385,  1.8760108, -0.2040259,
203		-0.4985314,  0.0415560,  1.0572252
204	);
205	vec3 Fresnel0ToIor( vec3 fresnel0 ) {
206		vec3 sqrtF0 = sqrt( fresnel0 );
207		return ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );
208	}
209	vec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {
210		return pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );
211	}
212	float IorToFresnel0( float transmittedIor, float incidentIor ) {
213		return pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));
214	}
215	vec3 evalSensitivity( float OPD, vec3 shift ) {
216		float phase = 2.0 * PI * OPD * 1.0e-9;
217		vec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );
218		vec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );
219		vec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );
220		vec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );
221		xyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );
222		xyz /= 1.0685e-7;
223		vec3 rgb = XYZ_TO_REC709 * xyz;
224		return rgb;
225	}
226	vec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {
227		vec3 I;
228		float iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );
229		float sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );
230		float cosTheta2Sq = 1.0 - sinTheta2Sq;
231		if ( cosTheta2Sq < 0.0 ) {
232			 return vec3( 1.0 );
233		}
234		float cosTheta2 = sqrt( cosTheta2Sq );
235		float R0 = IorToFresnel0( iridescenceIOR, outsideIOR );
236		float R12 = F_Schlick( R0, 1.0, cosTheta1 );
237		float R21 = R12;
238		float T121 = 1.0 - R12;
239		float phi12 = 0.0;
240		if ( iridescenceIOR < outsideIOR ) phi12 = PI;
241		float phi21 = PI - phi12;
242		vec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );		vec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );
243		vec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );
244		vec3 phi23 = vec3( 0.0 );
245		if ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;
246		if ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;
247		if ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;
248		float OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;
249		vec3 phi = vec3( phi21 ) + phi23;
250		vec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );
251		vec3 r123 = sqrt( R123 );
252		vec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );
253		vec3 C0 = R12 + Rs;
254		I = C0;
255		vec3 Cm = Rs - T121;
256		for ( int m = 1; m <= 2; ++ m ) {
257			Cm *= r123;
258			vec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );
259			I += Cm * Sm;
260		}
261		return max( I, vec3( 0.0 ) );
262	}
263#endif`,bumpmap_pars_fragment:`#ifdef USE_BUMPMAP
264	uniform sampler2D bumpMap;
265	uniform float bumpScale;
266	vec2 dHdxy_fwd() {
267		vec2 dSTdx = dFdx( vUv );
268		vec2 dSTdy = dFdy( vUv );
269		float Hll = bumpScale * texture2D( bumpMap, vUv ).x;
270		float dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;
271		float dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;
272		return vec2( dBx, dBy );
273	}
274	vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {
275		vec3 vSigmaX = dFdx( surf_pos.xyz );
276		vec3 vSigmaY = dFdy( surf_pos.xyz );
277		vec3 vN = surf_norm;
278		vec3 R1 = cross( vSigmaY, vN );
279		vec3 R2 = cross( vN, vSigmaX );
280		float fDet = dot( vSigmaX, R1 ) * faceDirection;
281		vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );
282		return normalize( abs( fDet ) * surf_norm - vGrad );
283	}
284#endif`,clipping_planes_fragment:`#if NUM_CLIPPING_PLANES > 0
285	vec4 plane;
286	#pragma unroll_loop_start
287	for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {
288		plane = clippingPlanes[ i ];
289		if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;
290	}
291	#pragma unroll_loop_end
292	#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES
293		bool clipped = true;
294		#pragma unroll_loop_start
295		for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {
296			plane = clippingPlanes[ i ];
297			clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;
298		}
299		#pragma unroll_loop_end
300		if ( clipped ) discard;
301	#endif
302#endif`,clipping_planes_pars_fragment:`#if NUM_CLIPPING_PLANES > 0
303	varying vec3 vClipPosition;
304	uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];
305#endif`,clipping_planes_pars_vertex:`#if NUM_CLIPPING_PLANES > 0
306	varying vec3 vClipPosition;
307#endif`,clipping_planes_vertex:`#if NUM_CLIPPING_PLANES > 0
308	vClipPosition = - mvPosition.xyz;
309#endif`,color_fragment:`#if defined( USE_COLOR_ALPHA )
310	diffuseColor *= vColor;
311#elif defined( USE_COLOR )
312	diffuseColor.rgb *= vColor;
313#endif`,color_pars_fragment:`#if defined( USE_COLOR_ALPHA )
314	varying vec4 vColor;
315#elif defined( USE_COLOR )
316	varying vec3 vColor;
317#endif`,color_pars_vertex:`#if defined( USE_COLOR_ALPHA )
318	varying vec4 vColor;
319#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )
320	varying vec3 vColor;
321#endif`,color_vertex:`#if defined( USE_COLOR_ALPHA )
322	vColor = vec4( 1.0 );
323#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )
324	vColor = vec3( 1.0 );
325#endif
326#ifdef USE_COLOR
327	vColor *= color;
328#endif
329#ifdef USE_INSTANCING_COLOR
330	vColor.xyz *= instanceColor.xyz;
331#endif`,common:`#define PI 3.141592653589793
332#define PI2 6.283185307179586
333#define PI_HALF 1.5707963267948966
334#define RECIPROCAL_PI 0.3183098861837907
335#define RECIPROCAL_PI2 0.15915494309189535
336#define EPSILON 1e-6
337#ifndef saturate
338#define saturate( a ) clamp( a, 0.0, 1.0 )
339#endif
340#define whiteComplement( a ) ( 1.0 - saturate( a ) )
341float pow2( const in float x ) { return x*x; }
342vec3 pow2( const in vec3 x ) { return x*x; }
343float pow3( const in float x ) { return x*x*x; }
344float pow4( const in float x ) { float x2 = x*x; return x2*x2; }
345float max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }
346float average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }
347highp float rand( const in vec2 uv ) {
348	const highp float a = 12.9898, b = 78.233, c = 43758.5453;
349	highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );
350	return fract( sin( sn ) * c );
351}
352#ifdef HIGH_PRECISION
353	float precisionSafeLength( vec3 v ) { return length( v ); }
354#else
355	float precisionSafeLength( vec3 v ) {
356		float maxComponent = max3( abs( v ) );
357		return length( v / maxComponent ) * maxComponent;
358	}
359#endif
360struct IncidentLight {
361	vec3 color;
362	vec3 direction;
363	bool visible;
364};
365struct ReflectedLight {
366	vec3 directDiffuse;
367	vec3 directSpecular;
368	vec3 indirectDiffuse;
369	vec3 indirectSpecular;
370};
371struct GeometricContext {
372	vec3 position;
373	vec3 normal;
374	vec3 viewDir;
375#ifdef USE_CLEARCOAT
376	vec3 clearcoatNormal;
377#endif
378};
379vec3 transformDirection( in vec3 dir, in mat4 matrix ) {
380	return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );
381}
382vec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {
383	return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );
384}
385mat3 transposeMat3( const in mat3 m ) {
386	mat3 tmp;
387	tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );
388	tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );
389	tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );
390	return tmp;
391}
392float luminance( const in vec3 rgb ) {
393	const vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 );
394	return dot( weights, rgb );
395}
396bool isPerspectiveMatrix( mat4 m ) {
397	return m[ 2 ][ 3 ] == - 1.0;
398}
399vec2 equirectUv( in vec3 dir ) {
400	float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;
401	float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;
402	return vec2( u, v );
403}`,cube_uv_reflection_fragment:`#ifdef ENVMAP_TYPE_CUBE_UV
404	#define cubeUV_minMipLevel 4.0
405	#define cubeUV_minTileSize 16.0
406	float getFace( vec3 direction ) {
407		vec3 absDirection = abs( direction );
408		float face = - 1.0;
409		if ( absDirection.x > absDirection.z ) {
410			if ( absDirection.x > absDirection.y )
411				face = direction.x > 0.0 ? 0.0 : 3.0;
412			else
413				face = direction.y > 0.0 ? 1.0 : 4.0;
414		} else {
415			if ( absDirection.z > absDirection.y )
416				face = direction.z > 0.0 ? 2.0 : 5.0;
417			else
418				face = direction.y > 0.0 ? 1.0 : 4.0;
419		}
420		return face;
421	}
422	vec2 getUV( vec3 direction, float face ) {
423		vec2 uv;
424		if ( face == 0.0 ) {
425			uv = vec2( direction.z, direction.y ) / abs( direction.x );
426		} else if ( face == 1.0 ) {
427			uv = vec2( - direction.x, - direction.z ) / abs( direction.y );
428		} else if ( face == 2.0 ) {
429			uv = vec2( - direction.x, direction.y ) / abs( direction.z );
430		} else if ( face == 3.0 ) {
431			uv = vec2( - direction.z, direction.y ) / abs( direction.x );
432		} else if ( face == 4.0 ) {
433			uv = vec2( - direction.x, direction.z ) / abs( direction.y );
434		} else {
435			uv = vec2( direction.x, direction.y ) / abs( direction.z );
436		}
437		return 0.5 * ( uv + 1.0 );
438	}
439	vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {
440		float face = getFace( direction );
441		float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );
442		mipInt = max( mipInt, cubeUV_minMipLevel );
443		float faceSize = exp2( mipInt );
444		highp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;
445		if ( face > 2.0 ) {
446			uv.y += faceSize;
447			face -= 3.0;
448		}
449		uv.x += face * faceSize;
450		uv.x += filterInt * 3.0 * cubeUV_minTileSize;
451		uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );
452		uv.x *= CUBEUV_TEXEL_WIDTH;
453		uv.y *= CUBEUV_TEXEL_HEIGHT;
454		#ifdef texture2DGradEXT
455			return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;
456		#else
457			return texture2D( envMap, uv ).rgb;
458		#endif
459	}
460	#define cubeUV_r0 1.0
461	#define cubeUV_v0 0.339
462	#define cubeUV_m0 - 2.0
463	#define cubeUV_r1 0.8
464	#define cubeUV_v1 0.276
465	#define cubeUV_m1 - 1.0
466	#define cubeUV_r4 0.4
467	#define cubeUV_v4 0.046
468	#define cubeUV_m4 2.0
469	#define cubeUV_r5 0.305
470	#define cubeUV_v5 0.016
471	#define cubeUV_m5 3.0
472	#define cubeUV_r6 0.21
473	#define cubeUV_v6 0.0038
474	#define cubeUV_m6 4.0
475	float roughnessToMip( float roughness ) {
476		float mip = 0.0;
477		if ( roughness >= cubeUV_r1 ) {
478			mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;
479		} else if ( roughness >= cubeUV_r4 ) {
480			mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;
481		} else if ( roughness >= cubeUV_r5 ) {
482			mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;
483		} else if ( roughness >= cubeUV_r6 ) {
484			mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;
485		} else {
486			mip = - 2.0 * log2( 1.16 * roughness );		}
487		return mip;
488	}
489	vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {
490		float mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );
491		float mipF = fract( mip );
492		float mipInt = floor( mip );
493		vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );
494		if ( mipF == 0.0 ) {
495			return vec4( color0, 1.0 );
496		} else {
497			vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );
498			return vec4( mix( color0, color1, mipF ), 1.0 );
499		}
500	}
501#endif`,defaultnormal_vertex:`vec3 transformedNormal = objectNormal;
502#ifdef USE_INSTANCING
503	mat3 m = mat3( instanceMatrix );
504	transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );
505	transformedNormal = m * transformedNormal;
506#endif
507transformedNormal = normalMatrix * transformedNormal;
508#ifdef FLIP_SIDED
509	transformedNormal = - transformedNormal;
510#endif
511#ifdef USE_TANGENT
512	vec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;
513	#ifdef FLIP_SIDED
514		transformedTangent = - transformedTangent;
515	#endif
516#endif`,displacementmap_pars_vertex:`#ifdef USE_DISPLACEMENTMAP
517	uniform sampler2D displacementMap;
518	uniform float displacementScale;
519	uniform float displacementBias;
520#endif`,displacementmap_vertex:`#ifdef USE_DISPLACEMENTMAP
521	transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );
522#endif`,emissivemap_fragment:`#ifdef USE_EMISSIVEMAP
523	vec4 emissiveColor = texture2D( emissiveMap, vUv );
524	totalEmissiveRadiance *= emissiveColor.rgb;
525#endif`,emissivemap_pars_fragment:`#ifdef USE_EMISSIVEMAP
526	uniform sampler2D emissiveMap;
527#endif`,encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:`vec4 LinearToLinear( in vec4 value ) {
528	return value;
529}
530vec4 LinearTosRGB( in vec4 value ) {
531	return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );
532}`,envmap_fragment:`#ifdef USE_ENVMAP
533	#ifdef ENV_WORLDPOS
534		vec3 cameraToFrag;
535		if ( isOrthographic ) {
536			cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );
537		} else {
538			cameraToFrag = normalize( vWorldPosition - cameraPosition );
539		}
540		vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
541		#ifdef ENVMAP_MODE_REFLECTION
542			vec3 reflectVec = reflect( cameraToFrag, worldNormal );
543		#else
544			vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );
545		#endif
546	#else
547		vec3 reflectVec = vReflect;
548	#endif
549	#ifdef ENVMAP_TYPE_CUBE
550		vec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );
551	#else
552		vec4 envColor = vec4( 0.0 );
553	#endif
554	#ifdef ENVMAP_BLENDING_MULTIPLY
555		outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );
556	#elif defined( ENVMAP_BLENDING_MIX )
557		outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );
558	#elif defined( ENVMAP_BLENDING_ADD )
559		outgoingLight += envColor.xyz * specularStrength * reflectivity;
560	#endif
561#endif`,envmap_common_pars_fragment:`#ifdef USE_ENVMAP
562	uniform float envMapIntensity;
563	uniform float flipEnvMap;
564	#ifdef ENVMAP_TYPE_CUBE
565		uniform samplerCube envMap;
566	#else
567		uniform sampler2D envMap;
568	#endif
569	
570#endif`,envmap_pars_fragment:`#ifdef USE_ENVMAP
571	uniform float reflectivity;
572	#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )
573		#define ENV_WORLDPOS
574	#endif
575	#ifdef ENV_WORLDPOS
576		varying vec3 vWorldPosition;
577		uniform float refractionRatio;
578	#else
579		varying vec3 vReflect;
580	#endif
581#endif`,envmap_pars_vertex:`#ifdef USE_ENVMAP
582	#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )
583		#define ENV_WORLDPOS
584	#endif
585	#ifdef ENV_WORLDPOS
586		
587		varying vec3 vWorldPosition;
588	#else
589		varying vec3 vReflect;
590		uniform float refractionRatio;
591	#endif
592#endif`,envmap_physical_pars_fragment:`#if defined( USE_ENVMAP )
593	vec3 getIBLIrradiance( const in vec3 normal ) {
594		#if defined( ENVMAP_TYPE_CUBE_UV )
595			vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
596			vec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );
597			return PI * envMapColor.rgb * envMapIntensity;
598		#else
599			return vec3( 0.0 );
600		#endif
601	}
602	vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {
603		#if defined( ENVMAP_TYPE_CUBE_UV )
604			vec3 reflectVec = reflect( - viewDir, normal );
605			reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );
606			reflectVec = inverseTransformDirection( reflectVec, viewMatrix );
607			vec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );
608			return envMapColor.rgb * envMapIntensity;
609		#else
610			return vec3( 0.0 );
611		#endif
612	}
613#endif`,envmap_vertex:`#ifdef USE_ENVMAP
614	#ifdef ENV_WORLDPOS
615		vWorldPosition = worldPosition.xyz;
616	#else
617		vec3 cameraToVertex;
618		if ( isOrthographic ) {
619			cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );
620		} else {
621			cameraToVertex = normalize( worldPosition.xyz - cameraPosition );
622		}
623		vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );
624		#ifdef ENVMAP_MODE_REFLECTION
625			vReflect = reflect( cameraToVertex, worldNormal );
626		#else
627			vReflect = refract( cameraToVertex, worldNormal, refractionRatio );
628		#endif
629	#endif
630#endif`,fog_vertex:`#ifdef USE_FOG
631	vFogDepth = - mvPosition.z;
632#endif`,fog_pars_vertex:`#ifdef USE_FOG
633	varying float vFogDepth;
634#endif`,fog_fragment:`#ifdef USE_FOG
635	#ifdef FOG_EXP2
636		float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );
637	#else
638		float fogFactor = smoothstep( fogNear, fogFar, vFogDepth );
639	#endif
640	gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );
641#endif`,fog_pars_fragment:`#ifdef USE_FOG
642	uniform vec3 fogColor;
643	varying float vFogDepth;
644	#ifdef FOG_EXP2
645		uniform float fogDensity;
646	#else
647		uniform float fogNear;
648		uniform float fogFar;
649	#endif
650#endif`,gradientmap_pars_fragment:`#ifdef USE_GRADIENTMAP
651	uniform sampler2D gradientMap;
652#endif
653vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {
654	float dotNL = dot( normal, lightDirection );
655	vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );
656	#ifdef USE_GRADIENTMAP
657		return vec3( texture2D( gradientMap, coord ).r );
658	#else
659		vec2 fw = fwidth( coord ) * 0.5;
660		return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );
661	#endif
662}`,lightmap_fragment:`#ifdef USE_LIGHTMAP
663	vec4 lightMapTexel = texture2D( lightMap, vUv2 );
664	vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;
665	reflectedLight.indirectDiffuse += lightMapIrradiance;
666#endif`,lightmap_pars_fragment:`#ifdef USE_LIGHTMAP
667	uniform sampler2D lightMap;
668	uniform float lightMapIntensity;
669#endif`,lights_lambert_fragment:`LambertMaterial material;
670material.diffuseColor = diffuseColor.rgb;
671material.specularStrength = specularStrength;`,lights_lambert_pars_fragment:`varying vec3 vViewPosition;
672struct LambertMaterial {
673	vec3 diffuseColor;
674	float specularStrength;
675};
676void RE_Direct_Lambert( const in IncidentLight directLight, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {
677	float dotNL = saturate( dot( geometry.normal, directLight.direction ) );
678	vec3 irradiance = dotNL * directLight.color;
679	reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
680}
681void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {
682	reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
683}
684#define RE_Direct				RE_Direct_Lambert
685#define RE_IndirectDiffuse		RE_IndirectDiffuse_Lambert`,lights_pars_begin:`uniform bool receiveShadow;
686uniform vec3 ambientLightColor;
687uniform vec3 lightProbe[ 9 ];
688vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {
689	float x = normal.x, y = normal.y, z = normal.z;
690	vec3 result = shCoefficients[ 0 ] * 0.886227;
691	result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;
692	result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;
693	result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;
694	result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;
695	result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;
696	result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );
697	result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;
698	result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );
699	return result;
700}
701vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {
702	vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
703	vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );
704	return irradiance;
705}
706vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {
707	vec3 irradiance = ambientLightColor;
708	return irradiance;
709}
710float getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {
711	#if defined ( PHYSICALLY_CORRECT_LIGHTS )
712		float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );
713		if ( cutoffDistance > 0.0 ) {
714			distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );
715		}
716		return distanceFalloff;
717	#else
718		if ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {
719			return pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );
720		}
721		return 1.0;
722	#endif
723}
724float getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {
725	return smoothstep( coneCosine, penumbraCosine, angleCosine );
726}
727#if NUM_DIR_LIGHTS > 0
728	struct DirectionalLight {
729		vec3 direction;
730		vec3 color;
731	};
732	uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];
733	void getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {
734		light.color = directionalLight.color;
735		light.direction = directionalLight.direction;
736		light.visible = true;
737	}
738#endif
739#if NUM_POINT_LIGHTS > 0
740	struct PointLight {
741		vec3 position;
742		vec3 color;
743		float distance;
744		float decay;
745	};
746	uniform PointLight pointLights[ NUM_POINT_LIGHTS ];
747	void getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {
748		vec3 lVector = pointLight.position - geometry.position;
749		light.direction = normalize( lVector );
750		float lightDistance = length( lVector );
751		light.color = pointLight.color;
752		light.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );
753		light.visible = ( light.color != vec3( 0.0 ) );
754	}
755#endif
756#if NUM_SPOT_LIGHTS > 0
757	struct SpotLight {
758		vec3 position;
759		vec3 direction;
760		vec3 color;
761		float distance;
762		float decay;
763		float coneCos;
764		float penumbraCos;
765	};
766	uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];
767	void getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {
768		vec3 lVector = spotLight.position - geometry.position;
769		light.direction = normalize( lVector );
770		float angleCos = dot( light.direction, spotLight.direction );
771		float spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );
772		if ( spotAttenuation > 0.0 ) {
773			float lightDistance = length( lVector );
774			light.color = spotLight.color * spotAttenuation;
775			light.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );
776			light.visible = ( light.color != vec3( 0.0 ) );
777		} else {
778			light.color = vec3( 0.0 );
779			light.visible = false;
780		}
781	}
782#endif
783#if NUM_RECT_AREA_LIGHTS > 0
784	struct RectAreaLight {
785		vec3 color;
786		vec3 position;
787		vec3 halfWidth;
788		vec3 halfHeight;
789	};
790	uniform sampler2D ltc_1;	uniform sampler2D ltc_2;
791	uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];
792#endif
793#if NUM_HEMI_LIGHTS > 0
794	struct HemisphereLight {
795		vec3 direction;
796		vec3 skyColor;
797		vec3 groundColor;
798	};
799	uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];
800	vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {
801		float dotNL = dot( normal, hemiLight.direction );
802		float hemiDiffuseWeight = 0.5 * dotNL + 0.5;
803		vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );
804		return irradiance;
805	}
806#endif`,lights_toon_fragment:`ToonMaterial material;
807material.diffuseColor = diffuseColor.rgb;`,lights_toon_pars_fragment:`varying vec3 vViewPosition;
808struct ToonMaterial {
809	vec3 diffuseColor;
810};
811void RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {
812	vec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;
813	reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
814}
815void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {
816	reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
817}
818#define RE_Direct				RE_Direct_Toon
819#define RE_IndirectDiffuse		RE_IndirectDiffuse_Toon`,lights_phong_fragment:`BlinnPhongMaterial material;
820material.diffuseColor = diffuseColor.rgb;
821material.specularColor = specular;
822material.specularShininess = shininess;
823material.specularStrength = specularStrength;`,lights_phong_pars_fragment:`varying vec3 vViewPosition;
824struct BlinnPhongMaterial {
825	vec3 diffuseColor;
826	vec3 specularColor;
827	float specularShininess;
828	float specularStrength;
829};
830void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {
831	float dotNL = saturate( dot( geometry.normal, directLight.direction ) );
832	vec3 irradiance = dotNL * directLight.color;
833	reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
834	reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;
835}
836void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {
837	reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
838}
839#define RE_Direct				RE_Direct_BlinnPhong
840#define RE_IndirectDiffuse		RE_IndirectDiffuse_BlinnPhong`,lights_physical_fragment:`PhysicalMaterial material;
841material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );
842vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );
843float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );
844material.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;
845material.roughness = min( material.roughness, 1.0 );
846#ifdef IOR
847	material.ior = ior;
848	#ifdef SPECULAR
849		float specularIntensityFactor = specularIntensity;
850		vec3 specularColorFactor = specularColor;
851		#ifdef USE_SPECULARINTENSITYMAP
852			specularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;
853		#endif
854		#ifdef USE_SPECULARCOLORMAP
855			specularColorFactor *= texture2D( specularColorMap, vUv ).rgb;
856		#endif
857		material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );
858	#else
859		float specularIntensityFactor = 1.0;
860		vec3 specularColorFactor = vec3( 1.0 );
861		material.specularF90 = 1.0;
862	#endif
863	material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );
864#else
865	material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );
866	material.specularF90 = 1.0;
867#endif
868#ifdef USE_CLEARCOAT
869	material.clearcoat = clearcoat;
870	material.clearcoatRoughness = clearcoatRoughness;
871	material.clearcoatF0 = vec3( 0.04 );
872	material.clearcoatF90 = 1.0;
873	#ifdef USE_CLEARCOATMAP
874		material.clearcoat *= texture2D( clearcoatMap, vUv ).x;
875	#endif
876	#ifdef USE_CLEARCOAT_ROUGHNESSMAP
877		material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;
878	#endif
879	material.clearcoat = saturate( material.clearcoat );	material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );
880	material.clearcoatRoughness += geometryRoughness;
881	material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );
882#endif
883#ifdef USE_IRIDESCENCE
884	material.iridescence = iridescence;
885	material.iridescenceIOR = iridescenceIOR;
886	#ifdef USE_IRIDESCENCEMAP
887		material.iridescence *= texture2D( iridescenceMap, vUv ).r;
888	#endif
889	#ifdef USE_IRIDESCENCE_THICKNESSMAP
890		material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vUv ).g + iridescenceThicknessMinimum;
891	#else
892		material.iridescenceThickness = iridescenceThicknessMaximum;
893	#endif
894#endif
895#ifdef USE_SHEEN
896	material.sheenColor = sheenColor;
897	#ifdef USE_SHEENCOLORMAP
898		material.sheenColor *= texture2D( sheenColorMap, vUv ).rgb;
899	#endif
900	material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );
901	#ifdef USE_SHEENROUGHNESSMAP
902		material.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;
903	#endif
904#endif`,lights_physical_pars_fragment:`struct PhysicalMaterial {
905	vec3 diffuseColor;
906	float roughness;
907	vec3 specularColor;
908	float specularF90;
909	#ifdef USE_CLEARCOAT
910		float clearcoat;
911		float clearcoatRoughness;
912		vec3 clearcoatF0;
913		float clearcoatF90;
914	#endif
915	#ifdef USE_IRIDESCENCE
916		float iridescence;
917		float iridescenceIOR;
918		float iridescenceThickness;
919		vec3 iridescenceFresnel;
920		vec3 iridescenceF0;
921	#endif
922	#ifdef USE_SHEEN
923		vec3 sheenColor;
924		float sheenRoughness;
925	#endif
926	#ifdef IOR
927		float ior;
928	#endif
929	#ifdef USE_TRANSMISSION
930		float transmission;
931		float transmissionAlpha;
932		float thickness;
933		float attenuationDistance;
934		vec3 attenuationColor;
935	#endif
936};
937vec3 clearcoatSpecular = vec3( 0.0 );
938vec3 sheenSpecular = vec3( 0.0 );
939float IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {
940	float dotNV = saturate( dot( normal, viewDir ) );
941	float r2 = roughness * roughness;
942	float a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;
943	float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;
944	float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );
945	return saturate( DG * RECIPROCAL_PI );
946}
947vec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {
948	float dotNV = saturate( dot( normal, viewDir ) );
949	const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );
950	const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );
951	vec4 r = roughness * c0 + c1;
952	float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;
953	vec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;
954	return fab;
955}
956vec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {
957	vec2 fab = DFGApprox( normal, viewDir, roughness );
958	return specularColor * fab.x + specularF90 * fab.y;
959}
960#ifdef USE_IRIDESCENCE
961void computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {
962#else
963void computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {
964#endif
965	vec2 fab = DFGApprox( normal, viewDir, roughness );
966	#ifdef USE_IRIDESCENCE
967		vec3 Fr = mix( specularColor, iridescenceF0, iridescence );
968	#else
969		vec3 Fr = specularColor;
970	#endif
971	vec3 FssEss = Fr * fab.x + specularF90 * fab.y;
972	float Ess = fab.x + fab.y;
973	float Ems = 1.0 - Ess;
974	vec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;	vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );
975	singleScatter += FssEss;
976	multiScatter += Fms * Ems;
977}
978#if NUM_RECT_AREA_LIGHTS > 0
979	void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
980		vec3 normal = geometry.normal;
981		vec3 viewDir = geometry.viewDir;
982		vec3 position = geometry.position;
983		vec3 lightPos = rectAreaLight.position;
984		vec3 halfWidth = rectAreaLight.halfWidth;
985		vec3 halfHeight = rectAreaLight.halfHeight;
986		vec3 lightColor = rectAreaLight.color;
987		float roughness = material.roughness;
988		vec3 rectCoords[ 4 ];
989		rectCoords[ 0 ] = lightPos + halfWidth - halfHeight;		rectCoords[ 1 ] = lightPos - halfWidth - halfHeight;
990		rectCoords[ 2 ] = lightPos - halfWidth + halfHeight;
991		rectCoords[ 3 ] = lightPos + halfWidth + halfHeight;
992		vec2 uv = LTC_Uv( normal, viewDir, roughness );
993		vec4 t1 = texture2D( ltc_1, uv );
994		vec4 t2 = texture2D( ltc_2, uv );
995		mat3 mInv = mat3(
996			vec3( t1.x, 0, t1.y ),
997			vec3(    0, 1,    0 ),
998			vec3( t1.z, 0, t1.w )
999		);
1000		vec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );
1001		reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );
1002		reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );
1003	}
1004#endif
1005void RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
1006	float dotNL = saturate( dot( geometry.normal, directLight.direction ) );
1007	vec3 irradiance = dotNL * directLight.color;
1008	#ifdef USE_CLEARCOAT
1009		float dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );
1010		vec3 ccIrradiance = dotNLcc * directLight.color;
1011		clearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );
1012	#endif
1013	#ifdef USE_SHEEN
1014		sheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );
1015	#endif
1016	#ifdef USE_IRIDESCENCE
1017		reflectedLight.directSpecular += irradiance * BRDF_GGX_Iridescence( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness );
1018	#else
1019		reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );
1020	#endif
1021	reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
1022}
1023void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
1024	reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
1025}
1026void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {
1027	#ifdef USE_CLEARCOAT
1028		clearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );
1029	#endif
1030	#ifdef USE_SHEEN
1031		sheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness );
1032	#endif
1033	vec3 singleScattering = vec3( 0.0 );
1034	vec3 multiScattering = vec3( 0.0 );
1035	vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;
1036	#ifdef USE_IRIDESCENCE
1037		computeMultiscatteringIridescence( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );
1038	#else
1039		computeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );
1040	#endif
1041	vec3 totalScattering = singleScattering + multiScattering;
1042	vec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );
1043	reflectedLight.indirectSpecular += radiance * singleScattering;
1044	reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;
1045	reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;
1046}
1047#define RE_Direct				RE_Direct_Physical
1048#define RE_Direct_RectArea		RE_Direct_RectArea_Physical
1049#define RE_IndirectDiffuse		RE_IndirectDiffuse_Physical
1050#define RE_IndirectSpecular		RE_IndirectSpecular_Physical
1051float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {
1052	return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );
1053}`,lights_fragment_begin:`
1054GeometricContext geometry;
1055geometry.position = - vViewPosition;
1056geometry.normal = normal;
1057geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );
1058#ifdef USE_CLEARCOAT
1059	geometry.clearcoatNormal = clearcoatNormal;
1060#endif
1061#ifdef USE_IRIDESCENCE
1062	float dotNVi = saturate( dot( normal, geometry.viewDir ) );
1063	if ( material.iridescenceThickness == 0.0 ) {
1064		material.iridescence = 0.0;
1065	} else {
1066		material.iridescence = saturate( material.iridescence );
1067	}
1068	if ( material.iridescence > 0.0 ) {
1069		material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );
1070		material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );
1071	}
1072#endif
1073IncidentLight directLight;
1074#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )
1075	PointLight pointLight;
1076	#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0
1077	PointLightShadow pointLightShadow;
1078	#endif
1079	#pragma unroll_loop_start
1080	for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {
1081		pointLight = pointLights[ i ];
1082		getPointLightInfo( pointLight, geometry, directLight );
1083		#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )
1084		pointLightShadow = pointLightShadows[ i ];
1085		directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;
1086		#endif
1087		RE_Direct( directLight, geometry, material, reflectedLight );
1088	}
1089	#pragma unroll_loop_end
1090#endif
1091#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )
1092	SpotLight spotLight;
1093	vec4 spotColor;
1094	vec3 spotLightCoord;
1095	bool inSpotLightMap;
1096	#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0
1097	SpotLightShadow spotLightShadow;
1098	#endif
1099	#pragma unroll_loop_start
1100	for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {
1101		spotLight = spotLights[ i ];
1102		getSpotLightInfo( spotLight, geometry, directLight );
1103		#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )
1104		#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX
1105		#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )
1106		#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS
1107		#else
1108		#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )
1109		#endif
1110		#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )
1111			spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;
1112			inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );
1113			spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );
1114			directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;
1115		#endif
1116		#undef SPOT_LIGHT_MAP_INDEX
1117		#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )
1118		spotLightShadow = spotLightShadows[ i ];
1119		directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;
1120		#endif
1121		RE_Direct( directLight, geometry, material, reflectedLight );
1122	}
1123	#pragma unroll_loop_end
1124#endif
1125#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )
1126	DirectionalLight directionalLight;
1127	#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0
1128	DirectionalLightShadow directionalLightShadow;
1129	#endif
1130	#pragma unroll_loop_start
1131	for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {
1132		directionalLight = directionalLights[ i ];
1133		getDirectionalLightInfo( directionalLight, geometry, directLight );
1134		#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )
1135		directionalLightShadow = directionalLightShadows[ i ];
1136		directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
1137		#endif
1138		RE_Direct( directLight, geometry, material, reflectedLight );
1139	}
1140	#pragma unroll_loop_end
1141#endif
1142#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )
1143	RectAreaLight rectAreaLight;
1144	#pragma unroll_loop_start
1145	for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {
1146		rectAreaLight = rectAreaLights[ i ];
1147		RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );
1148	}
1149	#pragma unroll_loop_end
1150#endif
1151#if defined( RE_IndirectDiffuse )
1152	vec3 iblIrradiance = vec3( 0.0 );
1153	vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );
1154	irradiance += getLightProbeIrradiance( lightProbe, geometry.normal );
1155	#if ( NUM_HEMI_LIGHTS > 0 )
1156		#pragma unroll_loop_start
1157		for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {
1158			irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );
1159		}
1160		#pragma unroll_loop_end
1161	#endif
1162#endif
1163#if defined( RE_IndirectSpecular )
1164	vec3 radiance = vec3( 0.0 );
1165	vec3 clearcoatRadiance = vec3( 0.0 );
1166#endif`,lights_fragment_maps:`#if defined( RE_IndirectDiffuse )
1167	#ifdef USE_LIGHTMAP
1168		vec4 lightMapTexel = texture2D( lightMap, vUv2 );
1169		vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;
1170		irradiance += lightMapIrradiance;
1171	#endif
1172	#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )
1173		iblIrradiance += getIBLIrradiance( geometry.normal );
1174	#endif
1175#endif
1176#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )
1177	radiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );
1178	#ifdef USE_CLEARCOAT
1179		clearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );
1180	#endif
1181#endif`,lights_fragment_end:`#if defined( RE_IndirectDiffuse )
1182	RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );
1183#endif
1184#if defined( RE_IndirectSpecular )
1185	RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );
1186#endif`,logdepthbuf_fragment:`#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )
1187	gl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;
1188#endif`,logdepthbuf_pars_fragment:`#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )
1189	uniform float logDepthBufFC;
1190	varying float vFragDepth;
1191	varying float vIsPerspective;
1192#endif`,logdepthbuf_pars_vertex:`#ifdef USE_LOGDEPTHBUF
1193	#ifdef USE_LOGDEPTHBUF_EXT
1194		varying float vFragDepth;
1195		varying float vIsPerspective;
1196	#else
1197		uniform float logDepthBufFC;
1198	#endif
1199#endif`,logdepthbuf_vertex:`#ifdef USE_LOGDEPTHBUF
1200	#ifdef USE_LOGDEPTHBUF_EXT
1201		vFragDepth = 1.0 + gl_Position.w;
1202		vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );
1203	#else
1204		if ( isPerspectiveMatrix( projectionMatrix ) ) {
1205			gl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;
1206			gl_Position.z *= gl_Position.w;
1207		}
1208	#endif
1209#endif`,map_fragment:`#ifdef USE_MAP
1210	vec4 sampledDiffuseColor = texture2D( map, vUv );
1211	#ifdef DECODE_VIDEO_TEXTURE
1212		sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );
1213	#endif
1214	diffuseColor *= sampledDiffuseColor;
1215#endif`,map_pars_fragment:`#ifdef USE_MAP
1216	uniform sampler2D map;
1217#endif`,map_particle_fragment:`#if defined( USE_MAP ) || defined( USE_ALPHAMAP )
1218	vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;
1219#endif
1220#ifdef USE_MAP
1221	diffuseColor *= texture2D( map, uv );
1222#endif
1223#ifdef USE_ALPHAMAP
1224	diffuseColor.a *= texture2D( alphaMap, uv ).g;
1225#endif`,map_particle_pars_fragment:`#if defined( USE_MAP ) || defined( USE_ALPHAMAP )
1226	uniform mat3 uvTransform;
1227#endif
1228#ifdef USE_MAP
1229	uniform sampler2D map;
1230#endif
1231#ifdef USE_ALPHAMAP
1232	uniform sampler2D alphaMap;
1233#endif`,metalnessmap_fragment:`float metalnessFactor = metalness;
1234#ifdef USE_METALNESSMAP
1235	vec4 texelMetalness = texture2D( metalnessMap, vUv );
1236	metalnessFactor *= texelMetalness.b;
1237#endif`,metalnessmap_pars_fragment:`#ifdef USE_METALNESSMAP
1238	uniform sampler2D metalnessMap;
1239#endif`,morphcolor_vertex:`#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE )
1240	vColor *= morphTargetBaseInfluence;
1241	for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
1242		#if defined( USE_COLOR_ALPHA )
1243			if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];
1244		#elif defined( USE_COLOR )
1245			if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];
1246		#endif
1247	}
1248#endif`,morphnormal_vertex:`#ifdef USE_MORPHNORMALS
1249	objectNormal *= morphTargetBaseInfluence;
1250	#ifdef MORPHTARGETS_TEXTURE
1251		for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
1252			if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];
1253		}
1254	#else
1255		objectNormal += morphNormal0 * morphTargetInfluences[ 0 ];
1256		objectNormal += morphNormal1 * morphTargetInfluences[ 1 ];
1257		objectNormal += morphNormal2 * morphTargetInfluences[ 2 ];
1258		objectNormal += morphNormal3 * morphTargetInfluences[ 3 ];
1259	#endif
1260#endif`,morphtarget_pars_vertex:`#ifdef USE_MORPHTARGETS
1261	uniform float morphTargetBaseInfluence;
1262	#ifdef MORPHTARGETS_TEXTURE
1263		uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];
1264		uniform sampler2DArray morphTargetsTexture;
1265		uniform ivec2 morphTargetsTextureSize;
1266		vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {
1267			int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;
1268			int y = texelIndex / morphTargetsTextureSize.x;
1269			int x = texelIndex - y * morphTargetsTextureSize.x;
1270			ivec3 morphUV = ivec3( x, y, morphTargetIndex );
1271			return texelFetch( morphTargetsTexture, morphUV, 0 );
1272		}
1273	#else
1274		#ifndef USE_MORPHNORMALS
1275			uniform float morphTargetInfluences[ 8 ];
1276		#else
1277			uniform float morphTargetInfluences[ 4 ];
1278		#endif
1279	#endif
1280#endif`,morphtarget_vertex:`#ifdef USE_MORPHTARGETS
1281	transformed *= morphTargetBaseInfluence;
1282	#ifdef MORPHTARGETS_TEXTURE
1283		for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
1284			if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];
1285		}
1286	#else
1287		transformed += morphTarget0 * morphTargetInfluences[ 0 ];
1288		transformed += morphTarget1 * morphTargetInfluences[ 1 ];
1289		transformed += morphTarget2 * morphTargetInfluences[ 2 ];
1290		transformed += morphTarget3 * morphTargetInfluences[ 3 ];
1291		#ifndef USE_MORPHNORMALS
1292			transformed += morphTarget4 * morphTargetInfluences[ 4 ];
1293			transformed += morphTarget5 * morphTargetInfluences[ 5 ];
1294			transformed += morphTarget6 * morphTargetInfluences[ 6 ];
1295			transformed += morphTarget7 * morphTargetInfluences[ 7 ];
1296		#endif
1297	#endif
1298#endif`,normal_fragment_begin:`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;
1299#ifdef FLAT_SHADED
1300	vec3 fdx = dFdx( vViewPosition );
1301	vec3 fdy = dFdy( vViewPosition );
1302	vec3 normal = normalize( cross( fdx, fdy ) );
1303#else
1304	vec3 normal = normalize( vNormal );
1305	#ifdef DOUBLE_SIDED
1306		normal = normal * faceDirection;
1307	#endif
1308	#ifdef USE_TANGENT
1309		vec3 tangent = normalize( vTangent );
1310		vec3 bitangent = normalize( vBitangent );
1311		#ifdef DOUBLE_SIDED
1312			tangent = tangent * faceDirection;
1313			bitangent = bitangent * faceDirection;
1314		#endif
1315		#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )
1316			mat3 vTBN = mat3( tangent, bitangent, normal );
1317		#endif
1318	#endif
1319#endif
1320vec3 geometryNormal = normal;`,normal_fragment_maps:`#ifdef OBJECTSPACE_NORMALMAP
1321	normal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;
1322	#ifdef FLIP_SIDED
1323		normal = - normal;
1324	#endif
1325	#ifdef DOUBLE_SIDED
1326		normal = normal * faceDirection;
1327	#endif
1328	normal = normalize( normalMatrix * normal );
1329#elif defined( TANGENTSPACE_NORMALMAP )
1330	vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;
1331	mapN.xy *= normalScale;
1332	#ifdef USE_TANGENT
1333		normal = normalize( vTBN * mapN );
1334	#else
1335		normal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );
1336	#endif
1337#elif defined( USE_BUMPMAP )
1338	normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );
1339#endif`,normal_pars_fragment:`#ifndef FLAT_SHADED
1340	varying vec3 vNormal;
1341	#ifdef USE_TANGENT
1342		varying vec3 vTangent;
1343		varying vec3 vBitangent;
1344	#endif
1345#endif`,normal_pars_vertex:`#ifndef FLAT_SHADED
1346	varying vec3 vNormal;
1347	#ifdef USE_TANGENT
1348		varying vec3 vTangent;
1349		varying vec3 vBitangent;
1350	#endif
1351#endif`,normal_vertex:`#ifndef FLAT_SHADED
1352	vNormal = normalize( transformedNormal );
1353	#ifdef USE_TANGENT
1354		vTangent = normalize( transformedTangent );
1355		vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );
1356	#endif
1357#endif`,normalmap_pars_fragment:`#ifdef USE_NORMALMAP
1358	uniform sampler2D normalMap;
1359	uniform vec2 normalScale;
1360#endif
1361#ifdef OBJECTSPACE_NORMALMAP
1362	uniform mat3 normalMatrix;
1363#endif
1364#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )
1365	vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {
1366		vec3 q0 = dFdx( eye_pos.xyz );
1367		vec3 q1 = dFdy( eye_pos.xyz );
1368		vec2 st0 = dFdx( vUv.st );
1369		vec2 st1 = dFdy( vUv.st );
1370		vec3 N = surf_norm;
1371		vec3 q1perp = cross( q1, N );
1372		vec3 q0perp = cross( N, q0 );
1373		vec3 T = q1perp * st0.x + q0perp * st1.x;
1374		vec3 B = q1perp * st0.y + q0perp * st1.y;
1375		float det = max( dot( T, T ), dot( B, B ) );
1376		float scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );
1377		return normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );
1378	}
1379#endif`,clearcoat_normal_fragment_begin:`#ifdef USE_CLEARCOAT
1380	vec3 clearcoatNormal = geometryNormal;
1381#endif`,clearcoat_normal_fragment_maps:`#ifdef USE_CLEARCOAT_NORMALMAP
1382	vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;
1383	clearcoatMapN.xy *= clearcoatNormalScale;
1384	#ifdef USE_TANGENT
1385		clearcoatNormal = normalize( vTBN * clearcoatMapN );
1386	#else
1387		clearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );
1388	#endif
1389#endif`,clearcoat_pars_fragment:`#ifdef USE_CLEARCOATMAP
1390	uniform sampler2D clearcoatMap;
1391#endif
1392#ifdef USE_CLEARCOAT_ROUGHNESSMAP
1393	uniform sampler2D clearcoatRoughnessMap;
1394#endif
1395#ifdef USE_CLEARCOAT_NORMALMAP
1396	uniform sampler2D clearcoatNormalMap;
1397	uniform vec2 clearcoatNormalScale;
1398#endif`,iridescence_pars_fragment:`#ifdef USE_IRIDESCENCEMAP
1399	uniform sampler2D iridescenceMap;
1400#endif
1401#ifdef USE_IRIDESCENCE_THICKNESSMAP
1402	uniform sampler2D iridescenceThicknessMap;
1403#endif`,output_fragment:`#ifdef OPAQUE
1404diffuseColor.a = 1.0;
1405#endif
1406#ifdef USE_TRANSMISSION
1407diffuseColor.a *= material.transmissionAlpha + 0.1;
1408#endif
1409gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,packing:`vec3 packNormalToRGB( const in vec3 normal ) {
1410	return normalize( normal ) * 0.5 + 0.5;
1411}
1412vec3 unpackRGBToNormal( const in vec3 rgb ) {
1413	return 2.0 * rgb.xyz - 1.0;
1414}
1415const float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;
1416const vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );
1417const vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );
1418const float ShiftRight8 = 1. / 256.;
1419vec4 packDepthToRGBA( const in float v ) {
1420	vec4 r = vec4( fract( v * PackFactors ), v );
1421	r.yzw -= r.xyz * ShiftRight8;	return r * PackUpscale;
1422}
1423float unpackRGBAToDepth( const in vec4 v ) {
1424	return dot( v, UnpackFactors );
1425}
1426vec2 packDepthToRG( in highp float v ) {
1427	return packDepthToRGBA( v ).yx;
1428}
1429float unpackRGToDepth( const in highp vec2 v ) {
1430	return unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) );
1431}
1432vec4 pack2HalfToRGBA( vec2 v ) {
1433	vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );
1434	return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );
1435}
1436vec2 unpackRGBATo2Half( vec4 v ) {
1437	return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );
1438}
1439float viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {
1440	return ( viewZ + near ) / ( near - far );
1441}
1442float orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {
1443	return linearClipZ * ( near - far ) - near;
1444}
1445float viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {
1446	return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );
1447}
1448float perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {
1449	return ( near * far ) / ( ( far - near ) * invClipZ - far );
1450}`,premultiplied_alpha_fragment:`#ifdef PREMULTIPLIED_ALPHA
1451	gl_FragColor.rgb *= gl_FragColor.a;
1452#endif`,project_vertex:`vec4 mvPosition = vec4( transformed, 1.0 );
1453#ifdef USE_INSTANCING
1454	mvPosition = instanceMatrix * mvPosition;
1455#endif
1456mvPosition = modelViewMatrix * mvPosition;
1457gl_Position = projectionMatrix * mvPosition;`,dithering_fragment:`#ifdef DITHERING
1458	gl_FragColor.rgb = dithering( gl_FragColor.rgb );
1459#endif`,dithering_pars_fragment:`#ifdef DITHERING
1460	vec3 dithering( vec3 color ) {
1461		float grid_position = rand( gl_FragCoord.xy );
1462		vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );
1463		dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );
1464		return color + dither_shift_RGB;
1465	}
1466#endif`,roughnessmap_fragment:`float roughnessFactor = roughness;
1467#ifdef USE_ROUGHNESSMAP
1468	vec4 texelRoughness = texture2D( roughnessMap, vUv );
1469	roughnessFactor *= texelRoughness.g;
1470#endif`,roughnessmap_pars_fragment:`#ifdef USE_ROUGHNESSMAP
1471	uniform sampler2D roughnessMap;
1472#endif`,shadowmap_pars_fragment:`#if NUM_SPOT_LIGHT_COORDS > 0
1473  varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];
1474#endif
1475#if NUM_SPOT_LIGHT_MAPS > 0
1476  uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];
1477#endif
1478#ifdef USE_SHADOWMAP
1479	#if NUM_DIR_LIGHT_SHADOWS > 0
1480		uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];
1481		varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];
1482		struct DirectionalLightShadow {
1483			float shadowBias;
1484			float shadowNormalBias;
1485			float shadowRadius;
1486			vec2 shadowMapSize;
1487		};
1488		uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];
1489	#endif
1490	#if NUM_SPOT_LIGHT_SHADOWS > 0
1491		uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];
1492		struct SpotLightShadow {
1493			float shadowBias;
1494			float shadowNormalBias;
1495			float shadowRadius;
1496			vec2 shadowMapSize;
1497		};
1498		uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];
1499	#endif
1500	#if NUM_POINT_LIGHT_SHADOWS > 0
1501		uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];
1502		varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];
1503		struct PointLightShadow {
1504			float shadowBias;
1505			float shadowNormalBias;
1506			float shadowRadius;
1507			vec2 shadowMapSize;
1508			float shadowCameraNear;
1509			float shadowCameraFar;
1510		};
1511		uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];
1512	#endif
1513	float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {
1514		return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );
1515	}
1516	vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {
1517		return unpackRGBATo2Half( texture2D( shadow, uv ) );
1518	}
1519	float VSMShadow (sampler2D shadow, vec2 uv, float compare ){
1520		float occlusion = 1.0;
1521		vec2 distribution = texture2DDistribution( shadow, uv );
1522		float hard_shadow = step( compare , distribution.x );
1523		if (hard_shadow != 1.0 ) {
1524			float distance = compare - distribution.x ;
1525			float variance = max( 0.00000, distribution.y * distribution.y );
1526			float softness_probability = variance / (variance + distance * distance );			softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );			occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );
1527		}
1528		return occlusion;
1529	}
1530	float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {
1531		float shadow = 1.0;
1532		shadowCoord.xyz /= shadowCoord.w;
1533		shadowCoord.z += shadowBias;
1534		bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;
1535		bool frustumTest = inFrustum && shadowCoord.z <= 1.0;
1536		if ( frustumTest ) {
1537		#if defined( SHADOWMAP_TYPE_PCF )
1538			vec2 texelSize = vec2( 1.0 ) / shadowMapSize;
1539			float dx0 = - texelSize.x * shadowRadius;
1540			float dy0 = - texelSize.y * shadowRadius;
1541			float dx1 = + texelSize.x * shadowRadius;
1542			float dy1 = + texelSize.y * shadowRadius;
1543			float dx2 = dx0 / 2.0;
1544			float dy2 = dy0 / 2.0;
1545			float dx3 = dx1 / 2.0;
1546			float dy3 = dy1 / 2.0;
1547			shadow = (
1548				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +
1549				texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +
1550				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +
1551				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +
1552				texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +
1553				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +
1554				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +
1555				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +
1556				texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +
1557				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +
1558				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +
1559				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +
1560				texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +
1561				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +
1562				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +
1563				texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +
1564				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )
1565			) * ( 1.0 / 17.0 );
1566		#elif defined( SHADOWMAP_TYPE_PCF_SOFT )
1567			vec2 texelSize = vec2( 1.0 ) / shadowMapSize;
1568			float dx = texelSize.x;
1569			float dy = texelSize.y;
1570			vec2 uv = shadowCoord.xy;
1571			vec2 f = fract( uv * shadowMapSize + 0.5 );
1572			uv -= f * texelSize;
1573			shadow = (
1574				texture2DCompare( shadowMap, uv, shadowCoord.z ) +
1575				texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +
1576				texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +
1577				texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +
1578				mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),
1579					 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),
1580					 f.x ) +
1581				mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),
1582					 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),
1583					 f.x ) +
1584				mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),
1585					 texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),
1586					 f.y ) +
1587				mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),
1588					 texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),
1589					 f.y ) +
1590				mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),
1591						  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),
1592						  f.x ),
1593					 mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),
1594						  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),
1595						  f.x ),
1596					 f.y )
1597			) * ( 1.0 / 9.0 );
1598		#elif defined( SHADOWMAP_TYPE_VSM )
1599			shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );
1600		#else
1601			shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );
1602		#endif
1603		}
1604		return shadow;
1605	}
1606	vec2 cubeToUV( vec3 v, float texelSizeY ) {
1607		vec3 absV = abs( v );
1608		float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );
1609		absV *= scaleToCube;
1610		v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );
1611		vec2 planar = v.xy;
1612		float almostATexel = 1.5 * texelSizeY;
1613		float almostOne = 1.0 - almostATexel;
1614		if ( absV.z >= almostOne ) {
1615			if ( v.z > 0.0 )
1616				planar.x = 4.0 - v.x;
1617		} else if ( absV.x >= almostOne ) {
1618			float signX = sign( v.x );
1619			planar.x = v.z * signX + 2.0 * signX;
1620		} else if ( absV.y >= almostOne ) {
1621			float signY = sign( v.y );
1622			planar.x = v.x + 2.0 * signY + 2.0;
1623			planar.y = v.z * signY - 2.0;
1624		}
1625		return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );
1626	}
1627	float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {
1628		vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );
1629		vec3 lightToPosition = shadowCoord.xyz;
1630		float dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );		dp += shadowBias;
1631		vec3 bd3D = normalize( lightToPosition );
1632		#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )
1633			vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;
1634			return (
1635				texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +
1636				texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +
1637				texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +
1638				texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +
1639				texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +
1640				texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +
1641				texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +
1642				texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +
1643				texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )
1644			) * ( 1.0 / 9.0 );
1645		#else
1646			return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );
1647		#endif
1648	}
1649#endif`,shadowmap_pars_vertex:`#if NUM_SPOT_LIGHT_COORDS > 0
1650  uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];
1651  varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];
1652#endif
1653#ifdef USE_SHADOWMAP
1654	#if NUM_DIR_LIGHT_SHADOWS > 0
1655		uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];
1656		varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];
1657		struct DirectionalLightShadow {
1658			float shadowBias;
1659			float shadowNormalBias;
1660			float shadowRadius;
1661			vec2 shadowMapSize;
1662		};
1663		uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];
1664	#endif
1665	#if NUM_SPOT_LIGHT_SHADOWS > 0
1666		struct SpotLightShadow {
1667			float shadowBias;
1668			float shadowNormalBias;
1669			float shadowRadius;
1670			vec2 shadowMapSize;
1671		};
1672		uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];
1673	#endif
1674	#if NUM_POINT_LIGHT_SHADOWS > 0
1675		uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];
1676		varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];
1677		struct PointLightShadow {
1678			float shadowBias;
1679			float shadowNormalBias;
1680			float shadowRadius;
1681			vec2 shadowMapSize;
1682			float shadowCameraNear;
1683			float shadowCameraFar;
1684		};
1685		uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];
1686	#endif
1687#endif`,shadowmap_vertex:`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )
1688	vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );
1689	vec4 shadowWorldPosition;
1690#endif
1691#if defined( USE_SHADOWMAP )
1692	#if NUM_DIR_LIGHT_SHADOWS > 0
1693		#pragma unroll_loop_start
1694		for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {
1695			shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );
1696			vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;
1697		}
1698		#pragma unroll_loop_end
1699	#endif
1700	#if NUM_POINT_LIGHT_SHADOWS > 0
1701		#pragma unroll_loop_start
1702		for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {
1703			shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );
1704			vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;
1705		}
1706		#pragma unroll_loop_end
1707	#endif
1708#endif
1709#if NUM_SPOT_LIGHT_COORDS > 0
1710	#pragma unroll_loop_start
1711	for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {
1712		shadowWorldPosition = worldPosition;
1713		#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )
1714			shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;
1715		#endif
1716		vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;
1717	}
1718	#pragma unroll_loop_end
1719#endif`,shadowmask_pars_fragment:`float getShadowMask() {
1720	float shadow = 1.0;
1721	#ifdef USE_SHADOWMAP
1722	#if NUM_DIR_LIGHT_SHADOWS > 0
1723	DirectionalLightShadow directionalLight;
1724	#pragma unroll_loop_start
1725	for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {
1726		directionalLight = directionalLightShadows[ i ];
1727		shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
1728	}
1729	#pragma unroll_loop_end
1730	#endif
1731	#if NUM_SPOT_LIGHT_SHADOWS > 0
1732	SpotLightShadow spotLight;
1733	#pragma unroll_loop_start
1734	for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {
1735		spotLight = spotLightShadows[ i ];
1736		shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;
1737	}
1738	#pragma unroll_loop_end
1739	#endif
1740	#if NUM_POINT_LIGHT_SHADOWS > 0
1741	PointLightShadow pointLight;
1742	#pragma unroll_loop_start
1743	for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {
1744		pointLight = pointLightShadows[ i ];
1745		shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;
1746	}
1747	#pragma unroll_loop_end
1748	#endif
1749	#endif
1750	return shadow;
1751}`,skinbase_vertex:`#ifdef USE_SKINNING
1752	mat4 boneMatX = getBoneMatrix( skinIndex.x );
1753	mat4 boneMatY = getBoneMatrix( skinIndex.y );
1754	mat4 boneMatZ = getBoneMatrix( skinIndex.z );
1755	mat4 boneMatW = getBoneMatrix( skinIndex.w );
1756#endif`,skinning_pars_vertex:`#ifdef USE_SKINNING
1757	uniform mat4 bindMatrix;
1758	uniform mat4 bindMatrixInverse;
1759	uniform highp sampler2D boneTexture;
1760	uniform int boneTextureSize;
1761	mat4 getBoneMatrix( const in float i ) {
1762		float j = i * 4.0;
1763		float x = mod( j, float( boneTextureSize ) );
1764		float y = floor( j / float( boneTextureSize ) );
1765		float dx = 1.0 / float( boneTextureSize );
1766		float dy = 1.0 / float( boneTextureSize );
1767		y = dy * ( y + 0.5 );
1768		vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );
1769		vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );
1770		vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );
1771		vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );
1772		mat4 bone = mat4( v1, v2, v3, v4 );
1773		return bone;
1774	}
1775#endif`,skinning_vertex:`#ifdef USE_SKINNING
1776	vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );
1777	vec4 skinned = vec4( 0.0 );
1778	skinned += boneMatX * skinVertex * skinWeight.x;
1779	skinned += boneMatY * skinVertex * skinWeight.y;
1780	skinned += boneMatZ * skinVertex * skinWeight.z;
1781	skinned += boneMatW * skinVertex * skinWeight.w;
1782	transformed = ( bindMatrixInverse * skinned ).xyz;
1783#endif`,skinnormal_vertex:`#ifdef USE_SKINNING
1784	mat4 skinMatrix = mat4( 0.0 );
1785	skinMatrix += skinWeight.x * boneMatX;
1786	skinMatrix += skinWeight.y * boneMatY;
1787	skinMatrix += skinWeight.z * boneMatZ;
1788	skinMatrix += skinWeight.w * boneMatW;
1789	skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;
1790	objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;
1791	#ifdef USE_TANGENT
1792		objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;
1793	#endif
1794#endif`,specularmap_fragment:`float specularStrength;
1795#ifdef USE_SPECULARMAP
1796	vec4 texelSpecular = texture2D( specularMap, vUv );
1797	specularStrength = texelSpecular.r;
1798#else
1799	specularStrength = 1.0;
1800#endif`,specularmap_pars_fragment:`#ifdef USE_SPECULARMAP
1801	uniform sampler2D specularMap;
1802#endif`,tonemapping_fragment:`#if defined( TONE_MAPPING )
1803	gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );
1804#endif`,tonemapping_pars_fragment:`#ifndef saturate
1805#define saturate( a ) clamp( a, 0.0, 1.0 )
1806#endif
1807uniform float toneMappingExposure;
1808vec3 LinearToneMapping( vec3 color ) {
1809	return toneMappingExposure * color;
1810}
1811vec3 ReinhardToneMapping( vec3 color ) {
1812	color *= toneMappingExposure;
1813	return saturate( color / ( vec3( 1.0 ) + color ) );
1814}
1815vec3 OptimizedCineonToneMapping( vec3 color ) {
1816	color *= toneMappingExposure;
1817	color = max( vec3( 0.0 ), color - 0.004 );
1818	return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );
1819}
1820vec3 RRTAndODTFit( vec3 v ) {
1821	vec3 a = v * ( v + 0.0245786 ) - 0.000090537;
1822	vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;
1823	return a / b;
1824}
1825vec3 ACESFilmicToneMapping( vec3 color ) {
1826	const mat3 ACESInputMat = mat3(
1827		vec3( 0.59719, 0.07600, 0.02840 ),		vec3( 0.35458, 0.90834, 0.13383 ),
1828		vec3( 0.04823, 0.01566, 0.83777 )
1829	);
1830	const mat3 ACESOutputMat = mat3(
1831		vec3(  1.60475, -0.10208, -0.00327 ),		vec3( -0.53108,  1.10813, -0.07276 ),
1832		vec3( -0.07367, -0.00605,  1.07602 )
1833	);
1834	color *= toneMappingExposure / 0.6;
1835	color = ACESInputMat * color;
1836	color = RRTAndODTFit( color );
1837	color = ACESOutputMat * color;
1838	return saturate( color );
1839}
1840vec3 CustomToneMapping( vec3 color ) { return color; }`,transmission_fragment:`#ifdef USE_TRANSMISSION
1841	material.transmission = transmission;
1842	material.transmissionAlpha = 1.0;
1843	material.thickness = thickness;
1844	material.attenuationDistance = attenuationDistance;
1845	material.attenuationColor = attenuationColor;
1846	#ifdef USE_TRANSMISSIONMAP
1847		material.transmission *= texture2D( transmissionMap, vUv ).r;
1848	#endif
1849	#ifdef USE_THICKNESSMAP
1850		material.thickness *= texture2D( thicknessMap, vUv ).g;
1851	#endif
1852	vec3 pos = vWorldPosition;
1853	vec3 v = normalize( cameraPosition - pos );
1854	vec3 n = inverseTransformDirection( normal, viewMatrix );
1855	vec4 transmission = getIBLVolumeRefraction(
1856		n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,
1857		pos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness,
1858		material.attenuationColor, material.attenuationDistance );
1859	material.transmissionAlpha = mix( material.transmissionAlpha, transmission.a, material.transmission );
1860	totalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission );
1861#endif`,transmission_pars_fragment:`#ifdef USE_TRANSMISSION
1862	uniform float transmission;
1863	uniform float thickness;
1864	uniform float attenuationDistance;
1865	uniform vec3 attenuationColor;
1866	#ifdef USE_TRANSMISSIONMAP
1867		uniform sampler2D transmissionMap;
1868	#endif
1869	#ifdef USE_THICKNESSMAP
1870		uniform sampler2D thicknessMap;
1871	#endif
1872	uniform vec2 transmissionSamplerSize;
1873	uniform sampler2D transmissionSamplerMap;
1874	uniform mat4 modelMatrix;
1875	uniform mat4 projectionMatrix;
1876	varying vec3 vWorldPosition;
1877	vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {
1878		vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );
1879		vec3 modelScale;
1880		modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );
1881		modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );
1882		modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );
1883		return normalize( refractionVector ) * thickness * modelScale;
1884	}
1885	float applyIorToRoughness( const in float roughness, const in float ior ) {
1886		return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );
1887	}
1888	vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {
1889		float framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );
1890		#ifdef texture2DLodEXT
1891			return texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );
1892		#else
1893			return texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );
1894		#endif
1895	}
1896	vec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {
1897		if ( isinf( attenuationDistance ) ) {
1898			return radiance;
1899		} else {
1900			vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;
1901			vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );			return transmittance * radiance;
1902		}
1903	}
1904	vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,
1905		const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,
1906		const in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,
1907		const in vec3 attenuationColor, const in float attenuationDistance ) {
1908		vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );
1909		vec3 refractedRayExit = position + transmissionRay;
1910		vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );
1911		vec2 refractionCoords = ndcPos.xy / ndcPos.w;
1912		refractionCoords += 1.0;
1913		refractionCoords /= 2.0;
1914		vec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );
1915		vec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );
1916		vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );
1917		return vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );
1918	}
1919#endif`,uv_pars_fragment:`#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )
1920	varying vec2 vUv;
1921#endif`,uv_pars_vertex:`#ifdef USE_UV
1922	#ifdef UVS_VERTEX_ONLY
1923		vec2 vUv;
1924	#else
1925		varying vec2 vUv;
1926	#endif
1927	uniform mat3 uvTransform;
1928#endif`,uv_vertex:`#ifdef USE_UV
1929	vUv = ( uvTransform * vec3( uv, 1 ) ).xy;
1930#endif`,uv2_pars_fragment:`#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )
1931	varying vec2 vUv2;
1932#endif`,uv2_pars_vertex:`#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )
1933	attribute vec2 uv2;
1934	varying vec2 vUv2;
1935	uniform mat3 uv2Transform;
1936#endif`,uv2_vertex:`#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )
1937	vUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;
1938#endif`,worldpos_vertex:`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_L
1938IGHT_COORDS > 0
1939	vec4 worldPosition = vec4( transformed, 1.0 );
1940	#ifdef USE_INSTANCING
1941		worldPosition = instanceMatrix * worldPosition;
1942	#endif
1943	worldPosition = modelMatrix * worldPosition;
1944#endif`,background_vert:`varying vec2 vUv;
1945uniform mat3 uvTransform;
1946void main() {
1947	vUv = ( uvTransform * vec3( uv, 1 ) ).xy;
1948	gl_Position = vec4( position.xy, 1.0, 1.0 );
1949}`,background_frag:`uniform sampler2D t2D;
1950uniform float backgroundIntensity;
1951varying vec2 vUv;
1952void main() {
1953	vec4 texColor = texture2D( t2D, vUv );
1954	#ifdef DECODE_VIDEO_TEXTURE
1955		texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );
1956	#endif
1957	texColor.rgb *= backgroundIntensity;
1958	gl_FragColor = texColor;
1959	#include <tonemapping_fragment>
1960	#include <encodings_fragment>
1961}`,backgroundCube_vert:`varying vec3 vWorldDirection;
1962#include <common>
1963void main() {
1964	vWorldDirection = transformDirection( position, modelMatrix );
1965	#include <begin_vertex>
1966	#include <project_vertex>
1967	gl_Position.z = gl_Position.w;
1968}`,backgroundCube_frag:`#ifdef ENVMAP_TYPE_CUBE
1969	uniform samplerCube envMap;
1970#elif defined( ENVMAP_TYPE_CUBE_UV )
1971	uniform sampler2D envMap;
1972#endif
1973uniform float flipEnvMap;
1974uniform float backgroundBlurriness;
1975uniform float backgroundIntensity;
1976varying vec3 vWorldDirection;
1977#include <cube_uv_reflection_fragment>
1978void main() {
1979	#ifdef ENVMAP_TYPE_CUBE
1980		vec4 texColor = textureCube( envMap, vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );
1981	#elif defined( ENVMAP_TYPE_CUBE_UV )
1982		vec4 texColor = textureCubeUV( envMap, vWorldDirection, backgroundBlurriness );
1983	#else
1984		vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );
1985	#endif
1986	texColor.rgb *= backgroundIntensity;
1987	gl_FragColor = texColor;
1988	#include <tonemapping_fragment>
1989	#include <encodings_fragment>
1990}`,cube_vert:`varying vec3 vWorldDirection;
1991#include <common>
1992void main() {
1993	vWorldDirection = transformDirection( position, modelMatrix );
1994	#include <begin_vertex>
1995	#include <project_vertex>
1996	gl_Position.z = gl_Position.w;
1997}`,cube_frag:`uniform samplerCube tCube;
1998uniform float tFlip;
1999uniform float opacity;
2000varying vec3 vWorldDirection;
2001void main() {
2002	vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );
2003	gl_FragColor = texColor;
2004	gl_FragColor.a *= opacity;
2005	#include <tonemapping_fragment>
2006	#include <encodings_fragment>
2007}`,depth_vert:`#include <common>
2008#include <uv_pars_vertex>
2009#include <displacementmap_pars_vertex>
2010#include <morphtarget_pars_vertex>
2011#include <skinning_pars_vertex>
2012#include <logdepthbuf_pars_vertex>
2013#include <clipping_planes_pars_vertex>
2014varying vec2 vHighPrecisionZW;
2015void main() {
2016	#include <uv_vertex>
2017	#include <skinbase_vertex>
2018	#ifdef USE_DISPLACEMENTMAP
2019		#include <beginnormal_vertex>
2020		#include <morphnormal_vertex>
2021		#include <skinnormal_vertex>
2022	#endif
2023	#include <begin_vertex>
2024	#include <morphtarget_vertex>
2025	#include <skinning_vertex>
2026	#include <displacementmap_vertex>
2027	#include <project_vertex>
2028	#include <logdepthbuf_vertex>
2029	#include <clipping_planes_vertex>
2030	vHighPrecisionZW = gl_Position.zw;
2031}`,depth_frag:`#if DEPTH_PACKING == 3200
2032	uniform float opacity;
2033#endif
2034#include <common>
2035#include <packing>
2036#include <uv_pars_fragment>
2037#include <map_pars_fragment>
2038#include <alphamap_pars_fragment>
2039#include <alphatest_pars_fragment>
2040#include <logdepthbuf_pars_fragment>
2041#include <clipping_planes_pars_fragment>
2042varying vec2 vHighPrecisionZW;
2043void main() {
2044	#include <clipping_planes_fragment>
2045	vec4 diffuseColor = vec4( 1.0 );
2046	#if DEPTH_PACKING == 3200
2047		diffuseColor.a = opacity;
2048	#endif
2049	#include <map_fragment>
2050	#include <alphamap_fragment>
2051	#include <alphatest_fragment>
2052	#include <logdepthbuf_fragment>
2053	float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;
2054	#if DEPTH_PACKING == 3200
2055		gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );
2056	#elif DEPTH_PACKING == 3201
2057		gl_FragColor = packDepthToRGBA( fragCoordZ );
2058	#endif
2059}`,distanceRGBA_vert:`#define DISTANCE
2060varying vec3 vWorldPosition;
2061#include <common>
2062#include <uv_pars_vertex>
2063#include <displacementmap_pars_vertex>
2064#include <morphtarget_pars_vertex>
2065#include <skinning_pars_vertex>
2066#include <clipping_planes_pars_vertex>
2067void main() {
2068	#include <uv_vertex>
2069	#include <skinbase_vertex>
2070	#ifdef USE_DISPLACEMENTMAP
2071		#include <beginnormal_vertex>
2072		#include <morphnormal_vertex>
2073		#include <skinnormal_vertex>
2074	#endif
2075	#include <begin_vertex>
2076	#include <morphtarget_vertex>
2077	#include <skinning_vertex>
2078	#include <displacementmap_vertex>
2079	#include <project_vertex>
2080	#include <worldpos_vertex>
2081	#include <clipping_planes_vertex>
2082	vWorldPosition = worldPosition.xyz;
2083}`,distanceRGBA_frag:`#define DISTANCE
2084uniform vec3 referencePosition;
2085uniform float nearDistance;
2086uniform float farDistance;
2087varying vec3 vWorldPosition;
2088#include <common>
2089#include <packing>
2090#include <uv_pars_fragment>
2091#include <map_pars_fragment>
2092#include <alphamap_pars_fragment>
2093#include <alphatest_pars_fragment>
2094#include <clipping_planes_pars_fragment>
2095void main () {
2096	#include <clipping_planes_fragment>
2097	vec4 diffuseColor = vec4( 1.0 );
2098	#include <map_fragment>
2099	#include <alphamap_fragment>
2100	#include <alphatest_fragment>
2101	float dist = length( vWorldPosition - referencePosition );
2102	dist = ( dist - nearDistance ) / ( farDistance - nearDistance );
2103	dist = saturate( dist );
2104	gl_FragColor = packDepthToRGBA( dist );
2105}`,equirect_vert:`varying vec3 vWorldDirection;
2106#include <common>
2107void main() {
2108	vWorldDirection = transformDirection( position, modelMatrix );
2109	#include <begin_vertex>
2110	#include <project_vertex>
2111}`,equirect_frag:`uniform sampler2D tEquirect;
2112varying vec3 vWorldDirection;
2113#include <common>
2114void main() {
2115	vec3 direction = normalize( vWorldDirection );
2116	vec2 sampleUV = equirectUv( direction );
2117	gl_FragColor = texture2D( tEquirect, sampleUV );
2118	#include <tonemapping_fragment>
2119	#include <encodings_fragment>
2120}`,linedashed_vert:`uniform float scale;
2121attribute float lineDistance;
2122varying float vLineDistance;
2123#include <common>
2124#include <color_pars_vertex>
2125#include <fog_pars_vertex>
2126#include <morphtarget_pars_vertex>
2127#include <logdepthbuf_pars_vertex>
2128#include <clipping_planes_pars_vertex>
2129void main() {
2130	vLineDistance = scale * lineDistance;
2131	#include <color_vertex>
2132	#include <morphcolor_vertex>
2133	#include <begin_vertex>
2134	#include <morphtarget_vertex>
2135	#include <project_vertex>
2136	#include <logdepthbuf_vertex>
2137	#include <clipping_planes_vertex>
2138	#include <fog_vertex>
2139}`,linedashed_frag:`uniform vec3 diffuse;
2140uniform float opacity;
2141uniform float dashSize;
2142uniform float totalSize;
2143varying float vLineDistance;
2144#include <common>
2145#include <color_pars_fragment>
2146#include <fog_pars_fragment>
2147#include <logdepthbuf_pars_fragment>
2148#include <clipping_planes_pars_fragment>
2149void main() {
2150	#include <clipping_planes_fragment>
2151	if ( mod( vLineDistance, totalSize ) > dashSize ) {
2152		discard;
2153	}
2154	vec3 outgoingLight = vec3( 0.0 );
2155	vec4 diffuseColor = vec4( diffuse, opacity );
2156	#include <logdepthbuf_fragment>
2157	#include <color_fragment>
2158	outgoingLight = diffuseColor.rgb;
2159	#include <output_fragment>
2160	#include <tonemapping_fragment>
2161	#include <encodings_fragment>
2162	#include <fog_fragment>
2163	#include <premultiplied_alpha_fragment>
2164}`,meshbasic_vert:`#include <common>
2165#include <uv_pars_vertex>
2166#include <uv2_pars_vertex>
2167#include <envmap_pars_vertex>
2168#include <color_pars_vertex>
2169#include <fog_pars_vertex>
2170#include <morphtarget_pars_vertex>
2171#include <skinning_pars_vertex>
2172#include <logdepthbuf_pars_vertex>
2173#include <clipping_planes_pars_vertex>
2174void main() {
2175	#include <uv_vertex>
2176	#include <uv2_vertex>
2177	#include <color_vertex>
2178	#include <morphcolor_vertex>
2179	#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )
2180		#include <beginnormal_vertex>
2181		#include <morphnormal_vertex>
2182		#include <skinbase_vertex>
2183		#include <skinnormal_vertex>
2184		#include <defaultnormal_vertex>
2185	#endif
2186	#include <begin_vertex>
2187	#include <morphtarget_vertex>
2188	#include <skinning_vertex>
2189	#include <project_vertex>
2190	#include <logdepthbuf_vertex>
2191	#include <clipping_planes_vertex>
2192	#include <worldpos_vertex>
2193	#include <envmap_vertex>
2194	#include <fog_vertex>
2195}`,meshbasic_frag:`uniform vec3 diffuse;
2196uniform float opacity;
2197#ifndef FLAT_SHADED
2198	varying vec3 vNormal;
2199#endif
2200#include <common>
2201#include <dithering_pars_fragment>
2202#include <color_pars_fragment>
2203#include <uv_pars_fragment>
2204#include <uv2_pars_fragment>
2205#include <map_pars_fragment>
2206#include <alphamap_pars_fragment>
2207#include <alphatest_pars_fragment>
2208#include <aomap_pars_fragment>
2209#include <lightmap_pars_fragment>
2210#include <envmap_common_pars_fragment>
2211#include <envmap_pars_fragment>
2212#include <fog_pars_fragment>
2213#include <specularmap_pars_fragment>
2214#include <logdepthbuf_pars_fragment>
2215#include <clipping_planes_pars_fragment>
2216void main() {
2217	#include <clipping_planes_fragment>
2218	vec4 diffuseColor = vec4( diffuse, opacity );
2219	#include <logdepthbuf_fragment>
2220	#include <map_fragment>
2221	#include <color_fragment>
2222	#include <alphamap_fragment>
2223	#include <alphatest_fragment>
2224	#include <specularmap_fragment>
2225	ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
2226	#ifdef USE_LIGHTMAP
2227		vec4 lightMapTexel = texture2D( lightMap, vUv2 );
2228		reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;
2229	#else
2230		reflectedLight.indirectDiffuse += vec3( 1.0 );
2231	#endif
2232	#include <aomap_fragment>
2233	reflectedLight.indirectDiffuse *= diffuseColor.rgb;
2234	vec3 outgoingLight = reflectedLight.indirectDiffuse;
2235	#include <envmap_fragment>
2236	#include <output_fragment>
2237	#include <tonemapping_fragment>
2238	#include <encodings_fragment>
2239	#include <fog_fragment>
2240	#include <premultiplied_alpha_fragment>
2241	#include <dithering_fragment>
2242}`,meshlambert_vert:`#define LAMBERT
2243varying vec3 vViewPosition;
2244#include <common>
2245#include <uv_pars_vertex>
2246#include <uv2_pars_vertex>
2247#include <displacementmap_pars_vertex>
2248#include <envmap_pars_vertex>
2249#include <color_pars_vertex>
2250#include <fog_pars_vertex>
2251#include <normal_pars_vertex>
2252#include <morphtarget_pars_vertex>
2253#include <skinning_pars_vertex>
2254#include <shadowmap_pars_vertex>
2255#include <logdepthbuf_pars_vertex>
2256#include <clipping_planes_pars_vertex>
2257void main() {
2258	#include <uv_vertex>
2259	#include <uv2_vertex>
2260	#include <color_vertex>
2261	#include <morphcolor_vertex>
2262	#include <beginnormal_vertex>
2263	#include <morphnormal_vertex>
2264	#include <skinbase_vertex>
2265	#include <skinnormal_vertex>
2266	#include <defaultnormal_vertex>
2267	#include <normal_vertex>
2268	#include <begin_vertex>
2269	#include <morphtarget_vertex>
2270	#include <skinning_vertex>
2271	#include <displacementmap_vertex>
2272	#include <project_vertex>
2273	#include <logdepthbuf_vertex>
2274	#include <clipping_planes_vertex>
2275	vViewPosition = - mvPosition.xyz;
2276	#include <worldpos_vertex>
2277	#include <envmap_vertex>
2278	#include <shadowmap_vertex>
2279	#include <fog_vertex>
2280}`,meshlambert_frag:`#define LAMBERT
2281uniform vec3 diffuse;
2282uniform vec3 emissive;
2283uniform float opacity;
2284#include <common>
2285#include <packing>
2286#include <dithering_pars_fragment>
2287#include <color_pars_fragment>
2288#include <uv_pars_fragment>
2289#include <uv2_pars_fragment>
2290#include <map_pars_fragment>
2291#include <alphamap_pars_fragment>
2292#include <alphatest_pars_fragment>
2293#include <aomap_pars_fragment>
2294#include <lightmap_pars_fragment>
2295#include <emissivemap_pars_fragment>
2296#include <envmap_common_pars_fragment>
2297#include <envmap_pars_fragment>
2298#include <fog_pars_fragment>
2299#include <bsdfs>
2300#include <lights_pars_begin>
2301#include <normal_pars_fragment>
2302#include <lights_lambert_pars_fragment>
2303#include <shadowmap_pars_fragment>
2304#include <bumpmap_pars_fragment>
2305#include <normalmap_pars_fragment>
2306#include <specularmap_pars_fragment>
2307#include <logdepthbuf_pars_fragment>
2308#include <clipping_planes_pars_fragment>
2309void main() {
2310	#include <clipping_planes_fragment>
2311	vec4 diffuseColor = vec4( diffuse, opacity );
2312	ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
2313	vec3 totalEmissiveRadiance = emissive;
2314	#include <logdepthbuf_fragment>
2315	#include <map_fragment>
2316	#include <color_fragment>
2317	#include <alphamap_fragment>
2318	#include <alphatest_fragment>
2319	#include <specularmap_fragment>
2320	#include <normal_fragment_begin>
2321	#include <normal_fragment_maps>
2322	#include <emissivemap_fragment>
2323	#include <lights_lambert_fragment>
2324	#include <lights_fragment_begin>
2325	#include <lights_fragment_maps>
2326	#include <lights_fragment_end>
2327	#include <aomap_fragment>
2328	vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;
2329	#include <envmap_fragment>
2330	#include <output_fragment>
2331	#include <tonemapping_fragment>
2332	#include <encodings_fragment>
2333	#include <fog_fragment>
2334	#include <premultiplied_alpha_fragment>
2335	#include <dithering_fragment>
2336}`,meshmatcap_vert:`#define MATCAP
2337varying vec3 vViewPosition;
2338#include <common>
2339#include <uv_pars_vertex>
2340#include <color_pars_vertex>
2341#include <displacementmap_pars_vertex>
2342#include <fog_pars_vertex>
2343#include <normal_pars_vertex>
2344#include <morphtarget_pars_vertex>
2345#include <skinning_pars_vertex>
2346#include <logdepthbuf_pars_vertex>
2347#include <clipping_planes_pars_vertex>
2348void main() {
2349	#include <uv_vertex>
2350	#include <color_vertex>
2351	#include <morphcolor_vertex>
2352	#include <beginnormal_vertex>
2353	#include <morphnormal_vertex>
2354	#include <skinbase_vertex>
2355	#include <skinnormal_vertex>
2356	#include <defaultnormal_vertex>
2357	#include <normal_vertex>
2358	#include <begin_vertex>
2359	#include <morphtarget_vertex>
2360	#include <skinning_vertex>
2361	#include <displacementmap_vertex>
2362	#include <project_vertex>
2363	#include <logdepthbuf_vertex>
2364	#include <clipping_planes_vertex>
2365	#include <fog_vertex>
2366	vViewPosition = - mvPosition.xyz;
2367}`,meshmatcap_frag:`#define MATCAP
2368uniform vec3 diffuse;
2369uniform float opacity;
2370uniform sampler2D matcap;
2371varying vec3 vViewPosition;
2372#include <common>
2373#include <dithering_pars_fragment>
2374#include <color_pars_fragment>
2375#include <uv_pars_fragment>
2376#include <map_pars_fragment>
2377#include <alphamap_pars_fragment>
2378#include <alphatest_pars_fragment>
2379#include <fog_pars_fragment>
2380#include <normal_pars_fragment>
2381#include <bumpmap_pars_fragment>
2382#include <normalmap_pars_fragment>
2383#include <logdepthbuf_pars_fragment>
2384#include <clipping_planes_pars_fragment>
2385void main() {
2386	#include <clipping_planes_fragment>
2387	vec4 diffuseColor = vec4( diffuse, opacity );
2388	#include <logdepthbuf_fragment>
2389	#include <map_fragment>
2390	#include <color_fragment>
2391	#include <alphamap_fragment>
2392	#include <alphatest_fragment>
2393	#include <normal_fragment_begin>
2394	#include <normal_fragment_maps>
2395	vec3 viewDir = normalize( vViewPosition );
2396	vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );
2397	vec3 y = cross( viewDir, x );
2398	vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;
2399	#ifdef USE_MATCAP
2400		vec4 matcapColor = texture2D( matcap, uv );
2401	#else
2402		vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );
2403	#endif
2404	vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;
2405	#include <output_fragment>
2406	#include <tonemapping_fragment>
2407	#include <encodings_fragment>
2408	#include <fog_fragment>
2409	#include <premultiplied_alpha_fragment>
2410	#include <dithering_fragment>
2411}`,meshnormal_vert:`#define NORMAL
2412#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )
2413	varying vec3 vViewPosition;
2414#endif
2415#include <common>
2416#include <uv_pars_vertex>
2417#include <displacementmap_pars_vertex>
2418#include <normal_pars_vertex>
2419#include <morphtarget_pars_vertex>
2420#include <skinning_pars_vertex>
2421#include <logdepthbuf_pars_vertex>
2422#include <clipping_planes_pars_vertex>
2423void main() {
2424	#include <uv_vertex>
2425	#include <beginnormal_vertex>
2426	#include <morphnormal_vertex>
2427	#include <skinbase_vertex>
2428	#include <skinnormal_vertex>
2429	#include <defaultnormal_vertex>
2430	#include <normal_vertex>
2431	#include <begin_vertex>
2432	#include <morphtarget_vertex>
2433	#include <skinning_vertex>
2434	#include <displacementmap_vertex>
2435	#include <project_vertex>
2436	#include <logdepthbuf_vertex>
2437	#include <clipping_planes_vertex>
2438#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )
2439	vViewPosition = - mvPosition.xyz;
2440#endif
2441}`,meshnormal_frag:`#define NORMAL
2442uniform float opacity;
2443#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )
2444	varying vec3 vViewPosition;
2445#endif
2446#include <packing>
2447#include <uv_pars_fragment>
2448#include <normal_pars_fragment>
2449#include <bumpmap_pars_fragment>
2450#include <normalmap_pars_fragment>
2451#include <logdepthbuf_pars_fragment>
2452#include <clipping_planes_pars_fragment>
2453void main() {
2454	#include <clipping_planes_fragment>
2455	#include <logdepthbuf_fragment>
2456	#include <normal_fragment_begin>
2457	#include <normal_fragment_maps>
2458	gl_FragColor = vec4( packNormalToRGB( normal ), opacity );
2459	#ifdef OPAQUE
2460		gl_FragColor.a = 1.0;
2461	#endif
2462}`,meshphong_vert:`#define PHONG
2463varying vec3 vViewPosition;
2464#include <common>
2465#include <uv_pars_vertex>
2466#include <uv2_pars_vertex>
2467#include <displacementmap_pars_vertex>
2468#include <envmap_pars_vertex>
2469#include <color_pars_vertex>
2470#include <fog_pars_vertex>
2471#include <normal_pars_vertex>
2472#include <morphtarget_pars_vertex>
2473#include <skinning_pars_vertex>
2474#include <shadowmap_pars_vertex>
2475#include <logdepthbuf_pars_vertex>
2476#include <clipping_planes_pars_vertex>
2477void main() {
2478	#include <uv_vertex>
2479	#include <uv2_vertex>
2480	#include <color_vertex>
2481	#include <morphcolor_vertex>
2482	#include <beginnormal_vertex>
2483	#include <morphnormal_vertex>
2484	#include <skinbase_vertex>
2485	#include <skinnormal_vertex>
2486	#include <defaultnormal_vertex>
2487	#include <normal_vertex>
2488	#include <begin_vertex>
2489	#include <morphtarget_vertex>
2490	#include <skinning_vertex>
2491	#include <displacementmap_vertex>
2492	#include <project_vertex>
2493	#include <logdepthbuf_vertex>
2494	#include <clipping_planes_vertex>
2495	vViewPosition = - mvPosition.xyz;
2496	#include <worldpos_vertex>
2497	#include <envmap_vertex>
2498	#include <shadowmap_vertex>
2499	#include <fog_vertex>
2500}`,meshphong_frag:`#define PHONG
2501uniform vec3 diffuse;
2502uniform vec3 emissive;
2503uniform vec3 specular;
2504uniform float shininess;
2505uniform float opacity;
2506#include <common>
2507#include <packing>
2508#include <dithering_pars_fragment>
2509#include <color_pars_fragment>
2510#include <uv_pars_fragment>
2511#include <uv2_pars_fragment>
2512#include <map_pars_fragment>
2513#include <alphamap_pars_fragment>
2514#include <alphatest_pars_fragment>
2515#include <aomap_pars_fragment>
2516#include <lightmap_pars_fragment>
2517#include <emissivemap_pars_fragment>
2518#include <envmap_common_pars_fragment>
2519#include <envmap_pars_fragment>
2520#include <fog_pars_fragment>
2521#include <bsdfs>
2522#include <lights_pars_begin>
2523#include <normal_pars_fragment>
2524#include <lights_phong_pars_fragment>
2525#include <shadowmap_pars_fragment>
2526#include <bumpmap_pars_fragment>
2527#include <normalmap_pars_fragment>
2528#include <specularmap_pars_fragment>
2529#include <logdepthbuf_pars_fragment>
2530#include <clipping_planes_pars_fragment>
2531void main() {
2532	#include <clipping_planes_fragment>
2533	vec4 diffuseColor = vec4( diffuse, opacity );
2534	ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
2535	vec3 totalEmissiveRadiance = emissive;
2536	#include <logdepthbuf_fragment>
2537	#include <map_fragment>
2538	#include <color_fragment>
2539	#include <alphamap_fragment>
2540	#include <alphatest_fragment>
2541	#include <specularmap_fragment>
2542	#include <normal_fragment_begin>
2543	#include <normal_fragment_maps>
2544	#include <emissivemap_fragment>
2545	#include <lights_phong_fragment>
2546	#include <lights_fragment_begin>
2547	#include <lights_fragment_maps>
2548	#include <lights_fragment_end>
2549	#include <aomap_fragment>
2550	vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;
2551	#include <envmap_fragment>
2552	#include <output_fragment>
2553	#include <tonemapping_fragment>
2554	#include <encodings_fragment>
2555	#include <fog_fragment>
2556	#include <premultiplied_alpha_fragment>
2557	#include <dithering_fragment>
2558}`,meshphysical_vert:`#define STANDARD
2559varying vec3 vViewPosition;
2560#ifdef USE_TRANSMISSION
2561	varying vec3 vWorldPosition;
2562#endif
2563#include <common>
2564#include <uv_pars_vertex>
2565#include <uv2_pars_vertex>
2566#include <displacementmap_pars_vertex>
2567#include <color_pars_vertex>
2568#include <fog_pars_vertex>
2569#include <normal_pars_vertex>
2570#include <morphtarget_pars_vertex>
2571#include <skinning_pars_vertex>
2572#include <shadowmap_pars_vertex>
2573#include <logdepthbuf_pars_vertex>
2574#include <clipping_planes_pars_vertex>
2575void main() {
2576	#include <uv_vertex>
2577	#include <uv2_vertex>
2578	#include <color_vertex>
2579	#include <morphcolor_vertex>
2580	#include <beginnormal_vertex>
2581	#include <morphnormal_vertex>
2582	#include <skinbase_vertex>
2583	#include <skinnormal_vertex>
2584	#include <defaultnormal_vertex>
2585	#include <normal_vertex>
2586	#include <begin_vertex>
2587	#include <morphtarget_vertex>
2588	#include <skinning_vertex>
2589	#include <displacementmap_vertex>
2590	#include <project_vertex>
2591	#include <logdepthbuf_vertex>
2592	#include <clipping_planes_vertex>
2593	vViewPosition = - mvPosition.xyz;
2594	#include <worldpos_vertex>
2595	#include <shadowmap_vertex>
2596	#include <fog_vertex>
2597#ifdef USE_TRANSMISSION
2598	vWorldPosition = worldPosition.xyz;
2599#endif
2600}`,meshphysical_frag:`#define STANDARD
2601#ifdef PHYSICAL
2602	#define IOR
2603	#define SPECULAR
2604#endif
2605uniform vec3 diffuse;
2606uniform vec3 emissive;
2607uniform float roughness;
2608uniform float metalness;
2609uniform float opacity;
2610#ifdef IOR
2611	uniform float ior;
2612#endif
2613#ifdef SPECULAR
2614	uniform float specularIntensity;
2615	uniform vec3 specularColor;
2616	#ifdef USE_SPECULARINTENSITYMAP
2617		uniform sampler2D specularIntensityMap;
2618	#endif
2619	#ifdef USE_SPECULARCOLORMAP
2620		uniform sampler2D specularColorMap;
2621	#endif
2622#endif
2623#ifdef USE_CLEARCOAT
2624	uniform float clearcoat;
2625	uniform float clearcoatRoughness;
2626#endif
2627#ifdef USE_IRIDESCENCE
2628	uniform float iridescence;
2629	uniform float iridescenceIOR;
2630	uniform float iridescenceThicknessMinimum;
2631	uniform float iridescenceThicknessMaximum;
2632#endif
2633#ifdef USE_SHEEN
2634	uniform vec3 sheenColor;
2635	uniform float sheenRoughness;
2636	#ifdef USE_SHEENCOLORMAP
2637		uniform sampler2D sheenColorMap;
2638	#endif
2639	#ifdef USE_SHEENROUGHNESSMAP
2640		uniform sampler2D sheenRoughnessMap;
2641	#endif
2642#endif
2643varying vec3 vViewPosition;
2644#include <common>
2645#include <packing>
2646#include <dithering_pars_fragment>
2647#include <color_pars_fragment>
2648#include <uv_pars_fragment>
2649#include <uv2_pars_fragment>
2650#include <map_pars_fragment>
2651#include <alphamap_pars_fragment>
2652#include <alphatest_pars_fragment>
2653#include <aomap_pars_fragment>
2654#include <lightmap_pars_fragment>
2655#include <emissivemap_pars_fragment>
2656#include <bsdfs>
2657#include <iridescence_fragment>
2658#include <cube_uv_reflection_fragment>
2659#include <envmap_common_pars_fragment>
2660#include <envmap_physical_pars_fragment>
2661#include <fog_pars_fragment>
2662#include <lights_pars_begin>
2663#include <normal_pars_fragment>
2664#include <lights_physical_pars_fragment>
2665#include <transmission_pars_fragment>
2666#include <shadowmap_pars_fragment>
2667#include <bumpmap_pars_fragment>
2668#include <normalmap_pars_fragment>
2669#include <clearcoat_pars_fragment>
2670#include <iridescence_pars_fragment>
2671#include <roughnessmap_pars_fragment>
2672#include <metalnessmap_pars_fragment>
2673#include <logdepthbuf_pars_fragment>
2674#include <clipping_planes_pars_fragment>
2675void main() {
2676	#include <clipping_planes_fragment>
2677	vec4 diffuseColor = vec4( diffuse, opacity );
2678	ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
2679	vec3 totalEmissiveRadiance = emissive;
2680	#include <logdepthbuf_fragment>
2681	#include <map_fragment>
2682	#include <color_fragment>
2683	#include <alphamap_fragment>
2684	#include <alphatest_fragment>
2685	#include <roughnessmap_fragment>
2686	#include <metalnessmap_fragment>
2687	#include <normal_fragment_begin>
2688	#include <normal_fragment_maps>
2689	#include <clearcoat_normal_fragment_begin>
2690	#include <clearcoat_normal_fragment_maps>
2691	#include <emissivemap_fragment>
2692	#include <lights_physical_fragment>
2693	#include <lights_fragment_begin>
2694	#include <lights_fragment_maps>
2695	#include <lights_fragment_end>
2696	#include <aomap_fragment>
2697	vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;
2698	vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;
2699	#include <transmission_fragment>
2700	vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;
2701	#ifdef USE_SHEEN
2702		float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );
2703		outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;
2704	#endif
2705	#ifdef USE_CLEARCOAT
2706		float dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );
2707		vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );
2708		outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;
2709	#endif
2710	#include <output_fragment>
2711	#include <tonemapping_fragment>
2712	#include <encodings_fragment>
2713	#include <fog_fragment>
2714	#include <premultiplied_alpha_fragment>
2715	#include <dithering_fragment>
2716}`,meshtoon_vert:`#define TOON
2717varying vec3 vViewPosition;
2718#include <common>
2719#include <uv_pars_vertex>
2720#include <uv2_pars_vertex>
2721#include <displacementmap_pars_vertex>
2722#include <color_pars_vertex>
2723#include <fog_pars_vertex>
2724#include <normal_pars_vertex>
2725#include <morphtarget_pars_vertex>
2726#include <skinning_pars_vertex>
2727#include <shadowmap_pars_vertex>
2728#include <logdepthbuf_pars_vertex>
2729#include <clipping_planes_pars_vertex>
2730void main() {
2731	#include <uv_vertex>
2732	#include <uv2_vertex>
2733	#include <color_vertex>
2734	#include <morphcolor_vertex>
2735	#include <beginnormal_vertex>
2736	#include <morphnormal_vertex>
2737	#include <skinbase_vertex>
2738	#include <skinnormal_vertex>
2739	#include <defaultnormal_vertex>
2740	#include <normal_vertex>
2741	#include <begin_vertex>
2742	#include <morphtarget_vertex>
2743	#include <skinning_vertex>
2744	#include <displacementmap_vertex>
2745	#include <project_vertex>
2746	#include <logdepthbuf_vertex>
2747	#include <clipping_planes_vertex>
2748	vViewPosition = - mvPosition.xyz;
2749	#include <worldpos_vertex>
2750	#include <shadowmap_vertex>
2751	#include <fog_vertex>
2752}`,meshtoon_frag:`#define TOON
2753uniform vec3 diffuse;
2754uniform vec3 emissive;
2755uniform float opacity;
2756#include <common>
2757#include <packing>
2758#include <dithering_pars_fragment>
2759#include <color_pars_fragment>
2760#include <uv_pars_fragment>
2761#include <uv2_pars_fragment>
2762#include <map_pars_fragment>
2763#include <alphamap_pars_fragment>
2764#include <alphatest_pars_fragment>
2765#include <aomap_pars_fragment>
2766#include <lightmap_pars_fragment>
2767#include <emissivemap_pars_fragment>
2768#include <gradientmap_pars_fragment>
2769#include <fog_pars_fragment>
2770#include <bsdfs>
2771#include <lights_pars_begin>
2772#include <normal_pars_fragment>
2773#include <lights_toon_pars_fragment>
2774#include <shadowmap_pars_fragment>
2775#include <bumpmap_pars_fragment>
2776#include <normalmap_pars_fragment>
2777#include <logdepthbuf_pars_fragment>
2778#include <clipping_planes_pars_fragment>
2779void main() {
2780	#include <clipping_planes_fragment>
2781	vec4 diffuseColor = vec4( diffuse, opacity );
2782	ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
2783	vec3 totalEmissiveRadiance = emissive;
2784	#include <logdepthbuf_fragment>
2785	#include <map_fragment>
2786	#include <color_fragment>
2787	#include <alphamap_fragment>
2788	#include <alphatest_fragment>
2789	#include <normal_fragment_begin>
2790	#include <normal_fragment_maps>
2791	#include <emissivemap_fragment>
2792	#include <lights_toon_fragment>
2793	#include <lights_fragment_begin>
2794	#include <lights_fragment_maps>
2795	#include <lights_fragment_end>
2796	#include <aomap_fragment>
2797	vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;
2798	#include <output_fragment>
2799	#include <tonemapping_fragment>
2800	#include <encodings_fragment>
2801	#include <fog_fragment>
2802	#include <premultiplied_alpha_fragment>
2803	#include <dithering_fragment>
2804}`,points_vert:`uniform float size;
2805uniform float scale;
2806#include <common>
2807#include <color_pars_vertex>
2808#include <fog_pars_vertex>
2809#include <morphtarget_pars_vertex>
2810#include <logdepthbuf_pars_vertex>
2811#include <clipping_planes_pars_vertex>
2812void main() {
2813	#include <color_vertex>
2814	#include <morphcolor_vertex>
2815	#include <begin_vertex>
2816	#include <morphtarget_vertex>
2817	#include <project_vertex>
2818	gl_PointSize = size;
2819	#ifdef USE_SIZEATTENUATION
2820		bool isPerspective = isPerspectiveMatrix( projectionMatrix );
2821		if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );
2822	#endif
2823	#include <logdepthbuf_vertex>
2824	#include <clipping_planes_vertex>
2825	#include <worldpos_vertex>
2826	#include <fog_vertex>
2827}`,points_frag:`uniform vec3 diffuse;
2828uniform float opacity;
2829#include <common>
2830#include <color_pars_fragment>
2831#include <map_particle_pars_fragment>
2832#include <alphatest_pars_fragment>
2833#include <fog_pars_fragment>
2834#include <logdepthbuf_pars_fragment>
2835#include <clipping_planes_pars_fragment>
2836void main() {
2837	#include <clipping_planes_fragment>
2838	vec3 outgoingLight = vec3( 0.0 );
2839	vec4 diffuseColor = vec4( diffuse, opacity );
2840	#include <logdepthbuf_fragment>
2841	#include <map_particle_fragment>
2842	#include <color_fragment>
2843	#include <alphatest_fragment>
2844	outgoingLight = diffuseColor.rgb;
2845	#include <output_fragment>
2846	#include <tonemapping_fragment>
2847	#include <encodings_fragment>
2848	#include <fog_fragment>
2849	#include <premultiplied_alpha_fragment>
2850}`,shadow_vert:`#include <common>
2851#include <fog_pars_vertex>
2852#include <morphtarget_pars_vertex>
2853#include <skinning_pars_vertex>
2854#include <shadowmap_pars_vertex>
2855void main() {
2856	#include <beginnormal_vertex>
2857	#include <morphnormal_vertex>
2858	#include <skinbase_vertex>
2859	#include <skinnormal_vertex>
2860	#include <defaultnormal_vertex>
2861	#include <begin_vertex>
2862	#include <morphtarget_vertex>
2863	#include <skinning_vertex>
2864	#include <project_vertex>
2865	#include <worldpos_vertex>
2866	#include <shadowmap_vertex>
2867	#include <fog_vertex>
2868}`,shadow_frag:`uniform vec3 color;
2869uniform float opacity;
2870#include <common>
2871#include <packing>
2872#include <fog_pars_fragment>
2873#include <bsdfs>
2874#include <lights_pars_begin>
2875#include <shadowmap_pars_fragment>
2876#include <shadowmask_pars_fragment>
2877void main() {
2878	gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );
2879	#include <tonemapping_fragment>
2880	#include <encodings_fragment>
2881	#include <fog_fragment>
2882}`,sprite_vert:`uniform float rotation;
2883uniform vec2 center;
2884#include <common>
2885#include <uv_pars_vertex>
2886#include <fog_pars_vertex>
2887#include <logdepthbuf_pars_vertex>
2888#include <clipping_planes_pars_vertex>
2889void main() {
2890	#include <uv_vertex>
2891	vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );
2892	vec2 scale;
2893	scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );
2894	scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );
2895	#ifndef USE_SIZEATTENUATION
2896		bool isPerspective = isPerspectiveMatrix( projectionMatrix );
2897		if ( isPerspective ) scale *= - mvPosition.z;
2898	#endif
2899	vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;
2900	vec2 rotatedPosition;
2901	rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;
2902	rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;
2903	mvPosition.xy += rotatedPosition;
2904	gl_Position = projectionMatrix * mvPosition;
2905	#include <logdepthbuf_vertex>
2906	#include <clipping_planes_vertex>
2907	#include <fog_vertex>
2908}`,sprite_frag:`uniform vec3 diffuse;
2909uniform float opacity;
2910#include <common>
2911#include <uv_pars_fragment>
2912#include <map_pars_fragment>
2913#include <alphamap_pars_fragment>
2914#include <alphatest_pars_fragment>
2915#include <fog_pars_fragment>
2916#include <logdepthbuf_pars_fragment>
2917#include <clipping_planes_pars_fragment>
2918void main() {
2919	#include <clipping_planes_fragment>
2920	vec3 outgoingLight = vec3( 0.0 );
2921	vec4 diffuseColor = vec4( diffuse, opacity );
2922	#include <logdepthbuf_fragment>
2923	#include <map_fragment>
2924	#include <alphamap_fragment>
2925	#include <alphatest_fragment>
2926	outgoingLight = diffuseColor.rgb;
2927	#include <output_fragment>
2928	#include <tonemapping_fragment>
2929	#include <encodings_fragment>
2930	#include <fog_fragment>
2931}`},su={common:{diffuse:{value:new ii(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new tK},uv2Transform:{value:new tK}
vendor: 4,239 bytes, line 2931
2931,alphaMap:{value:null},alphaTest:{value:0}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new tQ(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new ii(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new ii(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new tK}},sprite:{diffuse:{value:new ii(16777215)},opacity:{value:1},center:{value:new tQ(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new tK}}},sp={basic:{uniforms:r0([su.common,su.specularmap,su.envmap,su.aomap,su.lightmap,su.fog]),vertexShader:sd.meshbasic_vert,fragmentShader:sd.meshbasic_frag},lambert:{uniforms:r0([su.common,su.specularmap,su.envmap,su.aomap,su.lightmap,su.emissivemap,su.bumpmap,su.normalmap,su.displacementmap,su.fog,su.lights,{emissive:{value:new ii(0)}}]),vertexShader:sd.meshlambert_vert,fragmentShader:sd.meshlambert_frag},phong:{uniforms:r0([su.common,su.specularmap,su.envmap,su.aomap,su.lightmap,su.emissivemap,su.bumpmap,su.normalmap,su.displacementmap,su.fog,su.lights,{emissive:{value:new ii(0)},specular:{value:new ii(1118481)},shininess:{value:30}}]),vertexShader:sd.meshphong_vert,fragmentShader:sd.meshphong_frag},standard:{uniforms:r0([su.common,su.envmap,su.aomap,su.lightmap,su.emissivemap,su.bumpmap,su.normalmap,su.displacementmap,su.roughnessmap,su.metalnessmap,su.fog,su.lights,{emissive:{value:new ii(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:sd.meshphysical_vert,fragmentShader:sd.meshphysical_frag},toon:{uniforms:r0([su.common,su.aomap,su.lightmap,su.emissivemap,su.bumpmap,su.normalmap,su.displacementmap,su.gradientmap,su.fog,su.lights,{emissive:{value:new ii(0)}}]),vertexShader:sd.meshtoon_vert,fragmentShader:sd.meshtoon_frag},matcap:{uniforms:r0([su.common,su.bumpmap,su.normalmap,su.displacementmap,su.fog,{matcap:{value:null}}]),vertexShader:sd.meshmatcap_vert,fragmentShader:sd.meshmatcap_frag},points:{uniforms:r0([su.points,su.fog]),vertexShader:sd.points_vert,fragmentShader:sd.points_frag},dashed:{uniforms:r0([su.common,su.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:sd.linedashed_vert,fragmentShader:sd.linedashed_frag},depth:{uniforms:r0([su.common,su.displacementmap]),vertexShader:sd.depth_vert,fragmentShader:sd.depth_frag},normal:{uniforms:r0([su.common,su.bumpmap,su.normalmap,su.displacementmap,{opacity:{value:1}}]),vertexShader:sd.meshnormal_vert,fragmentShader:sd.meshnormal_frag}
2931,sprite:{uniforms:r0([su.sprite,su.fog]),vertexShader:sd.sprite_vert,fragmentShader:sd.sprite_frag},background:{uniforms:{uvTransform:{value:new tK},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:sd.background_vert,fragmentShader:sd.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1}},vertexShader:sd.backgroundCube_vert,fragmentShader:sd.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:sd.cube_vert,fragmentShader:sd.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:sd.equirect_vert,fragmentShader:sd.equirect_frag},distanceRGBA:{uniforms:r0([su.common,su.displacementmap,{referencePosition:{value:new iv},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:sd.distanceRGBA_vert,fragmentShader:sd.distanceRGBA_frag},shadow:{uniforms:r0([su.lights,su.fog,{color:{value:new ii(0)},opacity:{value:1}}]),vertexShader:sd.shadow_vert,fragmentShader:sd.shadow_frag}};sp.physical={uniforms:r0([sp.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new tQ(1,1)},clearcoatNormalMap:{value:null},iridescence:{value:0},iridescenceMap:{value:null},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},sheen:{value:0},sheenColor:{value:new ii(0)},sheenColorMap:{value:null},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new tQ},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationColor:{value:new ii(0)},specularIntensity:{value:1},specularIntensityMap:{value:null},specularColor:{value:new ii(1,1,1)},specularColorMap:{value:null}}]),vertexShader:sd.meshphysical_vert,fragmentShader:sd.meshphysical_frag};var sf={r:0,b:0,g:0};function sm(e,t,i,r,s,a,o){let l=new ii(0),h=!0===a?0:1,c,d,u=null,p=0,f=null;function m(t,i){t.getRGB(sf,r1(e)),r.buffers.color.setClear(sf.r,sf.g,sf.b,i,o)}return{getClearColor:function(){return l},setClearColor:function(e,t=1){l.set(e),m(l,h=t)},getClearAlpha:function(){return h},setClearAlpha:function(e){m(l,h=e)},render:function(r,a){let o=!1,g=!0===a.isScene?a.background:null;g&&g.isTexture&&(g=(a.backgroundBlurriness>0?i:t).get(g));let v=e.xr,y=v.getSession&&v.getSession();y&&"additive"===y.environmentBlendMode&&(g=null),null===g?m(l,h):g&&g.isColor&&(m(g,1),o=!0),(e.autoClear||o)&&e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil),g&&(g.isCubeTexture||306===g.mapping)?(void 0===d&&((d=new rK(new rJ(1,1,1),new r5({name:"BackgroundCubeMaterial",uniforms:r$(sp.backgroundCube.uniforms),vertexShader:sp.backgroundCube.vertexShader,fragmentShader:sp.backgroundCube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),d.geometry.deleteAttribute("uv"),d.onBeforeRender=function(e,t,i){this.matrixWorld.copyPosition(i.matrixWorld)},Object.defineProperty(d.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),s.update(d)),d.material.uniforms.envMap.value=g,d.material.uniforms.flipEnvMap.value=g.isCubeTexture&&!1===g.isRenderTargetTexture?-1:1,d.material.uniforms.backgroundBlurriness.value=a.backgroundBlurriness,d.material.uniforms.backgroundIntensity.value=a.backgroundIntensity,d.material.toneMapped=3001!==g.encoding,(u!==g||p!==g.version||f!==e.toneMapping)&&(d.material.needsUpdate=!0,u=g,p=g.version,f=e.toneMapping),d.layers.enableAll(),r.unshift(d,d.geometry,d.material,0,0,null)):g&&g.isTexture&&(void 0===c&&((c=new rK(new sc(2,2),new r5({name:"BackgroundMaterial",uniforms:r$(sp.background.uniforms),vertexShader:sp.background.vertexShader,fragmentShader:sp.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),Object.defineProperty(c.material,"map",{get:function(){return this.uniforms.t2D.value}}),s.update(c)),c.material.uniforms.t2D.value=g,c.material.uniforms.backgroundIntensity.value=a.backgroundIntensity,c.material.toneMapped=3001!==g.encoding,!0===g.matrixAutoUpdate&&g.updateMatrix(),c.material.uniforms.uvTransform.value.copy(g.matrix),(u!==g||p!==g.ver
2931sion||f!==e.toneMapping)&&(c.material.needsUpdate=!0,u=g,p=g.version,f=e.toneMapping),c.layers.enableAll(),r.unshift(c,c.geometry,c.material,0,0,null))}}}function sg(e,t,i,r){let s=e.getParameter(34921),a=r.isWebGL2?null:t.get("OES_vertex_array_object"),o=r.isWebGL2||null!==a,l={},h=f(null),c=h,d=!1;function u(t){return r.isWebGL2?e.bindVertexArray(t):a.bindVertexArrayOES(t)}function p(t){return r.isWebGL2?e.deleteVertexArray(t):a.deleteVertexArrayOES(t)}function f(e){let t=[],i=[],r=[];for(let e=0;e<s;e++)t[e]=0,i[e]=0,r[e]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:t,enabledAttributes:i,attributeDivisors:r,object:e,attributes:{},index:null}}function m(){let e=c.newAttributes;for(let t=0,i=e.length;t<i;t++)e[t]=0}function g(e){v(e,0)}function v(i,s){let a=c.newAttributes,o=c.enabledAttributes,l=c.attributeDivisors;a[i]=1,0===o[i]&&(e.enableVertexAttribArray(i),o[i]=1),l[i]!==s&&((r.isWebGL2?e:t.get("ANGLE_instanced_arrays"))[r.isWebGL2?"vertexAttribDivisor":"vertexAttribDivisorANGLE"](i,s),l[i]=s)}function y(){let t=c.newAttributes,i=c.enabledAttributes;for(let r=0,s=i.length;r<s;r++)i[r]!==t[r]&&(e.disableVertexAttribArray(r),i[r]=0)}function x(t,i,s,a,o,l){!0===r.isWebGL2&&(5124===s||5125===s)?e.vertexAttribIPointer(t,i,s,o,l):e.vertexAttribPointer(t,i,s,a,o,l)}function b(){w(),d=!0,c!==h&&u((c=h).object)}function w(){h.geometry=null,h.program=null,h.wireframe=!1}return{setup:function(s,h,p,b,w){let S=!1;if(o){let t,i,o,d;let m=(t=!0===h.wireframe,void 0===(i=l[b.id])&&(i={},l[b.id]=i),void 0===(o=i[p.id])&&(o={},i[p.id]=o),void 0===(d=o[t])&&(d=f(r.isWebGL2?e.createVertexArray():a.createVertexArrayOES()),o[t]=d),d);c!==m&&u((c=m).object),(S=function(e,t,i,r){let s=c.attributes,a=t.attributes,o=0,l=i.getAttributes();for(let t in l)if(l[t].location>=0){let i=s[t],r=a[t];if(void 0===r&&("instanceMatrix"===t&&e.instanceMatrix&&(r=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(r=e.instanceColor)),void 0===i||i.attribute!==r||r&&i.data!==r.data)return!0;o++}return c.attributesNum!==o||c.index!==r}(s,b,p,w))&&function(e,t,i,r){let s={},a=t.attributes,o=0,l=i.getAttributes();for(let t in l)if(l[t].location>=0){let i=a[t];void 0===i&&("instanceMatrix"===t&&e.instanceMatrix&&(i=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(i=e.instanceColor));let r={};r.attribute=i,i&&i.data&&(r.data=i.data),s[t]=r,o++}c.attributes=s,c.attributesNum=o,c.index=r}(s,b,p,w)}else{let e=!0===h.wireframe;(c.geometry!==b.id||c.program!==p.id||c.wireframe!==e)&&(c.geometry=b.id,c.program=p.id,c.wireframe=e,S=!0)}null!==w&&i.update(w,34963),(S||d)&&(d=!1,function(s,a,o,l){if(!1===r.isWebGL2&&(s.isInstancedMesh||l.isInstancedBufferGeometry)&&null===t.get("ANGLE_instanced_arrays"))return;m();let h=l.attributes,c=o.getAttributes(),d=a.defaultAttributeValues;for(let t in c){let r=c[t];if(r.location>=0){let a=h[t];if(void 0===a&&("instanceMatrix"===t&&s.instanceMatrix&&(a=s.instanceMatrix),"instanceColor"===t&&s.instanceColor&&(a=s.instanceColor)),void 0!==a){let t=a.normalized,o=a.itemSize,h=i.get(a);if(void 0===h)continue;let c=h.buffer,d=h.type,u=h.bytesPerElement;if(a.isInterleavedBufferAttribute){let i=a.data,h=i.stride,p=a.offset;if(i.isInstancedInterleavedBuffer){for(let e=0;e<r.locationSize;e++)v(r.location+e,i.meshPerAttribute);!0!==s.isInstancedMesh&&void 0===l._maxInstanceCount&&(l._maxInstanceCount=i.meshPerAttribute*i.count)}else for(let e=0;e<r.locationSize;e++)g(r.location+e);e.bindBuffer(34962,c);for(let e=0;e<r.locationSize;e++)x(r.location+e,o/r.locationSize,d,t,h*u,(p+o/r.locationSize*e)*u)}else{if(a.isInstancedBufferAttribute){for(let e=0;e<r.locationSize;e++)v(r.location+e,a.meshPerAttribute);!0!==s.isInstancedMesh&&void 0===l._maxInstanceCount&&(l._maxInstanceCount=a.meshPerAttribute*a.count)}else for(let e=0;e<r.locationSize;e++)g(r.location+e);e.bindBuffer(34962,c);for(let e=0;e<r.locationSize;e++)x(r.location+e,o/r.locationSize,d,t,o*u,o/r.locationSize*e*u)}}else if(void 0!==d){let i=d[t];if(void 0!==i)switch(i.length){case 2:e.vertexAttrib2fv(r.location,i);break;case 3:e.vertexAttrib3fv(r.location,i);break;case 4:e.vertexAttrib4fv(r.location,i);break;default:e.vertexAttrib1fv(r.location,i)}}}}y()}(s,h,p,b),null!==w&&e.bindBuffer(34963,i.get(w).buffer))},reset:b,resetDefaultState:w,dispose:function(){for(let e in b(),l){let t=l[e];for(let e in t){let i=t[e];for(let e in i)p(i[e].object),delete i[e];delete t[e]}delete l[e]}},releaseStatesOfGeometry:function(e){if(void 0===l[e.id])return;
2931let t=l[e.id];for(let e in t){let i=t[e];for(let e in i)p(i[e].object),delete i[e];delete t[e]}delete l[e.id]},releaseStatesOfProgram:function(e){for(let t in l){let i=l[t];if(void 0===i[e.id])continue;let r=i[e.id];for(let e in r)p(r[e].object),delete r[e];delete i[e.id]}},initAttributes:m,enableAttribute:g,disableUnusedAttributes:y}}function sv(e,t,i,r){let s=r.isWebGL2,a;this.setMode=function(e){a=e},this.render=function(t,r){e.drawArrays(a,t,r),i.update(r,a,1)},this.renderInstances=function(r,o,l){let h,c;if(0!==l){if(s)h=e,c="drawArraysInstanced";else if(h=t.get("ANGLE_instanced_arrays"),c="drawArraysInstancedANGLE",null===h){console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}h[c](a,r,o,l),i.update(o,a,l)}}}function sy(e,t,i){let r;function s(t){if("highp"===t){if(e.getShaderPrecisionFormat(35633,36338).precision>0&&e.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";t="mediump"}return"mediump"===t&&e.getShaderPrecisionFormat(35633,36337).precision>0&&e.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}let a="u">typeof WebGL2RenderingContext&&e instanceof WebGL2RenderingContext,o=void 0!==i.precision?i.precision:"highp",l=s(o);l!==o&&(console.warn("THREE.WebGLRenderer:",o,"not supported, using",l,"instead."),o=l);let h=a||t.has("WEBGL_draw_buffers"),c=!0===i.logarithmicDepthBuffer,d=e.getParameter(34930),u=e.getParameter(35660),p=e.getParameter(3379),f=e.getParameter(34076),m=e.getParameter(34921),g=e.getParameter(36347),v=e.getParameter(36348),y=e.getParameter(36349),x=u>0,b=a||t.has("OES_texture_float"),w=a?e.getParameter(36183):0;return{isWebGL2:a,drawBuffers:h,getMaxAnisotropy:function(){if(void 0!==r)return r;if(!0===t.has("EXT_texture_filter_anisotropic")){let i=t.get("EXT_texture_filter_anisotropic");r=e.getParameter(i.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else r=0;return r},getMaxPrecision:s,precision:o,logarithmicDepthBuffer:c,maxTextures:d,maxVertexTextures:u,maxTextureSize:p,maxCubemapSize:f,maxAttributes:m,maxVertexUniforms:g,maxVaryings:v,maxFragmentUniforms:y,vertexTextures:x,floatFragmentTextures:b,floatVertexTextures:x&&b,maxSamples:w}}function sx(e){let t=this,i=null,r=0,s=!1,a=!1,o=new ss,l=new tK,h={value:null,needsUpdate:!1};function c(e,i,r,s){let a=null!==e?e.length:0,c=null;if(0!==a){if(c=h.value,!0!==s||null===c){let t=r+4*a,s=i.matrixWorldInverse;l.getNormalMatrix(s),(null===c||c.length<t)&&(c=new Float32Array(t));for(let t=0,i=r;t!==a;++t,i+=4)o.copy(e[t]).applyMatrix4(s,l),o.normal.toArray(c,i),c[i+3]=o.constant}h.value=c,h.needsUpdate=!0}return t.numPlanes=a,t.numIntersection=0,c}this.uniform=h,this.numPlanes=0,this.numIntersection=0,this.init=function(e,t){let i=0!==e.length||t||0!==r||s;return s=t,r=e.length,i},this.beginShadows=function(){a=!0,c(null)},this.endShadows=function(){a=!1},this.setGlobalState=function(e,t){i=c(e,t,0)},this.setState=function(o,l,d){let u=o.clippingPlanes,p=o.clipIntersection,f=o.clipShadows,m=e.get(o);if(s&&null!==u&&0!==u.length&&(!a||f)){let e=a?0:r,t=4*e,s=m.clippingState||null;h.value=s,s=c(u,l,t,d);for(let e=0;e!==t;++e)s[e]=i[e];m.clippingState=s,this.numIntersection=p?this.numPlanes:0,this.numPlanes+=e}else a?c(null):(h.value!==i&&(h.value=i,h.needsUpdate=r>0),t.numPlanes=r,t.numIntersection=0)}}function sb(e){let t=new WeakMap;function i(e,t){return 303===t?e.mapping=301:304===t&&(e.mapping=302),e}function r(e){let i=e.target;i.removeEventListener("dispose",r);let s=t.get(i);void 0!==s&&(t.delete(i),s.dispose())}return{get:function(s){if(s&&s.isTexture&&!1===s.isRenderTargetTexture){let a=s.mapping;if(303===a||304===a){if(t.has(s))return i(t.get(s).texture,s.mapping);{let a=s.image;if(!a||!(a.height>0))return null;{let o=new se(a.height/2);return o.fromEquirectangularTexture(e,s),t.set(s,o),s.addEventListener("dispose",r),i(o.texture,s.mapping)}}}}return s},dispose:function(){t=new WeakMap}}}var sw=class extends r6{constructor(e=-1,t=1,i=1,r=-1,s=.1,a=2e3){super(),this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=e,this.right=t,this.top=i,this.bottom=r,this.near=s,this.far=a,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.near=e.near,this.far=e.far,this.zoom=e.zoom,this.view=null===e.view?null:Object.assign({},e.view),this}setViewOffset(e,t,i,r,s,a){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=r,this.view.width=s,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),i=(this.right+this.left)/2,r=(this.top+this.bottom)/2,s=i-e,a=i+e,o=r+t,l=r-t;if(null!==this.view&&this.view.enabled){let e=(this.right-this.left)/this.view.fullWidth/this.zoom,t=(this.top-this.bottom)/this.view.fullHeight/this.zoom;s+=e*this.view.offsetX,a=s+e*this.view.width,o-=t*this.view.offsetY,l=o-t*this.view.height}
2931this.projectionMatrix.makeOrthographic(s,a,o,l,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,null!==this.view&&(t.object.view=Object.assign({},this.view)),t}},sS=[.125,.215,.35,.446,.526,.582],s_=new sw,sA=new ii,sM=null,sE=(1+Math.sqrt(5))/2,sC=1/sE,sT=[new iv(1,1,1),new iv(-1,1,1),new iv(1,1,-1),new iv(-1,1,-1),new iv(0,sE,sC),new iv(0,sE,-sC),new iv(sC,0,sE),new iv(-sC,0,sE),new iv(sE,sC,0),new iv(-sE,sC,0)],sP=class{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,i=.1,r=100){sM=this._renderer.getRenderTarget(),this._setSize(256);let s=this._allocateTargets();return s.depthBuffer=!0,this._sceneToCubeUV(e,i,r,s),t>0&&this._blur(s,0,0,t),this._applyPMREM(s),this._cleanup(s),s}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=sR(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=sO(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let e=0;e<this._lodPlanes.length;e++)this._lodPlanes[e].dispose()}_cleanup(e){this._renderer.setRenderTarget(sM),e.scissorTest=!1,sI(e,0,0,e.width,e.height)}_fromTexture(e,t){301===e.mapping||302===e.mapping?this._setSize(0===e.image.length?16:e.image[0].width||e.image[0].image.width):this._setSize(e.image.width/4),sM=this._renderer.getRenderTarget();let i=t||this._allocateTargets();return this._textureToCubeUV(e,i),this._applyPMREM(i),this._cleanup(i),i}_allocateTargets(){let e=3*Math.max(this._cubeSize,112),t=4*this._cubeSize,i={magFilter:1006,minFilter:1006,generateMipmaps:!1,type:1016,format:1023,encoding:3e3,depthBuffer:!1},r=sD(e,t,i);if(null===this._pingPongRenderTarget||this._pingPongRenderTarget.width!==e||this._pingPongRenderTarget.height!==t){null!==this._pingPongRenderTarget&&this._dispose(),this._pingPongRenderTarget=sD(e,t,i);let{_lodMax:r}=this;({sizeLods:this._sizeLods,lodPlanes:this._lodPlanes,sigmas:this._sigmas}=function(e){let t=[],i=[],r=[],s=e,a=e-4+1+sS.length;for(let o=0;o<a;o++){let a=Math.pow(2,s);i.push(a);let l=1/a;o>e-4?l=sS[o-e+4-1]:0===o&&(l=0),r.push(l);let h=1/(a-2),c=-h,d=1+h,u=[c,c,d,c,d,d,c,c,d,d,c,d],p=new Float32Array(108),f=new Float32Array(72),m=new Float32Array(36);for(let e=0;e<6;e++){let t=e%3*2/3-1,i=e>2?0:-1,r=[t,i,0,t+2/3,i,0,t+2/3,i+1,0,t,i,0,t+2/3,i+1,0,t,i+1,0];p.set(r,18*e),f.set(u,12*e);let s=[e,e,e,e,e,e];m.set(s,6*e)}let g=new rz;g.setAttribute("position",new rM(p,3)),g.setAttribute("uv",new rM(f,2)),g.setAttribute("faceIndex",new rM(m,1)),t.push(g),s>4&&s--}return{lodPlanes:t,sizeLods:i,sigmas:r}}(r)),this._blurMaterial=new r5({name:"SphericalGaussianBlur",defines:{n:20,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${r}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:new Float32Array(20)},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:new iv(0,1,0)}},vertexShader:sL(),fragmentShader:`
2932
2933			precision mediump float;
2934			precision mediump int;
2935
2936			varying vec3 vOutputDirection;
2937
2938			uniform sampler2D envMap;
2939			uniform int samples;
2940			uniform float weights[ n ];
2941			uniform bool latitudinal;
2942			uniform float dTheta;
2943			uniform float mipInt;
2944			uniform vec3 poleAxis;
2945
2946			#define ENVMAP_TYPE_CUBE_UV
2947			#include <cube_uv_reflection_fragment>
2948
2949			vec3 getSample( float theta, vec3 axis ) {
2950
2951				float cosTheta = cos( theta );
2952				// Rodrigues' axis-angle rotation
2953				vec3 sampleDirection = vOutputDirection * cosTheta
2954					+ cross( axis, vOutputDirection ) * sin( theta )
2955					+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );
2956
2957				return bilinearCubeUV( envMap, sampleDirection, mipInt );
2958
2959			}
2960
2961			void main() {
2962
2963				vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );
2964
2965				if ( all( equal( axis, vec3( 0.0 ) ) ) ) {
2966
2967					axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );
2968
2969				}
2970
2971				axis = normalize( axis );
2972
2973				gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );
2974				gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );
2975
2976				for ( int i = 1; i < n; i++ ) {
2977
2978					if ( i >= samples ) {
2979
2980						break;
2981
2982					}
2983
2984					float theta = dTheta * float( i );
2985					gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );
2986					gl_FragColor.rgb += weights[ i ] * getSample( theta, axis );
2987
2988				}
2989
2990			}
2991		`,blending:0,depthTest:!1,depthWrite:!1})}return r}_compileMaterial(e){let t=new rK(this._lodPlanes[0],e);this._renderer.compile(t,s_)}_sceneToCubeUV(e,t,i,r){let s=new r8(90,1,t,i),a=[1,-1,1,1,1,1],o=[1,1,1,-1,-1,-1],l=this._renderer,h=l.autoClear,c=l.toneMapping;l.getClearColor(sA),l.toneMapping=0,l.autoClear=!1;
2991let d=new rS({name:"PMREM.Background",side:1,depthWrite:!1,depthTest:!1}),u=new rK(new rJ,d),p=!1,f=e.background;f?f.isColor&&(d.color.copy(f),e.background=null,p=!0):(d.color.copy(sA),p=!0);for(let t=0;t<6;t++){let i=t%3;0===i?(s.up.set(0,a[t],0),s.lookAt(o[t],0,0)):1===i?(s.up.set(0,0,a[t]),s.lookAt(0,o[t],0)):(s.up.set(0,a[t],0),s.lookAt(0,0,o[t]));let h=this._cubeSize;sI(r,i*h,t>2?h:0,h,h),l.setRenderTarget(r),p&&l.render(u,s),l.render(e,s)}u.geometry.dispose(),u.material.dispose(),l.toneMapping=c,l.autoClear=h,e.background=f}_textureToCubeUV(e,t){let i=this._renderer,r=301===e.mapping||302===e.mapping;r?(null===this._cubemapMaterial&&(this._cubemapMaterial=sR()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===e.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=sO());let s=r?this._cubemapMaterial:this._equirectMaterial,a=new rK(this._lodPlanes[0],s);s.uniforms.envMap.value=e;let o=this._cubeSize;sI(t,0,0,3*o,2*o),i.setRenderTarget(t),i.render(a,s_)}_applyPMREM(e){let t=this._renderer,i=t.autoClear;t.autoClear=!1;for(let t=1;t<this._lodPlanes.length;t++){let i=Math.sqrt(this._sigmas[t]*this._sigmas[t]-this._sigmas[t-1]*this._sigmas[t-1]),r=sT[(t-1)%sT.length];this._blur(e,t-1,t,i,r)}t.autoClear=i}_blur(e,t,i,r,s){let a=this._pingPongRenderTarget;this._halfBlur(e,a,t,i,r,"latitudinal",s),this._halfBlur(a,e,i,i,r,"longitudinal",s)}_halfBlur(e,t,i,r,s,a,o){let l=this._renderer,h=this._blurMaterial;"latitudinal"!==a&&"longitudinal"!==a&&console.error("blur direction must be either latitudinal or longitudinal!");let c=new rK(this._lodPlanes[r],h),d=h.uniforms,u=this._sizeLods[i]-1,p=isFinite(s)?Math.PI/(2*u):2*Math.PI/39,f=s/p,m=isFinite(s)?1+Math.floor(3*f):20;m>20&&console.warn(`sigmaRadians, ${s}, is too large and will clip, as it requested ${m} samples when the maximum is set to 20`);let g=[],v=0;for(let e=0;e<20;++e){let t=e/f,i=Math.exp(-t*t/2);g.push(i),0===e?v+=i:e<m&&(v+=2*i)}for(let e=0;e<g.length;e++)g[e]=g[e]/v;d.envMap.value=e.texture,d.samples.value=m,d.weights.value=g,d.latitudinal.value="latitudinal"===a,o&&(d.poleAxis.value=o);let{_lodMax:y}=this;d.dTheta.value=p,d.mipInt.value=y-i;let x=this._sizeLods[r],b=4*(this._cubeSize-x);sI(t,3*x*(r>y-4?r-y+4:0),b,3*x,2*x),l.setRenderTarget(t),l.render(c,s_)}};function sD(e,t,i){let r=new id(e,t,i);return r.texture.mapping=306,r.texture.name="PMREM.cubeUv",r.scissorTest=!0,r}function sI(e,t,i,r,s){e.viewport.set(t,i,r,s),e.scissor.set(t,i,r,s)}function sO(){return new r5({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:sL(),fragmentShader:`
2992
2993			precision mediump float;
2994			precision mediump int;
2995
2996			varying vec3 vOutputDirection;
2997
2998			uniform sampler2D envMap;
2999
3000			#include <common>
3001
3002			void main() {
3003
3004				vec3 outputDirection = normalize( vOutputDirection );
3005				vec2 uv = equirectUv( outputDirection );
3006
3007				gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );
3008
3009			}
3010		`,blending:0,depthTest:!1,depthWrite:!1})}function sR(){return new r5({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:sL(),fragmentShader:`
3011
3012			precision mediump float;
3013			precision mediump int;
3014
3015			uniform float flipEnvMap;
3016
3017			varying vec3 vOutputDirection;
3018
3019			uniform samplerCube envMap;
3020
3021			void main() {
3022
3023				gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );
3024
3025			}
3026		`,blending:0,depthTest:!1,depthWrite:!1})}function sL(){return`
3027
3028		precision mediump float;
3029		precision mediump int;
3030
3031		attribute float faceIndex;
3032
3033		varying vec3 vOutputDirection;
3034
3035		// RH coordinate system; PMREM face-indexing convention
3036		vec3 getDirection( vec2 uv, float face ) {
3037
3038			uv = 2.0 * uv - 1.0;
3039
3040			vec3 direction = vec3( uv, 1.0 );
3041
3042			if ( face == 0.0 ) {
3043
3044				direction = direction.zyx; // ( 1, v, u ) pos x
3045
3046			} else if ( face == 1.0 ) {
3047
3048				direction = direction.xzy;
3049				direction.xz *= -1.0; // ( -u, 1, -v ) pos y
3050
3051			} else if ( face == 2.0 ) {
3052
3053				direction.x *= -1.0; // ( -u, v, 1 ) pos z
3054
3055			} else if ( face == 3.0 ) {
3056
3057				direction = direction.zyx;
3058				direction.xz *= -1.0; // ( -1, v, -u ) neg x
3059
3060			} else if ( face == 4.0 ) {
3061
3062				direction = direction.xzy;
3063				direction.xy *= -1.0; // ( -u, -1, v ) neg y
3064
3065			} else if ( face == 5.0 ) {
3066
3067				direction.z *= -1.0; // ( u, v, -1 ) neg z
3068
3069			}
3070
3071			return direction;
3072
3073		}
3074
3075		void main() {
3076
3077			vOutputDirection = getDirection( uv, faceIndex );
3078			gl_Position = vec4( position, 1.0 );
3079
3080		}
3081	`}function sB(e){let t=new WeakMap,i=null;function r(e){let i=e.target;i.removeEventListener("dispose",r);let s=t.get(i);void 0!==s&&(t.delete(i),s.dispose())}return{get:function(s){if(s&&s.isTexture){let a=s.mapping,o=303===a||304===a,l=301===a||302===a;if(o||l){if(s.isRenderTargetTexture&&!0===s.needsPMREMUpdate){s.needsPMREMUpdate=!1;let r=t.get(s);return null===i&&(i=new sP(e)),r=o?i.fromEquirectangular(s,r):i.fromCubemap(s,r),t.set(s,r),r.texture}if(t.has(s))return t.get(s).texture;{let a=s.image;if(!(o&&a&&a.height>0||l&&a&&function(e){let t=0;for(let i=0;i<6;i++)void 0!==e[i]&&t++;return 6===t}(a)))return null;{null===i&&(i=new sP(e));let a=o?i.fromEquirectangular(s):i.fromCubemap(s);return t.set(s,a),s.addEventListener("dispose",r),a.texture}}}}return s},dispose:function(){t=new WeakMap,null!==i&&(i.dispose(),i=null)}}}function sz(e){let t={};function i(i){let r;if(void 0!==t[i])return t[i];switch(i){case"WEBGL_depth_texture":r=e.getExtension("WEBGL_depth_texture")||e.getExtension("MOZ_WEBGL_depth_texture")||e.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":r=e.getExtension("EXT_texture_filter_anisotropic")||e.getExtension("MOZ_EXT_texture_filter_anisotropic")||e.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":r=e.getExtension("WEBGL_compressed_texture_s3tc")||e.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||e.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":r=e.getExtension("WEBGL_compressed_texture_pvrtc")||e.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:r=e.getExtension(i)}return t[i]=r,r}return{has:function(e){return null!==i(e)},init:function(e){e.isWebGL2?i("EXT_color_buffer_float"):(i("WEBGL_depth_texture"),i("OES_texture_float"),i("OES_texture_half_float"),i("OES_texture_half_float_linear"),i("OES_standard_derivatives"),i("OES_element_index_uint"),i("OES_vertex_array_object"),i("ANGLE_instanced_arrays")),i("OES_texture_float_linear"),i("EXT_color_buffer_half_float"),i("WEBGL_multisampled_render_to_texture")},get:function(e){let t=i(e);return null===t&&console.warn("THREE.WebGLRenderer: "+e+" extension not supported."),t}}}function sF(e,t,i,r){let s={},a=new WeakMap;function o(e){let l=e.target;for(let e in null!==l.index&&t.remove(l.index),l.attributes)t.remove(l.attributes[e]);l.removeEventListener("dispose",o),delete s[l.id];let h=a.get(l);
3081h&&(t.remove(h),a.delete(l)),r.releaseStatesOfGeometry(l),!0===l.isInstancedBufferGeometry&&delete l._maxInstanceCount,i.memory.geometries--}function l(e){let i=[],r=e.index,s=e.attributes.position,o=0;if(null!==r){let e=r.array;o=r.version;for(let t=0,r=e.length;t<r;t+=3){let r=e[t+0],s=e[t+1],a=e[t+2];i.push(r,s,s,a,a,r)}}else{let e=s.array;o=s.version;for(let t=0,r=e.length/3-1;t<r;t+=3){let e=t+0,r=t+1,s=t+2;i.push(e,r,r,s,s,e)}}let l=new(tJ(i)?rC:rE)(i,1);l.version=o;let h=a.get(e);h&&t.remove(h),a.set(e,l)}return{get:function(e,t){return!0===s[t.id]||(t.addEventListener("dispose",o),s[t.id]=!0,i.memory.geometries++),t},update:function(e){let i=e.attributes;for(let e in i)t.update(i[e],34962);let r=e.morphAttributes;for(let e in r){let i=r[e];for(let e=0,r=i.length;e<r;e++)t.update(i[e],34962)}},getWireframeAttribute:function(e){let t=a.get(e);if(t){let i=e.index;null!==i&&t.version<i.version&&l(e)}else l(e);return a.get(e)}}}function sN(e,t,i,r){let s,a,o=r.isWebGL2,l;this.setMode=function(e){l=e},this.setIndex=function(e){s=e.type,a=e.bytesPerElement},this.render=function(t,r){e.drawElements(l,r,s,t*a),i.update(r,l,1)},this.renderInstances=function(r,h,c){let d,u;if(0!==c){if(o)d=e,u="drawElementsInstanced";else if(d=t.get("ANGLE_instanced_arrays"),u="drawElementsInstancedANGLE",null===d){console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}d[u](l,h,s,r*a,c),i.update(h,l,c)}}}function sk(e){let t={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:t,programs:null,autoReset:!0,reset:function(){t.frame++,t.calls=0,t.triangles=0,t.points=0,t.lines=0},update:function(e,i,r){switch(t.calls++,i){case 4:t.triangles+=e/3*r;break;case 1:t.lines+=e/2*r;break;case 3:t.lines+=r*(e-1);break;case 2:t.lines+=r*e;break;case 0:t.points+=r*e;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",i)}}}}function sU(e,t){return e[0]-t[0]}function sV(e,t){return Math.abs(t[1])-Math.abs(e[1])}function sj(e,t,i){let r={},s=new Float32Array(8),a=new WeakMap,o=new ic,l=[];for(let e=0;e<8;e++)l[e]=[e,0];return{update:function(h,c,d,u){let p=h.morphTargetInfluences;if(!0===t.isWebGL2){let r=c.morphAttributes.position||c.morphAttributes.normal||c.morphAttributes.color,s=void 0!==r?r.length:0,l=a.get(c);if(void 0===l||l.count!==s){let e=function(){y.dispose(),a.delete(c),c.removeEventListener("dispose",e)};void 0!==l&&l.texture.dispose();let i=void 0!==c.morphAttributes.position,r=void 0!==c.morphAttributes.normal,h=void 0!==c.morphAttributes.color,d=c.morphAttributes.position||[],u=c.morphAttributes.normal||[],p=c.morphAttributes.color||[],f=0;!0===i&&(f=1),!0===r&&(f=2),!0===h&&(f=3);let m=c.attributes.position.count*f,g=1;m>t.maxTextureSize&&(g=Math.ceil(m/t.maxTextureSize),m=t.maxTextureSize);let v=new Float32Array(m*g*4*s),y=new iu(v,m,g,s);y.type=1015,y.needsUpdate=!0;let x=4*f;for(let e=0;e<s;e++){let t=d[e],s=u[e],a=p[e],l=m*g*4*e;for(let e=0;e<t.count;e++){let c=e*x;!0===i&&(o.fromBufferAttribute(t,e),v[l+c+0]=o.x,v[l+c+1]=o.y,v[l+c+2]=o.z,v[l+c+3]=0),!0===r&&(o.fromBufferAttribute(s,e),v[l+c+4]=o.x,v[l+c+5]=o.y,v[l+c+6]=o.z,v[l+c+7]=0),!0===h&&(o.fromBufferAttribute(a,e),v[l+c+8]=o.x,v[l+c+9]=o.y,v[l+c+10]=o.z,v[l+c+11]=4===a.itemSize?o.w:1)}}l={count:s,texture:y,size:new tQ(m,g)},a.set(c,l),c.addEventListener("dispose",e)}let h=0;for(let e=0;e<p.length;e++)h+=p[e];let d=c.morphTargetsRelative?1:1-h;u.getUniforms().setValue(e,"morphTargetBaseInfluence",d),u.getUniforms().setValue(e,"morphTargetInfluences",p),u.getUniforms().setValue(e,"morphTargetsTexture",l.texture,i),u.getUniforms().setValue(e,"morphTargetsTextureSize",l.size)}else{let t=void 0===p?0:p.length,i=r[c.id];if(void 0===i||i.length!==t){i=[];for(let e=0;e<t;e++)i[e]=[e,0];r[c.id]=i}for(let e=0;e<t;e++){let t=i[e];t[0]=e,t[1]=p[e]}i.sort(sV);for(let e=0;e<8;e++)e<t&&i[e][1]?(l[e][0]=i[e][0],l[e][1]=i[e][1]):(l[e][0]=Number.MAX_SAFE_INTEGER,l[e][1]=0);l.sort(sU);let a=c.morphAttributes.position,o=c.morphAttributes.normal,h=0;for(let e=0;e<8;e++){let t=l[e],i=t[0],r=t[1];i!==Number.MAX_SAFE_INTEGER&&r?(a&&c.getAttribute("morphTarget"+e)!==a[i]&&c.setAttribute("morphTarget"+e,a[i]),o&&c.getAttribute("morphNormal"+e)!==o[i]&&c.setAttribute("morphNormal"+e,o[i]),s[e]=r,h+=r):(a&&!0===c.hasAttribute("morphTarget"+e)&&c.deleteAttribute("morphTarget"+e),o&&!0===c.hasAttribute("morphNormal"+e)&&c.deleteAttribute("morphNormal"+e),s[e]=0)}let d=c.morphTargetsRelative?1:1-h;u.getUniforms().setValue(e,"morphTargetBaseInfluence",d),u.getUniforms().setValue(e,"morphTargetInfluences",s)}}}}function sG(e,t,i,r){let s=new WeakMap;function a(e){let t=e.target;t.removeEventListener("dispose",a),i.remove(t.instanceMatrix),null!==t.instanceColor&&i.remove(t.instanceColor)}return{update:function(e){let o=r.render.frame,l=e.geometry,h=t.get(e,l);return s.get(h)!==o&&(t.update(h),s.set(h,o)),e.isInstancedMesh&&(!1===e.hasEventListener("dispose",a)&&e.addEventListener("dispose",a),i.update(e.instanceMatrix,34962),null!==e.instanceColor&&i.update(e.instanceColor,34962)),h},dispose:function(){s=new WeakMap}}}var sH=new ih,sW=new iu,sq=new ip,sX=new r7,sY=[],sQ=[],sK=new Float32Array(16),sZ=new Float32Array(9),sJ=new Float32Array(4);function s$(e,t,i){let r=e[0];if(null==r||r<=0||r>0)return e;let s=t*i,a=sY[s];if(void 0===a&&(a=new Float32Array(s),sY[s]=a),0!==t){r.toArray(a,0);for(let r=1,s=0;r!==t;++r)s+=i,e[r].toArray(a,s)}return a}function s0(e,t){if(e.length!==t.length)return!1;for(let i=0,r=e.length;i<r;i++)if(e[i]!==t[i])return!1;return!0}function s1(e,t){for(let i=0,r=t.length;i<r;i++)e[i]=t[i]}function s2(e,t){let i=sQ[t];void 0===i&&(i=new Int32Array(t),sQ[t]=i);for(let r=0;r!==t;++r)i[r]=e.allocateTextureUnit();return i}function s3(e,t){let i=this.cache;i[0]!==t&&(e.uniform1f(this.addr,t),i[0]=t)}function s4(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y)&&(e.uniform2f(this.addr,t.x,t.y),i[0]=t.x,i[1]=t.y);else{if(s0(i,t))return;e.uniform2fv(this.addr,t),s1(i,t)}}function s5(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z)&&(e.uniform3f(this.addr,t.x,t.y,t.z),i[0]=t.x,i[1]=t.y,i[2]=t.z);else if(void 0!==t.r)(i[0]!==t.r||i[1]!==t.g||i[2]!==t.b)&&(e.uniform3f(this.addr,t.r,t.g,t.b),i[0]=t.r,i[1]=t.g,i[2]=t.b);else{if(s0(i,t))return;e.uniform3fv(this.addr,t),s1(i,t)}}function s6(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z||i[3]!==t.w)&&(e.uniform4f(this.addr,t.x,t.y,t.z,t.w),i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=t.w);else{if(s0(i,t))return;e.uniform4fv(this.addr,t),s1(i,t)}}function s8(e,t){let i=this.cache,r=t.elements;if(void 0===r){if(s0(i,t))return;e.uniformMatrix2fv(this.addr,!1,t),s1(i,t)}else{if(s0(i,r))return;sJ.set(r),e.uniformMatrix2fv(this.addr,!1,sJ),s1(i,r)}}function s9(e,t){let i=this.cache,r=t.elements;if(void 0===r){if(s0(i,t))return;e.uniformMatrix3fv(this.addr,!1,t),s1(i,t)}else{if(s0(i,r))return;sZ.set(r),e.uniformMatrix3fv(this.addr,!1,sZ),s1(i,r)}}function s7(e,t){let i=this.cache,r=t.elements;if(void 0===r){if(s0(i,t))return;e.uniformMatrix4fv(this.addr,!1,t),s1(i,t)}else{if(s0(i,r))return;sK.set(r),e.uniformMatrix4fv(this.addr,!1,sK),s1(i,r)}}function ae(e,t){let i=this.cache;i[0]!==t&&(e.uniform1i(this.addr,t),i[0]=t)}function at(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y)&&(e.uniform2i(this.addr,t.x,t.y),i[0]=t.x,i[1]=t.y);else{if(s0(i,t))return;e.uniform2iv(this.addr,t),s1(i,t)}}function ai(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z)&&(e.uniform3i(this.addr,t.x,t.y,t.z),i[0]=t.x,i[1]=t.y,i[2]=t.z);else{if(s0(i,t))return;e.uniform3iv(this.addr,t),s1(i,t)}}function ar(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z||i[3]!==t.w)&&(e.uniform4i(this.addr,t.x,t.y,t.z,t.w),i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=t.w);else{if(s0(i,t))return;e.uniform4iv(this.addr,t),s1(i,t)}}function as(e,t){let i=this.cache;i[0]!==t&&(e.uniform1ui(this.addr,t),i[0]=t)}function aa(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y)&&(e.uniform2ui(this.addr,t.x,t.y),i[0]=t.x,i[1]=t.y);else{if(s0(i,t))return;e.uniform2uiv(this.addr,t),s1(i,t)}}function an(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z)&&(e.uniform3ui(this.addr,t.x,t.y,t.z),i[0]=t.x,i[1]=t.y,i[2]=t.z);else{if(s0(i,t))return;e.uniform3uiv(this.addr,t),s1(i,t)}}function ao(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z||i[3]!==t.w)&&(e.uniform4ui(this.addr,t.x,t.y,t.z,t.w),i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=t.w);else{if(s0(i,t))return;e.uniform4uiv(this.addr,t),s1(i,t)}}function al(e,t,i){let r=this.cache,s=i.allocateTextureUnit();r[0]!==s&&(e.uniform1i(this.addr,s),r[0]=s),i.setTexture2D(t||sH,s)}function ah(e,t,i){let r=this.cache,s=i.allocateTextureUnit();r[0]!==s&&(e.uniform1i(this.addr,s),r[0]=s),i.setTexture3D(t||sq,s)}function ac(e,t,i){let r=this.cache,s=i.allocateTextureUnit();r[0]!==s&&(e.uniform1i(this.addr,s),r[0]=s),i.setTextureCube(t||sX,s)}function ad(e,t,i){let r=this.cache,s=i.allocateTextureUnit();r[0]!==s&&(e.uniform1i(this.addr,s),r[0]=s),i.setTexture2DArray(t||sW,s)}function au(e,t){e.uniform1fv(this.addr,t)}function ap(e,t){let i=s$(t,this.size,2);e.uniform2fv(this.addr,i)}function af(e,t){let i=s$(t,this.size,3);e.uniform3fv(this.addr,i)}function am(e,t){let i=s$(t,this.size,4);e.uniform4fv(this.addr,i)}function ag(e,t){let i=s$(t,this.size,4);e.uniformMatrix2fv(this.addr,!1,i)}function av(e,t){let i=s$(t,this.size,9);e.uniformMatrix3fv(this.addr,!1,i)}function ay(e,t){let i=s$(t,this.size,16);e.uniformMatrix4fv(this.addr,!1,i)}function ax(e,t){e.uniform1iv(this.addr,t)}function ab(e,t){e.uniform2iv(this.addr,t)}function aw(e,t){e.uniform3iv(this.addr,t)}function aS(e,t){e.uniform4iv(this.addr,t)}function a_(e,t){e.uniform1uiv(this.addr,t)}function aA(e,t){e.uniform2uiv(this.addr,t)}function aM(e,t){e.uniform3uiv(this.addr,t)}function aE(e,t){e.uniform4uiv(this.addr,t)}function aC(e,t,i){let r=this.cache,s=t.length,a=s2(i,s);s0(r,a)||(e.uniform1iv(this.addr,a),s1(r,a));for(let e=0;e!==s;++e)i.setTexture2D(t[e]||sH,a[e])}function aT(e,t,i){let r=this.cache,s=t.length,a=s2(i,s);s0(r,a)||(e.uniform1iv(this.addr,a),s1(r,a));for(let e=0;e!==s;++e)i.setTexture3D(t[e]||sq,a[e])}function aP(e,t,i){let r=this.cache,s=t.length,a=s2(i,s);s0(r,a)||(e.uniform1iv(this.addr,a),s1(r,a));for(let e=0;e!==s;++e)i.setTextureCube(t[e]||sX,a[e])}function aD(e,t,i){let r=this.cache,s=t.length,a=s2(i,s);s0(r,a)||(e.uniform1iv(this.addr,a),s1(r,a));for(let e=0;e!==s;++e)i.setTexture2DArray(t[e]||sW,a[e])}var aI=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.setValue=function(e){switch(e){case 5126:return s3;case 35664:return s4;case 35665:return s5;case 35666:return s6;case 35674:return s8;case 35675:return s9;case 35676:return s7;case 5124:case 35670:return ae;case 35667:case 35671:return at;case 35668:case 35672:return ai;case 35669:case 35673:return ar;case 5125:return as;case 36294:return aa;case 36295:return an;case 36296:return ao;case 35678:case 36198:case 36298:case 36306:case 35682:return al;case 35679:case 36299:case 36307:return ah;case 35680:case 36300:case 36308:case 36293:return ac;case 36289:case 36303:case 36311:case 36292:return ad}}(t.type)}},aO=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.size=t.size,this.setValue=function(e){switch(e){case 5126:return au;case 35664:return ap;case 35665:return af;
3081case 35666:return am;case 35674:return ag;case 35675:return av;case 35676:return ay;case 5124:case 35670:return ax;case 35667:case 35671:return ab;case 35668:case 35672:return aw;case 35669:case 35673:return aS;case 5125:return a_;case 36294:return aA;case 36295:return aM;case 36296:return aE;case 35678:case 36198:case 36298:case 36306:case 35682:return aC;case 35679:case 36299:case 36307:return aT;case 35680:case 36300:case 36308:case 36293:return aP;case 36289:case 36303:case 36311:case 36292:return aD}}(t.type)}},aR=class{constructor(e){this.id=e,this.seq=[],this.map={}}setValue(e,t,i){if(void 0===t)return;let r=this.seq;for(let s=0,a=r.length;s!==a;++s){let a=r[s];a.setValue(e,t[a.id],i)}}},aL=/(\w+)(\])?(\[|\.)?/g;function aB(e,t){e.seq.push(t),e.map[t.id]=t}var az=class{constructor(e,t){this.seq=[],this.map={};let i=e.getProgramParameter(t,35718);for(let r=0;r<i;++r){let i=e.getActiveUniform(t,r),s=e.getUniformLocation(t,i.name);!function(e,t,i){let r=e.name,s=r.length;for(aL.lastIndex=0;;){let a=aL.exec(r),o=aL.lastIndex,l=a[1],h="]"===a[2],c=a[3];if(h&&(l|=0),void 0===c||"["===c&&o+2===s){aB(i,void 0===c?new aI(l,e,t):new aO(l,e,t));break}{let e=i.map[l];void 0===e&&aB(i,e=new aR(l)),i=e}}}(i,s,this)}}setValue(e,t,i,r){let s=this.map[t];void 0!==s&&s.setValue(e,i,r)}setOptional(e,t,i){let r=t[i];void 0!==r&&this.setValue(e,i,r)}static upload(e,t,i,r){for(let s=0,a=t.length;s!==a;++s){let a=t[s],o=i[a.id];!1!==o.needsUpdate&&a.setValue(e,o.value,r)}}static seqWithValue(e,t){let i=[];for(let r=0,s=e.length;r!==s;++r){let s=e[r];s.id in t&&i.push(s)}return i}};function aF(e,t,i){let r=e.createShader(t);return e.shaderSource(r,i),e.compileShader(r),r}var aN=0;function ak(e,t,i){let r=e.getShaderParameter(t,35713),s=e.getShaderInfoLog(t).trim();if(r&&""===s)return"";let a=/ERROR: 0:(\d+)/.exec(s);if(!a)return s;{let r=parseInt(a[1]);return i.toUpperCase()+`
3082
3083`+s+`
3084
3085`+function(e,t){let i=e.split(`
3086`),r=[],s=Math.max(t-6,0),a=Math.min(t+6,i.length);for(let e=s;e<a;e++){let s=e+1;r.push(`${s===t?">":" "} ${s}: ${i[e]}`)}return r.join(`
3087`)}(e.getShaderSource(t),r)}}function aU(e){return""!==e}function aV(e,t){let i=t.numSpotLightShadows+t.numSpotLightMaps-t.numSpotLightShadowsWithMaps;return e.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,i).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,t.numPointLightShadows)}function aj(e,t){return e.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}var aG=/^[ \t]*#include +<([\w\d./]+)>/gm;function aH(e){return e.replace(aG,aW)}function aW(e,t){let i=sd[t];if(void 0===i)throw Error("Can not resolve #include <"+t+">");return aH(i)}var aq=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function aX(e){return e.replace(aq,aY)}function aY(e,t,i,r){let s="";for(let e=parseInt(t);e<parseInt(i);e++)s+=r.replace(/\[\s*i\s*\]/g,"[ "+e+" ]").replace(/UNROLLED_LOOP_INDEX/g,e);return s}function aQ(e){let t="precision "+e.precision+` float;
3088precision `+e.precision+" int;";return"highp"===e.precision?t+=`
3089#define HIGH_PRECISION`:"mediump"===e.precision?t+=`
3090#define MEDIUM_PRECISION`:"lowp"===e.precision&&(t+=`
3091#define LOW_PRECISION`),t}function aK(e,t,i,r){let s,a,o;let l,h,c=e.getContext(),d=i.defines,u=i.vertexShader,p=i.fragmentShader,f=(s="SHADOWMAP_TYPE_BASIC",1===i.shadowMapType?s="SHADOWMAP_TYPE_PCF":2===i.shadowMapType?s="SHADOWMAP_TYPE_PCF_SOFT":3===i.shadowMapType&&(s="SHADOWMAP_TYPE_VSM"),s),m=function(e){let t="ENVMAP_TYPE_CUBE";if(e.envMap)switch(e.envMapMode){case 301:case 302:t="ENVMAP_TYPE_CUBE";break;case 306:t="ENVMAP_TYPE_CUBE_UV"}return t}(i),g=(a="ENVMAP_MODE_REFLECTION",i.envMap&&302===i.envMapMode&&(a="ENVMAP_MODE_REFRACTION"),a),v=function(e){let t="ENVMAP_BLENDING_NONE";if(e.envMap)switch(e.combine){case 0:t="ENVMAP_BLENDING_MULTIPLY";break;case 1:t="ENVMAP_BLENDING_MIX";break;case 2:t="ENVMAP_BLENDING_ADD"}return t}(i),y=function(e){let t=e.envMapCubeUVHeight;if(null===t)return null;let i=Math.log2(t)-2;return{texelWidth:1/(3*Math.max(Math.pow(2,i),112)),texelHeight:1/t,maxMip:i}}
3091(i),x=i.isWebGL2?"":[i.extensionDerivatives||i.envMapCubeUVHeight||i.bumpMap||i.tangentSpaceNormalMap||i.clearcoatNormalMap||i.flatShading||"physical"===i.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(i.extensionFragDepth||i.logarithmicDepthBuffer)&&i.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",i.extensionDrawBuffers&&i.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(i.extensionShaderTextureLOD||i.envMap||i.transmission)&&i.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(aU).join(`
3092`),b=function(e){let t=[];for(let i in e){let r=e[i];!1!==r&&t.push("#define "+i+" "+r)}return t.join(`
3093`)}(d),w=c.createProgram(),S,_,A=i.glslVersion?"#version "+i.glslVersion+`
3094`:"";i.isRawShaderMaterial?((S=[b].filter(aU).join(`
3095`)).length>0&&(S+=`
3096`),(_=[x,b].filter(aU).join(`
3097`)).length>0&&(_+=`
3098`)):(S=[aQ(i),"#define SHADER_NAME "+i.shaderName,b,i.instancing?"#define USE_INSTANCING":"",i.instancingColor?"#define USE_INSTANCING_COLOR":"",i.supportsVertexTextures?"#define VERTEX_TEXTURES":"",i.useFog&&i.fog?"#define USE_FOG":"",i.useFog&&i.fogExp2?"#define FOG_EXP2":"",i.map?"#define USE_MAP":"",i.envMap?"#define USE_ENVMAP":"",i.envMap?"#define "+g:"",i.lightMap?"#define USE_LIGHTMAP":"",i.aoMap?"#define USE_AOMAP":"",i.emissiveMap?"#define USE_EMISSIVEMAP":"",i.bumpMap?"#define USE_BUMPMAP":"",i.normalMap?"#define USE_NORMALMAP":"",i.normalMap&&i.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",i.normalMap&&i.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",i.clearcoatMap?"#define USE_CLEARCOATMAP":"",i.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",i.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",i.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",i.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",i.displacementMap&&i.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",i.specularMap?"#define USE_SPECULARMAP":"",i.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",i.specularColorMap?"#define USE_SPECULARCOLORMAP":"",i.roughnessMap?"#define USE_ROUGHNESSMAP":"",i.metalnessMap?"#define USE_METALNESSMAP":"",i.alphaMap?"#define USE_ALPHAMAP":"",i.transmission?"#define USE_TRANSMISSION":"",i.transmissionMap?"#define USE_TRANSMISSIONMAP":"",i.thicknessMap?"#define USE_THICKNESSMAP":"",i.sheenColorMap?"#define USE_SHEENCOLORMAP":"",i.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",i.vertexTangents?"#define USE_TANGENT":"",i.vertexColors?"#define USE_COLOR":"",i.vertexAlphas?"#define USE_COLOR_ALPHA":"",i.vertexUvs?"#define USE_UV":"",i.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",i.flatShading?"#define FLAT_SHADED":"",i.skinning?"#define USE_SKINNING":"",i.morphTargets?"#define USE_MORPHTARGETS":"",i.morphNormals&&!1===i.flatShading?"#define USE_MORPHNORMALS":"",i.morphColors&&i.isWebGL2?"#define USE_MORPHCOLORS":"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_TEXTURE":"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_TEXTURE_STRIDE "+i.morphTextureStride:"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_COUNT "+i.morphTargetsCount:"",i.doubleSided?"#define DOUBLE_SIDED":"",i.flipSided?"#define FLIP_SIDED":"",i.shadowMapEnabled?"#define USE_SHADOWMAP":"",i.shadowMapEnabled?"#define "+f:"",i.sizeAttenuation?"#define USE_SIZEATTENUATION":"",i.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",i.logarithmicDepthBuffer&&i.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","	attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","	attribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","	attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","	attribute vec4 color;","#elif defined( USE_COLOR )","	attribute vec3 color;","#endif","#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )","	attribute vec3 morphTarget0;","	attribute vec3 morphTarget1;","	attribute vec3 morphTarget2;","	attribute vec3 morphTarget3;","	#ifdef USE_MORPHNORMALS","		attribute vec3 morphNormal0;","		attribute vec3 morphNormal1;","		attribute vec3 morphNormal2;","		attribute vec3 morphNormal3;","	#else","		attribute vec3 morphTarget4;","		attribute vec3 morphTarget5;","		attribute vec3 morphTarget6;","		attribute vec3 morphTarget7;","	#endif","#endif","#ifdef USE_SKINNING","	attribute vec4 skinIndex;","	attribute vec4 skinWeight;","#endif",`
3099`].filter(aU).join(`
3100`),_=[x,aQ(i),"#define SHADER_NAME "+i.shaderName,b,i.useFog&&i.fog?"#define USE_FOG":"",i.useFog&&i.fogExp2?"#define FOG_EXP2":"",i.map?"#define USE_MAP":"",i.matcap?"#define USE_MATCAP":"",i.envMap?"#define USE_ENVMAP":"",i.envMap?"#define "+m:"",i.envMap?"#define "+g:"",i.envMap?"#define "+v:"",
3100y?"#define CUBEUV_TEXEL_WIDTH "+y.texelWidth:"",y?"#define CUBEUV_TEXEL_HEIGHT "+y.texelHeight:"",y?"#define CUBEUV_MAX_MIP "+y.maxMip+".0":"",i.lightMap?"#define USE_LIGHTMAP":"",i.aoMap?"#define USE_AOMAP":"",i.emissiveMap?"#define USE_EMISSIVEMAP":"",i.bumpMap?"#define USE_BUMPMAP":"",i.normalMap?"#define USE_NORMALMAP":"",i.normalMap&&i.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",i.normalMap&&i.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",i.clearcoat?"#define USE_CLEARCOAT":"",i.clearcoatMap?"#define USE_CLEARCOATMAP":"",i.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",i.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",i.iridescence?"#define USE_IRIDESCENCE":"",i.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",i.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",i.specularMap?"#define USE_SPECULARMAP":"",i.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",i.specularColorMap?"#define USE_SPECULARCOLORMAP":"",i.roughnessMap?"#define USE_ROUGHNESSMAP":"",i.metalnessMap?"#define USE_METALNESSMAP":"",i.alphaMap?"#define USE_ALPHAMAP":"",i.alphaTest?"#define USE_ALPHATEST":"",i.sheen?"#define USE_SHEEN":"",i.sheenColorMap?"#define USE_SHEENCOLORMAP":"",i.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",i.transmission?"#define USE_TRANSMISSION":"",i.transmissionMap?"#define USE_TRANSMISSIONMAP":"",i.thicknessMap?"#define USE_THICKNESSMAP":"",i.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",i.vertexTangents?"#define USE_TANGENT":"",i.vertexColors||i.instancingColor?"#define USE_COLOR":"",i.vertexAlphas?"#define USE_COLOR_ALPHA":"",i.vertexUvs?"#define USE_UV":"",i.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",i.gradientMap?"#define USE_GRADIENTMAP":"",i.flatShading?"#define FLAT_SHADED":"",i.doubleSided?"#define DOUBLE_SIDED":"",i.flipSided?"#define FLIP_SIDED":"",i.shadowMapEnabled?"#define USE_SHADOWMAP":"",i.shadowMapEnabled?"#define "+f:"",i.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",i.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",i.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",i.logarithmicDepthBuffer&&i.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==i.toneMapping?"#define TONE_MAPPING":"",0!==i.toneMapping?sd.tonemapping_pars_fragment:"",0!==i.toneMapping?function(e,t){let i;switch(t){case 1:i="Linear";break;case 2:i="Reinhard";break;case 3:i="OptimizedCineon";break;case 4:i="ACESFilmic";break;case 5:i="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",t),i="Linear"}return"vec3 "+e+"( vec3 color ) { return "+i+"ToneMapping( color ); }"}("toneMapping",i.toneMapping):"",i.dithering?"#define DITHERING":"",i.opaque?"#define OPAQUE":"",sd.encodings_pars_fragment,"vec4 linearToOutputTexel( vec4 value ) { return LinearTo"+(o=function(e){switch(e){case 3e3:return["Linear","( value )"];case 3001:return["sRGB","( value )"];default:return console.warn("THREE.WebGLProgram: Unsupported encoding:",e),["Linear","( value )"]}}(i.outputEncoding))[0]+o[1]+"; }",i.useDepthPacking?"#define DEPTH_PACKING "+i.depthPacking:"",`
3101`].filter(aU).join(`
3102`)),u=aj(u=aV(u=aH(u),i),i),p=aj(p=aV(p=aH(p),i),i),u=aX(u),p=aX(p),i.isWebGL2&&!0!==i.isRawShaderMaterial&&(A=`#version 300 es
3103`,S=["precision mediump sampler2DArray;","#define attribute in","#define varying out","#define texture2D texture"].join(`
3104`)+`
3105`+S,_=["#define varying in",i.glslVersion===tR?"":"layout(location = 0) out highp vec4 pc_fragColor;",i.glslVersion===tR?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(`
3106`)+`
3107`+_);let M=A+S+u,E=A+_+p,C=aF(c,35633,M),T=aF(c,35632,E);if(c.attachShader(w,C),c.attachShader(w,T),void 0!==i.index0AttributeName?c.bindAttribLocation(w,0,i.index0AttributeName):!0===i.morphTargets&&c.bindAttribLocation(w,0,"position"),c.linkProgram(w),e.debug.checkSha
3107derErrors){let e=c.getProgramInfoLog(w).trim(),t=c.getShaderInfoLog(C).trim(),i=c.getShaderInfoLog(T).trim(),r=!0,s=!0;if(!1===c.getProgramParameter(w,35714)){r=!1;let t=ak(c,C,"vertex"),i=ak(c,T,"fragment");console.error("THREE.WebGLProgram: Shader Error "+c.getError()+" - VALIDATE_STATUS "+c.getProgramParameter(w,35715)+`
3108
3109Program Info Log: `+e+`
3110`+t+`
3111`+i)}else""!==e?console.warn("THREE.WebGLProgram: Program Info Log:",e):(""===t||""===i)&&(s=!1);s&&(this.diagnostics={runnable:r,programLog:e,vertexShader:{log:t,prefix:S},fragmentShader:{log:i,prefix:_}})}return c.deleteShader(C),c.deleteShader(T),this.getUniforms=function(){return void 0===l&&(l=new az(c,w)),l},this.getAttributes=function(){return void 0===h&&(h=function(e,t){let i={},r=e.getProgramParameter(t,35721);for(let s=0;s<r;s++){let r=e.getActiveAttrib(t,s),a=r.name,o=1;35674===r.type&&(o=2),35675===r.type&&(o=3),35676===r.type&&(o=4),i[a]={type:r.type,location:e.getAttribLocation(t,a),locationSize:o}}return i}(c,w)),h},this.destroy=function(){r.releaseStatesOfProgram(this),c.deleteProgram(w),this.program=void 0},this.name=i.shaderName,this.id=aN++,this.cacheKey=t,this.usedTimes=1,this.program=w,this.vertexShader=C,this.fragmentShader=T,this}var aZ=0,aJ=class{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e){let t=e.vertexShader,i=e.fragmentShader,r=this._getShaderStage(t),s=this._getShaderStage(i),a=this._getShaderCacheForMaterial(e);return!1===a.has(r)&&(a.add(r),r.usedTimes++),!1===a.has(s)&&(a.add(s),s.usedTimes++),this}remove(e){for(let t of this.materialCache.get(e))t.usedTimes--,0===t.usedTimes&&this.shaderCache.delete(t.code);return this.materialCache.delete(e),this}getVertexShaderID(e){return this._getShaderStage(e.vertexShader).id}getFragmentShaderID(e){return this._getShaderStage(e.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){let t=this.materialCache,i=t.get(e);return void 0===i&&(i=new Set,t.set(e,i)),i}_getShaderStage(e){let t=this.shaderCache,i=t.get(e);return void 0===i&&(i=new a$(e),t.set(e,i)),i}},a$=class{constructor(e){this.id=aZ++,this.code=e,this.usedTimes=0}};function a0(e,t,i,r,s,a,o){let l=new i4,h=new aJ,c=[],d=s.isWebGL2,u=s.logarithmicDepthBuffer,p=s.vertexTextures,f=s.precision,m={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};return{getParameters:function(a,l,c,g,v){let y,x,b,w,S=g.fog,_=v.geometry,A=a.isMeshStandardMaterial?g.environment:null,M=(a.isMeshStandardMaterial?i:t).get(a.envMap||A),E=M&&306===M.mapping?M.image.height:null,C=m[a.type];null!==a.precision&&(f=s.getMaxPrecision(a.precision))!==a.precision&&console.warn("THREE.WebGLProgram.getParameters:",a.precision,"not supported, using",f,"instead.");let T=_.morphAttributes.position||_.morphAttributes.normal||_.morphAttributes.color,P=void 0!==T?T.length:0,D=0;if(void 0!==_.morphAttributes.position&&(D=1),void 0!==_.morphAttributes.normal&&(D=2),void 0!==_.morphAttributes.color&&(D=3),C){let e=sp[C];y=e.vertexShader,x=e.fragmentShader}else y=a.vertexShader,x=a.fragmentShader,h.update(a),b=h.getVertexShaderID(a),w=h.getFragmentShaderID(a);let I=e.getRenderTarget(),O=a.alphaTest>0,R=a.clearcoat>0,L=a.iridescence>0;return{isWebGL2:d,shaderID:C,shaderName:a.type,vertexShader:y,fragmentShader:x,defines:a.defines,customVertexShaderID:b,customFragmentShaderID:w,isRawShaderMaterial:!0===a.isRawShaderMaterial,glslVersion:a.glslVersion,precision:f,instancing:!0===v.isInstancedMesh,instancingColor:!0===v.isInstancedMesh&&null!==v.instanceColor,supportsVertexTextures:p,outputEncoding:null===I?e.outputEncoding:!0===I.isXRRenderTarget?I.texture.encoding:3e3,map:!!a.map,matcap:!!a.matcap,envMap:!!M,envMapMode:M&&M.mapping,envMapCubeUVHeight:E,lightMap:!!a.lightMap,aoMap:!!a.aoMap,emissiveMap:!!a.emissiveMap,bumpMap:!!a.bumpMap,normalMap:!!a.normalMap,objectSpaceNormalMap:1===a.normalMapType,tangentSpaceNormalMap:0===a.normalMapType,decodeVideoTexture:!!a.map&&!0===a.map.isVideoTexture&&3001===a.map.encoding,clearcoat:R,clearcoatMap:R&&!!a.clearcoatMap,clearcoatRoughnessMap:R&&!!a.clearcoatRoughnessMap,clearcoatNormalMap:R&&!!a.clearcoatNormalMap,iridescence:L,iridescenceMap:L&&!!a.iridescenceMap,iridescenceThicknessMap:L&&!!a.iridescenceThicknessMap,displacementMap:!!a.displacementMap,roughnessMap:!!a.roughnessMap,metalnessMap:!!a.metalnessMap,specularMap:!!a.specularMap,specularIntensityMap:!!a.specularIntensityMap,specularColorMap:!!a.specularColorMap,opaque:!1===a.transparent&&1===a.blending,alphaMap:!!a.alphaMap,alphaTest:O,gradientMap:!!a.gradientMap,sheen:a.sheen>0,sheenColorMap:!!a.sheenColorMap,sheenRoughnessMap:!!a.sheenRoughnessMap,transmission:a.transmission>0,transmissionMap:!!a.transmissionMap,thicknessMap:!!a.thicknessMap,combine:a.combine,vertexTangents:!!a.normalMap&&!!_.attributes.tangent,vertexColors:a.vertexColors,vertexAlphas:!0===a.vertexColors&&!!_.attributes.color&&4===_.attributes.color.itemSize,vertexUvs:!!a.map||!!a.bumpMap||!!a.normalMap||!!a.specularMap||!!a.alphaMap||!!a.emissiveMap||!!a.roughnessMap||!!a.metalnessMap||!!a.clearcoatMap||!!a.clearcoatRoughnessMap||!!a.clearcoatNormalMap||!!a.iridescenceMap||!!a.iridescenceThicknessMap||!!a.displacementMap||!!a.transmissionMap||!!a.thicknessMap||!!a.specularIntensityMap||!!a.specularColorMap||!!a.sheenColorMap||!!a.sheenRoughnessMap,uvsVertexOnly:!(a.map||a.bumpMap||a.normalMap||a.specularMap||a.alphaMap||a.emissiveMap||a.roughnessMap||a.metalnessMap||a.clearcoatNormalMap||a.iridescenceMap||a.iridescenceThicknessMap||a.transmission>0||a.transmissionMap||a.thicknessMap||a.specularIntensityMap||a.specularColorMap||a.sheen>0||a.sheenColorMap||a.sheenRoughnessMap)&&!!a.displacementMap,fog:!!S,useFog:!0===a.fog,fogExp2:S&&S.isFogExp2,flatShading:!!a.flatShading,sizeAttenuation:a.sizeAttenuation,logarithmicDepthBuffer:u,skinning:!0===v.isSkinnedMesh,morphTargets:void 0!==_.morphAttributes.position,morphNormals:void 0!==_.morphAttributes.normal,morphColors:void 0!==_.morphAttributes.color,morphTargetsCount:P,morphTextureStride:D,numDirLights:l.directional.length,numPointLights:l.point.length,numSpotLights:l.spot.length,numSpotLightMaps:l.spotLightMap.length,numRectAreaLights:l.rectArea.length,numHemiLights:l.hemi.length,numDirLightShadows:l.directionalShadowMap.length,numPointLightShadows:l.pointShadowMap.length,numSpotLightShadows:l.spotShadowMap.length,numSpotLightShadowsWithMaps:l.numSpotLightShadowsWithMaps,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:a.dithering,shadowMapEnabled:e.shadowMap.enabled&&c.length>0,shadowMapType:e.shadowMap.type,toneMapping:a.toneMapped?e.toneMapping:0,physicallyCorrectLights:e.physicallyCorrectLights,premultipliedAlpha:a.premultipliedAlpha,doubleSided:2===a.side,flipSided:1===a.side,useDepthPacking:!!a.depthPacking,depthPacking:a.depthPacking||0,index0AttributeName:a.index0AttributeName,extensionDerivatives:a.extensions&&a.extensions.derivatives,extensionFragDepth:a.extensions&&a.extensions.fragDepth,extensionDrawBuffers:a.extensions&&a.extensions.drawBuffers,extensionShaderTextureLOD:a.extensions&&a.extensions.shaderTextureLOD,rendererExtensionFragDepth:d||r.has("EXT_frag_depth"),rendererExtensionDrawBuffers:d||r.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:d||r.has("EXT_shader_texture_lod"),customProgramCacheKey:a.customProgramCacheKey()}},getProgramCacheKey:function(t){let i=[];if(t.shaderID?i.push(t.shaderID):(i.push(t.customVertexShaderID),i.push(t.customFragmentShaderID)),void 0!==t.defines)for(let e in t.defines)i.push(e),i.push(t.defines[e]);return!1===t.isRawShaderMaterial&&(i.push(t.precision),i.push(t.outputEncoding),i.push(t.envMapMode),i.push(t.envMapCubeUVHeight),i.push(t.combine),i.push(t.vertexUvs),i.push(t.fogExp2),i.push(t.sizeAttenuation),i.push(t.morphTargetsCount),i.push(t.morphAttributeCount),i.push(t.numDirLights),i.push(t.numPointLights),i.push(t.numSpotLights),i.push(t.numSpotLightMaps),i.push(t.numHemiLights),i.push(t.numRectAreaLights),i.push(t.numDirLightShadows),i.push(t.numPointLightShadows),i.push(t.numSpotLightShadows),i.push(t.numSpotLightShadowsWithMaps),i.push(t.shadowMapType),i.push(t.toneMapping),i.push(t.numClippingPlanes),i.push(t.numClipIntersection),i.push(t.depthPacking),l.disableAll(),t.isWebGL2&&l.enable(0),t.supportsVertexTextures&&l.enable(1),t.instancing&&l.enable(2),t.instancingColor&&l.enable(3),t.map&&l.enable(4),t.matcap&&l.enable(5),t.envMap&&l.enable(6),t.lightMap&&l.enable(7),t.aoMap&&l.enable(8),t.emissiveMap&&l.enable(9),t.bumpMap&&l.enable(10),t.normalMap&&l.enable(11),t.objectSpaceNormalMap&&l.enable(12),t.tangentSpaceNormalMap&&l.enable(13),t.clearcoat&&l.enable(14),t.clearcoatMap&&l.enable(15),t.clearcoatRoughnessMap&&l.enable(16),t.clearcoatNormalMap&&l.enable(17),t.iridescence&&l.enable(18),t.iridescenceMap&&l.enable(19),t.iridescenceThicknessMap&&l.enable(20),t.dis
3111placementMap&&l.enable(21),t.specularMap&&l.enable(22),t.roughnessMap&&l.enable(23),t.metalnessMap&&l.enable(24),t.gradientMap&&l.enable(25),t.alphaMap&&l.enable(26),t.alphaTest&&l.enable(27),t.vertexColors&&l.enable(28),t.vertexAlphas&&l.enable(29),t.vertexUvs&&l.enable(30),t.vertexTangents&&l.enable(31),t.uvsVertexOnly&&l.enable(32),i.push(l.mask),l.disableAll(),t.fog&&l.enable(0),t.useFog&&l.enable(1),t.flatShading&&l.enable(2),t.logarithmicDepthBuffer&&l.enable(3),t.skinning&&l.enable(4),t.morphTargets&&l.enable(5),t.morphNormals&&l.enable(6),t.morphColors&&l.enable(7),t.premultipliedAlpha&&l.enable(8),t.shadowMapEnabled&&l.enable(9),t.physicallyCorrectLights&&l.enable(10),t.doubleSided&&l.enable(11),t.flipSided&&l.enable(12),t.useDepthPacking&&l.enable(13),t.dithering&&l.enable(14),t.specularIntensityMap&&l.enable(15),t.specularColorMap&&l.enable(16),t.transmission&&l.enable(17),t.transmissionMap&&l.enable(18),t.thicknessMap&&l.enable(19),t.sheen&&l.enable(20),t.sheenColorMap&&l.enable(21),t.sheenRoughnessMap&&l.enable(22),t.decodeVideoTexture&&l.enable(23),t.opaque&&l.enable(24),i.push(l.mask),i.push(e.outputEncoding)),i.push(t.customProgramCacheKey),i.join()},getUniforms:function(e){let t=m[e.type],i;if(t){let e=sp[t];i=r2.clone(e.uniforms)}else i=e.uniforms;return i},acquireProgram:function(t,i){let r;for(let e=0,t=c.length;e<t;e++){let t=c[e];if(t.cacheKey===i){r=t,++r.usedTimes;break}}return void 0===r&&(r=new aK(e,i,t,a),c.push(r)),r},releaseProgram:function(e){if(0==--e.usedTimes){let t=c.indexOf(e);c[t]=c[c.length-1],c.pop(),e.destroy()}},releaseShaderCache:function(e){h.remove(e)},programs:c,dispose:function(){h.dispose()}}}function a1(){let e=new WeakMap;return{get:function(t){let i=e.get(t);return void 0===i&&(i={},e.set(t,i)),i},remove:function(t){e.delete(t)},update:function(t,i,r){e.get(t)[i]=r},dispose:function(){e=new WeakMap}}}function a2(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.material.id!==t.material.id?e.material.id-t.material.id:e.z!==t.z?e.z-t.z:e.id-t.id}function a3(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?t.z-e.z:e.id-t.id}function a4(){let e=[],t=0,i=[],r=[],s=[];function a(i,r,s,a,o,l){let h=e[t];return void 0===h?(h={id:i.id,object:i,geometry:r,material:s,groupOrder:a,renderOrder:i.renderOrder,z:o,group:l},e[t]=h):(h.id=i.id,h.object=i,h.geometry=r,h.material=s,h.groupOrder=a,h.renderOrder=i.renderOrder,h.z=o,h.group=l),t++,h}return{opaque:i,transmissive:r,transparent:s,init:function(){t=0,i.length=0,r.length=0,s.length=0},push:function(e,t,o,l,h,c){let d=a(e,t,o,l,h,c);o.transmission>0?r.push(d):!0===o.transparent?s.push(d):i.push(d)},unshift:function(e,t,o,l,h,c){let d=a(e,t,o,l,h,c);o.transmission>0?r.unshift(d):!0===o.transparent?s.unshift(d):i.unshift(d)},finish:function(){for(let i=t,r=e.length;i<r;i++){let t=e[i];if(null===t.id)break;t.id=null,t.object=null,t.geometry=null,t.material=null,t.group=null}},sort:function(e,t){i.length>1&&i.sort(e||a2),r.length>1&&r.sort(t||a3),s.length>1&&s.sort(t||a3)}}}function a5(){let e=new WeakMap;return{get:function(t,i){let r=e.get(t),s;return void 0===r?(s=new a4,e.set(t,[s])):i>=r.length?(s=new a4,r.push(s)):s=r[i],s},dispose:function(){e=new WeakMap}}}function a6(){let e={};return{get:function(t){let i;if(void 0!==e[t.id])return e[t.id];switch(t.type){case"DirectionalLight":i={direction:new iv,color:new ii};break;case"SpotLight":i={position:new iv,direction:new iv,color:new ii,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":i={position:new iv,color:new ii,distance:0,decay:0};break;case"HemisphereLight":i={direction:new iv,skyColor:new ii,groundColor:new ii};break;case"RectAreaLight":i={color:new ii,position:new iv,halfWidth:new iv,halfHeight:new iv}}return e[t.id]=i,i}}}var a8=0;function a9(e,t){return(t.castShadow?2:0)-(e.castShadow?2:0)+(t.map?1:0)-(e.map?1:0)}function a7(e,t){let i;let r=new a6,s=(i={},{get:function(e){let t;if(void 0!==i[e.id])return i[e.id];switch(e.type){case"DirectionalLight":case"SpotLight":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new tQ};break;case"PointLight":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new tQ,shadowCameraNear:1,shadowCameraFar:1e3}}return i[e.id]=t,t}}),a={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0};for(let e=0;e<9;e++)a.probe.push(new iv);let o=new iv,l=new iX,h=new iX;return{setup:function(i,o){let l=0,h=0,c=0;for(let e=0;e<9;e++)a.probe[e].set(0,0,0);let d=0,u=0,p=0,f=0,m=0,g=0,v=0,y=0,x=0,b=0;i.sort(a9);let w=!0!==o?Math.PI:1;for(let e=0,t=i.length;e<t;e++){let t=i[e],o=t.color,S=t.intensity,_=t.distance,A=t.shadow&&t.shadow.map?t.shadow.map.texture:null;
3111if(t.isAmbientLight)l+=o.r*S*w,h+=o.g*S*w,c+=o.b*S*w;else if(t.isLightProbe)for(let e=0;e<9;e++)a.probe[e].addScaledVector(t.sh.coefficients[e],S);else if(t.isDirectionalLight){let e=r.get(t);if(e.color.copy(t.color).multiplyScalar(t.intensity*w),t.castShadow){let e=t.shadow,i=s.get(t);i.shadowBias=e.bias,i.shadowNormalBias=e.normalBias,i.shadowRadius=e.radius,i.shadowMapSize=e.mapSize,a.directionalShadow[d]=i,a.directionalShadowMap[d]=A,a.directionalShadowMatrix[d]=t.shadow.matrix,g++}a.directional[d]=e,d++}else if(t.isSpotLight){let e=r.get(t);e.position.setFromMatrixPosition(t.matrixWorld),e.color.copy(o).multiplyScalar(S*w),e.distance=_,e.coneCos=Math.cos(t.angle),e.penumbraCos=Math.cos(t.angle*(1-t.penumbra)),e.decay=t.decay,a.spot[p]=e;let i=t.shadow;if(t.map&&(a.spotLightMap[x]=t.map,x++,i.updateMatrices(t),t.castShadow&&b++),a.spotLightMatrix[p]=i.matrix,t.castShadow){let e=s.get(t);e.shadowBias=i.bias,e.shadowNormalBias=i.normalBias,e.shadowRadius=i.radius,e.shadowMapSize=i.mapSize,a.spotShadow[p]=e,a.spotShadowMap[p]=A,y++}p++}else if(t.isRectAreaLight){let e=r.get(t);e.color.copy(o).multiplyScalar(S),e.halfWidth.set(.5*t.width,0,0),e.halfHeight.set(0,.5*t.height,0),a.rectArea[f]=e,f++}else if(t.isPointLight){let e=r.get(t);if(e.color.copy(t.color).multiplyScalar(t.intensity*w),e.distance=t.distance,e.decay=t.decay,t.castShadow){let e=t.shadow,i=s.get(t);i.shadowBias=e.bias,i.shadowNormalBias=e.normalBias,i.shadowRadius=e.radius,i.shadowMapSize=e.mapSize,i.shadowCameraNear=e.camera.near,i.shadowCameraFar=e.camera.far,a.pointShadow[u]=i,a.pointShadowMap[u]=A,a.pointShadowMatrix[u]=t.shadow.matrix,v++}a.point[u]=e,u++}else if(t.isHemisphereLight){let e=r.get(t);e.skyColor.copy(t.color).multiplyScalar(S*w),e.groundColor.copy(t.groundColor).multiplyScalar(S*w),a.hemi[m]=e,m++}}f>0&&(t.isWebGL2||!0===e.has("OES_texture_float_linear")?(a.rectAreaLTC1=su.LTC_FLOAT_1,a.rectAreaLTC2=su.LTC_FLOAT_2):!0===e.has("OES_texture_half_float_linear")?(a.rectAreaLTC1=su.LTC_HALF_1,a.rectAreaLTC2=su.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),a.ambient[0]=l,a.ambient[1]=h,a.ambient[2]=c;let S=a.hash;(S.directionalLength!==d||S.pointLength!==u||S.spotLength!==p||S.rectAreaLength!==f||S.hemiLength!==m||S.numDirectionalShadows!==g||S.numPointShadows!==v||S.numSpotShadows!==y||S.numSpotMaps!==x)&&(a.directional.length=d,a.spot.length=p,a.rectArea.length=f,a.point.length=u,a.hemi.length=m,a.directionalShadow.length=g,a.directionalShadowMap.length=g,a.pointShadow.length=v,a.pointShadowMap.length=v,a.spotShadow.length=y,a.spotShadowMap.length=y,a.directionalShadowMatrix.length=g,a.pointShadowMatrix.length=v,a.spotLightMatrix.length=y+x-b,a.spotLightMap.length=x,a.numSpotLightShadowsWithMaps=b,S.directionalLength=d,S.pointLength=u,S.spotLength=p,S.rectAreaLength=f,S.hemiLength=m,S.numDirectionalShadows=g,S.numPointShadows=v,S.numSpotShadows=y,S.numSpotMaps=x,a.version=a8++)},setupView:function(e,t){let i=0,r=0,s=0,c=0,d=0,u=t.matrixWorldInverse;for(let t=0,p=e.length;t<p;t++){let p=e[t];if(p.isDirectionalLight){let e=a.directional[i];e.direction.setFromMatrixPosition(p.matrixWorld),o.setFromMatrixPosition(p.target.matrixWorld),e.direction.sub(o),e.direction.transformDirection(u),i++}else if(p.isSpotLight){let e=a.spot[s];e.position.setFromMatrixPosition(p.matrixWorld),e.position.applyMatrix4(u),e.direction.setFromMatrixPosition(p.matrixWorld),o.setFromMatrixPosition(p.target.matrixWorld),e.direction.sub(o),e.direction.transformDirection(u),s++}else if(p.isRectAreaLight){let e=a.rectArea[c];e.position.setFromMatrixPosition(p.matrixWorld),e.position.applyMatrix4(u),h.identity(),l.copy(p.matrixWorld),l.premultiply(u),h.extractRotation(l),e.halfWidth.set(.5*p.width,0,0),e.halfHeight.set(0,.5*p.height,0),e.halfWidth.applyMatrix4(h),e.halfHeight.applyMatrix4(h),c++}else if(p.isPointLight){let e=a.point[r];e.position.setFromMatrixPosition(p.matrixWorld),e.position.applyMatrix4(u),r++}else if(p.isHemisphereLight){let e=a.hemi[d];e.direction.setFromMatrixPosition(p.matrixWorld),e.direction.transformDirection(u),d++}}},state:a}}function ne(e,t){let i=new a7(e,t),r=[],s=[];return{init:function(){r.length=0,s.length=0},state:{lightsArray:r,shadowsArray:s,lights:i},setupLights:function(e){i.setup(r,e)},setupLightsView:function(e){i.setupView(r,e)},pushLight:function(e){r.push(e)},pushShadow:function(e){s.push(e)}}}function nt(e,t){let i=new WeakMap;return{get:function(r,s=0){let a=i.get(r),o;return void 0===a?(o=new ne(e,t),i.set(r,[o])):s>=a.length?(o=new ne(e,t),a.push(o)):o=a[s],o},dispose:function(){i=new WeakMap}}}var ni=class extends rw{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}},nr=class extends rw{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.referencePosition=new iv,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.referencePosition.copy(e.referencePosition),this.nearDistance=e.nearDistance,this.farDistance=e.farDistance,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}},ns=`void main() {
3112	gl_Position = vec4( position, 1.0 );
3113}`,na=`uniform sampler2D shadow_pass;
3114uniform vec2 resolution;
3115uniform float radius;
3116#include <packing>
3117void main() {
3118	const float samples = float( VSM_SAMPLES );
3119	float mean = 0.0;
3120	float squared_mean = 0.0;
3121	float uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );
3122	float uvStart = samples <= 1.0 ? 0.0 : - 1.0;
3123	for ( float i = 0.0; i < samples; i ++ ) {
3124		float uvOffset = uvStart + i * uvStride;
3125		#ifdef HORIZONTAL_PASS
3126			vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );
3127			mean += distribution.x;
3128			squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;
3129		#else
3130			float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );
3131			mean += depth;
3132			squared_mean += depth * depth;
3133		#endif
3134	}
3135	mean = mean / samples;
3136	squared_mean = squared_mean / samples;
3137	float std_dev = sqrt( squared_mean - mean * mean );
3138	gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );
3139}`;function nn(e,t,i){let r=new so,s=new tQ,a=new tQ,o=new ic,l=new ni({depthPacking:3201}),h=new nr,c={},d=i.maxTextureSize,u={0:1,1:0,2:2},p=new r5({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new tQ},radius:{value:4}},vertexShader:ns,fragmentShader:na}),f=p.clone();f.defines.HORIZONTAL_PASS=1;let m=new rz;m.setAttribute("position",new rM(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let g=new rK(m,p),v=this;function y(t,i,r,s,a,o){let d=null,p=!0===r.isPointLight?t.customDistanceMaterial:t.customDepthMaterial;if(void 0!==p)d=p;else if(d=!0===r.isPointLight?h:l,e.localClippingEnabled&&!0===i.clipShadows&&Array.isArray(i.clippingPlanes)&&0!==i.clippingPlanes.length||i.displacementMap&&0!==i.displacementScale||i.alphaMap&&i.alphaTest>0||i.map&&i.alphaTest>0){let e=d.uuid,t=i.uuid,r=c[e];void 0===r&&(r={},c[e]=r);let s=r[t];void 0===s&&(s=d.clone(),r[t]=s),d=s}return d.visible=i.visible,d.wireframe=i.wireframe,3===o?d.side=null!==i.shadowSide?i.shadowSide:i.side:d.side=null!==i.shadowSide?i.shadowSide:u[i.side],d.alphaMap=i.alphaMap,d.alphaTest=i.alphaTest,d.map=i.map,d.clipShadows=i.clipShadows,d.clippingPlanes=i.clippingPlanes,d.clipIntersection=i.clipIntersection,d.displacementMap=i.displacementMap,d.displacementScale=i.displacementScale,d.displacementBias=i.displacementBias,d.wireframeLinewidth=i.wireframeLinewidth,d.linewidth=i.linewidth,!0===r.isPointLight&&!0===d.isMeshDistanceMaterial&&(d.referencePosition.setFromMatrixPosition(r.matrixWorld),d.nearDistance=s,d.farDistance=a),d}this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1,this.render=function(i,l,h){if(!1===v.enabled||!1===v.autoUpdate&&!1===v.needsUpdate||0===i.length)return;let c=e.getRenderTarget(),u=e.getActiveCubeFace(),m=e.getActiveMipmapLevel(),x=e.state;x.setBlending(0),x.buffers.color.setClear(1,1,1,1),x.buffers.depth.setTest(!0),x.setScissorTest(!1);for(let c=0,u=i.length;c<u;c++){let u=i[c],m=u.shadow;if(void 0===m){console.warn("THREE.WebGLShadowMap:",u,"has no shadow.");continue}if(!1===m.autoUpdate&&!1===m.needsUpdate)continue;s.copy(m.mapSize);let v=m.getFrameExtents();if(s.multiply(v),a.copy(m.mapSize),(s.x>d||s.y>d)&&(s.x>d&&(a.x=Math.floor(d/v.x),s.x=a.x*v.x,m.mapSize.x=a.x),s.y>d&&(a.y=Math.floor(d/v.y),s.y=a.y*v.y,m.mapSize.y=a.y)),null===m.map){let e=3!==this.type?{minFilter:1003,magFilter:1003}:{};m.map=new id(s.x,s.y,e),m.map.texture.name=u.name+".shadowMap",m.camera.updateProjectionMatrix()}e.setRenderTarget(m.map),e.clear();let b=m.getViewportCount();for(let i=0;i<b;i++){let s=m.getViewport(i);o.set(a.x*s.x,a.y*s.y,a.x*s.z,a.y*s.w),x.viewport(o),m.updateMatrices(u,i),r=m.getFrustum(),function i(s,a,o,l,h){if(!1===s.visible)return;if(s.layers.test(a.layers)&&(s.isMesh||s.isLine||s.isPoints)&&(s.castShadow||s.receiveShadow&&3===h)&&(!s.frustumCulled||r.intersectsObject(s))){s.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse,s.matrixWorld);let i=t.update(s),r=s.material;if(Array.isArray(r)){let t=i.groups;for(let a=0,c=t.length;a<c;a++){let c=t[a],d=r[c.materialIndex];if(d&&d.visible){let t=y(s,d,l,o.near,o.far,h);e.renderBufferDirect(o,null,i,t,s,c)}}}else if(r.visible){let t=y(s,r,l,o.near,o.far,h);e.renderBufferDirect(o,null,i,t,s,null)}}let c=s.children;for(let e=0,t=c.length;e<t;e++)i(c[e],a,o,l,h)}(l,h,m.camera,u,this.type)}!0!==m.isPointLightShadow&&3===this.type&&function(i,r){let a=t.update(g);p.defines.VSM_SAMPLES!==i.blurSamples&&(p.defines.VSM_SAMPLES=i.blurSamples,f.defines.VSM_SAMPLES=i.blurSamples,p.needsUpdate=!0,f.needsUpdate=!0),null===i.mapPass&&(i.mapPass=new id(s.x,s.y)),p.uniforms.shadow_pass.value=i.map.texture,p.uniforms.resolution.value=i.mapSize,p.uniforms.radius.value=i.radius,e.setRenderTarget(i.mapPass),e.clear(),e.renderBufferDirect(r,null,a,p,g,null),f.uniforms.shadow_pass.value=i.mapPass.texture,f.uniforms.resolution.value=i.mapSize,f.uniforms.radius.value=i.radius,e.setRenderTarget(i.map),e.clear(),e.renderBufferDirect(r,null,a,f,g,null)}(m,h),m.needsUpdate=!1}v.needsUpdate=!1,e.setRenderTarget(c,u,m)}
3139}function no(e,t,i){let r=i.isWebGL2,s=new function(){let t=!1,i=new ic,r=null,s=new ic(0,0,0,0);return{setMask:function(i){r===i||t||(e.colorMask(i,i,i,i),r=i)},setLocked:function(e){t=e},setClear:function(t,r,a,o,l){!0===l&&(t*=o,r*=o,a*=o),i.set(t,r,a,o),!1===s.equals(i)&&(e.clearColor(t,r,a,o),s.copy(i))},reset:function(){t=!1,r=null,s.set(-1,0,0,0)}}},a=new function(){let t=!1,i=null,r=null,s=null;return{setTest:function(e){e?U(2929):V(2929)},setMask:function(r){i===r||t||(e.depthMask(r),i=r)},setFunc:function(t){if(r!==t){switch(t){case 0:e.depthFunc(512);break;case 1:e.depthFunc(519);break;case 2:e.depthFunc(513);break;case 3:default:e.depthFunc(515);break;case 4:e.depthFunc(514);break;case 5:e.depthFunc(518);break;case 6:e.depthFunc(516);break;case 7:e.depthFunc(517)}r=t}},setLocked:function(e){t=e},setClear:function(t){s!==t&&(e.clearDepth(t),s=t)},reset:function(){t=!1,i=null,r=null,s=null}}},o=new function(){let t=!1,i=null,r=null,s=null,a=null,o=null,l=null,h=null,c=null;return{setTest:function(e){t||(e?U(2960):V(2960))},setMask:function(r){i===r||t||(e.stencilMask(r),i=r)},setFunc:function(t,i,o){(r!==t||s!==i||a!==o)&&(e.stencilFunc(t,i,o),r=t,s=i,a=o)},setOp:function(t,i,r){(o!==t||l!==i||h!==r)&&(e.stencilOp(t,i,r),o=t,l=i,h=r)},setLocked:function(e){t=e},setClear:function(t){c!==t&&(e.clearStencil(t),c=t)},reset:function(){t=!1,i=null,r=null,s=null,a=null,o=null,l=null,h=null,c=null}}},l=new WeakMap,h=new WeakMap,c={},d={},u=new WeakMap,p=[],f=null,m=!1,g=null,v=null,y=null,x=null,b=null,w=null,S=null,_=!1,A=null,M=null,E=null,C=null,T=null,P=e.getParameter(35661),D=!1,I=e.getParameter(7938);-1!==I.indexOf("WebGL")?D=parseFloat(/^WebGL (\d)/.exec(I)[1])>=1:-1!==I.indexOf("OpenGL ES")&&(D=parseFloat(/^OpenGL ES (\d)/.exec(I)[1])>=2);let O=null,R={},L=e.getParameter(3088),B=e.getParameter(2978),z=new ic().fromArray(L),F=new ic().fromArray(B);function N(t,i,r){let s=new Uint8Array(4),a=e.createTexture();e.bindTexture(t,a),e.texParameteri(t,10241,9728),e.texParameteri(t,10240,9728);for(let t=0;t<r;t++)e.texImage2D(i+t,0,6408,1,1,0,6408,5121,s);return a}let k={};function U(t){!0!==c[t]&&(e.enable(t),c[t]=!0)}function V(t){!1!==c[t]&&(e.disable(t),c[t]=!1)}k[3553]=N(3553,3553,1),k[34067]=N(34067,34069,6),s.setClear(0,0,0,1),a.setClear(1),o.setClear(0),U(2929),a.setFunc(3),W(!1),q(1),U(2884),H(0);let j={100:32774,101:32778,102:32779};if(r)j[103]=32775,j[104]=32776;else{let e=t.get("EXT_blend_minmax");null!==e&&(j[103]=e.MIN_EXT,j[104]=e.MAX_EXT)}let G={200:0,201:1,202:768,204:770,210:776,208:774,206:772,203:769,205:771,209:775,207:773};function H(t,i,r,s,a,o,l,h){if(0===t){!0===m&&(V(3042),m=!1);return}if(!1===m&&(U(3042),m=!0),5!==t){if(t!==g||h!==_){if((100!==v||100!==b)&&(e.blendEquation(32774),v=100,b=100),h)switch(t){case 1:e.blendFuncSeparate(1,771,1,771);break;case 2:e.blendFunc(1,1);break;case 3:e.blendFuncSeparate(0,769,0,1);break;case 4:e.blendFuncSeparate(0,768,0,770);break;default:console.error("THREE.WebGLState: Invalid blending: ",t)}else switch(t){case 1:e.blendFuncSeparate(770,771,1,771);break;case 2:e.blendFunc(770,1);break;case 3:e.blendFuncSeparate(0,769,0,1);break;case 4:e.blendFunc(0,768);break;default:console.error("THREE.WebGLState: Invalid blending: ",t)}y=null,x=null,w=null,S=null,g=t,_=h}return}a=a||i,o=o||r,l=l||s,(i!==v||a!==b)&&(e.blendEquationSeparate(j[i],j[a]),v=i,b=a),(r!==y||s!==x||o!==w||l!==S)&&(e.blendFuncSeparate(G[r],G[s],G[o],G[l]),y=r,x=s,w=o,S=l),g=t,_=!1}function W(t){A!==t&&(t?e.frontFace(2304):e.frontFace(2305),A=t)}function q(t){0!==t?(U(2884),t!==M&&(1===t?e.cullFace(1029):2===t?e.cullFace(1028):e.cullFace(1032))):V(2884),M=t}function X(t,i,r){t?(U(32823),(C!==i||T!==r)&&(e.polygonOffset(i,r),C=i,T=r)):V(32823)}return{buffers:{color:s,depth:a,stencil:o},enable:U,disable:V,bindFramebuffer:function(t,i){return d[t]!==i&&(e.bindFramebuffer(t,i),d[t]=i,r&&(36009===t&&(d[36160]=i),36160===t&&(d[36009]=i)),!0)},drawBuffers:function(r,s){let a=p,o=!1;if(r){if(void 0===(a=u.get(s))&&(a=[],u.set(s,a)),r.isWebGLMultipleRenderTargets){let e=r.texture;if(a.length!==e.length||36064!==a[0]){for(let t=0,i=e.length;t<i;t++)a[t]=36064+t;a.length=e.length,o=!0}}else 36064!==a[0]&&(a[0]=36064,o=!0)}else 1029!==a[0]&&(a[0]=1029,o=!0);
3139o&&(i.isWebGL2?e.drawBuffers(a):t.get("WEBGL_draw_buffers").drawBuffersWEBGL(a))},useProgram:function(t){return f!==t&&(e.useProgram(t),f=t,!0)},setBlending:H,setMaterial:function(e,t){2===e.side?V(2884):U(2884);let i=1===e.side;t&&(i=!i),W(i),1===e.blending&&!1===e.transparent?H(0):H(e.blending,e.blendEquation,e.blendSrc,e.blendDst,e.blendEquationAlpha,e.blendSrcAlpha,e.blendDstAlpha,e.premultipliedAlpha),a.setFunc(e.depthFunc),a.setTest(e.depthTest),a.setMask(e.depthWrite),s.setMask(e.colorWrite);let r=e.stencilWrite;o.setTest(r),r&&(o.setMask(e.stencilWriteMask),o.setFunc(e.stencilFunc,e.stencilRef,e.stencilFuncMask),o.setOp(e.stencilFail,e.stencilZFail,e.stencilZPass)),X(e.polygonOffset,e.polygonOffsetFactor,e.polygonOffsetUnits),!0===e.alphaToCoverage?U(32926):V(32926)},setFlipSided:W,setCullFace:q,setLineWidth:function(t){t!==E&&(D&&e.lineWidth(t),E=t)},setPolygonOffset:X,setScissorTest:function(e){e?U(3089):V(3089)},activeTexture:function(t){void 0===t&&(t=33984+P-1),O!==t&&(e.activeTexture(t),O=t)},bindTexture:function(t,i,r){void 0===r&&(r=null===O?33984+P-1:O);let s=R[r];void 0===s&&(s={type:void 0,texture:void 0},R[r]=s),(s.type!==t||s.texture!==i)&&(O!==r&&(e.activeTexture(r),O=r),e.bindTexture(t,i||k[t]),s.type=t,s.texture=i)},unbindTexture:function(){let t=R[O];void 0!==t&&void 0!==t.type&&(e.bindTexture(t.type,null),t.type=void 0,t.texture=void 0)},compressedTexImage2D:function(){try{e.compressedTexImage2D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},compressedTexImage3D:function(){try{e.compressedTexImage3D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},texImage2D:function(){try{e.texImage2D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},texImage3D:function(){try{e.texImage3D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},updateUBOMapping:function(t,i){let r=h.get(i);void 0===r&&(r=new WeakMap,h.set(i,r));let s=r.get(t);void 0===s&&(s=e.getUniformBlockIndex(i,t.name),r.set(t,s))},uniformBlockBinding:function(t,i){let r=h.get(i).get(t);l.get(i)!==r&&(e.uniformBlockBinding(i,r,t.__bindingPointIndex),l.set(i,r))},texStorage2D:function(){try{e.texStorage2D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},texStorage3D:function(){try{e.texStorage3D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},texSubImage2D:function(){try{e.texSubImage2D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},texSubImage3D:function(){try{e.texSubImage3D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},compressedTexSubImage2D:function(){try{e.compressedTexSubImage2D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},compressedTexSubImage3D:function(){try{e.compressedTexSubImage3D.apply(e,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},scissor:function(t){!1===z.equals(t)&&(e.scissor(t.x,t.y,t.z,t.w),z.copy(t))},viewport:function(t){!1===F.equals(t)&&(e.viewport(t.x,t.y,t.z,t.w),F.copy(t))},reset:function(){e.disable(3042),e.disable(2884),e.disable(2929),e.disable(32823),e.disable(3089),e.disable(2960),e.disable(32926),e.blendEquation(32774),e.blendFunc(1,0),e.blendFuncSeparate(1,0,1,0),e.colorMask(!0,!0,!0,!0),e.clearColor(0,0,0,0),e.depthMask(!0),e.depthFunc(513),e.clearDepth(1),e.stencilMask(4294967295),e.stencilFunc(519,0,4294967295),e.stencilOp(7680,7680,7680),e.clearStencil(0),e.cullFace(1029),e.frontFace(2305),e.polygonOffset(0,0),e.activeTexture(33984),e.bindFramebuffer(36160,null),!0===r&&(e.bindFramebuffer(36009,null),e.bindFramebuffer(36008,null)),e.useProgram(null),e.lineWidth(1),e.scissor(0,0,e.canvas.width,e.canvas.height),e.viewport(0,0,e.canvas.width,e.canvas.height),c={},O=null,R={},d={},u=new WeakMap,p=[],f=null,m=!1,g=null,v=null,y=null,x=null,b=null,w=null,S=null,_=!1,A=null,M=null,E=null,C=null,T=null,z.set(0,0,e.canvas.width,e.canvas.height),F.set(0,0,e.canvas.width,e.canvas.height),s.reset(),a.reset(),o.reset()}}}function nl(e,t,i,r,s,a,o){let l=s.isWebGL2,h=s.maxTextures,c=s.maxCubemapSize,d=s.maxTextureSize,u=s.maxSamples,p=t.has("WEBGL_multisampled_render_to_texture")?t.get("WEBGL_multisampled_render_to_texture"):null,f=!(typeof navigator>"u")&&/OculusBrowser/g.test(navigator.userAgent),m=new WeakMap,g,v=new WeakMap,y=!1;try{y="u">typeof OffscreenCanvas&&null!==new OffscreenCanvas(1,1).getContext("2d")}catch{}function x(e,t){return y?new OffscreenCanvas(e,t):t1("canvas")}function b(e,t,i,r){let s=1;if((e.width>r||e.height>r)&&(s=r/Math.max(e.width,e.height)),s<1||!0===t){if(!("u">typeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap))return"data"in e&&c
3139onsole.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+e.width+"x"+e.height+")."),e;{let r=t?tW:Math.floor,a=r(s*e.width),o=r(s*e.height);void 0===g&&(g=x(a,o));let l=i?x(a,o):g;return l.width=a,l.height=o,l.getContext("2d").drawImage(e,0,0,a,o),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+e.width+"x"+e.height+") to ("+a+"x"+o+")."),l}}return e}function w(e){return tG(e.width)&&tG(e.height)}function S(e,t){return e.generateMipmaps&&t&&1003!==e.minFilter&&1006!==e.minFilter}function _(t){e.generateMipmap(t)}function A(i,r,s,a,o=!1){if(!1===l)return r;if(null!==i){if(void 0!==e[i])return e[i];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+i+"'")}let h=r;return 6403===r&&(5126===s&&(h=33326),5131===s&&(h=33325),5121===s&&(h=33321)),33319===r&&(5126===s&&(h=33328),5131===s&&(h=33327),5121===s&&(h=33323)),6408===r&&(5126===s&&(h=34836),5131===s&&(h=34842),5121===s&&(h=3001===a&&!1===o?35907:32856),32819===s&&(h=32854),32820===s&&(h=32855)),(33325===h||33326===h||33327===h||33328===h||34842===h||34836===h)&&t.get("EXT_color_buffer_float"),h}function M(e,t,i){return!0===S(e,i)||e.isFramebufferTexture&&1003!==e.minFilter&&1006!==e.minFilter?Math.log2(Math.max(t.width,t.height))+1:void 0!==e.mipmaps&&e.mipmaps.length>0?e.mipmaps.length:e.isCompressedTexture&&Array.isArray(e.image)?t.mipmaps.length:1}function E(e){return 1003===e||1004===e||1005===e?9728:9729}function C(e){let t=e.target;t.removeEventListener("dispose",C),function(e){let t=r.get(e);if(void 0===t.__webglInit)return;let i=e.source,s=v.get(i);if(s){let r=s[t.__cacheKey];r.usedTimes--,0===r.usedTimes&&P(e),0===Object.keys(s).length&&v.delete(i)}r.remove(e)}(t),t.isVideoTexture&&m.delete(t)}function T(t){let i=t.target;i.removeEventListener("dispose",T),function(t){let i=t.texture,s=r.get(t),a=r.get(i);if(void 0!==a.__webglTexture&&(e.deleteTexture(a.__webglTexture),o.memory.textures--),t.depthTexture&&t.depthTexture.dispose(),t.isWebGLCubeRenderTarget)for(let t=0;t<6;t++)e.deleteFramebuffer(s.__webglFramebuffer[t]),s.__webglDepthbuffer&&e.deleteRenderbuffer(s.__webglDepthbuffer[t]);else{if(e.deleteFramebuffer(s.__webglFramebuffer),s.__webglDepthbuffer&&e.deleteRenderbuffer(s.__webglDepthbuffer),s.__webglMultisampledFramebuffer&&e.deleteFramebuffer(s.__webglMultisampledFramebuffer),s.__webglColorRenderbuffer)for(let t=0;t<s.__webglColorRenderbuffer.length;t++)s.__webglColorRenderbuffer[t]&&e.deleteRenderbuffer(s.__webglColorRenderbuffer[t]);s.__webglDepthRenderbuffer&&e.deleteRenderbuffer(s.__webglDepthRenderbuffer)}if(t.isWebGLMultipleRenderTargets)for(let t=0,s=i.length;t<s;t++){let s=r.get(i[t]);s.__webglTexture&&(e.deleteTexture(s.__webglTexture),o.memory.textures--),r.remove(i[t])}r.remove(i),r.remove(t)}(i)}function P(t){let i=r.get(t);e.deleteTexture(i.__webglTexture);let s=t.source,a=v.get(s);delete a[i.__cacheKey],o.memory.textures--}let D=0;function I(e,t){let s,a=r.get(e);if(e.isVideoTexture&&(s=o.render.frame,m.get(e)!==s&&(m.set(e,s),e.update())),!1===e.isRenderTargetTexture&&e.version>0&&a.__version!==e.version){let i=e.image;if(null===i)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(!1===i.complete)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{z(a,e,t);return}}i.bindTexture(3553,a.__webglTexture,33984+t)}let O={1e3:10497,1001:33071,1002:33648},R={1003:9728,1004:9984,1005:9986,1006:9729,1007:9985,1008:9987};function L(i,a,o){if(o?(e.texParameteri(i,10242,O[a.wrapS]),e.texParameteri(i,10243,O[a.wrapT]),(32879===i||35866===i)&&e.texParameteri(i,32882,O[a.wrapR]),e.texParameteri(i,10240,R[a.magFilter]),e.texParameteri(i,10241,R[a.minFilter])):(e.texParameteri(i,10242,33071),e.texParameteri(i,10243,33071),(32879===i||35866===i)&&e.texParameteri(i,32882,33071),(1001!==a.wrapS||1001!==a.wrapT)&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),e.texParameteri(i,10240,E(a.magFilter)),e.texParameteri(i,10241,E(a.minFilter)),1003!==a.minFilter&&1006!==a.minFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")),!0===t.has("EXT_texture_filter_anisotropic")){let o=t.get("EXT_texture_filter_anisotropic");1003!==a.magFilter&&(1005===a.minFilter||1008===a.minFilter)&&(1015!==a.type||!1!==t.has("OES_texture_float_linear"))&&(!1!==l||1016!==a.type||!1!==t.has("OES_texture_half_float_linear"))&&(a.anisotropy>1||r.get(a).__currentAnisotropy)&&(e.texParameterf(i,o.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,s.getMaxAnisotropy())),r.get(a).__currentAnisotropy=a.anisotropy)}}function B(t,i){let r,s=!1;void 0===t.__webglInit&&(t.__webglInit=!0,i.addEventListener("dispose",C));let a=i.source,l=v.get(a);void 0===l&&(l={},v.set(a,l));let h=((r=[]).push(i.wrapS),r.push(i.wrapT),r.push(i.wrapR||0),r.push(i.magFilter),r.push(i.minFilter),r.push(i.anisotropy),r.push(i.internalFormat),r.push(i.format),r.push(i.type),r.push(i.generateMipmaps),r.push(i.premultiplyAlpha),r.push(i.flipY),r.push(i.unpackAlignment),r.push(i.encoding),r.join());if(h!==t.__cacheKey){void 0===l[h]&&(l[h]={texture:e.createTexture(),usedTimes:0},o.memory.textures++,s=!0),l[h].usedTimes++;let r=l[t.__cacheKey];void 0!==r&&(l[t.__cacheKey].usedTimes--,0===r.usedTimes&&P(i)),t.__cacheKey=h,t.__webglTexture=l[h].texture}return s}function z(t,s,o){let h=3553;(s.isDataArrayTexture||s.isCompressedArrayTexture)&&(h=35866),s.isData3DTexture&&(h=32879);let c=B(t,s),u=s.source;i.bindTexture(h,t.__webglTexture,33984+o);let p=r.get(u);if(u.version!==p.__version||!0===c){i.activeTexture(33984+o),e.pixelStorei(37440,s.flipY),e.pixelStorei(37441,s.premultiplyAlpha),e.pixelStorei(3317,s.unpackAlignment),e.pixelStorei(37443,0);let t=!l&&(1001!==s.wrapS||1001!==s.wrapT||1003!==s.minFilter&&1006!==s.minFilter)&&!1===w(s.image),r=b
3139(s.image,t,!1,d),f=w(r=j(s,r))||l,m=a.convert(s.format,s.encoding),g=a.convert(s.type),v=A(s.internalFormat,m,g,s.encoding,s.isVideoTexture);L(h,s,f);let y,x=s.mipmaps,E=l&&!0!==s.isVideoTexture,C=void 0===p.__version||!0===c,T=M(s,r,f);if(s.isDepthTexture)v=6402,l?v=1015===s.type?36012:1014===s.type?33190:1020===s.type?35056:33189:1015===s.type&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),1026===s.format&&6402===v&&1012!==s.type&&1014!==s.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),s.type=1014,g=a.convert(s.type)),1027===s.format&&6402===v&&(v=34041,1020!==s.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),s.type=1020,g=a.convert(s.type))),C&&(E?i.texStorage2D(3553,1,v,r.width,r.height):i.texImage2D(3553,0,v,r.width,r.height,0,m,g,null));else if(s.isDataTexture){if(x.length>0&&f){E&&C&&i.texStorage2D(3553,T,v,x[0].width,x[0].height);for(let e=0,t=x.length;e<t;e++)y=x[e],E?i.texSubImage2D(3553,e,0,0,y.width,y.height,m,g,y.data):i.texImage2D(3553,e,v,y.width,y.height,0,m,g,y.data);s.generateMipmaps=!1}else E?(C&&i.texStorage2D(3553,T,v,r.width,r.height),i.texSubImage2D(3553,0,0,0,r.width,r.height,m,g,r.data)):i.texImage2D(3553,0,v,r.width,r.height,0,m,g,r.data)}else if(s.isCompressedTexture){if(s.isCompressedArrayTexture){E&&C&&i.texStorage3D(35866,T,v,x[0].width,x[0].height,r.depth);for(let e=0,t=x.length;e<t;e++)y=x[e],1023!==s.format?null!==m?E?i.compressedTexSubImage3D(35866,e,0,0,0,y.width,y.height,r.depth,m,y.data,0,0):i.compressedTexImage3D(35866,e,v,y.width,y.height,r.depth,0,y.data,0,0):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):E?i.texSubImage3D(35866,e,0,0,0,y.width,y.height,r.depth,m,g,y.data):i.texImage3D(35866,e,v,y.width,y.height,r.depth,0,m,g,y.data)}else{E&&C&&i.texStorage2D(3553,T,v,x[0].width,x[0].height);for(let e=0,t=x.length;e<t;e++)y=x[e],1023!==s.format?null!==m?E?i.compressedTexSubImage2D(3553,e,0,0,y.width,y.height,m,y.data):i.compressedTexImage2D(3553,e,v,y.width,y.height,0,y.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):E?i.texSubImage2D(3553,e,0,0,y.width,y.height,m,g,y.data):i.texImage2D(3553,e,v,y.width,y.height,0,m,g,y.data)}}else if(s.isDataArrayTexture)E?(C&&i.texStorage3D(35866,T,v,r.width,r.height,r.depth),i.texSubImage3D(35866,0,0,0,0,r.width,r.height,r.depth,m,g,r.data)):i.texImage3D(35866,0,v,r.width,r.height,r.depth,0,m,g,r.data);else if(s.isData3DTexture)E?(C&&i.texStorage3D(32879,T,v,r.width,r.height,r.depth),i.texSubImage3D(32879,0,0,0,0,r.width,r.height,r.depth,m,g,r.data)):i.texImage3D(32879,0,v,r.width,r.height,r.depth,0,m,g,r.data);else if(s.isFramebufferTexture){if(C){if(E)i.texStorage2D(3553,T,v,r.width,r.height);else{let e=r.width,t=r.height;for(let r=0;r<T;r++)i.texImage2D(3553,r,v,e,t,0,m,g,null),e>>=1,t>>=1}}}else if(x.length>0&&f){E&&C&&i.texStorage2D(3553,T,v,x[0].width,x[0].height);for(let e=0,t=x.length;e<t;e++)y=x[e],E?i.texSubImage2D(3553,e,0,0,m,g,y):i.texImage2D(3553,e,v,m,g,y);s.generateMipmaps=!1}else E?(C&&i.texStorage2D(3553,T,v,r.width,r.height),i.texSubImage2D(3553,0,0,0,m,g,r)):i.texImage2D(3553,0,v,m,g,r);S(s,f)&&_(h),p.__version=u.version,s.onUpdate&&s.onUpdate(s)}t.__version=s.version}function F(t,s,o,l,h){let c=a.convert(o.format,o.encoding),d=a.convert(o.type),u=A(o.internalFormat,c,d,o.encoding);r.get(s).__hasExternalTextures||(32879===h||35866===h?i.texImage3D(h,0,u,s.width,s.height,s.depth,0,c,d,null):i.texImage2D(h,0,u,s.width,s.height,0,c,d,null)),i.bindFramebuffer(36160,t),V(s)?p.framebufferTexture2DMultisampleEXT(36160,l,h,r.get(o).__webglTexture,0,U(s)):(3553===h||h>=34069&&h<=34074)&&e.framebufferTexture2D(36160,l,h,r.get(o).__webglTexture,0),i.bindFramebuffer(36160,null)}function N(t,i,r){if(e.bindRenderbuffer(36161,t),i.depthBuffer&&!i.stencilBuffer){let s=33189;if(r||V(i)){let t=i.depthTexture;t&&t.isDepthTexture&&(1015===t.type?s=36012:1014===t.type&&(s=33190));let r=U(i);V(i)?p.renderbufferStorageMultisampleEXT(36161,r,s,i.width,i.height):e.renderbufferStorageMultisample(36161,r,s,i.width,i.height)}else e.renderbufferStorage(36161,s,i.width,i.height);e.framebufferRenderbuffer(36160,36096,36161,t)}else if(i.depthBuffer&&i.stencilBuffer){let s=U(i);r&&!1===V(i)?e.renderbufferStorageMultisample(36161,s,35056,i.width,i.height):V(i)?p.renderbufferStorageMultisampleEXT(36161,s,35056,i.width,i.height):e.renderbufferStorage(36161,34041,i.width,i.height),e.framebufferRenderbuffer(36160,33306,36161,t)}
3139else{let t=!0===i.isWebGLMultipleRenderTargets?i.texture:[i.texture];for(let s=0;s<t.length;s++){let o=t[s],l=a.convert(o.format,o.encoding),h=a.convert(o.type),c=A(o.internalFormat,l,h,o.encoding),d=U(i);r&&!1===V(i)?e.renderbufferStorageMultisample(36161,d,c,i.width,i.height):V(i)?p.renderbufferStorageMultisampleEXT(36161,d,c,i.width,i.height):e.renderbufferStorage(36161,c,i.width,i.height)}}e.bindRenderbuffer(36161,null)}function k(t){let s=r.get(t),a=!0===t.isWebGLCubeRenderTarget;if(t.depthTexture&&!s.__autoAllocateDepthBuffer){if(a)throw Error("target.depthTexture not supported in Cube render targets");!function(t,s){if(s&&s.isWebGLCubeRenderTarget)throw Error("Depth Texture with cube render targets is not supported");if(i.bindFramebuffer(36160,t),!(s.depthTexture&&s.depthTexture.isDepthTexture))throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");r.get(s.depthTexture).__webglTexture&&s.depthTexture.image.width===s.width&&s.depthTexture.image.height===s.height||(s.depthTexture.image.width=s.width,s.depthTexture.image.height=s.height,s.depthTexture.needsUpdate=!0),I(s.depthTexture,0);let a=r.get(s.depthTexture).__webglTexture,o=U(s);if(1026===s.depthTexture.format)V(s)?p.framebufferTexture2DMultisampleEXT(36160,36096,3553,a,0,o):e.framebufferTexture2D(36160,36096,3553,a,0);else if(1027===s.depthTexture.format)V(s)?p.framebufferTexture2DMultisampleEXT(36160,33306,3553,a,0,o):e.framebufferTexture2D(36160,33306,3553,a,0);else throw Error("Unknown depthTexture format")}(s.__webglFramebuffer,t)}else if(a){s.__webglDepthbuffer=[];for(let r=0;r<6;r++)i.bindFramebuffer(36160,s.__webglFramebuffer[r]),s.__webglDepthbuffer[r]=e.createRenderbuffer(),N(s.__webglDepthbuffer[r],t,!1)}else i.bindFramebuffer(36160,s.__webglFramebuffer),s.__webglDepthbuffer=e.createRenderbuffer(),N(s.__webglDepthbuffer,t,!1);i.bindFramebuffer(36160,null)}function U(e){return Math.min(u,e.samples)}function V(e){let i=r.get(e);return l&&e.samples>0&&!0===t.has("WEBGL_multisampled_render_to_texture")&&!1!==i.__useRenderToTexture}function j(e,i){let r=e.encoding,s=e.format,a=e.type;return!0===e.isCompressedTexture||!0===e.isVideoTexture||1035===e.format||3e3!==r&&(3001===r?!1===l?!0===t.has("EXT_sRGB")&&1023===s?(e.format=1035,e.minFilter=1006,e.generateMipmaps=!1):i=is.sRGBToLinear(i):(1023!==s||1009!==a)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture encoding:",r)),i}this.allocateTextureUnit=function(){let e=D;return e>=h&&console.warn("THREE.WebGLTextures: Trying to use "+e+" texture units while this GPU supports only "+h),D+=1,e},this.resetTextureUnits=function(){D=0},this.setTexture2D=I,this.setTexture2DArray=function(e,t){let s=r.get(e);if(e.version>0&&s.__version!==e.version){z(s,e,t);return}i.bindTexture(35866,s.__webglTexture,33984+t)},this.setTexture3D=function(e,t){let s=r.get(e);if(e.version>0&&s.__version!==e.version){z(s,e,t);return}i.bindTexture(32879,s.__webglTexture,33984+t)},this.setTextureCube=function(t,s){let o=r.get(t);if(t.version>0&&o.__version!==t.version){(function(t,s,o){if(6!==s.image.length)return;let h=B(t,s),d=s.source;i.bindTexture(34067,t.__webglTexture,33984+o);let u=r.get(d);if(d.version!==u.__version||!0===h){let t;i.activeTexture(33984+o),e.pixelStorei(37440,s.flipY),e.pixelStorei(37441,s.premultiplyAlpha),e.pixelStorei(3317,s.unpackAlignment),e.pixelStorei(37443,0);let r=s.isCompressedTexture||s.image[0].isCompressedTexture,p=s.image[0]&&s.image[0].isDataTexture,f=[];for(let e=0;e<6;e++)r||p?f[e]=p?s.image[e].image:s.image[e]:f[e]=b(s.image[e],!1,!0,c),f[e]=j(s,f[e]);let m=f[0],g=w(m)||l,v=a.convert(s.format,s.encoding),y=a.convert(s.type),x=A(s.internalFormat,v,y,s.encoding),E=l&&!0!==s.isVideoTexture,C=void 0===u.__version||!0===h,T=M(s,m,g);if(L(34067,s,g),r){E&&C&&i.texStorage2D(34067,T,x,m.width,m.height);for(let e=0;e<6;e++){t=f[e].mipmaps;for(let r=0;r<t.length;r++){let a=t[r];1023!==s.format?null!==v?E?i.compressedTexSubImage2D(34069+e,r,0,0,a.width,a.height,v,a.data):i.compressedTexImage2D(34069+e,r,x,a.width,a.height,0,a.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):E?i.texSubImage2D(34069+e,r,0,0,a.width,a.height,v,y,a.data):i.texImage2D(34069+e,r,x,a.width,a.height,0,v,y,a.data)}}}else{t=s.mipmaps,E&&C&&(t.length>0&&T++,i.texStorage2D(34067,T,x,f[0].width,f[0].height));for(let e=0;e<6;e++)if(p){E?i.texSubImage2D(34069+e,0,0,0,f[e].width,f[e].height,v,y,f[e].data):i.texImage2D(34069+e,0,x,f[e].width,f[e].height,0,v,y,f[e].data);for(let r=0;r<t.length;r++){let s=t[r].image[e].image;E?i.texSubImage2D(34069+e,r+1,0,0,s.width,s.height,v,y,s.data):i.texImage2D(34069+e,r+1,x,s.width,s.height,0,v,y,s.data)}}else{E?i.texSubImage2D(34069+e,0,0,0,v,y,f[e]):i.texImage2D(34069+e,0,x,v,y,f[e]);for(let r=0;r<t.length;r++){let s=t[r];E?i.texSubImage2D(34069+e,r+1,0,0,v,y,s.image[e]):i.texImage2D(34069+e,r+1,x,v,y,s.image[e])}}}
3139S(s,g)&&_(34067),u.__version=d.version,s.onUpdate&&s.onUpdate(s)}t.__version=s.version})(o,t,s);return}i.bindTexture(34067,o.__webglTexture,33984+s)},this.rebindTextures=function(e,t,i){let s=r.get(e);void 0!==t&&F(s.__webglFramebuffer,e,e.texture,36064,3553),void 0!==i&&k(e)},this.setupRenderTarget=function(t){let h=t.texture,c=r.get(t),d=r.get(h);t.addEventListener("dispose",T),!0!==t.isWebGLMultipleRenderTargets&&(void 0===d.__webglTexture&&(d.__webglTexture=e.createTexture()),d.__version=h.version,o.memory.textures++);let u=!0===t.isWebGLCubeRenderTarget,p=!0===t.isWebGLMultipleRenderTargets,f=w(t)||l;if(u){c.__webglFramebuffer=[];for(let t=0;t<6;t++)c.__webglFramebuffer[t]=e.createFramebuffer()}else{if(c.__webglFramebuffer=e.createFramebuffer(),p){if(s.drawBuffers){let i=t.texture;for(let t=0,s=i.length;t<s;t++){let s=r.get(i[t]);void 0===s.__webglTexture&&(s.__webglTexture=e.createTexture(),o.memory.textures++)}}else console.warn("THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.")}if(l&&t.samples>0&&!1===V(t)){let r=p?h:[h];c.__webglMultisampledFramebuffer=e.createFramebuffer(),c.__webglColorRenderbuffer=[],i.bindFramebuffer(36160,c.__webglMultisampledFramebuffer);for(let i=0;i<r.length;i++){let s=r[i];c.__webglColorRenderbuffer[i]=e.createRenderbuffer(),e.bindRenderbuffer(36161,c.__webglColorRenderbuffer[i]);let o=a.convert(s.format,s.encoding),l=a.convert(s.type),h=A(s.internalFormat,o,l,s.encoding,!0===t.isXRRenderTarget),d=U(t);e.renderbufferStorageMultisample(36161,d,h,t.width,t.height),e.framebufferRenderbuffer(36160,36064+i,36161,c.__webglColorRenderbuffer[i])}e.bindRenderbuffer(36161,null),t.depthBuffer&&(c.__webglDepthRenderbuffer=e.createRenderbuffer(),N(c.__webglDepthRenderbuffer,t,!0)),i.bindFramebuffer(36160,null)}}if(u){i.bindTexture(34067,d.__webglTexture),L(34067,h,f);for(let e=0;e<6;e++)F(c.__webglFramebuffer[e],t,h,36064,34069+e);S(h,f)&&_(34067),i.unbindTexture()}else if(p){let e=t.texture;for(let s=0,a=e.length;s<a;s++){let a=e[s],o=r.get(a);i.bindTexture(3553,o.__webglTexture),L(3553,a,f),F(c.__webglFramebuffer,t,a,36064+s,3553),S(a,f)&&_(3553)}i.unbindTexture()}else{let e=3553;(t.isWebGL3DRenderTarget||t.isWebGLArrayRenderTarget)&&(l?e=t.isWebGL3DRenderTarget?32879:35866:console.error("THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.")),i.bindTexture(e,d.__webglTexture),L(e,h,f),F(c.__webglFramebuffer,t,h,36064,e),S(h,f)&&_(e),i.unbindTexture()}t.depthBuffer&&k(t)},this.updateRenderTargetMipmap=function(e){let t=w(e)||l,s=!0===e.isWebGLMultipleRenderTargets?e.texture:[e.texture];for(let a=0,o=s.length;a<o;a++){let o=s[a];if(S(o,t)){let t=e.isWebGLCubeRenderTarget?34067:3553,s=r.get(o).__webglTexture;i.bindTexture(t,s),_(t),i.unbindTexture()}}},this.updateMultisampleRenderTarget=function(t){if(l&&t.samples>0&&!1===V(t)){let s=t.isWebGLMultipleRenderTargets?t.texture:[t.texture],a=t.width,o=t.height,l=16384,h=[],c=t.stencilBuffer?33306:36096,d=r.get(t),u=!0===t.isWebGLMultipleRenderTargets;if(u)for(let t=0;t<s.length;t++)i.bindFramebuffer(36160,d.__webglMultisampledFramebuffer),e.framebufferRenderbuffer(36160,36064+t,3
31396161,null),i.bindFramebuffer(36160,d.__webglFramebuffer),e.framebufferTexture2D(36009,36064+t,3553,null,0);i.bindFramebuffer(36008,d.__webglMultisampledFramebuffer),i.bindFramebuffer(36009,d.__webglFramebuffer);for(let i=0;i<s.length;i++){h.push(36064+i),t.depthBuffer&&h.push(c);let p=void 0!==d.__ignoreDepthValues&&d.__ignoreDepthValues;if(!1===p&&(t.depthBuffer&&(l|=256),t.stencilBuffer&&(l|=1024)),u&&e.framebufferRenderbuffer(36008,36064,36161,d.__webglColorRenderbuffer[i]),!0===p&&(e.invalidateFramebuffer(36008,[c]),e.invalidateFramebuffer(36009,[c])),u){let t=r.get(s[i]).__webglTexture;e.framebufferTexture2D(36009,36064,3553,t,0)}e.blitFramebuffer(0,0,a,o,0,0,a,o,l,9728),f&&e.invalidateFramebuffer(36008,h)}if(i.bindFramebuffer(36008,null),i.bindFramebuffer(36009,null),u)for(let t=0;t<s.length;t++){i.bindFramebuffer(36160,d.__webglMultisampledFramebuffer),e.framebufferRenderbuffer(36160,36064+t,36161,d.__webglColorRenderbuffer[t]);let a=r.get(s[t]).__webglTexture;i.bindFramebuffer(36160,d.__webglFramebuffer),e.framebufferTexture2D(36009,36064+t,3553,a,0)}i.bindFramebuffer(36009,d.__webglMultisampledFramebuffer)}},this.setupDepthRenderbuffer=k,this.setupFrameBufferTexture=F,this.useMultisampledRTT=V}function nh(e,t,i){let r=i.isWebGL2;return{convert:function(i,s=null){let a;if(1009===i)return 5121;if(1017===i)return 32819;if(1018===i)return 32820;if(1010===i)return 5120;if(1011===i)return 5122;if(1012===i)return 5123;if(1013===i)return 5124;if(1014===i)return 5125;if(1015===i)return 5126;if(1016===i)return r?5131:null!==(a=t.get("OES_texture_half_float"))?a.HALF_FLOAT_OES:null;if(1021===i)return 6406;if(1023===i)return 6408;if(1024===i)return 6409;if(1025===i)return 6410;if(1026===i)return 6402;if(1027===i)return 34041;if(1035===i)return null!==(a=t.get("EXT_sRGB"))?a.SRGB_ALPHA_EXT:null;if(1028===i)return 6403;if(1029===i)return 36244;if(1030===i)return 33319;if(1031===i)return 33320;if(1033===i)return 36249;if(33776===i||33777===i||33778===i||33779===i){if(3001===s){if(null===(a=t.get("WEBGL_compressed_texture_s3tc_srgb")))return null;if(33776===i)return a.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(33777===i)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(33778===i)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(33779===i)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else{if(null===(a=t.get("WEBGL_compressed_texture_s3tc")))return null;if(33776===i)return a.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===i)return a.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===i)return a.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===i)return a.COMPRESSED_RGBA_S3TC_DXT5_EXT}}if(35840===i||35841===i||35842===i||35843===i){if(null===(a=t.get("WEBGL_compressed_texture_pvrtc")))return null;if(35840===i)return a.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===i)return a.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===i)return a.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===i)return a.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===i)return null!==(a=t.get("WEBGL_compressed_texture_etc1"))?a.COMPRESSED_RGB_ETC1_WEBGL:null;if(37492===i||37496===i){if(null===(a=t.get("WEBGL_compressed_texture_etc")))return null;if(37492===i)return 3001===s?a.COMPRESSED_SRGB8_ETC2:a.COMPRESSED_RGB8_ETC2;if(37496===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:a.COMPRESSED_RGBA8_ETC2_EAC}if(37808===i||37809===i||37810===i||37811===i||37812===i||37813===i||37814===i||37815===i||37816===i||37817===i||37818===i||37819===i||37820===i||37821===i){if(null===(a=t.get("WEBGL_compressed_texture_astc")))return null;if(37808===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:a.COMPRESSED_RGBA_ASTC_4x4_KHR;if(37809===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:a.COMPRESSED_RGBA_ASTC_5x4_KHR;if(37810===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:a.COMPRESSED_RGBA_ASTC_5x5_KHR;if(37811===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:a.COMPRESSED_RGBA_ASTC_6x5_KHR;if(37812===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:a.COMPRESSED_RGBA_ASTC_6x6_KHR;if(37813===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:a.COMPRESSED_RGBA_ASTC_8x5_KHR;if(37814===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:a.COMPRESSED_RGBA_ASTC_8x6_KHR;if(37815===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:a.COMPRESSED_RGBA_ASTC_8x8_KHR;if(37816===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:a.COMPRESSED_RGBA_ASTC_10x5_KHR;if(37817===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:a.COMPRESSED_RGBA_ASTC_10x6_KHR;if(37818===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:a.COMPRESSED_RGBA_ASTC_10x8_KHR;if(37819===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:a.COMPRESSED_RGBA_ASTC_10x10_KHR;if(37820===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:a.COMPRESSED_RGBA_ASTC_12x10_KHR;if(37821===i)return 3001===s?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:a.COMPRESSED_RGBA_ASTC_12x12_KHR}if(36492===i){if(null===(a=t.get("EXT_texture_compression_bptc")))return null;if(36492===i)return 3001===s?a.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:a.COMPRESSED_RGBA_BPTC_UNORM_EXT}if(36283===i||36284===i||36285===i||36286===i){if(null===(a=t.get("EXT_texture_compression_rgtc")))return null;
3139if(36492===i)return a.COMPRESSED_RED_RGTC1_EXT;if(36284===i)return a.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(36285===i)return a.COMPRESSED_RED_GREEN_RGTC2_EXT;if(36286===i)return a.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}return 1020===i?r?34042:null!==(a=t.get("WEBGL_depth_texture"))?a.UNSIGNED_INT_24_8_WEBGL:null:void 0!==e[i]?e[i]:null}}}var nc=class extends r8{constructor(e=[]){super(),this.isArrayCamera=!0,this.cameras=e}},nd=class extends rl{constructor(){super(),this.isGroup=!0,this.type="Group"}},nu={type:"move"},np=class{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand&&(this._hand=new nd,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return null===this._targetRay&&(this._targetRay=new nd,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new iv,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new iv),this._targetRay}getGripSpace(){return null===this._grip&&(this._grip=new nd,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new iv,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new iv),this._grip}dispatchEvent(e){return null!==this._targetRay&&this._targetRay.dispatchEvent(e),null!==this._grip&&this._grip.dispatchEvent(e),null!==this._hand&&this._hand.dispatchEvent(e),this}connect(e){if(e&&e.hand){let t=this._hand;if(t)for(let i of e.hand.values())this._getHandJoint(t,i)}return this.dispatchEvent({type:"connected",data:e}),this}disconnect(e){return this.dispatchEvent({type:"disconnected",data:e}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this}update(e,t,i){let r=null,s=null,a=null,o=this._targetRay,l=this._grip,h=this._hand;if(e&&"visible-blurred"!==t.session.visibilityState){if(h&&e.hand){for(let r of(a=!0,e.hand.values())){let e=t.getJointPose(r,i),s=this._getHandJoint(h,r);null!==e&&(s.matrix.fromArray(e.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale),s.jointRadius=e.radius),s.visible=null!==e}let r=h.joints["index-finger-tip"],s=h.joints["thumb-tip"],o=r.position.distanceTo(s.position);h.inputState.pinching&&o>.025?(h.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!h.inputState.pinching&&o<=.015&&(h.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else null!==l&&e.gripSpace&&null!==(s=t.getPose(e.gripSpace,i))&&(l.matrix.fromArray(s.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),s.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(s.linearVelocity)):l.hasLinearVelocity=!1,s.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(s.angularVelocity)):l.hasAngularVelocity=!1);null!==o&&(null===(r=t.getPose(e.targetRaySpace,i))&&null!==s&&(r=s),null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(nu)))}return null!==o&&(o.visible=null!==r),null!==l&&(l.visible=null!==s),null!==h&&(h.visible=null!==a),this}_getHandJoint(e,t){if(void 0===e.joints[t.jointName]){let i=new nd;i.matrixAutoUpdate=!1,i.visible=!1,e.joints[t.jointName]=i,e.add(i)}return e.joints[t.jointName]}},nf=class extends ih{constructor(e,t,i,r,s,a,o,l,h,c){if(1026!==(c=void 0!==c?c:1026)&&1027!==c)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===i&&1026===c&&(i=1014),void 0===i&&1027===c&&(i=1020),super(null,r,s,a,o,l,c,i,h),this.isDepthTexture=!0,this.image={width:e,height:t},this.magFilter=void 0!==o?o:1003,this.minFilter=void 0!==l?l:1003,this.flipY=!1,this.generateMipmaps=!1}},nm=class extends tL{constructor(e,t){super();let i=this,r=null,s=1,a=null,o="local-floor",l=1,h=null,c=null,d=null,u=null,p=null,f=null,m=t.getContextAttributes(),g=null,v=null,y=[],x=[],b=new Set,w=new Map,S=new r8;S.layers.enable(1),S.viewport=new ic;let _=new r8;_.layers.enable(2),_.viewport=new ic;let A=[S,_],M=new nc;M.layers.enable(1),M.layers.enable(2);let E=null,C=null;function T(e){let t=x.indexOf(e.inputSource);if(-1===t)return;let i=y[t];void 0!==i&&i.dispatchEvent({type:e.type,data:e.inputSource})}function P(){r.removeEventListener("select",T),r.removeEventListener("selectstart",T),r.removeEventListener("selectend",T),r.removeEventListener("squeeze",T),r.removeEventListener("squeezestart",T),r.removeEventListener("squeezeend",T),r.removeEventListener("end",P),r.removeEventListener("inputsourceschange",D);for(let e=0;e<y.length;e++){let t=x[e];null!==t&&(x[e]=null,y[e].disconnect(t))}E=null,C=null,e.setRenderTarget(g),p=null,u=null,d=null,r=null,v=null,B.stop(),i.isPresenting=!1,i.dispatchEvent({type:"sessionend"})}function D(e){for(let t=0;t<e.removed.length;t++){let i=e.removed[t],r=x.indexOf(i);r>=0&&(x[r]=null,y[r].disconnect(i))}for(let t=0;t<e.added.length;t++){let i=e.added[t],r=x.indexOf(i);if(-1===r){for(let e=0;e<y.length;e++)if(e>=x.length){x.push(i),r=e;break}else if(null===x[e]){x[e]=i,r=e;break}if(-1===r)break}let s=y[r];s&&s.connect(i)}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(e){let t=y[e];return void 0===t&&(t=new np,y[e]=t),t.getTargetRaySpace()},this.getControllerGrip=function(e){let t=y[e];return void 0===t&&(t=new np,y[e]=t),t.getGripSpace()},this.getHand=function(e){let t=y[e];return void 0===t&&(t=new np,y[e]=t),t.getHandSpace()},this.setFramebufferScaleFactor=function(e){s=e,!0===i.isPresenting&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(e){o=e,!0===i.isPresenting&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return h||a},this.setReferenceSpace=function(e){h=e},this.getBaseLayer=function(){return null!==u?u:p},this.getBinding=function(){return d},this.getFrame=function(){return f}
3139,this.getSession=function(){return r},this.setSession=async function(c){if(null!==(r=c)){if(g=e.getRenderTarget(),r.addEventListener("select",T),r.addEventListener("selectstart",T),r.addEventListener("selectend",T),r.addEventListener("squeeze",T),r.addEventListener("squeezestart",T),r.addEventListener("squeezeend",T),r.addEventListener("end",P),r.addEventListener("inputsourceschange",D),!0!==m.xrCompatible&&await t.makeXRCompatible(),void 0===r.renderState.layers||!1===e.capabilities.isWebGL2){let i={antialias:void 0!==r.renderState.layers||m.antialias,alpha:m.alpha,depth:m.depth,stencil:m.stencil,framebufferScaleFactor:s};p=new XRWebGLLayer(r,t,i),r.updateRenderState({baseLayer:p}),v=new id(p.framebufferWidth,p.framebufferHeight,{format:1023,type:1009,encoding:e.outputEncoding,stencilBuffer:m.stencil})}else{let i=null,a=null,o=null;m.depth&&(o=m.stencil?35056:33190,i=m.stencil?1027:1026,a=m.stencil?1020:1014);let l={colorFormat:32856,depthFormat:o,scaleFactor:s};u=(d=new XRWebGLBinding(r,t)).createProjectionLayer(l),r.updateRenderState({layers:[u]}),v=new id(u.textureWidth,u.textureHeight,{format:1023,type:1009,depthTexture:new nf(u.textureWidth,u.textureHeight,a,void 0,void 0,void 0,void 0,void 0,void 0,i),stencilBuffer:m.stencil,encoding:e.outputEncoding,samples:m.antialias?4:0}),e.properties.get(v).__ignoreDepthValues=u.ignoreDepthValues}v.isXRRenderTarget=!0,this.setFoveation(l),h=null,a=await r.requestReferenceSpace(o),B.setContext(r),B.start(),i.isPresenting=!0,i.dispatchEvent({type:"sessionstart"})}};let I=new iv,O=new iv;function R(e,t){null===t?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.copy(e.matrixWorld).invert()}this.updateCamera=function(e){if(null===r)return;M.near=_.near=S.near=e.near,M.far=_.far=S.far=e.far,(E!==M.near||C!==M.far)&&(r.updateRenderState({depthNear:M.near,depthFar:M.far}),E=M.near,C=M.far);let t=e.parent,i=M.cameras;R(M,t);for(let e=0;e<i.length;e++)R(i[e],t);M.matrixWorld.decompose(M.position,M.quaternion,M.scale),e.matrix.copy(M.matrix),e.matrix.decompose(e.position,e.quaternion,e.scale);let s=e.children;for(let e=0,t=s.length;e<t;e++)s[e].updateMatrixWorld(!0);2===i.length?function(e,t,i){I.setFromMatrixPosition(t.matrixWorld),O.setFromMatrixPosition(i.matrixWorld);let r=I.distanceTo(O),s=t.projectionMatrix.elements,a=i.projectionMatrix.elements,o=s[14]/(s[10]-1),l=s[14]/(s[10]+1),h=(s[9]+1)/s[5],c=(s[9]-1)/s[5],d=(s[8]-1)/s[0],u=(a[8]+1)/a[0],p=r/(-d+u),f=-(p*d);t.matrixWorld.decompose(e.position,e.quaternion,e.scale),e.translateX(f),e.translateZ(p),e.matrixWorld.compose(e.position,e.quaternion,e.scale),e.matrixWorldInverse.copy(e.matrixWorld).invert();let m=o+p,g=l+p;e.projectionMatrix.makePerspective(o*d-f,o*u+(r-f),h*l/g*m,c*l/g*m,m,g)}(M,S,_):M.projectionMatrix.copy(S.projectionMatrix)},this.getCamera=function(){return M},this.getFoveation=function(){if(!(null===u&&null===p))return l},this.setFoveation=function(e){l=e,null!==u&&(u.fixedFoveation=e),null!==p&&void 0!==p.fixedFoveation&&(p.fixedFoveation=e)},this.getPlanes=function(){return b};let L=null,B=new sl;B.setAnimationLoop(function(t,r){if(c=r.getViewerPose(h||a),f=r,null!==c){let t=c.views;null!==p&&(e.setRenderTargetFramebuffer(v,p.framebuffer),e.setRenderTarget(v));let i=!1;t.length!==M.cameras.length&&(M.cameras.length=0,i=!0);for(let r=0;r<t.length;r++){let s=t[r],a=null;if(null!==p)a=p.getViewport(s);else{let t=d.getViewSubImage(u,s);a=t.viewport,0===r&&(e.setRenderTargetTextures(v,t.colorTexture,u.ignoreDepthValues?void 0:t.depthStencilTexture),e.setRenderTarget(v))}let o=A[r];void 0===o&&((o=new r8).layers.enable(r),o.viewport=new ic,A[r]=o),o.matrix.fromArray(s.transform.matrix),o.projectionMatrix.fromArray(s.projectionMatrix),o.viewport.set(a.x,a.y,a.width,a.height),0===r&&M.matrix.copy(o.matrix),!0===i&&M.cameras.push(o)}}for(let e=0;e<y.length;e++){let t=x[e],i=y[e];null!==t&&void 0!==i&&i.update(t,r,h||a)}if(L&&L(t,r),r.detectedPlanes){i.dispatchEvent({type:"planesdetected",data:r.detectedPlanes});let e=null;for(let t of b)r.detectedPlanes.has(t)||(null===e&&(e=[]),e.push(t));if(null!==e)for(let t of e)b.delete(t),w.delete(t),i.dispatchEvent({type:"planeremoved",data:t});for(let e of r.detectedPlanes)if(b.has(e)){let t=w.get(e);e.lastChangedTime>t&&(w.set(e,e.lastChangedTime),i.dispatchEvent({type:"planechanged",data:e}))}else b.add(e),w.set(e,r.lastChangedTime),i.dispatchEvent({type:"planeadded",data:e})}f=null}),this.setAnimationLoop=function(e){L=e},this.dispose=function(){}}};function ng(e,t){function i(i,r){let s,a;i.opacity.value=r.opacity,r.color&&i.diffuse.value.copy(r.color),r.emissive&&i.emissive.value.copy(r.emissive).multiplyScalar(r.emissiveIntensity),r.map&&(i.map.value=r.map),r.alphaMap&&(i.alphaMap.value=r.alphaMap),r.bumpMap&&(i.bumpMap.value=r.bumpMap,i.bumpScale.value=r.bumpScale,1===r.side&&(i.bumpScale.value*=-1)),r.displacementMap&&(i.displacementMap.value=r.displacementMap,i.displacementScale.value=r.displacementScale,i.displacementBias.value=r.displacementBias),r.emissiveMap&&(i.emissiveMap.value=r.emissiveMap),r.normalMap&&(i.normalMap.value=r.normalMap,i.normalScale.value.copy(r.normalScale),1===r.side&&i.normalScale.value.negate()),r.specularMap&&(i.specularMap.value=r.specularMap),r.alphaTest>0&&(i.alphaTest.value=r.alphaTest);let o=t.get(r).envMap;if(o&&(i.envMap.value=o,i.flipEnvMap.value=o.isCubeTexture&&!1===o.isRenderTargetTexture?-1:1,i.reflectivity.value=r.reflectivity,i.ior.value=r.
3139ior,i.refractionRatio.value=r.refractionRatio),r.lightMap){i.lightMap.value=r.lightMap;let t=!0!==e.physicallyCorrectLights?Math.PI:1;i.lightMapIntensity.value=r.lightMapIntensity*t}r.aoMap&&(i.aoMap.value=r.aoMap,i.aoMapIntensity.value=r.aoMapIntensity),r.map?s=r.map:r.specularMap?s=r.specularMap:r.displacementMap?s=r.displacementMap:r.normalMap?s=r.normalMap:r.bumpMap?s=r.bumpMap:r.roughnessMap?s=r.roughnessMap:r.metalnessMap?s=r.metalnessMap:r.alphaMap?s=r.alphaMap:r.emissiveMap?s=r.emissiveMap:r.clearcoatMap?s=r.clearcoatMap:r.clearcoatNormalMap?s=r.clearcoatNormalMap:r.clearcoatRoughnessMap?s=r.clearcoatRoughnessMap:r.iridescenceMap?s=r.iridescenceMap:r.iridescenceThicknessMap?s=r.iridescenceThicknessMap:r.specularIntensityMap?s=r.specularIntensityMap:r.specularColorMap?s=r.specularColorMap:r.transmissionMap?s=r.transmissionMap:r.thicknessMap?s=r.thicknessMap:r.sheenColorMap?s=r.sheenColorMap:r.sheenRoughnessMap&&(s=r.sheenRoughnessMap),void 0!==s&&(s.isWebGLRenderTarget&&(s=s.texture),!0===s.matrixAutoUpdate&&s.updateMatrix(),i.uvTransform.value.copy(s.matrix)),r.aoMap?a=r.aoMap:r.lightMap&&(a=r.lightMap),void 0!==a&&(a.isWebGLRenderTarget&&(a=a.texture),!0===a.matrixAutoUpdate&&a.updateMatrix(),i.uv2Transform.value.copy(a.matrix))}return{refreshFogUniforms:function(t,i){i.color.getRGB(t.fogColor.value,r1(e)),i.isFog?(t.fogNear.value=i.near,t.fogFar.value=i.far):i.isFogExp2&&(t.fogDensity.value=i.density)},refreshMaterialUniforms:function(e,r,s,a,o){let l,h;r.isMeshBasicMaterial||r.isMeshLambertMaterial?i(e,r):r.isMeshToonMaterial?(i(e,r),r.gradientMap&&(e.gradientMap.value=r.gradientMap)):r.isMeshPhongMaterial?(i(e,r),e.specular.value.copy(r.specular),e.shininess.value=Math.max(r.shininess,1e-4)):r.isMeshStandardMaterial?(i(e,r),e.roughness.value=r.roughness,e.metalness.value=r.metalness,r.roughnessMap&&(e.roughnessMap.value=r.roughnessMap),r.metalnessMap&&(e.metalnessMap.value=r.metalnessMap),t.get(r).envMap&&(e.envMapIntensity.value=r.envMapIntensity),r.isMeshPhysicalMaterial&&(e.ior.value=r.ior,r.sheen>0&&(e.sheenColor.value.copy(r.sheenColor).multiplyScalar(r.sheen),e.sheenRoughness.value=r.sheenRoughness,r.sheenColorMap&&(e.sheenColorMap.value=r.sheenColorMap),r.sheenRoughnessMap&&(e.sheenRoughnessMap.value=r.sheenRoughnessMap)),r.clearcoat>0&&(e.clearcoat.value=r.clearcoat,e.clearcoatRoughness.value=r.clearcoatRoughness,r.clearcoatMap&&(e.clearcoatMap.value=r.clearcoatMap),r.clearcoatRoughnessMap&&(e.clearcoatRoughnessMap.value=r.clearcoatRoughnessMap),r.clearcoatNormalMap&&(e.clearcoatNormalScale.value.copy(r.clearcoatNormalScale),e.clearcoatNormalMap.value=r.clearcoatNormalMap,1===r.side&&e.clearcoatNormalScale.value.negate())),r.iridescence>0&&(e.iridescence.value=r.iridescence,e.iridescenceIOR.value=r.iridescenceIOR,e.iridescenceThicknessMinimum.value=r.iridescenceThicknessRange[0],e.iridescenceThicknessMaximum.value=r.iridescenceThicknessRange[1],r.iridescenceMap&&(e.iridescenceMap.value=r.iridescenceMap),r.iridescenceThicknessMap&&(e.iridescenceThicknessMap.value=r.iridescenceThicknessMap)),r.transmission>0&&(e.transmission.value=r.transmission,e.transmissionSamplerMap.value=o.texture,e.transmissionSamplerSize.value.set(o.width,o.height),r.transmissionMap&&(e.transmissionMap.value=r.transmissionMap),e.thickness.value=r.thickness,r.thicknessMap&&(e.thicknessMap.value=r.thicknessMap),e.attenuationDistance.value=r.attenuationDistance,e.attenuationColor.value.copy(r.attenuationColor)),e.specularIntensity.value=r.specularIntensity,e.specularColor.value.copy(r.specularColor),r.specularIntensityMap&&(e.specularIntensityMap.value=r.specularIntensityMap),r.specularColorMap&&(e.specularColorMap.value=r.specularColorMap))):r.isMeshMatcapMaterial?(i(e,r),r.matcap&&(e.matcap.value=r.matcap)):r.isMeshDepthMaterial?i(e,r):r.isMeshDistanceMaterial?(i(e,r),e.referencePosition.value.copy(r.referencePosition),e.nearDistance.value=r.nearDistance,e.farDistance.value=r.farDistance):r.isMeshNormalMaterial?i(e,r):r.isLineBasicMaterial?(e.diffuse.value.copy(r.color),e.opacity.value=r.opacity,r.isLineDashedMaterial&&(e.dashSize.value=r.dashSize,e.totalSize.value=r.dashSize
3139+r.gapSize,e.scale.value=r.scale)):r.isPointsMaterial?(e.diffuse.value.copy(r.color),e.opacity.value=r.opacity,e.size.value=r.size*s,e.scale.value=.5*a,r.map&&(e.map.value=r.map),r.alphaMap&&(e.alphaMap.value=r.alphaMap),r.alphaTest>0&&(e.alphaTest.value=r.alphaTest),r.map?l=r.map:r.alphaMap&&(l=r.alphaMap),void 0!==l&&(!0===l.matrixAutoUpdate&&l.updateMatrix(),e.uvTransform.value.copy(l.matrix))):r.isSpriteMaterial?(e.diffuse.value.copy(r.color),e.opacity.value=r.opacity,e.rotation.value=r.rotation,r.map&&(e.map.value=r.map),r.alphaMap&&(e.alphaMap.value=r.alphaMap),r.alphaTest>0&&(e.alphaTest.value=r.alphaTest),r.map?h=r.map:r.alphaMap&&(h=r.alphaMap),void 0!==h&&(!0===h.matrixAutoUpdate&&h.updateMatrix(),e.uvTransform.value.copy(h.matrix))):r.isShadowMaterial?(e.color.value.copy(r.color),e.opacity.value=r.opacity):r.isShaderMaterial&&(r.uniformsNeedUpdate=!1)}}}function nv(e,t,i,r){let s={},a={},o=[],l=i.isWebGL2?e.getParameter(35375):0;function h(e){let t={boundary:0,storage:0};return"number"==typeof e?(t.boundary=4,t.storage=4):e.isVector2?(t.boundary=8,t.storage=8):e.isVector3||e.isColor?(t.boundary=16,t.storage=12):e.isVector4?(t.boundary=16,t.storage=16):e.isMatrix3?(t.boundary=48,t.storage=48):e.isMatrix4?(t.boundary=64,t.storage=64):e.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",e),t}function c(t){let i=t.target;i.removeEventListener("dispose",c);let r=o.indexOf(i.__bindingPointIndex);o.splice(r,1),e.deleteBuffer(s[i.id]),delete s[i.id],delete a[i.id]}return{bind:function(e,t){let i=t.program;r.uniformBlockBinding(e,i)},update:function(i,d){let u,p,f,m,g=s[i.id];void 0===g&&(function(e){let t=e.uniforms,i=0,r=0;for(let e=0,s=t.length;e<s;e++){let s=t[e],a={boundary:0,storage:0},o=Array.isArray(s.value)?s.value:[s.value];for(let e=0,t=o.length;e<t;e++){let t=h(o[e]);a.boundary+=t.boundary,a.storage+=t.storage}if(s.__data=new Float32Array(a.storage/Float32Array.BYTES_PER_ELEMENT),s.__offset=i,e>0){let e=16-(r=i%16);0!==r&&e-a.boundary<0&&(i+=16-r,s.__offset=i)}i+=a.storage}(r=i%16)>0&&(i+=16-r),e.__size=i,e.__cache={}}(i),u=function(){for(let e=0;e<l;e++)if(-1===o.indexOf(e))return o.push(e),e;return console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}(),i.__bindingPointIndex=u,p=e.createBuffer(),f=i.__size,m=i.usage,e.bindBuffer(35345,p),e.bufferData(35345,f,m),e.bindBuffer(35345,null),e.bindBufferBase(35345,u,p),g=p,s[i.id]=g,i.addEventListener("dispose",c));let v=d.program;r.updateUBOMapping(i,v);let y=t.render.frame;a[i.id]!==y&&(function(t){let i=s[t.id],r=t.uniforms,a=t.__cache;e.bindBuffer(35345,i);for(let t=0,i=r.length;t<i;t++){let i=r[t];if(!0===function(e,t,i){let r=e.value;if(void 0===i[t]){if("number"==typeof r)i[t]=r;else{let e=Array.isArray(r)?r:[r],s=[];for(let t=0;t<e.length;t++)s.push(e[t].clone());i[t]=s}return!0}if("number"==typeof r){if(i[t]!==r)return i[t]=r,!0}else{let e=Array.isArray(i[t])?i[t]:[i[t]],s=Array.isArray(r)?r:[r];for(let t=0;t<e.length;t++){let i=e[t];if(!1===i.equals(s[t]))return i.copy(s[t]),!0}}return!1}(i,t,a)){let t=i.__offset,r=Array.isArray(i.value)?i.value:[i.value],s=0;for(let a=0;a<r.length;a++){let o=r[a],l=h(o);"number"==typeof o?(i.__data[0]=o,e.bufferSubData(35345,t+s,i.__data)):o.isMatrix3?(i.__data[0]=o.elements[0],i.__data[1]=o.elements[1],i.__data[2]=o.elements[2],i.__data[3]=o.elements[0],i.__data[4]=o.elements[3],i.__data[5]=o.elements[4],i.__data[6]=o.elements[5],i.__data[7]=o.elements[0],i.__data[8]=o.elements[6],i.__data[9]=o.elements[7],i.__data[10]=o.elements[8],i.__data[11]=o.elements[0]):(o.toArray(i.__data,s),s+=l.storage/Float32Array.BYTES_PER_ELEMENT)}e.bufferSubData(35345,t,i.__data)}}e.bindBuffer(35345,null)}(i),a[i.id]=y)},dispose:function(){for(let t in s)e.deleteBuffer(s[t]);o=[],s={},a={}}}}function ny(e={}){let t,i,r,s,a,o,l,h,c,d,u,p,f,m,g,v,y,x,b,w,S,_,A,M,E;this.isWebGLRenderer=!0;let C=void 0!==e.canvas?e.canvas:((E=t1("canvas")).style.display="block",E),T=void 0!==e.context?e.context:null,P=void 0===e.depth||e.depth,D=void 0===e.stencil||e.stencil,I=void 0!==e.antialias&&e.antialias,O=void 0===e.premultipliedAlpha||e.premultipliedAlpha,R=void 0!==e.preserveDrawingBuffer&&e.preserveDrawingBuffer,L=void 0!==e.powerPreference?e.powerPreference:"default",B=void 0!==e.failIfMajorPerformanceCaveat&&e.failIfMajorPerformanceCaveat,z;z=null!==T?T.getContextAttributes().alpha:void 0!==e.alpha&&e.alpha;let F=null,N=null,k=[],U=[];
3139this.domElement=C,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.outputEncoding=3e3,this.physicallyCorrectLights=!1,this.toneMapping=0,this.toneMappingExposure=1;let V=this,j=!1,G=0,H=0,W=null,q=-1,X=null,Y=new ic,Q=new ic,K=null,Z=C.width,J=C.height,$=1,ee=null,et=null,ei=new ic(0,0,Z,J),er=new ic(0,0,Z,J),es=!1,ea=new so,en=!1,eo=!1,el=null,eh=new iX,ec=new tQ,ed=new iv,eu={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function ep(){return null===W?$:1}let ef=T;function em(e,t){for(let i=0;i<e.length;i++){let r=e[i],s=C.getContext(r,t);if(null!==s)return s}return null}try{if("setAttribute"in C&&C.setAttribute("data-engine","three.js r149"),C.addEventListener("webglcontextlost",ey,!1),C.addEventListener("webglcontextrestored",ex,!1),C.addEventListener("webglcontextcreationerror",eb,!1),null===ef){let e=["webgl2","webgl","experimental-webgl"];if(!0===V.isWebGL1Renderer&&e.shift(),ef=em(e,{alpha:!0,depth:P,stencil:D,antialias:I,premultipliedAlpha:O,preserveDrawingBuffer:R,powerPreference:L,failIfMajorPerformanceCaveat:B}),null===ef)throw em(e)?Error("Error creating WebGL context with your selected attributes."):Error("Error creating WebGL context.")}void 0===ef.getShaderPrecisionFormat&&(ef.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(e){throw console.error("THREE.WebGLRenderer: "+e.message),e}function eg(){t=new sz(ef),i=new sy(ef,t,e),t.init(i),_=new nh(ef,t,i),r=new no(ef,t,i),s=new sk,a=new a1,o=new nl(ef,t,r,a,i,_,s),l=new sb(V),h=new sB(V),c=new sh(ef,i),A=new sg(ef,t,c,i),d=new sF(ef,c,s,A),u=new sG(ef,d,c,s),b=new sj(ef,i,o),v=new sx(a),p=new a0(V,l,h,t,i,A,v),f=new ng(V,a),m=new a5,g=new nt(t,i),x=new sm(V,l,h,r,u,z,O),y=new nn(V,u,i),M=new nv(ef,s,i,r),w=new sv(ef,t,s,i),S=new sN(ef,t,s,i),s.programs=p.programs,V.capabilities=i,V.extensions=t,V.properties=a,V.renderLists=m,V.shadowMap=y,V.state=r,V.info=s}eg();let ev=new nm(V,ef);function ey(e){e.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),j=!0}function ex(){console.log("THREE.WebGLRenderer: Context Restored."),j=!1;let e=s.autoReset,t=y.enabled,i=y.autoUpdate,r=y.needsUpdate,a=y.type;eg(),s.autoReset=e,y.enabled=t,y.autoUpdate=i,y.needsUpdate=r,y.type=a}function eb(e){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",e.statusMessage)}function ew(e){let t,i=e.target;i.removeEventListener("dispose",ew),void 0!==(t=a.get(i).programs)&&(t.forEach(function(e){p.releaseProgram(e)}),i.isShaderMaterial&&p.releaseShaderCache(i)),a.remove(i)}this.xr=ev,this.getContext=function(){return ef},this.getContextAttributes=function(){return ef.getContextAttributes()},this.forceContextLoss=function(){let e=t.get("WEBGL_lose_context");e&&e.loseContext()},this.forceContextRestore=function(){let e=t.get("WEBGL_lose_context");e&&e.restoreContext()},this.getPixelRatio=function(){return $},this.setPixelRatio=function(e){void 0!==e&&($=e,this.setSize(Z,J,!1))},this.getSize=function(e){return e.set(Z,J)},this.setSize=function(e,t,i){if(ev.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}Z=e,J=t,C.width=Math.floor(e*$),C.height=Math.floor(t*$),!1!==i&&(C.style.width=e+"px",C.style.height=t+"px"),this.setViewport(0,0,e,t)},this.getDrawingBufferSize=function(e){return e.set(Z*$,J*$).floor()},this.setDrawingBufferSize=function(e,t,i){Z=e,J=t,$=i,C.width=Math.floor(e*i),C.height=Math.floor(t*i),this.setViewport(0,0,e,t)},this.getCurrentViewport=function(e){return e.copy(Y)},this.getViewport=function(e){return e.copy(ei)},this.setViewport=function(e,t,i,s){e.isVector4?ei.set(e.x,e.y,e.z,e.w):ei.set(e,t,i,s),r.viewport(Y.copy(ei).multiplyScalar($).floor())},this.getScissor=function(e){return e.copy(er)},this.setScissor=function(e,t,i,s){e.isVector4?er.set(e.x,e.y,e.z,e.w):er.set(e,t,i,s),r.scissor(Q.copy(er).multiplyScalar($).floor())},this.getScissorTest=function(){return es},this.setScissorTest=function(e){r.setScissorTest(es=e)},this.setOpaqueSort=function(e){ee=e},this.setTransparentSort=function(e){et=e},this.getClearColor=function(e){return e.copy(x.getClearColor())},this.setClearColor=function(){x.setClearColor.apply(x,arguments)},this.getClearAlpha=function(){return x.getClearAlpha()},this.setClearAlpha=function(){x.setClearAlpha.apply(x,arguments)},this.clear=function(e=!0,t=!0,i=!0){let r=0;e&&(r|=16384),t&&(r|=256),i&&(r|=1024),ef.clear(r)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){C.removeEventListener("webglcontextlost",ey,!1),C.removeEventListener("webglcontextrestored",ex,!1),C.removeEventListener("webglcontextcreationerror",eb,!1),m.dispose(),g.dispose(),a.dispose(),l.dispose(),h.dispose(),u.dispose(),A.dispose(),M.dispose(),p.dispose(),ev.dispose(),ev.removeEventListener("sessionstart",e_),ev.removeEventListener("sessionend",eA),el&&(el.dispose(),el=null),eM.stop()},this.renderBufferDirect=function(e,t,s,u,p,m){null===t&&(t=eu);let g=p.isMesh&&0>p.matrixWorld.determinant(),y=function(e,t,s,c,d){var u;!0!==t.isScene&&(t=eu),o.resetTextureUnits();let p=t.fog,m=c.isMeshStandardMaterial?t.environment:null,g=null===W?V.outputEncoding:!0===W.isXRRenderTarget?W.texture.encoding:3e3,y=(c.isMeshStandardMaterial?h:l).get(c.envMap||m),x=!0===c.vertexColors&&!!s.attributes.color&&4===s.attributes.color.itemSize,w=!!c.normalMap&&!!s.attributes.tangent,S=!!s.morphAttributes.position,_=!!s.morphAttributes.normal,A=!!s.morphAttributes.color,E=c.toneMapped?V.toneMapping:0,C=s.morphAttributes.position||s.morphAttributes.normal||s.morphAttributes.color,T=void 0!==C?C.length:0,P=a.get(c),D=N.state.lights;if(!0===en&&(!0===eo||e!==X)){let t=e===X&&c.id===q;v.setState(c,e,t)}let I=!1;c.version===P.__version?(P.needsLights&&P.lightsStateVersion!==D.state.ver
3139sion||P.outputEncoding!==g||d.isInstancedMesh&&!1===P.instancing||!d.isInstancedMesh&&!0===P.instancing||d.isSkinnedMesh&&!1===P.skinning||!d.isSkinnedMesh&&!0===P.skinning||P.envMap!==y||!0===c.fog&&P.fog!==p||void 0!==P.numClippingPlanes&&(P.numClippingPlanes!==v.numPlanes||P.numIntersection!==v.numIntersection)||P.vertexAlphas!==x||P.vertexTangents!==w||P.morphTargets!==S||P.morphNormals!==_||P.morphColors!==A||P.toneMapping!==E||!0===i.isWebGL2&&P.morphTargetsCount!==T)&&(I=!0):(I=!0,P.__version=c.version);let O=P.currentProgram;!0===I&&(O=eT(c,t,d));let R=!1,L=!1,B=!1,z=O.getUniforms(),F=P.uniforms;if(r.useProgram(O.program)&&(R=!0,L=!0,B=!0),c.id!==q&&(q=c.id,L=!0),R||X!==e){if(z.setValue(ef,"projectionMatrix",e.projectionMatrix),i.logarithmicDepthBuffer&&z.setValue(ef,"logDepthBufFC",2/(Math.log(e.far+1)/Math.LN2)),X!==e&&(X=e,L=!0,B=!0),c.isShaderMaterial||c.isMeshPhongMaterial||c.isMeshToonMaterial||c.isMeshStandardMaterial||c.envMap){let t=z.map.cameraPosition;void 0!==t&&t.setValue(ef,ed.setFromMatrixPosition(e.matrixWorld))}(c.isMeshPhongMaterial||c.isMeshToonMaterial||c.isMeshLambertMaterial||c.isMeshBasicMaterial||c.isMeshStandardMaterial||c.isShaderMaterial)&&z.setValue(ef,"isOrthographic",!0===e.isOrthographicCamera),(c.isMeshPhongMaterial||c.isMeshToonMaterial||c.isMeshLambertMaterial||c.isMeshBasicMaterial||c.isMeshStandardMaterial||c.isShaderMaterial||c.isShadowMaterial||d.isSkinnedMesh)&&z.setValue(ef,"viewMatrix",e.matrixWorldInverse)}if(d.isSkinnedMesh){z.setOptional(ef,d,"bindMatrix"),z.setOptional(ef,d,"bindMatrixInverse");let e=d.skeleton;e&&(i.floatVertexTextures?(null===e.boneTexture&&e.computeBoneTexture(),z.setValue(ef,"boneTexture",e.boneTexture,o),z.setValue(ef,"boneTextureSize",e.boneTextureSize)):console.warn("THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required."))}let k=s.morphAttributes;if((void 0!==k.position||void 0!==k.normal||void 0!==k.color&&!0===i.isWebGL2)&&b.update(d,s,c,O),(L||P.receiveShadow!==d.receiveShadow)&&(P.receiveShadow=d.receiveShadow,z.setValue(ef,"receiveShadow",d.receiveShadow)),c.isMeshGouraudMaterial&&null!==c.envMap&&(F.envMap.value=y,F.flipEnvMap.value=y.isCubeTexture&&!1===y.isRenderTargetTexture?-1:1),L&&(z.setValue(ef,"toneMappingExposure",V.toneMappingExposure),P.needsLights&&(u=B,F.ambientLightColor.needsUpdate=u,F.lightProbe.needsUpdate=u,F.directionalLights.needsUpdate=u,F.directionalLightShadows.needsUpdate=u,F.pointLights.needsUpdate=u,F.pointLightShadows.needsUpdate=u,F.spotLights.needsUpdate=u,F.spotLightShadows.needsUpdate=u,F.rectAreaLights.needsUpdate=u,F.hemisphereLights.needsUpdate=u),p&&!0===c.fog&&f.refreshFogUniforms(F,p),f.refreshMaterialUniforms(F,c,$,J,el),az.upload(ef,P.uniformsList,F,o)),c.isShaderMaterial&&!0===c.uniformsNeedUpdate&&(az.upload(ef,P.uniformsList,F,o),c.uniformsNeedUpdate=!1),c.isSpriteMaterial&&z.setValue(ef,"center",d.center),z.setValue(ef,"modelViewMatrix",d.modelViewMatrix),z.setValue(ef,"normalMatrix",d.normalMatrix),z.setValue(ef,"modelMatrix",d.matrixWorld),d.previousModelViewMatrix&&z.setValue(ef,"previousModelViewMatrix",d.previousModelViewMatrix),e.previousProjectionMatrix&&z.setValue(ef,"previousProjectionMatrix",e.previousProjectionMatrix),c.isShaderMaterial||c.isRawShaderMaterial){let e=c.uniformsGroups;for(let t=0,r=e.length;t<r;t++)if(i.isWebGL2){let i=e[t];M.update(i,O),M.bind(i,O)}else console.warn("THREE.WebGLRenderer: Uniform Buffer Objects can only be used with WebGL 2.")}return O}(e,t,s,u,p);r.setMaterial(u,g);let x=s.index,_=1;!0===u.wireframe&&(x=d.getWireframeAttribute(s),_=2);let E=s.drawRange,C=s.attributes.position,T=E.start*_,P=(E.start+E.count)*_;null!==m&&(T=Math.max(T,m.start*_),P=Math.min(P,(m.start+m.count)*_)),null!==x?(T=Math.max(T,0),P=Math.min(P,x.count)):null!=C&&(T=Math.max(T,0),P=Math.min(P,C.count));let D=P-T;if(D<0||D===1/0)return;A.setup(p,u,y,s,x);let I,O=w;if(null!==x&&(I=c.get(x),(O=S).setIndex(I)),p.isMesh)!0===u.wireframe?(r.setLineWidth(u.wireframeLinewidth*ep()),O.setMode(1)):O.setMode(4);
3139else if(p.isLine){let e=u.linewidth;void 0===e&&(e=1),r.setLineWidth(e*ep()),p.isLineSegments?O.setMode(1):p.isLineLoop?O.setMode(2):O.setMode(3)}else p.isPoints?O.setMode(0):p.isSprite&&O.setMode(4);if(p.isInstancedMesh)O.renderInstances(T,D,p.count);else if(s.isInstancedBufferGeometry){let e=void 0!==s._maxInstanceCount?s._maxInstanceCount:1/0,t=Math.min(s.instanceCount,e);O.renderInstances(T,D,t)}else O.render(T,D)},this.compile=function(e,t){function i(e,t,i){!0===e.transparent&&2===e.side&&!1===e.forceSinglePass?(e.side=1,e.needsUpdate=!0,eT(e,t,i),e.side=0,e.needsUpdate=!0,eT(e,t,i),e.side=2):eT(e,t,i)}(N=g.get(e)).init(),U.push(N),e.traverseVisible(function(e){e.isLight&&e.layers.test(t.layers)&&(N.pushLight(e),e.castShadow&&N.pushShadow(e))}),N.setupLights(V.physicallyCorrectLights),e.traverse(function(t){let r=t.material;if(r){if(Array.isArray(r))for(let s=0;s<r.length;s++)i(r[s],e,t);else i(r,e,t)}}),U.pop(),N=null};let eS=null;function e_(){eM.stop()}function eA(){eM.start()}let eM=new sl;function eE(e,s,a,l){let h,c,d,u=e.opaque,p=e.transmissive,f=e.transparent;N.setupLightsView(a),!0===en&&v.setGlobalState(V.clippingPlanes,a),p.length>0&&(h=i.isWebGL2,null===el&&(el=new id(1,1,{generateMipmaps:!0,type:t.has("EXT_color_buffer_half_float")?1016:1009,minFilter:1008,samples:h&&!0===I?4:0})),V.getDrawingBufferSize(ec),h?el.setSize(ec.x,ec.y):el.setSize(tW(ec.x),tW(ec.y)),c=V.getRenderTarget(),V.setRenderTarget(el),V.clear(),d=V.toneMapping,V.toneMapping=0,eC(u,s,a),V.toneMapping=d,o.updateMultisampleRenderTarget(el),o.updateRenderTargetMipmap(el),V.setRenderTarget(c)),l&&r.viewport(Y.copy(l)),u.length>0&&eC(u,s,a),p.length>0&&eC(p,s,a),f.length>0&&eC(f,s,a),r.buffers.depth.setTest(!0),r.buffers.depth.setMask(!0),r.buffers.color.setMask(!0),r.setPolygonOffset(!1)}function eC(e,t,i){let r=!0===t.isScene?t.overrideMaterial:null;for(let s=0,a=e.length;s<a;s++){let a=e[s],o=a.object,l=a.geometry,h=null===r?a.material:r,c=a.group;o.layers.test(i.layers)&&(o.onBeforeRender(V,t,i,l,h,c),o.modelViewMatrix.multiplyMatrices(i.matrixWorldInverse,o.matrixWorld),o.normalMatrix.getNormalMatrix(o.modelViewMatrix),h.onBeforeRender(V,t,i,l,o,c),!0===h.transparent&&2===h.side&&!1===h.forceSinglePass?(h.side=1,h.needsUpdate=!0,V.renderBufferDirect(i,t,l,h,o,c),h.side=0,h.needsUpdate=!0,V.renderBufferDirect(i,t,l,h,o,c),h.side=2):V.renderBufferDirect(i,t,l,h,o,c),o.onAfterRender(V,t,i,l,h,c))}}function eT(e,t,i){!0!==t.isScene&&(t=eu);let r=a.get(e),s=N.state.lights,o=N.state.shadowsArray,c=s.state.version,d=p.getParameters(e,s.state,o,t,i),u=p.getProgramCacheKey(d),f=r.programs;r.environment=e.isMeshStandardMaterial?t.environment:null,r.fog=t.fog,r.envMap=(e.isMeshStandardMaterial?h:l).get(e.envMap||r.environment),void 0===f&&(e.addEventListener("dispose",ew),f=new Map,r.programs=f);let m=f.get(u);if(void 0!==m){if(r.currentProgram===m&&r.lightsStateVersion===c)return eP(e,d),m}else d.uniforms=p.getUniforms(e),e.onBuild(i,d,V),e.onBeforeCompile(d,V),m=p.acquireProgram(d,u),f.set(u,m),r.uniforms=d.uniforms;let g=r.uniforms;(e.isShaderMaterial||e.isRawShaderMaterial)&&!0!==e.clipping||(g.clippingPlanes=v.uniform),eP(e,d),r.needsLights=e.isMeshLambertMaterial||e.isMeshToonMaterial||e.isMeshPhongMaterial||e.isMeshStandardMaterial||e.isShadowMaterial||e.isShaderMaterial&&!0===e.lights,r.lightsStateVersion=c,r.needsLights&&(g.ambientLightColor.value=s.state.ambient,g.lightProbe.value=s.state.probe,g.directionalLights.value=s.state.directional,g.directionalLightShadows.value=s.state.directionalShadow,g.spotLights.value=s.state.spot,g.spotLightShadows.value=s.state.spotShadow,g.rectAreaLights.value=s.state.rectArea,g.ltc_1.value=s.state.rectAreaLTC1,g.ltc_2.value=s.state.rectAreaLTC2,g.pointLights.value=s.state.point,g.pointLightShadows.value=s.state.pointShadow,g.hemisphereLights.value=s.state.hemi,g.directionalShadowMap.value=s.state.directionalShadowMap,g.directionalShadowMatrix.value=s.state.directionalShadowMatrix,g.spotShadowMap.value=s.state.spotShadowMap,g.spotLightMatrix.value=s.state.spotLightMatrix,g.spotLightMap.value=s.state.spotLightMap,g.pointShadowMap.value=s.state.pointShadowMap,g.pointShadowMatrix.value=s.state.pointShadowMatrix);let y=m.getUniforms(),x=az.seqWithValue(y.seq,g);return r.currentProgram=m,r.uniformsList=x,m}function eP(e,t){let i=a.get(e);i.outputEncoding=t.outputEncoding,i.instancing=t.instancing,i.skinning=t.skinning,i.morphTargets=t.morphTargets,i.morphNormals=t.morphNormals,i.morphColors=t.morphColors,i.morphTargetsCount=t.morphTargetsCount,i.numClippingPlanes=t.numClippingPlanes,i.numIntersection=t.numClipIntersection,i.vertexAlphas=t.vertexAlphas,i.vertexTangents=t.vertexTangents,i.toneMapping=t.toneMapping}eM.setAnimationLoop(function(e){eS&&eS(e)}),"u">typeof self&&eM.setContext(self),this.setAnimationLoop=function(e){eS=e,ev.setAnimationLoop(e),null===e?eM.stop():eM.start()},ev.addEventListener("sessionstart",e_),ev.addEventListener("sessionend",eA),this.render=function(e,t){if(void 0!==t&&!0!==t.isCamera){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(!0===j)return;!0===e.matrixWorldAutoUpdate&&e.updateMatrixWorld(),null===t.parent&&!0===t.matrixWorldAutoUpdate&&t.updateMatrixWorld(),!0===ev.enabled&&!0===ev.isPresenting&&(!0===ev.cameraAutoUpdate&&ev.updateCamera(t),t=ev.getCamera()),!0===e.isScene&&e.onBeforeRender(V,e,t,W),(N=g.get(e,U.length)).init(),U.push(N),eh.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),ea.setFromProjectionMatrix(eh),eo=this.localClippingEnabled,en=v.init(this.clippingPlanes,eo),(F=m.get(e,k.length)).init(),k.push(F),function e(t,i,r,a){if(!1===t.visible)return;if(t.layers.test(i.layers)){if(t.isGroup)r=t.renderOrder;else if(t.isLOD)!0===t.autoUpdate&&t.update(i);else if(t.isLight)N.pushLight(t),t.castShadow&&N.pushShadow(t);else if(t.isSprite){if(!t.frustumCulled||ea.intersectsSprite(t)){a&&ed.setFromMatrixPosition(t.matrixWorld).applyMatrix4(eh);let e=u.update(t),i=t.material;i.visible&&F.push(t,e,i,r,ed.z,null)}}else if((t.isMesh||t.isLine||t.isPoints)&&(t.isSkinnedMesh&&t.skeleton.frame!==s.render.frame&&(t.skeleton.update(),t.skeleton.frame=s.render.frame),!t.frustumCulled||ea.intersectsObject(t))){a&&ed.setFromMatrixPosition(t.matrixWorld).applyMatrix4(eh);let e=u.update(t),i=t.material;if(Array.isArray(i)){let s=e.groups;for(let a=0,o=s.length;a<o;a++){let o=s[a],l=i[o.materialIndex];l&&l.visible&&F.push(t,e,l,r,ed.z,o)}}else i.visible&&F.push(t,e,i,r,ed.z,null)}}let o=t.children;for(let t=0,s=o.length;t<s;t++)e(o[t],i,r,a)}(e,t,0,V.sortObjects),F.finish(),!0===V.sortObjects&&F.sort(ee,et),!0===en&&v.beginShadows();let i=N.state.shadowsArray;if(y.render(i,e,t),!0===en&&v.endShadows(),!0===this.info.autoReset&&this.info.reset(),x.render(F,e),N.setupLights(V.physicallyCorrectLights),t.isArrayCamera){let i=t.cameras;for(let t=0,r=i.length;t<r;t++){let r=i[t];eE(F,e,r,r.viewport)}}else eE(F,e,t);null!==W&&(o.updateMultisampleRenderTarget(W),o.updateRenderTargetMipmap(W)),!0===e.isScene&&e.onAfterRender(V,e,t),A.resetDefaultState(),q=-1,X=null,U.pop(),N=U.length>0?U[U.length-1]:null,k.pop(),F=k.length>0?k[k.length-1]:null},this.getActiveCubeFace=function(){return G},this.getActiveMipmapLevel=function(){return H},this.getRenderTarget=function(){return W},this.setRenderTargetTextures=function(e,i,r){a.get(e.texture).__webglTexture=i,a.get(e.depthTexture).__webglTexture=r;let s=a.get(e);s.__hasExternalTextures=!0,s.__hasExternalTextures&&(s.__autoAllocateDepthBuffer=void 0===r,s.__autoAllocateDepthBuffer||!0===t.has("WEBGL_multisampled_render_to_texture")&&(console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"),s.__useRenderToTexture=!1))},this.setRenderTargetFramebuffer=function(e,t){let i=a.get(e);i.__webglFramebuffer=t,i.__useDefaultFramebuffer=void 0===t},this.setRenderTarget=function(e,t=0,s=0){W=e,G=t,H=s;let l=!0,h=null,c=!1,d=!1;if(e){let s=a.get(e);void 0!==s.__useDefaultFramebuffer?(r.bindFramebuffer(36160,null),l=!1):void 0===s.__webglFramebuffer?o.setupRenderTarget(e):s.__hasExternalTextures&&o.rebindTextures(e,a.get(e.texture).__webglTexture,a.get(e.depthTexture).__webglTexture);let u=e.texture;(u.isData3DTexture||u.isDataArrayTexture||u.isCompressedArrayTexture)&&(d=!0);let p=a.get(e).__webglFramebuffer;
3139e.isWebGLCubeRenderTarget?(h=p[t],c=!0):h=i.isWebGL2&&e.samples>0&&!1===o.useMultisampledRTT(e)?a.get(e).__webglMultisampledFramebuffer:p,Y.copy(e.viewport),Q.copy(e.scissor),K=e.scissorTest}else Y.copy(ei).multiplyScalar($).floor(),Q.copy(er).multiplyScalar($).floor(),K=es;if(r.bindFramebuffer(36160,h)&&i.drawBuffers&&l&&r.drawBuffers(e,h),r.viewport(Y),r.scissor(Q),r.setScissorTest(K),c){let i=a.get(e.texture);ef.framebufferTexture2D(36160,36064,34069+t,i.__webglTexture,s)}else if(d){let i=a.get(e.texture);ef.framebufferTextureLayer(36160,36064,i.__webglTexture,s||0,t||0)}q=-1},this.readRenderTargetPixels=function(e,s,o,l,h,c,d){if(!(e&&e.isWebGLRenderTarget)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let u=a.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==d&&(u=u[d]),u){r.bindFramebuffer(36160,u);try{let r=e.texture,a=r.format,d=r.type;if(1023!==a&&_.convert(a)!==ef.getParameter(35739)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}let u=1016===d&&(t.has("EXT_color_buffer_half_float")||i.isWebGL2&&t.has("EXT_color_buffer_float"));if(1009!==d&&_.convert(d)!==ef.getParameter(35738)&&!(1015===d&&(i.isWebG
3139L2||t.has("OES_texture_float")||t.has("WEBGL_color_buffer_float")))&&!u){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}s>=0&&s<=e.width-l&&o>=0&&o<=e.height-h&&ef.readPixels(s,o,l,h,_.convert(a),_.convert(d),c)}finally{let e=null!==W?a.get(W).__webglFramebuffer:null;r.bindFramebuffer(36160,e)}}},this.readRenderTargetPixelsAsync=async function(e,t,i,s,o,l,h){if(!(e&&e.isWebGLRenderTarget))throw Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let c=a.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==h&&(c=c[h]),c){let h=e.texture,u=h.format,p=h.type;if(t>=0&&t<=e.width-s&&i>=0&&i<=e.height-o){var d;r.bindFramebuffer(ef.FRAMEBUFFER,c);let e=ef.createBuffer();ef.bindBuffer(ef.PIXEL_PACK_BUFFER,e),ef.bufferData(ef.PIXEL_PACK_BUFFER,l.byteLength,ef.STREAM_READ),ef.readPixels(t,i,s,o,_.convert(u),_.convert(p),0);let h=null!==W?a.get(W).__webglFramebuffer:null;r.bindFramebuffer(ef.FRAMEBUFFER,h);let f=ef.fenceSync(ef.SYNC_GPU_COMMANDS_COMPLETE,0);return ef.flush(),await (d=ef,new Promise(function(e,t){setTimeout(function i(){switch(d.clientWaitSync(f,d.SYNC_FLUSH_COMMANDS_BIT,0)){case d.WAIT_FAILED:t();break;case d.TIMEOUT_EXPIRED:setTimeout(i,4);break;default:e()}},4)})),ef.bindBuffer(ef.PIXEL_PACK_BUFFER,e),ef.getBufferSubData(ef.PIXEL_PACK_BUFFER,0,l),ef.deleteBuffer(e),ef.deleteSync(f),l}throw Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")}},this.copyFramebufferToTexture=function(e,t,i=0){let s=Math.pow(2,-i),a=Math.floor(t.image.width*s),l=Math.floor(t.image.height*s);o.setTexture2D(t,0),ef.copyTexSubImage2D(3553,i,0,0,e.x,e.y,a,l),r.unbindTexture()},this.copyTextureToTexture=function(e,t,i,s=0){let a=t.image.width,l=t.image.height,h=_.convert(i.format),c=_.convert(i.type);o.setTexture2D(i,0),ef.pixelStorei(37440,i.flipY),ef.pixelStorei(37441,i.premultiplyAlpha),ef.pixelStorei(3317,i.unpackAlignment),t.isDataTexture?ef.texSubImage2D(3553,s,e.x,e.y,a,l,h,c,t.image.data):t.isCompressedTexture?ef.compressedTexSubImage2D(3553,s,e.x,e.y,t.mipmaps[0].width,t.mipmaps[0].height,h,t.mipmaps[0].data):ef.texSubImage2D(3553,s,e.x,e.y,h,c,t.image),0===s&&i.generateMipmaps&&ef.generateMipmap(3553),r.unbindTexture()},this.copyTextureToTexture3D=function(e,t,i,s,a=0){if(V.isWebGL1Renderer){console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");return}let l=e.max.x-e.min.x+1,h=e.max.y-e.min.y+1,c=e.max.z-e.min.z+1,d=_.convert(s.format),u=_.convert(s.type),p;if(s.isData3DTexture)o.setTexture3D(s,0),p=32879;else if(s.isDataArrayTexture)o.setTexture2DArray(s,0),p=35866;else{console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");return}ef.pixelStorei(37440,s.flipY),ef.pixelStorei(37441,s.premultiplyAlpha),ef.pixelStorei(3317,s.unpackAlignment);let f=ef.getParameter(3314),m=ef.getParameter(32878),g=ef.getParameter(3316),v=ef.getParameter(3315),y=ef.getParameter(32877),x=i.isCompressedTexture?i.mipmaps[0]:i.image;ef.pixelStorei(3314,x.width),ef.pixelStorei(32878,x.height),ef.pixelStorei(3316,e.min.x),ef.pixelStorei(3315,e.min.y),ef.pixelStorei(32877,e.min.z),i.isDataTexture||i.isData3DTexture?ef.texSubImage3D(p,a,t.x,t.y,t.z,l,h,c,d,u,x.data):i.isCompressedArrayTexture?(console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture."),ef.compressedTexSubImage3D(p,a,t.x,t.y,t.z,l,h,c,d,x.data)):ef.texSubImage3D(p,a,t.x,t.y,t.z,l,h,c,d,u,x),ef.pixelStorei(3314,f),ef.pixelStorei(32878,m),ef.pixelStorei(3316,g),ef.pixelStorei(3315,v),ef.pixelStorei(32877,y),0===a&&s.generateMipmaps&&ef.generateMipmap(p),r.unbindTexture()},this.initRenderTarget=function(e){void 0===a.get(e).__webglFramebuffer&&o.setupRenderTarget(e)},this.initTexture=function(e){e.isCubeTexture?o.setTextureCube(e,0):e.isData3DTexture?o.setTexture3D(e,0):e.isDataArrayTexture||e.isCompressedArrayTexture?o.setTexture2DArray(e,0):o.setTexture2D(e,0),r.unbindTexture()},this.resetState=function(){G=0,H=0,W=null,r.reset(),A.reset()},"u">typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}(class extends ny{}).prototype.isWebGL1Renderer=!0;var nx=class{constructor(e,t=1,i=1e3){this.isFog=!0,this.name="",this.color=new ii(e),this.near=t,this.far=i}clone(){return new nx(this.color,this.near,this.far)}toJSON(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}},nb=class extends rl{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.overrideMaterial=null,"u">typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(e,t){return super.copy(e,t),null!==e.background&&(this.background=e.background.clone()),null!==e.environment&&(this.environment=e.environment.clone()),null!==e.fog&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,null!==e.overrideMaterial&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){let t=super.toJSON(e);return null!==this.fog&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),1!==this.backgroundIntensity&&(t.object.backgroundIntensity=this.backgroundIntensity),t}get autoUpdate(){return console.warn("THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144."),this.matrixWorldAutoUpdate}set autoUpdate(e){console.warn("THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144."),this.matrixWorldAutoUpdate=e}},nw=class{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=void 0!==e?e.length/t:0,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=tk()}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}setUsage(e){return this.usage=e,this}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,i){e*=this.stride,i*=t.stride;for(let r=0,s=this.stride;r<s;r++)this.array[e+r]=t.array[i+r];return this}set(e,t=0){return this.array.set(e,t),this}clone(e){void 0===e.arrayBuffers&&(e.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=tk()),void 0===e.arrayBuffers[this.array.buffer._uuid]&&(e.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);let t=new this.array.constructor(e.arrayBuffers[this.array.buffer._uuid]),i=new this.constructor(t,this.stride);return i.setUsage(this.usage),i}onUpload(e){return this.onUploadCallback=e,this}toJSON(e){return void 0===e.arrayBuffers&&(e.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=tk()),void 0===e.arrayBuffers[this.array.buffer._uuid]&&(e.arrayBuffers[this.array.buffer._uuid]=Array.from(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}},nS=new iv,n_=class{constructor(e,t,i,r=!1){this.isInterleavedBufferAttribute=!0,this.name="",this.data=e,this.itemSize=t,this.offset=i,this.normalized=r}
3139get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(e){this.data.needsUpdate=e}applyMatrix4(e){for(let t=0,i=this.data.count;t<i;t++)nS.fromBufferAttribute(this,t),nS.applyMatrix4(e),this.setXYZ(t,nS.x,nS.y,nS.z);return this}applyNormalMatrix(e){for(let t=0,i=this.count;t<i;t++)nS.fromBufferAttribute(this,t),nS.applyNormalMatrix(e),this.setXYZ(t,nS.x,nS.y,nS.z);return this}transformDirection(e){for(let t=0,i=this.count;t<i;t++)nS.fromBufferAttribute(this,t),nS.transformDirection(e),this.setXYZ(t,nS.x,nS.y,nS.z);return this}setX(e,t){return this.normalized&&(t=tX(t,this.array)),this.data.array[e*this.data.stride+this.offset]=t,this}setY(e,t){return this.normalized&&(t=tX(t,this.array)),this.data.array[e*this.data.stride+this.offset+1]=t,this}setZ(e,t){return this.normalized&&(t=tX(t,this.array)),this.data.array[e*this.data.stride+this.offset+2]=t,this}setW(e,t){return this.normalized&&(t=tX(t,this.array)),this.data.array[e*this.data.stride+this.offset+3]=t,this}getX(e){let t=this.data.array[e*this.data.stride+this.offset];return this.normalized&&(t=tq(t,this.array)),t}getY(e){let t=this.data.array[e*this.data.stride+this.offset+1];return this.normalized&&(t=tq(t,this.array)),t}getZ(e){let t=this.data.array[e*this.data.stride+this.offset+2];return this.normalized&&(t=tq(t,this.array)),t}getW(e){let t=this.data.array[e*this.data.stride+this.offset+3];return this.normalized&&(t=tq(t,this.array)),t}setXY(e,t,i){return e=e*this.data.stride+this.offset,this.normalized&&(t=tX(t,this.array),i=tX(i,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=i,this}setXYZ(e,t,i,r){return e=e*this.data.stride+this.offset,this.normalized&&(t=tX(t,this.array),i=tX(i,this.array),r=tX(r,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=i,this.data.array[e+2]=r,this}setXYZW(e,t,i,r,s){return e=e*this.data.stride+this.offset,this.normalized&&(t=tX(t,this.array),i=tX(i,this.array),r=tX(r,this.array),s=tX(s,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=i,this.data.array[e+2]=r,this.data.array[e+3]=s,this}clone(e){if(void 0!==e)return void 0===e.interleavedBuffers&&(e.interleavedBuffers={}),void 0===e.interleavedBuffers[this.data.uuid]&&(e.interleavedBuffers[this.data.uuid]=this.data.clone(e)),new n_(e.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized);{console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.");let e=[];for(let t=0;t<this.count;t++){let i=t*this.data.stride+this.offset;for(let t=0;t<this.itemSize;t++)e.push(this.data.array[i+t])}return new rM(new this.array.constructor(e),this.itemSize,this.normalized)}}toJSON(e){if(void 0!==e)return void 0===e.interleavedBuffers&&(e.interleavedBuffers={}),void 0===e.interleavedBuffers[this.data.uuid]&&(e.interleavedBuffers[this.data.uuid]=this.data.toJSON(e)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized};{console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.");let e=[];for(let t=0;t<this.count;t++){let i=t*this.data.stride+this.offset;for(let t=0;t<this.itemSize;t++)e.push(this.data.array[i+t])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:e,normalized:this.normalized}}}},nA=class extends rl{constructor(){super(),this.isBone=!0,this.type="Bone"}},nM=class extends ih{constructor(e=null,t=1,i=1,r,s,a,o,l,h=1003,c=1003,d,u){super(null,a,o,l,h,c,r,s,d,u),this.isDataTexture=!0,this.image={data:e,width:t,height:i},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}},nE=new iX,nC=new iX,nT=class{constructor(e=[],t=[]){this.uuid=tk(),this.bones=e.slice(0),this.boneInverses=t,this.boneMatrices=null,this.boneTexture=null,this.boneTextureSize=0,this.frame=-1,this.init()}init(){let e=this.bones,t=this.boneInverses;if(this.boneMatrices=new Float32Array(16*e.length),0===t.length)this.calculateInverses();else if(e.length!==t.length){console.warn("THREE.Skeleton: Number of inverse bone matrices does not match amount of bones."),this.boneInverses=[];for(let e=0,t=this.bones.length;e<t;e++)this.boneInverses.push(new iX)}}calculateInverses(){this.boneInverses.length=0;for(let e=0,t=this.bones.length;e<t;e++){let t=new iX;this.bones[e]&&t.copy(this.bones[e].matrixWorld).invert(),this.boneInverses.push(t)}}pose(){for(let e=0,t=this.bones.length;e<t;e++){let t=this.bones[e];t&&t.matrixWorld.copy(this.boneInverses[e]).invert()}for(let e=0,t=this.bones.length;e<t;e++){let t=this.bones[e];t&&(t.parent&&t.parent.isBone?(t.matrix.copy(t.parent.matrixWorld).invert(),t.matrix.multiply(t.matrixWorld)):t.matrix.copy(t.matrixWorld),t.matrix.decompose(t.position,t.quaternion,t.scale))}}update(){let e=this.bones,t=this.boneInverses,i=this.boneMatrices,r=this.boneTexture;for(let r=0,s=e.length;r<s;r++){let s=e[r]?e[r].matrixWorld:nC;nE.multiplyMatrices(s,t[r]),nE.toArray(i,16*r)}null!==r&&(r.needsUpdate=!0)}clone(){return new nT(this.bones,this.boneInverses)}computeBoneTexture(){let e=Math.sqrt(4*this.bones.length),t=new Float32Array((e=Math.max(e=tH(e),4))*e*4);t.set(this.boneMatrices);let i=new nM(t,e,e,1023,1015);return i.needsUpdate=!0,this.boneMatrices=t,this.boneTexture=i,this.boneTextureSize=e,this}getBoneByName(e){for(let t=0,i=this.bones.length;t<i;t++){let i=this.bones[t];if(i.name===e)return i}}dispose(){null!==this.boneTexture&&(this.boneTexture.dispose(),this.boneTexture=null)}fromJSON(e,t){this.uuid=e.uuid;
3139for(let i=0,r=e.bones.length;i<r;i++){let r=e.bones[i],s=t[r];void 0===s&&(console.warn("THREE.Skeleton: No bone found with UUID:",r),s=new nA),this.bones.push(s),this.boneInverses.push(new iX().fromArray(e.boneInverses[i]))}return this.init(),this}toJSON(){let e={metadata:{version:4.5,type:"Skeleton",generator:"Skeleton.toJSON"},bones:[],boneInverses:[]};e.uuid=this.uuid;let t=this.bones,i=this.boneInverses;for(let r=0,s=t.length;r<s;r++){let s=t[r];e.bones.push(s.uuid);let a=i[r];e.boneInverses.push(a.toArray())}return e}},nP=class extends rM{constructor(e,t,i,r=1){super(e,t,i),this.isInstancedBufferAttribute=!0,this.meshPerAttribute=r}copy(e){return super.copy(e),this.meshPerAttribute=e.meshPerAttribute,this}toJSON(){let e=super.toJSON();return e.meshPerAttribute=this.meshPerAttribute,e.isInstancedBufferAttribute=!0,e}},nD=new iX,nI=new iX,nO=[],nR=new iX,nL=new rK,nB=class extends rK{constructor(e,t,i){super(e,t),this.isInstancedMesh=!0,this.instanceMatrix=new nP(new Float32Array(16*i),16),this.instanceColor=null,this.count=i,this.frustumCulled=!1;for(let e=0;e<i;e++)this.setMatrixAt(e,nR)}copy(e,t){return super.copy(e,t),this.instanceMatrix.copy(e.instanceMatrix),null!==e.instanceColor&&(this.instanceColor=e.instanceColor.clone()),this.count=e.count,this}getColorAt(e,t){t.fromArray(this.instanceColor.array,3*e)}getMatrixAt(e,t){t.fromArray(this.instanceMatrix.array,16*e)}raycast(e,t){let i=this.matrixWorld,r=this.count;if(nL.geometry=this.geometry,nL.material=this.material,void 0!==nL.material)for(let s=0;s<r;s++){this.getMatrixAt(s,nD),nI.multiplyMatrices(i,nD),nL.matrixWorld=nI,nL.raycast(e,nO);for(let e=0,i=nO.length;e<i;e++){let i=nO[e];i.instanceId=s,i.object=this,t.push(i)}nO.length=0}}setColorAt(e,t){null===this.instanceColor&&(this.instanceColor=new nP(new Float32Array(3*this.instanceMatrix.count),3)),t.toArray(this.instanceColor.array,3*e)}setMatrixAt(e,t){t.toArray(this.instanceMatrix.array,16*e)}updateMorphTargets(){}dispose(){this.dispatchEvent({type:"dispose"})}},nz=class extends rw{constructor(e){super(),this.isLineBasicMaterial=!0,this.type="LineBasicMaterial",this.color=new ii(16777215),this.linewidth=1,this.linecap="round",this.linejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.linewidth=e.linewidth,this.linecap=e.linecap,this.linejoin=e.linejoin,this.fog=e.fog,this}},nF=new iv,nN=new iv,nk=new iX,nU=new iq,nV=new iN,nj=class extends rl{constructor(e=new rz,t=new nz){super(),this.isLine=!0,this.type="Line",this.geometry=e,this.material=t,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=e.material,this.geometry=e.geometry,this}computeLineDistances(){let e=this.geometry;if(null===e.index){let t=e.attributes.position,i=[0];for(let e=1,r=t.count;e<r;e++)nF.fromBufferAttribute(t,e-1),nN.fromBufferAttribute(t,e),i[e]=i[e-1],i[e]+=nF.distanceTo(nN);e.setAttribute("lineDistance",new rT(i,1))}else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");return this}raycast(e,t){let i=this.geometry,r=this.matrixWorld,s=e.params.Line.threshold,a=i.drawRange;if(null===i.boundingSphere&&i.computeBoundingSphere(),nV.copy(i.boundingSphere),nV.applyMatrix4(r),nV.radius+=s,!1===e.ray.intersectsSphere(nV))return;nk.copy(r).invert(),nU.copy(e.ray).applyMatrix4(nk);let o=s/((this.scale.x+this.scale.y+this.scale.z)/3),l=o*o,h=new iv,c=new iv,d=new iv,u=new iv,p=this.isLineSegments?2:1,f=i.index,m=i.attributes.position;if(null!==f){let i=Math.max(0,a.start),r=Math.min(f.count,a.start+a.count);for(let s=i,a=r-1;s<a;s+=p){let i=f.getX(s),r=f.getX(s+1);if(h.fromBufferAttribute(m,i),c.fromBufferAttribute(m,r),nU.distanceSqToSegment(h,c,u,d)>l)continue;u.applyMatrix4(this.matrixWorld);let a=e.ray.origin.distanceTo(u);a<e.near||a>e.far||t.push({distance:a,point:d.clone().applyMatrix4(this.matrixWorld),index:s,face:null,faceIndex:null,object:this})}}else{let i=Math.max(0,a.start),r=Math.min(m.count,a.start+a.count);for(let s=i,a=r-1;s<a;s+=p){if(h.fromBufferAttribute(m,s),c.fromBufferAttribute(m,s+1),nU.distanceSqToSegment(h,c,u,d)>l)continue;
3139u.applyMatrix4(this.matrixWorld);let i=e.ray.origin.distanceTo(u);i<e.near||i>e.far||t.push({distance:i,point:d.clone().applyMatrix4(this.matrixWorld),index:s,face:null,faceIndex:null,object:this})}}}updateMorphTargets(){let e=this.geometry.morphAttributes,t=Object.keys(e);if(t.length>0){let i=e[t[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=i.length;e<t;e++){let t=i[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[t]=e}}}}},nG=new iv,nH=new iv,nW=class extends nj{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){let e=this.geometry;if(null===e.index){let t=e.attributes.position,i=[];for(let e=0,r=t.count;e<r;e+=2)nG.fromBufferAttribute(t,e),nH.fromBufferAttribute(t,e+1),i[e]=0===e?0:i[e-1],i[e+1]=i[e]+nG.distanceTo(nH);e.setAttribute("lineDistance",new rT(i,1))}else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");return this}},nq=class extends ih{constructor(e,t,i,r,s,a,o,l,h){super(e,t,i,r,s,a,o,l,h),this.isVideoTexture=!0,this.minFilter=void 0!==a?a:1006,this.magFilter=void 0!==s?s:1006,this.generateMipmaps=!1;let c=this;"requestVideoFrameCallback"in e&&e.requestVideoFrameCallback(function t(){c.needsUpdate=!0,e.requestVideoFrameCallback(t)})}clone(){return new this.constructor(this.image).copy(this)}update(){let e=this.image;"requestVideoFrameCallback"in e==!1&&e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}},nX=class extends ih{constructor(e,t,i,r,s,a,o,l,h){super(e,t,i,r,s,a,o,l,h),this.isCanvasTexture=!0,this.needsUpdate=!0}},nY=class{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(e,t){let i=this.getUtoTmapping(e);return this.getPoint(i,t)}getPoints(e=5){let t=[];for(let i=0;i<=e;i++)t.push(this.getPoint(i/e));return t}getSpacedPoints(e=5){let t=[];for(let i=0;i<=e;i++)t.push(this.getPointAt(i/e));return t}getLength(){let e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;let t=[],i,r=this.getPoint(0),s=0;t.push(0);for(let a=1;a<=e;a++)t.push(s+=(i=this.getPoint(a/e)).distanceTo(r)),r=i;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t){let i=this.getLengths(),r=0,s=i.length,a;a=t||e*i[s-1];let o=0,l=s-1,h;for(;o<=l;)if((h=i[r=Math.floor(o+(l-o)/2)]-a)<0)o=r+1;else if(h>0)l=r-1;else{l=r;break}if(i[r=l]===a)return r/(s-1);let c=i[r],d=i[r+1]-c;return(r+(a-c)/d)/(s-1)}getTangent(e,t){let i=e-1e-4,r=e+1e-4;i<0&&(i=0),r>1&&(r=1);let s=this.getPoint(i),a=this.getPoint(r),o=t||(s.isVector2?new tQ:new iv);return o.copy(a).sub(s).normalize(),o}getTangentAt(e,t){let i=this.getUtoTmapping(e);return this.getTangent(i,t)}computeFrenetFrames(e,t){let i=new iv,r=[],s=[],a=[],o=new iv,l=new iX;for(let t=0;t<=e;t++){let i=t/e;r[t]=this.getTangentAt(i,new iv)}s[0]=new iv,a[0]=new iv;let h=Number.MAX_VALUE,c=Math.abs(r[0].x),d=Math.abs(r[0].y),u=Math.abs(r[0].z);c<=h&&(h=c,i.set(1,0,0)),d<=h&&(h=d,i.set(0,1,0)),u<=h&&i.set(0,0,1),o.crossVectors(r[0],i).normalize(),s[0].crossVectors(r[0],o),a[0].crossVectors(r[0],s[0]);for(let t=1;t<=e;t++){if(s[t]=s[t-1].clone(),a[t]=a[t-1].clone(),o.crossVectors(r[t-1],r[t]),o.length()>Number.EPSILON){o.normalize();let e=Math.acos(tU(r[t-1].dot(r[t]),-1,1));s[t].applyMatrix4(l.makeRotationAxis(o,e))}a[t].crossVectors(r[t],s[t])}if(!0===t){let t=Math.acos(tU(s[0].dot(s[e]),-1,1));t/=e,r[0].dot(o.crossVectors(s[0],s[e]))>0&&(t=-t);for(let i=1;i<=e;i++)s[i].applyMatrix4(l.makeRotationAxis(r[i],t*i)),a[i].crossVectors(r[i],s[i])}return{tangents:r,normals:s,binormals:a}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){let e={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.t
3139ype,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}},nQ=class extends nY{constructor(e=0,t=0,i=1,r=1,s=0,a=2*Math.PI,o=!1,l=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=i,this.yRadius=r,this.aStartAngle=s,this.aEndAngle=a,this.aClockwise=o,this.aRotation=l}getPoint(e,t){let i=t||new tQ,r=2*Math.PI,s=this.aEndAngle-this.aStartAngle,a=Math.abs(s)<Number.EPSILON;for(;s<0;)s+=r;for(;s>r;)s-=r;s<Number.EPSILON&&(s=a?0:r),!0!==this.aClockwise||a||(s===r?s=-r:s-=r);let o=this.aStartAngle+e*s,l=this.aX+this.xRadius*Math.cos(o),h=this.aY+this.yRadius*Math.sin(o);if(0!==this.aRotation){let e=Math.cos(this.aRotation),t=Math.sin(this.aRotation),i=l-this.aX,r=h-this.aY;l=i*e-r*t+this.aX,h=i*t+r*e+this.aY}return i.set(l,h)}copy(e){return super.copy(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}toJSON(){let e=super.toJSON();return e.aX=this.aX,e.aY=this.aY,e.xRadius=this.xRadius,e.yRadius=this.yRadius,e.aStartAngle=this.aStartAngle,e.aEndAngle=this.aEndAngle,e.aClockwise=this.aClockwise,e.aRotation=this.aRotation,e}fromJSON(e){return super.fromJSON(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}},nK=class extends nQ{constructor(e,t,i,r,s,a){super(e,t,i,i,r,s,a),this.isArcCurve=!0,this.type="ArcCurve"}};function nZ(){let e=0,t=0,i=0,r=0;
3139function s(s,a,o,l){e=s,t=o,i=-3*s+3*a-2*o-l,r=2*s-2*a+o+l}return{initCatmullRom:function(e,t,i,r,a){s(t,i,a*(i-e),a*(r-t))},initNonuniformCatmullRom:function(e,t,i,r,a,o,l){let h=(t-e)/a-(i-e)/(a+o)+(i-t)/o,c=(i-t)/o-(r-t)/(o+l)+(r-i)/l;s(t,i,h*=o,c*=o)},calc:function(s){let a=s*s;return e+t*s+i*a+a*s*r}}}var nJ=new iv,n$=new nZ,n0=new nZ,n1=new nZ,n2=class extends nY{constructor(e=[],t=!1,i="centripetal",r=.5){super(),this.isCatmullRomCurve3=!0,this.type="CatmullRomCurve3",this.points=e,this.closed=t,this.curveType=i,this.tension=r}getPoint(e,t=new iv){let i,r,s=this.points,a=s.length,o=(a-(this.closed?0:1))*e,l=Math.floor(o),h=o-l;this.closed?l+=l>0?0:(Math.floor(Math.abs(l)/a)+1)*a:0===h&&l===a-1&&(l=a-2,h=1),this.closed||l>0?i=s[(l-1)%a]:(nJ.subVectors(s[0],s[1]).add(s[0]),i=nJ);let c=s[l%a],d=s[(l+1)%a];if(this.closed||l+2<a?r=s[(l+2)%a]:(nJ.subVectors(s[a-1],s[a-2]).add(s[a-1]),r=nJ),"centripetal"===this.curveType||"chordal"===this.curveType){let e="chordal"===this.curveType?.5:.25,t=Math.pow(i.distanceToSquared(c),e),s=Math.pow(c.distanceToSquared(d),e),a=Math.pow(d.distanceToSquared(r),e);s<1e-4&&(s=1),t<1e-4&&(t=s),a<1e-4&&(a=s),n$.initNonuniformCatmullRom(i.x,c.x,d.x,r.x,t,s,a),n0.initNonuniformCatmullRom(i.y,c.y,d.y,r.y,t,s,a),n1.initNonuniformCatmullRom(i.z,c.z,d.z,r.z,t,s,a)}else"catmullrom"===this.curveType&&(n$.initCatmullRom(i.x,c.x,d.x,r.x,this.tension),n0.initCatmullRom(i.y,c.y,d.y,r.y,this.tension),n1.initCatmullRom(i.z,c.z,d.z,r.z,this.tension));return t.set(n$.calc(h),n0.calc(h),n1.calc(h)),t}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t<i;t++){let i=e.points[t];this.points.push(i.clone())}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}toJSON(){let e=super.toJSON();e.points=[];for(let t=0,i=this.points.length;t<i;t++){let i=this.points[t];e.points.push(i.toArray())}return e.closed=this.closed,e.curveType=this.curveType,e.tension=this.tension,e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,i=e.points.length;t<i;t++){let i=e.points[t];this.points.push(new iv().fromArray(i))}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}};function n3(e,t,i,r,s){let a=(r-t)*.5,o=(s-i)*.5,l=e*e;return e*l*(2*i-2*r+a+o)+(-3*i+3*r-2*a-o)*l+a*e+i}function n4(e,t,i,r){let s;return(s=1-e)*s*t+2*(1-e)*e*i+e*e*r}function n5(e,t,i,r,s){let a,o;return(a=1-e)*a*a*t+3*(o=1-e)*o*e*i+3*(1-e)*e*e*r+e*e*e*s}var n6=class extends nY{constructor(e=new tQ,t=new tQ,i=new tQ,r=new tQ){super(),this.isCubicBezierCurve=!0,this.type="CubicBezierCurve",this.v0=e,this.v1=t,this.v2=i,this.v3=r}getPoint(e,t=new tQ){let i=this.v0,r=this.v1,s=this.v2,a=this.v3;return t.set(n5(e,i.x,r.x,s.x,a.x),n5(e,i.y,r.y,s.y,a.y)),t}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e.v3=this.v3.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this.v3.fromArray(e.v3),this}},n8=class extends nY{constructor(e=new iv,t=new iv,i=new iv,r=new iv){super(),this.isCubicBezierCurve3=!0,this.type="CubicBezierCurve3",this.v0=e,this.v1=t,this.v2=i,this.v3=r}getPoint(e,t=new iv){let i=this.v0,r=this.v1,s=this.v2,a=this.v3;return t.set(n5(e,i.x,r.x,s.x,a.x),n5(e,i.y,r.y,s.y,a.y),n5(e,i.z,r.z,s.z,a.z)),t}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e.v3=this.v3.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this.v3.fromArray(e.v3),this}},n9=class extends nY{constructor(e=new tQ,t=new tQ){super(),this.isLineCurve=!0,this.type="LineCurve",this.v1=e,this.v2=t}getPoint(e,t=new tQ){return 1===e?t.copy(this.v2):(t.copy(this.v2).sub(this.v1),t.multiplyScalar(e).add(this.v1)),t}getPointAt(e,t){return this.getPoint(e,t)}getTangent(e,t){let i=t||new tQ;return i.copy(this.v2).sub(this.v1).normalize(),i}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},n7=class extends nY{constructor(e=new iv,t=new iv){super(),this.isLineCurve3=!0,this.type="LineCurve3",this.v1=e,this.v2=t}getPoint(e,t=new iv){return 1===e?t.copy(this.v2):(t.copy(this.v2).sub(this.v1),t.multiplyScalar(e).add(this.v1)),t}getPointAt(e,t){return this.getPoint(e,t)}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},oe=class extends nY{constructor(e=new tQ,t=new tQ,i=new tQ){super(),this.isQuadraticBezierCurve=!0,this.type="QuadraticBezierCurve",this.v0=e,this.v1=t,this.v2=i}
3139getPoint(e,t=new tQ){let i=this.v0,r=this.v1,s=this.v2;return t.set(n4(e,i.x,r.x,s.x),n4(e,i.y,r.y,s.y)),t}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},ot=class extends nY{constructor(e=new iv,t=new iv,i=new iv){super(),this.isQuadraticBezierCurve3=!0,this.type="QuadraticBezierCurve3",this.v0=e,this.v1=t,this.v2=i}getPoint(e,t=new iv){let i=this.v0,r=this.v1,s=this.v2;return t.set(n4(e,i.x,r.x,s.x),n4(e,i.y,r.y,s.y),n4(e,i.z,r.z,s.z)),t}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},oi=class extends nY{constructor(e=[]){super(),this.isSplineCurve=!0,this.type="SplineCurve",this.points=e}getPoint(e,t=new tQ){let i=this.points,r=(i.length-1)*e,s=Math.floor(r),a=r-s,o=i[0===s?s:s-1],l=i[s],h=i[s>i.length-2?i.length-1:s+1],c=i[s>i.length-3?i.length-1:s+2];return t.set(n3(a,o.x,l.x,h.x,c.x),n3(a,o.y,l.y,h.y,c.y)),t}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t<i;t++){let i=e.points[t];this.points.push(i.clone())}return this}toJSON(){let e=super.toJSON();e.points=[];for(let t=0,i=this.points.length;t<i;t++){let i=this.points[t];e.points.push(i.toArray())}return e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,i=e.points.length;t<i;t++){let i=e.points[t];this.points.push(new tQ().fromArray(i))}return this}},or=Object.freeze({__proto__:null,ArcCurve:nK,CatmullRomCurve3:n2,CubicBezierCurve:n6,CubicBezierCurve3:n8,EllipseCurve:nQ,LineCurve:n9,LineCurve3:n7,QuadraticBezierCurve:oe,QuadraticBezierCurve3:ot,SplineCurve:oi}),os=class extends nY{constructor(){super(),this.type="CurvePath",this.curves=[],this.autoClose=!1}add(e){this.curves.push(e)}closePath(){let e=this.curves[0].getPoint(0),t=this.curves[this.curves.length-1].getPoint(1);e.equals(t)||this.curves.push(new n9(t,e))}getPoint(e,t){let i=e*this.getLength(),r=this.getCurveLengths(),s=0;for(;s<r.length;){if(r[s]>=i){let e=r[s]-i,a=this.curves[s],o=a.getLength(),l=0===o?0:1-e/o;return a.getPointAt(l,t)}s++}return null}getLength(){let e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;let e=[],t=0;for(let i=0,r=this.curves.length;i<r;i++)e.push(t+=this.curves[i].getLength());return this.cacheLengths=e,e}getSpacedPoints(e=40){let t=[];for(let i=0;i<=e;i++)t.push(this.getPoint(i/e));return this.autoClose&&t.push(t[0]),t}getPoints(e=12){let t=[],i;for(let r=0,s=this.curves;r<s.length;r++){let a=s[r],o=a.isEllipseCurve?2*e:a.isLineCurve||a.isLineCurve3?1:a.isS
vendor: 7,898 bytes, line 3139
3139plineCurve?e*a.points.length:e,l=a.getPoints(o);for(let e=0;e<l.length;e++){let r=l[e];i&&i.equals(r)||(t.push(r),i=r)}}return this.autoClose&&t.length>1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,i=e.curves.length;t<i;t++){let i=e.curves[t];this.curves.push(i.clone())}return this.autoClose=e.autoClose,this}toJSON(){let e=super.toJSON();e.autoClose=this.autoClose,e.curves=[];for(let t=0,i=this.curves.length;t<i;t++){let i=this.curves[t];e.curves.push(i.toJSON())}return e}fromJSON(e){super.fromJSON(e),this.autoClose=e.autoClose,this.curves=[];for(let t=0,i=e.curves.length;t<i;t++){let i=e.curves[t];this.curves.push(new or[i.type]().fromJSON(i))}return this}},oa=class extends os{constructor(e){super(),this.type="Path",this.currentPoint=new tQ,e&&this.setFromPoints(e)}setFromPoints(e){this.moveTo(e[0].x,e[0].y);for(let t=1,i=e.length;t<i;t++)this.lineTo(e[t].x,e[t].y);return this}moveTo(e,t){return this.currentPoint.set(e,t),this}lineTo(e,t){let i=new n9(this.currentPoint.clone(),new tQ(e,t));return this.curves.push(i),this.currentPoint.set(e,t),this}quadraticCurveTo(e,t,i,r){let s=new oe(this.currentPoint.clone(),new tQ(e,t),new tQ(i,r));return this.curves.push(s),this.currentPoint.set(i,r),this}bezierCurveTo(e,t,i,r,s,a){let o=new n6(this.currentPoint.clone(),new tQ(e,t),new tQ(i,r),new tQ(s,a));return this.curves.push(o),this.currentPoint.set(s,a),this}splineThru(e){let t=new oi([this.currentPoint.clone()].concat(e));return this.curves.push(t),this.currentPoint.copy(e[e.length-1]),this}arc(e,t,i,r,s,a){let o=this.currentPoint.x,l=this.currentPoint.y;return this.absarc(e+o,t+l,i,r,s,a),this}absarc(e,t,i,r,s,a){return this.absellipse(e,t,i,i,r,s,a),this}ellipse(e,t,i,r,s,a,o,l){let h=this.currentPoint.x,c=this.currentPoint.y;return this.absellipse(e+h,t+c,i,r,s,a,o,l),this}absellipse(e,t,i,r,s,a,o,l){let h=new nQ(e,t,i,r,s,a,o,l);if(this.curves.length>0){let e=h.getPoint(0);e.equals(this.currentPoint)||this.lineTo(e.x,e.y)}this.curves.push(h);let c=h.getPoint(1);return this.currentPoint.copy(c),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){let e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}},on=class extends rz{constructor(e=[new tQ(0,-.5),new tQ(.5,0),new tQ(0,.5)],t=12,i=0,r=2*Math.PI){super(),this.type="LatheGeometry",this.parameters={points:e,segments:t,phiStart:i,phiLength:r},t=Math.floor(t),r=tU(r,0,2*Math.PI);let s=[],a=[],o=[],l=[],h=[],c=1/t,d=new iv,u=new tQ,p=new iv,f=new iv,m=new iv,g=0,v=0;for(let t=0;t<=e.length-1;t++)switch(t){case 0:g=e[t+1].x-e[t].x,v=e[t+1].y-e[t].y,p.x=1*v,p.y=-g,p.z=0*v,m.copy(p),p.normalize(),l.push(p.x,p.y,p.z);break;case e.length-1:l.push(m.x,m.y,m.z);break;default:g=e[t+1].x-e[t].x,v=e[t+1].y-e[t].y,p.x=1*v,p.y=-g,p.z=0*v,f.copy(p),p.x+=m.x,p.y+=m.y,p.z+=m.z,p.normalize(),l.push(p.x,p.y,p.z),m.copy(f)}for(let s=0;s<=t;s++){let p=i+s*c*r,f=Math.sin(p),m=Math.cos(p);for(let i=0;i<=e.length-1;i++){d.x=e[i].x*f,d.y=e[i].y,d.z=e[i].x*m,a.push(d.x,d.y,d.z),u.x=s/t,u.y=i/(e.length-1),o.push(u.x,u.y);let r=l[3*i+0]*f,c=l[3*i+1],p=l[3*i+0]*m;h.push(r,c,p)}}for(let i=0;i<t;i++)for(let t=0;t<e.length-1;t++){let r=t+i*e.length,a=r+e.length,o=r+e.length+1,l=r+1;s.push(r,a,l),s.push(o,l,a)}this.setIndex(s),this.setAttribute("position",new rT(a,3)),this.setAttribute("uv",new rT(o,2)),this.setAttribute("normal",new rT(h,3))}static fromJSON(e){return new on(e.points,e.segments,e.phiStart,e.phiLength)}},oo=class extends rz{constructor(e=1,t=1,i=1,r=32,s=1,a=!1,o=0,l=2*Math.PI){super(),this.type="CylinderGeometry",this.parameters={radiusTop:e,radiusBottom:t,height:i,radialSegments:r,heightSegments:s,openEnded:a,thetaStart:o,thetaLength:l};let h=this;r=Math.floor(r),s=Math.floor(s);let c=[],d=[],u=[],p=[],f=0,m=[],g=i/2,v=0;function y(i){let s=f,a=new tQ,m=new iv,y=0,x=!0===i?e:t,b=!0===i?1:-1;for(let e=1;e<=r;e++)d.push(0,g*b,0),u.push(0,b,0),p.push(.5,.5),f++;let w=f;for(let e=0;e<=r;e++){let t=e/r*l+o,i=Math.cos(t),s=Math.sin(t);m.x=x*s,m.y=g*b,m.z=x*i,d.push(m.x,m.y,m.z),u.push(0,b,0),a.x=.5*i+.5,a.y=.5*s*b+.5,p.push(a.x,a.y),f++}for(let e=0;e<r;e++){let t=s+e,r=w+e;!0===i?c.push(r,r+1,t):c.push(r+1,r,t),y+=3}h.addGroup(v,y,!0===i?1:2),v+=y}(function(){let a=new iv,y=new iv,x=0,b=(t-e)/i;for(let h=0;h<=s;h++){let c=[],v=h/s,x=v*(t-e)+e;for(let e=0;e<=r;e++){let t=e/r,s=t*l+o,h=Math.sin(s),m=Math.cos(s);y.x=x*h,y.y=-v*i+g,y.z=x*m,d.push(y.x,y.y,y.z),a.set(h,b,m).normalize(),u.push(a.x,a.y,a.z),p.push(t,1-v),c.push(f++)}m.push(c)}for(let e=0;e<r;e++)for(let t=0;t<s;t++){let i=m[t][e],r=m[t+1][e],s=m[t+1][e+1],a=m[t][e+1];c.push(i,r,a),c.push(r,s,a),x+=6}h.addGroup(v,x,0),v+=x})(),!1===a&&(e>0&&y(!0),t>0&&y(!1)),this.setIndex(c),this.setAttribute("position",new rT(d,3)),this.setAttribute("normal",new rT(u,3)),this.setAttribute("uv",new rT(p,2))}static fromJSON(e){return new oo(e.radiusTop,e.radiusBottom,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}},ol=class extends oo{constructor(e=1,t=1,i=32,r=1,s=!1,a=0,o=2*Math.PI){super(0,e,t,i,r,s,a,o),this.type="ConeGeometry",this.parameters={radius:e,height:t,radialSegments:i,heightSegments:r,openEnded:s,thetaStart:a,thetaLength:o}}static fromJSON(e){return new ol(e.radius,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}},oh=class extends rz{constructor(e=[],t=[],i=1,r=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:e,indices:t,radius:i,detail:r};let s=[],a=[];function o(e){s.push(e.x,e.y,e.z)}function l(t,i){let r=3*t;i.x=e[r+0],i.y=e[r+1],i.z=e[r+2]}function h(e,t,i,r){r<0&&1===e.x&&(a[t]=e.x-1),0===i.x&&0===i.z&&(a[t]=r/2/Math.PI+.5)}function c(e){return Math.atan2(e.z,-e.x)}(function(e){let i=new iv,r=new iv,s=new iv;for(let a=0;a<t.length;a+=3)l(t[a+0],i),l(t[a+1],r),l(t[a+2],s),function(e,t,i,r){let s=r+1,a=[];for(let r=0;r<=s;r++){a[r]=[];let o=e.clone().lerp(i,r/s),l=t.clone().lerp(i,r/s),h=s-r;for(let e=0;e<=h;e++)0===e&&r===s?a[r][e]=o:a[r][e]=o.clone().lerp(l,e/h)}for(let e=0;e<s;e++)for(let t=0;t<2*(s-e)-1;t++){let i=Math.floor(t/2);t%2==0?(o(a[e][i+1]),o(a[e+1][i]),o(a[e][i])):(o(a[e][i+1]),o(a[e+1][i+1]),o(a[e+1][i]))}}(i,r,s,e)})(r),function(e){let t=new iv;for(let i=0;i<s.length;i+=3)t.x=s[i+0],t.y=s[i+1],t.z=s[i+2],t.normalize().multiplyScalar(e),s[i+0]=t.x,s[i+1]=t.y,s[i+2]=t.z}(i),function(){let e=new iv;for(let t=0;t<s.length;t+=3){e.x=s[t+0],e.y=s[t+1],e.z=s[t+2];let i=c(e)/2/Math.PI+.5,r=Math.atan2(-e.y,Math.sqrt(e.x*e.x+e.z*e.z))/Math.PI+.5;a.push(i,1-r)}(function(){let e=new iv,t=new iv,i=new iv,r=new iv,o=new tQ,l=new tQ,d=new tQ;for(let u=0,p=0;u<s.length;u+=9,p+=6){e.set(s[u+0],s[u+1],s[u+2]),t.set(s[u+3],s[u+4],s[u+5]),i.set(s[u+6],s[u+7],s[u+8]),o.set(a[p+0],a[p+1]),l.set(a[p+2],a[p+3]),d.set(a[p+4],a[p+5]),r.copy(e).add(t).add(i).divideScalar(3);let f=c(r);h(o,p+0,e,f),h(l,p+2,t,f),h(d,p+4,i,f)}})(),function(){for(let e=0;e<a.length;e+=6){let t=a[e+0],i=a[e+2],r=a[e+4],s=Math.max(t,i,r),o=Math.min(t,i,r);s>.9&&o<.1&&(t<.2&&(a[e+0]+=1),i<.2&&(a[e+2]+=1),r<.2&&(a[e+4]+=1))}}()}(),this.setAttribute("position",new rT(s,3)),this.setAttribute("normal",new rT(s.slice(),3)),this.setAttribute("uv",new rT(a,2)),0===r?this.computeVertexNormals():this.normalizeNormals()}static fromJSON(e){return new oh(e.vertices,e.indices,e.radius,e.details)}},oc=class extends oh{constructor(e=1,t=0){let i=(1+Math.sqrt(5))/2,r=1/i;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-r,-i,0,-r,i,0,r,-i,0,r,i,-r,-i,0,-r,i,0,r,-i,0,r,i,0,-i,0,-r,i,0,-r,-i,0,r,i,0,r],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,
313919,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],e,t),this.type="DodecahedronGeometry",this.parameters={radius:e,detail:t}}static fromJSON(e){return new oc(e.radius,e.detail)}},od=class extends oa{constructor(e){super(e),this.uuid=tk(),this.type="Shape",this.holes=[]}getPointsHoles(e){let t=[];for(let i=0,r=this.holes.length;i<r;i++)t[i]=this.holes[i].getPoints(e);return t}extractPoints(e){return{shape:this.getPoints(e),holes:this.getPointsHoles(e)}}copy(e){super.copy(e),this.holes=[];for(let t=0,i=e.holes.length;t<i;t++){let i=e.holes[t];this.holes.push(i.clone())}return this}toJSON(){let e=super.toJSON();e.uuid=this.uuid,e.holes=[];for(let t=0,i=this.holes.length;t<i;t++){let i=this.holes[t];e.holes.push(i.toJSON())}return e}fromJSON(e){super.fromJSON(e),this.uuid=e.uuid,this.holes=[];for(let t=0,i=e.holes.length;t<i;t++){let i=e.holes[t];this.holes.push(new oa().fromJSON(i))}return this}},ou=function(e,t,i=2){let r,s,a,o,l,h,c,d=t&&t.length,u=d?t[0]*i:e.length,p=op(e,0,u,i,!0),f=[];if(!p||p.next===p.prev)return f;if(d&&(p=function(e,t,i,r){let s=[],a,o,l,h,c;for(a=0,o=t.length;a<o;a++)l=t[a]*r,h=a<o-1?t[a+1]*r:e.length,(c=op(e,l,h,r,!1))===c.next&&(c.steiner=!0),s.push(function(e){let t=e,i=e;do(t.x<i.x||t.x===i.x&&t.y<i.y)&&(i=t),t=t.next;while(t!==e);return i}(c));for(s.sort(om),a=0;a<s.length;a++)i=function(e,t){let i=function(e,t){let i=t,r=-1/0,s,a=e.x,o=e.y;do{if(o<=i.y&&o>=i.next.y&&i.next.y!==i.y){let e=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(e<=a&&e>r&&(r=e,s=i.x<i.next.x?i:i.next,e===a))return s}i=i.next}while(i!==t);if(!s)return null;let l=s,h=s.x,c=s.y,d=1/0,u;i=s;do{var p,f;a>=i.x&&i.x>=h&&a!==i.x&&ov(o<c?a:r,o,h,c,o<c?r:a,o,i.x,i.y)&&(u=Math.abs(o-i.y)/(a-i.x),o_(i,e)&&(u<d||u===d&&(i.x>s.x||i.x===s.x&&(p=s,f=i,0>oy(p.prev,p,f.prev)&&0>oy(f.next,p,p.next))))&&(s=i,d=u)),i=i.next}while(i!==l);return s}(e,t);if(!i)return t;let r=oA(i,e);return of(r,r.next),of(i,i.next)}(s[a],i);return i}(e,t,p,i)),e.length>80*i){r=a=e[0],s=o=e[1];for(let t=i;t<u;t+=i)l=e[t],h=e[t+1],l<r&&(r=l),h<s&&(s=h),l>a&&(a=l),h>o&&(o=h);c=0!==(c=Math.max(a-r,o-s))?32767/c:0}return function e(t,i,r,s,a,o,l){if(!t)return;!l&&o&&function(e,t,i,r){let s=e;do 0===s.z&&(s.z=og(s.x,s.y,t,i,r)),s.prevZ=s.prev,s.nextZ=s.next,s=s.next;while(s!==e);s.prevZ.nextZ=null,s.prevZ=null,function(e){let t,i,r,s,a,o,l,h,c=1;do{for(i=e,e=null,a=null,o=0;i;){for(o++,r=i,l=0,t=0;t<c&&(l++,r=r.nextZ);t++);for(h=c;l>0||h>0&&r;)0!==l&&(0===h||!r||i.z<=r.z)?(s=i,i=i.nextZ,l--):(s=r,r=r.nextZ,h--),a?a.nextZ=s:e=s,s.prevZ=a,a=s;i=r}a.nextZ=null,c*=2}while(o>1)}(s)}(t,s,a,o);let h=t,c,d;for(;t.prev!==t.next;){if(c=t.prev,d=t.next,o?function(e,t,i,r){let s=e.prev,a=e.next;if(oy(s,e,a)>=0)return!1;let o=s.x,l=e.x,h=a.x,c=s.y,d=e.y,u=a.y,p=o<l?o<h?o:h:l<h?l:h,f=c<d?c<u?c:u:d<u?d:u,m=o>l?o>h?o:h:l>h?l:h,g=c>d?c>u?c:u:d>u?d:u,v=og(p,f,t,i,r),y=og(m,g,t,i,r),x=e.prevZ,b=e.nextZ;for(;x&&x.z>=v&&b&&b.z<=y;){if(x.x>=p&&x.x<=m&&x.y>=f&&x.y<=g&&x!==s&&x!==a&&ov(o,c,l,d,h,u,x.x,x.y)&&oy(x.prev,x,x.next)>=0||(x=x.prevZ,b.x>=p&&b.x<=m&&b.y>=f&&b.y<=g&&b!==s&&b!==a&&ov(o,c,l,d,h,u,b.x,b.y)&&oy(b.prev,b,b.next)>=0))return!1;b=b.nextZ}for(;x&&x.z>=v;){if(x.x>=p&&x.x<=m&&x.y>=f&&x.y<=g&&x!==s&&x!==a&&ov(o,c,l,d,h,u,x.x,x.y)&&oy(x.prev,x,x.next)>=0)return!1;x=x.prevZ}for(;b&&b.z<=y;){if(b.x>=p&&b.x<=m&&b.y>=f&&b.y<=g&&b!==s&&b!==a&&ov(o,c,l,d,h,u,b.x,b.y)&&oy(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}(t,s,a,o):function(e){let t=e.prev,i=e.next;if(oy(t,e,i)>=0)return!1;let r=t.x,s=e.x,a=i.x,o=t.y,l=e.y,h=i.y,c=r<s?r<a?r:a:s<a?s:a,d=o<l?o<h?o:h:l<h?l:h,u=r>s?r>a?r:a:s>a?s:a,p=o>l?o>h?o:h:l>h?l:h,f=i.next;for(;f!==t;){if(f.x>=c&&f.x<=u&&f.y>=d&&f.y<=p&&ov(r,o,s,l,a,h,f.x,f.y)&&oy(f.prev,f,f.next)>=0)return!1;f=f.next}return!0}(t)){i.push(c.i/r|0),i.push(t.i/r|0),i.push(d.i/r|0),oE(t),t=d.next,h=d.next;continue}if((t=d)===h){l?1===l?e(t=function(e,t,i){let r=e;do{let s=r.prev,a=r.next.next;!ox(s,a)&&ob(s,r,r.next,a)&&o_(s,a)&&o_(a,s)&&(t.push(s.i/i|0),t.push(r.i/i|0),t.push(a.i/i|0),oE(r),oE(r.next),r=e=a),r=r.next}while(r!==e);return of(r)}(of(t),i,r),i,r,s,a,o,2):2===l&&function(t,i,r,s,a,o){let l=t;do{let t=l.next.next;for(;t!==l.prev;){var h,c;
3139if(l.i!==t.i&&(h=l,c=t,h.next.i!==c.i&&h.prev.i!==c.i&&!function(e,t){let i=e;do{if(i.i!==e.i&&i.next.i!==e.i&&i.i!==t.i&&i.next.i!==t.i&&ob(i,i.next,e,t))return!0;i=i.next}while(i!==e);return!1}(h,c)&&(o_(h,c)&&o_(c,h)&&function(e,t){let i=e,r=!1,s=(e.x+t.x)/2,a=(e.y+t.y)/2;do i.y>a!=i.next.y>a&&i.next.y!==i.y&&s<(i.next.x-i.x)*(a-i.y)/(i.next.y-i.y)+i.x&&(r=!r),i=i.next;while(i!==e);return r}(h,c)&&(oy(h.prev,h,c.prev)||oy(h,c.prev,c))||ox(h,c)&&oy(h.prev,h,h.next)>0&&oy(c.prev,c,c.next)>0))){let h=oA(l,t);l=of(l,l.next),h=of(h,h.next),e(l,i,r,s,a,o,0),e(h,i,r,s,a,o,0);return}t=t.next}l=l.next}while(l!==t)}(t,i,r,s,a,o):e(of(t),i,r,s,a,o,1);break}}}(p,f,i,r,s,c,0),f};function op(e,t,i,r,s){let a,o;if(s===function(e,t,i,r){let s=0;for(let a=t,o=i-r;a<i;a+=r)s+=(e[o]-e[a])*(e[a+1]+e[o+1]),o=a;return s}(e,t,i,r)>0)for(a=t;a<i;a+=r)o=oM(a,e[a],e[a+1],o);else for(a=i-r;a>=t;a-=r)o=oM(a,e[a],e[a+1],o);return o&&ox(o,o.next)&&(oE(o),o=o.next),o}function of(e,t){if(!e)return e;t||(t=e);let i=e,r;do if(r=!1,!i.steiner&&(ox(i,i.next)||0===oy(i.prev,i,i.next))){if(oE(i),(i=t=i.prev)===i.next)break;r=!0}else i=i.next;while(r||i!==t);return t}function om(e,t){return e.x-t.x}function og(e,t,i,r,s){return(e=((e=((e=((e=((e=(e-i)*s|0)|e<<8)&16711935)|e<<4)&252645135)|e<<2)&858993459)|e<<1)&1431655765)|(t=((t=((t=((t=((t=(t-r)*s|0)|t<<8)&16711935)|t<<4)&252645135)|t<<2)&858993459)|t<<1)&1431655765)<<1}function ov(e,t,i,r,s,a,o,l){return(s-o)*(t-l)>=(e-o)*(a-l)&&(e-o)*(r-l)>=(i-o)*(t-l)&&(i-o)*(a-l)>=(s-o)*(r-l)}function oy(e,t,i){return(t.y-e.y)*(i.x-t.x)-(t.x-e.x)*(i.y-t.y)}function ox(e,t){return e.x===t.x&&e.y===t.y}function ob(e,t,i,r){let s=oS(oy(e,t,i)),a=oS(oy(e,t,r)),o=oS(oy(i,r,e)),l=oS(oy(i,r,t));return!!(s!==a&&o!==l||0===s&&ow(e,i,t)||0===a&&ow(e,r,t)||0===o&&ow(i,e,r)||0===l&&ow(i,t,r))}function ow(e,t,i){return t.x<=Math.max(e.x,i.x)&&t.x>=Math.min(e.x,i.x)&&t.y<=Math.max(e.y,i.y)&&t.y>=Math.min(e.y,i.y)}function oS(e){return e>0?1:e<0?-1:0}function o_(e,t){return 0>oy(e.prev,e,e.next)?oy(e,t,e.next)>=0&&oy(e,e.prev,t)>=0:0>oy(e,t,e.prev)||0>oy(e,e.next,t)}function oA(e,t){let i=new oC(e.i,e.x,e.y),r=new oC(t.i,t.x,t.y),s=e.next,a=t.prev;return e.next=t,t.prev=e,i.next=s,s.prev=i,r.next=i,i.prev=r,a.next=r,r.prev=a,r}function oM(e,t,i,r){let s=new oC(e,t,i);return r?(s.next=r.next,s.prev=r,r.next.prev=s,r.next=s):(s.prev=s,s.next=s),s}function oE(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function oC(e,t,i){this.i=e,this.x=t,this.y=i,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}var oT=class{static area(e){let t=e.length,i=0;for(let r=t-1,s=0;s<t;r=s++)i+=e[r].x*e[s].y-e[s].x*e[r].y;return .5*i}static isClockWise(e){return 0>oT.area(e)}static triangulateShape(e,t){let i=[],r=[],s=[];oP(e),oD(i,e);let a=e.length;t.forEach(oP);for(let e=0;e<t.length;e++)r.push(a),a+=t[e].length,oD(i,t[e]);let o=ou(i,r);for(let e=0;e<o.length;e+=3)s.push(o.slice(e,e+3));return s}};function oP(e){let t=e.length;t>2&&e[t-1].equals(e[0])&&e.pop()}function oD(e,t){for(let i=0;i<t.length;i++)e.push(t[i].x),e.push(t[i].y)}var oI=class extends oh{constructor(e=1,t=0){let i=(1+Math.sqrt(5))/2;super([-1,i,0,1,i,0,-1,-i,0,1,-i,0,0,-1,i,0,1,i,0,-1,-i,0,1,-i,i,0,-1,i,0,1,-i,0,-1,-i,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],e,t),this.type="IcosahedronGeometry",this.parameters={radius:e,detail:t}}static fromJSON(e){return new oI(e.radius,e.detail)}},oO=class extends rz{constructor(e=1,t=32,i=16,r=0,s=2*Math.PI,a=0,o=Math.PI){super(),this.type="SphereGeometry",this.parameters={radius:e,widthSegments:t,heightSegments:i,phiStart:r,phiLength:s,thetaStart:a,thetaLength:o},t=Math.max(3,Math.floor(t)),i=Math.max(2,Math.floor(i));let l=Math.min(a+o,Math.PI),h=0,c=[],d=new iv,u=new iv,p=[],f=[],m=[],g=[];for(let p=0;p<=i;p++){let v=[],y=p/i,x=0;0==p&&0==a?x=.5/t:p==i&&l==Math.PI&&(x=-.5/t);for(let i=0;i<=t;i++){let l=i/t;d.x=-e*Math.cos(r+l*s)*Math.sin(a+y*o),d.y=e*Math.cos(a+y*o),d.z=e*Math.sin(r+l*s)*Math.sin(a+y*o),f.pu
3139sh(d.x,d.y,d.z),u.copy(d).normalize(),m.push(u.x,u.y,u.z),g.push(l+x,1-y),v.push(h++)}c.push(v)}for(let e=0;e<i;e++)for(let r=0;r<t;r++){let t=c[e][r+1],s=c[e][r],o=c[e+1][r],h=c[e+1][r+1];(0!==e||a>0)&&p.push(t,s,h),(e!==i-1||l<Math.PI)&&p.push(s,o,h)}this.setIndex(p),this.setAttribute("position",new rT(f,3)),this.setAttribute("normal",new rT(m,3)),this.setAttribute("uv",new rT(g,2))}static fromJSON(e){return new oO(e.radius,e.widthSegments,e.heightSegments,e.phiStart,e.phiLength,e.thetaStart,e.thetaLength)}},oR=class extends rz{constructor(e=1,t=.4,i=12,r=48,s=2*Math.PI){super(),this.type="TorusGeometry",this.parameters={radius:e,tube:t,radialSegments:i,tubularSegments:r,arc:s},i=Math.floor(i),r=Math.floor(r);let a=[],o=[],l=[],h=[],c=new iv,d=new iv,u=new iv;for(let a=0;a<=i;a++)for(let p=0;p<=r;p++){let f=p/r*s,m=a/i*Math.PI*2;d.x=(e+t*Math.cos(m))*Math.cos(f),d.y=(e+t*Math.cos(m))*Math.sin(f),d.z=t*Math.sin(m),o.push(d.x,d.y,d.z),c.x=e*Math.cos(f),c.y=e*Math.sin(f),u.subVectors(d,c).normalize(),l.push(u.x,u.y,u.z),h.push(p/r),h.push(a/i)}for(let e=1;e<=i;e++)for(let t=1;t<=r;t++){let i=(r+1)*e+t-1,s=(r+1)*(e-1)+t-1,o=(r+1)*(e-1)+t,l=(r+1)*e+t;a.push(i,s,l),a.push(s,o,l)}this.setIndex(a),this.setAttribute("position",new rT(o,3)),this.setAttribute("normal",new rT(l,3)),this.setAttribute("uv",new rT(h,2))}static fromJSON(e){return new oR(e.radius,e.tube,e.radialSegments,e.tubularSegments,e.arc)}},oL=class extends rz{constructor(e=1,t=.4,i=64,r=8,s=2,a=3){super(),this.type="TorusKnotGeometry",this.parameters={radius:e,tube:t,tubularSegments:i,radialSegments:r,p:s,q:a},i=Math.floor(i),r=Math.floor(r);let o=[],l=[],h=[],c=[],d=new iv,u=new iv,p=new iv,f=new iv,m=new iv,g=new iv,v=new iv;for(let o=0;o<=i;++o){let x=o/i*s*Math.PI*2;y(x,s,a,e,p),y(x+.01,s,a,e,f),g.subVectors(f,p),v.addVectors(f,p),m.crossVectors(g,v),v.crossVectors(m,g),m.normalize(),v.normalize();for(let e=0;e<=r;++e){let s=e/r*Math.PI*2,a=-t*Math.cos(s),f=t*Math.sin(s);d.x=p.x+(a*v.x+f*m.x),d.y=p.y+(a*v.y+f*m.y),d.z=p.z+(a*v.z+f*m.z),l.push(d.x,d.y,d.z),u.subVectors(d,p).normalize(),h.push(u.x,u.y,u.z),c.push(o/i),c.push(e/r)}}for(let e=1;e<=i;e++)for(let t=1;t<=r;t++){let i=(r+1)*(e-1)+(t-1),s=(r+1)*e+(t-1),a=(r+1)*e+t,l=(r+1)*(e-1)+t;o.push(i,s,l),o.push(s,a,l)}function y(e,t,i,r,s){let a=Math.cos(e),o=Math.sin(e),l=i/t*e,h=Math.cos(l);s.x=r*(2+h)*.5*a,s.y=r*(2+h)*o*.5,s.z=r*Math.sin(l)*.5}this.setIndex(o),this.setAttribute("position",new rT(l,3)),this.setAttribute("normal",new rT(h,3)),this.setAttribute("uv",new rT(c,2))}static fromJSON(e){return new oL(e.radius,e.tube,e.tubularSegments,e.radialSegments,e.p,e.q)}},oB=class extends r5{constructor(e){super(e),this.isRawShaderMaterial=!0,this.type="RawShaderMaterial"}};function oz(e,t,i){return oN(e)?new e.constructor(e.subarray(t,void 0!==i?i:e.length)):e.slice(t,i)}function oF(e,t,i){return e&&(i||e.constructor!==t)?"number"==typeof t.BYTES_PER_ELEMENT?new t(e):Array.prototype.slice.call(e):e}function oN(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function ok(e,t,i){let r=e.length,s=new e.constructor(r);for(let a=0,o=0;o!==r;++a){let r=i[a]*t;for(let i=0;i!==t;++i)s[o++]=e[r+i]}return s}function oU(e,t,i,r){let s=1,a=e[0];for(;void 0!==a&&void 0===a[r];)a=e[s++];if(void 0===a)return;let o=a[r];if(void 0!==o){if(Array.isArray(o))do void 0!==(o=a[r])&&(t.push(a.time),i.push.apply(i,o)),a=e[s++];while(void 0!==a);else if(void 0!==o.toArray)do void 0!==(o=a[r])&&(t.push(a.time),o.toArray(i,i.length)),a=e[s++];while(void 0!==a);else do void 0!==(o=a[r])&&(t.push(a.time),i.push(o)),a=e[s++];while(void 0!==a)}}var oV=class{constructor(e,t,i,r){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=void 0!==r?r:new t.constructor(i),this.sampleValues=t,this.valueSize=i,this.settings=null,this.DefaultSettings_={}}evaluate(e){let t=this.parameterPositions,i=this._cachedIndex,r=t[i],s=t[i-1];e:{t:{let a;i:{r:if(!(e<r)){for(let a=i+2;;){if(void 0===r){if(e<s)break r;return i=t.length,this._cachedIndex=i,this.copySampleValue_(i-1)}if(i===a)break;if(s=r,e<(r=t[++i]))break t}a=t.length;break i}if(!(e>=s)){let o=t[1];e<o&&(i=2,s=o);for(let a=i-2;;){if(void 0===s)return this._cachedIndex=0,this.copySampleValue_(0);if(i===a)break;if(r=s,e>=(s=t[--i-1]))break t}a=i,i=0;break i}break e}for(;i<a;){let r=i+a>>>1;e<t[r]?a=r:i=r+1}if(r=t[i],void 0===(s=t[i-1]))return this._cachedIndex=0,this.copySampleValue_(0);if(void 0===r)return i=t.length,this._cachedIndex=i,this.copySampleValue_(i-1)}this._cachedIndex=i,this.intervalChanged_(i,s,r)}return this.interpolate_(i,s,e,r)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(e){let t=this.resultBuffer,i=this.sampleValues,r=this.valueSize,s=e*r;for(let e=0;e!==r;++e)t[e]=i[s+e];return t}interpolate_(){throw Error("call to abstract method")}intervalChanged_(){}},oj=class extends oV{constructor(e,t,i,r){super(e,t,i,r),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:2400,endingEnd:2400}}intervalChanged_(e,t,i){let r=this.parameterPositions,s=e-2,a=e+1,o=r[s],l=r[a];if(void 0===o)switch(this.getSettings_().endingStart){case 2401:s=e,o=2*t-i;break;case 2402:s=r.length-2,o=t+r[s]-r[s+1];break;default:s=e,o=i}if(void 0===l)switch(this.getSettings_().endingEnd){case 2401:a=e,l=2*i-t;break;case 2402:a=1,l=i+r[1]-r[0];break;default:a=e-1,l=t}let h=(i-t)*.5,c=this.valueSize;this._weightPrev=h/(t-o),this._weightNext=h/(l-i),this._offsetPrev=s*c,this._offsetNext=a*c}interpolate_(e,t,i,r){let s=this.resultBuffer,a=this.sampleValues,o=this.valueSize,l=e*o,h=l-o,c=this._offsetPrev,d=this._offsetNext,u=this._weightPrev,p=this._weightNext,f=(i-t)/(r-t),m=f*f,g=m*f,v=-u*g+2*u*m-u*f,y=(1+u)*g+(-1.5-2*u)*m+(-.5+u)*f+1,x=(-1-p)*g+(1.5+p)*m+.5*f,b=p*g-p*m;for(let e=0;e!==o;++e)s[e]=v*a[c+e]+y*a[h+e]+x*a[l+e]+b*a[d+e];return s}},oG=class extends oV{constructor(e,t,i,r){super(e,t,i,r)}interpolate_(e,t,i,r){let s=this.resultBuffer,a=this.sampleValues,o=this.valueSize,l=e*o,h=l-o,c=(i-t)/(r-t),d=1-c;for(let e=0;e!==o;++e)s[e]=a[h+e]*d+a[l+e]*c;return s}},oH=class extends oV{constructor(e,t,i,r){super(e,t,i,r)}interpolate_(e){return this.copySampleValue_(e-1)}},oW=class{constructor(e,t,i,r){if(void 0===e)throw Error("THREE.KeyframeTrack: track name is undefined");if(void 0===t||0===t.length)throw Error("THREE.KeyframeTrack: no keyframes in track named "+e);this.name=e,this.times=oF(t,this.TimeBufferType),this.values=oF(i,this.ValueBufferType),this.setInterpolation(r||this.DefaultInterpolation)}static toJSON(e){let t=e.constructor,i;if(t.toJSON!==this.toJSON)i=t.toJSON(e);else{i={name:e.name,times:oF(e.times,Array),values:oF(e.values,Array)};let t=e.getInterpolation();t!==e.DefaultInterpolation&&(i.interpolation=t)}return i.type=e.ValueTypeName,i}InterpolantFactoryMethodDiscrete(e){return new oH(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodLinear(e){return new oG(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodSmooth(e){return new oj(this.times,this.values,this.getValueSize(),e)}setInterpolation(e){let t;switch(e){case 2300:t=this.InterpolantFactoryMethodDiscrete;break;case 2301:t=this.InterpolantFactoryMethodLinear;break;case 2302:t=this.InterpolantFactoryMethodSmooth}if(void 0===t){let t="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name;if(void 0===this.createInterpolant){if(e!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw Error(t)}return console.warn("THREE.KeyframeTrack:",t),this}return this.createInterpolant=t,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return 2300;case this.InterpolantFactoryMethodLinear:return 2301;case this.InterpolantFactoryMethodSmooth:return 2302}}getValueSize(){return this.values.length/this.times.length}shift(e){if(0!==e){let t=this.times;for(let i=0,r=t.length;i!==r;++i)t[i]+=e}return this}scale(e){if(1!==e){let t=this.times;for(let i=0,r=t.length;i!==r;++i)t[i]*=e}return this}trim(e,t){let i=this.times,r=i.length,s=0,a=r-1;for(;s!==r&&i[s]<e;)++s;for(;-1!==a&&i[a]>t;)--a;if(++a,0!==s||a!==r){s>=a&&(s=(a=Math.max(a,1))-1);let e=this.getValueSize();this.times=oz(i,s,a),this.values=oz(this.values,s*e,a*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),e=!1);let i=this.times,r=this.values,s=i.length;0===s&&(console.error("THREE.KeyframeTrack: Track is empty.",this),e=!1);let a=null;for(let t=0;t!==s;t++){let r=i[t];if("number"==typeof r&&isNaN(r)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,t,r),e=!1;break}if(null!==a&&a>r){console.error("THREE.KeyframeTrack: Out of order keys.",this,t,r,a),e=!1;break}a=r}if(void 0!==r&&oN(r))for(let t=0,i=r.length;t!==i;++t){let i=r[t];if(isNaN(i)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,t,i),e=!1;break}}return e}optimize(){let e=oz(this.times),t=oz(this.values),i=this.getValueSize(),r=2302===this.getInterpolation(),s=e.length-1,a=1;for(let o=1;o<s;++o){let s=!1,l=e[o];if(l!==e[o+1]&&(1!==o||l!==e[0])){if(r)s=!0;else{let e=o*i,r=e-i,a=e+i;for(let o=0;o!==i;++o){let i=t[e+o];if(i!==t[r+o]||i!==t[a+o]){s=!0;break}}}}if(s){if(o!==a){e[a]=e[o];let r=o*i,s=a*i;for(let e=0;e!==i;++e)t[s+e]=t[r+e]}++a}}if(s>0){e[a]=e[s];for(let e=s*i,r=a*i,o=0;o!==i;++o)t[r+o]=t[e+o];++a}return a!==e.length?(this.times=oz(e,0,a),this.values=oz(t,0,a*i)):(this.times=e,this.values=t),this}clone(){let e=oz(this.times,0),t=oz(this.values,0),i=new this.constructor(this.name,e,t);return i.createInterpolant=this.createInterpolant,i}};oW.prototype.TimeBufferType=Float32Array,oW.prototype.ValueBufferType=Float32Array,oW.prototype.DefaultInterpolation=2301;var oq=class extends oW{};oq.prototype.ValueTypeName="bool",oq.prototype.ValueBufferType=Array,oq.prototype.DefaultInterpolation=2300,oq.prototype.InterpolantFactoryMethodLinear=void 0,oq.prototype.InterpolantFactoryMethodSmooth=void 0;var oX=class extends oW{};oX.prototype.ValueTypeName="color";var oY=class extends oW{};oY.prototype.ValueTypeName="number";var oQ=class extends oV{constructor(e,t,i,r){super(e,t,i,r)}interpolate_(e,t,i,r){let s=this.resultBuffer,a=this.sampleValues,o=this.valueSize,l=(i-t)/(r-t),h=e*o;for(let e=h+o;h!==e;h+=4)ig.slerpFlat(s,0,a,h-o,a,h,l);return s}},oK=class extends oW{InterpolantFactoryMethodLinear(e){return new oQ(this.times,this.values,this.getValueSize(),e)}};oK.prototype.ValueTypeName="quaternion",oK.prototype.DefaultInterpolation=2301,oK.prototype.InterpolantFactoryMethodSmooth=void 0;var oZ=class extends oW{};oZ.prototype.ValueTypeName="string",oZ.prototype.ValueBufferType=Array,oZ.prototype.DefaultInterpolation=2300,oZ.prototype.InterpolantFactoryMethodLinear=void 0,oZ.prototype.InterpolantFactoryMethodSmooth=void 0;var oJ=class extends oW{};oJ.prototype.ValueTypeName="vector";var o$=class{constructor(e,t=-1,i,r=2500){this.name=e,this.tracks=i,this.duration=t,this.blendMode=r,this.uuid=tk(),this.duration<0&&this.resetDuration()}static parse(e){let t=[],i=e.tracks,r=1/(e.fps||1);for(let e=0,s=i.length;e!==s;++e)t.push((function(e){if(void 0===e.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");let t=function(e){switch(e.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return oY;
3139case"vector":case"vector2":case"vector3":case"vector4":return oJ;case"color":return oX;case"quaternion":return oK;case"bool":case"boolean":return oq;case"string":return oZ}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+e)}(e.type);if(void 0===e.times){let t=[],i=[];oU(e.keys,t,i,"value"),e.times=t,e.values=i}return void 0!==t.parse?t.parse(e):new t(e.name,e.times,e.values,e.interpolation)})(i[e]).scale(r));let s=new this(e.name,e.duration,t,e.blendMode);return s.uuid=e.uuid,s}static toJSON(e){let t=[],i=e.tracks,r={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode};for(let e=0,r=i.length;e!==r;++e)t.push(oW.toJSON(i[e]));return r}static CreateFromMorphTargetSequence(e,t,i,r){let s=t.length,a=[];for(let e=0;e<s;e++){let o=[],l=[];o.push((e+s-1)%s,e,(e+1)%s),l.push(0,1,0);let h=function(e){let t=e.length,i=Array(t);for(let e=0;e!==t;++e)i[e]=e;return i.sort(function(t,i){return e[t]-e[i]}),i}(o);o=ok(o,1,h),l=ok(l,1,h),r||0!==o[0]||(o.push(s),l.push(l[0])),a.push(new oY(".morphTargetInfluences["+t[e].name+"]",o,l).scale(1/i))}return new this(e,-1,a)}static findByName(e,t){let i=e;Array.isArray(e)||(i=e.geometry&&e.geometry.animations||e.animations);for(let e=0;e<i.length;e++)if(i[e].name===t)return i[e];return null}static CreateClipsFromMorphTargetSequences(e,t,i){let r={},s=/^([\w-]*?)([\d]+)$/;for(let t=0,i=e.length;t<i;t++){let i=e[t],a=i.name.match(s);if(a&&a.length>1){let e=a[1],t=r[e];t||(r[e]=t=[]),t.push(i)}}let a=[];for(let e in r)a.push(this.CreateFromMorphTargetSequence(e,r[e],t,i));return a}static parseAnimation(e,t){if(!e)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;let i=function(e,t,i,r,s){if(0!==i.length){let a=[],o=[];oU(i,a,o,r),0!==a.length&&s.push(new e(t,a,o))}},r=[],s=e.name||"default",a=e.fps||30,o=e.blendMode,l=e.length||-1,h=e.hierarchy||[];for(let e=0;e<h.length;e++){let s=h[e].keys;if(!(!s||0===s.length)){if(s[0].morphTargets){let e={},t;for(t=0;t<s.length;t++)if(s[t].morphTargets)for(let i=0;i<s[t].morphTargets.length;i++)e[s[t].morphTargets[i]]=-1;for(let i in e){let e=[],a=[];for(let r=0;r!==s[t].morphTargets.length;++r){let r=s[t];e.push(r.time),a.push(r.morphTarget===i?1:0)}r.push(new oY(".morphTargetInfluence["+i+"]",e,a))}l=e.length*a}else{let a=".bones["+t[e].name+"]";i(oJ,a+".position",s,"pos",r),i(oK,a+".quaternion",s,"rot",r),i(oJ,a+".scale",s,"scl",r)}}}return 0===r.length?null:new this(s,l,r,o)}resetDuration(){let e=this.tracks,t=0;for(let i=0,r=e.length;i!==r;++i){let e=this.tracks[i];t=Math.max(t,e.times[e.times.length-1])}return this.duration=t,this}trim(){for(let e=0;e<this.tracks.length;e++)this.tracks[e].trim(0,this.duration);return this}validate(){let e=!0;for(let t=0;t<this.tracks.length;t++)e=e&&this.tracks[t].validate();return e}optimize(){for(let e=0;e<this.tracks.length;e++)this.tracks[e].optimize();return this}clone(){let e=[];for(let t=0;t<this.tracks.length;t++)e.push(this.tracks[t].clone());return new this.constructor(this.name,this.duration,e,this.blendMode)}toJSON(){return this.constructor.toJSON(this)}},o0={enabled:!1,files:{},add:function(e,t){!1!==this.enabled&&(this.files[e]=t)},get:function(e){if(!1!==this.enabled)return this.files[e]}},o1=class{constructor(e,t,i){let r=this,s=!1,a=0,o=0,l,h=[];this.onStart=void 0,this.onLoad=e,this.onProgress=t,this.onError=i,this.itemStart=function(e){o++,!1===s&&void 0!==r.onStart&&r.onStart(e,a,o),s=!0},this.itemEnd=function(e){a++,void 0!==r.onProgress&&r.onProgress(e,a,o),a===o&&(s=!1,void 0!==r.onLoad&&r.onLoad())},this.itemError=function(e){void 0!==r.onError&&r.onError(e)},this.resolveURL=function(e){return l?l(e):e},this.setURLModifier=function(e){return l=e,this},this.addHandler=function(e,t){return h.push(e,t),this},this.removeHandler=function(e){let t=h.indexOf(e);return -1!==t&&h.splice(t,2),this},this.getHandler=function(e){for(let t=0,i=h.length;t<i;t+=2){let i=h[t],r=h[t+1];if(i.global&&(i.lastIndex=0),i.test(e))return r}return null}}},o2=new o1,o3=class{constructor(e){this.manager=void 0!==e?e:o2,this.crossOrigin="anonymous",this.withCredentials=!1,this.path="",this.resourcePath="",this.requestHeader={}}load(){}loadAsync(e,t){let i=this;return new Promise(function(r,s){i.load(e,r,t,s)})}parse(){}setCrossOrigin(e){return this.crossOrigin=e,this}setWithCredentials(e){return this.withCredentials=e,this}setPath(e){return this.path=e,this}setResourcePath(e){return this.resourcePath=e,this}setRequestHeader(e){return this.requestHeader=e,this}},o4={}
3139,o5=class extends Error{constructor(e,t){super(e),this.response=t}},o6=class extends o3{constructor(e){super(e)}load(e,t,i,r){void 0===e&&(e=""),void 0!==this.path&&(e=this.path+e),e=this.manager.resolveURL(e);let s=o0.get(e);if(void 0!==s)return this.manager.itemStart(e),setTimeout(()=>{t&&t(s),this.manager.itemEnd(e)},0),s;if(void 0!==o4[e]){o4[e].push({onLoad:t,onProgress:i,onError:r});return}o4[e]=[],o4[e].push({onLoad:t,onProgress:i,onError:r});let a=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),o=this.mimeType,l=this.responseType;fetch(a).then(t=>{if(200===t.status||0===t.status){if(0===t.status&&console.warn("THREE.FileLoader: HTTP Status 0 received."),typeof ReadableStream>"u"||void 0===t.body||void 0===t.body.getReader)return t;let i=o4[e],r=t.body.getReader(),s=t.headers.get("Content-Length")||t.headers.get("X-File-Size"),a=s?parseInt(s):0,o=0!==a,l=0;return new Response(new ReadableStream({start(e){(function t(){r.read().then(({done:r,value:s})=>{if(r)e.close();else{let r=new ProgressEvent("progress",{lengthComputable:o,loaded:l+=s.byteLength,total:a});for(let e=0,t=i.length;e<t;e++){let t=i[e];t.onProgress&&t.onProgress(r)}e.enqueue(s),t()}})})()}}))}throw new o5(`fetch for "${t.url}" responded with ${t.status}: ${t.statusText}`,t)}).then(e=>{switch(l){case"arraybuffer":return e.arrayBuffer();case"blob":return e.blob();case"document":return e.text().then(e=>new DOMParser().parseFromString(e,o));case"json":return e.json();default:if(void 0===o)return e.text();{let t=/charset="?([^;"\s]*)"?/i.exec(o),i=new TextDecoder(t&&t[1]?t[1].toLowerCase():void 0);return e.arrayBuffer().then(e=>i.decode(e))}}}).then(t=>{o0.add(e,t);let i=o4[e];delete o4[e];for(let e=0,r=i.length;e<r;e++){let r=i[e];r.onLoad&&r.onLoad(t)}}).catch(t=>{let i=o4[e];if(void 0===i)throw this.manager.itemError(e),t;delete o4[e];for(let e=0,r=i.length;e<r;e++){let r=i[e];r.onError&&r.onError(t)}this.manager.itemError(e)}).finally(()=>{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}},o8=class extends o3{constructor(e){super(e)}load(e,t,i,r){void 0!==this.path&&(e=this.path+e),e=this.manager.resolveURL(e);let s=this,a=o0.get(e);if(void 0!==a)return s.manager.itemStart(e),setTimeout(function(){t&&t(a),s.manager.itemEnd(e)},0),a;let o=t1("img");function l(){c(),o0.add(e,this),t&&t(this),s.manager.itemEnd(e)}function h(t){c(),r&&r(t),s.manager.itemError(e),s.manager.itemEnd(e)}function c(){o.removeEventListener("load",l,!1),o.removeEventListener("error",h,!1)}return o.addEventListener("load",l,!1),o.addEventListener("error",h,!1),"data:"!==e.slice(0,5)&&void 0!==this.crossOrigin&&(o.crossOrigin=this.crossOrigin),s.manager.itemStart(e),o.src=e,o}},o9=class extends o3{constructor(e){super(e)}load(e,t,i,r){let s=new ih,a=new o8(this.manager);return a.setCrossOrigin(this.crossOrigin),a.setPath(this.path),a.load(e,function(e){s.image=e,s.needsUpdate=!0,void 0!==t&&t(s)},i,r),s}},o7=class extends rl{constructor(e,t=1){super(),this.isLight=!0,this.type="Light",this.color=new ii(e),this.intensity=t}dispose(){}copy(e,t){return super.copy(e,t),this.color.copy(e.color),this.intensity=e.intensity,this}toJSON(e){let t=super.toJSON(e);return t.object.color=this.color.getHex(),t.object.intensity=this.intensity,void 0!==this.groundColor&&(t.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(t.object.distance=this.distance),void 0!==this.angle&&(t.object.angle=this.angle),void 0!==this.decay&&(t.object.decay=this.decay),void 0!==this.penumbra&&(t.object.penumbra=this.penumbra),void 0!==this.shadow&&(t.object.shadow=this.shadow.toJSON()),t}},le=class extends o7{constructor(e,t,i){super(e,i),this.isHemisphereLight=!0,this.type="HemisphereLight",this.position.copy(rl.DEFAULT_UP),this.updateMatrix(),this.groundColor=new ii(t)}copy(e,t){return super.copy(e,t),this.groundColor.copy(e.groundColor),this}},lt=new iX,li=new iv,lr=new iv,ls=class{constructor(e){this.camera=e,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new tQ(512,512),this.map=null,this.mapPass=null,this.matrix=new iX,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new so,this._frameExtents=new tQ(1,1),this._viewportCount=1,this._viewports=[new ic(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(e){let t=this.camera,i=this.matrix;li.setFromMatrixPosition(e.matrixWorld),t.position.copy(li),lr.setFromMatrixPosition(e.target.matrixWorld),t.lookAt(lr),t.updateMatrixWorld(),lt.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),this._frustum.setFromProjectionMatrix(lt),i.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),i.multiply(lt)}getViewport(e){return this._viewports[e]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(e){return this.camera=e.camera.clone(),this.bias=e.bias,this.radius=e.radius,this.mapSize.copy(e.mapSize),this}clone(){return new this.constructor().copy(this)}toJSON(){let e={};return 0!==this.bias&&(e.bias=this.bias),0!==this.normalBias&&(e.normalBias=this.normalBias),1!==this.radius&&(e.radiu
3139s=this.radius),(512!==this.mapSize.x||512!==this.mapSize.y)&&(e.mapSize=this.mapSize.toArray()),e.camera=this.camera.toJSON(!1).object,delete e.camera.matrix,e}},la=class extends ls{constructor(){super(new r8(50,1,.5,500)),this.isSpotLightShadow=!0,this.focus=1}updateMatrices(e){let t=this.camera,i=2*tN*e.angle*this.focus,r=this.mapSize.width/this.mapSize.height,s=e.distance||t.far;(i!==t.fov||r!==t.aspect||s!==t.far)&&(t.fov=i,t.aspect=r,t.far=s,t.updateProjectionMatrix()),super.updateMatrices(e)}copy(e){return super.copy(e),this.focus=e.focus,this}},ln=class extends o7{constructor(e,t,i=0,r=Math.PI/3,s=0,a=2){super(e,t),this.isSpotLight=!0,this.type="SpotLight",this.position.copy(rl.DEFAULT_UP),this.updateMatrix(),this.target=new rl,this.distance=i,this.angle=r,this.penumbra=s,this.decay=a,this.map=null,this.shadow=new la}get power(){return this.intensity*Math.PI}set power(e){this.intensity=e/Math.PI}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.angle=e.angle,this.penumbra=e.penumbra,this.decay=e.decay,this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}},lo=new iX,ll=new iv,lh=new iv,lc=class extends ls{constructor(){super(new r8(90,1,.5,500)),this.isPointLightShadow=!0,this._frameExtents=new tQ(4,2),this._viewportCount=6,this._viewports=[new ic(2,1,1,1),new ic(0,1,1,1),new ic(3,1,1,1),new ic(1,1,1,1),new ic(3,0,1,1),new ic(1,0,1,1)],this._cubeDirections=[new iv(1,0,0),new iv(-1,0,0),new iv(0,0,1),new iv(0,0,-1),new iv(0,1,0),new iv(0,-1,0)],this._cubeUps=[new iv(0,1,0),new iv(0,1,0),new iv(0,1,0),new iv(0,1,0),new iv(0,0,1),new iv(0,0,-1)]}updateMatrices(e,t=0){let i=this.camera,r=this.matrix,s=e.distance||i.far;s!==i.far&&(i.far=s,i.updateProjectionMatrix()),ll.setFromMatrixPosition(e.matrixWorld),i.position.copy(ll),lh.copy(i.position),lh.add(this._cubeDirections[t]),i.up.copy(this._cubeUps[t]),i.lookAt(lh),i.updateMatrixWorld(),r.makeTranslation(-ll.x,-ll.y,-ll.z),lo.multiplyMatrices(i.projectionMatrix,i.matrixWorldInverse),this._frustum.setFromProjectionMatrix(lo)}},ld=class extends o7{constructor(e,t,i=0,r=2){super(e,t),this.isPointLight=!0,this.type="PointLight",this.distance=i,this.decay=r,this.shadow=new lc}get power(){return 4*this.intensity*Math.PI}set power(e){this.intensity=e/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.decay=e.decay,this.shadow=e.shadow.clone(),this}},lu=class extends ls{constructor(){super(new sw(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}},lp=class extends o7{constructor(e,t){super(e,t),this.isDirectionalLight=!0,this.type="DirectionalLight",this.position.copy(rl.DEFAULT_UP),this.updateMatrix(),this.target=new rl,this.shadow=new lu}dispose(){this.shadow.dispose()}copy(e){return super.copy(e),this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}},lf=class extends rz{constructor(){super(),this.isInstancedBufferGeometry=!0,this.type="InstancedBufferGeometry",this.instanceCount=1/0}copy(e){return super.copy(e),this.instanceCount=e.instanceCount,this}toJSON(){let e=super.toJSON();return e.instanceCount=this.instanceCount,e.isInstancedBufferGeometry=!0,e}},lm=class extends o3{constructor(e){super(e)}load(e,t,i,r){let s=this,a=new o6(s.manager);a.setPath(s.path),a.setRequestHeader(s.requestHeader),a.setWithCredentials(s.withCredentials),a.load(e,function(i){try{t(s.parse(JSON.parse(i)))}catch(t){r?r(t):console.error(t),s.manager.itemError(e)}},i,r)}parse(e){let t={},i={};function r(e,r){if(void 0!==t[r])return t[r];let s=e.interleavedBuffers[r],a=function(e,t){if(void 0!==i[t])return i[t];let r=new Uint32Array(e.arrayBuffers[t]).buffer;return i[t]=r,r}(e,s.buffer),o=new nw(t0(s.type,a),s.stride);return o.uuid=s.uuid,t[r]=o,o}let s=e.isInstancedBufferGeometry?new lf:new rz,a=e.data.index;if(void 0!==a){let e=t0(a.type,a.array);s.setIndex(new rM(e,1))}let o=e.data.attributes;for(let t in o){let i=o[t],a;if(i.isInterleavedBufferAttribute)a=new n_(r(e.data,i.data),i.itemSize,i.offset,i.normalized);else{let e=t0(i.type,i.array);a=new(i.isInstancedBufferAttribute?nP:rM)(e,i.itemSize,i.normalized)}void 0!==i.name&&(a.name=i.name),void 0!==i.usage&&a.setUsage(i.usage),void 0!==i.updateRange&&(a.updateRange.offset=i.updateRange.offset,a.updateRange.count=i.updateRange.count),s.setAttribute(t,a)}let l=e.data.morphAttributes;if(l)for(let t in l){let i=l[t],a=[];for(let t=0,s=i.length;t<s;t++){let s=i[t],o;o=s.isInterleavedBufferAttribute?new n_(r(e.data,s.data),s.itemSize,s.offset,s.normalized):new rM(t0(s.type,s.array),s.itemSize,s.normalized),void 0!==s.name&&(o.name=s.name),a.push(o)}s.morphAttributes[t]=a}e.data.morphTargetsRelative&&(s.morphTargetsRelative=!0);let h=e.data.groups||e.data.drawcalls||e.data.offsets;if(void 0!==h)for(let e=0,t=h.length;e!==t;++e){let t=h[e];s.addGroup(t.start,t.count,t.materialIndex)}let c=e.data.boundingSphere;if(void 0!==c){let e=new iv;void 0!==c.center&&e.fromArray(c.center),s.boundingSphere=new iN(e,c.radius)}return e.name&&(s.name=e.name),e.userData&&(s.userData=e.userData),s}},lg=class{constructor(e=!0){this.autoStart=e,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=lv(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let e=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){let t=lv();e=(t-this.oldTime)/1e3,this.oldTime=t,this.elapsedTime+=e}return e}};function lv(){return(typeof performance>"u"?Date:performance).now()}var ly=class{constructor(e,t,i){let r,s,a;switch(this.binding=e,this.valueSize=i,t){case"quaternion":r=this._slerp,s=this._slerpAdditive,a=this._setAdditiveIdentityQuaternion,this.buffer=new Float64Array(6*i),this._workIndex=5;break;case"string":case"bool":r=this._select,s=this._select,a=this._setAdditiveIdentityOther,this.buffer=Array(5*i);break;default:r=this._lerp,s=this._lerpAdditive,a=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*i)}this._mixBufferRegion=r,this._mixBufferRegionAdditive=s,this._setIdentity=a,this._origIndex=3,this._addIndex=4,this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,this.useCount=0,this.referenceCount=0}accumulate(e,t){let i=this.buffer,r=this.valueSize,s=e*r+r,a=this.cumulativeWeight;if(0===a){for(let e=0;e!==r;++e)i[s+e]=i[e];a=t}else{a+=t;let e=t/a;this._mixBufferRegion(i,s,0,e,r)}this.cumulativeWeight=a}accumulateAdditive(e){let t=this.buffer,i=this.valueSize,r=i*this._addIndex;0===this.cumulativeWeightAdditive&&this._setIdentity(),this._mixBufferRegionAdditive(t,r,0,e,i),this.cumulativeWeightAdditive+=e}apply(e){let t=this.valueSize,i=this.buffer,r=e*t+t,s=this.cumulativeWeight,a=this.cumulativeWeightAdditive,o=this.binding;if(this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,s<1){let e=t*this._origIndex;this._mixBufferRegion(i,r,e,1-s,t)}a>0&&this._mixBufferRegionAdditive(i,r,this._addIndex*t,1,t);for(let e=t,s=t+t;e!==s;++e)if(i[e]!==i[e+t]){o.setValue(i,r);break}}saveOriginalState(){let e=this.binding,t=this.buffer,i=this.valueSize,r=i*this._origIndex;e.getValue(t,r);for(let e=i;e!==r;++e)t[e]=t[r+e%i];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){let e=3*this.valueSize;this.binding.setValue(this.buffer,e)}_setAdditiveIdentityNumeric(){let e=this._addIndex*this.valueSize,t=e+this.valueSize;
3139for(let i=e;i<t;i++)this.buffer[i]=0}_setAdditiveIdentityQuaternion(){this._setAdditiveIdentityNumeric(),this.buffer[this._addIndex*this.valueSize+3]=1}_setAdditiveIdentityOther(){let e=this._origIndex*this.valueSize,t=this._addIndex*this.valueSize;for(let i=0;i<this.valueSize;i++)this.buffer[t+i]=this.buffer[e+i]}_select(e,t,i,r,s){if(r>=.5)for(let r=0;r!==s;++r)e[t+r]=e[i+r]}_slerp(e,t,i,r){ig.slerpFlat(e,t,e,t,e,i,r)}_slerpAdditive(e,t,i,r,s){let a=this._workIndex*s;ig.multiplyQuaternionsFlat(e,a,e,t,e,i),ig.slerpFlat(e,t,e,t,e,a,r)}_lerp(e,t,i,r,s){let a=1-r;for(let o=0;o!==s;++o){let s=t+o;e[s]=e[s]*a+e[i+o]*r}}_lerpAdditive(e,t,i,r,s){for(let a=0;a!==s;++a){let s=t+a;e[s]=e[s]+e[i+a]*r}}},lx="\\[\\]\\.:\\/",lb=RegExp("["+lx+"]","g"),lw="[^"+lx+"]",lS="[^"+lx.replace("\\.","")+"]",l_=RegExp("^"+/((?:WC+[\/:])*)/.source.replace("WC",lw)+/(WCOD+)?/.source.replace("WCOD",lS)+/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",lw)+/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",lw)+"$"),lA=["material","materials","bones","map"],lM=class{constructor(e,t,i){let r=i||lE.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();let i=this._targetGroup.nCachedObjects_,r=this._bindings[i];void 0!==r&&r.getValue(e,t)}setValue(e,t){let i=this._bindings;for(let r=this._targetGroup.nCachedObjects_,s=i.length;r!==s;++r)i[r].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].unbind()}},lE=class{constructor(e,t,i){this.path=t,this.parsedPath=i||lE.parseTrackName(t),this.node=lE.findNode(e,this.parsedPath.nodeName)||e,this.rootNode=e,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(e,t,i){return e&&e.isAnimationObjectGroup?new lE.Composite(e,t,i):new lE(e,t,i)}static sanitizeNodeName(e){return e.replace(/\s/g,"_").replace(lb,"")}static parseTrackName(e){let t=l_.exec(e);if(null===t)throw Error("PropertyBinding: Cannot parse trackName: "+e);let i={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},r=i.nodeName&&i.nodeName.lastIndexOf(".");if(void 0!==r&&-1!==r){let e=i.nodeName.substring(r+1);-1!==lA.indexOf(e)&&(i.nodeName=i.nodeName.substring(0,r),i.objectName=e)}if(null===i.propertyName||0===i.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+e);return i}static findNode(e,t){if(void 0===t||""===t||"."===t||-1===t||t===e.name||t===e.uuid)return e;if(e.skeleton){let i=e.skeleton.getBoneByName(t);if(void 0!==i)return i}if(e.children){let i=function(e){for(let r=0;r<e.length;r++){let s=e[r];if(s.name===t||s.uuid===t)return s;let a=i(s.children);if(a)return a}return null},r=i(e.children);if(r)return r}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(e,t){e[t]=this.targetObject[this.propertyName]}_getValue_array(e,t){let i=this.resolvedProperty;for(let r=0,s=i.length;r!==s;++r)e[t++]=i[r]}_getValue_arrayElement(e,t){e[t]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(e,t){this.resolvedProperty.toArray(e,t)}_setValue_direct(e,t){this.targetObject[this.propertyName]=e[t]}_setValue_direct_setNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(e,t){let i=this.resolvedProperty;for(let r=0,s=i.length;r!==s;++r)i[r]=e[t++]}_setValue_array_setNeedsUpdate(e,t){let i=this.resolvedProperty;for(let r=0,s=i.length;r!==s;++r)i[r]=e[t++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(e,t){let i=this.resolvedProperty;for(let r=0,s=i.length;r!==s;++r)i[r]=e[t++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(e,t){this.resolvedProperty[this.propertyIndex]=e[t]}_setValue_arrayElement_setNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(e,t){this.resolvedProperty.fromArray(e,t)}_setValue_fromArray_setNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.needsUpdate=!0}
3139_setValue_fromArray_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(e,t){this.bind(),this.getValue(e,t)}_setValue_unbound(e,t){this.bind(),this.setValue(e,t)}bind(){let e=this.node,t=this.parsedPath,i=t.objectName,r=t.propertyName,s=t.propertyIndex;if(e||(e=lE.findNode(this.rootNode,t.nodeName)||this.rootNode,this.node=e),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!e){console.error("THREE.PropertyBinding: Trying to update node for track: "+this.path+" but it wasn't found.");return}if(i){let r=t.objectIndex;switch(i){case"materials":if(!e.material){console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!e.material.materials){console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.",this);return}e=e.material.materials;break;case"bones":if(!e.skeleton){console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.",this);return}e=e.skeleton.bones;for(let t=0;t<e.length;t++)if(e[t].name===r){r=t;break}break;case"map":if("map"in e){e=e.map;break}if(!e.material){console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!e.material.map){console.error("THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.",this);return}e=e.material.map;break;default:if(void 0===e[i]){console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.",this);return}e=e[i]}if(void 0!==r){if(void 0===e[r]){console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.",this,e);return}e=e[r]}}let a=e[r];if(void 0===a){console.error("THREE.PropertyBinding: Trying to update property for track: "+t.nodeName+"."+r+" but it wasn't found.",e);return}let o=this.Versioning.None;this.targetObject=e,void 0!==e.needsUpdate?o=this.Versioning.NeedsUpdate:void 0!==e.matrixWorldNeedsUpdate&&(o=this.Versioning.MatrixWorldNeedsUpdate);let l=this.BindingType.Direct;if(void 0!==s){if("morphTargetInfluences"===r){if(!e.geometry){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.",this);return}if(!e.geometry.morphAttributes){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.",this);return}void 0!==e.morphTargetDictionary[s]&&(s=e.morphTargetDictionary[s])}l=this.BindingType.ArrayElement,this.resolvedProperty=a,this.propertyIndex=s}else void 0!==a.fromArray&&void 0!==a.toArray?(l=this.BindingType.HasFromToArray,this.resolvedProperty=a):Array.isArray(a)?(l=this.BindingType.EntireArray,this.resolvedProperty=a):this.propertyName=r;this.getValue=this.GetterByBindingType[l],this.setValue=this.SetterByBindingTypeAndVersioning[l][o]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}};lE.Composite=lM,lE.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},lE.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},lE.prototype.GetterByBindingType=[lE.prototype._getValue_direct,lE.prototype._getValue_array,lE.prototype._getValue_arrayElement,lE.prototype._getValue_toArray],lE.prototype.SetterByBindingTypeAndVersioning=[[lE.prototype._setValue_direct,lE.prototype._setValue_direct_setNeedsUpdate,lE.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[lE.prototype._setValue_array,lE.prototype._setValue_array_setNeedsUpdate,lE.prototype._setValue_array_setMatrixWorldNeedsUpdate],[lE.prototype._setValue_arrayElement,lE.prototype._setValue_arrayElement_setNeedsUpdate,lE.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[lE.prototype._setValue_fromArray,lE.prototype._setValue_fromArray_setNeedsUpdate,lE.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];var lC=class{constructor(e,t,i=null,r=t.blendMode){this._mixer=e,this._clip=t,this._localRoot=i,this.blendMode=r;let s=t.tracks,a=s.length,o=Array(a),l={endingStart:2400,endingEnd:2400};for(let e=0;e!==a;++e){let t=s[e].createInterpolant(null);o[e]=t,t.settings=l}this._interpolantSettings=l,this._interpolants=o,this._propertyBindings=Array(a),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(e){return this._startTime=e,this}setLoop(e,t){return this.loop=e,this.repetitions=t,this}setEffectiveWeight(e){return this.weight=e,this._effectiveWeight=this.enabled?e:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}
3139fadeIn(e){return this._scheduleFading(e,0,1)}fadeOut(e){return this._scheduleFading(e,1,0)}crossFadeFrom(e,t,i){if(e.fadeOut(t),this.fadeIn(t),i){let i=this._clip.duration,r=e._clip.duration;e.warp(1,r/i,t),this.warp(i/r,1,t)}return this}crossFadeTo(e,t,i){return e.crossFadeFrom(this,t,i)}stopFading(){let e=this._weightInterpolant;return null!==e&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}setEffectiveTimeScale(e){return this.timeScale=e,this._effectiveTimeScale=this.paused?0:e,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(e){return this.timeScale=this._clip.duration/e,this.stopWarping()}syncWith(e){return this.time=e.time,this.timeScale=e.timeScale,this.stopWarping()}halt(e){return this.warp(this._effectiveTimeScale,0,e)}warp(e,t,i){let r=this._mixer,s=r.time,a=this.timeScale,o=this._timeScaleInterpolant;null===o&&(o=r._lendControlInterpolant(),this._timeScaleInterpolant=o);let l=o.parameterPositions,h=o.sampleValues;return l[0]=s,l[1]=s+i,h[0]=e/a,h[1]=t/a,this}stopWarping(){let e=this._timeScaleInterpolant;return null!==e&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(e,t,i,r){if(!this.enabled){this._updateWeight(e);return}let s=this._startTime;if(null!==s){let r=(e-s)*i;r<0||0===i?t=0:(this._startTime=null,t=i*r)}t*=this._updateTimeScale(e);let a=this._updateTime(t),o=this._updateWeight(e);if(o>0){let e=this._interpolants,t=this._propertyBindings;if(2501===this.blendMode)for(let i=0,r=e.length;i!==r;++i)e[i].evaluate(a),t[i].accumulateAdditive(o);else for(let i=0,s=e.length;i!==s;++i)e[i].evaluate(a),t[i].accumulate(r,o)}}_updateWeight(e){let t=0;if(this.enabled){t=this.weight;let i=this._weightInterpolant;if(null!==i){let r=i.evaluate(e)[0];t*=r,e>i.parameterPositions[1]&&(this.stopFading(),0===r&&(this.enabled=!1))}}return this._effectiveWeight=t,t}_updateTimeScale(e){let t=0;if(!this.paused){t=this.timeScale;let i=this._timeScaleInterpolant;null!==i&&(t*=i.evaluate(e)[0],e>i.parameterPositions[1]&&(this.stopWarping(),0===t?this.paused=!0:this.timeScale=t))}return this._effectiveTimeScale=t,t}_updateTime(e){let t=this._clip.duration,i=this.loop,r=this.time+e,s=this._loopCount,a=2202===i;if(0===e)return -1===s?r:a&&(1&s)==1?t-r:r;if(2200===i){-1===s&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(r>=t)r=t;else if(r<0)r=0;else{this.time=r;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=r,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(-1===s&&(e>=0?(s=0,this._setEndings(!0,0===this.repetitions,a)):this._setEndings(0===this.repetitions,!0,a)),r>=t||r<0){let i=Math.floor(r/t);r-=t*i,s+=Math.abs(i);let o=this.repetitions-s;if(o<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,r=e>0?t:0,this.time=r,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(1===o){let t=e<0;this._setEndings(t,!t,a)}else this._setEndings(!1,!1,a);this._loopCount=s,this.time=r,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:i})}}else this.time=r;if(a&&(1&s)==1)return t-r}return r}_setEndings(e,t,i){let r=this._interpolantSettings;i?(r.endingStart=2401,r.endingEnd=2401):(e?r.endingStart=this.zeroSlopeAtStart?2401:2400:r.endingStart=2402,t?r.endingEnd=this.zeroSlopeAtEnd?2401:2400:r.endingEnd=2402)}_scheduleFading(e,t,i){let r=this._mixer,s=r.time,a=this._weightInterpolant;null===a&&(a=r._lendControlInterpolant(),this._weightInterpolant=a);let o=a.parameterPositions,l=a.sampleValues;return o[0]=s,l[0]=t,o[1]=s+e,l[1]=i,this}},lT=new Float32Array(1),lP=class extends tL{constructor(e){super(),this._root=e,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(e,t){let i=e._localRoot||this._root,r=e._clip.tracks,s=r.length,a=e._propertyBindings,o=e._interpolants,l=i.uuid,h=this._bindingsByRootAndName,c=h[l];void 0===c&&(c={},h[l]=c);for(let e=0;e!==s;++e){let s=r[e],h=s.name,d=c[h];if(void 0!==d)++d.referenceCount,a[e]=d;else{if(void 0!==(d=a[e])){null===d._cacheIndex&&(++d.referenceCount,this._addInactiveBinding(d,l,h));continue}let r=t&&t._propertyBindings[e].binding.parsedPath;d=new ly(lE.create(i,h,r),s.ValueTypeName,s.getValueSize()),++d.referenceCount,this._addInactiveBinding(d,l,h),a[e]=d}o[e].resultBuffer=d.buffer}}_activateAction(e){if(!this._isActiveAction(e)){if(null===e._cacheIndex){let t=(e._localRoot||this._root).uuid,i=e._clip.uuid,r
vendor: 5,830 bytes, line 3139
3139=this._actionsByClip[i];this._bindAction(e,r&&r.knownActions[0]),this._addInactiveAction(e,i,t)}let t=e._propertyBindings;for(let e=0,i=t.length;e!==i;++e){let i=t[e];0==i.useCount++&&(this._lendBinding(i),i.saveOriginalState())}this._lendAction(e)}}_deactivateAction(e){if(this._isActiveAction(e)){let t=e._propertyBindings;for(let e=0,i=t.length;e!==i;++e){let i=t[e];0==--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(e)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;let e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}}_isActiveAction(e){let t=e._cacheIndex;return null!==t&&t<this._nActiveActions}_addInactiveAction(e,t,i){let r=this._actions,s=this._actionsByClip,a=s[t];if(void 0===a)a={knownActions:[e],actionByRoot:{}},e._byClipCacheIndex=0,s[t]=a;else{let t=a.knownActions;e._byClipCacheIndex=t.length,t.push(e)}e._cacheIndex=r.length,r.push(e),a.actionByRoot[i]=e}_removeInactiveAction(e){let t=this._actions,i=t[t.length-1],r=e._cacheIndex;i._cacheIndex=r,t[r]=i,t.pop(),e._cacheIndex=null;let s=e._clip.uuid,a=this._actionsByClip,o=a[s],l=o.knownActions,h=l[l.length-1],c=e._byClipCacheIndex;h._byClipCacheIndex=c,l[c]=h,l.pop(),e._byClipCacheIndex=null;let d=o.actionByRoot,u=(e._localRoot||this._root).uuid;delete d[u],0===l.length&&delete a[s],this._removeInactiveBindingsForAction(e)}_removeInactiveBindingsForAction(e){let t=e._propertyBindings;for(let e=0,i=t.length;e!==i;++e){let i=t[e];0==--i.referenceCount&&this._removeInactiveBinding(i)}}_lendAction(e){let t=this._actions,i=e._cacheIndex,r=this._nActiveActions++,s=t[r];e._cacheIndex=r,t[r]=e,s._cacheIndex=i,t[i]=s}_takeBackAction(e){let t=this._actions,i=e._cacheIndex,r=--this._nActiveActions,s=t[r];e._cacheIndex=r,t[r]=e,s._cacheIndex=i,t[i]=s}_addInactiveBinding(e,t,i){let r=this._bindingsByRootAndName,s=this._bindings,a=r[t];void 0===a&&(a={},r[t]=a),a[i]=e,e._cacheIndex=s.length,s.push(e)}_removeInactiveBinding(e){let t=this._bindings,i=e.binding,r=i.rootNode.uuid,s=i.path,a=this._bindingsByRootAndName,o=a[r],l=t[t.length-1],h=e._cacheIndex;l._cacheIndex=h,t[h]=l,t.pop(),delete o[s],0===Object.keys(o).length&&delete a[r]}_lendBinding(e){let t=this._bindings,i=e._cacheIndex,r=this._nActiveBindings++,s=t[r];e._cacheIndex=r,t[r]=e,s._cacheIndex=i,t[i]=s}_takeBackBinding(e){let t=this._bindings,i=e._cacheIndex,r=--this._nActiveBindings,s=t[r];e._cacheIndex=r,t[r]=e,s._cacheIndex=i,t[i]=s}_lendControlInterpolant(){let e=this._controlInterpolants,t=this._nActiveControlInterpolants++,i=e[t];return void 0===i&&((i=new oG(new Float32Array(2),new Float32Array(2),1,lT)).__cacheIndex=t,e[t]=i),i}_takeBackControlInterpolant(e){let t=this._controlInterpolants,i=e.__cacheIndex,r=--this._nActiveControlInterpolants,s=t[r];e.__cacheIndex=r,t[r]=e,s.__cacheIndex=i,t[i]=s}clipAction(e,t,i){let r=t||this._root,s=r.uuid,a="string"==typeof e?o$.findByName(r,e):e,o=null!==a?a.uuid:e,l=this._actionsByClip[o],h=null;if(void 0===i&&(i=null!==a?a.blendMode:2500),void 0!==l){let e=l.actionByRoot[s];if(void 0!==e&&e.blendMode===i)return e;h=l.knownActions[0],null===a&&(a=h._clip)}if(null===a)return null;let c=new lC(this,a,t,i);return this._bindAction(c,h),this._addInactiveAction(c,o,s),c}existingAction(e,t){let i=t||this._root,r=i.uuid,s="string"==typeof e?o$.findByName(i,e):e,a=s?s.uuid:e,o=this._actionsByClip[a];return void 0!==o&&o.actionByRoot[r]||null}stopAllAction(){let e=this._actions,t=this._nActiveActions;for(let i=t-1;i>=0;--i)e[i].stop();return this}update(e){e*=this.timeScale;let t=this._actions,i=this._nActiveActions,r=this.time+=e,s=Math.sign(e),a=this._accuIndex^=1;for(let o=0;o!==i;++o)t[o]._update(r,e,s,a);let o=this._bindings,l=this._nActiveBindings;for(let e=0;e!==l;++e)o[e].apply(a);return this}setTime(e){this.time=0;for(let e=0;e<this._actions.length;e++)this._actions[e].time=0;return this.update(e)}getRoot(){return this._root}uncacheClip(e){let t=this._actions,i=e.uuid,r=this._actionsByClip,s=r[i];if(void 0!==s){let e=s.knownActions;for(let i=0,r=e.length;i!==r;++i){let r=e[i];this._deactivateAction(r);let s=r._cacheIndex,a=t[t.length-1];r._cacheIndex=null,r._byClipCacheIndex=null,a._cacheIndex=s,t[s]=a,t.pop(),this._removeInactiveBindingsForAction(r)}delete r[i]}}uncacheRoot(e){let t=e.uuid,i=this._actionsByClip;for(let e in i){let r=i[e].actionByRoot[t];void 0!==r&&(this._deactivateAction(r),this._removeInactiveAction(r))}let r=this._bindingsByRootAndName[t];if(void 0!==r)for(let e in r){let t=r[e];t.restoreOriginalState(),this._removeInactiveBinding(t)}}uncacheAction(e,t){let i=this.existingAction(e,t);null!==i&&(this._deactivateAction(i),this._removeInactiveAction(i))}},lD=class{constructor(e){this.value=e}clone(){return new lD(void 0===this.value.clone?this.value:this.value.clone())}},lI=class{constructor(e,t,i=0,r=1/0){this.ray=new iq(e,t),this.near=i,this.far=r,this.camera=null,this.layers=new i4,this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}}}set(e,t){this.ray.set(e,t)}setFromCamera(e,t){t.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(t.matrixWorld),this.ray.direction.set(e.x,e.y,.5).unproject(t).sub(this.ray.origin).normalize(),this.camera=t):t.isOrthographicCamera?(this.ray.origin.set(e.x,e.y,(t.near+t.far)/(t.near-t.far)).unproject(t),this.ray.direction.set(0,0,-1).transformDirection(t.matrixWorld),this.camera=t):console.error("THREE.Raycaster: 
3139Unsupported camera type: "+t.type)}intersectObject(e,t=!0,i=[]){return lR(e,this,i,t),i.sort(lO),i}intersectObjects(e,t=!0,i=[]){for(let r=0,s=e.length;r<s;r++)lR(e[r],this,i,t);return i.sort(lO),i}};function lO(e,t){return e.distance-t.distance}function lR(e,t,i,r){if(e.layers.test(t.layers)&&e.raycast(t,i),!0===r){let r=e.children;for(let e=0,s=r.length;e<s;e++)lR(r[e],t,i,!0)}}var lL=class{constructor(e=1,t=0,i=0){return this.radius=e,this.phi=t,this.theta=i,this}set(e,t,i){return this.radius=e,this.phi=t,this.theta=i,this}copy(e){return this.radius=e.radius,this.phi=e.phi,this.theta=e.theta,this}makeSafe(){return this.phi=Math.max(1e-6,Math.min(Math.PI-1e-6,this.phi)),this}setFromVector3(e){return this.setFromCartesianCoords(e.x,e.y,e.z)}setFromCartesianCoords(e,t,i){return this.radius=Math.sqrt(e*e+t*t+i*i),0===this.radius?(this.theta=0,this.phi=0):(this.theta=Math.atan2(e,i),this.phi=Math.acos(tU(t/this.radius,-1,1))),this}clone(){return new this.constructor().copy(this)}},lB=new tQ,lz=class{constructor(e=new tQ(1/0,1/0),t=new tQ(-1/0,-1/0)){this.isBox2=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromPoints(e){this.makeEmpty();for(let t=0,i=e.length;t<i;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let i=lB.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(i),this.max.copy(e).add(i),this}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y}getCenter(e){return this.isEmpty()?e.set(0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}containsPoint(e){return!(e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(e){return!(e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y)}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return lB.copy(e).clamp(this.min,this.max).sub(e).length()}intersect(e){return this.min.max(e.min),this.max.min(e.max),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}},lF=new iv,lN=new iv,lk=class{constructor(e=new iv,t=new iv){this.start=e,this.end=t}set(e,t){return this.start.copy(e),this.end.copy(t),this}copy(e){return this.start.copy(e.start),this.end.copy(e.end),this}getCenter(e){return e.addVectors(this.start,this.end).multiplyScalar(.5)}delta(e){return e.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(e,t){return this.delta(t).multiplyScalar(e).add(this.start)}closestPointToPointParameter(e,t){lF.subVectors(e,this.start),lN.subVectors(this.end,this.start);let i=lN.dot(lN),r=lN.dot(lF)/i;return t&&(r=tU(r,0,1)),r}closestPointToPoint(e,t,i){let r=this.closestPointToPointParameter(e,t);return this.delta(i).multiplyScalar(r).add(this.start)}applyMatrix4(e){return this.start.applyMatrix4(e),this.end.applyMatrix4(e),this}equals(e){return e.start.equals(this.start)&&e.end.equals(this.end)}clone(){return new this.constructor().copy(this)}},lU=new iv,lV=class extends rl{constructor(e,t){super(),this.light=e,this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.color=t,this.type="SpotLightHelper";let i=new rz,r=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let e=0,t=1;e<32;e++,t++){let i=e/32*Math.PI*2,s=t/32*Math.PI*2;r.push(Math.cos(i),Math.sin(i),1,Math.cos(s),Math.sin(s),1)}i.setAttribute("position",new rT(r,3));let s=new nz({fog:!1,toneMapped:!1});this.cone=new nW(i,s),this.add(this.cone),this.update()}dispose(){this.cone.geometry.dispose(),this.cone.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),this.light.target.updateWorldMatrix(!0,!1);let e=this.light.distance?this.light.distance:1e3,t=e*Math.tan(this.light.angle);this.cone.scale.set(t,t,e),lU.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(lU),void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)}},lj=class extends rK{constructor(e,t,i){super(new oO(t,4,2),new rS({wireframe:!0,fog:!1,toneMapped:!1})),this.light=e,this.color=i,this.type="PointLightHelper",this.matrix=this.light.matrixWorld,this.matrixAutoUpdate=!1,this.update()}dispose(){this.geometry.dispose(),this.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),void 0!==this.color?this.material.color.set(this.color):this.material.color.copy(this.light.color)}},lG=new iv,lH=new iv,lW=new iv,lq=class extends rl{constructor(e,t,i){super(),this.light=e,this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.color=i,this.type="DirectionalLightHelper",void 0===t&&(t=1);let r=new rz;r.setAttribute("position",new rT([-t,t,0,t,t,0,t,-t,0,-t,-t,0,-t,t,0],3));let s=new nz({fog:!1,toneMapped:!1});this.lightPlane=new nj(r,s),this.add(this.lightPlane),(r=new rz).setAttribute("position",new rT([0,0,0,0,0,1],3)),this.targetLine=new nj(r,s),this.add(this.targetLine),this.update()}dispose(){this.lightPlane.geometry.dispose(),this.lightPlane.material.dispose(),this.targetLine.geometry.dispose(),this.targetLine.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),this.light.target.updateWorldMatrix(!0,!1),lG.setFromMatrixPosition(this.light.matrixWorld),lH.setFromMatrixPosition(this.light.target.matrixWorld),lW.subVectors(lH,lG),this.lightPlane.lookAt(lH),void 0!==this.color?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),this.targetLine.material.color.copy(this.light.color)),this.targetLine.lookAt(lH),this.targetLine.scale.z
3139=lW.length()}},lX=new iv,lY=new r6,lQ=class extends nW{constructor(e){let t=new rz,i=new nz({color:16777215,vertexColors:!0,toneMapped:!1}),r=[],s=[],a={};function o(e,t){l(e),l(t)}function l(e){r.push(0,0,0),s.push(0,0,0),void 0===a[e]&&(a[e]=[]),a[e].push(r.length/3-1)}o("n1","n2"),o("n2","n4"),o("n4","n3"),o("n3","n1"),o("f1","f2"),o("f2","f4"),o("f4","f3"),o("f3","f1"),o("n1","f1"),o("n2","f2"),o("n3","f3"),o("n4","f4"),o("p","n1"),o("p","n2"),o("p","n3"),o("p","n4"),o("u1","u2"),o("u2","u3"),o("u3","u1"),o("c","t"),o("p","c"),o("cn1","cn2"),o("cn3","cn4"),o("cf1","cf2"),o("cf3","cf4"),t.setAttribute("position",new rT(r,3)),t.setAttribute("color",new rT(s,3)),super(t,i),this.type="CameraHelper",this.camera=e,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=a,this.update();let h=new ii(16755200),c=new ii(16711680),d=new ii(43775),u=new ii(16777215),p=new ii(3355443);this.setColors(h,c,d,u,p)}setColors(e,t,i,r,s){let a=this.geometry.getAttribute("color");a.setXYZ(0,e.r,e.g,e.b),a.setXYZ(1,e.r,e.g,e.b),a.setXYZ(2,e.r,e.g,e.b),a.setXYZ(3,e.r,e.g,e.b),a.setXYZ(4,e.r,e.g,e.b),a.setXYZ(5,e.r,e.g,e.b),a.setXYZ(6,e.r,e.g,e.b),a.setXYZ(7,e.r,e.g,e.b),a.setXYZ(8,e.r,e.g,e.b),a.setXYZ(9,e.r,e.g,e.b),a.setXYZ(10,e.r,e.g,e.b),a.setXYZ(11,e.r,e.g,e.b),a.setXYZ(12,e.r,e.g,e.b),a.setXYZ(13,e.r,e.g,e.b),a.setXYZ(14,e.r,e.g,e.b),a.setXYZ(15,e.r,e.g,e.b),a.setXYZ(16,e.r,e.g,e.b),a.setXYZ(17,e.r,e.g,e.b),a.setXYZ(18,e.r,e.g,e.b),a.setXYZ(19,e.r,e.g,e.b),a.setXYZ(20,e.r,e.g,e.b),a.setXYZ(21,e.r,e.g,e.b),a.setXYZ(22,e.r,e.g,e.b),a.setXYZ(23,e.r,e.g,e.b),a.setXYZ(24,t.r,t.g,t.b),a.setXYZ(25,t.r,t.g,t.b),a.setXYZ(26,t.r,t.g,t.b),a.setXYZ(27,t.r,t.g,t.b),a.setXYZ(28,t.r,t.g,t.b),a.setXYZ(29,t.r,t.g,t.b),a.setXYZ(30,t.r,t.g,t.b),a.setXYZ(31,t.r,t.g,t.b),a.setXYZ(32,i.r,i.g,i.b),a.setXYZ(33,i.r,i.g,i.b),a.setXYZ(34,i.r,i.g,i.b),a.setXYZ(35,i.r,i.g,i.b),a.setXYZ(36,i.r,i.g,i.b),a.setXYZ(37,i.r,i.g,i.b),a.setXYZ(38,r.r,r.g,r.b),a.setXYZ(39,r.r,r.g,r.b),a.setXYZ(40,s.r,s.g,s.b),a.setXYZ(41,s.r,s.g,s.b),a.setXYZ(42,s.r,s.g,s.b),a.setXYZ(43,s.r,s.g,s.b),a.setXYZ(44,s.r,s.g,s.b),a.setXYZ(45,s.r,s.g,s.b),a.setXYZ(46,s.r,s.g,s.b),a.setXYZ(47,s.r,s.g,s.b),a.setXYZ(48,s.r,s.g,s.b),a.setXYZ(49,s.r,s.g,s.b),a.needsUpdate=!0}update(){let e=this.geometry,t=this.pointMap;lY.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),lK("c",t,e,lY,0,0,-1),lK("t",t,e,lY,0,0,1),lK("n1",t,e,lY,-1,-1,-1),lK("n2",t,e,lY,1,-1,-1),lK("n3",t,e,lY,-1,1,-1),lK("n4",t,e,lY,1,1,-1),lK("f1",t,e,lY,-1,-1,1),lK("f2",t,e,lY,1,-1,1),lK("f3",t,e,lY,-1,1,1),lK("f4",t,e,lY,1,1,1),lK("u1",t,e,lY,.7,1.1,-1),lK("u2",t,e,lY,-.7,1.1,-1),lK("u3",t,e,lY,0,2,-1),lK("cf1",t,e,lY,-1,0,1),lK("cf2",t,e,lY,1,0,1),lK("cf3",t,e,lY,0,-1,1),lK("cf4",t,e,lY,0,1,1),lK("cn1",t,e,lY,-1,0,-1),lK("cn2",t,e,lY,1,0,-1),lK("cn3",t,e,lY,0,-1,-1),lK("cn4",t,e,lY,0,1,-1),e.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}};function lK(e,t,i,r,s,a,o){lX.set(s,a,o).unproject(r);let l=t[e];if(void 0!==l){let e=i.getAttribute("position");for(let t=0,i=l.length;t<i;t++)e.setXYZ(l[t],lX.x,lX.y,lX.z)}}var lZ=class extends nW{constructor(e,t=16776960){let i=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),r=new rz;r.setIndex(new rM(i,1)),r.setAttribute("position",new rT([1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],3)),super(r,new nz({color:t,toneMapped:!1})),this.box=e,this.type="Box3Helper",this.geometry.computeBoundingSphere()}updateMatrixWorld(e){let t=this.box;t.isEmpty()||(t.getCenter(this.position),t.getSize(this.scale),this.scale.multiplyScalar(.5),super.updateMatrixWorld(e))}dispose(){this.geometry.dispose(),this.material.dispose()}},lJ=class extends nW{constructor(e=1){let t=new rz;t.setAttribute("position",new rT([0,0,0,e,0,0,0,0,0,0,e,0,0,0,0,0,0,e],3)),t.setAttribute("color",new rT([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3)),super(t,new nz({vertexColors:!0,toneMapped:!1})),this.type="AxesHelper"}setColors(e,t,i){let r=new ii,s=this.geometry.attributes.color.array;return r.set(e),r.toArray(s,0),r.toArray(s,3),r.set(t),r.toArray(s,6),r.toArray(s,9),r.set(i),r.toArray(s,12),r.toArray(s,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}},l$=function(){let e=new ArrayBuffer(4),t=new Float32Array(e),i=new Uint32Array(e),r=new Uint32Array(512),s=new Uint32Array(512);for(let e=0;e<256;++e){let t=e-127;t<-27?(r[e]=0,r[256|e]=32768,s[e]=24,s[256|e]=24):t<-14?(r[e]=1024>>-t-14,r[256|e]=1024>>-t-14|32768,s[e]=-t-1,s[256|e]=-t-1):t<=15?(r[e]=t+15<<10,r[256|e]=t+15<<10|32768,s[e]=13,s[256|e]=13):t<128?(r[e]=31744,r[256|e]=64512,s[e]=24,s[256|e]=24):(r[e]=31744,r[256|e]=64512,s[e]=13,s[256|e]=13)}let a=new Uint32Array(2048),o=new Uint32Array(64),l=new Uint32Array(64);for(let e=1;e<1024;++e){let t=e<<13,i=0;for(;(8388608&t)==0;)t<<=1,i-=8388608;t&=-8388609,i+=947912704,a[e]=t|i}for(let e=1024;e<2048;++e)a[e]=939524096+(e-1024<<13);for(let e=1;e<31;++e)o[e]=e<<23;o[31]=1199570944,o[32]=2147483648;for(let e=33;e<63;++e)o[e]=2147483648+(e-32<<23);o[63]=3347054592;for(let e=1;e<64;++e)32!==e&&(l[e]=1024);return{floatView:t,uint32View:i,baseTable:r,shiftTable:s,mantissaTable:a,exponentTable:o,offsetTable:l}}(),l0=Object.freeze({__proto__:null,fromHalfFloat:function(e){let t=e>>10;return l$.uint32View[0]=l$.mantissaTable[l$.offsetTable[t]+(1023&e)]+l$.exponentTable[t],l$.floatView[0]},toHalfFloat:function(e){Math.abs(e)>65504&&console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."),e=tU(e,-65504,65504),l$.floatView[0]=e;let t=l$.uint32View[0],i=t>>23&511;return l$.baseTable[i]+((8388607&t)>>l$.shiftTable[i])}});"u">typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:"149"}})),"u">typeof window&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__="
3139149");var l1=Symbol("target"),l2=Symbol("unsubscribe");function l3(e){return e instanceof Date||e instanceof Set||e instanceof Map||e instanceof WeakSet||e instanceof WeakMap||ArrayBuffer.isView(e)}var l4=Array.isArray;function l5(e){return"symbol"==typeof e}var l6={after:(e,t)=>l4(e)?e.slice(t.length):""===t?e:e.slice(t.length+1),concat:(e,t)=>l4(e)?(e=[...e],t&&e.push(t),e):t&&void 0!==t.toString?(""!==e&&(e+="."),l5(t)?e+t.toString():e+t):e,initial:e=>{if(l4(e))return e.slice(0,-1);if(""===e)return e;let t=e.lastIndexOf(".");return -1===t?"":e.slice(0,t)},last:e=>{if(l4(e))return e[e.length-1]||"";if(""===e)return e;let t=e.lastIndexOf(".");return -1===t?e:e.slice(t+1)},walk:(e,t)=>{if(l4(e))for(let i of e)t(i);else if(""!==e){let i=0,r=e.indexOf(".");if(-1===r)t(e);else for(;i<e.length;)-1===r&&(r=e.length),t(e.slice(i,r)),i=r+1,r=e.indexOf(".",i)}},get(e,t){return this.walk(t,t=>{e&&(e=e[t])}),e}};function l8(e,t,i){return e.isUnsubscribed||t.ignoreSymbols&&l5(i)||t.ignoreUnderscores&&"_"===i.charAt(0)||"ignoreKeys"in t&&t.ignoreKeys.includes(i)}var l9=class{constructor(e){this._equals=e,this._proxyCache=new WeakMap,this._pathCache=new WeakMap,this.isUnsubscribed=!1}_getDescriptorCache(){return void 0===this._descriptorCache&&(this._descriptorCache=new WeakMap),this._descriptorCache}_getProperties(e){let t=this._getDescriptorCache(),i=t.get(e);return void 0===i&&(i={},t.set(e,i)),i}_getOwnPropertyDescriptor(e,t){if(this.isUnsubscribed)return Reflect.getOwnPropertyDescriptor(e,t);let i=this._getProperties(e),r=i[t];return void 0===r&&(r=Reflect.getOwnPropertyDescriptor(e,t),i[t]=r),r}getProxy(e,t,i,r){if(this.isUnsubscribed)return e;let s=e[r],a=s||e;this._pathCache.set(a,t);let o=this._proxyCache.get(a);return void 0===o&&(o=void 0===s?new Proxy(e,i):e,this._proxyCache.set(a,o)),o}getPath(e){return this.isUnsubscribed?void 0:this._pathCache.get(e)}isDetached(e,t){return!Object.is(e,l6.get(t,this.getPath(e)))}defineProperty(e,t,i){return!!Reflect.defineProperty(e,t,i)&&(this.isUnsubscribed||(this._getProperties(e)[t]=i),!0)}setProperty(e,t,i,r,s){if(!this._equals(s,i)||!(t in e)){let s=this._getOwnPropertyDescriptor(e,t);return void 0!==s&&"set"in s?Reflect.set(e,t,i,r):Reflect.set(e,t,i)}return!0}deleteProperty(e,t,i){if(Reflect.deleteProperty(e,t)){if(!this.isUnsubscribed){let r=this._getDescriptorCache().get(e);r&&(delete r[t],this._pathCache.delete(i))}return!0}return!1}isSameDescriptor(e,t,i){let r=this._getOwnPropertyDescriptor(t,i);return void 0!==e&&void 0!==r&&Object.is(e.value,r.value)&&(e.writable||!1)===(r.writable||!1)&&(e.enumerable||!1)===(r.enumerable||!1)&&(e.configurable||!1)===(r.configurable||!1)&&e.get===r.get&&e.set===r.set}isGetInvariant(e,t){let i=this._getOwnPropertyDescriptor(e,t);return void 0!==i&&!0!==i.configurable&&!0!==i.writable}unsubscribe(){this._descriptorCache=null,this._pathCache=null,this._proxyCache=null,this.isUnsubscribed=!0}};function l7(e){return"[object Object]"===toString.call(e)}function he(){return!0}function ht(e,t){return e.length!==t.length||e.some((e,i)=>t[i]!==e)}var hi=new Set(["hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]),hr=new Set(["concat","includes","indexOf","join","keys","lastIndexOf"]),hs={push:he,pop:he,shift:he,unshift:he,copyWithin:ht,reverse:ht,sort:ht,splice:ht,flat:ht,fill:ht},ha=new Set([...hi,...hr,...Object.keys(hs)]);function hn(e,t){if(e.size!==t.size)return!0;for(let i of e)if(!t.has(i))return!0;return!1}var ho=["keys","values","entries"],hl=new Set(["has","toString"]),hh={add:hn,clear:hn,delete:hn,forEach:hn},hc=new Set([...hl,...Object.keys(hh),...ho]);function hd(e,t){let i;if(e.size!==t.size)return!0;for(let[r,s]of e)if((i=t.get(r))!==s||void 0===i&&!t.has(r))return!0;return!1}var hu=new Set([...hl,"get"]),hp={set:hd,clear:hd,delete:hd,forEach:hd},hf=new Set([...hu,...Object.keys(hp),...ho]),hm=class{constructor(e,t,i,r){this._path=t,this._isChanged=!1,this._clonedCache=new Set,this._hasOnValidate=r,this._changes=r?[]:null,this.clone=void 0===t?e:this._shallowClone(e)}static isHandledMethod(e){return hi.has(e)}_shallowClone(e){let t=e;if(l7(e))t={...e};else if(l4(e))t=[...e];else if(e instanceof Date)t=new Date(e);else if(e instanceof Set)t=new Set([...e].map(e=>this._shallowClone(e)));else if(e instanceof Map)for(let[i,r]of(t=new Map,e.entries()))t.set(i,this._shallowClone(r));return this._clonedCache.add(t),t}preferredThisArg(e,t,i,r){return e?(l4(r)?this._onIsChanged=hs[t]:r instanceof Set?this._onIsChanged=hh[t]:r instanceof Map&&(this._onIsChanged=hp[t]),r):i}update(e,t,i){let r=l6.after(e,this._path);if("length"!==t){let e=this.clone;l6.walk(r,t=>{e&&e[t]&&(this._clonedCache.has(e[t])||(e[t]=this._shallowClone(e[t])),e=e[t])}),this._hasOnValidate&&this._changes.push({path:r,property:t,previous:i}),e&&e[t]&&(e[t]=i)}this._isChanged=!0}undo(e){let t;for(let i=this._changes.length-1;-1!==i;i--)t=this._changes[i],l6.get(e,t.path)[t.property]=t.previous}isChanged(e){return void 0===this._onIsChanged?this._isChanged:this._onIsChanged(this.clone,e)}},hg=class extends hm{static isHandledMethod(e){return ha.has(e)}},hv=class extends hm{undo(e){e.setTime(this.clone.getTime())}isChanged(e,t){return!t(this.clone.valueOf(),e.valueOf())}},hy=class extends hm{static isHandledMethod(e){return hc.has(e)}undo(e){for(let t of this.clone)e.add(t);for(let t of e)this.clone.has(t)||e.delete(t)}},hx=class extends hm{static isHandledMethod(e){return hf.has(e)}undo(e){for(let[t,i]of this.clone.entries())e.set(t,i);for(let t of e.keys())this.clone.has(t)||e.delete(t)}},hb=class extends hm{constructor(e,t,i,r){super(void 0,t,i,r),this._arg1=i[0],this._weakValue=e.has(this._arg1)}isChanged(e){return this._weakValue!==e.has(this._arg1)}undo(e){this._weakValue&&!e.has(this._arg1)?e.add(this._arg1):e.delete(this._arg1)}},hw=class extends hm{constructor(e,t,i,r){super(void 0,t,i,r),this._weakKey=i[0],this._weakHas=e.has(this._weakKey),this._weakValue=e.get(this._weakKey)}isChanged(e){return this._weakValue!==e.get(this._weakKey)}undo(e){let t=e.has(this._weakKey);this._weakHas&&!t?e.set(this._weakKey,this._weakValue):!this._weakHas&&t?e.delete(this._weakKey):this._weakValue!==e.get(this._weakKey)&&e.set(this._weakKey,this._weakValue)}},hS=class{constructor(e){this._stack=[],this._hasOnValidate=e}static isHandledType(e){return l7(e)||l4(e)||l3(e)}static isHandledMethod(e,t){return l7(e)?hm.isHandledMethod(t):l4(e)?hg.isHandledMethod(t):e instanceof Set?hy.isHandledMethod(t):e instanceof Map?hx.isH
3139andledMethod(t):l3(e)}get isCloning(){return this._stack.length>0}start(e,t,i){let r=hm;l4(e)?r=hg:e instanceof Date?r=hv:e instanceof Set?r=hy:e instanceof Map?r=hx:e instanceof WeakSet?r=hb:e instanceof WeakMap&&(r=hw),this._stack.push(new r(e,t,i,this._hasOnValidate))}update(e,t,i){this._stack[this._stack.length-1].update(e,t,i)}preferredThisArg(e,t,i){let{name:r}=e,s=hS.isHandledMethod(i,r);return this._stack[this._stack.length-1].preferredThisArg(s,r,t,i)}isChanged(e,t,i){return this._stack[this._stack.length-1].isChanged(e,t,i)}undo(e){void 0!==this._previousClone&&this._previousClone.undo(e)}stop(){return this._previousClone=this._stack.pop(),this._previousClone.clone}},h_={equals:Object.is,isShallow:!1,pathAsArray:!1,ignoreSymbols:!1,ignoreUnderscores:!1,ignoreDetached:!1,details:!1},hA=(e,t,i={})=>{i={...h_,...i};let r=Symbol("ProxyTarget"),{equals:s,isShallow:a,ignoreDetached:o,details:l}=i,h=new l9(s),c="function"==typeof i.onValidate,d=new hS(c),u=(e,t,r,s,a)=>!c||d.isCloning||!0===i.onValidate(l6.concat(h.getPath(e),t),r,s,a),p=(t,r,s,a)=>{l8(h,i,r)||o&&h.isDetached(t,e)||f(h.getPath(t),r,s,a)},f=(e,i,r,s,a)=>{d.isCloning?d.update(e,i,s):t(l6.concat(e,i),r,s,a)},m=e=>e&&(e[r]||e),g=(t,s,l,c)=>("object"==typeof t?null===t:"function"!=typeof t)||t instanceof RegExp||"constructor"===l||a&&!hS.isHandledMethod(s,l)||l8(h,i,l)||h.isGetInvariant(s,l)||o&&h.isDetached(s,e)?t:(void 0===c&&(c=h.getPath(s)),h.getProxy(t,l6.concat(c,l),v,r)),v={get(e,t,i){if(l5(t)){if(t===r||t===l1)return e;if(t===l2&&!h.isUnsubscribed&&0===h.getPath(e).length)return h.unsubscribe(),e}return g(l3(e)?Reflect.get(e,t):Reflect.get(e,t,i),e,t)},set(e,t,i,a){i=m(i);let o=e[r]||e,l=o[t];if(s(l,i)&&t in e)return!0;let c=u(e,t,i,l);return c&&h.setProperty(o,t,i,a,l)?(p(e,t,e[t],l),!0):!c},defineProperty(e,t,i){if(!h.isSameDescriptor(i,e,t)){let r=e[t];u(e,t,i.value,r)&&h.defineProperty(e,t,i,r)&&p(e,t,i.value,r)}return!0},deleteProperty(e,t){if(!Reflect.has(e,t))return!0;let i=Reflect.get(e,t),r=u(e,t,void 0,i);return r&&h.deleteProperty(e,t,i)?(p(e,t,void 0,i),!0):!r},apply(t,i,a){let o=i[r]||i;if(h.isUnsubscribed)return Reflect.apply(t,o,a);if((!1===l||!0!==l&&!l.includes(t.name))&&hS.isHandledType(o)){var c;let r=l6.initial(h.getPath(t)),l=hS.isHandledMethod(o,t.name);d.start(o,r,a);let p=Reflect.apply(t,d.preferredThisArg(t,i,o),l?a.map(e=>m(e)):a),y=d.isChanged(o,s),x=d.stop();if(hS.isHandledType(p)&&l&&(i instanceof Map&&"get"===t.name&&(r=l6.concat(r,a[0])),p=h.getProxy(p,r,v)),y){let i={name:t.name,args:a,result:p},s=d.isCloning?l6.initial(r):r,l=d.isCloning?l6.last(r):"";u(l6.get(e,s),l,o,x,i)?f(s,l,o,x,i):d.undo(o)}return(i instanceof Map||i instanceof Set)&&"object"==typeof(c=p)&&"function"==typeof c.next?function(e,t,i,r,s){let a=e.next;if("entries"===t.name)e.next=function(){let e=a.call(this);return!1===e.done&&(e.value[0]=s(e.value[0],t,e.value[0],r),e.value[1]=s(e.value[1],t,e.value[0],r)),e};else if("values"===t.name){let o=i[l1].keys();e.next=function(){let e=a.call(this);return!1===e.done&&(e.value=s(e.value,t,o.next().value,r)),e}}else e.next=function(){let e=a.call(this);return!1===e.done&&(e.value=s(e.value,t,e.value,r)),e};return e}(p,t,i,r,g):p}return Reflect.apply(t,i,a)}},y=h.getProxy(e,i.pathAsArray?[]:"",v);return t=t.bind(y),c&&(i.onValidate=i.onValidate.bind(y)),y};hA.target=e=>e&&e[l1]||e,hA.unsubscribe=e=>e[l2]||e;var hM="object"==typeof global&&global&&global.Object===Object&&global,hE="object"==typeof self&&self&&self.Object===Object&&self,hC=hM||hE||Function("return this")(),hT=hC.Symbol,hP=Object.prototype,hD=hP.hasOwnProperty,hI=hP.toString,hO=hT?hT.toStringTag:void 0,hR=function(e){var t=hD.call(e,hO),i=e[hO];try{e[hO]=void 0;var r=!0}catch{}var s=hI.call(e);return r&&(t?e[hO]=i:delete e[hO]),s},hL=Object.prototype.toString,hB=hT?hT.toStringTag:void 0,hz=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":hB&&hB in Object(e)?hR(e):hL.call(e)},hF=function(e){return null!=e&&"object"==typeof e},hN=function(e){return"symbol"==typeof e||hF(e)&&"[object Symbol]"==hz(e)},hk=function(e,t){for(var i=-1,r=null==e?0:e.length,s=Array(r);++i<r;)s[i]=t(e[i],i,e);return s},hU=Array.isArray,hV=1/0,hj=hT?hT.prototype:void 0,hG=hj?hj.toString:void 0,hH=function e(t){if("string"==typeof t)return t;if(hU(t))return hk(t,e)+"";if(hN(t))return hG?hG.call(t):"";var i=t+"";return"0"==i&&1/t==-hV?"-0":i},hW=/\s/,hq=function(e){for(var t=e.length;t--&&hW.test(e.charAt(t)););return t},hX=/^\s+/,hY=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},hQ=0/0,hK=/^[-+]0x[0-9a-f]+$/i,hZ=/^0b[01]+$/i,hJ=/^0o[0-7]+$/i,h$=parseInt,h0=function(e){if("number"==typeof e)return e;if(hN(e))return hQ;if(hY(e)){var t,i="function"==typeof e.valueOf?e.valueOf():e;e=hY(i)?i+"":i}if("string"!=typeof e)return 0===e?e:+e;e=(t=e)&&t.slice(0,hq(t)+1).replace(hX,"");var r=hZ.test(e);return r||hJ.test(e)?h$(e.slice(2),r?2:8):hK.test(e)?hQ:+e},h1=function(e){return e},h2=function(e){if(!hY(e))return!1;var t=hz(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}
3139,h3=hC["__core-js_shared__"],h4=(pt=/[^.]+$/.exec(h3&&h3.keys&&h3.keys.IE_PROTO||""))?"Symbol(src)_1."+pt:"",h5=Function.prototype.toString,h6=function(e){if(null!=e){try{return h5.call(e)}catch{}try{return e+""}catch{}}return""},h8=/^\[object .+?Constructor\]$/,h9=Object.prototype,h7=Function.prototype.toString,ce=h9.hasOwnProperty,ct=RegExp("^"+h7.call(ce).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ci=function(e,t){var i,r=e?.[t];return hY(i=r)&&(!h4||!(h4 in i))&&(h2(i)?ct:h8).test(h6(i))?r:void 0},cr=ci(hC,"WeakMap"),cs=Object.create,ca=function(){function e(){}return function(t){if(!hY(t))return{};if(cs)return cs(t);e.prototype=t;var i=new e;return e.prototype=void 0,i}}(),cn=function(e,t,i){switch(i.length){case 0:return e.call(t);case 1:return e.call(t,i[0]);case 2:return e.call(t,i[0],i[1]);case 3:return e.call(t,i[0],i[1],i[2])}return e.apply(t,i)},co=function(e,t){var i=-1,r=e.length;for(t||(t=Array(r));++i<r;)t[i]=e[i];return t},cl=Date.now,ch=function(){try{var e=ci(Object,"defineProperty");return e({},"",{}),e}catch{}}(),cc=(pi=ch?function(e,t){return ch(e,"toString",{configurable:!0,enumerable:!1,value:function(){return t},writable:!0})}:h1,pr=0,ps=0,function(){var e=cl(),t=16-(e-ps);if(ps=e,t>0){if(++pr>=800)return arguments[0]}else pr=0;return pi.apply(void 0,arguments)}),cd=function(e,t){for(var i=-1,r=null==e?0:e.length;++i<r&&!1!==t(e[i],i,e););return e},cu=/^(?:0|[1-9]\d*)$/,cp=function(e,t){var i=typeof e;return!!(t=t??9007199254740991)&&("number"==i||"symbol"!=i&&cu.test(e))&&e>-1&&e%1==0&&e<t},cf=function(e,t,i){"__proto__"==t&&ch?ch(e,t,{configurable:!0,enumerable:!0,value:i,writable:!0}):e[t]=i},cm=function(e,t){return e===t||e!=e&&t!=t},cg=Object.prototype.hasOwnProperty,cv=function(e,t,i){var r=e[t];cg.call(e,t)&&cm(r,i)&&(void 0!==i||t in e)||cf(e,t,i)},cy=function(e,t,i,r){var s=!i;i||(i={});for(var a=-1,o=t.length;++a<o;){var l=t[a],h=r?r(i[l],e[l],l,i,e):void 0;void 0===h&&(h=e[l]),s?cf(i,l,h):cv(i,l,h)}return i},cx=Math.max,cb=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991},cw=function(e){return null!=e&&cb(e.length)&&!h2(e)},cS=Object.prototype,c_=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||cS)},cA=function(e,t){for(var i=-1,r=Array(e);++i<e;)r[i]=t(i);return r},cM=function(e){return hF(e)&&"[object Arguments]"==hz(e)},cE=Object.prototype,cC=cE.hasOwnProperty,cT=cE.propertyIsEnumerable,cP=cM(function(){return arguments}())?cM:function(e){return hF(e)&&cC.call(e,"callee")&&!cT.call(e,"callee")},cD="object"==typeof exports&&exports&&!exports.nodeType&&exports,cI=cD&&"object"==typeof module&&module&&!module.nodeType&&module,cO=cI&&cI.exports===cD?hC.Buffer:void 0,cR=(cO?cO.isBuffer:void 0)||function(){return!1},cL={};cL["[object Float32Array]"]=cL["[object Float64Array]"]=cL["[object Int8Array]"]=cL["[object Int16Array]"]=cL["[object Int32Array]"]=cL["[object Uint8Array]"]=cL["[object Uint8ClampedArray]"]=cL["[object Uint16Array]"]=cL["[object Uint32Array]"]=!0,cL["[object Arguments]"]=cL["[object Array]"]=cL["[object ArrayBuffer]"]=cL["[object Boolean]"]=cL["[object DataView]"]=cL["[object Date]"]=cL["[object Error]"]=cL["[object Function]"]=cL["[object Map]"]=cL["[object Number]"]=cL["[object Object]"]=cL["[object RegExp]"]=cL["[object Set]"]=cL["[object String]"]=cL["[object WeakMap]"]=!1;var cB=function(e){return function(t){return e(t)}},cz="object"==typeof exports&&exports&&!exports.nodeType&&exports,cF=cz&&"object"==typeof module&&module&&!module.nodeType&&module,cN=cF&&cF.exports===cz&&hM.process,ck=function(){try{return cF&&cF.require&&cF.require("util").types||cN&&cN.binding&&cN.binding("util")}catch{}}(),cU=ck&&ck.isTypedArray,cV=cU?cB(cU):function(e){return hF(e)&&cb(e.length)&&!!cL[hz(e)]},cj=Object.prototype.hasOwnProperty,cG=function(e,t){var i=hU(e),r=!i&&cP(e),s=!i&&!r&&cR(e),a=!i&&!r&&!s&&cV(e),o=i||r||s||a,l=o?cA(e.length,String):[],h=l.length;for(var c in e)(t||cj.call(e,c))&&!(o&&("length"==c||s&&("offset"==c||"parent"==c)||a&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||cp(c,h)))&&l.push(c);return l},cH=function(e,t){return function(i){return e(t(i))}},cW=cH(Object.keys,Object),cq=Object.prototype.hasOwnProperty,cX=function(e){if(!c_(e))return cW(e);var t=[];for(var i in Object(e))cq.call(e,i)&&"constructor"!=i&&t.push(i);return t},cY=function(e){return cw(e)?cG(e):cX(e)},cQ=function(e){var t=[];if(null!=e)for(var i in Object(e))t.push(i);return t},cK=Object.prototype.hasOwnProperty,cZ=function(e){if(!hY(e))return cQ(e);var t=c_(e),i=[];for(var r in e)"constructor"==r&&(t||!cK.call(e,r))||i.push(r);return i},cJ=function(e){return cw(e)?cG(e,!0):cZ(e)},c$=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,c0=/^\w*$/,c1=function(e,t){if(hU(e))return!1;var i=typeof e;return!!("number"==i||"symbol"==i||"boolean"==i||null==e||hN(e))||c0.test(e)||!c$.test(e)||null!=t&&e in Object(t)},c2=ci(Object,"create"),c3=Object.prototype.hasOwnProperty,c4=Object.prototype.hasOwnProperty;function c5(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var r=e[t];this.set(r[0],r[1])}}c5.prototype.clear=function(){this.__data__=c2?c2(null):{},this.size=0},c5.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},c5.prototype.get=function(e){var t=this.__data__;if(c2){var i=t[e];return"__lodash_hash_undefined__"===i?void 0:i}return c3.call(t,e)?t[e]:void 0},c5.prototype.has=function(e){var t=this.__data__;return c2?void 0!==t[e]:c4.call(t,e)},c5.prototype.set=function(e,t){var i=this.__data__;return this.size+=this.has(e)?0:1,i[e]=c2&&void 0===t?"__lodash_hash_undefined__":t,this};var c6=function(e,t){for(var i=e.length;i--;)if(cm(e[i][0],t))return i;return -1},c8=Array.prototype.splice;function c9(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var r=e[t];this.set(r[0],r[1])}}c9.prototype.clear=function(){this.__data__=[],this.size=0},c9.prototype.delete=function(e){var t=this.__data__,i=c6(t,e);return!(i<0)&&(i==t.length-1?t.pop():c8.call(t,i,1),--this.size,!0)},c9.prototype.get=function(e){var t=this.__data__,i=c6(t,e);return i<0?void 0:t[i][1]},c9.prototype.has=function(e){return c6(this.__data__,e)>-1},c9.prototype.set=function(e,t){var i=this.__data__,r=c6(i,e);return r<0?(++this.size,i.push([e,t])):i[r][1]=t,this};var c7=ci(hC,"Map"),de=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e},dt=function(e,t){var i=e.__data__;return de(t)?i["string"==typeof t?"string":"hash"]:i.map};function di(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var r=e[t];this.set(r[0],r[1])}}function dr(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw TypeError("Expected a function");var i=function(){var r=arguments,s=t?t.apply(this,r):r[0],a=i.cache;if(a.has(s))return a.get(s);var o=e.apply(this,r);return i.cache=a.set(s,o)||a,o};return i.cache=new(dr.Cache||di),i}di.prototype.clear=function(){this.size=0,this.__data__={hash:new c5,map:new(c7||c9),string:new c5}},di.prototype.delete=function(e){var t=dt(this,e).delete(e);return this.size-=t?1:0,t},di.prototype.get=function(e){return dt(this,e).get(e)},di.prototype.has=function(e){return dt(this,e).has(e)},di.prototype.set=function(e,t){var i=dt(this,e),r=i.size;return i.set(e,t),this.size+=i.size==r?0:1,this},dr.Cache=di;var ds=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,da=/\\(\\)?/g,dn=(pn=(pa=dr(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(ds,function(e,i,r,s){t.push(r?s.replace(da,"$1"):i||e)}),t},function(e){return 500===pn.size&&pn.clear(),e})).cache,pa),dl=function(e,t){return hU(e)?e:c1(e,t)?[e]:dn(null==e?"":hH(e))},dh=1/0,dc=function(e){if("string"==typeof e||hN(e))return e;var t=e+"";return"0"==t&&1/e==-dh?"-0":t},dd=function(e,t){t=dl(t,e);for(var i=0,r=t.length;null!=e&&i<r;)e=e[dc(t[i++])];return i&&i==r?e:void 0},du=function(e,t){for(var i=-1,r=t.length,s=e.length;++i<r;)e[s+i]=t[i];return e},dp=hT?hT.isConcatSpreadable:void 0,df=function(e){return hU(e)||cP(e)||!!(dp&&e&&e[dp])},dm=function e(t,i,r,s,a){var o=-1,l=t.length;for(r||(r=df),a||(a=[]);++o<l;){var h=t[o];i>0&&r(h)?i>1?e(h,i-1,r,s,a):du(a,h):s||(a[a.length]=h)}return a},dg=function(e){var t;return cc((t=cx((t=void 0,e.length-1),0),function(){for(var i,r=arguments,s=-1,a=cx(r.length-t,0),o=Array(a);++s<a;)o[s]=r[t+s];s=-1;for(var l=Array(t+1);++s<t;)l[s]=r[s];return l[t]=(null==(i=o)?0:i.length)?dm(i,1):[],cn(e,this,l)}),e+"")},dv=cH(Object.getPrototypeOf,Object),dy=Object.prototype,dx=Function.prototype.toString,db=dy.hasOwnProperty,dw=dx.call(Object),dS=function(e){if(!hF(e)||"[object Object]"!=hz(e))return!1;var t=dv(e);if(null===t)return!0;var i=db.call(t,"constructor")&&t.constructor;return"function"==typeof i&&i instanceof i&&dx.call(i)==dw},d_=function(e,t,i){var r=-1,s=e.length;t<0&&(t=-t>s?0:s+t),(i=i>s?s:i)<0&&(i+=s),s=t>i?0:i-t>>>0,t>>>=0;for(var a=Array(s);++r<s;)a[r]=e[r+t];return a};function dA(e){var t=this.__data__=new c9(e);this.size=t.size}dA.prototype.clear=function(){this.__data__=new c9,this.size=0},dA.prototype.delete=function(e){var t=this.__data__,i=t.delete(e);return this.size=t.size,i},dA.prototype.get=function(e){return this.__data__.get(e)},dA.prototype.has=function(e){return this.__data__.has(e)},dA.prototype.set=function(e,t){var i=this.__data__;if(i instanceof c9){var r=i.__data__;if(!c7||r.length<199)return r.push([e,t]),this.size=++i.size,this;i=this.__data__=new di(r)}return i.set(e,t),this.size=i.size,this};var dM="object"==typeof exports&&exports&&!exports.nodeType&&exports,dE=dM&&"object"==typeof module&&module&&!module.nodeType&&module,dC=dE&&dE.exports===dM?hC.Buffer:void 0,dT=dC?dC.allocUnsafe:void 0,dP=function(e,t){if(t)return e.slice();var i=e.length,r=dT?dT(i):new e.constructor(i);return e.copy(r),r},dD=function(e,t){for(var i=-1,r=null==e?0:e.length,s=0,a=[];++i<r;){var o=e[i];t(o,i,e)&&(a[s++]=o)}return a},dI=function(){return[]},dO=Object.prototype.propertyIsEnumerable,dR=Object.getOwnPropertySymbols,dL=dR?function(e){return null==e?[]:dD(dR(e=Object(e)),function(t){return dO.call(e,t)})}:dI,dB=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)du(t,dL(e)),e=dv(e);return t}:dI,dz=function(e,t,i){var r=t(e);return hU(e)?r:du(r,i(e))},dF=function(e){return dz(e,cY,dL)},dN=function(e){return dz(e,cJ,dB)},dk=ci(hC,"DataView"),dU=ci(hC,"Promise"),dV=ci(hC,"Set"),dj="[object Map]",dG="[object Promise]",dH="[object Set]",dW="[object WeakMap]",dq="[object DataView]",dX=h6(dk),dY=h6(c7),dQ=h6(dU),dK=h6(dV),dZ=h6(cr),dJ=hz;(dk&&dJ(new dk(new ArrayBuffer(1)))!=dq||c7&&dJ(new c7)!=dj||dU&&dJ(dU.resolve())!=dG||dV&&dJ(new dV)!=dH||cr&&dJ(new cr)!=dW)&&(dJ=function(e){var t=hz(e),i="[object Object]"==t?e.constructor:void 0,r=i?h6(i):"";if(r)switch(r){case dX:return dq;case dY:return dj;case dQ:return dG;
3139case dK:return dH;case dZ:return dW}return t});var d$=dJ,d0=Object.prototype.hasOwnProperty,d1=function(e){var t=e.length,i=new e.constructor(t);return t&&"string"==typeof e[0]&&d0.call(e,"index")&&(i.index=e.index,i.input=e.input),i},d2=hC.Uint8Array,d3=function(e){var t=new e.constructor(e.byteLength);return new d2(t).set(new d2(e)),t},d4=function(e,t){var i=t?d3(e.buffer):e.buffer;return new e.constructor(i,e.byteOffset,e.byteLength)},d5=/\w*$/,d6=function(e){var t=new e.constructor(e.source,d5.exec(e));return t.lastIndex=e.lastIndex,t},d8=hT?hT.prototype:void 0,d9=d8?d8.valueOf:void 0,d7=function(e,t){var i=t?d3(e.buffer):e.buffer;return new e.constructor(i,e.byteOffset,e.length)},ue=function(e,t,i){var r=e.constructor;switch(t){case"[object ArrayBuffer]":return d3(e);case"[object Boolean]":case"[object Date]":return new r(+e);case"[object DataView]":return d4(e,i);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return d7(e,i);case"[object Map]":case"[object Set]":return new r;case"[object Number]":case"[object String]":return new r(e);case"[object RegExp]":return d6(e);case"[object Symbol]":return d9?Object(d9.call(e)):{}}},ut=ck&&ck.isMap,ui=ut?cB(ut):function(e){return hF(e)&&"[object Map]"==d$(e)},ur=ck&&ck.isSet,us=ur?cB(ur):function(e){return hF(e)&&"[object Set]"==d$(e)},ua="[object Arguments]",un="[object Function]",uo="[object Object]",ul={};ul[ua]=ul["[object Array]"]=ul["[object ArrayBuffer]"]=ul["[object DataView]"]=ul["[object Boolean]"]=ul["[object Date]"]=ul["[object Float32Array]"]=ul["[object Float64Array]"]=ul["[object Int8Array]"]=ul["[object Int16Array]"]=ul["[object Int32Array]"]=ul["[object Map]"]=ul["[object Number]"]=ul[uo]=ul["[object RegExp]"]=ul["[object Set]"]=ul["[object String]"]=ul["[object Symbol]"]=ul["[object Uint8Array]"]=ul["[object Uint8ClampedArray]"]=ul["[object Uint16Array]"]=ul["[object Uint32Array]"]=!0,ul["[object Error]"]=ul[un]=ul["[object WeakMap]"]=!1;var uh=function e(t,i,r,s,a,o){var l,h=1&i,c=2&i,d=4&i;if(r&&(l=a?r(t,s,a,o):r(t)),void 0!==l)return l;if(!hY(t))return t;var u=hU(t);if(u){if(l=d1(t),!h)return co(t,l)}else{var p,f,m,g,v=d$(t),y=v==un||"[object GeneratorFunction]"==v;if(cR(t))return dP(t,h);if(v==uo||v==ua||y&&!a){if(l=c||y?{}:"function"!=typeof t.constructor||c_(t)?{}:ca(dv(t)),!h)return c?(f=(p=l)&&cy(t,cJ(t),p),cy(t,dB(t),f)):(g=(m=l)&&cy(t,cY(t),m),cy(t,dL(t),g))}else{if(!ul[v])return a?t:{};l=ue(t,v,h)}}o||(o=new dA);var x=o.get(t);if(x)return x;o.set(t,l),us(t)?t.forEach(function(s){l.add(e(s,i,r,s,t,o))}):ui(t)&&t.forEach(function(s,a){l.set(a,e(s,i,r,a,t,o))});var b=d?c?dN:dF:c?cJ:cY,w=u?void 0:b(t);return cd(w||t,function(s,a){w&&(s=t[a=s]),cv(l,a,e(s,i,r,a,t,o))}),l},uc=function(e){return uh(e,5)};function ud(e){var t=-1,i=null==e?0:e.length;for(this.__data__=new di;++t<i;)this.add(e[t])}ud.prototype.add=ud.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},ud.prototype.has=function(e){return this.__data__.has(e)};var uu=function(e,t){for(var i=-1,r=null==e?0:e.length;++i<r;)if(t(e[i],i,e))return!0;return!1},up=function(e,t,i,r,s,a){var o=1&i,l=e.length,h=t.length;if(l!=h&&!(o&&h>l))return!1;var c=a.get(e),d=a.get(t);if(c&&d)return c==t&&d==e;var u=-1,p=!0,f=2&i?new ud:void 0;for(a.set(e,t),a.set(t,e);++u<l;){var m=e[u],g=t[u];if(r)var v=o?r(g,m,u,t,e,a):r(m,g,u,e,t,a);if(void 0!==v){if(v)continue;p=!1;break}if(f){if(!uu(t,function(e,t){if(!f.has(t)&&(m===e||s(m,e,i,r,a)))return f.push(t)})){p=!1;break}}else if(!(m===g||s(m,g,i,r,a))){p=!1;break}}return a.delete(e),a.delete(t),p},uf=function(e){var t=-1,i=Array(e.size);return e.forEach(function(e,r){i[++t]=[r,e]}),i},um=function(e){var t=-1,i=Array(e.size);return e.forEach(function(e){i[++t]=e}),i},ug=hT?hT.prototype:void 0,uv=ug?ug.valueOf:void 0,uy=function(e,t,i,r,s,a,o){switch(i){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)break;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!a(new d2(e),new d2(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return cm(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var l=uf;case"[object Set]":var h=1&r;if(l||(l=um),e.size!=t.size&&!h)break;var c=o.get(e);if(c)return c==t;r|=2,o.set(e,t);var d=up(l(e),l(t),r,s,a,o);return o.delete(e),d;case"[object Symbol]":if(uv)return uv.call(e)==uv.call(t)}return!1},ux=Object.prototype.hasOwnProperty,ub=function(e,t,i,r,s,a){var o=1&i,l=dF(e),h=l.length;if(h!=dF(t).length&&!o)return!1;for(var c=h;c--;){var d=l[c];if(!(o?d in t:ux.call(t,d)))return!1}var u=a.get(e),p=a.get(t);if(u&&p)return u==t&&p==e;var f=!0;a.set(e,t),a.set(t,e);for(var m=o;++c<h;){var g=e[d=l[c]],v=t[d];if(r)var y=o?r(v,g,d,t,e,a):r(g,v,d,e,t,a);if(!(void 0===y?g===v||s(g,v,i,r,a):y)){f=!1;break}m||(m="constructor"==d)}if(f&&!m){var x=e.constructor,b=t.constructor;x!=b&&"constructor"in e&&"constructor"in t&&!("function"==typeof x&&x instanceof x&&"function"==typeof b&&b instanceof b)&&(f=!1)}return a.delete(e),a.delete(t),f},uw="[object Arguments]",uS="[object Array]",u_="[object Object]",uA=Object.prototype.hasOwnProperty,uM=function(e,t,i,r,s,a){var o=hU(e),l=hU(t),h=o?uS:d$(e),c=l?uS:d$(t);h=h==uw?u_:h,c=c==uw?u_:c;var d=h==u_,u=c==u_,p=h==c;if(p&&cR(e)){if(!cR(t))return!1;o=!0,d=!1}
3139if(p&&!d)return a||(a=new dA),o||cV(e)?up(e,t,i,r,s,a):uy(e,t,h,i,r,s,a);if(!(1&i)){var f=d&&uA.call(e,"__wrapped__"),m=u&&uA.call(t,"__wrapped__");if(f||m){var g=f?e.value():e,v=m?t.value():t;return a||(a=new dA),s(g,v,i,r,a)}}return!!p&&(a||(a=new dA),ub(e,t,i,r,s,a))},uE=function(e,t){return null!=e&&t in Object(e)},uC=function(e,t,i){t=dl(t,e);for(var r=-1,s=t.length,a=!1;++r<s;){var o=dc(t[r]);if(!(a=null!=e&&i(e,o)))break;e=e[o]}return a||++r!=s?a:!!(s=null==e?0:e.length)&&cb(s)&&cp(o,s)&&(hU(e)||cP(e))},uT=function(){return hC.Date.now()},uP=Math.max,uD=Math.min,uI=function(e,t,i){var r,s,a,o,l,h,c=0,d=!1,u=!1,p=!0;if("function"!=typeof e)throw TypeError("Expected a function");function f(t){var i=r,a=s;return r=s=void 0,c=t,o=e.apply(a,i)}function m(e){var i=e-h,r=e-c;return void 0===h||i>=t||i<0||u&&r>=a}function g(){var e,i,r,s=uT();if(m(s))return v(s);l=setTimeout(g,(e=s-h,i=s-c,r=t-e,u?uD(r,a-i):r))}function v(e){return l=void 0,p&&r?f(e):(r=s=void 0,o)}function y(){var e,i=uT(),a=m(i);if(r=arguments,s=this,h=i,a){if(void 0===l)return c=e=h,l=setTimeout(g,t),d?f(e):o;if(u)return clearTimeout(l),l=setTimeout(g,t),f(h)}return void 0===l&&(l=setTimeout(g,t)),o}return t=h0(t)||0,hY(i)&&(d=!!i.leading,a=(u="maxWait"in i)?uP(h0(i.maxWait)||0,t):a,p="trailing"in i?!!i.trailing:p),y.cancel=function(){void 0!==l&&clearTimeout(l),c=0,r=h=s=l=void 0},y.flush=function(){return void 0===l?o:v(uT())},y},uO=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0},uR=function(e,t){return e>t},uL=function(e,t){return function e(t,i,r,s,a){return t===i||(null!=t&&null!=i&&(hF(t)||hF(i))?uM(t,i,r,s,e,a):t!=t&&i!=i)}(e,t)},uB=function(e,t,i){for(var r=-1,s=e.length;++r<s;){var a=e[r],o=t(a);if(null!=o&&(void 0===l?o==o&&!hN(o):i(o,l)))var l=o,h=a}return h},uz=function(e,t){var i,r;return t=dl(t,e),i=e,null==(e=(r=t).length<2?i:dd(i,d_(r,0,-1)))||delete e[dc(uO(t))]},uF=function(e){return dS(e)?void 0:e},uN=dg(function(e,t){var i={};if(null==e)return i;var r=!1;t=hk(t,function(t){return t=dl(t,e),r||(r=t.length>1),t}),cy(e,dN(e),i),r&&(i=uh(i,7,uF));for(var s=t.length;s--;)uz(i,t[s]);return i}),uk=function(e,t,i,r){if(!hY(e))return e;t=dl(t,e);for(var s=-1,a=t.length,o=a-1,l=e;null!=l&&++s<a;){var h=dc(t[s]),c=i;if("__proto__"===h||"constructor"===h||"prototype"===h)break;if(s!=o){var d=l[h];void 0===(c=r?r(d,h,l):void 0)&&(c=hY(d)?d:cp(t[s+1])?[]:{})}cv(l,h,c),l=l[h]}return e},uU=function(e,t,i){for(var r=-1,s=t.length,a={};++r<s;){var o=t[r],l=dd(e,o);i(l,o)&&uk(a,dl(o,e),l)}return a},uV=dg(function(e,t){return null==e?{}:uU(e,t,function(t,i){return null!=e&&uC(e,i,uE)})}),uj=function(e,t,i){var r=!0,s=!0;if("function"!=typeof e)throw TypeError("Expected a function");return hY(i)&&(r="leading"in i?!!i.leading:r,s="trailing"in i?!!i.trailing:s),uI(e,t,{leading:r,maxWait:t,trailing:s})};function uG(e){for(let t of Object.keys(e))void 0===e[t]&&delete e[t];return e}function uH(e,t){return Object.setPrototypeOf(e,t),e}var uW=!(typeof window>"u")&&window.navigator.userAgent.toLowerCase().includes(" electron/"),uq=(uW&&(()=>{if(typeof window>"u")return;let e=new URLSearchParams(window.location.search).get("desktop-app-version");return e?(window.localStorage.setItem("desktop-app-version",e),e):window.localStorage.getItem("desktop-app-version")??"0.0.6"})(),!(typeof window>"u")&&window.navigator.platform.toUpperCase().includes("MAC")),uX=!(typeof window>"u")&&(/iPad|iPhone|iPod/.test(window.navigator.userAgent)||uq&&"ontouchend"in document),uY=!(typeof window>"u")&&window.navigator.userAgent.toLowerCase().indexOf("firefox")>-1,uQ=!(typeof window>"u")&&("ontouchstart"in window||navigator.maxTouchPoints>0),uK=(()=>{if(typeof window>"u")return!1;let e=navigator.userAgent,t=navigator.vendor;return/Safari/i.test(e)&&/Apple Computer/.test(t)})(),uZ=Number((()=>{if(typeof window>"u")return null;let e=navigator.userAgent.match(/Version\/(\d+\.\d)/);return e&&e[1]})());function uJ(e){return Array.isArray(e)?e:[e]}function u$(e,t){let i=0;for(;i<e.length&&i<t.length;){if(e[i]<t[i])return -1;if(e[i]>t[i])return 1;i+=1}return i!==t.length?-1:i!==e.length?1:0}function u0(e){return uq?e.metaKey:e.ctrlKey}var u1=[],u2={},u3={},u4={};function u5(e){u1.includes(e)||u1.push(e)}function u6(e){delete u2[e.pointerId];for(let t=0;t<u1.length;t++)if(u1[t].pointerId===e.pointerId){u1.splice(t,1);break}}function u8(e){if("touch"!==e.pointerType)return;let t=u2[e.pointerId];void 0===t&&(t={x:0,y:0},u2[e.pointerId]=t),t.x=e.pageX,t.y=e.pageY}function u9(e){return u2[(e.pointerId===u1[0].pointerId?u1[1]:u1[0]).pointerId]}function u7(e){u3[e.key]=!0,u4[e.key]=void 0===u4[e.key]?1:u4[e.key]+1}function pe(e){if(uq&&u3.Meta)for(let e in u3)u3[e]=!1;else u3[e.key]=!1;u4={}}var pt,pi,pr,ps,pa,pn,po,pl,ph,pc=new Promise(e=>{po=e}),pd=new Promise(e=>{ph=e}),pu=class{modifyById(e,t){if(void 0===this[e])throw Error("not expected");{let i={...this,[e]:t};return Object.setPrototypeOf(i,pu.prototype),i}}add(e,t){return this.runOp({type:1,id:e,data:t})?.data??this}runOp(e){if(1===e.type){let t=this[e.id],i;i=void 0===t?{type:2,id:e.id}:{type:1,id:e.id,data:t};let{id:r,data:s}=e,a={...this,[r]:s};return Object.setPrototypeOf(a,pu.prototype),{data:a,actual:e,reverse:i}
3139}if(2===e.type){let{id:t}=e,i=this[t];if(void 0===i)return null;{let r={...this};return Object.setPrototypeOf(r,pu.prototype),delete r[t],{data:r,actual:e,reverse:{type:1,id:t,data:i}}}}return null}};function pp(e){if(void 0!==e.deepFreeze){e.deepFreeze(e);return}for(let t of Object.getOwnPropertyNames(e)){let i=e[t];i&&"object"==typeof i&&pp(i)}return Object.freeze(e)}var pf=class extends Error{};function pm(e){let t={...e};return Object.setPrototypeOf(t,Object.getPrototypeOf(e)),t}function pg(e,t,i){if(void 0===e?void 0===t?(e=0,t=10):e=t-10:void 0===t&&(t=e+10),e>t){let i=e;e=t,t=i}let r=[],s=1/(i+1);for(let a=0;a<i;a++){let i=e+(t-e)*(a+.75+.5*Math.random())*s;r.push(i)}return r}function pv(e){return e instanceof Uint8Array||e instanceof Uint16Array||e instanceof Uint32Array||e instanceof Int8Array||e instanceof Int16Array||e instanceof Int32Array||e instanceof Float32Array||e instanceof Float64Array}var py=class extends Array{constructor(...e){super(...e),Object.setPrototypeOf(this,py.prototype)}deepFreeze(){let e=0;for(;e<this.length;)pp(this[e]),e++}fillCaches0(e,t){for(let i of(this.objCaches.set(e.id,e),this.parentCaches.set(e.id,t),e.children))this.fillCaches0(i,e.id)}fillCaches(){if(void 0===this.objCaches)for(let e of(this.objCaches=new Map,this.parentCaches=new Map,this))this.fillCaches0(e,null)}randomId(){this.fillCaches();let e=Array.from(this.objCaches.keys());if(0!==e.length)return e[Math.max(0,Math.floor(Math.random()*e.length)-1)]}nonExistOrDescendantOf(e,t){if(!this.has(e))return!0;for(;e;){let i=this.parent(e);if(i===t)return!0;e=i}return!1}rootAcestor(e){for(;e;){let t=this.parent(e);if(t)e=t;else break}return e}isDescendantOf(e,t){for(;e;){let i=this.parent(e);if(i===t)return!0;e=i}return!1}data(e){return this.get(e)?.data}has(e){return void 0!==this.childrenOf(e)}get(e){return this.fillCaches(),this.objCaches.get(e)}childrenOf(e){return null===e?this:this.get(e)?.children}traverseFrom(e,t){if(null===e)this.traverse(t);else{let i=this.get(e);i&&function e(t,i){if(!0!==i(t.id,t.data))for(let r of t.children)e(r,i)}(i,t)}}traverse(e){!function e(t,i){for(let r of t)!0!==i(r.id,r.data)&&e(r.children,i)}(this,e)}totalSize(){return this.fillCaches(),this.objCaches.size}parent(e){return this.fillCaches(),this.parentCaches.get(e)}childrenArray(e){return null===e?this:this.get(e).children}modifyById(e,t){if(void 0===this.get(e))throw Error("not expected");{let i=this.parent(e),r=this.childrenArray(i),s=r.findIndex(t=>t.id===e);if(s<0)throw Error("not expected");let a=r[s];return(r=[...r])[s]={...a,data:t},this.modifyArrayBy(i,r)}}modifyArrayBy(e,t){let i=e,r=t;for(;null!==i;){let e=r,t=i;if(void 0===(i=this.parent(i)))throw Error();let s=(r=this.childrenArray(i)).findIndex(e=>e.id===t);if(s<0)throw Error();(r=[...r])[s]={...r[s],children:e}}Object.setPrototypeOf(r,py.prototype);let s=r;return s.fillCaches(),s}runOp(e){switch(e.type){case 7:return this.addOp(e);case 8:return this.deleteOp(e);case 9:return this.moveOp(e)}return null}checkDuplicatedIdRec({id:e,children:t}){if(void 0!==this.get(e))return!0;for(let e of t)if(this.checkDuplicatedIdRec(e))return!0;return!1}addOp(e){let{parent:t,fi:i,id:r,data:s,children:a}=e;if(null!==t&&void 0===this.get(t)||this.checkDuplicatedIdRec(e))return null;{let o=this.childrenArray(t),l={fi:i,id:r,data:s,children:a};return(o=[...o,l]).sort((e,t)=>e.fi-t.fi),e.localIndex=o.indexOf(l),{data:this.modifyArrayBy(t,o),actual:e,reverse:{type:8,id:r}}}}deleteOp(e){let{id:t}=e;if(null===this.get(t))return null;{let i=this.parent(t);if(void 0===i)return null;let r=this.childrenArray(i),s=r.findIndex(e=>e.id===t);e.localIndex=s;let a=(r=[...r]).splice(s,1)[0];return{data:this.modifyArrayBy(i,r),actual:e,reverse:{type:7,...a,parent:i}}}}moveOp(e){let{parent:t,fi:i,id:r}=e;if(null!==t&&void 0===this.get(t))return this.deleteOp({type:8,id:r});if(null!==t){let e=t;for(;null!==e;){if(void 0===e)throw Error();if(e===r)throw new pf("cyclic tree");e=this.parent(e)}}let s=this.parent(r);if(void 0===s)return null;let a=s,o=this.childrenArray(s),l=o.findIndex(e=>e.id===r),h=(o=[...o]).splice(l,1)[0],c=this.modifyArrayBy(s,o);s=t,o=c.childrenArray(s);let d=h.fi;return(o=[...o,h={...h,fi:i}]).sort((e,t)=>
3139e.fi-t.fi),e.localIndex=o.indexOf(h),{data:c=c.modifyArrayBy(s,o),actual:e,reverse:{type:9,parent:a,fi:d,id:r}}}previous(e,t){if(null===t){let t=this.childrenArray(e);return 0===t.length?null:t[t.length-1].id}let i=null;for(let r of this.childrenArray(e)){if(r.id===t)return i;i=r.id}return null}traverseSortNext(e){let t=this.parent(e);if(void 0!==t){let i=this.childrenArray(t),r=i.findIndex(t=>t.id===e)+1;if(r<i.length)return i[r].id;if(t)return this.traverseSortNext(t)}}sortNext(e){let t=this.childrenArray(e);return t.length>0?t[0].id:this.traverseSortNext(e)}traverseSortPrevious(e){let t=this.childrenArray(e);return t.length>0?this.traverseSortPrevious(t[t.length-1].id):e}sortPrevious(e){let t=this.parent(e);if(void 0!==t){let i=this.childrenArray(t),r=i.findIndex(t=>t.id===e)-1;return r>=0?this.traverseSortPrevious(i[r].id):t}}getAllSorted(e){let t=[];for(let i of e){let e=this.getWithSortKey(i.id);void 0!==e&&t.push({...i,...e})}for(let e of(t.sort((e,t)=>(function(e,t){let i=0;for(;i<e.length&&i<t.length;){if(e[i]<t[i])return -1;if(e[i]>t[i])return 1;i+=1}return i!==t.length?-1:i!==e.length?1:0})(e.sortKey,t.sortKey)),t))delete e.sortKey;return t}getWithSortKey(e){var t=e;let i=[],r=this.get(t),s=r;if(void 0!==r){for(;t;)i.splice(0,0,r.fi),null!==(t=this.parent(t))&&(r=this.get(t));return{...s,sortKey:i}}}insertBeforeHelper(e,t,i){return this.insertAfterHelper(e,this.previous(e,t),i)}insertAfterHelper(e,t,i){let r=this.childrenArray(e);if(null===t){if(0===r.length)return pg(0,i,i);{let e=r[0].fi;return pg(e-i,e,i)}}{let s=this.get(t);if(void 0===s||this.parent(t)!==e)throw Error("illegal args");let a=r.find(e=>e.fi>s.fi);if(void 0!==a)return pg(s.fi,a.fi,i);{let e=r[r.length-1].fi;return pg(e,e+i,i)}}}};(pS||(pS={})).runOp=function(e,t){if(0!==t.type)return null;if(Array.isArray(e)){let i=t.props,r={},s=[...e],a=!1;if(i)for(let e of Object.keys(i)){let t=parseInt(e);if(isNaN(t))throw Error("wrong index");r[e]=s[t],s[t]=i[e],a=!0}return a?{data:s,actual:t,reverse:{type:0,props:r}}:null}{let i=t.props,r={},s={...e},a=!1;if(i)for(let e of Object.keys(i)){r[e]=s[e];let t=i[e];void 0===t?delete s[e]:s[e]=t,a=!0}return a?{data:s,actual:t,reverse:{type:0,props:r}}:null}};var px=class extends Array{constructor(...e){super(...e),Object.setPrototypeOf(this,px.prototype)}deepFreeze(){let e=0;for(;e<this.length;)pp(this[e]),e++}fillCaches0(e){this.objCaches.set(e.id,e)}fillCaches(){if(void 0===this.objCaches)for(let e of(this.objCaches=new Map,Object.getOwnPropertyDescriptor(this,"objCaches").enumerable=!1,this))this.fillCaches0(e)}randomId(){this.fillCaches();let e=Array.from(this.objCaches.keys());if(0!==e.length)return e[Math.max(0,Math.floor(Math.random()*e.length)-1)]}data(e){return this.get(e)?.data}get(e){return this.fillCaches(),this.objCaches.get(e)}modifyById(e,t){if(void 0===this.get(e))throw Error("not expected");{let i=this,r=i.findIndex(t=>t.id===e);if(r<0)throw Error("not expected");let s=i[r];return(i=[...i])[r]={...s,data:t},this.modifyArrayBy(i)}}modifyArrayBy(e){return Object.setPrototypeOf(e,px.prototype),"u">typeof tc||e.fillCaches(),e}runOp(e){switch(e.type){case 4:return this.addOp(e);case 5:return this.deleteOp(e);case 6:return this.moveOp(e)}return null}addOp(e){let{fi:t,id:i,data:r}=e,s=this,a={fi:t,id:i,data:r};return(s=[...s,a]).sort((e,t)=>e.fi-t.fi),e.localIndex=s.indexOf(a),{data:this.modifyArrayBy(s),actual:e,reverse:{type:5,id:i}}}deleteOp(e){let{id:t}=e,i=this,r=i.findIndex(e=>e.id===t);if(-1===r)return null;e.localIndex=r;let s=(i=[...i]).splice(r,1)[0];return{data:this.modifyArrayBy(i),actual:e,reverse:{type:4,...s}}}moveOp(e){let{fi:t,id:i}=e,r=this,s=(r=[...r]).findIndex(e=>e.id===i);if(-1===s)return null;let a=r[s].fi,o={...r[s],fi:t};return r[s]=o,r.sort((e,t)=>e.fi-t.fi),e.localIndex=r.indexOf(o),{data:this.modifyArrayBy(r),actual:e,reverse:{type:6,fi:a,id:i}}}previous(e){if(null===e)return 0===this.length?null:this[this.length-1].id;let t=null;for(let i of this){if(i.id===e)return t;t=i.id}return null}insertBeforeHelper(e,t){return this.insertAfterHelper(this.previous(e),t)}insertAfterHelper(e,t){if(null===e){if(0===this.length)return pg(0,t,t);{let e=this[0].fi;return pg(e-t,e,t)}}{let i=this.get(e);if(void 0===i)throw Error("illegal args");let r=this.find(e=>e.fi>i.fi);if(void 0!==r)return pg(i.fi,r.fi,t);{let e=this[this.length-1].fi;return pg(e,e+t,t)}}}};function pb(e){return e&&"object"==typeof e&&e instanceof pA}var pw,pS,p_,pA=class{unusedFunOverridesTable(e){}runOp(e){let t=[],i=this,r=0,s={};for(;r<e.path.length;){if(t.push(i),void 0!==(i=void 0===i?void 0:i[e.path[r]])&&!pb(i))return null;r+=1}for(let[t,r]of(i=i?pm(i):new pA,Object.entries(e.props))){let e=i[t];s[t]=e,void 0===r?delete i[t]:i[t]=r}for(;r>0;){if(0===Object.keys(i).length){let s=t[r-1];s&&(i=pm(s),delete i[e.path[r-1]])}else{let s=t[r-1];if(s){let t=pm(s);t[e.path[r-1]]=i,i=t}else{let t=new pA;t[e.path[r-1]]=i,i=t}}r-=1}
3139let a=Object.setPrototypeOf(i,pA.prototype),o={...e,props:s};return{data:a,actual:e,reverse:o}}};function pM(e,t){if(void 0===t)return;let i=!1,r=e.map(e=>{let r=e.id,s=pE(e.data,t[r]);if(i=i||void 0!==s,void 0===s&&(s=e.data),!e.children)return{...e,id:r,data:s};{let a=pM(e.children,t);return void 0!==a?i=!0:a=e.children,{...e,id:r,data:s,children:a}}});if(i)return r}function pE(e,t){if(!pb(t))return t;if(e instanceof py){let i=pM(e,t);return void 0!==i&&Object.setPrototypeOf(i,Object.getPrototypeOf(e)),i}if(e instanceof px)return function(e,t){if(void 0===t)return;let i=!1,r=e.map(e=>{let r=e.id,s=pE(e.data,t[r]);return i=i||void 0!==s,void 0===s&&(s=e.data),{...e,id:r,data:s}});if(i)return Object.setPrototypeOf(r,Object.getPrototypeOf(e)),r}(e,t);if(Array.isArray(e)){let i=!1,r=e.map((e,r)=>{let s=pE(e,t[r]);return i=i||void 0!==s,void 0===s&&(s=e),s});return i?(Object.setPrototypeOf(r,Object.getPrototypeOf(e)),r):void 0}if(e instanceof pA)return pC(e,t);if(e&&"object"==typeof e){let i={},r=!1;for(let[s,a]of Object.entries(e)){let e=pE(a,t[s]);r=r||void 0!==e,void 0===e&&(e=a),i[s]=e}return r?(Object.setPrototypeOf(i,Object.getPrototypeOf(e)),i):void 0}}function pC(e,t){if(void 0===e)return t;if(void 0===t)return e;if(!pb(t))return t;if(!pb(e))return p_.apply(e,t);let i=new Set;for(let t of Object.keys(e))i.add(t);for(let e of Object.keys(t))i.add(e);let r=new pA;for(let s of i){let i=pC(void 0===e?void 0:e[s],void 0===t?void 0:t[s]);r[s]=i}return r}function pT(e,t){return null===e?null:(e.cur[e.len]=t,e.len+=1,e)}function pP(e){e&&(e.len-=1)}(pZ=p_||(p_={})).apply=function(e,t){return pE(e,t)??e},pZ.merge=function(e,t){return pC(e,t)},pZ.filterOp=function(e,t){let i=0,r=t.path,s=e;for(;i<r.length&&void 0!==s;){if(void 0===(s=p1.zoomOnce(s,r[i])))return t;if(!pb(s))return;i+=1}if(void 0===s)return t;if(pb(s)){if(0===t.type){let e={...t.props};for(let t of Object.keys(s))delete e[t];return{...t,props:e}}{if(1!==t.type&&4!==t.type&&7!==t.type)return t;let e=pM([t],s);return e?(console.log(e),e):t}}},(pJ||(pJ={})).replaceProps=function(e,t){let i=p1.zoom(t,e.path);if("object"!=typeof i)return{...e,props:{}};{let t={};for(let r of Object.keys(e.props))t[r]=i[r];return{...e,props:t}}},(e=>{function t(e,t){let i=t.path;for(var r=[];;){let s;if(e instanceof pA&&0===t.type&&null===(s=e.runOp({...t,path:i.slice(r.length)}))&&(s=void 0),void 0===s&&r.length===i.length&&(s=e instanceof py||e instanceof px||e instanceof pu?e.runOp(t):pS.runOp(e,t)),void 0!==s){if(null===s)return null;{let e=s.data;for(let t=r.length-1;t>=0;t--){let s=i[t],a=r[t];if(a instanceof py){if("number"==typeof s)throw Error("illegal arg");e=a.modifyById(s,e)}else if(a instanceof px){if("number"==typeof s)throw Error("illegal arg");e=a.modifyById(s,e)}else if(a instanceof pu){if("number"==typeof s)throw Error("illegal arg");e=a.modifyById(s,e)}else if(a instanceof pA)e=Object.setPrototypeOf({...a,[s]:e},pA.prototype);else if("object"!=typeof a)return null;else if(Array.isArray(a)){if("string"==typeof s&&isNaN(s=parseInt(s)))throw Error("Invalid path");let t=e;(e=[...a])[s]=t}else e={...a,[s]:e}}return{data:e,actual:{...s.actual,path:i},reverse:{...s.reverse,path:i}}}}let a=i[r.length],o;if(e instanceof py){if("number"==typeof a)throw Error("");o=e.get(a)?.data}else if(e instanceof px){if("number"==typeof a)throw Error("");o=e.get(a)?.data}else null!==e&&(o=e[a]);if(void 0===o)return null;r.push(e),e=o}}function i(e,t){for(let i=0;i<e.length&&i<t.length;i++)if(e[i]!==t[i])return!0;return!1}function r(e,t){if(e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(e[i]!==t[i])return!1;return!0}e.drop=function(e,t){return{...e,path:e.path.slice(t)}},e.applySimple=function(e,i){return t(e,i)?.data??e},e.apply=t,e.pathDisjoint=i,e.pathEq=r,e.commutative=function(e,t){return i(e.path,t.path)},e.subsumed=function(e,t){return!!(0===e.type&&0===t.type&&r(e.path,t.path))&&Object.keys(e.props).every(e=>void 0!==t.props[e])}})(p$||(p$={})),(e=>{function t(e,t){var i=e;let r=[],s=[];for(let e of t)try{if(3===e.type||5===e.type&&"variables"===e.path[e.path.length-1]){let t,a,o;if(3===e.type?(t=p1.zoom(i,[...e.path,e.id]),o=p$.apply(i,{...e,type:2})):(t=p1.zoom(i,[...e.path,e.id,"value"]),o=p$.apply(i,e)),null!==o){i=o.data;let[l,h]=function(e,t){let i={cur:[],result:[],len:0};return[e=function e(t,i,r){if(t instanceof py){let s=function t(i,r,s){let a=!1,o=i.map(i=>{let o=i.id,l=r[o];if(void 0!==l&&"string"==typeof l&&(a=!0,o=l,null!==s))throw Error("not supported");let h=e(i.data,r,pT(s,o));pP(s),a=a||void 0!==h,void 0===h&&(h=i.data);let c=t(i.children,r,s);return void 0!==c?a=!0:c=i.children,{...i,id:o,data:h,children:c}});if(a)return o}(t,i,r);return void 0!==s&&Object.setPrototypeOf(s,Object.getPrototypeOf(t)),s}if(t instanceof px)return function(t,i,r){let s=!1,a=t.map(t=>{let a=t.id,o=i[a];if(void 0!==o&&"string"==typeof o&&(s=!0,a=o,null!==r))throw Error("not supported");let l=e(t.data,i,pT(r,a));return pP(r),s=s||void 0!==l,void 0===l&&(l=t.data),{...t,id:a,data:l}});if(s)return Object.setPrototypeOf(a,Object.getPrototypeOf(t)),a}(t,i,r);if(Array.isArray(t)){let s=!1,a=t.map((t,a)=>{let o=e(t,i,pT(r,a));return pP(r),s=s||void 0!==o,void 0===o&&(o=t),o});return s?(Object.setPrototypeOf(a,Object.getPrototypeOf(t)),a):void 0}if(t&&"object"==typeof t&&!pv(t)){let s={},a=!1;for(let[o,l]of Object.entries(t))if("name"!==o&&"variableId"!==o){let t=i[o];if("string"==typeof t){if(null!==r)throw Error("not supported");a=!0,o=t}let h=e(l,i,pT(r,o));pP(r),a=a||void 0!==h,void 0===h&&(h=l),s[o]=h}else s[o]=l;return a?(Object.setPrototypeOf(s,Object.getPrototypeOf(t)),s):void 0}{var s;if("string"!=typeof t)return;let e=i[t];return void 0!==e&&(s=r,null!==s&&s.result.push(s.cur.slice(0,s.len))),e}}(e,t,i)??e,i.result]}(i,{[e.id]:t});i=l;for(let o=0;o<h.length;o++){let l=h[o],c=l.pop();if("number"==typeof c){let r=[c];for(let e=o+1;e<h.length;e++){let t=h[e],i=t[t.length-1];if("number"==typeof i&&p1.equal(l,t.slice(0,t.length-1)))r.push(i),h.splice(e,1);else break}let s=p1.zoom(i,l);a=s.map((t,i)=>r.includes(i)?e.id:t),t=s,c=l.pop()}else{if("alphaOverride"===c||"alpha"===c){let e=t/=100,r=p1.zoom(i,l.slice(0,l.length-2)),s=r.layers.map(t=>
3139t.id===l[l.length-1]?{...t,data:{...t.data,[c]:e}}:t);Object.setPrototypeOf(s,Object.getPrototypeOf(r.layers)),r.layers=s}a=e.id}r.push({type:0,path:l,props:{[c]:t}}),s.push({type:0,path:l,props:{[c]:a}})}s.push(o.reverse),r.push(o.actual)}}else{let t=p$.apply(i,e);null!==t&&(r.push(t.actual),i=t.data,s.push(t.reverse))}}catch(e){if(e instanceof pf)return null;throw e}return{data:i,actual:r,reverse:s.reverse()}}e.empty=function(){return[]},e.removePrefix=function(e,t){let i=[];for(let r of e){let[e,...s]=r.path;e===t&&i.push({...r,path:s})}return i},e.addPrefix=function(e,t){return e.map(e=>({...e,path:[t,...e.path]}))},e.concat=function(e,t){return[...e,...t]},e.compress=function(e,t){return[...e.filter(e=>!t.some(t=>p$.subsumed(e,t))),...t]},e.commutative=function(e,t){return e.every(e=>t.every(t=>p$.commutative(e,t)))},e.applyAll=function(e,i){for(let r of i){let i=t(e,r);null!==i&&(e=i.data)}return e},e.apply=t})(p0||(p0={}));var pD=Symbol(),pI=Symbol(),pO=Symbol(),pR=class{reportOp(e,t,i=[]){let r=this;if(null!==t){for(r._current=t.data;!(r instanceof pj);){let e=r._path,t=r._current;if(""!==e&&i.splice(0,0,e),null===(r=r._parent))return;r.update(e,t)}r.push(i,e,t.actual,t.reverse)}}deleteChildren(e){if(this._children){let t=this._children[e];if(t){let i=t[pO];i&&i(),delete this._children[e]}}}},pL=class extends pR{constructor(e,t,i){super(),this._parent=e,this._path=t,this._current=i}update(e,t){if(Array.isArray(this._current)){if("string"==typeof e&&isNaN(e=parseInt(e)))throw Error("Invalid path");this._current=[...this._current],this._current[e]=t}else this._current={...this._current,[e]:t}}runOp(e){this.reportOp(e,pS.runOp(this._current,e),e.path)}},pB=class extends pR{constructor(e,t,i){super(),this._parent=e,this._path=t,this._current=i}update(e,t){this._current={...this._current,[e]:t},Object.setPrototypeOf(this._current,pu.prototype)}runOp(e){this.reportOp(e,this._current.runOp(e))}},pz={get(e,t){if(t===pO)return()=>{e._parent=null};if(t===pD)return e._current;if(t===pI)return e;let{_current:i,_children:r}=e;if("push"===t&&Array.isArray(i))throw Error("not supported to expand array");let s=void 0===r?void 0:r[t];if(void 0!==s)return s;let a=i[t],o=pG(e,t,a);return o!==a?(void 0===r&&(r={},e._children=r),r[t]=o,o):a},has:(e,t)=>t in e._current,ownKeys:e=>Reflect.ownKeys(e._current),defineProperty(){throw Error("not supported")},getPrototypeOf:e=>Object.getPrototypeOf(e._current),setPrototypeOf(){throw Error("not supported")},getOwnPropertyDescriptor(e,t){let i=e._current,r=Reflect.getOwnPropertyDescriptor(i,t);return r&&{writable:!0,configurable:!0,enumerable:r.enumerable,value:i[t]}}},pF={...pz,set(e,t,i){let r={type:0,props:{[t]:pq(i)??i}};return e.deleteChildren(t),e.runOp(r),!0},deleteProperty:(e,t)=>(e.deleteChildren(t),e.runOp({type:0,props:{[t]:void 0}}),!0)},pN={...pz,set(e,t,i){return void 0===i?this.deleteProperty(e,t):(e.deleteChildren(t),e.runOp({type:1,id:t,data:i})),!0},deleteProperty:(e,t)=>(e.runOp({type:2,id:t}),!0)},pk=class extends pR{constructor(e,t,i){super(),this._children={},this._parent=e,this._path=t,this._current=i,this[pO]=()=>{this._parent=null}}unproxy(){return this._current}update(e,t){this._current=this._current.modifyById(e,t)}runOp(e){this.reportOp(e,this._current.runOp(e))}randomId(){return this._current.randomId()}isDescendantOf(e,t){return this._current.isDescendantOf(e,t)}childrenOf(e){return this._current.childrenOf(e)}traverse(e){return this._current.traverse(e)}get(e){return this._current.get(e)}parent(e){return this._current.parent(e)}traverse(e){this._current.traverse((t,i)=>{e(t,this.data(t))})}data(e){let{_current:t,_children:i}=this,r=void 0===i?void 0:i[e];if(void 0!==r)return r;let s=t.get(e)?.data,a=pG(this,e,s);return a!==s?(void 0===i&&(i={},this._children=i),i[e]=a,a):s}add(e,t,i,r,s){this.runOp({type:7,parent:e,fi:t,id:i,data:r,children:s})}move(e,t,i){this.runOp({type:9,parent:e,fi:t,id:i})}insertAfter(e,t,i){let r=this._current.insertAfterHelper(e,t,i.length);for(let t=0;t<i.length;t++){let s=i[t];this.add(e,r[t],s.id,s.data,s.children)}}insertBefore(e,t,i){let r=this._current.insertBeforeHelper(e,t,i.length);for(let t=0;t<i.length;t++){let s=i[t];this.add(e,r[t],s.id,s.data,s.children)}}moveAfter(e,t,i){let r=this._current.insertAfterHelper(e,t,i.length);for(let t=0;t<i.length;t++){let s=i[t];this.move(e,r[t],s)}}moveBefore(e,t,i){let r=this._current.insertBeforeHelper(e,t,i.length);for(let t=0;t<i.length;t++){let s=i[t];this.move(e,r[t],s)}}delete(e){this.deleteChildren(e),this.runOp({type:8,id:e})}sortNext(e){return this._current.sortNext(e)}sortPrevious(e){return this._current.sortPrevious(e)}getAllSorted(e){return this._current.getAllSorted(e)}},pU=class extends pR{constructor(e,t,i){super(),this._children={},this._parent=e,this._path=t,this._current=i,this[pO]=()=>{this._parent=null}}unproxy(){return this._current}get length(){return this._current.length}forEach(e){let t=this.length;for(let i=0;i<t;i++){let t=this._current[i].id,r=this._current[i].fi;e(this.data(this._current[i].id),t,r)}}find(e){let t=this.length;for(let i=0;i<t;i++){let t=this._current[i].id;if(e(this.data(t),t))return this.get(t)}}update(e,t){this._current=this._current.modifyById(e,t)}randomId(){return this._current.randomId()}get(e){return{...this._current.get(e),data:this.data(e)}}data(e){let{_current:t,_children:i}=this,r=void 0===i?void 0:i[e];if(void 0!==r)return r;let s=t.get(e)?.data,a=pG(this,e,s);return a!==s?(void 0===i&&(i={},this._children=i),i[e]=a,a):s}runOp(e){this.reportOp(e,this._current.runOp(e))}add(e,t,i){this.runOp({type:4,fi:e,id:t,data:i})}move(e,t){this.runOp({type:6,fi:e,id:t})}insertAfter(e,t){let i=this._current.insertAfterHelper(e,t.length);for(let e=0;e<t.length;e++){let r=t[e];this.add(i[e],r.id,r.data)}}insertBefore(e,t){let i=this._current.insertBeforeHelper(e,t.length);for(let e=0;e<t.length;e++){let r=t[e];this.add(i[e],r.id,r.data)}}moveAfter(e,t){let i=this._current.insertAfterHelper(e,t.length);for(let e=0;e<t.length;e++){let r=t[e];this.move(i[e],r)}}moveBefore(e,t){let i=this._current.insertBeforeHelper(e,t.length);for(let e=0;e<t.length;e++){let r=t[e];this.move(i[e],r)}}delete(e){this.deleteChildren(e),this.runOp({type:5,id:e})}};function pV(e,t,i){if(e.length>0){let r=e[e.length-1];if(0===r.type&&0===t.type&&p1.equal(r.path,i)){Object.assign(r.props,t.props);return}}e.push({...t,path:i})}var pj=class extends pR{constructor(e){super(),this.ts=[],this.actual=[],this.reverse=[],this._current=e}update(e,t){if(""!==e)throw Error("");this._current=t}push(e,t,i,r){pV(this.ts,t,e),pV(this.actual,i,e),pV(this.reverse,r,e)}result(){return{data:this._current,ts:this.ts,actual:this.actual,reverse:this.reverse.reverse()}}};function pG(e,t,i){return i instanceof py?new pk(e,t,i):i instanceof px?new pU(e,t,i):i instanceof pu?new Proxy(new pB(e,t,i),pN):null!==i&&"object"==typeof i?pv(i)?i:new Proxy(new pL(e,t,i),pF):i}function pH(e){let t=new pj(e);return[pG(t,"",e),t]}function pW(e,t){let[i,r]=pH(e);return t(i),r.result()}function pq(e){return e instanceof pk||e instanceof pU?e._current:null!==e&&"object"==typeof e?e[pD]:e}function pX(e,t){let i=[];if(!(t.length<=e.length))return null;for(var r=0;r<t.length;){if("*"===t[r])i.push(e[r]);else if(e[r]!==t[r])return null;r+=1}return i}(e=>{function t(e,t){return(e instanceof py||e instanceof pk)&&"string"==typeof t||(e instanceof px||e instanceof pU)&&"string"==typeof t?e.data(t):"number"==typeof t&&Array.isArray(e)||"string"==typeof t&&"object"==typeof e&&null!==e?e[t]:void 0}function i(e,i,r=0){for(;r<i.length&&void 0!==e;)e=t(e,i[r]),r+=1;return e}e.equal=function(e,t){if(t.length!==e.length)return!1;for(var i=0;i<e.length;){if(e[i]!==t[i])return!1;i+=1}return!0},e.removeOverridden=function(e,t,r){let s=i(r,e);if(void 0===s||"object"!=typeof s||null===s)return t;{let e={...t};
3139return Object.keys(s).forEach(t=>{delete e[t]}),e}},e.zoomOnce=t,e.zoom=i})(p1||(p1={}));var pY=class{},pQ=class extends pY{constructor(e){super(),this.id=e}},pK=class extends pY{constructor(e){super(),this.data=e}};try{p2=new TextDecoder}catch{}var pZ,pJ,p$,p0,p1,p2,p3,p4,p5,p6,p8,p9,p7,fe=0,ft=[],fi=ft,fr=0,fs={},fa=0,fn=0,fo=[],fl={useRecords:!1,mapsAsObjects:!0},fh=class{},fc=new fh;fc.name="MessagePack 0xC1";var fd=!1,fu=class{constructor(e){e&&(!1===e.useRecords&&void 0===e.mapsAsObjects&&(e.mapsAsObjects=!0),e.structures?e.structures.sharedLength=e.structures.length:e.getStructures&&((e.structures=[]).uninitialized=!0,e.structures.sharedLength=0)),Object.assign(this,e)}unpack(e,t){if(p3)return fF(()=>(fN(),this?this.unpack(e,t):fu.prototype.unpack.call(fl,e,t)));p4=t>-1?t:e.length,fe=0,fr=0,fn=0,p6=null,fi=ft,p8=null,p3=e;try{p7=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))}catch(t){throw p3=null,e instanceof Uint8Array?t:Error("Source must be a Uint8Array or Buffer but was a "+(e&&"object"==typeof e?e.constructor.name:typeof e))}if(this instanceof fu){if(fs=this,this.structures)return p5=this.structures,fp();(!p5||p5.length>0)&&(p5=[])}else fs=fl,(!p5||p5.length>0)&&(p5=[]);return fp()}unpackMultiple(e,t){let i,r=0;try{fd=!0;let s=e.length,a=this?this.unpack(e,s):fU.unpack(e,s);if(t){for(t(a);fe<s;)if(r=fe,!1===t(fp()))return}else{for(i=[a];fe<s;)r=fe,i.push(fp());return i}}catch(e){throw e.lastPosition=r,e.values=i,e}finally{fd=!1,fN()}}_mergeStructures(e,t){e=e||[];for(let t=0,i=e.length;t<i;t++){let i=e[t];i&&(i.isShared=!0,t>=32&&(i.highByte=t-32>>5))}for(let i in e.sharedLength=e.length,t||[])if(i>=0){let r=e[i],s=t[i];s&&(r&&((e.restoreStructures||(e.restoreStructures=[]))[i]=r),e[i]=s)}return this.structures=e}decode(e,t){return this.unpack(e,t)}};function fp(){try{if(!fs.trusted&&!fd){let e=p5.sharedLength||0;e<p5.length&&(p5.length=e)}let e=fm();if(fe==p4)p5.restoreStructures&&ff(),p5=null,p3=null,p9&&(p9=null);else if(fe>p4){let e=Error("Unexpected end of MessagePack data");throw e.incomplete=!0,e}else if(!fd)throw Error("Data read, but end of buffer not reached");return e}catch(e){throw p5.restoreStructures&&ff(),fN(),(e instanceof RangeError||e.message.startsWith("Unexpected end of buffer"))&&(e.incomplete=!0),e}}function ff(){for(let e in p5.restoreStructures)p5[e]=p5.restoreStructures[e];p5.restoreStructures=null}function fm(){let e=p3[fe++];if(e<160){if(e<128){if(e<64)return e;{let t=p5[63&e]||fs.getStructures&&fx()[63&e];return t?(t.read||(t.read=fv(t,63&e)),t.read()):e}}if(e<144){if(e-=128,fs.mapsAsObjects){let t={};for(let i=0;i<e;i++)t[fR()]=fm();return t}{let t=new Map;for(let i=0;i<e;i++)t.set(fm(),fm());return t}}{let t=Array(e-=144);for(let i=0;i<e;i++)t[i]=fm();return t}}if(e<192){let t=e-160;if(fn>=fe)return p6.slice(fe-fa,(fe+=t)-fa);if(0==fn&&p4<140){let e=t<16?fP(t):fT(t);if(null!=e)return e}return fb(t)}{let t;switch(e){case 192:return null;case 193:return p8?(t=fm())>0?p8[1].slice(p8.position1,p8.position1+=t):p8[0].slice(p8.position0,p8.position0-=t):fc;case 194:return!1;case 195:return!0;case 196:return fD(p3[fe++]);case 197:return t=p7.getUint16(fe),fe+=2,fD(t);case 198:return t=p7.getUint32(fe),fe+=4,fD(t);case 199:return fI(p3[fe++]);case 200:return t=p7.getUint16(fe),fe+=2,fI(t);case 201:return t=p7.getUint32(fe),fe+=4,fI(t);case 202:if(t=p7.getFloat32(fe),fs.useFloat32>2){let e=fk[(127&p3[fe])<<1|p3[fe+1]>>7];return fe+=4,(e*t+(t>0?.5:-.5)>>0)/e}return fe+=4,t;case 203:return t=p7.getFloat64(fe),fe+=8,t;case 204:return p3[fe++];case 205:return t=p7.getUint16(fe),fe+=2,t;case 206:return t=p7.getUint32(fe),fe+=4,t;case 207:return t=fs.int64AsNumber?4294967296*p7.getUint32(fe)+p7.getUint32(fe+4):p7.getBigUint64(fe),fe+=8,t;case 208:return p7.getInt8(fe++);case 209:return t=p7.getInt16(fe),fe+=2,t;case 210:return t=p7.getInt32(fe),fe+=4,t;case 211:return t=fs.int64AsNumber?4294967296*p7.getInt32(fe)+p7.getUint32(fe+4):p7.getBigInt64(fe),fe+=8,t;case 212:if(114==(t=p3[fe++]))return fL(63&p3[fe++]);{let e=fo[t];if(e)return e.read?(fe++,e.read(fm())):e.noBuffer?(fe++,e()):e(p3.subarray(fe,++fe));throw Error("Unknown extension "+t)}case 213:return 114==(t=p3[fe])?(fe++,fL(63&p3[fe++],p3[fe++])):fI(2);case 214:return fI(4);case 215:return fI(8);case 216:return fI(16);case 217:return t=p3[fe++],fn>=fe?p6.slice(fe-fa,(fe+=t)-fa):fw(t);case 218:return t=p7.getUint16(fe),fe+=2,fn>=fe?p6.slice(fe-fa,(fe+=t)-fa):fS(t);case 219:return t=p7.getUint32(fe),fe+=4,fn>=fe?p6.slice(fe-fa,(fe+=t)-fa):f_(t);case 220:return t=p7.getUint16(fe),fe+=2,fM(t);case 221:return t=p7.getUint32(fe),fe+=4,fM(t);case 222:return t=p7.getUint16(fe),fe+=2,fE(t);case 223:return t=p7.getUint32(fe),fe+=4,fE(t);default:if(e>=224)return e-256;if(void 0===e){let e=Error("Unexpected end of MessagePack data");throw e.incomplete=!0,e}throw Error("Unknown MessagePack token "+e)}}}var fg=/^[a-zA-Z_$][a-zA-Z\d_$]*$/;function fv(e,t){function i(){if(i.count++>2){let i=e.read=Function("r","return function(){return {"+e.map(e=>fg.test(e)?e+":r()":"["+JSON.stringify(e)+"]:r()").join(",")+"}}")(fm);return 0===e.highByte&&(e.read=fy(t,e.read)),i()}let r={};for(let t=0,i=e.length;t<i;t++)r[e[t]]=fm();return r}return i.count=0,0===e.highByte?fy(t,i):i}var fy=(e,t)=>function(){let i=p3[fe++];if(0===i)return t();let r=e<32?-(e+(i<<5)):e+(i<<5),s=p5[r]||fx()[r];if(!s)throw Error("Record id is not defined for "+r);return s.read||(s.read=fv(s,e)),s.read()};function fx(){let e=fF(()=>(p3=null,fs.getStructures()));return p5=fs._mergeStructures(e,p5)}var fb=fA,fw=fA,fS=fA,f_=fA;function fA(e){let t;if(e<16&&(t=fP(e)))return t;if(e>64&&p2)return p2.decode(p3.subarray(fe,fe+=e));let i=fe+e,r=[];for(t="";fe<i;){let e=p3[fe++];if((128&e)==0)r.push(e);else if((224&e)==192){let t=63&p3[fe++];r.push((31&e)<<6|t)}else if((240&e)==224){let t=63&p3[fe++],i=63&p3[fe++];r.push((31&e)<<12|t<<6|i)}else if((248&e)==240){let t=(7&e)<<18|(63&p3[fe++])<<12|(63&p3[fe++])<<6|63&p3[fe++];t>65535&&(t-=65536,r.push(t>>>10&1023|55296),t=56320|1023&t),r.push(t)}else r.push(e);r.length>=4096&&(t+=fC.apply(String,r),r.length=0)}return r.length>0&&(t+=fC.apply(String,r)),t}function fM(e){let t=Array(e);for(let i=0;i<e;i++)t[i]=fm();return t}function fE(e){if(fs.mapsAsObjects){let t={};for(let i=0;i<e;i++)t[fR()]=fm();return t}{let t=new Map;for(let i=0;i<e;i++)t.set(fm(),fm());return t}}var fC=String.fromCharCode;function fT(e){let t=fe,i=Array(e);for(let r=0;r<e;r++){let e=p3[fe++];if((128&e)>0){fe=t;return}i[r]=e}return fC.apply(String,i)}function fP(e){if(e<4){if(e<2){if(0===e)return"";{let e=p3[fe++];if((128&e)>1){fe-=1;return}return fC(e)}}{let t=p3[fe++],i=p3[fe++];if((128&t)>0||(128&i)>0){fe-=2;return}if(e<3)return fC(t,i);let r=p3[fe++];if((128&r)>0){fe-=3;return}return fC(t,i,r)}}{let t=p3[fe++],i=p3[fe++],r=p3[fe++],s=p3[fe++];if((128&t)>0||(128&i)>0||(128&r)>0||(128&s)>0){fe-=4;return}if(e<6){if(4===e)return fC(t,i,r,s);{let e=p3[fe++];if((128&e)>0){fe-=5;return}return fC(t,i,r,s,e)}}if(e<8){let a=p3[fe++],o=p3[fe++];if((128&a)>0||(128&o)>0){fe-=6;return}if(e<7)return fC(t,i,r,s,a,o);let l=p3[fe++];if((128&l)>0){fe-=7;return}return fC(t,i,r,s,a,o,l)}{let a=p3[fe++],o=p3[fe++],l=p3[fe++],h=p3[fe++];if((128&a)>0||(128&o)>0||(128&l)>0||(128&h)>0){fe-=8;return}if(e<10){if(8===e)return fC(t,i,r,s,a,o,l,h);{let e=p3[fe++];if((128&e)>0){fe-=9;return}return fC(t,i,r,s,a,o,l,h,e)}}if(e<12){let c=p3[fe++],d=p3[fe++];if((128&c)>0||(128&d)>0){fe-=10;return}if(e<11)return fC(t,i,r,s,a,o,l,h,c,d);let u=p3[fe++];if((128&u)>0){fe-=11;return}return fC(t,i,r,s,a,o,l,h,c,d,u)}{let c=p3[fe++],d=p3[fe++],u=p3[fe++],p=p3[fe++];if((128&c)>0||(128&d)>0||(128&u)>0||(128&p)>0){fe-=12;return}if(e<14){if(12===e)return fC(t,i,r,s,a,o,l,h,c,d,u,p);{let e=p3[fe++];if((128&e)>0){fe-=13;return}return fC(t,i,r,s,a,o,l,h,c,d,u,p,e)}}{let f=p3[fe++],m=p3[fe++];if((128&f)>0||(128&m)>0){fe-=14;return}if(e<15)return fC(t,i,r,s,a,o,l,h,c,d,u,p,f,m);let g=p3[fe++];if((128&g)>0){fe-=15;return}return fC(t,i,r,s,a,o,l,h,c,d,u,p,f,m,g)}}}}}function fD(e){return fs.copyBuffers?Uint8Array.prototype.slice.call(p3,fe,fe+=e):p3.subarray(fe,fe+=e)}function fI(e){let t=p3[fe++];if(fo[t])return fo[t](p3.subarray(fe,fe+=e));throw Error("Unknown extension type "+t)}var fO=Array(4096);function fR(){let e=p3[fe++];if(!(e>=160)||!(e<192))return fe--,fm();if(e-=160,fn>=fe)return p6.slice(fe-fa,(fe+=e)-fa);if(!(0==fn&&p4<180))return fb(e);let t=(e<<5^(e>1?p7.getUint16(fe):e>0?p3[fe]:0))&4095,i=fO[t],r=fe,s=fe+e-3,a,o=0;if(i&&i.bytes==e){for(;r<s;){if((a=p7.getUint32(r))!=i[o++]){r=1879048192;break}r+=4}for(s+=3;r<s;)if((a=p3[r++])!=i[o++]){r=1879048192;break}if(r===s)return fe=r,i.string;s-=3,r=fe}for(i=[],fO[t]=i,i.bytes=e;r<s;)a=p7.getUint32(r),i.push(a),r+=4;for(s+=3;r<s;)a=p3[r++],i.push(a);let l=e<16?fP(e):fT(e);return null!=l?i.string=l:i.string=fb(e)}var fL=(e,t)=>{var i=fm();let r=e;void 0!==t&&(e=e<32?-((t<<5)+e):(t<<5)+e,i.highByte=t);let s=p5[e];return s&&s.isShared&&((p5.restoreStructures||(p5.restoreStructures=[]))[e]=s),p5[e]=i,i.read=fv(i,r),i.read()},fB="object"==typeof self?self:global;fo[0]=()=>{},fo[0].noBuffer=!0,fo[101]=()=>{let e=fm();return(fB[e[0]]||Error)(e[1])},fo[105]=e=>{let t=p7.getUint32(fe-4);p9||(p9=new Map);let i=p3[fe],r,s={target:r=i>=144&&i<160||220==i||221==i?[]:{}};p9.set(t,s);let a=fm();return s.used?Object.assign(r,a):(s.target=a,a)}
3139,fo[112]=e=>{let t=p7.getUint32(fe-4),i=p9.get(t);return i.used=!0,i.target},fo[115]=()=>new Set(fm());var fz=["Int8","Uint8","Uint8Clamped","Int16","Uint16","Int32","Uint32","Float32","Float64","BigInt64","BigUint64"].map(e=>e+"Array");function fF(e){let t=p4,i=fe,r=fr,s=fa,a=fn,o=p6,l=fi,h=p9,c=p8,d=new Uint8Array(p3.slice(0,p4)),u=p5,p=p5.slice(0,p5.length),f=fs,m=fd,g=e();return p4=t,fe=i,fr=r,fa=s,fn=a,p6=o,fi=l,p9=h,p8=c,p3=d,fd=m,(p5=u).splice(0,p5.length,...p),fs=f,p7=new DataView(p3.buffer,p3.byteOffset,p3.byteLength),g}function fN(){p3=null,p9=null,p5=null}fo[116]=e=>{let t=e[0],i=fz[t];if(!i)throw Error("Could not find typed array for code "+t);return new fB[i](Uint8Array.prototype.slice.call(e,1).buffer)},fo[120]=()=>{let e=fm();return new RegExp(e[0],e[1])},fo[98]=e=>{let t=(e[0]<<24)+(e[1]<<16)+(e[2]<<8)+e[3],i=fe;fe+=t-4,(p8=[fm(),fm()]).position0=0,p8.position1=0;let r=fe;fe=i;try{return fm()}finally{fe=r}},fo[255]=e=>new Date(4==e.length?(16777216*e[0]+(e[1]<<16)+(e[2]<<8)+e[3])*1e3:8==e.length?((e[0]<<22)+(e[1]<<14)+(e[2]<<6)+(e[3]>>2))/1e6+((3&e[3])*4294967296+16777216*e[4]+(e[5]<<16)+(e[6]<<8)+e[7])*1e3:12==e.length?((e[0]<<24)+(e[1]<<16)+(e[2]<<8)+e[3])/1e6+((128&e[4]?-281474976710656:0)+1099511627776*e[6]+4294967296*e[7]+16777216*e[8]+(e[9]<<16)+(e[10]<<8)+e[11])*1e3:"invalid");var fk=Array(147);for(let e=0;e<256;e++)fk[e]=+("1e"+Math.floor(45.15-.30103*e));var fU=new fu({useRecords:!1});new Uint8Array((fU.unpack,fU.unpackMultiple,fU.unpack,new Float32Array(1)).buffer,0,4);try{fV=new TextEncoder}catch{}var fV,fj,fG,fH,fW,fq,fX="u">typeof td,fY=fX?td.allocUnsafeSlow:Uint8Array,fQ=fX?td:Uint8Array,fK=fX?4294967296:2144337920,fZ=0,fJ=null,f$=/[\u0080-\uFFFF]/,f0=Symbol("record-id"),f1=class extends fu{constructor(e){super(e),this.offset=0;let t,i,r,s,a,o=0,l=fQ.prototype.utf8Write?function(e,t,i){return fH.utf8Write(e,t,i)}:!!fV&&!!fV.encodeInto&&function(e,t){return fV.encodeInto(e,fH.subarray(t)).written},h=this;e||(e={});let c=e&&e.sequential,d=e.structures||e.saveStructures,u=e.maxSharedStructures;if(null==u&&(u=d?32:0),u>8160)throw Error("Maximum maxSharedStructure is 8160");let p=e.maxOwnStructures;null==p&&(p=d?32:64),c&&!e.saveStructures&&(this.structures=[]);let f=u>32||p+u>64,m=u+64,g=u+p+64;if(g>8256)throw Error("Maximum maxSharedStructure + maxOwnStructure is 8192");let v=[],y=0,x=0;this.pack=this.encode=function(e,l){if(fH||(fW=new DataView((fH=new fY(8192)).buffer,0,8192),fZ=0),(fq=fH.length-10)-fZ<2048?(fW=new DataView((fH=new fY(fH.length)).buffer,0,fH.length),fq=fH.length-10,fZ=0):fZ=fZ+7&2147483640,t=fZ,a=h.structuredClone?new Map:null,h.bundleStrings?(fJ=["",""],fH[fZ++]=214,fH[fZ++]=98,fJ.position=fZ-t,fZ+=4):fJ=null,i=h.structures){i.uninitialized&&(i=h._mergeStructures(h.getStructures()));let e=i.sharedLength||0;if(e>u)throw Error("Shared structures is larger than maximum shared structures, try increasing maxSharedStructures to "+i.sharedLength);if(!i.transitions){i.transitions=Object.create(null);for(let t=0;t<e;t++){let e=i[t];if(!e)continue;let r,s=i.transitions;for(let t=0,i=e.length;t<i;t++){let i=e[t];(r=s[i])||(r=s[i]=Object.create(null)),s=r}s[f0]=t+64}o=e}c||(i.nextId=e+64)}r&&(r=!1),s=i||[];try{if(b(e),fJ){fW.setUint32(fJ.position+t,fZ-fJ.position-t);let e=fJ;fJ=null,b(e[0]),b(e[1])}if(h.offset=fZ,a&&a.idsToInsert){(fZ+=6*a.idsToInsert.length)>fq&&S(fZ),h.offset=fZ;let e=function(e,t){let i,r=6*t.length,s=e.length-r;for(t.sort((e,t)=>e.offset>t.offset?1:-1);i=t.pop();){let t=i.offset,a=i.id;e.copyWithin(t+r,t,s);let o=t+(r-=6);e[o++]=214,e[o++]=105,e[o++]=a>>24,e[o++]=a>>16&255,e[o++]=a>>8&255,e[o++]=255&a,s=t}return e}(fH.subarray(t,fZ),a.idsToInsert);return a=null,e}return l&me?(fH.start=t,fH.end=fZ,fH):fH.subarray(t,fZ)}finally{if(i){if(x<10&&x++,y>1e4)i.transitions=null,x=0,y=0,v.length>0&&(v=[]);else if(v.length>0&&!c){for(let e=0,t=v.length;e<t;e++)v[e][f0]=0;v=[]}if(r&&h.saveStructures){let r=i.sharedLength||u;i.length>r&&(i=i.slice(0,r));let s=fH.subarray(t,fZ);return!1===h.saveStructures(i,o)?(h._mergeStructures(h.getStructures()),h.pack(e)):(o=r,s)}}l&mt&&(fZ=t)}};let b=e=>{fZ>fq&&(fH=S(fZ));var i,r=typeof e;if("string"===r){let t,r=e.length;if(fJ&&r>=8&&r<4096){let t=f$.test(e);fJ[t?0:1]+=e,fH[fZ++]=193,b(t?-r:r);return}t=r<32?1:r<256?2:r<65536?3:5;let s=3*r;if(fZ+s>fq&&(fH=S(fZ+s)),r<64||!l){let s,a,o,l=fZ+t;
3139for(s=0;s<r;s++)(a=e.charCodeAt(s))<128?fH[l++]=a:(a<2048?fH[l++]=a>>6|192:((64512&a)==55296&&(64512&(o=e.charCodeAt(s+1)))==56320?(a=65536+((1023&a)<<10)+(1023&o),s++,fH[l++]=a>>18|240,fH[l++]=a>>12&63|128):fH[l++]=a>>12|224,fH[l++]=a>>6&63|128),fH[l++]=63&a|128);i=l-fZ-t}else i=l(e,fZ+t,s);i<32?fH[fZ++]=160|i:i<256?(t<2&&fH.copyWithin(fZ+2,fZ+1,fZ+1+i),fH[fZ++]=217,fH[fZ++]=i):i<65536?(t<3&&fH.copyWithin(fZ+3,fZ+2,fZ+2+i),fH[fZ++]=218,fH[fZ++]=i>>8,fH[fZ++]=255&i):(t<5&&fH.copyWithin(fZ+5,fZ+3,fZ+3+i),fH[fZ++]=219,fW.setUint32(fZ,i),fZ+=4),fZ+=i}else if("number"===r){if(e>>>0===e)e<64?fH[fZ++]=e:e<256?(fH[fZ++]=204,fH[fZ++]=e):e<65536?(fH[fZ++]=205,fH[fZ++]=e>>8,fH[fZ++]=255&e):(fH[fZ++]=206,fW.setUint32(fZ,e),fZ+=4);else if(e>>0===e)e>=-32?fH[fZ++]=256+e:e>=-128?(fH[fZ++]=208,fH[fZ++]=e+256):e>=-32768?(fH[fZ++]=209,fW.setInt16(fZ,e),fZ+=2):(fH[fZ++]=210,fW.setInt32(fZ,e),fZ+=4);else{let t;if((t=this.useFloat32)>0&&e<4294967296&&e>=-2147483648){let i;if(fH[fZ++]=202,fW.setFloat32(fZ,e),t<4||(i=e*fk[(127&fH[fZ])<<1|fH[fZ+1]>>7])>>0===i){fZ+=4;return}fZ--}fH[fZ++]=203,fW.setFloat64(fZ,e),fZ+=8}}else if("object"===r){if(e){if(a){let i=a.get(e);if(i){if(!i.id){let e=a.idsToInsert||(a.idsToInsert=[]);i.id=e.push(i)}fH[fZ++]=214,fH[fZ++]=112,fW.setUint32(fZ,i.id),fZ+=4;return}a.set(e,{offset:fZ-t})}let r=e.constructor;if(r===Object)w(e,!0);else if(r===Array){(i=e.length)<16?fH[fZ++]=144|i:i<65536?(fH[fZ++]=220,fH[fZ++]=i>>8,fH[fZ++]=255&i):(fH[fZ++]=221,fW.setUint32(fZ,i),fZ+=4);for(let t=0;t<i;t++)b(e[t])}else if(r===Map)for(let[t,r]of((i=e.size)<16?fH[fZ++]=128|i:i<65536?(fH[fZ++]=222,fH[fZ++]=i>>8,fH[fZ++]=255&i):(fH[fZ++]=223,fW.setUint32(fZ,i),fZ+=4),e))b(t),b(r);else{for(let t=0,i=fj.length;t<i;t++)if(e instanceof fG[t]){let i,r=fj[t];if(r.write){r.type&&(fH[fZ++]=212,fH[fZ++]=r.type,fH[fZ++]=0),b(r.write.call(this,e));return}let s=fH,a=fW,o=fZ;fH=null;try{i=r.pack.call(this,e,e=>(fH=s,s=null,(fZ+=e)>fq&&S(fZ),{target:fH,targetView:fW,position:fZ-e}),b)}finally{s&&(fH=s,fW=a,fZ=o,fq=fH.length-10)}i&&(i.length+fZ>fq&&S(i.length+fZ),fZ=function(e,t,i,r){let s=e.length;switch(s){case 1:t[i++]=212;break;case 2:t[i++]=213;break;case 4:t[i++]=214;break;case 8:t[i++]=215;break;case 16:t[i++]=216;break;default:s<256?(t[i++]=199,t[i++]=s):(s<65536?(t[i++]=200,t[i++]=s>>8):(t[i++]=201,t[i++]=s>>24,t[i++]=s>>16&255,t[i++]=s>>8&255),t[i++]=255&s)}return t[i++]=r,t.set(e,i),i+=s}(i,fH,fZ,r.type));return}w(e,!e.hasOwnProperty)}}else fH[fZ++]=192}else if("boolean"===r)fH[fZ++]=e?195:194;else if("bigint"===r){if(e<BigInt(1)<<BigInt(63)&&e>=-(BigInt(1)<<BigInt(63)))fH[fZ++]=211,fW.setBigInt64(fZ,e);else if(e<BigInt(1)<<BigInt(64)&&e>0)fH[fZ++]=207,fW.setBigUint64(fZ,e);else if(this.largeBigIntToFloat)fH[fZ++]=203,fW.setFloat64(fZ,Number(e));else throw RangeError(e+" was too large to fit in MessagePack 64-bit integer format, set largeBigIntToFloat to convert to float-64");fZ+=8}else if("undefined"===r)this.encodeUndefinedAsNil?fH[fZ++]=192:(fH[fZ++]=212,fH[fZ++]=0,fH[fZ++]=0);else if("function"===r)b(this.writeFunction&&this.writeFunction());else throw Error("Unknown type: "+r)},w=!1===this.useRecords?this.variableMapSize?e=>{let t,i=Object.keys(e),r=i.length;r<16?fH[fZ++]=128|r:r<65536?(fH[fZ++]=222,fH[fZ++]=r>>8,fH[fZ++]=255&r):(fH[fZ++]=223,fW.setUint32(fZ,r),fZ+=4);for(let s=0;s<r;s++)b(t=i[s]),b(e[t])}:(e,i)=>{fH[fZ++]=222;let r=fZ-t;fZ+=2;let s=0;for(let t in e)(i||e.hasOwnProperty(t))&&(b(t),b(e[t]),s++);fH[r+++t]=s>>8,fH[r+t]=255&s}:e=>{let t=Object.keys(e),i,a=s.transitions||(s.transitions=Object.create(null)),o=0;for(let e=0,r=t.length;e<r;e++){let r=t[e];(i=a[r])||(i=a[r]=Object.create(null),o++),a=i}let l=a[f0];if(l)l>=96&&f?(fH[fZ++]=(31&(l-=96))+96,fH[fZ++]=l>>5):fH[fZ++]=l;else{(l=s.nextId)||(l=64),l<m&&this.shouldShareStructure&&!this.shouldShareStructure(t)?((l=s.nextOwnId)<g||(l=m),s.nextOwnId=l+1):(l>=g&&(l=m),s.nextId=l+1);let e=t.highByte=l>=96&&f?l-96>>5:-1;a[f0]=l,s[l-64]=t,l<m?(t.isShared=!0,s.sharedLength=l-63,r=!0,e>=0?(fH[fZ++]=(31&l)+96,fH[fZ++]=e):fH[fZ++]=l):(e>=0?(fH[fZ++]=213,fH[fZ++]=114,fH[fZ++]=(31&l)+96,fH[fZ++]=e):(fH[fZ++]=212,fH[fZ++]=114,fH[fZ++]=l),o&&(y+=x*o),v.length>=p&&(v.shift()[f0]=0),v.push(a),b(t))}for(let i=0,r=t.length;i<r;i++)b(e[t[i]])},S=e=>{let i;if(e>
313916777216){if(e-t>fK)throw Error("Packed buffer would be larger than maximum buffer size");i=Math.min(fK,4096*Math.round(Math.max((e-t)*(e>67108864?1.25:2),4194304)/4096))}else i=(Math.max(e-t<<2,fH.length-1)>>12)+1<<12;let r=new fY(i);return fW=new DataView(r.buffer,0,i),fH.copy?fH.copy(r,0,t,e):r.set(fH.slice(t,e)),fZ-=t,t=0,fq=r.length-10,fH=r}}useBuffer(e){fW=new DataView((fH=e).buffer,fH.byteOffset,fH.byteLength),fZ=0}};function f2(e,t,i,r){let s=e.byteLength;if(s+1<256){var{target:a,position:o}=i(4+s);a[o++]=199,a[o++]=s+1}else if(s+1<65536){var{target:a,position:o}=i(5+s);a[o++]=200,a[o++]=s+1>>8,a[o++]=s+1&255}else{var{target:a,position:o,targetView:l}=i(7+s);a[o++]=201,l.setUint32(o,s+1),o+=4}a[o++]=116,a[o++]=t,a.set(new Uint8Array(e.buffer,e.byteOffset,e.byteLength),o)}function f3(e,t){let i=e.byteLength;if(i<256){var r,s,{target:r,position:s}=t(i+2);r[s++]=196,r[s++]=i}else if(i<65536){var{target:r,position:s}=t(i+3);r[s++]=197,r[s++]=i>>8,r[s++]=255&i}else{var{target:r,position:s,targetView:a}=t(i+5);r[s++]=198,a.setUint32(s,i),s+=4}r.set(e,s)}function f4(e){if(e.Class){if(!e.pack&&!e.write)throw Error("Extension has no pack or write function");if(e.pack&&!e.type)throw Error("Extension has no type (numeric code to identify the extension)");fG.unshift(e.Class),fj.unshift(e)}e.unpack?fo[e.type]=e.unpack:fo[e.type]=e}fG=[Date,Set,Error,RegExp,ArrayBuffer,Object.getPrototypeOf(Uint8Array.prototype).constructor,fh],fj=[{pack(e,t,i){let r=e.getTime()/1e3;if((this.useTimestamp32||0===e.getMilliseconds())&&r>=0&&r<4294967296){let{target:e,targetView:i,position:s}=t(6);e[s++]=214,e[s++]=255,i.setUint32(s,r)}else if(r>0&&r<17179869184){let{target:i,targetView:s,position:a}=t(10);i[a++]=215,i[a++]=255,s.setUint32(a,4e6*e.getMilliseconds()+(r/1e3/4294967296>>0)),s.setUint32(a+4,r)}else if(isNaN(r)){if(this.onInvalidDate)return t(0),i(this.onInvalidDate());let{target:e,targetView:r,position:s}=t(3);e[s++]=212,e[s++]=255,e[s++]=255}else{let{target:i,targetView:s,position:a}=t(15);i[a++]=199,i[a++]=12,i[a++]=255,s.setUint32(a,1e6*e.getMilliseconds()),s.setBigInt64(a+4,BigInt(Math.floor(r)))}}},{pack(e,t,i){let r=Array.from(e),{target:s,position:a}=t(this.structuredClone?3:0);this.structuredClone&&(s[a++]=212,s[a++]=115,s[a++]=0),i(r)}},{pack(e,t,i){let{target:r,position:s}=t(this.structuredClone?3:0);this.structuredClone&&(r[s++]=212,r[s++]=101,r[s++]=0),i([e.name,e.message])}},{pack(e,t,i){let{target:r,position:s}=t(this.structuredClone?3:0);this.structuredClone&&(r[s++]=212,r[s++]=120,r[s++]=0),i([e.source,e.flags])}},{pack(e,t){this.structuredClone?f2(e,16,t):f3(fX?td.from(e):new Uint8Array(e),t)}},{pack(e,t){let i=e.constructor;i!==fQ&&this.structuredClone?f2(e,fz.indexOf(i.name),t):f3(e,t)}},{pack(e,t){let{target:i,position:r}=t(1);i[r]=193}}];var f5=new f1({useRecords:!1});f5.pack,f5.pack;var{NEVER:f6,ALWAYS:f8,DECIMAL_ROUND:f9,DECIMAL_FIT:f7}={NEVER:0,ALWAYS:1,DECIMAL_ROUND:3,DECIMAL_FIT:4},me=512,mt=1024,mi=new f1({structuredClone:!0});function mr(e){return"MouseDown"===e||"MouseUp"===e||"KeyDown"===e||"KeyUp"===e||"Collision"===e||"Trigger"===e}f4({Class:pu.prototype.constructor,type:1,write:e=>({...e}),read:e=>(Object.setPrototypeOf(e,pu.prototype),e)}),f4({Class:px.prototype.constructor,type:2,write:e=>[...e],read:e=>(Object.setPrototypeOf(e,px.prototype),e)}),f4({Class:py.prototype.constructor,type:3,write:e=>[...e],read:e=>(Object.setPrototypeOf(e,py.prototype),e)}),f4({Class:pQ.prototype.constructor,type:4,write:e=>e.id,read:e=>new pQ(e)}),f4({Class:pK.prototype.constructor,type:5,write:e=>e.data,read:e=>new pK(e)}),f4({Class:pA.prototype.constructor,type:6,write:e=>({...e}),read:e=>(Object.setPrototypeOf(e,pA.prototype),e)}),(e=>{function t(e){return mi.pack(e)}e.serialize=t,e.deserialize=function(e){return mi.unpack(e)},e.checksum=function(e){return(function(e){var t=0;if(0===e.length)return t;for(let i=0;i<e.length;i++)t=(t<<5)-t+e[i],t&=t;return t})(t(function e(t){if(pv(t))return t;if(Array.isArray(t))return t.map(e);if("object"!=typeof t||null===t)return t;{let i={};for(let r of Object.keys(t).sort())i[r]=e(t[r]);return Object.setPrototypeOf(i,Object.getPrototypeOf(t)),i}}(e))).toString()}})(ma||(ma={})),(ms=mn||(mn={})).toEventUIType=function(e){return"Conditional"===e.type?"Distance"===e.condition.type?"Distance":"StateChange":e.type},ms.fromEventUIType=function(e){return"Distance"===e||"StateChange"===e?"Conditional":e};var ms,ma,mn,mo,ml={LookAt:[],Follow:["Create"],DragDrop:["Transition","Animation","Audio","Particles","Create","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],MouseHover:["Transition","Animation","Particles","Create","Destroy","SwitchCamera","SceneTransition","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Scroll:["Transition","Animation","Create","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Start:["Transition","Animation","Audio","Particles","Video","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Conditional:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],MouseDown:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],MouseUp:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],MousePress:["Transition","Animation","Audio","Particles","Video","Link","Create","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],KeyDown:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],KeyUp:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],KeyPress:["Transition","Animation","Audio","Particles","Video","Link","Create","SwitchCamera","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],GameControl:["Transition","Animation","Audio","Particles","Create","Conditional"],Collision:["Transition","Animation","Audio","Particles","Video","Create","Destroy","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Trigger:["Transition","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Resize:["Transition","Animation","Audio","Particles","Video","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],VariableChange:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],API:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],WEBHOOK:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],AIAssistantListener:["SetVariable"],AIAssistantTrigger:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"]};(my=mo||(mo={})).is=function(e){return"MouseDown"===e.type||"MouseUp"===e.type||"MousePress"===e.type||"KeyDown"===e.type||"KeyUp"===e.type||"KeyPress"===e.type},my.defaultData=function(e){return"MouseDown"===e||"MouseUp"===e||"MousePress"===e?{type:e,mode:"Object",disabled:!1,actions:new px}:{type:e,disabled:!1,key:void 0,actions:new px}},(mx=mW||(mW={})).propertyDefaultData=function(e){return{type:"Property",value:[e??null,"position","x"]}},mx.valueDefaultData={type:"Literal",value:0},(mb=mq||(mq={})).comparisonDefaultData=function(e){return{type:"Comparison",operator:"==",lOperand:mW.propertyDefaultData(e),rOperand:{...mW.valueDefaultData}}},mb.distanceDefaultData=function(e){return{type:"Distance",toObject:e??null,fromObject:e??null,distance:200}},mb.stateDefaultData=function(e,t){return{type:"State",object:e??null,state:t??null}},(mX||(mX={})).isConditionalSubActions=function(e){return void 0!==e.find(e=>"ifActions"===e||"elseActions"===e)},(mw=mY||(mY={})).is=function(e){return"Conditional"===e.type},mw.defaultData=function(e){return{type:"Conditional",disabled:!1,inActions:new px,outActions:new px,condition:mq.distanceDefaultData(e)}},(mQ||(mQ={})).defaultData={type:"DragDrop",cursor:"hand",disabled:!1,dampingFactor:1,objects:[],snapTo:"center",snapSurfaceMode:"bbox",snapSurfaceOffset:0,dropOn:"all",autoOrient:!0,dropDestinations:[],plane:"adaptive",planeMode:"locked",referenceFrame:"global",limits:[-1/0,1/0,-1/0,1/0,-1/0,1/0],drop:!1,resetOnSnapFail:!1,snapSpeed:20,resetSpeed:20,dragDropActions:{drag:new px,drop:new px}},(mK||(mK={})).defaultData={type:"Follow",disabled:!1,maxDelta:0,dampingFactor:1,target:"cursor",plane:"custom",resetOnPointerLeave:!0,resetAfterDistanceLimit:!0,enabledTranslation:[!0,!0,!0],limitDistanceEnabled:!1,limitDistance:1e3,snapDelay:0,resetSpeed:5,actions:new px},(mZ||(mZ={})).defaultData={type:"LookAt",disabled:!1,distance:1e3,dampingFactor:1,target:"cursor",tilt:"up",axis:"z",plane:"custom",resetOnPointerLeave:!0,resetAfterDistanceLimit:!0,enabledRotation:[!0,!0,!0],limitDistanceEnabled:!1,limitDistance:1e3,snapDelay:0,resetSpeed:5},(mS=mJ||(mJ={})).is=function(e){return"MouseHover"===e.type},mS.defaultData=function(){return{type:"MouseHover",disabled:!1,actions:new px}},(m_=m$||(m$={})).is=function(e){return"Scroll"===e.type},m_.defaultData=function(){return{type:"Scroll",disabled:!1,steps:100,trigger:"load",startFrom:"enter",enterAnchor:"top",startOffset:0,endAfter:400,actions:new px}},(mA=m0||(m0={})).is=function(e){return"Start"===e.type},mA.defaultData=function(){return{type:"Start",disabled:!1,actions:new px}},(mM=m1||(m1={})).is=function(e){return"Collision"===e.type},mM.defaultData=function(){return{type:"Collision",disabled:!1,target:"character",actions:new px}},(mE=m2||(m2={})).is=function(e){return"Trigger"===e.type},mE.defaultData=function(e,t){return{type:"Trigger",disabled:!1,target:"all",triggeringObjects:[],actions:new px,triggerZone:"box",position:t.toArray(),rotation:[0,0,0],size:e.toArray(),radius:e.length()/2,helperVisible:!0}},(mC=m3||(m3={}
vendor: 6,755 bytes, line 3139
3139)).defaultSizes={mobile:[480,480],tablet:[768,768],desktop:[1200,1200],custom:[769,1200]},mC.is=function(e){return"Resize"===e.type},mC.sizeToDevice=function(e){return"string"==typeof e?e:"custom"},mC.deviceToSize=function(e){return"string"==typeof e?[...mC.defaultSizes[e]]:[...e]},mC.defaultData=function(){let e={size:"mobile",operator:"<",actions:new px},t={size:"tablet",operator:"<",actions:new px},i={size:[...mC.defaultSizes.custom],operator:"<>",actions:new px},r=new px;return r.push({id:tY.generateUUID(),fi:0,data:e},{id:tY.generateUUID(),fi:1,data:t},{id:tY.generateUUID(),fi:2,data:i}),{type:"Resize",disabled:!1,orientation:"horizontal",breakpoints:r}},mC.defaultBreakpointData=function(){return{size:[...mC.defaultSizes.custom],operator:"<>",actions:new px}},(mT=m4||(m4={})).propertyPaths={Position:["position"],"Position X":["position","x"],"Position Y":["position","y"],"Position Z":["position","z"],Rotation:["rotation"],"Rotation X":["rotation","x"],"Rotation Y":["rotation","y"],"Rotation Z":["rotation","z"],Scale:["scale"],"Scale X":["scale","x"],"Scale Y":["scale","y"],"Scale Z":["scale","z"],Width:["width"],Height:["height"],Depth:["depth"],"Mouse Position X":["mouse","x"],"Mouse Position Y":["mouse","y"],"Mouse Pressed":["mouse","pressed"],"Screen Width":["mouse","width"],"Screen Height":["mouse","height"],"Hit Position X":["raycast","x"],"Hit Position Y":["raycast","y"],"Hit Position Z":["raycast","z"],"Hit Object Position X":["raycast","objX"],"Hit Object Position Y":["raycast","objY"],"Hit Object Position Z":["raycast","objZ"]},mT.is=function(e){return"VariableChange"===e.type},mT.defaultData=function(){return{disabled:!1,type:"VariableChange",actions:new px,variableId:"",objectId:null,property:"Position X"}},(mP=m5||(m5={})).is=function(e){return"API"===e.type},mP.defaultData=function(){return{disabled:!1,type:"API",successActions:new px,errorActions:new px,userAPIId:""}},(mD=m6||(m6={})).is=function(e){return"WEBHOOK"===e.type},mD.defaultData=function(){return{disabled:!1,type:"WEBHOOK",actions:new px,userWebhookId:""}},(mI=m8||(m8={})).is=function(e){return"AIAssistantListener"===e.type},mI.defaultData=function(){return{disabled:!1,type:"AIAssistantListener",actions:new px,analysis:"average",analysisRange:[0,71],analysisSingle:0}},(mO=m9||(m9={})).is=function(e){return"AIAssistantTrigger"===e.type},mO.defaultData=function(){return{disabled:!1,description:"",type:"AIAssistantTrigger",actions:new px}};var mh="personal camera",mc="a218fcc3-276b-49b9-b485-49037fd14f5f";function md(e){return"string"==typeof e&&36===e.length&&/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)}(e=>{function t(e,t){return Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2)}function i(e,i){return Math.sqrt(t(e,i))}function r(t,i,r){let s=e.sub(i,t),a=e.sub(r,t),o=e.dot(s,a)/e.dot(s,s),l=e.scalarMultiply(s,o);return e.add(t,l)}e.isEqual=function(e,t){return e[0]===t[0]&&e[1]===t[1]},e.lerp=function(e,t,i){return[e[0]+(t[0]-e[0])*i,e[1]+(t[1]-e[1])*i]},e.add=function(e,t){return[e[0]+t[0],e[1]+t[1]]},e.sub=function(e,t){return[e[0]-t[0],e[1]-t[1]]},e.multiply=function(e,t){return[e[0]*t[0],e[1]*t[1]]},e.divide=function(e,t){return[e[0]/t[0],e[1]/t[1]]},e.distanceSquared=t,e.distance=i,e.dot=function(e,t){return e[0]*t[0]+e[1]*t[1]},e.scalarMultiply=function(e,t){return[e[0]*t,e[1]*t]},e.projectionOnto=r,e.projectionOntoDistance=function(e,t,s){return i(e,r(e,t,s))},e.center=function(e,t){return[(e[0]+t[0])*.5,(e[1]+t[1])*.5]}})(m7||(m7={})),(mR=ge||(ge={})).isEqual=function(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]},mR.add=function(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]},mR.sub=function(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]},mR.div=function(e,t){return[e[0]/t[0],e[1]/t[1],e[2]/t[2]]},mR.mul=function(e,t){return[e[0]*t[0],e[1]*t[1],e[2]*t[2]]},mR.dist=function(e,t){return Math.hypot(e[0]-t[0],e[1]-t[1],e[2]-t[2])},mR.lerp=function(e,t,i){return[e[0]+(t[0]-e[0])*i,e[1]+(t[1]-e[1])*i,e[2]+(t[2]-e[2])*i]},(mL=gt||(gt={})).isEqual=function(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]},mL.lerp=function(e,t,i){return[e[0]+(t[0]-e[0])*i,e[1]+(t[1]-e[1])*i,e[2]+(t[2]-e[2])*i,e[3]+(t[3]-e[3])*i]},(e=>{let t=180/Math.PI,i=Math.PI/180;function r(e){return"number"==typeof e?e*t:e}function s(e){return"number"==typeof e?e*i:e}e.radToDeg=function(e){return[r(e[0]),r(e[1]),r(e[2])]},e.degToRad=function(e){return[s(e[0]),s(e[1]),s(e[2])]}})(gi||(gi={})),(mB=gr||(gr={})).identity=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],mB.isEqual=function(e,t){for(let i=0;i<16;i++)if(e[i]!==t[i])return!1;return!0},mB.simplify=function(e){return e??mB.identity},mB.applyMatrix4=function(e,t){let i=t.slice(0);for(var r=0,s=t.length;r<s;r+=3){let s=e[3]*t[r]+e[7]*t[r+1]+e[11]*t[r+2]+e[15];i[r]=(e[0]*t[r]+e[4]*t[r+1]+e[8]*t[r+2]+e[12])/s,i[r+1]=(e[1]*t[r]+e[5]*t[r+1]+e[9]*t[r+2]+e[13])/s,i[r+2]=(e[2]*t[r]+e[6]*t[r+1]+e[10]*t[r+2]+e[14])/s}return i},(mz=gs||(gs={})).isRGB=function(e){return"object"==typeof e&&"number"==typeof e.r&&"number"==typeof e.g&&"number"==typeof e.b},mz.white={r:1,g:1,b:1},mz.red={r:1,g:0,b:0},mz.black={r:0,g:0,b:0},mz.toRgb255a1=function(e){return{r:Math.round(255*e.r),g:Math.round(255*e.g),b:Math.round(255*e.b),a:1}},mz.clone=function(e){return{r:e.r,g:e.g,b:e.b}},mz.fromHex=function(e){return{r:((e=Math.floor(e))>>16&255)/255,g:(e>>8&255)/255,b:(255&e)/255}},mz.toHex=function(e){return 65536*Math.round(255*e.r)+256*Math.round(255*e.g)+Math.round(255*e.b)},mz.equals=function(e,t){return e.r===t.r&&e.g===t.g&&e.b===t.b},mz.equalsFixed=function(e,t){return e.r.toFixed(2)===t.r.toFixed(2)&&e.g.toFixed(2)===t.g.toFixed(2)&&e.b.toFixed(2)===t.b.toFixed(2)},mz.lerp=function(e,t,i){return{r:e.r+(t.r-e.r)*i,g:e.g+(t.g-e.g)*i,b:e.b+(t.b-e.b)*i}},(mF=ga||(ga={})).white={...gs.white,a:1},mF.transparent={...gs.white,a:0},mF.from0to1=function(e){return{r:e[0],g:e[1],b:e[2],a:e[3]}},mF.fromHexAndA=function(e,t){return{...gs.fromHex(e),a:t}},mF.toRgb255a1=function(e){return{r:Math.round(255*e.r),g:Math.round(255*e.g),b:Math.round(255*e.b),a:e.a}},mF.equals=function(e,t){return gs.equals(e,t)&&e.a===t.a},mF.equalsFixed=function(e,t){return gs.equalsFixed(e,t)&&e.a.toFixed(2)===t.a.toFixed(2)},mF.lerp=function(e,t,i){return{r:e.r+(t.r-e.r)*i,g:e.g+(t.g-e.g)*i,b:e.b+(t.b-e.b)*i,a:e.a+(t.a-e.a)*i}},mF.toStyle=function({r:e,g:t,b:i,a:r}=mF.white){return`rgba(${255*e}, ${255*t}, ${255*i}, ${r})`},(gn||(gn={})).identity={position:[0,0,0],rotation:[0,0,0],scale:[1,1,1]},(go||(go={})).defaultData={mass:1,stiffness:80,damping:10,velocity:0},(gl||(gl={})).defaultData={control1:[.5,0],control2:[.5,1]},(r=gh||(gh={})).linear=[0,0,1,1],r.ease=[.25,.1,.25,1],r.easeIn=[.42,0,1,1],r.easeOut=[0,0,.58,1],r.easeInOut=[.42,0,.58,1],(mN=gc||(gc={}
3139)).all=["PerspectiveCamera","OrthographicCamera"],mN.is=function(e){return mN.all.includes(e)},(mk=gd||(gd={})).DefaultUp=[0,1,0],mk.DefaultTargetOffset=1e3,mk.defaultData={far:1e5,type:"OrthographicCamera",perspective:{near:70,fov:45,zoom:1},orthographic:{near:-1e5,zoom:1},up:mk.DefaultUp,isUpVectorFlipped:!1,targetOffset:mk.DefaultTargetOffset},mk.getZoom=function(e){return"PerspectiveCamera"===e.type?e.perspective?.zoom??1:e.orthographic?.zoom??1},(mU=gu||(gu={})).defaultData=function(e,t=.1){return{disabled:!1,type:"linear",hideBase:!1,count:3,radial:{radius:2*Math.max(e[0],e[1]),start:0,end:360,alignment:!1,axis:"y",scale:[1,1,1],rotation:[0,0,0],position:[0,0,0]},toObject:{object:"",spreadType:"random",scale:[0,0,0],rotation:[0,0,0],position:[0,0,0],axis:"x",seed:0,count:99,align:"normal"},linear:{scale:[1,1,1],rotation:[0,0,0],position:[e[0]+e[0]*t,0,0]},grid:{count:[2,2,2],size:e.map(e=>e*(1+t)),useCenter:!0},randomness:!1,randomnessObject:{strength:100,scale:[0,0,0],rotation:[0,0,0],position:[0,0,0],movement:1,seed:0,freqScale:10,noiseType:"perlin"}}},mU.merge=function(e,t){let i={...e};if(mu.forEach(r=>{Object.assign(i,{[r]:t[r]??e[r]})}),i.radial={...e.radial},t.radial){let r=e.radial,s=t.radial;mp.forEach(e=>{Object.assign(i.radial,{[e]:s[e]??r[e]})})}if(i.linear={...e.linear},t.linear){let r=e.linear,s=t.linear;mf.forEach(e=>{Object.assign(i.linear,{[e]:s[e]??r[e]})})}if(i.grid={...e.grid},t.grid){let r=e.grid,s=t.grid;mm.forEach(e=>{Object.assign(i.grid,{[e]:s[e]??r[e]})})}if(i.toObject={...e.toObject},t.toObject){let r=e.toObject,s=t.toObject;mg.forEach(e=>{Object.assign(i.toObject,{[e]:s[e]??r[e]})})}if(i.randomnessObject={...e.randomnessObject},t.randomnessObject){let r=e.randomnessObject,s=t.randomnessObject;mv.forEach(e=>{Object.assign(i.randomnessObject,{[e]:s[e]??r[e]})})}return i},(mV=gp||(gp={})).defaultData={radial:{},linear:{},grid:{},toObject:{},randomnessObject:{}},s=["radial","linear","grid","toObject","randomnessObject"],mV.toOps=function(e,t){let i=[];for(let r of(void 0!==e.count&&i.push({type:0,path:t,props:{count:e.count}}),s)){let s=e[r];s&&Object.keys(s).length>0&&i.push({type:0,path:[...t,r],props:s})}return i};var mu=["count"],mp=["radius","start","end","position","scale","rotation"],mf=["position","scale","rotation"],mm=["count","size"],mg=["count","position","scale","rotation"],mv=["strength","scale","rotation","position","movement","seed","freqScale"];(mj=gf||(gf={})).all=["PointLight","SpotLight","DirectionalLight","HemisphereLight"],mj.is=function(e){return mj.all.includes(e)},(gm||(gm={})).defaultData=function(e){return function(e){if("PointLight"===e)return{type:e,color:ga.white,intensity:1,distance:2e3,decay:1,shadows:!0,shadowResolution:1024,shadowRadius:1,penumbraSize:.5,depth:1e5};if("SpotLight"===e)return{type:e,color:ga.white,intensity:1,distance:2e3,decay:1,shadows:!0,penumbra:0,angle:30/180*Math.PI,depth:1e5,penumbraSize:.5,shadowResolution:1024,shadowRadius:1};if("DirectionalLight"===e)return{type:e,color:ga.white,intensity:1,shadows:!0,size:2e3,depth:1e5,penumbraSize:.5,shadowResolution:1024,shadowRadius:1};throw Error("not implemented")}(e)},(a=gg||(gg={})).defaultShapeData={type:"PlaneEmitterShape",size:[100,100,100]},a.defaultCollisionData={colliderEntityId:null,collisionBounce:.75},a.defaultData={renderMaterial:{type:"particleMaterial",color:{r:1,g:.2,b:.545,a:1},color2:{r:.945,g:.714,b:.184,a:1},coloring:"gradient",ease:"linearFadeOut",easeSize:"linearFadeOut",transparent:!0,size:[40,40],texture:"pt_default_particle",spriteRotation:[0,0]},birthRatePerSec:50,gravity:1,noiseStrength:0,noiseScale:0,noiseSeed:1,noiseType:"curl",randomRotation:0,randomScale:.2,randomMass:.5,rootObjectType:"instancedMesh",life:1,direction:[0,0,0],directionMode:"axis",speed:10,shape:a.defaultShapeData,autoPlay:!0,emitTimeDelay:0,emitTimeCycle:"infinity",emitTimeDuration:1,...a.defaultCollisionData},(gv||(gv={})).defaultData={enabled:"visibility",fusedBody:!0,rigidBody:"positioned",density:1,pointMass:0,gravityScale:1,friction:.5,damping:0,restitution:.2,colliderType:"convex",enabledRotation:[!0,!0,!0],enabledTranslation:[!0,!0,!0]},(mG=gy||(gy={})).defaultData={castShadow:!0,receiveShadow:!0}
vendor: 13,983 bytes, line 3139
3139,mG.equals=function(e,t){return e.castShadow===t.castShadow&&e.receiveShadow===t.receiveShadow},(mH=gx||(gx={})).defaultData={flatShading:!1,wireframe:!1,side:0},mH.equals=function(e,t){return e.flatShading===t.flatShading&&e.side===t.side&&e.wireframe===t.wireframe},(gb||(gb={})).defaultData={...gx.defaultData,...gy.defaultData},(gw||(gw={})).getMaterialData=function(e,t){let i=[];if("material"in e){let r="string"==typeof e.material?t.materials[e.material]??t.lib.materials[e.material]?.asset:e.material;r&&i.push(r)}else if("materials"in e)for(let r of e.materials){let e="string"==typeof r?t.materials[r]??t.lib.materials[r]?.asset:r;e&&i.push(e)}return i},(o=gS||(gS={})).defaultVideo={data:"",thumb:"/_assets/_videos/catThumb.png",type:"video",name:"Cat video"},o.maxSize=3e7,(g_||(g_={})).is=function(e){return"texture"===e||"video"===e||"color"===e||"depth"===e||"normal"===e||"gradient"===e||"noise"===e||"fresnel"===e||"rainbow"===e||"toon"===e||"outline"===e||"particle"===e||"transmission"===e||"matcap"===e||"displace"===e||"pattern"===e||"light"===e},(gA||(gA={})).is=function(e){return"phong"===e||"toon"===e||"lambert"===e||"physical"===e};var my,mx,mb,mw,mS,m_,mA,mM,mE,mC,mT,mP,mD,mI,mO,mR,mL,mB,mz,mF,mN,mk,mU,mV,mj,mG,mH,mW,mq,mX,mY,mQ,mK,mZ,mJ,m$,m0,m1,m2,m3,m4,m5,m6,m8,m9,m7,ge,gt,gi,gr,gs,ga,gn,go,gl,gh,gc,gd,gu,gp,gf,gm,gg,gv,gy,gx,gb,gw,gS,g_,gA,gM,gE=["mode","gradientType","noiseType","displacementType","projection","cnormal","crop","axis","side"],gC=["wrapping","image","video","name","minFilter","magFilter"];(vM=gM||(gM={})).patch=function(e,t){let{texture:i,...r}=t;if(Object.assign(e,r),i){let t=e.texture;t&&Object.assign(t,i)}},vM.defaultData=function(e,t){return"light"===e&&t?function(e){let t={mode:0,isMask:!1,visible:!0,bumpMap:void 0,bumpMapIntensity:5,roughnessMap:void 0,alphaOverride:1};switch(e){case"phong":return{...t,category:"phong",specular:{r:.2,g:.2,b:.2},shininess:5,type:"light",visible:!0,mode:0,occlusion:!0,alpha:.6};case"toon":return{...t,category:"toon",specular:{r:.2,g:.2,b:.2},shininess:10,type:"light",alpha:1};case"lambert":return{...t,category:"lambert",emissive:{r:0,g:0,b:0},type:"light",alpha:1,visible:!0,mode:0,occlusion:!0};case"physical":return{...t,category:"physical",roughness:.2,metalness:.2,reflectivity:.2,type:"light",alpha:1,visible:!0,mode:0,occlusion:!0}}}(t):function(e){let t={alpha:1,mode:0,isMask:!1,visible:!0};switch(e){case"texture":return{...t,type:"texture",size:[128,128],blending:0,axis:"x",side:2,projection:0,texture:{image:"image_0",wrapping:1e3,repeat:[1,1],offset:[0,0],rotation:0,minFilter:1008,magFilter:1006},crop:!1};case"video":return{...t,type:"video",size:[128,128],blending:0,axis:"x",side:2,projection:0,texture:{video:gS.defaultVideo,wrapping:1001,repeat:[1,1],offset:[0,0],rotation:0,minFilter:1008,magFilter:1006},crop:!1};case"color":return{...t,type:"color",color:gs.fromHex(5526619)};case"depth":return{...t,type:"depth",gradientType:1,smooth:!1,isVector:!0,isWorldSpace:!1,origin:[0,0,0],direction:[1,0,0],colors:[[1,1,1,1],[0,0,0,1]],steps:[0,1],near:50,far:200};case"normal":return{...t,type:"normal",cnormal:[1,1,1]};case"gradient":return{...t,type:"gradient",gradientType:0,smooth:!1,colors:[[0,0,0,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]],steps:[0,1,1,1,1,1,1,1,1,1],num:2,angle:0,offset:[0,0],morph:[0,0]};case"noise":return{...t,type:"noise",size:[100,100,100],noiseType:0,scale:1,move:1,colorA:{...gs.fromHex(6710886),a:1},colorB:{...gs.fromHex(6710886),a:1},colorC:{...gs.fromHex(16777215),a:1},colorD:{...gs.fromHex(16777215),a:1},distortion:[1,1],fA:[1.7,9.2],fB:[8.3,2.8],voronoiStyle:0,highCut:1,lowCut:0,smoothness:.3,seed:0,quality:1};case"fresnel":return{...t,type:"fresnel",color:ga.fromHexAndA(16777215,1),bias:.1,scale:1,intensity:2,factor:1};case"rainbow":return{...t,type:"rainbow",filmThickness:30,movement:0,wavelengths:[0,0,0],noiseStrength:0,noiseScale:1,offset:[0,0,0]};case"toon":return{...t,type:"toon",positioning:2,colors:[[0,0,0,1],[.5,.5,.5,1],[.5,.5,.5,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]],steps:[0,.475,.525,1,1,1,1,1,1,1],num:4,source:[0,1e3,0],isWorldSpace:!0,noiseStrength:0,noiseScale:1,shadowColor:ga.fromHexAndA(0,0),offset:[0,0,0]};case"outline":return{...t,type:"outline",outlineColor:ga.fromHexAndA(0,1),contourColor:ga.fromHexAndA(0,1),outlineWidth:2,contourWidth:5,outlineThreshold:.4,contourThreshold:0,outlineSmoothing:0,contourFrequency:10,contourDirection:[0,1,0],positionalLines:!1,compensation:!0};case"matcap":return{...t,type:"matcap",texture:{image:"matcap_0",wrapping:1001,repeat:[1,1],offset:[0,0],rotation:0,minFilter:1008,magFilter:1006}};case"transmission":return{...t,type:"transmission",thickness:10,ior:1.5,roughness:1};case"displace":return{visible:!0,type:"displace",displacementType:"noise",noiseType:0,scale:10,movement:1,offset:[0,0,0],intensity:8,voronoiStyle:0,smoothness:.3,seed:0,highCut:1,lowCut:0,quality:1};case"pattern":return{...t,type:"pattern",style:0,projection:0,axis:"y",blending:0,offset:[0,0],colorA:{...gs.fromHex(0),a:1},colorB:{...gs.fromHex(16777215),a:1},frequency:[10,10],size:.5,variation:0,smoothness:.5,zigzag:0,rotation:0,vertical:[0,1],horizontal:[0,1],sides:6}}}(e)},(e=>{function t(e,t="layer1",i="layer2"){let r=new px;return r.push({fi:0,data:gM.defaultData("light",e),id:t}),r.push({fi:1,data:gM.defaultData("color"),id:i}),{layers:r}}e.isMergable=function(e){return!e.layers.some(e=>"texture"===e.data.type&&0!==e.data.projection||"depth"===e.data.type&&!e.data.isWorldSpace||"noise"===e.data.type||"displace"===e.data.type)},e.getHash=function(e){let t="";return e.layers.forEach(e=>{Object.entries(e.data).forEach(([e,i])=>{t+=`${e}${i}`,Array.isArray(i)?i.forEach(e=>t+=`${e}`):"object"==typeof i?Object.values(i).forEach(e=>{"number"==typeof e?t+=`${e.toFixed(4)}`:t+=`${e}`}):t+=`${i}`})}),t},e.defaultEmptyData=function(){return{layers:new px}},e.defaultData=function(e="layer1",i="layer2"){return t("phong",e,i)},e.withName=function(e,t){return{...e,name:t}},e.defaultTwoLayerData=t,e.defaultUIObjectMaterial=function(e){let t=gM.defaultData("texture");e&&Object.assign(t.texture,{image:e});let i=new px;return i.push({fi:0,data:t,id:"layer1"}),i.push({fi:1,data:{...gM.defaultData("transmission"),alpha:1},id:"layer2"}),i.push({fi:2,data:{...gM.defaultData("light","lambert"),alpha:0},id:"layer3"}),{layers:i}},e.defaultTwoLayerTextureData=function(e,t="phong",i="layer1",r="layer2"){let s=gM.defaultData("texture");Object.assign(s.texture,{image:e});let a=new px;return a.push({fi:0,data:s,id:i}),a.push({fi:1,data:gM.defaultData("light",t),id:r}),{layers:a}},e.defaultTwoLayerVideoTextureData=function(e,t="phong",i="layer1",r="layer2"){let s=gM.defaultData("video");Object.assign(s.texture,{video:e});let a=new px;return a.push({fi:0,data:s,id:i}),a.push({fi:1,data:gM.defaultData("light",t),id:r}),{layers:a}}})(vk||(vk={})),(vU||(vU={})).defaultData=function(){return{points:new px,roundness:0,shapeHoles:[],isClosed:!1}},(vV||(vV={})).defaultData=function(){return{points:new px,lastInsertionPlane:null,subdivisions:12,isClosed:!1}};var gT={type:"Ellipse",width:50,height:50,spikes:16,angle:360,innerRadius:0};(vj||(vj={})).merge=function(e,t){let i={...e};return gD.forEach(r=>{Object.assign(i,{[r]:t[r]??e[r]})}),i};var gP={shape:gT,depth:1,offset:0,bevel:50,bevelSides:6,angle:0,twist:0,startScale:1,endScale:1,capType:"flat"},gD=["depth","offset","angle","twist","startScale","endScale"];(vE=vG||(vG={})).is2DParametricMesh=function(e){return"PolygonGeometry"===e||"RectangleGeometry"===e||"StarGeometry"===e||"TriangleGeometry"===e||"EllipseGeometry"===e||"UIGeometry"===e},vE.isParametricMesh=function(e){return"PolygonGeometry"===e||"PolygonGeometry"===e||"RectangleGeometry"===e||"StarGeometry"===e||"TriangleGeometry"===e||"EllipseGeometry"===e||"PathGeometry"===e||"VectorGeometry"===e||"ConeGeometry"===e||"CubeGeometry"===e||"CylinderGeometry"===e||"DodecahedronGeometry"===e||"HelixGeometry"===e||"IcosahedronGeometry"===e||"LatheGeometry"===e||"PyramidGeometry"===e||"SphereGeometry"===e||"PlaneGeometry"===e||"BackdropGeometry"===e||"TorusGeometry"===e||"TorusKnotGeometry"===e||"BooleanGeometry"===e||"TextGeometry"===e||"InputGeometry"===e},(vH||(vH={})).merge=function(e,t){let i={...e};return Object.assign(i,t),"PathGeometry"===i.type&&"extrusion"in t&&t.extrusion&&(i.extrusion={...e.extrusion},Object.assign(i.extrusion,vj.merge(i.extrusion,t.extrusion))),i},(vC=vW||(vW={})).defaultData=function(e){if("RectangleGeometry"===e)return{width:320,height:320,type:e,cornerRadius:[0,0,0,0],cornerType:0,depth:0,extrudeBevelSize:0,extrudeBevelSegments:1};if("UIGeometry"===e)return{type:e,frame:"",cornerRadius:[0,0,0,0],cornerType:0,width:1,height:1};if("PathGeometry"===e)return{type:e,width:1,height:1,depth:1,path:vV.defaultData(),extrusion:gP};if("VectorGeometry"===e)return{width:1,height:1,type:e,subdivisions:12,shape:vU.defaultData(),depth:0,extrudeBevelSize:0,extrudeBevelSegments:1};if("BooleanGeometry"===e)return{type:e,operation:2,width:0,height:0,depth:0,phongAngle:35};if("ShapeBlendGeometry"===e)return{type:e,width:0,height:0,depth:0,resolutionLevel:6,blendRange:100,useChildrenColors:!1};if("TextGeometry"===e)return{type:e,width:100,height:100,depth:0,horizontalAlign:1,verticalAlign:1,fontSize:16,lineHeight:1.2,letterSpacing:0,text:{textValue:""},textTransform:1,font:"Roboto_regular",editable:!1,extrudeBevelSize:0,extrudeBevelSegments:1};if("InputGeometry"===e)return{...vC.defaultData("TextGeometry"),type:e,editable:!0};if("SphereGeometry"===e)return{type:"SphereGeometry",width:100,height:100,depth:100,widthSegments:64,heightSegments:64,phiStart:0,phiLength:2*Math.PI,thetaStart:0,thetaLength:180};throw Error("not implemented")};var gI=["width","height","depth"];function gO(e){e.layers.forEach(e=>{if("depth"===e.type&&void 0!==e.colorA){let t=e.colorA,i=e.colorB,r=[[t.r,t.g,t.b,t.a],[i.r,i.g,i.b,i.a]],s=[0,1];for(let e=2;e<10;e++)r.push(r[1]),s.push(1);let a={...uV(pq(e),"type","visible","isVector","isWorldSpace","origin","alpha","mode"),near:Math.max(0,e.near),far:Math.max(0,e.far),colors:r,steps:s,num:2,direction:[1,0,0],smooth:!1,gradientType:1};Object.assign(e,a)}else if("depth"===e.type&&1===e.gradientType&&(e.near<0||e.far<0)){let t={...pq(e),near:Math.max(e.near,0),far:Math.max(e.far,0)};Object.assign(e,t)}})}function gR(e,t){Object.values(e.shared.materials).forEach(e=>t(e))}function gL(e,t){e.scene.objects.traverse((e,i)=>{"materials"in i?i.materials.forEach((e,r)=>{void 0===e&&(i.materials[r]=vk.defaultData(),e=i.materials[r]),"string"!=typeof e&&t(e)}):"material"in i?"string"!=typeof i.material&&(void 0===i.material&&(i.material=vk.defaultData()),t(i.material)):"Mesh"===i.type&&(void 0===i.material&&(i.material=vk.defaultData()),t(i.material)),"overrides"in i&&Object.values(i.overrides).forEach(e=>{e.material&&"string"!=typeof e.material&&Object.getPrototypeOf(e.material)!==pA.prototype&&t(e.material)})})}function gB(e){void 0===e.layers&&Object.assign(e,vk.defaultTwoLayerData("lambert"))}function gz(e){e.layers&&e.layers.forEach(e=>{if("depth"===e.type&&10===e.colors.length){let t=[...e.colors];t.push(e.colors[9]);let i=[...e.steps];i.push(e.steps[9]);let r={...pq(e),colors:t,steps:i};Object.assign(e,r)}})}function gF(e){e.scene.objects.traverse((e,t)=>{"materials"in t?t.materials.forEach(e=>{"string"!=typeof e&&gz(e)}):"material"in t&&"string"!=typeof t.material&&gz(t.material)}),Object.values(e.shared.materials).forEach(e=>gz(e))}function gN(e){e.layers&&e.layers.forEach(e=>{"depth"===e.type&&void 0!==e.num&&(e.colors=e.colors.slice(0,e.num),e.steps=e.steps.slice(0,e.num),delete e.num)})}function gk(e){e.layers&&e.layers.forEach(e=>{"displace"!==e.type&&void 0===e.isMask&&(e.isMask=!1),("texture"===e.type||"video"===e.type)&&void 0===e.blending&&(e.blending=0),("noise"===e.type||"displace"===e.type&&"noise"===e.displacementType)&&(void 0===e.voronoiStyle&&(e.voronoiStyle=0),void 0===e.highCut&&(e.highCut=1),void 0===e.lowCut&&(e.lowCut=0),void 0===e.smoothness&&(e.smoothness=.3),void 0===e.seed&&(e.seed=0),void 0===e.quality&&(e.quality=1))})}function gU(e){let t=e.layers.find(e=>"light"===e.type)?.data;t?.category==="basic"&&(Object.assign(t,gM.defaultData("light","phong")),t.visible=!1)}function gV(e){gR(e,gU),gL(e,gU)}function gj(e){e.layers.forEach(e=>{"light"===e.type&&"toon"!==e.category&&void 0===e.occlusion&&(e.occlusion=!0)})}function gG(e){e.layers&&e.layers.forEach(e=>{"light"===e.type&&void 0===e.bumpMapIntensity&&(e.bumpMapIntensity=5)})}function gH(e){e.layers&&e.layers.forEach(e=>{"light"===e.type&&void 0===e.alphaOverride&&(e.alphaOverride=1)})}(vq||(vq={})).defaultData={enabled:!1,useBackgroundColor:!1,color:gs.white,near:.1,far:2e3},l={opacity:1,blendFunction:13,enabled:!1},(vX||(vX={})).defaultData={enabled:!1,pixelation:{...l,blendFunction:16,granularity:15},bloom:{...l,blendFunction:16,intensity:1,blurScale:1,luminanceThreshold:.25,luminanceSmoothing:.025,kernelSize:3},chromaticAberration:{...l,offset:[2,2]},vignette:{...l,darkness:1,offset:0},hueSaturation:{...l,hue:3,saturation:0},brightnessContrast:{...l,brightness:.25,contrast:0},depthOfField:{...l,focusDistance:100,focalLength:20,bokehScale:5},noise:{...l,blendFunction:16}},(vY||(vY={})).defaultData={softShadowQuality:"low"},(vQ||(vQ={})).defaultData={enabled:!0,color:{r:.8274509803921568,g:.8274509803921568,b:.8274509803921568},intensity:.75},(vK||(vK={})).defaultData={occlusion:!1,aoFullRes:!1,radius:256,bias:.5,aoColor:{r:.19607843137254902,g:.19607843137254902,b:.19607843137254902}},(vZ||(vZ={})).defaultData={usePhysics:!1,gravity:-10},(vJ||(vJ={})).defaultData={playCamera:mh,gameControlObject:null},(v$||(v$={})).defaultData={backgroundColor:ga.fromHexAndA(2960946,1),postprocessing:vX.defaultData,fog:vq.defaultData,globalPhysics:vZ.defaultData,ambient:vQ.defaultData,ao:vK.defaultData,shadow:vY.defaultData,publish:vJ.defaultData},(v0||(v0={}
vendor: 4,304 bytes, line 3139
3139)).defaultData={colliderType:"box",size:[100,100,100],colliderHelperVisible:!0,forceType:"collider",forceRange:"global",forceIntensity:.5,forceDambing:.95},(vT=v1||(v1={})).isComponentRelated=function(e){return"Component"===e||"Instance"===e},vT.isEmptyOrComponent=function(e){return"Empty"===e||"Instance"===e},(vP=v2||(v2={})).identity={...gn.identity,hiddenMatrix:gr.identity},vP.fromObject=function(e){return{position:e.position,rotation:e.rotation,scale:e.scale,hiddenMatrix:e.hiddenMatrix}},vP.merge=function(e,t){return{position:t?.position||e.position,rotation:t?.rotation||e.rotation,scale:t?.scale||e.scale,hiddenMatrix:t?.hiddenMatrix||e.hiddenMatrix}},vP.diff=function(e,t){return uG({position:ge.isEqual(e.position,t.position)?void 0:t.position,rotation:ge.isEqual(e.rotation,t.rotation)?void 0:t.rotation,scale:ge.isEqual(e.scale,t.scale)?null:t.scale,hiddenMatrix:gr.isEqual(e.hiddenMatrix,t.hiddenMatrix)?void 0:t.hiddenMatrix})},(v3||(v3={})).defaultData={states:new px,events:new px,visible:!0,raycastLock:!1,physics:gv.defaultData,pathSnapping:{pathId:null,slide:0,offset:0,orientation:"tangential"},...v2.identity,cloner:null},(v4||(v4={})).defaultData={type:"Empty",...v3.defaultData},(v5||(v5={})).defaultData={type:"ParticleCollider",...v0.defaultData,...v3.defaultData},(v6||(v6={})).defaultData={type:"Component",...v3.defaultData},(v8||(v8={})).defaultData={type:"Particle",...v3.defaultData,...gg.defaultData},(v9||(v9={})).defaultData={type:"Mesh",...v3.defaultData,...gb.defaultData},(v7||(v7={})).defaultData={...v3.defaultData,...v2.identity,position:[0,0,gd.DefaultTargetOffset],...gd.defaultData},(vD=ye||(ye={})).defaultData=function(e){return{...v3.defaultData,...gm.defaultData(e)}},vD.defaultDirectionalLightData={...vD.defaultData("DirectionalLight"),position:[200,300,300],name:"Directional Light",intensity:.7},(e=>{function t(e,t,i=0){for(;i<t.length;){let r=e?e[t[i]]:void 0;if(t.length===i+1)return r;if(!r)return;e=r.descendants,i+=1}}e.resolveWithDes=t,e.resolve=function(e,i,r=0){let s=t(e,i,r);if(s){let e=Object.keys(s);if(1===e.length&&"descendants"===e[0])return}return s}})(yt||(yt={})),(e=>{function t(e,t){return{...v3.defaultData,...t,component:e,overrides:new pA,physics:void 0,events:void 0,type:"Instance"}}e.rootOverrideProps=["physics","events"],e.compositeNonOptionalOverrideProps=["geometry"],e.compositeEntireOverrideOverrideProps=["material"],e.ofComponent=t,e.fromComponentData=function(e){let i=v2.fromObject(e.data);return t(e.id,i)}})(yi||(yi={})),(vI=yr||(yr={})).defaultData={type:"Page",...v3.defaultData,physics:{...gv.defaultData,fusedBody:!1},...v$.defaultData,camera:v7.defaultData},vI.isUIPage=function(e){return void 0!==e.uiScene},(h=ys||(ys={})).defaultCamera={position:[0,0,1e3],scale:[1,1,1],rotation:[0,0,0],hiddenMatrix:gr.identity,name:"Play Camera",visible:!0,raycastLock:!1,physics:gv.defaultData,states:new px,events:new px,cloner:null,pathSnapping:{pathId:null,orientation:"tangential",slide:0,offset:0},...gd.defaultData},h.KeysByResetCategory={States:["states"],Events:["events"],Material:["material","materials"],Geometry:["geometry"],Position:["position"],Rotation:["rotation"],Scale:["scale"],Transform:["position","scale","rotation","hiddenMatrix"],Name:["name"],Visibility:["visible","raycastLock","flatShading","wireframe","side"],Shadows:["castShadow","receiveShadow"],Cloner:["cloner"],Physics:["physics"]},h.defaultMeshObject={name:"Rectangle",...v3.defaultData,...v9.defaultData,geometry:vW.defaultData("RectangleGeometry"),material:vk.defaultTwoLayerData("phong","layer1","layer2")},h.defaultBooleanObject={name:"Boolean",...v3.defaultData,...v9.defaultData,geometry:vW.defaultData("BooleanGeometry"),material:vk.defaultTwoLayerData("phong","layer1","layer2")},h.defaultShapeBlendObject={name:"Shape Blend",...v3.defaultData,...v9.defaultData,geometry:vW.defaultData("ShapeBlendGeometry"),material:vk.defaultTwoLayerData("phong","layer1","layer2")},h.defaultTextObject={name:"Text",...v3.defaultData,...v9.defaultData,geometry:vW.defaultData("TextGeometry"),material:vk.defaultTwoLayerData("phong","layer1","layer2")},h.defaultInputObject={name:"Input",...v3.defaultData,...v9.defaultData,geometry:vW.defaultData("InputGeometry"),material:vk.defaultTwoLayerData("phong","layer1","layer2")},(vO=ya||(ya={}
3139)).newEmpty=function(e,t){let i={name:t};return"Mesh"===e.type?(i.geometry={},"material"in e&&(i.material={layers:new pA}),"materials"in e&&(i.materials=e.materials.map(e=>({layers:new pA})))):gc.is(e.type)&&(i.perspective={},i.orthographic={}),i},vO.toOps=function(e,t){let i,r=[],s={orthographic:0,perspective:0,geometry:0};function a(e,t){for(let[i,s]of Object.entries(t.layers)){let{texture:t,...a}=s;if(void 0!==t&&Object.keys(t).length>0){let s={path:[...e,"layers",i,"texture"],props:t,type:0};r.push(s)}if(Object.keys(a).length>0){let t={path:[...e,"layers",i],props:a,type:0};r.push(t)}}}for(let[e,o]of Object.entries(t))if("name"!==e){if("cloner"===e)r.push(...gp.toOps(o,["cloner"]));else if("pathSnapping"===e)r.push({path:[e],props:{slide:o.slide,offset:o.offset},type:0});else if("material"===e)a(["material"],o);else if("materials"===e)for(let[e,t]of Object.entries(o))a(["materials",e],t);else if(0===s[e]){if("geometry"===e&&void 0!==o.extrusion){let t={path:[e,"extrusion"],props:o.extrusion,type:0};r.push(t),o={...o},delete o.extrusion}if(Object.keys(o).length>0){let t={path:[e],props:o,type:0};r.push(t)}}else void 0===i&&(i={path:[],props:{},type:0},r.push(i)),i.props[e]=o}return r},vO.patch=function(e,t){if(void 0===t)return e;let i={...e};return(Object.assign(i,v2.merge(i,t)),Object.assign(i,{pathSnapping:Object.assign({},i.pathSnapping,{slide:t.pathSnapping?.slide??i.pathSnapping?.slide??0,offset:t.pathSnapping?.offset??i.pathSnapping?.offset??0})}),gc.is(e.type))?(i.orthographic={...i.orthographic},i.perspective={...i.perspective},t.orthographic?.zoom!==void 0&&(i.orthographic.zoom=t.orthographic.zoom),t.perspective?.zoom!==void 0&&(i.perspective.zoom=t.perspective.zoom),void 0!==t.isUpVectorFlipped&&(i.isUpVectorFlipped=t.isUpVectorFlipped),void 0!==t.targetOffset&&(i.targetOffset=t.targetOffset)):"Mesh"===e.type?("geometry"in t&&Object.assign(i,{geometry:vH.merge(i.geometry,t.geometry)}),(t.material||t.materials)&&(i=function(e,t){if(void 0===t)return e;let i={...e};return"material"in i&&"material"in t&&t.material&&(i.material=pW(i.material,e=>{if("string"!=typeof e)for(let[i,r]of Object.entries(t.material.layers)){let t=e.layers.data(i);t&&gM.patch(t,r)}}).data),i.materials&&t.materials&&(i.materials=pW(i.materials,e=>{for(let r=0;r<i.materials.length;r++){let i=t.materials[r];if("string"!=typeof i)for(let[t,s]of Object.entries(i.layers)){let i=e[r]?.layers?.data(t);i&&gM.patch(i,s)}}}).data),i}(i,t)),i.cloner&&"cloner"in t&&Object.assign(i,{cloner:gu.merge(i.cloner,t.cloner)})):"Empty"===e.type?i.cloner&&"cloner"in t&&Object.assign(i,{cloner:gu.merge(i.cloner,t.cloner)}):gf.is(e.type)&&(void 0!==t.intensity&&(i.intensity=t.intensity),void 0!==t.color&&("string"==typeof t.color?i.color=t.color:i.color=gs.clone(t.color))),i},(yn||(yn={})).defaultData={enablePan:!0,enableZoom:!0,enableRotate:!0,enableDamping:!0,rotationLimitsMode:0,rotationVerticalOffset:{min:Math.PI/4,max:Math.PI/4},rotationHorizontalOffset:{min:Math.PI/4,max:Math.PI/4},rotationSoftLimit:2,panLimitsMode:0,panVerticalOffset:{min:250,max:250},panHorizontalOffset:{min:250,max:250},panSoftLimit:2,zoomLimitsEnabled:!1,zoomLimits:{min:.1,max:2},autoRotate:!1,autoRotateSpeed:2,autoRotateClockwise:!0,hoverRotatePanMode:0,hoverRotatePanStrength:20,hoverRotateDamping:.125,isTouchZoom:!0,orbitTouches:2,panTouches:3,resetHoverEffectOnPointerLeave:!0},(yo||(yo={})).defaultData={orbitControls:yn.defaultData,playPage:mc,withBackground:!0,preventScroll:!1,preventTouchScroll:!1,hideCursor:!1,mouseEventTarget:"canvas",joystickSizeAndXYOffset:Array(12).fill(0).map((e,t)=>{let i=0,r=0;return t<5?r=-30:t<10&&(r=30),0===t||10===t||5===t?i=30:(4===t||11===t||9===t)&&(i=-30),[120,[i,r],"show"]}),settings:{image:{format:"jpg",ratio:1},video:{format:"mp4",imageFormat:"jpg",fps:30,mbps:80,ratio:Math.max(1,"u">typeof window?Math.floor(window.devicePixelRatio):1),stopMode:"manual",duration:5e3},web:{logo:!0,compress:!0,preset:1,preload:!0,hint:!1,imageQuality:70}},stopRaycast:!0,hdTransmission:!1},(yl||(yl={})).defaultData={id:"basic",label:"Basic",style:"None",prompt:""}
vendor: 4,804 bytes, line 3139
3139,(yh||(yh={})).defaultData={weather:0,shadows:0,lightOrigin:0,temperature:0,sun:0,camera:0,environment:0,particles:0,nature:0,floor:0},(c=yc||(yc={})).defaultData=()=>({mode:"line-art-both",prompt:"",negativePrompt:"",style:{...yl.defaultData},isRandomSeed:!0,seed:c.generateSeed(),guessMode:!1,advanced:!1,steps:20,guidanceScale:7.5,controlNetScale:1,modifiers:yh.defaultData}),c.generateSeed=()=>Math.round(1e5*Math.random()),(vR=yd||(yd={})).physicsEnabled=function(e){return void 0!==e.find(e=>"Page"===e.data.type&&e.data.globalPhysics.usePhysics)},vR.traverseModuleInstances=function(e,t,i){e.scene.objects.traverseFrom(t,(t,r)=>{if("Instance"===r.type){let s=yA.getComponentData(e,r.component)?.data;s&&i(t,r,s.events)}else i(t,r,r.events)})},(e=>{function t(t=!0,i=[]){let r=[],s=ys.defaultMeshObject;t&&(r.push({...e.defaultLight}),r.push({fi:1,id:"7ba78968-2a55-48f2-b14c-5191da3e075e",data:s,children:[]})),r.push(...i);let a=new py;return a.push({fi:1,id:mc,data:{...yr.defaultData,name:"Scene 1"},children:r}),a}function i(t){return{...e.defaultData,objects:uH(t,py.prototype)}}e.TRASH_CAN_ID="830a2708-8ed9-49cf-a68e-085299892222",e.defaultLight={fi:-1,data:ye.defaultDirectionalLightData,id:"830a2708-8ed9-49cf-a68e-085299899103",children:[]},e.createDefaultObjectTreeWithPage=t,e.defaultData={objects:t(),publish:yo.defaultData,styles:yc.defaultData()},e.emptyDataWithoutPage=function(){return{objects:new py,publish:yo.defaultData,styles:yc.defaultData()}},e.emptyDataWithPage=function(e=!0){return{objects:t(e),publish:yo.defaultData,styles:yc.defaultData()}},e.emptyData=function(){return{objects:new py,publish:{...yo.defaultData},styles:yc.defaultData()}},e.withObjs=i,e.withObj=function(e,t){return i([{id:e,data:t,children:[],fi:0}])}})(yu||(yu={})),(yp||(yp={})).defaultData={preset:"fullscreen",allowResponsive:!1,size:[512,512],coords:[0,0],sceneScale:1,color:{r:0,g:0,b:0,a:.5}},(d=yf||(yf={})).defaultData=e=>({url:e,name:"New Webhook",parametersSchemas:new px}),d.defaultParameterValueByType=e=>"number"===e?0:"boolean"!==e&&"",(ym||(ym={})).defaultData=(e,t="GET")=>({url:e,method:t,name:"New API",headers:new px,queries:new px,autoStart:!0}),(e=>{function t(e){return void 0!==e.textValue}function i(e){return"boolean"==typeof e}e.isTextValue=t,e.isNumber=function(e){return"number"==typeof e},e.isBoolean=i,e.typeOfVariable=function(e){return t(e)?"string":i(e)?"boolean":"number"},e.getDisplayedValue=function(t){return e.isTextValue(t)?Array.isArray(t.textValue)?t.textValue.map(e=>e.toString().padStart(t.padding??2,"0")).join(t.deliminator??":")+(void 0!==t.suffix?" "+t.suffix:""):t.textValue.toString():e.isBoolean(t)?t?"True":"False":e.isNumber(t)?parseFloat(t.toFixed(3)).toString():t.toString()}})(yg||(yg={})),(yv||(yv={})).all=["images","videos","colors","audios","particles","fonts","materials","variables"],(yy||(yy={})).all=[...yv.all,"components"],(yx||(yx={})).defaultData=function(){return{images:new pu,videos:new pu,colors:new pu,audios:new pu,particles:new pu,fonts:new pu,materials:new pu,components:new pu,variables:new pu,userAPIs:new pu,userWebhooks:new pu}},(yb||(yb={})).defaultData=function(){return{images:new pu,videos:new pu,colors:new pu,audios:new pu,particles:new pu,fonts:new pu,materials:new pu,components:new pu,variables:new pu,userAPIs:new pu,userWebhooks:new pu}},(vL=yw||(yw={})).defaultColors=function(){let e={};return e["89b10010-844c-11ec-a8a3-0242ac120002"]={r:.5,g:.5,b:.5,a:1,name:"Default Color"},uH(e,pu.prototype)},vL.defaultImages=function(){return uH({},pu.prototype)},vL.emptyData=function(){return{catelogs:new pu,materials:new pu,images:new pu,videos:new pu,colors:new pu,audios:new pu,particles:new pu,fonts:new pu,variables:new px,userAPIs:new pu,userWebhooks:new pu,lib:yb.defaultData()}},vL.defaultVariables=function(e){switch(e){case"number":return{value:0,name:"Number"};case"boolean":return{value:!1,name:"Boolean"};case"string":return{value:{textValue:"String value"},name:"String"};case"time":let t=[0,0,0];return{name:"Time",value:{textValue:t,deliminator:":",padding:2,suffix:"AM"},dynamicVariableType:"time",format:"HH:mm:ss",format12h24h:"12ampm",timeZone:null,hasEnd:!1,endValue:{textValue:t,deliminator:":",padding:2,suffix:"AM"},autoStart:!0,repeat:!1};case"counter":return{name:"Counter",value:0,dynamicVariableType:"counter",updateInterval:1e3,increment:1,autoStart:!0,hasEnd:!0,endValue:60,repeat:!0,randomStart:!1,range:[0,100],decimals:0};case"random":return{name:"Random",value:0,dynamicVariableType:"random",updateInterval:1e3,increment:1,autoStart:!0,isStatic:!1,hasEnd:!0,endValue:60,repeat:!0,min:0,max:100,decimals:0};default:console.error("Unknown variable type",e)}},vL.getFormattedTimerTime=function(e,t){if("HH:mm:ss"===t.format){let t=Math.floor(e/3600),i=Math.floor((e-3600*t)/60),r=M
3139ath.round(e-3600*t-60*i);return{textValue:[t,i,r]}}if("mm:ss"!==t.format)return e="number"===t.format?Math.round(e):Math.round(1e3*e)/1e3;{let t=Math.floor(e/60),i=Math.round(e-60*t);return{textValue:[t,i]}}},(yS||(yS={})).list=["idle","move","jump","run"],(u=y_||(y_={})).defaultColliderData={type:"capsule",height:200,radius:50,position:[0,0,0],rotation:[0,0,0]},u.defaultDataThirdPerson={moveMode:"walk",forwardDirection:"+z",speedTranslate:1e3,speedRotate:100,runMultiplier:2,rotationMode:"normal",rotBy:"keys",rotByTouch:"drag",delayPos:[.3,.3],delayRot:[.3,.3],keyAssignments:[["moveNegZ","W"],["moveNegX","A"],["movePosZ","S"],["movePosX","D"],["rotPosX","▲"],["rotPosY","◀"],["rotNegX","▼"],["rotNegY","▶"],["jump","Space"],["run","⇧"],["none","Ctrl"]],touchControl:!0,joystickPosLoc:5,joystickRotLoc:11,jumpTouchButtonLoc:9,collider:u.defaultColliderData,colliderHelperVisible:!0,collisionEnabled:!0,jumpPower:100,resetYPosition:3e3,alignToGround:!1,autoOrientMove:!0,orientWith:"camera",orientMode:"radial",delayPosCamera:.3,delayRotCamera:.3,camera:"",cameraXAxis:"Limit",cameraYAxis:"Free",cameraRotXLimits:[0,Math.PI/2],cameraRotYLimits:[-Math.PI/2,Math.PI/2],gameActions:{idle:new px,move:new px,jump:new px,run:new px},navmesh:{enabled:!1,ch:6,cs:6,walkableClimb:5,walkableHeight:1,walkableRadius:0,zones:"all",objects:[],helperVisible:!0,destinationHelperRadius:0,destinationHelperColor:ga.fromHexAndA(3728051,1)}};var gW=180/Math.PI;function gq(e){e.rotation=e.rotation.slice(0,3).map(e=>e*gW)}function gX(e){gq(e),"Page"===e.type&&gq(e.camera),e.states?.forEach(e=>{void 0===e.rotation||null===e.rotation||(e.rotation=e.rotation.slice(0,3).map(e=>e*gW))});let t=e.geometry;t&&"SphereGeometry"===t.type&&(t.thetaLength=(t.thetaLength??180)*gW),t&&"TorusGeometry"===t.type&&(t.arc=t.arc*gW),t&&"PathGeometry"===t.type&&(t.extrusion.angle*=gW,t.extrusion.twist*=gW),"Mesh"===e.type&&"TextGeometry"===e.geometry.type&&(e.geometry.text={textValue:e.geometry.text}),Array.isArray(pq(e.events))&&e.events?.forEach(e=>{("MouseDown"===e.type||"MouseUp"===e.type||"MousePress"===e.type||"KeyDown"===e.type||"KeyUp"===e.type||"KeyPress"===e.type||"Collision"===e.type||"Trigger"===e.type)&&(e.runMode=e.toggle?"Toggle":"Repeat")})}function gY(e){let t=e.schema??0;if(115!==t){let i;for(let i of(console.warn("updating from ",t,"to ",115),function(e,t){let i,r;if(t<1&&(gL(e,gO),gR(e,gO),e.schema=1),t<2&&(Object.assign(e.scene.publish,{orbitControls:{...yn.defaultData,...pq(e.scene.publish.orbitControls)}}),e.schema=2),t<3&&(function(e){function t(e){if(e.layers){for(let t of Object.values(e.layers))if(t){for(let[e,i]of Object.entries(t))if((gE.includes(e)||"boolean"==typeof i)&&delete t[e],"texture"===e)for(let[e,t]of Object.entries(i))(gC.includes(e)||"boolean"==typeof t)&&delete i[e]}}}e.scene.objects.traverse((e,i)=>{i.states.forEach(e=>{e.material?t(e.material):e.materials&&e.materials.forEach(e=>{t(e)})})})}(e),e.schema=3),t<4&&(e.scene.publish.withBackground=!0,e.schema=4),t<5&&(e.scene.publish.settings.web={compress:!0,preload:!0,preset:1,logo:!0,hint:!1},e.schema=5),t<6&&(function(e){e.scene.objects.traverse((e,t)=>{let i=t.cloner;i&&(i.radial.scale=i.radial.scale.map(e=>e+1),i.linear.scale=i.linear.scale.map(e=>e+1))})}(e),e.schema=6),t<7&&(function(e){e.scene.objects.traverse((e,t)=>{let i=t.geometry;i&&("DodecahedronGeometry"===i.type||"IcosahedronGeometry"===i.type)&&(i.detail=Math.round(i.detail))})}(e),e.schema=7),t<8&&(e.schema=8),t<9&&(gF(e),e.schema=9),t<10&&(function(e){e.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&("BooleanGeometry"===t.geometry.type||"SubdivGeometry"===t.geometry.type)&&(t.geometry.phongAngle=35)})}(e),e.schema=10),t<11&&(e.scene.environment.ambientLight.softShadows=!1,e.scene.environment.ambientLight.softShadowQuality="low",e.scene.objects.traverse((e,t)=>{("DirectionalLight"===t.type||"SpotLight"===t.type)&&(t.shadowResolution=1024,t.shadowRadius=1,t.depth=1e5)}),e.shared.penumbraSize=[,,,,,].fill(.5),e.schema=11),t<12&&(gF(e),e.schema=12),t<13&&(e.shared.audios=uH({},pu.prototype),e.schema=13),t<14&&(Object.entries(i=e.shared.materials).forEac
3139h(([e,t])=>{t.layers||Object.assign(i,{[e]:{name:"Untitled Material",layers:[{fi:0,data:{type:"light",category:"phong",alpha:.6,visible:!0,mode:0,specular:{r:.2,g:.2,b:.2},shininess:5},id:"layer1"},{fi:1,data:{type:"color",alpha:1,visible:!0,mode:0,color:{r:.2823529411764706,g:.2823529411764706,b:.30196078431372547}},id:"layer2"}]}})}),e.schema=14),t<15&&(Object.entries(pq(e.shared.images)).filter(e=>!1===e[1].asset).map(e=>e[0]).forEach(t=>{delete e.shared.images[t]}),Object.entries(pq(e.shared.audios)).filter(e=>!1===e[1].asset).map(e=>e[0]).forEach(t=>{delete e.shared.audios[t]}),e.schema=15),t<16&&(e.scene.publish.settings.web.preload=!1,e.schema=16),t<17&&(gL(e,gN),gR(e,gN),e.schema=17),t<18&&(gL(e,gB),gR(e,gB),e.schema=18),t<19&&(Object.assign(e.scene.publish.settings,{video:{...yo.defaultData.settings.video,...pq(e.scene.publish.settings.video)}}),e.schema=19),t<20&&(e.shared.fonts=uH({},pu.prototype),r=[],e.scene.objects.traverse((t,i)=>{if("TextFrame"===i.type){let s=vk.defaultTwoLayerData("phong"),a="string"==typeof i.color?e.shared.colors[i.color]:i.color;s.layers[1].data.color={r:a.r,g:a.g,b:a.b},s.layers[1].data.alpha=i.alpha;let o=i.font.replace(".typeface","").replace(/optimer/gi,"open sans").replace("space_mono","space mono").replace(/alma_mono/gi,"varela round").replace(/droid_sans_mono/gi,"noto sans mono").replace(/droid_sans|gentilis|gnomon_(simple|foreground)|helvetiker/gi,"roboto").replace(/droid_serif/gi,"roboto slab").replace("_sans"," sans").replace("crimson_text","crimson text").replace("medium_medium","medium").replace("fatface_fatface","fatface").replace("100hairline","thin").replace("200thin","extralight").replace("300light","light").replace("500medium","medium").replace("600semi","semibold").replace("800heavy","extrabold").replace("900black","black").replace(/bodoni_(11|16|24|36|48|72|96)([^_])/gi,"bodoni_$1_$2").replace(/bodoni_(11|16|24|36|48|72|96)/gi,"bodoni moda").replace(/(thin|hairline)(_regular)?/gi,"100").replace(/(extra|ultra)light(_regular)?/gi,"200").replace(/light(_regular)?/gi,"300").replace(/_book|_normal|_roman/gi,"_regular").replace(/medium(_regular)?/gi,"500").replace(/(semi|demi)bold(_regular)?/gi,"600").replace(/(extra|ultra)bold(_regular)?/gi,"800").replace(/bold(_regular)?/gi,"700").replace(/(black|heavy|fatface)(_regular)?/gi,"900").replace(/([1-9]00)_italic/gi,"$1italic").replace(/regularitalic/gi,"italic").replace(/regularitalic/gi,"italic").split(" ").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ");void 0===e.shared.fonts[o]&&(e.shared.fonts[o]={name:o});let l={name:i.name,...v3.defaultData,...v9.defaultData,flatShading:!1,wireframe:!1,geometry:{...vW.defaultData("TextGeometry"),width:i.width,height:i.height,font:o,depth:0,horizontalAlign:i.horizontalAlign,verticalAlign:i.verticalAlign,fontSize:1.40625*i.fontSize,lineHeight:i.lineHeight/1.40625,letterSpacing:i.letterSpacing-1,text:i.text,textTransform:i.textTransform,extrudeBevelSize:0,extrudeBevelSegments:1},material:s,states:pq(i.states),events:pq(i.events),visible:i.visible,raycastLock:i.raycastLock,position:i.position,rotation:i.rotation,scale:i.scale,hiddenMatrix:i.hiddenMatrix},h=pq(e.scene.objects).parent(t);e.scene.objects.insertAfter(h??null,t,[{id:t+"new",data:l,children:[]}]),r.push(t)}}),r.forEach(t=>{e.scene.objects.delete(t)}),e.schema=20),t<21&&(function(e){let t={0:"MouseDown",1:"MouseUp",2:"MouseHover",5:"KeyDown",6:"KeyUp",7:"Start",9:"LookAt",10:"Follow",11:"Scroll",12:"Audio",13:"GameControl"};e.scene.objects.traverse((e,i)=>{i.events.forEach(e=>{if(t[Number(e.type)]){if(Object.assign(e,{type:t[Number(e.type)]}),"Audio"===e.type&&"audioEvent"in e&&(Object.assign(e,{playAudio:e.audioEvent}),delete e.audioEvent),"GameControl"===e.type)Object.assign(e,{gameActions:{idle:new px,move:new px,jump:new px}});else{let t=new px;Object.assign(e,{actions:t}),("MouseDown"===e.type||"MouseUp"===e.type||"KeyDown"===e.type||"KeyUp"===e.type)&&"url"in e&&t.push({fi:0,id:tY.generateUUID(),data:{type:"Link",url:e.url,delay:0}}),"targets"in e&&(e.targets.forEach((e,i,r)=>{let s={easing:e.easing,duration:e.duration};6===e.easing?Object.assign(s,uV(e,"mass","stiffness","damping","velocity")):5===e.easing&&Object.assign(s,{control1:{...e.control1},control2:{...e.control2}});let a={repeat:e.repeat?-1:0,delay:e.delay,delayDirection:e.delayDirection,direction:e.cycle&&e.rewind?"pingpong-rewind":e.cycle?"pingpong":"normal"},o={state:e.state,...a,...s},l={allowSlerp:!0,type:"Transition",object:e.object,repeat:0,delay:0,delayDirection:void 0,direction:"normal",tweens:new px({fi:0,id:tY.generateUUID(),data:{state:void 0,repeat:0,delay:0,delayDirection:void 0,direction:"normal",duration:0,easing:4}},{fi:1,id:tY.generateUUID(),data:o})};t.push({fi:r,id:i,data:l})}),delete e.targets)}}})})}(e),function(e){e.scene.objects.traverse((e,t)=>
3139{function i(e,i){let r=new px,s=[];if(t.events.forEach((e,t,a)=>{if("Audio"===e.type&&e.trigger===i){let i;s.push(t),"play"===e.interaction?i={...uV(e,"interaction","audio","delay","volume","loop"),triggerAfter:"after"in e?e.after:void 0,toggle:"after"in e?e.toggle:void 0,type:"Audio"}:("pause"===e.interaction||"stop"===e.interaction)&&(i={...uV(e,"interaction","delay","object","playAudio"),type:"Audio"}),i&&r.push({fi:a,id:t,data:i})}}),s.forEach(e=>t.events.delete(e)),r.length){let i=t.events.find(t=>t.type===e)?.data;i?"actions"in i&&i.actions.insertBefore(null,r):t.events.insertBefore(null,[{id:tY.generateUUID(),data:{type:e,actions:r}}])}}i("Start","start"),i("MouseDown","mouseDown"),i("MouseUp","mouseUp"),i("KeyDown","keyDown"),i("KeyUp","keyUp")})}(e),e.schema=21),t<22&&(gV(e),e.schema=22),t<23&&(function(e){e.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&"SubdivGeometry"===t.geometry.type&&(t.geometry.scaleBaked||(t.geometry.scaleBaked=[1,1,1]))})}(e),e.schema=23),t<24&&(function(e){e.scene.objects.traverse((e,t)=>{"Empty"!==t.type&&"Mesh"!==t.type||!t.cloner||t.cloner.randomnessObject||t.cloner.toObject||t.cloner.randomness||(t.cloner={...t.cloner,toObject:{object:"",spreadType:"random",scale:[0,0,0],rotation:[0,0,0],position:[0,0,0],axis:"x",seed:0,count:99,align:"normal"},randomness:!1,randomnessObject:{strength:100,scale:[0,0,0],rotation:[0,0,0],position:[0,0,0],movement:1,seed:0,freqScale:10,noiseType:"perlin"}})})}(e),e.schema=24),(t<25||void 0===e.shared.videos)&&(e.shared.videos=uH({},pu.prototype),t<25&&(e.schema=25)),t<26&&(function(e){e.scene.objects.traverse((t,i)=>{let r=e.scene.objects.unproxy().parent(t);if(r){let t=pq(e.scene.objects.data(r));t&&"Mesh"===t.type&&"BooleanGeometry"===t.geometry.type&&"Mesh"===i.type&&(i.visible=!0!==pq(i).booleanExclude)}})}(e),e.schema=26),t<27&&(function(e){e.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&("NonParametricGeometry"===t.geometry.type?void 0!==t.material&&delete t.material:void 0!==t.materials&&delete t.materials)})}(e),e.schema=27),t<28&&(gV(e),e.schema=28),t<29&&(function(e){function t(e){for(let i in Object.setPrototypeOf(e,pA.prototype),e){var t;Object.setPrototypeOf(t=e[i],pA.prototype),t.texture&&Object.setPrototypeOf(t.texture,pA.prototype)}}e.scene.objects.traverse((e,i)=>{i.states.forEach(e=>{if(e.material){let i=pq(e.material).layers;t(i),e.material.layers=i}if(e.materials)for(let i=0;i<e.materials.length;i++){let r=e.materials[i],s=pq(r).layers;t(s),r.layers=s}})})}(e),e.schema=29),t<30&&(function(e){e.scene.objects.traverse((e,t)=>{"Mesh"!==t.type||"NonParametricGeometry"!==t.geometry.type||"material"in t||"materials"in t||(t.material=vk.defaultTwoLayerData("phong"))})}(e),e.schema=30),t<31&&(void 0===e.scene.publish.orbitControls.autoZoom&&(e.scene.publish.orbitControls.autoZoom=!1),e.scene.objects.traverse((e,t)=>{("OrthographicCamera"===t.type||"PerspectiveCamera"===t.type)&&(void 0===t.orthographic.autoZoom&&(t.orthographic.autoZoom=!1),void 0===t.orthographic.autoZoomFrustumSize&&(t.orthographic.autoZoomFrustumSize=790))}),e.schema=31),t<33&&(function(e){e.scene.objects.traverse((e,t)=>{void 0===t.pathSnapping&&(t.pathSnapping={pathId:null,slide:0,offset:0,orientation:"tangential"}),void 0===t.pathSnapping.offset&&(t.pathSnapping.offset=0)})}(e),e.schema=33),t<34&&(void 0===e.scene.publish.mouseEventTarget&&(e.scene.publish.mouseEventTarget="canvas"),void 0===e.scene.publish.settings.web.hint&&(e.scene.publish.settings.web.hint=!1),e.schema=34),t<35&&(function(e){let{video:t}=e.scene.publish.settings;"gif"===t.format&&t.fps>48&&(t.fps=15)}(e),e.schema=35),t<36&&(function(e){e.scene.objects.traverse((e,t)=>{t.events.forEach(e=>{"GameControl"===e.type&&(e.resetYPosition=Math.abs(e.resetYPosition-t.position[1]))})})}(e),e.schema=36),t<37&&(function(e){let t=e.scene.environment.usePhysics;e.scene.objects.traverse((e,i)=>{t&&null===i.physics?i.collision=!1:i.collision="visibility"})}(e),e.schema=37),t<38&&(gL(e,gk),gR(e,gk),e.schema=38),t<39&&(function(e){e.scene.objects.traverse((e,t)=>{t.events.forEach(e=>{"GameControl"===e.type&&(e.navmesh=y_.defaultDataThirdPerson.navmesh)})})}(e),e.schema=39),t<40&&(e.scene.styles||(e.scene.styles=yc.defaultData()),e.schema=40),t<41&&(void 0===e.scene.environment.ambientLight.occlusion&&(e.scene.environment.ambientLight.occlusion=!1),void 0===e.scene.environment.ambientLight.aoFullRes&&
3139(e.scene.environment.ambientLight.aoFullRes=!1),void 0===e.scene.environment.ambientLight.radius&&(e.scene.environment.ambientLight.radius=256),void 0===e.scene.environment.ambientLight.bias&&(e.scene.environment.ambientLight.bias=.5),void 0===e.scene.environment.ambientLight.aoColor&&(e.scene.environment.ambientLight.aoColor={r:.19607843137254902,g:.19607843137254902,b:.19607843137254902}),gL(e,gj),gR(e,gj),e.schema=41),t<42&&(function(e){e.scene.objects.traverse((e,t)=>{t.events.forEach(e=>{"GameControl"===e.type&&Object.assign(e.gameActions,{run:new px})})})}(e),e.schema=42),t<43&&(function(e){e.scene.objects.traverse((e,t)=>{t.events.forEach(e=>{"GameControl"===e.type&&(e.keyAssignments=[...e.keyAssignments,["run","⇧"],["none","Ctrl"]])})})}(e),e.schema=43),t<99){gL(e,gG),gR(e,gG),null===e.scene.publish.playCamera&&(e.scene.publish.playCamera=mh);let t=pq(e.scene.objects),i=e.scene.objects;for(let r of(e.scene.publish.playPage=mc,i.insertBefore(null,null,[{id:mc,data:{...yr.defaultData,backgroundColor:e.scene.backgroundColor,fog:e.scene.fog,postprocessing:e.scene.postprocessing,ao:uV(e.scene.environment.ambientLight,"occlusion","aoFullRes","radius","bias","aoColor"),publish:{playCamera:e.scene.publish.playCamera,gameControlObject:e.scene.publish.gameControlObject},shadow:uV(e.scene.environment.ambientLight,"softShadowQuality"),globalPhysics:{...vZ.defaultData,...uV(e.scene.environment,"usePhysics","gravity")},camera:pq(e.scene.ownerCamera)??yr.defaultData.camera,name:"Scene"},children:[]}]),t))r.id!==yu.TRASH_CAN_ID&&i.move(mc,r.fi,r.id);let r=0,s=0;e.shared.penumbraSize&&e.scene.objects.traverse((t,i)=>{"DirectionalLight"===i.type?(i.penumbraSize=e.shared.penumbraSize[Math.min(r,2)],r+=1):"SpotLight"===i.type&&(i.penumbraSize=e.shared.penumbraSize[3+Math.min(s,1)],s+=1),(void 0===i.physics||null===i.physics)&&"Instance"!==i.type&&(i.physics={},Object.assign(i.physics,gv.defaultData)),void 0!==i.physics&&null!==i.physics&&(i.physics.enabled=i.collision??"visibility",delete i.collision)}),e.schema=99}}(e,t),t<100&&(void 0===e.scene.publish.joystickSizeAndXYOffset&&(e.scene.publish.joystickSizeAndXYOffset=yo.defaultData.joystickSizeAndXYOffset),e.schema=100),t<101&&(gL(e,gH),gR(e,gH),e.schema=101),t<102&&(function(e){e.scene.objects.traverse((e,t)=>{let i=t.geometry;i&&"PathGeometry"===i.type&&(i.extrusion.capType="flat",i.extrusion.bevel=50,i.extrusion.bevelSides=6,"Custom"===i.extrusion.shape.type&&(i.extrusion.shape.shapeQuality="low"))})}(e),e.schema=102),t<104&&(e.shared.catelogs=new pu,e.shared.lib=yb.defaultData(),e.schema=104),t<105&&(e.shared.variables=uH({},pu.prototype),e.scene.objects.traverse((e,t)=>{gX(t)}),e.schema=105),Object.values(e.shared.lib.components)))!function(e){let t=e.schema??104;115!==t&&t<105&&(function e(t,i){for(let r of(i(t.data),t.children))e(r,i)}(e.asset,gX),e.schema=105)}(i);t<106&&(i=pq(e.shared.variables),e.shared.variables=uH(Object.entries(i??{}).map(([e,t],i)=>({fi:i,id:e,data:t})),px.prototype),e.schema=106),t<107&&(e.shared.lib.variables=yb.defaultData().variables,e.schema=107),t<109&&(e.shared.particles=uH({},pu.prototype),e.shared.lib&&(e.shared.lib.particles=yb.defaultData().particles),e.schema=109),t<110&&(function(e){e.scene.objects.traverse((e,t)=>{"Particle"===t.type&&"number"==typeof t.renderMaterial.size&&Object.assign(t.renderMaterial,{size:[t.renderMaterial.size,t.renderMaterial.size]})})}(e),e.schema=110),t<111&&(e.scene.objects.traverse((e,t)=>{Array.isArray(pq(t.events))&&t.events?.forEach(e=>{"disabled"in e||(e.disabled=!1),("MouseDown"===e.type||"MouseUp"===e.type||"MousePress"===e.type)&&(e.mode=e.mode||"Object")})}),e.schema=111),t<112&&(function(e){e.scene.objects.traverse((e,t)=>{"Page"===t.type&&(t.postprocessing.depthOfField.focusDistance=100,t.postprocessing.depthOfField.focalLength=20,t.postprocessing.depthOfField.bokehScale=5)})}(e),e.schema=112),t<113&&(function(e){e.scene.objects.traverse((e,t)=>{!1!==Array.isArray(pq(t.events))&&t.events?.forEach(e=>{let t=e.runMode;"MouseDown"===e.type||"MouseUp"===e.type||"KeyDown"===e.type||"KeyUp"===e.type||"Collision"===e.type||"Trigger"===e.type?e.actions?.forEach(e
vendor: 4,220 bytes, line 3139
3139=>{"Transition"===e.type&&(e.runMode=t??"Repeat"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle"===t?"Toggle":"Normal")}):"MouseHover"===e.type||"MousePress"===e.type||"KeyPress"===e.type?e.actions?.forEach(e=>{("Transition"===e.type||"Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle")}):"GameControl"===e.type?(delete e.actions,Object.keys(e.gameActions).forEach(t=>{e.gameActions[t]?.forEach(e=>{"Transition"===e.type&&(e.runMode="Repeat"),"Animation"===e.type&&(e.runMode="Normal")})})):"DragDrop"===e.type?(delete e.actions,e.dragDropActions?.drag?.forEach(e=>{("Transition"===e.type||"Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle")}),e.dragDropActions?.drop?.forEach(e=>{("Transition"===e.type||"Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle")})):"Resize"===e.type?(delete e.actions,e.breakpoints?.forEach(e=>{e.actions?.forEach(e=>{("Transition"===e.type||"Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle")})})):"Start"===e.type?e.actions?.forEach(e=>{"Transition"===e.type&&(e.runMode="Once"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Normal")}):"VariableChange"===e.type||"Scroll"===e.type?e.actions?.forEach(e=>{"Transition"===e.type&&(e.runMode="Repeat"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Normal")}):"Conditional"===e.type&&(delete e.actions,e.inActions?.forEach(e=>{"Transition"===e.type&&(e.runMode="Repeat"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Normal")}),e.outActions?.forEach(e=>{"Transition"===e.type&&(e.runMode="Repeat"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Normal")}))})})}(e),e.schema=113),t<114&&(void 0===e.scene.publish.settings.web.imageQuality&&(e.scene.publish.settings.web.imageQuality=70),e.schema=114),t<115&&(e.shared.userAPIs=uH({},pu.prototype),e.shared.userWebhooks=uH({},pu.prototype),e.shared.lib&&(e.shared.lib.userAPIs=yb.defaultData().userAPIs,e.shared.lib.userWebhooks=yb.defaultData().userWebhooks),e.schema=115)}}function gQ(e,t=!1){let i=null!==e[0].index,r=new Set(Object.keys(e[0].attributes)),s=new Set(Object.keys(e[0].morphAttributes)),a={},o={},l=e[0].morphTargetsRelative,h=new rz,c=0;for(let d=0;d<e.length;++d){let u=e[d],p=0;if(i!==(null!==u.index))return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(let e in u.attributes){if(!r.has(e))return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+'. All geometries must have compatible attributes; make sure "'+e+'" attribute exists among all geometries, or in none of them.'),null;void 0===a[e]&&(a[e]=[]),a[e].push(u.attributes[e]),p++}if(p!==r.size)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+". Make sure all geometries have the same number of attributes."),null;if(l!==u.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(let e in u.morphAttributes){if(!s.has(e))return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+".  .morphAttributes must be consistent throughout all geometries."),null;void 0===o[e]&&(o[e]=[]),o[e].push(u.morphAttributes[e])}if(t){let e;if(i)e=u.index.count;else{if(void 0===u.attributes.position)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+d+". The geometry must have either an index or a position attribute"),null;e=u.attributes.position.count}h.addGroup(c,e,d),c+=e}}if(i){let t=0,i=[];for(let r=0;r<e.length;++r){let s=e[r].index;for(let e=0;e<s.count;++e)i.push(s.getX(e)+t);t+=e[r].attributes.position.count}h.setIndex(i)}for(let e in a){let t=gK(a[e]);if(!t)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the "+e+" attribute."),null;h.setAttribute(e,t)}
3139for(let e in o){let t=o[e][0].length;if(0===t)break;h.morphAttributes=h.morphAttributes||{},h.morphAttributes[e]=[];for(let i=0;i<t;++i){let t=[];for(let r=0;r<o[e].length;++r)t.push(o[e][r][i]);let r=gK(t);if(!r)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the "+e+" morphAttribute."),null;h.morphAttributes[e].push(r)}}return h}function gK(e){let t,i,r,s=0;for(let a=0;a<e.length;++a){let o=e[a];if(o.isInterleavedBufferAttribute)return console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. InterleavedBufferAttributes are not supported."),null;if(void 0===t&&(t=o.array.constructor),t!==o.array.constructor)return console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."),null;if(void 0===i&&(i=o.itemSize),i!==o.itemSize)return console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."),null;if(void 0===r&&(r=o.normalized),r!==o.normalized)return console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."),null;s+=o.array.length}let a=new t(s),o=0;for(let t=0;t<e.length;++t)a.set(e[t].array,o),o+=e[t].array.length;return new rM(a,i,r)}(vB=yA||(yA={})).defaultData={schema:115,scene:yu.defaultData,frames:new pu().add("72fc2993-2da3-4b6b-96ac-2879db3a28bd",yp.defaultData),shared:{...yw.emptyData(),colors:yw.defaultColors()}},vB.emptyDataForImports=function(){return{schema:115,scene:yu.emptyDataWithPage(),frames:new pu().add("72fc2993-2da3-4b6b-96ac-2879db3a28bd",yp.defaultData),shared:{...yw.emptyData(),colors:yw.defaultColors(),images:yw.defaultImages()}}},vB.emptyData=function(){return{schema:115,scene:yu.emptyDataWithPage(),frames:new pu().add("72fc2993-2da3-4b6b-96ac-2879db3a28bd",yp.defaultData),shared:yw.emptyData()}},vB.clipboard2dData=function(){return{schema:115,scene:yu.emptyData(),frames:new pu,shared:yw.emptyData()}},vB.collabHelper={...p0,updateSchema:e=>(e.schema??0)<115?pW(e,gY):(e.schema??0)-115},vB.updateSchemaDirectly=function(e){let t=vB.collabHelper.updateSchema(e);return"number"==typeof t?0===t?e:null:t.data},vB.withoutLib=function(e){return{...e,shared:{...e.shared,lib:yb.defaultData()}}},vB.getComponentData=function(e,t){let i=e.scene.objects.get(t);if(i&&"Component"===i.data.type)return i;{let i=e.shared.lib.components[t];if(i)return i.asset}},vB.hasSensitiveData=function(e){for(let t of Object.values(e.shared.userAPIs))for(let e of t.headers)if("authorization"===e.data.key.toLowerCase()&&""!==e.data.value)return!0;return!1},(yM||(yM={})).emptyImage={data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVQYV2NgYAAAAAMAAWgmWQ0AAAAASUVORK5CYII=",name:"empty"},(yE||(yE={})).is=function(e){return!0},(vz=yC||(yC={})).defaultData={position:[0,0],scale:[1,1],rotation:0,shear:[0,0]},vz.merge=function(e,t){return{position:t?.position??e.position,rotation:t?.rotation??e.rotation,scale:t?.scale??e.scale,shear:t?.shear??e.shear}},vz.diff=function(e,t){return uG({position:m7.isEqual(e.position,t.position)?void 0:t.position,rotation:e.rotation===t.rotation?void 0:t.rotation,scale:m7.isEqual(e.scale,t.scale)?void 0:t.scale,shear:e.shear&&t.shear&&m7.isEqual(e.shear,t.shear)?void 0:t.shear})},(yT||(yT={})).defaultData={horizontalConstraint:0,verticalConstraint:0},(yP||(yP={})).defaultData={direction:"row",wrap:"unwrap",align:"top-left",gap:10,rowGap:10,autoGap:!1,autoRowGap:!1,leftPadding:8,rightPadding:8,topPadding:8,bottomPadding:8},(yD||(yD={})).defaultData={opacity:1,fill:{color:ga.fromHexAndA(5526619,1),enabled:!0},stroke:{color:ga.from0to1([0,0,0,1]),thickness:1,enabled:!1,mode:"inside"},layerBlur:{radius:2,enabled:!1},backgroundBlur:{radius:2,enabled:!1},dropShadow:{offset:[10,10],blurRadius:10,color:ga.from0to1([0,0,0,1]),enabled:!1,spread:0},innerShadow:{offset:[10,10],blurRadius:10,color:ga.from0to1([0,0,0,1]),enabled:!1,spread:0}},(vF=yI||(yI={})).newEmpty=function(e,t){return{name:t}},vF.patch=function(e,t){if(void 0===t)return e;let i={...e};
3139return Object.assign(i,yC.merge(i,t)),i=function(e,t){if(void 0===t)return e;let i={...e};return"fill"in i&&"fill"in t&&void 0!==t.fill&&Object.assign(i,{fill:{...i.fill,...t.fill}}),"stroke"in i&&"stroke"in t&&void 0!==t.stroke&&Object.assign(i,{stroke:{...i.stroke,...t.stroke}}),"layerBlur"in i&&"layerBlur"in t&&void 0!==t.layerBlur&&Object.assign(i,{layerBlur:{...i.layerBlur,...t.layerBlur}}),"backgroundBlur"in i&&"backgroundBlur"in t&&void 0!==t.backgroundBlur&&Object.assign(i,{backgroundBlur:{...i.backgroundBlur,...t.backgroundBlur}}),"dropShadow"in i&&"dropShadow"in t&&void 0!==t.dropShadow&&Object.assign(i,{dropShadow:{...i.dropShadow,...t.dropShadow}}),"innerShadow"in i&&"innerShadow"in t&&void 0!==t.innerShadow&&Object.assign(i,{innerShadow:{...i.innerShadow,...t.innerShadow}}),i}(i=function(e,t){if(void 0===t)return e;let i={...e};for(let e of["width","height","cornerRadius"])e in i&&e in t&&void 0!==t[e]&&Object.assign(i,{[e]:t[e]});return i}(i,t),t)},vF.toOps=function(e,t){let i,r=[];for(let[e,s]of Object.entries(t))"name"!==e&&(void 0===i&&(i={path:[],props:{},type:0},r.push(i)),i.props[e]=s);return r},(yO||(yO={})).defaultData={...yC.defaultData,...yT.defaultData,states:new px,events:new px,visible:!0,raycastLock:!1},(yR||(yR={})).defaultData={...yO.defaultData,...yD.defaultData},(yL||(yL={})).defaultData={cornerRadius:[0,0,0,0]},(yB||(yB={})).defaultData={...yR.defaultData,type:"ellipse2d",width:100,height:100,name:"Ellipse"},(yz||(yz={})).defaultData={...yR.defaultData,...yL.defaultData,type:"rectangle2d",width:100,height:100,name:"Rectangle"},(yF||(yF={})).defaultData={...yR.defaultData,type:"text2d",width:100,height:100,fontSize:12,lineHeight:1.2,letterSpacing:0,text:{textValue:"Hello world"},horizontalAlign:1,verticalAlign:1,textTransform:1,font:"Roboto_regular",name:"Text"},(yN||(yN={})).defaultData={...yR.defaultData,type:"path2d",path:"",name:"Path"},(yk||(yk={})).is=function(e){return"ellipse2d"===e.type||"rectangle2d"===e.type||"text2d"===e.type||"vector2d"===e.type||"path2d"===e.type},(yU||(yU={})).defaultData={...yO.defaultData,name:"Group",type:"group2d"},(yV||(yV={})).defaultData=()=>({...yO.defaultData,...yL.defaultData,...yD.defaultData,name:"Frame",type:"frame2d",clipped:!0,width:200,height:200,fill:{color:ga.fromHexAndA(4737101,1),enabled:!0},stroke:{color:ga.fromHexAndA(0,1),thickness:1,enabled:!1,mode:"inside"},backgroundBlur:{radius:2,enabled:!1},layerBlur:{radius:2,enabled:!1}}),(vN=yj||(yj={})).defaultData=function(e){switch(e){case"rectangle2d":case"vector2d":return{...yz.defaultData};case"ellipse2d":return{...yB.defaultData};case"text2d":return{...yF.defaultData};case"path2d":return{...yN.defaultData};case"frame2d":return{...yV.defaultData()};case"group2d":return{...yU.defaultData}}},vN.getPivot=function(e){return"width"in e&&"height"in e?["number"==typeof e.width?.5*e.width:0,"number"==typeof e.height?.5*e.height:0]:[0,0]},vN.isResizeable=function(e){return"rectangle2d"===e.type||"ellipse2d"===e.type||"text2d"===e.type||"frame2d"===e.type},vN.isAutoLayoutable=function(e){return"frame2d"===e.type&&void 0!==e.autoLayout},vN.hasCorners=function(e){return"rectangle2d"===e.type||"frame2d"===e.type},(p=yG||(yG={})).defaultData={name:"UI",type:"scene2d",objects:new py},p.emptyData=function(){return{type:"scene2d",objects:new py}};var gZ=class{constructor(){}};function gJ(e,t,i){return i.min.x=t[e],i.min.y=t[e+1],i.min.z=t[e+2],i.max.x=t[e+3],i.max.y=t[e+4],i.max.z=t[e+5],i}function g$(e){let t=-1,i=-1/0;for(let r=0;r<3;r++){let s=e[r+3]-e[r];s>i&&(i=s,t=r)}return t}function g0(e,t,i){let r,s;for(let a=0;a<3;a++){let o=a+3;r=e[a],s=t[a],i[a]=r<s?r:s,r=e[o],s=t[o],i[o]=r>s?r:s}}function g1(e,t,i){for(let r=0;r<3;r++){let s=t[e+2*r],a=t[e+2*r+1],o=s-a,l=s+a;o<i[r]&&(i[r]=o),l>i[r+3]&&(i[r+3]=l)}}function g2(e){let t=e[3]-e[0],i=e[4]-e[1],r=e[5]-e[2];return 2*(t*i+i*r+r*t)}function g3(e,t,i,r,s=null){let a=1/0,o=1/0,l=1/0,h=-1/0,c=-1/0,d=-1/0,u=1/0,p=1/0,f=1/0,m=-1/0,g=-1/0,v=-1/0,y=null!==s;for(let r=6*t,s=(t+i)*6;r<s;r+=6){let t=e[r+0],i=e[r+1],s=t-i,x=t+i;s<a&&(a=s),x>h&&(h=x),y&&t<u&&(u=t),y&&t>m&&(m=t);let b=e[r+2],w=e[r+3],S=b-w,_=b+w;S<o&&(o=S),_>c&&(c=_),y&&b<p&&(p=b),y&&b>g&&(g=b);let A=e[r+4],M=e[r+5],E=A-M,C=A+M;E<l&&(l=E),C>d&&(d=C),y&&A<f&&(f=A),y&&A>v&&(v=A)}
3139r[0]=a,r[1]=o,r[2]=l,r[3]=h,r[4]=c,r[5]=d,y&&(s[0]=u,s[1]=p,s[2]=f,s[3]=m,s[4]=g,s[5]=v)}var g4=(e,t)=>e.candidate-t.candidate,g5=Array(32).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),g6=new Float32Array(6),g8=class{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(e,t){let i=1/0,r=-1/0;for(let s=0,a=e.length;s<a;s++){let a=e[s][t];i=a<i?a:i,r=a>r?a:r}this.min=i,this.max=r}setFromPoints(e,t){let i=1/0,r=-1/0;for(let s=0,a=t.length;s<a;s++){let a=t[s],o=e.dot(a);i=o<i?o:i,r=o>r?o:r}this.min=i,this.max=r}isSeparated(e){return this.min>e.max||e.min>this.max}};g8.prototype.setFromBox=(f=new iv,function(e,t){let i=t.min,r=t.max,s=1/0,a=-1/0;for(let t=0;t<=1;t++)for(let o=0;o<=1;o++)for(let l=0;l<=1;l++){f.x=i.x*t+r.x*(1-t),f.y=i.y*o+r.y*(1-o),f.z=i.z*l+r.z*(1-l);let h=e.dot(f);s=Math.min(h,s),a=Math.max(h,a)}this.min=s,this.max=a}),new g8;var g9=(m=new iv,g=new iv,v=new iv,function(e,t,i){let r=e.start,s=t.start;v.subVectors(r,s),m.subVectors(e.end,e.start),g.subVectors(t.end,t.start);let a=v.dot(g),o=g.dot(m),l=g.dot(g),h=v.dot(m),c=m.dot(m)*l-o*o,d,u;d=0!==c?(a*o-h*l)/c:0,u=(a+d*o)/l,i.x=d,i.y=u}),g7=(y=new tQ,x=new iv,b=new iv,function(e,t,i,r){g9(e,t,y);let s=y.x,a=y.y;if(s>=0&&s<=1&&a>=0&&a<=1){e.at(s,i),t.at(a,r);return}if(s>=0&&s<=1){a<0?t.at(0,r):t.at(1,r),e.closestPointToPoint(r,!0,i);return}if(a>=0&&a<=1){s<0?e.at(0,i):e.at(1,i),t.closestPointToPoint(i,!0,r);return}{let o,l;if(o=s<0?e.start:e.end,l=a<0?t.start:t.end,e.closestPointToPoint(l,!0,x),t.closestPointToPoint(o,!0,b),x.distanceToSquared(l)<=b.distanceToSquared(o)){i.copy(x),r.copy(l);return}i.copy(o),r.copy(b);return}}),ve=(w=new iv,S=new iv,_=new ss,A=new lk,function(e,t){let{radius:i,center:r}=e,{a:s,b:a,c:o}=t;if(A.start=s,A.end=a,A.closestPointToPoint(r,!0,w).distanceTo(r)<=i||(A.start=s,A.end=o,A.closestPointToPoint(r,!0,w).distanceTo(r)<=i)||(A.start=a,A.end=o,A.closestPointToPoint(r,!0,w).distanceTo(r)<=i))return!0;let l=t.getPlane(_);if(Math.abs(l.distanceToPoint(r))<=i){let e=l.projectPoint(r,S);if(t.containsPoint(e))return!0}return!1});function vt(e){return 1e-15>Math.abs(e)}var vi=class extends rx{constructor(...e){super(...e),this.isExtendedTriangle=!0,this.satAxes=[,,,,].fill().map(()=>new iv),this.satBounds=[,,,,].fill().map(()=>new g8),this.points=[this.a,this.b,this.c],this.sphere=new iN,this.plane=new ss,this.needsUpdate=!0}intersectsSphere(e){return ve(e,this)}update(){let e=this.a,t=this.b,i=this.c,r=this.points,s=this.satAxes,a=this.satBounds,o=s[0],l=a[0];this.getNormal(o),l.setFromPoints(o,r);let h=s[1],c=a[1];h.subVectors(e,t),c.setFromPoints(h,r);let d=s[2],u=a[2];d.subVectors(t,i),u.setFromPoints(d,r);let p=s[3],f=a[3];p.subVectors(i,e),f.setFromPoints(p,r),this.sphere.setFromPoints(this.points),this.plane.setFromNormalAndCoplanarPoint(o,e),this.needsUpdate=!1}};vi.prototype.closestPointToSegment=(M=new iv,E=new iv,C=new lk,function(e,t=null,i=null){let{start:r,end:s}=e,a=this.points,o,l=1/0;for(let r=0;r<3;r++){let s=(r+1)%3;C.start.copy(a[r]),C.end.copy(a[s]),g7(C,e,M,E),(o=M.distanceToSquared(E))<l&&(l=o,t&&t.copy(M),i&&i.copy(E))}return this.closestPointToPoint(r,M),(o=r.distanceToSquared(M))<l&&(l=o,t&&t.copy(M),i&&i.copy(r)),this.closestPointToPoint(s,M),(o=s.distanceToSquared(M))<l&&(l=o,t&&t.copy(M),i&&i.copy(s)),Math.sqrt(l)}),vi.prototype.intersectsTriangle=(T=new vi,P=[,,,],D=[,,,],I=new g8,O=new g8,R=new iv,L=new iv,B=new iv,z=new iv,F=new lk,N=new lk,k=new lk,function(e,t=null,i=!1){this.needsUpdate&&this.update(),e.isExtendedTriangle?e.needsUpdate&&e.update():(T.copy(e),T.update(),e=T);let r=this.plane,s=e.plane;if(Math.abs(r.normal.dot(s.normal))>1-1e-10){let r=this.satBounds,s=this.satAxes;D[0]=e.a,D[1]=e.b,D[2]=e.c;for(let e=0;e<4;e++){let t=r[e],i=s[e];if(I.setFromPoints(i,D),t.isSeparated(I))return!1}let a=e.satBounds,o=e.satAxes;P[0]=this.a,P[1]=this.b,P[2]=this.c;for(let e=0;e<4;e++){let t=a[e],i=o[e];if(I.setFromPoints(i,P),t.isSeparated(I))return!1}for(let e=0;e<4;e++){let t=s[e];for(let e=0;e<4;e++){let i=o[e];if(R.crossVectors(t,i),I.setFromPoints(R,P),O.setFromPoints(R,D),I.isSeparated(O))return!1}}return t&&(i||console.warn("ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0."),t.start.set(0,0,0),t.end.set(0,0,0)),!0}{let i=this.points,a=!1,o=0;for(let e=0;e<3;e++){let t=i[e],r=i[(e+1)%3];F.start.copy(t),F.end.copy(r),F.delta(L);let l=a?N.start:N.end,h=vt(s.distanceToPoint(t));
3139if(vt(s.normal.dot(L))&&h){N.copy(F),o=2;break}if((s.intersectLine(F,l)||h)&&!vt(l.distanceTo(r))){if(o++,a)break;a=!0}}if(1===o&&e.containsPoint(N.end))return t&&(t.start.copy(N.end),t.end.copy(N.end)),!0;if(2!==o)return!1;let l=e.points,h=!1,c=0;for(let e=0;e<3;e++){let t=l[e],i=l[(e+1)%3];F.start.copy(t),F.end.copy(i),F.delta(B);let s=h?k.start:k.end,a=vt(r.distanceToPoint(t));if(vt(r.normal.dot(B))&&a){k.copy(F),c=2;break}if((r.intersectLine(F,s)||a)&&!vt(s.distanceTo(i))){if(c++,h)break;h=!0}}if(1===c&&this.containsPoint(k.end))return t&&(t.start.copy(k.end),t.end.copy(k.end)),!0;if(2!==c)return!1;if(N.delta(L),k.delta(B),0>L.dot(B)){let e=k.start;k.start=k.end,k.end=e}let d=N.start.dot(L),u=N.end.dot(L),p=k.start.dot(L),f=k.end.dot(L);return(d===f||p===u||u<p!=d<f)&&(t&&(z.subVectors(N.start,k.start),z.dot(L)>0?t.start.copy(N.start):t.start.copy(k.start),z.subVectors(N.end,k.end),0>z.dot(L)?t.end.copy(N.end):t.end.copy(k.end)),!0)}}),vi.prototype.distanceToPoint=(U=new iv,function(e){return this.closestPointToPoint(e,U),e.distanceTo(U)}),vi.prototype.distanceToTriangle=(V=new iv,j=new iv,G=["a","b","c"],H=new lk,W=new lk,function(e,t=null,i=null){let r=t||i?H:null;if(this.intersectsTriangle(e,r))return(t||i)&&(t&&r.getCenter(t),i&&r.getCenter(i)),0;let s=1/0;for(let r=0;r<3;r++){let a,o=G[r],l=e[o];this.closestPointToPoint(l,V),(a=l.distanceToSquared(V))<s&&(s=a,t&&t.copy(V),i&&i.copy(l));let h=this[o];e.closestPointToPoint(h,V),(a=h.distanceToSquared(V))<s&&(s=a,t&&t.copy(h),i&&i.copy(V))}for(let r=0;r<3;r++){let a=G[r],o=G[(r+1)%3];H.set(this[a],this[o]);for(let r=0;r<3;r++){let a=G[r],o=G[(r+1)%3];W.set(e[a],e[o]),g7(H,W,V,j);let l=V.distanceToSquared(j);l<s&&(s=l,t&&t.copy(V),i&&i.copy(j))}}return Math.sqrt(s)});var vr=class{constructor(e,t,i){this.isOrientedBox=!0,this.min=new iv,this.max=new iv,this.matrix=new iX,this.invMatrix=new iX,this.points=Array(8).fill().map(()=>new iv),this.satAxes=[,,,].fill().map(()=>new iv),this.satBounds=[,,,].fill().map(()=>new g8),this.alignedSatBounds=[,,,].fill().map(()=>new g8),this.needsUpdate=!1,e&&this.min.copy(e),t&&this.max.copy(t),i&&this.matrix.copy(i)}set(e,t,i){this.min.copy(e),this.max.copy(t),this.matrix.copy(i),this.needsUpdate=!0}copy(e){this.min.copy(e.min),this.max.copy(e.max),this.matrix.copy(e.matrix),this.needsUpdate=!0}};vr.prototype.update=function(){let e=this.matrix,t=this.min,i=this.max,r=this.points;for(let s=0;s<=1;s++)for(let a=0;a<=1;a++)for(let o=0;o<=1;o++){let l=r[1*s|2*a|4*o];l.x=s?i.x:t.x,l.y=a?i.y:t.y,l.z=o?i.z:t.z,l.applyMatrix4(e)}let s=this.satBounds,a=this.satAxes,o=r[0];for(let e=0;e<3;e++){let t=a[e],i=s[e],l=r[1<<e];t.subVectors(o,l),i.setFromPoints(t,r)}let l=this.alignedSatBounds;l[0].setFromPointsField(r,"x"),l[1].setFromPointsField(r,"y"),l[2].setFromPointsField(r,"z"),this.invMatrix.copy(this.matrix).invert(),this.needsUpdate=!1},vr.prototype.intersectsBox=(q=new g8,function(e){this.needsUpdate&&this.update();let t=e.min,i=e.max,r=this.satBounds,s=this.satAxes,a=this.alignedSatBounds;if(q.min=t.x,q.max=i.x,a[0].isSeparated(q)||(q.min=t.y,q.max=i.y,a[1].isSeparated(q))||(q.min=t.z,q.max=i.z,a[2].isSeparated(q)))return!1;for(let t=0;t<3;t++){let i=s[t],a=r[t];if(q.setFromBox(i,e),a.isSeparated(q))return!1}return!0}),vr.prototype.intersectsTriangle=(X=new vi,Y=[,,,],Q=new g8,K=new g8,Z=new iv,function(e){this.needsUpdate&&this.update(),e.isExtendedTriangle?e.needsUpdate&&e.update():(X.copy(e),X.update(),e=X);let t=this.satBounds,i=this.satAxes;Y[0]=e.a,Y[1]=e.b,Y[2]=e.c;for(let e=0;e<3;e++){let r=t[e],s=i[e];if(Q.setFromPoints(s,Y),r.isSeparated(Q))return!1}let r=e.satBounds,s=e.satAxes,a=this.points;for(let e=0;e<3;e++){let t=r[e],i=s[e];if(Q.setFromPoints(i,a),t.isSeparated(Q))return!1}for(let e=0;e<3;e++){let t=i[e];for(let e=0;e<4;e++){let i=s[e];if(Z.crossVectors(t,i),Q.setFromPoints(Z,Y),K.setFromPoints(Z,a),Q.isSeparated(K))return!1}}return!0}),vr.prototype.closestPointToPoint=function(e,t){return this.needsUpdate&&this.update(),t.copy(e).applyMatrix4(this.invMatrix).clamp(this.min,this.max).applyMatrix4(this.matrix),t},vr.prototype.distanceToPoint=(J=new iv,function(e){return this.closestPointToPoint(e,J),e.distanceTo(J)}),vr.prototype.distanceToBox=($=["x","y","z"],ee=Array(12).fill().map(()=>new lk),et=Array(12).fill().map(()=>new lk),ei=new iv,er=new iv,function(e,t=0,i=null,r=null){if(this.needsUpdate&&this.update(),this.intersectsBox(e))return(i||r)&&(e.getCenter(er),this.closestPointToPoint(er,ei),e.closestPointToPoint(ei,er),i&&i.copy(ei),r&&r.copy(er)),0;let s=t*t,a=e.min,o=e.max,l=this.points,h=1/0;for(let e=0;e<8;e++){let t=l[e];er.copy(t).clamp(a,o);let c=t.distanceToSquared(er);
3139if(c<h&&(h=c,i&&i.copy(t),r&&r.copy(er),c<s))return Math.sqrt(c)}let c=0;for(let e=0;e<3;e++)for(let t=0;t<=1;t++)for(let i=0;i<=1;i++){let r=(e+1)%3,s=(e+2)%3,h=t<<r|i<<s,d=1<<e|t<<r|i<<s,u=l[h],p=l[d];ee[c].set(u,p);let f=$[e],m=$[r],g=$[s],v=et[c],y=v.start,x=v.end;y[f]=a[f],y[m]=t?a[m]:o[m],y[g]=i?a[g]:o[m],x[f]=o[f],x[m]=t?a[m]:o[m],x[g]=i?a[g]:o[m],c++}for(let e=0;e<=1;e++)for(let t=0;t<=1;t++)for(let l=0;l<=1;l++){er.x=e?o.x:a.x,er.y=t?o.y:a.y,er.z=l?o.z:a.z,this.closestPointToPoint(er,ei);let c=er.distanceToSquared(ei);if(c<h&&(h=c,i&&i.copy(ei),r&&r.copy(er),c<s))return Math.sqrt(c)}for(let e=0;e<12;e++){let t=ee[e];for(let e=0;e<12;e++){g7(t,et[e],ei,er);let a=ei.distanceToSquared(er);if(a<h&&(h=a,i&&i.copy(ei),r&&r.copy(er),a<s))return Math.sqrt(a)}}return Math.sqrt(h)});var vs=new iv,va=new iv,vn=new iv,vo=new tQ,vl=new tQ,vh=new tQ,vc=new iv,vd=new iv,vu=new iv,vp=new iv;function vf(e,t,i,r,s){let a=3*r,o=e.index.getX(a),l=e.index.getX(a+1),h=e.index.getX(a+2),{position:c,normal:d,uv:u,uv1:p}=e.attributes,f=function(e,t,i,r,s,a,o,l,h){vs.fromBufferAttribute(t,a),va.fromBufferAttribute(t,o),vn.fromBufferAttribute(t,l);let c=null===(1===h?e.intersectTriangle(vn,va,vs,!0,vp):e.intersectTriangle(vs,va,vn,2!==h,vp))?null:{distance:e.origin.distanceTo(vp),point:vp.clone()};if(c){r&&(vo.fromBufferAttribute(r,a),vl.fromBufferAttribute(r,o),vh.fromBufferAttribute(r,l),c.uv=rx.getInterpolation(vp,vs,va,vn,vo,vl,vh,new tQ)),s&&(vo.fromBufferAttribute(s,a),vl.fromBufferAttribute(s,o),vh.fromBufferAttribute(s,l),c.uv1=rx.getInterpolation(vp,vs,va,vn,vo,vl,vh,new tQ)),i&&(vc.fromBufferAttribute(i,a),vd.fromBufferAttribute(i,o),vu.fromBufferAttribute(i,l),c.normal=rx.getInterpolation(vp,vs,va,vn,vc,vd,vu,new iv),c.normal.dot(e.direction)>0&&c.normal.multiplyScalar(-1));let t={a:a,b:o,c:l,normal:new iv,materialIndex:0};rx.getNormal(vs,va,vn,t.normal),c.face=t,c.faceIndex=a}return c}(i,c,d,u,p,o,l,h,t);return f?(f.faceIndex=r,s&&s.push(f),f):null}function vm(e,t,i,r){let s=e.a,a=e.b,o=e.c,l=t,h=t+1,c=t+2;i&&(l=i.getX(t),h=i.getX(t+1),c=i.getX(t+2)),s.x=r.getX(l),s.y=r.getY(l),s.z=r.getZ(l),a.x=r.getX(h),a.y=r.getY(h),a.z=r.getZ(h),o.x=r.getX(c),o.y=r.getY(c),o.z=r.getZ(c)}function vg(e,t,i,r,s,a,o){let l=i.index,h=i.attributes.position;for(let i=e,c=t+e;i<c;i++)if(vm(o,3*i,l,h),o.needsUpdate=!0,r(o,i,s,a))return!0;return!1}var vv=class{constructor(e){this._getNewPrimitive=e,this._primitives=[]}getPrimitive(){let e=this._primitives;return 0===e.length?this._getNewPrimitive():e.pop()}releasePrimitive(e){this._primitives.push(e)}};function vy(e,t){return 65535===t[e+15]}var vx=new ib,vb=new iv,vw=["x","y","z"],vS=(en=[],eo=new vv(()=>new ib),function(...e){es=eo.getPrimitive(),ea=eo.getPrimitive(),en.push(es,ea);let t=function e(t,i,r,s,a=null,o=0,l=0){function h(e){let t=2*e,i=yq,r=yX;for(;!vy(t,i);)e+=8,t=2*e;return r[e+6]}function c(e){let t=2*e,i=yq,r=yX;for(;!vy(t,i);)t=2*(e=r[e+6]);return r[e+6]+i[t+14]}let d=2*t,u=yW,p=yq,f=yX;if(vy(d,p)){let e=f[t+6],i=p[d+14];return gJ(t,u,es),s(e,i,!1,l,o+t,es)}{let d=t+8,m=f[t+6],g=d,v=m,y,x,b,w;if(a&&(b=es,w=ea,gJ(g,u,b),gJ(v,u,w),y=a(b),(x=a(w))<y)){g=m,v=d;let e=y;y=x,x=e,b=w}b||gJ(g,u,b=es);let S=r(b,vy(2*g,p),y,l+1,o+g),_;if(2===S){let e=h(g),t=c(g)-e;_=s(e,t,!0,l+1,o+g,b)}else _=S&&e(g,i,r,s,a,o,l+1);if(_)return!0;gJ(v,u,w=ea);let A=r(w,vy(2*v,p),x,l+1,o+v),M;if(2===A){let e=h(v),t=c(v)-e;M=s(e,t,!0,l+1,o+v,w)}else M=A&&e(v,i,r,s,a,o,l+1);return!!M}}(...e);eo.releasePrimitive(es),eo.releasePrimitive(ea),en.pop(),en.pop();let i=en.length;return i>0&&(ea=en[i-1],es=en[i-2]),t}),v_=(el=new vi,eh=new vi,ec=new iX,ed=new vr,eu=new vr,function e(t,i,r,s,a=null){let o=2*t,l=yW,h=yq,c=yX;if(null===a&&(r.boundingBox||r.computeBoundingBox(),ed.set(r.boundingBox.min,r.boundingBox.max,s),a=ed),vy(o,h)){let e=i.index,a=i.attributes.position,d=r.index,u=r.attributes.position,p=c[t+6],f=h[o+14];if(ec.copy(s).invert(),r.boundsTree)return gJ(t,l,eu),eu.matrix.copy(ec),eu.needsUpdate=!0,r.boundsTree.shapecast({intersectsBounds:e=>eu.intersectsBox(e),intersectsTriangle:t=>
3139{t.a.applyMatrix4(s),t.b.applyMatrix4(s),t.c.applyMatrix4(s),t.needsUpdate=!0;for(let i=3*p,r=(f+p)*3;i<r;i+=3)if(vm(eh,i,e,a),eh.needsUpdate=!0,t.intersectsTriangle(eh))return!0;return!1}});for(let t=3*p,i=f+3*p;t<i;t+=3){vm(el,t,e,a),el.a.applyMatrix4(ec),el.b.applyMatrix4(ec),el.c.applyMatrix4(ec),el.needsUpdate=!0;for(let e=0,t=d.count;e<t;e+=3)if(vm(eh,e,d,u),eh.needsUpdate=!0,el.intersectsTriangle(eh))return!0}}else{let o=t+8,h=c[t+6];return gJ(o,l,vx),!!(a.intersectsBox(vx)&&e(o,i,r,s,a)||(gJ(h,l,vx),a.intersectsBox(vx)&&e(h,i,r,s,a)))}});function vA(e,t,i,r){return gJ(e,t,vx),i.intersectBox(vx,r)}var vM,vE,vC,vT,vP,vD,vI,vO,vR,vL,vB,vz,vF,vN,vk,vU,vV,vj,vG,vH,vW,vq,vX,vY,vQ,vK,vZ,vJ,v$,v0,v1,v2,v3,v4,v5,v6,v8,v9,v7,ye,yt,yi,yr,ys,ya,yn,yo,yl,yh,yc,yd,yu,yp,yf,ym,yg,yv,yy,yx,yb,yw,yS,y_,yA,yM,yE,yC,yT,yP,yD,yI,yO,yR,yL,yB,yz,yF,yN,yk,yU,yV,yj,yG,yH,yW,yq,yX,yY=[];function yQ(e){yH&&yY.push(yH),yH=e,yW=new Float32Array(e),yq=new Uint16Array(e),yX=new Uint32Array(e)}function yK(){yH=null,yW=null,yq=null,yX=null,yY.length&&yQ(yY.pop())}var yZ=Symbol("skip tree generation"),yJ=new ib,y$=new ib,y0=new iX,y1=new vr,y2=new vr,y3=new iv,y4=new iv,y5=new iv,y6=new iv,y8=new iv,y9=new ib,y7=new vv(()=>new vi),xe=class{static serialize(e,t={}){if(t.isBufferGeometry)return console.warn("MeshBVH.serialize: The arguments for the function have changed. See documentation for new signature."),xe.serialize(arguments[0],{cloneBuffers:void 0===arguments[2]||arguments[2]});t={cloneBuffers:!0,...t};let i=e.geometry,r=e._roots,s=i.getIndex();return t.cloneBuffers?{roots:r.map(e=>e.slice()),index:s.array.slice()}:{roots:r,index:s.array}}static deserialize(e,t,i={}){if("boolean"==typeof i)return console.warn("MeshBVH.deserialize: The arguments for the function have changed. See documentation for new signature."),xe.deserialize(arguments[0],arguments[1],{setIndex:void 0===arguments[2]||arguments[2]});i={setIndex:!0,...i};let{index:r,roots:s}=e,a=new xe(t,{...i,[yZ]:!0});if(a._roots=s,i.setIndex){let i=t.getIndex();if(null===i){let i=new rM(e.index,1,!1);t.setIndex(i)}else i.array!==r&&(i.array.set(r),i.needsUpdate=!0)}return a}constructor(e,t={}){if(e.isBufferGeometry){if(e.index&&e.index.isInterleavedBufferAttribute)throw Error("MeshBVH: InterleavedBufferAttribute is not supported for the index attribute.")}else throw Error("MeshBVH: Only BufferGeometries are supported.");if((t=Object.assign({strategy:0,maxDepth:40,maxLeafTris:10,verbose:!0,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,[yZ]:!1},t)).useSharedArrayBuffer&&typeof SharedArrayBuffer>"u")throw Error("MeshBVH: SharedArrayBuffer is not available.");this._roots=null,t[yZ]||(this._roots=function(e,t){let i=function(e,t){function i(e){p&&p(e/f)}function r(t,s,p,f=null,g=0){if(!m&&g>=h&&(m=!0,c&&(console.warn(`MeshBVH: Max depth of ${h} reached when generating BVH. Consider increasing maxDepth.`),console.warn(e))),p<=d||g>=h)return i(s+p),t.offset=s,t.count=p,t;let v=function(e,t,i,r,s,a){let o=-1,l=0;if(0===a)-1!==(o=g$(t))&&(l=(t[o]+t[o+3])/2);else if(1===a)-1!==(o=g$(e))&&(l=function(e,t,i,r){let s=0;for(let a=t,o=t+i;a<o;a++)s+=e[6*a+2*r];return s/i}(i,r,s,o));else if(2===a){let a=g2(e),h=1.25*s,c=6*r,d=(r+s)*6;for(let e=0;e<3;e++){let r=t[e],u=(t[e+3]-r)/32;if(s<8){let t=[...g5];t.length=s;let r=0;for(let s=c;s<d;s+=6,r++){let a=t[r];a.candidate=i[s+2*e],a.count=0;let{bounds:o,leftCacheBounds:l,rightCacheBounds:h}=a;for(let e=0;e<3;e++)h[e]=1/0,h[e+3]=-1/0,l[e]=1/0,l[e+3]=-1/0,o[e]=1/0,o[e+3]=-1/0;g1(s,i,o)}t.sort(g4);let u=s;for(let e=0;e<u;e++){let i=t[e];for(;e+1<u&&t[e+1].candidate===i.candidate;)t.splice(e+1,1),u--}for(let r=c;r<d;r+=6){let s=i[r+2*e];for(let e=0;e<u;e++){let a=t[e];s>=a.candidate?g1(r,i,a.rightCacheBounds):(g1(r,i,a.leftCacheBounds),a.count++)}}for(let i=0;i<u;i++){let r=t[i],c=r.count,d=s-r.count,u=r.leftCacheBounds,p=r.rightCacheBounds,f=0;0!==c&&(f=g2(u)/a);let m=0;0!==d&&(m=g2(p)/a);let g=1+1.25*(f*c+m*d);g<h&&(o=e,h=g,l=r.candidate)}}else{for(let e=0;e<32;e++){let t=g5[e];t.count=0,t.candidate=r+u+e*u;let i=t.bounds;for(let e=0;e<3;e++)i[e]=1/0,i[e+3]=-1/0}for(let t=c;t<d;t+=6){let s=~~((i[t+2*e]-r)/u);s>=32&&(s=31);let a=g5[s];a.count++,g1(t,i,a.bounds)}let t=g5[31];!function(e,t){t.set(e)}(t.bounds,t.rightCacheBounds);for(let e=30;e>=0;e--){let t=g5[e],i=g5[e+1];g0(t.bounds,i.rightCacheBounds,t.rightCacheBounds)}let p=0;for(let t=0;t<31;t++){let i=g5[t],r=i.count,c=i.bounds,d=g5[t+1].rightCacheBounds;0!==r&&(0===p?function(e,t){t.set(e)}(c,g6):g0(c,g6,g6));let u=0,f=0;0!==(p+=r)&&(u=g2(g6)/a);let m=s-p;0!==m&&(f=g2(d)/a);let g=1+1.25*(u*p+f*m);g<h&&(o=e,h=g,l=i.candidate)}}}}else console.warn(`MeshBVH: Invalid build strategy value ${a} used.`);return{axis:o,pos:l}}(t.boundingData,f,o,s,p,u);if(-1===v.axis)return i(s+p),t.offset=s,t.count=p,t;let y=function(e,t,i,r,s){let a=i,o=i+r-1,l=s.pos,h=2*s.axis;for(;;){for(;a<=o&&t[6*a+h]<l;)a++;for(;a<=o&&t[6*o+h]>=l;)o--;if(!(a<o))return a;for(let i=0;i<3;i++){let r=e[3*a+i];e[3*a+i]=e[3*o+i],e[3*o+i]=r;let s=t[6*a+2*i+0];t[6*a+2*i+0]=t[6*o+2*i+0],t[6*o+2*i+0]=s;let l=t[6*a+2*i+1];t[6*a+2*i+1]=t[6*o+2*i+1],t[6*o+2*i+1]=l}a++,o--}}(l,o,s,p,v);if(y===s||y===s+p)i(s+p),t.offset=s,t.count=p;else{t.splitAxis=v.axis;let e=new gZ,i=y-s;
3139t.left=e,e.boundingData=new Float32Array(6),g3(o,s,i,e.boundingData,a),r(e,s,i,a,g+1);let l=new gZ,h=p-i;t.right=l,l.boundingData=new Float32Array(6),g3(o,y,h,l.boundingData,a),r(l,y,h,a,g+1)}return t}!function(e,t){if(!e.index){let i=e.attributes.position.count,r=t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,s;s=i>65535?new Uint32Array(new r(4*i)):new Uint16Array(new r(2*i)),e.setIndex(new rM(s,1));for(let e=0;e<i;e++)s[e]=e}}(e,t);let s=new Float32Array(6),a=new Float32Array(6),o=function(e,t){let i=e.attributes.position,r=e.index.array,s=r.length/3,a=new Float32Array(6*s),o=i.normalized,l=i.array,h=i.offset||0,c=3;i.isInterleavedBufferAttribute&&(c=i.data.stride);let d=["getX","getY","getZ"];for(let e=0;e<s;e++){let s=3*e,u=6*e,p,f,m;o?(p=r[s+0],f=r[s+1],m=r[s+2]):(p=r[s+0]*c+h,f=r[s+1]*c+h,m=r[s+2]*c+h);for(let e=0;e<3;e++){let r,s,h;o?(r=i[d[e]](p),s=i[d[e]](f),h=i[d[e]](m)):(r=l[p+e],s=l[f+e],h=l[m+e]);let c=r;s<c&&(c=s),h<c&&(c=h);let g=r;s>g&&(g=s),h>g&&(g=h);let v=(g-c)/2,y=2*e;a[u+y+0]=c+v,a[u+y+1]=v+(Math.abs(c)+v)*5960464477539063e-23,c<t[e]&&(t[e]=c),g>t[e+3]&&(t[e+3]=g)}}return a}(e,s),l=e.index.array,h=t.maxDepth,c=t.verbose,d=t.maxLeafTris,u=t.strategy,p=t.onProgress,f=e.index.count/3,m=!1,g=[],v=function(e){if(!e.groups||!e.groups.length)return[{offset:0,count:e.index.count/3}];let t=[],i=new Set;for(let t of e.groups)i.add(t.start),i.add(t.start+t.count);let r=Array.from(i.values()).sort((e,t)=>e-t);for(let e=0;e<r.length-1;e++){let i=r[e],s=r[e+1];t.push({offset:i/3,count:(s-i)/3})}return t}(e);if(1===v.length){let e=v[0],t=new gZ;t.boundingData=s,function(e,t,i,r){let s=1/0,a=1/0,o=1/0,l=-1/0,h=-1/0,c=-1/0;for(let r=6*t,d=(t+i)*6;r<d;r+=6){let t=e[r+0];t<s&&(s=t),t>l&&(l=t);let i=e[r+2];i<a&&(a=i),i>h&&(h=i);let d=e[r+4];d<o&&(o=d),d>c&&(c=d)}r[0]=s,r[1]=a,r[2]=o,r[3]=l,r[4]=h,r[5]=c}(o,e.offset,e.count,a),r(t,e.offset,e.count,a),g.push(t)}else for(let e of v){let t=new gZ;t.boundingData=new Float32Array(6),g3(o,e.offset,e.count,t.boundingData,a),r(t,e.offset,e.count,a),g.push(t)}return g}(e,t),r,s,a,o=[],l=t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer;for(let e=0;e<i.length;e++){let t=i[e],h=new l(32*function e(t){return t.count?1:1+e(t.left)+e(t.right)}(t));r=new Float32Array(h),s=new Uint32Array(h),a=new Uint16Array(h),function e(t,i){let o=t/4,l=t/2,h=!!i.count,c=i.boundingData;for(let e=0;e<6;e++)r[o+e]=c[e];if(h){let e=i.offset,r=i.count;return s[o+6]=e,a[l+14]=r,a[l+15]=65535,t+32}{let r=i.left,a=i.right,l=i.splitAxis,h;if((h=e(t+32,r))/4>4294967296)throw Error("MeshBVH: Cannot store child pointer greater than 32 bits.");return s[o+6]=h/4,h=e(h,a),s[o+7]=l,h}}(0,t),o.push(h)}return o}(e,t),!e.boundingBox&&t.setBoundingBox&&(e.boundingBox=this.getBoundingBox(new ib))),this.geometry=e}refit(e=null){e&&Array.isArray(e)&&(e=new Set(e));let t=this.geometry,i=t.index.array,r=t.attributes.position,s,a,o,l,h=0,c=this._roots;for(let t=0,d=c.length;t<d;t++)a=new Uint32Array(s=c[t]),o=new Uint16Array(s),l=new Float32Array(s),function t(s,h,c=!1){let d=2*s;if(65535===o[d+15]){let e=a[s+6],t=o[d+14],h=1/0,c=1/0,u=1/0,p=-1/0,f=-1/0,m=-1/0;for(let s=3*e,a=3*(e+t);s<a;s++){let e=i[s],t=r.getX(e),a=r.getY(e),o=r.getZ(e);t<h&&(h=t),t>p&&(p=t),a<c&&(c=a),a>f&&(f=a),o<u&&(u=o),o>m&&(m=o)}return(l[s+0]!==h||l[s+1]!==c||l[s+2]!==u||l[s+3]!==p||l[s+4]!==f||l[s+5]!==m)&&(l[s+0]=h,l[s+1]=c,l[s+2]=u,l[s+3]=p,l[s+4]=f,l[s+5]=m,!0)}{let i=s+8,r=a[s+6],o=i+h,d=r+h,u=c,p=!1,f=!1;e?u||(p=e.has(o),f=e.has(d),u=!p&&!f):(p=!0,f=!0);let m=u||p,g=u||f,v=!1;m&&(v=t(i,h,u));let y=!1;g&&(y=t(r,h,u));let x=v||y;if(x)for(let e=0;e<3;e++){let t=i+e,a=r+e,o=l[t],h=l[t+3],c=l[a],d=l[a+3];l[s+e]=o<c?o:c,l[s+e+3]=h>d?h:d}return x}}(0,h),h+=s.byteLength}traverse(e,t=0){let i=this._roots[t],r=new Uint32Array(i),s=new Uint16Array(i);!function t(a,o=0){let l=2*a,h=65535===s[l+15];if(h){let t=r[a+6],c=s[l+14];e(o,h,new Float32Array(i,4*a,6),t,c)}else{let s=r[a+6],l=r[a+7];e(o,h,new Float32Array(i,4*a,6),l)||(t(a+8,o+1),t(s,o+1))}}(0)}raycast(e,t=0){let i=this._roots,r=this.geometry,s=[],a=t.isMaterial,o=Array.isArray(t),l=r.groups,h=a?t.side:t;for(let a=0,c=i.length;a<c;a++){let c=o?t[l[a].materialIndex].side:h,d=s.length;if(yQ(i[a]),function e(t,i,r,s,a){let o=2*t,l=yW,h=yq,c=yX;if(vy(o,h))!function(e,t,i,r,s,a){for(let o=r,l=r+s;o<l;o++)vf(e,t,i,o,a)}(i,r,s,c[t+6],h[o+14],a);else{let o=t+8;vA(o,l,s,vb)&&e(o,i,r,s,a);let h=c[t+6];vA(h,l,s,vb)&&e(h,i,r,s,a)}}(0,r,c,e,s),yK(),o){let e=l[a].materialIndex;for(let t=d,i=s.length;t<i;t++)s[t].face.materialIndex=e}}return s}raycastFirst(e,t=0){let i=this._roots,r=this.geometry,s=t.isMaterial,a=Array.isArray(t),o=null,l=r.groups,h=s?t.side:t;for(let s=0,c=i.length;s<c;s++){let c=a?t[l[s].materialIndex].side:h;yQ(i[s]);let d=function e(t,i,r,s){let a=2*t,o=yW,l=yq,h=yX;if(vy(a,l))return function(e,t,i,r,s){let a=1/0,o=null;for(let l=r,h=r+s;l<h;l++){let r=vf(e,t,i,l);r&&r.distance<a&&(o=r,a=r.distance)}return o}
3139(i,r,s,h[t+6],l[a+14]);{let a=h[t+7],l=vw[a],c=s.direction[l]>=0,d,u;c?(d=t+8,u=h[t+6]):(d=h[t+6],u=t+8);let p=vA(d,o,s,vb)?e(d,i,r,s):null;if(p){let e=p.point[l];if(c?e<=o[u+a]:e>=o[u+a+3])return p}let f=vA(u,o,s,vb)?e(u,i,r,s):null;return p&&f?p.distance<=f.distance?p:f:p||f||null}}(0,r,c,e);yK(),null!=d&&(null==o||d.distance<o.distance)&&(o=d,a&&(d.face.materialIndex=l[s].materialIndex))}return o}intersectsGeometry(e,t){let i=this.geometry,r=!1;for(let s of this._roots)if(yQ(s),r=v_(0,i,e,t),yK(),r)break;return r}shapecast(e,t,i){let r=this.geometry;if(e instanceof Function){if(t){let e=t;t=(t,i,r,s)=>{let a=3*i;return e(t,a,a+1,a+2,r,s)}}e={boundsTraverseOrder:i,intersectsBounds:e,intersectsTriangle:t,intersectsRange:null},console.warn("MeshBVH: Shapecast function signature has changed and now takes an object of callbacks as a second argument. See docs for new signature.")}let s=y7.getPrimitive(),{boundsTraverseOrder:a,intersectsBounds:o,intersectsRange:l,intersectsTriangle:h}=e;if(l&&h){let e=l;l=(t,i,a,o,l)=>!!e(t,i,a,o,l)||vg(t,i,r,h,a,o,s)}else l||(l=h?(e,t,i,a)=>vg(e,t,r,h,i,a,s):(e,t,i)=>i);let c=!1,d=0;for(let e of this._roots){if(yQ(e),c=vS(0,r,o,l,a,d),yK(),c)break;d+=e.byteLength}return y7.releasePrimitive(s),c}bvhcast(e,t,i){let{intersectsRanges:r,intersectsTriangles:s}=i,a=this.geometry.index,o=this.geometry.attributes.position,l=e.geometry.index,h=e.geometry.attributes.position;y0.copy(t).invert();let c=y7.getPrimitive(),d=y7.getPrimitive();if(s){let e=function(e,i,r,u,p,f,m,g){for(let v=r,y=r+u;v<y;v++){vm(d,3*v,l,h),d.a.applyMatrix4(t),d.b.applyMatrix4(t),d.c.applyMatrix4(t),d.needsUpdate=!0;for(let t=e,r=e+i;t<r;t++)if(vm(c,3*t,a,o),c.needsUpdate=!0,s(c,d,t,v,p,f,m,g))return!0}return!1};if(r){let t=r;r=function(i,r,s,a,o,l,h,c){return!!t(i,r,s,a,o,l,h,c)||e(i,r,s,a,o,l,h,c)}}else r=e}e.getBoundingBox(y$),y$.applyMatrix4(t);let u=this.shapecast({intersectsBounds:e=>y$.intersectsBox(e),intersectsRange:(t,i,s,a,o,l)=>(yJ.copy(l),yJ.applyMatrix4(y0),e.shapecast({intersectsBounds:e=>yJ.intersectsBox(e),intersectsRange:(e,s,l,h,c)=>r(t,i,e,s,a,o,h,c)}))});return y7.releasePrimitive(c),y7.releasePrimitive(d),u}intersectsBox(e,t){return y1.set(e.min,e.max,t),y1.needsUpdate=!0,this.shapecast({intersectsBounds:e=>y1.intersectsBox(e),intersectsTriangle:e=>y1.intersectsTriangle(e)})}intersectsSphere(e){return this.shapecast({intersectsBounds:t=>e.intersectsBox(t),intersectsTriangle:t=>t.intersectsSphere(e)})}closestPointToGeometry(e,t,i={},r={},s=0,a=1/0){e.boundingBox||e.computeBoundingBox(),y1.set(e.boundingBox.min,e.boundingBox.max,t),y1.needsUpdate=!0;let o=this.geometry,l=o.attributes.position,h=o.index,c=e.attributes.position,d=e.index,u=y7.getPrimitive(),p=y7.getPrimitive(),f=null,m=null;r&&(f=y6,m=y8);let g=1/0,v=null,y=null;return y0.copy(t).invert(),y2.matrix.copy(y0),this.shapecast({boundsTraverseOrder:e=>y1.distanceToBox(e),intersectsBounds:(e,t,i)=>i<g&&i<a&&(t&&(y2.min.copy(e.min),y2.max.copy(e.max),y2.needsUpdate=!0),!0),intersectsRange:(i,r)=>{if(e.boundsTree)return e.boundsTree.shapecast({boundsTraverseOrder:e=>y2.distanceToBox(e),intersectsBounds:(e,t,i)=>i<g&&i<a,intersectsRange:(e,a)=>{for(let o=3*e,x=(e+a)*3;o<x;o+=3){vm(p,o,d,c),p.a.applyMatrix4(t),p.b.applyMatrix4(t),p.c.applyMatrix4(t),p.needsUpdate=!0;for(let e=3*i,t=(i+r)*3;e<t;e+=3){vm(u,e,h,l),u.needsUpdate=!0;let t=u.distanceToTriangle(p,y4,f);if(t<g&&(y5.copy(y4),m&&m.copy(f),g=t,v=e/3,y=o/3),t<s)return!0}}}});{let e=d?d.count:c.count;for(let a=0;a<e;a+=3){vm(p,a,d,c),p.a.applyMatrix4(t),p.b.applyMatrix4(t),p.c.applyMatrix4(t),p.needsUpdate=!0;for(let e=3*i,t=(i+r)*3;e<t;e+=3){vm(u,e,h,l),u.needsUpdate=!0;let t=u.distanceToTriangle(p,y4,f);if(t<g&&(y5.copy(y4),m&&m.copy(f),g=t,v=e/3,y=a/3),t<s)return!0}}}}}),y7.releasePrimitive(u),y7.releasePrimitive(p),g===1/0?null:(i.point?i.point.copy(y5):i.point=y5.clone(),i.distance=g,i.faceIndex=v,r&&(r.point?r.point.copy(m):r.point=m.clone(),r.point.applyMatrix4(y0),y5.applyMatrix4(y0),r.distance=y5.sub(r.point).length(),r.faceIndex=y),i)}closestPointToPoint(e,t={},i=0,r=1/0){let s=i*i,a=r*r,o=1/0,l=null;
3139if(this.shapecast({boundsTraverseOrder:t=>(y3.copy(e).clamp(t.min,t.max),y3.distanceToSquared(e)),intersectsBounds:(e,t,i)=>i<o&&i<a,intersectsTriangle:(t,i)=>{t.closestPointToPoint(e,y3);let r=e.distanceToSquared(y3);return r<o&&(y4.copy(y3),o=r,l=i),r<s}}),o===1/0)return null;let h=Math.sqrt(o);return t.point?t.point.copy(y4):t.point=y4.clone(),t.distance=h,t.faceIndex=l,t}getBoundingBox(e){return e.makeEmpty(),this._roots.forEach(t=>{gJ(0,new Float32Array(t),y9),e.union(y9)}),e}},xt=tw(t_()),xi=.5*(Math.sqrt(3)-1),xr=(3-Math.sqrt(3))/6,xs=1/3,xa=1/6,xn=e=>0|Math.floor(e),xo=new Float64Array([1,1,-1,1,1,-1,-1,-1,1,0,-1,0,1,0,-1,0,0,1,0,-1,0,1,0,-1]),xl=new Float64Array([1,1,0,-1,1,0,1,-1,0,-1,-1,0,1,0,1,-1,0,1,1,0,-1,-1,0,-1,0,1,1,0,-1,1,0,1,-1,0,-1,-1]);function xh(e){let t=new Uint8Array(512);for(let e=0;e<256;e++)t[e]=e;for(let i=0;i<255;i++){let r=i+~~(e()*(256-i)),s=t[i];t[i]=t[r],t[r]=s}for(let e=256;e<512;e++)t[e]=t[e-256];return t}var xc,xd=new rx,xu=class{constructor(e){this.weightAttribute=null;let t=e.geometry;if(!t.isBufferGeometry||3!==t.attributes.position.itemSize)throw Error("THREE.MeshSurfaceSampler: Requires BufferGeometry triangle mesh.");t.index&&(t=t.toNonIndexed()),this.geometry=t,this.randomFunction=Math.random,this.positionAttribute=this.geometry.getAttribute("position"),this.distribution=null}build(){let e=this.positionAttribute,t=new Float32Array(e.count/3);for(let i=0;i<e.count;i+=3){let r=1;xd.a.fromBufferAttribute(e,i),xd.b.fromBufferAttribute(e,i+1),xd.c.fromBufferAttribute(e,i+2),r*=xd.getArea(),t[i/3]=r}this.distribution=new Float32Array(e.count/3);let i=0;for(let e=0;e<t.length;e++)i+=t[e],this.distribution[e]=i;return this}setRandomGenerator(e){return this.randomFunction=e,this}sample(e,t){if(this.distribution){let i=this.distribution[this.distribution.length-1],r=this.binarySearch(this.randomFunction()*i);return this.sampleFace(r,e,t)}}binarySearch(e){if(!this.distribution)return 0;let t=this.distribution,i=0,r=t.length-1,s=-1;for(;i<=r;){let a=Math.ceil((i+r)/2);if(0===a||t[a-1]<=e&&t[a]>e){s=a;break}e<t[a]?r=a-1:i=a+1}return s}sampleFace(e,t,i){let r=this.randomFunction(),s=this.randomFunction();return r+s>1&&(r=1-r,s=1-s),xd.a.fromBufferAttribute(this.positionAttribute,3*e),xd.b.fromBufferAttribute(this.positionAttribute,3*e+1),xd.c.fromBufferAttribute(this.positionAttribute,3*e+2),t.set(0,0,0).addScaledVector(xd.a,r).addScaledVector(xd.b,s).addScaledVector(xd.c,1-(r+s)),xd.getNormal(i),this}},xp=tw(tA()),xf=new iX,xm=new iX,xg=new iX;(xc||(xc={})).is=function(e){return e&&e.__isSPEObject};var xv=e=>class extends e{constructor(){super(...arguments),this.previousModelViewMatrix=new iX,this.copyPreviousMatrix=!0,this.hiddenMatrix=new iX,this.matrixWorldRigid=new iX,this.shearScale=new iX,this.shearScaleInv=new iX}get __isSPEObject(){return!0}isDescendantOf(e){e instanceof rl&&(e=e.uuid);let t=this;for(;t.parent;){if(t.parent.uuid===e)return!0;t=t.parent}return!1}updateMatrixWorld(e){for(let t of(this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)&&(null===this.parent?this.matrixWorld.multiplyMatrices(this.hiddenMatrix,this.matrix):(this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.hiddenMatrix),this.matrixWorld.multiplyMatrices(this.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,e=!0),this.children))t.updateMatrixWorld(e)}updateWorldMatrix(e,t){let i=this.parent;if(e&&null!==i&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),null===this.parent?this.matrixWorld.multiplyMatrices(this.hiddenMatrix,this.matrix):(this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.hiddenMatrix),this.matrixWorld.multiplyMatrices(this.matrixWorld,this.matrix)),t)for(let e of this.children)e.updateWorldMatrix(!1,!0)}traverseChildren(e,t=0){for(let i of this.children)xc.is(i)&&i.traverseObject(e,t+1)}traverseObject(e,t=0){if(!0!==e(this,t))for(let i of this.children)xc.is(i)&&i.traverseObject(e,t+1)}updateMatrixWorldSVD(){let e=this.matrixWorld.elements,t=[[e[0],e[4],e[8]],[e[1],e[5],e[9]],[e[2],e[6],e[10]]],{u:i,v:r,q:s}=(0,xp.SVD)(t),a=xf.set(i[0][0],i[0][1],i[0][2],0,i[1][0],i[1][1],i[1][2],0,i[2][0],i[2][1],i[2][2],0,0,0,0,1),o=xm.set(r[0][0],r[0][1],r[0][2],0,r[1][0],r[1][1],r[1][2],0,r[2][0],r[2][1],r[2][2],0,0,0,0,1),l=xg.copy(o).transpose();this.shearScale.makeScale(s[0],s[1],s[2]).multiply(l).premultiply(o),this.shearScaleInv.copy(this.shearScale).invert(),this.matrixWorldRigid.multiplyMatrices(a,l).copyPosition(this.matrixWorld),s.every(e=>.01>Math.abs(s[0]-e))?this.hasNonUniformScale=!1:this.hasNonUniformScale=!0}attach(e,t){this.updateWorldMatrix(!0,!1);let i=new iX().copy(this.matrixWorld).invert();return null!==e.parent&&(e.parent.updateWorldMatrix(!0,!1),i.multiply(e.parent.matrixWorld)),"hiddenMatrix"in e&&e.hiddenMatrix instanceof iX?e.hiddenMatrix.premultiply(i):e.applyM
3139atrix4(i),e.updateWorldMatrix(!1,!1),this.add(e),void 0!==t&&(this.children.pop(),this.children.splice(t,0,e)),this}copy(e,t=!1){return super.copy(e,t),this.hasNonUniformScale=e.hasNonUniformScale,this}onAfterRender(e,t,i,r,s,a){this.copyPreviousMatrix&&this.previousModelViewMatrix.copy(this.modelViewMatrix)}},xy=class extends xv(rl){},xx=e=>"Mesh"===e.type,xb=class extends xy{constructor(e){super(),this.object=e,this.matrixAutoUpdate=!1,this.hasNonUniformScale=e.hasNonUniformScale}raycast(e,t){}expand(){let e=0,t=this.object.entityChildren(e);for(;t;){let i=this.children[e];i?.object!==t&&(i&&this.remove(i),i=new xb(t),this.add(i),this.children.splice(e,0,this.children.pop()),i.matrixWorldNeedsUpdate=!0,i.matrixAutoUpdate=!1,i.matrix=t.matrix,i.hiddenMatrix=t.hiddenMatrix),i.expand(),e+=1,t=this.object.entityChildren(e)}for(;this.children.length>e;)this.remove(this.children[e])}get visible(){return void 0!==this.playModeVisible?this.playModeVisible:this.object.visible||this.object.dataPatched.visible&&this.object.dataPatched.cloner?.hideBase===!0}set visible(e){}get castShadow(){return this.object.castShadow}set castShadow(e){}get receiveShadow(){return this.object.receiveShadow}set receiveShadow(e){}get isMesh(){return xx(this.object)}get isLight(){return this.object.isLight}get layers(){return this.object.layers}set layers(e){}get isCamera(){return!1}get geometry(){if(this.object.geometry)return this.object.geometry}get material(){if(this.object.material)return this.object.material}},xw=new iv,xS=new iv,x_=new iX,xA=[new iv(-1,1,1),new iv(-1,-1,1),new iv(1,-1,1),new iv(1,1,1),new iv(-1,1,-1),new iv(-1,-1,-1),new iv(1,-1,-1),new iv(1,1,-1)],xM=[[0,3],[1,2],[5,6],[4,7],[0,1],[3,2],[7,6],[4,5],[0,4],[1,5],[2,6],[3,7]],xE=[[0,2],[7,5],[4,1],[3,6],[4,3],[1,6]],xC=(e,t,i)=>{e.updateEntityBoxSize(xw,xS),x_.copy(t).multiply(e.matrixWorld),0===xS.x&&0===xS.y&&0===xS.z?i.push(new iv(xw.x,xw.y,xw.z).applyMatrix4(x_)):xA.forEach(e=>{i.push(e.clone().multiply(xS).add(xw).applyMatrix4(x_))})},xT=class extends ib{constructor(){super(...arguments),this.matrix=new iX,this.vertices=[],this.faces=[],this.edges=[],this.centerEdges=[]}copy(e){return super.copy(e),this.matrix.copy(e.matrix),this.vertices=e.vertices.map(e=>e.clone()),this.faces=e.faces.map(e=>e.clone()),this.edges=e.edges.map(e=>e.clone()),this.centerEdges=e.centerEdges.map(e=>e.clone()),this}setFromObjectSize(e,t=!1){e.updateWorldMatrix(!1,t),this.makeEmpty(),this.matrix.copy(e.matrixWorld);let i=new iX().copy(e.matrixWorld).invert();return this.expandByObjectSize(e,i,t)}expandByObjectSize(e,t,i=!1){let r=[];return!0===i?e.traverseEntity(e=>{if(e.visible||e.cloner&&e.data.visible){if(!("geometry"in e)){r.push(new iv);return}xC(e,t,r)}}):xC(e,t,r),this.setFromPoints(r)}getCenter(e){return(e=super.getCenter(e)).applyMatrix4(this.matrix),e}getPositionToCenter(e){return(e=super.getCenter(e)).applyMatrix4(x_.copy(this.matrix).setPosition(0,0,0)),e}computeVertices(){this.getSize(xS).multiplyScalar(.5),this.getCenter(xw),x_.copy(this.matrix).setPosition(xw),this.vertices=xA.map(e=>e.clone().multiply(xS).applyMatrix4(x_))}computeEdges(){this.vertices.length>0&&this.computeVertices(),this.edges=xM.map(([e,t])=>new lk(this.vertices[e],this.vertices[t])),this.centerEdges=this.edges.map(e=>e.getCenter(new iv))}computeFaces(){this.vertices.length>0&&this.computeVertices(),this.faces=xE.map(([e,t])=>this.vertices[e].clone().add(this.vertices[t]).multiplyScalar(.5))}},xP={Cloner:()=>{},changeEntityProptotype:()=>{},createEntity:()=>{}},xD=class extends os{constructor(){super()}getPoints(e=12){let t=[],i,r=this.getCurveLengths(),s=r[r.length-1]/r.length;for(let a=0,o=this.curves;a<o.length;a++){let l=o[a],h=Math.ceil(e*(0===a?r[a]:r[a]-r[a-1])/s),c=l.getPoints(h);for(let e=0;e<c.length;e++){let r=c[e];i&&i.equals(r)||(t.push(r),i=r)}}return this.autoClose&&t.length>1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}};function xI(e,t,i){return .001>=t.clone().sub(e).cross(t.clone().sub(i)).length()}function xO(e,t){let i=new iv(...e.position),r=new iv(...e.controlNext.position),s=new iv(...t.controlPrevious.position),a=new iv(...t.position);return xI(i,r,a)&&xI(i,s,a)}function xR(e){let t=e.points.map(e=>new iv(...e.data.position)),i=[e.points[0]],r=new iv(...i[0].data.position);for(let s=0;s<e.points.length-1;s++)xI(r,t[s],t[s+1])||(i.push(e.points[s]),r=t[s]);i.push(e.points[e.points.length-1]);let s=e.isClosed,a=i.length-(s?0:1),o=i.length,l=[];for(let t=0;t<o;t++){let r=i[t].data,a=new iv(...r.position),h=new iv(...r.controlPrevious.position),c=new iv(...r.controlNext.position),d={position:a,baseRoundness:r.roundness,controlPrevious:h,controlNext:c};if(0===r.roundness||!e.isClosed&&(0===t||t===o-1)){l[t]={...d,removedLength:0};continue}let u=s&&0==t?o-1:t-1,p=s&&t==o-1?0:t+1,f=i[u].data,m=i[p].data,g=new iv(...f.position),v=new iv(...m.position),y=g.clone().sub(a).normalize(),x=v.clone().sub(a).normalize();Object.assign(d,{prevDir:y,nextDir:x});let b=xO(f,r),w=xO(r,m);if(b&&w){let e=y.clone().add(x).normalize(),i=e.clone().cross(y).length()/y.dot(e);l[t]={...d,tan:i,removedLength:r.roundness/i}}else l[t]={...d,removedLength:0}}for(let e=0;e<a;e++){let t=e,i=s&&e===o-1?0:e+1,r=l[t],a=l[i];if(0!==r.removedLength||0!==a.removedLength){let e=r.position.distanceTo(a.position);r.removedLength=Math.min(r.removedLength,e/2),a.removedLength=Math.min(a.removedLength,e/2)}}let h=[];for(let e=0;e<a;e++){let t=e,r=s&&e===o-1?0:e+1,a=l[t],c=l[r],d=null;if(xO(i[t].data,i[r].data)){let e=a.position.clone(),t=c.position.clone();(0!==a.removedLength||0!==c.removedLength)&&(a.nextDir&&e.add(a.nextDir.clone().setLength(a.removedLength)),c.prevDir&&t.add(c.prevDir.clone().setLength(c.removedLength))),e.distanceTo(t)>.001&&(d=new n8(e,e.clone().lerp(t,.3),t.clone().lerp(e,.3),t))}else a.position.distanceTo(c.position)>.001&&(d=new n8(a.position,a.controlNext,c.controlPrevious,c.position));h[2*e+1]=d}for(let e=0;e<o;e++){let t=l[e];if(0===t.removedLength){h[2*e]=null;continue}let i=t.position,r=t.prevDir.clone().multiplyScalar(t.removedLength).add(i),s=t.nextDir.clone().multiplyScalar(t.removedLength).add(i),a=t.tan*t.removedLength,o=t.prevDir.clone().add(t.nextDir).normalize(),c=r.clone().lerp(s,.5),d=r.distanceTo(s)/2,u=o.clone().multiplyScalar(Math.sqrt(Math.pow(a,2)-Math.pow(d,2))).add(c),p=o.clone().multiplyScalar(-a).add(u),f=i.distanceTo(p)/i.distanceTo(c),m=t.prevDir.clone().multiplyScalar(f*i.distanceTo(r)).add(i),g=m.clone().lerp(p,2),v=r.clone().lerp(m,4/3),y=s.clone().lerp(g,4/3);h[2*e]=new n8(r,v,y,s)}let c=new xD;
3139return h.forEach(e=>{e&&c.add(e)}),c}(wQ||(wQ={})).is=function(e){return e&&e.__isEntity};var xL=e=>wQ.is(e),xB={type:"completeState",isfromEntity:!0},xz=["x","y","z"],xF=new iv,xN=new iv().set(0,1,0),xk=e=>class extends xv(e){constructor(){super(...arguments),this.raycastLock=!1,this.scaleLock=!1,this.disposed=!1,this.stateSelection=null,this.destroyedInAction=!1,this.instances=[],this.prevState=null,this.currentState=null,this.reversibleToState=null,this.currentTransitionEvent=null,this.previousAction=null,this._singleBBox=new xT,this._recursiveBBox=new xT,this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0,this._needApplyPathSnapping=!0,this.attachedPaths=new Set}get __isEntity(){return!0}entityChildren(e){let t=this.children[e];if(wQ.is(t))return t}entityChildrenCount(){let e=this.children.length;for(;e--;)if(wQ.is(this.children[e]))return e+1;return 0}get isConcreteEntity(){return"string"==typeof this.identity}get isVirtualEntity(){return"string"!=typeof this.identity}get isInstanceRoot(){return this.isConcreteEntity&&"Instance"===this.data.type}nearestInstanceSelfOrParent(){let e=this;for(;"Instance"!==e.data.type;){let t=e.parent;if(!wQ.is(t))return;e=t}return e}forInstancesRec(e){this.instances.forEach(t=>{t.disposed||e(t),t.forInstancesRec(e)})}super_Entity(e,t){"string"==typeof e&&(this.uuid=e),this.identity=e,this.data=t,this.matrixAutoUpdate=!1,this.dataPatched=this.data}changeSelectedState(e,t,i=!1){if(!(0===this.data.states.length&&!i)){for(let e of this.data.states)ya.toOps(this.data,e.data).forEach(e=>{let i=pJ.replaceProps(e,this.data);this.dataPatched=this.data,this.updateByPatchedOp(i,this.data,t)});if(null!==e){let i=this.data.states.data(e);i&&(this.dataPatched=ya.patch(this.data,i),ya.toOps(this.data,i).forEach(e=>{this.updateByPatchedOp(e,this.dataPatched,t)}))}i&&this.updateTransformState(this.dataPatched,t),this.stateSelection=e,this.updatePathSnapping(this.dataPatched.pathSnapping)}}get singleBBox(){return this.singleBBoxNeedsUpdate&&(this.singleBBoxNeedsUpdate=!1,this._singleBBox.setFromObjectSize(this,!1),this._singleBBox.computeVertices(),this._singleBBox.computeEdges(),this._singleBBox.computeFaces()),this._singleBBox}get recursiveBBox(){return this.recursiveBBoxNeedsUpdate&&(this.recursiveBBoxNeedsUpdate=!1,this._recursiveBBox.setFromObjectSize(this,!0),this._recursiveBBox.computeVertices(),this._recursiveBBox.computeEdges(),this._recursiveBBox.computeFaces()),this._recursiveBBox}updateEntityBoxSize(e,t){e.setScalar(0),t.setScalar(0)}resetBBoxNeedsUpdateSelf(){this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0}resetBBoxNeedsUpdate(){this.resetBBoxNeedsUpdateSelf(),this.traverseAncestors(e=>{xL(e)&&e.resetBBoxNeedsUpdateSelf()}),this.traverseEntity(e=>{e.resetBBoxNeedsUpdateSelf()})}find(e){let t;return this.traverseEntity(i=>{i.uuid===e&&(t=i)}),t}traverseSortNextHelper(){let e=this.parent;if(e){let t=e.children,i=t.indexOf(this)+1;if(wQ.is(t[i]))return t[i];if(wQ.is(e))return e.traverseSortNextHelper()}}sortNext(){let e=this.children;return this.children.length>0&&wQ.is(this.children[0])?e[0]:this.traverseSortNextHelper()}goUp(e){let t=this;for(;e>0&&null!==t;)t=t.parent,e-=1;return t}hasAnccestorOrSelf(e){return this===e||this.hasAnccestor(e)}hasAnccestor(e){let t=this.parent;for(;t;){if(e===t)return!0;t=t.parent}return!1}countToAccestor(e){let t=0,i=this;for(;i!==e;){if(null===i)return -1;i=i.parent,t+=1}return t}forEachEntity(e){for(let t of this.children)xL(t)&&e(t)}traverseEntityAncestors(e){this.traverseAncestors(t=>{wQ.is(t)&&e(t)})}traverseConcreteEntity(e,t=0){if(!0!==e(this,t))for(let i of this.children)xL(i)&&i.isConcreteEntity&&i.traverseEntity(e,t+1)}traverseEntity(e,t=0){if(!0!==e(this,t))for(let i of this.children)xL(i)&&i.traverseEntity(e,t+1)}traverseVisibleEntity(e){for(let t of(e(this),this.children))xL(t)&&t.visible&&t.traverseVisibleEntity(e)}updateMatrix(){super.updateMatrix(),this.cloner&&this.cloner.onObjUpdateMatrix(),this.dispatchEvent({type:"updateMatrix"})}updateMatrixWorld(e){super.updateMatrixWorld(e),this.dispatchEvent({type:"updateMatrixWorld"})}copy(e,t=!1){return super.copy(e,t),this.dataPatched=e.dataPatched,this.raycastLock=e.raycastLock,this.scaleLock=e.scaleLock,this.hiddenMatrix.copy(e.hiddenMatrix),this}hasEntityChild(){return this.children.some(e=>xL(e))}isAncestorOf(e){if(this.uuid===e)return!1;let t=!1;return this.traverseEntity(i=>{i.uuid===e&&(t=!0)}),t}toObjectTransformState(e=[]){return this.updateWorldMatrix(!0,!1),uN({position:this.position.toArray(),rotation:[this.rotation.x*tY.RAD2DEG,this.rotation.y*tY.RAD2DEG,this.rotation.z*tY.RAD2DEG],scale:this.scale.toArray(),hiddenMatrix:this.hiddenMatrix.toArray()},e)}getTransformValues(e,t,i){return t[e].map((t,r)=>i?.shared.getVariable(t,[this.uuid,e,xz[r]])??t)}updateTransformState(e,t){let i=!1;return e.position&&(this.position.fromArray(this.getTransformValues("position",e,t)),i=!0),e.rotation&&(xF.fromArray(this.getTransformValues("rotation",e,t)).multiplyScalar(tY.DEG2RAD),this.rotation.setFromVector3(xF),i=!0),e.scale&&(this.scale.fromArray(this.getTransformValues("scale",e,t)),i=!0),void 0!==e.hiddenMatrix&&(i=!0,this.hiddenMatrix.fromArray(e.hiddenMatrix??gr.identity)),i&&(this.updateMatrix(),this.resetBBoxNeedsUpdate(),this.invalidateClonerTransform(this),this.traverseEntityAncestors(e=>
3139{e.invalidateClonerTransform(this)})),e.position&&e.rotation&&e.scale&&void 0!==e.hiddenMatrix&&this.updateWorldMatrix(!1,!0),i}onVariableUpdate(e=!1){if(e){this.resetBBoxNeedsUpdate();return}this.updateMatrix(),this.resetBBoxNeedsUpdate(),this.invalidateClonerTransform(this),this.traverseEntityAncestors(e=>{e.invalidateClonerTransform(this)})}dispose(){this.disposed=!0,this.cloner&&(this.cloner.removeFromParent(),this.cloner=void 0)}disposeChildrenRecursively(){for(let e of this.children)wQ.is(e)&&e.disposeRecursively()}disposeRecursively(){this.dispose(),this.children.forEach(e=>{wQ.is(e)&&e.disposeRecursively()})}toState(e=[]){return uN({name:this.name,visible:this.visible,raycastLock:this.raycastLock,...this.toObjectTransformState(e)},e)}updateByObjUpdateOp(e,t){void 0!==e&&this.updateByOp({type:0,props:e,path:[]},{...this.data,...e},t,!1)}updateByOp(e,t,i,r){let s=this.data;this.data=t;let a=e,o=pX(e.path,["states","*"]);if(null!==o){if(0===e.type){let[t]=o;if(this?.stateSelection===t){let t={...e.props};if(delete t.name,Object.values(e.props).some(e=>void 0===e)){let i=this.data;if(void 0!==i){let r=p1.zoom(i,e.path.slice(2));if(r)for(let i in e.props)void 0===e.props[i]&&i in r&&(t[i]=r[i])}}a={...e,props:t,path:e.path.slice(2)}}}}else if(0===e.type){let t=this.stateSelection?this.data.states.data(this.stateSelection):void 0;if(void 0!==t){if(void 0!==e.props.name&&t.name){let{name:e,...i}=t;t=i}if(void 0!==e.props.material&&"material"in t){let{material:e,...i}=t;t=i}let i=p1.removeOverridden(e.path,e.props,t);a={...e,props:i}}}if(this.updateByPatchedOpBase(a,ya.patch(this.data,this.stateSelection?this.data.states.data(this.stateSelection):void 0),i),pX(e.path,["overrides"])){let r=[],s=[...e.path];for(r.push(s[1]),s.splice(0,2);s.length>0&&"descendants"===s[0];)r.push(s[1]),s.splice(0,2);if(void 0===r[r.length-1]){if(0===e.type)for(let t of Object.keys(e.props)){r[r.length-1]=t;let s=i.scene.findInstance([this.uuid,...r]);s&&(s.overrideData=e.props[t],s.updateState(p_.apply(s.component.data,s.overrideData),i))}}else{let a=i.scene.findInstance([this.uuid,...r]);if(a){let o=p1.zoom(a.component.data,s);if(0===(e={...e,path:s}).type){let t=e.props;if(o)for(let[i,r]of Object.entries(e.props))void 0===r&&(t===e.props&&(t={...e.props}),t[i]=o[i]);e={...e,props:t}}a.overrideData=yt.resolve(t.overrides,r),a.updateByOp(e,p$.applySimple(a.data,e),i,!1)}}}else if(this.instances.length>0){let r;if(0===e.path.length&&0===e.type){let t;for(let i of yi.rootOverrideProps)i in e.props&&(void 0===t&&(t={}),t[i]=e.props[i]);t&&(r={...e,props:t})}else for(let t of yi.rootOverrideProps)if(pX(e.path,[t])){r=e;break}void 0!==r&&this.instances.forEach(e=>{if(e.isInstanceRoot){let t=p_.filterOp(e.overrideData,r);t&&e.updateByOp(t,p$.applySimple(e.data,t),i,!0)}}),this.instances.forEach(r=>{if(!r.isInstanceRoot){let a=p_.filterOp(r.overrideData,e);if(a){let o;o=s===r.data&&e===a?t:p$.applySimple(r.data,a),r.updateByOp(a,o,i,!0)}}})}}updateByPatchedOpBase(e,t,i){if(this.dataPatched=t,0===e.path.length&&0===e.type)void 0===e.props.type||gc.is(e.props.type)||xP.changeEntityProptotype(this,t,i);else if(1===e.path.length&&"geometry"===e.path[0]&&0===e.type&&"type"in e.props)for(let e of(xP.changeEntityProptotype(this,t,i),this.children))wQ.is(e)&&e.updateVisible(i.scene);this.updateByPatchedOp(e,t,i)}updateByPatchedOp(e,t,i){if(0===e.path.length&&0===e.type?this.updateState(e.props,i):0===e.type&&("resolutionLevel"in e.props||"useChildrenColors"in e.props)&&this.updateState(t,i),"morphTargetInfluences"===e.path[0]&&0===e.type){let r=t.morphTargetInfluences.get(e.path[1])?.data.name;r&&this.updateMorphInfluences(r,i.shared.getVariable(e.props.value,[this.uuid,"morphTargetInfluences",r]))}if(null!==pX(e.path,["pathSnapping"])&&this.updatePathSnapping(t.pathSnapping),null!==pX(e.path,["cloner"])){let r=p$.drop(e,1);0===r.path.length&&0===r.type&&!0===r.props.disabled?this.setFromClonerState(null,i):this.cloner?this.cloner.updateState(t.cloner,i.scene):(this.setFromClonerState(t.cloner,i),this.expandCloner(i.scene)),this.updateVisible(i.scene)}}updatePathSnapping(e=this.dataPatched.pathSnapping){this._updatedPathSnapping=e,this._needApplyPathSnapping=!0}get updatedPathSnapping(){return this._updatedPathSnapping}applyPathSnapping(e){let t=this._updatedPathSnapping?.pathId??this.dataPatched.pathSnapping.pathId,i=this._updatedPathSnapping?.slide??this.dataPatched.pathSnapping.slide??0,r=this._updatedPathSnapping?.offset??this.dataPatched.pathSnapping.offset??0,s=this._updatedPathSnapping?.orientation??this.dataPatched.pathSnapping.orientation;if(null===t)return;let a=e.find(t);if(!a||!1===this._needApplyPathSnapping)return;this._needApplyPathSnapping=!1;let o=a.data;if(o.geometry.path.points.length<=1)return;let l=xR(o.geometry.path),h=(i+r)%1;i+r===1&&0===h&&(h=1);let c=null;try{c=l.curves.length?l.getPointAt(h):null}catch(e){}if(null===c)return;let d=this.parent?this.parent?.matrixWorld:new iX;a.updateMatrixWorld();let u=new iX().multiplyMatrices(d.clone().invert(),a.matrixWorld);c.applyMatrix4(u);let p={position:c.toArray(),rotation:o.rotation};if("tangential"===s){let e=new iX().extractRotation(a.matrixWorld),t=l.getTangentAt(h).applyMatrix4(e).add(c),i=new iX().lookAt(c,t,xN),r=xF.setFromEuler(new i3().setFromRotationMatrix(i)).multiplyScalar(tY.RAD2DEG);p={...p,rotation:r.toArray()}}this.updateTransformState(p),this.traverseEntity(e=>{e._cameraType&&e.dispatchEvent(xB)})}updateVisible(e){if(this.visible=this.dataPatched.visible&&(!this.dataPatched.cloner||(this.dataPatched.cloner.disabled??!1)||this.dataPatched.cloner?.hideBase!==!0),!e)return;let t=!1;this.traverseEntity(e=>{if("Splat"===e.data.type)return t=!0,!0}),t&&e.reloadSplats()}updateState_Entity(e,t){void 0!==e.name&&(this.name=e.name),void 0!==e.raycastLock&&(this.raycastLock=e.raycastLock),void 0!==e.visible&&(this.updateVisible(t?.scene),this.resetBBoxNeedsUpdate()),t&&"cloner"in e&&void 0!==e.cloner&&(this.setFromClonerState(e.cloner,t),this.updateVisible(t.scene)),this.updateTransformState(e,t)}get attachedSurfaceCloners(){return this.children.filter(e=>e instanceof xP.Cloner&&"toObject"===e.parameters.type)}setFromClonerState(e,t){this.disposed||(null===e||e.disabled?(this.cloner&&this.cloner.removeFromParent(),this.cloner=void 0):void 0===this.cloner?(this.cloner=new xP.Cloner(this,e),t.scene.addPendingExpandCloner(this)):this.cloner.updateState(e,t.scene))}expandCloner(e){!this.disposed&&this.cloner&&this.cloner.expandClones(e)}invalidateClonerTransform(e){this.cloner&&this.cloner.invalidateTransform(e)}requestRender(){this.dispatchEvent({type:"requestRender"})}},xU=class{static create(e){return this.build(this.normalizeInputs(e))}
3139static normalizeInputs(e,t){let i=e.parameters?.radiusTop,r=e.parameters?.radiusBottom,s=Object.assign({},t?.parameters??{width:100,radialSegments:64,heightSegments:1,openEnded:!1,thetaStart:0,thetaLength:360,cornerRadius:8,cornerSegments:8,hollow:0},e.parameters);s.thetaLength=tY.clamp(s.thetaLength,0,360);let a=s.width/2,o=s.radiusTop??a,l=s.radiusBottom??a;if(o===l?(o=a,l=a):o>l?(o=a,l=l*a/o):(o=o*a/l,l=a),s.shapeBlendNode){let e=2*Math.max(o=i??a,l=r??a);s.width=e,s.depth=e}return{parameters:Object.assign(s,{width:Math.abs(s.width),height:Math.abs(s.height??s.width),depth:Math.abs(s.depth??s.width),radiusTop:o,radiusBottom:l})}}static build(e){let{width:t,depth:i,height:r,radialSegments:s,heightSegments:a,openEnded:o,thetaStart:l,thetaLength:h,radiusTop:c,radiusBottom:d,cornerRadius:u,cornerSegments:p,hollow:f}=e.parameters,m;return 0===h?(m=new rz).setAttribute("position",new rT([],3)):m=u||f?new xG(c,d,r,s,a,o,l,h*Math.PI/180,u,u,p,f):new oo(c,d,r,s,a,o,l,h*Math.PI/180),m.scale(1,1,i/t),Object.assign(m,{userData:{...e,type:"CylinderGeometry"}})}};function xV(e,t,i){i.x=e.x*t.x,i.y=e.y,i.z=e.x*t.y}function xj(e){return new tQ(e.y,-e.x)}var xG=class extends rz{constructor(e,t,i,r,s,a,o,l,h,c,d,u,p=!1){super(),this.type="RoundedCylinderBufferGeometry",e=void 0!==e?e:1,t=void 0!==t?t:1,i=i||1,r=Math.floor(r)||8,s=Math.floor(s)||1,a=void 0!==a&&a,o=void 0!==o?o:0,l=void 0!==l?l:2*Math.PI,a&&(h=0,c=0);let f=[],m=[],g=[],v=[],y=0,x=i/2,b=new iv,w=new iv;p&&0==e&&(e=h),p&&0==t&&(t=c);let S=new tQ(e,x),_=new tQ(t,-x),A=null,M=null,E=null,C=null,T=S.clone().sub(_),P=0,D=0,I=0;u>0&&(P=Math.min(e,t)*(1-u),D=e-P,I=t-P);let O=S.clone();O.x-=P;let R=Math.PI-T.angle(),L=T.angle(),B=Math.tan(L/2),z=Math.tan(R/2),F=B+z;if(h=Math.min(h,(e-D)/(u?F:z),T.length()/F),c=Math.min(c,(t-I)/(u?F:B),T.length()/F),h>0){let e=h/B;A=S.clone().sub(new tQ(e,h)),u&&(E=A.clone(),E.x-=P-F*h),S.sub(T.clone().setLength(e))}if(c>0){let e=c/z;M=_.clone().sub(new tQ(e,-c)),_.add(T.clone().setLength(e)),u&&(C=M.clone(),C.x-=P-F*c,O.sub(T.clone().setLength(e)))}let N=.5>(T=S.clone().sub(_)).length(),k=[];for(let d=0;d<=r;d++){let p=[],f=d/r,x=f*l+o,S=new tQ(Math.sin(x),Math.cos(x));if(C&&M?(U(p,f,S,R,c,C,-1,!0),U(p,f,S,L,c,M,-1,!1)):M?(V(p,S,M.x,0,-1),U(p,f,S,L,c,M,-1,!1)):a||V(p,S,t,I,-1),xV(xj(T).normalize(),S,b),!N)for(let e=0;e<=s;e++){let t=e/s;xV(T.clone().multiplyScalar(t).add(_),S,w),m.push(w.x,w.y,w.z),g.push(b.x,b.y,b.z),v.push(f,.5+w.y/i),p.push(y++)}if(E&&A?(U(p,f,S,R,h,A,1,!1),U(p,f,S,L,h,E,1,!0)):A?(U(p,f,S,R,h,A,1,!1),V(p,S,A.x,0,1)):a||V(p,S,e,D,1),u&&!N){xV(xj(T).multiplyScalar(-1).normalize(),S,b);for(let e=0;e<=s;e++){let t=e/s;xV(T.clone().multiplyScalar(-t).add(O),S,w),m.push(w.x,w.y,w.z),g.push(b.x,b.y,b.z),v.push(f,.5+w.y/i),p.push(y++)}}u&&!a&&p.push(p[0]),k.push(p)}for(let e=0;e<k.length-1;e++)for(let t=0;t<k[0].length-1;t++){if(a&&u&&t==s)continue;let i=k[e][t],r=k[e+1][t],o=k[e+1][t+1],l=k[e][t+1],h=m[3*o+0],c=m[3*o+2];f.push(i,r,l),(0!=h||0!=c)&&f.push(r,o,l)}function U(e,t,r,s,a,o,l,h){for(let c=0;c<d+1;c++){let u=c/d,p=l<0?u:1-u;h&&(p-=1);let f=new tQ(Math.sin(p*=s),Math.cos(p)*l);xV(f.clone().multiplyScalar(a).add(o),r,w),m.push(w.x,w.y,w.z),xV(f,r,b),g.push(b.x,b.y,b.z),v.push(t,.5+w.y/i),e.push(y++)}}function V(e,t,i,r,s){let a=new iv,o=new tQ,l=[i,r];for(let i of(s<0&&l.reverse(),l))o.set(i,x*s),xV(o,t,a),m.push(a.x,a.y,a.z),g.push(0,s,0),v.push(.5,.5),e.push(y++)}function j(i,r,s){let a=new tQ(Math.sin(s),Math.cos(s)),o=new tQ(-Math.cos(s),Math.sin(s)),l=new iv,h=i<0?(e,t,i)=>f.push(e,t,i):(e,t,i)=>f.push(e,i,t);xV(new tQ((e+t+D+I)/4,0),a,l),m.push(l.x,l.y,l.z),g.push(o.x,0,o.y),v.push(.5,.5);let c=y++;for(let e of r){let t=m.slice(3*e,3*e+3);m.push(...t),g.push(o.x,0,o.y);let i=v.slice(2*e,2*e+2);v.push(...i),y++}for(let e=c+1;e<y-1;e++)h(c,e,e+1);h(c,y-1,c+1)}l<2*Math.PI&&(j(-1,k[0],o),j(1,k[k.length-1],o+l)),this.setIndex(f),this.setAttribute("position",new rT(m,3)),this.setAttribute("normal",new rT(g,3)),this.setAttribute("uv",new rT(v,2))}},xH=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,radialSegments:32,heightSegments:8,openEnded:!1,thetaStart:0,thetaLength:360,cornerRadiusTop:8,cornerRadiusBottom:8,cornerSegments:8},e.parameters);return i.thetaLength=tY.clamp(i.thetaLength,0,360),{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,depth:i,height:r,radialSegments:s,heightSegments:a,openEnded:o,thetaStart:l,thetaLength:h,cornerRadiusTop:c,cornerRadiusBottom:d,cornerSegments:u}=e.parameters,p;return 0===h?(p=new rz).setAttribute("position",new rT([],3)):p=c>0||d>0||h<360?new xG(0,t/2,r,s,a,o,l,h*Math.PI/180,c,d,u,0,!0):new ol(t/2,r,s,a,o),p.scale(1,1,i/t),Object.assign(p,{userData:{...e,type:"ConeGeometry"}})}},xW=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,widthSegments:1,heightSegments:1,depthSegments:1,cornerRadius:8,cornerSegments:8},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,height:i,depth:r,widthSegments:s,heightSegments:a,depthSegments:o,cornerRadius:l,cornerSegments:h}=e.parameters;return Object.assign(0===l?new rJ(t,i,r,s,a,o):new xX(t,i,r,s,a,o,l,h),{userData:{...e,type:"CubeGeometry"}})}},xq=Math.PI/2,xX=class extends rz{constructor(e=1,t=1,i=1,r=1,s=1,a=1,o=0,l=4){super(),this.type="BoxGeometry",r=Math.floor(r),s=Math.floor(s),a=Math.floor(a),l=Math.floor(l),o=Math.min(o,e/2,t/2,i/2);let h=[],c=[],d=[],u=[],p=0;function f(e,t,i,r,s,a,l,f,m,g){let v=(a-2*o)/m,y=(l-2*o)/g,x=a/2-o,b=l/2-o,w=f/2,S=m+1,_=g+1,A=0,M=new iv;for(let a=0;a<_;a++){let o=a*y-b;for(let l=0;l<S;l++){let h=l*v-x;
3139M[e]=h*r,M[t]=o*s,M[i]=w,c.push(M.x,M.y,M.z),M[e]=0,M[t]=0,M[i]=f>0?1:-1,d.push(M.x,M.y,M.z),u.push(l/m),u.push(1-a/g),A+=1}}for(let e=0;e<g;e++)for(let t=0;t<m;t++){let i=p+t+S*e,r=p+t+S*(e+1),s=p+(t+1)+S*(e+1),a=p+(t+1)+S*e;h.push(i,r,a),h.push(r,s,a)}p+=A}function m(e,t,i,r,s,a,f,m,g,v){let y=(f-2*o)/v,x=f/2-o,b=m/2-o,w=g/2,S=v+1,_=0,A=new iv,M=new iv;for(let h=0;h<l+1;h++){let p=h/l*xq,f=Math.sin(p)*o,m=(1-Math.cos(p))*o,g=Math.sin(p),E=Math.cos(p);A[t]=(b+f)*s,A[i]=(w-m)*a,M[e]=0,M[t]=g*Math.sign(A[t]),M[i]=E*Math.sign(A[i]);for(let t=0;t<S;t++){let i=t*y-x;A[e]=i*r,c.push(A.x,A.y,A.z),d.push(M.x,M.y,M.z),u.push(t/v),u.push(0),_+=1}}for(let e=0;e<l;e++)for(let t=0;t<v;t++){let i=p+t+S*e,r=p+t+S*(e+1),s=p+(t+1)+S*(e+1),a=p+(t+1)+S*e;h.push(i,r,a),h.push(r,s,a)}p+=_}function g(r,s,a){let f=new iv,m=new iv(e/2,t/2,i/2);m.subScalar(o);let g=[],v=r*s*a>0?(e,t,i)=>h.push(e,t,i):(e,t,i)=>h.push(e,i,t);for(let e=0;e<=l;e++){let t=[],i=xq*(1-e/l),h=Math.cos(i),v=Math.sin(i),y=0;for(let i=0;i<=e;i++){let i=Math.cos(y),l=Math.sin(y);f.x=h*i,f.y=v,f.z=h*l;let g=m.clone().addScaledVector(f,o);c.push(r*g.x,s*g.y,a*g.z),d.push(r*f.x,s*f.y,a*f.z),u.push(0,0),t.push(p++),y+=xq/e}g.push(t)}let y=g.length-1;for(let e=0;e<y;e++){let t=g[e],i=g[e+1],r=t.length-1;v(t[0],i[1],i[0]);for(let e=1;e<=r;e++)v(t[e-1],t[e],i[e]),v(t[e],i[e+1],i[e])}}f("z","y","x",-1,-1,i,t,e,a,s),f("z","y","x",1,-1,i,t,-e,a,s),f("x","z","y",1,1,e,i,t,r,a),f("x","z","y",1,-1,e,i,-t,r,a),f("x","y","z",1,-1,e,t,i,r,s),f("x","y","z",-1,-1,e,t,-i,r,s),o>0&&(m("z","y","x",-1,-1,1,i,t,e,a),m("z","y","x",1,-1,-1,i,t,e,a),m("z","y","x",-1,1,-1,i,t,e,a),m("z","y","x",1,1,1,i,t,e,a),m("x","y","z",-1,-1,-1,e,t,i,r),m("x","y","z",1,-1,1,e,t,i,r),m("x","y","z",-1,1,1,e,t,i,r),m("x","y","z",1,1,-1,e,t,i,r),m("y","x","z",-1,-1,1,t,e,i,s),m("y","x","z",1,-1,-1,t,e,i,s),m("y","x","z",1,1,1,t,e,i,s),m("y","x","z",-1,1,-1,t,e,i,s),g(1,1,1),g(-1,1,1),g(1,-1,1),g(-1,-1,1),g(1,1,-1),g(-1,1,-1),g(1,-1,-1),g(-1,-1,-1)),this.setIndex(h),this.setAttribute("position",new rT(c,3)),this.setAttribute("normal",new rT(d,3)),this.setAttribute("uv",new rT(u,2))}},xY=class extends rz{constructor(e=[],t=[],i="",r=1,s=.2,a=4){super(),this.type="PolyhedronGeometryRound";let o=[],l=[],h=[];(function(){0==(s=Math.min(1-1e-5,s))&&(a=0);let l={IcosahedronGeometry:5,DodecahedronGeometry:3,HexahedronGeometry:3,OctahedronGeometry:4,TetrahedronGeometry:3}[i],c=new iv,d=c.clone(),u=new rx,p=s*r,f=r-p,m=a+1,g=new iv,v=(e,t)=>g.subVectors(e,t).normalize(),y=(e,t)=>Array(e).fill(void 0).map(t),x=y(e.length/3,(t,i)=>new iv().fromArray(e,3*i).setLength(r)),b=[];for(let e=0;e<x.length;e++){let i=x[e],r=[],s,a,o,l=1e10,h=-1;for(;-1!=(h=t.indexOf(e,h+1));){let e=h-h%3;s=t[e+(h+1)%3],a=t[e+(h+2)%3],l=Math.min(l,o=i.distanceToSquared(x[s])),r.push([s,a,o])}l+=1e-6;let c=[],d=0,u=r.length;for(let t=0;t<u;t++){[s,a,o]=r[d];let t=b[s]?.includes(e)==!0;o<=l&&c.push(s+1e6*+t),d=r.findIndex(e=>e[0]==a)}b.push(c)}let w=[];{let e=0,t=0,i,r,s=3==l;for(let o=0;o<=a;o++){i=o*(o+1)/2,r=(o+1)*(o+2)/2;for(let l=0;l<a-o;l++)[e,t]=[i+l+o+2,r+l+o+3],w.push(i,r,...s?[t,i]:[e,r],t,e),[i,r]=[e,t];w.push(i,r,i+a+2)}}let S=c.clone(),_=c.clone(),A=c.clone(),M=c.clone(),E=c.clone(),C=[],T=y(x.length,()=>y(l,()=>c.clone()));for(let e=0;e<x.length;e++){c.copy(x[e]).normalize(),S.copy(c).multiplyScalar(f);let t=b[e];for(let i=0;i<t.length;i++){let r=t[i],s=t[(i+1)%l];u.setFromPointsAndIndices(x,e,r%1e6,s%1e6),u.b.sub(u.a).setLength(1e10).add(u.a),u.c.sub(u.a).setLength(1e10).add(u.a),u.closestPointToPoint(S,T[e][i])}let i=[],r=[],s=[],y=new iv;0==a&&[...T[e]].reduce((e,t)=>e.add(t),y).multiplyScalar(1/l);for(let t=0;t<l;t++){let o=[],h=(t-1+l)%l,u=T[e][h],x=T[e][t];c.copy(u).sub(S),d.copy(x).sub(S);let b=S.angleTo(c),w=c.angleTo(d),C=Math.cos(b)*p;0==a?_.copy(y):_.copy(S).setLength(f+C),r.push(C);let P=[_,u,x];for(let e=0;e<2;e++){let t=P[e],r=P[e+1];M.subVectors(t,S),E.subVectors(r,S),A.crossVectors(M,E).normalize();for(let r=0;r<m;r++){let s=[b,w][e]*r/m;c.copy(M).applyAxisAngle(A,s).add(S),i.push(c.clone()),e&&(v(c,S),o.push([0==r?t:c.clone(),g.clone()]))}e&&(v(r,S),o.push([r,g.clone()]))}s.push(o)}C.push(s);let P=2*m;for(let e=0;e<l;e++){let t=P*e,s=(e+1)%l*P,a=[i[t]];for(let o=1;o<m;o++){M=i[t+o],E=i[s+o],a.push(M);for(let t=1,i=o-2+1;t<=i;t++)c.lerpVectors(M,E,t/(i+1)),c.sub(S).setLength(r[e]).add(S),a.push(c.clone());a.push(E)}for(let e=0;e<m;e++)a.push(i[e+m+t]);a.push(i[s+m]);let d=w.map(e=>a[e]);o.push(...d.map(e=>[e.x,e.y,e.z]).flat()),h.push(...d.map(e=>(v(e,S),[g.x,g.y,g.z])).flat())}}let P=[];for(let e=0;e<b.length;e++)for(let t=0;t<l;t++){let i=b[e][t];if(i<1e6){let r=b[i].findIndex(t=>t%1e6==e),s=C[e][t],a=C[i][r];for(let e=0;e<m;e++){let t=s[e],i=a[m-e],r=s[e+1];
3139[t,i,r,r,i,a[m-(e+1)]].forEach(e=>{o.push(e[0].x,e[0].y,e[0].z),h.push(e[1].x,e[1].y,e[1].z)})}P.push(s[0][0],a[m][0],s[m][0],a[0][0])}}for(;P.length;){let e,t,i,r;[e,t]=P.splice(0,2);let s=[e];for(;e!=t;)s.push(t),r=(i=P.indexOf(t))%2,t=P.splice(i-r,2)[1-r];g.subVectors(s[0],s[1]).cross(c.subVectors(s[0],s[2])).normalize();let a=0>g.dot(s[0]);a&&g.negate();for(let e=1;e<=s.length-2;e++)[s[e+ +a],s[e+1-+a],s[0]].forEach(e=>{o.push(e.x,e.y,e.z),h.push(g.x,g.y,g.z)})}})(),function(){let e=new iv;for(let t=0;t<o.length;t+=3){e.x=o[t+0],e.y=o[t+1],e.z=o[t+2];let i=u(e)/2/Math.PI+.5,r=Math.atan2(-e.y,Math.sqrt(e.x*e.x+e.z*e.z))/Math.PI+.5;l.push(i,1-r)}let t=new iv,i=new iv,r=new iv,s=new iv,a=new tQ,h=new tQ,c=new tQ,d=(e,t,i,r)=>{r<0&&1===e.x&&(l[t]=e.x-1),0===i.x&&0===i.z&&(l[t]=r/2/Math.PI+.5)};for(let e=0,p=0;e<o.length;e+=9,p+=6){t.set(o[e+0],o[e+1],o[e+2]),i.set(o[e+3],o[e+4],o[e+5]),r.set(o[e+6],o[e+7],o[e+8]),a.set(l[p+0],l[p+1]),h.set(l[p+2],l[p+3]),c.set(l[p+4],l[p+5]),s.copy(t).add(i).add(r).divideScalar(3);let f=u(s);d(a,p+0,t,f),d(h,p+2,i,f),d(c,p+4,r,f)}for(let e=0;e<l.length;e+=6){let t=l[e+0],i=l[e+2],r=l[e+4],s=Math.max(t,i,r),a=Math.min(t,i,r);s>
vendor: 1,347 bytes, line 3139
3139.9&&a<.1&&(t<.2&&(l[e+0]+=1),i<.2&&(l[e+2]+=1),r<.2&&(l[e+4]+=1))}function u(e){return Math.atan2(e.z,-e.x)}}(),this.setAttribute("position",new rT(o,3)),this.setAttribute("normal",new rT(h,3)),this.setAttribute("uv",new rT(l,2))}static fromJSON(e){return new xY(e.vertices,e.indices,e.radius,e.corner,e.cornerSides)}},xQ=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,detail:0,corner:0,cornerSides:4},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,height:i,depth:r,detail:s,corner:a,cornerSides:o}=e.parameters,l=0===s&&0!==a?new xK(.5*t,a,o):new oc(.5*t,s);return l.scale(1,i/t,r/t),Object.assign(l,{userData:{...e,type:"DodecahedronGeometry"}})}},xK=class extends xY{constructor(e=1,t=.2,i=4){let r=(1+Math.sqrt(5))/2,s=1/r,a="DodecahedronGeometry";super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-s,-r,0,-s,r,0,s,-r,0,s,r,-s,-r,0,-s,r,0,s,-r,0,s,r,0,-r,0,-s,r,0,-s,-r,0,s,r,0,s],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,
vendor: 4,241 bytes, line 3139
313919,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,e,t,i),this.type=a}static fromJSON(e){return new xK(e.radius,e.corner,e.cornerSides)}},xZ=class{constructor(e){this.position=new tQ,this.startPosition=new tQ,this.uuid=tY.generateUUID(),this.position=e.clone()}start(){this.reset()}reset(){this.startPosition.copy(this.position)}applyOffset(e){this.position.copy(this.startPosition).add(e)}copy(e){return this.position.copy(e.position),this.startPosition.copy(e.startPosition),this}clone(){return new xZ(this.position).copy(this)}toJSON(){return[this.position.x,this.position.y]}},xJ=class extends xZ{constructor(e){super(e.position),this.parent=e}copy(e){return super.copy(e),this}clone(){return new xJ(this.parent).copy(this)}},x$=class extends xZ{constructor(e,t){super(t),this.controls=[],this.roundness=0,this.areControlsDirectionsMirrored=!0,this.uuid=e,this.controls.push(new xJ(this),new xJ(this))}static create(e,t){let i=new x$(e,new tQ(...t.position));return i.controls[0].position.set(...t.controlPrevious.position),i.controls[1].position.set(...t.controlNext.position),i.roundness=t.roundness,i.areControlsDirectionsMirrored=t.areControlsDirectionsMirrored,i}getOppositeControl(e){let t=this.controls.indexOf(e);return 0===t?this.controls[1]:1===t?this.controls[0]:null}applyOffsetToControls(e,t=1){for(let i=0,r=this.controls.length;i<r;i++){let r=this.controls[i];this.position.distanceTo(r.position)<=t?r.position.copy(this.position):r.applyOffset(e)}}controlsMoved(){return!(this.position.equals(this.controls[0].position)&&this.position.equals(this.controls[1].position))}copy(e){return super.copy(e),this.controls[0].copy(e.controls[0]),this.controls[1].copy(e.controls[1]),this.roundness=e.roundness,this.uuid=e.uuid,this}clone(){return new x$(this.uuid,this.position).copy(this)}toJSON(){return super.toJSON().concat(this.controls[0].toJSON(),this.controls[1].toJSON(),[this.roundness])}computeTangents(){return[this.curveBefore?.getTangentAt(1),this.curveAfter?.getTangentAt(0)]}computeNormals(e=new tQ,t=new tQ){let[i,r]=this.computeTangents();return i&&r&&(x0(i,e),x0(r,t)),[e,t]}computeTangent(e=new tQ){let[t,i]=this.computeTangents();return t&&i&&e.copy(t).add(i).normalize(),e}computeNormal(e=new tQ){let[t,i]=this.computeNormals();return e.copy(t).add(i).normalize(),e}};function x0(e,t=new tQ){let i=e.length();return t.set(-e.y/i,e.x/i)}var x1=e=>e,x2=new tQ,x3=new tQ,x4=new tQ,x5=new tQ,x6=new tQ,x8=new tQ,x9=new iv,x7=new iv;function be(e,t,i=Number.EPSILON){return Math.abs(e-t)<i}function bt(e,t,i){let r=Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)),s=Math.sqrt(Math.pow(t.x-i.x,2)+Math.pow(t.y-i.y,2)),a=Math.sqrt(Math.pow(i.x-e.x,2)+Math.pow(i.y-e.y,2));return Math.acos((s*s+r*r-a*a)/(2*s*r))}function bi(e,t,i){return 0===x2.copy(t).sub(e).cross(x3.copy(i).sub(e))}function br(e,t){return e.position.equals(e.controls[1].position)&&t.position.equals(t.controls[0].position)}function bs(e,t){return bi(e.position,e.controls[1].position,t.position)&&bi(e.position,t.controls[0].position,t.position)}function ba(e,t=12,i=!1){let r=[];for(let s=0,a=e.length;s<a;s++){let a=e[s],o=0;if(i&&void 0!==a.roundedCurveCorner){let e=.5*bn(a.roundedCurveCorner,t);s>0&&(r[s-1]+=e),o+=e}void 0!==a.curveAfter&&(o+=bn(a.curveAfter,t)),r.push(o)}return e.length>0&&i&&void 0!==e[0].roundedCurveCorner&&(r[e.length-1]+=.5*bn(e[0].roundedCurveCorner,t)),r}function bn(e,t=12){return e&&e instanceof nQ?2*t:e&&(e instanceof n9||e instanceof n7)?1:e&&e instanceof oi?t*e.points.length:t}var bo=new tQ,bl=new tQ,bh=new tQ,bc=new tQ,bd=new tQ,bu=new tQ,bp=class extends od{constructor(e=100,t=100){super(),this.points=[],this.shapeHoles=[],this.plane=new ss(new iv(0,0,-1)),this.subdivision=0,this.controlSnapDistance=4,this.pointIDs=0,this.isMesh2D=!1,this.isText=!1,this._roundness=0,this.isClosed=!1,this.useCubicForRoundedCorners=!0,this.uuid=tY.generateUUID(),this.needsUpdate=!1,this.roundedCurves=[],this._width=e,this._height=t}static createFromState(e,t,i){let r=new bp;return r.isClosed=e.isClosed,r.points=e.points.map(e=>x$.create(e.id,e.data)),"number"==typeof e.roundness&&(r.roundness=e.roundness),r.shapeHoles=e.shapeHoles.map(e=>bp.createFromState(e)),void 0!==t&&void 0!==i&&r.applySize(t,i),r.update(
3139),r}get width(){return this._width}get height(){return this._height}get roundness(){return this._roundness}set roundness(e){if(this._roundness!==e){this._roundness=e;for(let t=0,i=this.points.length;t<i;t++)this.points[t].roundness=e;this.needsUpdate=!0}}getPointsIndexesByIds(e){return e.map(e=>this.getPointIndexById(e)).filter(e=>e>=0)}getPointIndexById(e){let t=this.points.length,i=this.points.findIndex(t=>t.uuid===e);if(i<0){let i=t;for(let t=0,r=this.shapeHoles.length;t<r;t++){let r=this.shapeHoles[t],s=r.points.length,a=r.getPointIndexById(e);if(!(a<0))return a+i;i+=s}}return i}getLineIndexById(e){return this.getPointIndexById(e)}getBezierPoint(e){if(e<=this.points.length-1)return this.points[e];if(this.shapeHoles.length>0){let t=this.points.length;for(let i=0,r=this.shapeHoles.length;i<r;i++){let r=this.shapeHoles[i],s=e-t;if(s<=r.points.length-1)return r.points[s];t+=r.points.length}}throw Error("This shape does not have a point for this index: "+e)}getBezierPointIndex(e){let t=this.points.indexOf(e);if(t>=0)return t;if(t=this.points.length,this.shapeHoles.length>0)for(let i=0,r=this.shapeHoles.length;i<r;i++){let r=this.shapeHoles[i],s=r.points.indexOf(e);if(s>=0)return t+s;t+=r.points.length}return -1}getAllPoints(){let e=[].concat(...this.shapeHoles.map(e=>e.points));return[...this.points,...e]}applySize(e,t){0===e&&(e=.001),0===t&&(t=.001),this._width=e,this._height=t}applyScale(e,t){let i=bo.set(e,t);for(let e=0,t=this.points.length;e<t;e++){let t=this.points[e];t.position.multiply(i),t.controls[0].position.multiply(i),t.controls[1].position.multiply(i)}for(let i=0,r=this.shapeHoles.length;i<r;i++)this.shapeHoles[i].applyScale(e,t);this._update()}createPoint(e,t=0,i=tY.generateUUID()){let r=new x$(i,e instanceof tQ?e:new tQ(e,t));return r.roundness=this.roundness,r}addPoint(e){this.points.push(e),this.needsUpdate=!0}addPointAt(e,t){this.points.splice(t,0,e),this.needsUpdate=!0}getPointByUuid(e){for(let t=0,i=this.points.length;t<i;t++){let i=this.points[t];if(i.uuid===e)return i}for(let t=0,i=this.shapeHoles.length;t<i;t++){let i=this.shapeHoles[t].getPointByUuid(e);if(i)return i}}getFirstPoint(){return this.points[0]}getLastPoint(){return this.points[this.points.length-1]}removePoint(e){let t=this.points.indexOf(e);t>=0&&this.points.splice(t,1),this.needsUpdate=!0}removePointById(e){let t=this.points.find(t=>t.uuid===e);t&&this.removePoint(t)}update(){for(let e=0,t=this.shapeHoles.length;e<t;e++)this.shapeHoles[e].update();this._update()}extractShapePointsToBuffer(e,t=12,i=!1){this.subdivision=t,void 0===this.curveDivisions&&this.computeCurveDivisions(t);let r=i?this.roundedCurveDivisions:this.curveDivisions;return function(e,t,i=12,r=!0){let s=x7.set(0,0,0),a,o=0,l=[];for(let r=0;r<t.length;r++){let h=x1(t[r]),c=bn(h,i);l.push(c);for(let t=0;t<=c;t++)if(h instanceof n6||h instanceof oe||h instanceof n9){if(h.getPoint(t/c,x2),s.set(x2.x,x2.y,0),void 0!==a&&function(e,t,i=Number.EPSILON){return e.distanceTo(t)<i}(a,s))continue;void 0===a&&(a=x9),a.copy(s),e.setXYZ(o,s.x,s.y,s.z),o++}}r&&o>1&&!(e.getX(o-1)===e.getX(0)&&e.getY(o-1)===e.getY(0)&&e.getZ(o-1)===e.getZ(0))&&(e.setXYZ(o,e.getX(0),e.getY(0),e.getZ(0)),o++)}(e,i?this.roundedCurves:this.curves,t,this.autoClose),r.reduce((e,t)=>e+t,0)+1}computeCurveDivisions(e=12){return this.curveDivisions=ba(this.points,e,!1),this.roundedCurveDivisions=ba(this.points,e,!0),this.curveDivisions}extractFilteredShapePointsToBuffer(e,t,i=12){return 2*(function(e,t,i,r=12,s=!0){let a=x7.set(0,0,0),o=0,l=[];for(let s=0;s<t.length;s++){if(!1===i[s])continue;let h,c=x1(t[s]),d=bn(c,r);l.push(d);for(let t=0;t<=d;t++)if(c instanceof n6||c instanceof oe||c instanceof n9){if(c.getPoint(t/d,x2),a.set(x2.x,x2.y,0),h?.equals(a))continue;void 0===h?h=x9:(e.setXYZ(o,h.x,h.y,h.z),o++,e.setXYZ(o,a.x,a.y,a.z),o++),h.copy(a)}}return s&&o>1&&!(e.getX(o-1)===e.getX(0)&&e.getY(o-1)===e.getY(0)&&e.getZ(o-1)===e.getZ(0))&&(e.setXYZ(o,e.getX(0),e.getY(0),e.getZ(0)),o++),l})(e,this.curves,t,i,this.autoClose).reduce((e,t)=>e+t,0)}extractShapePointsToFlatArray(e,t=12){return this.subdivision=t,void 0===this.curveDivisions&&this.computeCurveDivisions(t),function(e,t,i=12,r=!0){let s,a=0;for(let r=0;r<t.length;r++){let o=x1(t[r]),l=bn(o,i);for(let t=0;t<=l;t++)if(o instanceof n6||o instanceof oe||o instanceof n9){if(o.getPoint(t/l,x2),void 0!==s&&function(e,t,i=Number.EPSILON){return e.distanceTo(t)<i}(s,x2,1e-12))continue;void 0===s&&(s=x3),s.copy(x2),e.push(x2.x,x2.y),a++}}return be(e[0],e[e.length-2],1e-12)&&be(e[1],e[e.length-1],1e-12)&&(e.pop(),e.pop()),r&&a>1&&!(be(e[a-1],e[1],1e-12)&&be(e[a-2],e[0],1e-12))&&(e.push(e[0],e[1]),a++),e}(e,this.roundedCurves,t,this.autoClose)}getCurveIndexFromVertexId(e,t=!1){let i=0;void 0===this.curveDivisions&&this.computeCurveDivisions(this.subdivision);let r=t?this.roundedCurveDivisions:this.curveDivisions,s=0;
vendor: 12,183 bytes, line 3139
3139t&&void 0!==this.points[0].roundedCurveCorner&&(s=.5*bn(this.points[0].roundedCurveCorner,this.subdivision));let a=e-s;a<0&&(a+=r.reduce((e,t)=>e+t,0));for(let e=0,t=r.length;e<t;e++){let t=r[e];if(a<i+t)return[e,(a-i+1)/t];i+=t}return[0,1]}getCurveT(e,t,i){let r=this.points[e],s=this.points[e>=this.points.length-1?0:e+1],a=this.curveDivisions,o=a[e];if(br(r,s)){let e=r.position.distanceTo(s.position);return r.position.distanceTo(bo.set(i.x,i.y))/e}let l=0;for(let t=0;t<e;t++)l+=a[t];return(t-l)/o}dispose(){}_applyCurveForPoint(e,t){br(t,e)?this.lineTo(e.position.x,e.position.y):this.bezierCurveTo(t.controls[1].position.x,t.controls[1].position.y,e.controls[0].position.x,e.controls[0].position.y,e.position.x,e.position.y);let i=this.curves[this.curves.length-1];e.curveBefore=i,t.curveAfter=i;let r=i.clone();e.roundedCurveBefore=r,t.roundedCurveAfter=r,e.roundedCurveCorner=void 0,this.roundedCurves.push(r)}_update(){if(this.curves=[],this.roundedCurves=[],!this.points.length)return;for(let e=0,t=this.points.length;e<t;e++){let t=this.points[e];if(0===e)this.moveTo(t.position.x,t.position.y);else{let i=this.points[e-1];this._applyCurveForPoint(t,i)}}let e=this.getLastPoint();if(e?.curveAfter&&(e.curveAfter=void 0),this.isClosed){let e=this.points[0],t=this.points[this.points.length-1];this._applyCurveForPoint(e,t)}if(this.points.length>2){let e=0;for(let i=0,r=this.points.length;i<r;i++){var t;let r=this.points[i],s=this.points[i-1]??this.points[this.points.length-1],a=this.points[i+1]??this.points[0],o=r.roundness,l=s&&a&&bs(s,r)&&bs(r,a)&&bi(s.position,r.position,a.position);if(!r.controlsMoved()&&o>0&&!l){let s,a=r.curveBefore,l=r.curveAfter;if(void 0===a||void 0===l)continue;let h=r.roundedCurveBefore,c=r.roundedCurveAfter,d=a.getLength(),u=l.getLength(),p=Math.min(Math.min(o,.499*d),Math.min(o,.499*u)),f=1-p/d,m=p/u,g=a.getPointAt(f,bo),v=l.getPointAt(m,bl);if(this._subSplitCurve(a,h,f,g,void 0),this._subSplitCurve(l,c,m,void 0,v),this.useCubicForRoundedCorners){let e=Math.tan(bt(g,r.position,v)/2)*g.distanceTo(r.position),[i,a]=function(e,t,i,r,s){let a=Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)),o=(e.y+t.y)/2,l=(e.x+t.x)/2,h=Math.sqrt(Math.pow(i,2)-Math.pow(a/2,2))*(e.y-t.y)/a,c=Math.sqrt(Math.pow(i,2)-Math.pow(a/2,2))*(t.x-e.x)/a;return r.set(l+h,o+c),s.set(l-h,o-c),[r,s]}(g,v,e,bh,bc),[o,l]=function(e,t,i,r,s,a){let o=t.x-e.x,l=t.y-e.y,h=i.x-e.x,c=i.y-e.y,d=Math.sqrt((o+h)*(o+h)+(l+c)*(l+c)),u;return bt(t,e,i)>Math.PI&&(d*=-1),u=be(c,l)?(l+c)*(r/d-.5)*8/3/(o-h):(o+h)*(r/d-.5)*8/3/(c-l),s.set(t.x-u*l,t.y+u*o),a.set(i.x+u*c,i.y-u*h),[s,a]}((t=r.position,i.distanceTo(t)<a.distanceTo(t)?a:i),g,v,e,bd,bu);s=new n6(g.clone(),o.clone(),l.clone(),v.clone())}else s=new oe(g.clone(),r.position.clone(),v.clone());r.roundedCurveCorner=s,this.roundedCurves.splice(i+e,0,s),e++}}}}_subSplitCurve(e,t,i,r,s){if(e instanceof n9)void 0!==r&&t.v2.copy(r),void 0!==s&&t.v1.copy(s);else{let a=e.getUtoTmapping(i,0),o=function(e,t,i,r,s=.5){let a=x2.subVectors(t,e).multiplyScalar(s).add(e),o=x3.subVectors(i,t).multiplyScalar(s).add(t),l=x4.subVectors(r,i).multiplyScalar(s).add(i),h=x5.subVectors(o,a).multiplyScalar(s).add(a),c=x6.subVectors(l,o).multiplyScalar(s).add(o),d=x8.subVectors(c,h).multiplyScalar(s).add(h);return[e.x,e.y,a.x,a.y,h.x,h.y,d.x,d.y,c.x,c.y,l.x,l.y,r.x,r.y]}(e.v0,e.v1,e.v2,e.v3,a);return void 0!==r&&(t.v0.set(o[0],o[1]),t.v1.set(o[2],o[3]),t.v2.set(o[4],o[5]),t.v3.set(o[6],o[7])),void 0!==s&&(t.v0.set(o[6],o[7]),t.v1.set(o[8],o[9]),t.v2.set(o[10],o[11]),t.v3.set(o[12],o[13])),t}return t}clone(){let e=new bp(this._width,this._height);return e.points=this.points.map(e=>e.clone()),e.isClosed=this.isClosed,e.roundness=this.roundness,e.isMesh2D=this.isMesh2D,e.shapeHoles=this.shapeHoles.map(e=>e.clone()),e}toJSON(){return{points:this.points.reduce((e,t)=>e.concat(t.toJSON()),[]),shapeHoles:this.shapeHoles.map(e=>e.toJSON()),isClosed:this.isClosed,roundness:this.roundness}}fromJSON(e){this.points=[],this.pointIDs=0;let t=e.points.length/7;for(let i=0;i<t;i++){let t=7*i,r=e.points[t+0],s=e.points[t+1],a=e.points[t+2],o=e.points[t+3],l=e.points[t+4],h=e.points[t+5],c=e.points[t+6],d=new x$(tY.generateUUID(),new tQ(r,s));d.controls[0].position.set(a,o),d.controls[1].position.set(l,h),d.roundness=c,this.points.push(d)}return this.shapeHoles=e.shapeHoles?.length?e.shapeHoles.map(e=>{let t=new bp;return t.fromJSON(e),t}):[],this.isClosed=e.isClosed,this._roundness=e.roundness,this._update(),this}fromShape(e,t=!1){this.isText=t;let i=(e,t)=>{t instanceof n6&&t.v3.equals(e.position)&&e.controls[0].position.copy(t.v2)};return this.points=(e=>{let t=[],r,s;for(r=0,s=e.length;r<s;r++)e[r]instanceof oe&&(e[r]=function(e){let t=new tQ;t.addVectors(e.v0,x2.subVectors(e.v1,e.v0).multiplyScalar(2/3));let i=new tQ;return i.addVectors(e.v2,x3.subVectors(e.v1,e.v2).multiplyScalar(2/3)),new n6(e.v0,t,i,e.v2)}(e[r]));for(r=0,s=e.length;r<s;r++){let s=e[r],a=r>0?e[r-1]:null,o;s instanceof n6?(o=this.createPoint(s.v0)).controls[1].position.copy(s.v1):s instanceof n9&&(o=this.createPoint(s.v1)),void 0!==o&&(null!==a&&i(o,a),t.push(o))}let a=e[e.length-1],o=!1;return a instanceof n6?a.v3.equals(t[0].position)&&(t[0].controls[0].position.copy(a.v2),o=!0):a instanceof n9&&a.v2.equals(t[0].position)&&(o=!0),this.isClosed=o,t})(e.curves),e instanceof od&&(this.shapeHoles=e.holes.map(e=>{let t=new bp;return t.fromShape(e),t})),this.update(),this}updatePoint(e,t){let i=this.getPointByUuid(e);i&&(void 0!==t.position&&i.position.fromArray(t.position),void 0!==t.roundness&&(i.roundness=t.roundness),void 0!==t.areControlsDirectionsMirrored&&(i.areControlsDirectionsMirrored=t.areControlsDirectionsMirrored),this.needsUpdate=!0)}updatePreviousControl(e,t){let i=this.getPointByUuid(e)?.controls[0];i&&(t.position&&i.position.fromArray(t.position),this.needsUpdate=!0)}updateNextControl(e,t){let i=this.getPointByUuid(e)?.controls[1];i&&(t.position&&i.position.fromArray(t.position),this.needsUpdate=!0)}},bf=2*Math.PI;function bm({x:e,y:t},i,r,s,a){return{x:e*i+s,y:t*r+a}}function bg(e,t,i,r){let s=Math.min(1,Math.max(-1,e*i+t*r));return(e*r-t*i<0?-1:1)*Math.acos(s)}function bv(e,t){if(!e)throw t||"Assertion Failed!"}(wX=wK||(wK={}))[wX.ODD=0]="ODD",wX[wX.NONZERO=1]="NONZERO",wX[wX.POSITIVE=2]="POSITIVE",wX[wX.NEGATIVE=3]="NEGATIVE",wX[wX.ABS_GEQ_TWO=4]="ABS_GEQ_TWO",(wY=wZ||(wZ={}))[wY.POLYGONS=0]="POLYGONS",wY[wY.CONNECTED_POLYGONS=1]="CONNECTED_POLYGONS",wY[wY.BOUNDARY_CONTOURS=2]="BOUNDARY_CONTOURS";var by=function(){function e(){}return e.vertEq=function(e,t){return e.s===t.s&&e.t===t.t},e.vertLeq=function(e,t){return e.s<t.s||e.s===t.s&&e.t<=t.t},e.transLeq=function(e,t){return e.t<t.t||e.t===t.t&&e.s<=t.s},e.edgeGoesLeft=function(t){return e.vertLeq(t.Dst,t.Org)},e.edgeGoesRight=function(t){return e.vertLeq(t.Org,t.Dst)},e.vertL1dist=function(e,t){return Math.abs(e.s-t.s)+Math.abs(e.t-t.t)},e.edgeEval=function(t,i,r){bv(e.vertLeq(t,i)&&e.vertLeq(i,r));var s=i.s-t.s,a=r.s-i.s;return s+a>0?s<a?i.t-t.t+(t.t-r.t)*(s/(s+a)):i.t-r.t+(r.t-t.t)*(a/(s+a)):0},e.edgeSign=function(t,i,r){bv(e.vertLeq(t,i)&&e.vertLeq(i,r));var s=i.s-t.s,a=r.s-i.s;return s+a>0?(i.t-r.t)*s+(i.t-t.t)*a:0},e.transEval=function(t,i,r){bv(e.transLeq(t,i)&&e.transLeq(i,r));var s=i.t-t.t,a=r.t-i.t;return s+a>0?s<a?i.s-t.s+(t.s-r.s)*(s/(s+a)):i.s-r.s+(r.s-t.s)*(a/(s+a)):0},e.transSign=function(t,i,r){bv(e.transLeq(t,i)&&e.transLeq(i,r));var s=i.t-t.t,a=r.t-i.t;return s+a>0?(i.s-r.s)*s+(i.s-t.s)*a:0},e.vertCCW=function(e,t,i){return e.s*(t.t-i.t)+t.s*(i.t-e.t)+i.s*(e.t-t.t)>=0},e.interpolate=function(e,t,i,r){return(e=e<0?0:e)<=(i=i<0?0:i)?0===i?(t+r)/2:t+e/(e+i)*(r-t):r+i/(e+i)*(t-r)},e.intersect=function(t,i,r,s,a){var o,l,h;e.vertLeq(t,i)||(h=t,t=i,i=h),e.vertLeq(r,s)||(h=r,r=s,s=h),e.vertLeq(t,r)||(h=t,t=r,r=h,h=i,i=s,s=h),e.vertLeq(r,i)?e.vertLeq(i,s)?((o=e.edgeEval(t,r,i))+(l=e.edgeEval(r,i,s))<0&&(o=-o,l=-l),a.s=e.interpolate(o,r.s,l,i.s)):((o=e.edgeSign(t,r,i))+(l=-e.edgeSign(t,s,i))<0&&(o=-o,l=-l),a.s=e.interpolate(o,r.s,l,s.s)):a.s=(r.s+i.s)/2,e.transLeq(t,i)||(h=t,t=i,i=h),e.transLeq(r,s)||(h=r,r=s,s=h),e.transLeq(t,r)||(h=t,t=r,r=h,h=i,i=s,s=h),e.transLeq(r,i)?e.transLeq(i,s)?((o=e.transEval(t,r,i))+(l=e.transEval(r,i,s))<0&&(o=-o,l=-l),a.t=e.interpolate(o,r.t,l,i.t)):((o=e.transSign(t,r,i))+(l=-e.transSign(t,s,i))<0&&(o=-o,l=-l),a.t=e.interpolate(o,r.t,l,s.t)):a.t=(r.t+i.t)/2},e}(),bx=function(){this.next=null,this.prev=null,this.anEdge=null,this.trail=null,this.n=0,this.marked=!1,this.inside=!1},bb=function(){function e(e){this.side=e,this.next=null,this.Org=null,this.Sym=null,this.Onext=null,this.Lnext=null,this.Lface=null,this.activeRegion=null,this.winding=0}return Object.defineProperty(e.prototype,"Rface",{get:function(){return this.Sym.Lface},set:function(e){this.Sym.Lface=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Dst",{get:function(){return this.Sym.Org},set:function(e){this.Sym.Org=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Oprev",{get:function(){return this.Sym.Lnext},set:function(e){this.Sym.Lnext=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Lprev",{get:function(){return this.Onext.Sym},set:function(e){this.Onext.Sym=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Dprev",{get:function(){return this.Lnext.Sym},set:function(e){this.Lnext.Sym=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Rprev",{get:function(){return this.Sym.Onext},set:function(e){this.Sym.Onext=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Dnext",{get:function(){return this.Sym.Onext.Sym},set:function(e){this.Sym.Onext.Sym=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Rnext",{get:function(){return this.Sym.Lnext.Sym},set:function(e){this.Sym.Lnext.Sym=e},enumerable:!0,configurable:!0}),e}(),bw=function(){this.next=null,this.prev=null,this.anEdge=null,this.coords=[0,0,0],this.s=0,this.t=0,this.pqHandle=0,this.n=0,this.idx=0},bS=function(){function e(){var e=new bw,t=new bx,i=new bb(0),r=new bb(1);e.next=e.prev=e,e.anEdge=null,t.next=t.prev=t,i.next=i,i.Sym=r,r.next=r,r.Sym=i,this.vHead=e,this.fHead=t,this.eHead=i,this.eHeadSym=r}return e.prototype.makeEdge_=function(e){var t=new bb(0),i=new bb(1);e.Sym.side<e.side&&(e=e.Sym);var r=e.Sym.next;return i.next=r,r.Sym.next=t,t.next=e,e.Sym.next=i,t.Sym=i,t.Onext=t,t.Lnext=i,t.Org=null,t.Lface=null,t.winding=0,t.activeRegion=null,i.Sym=t,i.Onext=i,i.Lnext=t,i.Org=null,i.Lface=null,i.winding=0,i.activeRegion=null,t},e.prototype.splice_=function(e,t){var i=e.Onext,r=t.Onext;i.Sym.Lnext=t,r.Sym.Lnext=e,e.Onext=r,t.Onext=i},e.prototype.makeVertex_=function(e,t,i){bv(e,"Vertex can't be null!");var r=i.prev;e.prev=r,r.next=e,e.next=i,i.prev=e,e.anEdge=t;var s=t;do s.Org=e,s=s.Onext;while(s!==t)},e.prototype.makeFace_=function(e,t,i){bv(e,"Face can't be null");var r=i.prev;e.prev=r,r.next=e,e.next=i,i.prev=e,e.anEdge=t,e.trail=null,e.marked=!1,e.inside=i.inside;var s=t;do s.Lface=e,s=s.Lnext;while(s!==t)},e.prototype.killEdge_=function(e){e.Sym.side<e.side&&(e=e.Sym);var t=e.next,i=e.Sym.next;t.Sym.next=i,i.Sym.next=t},e.prototype.killVertex_=function(e,t){var i=e.anEdge,r=i;do r.Org=t,r=r.Onext;while(r!==i);var s=e.prev,a=e.next;a.prev=s,s.next=a},e.prototype.killFace_=function(e,t){var i=e.anEdge,r=i;do r.Lface=t,r=r.Lnext;while(r!==i);var s=e.prev,a=e.next;a.prev=s,s.next=a},e.prototype.makeEdge=function(){var e=new bw,t=new bw,i=new bx,r=this.makeEdge_(this.eHead);return this.makeVertex_(e,r,this.vHead),this.makeVertex_(t,r.Sym,this.vHead),this.makeFace_(i,r,this.fHead),r},e.prototype.splice=function(e,t){var i=!1,r=!1;if(e!==t){if(t.Org!==e.Org&&(r=!0,this.killVertex_(t.Org,e.Org)),t.Lface!==e.Lface&&(i=!0,this.killFace_(t.Lface,e.Lface)),this.splice_(t,e),!r){var s=new bw;this.makeVertex_(s,t,e.Org),e.Org.anEdge=e}if(!i){var a=new bx;this.makeFace_(a,t,e.Lface),e.Lface.anEdge=e}}},e.prototype.delete=function(e){var t=e.Sym,i=!1;if(e.Lface!==e.Rface&&(i=!0,this.killFace_(e.Lface,e.Rface)),e.Onext===e)this.killVertex_(e.Org,null);else if(e.Rface.anEdge=e.Oprev,e.Org.anEdge=e.Onext,this.splice_(e,e.Oprev),!i){var r=new bx;
vendor: 5,712 bytes, line 3139
3139this.makeFace_(r,e,e.Lface)}t.Onext===t?(this.killVertex_(t.Org,null),this.killFace_(t.Lface,null)):(e.Lface.anEdge=t.Oprev,t.Org.anEdge=t.Onext,this.splice_(t,t.Oprev)),this.killEdge_(e)},e.prototype.addEdgeVertex=function(e){var t=this.makeEdge_(e),i=t.Sym;this.splice_(t,e.Lnext),t.Org=e.Dst;var r=new bw;return this.makeVertex_(r,i,t.Org),t.Lface=i.Lface=e.Lface,t},e.prototype.splitEdge=function(e){var t=this.addEdgeVertex(e).Sym;return this.splice_(e.Sym,e.Sym.Oprev),this.splice_(e.Sym,t),e.Dst=t.Org,t.Dst.anEdge=t.Sym,t.Rface=e.Rface,t.winding=e.winding,t.Sym.winding=e.Sym.winding,t.idx=e.idx,t.Sym.idx=e.Sym.idx,t},e.prototype.connect=function(e,t){var i=!1,r=this.makeEdge_(e),s=r.Sym;if(t.Lface!==e.Lface&&(i=!0,this.killFace_(t.Lface,e.Lface)),this.splice_(r,e.Lnext),this.splice_(s,t),r.Org=e.Dst,s.Org=t.Org,r.Lface=s.Lface=e.Lface,e.Lface.anEdge=s,!i){var a=new bx;this.makeFace_(a,r,e.Lface)}return r},e.prototype.zapFace=function(e){var t,i,r,s,a,o=e.anEdge;i=o.Lnext;do i=(t=i).Lnext,t.Lface=null,null===t.Rface&&(t.Onext===t?this.killVertex_(t.Org,null):(t.Org.anEdge=t.Onext,this.splice_(t,t.Oprev)),(r=t.Sym).Onext===r?this.killVertex_(r.Org,null):(r.Org.anEdge=r.Onext,this.splice_(r,r.Oprev)),this.killEdge_(t));while(t!=o);s=e.prev,(a=e.next).prev=s,s.next=a},e.prototype.countFaceVerts_=function(e){var t=e.anEdge,i=0;do i++,t=t.Lnext;while(t!==e.anEdge);return i},e.prototype.mergeConvexFaces=function(e){var t,i,r,s,a;for(t=this.fHead.next;t!==this.fHead;t=t.next)if(t.inside)for(a=(i=t.anEdge).Org;r=i.Lnext,(s=i.Sym)&&s.Lface&&s.Lface.inside&&this.countFaceVerts_(t)+this.countFaceVerts_(s.Lface)-2<=e&&by.vertCCW(i.Lprev.Org,i.Org,s.Lnext.Lnext.Org)&&by.vertCCW(s.Lprev.Org,s.Org,i.Lnext.Lnext.Org)&&(r=s.Lnext,this.delete(s),i=null,s=null),!(i&&i.Lnext.Org===a);)i=r;return!0},e.prototype.check=function(){var e,t,i,r,s,a,o=this.fHead,l=this.vHead,h=this.eHead;for(t=o,t=o;(e=t.next)!==o;t=e){bv(e.prev===t),s=e.anEdge;do bv(s.Sym!==s),bv(s.Sym.Sym===s),bv(s.Lnext.Onext.Sym===s),bv(s.Onext.Sym.Lnext===s),bv(s.Lface===e),s=s.Lnext;while(s!==e.anEdge)}for(bv(e.prev===t&&null===e.anEdge),r=l,r=l;(i=r.next)!==l;r=i){bv(i.prev===r),s=i.anEdge;do bv(s.Sym!==s),bv(s.Sym.Sym===s),bv(s.Lnext.Onext.Sym===s),bv(s.Onext.Sym.Lnext===s),bv(s.Org===i),s=s.Onext;while(s!==i.anEdge)}for(bv(i.prev===r&&null===i.anEdge),a=h,a=h;(s=a.next)!==h;a=s)bv(s.Sym.next===a.Sym),bv(s.Sym!==s),bv(s.Sym.Sym===s),bv(null!==s.Org),bv(null!==s.Dst),bv(s.Lnext.Onext.Sym===s),bv(s.Onext.Sym.Lnext===s);bv(s.Sym.next===a.Sym&&s.Sym===this.eHeadSym&&s.Sym.Sym===s&&null===s.Org&&null===s.Dst&&null===s.Lface&&null===s.Rface)},e}(),b_=function(){this.handle=null},bA=function(){this.key=null,this.node=0},bM=function(){function e(e,t){this.leq=t,this.max=0,this.nodes=[],this.handles=[],this.initialized=!1,this.freeList=0,this.size=0,this.max=e,this.nodes=[],this.handles=[];for(var i=0;i<e+1;i++)this.nodes[i]=new b_,this.handles[i]=new bA;this.initialized=!1,this.nodes[1].handle=1,this.handles[1].key=null}return e.prototype.floatDown_=function(e){var t,i,r,s=this.nodes,a=this.handles;for(t=s[e].handle;;){if((r=e<<1)<this.size&&this.leq(a[s[r+1].handle].key,a[s[r].handle].key)&&++r,bv(r<=this.max),i=s[r].handle,r>this.size||this.leq(a[t].key,a[i].key)){s[e].handle=t,a[t].node=e;break}s[e].handle=i,a[i].node=e,e=r}},e.prototype.floatUp_=function(e){var t,i,r,s=this.nodes,a=this.handles;for(t=s[e].handle;;){if(i=s[r=e>>1].handle,0===r||this.leq(a[i].key,a[t].key)){s[e].handle=t,a[t].node=e;break}s[e].handle=i,a[i].node=e,e=r}},e.prototype.init=function(){for(var e=this.size;e>=1;--e)this.floatDown_(e);this.initialized=!0},e.prototype.min=function(){return this.handles[this.nodes[1].handle].key},e.prototype.insert=function(e){var t,i,r,s;if(2*(t=++this.size)>this.max){for(this.max*=2,s=this.nodes.length,this.nodes.length=this.max+1,r=s;r<this.nodes.length;r++)this.nodes[r]=new b_;for(s=this.handles.length,this.handles.length=this.max+1,r=s;r<this.handles.length;r++)this.handles[r]=new bA}return 0===this.freeList?i=t:(i=this.freeList,this.freeList=this.handles[i].node),this.nodes[t].handle=i,this.handles[i].node=t,this.handles[i].key=e,this.initialized&&this.floatUp_(t),i},e.prototype.extractMin=function(){var e=this.nodes,t=this.handles,i=e[1].handle,r=t[i].key;return this.size>0&&(e[1].handle=e[this.size].handle,t[e[1].handle].node=1,t[i].key=null,t[i].node=this.freeList,this.freeList=i,--this.size,this.size>0&&this.floatDown_(1)),r},e.prototype.delete=function(e){var t,i=this.nodes,r=this.handles;bv(e>=1&&e<=this.max&&null!==r[e].key),i[t=r[e].node].handle=i[this.size].handle,r[i[t].handle].node=t,--this.size,t<=this.size&&(t<=1||this.leq(r[i[t>>1].handle].key,r[i[t].handle].key)?this.floatDown_(t):this.floatUp_(t)),r[e].key=null,r[e].node=this.freeList,this.freeList=e},e}(),bE=function(){this.eUp=null,this.nodeUp=null,this.windingNumber=0,this.inside=!1,this.sentinel=!1,this.dirty=!1,this.fixUpperEdge=!1},bC=function(){this.key=null,this.next=null,this.prev=null},bT=function(){function e(e,t){this.frame=e,this.leq=t,this.head=new bC,this.head.next=this.head,this.head.prev=this.head}return e.prototype.min=function(){return this.head.next},e.prototype.max=function(){return this.head.prev},e.prototype.insert=function(e){return this.insertBefore(this.head,e)},e.prototype.search=function(e){var t=this.head;do t=t.next;while(null!==t.key&&!this.leq(this.frame,e,t.key));return t},e.prototype.insertBefore=function(e,t){do e=e.prev;while(null!==e.key&&!this.leq(this.frame,e.key,t));var i=new bC;return i.key=t,i.next=e.next,e.next.prev=i,i.prev=e,e.next=i,i},e.prototype.delete=function(e){e.next.prev=e.prev,e.prev.next=e.next},e}(),bP=function(){function e(){}
3139return e.regionBelow=function(e){return e.nodeUp.prev.key},e.regionAbove=function(e){return e.nodeUp.next.key},e.debugEvent=function(e){},e.addWinding=function(e,t){e.winding+=t.winding,e.Sym.winding+=t.Sym.winding},e.edgeLeq=function(e,t,i){var r=e.event,s=t.eUp,a=i.eUp;return s.Dst===r?a.Dst===r?by.vertLeq(s.Org,a.Org)?0>=by.edgeSign(a.Dst,s.Org,a.Org):by.edgeSign(s.Dst,a.Org,s.Org)>=0:0>=by.edgeSign(a.Dst,r,a.Org):a.Dst===r?by.edgeSign(s.Dst,r,s.Org)>=0:by.edgeEval(s.Dst,r,s.Org)>=by.edgeEval(a.Dst,r,a.Org)},e.deleteRegion=function(e,t){t.fixUpperEdge&&bv(0===t.eUp.winding),t.eUp.activeRegion=null,e.dict.delete(t.nodeUp)},e.fixUpperEdge=function(e,t,i){bv(t.fixUpperEdge),e.mesh.delete(t.eUp),t.fixUpperEdge=!1,t.eUp=i,i.activeRegion=t},e.topLeftRegion=function(t,i){var r,s=i.eUp.Org;do i=e.regionAbove(i);while(i.eUp.Org===s);if(i.fixUpperEdge){if(null===(r=t.mesh.connect(e.regionBelow(i).eUp.Sym,i.eUp.Lnext)))return null;e.fixUpperEdge(t,i,r),i=e.regionAbove(i)}return i},e.topRightRegion=function(t){var i=t.eUp.Dst;do t=e.regionAbove(t);while(t.eUp.Dst===i);return t},e.addRegionBelow=function(e,t,i){var r=new bE;return r.eUp=i,r.nodeUp=e.dict.insertBefore(t.nodeUp,r),r.fixUpperEdge=!1,r.sentinel=!1,r.dirty=!1,i.activeRegion=r,r},e.isWindingInside=function(e,t){switch(e.windingRule){case wK.ODD:return(1&t)!=0;case wK.NONZERO:return 0!==t;case wK.POSITIVE:return t>0;case wK.NEGATIVE:return t<0;case wK.ABS_GEQ_TWO:return t>=2||t<=-2}throw Error("Invalid winding rulle")},e.computeWinding=function(t,i){i.windingNumber=e.regionAbove(i).windingNumber+i.eUp.winding,i.inside=e.isWindingInside(t,i.windingNumber)},e.finishRegion=function(t,i){var r=i.eUp,s=r.Lface;s.inside=i.inside,s.anEdge=r,e.deleteRegion(t,i)},e.finishLeftRegions=function(t,i,r){for(var s,a=null,o=i,l=i.eUp;o!==r;){if(o.fixUpperEdge=!1,(s=(a=e.regionBelow(o)).eUp).Org!=l.Org){if(!a.fixUpperEdge){e.finishRegion(t,o);break}s=t.mesh.connect(l.Lprev,s.Sym),e.fixUpperEdge(t,a,s)}l.Onext!==s&&(t.mesh.splice(s.Oprev,s),t.mesh.splice(l,s)),e.finishRegion(t,o),l=a.eUp,o=a}return l},e.addRightEdges=function(t,i,r,s,a,o){var l,h,c,d,u=!0;c=r;do bv(by.vertLeq(c.Org,c.Dst)),e.addRegionBelow(t,i,c.Sym),c=c.Onext;while(c!==s);for(null===a&&(a=e.regionBelow(i).eUp.Rprev),h=i,d=a;(c=(l=e.regionBelow(h)).eUp.Sym).Org===d.Org;)c.Onext!==d&&(t.mesh.splice(c.Oprev,c),t.mesh.splice(d.Oprev,c)),l.windingNumber=h.windingNumber-c.winding,l.inside=e.isWindingInside(t,l.windingNumber),h.dirty=!0,!u&&e.checkForRightSplice(t,h)&&(e.addWinding(c,d),e.deleteRegion(t,h),t.mesh.delete(d)),u=!1,h=l,d=c;h.dirty=!0,bv(h.windingNumber-c.winding===l.windingNumber),o&&e.walkDirtyRegions(t,h)},e.spliceMergeVertices=function(e,t,i){e.mesh.splice(t,i)},e.vertexWeights=function(e,t,i){var r=by.vertL1dist(t,e),s=by.vertL1dist(i,e),a=.5*s/(r+s),o=.5*r/(r+s);e.coords[0]+=a*t.coords[0]+o*i.coords[0],e.coords[1]+=a*t.coords[1]+o*i.coords[1],e.coords[2]+=a*t.coords[2]+o*i.coords[2]},e.getIntersectData=function(t,i,r,s,a,o){i.coords[0]=i.coords[1]=i.coords[2]=0,i.idx=-1,e.vertexWeights(i,r,s),e.vertexWeights(i,a,o)},e.checkForRightSplice=function(t,i){var r=e.regionBelow(i),s=i.eUp,a=r.eUp;if(by.vertLeq(s.Org,a.Org)){if(by.edgeSign(a.Dst,s.Org,a.Org)>0)return!1;by.vertEq(s.Org,a.Org)?s.Org!==a.Org&&(t.pq.delete(s.Org.pqHandle),e.spliceMergeVertices(t,a.Oprev,s)):(t.mesh.splitEdge(a.Sym),t.mesh.splice(s,a.Oprev),i.dirty=r.dirty=!0)}else{if(0>by.edgeSign(s.Dst,a.Org,s.Org))return!1;e.regionAbove(i).dirty=i.dirty=!0,t.mesh.splitEdge(s.Sym),t.mesh.splice(a.Oprev,s)}return!0},e.checkForLeftSplice=function(t,i){var r,s=e.regionBelow(i),a=i.eUp,o=s.eUp;if(bv(!by.vertEq(a.Dst,o.Dst)),by.vertLeq(a.Dst,o.Dst)){if(0>by.edgeSign(a.Dst,o.Dst,a.Org))return!1;e.regionAbove(i).dirty=i.dirty=!0,r=t.mesh.splitEdge(a),t.mesh.splice(o.Sym,r),r.Lface.inside=i.inside}else{if(by.edgeSign(o.Dst,a.Dst,o.Org)>0)return!1;i.dirty=s.dirty=!0,r=t.mesh.splitEdge(o),t.mesh.splice(a.Lnext,o.Sym),r.Rface.inside=i.inside}return!0},e.checkForIntersect=function(t,i){var r,s,a=e.regionBelow(i),o=i.eUp,l=a.eUp,h=o.Org,c=l.Org,d=o.Dst,u=l.Dst,p=new bw;if(bv(!by.vertEq(u,d)),bv(0>=by.edgeSign(d,t.event,h)),bv(by.edgeSign(u,t.event,c)>=0),bv(h!==t.event&&c!==t.event),bv(!i.fixUpperEdge&&!a.fixUpperEdge),h===c||Math.min(h.t,d.t)>Math.max(c.t,u.t))return!1;if(by.vertLeq(h,c)){if(by.edgeSign(u,h,c)>0)return!1}else if(0>by.edgeSign(d,c,h))return!1;return e.debugEvent(t),by.intersect(d,h,u,c,p),bv(Math.min(h.t,d.t)<=p.t),bv(p.t<=Math.max(c.t,u.t)),bv(Math.min(u.s,d.s)<=p.s),bv(p.s<=Math.max(c.s,h.s)),by.vertLeq(p,t.event)&&(p.s=t.event.s,p.t=t.event.t),r=by.vertLeq(h,c)?h:c,by.vertLeq(r,p)&&(p.s=r.s,p.t=r.t),by.vertEq(p,h)||by.vertEq(p,c)?(e.checkForRightSplice(t,i),!1):!by.vertEq(d,t.event)&&by.edgeSign(d,t.event,p)>=0||!by.vertEq(u,t.event)&&0>=by.edgeSign(u,t.event,p)?u===t.event?(t.mesh.splitEdge(o.Sym),t.mesh.splice(l.Sym,o),i=e.topLeftRegion(t,i),o=e.regionBelow(i).eUp,e.finishLeftRegions(t,e.regionBelow(i),a),e.addRightEdges(t,i,o.Oprev,o,o,!0),!0):d===t.event?(t.mesh.splitEdge(l.Sym),t.mesh.splice(o.Lnext,l.Oprev),a=i,i=e.topRightRegion(i),s=e.regionBelow(i).eUp.Rprev,a.eUp=l.Oprev,l=e.finishLeftRegions(t,a,null),e.addRightEdges(t,i,l.Onext,o.Rprev,s,!0),!0):(by.edgeSign(d,t.event,p)>=0&&(e.regionAbove(i).dirty=i.dirty=!0,t.mesh.splitEdge(o.Sym),o.Org.s=t.event.s,o.Org.t=t.event.t),0>=by.edgeSign(u,t.event,p)&&(i.dirty=a.dirty=!0,t.mesh.splitEdge(l.Sym),l.Org.s=t.event.s,l.Org.t=t.event.t),!1):(t.mesh.splitEdge(o.Sym),t.mesh.splitEdge(l.Sym),t.mesh.splice(l.Oprev,o),o.Org.s=p.s,o.Org.t=p.t,o.Org.pqHandle=t.pq.insert(o.Org),e.getIntersectData(t,o.Org,h,d,c,u),e.regionAbove(i).dirty=i.dirty=a.dirty=!0,!1)}
3139,e.walkDirtyRegions=function(t,i){for(var r,s,a=e.regionBelow(i);;){for(;a.dirty;)i=a,a=e.regionBelow(a);if(!i.dirty&&(a=i,null===(i=e.regionAbove(i))||!i.dirty))return;if(i.dirty=!1,r=i.eUp,s=a.eUp,r.Dst!==s.Dst&&e.checkForLeftSplice(t,i)&&(a.fixUpperEdge?(e.deleteRegion(t,a),t.mesh.delete(s),s=(a=e.regionBelow(i)).eUp):i.fixUpperEdge&&(e.deleteRegion(t,i),t.mesh.delete(r),r=(i=e.regionAbove(a)).eUp)),r.Org!==s.Org){if(r.Dst===s.Dst||i.fixUpperEdge||a.fixUpperEdge||r.Dst!==t.event&&s.Dst!==t.event)e.checkForRightSplice(t,i);else if(e.checkForIntersect(t,i))return}r.Org===s.Org&&r.Dst===s.Dst&&(e.addWinding(s,r),e.deleteRegion(t,i),t.mesh.delete(r),i=e.regionAbove(a))}},e.connectRightVertex=function(t,i,r){var s,a=r.Onext,o=e.regionBelow(i),l=i.eUp,h=o.eUp,c=!1;if(l.Dst!==h.Dst&&e.checkForIntersect(t,i),by.vertEq(l.Org,t.event)&&(t.mesh.splice(a.Oprev,l),i=e.topLeftRegion(t,i),a=e.regionBelow(i).eUp,e.finishLeftRegions(t,e.regionBelow(i),o),c=!0),by.vertEq(h.Org,t.event)&&(t.mesh.splice(r,h.Oprev),r=e.finishLeftRegions(t,o,null),
3139c=!0),c){e.addRightEdges(t,i,r.Onext,a,a,!0);return}s=by.vertLeq(h.Org,l.Org)?h.Oprev:l,s=t.mesh.connect(r.Lprev,s),e.addRightEdges(t,i,s,s.Onext,s.Onext,!1),s.Sym.activeRegion.fixUpperEdge=!0,e.walkDirtyRegions(t,i)},e.connectLeftDegenerate=function(t,i,r){var s,a,o,l,h;if(s=i.eUp,by.vertEq(s.Org,r)){bv(!1),e.spliceMergeVertices(t,s,r.anEdge);return}if(!by.vertEq(s.Dst,r)){t.mesh.splitEdge(s.Sym),i.fixUpperEdge&&(t.mesh.delete(s.Onext),i.fixUpperEdge=!1),t.mesh.splice(r.anEdge,s),e.sweepEvent(t,r);return}bv(!1),i=e.topRightRegion(i),a=l=(o=(h=e.regionBelow(i)).eUp.Sym).Onext,h.fixUpperEdge&&(bv(a!==o),e.deleteRegion(t,h),t.mesh.delete(o),o=a.Oprev),t.mesh.splice(r.anEdge,o),by.edgeGoesLeft(a)||(a=null),e.addRightEdges(t,i,o.Onext,l,a,!0)},e.connectLeftVertex=function(t,i){var r,s,a,o,l,h,c=new bE;if(c.eUp=i.anEdge.Sym,r=t.dict.search(c).key,s=e.regionBelow(r)){if(o=r.eUp,l=s.eUp,0===by.edgeSign(o.Dst,i,o.Org)){e.connectLeftDegenerate(t,r,i);return}(a=by.vertLeq(l.Dst,o.Dst)?r:s,r.inside||a.fixUpperEdge)?(h=a===r?t.mesh.connect(i.anEdge.Sym,o.Lnext):t.mesh.connect(l.Dnext,i.anEdge).Sym,a.fixUpperEdge?e.fixUpperEdge(t,a,h):e.computeWinding(t,e.addRegionBelow(t,r,h)),e.sweepEvent(t,i)):e.addRightEdges(t,r,i.anEdge,i.anEdge,null,!0)}},e.sweepEvent=function(t,i){t.event=i,e.debugEvent(t);for(var r=i.anEdge;null===r.activeRegion;)if((r=r.Onext)===i.anEdge){e.connectLeftVertex(t,i);return}var s=e.topLeftRegion(t,r.activeRegion);bv(null!==s);var a=e.regionBelow(s),o=a.eUp,l=e.finishLeftRegions(t,a,null);l.Onext===o?e.connectRightVertex(t,s,l):e.addRightEdges(t,s,l.Onext,o,o,!0)},e.addSentinel=function(e,t,i,r){var s=new bE,a=e.mesh.makeEdge();a.Org.s=i,a.Org.t=r,a.Dst.s=t,a.Dst.t=r,e.event=a.Dst,s.eUp=a,s.windingNumber=0,s.inside=!1,s.fixUpperEdge=!1,s.sentinel=!0,s.dirty=!1,s.nodeUp=e.dict.insert(s)},e.initEdgeDict=function(t){t.dict=new bT(t,e.edgeLeq);var i=t.bmax[0]-t.bmin[0],r=t.bmax[1]-t.bmin[1],s=t.bmin[0]-i,a=t.bmax[0]+i,o=t.bmin[1]-r,l=t.bmax[1]+r;e.addSentinel(t,s,a,o),e.addSentinel(t,s,a,l)},e.doneEdgeDict=function(t){for(var i,r=0;null!==(i=t.dict.min().key);)i.sentinel||(bv(i.fixUpperEdge),bv(1==++r)),bv(0===i.windingNumber),e.deleteRegion(t,i)},e.removeDegenerateEdges=function(t){var i,r,s,a=t.mesh.eHead;for(i=a.next;i!==a;i=r)r=i.next,s=i.Lnext,by.vertEq(i.Org,i.Dst)&&i.Lnext.Lnext!==i&&(e.spliceMergeVertices(t,s,i),t.mesh.delete(i),s=(i=s).Lnext),s.Lnext===i&&(s!==i&&((s===r||s===r.Sym)&&(r=r.next),t.mesh.delete(s)),(i===r||i===r.Sym)&&(r=r.next),t.mesh.delete(i))},e.initPriorityQ=function(e){var t,i,r,s=0;for(i=(r=e.mesh.vHead).next;i!==r;i=i.next)s++;for(s+=8,t=e.pq=new bM(s,by.vertLeq),i=(r=e.mesh.vHead).next;i!==r;i=i.next)i.pqHandle=t.insert(i);return i===r&&(t.init(),!0)},e.donePriorityQ=function(e){e.pq=null},e.removeDegenerateFaces=function(t,i){var r,s,a;for(r=i.fHead.next;r!==i.fHead;r=s)s=r.next,bv((a=r.anEdge).Lnext!==a),a.Lnext.Lnext===a&&(e.addWinding(a.Onext,a),t.mesh.delete(a));return!0},e.computeInterior=function(t,i){var r,s;if(void 0===i&&(i=!0),e.removeDegenerateEdges(t),!e.initPriorityQ(t))return!1;for(e.initEdgeDict(t);null!==(r=t.pq.extractMin());){for(;!(null===(s=t.pq.min())||!by.vertEq(s,r));)s=t.pq.extractMin(),e.spliceMergeVertices(t,r.anEdge,s.anEdge);e.sweepEvent(t,r)}return t.event=t.dict.min().key.eUp.Org,e.debugEvent(t),e.doneEdgeDict(t),e.donePriorityQ(t),!!e.removeDegenerateFaces(t,t.mesh)&&(i&&t.mesh.check(),!0)},e}(),bD=function(){function e(){this.mesh=new bS,this.normal=[0,0,0],this.sUnit=[0,0,0],this.tUnit=[0,0,0],this.bmin=[0,0],this.bmax=[0,0],this.windingRule=wK.ODD,this.dict=null,this.pq=null,this.event=null,this.vertexIndexCounter=0,this.vertices=[],this.vertexIndices=[],this.vertexCount=0,this.elements=[],this.elementCount=0}return e.prototype.dot_=function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]},e.prototype.normalize_=function(e){var t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2];if(!t)throw"Zero-size vector!";t=Math.sqrt(t),e[0]/=t,e[1]/=t,e[2]/=t},e.prototype.longAxis_=function(e){var t=0;return Math.abs(e[1])>Math.abs(e[0])&&(t=1),Math.abs(e[2])>Math.abs(e[t])&&(t=2),t},e.prototype.computeNormal_=function(e){var t,i,r,s,a,o,l=[0,0,0],h=[0,0,0],c=[0,0,0],d=[0,0,0],u=[0,0,0],p=[null,null,null],f=[null,
3139null,null],m=this.mesh.vHead;t=m.next;for(var g=0;g<3;++g)s=t.coords[g],h[g]=s,f[g]=t,l[g]=s,p[g]=t;for(t=m.next;t!==m;t=t.next)for(var v=0;v<3;++v)(s=t.coords[v])<h[v]&&(h[v]=s,f[v]=t),s>l[v]&&(l[v]=s,p[v]=t);var y=0;if(l[1]-h[1]>l[0]-h[0]&&(y=1),l[2]-h[2]>l[y]-h[y]&&(y=2),h[y]>=l[y]){e[0]=0,e[1]=0,e[2]=1;return}for(o=0,i=f[y],r=p[y],c[0]=i.coords[0]-r.coords[0],c[1]=i.coords[1]-r.coords[1],c[2]=i.coords[2]-r.coords[2],t=m.next;t!==m;t=t.next)d[0]=t.coords[0]-r.coords[0],d[1]=t.coords[1]-r.coords[1],d[2]=t.coords[2]-r.coords[2],u[0]=c[1]*d[2]-c[2]*d[1],u[1]=c[2]*d[0]-c[0]*d[2],u[2]=c[0]*d[1]-c[1]*d[0],(a=u[0]*u[0]+u[1]*u[1]+u[2]*u[2])>o&&(o=a,e[0]=u[0],e[1]=u[1],e[2]=u[2]);o<=0&&(e[0]=e[1]=e[2]=0,e[this.longAxis_(c)]=1)},e.prototype.checkOrientation_=function(){for(var e,t,i=this.mesh.fHead,r=this.mesh.vHead,s=0,a=i.next;a!==i;a=a.next)if(!((t=a.anEdge).winding<=0))do s+=(t.Org.s-t.Dst.s)*(t.Org.t+t.Dst.t),t=t.Lnext;while(t!==a.anEdge);if(s<0){for(e=r.next;e!==r;e=e.next)e.t=-e.t;this.tUnit[0]=-this.tUnit[0],this.tUnit[1]=-this.tUnit[1],this.tUnit[2]=-this.tUnit[2]}},e.prototype.projectPolygon_=function(){var e,t,i=this.mesh.vHead,r=[0,0,0],s=!1;r[0]=this.normal[0],r[1]=this.normal[1],r[2]=this.normal[2],r[0]||r[1]||r[2]||(this.computeNormal_(r),s=!0),e=this.sUnit,t=this.tUnit;var a=this.longAxis_(r);e[a]=0,e[(a+1)%3]=1,e[(a+2)%3]=0,t[a]=0,t[(a+1)%3]=0,t[(a+2)%3]=r[a]>0?1:-1;for(var o=i.next;o!==i;o=o.next)o.s=this.dot_(o.coords,e),o.t=this.dot_(o.coords,t);s&&this.checkOrientation_();for(var l=!0,h=i.next;h!==i;h=h.next)l?(this.bmin[0]=this.bmax[0]=h.s,this.bmin[1]=this.bmax[1]=h.t,l=!1):(h.s<this.bmin[0]&&(this.bmin[0]=h.s),h.s>this.bmax[0]&&(this.bmax[0]=h.s),h.t<this.bmin[1]&&(this.bmin[1]=h.t),h.t>this.bmax[1]&&(this.bmax[1]=h.t))},e.prototype.addWinding_=function(e,t){e.winding+=t.winding,e.Sym.winding+=t.Sym.winding},e.prototype.tessellateMonoRegion_=function(e,t){var i,r;if(!((i=t.anEdge).Lnext!==i&&i.Lnext.Lnext!==i))throw"Mono region invalid";for(;by.vertLeq(i.Dst,i.Org);i=i.Lprev);for(;by.vertLeq(i.Org,i.Dst);i=i.Lnext);for(r=i.Lprev;i.Lnext!==r;)if(by.vertLeq(i.Dst,r.Org)){for(;r.Lnext!==i&&(by.edgeGoesLeft(r.Lnext)||0>=by.edgeSign(r.Org,r.Dst,r.Lnext.Dst));)r=e.connect(r.Lnext,r).Sym;r=r.Lprev}else{for(;r.Lnext!==i&&(by.edgeGoesRight(i.Lprev)||by.edgeSign(i.Dst,i.Org,i.Lprev.Org)>=0);)i=e.connect(i,i.Lprev).Sym;i=i.Lnext}if(r.Lnext===i)throw"Mono region invalid";for(;r.Lnext.Lnext!==i;)r=e.connect(r.Lnext,r).Sym;return!0},e.prototype.tessellateInterior_=function(e){for(var t,i=e.fHead.next;i!==e.fHead;i=t)if(t=i.next,i.inside&&!this.tessellateMonoRegion_(e,i))return!1;return!0},e.prototype.discardExterior_=function(e){for(var t,i=e.fHead.next;i!==e.fHead;i=t)t=i.next,i.inside||e.zapFace(i)},e.prototype.setWindingNumber_=function(e,t,i){for(var r,s=e.eHead.next;s!==e.eHead;s=r)r=s.next,s.Rface.inside!==s.Lface.inside?s.winding=s.Lface.inside?t:-t:i?e.delete(s):s.winding=0},e.prototype.getNeighbourFace_=function(e){return e.Rface&&e.Rface.inside?e.Rface.n:-1},e.prototype.outputPolymesh_=function(e,t,i,r){var s,a,o=0,l=0;i>3&&e.mergeConvexFaces(i);for(var h=e.vHead.next;h!==e.vHead;h=h.next)h.n=-1;for(var c=e.fHead.next;c!==e.fHead;c=c.next)if(c.n=-1,c.inside){s=c.anEdge,a=0;do{var h=s.Org;-1===h.n&&(h.n=l,l++),a++,s=s.Lnext}while(s!==c.anEdge);if(a>i)throw"Face vertex greater that support polygon";c.n=o,++o}this.elementCount=o,t===wZ.CONNECTED_POLYGONS&&(o*=2),this.elements=[],this.elements.length=o*i,this.vertexCount=l,this.vertices=[],this.vertices.length=l*r,this.vertexIndices=[],this.vertexIndices.length=l;for(var h=e.vHead.next;h!==e.vHead;h=h.next)if(-1!==h.n){var d=h.n*r;this.vertices[d+0]=h.coords[0],this.vertices[d+1]=h.coords[1],r>2&&(this.vertices[d+2]=h.coords[2]),this.vertexIndices[h.n]=h.idx}for(var u=0,c=e.fHead.next;c!==e.fHead;c=c.next)if(c.inside){s=c.anEdge,a=0;do{var h=s.Org;this.elements[u++]=h.n,a++,s=s.Lnext}while(s!==c.anEdge);for(var p=a;p<i;++p)this.elements[u++]=-1;if(t===wZ.CONNECTED_POLYGONS){s=c.anEdge;do this.elements[u++]=this.getNeighbourFace_(s),s=s.Lnext;while(s!==c.anEdge);for(var f=a;f<i;++f)this.elements[u++]=-1}}},e.prototype.outputContours_=function(e,t){var i,r,s=0,a=0;this.vertexCount=0,this.elementCount=0;for(var o=e.fHead.next;o!==e.fHead;o=o.next)if(o.inside){r=i=o.anEdge;do this.vertexCount++,i=i.Lnext;while(i!==r);this.elementCount++}this.elements=[],this.elements.length=2*this.elementCount,this.vertices=[],this.vertices.length=this.vertexCount*t,this.vertexIndices=[],this.vertexIndices.length=this.vertexCount;var l=0,h=0,c=0;s=0;for(var o=e.fHead.next;o!==e.fHead;o=o.next)if(o.inside){a=0,r=i=o.anEdge;do this.vertices[l++]=i.Org.coords[0],this.vertices[l++]=i.Org.coords[1],t>2&&(this.vertices[l++]=i.Org.coords[2]),this.vertexIndices[h++]=this.vertexIdCallback?this.vertexIdCallback(i):i.Org.idx,a++,i=i.Lnext;while(i!==r);this.elements[c++]=s,this.elements[c++]=a,s+=a}},e.prototype.addContour=function(e,t){null===this.mesh&&(this.mesh=new bS),e<2&&(e=2),e>3&&(e=3);for(var i=null,r=0;r<t.length;r+=e)null===i?(i=this.mesh.makeEdge(),this.mesh.splice(i,i.Sym)):(this.mesh.splitEdge(i),i=i.Lnext),i.Org.coords[0]=t[r+0],i.Org.coords[1]=t[r+1],e>2?i.Org.coords[2]=t[r+2]:i.Org.coords[2]=0,i.Org.idx=this.vertexIndexCounter++,this.edgeCreateCallback&&this.edgeCreateCallback(i),i.winding=1,i.Sym.winding=-1},e.prototype.tesselate=function(e,t,i,r,s,a){if(void 0===e&&(e=wK.ODD),void 0===t&&(t=wZ.POLYGONS),void 0===a&&(a=!0),this.vertices=[],this.elements=[],this.vertexIndices=[],this.vertexIndexCounter=0,s&&(this.normal[0]=s[0],this.normal[1]=s[1],this.normal[2]=s[2]),this.windingRule=e,r<2&&(r=2),r>3&&(r=3),!this.mesh)return!1;this.projectPolygon_(),bP.computeInterior(this,a);var o=this.mesh;return t===wZ.BOUNDARY_CONTOURS?this.setWindingNumber_(o,1,!0):this.tessellateInterior_(o),a&&o.check(),t===wZ.BOUNDARY_CONTOURS?this.outputContours_(o,r):this.outputPolymesh_(o,t,i,r),!0},e}();function bI(e){var t=e.windingRule,i=void 0===t?wK.ODD:t,r=e.elementType,s=void 0===r?wZ.POLYGONS:r,a=e.polySize,o=e.vertexSize,l=void 0===o?2:o,h=e.normal,c=e.contours,d=void 0===c?[]:c,u=e.strict,p=void 0===u||u,f=e.debug;if(!d&&p)throw Error("Contours can't be empty");if(d){var m=new bD;e.edgeCreateCallback&&(m.edgeCreateCallback=e.edgeCreateCallback),e.vertexIdCallback&&(m.vertexIdCallback=e.vertexIdCallback);for(var g=0;g<d.length;g++)m.addContour(l||2,d[g]);return m.tesselate(i,s,void 0===a?3:a,l,void 0===h?[0,0,1]:h,p),{vertices:m.vertices,vertexIndices:m.vertexIndices,vertexCount:m.vertexCount,elements:m.elements,elementCount:m.elementCount,mesh:void 0!==f&&f?m.mesh:void 0}}}wK.ODD,wK.NONZERO,wK.POSITIVE,wK.NEGATIVE,wK.ABS_GEQ_TWO,wZ.POLYGONS,wZ.CONNECTED_POLYGONS,wZ.BOUNDARY_CONTOURS;var bO=class{constructor(e=256,t=!1){this.capacity=e,this.size=0,this.debug=t,this.debug&&console.log(`allocating with cap ${e}`);let i=e*bO.eSize;this.buffer=new ArrayBuffer(i);let r=Float32Array.BYTES_PER_ELEMENT,s=0;this.positions=new Float32Array(this.buffer,s*r,3*e),s+=3*e,this.normals=new Float32Array(this.buffer,s*r,3*e),s+=3*e,this.uvs=new Float32Array(this.buffer,s*r,2*e)}realloc(e,t=!1){if(e<this.size)throw Error("cannot shrink buffer");if(e<=this.capacity&&!t)return;this.debug&&console.log(`resizing from ${this.capacity} \u2192 ${e}`);let i=new ArrayBuffer(e*bO.eSize),r=Float32Array.BYTES_PER_ELEMENT,s=0,a=new Float32Array(i,0*r,3*e),o=new Float32Array(i,(s+=3*e)*r,3*e),l=new Float32Array(i,(s+=3*e)*r,2*e);t?(a.set(this.positions.subarray(0,3*this.size)),o.set(this.normals.subarray(0,3*this.size)),l.set(this.uvs.subarray(0,2*this.size))):(a.set(this.positions),o.set(this.normals),l.set(this.uvs)),this.buffer=i,this.positions=a,this.normals=o,this.uvs=l,this.capacity=e}get(e=1){let t=this.size+e;if(t>this.capacity){let e=this.capacity;for(;t>e;)e*=2;this.realloc(e)}let i=this.size;return this.size=t,i}reserve(e){let t=this.size+e;t>this.capacity&&this.realloc(t)}shrink(){this.debug&&console.log(`shrinking ${this.capacity} \u2192 ${this.size}`),this.realloc(this.size,!0)}};bO.eSize=8*Float32Array.BYTES_PER_ELEMENT;var bR=class{constructor(e=[],t=(e,t)=>e<t?-1:e>t?1:0){if(this.data=e,this.length=this.data.length,this.compare=t,this.length>0)for(let e=(this.length>>1)-1;e>=0;e--)this._down(e)}push(e){this.data.push(e),this._up(this.length++)}pop(){if(0===this.length)return;let e=this.data[0],t=this.data.pop();return--this.length>0&&(this.data[0]=t,this._down(0)),e}peek(){return this.data[0]}_up(e){let{data:t,compare:i}=this,r=t[e];for(;e>0;){let s=e-1>>1,a=t[s];if(i(r,a)>=0)break;t[e]=a,e=s}t[e]=r}_down(e){let{data:t,compare:i}=this,r=this.length>>1,s=t[e];for(;e<r;){let r=(e<<1)+1,a=r+1;if(a<this.length&&0>i(t[a],t[r])&&(r=a),i(t[r],s)>=0)break;t[e]=t[r],e=r}t[e]=s}};function bL(e,t,i,r){this.x=e,this.y=t,this.h=i,this.d=function(e,t,i){let r=!1,s=1/0;for(let a of i)for(let i=0,o=a.length,l=o-1;i<o;l=i++){let o=a[i],h=a[l];o[1]>t!=h[1]>
3139t&&e<(h[0]-o[0])*(t-o[1])/(h[1]-o[1])+o[0]&&(r=!r),s=Math.min(s,function(e,t,i,r){let s=i[0],a=i[1],o=r[0]-s,l=r[1]-a;if(0!==o||0!==l){let i=((e-s)*o+(t-a)*l)/(o*o+l*l);i>1?(s=r[0],a=r[1]):i>0&&(s+=o*i,a+=l*i)}return(o=e-s)*o+(l=t-a)*l}(e,t,o,h))}return 0===s?0:(r?1:-1)*Math.sqrt(s)}(e,t,r),this.max=this.d+this.h*Math.SQRT2}var bB={vertices:[160,160,-160,160,-160,-160,160,-160],vertexIndices:[1,0,3,2],vertexCount:4,elements:[0,4],elementCount:1,mesh:void 0},bz={vertices:[],vertexIndices:[],vertexCount:0,elements:[],elementCount:0,mesh:void 0},bF={vertices:[-160,160,160,-160,160,160,-160,-160],vertexIndices:[1,3,0,2],vertexCount:4,elements:[0,1,2,1,0,3],elementCount:2,mesh:void 0},bN=(e,t)=>([i,r])=>(r<i&&(r+=t),(e>=i?e:e+t)<=r),bk=class extends rz{constructor(e,t,i=0,r=12,s=3,a=wK.ODD,o=!1){let l,h,c;super(),this.forPathBevel=o,this.type="ShapeGeometry",this.vertexCache={},this._shape=e,this._depth=t,this._curveSegments=r,this._bevelSegmentsInput=s;let d=this._shape.extractShapePointsToFlatArray([],r),u=this._shape.shapeHoles.map(e=>{let t=e.extractShapePointsToFlatArray([],r),i=[];for(let e=t.length-1;e>=1;e-=2){let r=t[e-1],s=t[e-0];i.push(r,s)}return i}),p=[],f=[];for(let e=0;e<d.length;e+=2)f.push([d[e],d[e+1]]);p.push(f);for(let e=0;e<u.length;e++){let t=u[e],i=[];for(let e=0;e<t.length;e+=2)i.push([t[e],t[e+1]]);p.push(i)}l=e.isText?.1*new lz().setFromPoints(e.points.map(e=>e.position)).getSize(new tQ).length():0===p[0].length?i:i>0?function(e,t,i=1,r=!1){let s=1/0,a=1/0,o=-1/0,l=-1/0;for(let[t,i]of e[0])t<s&&(s=t),i<a&&(a=i),t>o&&(o=t),i>l&&(l=i);let h=o-s,c=l-a,d=Math.max(i,Math.min(h,c));if(d===i){let e=[s,a];return e.distance=0,e.distance}let u=new bR([],(e,t)=>t.max-e.max),p=function(e){let t=0,i=0,r=0,s=e[0];for(let e=0,a=s.length,o=a-1;e<a;o=e++){let a=s[e],l=s[o],h=a[0]*l[1]-l[0]*a[1];i+=(a[0]+l[0])*h,r+=(a[1]+l[1])*h,t+=3*h}let a=new bL(i/t,r/t,0,e);return 0===t||a.d<0?new bL(s[0][0],s[0][1],0,e):a}(e),f=new bL(s+h/2,a+c/2,0,e);f.d>p.d&&(p=f);let m=2;function g(s,a,o){let l=new bL(s,a,o,e);if(m++,l.max>p.d+i&&u.push(l),l.d>p.d&&(p=l,r&&console.log(`found best ${Math.round(1e4*l.d)/1e4} after ${m} probes`),p.d>t))return t}let v=d/2;for(let e=s;e<o;e+=d)for(let t=a;t<l;t+=d)g(e+v,t+v,v);for(;u.length;){let{max:e,x:t,y:r,h:s}=u.pop();if(e-p.d<=i)break;g(t-(v=s/2),r-v,v),g(t+v,r-v,v),g(t-v,r+v,v),g(t+v,r+v,v)}r&&console.log(`num probes: ${m}
3140best distance: ${p.d}`);let y=[p.x,p.y];return y.distance=p.d,y.distance}(p,i):1e-5,i<=0?(this._bevel=0,this._bevelSegments=0):(this._bevel=Math.min(i,l,t/2),this._bevelSegments=Math.floor(s));try{h=bI({windingRule:a,elementType:wZ.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[d]})}catch{h=bB}try{c=bI({windingRule:wK.ODD,elementType:wZ.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[...u]})}catch{c=bz}if(!h)throw Error("error generating geometry");let m=h.elementCount;if(c){h.elementCount+=c.elementCount;for(let e=0;e<c.elements.length;e++){let t=c.elements[e],i=e%2==0?h.vertexCount:0;h.elements.push(t+i)}for(let e=0;e<c.vertexIndices.length;e++){let t=c.vertexIndices[e],i=h.vertexCount;h.vertexIndices.push(t+i)}for(let e=0;e<c.vertices.length;e++){let t=c.vertices[e];h.vertices.push(t)}}let g=1/0,v=-1/0,y=1/0,x=-1/0;for(let e=0,t=h.vertexCount;e<t;e++){let t=2*e,i=h.vertices[t+0],r=h.vertices[t+1];i<g&&(g=i),i>v&&(v=i),r<y&&(y=r),r>x&&(x=r)}this._minX=g,this._minY=y,this._width=v-g,this._height=x-y,this._buffer=new bO(this._computeBufferEstimatedSize(h));let b=[],w=[];for(let e=h.elementCount-1;e>=0;e--){let t=e>=m,i=2*e,s=h.elements[i+0],a=h.elements[i+1],c=s+a,d={start:s,count:a,normals:[],continuous:[],concave:[]},p=s,f=c-1,g=s+1,v=this._shape.roundedCurves.length;do{let e=p-s,i=h.vertices[2*f+0],r=h.vertices[2*f+1],o=h.vertices[2*p+0],l=h.vertices[2*p+1],u=h.vertices[2*g+0],m=h.vertices[2*g+1],y=o-i,x=l-r,b=Math.sqrt(y*y+x*x);y/=b,x/=b;let w=o-u,S=l-m,_=Math.sqrt(w*w+S*S);w/=_,S/=_,d.normals[2*e+0]=-S,d.normals[2*e+1]=w,d.concave[e]=y*S-x*w>0;let A=h.vertexIndices[p];if(Array.isArray(A))d.continuous[e]=!1;else{let[t,i]=this._shape.getCurveIndexFromVertexId(A-1,!0);if(i>0&&i<1)d.continuous[e]=!0;else{let r=1===i?t+1:t-1;r=(r+v)%v;let s=1===i?0:1,a=this._shape.roundedCurves[t].getTangent(i),o=this._shape.roundedCurves[r].getTangent(s);d.continuous[e]=a.dot(o)>.95}}t&&(d.normals[2*e+0]*=-1,d.normals[2*e+1]*=-1),[f,p,g]=[p,g,g+1],g>=c&&(g-=a)}while(g!==s+1);let y=[];y.push({bevelI:0,angle:0,size:0,boundary:{vertices:h.vertices.slice(2*s,2*c),vertexCount:a,vertexIndices:Array(a).fill(!0).map((e,t)=>[t,t]),elements:[0,a],elementCount:1,mesh:null},reverseMap:[],insetPoints:h.vertices.slice(2*s,2*c)});let x=0;for(let e=1;e<=this._bevelSegments;e++){let i=e/this._bevelSegments*Math.PI/2,s=(1-Math.cos(i))*this._bevel,o=[],l=[],c=[],u=[],p=0;for(let e=0;e<a;e++){let i=2*e,f=(e-1+a)%a*2,m=h.vertices[2*d.start+i+0],g=h.vertices[2*d.start+i+1],v=-d.normals[f+0]*s,y=-d.normals[f+1]*s,x=-d.normals[i+0]*s,b=-d.normals[i+1]*s;if(d.concave[e]||!d.concave[e]&&t){let i=Math.atan2(y,v),a=Math.atan2(b,x);a>i&&(a-=2*Math.PI);let l=a-i;if(d.continuous[e]||t){let r=i+l/2,a=Math.cos(r)*s,h=Math.sin(r)*s;o[2*p+0]=m+a*(t?-1:1),o[2*p+1]=g+h*(t?-1:1),u[p]=e,p++}else{let t=Math.max(1,Math.floor(r/4*Math.abs(l)/Math.PI));for(let r=0;r<=t;r++){let a=i+r/t*l,h=Math.cos(a)*s,c=Math.sin(a)*s;o[2*p+0]=m+h,o[2*p+1]=g+c,u[p]=e,p++}}}
3140else o[2*p+0]=m+v,o[2*p+1]=g+y,u[p]=e,l[e]=p,o[2*++p+0]=m,o[2*p+1]=g,u[p]=e,o[2*++p+0]=m+x,o[2*p+1]=g+b,u[p]=e,c[e]=p,p++}let f=bI({windingRule:wK.POSITIVE,elementType:wZ.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[o],edgeCreateCallback:e=>{let t=e.Org.idx,i=u[t],r=u[(t+1)%u.length];e.idx=[i,r],e.Sym.idx=[r,i]},vertexIdCallback:e=>{let t=e.Lprev.idx;return[t?t[1]:0,e.idx?e.idx[0]:0]}});if(!f)throw console.log("Error"),Error(`error generating bevel geometry for ${e}'th loop`);if(!f.vertexCount){x=(1-Math.sin((e-1)/this._bevelSegments*Math.PI/2))*this._bevel;break}for(let e=0;e<f.vertexIndices.length;e++){let[t,i]=f.vertexIndices[e];if(t===i)continue;let r=i;i<t&&(r+=a);for(let s=t;s<r;s++){let r=s%a,o=(s+1)%a;if(!d.continuous[r]||!d.continuous[o]){f.vertexIndices[e]=[t,r],f.vertexIndices.splice(e+1,0,[o,i]),f.vertices.splice((e+1)*2,0,f.vertices[2*e],f.vertices[2*e+1]);break}}}y.push({bevelI:e,angle:i,size:s,boundary:f,reverseMap:u,insetPoints:o})}let S=(e,t,i)=>{let r=0,s=e.boundary.vertexIndices.length;for(;r<s&&i(e.boundary.vertexIndices[t]);)t=(t+1)%s,r++;return r},_=b.length;for(let e=1;e<y.length;e++){let t=y[e-1],i=y[e],r=t.boundary.vertexIndices.length,s=i.boundary.vertexIndices.length;if(!r||!s)break;let l=d.concave.length,h=0,c=bN(0,a);for(;!t.boundary.vertexIndices.filter(c).length||!i.boundary.vertexIndices.filter(c).length;)c=bN(++h,a);let u=t.boundary.vertexIndices.findIndex(c),p=i.boundary.vertexIndices.findIndex(c);do u=(u+1)%r;while(c(t.boundary.vertexIndices[u]));do p=(p+1)%s;while(c(i.boundary.vertexIndices[p]));let f=h=(h+1)%a,m=0,g=this._buildBevelVert(d,t,(u-1+r)%r,void 0,m),v=this._buildBevelVert(d,i,(p-1+s)%s,void 0,m),x=g,w=v,_,A,M=!1;do{m=(h||l)/l;let e=S(t,u,c=bN(h,a)),f=S(i,p,c),g=M;if(M=!1,e&&!f){for(let i=0;i<e;i++)_=this._buildBevelVert(d,t,(u+i)%r,i/(e-1),m),b.push(x.topN,_.topP,w.topN),!1===o&&b.push(_.bottomP,x.bottomN,w.bottomN),x=_;M=!0}else if(!e&&f)for(let e=0;e<f;e++)A=this._buildBevelVert(d,i,(p+e)%s,e/(f-1),m),b.push(w.topN,x.topP,A.topP),!1===o&&b.push(x.bottomP,w.bottomN,A.bottomP),w=A;else if(e&&f){if(_=this._buildBevelVert(d,t,u,0,m),A=this._buildBevelVert(d,i,p,0,m),g?(b.push(x.topN,A.topP,w.topN),b.push(x.topN,_.topP,A.topP),!1===o&&(b.push(A.bottomP,x.bottomN,w.bottomN),b.push(A.bottomP,_.bottomP,x.bottomN))):(b.push(w.topN,x.topN,_.topP),b.push(w.topN,_.topP,A.topP),!1===o&&(b.push(_.bottomP,x.bottomN,w.bottomN),b.push(_.bottomP,w.bottomN,A.bottomP))),x=_,w=A,e===f)for(let a=1;a<e;a++)_=this._buildBevelVert(d,t,(u+a)%r,a/(e-1),m),A=this._buildBevelVert(d,i,(p+a)%s,a/(f-1),m),b.push(x.topN,_.topP,w.topN),b.push(w.topN,_.topP,A.topP),!1===o&&(b.push(_.bottomP,x.bottomN,w.bottomN),b.push(_.bottomP,w.bottomN,A.bottomP)),x=_,w=A;else if(e>f){let a=e/f,l=0;for(let h=1;h<e;h++)_=this._buildBevelVert(d,t,(u+h)%r,h/(e-1),m),b.push(x.topN,_.topP,w.topN),!1===o&&b.push(_.bottomP,x.bottomN,w.bottomN),x=_,h>(l+1)*a&&(l++,A=this._buildBevelVert(d,i,(p+l)%s,l/(f-1),m),b.push(w.topN,_.topP,A.topP),!1===o&&b.push(_.bottomP,w.bottomN,A.bottomP),w=A)}else{let a=f/e,l=0;for(let h=1;h<f;h++)A=this._buildBevelVert(d,i,(p+h)%s,h/(f-1),m),b.push(w.topN,_.topP,A.topP),!1===o&&b.push(_.bottomP,w.bottomN,A.bottomP),w=A,h>(l+1)*a&&(l++,_=this._buildBevelVert(d,t,(u+l)%r,l/(e-1),m),b.push(x.topN,_.topP,w.topN),!1===o&&b.push(_.bottomP,x.bottomN,w.bottomN),x=_)}}u=(u+e)%r,p=(p+f)%s,h=(h+1)%l}while(h!==f)}if(!1===o&&this._depth>2*this._bevel&&this._buildWall(y,d,b),t){let e=[];for(let t=b.length-1;t>=_+2;t-=3){let i=b[t-2],r=b[t-1],s=b[t-0];e.push(s,r,i)}b.splice(_,b.length-_,...e)}if(t){let e=[];for(let t=y[y.length-1].boundary.vertices.length-1;t>=1;t-=2){let i=y[y.length-1].boundary.vertices[t-1],r=y[y.length-1].boundary.vertices[t-0];e.push(i,r)}w.push(e)}if(!t){let e=y[y.length-1],t;try{t=bI({windingRule:y.length>1?wK.POSITIVE:wK.ODD,elementType:wZ.POLYGONS,vertexSize:2,strict:!0,contours:[e.insetPoints,...w]})}catch{t=bF}if(!t)throw Error("Error generating geometry for surface");0===u.length&&this._bevel<l&&Object.assign(this,{useNgonForTopBottomFaceDuringBake:!0});for(let e=0;e<3*t.elementCount;e+=3){let i=this._buildSurfaceVert(t,t.elements[e+0],x),r=this._buildSurfaceVert(t,t.elements[e+1],x),s=this._buildSurfaceVert(t,t.elements[e+2],x);b.push(i.top,r.top,s.top),!1===o&&b.push(s.bottom,r.bottom,i.bottom)}}this.vertexCache={}}this._buffer.shrink();let S=new rM(Uint32Array.from(b),1),_=new rM(this._buffer.positions,3),A=new rM(this._buffer.normals,3),M=new rM(this._buffer.uvs,2);_.needsUpdate=!0,A.needsUpdate=!0,M.needsUpdate=!0,S.needsUpdate=!0,this.setAttribute("position",_),this.setAttribute("normal",A),this.setAttribute("uv",M),this.setIndex(S)}_computeBufferEstimatedSize(e){return 2*e.vertexCount*(2+this._bevelSegments)}_buildWall(e,t,i){let r=e[0];
3140for(let e=0,s=r.boundary.vertexCount;e<s;e++){let a=this._buildBevelVert(t,r,e),o=this._buildBevelVert(t,r,(e+1)%s);i.push(o.topP,a.topN,a.bottomN),i.push(o.topP,a.bottomN,o.bottomP)}}_buildSurfaceVert(e,t,i){let r=t.toString();if(r in this.vertexCache)return this.vertexCache[r];let s=e.vertices[2*t+0],a=e.vertices[2*t+1],o=(s-this._minX)/this._width,l=(a-this._minY)/this._height;this.forPathBevel&&(l=1);let h=this._buffer.get(this.forPathBevel?1:2),c=3*h,d=2*h,u={top:h+0,bottom:h+1};return this._buffer.positions[c+0]=s,this._buffer.positions[c+1]=a,this._buffer.positions[c+2]=this.forPathBevel?this._bevel:this._depth-i,this._buffer.normals[c+0]=0,this._buffer.normals[c+1]=0,this._buffer.normals[c+2]=1,this._buffer.uvs[d+0]=o,this._buffer.uvs[d+1]=l,!1===this.forPathBevel&&(this._buffer.positions[c+3]=s,this._buffer.positions[c+4]=a,this._buffer.positions[c+5]=i,this._buffer.normals[c+3]=0,this._buffer.normals[c+4]=0,this._buffer.normals[c+5]=-1,this._buffer.uvs[d+2]=o,this._buffer.uvs[d+3]=l),this.vertexCache[r]=u,u}_buildBevelVert(e,t,i,r=1,s){let a=`${t.bevelI}:${i}`;if(a in this.vertexCache&&0!==s&&1!==s&&(!s||s===this.vertexCache[a].pathBevelUCoord))return this.vertexCache[a];let[o,l]=t.boundary.vertexIndices[i],h,c,d,u;o!==l?(c=o,h=l,u=!1,d=e.continuous[c]&&e.continuous[h]):(c=((h=o)-1+e.count)%e.count,u=e.concave[h]&&t.bevelI>0,d=e.continuous[h]||u);let p=Math.cos(t.angle),f=Math.sin(t.angle),m=2*i,g=2*h,v=2*c,y=t.boundary.vertices[m+0],x=t.boundary.vertices[m+1],b=(1-f)*this._bevel,w=(y-this._minX)/this._width,S=(x-this._minY)/this._height;this.forPathBevel&&(void 0!==s&&(w=s),S=1);let _=e.normals[g+0],A=e.normals[g+1],M=e.normals[v+0],E=e.normals[v+1];if(u){let e=M-_,t=E-A,i=Math.sqrt((_+=e*(1-r))*_+(A+=t*(1-r))*A);_/=i,A/=i}let C=this.forPathBevel?this._buffer.get(d?1:2):this._buffer.get(d?2:4),T=3*C,P=2*C,D={i,fi:h,topP:C+0,topN:C+0,bottomP:C+1,bottomN:C+1,pathBevelUCoord:s};return this._buffer.positions[T+0]=y,this._buffer.positions[T+1]=x,this._buffer.positions[T+2]=(this.forPathBevel?this._bevel:this._depth)-b,this._buffer.normals[T+0]=_*p,this._buffer.normals[T+1]=A*p,this._buffer.normals[T+2]=f,this._buffer.uvs[P+0]=w,this._buffer.uvs[P+1]=S,!1===this.forPathBevel&&(this._buffer.positions[T+3]=y,this._buffer.positions[T+4]=x,this._buffer.positions[T+5]=b,this._buffer.normals[T+3]=_*p,this._buffer.normals[T+4]=A*p,this._buffer.normals[T+5]=-f,this._buffer.uvs[P+2]=S,this._buffer.uvs[P+3]=w),d||(this.forPathBevel?(C+=1,T+=3,P+=2):(C+=2,T+=6,P+=4),D.topP=C+0,D.bottomP=C+1,this._buffer.positions[T+0]=y,this._buffer.positions[T+1]=x,this._buffer.positions[T+2]=(this.forPathBevel?this._bevel:this._depth)-b,this._buffer.normals[T+0]=M*p,this._buffer.normals[T+1]=E*p,this._buffer.normals[T+2]=f,this._buffer.uvs[P+0]=w,this._buffer.uvs[P+1]=S,!1===this.forPathBevel&&(this._buffer.positions[T+3]=y,this._buffer.positions[T+4]=x,this._buffer.positions[T+5]=b,this._buffer.normals[T+3]=M*p,this._buffer.normals[T+4]=E*p,this._buffer.normals[T+5]=-f,this._buffer.uvs[P+2]=S,this._buffer.uvs[P+3]=w)),this.vertexCache[a]=D,D}clone(){let e=new bk(this._shape,this._depth,this._bevel,this._curveSegments,this._bevelSegmentsInput);return e.userData=uc(this.userData),e}},bU=class extends rz{constructor(e,t=12,i={}){super(),this.type="ShapeGeometry",this.windingRule=wK.ODD,this.elementType=wZ.POLYGONS,this.polySize=3,this.vertexSize=2,this.strict=!0,this._shape=e,this._curveSegments=t,this._triangulationOptions=Object.assign({windingRule:wK.ODD,elementType:wZ.POLYGONS,polySize:3,vertexSize:2,strict:!0},i);let r=this._shape.extractShapePointsToFlatArray([],this._curveSegments),s=this._shape.shapeHoles.map(e=>e.extractShapePointsToFlatArray([],this._curveSegments)),a,o=!0,l=!0,h,c;for(let e=0,t=r.length/2;e<t;e++){let t=2*e,i=r[t+0],s=r[t+1];if(void 0!==h&&i!==h&&(o=!1),void 0!==c&&s!==c&&(l=!1),h=i,c=s,!o&&!l)break}if(!o&&!l)try{a=bI({contours:[r,...s],windingRule:this._triangulationOptions.windingRule,elementType:this._triangulationOptions.elementType,polySize:this._triangulationOptions.polySize,vertexSize:this._triangulationOptions.vertexSize,strict:this._triangulationOptions.strict})}catch{a=bB}let d=a?.vertexCount??1,u=a?.elementCount??1;if(this._positionAttribute=new rM(new Float32Array(3*d),3),this._normalAttribute=new rM(new Float32Array(3*d),3),this._uvAttribute=new rM(new Float32Array(2*d),2),this._indexAttribute=new rM(new Uint32Array(3*u),1),a){let e=1/0,t=-1/0,i=1/0,r=-1/0;for(let s=0;s<d;s++){let o=2*s,l=a.vertices[o+0],h=a.vertices[o+1];l<e&&(e=l),l>t&&(t=l),h<i&&(i=h),h>r&&(r=h)}let s=t-e,o=r-i;for(let t=0;t<d;t++){let r=2*t,l=a.vertices[r+0],h=a.vertices[r+1],c=(l-e)/s,d=(h-i)/o;this._positionAttribute.setXYZ(t,l,h,0),this._normalAttribute.setXYZ(t,0,0,1),this._uvAttribute.setXY(t,c,d)}for(let e=0;e<u;e++){let t=3*e,i=a.elements[t+0],r=a.elements[t+1],s=a.elements[t+2];this._indexAttribute.setX(t+0,i),this._indexAttribute.setX(t+1,r),this._indexAttribute.setX(t+2,s)}}this.setAttribute("position",this._positionAttribute),this.setAttribute("normal",this._normalAttribute),this.setAttribute("uv",this._uvAttribute),this.setIndex(this._indexAttribute),this.setDrawRange(0,(a?.elementCount??1)*3)}clone(){let e=new bU(this._shape,this._curveSegments);return e.userData=uc(this.userData),e}},bV=class extends bk{constructor(e,t,i=0,r=12,s=3,a=wK.ODD){super(e,t,i,r,s,a),this.type="ShapeGeometry"}_computeBufferEstimatedSize(e){return 2*e.vertexCount*(2+this._bevelSegments)}_buildWall(e,t,i){let r=e[0];
3140for(let e=0,s=r.boundary.vertexCount;e<s;e++){let a=this._buildBevelVert(t,r,e),o=this._buildBevelVert(t,r,(e+1)%s);i.push(o.topP,a.topN,a.bottomN),i.push(o.topP,a.bottomN,o.bottomP)}}clone(){let e=new bV(this._shape,this._depth,this._bevel,this._curveSegments,this._bevelSegmentsInput);return e.userData=uc(this.userData),e}},bj=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,subdivisions:40,roundness:0,extrudeBevelSize:0,extrudeBevelSegments:3,windingRule:wK.ODD},e.parameters),r=Math.abs(i.width),s=Math.abs(i.height??i.width),a=Math.abs(i.depth??0),o=e.shape??t?.shape,l=o?.roundness??i.roundness;void 0!==o&&(o instanceof bp?(o.width!==r||o.height!==s)&&o.applySize(r,s):o=new bp(r,s).fromJSON(o),e.parameters?.roundness!==void 0&&e.parameters?.roundness>0&&o.update());let h=o??new bp(r,s);return{parameters:Object.assign(i,{width:r,height:s,depth:a,roundness:l}),shape:h}}static build(e){let{depth:t,extrudeBevelSize:i,extrudeBevelSegments:r,subdivisions:s,roundness:a,windingRule:o}=e.parameters;return e.shape.roundness=a,Object.assign(t<=0?new bU(e.shape,s,{windingRule:o}):new bV(e.shape,t,i,s,r,o),{userData:{...e,type:"VectorGeometry"}})}},bG=2*Math.PI,bH=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,spikes:64,angle:360,innerRadius:0,extrudeBevelSize:0,extrudeBevelSegments:1},e.parameters);return i.angle=tY.clamp(i.angle,0,360),{shape:e.shape&&e.shape instanceof bp?e.shape:new bp,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)})}}static build(e){let t,{width:i,height:r,spikes:s,angle:a,innerRadius:o,depth:l,extrudeBevelSize:h,extrudeBevelSegments:c}=e.parameters,d=e.shape,u=function(e,t,i,r,s,a){if(r>=bG)return s>30||s%4==0?(function(e,t,i,r=0,s=0,a=0){let o=.5522847498*t,l=.5522847498*i;e.addPoint(bX(s-t,a,s-t,a-l,s-t,a+l)),e.addPoint(bX(s,a+i,s-o,a+i,s+o,a+i)),e.addPoint(bX(s+t,a,s+t,a+l,s+t,a-l)),e.addPoint(bX(s,a-i,s+o,a-i,s-o,a-i)),r>0&&bQ(e,t,i,r)}(e,t,i,a),Math.round(s/4)):bW(e,r,s,t,i,a);let o={x:0,y:i},l=(r=Math.max(r,.001))+.5*Math.PI,h={x:Math.cos(l)*t,y:Math.sin(l)*i},c=function({px:e,py:t,cx:i,cy:r,rx:s,ry:a,largeArcFlag:o,sweepFlag:l}){var h,c;let d,u,p,f,m,g,v,y,x,b,w,S=[];if(0===s||0===a)return[];let _=(e-i)/2,A=(t-r)/2;if(0===_&&0===A)return[];let M=Math.pow(_,2)/Math.pow(s=Math.abs(s),2)+Math.pow(A,2)/Math.pow(a=Math.abs(a),2);M>1&&(s*=Math.sqrt(M),a*=Math.sqrt(M));let E=(h=s,c=a,d=Math.pow(h,2),u=Math.pow(c,2),p=Math.pow(_,2),(m=d*u-d*(f=Math.pow(A,2))-u*p)<0&&(m=0),m/=d*f+u*p,g=(m=Math.sqrt(m)*(o===l?-1:1))*h/c*A,v=-(m*c)/h*_,b=bg(1,0,y=(_-g)/h,x=(A-v)/c),w=bg(y,x,(-_-g)/h,(-A-v)/c),!l&&w>0&&(w-=bf),l&&w<0&&(w+=bf),{centerx:g+(e+i)/2,centery:v+(t+r)/2,ang1:b,ang2:w}),{ang1:C,ang2:T}=E,{centerx:P,centery:D}=E,I=Math.abs(T)/(bf/4);1e-7>Math.abs(1-I)&&(I=1);let O=Math.max(Math.ceil(I),1);T/=O;for(let e=0;e<O;e++)S.push(function(e,t){let i=1.5707963267948966===t?.551915024494:-1.5707963267948966===t?-.551915024494:1.3333333333333333*Math.tan(t/4),r=Math.cos(e),s=Math.sin(e),a=Math.cos(e+t),o=Math.sin(e+t);return[{x:r-s*i,y:s+r*i},{x:a+o*i,y:o-a*i},{x:a,y:o}]}(C,T)),C+=T;return S.map(e=>{let{x:t,y:i}=bm(e[0],s,a,P,D),{x:r,y:o}=bm(e[1],s,a,P,D),{x:l,y:h}=bm(e[2],s,a,P,D);return{x1:t,y1:i,x2:r,y2:o,x:l,y:h}})}({px:o.x,py:o.y,cx:h.x,cy:h.y,rx:t,ry:i,largeArcFlag:r>Math.PI,sweepFlag:!0});return s>30||s%c.length==0?function(e,t,i,r,s,a,o,l){let h=Math.round(s/r.length);e.addPoint(bq(t,i));for(let t=0,i=r.length;t<i;t++){let i=r[t],s=e.points[t],a=bq(i.x,i.y);s.controls[1].position.set(i.x1,i.y1),a.controls[0].position.set(i.x2,i.y2),e.addPoint(a)}return l>0?bY(e,a,o,l):e.addPoint(bq(0,0)),h}(e,o.x,o.y,c,s,t,i,a):bW(e,r,s,t,i,a)}(d,.5*i,.5*r,a*Math.PI/180,s,o);
3140return d.isClosed=!0,d.update(),0===a?(t=new rz).setAttribute("position",new rT([],3)):t=bj.create({shape:d,parameters:{subdivisions:u,depth:l,extrudeBevelSize:h,extrudeBevelSegments:c}}),Object.assign(t,{userData:{...e,type:"EllipseGeometry"}})}};function bW(e,t,i,r,s,a){let o=-t/i;for(let t=0;t<=i;t++){let i=o*t,a=Math.sin(i)*r,l=Math.cos(i)*s;e.addPoint(bq(a,l))}return t<bG?a>0?bY(e,r,s,a):e.addPoint(bq(0,0)):(e.removePoint(e.points[e.points.length-1]),a>0&&bQ(e,r,s,a)),1}function bq(e,t){return new x$(tY.generateUUID(),new tQ(e,t))}function bX(e,t,i,r,s,a){let o=bq(e,t);return o.controls[0].position.set(i,r),o.controls[1].position.set(s,a),o}function bY(e,t,i,r){bK(e,t,i,r).forEach(t=>e.addPoint(t))}function bQ(e,t,i,r){let s=bK(e,t,i,r),a=new bp;s.forEach(e=>a.addPoint(e)),a.isClosed=!0,e.shapeHoles.push(a)}function bK(e,t,i,r){let s=r*t/100,a=Math.abs(i)/Math.abs(t)*s,o=new tQ(s/t,a/i),l=e.points.map(e=>{let t=e.clone();return t.uuid=tY.generateUUID(),t}).reverse();return l.forEach(e=>{e.position.multiply(o);let t=e.controls[0].position.clone().multiply(o),i=e.controls[1].position.clone().multiply(o);e.controls[0].position.copy(i),e.controls[1].position.copy(t)}),l}var bZ=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,revolutions:2,segments:40,pathRadius:10,pathType:0,pathSegments:30,cornerRadius:30,cornerSegments:4},e.parameters),r=Math.abs(i.width),s=Math.abs(i.height??r),a=Math.abs(i.depth??r),o=Math.abs(Math.min(r,a))/2;return{parameters:Object.assign(i,{width:r,height:s,depth:a,radius:o,segments:Math.round(i.segments),pathSegments:Math.round(i.pathSegments),cornerSegments:Math.round(i.cornerSegments)})}}static build(e){let{width:t,height:i,depth:r,radius:s,revolutions:a,segments:o,pathRadius:l,pathType:h,pathSegments:c,cornerRadius:d,cornerSegments:u}=e.parameters;return Object.assign(new b$(!1,t,i,r,s,a,o,l,h,c,d,u),{userData:{...e,type:"HelixGeometry"}})}},bJ=new rC([0,0,0],1),b$=class extends rz{constructor(e=!0,t=1,i=1,r=1,s=1,a=1,o=1,l=1,h=1,c=1,d=1,u=1){if(super(),0===a)return;let p=e&&1===a;p&&(u=0),d>100&&(d=100),0===d&&(u=0);let f=()=>new iv,m=new iv,g=f(),v=f(),y=f(),x,b,w,S,_,A,M,E,C=f(),T=f(),P=f(),D=f(),I=f(),O=f(),R=f(),L=f(),B=i-2*l+.001,z=B/a,F=Math.ceil(o*a),N=F+1,k=B/F,U=-B/2,V=c+1,j=2*Math.PI/c,G=Math.PI/2/u,H=Math.min((1-d/100)*l,l-.01),W=l-H,q=0,X=2*u+2,Y=V*X/2,Q=Y+V*N,K=Math.max(0,V*(N+X)),[Z,J,$]=[3,3,2].map(e=>Array(K*e).fill(0)),ee=[],et=s-l;function ei(t,i){let r=Math.PI/2;E=2*Math.PI*((A=i*k)%z)/z+r,A+=U,M=Math.sin(E)*et,_=Math.cos(E)*et,e?t.set(_,M,A):t.set(_,A,M)}ei(m,-.0000000001),ei(g,0),C.copy(m),ei(m,1);let er=m.distanceTo(g),es=p?0:W+H,ea=er*F+2*es,en=ea-es;for(let t=0;t<=F;t++){ei(v,t),L.subVectors(v,C).normalize(),C.copy(v),O.copy(v).setComponent(+e+1,0).normalize(),R.crossVectors(L,O).normalize();let i=0===t,r=t===F,s=i?3*Math.PI/2:G,a=i?H:en,o=i?V:Q,h=i?0:K-V,d=L.clone().multiplyScalar(i?-W:W).add(v),f=L.clone().multiplyScalar(i?-1:1).normalize();for(let e=0;e<V;e++){let x=e*j;if(T.addVectors(m.copy(O).multiplyScalar(l*Math.cos(x)),g.copy(R).multiplyScalar(l*Math.sin(x))),P.copy(T).normalize(),i||r){p||(q=h+e,[0,1,2].forEach(e=>{Z[3*q+e]=d.getComponent(e),J[3*q+e]=f.getComponent(e)}),$[2*q]=+r,$[2*q+1]=e/c),g.copy(P).multiplyScalar(H),y.addVectors(v,g);for(let t=0;t<u;t++){let r=t*G+s;D.addVectors(m.copy(L).multiplyScalar(W*Math.sin(r)),g.copy(P).multiplyScalar(W*Math.cos(r))),I.copy(D).normalize(),g.addVectors(y,D),D.normalize(),q=o+t*V+e,[0,1,2].forEach(e=>{Z[3*q+e]=g.getComponent(e),J[3*q+e]=I.getComponent(e)});let l=+i+Math.sin(r);$[2*q]=(a+W*l)/ea,$[2*q+1]=e/c}}g.addVectors(v,T),q=Y+t*V+e,[0,1,2].forEach(e=>{Z[3*q+e]=g.getComponent(e),J[3*q+e]=P.getComponent(e)}),$[2*q]=(es+t*er)/ea,$[2*q+1]=e/c}}let eo=N+2*u+2,[el,eh]=[+p,eo-1];for(let e=el;e<=eh-1;e++){let t=p&&e===eh-1;for(let i=0;i<V-1;i++)b=(x=e*V+i)+1,w=(t?i:x)+V,S=(t?i+1:b)+V,0===e?ee.push(b,S,w):e===eo-2?ee.push(x,b,w):ee.push(x,b,w,b,S,w)}this.setIndex(ee),this.setAttribute("position",new rT(Z,3)),this.setAttribute("normal",new rT(J,3)),this.setAttribute("uv",new rT($,2))}getClosedTorusIndicesForBooleanOrSubdiv(){let e=this.userData.parameters,t=Math.ceil(e.tubularSegments),i=e.radialSegments+1,r=Array.from(this.getIndex().array),s,a,o,l,h=6*(t-1)*e.radialSegments,c=t==t;for(let d=0;d<e.radialSegments;d++)a=(s=t*i+d)+1,o=(c?d:s)+i,l=(c?d+1:a)+i,r[h++]=s,r[h++]=a,r[h++]=o,r[h++]=a,r[h++]=l,r[h++]=o;return r.length=h,bJ.array=r,bJ.count=r.length,bJ}},b0=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,detail:0,corner:0,cornerSides:4},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}
3140static build(e){let{width:t,height:i,depth:r,detail:s,corner:a,cornerSides:o}=e.parameters,l=0===s&&0!==a?new b1(.5*t,a,o):new oI(.5*t,s);return l.scale(1,i/t,r/t),Object.assign(l,{userData:{...e,type:"IcosahedronGeometry"}})}},b1=class extends xY{constructor(e=1,t=.2,i=4){let r=(1+Math.sqrt(5))/2,s="IcosahedronGeometry";super([-1,r,0,1,r,0,-1,-r,0,1,-r,0,0,-1,r,0,1,r,0,-1,-r,0,1,-r,r,0,-1,r,0,1,-r,0,-1,-r,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],s,e,t,i),this.type=s}static fromJSON(e){return new b1(e.radius,e.corner,e.cornerSides)}},b2=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){(e.parameters?.points??[]).forEach(e=>{Array.isArray(e)&&(e.x=e[0],e.y=e[1])});let i=Object.assign({},t?.parameters??{width:100,segments:64,verticalSegments:64,points:[{x:0,y:-50,id:0},{x:50,y:-50,id:1},{x:50,y:50,id:2},{x:0,y:50,id:3}]},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{points:t,segments:i,verticalSegments:r}=e.parameters,s=new od;s.moveTo(t[0].x,t[0].y),s.bezierCurveTo(t[1].x,t[1].y,t[2].x,t[2].y,t[3].x,t[3].y);let a=new on(s.extractPoints(r).shape,i);return a.rotateZ(Math.PI),Object.assign(a,{userData:{...e,type:"LatheGeometry"}})}},b3=new iX,b4=new rl,b5=new iv,b6=class extends tL{constructor(){super(),this.uuid=tY.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.elementsNeedUpdate=!1,this.verticesNeedUpdate=!1,this.uvsNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.lineDistancesNeedUpdate=!1,this.groupsNeedUpdate=!1}applyMatrix4(e){let t=new tK().getNormalMatrix(e);for(let t=0,i=this.vertices.length;t<i;t++)this.vertices[t].applyMatrix4(e);for(let e=0,i=this.faces.length;e<i;e++){let i=this.faces[e];i.normal.applyMatrix3(t).normalize();for(let e=0,r=i.vertexNormals.length;e<r;e++)i.vertexNormals[e].applyMatrix3(t).normalize()}return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this.verticesNeedUpdate=!0,this.normalsNeedUpdate=!0,this}rotateX(e){return b3.makeRotationX(e),this.applyMatrix4(b3),this}rotateY(e){return b3.makeRotationY(e),this.applyMatrix4(b3),this}rotateZ(e){return b3.makeRotationZ(e),this.applyMatrix4(b3),this}translate(e,t,i){return b3.makeTranslation(e,t,i),this.applyMatrix4(b3),this}scale(e,t,i){return b3.makeScale(e,t,i),this.applyMatrix4(b3),this}lookAt(e){return b4.lookAt(e),b4.updateMatrix(),this.applyMatrix4(b4.matrix),this}fromBufferGeometry(e){let t=this,i=null!==e.index?e.index:void 0,r=e.attributes;if(void 0===r.position)return console.error("THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion."),this;let s=r.position,a=r.normal,o=r.color,l=r.uv,h=r.uv2;void 0!==h&&(this.faceVertexUvs[1]=[]);for(let e=0;e<s.count;e++)t.vertices.push(new iv().fromBufferAttribute(s,e)),void 0!==o&&t.colors.push(new ii().fromBufferAttribute(o,e));function c(e,i,r,s){let c=void 0===o?[]:[t.colors[e].clone(),t.colors[i].clone(),t.colors[r].clone()],d=void 0===a?[]:[new iv().fromBufferAttribute(a,e),new iv().fromBufferAttribute(a,i),new iv().fromBufferAttribute(a,r)],u=new b9(e,i,r,d,c,s);t.faces.push(u),void 0!==l&&t.faceVertexUvs[0].push([new tQ().fromBufferAttribute(l,e),new tQ().fromBufferAttribute(l,i),new tQ().fromBufferAttribute(l,r)]),void 0!==h&&t.faceVertexUvs[1].push([new tQ().fromBufferAttribute(h,e),new tQ().fromBufferAttribute(h,i),new tQ().fromBufferAttribute(h,r)])}let d=e.groups;if(d.length>0)for(let e=0;e<d.length;e++){let t=d[e],r=t.start,s=t.count;for(let e=r,a=r+s;e<a;e+=3)void 0!==i?c(i.getX(e),i.getX(e+1),i.getX(e+2),t.materialIndex):c(e,e+1,e+2,t.materialIndex)}else if(void 0!==i)for(let e=0;e<i.count;e+=3)c(i.getX(e),i.getX(e+1),i.getX(e+2));else for(let e=0;e<s.count;e+=3)c(e,e+1,e+2);
3140return this.computeFaceNormals(),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone()),null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(b5).negate(),this.translate(b5.x,b5.y,b5.z),this}normalize(){this.computeBoundingSphere();let e=this.boundingSphere.center,t=this.boundingSphere.radius,i=0===t?1:1/t,r=new iX;return r.set(i,0,0,-i*e.x,0,i,0,-i*e.y,0,0,i,-i*e.z,0,0,0,1),this.applyMatrix4(r),this}computeFaceNormals(){let e=new iv,t=new iv;for(let i=0,r=this.faces.length;i<r;i++){let r=this.faces[i],s=this.vertices[r.a],a=this.vertices[r.b],o=this.vertices[r.c];e.subVectors(o,a),t.subVectors(s,a),e.cross(t),e.normalize(),r.normal.copy(e)}}computeVertexNormals(e=!0){let t=Array(this.vertices.length);for(let e=0,i=this.vertices.length;e<i;e++)t[e]=new iv;if(e){let e=new iv,i=new iv;for(let r=0,s=this.faces.length;r<s;r++){let s=this.faces[r],a=this.vertices[s.a],o=this.vertices[s.b],l=this.vertices[s.c];e.subVectors(l,o),i.subVectors(a,o),e.cross(i),t[s.a].add(e),t[s.b].add(e),t[s.c].add(e)}}else{this.computeFaceNormals();for(let e=0,i=this.faces.length;e<i;e++){let i=this.faces[e];t[i.a].add(i.normal),t[i.b].add(i.normal),t[i.c].add(i.normal)}}for(let e=0,i=this.vertices.length;e<i;e++)t[e].normalize();for(let e=0,i=this.faces.length;e<i;e++){let i=this.faces[e],r=i.vertexNormals;3===r.length?(r[0].copy(t[i.a]),r[1].copy(t[i.b]),r[2].copy(t[i.c])):(r[0]=t[i.a].clone(),r[1]=t[i.b].clone(),r[2]=t[i.c].clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)}computeFlatVertexNormals(){this.computeFaceNormals();for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e],i=t.vertexNormals;3===i.length?(i[0].copy(t.normal),i[1].copy(t.normal),i[2].copy(t.normal)):(i[0]=t.normal.clone(),i[1]=t.normal.clone(),i[2]=t.normal.clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)}computeMorphNormals(){for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e];
3140t.__originalFaceNormal?t.__originalFaceNormal.copy(t.normal):t.__originalFaceNormal=t.normal.clone(),t.__originalVertexNormals||(t.__originalVertexNormals=[]);for(let e=0,i=t.vertexNormals.length;e<i;e++)t.__originalVertexNormals[e]?t.__originalVertexNormals[e].copy(t.vertexNormals[e]):t.__originalVertexNormals[e]=t.vertexNormals[e].clone()}let e=new b6;e.faces=this.faces;for(let t=0,i=this.morphTargets.length;t<i;t++){if(!this.morphNormals[t]){this.morphNormals[t]={},this.morphNormals[t].faceNormals=[],this.morphNormals[t].vertexNormals=[];let e=this.morphNormals[t].faceNormals,i=this.morphNormals[t].vertexNormals;for(let t=0,r=this.faces.length;t<r;t++){let t=new iv,r={a:new iv,b:new iv,c:new iv};e.push(t),i.push(r)}}let i=this.morphNormals[t];e.vertices=this.morphTargets[t].vertices,e.computeFaceNormals(),e.computeVertexNormals();for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e],r=i.faceNormals[e],s=i.vertexNormals[e];r.copy(t.normal),s.a.copy(t.vertexNormals[0]),s.b.copy(t.vertexNormals[1]),s.c.copy(t.vertexNormals[2])}}for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e];
3140t.normal=t.__originalFaceNormal,t.vertexNormals=t.__originalVertexNormals}}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new ib),this.boundingBox.setFromPoints(this.vertices)}computeBoundingSphere(){null===this.boundingSphere&&(this.boundingSphere=new iN),this.boundingSphere.setFromPoints(this.vertices)}merge(e,t,i=0){if(!(e&&e.isGeometry)){console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",e);return}let r,s=this.vertices.length,a=this.vertices,o=e.vertices,l=this.faces,h=e.faces,c=this.colors,d=e.colors;void 0!==t&&(r=new tK().getNormalMatrix(t));for(let e=0,i=o.length;e<i;e++){let i=o[e].clone();void 0!==t&&i.applyMatrix4(t),a.push(i)}for(let e=0,t=d.length;e<t;e++)c.push(d[e].clone());for(let e=0,t=h.length;e<t;e++){let t=h[e],a,o,c=t.vertexNormals,d=t.vertexColors,u=new b9(t.a+s,t.b+s,t.c+s);u.normal.copy(t.normal),void 0!==r&&u.normal.applyMatrix3(r).normalize();for(let e=0,t=c.length;e<t;e++)a=c[e].clone(),void 0!==r&&a.applyMatrix3(r).normalize(),u.vertexNormals.push(a);u.color.copy(t.color);for(let e=0,t=d.length;e<t;e++)o=d[e],u.vertexColors.push(o.clone());u.materialIndex=t.materialIndex+i,l.push(u)}for(let t=0,i=e.faceVertexUvs.length;t<i;t++){let i=e.faceVertexUvs[t];void 0===this.faceVertexUvs[t]&&(this.faceVertexUvs[t]=[]);for(let e=0,r=i.length;e<r;e++){let r=i[e],s=[];for(let e=0,t=r.length;e<t;e++)s.push(r[e].clone());this.faceVertexUvs[t].push(s)}}}mergeMesh(e){if(!(e&&e.isMesh)){console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",e);return}e.matrixAutoUpdate&&e.updateMatrix(),this.merge(e.geometry,e.matrix)}mergeVertices(e=4){let t={},i=[],r=[],s=Math.pow(10,e);for(let e=0,a=this.vertices.length;e<a;e++){let a=this.vertices[e],o=Math.round(a.x*s)+"_"+Math.round(a.y*s)+"_"+Math.round(a.z*s);void 0===t[o]?(t[o]=e,i.push(this.vertices[e]),r[e]=i.length-1):r[e]=r[t[o]]}let a=[];for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e];t.a=r[t.a],t.b=r[t.b],t.c=r[t.c];let i=[t.a,t.b,t.c];for(let t=0;t<3;t++)if(i[t]===i[(t+1)%3]){a.push(e);break}}for(let e=a.length-1;e>=0;e--){let t=a[e];this.faces.splice(t,1);for(let e=0,i=this.faceVertexUvs.length;e<i;e++)this.faceVertexUvs[e].splice(t,1)}let o=this.vertices.length-i.length;return this.vertices=i,o}setFromPoints(e){this.vertices=[];for(let t=0,i=e.length;t<i;t++){let i=e[t];this.vertices.push(new iv(i.x,i.y,i.z||0))}return this}sortFacesByMaterialIndex(){let e=this.faces,t=e.length;for(let i=0;i<t;i++)e[i]._id=i;e.sort(function(e,t){return e.materialIndex-t.materialIndex});let i=this.faceVertexUvs[0],r=this.faceVertexUvs[1],s,a;i&&i.length===t&&(s=[]),r&&r.length===t&&(a=[]);for(let o=0;o<t;o++){let t=e[o]._id;s&&s.push(i[t]),a&&a.push(r[t])}s&&(this.faceVertexUvs[0]=s),a&&(this.faceVertexUvs[1]=a)}toJSON(){let e={metadata:{version:4.5,type:"Geometry",generator:"Geometry.toJSON"}};if(e.uuid=this.uuid,e.type=this.type,""!==this.name&&(e.name=this.name),void 0!==this.parameters){let t=this.parameters;for(let i in t)void 0!==t[i]&&(e[i]=t[i]);return e}let t=[];for(let e=0;e<this.vertices.length;e++){let i=this.vertices[e];t.push(i.x,i.y,i.z)}let i=[],r=[],s={},a=[],o={},l=[],h={};for(let e=0;e<this.faces.length;e++){let t=this.faces[e],r=void 0!==this.faceVertexUvs[0][e],s=t.normal.length()>0,a=t.vertexNormals.length>0,o=1!==t.color.r||1!==t.color.g||1!==t.color.b,l=t.vertexColors.length>0,h=0;if(h=c(0,0,0),h=c(h,1,!0),h=c(h,2,!1),h=c(h,3,r),h=c(h,4,s),h=c(h,5,a),h=c(h,6,o),h=c(h,7,l),i.push(h),i.push(t.a,t.b,t.c),i.push(t.materialIndex),r){let t=this.faceVertexUvs[0][e];i.push(p(t[0]),p(t[1]),p(t[2]))}if(s&&i.push(d(t.normal)),a){let e=t.vertexNormals;i.push(d(e[0]),d(e[1]),d(e[2]))}if(o&&i.push(u(t.color)),l){let e=t.vertexColors;i.push(u(e[0]),u(e[1]),u(e[2]))}}function c(e,t,i){return i?e|1<<t:e&~(1<<t)}function d(e){let t=e.x.toString()+e.y.toString()+e.z.toString();return void 0!==s[t]||(s[t]=r.length/3,r.push(e.x,e.y,e.z)),s[t]}function u(e){let t=e.r.toString()+e.g.toString()+e.b.toString();return void 0!==o[t]||(o[t]=a.length,a.push(e.getHex())),o[t]}function p(e){let t=e.x.toString()+e.y.toString();return void 0!==h[t]||(h[t]=l.length/2,l.push(e.x,e.y)),h[t]}return e.data={},e.data.vertices=t,e.data.normals=r,a.length>0&&(e.data.colors=a),l.length>0&&(e.data.uvs=[l]),e.data.faces=i,e}clone(){return new b6().copy(this)}copy(e){this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=e.name;let t=e.vertices;for(let e=0,i=t.length;e<i;e++)this.vertices.push(t[e].clone());let i=e.colors;for(let e=0,t=i.length;e<t;e++)this.colors.push(i[e].clone());let r=e.faces;for(let e=0,t=r.length;e<t;e++)this.faces.push(r[e].clone());for(let t=0,i=e.faceVertexUvs.length;t<i;t++){let i=e.faceVertexUvs[t];void 0===this.faceVertexUvs[t]&&(this.faceVertexUvs[t]=[]);for(let e=0,r=i.length;e<r;e++){let r=i[e],s=[];for(let e=0,t=r.length;e<t;e++){let t=r[e];s.push(t.clone())}this.faceVertexUvs[t].push(s)}}let s=e.morphTargets;for(let e=0,t=s.length;e<t;e++){let t={};if(t.name=s[e].name,void 0!==s[e].vertices){t.vertices=[];for(let i=0,r=s[e].vertices.length;i<r;i++)t.vertices.push(s[e].vertices[i].clone())}if(void 0!==s[e].normals){t.normals=[];for(let i=0,r=s[e].normals.length;i<r;i++)t.normals.push(s[e].normals[i].clone())}this.morphTargets.push(t)}let a=e.morphNormals;for(let e=0,t=a.length;e<t;e++){let t={};if(void 0!==a[e].vertexNormals){t.vertexNormals=[];for(let i=0,r=a[e].vertexNormals.length;i<r;i++){let r=a[e].vertexNormals[i],s={};s.a=r.a.clone(),s.b=r.b.clone(),s.c=r.c.clone(),t.vertexNormals.push(s)}}if(void 0!==a[e].faceNormals){t.faceNormals=[];for(let i=0,r=a[e].faceNormals.length;i<r;i++)t.faceNormals.push(a[e].faceNormals[i].clone())}this.morphNormals.push(t)}let o=e.skinWeights;for(let e=0,t=o.length;e<t;e++)this.skinWeights.push(o[e].clone());let l=e.skinIndices;for(let e=0,t=l.length;e<t;e++)this.skinIndices.push(l[e].clone());let h=e.lineDistances;for(let e=0,t=h.length;e<t;e++)this.lineDistances.push(h[e]);let c=e.boundingBox;null!==c&&(this.boundingBox=c.clone());let d=e.boundingSphere;return null!==d&&(this.boundingSphere=d.clone()),this.elementsNeedUpdate=e.elementsNeedUpdate,this.verticesNeedUpdate=e.verticesNeedUpdate,this.uvsNeedUpdate=e.uvsNeedUpdate,this.normalsNeedUpdate=e.normalsNeedUpdate,this.colorsNeedUpdate=e.colorsNeedUpdate,this.lineDistancesNeedUpdate=e.lineDistancesNeedUpdate,this.groupsNeedUpdate=e.groupsNeedUpdate,this}toBufferGeometry(){let e=new b8().fromGeometry(this),t=new rz,i=new Float32Array(3*e.vertices.length);if(t.setAttribute("position",wi.call(new rM(i,3),e.vertices)),e.normals.length>0){let i=new Float32Array(3*e.normals.length);t.setAttribute("normal",wi.call(new rM(i,3),e.normals))}if(e.colors.length>0){let i=new Float32Array(3*e.colors.length);t.setAttribute("color",we.call(new rM(i,3),e.colors))}if(e.uvs.length>0){let i=new Float32Array(2*e.uvs.length);t.setAttribute("uv",wt.call(new rM(i,2),e.uvs))}if(e.uvs2.length>0){let i=new Float32Array(2*e.uvs2.length);t.setAttribute("uv2",wt.call(new rM(i,2),e.uvs2))}for(let i in t.groups=e.groups,e.morphTargets){let r=[],s=e.morphTargets[i];for(let e=0,t=s.length;e<t;e++){let t=s[e],i=new rT(3*t.data.length,3);i.name=t.name,r.push(wi.call(i,t.data))}t.morphAttributes[i]=r}if(e.skinIndices.length>0){let i=new rT(4*e.skinIndices.length,4);t.setAttribute("skinIndex",wr.call(i,e.skinIndices))}if(e.skinWeights.length>0){let i=new rT(4*e.skinWeights.length,4);t.setAttribute("skinWeight",wr.call(i,e.skinWeights))}
3140return null!==e.boundingSphere&&(t.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(t.boundingBox=e.boundingBox.clone()),t}computeTangents(){console.error("THREE.Geometry: .computeTangents() has been removed.")}computeLineDistances(){console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.")}applyMatrix(e){return console.warn("THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(e)}dispose(){this.dispatchEvent({type:"dispose"})}static createBufferGeometryFromObject(e){let t=new rz,i=e.geometry;if(e.isPoints||e.isLine){let e=new rT(3*i.vertices.length,3),r=new rT(3*i.colors.length,3);if(t.setAttribute("position",wi.call(e,i.vertices)),t.setAttribute("color",we.call(r,i.colors)),i.lineDistances&&i.lineDistances.length===i.vertices.length){let e=new rT(i.lineDistances.length,1);t.setAttribute("lineDistance",b7.call(e,i.lineDistances))}null!==i.boundingSphere&&(t.boundingSphere=i.boundingSphere.clone()),null!==i.boundingBox&&(t.boundingBox=i.boundingBox.clone())}else e.isMesh&&(t=i.toBufferGeometry());return t}};b6.prototype.isGeometry=!0;var b8=class{constructor(){this.vertices=[],this.normals=[],this.colors=[],this.uvs=[],this.uvs2=[],this.groups=[],this.morphTargets={},this.skinWeights=[],this.skinIndices=[],this.boundingBox=null,this.boundingSphere=null,this.verticesNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.uvsNeedUpdate=!1,this.groupsNeedUpdate=!1}computeGroups(e){let t=[],i,r,s,a=e.faces;for(r=0;r<a.length;r++){let e=a[r];e.materialIndex!==s&&(s=e.materialIndex,void 0!==i&&(i.count=3*r-i.start,t.push(i)),i={start:3*r,materialIndex:s})}void 0!==i&&(i.count=3*r-i.start,t.push(i)),this.groups=t}fromGeometry(e){let t=e.faces,i=e.vertices,r=e.faceVertexUvs,s=r[0]&&r[0].length>0,a=r[1]&&r[1].length>0,o=e.morphTargets,l=o.length,h;if(l>0){h=[];for(let e=0;e<l;e++)h[e]={name:o[e].name,data:[]};this.morphTargets.position=h}let c=e.morphNormals,d=c.length,u;if(d>0){u=[];for(let e=0;e<d;e++)u[e]={name:c[e].name,data:[]};this.morphTargets.normal=u}let p=e.skinIndices,f=e.skinWeights,m=p.length===i.length,g=f.length===i.length;i.length>0&&0===t.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(let e=0;e<t.length;e++){let v=t[e];this.vertices.push(i[v.a],i[v.b],i[v.c]);let y=v.vertexNormals;if(3===y.length)this.normals.push(y[0],y[1],y[2]);else{let e=v.normal;this.normals.push(e,e,e)}let x=v.vertexColors;if(3===x.length)this.colors.push(x[0],x[1],x[2]);else{let e=v.color;this.colors.push(e,e,e)}if(!0===s){let t=r[0][e];void 0!==t?this.uvs.push(t[0],t[1],t[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ",e),this.uvs.push(new tQ,new tQ,new tQ))}if(!0===a){let t=r[1][e];void 0!==t?this.uvs2.push(t[0],t[1],t[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ",e),this.uvs2.push(new tQ,new tQ,new tQ))}for(let e=0;e<l;e++){let t=o[e].vertices;h[e].data.push(t[v.a],t[v.b],t[v.c])}for(let t=0;t<d;t++){let i=c[t].vertexNormals[e];u[t].data.push(i.a,i.b,i.c)}m&&this.skinIndices.push(p[v.a],p[v.b],p[v.c]),g&&this.skinWeights.push(f[v.a],f[v.b],f[v.c])}return this.computeGroups(e),this.verticesNeedUpdate=e.verticesNeedUpdate,this.normalsNeedUpdate=e.normalsNeedUpdate,this.colorsNeedUpdate=e.colorsNeedUpdate,this.uvsNeedUpdate=e.uvsNeedUpdate,this.groupsNeedUpdate=e.groupsNeedUpdate,null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone()),this}},b9=class{constructor(e,t,i,r,s,a=0){this.a=e,this.b=t,this.c=i,this.normal=r&&r.isVector3?r:new iv,this.vertexNormals=Array.isArray(r)?r:[],this.color=s&&s.isColor?s:new ii,this.vertexColors=Array.isArray(s)?s:[],this.materialIndex=a}clone(){return new this.constructor().copy(this)}copy(e){this.a=e.a,this.b=e.b,this.c=e.c,this.normal.copy(e.normal),this.color.copy(e.color),this.materialIndex=e.materialIndex;for(let t=0,i=e.vertexNormals.length;t<i;t++)this.vertexNormals[t]=e.vertexNormals[t].clone();for(let t=0,i=e.vertexColors.length;t<i;t++)this.vertexColors[t]=e.vertexColors[t].clone();return this}};function b7(e){return this.array.set(e),this}function we(e){let t=this.array,i=0;for(let r=0,s=e.length;r<s;r++){let s=e[r];void 0===s&&(console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined",r),s=new ii),t[i++]=s.r,t[i++]=s.g,t[i++]=s.b}return this}function wt(e){let t=this.array,i=0;for(let r=0,s=e.length;r<s;r++){let s=e[r];void 0===s&&(console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined",r),s=new tQ),t[i++]=s.x,t[i++]=s.y}return this}function wi(e){let t=this.array,i=0;for(let r=0,s=e.length;r<s;r++){let s=e[r];void 0===s&&(console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined",r),s=new iv),t[i++]=s.x,t[i++]=s.y,t[i++]=s.z}return this}function wr(e){let t=this.array,i=0;for(let r=0,s=e.length;r<s;r++){let s=e[r];void 0===s&&(console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined",r),s=new ic),t[i++]=s.x,t[i++]=s.y,t[i++]=s.z,t[i++]=s.w}return this}var ws=["a","b","c"];function wa(e,t,i){let r=Math.min(e,t),s=Math.max(e,t);return i.get(r+"_"+s)}function wn(e,t,i,r,s,a){let o=Math.min(e,t),l=Math.max(e,t),h=o+"_"+l,c;r.has(h)?c=r.get(h):(c={a:i[o],b:i[l],newEdge:null,faces:[]},r.set(h,c)),c.faces.push(s),a[e].edges.push(c),a[t].edges.push(c)}function wo(e,t,i,r,s){e.push(new b9(t,i,r,void 0,void 0,s))}function wl(e,t){return Math.abs(t-e)/2+Math.min(e,t)}function wh(e,t,i,r){e.push([t.clone(),i.clone(),r.clone()])}var wc=class{constructor(e=1){this.subdivisions=e}modify(e){(e=e instanceof rz?new b6().fromBufferGeometry(e):e.clone()).mergeVertices();let t=this.subdivisions;for(;t-- >0;)this._smooth(e);return e.computeFaceNormals(),e.computeVertexNormals(),e}_smooth(e){let t=new iv,i,r,s,a,o,l=e.vertices,h=e.faces,c=e.faceVertexUvs[0],d=void 0!==c&&c.length>0,u=[],p=new Map;!function(e,t,i,r){let s,a,o;for(s=0,a=e.length;s<a;s++)i[s]={edges:[]};for(s=0,a=t.length;s<a;s++)wn((o=t[s]).a,o.b,e,r,o,i),wn(o.b,o.c,e,r,o,i),wn(o.c,o.a,e,r,o,i)}(l,h,u,p);let f=[],m,g,v,y,x,b,w;for(let e of Array.from(p.keys())){for(g=p.get(e),v=new iv,x=3/8,b=1/8,2!=(w=g.faces.length)&&(x=.5,b=0),v.addVectors(g.a,g.b).multiplyScalar(x),t.set(0,0,0),a=0;a<w;a++){for(y=g.faces[a],o=0;o<3&&!((m=l[function(e,t){switch(t){case"c":return e.c;case"b":return e.b;default:return e.a}}
3140(y,ws[o])])!==g.a&&m!==g.b);o++);m&&t.add(m)}t.multiplyScalar(b),v.add(t),g.newEdge=f.length,f.push(v)}let S,_,A,M,E,C,T,P=[];for(r=0,s=l.length;r<s;r++){for(C=l[r],3==(i=(E=u[r].edges).length)?S=3/16:i>3&&(S=3/(8*i)),_=1-i*Number(S),A=S,i<=2&&2==i&&(_=3/4,A=1/8),T=C.clone().multiplyScalar(_),t.set(0,0,0),a=0;a<i;a++)m=(M=E[a]).a!==C?M.a:M.b,t.add(m);t.multiplyScalar(Number(A)),T.add(t),P.push(T)}let D=P.concat(f),I=P.length,O,R,L,B=[],z=[],F,N,k,U,V=new tQ,j=new tQ,G=new tQ;for(r=0,s=h.length;r<s;r++)wo(B,O=Number(wa((y=h[r]).a,y.b,p).newEdge)+I,R=Number(wa(y.b,y.c,p).newEdge)+I,L=Number(wa(y.c,y.a,p).newEdge)+I,y.materialIndex),wo(B,y.a,O,L,y.materialIndex),wo(B,y.b,R,O,y.materialIndex),wo(B,y.c,L,R,y.materialIndex),d&&(N=(F=c[r])[0],k=F[1],U=F[2],V.set(wl(N.x,k.x),wl(N.y,k.y)),j.set(wl(k.x,U.x),wl(k.y,U.y)),G.set(wl(N.x,U.x),wl(N.y,U.y)),wh(z,V,j,G),wh(z,N,V,G),wh(z,k,j,V),wh(z,U,G,j));e.vertices=D,e.faces=B,d&&(e.faceVertexUvs[0]=z)}},wd=new iv,wu=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=e.geometry??t?.geometry??new rz().copy(new rJ(100,100,100)),r;void 0===t?(i.computeBoundingBox(),i.boundingBox.getSize(wd),r={width:wd.x,height:wd.y,depth:wd.z,subdivisions:0}):r=t.parameters;let s={...r,...e.parameters};return{parameters:{width:Math.abs(s.width),height:Math.abs(s.height),depth:Math.abs(s.depth),subdivisions:Math.abs(s.subdivisions)},geometry:i}}static build(e){let{width:t,height:i,depth:r,subdivisions:s}=e.parameters,a=e.geometry??new rz().copy(new rJ(100,100,100)),o=a.userData.parameters;void 0===o?(a.computeBoundingBox(),a.boundingBox.getSize(wd)):wd.set(o.width,o.height,o.depth),(t!==wd.x||i!==wd.y||r!==wd.z)&&a.scale(0===wd.x?1:t/wd.x,0===wd.y?1:i/wd.y,0===wd.z?1:r/wd.z);let l=a.originalGeometry;try{s>0?(void 0===l||o?.subdivisions!==s)&&(void 0===l&&(l=a),a=new wc(s).modify(l).toBufferGeometry()):(void 0!==l&&(a=l),l=void 0,void 0===a.getAttribute("normal")&&a.computeVertexNormals())}catch{void 0!==l&&(a=l),l=void 0,void 0===a.getAttribute("normal")&&a.computeVertexNormals()}return void 0!==l&&Object.assign(a,{originalGeometry:l}),delete e.geometry,Object.assign(a,{userData:{...e,type:"NonParametricGeometry"}})}static loadFromUrl(e,t,i){new lm(i).load(e,e=>{let i=this.normalizeInputs({geometry:e});e.boundingBox.getSize(wd);let r=100/wd.x;Object.assign(i.parameters,{width:100,height:wd.y*r,depth:wd.z*r}),t(this.build(i))})}},wp=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,spikes:5,cornerRadius:0,extrudeBevelSize:0,extrudeBevelSegments:3},e.parameters);return{shape:e.shape&&e.shape instanceof bp?e.shape:new bp,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)})}}static build(e){let{width:t,height:i,spikes:r,cornerRadius:s,depth:a,extrudeBevelSize:o,extrudeBevelSegments:l}=e.parameters,h=e.shape,c=.5*t,d=.5*i,u=2*Math.PI/r;for(let e=0;e<r;e++){let t=u*e,i=0+Math.sin(t)*c,r=0+Math.cos(t)*d;h.addPoint(h.createPoint(i,r))}h.isClosed=!0;for(let e=0,t=h.points.length;e<t;e++)h.points[e].roundness=s;return h.roundness=s,h.update(),Object.assign(bj.create({shape:h,parameters:{roundness:s,depth:a,extrudeBevelSize:o,extrudeBevelSegments:l}}),{userData:{...e,type:"PolygonGeometry"}})}},wf=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,radialSegments:4,heightSegments:1,cornerRadius:0,cornerSegments:8,openEnded:!1},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,height:i,depth:r,radialSegments:s,heightSegments:a,openEnded:o,cornerRadius:l,cornerSegments:h}=e.parameters,c=new wv(.5*t,i,s,a,o,l,h);return c.scale(1,1,r/t),Object.assign(c,{userData:{...e,type:"PyramidGeometry"}})}};function wm(e,t,i){i.x=e.x*t.x,i.y=e.y,i.z=e.x*t.y}function wg(e,t,i,r,s,a){let o=t.clone().sub(e),l=i.clone().sub(e),h=o.angleTo(l);
vendor: 1,449 bytes, line 3140
3140if(o.normalize(),l.normalize(),r===s){let t=o.add(l).normalize();a.copy(e).addScaledVector(t,r/Math.sin(h/2))}else{let t=o.angleTo(l);a.copy(e),a.addScaledVector(o,s/Math.sin(t)),a.addScaledVector(l,r/Math.sin(t))}}var wv=class extends rz{constructor(e=.5,t=1,i=4,r=1,s=!1,a=0,o=4){let l;super(),i=Math.floor(Math.max(3,i)),r=Math.floor(r),o=Math.floor(o);let h=[],c=[],d=[],u=[],p=0,f=t/2,m=Math.PI/i,g=e*Math.cos(Math.PI/i),v=2*Math.PI/i,y=Math.PI-(i-2)*Math.PI/i,x=new iv(0,-f,0),b=new iv(0,f,0),w=new tQ(e,-f),S=new tQ(g,-f),_=new tQ(0,b.y).sub(S),A=new tQ(0,b.y).sub(w),M=new tQ(_.y,-_.x).normalize(),E=new tQ(A.y,-A.x).normalize(),C=e*Math.cos(Math.PI/i)*Math.tan((Math.PI-_.angle())/2)-1e-8;a=Math.min(a,C);{let e=new iv(M.x,M.y,0),t=new iv(Math.cos(v)*e.x,e.y,Math.sin(v)*e.x);l=e.angleTo(t)}let T=a/Math.tan((Math.PI-_.angle())/2),P=a/Math.tan((Math.PI-l)/2),D=new iv;if(!s){c.push(x.x,x.y,x.z),d.push(0,-1,0),u.push(0,0);let e=p++,t=[],r=w.clone(),s=T/Math.cos(Math.PI/i);r.x-=s;for(let e=0;e<i;e++){let s=e/i*Math.PI*2+m;wm(r,new tQ(Math.sin(s),Math.cos(s)),D),c.push(D.x,D.y,D.z),d.push(0,-1,0),u.push(0,0),t.push(p++)}for(let i=0;i<t.length;i++)h.push(t[i],e,t[(i+1)%t.length])}let I=[];{let e=new iv,t=new iv,r=new iv,s=new iv,f=new iv,g=new iv;for(let v=0;v<i;v++){let S=v/i*Math.PI*2+m,C=(v+.5)/i*Math.PI*2+m,D=(v+1)/i*Math.PI*2+m,R=new tQ(Math.sin(S),Math.cos(S)),L=new tQ(Math.sin(C),Math.cos(C)),B=new tQ(Math.sin(D),Math.cos(D));
vendor: 6,031 bytes, line 3140
3140wm(w,R,t),wm(w,B,r),wm(M,L,e),wg(b,t,r,P,P,s),c.push(s.x,s.y,s.z),wg(t,b,r,P,T,f),c.push(f.x,f.y,f.z),wg(r,t,b,T,P,g),c.push(g.x,g.y,g.z),d.push(e.x,e.y,e.z),d.push(e.x,e.y,e.z),d.push(e.x,e.y,e.z),u.push(0,0),u.push(0,0),u.push(0,0);let z=p++,F=p++,N=p++;if(h.push(z,F,N),a>0){let m,v;{let e=t.clone().add(r).multiplyScalar(.5),i=b.clone().sub(e).normalize(),s=x.clone().sub(e).normalize().add(i).normalize().multiplyScalar(-1);O(e,g.clone().sub(f),s,_.angle())}{let e=new iv;wm(E,B,e);let t=g.clone().add(s).multiplyScalar(.5);t=function(e,t,i){let r=e.clone().sub(t),s=i.clone().sub(t);return r.projectOnVector(s),r.add(t)}(t,r,b);let i=g.clone().sub(s);[m,v]=O(t,i,e,l,s.y)}{let e=m,t=e.clone().setY(0).normalize(),i=new iv(0,-1,0),r=t.clone().cross(i);!function(e,t,i,r){let s=Math.PI/2,l=A.angle()-s,f=[],m=new iv,g=new iv;for(let h=0;h<=o;h++){let v=[],x=h/o;for(let o=0;o<=h;o++){let f=((h?o/h:0)-.5)*y,b=Math.cos(f),w=Math.sin(f),S=(s+Math.atan(Math.tan(l)*b))*x,_=Math.cos(S),A=Math.sin(S);m.set(0,0,0),m.addScaledVector(t,A*b),m.addScaledVector(i,_),m.addScaledVector(r,A*w),g.copy(e).addScaledVector(m,a),c.push(g.x,g.y,g.z),d.push(m.x,m.y,m.z),u.push(0,0),v.push(p++)}f.push(v)}let v=f.length-1;for(let e=0;e<v;e++){let t=f[e],i=f[e+1],r=t.length-1;h.push(t[0],i[1],i[0]);for(let e=1;e<=r;e++)h.push(t[e-1],t[e],i[e]),h.push(t[e],i[e+1],i[e])}}(e,t,i,r)}I.concat(v);{let t=_.angle(),r=Math.PI-t,s=b.clone();s.y-=a/Math.sin(t-Math.PI/2);let l=new iv,f=[];for(let t=0;t<o;t++){let h=[],m=Math.PI/2-r*t/o,g=Math.cos(m),v=Math.sin(m),y=C;for(let r=0;r<=t;r++){let r=Math.cos(y),o=Math.sin(y);e.x=g*o,e.y=v,e.z=g*r,l.copy(s).addScaledVector(e,a),c.push(l.x,l.y,l.z),d.push(e.x,e.y,e.z),u.push(0,0),h.push(p++),y+=2*Math.PI/t/i}f.push(h)}v.reverse(),f.push(v);let m=f.length-1;for(let e=0;e<m;e++){let t=f[e],i=f[e+1],r=t.length-1;h.push(i[1],t[0],i[0]);for(let e=1;e<=r;e++)h.push(t[e],t[e-1],i[e]),h.push(i[e+1],t[e],i[e])}}}}}function O(e,t,i,r,s){let l=-r/2,f=(Math.PI-r)/2,m=t.clone().normalize().cross(i);e.addScaledVector(i,-a/Math.sin(f));let g=new iv,v=new iv,y=p,x=[];for(let h=0;h<=o;h++){let f=l+h/o*r;v.set(0,0,0),v.addScaledVector(m,Math.sin(f)),v.addScaledVector(i,Math.cos(f));for(let i=0;i<=1;i++){let r=i/1-.5;if(g.copy(e),g.addScaledVector(t,r),g.addScaledVector(v,a),null!=s){let e=Math.max(0,g.y-s);g.addScaledVector(t,-e/t.y)}c.push(g.x,g.y,g.z),d.push(v.x,v.y,v.z),u.push(0,0),0===i&&x.push(p),p++}}for(let e=0;e<o;e++)for(let t=0;t<1;t++){let i=y+t+2*e,r=i+2,s=r+1,a=i+1;h.push(i,r,a),h.push(r,s,a)}return[e.clone().addScaledVector(t,.5),x]}this.setIndex(h),this.setAttribute("position",new rT(c,3)),this.setAttribute("normal",new rT(d,3)),this.setAttribute("uv",new rT(u,2))}},wy=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,cornerRadius:[0,0,0,0],cornerType:1,extrudeBevelSize:0,extrudeBevelSegments:1},e.parameters),r=Object.assign(t?.ui??{enabledIndieCorners:!1},e.ui);return{shape:e.shape&&e.shape instanceof bp?e.shape:new bp,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)}),ui:r}}static build(e){let t=e.shape,{width:i,height:r,cornerRadius:s,cornerType:a,depth:o,extrudeBevelSize:l,extrudeBevelSegments:h}=e.parameters,c={x:.5*i,y:.5*r},d={x:-c.x,y:-c.y},u={x:c.x,y:c.y};function p(e,t,s){return t>i&&s>r?Math.min(e*i/t,e*r/s):t>i?e*i/t:s>r?e*r/s:e}let f=[];f[0]=0===s[0]?0:p(s[0],s[0]+s[3],s[0]+s[1]),f[1]=0===s[1]?0:p(s[1],s[1]+s[2],s[1]+s[0]),f[2]=0===s[2]?0:p(s[2],s[2]+s[1],s[2]+s[3]),f[3]=0===s[3]?0:p(s[3],s[3]+s[0],s[3]+s[2]);let m=d.x,g=u.x,v=u.y,y=d.y;t.addPoint(t.createPoint(m,v)),t.addPoint(t.createPoint(g,v)),t.addPoint(t.createPoint(g,y)),t.addPoint(t.createPoint(m,y)),t.isClosed=!0;let x=!0;for(let e=0,i=t.points.length;e<i;e++)t.points[e].roundness=f[e],e>0&&f[e]!==f[e-1]&&(x=!1);return x&&(t.roundness=f[0]),t.useCubicForRoundedCorners=1!==a,t.update(),Object.assign(bj.create({shape:t,parameters:{depth:o,extrudeBevelSize:l,extrudeBevelSegments:h}}),{userData:{...e,type:"RectangleGeometry"}})}},wx=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,widthSegments:64,heightSegments:64,phiStart:0,phiLength:2*Math.PI,thetaStart:0,thetaLength:180},e.parameters);return i.thetaLength=tY.clamp(i.thetaLength,0,180),{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t=100,height:i=t,depth:r=t,widthSegments:s=64,heightSegments:a=64,phiStart:o,phiLength:l,thetaStart:h,thetaLength:c}=e.parameters,d;return 0===c?(d=new rz).setAttribute("position",new rT([],3)):d=new oO(.5*t,s,a,o,l,h,c*tY.DEG2RAD),d.scale(1,i/t,r/t),Object.assign(d,{userData:{...e,type:"SphereGeometry"}})}},wb=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,widthSegments:8,heightSegments:8},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:0})}}static build(e){let{width:t=100,height:i=t,widthSegments:r=8,heightSegments:s=8}=e.parameters,a=new sc(t,i,r,s);return a.scale(1,1,1),Object.assign(a,{userData:{...e,type:"PlaneGeometry"}})}},ww=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,angle:90,cornerRadius:24,cornerSegments:8},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,height:i,depth:r,angle:s,cornerRadius:a,cornerSegments:o}=e.parameters;return Object.assign(new wS(t,i,r,s,a,o),{userData:{...e,type:"BackdropGeometry"}})}},wS=class extends rz{constructor(e=1,t=1,i=1,r=90,s=10,a=24){super(),this.type="BackdropGeometry";let o=[],l=[],h=[];
31400==s&&(a=1),a=Math.max(1,Math.floor(a)),s=Math.min(s,100),r=Math.PI/180*Math.min(179.999,r);let c=[],d=Math.PI/2,u=(e=0,t=0,i=0)=>new iv(e,t,i),p=u(),f=u(),[m,g,v]=[t/2,e/2,i/2],y=-g,x=+g,[b,w,S]=[u(y,-m,+v),u(y,-m,-v),u(y,+m,-v)],_=(e,t=!1)=>Math.sin(e-Math.PI/(1+ +t)),A=(e,t=!1)=>Math.cos(e-Math.PI/(1+ +t));S.y=Math.sin(r)*t-m;let M=Math.cos(r)*t-v,E=b.z-.001;r<=d?(S.z=Math.min(M,E),S.z==E&&(S.y-=(M-E)/Math.tan(d-r))):w.z=Math.min(w.z-M-v,b.z-.001),p.subVectors(b,w),f.subVectors(S,w);let C=Math.min(p.length(),f.length())*s/100,T=C*Math.tan(r/2),P=C/Math.cos(r/2),D=p.clone().normalize().add(f.normalize()).setLength(P).add(w);p.set(0,_(r,!0),A(r,!0)),c.push([S,p.clone()]);let I=(Math.PI-r)/a;for(let e=0;e<=a;e++){let t=d+r+e*I;p.set(0,Math.sin(t)*T,Math.cos(t)*T),p.add(D),f.set(0,_(t),A(t)),c.push([p.clone(),f.clone()])}c.push([b,u(0,1,0)]);let O=Math.sin(I/2)*T*2,R=c.length-1,L=c[0][0].distanceTo(c[1][0]),B=L+O*a+c[R-1][0].distanceTo(c[R][0]);c[0].push(1);for(let e=0;e<=a;e++)c[e+1].push(1-(L+e*O)/B);c[R].push(0);let[z,F,N]=c[0],k,U,V;for(let e=1;e<c.length;e++)[k,U,V]=c[e],o.push(y,z.y,z.z,y,k.y,k.z,x,z.y,z.z,x,z.y,z.z,y,k.y,k.z,x,k.y,k.z),l.push(0,F.y,F.z,0,U.y,U.z,0,F.y,F.z,0,F.y,F.z,0,U.y,U.z,0,U.y,U.z),h.push(0,N,0,V,1,N,1,N,0,V,1,V),[z,F,N]=[k,U,V];this.setAttribute("position",new rT(o,3)),this.setAttribute("normal",new rT(l,3)),this.setAttribute("uv",new rT(h,2))}},w_=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,innerRadiusPercent:38.19,spikes:5,cornerRadius:0,angle:360,extrudeBevelSize:0,extrudeBevelSegments:1},e.parameters);return{shape:e.shape&&e.shape instanceof bp?e.shape:new bp,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)})}}static build(e){let{width:t,height:i,innerRadiusPercent:r,spikes:s,cornerRadius:a,angle:o,depth:l,extrudeBevelSize:h,extrudeBevelSegments:c}=e.parameters,d=e.shape,u=.5*t,p=.5*i,f=o*Math.PI/360/s,m=-(Math.PI/2*3),g=u*r/100,v=p*r/100;if(3===s&&50===r){f=2*Math.PI/s;for(let e=0;e<s;e++){let t=f*e,i=0+Math.sin(t)*u,r=0+Math.cos(t)*p;d.addPoint(d.createPoint(i,r))}}else for(let e=0;e<s;e++){let e=0+Math.cos(m)*u,t=0+Math.sin(m)*p;d.addPoint(d.createPoint(e,t)),m+=f,e=0+Math.cos(m)*g,t=0+Math.sin(m)*v,d.addPoint(d.createPoint(e,t)),m+=f}d.isClosed=!0;for(let e=0,t=d.points.length;e<t;e++)d.points[e].roundness=a;return d.roundness=a,d.update(),Object.assign(bj.create({shape:d,parameters:{roundness:a,depth:l,extrudeBevelSize:h,extrudeBevelSegments:c}}),{userData:{...e,type:"StarGeometry"}})}},wA=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)})}}static build(e){let{width:t,height:i}=e.parameters;return Object.assign(new sc(t,i),{userData:{...e,type:"TextFrameGeometry"}})}},wM=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,radialSegments:32,tubularSegments:64,arc:360,cornerRadius:30,cornerSegments:8},e.parameters),r=Math.abs(i.width),s=Math.abs(i.height??i.width);i.shapeBlendNode&&(s=r);let a=Math.round(Math.abs(i.depth??.25*i.width));return{parameters:Object.assign(i,{width:r,height:s,depth:a})}}static build(e){let{width:t,height:i,depth:r,radialSegments:s,tubularSegments:a,arc:o,cornerRadius:l,cornerSegments:h}=e.parameters,c=function(e,t,i,r,s,a,o,l,h,c,d){[t,i]=[i,t],o=t/2;let u=tY.clamp(s/360,0,1);if(0===u){let e=new rz;return e.setAttribute("position",new rT([],3)),e}return 1===u&&(c=0),new b$(!0,e,t,i,r,u,a,o,0,h,c,d)}(t,i,r,.5*t,o,a,0,0,s,l,h);return c.scale(1,i/t,1),Object.assign(c,{userData:{...e,type:"TorusGeometry"}})}},wE=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,tubularSegments:64,radialSegments:32,p:2,q:3},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width),tube:i.tube??.125*i.width})}}static build(e){let{width:t,tube:i,tubularSegments:r,radialSegments:s,p:a,q:o}=e.parameters,l=.5*t;return l!==i&&(l-=i),Object.assign(new oL(l,i,r,s,a,o),{userData:{...e,type:"TorusKnotGeometry"}})}},wC=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,spikes:5,cornerRadius:0,extrudeBevelSize:0,extrudeBevelSegments:1,isRect:!1},e.parameters);return{shape:e.shape&&e.shape instanceof bp?e.shape:new bp,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width*(i.isRect?1:Math.sqrt(3)/2)),depth:Math.abs(i.depth??0)})}}static build(e){let{width:t=100,height:i,cornerRadius:r,depth:s,extrudeBevelSize:a,extrudeBevelSegments:o,isRect:l}=e.parameters,h=e.shape,c=.5*t,d=.5*i;l?h.addPoint(h.createPoint(-c,d)):h.addPoint(h.createPoint(0,d)),h.addPoint(h.createPoint(c,-d)),h.addPoint(h.createPoint(-c,-d)),h.isClosed=!0;for(let e=0,t=h.points.length;e<t;e++)h.points[e].roundness=r;return h.roundness=r,h.update(),Object.assign(bj.create({shape:h,parameters:{roundness:r,depth:s,extrudeBevelSize:a,extrudeBevelSegments:o}}),{userData:{...e,type:"TriangleGeometry"}})}},wT={hexStringToRgb:function(e){e=e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,(e,t,i,r)=>String(t+t+i+i+r+r));let t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null}},wP=class{add(e,t,i){if("string"!=typeof arguments[0])for(let e in arguments[0])this.add(e,arguments[0][e],arguments[1]);
3140else(Array.isArray(e)?e:[e]).forEach(function(e){this[e]=this[e]||[],t&&this[e][i?"unshift":"push"](t)},this)}run(e,t){this[e]=this[e]||[],this[e].forEach(function(e){e.call(t&&t.context?t.context:t,t)})}},wD=class{constructor(e){this.jsep=e,this.registered={}}register(...e){e.forEach(e=>{if("object"!=typeof e||!e.name||!e.init)throw Error("Invalid JSEP plugin format");this.registered[e.name]||(e.init(this.jsep),this.registered[e.name]=e)})}},wI=class{static get version(){return"1.3.8"}static toString(){return"JavaScript Expression Parser (JSEP) v"+wI.version}static addUnaryOp(e){return wI.max_unop_len=Math.max(e.length,wI.max_unop_len),wI.unary_ops[e]=1,wI}static addBinaryOp(e,t,i){return wI.max_binop_len=Math.max(e.length,wI.max_binop_len),wI.binary_ops[e]=t,i?wI.right_associative.add(e):wI.right_associative.delete(e),wI}static addIdentifierChar(e){return wI.additional_identifier_chars.add(e),wI}static addLiteral(e,t){return wI.literals[e]=t,wI}static removeUnaryOp(e){return delete wI.unary_ops[e],e.length===wI.max_unop_len&&(wI.max_unop_len=wI.getMaxKeyLen(wI.unary_ops)),wI}static removeAllUnaryOps(){return wI.unary_ops={},wI.max_unop_len=0,wI}static removeIdentifierChar(e){return wI.additional_identifier_chars.delete(e),wI}static removeBinaryOp(e){return delete wI.binary_ops[e],e.length===wI.max_binop_len&&(wI.max_binop_len=wI.getMaxKeyLen(wI.binary_ops)),wI.right_associative.delete(e),wI}static removeAllBinaryOps(){return wI.binary_ops={},wI.max_binop_len=0,wI}static removeLiteral(e){return delete wI.literals[e],wI}static removeAllLiterals(){return wI.literals={},wI}get char(){return this.expr.charAt(this.index)}get code(){return this.expr.charCodeAt(this.index)}constructor(e){this.expr=e,this.index=0}static parse(e){return new wI(e).parse()}static getMaxKeyLen(e){return Math.max(0,...Object.keys(e).map(e=>e.length))}static isDecimalDigit(e){return e>=48&&e<=57}static binaryPrecedence(e){return wI.binary_ops[e]||0}static isIdentifierStart(e){return e>=65&&e<=90||e>=97&&e<=122||e>=128&&!wI.binary_ops[String.fromCharCode(e)]||wI.additional_identifier_chars.has(String.fromCharCode(e))}static isIdentifierPart(e){return wI.isIdentifierStart(e)||wI.isDecimalDigit(e)}throwError(e){let t=Error(e+" at character "+this.index);throw t.index=this.index,t.description=e,t}runHook(e,t){if(wI.hooks[e]){let i={context:this,node:t};return wI.hooks.run(e,i),i.node}return t}searchHook(e){if(wI.hooks[e]){let t={context:this};return wI.hooks[e].find(function(e){return e.call(t.context,t),t.node}),t.node}}gobbleSpaces(){let e=this.code;for(;e===wI.SPACE_CODE||e===wI.TAB_CODE||e===wI.LF_CODE||e===wI.CR_CODE;)e=this.expr.charCodeAt(++this.index);this.runHook("gobble-spaces")}parse(){this.runHook("before-all");let e=this.gobbleExpressions(),t=1===e.length?e[0]:{type:wI.COMPOUND,body:e};return this.runHook("after-all",t)}gobbleExpressions(e){let t=[],i,r;for(;this.index<this.expr.length;)if((i=this.code)===wI.SEMCOL_CODE||i===wI.COMMA_CODE)this.index++;else if(r=this.gobbleExpression())t.push(r);else if(this.index<this.expr.length){if(i===e)break;this.throwError('Unexpected "'+this.char+'"')}return t}gobbleExpression(){let e=this.searchHook("gobble-expression")||this.gobbleBinaryExpression();return this.gobbleSpaces(),this.runHook("after-expression",e)}gobbleBinaryOp(){this.gobbleSpaces();let e=this.expr.substr(this.index,wI.max_binop_len),t=e.length;for(;t>0;){if(wI.binary_ops.hasOwnProperty(e)&&(!wI.isIdentifierStart(this.code)||this.index+e.length<this.expr.length&&!wI.isIdentifierPart(this.expr.charCodeAt(this.index+e.length))))return this.index+=t,e;e=e.substr(0,--t)}return!1}gobbleBinaryExpression(){let e,t,i,r,s,a,o,l,h;if(!(a=this.gobbleToken())||!(t=this.gobbleBinaryOp()))return a;for(s={value:t,prec:wI.binaryPrecedence(t),right_a:wI.right_associative.has(t)},(o=this.gobbleToken())||this.throwError("Expected expression after "+t),r=[a,s,o];t=this.gobbleBinaryOp();){if(0===(i=wI.binaryPrecedence(t))){this.index-=t.length;break}s={value:t,prec:i,right_a:wI.right_associative.has(t)},h=t;let l=e=>s.right_a&&e.right_a?i>e.prec:i<=e.prec;for(;r.length>2&&l(r[r.length-2]);)o=r.pop(),t=r.pop().value,a=r.pop(),e={type:wI.BINARY_EXP,operator:t,left:a,right:o},r.push(e);(e=this.gobbleToken())||this.throwError("Expected expression after "+h),r.push(s,e)}for(l=r.length-1,e=r[l];l>1;)e={type:wI.BINARY_EXP,operator:r[l-1].value,left:r[l-2],right:e},l-=2;return e}gobbleToken(){let e,t,i,r;if(this.gobbleSpaces(),r=this.searchHook("gobble-token"))return this.runHook("after-token",r);
3140if(e=this.code,wI.isDecimalDigit(e)||e===wI.PERIOD_CODE)return this.gobbleNumericLiteral();if(e===wI.SQUOTE_CODE||e===wI.DQUOTE_CODE)r=this.gobbleStringLiteral();else if(e===wI.OBRACK_CODE)r=this.gobbleArray();else{for(i=(t=this.expr.substr(this.index,wI.max_unop_len)).length;i>0;){if(wI.unary_ops.hasOwnProperty(t)&&(!wI.isIdentifierStart(this.code)||this.index+t.length<this.expr.length&&!wI.isIdentifierPart(this.expr.charCodeAt(this.index+t.length)))){this.index+=i;let e=this.gobbleToken();return e||this.throwError("missing unaryOp argument"),this.runHook("after-token",{type:wI.UNARY_EXP,operator:t,argument:e,prefix:!0})}t=t.substr(0,--i)}wI.isIdentifierStart(e)?(r=this.gobbleIdentifier(),wI.literals.hasOwnProperty(r.name)?r={type:wI.LITERAL,value:wI.literals[r.name],raw:r.name}:r.name===wI.this_str&&(r={type:wI.THIS_EXP})):e===wI.OPAREN_CODE&&(r=this.gobbleGroup())}return r?(r=this.gobbleTokenProperty(r),this.runHook("after-token",r)):this.runHook("after-token",!1)}gobbleTokenProperty(e){this.gobbleSpaces();let t=this.code;for(;t===wI.PERIOD_CODE||t===wI.OBRACK_CODE||t===wI.OPAREN_CODE||t===wI.QUMARK_CODE;){let i;if(t===wI.QUMARK_CODE){if(this.expr.charCodeAt(this.index+1)!==wI.PERIOD_CODE)break;i=!0,this.index+=2,this.gobbleSpaces(),t=this.code}this.index++,t===wI.OBRACK_CODE?(e={type:wI.MEMBER_EXP,computed:!0,object:e,property:this.gobbleExpression()},this.gobbleSpaces(),(t=this.code)!==wI.CBRACK_CODE&&this.throwError("Unclosed ["),this.index++):t===wI.OPAREN_CODE?e={type:wI.CALL_EXP,arguments:this.gobbleArguments(wI.CPAREN_CODE),callee:e}:(t===wI.PERIOD_CODE||i)&&(i&&this.index--,this.gobbleSpaces(),e={type:wI.MEMBER_EXP,computed:!1,object:e,property:this.gobbleIdentifier()}),i&&(e.optional=!0),this.gobbleSpaces(),t=this.code}return e}gobbleNumericLiteral(){let e="",t,i;for(;wI.isDecimalDigit(this.code);)e+=this.expr.charAt(this.index++);if(this.code===wI.PERIOD_CODE)for(e+=this.expr.charAt(this.index++);wI.isDecimalDigit(this.code);)e+=this.expr.charAt(this.index++);if("e"===(t=this.char)||"E"===t){for(e+=this.expr.charAt(this.index++),("+"===(t=this.char)||"-"===t)&&(e+=this.expr.charAt(this.index++));wI.isDecimalDigit(this.code);)e+=this.expr.charAt(this.index++);wI.isDecimalDigit(this.expr.charCodeAt(this.index-1))||this.throwError("Expected exponent ("+e+this.char+")")}return i=this.code,wI.isIdentifierStart(i)?this.throwError("Variable names cannot start with a number ("+e+this.char+")"):(i===wI.PERIOD_CODE||1===e.length&&e.charCodeAt(0)===wI.PERIOD_CODE)&&this.throwError("Unexpected period"),{type:wI.LITERAL,value:parseFloat(e),raw:e}}gobbleStringLiteral(){let e="",t=this.index,i=this.expr.charAt(this.index++),r=!1;for(;this.index<this.expr.length;){let t=this.expr.charAt(this.index++);if(t===i){r=!0;break}if("\\"===t)switch(t=this.expr.charAt(this.index++)){case"n":e+=`
3141`;break;case"r":e+="\r";break;case"t":e+="	";break;case"b":e+="\b";break;case"f":e+="\f";break;case"v":e+="\v";break;default:e+=t}else e+=t}return r||this.throwError('Unclosed quote after "'+e+'"'),{type:wI.LITERAL,value:e,raw:this.expr.substring(t,this.index)}}gobbleIdentifier(){let e=this.code,t=this.index;for(wI.isIdentifierStart(e)?this.index++:this.throwError("Unexpected "+this.char);this.index<this.expr.length&&(e=this.code,wI.isIdentifierPart(e));)this.index++;return{type:wI.IDENTIFIER,name:this.expr.slice(t,this.index)}}gobbleArguments(e){let t=[],i=!1,r=0;for(;this.index<this.expr.length;){this.gobbleSpaces();let s=this.code;if(s===e){i=!0,this.index++,e===wI.CPAREN_CODE&&r&&r>=t.length&&this.throwError("Unexpected token "+String.fromCharCode(e));break}if(s===wI.COMMA_CODE){if(this.index++,++r!==t.length){if(e===wI.CPAREN_CODE)this.throwError("Unexpected token ,");else if(e===wI.CBRACK_CODE)for(let e=t.length;e<r;e++)t.push(null)}}else if(t.length!==r&&0!==r)this.throwError("Expected comma");else{let e=this.gobbleExpression();e&&e.type!==wI.COMPOUND||this.throwError("Expected comma"),t.push(e)}}return i||this.throwError("Expected "+String.fromCharCode(e)),t}gobbleGroup(){this.index++;let e=this.gobbleExpressions(wI.CPAREN_CODE);if(this.code===wI.CPAREN_CODE)return this.index++,1===e.length?e[0]:!!e.length&&{type:wI.SEQUENCE_EXP,expressions:e};this.throwError("Unclosed (")}gobbleArray(){return this.index++,{type:wI.ARRAY_EXP,elements:this.gobbleArguments(wI.CBRACK_CODE)}}};Object.assign(wI,{hooks:new wP,plugins:new wD(wI),COMPOUND:"Compound",SEQUENCE_EXP:"SequenceExpression",IDENTIFIER:"Identifier",MEMBER_EXP:"MemberExpression",LITERAL:"Literal",THIS_EXP:"ThisExpression",CALL_EXP:"CallExpression",UNARY_EXP:"UnaryExpression",BINARY_EXP:"BinaryExpression",ARRAY_EXP:"ArrayExpression",TAB_CODE:9,LF_CODE:10,CR_CODE:13,SPACE_CODE:32,PERIOD_CODE:46,COMMA_CODE:44,SQUOTE_CODE:39,DQUOTE_CODE:34,OPAREN_CODE:40,CPAREN_CODE:41,OBRACK_CODE:91,CBRACK_CODE:93,QUMARK_CODE:63,SEMCOL_CODE:59,COLON_CODE:58,unary_ops:{"-":1,"!":1,"~":1,"+":1},binary_ops:{"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10},right_associative:new Set,additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"}),wI.max_unop_len=wI.getMaxKeyLen(wI.unary_ops),wI.max_binop_len=wI.getMaxKeyLen(wI.binary_ops);var wO=e=>new wI(e).parse();function wR(e){return{all:e=e||new Map,on:function(t,i){var r=e.get(t);r?r.push(i):e.set(t,[i])},off:function(t,i){var r=e.get(t);r&&(i?r.splice(r.indexOf(i)>>>0,1):e.set(t,[]))},emit:function(t,i){var r=e.get(t);r&&r.slice().map(function(e){e(i)}),(r=e.get("*"))&&r.slice().map(function(e){e(t,i)})}}}
3141Object.getOwnPropertyNames(wI).forEach(e=>{void 0===wO[e]&&"prototype"!==e&&(wO[e]=wI[e])}),wO.Jsep=wI,wO.plugins.register({name:"ternary",init(e){e.hooks.add("after-expression",function(t){if(t.node&&this.code===e.QUMARK_CODE){this.index++;let i=t.node,r=this.gobbleExpression();if(r||this.throwError("Expected expression"),this.gobbleSpaces(),this.code===e.COLON_CODE){this.index++;let s=this.gobbleExpression();if(s||this.throwError("Expected expression"),t.node={type:"ConditionalExpression",test:i,consequent:r,alternate:s},i.operator&&e.binary_ops[i.operator]<=.9){let r=i;for(;r.right.operator&&e.binary_ops[r.right.operator]<=.9;)r=r.right;t.node.test=r.right,r.right=t.node,t.node=i}}else this.throwError("Expected :")}})}});var wL=class{constructor(e,t,i){this.id=e,this.userAPI=t,this.result=void 0,this.error="null",this.isPrefetched=!1,this.isLoading=!1,this.isLoaded=!1,this.prefetchPromise=new Promise(e=>e()),this.emitter=wR(),this._innerCallUserAPI=async e=>{this.emitter.emit("start",{userAPIId:this.id}),this.isLoading=!0,this.isLoading=!1;try{this.result=await wB(this.userAPI,e),this.error="null",this.emitter.emit("success",{userAPIId:this.id})}catch(t){let e=t.message?.split("_:_")?.[0]?.replace("status:","")??"null";this.error=e,this.result=null,this.emitter.emit("error",{userAPIId:this.id})}this.isLoading=!1,this.isPrefetched=!0,this.isLoaded=!0},t?.integration?.type==="OpenAI"?this.result={content:""}:"GET"===t.method&&""!==t.url&&(this.prefetchPromise=this.prefetch(i)),this._debouncedCallUserAPI=this._innerCallUserAPI,this._updateDebouncedCallUserAPI(),this._debouncedPrefetch=uI(this.prefetch,1e3,{trailing:!0})}_updateDebouncedCallUserAPI(){this._debouncedCallUserAPI=void 0!==this.userAPI.debounce&&this.userAPI.debounce>0?uI(this._innerCallUserAPI,this.userAPI.debounce,{leading:!0,trailing:!0}):this._innerCallUserAPI}async prefetch(e){await this.callUserAPI(e)}async callUserAPI(e){await this._debouncedCallUserAPI(e)}update(e,t,i=!0){this.userAPI=e,this._updateDebouncedCallUserAPI(),""!==this.userAPI.url&&"GET"===this.userAPI.method&&i&&this._debouncedPrefetch(t)}retrieveValue(e){if(this.result)try{return p1.zoom(this.result,e)}catch(e){console.error(e)}}retrieveZoomedKeyValues(e){if(this.result){let t=e&&e.length?p1.zoom(this.result,e):this.result;if("object"==typeof t&&null!==t)return Object.entries(t);if(Array.isArray(t))return t.map((e,t)=>[t.toString(),e]);throw"string"==typeof t||"number"==typeof t||"boolean"==typeof t||null===t?Error("This path points to a value, use retrieveValue() instead. "+e?.join(".")):Error("Path error"+e?.join("."))}}dispose(){}on(e,t){this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t)}get autostart(){return this.userAPI.autoStart}};async function wB(e,t,i=new AbortController){let r,s,a=e.url,o=e.proxy?.enabled??!1,l;if(e.integration?.type==="OpenAI"){let i=wF(""===e.integration.prompt?[]:JSON.parse(e.integration.prompt),t),r=""===e.integration.behavior?[]:wF(JSON.parse(e.integration.behavior),t);l=`{
3142		"model": "${e.integration.model}",
3143		"messages": [${e.integration.useBehavior?`
3144		{
3145			"role": "system",
3146			"content": "${r}"
3147		},`:""}
3148		{
3149			"role": "user",
3150			"content": "${i}"
3151		}
3152		]
3153	}`}if(o){let i;a=`https://apis.spline.design/file/${e.proxy.fileId}/external-api/request?uuidexternalapi=${e.proxy.proxyId}`,void 0!==l?i=l:"POST"===e.method&&e.body&&(i=wF(JSON.parse(e.body),t)),void 0!==i&&(a+=`&data=${encodeURIComponent(i.replace(/(\r\n|\n|\r|\t)/gm,""))}`)}else e.integration?.type==="OpenAI"?s=l:"POST"===e.method&&e.body&&(s=wF(JSON.parse(e.body),t));let h=await fetch(a,{method:o?"GET":e.method,headers:o?void 0:(r=new Headers,e.headers.forEach(e=>{""!==e.data.key&&r.append(e.data.key,e.data.value)}),r),signal:i.signal,body:s});if(!h.ok)throw Error("status:"+h.status+"_:_"+h.statusText);if(e.integration?.type==="OpenAI"){let e=await h.json();return o&&(e=e.response),{content:e.choices[0].message.content}}{let e=await h.json();return o&&(e=e.response),e}}var wz=(e,t)=>{if("string"==typeof e){let i=t.getVariable(e);if(i)return wz(i,t)}return yg.isBoolean(e)?yg.getDisplayedValue(e).toLowerCase():yg.getDisplayedValue(e)},wF=(e,t)=>e.map((e,i)=>{if("text"in e)return e.text;if("type"in e){if("paragraph"===e.type)return(i>0?`
3154`:"")+wF(e.children,t);
3154if("variable"===e.type){let i=t.getVariable(e.variableId);if(void 0!==i)return wz(i,t)}}return""}).join(""),wN=["+","-","*","/","(",")","==","!=",">","<",">=","<=","and","or","!","%","^",","],wk=["0","1","2","3","4","5","6","7","8","9","."],wU=["sin","cos","tan","asin","acos","atan","atan2","sqrt","abs","log","exp","floor","ceil","round","min","max","random"];function wV(e,t,i="number"){let r,s,a="";for(let r=0;r<e.length;r++){var o;let s=e[r];if("objType"in s&&"api"===s.objType){let e=JSON.parse(s.id),i=e[0],r=t.getUserAPI(i);if(void 0!==r&&r instanceof wL){let t=r.retrieveValue(e.slice(1));void 0!==t&&(a+=t)}continue}if("objType"in s&&"webhook"===s.objType){let[e,i]=JSON.parse(s.id),r=t.getUserWebhook(e);if(void 0!==r){let e=r.getParameterValue(i);void 0!==e&&(a+=e)}continue}if("objType"in s&&"aiAssistant"===s.objType){let e=t.openAIRealtime;if("objId"in s&&void 0!==s.objId){let i;if(t.scene.data.objects.traverse((e,t)=>{let r=t.events?.find(e=>e.id===s.objId);r&&(i=r)}),void 0!==i&&"AIAssistantListener"===i.data.type){let t=e?.computeAnalysisForListenerEvent(i.data);if(void 0!==t){a+=t;continue}}}a+=e?.voice??0;continue}if("id"in s){let o=e[r-1];if(r>0&&"id"in o){console.error("Two variables in a row",e);return}let l=t.getVariable(s.id),h=yg.getDisplayedValue(l);"number"===i&&yg.isTextValue(l)&&Array.isArray(l.textValue)&&1===l.textValue.length?h=parseFloat(h).toString():"boolean"===i&&yg.isBoolean(l)?h=l?"true":"false":"boolean"===i&&yg.isTextValue(l)&&!Array.isArray(l.textValue)&&(h='"'+h+'"'),a+=h;continue}if("string"===i){'"'!==s.name&&("+"!==s.name||s.escaped)&&(a+=s.name),"+"!==s.name||s.escaped||"\\"!==a[a.length-1]||(a=a.slice(0,-1)+s.name);continue}if("and"===s.name){a+="&&";continue}if("or"===s.name){a+="||";continue}if("True"===s.name){a+="true";continue}if("False"===s.name){a+="false";continue}if("boolean"===i&&!("string"==typeof(o=s.name)&&!isNaN(o)&&!isNaN(parseFloat(o)))&&!wk.includes(s.name)&&!wN.includes(s.name)&&!wU.includes(s.name.replace(/\($/g,""))){a+='"'+s.name+'"';continue}a+=s.name}if("string"===i)return a;if(0===e.length){if("number"===i)return 0;if("boolean"===i)return!1}try{r=wO(a)}catch(e){console.error(a,e);return}try{s=function e(t){switch(t.type){case"BinaryExpression":switch(t.operator){case"==":return Number(e(t.left)===e(t.right));case"!=":return Number(e(t.left)!==e(t.right));case">":return Number(e(t.left)>e(t.right));case">=":return Number(e(t.left)>=e(t.right));case"<":return Number(e(t.left)<e(t.right));case"<=":return Number(e(t.left)<=e(t.right));case"+":return e(t.left)+e(t.right);case"-":return e(t.left)-e(t.right);case"*":return e(t.left)*e(t.right);case"/":return e(t.left)/e(t.right);case"%":return e(t.left)%e(t.right);case"&&":return e(t.left)&&e(t.right);case"||":return e(t.left)||e(t.right);case"^":return Math.pow(e(t.left),e(t.right));default:throw Error("Unknown operator: "+t.operator)}case"UnaryExpression":switch(t.operator){case"-":return-e(t.argument);case"!":return Number(!e(t.argument));default:throw Error("Unknown operator: "+t.operator)}case"Identifier":throw Error("Unknown identifier: "+t.name);case"Literal":return t.value;case"CallExpression":if("Identifier"===t.callee.type){if("random"===t.callee.name){let i=0,r=1;if(t.arguments.length>=1)try{i=e(t.arguments[0])}catch(e){console.warn(e)}if(t.arguments.length>=2)try{r=e(t.arguments[1])}catch(e){console.warn(e)}return i=Math.min(r,i),r=Math.max(r,i),i+Math.random()*(r-i)}return Math[t.callee.name].apply(null,t.arguments.map(e))}throw Error("Unknown node");default:throw Error("Unknown node type: "+t.type)}}(r)}catch(e){console.error(a,r,e)}return s}wO.addBinaryOp("^",11,!0);var wj=new iX,wG=new iX,wH=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,height:100,depth:1,subdivisions:12,roundness:0,extrudeBevelSize:0,extrudeBevelSegments:3},e.parameters),r=Math.abs(i.width),s=Math.abs(i.height??i.width),a=Math.abs(i.depth??0),o=t?.shapeData??bH.create({parameters:gT}).userData.shape;return{path:e.path??vV.defaultData(),parameters:Object.assign(i,{width:r,height:s,depth:a,extrusion:{...gP,...i.extrusion}}),shapeData:o}}static build(e){return e.path.points.length>=2?Object.assign(new wW(e),{userData:{...e,type:"PathGeometry"}}):Object.assign(new rz,{userData:{...e,type:"PathGeometry"}})}},wW=class extends rz{constructor(e){super(),this.type="PathExtrusionGeometry",this.inputs=e,this.build()}_isGeometryClosed(){return this.inputs.path.isClosed&&1===this.inputs.parameters.extrusion.depth}_isOpenEnded(){let e,t=this.inputs.parameters.extrusion;return!(this.inputs.path.isClosed&&1===t.depth)||(t.twist%(e=2*Math.PI)+e)%e!=(0%e+e)%e||t.startScale!==t.endScale}build(){let e=this._extractPathPoints();if(e.length<2)return;let t=this._computeBasisMatrices(e),{depth:i,offset:r}=this.inputs.parameters.extrusion;i=Math.max(0,Math.min(i,1)),r=Math.max(0,Math.min(r,1));let s=this.inputs.path.isClosed?e.length:e.length-1,a=Math.floor(r*s),o=Math.min(Math.max(2,(this.inputs.path.isClosed?Math.ceil((i+r)*s):Math.ceil(Math.min(1,i+r)*s))-a+1),s+2),l=[],h=[];for(let i=0;i<o;i++){let r=this.inputs.path.isClosed?(i+a)%e.length:Math.min(i+a,e.length-1);l.push(e[r].clone()),h.push(t[r].clone())}let c=(e,t,i)=>{var r,s;let a,o;l[e]=l[e].clone().lerp(l[t],i),h[e]=(r=h[e],s=h[t],a=[new iv,new iv,new iv],o=[new iv,new iv,new iv],r.extractBasis(a[0],a[1],a[2]),s.extractBasis(o[0],o[1],o[2]),a.forEach((e,t)=>{let r=o[t],s=tY.lerp(e.length(),r.length(),i);e.lerp(r,i).setLength(s)}),new iX().makeBasis(a[0],a[1],a[2]))},d=0,u=r*s%1;(!this.inputs.path.isClosed||i<=1)&&(u||0===r)&&c(0,1,d=u);let p=0,f=(r+i)*s%1;if((this.inputs.path.isClosed&&i<=1||!this.inputs.path.isClosed&&r+i<1)&&f&&(p=f,c(l.length-1,l.length-2,1-p)),0===i){let e=l.length-1;
3154l[e].copy(l[0]),h[e].copy(h[0])}this._applyPathModifiers(h,d,p);let{bevel:m,bevelSides:g}=this.inputs.parameters.extrusion,v=m>0?this.inputs.parameters.extrusion.capType:"flat",y=5;"Custom"===this.inputs.parameters.extrusion.shape.type&&(y="low"===this.inputs.parameters.extrusion.shape.shapeQuality?5:12);let{regions:x,infos:b,vertices:w}=this._computeShapePoints(y),S=0,_;"round"===v&&(S=(_=new bk(this.inputs.shapeData,2*m,m,y,g,void 0,!0)).getAttribute("position").count);let A=0,M=0;b.sort((e,t)=>e.start-t.start),b.forEach(e=>{e.verticesStart=A,e.verticesCount=e.continuous.reduce((e,t,i)=>e+(0!==i&&t?1:2),0),M+=e.verticesCount,A=M});let E=M*o,C,T=0;if(this._isOpenEnded()&&"flat"===v){try{C=bI({windingRule:wK.ODD,elementType:wZ.POLYGONS,polySize:3,vertexSize:2,strict:!0,contours:x})}catch{C=bF}T=C.vertexCount}let P=E+2*T+2*S,D=E+2*T,I={positions:new Float32Array(3*P),normals:new Float32Array(3*P),uvs:new Float32Array(2*P)},O=[];if(b.forEach(e=>{this._extrudeRegion(e,w,h,l,I,O,this._isGeometryClosed()&&!this._isOpenEnded())}),C&&(this._closeEnd(C,E,O,I,h[0],l[0],!1),this._closeEnd(C,E+T,O,I,h[h.length-1],l[l.length-1],!0)),_){I.positions.set(_.getAttribute("position").array,3*D),I.normals.set(_.getAttribute("normal").array,3*D),I.uvs.set(_.getAttribute("uv").array,2*D);for(let e=D;e<D+S;e++)I.uvs[2*e+1]=1e-4;let e=O.length;O.push(..._.getIndex().array.map(e=>e+D)),D+=S,I.positions.set(_.getAttribute("position").array,3*D),I.normals.set(_.getAttribute("normal").array,3*D),I.uvs.set(_.getAttribute("uv").array,2*D);let t=O.length;O.push(..._.getIndex().array.map(e=>e+D)),this.setAttribute("position",new rM(I.positions,3)),this.setAttribute("normal",new rM(I.normals,3)),this.setAttribute("uv",new rM(I.uvs,2)),this.setIndex(O),wj.copy(h[h.length-1]).setPosition(l[l.length-1]),this.applyMatrix4OnRange(wj,D,P),wj.copy(h[0]).setPosition(l[0]).multiply(wG.makeScale(1,1,-1)),this.applyMatrix4OnRange(wj,D-S,D),this.reverseIndicesOnRange(e,t)}else this.setAttribute("position",new rM(I.positions,3)),this.setAttribute("normal",new rM(I.normals,3)),this.setAttribute("uv",new rM(I.uvs,2)),this.setIndex(O)}_extractPathPoints(){let e=xR(this.inputs.path).getPoints(this.inputs.path.subdivisions);if(e.length<2)return[];let t=[e[0]];return e.forEach(e=>{t[t.length-1].distanceToSquared(e)>.001&&t.push(e)}),this.inputs.path.isClosed&&.001>t[t.length-1].distanceTo(t[0])&&t.pop(),t}_computeBasisMatrices(e){let t=[],i=e.length,r=this.inputs.path.isClosed,s=new iv,a=new iv,o=new iv,l=new iv,h=new iv(0,1,0);for(let c=0;c<i;c++){let d,u=e[c],p;p=0===c?r?e[e.length-2]:u.clone().multiplyScalar(2).sub(e[1]):e[c-1],d=c===i-1?r?e[1]:u.clone().multiplyScalar(2).sub(e[c-1]):e[c+1];let f=u.clone().sub(p).normalize(),m=d.clone().sub(u).normalize(),g=f.clone().add(m).normalize();o.copy(g),0===c&&(g.equals(h)||g.clone().negate().equals(h))&&h.set(0,0,1);let v=h.clone().cross(g).normalize(),y=g.clone().cross(v).normalize();h.copy(y),l.copy(v),0===c&&(s.copy(y),a.copy(g));let x=new iX().makeBasis(v,y,g);t.push(x)}
3154let c=r?a:o,d=r?s:new iv(0,1,0),u=c.clone().cross(l).normalize(),p=Math.acos(d.dot(u));if(isNaN(p))return t;let f=d.clone().cross(u);c.dot(f)>0&&(p*=-1);for(let e=1;e<t.length;e++){let i=new iX().makeRotationZ(p*e/t.length);t[e].multiply(i)}return t}_applyPathModifiers(e,t,i){let r=e.length,{angle:s,twist:a,startScale:o,endScale:l}=this.inputs.parameters.extrusion,h=new iX,c=new iX;return e.forEach((e,d)=>{let u=0===d?0:d===r-1?1:(d-t)/(r-(0===i?0:1)-(t+(1-i)));h.makeRotationZ(tY.lerp(s,s+a,u)*tY.DEG2RAD);let p=tY.lerp(o,l,u);c.makeScale(p,p,p),e.multiply(h).multiply(c)}),e}_computeShapePoints(e=12,t=wK.ODD){let i,r=this.inputs.shapeData,s=r.extractShapePointsToFlatArray([],e),a=r.shapeHoles.map(t=>{let i=t.extractShapePointsToFlatArray([],e),r=[];for(let e=i.length-1;e>=1;e-=2){let t=i[e-1],s=i[e-0];r.push(t,s)}return r}),o;try{o=bI({windingRule:t,elementType:wZ.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[s]})}catch{o=bB}try{i=bI({windingRule:wK.ODD,elementType:wZ.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[...a]})}catch{i=bz}if(!o)throw Error("error generating geometry");let l=o.elementCount;if(i){o.elementCount+=i.elementCount;for(let e=0;e<i.elements.length;e++){let t=i.elements[e],r=e%2==0?o.vertexCount:0;o.elements.push(t+r)}for(let e=0;e<i.vertexIndices.length;e++){let t=i.vertexIndices[e],r=o.vertexCount;o.vertexIndices.push(t+r)}for(let e=0;e<i.vertices.length;e++){let t=i.vertices[e];o.vertices.push(t)}}let h=1/0,c=-1/0,d=1/0,u=-1/0;for(let e=0,t=o.vertexCount;e<t;e++){let t=2*e,i=o.vertices[t+0],r=o.vertices[t+1];i<h&&(h=i),i>c&&(c=i),r<d&&(d=r),r>u&&(u=r)}let p=[];for(let e=o.elementCount-1;e>=0;e--){let t=e>=l,i=2*e,s=o.elements[i+0],a=o.elements[i+1],h=s+a,c={start:s,count:a,normals:[],isHole:t,continuous:[],verticesStart:0,verticesCount:0};p.push(c);let d=s,u=h-1,f=s+1,m=r.roundedCurves.length;do{let e=d-s,i=o.vertices[2*u+0],l=o.vertices[2*u+1],p=o.vertices[2*d+0],g=o.vertices[2*d+1],v=o.vertices[2*f+0],y=o.vertices[2*f+1],x=p-i,b=g-l,w=Math.sqrt(x*x+b*b);x/=w,b/=w;let S=p-v,_=g-y,A=Math.sqrt(S*S+_*_);S/=A,_/=A,c.normals[2*e+0]=-_,c.normals[2*e+1]=S;let M=o.vertexIndices[d];if(Array.isArray(M))c.continuous[e]=!1;else{let[t,i]=r.getCurveIndexFromVertexId(M-1,!0);if(i>0&&i<1)c.continuous[e]=!0;else{let s=1===i?t+1:t-1;s=(s+m)%m;let a=1===i?0:1,o=r.roundedCurves[t].getTangent(i),l=r.roundedCurves[s].getTangent(a);c.continuous[e]=o.dot(l)>.95}}t&&(c.normals[2*e+0]*=-1,c.normals[2*e+1]*=-1),[u,d,f]=[d,f,f+1],f>=h&&(f-=a)}while(f!==s+1)}return{regions:[s,...a],infos:p,vertices:o.vertices}}_insertVertex(e,t,i,r,s){let a=2*t,o=3*t;e.positions[o+0]=i.x,e.positions[o+1]=i.y,e.positions[o+2]=i.z,e.normals[o+0]=r.x,e.normals[o+1]=r.y,e.normals[o+2]=r.z,e.uvs[a+0]=s.x,e.uvs[a+1]=s.y}_extrudeRegion(e,t,i,r,s,a,o){let l=new iv,h=new iv,c=new iv,d=new iv,u=new tQ;i.forEach((a,o)=>{let p=r[o],f=e.verticesStart*i.length+e.verticesCount*o;for(let r=0;r<e.count;r++){let m=(e.start+r)*2;if(l.set(t[m+0],t[m+1],0),c.copy(l).applyMatrix4(a).add(p),e.continuous[r])d.set(e.normals[2*r+0],e.normals[2*r+1],0);else{let i=0===r?(e.start+e.count-1)*2:m-2;h.set(t[i+0],t[i+1],0),d.copy(l).sub(h),d.set(-d.y,d.x,0),e.isHole||d.negate()}if(d.applyMatrix4(a).normalize(),u.set(0===r?1:r/e.count,o/(i.length-1)),this._insertVertex(s,f,c,d,u),f++,!e.continuous[r]||0===r){if(0===r)d.set(e.normals[2*r+0],e.normals[2*r+1],0),u.set(0,o/(i.length-1));else{let i=r===e.count-1?2*e.start:m+2;h.set(t[i+0],t[i+1],0),d.copy(h).sub(l),d.set(-d.y,d.x,0),e.isHole||d.negate()}d.applyMatrix4(a).normalize(),this._insertVertex(s,f,c,d,u),f++}}});let p=i.length-1;for(let t=0;t<p;t++){let r=e.verticesStart*i.length+e.verticesCount*t,s=e.verticesStart*i.length+e.verticesCount*(t+1),o=0;for(let t=0;t<e.count;t++){(!e.continuous[t]||0===t)&&o++;let i=t===e.count-1?0:o+1,l=r+o,h=r+i,c=s+i,d=s+o;e.isHole?a.push(l,c,h,l,d,c):a.push(l,h,c,l,c,d),o++}}}_closeEnd(e,t,i,r,s,a,o){let l=e.vertexCount,h=new iv(0,0,o?-1:1).applyMatrix4(s),c=new iv,d=new tQ;for(let i=0;i<l;i++){let o=2*i;c.set(e.vertices[o+0],e.vertices[o+1],0).applyMatrix4(s).add(a),this._insertVertex(r,t+i,c,h,d)}let u=e.elements;for(let r=0;r<e.elementCount;r++){let e=3*r,s=u[e+0]+t,a=u[e+(o?1:2)]+t,l=u[e+(o?2:1)]+t;i.push(s,a,l)}}applyMatrix4OnRange(e,t,i){let r=e.elements,s=new tK().getNormalMatrix(e).elements,a,o,l,h,c=this.attributes.position,d=this.attributes.normal;if(!c||!d)return;let u=c.array,p=d.array,f=c.itemSize;
3154for(let e=t*f,c=i*f;e<c;e+=f)a=u[e+0],o=u[e+1],l=u[e+2],h=1/(r[3]*a+r[7]*o+r[11]*l+r[15]),u[e+0]=(r[0]*a+r[4]*o+r[8]*l+r[12])*h,u[e+1]=(r[1]*a+r[5]*o+r[9]*l+r[13])*h,u[e+2]=(r[2]*a+r[6]*o+r[10]*l+r[14])*h,a=p[e+0],o=p[e+1],l=p[e+2],p[e+0]=s[0]*a+s[3]*o+s[6]*l,p[e+1]=s[1]*a+s[4]*o+s[7]*l,p[e+2]=s[2]*a+s[5]*o+s[8]*l;c.needsUpdate=!0,d.needsUpdate=!0}reverseIndicesOnRange(e,t){let i=this.index;if(i){for(let r=e;r<t;r+=3){let e=i.getX(r),t=i.getX(r+1),s=i.getX(r+2);i.setXYZ(r,s,t,e)}i.needsUpdate=!0}}};function wq(){let e=new rz;return e.setAttribute("position",new rM(new Float32Array([]),3)),e.setIndex(new rM(new Uint16Array([]),1)),e}var wX,wY,wQ,wK,wZ,wJ,w$=wq().attributes,w0=class extends rz{constructor(e,t){super(),this.charWidths=[],this.charCoords=[],this.wrappedText=[],this.isLowResolution=!1,this.vectorShapes=[],Object.assign(this.attributes,w$),this.userData={parameters:e,type:"TextGeometry"};let i=t.getFont(e.font);i?.isLoaded?(this.font=i,this.update(e)):this.updateFont(e.font,t).then(()=>{this.update(e),t?.requestRender()})}async updateFont(e,t){let i=t.getFont(e);i&&(this.font=i,await i.loadingPromise)}update(e){let t=this.font;if(this.userData={parameters:e,type:"TextGeometry"},!t?.isLoaded){console.warn("Cannot update text because its font is not loaded");return}let{width:i,height:r,depth:s,extrudeBevelSize:a,extrudeBevelSegments:o,text:l,textTransform:h}=e,c=yg.getDisplayedValue(l),d=function(e,t,i){let r=[""],s="";for(let a of i)s+=a," "===a||a===`
3155`?(r[r.length-1]+=s,s="",a===`
3156`&&r.push("")):t.getTextWidth(r[r.length-1]+s,e)>e.width&&(r[r.length-1].length&&r.push(""),t.getTextWidth(r[r.length-1]+s,e)>e.width&&(1===s.length?(r[r.length-1]+=s,s=""):(r[r.length-1]+=s.slice(0,-1),s=s[s.length-1],r.push(""))));return r[r.length-1]+=s,r}(e,t,2===h?c.toUpperCase():3===h?c.toLowerCase():c),{shapes:u,charWidths:p,charCoords:f}=t.generateShapes(d,e),m=u.map(e=>new bp().fromShape(e,!0));this.vectorShapes=m;let g=m.map(e=>bj.create({shape:e,parameters:{depth:s,extrudeBevelSegments:o,extrudeBevelSize:a,windingRule:s<=0?wK.NONZERO:wK.ODD,subdivisions:this.isLowResolution&&s>0?1:12}})),v=g.length?gQ(g):wq();v.translate(-(("number"==typeof i?i:1)*.5),("number"==typeof r?r:1)*.5,0),this.dispose(),this.wrappedText=d,this.charCoords=f,this.charWidths=p,this.deleteAttribute("extrudeNormal"),Object.entries(v.attributes).forEach(([e,t])=>{this.setAttribute(e,t)}),this.setIndex(v.index),this.computeBoundingSphere()}clone(){let e=uH(new rz,w0.prototype);return e.copy(this),console.log("CloneGeometry",this,e),e}copy(e){return Object.entries(e.attributes).forEach(([e,t])=>{this.setAttribute(e,t)}),this.setIndex(e.index),this.userData={parameters:{...e.userData.parameters},type:"TextGeometry"},this}async setText(e){this.font&&await this.font.loadingPromise,await this.update({...this.userData.parameters,text:{textValue:e}})}get text(){return this.userData.parameters.text??""}},w1=new Promise(e=>{wJ=e}),w2=!1,w3=["font"];function w4(e,t,i,r){let s,a,o,l;for(let i of("PathGeometry"===e.type?(a=JSON.parse(JSON.stringify(e)),o=[[],["extrusion"]]):(a={...e},o=[[]]),o)){let e=a;for(let t of i)e=e[t];for(s in e){let a=e[s];md(a)&&!w3.includes(s)&&(e[s]=t.getVariable(a,[r.uuid,"geometry",...i,s]),md(e[s])&&(e[s]=1))}}let h={parameters:a,type:a.type};if("PathGeometry"===a.type)h.path=a.path;else if("VectorGeometry"===a.type){let e=bp.createFromState(a.shape,a.width,a.height);h.shape=e}else if("NonParametricGeometry"===a.type){if(a.data.groups&&a.data.groups?.forEach(e=>e.materialIndex=Math.max(e.materialIndex??0,0)),h.geometry=new lm().parse(a),0===h.geometry.groups.length){let e=h.geometry;e.addGroup(0,Math.max(e.getIndex()?.count??0,e.getAttribute("position").count),0)}}else if("SubdivGeometry"===a.type){let t=new Ss(a,i);return t.data=e,t}else{if("TextGeometry"===a.type||"InputGeometry"===a.type)return new w0(a,t);if("UIGeometry"===a.type)return wy.create({parameters:{width:a.width,height:a.height,cornerRadius:a.cornerRadius,cornerType:a.cornerType}})}try{l=SS(h)}catch(e){console.error(e)}if(!l){let e=bp.createFromState(vU.defaultData(),100,100);h.shape=e,l=SS(h)}return l}var w5=new iX;function w6(e,t,i,r){let s=e.position.array,a=e.normal.array,o=w5.makeScale(t,i,r).invert().elements,l,h,c;for(var d=0,u=s.length;d<u;d+=3)s[d]*=t,s[d+1]*=i,s[d+2]*=r,l=a[d],h=a[d+1],c=a[d+2],a[d]=o[0]*l+o[4]*h+o[8]*c,a[d+1]=o[1]*l+o[5]*h+o[9]*c,a[d+2]=o[2]*l+o[6]*h+o[10]*c;e.position.needsUpdate=!0,e.normal.needsUpdate=!0}var w8,w9,w7=new ib,Se=new iv;w1.then(e=>{w9=e});
3156var St=new Float32Array([10,10,0,-10,10,0,-10,-10,0,10,-10,0]),Si=new Uint32Array([0,1,2,3]),Sr=new Uint8Array([4]),Ss=class extends rz{constructor(e,t){super(),this.data=e,this.flatShading=t,this.subdivPointer=0,this.rebuild(),this.freeSubdivPointer()}mutateDirectlyScaleBaked(e,t){this.freeSubdivPointer();let i=this.data.scaleBaked,r=ge.div(t,i);this.subdividedGeometry&&w6(this.subdividedGeometry.attributes,...r),this.originalGeometry&&w6(this.originalGeometry.attributes,...r),this.data=e;let s=this.userData.parameters;this.userData.parameters={width:s.width*r[0],height:s.height*r[1],depth:s.depth*r[2]},this.originalGeometry.boundingSphere.center.multiply(Se.fromArray(r));let a=Se.set(s.width,s.height,s.depth).length();this.originalGeometry.boundingSphere.radius=a/2}ensureSubdivPointer(){return 0===this.subdivPointer&&this.rebuild(),this.subdivPointer}rebuild(){let e,t,i;try{({originalGeometry:e,subdividedGeometry:t,subdivPointer:i}=Ss.build(this.data,void 0,!this.flatShading,void 0))}catch{e=new rJ(100,100,100),i=0}this.subdivPointer=i,this.originalGeometry=e,this.subdividedGeometry=t??void 0,Object.assign(this,this.subdividedGeometry??this.originalGeometry),this.calcBoundingBox()}freeSubdivPointer(){this.subdivPointer&&(Ss.freeSubdivPointer(this.subdivPointer),this.subdivPointer=0)}dispose(){super.dispose(),this.freeSubdivPointer()}calcBoundingBox(){let e=this.originalGeometry;null===e.boundingSphere&&(e.boundingSphere=new iN,this.subdividedGeometry&&(this.subdividedGeometry.boundingSphere=e.boundingSphere));let t=e.attributes.position,i=e.boundingSphere.center;w7.setFromBufferAttribute(t),w7.getCenter(i),e.boundingSphere.radius=i.distanceTo(w7.max),isNaN(e.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this),w7.getSize(Se);let r={width:Se.x,height:Se.y,depth:Se.z};return this.userData.parameters=r,r}static build(e,t,i,r){let s,a,o,l=e?.phongAngle??35;!1===i&&(l=-1),t&&(w9.free_bvh(t),w9.free_subdivision_surface(t));try{s=Ss.allocate(e,r)}catch(t){console.error(t,e),s=Ss.allocate({positionWASM:St,indexWASM:Si,verticesPerFaceWASM:Sr},r)}if(w9.set_destination_refinement_level(s,0),a=Ss.buildLevel(s,!0,l),e.subdivisions>0)try{w9.set_destination_refinement_level(s,e.subdivisions),o=Ss.buildLevel(s,!1,l)}catch{try{w9.set_destination_refinement_level(s,e.subdivisions-1),o=Ss.buildLevel(s,!1,l)}catch{o=null}}else o=null;return{subdivPointer:s,originalGeometry:a,subdividedGeometry:o}}static primitiveToQuads(e,t,i){let r,s,a,o,l;e.widthSegments>16&&(e.widthSegments=16),e.heightSegments>16&&(e.heightSegments=16),e.depthSegments>16&&(e.depthSegments=16),e.radialSegments>16&&(e.radialSegments=16),"DodecahedronGeometry"===e.type&&(e.detail=0);let h=void 0!==e.shape||void 0!==e.path?t.geometry:w4(e,i,!1),c;if(c="TorusGeometry"===e.type&&e.arc===2*Math.PI?h.getClosedTorusIndicesForBooleanOrSubdiv():h.getIndex(),{positions:r,triIndices:o}=Sn(h.getAttribute("position"),c),"CylinderGeometry"===e.type&&0===e.cornerRadius&&0===e.hollow&&!1===e.openEnded){let t=e.radialSegments*e.heightSegments*6,i=t+3*e.radialSegments;l=[t,i]}return{indices:s,verticesPerFace:a}=Sd(r,o,h,l),{positions:r,indices:s,verticesPerFace:a}}static allocate(e,t){let i,r,s,a,o=[],l=[];e.positionWASM&&e.positionWASM.length>0?(r=e.positionWASM,s=e.indexWASM,a=e.verticesPerFaceWASM):(r=St,s=Si,a=Sr);let h=r.length,c=s.length,d=a.length,u=r.length+o.length+l.length,p=s.length+a.length,f=u*Float32Array.BYTES_PER_ELEMENT+p*Uint32Array.BYTES_PER_ELEMENT,m=u*Float32Array.BYTES_PER_ELEMENT,g=(Uint32Array.BYTES_PER_ELEMENT,w9._malloc(f)),v=new Float32Array(w9.HEAPF32.buffer,g,u),y=new Uint32Array(w9.HEAPU32.buffer,g+m,p);v.set(r,0),v.set(o,r.length),v.set(l,r.length+o.length),y.set(s,0),y.set(a,s.length),e?.scaleBaked?.some(e=>1!==e)&&(i=new iX().makeScale(...e.scaleBaked)),t&&(i?i.premultiply(t):i=t);let x=i?w9.alloc_subdivision_surface2(g,h,g+m,c,g+m+s.length*Uint32Array.BYTES_PER_ELEMENT,d,i.elements):w9.alloc_subdivision_surface(g,h,g+m,c,g+m+s.length*Uint32Array.BYTES_PER_ELEMENT,d);return w9._free(g),x}static buildLevel(e,t,i,r,s){let a=s?w9.get_mesh_data2(e,t?w9.Level.CONTROL:w9.Level.REFINED,i,s.elements):w9.get_mesh_data(e,t?w9.Level.CONTROL:w9.Level.REFINED,i),o=w9.HEAPU32.subarray(a>>2,(a>>2)+8),l=o.subarray(4,8),h=0,c=w9.HEAPU32[o[h]>>2],d=w9.HEAPF32.subarray(c>>2,(c>>2)+l[h]);h++;let u=w9.HEAPU32[o[h]>>2],p=w9.HEAPF32.subarray(u>>2,(u>>2)+l[h]);h++;let f=w9.HEAPU32[o[h]>>2],m=w9.HEAPU32.subarray(f>>2,(f>>2)+l[h]);h++;let g=w9.HEAPU32[o[h]>>2],v=w9.HEAPU32.subarray(g>>2,(g>>2)+l[h]);if(h++,void 0===r){let e=new rz;if(e.setIndex(new rC(v,1)),e.setAttribute("position",new rT(d,3)),e.setAttribute("normal",new rT(p,3)),t){e.setAttribute("faceMap",new rC(m,1));let t=new Float32Array(p.length/3*4).fill(0);e.setAttribute("color",new rM(t,4))}return w9.free_mesh_data(a),e.userData.type="SubdivGeometry",e}r.getAttribute("position").copyArray(d),r.getAttribute("normal").copyArray(p),r.attributes.position.needsUpdate=!0,r.attributes.normal.needsUpdate=!0,w9.free_mesh_data(a)}static freeSubdivPointer(e){w9.free_bvh(e),w9.free_subdivision_surface(e)}static buildControlCageWireframe(e,t,i){let r=w9.get_wireframe_data_for_base_level(e),s=w9.HEAPU32.subarray(r>>2,(r>>2)+4),a=s.subarray(2,4),o=0,l=w9.HEAPU32[s[o]>>2],h=w9.HEAPF32.subarray(l>>2,(l>>2)+a[o]);o++;let c=w9.HEAPU32[s[o]>>2],d=w9.HEAPU32.subarray(c>>2,(c>>2)+a[o]);if(void 0===t){let e=new rz;e.setAttribute("position",new rT(h,3));let t=new Float32Array(h.length);for(let e=0,r=h.length;e<r;)t[e++]=i.r,t[e++]=i.g,t[e++]=i.b;return e.setAttribute("color",new rM(t,3)),e.setIndex(new rC(d,1)),w9.free_wireframe_data_for_base_level(r),e}t.getAttribute("position").copyArray(h),t.attributes.position.needsUpdate=!0,w9.free_wireframe_data_for_base_level(r)}static updateCollabMesh(e,t,i){let r=0===t;r||w9.set_destination_refinement_level(e,t);let s=i?w9.get_topological_data2(e,r?w9.Level.CONTROL:w9.Level.REFINED,i.elements):w9.get_topological_data(e,r?w9.Level.CONTROL:w9.Level.REFINED),a=w9.HEAPU32.subarray(s>>2,(s>>2)+6),o=a.subarray(3,6),l=0,h=w9.HEAPU32[a[l]>>2],c=new Float32Array(w9.HEAPF32.subarray(h>>2,(h>>2)+o[l]));l++;let d=w9.HEAPU32[a[l]>>2],u=new Uint32Array(w9.HEAPU32.subarray(d>>2,(d>>2)+o[l]));l++;let p=w9.HEAPU32[a[l]>>2],f=new Uint8Array(w9.HEAPU32.subarray(p>>2,(p>>2)+o[l]));return w9.free_topological_data(s),{positions:c,indices:u,verticesPerFace:f}}},Sa=["getX","getY","getZ"];function Sn(e,t){let i={},r=t?t.count:e.count,s=0,a=[],o=[];for(let l=0;l<r;l++){let r=t?t.getX(l):l,h="";for(let t=0;t<3;t++)h+=`${~~(1e4*e[Sa[t]](r))},`;if(h in i)a.push(i[h]);else{for(let t=0;t<3;t++)o.push(e[Sa[t]](r));i[h]=s,a.push(s),s++}}let l=[];for(let e=0;e<a.length;e+=3)a[e]===a[e+1]||a[e]===a[e+2]||a[e+1]===a[e+2]||l.push(a[e],a[e+1],a[e+2]);return{positions:o,triIndices:l}}var So=new iv,Sl=new iv,Sh=new iv,Sc=new iv;function Sd(e,t,i,r){let s=[],a=[];if(void 0!==i.userData.shape&&0===i.userData.parameters.depth&&0===i.userData.shape.shapeHoles.length){let t=i.userData.shape.extractShapePointsToFlatArray([]),r=i.userData.parameters.spikes;if("EllipseGeometry"===i.userData.type&&r<=24&&r%4==0&&i.userData.parameters.angle>=360){let e=t.length/2/r;t=t.filter((t,i)=>Math.floor(i/2)%e==0)}let o=0;for(let e=0;e<t.length;e+=2)o+=(t[e]-t[(0===e?t.length:e)-2])*(t[e+1]+t[(0===e?t.length:e)-1]);e.length=0;let l=0;if(o<0)for(let i=0;i<t.length;i+=2)e.push(t[i],t[i+1],0),s.push(l++);else for(let i=t.length-2;i>=0;i-=2)e.push(t[i],t[i+1],0),s.push(l++);return a.push(l),{indices:s,verticesPerFace:a}}let o=new Float32Array([i.userData.parameters.depth])[0],l=0;for(;l<t.length;){if(i.useNgonForTopBottomFaceDuringBake){let i=0;if((e[3*t[l]+2]===o||0===e[3*t[l]+2])&&i++,(e[3*t[l+1]+2]===o||0===e[3*t[l+1]+2])&&i++,(e[3*t[l+2]+2]===o||0===e[3*t[l+2]+2])&&i++,3===i)break}t[l+1]===t[l+3]&&t[l+2]===t[l+5]||t[l+0]===t[l+3]&&t[l+2]===t[l+4]?(So.set(e[3*t[l]],e[3*t[l]+1],e[3*t[l]+2]),Sl.set(e[3*t[l+1]],e[3*t[l+1]+1],e[3*t[l+1]+2]),Sh.set(e[3*t[l+4]],e[3*t[l+4]+1],e[3*t[l+4]+2]),Sc.set(e[3*t[l+5]],e[3*t[l+5]+1],e[3*t[l+5]+2]),Sl.sub(So).normalize(),Sh.sub(So).normalize(),Sc.sub(So).normalize(),Math.abs(Sl.cross(Sh).dot(Sc))>.005||r&&r.some((e,t)=>t%2!=1&&l>
3156=r[t]&&l<r[t+1])?(s.push(t[l],t[l+1],t[l+2]),a.push(3),l+=3):(s.push(t[l],t[l+1],t[l+4],t[l+5]),a.push(4),l+=6)):(s.push(t[l],t[l+1],t[l+2]),a.push(3),l+=3)}if(i.useNgonForTopBottomFaceDuringBake){let t=[],r=[],l=0;for(let i=0,s=0;i<e.length;i+=3,s++)0===e[i+2]&&(t.push(s),l++),e[i+2]===o&&r.push(s);if(0===i.userData.parameters.extrudeBevelSize){let e=r[0];r[0]=r[1],r[1]=e}t.reverse(),s.push(...t,...r),a.push(l,l)}return{indices:s,verticesPerFace:a}}var Su={};function Sp(e){let t=e.length,i=t*Uint32Array.BYTES_PER_ELEMENT,r=t*Float32Array.BYTES_PER_ELEMENT,s=Number.isInteger(e[0])?i:r,a=_j._malloc(s);return(Number.isInteger(e[0])?new Uint32Array(_j.HEAPU32.buffer,a,t):new Float32Array(_j.HEAPF32.buffer,a,t)).set(e,0),a}function Sf(e){switch(e){case 0:return _j.OP.UNION;case 1:return _j.OP.INTERSECTION;case 2:return _j.OP.A_MINUS_B;default:throw Error("Unknown boolean operation "+e)}}function Sm(e,t){void 0===_G&&(_G=_j.init_csg());let i=Sp(e),r=_j.csg_calc_topological(_G,i,e.length,Sf(t));_j._free(i);let s=_j.HEAPU32.subarray(r>>2,(r>>2)+6),a=s.subarray(3,6),o=0,l=_j.HEAPU32[s[o]>>2],h=new Float32Array(_j.HEAPF32.subarray(l>>2,(l>>2)+a[o]));o++;let c=_j.HEAPU32[s[o]>>2],d=new Uint32Array(_j.HEAPU32.subarray(c>>2,(c>>2)+a[o]));o++;let u=_j.HEAPU32[s[o]>>2],p=new Uint8Array(_j.HEAPU32.subarray(u>>2,(u>>2)+a[o]));return _j.free_mesh_data(r),{positions:h,indices:d,verticesPerFace:p}}function Sg(e,t,i,r){void 0===_G&&(_G=_j.init_csg());let s=Sp(e),a=_j.csg_calc(_G,s,e.length,r,Sf(t));_j._free(s);let o=_j.HEAPU32.subarray(a>>2,(a>>2)+5),l=o.subarray(2,5),h=0,c=_j.HEAPU32[o[h]>>2],d=_j.HEAPF32.subarray(c>>2,(c>>2)+l[h]);h++;let u=_j.HEAPU32[o[h]>>2],p=_j.HEAPF32.subarray(u>>2,(u>>2)+l[h]),f=l[++h];i.setAttribute("position",new rT(d,3)),i.setAttribute("normal",new rT(p,3));let m=_j.HEAPF32.subarray((a>>2)+5,(a>>2)+5+6);return null===i.boundingSphere&&(i.boundingSphere=new iN),i.boundingSphere.center.set(m[0],m[1],m[2]),i.boundingSphere.radius=(m[3]**2+m[4]**2+m[5]**2)**.5,i.userData.parameters={width:2*m[3],height:2*m[4],depth:2*m[5]},_j.free_mesh_data(a),f}function Sv(e,t,i){let r,s,a;if(void 0===_j)return -1;if(t&&void 0!==e.userData.positions){let t=e.userData;a=t.verticesPerFace.length,r=t.positions,s=Array(t.verticesPerFace.reduce((e,t)=>e+t,0)+a);for(let e=0,i=0,r=0;e<t.verticesPerFace.length;e++){s[r++]=t.verticesPerFace[e];for(let a=0;a<t.verticesPerFace[e];a++)s[r++]=t.indices[i++]}}else({positions:r,faceIndices:s,nFaces:a}=function(e,t,i){let r,s;s="TorusGeometry"===e.userData.parameters.type&&e.userData.parameters.arc===2*Math.PI?e.getClosedTorusIndicesForBooleanOrSubdiv():e.getIndex();let{positions:a,triIndices:o}=Sn(e.getAttribute("position"),s),l;if(t&&i){let{indices:t,verticesPerFace:i}=Sd(a,o,e);l=i.length,r=[];for(let e=0,s=0;e<l;e++){r.push(i[e]);for(let a=0;a<i[e];a++)r.push(t[s++])}}else{let e=o.length;r=Array(e+e/3),l=0;for(let e=0,t=0;t<r.length;)r[t++]=3,l++,r[t++]=o[e++],r[t++]=o[e++],r[t++]=o[e++]}return{positions:a,faceIndices:r,nFaces:l}}(e,t,i));let o=r.length,l=s.length,h=r.length,c=s.length,d=h*Float32Array.BYTES_PER_ELEMENT+c*Uint32Array.BYTES_PER_ELEMENT,u=h*Float32Array.BYTES_PER_ELEMENT,p=(Uint32Array.BYTES_PER_ELEMENT,_j._malloc(d)),f=new Float32Array(_j.HEAPF32.buffer,p,h),m=new Uint32Array(_j.HEAPU32.buffer,p+u,c);f.set(r,0),m.set(s,0);let g=_j.get_csg_mesh(p,o,p+u,l,a);return _j._free(p),g}function Sy(e){return _j.has_open_edges(e)}function Sx(e,t){_j.transform_csg_mesh(e,t.elements)}function Sb(e){_j.free_csg_mesh(e)}((e,t)=>{for(var i in t)tp(e,i,{get:t[i],enumerable:!0})})(Su,{calcBoolean:()=>Sg,calcBooleanTopological:()=>Sm,freeMeshSet:()=>Sb,getMeshSet:()=>Sv,hasOpenEdges:()=>Sy,transformMeshSet:()=>Sx}),new Promise(e=>{_U=e}).then(e=>_j=e);var Sw={ConeGeometry:xH,CubeGeometry:xW,CylinderGeometry:xU,DodecahedronGeometry:xQ,EllipseGeometry:bH,HelixGeometry:bZ,IcosahedronGeometry:b0,LatheGeometry:b2,NonParametricGeometry:wu,PolygonGeometry:wp,PyramidGeometry:wf,RectangleGeometry:wy,SphereGeometry:wx,PlaneGeometry:wb,BackdropGeometry:ww,StarGeometry:w_,TextFrameGeometry:wA,TorusGeometry:wM,TorusKnotGeometry:wE,TriangleGeometry:wC,PathGeometry:wH,VectorGeometry:bj},SS=e=>Sw[e.type].create(e);function S_(e){return null!==e&&"booleanOp"in e}var SA=class extends xk(rK){constructor(){super(...arguments),this.booleanMeshSetAddress=-1,this.booleanWasTransformed=!1,this.booleanMatrixInvOld=new iX}updateVisible(e){super.updateVisible(e),this.visible=!S_(this.parent)&&this.visible,S_(this.parent)&&this.parent.invali
vendor: 4,246 bytes, line 3156
3156dateDownstreamBooleanData()}freeBooleanPointer(){-1!==this.booleanMeshSetAddress&&(Su.freeMeshSet(this.booleanMeshSetAddress),this.booleanMeshSetAddress=-1)}invalidateDownstreamBooleanData(e=!1){return e?this.booleanWasTransformed=!0:this.freeBooleanPointer(),S_(this.parent)?this.parent.invalidateDownstreamBooleanData():this}invalidateUpstreamBooleanData(){for(let e of(this.freeBooleanPointer(),this.children))e instanceof SA&&(e.freeBooleanPointer(),S_(e)&&e.invalidateUpstreamBooleanData())}updateTransformState(e,t){let i=super.updateTransformState(e,t);return i&&S_(this.parent)&&this.invalidateDownstreamBooleanData(!0),i}onVariableUpdate(e=!1){super.onVariableUpdate(e),S_(this.parent)&&this.invalidateDownstreamBooleanData(!0)}},SM=new ib;function SE(e,t=0,i=e.count,r,s){let a=1/0,o=1/0,l=1/0,h=-1/0,c=-1/0,d=-1/0;for(let r=t;r<i;r++){let t=e.getX(r),i=e.getY(r),s=e.getZ(r);t<a&&(a=t),i<o&&(o=i),s<l&&(l=s),t>h&&(h=t),i>c&&(c=i),s>d&&(d=s)}SM.min.set(a,o,l),SM.max.set(h,c,d),SM.getCenter(r),SM.getSize(s).multiplyScalar(.5)}var SC=new rz,ST=new rS,SP=class extends SA{constructor(e,t){super(SC,ST),this.super_Entity(e,t)}updateState(e,t){this.updateState_Entity(e,t)}updateEntityBoxSize(e,t){let i=this.geometry.getAttribute("position");void 0!==i?SE(i,this.geometry.drawRange.start,this.geometry.drawRange.count<1/0?this.geometry.drawRange.count:i.count,e,t):super.updateEntityBoxSize(e,t)}},SD=class{constructor(e){if(this.hashProperties=void 0,this.isNode=!0,this.shortcuts={},null===SD.uuidContext)throw Error("plz startContext");SD.uuidContext===SD.globalContext?this.uuid="_gid"+SD.uuidContext.nodeContextUuid++:this.uuid="_uid"+SD.uuidContext.nodeContextUuid++,this.type=e,this.name=""}static startContext(e){null===this.uuidContext||this.uuidContext===SD.globalContext?this.uuidContext=e:console.error("Can't start context twice")}static endContext(e){this.uuidContext!==e&&console.error("Can't end context twice"),this.uuidContext=null}analyze(e,t){t=t??{},e.analyzing=!0,this.build(e.addFlow(t.slot,t.cache,t.context),"v4"),e.clearVertexNodeCode(),e.clearFragmentNodeCode(),e.removeFlow(),e.analyzing=!1}analyzeAndFlow(e,t,i){return i=i??{},this.analyze(e,i),this.flow(e,t,i)}flow(e,t,i){i=i??{},e.addFlow(i.slot,i.cache,i.context);let r={result:this.build(e,t),code:e.clearNodeCode(),extra:e.context.extra};return e.removeFlow(),r}build(e,t,i){t=t??this.getType(e,t);let r=e.getNodeData(i??this);return e.analyzing&&this.appendDepsNode(e,r,t),-1===e.nodes.indexOf(this)&&e.nodes.push(this),void 0!==this.updateFrame&&-1===e.updaters.indexOf(this)&&e.updaters.push(this),this.generate(e,t,i)}updateFrame(e){}generateReadonly(e,t,i,r,s,a){return""}generate(e,t,i,r,s){return""}parse(e,t,i,r){}appendDepsNode(e,t,i){t.deps=(t.deps||0)+1;let r=e.getTypeLength(i);(r>(t.outputMax||0)||this.getType(e,i))&&(t.outputMax=r,t.output=i)}setName(e){this.name=e}getName(){return this.name}getType(e,t){return"sampler2D"===t||"samplerCube"===t?t:this.type}},SI=SD;SI.globalContext={nodeContextUuid:0},SI.uuidContext=SD.globalContext;var SO=class{constructor(e){e=e??{},this.name=e.name,this.type=e.type,this.node=e.node,this.size=e.size,this.needsUpdate=e.needsUpdate}get value(){return this.node.value}set value(e){this.node.value=e}},SR=new class{constructor(){this.nodes={},this.keywords={}}add(e){this.nodes[e.name]=e}addKeyword(e,t,i){i=void 0===i||i,this.keywords[e]={callback:t,cache:i}}remove(e){delete this.nodes[e.name]}removeKeyword(e){delete this.keywords[e]}get(e){return this.nodes[e]}getKeyword(e,t){return this.keywords[e].callback(t)}getKeywordData(e){return this.keywords[e]}contains(e){return void 0!==this.nodes[e]}containsKeyword(e){return void 0!==this.keywords[e]}},SL=class extends SI{constructor(e,t){super(e),this.scope="",t=t??{},this.shared=void 0===t.shared||t.shared,this.unique=void 0!==t.unique&&t.unique}build(e,t,i,r){if(t=t??this.getType(e),this.getShared(e,t)){let s=this.getUnique(e,t);s&&void 0===this.uuid&&(this.uuid=tY.generateUUID()),i=e.getUUID(i??this.getUUID(),!s);let a=e.getNodeData(i),o=a.output||this.getType(e);if(e.analyzing)return(a.deps||0)>0||this.getLabel()?(this.appendDepsNode(e,a,t),this.generate(e,t,i)):super.build(e,t,i);if(s)return a.name=a.name||super.build(e,t,i),a.name;
vendor: 5,541 bytes, line 3156
3156if(!this.getLabel()&&(!this.getShared(e,o)||e.context.ignoreCache||1===a.deps))return super.build(e,t,i);i=this.getUUID(!1);let l=this.getTemp(e,i);if(l)return e.format(l,o,t);{l=super.generate(e,t,i,a.output,r);let s=this.generate(e,o,i);return e.addNodeCode(l+" = "+s+";"),e.format(l,o,t)}}return super.build(e,t,i)}getShared(e,t){return"sampler2D"!==t&&"samplerCube"!==t&&this.shared}getUnique(e,t){return this.unique}setLabel(e){return this.label=e,this}getLabel(){return this.label}getUUID(e){let t=this.uuid;return"string"==typeof this.scope&&(t=this.scope+"-"+t),t}getTemp(e,t){t=t||this.uuid;let i=e.getVars()[t];return i?i.name:void 0}generate(e,t,i,r,s){return this.getShared(e,t)||console.error("TempNode is not shared"),i=i??this.uuid,e.getTempVar(i,r??this.getType(e),s,this.getLabel()).name}},SB=class extends SL{constructor(e,t){(t=t??{}).shared=void 0!==t.shared&&t.shared,super(e,t),this.readonly=!1}setReadonly(e){return this.readonly=e,this.hashProperties=this.readonly?["value"]:void 0,this}getReadonly(){return this.readonly}generate(e,t,i,r,s,a){i=e.getUUID(i??this.getUUID()),r=r??this.getType(e);let o=e.getNodeData(i);return this.getReadonly()&&void 0!==this.generateReadonly?this.generateReadonly(e,t,i,r,s,a):e.isShader("vertex")?(o.vertex||(o.vertex=e.createVertexUniform(r,this,s,a,this.getLabel())),e.format(o.vertex.name,r,t)):(o.fragment||(o.fragment=e.createFragmentUniform(r,this,s,a,this.getLabel())),e.format(o.fragment.name,r,t))}},Sz=class extends SB{constructor(e=0,t){super("v2"),this.nodeType="Vector2",this.value=e instanceof tQ?e:new tQ(e,t)}get x(){return this.value.x}set x(e){this.value.x=e}get y(){return this.value.y}set y(e){this.value.y=e}generateReadonly(e,t,i,r,s,a){return e.format("vec2("+this.value.x+", "+this.value.y+")",r,t)}},SF=class extends SB{constructor(e=0,t,i){super("v3"),this.nodeType="Vector3",this.value=e instanceof iv?e:new iv(e,t,i)}get x(){return this.value.x}set x(e){this.value.x=e}get y(){return this.value.y}set y(e){this.value.y=e}get z(){return this.value.z}set z(e){this.value.z=e}generateReadonly(e,t,i,r,s,a){return e.format("vec3("+this.value.x+", "+this.value.y+", "+this.value.z+")",r,t)}},SN=class extends ii{constructor(e,t,i,r){super(e,t,i),this.isColorA=!0,this.a=r}setRGBA(e,t,i,r){super.setRGB(e,t,i),this.a=r}copy(e){return super.copy(e),this.a="a"in e?e.a:1,this}clone(){return new this.constructor(this.r,this.g,this.b,this.a)}equals(e){return super.equals(e)&&this.a===e.a}setStyle(e,t="srgb"){let i;if("transparent"===e)return this.setRGBA(0,0,0,0),this;if(i=/^((?:rgb|hsl)a?)\(([^)]*)\)/.exec(e)){let r,s=i[1],a=i[2];switch(s){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return this.a="rgba"===s?parseFloat(r[4]):1,super.setStyle(e,t);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)%\s*,\s*(\d*\.?\d+)%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return this.a="hsla"===s?parseFloat(r[4]):1,super.setStyle(e,t)}}return super.setStyle(e,t)}get x(){return this.r}get y(){return this.g}get z(){return this.b}get w(){return this.a}set x(e){this.r=e}set y(e){this.g=e}set z(e){this.b=e}set w(e){this.a=e}},Sk=class extends SB{constructor(e){super("v4"),this.nodeType="Vector4",this.value=e instanceof SN?e:new SN(e.r,e.g,e.b,e.a)}generateReadonly(e,t,i,r,s,a){return e.format("vec4("+this.value.r+", "+this.value.g+", "+this.value.b+", "+this.value.a+")",r,t)}},SU=/^\s*([a-z_0-9]+)\s([a-z_0-9]+)\s*\((.*?)\)/i,SV=/[a-z_0-9]+/gi,Sj=class extends SL{constructor(e,t,i,r,s){super(s),this.src="",this.nodeType="Function",this.useKeywords=!0,this.includes=[],this.extensions={},this.keywords={},this.isMethod=void 0===s,this.isInterface=!1,this.parse(e,t,i,r)}getShared(e,t){return!this.isMethod}getType(e){return e.getTypeByFormat(this.type)}getInputByName(e){if(this.inputs){let t=this.inputs.length;for(;t--;)if(this.inputs[t].name===e)return this.inputs[t]}}getIncludeByName(e){if(this.includes){let t=this.includes.length;for(;t--;)if(this.includes[t].name===e)return this.includes[t]}}generate(e,t,i,r,s){let a,o=0,l=this.src;if(this.includes)for(let t=0;t<this.includes.length;t++)e.include(this.includes[t],this);for(let t in this.extensions)e.extensions[t]=!0;let h=[];for(;a=SV.exec(this.src);)h.push(a);for(let t=0;t<h.length;t++){let i=h[t],r=i[0],s=!this.isMethod||!this.getInputByName(r),a=r;if(this.keywords[r]||this.useKeywords&&s&&SR.containsKeyword(r)){let t=this.keywords[r];if(!t){let i=SR.getKeywordData(r);i.cache&&(t=e.keywords[r]),t=t||SR.getKeyword(r,e),i.cache&&(e.keywords[r]=t)}a=t.build(e)}r!==a&&"."!==l[i.index+o-1]&&(l=l.substring(0,i.index+o)+a+l.substring(i.index+r.length+o),o+=a.length-r.length),void 0===this.getIncludeByName(a)&&SR.contains(a)&&e.include(SR.get(a))}return"source"===t?l:this.isMethod?(this.isInterface||e.include(this,void 0,l),this.name):e.format("( "+l+" )",this.getType(e),t)}parse(e,t,i,r){if(this.src=e||"",this.includes=t??[],this.extensions=i??{},this.keywords=r??{},this.isMethod){let e=SU.exec(this.src);if(this.inputs=[],e&&4==e.length){this.type=e[1],this.name=e[2];let t=e[3].match(SV);if(t){let e=0;for(;e<t.length;){let i=t[e++],r;"in"===i||"out"===i||"inout"===i?r=t[e++]:(r=i,i="");let s=t[e++];this.inputs.push({name:s,type:r,qualifier:i})}}this.isInterface=-1===this.src.indexOf("{")}else this.type="",this.name=""}}},SG=/^([a-z_0-9]+)\s([a-z_0-9]+)\s?\=?\s?(.*?)(\;|$)/i,SH=class extends SL{constructor(e="",t){super(),this.src="",this.useDefine=!1,this.nodeType="Const",this.parse(e||SH.PI,void 0,void 0,void 0,t)}
vendor: 12,915 bytes, lines 3156-3235
3156getType(e){return e.getTypeByFormat(this.type)}parse(e,t,i,r,s){this.src=e||"";let a,o,l="",h=SG.exec(e);this.useDefine=s??"#"===this.src.charAt(0),h&&h.length>1?(o=h[1],a=h[2],l=h[3]):(a=this.src,o="f"),this.name=a,this.type=o,this.value=l}build(e,t){if("source"===t){if(this.value)return this.useDefine?"#define "+this.name+" "+this.value:"const "+this.type+" "+this.name+" = "+this.value+";";if(this.useDefine)return this.src}return e.include(this),e.format(this.name,this.getType(e),t)}generate(e,t,i,r,s){return e.format(this.name,this.getType(e),t)}};SH.PI="PI",SH.PI2="PI2",SH.RECIPROCAL_PI="RECIPROCAL_PI",SH.RECIPROCAL_PI2="RECIPROCAL_PI2",SH.LOG2="LOG2",SH.EPSILON="EPSILON";var SW=RegExp(`^structs*([a-z_0-9]+)s*{s*((.|
3157)*?)}`,"gim"),Sq=RegExp("s*(w*?)s*(w*?)(=|;)","gim"),SX=class extends SL{constructor(e=""){super(),this.inputs=[],this.src="",this.nodeType="Struct",this.parse(e)}getType(e){return e.getTypeByFormat(this.name)}getInputByName(e){let t=this.inputs.length;for(;t--;)if(this.inputs[t].name===e)return this.inputs[t]}generate(e,t,i,r,s){return"source"===t?this.src+";":e.format("( "+this.src+" )",this.getType(e),t)}parse(e=""){this.src=e,this.inputs=[];let t=SW.exec(e);if(t){let e=t[2],i;for(;i=Sq.exec(e);)this.inputs.push({type:i[1],name:i[2]});this.name=t[1]}else this.name="";this.type=this.name}},SY=class extends SL{constructor(e){super("v2",{shared:!1}),this.nodeType="UV",this.index=e??0}generate(e,t){e.requires.uv[this.index]=!0;let i=this.index>0?this.index+1:"",r=e.isShader("vertex")?"uv"+i:"vUv"+i;return e.format(r,this.getType(e),t)}};SR.addKeyword("uv",function(){return new SY}),SR.addKeyword("uv2",function(){return new SY(1)});var SQ=class extends SL{constructor(e,t){super("v4"),this.nodeType="ColorSpace",this.input=e,this.method=t??SQ.LINEAR_TO_LINEAR,this.hashProperties=["method"]}static getEncodingComponents(e){switch(e){case 3e3:return["Linear"];case 3001:return["sRGB"];default:return[]}}generate(e,t){let i=this.input.build(e,"v4"),r=this.getType(e),s=SQ.Nodes[this.method],a=e.include(s);if(a===SQ.LINEAR_TO_LINEAR)return e.format(i,r,t);if(s.inputs?.length!==2)return e.format(a+"( "+i+" )",r,t);{let s=this.factor.build(e,"f");return e.format(a+"( "+i+", "+s+" )",r,t)}}fromEncoding(e){let t=SQ.getEncodingComponents(e);this.method="LinearTo"+t[0],this.factor=t[1]}fromDecoding(e){let t=SQ.getEncodingComponents(e);this.method=t[0]+"ToLinear",this.factor=t[1]}};SQ.Nodes={LinearToLinear:new Sj(["vec4 LinearToLinear( in vec4 value ) {","	return value;","}"].join(`
3158`)),sRGBToLinear:new Sj(["vec4 sRGBToLinear( in vec4 value ) {","	return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );","}"].join(`
3159`)),LinearTosRGB:new Sj(["vec4 LinearTosRGB( in vec4 value ) {","	return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );","}"].join(`
3160`))},SQ.LINEAR_TO_LINEAR="LinearToLinear",SQ.SRGB_TO_LINEAR="sRGBToLinear",SQ.LINEAR_TO_SRGB="LinearTosRGB";var SK=class extends Sj{constructor(e="",t,i,r,s){super(e,s,r,i,t),this.nodeType="Expression"}},SZ=class extends SB{constructor(e=new ih,t,i,r){super("v4",{shared:!0}),this.nodeType="Texture",this.value=e,this.uv=t??new SY,this.bias=i,this.project=void 0!==r&&r}getTexture(e,t){return super.generate(e,t,this.value.uuid,"t")}generate(e,t){let i,r;if("sampler2D"===t)return this.getTexture(e,t);let s=this.getTexture(e,t),a=this.uv.build(e,this.project?"v4":"v2"),o=this.bias?this.bias.build(e,"f"):void 0;void 0===o&&e.context.bias&&(o=e.context.bias.setTexture(this).build(e,"f")),i=this.project?"texture2DProj":o?"tex2DBias":"tex2D",r=o?i+"( "+s+", "+a+", "+o+" )":i+"( "+s+", "+a+" )";let l={include:e.isShader("vertex"),ignoreCache:!0},h=this.getType(e);return e.addContext(l),this.colorSpace=this.colorSpace??new SQ(new SK("",h)),this.colorSpace.fromDecoding(e.getTextureEncodingFromMap(this.value)),this.colorSpace.input.parse(r),r=this.colorSpace.build(e,h),e.removeContext(),e.format(r,h,t)}},SJ=class extends SB{constructor(e){super("f"),this.nodeType="Float",this.value=e??0}generateReadonly(e,t,i,r,s,a){return e.format(this.value+(this.value%1?"":".0"),r,t)}},S$=class extends SL{constructor(e,t){super(),this.inputs=[],this.nodeType="FunctionCall",this.value=e,this.inputs=t??[]}getFunction(){return this.value}getType(e){return this.value.getType(e)}generate(e,t,i,r,s){r=this.getType(e);let a=this.value,o=a.build(e,t)+"( ",l=[];if(a.inputs){for(let t=0;t<a.inputs.length;t++){let i=a.inputs[t],r=this.inputs[t]||this.inputs[i.name];l.push(r.build(e,e.getTypeByFormat(i.type)))}o+=l.join(", ")+" )"}return e.format(o,r,t)}},S0=class extends SL{constructor(e,t,i=S0.ADD){super(),this.nodeType="Operator",this.type=e.type,this.a=e,this.b=t,this.op=i}getType(e){let t=this.a.getType(e),i=this.b.getType(e);return e.isTypeMatrix(t)?"v4":e.getTypeLength(i)>e.getTypeLength(t)?i:t}generate(e,t){let i=this.getType(e);this.type=i;let r=this.a.build(e,i),s=this.b.build(e,i);return e.format("( "+r+" "+this.op+" "+s+" )",i,t)}};S0.ADD="+",S0.SUB="-",S0.MUL="*",S0.DIV="/";var S1=class extends SL{constructor(e,t=S1.ABS,i,r){super(),this.nodeType="Math",this.a=e,"string"!=typeof t?this.b=t:r=t,"string"!=typeof i?this.c=i:r=i,this.method=r,this.hashProperties=["method"]}getNumInputs(e){switch(this.method){case S1.MIX:case S1.CLAMP:case S1.REFRACT:case S1.SMOOTHSTEP:case S1.FACEFORWARD:return 3;case S1.MIN:case S1.MAX:case S1.MOD:case S1.STEP:case S1.REFLECT:case S1.DISTANCE:case S1.DOT:case S1.CROSS:case S1.POW:return 2;default:return 1}}getInputType(e){let t=e.getTypeLength(this.a.getType(e)),i=this.b?e.getTypeLength(this.b.getType(e)):0,r=this.c?e.getTypeLength(this.c.getType(e)):0;return t>i&&t>r?this.a.getType(e):i>r?this.b.getType(e):this.c.getType(e)}getType(e){switch(this.method){case S1.LENGTH:case S1.DISTANCE:case S1.DOT:return"f";case S1.CROSS:return"v3"}return this.getInputType(e)}generate(e,t){let i,r,s,a=this.a?e.getTypeLength(this.a.getType(e)):0,o=this.b?e.getTypeLength(this.b.getType(e)):0,l=this.c?e.getTypeLength(this.c.getType(e)):0,h=this.getInputType(e),c=this.getType(e);switch(this.type=c,this.method){case S1.NEGATE:return e.format("( -"+this.a.build(e,h)+" )",h,t);case S1.INVERT:return e.format("( 1.0 - "+this.a.build(e,h)+" )",h,t);case S1.CROSS:i=this.a.build(e,"v3"),r=this.b.build(e,"v3");break;case S1.STEP:i=this.a.build(e,1===a?"f":h),r=this.b.build(e,h);break;case S1.MIN:case S1.MAX:case S1.MOD:i=this.a.build(e,h),r=this.b.build(e,1===o?"f":h);break;case S1.REFRACT:i=this.a.build(e,h),r=this.b.build(e,h),s=this.c.build(e,"f");break;case S1.MIX:i=this.a.build(e,h),r=this.b.build(e,h),s=this.c.build(e,1===l?"f":h);break;default:i=this.a.build(e,h),this.b&&(r=this.b.build(e,h)),this.c&&(s=this.c.build(e,h))}let d=[];d.push(i),r&&d.push(r),s&&d.push(s);let u=this.getNumInputs(e);if(d.length!==u)throw Error(`Arguments not match used in "${this.method}". Require ${u}, currently ${d.length}.`);return e.format(this.method+"( "+d.join(", ")+" )",c,t)}};S1.RAD="radians",S1.DEG="degrees",S1.EXP="exp",S1.EXP2="exp2",S1.LOG="log",S1.LOG2="log2",S1.SQRT="sqrt",S1.INV_SQRT="inversesqrt",S1.FLOOR="floor",S1.CEIL="ceil",S1.NORMALIZE="normalize",S1.FRACT="fract",S1.SATURATE="saturate",S1.SIN="sin",S1.COS="cos",S1.TAN="tan",S1.ASIN="asin",S1.ACOS="acos",S1.ARCTAN="atan",S1.ABS="abs",S1.SIGN="sign",S1.LENGTH="length",S1.NEGATE="negate",S1.INVERT="invert",S1.MIN="min",S1.MAX="max",S1.MOD="mod",S1.STEP="step",S1.REFLECT="reflect",S1.DISTANCE="distance",S1.DOT="dot",S1.CROSS="cross",S1.POW="pow",S1.MIX="mix",S1.CLAMP="clamp",S1.REFRACT="refract",S1.SMOOTHSTEP="smoothstep",S1.FACEFORWARD="faceforward";var S2=class extends SL{constructor(e,t,i){super("v4"),this.nodeType="TextureCubeUV",this.value=e,this.uv=t,this.bias=i}bilinearCubeUV(e,t,i,r){let s=new S$(S2.Nodes.bilinearCubeUV,[t,i,r]);this.colorSpaceTL=this.colorSpaceTL??new SQ(new SK("","v4")),this.colorSpaceTL.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceTL.input.parse(s.build(e)+".tl"),this.colorSpaceTR=this.colorSpaceTR??new SQ(new SK("","v4")),this.colorSpaceTR.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceTR.input.parse(s.build(e)+".tr"),this.colorSpaceBL=this.colorSpaceBL??new SQ(new SK("","v4")),this.colorSpaceBL.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceBL.input.parse(s.build(e)+".bl"),this.colorSpaceBR=this.colorSpaceBR??new SQ(new SK("","v4")),this.colorSpaceBR.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceBR.input.parse(s.build(e)+".br");let a={include:e.isShader("vertex"),ignoreCache:!0};e.addContext(a),this.colorSpaceTLExp=new SK(this.colorSpaceTL.build(e,"v4"),"v4"),this.colorSpaceTRExp=new SK(this.colorSpaceTR.build(e,"v4"),"v4"),this.colorSpaceBLExp=new SK(this.colorSpaceBL.build(e,"v4"),"v4"),this.colorSpaceBRExp=new SK(this.colorSpaceBR.build(e,"v4"),"v4"),e.removeContext();let o=new SK("mix( mix( cubeUV_TL, cubeUV_TR, cubeUV.f.x ), mix( cubeUV_BL, cubeUV_BR, cubeUV.f.x ), cubeUV.f.y )","v4");return o.keywords.cubeUV_TL=this.colorSpaceTLExp,o.keywords.cubeUV_TR=this.colorSpaceTRExp,o.keywords.cubeUV_BL=this.colorSpaceBLExp,o.keywords.cubeUV_BR=this.colorSpaceBRExp,o.keywords.cubeUV=s,o}generate(e,t){if(!e.isShader("fragment"))return console.warn("TextureCubeUVNode is not compatible with "+e.shader+" shader."),e.format("vec4( 0.0 )",this.getType(e),t);{let i=this.uv,r=this.bias||e.context.roughness,s=new S1(new S$(S2.Nodes.roughnessToMip,[r]),S2.Nodes.m0,S2.Nodes.cubeUV_maxMipLevel,S1.CLAMP),a=new S1(s,S1.FLOOR),o=new S1(s,S1.FRACT),l=new S1(this.bilinearCubeUV(e,this.value,i,a),this.bilinearCubeUV(e,this.value,i,new S0(a,new SJ(1).setReadonly(!0),S0.ADD)),o,S1.MIX);return e.format(l.build(e),"v4",t)}}};S2.Nodes=(ep=new SX(`struct TextureCubeUVData {
3161			vec4 tl;
3162			vec4 tr;
3163			vec4 br;
3164			vec4 bl;
3165			vec2 f;
3166		}`),ef=new SH("float cubeUV_maxMipLevel 8.0",!0),em=new SH("float cubeUV_minMipLevel 4.0",!0),eg=new SH("float cubeUV_maxTileSize 256.0",!0),ev=new SH("float cubeUV_minTileSize 16.0",!0),(ey=new Sj(`float getFace(vec3 direction) {
3167				vec3 absDirection = abs(direction);
3168				float face = -1.0;
3169				if (absDirection.x > absDirection.z) {
3170					if (absDirection.x > absDirection.y)
3171						face = direction.x > 0.0 ? 0.0 : 3.0;
3172					else
3173						face = direction.y > 0.0 ? 1.0 : 4.0;
3174				} else {
3175					if (absDirection.z > absDirection.y)
3176						face = direction.z > 0.0 ? 2.0 : 5.0;
3177					else
3178						face = direction.y > 0.0 ? 1.0 : 4.0;
3179				}
3180				return face;
3181		}`)).useKeywords=!1,(ex=new Sj(`vec2 getUV(vec3 direction, float face) {
3182				vec2 uv;
3183				if (face == 0.0) {
3184					uv = vec2(direction.z, direction.y) / abs(direction.x); // pos x
3185				} else if (face == 1.0) {
3186					uv = vec2(-direction.x, -direction.z) / abs(direction.y); // pos y
3187				} else if (face == 2.0) {
3188					uv = vec2(-direction.x, direction.y) / abs(direction.z); // pos z
3189				} else if (face == 3.0) {
3190					uv = vec2(-direction.z, direction.y) / abs(direction.x); // neg x
3191				} else if (face == 4.0) {
3192					uv = vec2(-direction.x, direction.z) / abs(direction.y); // neg y
3193				} else {
3194					uv = vec2(direction.x, direction.y) / abs(direction.z); // neg z
3195				}
3196				return 0.5 * (uv + 1.0);
3197		}`)).useKeywords=!1,(eb=new Sj(`TextureCubeUVData bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) {
3198			float face = getFace(direction);
3199			float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0);
3200			mipInt = max(mipInt, cubeUV_minMipLevel);
3201			float faceSize = exp2(mipInt);
3202			float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize);
3203			vec2 uv = getUV(direction, face) * (faceSize - 1.0);
3204			vec2 f = fract(uv);
3205			uv += 0.5 - f;
3206			if (face > 2.0) {
3207				uv.y += faceSize;
3208				face -= 3.0;
3209			}
3210			uv.x += face * faceSize;
3211			if(mipInt < cubeUV_maxMipLevel){
3212				uv.y += 2.0 * cubeUV_maxTileSize;
3213			}
3214			uv.y += filterInt * 2.0 * cubeUV_minTileSize;
3215			uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize);
3216			uv *= texelSize;
3217			vec4 tl = texture2D(envMap, uv);
3218			uv.x += texelSize;
3219			vec4 tr = texture2D(envMap, uv);
3220			uv.y += texelSize;
3221			vec4 br = texture2D(envMap, uv);
3222			uv.x -= texelSize;
3223			vec4 bl = texture2D(envMap, uv);
3224			return TextureCubeUVData( tl, tr, br, bl, f );
3225		}`,[ep,ey,ex,ef,em,eg,ev])).useKeywords=!1,{bilinearCubeUV:eb,roughnessToMip:new Sj(`float roughnessToMip(float roughness) {
3226			float mip = 0.0;
3227			if (roughness >= r1) {
3228				mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0;
3229			} else if (roughness >= r4) {
3230				mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1;
3231			} else if (roughness >= r5) {
3232				mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4;
3233			} else if (roughness >= r6) {
3234				mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5;
3235			} else {
3236				mip = -2.0 * log2(1.16 * roughness);// 1.16 = 1.79^0.25
3237			}
3238			return mip;
3239		}`,[new SH("float r0 1.0",!0),new SH("float v0 0.339",!0),ew=new SH("float m0 -2.0",!0),new SH("float r1 0.8",!0),new SH("float v1 0.276",!0),new SH("float m1 -1.0",!0),new SH("float r4 0.4",!0),new SH("float v4 0.046",!0),new SH("float m4 2.0",!0),new SH("float r5 0.305",!0),new SH("float v5 0.016",!0),new SH("float m5 3.0",!0),new SH("float r6 0.21",!0),new SH("float v6 0.0038",!0),new SH("float m6 4.0",!0)]),m0:ew,cubeUV_maxMipLevel:ef});var S3=class extends SL{constructor(e){super("v3"),this.nodeType="Normal",this.scope=e??S3.VIEW}getShared(){return this.scope===S3.WORLD}build(e,t,i,r){let s=e.context[this.scope+"Normal"];return s?s.build(e,t,i,r):super.build(e,t,i)}generate(e,t,i,r,s){let a;switch(this.scope){case S3.VIEW:a=e.isShader("vertex")?"transformedNormal":"geometryNormal";break;case S3.LOCAL:e.isShader("vertex")?a="objectNormal":(e.requires.normal=!0,a="vObjectNormal");break;case S3.WORLD:e.isShader("vertex")?a="inverseTransformDirection( transformedNormal, viewMatrix ).xyz":(e.requires.worldNormal=!0,a="vWNormal")}return e.format(a,this.getType(e),t)}};S3.LOCAL="local",S3.WORLD="world",S3.VIEW="view",S3.NORMAL="normal",SR.addKeyword("viewNormal",function(){return new S3(S3.VIEW)}),SR.addKeyword("localNormal",function(){return new S3(S3.NORMAL)}),SR.addKeyword("worldNormal",function(){return new S3(S3.WORLD)});var S4=class extends SL{constructor(e){super("v3"),this.nodeType="Position",this.scope=e??S4.LOCAL}getType(){return this.scope===S4.PROJECTION?"v4":this.type}getShader(){switch(this.scope){case S4.LOCAL:case S4.WORLD:return!1}return!0}generate(e,t,i,r,s){let a;switch(this.scope){case S4.LOCAL:e.isShader("vertex")?a="transformed":(e.requires.position=!0,a="vPosition");break;case S4.WORLD:if(e.isShader("vertex"))return"( modelMatrix * vec4( transformed, 1.0 ) ).xyz";e.requires.worldPosition=!0,a="vWPosition";break;case S4.VIEW:a=e.isShader("vertex")?"-mvPosition.xyz":"vViewPosition";break;case S4.PROJECTION:a=e.isShader("vertex")?"( projectionMatrix * modelViewMatrix * vec4( position, 1.0 ) )":"vec4( 0.0 )"}return e.format(a,this.getType(),t)}};S4.LOCAL="local",S4.WORLD="world",S4.VIEW="view",S4.PROJECTION="projection",SR.addKeyword("position",function(){return new S4}),SR.addKeyword("worldPosition",function(){return new S4(S4.WORLD)}),SR.addKeyword("viewPosition",function(){return new S4(S4.VIEW)});var S5=class extends SL{constructor(e){super("v3"),this.nodeType="Reflect",this.scope=e??S5.CUBE}getUnique(e){return!e.context.viewNormal}getType(){return this.scope===S5.SPHERE?"v2":this.type}generate(e,t){let i=this.getUnique(e);if(!e.isShader("fragment"))return console.warn("ReflectNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.type,t);{let r;switch(this.scope){case S5.VECTOR:{let t=new S3(S3.VIEW),s=e.context.roughness,a=t.build(e,"v3"),o=new S4(S4.VIEW).build(e,"v3"),l=s?s.build(e,"f"):void 0,h=`reflect( -normalize( ${o} ), ${a} )`;l&&(h=`normalize( mix( ${h}, ${a}, ${l} * ${l} ) )`);let c=`inverseTransformDirection( ${h}, viewMatrix )`;i?(e.addNodeCode(`vec3 reflectVec = ${c};`),r="reflectVec"):r=c;break}case S5.CUBE:{let t=new S5(S5.VECTOR).build(e,"v3"),s="vec3( -"+t+".x, "+t+".yz )";i?(e.addNodeCode(`vec3 reflectCubeVec = ${s};`),r="reflectCubeVec"):r=s;break}case S5.SPHERE:{let t="normalize( ( viewMatrix * vec4( "+new S5(S5.VECTOR).build(e,"v3")+", 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) ).xy * 0.5 + 0.5";i?(e.addNodeCode(`vec2 reflectSphereVec = ${t};`),r="reflectSphereVec"):r=t}}return e.format(r,this.getType(),t)}}};S5.CUBE="cube",S5.SPHERE="sphere",S5.VECTOR="vector";var S6=class extends SL{constructor(e=new SZ,t,i){super("v4"),this.nodeType="TextureCube",this.value=e,this.radianceNode=new S2(this.value,t??new S5(S5.VECTOR),i),this.irradianceNode=new S2(this.value,new S3(S3.WORLD),new SJ(1).setReadonly(!0))}generate(e,t){return e.isShader("fragment")?(e.require("irradiance"),e.context.bias&&e.context.bias.setTexture(this.value),("irradiance"===e.slot?this.irradianceNode:this.radianceNode).build(e,t)):(console.warn("TextureCubeNode is not compatible with "+e.shader+" shader."),e.format("vec4( 0.0 )",this.getType(e),t))}},S8=class extends SB{constructor(e=new r7,t,i){super("v4",{shared:!0}),this.nodeType="CubeTexture",this.value=e,this.uv=t??new S5,this.bias=i}getTexture(e,t){return super.generate(e,t,this.value.uuid,"tc")}generate(e,t){let i;if("samplerCube"===t)return this.getTexture(e,t);let r=this.getTexture(e,t),s=this.uv?.build(e,"v3"),a=this.bias?this.bias.build(e,"f"):void 0;void 0===a&&e.context.bias&&(a=e.context.bias.setTexture(this).build(e,"f")),i=a?"texCubeBias( "+r+", "+s+", "+a+" )":"texCube
3239( "+r+", "+s+" )";let o={include:e.isShader("vertex"),ignoreCache:!0},l=this.getType(e);return e.addContext(o),this.colorSpace=this.colorSpace??new SQ(new SK("",l)),this.colorSpace.fromDecoding(e.getTextureEncodingFromMap(this.value)),this.colorSpace.input.parse(i),i=this.colorSpace.build(e,l),e.removeContext(),e.format(i,l,t)}},S9=`
3240uniform int frameIndex;
3241uniform vec2 resolution;
3242uniform mat4 previousModelViewMatrix;
3243uniform mat4 previousProjectionMatrix;
3244
3245varying vec4 vCurrentPosition;
3246varying vec4 vPreviousPosition;
3247`,S7=`
3248layout(location = 1) out vec4 gVelocity;
3249
3250uniform int frameIndex;
3251uniform vec2 resolution;
3252
3253varying vec4 vCurrentPosition;
3254varying vec4 vPreviousPosition;
3255
3256const vec2 haltonSequence[16] = vec2[16](
3257vec2( 0.000000,-0.333334),
3258vec2(-0.500000, 0.333334),
3259vec2( 0.500000,-0.777778),
3260vec2(-0.750000,-0.111112),
3261vec2( 0.250000, 0.555556),
3262vec2(-0.250000,-0.555556),
3263vec2( 0.750000, 0.111112),
3264vec2(-0.875000, 0.777778),
3265vec2(0.125000, -0.925926),
3266vec2(-0.375000, -0.259260),
3267vec2(0.625000, 0.407408),
3268vec2(-0.625000, -0.703704),
3269vec2(0.375000, -0.037038),
3270vec2(-0.125000, 0.629630),
3271vec2(0.875000, -0.481482),
3272vec2(-0.937500, 0.185186));
3273
3274vec2 vogelDiskSample(int sampleIndex, int sampleCount, float angle) {
3275  const float goldenAngle = 2.399963f; // radians
3276  float r = sqrt(float(sampleIndex) + 0.5f) / sqrt(float(sampleCount));
3277  float theta = float(sampleIndex) * goldenAngle + angle;
3278  float sine = sin(theta);
3279  float cosine = cos(theta);
3280  return vec2(cosine, sine) * r;
3281}
3282
3283// Derived from the interleaved gradient function from Jimenez 2014 http:goo.gl/eomGso
3284float getNoiseInterleavedGradient(vec2 screenPos) {
3285    vec3 magic = vec3(0.06711056f, 0.00583715f, 52.9829189f);
3286    return fract(magic.z * fract(dot(screenPos, magic.xy)));
3287}
3288
3289`,_e=`
3290// TODO: This could be generated CPU side and passed to the shader every frame
3291const vec2 haltonSequence[16] = vec2[16](
3292vec2( 0.000000,-0.333334),
3293vec2(-0.500000, 0.333334),
3294vec2( 0.500000,-0.777778),
3295vec2(-0.750000,-0.111112),
3296vec2( 0.250000, 0.555556),
3297vec2(-0.250000,-0.555556),
3298vec2( 0.750000, 0.111112),
3299vec2(-0.875000, 0.777778),
3300vec2(0.125000, -0.925926),
3301vec2(-0.375000, -0.259260),
3302vec2(0.625000, 0.407408),
3303vec2(-0.625000, -0.703704),
3304vec2(0.375000, -0.037038),
3305vec2(-0.125000, 0.629630),
3306vec2(0.875000, -0.481482),
3307vec2(-0.937500, 0.185186));
3308
3309// TODO: Pass correct view size
3310vec2 offset = haltonSequence[frameIndex];
3311offset.x /= resolution.x;
3312offset.y /= resolution.y;
3313
3314vec4 currentPosition = gl_Position;
3315vec4 currentPositionJittered = currentPosition + (vec4(offset.x, offset.y, 0.0, 0.0) * currentPosition.w);
3316
3317// We want to calculate the velocity with unjittered positions
3318// so that things that are not moving get a velocity = 0
3319vCurrentPosition = currentPosition;
3320vPreviousPosition = previousProjectionMatrix * previousModelViewMatrix * vec4(transformed, 1.0);
3321#ifdef OUTLINE_COMPENSATION
3322vPreviousPosition.xy += OUTLINE_COMPENSATION;
3323#endif
3324gl_Position = currentPositionJittered;
3325
3326`,_t=`
3327vec2 oldPos = vPreviousPosition.xy;
3328    oldPos /= vPreviousPosition.w;
3329    oldPos.xy = (oldPos.xy+1.)/2.0;
3330
3331vec2 newPos = vCurrentPosition.xy;
3332    newPos /= vCurrentPosition.w;
3333    newPos.xy = (newPos.xy+1.)/2.0;
3334
3335vec2 velocity = (newPos - oldPos);
3336
3337// Discard fully transparent pixels 
3338if (gl_FragColor.a <= 0.0) discard;
3339
3340gVelocity = vec4(velocity, 0.0, 1.0);
3341`,_i=`
3342layout(location = 1) out vec4 gVelocity;
3343`,_r=`
3344    // Discard fully transparent pixels 
3345    if (gl_FragColor.a <= 0.0) discard;
3346
3347    gVelocity = vec4(0.0, 0.0, 0.0, 1.0);
3348`,_s=["x","y","z","w"],_a=["float","vec2","vec3","vec4"],_n={float:"f",vec2:"v2",vec3:"v3",vec4:"v4",mat4:"v4",int:"i",bool:"b","float[]":"f[]","vec4[]":"v4[]"},_o={t:"sampler2D",tc:"samplerCube",b:"bool",i:"int",f:"float",c:"vec3",v2:"vec2",v3:"vec3",v4:"vec4",m3:"mat3",m4:"mat4","f[]":"float[]","v4[]":"vec4[]"},_l=class{constructor(){this.includes={consts:{},functions:{},structs:{}},this.cache="",this.slot="",this.shader="",this.context={},this.needsJitter=!0,this.getIncludesCode=function(){function e(e,t){return e.deps.length-t.deps.length}return function(t,i){let r=this.getIncludes(t,i);if(!r)return"";let s="";r=r.sort(e);for(let e=0;e<r.length;e++)r[e].src&&(s+=r[e].src+`
3349`);return s}}(),this.slots=[],this.caches=[],this.contexts=[],this.keywords={},this.nodeData={},this.fragmentVariables={},this.fragmentParsVariables={},this.vertexParsVariables={},this.requires={uv:[],color:[],transparent:!1,irradiance:!1,position:!1,worldPosition:!1,normal:!1,worldNormal:!1,vWorldViewDir:!1,modelMatrix:!1,viewMatrix:!1,projectionMatrix:!1},this.includes={consts:[],functions:[],structs:[]},this.attributes={}
vendor: 4,744 bytes, lines 3349-3392
3349,this.prefixCode=["#ifdef TEXTURE_LOD_EXT","	#define texCube(a, b) textureCube(a, b)","	#define texCubeBias(a, b, c) textureCubeLodEXT(a, b, c)","	#define tex2D(a, b) texture2D(a, b)","	#define tex2DBias(a, b, c) texture2DLodEXT(a, b, c)","#else","	#define texCube(a, b) textureCube(a, b)","	#define texCubeBias(a, b, c) textureCube(a, b, c)","	#define tex2D(a, b) texture2D(a, b)","	#define tex2DBias(a, b, c) texture2D(a, b, c)","#endif",`
3350			// NOTE: Include Spline's blending modes. This could be part of BlendNode
3351			#define SPE_BLENDING_NORMAL 0
3352			#define SPE_BLENDING_MULTIPLY 1
3353			#define SPE_BLENDING_SCREEN 2
3354			#define SPE_BLENDING_OVERLAY 3
3355
3356			vec3 spe_normalBlend( vec3 a, vec3 b, float alpha ) {
3357				return mix( a, b, alpha );
3358			}
3359
3360			vec3 spe_multiplyBlend( vec3 a, vec3 b, float alpha ) {
3361				return mix( a, a * b, alpha );
3362			}
3363
3364			vec3 spe_screenBlend( vec3 a, vec3 b, float alpha ) {
3365				vec3 tmp = 1.0 - ( 1.0 - a ) * ( 1.0 - b );
3366				return mix( a, tmp, alpha );
3367			}
3368
3369			vec3 spe_overlayBlend( vec3 a, vec3 b, float alpha ) {
3370				vec3 tmp = mix( 1. - 2. * (1. - a) * (1. - b), 2. * a * b, step( a, vec3(.5) ) );
3371				return clamp( mix( a, tmp, alpha ), 0.0, 1.0 );
3372			}
3373
3374			vec3 spe_blend( vec3 a, vec3 b, float alpha, int mode ) {
3375				if ( mode == SPE_BLENDING_NORMAL ) return spe_normalBlend( a, b, alpha );
3376				else if ( mode == SPE_BLENDING_MULTIPLY ) return spe_multiplyBlend( a, b, alpha );
3377				else if ( mode == SPE_BLENDING_SCREEN ) return spe_screenBlend( a, b, alpha );
3378				else if ( mode == SPE_BLENDING_OVERLAY ) return spe_overlayBlend( a, b, alpha );
3379				return vec3( 1.0 );
3380			}
3381			`,"#include <packing>","#include <common>"].join(`
3382`),this.parsCode={vertex:["float neighbor_offset = 0.0001;",""].join(`
3383`),fragment:["float accumAlpha = 0.0;",`void accumulateAlpha(float alpha) {
3384					accumAlpha += (1.0 - accumAlpha) * alpha;
3385				}`,""].join(`
3386`)},this.code={vertex:"",fragment:""},this.nodeCode={vertex:"",fragment:""},this.resultCode={vertex:"",fragment:""},this.finalCode={vertex:"",fragment:""},this.inputs={uniforms:{list:[],vertex:[],fragment:[]},arrayUniforms:{list:[],vertex:[],fragment:[]},vars:{varying:[],vertex:[],fragment:[]}},this.defines={},this.uniforms={},this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.updaters=[],this.nodes=[],this.analyzing=!1}build(e,t){this.addVertexParsCode(S9),this.addFragmentParsCode(S7),this.buildShader("vertex",e),this.buildShader("fragment",t);for(let e=0;e<this.requires.uv.length;e++)if(this.requires.uv[e]){let t=e>0?e+1:"";this.addVaryCode("varying vec2 vUv"+t+";"),e>0&&this.addVertexParsCode("attribute vec2 uv"+t+";"),this.addVertexFinalCode("vUv"+t+" = uv"+t+";")}return this.requires.color[0]&&(this.addVaryCode("varying vec4 vColor;"),this.addVertexParsCode("attribute vec4 color;"),this.addVertexFinalCode("vColor = color;")),this.requires.color[1]&&(this.addVaryCode("varying vec4 vColor2;"),this.addVertexParsCode("attribute vec4 color2;"),this.addVertexFinalCode("vColor2 = color2;")),this.requires.position&&(this.addVaryCode("varying vec3 vPosition;"),this.addVertexFinalCode("vPosition = transformed;")),this.requires.worldPosition,this.requires.normal&&(this.addVaryCode("varying vec3 vObjectNormal;"),this.addVertexFinalCode(`
3387				#ifndef SHAPEBLEND 
3388					vObjectNormal = normal;
3389				#else
3390					vObjectNormal = objectNormal;
3391				#endif
3392			`)),this.requires.modelMatrix&&this.addFragmentParsCode("uniform mat4 modelMatrix;"),this.requires.viewMatrix&&this.addFragmentParsCode("uniform mat4 viewMatrix;"),this.requires.projectionMatrix&&this.addFragmentParsCode("uniform mat4 projectionMatrix;"),this.requires.worldNormal&&(this.addVaryCode("varying vec3 vWNormal;"),this.addVertexFinalCode("vWNormal = inverseTransformDirection( transformedNormal, viewMatrix ).xyz;")),this.requires.vWorldViewDir&&(this.addVaryCode("varying vec3 vWorldViewDir;"),this.addVertexFinalCode("vWorldViewDir = isPerspectiveMatrix( projectionMatrix ) ?  ( (modelMatrix * vec4(position, 1.0)).xyz - cameraPosition ) : vec3( -viewMatrix[0][2], -viewMatrix[1][2], -viewMatrix[2][2] );")),this.needsJitter&&(this.addVertexFinalCode(_e),this.addFragmentFinalCode(_t)),this}buildShader(e,t){this.resultCode[e]=t.build(this.setShader(e),"v4")}setMaterial(e,t){return this.defines={},this}addFlow(e,t,i){return this.addSlot(e).addCache(t).addContext(i)}removeFlow(){return this.removeSlot().removeCache().removeContext()}addCache(e){return this.cache=e??"",this.caches.push(this.cache),this}removeCache(){return this.caches.pop(),this.cache=this.caches[this.caches.length-1]||"",this}addContext(e){return this.context=Object.assign({},this.context,e),this.context.extra=this.context.extra||{},this.contexts.push(this.context),this}
vendor: 9,920 bytes, lines 3392-3399
3392removeContext(){return this.contexts.pop(),this.context=this.contexts[this.contexts.length-1]||{},this}addSlot(e){return this.slot=e||"",this.slots.push(this.slot),this}removeSlot(){return this.slots.pop(),this.slot=this.slots[this.slots.length-1]||"",this}addFragmentVariable(e,t){void 0===this.fragmentVariables[e]&&(this.addFragmentCode(`${t} ${e};`),this.fragmentVariables[e]="")}addFragmentParsVariable(e,t){void 0===this.fragmentParsVariables[e]&&(this.addFragmentParsCode(`${t} ${e};`),this.fragmentParsVariables[e]="")}addVertexParsVariable(e,t){void 0===this.vertexParsVariables[e]&&(this.addVertexParsCode(`${t} ${e};`),this.vertexParsVariables[e]="")}addVertexCode(e){this.addCode(e,"vertex")}addFragmentCode(e){this.addCode(e,"fragment")}addCode(e,t){this.code[t??this.shader]+=e+`
3393`}addVertexNodeCode(e){this.addNodeCode(e,"vertex")}addFragmentNodeCode(e){this.addNodeCode(e,"fragment")}addNodeCode(e,t){this.nodeCode[t??this.shader]+=e+`
3394`}clearNodeCode(e){e=e??this.shader;let t=this.nodeCode[e];return this.nodeCode[e]="",t}clearVertexNodeCode(){return this.clearNodeCode("vertex")}clearFragmentNodeCode(){return this.clearNodeCode("fragment")}addVertexFinalCode(e){this.addFinalCode(e,"vertex")}addFragmentFinalCode(e){this.addFinalCode(e,"fragment")}addFinalCode(e,t){this.finalCode[t??this.shader]+=e+`
3395`}addVertexParsCode(e){this.addParsCode(e,"vertex")}addFragmentParsCode(e){this.addParsCode(e,"fragment")}addParsCode(e,t){this.parsCode[t??this.shader]+=e+`
3396`}addVaryCode(e){this.addVertexParsCode(e),this.addFragmentParsCode(e)}isCache(e){return -1!==this.caches.indexOf(e)}isSlot(e){return -1!==this.slots.indexOf(e)}define(e,t){this.defines[e]=void 0===t?1:t}require(e){this.requires[e]=!0}isDefined(e){return void 0!==this.defines[e]}getVar(e,t,i,r="varying",s="V",a=""){let o=this.getVars(r),l=o[e];if(!l){let r=o.length;l={name:i||"node"+s+r+(a?"_"+a:""),type:t},o.push(l),o[e]=l}return l}getTempVar(e,t,i,r){return this.getVar(e,t,i,this.shader,"T",r)}getAttribute(e,t){if(!this.attributes[e]){let i=this.getVar(e,t);this.addVertexParsCode("attribute "+t+" "+e+";"),this.addVertexFinalCode(i.name+" = "+e+";"),this.attributes[e]={varying:i,name:e,type:t}}return this.attributes[e]}getCode(e){return[this.prefixCode,this.parsCode[e],this.getVarListCode(this.getVars("varying"),"varying"),this.getVarListCode(this.inputs.uniforms[e],"uniform"),this.getVarListCode(this.inputs.arrayUniforms[e],"uniform"),this.getIncludesCode("consts",e),this.getIncludesCode("structs",e),this.getIncludesCode("functions",e),"void main() {",this.getVarListCode(this.getVars(e)),this.code[e],this.resultCode[e],this.finalCode[e],"}"].join(`
3397`)}getVarListCode(e,t){t=t??"";let i="";for(let r=0,s=e.length;r<s;++r){let s=e[r],a=s.type,o=s.name,l=s.size,h=this.getFormatByType(a);if(void 0===h)throw Error("Node pars "+h+" not found.");h.includes("[]")?i+=t+" "+h.substring(0,h.length-2)+" "+o+`[${l}];
3398`:i+=t+" "+h+" "+o+`;
3399`}return i}getVars(e){return this.inputs.vars[e??this.shader]}getNodeData(e){let t=e instanceof SI?e.uuid:e;return this.nodeData[t]=this.nodeData[t]||{}}createUniform(e,t,i,r,s,a){if(t.includes("[]")){let o=this.inputs.arrayUniforms,l=o.list.length,h=new SO({type:t,size:i.size,name:r||"nodeUA"+l+(a?"_"+a:""),node:i,needsUpdate:s});return o.list.push(h),o[e].push(h),o[e][h.name]=h,this.uniforms[h.name]=h,h}{let o=this.inputs.uniforms,l=o.list.length,h=new SO({type:t,name:r||"nodeU"+l+(a?"_"+a:""),node:i,needsUpdate:s});return o.list.push(h),o[e].push(h),o[e][h.name]=h,this.uniforms[h.name]=h,h}}createVertexUniform(e,t,i,r,s){return this.createUniform("vertex",e,t,i,r,s)}createFragmentUniform(e,t,i,r,s){return this.createUniform("fragment",e,t,i,r,s)}include(e,t,i){let r;if(e="string"==typeof e?SR.get(e):e,!1===this.context.include)return e.name;e instanceof Sj?r=this.includes.functions:e instanceof SH?r=this.includes.consts:e instanceof SX&&(r=this.includes.structs);let s=r[this.shader]=r[this.shader]||[];if(e){let r=s[e.name];if(r||(r=s[e.name]={node:e,deps:[]},s.push(r),r.src=e.build(this,"source")),e instanceof Sj&&t&&s[t.name]&&-1===s[t.name].deps.indexOf(e)&&(s[t.name].deps.push(e),e.includes?.length)){let i=0;do this.include(e.includes[i++],t);while(i<e.includes.length)}return i&&(r.src=i),e.name}throw Error("Include not found.")}colorToVectorProperties(e){return e.replace("r","x").replace("g","y").replace("b","z").replace("a","w")}colorToVector(e){return e.replace(/c/g,"v3")}getIncludes(e,t){return this.includes[e][t||this.shader]}getConstructorFromLength(e){return _a[e-1]}isTypeMatrix(e){return/^m/.test(e)}getTypeLength(e){return"f"===e?1:parseInt(this.colorToVector(e).substr(1))}getTypeFromLength(e){return 1===e?"f":"v"+e}findNode(...e){for(let t=0;t<arguments.length;t++){let i=e[t];if(i?.isNode)return i}}resolve(...e){for(let t=0;t<arguments.length;t++){let i=e[t];if(void 0!==i){if(i.isNode)return i;if(i.isTexture)switch(i.mapping){case 301:case 302:return new S8(i);case 306:return new S6(new SZ(i));default:return new SZ(i)}else{if(i.isVector2)return new Sz(i);if(i.isVector3)return new SF(i);if(i.isVector4)return new Sk(i)}}}}format(e,t,i){switch(this.colorToVector(i+" <- "+t)){case"f <- v2":case"f <- v3":case"f <- v4":return e+".x";case"f <- i":case"f <- b":return"float( "+e+" )";case"v2 <- f":return"vec2( "+e+" )";case"v2 <- v3":case"v2 <- v4":return e+".xy";case"v2 <- i":case"v2 <- b":case"v3 <- i":case"v3 <- b":return"vec2( float( "+e+" ) )";case"v3 <- f":return"vec3( "+e+" )";case"v3 <- v2":return"vec3( "+e+", 0.0 )";case"v3 <- v4":return e+".xyz";case"v4 <- f":return"vec4( "+e+" )";case"v4 <- v2":return"vec4( "+e+", 0.0, 1.0 )";case"v4 <- v3":return"vec4( "+e+", 1.0 )";case"v4 <- i":case"v4 <- b":return"vec4( float( "+e+" ) )";case"i <- f":case"i <- b":return"int( "+e+" )";case"i <- v2":case"i <- v3":case"i <- v4":return"int( "+e+".x )";case"b <- f":return"( "+e+" != 0.0 )";case"b <- v2":return"( "+e+" != vec2( 0.0 ) )";case"b <- v3":return"( "+e+" != vec3( 0.0 ) )";case"b <- v4":return"( "+e+" != vec4( 0.0 ) )";case"b <- i":return"( "+e+" != 0 )"}return e}getTypeByFormat(e){return _n[e]||e}getFormatByType(e){return _o[e]||e}getUUID(e,t){return(t=void 0===t||t)&&this.cache&&(e=this.cache+"-"+e),e}getElementByIndex(e){return _s[e]}getIndexByElement(e){return _s.indexOf(e)}isShader(e){return this.shader===e}setShader(e){return this.shader=e,this}mergeDefines(e){for(let t in e)this.defines[t]=e[t];return this.defines}mergeUniform(e){for(let t in e)this.uniforms[t]=e[t];return this.uniforms}getTextureEncodingFromMap(e){let t;return e?e.isTexture&&(t=e.encoding):t=3e3,3e3===t&&this.context.gamma&&(t=3001),t}},_h=class extends SB{constructor(e=0,t,i,r){super("c"),this.nodeType="Color",this.value=e instanceof SN?e:new SN(e||0,t,i,r)}setRGBA(e){this.value.setRGBA(e.r,e.g,e.b,e.a)}generate(e,t,i,r,s,a){i=e.getUUID(i??this.getUUID()),r=r??this.getType(e);let o=e.getNodeData(i),l=this.getReadonly()&&void 0!==this.generateReadonly;if(this.alpha){let t=this.alpha.build(e,"f");e.addFragmentNodeCode(`accumAlpha += ( 1.0 - accumAlpha ) * ${t};`)}return l?this.generateReadonly(e,t,i,r,s,a):e.isShader("vertex")?(o.vertex||(o.vertex=e.createVertexUniform(r,this,s,a,this.getLabel())),e.format(o.vertex.name,r,t)):(o.fragment||(o.fragment=e.createFragmentUniform(r,this,s,a,this.getLabel())),e.format(o.fragment.name,r,t))}generateReadonly(e,t,i,r,s,a){return e.format("vec3("+this.value.r+", "+this.value.g+", "+this.value.b+")",r,t)}},_c=class extends SB{constructor(e){super("i"),this.nodeType="Int",this.value=Math.floor(e??0)}generateReadonly(e,t,i,r,s,a){return e.format(this.value.toString(),r,t)}},_d=class extends SB{constructor(e){super("b"),this.nodeType="Bool",this.value=e??!1}generateReadonly(e,t,i,r){return e.format(this.value?"true":"false",r,t)}},_u=class extends SB{constructor(e=1,t){super("f[]"),this.nodeType="FloatArray",this.size=e,this.value=Array.isArray(t)?t:"number"==typeof t?Array(e).fill(t):Array(e).fill(0)}},_p=class extends SB{},_f=class extends _p{constructor(e){super("v3"),this.image=e,this._value=new iv}get value(){return this._value.x=this.image.isVideo?this.image.img.videoWidth??0:this.image.img.width,this._value.y=this.image.isVideo?this.image.img.videoHeight??0:this.image.img.height,this._value}},_m=class extends _p{constructor(e,t,i=1008,r=1006){super("t"),this.image=e,this.wrap=t,this.minFilter=i,this.magFilter=r}get value(){return this.image.getTexture(this.wrap,this.minFilter,this.magFilter)}},_g=class extends SB{constructor(e){super("m3"),this.nodeType="Matrix3",this.value=e??new tK}generateReadonly(e,t,i,r,s,a){return e.format("mat3("+this.value.elements.join(", ")+")",r,t)}get elements(){return this.value.elements}set elements(e){this.value.fromArray(e)}},_v=class extends SB{constructor(e){super("m4"),this.nodeType="Matrix4",this.value=e??new iX}generateReadonly(e,t,i,r,s,a){return e.format("mat4("+this.value.elements.join(", ")+")",r,t)}get elements(){return this.value.elements}set elements(e){this.value.fromArray(e)}};function _y(e,t,i,r=0){e.setUvTransform(i[0],i[1],t[0],t[1],0,0,0).premultiply(new tK().makeRotation(r*tY.DEG2RAD))}var _x=class extends _g{constructor(e,t,i=0){super(new tK),this.repeat=e,this.offset=t,this.rotation=i,_y(this.value,e,t,i)}updateMatrix(){_y(this.value,this.repeat,this.offset,this.rotation)}},_b=class extends SB{constructor(e=1,t){super("v4[]"),this.nodeType="Vector4Array",this.size=e,this.value=Array.isArray(t)?t:t instanceof ic?Array(e).fill(t):Array(e).fill(new ic(0))}},_w=class extends SL{constructor(e,t,i,r){super("v3"),this.nodeType="Blend",this.a=e,this.b=t,this.alpha=i,this.mode=r}generate(e,t){if(!e.isShader("fragment"))return console.warn("BlendNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{let i=[];return i.push(this.a.build(e,"c")),i.push(this.b.build(e,"c")),i.push(this.alpha.build(e,"f")),i.push(this.mode.build(e,"i")),e.format("spe_blend("
3399+i.join(",")+")",this.getType(e),t)}}},_S=class extends SL{constructor(e,t){super("v3"),this.nodeType="CustomColor",this.color=e,this.alpha=t,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(!e.isShader("fragment"))return console.warn("CustomColorNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{let i=e.include(_S.Nodes.customColor);e.addFragmentVariable(this.calpha,"float");let r=[];return r.push(this.color.build(e,"v3")),r.push(this.mask?`luminance(${this.mask.build(e,"v3")})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_S.Nodes={customColor:new Sj(`vec3 customColor(vec3 color, float mask, float alpha, out float calpha) {
3400				float lalpha = alpha * mask;
3401				calpha =  lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0);
3402				accumAlpha += (1.0 - accumAlpha) * lalpha;
3403
3404				return color;
3405			}`)};var __=class extends SL{constructor(e,t){super("v3"),this.nodeType="CustomNormal",this.cnormal=e,this.alpha=t,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(!e.isShader("fragment"))return console.warn("CustomNormalNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{let i=e.include(__.Nodes.customNormal);e.addFragmentVariable(this.calpha,"float");let r=[];return r.push(this.cnormal.build(e,"v3")),r.push("normal"),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};__.Nodes={customNormal:new Sj(`vec3 customNormal(vec3 cnormal, vec3 norm, float mask, float alpha, out float calpha) {
3406				vec3 normal = packNormalToRGB( norm ).rgb;
3407				normal *= step( vec3(0.5), cnormal );
3408
3409				float lalpha = alpha * mask;
3410				calpha =  lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 );
3411				accumAlpha += ( 1.0 - accumAlpha ) * lalpha;
3412
3413				return normal;
3414			}`)};var _A=class extends SL{constructor(e,t,i,r,s,a,o,l,h,c,d,u){super("v3"),this.nodeType="CustomTexture",this.texture=e,this.textureSize=t,this.crop=i,this.projection=r,this.axis=s,this.side=a,this.size=o,this.blending=l,this.mat=h,this.isMask=u,this.alpha=c,this.mode=d,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){e.require("position"),e.require("normal"),e.require("uv"),e.requires.uv=[!0],e.extensions.shaderTextureLOD=!0,e.extensions.derivatives=!0;let i=`g${this.uuid.toString().replace(/-/g,"")}`,r;switch(this.projection.value){case 3:r=e.include(_A.Nodes.cylindrical);break;case 2:r=e.include(_A.Nodes.spherical);break;case 1:let s=["vec3(1.0, 0.0, 0.0)","vec3(0.0, 1.0, 0.0)","vec3(0.0, 0.0, 1.0)"][this.axis.value],a=["zy","xz","xy"][this.axis.value],o=new Sj(`
3415		vec3 ${i}_planarTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUv) {
3416				vec2 projected = (1. + (position.${a})) / 2.;
3417				vec2 uvs = ( mat * vec3( (projected * 2. - 1.) / (size * .5), 1. ) / 2. + 0.5 ).xy;
3418				writeUv = uvs;
3419
3420				vec4 tmp = texture2D( tex, uvs );
3421
3422				vec3 col = tmp.rgb;
3423				float lalpha = alpha * tmp.a;
3424				${2===this.side.value?"":`lalpha *= step(0.0, ${1===this.side.value?"-1.0 * ":""}dot(vObjectNormal, ${s}));`}
3425
3426				if ( crop > 0.5 ) {
3427					if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 )  {
3428						lalpha = 0.0;
3429					}
3430				}
3431				
3432				lalpha *= mask;
3433
3434				calpha =  lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 );
3435				accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask));
3436
3437				return col;
3438			}`);r=e.include(o);break;case 4:r=e.include(_A.Nodes.triplanar);break;default:r=e.include(_A.Nodes.uv)}e.addFragmentVariable(this.calpha,"float");let l=[];if(l.push("normal"),l.push(this.texture.generate(e,"t")),l.push(this.textureSize.build(e,"v2")),l.push(this.crop.build(e,"f")),l.push(this.mat.build(e,"mat3")),l.push(this.size.build(e,"v2")),l.push(this.blending.build(e,"f")),l.push(this.isMask.build(e,"b")),l.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),l.push(this.alpha.build(e,"f")),l.push(this.mode.build(e,"i")),l.push(this.calpha),4===this.projection.value){let t=`${i}_writeUvs`,r=t+"0",s=t+"1",a=t+"2",o=`${i}_triplanarWeights`;e.addFragmentVariable(r,"vec2"),e.addFragmentVariable(s,"vec2"),e.addFragmentVariable(a,"vec2"),e.addFragmentVariable(o,"vec3"),l.push(r),l.push(s),l.push(a),l.push(o)}else{let t=`${i}_writeUvs`;e.addFragmentVariable(t,"vec2"),l.push(t)}return e.format(r+"("+l.join(",")+")",this.getType(e),t)}};_A.Nodes={cylindrical:new Sj(`
3439vec3 cylindricalTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUv) {
3440                vec3 posN = normalize(position);
3441                float u = 0.5 + atan(posN.z, posN.x) / (2.*3.1415);
3442                float scaledHeight = position.y / (size.y * 0.5);
3443                float v =  (scaledHeight / 2.) + .5;
3444
3445                vec2 calculatedUv = vec2(u,v);
3446				vec2 uvs = ( mat * vec3( calculatedUv * 2. - 1., 1. ) / 2. + 0.5 ).xy;
3447				writeUv = uvs;
3448
3449                vec2 df = fwidth(uvs);
3450               	if(df.x > 0.5) df.x = 0.;
3451
3452				#ifdef GL_EXT_shader_texture_lod
3453                vec4 tmp = texture2DLodEXT(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y)));
3454				#else
3455                vec4 tmp = textureLod(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y)));
3456				#endif
3457
3458				vec3 col = tmp.rgb;
3459				float lalpha = alpha * tmp.a;
3460				if ( crop > 0.5 ) {
3461					if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 )  {
3462						lalpha = 0.0;
3463					}
3464				}
3465
3466				lalpha *= mask;
3467				
3468				calpha =  lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 );
3469				accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask));
3470
3471				return col;
3472			}
3473`),spherical:new Sj(`
3474vec3 sphericalTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUv) {
3475                vec3 posN = normalize(vPosition);
3476                float u = 0.5 + atan(posN.z, posN.x) / (2.*3.1415);
3477                float v = 0.5 + asin(posN.y) / 3.1415;
3478
3479                vec2 calculatedUv = vec2(u,v);
3480				vec2 uvs = ( mat * vec3( calculatedUv * 2. - 1., 1. ) / 2. + 0.5 ).xy;
3481				writeUv = uvs;
3482
3483                vec2 df = fwidth(uvs);
3484               	if(df.x > 0.5) df.x = 0.;
3485				#ifdef GL_EXT_shader_texture_lod
3486                vec4 tmp = texture2DLodEXT(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y)));
3487				#else
3488                vec4 tmp = textureLod(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y)));
3489				#endif
3490
3491				vec3 col = tmp.rgb;
3492				float lalpha = alpha * tmp.a;
3493				if ( crop > 0.5 ) {
3494					if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 )  {
3495						lalpha = 0.0;
3496					}
3497				}
3498
3499				lalpha *= mask;
3500
3501				calpha =  lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 );
3502				accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask));
3503
3504				return col;
3505			}
3506`),uv:new Sj(`vec3 uvTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUv) {
3507				vec2 uvs = ( mat * vec3( vUv * 2. - 1., 1. ) / 2. + 0.5 ).xy;
3508				writeUv = uvs;
3509
3510				vec4 tmp = texture2D( tex, uvs );
3511
3512				vec3 col = tmp.rgb;
3513
3514				float lalpha = alpha * tmp.a;
3515				if ( crop > 0.5 ) {
3516					if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 )  {
3517						lalpha = 0.0;
3518					}
3519				}
3520				
3521				lalpha *= mask;
3522
3523				calpha =  lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 );
3524				accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask));
3525
3526				return col;
3527			}`),triplanar:new Sj(`vec3 triplanarTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUvs0, out vec2 writeUvs1, out vec2 writeUvs2, out vec3 writeWeights) {
3528				vec3 p = position;
3529				vec2 uv0 = (1.0 + p.xy) / 2.0;     
3530				vec2 uv1 = (1.0 + p.zy) / 2.0;		
3531				vec2 uv2 = (1.0 + p.xz) / 2.0;		
3532	
3533				uv0 = (mat * vec3((uv0 * 2.0 - 1.0) / (size * 0.5), 1.0) / 2.0 + 0.5).xy;
3534				uv1 = (mat * vec3((uv1 * 2.0 - 1.0) / (size * 0.5), 1.0) / 2.0 + 0.5).xy;
3535				uv2 = (mat * vec3((uv2 * 2.0 - 1.0) / (size * 0.5), 1.0) / 2.0 + 0.5).xy;
3536
3537				// Range from 3 to 128 seems to be good
3538				float exponent = (1.0 - blending) * 125.0 + 3.0;
3539
3540				vec3 n = vObjectNormal;
3541				vec3 weights = abs(normalize(n));
3542				weights = pow(weights, vec3(exponent));
3543				weights /= dot(weights, vec3(1.0));
3544
3545				// Write out all sets of UVs that we generated
3546				writeUvs0 = uv0;
3547				writeUvs1 = uv1;
3548				writeUvs2 = uv2;
3549				writeWeights = weights;
3550
3551				// Derivatives for LOD
3552				vec2 df0 = fwidth(uv0);
3553				vec2 df1 = fwidth(uv1);
3554				vec2 df2 = fwidth(uv2);
3555				if (df0.x > 0.5) df0.x = 0.0;
3556				if (df1.x > 0.5) df1.x = 0.0;
3557				if (df2.x > 0.5) df2.x = 0.0;
3558
3559				#ifdef GL_EXT_shader_texture_lod
3560                	vec4 tmp = 
3561						texture2DLodEXT(tex, uv0, log2(max(df0.x, df0.y)*min(textureSize.x, textureSize.y))) * weights.z + 
3562						texture2DLodEXT(tex, uv1, log2(max(df1.x, df1.y)*min(textureSize.x, textureSize.y))) * weights.x + 
3563						texture2DLodEXT(tex, uv2, log2(max(df2.x, df2.y)*min(textureSize.x, textureSize.y))) * weights.y;
3564				#else
3565                	vec4 tmp = 
3566						textureLod(tex, uv0, log2(max(df0.x, df0.y)*min(textureSize.x, textureSize.y))) * weights.z + 
3567						textureLod(tex, uv1, log2(max(df1.x, df1.y)*min(textureSize.x, textureSize.y))) * weights.x + 
3568						textureLod(tex, uv2, log2(max(df2.x, df2.y)*min(textureSize.x, textureSize.y))) * weights.y;
3569				#endif
3570
3571				vec3 col = tmp.rgb;
3572				float lalpha = alpha * tmp.a;
3573
3574				// Apply cropping across all 3 planes
3575				if ( crop > 0.5 ) {
3576					if ( uv0.x < 0.0 || uv0.x > 1.0 || uv0.y < 0.0 || uv0.y > 1.0 )  {
3577						lalpha = 0.0;
3578					}
3579					if ( uv1.x < 0.0 || uv1.x > 1.0 || uv1.y < 0.0 || uv1.y > 1.0 )  {
3580						lalpha = 0.0;
3581					}
3582					if ( uv2.x < 0.0 || uv2.x > 1.0 || uv2.y < 0.0 || uv2.y > 1.0 )  {
3583						lalpha = 0.0;
3584					}
3585				}
3586
3587				lalpha *= mask;
3588				calpha =  lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0);
3589				accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask));
3590
3591				return col;//n * 0.5 + 0.5;
3592			}			
3593			`)};var _M=class extends SL{constructor(e,t,i,r,s,a,o,l,h,c,d,u){super("v3"),this.nodeType="Depth",this.gradientType=e,this.smooth=t,this.near=i,this.far=r,this.isVector=s,this.isWorldSpace=a,this.origin=o,this.direction=l,this.colors=h,this.steps=c,this.isMask=u,this.alpha=d,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){let i=`g${this.uuid.toString().replace(/-/g,"")}`,r=new Sj(`vec3 ${i}_sdepth(float near, float far, vec3 origin, vec3 direction, vec4 colors[${i}_MAX_COLORS], float steps[${i}_MAX_COLORS], bool isMask, float mask, float alpha, out float calpha) {
3594               vec4 color = colors[0];
3595               #ifdef ${i}_IS_VECTOR
3596                   #ifdef ${i}_LINEAR
3597                       #ifdef ${i}_WORLDSPACE
3598                       float depth = vectorLinearWorldSpaceDepth(direction, origin, near, far);
3599                       #else
3600                       float depth = vectorLinearObjectSpaceDepth(direction, origin, near, far);
3601                       #endif
3602                   #else
3603                       #ifdef ${i}_WORLDSPACE
3604                           float depth = vectorSphericalWorldSpaceDepth(origin, near, far);
3605                       #else
3606                           float depth = vectorSphericalObjectSpaceDepth(origin, near, far);
3607                       #endif
3608                   #endif
3609               #else
3610                   float dist = length(vWPosition - cameraPosition);
3611			       float depth = ( dist - near ) / ( far - near );
3612               #endif
3613
3614
3615              float p;
3616              #ifdef ${i}_SMOOTH
3617				for ( int i = 1; i < ${i}_MAX_COLORS; i++ ) {
3618						p = clamp( ( depth - steps[i-1] ) / ( steps[i] - steps[i-1] ), 0.0, 1.0 );
3619						color = mix(color, colors[i], smoothstep(0.0, 1.0, p));
3620					}
3621              #else
3622                for ( int i = 1; i < ${i}_MAX_COLORS; i++ ) {
3623                   p = clamp(( depth - steps[i - 1] ) / ( steps[i] - steps[i - 1] ), 0.0, 1.0);
3624                   color = mix(color, colors[i], p);
3625                 }
3626              #endif
3627
3628               float lalpha = alpha * color.a * mask;
3629               calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask));
3630			   accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask));
3631			   
3632               return color.rgb;
3633			}`,[_M.Nodes.vectorLinearWorldSpaceDepth,_M.Nodes.vectorLinearObjectSpaceDepth,_M.Nodes.vectorSphericalObjectSpaceDepth,_M.Nodes.vectorSphericalWorldSpaceDepth]);if(!e.isShader("fragment"))return console.warn("DepthNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.define(`${i}_MAX_COLORS`,this.colors.value.length),this.smooth.value&&e.define(`${i}_SMOOTH`),this.isVector.value>.5&&e.define(`${i}_IS_VECTOR`),0===this.gradientType.value&&e.define(`${i}_LINEAR`),this.isWorldSpace.value>.5&&e.define(`${i}_WORLDSPACE`),e.require("worldPosition"),e.addFragmentVariable(this.calpha,"float");let s=e.include(r),a=[];return a.push(this.near.build(e,"f")),a.push(this.far.build(e,"f")),a.push(this.origin.build(e,"v3")),a.push(this.direction.build(e,"v3")),a.push(this.colors.build(e,"v4[]")),a.push(this.steps.build(e,"f[]")),a.push(this.isMask.build(e,"b")),a.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),a.push(this.alpha.build(e,"f")),a.push(this.calpha),e.format(s+"("+a.join(",")+")",this.getType(e),t)}}};_M.Nodes={vectorLinearWorldSpaceDepth:new Sj(`float vectorLinearWorldSpaceDepth(vec3 direction, vec3 origin, float near, float far) {
3634               vec3 n = normalize(direction);
3635               float dist = (n.x*(vWPosition.x - origin.x) + n.y*(vWPosition.y - origin.y) + n.z*(vWPosition.z - origin.z));
3636               return ( dist - near ) / ( far - near );
3637            }`),vectorLinearObjectSpaceDepth:new Sj(`float vectorLinearObjectSpaceDepth(vec3 direction, vec3 origin, float near, float far) {
3638               vec3 n = normalize(direction);
3639               float dist = (n.x*(position.x - origin.x) + n.y*(position.y - origin.y) + n.z*(position.z - origin.z));
3640               return ( dist - near ) / ( far - near );
3641            }`),vectorSphericalWorldSpaceDepth:new Sj(`float vectorSphericalWorldSpaceDepth(vec3 origin, float near, float far) {
3642               float dist = length(vWPosition - origin);
3643               return ( dist - near ) / ( far - near );
3644            }`),vectorSphericalObjectSpaceDepth:new Sj(`float vectorSphericalObjectSpaceDepth(vec3 origin, float near, float far) {
3645               float dist = length(position - origin);
3646               return ( dist - near ) / ( far - near );
3647            }`)};var _E=class extends SL{constructor(e,t,i,r,s,a,o,l){super("v3"),this.nodeType="Fresnel",this.color=e,this.bias=t,this.scale=i,this.intensity=r,this.factor=s,this.isMask=l,this.alpha=a,this.mode=o,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(e.require("vWorldViewDir"),e.require("worldNormal"),!e.isShader("fragment"))return console.warn("FresnelNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.addFragmentVariable(this.calpha,"float");
3647let i=new Sj(`vec3 fresnel(vec3 color, float bias, float scale, float intensity, float factor, bool isMask, float mask, float alpha, int mode, out float calpha) {
3648					float fresnel = bias + scale * pow( abs( factor + dot( normalize( vWorldViewDir ), normalize( vWNormal ) ) ), intensity );
3649
3650					float lalpha = clamp(fresnel, 0.0, 1.0) * alpha * mask;
3651					calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask));
3652					accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask));
3653
3654					return color;
3655				}`),r=e.include(i),s=[];return s.push(this.color.build(e,"c")),s.push(this.bias.build(e,"f")),s.push(this.scale.build(e,"f")),s.push(this.intensity.build(e,"f")),s.push(this.factor.build(e,"f")),s.push(this.isMask.build(e,"b")),s.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),s.push(this.alpha.build(e,"f")),s.push(this.mode.build(e,"i")),s.push(this.calpha),e.format(r+"("+s.join(",")+")",this.getType(e),t)}}},_C=class extends SL{constructor(e,t,i,r,s,a,o,l,h){super("v3"),this.nodeType="Gradient",this.gradientType=e,this.smooth=t,this.colors=i,this.steps=r,this.offset=s,this.morph=a,this.angle=o,this.isMask=h,this.alpha=l,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(!e.isShader("fragment"))return console.warn("GradientNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.define("GRAD_MAX",10),e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let i=e.include(_C.Nodes.gradient),r=[];return r.push(this.gradientType.build(e,"i")),r.push(this.smooth.build(e,"b")),r.push(this.colors.build(e,"v4[]")),r.push(this.steps.build(e,"f[]")),r.push(this.offset.build(e,"v2")),r.push(this.morph.build(e,"v2")),r.push(this.angle.build(e,"f")),r.push(this.isMask.build(e,"b")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_C.Nodes={gradient:new Sj(`vec3 gradient(int gradientType, bool smoothed, vec4 colors[GRAD_MAX], float steps[GRAD_MAX], vec2 offset, vec2 morph, float angle, bool isMask, float mask, float alpha, out float calpha) {
3656				vec4 color = colors[0];
3657				vec2 m = morph / vUv.xy;
3658				vec2 rot = vec2( 0.5 + m.x, m.y );
3659				vec2 dt = vec2(
3660					cos( angle ) * rot.x - sin( angle ) * rot.y,
3661					sin( angle ) * rot.x + cos( angle ) * rot.y
3662				);
3663				vec2 pt = ( vUv - 0.5 + offset ) / 2.0 + dt / 2.0;
3664				float t = dot( pt, dt ) / dot( dt, dt );
3665				if ( gradientType == 1 ) {
3666					t = distance (
3667						( vUv + morph ) * 3.0,
3668						( vUv + offset ) + 1.0
3669					) + angle;
3670				} else if ( gradientType == 2 ) {
3671					float polar = atan(
3672						vUv.x + morph.x - 0.5 + offset.x,
3673						vUv.y + morph.y - 0.5 + offset.y
3674					) * -1.0;
3675					t = fract( ( angle / PI / -2.0 ) + 0.5 * ( polar / PI ) );
3676				}
3677
3678				float p;
3679				if (smoothed) {
3680					for ( int i = 1; i < GRAD_MAX; i++ ) {
3681						p = clamp( ( t - steps[i-1] ) / ( steps[i] - steps[i-1] ), 0.0, 1.0 );
3682						color = mix(color, colors[i], smoothstep(0.0, 1.0, p));
3683					}
3684
3685				} else {
3686					for ( int i = 1; i < GRAD_MAX; i++ ) {
3687						p = clamp( ( t - steps[i-1] ) / ( steps[i] - steps[i-1] ), 0.0, 1.0 );
3688						color = mix(color, colors[i], p);
3689					}
3690				}
3691
3692				float lalpha = alpha * color.a * mask;
3693				calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask));
3694				accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask));
3695				
3696				return color.xyz;
3697			}`)};var _T=class extends SL{constructor(e,t,i,r,s){super("v3"),this.nodeType="Matcap",this.texture=e,this.isMask=r,this.alpha=t,this.mode=i,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`,this.rotation=s}generate(e,t){if(!e.isShader("fragment"))return console.warn("MatcapNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.addFragmentVariable(this.calpha,"float");let i=e.include(_T.Nodes.matcap);e.require("normal"),e.requires.normal=!0;let r=[];return r.push(this.texture.generate(e,"t")),r.push("normal"),r.push(this.isMask.build(e,"b")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.mode.build(e,"i")),r.push(this.calpha),r.push(this.rotation.build(e,"f")),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_T.Nodes={matcap:new Sj(`vec3 matcap(sampler2D matcapTex, vec3 normal, bool isMask, float mask, float alpha, int mode, out float calpha, float rotation) {
3698					vec3 viewDir = normalize( vViewPosition );
3699					vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );
3700					vec3 y = cross( viewDir, x );
3701					vec2 uv = vec2( dot( x, normal ), dot( y, normal ) );
3702					uv = mat2( cos(rotation), sin(rotation), -sin(rotation), cos(rotation) ) * uv;
3703					uv = uv * 0.495 + 0.5;
3704					vec4 matcapColor = texture2D( matcapTex, uv );
3705
3706					float lalpha = alpha * mask;
3707					calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask));
3708					accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask));
3709					
3710					return matcapColor.rgb;
3711            	}`)};var _P=(eS=new Sj(`vec3 random3(vec3 c) {
3712			float j = 4096.0*sin(dot(c,vec3(17.0, 59.4, 15.0)));
3713			vec3 r;
3714			r.z = fract(512.0*j);
3715			j *= .125;
3716			r.x = fract(512.0*j);
3717			j *= .125;
3718			r.y = fract(512.0*j);
3719			return r-0.5;
3720		}`),(e_=new Sj(`float simplexFast(vec3 p) {
3721			 vec3 s = floor(p + dot(p, vec3(F3)));
3722			 mediump vec3 x = p - s + dot(s, vec3(G3));
3723			 mediump vec3 hs = s;
3724			 
3725			 mediump vec3 e = step(vec3(0.0), x - x.yzx);
3726			 mediump vec3 i1 = e*(1.0 - e.zxy);
3727			 mediump vec3 i2 = 1.0 - e.zxy*(1.0 - e);
3728				
3729			 mediump vec3 x1 = x - i1 + G3;
3730			 mediump vec3 x2 = x - i2 + 2.0*G3;
3731			 mediump vec3 x3 = x - 1.0 + 3.0*G3;
3732			 
3733			 mediump vec4 w, d;
3734			 
3735			 w.x = dot(x, x);
3736			 w.y = dot(x1, x1);
3737			 w.z = dot(x2, x2);
3738			 w.w = dot(x3, x3);
3739			 
3740			 w = max(0.6 - w, 0.0);
3741			 
3742			 d.x = dot(random3(hs), x);
3743			 d.y = dot(random3(hs + i1), x1);
3744			 d.z = dot(random3(hs + i2), x2);
3745			 d.w = dot(random3(hs + 1.0), x3);
3746			 
3747			 w *= w;
3748			 w *= w;
3749			 d *= w;
3750			 
3751			 return dot(d, vec4(52.0));
3752		}`,[eS])).keywords.F3=new SH("float F3 0.3333333"),e_.keywords.G3=new SH("float G3 0.1666667"),(eA=new Sj(`float simplexPrecise(vec3 p) {
3753			 vec3 s = floor(p + dot(p, vec3(F3)));
3754			 vec3 x = p - s + dot(s, vec3(G3));
3755			 
3756			 vec3 e = step(vec3(0.0), x - x.yzx);
3757			 vec3 i1 = e*(1.0 - e.zxy);
3758			 vec3 i2 = 1.0 - e.zxy*(1.0 - e);
3759				
3760			 vec3 x1 = x - i1 + G3;
3761			 vec3 x2 = x - i2 + 2.0*G3;
3762			 vec3 x3 = x - 1.0 + 3.0*G3;
3763			 
3764			 vec4 w, d;
3765			 
3766			 w.x = dot(x, x);
3767			 w.y = dot(x1, x1);
3768			 w.z = dot(x2, x2);
3769			 w.w = dot(x3, x3);
3770			 
3771			 w = max(0.6 - w, 0.0);
3772			 
3773			 d.x = dot(random3(s), x);
3774			 d.y = dot(random3(s + i1), x1);
3775			 d.z = dot(random3(s + i2), x2);
3776			 d.w = dot(random3(s + 1.0), x3);
3777			 
3778			 w *= w;
3779			 w *= w;
3780			 d *= w;
3781			 
3782			 return dot(d, vec4(52.0));
3783		}`,[eS])).keywords.F3=new SH("float F3 0.3333333"),eA.keywords.G3=new SH("float G3 0.1666667"),eM=new Sj(`float simplexFractal(vec3 m) {
3784			mat3 rot1 = mat3(-0.37, 0.36, 0.85,-0.14,-0.93, 0.34,0.92, 0.01,0.4);
3785			mat3 rot2 = mat3(-0.55,-0.39, 0.74, 0.33,-0.91,-0.24,0.77, 0.12,0.63);
3786			mat3 rot3 = mat3(-0.71, 0.52,-0.47,-0.08,-0.72,-0.68,-0.7,-0.45,0.56);
3787			return 0.5333333 * simplexFast(m * rot1)
3788				 + 0.2666667 * simplexFast(2.0 * m * rot2)
3789				 + 0.1333333 * simplexFast(4.0 * m * rot3)
3790				 + 0.0666667 * simplexFast(8.0 * m);
3791		}`,[e_]),eE=new Sj("vec4 permute(vec4 x){return mod(((x*34.0)+1.0)*x, 289.0);}"),eC=new Sj("vec4 taylorInvSqrt(vec4 r){return 1.79284291400159 - 0.85373472095314 * r;}"),eT=new Sj(`float simplexAshima(vec3 v) {
3792		  const vec2  C = vec2(1.0/6.0, 1.0/3.0) ;
3793		  const vec4  D = vec4(0.0, 0.5, 1.0, 2.0);
3794		  vec3 i  = floor(v + dot(v, C.yyy) );
3795		  vec3 x0 =   v - i + dot(i, C.xxx) ;
3796		  vec3 g = step(x0.yzx, x0.xyz);
3797		  vec3 l = 1.0 - g;
3798		  vec3 i1 = min( g.xyz, l.zxy );
3799		  vec3 i2 = max( g.xyz, l.zxy );
3800		  vec3 x1 = x0 - i1 + 1.0 * C.xxx;
3801		  vec3 x2 = x0 - i2 + 2.0 * C.xxx;
3802		  vec3 x3 = x0 - 1. + 3.0 * C.xxx;
3803		  i = mod(i, 289.0 ); 
3804		  vec4 p = permute( permute( permute( 
3805					 i.z + vec4(0.0, i1.z, i2.z, 1.0 ))
3806				   + i.y + vec4(0.0, i1.y, i2.y, 1.0 )) 
3807				   + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));
3808		  float n_ = 1.0/7.0; // N=7
3809		  vec3  ns = n_ * D.wyz - D.xzx;
3810		  vec4 j = p - 49.0 * floor(p * ns.z *ns.z);  //  mod(p,N*N)
3811		  vec4 x_ = floor(j * ns.z);
3812		  vec4 y_ = floor(j - 7.0 * x_ );    // mod(j,N)
3813		  vec4 x = x_ *ns.x + ns.yyyy;
3814		  vec4 y = y_ *ns.x + ns.yyyy;
3815		  vec4 h = 1.0 - abs(x) - abs(y);
3816		  vec4 b0 = vec4( x.xy, y.xy );
3817		  vec4 b1 = vec4( x.zw, y.zw );
3818		  vec4 s0 = floor(b0)*2.0 + 1.0;
3819		  vec4 s1 = floor(b1)*2.0 + 1.0;
3820		  vec4 sh = -step(h, vec4(0.0));
3821		  vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;
3822		  vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;
3823		  vec3 p0 = vec3(a0.xy,h.x);
3824		  vec3 p1 = vec3(a0.zw,h.y);
3825		  vec3 p2 = vec3(a1.xy,h.z);
3826		  vec3 p3 = vec3(a1.zw,h.w);
3827		  vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));
3828		  p0 *= norm.x;
3829		  p1 *= norm.y;
3830		  p2 *= norm.z;
3831		  p3 *= norm.w;
3832		  vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);
3833		  m = m * m;
3834		  return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), 
3835										dot(p2,x2), dot(p3,x3) ) );
3836		}`,[eE,eC]),eP=new Sj("vec4 mod289(vec4 x){return x - floor(x * (1.0 / 289.0)) * 289.0;}"),eD=new Sj("vec4 perm(vec4 x){return mod289(((x * 34.0) + 1.0) * x);}",[eP]),eI=new Sj(`float noise(vec3 p){
3837			vec3 a = floor(p);
3838			vec3 d = p - a;
3839			d = d * d * (3.0 - 2.0 * d);
3840			vec4 b = a.xxyy + vec4(0.0, 1.0, 0.0, 1.0);
3841			vec4 k1 = perm(b.xyxy);
3842			vec4 k2 = perm(k1.xyxy + b.zzww);
3843			vec4 c = k2 + a.zzzz;
3844			vec4 k3 = perm(c);
3845			vec4 k4 = perm(c + 1.0);
3846			vec4 o1 = fract(k3 * (1.0 / 41.0));
3847			vec4 o2 = fract(k4 * (1.0 / 41.0));
3848			vec4 o3 = o2 * d.z + o1 * (1.0 - d.z);
3849			vec2 o4 = o3.yw * d.x + o3.xz * (1.0 - d.x);
3850			return o4.y * d.y + o4.x * (1.0 - d.y);
3851		}`,[eD]),(eO=new Sj(`float fbm(vec3 x) {
3852			float v = 0.0;
3853			float a = 0.5;
3854			vec3 shift = vec3(100);
3855			for (int i = 0; i < NUM_OCTAVES; ++i) {
3856				v += a * noise(x);
3857				x = x * 2.0 + shift;
3858				a *= 0.5;
3859			}
3860			return v;
3861		}
3861`,[eI])).keywords.NUM_OCTAVES=new SH("int NUM_OCTAVES 5"),eR=new Sj("vec3 fade(vec3 t) {return t*t*t*(t*(t*6.0-15.0)+10.0);}"),eL=new Sj(`float perlin(vec3 P){
3862		  vec3 Pi0 = floor(P);
3863		  vec3 Pi1 = Pi0 + vec3(1.0);
3864		  Pi0 = mod(Pi0, 289.0);
3865		  Pi1 = mod(Pi1, 289.0);
3866		  vec3 Pf0 = fract(P);
3867		  vec3 Pf1 = Pf0 - vec3(1.0);
3868		  vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
3869		  vec4 iy = vec4(Pi0.yy, Pi1.yy);
3870		  vec4 iz0 = Pi0.zzzz;
3871		  vec4 iz1 = Pi1.zzzz;
3872		  vec4 ixy = permute(permute(ix) + iy);
3873		  vec4 ixy0 = permute(ixy + iz0);
3874		  vec4 ixy1 = permute(ixy + iz1);
3875		  vec4 gx0 = ixy0 / 7.0;
3876		  vec4 gy0 = fract(floor(gx0) / 7.0) - 0.5;
3877		  gx0 = fract(gx0);
3878		  vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);
3879		  vec4 sz0 = step(gz0, vec4(0.0));
3880		  gx0 -= sz0 * (step(0.0, gx0) - 0.5);
3881		  gy0 -= sz0 * (step(0.0, gy0) - 0.5);
3882		  vec4 gx1 = ixy1 / 7.0;
3883		  vec4 gy1 = fract(floor(gx1) / 7.0) - 0.5;
3884		  gx1 = fract(gx1);
3885		  vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);
3886		  vec4 sz1 = step(gz1, vec4(0.0));
3887		  gx1 -= sz1 * (step(0.0, gx1) - 0.5);
3888		  gy1 -= sz1 * (step(0.0, gy1) - 0.5);
3889		  vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);
3890		  vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);
3891		  vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);
3892		  vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);
3893		  vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);
3894		  vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);
3895		  vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);
3896		  vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);
3897		  vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));
3898		  g000 *= norm0.x;
3899		  g010 *= norm0.y;
3900		  g100 *= norm0.z;
3901		  g110 *= norm0.w;
3902		  vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));
3903		  g001 *= norm1.x;
3904		  g011 *= norm1.y;
3905		  g101 *= norm1.z;
3906		  g111 *= norm1.w;
3907		  float n000 = dot(g000, Pf0);
3908		  float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));
3909		  float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));
3910		  float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));
3911		  float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));
3912		  float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));
3913		  float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));
3914		  float n111 = dot(g111, Pf1);
3915		  vec3 fade_xyz = fade(Pf0);
3916		  vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);
3917		  vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);
3918		  float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); 
3919		  return 2.2 * n_xyz;
3920		}`,[eE,eC,eR]),eB=new Sj(`float hashwithoutsine13(vec3 p3)
3921		{
3922			p3  = fract(p3 * .1031);
3923			p3 += dot(p3, p3.yzx + 33.33);
3924			return fract((p3.x + p3.y) * p3.z);
3925		}`),ez=new Sj(`vec3 hashwithoutsine33(vec3 p3)
3926		{
3927			p3 = fract(p3 * vec3(.1031, .1030, .0973));
3928			p3 += dot(p3, p3.yxz+33.33);
3929			return fract((p3.xxy + p3.yxx)*p3.zyx);
3930		}`),eF=new Sj(`float metric(in vec3 p)
3931		{
3932			// L2 
3933			return length(p);
3934
3935			// Chebyshev 
3936			// vec3 a = abs(p);
3937			// return max(a.x, max(a.y, a.z));
3938		}`),eN=new Sj(`float smin( float a, float b, float k )
3939		{
3940			float h = smoothstep(0.0, 1.0, 0.5 + 0.5 * (b - a) / k);
3941			float correction = k * h * (1.0 - h);
3942			return mix(b, a, h) - correction;
3943		}`),ek=new Sj(`float smax( float a, float b, float k )
3944		{
3945			float h = smoothstep(1.0, 0.0, 0.5 + 0.5 * (a - b) / k);
3946			float correction = k * h * (1.0 - h);
3947			return mix(a, b, h) + correction;
3948		}`),eU=new Sj(`float remap(float value, float input_min, float input_max, float output_min, float output_max) {
3949			// Compute width of each interval
3950			float input_width = input_max - input_min;
3951			float output_width = output_max - output_min;
3952		
3953			// Convert input range into a 0-1 range 
3954			float scaled = (value - input_min) / input_width;
3955		
3956			// Convert the 0-1 range into a value in output range
3957			return output_min + (scaled * output_width);
3958		}`),{simplexFast:e_,simplexPrecise:eA,simplexFractal:eM,simplexAshima:eT,fbm:eO,perlin:eL,voronoi:new Sj(`float voronoi(in vec3 x, in int style, in float smoothness, in float seed, in int quality) 
3959		{
3960			// Integer and fractional parts of this point's coordinates
3961			ivec3 p = ivec3(floor(x));
3962			vec3 f = fract(x);
3963
3964			// Different variables that we will use to construct noise:
3965			//
3966			// f1: distance to the closest feature point
3967			// f2: distance to the second closest feature point
3968			// e: distance to the closest edge (cell boundary)
3969			//
3970			// We also compute "smooth" versions of all of the above quantites, essentially
3971			// replacing "hard" minimums with "smooth" minimums (described by IQ)
3972			float f1_smooth = 8.0;
3973			float f1 = 8.0;
3974			float f2_smooth = 8.0;
3975			float f2 = 8.0;
3976			float e_smooth = 8.0;
3977			float e = 8.0;
3978
3979			// Variables stored from closest cell
3980			ivec3 mb;
3981			vec3 mr; 
3982
3983			int steps = quality;
3984			
3985			for (int x = -steps; x <= steps; x++) 
3986			for (int y = -steps; y <= steps; y++)
3987			for (int z = -steps; z <= steps; z++)
3988			{
3989				ivec3 b = ivec3(x, y, z);
3990				vec3 r = vec3(b) + hashwithoutsine33(vec3(p + b) + seed) - f;
3991				float d = length(r);
3992				
3993				f1_smooth = smin(d, f1_smooth, smoothness);
3994
3995				// Store un-smoothed distances too 
3996				if (d < f1) 
3997				{
3998					f2 = f1;
3999					f1 = d;
4000
4001					mb = ivec3(x, y, z);
4002					mr = r;
4003				} 
4004				else if (d < f2) 
4005				{
4006					f2 = d;
4007				}
4008			}	
4009			
4010			// Second pass for edge distance  
4011			// skip for styles don't need
4012			if (style != 0 &&  style != 5 && style != 7)
4013			for (int x = -steps; x <= steps; x++) 
4014			for (int y = -steps; y <= steps; y++)
4015			for (int z = -steps; z <= steps; z++)
4016			{
4017				// Start search at the cell that contains the closest point to "x" (found in 1st pass)
4018				ivec3 b = mb + ivec3(x, y, z);
4019				vec3 r = vec3(b) + hashwithoutsine33(vec3(p + b) + seed) - f;
4020				float d1 = dot(0.5 * (mr + r), (r - mr)); 				// IQ normalizes "r - mr" but that breaks things for the smooth version?
4021				float d2 = dot(0.5 * (mr + r), normalize(r - mr));
4022
4023				e_smooth = smin(d1, e_smooth, smoothness);
4024
4025				e = min(e, d2);
4026
4027				// Also compute a smooth version of F2 in this pass
4028				{
4029					ivec3 b = ivec3(x, y, z);
4030					if (b != mb) 
4031					{
4032						vec3 r = vec3(b) + hashwithoutsine33(vec3(p + b) + seed) - f;
4033						float d = length(r);
4034
4035						f2_smooth = smin(d, f2_smooth, smoothness);
4036					}
4037				}
4038			}
4039
4040			// Different visualization modes 
4041			if (style == 0) 
4042			{
4043				return f1_smooth;
4044			}
4045			if (style == 1) 
4046			{
4047				return f2_smooth;
4048			}
4049			if (style == 2) 
4050			{
4051				return f2_smooth - f1_smooth;
4052				
4053				// "Pebbles" also cool
4054				//return step(0.2, f2_smooth - f1_smooth);
4055			}
4056			if (style == 3) 
4057			{
4058				// This one is really good for rock / stone effects
4059				float a = f1; 
4060				float b = f2;
4061				float k = 3.0;
4062				float h = max(k - abs(a - b), 0.0) / k;
4063				float final = min(a, b) - h * h * k * (1.0 / 4.0);
4064				return final;
4065			}
4066			if (style == 4) 
4067			{
4068				// Some random adjustments to make this style stand out more 
4069				return exp(5.0 * e_smooth);
4070			}
4071			if (style == 5) 
4072			{
4073				return pow(f1_smooth, 3.0);
4074			}
4075			if (style == 6) 
4076			{				
4077				const float eps = 0.0125;
4078
4079				// Thicker lines as the user increases the smoothness slider
4080				float thickness = smoothness * 0.25 + eps;
4081
4082				// Blurrier lines as the user increases the smoothness slider
4083				float blur = pow(smoothness, 3.0) * 0.25 + eps;
4084
4085				return smoothstep(
4086					thickness - thickness * blur, 
4087					thickness + thickness * blur, 
4088					e
4089				);
4090			}
4091			if (style == 7) 
4092			{
4093				return hashwithoutsine13(vec3(p + mb) + seed);
4094			}
4095		}
4096	`,[eB,ez,eF,eN,ek,eU])}),_D=class extends SL{constructor(e,t,i,r,s,a,o,l,h,c,d,u,p,f,m,g,v,y,x){super("v3"),this.nodeType="Noise",this.scale=e,this.size=t,this.move=i,this.fA=r,this.fB=s,this.distortion=a,this.colorA=o,this.colorB=l,this.colorC=h,this.colorD=c,this.noiseType=u,this.voronoiStyle=f,this.highCut=m,this.lowCut=g,this.smoothness=v,this.seed=y,this.quality=x,this.isMask=p,this.alpha=d,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t,i,r,s){e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let a=["simplexFast","simplexFractal","simplexAshima","fbm","perlin","voronoi"][this.noiseType.value],o="voronoi"==a?`
4097		float v = ${a}(st + move, voronoiStyle, smoothness, seed, quality);
4098
4099		// Apply clipping to colors
4100		v = remap(v, lowCut, highCut, 0.0, 1.0);
4101		v = smax(v, 0.0, smoothness * 0.25);
4102		v = smin(v, 1.0, smoothness * 0.25);
4103
4104		// Note that the voronoi mode only uses colors "A" and "C" from the UI 
4105		vec4 color = mix(colorA, colorC, v); 
4106		`:`
4107		vec3 q = vec3(${a}(st),
4108					   ${a}(st + vec3(1.0)),
4109					   ${a}(st + vec3(1.0)));
4110		vec3 r = vec3(${a}(st + vec3(distortion, 1.0) * q + vec3(fA, 1.0) + move),
4111					  ${a}(st + vec3(distortion, 1.0) * q + vec3(fB, 1.0) + move), 
4112					  ${a}(st * q));
4113		float f = ${a}(st + r);
4114		vec4 color;
4115		color = mix(colorA, colorB, clamp((f * f) * 4.0, 0.0, 1.0));
4116		color = mix(color, colorC, clamp(length(q), 0.0, 1.0));
4117		color = mix(color, colorD, clamp(length(r.x), 0.0, 1.0));
4118		`,l=new Sj(`vec3 ${a}customNoise(float scale, vec3 size, float move, vec2 fA, vec2 fB, vec2 distortion, vec4 colorA, vec4 colorB, vec4 colorC, vec4 colorD, int voronoiStyle, float highCut, float lowCut, float smoothness, float seed, int quality, bool isMask, float mask, float alpha, out float calpha) 
4119			{
4120                // Prevent scale of zero 
4121				scale = max(abs(scale), 0.001);
4122
4123				vec3 st = position / size;
4124				st /= scale;
4125
4126				${o}
4127
4128				float lalpha = alpha * color.a * mask;
4129				calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask));
4130				accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask));
4131
4132				return clamp(color, 0.0, 1.0).rgb;
4133			}`,[_P.simplexFast,_P.simplexFractal,_P.simplexAshima,_P.fbm,_P.perlin,_P.voronoi]),h=e.include(l),c=[];return c.push(this.scale.build(e,"f")),c.push(this.size.build(e,"v3")),c.push(this.move.build(e,"f")),c.push(this.fA.build(e,"v2")),c.push(this.fB.build(e,"v2")),c.push(this.distortion.build(e,"v2")),c.push(this.colorA.build(e,"v4")),c.push(this.colorB.build(e,"v4")),c.push(this.colorC.build(e,"v4")),c.push(this.colorD.build(e,"v4")),c.push(this.voronoiStyle.build(e,"i")),c.push(this.highCut.build(e,"f")),c.push(this.lowCut.build(e,"f")),c.push(this.smoothness.build(e,"f")),c.push(this.seed.build(e,"f")),c.push(this.quality.build(e,"i")),c.push(this.isMask.build(e,"b")),c.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),c.push(this.alpha.build(e,"f")),c.push(this.calpha),e.format(h+"("+c.join(",")+")",this.getType(e),t)}};_D.numOctaves=5;var _I=class extends SL{constructor(e,t,i,r,s,a,o,l,h,c,d,u,p,f,m,g){super("v3"),this.nodeType="Outline",this.firstTime=!0,this.outlineColor=e,this.contourColor=t,this.outlineWidth=i,this.contourWidth=r,this.contourThreshold=s,this.outlineThreshold=a,this.contourFrequency=o,this.outlineSmoothing=l,this.contourDirection=h,this.positionalLines=c,this.compensation=d,this.resolution=u,this.normalMap=p,this.depthMap=f,this.pixelRatio=m,this.alpha=g,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){let i=`g${this.uuid.toString().replace(/-/g,"")}`;if(e.require("vWorldViewDir"),e.require("worldNormal"),e.extensions.derivatives=!0,this.compensation.value&&e.define("OUTLINE_COMPENSATION",`${i}_offset`),this.firstTime){let t=this.outlineWidth.build(e,"f"),r=this.resolution.build(e,"v2"),s=this.compensation.build(e,"b"),a=this.pixelRatio.build(e,"f");e.addVertexParsVariable("randomColor","attribute vec3"),e.addVertexParsVariable("extrudeNormal","attribute vec3"),e.addVertexParsVariable(t,"uniform float"),e.addVertexParsVariable(r,"uniform vec2"),e.addVertexParsVariable(s,"uniform bool"),e.addVertexParsVariable(a,"uniform float"),e.addVertexParsVariable("vID","flat out float"),e.addFragmentParsVariable("vID","flat in float"),e.addVertexFinalCode(`
4134                vID = randomColor.r;
4135                vec2 ${i}_offset = vec2(0.0);
4136                if (${s}) {
4137                    vec4 ${i}_clipPosition = projectionMatrix * (modelViewMatrix * vec4(transformed, 1.0));
4138                    // NOTE: For certain shapes, like spheres, we get incorrect extrusion when the
4139                    // normals face the camera directly. So we hackily fix this by offsetting the normal
4140                    // by a tiny amount.
4141                    vec3 ${i}_clipNormal = mat3(projectionMatrix) * (mat3(modelViewMatrix) * extrudeNormal) + 0.0000001;
4142                    ${i}_offset = normalize(${i}_clipNormal.xy) / ${r} * (${t} / 2.0) * ${i}_clipPosition.w * 2.0 * ${a};
4143                    ${i}_clipPosition.xy += ${i}_offset;
4144                    // TODO(MAX): To handle multiple outline layers, we only want to extrude
4145                    // if this offset is the biggest of all the potential offsets
4146                    gl_Position = ${i}_clipPosition;
4147                }
4148            `)}if(!e.isShader("fragment"))return console.warn("OutlineNode is not compatible with "+e.shader+" shader."),"";{e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let i=e.include(_I.Nodes.outline),r=[];return r.push(this.outlineColor.build(e,"c")),r.push(this.contourColor.build(e,"c")),r.push(this.outlineWidth.build(e,"f")),r.push(this.contourWidth.build(e,"f")),r.push(this.contourThreshold.build(e,"f")),r.push(this.outlineThreshold.build(e,"f")),r.push(this.contourFrequency.build(e,"f")),r.push(this.outlineSmoothing.build(e,"f")),r.push(this.contourDirection.build(e,"v3")),r.push(this.positionalLines.build(e,"b")),r.push(this.resolution.build(e,"v2")),r.push(this.normalMap.getTexture(e,"t")),r.push(this.depthMap.getTexture(e,"t")),r.push(this.pixelRatio.build(e,"f")),r.push(this.compensation.build(e,"b")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),this.firstTime=!this.firstTime,e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_I.Nodes=(eV=new Sj(`
4149float sobelSample(sampler2D t, sampler2D d, vec2 uv, vec2 resolution, float outlineWidth, float pixelRatio)
4150{
4151    vec2 halton = haltonSequence[frameIndex];
4152    float temporalOffset = getNoiseInterleavedGradient(gl_FragCoord.xy + halton);
4153    float temporalAngle  = temporalOffset * PI2;
4154
4155    vec2 texelSize = (vec2(1.0) / resolution);
4156    vec2 offsetSize = texelSize * outlineWidth * pixelRatio;
4157
4158    vec2 uvSamples[9];
4159    vec4 normalSamples[9];
4160
4161	uvSamples[0] = uv + vec2( -offsetSize.x, -offsetSize.y) + (vogelDiskSample(0, 9, temporalAngle) * texelSize);
4162	uvSamples[1] = uv + vec2(0.0, -offsetSize.y) + (vogelDiskSample(1, 9, temporalAngle) * texelSize);
4163	uvSamples[2] = uv + vec2(  offsetSize.x, -offsetSize.y) + (vogelDiskSample(2, 9, temporalAngle) * texelSize);
4164	uvSamples[3] = uv + vec2( -offsetSize.x, 0.0) + (vogelDiskSample(3, 9, temporalAngle) * texelSize);
4165	uvSamples[4] = uv;
4166	uvSamples[5] = uv + vec2(  offsetSize.x, 0.0) + (vogelDiskSample(5, 9, temporalAngle) * texelSize);
4167	uvSamples[6] = uv + vec2( -offsetSize.x, offsetSize.y) + (vogelDiskSample(6, 9, temporalAngle) * texelSize);
4168	uvSamples[7] = uv + vec2(0.0, offsetSize.y) + (vogelDiskSample(7, 9, temporalAngle) * texelSize);
4169	uvSamples[8] = uv + vec2(  offsetSize.x, offsetSize.y) + (vogelDiskSample(8, 9, temporalAngle) * texelSize);
4170
4171
4172    normalSamples[0] = texture2D(t, uvSamples[0]);
4173    normalSamples[1] = texture2D(t, uvSamples[1]);
4174    normalSamples[2] = texture2D(t, uvSamples[2]);
4175    normalSamples[3] = texture2D(t, uvSamples[3]);
4176    normalSamples[4] = texture2D(t, uvSamples[4]);
4177    normalSamples[5] = texture2D(t, uvSamples[5]);
4178    normalSamples[6] = texture2D(t, uvSamples[6]);
4179    normalSamples[7] = texture2D(t, uvSamples[7]);
4180    normalSamples[8] = texture2D(t, uvSamples[8]);
4181
4182    float depthBias = 0.0001;
4183    // TODO(MAX): Can we somehow reduce the number of conditionals here with MATH?!
4184    if (normalSamples[0].a != vID && normalSamples[0].a != 0.0) {
4185        float depthAtSample = texture2D(d, uvSamples[0]).r + depthBias;
4186        if (gl_FragCoord.z > depthAtSample) {
4187           return 0.0;
4188        }
4189    }
4190
4191    if (normalSamples[1].a != vID && normalSamples[1].a != 0.0) {
4192        float depthAtSample = texture2D(d, uvSamples[1]).r + depthBias;
4193        if (gl_FragCoord.z > depthAtSample) {
4194           return 0.0;
4195        }
4196    }
4197
4198    if (normalSamples[2].a != vID && normalSamples[2].a != 0.0) {
4199        float depthAtSample = texture2D(d, uvSamples[2]).r + depthBias;
4200        if (gl_FragCoord.z > depthAtSample) {
4201           return 0.0;
4202        }
4203    }
4204
4205    if (normalSamples[3].a != vID && normalSamples[3].a != 0.0) {
4206        float depthAtSample = texture2D(d, uvSamples[3]).r + depthBias;
4207        if (gl_FragCoord.z > depthAtSample) {
4208           return 0.0;
4209        }
4210    }
4211
4212
4213    if (normalSamples[4].a != vID && normalSamples[4].a != 0.0) {
4214        float depthAtSample = texture2D(d, uvSamples[4]).r + depthBias;
4215        if (gl_FragCoord.z > depthAtSample) {
4216           return 0.0;
4217        }
4218    }
4219
4220    if (normalSamples[5].a != vID && normalSamples[5].a != 0.0) {
4221        float depthAtSample = texture2D(d, uvSamples[5]).r + depthBias;
4222        if (gl_FragCoord.z > depthAtSample) {
4223           return 0.0;
4224        }
4225    }
4226
4227    if (normalSamples[6].a != vID && normalSamples[6].a != 0.0) {
4228        float depthAtSample = texture2D(d, uvSamples[6]).r + depthBias;
4229        if (gl_FragCoord.z > depthAtSample) {
4230           return 0.0;
4231        }
4232    }
4233
4234    if (normalSamples[7].a != vID && normalSamples[7].a != 0.0) {
4235        float depthAtSample = texture2D(d, uvSamples[7]).r + depthBias;
4236        if (gl_FragCoord.z > depthAtSample) {
4237           return 0.0;
4238        }
4239    }
4240
4241    if (normalSamples[8].a != vID && normalSamples[8].a != 0.0) {
4242        float depthAtSample = texture2D(d, uvSamples[8]).r + depthBias;
4243        if (gl_FragCoord.z > depthAtSample) {
4244           return 0.0;
4245        }
4246    }
4247
4248    vec3 sobel_edge_h = normalSamples[2].rgb + (2.0*normalSamples[5].rgb) + normalSamples[8].rgb - (normalSamples[0].rgb + (2.0*normalSamples[3].rgb) + normalSamples[6].rgb);
4249  	vec3 sobel_edge_v = normalSamples[0].rgb + (2.0*normalSamples[1].rgb) + normalSamples[2].rgb - (normalSamples[6].rgb + (2.0*normalSamples[7].rgb) + normalSamples[8].rgb);
4250
4251    float edgeNormal = sqrt(dot(sobel_edge_h, sobel_edge_h) + dot(sobel_edge_v, sobel_edge_v));
4252    return edgeNormal;
4253}
4254`),{outline:new Sj(`vec3 outline(vec3 outlineColor, vec3 contourColor, float outlineWidth, float contourWidth, float outlineThreshold, float contourThreshold, float outlineSmoothing, float contourFrequency, vec3 contourDirection, bool positionalLines, vec2 resolution, sampler2D normalMap, sampler2D depthMap, float pixelRatio, bool compensation, float mask, float alpha, out float calpha) {
4255                vec3 result = outlineColor;
4256                float resultAlpha = 0.0;
4257
4258                vec3 N = normalize(vWNormal);
4259                vec2 nuv = (gl_FragCoord.xy / resolution);
4260                float sobelSample = compensation ? sobelSample(normalMap, depthMap, nuv, resolution, outlineWidth / 2., pixelRatio) : sobelSample(normalMap, depthMap, nuv, resolution, outlineWidth, pixelRatio);
4261                resultAlpha = smoothstep(outlineThreshold - outlineSmoothing, outlineThreshold + outlineSmoothing, sobelSample);
4262
4263                //resultAlpha = 1.0;
4264                //result = vec3(sobelSample);
4265
4266                float t = 1.0 - contourThreshold;
4267                if(positionalLines) {
4268                    vec3 NDir = position * contourDirection;
4269                    float NT = NDir.x + NDir.y + NDir.z;
4270                    float f  = fract(NT * contourFrequency * 0.01);
4271                    float df = fwidth(NT * contourFrequency);
4272
4273                    float g = smoothstep(df * (contourWidth * 0.01), df * (contourWidth * 0.01 * 2.0), f);
4274                    if (g < 1.0 && resultAlpha == 0.0) {
4275                        result = contourColor;
4276                        resultAlpha = 1.0;
4277                    }
4278                 }
4279                 else {
4280                    vec3 NDir = N * contourDirection;
4281                    float NT = NDir.x + NDir.y + NDir.z;
4282                    float df = fwidth(NT * contourThreshold);
4283                    float f = sin(NT * 1.0 * contourFrequency);
4284                    float g = smoothstep(0.0, df * contourWidth, 1.0 - f);
4285
4286                    if (df > (t * 0.5) && g < 1.0 && resultAlpha == 0.0) {
4287                        result = contourColor;
4288                        resultAlpha = 1.0 - g;
4289                    }
4290                 }
4291
4292                 float lalpha = alpha * resultAlpha * mask;
4293                 calpha =  lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 );
4294                 accumAlpha += ( 1.0 - accumAlpha ) * lalpha;
4295				 
4296                 return result;
4297             }`,[eV])});var _O=class extends SL{constructor(e,t,i,r,s,a,o,l,h,c,d,u,p,f,m,g,v,y){super("v3"),this.nodeType="Pattern",this.style=e,this.projection=t,this.axis=i,this.blending=r,this.offset=s,this.colorA=a,this.colorB=o,this.frequency=l,this.size=h,this.variation=c,this.smoothness=d,this.zigzag=u,this.rotation=p,this.vertical=f,this.horizontal=m,this.sides=g,this.isMask=y,this.alpha=v,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(!e.isShader("fragment"))return console.warn("PatterNode is not compatible with "+e.shader+" shader."),e.format("vec3(0.0)",this.getType(e),t);{let i;switch(e.require("position"),e.require("uv"),e.requires.uv=[!0],e.require("normal"),e.requires.normal=!0,e.addFragmentVariable(this.calpha,"float"),this.style.value){case 0:default:i="circle";break;case 1:i="ring";break;case 2:i="polygon";break;case 3:i="xcross";break;case 4:i="diamond";break;case 5:i="checkerboard";break;case 6:i="line";break;case 7:i="wave"}let r=`g${this.uuid.toString().replace(/-/g,"")}`,s=new Sj(`float hashwithoutsine12(vec2 p)
4298				{
4299					vec3 p3 = fract(vec3(p.xyx) * .1031);
4300					p3 += dot(p3, p3.yzx + 33.33);
4301					return fract((p3.x + p3.y) * p3.z);
4302				}`),a=new Sj(`vec2 rotate_uv(in vec2 uv, float a, bool repeat) 
4303				{
4304					const float mid = 0.5;
4305					float radians = a * (PI / 180.0);
4306					vec2 rotated = vec2(
4307						cos(radians) * (uv.x - mid) + sin(radians) * (uv.y - mid) + mid,
4308						cos(radians) * (uv.y - mid) - sin(radians) * (uv.x - mid) + mid
4309					);
4310					return repeat ? fract(rotated): rotated;
4311				}`),o="";if(4===this.projection.value){let e=2===this.style.value?`${i}(uv0, frequency, size, variation, smoothness_remapped, zigzag, rotation, sides)`:`${i}(uv0, frequency, size, variation, smoothness_remapped, zigzag, rotation)`,t=2===this.style.value?`${i}(uv1, frequency, size, variation, smoothness_remapped, zigzag, rotation, sides)`:`${i}(uv1, frequency, size, variation, smoothness_remapped, zigzag, rotation)`,r=2===this.style.value?`${i}(uv2, frequency, size, variation, smoothness_remapped, zigzag, rotation, sides)`:`${i}(uv2, frequency, size, variation, smoothness_remapped, zigzag, rotation)`;o=`
4312				vec3 p = position;
4313				float factor = 0.0125;
4314				vec2 uv0 = fract(p.xy * factor);
4315				vec2 uv1 = fract(p.zy * factor);
4316				vec2 uv2 = fract(p.xz * factor);
4317				
4318				uv0 = rotate_uv(uv0 + offset, rotation, true);
4319				uv1 = rotate_uv(uv1 + offset, rotation, true);
4320				uv2 = rotate_uv(uv2 + offset, rotation, true);
4321	
4322				float d0 = ${e};
4323				float d1 = ${t};
4324				float d2 = ${r};
4325				
4326				// Range from 3 to 128 seems to be good
4327				float exponent = (1.0 - blending) * 125.0 + 3.0;
4328
4329				vec3 n = vObjectNormal;
4330				vec3 weights = abs(normalize(n));
4331				weights = pow(weights, vec3(exponent));
4332				weights /= dot(weights, vec3(1.0));
4333				d0 *= weights.z;
4334				d1 *= weights.x;
4335				d2 *= weights.y;
4336				float draw = d0 + d1 + d2;
4337	
4338				vec2 custom_uv = uv0 * weights.z + uv1 * weights.x + uv2 * weights.y;
4339				`}else{let e=2===this.style.value?`${i}(custom_uv, frequency, size, variation, smoothness_remapped, zigzag, rotation, sides)`:`${i}(custom_uv, frequency, size, variation, smoothness_remapped, zigzag, rotation)`,t="";0===this.axis.value?t=`float radius = length(p);
4340					float theta = atan(p.y, p.z);
4341					float phi = acos(p.x / radius);`:1===this.axis.value?t=`float radius = length(p);
4342					float theta = atan(p.x, p.z);
4343					float phi = acos(p.y / radius);`:(this.axis.value,t=`float radius = length(p);
4344					float theta = atan(p.y, p.x);
4345					float phi = acos(p.z / radius);`);let r="";switch(this.projection.value){case 0:r="custom_uv = vUv.st;";break;case 1:case 3:break;case 2:r=`
4346							vec3 p = position;
4347							${t}
4348							custom_uv = vec2(theta, phi);
4349							custom_uv /= PI;
4350							`}o=`
4351				vec2 custom_uv;
4352				${r}
4353	
4354				custom_uv += offset;
4355				custom_uv = fract(custom_uv);
4356				custom_uv = rotate_uv(custom_uv, rotation, true);
4357	
4358				float draw = ${e};
4359				`}let l=new Sj(`vec3 ${r}_pattern(vec3 normal, float blending, int style, vec2 offset, vec4 colorA, vec4 colorB, vec2 frequency, float size, float variation, float smoothness, float zigzag, float rotation, vec2 vertical, vec2 horizontal, int sides, bool isMask, float mask, float alpha, out float calpha) {
4360					const float TWO_PI = PI * 2.0;
4361					float smoothness_remapped = pow(smoothness, 5.0);	
4362
4363					${o}
4364
4365					// Construct final output color
4366					vec4 color = mix(colorA, colorB, draw);
4367					color.a = clamp(color.a, 0.0, 1.0);
4368
4369					// Apply cuts
4370					color.a *= 
4371						step(vertical.x, custom_uv.y) * 
4372						step(custom_uv.y, vertical.y);
4373					color.a *= 
4374						step(horizontal.x, abs(custom_uv.x)) * 
4375						step(abs(custom_uv.x), horizontal.y);
4376
4377					// Accumulate alpha 
4378					float lalpha = alpha * clamp(color.a, 0.0, 1.0) * mask;
4379					calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask));
4380					accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask));
4381
4382					return clamp(color, 0.0, 1.0).rgb;
4383				}`,[a,s,_O.DrawFunctions.circle,_O.DrawFunctions.ring,_O.DrawFunctions.polygon,_O.DrawFunctions.cross,_O.DrawFunctions.diamond,_O.DrawFunctions.checkerboard,_O.DrawFunctions.line,_O.DrawFunctions.wave]),h=e.include(l),c=[];return c.push("normal"),c.push(this.blending.build(e,"f")),c.push(this.style.build(e,"i")),c.push(this.offset.build(e,"v2")),c.push(this.colorA.build(e,"v4")),c.push(this.colorB.build(e,"v4")),c.push(this.frequency.build(e,"v2")),c.push(this.size.build(e,"f")),c.push(this.variation.build(e,"f")),c.push(this.smoothness.build(e,"f")),c.push(this.zigzag.build(e,"f")),c.push(this.rotation.build(e,"f")),c.push(this.vertical.build(e,"v2")),c.push(this.horizontal.build(e,"v2")),c.push(this.sides.build(e,"i")),c.push(this.isMask.build(e,"b")),c.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),c.push(this.alpha.build(e,"f")),c.push(this.calpha),e.format(h+"("+c.join(",")+")",this.getType(e),t)}}};_O.DrawFunctions=(ej=new Sj(`float hashwithoutsine12(vec2 p) {
4384				vec3 p3 = fract(vec3(p.xyx) * 0.1031);
4385				p3 += dot(p3, p3.yzx + 33.33);
4386				return fract((p3.x + p3.y) * p3.z);
4387			}`),eG=new Sj(`vec2 tile_and_center(in vec2 uv, in vec2 frequency, in float variation, in float zigzag, in float rotation) {
4388                // Create tiles in UV-space
4389                uv *= frequency;
4390
4391                // Integer coords
4392                vec2 i = floor(uv);
4393
4394                // Offset every other row based on zigzag param, then compute fractional coords
4395                float row_offset = mod(i.y, 2.0);
4396                uv.x += row_offset * zigzag;
4397                vec2 f = fract(uv);
4398
4399				// Rotate the tile itself:
4400				// const float mid = 0.5;
4401				// f = vec2(
4402				// 	cos(rotation) * (f.x - mid) + sin(rotation) * (f.y - mid) + mid,
4403				// 	cos(rotation) * (f.y - mid) - sin(rotation) * (f.x - mid) + mid
4404				// );
4405				// f = fract(f);
4406
4407                f = f * 2.0 - 1.0;
4408
4409				// Recompute integer coords after shifting - then, random value per tile 
4410				i = floor(uv);
4411				float rand = (hashwithoutsine12(i) * 5.0 + 1.0);
4412				float jitter = mix(1.0, rand, variation);
4413				f *= jitter;
4414
4415                return f;
4416            }`,[ej]),eH=new Sj(`float circle(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) {
4417                vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation);
4418                return smoothstep(
4419                    -smoothness, 
4420                     smoothness, 
4421                     length(f) - size
4422                );
4423            }`,[eG]),eW=new Sj(`float ring(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) {
4424                vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation);
4425
4426				float d = length(f);
4427                const float inner_width = 0.5;
4428
4429                float outer = smoothstep(-smoothness, smoothness, d - size);
4430                float inner = smoothstep(-smoothness, smoothness, d - size * inner_width);
4431				return outer + (1.0 - inner);   
4432            }`,[eG]),eq=new Sj(`float sdf_ngon(in vec2 p, in float r, in int n) {
4433                float an = (PI * 2.0) / float(n);
4434                float he = r * tan(0.5 * an);
4435                
4436                // Rotate to first sector
4437                p = -p.yx; 
4438                float bn = an * floor((atan(p.y, p.x) + 0.5 * an) / an);
4439                vec2  cs = vec2(cos(bn), sin(bn));
4440                p = mat2(cs.x, -cs.y, cs.y, cs.x)*p;
4441            
4442                // Side of polygon
4443                return length(p - vec2(r, clamp(p.y, -he, he))) * sign(p.x - r);
4444            }
4445            
4446            float polygon(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation, in int sides) {
4447                vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation);
4448                return smoothstep(-smoothness, smoothness, sdf_ngon(f, size, sides));
4449            }`,[eG]),eX=new Sj(`float sdf_cross(in vec2 p, in vec2 b, float r ) {
4450                p = abs(p); 
4451				p = (p.y > p.x) ? p.yx : p.xy;
4452                vec2  q = p - b;
4453                float k = max(q.y, q.x);
4454                vec2  w = (k > 0.0) ? q : vec2(b.y - p.x, -k);
4455                return sign(k) * length(max(w, 0.0)) + r;
4456            }
4457            
4458            // Avoid namespace conflicts 
4459            float xcross(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) {
4460                vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation);
4461                return smoothstep(-smoothness, smoothness, sdf_cross(f, vec2(size, size * 0.25), smoothness));
4462            }`,[eG]),eY=new Sj(`float ndot(vec2 a, vec2 b) { 
4463                return a.x*b.x - a.y*b.y; 
4464            }
4465            
4466            float sdf_diamond(in vec2 p, in vec2 b) {
4467                p = abs(p);
4468                float h = clamp(ndot(b - 2.0 * p, b) / dot(b, b), -1.0, 1.0);
4469                float d = length(p - 0.5 * b * vec2(1.0 - h, 1.0 + h));
4470                return d * sign(p.x * b.y + p.y * b.x - b.x * b.y);
4471            }
4472
4473            float diamond(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) {
4474                vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation);
4475	            return smoothstep(-smoothness, smoothness, sdf_diamond(f, vec2(size)));
4476            }`,[eG]),eQ=new Sj(`float checkerboard(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) {
4477                uv *= frequency;
4478                vec2 i = floor(uv);
4479
4480                float offset = mod(i.y, 2.0);
4481
4482                uv.x += offset + zigzag * offset;
4483                float x = floor(uv.x);
4484                
4485                return mod(x, 2.0);
4486            }`),eK=new Sj(`float line(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) {
4487                vec2 f = tile_and_center(uv, frequency, 0.0, zigzag, rotation);
4488				
4489				// Different approach for variation param here
4490				float row = floor(uv * frequency).y;
4491				float rand = hashwithoutsine12(vec2(row));
4492				float s = mix(size, size * rand, variation);
4493
4494				return smoothstep(
4495					s - smoothness, 
4496					s + smoothness, 
4497					abs(f.y)
4498				);
4499            }`,[eG]),{tileAndCenter:eG,circle:eH,ring:eW,polygon:eq,cross:eX,diamond:eY,checkerboard:eQ,line:eK,wave:new Sj(`// Uses bisection 
4500            float udf_cos(in vec2 p, in float a, in float b, in float c, in float d) {
4501                // Convert all data to a primitive cosine wave
4502                p = c * (p - vec2(d, a));
4503                
4504                const float TWO_PI = PI * 2.0;
4505
4506                // Reduce to principal half cycle
4507                p.x = mod(p.x, TWO_PI); 
4508                if (p.x > PI) {
4509                    p.x = TWO_PI - p.x;
4510                }
4511            
4512                // Find zero of derivative (minimize distance)
4513                float xa = 0.0;
4514                float xb = TWO_PI;
4515
4516                // 24 bit precision
4517                for (int i = 0; i < 24; i++) {
4518                    float x = 0.5 * (xa + xb);
4519                    float y = x - p.x + b * c * sin(x) * (p.y - b * c * cos(x));
4520                    if (y < 0.0) xa = x; 
4521                    else xb = x;
4522                }
4523                float x = 0.5 * (xa + xb);
4524                
4525                // Compute distance    
4526                vec2 q = vec2(x, b * c * cos(x));
4527                return length(p - q) / c;
4528            }
4529
4530            float wave(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) {
4531                float repeat = frequency.x;
4532                uv *= repeat;
4533                vec2 i = floor(uv);
4534                float row_offset = mod(i.y, 2.0);
4535                uv.x += row_offset * zigzag;
4536                vec2 f = vec2(uv.x, fract(uv.y));
4537
4538                // Generalized cosine: y(x) = a + b * cos(cx + d)
4539                const float amplitude = 0.125;
4540                float wave_frequency = frequency.y * 0.1;
4541                float distance_estimate = udf_cos(f, 0.50, amplitude, wave_frequency * (2.0 * PI), 0.0);
4542
4543				// Different approach for variation param here
4544				float rand = hashwithoutsine12(vec2(i.y));
4545				float s = mix(size, size * rand, variation);
4546
4547                return smoothstep(-smoothness, smoothness, distance_estimate - s * 0.5);
4548            }`)});var _R=class extends SL{constructor(e,t,i,r,s,a,o,l){super("v3"),this.nodeType="Rainbow",this.filmThickness=e,this.movement=t,this.wavelengths=i,this.noiseStrength=r,this.noiseScale=s,this.offset=a,this.isMask=l,this.alpha=o,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(e.require("vWorldViewDir"),e.require("worldNormal"),!e.isShader("fragment"))return console.warn("RainbowNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let i=e.include(_R.Nodes.rainbow),r=[];return r.push(this.filmThickness.build(e,"f")),r.push(this.movement.build(e,"f")),r.push(this.wavelengths.build(e,"v3")),r.push(this.noiseStrength.build(e,"f")),r.push(this.noiseScale.build(e,"f")),r.push(this.offset.build(e,"v3")),r.push(this.isMask.build(e,"b")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_R.Nodes=(eZ=new Sj(`vec3 attenuation(vec3 wavelengths, float filmThickness, float movement, float noiseStrength, float noiseScale, vec3 offset) {
4549				float f = 0.0;
4550				
4551				if (noiseStrength != 0.0) {
4552					vec3 st = position / noiseScale;
4553					float noise = simplexFast(1.6 * st + vec3(1.8, 1.5, 1.9) * simplexFast(st) + vec3(1.7, 9.2, 1.0));
4554					f = noise * noiseStrength;
4555				}
4556
4557				vec3 waves = wavelengths * vec3(1.0, 0.8, 0.6) + 1.0;
4558				float angle = dot(normalize(vWorldViewDir + (offset * -0.001)), normalize(vWNormal));
4559
4560				mediump vec3 color = cos((((filmThickness + f) / waves) * angle) + movement);
4561				return .5 + .5 * color;
4562			 }`,[_P.simplexFast]),{rainbow:new Sj(`vec3 rainbow(float filmThickness, float movement, vec3 wavelengths, float noiseStrength, float noiseScale, vec3 offset, bool isMask, float mask, float alpha, out float calpha) {
4563				mediump vec3 res = clamp(attenuation(wavelengths, filmThickness, movement, noiseStrength, noiseScale, offset), 0.0, 2.0);
4564
4565				float rainbowContribution = clamp(res.r + res.g + res.b, 0.0, 1.0);
4566
4567				float lalpha = alpha * rainbowContribution * mask;
4568				calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask));
4569				accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask));
4570
4571				return res;
4572			 }`,[eZ])});var _L=class extends SL{constructor(e,t,i,r,s,a,o,l,h,c){super("v3"),this.nodeType="Toon",this.positioning=e,this.colors=t,this.steps=i,this.source=r,this.isWorldSpace=s,this.noiseStrength=a,this.noiseScale=o,this.shadowColor=l,this.offset=h,this.alpha=c,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(e.require("worldNormal"),e.require("worldPosition"),!e.isShader("fragment"))return console.warn("ToonNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.define("COLORS_MAX",10),e.addFragmentVariable(this.calpha,"float");let i=e.include(_L.Nodes.toon),r=[];return r.push(this.positioning.build(e,"i")),r.push(this.colors.build(e,"v4[]")),r.push(this.steps.build(e,"f[]")),r.push(this.source.build(e,"v3")),r.push(this.isWorldSpace.build(e,"b")),r.push(this.noiseStrength.build(e,"f")),r.push(this.noiseScale.build(e,"f")),r.push(this.shadowColor.build(e,"v4")),r.push(this.offset.build(e,"v3")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_L.Nodes=(eJ=new Sj(`float rand(float n) {
4573				return fract(sin(n) * 43758.5453123);
4574			}`),e$=new Sj(`float hash1(float p) { 
4575				p = fract(p * 0.011); 
4576				p *= p + 7.5; 
4577				p *= p + p; 
4578				return fract(p); 
4579			}`),e0=new Sj(`float valueNoise(vec3 x) {
4580				const vec3 step = vec3(110, 241, 171);
4581			
4582				vec3 i = floor(x);
4583				vec3 f = fract(x);
4584			 
4585				// For performance, compute the base input to a 1D hash from the integer part of the argument and the 
4586				// incremental change to the 1D based on the 3D -> 1D wrapping
4587				float n = dot(i, step);
4588			
4589				vec3 u = f * f * (3.0 - 2.0 * f);
4590				return mix(mix(mix( hash1(n + dot(step, vec3(0, 0, 0))), hash1(n + dot(step, vec3(1, 0, 0))), u.x),
4591							   mix( hash1(n + dot(step, vec3(0, 1, 0))), hash1(n + dot(step, vec3(1, 1, 0))), u.x), u.y),
4592						   mix(mix( hash1(n + dot(step, vec3(0, 0, 1))), hash1(n + dot(step, vec3(1, 0, 1))), u.x),
4593							   mix( hash1(n + dot(step, vec3(0, 1, 1))), hash1(n + dot(step, vec3(1, 1, 1))), u.x), u.y), u.z);
4594			}`,[e$]),e1=new Sj(`vec3 hash3(vec3 x) {
4595				x = vec3(dot(x,vec3(127.1, 311.7, 74.7)),
4596						 dot(x,vec3(269.5, 183.3, 246.1)),
4597						 dot(x,vec3(113.5, 271.9, 124.6)));
4598			
4599				return fract(sin(x)*43758.5453123);
4600			}`),e2=new Sj(`vec3 voronoiNoise(in vec3 x)
4601			{
4602				vec3 p = floor(x);
4603				vec3 f = fract(x);
4604
4605				float id = 0.0;
4606				vec2 res = vec2(100.0);
4607
4608				for(int k=-1; k<=1; k++)
4609				for(int j=-1; j<=1; j++)
4610				for(int i=-1; i<=1; i++)
4611				{
4612					vec3 b = vec3(float(i), float(j), float(k));
4613
4614					// Comment out the "+ hash(p + b);" part below to get "square" cells
4615					vec3 r = vec3(b) - f + hash3(p + b);
4616					float d = dot(r, r);
4617
4618					if (d < res.x)
4619					{
4620						id = dot(p + b, vec3(1.0, 57.0, 113.0));
4621						res = vec2(d, res.x);			
4622					}
4623					else if (d < res.y)
4624					{
4625						res.y = d;
4626					}
4627				}
4628
4629				return vec3(sqrt(res), abs(id));
4630			}
4631			`,[e1]),{toon:new Sj(`vec3 toon(int positioning, vec4 colors[COLORS_MAX], float steps[COLORS_MAX], vec3 source, bool isWorldSpace, float noiseStrength, float noiseScale, vec4 shadowColor, vec3 offset, float mask, float alpha, out float calpha) {
4632				float t = 0.0;
4633				float shadow = 1.0;
4634
4635				if (positioning == 0) {
4636
4637					// Can't do this mode if lighting is "none"
4638					#if (defined(PHONG) || defined(LAMBERT) || defined(STANDARD))
4639
4640						// Algorithm from Chapter 10 of Graphics Shaders
4641						const vec3 weights = vec3(0.2125, 0.7154, 0.0721);
4642						vec3 lpos;
4643						vec3 l;
4644						float dproduct;
4645
4646						#if (NUM_POINT_LIGHTS > 0)
4647
4648							#if defined(USE_SHADOWMAP) && (NUM_POINT_LIGHT_SHADOWS > 0)
4649								PointLightShadow pointLightShadow;
4650							#endif 
4651
4652							#pragma unroll_loop_start
4653							for (int i = 0; i < NUM_POINT_LIGHTS; i++) {
4654								// Light positions are in view-space for some reason?
4655								lpos = (inverse(viewMatrix) * vec4(pointLights[UNROLLED_LOOP_INDEX].position, 1.0
4655)).xyz;
4656								l = normalize(lpos - worldPosition);
4657								
4658								dproduct = dot(l, normalize(worldNormal)) * 0.5 + 0.5;
4659								
4660								// TODO: we want to use "intensity" but it isn't available in the shader code
4661								//dproduct += dot(pointLights[UNROLLED_LOOP_INDEX].color, weights);
4662
4663								t = max(t, dproduct);
4664
4665								// Accumulate shadow contribution
4666								#if defined(USE_SHADOWMAP) && (UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS)
4667									pointLightShadow = pointLightShadows[UNROLLED_LOOP_INDEX];
4668									shadow *= getPointShadow( 
4669											pointShadowMap[UNROLLED_LOOP_INDEX], 
4670											pointLightShadow.shadowMapSize, 
4671											pointLightShadow.shadowBias, 
4672											pointLightShadow.shadowRadius,
4673											vPointShadowCoord[UNROLLED_LOOP_INDEX], 
4674											pointLightShadow.shadowCameraNear, 
4675											pointLightShadow.shadowCameraFar);
4676								#endif
4677							}
4678							#pragma unroll_loop_end
4679
4680						#endif
4681
4682						#if NUM_DIR_LIGHTS > 0 
4683							
4684							#if defined(USE_SHADOWMAP) && (NUM_DIR_LIGHT_SHADOWS > 0)
4685								DirectionalLightShadow directionalLightShadow;
4686							#endif 
4687
4688							#pragma unroll_loop_start
4689							for (int i = 0; i < NUM_DIR_LIGHTS; i++) {
4690								// Use the direction vector for directional lights instead
4691								l = (inverse(viewMatrix) * vec4(directionalLights[UNROLLED_LOOP_INDEX].direction, 0.0)).xyz;
4692		
4693								dproduct = dot(l, normalize(worldNormal)) * 0.5 + 0.5;
4694								t = max(t, dproduct);
4695
4696								// Accumulate shadow contribution
4697								#if defined(USE_SHADOWMAP) && (UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS)
4698									directionalLightShadow = directionalLightShadows[UNROLLED_LOOP_INDEX];
4699									shadow *= getShadow( 
4700										UNROLLED_LOOP_INDEX,
4701										directionalShadowMap[UNROLLED_LOOP_INDEX], 
4702										directionalLightShadow.shadowMapSize, 
4703										directionalLightShadow.shadowBias, 
4704										directionalLightShadow.shadowRadius, 
4705										vDirectionalShadowCoord[UNROLLED_LOOP_INDEX]);
4706								#endif
4707							}
4708							#pragma unroll_loop_end
4709
4710						#endif
4711
4712						#if NUM_SPOT_LIGHTS > 0 
4713							
4714							#if defined(USE_SHADOWMAP) && (NUM_SPOT_LIGHT_SHADOWS > 0)
4715								SpotLightShadow spotLightShadow;
4716							#endif 
4717
4718							#pragma unroll_loop_start
4719							for (int i = 0; i < NUM_SPOT_LIGHTS; i++) {
4720								lpos = (inverse(viewMatrix) * vec4(spotLights[UNROLLED_LOOP_INDEX].position, 1.0)).xyz;
4721								l = normalize(lpos - worldPosition);
4722								
4723								dproduct = dot(l, normalize(worldNormal)) * 0.5 + 0.5;
4724								t = max(t, dproduct);
4725
4726								// Accumulate shadow contribution
4727								#if defined(USE_SHADOWMAP) && (UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS)
4728									spotLightShadow = spotLightShadows[UNROLLED_LOOP_INDEX];
4729									shadow *= getShadow(
4730										UNROLLED_LOOP_INDEX,
4731										spotShadowMap[UNROLLED_LOOP_INDEX], 
4732										spotLightShadow.shadowMapSize, 
4733										spotLightShadow.shadowBias, 
4734										spotLightShadow.shadowRadius, 
4735										vSpotLightCoord[UNROLLED_LOOP_INDEX]);
4736								#endif
4737							}
4738							#pragma unroll_loop_end
4739
4740						#endif
4741
4742						t = clamp(t, 0.0, 1.0);
4743				
4744					#endif
4745
4746				} else if (positioning == 1) {
4747					
4748					vec3 origin = mix(position, worldPosition, float(isWorldSpace));
4749					vec3 direction = normalize(source - origin);
4750					t = dot(direction, normalize(worldNormal)) * 0.5 + 0.5;	
4751
4752				} else {
4753
4754					vec3 origin = worldPosition;
4755					vec3 source = cameraPosition - offset;
4756					vec3 direction = normalize(source - origin);
4757					t = dot(direction, normalize(worldNormal)) * 0.5 + 0.5;	
4758					
4759				}
4760
4761				if (noiseStrength > 0.0) {
4762					// Distort with noise
4763					vec3 st = position / noiseScale;
4764					
4765					// Voronoi "smooth" noise
4766					float noise = 1.0 - voronoiNoise(st).x;
4767
4768					// Voronoi cellular noise
4769					//float noise = 1.0 - rand(voronoiNoise(st).z);
4770
4771					// Position warp noise
4772					// vec3 offset = vec3(
4773					// 	simplexFast(st),
4774					// 	simplexFast(st + vec3(111.1, 143.89, 217.19)),
4775					// 	simplexFast(st + vec3(171.1, 247.89, 117.23))
4776					// );
4777					// st += offset;
4778					// float noise = valueNoise(st);
4779
4780					t += noise * noiseStrength;
4781				}
4782
4783				t = clamp(t, 0.0, 1.0);
4784
4785				// Compute ramp color
4786				float p;
4787				vec4 color = colors[0];
4788				for (int i = 1; i < COLORS_MAX; i++) {
4789					p = clamp((t - steps[i-1]) / (steps[i] - steps[i-1]), 0.0, 1.0);
4790					color = mix(color, colors[i], smoothstep(0.0, 1.0, p));
4791				}
4792
4793				// Incorporate custom shadow color
4794				if (positioning == 0) {
4795
4796					vec3 blendedShadow = mix(color.rgb, shadowColor.rgb, shadowColor.a);
4797					color.rgb = mix(blendedShadow, color.rgb, shadow);
4798				
4799				}
4800
4801				// Accumulate alpha as usual
4802				float lalpha = alpha * color.a * mask;
4803				calpha =  lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0);
4804				accumAlpha += (1.0 - accumAlpha) * lalpha;
4805
4806				return color.xyz;
4807
4808            }`,[_P.simplexFast,eJ,e0,e2])});var _B={textureBicubic:new Sj(`float w0( float a ) {
4809            return ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );
4810        }
4811    
4812        float w1( float a ) {
4813            return ( 1.0 / 6.0 ) * ( a *  a * ( 3.0 * a - 6.0 ) + 4.0 );
4814        }
4815    
4816        float w2( float a ){
4817            return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );
4818        }
4819    
4820        float w3( float a ) {
4821            return ( 1.0 / 6.0 ) * ( a * a * a );
4822        }
4823    
4824        // g0 and g1 are the two amplitude functions
4825        float g0( float a ) {
4826            return w0( a ) + w1( a );
4827        }
4828    
4829        float g1( float a ) {
4830            return w2( a ) + w3( a );
4831        }
4832    
4833        // h0 and h1 are the two offset functions
4834        float h0( float a ) {
4835            return - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );
4836        }
4837    
4838        float h1( float a ) {
4839            return 1.0 + w3( a ) / ( w2( a ) + w3( a ) );
4840        }
4841    
4842        vec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {
4843            uv = uv * texelSize.zw + 0.5;
4844    
4845            vec2 iuv = floor( uv );
4846            vec2 fuv = fract( uv );
4847    
4848            float g0x = g0( fuv.x );
4849            float g1x = g1( fuv.x );
4850            float h0x = h0( fuv.x );
4851            float h1x = h1( fuv.x );
4852            float h0y = h0( fuv.y );
4853            float h1y = h1( fuv.y );
4854    
4855            vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;
4856            vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;
4857            vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;
4858            vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;
4859    
4860            return g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) + 
4861                   g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );
4862        }
4863
4864        vec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {
4865            vec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );
4866            vec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );
4867            vec2 fLodSizeInv = 1.0 / fLodSize;
4868            vec2 cLodSizeInv = 1.0 / cLodSize;
4869            vec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );
4870            vec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );
4871            return mix( fSample, cSample, fract( lod ) );
4872        }`)},_z=class extends SL{constructor(e,t,i,r,s,a,o,l){super("v3"),this.nodeType="Transmission",this.thickness=e,this.ior=t,this.roughness=i,this.transmissionSamplerSize=r,this.transmissionSamplerMap=s,this.transmissionDepthMap=a,this.aspectRatio=o,this.alpha=l,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(e.extensions.shaderTextureLOD=!0,e.extensions.derivatives=!0,!e.isShader("fragment"))return console.warn("TransmissionNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.define("NUM_SAMPLES",6),e.define("BLUR_SLOD",Math.pow(2,_k.transmissionLod.value)),e.require("worldPosition"),e.requires.worldNormal=!0,e.requires.modelMatrix=!0,e.requires.projectionMatrix=!0,e.addFragmentVariable(this.calpha,"float");let i=e.include(_z.Nodes.transmission),r=[];return r.push(this.thickness.build(e,"f")),r.push(this.ior.build(e,"f")),r.push(this.roughness.build(e,"f")),r.push(this.transmissionSamplerSize.build(e,"v2")),r.push(this.transmissionSamplerMap.getTexture(e,"t")),r.push(this.transmissionDepthMap.getTexture(e,"t")),r.push(this.aspectRatio.build(e,"v2")),r.push("normal"),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_z.Nodes=(e3=new Sj(`vec3 blur(sampler2D sp, vec2 U, vec2 scale, float lod, sampler2D dm, vec2 unrefractedU, vec2 aspectRatio) {
4873                // Slightly modified version of this:
4874                // https://www.shadertoy.com/view/ltScRG
4875
4876				// Special case for blur == 0.0
4877				if (lod == 0.0) {
4878					#ifdef TEXTURE_LOD_EXT
4879					return texture2DLodEXT( sp, U, 0.0).rgb;
4880					#else
4881					return textureLod( sp, U, 0.0).rgb;
4882					#endif
4883				}
4884				
4885				vec2 texelSize = vec2(1.0) / resolution;
4886                vec2 halton = haltonSequence[frameIndex];
4887                float temporalOffset = getNoiseInterleavedGradient(gl_FragCoord.xy + halton);
4888                float temporalAngle  = temporalOffset * PI2;
4889				vec3 res = vec3(0.0);
4890                vec2 uv = vec2(0.0);
4891                vec2 offset = vec2(0.0);
4892                vec2 vogelSample = vec2(0.0);
4893                for (int i = 0; i < NUM_SAMPLES; i++) {
4894                    vogelSample =  vogelDiskSample(i, NUM_SAMPLES, temporalAngle) * texelSize;
4895                    offset = vogelSample * scale * (lod * 10.0); // TODO: used to be hardcoded to 20
4896                    uv = U + offset;
4897                    float opaqueDepth = unpackRGBAToDepth(textureLod(dm, uv, lod));
4898                    if (opaqueDepth != 0.0 && opaqueDepth < gl_FragCoord.z) {
4899                        uv = unrefractedU;
4900                        lod = lod > 4.0 ? lod : lod / 2.0;
4901                    }
4902                    res += textureLod(sp, uv, lod).rgb;
4903                }
4904                return res / float(NUM_SAMPLES);
4905            }`),e4=new Sj(`vec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix ) {
4906		        // Direction of refracted light.
4907		        vec3 refractionVector = refract( -v,  n, 1.0 / ior );
4908		        
4909				// Compute rotation-independant scaling of the model matrix.
4910		        vec3 modelScale;
4911		        modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );
4912		        modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );
4913		        modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );
4914
4915		        // The thickness is specified in local space
4916		        return normalize( refractionVector ) * thickness * modelScale;
4917	        }`),e5=new Sj(`float applyIorToRoughness( float roughness, float ior ) {
4918				// Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and
4919				// an IOR of 1.5 results in the default amount of microfacet refraction.
4920				return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );
4921			}`),e6=new Sj(`vec3 getTransmissionSample( vec2 fragCoord, float roughness, float ior, vec2 transmissionSamplerSize, sampler2D transmissionSamplerMap, sampler2D transmissionDepthMap, vec2 unrefractedCoords, vec2 aspectRatio) {
4922				// Threejs exports do not pass a depth map to this shader, so we have to fallback to the "Threejs method of blurring" - see
4923				// also the code in convertTransmission.ts, which runs during export
4924				#ifdef IS_THREEJS_EXPORT
4925					float lod = log2(transmissionSamplerSize.x) * applyIorToRoughness(roughness / 5.0, ior);
4926					return textureBicubic(transmissionSamplerMap, fragCoord.xy, lod).rgb;
4927				#else
4928					float framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );
4929					float lod = applyIorToRoughness(roughness, ior);
4930					return blur(transmissionSamplerMap, fragCoord, vec2(lod), min(framebufferLod / 5.5, 8.5), transmissionDepthMap, unrefractedCoords, aspectRatio);
4931				#endif
4932			}`,[_B.textureBicubic,e5,e3]),e8=new Sj(`vec3 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness, vec2 transmissionSamplerSize, sampler2D transmissionSamplerMap, sampler2D transmissionDepthMap, vec2 aspectRatio ) {
4933				vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );
4934				vec3 refractedRayExit = position + transmissionRay;
4935
4936				// Project refracted vector on the framebuffer, while mapping to normalized device coordinates.
4937				vec4 ndcPos = projMatrix * viewMatrix *  vec4( refractedRayExit, 1.0 );
4938				vec2 refractionCoords = ndcPos.xy / ndcPos.w;
4939				refractionCoords += 1.0;
4940				refractionCoords /= 2.0;
4941
4942				vec4 ndcPosUnrefracted = projMatrix * viewMatrix * vec4(position, 1.0 );
4943				vec2 unrefractedCoords = ndcPosUnrefracted.xy / ndcPosUnrefracted.w;
4944				unrefractedCoords += 1.0;
4945				unrefractedCoords /= 2.0;
4946
4947				// Sample framebuffer to get pixel the refracted ray hits.
4948				return getTransmissionSample( refractionCoords, roughness, ior, transmissionSamplerSize, transmissionSamplerMap, transmissionDepthMap, unrefractedCoords, aspectRatio );
4949    		}`,[e6,e4]),{transmission:new Sj(`vec3 transmission(float thickness, float ior, float roughness, vec2 transmissionSamplerSize, sampler2D transmissionSamplerMap, sampler2D transmissionDepthMap, vec2 aspectRatio, vec3 normal, float mask, float alpha, out float calpha) {
4950                vec3 v = vec3(0.);
4951                if (isOrthographic) {
4952                    v = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );
4953                } else {
4954                    v = normalize(vWPosition - cameraPosition);
4955                }
4956                vec3 transmission = getIBLVolumeRefraction(vWNormal, -v, roughness,  vWPosition, modelMatrix, viewMatrix, projectionMatrix, ior, thickness, transmissionSamplerSize, transmissionSamplerMap, transmissionDepthMap, aspectRatio );
4957                
4958				float lalpha = alpha * mask;
4959				calpha =  lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 );
4960				accumAlpha += ( 1.0 - accumAlpha ) * alpha;
4961
4962				return transmission;
4963            }`,[e8])});var _F=((e9=_F||{}).NOISE="noise",e9.MAP="map",e9),_N=class extends SL{constructor(e,t,i,r,s,a,o,l,h,c,d){super("v3"),this.displacementTypeIndex=new _c(0),this.nodeType="VertexDisplacement",this.intensity=e,this.movementOrTexture=t,"map"===Object.values(_F)[this.displacementTypeIndex.value]&&(this.mat=new _g(this.movementOrTexture.value.matrix)),this.cropOrOffset=i,this.scale=c,this.noiseFunctionIndex=d,this.voronoiStyle=r,this.smoothness=s,this.seed=a,this.highCut=o,this.lowCut=l,this.quality=h}generate(e,t){if(!e.isShader("vertex"))return console.warn("VertexDisplacementNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),t);{e.define("USE_LAYER_DISPLACE");let i,r=[];switch(r.push("displaced_position"),r.push("displaced_normal"),Object.values(_F)[this.displacementTypeIndex.value]){case"map":i=e.include(_N.Nodes.map),r.push(this.movementOrTexture.getTexture(e,"t")),r.push("uv"),r.push(this.cropOrOffset.build(e,"f")),this.mat&&r.push(this.mat.build(e,"mat3"));break;case"noise":{let t=["simplexPrecise","simplexFractal","simplexAshima","fbm","perlin","voronoi"][this.noiseFunctionIndex.value],s=new Sj(`vec3 orthogonal(vec3 v) {
4964							return normalize(abs(v.x) > abs(v.z) ? vec3(-v.y, v.x, 0.0) : vec3(0.0, -v.z, v.y));
4965						}`),a="voronoi"==t?`
4966					float v = ${t}((p + offset) * scale * 0.001 + neighbour_offset + (movement * 0.1), voronoiStyle, smoothness, seed, quality);
4967					v = remap(v, lowCut, highCut, 0.0, 1.0);
4968					v = smax(v, 0.0, smoothness * 0.25);
4969					v = smin(v, 1.0, smoothness * 0.25);
4970
4971					return p + n * v * intensity;
4972					`:`
4973					return p + n * ${t}((p + offset) * scale * 0.001 + neighbour_offset + (movement * 0.1)) * intensity;
4974					`,o=new Sj(`vec3 distorted(vec3 p, vec3 n, float scale, float intensity, vec3 offset, float neighbour_offset, float movement, int voronoiStyle, float smoothness, float seed, float highCut, float lowCut, int quality) {
4975							${a}
4976						}`,[_P.simplexPrecise,_P.simplexFractal,_P.simplexAshima,_P.fbm,_P.perlin,_P.voronoi]),l=new Sj(`vec3 vertexDisplacementNoise(vec3 position, vec3 normal, float scale, vec3 offset, float movement, int voronoiStyle, float smoothness, float seed, float highCut, float lowCut, int quality, float intensity, out vec3 displaced_normal) {
4977							vec3 displaced_position = distorted(position, normal, scale, intensity, offset, neighbor_offset, movement, voronoiStyle, smoothness, seed, highCut, lowCut, quality);
4978							vec3 tangent1 = orthogonal(normal);
4979							vec3 tangent2 = normalize(cross(normal, tangent1));
4980
4981                            // TODO(Max): The distance to the neighbors was originally scaled by 0.1.
4982                            // This caused some small oval/circular visual artifacts in the lighting.
4983                            // For now, simply using neighbors further away betters the problem,
4984                            // but we should figure out the underlying cause when we have some time.
4985                            // Maybe its related to how we calculate the tangent and bitangent?
4986							vec3 nearby1 = position + tangent1;
4987							vec3 nearby2 = position + tangent2;
4988							vec3 distorted1 = distorted(nearby1, normal, scale, intensity, offset, neighbor_offset, movement, voronoiStyle, smoothness, seed, highCut, lowCut, quality);
4989							vec3 distorted2 = distorted(nearby2, normal, scale, intensity, offset, neighbor_offset, movement, voronoiStyle, smoothness, seed, highCut, lowCut, quality);
4990							displaced_normal = normalize(cross(distorted1 - displaced_position, distorted2 - displaced_position));
4991							return displaced_position;
4992						}`,[o,s]);i=e.include(l),r.push(this.scale.build(e,"f")),r.push(this.cropOrOffset.build(e,"v3")),r.push(this.movementOrTexture.build(e,"f")),r.push(this.voronoiStyle.build(e,"i")),r.push(this.smoothness.build(e,"f")),r.push(this.seed.build(e,"f")),r.push(this.highCut.build(e,"f")),r.push(this.lowCut.build(e,"f")),r.push(this.qual
4992ity.build(e,"i"))}}return r.push(this.intensity.build(e,"f")),r.push("displaced_normal"),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};_N.Nodes=(e7=new Sj(`vec3 orthogonal(vec3 v) {
4993				return normalize(abs(v.x) > abs(v.z) ? vec3(-v.y, v.x, 0.0) : vec3(0.0, -v.z, v.y));
4994			}`),te=new Sj(`float displacementMapTexture(sampler2D tex, float crop, vec2 uv, mat3 mat, vec2 offset) {
4995				vec2 uvs = (mat * vec3(uv * 2.0 - 1.0, 1.0) / 2.0 + 0.5).xy + offset;
4996				vec4 tmp = texture2D(tex, uvs);
4997				vec3 col = tmp.rgb;
4998				if (crop > 0.5) {
4999					if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 )  {
5000						return 0.0;
5001					}
5002				}
5003				return col.r;
5004			}`),{map:new Sj(`vec3 vertexDisplacementMap(vec3 position, vec3 normal, sampler2D tex, vec2 uv, float crop, mat3 mat, float intensity, out vec3 displaced_normal) {
5005				vec3 displaced_position = position + normal * displacementMapTexture(tex, crop, uv, mat, vec2(0.0)) * intensity;
5006				vec3 tangent1 = normalize(orthogonal(normal));
5007				vec3 tangent2 = normalize(cross(normal, tangent1));
5008				vec3 nearby1 = position + tangent1 * 0.1;
5009				vec3 nearby2 = position + tangent2 * 0.1;
5010				vec3 distorted1 = nearby1 + normal * displacementMapTexture(tex, crop, uv, mat, vec2(neighbor_offset)) * intensity;
5011				vec3 distorted2 = nearby2 + normal * displacementMapTexture(tex, crop, uv, mat, vec2(neighbor_offset)) * intensity;
5012				displaced_normal = normalize(cross(distorted1 - displaced_position, distorted2 - displaced_position));
5013				return displaced_position;
5014			}`,[e7,te])});var _k={normalRenderTarget:new SZ,normalRenderTargetDepth:new SZ,transmissionRenderTarget:new SZ,aspectRatio:new Sz,transmissionSize:new Sz(2048,2048),transmissionRenderTargetDepth:new SZ,aoRenderTarget:new SZ,aoEnabled:new _d,pixelRatioNode:new SJ(1),resolution:new Sz,penumbraSize:new _u(5,.5),frameIndex:new _c(0),transmissionLod:new _c(2)};for(let e of Object.values(_k))e.isRenderGlobal=!0;var _U,_V,_j,_G,_H,_W={skiaWasmUrl:"https://unpkg.com/@splinetool/[email protected]/build/ui.wasm"},_q=class extends SI{constructor(){super("basic"),this.nodeType="Basic",this.color=new _h(5526619),this.shadingAlpha=new SJ(1),this.shadingBlend=new _c(0),this.previousModelViewMatrix=new _v,this.previouseProjectionMatrix=new _v}get category(){return"phong"}generate(e){let t;if(e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({resolution:_k.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(r2.merge([su.fog])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>"].join(`
5015`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",`
5016				#include <skinbase_vertex>
5017				#include <skinnormal_vertex>
5018				#if !defined( USE_LAYER_DISPLACE )
5019					#include <defaultnormal_vertex>
5020				#endif
5021
5022				vec3 displaced_position = position;
5023				vec3 displaced_normal = normal;
5024
5025				#if defined( USE_LAYER_DISPLACE )
5026					vec3 transformed;
5027					vec3 transformedNormal;
5028				#endif
5029				`,"#include <normal_vertex>",`
5030				#if !defined( USE_LAYER_DISPLACE )
5031					#include <begin_vertex>
5032				#endif /* !USE_LAYER_DISPLACE */
5033				`];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5033":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED","	vNormal = transformedNormal;","#endif"),r.push("#include <project_vertex>","#include <fog_vertex>","#include <clipping_planes_vertex>","	vViewPosition = - mvPosition.xyz;","#include <worldpos_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(`
5034`)}else{void 0===this.color&&(this.color=new _h(5526619)),this.color.analyze(e,{slot:"color"}),this.alpha&&this.alpha.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"});let i=this.color.flow(e,"c",{slot:"color"}),r=this.alpha?this.alpha.flow(e,"f"):void 0,s=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0,a=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0;e.requires.transparent=void 0!==r,e.addParsCode(["varying vec3 vWPosition;","#include <fog_pars_fragment>","#include <dithering_pars_fragment>","varying vec3 vViewPosition;","#include <normal_pars_fragment>"].join(`
5035`));let o=["#include <normal_fragment_begin>",i.code];r&&o.push(r.code,"#ifdef ALPHATEST"," if ( "+r.result+" <= ALPHATEST ) discard;","#endif"),a?o.push(a.code,`vec3 outgoingLight = ${i.result};`,`vec3 finalColor = spe_blend(outgoingLight, ${a.result}, 1.0, SPE_BLENDING_NORMAL);`):o.push(`vec3 finalColor = ${i.result};`);let l="1.0";this.mask&&(this.mask.analyze(e),l=`luminance(${this.mask.flow(e,"v3").result})`),r?o.push(`gl_FragColor = vec4( finalColor, accumAlpha * ${r.result} * ${l} );`):o.push("gl_FragColor = vec4("+i.result+", 1.0 );"),s&&o.push(`gl_FragColor.a *= ${s.result};`),o.push("#include <fog_fragment>","#include <dithering_fragment>"),t=o.join(`
5036`)}return t}},_X=class extends SI{constructor(){super("lambert"),this.nodeType="Lambert",this.color=new _h(5526619),this.emissive=new _h(0),this.emissiveIntensity=new SJ(1),this.previousModelViewMatrix=new _v,this.previouseProjectionMatrix=new _v,this.shadingAlpha=new SJ(1),this.shadingBlend=new _c(0),this.occlusion=new _d(!0)}get category(){return"lambert"}build(e){let t;if(e.define("LAMBERT"),e.requires.lights=!0,e.extensions.derivatives=!0,e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({resolution:_k.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(r2.merge([su.fog,su.lights])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","varying vec3 vLightFront;","varying vec3 vIndirectFront;","#ifndef DOUBLE_SIDED","   #define DOUBLE_SIDED","#endif","#ifdef DOUBLE_SIDED","	varying vec3 vLightBack;","	varying vec3 vIndirectBack;","#endif","#include <bsdfs>","#include <lights_pars_begin>","#include <color_pars_vertex>","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(`
5037`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",`
5038				#include <skinbase_vertex>
5039				#include <skinnormal_vertex>
5040				#ifndef USE_LAYER_DISPLACE
5041					#include <defaultnormal_vertex>
5042				#endif
5043
5044				vec3 displaced_position = position;
5045				vec3 displaced_normal = objectNormal;
5046
5047				#ifdef USE_LAYER_DISPLACE
5048					vec3 transformed;
5049					vec3 transformedNormal;
5050				#endif
5051				`,"#include <normal_vertex>",`
5052				#ifndef USE_LAYER_DISPLACE
5053					#include <begin_vertex>
5054				#endif
5055				`];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5055":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED","    vNormal = transformedNormal;","#endif"),r.push("	#include <project_vertex>","	#include <clipping_planes_vertex>","	vViewPosition = - mvPosition.xyz;","	#include <worldpos_vertex>",`
5056					vec3 diffuse = vec3( 1.0 );
5057					GeometricContext geometry;
5058					geometry.position = mvPosition.xyz;
5059					geometry.normal = normalize( transformedNormal );
5060					geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );
5061				`),r.push(`
5062					GeometricContext backGeometry;
5063					backGeometry.position = geometry.position;
5064					backGeometry.normal = -geometry.normal;
5065					backGeometry.viewDir = geometry.viewDir;
5066					vLightFront = vec3( 0.0 );
5067					vIndirectFront = vec3( 0.0 );
5068					#ifdef DOUBLE_SIDED
5069						vLightBack = vec3( 0.0 );
5070						vIndirectBack = vec3( 0.0 );
5071					#endif
5072					IncidentLight directLight;
5073					float dotNL;
5074					vec3 directLightColor_Diffuse;
5075					vIndirectFront += getAmbientLightIrradiance( ambientLightColor );
5076					vIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );
5077					#ifdef DOUBLE_SIDED
5078						vIndirectBack += getAmbientLightIrradiance( ambientLightColor );
5079						vIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );
5080					#endif
5081					#if NUM_POINT_LIGHTS > 0
5082						#pragma unroll_loop_start
5083						for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {
5084							getPointLightInfo( pointLights[ i ], geometry, directLight );
5085							dotNL = dot( geometry.normal, directLight.direction );
5086							directLightColor_Diffuse = directLight.color;
5087							vLightFront += saturate( dotNL ) * directLightColor_Diffuse;
5088							#ifdef DOUBLE_SIDED
5089								vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;
5090							#endif
5091						}
5092						#pragma unroll_loop_end
5093					#endif
5094					#if NUM_SPOT_LIGHTS > 0
5095						#pragma unroll_loop_start
5096						for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {
5097							getSpotLightInfo( spotLights[ i ], geometry, directLight );
5098							dotNL = dot( geometry.normal, directLight.direction );
5099							directLightColor_Diffuse = directLight.color;
5100							vLightFront += saturate( dotNL ) * directLightColor_Diffuse;
5101							#ifdef DOUBLE_SIDED
5102								vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;
5103							#endif
5104						}
5105						#pragma unroll_loop_end
5106					#endif
5107					#if NUM_DIR_LIGHTS > 0
5108						#pragma unroll_loop_start
5109						for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {
5110							getDirectionalLightInfo( directionalLights[ i ], geometry, directLight );
5111							dotNL = dot( geometry.normal, directLight.direction );
5112							directLightColor_Diffuse = directLight.color;
5113							vLightFront += saturate( dotNL ) * directLightColor_Diffuse;
5114							#ifdef DOUBLE_SIDED
5115								vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;
5116							#endif
5117						}
5118						#pragma unroll_loop_end
5119					#endif
5120					#if NUM_HEMI_LIGHTS > 0
5121						#pragma unroll_loop_start
5122						for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {
5123							vIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );
5124							#ifdef DOUBLE_SIDED
5125								vIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );
5126							#endif
5127						}
5128						#pragma unroll_loop_end
5129					#endif
5130				`,"	#include <shadowmap_vertex>","	#include <fog_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(`
5131`)}else{e.mergeUniform({penumbraSize:_k.penumbraSize}),e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({aoMap:_k.aoRenderTarget}),e.mergeUniform({aoEnabled:_k.aoEnabled}),void 0===this.color&&(this.color=new _h(5526619)),this.color.analyze(e,{slot:"color"}),this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e);let i=this.color.flow(e,"c",{slot:"color"}),r=this.emissive.flow(e,"c",{slot:"emissive"}),s=this.emissiveIntensity.flow(e,"f",{slot:"emissive"}),a=this.occlusion.flow(e,"b",{slot:"occlusion"}
vendor: 6,231 bytes, lines 5131-5197
5131),o=this.shadingAlpha.flow(e,"f"),l=this.shadingBlend.flow(e,"i"),h=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,c=this.alpha?this.alpha.flow(e,"f"):void 0,d=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0;e.requires.transparent=void 0!==c,e.addParsCode(["uniform float penumbraSize[5];","uniform sampler2D aoMap;","uniform bool aoEnabled;","varying vec3 vViewPosition;","varying vec3 vWPosition;","varying vec3 vLightFront;","varying vec3 vIndirectFront;","#ifndef DOUBLE_SIDED","   #define DOUBLE_SIDED","#endif","#include <normal_pars_fragment>","#ifdef DOUBLE_SIDED","	varying vec3 vLightBack;","	varying vec3 vIndirectBack;","#endif","#include <bsdfs>","#include <lights_pars_begin>","#include <fog_pars_fragment>","#include <shadowmap_pars_fragment>","#include <shadowmask_pars_fragment>","#include <clipping_planes_pars_fragment>","#include <dithering_pars_fragment>"].join(`
5132`));let u=["#include <normal_fragment_begin>",`
5133				// NOTE: gl_FrontFacing alternative using face normal estimation.
5134				vec3 viewdx = dFdx(vViewPosition);
5135				vec3 viewdy = dFdy(vViewPosition);
5136				vec3 faceNormal = normalize(cross(viewdx, viewdy));
5137				bool isFrontFacing = (dot(normal, faceNormal) >= 0.0);
5138				`,"#include <clipping_planes_fragment>"];u.push(i.code,"vec3 diffuseColor = "+i.result+";","ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );"),c&&u.push(c.code,"#ifdef ALPHATEST","if ( "+c.result+" <= ALPHATEST ) discard;","#endif"),u.push("#ifdef DOUBLE_SIDED","	reflectedLight.indirectDiffuse += ( isFrontFacing ) ? vIndirectFront : vIndirectBack;","#else","	reflectedLight.indirectDiffuse += vIndirectFront;","#endif","#include <lightmap_fragment>","reflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );","#ifdef DOUBLE_SIDED","	reflectedLight.directDiffuse = ( isFrontFacing ) ? vLightFront : vLightBack;","#else","	reflectedLight.directDiffuse = vLightFront;","#endif","reflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();"),r&&u.push(r.code,"reflectedLight.directDiffuse += "+r.result+" * "+s.result+";"),u.push("vec3 ao = aoEnabled && "+a.result+" ? tex2D(aoMap, gl_FragCoord.xy / resolution).rgb : vec3(1.0);","vec3 outgoingLight = (reflectedLight.directDiffuse + reflectedLight.indirectDiffuse) ;");let p="1.0";this.mask&&(this.mask.analyze(e),p=`luminance(${this.mask.flow(e,"v3").result})`),u.push(`
5139				if (outgoingLight != diffuseColor) {
5140					float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 );
5141					accumAlpha += ( 1.0 - accumAlpha ) * ${o.result} * ${p} * lightAccu;
5142					outgoingLight = spe_blend( diffuseColor, outgoingLight, ${o.result} * ${p}, ${l.result} );
5143
5144					outgoingLight *= ao;
5145				}
5146				`),h&&u.push(h.code,`outgoingLight = spe_blend(outgoingLight, ${h.result}, 1.0, SPE_BLENDING_NORMAL);`),c?u.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${c.result} );`):u.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),d&&u.push(`gl_FragColor.a *= ${d.result};`),u.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),t=u.join(`
5147`)}return t}},_Y={dHdxy:new Sj(`vec2 dHdxy(sampler2D bumpMap, vec2 bumpMapUv, float bumpScale) {
5148
5149            // Gradient of UVs w.r.t. X coordinate (in screen-space)
5150            vec2 dSTdx = dFdx(bumpMapUv);
5151
5152            // Gradient of UVs w.r.t. Y coordinate (in screen-space)
5153            vec2 dSTdy = dFdy(bumpMapUv);
5154            
5155            // Forward differencing
5156            float Hll = bumpScale * luminance(texture(bumpMap, bumpMapUv).rgb);
5157            float dBx = bumpScale * luminance(texture(bumpMap, bumpMapUv + dSTdx).rgb) - Hll;
5158            float dBy = bumpScale * luminance(texture(bumpMap, bumpMapUv + dSTdy).rgb) - Hll;
5159            
5160            return vec2( dBx, dBy );
5161        }`),perturbNormalArb:new Sj(`vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {
5162            vec3 vSigmaX = dFdx( surf_pos.xyz );
5163            vec3 vSigmaY = dFdy( surf_pos.xyz );
5164            vec3 vN = surf_norm; // normalized
5165            
5166            vN = normalize(vN);
5167
5168            vec3 R1 = cross( vSigmaY, vN );
5169            vec3 R2 = cross( vN, vSigmaX );
5170
5171            R1 = normalize(R1);
5172            R2 = normalize(R2);
5173    
5174            float fDet = dot( vSigmaX, R1 ) * faceDirection;
5175    
5176            vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );
5177            return normalize( abs( fDet ) * vN - vGrad );
5178        }`)},_Q=class extends SI{constructor(){super("phong"),this.nodeType="Phong",this.color=new _h(5526619),this.specular=new _h(1118481),this.shininess=new SJ(30),this.previousModelViewMatrix=new _v,this.previouseProjectionMatrix=new _v,this.shadingAlpha=new SJ(1),this.shadingBlend=new _c(0),this.occlusion=new _d(!0)}get category(){return"phong"}build(e){let t;if(e.define("PHONG"),e.requires.lights=!0,e.extensions.derivatives=!0,e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({resolution:_k.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(r2.merge([su.fog,su.lights])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(`
5179`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",`
5180				#include <skinbase_vertex>
5181				#include <skinnormal_vertex>
5182				#ifndef USE_LAYER_DISPLACE
5183					#include <defaultnormal_vertex>
5184				#endif
5185
5186				vec3 displaced_position = position;
5187				vec3 displaced_normal = objectNormal;
5188
5189				#ifdef USE_LAYER_DISPLACE
5190					vec3 transformed;
5191					vec3 transformedNormal;
5192				#endif
5193				`,"#include <normal_vertex>",`
5194				#ifndef USE_LAYER_DISPLACE
5195					#include <begin_vertex>
5196				#endif
5197				`];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5197":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED","    vNormal = transformedNormal;","#endif"),r.push("	#include <project_vertex>","	#include <clipping_planes_vertex>","	vViewPosition = - mvPosition.xyz;","	#include <worldpos_vertex>","	#include <shadowmap_vertex>","	#include <fog_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(`
5198`)}else{e.mergeUniform({penumbraSize:_k.penumbraSize}),e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({aoMap:_k.aoRenderTarget}),e.mergeUniform({aoEnabled:_k.aoEnabled}),void 0===this.color&&(this.color=new _h(5526619)),this.color.analyze(e,{slot:"color"}),this.specular.analyze(e),this.shininess.analyze(e);let i=this.occlusion.flow(e,"b",{slot:"occlusion"});this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e);let r=this.color.flow(e,"c",{slot:"color"}),s=this.specular.flow(e,"c"),a=this.shininess.flow(e,"f"),o=this.shadingAlpha.flow(e,"f"),l=this.shadingBlend.flow(e,"i"),h=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,c=this.alpha?this.alpha.flow(e,"f"):void 0,d=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0;e.requires.transparent=void 0!==c,e.addParsCode(["varying vec3 vWPosition;","uniform vec3 emissive;","uniform float penumbraSize[5];","uniform sampler2D aoMap;","uniform bool aoEnabled;","#include <normal_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <lights_pars_begin>","#include <lights_phong_pars_fragment>","#include <shadowmap_pars_fragment>","#include <dithering_pars_fragment>"].join(`
5199`));let u=["#include <normal_fragment_begin>",`
5200				// NOTE: gl_FrontFacing alternative using face normal estimation.
5201				vec3 viewdx = dFdx(vViewPosition);
5202				vec3 viewdy = dFdy(vViewPosition);
5203				vec3 faceNormal = normalize(cross(viewdx,viewdy));
5204				if (dot(normal, faceNormal) < 0.0) {
5205					normal *= -1.0;
5206				}
5207				`,"	BlinnPhongMaterial material;"];if(this.bumpMap){e.include(_Y.dHdxy),e.include(_Y.perturbNormalArb);let t=this.bumpMap.texture.flow(e,"t"),i=this.bumpMap.flow(e,"v3"),r=this.bumpMapIntensity?this.bumpMapIntensity.flow(e,"f").result:"1.0",s="";s=4===this.bumpMap.projection.value?`
5208					vec3 bumpNormal = vec3(0.0);
5209					{
5210						vec2 uv0 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs0;
5211						vec2 uv1 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs1;
5212						vec2 uv2 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs2;
5213						vec3 weights = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_triplanarWeights;
5214
5215						vec2 grad0 = dHdxy(${t.result}, uv0, ${r});
5216						vec3 n0 = perturbNormalArb(-vViewPosition, normal, grad0, faceDirection);
5217
5218						vec2 grad1 = dHdxy(${t.result}, uv1, ${r});
5219						vec3 n1 = perturbNormalArb(-vViewPosition, normal, grad1, faceDirection);
5220
5221						vec2 grad2 = dHdxy(${t.result}, uv2, ${r});
5222						vec3 n2 = perturbNormalArb(-vViewPosition, normal, grad2, faceDirection);
5223						
5224						bumpNormal = n0 * weights.z + n1 * weights.x + n2 * weights.y;
5225						bumpNormal = normalize(bumpNormal);
5226					}
5227
5228					normal = bumpNormal;
5229					`:`
5230					vec2 bumpMapCachedUv = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs;
5231					vec2 grad = dHdxy(${t.result}, bumpMapCachedUv, ${r});
5232					normal = perturbNormalArb( - vViewPosition, normal, grad, faceDirection );
5233					`,u.push(`// Call the Texture Layer's function once here so that it writes out its procedural UV coordinates
5234					${i.result};
5235					${s}
5236					`)}u.push(r.code,"	vec3 diffuseColor = "+r.result+";","	ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );","	vec3 totalEmissiveRadiance = emissive;",s.code,"	vec3 specular = "+s.result+";",a.code,"	float shininess = max( 0.0001, "+a.result+" );","	float specularStrength = 1.0;"),c&&u.push(c.code,"#ifdef ALPHATEST","if ( "+c.result+" <= ALPHATEST ) discard;","#endif"),u.push("material.diffuseColor = diffuseColor;"),u.push("material.specularColor = specular;","material.specularShininess = shininess;","material.specularStrength = specularStrength;","#include <lights_fragment_begin>","#include <lights_fragment_end>"),u.push("vec3 ao = aoEnabled && "+i.result+" ? tex2D(aoMap, gl_FragCoord.xy / resolution).rgb : vec3(1.0);","vec3 outgoingLight = ((reflectedLight.directDiffuse + reflectedLight.indirectDiffuse)) + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;");let p="1.0";this.mask&&(this.mask.analyze(e),p=`luminance(${this.mask.flow(e,"v3").result})`),u.push(`
5237				if (outgoingLight != diffuseColor) {
5238					float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 );
5239					accumAlpha += ( 1.0 - accumAlpha ) * ${o.result} * ${p} * lightAccu;
5240					outgoingLight = spe_blend( diffuseColor, outgoingLight, ${o.result} * ${p}, ${l.result} );
5241					
5242					outgoingLight *= ao;
5243				}
5244				`),h&&u.push(h.code,`outgoingLight = spe_blend(outgoingLight, ${h.result}, 1.0, SPE_BLENDING_NORMAL);`),c?u.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${c.result});`):u.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),d&&u.push(`gl_FragColor.a *= ${d.result};`),u.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),t=u.join(`
5245`)}return t}},_K=class extends SI{constructor(){super("standard"),this.nodeType="Standard",this.color=new _h(5526619),this.roughness=new SJ(.3),this.metalness=new SJ(0),this.reflectivity=new SJ(.5),this.previousModelViewMatrix=new _v,this.previouseProjectionMatrix=new _v,this.shadingAlp
vendor: 1,586 bytes, lines 5245-5264
5245ha=new SJ(1),this.shadingBlend=new _c(0),this.occlusion=new _d(!0)}get category(){return"physical"}build(e){let t;if(e.define("STANDARD"),e.requires.lights=!0,e.extensions.derivatives=!0,e.extensions.shaderTextureLOD=!0,e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({resolution:_k.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(r2.merge([su.fog,su.lights])),su.LTC_1&&(e.uniforms.ltc_1={value:void 0},e.uniforms.ltc_2={value:void 0}),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(`
5246`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",`
5247				#include <skinbase_vertex>
5248				#include <skinnormal_vertex>
5249				#if !defined( USE_LAYER_DISPLACE )
5250					#include <defaultnormal_vertex>
5251				#endif
5252
5253				vec3 displaced_position = position;
5254				vec3 displaced_normal = objectNormal;
5255
5256				#if defined( USE_LAYER_DISPLACE )
5257					vec3 transformed;
5258					vec3 transformedNormal;
5259				#endif
5260				`,"#include <normal_vertex>",`
5261				#if !defined( USE_LAYER_DISPLACE )
5262					#include <begin_vertex>
5263				#endif /* !USE_LAYER_DISPLACE */
5264				`];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5264":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED","    vNormal = transformedNormal;","#endif"),r.push("#include <project_vertex>","#include <fog_vertex>","#include <clipping_planes_vertex>","	vViewPosition = - mvPosition.xyz;","#include <worldpos_vertex>","#include <shadowmap_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(`
5265`)}else{e.mergeUniform({penumbraSize:_k.penumbraSize}),e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({aoMap:_k.aoRenderTarget}),e.mergeUniform({aoEnabled:_k.aoEnabled});let i={gamma:!0};void 0===this.color&&(this.color=new _h(5526619)),this.color.analyze(e,{slot:"color",context:i}),this.roughness.analyze(e),this.metalness.analyze(e);let r=this.occlusion.flow(e,"b",{slot:"occlusion"});this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e),this.reflectivity&&this.reflectivity.analyze(e);let s=this.color.flow(e,"c",{slot:"color",context:i}),a=this.roughness.flow(e,"f"),o=this.metalness.flow(e,"f"),l=this.shadingAlpha.flow(e,"f"),h=this.shadingBlend.flow(e,"i"),c=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,d=this.alpha?this.alpha.flow(e,"f"):void 0,u=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0,p=this.reflectivity?this.reflectivity.flow(e,"f"):void 0;e.requires.transparent=void 0!==d,e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","uniform float penumbraSize[5];","uniform sampler2D aoMap;","uniform bool aoEnabled;","#include <normal_pars_fragment>","#include <dithering_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <lights_pars_begin>","#include <lights_physical_pars_fragment>","#include <shadowmap_pars_fragment>"].join(`
5266`));let f=["#include <clipping_planes_fragment>","	#include <normal_fragment_begin>",`
5267				// NOTE: gl_FrontFacing alternative using face normal estimation.
5268				vec3 viewdx = dFdx(vViewPosition);
5269				vec3 viewdy = dFdy(vViewPosition);
5270				vec3 faceNormal = normalize(cross(viewdx,viewdy));
5271				if (dot(normal, faceNormal) < 0.0) {
5272					normal *= -1.0;
5273				}
5274				`,"	PhysicalMaterial material;","	material.diffuseColor = vec3( 1.0 );"];if(this.bumpMap){e.include(_Y.dHdxy),e.include(_Y.perturbNormalArb);let t=this.bumpMap.texture.flow(e,"t"),i=this.bumpMap.flow(e,"v3"),r=this.bumpMapIntensity?this.bumpMapIntensity.flow(e,"f").result:"1.0",s="";s=4===this.bumpMap.projection.value?`
5275					vec3 bumpNormal = vec3(0.0);
5276					{
5277						vec2 uv0 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs0;
5278						vec2 uv1 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs1;
5279						vec2 uv2 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs2;
5280						vec3 weights = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_triplanarWeights;
5281
5282						vec2 grad0 = dHdxy(${t.result}, uv0, ${r});
5283						vec3 n0 = perturbNormalArb(-vViewPosition, normal, grad0, faceDirection);
5284
5285						vec2 grad1 = dHdxy(${t.result}, uv1, ${r});
5286						vec3 n1 = perturbNormalArb(-vViewPosition, normal, grad1, faceDirection);
5287
5288						vec2 grad2 = dHdxy(${t.result}, uv2, ${r});
5289						vec3 n2 = perturbNormalArb(-vViewPosition, normal, grad2, faceDirection);
5290						
5291						bumpNormal = n0 * weights.z + n1 * weights.x + n2 * weights.y;
5292						bumpNormal = normalize(bumpNormal);
5293					}
5294
5295					normal = bumpNormal;
5296					`:`
5297					vec2 bumpMapCachedUv = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs;
5298					vec2 grad = dHdxy(${t.result}, bumpMapCachedUv, ${r});
5299					normal = perturbNormalArb( - vViewPosition, normal, grad, faceDirection );
5300					`,f.push(`// Call the Texture Layer's function once here so that it writes out its procedural UV coordinates
5301					${i.result};
5302					${s}
5303					`)}if(f.push(s.code,"	vec3 diffuseColor = "+s.result+";","	ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );",o.code,"	float metalnessFactor = "+o.result+";"),this.roughnessMap){let t=this.roughnessMap.texture.flow(e,"t"),i=this.roughnessMap.flow(e,"v3"),r="";r=4===this.roughnessMap.projection.value?`
5304					float roughnessChange = 1.0;
5305					{
5306						vec2 uv0 = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_writeUvs0;
5307						vec2 uv1 = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_writeUvs1;
5308						vec2 uv2 = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_writeUvs2;
5309						vec3 weights = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_triplanarWeights;
5310
5311						float r0 = luminance(texture(${t.result}, uv0).rgb) * roughnessScale;
5312						float r1 = luminance(texture(${t.result}, uv1).rgb) * roughnessScale;
5313						float r2 = luminance(texture(${t.result}, uv2).rgb) * roughnessScale;
5314
5315						roughnessChange = (r0 * weights.z + r1 * weights.x + r2 * weights.y);
5316					}
5317					float roughnessFactor = roughnessChange * ${a.result};
5318					`:`
5319					vec2 roughnessMapCachedUv = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_writeUvs;
5320
5321					vec4 vals = texture(${t.result},  roughnessMapCachedUv);
5322					float roughnessFactor = luminance(vals.rgb) * ${a.result};
5323					`,f.push(`// Call the Texture Layer's function once here so that it writes out its procedural UV coordinates
5324					${i.result};
5325
5326					const float roughnessScale = 1.0;
5327
5328					${r}
5329				`)}else f.push(a.code,"	float roughnessFactor = "+a.result+";");d&&f.push(d.code,"#ifdef ALPHATEST","	if ( "+d.result+" <= ALPHATEST ) discard;","#endif"),f.push("vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );","float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );"),f.push("material.diffuseColor = diffuseColor * ( 1.0 - metalnessFactor );","material.roughness = max( roughnessFactor, 0.0525 );","material.roughness += geometryRoughness;","material.roughness = min( material.roughness, 1.0 );","material.roughness = clamp( roughnessFactor, 0.04, 1.0 );"),p?f.push(p.code,"material.specularColor = mix( vec3( 0.16 * pow2( "+p.result+" ) ), diffuseColor, metalnessFactor );"):f.push("material.specularColor = mix( vec3( 0.04 ), diffuseColor, metalnessFactor );"),f.push("#include <lights_fragment_begin>"),f.push("#include <lights_fragment_end>"),f.push("vec3 ao = aoEnabled && "+r.result+" ? tex2D(aoMap, gl_FragCoord.xy / resolution).rgb : vec3(1.0);","vec3 outgoingLight = ((reflectedLight.directDiffuse + reflectedLight.indirectDiffuse)) + reflectedLight.directSpecular + reflectedLight.indirectSpecular;");let m="1.0";this.mask&&(this.mask.analyze(e),m=`luminance(${this.mask.flow(e,"v3").result})`),f.push(`
5330				if (outgoingLight != diffuseColor) {
5331					float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 );
5332					accumAlpha += ( 1.0 - accumAlpha ) * ${l.result} * ${m} * lightAccu;
5333					outgoingLight = spe_blend( diffuseColor, outgoingLight, ${l.result} * ${m}, ${h.result} );
5334					
5335					outgoingLight *= ao;
5336				}
5337				`),c&&f.push(c.code,`outgoingLight = spe_blend(outgoingLight, ${c.result}, 1.0, SPE_BLENDING_NORMAL);`),d?f.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${d.result} );`):f.push("gl_FragColor = vec4( outgoingLight, 1.0 );
5337"),u&&f.push(`gl_FragColor.a *= ${u.result};`),f.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),t=f.join(`
5338`)}return t}},_Z=class extends SI{constructor(){super("toon"),this.nodeType="Toon",this.color=new _h(5526619),this.specular=new _h(1118481),this.shininess=new SJ(30),this.previousModelViewMatrix=new _v,this.previouseProjectionMatrix=new _v,this.shadingAlpha=new SJ(1),this.shadingBlend=new _c(0)}get category(){return"toon"}build(e){let t;if(e.define("TOON"),e.requires.lights=!0,e.extensions.derivatives=!0,e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({resolution:_k.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(r2.merge([su.fog,su.lights])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(`
5339`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",`
5340				#include <skinbase_vertex>
5341				#include <skinnormal_vertex>
5342				#ifndef USE_LAYER_DISPLACE
5343					#include <defaultnormal_vertex>
5344				#endif
5345
5346				vec3 displaced_position = position;
5347				vec3 displaced_normal = objectNormal;
5348
5349				#ifdef USE_LAYER_DISPLACE
5350					vec3 transformed;
5351					vec3 transformedNormal;
5352				#endif
5353				`,"#include <normal_vertex>",`
5354				#ifndef USE_LAYER_DISPLACE
5355					#include <begin_vertex>
5356				#endif
5357				`];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5357":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED","    vNormal = transformedNormal;","#endif"),r.push("	#include <project_vertex>","	#include <fog_vertex>","	#include <clipping_planes_vertex>","	vViewPosition = - mvPosition.xyz;","	#include <worldpos_vertex>","	#include <shadowmap_vertex>","	#include <fog_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(`
5358`)}else{e.mergeUniform({penumbraSize:_k.penumbraSize}),e.mergeUniform({frameIndex:_k.frameIndex}),e.mergeUniform({aoMap:_k.aoRenderTarget}),e.mergeUniform({aoEnabled:_k.aoEnabled}),void 0===this.color&&(this.color=new _h(5526619)),this.color.analyze(e,{slot:"color"}),this.specular.analyze(e),this.shininess.analyze(e),this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e);let i=this.color.flow(e,"c",{slot:"color"}),r=this.specular.flow(e,"c"),s=this.shininess.flow(e,"f"),a=this.shadingAlpha.flow(e,"f"),o=this.shadingBlend.flow(e,"i"),l=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,h=this.alpha?this.alpha.flow(e,"f"):void 0,c=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0;e.requires.transparent=void 0!==h,e.addParsCode(["uniform float penumbraSize[5];","uniform sampler2D aoMap;","uniform bool aoEnabled;","varying vec3 vWPosition;","#include <normal_pars_fragment>","#include <gradientmap_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <lights_pars_begin>","#include <dithering_pars_fragment>",`
5359					varying vec3 vViewPosition;
5360					struct ToonMaterial {
5361						vec3	diffuseColor;
5362						vec3	specularColor;
5363						float	specularShininess;
5364						float	specularStrength;
5365					};
5366					void RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {
5367						vec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;
5368			
5369						reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
5370						reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;
5371					}
5372					void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {
5373						reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
5374					}
5375					#define RE_Direct				RE_Direct_Toon
5376					#define RE_IndirectDiffuse		RE_IndirectDiffuse_Toon
5377					#define Material_LightProbeLOD( material )	(0)
5378					`,"#include <shadowmap_pars_fragment>","#include <bumpmap_pars_fragment>","#include <normalmap_pars_fragment>"].join(`
5379`));let d=["#include <normal_fragment_begin>",`
5380				// NOTE: gl_FrontFacing alternative using face normal estimation.
5381				vec3 viewdx = dFdx(vViewPosition);
5382				vec3 viewdy = dFdy(vViewPosition);
5383				vec3 faceNormal = normalize(cross(viewdx,viewdy));
5384				if (dot(normal, faceNormal) < 0.0) {
5385					normal *= -1.0;
5386				}
5387				`,"	ToonMaterial material;"];if(this.bumpMap){e.include(_Y.dHdxy),e.include(_Y.perturbNormalArb);let t=this.bumpMap.texture.flow(e,"t"),i=this.bumpMap.flow(e,"v3"),r=this.bumpMapIntensity?this.bumpMapIntensity.flow(e,"f").result:"1.0",s="";s=4===this.bumpMap.projection.value?`
5388					vec3 bumpNormal = vec3(0.0);
5389					{
5390						vec2 uv0 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs0;
5391						vec2 uv1 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs1;
5392						vec2 uv2 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs2;
5393						vec3 weights = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_triplanarWeights;
5394
5395						vec2 grad0 = dHdxy(${t.result}, uv0, ${r});
5396						vec3 n0 = perturbNormalArb(-vViewPosition, normal, grad0, faceDirection);
5397
5398						vec2 grad1 = dHdxy(${t.result}, uv1, ${r});
5399						vec3 n1 = perturbNormalArb(-vViewPosition, normal, grad1, faceDirection);
5400
5401						vec2 grad2 = dHdxy(${t.result}, uv2, ${r});
5402						vec3 n2 = perturbNormalArb(-vViewPosition, normal, grad2, faceDirection);
5403						
5404						bumpNormal = n0 * weights.z + n1 * weights.x + n2 * weights.y;
5405						bumpNormal = normalize(bumpNormal);
5406					}
5407
5408					normal = bumpNormal;
5409					`:`
5410					vec2 bumpMapCachedUv = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs;
5411					vec2 grad = dHdxy(${t.result}, bumpMapCachedUv, ${r});
5412					normal = perturbNormalArb( - vViewPosition, normal, grad, faceDirection );
5413					`,d.push(`// Call the Texture Layer's function once here so that it writes out its procedural UV coordinates
5414					${i.result};
5415					${s}
5416					`)}d.push(i.code,"	vec3 diffuseColor = "+i.result+";","	ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );",r.code,"	vec3 specular = "+r.result+";",s.code,"	float shininess = max( 0.0001, "+s.result+" );","	float specularStrength = 1.0;"),h&&d.push(h.code,"#ifdef ALPHATEST","if ( "+h.result+" <= ALPHATEST ) discard;","#endif"),d.push("material.diffuseColor = diffuseColor;"),d.push("material.specularColor = specular;","material.specularShininess = shininess;","material.specularStrength = specularStrength;","#include <lights_fragment_begin>","#include <lights_fragment_end>"),d.push("vec3 ao = aoEnabled ? tex2D(aoMap, gl_FragCoord.xy / resolution).rgb : vec3(1.0);","vec3 outgoingLight = ((reflectedLight.directDiffuse + reflectedLight.indirectDiffuse) * ao) + reflectedLight.directSpecular;");let u="1.0";this.mask&&(this.mask.analyze(e),u=`luminance(${this.mask.flow(e,"v3").result})`),d.push(`
5417				if (outgoingLight != diffuseColor) {
5418					float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 );
5419					accumAlpha += ( 1.0 - accumAlpha ) * ${a.result} * ${u} * lightAccu;
5420					outgoingLight = spe_blend( diffuseColor, outgoingLight, ${a.result} * ${u}, ${o.result} );
5421				}
5422				`),l&&d.push(l.code,`outgoingLight = spe_blend(outgoingLight, ${l.result}, 1.0, SPE_BLENDING_NORMAL);`),h?d.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${h.result} );`):d.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),c&&d.push(`gl_FragColor.a *= ${c.result};`),d.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),t=d.join(`
5423`)}return t}},_J=class{constructor(e=1e4){this.timeout=e,this.cache=new Map,this.head={data:null,time:0,src:null,next:null,prev:null},this.tail={data:null,time:1/0,src:null,next:null,prev:null},this.hasClean=!1,this.head.next=this.tail,this.tail.prev=this.head}log(...e){}remove(e){let t=this.cache.get(e);t&&(this.dispose(e,t.data),this.cache.delete(e),t.prev.next=t.next,t.next.prev=t.prev)}scheduleCleanup(){this.hasClean||(this.log("scheduled cleanup"),this.hasClean=!0,setTimeout(()=>{this.hasClean=!1,this.log("cleaning");let e=Date.now(),t=this.head.next;for(;t.time<e-this.timeout;)this.dispose(t.src,t.data),this.cache.delete(t.src),(t=t.next).prev=this.head,this.head.next=t;this.head.next!==this.tail?this.scheduleCleanup():this.log("no more cleanup")},this.timeout+1e3))}has(e){return this.cache.get(e)?.data}load(e){let t=Date.now(),i=this.cache.get(e);return void 0===i?(i={data:this.create(e),src:e,time:t,next:null,prev:null},this.cache.set(e,i)):(i.time=t,i.prev.next=i.next,i.next.prev=i.prev),i.prev=this.tail.prev,i.next=this.tail,this.tail.prev.next=i,this.tail.prev=i,this.scheduleCleanup(),i.data}},_$=class extends _J{create(e){return URL.createObjectURL(new Blob([e]))}dispose(e,t){URL.revokeObjectURL(t)}},_0=class{constructor(e,t){this.data=e,this.cache=t,this.refCount=0}deref(){this.refCount,this.refCount-=1,0===this.refCount&&(this.cache.remove(this),this.dispose())}dispose(){this.refCount}},_1=class{constructor(){this.cache=new Map}remove(e){this.cache.delete(e.data)}load(e){let t=this.cache.get(e);return void 0===t&&(t=this.create(e),this.cache.set(e,t)),t.refCount+=1,t}},_2=class extends _0{constructor(e,t){super(e,t.imageHolderCache),this.data=e,this.shared=t,this.loaded=!1,this.isVideo=!1,this.isBuffer=!1,this._cache={1e3:{},1001:{},1002:{}},this.isVideo="video"===e.type,this.isBuffer=!0===e.isWebGLRenderTarget,this.loadPromise=this.updateSrc(this.isBuffer?e:e.data)}async updateSrc(e){if(typeof document>"u")return;this.disposeTextures(),this.loaded=!1;let t=()=>{for(let e of(this.loaded=!0,Object.values(this._cache)))for(let t of Object.values(e))for(let e of Object.values(t))e&&(e.image=this.img,e.needsUpdate=!0);this.shared.requestRender()};if(this.isBuffer)this.img=e,this.loaded=!0;else if(this.isVideo){if(this.img=document.createElement("video"),this.img.preload="auto",this.img.playsInl
5423ine=!0,this.img.currentTime=.01,"string"!=typeof e){let t;var i=new FileReader;i.readAsDataURL(new Blob([e],{type:"video/mp4"})),await new Promise(e=>{i.onloadend=i=>{t=i.target?.result,e(null)}}),this.img.src=t}else this.img.src=e;this.img.onloadeddata=()=>{t()}}else this.img=new Image,this.img.src="string"==typeof e?e:(_H||(_H=new _$),_H.load(e)),this.img.onload=t,await new Promise(e=>{this.img.onload=()=>{t(),e(null)}})}getTexture(e,t=1008,i=1006){let r=this._cache[e]?.[t]?.[i];if(r)return r;{let r;return r=this.isBuffer?this.img.texture:this.isVideo?new nq(this.img,void 0,e,e):new ih(this.img,void 0,e,e,i,t),this.loaded&&(r.needsUpdate=!0),void 0===this._cache[e]&&(this._cache[e]={}),void 0===this._cache[e][t]&&(this._cache[e][t]={}),this._cache[e][t][i]=r,r}}setNeedsUpdate(e){for(let t of Object.values(this._cache))for(let i of Object.values(t))for(let t of Object.values(i))t&&(t.needsUpdate=e)}disposeTextures(){for(let[e,t]of Object.entries(this._cache))for(let[i,r]of Object.entries(t))for(let[t,s]of Object.entries(r))s?.dispose(),void 0!==this._cache[e]&&void 0!==this._cache[e][i]&&(this._cache[e][i][t]=void 0)}dispose(){super.dispose(),this.disposeTextures()}},_3=class extends _2{},_4={year:0,month:1,day:2,hour:3,minute:4,second:5},_5={};function _6(e,t,i,r,s,a,o){var l=new Date(0);return l.setUTCFullYear(e,t,i),l.setUTCHours(r,s,a,o),l}var _8={timezoneZ:/^(Z)$/,timezoneHH:/^([+-]\d{2})$/,timezoneHHMM:/^([+-]\d{2}):?(\d{2})$/};function _9(e,t,i){if(!e||(r=_8.timezoneZ.exec(e)))return 0;if(r=_8.timezoneHH.exec(e))return Ae(a=parseInt(r[1],10))?-(36e5*a):NaN;if(r=_8.timezoneHHMM.exec(e)){a=parseInt(r[1],10);var r,s,a,o=parseInt(r[2],10);return Ae(a,o)?(s=36e5*Math.abs(a)+6e4*o,a>0?-s:s):NaN}if(function(e){if(At[e])return!0;try{return new Intl.DateTimeFormat(void 0,{timeZone:e}),At[e]=!0,!0}catch{return!1}}(e)){t=new Date(t||Date.now());var l,h=_7(i?t:_6((l=t).getFullYear(),l.getMonth(),l.getDate(),l.getHours(),l.getMinutes(),l.getSeconds(),l.getMilliseconds()),e);return-(i?h:function(e,t,i){var r=e.getTime()-t,s=_7(new Date(r),i);if(t===s)return t;var a=_7(new Date(r-=s-t),i);return s===a?s:Math.max(s,a)}(t,h,e))}return NaN}function _7(e,t){var i,r,s,a=(s=function(e){if(!_5[e]){var t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:"America/New_York",year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date("2014-06-25T04:00:00.123Z"));_5[e]="06/25/2014, 00:00:00"===t||"‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00"===t?new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:e,year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return _5[e]}(t)).formatToParts?function(e,t){try{for(var i=e.formatToParts(t),r=[],s=0;s<i.length;s++){var a=_4[i[s].type];a>=0&&(r[a]=parseInt(i[s].value,10))}return r}catch(e){if(e instanceof RangeError)return[NaN];throw e}}(s,e):(i=s.format(e).replace(/\u200E/g,""),[(r=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(i))[3],r[1],r[2],r[4],r[5],r[6]]),o=_6(a[0],a[1]-1,a[2],a[3]%24,a[4],a[5],0).getTime(),l=e.getTime(),h=l%1e3;return o-(l-=h>=0?h:1e3+h)}function Ae(e,t){return -23<=e&&e<=23&&(null==t||0<=t&&t<=59)}var At={},Ai=tw(tM(),1),Ar=tw(tE(),1),As={dateTimePattern:/^([0-9W+-]+)(T| )(.*)/,datePattern:/^([0-9W+-]+)(.*)/,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timeZone:/(Z|[+-]\d{2}(?::?\d{2})?| UTC| [a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?)$/};function Aa(e,t,i){t=t||0,i=i||0;var r=new Date(0);r.setUTCFullYear(e,0,4);var s=7*t+i+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+s),r}var An=[31,28,31,30,31,30,31,31,30,31,30,31],Ao=[31,29,31,30,31,30,31,31,30,31,30,31];function Al(e){return e%400==0||e%4==0&&e%100!=0}function Ah(e,t,i){if(t<0||t>11)return!1;if(null!=i){if(i<1)return!1;var r=Al(e);
5423if(r&&i>Ao[t]||!r&&i>An[t])return!1}return!0}function Ac(e,t,i){return!(t<0||t>52||null!=i&&(i<0||i>6))}function Ad(e,t,i){return!(null!=e&&(e<0||e>=25)||null!=t&&(t<0||t>=60)||null!=i&&(i<0||i>=60))}function Au(e,t){return t.color(e)}function Ap(e=new Date,t){var i,r,s,a,o,l;let h,c,d=t.format,u=e.getSeconds(),p=e;t&&null!==t.timeZone&&(i=new Date,r=t.timeZone,s=function(e,t){if(arguments.length<1)throw TypeError("1 argument required, but only "+arguments.length+" present");if(null===e)return new Date(NaN);var i=t||{},r=null==i.additionalDigits?2:(0,Ai.default)(i.additionalDigits);if(2!==r&&1!==r&&0!==r)throw RangeError("additionalDigits must be 0, 1 or 2");if(e instanceof Date||"object"==typeof e&&"[object Date]"===Object.prototype.toString.call(e))return new Date(e.getTime());if("number"==typeof e||"[object Number]"===Object.prototype.toString.call(e))return new Date(e);if(!("string"==typeof e||"[object String]"===Object.prototype.toString.call(e)))return new Date(NaN);var s=function(e){var t,i={},r=As.dateTimePattern.exec(e);if(r?(i.date=r[1],t=r[3]):(r=As.datePattern.exec(e))?(i.date=r[1],t=r[2]):(i.date=null,t=e),t){var s=As.timeZone.exec(t);s?(i.time=t.replace(s[1],""),i.timeZone=s[1].trim()):i.time=t}return i}(e),a=function(e,t){var i,r=As.YYY[t],s=As.YYYYY[t];if(i=As.YYYY.exec(e)||s.exec(e)){var a=i[1];return{year:parseInt(a,10),restDateString:e.slice(a.length)}}if(i=As.YY.exec(e)||r.exec(e)){var o=i[1];return{year:100*parseInt(o,10),restDateString:e.slice(o.length)}}return{year:null}}(s.date,r),o=a.year,l=function(e,t){if(null===t)return null;if(0===e.length)return(r=new Date(0)).setUTCFullYear(t),r;if(i=As.MM.exec(e))return r=new Date(0),Ah(t,s=parseInt(i[1],10)-1)?(r.setUTCFullYear(t,s),r):new Date(NaN);if(i=As.DDD.exec(e)){r=new Date(0);var i,r,s,a,o=parseInt(i[1],10);return!function(e,t){if(t<1)return!1;var i=Al(e);return!(i&&t>366||!i&&t>365)}(t,o)?new Date(NaN):(r.setUTCFullYear(t,0,o),r)}if(i=As.MMDD.exec(e)){r=new Date(0),s=parseInt(i[1],10)-1;var l=parseInt(i[2],10);return Ah(t,s,l)?(r.setUTCFullYear(t,s,l),r):new Date(NaN)}if(i=As.Www.exec(e))return Ac(t,a=parseInt(i[1],10)-1)?Aa(t,a):new Date(NaN);if(i=As.WwwD.exec(e)){a=parseInt(i[1],10)-1;var h=parseInt(i[2],10)-1;return Ac(t,a,h)?Aa(t,a,h):new Date(NaN)}return null}(a.restDateString,o);if(isNaN(l)||!l)return new Date(NaN);var h,c=l.getTime(),d=0;if(s.time&&isNaN(d=function(e){var t,i,r;if(t=As.HH.exec(e))return Ad(i=parseFloat(t[1].replace(",",".")))?i%24*36e5:NaN;if(t=As.HHMM.exec(e))return Ad(i=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")))?i%24*36e5+6e4*r:NaN;if(t=As.HHMMSS.exec(e)){i=parseInt(t[1],10),r=parseInt(t[2],10);var s=parseFloat(t[3].replace(",","."));return Ad(i,r,s)?i%24*36e5+6e4*r+1e3*s:NaN}return null}(s.time)))return new Date(NaN);if(s.timeZone||i.timeZone){if(isNaN(h=_9(s.timeZone||i.timeZone,new Date(c+d))))return new Date(NaN)}else h=(0,Ar.default)(new Date(c+d)),h=(0,Ar.default)(new Date(c+d+h));return new Date(c+d+h)}(i,void 0),a=_9(r,s,!0),o=new Date(s.getTime()-a),(l=new Date(0)).setFullYear(o.getUTCFullYear(),o.getUTCMonth(),o.getUTCDate()),l.setHours(o.getUTCHours(),o.getUTCMinutes(),o.getUTCSeconds(),o.getUTCMilliseconds()),p=l);let f=p.getHours(),m=p.getMinutes(),g;"12ampm"===t.format12h24h&&(g=f>=12?"PM":"AM");let v=f;switch("24"!==t.format12h24h&&0==(v=f%12)&&(v=12),d){case"HH:mm:ss":h=[v,m,u];break;case"HH:mm":h=[v,m];break;case"HH":h=[v],g=void 0;break;case"mm":h=[m],g=void 0;break;case"ss":h=[u],g=void 0;break;case"year":c=p.getFullYear();break;case"month":c=p.getMonth()+1;break;case"dayOfYear":c=Math.floor((p.getTime()-new Date(p.getFullYear(),0,0).getTime())/864e5);break;case"dayOfMonth":c=p.getDate();break;case"secondOfDay":c=3600*f+60*m+u;break;default:console.error("Unknown time format",d),c=0}return void 0!==h?{textValue:h,suffix:g}:c}function Af(e,t){let{alpha:i,mode:r,isMask:s}=e,a="string"==typeof i?(Number(t.getVariable(i))??100)/100:i;return{type:e.type,alpha:a,mode:r,isMask:s}}var Am=class extends SN{},Ag={noise:["noiseType"],texture:["projection","axis","side"],video:["projection","axis","side"],displace:["noiseType"],light:["roughnessMap","bumpMap"],depth:["smooth","isWorldSpace","gradientType","isVector"],pattern:["style","projection","axis"]},Av={depth:["colors"]};function Ay(e,t,i){let r=i.uniforms[`f${i.id}_texture`];if(!r)return!1;
5423if("image"in e){let i=e.image,s=t.image(i);r.image instanceof _3||r.image.deref(),r.image=s}if("video"in e){let i=e.video,s=t.video(i);r.image instanceof _3||r.image.deref(),r.image=s}if("wrapping"in e&&(r.wrap=e.wrapping),"minFilter"in e&&(r.minFilter=e.minFilter),"magFilter"in e&&(r.magFilter=e.magFilter),"rotation"in e&&i.uniforms[`f${i.id}_rotation`])return i.uniforms[`f${i.id}_rotation`].value=(e.rotation??0)*tY.DEG2RAD,!1;if("repeat"in e||"offset"in e||"rotation"in e){let t=i.uniforms[`f${i.id}_mat`];"repeat"in e&&(t.repeat=e.repeat),"offset"in e&&(t.offset=e.offset),"rotation"in e&&(t.rotation=e.rotation??0),t.updateMatrix()}return!1}var Ax=(e,t,i)=>Math.max(0,Math.min(1,Number(t.getVariable("number"==typeof e?100*e:e,i)??100)/100))??1,Ab=class{constructor(e,t,i,r,s){for(let s in this.id=e,this.uuid=t,this.data=i,this.uniforms={},r)this.uniforms[`f${this.id}_${s}`]=r[s];for(let e in i)AM(e,this,i,s)}get type(){return this.data.type}static create(e,t,i,r){if("light"===i.type)return A_.createLightLayer(e,t,i,r);if("texture"===i.type||"video"===i.type){let s="texture"===i.type?r.uiBuffer(i.texture.image)??r.image(i.texture.image):r.video(i.texture.video),a=new _m(s,i.texture.wrapping,i.texture.minFilter??1008,i.texture.magFilter??1006),o=new _f(s),l=new _x(i.texture.repeat,i.texture.offset,i.texture.rotation??0),h=new SJ(i.crop?1:0),c=new _c(i.projection??0),d=new _c(["x","y","z"].indexOf(i.axis)??0),u=new _c(i.side??0),p=new Sz(i.size?new tQ(i.size[0],i.size[1]):new tQ(100,100)),f=new SJ(i.blending??0),m=new SJ(Ax(i.alpha,r)),g=new _c(i.mode??0),v=new _d(i.isMask??!1),y=new _A(a,o,h,c,d,u,p,f,l,m,g,v),x=new SK(y.calpha,"f");return new Aw(e,t,i,{texture:a,textureSize:o,crop:h,projection:c,axis:d,side:u,size:p,blending:f,mat:l,alpha:m,mode:g,isMask:v},y,g,x,v,r)}if("matcap"===i.type){let s=new _m(r.image(i.texture.image),i.texture.wrapping,i.texture.minFilter??1008,i.texture.magFilter??1006),a=new SJ(Ax(i.alpha,r)),o=new _c(i.mode??0),l=new _d(i.isMask??!1),h=new SJ((i.texture.rotation??0)*tY.DEG2RAD),c=new _T(s,a,o,l,h),d=new SK(c.calpha,"f");return new Aw(e,t,i,{texture:s,alpha:a,mode:o,isMask:l,rotation:h},c,o,d,l,r)}if("displace"!==i.type){let s;return s=function(e,t){switch(e.type){case"fresnel":return function(e,t){let{bias:i,scale:r,intensity:s,factor:a,color:o}=e;return{...Af(e,t),color:Au(o,t),bias:i,scale:r,intensity:s,factor:a}}(e,t);case"gradient":return function(e,t){let{gradientType:i,smooth:r,colors:s,steps:a,angle:o,offset:l,morph:h}=e;return{...Af(e,t),gradientType:i,smooth:r,colors:s.map(e=>new ic(e[0],e[1],e[2],e[3])),num:s.length,steps:a,offset:new tQ(...l),morph:new tQ(...h),angle:o}}(e,t);case"depth":return function(e,t){let{gradientType:i,near:r,far:s,isVector:a,isWorldSpace:o,origin:l,direction:h,colors:c,steps:d,smooth:u}=e;return{...Af(e,t),gradientType:i,near:r,far:s,isVector:a,isWorldSpace:o,origin:new iv(...l),direction:h?new iv(...h):new iv(1,0,0),colors:c.map(e=>void 0!==e?new ic(e[0],e[1],e[2],e[3]):new ic(0,0,0,0)),steps:d.slice(0,c.length),smooth:u}}(e,t);case"normal":return function(e,t){let{cnormal:i}=e;return{...Af(e,t),cnormal:new iv(i[0],i[1],i[2])}}(e,t);case"noise":return{...Af(e,t),scale:e.scale,move:e.move,fA:new tQ(...e.fA),fB:new tQ(...e.fB),size:new iv(...e.size),distortion:new tQ(...e.distortion),colorA:Au(e.colorA,t),colorB:Au(e.colorB,t),colorC:Au(e.colorC,t),colorD:Au(e.colorD,t),noiseType:e.noiseType,voronoiStyle:e.voronoiStyle,highCut:e.highCut,lowCut:e.lowCut,smoothness:e.smoothness,seed:e.seed,quality:e.quality};case"rainbow":return{...Af(e,t),filmThickness:e.filmThickness,movement:e.movement,wavelengths:new iv(...e.wavelengths),noiseStrength:e.noiseStrength,noiseScale:e.noiseScale,offset:new iv(...e.offset)};case"toon":return{...Af(e,t),positioning:e.positioning,colors:e.colors.map(e=>new ic(e[0],e[1],e[2],e[3])),num:e.colors.length,steps:e.steps,source:new iv(...e.source),isWorldSpace:e.isWorldSpace,noiseStrength:e.noiseStrength,noiseScale:e.noiseScale,shadowColor:Au(e.shadowColor,t),offset:new iv(...e.offset)};case"outline":return{...Af(e,t),outlineColor:Au(e.outlineColor,t),contourColor:Au(e.contourColor,t),outlineWidth:e.outlineWidth,contourWidth:e.contourWidth,outlineThreshold:e.outlineThreshold,contourThreshold:e.contourThreshold,outlineSmoothing:e.outlineSmoothing,contourFrequency:e.contourFrequency,contourDirection:new iv(...e.contourDirection),positionalLines:e.positionalLines,compensation:e.compensation};case"transmission":return{...Af(e,t),thickness:e.thickness,ior:e.ior,roughness:e.roughness};case"color":return{...Af(e,t),color:Au(e.color,t)};case"pattern":return{...Af(e,t),style:e.style,projection:e.projection,axis:e.axis,blending:e.blending,offset:new tQ(...e.offset),colorA:Au(e.colorA,t),colorB:Au(e.colorB,t),frequency:new tQ(...e.frequency),size:e.size,variation:e.variation,smoothness:e.smoothness,zigzag:e.zigzag,rotation:e.rotation,vertical:new tQ(...e.vertical),horizontal:new tQ(...e.horizontal),sides:e.sides}}}(i,r),function(e,t,i,r,s){switch(e.type){case"color":{let a=new _h(r.color??5526619),o=AA(r),l=new _S(a,o.alpha),h=new SK(l.calpha,"f");return new Aw(t,i,e,{color:a,...o},l,o.mode,h,o.isMask,s)}case"fresnel":{let a=new _h(r.color??16777215),o=new SJ(r.bias??.1),l=new SJ(r.scale??1),h=new SJ(r.intensity??2),c=new SJ(r.factor??1),d=AA(r),u=new _E(a,o,l,h,c,d.alpha,d.mode,d.isMask),p=new SK(u.calpha,"f");return new Aw(t,i,e,{color:a,bias:o,scale:l,intensity:h,factor:c,...d},u,d.mode,p,d.isMask,s)}case"rainbow":{let a=new SJ(r.filmThickness??30),o=new SJ(r.movement??0
5423),l=new SF(r.wavelengths??new iv(0,0,0)),h=new SJ(r.noiseStrength??0),c=new SJ(r.noiseScale??1),d=new SF(r.offset??new iv(0,0,0)),u=AA(r),p=new _R(a,o,l,h,c,d,u.alpha,u.isMask),f=new SK(p.calpha,"f");return new Aw(t,i,e,{filmThickness:a,movement:o,wavelengths:l,noiseStrength:h,noiseScale:c,offset:d,...u},p,u.mode,f,u.isMask,s)}case"transmission":{let a=new SJ(r.thickness??10),o=new SJ(r.ior??1.5),l=new SJ(r.roughness??.5),h=_k.transmissionSize,c=_k.transmissionRenderTarget,d=_k.transmissionRenderTargetDepth,u=window.innerWidth,p=window.innerHeight,f=u>=p?new Sz(p/u,1):new Sz(1,u/p),m=AA(r),g=new _z(a,o,l,h,c,d,f,m.alpha),v=new SK(g.calpha,"f");return new Aw(t,i,e,{thickness:a,ior:o,roughness:l,aspectRatio:f,...m},g,m.mode,v,m.isMask,s)}case"toon":{let a,o=new _c(r.positioning??0),l;r.colors?l=new _b(r.colors.length,r.colors):(l=new _b(10,new ic(0,0,0,1))).value[1]=new ic(1,1,1,1),r.steps?a=new _u(r.steps.length,r.steps):(a=new _u(10,1)).value[0]=0;let h=new SF(r.source??new iv(0,0,0)),c=new _d(r.isWorldSpace??!0),d=new SJ(r.noiseStrength??0),u=new SJ(r.noiseScale??1),p=new Sk(r.shadowColor),f=new SF(r.offset??new iv(0,0,0)),m=AA(r),g=new _L(o,l,a,h,c,d,u,p,f,m.alpha),v=new SK(g.calpha,"f");return new Aw(t,i,e,{positioning:o,colors:l,steps:a,source:h,isWorldSpace:c,noiseStrength:d,noiseScale:u,shadowColor:p,offset:f,...m},g,m.mode,v,m.isMask,s)}case"outline":{let a=new _h(r.outlineColor??16777215),o=new _h(r.contourColor??16777215),l=new SJ(r.outlineWidth??.1),h=new SJ(r.contourWidth??.1),c=new SJ(r.outlineThreshold??.1),d=new SJ(r.contourThreshold??.1),u=new SJ(r.outlineSmoothing??.1),p=new SJ(r.contourFrequency??.1),f=new SF(r.contourDirection??new iv(0,1,0)),m=new _d(r.positionalLines??!1),g=new _d(r.compensation??!0),v=_k.normalRenderTarget,y=_k.normalRenderTargetDepth,x=_k.pixelRatioNode,b=_k.resolution,w=AA(r),S=new _I(a,o,l,h,c,d,u,p,f,m,g,b,v,y,x,w.alpha),_=new SK(S.calpha,"f");return new Aw(t,i,e,{outlineColor:a,contourColor:o,outlineWidth:l,contourWidth:h,outlineThreshold:c,contourThreshold:d,outlineSmoothing:u,contourFrequency:p,contourDirection:f,positionalLines:m,compensation:g,...w},S,w.mode,_,w.isMask,s)}case"depth":{let a,o=new _c(r.gradientType??0),l=new _d(r.smooth??!1),h=new SJ(r.near??50),c=new SJ(r.far??200),d=new SJ(r.isVector??1),u=new SJ(r.isWorldSpace??0),p=new SF(r.origin??new iv),f=new SF(r.direction??new iv),m;r.colors?m=new _b(r.colors.length,r.colors):(m=new _b(2,new ic(0,0,0,1))).value[1]=new ic(1,1,1,1),r.steps?a=new _u(r.steps.length,r.steps):(a=new _u(2,1)).value[0]=0;let g=AA(r),v=new _M(o,l,h,c,d,u,p,f,m,a,g.alpha,g.isMask),y=new SK(v.calpha,"f");return new Aw(t,i,e,{gradientType:o,smooth:l,near:h,far:c,isVector:d,isWorldSpace:u,origin:p,direction:f,colors:m,steps:a,...g},v,g.mode,y,g.isMask,s)}case"noise":{let a=new SJ(r.scale??1),o=new SF(r.size??new iv(100,100,100)),l=new SJ(r.move??1),h=new Sz(r.fA??new tQ(1.7,9.2)),c=new Sz(r.fB??new tQ(8.3,2.8)),d=new Sz(r.distortion??new tQ(1,1)),u=new Sk(r.colorA),p=new Sk(r.colorB),f=new Sk(r.colorC),m=new Sk(r.colorD),g=new _c(r.noiseType??0),v=new _c(r.voronoiStyle??0),y=new SJ(r.highCut??1),x=new SJ(r.lowCut??0),b=new SJ(r.smoothness??.5),w=new SJ(r.seed??.5),S=new _c(r.quality??1),_=AA(r),A=new _D(a,o,l,h,c,d,u,p,f,m,_.alpha,g,_.isMask,v,y,x,b,w,S),M=new SK(A.calpha,"f");return new Aw(t,i,e,{scale:a,size:o,move:l,fA:h,fB:c,distortion:d,colorA:u,colorB:p,colorC:f,colorD:m,noiseType:g,..._,voronoiStyle:v,highCut:y,lowCut:x,smoothness:b,seed:w,quality:S},A,_.mode,M,_.isMask,s)}case"normal":{let a=new SF(r.cnormal??new iv(1,1,1)),o=AA(r),l=new __(a,o.alpha),h=new SK(l.calpha,"f");return new Aw(t,i,e,{cnormal:a,...o},l,o.mode,h,o.isMask,s)}case"gradient":{let a,o=new _c(r.gradientType??0),l=new _d(r.smooth??!1),h;r.colors?h=new _b(r.colors.length,r.colors):(h=new _b(10,new ic(0,0,0,1))).value[1]=new ic(1,1,1,1),r.steps?a=new _u(r.steps.length,r.steps):(a=new _u(10,1)).value[0]=0;let c=new Sz(r.offset??new tQ(0,0)),d=new Sz(r.morph??new tQ(0,0)),u=new SJ(r.angle??0),p=AA(r),f=new _C(o,l,h,a,c,d,u,p.alpha,p.isMask),m=new SK(f.calpha,"f");return new Aw(t,i,e,{gradientType:o,smooth:l,colors:h,steps:a,offset:c,morph:d,angle:u,...p},f,p.mode,m,p.isMask,s)}
5423case"pattern":{let a=new _c(r.style??0),o=new _c(r.projection??0),l=new _c(["x","y","z"].indexOf(r.axis)??0),h=new SJ(r.blending??0),c=new Sz(r.offset??new tQ(0,0)),d=new Sk(r.colorA),u=new Sk(r.colorB),p=new Sz(r.frequency??new tQ(10,10)),f=new SJ(r.size??.5),m=new SJ(r.variation??0),g=new SJ(r.smoothness??.5),v=new SJ(r.zigzag??0),y=new SJ(r.rotation??0),x=new Sz(r.vertical??new tQ(0,1)),b=new Sz(r.horizontal??new tQ(0,1)),w=new _c(r.sides??6),S=AA(r),_=new _O(a,o,l,h,c,d,u,p,f,m,g,v,y,x,b,w,S.alpha,S.isMask),A=new SK(_.calpha,"f");return new Aw(t,i,e,{style:a,projection:o,axis:l,blending:h,offset:c,colorA:d,colorB:u,frequency:p,size:f,variation:m,smoothness:g,zigzag:v,rotation:y,vertical:x,horizontal:b,sides:w,...S},_,S.mode,A,S.isMask,s)}default:{let a=new _h(1,0,0,1),o=AA(r),l=new _S(a,o.alpha),h=new SK(l.calpha,"f");return new Aw(t,i,e,{color:a,...o},l,o.mode,h,o.isMask,s)}}}(i,e,t,s,r)}if("noise"===i.displacementType){let s=new SF(new iv(...i.offset)),a=new SJ(i.scale??10),o=new SJ(i.intensity??8),l=new SJ(i.movement??1),h=new _c(i.noiseType??0),c=new _c(i.voronoiStyle??0),d=new SJ(i.smoothness??.5),u=new SJ(i.seed??0),p=new SJ(i.highCut??1),f=new SJ(i.lowCut??0),m=new _c(i.quality??1),g=new _N(o,l,s,c,d,u,p,f,m,a,h);return new AS(e,t,i,{offset:s,scale:a,intensity:o,movement:l,noiseType:h,voronoiStyle:c,smoothness:d,seed:u,highCut:p,lowCut:f,quality:m},g,r)}throw Error()}updateByOp(e,t,i){if(void 0===e.path[0]){if(0===e.type)return"type"in e.props||"category"in e.props||"visible"in e.props||"noiseType"in e.props?(i.scene.markNeedsUpdateRendererDirty(),!0):function(e,t,i,r){let s=!1;for(let[a,o]of Object.entries(e)){if("bumpMap"===a||"roughnessMap"===a){s=!0;continue}if(!a||void 0===o)continue;if(AM(a,i,r,t)){"visible"===a&&"light"===i.type&&(s=!0);continue}i.visible=r.visible;let e=i.uniforms[`f${i.id}_${a}`];if(e&&!(e instanceof _p))switch(s=s||function(e,t,i){if("isMask"===t)return!0;let r=Ag[e.type],s=Av[e.type];if(void 0!==s){let r=e.color;if(s.includes(t)){let e=r[t]?.value?.length;if(void 0!==e&&e!==i.length)return!0}}return void 0!==r&&r.includes(t)}(i,a,o),e.constructor){case _h:if("string"==typeof o){let i=t.getColor(o);i&&(e.value=i);break}e.value instanceof Am?e.value=new SN(o.r,o.g,o.b,o.a):e.setRGBA(o);break;case Sk:if("string"==typeof o){let i=t.getColor(o);i&&(e.value=i);break}e.value instanceof Am?e.value=new SN(o.r,o.g,o.b,o.a):e.value.setRGBA(o.r,o.g,o.b,o.a);break;case Sz:e.value.setX(o[0]),e.value.setY(o[1]);break;case SF:e.value.setX(o[0]),e.value.setY(o[1]),e.value.setZ(o[2]);break;case SZ:Ay(o,t,i);break;case _b:e.value=o.map(e=>new ic(...e));break;default:e.value=o}}return s}(e.props,i.shared,this,t)}else if("texture"===e.path[0])return!("texture"in t)&&!("video"in t)||Ay(e.props,i.shared,this);return!1}dispose(){let e;if("texture"===(e=this instanceof Ab?this.type:this)||"video"===e||"displace_map"===e||"matcap"===e){let e=this.uniforms[`f${this.id}_texture`];if(!e)return!1;e.image instanceof _3||e.image.deref()}}hasValueByKey(e){return void 0!==this.uniforms[e]}hasValue(e){return this.hasValueByKey(`f${this.id}_${e}`)}setValue(e,t){let i=`f${this.id}_${e}`;this.hasValueByKey(i)&&void 0!==t&&(this.uniforms[i].value=t)}getNode(e){let t=`f${this.id}_${e}`;if(this.hasValueByKey(t))return this.uniforms[t]}getValue(e){let t=`f${this.id}_${e}`;if(this.hasValueByKey(t))return this.uniforms[t].value}getName(e){let t=/f\d+_(.*)/.exec(e);if(t&&t.length>1)return t[1];console.log(`Layer.getName: error ${e}`)}getNames(){let e=[];for(let t in this.uniforms){let i=this.getName(t);i&&e.push(i)}return e}},Aw=class extends Ab{constructor(e,t,i,r,s,a,o,l,h){super(e,t,i,r,h),this.params=r,this.color=s,this.mode=a,this.alpha=o,this.isMask=l}},AS=class extends Ab{constructor(e,t,i,r,s,a){super(e,t,i,r,a),this.position=s}},A_=class extends Ab{constructor(e,t,i,r,s,a){super(e,t,i,s,a),this.node=r}static createLightLayer(e,t,i,r){let s,a=new SJ(Ax(i.alpha,r)),o=new _c(i.mode),l=new SJ(i.bumpMapIntensity),h=new SJ(Ax(i.alphaOverride,r)),c;if(i.visible){if("lambert"===i.category){s=new _X;let e=new _h(r.color(i.emissive)??0),t=new _d(i.occlusion??!0);c={emissive:e,occlusion:t},s.emissive=e,s.occlusion=t}else if("toon"===i.category){s=new _Z;let e=new SJ(i.shininess??30),t=new _h(r.color(i.specular)??1118481);c={shininess:e,specular:t},s.shininess=e,s.specular=t}else if("physical"===i.category){s=new _K;let e=new SJ(i.roughness??.3),t=new SJ(i.metalness??0),r=new SJ(i.reflectivity??.5),a=new _d(i.occlusion??!0);c={roughness:e,metalness:t,reflectivity:r,occlusion:a},s.roughness=e,s.metalness=t,s.reflectivity=r,s.occlusion=a}else{s=new _Q;let e=new SJ(i.shininess??30),t=new _h(void 0!==i.specular?r.color(i.specular)??1118481:1118481),a=new _d(i.occlusion??!0);c={shininess:e,specular:t,occlusion:a},s.shininess=e,s.specular=t,s.occlusion=a}}else s=new _q,c={};
5423return s.alpha=new SJ(1),s.shadingAlpha=a,s.shadingBlend=o,s.bumpMapIntensity=l,s.alphaOverride=h,c.alpha=s.shadingAlpha,c.mode=s.shadingBlend,c.bumpMapIntensity=s.bumpMapIntensity,c.alphaOverride=s.alphaOverride,new A_(e,t,i,s,c,r)}get category(){return this.node.category}};function AA(e){return{alpha:new SJ(e.alpha??1),mode:new _c(e.mode??0),isMask:new _d(e.isMask??!1)}}function AM(e,t,i,r){if("displace"===i.type&&("intensity"===e||"visible"===e)){let e=t.uniforms[`f${t.id}_intensity`];return e?(e.value=i.intensity*(i.visible?1:0),e):void 0}if("displace"!==i.type&&("alpha"===e||"visible"===e)){let s=t.uniforms[`f${t.id}_alpha`];if(!s)return;if(s.value=Ax(i.alpha,r)*(i.visible?1:0),"outline"===i.type&&"visible"===e){let e=t.uniforms[`f${t.id}_compensation`];e&&(e.value=i.compensation&&i.visible)}return s}}function AE(e,t){let i=0,r=e.layers.find(e=>"light"===e.data.type);if(r){let e=r.data,i=Number(t.getVariable(e.alphaOverride));if(("string"==typeof e.alphaOverride?i/100:e.alphaOverride)<1)return!0}for(let r of e.layers){if("displace"!==r.data.type&&r.data.isMask)return!0;if("displace"!==r.data.type&&"alpha"in r.data&&"light"!==r.data.type&&"fresnel"!==r.data.type&&"texture"!==r.data.type&&"matcap"!==r.data.type&&"rainbow"!==r.data.type&&"outline"!==r.data.type&&"pattern"!==r.data.type){let e=r.data.visible?r.data.alpha:0;if("string"==typeof e&&(e=Math.max(0,Math.min(1,Number(t.getVariable(e)??100)/100))),1===e&&"depth"===r.data.type||"gradient"===r.data.type){for(let t of r.data.colors)if(t[3]<1){e=t[3];break}}else if(1===e&&"noise"===r.data.type){let i=Math.min(t.color(r.data.colorA).a,Math.min(t.color(r.data.colorB).a,Math.min(t.color(r.data.colorC).a,t.color(r.data.colorD).a)));i<1&&(e=i)}i+=(1-i)*e}}return i<1}var AC=class extends r5{constructor(){super(void 0),this.flatShading=!1,this.needsJitter=!0,this.shadersPatchedForShapeBlend=!1,this.nodeContextUuid=0,this.fog=!0,this.dithering=!0,this.vertexColors=!0,this.transparent=!0}customProgramCacheKey(){return""}},AT=class extends AC{constructor(e,t,i,r){super(),this.flatShading=e,this.side=t,this.wireframe=i,this.root=r}updateAfterBuild(){let e=this.root;this.lights=e.lights,this.vertexShader=e.vertexShader,this.fragmentShader=e.fragmentShader,Object.assign(this.defines,e.defines),Object.assign(this.uniforms,e.uniforms),this.extensions=e.extensions,this.transparent=e.transparent,this.cacheKey=e.customProgramCacheKey()+"flat"+this.flatShading+this.side}onBeforeCompile(e,t){this.root.onBeforeCompile(e)}get data(){return this.root.data}get category(){return this.root.category}get hasAO(){return this.root.hasAO}getFlavor(e,t,i,r){return this.root.getFlavor(e,t,i,r)}get layers(){return this.root.layers}get fragment(){return this.root.fragment}getLayersOfType(e){return this.root.getLayersOfType(e)}getLayerByUuid(e){return this.root.getLayerByUuid(e)}updateByOp(e,t,i){this.root.updateByOp(e,t,i)}nodeMaterialDispose(){this.root.nodeMaterialDispose()}},AP=class extends AC{constructor(e,t,i=!0){super(),this.data=e,this.allowVariableSaves=i,this.layerIdGen=0,this.flavors=[],this.masks={},this.type="NodeMaterial",this.updaters=[],this.needsJitter=t.shared.needsJitter,SI.startContext(this),this.reset0(e,t),SI.endContext(this)}get nodeMaterial(){return this}getFlavor(e,t,i,r){let s=i?6:(e?3:0)+t;if(0===(s+=((r?.resolutionLevel??0)-(r?.useChildrenColors?4:0))*7))return this;void 0===this.flavors&&(this.flavors=[]),s-=1;let a=this.flavors[s];return void 0===a&&((a=new AT(e,t,i,this)).needsJitter=this.needsJitter,this.flavors[s]=a,a.flatShading=e,a.side=t,a.updateAfterBuild(),r&&(a.defines.SHAPEBLEND=r.resolutionLevel,a.defines.SHAPEBLEND_C=r.useChildrenColors?1:0)),a}get fragment(){return this.lightLayer.node}get category(){return this.lightLayer.category}get hasAO(){return this.lightLayer.getNode("occlusion")?.value??!1}reset(e,t,i=!1){SI.startContext(this),(this.data!==e||i)&&this.reset0(e,t),SI.endContext(this)}reset0(e,t){this.data=e;let i=e.layers??vk.defaultTwoLayerData("phong").layers;try{this.layers=i.map(e=>Ab.create(this.layerIdGen++,e.id,e.data,t.shared))}catch{this.layers=[]}this.layers.reverse(),this.name=e.name??"Untitled Material",this.onUpdate(t.shared),this.transparent=AE(e,t.shared),this.saveVariableLocations(t)}onVariableUpdate(e,t,i){if("alphaOverride"===e[0])this.transparent=AE(this.data,i.shared),this.lightLayer.setValue("alphaOverride",Math.max(0,Math.min(Number(t)/100,1)));else if("layer"===e[0]){let r=e[1],s=e[2];if(r&&s){let e=this.layers.find(e=>e.uuid===r);e?.hasValue(s)&&("alpha"===s?(this.transparent=AE(this.data,i.shared),e.setValue(s,Math.max(0,Math.min(Number(t)/100,1)))):e.setValue(s,t))}}}saveVariableLocations(e){if(!this.allowVariableSaves)return;let t=this.data.layers.find(e=>"light"===e.data.type);t&&e.shared.getVariable(t.data.alphaOverride,["material",this.uuid,"alphaOverride"]),this.data.layers.forEac
vendor: 4,368 bytes, line 5423
5423h(t=>{"alpha"in t.data&&"string"==typeof t.data.alpha&&e.shared.getVariable(t.data.alpha,["material",this.uuid,"layer",t.id,"alpha"])})}getLayersOfType(e){return this.layers.filter(t=>t.type===e)}getLayerByUuid(e){return this.layers.find(t=>t.uuid===e)}onUpdate(e){for(let t of(this.lightLayer=this.layers.find(e=>e instanceof A_),void 0===this.lightLayer&&(this.lightLayer=new A_(0,"",{...gM.defaultData("light","phong"),visible:!1},new _q,{},e)),this.dispose(),this.flavors))t&&t.dispose();this.applyTextureMaps(),this.applyMasks(),this.blendColors(),this.blendAfterColors(),this.blendPositions(),this.build(),this.nodeContextUuid=0}applyTextureMaps(){let e=this.layers.find(e=>e instanceof A_);if(!e)return;let t=e.data,i=t.bumpMap,r=t.roughnessMap;e.node.bumpMap=void 0,e.node.roughnessMap=void 0;for(let t=0;t<this.layers.length;++t){let s=this.layers[t];s instanceof Aw&&s.color instanceof _A&&(s.uuid===i&&(e.node.bumpMap=s.color),s.uuid===r&&(e.node.roughnessMap=s.color))}}updateByOp(e,t,i){if(SI.startContext(this),void 0!==t?this.data=t:t=this.data,this.transparent=AE(t,i.shared),"layers"===e.path[0]){let r=i.shared,s=e.path[1];if(void 0===s)i.scene.markNeedsUpdateRendererDirty(),this.reset0(t,i);else{0===e.type&&void 0!==e.props.occlusion&&i.scene.markNeedsUpdateRendererDirty();let a=this.layers.find(e=>e.uuid===s);if(a){let o=t.layers.data(s),l;0===e.type&&("alpha"in e.props||"alphaOverride"in e.props)&&(l="alpha"in e.props?{...e.props,alpha:Ax(e.props.alpha,r,["material",this.uuid,"layer",s,"alpha"])}:{...e.props,alphaOverride:Ax(e.props.alphaOverride,r,["material",this.uuid,"alphaOverride"])}),a.updateByOp({...e,...l?{props:l}:{},path:e.path.slice(2)},o,i)&&this.reset0(t,i)}}}else this.reset0(t,i);SI.endContext(this)}applyMasks(){for(let e=0;e<this.layers.length;++e){let t=this.layers[e];t instanceof Aw?t.color.mask=void 0:t instanceof A_&&(t.node.mask=void 0)}for(let e=0;e<this.layers.length;++e){let t=this.layers[e];if(t instanceof Aw&&t.isMask.value&&t.data.visible&&e>0){let i=e-1,r=this.layers[i];r instanceof A_?r.node.mask=new S0(t.color,t.alpha,S0.MUL):r instanceof Aw&&(r.isMask.value||(r.color.mask=new S0(t.color,t.alpha,S0.MUL)))}}}blendColors(){let e=this.layers.findIndex(e=>e instanceof Aw),t=this.layers.findIndex(e=>e instanceof A_);if(-1!==e&&e<t){let i=this.layers[e].color;for(let r=e+1;r<t;++r){let e=this.layers[r];if(e instanceof Aw){if(e.isMask.value)continue;i=new _w(i,e.color,e.alpha,e.mode)}}this.fragment.color=i}else this.fragment.color=void 0}blendAfterColors(){let e=new SK("outgoingLight","f"),t=this.layers.findIndex(e=>e instanceof A_);if(this.layers.length>t+1){for(let i=t+1;i<this.layers.length;++i){let t=this.layers[i];if(t instanceof Aw){if(t.isMask.value)continue;e=new _w(e,t.color,t.alpha,t.mode)}}this.fragment.afterColor=e}else this.fragment.afterColor=void 0}blendPositions(){let e=this.layers.filter(e=>e instanceof AS);if(e.length>0){let t=e[0].position;for(let i=1;i<e.length;++i)e[i]&&(t=new S0(t,e[i].position,S0.ADD),t=new S0(t,new SJ(.5).setReadonly(!0),S0.MUL));this.fragment.position=t}else this.fragment.position=void 0}getDefines(){return this.defines}getUniforms(){return this.uniforms}getVertexShader(){return this.vertexShader}getFragmentShader(){return this.fragmentShader}onBeforeCompile(e){this.shapeBlendhack&&this.shapeBlendhack(this),e.uniforms=this.uniforms,e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.extensionDerivatives=!0===this.extensions.derivatives,e.extensionFragDepth=!0===this.extensions.fragDepth,e.extensionDrawBuffers=!0===this.extensions.drawBuffers,e.extensionShaderTextureLOD=!0===this.extensions.shaderTextureLOD}clampUniformsForPreview(e,t){let i=(e,t,i)=>Math.min(Math.max(e,t),i);for(let r of this.layers)if("displace"===r.type){let s=i(r.uniforms[`f${r.id}_intensity`].value,e,t);r.uniforms[`f${r.id}_intensity`].value=s}}updateFrame(e){for(let t=0;t<this.updaters.length;++t)e.updateNode(this.updaters[t])}build(){let e=new _l;for(let t of(e.needsJitter=this.needsJitter,this.lights=this.lightLayer.data.visible,e.build(this.fragment,this.fragment),this.vertexShader=e.getCode("vertex"),this.fragmentShader=e.getCode("fragment"),this.defines=e.defines,this.uniforms=e.uniforms,this.extensions=e.extensions,this.updaters=e.updaters,this.flavors))t&&t.updateAfterBuild();return this.shadersPatchedForShapeBlend=!1,this}
5423nodeMaterialDispose(){for(let e of(this.layers.forEach(e=>e.dispose()),super.dispose(),this.flavors))e&&e.dispose()}assetsLoaded(){for(let e of this.layers)if(e instanceof Aw){let t=e.params.texture;if(t instanceof _m&&!t.image.loaded)return!1}return!0}};Object.defineProperties(AC.prototype,{properties:{get:function(){return this.fragment.properties}}});var AD,AI=class extends AP{constructor(e,t,i){super(e,t,!1),this.uuid=i,this.allowVariableSaves=!0,this.saveVariableLocations(t)}},AO=new Map,AR=new Promise(e=>{AD=e}),AL=!1;AR.then(e=>Az=e);var AB,Az,AF,AN=class{constructor({src:e,volume:t,delay:i,loop:r}){let s;this._volume=1,this.delay=0,this._loop=1,this.loopsRemaining=0,this._status="stopped",this.onEnd=()=>{this.loopsRemaining===1/0?this.replay():this.loopsRemaining>1?(this.replay(),this.loopsRemaining--):(this._status="stopped",this.loopsRemaining=this._loop)},s="string"==typeof e?{src:e}:{src:function(e){if("string"==typeof e)return e;let t=AO.get(e);return t||(t={url:URL.createObjectURL(new Blob([e]))},AO.set(e,t)),t.url}(e),format:"wav"},this.sound=new Az.Howl(s),this.sound.on("end",this.onEnd),this.src=e,void 0!==t&&(this.volume=t),void 0!==i&&(this.delay=i),void 0!==r&&(this.loop=r)}get status(){return this._status}get volume(){return this._volume}set volume(e){this._volume=e,this.sound.volume(e)}get loop(){return this._loop}set loop(e){this._loop=e,this.loopsRemaining=e}replay(){this.clearDelay(),this.delayTimerId=window.setTimeout(()=>{this.sound.play(),this.clearDelay()},this.delay)}fade(e,t=1e3){e?(this.sound.volume(this._volume),this.clearFade(),this.fadeTimerId=window.setTimeout(()=>{this.sound.fade(this._volume,0,t),this.clearFade()},e)):this.sound.fade(this._volume,0,t)}on(e,t,i){this.sound.on(e,t,i)}off(e,t,i){this.sound.off(e,t,i)}play(){"playing"===this._status||this.sound.playing()||("paused"===this._status?(0===this.sound.seek()?this.replay():this.sound.play(),this._status="playing"):"stopped"===this._status&&(this.replay(),this._status="playing"))}pause(){"playing"===this._status&&(this.sound.pause(),this.clearFade(),this.clearDelay(),this._status="paused")}stop(){this.sound.stop(),this.loopsRemaining=this._loop,this.clearFade(),this.clearDelay(),this._status="stopped"}clearFade(){this.fadeTimerId&&(clearTimeout(this.fadeTimerId),delete this.fadeTimerId)}clearDelay(){this.delayTimerId&&(clearTimeout(this.delayTimerId),delete this.delayTimerId)}dispose(e=!1){this.off(),this.stop(),this.clearFade(),this.clearDelay()}},Ak=class{constructor(){this.type="ShapePath",this.color=new ii,this.subPaths=[],this.currentPath=null}moveTo(e,t){return this.currentPath=new oa,this.subPaths.push(this.currentPath),this.currentPath.moveTo(e,t),this}lineTo(e,t){return this.currentPath?.lineTo(e,t),this}quadraticCurveTo(e,t,i,r){return this.currentPath?.quadraticCurveTo(e,t,i,r),this}bezierCurveTo(e,t,i,r,s,a){return this.currentPath?.bezierCurveTo(e,t,i,r,s,a),this}splineThru(e){return this.currentPath?.splineThru(e),this}toShapes(){let e={ORIGIN:0,DESTINATION:1,BETWEEN:2,LEFT:3,RIGHT:4,BEHIND:5,BEYOND:6},t={loc:e.ORIGIN,t:0};function i(i,r,s){let a,o=s.x-r.x,l=s.y-r.y,h=i.x-r.x,c=i.y-r.y,d=o*c-h*l;if(i.x===r.x&&i.y===r.y){t.loc=e.ORIGIN,t.t=0;return}if(i.x===s.x&&i.y===s.y){t.loc=e.DESTINATION,t.t=1;return}if(d<-Number.EPSILON){t.loc=e.LEFT;return}if(d>Number.EPSILON){t.loc=e.RIGHT;return}if(o*h<0||l*c<0){t.loc=e.BEHIND;return}if(Math.sqrt(o*o+l*l)<Math.sqrt(h*h+c*c)){t.loc=e.BEYOND;return}a=0!==o?h/o:c/l,t.loc=e.BETWEEN,t.t=a}let r=0,s=999999999,a=-999999999,o=[];this.subPaths.forEach(e=>{let t=e.getPoints(),i=-999999999,l=999999999,h=-999999999,c=999999999;for(let e=0;e<t.length;e++){let r=t[e];r.y>i&&(i=r.y),r.y<l&&(l=r.y),r.x>h&&(h=r.x),r.x<c&&(c=r.x)}a<=h&&(a=h+1),s>=c&&(s=c-1),t.length&&o.push({curves:e.curves,points:t,isCW:oT.isClockWise(t),identifier:r++,boundingBox:new lz(new tQ(c,l),new tQ(h,i))})});let l=o.map(r=>(function(r,s,a,o,l){(null==l||""===l)&&(l="nonzero");let h=new tQ;r.boundingBox.getCenter(h);let c=function(r,s,a){let o=new tQ;s.getCenter(o);let l=[];return a.forEach(s=>{s.boundingBox.containsPoint(o)&&(function(r,s){let a=[],o=[];for(let l=1;l<r.length;l++){let h=r[l-1],c=r[l];for(let r=1;r<s.length;r++){let l=function(r,s,a,o){let l=r.x,h=s.x,c=a.x,d=o.x,u=r.y,p=s.y,f=a.y,m=o.y,g=(d-c)*(u-f)-(m-f)*(l-c),v=(m-f)*(h-l)-(d-c)*(p-u),y=g/v,x=((h-l)*(u-f)-(p-u)*(l-c))/v;if(0===v&&0!==g||y<=0||y>=1||x<0||x>1)return null;if(0===g&&0===v){for(let c=0;c<2;c++)if(i(0===c?a:o,r,s),t.loc===e.ORIGIN){let e=0===c?a:o;return{x:e.x,y:e.y,t:t.t}}else if(t.loc===e.BETWEEN)return{x:+(l+t.t*(h-l)).toPrecision(10),y:+(u+t.t*(p-u)).toPrecision(10),t:t.t};return null}for(let l=0;l<2;l++)if(i(0===l?a:o,r,s),t.loc===e.ORIGIN){let e=0===l?a:o;return{x:e.x,y:e.y,t:t.t}}return{x:+(l+y*(h-l)).toPrecision(10),y:+(u+y*(p-u)).toPrecision(10),t:y}}(h,c,s[r-1],s[r]);null!==l&&void 0===a.find(e=>e.t<=l.t+Number.EPSILON&&e.t>=l.t-Number.EPSILON)&&(a.push(l),o.push(new tQ(l.x,l.y)))}}return o}
5423)(r,s.points).forEach(e=>{l.push({identifier:s.identifier,isCW:s.isCW,point:e})})}),l.sort((e,t)=>e.point.x-t.point.x),l}([new tQ(a,h.y),new tQ(o,h.y)],r.boundingBox,s);c.sort((e,t)=>e.point.x-t.point.x);let d=[],u=[];c.forEach(e=>{e.identifier===r.identifier?d.push(e):u.push(e)});let p=d[0].point.x,f=[],m=0;for(;m<u.length&&u[m].point.x<p;)f.length>0&&f[f.length-1]===u[m].identifier?f.pop():f.push(u[m].identifier),m++;if(f.push(r.identifier),"evenodd"===l){let e=f.length%2==0,t=f[f.length-2];return{identifier:r.identifier,isHole:e,for:t}}if("nonzero"===l){let e=!0,t=null,i=null;for(let r=0;r<f.length;r++){let a=f[r];s[a]&&(e?(i=s[a].isCW,e=!1,t=a):i!==s[a].isCW&&(i=s[a].isCW,e=!0))}return{identifier:r.identifier,isHole:e,for:t}}console.warn('fill-rule: "'+l+'" is currently not implemented.')})(r,o,s,a,this.userData?.style.fillRule)),h=[];return o.forEach(e=>{let t=l[e.identifier];if(t&&!t.isHole){let t=new od;t.curves=e.curves,l.filter(t=>t?.isHole&&t.for===e.identifier).forEach(e=>{if(e){let i=o[e.identifier],r=new oa;r.curves=i.curves,t.holes.push(r)}}),h.push(t)}}),h}},AU=!1,AV=new Promise(e=>{AF=e}),Aj=!1;async function AG(e){return await (await fetch(e)).arrayBuffer()}var AH=new class{async load(e,t,i=()=>{}){let{load:r}=await AV;r(e,(e,r)=>{e||!r?i(e??"Something went wrong"):t(r)})}async parse(e){let{parse:t,Bidi:i}=await AV;try{let r=t(e),s=new i;return s.registerModifier("glyphIndex",null,e=>r.charToGlyphIndex(e.char)),s.applyFeatures(r,r.defaultRenderOptions.features),{font:r,bidi:s}}catch(e){console.error(e)}}};async function AW(e){let t,i,r=!1;if(e.url?(t=await AG(e.url),i=e.url,r=e.url.startsWith("/")):e.data&&(t=e.data.buffer.slice(e.data.byteOffset,e.data.byteOffset+e.data.byteLength)),t){if(!AU)return{font:void 0,url:i,intercepted:r,arr:t,bidi:null};{let e=await AH.parse(t);if(e)return{font:e.font,url:i,intercepted:r,arr:t,bidi:e.bidi}}}}var Aq=class{constructor(e){this._arrayBuffer=new ArrayBuffer(1),this._isLoaded=!1,this._intercepted=!1,this._isUserFont=e.isUserFont??!1,this._loadingPromise=AW(e).then(e=>{e&&(this._arrayBuffer=e.arr,this._url=e.url,this.font=e.font,this._intercepted=e.intercepted,this._isLoaded=!0,this._bidi=e.bidi)})}update(e){this._isLoaded=!1,this._isUserFont=e.isUserFont??!1,this._loadingPromise=AW(e).then(e=>{e&&(this._arrayBuffer=e.arr,this._url=e.url,this.font=e.font,this._intercepted=e.intercepted,this._isLoaded=!0,this._bidi=e.bidi)})}get url(){return this._url}get intercepted(){return this._intercepted}get isLoaded(){return this._isLoaded}get loadingPromise(){return this._loadingPromise}reverseLigaturesTable(e,t,i){if(!this._bidi)return[];let r=this._bidi;r.getTextGlyphs(t);let s=r.tokenizer.tokens,a=[],o=0,l=i.length===s.length;for(let r=0;r<i.length;r++){let h=i[r].index,c=String.fromCharCode(i[r].unicode),d=s[o];if(d.state.glyphIndex===h||d.state.fina===h||d.state.medi===h||d.state.init===h||l)a.push({char:c,index:h,replacements:[d.state.glyphIndex],replacementChars:[d.char]}),o++;else{let i=d.char,r="",s=[d.state.glyphIndex],l=[],u=!1;for(;!u;)o++,i+=r=t.charAt(o),s.push(e.charToGlyphIndex(r)),1===(l=e.stringToGlyphs(i)).length&&l[0].index===h&&(u=!0),o>t.length&&(u=!0);a.push({char:c,index:h,replacements:s,replacementChars:Array.from(i)}),o++}}return a}generateShapes(e,t){if(!this._isLoaded)return;let i=this.font,r=t.fontSize/this.unitsPerEm,s=t.fontSize*t.lineHeight,a=e.map(e=>this.getTextWidth(e,t)),o=t.width,l=this.getCharWidth(`
5424`,t),h=1===t.horizontalAlign?l:0,c=this.computeSpaceWidthForLine(e,0,t),d=this.getLineInitialOffsetX(a[0],o,t.horizontalAlign,e[0],l),u=this.getLineInitialOffsetY(s,e.length,t.height,r,t.verticalAlign),p=[],f=e.map(e=>[]),m=e.map(e=>[]),g;for(let v=0;v<e.length;v++){let y=e[v],x={features:{liga:!0}},b=[];try{b=i.stringToGlyphs(y,x)}catch(e){console.warn(e)}d=this.getLineInitialOffsetX(a[v],o,t.horizontalAlign,y,l);let w=[];try{w=this.reverseLigaturesTable(i,y,b)}catch(e){console.warn(e)}c=this.computeSpaceWidthForLine(e,v,t);for(let e=0;e<b.length;e++){let s=b[e],a=0===s.index?`
5425`:s.unicode?String.fromCharCode(s.unicode):void 0,o=w[e],l=0,y=0;0===e&&2===t.horizontalAlign&&void 0!==s.leftSideBearing&&(y=-s.leftSideBearing*r),g&&(l=i.getKerningValue(s,g)*r),d+=y+l;let x=0;if(a===`
5426`)x=h;else if(" "===a)x=c;else{let e=this.createPath(s,r,d,u,t);e&&(x=e.offsetX-(l+y),p.push(e.path))}if(1===o.replacements.length)m[v].push([d,u]),f[v].push(x);else{let e=o.replacements.map(e=>(i.glyphs.get(e).advanceWidth??0)*r),t=e.reduce((e,t)=>
5426e+=t,0),s=e.map(e=>e/t),a=d;for(let e=0;e<s.length;e++){let t=x*s[e];m[v].push([a,u]),f[v].push(t),a+=t}}d+=x,g=s}u-=s}let v=[];for(let e=0,t=p.length;e<t;e++)v.push(...p[e].toShapes());return{shapes:v,charWidths:f,lineWidths:a,charCoords:m}}get isUserFont(){return this._isUserFont}get arrayBuffer(){return this._arrayBuffer}get ascender(){return this.font?.ascender??0}get descender(){return this.font?.descender??0}get familyName(){return this.font?.names.fontFamily??""}get subfamilyName(){return this.font?.names.fontSubfamily??""}get unitsPerEm(){return this.font?.unitsPerEm??1}getLineInitialOffsetX(e,t,i,r,s){return(3===i||2===i)&&r.indexOf(`
5427`)>=0&&(e-=s),3===i?.5*t-.5*e:2===i?t-e:0}getLineInitialOffsetY(e,t,i,r,s){let a=t*e,o=Math.abs(this.ascender-this.descender)*r,l=-this.ascender*r-(e-o)/2;return 3===s?-(i-a-l):2===s?-(.5*i-.5*a-l):l}createPath(e,t,i,r,s){let a=e.getPath(i,-r,s.fontSize,{kerning:!1,letterSpacing:s.letterSpacing});if(!a){console.error('THREE.Font: character "'+e+'" does not exists in font family '+this.familyName+".");return}let o=new Ak,l=(e.advanceWidth??1)*t;if(e)for(let e of a.commands){let t=o.currentPath?.currentPoint;if(!(t&&"Z"!==e.type&&t.x===e.x&&-t.y===e.y))switch(e.type){case"M":o.moveTo(e.x,-e.y);break;case"L":o.lineTo(e.x,-e.y);break;case"Q":o.quadraticCurveTo(e.x1,-e.y1,e.x,-e.y);break;case"C":o.bezierCurveTo(e.x1,-e.y1,e.x2,-e.y2,e.x,-e.y)}}return o.subPaths.forEach(e=>{let t=function(e){if(e.length){let t=e[0];if(t instanceof n9)return t.v1;if(t instanceof n6||t instanceof oe)return t.v0}}(e.curves);void 0!==t&&e.currentPoint.distanceTo(t)>0&&e.lineTo(t.x,t.y)}),{offsetX:l+s.fontSize*s.letterSpacing,path:o}}getCharWidth(e,t){return this.font?.getAdvanceWidth(e,t.fontSize,{kerning:!0,letterSpacing:t.letterSpacing})??0}getTextWidth(e,t){return this.font?.getAdvanceWidth(e,t.fontSize,{kerning:!0,letterSpacing:t.letterSpacing})??0}computeSpaceWidthForLine(e,t,i){let r=this.getCharWidth(" ",i),s=e[t];if(s){let a=this.countSpaces(s.trimEnd());if(4===i.horizontalAlign&&t<e.length-1&&a)return(i.width-(this.getTextWidth(s,i)-a*r))/a}return r}countSpaces(e){return(e.match(/ /g)||[]).length}},AX=class{constructor(){this.objects=new Map,this.unreachable=new Set}getCached(e){return this.objects.get(e)}get size(){return this.objects.size}get(e,t,i){let r=this.objects.get(e);return void 0===r?(r=this.createObject(e,t,i),this.objects.set(e,r)):r.isShared=!0,r}forceDelete(e){let t=this.objects.get(e);t&&(this.disposeObject(t),this.objects.delete(e))}mutateIfUnique(e,t){let i=this.objects.get(e);if(i&&!0!==i.isShared)return this.objects.delete(e),this.objects.set(t,i),i}startGc(){this.unreachable=new Set(this.objects.keys())}markAsReachable(e,t){t===this.objects.get(e)&&this.unreachable.delete(e)}endGc(){this.unreachable.forEach(e=>{this.disposeObject(this.objects.get(e)),this.objects.delete(e)}),this.unreachable.clear()}dispose(){this.objects.forEach(e=>{this.disposeObject(e)}),this.objects.clear()}},AY=class extends AX{constructor(e){super(),this.flatShading=e}disposeObject(e){e.dispose()}createObject(e,t,i){let r=w4(e,t,this.flatShading,i);return r.computeBoundingSphere(),r}},AQ={markNeedsUpdateRendererDirty:()=>{}},AK=class{constructor(e,t){this.id=e,this.userWebhook=t,this.result=void 0,this._connected=!1,this.emitter=wR(),this.reconnectWaitFor=1e3,this._onError=e=>{this.eventSource?.removeEventListener("message",this._onMessage),this.eventSource?.removeEventListener("error",this._onError),this.eventSource?.removeEventListener("open",this._onConnected),this._scheduleReconnect()},this._onConnected=e=>{clearTimeout(this.scheduledReconnectHandle),this.reconnectWaitFor=1e3,this._connected=!0},this._onDisconnected=()=>{clearTimeout(this.scheduledReconnectHandle),this.reconnectWaitFor=1e3,this._connected=!1},this._onMessage=e=>{let t=e.data,i;try{i=JSON.parse(t)}catch(e){console.error("Error parsing webhook message",e)}if(i){let e=!1;this.userWebhook.parametersSchemas.forEach(({data:t})=>{var r,s;let a;void 0!==i[t.name]&&(r=i[t.name],s=t.type,a=typeof r,("string"===s||"number"===s)&&a===s||"boolean"===s&&("true"===r||"false"===r||!0===r||!1===r)||"image"===s&&"string"===a&&r.startsWith("http"))&&(void 0===this.result&&(this.result={}),this.result[t.name]=i[t.name],e=!0)}),e&&this.emitter.emit("message",{userWebhookId:this.id})}}}connect(){clearTimeout(this.scheduledReconnectHandle),this.userWebhook.url&&(this.eventSource=new EventSource("https://hooks.spline.design/events?hashFile="+this.userWebhook.url),this.eventSource.addEventListener("message",this._onMessage),this.eventSource.addEventListener("error",this._onError),this.eventSource.addEventListener("open",this._onConnected))}disconnect(){this.eventSource?.removeEventListener("message",this._onMessage),this.eventSource?.removeEventListener("error",this._onError),this.eventSource?.removeEventListener("open",this._onConnected),this.eventSource?.close(),this._onDisconnected(),clearTimeout(this.scheduledReconnectHandle)}_scheduleReconnect(){this.reconnectWaitFor*=2,this.reconnectWaitFor>512e3&&(this.reconnectWaitFor=512e3),clearTimeout(this.scheduledReconnectHandle),this.scheduledReconnectHandle=setTimeout(()=>{this.scheduledReconnectHandle=void 0,this.connect()},this.reconnectWaitFor)}update(e){this.userWebhook=e}dispose(){this._connected&&this.disconnect()}get connected(){return this._connected}on(e,t){this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t)}getParametersKeys(){return this.userWebhook.parametersSchemas.map(e=>e.data.name)}getParameterValue(e){if(this.getParametersKeys().includes(e)){if(this.result)return this.result?.[e];for(let t of this.userWebhook.parametersSchemas)if(t.data.name===e)return yf.defaultParameterValueByType(t.data.type)}}},AZ=globalThis.atob,AJ=globalThis.btoa,A$=class{static floatTo16BitPCM(e){let t=new ArrayBuffer(2*e.length),i=new DataView(t),r=0;for(let t=0;t<e.length;t++,r+=2){let s=Math.max(-1,Math.min(1,e[t]));i.setInt16(r,s<0?32768*s:32767*s,!0)}return t}static base64ToArrayBuffer(e){let t=AZ(e),i=t.length,r=new Uint8Array(i);for(let e=0;e<i;e++)r[e]=t.charCodeAt(e);return r.buffer}static arrayBufferToBase64(e){e instanceof Float32Array?e=this.floatTo16BitPCM(e):e instanceof Int16Array&&(e=e.buffer);let t="",i=new Uint8Array(e);for(let e=0;e<i.length;e+=32768){let r=i.subarray(e,e+32768);t+=String.fromCharCode.apply(null,r)}return AJ(t)}static mergeInt16Arrays(e,t){if(e instanceof ArrayBuffer&&(e=new Int16Array(e)),t instanceof ArrayBuffer&&(t=new Int16Array(t)),!(e instanceof Int16Array)||
5427!(t instanceof Int16Array))throw Error("Both items must be Int16Array");let i=new Int16Array(e.length+t.length);for(let t=0;t<e.length;t++)i[t]=e[t];for(let r=0;r<t.length;r++)i[e.length+r]=t[r];return i}static generateId(e,t=21){let i="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",r=Array(t-e.length).fill(0).map(e=>i[Math.floor(Math.random()*i.length)]).join("");return`${e}${r}`}},A0=e=>new Promise(t=>setTimeout(()=>t(),e)),A1=class{constructor(){this.eventHandlers={},this.nextEventHandlers={}}clearEventHandlers(){return this.eventHandlers={},this.nextEventHandlers={},!0}on(e,t){return this.eventHandlers[e]=this.eventHandlers[e]||[],this.eventHandlers[e].push(t),t}onNext(e,t){return this.nextEventHandlers[e]=this.nextEventHandlers[e]||[],this.nextEventHandlers[e].push(t),t}off(e,t){let i=this.eventHandlers[e]||[];if(t){let r=i.indexOf(t);if(-1===r)throw Error(`Could not turn off specified event listener for "${e}": not found as a listener`);i.splice(r,1)}else delete this.eventHandlers[e];return!0}offNext(e,t){let i=this.nextEventHandlers[e]||[];if(t){let r=i.indexOf(t);if(-1===r)throw Error(`Could not turn off specified next event listener for "${e}": not found as a listener`);i.splice(r,1)}else delete this.nextEventHandlers[e];return!0}async waitForNext(e,t=null){let i=Date.now(),r;for(this.onNext(e,e=>r=e);!r;){if(t&&Date.now()-i>t)return null;await A0(1)}return r}dispatch(e,t){for(let i of[].concat(this.eventHandlers[e]||[]))i(t);for(let i of[].concat(this.nextEventHandlers[e]||[]))i(t);return delete this.nextEventHandlers[e],!0}},A2=class extends A1{constructor({url:e,apiKey:t,dangerouslyAllowAPIKeyInBrowser:i,debug:r}={}){if(super(),this.defaultUrl="wss://api.openai.com/v1/realtime",this.url=e||this.defaultUrl,this.apiKey=t||null,this.debug=!!r,this.ws=null,globalThis.document&&this.apiKey&&!i)throw Error('Can not provide API key in the browser without "dangerouslyAllowAPIKeyInBrowser" set to true')}isConnected(){return!!this.ws}log(...e){let t=[`[Websocket/${new Date().toISOString()}]`].concat(e).map(e=>"object"==typeof e&&null!==e?JSON.stringify(e,null,2):e);
5427return this.debug&&console.log(...t),!0}async connect({model:e}={model:"gpt-4o-realtime-preview-2024-10-01"}){if(this.apiKey||this.url!==this.defaultUrl||console.warn(`No apiKey provided for connection to "${this.url}"`),this.isConnected())throw Error("Already connected");if(globalThis.document){this.apiKey&&console.warn("Warning: Connecting using API key in the browser, this is not recommended");let t=new globalThis.WebSocket(`${this.url}${e?`?model=${e}`:""}`,["realtime",`openai-insecure-api-key.${this.apiKey}`,"openai-beta.realtime-v1"]);return t.addEventListener("message",e=>{let t=JSON.parse(e.data);this.receive(t.type,t)}),new Promise((e,i)=>{let r=()=>{this.disconnect(t),i(Error(`Could not connect to "${this.url}"`))};t.addEventListener("error",r),t.addEventListener("open",()=>{this.log(`Connected to "${this.url}"`),t.removeEventListener("error",r),t.addEventListener("error",()=>{this.disconnect(t),this.log(`Error, disconnected from "${this.url}"`),this.dispatch("close",{error:!0})}),t.addEventListener("close",()=>{this.disconnect(t),this.log(`Disconnected from "${this.url}"`),this.dispatch("close",{error:!1})}),this.ws=t,e(!0)})})}}disconnect(e){if(!e||this.ws===e)return this.ws&&this.ws.close(),this.ws=null,!0}receive(e,t){return this.log("received:",e,t),this.dispatch(`server.${e}`,t),this.dispatch("server.*",t),!0}send(e,t){if(!this.isConnected())throw Error("RealtimeAPI is not connected");if("object"!=typeof(t=t||{}))throw Error("data must be an object");let i={event_id:A$.generateId("evt_"),type:e,...t};return this.dispatch(`client.${e}`,i),this.dispatch("client.*",i),this.log("sent:",e,i),this.ws.send(JSON.stringify(i)),!0}},A3=class{constructor(){tS(this,"defaultFrequency",24e3),tS(this,"EventProcessors",{"conversation.item.created":e=>{let{item:t}=e,i=JSON.parse(JSON.stringify(t));if(this.itemLookup[i.id]||(this.itemLookup[i.id]=i,this.items.push(i)),i.formatted={},i.formatted.audio=new Int16Array(0),i.formatted.text="",i.formatted.transcript="",this.queuedSpeechItems[i.id]&&(i.formatted.audio=this.queuedSpeechItems[i.id].audio,delete this.queuedSpeechItems[i.id]),i.content)for(let e of i.content.filter(e=>["text","input_text"].includes(e.type)))i.formatted.text+=e.text;return this.queuedTranscriptItems[i.id]&&(i.formatted.transcript=this.queuedTranscriptItems.transcript,delete this.queuedTranscriptItems[i.id]),"message"===i.type?"user"===i.role?(i.status="completed",this.queuedInputAudio&&(i.formatted.audio=this.queuedInputAudio,this.queuedInputAudio=null)):i.status="in_progress":"function_call"===i.type?(i.formatted.tool={type:"function",name:i.name,call_id:i.call_id,arguments:""},i.status="in_progress"):"function_call_output"===i.type&&(i.status="completed",i.formatted.output=i.output),{item:i,delta:null}},"conversation.item.truncated":e=>{let{item_id:t,audio_end_ms:i}=e,r=this.itemLookup[t];if(!r)throw Error(`item.truncated: Item "${t}" not found`);let s=Math.floor(i*this.defaultFrequency/1e3);return r.formatted.transcript="",r.formatted.audio=r.formatted.audio.slice(0,s),{item:r,delta:null}},"conversation.item.deleted":e=>{let{item_id:t}=e,i=this.itemLookup[t];if(!i)throw Error(`item.deleted: Item "${t}" not found`);delete this.itemLookup[i.id];let r=this.items.indexOf(i);return r>-1&&this.items.splice(r,1),{item:i,delta:null}},"conversation.item.input_audio_transcription.completed":e=>{let{item_id:t,content_index:i,transcript:r}=e,s=this.itemLookup[t],a=r||" ";return s?(s.content[i].transcript=r,s.formatted.transcript=a,{item:s,delta:{transcript:r}}):(this.queuedTranscriptItems[t]={transcript:a},{item:null,delta:null})},"input_audio_buffer.speech_started":e=>{let{item_id:t,audio_start_ms:i}=e;return this.queuedSpeechItems[t]={audio_start_ms:i},{item:null,delta:null}},"input_audio_buffer.speech_stopped":(e,t)=>{let{item_id:i,audio_end_ms:r}=e;this.queuedSpeechItems[i]||(this.queuedSpeechItems[i]={audio_start_ms:r});let s=this.queuedSpeechItems[i];if(s.audio_end_ms=r,t){let e=Math.floor(s.audio_start_ms*this.defaultFrequency/1e3),i=Math.floor(s.audio_end_ms*this.defaultFrequency/1e3);s.audio=t.slice(e,i)}return{item:null,delta:null}},"response.created":e=>{let{response:t}=e;return this.responseLookup[t.id]||(this.responseLookup[t.id]=t,this.responses.push(t)),{item:null,delta:null}},"response.output_item.added":e=>{let{response_id:t,item:i}=e,r=this.responseLookup[t];if(!r)throw Error(`response.output_item.added: Response "${t}" not found`);return r.output.push(i.id),{item:null,delta:null}},"response.output_item.done":e=>{let{item:t}=e;if(!t)throw Error('response.output_item.done: Missing "item"');let i=this.itemLookup[t.id];if(!i)throw Error(`response.output_item.done: Item "${t.id}" not found`);return i.status=t.status,{item:i,delta:null}},"response.content_part.added":e=>{let{item_id:t,part:i}
5427=e,r=this.itemLookup[t];if(!r)throw Error(`response.content_part.added: Item "${t}" not found`);return r.content.push(i),{item:r,delta:null}},"response.audio_transcript.delta":e=>{let{item_id:t,content_index:i,delta:r}=e,s=this.itemLookup[t];if(!s)throw Error(`response.audio_transcript.delta: Item "${t}" not found`);return s.content[i].transcript+=r,s.formatted.transcript+=r,{item:s,delta:{transcript:r}}},"response.audio.delta":e=>{let{item_id:t,content_index:i,delta:r}=e,s=this.itemLookup[t];if(!s)throw Error(`response.audio.delta: Item "${t}" not found`);let a=new Int16Array(A$.base64ToArrayBuffer(r));return s.formatted.audio=A$.mergeInt16Arrays(s.formatted.audio,a),{item:s,delta:{audio:a}}},"response.text.delta":e=>{let{item_id:t,content_index:i,delta:r}=e,s=this.itemLookup[t];if(!s)throw Error(`response.text.delta: Item "${t}" not found`);return s.content[i].text+=r,s.formatted.text+=r,{item:s,delta:{text:r}}},"response.function_call_arguments.delta":e=>{let{item_id:t,delta:i}=e,r=this.itemLookup[t];if(!r)throw Error(`response.function_call_arguments.delta: Item "${t}" not found`);return r.arguments+=i,r.formatted.tool.arguments+=i,{item:r,delta:{arguments:i}}}}),this.clear()}clear(){return this.itemLookup={},this.items=[],this.responseLookup={},this.responses=[],this.queuedSpeechItems={},this.queuedTranscriptItems={},this.queuedInputAudio=null,!0}queueInputAudio(e){return this.queuedInputAudio=e,e}processEvent(e,...t){if(!e.event_id)throw console.error(e),Error('Missing "event_id" on event');if(!e.type)throw console.error(e),Error('Missing "type" on event');let i=this.EventProcessors[e.type];if(!i)throw Error(`Missing conversation event processor for "${e.type}"`);return i.call(this,e,...t)}getItem(e){return this.itemLookup[e]||null}getItems(){return this.items.slice()}},A4=class extends A1{constructor({url:e,apiKey:t,dangerouslyAllowAPIKeyInBrowser:i,debug:r}={}){super(),this.defaultSessionConfig={modalities:["text","audio"],instructions:"",voice:"alloy",input_audio_format:"pcm16",output_audio_format:"pcm16",input_audio_transcription:null,turn_detection:null,tools:[],tool_choice:"auto",temperature:.8,max_response_output_tokens:4096},this.sessionConfig={},this.transcriptionModels=[{model:"whisper-1"}],this.defaultServerVadConfig={type:"server_vad",threshold:.5,prefix_padding_ms:300,silence_duration_ms:200},this.realtime=new A2({url:e,apiKey:t,dangerouslyAllowAPIKeyInBrowser:i,debug:r}),this.conversation=new A3,this._resetConfig(),this._addAPIEventHandlers()}_resetConfig(){return this.sessionCreated=!1,this.tools={},this.sessionConfig=JSON.parse(JSON.stringify(this.defaultSessionConfig)),this.inputAudioBuffer=new Int16Array(0),!0}_addAPIEventHandlers(){this.realtime.on("client.*",e=>{let t={time:new Date().toISOString(),source:"client",event:e};this.dispatch("realtime.event",t)}),this.realtime.on("server.*",e=>{let t={time:new Date().toISOString(),source:"server",event:e};this.dispatch("realtime.event",t)}),this.realtime.on("server.session.created",()=>this.sessionCreated=!0);let e=(e,...t)=>{let{item:i,delta:r}=this.conversation.processEvent(e,...t);return{item:i,delta:r}},t=(t,...i)=>{let{item:r,delta:s}=e(t,...i);return r&&this.dispatch("conversation.updated",{item:r,delta:s}),{item:r,delta:s}},i=async e=>{try{let t=JSON.parse(e.arguments),i=this.tools[e.name];if(!i)throw Error(`Tool "${e.name}" has not been added`);let r=await i.handler(t);this.realtime.send("conversation.item.create",{item:{type:"function_call_output",call_id:e.call_id,output:JSON.stringify(r)}})}catch(t){this.realtime.send("conversation.item.create",{item:{type:"function_call_output",call_id:e.call_id,output:JSON.stringify({error:t.message})}})}this.createResponse()};return this.realtime.on("server.response.created",e),this.realtime.on("server.response.output_item.added",e),this.realtime.on("server.response.content_part.added",e),this.realtime.on("server.input_audio_buffer.speech_started",t=>{e(t),this.dispatch("conversation.interrupted")}),this.realtime.on("server.input_audio_buffer.speech_stopped",t=>e(t,this.inputAudioBuffer)),this.realtime.on("server.conversation.item.created",e=>{let{item:i}=t(e);this.dispatch("conversation.item.appended",{item:i}),"completed"===i.status&&this.dispatch("conversation.item.completed",{item:i})}),this.realtime.on("server.conversation.item.truncated",t),this.realtime.on("server.conversation.item.deleted",t),this.realtime.on("server.conversation.item.input_audio_transcription.completed",t),this.realtime.on("server.response.audio_transcript.delta",t),this.realtime.on("server.response.audio.delta",t),this.realtime.on("server.response.text.delta",t),this.realtime.on("server.response.function_call_arguments.delta",t),this.realtime.on("server.response.output_item.done",async e=>{let{item:r}=t(e);"completed"===r.status&&this.dispatch("conversation.item.completed",{item:r}),r.formatted.tool&&i(r.formatted.tool)}),!0}isConnected(){return this.realtime.isConnected()}reset(){return this.disconnect(),this.clearEventHandlers(),this.realtime.clearEventHandlers(),this._resetConfig(),this._addAPIEventHandlers(),!0}async connect(){if(this.isConnected())throw Error("Already connected, use .disconnect() first");return await this.realtime.connect(),this.updateSession(),!0}async waitForSessionCreated(){if(!this.isConnected())throw Error("Not connected, use .connect() first");for(;!this.sessionCreated;)await new Promise(e=>setTimeout(()=>e(),1));return!0}disconnect(){this.sessionCreated=!1,this.realtime.isConnected()&&this.realtime.disconnect(),this.conversation.clear()}getTurnDetectionType(){return this.sessionConfig.turn_detection?.type||null}addTool(e,t){if(!e?.name)throw Error("Missing tool name in definition");let i=e?.name;if(this.tools[i])throw Error(`Tool "${i}" already added. Please use .removeTool("${i}") before trying to add again.`);if("function"!=typeof t)throw Error(`Tool "${i}" handler must be a function`);return this.tools[i]={definition:e,handler:t},this.updateSession(),this.tools[i]}removeTool(e){if(!this.tools[e])throw Error(`Tool "${e}" does not exist, can not be removed.`);return delete this.tools[e],!0}deleteItem(e){return this.realtime.send("conversation.item.delete",{item_id:e}),!0}updateSession({modalities:e,instructions:t,voice:i,input_audio_format:r,output_audio_format:s,input_audio_transcription:a,turn_detection:o,tools:l,tool_choice:h,temperature:c,max_response_output_tokens:d}={}){void 0!==e&&(this.sessionConfig.modalities=e),void 0!==t&&(this.sessionConfig.instructions=t),void 0!==i&&(this.sessionConfig.voice=i),void 0!==r&&(this.sessionConfig.input_audio_format=r),void 0!==s&&(this.sessionConfig.output_audio_format=s),void 0!==a&&(this.sessionConfig.input_audio_transcription=a),void 0!==o&&(this.sessionConfig.turn_detection=o),void 0!==l&&(this.sessionConfig.tools=l),void 0!==h&&(this.sessionConfig.tool_choice=h),void 0!==c&&(this.sessionConfig.temperature=c),void 0!==d&&(this.sessionConfig.max_response_output_tokens=d);let u=[].concat((l||[]).map(e=>{let t={type:"function",...e};if(this.tools[t?.name])throw Error(`Tool "${t?.name}" has already been defined`);return t}),Object.keys(this.tools).map(e=>({type:"function",...this.tools[e].definition}))),p={...this.sessionConfig};return p.tools=u,this.realtime.isConnected()&&this.realtime.send("session.update",{session:p}),!0}sendUserMessageContent(e=[]){if(e.length){for(let t of e)"input_audio"===t.type&&(t.audio instanceof ArrayBuffer||t.audio instanceof Int16Array)&&(t.audio=A$.arrayBufferToBase64(t.audio));this.realtime.send("conversation.item.create",{item:{type:"message",role:"user",content:e}})}return this.createResponse(),!0}appendInputAudio(e){return e.byteLength>0&&(this.realtime.send("input_audio_buffer.append",{audio:A$.arrayBufferToBase64(e)}),this.inputAudioBuffer=A$.mergeInt16Arrays(this.inputAudioBuffer,e)),!0}createResponse(){return null===this.getTurnDetectionType()&&this.inputAudioBuffer.byteLength>0&&(this.realtime.send("input_audio_buffer.commit"),this.conversation.queueInputAudio(this.inputAudioBuffer),this.inputAudioBuffer=new Int16Array(0)),this.realtime.send("response.create"),!0}cancelResponse(e,t=0){if(!e)return this.realtime.send("response.cancel"),{item:null};if(e){let i=this.conversation.getItem(e);if(!i)throw Error(`Could not find item "${e}"`);
5427if("message"!==i.type)throw Error('Can only cancelResponse messages with type "message"');if("assistant"!==i.role)throw Error('Can only cancelResponse messages with role "assistant"');this.realtime.send("response.cancel");let r=i.content.findIndex(e=>"audio"===e.type);if(-1===r)throw Error("Could not find audio on item to cancel");return this.realtime.send("conversation.item.truncate",{item_id:e,content_index:r,audio_end_ms:Math.floor(t/this.conversation.defaultFrequency*1e3)}),{item:i}}}async waitForNextItem(){let{item:e}=await this.waitForNext("conversation.item.appended");return{item:e}}async waitForNextCompletedItem(){let{item:e}=await this.waitForNext("conversation.item.completed");return{item:e}}},A5=new Blob([`
5428class AudioProcessor extends AudioWorkletProcessor {
5429
5430  constructor() {
5431    super();
5432    this.port.onmessage = this.receive.bind(this);
5433    this.initialize();
5434  }
5435
5436  initialize() {
5437    this.foundAudio = false;
5438    this.recording = false;
5439    this.chunks = [];
5440  }
5441
5442  /**
5443   * Concatenates sampled chunks into channels
5444   * Format is chunk[Left[], Right[]]
5445   */
5446  readChannelData(chunks, channel = -1, maxChannels = 9) {
5447    let channelLimit;
5448    if (channel !== -1) {
5449      if (chunks[0] && chunks[0].length - 1 < channel) {
5450        throw new Error(
5451          \`Channel \${channel} out of range: max \${chunks[0].length}\`
5452        );
5453      }
5454      channelLimit = channel + 1;
5455    } else {
5456      channel = 0;
5457      channelLimit = Math.min(chunks[0] ? chunks[0].length : 1, maxChannels);
5458    }
5459    const channels = [];
5460    for (let n = channel; n < channelLimit; n++) {
5461      const length = chunks.reduce((sum, chunk) => {
5462        return sum + chunk[n].length;
5463      }, 0);
5464      const buffers = chunks.map((chunk) => chunk[n]);
5465      const result = new Float32Array(length);
5466      let offset = 0;
5467      for (let i = 0; i < buffers.length; i++) {
5468        result.set(buffers[i], offset);
5469        offset += buffers[i].length;
5470      }
5471      channels[n] = result;
5472    }
5473    return channels;
5474  }
5475
5476  /**
5477   * Combines parallel audio data into correct format,
5478   * channels[Left[], Right[]] to float32Array[LRLRLRLR...]
5479   */
5480  formatAudioData(channels) {
5481    if (channels.length === 1) {
5482      // Simple case is only one channel
5483      const float32Array = channels[0].slice();
5484      const meanValues = channels[0].slice();
5485      return { float32Array, meanValues };
5486    } else {
5487      const float32Array = new Float32Array(
5488        channels[0].length * channels.length
5489      );
5490      const meanValues = new Float32Array(channels[0].length);
5491      for (let i = 0; i < channels[0].length; i++) {
5492        const offset = i * channels.length;
5493        let meanValue = 0;
5494        for (let n = 0; n < channels.length; n++) {
5495          float32Array[offset + n] = channels[n][i];
5496          meanValue += channels[n][i];
5497        }
5498        meanValues[i] = meanValue / channels.length;
5499      }
5500      return { float32Array, meanValues };
5501    }
5502  }
5503
5504  /**
5505   * Converts 32-bit float data to 16-bit integers
5506   */
5507  floatTo16BitPCM(float32Array) {
5508    const buffer = new ArrayBuffer(float32Array.length * 2);
5509    const view = new DataView(buffer);
5510    let offset = 0;
5511    for (let i = 0; i < float32Array.length; i++, offset += 2) {
5512      let s = Math.max(-1, Math.min(1, float32Array[i]));
5513      view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true);
5514    }
5515    return buffer;
5516  }
5517
5518  /**
5519   * Retrieves the most recent amplitude values from the audio stream
5520   * @param {number} channel
5521   */
5522  getValues(channel = -1) {
5523    const channels = this.readChannelData(this.chunks, channel);
5524    const { meanValues } = this.formatAudioData(channels);
5525    return { meanValues, channels };
5526  }
5527
5528  /**
5529   * Exports chunks as an audio/wav file
5530   */
5531  export() {
5532    const channels = this.readChannelData(this.chunks);
5533    const { float32Array, meanValues } = this.formatAudioData(channels);
5534    const audioData = this.floatTo16BitPCM(float32Array);
5535    return {
5536      meanValues: meanValues,
5537      audio: {
5538        bitsPerSample: 16,
5539        channels: channels,
5540        data: audioData,
5541      },
5542    };
5543  }
5544
5545  receive(e) {
5546    const { event, id } = e.data;
5547    let receiptData = {};
5548    switch (event) {
5549      case 'start':
5550        this.recording = true;
5551        break;
5552      case 'stop':
5553        this.recording = false;
5554        break;
5555      case 'clear':
5556        this.initialize();
5557        break;
5558      case 'export':
5559        receiptData = this.export();
5560        break;
5561      case 'read':
5562        receiptData = this.getValues();
5563        break;
5564      default:
5565        break;
5566    }
5567    // Always send back receipt
5568    this.port.postMessage({ event: 'receipt', id, data: receiptData });
5569  }
5570
5571  sendChunk(chunk) {
5572    const channels = this.readChannelData([chunk]);
5573    const { float32Array, meanValues } = this.formatAudioData(channels);
5574    const rawAudioData = this.floatTo16BitPCM(float32Array);
5575    const monoAudioData = this.floatTo16BitPCM(meanValues);
5576    this.port.postMessage({
5577      event: 'chunk',
5578      data: {
5579        mono: monoAudioData,
5580        raw: rawAudioData,
5581      },
5582    });
5583  }
5584
5585  process(inputList, outputList, parameters) {
5586    // Copy input to output (e.g. speakers)
5587    // Note that this creates choppy sounds with Mac products
5588    const sourceLimit = Math.min(inputList.length, outputList.length);
5589    for (let inputNum = 0; inputNum < sourceLimit; inputNum++) {
5590      const input = inputList[inputNum];
5591      const output = outputList[inputNum];
5592      const channelCount = Math.min(input.length, output.length);
5593      for (let channelNum = 0; channelNum < channelCount; channelNum++) {
5594        input[channelNum].forEach((sample, i) => {
5595          output[channelNum][i] = sample;
5596        });
5597      }
5598    }
5599    const inputs = inputList[0];
5600    // There's latency at the beginning of a stream before recording starts
5601    // Make sure we actually receive audio data before we start storing chunks
5602    let sliceIndex = 0;
5603    if (!this.foundAudio) {
5604      for (const channel of inputs) {
5605        sliceIndex = 0; // reset for each channel
5606        if (this.foundAudio) {
5607          break;
5608        }
5609        if (channel) {
5610          for (const value of channel) {
5611            if (value !== 0) {
5612              // find only one non-zero entry in any channel
5613              this.foundAudio = true;
5614              break;
5615            } else {
5616              sliceIndex++;
5617            }
5618          }
5619        }
5620      }
5621    }
5622    if (inputs && inputs[0] && this.foundAudio && this.recording) {
5623      // We need to copy the TypedArray, because the \`process\`
5624      // internals will reuse the same buffer to hold each input
5625      const chunk = inputs.map((input) => input.slice(sliceIndex));
5626      this.chunks.push(chunk);
5627      this.sendChunk(chunk);
5628    }
5629    return true;
5630  }
5631}
5632
5633registerProcessor('audio_processor', AudioProcessor);
5634`],{type:"application/javascript"}),A6=URL.createObjectURL(A5),A8=[4186.01,4434.92,4698.63,4978.03,5274.04,5587.65,5919.91,6271.93,6644.88,7040,7458.62,7902.13],A9=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"],A7=[],Me=[];for(let e=1;e<=8;e++)for(let t=0;t<A8.length;t++){let i=A8[t];A7.push(i/Math.pow(2,8-e)),Me.push(A9[t]+e)}var Mt=A7.filter((e,t)=>A7[t]>32&&A7[t]<2e3),Mi=Me.filter((e,t)=>A7[t]>32&&A7[t]<2e3),Mr=class{static getFrequencies(e,t,i,r="frequency",s=-100,a=-30){i||(i=new Float32Array(e.frequencyBinCount),e.getFloatFrequencyData(i));let o=1/i.length*(t/2),l,h,c;if("music"===r||"voice"===r){let e="voice"===r?Mt:A7,t=Array(e.length).fill(s);for(let r=0;r<i.length;r++){let s=r*o,a=i[r];for(let i=e.length-1;i>=0;i--)if(s>e[i]){t[i]=Math.max(t[i],a);break}}l=t,h="voice"===r?Mt:A7,c="voice"===r?Mi:Me}else c=(h=(l=Array.from(i)).map((e,t)=>o*t)).map(e=>`${e.toFixed(2)} Hz`);return{values:new Float32Array(l.map(e=>Math.max(0,Math.min((e-s)/(a-s),1)))),frequencies:h,labels:c}}constructor(e,t=null){if(this.fftResults=[],t){let{length:i,sampleRate:r}=t,s=new OfflineAudioContext({length:i,sampleRate:r}),a=s.createBufferSource();a.buffer=t;let o=s.createAnalyser();o.fftSize=8192,o.smoothingTimeConstant=.1,a.connect(o);let l=1/60,h=i/r,c=e=>{let t=l*e;t<h&&s.suspend(t).then(()=>{let t=new Float32Array(o.frequencyBinCount);o.getFloatFrequencyData(t),this.fftResults.push(t),c(e+1)}),1===e?s.startRendering():s.resume()};a.start(0),c(1),this.audio=e,this.context=s,this.analyser=o,this.sampleRate=r,this.audioBuffer=t}else{let t=new AudioContext,i=t.createMediaElementSource(e),r=t.createAnalyser();r.fftSize=8192,r.smoothingTimeConstant=.1,i.connect(r),r.connect(t.destination),this.audio=e,this.context=t,this.analyser=r,this.sampleRate=this.context.sampleRate,this.audioBuffer=null}}
5634getFrequencies(e="frequency",t=-100,i=-30){let r=null;if(this.audioBuffer&&this.fftResults.length){let e=Math.min(this.audio.currentTime/this.audio.duration*this.fftResults.length|0,this.fftResults.length-1);r=this.fftResults[e]}return Mr.getFrequencies(this.analyser,this.sampleRate,r,e,t,i)}async resumeIfSuspended(){return"suspended"===this.context.state&&await this.context.resume(),!0}},Ms=class{static floatTo16BitPCM(e){let t=new ArrayBuffer(2*e.length),i=new DataView(t),r=0;for(let t=0;t<e.length;t++,r+=2){let s=Math.max(-1,Math.min(1,e[t]));i.setInt16(r,s<0?32768*s:32767*s,!0)}return t}static mergeBuffers(e,t){let i=new Uint8Array(e.byteLength+t.byteLength);return i.set(new Uint8Array(e),0),i.set(new Uint8Array(t),e.byteLength),i.buffer}_packData(e,t){return[new Uint8Array([t,t>>8]),new Uint8Array([t,t>>8,t>>16,t>>24])][e]}pack(e,t){if(t?.bitsPerSample){if(t?.channels){if(!t?.data)throw Error('Missing "data"')}else throw Error('Missing "channels"')}else throw Error('Missing "bitsPerSample"');let{bitsPerSample:i,channels:r,data:s}=t,a=new Blob(["RIFF",this._packData(1,52),"WAVE","fmt ",this._packData(1,16),this._packData(0,1),this._packData(0,r.length),this._packData(1,e),this._packData(1,e*r.length*i/8),this._packData(0,r.length*i/8),this._packData(0,i),"data",this._packData(1,r[0].length*r.length*i/8),s],{type:"audio/mpeg"}),o=URL.createObjectURL(a);return{blob:a,url:o,channelCount:r.length,sampleRate:e,duration:s.byteLength/(r.length*e*2)}}},Ma=class{constructor({sampleRate:e=44100,outputToSpeakers:t=!1,debug:i=!1}={}){this.scriptSrc=A6,this.sampleRate=e,this.outputToSpeakers=t,this.debug=!!i,this._deviceChangeCallback=null,this._devices=[],this.stream=null,this.processor=null,this.source=null,this.node=null,this.recording=!1,this._lastEventId=0,this.eventReceipts={},this.eventTimeout=5e3,this._chunkProcessor=()=>{},this._chunkProcessorSize=void 0,this._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)}}static async decode(e,t=44100,i=-1){let r=new AudioContext({sampleRate:t}),s,a;if(e instanceof Blob){if(-1!==i)throw Error('Can not specify "fromSampleRate" when reading from Blob');a=e,s=await a.arrayBuffer()}else if(e instanceof ArrayBuffer){if(-1!==i)throw Error('Can not specify "fromSampleRate" when reading from ArrayBuffer');a=new Blob([s=e],{type:"audio/wav"})}else{let t,r;if(e instanceof Int16Array){r=e,t=new Float32Array(e.length);for(let i=0;i<e.length;i++)t[i]=e[i]/32768}else if(e instanceof Float32Array)t=e;else if(e instanceof Array)t=new Float32Array(e);else throw Error('"audioData" must be one of: Blob, Float32Arrray, Int16Array, ArrayBuffer, Array<number>');if(-1===i)throw Error('Must specify "fromSampleRate" when reading from Float32Array, In16Array or Array');if(i<3e3)throw Error('Minimum "fromSampleRate" is 3000 (3kHz)');r||(r=Ms.floatTo16BitPCM(t));let o={bitsPerSample:16,channels:[t],data:r};a=new Ms().pack(i,o).blob,s=await a.arrayBuffer()}let o=await r.decodeAudioData(s),l=o.getChannelData(0),h=URL.createObjectURL(a);return{blob:a,url:h,values:l,audioBuffer:o}}log(){return this.debug&&this.log(...arguments),!0}getSampleRate(){return this.sampleRate}getStatus(){return this.processor?this.recording?"recording":"paused":"ended"}async _event(e,t={},i=null){if(!(i=i||this.processor))throw Error("Can not send events without recording first");let r={event:e,id:this._lastEventId++,data:t};i.port.postMessage(r);let s=new Date().valueOf();for(;!this.eventReceipts[r.id];){if(new Date().valueOf()-s>this.eventTimeout)throw Error(`Timeout waiting for "${e}" event`);await new Promise(e=>setTimeout(()=>e(!0),1))}let a=this.eventReceipts[r.id];return delete this.eventReceipts[r.id],a}listenForDeviceChange(e){if(null===e&&this._deviceChangeCallback)navigator.mediaDevices.removeEventListener("devicechange",this._deviceChangeCallback),this._deviceChangeCallback=null;else if(null!==e){let t=0,i=[],r=e=>e.map(e=>e.deviceId).sort().join(","),s=async()=>{let s=++t,a=await this.listDevices();s===t&&r(i)!==r(a)&&(i=a,e(a.slice()))};navigator.mediaDevices.addEventListener("devicechange",s),s(),this._deviceChangeCallback=s}return!0}async requestPermission(){let e=await navigator.permissions.query({name:"microphone"});if("denied"===e.state)window.alert("You must grant microphone access to use this feature.");else if("prompt"===e.state)try{(await navigator.mediaDevices.getUserMedia({audio:!0}
5634)).getTracks().forEach(e=>e.stop())}catch{window.alert("You must grant microphone access to use this feature.")}return!0}async listDevices(){if(!navigator.mediaDevices||!("enumerateDevices"in navigator.mediaDevices))throw Error("Could not request user devices");await this.requestPermission();let e=(await navigator.mediaDevices.enumerateDevices()).filter(e=>"audioinput"===e.kind),t=e.findIndex(e=>"default"===e.deviceId),i=[];if(-1!==t){let r=e.splice(t,1)[0],s=e.findIndex(e=>e.groupId===r.groupId);-1!==s&&(r=e.splice(s,1)[0]),r.default=!0,i.push(r)}return i.concat(e)}async begin(e){if(this.processor)throw Error("Already connected: please call .end() to start a new session");if(!navigator.mediaDevices||!("getUserMedia"in navigator.mediaDevices))throw Error("Could not request user media");try{let t={audio:!0};e&&(t.audio={deviceId:{exact:e}}),this.stream=await navigator.mediaDevices.getUserMedia(t)}catch{throw Error("Could not start media stream")}let t=new AudioContext({sampleRate:this.sampleRate}),i=t.createMediaStreamSource(this.stream);try{await t.audioWorklet.addModule(this.scriptSrc)}catch(e){throw console.error(e),Error(`Could not add audioWorklet module: ${this.scriptSrc}`)}let r=new AudioWorkletNode(t,"audio_processor");r.port.onmessage=e=>{let{event:t,id:i,data:r}=e.data;if("receipt"===t)this.eventReceipts[i]=r;else if("chunk"===t){if(this._chunkProcessorSize){let e=this._chunkProcessorBuffer;this._chunkProcessorBuffer={raw:Ms.mergeBuffers(e.raw,r.raw),mono:Ms.mergeBuffers(e.mono,r.mono)},this._chunkProcessorBuffer.mono.byteLength>=this._chunkProcessorSize&&(this._chunkProcessor(this._chunkProcessorBuffer),this._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)})}else this._chunkProcessor(r)}};let s=i.connect(r),a=t.createAnalyser();return a.fftSize=8192,a.smoothingTimeConstant=.1,s.connect(a),this.outputToSpeakers&&(console.warn(`Warning: Output to speakers may affect sound quality,
5635especially due to system audio feedback preventative measures.
5636use only for debugging`),a.connect(t.destination)),this.source=i,this.node=s,this.analyser=a,this.processor=r,!0}getFrequencies(e="frequency",t=-100,i=-30){if(!this.processor)throw Error("Session ended: please call .begin() first");return Mr.getFrequencies(this.analyser,this.sampleRate,null,e,t,i)}async pause(){if(this.processor){if(!this.recording)throw Error("Already paused: please call .record() first")}else throw Error("Session ended: please call .begin() first");return this._chunkProcessorBuffer.raw.byteLength&&this._chunkProcessor(this._chunkProcessorBuffer),this.log("Pausing ..."),await this._event("stop"),this.recording=!1,!0}async record(e=()=>{},t=8192){if(this.processor){if(this.recording)throw Error("Already recording: please call .pause() first");if("function"!=typeof e)throw Error("chunkProcessor must be a function")}else throw Error("Session ended: please call .begin() first");return this._chunkProcessor=e,this._chunkProcessorSize=t,this._chunkProcessorBuffer={raw:new ArrayBuffer(0),mono:new ArrayBuffer(0)},this.log("Recording ..."),await this._event("start"),this.recording=!0,!0}async clear(){if(!this.processor)throw Error("Session ended: please call .begin() first");return await this._event("clear"),!0}async read(){if(!this.processor)throw Error("Session ended: please call .begin() first");return this.log("Reading ..."),await this._event("read")}async save(e=!1){if(!this.processor)throw Error("Session ended: please call .begin() first");if(!e&&this.recording)throw Error("Currently recording: please call .pause() first, or call .save(true) to force");this.log("Exporting ...");let t=await this._event("export");return new Ms().pack(this.sampleRate,t.audio)}async end(){if(!this.processor)throw Error("Session ended: please call .begin() first");let e=this.processor;this.log("Stopping ..."),await this._event("stop"),this.recording=!1,this.stream.getTracks().forEach(e=>e.stop()),this.log("Exporting ...");let t=await this._event("export",{},e);return this.processor.disconnect(),this.source.disconnect(),this.node.disconnect(),this.analyser.disconnect(),this.stream=null,this.processor=null,this.source=null,this.node=null,new Ms().pack(this.sampleRate,t.audio)}
5636async quit(){return this.listenForDeviceChange(null),this.processor&&await this.end(),!0}},Mn=new Blob([`
5637class StreamProcessor extends AudioWorkletProcessor {
5638  constructor() {
5639    super();
5640    this.hasStarted = false;
5641    this.hasInterrupted = false;
5642    this.outputBuffers = [];
5643    this.bufferLength = 128;
5644    this.write = { buffer: new Float32Array(this.bufferLength), trackId: null };
5645    this.writeOffset = 0;
5646    this.trackSampleOffsets = {};
5647    this.port.onmessage = (event) => {
5648      if (event.data) {
5649        const payload = event.data;
5650        if (payload.event === 'write') {
5651          const int16Array = payload.buffer;
5652          const float32Array = new Float32Array(int16Array.length);
5653          for (let i = 0; i < int16Array.length; i++) {
5654            float32Array[i] = int16Array[i] / 0x8000; // Convert Int16 to Float32
5655          }
5656          this.writeData(float32Array, payload.trackId);
5657        } else if (
5658          payload.event === 'offset' ||
5659          payload.event === 'interrupt'
5660        ) {
5661          const requestId = payload.requestId;
5662          const trackId = this.write.trackId;
5663          const offset = this.trackSampleOffsets[trackId] || 0;
5664          this.port.postMessage({
5665            event: 'offset',
5666            requestId,
5667            trackId,
5668            offset,
5669          });
5670          if (payload.event === 'interrupt') {
5671            this.hasInterrupted = true;
5672          }
5673        } else {
5674          throw new Error(\`Unhandled event "\${payload.event}"\`);
5675        }
5676      }
5677    };
5678  }
5679
5680  writeData(float32Array, trackId = null) {
5681    let { buffer } = this.write;
5682    let offset = this.writeOffset;
5683    for (let i = 0; i < float32Array.length; i++) {
5684      buffer[offset++] = float32Array[i];
5685      if (offset >= buffer.length) {
5686        this.outputBuffers.push(this.write);
5687        this.write = { buffer: new Float32Array(this.bufferLength), trackId };
5688        buffer = this.write.buffer;
5689        offset = 0;
5690      }
5691    }
5692    this.writeOffset = offset;
5693    return true;
5694  }
5695
5696  process(inputs, outputs, parameters) {
5697    const output = outputs[0];
5698    const outputChannelData = output[0];
5699    const outputBuffers = this.outputBuffers;
5700    if (this.hasInterrupted) {
5701      this.port.postMessage({ event: 'stop' });
5702      return false;
5703    } else if (outputBuffers.length) {
5704      this.hasStarted = true;
5705      const { buffer, trackId } = outputBuffers.shift();
5706      for (let i = 0; i < outputChannelData.length; i++) {
5707        outputChannelData[i] = buffer[i] || 0;
5708      }
5709      if (trackId) {
5710        this.trackSampleOffsets[trackId] =
5711          this.trackSampleOffsets[trackId] || 0;
5712        this.trackSampleOffsets[trackId] += buffer.length;
5713      }
5714      return true;
5715    } else if (this.hasStarted) {
5716      this.port.postMessage({ event: 'stop' });
5717      return false;
5718    } else {
5719      return true;
5720    }
5721  }
5722}
5723
5724registerProcessor('stream_processor', StreamProcessor);
5725`],{type:"application/javascript"}),Mo=URL.createObjectURL(Mn),Ml=class{constructor({sampleRate:e=44100}={}){this.scriptSrc=Mo,this.sampleRate=e,this.context=null,this.stream=null,this.analyser=null,this.trackSampleOffsets={},this.interruptedTrackIds={}}async connect(){this.context=new AudioContext({sampleRate:this.sampleRate}),"suspended"===this.context.state&&await this.context.resume();try{await this.context.audioWorklet.addModule(this.scriptSrc)}catch(e){throw console.error(e),Error(`Could not add audioWorklet module: ${this.scriptSrc}`)}let e=this.context.createAnalyser();return e.fftSize=8192,e.smoothingTimeConstant=.1,this.analyser=e,!0}getFrequencies(e="frequency",t=-100,i=-30){if(!this.analyser)throw Error("Not connected, please call .connect() first");return Mr.getFrequencies(this.analyser,this.sampleRate,null,e,t,i)}_start(){let e=new AudioWorkletNode(this.context,"stream_processor");return e.connect(this.context.destination),e.port.onmessage=t=>{let{event:i}=t.data;if("stop"===i)e.disconnect(),this.stream=null;else if("offset"===i){let{requestId:e,trackId:i,offset:r}=t.data,s=r/this.sampleRate;this.trackSampleOffsets[e]={trackId:i,offset:r,currentTime:s}}},this.analyser.disconnect(),e.connect(this.analyser),this.stream=e,!0}add16BitPCM(e,t="default"){let i;if("string"!=typeof t)throw Error("trackId must be a string");if(!this.interruptedTrackIds[t]){if(this.stream||this._start(),e instanceof Int16Array)i=e;else if(e instanceof ArrayBuffer)i=new Int16Array(e);else throw Error("argument must be Int16Array or ArrayBuffer");return this.stream.port.postMessage({event:"write",buffer:i,trackId:t}),i}}async getTrackSampleOffset(e=!1){let t;if(!this.stream)return null;let i=crypto.randomUUID();for(this.stream.port.postMessage({event:e?"interrupt":"offset",requestId:i});!t;)t=this.trackSampleOffsets[i],await new Promise(e=>setTimeout(()=>e(),1));let{trackId:r}=t;return e&&r&&(this.interruptedTrackIds[r]=!0),t}async interrupt(){return this.getTrackSampleOffset(!0)}},Mh=()=>"https://relayserver.spline.design/",Mc=class{constructor(e,t,i){this.data=e,this.id=t,this.shared=i,this.items=[],this.isConnected=!1,this.rafId=0,this.emitter=wR(),this.voice=0,this.frequencies=new Float32Array([0]),this.onRealTimeEvent=({time:e,source:t,event:i})=>
5725{"server"===t&&"spline.ready"===i.type?this.onSessionCreated(i):"server"===t&&"session.created"===i.type&&(this.client.createResponse(),this.client.on("realtime.event",this.onRealTimeEvent))},this.onSessionCreated=async e=>{let t=Object.values(this.client.tools).map(e=>({type:"function",...e.definition}));this.client.realtime.send("spline.tools",{tools:t}),this.client.realtime.send("spline.connect",{}),await this.wavRecorder.record(e=>this.client.isConnected()&&this.client.appendInputAudio(e.mono))},this.animate=()=>{if(this.rafId=requestAnimationFrame(this.animate),this.isConnected){let e=this.wavStreamPlayer.analyser?this.wavStreamPlayer.getFrequencies("voice"):{values:new Float32Array([0])},t=e.values.reduce((e,t)=>e+t,0)/e.values.length;this.voice=t,this.frequencies=e.values,this.emitter.emit("voice",{value:t,frequencies:e.values})}},this.client=new A4({url:Mh()+"?uuidfile="+e.integration.hash}),this.wavRecorder=new Ma({sampleRate:24e3}),this.wavStreamPlayer=new Ml({sampleRate:24e3})}update(e){this.data=e,this.client=new A4({url:Mh()+"?uuidfile="+e.integration.hash})}setColorByName(e,t){let i=this.shared.getColorByName(e);if(i){let{id:e}=i,{r:r,g:s,b:a}=wT.hexStringToRgb(t)??{r:0,g:0,b:0};this.shared.updateColor(e,{r:r/255,g:s/255,b:a/255})}}connect(){if(this.isConnected)return;this.isConnected=!0,this.client.updateSession({turn_detection:{type:"server_vad"}}),this.client.addTool({name:"set_personality_color",description:"returns a color based on the voice personality of the ai assistant. This should be called by the voice assistant each time it is asks to speak differently. If a color cannot be associated to the personality, the color should be a neutral color.",parameters:{type:"object",properties:{color:{type:"string",description:"css hex color string, reflecting the personality"},personality:{type:"string",description:"the personality of the voice assistant"}},required:["color","personality"]}},({color:e})=>{this.setColorByName("Voice Assistant Color",e)});let e=this.shared.getVariablesNames().join(", ");this.client.addTool({name:"set_variable",description:"Sets a Spline variable value when asked by the user.",parameters:{type:"object",properties:{name:{type:"string",description:`The name of the variable that needs to be set. Here's a list of available variables: ${e}. It the variable does not exist, don't call the function and warn the user about it.`},value:{type:"string",description:"The new value for this variable, should always be a string even for number and boolean variables, assume that the value will be cast to the proper type afterwards."}},required:["name","value","type"]}},({name:e,value:t})=>{let i=this.shared.getVariableByName(e);if(i){let e=this.shared.getVariable(i.id),r;r="number"==typeof e?parseFloat(t):"boolean"==typeof e?"true"===t.toLowerCase():{textValue:t},this.shared.updateVariable(i.id,r)}});let t=this.shared.getColorNames().join(", ");this.client.addTool({name:"set_color",description:"Sets a Spline color asset value when asked by the user.",parameters:{type:"object",properties:{name:{type:"string",description:`The name of the color asset that needs to be set. Here's a list of available color assets: ${t}. It the color asset does not exist, don't call the function and warn the user about it.`},value:{type:"string",description:"css hex color string"}},required:["name","value"]}},({name:e,value:t})=>{this.setColorByName(e,t)});let i=this.shared.scene,r=[];i.traverseEntity(e=>{e.data.events.forEach(e=>{if("AIAssistantTrigger"===e.data.type){let{description:t}=e.data;r.push(t)}})}),this.client.addTool({name:"trigger_event",description:"Trigger an event by name, here are the available events, please match what the user is asking for to one of these if it applies, otherwise don't call the function and warn the user.",parameters:{type:"object",properties:{description:{type:"string",description:`The name of the event that needs to be triggered. Here's a list of available events: ${JSON.stringify(r)}.`},direction:{type:"string",description:"default is forward, but can be forward or backward. Always set to forward unless the user ask to reverse or cancel the event, then set to backward."}},required:["description","direction"]}},({description:e,direction:t})=>{this.emitter.emit("trigger_event",{description:e,direction:t})}),this.client.on("error",e=>console.error(e)),this.client.on("conversation.interrupted",async()=>{let e=await this.wavStreamPlayer.interrupt();if(e?.trackId){let{trackId:t,offset:i}=e;await this.client.cancelResponse(t,i)}}),this.client.on("conversation.updated",async({item:e,delta:t})=>{let i=this.client.conversation.getItems();if(t?.audio&&this.wavStreamPlayer.add16BitPCM(t.audio,e.id),"completed"===e.status&&e.formatted.audio?.length){let t=await Ma.decode(e.formatted.audio,24e3,24e3);e.formatted.file=t}this.items=i}),this.animate()}disconnect(){cancelAnimationFrame(this.rafId),this.voice=0,this.isConnected=!1}async start(){try{await this.wavRecorder.end()}catch{}await this.wavRecorder.begin(),this.client.on("realtime.event",this.onRealTimeEvent),await this.wavStreamPlayer.connect(),await this.client.connect()}async stop(){try{this.client.off("realtime.event",this.onRealTimeEvent)}catch(e){console.error(e)}this.client.disconnect(),await this.wavRecorder.end(),await this.wavStreamPlayer.interrupt()}computeAnalysisForListenerEvent(e){if("range"===e.analysis){let t=this.frequencies.slice(...e.analysisRange);return t.reduce((e,t)=>
5725e+t,0)/t.length}return"single"===e.analysis?this.frequencies[e.analysisSingle]:this.voice}on(e,t){this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t)}};function Md(e){return"variable_"+e}var Mu=class extends _1{constructor(e){super(),this.shared=e}create(e){return new _2(e,this.shared)}},Mp=class{constructor(e,t={},i=!0,r=!1){if(this.data=e,this.needsJitter=i,this.enableLocalStorageForPersistentVariables=r,this.geometryCache=new AY(!0),this.geometryCache2=new AY(!1),this.imageHolderCache=new Mu(this),this.thisContext={scene:AQ,shared:this},this.deletedMaterial=new AI(vk.defaultTwoLayerData("phong"),this.thisContext,""),this.deletedImage=new _3(yM.emptyImage,this),this.deletedVideo=new _3(gS.defaultVideo,this),this.materials={},this.images={},this.uiBuffers={},this.videos={},this.colors={},this.audios={},this.particles={},this.fonts={},this.variables={},this.userAPIs={},this.userWebhooks={},this.mouseProperty=null,this.raycastProperty=null,this.requestRender=()=>{this._requestRender&&this._requestRender()},t.images)for(let[e,i]of Object.entries(t.images))this.addImage(e,i);if(t.videos)for(let[e,i]of Object.entries(t.videos))this.addVideo(e,i);if(t.audios)for(let[e,i]of Object.entries(t.audios))this.addAudio(e,i);if(t.particles)for(let[e,i]of Object.entries(t.particles))this.addParticle(e,i);this.reset(e)}setRequestRender(e){this._requestRender=e}getImageLoadPromises(){return Object.values(this.images).map(e=>e.loadPromise)}setEntityOpContext(e){this.entityOpContext=e}reset(e,t=!1){for(let{id:i,data:r}of(this.data=e,this.resetLib(e.lib),e.variables))this.addVariableHolder(i,r),t&&this.updateVariableHolder(i,r);for(let[t,i]of Object.entries(e.userAPIs))this.addUserAPI(t,i);for(let[t,i]of Object.entries(e.userWebhooks))this.addUserWebhook(t,i);for(let[t,i]of Object.entries(e.images))this.addImage(t,i);for(let[t,i]of Object.entries(e.videos))this.addVideo(t,i);for(let[t,i]of Object.entries(e.colors))this.addColor(t,i);for(let[t,i]of Object.entries(e.materials))this.addMaterial(t,i);for(let[t,i]of Object.entries(e.audios))this.addAudio(t,i);for(let[t,i]of Object.entries(e.particles))this.addParticle(t,i);for(let[t,i]of Object.entries(e.fonts))this.addFont(t,i)}addMaterial(e,t){if(this.materials[e]){let i=this.materials[e];i.reset(t,this.thisContext),i.dispose()}else{let i=new AI(t,this.thisContext,e);this.materials[e]=i}}deleteMaterial(e){this.materials[e]&&(this.materials[e].nodeMaterialDispose(),delete this.materials[e])}getMaterial(e){return this.materials[e]}getMaterialOrDeletedPlaceholder(e){return this.materials[e]??this.deletedMaterial}material(e){return"string"==typeof e?this.getMaterialOrDeletedPlaceholder(e):null==e?(console.error("material is undefined or null"),this.deletedMaterial):new AP(e,this.thisContext)}getMaterials(){return this.materials}addImage(e,t){return this.images[e]?(this.onColorOrImageUpdate&&this.onColorOrImageUpdate(),this.images[e].updateSrc(t.data),!0):(this.images[e]=new _3(t,this),!1)}deleteImage(e){let t=this.images[e];t&&(t.dispose(),delete this.images[e])}getDefaultImage(){return this.images.image_0}getImage(e){return this.images[e]??this.deletedImage}image(e){return"string"==typeof e?this.getImage(e):this.imageHolderCache.load(e)}addUIBuffer(e,t){return this.uiBuffers[e]?(this.onColorOrImageUpdate&&this.onColorOrImageUpdate(),this.uiBuffers[e].updateSrc(t),!0):(this.uiBuffers[e]=new _3(t,this),!1)}uiBuffer(e){return this.uiBuffers[e]}addVideo(e,t){return this.videos[e]?(this.videos[e].updateSrc(t.data),!0):(this.videos[e]=new _3(t,this),!1)}deleteVideo(e){let t=this.videos[e];t&&(t.dispose(),delete this.videos[e])}getVideo(e){return this.videos[e]??this.deletedVideo}video(e){return"string"==typeof e?this.getVideo(e):this.imageHolderCache.load(e)}addColor(e,t){return this.colors[e]?(this.onColorOrImageUpdate&&this.onColorOrImageUpdate(),"a"in t?this.colors[e].setRGBA(t.r,t.g,t.b,t.a):this.colors[e].setRGBA(t.r,t.g,t.b,1),!0):("a"in t?this.colors[e]=new Am(t.r,t.g,t.b,t.a):this.colors[e]=new Am(t.r,t.g,t.b,1),!1)}updateColor(e,t){if(this.colors[e]){this.onColorOrImageUpdate&&this.onColorOrImageUpdate();let i=this.colors[e];return this.colors[e].r=t.r??i.r,this.colors[e].g=t.g??i.g,this.colors[e].b=t.b??i.b,this.colors[e].a=t.a??i.a,!0}return!1}deleteColor(e){this.colors[e]&&delete this.colors[e]}getColor(e){return this.colors[e]}getColorNames(){return Object.values(this.data.colors).map(e=>e.name)}
vendor: 5,047 bytes, line 5725
5725getColorByName(e){for(let t in this.data.colors)if(this.data.colors[t].name===e)return{color:this.colors[t],id:t}}color(e){let t;if("string"!=typeof e)return"a"in e?new SN(e.r,e.g,e.b,e.a):new SN(e.r,e.g,e.b,1);{let i=this.getColor(e);i?t=i:(console.warn("Tried to create color layer params with a color key that does not exist in the assets manager"),t=new SN(0,0,0,0))}return t}addAudio(e,t){this.audios[e]=t}getAudio(e){let t=this.audios[e];if(t instanceof AN)return t;{let i=new AN({src:t.data});return this.audios[e]=i,i}}addParticle(e,t){this.particles[e]=t}getParticle(e){return this.particles[e]}deleteParticle(e){this.particles[e]&&delete this.particles[e]}deleteAudio(e){let t=this.audios[e];t&&(t instanceof AN&&t.dispose(),delete this.audios[e])}addFont(e,t){this.fonts[e]=new Aq(t),this.fonts[e].loadingPromise.then(()=>this.requestRender())}getFont(e){return this.fonts[e]}deleteFont(e){this.fonts[e]&&delete this.fonts[e]}dispose(){Object.keys(this.materials).forEach(e=>this.deleteMaterial(e)),this._requestRender=void 0,Object.values(this.audios).forEach(e=>{e instanceof AN&&e.dispose()}),this.audios={},this.particles={},this.geometryCache.dispose(),this.geometryCache2.dispose()}addVariableHolder(e,t){if(void 0===this.variables[e]){let i=t.value;if(this.enableLocalStorageForPersistentVariables&&t.persistent){let r=localStorage.getItem(Md(e));i=null!==r?JSON.parse(r):t.value}return this.variables[e]={value:i,locations:[],persistent:t.persistent},"dynamicVariableType"in t&&(this.variables[e].dynamicVariablePlayState="Playing",this.variables[e].dynamicVariableToggleIsForward=void 0),!0}return this.variables[e].value=t.value,!1}resetDynamicVariablePlayState(){for(let e in this.variables)void 0!==this.variables[e].dynamicVariablePlayState&&(this.variables[e].dynamicVariablePlayState="Playing",this.variables[e].dynamicVariableToggleIsForward=void 0)}updateVariableHolder(e,t){this.updateVariable(e,t.value)}updateVariable(e,t){if(void 0===this.variables[e])return!1;this.variables[e].value=t,this.enableLocalStorageForPersistentVariables&&this.variables[e].persistent&&localStorage.setItem(Md(e),JSON.stringify(t));let i=t;for(;"string"==typeof i;)i=this.variables[i].value;let r=this.entityOpContext.scene;for(let t=this.variables[e].locations.length-1;t>=0;t--){let s=this.variables[e].locations[t];if("material"===s[0]){let e=s[1],t=i,a={scene:r,shared:this},o=s.slice(2);r.traverseMaterial(i=>{let r=i.root??i;r.uuid===e&&r.onVariableUpdate(o,t,a)});let l=this.materials[e];l&&l.onVariableUpdate(o,t,a)}else{let a=r.find(s[0]);if(void 0===a){this.variables[e].locations.splice(t,1);continue}if("geometry"!==s[1]&&"particles"!==s[1]){for(let e=1;e<s.length-1;e++)a=a[s[e]];"rotation"===s[1]?a[s[s.length-1]]=i*tY.DEG2RAD:a[s[s.length-1]]=i}if("ParticleEmitter"===(a=r.find(s[0])).type&&a.updateVariableState(i,s),wQ.is(a)){if("position"===s[1]||"rotation"===s[1]||"scale"===s[1])a.onVariableUpdate();else if("geometry"===s[1]){let e=a;a.component&&(e=a.component);let t=e.dataPatched;e.chooseGeoemtryCache(this).forceDelete(t.geometry),e.createGeometryDelayed(this.entityOpContext),e.onVariableUpdate(!0),e.invalidateDownstreamBooleanData(),e.instances.forEach(e=>{let t=e.dataPatched;e.chooseGeoemtryCache(this).forceDelete(t.geometry),e.createGeometryDelayed(this.entityOpContext),e.onVariableUpdate(!0),e.invalidateDownstreamBooleanData()})}else"morphTargetInfluences"===s[1]&&a.updateMorphInfluences(s[2],i)}}}return this.requestRender(),!0}deleteVariable(e){this.variables[e]&&delete this.variables[e]}getVariable(e,t){if(Array.isArray(e)){if("mouse"===e[0])return this.mouseProperty?.[e[1]]??0;if("raycast"===e[0])return this.raycastProperty?.[e[1]]??0;let t=this.entityOpContext.scene.find(e[0]);if("width"===e[1]||"height"===e[1]||"depth"===e[1])return t.geometry.userData.parameters[e[1]];for(let i=1;i<e.length;i++)t=t[e[i]];return"rotation"===e[1]&&(t*=tY.RAD2DEG),t}for(let e in this.variables){if(void 0===t)break;let i=this.variables[e],r=i.locations?.findIndex(e=>p1.equal(e,t));void 0!==r&&-1!==r&&i.locations.splice(r,1)}if("string"!=typeof e)return e;{let i=e,r=e;do{if(r=i,void 0===this.variables[i])break;let e=this.variables[i].value;t&&void 0!==this.variables[r]&&this.variables[r].locations.push(t),i=e}while("string"==typeof i);return i}}getVariables(){return this.variables}getVariablesNames(){return this.data.variables.map(e=>e.data.name)}getVariableByName(e){for(let t of this.data.variables)if(t.data.name===e)return{variable:t.data,id:t.id}}getDynamicVariablePlayState(e){return this.variables[e]?.dynamicVariablePlayState}setDynamicVariablePlayState(e,t){void 0!==this.variables[e]&&(this.variables[e].dynamicVariablePlayState=t)}getDynamicVariableToggleIsForward(e){return this.variables[e]?.dynamicVariableToggleIsForward}setDynamicVariableToggleIsForward(e,t){void 0!==this.variables[e]&&(this.variables[e].dynamicVariableToggleIsForward=t)}resetLib(e){for(let[t,i]of Object.entries(e.images))this.addImage(t,i.asset);for(let[t,i]of Object.entries(e.audios))this.addAudio(t,i.asset);
5725for(let[t,i]of Object.entries(e.particles))this.addParticle(t,i.asset);for(let[t,i]of Object.entries(e.colors))this.addColor(t,i.asset);for(let[t,i]of Object.entries(e.fonts))this.addFont(t,i.asset);for(let[t,i]of Object.entries(e.materials))this.addMaterial(t,i.asset);for(let[t,i]of Object.entries(e.videos))this.addVideo(t,i.asset);for(let[t,i]of Object.entries(e.variables))this.addVariableHolder(t,i.asset)}updateLibByOp(e,t){"images"===e.path[0]?1===e.path.length&&1===e.type?this.addImage(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteImage(e.id):"videos"===e.path[0]?1===e.path.length&&1===e.type?this.addVideo(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteVideo(e.id):"audios"===e.path[0]?1===e.path.length&&1===e.type?this.addAudio(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteAudio(e.id):"particles"===e.path[0]?1===e.path.length&&1===e.type?this.addParticle(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteParticle(e.id):"colors"===e.path[0]?1===e.path.length&&1===e.type?this.addColor(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteColor(e.id):"materials"===e.path[0]?1===e.path.length&&1===e.type?this.addMaterial(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteMaterial(e.id):"fonts"===e.path[0]?1===e.path.length&&1===e.type?this.addFont(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteFont(e.id):"variables"===e.path[0]?1===e.path.length&&1===e.type?this.addVariableHolder(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteVariable(e.id):"components"===e.path[0]&&t.updateByLibOp(e,this)}updateByOp(e,t,i){if(this.data=t,"images"===e.path[0])2===e.path.length&&0===e.type?e.props.data&&this.getImage(e.path[1]).updateSrc(e.props.data):1===e.path.length&&1===e.type?this.addImage(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteImage(e.id);else if("videos"===e.path[0])2===e.path.length&&0===e.type?e.props.data&&this.getVideo(e.path[1]).updateSrc(e.props.data):1===e.path.length&&1===e.type?this.addVideo(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteVideo(e.id);else if("audios"===e.path[0])2===e.path.length&&0===e.type?e.props.data&&this.addAudio(e.path[1],t.audios[e.path[1]]):1===e.path.length&&1===e.type?this.addAudio(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteAudio(e.id);else if("particles"===e.path[0])2===e.path.length&&0===e.type?e.props.data&&this.addParticle(e.path[1],t.particles[e.path[1]]):1===e.path.length&&1===e.type?this.addParticle(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteParticle(e.id);else if("colors"===e.path[0])2===e.path.length&&0===e.type?this.updateColor(e.path[1],e.props):1===e.path.length&&1===e.type?this.addColor(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteColor(e.id);else if("materials"===e.path[0])1===e.path.length&&1===e.type?this.addMaterial(e.id,e.data):1===e.path.length&&2===e.type?this.deleteMaterial(e.id):e.path.length>1&&this.getMaterial(e.path[1]).updateByOp(p$.drop(e,2),t.materials[e.path[1]],{shared:this,scene:i});else if("fonts"===e.path[0])2===e.path.length&&0===e.type?this.updateFont(e.path[1],e,i):1===e.path.length&&1===e.type?this.addFont(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteFont(e.id);else if("variables"===e.path[0])2===e.path.length&&0===e.type?"value"in e.props?this.updateVariable(e.path[1],e.props.value):"persistent"in e.props&&(this.variables[e.path[1]].persistent=e.props.persistent):1===e.path.length&&4===e.type?this.addVariableHolder(e.id,e.data):1===e.path.length&&5===e.type&&this.deleteVariable(e.id);else if("userAPIs"===e.path[0]){if(1===e.path.length&&1===e.type)this.addUserAPI(e.id,e.data);else if(1===e.path.length&&2===e.type)this.deleteUserAPI(e.id);else if("string"==typeof e.path[1]){let i=t.userAPIs[e.path[1]];if(i){let t=0===e.type&&void 0===e.props.debounce,r=this.getUserAPI(e.path[1]);r instanceof Mc?r.update(i):r?.update(i,this,t)}}}else if("userWebhooks"===e.path[0]){if(1===e.path.length&&1===e.type)this.addUserWebhook(e.id,e.data);else if(1===e.path.length&&2===e.type)this.deleteUserWebhook(e.id);else if("string"==typeof e.path[1]){let i=t.userWebhooks[e.path[1]];i&&this.getUserWebhook(e.path[1])?.update(i)}}else"lib"===e.path[0]&&this.updateLibByOp(p$.drop(e,1),i)}updateFont(e,t,i){if(t.props.url){let r=this.getFont(e),s={...this.data.fonts[e],url:t.props.url};r.update(s),r.loadingPromise.then(()=>this.requestRender()),i.updateFont(e,this)}}addUserAPI(e,t){return this.userAPIs[e]?(this.userAPIs[e].update(t,this),!0):this.openAIRealtime?.id===e?(this.openAIRealtime.update(t),!0):(t.integration?.type==="VoiceAssistant"?this.openAIRealtime=new Mc(t,e,this):this.userAPIs[e]=new wL(e,t,this),!1)}getUserAPI(e){return this.openAIRealtime?.id===e?this.openAIRealtime:this.userAPIs[e]}getUserAPIs(){return this.userAPIs}deleteUserAPI(e){let t=this.userAPIs[e];t&&(t.dispose(),delete this.userAPIs[e])}addUserWebhook(e,t){return this.userWebhooks[e]?(this.userWebhooks[e].update(t),!0):(this.userWebhooks[e]=new AK(e,t),!1)}getUserWebhook(e){return this.userWebhooks[e]}getUserWebhooks(){return this.userWebhooks}deleteUserWebhook(e){let t=this.userWebhooks[e];t&&(t.dispose(),delete this.userWebhooks[e])}get scene(){return this.entityOpContext.scene}};
5725new Mp(yw.emptyData());var Mf=class extends SP{updateByPatchedOp(e,t,i){if(super.updateByPatchedOp(e,t,i),null!==function(e,t){let i=[];if(t.length!==e.length)return null;for(var r=0;r<e.length;){if("*"===t[r])i.push(e[r]);else if(e[r]!==t[r])return null;r+=1}return i}(e.path,["materials"])&&0===e.type&&Array.isArray(this.material))for(let[t,r]of Object.entries(e.props)){let e=i.shared.material(r);this.material[Number(t)]=e}else if(pX(e.path,["material"])&&this.material instanceof AC)"material"in t&&"string"!=typeof t.material&&this.material.updateByOp(p$.drop(e,1),t.material,i);else if(pX(e.path,["materials","*"])&&Array.isArray(this.material)){let r=e.path[1];if("materials"in t&&r<this.material.length){let s=t.materials[r];"string"!=typeof s&&this.material[r].updateByOp(p$.drop(e,2),s,i)}}}get needsAO(){return void 0!==this.material&&(Array.isArray(this.material)?this.material[0]:this.material).hasAO}updateState(e,t){let i;super.updateState(e,t),void 0!==e.castShadow&&(this.castShadow=e.castShadow),void 0!==e.receiveShadow&&(this.receiveShadow=e.receiveShadow);let r=this.dataPatched;if("Mesh"===this.dataPatched.type&&this.dataPatched.geometry.shapeBlendNode&&this.layers.set(9),"Mesh"===this.dataPatched.type&&"ShapeBlendGeometry"===this.dataPatched.geometry.type&&(i={resolutionLevel:this.dataPatched.geometry.resolutionLevel,useChildrenColors:this.dataPatched.geometry.useChildrenColors}),e.geometry?.type!=="NonParametricGeometry"&&"material"in e&&void 0!==e.material&&(this.disposeMaterial(),this.material=t.shared.material(e.material).getFlavor(r.flatShading,r.side,r.wireframe,i),t.scene.markNeedsUpdateRendererDirty()),(e.geometry?.type==="NonParametricGeometry"||"materials"in e)&&("materials"in e&&void 0!==e.materials?(this.disposeMaterial(),this.material=e.materials.map(e=>t.shared.material(e).getFlavor(r.flatShading,r.side,r.wireframe)),t.scene.markNeedsUpdateRendererDirty()):"material"in e&&void 0!==e.material&&(this.disposeMaterial(),this.material=[t.shared.material(e.material).getFlavor(r.flatShading,r.side,r.wireframe)],t.scene.markNeedsUpdateRendererDirty())),void 0!==e.flatShading||void 0!==e.wireframe||void 0!==e.side){if(Array.isArray(this.material))for(let e=0;e<this.material.length;e++)this.material[e]=this.material[e].getFlavor(r.flatShading,r.side,r.wireframe);else this.material=this.material.getFlavor(r.flatShading,r.side,r.wireframe,i)}}disposeMaterial(){this.material&&uJ(this.material).forEach(e=>{e instanceof AC&&(e instanceof AI||e.nodeMaterialDispose())})}dispose(){this.disposeMaterial(),super.dispose()}},Mm=new iv,Mg=new ic,Mv=new ic,My=new iv,Mx=new iX,Mb=class extends Mf{constructor(e,t,i){super(e,t),this.data=t,this.isSkinnedMesh=!1,this.localGeometry=void 0,t.bindMode&&t.bindMatrix&&(this.bindMode=t.bindMode,this.bindMatrix=new iX().fromArray(t.bindMatrix),this.bindMatrixInverse=new iX)}chooseGeoemtryCache(e){return e.geometryCache}markGeometryAsReachable(e){this.geometryCreateDeleyed instanceof rz&&this.chooseGeoemtryCache(e).markAsReachable(this.dataPatched.geometry,this.geometryCreateDeleyed)}get geometry(){if(void 0!==this.localGeometry)return this.localGeometry;if(this.geometryCreateDeleyed instanceof Mp){let e=this.geometryCreateDeleyed,t=this.chooseGeoemtryCache(e);this.geometryCreateDeleyed=t.get(this.dataPatched.geometry,e,this)}return this.geometryCreateDeleyed}set geometry(e){this.localGeometry=e}get is2DAndNoDepth(){let e=this.dataPatched.geometry;return vG.is2DParametricMesh(e.type)&&0===e.depth}get is2DType(){return vG.is2DParametricMesh(this.geometry.userData.type)}get isNonParametric(){return"NonParametricGeometry"===this.geometry.userData.type}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),pX(e.path,["geometry"])&&this.updateByPatchedOpGeometry(p$.drop(e,1),t.geometry,i)}removeInteractionGeometry(e){this.localGeometry?.dispose(),this.localGeometry=void 0}updateGeometryInteractions(e,t){this.invalidateDownstreamBooleanData();let i=this.data.geometry.type;if("NonParametricGeometry"===i||"SubdivGeometry"===i){let i,r,s;if(void 0===this.localGeometry){let i={...this.data.geometry,...e};this.localGeometry=w4(i,t,this.data.flatShading,this)}e.scaleBaked?[i,r,s]=e.scaleBaked:{width:i,height:r,depth:s}=e;let a=this.localGeometry.userData;void 0!==a.sxPrev&&w6(this.localGeometry.attributes,i/a.sxPrev,r/a.syPrev,s/a.szPrev),a.sxPrev=i,a.syPrev=r,a.szPrev=s}else{let i={...this.data.geometry,...e};this.localGeometry?.dispose(),this.localGeometry=w4(i,t,this.data.flatShading,this)}}refreshAttachedClonersInteractions(){for(let e of this.attachedSurfaceCloners
vendor: 8,056 bytes, line 5725
5725)e.update()}refreshAttachedCloners(e){for(let t of this.attachedSurfaceCloners)e.scene.addPendingUpdateCloner(t.object)}refreshAttachedPaths(e){for(let t of this.attachedPaths)e.scene.addPendingCommand(()=>t.updateShape())}createGeometryDelayed(e){this.geometryCreateDeleyed=e.shared,this.refreshAttachedCloners(e),this.refreshAttachedPaths(e)}updateByPatchedOpGeometry(e,t,i){let r=!1;0===e.type&&0===e.path.length&&Object.keys(e.props).includes("scaleBaked")&&this.geometryCreateDeleyed instanceof Ss&&this.chooseGeoemtryCache(i.shared).mutateIfUnique(this.geometryCreateDeleyed.data,t)===this.geometryCreateDeleyed&&(r=!0,this.geometryCreateDeleyed.mutateDirectlyScaleBaked(t,e.props.scaleBaked),this.refreshAttachedCloners(i),this.refreshAttachedPaths(i)),r||(i.scene?.markGeometryCacheDirty(),this.createGeometryDelayed(i)),this.resetBBoxNeedsUpdate(),this.invalidateDownstreamBooleanData()}updateGeometryOnStateUpdate(e,t){this.createGeometryDelayed(t)}updateState(e,t){void 0!==e.geometry&&this.updateGeometryOnStateUpdate(e.geometry,t);let i=e.morphTargetInfluences;if(i)for(let{data:{name:e,value:r}}of(this.updateMorphTargets(),this.geometry.morphTargetsRelative=!0,i))this.updateMorphInfluences(e,t.shared.getVariable(r,[this.uuid,"morphTargetInfluences",e]));super.updateState(e,t)}updateMorphInfluences(e,t){if(void 0===this.morphTargetDictionary)return;let i=this.morphTargetDictionary[e];void 0!==i&&(this.morphTargetInfluences[i]=t)}updateGeometryGroupsIfNeeded(){Array.isArray(this.material)&&0===this.geometry.groups.length&&this.geometry.addGroup(0,Math.max(this.geometry.getIndex()?.count??0,this.geometry.getAttribute("position").count),0)}updateEntityBoxSize(e,t){let i=this.geometry.userData.parameters;this.is2DType?e.set(0,0,.5*i.depth):this.isNonParametric?(e.setScalar(0),this.geometry.boundingSphere&&e.copy(this.geometry.boundingSphere.center),t.set(i.width,i.height,i.depth??0).multiplyScalar(.5)):i.centerOffset?e.fromArray(i.centerOffset):e.setScalar(0),t.set(i.width,i.height,i.depth??0).multiplyScalar(.5)}updateMatrixWorld(e){super.updateMatrixWorld(e),"attached"===this.bindMode?this.bindMatrixInverse.copy(this.matrixWorld).invert():"detached"===this.bindMode&&this.bindMatrixInverse.copy(this.bindMatrix).invert()}bind(e,t){this.skeleton=e,this.isSkinnedMesh=!0,void 0===t&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),t=this.matrixWorld),this.bindMatrix.copy(t),this.bindMatrixInverse.copy(t).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(e){let t=new ic,i=this.geometry.attributes.skinWeight;for(let e=0,r=i.count;e<r;e++){t.fromBufferAttribute(i,e);let r=1/t.manhattanLength();r!==1/0?t.multiplyScalar(r):t.set(1,0,0,0),i.setXYZW(e,t.x,t.y,t.z,t.w)}}boneTransform(e,t){let i=this.skeleton;if(void 0===i)return;let r=this.geometry;Mg.fromBufferAttribute(r.attributes.skinIndex,e),Mv.fromBufferAttribute(r.attributes.skinWeight,e),Mm.copy(t).applyMatrix4(this.bindMatrix),t.set(0,0,0);for(let e=0;e<4;e++){let r=Mv.getComponent(e);if(0!==r){let s=Mg.getComponent(e);Mx.multiplyMatrices(i.bones[s].matrixWorld,i.boneInverses[s]),t.addScaledVector(My.copy(Mm).applyMatrix4(Mx),r)}}return t.applyMatrix4(this.bindMatrixInverse)}};function Mw(e){if(Array.isArray(e.material)){for(let t of e.material)if(0===t.getLayersOfType("outline").length)return}else if(!(e.material instanceof AC)||0===e.material.getLayersOfType("outline").length)return;e instanceof Mb&&e.is2DAndNoDepth?function(e){if(e.geometry.attributes.extrudeNormals||!e.geometry.attributes.position)return;let t=e.geometry.attributes.position.array,i=new Float32Array(t.length),r=new iv;for(let e=0;e<t.length;e+=3)r.set(t[e],t[e+1],t[e+2]).normalize(),i[e]=r.x,i[e+1]=r.y,i[e+2]=r.z;e.geometry.setAttribute("extrudeNormal",new rT(i,3))}(e):function(e){if(e.geometry.attributes.extrudeNormal||!e.geometry.attributes.position||!e.geometry.attributes.normal)return;let t=new Map,i=e.geometry.attributes,r=i.position.array,s=i.normal.array,a=new Float32Array(r.length);for(let e=0;e<r.length;e+=3){let i=`${r[e]}_${r[e+1]}_${r[e+2]}`,a=new iv(s[e],s[e+1],s[e+2]);t.has(i)?t.get(i)?.normals.push(a):t.set(i,{normals:[a],result:new iv})}t.forEach((e,t)=>{for(let t of e.normals)e.result.add(t);e.result.divideScalar(e.normals.length)});for(let e=0;e<r.length;e+=3){let i=`${r[e]}_${r[e+1]}_${r[e+2]}`,s=t.get(i)?.result;s&&(a[e]=s.x,a[e+1]=s.y,a[e+2]=s.z)}e.geometry.setAttribute("extrudeNormal",new rT(a,3))}(e)}function MS(e){if(!e.geometry.attributes.position)return;let t=e.geometry.attributes.position.array,i=new Float32Array(t.length),r=parseInt(e.uuid.replace(/\D/g,"")),s=[tY.seededRandom(r),tY.seededRandom(r+1e4),tY.seededRandom(r+2e4)];for(let e=0;e<t.length;e++)i[e]=s[e%3];e.geometry.setAttribute("randomColor",new rM(i,3))}var M_=new ib,MA=new iv,MM=class extends Mb{constructor(e,t,i){super(e,t,i),this.data=t,this.hiddenMatrixOld=new iX,this.smoothShading=!0,this.skipReactionUpdate=!1}chooseGeoemtryCache(e){return this.dataPatched.flatShading?e.geometryCache:e.geometryCache2}get subdivPointerNew(){return void 0!==this.localGeometry?this.subdivPointer:this.geometry.ensureSubdivPointer()}get originalGeometryNew(){return void 0!==this.localGeometry?this.originalGeometry:this.geometry.originalGeometry}get phongAngle(){return this.data.geometry.phongAngle??45}updateEntityBoxSize(e,t){let i=this.geometry.userData.parameters;e.copy(this.originalGeometryNew.boundingSphere.center),t.set(i.width,i.height,i.depth??0).multiplyScalar(.5)}createGeometryByControls(e){if(!0===this.skipReactionUpdate)return;let t=this.localGeometry?.uuid,{originalGeometry:i,subdividedGeometry:r,subdivPointer:s}=Ss.build(e,this.subdivPointer,this.smoothShading,this.hasNonUniformScale?this.shearScale:void 0);this.subdivPointer=s,void 0!==i&&(this.originalGeometry?.dispose(),this.originalGeometry=i),void 0!==r&&(this.subdividedGeometry?.dispose(),this.subdividedGeometry=r??void 0),this.localGeometry=this.subdividedGeometry??this.originalGeometry,Mw(this),MS(this),this.calcBoundingBox(),t&&(this.localGeometry.uuid=t)}updateState(e,t){if(super.updateState(e,t),void 0!==e.flatShading){let i=this.material;this.material=Array.isArray(i)?i.map(e=>e.getFlavor(!1,e.side,e.wireframe)):i.getFlavor(!1,i.side,i.wireframe),this.smoothShading=!e.flatShading,this.createGeometryDelayed(t)}}updateMesh(e=!1){Ss.buildLevel(this.subdivPointer,!0,this.smoothShading?this.phongAngle:-1,this.originalGeometry,e&&this.hasNonUniformScale?this.shearScaleInv:void 0),this.subdividedGeometry&&Ss.buildLevel(this.subdivPointer,!1,this.smoothShading?this.phongAngle:-1,this.subdividedGeometry,e&&this.hasNonUniformScale?this.shearScaleInv:void 0)}updateTopology(){this.originalGeometry.dispose(),this.originalGeometry=Ss.buildLevel(this.subdivPointer,!0,this.smoothShading?this.phongAngle:-1),this.subdividedGeometry&&(this.subdividedGeometry.dispose(),this.subdividedGeometry=Ss.buildLevel(this.subdivPointer,!1,this.smoothShading?this.phongAngle:-1)),this.localGeometry=this.subdividedGeometry??this.originalGeometry}raycast(e,t){let i=this.localGeometry;this.localGeometry=this.originalGeometryNew,SP.prototype.raycast.call(this,e,t),this.localGeometry=i}activateSVDCompensation(){this.hasNonUniformScale&&(this.matrix.copy(this.matrixWorldRigid),this.hiddenMatrixOld.copy(this.hiddenMatrix),this.hiddenMatrix.copy(this.parent.matrixWorld).invert())}deactivateSVDCompensation(){this.hasNonUniformScale&&(this.updateMatrix(),this.hasNonUniformScale=void 0,this.hiddenMatrix.copy(this.hiddenMatrixOld))}calcBoundingBox(){let e=this.originalGeometry;null===e.boundingSphere&&(e.boundingSphere=new iN,this.subdividedGeometry&&(this.subdividedGeometry.boundingSphere=e.boundingSphere));let t=e.attributes.position,i=e.boundingSphere.center;M_.setFromBufferAttribute(t),M_.getCenter(i),e.boundingSphere.radius=i.distanceTo(M_.max),isNaN(e.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this),M_.getSize(MA),this.hasNonUniformScale&&MA.divi
5725de(this.scale);let r={width:MA.x,height:MA.y,depth:MA.z};return this.geometry.userData.parameters=r,r}updateBoundingSphere(e){let t=this.originalGeometry;M_.min.set(e[0],e[2],e[4]),M_.max.set(e[1],e[3],e[5]),this.hasNonUniformScale&&(M_.min.applyMatrix4(this.shearScaleInv),M_.max.applyMatrix4(this.shearScaleInv)),null===t.boundingSphere&&(t.boundingSphere=new iN);let i=t.boundingSphere.center;M_.getCenter(i),t.boundingSphere.radius=i.distanceTo(M_.max)}freeSubdivPointer(){this.subdivPointer&&(Ss.freeSubdivPointer(this.subdivPointer),this.subdivPointer=0),this.localGeometry=void 0,this.originalGeometry?.dispose(),this.subdividedGeometry?.dispose()}dispose(){super.dispose(),this.freeSubdivPointer()}updateByPatchedOpGeometry(e,t,i){super.updateByPatchedOpGeometry(e,t,i),this.localGeometry&&this.createGeometryByControls(t)}},ME={x:[1,0,0],"-x":[-1,0,0],y:[0,1,0],"-y":[0,-1,0],z:[0,0,1],"-z":[0,0,-1]},MC={polygon_center:0,edge:1,vertex:2},MT=(e,t)=>(i,r)=>t&&0!==i&&0!==e?e*r/100:0,MP=(e,t)=>{let i=Math.abs(t),r=-1*i;return(e- -1)*(i-r)/2+r},MD=new iv,MI=new iv,MO=new iv,MR=new iv;function ML(e,t){let i=MO.fromArray(e),r=MR.fromArray(t);MI.copy(r).sub(i);let s=MI.length();return MI.normalize().multiplyScalar(.5*s),MD.copy(i).add(MI).toArray()}var MB=new rx,Mz=new iv,MF=new iv,MN=new iv,Mk=e=>.5*(1-Math.cos(e*Math.PI)),MU=class{constructor(){this.perlin=Array(4096)}noise(e,t=0,i=0){if(null==this.perlin){this.perlin=Array(4096);for(let e=0;e<4096;e++)this.perlin[e]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),i<0&&(i=-i);let r=Math.floor(e),s=Math.floor(t),a=Math.floor(i),o=e-r,l=t-s,h=i-a,c,d,u=0,p=.5,f,m,g;for(let e=0;e<4;e++){let e=r+(s<<4)+(a<<8);c=Mk(o),d=Mk(l),f=this.perlin[4095&e],f+=c*(this.perlin[e+1&4095]-f),m=this.perlin[e+16&4095],m+=c*(this.perlin[e+16+1&4095]-m),f+=d*(m-f),e+=256,m=this.perlin[4095&e],m+=c*(this.perlin[e+1&4095]-m),g=this.perlin[e+16&4095],g+=c*(this.perlin[e+16+1&4095]-g),m+=d*(g-m),f+=Mk(h)*(m-f),u+=f*p,p*=.5,r<<=1,s<<=1,l*=2,a<<=1,h*=2,(o*=2)>=1&&(r++,o--),l>=1&&(s++,l--),h>=1&&(a++,h--)}return u}noiseSeed(e){let t,i;let r={setSeed(e){i=t=(e??4294967296*Math.random())>>>0},getSeed:()=>t,rand:()=>(i=(1664525*i+1013904223)%4294967296)/4294967296};r.setSeed(e),this.perlin=Array(4096);for(let e=0;e<4096;e++)this.perlin[e]=r.rand()}},MV=new iv,Mj=new iX,MG=new iq;function MH(e){let t=!1;return e.scene.objects.traverse((e,i)=>{"Mesh"===i.type&&("TextGeometry"===i.geometry.type||"InputGeometry"===i.geometry.type)&&(t=!0)}),t}var MW,Mq,MX,MY,MQ,MK=class extends Mb{constructor(e,t,i){super(e,t,i),this.data=t}get textGeometry(){return this.geometry}get charWidths(){return this.textGeometry.charWidths}get charCoords(){return this.textGeometry.charCoords}get wrappedText(){return this.textGeometry.wrappedText}get font(){return this.textGeometry.font}get initialOffsetY(){let e=this.dataPatched;return this.font?.getLineInitialOffsetY(this.lineHeight,this.wrappedText.length,e.geometry.height,this.fontScale,e.geometry.verticalAlign)??0}get fontScale(){let e=this.dataPatched;return this.font?e.geometry.fontSize/this.font.unitsPerEm:1}get AD(){return Math.abs(this.ascender-this.descender)}get ascender(){return(this.font?.ascender??1)*this.fontScale}get descender(){return(this.font?.descender??1)*this.fontScale}get lineHeight(){let e=this.dataPatched;return e.geometry.fontSize*e.geometry.lineHeight}raycast(e,t){let{matrixWorld:i}=this;if(!(isNaN(e.ray.origin.x)||0===this.scale.x||0===this.scale.y||0===this.scale.z)&&(Mj.copy(i).invert(),MG.copy(e.ray).applyMatrix4(Mj),MG.intersectBox(this.singleBBox,MV))){let r=MV.applyMatrix4(i),s=e.ray.origin.distanceTo(r);t.push({distance:s,point:r.clone(),object:this})}}},MZ=new iv,MJ=new iv;w1.then(e=>{MX=[(Mq=e).get_face_center,Mq.get_edge_midpoint,Mq.get_vertex_position],MY=[Mq.get_face_normal,Mq.get_edge_normal,Mq.get_vertex_normal],MQ=[Mq.face_count,Mq.edge_count,Mq.vertex_count]});var M$=new iX,M0=new iX,M1=new iv,M2=new iv,M3=new iv,M4=new iv,M5=new iv,M6=new iv,M8=class{constructor(e,t){this.data=e,this.is3D=t,this.perlin=new MU,"perlin"===e.noiseType?(this.perlin.noiseSeed(e.seed),t?this.noise=(e,t,i)=>this.perlin.noise(e,t,i):this.noise=e=>this.perlin.noise(e)):t?this.noise=function(e=Math.random){let t=xh(e),i=new Float64Array(t).map(e=>xl[e%12*3]),r=new Float64Array(t).map(e=>xl[e%12*3+1]),s=new Float64Array(t).map(e=>xl[e%12*3+2]);return function(e,a,o){let l,h,c,d,u=(e+a+o)*xs,p=xn(e+u),f=xn(a+u),m=xn(o+u),g=(p+f+m)*xa,v=e-(p-g),y=a-(f-g),x=o-(m-g),b,w,S,_,A,M;v>=y?y>=x?(b=1,w=0,S=0,_=1,A=1,M=0):(v>=x?(b=1,w=0,S=0):(b=0,w=0,S=1),_=1,A=0,M=1):y<x?(b=0,w=0,S=1,_=0,A=1,M=1):v<x?(b=0,w=1,S=0,_=0,A=1,M=1):(b=0,w=1,S=0,_=1,A=1,M=0);let E=v-b+xa,C=y-w+xa,T=x-S+xa,P=v-_+2*xa,D=y-A+2*xa,I=x-M+2*xa,O=v-1+3*xa,R=y-1+3*xa,L=x-1+3*xa,B=255&p,z=255&f,F=255&m,N=.6-v*v-y*y-x*x;if(N<0)l=0;else{let e=B+t[z+t[F]];N*=N,l=N*N*(i[e]*v+r[e]*y+s[e]*x)}let k=.6-E*E-C*C-T*T;if(k<0)h=0;else{let e=B+b+t[z+w+t[F+S]];k*=k,h=k*k*(i[e]*E+r[e]*C+s[e]*T)}let U=.6-P*P-D*D-I*I;if(U<0)c=0;else{let e=B+_+t[z+A+t[F+M]];U*=U,c=U*U*(i[e]*P+r[e]*D+s[e]*I)}let V=.6-O*O-R*R-L*L;if(V<0)d=0;else{let e=B+1+t[z+1+t[F+1]];V*=V,d=V*V*(i[e]*O+r[e]*R+s[e]*L)}return 32*(l+h+c+d)}}((0,xt.default)(e.seed)):this.noise=function(e=Math.random){let t=xh(e),i=new Float64Array(t).map(e=>xo[e%12*2]),r=new Float64Array(t).map(e=>xo[e%12*2+1]);return function(e,s){let a=0,o=0,l=0,h=(e+s)*xi,c=xn(e+h),d=xn(s+h),u=(c+d)*xr,p=e-(c-u),f=s-(d-u),m,g;p>
5725f?(m=1,g=0):(m=0,g=1);let v=p-m+xr,y=f-g+xr,x=p-1+2*xr,b=f-1+2*xr,w=255&c,S=255&d,_=.5-p*p-f*f;if(_>=0){let e=w+t[S],s=i[e],o=r[e];_*=_,a=_*_*(s*p+o*f)}let A=.5-v*v-y*y;if(A>=0){let e=w+m+t[S+g],s=i[e],a=r[e];A*=A,o=A*A*(s*v+a*y)}let M=.5-x*x-b*b;if(M>=0){let e=w+1+t[S+1],s=i[e],a=r[e];M*=M,l=M*M*(s*x+a*b)}return 70*(a+o+l)}}((0,xt.default)(e.seed))}},M9=class extends xv(rl){constructor(e,t){super(),this.parameters=t,this.objectForSample=void 0,this._pendingMediaLoad=!1,this.random=null,this.object=e}resetOnMove(){this.removeFromParent(),this.parent=null}expandClones(e){if(null===this.parent)this.updateState(this.parameters,e);else for(let e of this.children)e instanceof xb&&e.expand()}invalidateTransform(e){this.matrixWorldNeedsUpdate=!0,this.traverse(t=>{t instanceof xb&&t.object===e&&(t.matrixWorldNeedsUpdate=!0)})}onObjUpdateMatrix(){"toObject"!==this.parameters.type&&(this.matrixWorldNeedsUpdate=!0)}update(){switch(this._updateCount(),this.parameters.type){case"radial":this._updateRadial(this.parameters);break;case"linear":this._updateLinear(this.parameters);break;case"grid":this._updateGrid(this.parameters);break;case"toObject":this._updateToObject(this.parameters)}for(let e of this.children)e.updateMatrix(),e.hasNonUniformScale&&(e.updateMatrixWorld(),e.updateMatrixWorldSVD())}_updateCount(e){let t;if(t=void 0!==e?e:"grid"===this.parameters.type?Math.round(this.parameters.grid.count[0])*Math.round(this.parameters.grid.count[1])*Math.round(this.parameters.grid.count[2]):this.parameters.count,"toObject"===this.parameters.type){if(this.parameters.toObject.object){if(void 0===e&&"random"!==this.parameters.toObject.spreadType)return}else t=0}if("toObject"===this.parameters.type&&this.objectForSample){let e=this.children;if(e.length===t)return;if(e.length<t)for(let i=0,r=t-e.length;i<r;++i){let e=new xb(this.object);e.expand(),this.add(e)}else for(let i=0,r=e.length-t;i<r;++i)this.remove(e[i])}else{if(this.children.length===t)return;if(this.children.length<t)for(let e=0,i=t-this.children.length;e<i;++e){let e=new xb(this.object);e.expand(),this.add(e)}else for(let e=0,i=this.children.length-t;e<i;++e)this.remove(this.children[e])}}getRandom(e,t=!1){return(null===this.random||this.random.data.seed!==e.seed||this.random.is3D!==t)&&(this.random=new M8(e,t)),this.random}_updateRadial(e){let t=e.radial,i=t.start*tY.DEG2RAD,r=i-t.end*tY.DEG2RAD,s=new i3(t.rotation[0],t.rotation[1],t.rotation[2]),a;switch(t.axis){case"z":a=new iv(0,0,1);break;case"y":a=new iv(0,1,0);break;default:a=new iv(1,0,0)}let o=e.randomnessObject??gu.defaultData([1,1,1]).randomnessObject,l=this.getRandom(o),h=MT(o.strength,this.parameters.randomness);for(let[c,d]of this.children.entries()){let u=o.freqScale/10*c+o.movement,p=l.noise(u,u,u),f=c+1;d.scale.x=t.scale[0]+h(f,MP(p,o.scale[0]))||1e-4,d.scale.y=t.scale[1]+h(f,MP(p,o.scale[1]))||1e-4,d.scale.z=t.scale[2]+h(f,MP(p,o.scale[2]))||1e-4,d.position.setScalar(0);let m=r/e.count*c-i;switch(t.axis){case"x":d.rotation.set(0,m,0);break;case"y":d.rotation.set(0,0,m);break;case"z":d.rotation.set(m,0,0)}d.translateOnAxis(a,t.radius),d.position.x+=t.position[0]+h(f,MP(p,o.position[0])),d.position.y+=t.position[1]+h(f,MP(p,o.position[1])),d.position.z+=t.position[2]+h(f,MP(p,o.position[2]));let g=h(f,MP(p,o.rotation[0])),v=h(f,MP(p,o.rotation[1])),y=h(f,MP(p,o.rotation[2]));!0===t.alignment?(d.rotation.x+=s.x+g,d.rotation.y+=s.y+v,d.rotation.z+=s.z+y):d.rotation.set(s.x+g,s.y+v,s.z+y)}}_updateLinear(e){if("linear"!==e.type)throw Error();let t=e.linear,i=new i3(t.rotation[0],t.rotation[1],t.rotation[2]),r=e.randomnessObject??gu.defaultData([1,1,1]).randomnessObject,s=this.getRandom(r),a=MT(r.strength,this.parameters.randomness);for(let[e,o]of this.children.entries()){let l=r.freqScale/10*e+r.movement,h=s.noise(l,l,l),c=e+1,d=a(c,MP(h,r.rotation[0])),u=a(c,MP(h,r.rotation[1])),p=a(c,MP(h,r.rotation[2]));o.scale.x=1+(t.scale[0]-1)*e+a(c,MP(h,r.scale[0]))||1e-4,o.scale.y=1+(t.scale[1]-1)*e+a(c,MP(h,r.scale[1]))||1e-4,o.scale.z=1+(t.scale[2]-1)*e+a(c,MP(h,r.scale[2]))||1e-4,o.rotation.x=i.x*e+d,o.rotation.y=i.y*e+u,o.rotation.z=i.z*e+p,o.position.x=t.position[0]*e+a(c,MP(h,r.position[0])),o.position.y=t.position[1]*e+a(c,MP(h,r.position[1])),o.position.z=t.position[2]*e+a(c,MP(h,r.position[2]))}}_updateGrid(e){let t=0,i=e.grid,r=e.randomnessObject??gu.defaultData([1,1,1]).randomnessObject,s=this.getRandom(r,!0),a=MT(r.strength,this.parameters.randomness);if(!0===i.useCenter){let e={x:i.count[0]%2==0?2:1,y:i.count[1]%2==0?2:1,z:i.count[2]%2==0?2:1},o=new iv(i.size[0]*(i.count[0]-e.x)*.5,i.size[1]*(i.count[1]-e.y)*.5,i.size[2]*(i.count[2]-e.z)*.5);for(let e=0;e<i.count[0];e++)for(let l=0;l<i.count[1];l++)for(let h=0;h<i.count[2];h++){let c=s.noise(r.freqScale/10*(e+1)+r.movement,r.freqScale/10*(l+1)+r.movement,r.freqScale/10*(h+1)+r.movement),d=this.children[t++];
5725d.scale.x=1+a(t,MP(c,r.scale[0]))||1e-4,d.scale.y=1+a(t,MP(c,r.scale[1]))||1e-4,d.scale.z=1+a(t,MP(c,r.scale[2]))||1e-4;let u=a(t,MP(c,r.rotation[0])),p=a(t,MP(c,r.rotation[1])),f=a(t,MP(c,r.rotation[2]));d.rotation.set(u,p,f),d.position.x=i.size[0]*e-o.x+a(t,MP(c,r.position[0])),d.position.y=i.size[1]*l-o.y+a(t,MP(c,r.position[1])),d.position.z=i.size[2]*h-o.z+a(t,MP(c,r.position[2]))}}else for(let e=0;e<i.count[0];e++)for(let o=0;o<i.count[1];o++)for(let l=0;l<i.count[2];l++){let h=s.noise(r.freqScale/10*(e+1)+r.movement,r.freqScale/10*(o+1)+r.movement,r.freqScale/10*(l+1)+r.movement),c=this.children[t++];c.scale.x=1+a(t,MP(h,r.scale[0]))||1e-4,c.scale.y=1+a(t,MP(h,r.scale[1]))||1e-4,c.scale.z=1+a(t,MP(h,r.scale[2]))||1e-4;let d=a(t,MP(h,r.rotation[0])),u=a(t,MP(h,r.rotation[1])),p=a(t,MP(h,r.rotation[2]));c.rotation.set(d,u,p),c.position.x=i.size[0]*e+a(t,MP(h,r.position[0])),c.position.y=-i.size[1]*o+a(t,MP(h,r.position[1])),c.position.z=-i.size[2]*l+a(t,MP(h,r.position[2]))}}_updateToObject(e){if("toObject"!==e.type)throw Error();let{toObject:t}=e,i=new i3(t.rotation[0],t.rotation[1],t.rotation[2]),r=e.randomnessObject??gu.defaultData([1,1,1]).randomnessObject,s=this.getRandom(r),a=MT(r.strength,this.parameters.randomness);if(!t.object){for(let[,e]of this.children.entries())e.position.set(0,0,0),e.scale.setScalar(1),e.rotation.set(0,0,0);this.objectForSample=void 0;return}if(!this.objectForSample)return;if(this.objectForSample instanceof MK){if(this.objectForSample.font?.isLoaded&&void 0!==this.objectForSample.geometry.attributes.position)this._pendingMediaLoad=!1;else{this._pendingMediaLoad=!0;return}}if(void 0===this.objectForSample.geometry&&this.objectForSample.isAncestorOf(this.object.uuid)){console.warn(`Oh no! The object "${this.object.name}" (${this.object.uuid}) seem to be a child/descendant of the object it's being cloned to. Please re-parent it so that they are siblings instead.`);return}let o=this.getSubdivData();if(o.length>0){let e=Math.round(o.length*t.count/100);this._updateCount(e)}else{let e=this.objectForSample.geometry.getAttribute("position");if(!e||isNaN(e.count)||0===e.count){console.warn(`Oh no! The object "${this.object.name}" (${this.object.uuid}) cannot be cloned on the surface of "${this.objectForSample.name}" (${this.objectForSample.uuid}) because the latter does not have a valid geometry.`);return}}this.objectForSample.updateMatrixWorld();let l=new xu(this.objectForSample).build(),h=ME[t.axis],c=this.children;for(let[e,d]of(l.setRandomGenerator((0,xt.default)(this.object.uuid+t.seed)),c.entries())){let c=r.freqScale/10*e+r.movement,u=s.noise(c,c,c),p=e+1,f=a(p,MP(u,r.rotation[0])),m=a(p,MP(u,r.rotation[1])),g=a(p,MP(u,r.rotation[2]));"random"===t.spreadType?l.sample(M3,M4):(o.length&&(M3.fromArray(o[e].pos),M4.fromArray(o[e].norm)),this.objectForSample instanceof MM&&M3.applyMatrix4(M$.copy(this.objectForSample.matrixWorld).invert())),M3.applyMatrix4(this.object.hiddenMatrix.clone().invert()),d.position.copy(M3),M1.fromArray(h);let v="normal"===t.align?M4:this.object.getWorldDirection(M6),y=M2.fromArray(t.position);M2.x+=a(p,MP(u,r.position[0])),M2.y+=a(p,MP(u,r.position[1])),M2.z+=a(p,MP(u,r.position[2]));let x=Math.acos(v.dot(M1)),b=M5.crossVectors(M1,v).normalize(),w=M0.makeRotationAxis(b,x),S=v.clone().cross(this.object.up).normalize(),_=S.clone().cross(v).normalize(),A=new iX().makeBasis(S,v,_),M=new iv(M1.y,M1.z,M1.x).normalize(),E=M.clone().cross(M1).normalize(),C=new iX().makeBasis(M,M1,E).invert(),T=new iX().multiplyMatrices(A,C);d.rotation.setFromRotationMatrix(T),y.applyMatrix4(w),d.position.add(y),d.rotation.x=d.rotation.x+i.x+f,d.rotation.y=d.rotation.y+i.y+m,d.rotation.z=d.rotation.z+i.z+g,d.scale.setScalar(1),d.scale.x=d.scale.x+t.scale[0]+a(p,MP(u,r.scale[0]))||1e-4,d.scale.y=d.scale.y+t.scale[1]+a(p,MP(u,r.scale[1]))||1e-4,d.scale.z=d.scale.z+t.scale[2]+a(p,MP(u,r.scale[2]))||1e-4,d.scale.multiply(this.object.scale),d.hiddenMatrix=this.object.hiddenMatrix}}getSubdivData(){if(!this.objectForSample)return[];let e=this.parameters.toObject.spreadType,t=new Map,i=(e,i)=>{let r=Math.round(1e4*e[0])+"_"+Math.round(1e4*e[1])+"_"+Math.round(1e4*e[2]),s=t.get(r);s?(s.pos[0]+=e[0],s.pos[1]+=e[1],s.pos[2]+=e[2],s.norm[0]+=i[0],s.norm[1]+=i[1],s.norm[2]+=i[2],s.c
5725ount+=1):t.set(r,{pos:[...e],norm:[...i],count:1})};if("random"===e)return[];if(this.objectForSample instanceof MM){let t=this.objectForSample,r=MC[e],s=MQ[r],a=MX[r],o=MY[r],l=s(t.subdivPointerNew);for(let e=0;e<=l-1;e++){let r=a(t.subdivPointerNew,e),s=o(t.subdivPointerNew,e);MZ.fromArray(r).applyMatrix4(t.matrixWorld),MJ.fromArray(s),i(MZ.toArray(),MJ.toArray())}}else(this.objectForSample.geometry.index?function(e){let t=[];for(let i=0;i<=e.index.count;i++)if(Mz.fromArray(e.index.array,3*i),MB.setFromAttributeAndIndices(e.attributes.position,Mz.x,Mz.y,Mz.z),MB.getNormal(MF),MB.getMidpoint(MN),!(isNaN(MN.x)||isNaN(MN.y)||isNaN(MN.z))){let{a:e,b:i,c:r}=MB,s=e.toArray(),a=i.toArray(),o=r.toArray(),l=e.distanceTo(i),h=i.distanceTo(r),c=r.distanceTo(e),d=ML(s,a),u=ML(a,o),p=ML(o,s),f=[l,h,c],m=Math.max(...f),g=f.filter(e=>Math.round(e)===Math.round(m)).length>1,v=[],y=MB.getMidpoint(MN).toArray();m!==l||g||(v=[u,p,p],y=d),m!==h||g||(v=[d,p,p],y=u),m!==c||g||(v=[d,u,u],y=p),g&&(v=[d,u,p]),t.push({vertices:[s,a,o],faceCenters:v,midpoint:y,norm:MB.getNormal(MF).toArray()})}return t}(this.objectForSample.geometry):function(e){let t=[],{position:i}=e.attributes;for(let e=0;e<i.count;e++){MB.setFromAttributeAndIndices(i,3*e,3*e+1,3*e+2),MB.getNormal(MF),MB.getMidpoint(MN);let r=MB.a.toArray(),s=MB.b.toArray(),a=MB.c.toArray();t.push({vertices:[r,s,a],faceCenters:[ML(r,s),ML(s,a),ML(a,r)],midpoint:MN.toArray(),norm:MF.toArray()})}return t}(this.objectForSample.geometry)).forEach((t,r)=>{"polygon_center"===e&&i(t.midpoint,t.norm),"vertex"===e&&(i(t.vertices[0],t.norm),i(t.vertices[1],t.norm),i(t.vertices[2],t.norm)),"edge"===e&&(i(t.faceCenters[0],t.norm),i(t.faceCenters[1],t.norm),i(t.faceCenters[2],t.norm))});let r=Array.from(t.values());for(let e of r)e.pos[0]/=e.count,e.pos[1]/=e.count,e.pos[2]/=e.count,e.norm[0]/=e.count,e.norm[1]/=e.count,e.norm[2]/=e.count;return r}updateState(e,t){if(this.parameters=uc(e),"toObject"!==this.parameters.type)(null===this.parent||this.parent!==this.object)&&(this.removeFromParent(),this.object.parent?.add(this),this.matrix=this.object.matrix,this.hiddenMatrix=this.object.hiddenMatrix,this.matrixWorldNeedsUpdate=!0,this.matrixAutoUpdate=!1);else if(null===this.parent||this.parent.uuid!==this.parameters.toObject.object){this.removeFromParent();let e=t.find(this.parameters.toObject.object);e instanceof SP?this.objectForSample=e:this.objectForSample=void 0,this.matrix=new iX,this.hiddenMatrix=new iX,this.matrixWorldNeedsUpdate=!0,this.matrixAutoUpdate=!1,e&&e.add(this)}this.update()}get pendingMediaLoad(){return this._pendingMediaLoad}},M7=e=>{var t;return(t=class extends e{}).geometryHelper=new rJ(30,30,30),t},Ee=new iq,Et=new iN,Ei=new iX,Er=(e,t,i,r,s=!1,a=e)=>{let o=a.matrixWorld;if(null===t.boundingSphere&&t.computeBoundingSphere(),Et.copy(t.boundingSphere),Et.applyMatrix4(o),!1===i.ray.intersectsSphere(Et)||(Ei.copy(o).invert(),Ee.copy(i.ray).applyMatrix4(Ei),null!==t.boundingBox&&!1===Ee.intersectsBox(t.boundingBox)))return;let l,h=t.index,c=t.attributes.position,d=t.drawRange,u;if(!1===s){let t=Math.max(0,d.start),s=Math.min(h.count,d.start+d.count);for(u=t;u<s;u+=3)if(l=function(e,t,i,r,s,a,o){let l=new iv,h=new iv,c=new iv,d=new iv,u=new iv;if(l.fromBufferAttribute(r,s),h.fromBufferAttribute(r,a),c.fromBufferAttribute(r,o),null===i.intersectTriangle(l,h,c,!1,d))return null;u.copy(d),u.applyMatrix4(e.matrixWorld);let p=t.ray.origin.distanceTo(u);return p<t.near||p>t.far?null:{faceIndex:1,distance:p,point:u.clone(),object:e}}(e,i,Ee,c,h.getX(u),h.getX(u+1),h.getX(u+2))){l.faceIndex=Math.floor(u/3),r.push(l);return}}else{let s=t.attributes.position,o=new iv,l=new iv,h=new iv,c=new iv,u=1/((a.scale.x+a.scale.y+a.scale.z)/3),p=u*u,f=Math.max(0,d.start),m=Math.min(s.count,d.start+d.count);for(let t=f,d=m-1;t<d;t+=2){if(o.fromBufferAttribute(s,t),l.fromBufferAttribute(s,t+1),Ee.distanceSqToSegment(o,l,c,h)>p)continue;c.applyMatrix4(a.matrixWorld);let d=i.ray.origin.distanceTo(c);d<i.near||d>i.far||r.push({distance:d,point:h.clone().applyMatrix4(a.matrixWorld),object:e})}}},Es=new iv,Ea=new r6,En=class extends nW{constructor(e){let t=new rz,i=new nz({color:16777215,vertexColors:!0,toneMapped:!1}),r=[],s=[],a={},o=new ii(15711266),l=new ii(15711266),h=new ii(2857471);function c(e,t,i){d(e,i),d(t,i)}function d(e,t){r.push(0,0,0),s.push(t.r,t.g,t.b),void 0===a[e]&&(a[e]=[]),a[e].push(r.length/3-1)}c("n1","n2",o),c("n2","n4",o),c("n4","n3",o),c("n3","n1",o),c("f1","f2",o),c("f2","f4",o),c("f4","f3",o),c("f3","f1",o),c("n1","f1",o),c("n2","f2",o),c("n3","f3",o),c("n4","f4",o),c("p","
5725n1",l),c("p","n2",l),c("p","n3",l),c("p","n4",l),c("u1","u2",h),c("u2","u3",h),c("u3","u1",h),t.setAttribute("position",new rT(r,3)),t.setAttribute("color",new rT(s,3)),super(t,i),this.type="CameraHelper",this.camera=e,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=a,this.update()}update(){let e=this.geometry,t=this.pointMap;Ea.projectionMatrixInverse.elements=[.5112609807824982,-0,-0,-0,-0,.41421356237309503,-0,-0,-0,-0,-0,-.099999,-0,-0,-1.0000000000000002,.100001],Eo("n1",t,e,Ea,-1,-1,.8),Eo("n2",t,e,Ea,1,-1,.8),Eo("n3",t,e,Ea,-1,1,.8),Eo("n4",t,e,Ea,1,1,.8),Eo("f1",t,e,Ea,-1,-1,.8),Eo("f2",t,e,Ea,1,-1,.8),Eo("f3",t,e,Ea,-1,1,.8),Eo("f4",t,e,Ea,1,1,.8),Eo("u1",t,e,Ea,.35,1.1,.8),Eo("u2",t,e,Ea,-.35,1.1,.8),Eo("u3",t,e,Ea,0,1.55,.8),e.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}};function Eo(e,t,i,r,s,a,o){Es.set(s,a,o).unproject(r);let l=t[e];if(void 0!==l){let e=i.getAttribute("position");for(let t=0,i=l.length;t<i;t++)e.setXYZ(l[t],Es.x,Es.y,Es.z)}}var El=class extends M7(En){constructor(e){super(e),this.object=e,this.object=e,this.name=`CombinedCameraHelper: ${e.uuid}`}updateMatrixWorld(e){super.updateMatrixWorld(e),this.updateTarget()}updateTarget(){let e=this.object.getTarget();this.updateWorldMatrix(!0,!1),this.worldToLocal(e)}raycast(e,t){Er(this.object,this.geometry,e,t,!0)}};(TG||(TG={})).is=e=>"objectHelper"in e;var Eh=(e,t)=>class extends xk(e){constructor(){super(...arguments),this.objectHelper=new t(this),this.gizmos={}}get geometryHelper(){return t.geometryHelper}raycast(e,t){this.objectHelper.raycast(e,t)}showGizmos(){for(let e in this.gizmos){let t=this.gizmos[e];t instanceof lZ&&(t.visible=!0)}}updateEntityBoxSize(e,t){this.objectHelper.visible&&this.geometryHelper instanceof rJ?(e.setScalar(0),t.set(this.geometryHelper.parameters.width,this.geometryHelper.parameters.height,this.geometryHelper.parameters.height).multiplyScalar(.5)):super.updateEntityBoxSize(e,t)}hideGizmos(){for(let e in this.gizmos){let t=this.gizmos[e];t instanceof lZ&&(t.visible=!1)}}},Ec=new iv,Ed=new iv,Eu=new ig,Ep=new iv,Ef=new iv,Em=new iv,Eg=class extends Eh(r6,El){constructor(e="",t={...v7.defaultData,name:""}){super(),this._cameraType="OrthographicCamera",this.targetOffset=gd.DefaultTargetOffset,this.isUpVectorFlipped=!1,this.angleOffsetFromUp=0,this.wasMovedByUser=!1,this.wasMovedBySwitchCameraAction=!1,this.super_Entity(e,t),this.previousProjectionMatrix=new iX,this.matrixAutoUpdate=!0,this.width=window.innerWidth,this.height=window.innerHeight;let i=this.width,r=this.height;this.orthoCamera=new sw(-.5*i,.5*i,.5*r,-.5*r,-5e4,1e4),this.perspCamera=new r8(45,i/r,50,1e4),this.left=this.orthoCamera.left,this.right=this.orthoCamera.right,this.top=this.orthoCamera.top,this.bottom=this.orthoCamera.bottom,this.far=this.orthoCamera.far,this.view=this.orthoCamera.view,this.aspect=this.perspCamera.aspect,this.focus=this.perspCamera.focus,this.filmGauge=this.perspCamera.filmGauge,this.filmOffset=this.perspCamera.filmOffset,this.objectHelper.update()}get isPerspectiveCamera(){return"PerspectiveCamera"===this.cameraType}get isOrthographicCamera(){return!this.isPerspectiveCamera}get cameraType(){return this._cameraType}set fov(e){this.perspCamera.fov=e}get fov(){return this.perspCamera.fov}setNear(e,t){"PerspectiveCamera"===e?this.perspCamera.near=t:this.orthoCamera.near=t}setZoom(e,t){t>=0&&("PerspectiveCamera"===e?this.perspCamera.zoom=t:this.orthoCamera.zoom=t)}set cameraType(e){"PerspectiveCamera"===e?this.toPerspective():"OrthographicCamera"===e&&this.toOrthographic()}get near(){return"PerspectiveCamera"===this._cameraType?this.perspCamera.near:this.orthoCamera.near}set near(e){"PerspectiveCamera"===this._cameraType?this.perspCamera.near=e:this.orthoCamera.near=e}get zoom(){return"PerspectiveCamera"===this._cameraType?this.perspCamera.zoom:this.orthoCamera.zoom}set zoom(e){e>=0&&("PerspectiveCamera"===this._cameraType?this.perspCamera.zoom=e:this.orthoCamera.zoom=e)}lookAt(e,t,i){"number"==typeof e&&(e=new iv(e,t,i)),super.lookAt(e),this.getWorldPosition(Ec),this.targetOffset=Ec.distanceTo(e)}getTarget(e=new iv){return this.getWorldDirection(Ed),this.getWorldPosition(Ec),Ed.multiplyScalar(this.targetOffset),e.copy(Ec).add(Ed),e}getDistanceToTarget(){let e=this.getTarget();return this.getWorldPosition(Ec),Ec.distanceTo(e)}updateUp(){this.getWorldQuaternion(Eu),Ep.set(0,0,1).applyQuaternion(Eu),Ef.copy(rl.DEFAULT_UP),this.isUpVectorFlipped&&Ef.negate(),Ef.applyQuaternion(Eu),Em.copy(rl.DEFAULT_UP).projectOnPlane(Ep),this.angleOffsetFromUp=Em.angleTo(Ef),this.angleOffsetFromUp*=Em.cross(Ef).dot(Ep
vendor: 4,749 bytes, line 5725
5725)>=0?1:-1}updateTransformState(e,t){let i=super.updateTransformState(e,t);return void 0!==e.isUpVectorFlipped&&(this.isUpVectorFlipped=e.isUpVectorFlipped),this.updateUp(),i}getViewFrontToObject(e){let t=e.getWorldPosition(new iv),i=e.getWorldDirection(new iv).multiplyScalar(this.targetOffset);return{position:t.clone().add(i),target:t}}getViewToTarget(e){let t=this.getWorldDirection(new iv).multiplyScalar(this.targetOffset);return{position:e.clone().sub(t),target:e}}getViewToObject(e){let t=new iv;return e.getWorldPosition(t),this.getViewToTarget(t)}setViewplaneSize(e,t,i=!1){if(this.aspect=e/t,i){let i=e>t?this.aspect:1,r=e>t?1:this.aspect;this.left=-395*i,this.right=395*i,this.top=1/r*395,this.bottom=-(1/r*395)}else this.left=-(.5*e),this.right=.5*e,this.top=.5*t,this.bottom=-(.5*t);this.updateProjectionMatrix()}copyViewPlaneSize(e){this.aspect=e.aspect,this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.updateProjectionMatrix()}toOrthographic(){this.orthoCamera.left=this.left,this.orthoCamera.right=this.right,this.orthoCamera.top=this.top,this.orthoCamera.bottom=this.bottom,this.orthoCamera.view=this.view,this.orthoCamera.far=this.far,this.orthoCamera.updateProjectionMatrix(),this.projectionMatrix=this.orthoCamera.projectionMatrix,this.projectionMatrixInverse=this.orthoCamera.projectionMatrixInverse,this._cameraType="OrthographicCamera",this.objectHelper&&this.objectHelper.update()}toPerspective(){this.perspCamera.aspect=this.aspect,this.perspCamera.fov=this.fov,this.perspCamera.view=this.view,this.perspCamera.far=this.far,this.perspCamera.updateProjectionMatrix(),this.projectionMatrix=this.perspCamera.projectionMatrix,this.projectionMatrixInverse=this.perspCamera.projectionMatrixInverse,this._cameraType="PerspectiveCamera",this.objectHelper&&this.objectHelper.update()}setFocalLength(e){this.perspCamera.setFocalLength(e),this.toPerspective()}getFocalLength(){return this.perspCamera.getFocalLength()}getEffectiveFOV(){return this.perspCamera.getEffectiveFOV()}getFilmWidth(){return this.perspCamera.getFilmWidth()}getFilmHeight(){return this.perspCamera.getFilmHeight()}setViewOffset(e,t,i,r,s,a){"PerspectiveCamera"===this._cameraType?this.perspCamera.setViewOffset(e,t,i,r,s,a):this.orthoCamera.setViewOffset(e,t,i,r,s,a)}clearViewOffset(){"PerspectiveCamera"===this._cameraType?(this.perspCamera.clearViewOffset(),this.toPerspective()):(this.orthoCamera.clearViewOffset(),this.toOrthographic())}copyHistory(){this.previousProjectionMatrix&&this.previousProjectionMatrix.copy(this.projectionMatrix)}updateProjectionMatrix(){"PerspectiveCamera"===this._cameraType?this.toPerspective():"OrthographicCamera"===this._cameraType&&this.toOrthographic()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}copy(e,t){return super.copy(e,t),this.parent=e.parent,this.orthoCamera.copy(e.orthoCamera),this.perspCamera.copy(e.perspCamera),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.far=e.far,this.view=null===e.view?null:Object.assign({},e.view),this._cameraType=e._cameraType,this.aspect=e.aspect,this.fov=e.fov,this.focus=e.focus,this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this.targetOffset=e.targetOffset,this.updateProjectionMatrix(),this}toCameraState(e=[]){return uN({type:this.cameraType,far:this.far,orthographic:{near:this.orthoCamera.near,zoom:this.orthoCamera.zoom},perspective:{near:this.perspCamera.near,fov:this.perspCamera.fov,zoom:this.perspCamera.zoom},up:this.up.toArray(),targetOffset:this.targetOffset,isUpVectorFlipped:this.isUpVectorFlipped},e)}updateCameraSubtype(e,t){let i="perspective"===e?"PerspectiveCamera":"OrthographicCamera";void 0!==t.zoom&&this.setZoom(i,t.zoom),void 0!==t.near&&this.setNear(i,t.near),void 0!==t.fov&&"PerspectiveCamera"===i&&(this.fov=t.fov)}updateState(e,t){this.updateCameraState(e,t)}updateCameraState(e,t){this.updateState_Entity(e,t),void 0!==e.far&&(this.far=e.far),void 0!==e.orthographic&&this.updateCameraSubtype("orthographic",e.orthographic),void 0!==e.perspective&&this.updateCameraSubtype("perspective",e.perspective),void 0!==e.type&&(this.cameraType=e.type),void 0!==e.up&&this.up.fromArray(e.up),void 0!==e.targetOffset&&(this.targetOffset=e.targetOffset),void 0!==e.isUpVectorFlipped&&(this.isUpVectorFlipped=e.isUpVectorFlipped),this.updateProjectionMatrix()}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),1===e.path.length&&0===e.type&&this.updateCameraSubtype(e.path[0],e.props)}toState(e){return{...super.toState(e),...this.toCameraState(e),type:this.cameraType}}},Ev=new iX,Ey=new iX;function Ex(e){let t=!1;
5725return e.scene.objects.traverse((e,i)=>{i.geometry?.type==="BooleanGeometry"&&(t=!0)}),t}var Eb=class extends Mf{constructor(e,t,i){super(e,t),this.data=t,this.meshSetAddresses=[],this.needsTransformForDownstream=!1,this.geometry=new rz,this.onAfterRender=(e,t,i,r,s,a)=>{super.onAfterRender(e,t,i,r,s,a),this.recomputeBoolean()},this.geometry.userData.parameters={width:0,height:0,depth:0}}get booleanOp(){return this.data.geometry.operation}get phongAngle(){return this.data.geometry.phongAngle??45}get isLOD(){return this.recomputeBoolean(),!1}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),1===e.path.length&&"geometry"===e.path[0]&&0===e.type&&void 0!==e.props.operation&&(this.freeBooleanPointer(),this.resetBBoxNeedsUpdate())}freeBooleanPointer(){super.freeBooleanPointer(),this.geometry.dispose()}recomputeBoolean(e,t=!0){if(-1!==this.booleanMeshSetAddress&&!e)return;for(let i=0;i<this.children.length;i++){let r=this.children[i];r instanceof Eb&&!0===r.dataPatched.visible&&r.recomputeBoolean(!0===e,t)}this.meshSetAddresses=[];for(let i=0;i<this.children.length;i++){let r=this.children[i];if(r instanceof SP&&!0===r.dataPatched.visible&&r.geometry.attributes.position?.count>0&&r.geometry.drawRange.count>0&&0!==r.booleanMeshSetAddress){Ev.multiplyMatrices(r.hiddenMatrix,r.matrix);try{if(-1===r.booleanMeshSetAddress){if((r.geometry.index??r.geometry.getAttribute("position")).count/3<15e5&&(r.booleanMeshSetAddress=Su.getMeshSet(r.geometry,!0===e,t)),-1===r.booleanMeshSetAddress)return;Su.transformMeshSet(r.booleanMeshSetAddress,Ev),r.booleanMatrixInvOld.copy(Ev).invert(),r.booleanWasTransformed=!1}else r instanceof Eb&&!0===r.needsTransformForDownstream?(Su.transformMeshSet(r.booleanMeshSetAddress,Ev),r.needsTransformForDownstream=!1):!0===r.booleanWasTransformed&&(Su.transformMeshSet(r.booleanMeshSetAddress,Ey.multiplyMatrices(Ev,r.booleanMatrixInvOld)),r.booleanMatrixInvOld.copy(Ev).invert(),r.booleanWasTransformed=!1)}catch(e){console.error(e),r.booleanMeshSetAddress=0,r.geometry.userData.booleanOperationDidFail=!0;continue}!1===Su.hasOpenEdges(r.booleanMeshSetAddress)||i===this.children.length-1&&2===this.booleanOp?(this.meshSetAddresses.push(r.booleanMeshSetAddress),r.geometry.userData.booleanOperationDidFail=!1):r.geometry.userData.booleanOperationDidFail="openEdges"}}if(0===this.meshSetAddresses.length){this.geometry.setAttribute("position",new rT([],0)),this.geometry.setDrawRange(0,0);return}if(!0===e)return Su.calcBooleanTopological(this.meshSetAddresses,this.booleanOp);let i=this.geometry;i.dispose(),this.geometry=new rz,this.geometry.userData=i.userData,this.geometry.boundingSphere=i.boundingSphere;try{this.booleanMeshSetAddress=Su.calcBoolean(this.meshSetAddresses,this.booleanOp,this.geometry,this.phongAngle)}catch(e){this.booleanMeshSetAddress=0,this.geometry.userData.booleanOperationDidFail=!0,console.error(e)}this.booleanMatrixInvOld.copy(this.matrix).invert(),this.needsTransformForDownstream=!0,Mw(this),MS(this)}dispose(){super.dispose(),this.geometry.dispose()}};(TH||(TH={})).is=function(e){return wQ.is(e)&&e instanceof o7};var Ew=(e,t)=>class extends Eh(e,t){updateState_Light(e,t){this.updateState_Entity(e,t),void 0!==e.color&&(this.color=t.shared.color(e.color)),void 0!==e.intensity&&(this.intensity=e.intensity),void 0!==e.depth&&(this.shadow.camera.far=e.depth,this.shadow.needsUpdate=!0),void 0!==e.shadows&&(this.castShadow=e.shadows)}},ES=e=>e instanceof SP,E_=e=>null!==e&&e instanceof Eb,EA=e=>e instanceof Eg,EM=e=>TH.is(e),EE=e=>TG.is(e),EC=new iv(1,1,1),ET=new iv,EP=new iv,ED=new ig,EI=class extends M7(lJ){constructor(e,t=15){super(t),this.object=e,this.dummy=new nd,this.object.updateMatrixWorld(),this.name=`EmptyObjectHelper: ${e.uuid}`,this.matrix=this.dummy.matrixWorld,this.matrixAutoUpdate=!1,this.object.isBone&&(this.visible=!1)}raycast(e,t){Er(this.object,EI.geometryHelper,e,t,!1,this.dummy)}update(){}updateMatrix(){}updateMatrixWorld(e){this.object.matrixWorld.decompose(ET,ED,EP),this.matrix.compose(ET,ED,EC),super.updateMatrixWorld(e)}updateWorldMatrix(e,t){}},EO=class extends Eh(nd,EI){constructor(e,t){super(),this.super_Entity(e,t),this.objectHelper.update(
vendor: 16,384 bytes, lines 5725-5872
5725)}updateState(e,t){this.updateState_Entity(e,t),"buffer"in e&&1===Object.keys(e).length&&t.scene.reloadSplats()}},ER=class extends Eh(nd,EI){constructor(e,t,i){super(),this.super_Entity(e,t),this.context=i,this.objectHelper.update()}updateState(e,t){this.updateState_Entity(e,t)}},EL="varying vec2 vUv;void main(){vUv=position.xy*0.5+0.5;gl_Position=vec4(position.xy,1.0,1.0);}",EB=`#ifdef FRAMEBUFFER_PRECISION_HIGH
5726uniform mediump sampler2D inputBuffer;
5727#else
5728uniform lowp sampler2D inputBuffer;
5729#endif
5730uniform lowp sampler2D cocBuffer;uniform vec2 texelSize;uniform float scale;uniform vec4 kernel64[32];varying vec2 vUv;void main(){
5731#ifdef FOREGROUND
5732vec2 CoCNearFar=texture2D(cocBuffer,vUv).rg;float CoC=CoCNearFar.r*scale;
5733#else
5734float CoC=texture2D(cocBuffer,vUv).g*scale;
5735#endif
5736if(CoC==0.0){gl_FragColor=texture2D(inputBuffer,vUv);}else{
5737#ifdef FOREGROUND
5738vec2 step=texelSize*max(CoC,CoCNearFar.g*scale);
5739#else
5740vec2 step=texelSize*CoC;
5741#endif
5742vec4 acc=vec4(0.0);for(int i=0;i<32;++i){vec4 kernel=kernel64[i];vec2 uv=step*kernel.xy+vUv;acc+=texture2D(inputBuffer,uv);uv=step*kernel.zw+vUv;acc+=texture2D(inputBuffer,uv);}gl_FragColor=acc/64.0;}}`,Ez=class extends r5{constructor(e=!1,t=!1){super({name:"BokehMaterial",defines:{PASS:e?"2":"1"},uniforms:{kernel64:new lD(null),kernel16:new lD(null),inputBuffer:new lD(null),cocBuffer:new lD(null),texelSize:new lD(new tQ),scale:new lD(1)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:EB,vertexShader:EL}),this.toneMapped=!1,t&&(this.defines.FOREGROUND="1"),this.generateKernel()}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}set cocBuffer(e){this.uniforms.cocBuffer.value=e}setCoCBuffer(e){this.uniforms.cocBuffer.value=e}get scale(){return this.uniforms.scale.value}set scale(e){this.uniforms.scale.value=e}getScale(e){return this.uniforms.scale.value=e}setScale(e){this.uniforms.scale.value=e}generateKernel(){let e=new Float32Array(128),t=new Float32Array(32),i=0,r=0;for(let s=0;s<80;++s){let a=2.39996323*s,o=Math.sqrt(s)/Math.sqrt(80),l=o*Math.cos(a),h=o*Math.sin(a);s%5==0?(t[r++]=l,t[r++]=h):(e[i++]=l,e[i++]=h)}let s=[],a=[];for(let t=0;t<128;)s.push(new ic(e[t++],e[t++],e[t++],e[t++]));for(let e=0;e<32;)a.push(new ic(t[e++],t[e++],t[e++],t[e++]));this.uniforms.kernel64.value=s,this.uniforms.kernel16.value=a}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t)}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}};function EF(e,t,i){return Math.min(Math.max((e+t)/(t-i),0),1)}var EN=`#include <common>
5743#include <packing>
5744#ifdef GL_FRAGMENT_PRECISION_HIGH
5745uniform highp sampler2D depthBuffer;
5746#else
5747uniform mediump sampler2D depthBuffer;
5748#endif
5749uniform float focusDistance;uniform float focusRange;uniform float cameraNear;uniform float cameraFar;varying vec2 vUv;float readDepth(const in vec2 uv){
5750#if DEPTH_PACKING == 3201
5751return unpackRGBAToDepth(texture2D(depthBuffer,uv));
5752#else
5753return texture2D(depthBuffer,uv).r;
5754#endif
5755}void main(){float depth=readDepth(vUv);
5756#ifdef PERSPECTIVE_CAMERA
5757float viewZ=perspectiveDepthToViewZ(depth,cameraNear,cameraFar);float linearDepth=viewZToOrthographicDepth(viewZ,cameraNear,cameraFar);
5758#else
5759float linearDepth=depth;
5760#endif
5761float signedDistance=linearDepth-focusDistance;float magnitude=smoothstep(0.0,focusRange,abs(signedDistance));gl_FragColor.rg=magnitude*vec2(step(signedDistance,0.0),step(0.0,signedDistance));}`,Ek=class extends r5{constructor(e){super({name:"CircleOfConfusionMaterial",defines:{DEPTH_PACKING:"0"},uniforms:{depthBuffer:new lD(null),focusDistance:new lD(0),focusRange:new lD(0),cameraNear:new lD(.3),cameraFar:new lD(1e3)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:EN,vertexShader:EL}),this.toneMapped=!1,this.uniforms.focalLength=this.uniforms.focusRange,this.adoptCameraSettings(e)}get near(){return this.uniforms.cameraNear.value}get far(){return this.uniforms.cameraFar.value}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=3200){this.depthBuffer=e,this.depthPacking=t}get focusDistance(){return this.uniforms.focusDistance.value}set focusDistance(e){this.uniforms.focusDistance.value=e}get worldFocusDistance(){var e;return-(this.focusDistance*((e=this.near)-this.far)-e)}set worldFocusDistance(e){this.focusDistance=EF(-e,this.near,this.far)}getFocusDistance(e){this.uniforms.focusDistance.value=e}setFocusDistance(e){this.uniforms.focusDistance.value=e}get focalLength(){return this.focusRange}set focalLength(e){this.focusRange=e}get focusRange(){return this.uniforms.focusRange.value}set focusRange(e){this.uniforms.focusRange.value=e}get worldFocusRange(){var e;return-(this.focusRange*((e=this.near)-this.far)-e)}set worldFocusRange(e){this.focusRange=EF(-e,this.near,this.far)}getFocalLength(e){return this.focusRange}setFocalLength(e){this.focusRange=e}adoptCameraSettings(e){e&&(this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far,e instanceof r8?this.defines.PERSPECTIVE_CAMERA="1":delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}},EU=`#include <common>
5762#include <dithering_pars_fragment>
5763#ifdef FRAMEBUFFER_PRECISION_HIGH
5764uniform mediump sampler2D inputBuffer;
5765#else
5766uniform lowp sampler2D inputBuffer;
5767#endif
5768varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec4 sum=texture2D(inputBuffer,vUv0);sum+=texture2D(inputBuffer,vUv1);sum+=texture2D(inputBuffer,vUv2);sum+=texture2D(inputBuffer,vUv3);gl_FragColor=sum*0.25;
5769#include <encodings_fragment>
5770#include <dithering_fragment>
5771}`,EV=class extends r5{constructor(e=new tQ){super({name:"KawaseBlurMaterial",uniforms:{inputBuffer:new lD(null),texelSize:new lD(new tQ),halfTexelSize:new lD(new tQ),kernel:new lD(0),scale:new lD(1)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:EU,vertexShader:"uniform vec2 texelSize;uniform vec2 halfTexelSize;uniform float kernel;uniform float scale;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec2 uv=position.xy*0.5+0.5;vec2 dUv=(texelSize*vec2(kernel)+halfTexelSize)*scale;vUv0=vec2(uv.x-dUv.x,uv.y+dUv.y);vUv1=vec2(uv.x+dUv.x,uv.y+dUv.y);vUv2=vec2(uv.x+dUv.x,uv.y-dUv.y);vUv3=vec2(uv.x-dUv.x,uv.y-dUv.y);gl_Position=vec4(position.xy,1.0,1.0);}"}),this.toneMapped=!1,this.setTexelSize(e.x,e.y)}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.inputBuffer=e}get scale(){return this.uniforms.scale.value}set scale(e){this.uniforms.scale.value=e}getScale(){return this.uniforms.scale.value}setScale(e){this.uniforms.scale.value=e}getKernel(){return null}get kernel(){return this.uniforms.kernel.value}set kernel(e){this.uniforms.kernel.value=e}setKernel(e){this.kernel=e}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t),this.uniforms.halfTexelSize.value.set(e,t).multiplyScalar(.5)}setSize(e,t){let i=this.uniforms;i.texelSize.value.set(1/e,1/t),i.halfTexelSize.value.copy(i.texelSize.value).multiplyScalar(.5)}},Ej=`#ifdef FRAMEBUFFER_PRECISION_HIGH
5772uniform mediump sampler2D inputBuffer;
5773#else
5774uniform lowp sampler2D inputBuffer;
5775#endif
5776uniform float opacity;varying vec2 vUv;void main(){vec4 texel=texture2D(inputBuffer,vUv);gl_FragColor=opacity*texel;
5777#include <encodings_fragment>
5778}`,EG=class extends r5{constructor(){super({name:"CopyMaterial",uniforms:{inputBuffer:new lD(null),opacity:new lD(1)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:Ej,vertexShader:EL}),this.toneMapped=!1}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}getOpacity(e){return this.uniforms.opacity.value}setOpacity(e){this.uniforms.opacity.value=e}},EH=`varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1;
5779#if THREE_REVISION < 143
5780#define luminance(v) linearToRelativeLuminance(v)
5781#endif
5782#if EDGE_DETECTION_MODE != 0
5783varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5;
5784#endif
5785#if EDGE_DETECTION_MODE == 1
5786#include <common>
5787#endif
5788#if EDGE_DETECTION_MODE == 0 || PREDICATION_MODE == 1
5789#ifdef GL_FRAGMENT_PRECISION_HIGH
5790uniform highp sampler2D depthBuffer;
5791#else
5792uniform mediump sampler2D depthBuffer;
5793#endif
5794float readDepth(const in vec2 uv){
5795#if DEPTH_PACKING == 3201
5796return unpackRGBAToDepth(texture2D(depthBuffer,uv));
5797#else
5798return texture2D(depthBuffer,uv).r;
5799#endif
5800}vec3 gatherNeighbors(){float p=readDepth(vUv);float pLeft=readDepth(vUv0);float pTop=readDepth(vUv1);return vec3(p,pLeft,pTop);}
5801#elif PREDICATION_MODE == 2
5802uniform sampler2D predicationBuffer;vec3 gatherNeighbors(){float p=texture2D(predicationBuffer,vUv).r;float pLeft=texture2D(predicationBuffer,vUv0).r;float pTop=texture2D(predicationBuffer,vUv1).r;return vec3(p,pLeft,pTop);}
5803#endif
5804#if PREDICATION_MODE != 0
5805vec2 calculatePredicatedThreshold(){vec3 neighbours=gatherNeighbors();vec2 delta=abs(neighbours.xx-neighbours.yz);vec2 edges=step(PREDICATION_THRESHOLD,delta);return PREDICATION_SCALE*EDGE_THRESHOLD*(1.0-PREDICATION_STRENGTH*edges);}
5806#endif
5807#if EDGE_DETECTION_MODE != 0
5808uniform sampler2D inputBuffer;
5809#endif
5810void main(){
5811#if EDGE_DETECTION_MODE == 0
5812const vec2 threshold=vec2(DEPTH_THRESHOLD);
5813#elif PREDICATION_MODE != 0
5814vec2 threshold=calculatePredicatedThreshold();
5815#else
5816const vec2 threshold=vec2(EDGE_THRESHOLD);
5817#endif
5818#if EDGE_DETECTION_MODE == 0
5819vec3 neighbors=gatherNeighbors();vec2 delta=abs(neighbors.xx-vec2(neighbors.y,neighbors.z));vec2 edges=step(threshold,delta);if(dot(edges,vec2(1.0))==0.0){discard;}gl_FragColor=vec4(edges,0.0,1.0);
5820#elif EDGE_DETECTION_MODE == 1
5821float l=luminance(texture2D(inputBuffer,vUv).rgb);float lLeft=luminance(texture2D(inputBuffer,vUv0).rgb);float lTop=luminance(texture2D(inputBuffer,vUv1).rgb);vec4 delta;delta.xy=abs(l-vec2(lLeft,lTop));vec2 edges=step(threshold,delta.xy);if(dot(edges,vec2(1.0))==0.0){discard;}float lRight=luminance(texture2D(inputBuffer,vUv2).rgb);float lBottom=luminance(texture2D(inputBuffer,vUv3).rgb);delta.zw=abs(l-vec2(lRight,lBottom));vec2 maxDelta=max(delta.xy,delta.zw);float lLeftLeft=luminance(texture2D(inputBuffer,vUv4).rgb);float lTopTop=luminance(texture2D(inputBuffer,vUv5).rgb);delta.zw=abs(vec2(lLeft,lTop)-vec2(lLeftLeft,lTopTop));maxDelta=max(maxDelta.xy,delta.zw);float finalDelta=max(maxDelta.x,maxDelta.y);edges.xy*=step(finalDelta,LOCAL_CONTRAST_ADAPTATION_FACTOR*delta.xy);gl_FragColor=vec4(edges,0.0,1.0);
5822#elif EDGE_DETECTION_MODE == 2
5823vec4 delta;vec3 c=texture2D(inputBuffer,vUv).rgb;vec3 cLeft=texture2D(inputBuffer,vUv0).rgb;vec3 t=abs(c-cLeft);delta.x=max(max(t.r,t.g),t.b);vec3 cTop=texture2D(inputBuffer,vUv1).rgb;t=abs(c-cTop);delta.y=max(max(t.r,t.g),t.b);vec2 edges=step(threshold,delta.xy);if(dot(edges,vec2(1.0))==0.0){discard;}vec3 cRight=texture2D(inputBuffer,vUv2).rgb;t=abs(c-cRight);delta.z=max(max(t.r,t.g),t.b);vec3 cBottom=texture2D(inputBuffer,vUv3).rgb;t=abs(c-cBottom);delta.w=max(max(t.r,t.g),t.b);vec2 maxDelta=max(delta.xy,delta.zw);vec3 cLeftLeft=texture2D(inputBuffer,vUv4).rgb;t=abs(c-cLeftLeft);delta.z=max(max(t.r,t.g),t.b);vec3 cTopTop=texture2D(inputBuffer,vUv5).rgb;t=abs(c-cTopTop);delta.w=max(max(t.r,t.g),t.b);maxDelta=max(maxDelta.xy,delta.zw);float finalDelta=max(maxDelta.x,maxDelta.y);edges*=step(finalDelta,LOCAL_CONTRAST_ADAPTATION_FACTOR*delta.xy);gl_FragColor=vec4(edges,0.0,1.0);
5824#endif
5825}`,EW=`uniform vec2 texelSize;varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1;
5826#if EDGE_DETECTION_MODE != 0
5827varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5;
5828#endif
5829void main(){vUv=position.xy*0.5+0.5;vUv0=vUv+texelSize*vec2(-1.0,0.0);vUv1=vUv+texelSize*vec2(0.0,-1.0);
5830#if EDGE_DETECTION_MODE != 0
5831vUv2=vUv+texelSize*vec2(1.0,0.0);vUv3=vUv+texelSize*vec2(0.0,1.0);vUv4=vUv+texelSize*vec2(-2.0,0.0);vUv5=vUv+texelSize*vec2(0.0,-2.0);
5832#endif
5833gl_Position=vec4(position.xy,1.0,1.0);}`,Eq=class extends r5{constructor(e=new tQ,t=2){super({name:"EdgeDetectionMaterial",defines:{THREE_REVISION:"149".replace(/\D+/g,""),LOCAL_CONTRAST_ADAPTATION_FACTOR:"2.0",EDGE_THRESHOLD:"0.1",DEPTH_THRESHOLD:"0.01",PREDICATION_MODE:"0",PREDICATION_THRESHOLD:"0.01",PREDICATION_SCALE:"2.0",PREDICATION_STRENGTH:"1.0",DEPTH_PACKING:"0"},uniforms:{inputBuffer:new lD(null),depthBuffer:new lD(null),predicationBuffer:new lD(null),texelSize:new lD(e)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:EH,vertexShader:EW}),this.toneMapped=!1,this.edgeDetectionMode=t}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=3200){this.depthBuffer=e,this.depthPacking=t}get edgeDetectionMode(){return Number(this.defines.EDGE_DETECTION_MODE)}set edgeDetectionMode(e){this.defines.EDGE_DETECTION_MODE=e.toFixed(0),this.needsUpdate=!0}getEdgeDetectionMode(){return this.edgeDetectionMode}setEdgeDetectionMode(e){this.edgeDetectionMode=e}get localContrastAdaptationFactor(){return Number(this.defines.LOCAL_CONTRAST_ADAPTATION_FACTOR)}set localContrastAdaptationFactor(e){this.defines.LOCAL_CONTRAST_ADAPTATION_FACTOR=e.toFixed("6"),this.needsUpdate=!0}getLocalContrastAdaptationFactor(){return this.localContrastAdaptationFactor}setLocalContrastAdaptationFactor(e){this.localContrastAdaptationFactor=e}get edgeDetectionThreshold(){return Number(this.defines.EDGE_THRESHOLD)}set edgeDetectionThreshold(e){this.defines.EDGE_THRESHOLD=e.toFixed("6"),this.defines.DEPTH_THRESHOLD=(.1*e).toFixed("6"),this.needsUpdate=!0}getEdgeDetectionThreshold(){return this.edgeDetectionThreshold}setEdgeDetectionThreshold(e){this.edgeDetectionThreshold=e}get predicationMode(){return Number(this.defines.PREDICATION_MODE)}set predicationMode(e){this.defines.PREDICATION_MODE=e.toFixed(0),this.needsUpdate=!0}getPredicationMode(){return this.predicationMode}setPredicationMode(e){this.predicationMode=e}set predicationBuffer(e){this.uniforms.predicationBuffer.value=e}setPredicationBuffer(e){this.uniforms.predicationBuffer.value=e}get predicationThreshold(){return Number(this.defines.PREDICATION_THRESHOLD)}set predicationThreshold(e){this.defines.PREDICATION_THRESHOLD=e.toFixed("6"),this.needsUpdate=!0}getPredicationThreshold(){return this.predicationThreshold}setPredicationThreshold(e){this.predicationThreshold=e}get predicationScale(){return Number(this.defines.PREDICATION_SCALE)}set predicationScale(e){this.defines.PREDICATION_SCALE=e.toFixed("6"),this.needsUpdate=!0}getPredicationScale(){return this.predicationScale}setPredicationScale(e){this.predicationScale=e}get predicationStrength(){return Number(this.defines.PREDICATION_STRENGTH)}set predicationStrength(e){this.defines.PREDICATION_STRENGTH=e.toFixed("6"),this.needsUpdate=!0}getPredicationStrength(){return this.predicationStrength}setPredicationStrength(e){this.predicationStrength=e}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}},EX=`#include <common>
5834#include <packing>
5835#include <dithering_pars_fragment>
5836#define packFloatToRGBA(v) packDepthToRGBA(v)
5837#define unpackRGBAToFloat(v) unpackRGBAToDepth(v)
5838#ifdef FRAMEBUFFER_PRECISION_HIGH
5839uniform mediump sampler2D inputBuffer;
5840#else
5841uniform lowp sampler2D inputBuffer;
5842#endif
5843#ifdef GL_FRAGMENT_PRECISION_HIGH
5844uniform highp sampler2D depthBuffer;
5845#else
5846uniform mediump sampler2D depthBuffer;
5847#endif
5848uniform vec2 resolution;uniform vec2 texelSize;uniform float cameraNear;uniform float cameraFar;uniform float aspect;uniform float time;varying vec2 vUv;
5849#if THREE_REVISION < 143
5850#define luminance(v) linearToRelativeLuminance(v)
5851#endif
5852#if THREE_REVISION >= 137
5853vec4 sRGBToLinear(const in vec4 value){return vec4(mix(pow(value.rgb*0.9478672986+vec3(0.0521327014),vec3(2.4)),value.rgb*0.0773993808,vec3(lessThanEqual(value.rgb,vec3(0.04045)))),value.a);}
5854#endif
5855float readDepth(const in vec2 uv){
5856#if DEPTH_PACKING == 3201
5857return unpackRGBAToDepth(texture2D(depthBuffer,uv));
5858#else
5859return texture2D(depthBuffer,uv).r;
5860#endif
5861}float getViewZ(const in float depth){
5862#ifdef PERSPECTIVE_CAMERA
5863return perspectiveDepthToViewZ(depth,cameraNear,cameraFar);
5864#else
5865return orthographicDepthToViewZ(depth,cameraNear,cameraFar);
5866#endif
5867}FRAGMENT_HEADvoid main(){FRAGMENT_MAIN_UVvec4 color0=texture2D(inputBuffer,UV);vec4 color1=vec4(0.0);FRAGMENT_MAIN_IMAGEgl_FragColor=color0;
5868#ifdef ENCODE_OUTPUT
5869#include <encodings_fragment>
5870#endif
5871#include <dithering_fragment>
5872}`,EY={FRAGMENT_HEAD:"FRAGMENT_HEAD",FRAGMENT_MAIN_UV:"FRAGMENT_MAIN_UV",FRAGMENT_MAIN_IMAGE:"FRAGMENT_MAIN_IMAGE",VERTEX_HEAD:"VERTEX_HEAD",VERTEX_MAIN_SUP
5872PORT:"VERTEX_MAIN_SUPPORT"},EQ=class extends r5{constructor(e,t,i,r,s=!1){super({name:"EffectMaterial",defines:{THREE_REVISION:"149".replace(/\D+/g,""),DEPTH_PACKING:"0",ENCODE_OUTPUT:"1"},uniforms:{inputBuffer:new lD(null),depthBuffer:new lD(null),resolution:new lD(new tQ),texelSize:new lD(new tQ),cameraNear:new lD(.3),cameraFar:new lD(1e3),aspect:new lD(1),time:new lD(0)},blending:0,depthWrite:!1,depthTest:!1,dithering:s}),this.toneMapped=!1,e&&this.setShaderParts(e),t&&this.setDefines(t),i&&this.setUniforms(i),this.adoptCameraSettings(r)}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get depthBuffer(){return this.uniforms.depthBuffer.value}set depthBuffer(e){this.uniforms.depthBuffer.value=e}get depthPacking(){return Number(this.defines.DEPTH_PACKING)}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=3200){this.depthBuffer=e,this.depthPacking=t}setShaderParts(e){return this.fragmentShader=EX.replace(EY.FRAGMENT_HEAD,e.get(EY.FRAGMENT_HEAD)).replace(EY.FRAGMENT_MAIN_UV,e.get(EY.FRAGMENT_MAIN_UV)).replace(EY.FRAGMENT_MAIN_IMAGE,e.get(EY.FRAGMENT_MAIN_IMAGE)),this.vertexShader="uniform vec2 resolution;uniform vec2 texelSize;uniform float cameraNear;uniform float cameraFar;uniform float aspect;uniform float time;varying vec2 vUv;VERTEX_HEADvoid main(){vUv=position.xy*0.5+0.5;VERTEX_MAIN_SUPPORTgl_Position=vec4(position.xy,1.0,1.0);}".replace(EY.VERTEX_HEAD,e.get(EY.VERTEX_HEAD)).replace(EY.VERTEX_MAIN_SUPPORT,e.get(EY.VERTEX_MAIN_SUPPORT)),this.needsUpdate=!0,this}setDefines(e){for(let t of e.entries())this.defines[t[0]]=t[1];return this.needsUpdate=!0,this}setUniforms(e){for(let t of e.entries())this.uniforms[t[0]]=t[1];return this}setExtensions(e){for(let t of(this.extensions={},e))this.extensions[t]=!0;return this}get encodeOutput(){return void 0!==this.defines.ENCODE_OUTPUT}set encodeOutput(e){this.encodeOutput!==e&&(e?this.defines.ENCODE_OUTPUT="1":delete this.defines.ENCODE_OUTPUT,this.needsUpdate=!0)}isOutputEncodingEnabled(e){return this.encodeOutput}setOutputEncodingEnabled(e){this.encodeOutput=e}get time(){return this.uniforms.time.value}set time(e){this.uniforms.time.value=e}setDeltaTime(e){this.uniforms.time.value+=e}adoptCameraSettings(e){e&&(this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far,e instanceof r8?this.defines.PERSPECTIVE_CAMERA="1":delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}setSize(e,t){let i=this.uniforms;i.resolution.value.set(e,t),i.texelSize.value.set(1/e,1/t),i.aspect.value=e/t}static get Section(){return EY}},EK=`#include <common>
5873#if THREE_REVISION < 143
5874#define luminance(v) linearToRelativeLuminance(v)
5875#endif
5876#ifdef FRAMEBUFFER_PRECISION_HIGH
5877uniform mediump sampler2D inputBuffer;
5878#else
5879uniform lowp sampler2D inputBuffer;
5880#endif
5881#ifdef RANGE
5882uniform vec2 range;
5883#elif defined(THRESHOLD)
5884uniform float threshold;uniform float smoothing;
5885#endif
5886varying vec2 vUv;void main(){vec4 texel=texture2D(inputBuffer,vUv);float l=luminance(texel.rgb);
5887#ifdef RANGE
5888float low=step(range.x,l);float high=step(l,range.y);l*=low*high;
5889#elif defined(THRESHOLD)
5890l=smoothstep(threshold,threshold+smoothing,l);
5891#endif
5892#ifdef COLOR
5893gl_FragColor=vec4(texel.rgb*l,l);
5894#else
5895gl_FragColor=vec4(l);
5896#endif
5897}`,EZ=class extends r5{constructor(e=!1,t=null){super({name:"LuminanceMaterial",defines:{THREE_REVISION:"149".replace(/\D+/g,"")},uniforms:{inputBuffer:new lD(null),threshold:new lD(0),smoothing:new lD(1),range:new lD(null)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:EK,vertexShader:EL}),this.toneMapped=!1,this.colorOutput=e,this.luminanceRange=t}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get threshold(){return this.uniforms.threshold.value}set threshold(e){this.smoothing>0||e>0?this.defines.THRESHOLD="1":delete this.defines.THRESHOLD,this.uniforms.threshold.value=e}getThreshold(){return this.threshold}setThreshold(e){this.threshold=e}get smoothing(){return this.uniforms.smoothing.value}set smoothing(e){this.threshold>0||e>0?this.defines.THRESHOLD="1":delete this.defines.THRESHOLD,this.uniforms.smoothing.value=e}getSmoothingFactor(){return this.smoothing}setSmoothingFactor(e){this.smoothing=e}get useThreshold(){return this.threshold>0||this.smoothing>0}set useThreshold(e){}get colorOutput(){return void 0!==this.defines.COLOR}set colorOutput(e){e?this.defines.COLOR="1":delete this.defines.COLOR,this.needsUpdate=!0}isColorOutputEnabled(e){return this.colorOutput}setColorOutputEnabled(e){this.colorOutput=e}get useRange(){return null!==this.luminanceRange}set useRange(e){this.luminanceRange=null}get luminanceRange(){return this.uniforms.range.value}set luminanceRange(e){null!==e?this.defines.RANGE="1":delete this.defines.RANGE,this.uniforms.range.value=e,this.needsUpdate=!0}getLuminanceRange(){return this.luminanceRange}setLuminanceRange(e){this.luminanceRange=e}},EJ=`#ifdef FRAMEBUFFER_PRECISION_HIGH
5898uniform mediump sampler2D inputBuffer;
5899#else
5900uniform lowp sampler2D inputBuffer;
5901#endif
5902#ifdef MASK_PRECISION_HIGH
5903uniform mediump sampler2D maskTexture;
5904#else
5905uniform lowp sampler2D maskTexture;
5906#endif
5907#if MASK_FUNCTION != 0
5908uniform float strength;
5909#endif
5910varying vec2 vUv;void main(){
5911#if COLOR_CHANNEL == 0
5912float mask=texture2D(maskTexture,vUv).r;
5913#elif COLOR_CHANNEL == 1
5914float mask=texture2D(maskTexture,vUv).g;
5915#elif COLOR_CHANNEL == 2
5916float mask=texture2D(maskTexture,vUv).b;
5917#else
5918float mask=texture2D(maskTexture,vUv).a;
5919#endif
5920#if MASK_FUNCTION == 0
5921#ifdef INVERTED
5922mask=step(mask,0.0);
5923#else
5924mask=1.0-step(mask,0.0);
5925#endif
5926#else
5927mask=clamp(mask*strength,0.0,1.0);
5928#ifdef INVERTED
5929mask=1.0-mask;
5930#endif
5931#endif
5932#if MASK_FUNCTION == 2
5933gl_FragColor=vec4(mask*texture2D(inputBuffer,vUv).rgb,mask);
5934#else
5935gl_FragColor=mask*texture2D(inputBuffer,vUv);
5936#endif
5937}`,E$=class extends r5{constructor(e=null){super({name:"MaskMaterial",uniforms:{maskTexture:new lD(e),inputBuffer:new lD(null),strength:new lD(1)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:EJ,vertexShader:EL}),this.toneMapped=!1,this.setColorChannel(0),this.setMaskFunction(0)}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}set maskTexture(e){this.uniforms.maskTexture.value=e,delete this.defines.MASK_PRECISION_HIGH,1009!==e.type&&(this.defines.MASK_PRECISION_HIGH="1"),this.needsUpdate=!0}setMaskTexture(e){this.maskTexture=e}set colorChannel(e){this.defines.COLOR_CHANNEL=e.toFixed(0),this.needsUpdate=!0}setColorChannel(e){this.colorChannel=e}set maskFunction(e){this.defines.MASK_FUNCTION=e.toFixed(0),this.needsUpdate=!0}setMaskFunction(e){this.maskFunction=e}get inverted(){return void 0!==this.defines.INVERTED}set inverted(e){this.inverted&&!e?delete this.defines.INVERTED:e&&(this.defines.INVERTED="1"),this.needsUpdate=!0}isInverted(){return this.inverted}setInverted(e){this.inverted=e}get strength(){return this.uniforms.strength.value}set strength(e){this.uniforms.strength.value=e}getStrength(){return this.strength}setStrength(e){this.strength=e}},E0
vendor: 7,736 bytes, lines 5937-5962
5937=`#define sampleLevelZeroOffset(t, coord, offset) texture2D(t, coord + offset * texelSize)
5938#if __VERSION__ < 300
5939#define round(v) floor(v + 0.5)
5940#endif
5941#ifdef FRAMEBUFFER_PRECISION_HIGH
5942uniform mediump sampler2D inputBuffer;
5943#else
5944uniform lowp sampler2D inputBuffer;
5945#endif
5946uniform lowp sampler2D areaTexture;uniform lowp sampler2D searchTexture;uniform vec2 texelSize;uniform vec2 resolution;varying vec2 vUv;varying vec4 vOffset[3];varying vec2 vPixCoord;void movec(const in bvec2 c,inout vec2 variable,const in vec2 value){if(c.x){variable.x=value.x;}if(c.y){variable.y=value.y;}}void movec(const in bvec4 c,inout vec4 variable,const in vec4 value){movec(c.xy,variable.xy,value.xy);movec(c.zw,variable.zw,value.zw);}vec2 decodeDiagBilinearAccess(in vec2 e){e.r=e.r*abs(5.0*e.r-5.0*0.75);return round(e);}vec4 decodeDiagBilinearAccess(in vec4 e){e.rb=e.rb*abs(5.0*e.rb-5.0*0.75);return round(e);}vec2 searchDiag1(const in vec2 texCoord,const in vec2 dir,out vec2 e){vec4 coord=vec4(texCoord,-1.0,1.0);vec3 t=vec3(texelSize,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(coord.z<float(MAX_SEARCH_STEPS_DIAG_INT-1)&&coord.w>0.9)){break;}coord.xyz=t*vec3(dir,1.0)+coord.xyz;e=texture2D(inputBuffer,coord.xy).rg;coord.w=dot(e,vec2(0.5));}return coord.zw;}vec2 searchDiag2(const in vec2 texCoord,const in vec2 dir,out vec2 e){vec4 coord=vec4(texCoord,-1.0,1.0);coord.x+=0.25*texelSize.x;vec3 t=vec3(texelSize,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(coord.z<float(MAX_SEARCH_STEPS_DIAG_INT-1)&&coord.w>0.9)){break;}coord.xyz=t*vec3(dir,1.0)+coord.xyz;e=texture2D(inputBuffer,coord.xy).rg;e=decodeDiagBilinearAccess(e);coord.w=dot(e,vec2(0.5));}return coord.zw;}vec2 areaDiag(const in vec2 dist,const in vec2 e,const in float offset){vec2 texCoord=vec2(AREATEX_MAX_DISTANCE_DIAG,AREATEX_MAX_DISTANCE_DIAG)*e+dist;texCoord=AREATEX_PIXEL_SIZE*texCoord+0.5*AREATEX_PIXEL_SIZE;texCoord.x+=0.5;texCoord.y+=AREATEX_SUBTEX_SIZE*offset;return texture2D(areaTexture,texCoord).rg;}vec2 calculateDiagWeights(const in vec2 texCoord,const in vec2 e,const in vec4 subsampleIndices){vec2 weights=vec2(0.0);vec4 d;vec2 end;if(e.r>0.0){d.xz=searchDiag1(texCoord,vec2(-1.0,1.0),end);d.x+=float(end.y>0.9);}else{d.xz=vec2(0.0);}d.yw=searchDiag1(texCoord,vec2(1.0,-1.0),end);if(d.x+d.y>2.0){vec4 coords=vec4(-d.x+0.25,d.x,d.y,-d.y-0.25)*texelSize.xyxy+texCoord.xyxy;vec4 c;c.xy=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(-1,0)).rg;c.zw=sampleLevelZeroOffset(inputBuffer,coords.zw,vec2(1,0)).rg;c.yxwz=decodeDiagBilinearAccess(c.xyzw);vec2 cc=vec2(2.0)*c.xz+c.yw;movec(bvec2(step(0.9,d.zw)),cc,vec2(0.0));weights+=areaDiag(d.xy,cc,subsampleIndices.z);}d.xz=searchDiag2(texCoord,vec2(-1.0,-1.0),end);if(sampleLevelZeroOffset(inputBuffer,texCoord,vec2(1,0)).r>0.0){d.yw=searchDiag2(texCoord,vec2(1.0),end);d.y+=float(end.y>0.9);}else{d.yw=vec2(0.0);}if(d.x+d.y>2.0){vec4 coords=vec4(-d.x,-d.x,d.y,d.y)*texelSize.xyxy+texCoord.xyxy;vec4 c;c.x=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(-1,0)).g;c.y=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(0,-1)).r;c.zw=sampleLevelZeroOffset(inputBuffer,coords.zw,vec2(1,0)).gr;vec2 cc=vec2(2.0)*c.xz+c.yw;movec(bvec2(step(0.9,d.zw)),cc,vec2(0.0));weights+=areaDiag(d.xy,cc,subsampleIndices.w).gr;}return weights;}float searchLength(const in vec2 e,const in float offset){vec2 scale=SEARCHTEX_SIZE*vec2(0.5,-1.0);vec2 bias=SEARCHTEX_SIZE*vec2(offset,1.0);scale+=vec2(-1.0,1.0);bias+=vec2(0.5,-0.5);scale*=1.0/SEARCHTEX_PACKED_SIZE;bias*=1.0/SEARCHTEX_PACKED_SIZE;return texture2D(searchTexture,scale*e+bias).r;}float searchXLeft(in vec2 texCoord,const in float end){vec2 e=vec2(0.0,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(texCoord.x>end&&e.g>0.8281&&e.r==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(-2.0,0.0)*texelSize+texCoord;}float offset=-(255.0/127.0)*searchLength(e,0.0)+3.25;return texelSize.x*offset+texCoord.x;}float searchXRight(vec2 texCoord,const in float end){vec2 e=vec2(0.0,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(texCoord.x<end&&e.g>0.8281&&e.r==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(2.0,0.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e,0.5)+3.25;return-texelSize.x*offset+texCoord.x;}float searchYUp(vec2 texCoord,const in float end){vec2 e=vec2(1.0,0.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(texCoord.y>end&&e.r>0.8281&&e.g==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=-vec2(0.0,2.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e.gr,0.0)+3.25;return texelSize.y*offset+texCoord.y;}float searchYDown(vec2 texCoord,const in float end){vec2 e=vec2(1.0,0.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;i++){if(!(texCoord.y<end&&e.r>0.8281&&e.g==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(0.0,2.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e.gr,0.5)+3.25;return-texelSize.y*offset+texCoord.y;}vec2 area(const in vec2 dist,const in float e1,const in float e2,const in float offset){vec2 texCoord=vec2(AREATEX_MAX_DISTANCE)*round(4.0*vec2(e1,e2))+dist;texCoord=AREATEX_PIXEL_SIZE*texCoord+0.5*AREATEX_PIXEL_SIZE;texCoord.y=AREATEX_SUBTEX_SIZE*offset+texCoord.y;return texture2D(areaTexture,texCoord).rg;}void detectHorizontalCornerPattern(inout vec2 weights,const in vec4 texCoord,const in vec2 d){
5947#if !defined(DISABLE_CORNER_DETECTION)
5948vec2 leftRight=step(d.xy,d.yx);vec2 rounding=(1.0-CORNER_ROUNDING_NORM)*leftRight;rounding/=leftRight.x+leftRight.y;vec2 factor=vec2(1.0);factor.x-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(0,1)).r;factor.x-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,1)).r;factor.y-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(0,-2)).r;factor.y-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,-2)).r;weights*=clamp(factor,0.0,1.0);
5949#endif
5950}void detectVerticalCornerPattern(inout vec2 weights,const in vec4 texCoord,const in vec2 d){
5951#if !defined(DISABLE_CORNER_DETECTION)
5952vec2 leftRight=step(d.xy,d.yx);vec2 rounding=(1.0-CORNER_ROUNDING_NORM)*leftRight;rounding/=leftRight.x+leftRight.y;vec2 factor=vec2(1.0);factor.x-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(1,0)).g;factor.x-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,1)).g;factor.y-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(-2,0)).g;factor.y-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(-2,1)).g;weights*=clamp(factor,0.0,1.0);
5953#endif
5954}void main(){vec4 weights=vec4(0.0);vec4 subsampleIndices=vec4(0.0);vec2 e=texture2D(inputBuffer,vUv).rg;if(e.g>0.0){
5955#if !defined(DISABLE_DIAG_DETECTION)
5956weights.rg=calculateDiagWeights(vUv,e,subsampleIndices);if(weights.r==-weights.g){
5957#endif
5958vec2 d;vec3 coords;coords.x=searchXLeft(vOffset[0].xy,vOffset[2].x);coords.y=vOffset[1].y;d.x=coords.x;float e1=texture2D(inputBuffer,coords.xy).r;coords.z=searchXRight(vOffset[0].zw,vOffset[2].y);d.y=coords.z;d=round(resolution.xx*d+-vPixCoord.xx);vec2 sqrtD=sqrt(abs(d));float e2=sampleLevelZeroOffset(inputBuffer,coords.zy,vec2(1,0)).r;weights.rg=area(sqrtD,e1,e2,subsampleIndices.y);coords.y=vUv.y;detectHorizontalCornerPattern(weights.rg,coords.xyzy,d);
5959#if !defined(DISABLE_DIAG_DETECTION)
5960}else{e.r=0.0;}
5961#endif
5962}if(e.r>0.0){vec2 d;vec3 coords;coords.y=searchYUp(vOffset[1].xy,vOffset[2].z);coords.x=vOffset[0].x;d.x=coords.y;float e1=texture2D(inputBuffer,coords.xy).g;coords.z=searchYDown(vOffset[1].zw,vOffset[2].w);d.y=coords.z;d=round(resolution.yy*d-vPixCoord.yy);vec2 sqrtD=sqrt(abs(d));float e2=sampleLevelZeroOffset(inputBuffer,coords.xz,vec2(0,1)).g;weights.ba=area(sqrtD,e1,e2,subsampleIndices.x);coords.x=vUv.x;detectVerticalCornerPattern(weights.ba,coords.xyxz,d);}gl_FragColor=weights;}`,
vendor: 4,345 bytes, line 5962
5962E1=class extends r5{constructor(e=new tQ,t=new tQ){super({name:"SMAAWeightsMaterial",defines:{MAX_SEARCH_STEPS_INT:"16",MAX_SEARCH_STEPS_FLOAT:"16.0",MAX_SEARCH_STEPS_DIAG_INT:"8",MAX_SEARCH_STEPS_DIAG_FLOAT:"8.0",CORNER_ROUNDING:"25",CORNER_ROUNDING_NORM:"0.25",AREATEX_MAX_DISTANCE:"16.0",AREATEX_MAX_DISTANCE_DIAG:"20.0",AREATEX_PIXEL_SIZE:"(1.0 / vec2(160.0, 560.0))",AREATEX_SUBTEX_SIZE:"(1.0 / 7.0)",SEARCHTEX_SIZE:"vec2(66.0, 33.0)",SEARCHTEX_PACKED_SIZE:"vec2(64.0, 16.0)"},uniforms:{inputBuffer:new lD(null),searchTexture:new lD(null),areaTexture:new lD(null),resolution:new lD(t),texelSize:new lD(e)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:E0,vertexShader:"uniform vec2 texelSize;uniform vec2 resolution;varying vec2 vUv;varying vec4 vOffset[3];varying vec2 vPixCoord;void main(){vUv=position.xy*0.5+0.5;vPixCoord=vUv*resolution;vOffset[0]=vUv.xyxy+texelSize.xyxy*vec4(-0.25,-0.125,1.25,-0.125);vOffset[1]=vUv.xyxy+texelSize.xyxy*vec4(-0.125,-0.25,-0.125,1.25);vOffset[2]=vec4(vOffset[0].xz,vOffset[1].yw)+vec4(-2.0,2.0,-2.0,2.0)*texelSize.xxyy*MAX_SEARCH_STEPS_FLOAT;gl_Position=vec4(position.xy,1.0,1.0);}"}),this.toneMapped=!1}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get searchTexture(){return this.uniforms.searchTexture.value}set searchTexture(e){this.uniforms.searchTexture.value=e}get areaTexture(){return this.uniforms.areaTexture.value}set areaTexture(e){this.uniforms.areaTexture.value=e}setLookupTextures(e,t){this.searchTexture=e,this.areaTexture=t}get orthogonalSearchSteps(){return Number(this.defines.MAX_SEARCH_STEPS_INT)}set orthogonalSearchSteps(e){let t=Math.min(Math.max(e,0),112);this.defines.MAX_SEARCH_STEPS_INT=t.toFixed("0"),this.defines.MAX_SEARCH_STEPS_FLOAT=t.toFixed("1"),this.needsUpdate=!0}setOrthogonalSearchSteps(e){this.orthogonalSearchSteps=e}get diagonalSearchSteps(){return Number(this.defines.MAX_SEARCH_STEPS_DIAG_INT)}set diagonalSearchSteps(e){let t=Math.min(Math.max(e,0),20);this.defines.MAX_SEARCH_STEPS_DIAG_INT=t.toFixed("0"),this.defines.MAX_SEARCH_STEPS_DIAG_FLOAT=t.toFixed("1"),this.needsUpdate=!0}setDiagonalSearchSteps(e){this.diagonalSearchSteps=e}get diagonalDetection(){return void 0===this.defines.DISABLE_DIAG_DETECTION}set diagonalDetection(e){e?delete this.defines.DISABLE_DIAG_DETECTION:this.defines.DISABLE_DIAG_DETECTION="1",this.needsUpdate=!0}isDiagonalDetectionEnabled(){return this.diagonalDetection}setDiagonalDetectionEnabled(e){this.diagonalDetection=e}get cornerRounding(){return Number(this.defines.CORNER_ROUNDING)}set cornerRounding(e){let t=Math.min(Math.max(e,0),100);this.defines.CORNER_ROUNDING=t.toFixed("4"),this.defines.CORNER_ROUNDING_NORM=(t/100).toFixed("4"),this.needsUpdate=!0}setCornerRounding(e){this.cornerRounding=e}get cornerDetection(){return void 0===this.defines.DISABLE_CORNER_DETECTION}set cornerDetection(e){e?delete this.defines.DISABLE_CORNER_DETECTION:this.defines.DISABLE_CORNER_DETECTION="1",this.needsUpdate=!0}isCornerRoundingEnabled(){return this.cornerDetection}setCornerRoundingEnabled(e){this.cornerDetection=e}setSize(e,t){let i=this.uniforms;i.texelSize.value.set(1/e,1/t),i.resolution.value.set(e,t)}},E2=new r6,E3=null,E4=class{constructor(e="Pass",t=new nb,i=E2){this.name=e,this.renderer=null,this.scene=t,this.camera=i,this.screen=null,this.rtt=!0,this.needsSwap=!0,this.needsDepthTexture=!1,this.enabled=!0}get renderToScreen(){return!this.rtt}set renderToScreen(e){if(this.rtt===e){let t=this.getFullscreenMaterial();null!==t&&(t.needsUpdate=!0),this.rtt=!e}}setRenderer(e){this.renderer=e}isEnabled(){return this.enabled}setEnabled(e){this.enabled=e}get fullscreenMaterial(){return null!==this.screen?this.screen.material:null}set fullscreenMaterial(e){let t=this.screen;null!==t?t.material=e:((t=new rK(function(){if(null===E3){let e=new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),t=new Float32Array([0,0,2,0,0,2]);void 0!==(E3=new rz).setAttribute?(E3.setAttribute("position",new rM(e,3)),E3.setAttribute("uv",new rM(t,2))):(E3.addAttribute("position",new rM(e,3)),E3.addAttribute("uv",new rM(t,2)))}return E3}(),e)).frustumCulled=!1,null===this.scene&&(this.scene=new nb),this.scene.add(t),this.screen=t)}getFullscreenMaterial(){return this.fullscreenMaterial}setFullscreenMaterial(e){this.fullscreenMaterial=e}getDepthTexture(){return null}
5962setDepthTexture(e,t=3200){}render(e,t,i,r,s){throw Error("Render method not implemented!")}setSize(e,t){}initialize(e,t,i){}dispose(){for(let e of Object.keys(this)){let t=this[e];if(null!==t&&"object"==typeof t&&"function"==typeof t.dispose){if(t instanceof nb||t===this.renderer)continue;this[e].dispose()}}}},E5=class extends E4{constructor(e,t=!0){super("CopyPass"),this.fullscreenMaterial=new EG,this.needsSwap=!1,this.renderTarget=e,void 0===e&&(this.renderTarget=new id(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="CopyPass.Target"),this.autoResize=t}get resize(){return this.autoResize}set resize(e){this.autoResize=e}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}setAutoResizeEnabled(e){this.autoResize=e}render(e,t,i,r,s){this.fullscreenMaterial.inputBuffer=t.texture,e.setRenderTarget(this.renderToScreen?null:this.renderTarget),e.render(this.scene,this.camera)}setSize(e,t){this.autoResize&&this.renderTarget.setSize(e,t)}initialize(e,t,i){void 0!==i&&(this.renderTarget.texture.type=i,1009!==i?this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1":3001===e.outputEncoding&&(this.renderTarget.texture.encoding=3001))}},E6=class extends E4{constructor(){super("ClearMaskPass",null,null),this.needsSwap=!1}render(e,t,i,r,s){let a=e.state.buffers.stencil;a.setLocked(!1),a.setTest(!1)}},E8=new ii,E9=class extends E4{constructor(e=!0,t=!0,i=!1){super("ClearPass",null,null),this.needsSwap=!1,this.color=e,this.depth=t,this.stencil=i,this.overrideClearColor=null,this.overrideClearAlpha=-1}setClearFlags(e,t,i){this.color=e,this.depth=t,this.stencil=i}getOverrideClearColor(){return this.overrideClearColor}setOverrideClearColor(e){this.overrideClearColor=e}getOverrideClearAlpha(){return this.overrideClearAlpha}setOverrideClearAlpha(e){this.overrideClearAlpha=e}render(e,t,i,r,s){let a=this.overrideClearColor,o=this.overrideClearAlpha,l=e.getClearAlpha(),h=null!==a,c=o>=0;h?(E8.copy(e.getClearColor(E8)),e.setClearColor(a,c?o:l)):c&&e.setClearAlpha(o),e.setRenderTarget(this.renderToScreen?null:t),e.clear(this.color,this.depth,this.stencil),h?e.setClearColor(E8,l):c&&e.setClearAlpha(l)}},E7=class extends tL{constructor(e,t=-1,i=-1,r=1){super(),this.resizable=e,this.base=new tQ(1,1),this.preferred=new tQ(t,i),this.target=this.preferred,this.s=r}get width(){let{base:e,preferred:t,scale:i}=this;return -1!==t.width?t.width:-1!==t.height?Math.round(t.height*(e.width/Math.max(e.height,1))):Math.round(e.width*i)}set width(e){this.preferredWidth=e}get height(){let{base:e,preferred:t,scale:i}=this;return -1!==t.height?t.height:-1!==t.width?Math.round(t.width/Math.max(e.width/Math.max(e.height,1),1)):Math.round(e.height*i)}set height(e){this.preferredHeight=e}getWidth(){return this.width}getHeight(){return this.height}get scale(){return this.s}set scale(e){this.s!==e&&(this.s=e,this.preferred.setScalar(-1),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getScale(){return this.scale}setScale(e){this.scale=e}get baseWidth(){return this.base.width}set baseWidth(e){this.base.width!==e&&(this.base.width=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getBaseWidth(){return this.base.width}setBaseWidth(e){this.base.width!==e&&(this.base.width=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}get baseHeight(){return this.base.height}set baseHeight(e){this.base.height!==e&&(this.base.height=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getBaseHeight(){return this.baseHeight}setBaseHeight(e){this.baseHeight=e}setBaseSize(e,t){(this.base.width!==e||this.base.height!==t)&&(this.base.set(e,t),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}get preferredWidth(){return this.preferred.width}set preferredWidth(e){this.preferred.width!==e&&(this.preferred.width=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getPreferredWidth(){return this.preferredWidth}setPreferredWidth(e){this.preferredWidth=e}get preferredHeight(){return this.preferred.height}set preferredHeight(e){this.preferred.height!==e&&(this.preferred.height=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getPreferredHeight(){return this.preferredHeight}setPreferredHeight(e){this.preferredHeight=e}setPreferredSize(e,t){(this.preferred.width!==e||this.preferred.height!==t)&&(this.preferred.set(e,t),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}copy(e){this.base.set(e.getBaseWidth(),e.getBaseHeight()),this.preferred.set(e.getPreferredWidth(),e.getPreferredHeight()),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height)}static get AUTO_SIZE(){return -1}},Ce=!1,Ct=class{constructor(e=null){this.originalMaterials=new Map,this.material=null,this.materials=null,this.materialsBackSide=null,this.materialsDoubleSide=null,this.materialsFlatShaded=null,this.materialsFlatShadedBackSide=null,this.materialsFlatShadedDoubleSide=null,this.setMaterial(e),this.meshCount=0,this.replaceMaterial=e=>{if(e.isMesh){let t;if(e.material.flatShading)switch(e.material.side){case 2:t=this.materialsFlatShadedDoubleSide;break;case 1:t=this.materialsFlatShadedBackSide;break;default:t=this.materialsFlatShaded}else switch(e.material.side){case 2:t=this.materialsDoubleSide;break;case 1:t=this.materialsBackSide;break;default:t=this.materials}this.originalMaterials.set(e,e.material),e.isSkinnedMesh?e.material=t[2]:e.isInstancedMesh?e.material=t[1]:e.material=t[0],++this.meshCount}}}setMaterial(e){if(this.disposeMaterials(),this.material=e,null!==e){let t=this.materials=[e.clone(),e.clone(),e.clone()];for(let i of t)i.uniforms=Object.assign({},e.uniforms),i.side=0;t[2].skinning=!0,this.materialsBackSide=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.side=1,i}),this.materialsDoubleSide=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.side=2,i}),this.materialsFlatShaded=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.flatShading=!0,i}),this.materialsFlatShadedBackSide=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.flatShading=!0,i.side=1,i}),this.materialsFlatShadedDoubleSide=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.flatShading=!0,i.side=2,i})}}render(e,t,i){let r=e.shadowMap.enabled;if(e.shadowMap.enabled=!1,Ce){let r=this.originalMaterials;for(let s of(this.meshCount=0,t.traverse(this.replaceMaterial),e.render(t,i),r))s[0].material=s[1];this.meshCount!==r.size&&r.clear()}else{let r=t.overrideMaterial;t.overrideMaterial=this.material,e.render(t,i),t.overrideMaterial=r}e.shadowMap.enabled=r}disposeMaterials(){if(null!==this.material)for(let e of this.materials.concat(this.materialsBackSide).concat(this.materialsDoubleSide).concat(this.materialsFlatShaded).concat(this.materialsFlatShadedBackSide).concat(this.materialsFlatShadedDoubleSide))e.dispose()}dispose(){this.originalMaterials.clear(),this.disposeMaterials()}static get workaroundEnabled(){return Ce}static set workaroundEnabled(e){Ce=e}}
vendor: 5,250 bytes, line 5962
5962,Ci=class extends E4{constructor(e,t,i=null){super("RenderPass",e,t),this.needsSwap=!1,this.clearPass=new E9,this.overrideMaterialManager=null===i?null:new Ct(i),this.ignoreBackground=!1,this.skipShadowMapUpdate=!1,this.selection=null}get renderToScreen(){return super.renderToScreen}set renderToScreen(e){super.renderToScreen=e,this.clearPass.renderToScreen=e}get overrideMaterial(){let e=this.overrideMaterialManager;return null!==e?e.material:null}set overrideMaterial(e){let t=this.overrideMaterialManager;null!==e?null!==t?t.setMaterial(e):this.overrideMaterialManager=new Ct(e):null!==t&&(t.dispose(),this.overrideMaterialManager=null)}getOverrideMaterial(){return this.overrideMaterial}setOverrideMaterial(e){this.overrideMaterial=e}get clear(){return this.clearPass.enabled}set clear(e){this.clearPass.enabled=e}getSelection(){return this.selection}setSelection(e){this.selection=e}isBackgroundDisabled(){return this.ignoreBackground}setBackgroundDisabled(e){this.ignoreBackground=e}isShadowMapDisabled(){return this.skipShadowMapUpdate}setShadowMapDisabled(e){this.skipShadowMapUpdate=e}getClearPass(){return this.clearPass}render(e,t,i,r,s){let a=this.scene,o=this.camera,l=this.selection,h=o.layers.mask,c=a.background,d=e.shadowMap.autoUpdate,u=this.renderToScreen?null:t;null!==l&&o.layers.set(l.getLayer()),this.skipShadowMapUpdate&&(e.shadowMap.autoUpdate=!1),(this.ignoreBackground||null!==this.clearPass.overrideClearColor)&&(a.background=null),this.clearPass.enabled&&this.clearPass.render(e,t),e.setRenderTarget(u),null!==this.overrideMaterialManager?this.overrideMaterialManager.render(e,a,o):e.render(a,o),o.layers.mask=h,a.background=c,e.shadowMap.autoUpdate=d}},Cr=class extends E4{constructor(e,t,{resolutionScale:i=1,width:r=E7.AUTO_SIZE,height:s=E7.AUTO_SIZE,renderTarget:a}={}){super("DepthPass"),this.needsSwap=!1,this.renderPass=new Ci(e,t,new ni({depthPacking:3201}));let o=this.renderPass;o.skipShadowMapUpdate=!0,o.ignoreBackground=!0;let l=o.getClearPass();l.overrideClearColor=new ii(16777215),l.overrideClearAlpha=1,this.renderTarget=a,void 0===this.renderTarget&&(this.renderTarget=new id(1,1,{minFilter:1003,magFilter:1003,stencilBuffer:!1}),this.renderTarget.texture.name="DepthPass.Target");let h=this.resolution=new E7(this,r,s,i);h.addEventListener("change",e=>this.setSize(h.baseWidth,h.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}render(e,t,i,r,s){let a=this.renderToScreen?null:this.renderTarget;this.renderPass.render(e,a)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t),this.renderTarget.setSize(i.width,i.height)}};new Float32Array([255/256/16777216,255/256/65536,255/256/256,255/256]);var Cs={SKIP:0,ADD:1,ALPHA:2,AVERAGE:3,COLOR_BURN:4,COLOR_DODGE:5,DARKEN:6,DIFFERENCE:7,EXCLUSION:8,LIGHTEN:9,MULTIPLY:10,DIVIDE:11,NEGATION:12,NORMAL:13,OVERLAY:14,REFLECT:15,SCREEN:16,SOFT_LIGHT:17,SUBTRACT:18},Ca=new Map([[Cs.SKIP,null],[Cs.ADD,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return min(x+y,1.0)*opacity+x*(1.0-opacity);}"],[Cs.ALPHA,"vec3 blend(const in vec3 x,const in vec3 y,const in float opacity){return y*opacity+x*(1.0-opacity);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){float a=min(y.a,opacity);return vec4(blend(x.rgb,y.rgb,a),max(x.a,a));}"],[Cs.AVERAGE,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(x+y)*0.5*opacity+x*(1.0-opacity);}"],[Cs.COLOR_BURN,"float blend(const in float x,const in float y){return(y==0.0)?y:max(1.0-(1.0-x)/y,0.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cs.COLOR_DODGE,"float blend(const in float x,const in float y){return(y==1.0)?y:min(x/(1.0-y),1.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cs.DARKEN,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return min(x,y)*opacity+x*(1.0-opacity);}"],[Cs.DIFFERENCE,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return abs(x-y)*opacity+x*(1.0-opacity);}"],[Cs.EXCLUSION,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(x+y-2.0*x*y)*opacity+x*(1.0-opacity);}"],[Cs.LIGHTEN,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return max(x,y)*opacity+x*(1.0-opacity);}"],[Cs.MULTIPLY,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return x*y*opacity+x*(1.0-opacity);}"],[Cs.DIVIDE,"float blend(const in float x,const in float y){return(y>0.0)?min(x/y,1.0):1.0;}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cs.NEGATION,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(1.0-abs(1.0-x-y))*opacity+x*(1.0-opacity);}"],[Cs.NORMAL,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return y*
5962opacity+x*(1.0-opacity);}"],[Cs.OVERLAY,"float blend(const in float x,const in float y){return(x<0.5)?(2.0*x*y):(1.0-2.0*(1.0-x)*(1.0-y));}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cs.REFLECT,"float blend(const in float x,const in float y){return(y==1.0)?y:min(x*x/(1.0-y),1.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cs.SCREEN,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(1.0-(1.0-x)*(1.0-y))*opacity+x*(1.0-opacity);}"],[Cs.SOFT_LIGHT,"float blend(const in float x,const in float y){return(y<0.5)?(2.0*x*y+x*x*(1.0-2.0*y)):(sqrt(x)*(2.0*y-1.0)+2.0*x*(1.0-y));}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[Cs.SUBTRACT,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return max(x+y-1.0,0.0)*opacity+x*(1.0-opacity);}"]]),Cn=class extends tL{constructor(e,t=1){super(),this.f=e,this.opacity=new lD(t)}getOpacity(){return this.opacity.value}setOpacity(e){this.opacity.value=e}get blendFunction(){return this.f}set blendFunction(e){this.f=e,this.dispatchEvent({type:"change"})}getBlendFunction(){return this.blendFunction}setBlendFunction(e){this.blendFunction=e}getShaderCode(){return Ca.get(this.blendFunction)}},Co={NONE:0,DEPTH:1,CONVOLUTION:2},Cl=class extends tL{constructor(e,t,{attributes:i=Co.NONE,blendFunction:r=Cs.SCREEN,defines:s=new Map,uniforms:a=new Map,extensions:o=null,vertexShader:l=null}={}){super(),this.name=e,this.renderer=null,this.attributes=i,this.fragmentShader=t,this.vertexShader=l,this.defines=s,this.uniforms=a,this.extensions=o,this.blendMode=new Cn(r),this.blendMode.addEventListener("change",e=>this.setChanged())}getName(){return this.name}setRenderer(e){this.renderer=e}getDefines(){return this.defines}getUniforms(){return this.uniforms}getExtensions(){return this.extensions}getBlendMode(){return this.blendMode}getAttributes(){return this.attributes}setAttributes(e){this.attributes=e,this.setChanged()}getFragmentShader(){return this.fragmentShader}setFragmentShader(e){this.fragmentShader=e,this.setChanged()}getVertexShader(){return this.vertexShader}setVertexShader(e){this.vertexShader=e,this.setChanged()}setChanged(){this.dispatchEvent({type:"change"})}setDepthTexture(e,t=3200){}update(e,t,i){}setSize(e,t){}initialize(e,t,i){}dispose(){for(let e of Object.keys(this)){let t=this[e];if(null!==t&&"object"==typeof t&&"function"==typeof t.dispose){if(t instanceof nb||t===this.renderer)continue;this[e].dispose()}}}};function Ch(e,t,i){for(let r of t){let t="$1"+e+r.charAt(0).toUpperCase()+r.slice(1),s=RegExp("([^\\.])(\\b"+r+"\\b)","g");for(let e of i.entries())null!==e[1]&&i.set(e[0],e[1].replace(s,t))}}var Cc=class extends E4{constructor(e,...t){super("EffectPass"),this.fullscreenMaterial=new EQ(null,null,null,e),this.effects=t.sort((e,t)=>t.attributes-e.attributes),this.skipRendering=!1,this.uniformCount=0,this.varyingCount=0,this.minTime=1,this.maxTime=Number.POSITIVE_INFINITY}get encodeOutput(){return this.fullscreenMaterial.encodeOutput}set encodeOutput(e){this.fullscreenMaterial.encodeOutput=e}get dithering(){return this.fullscreenMaterial.dithering}set dithering(e){let t=this.fullscreenMaterial;t.dithering=e,t.needsUpdate=!0}verifyResources(){let e=this.renderer.capabilities,t=Math.min(e.maxFragmentUniforms,e.maxVertexUniforms);this.uniformCount>t&&console.warn("The current rendering context doesn't support more than "+t+" uniforms, but "+this.uniformCount+" were defined"),t=e.maxVaryings,this.varyingCount>t&&console.warn("The current rendering context doesn't support more than "+t+" varyings, but "+this.varyingCount+" were defined")}updateMaterial(){let e=EQ.Section,t=new Map([[e.FRAGMENT_HEAD,""],[e.FRAGMENT_MAIN_UV,""],[e.FRAGMENT_MAIN_IMAGE,""],[e.VERTEX_HEAD,""],[e.VERTEX_MAIN_SUPPORT,""]]),i=new Map,r=new Map,s=new Map,a=new Set,o=0,l=0,h=0,c=!1,d=!1;for(let e of this.effects)if(e.blendMode.blendFunction===Cs.SKIP)h|=e.getAttributes()&Co.DEPTH;else if((h&e.getAttributes()&Co.CONVOLUTION)!=0)console.error("Convolution effects cannot be merged",e);else{h|=e.getAttributes();let u=function(e,t,i,r,s,a,o){let l=new Map([["fragment",t.getFragmentShader()],["vertex",t.getVertexShader()]]),h=void 0!==l.get("fragment")&&/mainImage/.test(l.get("fragment")),c=void 0!==l.get("fragment")&&/mainUv/.test(l.get("fragment")),d=[],u=[],p=!1,f=!1;if(void 0===l.get("fragment"))console.error("Missing fragment shader",t);else if(c&&(o&Co.CONVOLUTION)!=0)console.error("Effects that transform UV coordinates are incompatible with convolution effects",t);else if(h||c){let m=/(?:\w+\s+(\w+)\([\w\s,]*\)\s*{[^}]+}
5962)/g,g=EQ.Section;if(c){let t=`	${e}MainUv(UV);
5963`;i.set(g.FRAGMENT_MAIN_UV,i.get(g.FRAGMENT_MAIN_UV)+t),p=!0}if(null!==l.get("vertex")&&/mainSupport/.test(l.get("vertex"))){let t=`	${e}MainSupport(`;t+=/mainSupport *\([\w\s]*?uv\s*?\)/.test(l.get("vertex"))?`vUv);
5964`:`);
5965`,i.set(g.VERTEX_MAIN_SUPPORT,i.get(g.VERTEX_MAIN_SUPPORT)+t),d=d.concat([...l.get("vertex").matchAll(/(?:varying\s+\w+\s+(\w*))/g)].map(e=>e[1])),u=u.concat(d).concat([...l.get("vertex").matchAll(m)].map(e=>e[1]))}u=(u=(u=u.concat([...l.get("fragment").matchAll(m)].map(e=>e[1]))).concat([...t.defines.keys()].map(e=>e.replace(/\([\w\s,]*\)/g,"")))).concat([...t.uniforms.keys()]),t.uniforms.forEach((t,i)=>a.set(e+i.charAt(0).toUpperCase()+i.slice(1),t)),t.defines.forEach((t,i)=>s.set(e+i.charAt(0).toUpperCase()+i.slice(1),t)),Ch(e,u,s),Ch(e,u,l);let v=t.blendMode;if(r.set(v.blendFunction,v),h){let t=`${e}MainImage(color0, UV, `;(o&Co.DEPTH)!=0&&/MainImage *\([\w\s,]*?depth[\w\s,]*?\)/.test(l.get("fragment"))&&(t+="depth, ",f=!0),t+=`color1);
5966	`;let r=e+"BlendOpacity";a.set(r,v.opacity),t+=`color0 = blend${v.blendFunction}(color0, color1, ${r});
5967
5968	`,i.set(g.FRAGMENT_MAIN_IMAGE,i.get(g.FRAGMENT_MAIN_IMAGE)+t),t=`uniform float ${r};
5969
5970`,i.set(g.FRAGMENT_HEAD,i.get(g.FRAGMENT_HEAD)+t)}i.set(g.FRAGMENT_HEAD,i.get(g.FRAGMENT_HEAD)+l.get("fragment")+`
5971`),null!==l.get("vertex")&&i.set(g.VERTEX_HEAD,i.get(g.VERTEX_HEAD)+l.get("vertex")+`
5972`)}
5972else console.error("The fragment shader contains neither a mainImage nor a mainUv function",t);return{varyings:d,transformedUv:p,readDepth:f}}("e"+o++,e,t,i,r,s,h);if(l+=u.varyings.length,c=c||u.transformedUv,d=d||u.readDepth,null!==e.extensions)for(let t of e.extensions)a.add(t)}let u=/\bblend\b/g;for(let r of i.values()){let i=r.getShaderCode().replace(u,`blend${r.blendFunction}`);t.set(e.FRAGMENT_HEAD,t.get(e.FRAGMENT_HEAD)+i+`
5973`)}if((h&Co.DEPTH)!=0){if(d){let i=`float depth = readDepth(UV);
5974
5975	`;t.set(e.FRAGMENT_MAIN_IMAGE,i+t.get(e.FRAGMENT_MAIN_IMAGE))}this.needsDepthTexture=null===this.getDepthTexture()}else this.needsDepthTexture=!1;if(c){let i=`vec2 transformedUv = vUv;
5976`;t.set(e.FRAGMENT_MAIN_UV,i+t.get(e.FRAGMENT_MAIN_UV)),r.set("UV","transformedUv")}else r.set("UV","vUv");t.forEach((e,t,i)=>i.set(t,e.trim().replace(/^#/,`
5977#`))),this.uniformCount=s.size,this.varyingCount=l,this.skipRendering=0===o,this.needsSwap=!this.skipRendering,this.fullscreenMaterial.setShaderParts(t).setExtensions(a).setUniforms(s).setDefines(r)}recompile(){this.updateMaterial(),this.verifyResources()}getDepthTexture(){return this.fullscreenMaterial.depthBuffer}setDepthTexture(e,t=3200){for(let i of(this.fullscreenMaterial.depthBuffer=e,this.fullscreenMaterial.depthPacking=t,this.effects))i.setDepthTexture(e,t)}render(e,t,i,r,s){for(let i of this.effects)i.update(e,t,r);if(!this.skipRendering||this.renderToScreen){let s=this.fullscreenMaterial;s.inputBuffer=t.texture,s.time+=r,e.setRenderTarget(this.renderToScreen?null:i),e.render(this.scene,this.camera)}}setSize(e,t){for(let i of(this.fullscreenMaterial.setSize(e,t),this.effects))i.setSize(e,t)}initialize(e,t,i){for(let r of(this.renderer=e,this.effects))r.initialize(e,t,i),r.addEventListener("change",e=>this.handleEvent(e));this.updateMaterial(),this.verifyResources(),void 0!==i&&1009!==i&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}dispose(){for(let e of(super.dispose(),this.effects))e.dispose()}handleEvent(e){"change"===e.type&&this.recompile()}},Cd=[new Float32Array([0,0]),new Float32Array([0,1,1]),new Float32Array([0,1,1,2]),new Float32Array([0,1,2,2,3]),new Float32Array([0,1,2,3,4,4,5]),new Float32Array([0,1,2,3,4,5,7,8,9,10])],Cu=class extends E4{constructor({resolutionScale:e=.5,width:t=E7.AUTO_SIZE,height:i=E7.AUTO_SIZE,kernelSize:r=Cv.LARGE}={}){super("KawaseBlurPass"),this.renderTargetA=new id(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTargetA.texture.name="Blur.Target.A",this.renderTargetB=this.renderTargetA.clone(),this.renderTargetB.texture.name="Blur.Target.B";let s=this.resolution=new E7(this,t,i,e);s.addEventListener("change",e=>this.setSize(s.baseWidth,s.baseHeight)),this.blurMaterial=new EV,this.ditheredBlurMaterial=new EV,this.ditheredBlurMaterial.uniforms.scale=this.blurMaterial.uniforms.scale,this.ditheredBlurMaterial.dithering=!0,this.dithering=!1,this.kernelSize=r}getResolution(){return this.resolution}get width(){return this.resolution.width}set width(e){this.resolution.preferredWidth=e}get height(){return this.resolution.height}set height(e){this.resolution.preferredHeight=e}get scale(){return this.blurMaterial.scale}set scale(e){this.blurMaterial.scale=e}getScale(){return this.blurMaterial.scale}setScale(e){this.blurMaterial.scale=e}getKernelSize(){return this.kernelSize}setKernelSize(e){this.kernelSize=e}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}render(e,t,i,r,s){let a=this.scene,o=this.camera,l=this.renderTargetA,h=this.renderTargetB,c=Cd[this.kernelSize],d=this.blurMaterial,u=t,p,f;for(this.fullscreenMaterial=d,p=0,f=c.length-1;p<f;++p){let t=(1&p)==0?l:h;d.kernel=c[p],d.inputBuffer=u.texture,e.setRenderTarget(t),e.render(a,o),u=t}this.dithering&&(d=this.ditheredBlurMaterial,this.fullscreenMaterial=d),d.kernel=c[p],d.inputBuffer=u.texture,e.setRenderTarget(this.renderToScreen?null:i),e.render(a,o)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t);let r=i.width,s=i.height;this.renderTargetA.setSize(r,s),this.renderTargetB.setSize(r,s),this.blurMaterial.setSize(r,s),this.ditheredBlurMaterial.setSize(r,s)}initialize(e,t,i){void 0!==i&&(this.renderTargetA.texture.type=i,this.renderTargetB.texture.type=i,1009!==i?(this.blurMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1",this.ditheredBlurMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1"):3001===e.outputEncoding&&(this.renderTargetA.texture.encoding=3001,this.renderTargetB.texture.encoding=3001))}static get AUTO_SIZE(){return E7.AUTO_SIZE}}
5977,Cp=class extends E4{constructor({width:e=E7.AUTO_SIZE,height:t=E7.AUTO_SIZE,renderTarget:i,luminanceRange:r,colorOutput:s}={}){super("LuminancePass"),this.fullscreenMaterial=new EZ(s,r),this.needsSwap=!1,this.renderTarget=i,void 0===this.renderTarget&&(this.renderTarget=new id(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="LuminancePass.Target",this.renderTarget.texture.generateMipmaps=!1);let a=this.resolution=new E7(this,e,t);a.addEventListener("change",e=>this.setSize(a.baseWidth,a.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}render(e,t,i,r,s){this.fullscreenMaterial.inputBuffer=t.texture,e.setRenderTarget(this.renderToScreen?null:this.renderTarget),e.render(this.scene,this.camera)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t),this.renderTarget.setSize(i.width,i.height)}initialize(e,t,i){void 0!==i&&1009!==i&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}},Cf=class extends E4{constructor(e,t){super("MaskPass",e,t),this.needsSwap=!1,this.clearPass=new E9(!1,!1,!0),this.inverse=!1}get inverted(){return this.inverse}set inverted(e){this.inverse=e}get clear(){return this.clearPass.enabled}set clear(e){this.clearPass.enabled=e}getClearPass(){return this.clearPass}isInverted(){return this.inverted}setInverted(e){this.inverted=e}render(e,t,i,r,s){let a=e.getContext(),o=e.state.buffers,l=this.scene,h=this.camera,c=this.clearPass,d=this.inverted?0:1;o.color.setMask(!1),o.depth.setMask(!1),o.color.setLocked(!0),o.depth.setLocked(!0),o.stencil.setTest(!0),o.stencil.setOp(a.REPLACE,a.REPLACE,a.REPLACE),o.stencil.setFunc(a.ALWAYS,d,4294967295),o.stencil.setClear(1-d),o.stencil.setLocked(!0),this.clearPass.enabled&&(this.renderToScreen?c.render(e,null):(c.render(e,t),c.render(e,i))),this.renderToScreen?e.setRenderTarget(null):(e.setRenderTarget(t),e.render(l,h),e.setRenderTarget(i)),e.render(l,h),o.color.setLocked(!1),o.depth.setLocked(!1),o.stencil.setLocked(!1),o.stencil.setFunc(a.EQUAL,1,4294967295),o.stencil.setOp(a.KEEP,a.KEEP,a.KEEP),o.stencil.setLocked(!0)}},Cm=class extends E4{constructor(e,t="inputBuffer"){super("ShaderPass"),this.fullscreenMaterial=e,this.inputBufferUniform=null,this.setInput(t)}setInput(e){if(this.inputBufferUniform=null,null!==this.fullscreenMaterial){let t=this.fullscreenMaterial.uniforms;void 0!==t&&void 0!==t[e]&&(this.inputBufferUniform=t[e])}}render(e,t,i,r,s){null!==this.inputBufferUniform&&null!==t&&(this.inputBufferUniform.value=t.texture),e.setRenderTarget(this.renderToScreen?null:i),e.render(this.scene,this.camera)}initialize(e,t,i){void 0!==i&&1009!==i&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}},Cg=class{constructor(){this.previousTime=0,this.currentTime=0,this.delta=0,this.fixedDelta=1e3/60,this.elapsed=0,this.timescale=1,this.fixedDeltaEnabled=!1,this.autoReset=!1}setFixedDeltaEnabled(e){return this.fixedDeltaEnabled=e,this}isAutoResetEnabled(e){return this.autoReset}setAutoResetEnabled(e){return"u">typeof document&&void 0!==document.hidden&&(e?document.addEventListener("visibilitychange",this):document.removeEventListener("visibilitychange",this),this.autoReset=e),this}getDelta(){return .001*this.delta}getFixedDelta(){return .001*this.fixedDelta}setFixedDelta(e){return this.fixedDelta=1e3*e,this}getElapsed(){return .001*this.elapsed}getTimescale(){return this.timescale}setTimescale(e){return this.timescale=e,this}update(e){return this.fixedDeltaEnabled?this.delta=this.fixedDelta:(this.previousTime=this.currentTime,this.currentTime=void 0!==e?e:performance.now(),this.delta=this.currentTime-this.previousTime),this.delta*=this.timescale,this.elapsed+=this.delta,this}reset(){return this.delta=0,this.elapsed=0,this.currentTime=performance.now(),this}handleEvent(e){document.hidden||(this.currentTime=performance.now())}dispose(){this.setAutoResetEnabled(!1)}},Cv={MEDIUM:2,LARGE:3,HUGE:5},Cy=`#ifdef FRAMEBUFFER_PRECISION_HIGH
5978uniform mediump sampler2D map;
5979#else
5980uniform lowp sampler2D map;
5981#endif
5982uniform float intensity;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=clamp(texture2D(map,uv)*intensity,0.0,1.0);}`,Cx=class extends Cl{constructor({blendFunction:e=Cs.SCREEN,luminanceThreshold:t=.9,luminanceSmoothing:i=.025,resolutionScale:r=.5,intensity:s=1,width:a=E7.AUTO_SIZE,height:o=E7.AUTO_SIZE,kernelSize:l=Cv.LARGE}={}){super("BloomEffect",Cy,{blendFunction:e,uniforms:new Map([["map",new lD(null)],["intensity",new lD(s)]])}),this.renderTarget=new id(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="Bloom.Target",this.renderTarget.texture.generateMipmaps=!1,this.uniforms.get("map").value=this.renderTarget.texture,this.luminancePass=new Cp({renderTarget:this.renderTarget,colorOutput:!0}),this.luminanceMaterial.threshold=t,this.luminanceMaterial.smoothingFactor=i,this.blurPass=new Cu({resolutionScale:r,width:a,height:o,kernelSize:l});let h=this.blurPass.getResolution();h.addEventListener("change",e=>this.setSize(h.baseWidth,h.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}get resolution(){return this.blurPass.resolution}getResolution(){return this.blurPass.resolution}getBlurPass(){return this.blurPass}getLuminancePass(){return this.luminancePass}get luminanceMaterial(){return this.luminancePass.fullscreenMaterial}getLuminanceMaterial(){return this.luminancePass.fullscreenMaterial}get width(){return this.resolution.width}set width(e){this.resolution.preferredWidth=e}get height(){return this.resolution.height}set height(e){this.resolution.preferredHeight=e}get dithering(){return this.blurPass.dithering}set dithering(e){this.blurPass.dithering=e}get kernelSize(){return this.blurPass.kernelSize}set kernelSize(e){this.blurPass.kernelSize=e}get distinction(){return console.warn(this.name,"distinction was removed"),1}set distinction(e){console.warn(this.name,"distinction was removed")}get intensity(){return this.uniforms.get("intensity").value}set intensity(e){this.uniforms.get("intensity").value=e}getIntensity(){return this.intensity}setIntensity(e){this.intensity=e}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}update(e,t,i){let r=this.renderTarget;this.luminancePass.enabled?(this.luminancePass.render(e,t,r),this.blurPass.render(e,r,r)):this.blurPass.render(e,t,r)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t),this.renderTarget.setSize(i.width,i.height),this.luminancePass.resolution.copy(i)}initialize(e,t,i){this.blurPass.initialize(e,t,i),void 0!==i&&(this.renderTarget.texture.type=i,3001===e.outputEncoding&&(this.renderTarget.texture.encoding=3001))}},Cb=class extends Cl{constructor({blendFunction:e=Cs.NORMAL,brightness:t=0,contrast:i=0}={}){super("BrightnessContrastEffect","uniform float brightness;uniform float contrast;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 color=inputColor.rgb+vec3(brightness-0.5);if(contrast>0.0){color/=vec3(1.0-contrast);}else{color*=vec3(1.0+contrast);}outputColor=vec4(min(color+vec3(0.5),1.0),inputColor.a);}",{blendFunction:e,uniforms:new Map([["brightness",new lD(t)],["contrast",new lD(i)]])})}get brightness(){return this.uniforms.get("brightness").value}set brightness(e){this.uniforms.get("brightness").value=e}getBrightness(e){return this.brightness}setBrightness(e){this.brightness=e}get contrast(){return this.uniforms.get("contrast").value}set contrast(e){this.uniforms.get("contrast").value=e}getContrast(e){return this.contrast}setContrast(e){this.contrast=e}},Cw=class extends Cl{constructor(e=Cs.NORMAL){super("ColorAverageEffe
5982ct","void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=vec4(vec3(average(inputColor.rgb)),inputColor.a);}",{blendFunction:e})}},CS=class extends Cl{constructor({blendFunction:e=Cs.NORMAL,offset:t=new tQ(.001,5e-4)}={}){super("ChromaticAberrationEffect","varying vec2 vUvR;varying vec2 vUvB;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec2 ra=texture2D(inputBuffer,vUvR).ra;vec2 ba=texture2D(inputBuffer,vUvB).ba;outputColor=vec4(ra.x,inputColor.g,ba.x,max(max(ra.y,ba.y),inputColor.a));}",{vertexShader:"uniform vec2 offset;varying vec2 vUvR;varying vec2 vUvB;void mainSupport(const in vec2 uv){vec2 shift=offset*vec2(1.0,aspect);vUvR=uv+shift;vUvB=uv-shift;}",blendFunction:e,attributes:Co.CONVOLUTION,uniforms:new Map([["offset",new lD(t)]])})}get offset(){return this.uniforms.get("offset").value}set offset(e){this.uniforms.get("offset").value=e}getOffset(){return this.offset}setOffset(e){this.offset=e}},C_=`#ifdef FRAMEBUFFER_PRECISION_HIGH
5983uniform mediump sampler2D nearColorBuffer;uniform mediump sampler2D farColorBuffer;
5984#else
5985uniform lowp sampler2D nearColorBuffer;uniform lowp sampler2D farColorBuffer;
5986#endif
5987uniform lowp sampler2D nearCoCBuffer;uniform float scale;void mainImage(const in vec4 inputColor,const in vec2 uv,const in float depth,out vec4 outputColor){vec4 colorNear=texture2D(nearColorBuffer,uv);vec4 colorFar=texture2D(farColorBuffer,uv);float CoCNear=texture2D(nearCoCBuffer,uv).r;CoCNear=min(CoCNear*scale,1.0);vec4 result=inputColor*(1.0-colorFar.a)+colorFar;result=mix(result,colorNear,CoCNear);outputColor=result;}`,CA=class extends Cl{constructor(e,{blendFunction:t=Cs.NORMAL,worldFocusDistance:i,worldFocusRange:r,focusDistance:s=0,focalLength:a=.1,focusRange:o=a,bokehScale:l=1,width:h=E7.AUTO_SIZE,height:c=E7.AUTO_SIZE}={}){super("DepthOfFieldEffect",C_,{blendFunction:t,attributes:Co.DEPTH,uniforms:new Map([["nearColorBuffer",new lD(null)],["farColorBuffer",new lD(null)],["nearCoCBuffer",new lD(null)],["scale",new lD(1)]])}),this.camera=e,this.renderTarget=new id(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="DoF.Intermediate",this.renderTarget.texture.generateMipmaps=!1,this.renderTargetMasked=this.renderTarget.clone(),this.renderTargetMasked.texture.name="DoF.Masked.Far",this.renderTargetNear=this.renderTarget.clone(),this.renderTargetNear.texture.name="DoF.Bokeh.Near",this.uniforms.get("nearColorBuffer").value=this.renderTargetNear.texture,this.renderTargetFar=this.renderTarget.clone(),this.renderTargetFar.texture.name="DoF.Bokeh.Far",this.uniforms.get("farColorBuffer").value=this.renderTargetFar.texture,this.renderTargetCoC=this.renderTarget.clone(),this.renderTargetCoC.texture.name="DoF.CoC",this.renderTargetCoCBlurred=this.renderTargetCoC.clone(),this.renderTargetCoCBlurred.texture.name="DoF.CoC.Blurred",this.uniforms.get("nearCoCBuffer").value=this.renderTargetCoCBlurred.texture,this.cocPass=new Cm(new Ek(e));let d=this.cocMaterial;d.focusDistance=s,d.focusRange=o,void 0!==i&&(d.worldFocusDistance=i),void 0!==r&&(d.worldFocusRange=r),this.blurPass=new Cu({kernelSize:Cv.MEDIUM,width:h,height:c});let u=this.blurPass.getResolution();u.addEventListener("change",e=>this.setSize(u.getBaseWidth(),u.getBaseHeight())),this.maskPass=new Cm(new E$(this.renderTargetCoC.texture));let p=this.maskPass.fullscreenMaterial;p.maskFunction=1,p.colorChannel=1,this.bokehNearBasePass=new Cm(new Ez(!1,!0)),this.bokehNearBasePass.fullscreenMaterial.cocBuffer=this.renderTargetCoCBlurred.texture,this.bokehNearFillPass=new Cm(new Ez(!0,!0)),this.bokehNearFillPass.fullscreenMaterial.cocBuffer=this.renderTargetCoCBlurred.texture,this.bokehFarBasePass=new Cm(new Ez(!1,!1)),this.bokehFarBasePass.fullscreenMaterial.cocBuffer=this.renderTargetCoC.texture,this.bokehFarFillPass=new Cm(new Ez(!0,!1)),this.bokehFarFillPass.fullscreenMaterial.cocBuffer=this.renderTargetCoC.texture,this.target=null,this.bokehScale=l}get cocTexture(){return this.renderTargetCoC.texture}get cocMaterial(){return this.cocPass.fullscreenMaterial}get circleOfConfusionMaterial(){return this.cocMaterial}getCircleOfConfusionMaterial(){return this.circleOfConfusionMaterial}getBlurPass(){return this.blurPass}get resolution(){return this.blurPass.getResolution()}getResolution(){return this.blurPass.getResolution()}get bokehScale(){return this.uniforms.get("scale").value}set bokehScale(e){for(let t of[this.bokehNearBasePass,this.bokehNearFillPass,this.bokehFarBasePass,this.bokehFarFillPass])t.fullscreenMaterial.setScale(e);this.maskPass.fullscreenMaterial.setStrength(e),this.uniforms.get("scale").value=e}getBokehScale(){return this.bokehScale}setBokehScale(e){this.bokehScale=e}getTarget(){return this.target}setTarget(e){this.target=e}calculateFocusDistance(e){let t=this.camera;return EF(-t.position.distanceTo(e),t.near,t.far)}
5987setDepthTexture(e,t=3200){this.circleOfConfusionMaterial.depthBuffer=e,this.circleOfConfusionMaterial.depthPacking=t}update(e,t,i){let r=this.renderTarget,s=this.renderTargetCoC,a=this.renderTargetCoCBlurred,o=this.renderTargetMasked;if(null!==this.target){let e=this.calculateFocusDistance(this.target);this.circleOfConfusionMaterial.focusDistance=e}this.cocPass.render(e,null,s),this.blurPass.render(e,s,a),this.maskPass.render(e,t,o),this.bokehFarBasePass.render(e,o,r),this.bokehFarFillPass.render(e,r,this.renderTargetFar),this.bokehNearBasePass.render(e,t,r),this.bokehNearFillPass.render(e,r,this.renderTargetNear)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t);let r=i.width,s=i.height,a=[this.cocPass,this.blurPass,this.maskPass,this.bokehNearBasePass,this.bokehNearFillPass,this.bokehFarBasePass,this.bokehFarFillPass];a.push(this.renderTargetCoC,this.renderTargetMasked),a.forEach(i=>i.setSize(e,t)),(a=[this.renderTarget,this.renderTargetNear,this.renderTargetFar,this.renderTargetCoCBlurred]).forEach(e=>e.setSize(r,s)),[this.bokehNearBasePass,this.bokehNearFillPass,this.bokehFarBasePass,this.bokehFarFillPass].forEach(e=>e.fullscreenMaterial.setSize(r,s))}initialize(e,t,i){[this.cocPass,this.maskPass,this.bokehNearBasePass,this.bokehNearFillPass,this.bokehFarBasePass,this.bokehFarFillPass].forEach(r=>r.initialize(e,t,i)),this.blurPass.initialize(e,t,1009),void 0!==i&&(this.renderTarget.texture.type=i,this.renderTargetNear.texture.type=i,this.renderTargetFar.texture.type=i,this.renderTargetMasked.texture.type=i,3001===e.outputEncoding&&(this.renderTarget.texture.encoding=3001,this.renderTargetNear.texture.encoding=3001,this.renderTargetFar.texture.encoding=3001,this.renderTargetMasked.texture.encoding=3001))}};new iv,new iX;var CM=class extends Cl{constructor({blendFunction:e=Cs.NORMAL,hue:t=0,saturation:i=0}={}){super("HueSaturationEffect","uniform vec3 hue;uniform float saturation;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 color=vec3(dot(inputColor.rgb,hue.xyz),dot(inputColor.rgb,hue.zxy),dot(inputColor.rgb,hue.yzx));float average=(color.r+color.g+color.b)/3.0;vec3 diff=average-color;if(saturation>0.0){color+=diff*(1.0-1.0/(1.001-saturation));}else{color+=diff*-saturation;}outputColor=vec4(min(color,1.0),inputColor.a);}",{blendFunction:e,uniforms:new Map([["hue",new lD(new iv)],["saturation",new lD(i)]])}),this.hue=t}get saturation(){return this.uniforms.get("saturation").value}set saturation(e){this.uniforms.get("saturation").value=e}getSaturation(){return this.saturation}setSaturation(e){this.saturation=e}get hue(){return Math.acos((3*this.uniforms.get("hue").value.x-1)/2)}set hue(e){let t=Math.sin(e),i=Math.cos(e);this.uniforms.get("hue").value.set((2*i+1)/3,(-Math.sqrt(3)*t-i+1)/3,(Math.sqrt(3)*t-i+1)/3)}getHue(){return this.hue}setHue(e){this.hue=e}};new ii;var CE=`void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 noise=vec3(rand(uv*time));
5988#ifdef PREMULTIPLY
5989outputColor=vec4(min(inputColor.rgb*noise,vec3(1.0)),inputColor.a);
5990#else
5991outputColor=vec4(noise,inputColor.a);
5992#endif
5993}`,CC=class extends Cl{constructor({blendFunction:e=Cs.SCREEN,premultiply:t=!1}={}){super("NoiseEffect",CE,{blendFunction:e}),this.premultiply=t}get premultiply(){return this.defines.has("PREMULTIPLY")}set premultiply(e){this.premultiply!==e&&(e?this.defines.set("PREMULTIPLY","1"):this.defines.delete("PREMULTIPLY"),this.setChanged())}isPremultiplied(){return this.premultiply}setPremultiplied(e){this.premultiply=e}},CT=class extends Cl{constructor(e=30){super("PixelationEffect","uniform bool active;uniform vec2 d;void mainUv(inout vec2 uv){if(active){uv=vec2(d.x*(floor(uv.x/d.x)+0.5),d.y*(floor(uv.y/d.y)+0.5));}}",{uniforms:new Map([["active",new lD(!1)],["d",new lD(new tQ)]])}),this.resolution=new tQ,this.d=0,this.granularity=e}get granularity(){return this.d}set granularity(e){let t=Math.floor(e);t%2>0&&(t+=1),this.d=t,this.uniforms.get("active").value=t>0,this.setSize(this.resolution.width,this.resolution.height)}getGranularity(){return this.granularity}setGranularity(e){this.granularity=e}setSize(e,t){this.resolution.set(e,t),this.uniforms.get("d").value.setScalar(this.d).divide(this.resolution)}};new iv,new iv;var CP="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAQCAYAAACm53kpAAAAeElEQVRYR+2XSwqAMAxEJ168ePEqwRSKhIIiuHjJqiU0gWE+1CQdApcVAMUAuARaMGCX1MIL/Ow13++9lW2s3mW9MWvsnWc/2fvGygwPAN4E8QzAA4CXAB6AHjG4JTHYI1ey3pcx6FHnEfhLDOIBKAmUBK6/ANUDTlROXAHd9EC1AAAAAElFTkSuQmCC",CD
vendor: 6,469 bytes, line 5993
5993="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAIwCAYAAAABNmBHAAAgAElEQVR4Xuy9CbhlV1ktOvbpq09DkiIkUBI6kxASIH0DlAQiIK1wRfSJTx+i4JX7vKIigs8HXpXvqVcvrcC9agQ7IDTSSWgqCQQliDRBJKkkhDSkqVPNqVOnP+8b//rH3P+eZ+199tlznVTlvVrft7+1T7OaueZY42/m37QALKNk2wHg1pITlB17mC+Pp11W3X/LHyT32vhg48/5SOv+PnwpsHA70JoGlueB1iKApeqzvOzn44GatTB76Xzhd7suBR7+WWADgDEAwwCG/L54b/poDLrHuvvm70Z2Avhsc+PVcxscBU8F8C8ADg5+ipIjD/PlGwfgju8B924E5seARUfLsiNmqQW0IjL8+7L2NYD/7COBzfcCm+aB8SVgdAkYIRCXKyDax4EdAanL5PuNPllNvXDlAHwFgP8AcC2AhRIoDXbsYb48dl5WkVFTE3LGDcC9m4CZCWBuFFgeAZaGAYJQQCRqDHT+McJrVb8zwATUXH02MHYfMHEIGFsAxgjApQqACYQORjtd/B7Axt/z79sC0+cMPgjjlwPwVwHcA+DfAHzTxcVgWBroqMN8+cYBeM71wH0TwKExYHYUWCIAHYRLTlkCYgcIBcAgU/n3qy8GRu4HRgnAOWBkERhddPAJhGJDBxkvw7cqimr+zFM/ZLnZF64cgL8BYD+AWwB8x/dlWuWagHiYL984AJ/0RWBy1AE4AizyM1yxYAcTigW55xMbAkxEiwEdkJ/ZCQxPAiOHgBECcKEC4TBZcKkSv+mTieNcNPNC26mLNsj45QD8LQDTAO4GcJt/7iw2bfoG4WG+vAGwm9ExiEg69zpg/wgwPQLMjgALzn4E4aIzoJjQ9g4024uygkj+pyuAoX0VAIfngOH5NgCHMhAm8Sv2y3XDZeBhNIp8OzJE8OsBzAKYBHAXgDt8/4O+MVT0j4f58o0D8Pxrgf3DwMwIMEPQEYRkNwfgsuuDZLskip0No0gWMD/9HGDoADAkAC4Aw/wsAgZAgs2Z0ABI0GU6IVmKv+f28KDnHxkA/G0A8y6G73N9kOCjXnh/Ebb6OvgwX75xAF5wLTA1VIHPADgMLDj4yIA5AAm6aCUnv4oz46eeDwxNAUMzwJAz4BABSNDFTwSfg7DDKHE23MG5PqIY8A1u/dINs9dBdy8AgnGPM2NfUBrsnw7z5RsH4IXXAAcJviFgluAbygBINnSLWOAjGxJ4pgOKDV0v/OSLKp8iGXBovhLBBOCQM2ACoTOhnYrAdItYbCij5JFzRyIAqRccAnDAQUjg6UNQ7hsMXP0cRQAexss3DsCLCECCLwCQzMcPwUi2MwAScAKbfnY/YRLFQ8DHX+IAJAMSfDkAF13kLvleIjhjQQHxUVS3jjgGpKeeNzYVQEjgUS8k+PghONdhIwAP4+XXBYCHKIJbwJyDTgaIAdCBJx3Q2M8tYAHP9m4df/ylQOsQ0JqtRLCx30K1wtLBggScQOgsKBGcWHAJeOwRC0BSM1mQIKRbhh+Bj98JQP6t4U0APEyXXxcAEnxkQAFwoVUxID9kvQg+c1C7vidRbIDkc24B//hTQGumDcCWA5DgMxASdNIFBUI5pCML8v8API5zfEQx4BudgqiczviSnJhQwCP4BMCGl+wO8+U7AJi/W4O4YS6+pmK/2ciADsAOBhTIIiAJnPB7AvNjP+0AnANaYkAHX2JBAc+tYaJXOqBZv24Vc386XW5dtkHGW+4HFAJonpOe+YYQZAShgKjv3PNvPQaxVoI8zJdfFwASfPzMUwS3Kt1v0UFIlos6oDFdAGFcliMAP/ryAEAGNwQRnDOgLbdlIEwrIs6AZ/QgkMMHQF6ZAKQcJAsSYPwIeAIk9wJgoPK1gi7+PwF4GC/fOAAvIQPSs0URTPBJ/Pp3GSEGRHfBCIQ0xowBtUbcAj7ys5X4Jfu1HIAGQrIgQRXEsAFQIORDFhiDY/rMHmrU4QUgR08AkgUjCAW6CD6CkwBsAIQC4GG6fPMA3OXiNzCg2I9gNCMksmAAoemDzoimFwL48M85AKkiuQVMAAp8CYRRDAt8GQiJ67N6GJODAXAHlsGguscA2AJg1IPGYmxOpBxFWkRN9LsATgIwXnNs/v/5z/9XCf8BO3YAtxbc/46/KDt+5+ea1Yku2VUxHz/z0v24FwMGK1gWsK2OUUxHHdCBeRUB6OxHABr4ZICIBd0QWSF+XRdMTAjgCdTrG9cBNwE4F8CpDkICyYLGsuhFt6zs+gISwUen8zEAjgMw4cfx2H6O/90yAFo84Cbg4ID3/9TfLTt+5+ebnRABkODjx0SwPi5ec/FrYpmqSAxM8Dn60CsqAFI6GfhqAMiDE/gokmvEr0C4PgDkBQm40wE8zMFEUDKEVoxIMLl/KS73mE7H9d+vcKHQQcjwW0Yu9nP8m8sAmOIBuWY6wP2/4s0ezjjg8TuvaR6ABJ70vxUApGrm7EbGE+i472BAB+WHfqHS/eoAaEwY2E9+wLSXTqhI7CXgnB6LCoOJ4BiST+hTnG0HcCwAglCx3ARoZEVFXnBPp/O/A/hXACc7CPs9/i1lAOyIB+RDX+P9/+pbQjjjAMfv/PL6AFDs1wFAgs/9fgKfgdE/ZEpuiQlbwAde6QAMBgiRmsSwA9BY0JfjovGRDBMH4TlcXGhcBOc6HkF0gjPhZgchxTLZMAci/04W/B6Ab3t09EPXcPyflgFwRTwgJ2MN9/8bf5qFM67x+B/aW4XQz42FeL0YrRyikztUFw0704mf9kXgxhOAqc3AAsPyRxxQCs/PdXOFY0W1KHy3QIUGtx+6vdnx1vsB+dsTncm2AogglFgVEAlUWrOMB2RyEmMCGQ/Y7/HvKns6tfGAnJQ+r/9b76oJZ1zD8WdyQjYBh8aBhVEHjELouQ8ukQ7VRSCJAALwkr+sALhnGzDD3JAJYJHg9uhoi4bx8ytkWUtvHT/7+Zc4dw1uZ3612fH2dkQf7yxIEEockwkJQn4IQoq8unhAhmPRKKFx0uv4K8ueTs94wD7u//VX9ghn7OP4c+4G7h8HpseB+dF2AKlFLwuAIZ8jD6NPrOhAffmfA9/ZBuzZCkyRWSeqBCWyoYGQ5yQrBpDbum/ME1HoPo0XEkSD2zlfbna8q6+EUJcTCxKEtHL5EQjP6BEPyIgYAZBvYt3xHyx7OqvGA65y/7/9wVXCGVc5/sl7qxD66dEqiYgRzAqhN1A4CBNAAlDyAFI+iZ9/N3DLJuC+jcDUBmCWyUnOrmTYCMIOkNclLg0B8/RsNLg9+UvNjnd1APLmmQpFHyEBROuWACQT8nN+H/GAvY7/VNnT6SsesMf13/CpahGnZzhjj+PPmwX2MYdDIfQexWyBAwEUOQDrRDN/98p3A7dvAO6fAA5sqHJDBEAyoUVGkwEd6HR12XU4kwzfl6fCXTZzjy57vvnR513X7Hj7AyDvggAUi9EyFgiZqNxPQF6345nOWbD1HQ/Y5fpvuLa/2+82/vNHgAPDFQDnhoF5j2C2qBWCI8bw1eRw5CL5l94L3DEOTI4DB8Y9OWmsEu/zBJ3rgsaybqBob/7A4C7jtWcooRrczr+u2fH2D0AOQgAUCxKEP7aGgLy64+m6KdjWFA9Yc/03/Osa4glrjr+AupqHz1sEs0cxG0BC9HIePLoit9eNkVf9L+DuUWByDJgaq4ybGYLPAWgiXmLedUE7dwC7saL7CqfPKXi4NYdaykCD410bAHlDEsNiwZ9wAPYbkJcfz6T2gm3N8YDZ9d/wHxUA+739fPwXPrSKYGb+BuP3jAFDElFH9HIWwbzCIGkBr/or4J4RYO8oMOW6ZVcAuvi1Cgoha04BCwT5gfMKHm7NoRde2+x41w5A3hQZkADk5+cGiAeMx3+/7AENFA8Yrv/G71cAXFM4Yzj+otOAaQLQA0gZxaIIZtMDFTigKJV8H9Iq6aZ59ZXAvSPAvpEKgBTtBODcSCWCZeRYtpzrmLyeGNCAyFl1v+Hei8qeb370Rdc2O97BAMi7EgB/2QG41nhAHU9LuWAbOB7Qr//GPRUA13r7Gv9FZwIMoVcEswEwfDoimEP0shKKtIphaZQAXv1+YM+wA3DEdcvRKkGJADQQEsQuhi1Tjt95vBsh5nx2IO59SsHDrTmUOStNjndwAAqEry0IyCMICkOyiuIBNwBvPFQQT7gBuPjc9oRYAIHyOEL4vIFEYVNaOou5vCGE/tV/A0wOVcnpzI47NOri3QFIBpSeaSDUdYLOSWvYImSGgftpJDa4MWJbAGxivGUA5MAOc0Be6eVLj7/4Mk+hzCOYPYpZDBiNkLh+G/M3yFyv/ltgL3W3YQfgcFUhgRY2PwY+Z7/EhAR1SFyXCOb57r28QfQBsJQBMn5D4y0HYLPje9Cd7RIC0PM3EiMofF4gVCBp1P840ix/gyz56r+vAMjk9Gl375iB4+CzveuZdLkkEPJ8ZEfX/6R73vOjzT5Si9hucLxHAVg4PwJgRwh9CKOXK8YA4ZEqKZXSQWh5P+5AftXfA/uGKvYjCKn72cctbFrZNECka5L5CPwIPtMH3TVz17MLB5gdLgA2Nd6jACycHwLQxFEUSR5ASvARDB0h9AQb9bXIgCGk6lUfAPYTgEPAITKgg1BObk58srTJgG58WMkWMaAbQQT1nc8rHGANAJsc71EAFs4PAagQestgC1lsBJ4BMCSOK6dDUcwqqaFiQr/0QeAAAdjy+jBiQQeeMSBZT3nCPUDIa9z+/MIB1gCwyfEeBWDh/BCAeQSzgkjFfGLBBD5nxQ4DxN0wv3hVxX5TBGDwL5obxvVA5YqYL5BeMLd66YYxJpRB0gK+96LCAdYAsMnxHgVg4fwIgMrhUPKQ2C+Bz0PmBTqBMQehAbDlIjj4F80KJguSVZ0FuXpjoCOgXawLjALhbT9eOMAuAGxqvEcBWDg/l1IE05Ed0ygZnyHdz0VwCqEPIfNyx0QQvvLDFQCp+8nfZk5und8tXwIgWcHSNX0N2CJmnAl3v6RwgNnhl17T7HiPArBwfghAS7mV/hey2JS9FvM3BLpUUi1YwDRMXvkRYJoAlAh2l0dcZ04s6JUTDIjyBcrl4yDc/dLCAdYAsMnxHgVg4fxwKVwJgGEJNmWtxpQMpX9on2eRhVA+O56AjMfnP+e3Xvf3NwG4xIPTleiY55bpGh6UbafNU0l0z0p+5Jh5HqYJ6b51nP6XP8cx12XNHQVgIQB/bFPVg2OC7Q+WgVFWng/FvtWLI06uWh5oguKEcXVS/9sEAF//VGD7t4ETDgJbF4CNi8CGZWBs2fPL/H6Vwp2KEtVk4fJ+v/EIYPN9wKa5qu+IncfPwXHVZe/aOL3EbwS7xv8A1rQvnO0j8PArTgTGZ4BxFv9mIxhOCGsv+0OPYDRghcLfkWkEuq0+G00x4OtfDGz+d2DbHmDLjL8si8AYP/7CGIAiEEMTG92zXqSbH+d9R2aA0XnvO+JjthiIrOVDHHPOkBrzUQAWAPsZp3oPDpa/Xag6EVkLBK+5rAnJC3/nYk/APD704WiEAV8OTHwX2LQH2DgFbJgFNrBhjd8r79deGoEwsllgNBOzy8CdjweG9wBj08AIAci2D6HafmyAk4/Z7SJ72hGYRwFYAMDLTwOGp4FRFgD3HhzqRGQiyeurqOdG6r0Rm8IEZjzRlkiqCWoEgK8Axm4BJu4HJhyAbFhDxmbDGnZO4j0SgLGDkpibgEq66TJw/1nA0F5gdLpq+zDqFfd5LMeWqu5HNST0uJOIllg+qgMWgI+HPv0xwLA3gWHpW2sC441gCECbmKziaGrnUdMO4aHeh6MxAP4SMHI7ML4HGD8AjHvHJGNAgpDgY/ck3stipRemvVhc+uASMPUEYGh/9dIRgGx8Y+MNbR/00uVtH0wEx94j/v0oAxaA8Ed+GBieAYZZg5kADC0QWGOFzGJlcGPzl1BxNLXD8sk4xftwNAbA/wwM3wGMUmxOOQBnHXzetIYvibonmSiuYTNjriVg7glAiwBk0fNZH6+PmX9P6kfNmCXGpftJ7TgKwBIAnln14BAAYxMYm5C6RjCyCoOyr0qkD/c+HI0B8DXA8N3AyCQwesD1VQKH7EcASm1Q+y4CkN9pUKiVF5nLvy+fBbTUd8QBaH1HvNBROiZvfsNnrF4kcvPwpdsBLBeU18Nf7AB23Dp4ecHC8oBgUlJJecLS+7+WOpE3gbE+HKw+yoevCYkMGKqPJrdEKARutaFYRs1fiEZ0wP8CDN8LDO8FRqYq3W10pgKgfYLaYCzootgA6KXaTA90y374TKB1sBozy77xHFZ536utRgAmEaw6g5kUSFZwSXnA330qsOlfgHMPDlZesLA8IOjoLypPWHj/11EnCiVwkz7kAExtsGraYUWdSDX5TmsagL8KDBGA7Bd30JsW0oWivnEOQNP7yGTSB
vendor: 60,312 bytes, line 5993
5993R101AlZSUtGyfgZDkCWY1HnJdcBVe6325hTvelg2CQjZNDygG/2An0j1wKnL6y9vGBheUC8prQ8YeH9X39OVQSc7Mc6fCaKvAeHdCIVf4yMYCynTpX+nb97NJmlSQb8r8DQHm9YOFUZTKOzoXGhs6AxF0HIexcLBvWBuiHN8s2ne98R3qc6L4Vyb2oBVjfm9MIFHbjDCh6kPOBbQoG+oW8CO5bWVl6wsDwgfr20PGHh/X/1iaEIuDcCTIW/1Q4rFv8OnYiW3c+W2iKwUjKbyjQNwL1uuR6sAEgDgq1brXOmV81PxhNB6DUDBSYzQJwFtz623XcktX1Q1VWKaTF/zZhVazBVYA1tX5MazsGvobwe/jQr0Ne6BTh5uf/ygoXlAfG60vKEhff/rSe1i4DnTWDUACY1guFTDqLYdCBvf6DJYSMYATBfOx1kLfj1v1axH10nQ3Sd0GUkBnTfpemtBJgseIKQAHLQcVxa2TnuMW0Aqui5es8xBIegVdVVE8VhzHnLh65WMB9An+X18K6aAn2tO4ETl6vqbKuVFywsDwhevqg8YeH93/Rk70JE90nowxZbIJjvS3WYNSGUwGHJTpPxwwcbBuBrgRYBeKACn7VtpdUu/c0NJxO9BIxcKu4TTODzbkonPLoaL0vyUQRb2y8HsL1ckfWzMeuFi40Qezqi+yiPhyt7FOjr6/gCFwgP7Xb5vssTFt7/nQRg6MGRWmDRoeyTlpgw68GRTwgZgo1gGmXAX6/8dtaylSKY/koyID9BhzML3q1gAos2AcOrZYSoq/pJp1VtODRm9Z3LS/7WjVkvXOzEtOpKyGrlAT+4SoG+VY8vBGCvy/dVnrDw/vee65NBJiAjBIVcAJQjOm+DkCZEeiGAMw6sAwDZsJrAdhFM9rPGhd4904Co5oVuCZPV6kD40Ec6+9W8dBTBsfdc3nkpvnB82fp2RPcs79dHgb51LA9ofsDV6vut5/3PnxcAmLVBiDqgevDaJLkYrpuQxzcNwN8AWgIgRbB8loEBzXDwl4cGiDGft58SCOWGedgjvOJ+bPvgRkiuA+ZjzhnQQOiFNVbloa7l/fos0LdO5QENgEXlCfs8Qbf7HyMA3QVjYihYhLENgjX9y/qwxQmRU/asfd0ZcLU2CHVGyusJQLKfVi98CS12T5f7iECkHpsMkAhCF8+nshWH2I/jXsOYO144GV/9ApAIrS3vt4YCfetQHtAA2G+/4PW4/2PPbzMgmUMi2NoeSCRxIt2/FvuxWURIWCXg357gfTjEDNIHnTRXRCpH5ugKwGl3HpMBXQc0v6WLYVm/5limj04rG762K2uYY9jBkr9+rI03NL5ZbczS/dJ+LQyoga4o77fGAn0NlwdMAOy3vl/T938KAcj121z8Bn+Y9eWQJRz8Y6kNagDh2ey5EvxjxQD8TWdAuneCCO4An1vw5vdzQMmdktwq7pLZQR+dM34+ZumAxvY1Y04uqOAJ6FsExzeto7zfAAX6GiwPaLWR1lrfr8n7f/Rl3QGzmsis+/uO71V9OFgP2gpPhgr7TGRqRUT6dyvr4aIs/pm/2zVUNbBSv6G8e5pEv0Cvec7Po7+bTtjlBRlkvAMBkDeQyvsNWKCvofKACYBrre/X1P0/oWEAnnFD1YdjhtXxR73mX10FfCHHE9pVWcGAI/S0gKsfA2y+twrFZw6Hxf/F0Pk8Ri/kpGSnMuDx5T0iACgQHioo0NdAecBUHW6QdsV2/cL7v/Cyqr5gnc42CCOcfX1VIZ/V8We9IDmTzVXwPDJiXuKXPxtDBma8+lzP4WAgKkPxCUAPE4v5GzEuMX0PYJPLhB6FJsc7MAMmkVxaYC/K9gG+F1++8AQ7Gwbgk78I7GFpXgIwFiRXOwaJZPUbiR0yCUDRk+cHf+YpwMj9HgfI8ClGPyvsSiH0WSKRuYlitLb/zHM/JOSs5C/YIC9cMQDZr/dwxgOW9gtGYUBi0wA8l304vDQvAchilFbpIBQhZ7Ejq6ZQ0/Yhil8y4j89Axie9DAsD6FX9HOK3QtROTFkviN83kG4felIY8DCeLrSeMDSfsEovAECUFsTjHD+tcB+tkFgcXKvBRir7qtFl9owmO4Xy/1G3bAFfPrZHorFNWBFwHjQAFctIghj2kBarw06If/+MM9ZqTN6DgsDojCerjQesLRfMApvoGkAWh8Ob/tgAPSKWCp8ngNQtadjmTdltvNvn3peFYhgQQgh+iUmEaUAUoXM1yRLmWuFLaE9Z+XIAWBhPF1pPGBpv2AU3kDTALzwmqo6qtVh9kJErAudABia38TC5wJgS2xIhAwBn3yhByL4EhzXfRXxYsDTJ4IvrNN2JFMxZcBzVo4cABbG05XGA5b2C0bhDTQNQLZBYH1AVsQSAAU+imI1obHyblnjG/kJk3U8BHz8xVUQAhnQIl5CyNgKAGp5LKSSCoAySh5Jj79vTagcxUaIBeRNe79g9gq+DXig4wGzy+PONfT7RWFA4noAkGXZVAhcBckJQgNgrLiaNb3paIDo1vHHX+oA9LQBi4DxJcOUPJUnTgU2NJUyROs8irGARxQAC+PpCtsFd40H/AEf0gMQkLgeACT41PiGoLOKqyrJq3K/Ya9mNyr5FusN/uPLPIeDa8Bc+w3rtyl4VFHaMZc3i9RWBM9jjzgAFsbTFbYLRmm/YBTeQNMAtD4cBKDXBTQGdAB2MGBo8SCLmEuS1AFVAJ3A/NhPt0PoCcA8bSDG76XI7aySg6JYuGfKwJHFgH0E5B3ueMCe/Y4L+xVHAOZ+9EHcEgQgwbeiEYx6jwTdz4qfu7EhEJqxGqruf/RnHIAEnxgwBM0aC8aUAYWNBRCmoIll4HTqO122QcZbrgMWxtMVtgvuOx6wa7/jwhtoGoDWh4MBJ16WN4lfr8AqI0TVV1O1fa9BbQzovkAy4Ed+NgCQUSxZCFWvCOaOFREXyUwZOPIA2GdA3uGOB6wPaOz+QPv5S+MA3OXiN9aclghW+d3IgupBF2pPqxcxGenDPxfSRh2ASiKKiVP2PaZScvAKoA0VDc6cOlIB2GdA3uGOB1zR77iwX/F6AFB9ONSOQW0frA50sILVcckWJyIDSgwPAVcJgFbYuZ3FJvAlEHbJ3IsgJLGedeBIA+AAAXmHOx6wo99xYb/i9QKg2iAIfDJEJHqj4SExbEty0gkdhB/6P9oZbBZIGiKYVb9GKaN50lRHBLOvhDxh/5EKwDUG5B3ueMB2QGM/grb7/6wHAPNGMAY+GSGUjC52VX2f2CD4+HO0gqkZfegXKgBaHkcWtS0AWii9xG1ImrLlN5XR8L8fmQD05BVrmEENmpYSP9QX+KHiqj2/82+HqqDWwnbBRfGATdzAegGwru2DpRq7Mzq2fpAf0Nq0Rl2wBXzglZ4yUAPAmDSVWDBPHQjLcgTqOZ6zUvdKHh4ruDCerox/Dnu7YqwXAC1NI/QcEQuK6WK/kdgCTGC0PYAP/KIDMBgglq+hIkrOfsaCviLSofcJgJ5AdM7kkSaCj/HqQKVIGvD4swF8bcBjmzjsaQ2H5D/6acBd9wALB4DFWWB5AVherMp4GKIYEOp7+26UF0aSfT/xYuDG7wDjrIpAERytXf2vajj7ueryQXSFl10K/ON3gIWDwCLvjfGB8Z54O+Ee4ve6513uB2R1yzsqC+twbC8HcNVhfAeaBuDP/TvwtS3A/ePAIfYFVlPq2HHTuyulZCTlhbjhETF5yxTQGgPGhoHhIWC4VSXGD3n0tLkMHXHxu+YyB+MlPwDuZs5K6FlsbCzdVO9DuKfkHM8AEkP7B8fOkwDcD+B7np42+JkGOvKdAL4E4K8P0zvQdET0b14D3DgB3D0B7B8HZka9WzrD88N6sFm+YcUjrn7E1ZDvMtF9DBgeAYaHgSGB0PNHCD4BLwLRsByAyX/ij0/dDUxuqlIG5hix7eFhvLcOVUAtyPSydAFmOQNe6EYGV/9ZESiKgIEgtbaD/gHALQC4ovY5r5KwtjOU/XfTAHzzLuCmIeDuMWDvKHBwpMoN0WQzNtAaYSs0K4ZlOSAjGG9kPjCBRwZ0ABKEBJexYAZEAU3A7Oi1BeDym4EDnjQ1TwCGWMW8MXcKks0YOyZNlQOQjcgYIUHllEzYQ0ktm+r6oz8G4F4AXwXwRd8/kO9A0wB8y65KmPxgGJgcqYJTKYpTv2CCzyddQJRDOjKivn+Deh8BF8BnwBtaCUA+YYEyAU8h+c6Az9gNHHRmrgOgmDA3jHQ+iWupCeUAvNSrA9HNwqx+muk9nJVNg/CTfrmbAPwbgK8D+PcHkIibjob5o13A3XypWsAkG1cPA9PDFQDZM1id0i1KxsWfOrKnAFXlifCFFMMRcASigOcs2MGAIfE9iWXplS6On7UbmPaUUTXQrgsVMzcRj5Folg2V5ayUA5BWYKwOxKUafnosWjcJwk+7W5F2EKvlE3xcXaNYfiCYsGkA/smuqug6hcleAnAImPbO6YwRpMgjCAVAm/yQmKTv5hNsAf/i7SyNBSl2a8Qv/4/M1yF+BZSYlNQCnnVrpbC+mToAACAASURBVJcaI7sOSEY2NpaDXLqpR+vE/OVksDgImgGgghHoYJbTWc7oJtFWc65/cg2AYvh2ALsB3AzgVv95nS/f4QdsIkT9T3cBrGtITWZfC5hqtQHInsEGQn3UDDvEDEY/ICf7SxMOrAg8T+c00JGkvHGd2DABUYZIAONzCUDppCFhSukCBsLQrFtZe/IixYQpSyEoJoqnuPWrVRAubQh83HNlZB23z7j1ywmj6CIIqUPxw2Xeu9bx2jx10wz4Z7sqTYZaDD8EIDuoE3hMVEphWg66JIp90k0sBxBcy+iPIIaT1RtEsHS/yIAqw+VSNPWQfe5tlVEk8auXgVa5BUsEJuT5uoliAbE5AGotmIAjCPnR9xDG3TQernYAUupTdBGEFMf83OkApHG+XlvTAPwfuyrgSZOhas3u6cwTsUBVn2gTwyFMi8wjHZAA1M9fYGHDULJD1m8Cpa8fRxDad+l+Ykf/3XNvd11U+qiL39SxXevSsshdDFvgbI1O2AwAtRZMZzTBRuDFjxe1Xg8QEIB8yyj5yYIUxfQIkfkIRnmHCM712JoG4FsdgHHp3ACoMH2G6jM4lWzoQarSvwQ6MSB/vporVaFkh+mCLlpVR8Z+dqDZLoDOpHSiQeAFDkBjPrlgCHgCUaFifg67H/9uYjn4Ai1vpTERTAASBaoQJBAKeNqHlL6mwPDZYAOROag/EYRkPX34MwHIvzW9rQcA+TLpI22G7EcQKlJGsYIJhC6ClUMiXfBTbFUQAej6nPS/OuAl9pOOqIc2BLzg++3VmWgIEUz82cRuCAtLIHQQm0gO52uOAb22sC3JEWgRfPpZf2sQBQIgLydPEIFGwPEj8MlF2bSbsulghLftqsCXq9HGgHysznrGgi5qzTUTFH8FLhAUn3hIJwCN0HLncw37qaF2zoYvuKNivmQIuUNc7GvWt6sHNs26twA6vhyq8NEMAHlyntFrDCcQehyaPTl+FwAbXDcmAKMRThakEk8Q8kPg8SPL0qzLBl+A9QCgR6uZGs3vfHz8TtBZvkgGQrEPBVAUg2Sij50QAOjiVKI3saADJRm7dSLYWfSFDkCem/dhZeMy9pPY5QvSDYQyUJoDIK8qMezh3wY6fSL49PcGgCAA8pScJLIgAUYQEmz8RPA17StvGoBv39W24eREiBoNQSgWNI1HBkdgxJSw1AI+dFIbgOYmkjimQ1r6XXC3rAbCHycAgytohf8vsB/r2KRaRq7zpZ+D37HMX0s3DDcCUGLYaw53MJ4YUODzusqlGCQAOQCejuxA8UULUkxIwAmMAp8Wa3qkN/R9W+sBwOhIEPjk5SLr8HeKFbTQfb77csPIMHGl/4MPbReslPhNe4+MiTpi9AFGV4nI7MfvagNQLh/pfrYnDAS8aJQ42A2w4em2cAyWQUuJVQTGWLs1uL7DG9J1RjhA+jvYk4t3KXeMqijpzrud4At9z3XtP16yGfjKZmCGooYh1tZzvv8xXPFl4PoJYC97k9FlwZWD+Azi/deMZWeP13eQCGEyoERudChIjbb3mJYwH7V0QIKuCwj/gfMj0asn2I0FXRSHXfL/iRkNgLyeVj8ccMY//J1fyxzTAXT2+xoQViKYD/1hDqLxPiYxTgSvQrphphG97tz4Slqafnj7uk1kIQDZrvWTw8B3jwEW+RLxPgSiCERdPwPR7+wCPg/gulFgfruDkOMQkFc5x84e708JAMmCuRNBXi4TIg5CGRzGiBGE/D4E/C2r2vcAYJoify62i0aJSMhB+2IHoNwu0fkcjQ85pu3ack5nIBREqneYFyWLkAXIJHESe00Cyx5QyeL6F/tyEcDcrOW2n7fX8df0mME+/vQ/PQjhoy3gzo3AISYf80MQaQx1peH9wb7v2mrtmCBkIMMejp3jIJD1MsaxaMZ8v5N/67INAsB3BAYU4JL4DSo1J15AFPAEwuQHZJzkKfUAtOHLJSOQRWndBYQvCQA01cfnNopfsaCJaD2baBn79QjSTiOEP1EcawIpkq2kegBTNgHWEpOKF8Uwq2NRFPM4AqCf46/rA2U9/uVDvurB01zvAJpiiwOl3fEeciCGF+Ij11f+QkbSfMPfIzqw57mEFZ9Dl3Ps5HXWAYByHJAJKV7N+s0cCQQhwSlfm4lGZ0KB8C/rABgZUS6ZHITBSEhCowUYAAksF7cStWREyxRwtuPpOlgw+5s9sq6OaIJIIlUgEhA1edoTgHxa9HVw5jibZNF+j/9yGQA/7pbujZ4bwv2+cWB6tFo0NzYnkxFA+cvEAo43VBoEo2e+48EMXEOmD9F6xhCE8RwZEJ80VblKvDlmzwicfqy93/o+8K8TwB2jVSgW138FrJQTXBNlnJgmrjZwanow9CBP/rL9wF0jwAGWDtFyoN9PHutnIHT05mPXz93dMGQAPniJsjiBXiTbxDZFMF9NLUPQxKR5qezz1Y6/YZDH0D6GkdAkYJIvRalAdHAMmPZoYhb6NhDWvEyf/ma737CXN7R1ZC7hUbPgcFgqt/ZZjADnM1xqEVhYBpb4CUk5UsL7jQvj///5buDrLeCOEeD+YQchYwG9VIfyg1NaZszFiCH6DkRGLze5/dgk8IMWcMCjdCiCzR8od1B8OTwvJM8JEShFut1fzMhi+eRJr6LI7hYP2M/xVLwKNoZjUTwRMAQQmYyhWGQxsSADOflZ4kukj7PhZ75bETjBpkAGahMkcrGgwhsXeCyBHBj1wmOBQwvAwqKzoFeRV8ZaerjKYAuirmPY/o9X7q5Cyr7fAvYMAftCPGAEoYlBiVtFwLjtp2U4irj7yOANbi+crHyrfCbTquJV44O0F1FrwQGIMZFqdQDyP/gGSZ8TC0ZRRsOlVzzgasd/u+zpMByLehAfCgMQCDyGZJHFCCgLZ2f8mgI5qauEcVx9e5vACTgCTwEMWr5TdIpWKJb5MvrnoocDswvAPAG4VLGg6UKeqmi4iuDz4er30oX0FP7u5moMvIf7W8B+jwlUNAzFnlZCIhvGFRCeWzrgXSSIBreXTFZSgVLHAp4UHOFuociEEsn2PJwl/XEk0dzfSojeerFg1IOo5BKAveIBex1P67lgUzgWQaJwLAKRH04i14ItgDKEtGsRnWx49b2Vkk9wUefTGrKCF7R0JxZMqxN8cmPAxWcAcxGABKEAKPA5u9lEaAbCmKMI+sDN1X3z+ro24wEZFc0VEE64ABgT180PF9ZdBcDb6JpqcPtPk+1ACbmKjJnllwyuILunEAWjZHkBsrsRUnfD0qEiC5IJfyisgMhzWhcP2O14Ro4WbASgAMQJ48SJwchmBCDFa8qpyBbSP7OvU4PQ0p2W7+LSnSJUFOrI4V7w5IoBTQQTfJ6oTSYk2mQcpGRyH2syGjIF6EM3V/fM++C1CfwUExhCsmzCaQT43lZC3e1hBpEHh36XEqrB7Scmq5dV0XZxmV8WuDFzAF9iwhow9seAGoBcGtKjqAc+1l9rLb/1igesO55ysmCrC8ei6IxRMAKTWNBi6Xw98xNTFUi0jEcmpYgRAPhddpVi9OIEPP5cYD4CcLkCooHPwaW9kV+iwWrQHT8uA1fd3F7DFvgUHUP2k8jTiogAqLoxFpDgbMj9jXSuN7i9dLIdaxzBp5XVBMIMgFEnFAPKT9qPd6A9BIGI7MfPmf4U+40HzI8nWgq2PBxL4FEkjKJixGRRFyQQPzzd1iAUzCAQas1YOmAEoFjwkecDC/PAwhKw6CxIkCXwOdVJLxTobMjBdyIgfvimNvNJ7Evf4jWtdnRYD1YNGVuG93VWuWs4Jf+mlZCCZxwP/cnJ6mXVKk2+tK8lQQVHRTGc64SDAZB3Ey3JcxyACkToJx4wHl+YwqloGDICmYmTFgMQFBET8yyYzyAG/AfWX8mCGQg0BTRoHwt9KVaPE/HQ890AIfgWK+CRAaMRYnVdxHbhdY8Wslw1V93UDsmPIj9GxgiAioRRMIJNvoti+SW/Ikd0gwAU8+XxJcbGITJPDvI6XdCFREFSknTB83xka40H1PGF9dnycCxFwygkK0bASJQSVAbAYeD98xUAe5U3jKIwBosSgNsuABYogl3/IwgFPrOIg1Xc4ZrpAsSrvruykl2ucykapkMMh4CExD5DwJfWAYAxwk4MKPAJgOIjGSEGwuCakRhemw6Yv0UUwRf7L00L9pnsNx6Qx4feY4O8pDEcixOjsoTKKpMYjSFYYjOC8Eq3Wnnr0YYS+0Tmi2HysrPGLqwASNYzBnT2Mz2QD91laxLB0gs12GAh81cf/o/OcHyJ+qj0S/zxnhUZbSyYWaL8+Rq2S29wowiWkJPan4MvgrDDGAlRe7KIywDIgR3meEDWg9HbJgApNTkXo8o0i7oVgxnEgFr8F7jEdnU5GvqfJQKQKyEOPlsNIQvyvupAGHS/Okv4qv9oh+PHxMLk8ggBCRxvAmEN+AiEzz2iQfQBeNmkh4K52hJBKOaNe/FSLobLRXCz43rQnu2yi9oMSMDxs2jo8303ERz1wsCGZECF4kd3DwEYYwJjhoNlQrgIjlYodbBPrwMAZfEmyzcIv27gs6XDzC/IR1DOgA9a6DRz4wZAsZ+LYXvQYsHoD4ziOFklna6YD3+nnU6dZ7bGDAcBUImIAmEUw/zbJ1i/scGNDJiLXmle3RhQ+l/aq57gUQCWzwwBKPeLsZ/LFrGg/ShRXAe64Ajkv30kALAjF8R11Dy3K7KRwJcsUTaqWScARou3w/INVnCH+A36n8RvM3nB5XP4oD6DATBYwGb5ajlOLOh6X8JaBKRG77+7ygGYp1bn+V25/01AzBnwQ1ypanD7KWfA1QDYC3zJIj7KgOUzc9nFbetX/r+O5biwNhyX5uSEDr5o0xsJwLp8/m4A7GaJUv/j3/5+HQFYJ3oFPPkho/hNeqBcMkcB2BAA6XrxmMBkfFAci/m0JpwzXw0TXvXtzrz+PKc/Ml/ugzM9MDqCAbz/keVjjGcQA/YLvjoguo1mRslRI6RwfsiA5nqhL5D6nscF8gfTdfxpS+/hLzvWfzMQCoB1Fq/8b3VWaPIDZqsRV64DALsZHVHs1gEvsqFAeBSApQC8pHK90Oql4UEAyvCwNeGcBXNLOPMLftgZsI75ouUr9ousp2TEyIJ/sU4AzC1e+WIFshyAHPZREVwItrrD3wGAhibTYBhxVpe/xePyrNBuWaoNp3DgFwC81O+RAepK/a5Lfe51jxr7JwA83nPXYgq1asl0yX5N48+f4VEGLATlK1vAo5YB1gBSRmsM+NFE57lcfPD5pPFWCJImtyvGgGfOAacBYO59zFglgHgPefZsXV6/gPXBYeC0RVgyJNOGYuJjPka9eHWgjL9bWzhWk0/n/wPn+k8bgFNmgYcsVflZnBRmIShtJM/m7JGibGBoOIIez9wKPP4AcNpylfbNlGfdI+9NjBjz8JVzppckZuJ+dBw4aQ44drk6j1LIY9JkPD7P4s2lwVEGLHwJnncscNIh4Nh5YMsSsHm5ndOu1BGFThJ8/K6JrZtoslST2+XHA6ftB05ZAE5crgAups5TfaL6EF+UyIif3gAcOwtsXep82eIYY9JkXpMgMp/AeZQBC2b8OduBYw8C2+aALQvARgJwGZhY7swEzbNa88IRvAVO1qkF91J36DNOBE7eD2yfB45fqphLnevzdGeBKBfL8UX5/CZgyyyweRHYsFwxYHzRNK6oetSBMDLjUQAWTPqPngpsnQK2zgKbCMAlYMMSME4ALrcnR6JYQIwsoUnjpDRstOLy7cBJB4CHUGwuAtuW2nUDVH1EFUhycSwWjGD64mZg0xywcaECoI0z5P3X5P6nWlHdgHgUgAUAfOYOYMtBYNMssHEe2LgITBCADkIzSJZXpCOnIg25uPrhgnupO/TyhwLHHwSOmwW2LVSik2pCrDsQskzNIBGIpBdGI+VfNgMb5oENCxX4yPRjPj4xaJ0+WGeEHRXBDUz2Mx4FbDoIbJypADixUAFwzAFI8KUJChMV2SUaAGc1cE/xFJef3FYRti64nkqWDrqqEhbrsm5zvZCdPCd8nHzJOLZuABRz9hTHZwPL7LnLnoNMIY2VyaKcjtZLHOAbNgNPngKe4BacfGF1pnydD+hphQ/8XV5UiEueLGnDN1tWXj/3/4cTwAUzwGPcRcFJiDpPt3FLmf5vjwE2HAQ2zPrEzDv7OQg5OSM+ScYQy5Xbo8465u/ZfLTJ7fKHAdumKxVh8wKwealSE6inEoSy2MWCdbUHIghv3AqMzwHji9VLZuDzD8cXxxWZs5c7apmW0fMBnIHKn5X7d6I5npvRz94O7LgXuGIReJSb+Xl1tzqflybwRwqf9i97BQRWomWJQ7oZVFtJoqDX/b/oGODsvcBTATB9gsfGqmzdjtVz+G+PAyamgYmZCoDjFE2anCVg1CeJwOMnTRB/DmUINVkkgia3y08BtkwDW+YqAFJFMD1VAAw6XG61R31O9/fdrcDYPDDmY0zjc1UjivBuAMx1QdMB+WAYXU8dhEU16dOSkppbcHFSrng8MHwnsGMPcN5ypURHp2xMIa7zDz2z8Gn/kVe0YomO0wEwBYKujL7v/zHA6C3AxfOVh58g5AsZxx4fZM7sf3h6BcDxWWeGBZ+cMEFiwGEHHRnDzun7ONHs/djkRgBunql0VDOSHIDU3cxSD4aEajhFXS4H4S1bgVGN0V8we7E0Fh9jVDG6Obr1LJMRwn+kOCaTEYT0dsfqZHXl/p7PrLi9wIY7gO0H2yAgCAWCWCowKrYE8nMLn/a7PQn9X7zIJPPkCcK+758y7x7guNsB6l98gZjLLYet3Ay5n0sv4R+fCYxPA2MOwLEAQLIDPyP8uBg2cRYmzFweAYilKkn+OC8/Fdh0CNhEA4nGA40kd6FES13WLO8v1qHKAfh9B+DoYjU2Ak/js/8NAIwg7OUb7LCC+WAfB4CpBJoIiTRNRmS1l13kqWh3Adv2A8cdqqp1MB+aIOSxWv6pq5D2kkIAvt8rF7BLJksN/jMqfa7v+7/Ak4B3A6ceqpasKMq5akAmlLWY37t8ZW97PDB2qALg2BxgAFwANEGcnI5JcrDZRPlkaXL4u1KJUAfAjbTQ59x6dSvdLPXAgGYshZWR6JIRaXB/NwFI8C1WwLMXzMeSwLfcXuKrA2G+wrLCDcN/IIg4ERRn0qvyySAQX6mG1XuA4fuAbTOVwktRRr2MLCoQyvEZ/UY/WwjAj3jtFJZkU79g1ghkgEBf98+0Umb/3A2M3lkBl/fOcdMok2EjkZyv8773LAfgHDDKjwNwxEUw9yailpwdxBAEYhBbAuGzG3aKkQEJwAkCkOCjlb7Y6SYyf2UwlAS+vKYnAXjfNmDEX7DEfA5CjUcsnzvbu1nDtUMmCDkRZEEyGdlAk6G6lQTSa6m0MP6HuY73AxNTlcJLZ6WOJYC5/CNxLpHMgdKIKNl69Qvu6/75AjHOiTU87gKOOViJb748BKCWrnK/maTA+58AjM0Ao7PA6Lx/xBAupoYDC9okBRAmPdBZ47lNA/DhwMRsxX7mPgl+SrmK5EaRNRslXFQ9CKB9DkADn79cZtkHFkysJ103eBbqlh97DpmTQTYgk9VNxu+xYbXKU3lhFoJPOgdFGY+lPkgQxokkgF9Xgj4AvfoFs84eX4Ke9x9fIC+tRfDxvvniif358sSir2LCj5wNjBKAc8CIi2AxxLCzIAGY9L7AhGIKgpATw4l8wToB0JjPrfTkp+SLQbHrOqm5jNyajS6VCMIpApDAWwQ4LrGgXqzIfnq5cv0vN0ZXHTInME5GBNLb1DGdOYQsI7AfGKFjlgqve8wJwG4T+fuFAFytXzCLb+VgWnH/fIGYfc46Hs7iHC8ZkPcdXx4VfVXJw8+cA4wIgM6AHSLKWZCTESfLfg7WsIyRF3ckiRQ+HACXkwHptyP4KHrpJvKVGnOhRF9eBF9wE0mUEogz2wC+WGI/vVxiQQIxAs9+rmHA6E1YFYB8DJwQMZl0OrLZ++i7sfT8zroYHLS9df4RACWKxSZvLXzG/fQLZqk2gqn2/vUCUQ9UZaM9wDaPeSPrC4A5C1KV+NITKwCS/SiCR/jRBDlLmP7nHynsxno1IPwJSyRpbiMADXzuPDYfZfBTEoAmcuVQdiaW0zwXwQsCYDYmMaDA1wG8TBSvaoR0G77EcGSET6hjOvVApfRPAUN0zjr45JzVcSqiTxD+VeGzXku/4Nr7JwDJOkxFIwt6j6+RqUrlkO4bXzp1gCAAv04AzgLDDsBhKugLFUvQUhTwCEKbnKCw14HwJ9cDgGQ9WegRgDI8XEcVEDvAl7lVlglAgi+I4CR+Zf1mLGgMmDFhBGFfDCicRJFERviSABjLS7FC0MFKMU+07wOPE0kGvaoQgGvtF9z1/iODkwn3VWoEXxres5ib9xx1wZufBAwLgAQexbAD0JiQwJOuJBA68/H3Zhk6+3CifqqwWNMKN8wjKgbk6gWJgC+FMaBb5vJVmsUbV2vCqo3cRWZcCIACoax53+ulkqNd7iqOcU1WcC9cxEm5kQBUdZ+sTnSL/jEtTWngi21jhJNJBivZBukXvOL+yYBkcOqxKjJ4AGgxzMrBVwdAMmHrZOAYF2l6y/mwV6xD17zmWo6MbRyeWtOHwxJ91IIhr6rqZS70DPPLXDVUrfBwzHKr1EUp6/h0T/6L/GcCqslt4IhoTcwdAqDSs7I60WQH6R329pHuFyuXDJmEjuOSbdB+wSvuP5bGUjmsA5XoUvcvBXKKAQnApUdXwah0b8jXR2YzJTsC0ZHB33FL+2yiX3h/1YeD1fFZGT81g/H6yqkVa9YEpqMhTADle8erHA6t7Mh6j4ZBXdBGjFyO4CSIm9wGBiBvgqxwIAJQlXIyEJLyI/i0SkAG/FbhaEr6BXfcv+5dLKhCg4z1C1HEBJ8+BODQGZXfk/quAZC6ketAZEQCTWAU8PIJt0fgwHzZvVWNaKqi7JLOmtDWFy42g1FxH/XfqGkII0C+a0tnDkfsGxQjn3VPsk7tXmuy+Xp0JhtoJosAaFcUAJUYKiYJxcqHqKAH9rPlG2cMrmCUbMX9guMLpGTcCMKDlZGhMK8IPnPIn1X5PA2AwegwEEYmDGBMjOI5whGQP3NPBT7VJlRNaKvF4t2IWHbDErtDlSk1p4lJ7/zd246tglGZryIfrFhQ7pU8WCAX0ZENG+57U14Z4YrCeLrSxXdev6TfLwrbxT7znMrfKQXfHLQCnyvmRIv0Q3430ezMmL98P393G3wqz6am1NYzzoGn+svqRmTAU2citctqAX/2EI8F9ACEmLHXLZGoFxtSl2xyK2bAYwrj6Xr12+1noL/jUTCD9vvFrn6u0v1/nvGkaoVBAQi0eummMAuXQHMWJAA7gCixG8U0gFfcXdlBKk4Z6zELgAJfZEKrxpC1xOIl/+Sk7jkcdYlSco90y9+gK6vJrRiADD0piad7RuFo3udNCgft94vCdrGXn+tujgV3QAcHLcFnroelivHkchEL8ue0uQ74S3eubAITS3IQhKkMRjBMokgWG3L//2z3VSnP4VDgQWxUEEUxAZFHL0eR3HDfm3IRbDHkBfF0zy4EIKNhSvr9goGEBdvTz/MIYQLQdVsTwRTFDj5jQmdArRDYJQNDSs961R3tPhx5NXoVgoxleHnarjohgLec3D2HI492yQNvIwvqO9fJm9zKGbAwnu6FhaP5pFuMg/b7tTbpBdvTz68cz/zI8azVj8iAHTqgmFHXDUB89R2dtaC7tUGw4kDOgFb0R2wYRDGZ8g9O8aU4XwPOczhiwGlMjqqLWiFYGu570wADFsbTvaxg8nkow7E8nM/atfKzln6/1mS4YHv6BQ4+Z0BbqHcd0NwwYbVD3+1yWhXJxPBrbq8AqE/XApSqAxiBV2MZ/54DMOZwKE00rnDUWcR5KiV/brjtSAMALIyn+/mCyeehjIYp6fdrvVELth8RAClyHXxmhPi6r1m8FM0ucgk8+y4RHC1kAK/5XgW+2hZYofafWcPq1B5AqDqEYsQ3nepR2gqhV2yiol1COkD0C+aOaoGx4aL7DQCwMJ7uVwomn4fm7VrX2u/XAlELth+5sHPtN+l/Ap6sX2dCsZ/phZkIJgv9l++1wbcq+2WFv2NXIjNKAPzuw7MUAV8DTuynFIEsQy83RgTAhiv+NgBABaQOGE/3mwWTLwAqHnaQfr9GnwUbARgDNBUlkpzQboyYCyYDYdILdf0l4NduW9kGoa4geNdazLElKoA3Prx7DofiETtC6XvE7hGEzJlpcis3Qgrj6d5UOJoYDcMglrX2+y0NPtl5UZUjkfx/Hqbecoe0OZzdF1gHQrln9Bhee4s3f3Zxm4MvAk9VSFdUIw0i+Q2PaBtISiBSSFgCYMjMW00MP7pwvvLDmwFgQTzdHxcOSGvBg/b7ZRZByWYAlOERluKM3Ra9CKWc0q73dTBhMFT4ZwIw9l5Lrpes+HjeBiGCUOKXeuBvPcKTiEIOR0f+RhDBMYi0Lhea4GTaa5NbOQAVDzhgPB1La5RssV3rIP1+7yy5OAADoAchEHBkFbKfGRpiweAPtMs5IFNokyOGk/7rAYC9OhBFwNXVY1at5tftCBHaWVS2AJdEcEinrDNC+Lumiyc1B8AB4+muLARAXTDCWvr93lR4/Z0Xt6ODFQkj8WtumEwHTKDLQejAfN3uds/dfjoQdatGLxb8jQBAYz6/boxiFgAVudzNIc2/s3xLk1szAORoB4yn+2DhaATAGJCtbpkCYq9+v4V+aBgAQ4i66XtaC85YkDog/zdZvzUgfN1N7a633Xqv6fe9msDIHfNaB6Ay2JRE1AHAEDIfI5nzZCLeN4Nbm9yaA+CA8XSsul6yqV0rJ2WQfr+splCyCYBR/HJyKX4phs0PKBZ0lqOYTpvniAiUAmAd+HKjo1cvDjHgr+3wPJQsVCymUZrPMuRsRBDG4AQCsunyJtFGHwAAIABJREFUcc0BUJlxQoH62q8ST8cggpKNAFRGwCD9fkuvbwAkyGgJE3C+Nz1P1q9/T3F1EZBxvZh50s6AEYC5yyUHXt5/Q8zI5/KrAmAIkkipkyGPYwXz1aRT8v5ZO6jJrRyAvKOvNXlLazsXs9bo/ztc29Pohgotp5J49Rcj/pzfIwGS//3OM4CNd1dpntQpFUmjEH4LYIgnyn/OLjL8FeDGhwJbNgFjI8DIEDA8BAy1PFK7FSKf43cNKrvHx+8C/vmxwMgmYHgEaA35J0StpvvzL/nP8RbLAfhyT207TChgDRiu/ZL9DsfWNABvYzbhCDBKoBAk/pEobGWTqp819hzQ1/0k0PoaMDEJbJjxVZFgDad0SaUO5LksWVj+XScDmw5UEUDJ6U4d0nVbC91S3ovfVHp5al64cgC+k7mZAP768KCA0WD3A/ieLz090CDceVmlAuhBljLgrfcAw6PAyDAwPFwBkCAbItM4a/FiNtERjBl76W9ffD2AbwJDdwFj+6syImRXrd5Y2FjIYcnzWPLEqnsfC0zsr6qBMQmfIDR/pyJ6xMhKyMrSDiKD2xja6TADTt0/AGAs1KcAUCFrOLF6tbtiRVFavT/wuMCa7MfVTlH098YBeBcwNAIMEYAUlS4uBULOmK3LCnwOPANlEIOSoF9+C4DvVoWXhvdWZVOYqWgi3vOXDUQhgieB0EElViMYJ08HxqeqnG8D4IIDkAzo51DKQQJvBKUmKACzbM4+5hUivwrgiwC4LzvjmgCh6nBcgiMTcv9Abo0D8E6g5eCjfpUA6AxoQIzgi8ALmWwC4z//DxcPPwBak8DQFDB8yJPpPZHeGCyC0KN5DFCByfh9/+OAsekKgEzCTwD047X0SCPM1IYQjCv2E/MJoGVwUUQoPboq0MdqkWVn7RtDDMahB4g+P6qhXFpjVtkDtRGA2nKjos7IyOyHFUbIrXe0FXsTuzIYfNb4O2M3ATGIYQOmPn6hG6gi3eUkQQAeAIYOAUOzALMVh2pAlESqGFBAXAYOMQVjxll03iO/yYKRAT0FQXkwZkjp1pz51LO2XAT3KtD3AIAwj4Wg05kfiuUHYlsXAJLVnP0INLM0OYFx78AzcRySeTsw2AJueI+Dj2Fne4EWKz5MA0MzDkCCkAByUWqsJzarEanzj2zXwjEGFHuGY+pYsMojzZL1G9EBexXou339IRBrC3lJGmNDuSHX+w7WC4Cm6wWxm8DngLTImgC8pBcGBuTXf/1fXnyTugnFwxTQOgi0CECyIFlsvvJfEnh0mhsYI/s5uxFYi1xZof7oOqSAawwYjRGBzYGXbtWXaCIrlvHUagX6SP/ruMVYCEbEqECXAMjfree2HgA0ESur1/0vtnNwGSsG0RsZME20/+/XWH6Mugk/yngPAGy5GDYALjiIHIgRUIrsZjM7Ax+BSx1S4pfffQVIep8dL7dMDsTGjJB+CvQxTHmdtrw4l0CovFruC2NOe975egDQsCXRK/eK634JhBK90q2C7I1i+Gt0jxF40k1cPJAB7UP2m3MGJAAFQrGei9iUTH9yBUDTHfU3B5+BOIKQ43BWtNtPcWIOzEZE8FoK9K0DCGNxLi3FqaKA9gTgeoFwPQAoI0OulWT11oEwiFz7cwbErzNxWtEYBB+VY76Vh4DWrH8IOoGQ7Ocg1CqMRLPltmxvs1/SHaP4dcAJePYyyUCRIzrTB8tE8FoL9DUMwl61kQQ87Rmy2PS2rgB0a1ci18RudEJH57OsY02y/+83/sZdBKr4FXQTApBvprGgQCg9UEAM+h9F6ugJDkC3gJPBEvRGrYoYCBX9IxEcS5K4i6cZAHIw8oXQ4mLBb35YH5d7OekadtTV1UZSjaEIPH4nQzYNwgjAHNwDuWGYpZc7lzPfX1cQur5oBorfzDf+zi0yVTuSkuxBI2Q+PhQDIUEnMLo1TBCZLufGw/ixbQa0KB8CTODjPohdY78IQmfDjmW7Yo/doAX6GqIiAtDHaYswSmeMubV81kp11L6hy2PdAcgblfslOKC1IiKRmyRxZgV/8++DS8BFrxXi5Hd/U6MeSKdqEsEKhpBRsgRMbAtuG4KU/+9ry5brzP/lPVMv1EPOQegharrVcgZUhVHFxNPcp9VFtlOWkL437C0WABWypFRGsV0sb5Hn2zYBwvUGoKl10v1knDgo0y7XA8Pfv0UACnjaK33Co9gJQAOe64FkNvtZAHQdjz9v2Nz2GSa3jYej2W3KGuZ9ixGdIVSoKT13B2s5AHkGheST6qn0erHv5AIgAAU+LVfw/wq3CEAV7clBKDDGZG9/5oVXx/oyYARczcqH5GyH8eFplTawFvAtrtXLGpNrQDGbejupB3omlIHQGc/ErzOcGSRs8zrhAbbuL1Tco/JfbLlNwHOmi2kIcs3owbdwNpYtynDQhsFcgvuG9/YapGFvYX22zZcAU0/GwA2LJ/4AmGF9mwEbBu98Y3cMF+uAGQCj2HVp3BbPuo3IlqxAy5wHAq4OfARmEBXGfNIBa0BIsG0ecwC67merHgRpZLwocrWaovuTxew/V0txJQ2DWeae3WAGbdhb2DB4+wRw7w5g8Qpv88liyGtoWHzMi4C9fAEHbBi8kwUKu2xNAdBxaGBLbJdZux1LwAGECYAEm6wyfpelJrEgFnRDxESwgyUxIUsVMwjVy5AYO0bG89Auu1/5BF38KqjBHlUAYXsteNCGwTeWNuwtk4JMkrlzGNizA1hm69g1Nix+zDOBW0aBeRZZGqBh8M4emfWNADDT+zqMjQyESdQFHfDbZECCLRgdHeCTe8CBaKJY1rDnBRCIAuGW4TYAZeFG8ZuMkGiQ1IEwGCJtHZBmy1obBsvVMnDD3jIAerti3LEBOMjGcOpa3WfD4ic9t6oveDtLfw7QMHjnH6wPAybW6yaG4+8D4HIQfvtDIVtLejpBFsVvUI7NIBHw3DUjRzL3rDVtsYPOkAScuX3coNDynT2VYJCkn+PjqvUD8hVbS8NgjphGxcANe8sAGNoVY/824BCBtIaGxRe8pLKZdpMkTvXiJ2toGHzSNHDPScAyq3er4qPyGaNc7JCRXWLT2TjwGmCOeQashq6+qSpZmp8vojQpheF58ncdZVjLnjWPHr4VWKTKxrHGUqq97qXu3jp0wPy+eEC/DYNZsZAO6IEb9pY9lNCuGPcNV830ZmkM9dmw+OKfbdcXvJMPdY0Ng0/7GnDXKcDMccBS7MwdKz8KCAKQIgY0MWGCtr4TOHAasMwOkTqf6unyuLykfd254nkb7qsw/iVg7jhgmSX31Vpd9yRHeLx+zRhjEGRbB6wDYT8NdymyubzDzCCGfpMJWfSRYfr9HP/aMgBm7YoxNQHMbQHm+ID6aFh8yS93tAvGQb7da2gYfPoXgbtPAqaPA+a3AEubgGU1RM6B060fgkRoCzj+TcD+04CFE4BldZdRc4/YxlxgjJMewSiwN1zWfsOngdljq3EmY08vm5i/7j5yIMqpvupKyGoNg9lngYosl9wY/0dZdrMzYl8Ne8sAWNOu2MA3zw/F2CoNiy99XbvftrcLriz6PhsGn3U9cM9xMODObQYWCMANwPJ49UliuW6SaqqBn/gGYP8pwPyJwNIxwDK76ahDeN6uXYCuYyABkEza4LbpY5WEWdSLxjF26/dQB0SJ6r4ByAN6NQxmkWcqrnQ00x1DEDJFjR8CcNWGvWVPp6ZdMQ6OVOCb3wAscPJ6NCy+7PerkP5Q3tBY1PrT9tEw+JwbgPu2AlNbgVkCcCOwtAFYcgAuiwWlM/XqDjMEbP9t4MB2YO54YJFMo/5gHIcALV1TRZ17FXOhPtvgtvkqf9H4kvHDlyKK4l6VzvVSBF22uwjOb7pbw+CfcwBSkyeFEHAUx/yw9JTyEbo27C17Ol3aFWNuAlgIn9QxO2tYfNlbK6MvaxeMRYquvL9rTcPgJ30TuH8LcHAzMOugX3QALo21WXBZLEHwRF1OgHS2eOgbgIPHA7PHAezNu7QFWFZ7JnXJ5rnqxHEulvlzwyVNN3+wern5Yovl7SXLGwvn4riLWO4fgMRJXcPd/+pmOymELEhRzBxJAo9gVL4kwVnbsLccgHEpWi3epocCAMeBRU5eTcPiy/6qtl0wpvhA+2gYfO7NwOQm4OBGYGaDs+5ExYDGgqP+ccAkINaVpB8GTv4d4OBxwNw2YGFrxYCmV0YxLNYheCXau7EhV3ga3Lb8g4+R45uoGLADgHWqhsBXA8K1AZADyRvuvtkBSArh+i9DsQhCOtf0UUgW/7aiYW/Z0+nRrhizoxXwFhyAi5y4rGHxU66qAFhT3rDSIVdpGHzencDejcDBDcDsBDBP1uX1CMJRwFiQIBzxieL3KIY1YW5MPOxNwLRb8gs0aghAss1GZ1O+SFHsdRPt0i/PLHu++dFb/x4mXfhcbWxhfCtYMFr/uWvKxfDaAcg7ipPCvFOVpuo3HrCjYW/ZA+rRrti6TS6MVQ+L4NPH2nx698GnXF0BsKa8Iab4dFZpGHz+JLBvApieqAA4J8CPOQuOBBAOV0CUYbIskRkAecrvAdNbXc/aDCxSpyT4CEIyTgRgneiLIp3nP6fs+a4A4N8B8/48CUC+ZGJA29fpuLmxJW+5h5kNFg2jiWHSi0r0Uv4pCoZsxw8DUfnhd4Vk0XGdGvaWPaBV2hVjdjgA0BlpkQ/K9bmn/HOVqtClvKEBqlfD4AtmgP3jDsBxB6DA7tdbcvYzJvQJkii2n4NOeMpbgJktbYPGACiF3wFoEx1ZMNe/4jnPLXu+KwD4t/5SO/iMBcXuesHylyACMBPDgzGg7opM8mEHIGdwrfGA1rC37AH10a64Yr4APvvOSdwEPOVbKxu+K2pdKRTmdI3dqkPPVgbSTBGAY8AsATjWniBdx0QxJylOFCcr6HBiw1P/CDgU3EgEIMW52M8YkLolQRddIN1AyKWiBretf9MJQN6HsaCPxe4rvgDdHOcOxDIAcmDFDXvLnk4f7Yqt63gEIB/Yoj+4p9xaAbBHeUPM8qF2aRh84QQwNQYcGgdmx4C50WqCFngNsgSvQ+Dxu4MuiawhwIAXVk1O+e/A7CZgThY1dcno1nHL2oDIyZULpBsAFTBZ9pjT0QQgn2V6ufRicS8QRgbs5ZYpEsENDejBfpoLrwAOjgIzZMBRZ0AHoUC+SOA56xJwNlEyTFw5FxBPeWvlzpnbANCdQ1eSGTRybMuydgMggVBsKmtYoC6Mt8znZxsZMLzAxoAOvsh+ydDqtXx4FIDl8L/omQ7A0QqA82S/ERdTI22mNfaTuBIIxR4BhKe+y61punQC+MytI/Zz/c9EuvyBeetLAfGZ5WOMZ9j2/gqABB1fMLsHAVBqhfTcyH5d9MByEdzs+B50Z7voGZX+NzNSsd8cwUcG5ASRKYbdHRNYwhhDIHRgGmO0gFP+HJh15jOXjnyKblVT5Cbfoq+yJOszF8P8+VnNPlICkMAzds/YLxlYznrJwIpO6egTPMqA5ZNDAB6iCCYAyYBcBqTRQ0e4630SxZyQJQIvMJ8mSeLrYe+p/GzGfnTpEIBy6US/out+K1wg+brs88rHmDOgAVCMnrEfxxMte1Mt6j7u9zzKgIXzczEBOJIB0BnCJoqgIfDEhM58SWzJEPGJe9hfVH42un/Mfxl9bgSiBySIBWnAJBDGEDAB8QWFA8wO3/a+wH4+rg4RLPYLul8tCI8CsJmJMQAOuwFC9qMI9g9Z0CxhZz65K0wfFBPqu7PEyVdWAOTHVlTcpxhXHZLz1w0ZA6EDLhkCskRf0sw4dRYC0PQ/vVSRAYPo7QCdj7GqVOSMeBSAzUzMxZcDMwLgcKX/zbv45SQlHXDIgagJc+bjZBqAWhUoH/Y+B2D0J7rFa6LYDRmzomsAaOeKqxEvbWacHQB08JkRIteSXiSBLYJOLB+X4xrzAzY7vgfd2S4RAKkDDgPzNEAIxMASSWF38WsgkuXLyXTRSRCe/DduSZMBMwe6ObTd8JBj24Aot07uDObPP9XsIzUGFPs5+JJ/M6oT4buxHv9X7BeY8KgOWDg/Z58GTC9Xq5FxTXOw9c3Cm6k5fPcjgbHbgAlvVG2tH1T3Oavoq6BlniZ+12n5u/2sDbOvasqoFg8x2Lnbcd1GdhSAhXN+7qMrAC4sA8sORJ6yHwD28z+Ft4fdv8UyqUDrDmCEBcpZ39kLS6aq9l4D2rLb/KYsFTPWdfbvh86vQu2s1K/K+zIjTsXIVQ9a59Egs4Y6sZfIA/EcSp/jEXv8BWcAhxaA+SVgSQAkGAMICcwVlNLlqTc9Gbv/HAA7MrL4+f1VlXwrUq7SvCoyGcrrWpGhuur2fNGYwM8YT67hT3s1LaZvqn5MLM0bzmHMmIFSgdFNj/mIBct63NhFZwEzDsBFgpDPeanNgATfCtGsX9TIKwNrg9tuVkhlng7TI/YArX1VkXKrEe1l2SynN1RCsFJsqnQv3UIMxhwIRjU5AGN9QUteVz3BUAvahuNgjC3HxLAND7nBp/cgONXF5wCz8xUDGgCjKPbvevlzcKUHH2ag6cnYzepYBB9Zi2FxDJdjoXJv1WDFiLJ6MKqKZUzoQFTfj2HmwTKcTpVWvcxHKm6kKgoORAEvVclPD6NdzLXpMT8IYNPcLV7yJGB2AVhYrAC4SNA5AxKM9ryDPE5fs6eeVKWGZ2M3S3MQfEyJUKV8L1ZpJXpVJ9pLilmlAxWkVJHKwIhjjD9TtVXVm1HdOy/pJiaMFRWM+bo0rWl4yM1N7oPhTJecC8wRgAttBjQWdBBGESwgSiV0Pb9DRgu0TY19N+M1mRKh8niqFx3rRDsLqjgl9yaGXT80vcL1wnE252PAZCzAHQCoiqoW3yYWFIt664fUpKaREr1NPakH6XkuOQ+YDwy4FMSwgU8GSRSz0UJx3Vx/5vFNbrs/EiLRY+v4ACITww6iJEodQKwBIyBRv9vwhKzUW6z66TUGEwhDS3ezqusAyNxnJn8xa1KRPSFts9YfFB/QDZcAm78CnDBT5U8rCqjfc3yh8Gn/hGd/MsKf1+QzYJ4891Jye13iy1cAE9cDJ+6FpYrEkidxDN3OtXR+FwBGMezoMmxJLOumAuD4J4rxJrfdH/XCoLGFVKiUbw+LAPQqWWaMMLrd6/+JycSIm85w9lOpt1j1MwAwFTiqAWEUxeYH5ENn/jInUVHeMXQ/f/jRePvCa4DhTwLHfBc4frGqqaNJzLPw6iZxV+HTplFGvZrXZT45N39+HW3TujlZv8D6fp8HRq8Dts9XIOR5YtakgBgdrrrt5Qsq8Ssd0BhQ4HMwmVitAWHAY/LbLDQNQDaTVJ8Q6W4qVB51OOqDZDPVB3TLOBepW5jmqaLbec3jGgBGMSxvvemDYkQ9GoKF1ShUCSKCqBeQrvmfVZPC1keBjXcCmw911tTJ8q5XgOLaQgA+x/OdWA2EGZ98gbjleTHdQHQN+2iwls3nK3/Zhj3VeQhovYzdxmArSwQgDRA3QiSCJUrTnjfl4KozRCSCCeYmt90EoJJbVCk/1+FiCwFZxLk4dRfLFia6x8LbYkD9v9cXtLG6+O4AYQRfrgPygVIcqyhTXcWFOJH8fh3rz7EKwnUArq8mcGwK2MCC1i7WY7Zenh56feHT/jE3yliE4TZncd636gPFCKWavGhcRx2J+cvs9MlSw0Ty3cCm+c7n0G0MExdW4BMIbTXE9UCynvyCCX+Ovm4gbByA/xisVgJPpXrzLj4EoRJjJIZrWHArS9iprK+KcefgiyB0XVKGjOmCmW9xhRVMUSyRFnNeFGEdI2q+/HFXclkp9WsAbgTG9wGj08CI64WxRk/OTDcUAvBHXSLQxcVCDMQSWbzv+1e7WVbz+k5w2tJtsbcCYV6WJY7hmAsDA7r1Sz3OgOgoM+KTOJbcjSI5yGIaNE1uuwlAAU/MF+tF5/0sIghVLdVdM2S0bSzHx2Mi+FTxXf8X925NC4BycK8QwfmgVX1LlcFiykEMcL2BndJJ7aQfijKfxLGDwAhByM7aC5U4qwPzNwufNnNuOH4VZaCPlPo2AahqFqoPVFc14ga2m+WEEL0cAz9kdPrOmMu8r1o/rTsXz7f9oswFs+jO6LAqkvC3Ggg5Fg6mwW03CUI6X12h8lyfcz3QHqr3DIl64DbqaQKc9mI87QXACD6vpJqY0EVxz2CEyCI5eMSGX2e7VtI5J4yTRyZhscrvt1nQuivOAaNLlYESwcySgiVbr37Bfd0/u31yEgg2FVaiPCeVOguqAfGov0iR0R9JABJ0bnwk9nMxw+fOh55EbgRhzozrBUA1polN9CLwok5HEEUQBjFMQB7D+j656PW+IrJ8O/bBCo4sGFdGejqiyYCx3mKe9/JtTiBvmI5OFiTisg9LtJFF7gZGDrUbHKs79+hyu5hSaUvh1foFr3r/6vZJCiXgCDwVVFJ7MVmRLsrGltuFCc68yFdACMDAflwR4QM3HPoKgIExt4gz42SuaQb8hBOE2oZmlu+KFlKR3QSssMJxDPWbbjpfLoJrxG8CYT8MKGZSVTCxYFTIb84nkCxCIPLDiby30gXFghaF4c2ReR466Uu2fvoFr3r/fKAEFxvpqMcd9yonIrkuK5LLV7MVCM+/uDJCyIC2J8a0z1iwqyESgMl15Sa33QKgmtPEBnp11mwuXgO70Ud4DHWzfgDYC3zBEOk7HlA6XKyHQzb8HgGoCSQLqsxorIy1Bxie7Wx0rFaf+wr9Xv32C+56/7HbJ5VHtRYT+GJrsehHcya57PyKAQk6+vBkBZPpjPEExlwU59awg3C24W6KBsC6tqHR+MidyVG3i3rdAnAsH2T093XT+zLr197MTA80h3SfsZP2UqpCrPQ46oF317VrpeiKXTJ9MhMLkgGdCacKG/mupV9w1/vnwyGgCDCKWzJe3lqsyzLWZWe6/kc/oKzgKH4jC7oolhdC4jiuzM0WPo+cPQ2AsX1obFCTO5Jzn566PwbReiwnfTWjI4KvDoh1juh+aT+WKSYD3i8Aql2rJk+VsVQly5kkddv2FvHT61icqO7Fr71/IkLNXOi0FQjV0046oBy6wZ922Q95ICqDEaL4XWw3COcf9Mw73DFB9AqE6wZAAS8XuzGQIDKf+oVkqxt00ttAc+YT0PJ9qRFSB8xoye5Xu1ZVeCSgCLbYLVNswoncHxoeLwCzBGjBNki/4BX3z9lXgUCyIIGmhova83cRgO5Te9yLgP3MfmsBS8xs8/U67ePQOqy9umBUruDchqo8sHSd3PMfT5ifo+ack8eFHI6QEcnT5GvdOnVdXof+ptJ+BVPWceiaRHA8Us/nkACo8mzqlqmWrbFDppT5A5UIZm7CPA2Vgm3QfsEd909kKIqB1qJAKCBG8ZstZz3xHOAAiwmpDIdng1maZQAkZzsHZ537YfQrwNyxoQ+HakrnS0h1mUA1C96TdJTmORyhC3oeqdwROi+GDhkFI6bYNrcNDEDeAkXwQizPRpmnIs3OdqZPSaRFUcbchHlgie6agq2kX7Dd/+d8lUJVXuUzk8ERmS+2vfd4uvN2VOV5rSwb0y3JhgIh9wJeN3YMQCIgR78Q+nDEVYBYZUrUpbXFnM7COSdf7N4IPvtDnT2BY/h8Chh10MXQeYGS+7GGjaQiABpuNIFiECnzdWJMIUHcazLptC7YivsF8/7FgLFMqpiQL5TuNbKfA/DC46rqqAbAwIKWK+timRUBEiNGsOQsyQm+Gpjd4n046hbT84KPuYjOmHHyp92gcgDS2OoIuVIeh/xyUkaVwyEWdLrewHE3uBUDcKIwnq40HpDXL+n3CzbaKdguel5VnFJl2awaghLQBTzteZ0cjLq2A2n0M6EPh2pC57Wg41poLzZsAZNso0Hw6eVR/J8bF9YjWGmVCpGKwQLBRCcrbiSxNLgVAxCF8XSl8YDHHFPW7xeFBRwv/rGqOKUBkODzqgdWPYAM53vTASMQu4Bx9J+69OHIF+N71F1O1gUB+AsBfFqKC+4Wi4BWX+CYgOTAU36wdMVNVKka3MoBWBhPxyiuko3xkSX9fvGMkqsDlzzHC1N6SQ4DoINOe7KelWWTheziObeKCdARApD1AdVnRH048gKUAmAEYi6Oh4DJV4VoGDWqjq4XLbO5o1jBoimEPhPJmwu9FvnTLgdgYTwd2wyXbMyRKen3i2eXXB245FlVYUpVxUpGiLtmGBlrTEhVUwV8dEkVKAq3MHJ1uzRbRx+OOgDWFX6MsXJU/36lJoEoA2AKvw8+uwTEDIBbStdOs8ddDsDCeDom7ZdszBIs6fcL9ror2C75US9IxJJsEsHdGFBil4yYuUwknofJgF4XcEUfjrz+X7fKo4EJJ//PkMORO6FrVjQMeL5kJhZMMXzLwNZCt1nzDFgYT8cQwpLt4hDON0i/X7ys5OrAJVe0S/ISgFY7j9ZvnQ7I3+lyqpYaL98CWp/N+nDkZdhi6bW8An1kP3fRTLKVWlwF6RZCH2L4zDDR0k1IqeTNb2OQSYNbOQMWxtMxeqtkY6I+ny9VEz6btfb7xc+XXB249AoXv85+tIBVgJJ6n4lf6oV+mfjdDJNMH0wAVFX90GMk1f5TxlS3Fggh92DyN0IORy5665KIfCktsl+K3VsGtpVOWOMiuDCerlSnjQ2rB+n3C+pIBdulz8wqonrNPLKgwKaC5B3s53qhXVq6oDNg6sOhqvqhEr3V2VNLBjmnSSNdrOLJ1zkAu6VPRjFcFz4fXDJ8i45hG94Gt3IGjOFYA8TTlQZ/qGH1oP1+8ZtlT1MAtHK8mQg25zOZUSCLIliWcbw8wfW5Ln04ssqnHX04euiCk6/3de66MPpuAQVZAEFkw2MKFw6a1wEL4+lSBvmAOMhD8vkOkFX77feLNw14YT/ssmc4A6oOdHBEkwXlgjH2k4Nal6wB4fIuX9LzZjAmorNeHMo5Tc0OewHwDTUh9HXxfGJsYkAbAAAgAElEQVS/uvCpoAcew6zBBrdyBlQwwoDxdLZWXLDFkHyF8xGE/fb7xR8XXByAAVC1oB18HQYIT+8uGfP75SCUs1o64he8v4j6cIQ+IqkPhxrBCHjdjBH6AblQkAeY1ondukSiELmsUPpjbyp7XuvDgAXxdNZVvWCLIfmKg6Bbhrjup98v3lVwcQLw8gqA5v9zC9jErutltg8gMxDWWMBaMVkmANWFyEV6R0uH2I1IzW7ypbkQOTP5f2ch9KsFkwp0kQlDAOmxzHpscGuGAQvi6VD4RgmAg/b7xZVlT5MATNXwqQc6KGwf2U2uGV2uzg3D4ua7fDnPwZcKgIdq9GaIBPZb0YdD7hgyIFWMXiH0eQ5vXS5HcMkc++9lz2t9GLAgns7KxxZsCkgdtN8vWD+vYDMAUpcja7lOR9eLVcIP4tcuob/3AOHCdW02VTX62ApB4Mv1v24gnPy9HiH03fJ366KYHYTHsgBBg1s5AxbG0+HLZaOp65i+ln6/YM5EwdYBwGj1cmUkE7+8THLNdAHhwrUOXtcrO/pwhF4cct2oN68BMDCfmsJM/n6PEPoYPp8bH3kCkbtjji2tJJA962YAWBBPZ0WBCrbYsFoOf9pDAiENk179fkuvf9nTXewKcBSjsn7ldonWbgQpx+26otaLIwAlfi2QQSJY3Yjy5i9dmsFM/oEDMM/Z7Uf0RiYUA7J+ToNbOQC3e0WBBm9qLad6HICG1ZK1XB5PoxnuOOIcxSXe/Of8xHV/P+FpwN47gKUpYHmuSve0pKZgCKSq5wqniWE1WZz/xouBm74KTMwBI17lVBXwtWSs+8/vL45Ff3vhpcAnvwos8d48DZX3M2hx9XIAnu0IIO0chu35AOgLL0yuG/jOmwbg028G/mNz1YWdETbm4I5BrFlov+EtD2wIo7l+Atg8D2xY7iw3V5diEqO54mnj6XdMAYcU+6gon7A3NSO2qFjlyZYDkAX6uD5Iam44YaUfVNDNxaJcLIPXcGGpfi6PnZdVD1wPspQBX/wl4OaNwN6Jqg+xwrxslcVFuYJblehkcYYZGPS3L20BxueBcS8nwg5H5kZkx6TQSbXFZcCQKadx5Cz5mPurAFxrRaa17pAR2PFC+ElSHKQ/0QjQcgCyGyM9v3SnsDBRJgL6msWCf6IfWeUJac8UFlpY8500DcCfvgb43hiwZwyYVhd2D/VSrKGAmIDnBkiafEcN9cprHgKMzgNjS1V7rRjRlceyrqif6KAkMgXIM+6tAnDl+zSL36O9+U8p9jGHQo285/2XA/AnXeNnKAorDXH/AILwbSvLEz6Ql2+cAf/3XcCdw8DkKHBwpOpFbE2wadzIdyh3jjNQirYWEwYq+/zJwMh8pf+xKNSwM6DZMmzNRRbM2K+2Ii6TlFrAWfd5V3i/F7IgT2LBF5LbIdkqxLPWvtzlAGQ3RpU3Y7AiixMxLOUB2t7pKQ8M0qCTnp8HkojJgNqaMEJesQv4AR3Iw8DB4QqAs+6SWRiqgJgY0HVDAdBA4Ba4xN7ndlSFAAjAYX4IPO5dBDMAdS2i+Jx7XTf1eEdTDfgAQnR34p/wQkRmjNAoByDT/ugFphXAmjAEn8qaPQAgZCs0lSckCNmVigEbFMsPBBE3DcBX7gLuawH7hoAD7EM8DMw48AhATrjtQwiXoqkTEwWd7LOneXNCbz6Tiq/TInb2M8ZzIFrTQbGiy92oGz7pXl/7jvdAJnb2470IbB3T77Sai+hyAP5voTqW6sKwFAc/TAdc5+3dvcsTrvPVYSK4SQb8xV3+6IaAqSHg0FDVh3iOIFTIFxtit9orL5Z/LD1Q4s+B8OnHVuXwhhdd5DoLGsgCCJ04q66X/Ju/vSaeAxDPvbdtmdtKDV90gVEPIl/xySkviOhmAEjrlzSkwj40SlQZYZ39I+8JBMx8mZryhOsKwqYB+KpdVSDFvhYwPVR9BD7uyX4SwRS59nNI+bRck/DzJ05v12M0nY8fAk8iWL5BB5qASPGRCi8EVjzv3mqpkC9ACrrwhKukB67GhpqRRowQMqCiYbj8oOoHeUWpdYIBAUj8c8WjrjyhNIJ1unzjDPjqXdUjJAAP8TMEzLYq9uOHICQALe/EwWe+QgddAqCzzD8+vgIgg0qp+5nYjaDzCgjmnCYone0klqP4JSgvvK+6LoFPoFMlkPGh+0rPWta4RHTNJJQz4M8EAGoNTPVU8opS64CC9zoAWTFChcq7lCdch6s3L4J/2QFIEBKA1P9mHIBmhPh3Ai354RyAAmWsR/PRs6vOR8Z8FMPS97yxtIlYgVB/I7jC0rIKSfLXF1EEB+BFFjQ3jCLA49OWsRTTEPzvzQEwry7VrZ5KwzAQAPssT9jw1dcHgCrORQCS/bgn+1HsCYQSveaHkzvGv1scgU/6R55Y1YIxhvOm1EZekQWl8wVDxJgwc88QiJc6AKX/meHDawX9z16M/Em7bO8Q08GBP/jEkAEVjMBoAFWXUjRA3KtNwOBXW3EkAZhrALktpC6lKtTV4OU7RHB+3kHWgv/zrnYZl2kCkF4uF8MGQGc+MqEYUCA0n1tkwxbw4ScHAHr71Q7W4++c8czwcBAmHVB/c7Bcek9b3FuwbdD/kjGWgzJjQ3thGmVA3jhfOyU+RxB6FamOFp8NrhsTgLy8Cpzm5QlVptAU+6CiNgXCaIQ0BcDYV8b0P4pi30vfIxD5+w72C9aliegW8MHzqrmh/meuFhYi0pKbs6D9fsh/n1XFMrYMbPgUByCZz6J+uEknDA9AornWFRb01WZEsACoHhOqyC7wdetT0QAK2KqOb5MCUvPyhLE0oQxzqaYNXL5xBvyVXe12vByLADjXAvgxBvSPGFGMIjCmJbEW8HfntxtQmxT0cmxp9UPAdKAZ1upA6EB7qgDo6oCUxXRtPVSpAwJpnUhuxAqWCCYK1MBExZljY5S8SYr+pxAFAuBayhNG26jw8usCQLX0SAAkwwcAEngyQizaXoziIli+Oe7/9kJvNk1LmBMe9ECO3XRB7aPeF0EYHNVPdT8gj016YBcWtBfBVYJuz7mF7VgGY/pO8f5WdQ1/7U67nIKNS7j0wIbDPFZsyNHHY7od/xdlEHj8CcC3TgCWHgGAPSxiSdt4312u/8SPAl8/Dlh4pDeZW2PD4J1c9+uyDaIDkgEJQKnTfG/N8nUAmu5HUnMW5ARbPfEuIHy/ACjRK7FL5pOR4RaxgTHofKl8r/S1ZWBnAGDKefbn3AFIPRPXB7sFiVQimKVgGdl5ooNwLQ1/1U+DQGSXQ9r5Evy1q9rZbP1lGQDZsPpzI8APHgXgod7qUx11YtBbFzC+/C+BL7SAWwhgdoLkONSLqy5oLogYft3ZI1F7EAC+phsAnekokhP4HIzml/PvthQWmPB9LJ7jxkcSr14jWj4/0wFlgJD5eoDw6fe4DzAYPHokWhHJZ3TFSkn4h7YOSOBwEtiMTv1aY0uktFYTmI2/43EMQmCuAJmUE0gmVD8EFdPpdnxhVhqzDr8F4NMtYM9Jfg98EVTeNu9Q2OFZBX7vr9vtgm/lcezczZ61ZNN8DCvilYCdPXqNDQpAlfGTKm0M6AA0PTAyoMSx64cRfPQHXsniOTI+fEWDFGp+Qb9BeySRBV2kpl0QxxGAlHDmkI56X6z+EP7UDYSdRgh/IouwIZ36lHabBE0GJ0r10Rgb/xA/tt/j/6aMAf+7R4CxzuBXWRGULwBfIrY6UNfpvLae7n0I+LO/reoLMqiVMbW38oUhkNkQIzZO7tIweGePcmWlAFTjAYHPVGwXxWoLYblEDkLuTT8MDPhXLJ4jALpaJB+ggU6xfgJknT7IKXIQXh4Y0FZCog+wxiUTwSkXUbSMV1rB/A31OXWuFpPUda/mRHKi1e6U+hA7Zq7l+A+UAfDtHg/LrptkQpZ727cRWOL9542Pa3rOvuOqagUltgtmJM08j4/PILbIDKz6w5PAHsbraTnMGdZWIwIzxIfeK0rn578J3LAVuH8CODRahV/FFQ/1IumIvXP1QudNfyNT8oVqcHviPcBd48A0g2RDuoDqHdb2SalZAdG9dnfDkAE0gXnH5ijWCDbKCq5/MRiV0QD8HgHQ63jG0hdsLGxA3x9Bw1Asli7hO3BwApgng/Gjvq01IHrXJ7q3Cz7E++YziF2rs1ZLZ+8H9jJsSoECWXj6igmR87aLgfbGq4GvbgLu2gjsHwdmCEIPSI1h+SkCRjpfUC3iNWcpoRrcnrYbuGsUOMBo7QBCxSTG/igxVcBIVGPWM1h1JYQPnyKNExGZMDIJ9b66eEBGxPDY1Y5nv+GCjfGAxD+DDpiawphABWZPjwNzNLAEIH4XCH0M7/5c93bBfI8Yk2cgVAdvdT10ifDkBWC/r9lGH51NhIsnsWHOfPmEUKT94WeAG8eAO8aAfWPAwVEHISNQlKQUglJjJExqC+H6Nq93kOpUg9szbwLuHa66QzFWkaFieXxi6hgVHOMCYGRuJ+5V4jYJIDKI9KlsAvFDq8QDrnb8NWVPh9EwdFkQ79TlSMIsN0Mi5s9MoOGno4U6f3YAvefL7Y7rvdoFLxOANSA8f7xSgWmd0kCQbmZ6mTLEnJ0UqWLhUkxlrBn6n3wWuGkYuGukCsufGq2iojnRFpafsU7MDxErJuZhYCsJosHtWTcBe1oeq+hxigJgXBrMmTBPnJKLrr+VED54ibHYvZos8sO+DNcrHrDX8YVVyglAKud0LtMjFPtNMz6QLDY7VomLJd671AEH4Xu+3g7nWq28ISvX58/hguOBg8vtFQvV/hEzxfqOevuTfpjri8vAWz8L3NYCfjBc6ZYHmBcitnFd06pxyb8W4gPlgonBqffTtdTg9pybqiVNBssyUsdUD7eGO9amnf3sXtxQipl7Wg/sD4A8AwHIyZMYky50Tp/xgN2OL8y051qw2hXzwRCEdT2nmck1RxHG+w5jeO9NFQBpR6ldMIMXlFWgVndqF2dVFsJzuOgRwMElB6DcI6rznemD0RnbwQiSRS3g7Z+tVIl7PC9kahiYZm6IizuLigliT/VoUog+p8P9l3wJ7qGEanB77k3VczroUToWLCsABud4ypaLCUoxf9i/9w9ADiICULrQRWuIB6w7nuZrwaZwLBGwClSqSyz3AhHbaRGEFGOmC44D72UVgjW2C2Z4lIF4ArjodODQcqUGqAxfcpG4mJVuVqcL5tbs2z/veV0tYK/nhTAqesYNHdO5PCJZos+WuzxHJIViuXFyJxupNLg976ZK2lizUKodilGUgzyGhokF8yw5Mf+qRkjdjfuDtwkkm7DTkNaBaQ2ox1q3eMD8+B6O3H6em8Kx1Ccx9ptWl9iYIUAAWrI3I3nHgPdOtsO5eOuxXXBdj0V1vOL/so3Cxef60tlSpYwveKf0pAu6ohfdJ8k4CUqgvr5jV6VGTBKALeCAh+VbZLTnh5gu6D44A6H8cVlkNK95O1WkBrfn31R5HSy+JCwPplAxRegE/2T+AloGncNmbQyogUQx/KwB4gHj8YWNTwRAOW0FIIIndoqNkTAxz/bd09XDGLBdMM6/pLKi5whAX60gCK2ujxzEAqGL2pQ1Jis5AJEAFHvTujYAKjRf+SEugm1d2COQLU/DAwQ44caEw8AtZzSIPgAvuKkdrWMM6M7xCMBoiBn4YpCE2NCfxWAA5MEuwvCCEICwlnhAHV+YORfDsWJGgPpMKwg1b9QpFnzHbD2BK2JGul9s8KkYW17vLALQRTCBpzXZpS4gtCXXMAkduuAy8E7PijPWprXJ5CR38ygw1fJDohh2BlRAgq2OeN7uTWc1D0AFNtmL54ESBsCaJcLkDajxj5ZXRiCIGA0waDwgjy8sk5+HY+X9ppUbJSCp6TnFCMXwny1WAFQ8rUAc2wUrRL6mXTAefWnFfnz3FpbagQKLAqAzoZjAKkkpXkNO5GCEvOMLFXOnnC4xIKOjnQGNdWSM+GqHQGd7JSsxUf+JzQLwhTdV4je1nQvr1MkPGtlf9yP2Dy+gAqZ6rQytfvdHSDxgLwBF8AmAYjHWluEDiKGMiqOVvtejXTBOuRSYJwDJAARgZAGWL9Nk+IM3SzgTydE4eec1nZHbtDaNAf1Dpd/SMx2END6kD0oXtFhBXmcY+OY6AFChnKnzl7NfdMR3qCAae2B+VVMYXASvDs3/X/zHJZcB84vuiqABEo0QPnhnwqQLyRURmZBPytnwHde0M1vN2lR6picoKULaxHDIEdHkW2iWg4/7b5zb7DSQAVd0/griV2JYojfpwRGEYsGBrOBmx/OgP5sAKANkcbFzNWTRnX/GSGImMYH/LYlk+gGvdT+bW+SWH+Ig1GqL5QeTtR2EYj5LVHfjw/ZDwL8yJ6TB7UU3VVoTjTYxYDK+Ivv7dzNAZIxpZSiU8jjKgIWTcykZkBawDBBnQdMr5QeTKI5iWCB09AmEb7+ucnOQ/aTPWn6wuzyS4u+R0Ob6CUGqJpIDA97AdqINbgRgBJ69CG4Jp6q/ckjXqB/RKla4WpkO2ODgHoynigA0JiLwaNiEt95YQKJ4FRC+7brKzRH9jZbN6iJYuSHm9I5iOAOhHNJfZkh+gxsBKPbLu3+JgaWDdojhMO5kkDWSlNTg4B6MpyIAjf3IggJgMD4MCARjFMU9QCgAykhSKnUCYHB9JB0wy5aTRUxmup4h+Q1uAmDs+hpXgFLnB6ULONOn5xACNJqxghsc3IPxVBGAiQG9aLeilWUJW1FvVXEN0TKp1C6At19TMSCBpz1dHtT/JH7N9yaxp6QkF73KBxYIr10nAMproB44qQGTj6sjUrtOFPtLeFQHLES9AdDFrq1E6M13MaxVCTNAXNFThIylLcor40zxtgDAPKuVwDMrOKw+SBTbtR2MND7sZwC7Qvm4wqHa4T/uIrhb+7n0EgbQdTijoyg+agWXT8llDsAFWr/B8qP1K7bT0pvtVwHhW6+t2C/m8svvZlawi2CKe37nhFtapkDnILRqBQA+v04AjMyn79EIkXO/DnzyCBwVweX4wxs9B4rRZgyPVFqykgDd+5JSpBU5r0vHyHz+jsc3ub0KABsZMCyQgeExKyFPVIz3lmcM6OfPAGCADYPE67Jfs6h7G0o+xvi7oyK4cLZfOgpsXwC2Lq9MwuuVERonKn4nSJrcXnQKcM7dwMMXgYcsVxkSebJgzOWPqdB1ad2f3gpsnwK2LXWeR9m3danUIV1lBSCPArBwtp+7DThuBti6UDWDmWA/DvXk8LRptfPtNUlihYZTOPCi04GH3wFsnwGOW6iAs5n3GeJJ+KLoE+9VDClQ8R6vOQHYegDYwuY3S6H/iJ8jb11ck0q9Qhoc9QMWgPBZJwFbpoFN88DGRWBiqQIgWyJY3lPozaGJ1KTEPh36zpTkJrcXPRE44S7g+Cng2DlgyyKwaclfFoIwvCwx9Zn3Q1DmIPx/2/sSaMuusszvjfXq1ZRUElJkKsBEGQyYhJCBSkUqAW1tsBdpuxEVaBzowXZqe1g90G2LotjQdmMjKqtBxQERdAWUAkUlZNBGkQRNyIAEMAkxpFKpqjfUG3t9//m/c/+737njPq9uVeqcte66b7jnnn32/s6///3v//++Tz0dmD0KzC4DM6vAFpd/0L3Gh6yTDgnvLwKzAWDGiH/ThcC2OWDrErB1pRgQisIQhAa+AED+HEEY6uNLyrRnZLSl6tSbrgLOeBQ44yiw8ziwfaV4UGbdegmA5QMTLFlqsfn7XecDW+eAmePAltXiXnkuZSBkRcm4UGXtU2uo3xsAZgz6y54JzMwDWzkgBOAqMMVBCSAUObh8QuN/CiTgcWAuyWhL1amvvBbY+VgxbW477paa7gIBqCnUrbUBiQuhAKDUot13IbBlDtiyBEyvtO5VDxvvVfxW/JkWNFrCeK8NAGsY7BsvKQC4hQCkJNaKy2LRIsg6SJ3IQSe1onKKC2CsOYMeN+0Dtj0ObDsGbFsEZmWp5S74g2Ir2uA22BScAJGA+dJFwPQ8ML0ETAUAkgDTPq9zdK/+sMWpPF19NxYwA4g3PtsHxAE4SQC6FdSgmGWRRIJLZJll8EGKjHiX1jwaN10HzD4BbD0GzC4WrsKMW2pNobZoCu6CLCDfCTqzgg6sr+wFphaAKQfgZHKvpRSYg7HN5XCL2AbAZwPrZGaj6ippXhgn0kqmU1woxnHedg5AATuWHig2FE1uVRwoxoX+Wcbg89S3AqCKPONcCi8oPtVP+9++G3j+oSK2xRBFDElUxbTS+3nvc4FpDsjxllXQoJg8FgdCQoGJJTTicLcQ6vPL6wbg9cDM4cJv27oAzFA5ky9/UOSvmg8oP86n0dICBn25JwjARWDSAUgBHN6vfdbv10AbARh8X91vDM2ss+NvAECKPVLCsHoyUgRqrlbnRwB933OBc+4DXrIC0IEmiLnE75di8HsyAcjzWUVGUi6uICMpVwwJVMXdeOk3XAxc+Hng+vV2esAYw+sWoP31r3eLcLwQBeQUrEHh4Jo2h4vDmJPuAyMLGAeEn7uqbgB+I7DlSWBGCwe31Gb9aL20kGDb/EGRxY6WTz8f2wtM8l4pgL1SgM8esHCvsuylME4nn9cfQLtldg6TZ0kUKorAfij23vAPCmqp3fcCl60XFINid1PlZrf41/dnApB6wSQjutUfIDJR8CGIQOwWEH7DywpKrWc8CFzqRLHkVYrB2jS2FQH5vkuBycXCAlIUUAAkCM2iRBA6+ARCe7DjYmQduLYTleiQ/XTTS4DpI+6nLhZW2nzVCEBaMLd+soIGqjD1ampdugiYWCpeBKA9bBJC9ActAk8LES26SqsftInLZ44dQif4Igdhym5WLrPDyuYH/7HTCNwDnPko8LXrBccjQaioe6BiKad3+QY/MGTH6rS3OBvCnQDuAIyqhiDkQ9RX+29yE3on8IwjxQPI8zkTiApGU3oVkD/4fGDieAuAdMw5MFQjEgg1DYsUku+a3uI0TGBfV7PotwHwaOEmbHEATvuDIutni6UAQoFRIFRYhfe/dhEw7tbe9Of0Si1g8HkrwRcevDajz07gIJ7n05rYyWIpb4ya/7vv8PRdFpj/LXDmkQLAnA4jCCOlTBRN/rFMAJKgkkVHpGUjySSBSFeg7/azqk8EgbSEq8UDRACLKDXSyaQ7Br//DcA4LSCtwnKhTEkQcmAIQhtM+Uaajl0uS9NatITXWzpzfcdNB4DpY+6nBgDaCtanYLN6fCj4u1ay0QIqtML/EYC61wSA9tAJeP6eWsAoDysFpg1eB0HIQRCIIkVeCqQf/05P3WCB+UPA+CPAzvmCaFWDKEuYcl1yMN+Y2dckqGTeHPEvvWDSNhOAfbefX0A6rS8CUw8X9066bFIfdqMHJID++DJgLACQumyc3gyAEYRRKFCLD1eu5ODLF6QvXedx0w3A1BwwxdAJLTXjd8seQnGrZ9bPFxLyA7WIKON63tYtCQBN/sv9QPm6BkLp0vl9t/m6ietR6fbyBA4gnXtORwRRpNnTtPpW6gWLH83lKqcOFTEnDiKtoHwy8RNFhrefyeztbnrBfbWfgttsP+kIyO32ELD1cHHvInrlvWs6TsnB7qAUlg/suFtAWkE55zYQ0QpqcALoNCXTEt7A3KoaDwGQfqoAOEUBa7fUbKctltwCajVbxvSiyvoasM0BaBKwwdKb9fN7NfcqBWGiSWykWXER0umeacUEonQgCKRfIgDFjya5yq8Wfsfs8dYgiuMxgpAg/vnMzu6mF0z6Zj5APdvPQec0TEosnvQosGOhaLuIYvnwEYSithE52F1XFAA0p5yigD4otCqygFKnpHUpLYP0OcKURYv6Mj4MNR433QhM0gL6QongawOg+6rl9CswKoSkEIxPyTsuAPigCYBmAXVfYcVf+n0SRYw6dP1YwNgHsgSajiJP429RrpWOM6cxDiJB6NINM4w7LbUGMQUwB/M9mZ3dSy+YVG0EoBiDBST5ddZ+PkCsAiIlQZDa3LVatJ0WXG2PbL98AB+4omB3oP/HgTUhmGgBfRqWf2TTrUSjExDSP/qWzQDgfAFAWyzR8rkFtDAKX75jo6nUguZxZ8NByHbvvqBQ36T1swcsBaBAGGRg40Ir+rt9WUDhQ5ZAU7Es2e9LLzglqHRxNkbeuW+oQRRls5jaMjnK0a9ecNf2R4LAwO829kQB3LTtEYQPUwzQAWgW0AGo8AQH0ljp/V17pm0KRcEifGuNOnocO1rACQbKPXhs8TtNwVr5uh+n6Zf3wDgu29g2FdMtOc8B6PdpFj08ZFrplw+ZA5FTvAQQ0/BT36FPDkRqBT9Jag7xYlQItY0f88j78sZzCcKPZlrAQfSCK9uvB4h577SCotUiEJ8opq8IQFl/PUBPEoBLxbRE62LSqG4dFB8r5bHcOtiOQSqT5T7RKzYDgJx+BUCCTxZQCwhaQc9oKcEnEBKknj5FsJ1LAPo9xoWWPWDy+6IIoqbeaO0VA+zHB0zxIQDKkn1GgtXiRxMIAx0Vn0Db+lkuFjLRCt5WEwD71Qvu2H5OfekD5FaciQay/GIbFgBXriwAyGmJADR1ck3DwTE3TQ4B0LetzBJErTYAr2BBSI3HTS8tLKBZPo/fWQDZp197Z3scjGb5BDp/L3+njMweB6B83Gj9wj3atOsPWin9WgXCFlVO/3ctf4iD8XkBkH5USlAZlNPZAQqARr5vxu1yjmH0givbX0UQKI63o0Wun/xHuR8E4VnPK5JQLd4VNttTBvK2uoiKOUf/f+GjwMNBh0NMV6J0c0NpcRv7mrYv3kh8/uHxYp+bVpwLp3R7sts2YzouSq3KGa+q7+x7Co4nazAerRKsVlV1QitF59dyyFZaYY0HMu9mWL3gtvZXMbymBIFMZ1ov2h0B+LTLisxgW+Eq5uU92iZ72ud9vvR+4JFp4NjkRh2ONi0OB1/UBCkvEYRhfuNs4OmhhiPKnFQlx6aAjMnSXJUAACAASURBVPjmz1w41nnwO4cCIBvBwZgTAOUHRq3gyDExD4zRGVYEnpm5LqmQc0M5esFt7acFl0SlHiBxuTkYxxdaihUC4QVXFu5FCUD5QtJl85sjGA0ziQxqeu/fem+hw0F2fLLQGxFlYMRvo7v1WmIVtpt1DFkXvOR7LwJ2HSkyoZmEypoVVe8p7b6qEMnidGG/Vl/L2aPOIwuA1pAIQE3DAmFa4j9f7CPaFpCHKujr5xzZesGdHqAqKz5X+FLRAl58le+jui+kTBALMcgZ73CDBkpN2/7+bfcWOhwUyCEAjQTcAVhKdjkPc2RajewKyu/n1//qJcA2uhBMRGXQOcn9U6JIOjXHQqSYOsVoQp1HNgAvz8yny80H5PVz9H6RqVd849WtXQ/zA0Ow2ayGLJ474L0G79vvbulwkJi8BGCg4S01SKqofoNvSIC+5zkhFUupV8rUTpJN06KpaBkFQm5M1HlkA3AyM5/u9Zl38zrk6f0iU6/4hmscgK5ISUtCTowyDqb7UxwsqFJW3fo/vbuIBJEZ1YRgyHwQKNi0KEl1OKTCZJdxtPDn//v8ooaDaVgqFyiTD2IKfcjZS4Fo+7g+HXOPv84jG4DIzKfLzQf8KVfI/FNKrQ6h94tfz+vOA9cGAAbrpylY2SDlVTTt+uCnV3/V3a7DQQAysJAwobZJgUXi78Qayhd812WeiOAZzEyUiAkHMeu5BF5FwZQAWLPwknkLQy9CrPMy8+lIHZFzvN3T+YbV+8X7c64OHHix74V6zIxB+RJ0wQ+UU992tYoFy3fcXcTDxQkoPsCUhFIczKVCegSg5B8A/PILN9ZwxBSxtiKiUAOi7JW0dLTustF8AGbm0/1o3vjjnSGdj+lYlGwdRO8XN+c1wABIoHk6k61yuSCJITq3jDY9Vx0BqK++uwAfX6JkI/hME0SC1EGguiQ+isqcQRLrF6/0jO2w+6FMnZhyZYsQ1W50qOHgPX1NXndtODsfgMwHzMin+0+ZN0S9YOllMzWfLwKQSS396P3iY3kNOLDPM1y065H4gOW3p4uTDkB8zWdb7FgbdDhEgJkCUDRvogTmd/vPv3BVAUBuvylNzAAYi4hisVQnEHoIqWblrxqm4Mx8ujfljT+YjsWBYgIOc0oJPsq1slCpH71fKybJOEoAuuVTRSCnYlmU6P/Z4iSJEcbLv+Yu9/1EAh7JKEXDKxq4ChUiKymRbwjgHdcUWTARgLYXHSr2LOU+BV7MVwzxwOfkOWybYAGZD5iRT0edjpxD6VhcOQ6j94tP51wdOHBdMeXa9OqWRcmWXA1XLUIUH6zyCwlAs3z+YBkfs1u+VIejJEF3ckrjI9T0y/aMA2+/tgAg08VURKT8vbKMUgAMIGzzAcOi5HknHQAz8+l+MW/829KxhtH7tTz+jIMAJPCYMULAWd6fvi+EY9ouoZBM/Kx/4LUBgFLgNC5o16FrE8JJVJgkiFhaQQBv3+dVbMrWVsC8UxFRkjjaVsW2DtRdOJ/vAyohVYK7A+bTvTdj8HlqTMcaRu/XxHkzjgNkIOWuDr8jnYYDKDutgpUhra0uAlAyCCUAK8BXcjBXgLCk/h0D/hcByDxFAdAzoFUqUBYRJTUcMWdPP7ONL6i5bLQeALJRQ+bT/W7G4AuAOXq/lsGdcRgAY+glLkYclJVTsa6ptCX3uQjAKINQstFrAZKIwWxQIhIJuovB/Nx+r2LzFCwlj8Y0evl/MYk0kieVtcvrwGUnHQCVjjVkPl3mItQsIPuElx9G79dOzDgMgGkAWlNyBJn8xKprBRC+zgEo4LWRgcdVcOCjjlNvmx84DrzNAahaFZWLygKWxUNibIhTcPD9BMLLa65bzreAMSGVoXvJ/Cgh1WUfO+XTZS5CDYDs9GH1fnOrIDcAkABTTDCCLYK0Cwi/586WcKJUiEpC8CCBYDsiiSplqUIUmOjf+o2tIiKVUJbgU5uSWl4DWwX4+PcXnrQATBNS+8yny1yEopdcay+930y5YhgAg+9n2OoUeI5TdQer+32fdhmGoOBZanBo+g1yEKU4dYgFSvqB//vZBIBt9RshkTbW8ZZZ2hUgvDL3iU3uux4LSBM0ZD7dPRnTH08VAIfV+2XAOucQAMuVcKfFSD/+IAABsEoGwYAoHZIKEEYxRIHwLS8pUuhjFVs6/ZZhIVWyxVKBBIRXnbQATBNS+8ynI4tBzkEACv+chlUVIKE/5cRGsWmlKfIzudc3APLQSlg3E2OCyVRc1kpU3DgBmKoQsWtlBcswjPu+nfTYtBL+GQdgOf16GCZW6pXlBCqWSgqJypoOAFfXXDifbwFJLvi5HAjlnUsiIe6AjOp4iQNQHRlT2PlgJCUbbc2s+v/hFwFb/q7gm6HlYpBbmTV2sscQyy/qFBj2v0/cAdz/HGD7NDA1AUyOOU+1CwWOewNjKj6/O03F1/WuugW4/XJgfBoYmwDGdH7IxB5kLPIB+I8AfNwZgga5ck2fJbEm8V9zNWPfrasbgMuPAcuseJ8Exsb9FdBhA+7gaQNKB6TfcgCYug+YJT+g89aoBDMmIMScP12uTKj13uDv8zsKig/uJ1uQOsnojm3qB5P5ACRBH3OhPuzzRN9DV88HqQLEWPJnvTy5nm/t/1s4BcuSpRZtGAu4fi+wtBVYEyccrYwn6hF8/FkJp9bKxAKVFsn/d8urgbHPA9NPOEOWl4+2cfoFHhfVrJTZPKHSj5daOtup6JyCpPx8rHWRVQ7WOlrYCMx8AHIzlxkALPD9c0VB+x/A3E/+E2fUYHXdF7KTGwdvTd0AHP9r4PgWYG0KWBdfsBdsMPfPrKKsoL9XAVLAvO2fFylCE4cKliyrDVZNcGS1CqEYhWFiAZV+XntaURdTLmpCEbpchTYLqi6NrkMCzLzt5Xc4HwyJmmkJ+Z73jQOh4NWeDUZiK1K08f0EXt7CMHVawIk7gaVpYJUA9LI1Ao8bzKX1cytoFtFfpdCIWz7rgzHgth8u0oPGDwETc8CEMySUzFaikgtlpW1Ta8JqNba7lVljSRgW+Q6ZP/57WQvj6fydBjXfAjKbgEvMLwWCvhNoipgNpnQshlS4IGFWzIk6ylWwAz93ETLxGWB5ClidLABoIOS7pmGfG+33YAG5mND0G8F4678vkiPJczNOAC4UyQm2N8w94kirFlfIAl7i402d6dbPWWAtrsjOFiuCvAJZOQE0pHTFsckHYDeCvhNgipQNxoAz8/8IPr5nbvH2jd+6AThJAE4AqwTdZKEBLDoDgU4+YVkPHIBoPwareOt/BkDexsMFAFnbzNJYm0IDnVwbt4uyur1kwL7Tp+iZM/08WT9Rc7DHUmuYTr/x+6o4ovvu9fjBbgR9JyA+omwwxvZI5ULg6ZW7y9FPf9QNwKm/CgCcKABovh8ByVy/UCtJq2f+X1yYJPGU27lIZLbuEWDsWBHesZeDz4iURLUWa1TE47LqK12fZmd3OXidFctqm92KatVs1jAEsNv6sdymaa2g8+xUL4I+Pn2beCgbLGWHI/h8G3oTr45iK86POlbBU9yKI/AcfLR+ouQwH9BfmmbLlTHboOnZ/T9+5vaf8FUaAThXsFOQ45mUcgZCWTAxe0UQ+urYMO1/37GtxQmoLCBtRSp30LrDp2SFdzYMgk/R+VNwvwR9mwQDsaspGSfJgYDYNTbp8psCQFJxEIBkQjDrxt8dXCUIY+COH5MVFPi8SOn2n/QYLZ9Gp0cxANIP5IvAkzVzxivRydnKNzBa8fddM84b6AFyAriMF2pajk9kYIeoClXmA3AQgr5NQEHMBqMVFMNaIOayNRL/vhlH3RZwmhbQQUcAasrVVGz4EtjCu/3dfb/ID3PbT7uKAZ/MhcIC0vqRTo4W0IBIEAmEtFwCYqjW03bcmdwBYeoWgetUbrR8snrloiR2drpACf+rD4D9EvTVjIJu7HBV+781X752Czj9lwUZkTEgcPoNPp5Nv4oBRhCG6dd+1DkMz1JIhR1BAHJ7zwqO3fIRRM5tmDK5CoQKsSgOeBYBKFZULTqcB9r6Ni5KYmd3WKDUA0BlhNLM8EbT1QBXBU72aI5ZjUcVOxz7WLkQ8d37vsart/uA6RcPsxNSAtAXHDYNC1AEpf9s01kKwuBwGU7HgVt/1jtD1e60fgQigSe/j5bQp+KYpGB+H62jT7P8/ZypBIC8Dhcx8eY9wF015abhmnoAyJ5WSrKeNgKO9SHxnT/LSasJBim5lRjWBEIVeROInKL1qunybRawLgASdEy74qjaNNzJCgqEEYzBGvK0297mAFSHEIB6ebKDgc8J1ksmV8t29f1en6L5v6cxIK5iK6Xne/5jCTiFcTqVn/r/tWDPWwXnEPTVgIKUHU7ljASawKefIwDpMdRxRB+wFgD+RREDJABpwSzz2c0LfxczVjkVKwaYgtBBezu3SvX08d39P5uO3QKahXMQciourZRAGKZWar/YZ1xXRPe8wQr2AUK7TvbOVTZBXx4MBECRnConUBSFEXT6mf/TK+/qmzAF/0UBOPqBZYF52HrTFCw2LH5G8UCzJEko5nZqmRnPh/uCXmpnVpDTsIPPwKApOaSA2QLDLSHf97iPx0tpISLfz7bl4iFfsUsnj+HZWEeOYDCDnDmCvZkEgedcCjxGseIhBYt3vx049HwMLRh8gA9gh2MoH9ABqKJzxf0McO7XlSAU4HzhYYFq+5D7hwBu/98OQLlIBCKnW39SlXNY+nqeiq2dkQg+gnGPb9/ZpT0lq6MV5D96gLCwgDmCwbdnCvZmCgY/dxy47xxg5SWuUjigYPHFbwA+fyGwfr2rXrMvPB+vp3L3GHCgi9JOHQCkRVPppeUBigXLFymyejYTB4YsgfA20ofRAlYB0FfAlvQqP0/TsX5PLOB5DNu471cmIwiBaRww/F01J+mz2pqChxUMZvpJlmBv3iTocsW4dzewfhkGFix+2febXDAeJO/YEILBB7pU1g8LQFo98QASVGYNQ6DZfEG3fnEqrgLhbf/HV15anbkFNCvohWSl9XPQ2XTM/2s3I4DwPIZwBEDfgitH0Ek6N6x+u/iD7T4g/YdBBYPpWHEaHlqwNw+AQa4Yj54JrJO+aQDB4pt+oCAyYvOPEIQDCgYfeF/9U3AbAMX7ItAlVtAspKZdz5SOlvA2pstxjES3wJ+92NgAGK2gwi78QoVfEhBeQACqNNP1RdoA18kKdgDhxkUI/zKIYDCnqyzB3jwAJnLFOEIW7QEEi1/1Y21ywVglCAcQDD5/Efj7M4CVrZ5AKlkhxeQUaxBI4nvFzxf8IfCVC4HV7cC6ZEX5nen3VX1vAGLZq8ysrvHY+QBwbGfI2E6JpLvdX+ksthpUvQrmX/sVDGZVUJZgb17vJHLFeGQcmCdVb5+Cxd/5xjZ6QzzMLOQBBIOfTV2Ps4HFHQ7CLQUQmUrV0rgKJMsCjsxGAqTn/hzw0EXA4tnAyg5gbTYBorKkUyLnkB9YVhTxu+kT13iccwtwdBewPAus+b2ar9xJAafqfgMQO4dh+J9+BHe5gqZZZzYok1JJUcpaR6bp93P+W/N6p0KuGIemgEWKgPQhWPxdP7NBLhiHKYHUp2DwpZ8rLOD8tmJQVplOLxAqmbRKC6EDYC7/CeCRPcCx3cDSrsISrs04CPm9ArZk55UvKAspYLqPaPdR4/H0g8DRHcDyVr/X6VabLHk2PhjpPVZY7d5xwF6CwS9y/4LbbVyQsEKIufGiKe0p2JvXOx3kinF0GjhOQY+oNRtljji9TQPf/fOV9IZY4Gq4D8Hgy/4W+Oo2YG5bUUy04vUcLCqSJVRWszJbNgxSmMau+q/Ao2cBR88EjtOqbgNWWaTkIFz3YiWrF4nAjtN0nBZrJnU+/8PA3CxwfMYB6LUra3oglL0tps6wlVha5rLiqd9AdDfB4Je6U0s/0BXTDYh80Sr2FOzNA2AXuWIszABL1JaKWq1R+nwGeM17OsoFY5XTVw/B4Cv+Djg0C8xvLYqJCECzgsxmZlq9T8e0XGUyaUizavPtxoFr/zvw2BnA0Z3A8e2FVV3x6c4sqwObckeyhiXAowUSADhD1XhceDMwx37lvU4XxVN2n3rJIocygkr/Vbs7fe+EdBLcfaXXQ3IPWIrpBB6XlnwpR76jYG9e7/SQKzarxM7qJFj8mg8UarMV9IZ4gvNDD8HgKx8HDs8A8zMFAFnPYQPDl0Co2g4fpDZLqKCxT0/7fhJ4fCdwbFvhRiwRgJruCOwUgCpeCvUjZmEFxhfk9W969kW/B8xvKQqnVgg+B6CB0MsI7P70AHgmd2n1NQ0rv7FvALIlVYK73MnQCDLThSGZoDpuP7uCeuX5n8zroB5yxThGnQ0CgyBMxY63Aq/5aBHG6EBviDlOLV0Eg1+0AByZLgbl+HRxnZXJoqqttA4ODovlJZVuSjTQFtq+NwNPbHMAzramdVpVs6wEoPtdNg37wJfvsYiJP9NFqvHY+7vAwjSwxAeNxVO8T6aNVRRRlT6hHrJ0Ovaw0WDJCKng7g86APvNB9wg2JvXO33IFWOBgn8EIf2nRLD4tbe1+AU7yAWbZeskGHwVdd2mgAUCcNKnJgLQrZ/V9/Jnn5JUYmnAE3hCmv3+t8AWQfSzyPK/POOgJgDdsgqA5nfJAvLdLV+bz0kK4RqPZ3wQWJxyAPqDVhZQyQr7gyaXI9axWCFVAGLvRUhV46PgLnUWBs0HbBPszeudPuWKsTRZAJDTo8l8ui/42juL5veQC7ZpsEow+OrZQlqVVuH4FLA8WVyDAOTAmHUQCAWQkOlsQAwDt/9/AE8SgPQpNa07+AhAA6HLXbb5Xr4IaAMfv/eGvP5NzyYA7UGjBWTWjh40v9fSyscHLtaxhJWxFVsNNAXH1khw983+DYPmA5aCvXkdNIBccemfceooAfhAAcA+6A2xLuAGucxrzgKOMexDfV9OwbS2BB/BEoqLSrBoYGgJ3E8qLcIEsP/ngCPuUy7S13L3wb6PU56/m/Xj4Ps0TKCXQA6AXuNeZY3HMz5QANAeND1kwcKXlj6wOZQ+b7R+Pi0PD0DeFAfk590CKg8qncfoFzIRVWVqfFfBhgn25vXOAHLFWCDbvPstBsJZ4LUPt+jdesgFg+qVptWq11bg2gtgfuLiRAAgQeg+oEmsOujsXb5SsAoCIN/3vx04OlNM6Yv0tdx1MKvK7/TFjVmeCD4HQQQhf159eV7/pmc/kwCcKABoeYvR0oept7SEoZQ0Tr1lPuPQFlAtO0nyAcWhpzw/FSjFzGjLx+RGvxzoSeC1hwsA9klvaFN5FAy+9mJgnhaQ0qqagglADo4c9AhCDpJPl5ZommQ8738HcGw6AJBW1VecZv0cePwOY0/wl1lAD/WUCx0mMlDLr8bjmb+Dwp3x4nkDYbD0thIO5aNtfmDi/xGEeRawxhs7Vb/q2huABQJwAlhyy2cC0xoggjAAUCWWAkksOiIY978TmOOqeqqwqAx3WGhHK06n7TDwOcAV/iipPAKjwgrZm2o8nkUA0gKmAHTrp+o9MTrEYvq44o9pZIOtgmu8mafCV72YAKT/RwAy5OPOuVlAAk9Oule6xQRTWUKlWtkU/IvAHAHti5oIwDK841ZPFtCmdr0U8PaC9hVultd4CIC8P2Ztt/m5/qC11TJXlJDGGpfGAmYODgFoCxACkLpuWh3KCgqE8gNVZK4KtxgjJAB/2X1Krao1rfN7CWZf3LSBT4uAEIyWBVpipL7GgwA0AW25GbGENBTRx3rm1M2w39mmrFVwjTd1Kn+VAZALEE5LtIDyMWUBvbLNLGHgd5H/V07BDp7r3uU+Jadgn3ptxekA5MBri0/Wp4wzBjDbCnkMWMqVpE8GJwLQqvfc0pqbkVj5aNk7gbCxgJno30cAjntowtXNaZ1suvSKNhsYTcVKmw9F5xGE+94dfEoP+JYhD/8OC8eIPUsUHokVVKB78XszbzAF4Pvd//PCKVGIpOAr78mn4DZOm8YC1jco+w6EFTDDPJqeCEBZBa5GffVbhmQ8DtZW5TYOvPhXip0GTuu22lTMLSw+aAVl9QhEWjurI/aQiLJkTMLsX9R3r/ymZ73fp1+37OU9hunXSkdl7T3QrhKCtlCM59k2i5CMMSIAGdqxEIwrmptzTsCEut5yilKoJLAcxCq3fe8tLCDBFwO+tKjyuxSCMdYEXoeDrHcHvu0tTwLzmwHA4N/Gh6zNCqqeOSxC2lb8tQSiMwbuqXIqAcjFh2JjBKGJyShQG6ygVbfJegULWBYcMR3rvb6oCRaQwFPgl1M5rR7/JtBZOIZWx/0+s4QeY5z/1/X2tFnAxPpFELaVkdLN8MWGVr4pCBsfMHN8bmTKfCjZ0Ncp456/x58zLzfw6Qf3ABd8pUgEYmqk5bGyek06IQl1bkXScnlN/u8L24Gdx1qVq91KQvrpgwaAAw9p+wnXPw1YjyWMGtDo2ASOFGMU7SIEUzdYD34vMPmXwLbHgdkFYAtlGiim6DpxJtvq9LtlVr/aWKEB8pUXAOOPAFPzwBTZ9r04vdQ9Ts4pAZ3cd+yHxgfMAOH+vcA69/9Uxijmz/AerYpdar1lNSMYzV+vWY/34I8DY58Gph8Bpo8A04vAFEFIknIHohGVR62QhFRSYjQE6qFri2z3iaPAhHNNlxKwArI0Q1IAxwfReacbC5gBPp66/5ICgLKCtqnsrKKlrFZUFPKOr7osMTtdsxzqQRZ93Q1MPARMPllohUxRqkEK6gShOP0S+dY2hlRv99y+ovRi7IiTnTvLqmg6xDPYpqAUgRgsoR7MxgJmgHD/c4E1FXu7FRRbvEgd7evXWlbPpp9EgUjiJpwe6zwOMlvpAWCMVusJYPIYMOlSDZRpoGiNxKzbdIQlXONMWJbGtw4svdgz3El47nzTRvPrrKptAJT6ZrzfintvAJgx4vsvdQvIXK5VYF3sUZxmJUvgA1FOvwF8spKyBtM1y6EepI4LqVMedbEaTp0EIKdPKh5FqYYqSxgo2jgFr13j6XXHnOiSZOeBVSvyC8qC2r05FVvVw9cAMAOA178AWPMp2LJaaekiCPXExwHw660n1oB/niGQazwOkkSepbJ/72I1x4CJ+cJ6lYI1riccrVicUuVSmIW82pkwnHHVOKbFsOozQGkFkwewnBES37ABYMaAX39ZAUCCb82nIlo+40p2gNnvsoKunxH1xGwA/LOzdQOQJPIuHzV2GBg7Cow7AI0l33XfjOsv6oVodes6ISbBsAZMX+kJxU56KY7pkmFVhOciuvTzSt05v0+ryuT/9gDrZNe4wPMsI7VJP3GcP7gUOOdvgL1rRYJ0ZI5IV3hV4/wrGYPPU3/AiRhYusy2K7mU999P+z90ObD7LuBZK0Xdkeq9NSX2+o4HLwfWlopFCC0fgciBMtAFC8CGrYXVoVjnU2G7rTXrzh4kfRzLY1kyGwBoeiGcPiXb5eAzdXWnazPCSScb4j3xfmav8Cx2p50lAMW0VXINitCogl2r9H2dcctWwQxQsn6ZTBbMNtcgdKIbiZj51VcBk38CXPxoQcfCUg8pjcYgZScw/momACnXyr4leBhs5QaBTHpf7X8dMPYJYO8XgAv9e8QJlAZZq8D4xSuANYKPJQn0AR2AHKy1MACKe9nfFI6IEqduEWoHIJ9wlsVKLekoMCa9EAegSTYQeM4TXco2SEMkAHEbBZoj4bbYtdyCVrFqGXgTSxgXYTZeHLi9AMjEQRCVUXP/n4KUaaT8vVTi+Rtg7GPAuYcAWlMCgUVkQfJ2Q12yBvPXMwHImhDWwf81imsTiLSEvHZkr+jY/p9CQRD4p8DOBwteItai05qn31FFdfLlFxYWgCDUIkRkj/TxbCEi/89jfPZ3X2VqYSJQbmUNQY3HQT7hbv2sLoerVwKQHNEEoCsm8R4MhPRjXUGzVEIKIoY7yaEYuY4dgGb5RXruoSgtSCLLarkICQ9f6QNykGjFdjsIBaI4kGlt8W+Rg5g0HJ8qAp47nihAzFpuWtPIMBZJlASILvR6fQ0DCVbJCkJOJCqnk4pGpb99tZ8MopyiKDX7WWDiwYKXiEQOehCrgKh+eJQ+EQHo1Lby/zRlyf8TIbf9XS5ftIb8I92YugH4ay2pLusorl7dAoonWtMwQSTdOFuQSLTGHyIC8kxSIQuA4hwU2WUAoO4/grBcDbsfWElSzg+JCoYDoEGM1ixSkHzgF/wG7y8sIa3J7JPAGWuFJSQIaU01iJHUiYP4e33BrPOHmG/JMaOfTZVYRhwGav87vWKPJ9/rSH4IOGO5sITqg/ggxXs4TOaBAECbeoOsgfl+DrQShFqcEIhyyt0MbMusEkx76iAZXKM8BvXiZAGlF+KaIbaadYpem4aDgpJZQz6YJABV5VcHAJZ0v4FxX6KG5UpYs0KnqjhRuagEVgPglYAl9ciHf8mdUrJh0Qx9vkDBzBywfbkYQIGwahA/kglATsHsDzKA0BATiPyZ4NEDwIeoa/uFYKKXL2f24nQoIgd9R3yQCMTFqwIAfdBWI7+yB5ZLECYLETd85YJl+2YAUNosLIel/xYlu4Jsl6bhNhD6it4WJCvA2Zc4Gxo73RcgJeOqFmGR6rcChLYACyGojmEYdj59KnZ+tIQRhH9IvWA2hiREjDeRI9Cly7fMF3EtWRFawhQIf5IJwE56wdTIYdt7tp9ys1K8JnoJvod9Wn682PNkP4hUy1ndWgstAtBDMLYN5/6PAc5DGNoF4SrZfN+4+IhT8jqwg2Cp8ThIJ5vfSWBXAVCrWN9SMxDK+skaOvhoAc8me654pmUB3f0wyt+E8FyRAGmPlOEoiSD2qgvmAKoOm52fAuiTDHSyIRxx+lI0QxxADubfF5vffMmSajrWlP7nmZ3dSy+4r/ZzAUEHnQ8R70HsXlK+PgJsW68G4XYGZj0EY2EYATCAT6tAhmE0DXcC4faapcwMgAIfLb0kuzT9Qmw5uwAAIABJREFUSi+EfeALkSrpBovbrQDnkm8wAo8/E3i+CCsZ98NCpAp8cUekZyBavI4ET/TnaAk/RQCyAXy6uNSPA0i+wMeB6ePA5HFgZq2wpNGK3FUDAHmv3fSCe7afX8CB4UNEEOolVi/3obastNwJ9cO5BOBKEQMsAcifHWzRAigWWAlCn5K2bQYAOe1KMjTIR2kRUhKVS7IrLia0v+3xwHMZMCbYNP0KfG79zAqK5DxOvyEuWu6VD5KSHy2YAEQAfpaRdl5UkuUctIpBnCIIl4psD03FtIIP1ADAlBuJM47EqqUX3LX9kSBQcuuyftK78xUkHyQ+RLqHZ3Fv1KcgLj5kAQ1s0Qo6IA1nHhNLQzA8ZxvBXuNx8DcS5UYpNnoYxsCnUIqvZo0F3wPTMa7Hv53HOJVbS/l+5bumX7d+5WLE44hxIRJB2NMCqj9ixwuE90svWCaIA6bAp959EKeWChAyA0PTOV2unGMQveCO7bfqHbcS4rJR7Ewqnw5AWhLuImg2uFQAXAVs8RGmntW4+g2hB3P79L/EJ9zGvqrxOPibiVihAOgrWQOf/EBfBcsPNBBqW9Hv6zzGqFzmoXz3B9AePgXiq6bgiv4YOB9QHS8AfpkAFMMjrWAcQA0iO9XJiQyAnos2vV7ESHOOQfWCO7Zf7F40mZFQScRKAYBaSU6vAVcTgN7xXHiUFpDTMK2dFh56912BTiDcvpkATIXzCL4g3WXTZ4jpGfjoF/oihL+fx+0yWUABLwIwtYKKIabgCzHQvi2ggBKn0McEQDaKT5cGkIOo6SuyYzEfjQB0EM5nZgAPoxe8of3sgSqCQM3jkdFLvpRvR13+7UVRuhUFSavNO6otwp88ZZ3+t4M6HLtch6OT9AG/q9cmtf//gV1JDYcnQ2zY6/YakfSrU+Pg1M45NqPt3IEtoM7WFHokyrWKkooglCMWLYjiUXMtK3g8Uzd1WL3gDe3vRRCoUEYCwGtYFxxqgA2E/jI20F5hhmQod98BHNnlxOTig1aGiDanO21yV4DygWuB8YeB6fnC9WEtiKVVKeE0ZGiXWczeJoWMIig5a9V5DA1ANoKDeDylZ9NSXxyAsiKawrQqmCv2HVf5e8aRoxfc1n7xs+khItAUvojvyWryxVcWJZksVSyZoQRA3dcAoHzax4Gj2wtu6FVKM7gMgti02jbV476oUJJs1j/AbA1mQ3Pm8eTRsoZDtR+xZKCiEKmMXTIeXHPGdhYArX8FwG4DGMEnAHIK4yvT58nWC2b73cexaZgWWaEKgU1gjNbPP7PvOYGsUSBkv3hBtmRWNzxjTk9RWktvxp6POj0vARjY9sWkFel8RWxegjIF4RjwAOnZWMPBTGjqvHmszxJOBUD3xyznL2bqROvoP3N3q84jG4C7M/PpcvMBef0cvV9k6hXv+2Yno5QfGArRbaCC0mWv2YtF3ecerNDhkNZIIsXQRv5dlTtGADJSz2gEE1EJQM//026HdIEZLC8B6A0tk0g1Ja8DuzJdphS82QBEZj5dbj7gxZN5er/IZI+67pscgE7QaDOUMyC0Wb8+gXjuR4F5J6YsaXnFhBoAGEVvUhb60jISgCQnoh/OLBgvIrL8v7DdFkEYM5dtNg97tvz5zJqzdfIBmJlPl5sP+DJP5xtW7xffnzeh7H+Z+3+RpkyWT1YxuURJYVtx6T0fCTocouQV85VkHRIGegEuEv/YKpkA/JceVmL8kv6t5/9pu62tfiPWcFQVEa0DZ9WcLJEPwMx8uvfnjT9IgZyj94t/ldeA/S9tMaGa9SNdmsIxbvVscVJ1GScoMt4UPwhAsmMZ0aXzQBsvdGRBjQz0FUpEJRAJQOq4KAnBdz+sfiPJ3bOYn8fsykyVWMfiN3BOzckS+QDMzKe7OW/88aqQzsfE5kH1fvGjeQ0wADodmVGwOeiMsUqHrGOnS4UFy9P/wAEojkEnI+IqOIJQNLgpCXhcmLAtD/D+kgQE235L93tj+YBqgTX9BiCeW/NedT4AmQ+YkU/3sbzxBymQuZhm8g1T+QbV+wWFdjKO/Te2mEFNlCb6gPF708VJ1TXHgKd91GnZpDfi1k/gM2vqU3DUnCuBmNQe3P9vw6pe229KOvB0K1k+ZS+rnrfM2AlA3JMZtah/EZKZT3drxuDz1O/yxAwu9JgJxr3lQfR+8aa8Buy/wdWQZAVl+ZzCrG3q9c/YrkmHy3IRYryAAqAkEBIlopJxNNUbER+fA/H+/+AAdP9PmS9dazicJybm7mlB8nR2dI1HvgVkOlZGPt2nM29GCamcGZjAwlQ+vvrV+8X/zGsAAUiLVPp/wd+zaTMFWw+/kAA0GQQnpCw5mDsAMIrcRB5mC/+MAffTwgfwKY2KfmCZ6ZIkUShrxXxBX4yYaV8Hzmcn13jUA8CMfDqWYeQcSkhVOl8U6uxH7xekrsg49h8oiCENgC5TUG5vKxxT8f2aRtOtcAKQ1s8soPuOVUIwpchNlEEIOyNSIrrvv3hwnckWIZPZsnbcDyzTpvg3lU8mpZQqozyfK74aj3wAKh1LgrsD5tMxiz/nkGD1sHq/YNFOxkEAcuW7oqmXlisuQOT7VV2jwi/kTgj1RkoZhBje8Z83SCAEEJZW0C3gff8tADCt4VASaWIBK0HI9q8BF5yUAMzIp8tNx5Jg9bB6v/jdDPSRns0BWIZeUitIo9IhHmhXTvzCPQddccnZ76U1V/IvC4SBCFyg26DFNg7c++Mhhb6qiCikT7WVUmr6lYn2nRKyrdZ51GMBlZIc07GUBdMjny6XCiUmpA6j94vMZbgBMFo552pu27PXAqXTyAUQcitOQjAm9xX0N9pIwIPmSCmH5QuPqER0L4kDYgp9zOUL6fYxkbZcFceyAreAF3GlV+NRDwAz8uksnT3jiILVSmpWNlhMze+k94vMZfgGAPJeHDjpCrgM01Tdry9OzvmYAzAqLVWIwEShwzbRwwSEn+MqP6bQK5tZlWyhjCCCsC19Xv7gOnBRbgp7cu/5AOyVjqVMmA75dJZ9nHF0yohWNlhMxKnS+0XmMtwAmFq4imnYbrEqNJPc+9kfd62RKh0On8qV9hXZ9askEPgAfI56ziocUgVbzGT28lEtRMoKtg7lBHtznfZNA+CQ+XQWM8k4uglWK/NLYKzS+8U9GReXD0g/Tyvh4Ne17Yb4Zbr6g6y7/aNWcoPpjKRTsJIags5IJwkEAv6en05S6GUBfRWsUExZyVZVQCQwrgN7Wfdd41GPBczIp8ODeXfTSbBa6YYxlY8/p3q/udc3C+jTbtvqt2oadnB2m4oNgMn0W0p+hYWHWbwg9yU/0Kb9EIy+5y2hiCit4UgKyTeAkN8Valk4Le/ldlONRz4AWWBRM6fdIPfHstw/G+SE5rMnVQ/kA5AkLHS0ak7V7reXfhgACaBqDtD3e/nmc5k9kA/A80JReq+U38zGVp3ObJo/BvAOD3dtwiWar9zEHsgHIGlFubqSx7+Jja36anLLcDvvgwA+NDpDfILv+qlzuXwAXuSjrkKemlO2e3U1uWUYnL8dwB/5e2apca9LNv+vsQfyAUheX4VguB+mzIsaG9ntqxhF4Xbe3QD+n7/uHLAW9wQ1tblMRQ/UA0CaHC7plXEh+q4T0OWcfhleYTSHBK0EH/mi+fcRuKQn4I6fWpeoB4AevCz3HOOm9yb3F5mBlZBNclYCj1aRfyfrbgPCTR6AzK+vD4CyglX7jpmN7HY66d1E0ctdIrEEE4wEIMlam+Pk7YF6AMj7EwAVbU82vTerCwhAXopJN9zVI+AYrOeULLZgErY2x8nZA/kAJGWr0naUWdFpy2cT+oCWjpdjLFxE5UzYIBBpEUX5nLnlvAktb76SPVAfAOUHpiAMm96bsVtCAMaKALICMyxDq6cXfycA+b/mOLl6oF4AiqBRIEzBp7/X2Af0+fi1XIioMIlAI+AIPIGPmeROWV3j1Zuvyu2B+gHoFfZiDS2lC0LiY52WUADkQoTTMH1BFSYRdHoRfKSu5v9qrizMHYPT+vx6ARhSuDcAzzmDo5ZGHT1PAKYMwQxME2jiSo/gEwBrrq+u41ZOy++oD4BaCcsXTPiSI3ey8s4KGoG8QwCMFM+0ggQhLR0BF19SXuD/ayakz7uR0/TsMcxg3SjfqWNA0hsrga/ojaq/8WPcC+YIk4Ke4CMSuB2XVht1Oj8zIfXlU8BtU8DhmYRXWdfrdF1fgr3+S8At48CD04DVjXQSDO70PTUnaJ5uOCwsIIFHSSFy1pKPWCDsZxCpw8UVgKSPxLXM937OzxxAljzcPAbcswU4Qh4V3UN8mKoeKm/bu78IfKJQa8VD48CylHQiL3O3/qg5Rf30BKACMtJXjXKQcfBSK8Dfqc3KVCwuN2VFGRnm/yKZtq4Re5ifyQQgM2A+BeB3GHaZBo5MAIue0l7Kt3cC4xhw+5eL7TuCkJk1jBtyerbUfYG5ExjZ/pqrxE5fAOrOq5SmowVIrRp1IyT2R6+fg0bgVYG4CsyZe2UsaiOGKXr4Sfp9k8CxCYAFSKyvXeY1o1BxQux91yMtfsHPutgnnyUuUvhc0ZsgUXib+nVkq6+ZKaABIHsgVZnuwD9sVo66rrR4ImdhLGSQ8zPL/JgBQxeU1ouWkO9PTgDzbgmXxrzMkatl3keivfG5x4r4IRcz5BfkO5vEZ0kgpIfBZ8yKjlL17syy0tMNcOn9dl4Fy6dLFabj1Mpvow9Ify+I4Nlo9Xt+ZqU9VdJpqZh4QDDyxUyYOYJwHDg+DhgI/WUVZl7aSEt93+GO9Ia2iuZKOfA7lhp9JpvAVy61w2mOwO5hmCgMHC1H9O24gu6UD9jP+ZmbtLRaSsei9SL4XDPbAEh/kGQ/pSUcc0lbApFWb67lQUhpVnLBsoKqqZclFMmUtrxPcwxl3X7vOCAtYLSCcugFQmqhdssH7HU+RznjiOlYXA8wqkOfkItTAom+oKygca4ES8jY+N3z7fSG4hfUtp3ihUHruVSsFy1iRvNP+1N7A5BdJACmVpAgZPhGOyCigEjlPLudn7kvFtOxuB4g6OjD8UWLRkCZFRwrLCEXJQQhp2K+37lQeBCRX1A7KPQto1prFEmSYn2mB9EAsO+kYfk8KQhZF8yjVz5gp/MztyOUjiW9bCUhEBhKRCCgSis45uQ/PhX/xfFWMgOnWu2gxB0TF/o0kEZ/kCDM1Ts+3RHYnwVUL6XhDFrAswfIB6w6P1MrTulY0sum1VICglKwCEACqvQFCUK3gHcsFQCM/ILayqP1k9JshVqrncMalOYYvgcGAyCvIwuod8YBJQmZpmGJeyRwkGw4n8jJOJQNw3idLFhMRNB0SgASTJyKoy/4ieXCeFfJBUeV2SoAclFyR0bbm1OHTUiN0/DTAwD7zQeM52dqj8VsGEkVE2jKetG7AEhQ0frJAv6RC0trC1skl+IWlNinGLbSaZg7Mc0xfA8MbgF1LQV1z08A2G8+oM7PVF9Ms2GUE0gQyp+Lwu2yagLgR9ZaYpkSypQ6a6Q2DCqzpkvietXIFdoZfuieGmcOD0DeP0HEbBhNwYPmA/L8zJQsATAKnguEqS+XTqkE4YfWWwCUFZTksYAYwZfIBeN9Tw0cjOwu8gDIZqsoSSvhEeQDiiGYFoyWiSDRypWgi69UP5sc5fIcquSCNeXqe2X9ZAHfM7Khe2pcOB+AT41+aO5iRD3QAHBEHd9ctuiBBoANEkbaAw0AR9r9zcUbADYYGGkPNAAcafc3F28A2GBgpD3QAHCk3d9cvAFgg4GR9kADwJF2f3PxBoANBkbaAw0AR9r9zcUbADYYGGkPNAAcafc3F28A2GBgpD3QAHCk3d9cfOxqYJ2au9RdPtdp/khoEOlglDYT39V1PzQFXLsMXAlgt9PCxJKPbufyf8/KHIPfBPAZABf79Xc5XQ0ZQ1Q7360NbxoHrlsDvs5ZRsgo0une06by6X1mZvtP99PNAp4F4LsBXA5gjw8EGTeqaGF4QhzQF80CX7cAvGIdeDYAfhdZ2sTKUcVrpE7nd31N5gj8e2dIo2osk7NZpMdK0Z19tv+bJ4F9K8D1ACj8yfNSikHeg+5Z969m57Y/8/ZP+dPLKZhP/rcA+AYAF7g1oRUhEMUzFMt6eSJfX78b2DkPfM0i8GIAX+uWlAMppreUUErn8p2gzTl+2flg/sDbTkvIOik+CP20//mzwAXzwDcCuNTPJeFXpEpM6QEjIHm/zTF8D7T5gATYNQCe69aAloRTGulfBESBSYNyxR5g/Bhw7hKwZwl4vk9LnM5JmsBzUyDGAX3B8G23Mz/g9BuUa/0IiutfMkj7zwKmngAuXSvOpUvAWYBtF4BTnspIj/O8zPaf7qdvWITw6eZA0JLQEhKEGgxZhUj/dz3NzSKwbR44exnYvVKcy+mM5Km0JhxInUtrGkmzCPicg3W5LMGkQiZZTm9xS9Z3+4m2o8C5c4X15pTKW2Lb+fCx7WLtjYxzqiql29Icw/dA5SqYf6RTTilg+lYCIXmICKQ4IK9wxfSJY8AZK8CuFWDnanEua9ZTAMsaCog3Dt92O/MvnRGBtGwkqKRmMEkqCaa+2k+0LQDTh4rP88UHj74kF1WaATo9QHQ7mmP4HugYhtEKj4PB6ZQ+FS0hQahpldPya1kXTOqNY8DscgG+HavAttUCvBxInitrkgL4lcO33c7spBdM3kAuSnq2nx9gQfAh4JyVwvrxwel2z3p4aMlzH6DM2z/lT+8aB+Q/OT4EEqckWQSBkGD6EQKQnDCLwBSnYgcf32fXioGUFawC4esyu7CXXnDP9tOCsyD4KLB1rmgvX7zfbu2WG/Jtme0/3U/vKxBNAMoi0KcjkATCN3HOEr3UAjDrwOP71rXixYEkeKMFlSX8ocwR6KUXTJ7AaNE2tF8WfA4Ye7Kw1mwvX/yZn+eKnvcrfzC6IK/ObP/pfnpfAGQnySoISBqUXyAASS1AK0JfagWYcRDOrAF66TxZQU7jBOEbM0egH71gcgXSFZAV54NQtj9YcNIpbONCyh8Ygi8CVospApDuB63g92W2/3Q/vW8AsqM4gLIKBBIH8bcJwMCNMX68BTqBb8s6sGWtsIA6jwDk662ZI9CvXjA5A6NVa2t/IAicnC/aGV+8T74IQPm/AmGuBc+8/VP+9IEAyLslAKMV/LgAyIUInfnjwPQqMOOgI/DstQ5Mr7UAqMF8V2YXDqoXXNl+EQQ6N9v29aKdesUpWJZbAPyPme0/3U8fGIDssDid/pUASCvCaXgJmFguAEfgEXT27gDkuwaUg/nbmSMwjF7whvbLhSDL5TwwvdRqo9oqHzACkCB8U2b7T/fThwIgO01T1IMCoAZxGRhbKoAXQUcQTjkI+a4B5e5FzjGsXvCG9gdqrLGFYrpVG/UuHzBOw2/LaXxzbh43DKeoJwlAHqLndSs4udoCoIBHQE45EPk3DuitmYOQoxdctp8+rFwIWsGFYiFFoLGNchcEQC6e+OJC5J2Z7T/dTx/aApYdJ37AyJK/DIwvFxYvWr0IwEn/H1Opco5sveDUhSAAF4HJpQJkWixp6k2n4IYfMGf0amDHev2I8+l4/UbvNw8Eozw72wJePOJ8und7EkKj9ztKGA1/7WwATo44n45pWI3e7/AAGPWZ2QBkYHCU+XTMfGGQmYIxjd7vqOE0+PXzATjifDrKtTZ6v4MP/MlyRj4AR5xPF+VaqZLJF1UzKdPV6P2eLDDr3I58AI44n07ZMARbo/d78gMubWE+AEecT8e9YOn2Uheu0fs9tUCYD8AR59MpG6bR+z21gKfW1gNAz4geRT5dTEZo9H5PPRDmAzBmRM8BJzqfLiYjSKKr0fs9dYBYDwBHmE9XtRfMsIz04aQZ1+j9npygrA+Akqs8wfl0BCCTWRq935MTYL1aVQ8Ao1zlAnAi8+kEQGZTNXq/vYb75Pt/fQAcUT5dBGCj93vyAaxXi+oDoFLyT3A+3Rcavd9eY3xS/z8fgCQX/LPR3SOzkon55jg1eyAfgD8M4NcAPD6aDmBtB1e4NMDNcer1QD4AbwbwxwDe4UvRE9wHZG1gNSXDLlwLNcep1QP5APxzzwj9IIAPnXhT5ORc5EYCA9HNcWr1QD4AmRH6FQBMTSZZH98ZmD5Bh5g1FopiNns1x6nTA/kAvAfAEwDudnI+EvQxPfkEzYfaCXRSBluQMB7YHKdGD+QDsBNBH/9+AkAobqTADGK7Inw1x8nfA/kA7EXQt8kgrGAGMfBxZ5Cv5ji5eyAfgL0I+r68uR0QmUFoBQU8vfNvzXHy9kA9AORoMw7CdGQCjoUZDwL4kv/+8OZ1gJhBIjGDgMh3vTavBc035/RAPgD7JegjODfhiMwgoqeJwNPPTaB6Ezq/hq+sB4AcXeXEP+ZhGVo9vRimIQD5v5oPAZCupgDI9wg8/qz/1Xz55usyeyAfgMMQ9GU2Op4eAchpOIJQQEz/VuPlm6/K7IH6AMjgGzdl6QtyX5jWjpQFevF3lq3xf6yhrOlIAUgQCojR8gmE+l9Nl2++JrMH6gEgR5UA5KYsc+AZmCbQCDi+IvgEQMob1XBEAHIajgBMLV+0kCdws6aGu3zqfkV9AGTwjftg3JRVVRAtHQEXX/wbAcoXP5d5CID8GoJKvqDAloKOoIz/y7x8c3pmD4zhaqwjRzCYyQg5gr2ZgsFTLweWr8XQgsXjbwLWrnNtMlKgNoLBmZAa7PTCAuYIBlMvlWQswwr2UlUw45jdDSx8HbD+Ctd+HVCwePKbgJV9aASDM8Yg59TWFDysYPBtmYK91IbNOHaPA/M7gUXKXA4hWDz79cA8+W0aweCMURj+1HYfcBjBYO54MMY3tGDv8I3nmWSHOzYOLJ0LLPGXAQWLz3oB8MQUsEa16kYwOG8whjh74yJkUMFgbsNlCfYO0epwissVY34bsHw2sEIRkAEEi/dcU0SP5qhF1ggG5w3GEGdXr4L5134Fg4kAjuDQgr1DtDqcUmZETwArZwAru4BVqsv0KVh8/o3F4v0QXZBGMDhvMIY4u3MYhv95Zh+Cu1xBcxuOU/HfeDIq5cv7FuwdotXhlCBXjOXZAnyrO4BV6in0IVh8wStLuWCsUAyvEQzOG5ABz+4eB+R/ewnu/kOP/3G/l4kJTERlljQtIot2e53/IwO2OPl4FLtcnCqAp9cahT56CBZf+LpSLhhz1N5qBIPzBmTAs/sLRHcTDKbiNHdBGGymOC/3hglEvgjAnoK9A7Y4+XgiV4zVWYDAs/etxaubYPFFP1QkLtCIP8neaASD8wZkwLP7AyC/tJNg8L/xLNBu+YBdBXsHbHEFAINcMVamgdWZAoRrfPdXm8KitLdmgYveWAq+2y7iMqfuRjA4b1AGOLt/APJLqwSD3+y5T1yI0AoSbAxMMzGV1o8/My2ro2DvAK2t+GgiV4zj4+3AIwDXtwBrVJeuECze+9aW4Dut4PxkIhYsdetGMDhvoDqcPRgA+SWp4O4veQ5Uv/mAGwR78+6rQq4Yq9PAOi2fA4/vBkKudKVU7VZw77uKvWFuZbtcMNb5v0YwOG9g+jx7cADyi6Pg7gccgIxlcA5TKhaD01yYKBmVFpBZMfx/m2Bvny3t8LGqoqTliZbVI+gMgHwnMAnCIFi897cLAAZ6QyzFzzSCwXkD1OPs4QDIL5XgLmk5JHk/SD5gKdibd38VcsVYGmuBTaAzEHLHgyCcaokB7/1IkUET5IKxwF5pBIPzBqbPs4cHIC/AaeqvPL9pmHxAE+zts6VdLCD/lcgVY3UyWD0Bj1ZwqgCggXA7sPfWAoAJvaEtZBrB4Lyx6efsPADyCtmCvf00s/NnOsgVY3m8BTRZPZuGBUACdArY+5lWDqGmYbIrLHEx0ggG5w1OH2fnA7CPizQfaXqgUw80AGywMdIeaAA40u5vLt4AsMHASHugAeBIu7+5eAPABgMj7YEGgCPt/ubiDQAbDIy0BxoAjrT7m4s3AGwwMNIeaAA40u5vLt4AsMHASHugAeBIu7+5eAPABgMj7YEGgCPt/ubiDQAbDIy0B8ZYNMbkX+ZekpuIiOQrPar+xs889HJg6jZg5jAwvVZ8B+ll9PlO5/Fc/o+ECjnHfi8zYfkvM5ulmp4qJXVqx5deD4zfAkw/CGxdAZgoHfuh131QkaI5hu8Bs4Ds8B0AWLnIRGCBsFfn87JffDMwdjOw5R5g8giwZa34jnQQUwDo99wBfJ4TM7COiNdlaj2rA/jeV/vfDeATAP4UGH8I2Lrc6gc+SHqY4oMZ74VSKM0xfA+UUzB/oBUUCKMl6zSQ/PsXqZD5KQC/A0w/DEwcAcYXgYnVwppwADuBkefnCim90FmBWXwnK87Uen53BI8sbuwqaz9p5UgnQhBS+ZN1zE8Ak0utviCwq8DI8/nx5hi+Bzb4gJzKZE1SEFZZgS9/2pWR/gTAJ4HJQ8DEMWB8ARhfBsaWCwDquwQKvvNgHXvOcYVbPFJPkw+dDxC/W1Y4tWDpw/Rlgo4lo1T4/KxTihDNpJwj3/UiMLXemprjffC7eWpzDN8DlYsQDiKtVxzEqoHkyX9HRizW+nIgaQnvAiaeBCbmC0s4tgSMu2rMePAR9X252jXklaTFU108K0MHav/nvJ6ZxVVk9OI7GR2IZoGQNc/HgbHgIwqILIVujuF7oOMqWFawCoRxkfEIB5CWgkREBCNf9wMTc8A4QciBWyoGz16rwNgaML5eWKpctYZL3N+TWLX0gvtuP0HHk2n16JDyxXmVhfU0qywbJbr5GSuXKxA/sV5Y9UYWdnjwyS3qKKgarWA69Wg6fjQOIK0HadnIjPVFB+AiME4AuiUkCFnESyCSkmAuU7Cjm15wX+2X2ifBRn9A8mKcW2UFjULVQcgVDl80u40SYh763FfvquhLCxitoBYUsoJfjXKttByMq9CKcHn4sPuCbgXNJwyWkECcz5Q376UX3LNncZyQAAADEklEQVT9fFgIJs6lBBwtn3Tt6FpIz4RWnuQxPh2XIGzm4CwQ9hWIFgBTK0gQHiIAJddKq0ELQh+KL1qUR4MvSEsoENIKrgALHNiMox+94K7tl9qnnMio8MSf6SNwGpYVjCDk/Ju7isq496fCqX0BkDeqlWwKwic1gAQSpzGREnFgREz01eALLvvq2Kfi45m6cf3qBXdsfxRbJMho8dimqOhEK8cXQRr9QVpvPoDNMXQP9A3ACELFxPh+jACkP0fLIKFCCRRqKuPUdqjlC9o07JZwKVNHeBC94DQcZO0XAAkmgotAk9QYrR9f/BvByYfMSATDVMzwTXMM3QMDAVAgVHCZ7/MaQK4QZUHiNCbBQlqUw74YCb7gcmYkelC9YFlwvVv7RRAorTuBkECU9asCID9/x9B935zYzyKkqpfiNHxcA0gLQgvBAaPVkCqm3h2AtC5m/RyEqzw/4xhGL3hD++MmslgqCbgUfLKAcRrmTlBzDN0DA1tAXUlWcDm1IOIIJAjlT/Fd05lbFQFwjdtgGcewesFt7Rc/Gx8iWjUCjGCT1YvWT1MwgUqrf3NG45tTbcu0aximWx9xENcEQHGbcYAEwtSXSqY0gnCdgeuMI0cvuGx/FUGgFhwEYrR80QckWN+X0fjm1DwAWv8RgJFilJZBznz0pQg+AZAAlVWh1GvGka0XzB0cCQi30aSGVa9AF62fLOB7MhrfnJoPwPER59Px+o3e76mL5Kwp2G57xPl0kxc3er+nLvyKtLmhfUC78RHn081ONnq/pzcAR5xPR9mRRu/31IVgvgUccT4dNaobvd/TGYAjzqejumqj93s6A3DE+XRUg2VSCjdaGr3fUw+I+VPwiPPpqJjO8J1Nw43e7ymHwHoAKMFd7QErAeEE5NNJMb3R+z3lsGcNzgfgiPPpomJ6o/d76oGwPgCOKJ8uKqY3er+nKwBHmE+noqRG7/fUA199U/AI8+kEwEbv93QHoEhZTnA+nYqSGr3fBoAtaiqBUImdm5hPJwA2er+nKwBHnE+X1gUzSbnR+z11wPj/AeCpPDD3t7rvAAAAAElFTkSuQmCC"
vendor: 3,122 bytes, line 5993
5993,CI={LOW:0,MEDIUM:1,HIGH:2,ULTRA:3},CO=class extends Cl{constructor({preset:e=CI.MEDIUM,edgeDetectionMode:t=2,predicationMode:i=0}={}){let r,s;super("SMAAEffect","uniform sampler2D weightMap;varying vec2 vOffset0;varying vec2 vOffset1;void movec(const in bvec2 c,inout vec2 variable,const in vec2 value){if(c.x){variable.x=value.x;}if(c.y){variable.y=value.y;}}void movec(const in bvec4 c,inout vec4 variable,const in vec4 value){movec(c.xy,variable.xy,value.xy);movec(c.zw,variable.zw,value.zw);}void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec4 a;a.x=texture2D(weightMap,vOffset0).a;a.y=texture2D(weightMap,vOffset1).g;a.wz=texture2D(weightMap,uv).rb;vec4 color=inputColor;if(dot(a,vec4(1.0))>=1e-5){bool h=max(a.x,a.z)>max(a.y,a.w);vec4 blendingOffset=vec4(0.0,a.y,0.0,a.w);vec2 blendingWeight=a.yw;movec(bvec4(h),blendingOffset,vec4(a.x,0.0,a.z,0.0));movec(bvec2(h),blendingWeight,a.xz);blendingWeight/=dot(blendingWeight,vec2(1.0));vec4 blendingCoord=blendingOffset*vec4(texelSize,-texelSize)+uv.xyxy;color=blendingWeight.x*texture2D(inputBuffer,blendingCoord.xy);color+=blendingWeight.y*texture2D(inputBuffer,blendingCoord.zw);}outputColor=color;}",{vertexShader:"varying vec2 vOffset0;varying vec2 vOffset1;void mainSupport(const in vec2 uv){vOffset0=uv+texelSize*vec2(1.0,0.0);vOffset1=uv+texelSize*vec2(0.0,1.0);}",blendFunction:Cs.NORMAL,attributes:Co.CONVOLUTION|Co.DEPTH,uniforms:new Map([["weightMap",new lD(null)]])}),arguments.length>1&&(r=arguments[0],s=arguments[1],arguments.length>2&&(e=arguments[2]),arguments.length>3&&(t=arguments[3])),this.renderTargetEdges=new id(1,1,{minFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTargetEdges.texture.name="SMAA.Edges",this.renderTargetWeights=this.renderTargetEdges.clone(),this.renderTargetWeights.texture.name="SMAA.Weights",this.uniforms.get("weightMap").value=this.renderTargetWeights.texture,this.clearPass=new E9(!0,!1,!1),this.clearPass.overrideClearColor=new ii(0),this.clearPass.overrideClearAlpha=1,this.edgeDetectionPass=new Cm(new Eq),this.edgeDetectionMaterial.edgeDetectionMode=t,this.edgeDetectionMaterial.predicationMode=i,this.weightsPass=new Cm(new E1);let a=new o1;a.onLoad=()=>{let e=new ih(r);e.name="SMAA.Search",e.magFilter=1003,e.minFilter=1003,e.generateMipmaps=!1,e.needsUpdate=!0,e.flipY=!0,this.weightsMaterial.searchTexture=e;let t=new ih(s);t.name="SMAA.Area",t.magFilter=1006,t.minFilter=1006,t.generateMipmaps=!1,t.needsUpdate=!0,t.flipY=!1,this.weightsMaterial.areaTexture=t,this.dispatchEvent({type:"load"})},a.itemStart("search"),a.itemStart("area"),void 0!==r&&void 0!==s?(a.itemEnd("search"),a.itemEnd("area")):"u">typeof Image&&(r=new Image,s=new Image,r.addEventListener("load",()=>a.itemEnd("search")),s.addEventListener("load",()=>a.itemEnd("area")),r.src=CP,s.src=CD),this.applyPreset(e)}get edgesTexture(){return this.renderTargetEdges.texture}getEdgesTexture(){return this.edgesTexture}get weightsTexture(){return this.renderTargetWeights.texture}getWeightsTexture(){return this.weightsTexture}get edgeDetectionMaterial(){return this.edgeDetectionPass.fullscreenMaterial}
5993get colorEdgesMaterial(){return this.edgeDetectionMaterial}getEdgeDetectionMaterial(){return this.edgeDetectionMaterial}get weightsMaterial(){return this.weightsPass.fullscreenMaterial}getWeightsMaterial(){return this.weightsMaterial}setEdgeDetectionThreshold(e){this.edgeDetectionMaterial.edgeDetectionThreshold=e}setOrthogonalSearchSteps(e){this.weightsMaterial.orthogonalSearchSteps=e}applyPreset(e){let t=this.edgeDetectionMaterial,i=this.weightsMaterial;switch(e){case CI.LOW:t.edgeDetectionThreshold=.15,i.orthogonalSearchSteps=4,i.diagonalDetection=!1,i.cornerDetection=!1;break;case CI.MEDIUM:t.edgeDetectionThreshold=.1,i.orthogonalSearchSteps=8,i.diagonalDetection=!1,i.cornerDetection=!1;break;case CI.HIGH:t.edgeDetectionThreshold=.1,i.orthogonalSearchSteps=16,i.diagonalSearchSteps=8,i.cornerRounding=25,i.diagonalDetection=!0,i.cornerDetection=!0;break;case CI.ULTRA:t.edgeDetectionThreshold=.05,i.orthogonalSearchSteps=32,i.diagonalSearchSteps=16,i.cornerRounding=25,i.diagonalDetection=!0,i.cornerDetection=!0}}setDepthTexture(e,t=3200){this.edgeDetectionMaterial.depthBuffer=e,this.edgeDetectionMaterial.depthPacking=t}update(e,t,i){this.clearPass.render(e,this.renderTargetEdges),this.edgeDetectionPass.render(e,t,this.renderTargetEdges),this.weightsPass.render(e,this.renderTargetEdges,this.renderTargetWeights)}setSize(e,t){this.edgeDetectionMaterial.setSize(e,t),this.weightsMaterial.setSize(e,t),this.renderTargetEdges.setSize(e,t),this.renderTargetWeights.setSize(e,t)}dispose(){let{searchTexture:e,areaTexture:t}=this.weightsMaterial;null!==e&&null!==t&&(e.dispose(),t.dispose()),super.dispose()}static get searchImageDataURL(){return CP}static get areaImageDataURL(){return CD}},CR=`uniform float offset;uniform float darkness;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){const vec2 center=vec2(0.5);vec3 color=inputColor.rgb;
5994#if VIGNETTE_TECHNIQUE == 0
5995float d=distance(uv,center);color*=smoothstep(0.8,offset*0.799,d*(darkness+offset));
5996#else
5997vec2 coord=(uv-center)*vec2(offset);color=mix(color,vec3(1.0-darkness),dot(coord,coord));
5998#endif
5999outputColor=vec4(color,inputColor.a);}`,CL={DEFAULT:0,ESKIL:1},CB=class extends Cl{constructor({blendFunction:e=Cs.NORMAL,technique:t=CL.DEFAULT,eskil:i=!1,offset:r=.5,darkness:s=.5}={}){super("VignetteEffect",CR,{blendFunction:e,defines:new Map([["VIGNETTE_TECHNIQUE",t.toFixed(0)]]),uniforms:new Map([["offset",new lD(r)],["darkness",new lD(s)]])})}get technique(){return Number(this.defines.get("VIGNETTE_TECHNIQUE"))}set technique(e){this.technique!==e&&(this.defines.set("VIGNETTE_TECHNIQUE",e.toFixed(0)),this.setChanged())}get eskil(){return this.technique===CL.ESKIL}set eskil(e){this.technique=e?CL.ESKIL:CL.DEFAULT}getTechnique(){return this.technique}setTechnique(e){this.technique=e}get offset(){return this.uniforms.get("offset").value}set offset(e){this.uniforms.get("offset").value=e}getOffset(){return this.offset}setOffset(e){this.offset=e}get darkness(){return this.uniforms.get("darkness").value}set darkness(e){this.uniforms.get("darkness").value=e}getDarkness(){return this.darkness}setDarkness(e){this.darkness=e}};function Cz(e,t,i,r){var s;return(s=e+(t-e)*.75)+(i+(r-i)*.75-s)*.875}new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,0,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([1,0,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([0,1,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([0,1,1]),new Float32Array([1,1,1]),new Float32Array(2),new Float32Array(2),new Float32Array([0,-.25,.25,-.125,.125,-.375,.375]),new Float32Array([0,0]),new Float32Array([.25,-.25]),new Float32Array([-.25,.25]),new Float32Array([.125,-.125]),new Float32Array([-.125,.125]),new Uint8Array([0,0]),new Uint8Array([3,0]),new Uint8Array([0,3]),new Uint8Array([3,3]),new Uint8Array([1,0]),new Uint8Array([4,0]),new Uint8Array([1,3]),new Uint8Array([4,3]),new Uint8Array([0,1]),new Uint8Array([3,1]),new Uint8Array([0,4]),new Uint8Array([3,4]),new Uint8Array([1,1]),new Uint8Array([4,1]),new Uint8Array([1,4]),new Uint8Array([4,4]),new Uint8Array([0,0]),new Uint8Array([1,0]),new Uint8Array([0,2]),new Uint8Array([1,2]),new Uint8Array([2,0]),new Uint8Array([3,0]),new Uint8Array([2,2]),new Uint8Array([3,2]),new Uint8Array([0,1]),new Uint8Array([1,1]),new Uint8Array([0,3]),new Uint8Array([1,3]),new Uint8Array([2,1]),new Uint8Array([3,1]),new Uint8Array([2,3]),new Uint8Array([3,3]),Cz(0,0,0,0),new Float32Array([0,0,0,0]),Cz(0,0,0,1),new Float32Array([0,0,0,1]),Cz(0,0,1,0),new Float32Array([0,0,1,0]),Cz(0,0,1,1),new Float32Array([0,0,1,1]),Cz(0,1,0,0),new Float32Array([0,1,0,0]),Cz(0,1,0,1),new Float32Array([0,1,0,1]),Cz(0,1,1,0),new Float32Array([0,1,1,0]),Cz(0,1,1,1),new Float32Array([0,1,1,1]),Cz(1,0,0,0),new Float32Array([1,0,0,0]),Cz(1,0,0,1),new Float32Array([1,0,0,1]),Cz(1,0,1,0),new Float32Array([1,0,1,0]),Cz(1,0,1,1),new Float32Array([1,0,1,1]),Cz(1,1,0,0),new Float32Array([1,1,0,0]),Cz(1,1,0,1),new Float32Array([1,1,0,1]),Cz(1,1,1,0),new Float32Array([1,1,1,0]),Cz(1,1,1,1),new Float32Array([1,1,1,1]);var CF=class{constructor(e,t){this.enabled=!1,this.effect=new e(t),Object.defineProperty(this,"opacity",{enumerable:!0,set(e){this.effect.blendMode.opacity.value=e},get(){return this.effect.blendMode.opacity.value}}),Object.defineProperty(this,"blendFunction",{enumerable:!0,set(e){this.effect.blendMode.setBlendFunction(Number(e))},get(){return this.effect.blendMode.blendFunction}}),this.blendFunction=Cs.NORMAL}},CN=class extends CF{constructor(){super(Cx),this.blendFunction=Cs.SCREEN}set intensity(e){this.effect.intensity=e}get intensity(){return this.effect.intensity}set luminanceThreshold(e){this.effect.luminanceMaterial.threshold=e}get luminanceThreshold(){return this.effect.luminanceMaterial.threshold}set luminanceSmoothing(e){this.effect.luminanceMaterial.smoothing=e}get luminanceSmoothing(){return this.effect.luminanceMaterial.smoothing}set blurScale(e){this.effect.blurPass.scale=e}get blurScale(){return this.effect.blurPass.scale}set kernelSize(e){this.effect.blurPass.kernelSize=e}get kernelSize(){return this.effect.blurPass.kernelSize}},Ck=class extends CF{constructor(){super(Cb)}set contrast(e){this.effect.uniforms.get("contrast").value=e}get contrast(){return this.effect.uniforms.get("contrast").value}set brightness(e){this.effect.uniforms.get("brightness").value=e}get brightness(){return this.effect.uniforms.get("brightness").value}},CU=class extends CF{constructor(){super(CS),this.effect.offset=new tQ(.01,.01)}set offset(e){this.effect.offset.set(e[0]/1e3,e[1]/1e3)}get offset(){return[1e3*this.effect.offset.x,1e3*this.effect.offset.y]}},CV=class extends CF{constructor(){super(Cw)}},Cj=class extends CF{constructor(){super(CM),this._hue=0}set hue(e){this._hue=e,this.effect.setHue(e)}get hue(){return this._hue}set saturation(e){this.effect.uniforms.get("saturation").value=e}get saturation(){return this.effect.uniforms.get("saturation").value}},CG=class extends CF{constructor(){super(CC),this.blendFunction=Cs.OVERLAY}},CH=class extends CF{constructor(){super(CB)}get eskil(){return this.effect.eskil}
vendor: 5,773 bytes, lines 5999-6026
5999set eskil(e){this.effect.eskil=e}get darkness(){return this.effect.uniforms.get("darkness").value}set darkness(e){this.effect.uniforms.get("darkness").value=e}get offset(){return this.effect.uniforms.get("offset").value}set offset(e){this.effect.uniforms.get("offset").value=e}},CW=class extends CF{constructor(e){super(CA)}set focalLength(e){this.effect.circleOfConfusionMaterial.uniforms.focalLength.value=e/2e3}get focalLength(){return this.effect.circleOfConfusionMaterial.uniforms.focalLength.value}set focusDistance(e){this.effect.circleOfConfusionMaterial.uniforms.focusDistance.value=this.isPerspectiveCamera?e/2e3:(e+992)/2e3}get focusDistance(){return this.effect.circleOfConfusionMaterial.uniforms.focusDistance.value}get bokehScale(){return this.effect.bokehScale}set bokehScale(e){this.effect.bokehScale=e}setCamera(e){let t=!1;(e.isPerspectiveCamera&&!1===this.isPerspectiveCamera||!e.isPerspectiveCamera&&!0===this.isPerspectiveCamera)&&(t=!0),e.isPerspectiveCamera?(this.effect.circleOfConfusionMaterial.adoptCameraSettings(e.perspCamera),this.isPerspectiveCamera=!0):(this.effect.circleOfConfusionMaterial.adoptCameraSettings(e),this.isPerspectiveCamera=!1),t&&this.effect.setChanged()}},Cq=class extends CF{constructor(){super(CT)}get granularity(){return this.effect.getGranularity()}set granularity(e){this.effect.setGranularity(e)}},CX=`#define GLSLIFY 1
6000varying vec2 vUv;varying vec2 vTexCoords[9];uniform vec2 resolution;void main(){vUv=position.xy*0.5+0.5;vec2 texelSize=vec2(1.0)/resolution;vTexCoords[0]=vUv+vec2(-texelSize.x,-texelSize.y);vTexCoords[1]=vUv+vec2(0.0,-texelSize.y);vTexCoords[2]=vUv+vec2(texelSize.x,-texelSize.y);vTexCoords[3]=vUv+vec2(-texelSize.x,0.0);vTexCoords[4]=vUv+vec2(0.0,0.0);vTexCoords[5]=vUv+vec2(texelSize.x,0.0);vTexCoords[6]=vUv+vec2(-texelSize.x,texelSize.y);vTexCoords[7]=vUv+vec2(0.0,texelSize.y);vTexCoords[8]=vUv+vec2(texelSize.x,texelSize.y);gl_Position=vec4(position.xy,1.0,1.0);}`,CY=`#define GLSLIFY 1
6001#include <common>
6002varying vec2 vUv;varying vec2 vTexCoords[9];uniform sampler2D inputBuffer;uniform sampler2D historyBuffer;uniform sampler2D velocityBuffer;uniform sampler2D depthBuffer;uniform vec2 resolution;
6003#define USE_YCOCG
6004#define USE_CATMULL_ROM
6005const float feedback_min=0.5;const float feedback_max=0.95;vec3 RGB_YCoCg(vec3 c){return vec3(c.x/4.0+c.y/2.0+c.z/4.0,c.x/2.0-c.z/2.0,-c.x/4.0+c.y/2.0-c.z/4.0);}vec3 YCoCg_RGB(vec3 c){return clamp(vec3(c.x+c.y-c.z,c.x+c.z,c.x-c.y-c.z),vec3(0.0),vec3(1.0));}vec4 sample_color(sampler2D tex,vec2 uv){
6006#ifdef USE_YCOCG
6007vec4 c=texture(tex,uv);return vec4(RGB_YCoCg(c.rgb),c.a);
6008#else
6009return texture(tex,uv);
6010#endif
6011}vec4 sample_catmull_rom(sampler2D tex,vec2 uv,vec2 texSize){vec2 samplePos=uv*texSize;vec2 texPos1=floor(samplePos-0.5)+0.5;vec2 f=samplePos-texPos1;vec2 w0=f*(-0.5+f*(1.0-0.5*f));vec2 w1=1.0+f*f*(-2.5+1.5*f);vec2 w2=f*(0.5+f*(2.0-1.5*f));vec2 w3=f*f*(-0.5+0.5*f);vec2 w12=w1+w2;vec2 offset12=w2/(w1+w2);vec2 texPos0=texPos1-1.0;vec2 texPos3=texPos1+2.0;vec2 texPos12=texPos1+offset12;texPos0/=texSize;texPos3/=texSize;texPos12/=texSize;vec4 result=vec4(0.0);result+=texture2D(tex,vec2(texPos12.x,texPos0.y))*w12.x*w0.y;result+=texture2D(tex,vec2(texPos0.x,texPos12.y))*w0.x*w12.y;result+=texture2D(tex,vec2(texPos12.x,texPos12.y))*w12.x*w12.y;result+=texture2D(tex,vec2(texPos3.x,texPos12.y))*w3.x*w12.y;result+=texture2D(tex,vec2(texPos12.x,texPos3.y))*w12.x*w3.y;return result;}vec3 choose_motion_vector(){
6012#ifdef CHOOSE_LONGEST_MOTION_VECTOR
6013float longest=-1.0;vec3 v_choose=vec3(-1.0);for(int i=0;i<9;i++){vec3 v=texture2D(velocityBuffer,vTexCoords[i]).rgb;float l=length(v.xy);if(l>longest){longest=l;v_choose=v;}}return v_choose;
6014#else
6015float closest_depth=1000.0;vec2 closest_uv_offset=vec2(0.0);for(int i=0;i<9;i++){float neighbor_depth=texture2D(depthBuffer,vTexCoords[i]).r;if(neighbor_depth<closest_depth){closest_uv_offset=vTexCoords[i];closest_depth=neighbor_depth;}}return texture2D(velocityBuffer,closest_uv_offset).rgb;
6016#endif
6017}vec4 clipAabb(vec3 aabb_min,vec3 aabb_max,vec4 avg,vec4 input_texel){const float FLT_EPS=0.00000001;vec3 p_clip=0.5*(aabb_max+aabb_min);vec3 e_clip=0.5*(aabb_max-aabb_min)+FLT_EPS;vec4 v_clip=input_texel-vec4(p_clip,avg.w);vec3 v_unit=v_clip.xyz/e_clip;vec3 a_unit=abs(v_unit);float ma_unit=max(a_unit.x,max(a_unit.y,a_unit.z));if(ma_unit>1.0){return vec4(p_clip,avg.w)+v_clip/ma_unit;}else{return input_texel;}}vec3 clip_aabb_variance(in vec3 cOld,in vec3 cNew,in vec3 centre,in vec3 halfSize){if(all(lessThanEqual(abs(cOld-centre),halfSize))){return cOld;}vec3 dir=(cNew-cOld);vec3 near=centre-sign(dir)*halfSize;vec3 tAll=(near-cOld)/dir;float t=0.0001;for(int i=0;i<3;i++){if(tAll[i]>=0.0&&tAll[i]<t){t=tAll[i];}}if(t>=0.0001){return cOld;}return cOld+dir*t;}void main(){vec3 v=choose_motion_vector();vec2 velocity=v.rg;vec2 previousPixelPos=vUv-velocity;vec4 currentColor=sample_color(inputBuffer,vUv);
6018#ifdef USE_CATMULL_ROM
6019vec4 previousColor=sample_catmull_rom(historyBuffer,previousPixelPos,resolution);
6020#else
6021vec4 previousColor=sample_color(historyBuffer,previousPixelPos);
6022#endif
6023#ifdef USE_YCOCG
6024previousColor=vec4(RGB_YCoCg(previousColor.rgb),previousColor.a);
6025#endif
6026vec4 ctl=sample_color(inputBuffer,vTexCoords[0]);vec4 ctc=sample_color(inputBuffer,vTexCoords[1]);vec4 ctr=sample_color(inputBuffer,vTexCoords[2]);vec4 cml=sample_color(inputBuffer,vTexCoords[3]);vec4 cmc=sample_color(inputBuffer,vTexCoords[4]);vec4 cmr=sample_color(inputBuffer,vTexCoords[5]);vec4 cbl=sample_color(inputBuffer,vTexCoords[6]);vec4 cbc=sample_color(inputBuffer,vTexCoords[7]);vec4 cbr=sample_color(inputBuffer,vTexCoords[8]);vec4 cmin=min(ctl,min(ctc,min(ctr,min(cml,min(cmc,min(cmr,min(cbl,min(cbc,cbr))))))));vec4 cmax=max(ctl,max(ctc,max(ctr,max(cml,max(cmc,max(cmr,max(cbl,max(cbc,cbr))))))));
6026vec4 cavg=(ctl+ctc+ctr+cml+cmc+cmr+cbl+cbc+cbr)/9.0;vec4 cmin5=min(ctc,min(cml,min(cmc,min(cmr,cbc))));vec4 cmax5=max(ctc,max(cml,max(cmc,max(cmr,cbc))));vec4 cavg5=(ctc+cml+cmc+cmr+cbc)/5.0;cmin=0.5*(cmin+cmin5);cmax=0.5*(cmax+cmax5);cavg=0.5*(cavg+cavg5);
6027#ifdef USE_YCOCG
6028vec2 chroma_extent=vec2(0.25*0.5*(cmax.r-cmin.r));vec2 chroma_center=currentColor.gb;cmin.yz=chroma_center-chroma_extent;cmax.yz=chroma_center+chroma_extent;cavg.yz=chroma_center;
6029#endif
6030vec4 previousColorClipped=clamp(previousColor,cmin,cmax);
6031#ifdef LUMINANCE_DIFFERENCES
6032#ifdef USE_YCOCG
6033float lum0=currentColor.r;float lum1=previousColorClipped.r;
6034#else
6035float lum0=luminance(currentColor.rgb);float lum1=luminance(previousColorClipped.rgb);
6036#endif
6037float unbiased_diff=abs(lum0-lum1)/max(lum0,max(lum1,0.2));float unbiased_weight=1.0-unbiased_diff;float unbiased_weight_sqr=unbiased_weight*unbiased_weight;float k_feedback=mix(feedback_min,feedback_max,unbiased_weight_sqr);vec4 result=mix(currentColor,previousColorClipped,vec4(k_feedback));
6038#else
6039const float alpha=0.1;vec4 result=mix(currentColor,previousColorClipped,1.0-alpha);
6040#endif
6041#ifdef USE_YCOCG
6042gl_FragColor=vec4(YCoCg_RGB(result.rgb).rgb,result.a);
6043#else
6044gl_FragColor=result;
6045#endif
6046}`,CQ=`#define GLSLIFY 1
6047varying vec2 vUv;void main(){gl_Position=vec4(position.xy,1.0,1.0);vUv=position.xy*0.5+0.5;}`,CK=`#define GLSLIFY 1
6048layout(location=1)out vec4 gVelocity;varying vec2 vUv;uniform sampler2D inputBuffer;void main(){gl_FragColor=texture2D(inputBuffer,vUv);gVelocity=vec4(0.0);}`,CZ=class extends r5{constructor(){super({name:"PassthroughMaterial",uniforms:{inputBuffer:new lD(null)},blending:0,depthWrite:!1,depthTest:!1,vertexShader:CQ,fragmentShader:CK})}set inputBuffer(e){this.uniforms.inputBuffer.value=e}},CJ=class extends E4{constructor(){super("TAAResolvePass"),this.MRTCompatible=!0,this.needsSwap=!1,this.passThroughMaterial=new CZ,this.resolutionVector=new tQ,this.resolveMaterial=new r5({name:"TAAResolveMaterial",uniforms:{inputBuffer:new lD(null),historyBuffer:new lD(null),velocityBuffer:new lD(null),depthBuffer:new lD(null),resolution:new lD(new tQ)},blending:0,depthWrite:!1,depthTest:!1,vertexShader:CX,fragmentShader:CY}),this.historyRenderTarget=new id(1024,1024,{minFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.historyRenderTarget.texture.name="TAA.History",this.resultRenderTarget=new id(1024,1024,{minFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.resultRenderTarget.texture.name="TAA.Output"}setSize(e,t){this.historyRenderTarget.setSize(e,t),this.resultRenderTarget.setSize(e,t)}render(e,t){this.fullscreenMaterial=this.resolveMaterial,this.resolveMaterial.uniforms.inputBuffer.value=t.texture[0],this.resolveMaterial.uniforms.velocityBuffer.value=t.texture[1],this.resolveMaterial.uniforms.depthBuffer.value=t.depthTexture,this.resolveMaterial.uniforms.historyBuffer.value=this.historyRenderTarget.texture,this.resolveMaterial.uniforms.resolution.value.set(t.width,t.height),e.setRenderTarget(this.resultRenderTarget),e.render(this.scene,this.camera),this.fullscreenMaterial=this.passThroughMaterial,this.passThroughMaterial.inputBuffer=this.resultRenderTarget.texture,e.setRenderTarget(this.historyRenderTarget),e.render(this.scene,this.camera);let i=this.renderToScreen?null:t;this.fullscreenMaterial=this.passThroughMaterial,this.passThroughMaterial.inputBuffer=this.resultRenderTarget.texture,e.setRenderTarget(i),e.render(this.scene,this.camera)}dispose(){this.resultRenderTarget.dispose(),this.historyRenderTarget.dispose(),this.resolveMaterial.dispose(),this.passThroughMaterial.dispose()}},C$=class extends E4{constructor(e,t,i){super("TransmissionPass",void 0,t),this.MRTCompatible=!0,this.depthPass=new Cr(e,t,{renderTarget:i.transmissionDepthTarget}),this.passThroughMaterial=new CZ,this.splineScene=e,this.needsSwap=!1}updatePasses(e){this.passThroughMaterial=new CZ,this.depthPass=new Cr(this.splineScene,this.camera,{renderTarget:e.transmissionDepthTarget})}setCamera(e){this.camera=e}setScene(e){this.splineScene=e}render(e,t,i){let r=this.camera.layers.mask;e.setRenderTarget(e.transmissionRenderTarget),this.fullscreenMaterial=this.passThroughMaterial,this.passThroughMaterial.inputBuffer=t.texture[0],e.clear(),e.render(this.scene,this.camera),this.camera.layers.disable(3),this.depthPass.render(e,t,i),e.shadowMap.needsUpdate=!1,e.shadowMap.autoUpdate=!1;let s=this.renderToScreen?null:t;this.camera.layers.set(3),e.setRenderTarget(s),e.render(this.splineScene,this.camera),this.camera.layers.mask=r}},C0=new nb,C1=new r5({transparent:!0,vertexShader:`
6049        void main() {
6050            gl_Position = vec4(0.0);
6051        }
6052    `,fragmentShader:`
6053        layout(location = 1) out vec4 gVelocity;
6054
6055        void main() {
6056            gl_FragColor = vec4(0.0);
6057			gVelocity = vec4(0.0);
6058        }
6059    `}
6059),C2=class extends E4{constructor(e,t,i){super("OpaquePass",t??C0,i),this.MRTCompatible=!0,this.originalMaterials=[],this.hasTransmissionPass=!1,this.clear=!0,this.clearColorOnly=!1,this.clearDepth=!1,this.needsSwap=!1,this.MRTCompatible=e}setCamera(e){this.camera=e}setScene(e){this.scene=e??C0}getScene(){return this.scene}render(e,t){this.camera.layers.enable(3),this.hasTransmissionPass&&(this.originalMaterials.length=0,this.scene.traverse(e=>{e.layers.isEnabled(3)&&e instanceof SP&&(this.originalMaterials.push([e,e.material]),e.material=C1)}),e.shadowMap.needsUpdate=!0,e.shadowMap.autoUpdate=!0),this.camera.layers.enable(8);let i=this.renderToScreen?null:t;e.setRenderTarget(i),this.clearColorOnly&&e.clear(!0,!1,!0),this.clear&&e.clear(),e.render(this.scene,this.camera),this.clearDepth&&e.clear(!1,!0,!1),this.hasTransmissionPass&&this.originalMaterials.forEach(e=>{e[0].material=e[1]})}},C3=class{constructor(e,{depthBuffer:t=!0,stencilBuffer:i=!1,multisampling:r=0,frameBufferType:s=0}={}){this.renderer=e,this.helperStartIndex=0,this.copyPass=new E5,this.depthTexture=null,this.timer=new Cg,this._width=1,this._height=1,this.passes=[],this.helperPasses=[],this.autoRenderToScreen=!0,this.inputBuffer=this.createBuffer(t,i,s,r,!0,"input buffer mrt"),this.inputBufferSingle=this.createBuffer(t,i,s,r,!1," input buffer single"),this.inputBufferSingle.texture.dispose(),this.inputBufferSingle.depthTexture.dispose(),this.inputBufferSingle.texture=this.inputBuffer.texture[0],this.inputBufferSingle.depthTexture=this.inputBuffer.depthTexture,this.outputBuffer=this.inputBuffer.clone(),this.outputBuffer.name="output buffer mrt",this.outputBufferSingle=this.createBuffer(t,i,s,r,!1,"output buffer single"),this.outputBufferSingle.texture.dispose(),this.outputBufferSingle.depthTexture.dispose(),this.outputBufferSingle.texture=this.outputBuffer.texture[0],this.outputBufferSingle.depthTexture=this.outputBuffer.depthTexture,this.setRenderer(e)}get multisampling(){return this.inputBuffer.samples||0}set multisampling(e){let t=this.inputBuffer,i=this.multisampling;i>0&&e>0?(this.inputBuffer.samples=e,this.outputBuffer.samples=e,this.inputBuffer.dispose(),this.outputBuffer.dispose()):i!==e&&(this.inputBuffer.dispose(),this.outputBuffer.dispose(),console.log("creating new input buffer"),this.inputBuffer=this.createBuffer(t.depthBuffer,t.stencilBuffer,t.texture.type,e,!0,"new input buffer"),this.inputBuffer.depthTexture=this.depthTexture,this.outputBuffer=this.inputBuffer.clone())}getTimer(){return this.timer}getRenderer(){return this.renderer}setRenderer(e){if(this.renderer=e,null!==e){let t=e.getSize(new tQ),i=e.getContext().getContextAttributes()?.alpha??!1,r=this.inputBuffer.texture[0].type;for(let s of(1009===r&&3001===e.outputEncoding&&(this.inputBuffer.texture[0].encoding=3001,this.outputBuffer.texture[0].encoding=3001,this.inputBuffer.dispose(),this.outputBuffer.dispose(),console.log("doing some kinda dispose??")),e.autoClear=!1,this.setSize(t.width,t.height,!1),this.passes))s.initialize(e,i,r)}}replaceRenderer(e,t=!0){let i=this.renderer,r=i.domElement.parentNode;return this.setRenderer(e),t&&null!==r&&(r.removeChild(i.domElement),r.appendChild(e.domElement)),i}createDepthTexture(){let e=this.depthTexture=new nf(this._width,this._height);return this.inputBuffer.depthTexture=e,this.inputBuffer.stencilBuffer?(e.format=1027,e.type=1020):e.type=1014,e}deleteDepthTexture(){if(null!==this.depthTexture)for(let e of(this.depthTexture.dispose(),this.depthTexture=null,this.inputBuffer.depthTexture=null,this.inputBuffer.dispose(),this.passes))e.setDepthTexture(null)}createBuffer(e,t,i,r,s,a){let o=this.renderer,l=null===o?new tQ:o.getDrawingBufferSize(new tQ),h={minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001,stencilBuffer:t,depthBuffer:e},c;return r>0?(c=new id(l.width,l.height,h)).samples=r:(s?(c=new im(l.width,l.height,2,h)).texture[1].type=1016:c=new id(l.width,l.height,h),c.depthTexture=new nf(2048,2048),c.depthTexture.type=1015),1009===i&&null!==o&&3001===o.outputEncoding&&(Array.isArray(c.texture)?c.texture.forEach(e=>e.encoding=3001):c.texture.encoding=3001),Array.isArray(c.texture)?c.texture.forEach((e,t)=>{e.name=`EffectComposer.Buffer ${s} ${t}`,e.generateMipmaps=!1}):(c.texture.name=`EffectComposer.Buffer ${s}`,c.texture.generateMipmaps=!1),c.name=a,c}addPass(e,t){let i=this.passes,r=this.renderer,s=r.getDrawingBufferSize(new tQ),a=r.getContext().getContextAttributes()?.alpha??!1,o;if(e.MRTCompatible&&(o=this.inputBuffer.texture[0].type),e.MRTCompatible||(o=this.inputBuffer.texture.type),e.setRenderer(r),e.setSize(s.width,s.height),e.initialize(r,a,o),this.autoRenderToScreen&&(i.length>0&&(i[i.length-1].renderToScreen=!1),e.renderToScreen&&(this.autoRenderToScreen=!1)),void 0!==t?i.splice(t,0,e):i.push(e),this.autoRenderToScreen&&(i[i.length-1].renderToScreen=!0),e.needsDepthTexture||null!==this.depthTexture){if(null===this.depthTexture){let t=this.createDepthTexture();for(e of i)e.setDepthTexture(t)}else e.setDepthTexture(this.depthTexture)}}setHelperStartIndex(e){this.helperStartIndex=e}removePass(e){let t=this.passes,i=t.indexOf(e);-1!==i&&t.splice(i,1).length>0&&(null!==this.depthTexture&&(t.reduce((e,t)=>
6059e||t.needsDepthTexture,!1)||e.getDepthTexture()===this.depthTexture&&e.setDepthTexture(null)),this.autoRenderToScreen&&i===t.length&&(e.renderToScreen=!1,t.length>0&&(t[t.length-1].renderToScreen=!0)))}removeAllPasses(){let e=this.passes;e.length>0&&(this.autoRenderToScreen&&(e[e.length-1].renderToScreen=!1),this.passes=[])}render(e){let t=this.renderer,i=this.copyPass,r=this.inputBuffer,s=this.outputBuffer,a=this.inputBufferSingle,o=this.outputBufferSingle,l=!1,h,c,d,u;for(let p of(void 0===e&&(e=this.timer.update().getDelta()),this.passes))p.enabled&&(p.MRTCompatible?p.render(t,r,s,e,l):p.render(t,a,o,e,l),p.needsSwap&&(l&&(i.renderToScreen=p.renderToScreen,h=t.getContext(),(c=t.state.buffers.stencil).setFunc(h.NOTEQUAL,1,4294967295),i.render(t,r,s,e,l),c.setFunc(h.EQUAL,1,4294967295)),d=r,u=a,r=s,a=o,s=d,o=u),p instanceof Cf?l=!0:p instanceof E6&&(l=!1))}setSize(e,t,i){let r=this.renderer;if(this._width=e,this._height=t,void 0===e||void 0===t){let i=r.getSize(new tQ);e=i.width,t=i.height}r.setSize(e,t,i);let s=r.getDrawingBufferSize(new tQ);for(let e of(this.inputBuffer.setSize(s.width,s.height),this.outputBuffer.setSize(s.width,s.height),this.inputBufferSingle.setSize(s.width,s.height),this.outputBufferSingle.setSize(s.width,s.height),this.passes))e.setSize(s.width,s.height)}reset(){let e=this.timer.isAutoResetEnabled();this.dispose(),this.autoRenderToScreen=!0,this.timer.setAutoResetEnabled(e)}dispose(){for(let e of this.passes)e.dispose();this.passes=[],null!==this.inputBuffer&&this.inputBuffer.dispose(),null!==this.outputBuffer&&this.outputBuffer.dispose(),null!==this.inputBufferSingle&&this.inputBufferSingle.dispose(),null!==this.outputBufferSingle&&this.outputBufferSingle.dispose(),this.deleteDepthTexture(),this.copyPass.dispose(),this.timer.dispose()}},C4=new r5({name:"CombineMaterial",uniforms:{inputBufferA:new lD(null),inputBufferB:new lD(null)},blending:0,depthWrite:!1,depthTest:!1,vertexShader:`
6060varying vec2 vUv;
6061void main() {
6062    gl_Position = vec4(position.xy, 1.0, 1.0);
6063    vUv = position.xy * 0.5 + 0.5;
6064}
6065`,fragmentShader:`
6066    varying vec2 vUv;
6067    uniform sampler2D inputBufferA;
6068    uniform sampler2D inputBufferB;
6069
6070    // TODO: Why do we need these when postpro of framemode is enabled???
6071    layout(location = 1) out vec4 gVelocity;
6072
6073    void main() {
6074	vec4 resA = texture2D(inputBufferA, vUv);
6075	vec4 resB = texture2D(inputBufferB, vUv);
6076    float a = resA.a + resB.a * ( 1.0 - resA.a );
6077
6078	vec4 res;
6079	res.rgb =  resA.rgb + (resB.rgb * (1.0 - resA.a));
6080	res.a = resA.a + resB.a * (1.0 - resA.a);
6081	gl_FragColor = res;
6082    gVelocity = vec4(0.0);
6083    }
6084`}),C5=class extends E4{constructor(e){super("HelperPass",void 0,e),this.MRTCompatible=!1,this.fullscreenMaterial=C4,this.helperPass=new C2(!1,void 0,this.camera),this.helperPass.hasTransmissionPass=!1,this.helperPass.clear=!1,this.helperPass.renderToScreen=!1,this.helperPassOnTop=new C2(!1,void 0,this.camera),this.helperPassOnTop.hasTransmissionPass=!1,this.helperPassOnTop.clear=!1,this.helperPassOnTop.renderToScreen=!1;let t=new CO({preset:CI.LOW,edgeDetectionMode:2});this.effectPass=new Cc(this.camera,t),this.rt=new id(10,10,{minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001,depthBuffer:!0})}setSize(e,t){this.rt.setSize(e,t),this.effectPass.setSize(e,t)}set sceneHelpers(e){this.helperPass.setScene(e)}get sceneHelpers(){return this.helperPass.getScene()}set sceneHelpersOnTop(e){this.helperPassOnTop.setScene(e)}get sceneHelpersOnTop(){return this.helperPassOnTop.getScene()}setCamera(e){this.helperPass.setCamera(e),this.helperPassOnTop.setCamera(e)}initialize(e,t,i){super.initialize(e,t,i),this.effectPass.initialize(e,t,i)}dispose(){super.dispose(),this.rt.dispose(),this.effectPass.dispose()}render(e,t,i){this.rt.depthTexture=t.depthTexture;let r=e.getClearAlpha();e.setClearAlpha(0),this.helperPass.clearDepth=!0,this.helperPass.clearColorOnly=!0,this.helperPass.render(e,this.rt),this.helperPassOnTop.render(e,this.rt),this.effectPass.renderToScreen=!1,this.effectPass.render(e,this.rt,i),this.fullscreenMaterial.uniforms.inputBufferA.value=i.texture,this.fullscreenMaterial.uniforms.inputBufferB.value=t.texture,e.setClearAlpha(r),e.setRenderTarget(null),e.clear(),e.render(this.scene,this.camera)}},C6=`#define GLSLIFY 1
6085out vec2 v_uv;void main(){v_uv=uv;gl_Position=vec4(position.xy,1.0,1.0);}`,C8=`#define GLSLIFY 1
6086in vec2 v_uv;const float pi=3.14159265;const float num_steps=4.0;const float num_directions=4.0;uniform float near;uniform float far;uniform float fov;uniform vec4 proj_info;uniform bool is_ortho;uniform vec2 resolution;uniform float radius_of_influence;uniform float radius_in_screen_space;uniform float exponent;uniform vec3 ao_color;uniform float bias;uniform sampler2D texture_depth;uniform sampler2D texture_normals;uniform sampler2D texture_blue_noise;uniform sampler2D texture_blue_noise_in_disk;uniform sampler2D texture_color_pass;uniform int frame_index;uniform bool fog_enabled;uniform float fog_near;uniform float fog_far;vec3 uv_to_view_space(vec2 uv,float eye_z){return vec3((uv*proj_info.xy+proj_info.zw)*(is_ortho ? 1.0 : eye_z),eye_z);}float linearize_depth(float depth_sampled){float z=is_ortho ? depth_sampled : depth_sampled*2.0-1.0;return mix((2.0*near*far)/(far+near-z*(far-near)),near+z*(far-near),float(is_ortho));}vec3 get_view_position(vec2 uv_coords){float linear_depth=linearize_depth(texture(texture_depth,uv_coords).x);return uv_to_view_space(uv_coords,linear_depth);}vec3 min_difference(vec3 p,vec3 right,vec3 left){vec3 v1=right-p;vec3 v2=p-left;return(dot(v1,v1)<dot(v2,v2))? v1 : v2;}vec3 rebuild_normal(in vec2 uv,in vec3 p){vec2 one_over_resolution=1.0/resolution;vec3 r=get_view_position(uv+vec2(one_over_resolution.x,0));vec3 l=get_view_position(uv+vec2(-one_over_resolution.x,0));vec3 t=get_view_position(uv+vec2(0,one_over_resolution.y));vec3 b=get_view_position(uv+vec2(0,-one_over_resolution.y));return normalize(cross(min_difference(p,r,l),min_difference(p,t,b)));}float falloff(float distance_squared){float neg_inv_r2=-1.0/(radius_of_influence*radius_of_influence);return distance_squared*neg_inv_r2+1.0;}float ao_contribution(vec3 P,vec3 N,vec3 S){vec3 to_sample=S-P;float norm_squared=dot(to_sample,to_sample);float norm=sqrt(norm_squared);float cos_theta=dot(N,to_sample)/norm;return clamp(cos_theta-bias,0.0,1.0)*clamp(falloff(norm_squared),0.0,1.0);}float compute_ambient_occlusion(vec2 uv,float radius_in_screen_space,vec3 pc,vec3 view_space_n){vec2 one_over_resolution=1.0/resolution;ivec2 noise_uv=ivec2(int(mod(gl_FragCoord.x,128.0)),int(mod(gl_FragCoord.y,128.0)));float noise=texelFetch(texture_blue_noise,noise_uv,0).r;noise=fract(noise+0.61803398875*float(frame_index));float theta=noise*2.0*3.1415;float ct=cos(theta);float st=sin(theta);float step_size=radius_in_screen_space/(num_steps+1.0);const float angle_step=2.0*pi/num_directions;float contribution=0.0;for(int i=0;i<int(num_directions);++i){float current_pixel=step_size+1.0;for(int j=0;j<int(num_steps);++j){int index=i*int(num_steps)+j;vec2 blue_noise_sample=texelFetch(texture_blue_noise_in_disk,ivec2(index,0),0).rg;vec2 disk_point;disk_point.x=blue_noise_sample.x*ct-blue_noise_sample.y*st;disk_point.y=blue_noise_sample.x*st+blue_noise_sample.y*ct;vec2 sample_direction=disk_point;vec2 snapped_uv=round(current_pixel*sample_direction)*one_over_resolution+uv;vec3 ps=get_view_position(snapped_uv);current_pixel+=step_size;contribution+=ao_contribution(pc,view_space_n,ps);}}float mult=1.0/(1.0-bias);contribution*=mult/(num_directions*num_steps);return clamp(1.0-contribution*2.0,0.0,1.0);}
6087#define USE_GBUFFER_NORMALS
6088void main(){vec3 view_space_p=get_view_position(v_uv);
6089#ifdef USE_GBUFFER_NORMALS
6090vec3 view_space_n=texture(texture_normals,v_uv).rgb;view_space_n.z*=-1.0;
6091#else
6092vec3 view_space_n=-rebuild_normal(v_uv,view_space_p);
6093#endif
6094float radius_ss=radius_in_screen_space/(is_ortho ? 1.0 : view_space_p.z);float ao=compute_ambient_occlusion(v_uv,radius_ss,view_space_p,view_space_n);float final=pow(ao,exponent);if(view_space_p.z>
6094=far){final=1.0;}vec3 color=mix(ao_color,vec3(1.0),final);if(fog_enabled){float fog_factor=smoothstep(fog_near,fog_far,view_space_p.z);color=mix(color,vec3(1.0),fog_factor);}gl_FragColor=vec4(color,1.0);}`,C9=`#define GLSLIFY 1
6095out vec2 v_uv;void main(){gl_Position=vec4(position.xy,1.0,1.0);v_uv=uv;}`,C7=`#define GLSLIFY 1
6096in vec2 v_uv;uniform sampler2D texture_ao_lrez;uniform sampler2D texture_depth_lrez;uniform sampler2D texture_depth_hrez;uniform float near;uniform float far;float linearize_depth(float depth_sampled){float z=depth_sampled*2.0-1.0;return(2.0*near*far)/(far+near-z*(far-near));}vec2 nearest_depth_filter(in vec2 uv){vec2 resolution=vec2(textureSize(texture_depth_lrez,0));vec2 texel_size=1.0/resolution;vec2 offset=uv-0.5*texel_size;float d_hrez=texture(texture_depth_hrez,uv).r;float a=abs(d_hrez-texture(texture_depth_lrez,offset).r);float b=abs(d_hrez-texture(texture_depth_lrez,offset+vec2(texel_size.x,0.0)).r);float c=abs(d_hrez-texture(texture_depth_lrez,offset+vec2(0.0,texel_size.y)).r);float d=abs(d_hrez-texture(texture_depth_lrez,offset+vec2(texel_size.x,texel_size.y)).r);float min_diff=min(a,min(b,min(c,d)));if(min_diff==a)return offset;if(min_diff==b)return offset+vec2(texel_size.x,0.0);if(min_diff==c)return offset+vec2(0.0,texel_size.y);if(min_diff==d)return offset+vec2(texel_size.x,texel_size.y);}void main(){
6097#ifdef DEBUG
6098float d_lrez=texture(texture_depth_lrez,v_uv).r;float d_hrez=texture(texture_depth_hrez,v_uv).r;float output_d=mix(linearize_depth(d_lrez)/far,linearize_depth(d_hrez)/far,step(0.5,v_uv.x));gl_FragColor=vec4(vec3(output_d),1.0);
6099#else
6100vec2 filtered_uv=nearest_depth_filter(v_uv);vec4 ao=texture(texture_ao_lrez,filtered_uv);gl_FragColor=vec4(ao.rgb,1.0);gl_FragColor=ao;
6101#endif
6102}`,Te=[[.478712,.875764],[-.337956,-.793959],[-.955259,-.028164],[.864527,.325689],[.209342,-.395657],[-.106779,.672585],[.156213,.235113],[-.413644,-.082856],[-.415667,.323909],[.141896,-.93998],[.954932,-.182516],[-.766184,.410799],[-.434912,-.458845],[.415242,-.078724],[.728335,-.491777],[-.058086,-.066401],[.20299,.686837],[-.808362,-.556402],[.507386,-.640839],[-.723494,-.22924],[.48974,.317826],[-.622663,.765301],[-.01064,.929347],[.663146,.647618],[-.096674,-.413835],[.525945,-.321063],[-.122533,.366019],[.195235,-.687983],[-.563203,.098748],[.418563,.561335],[-.378595,.800367],[.826922,.001024],[-.085372,-.766651],[-.92192,.183673],[-.590008,-.721799],[.167751,-.164393],[.032961,-.56253],[.6329,-.107059],[-.46408,.569669],[-.173676,-.958758],[-.242648,-.234303],[-.275362,.157163],[.382295,-.795131],[.562955,.115562],[.190586,.470121],[.770764,-.297576],[.237281,.93105],[-.666642,-.455871],[-.905649,-.298379],[.33952,.157829],[.701438,-.7041],[-.062758,.160346],[-.220674,.957141],[.642692,.432706],[-.77339,-.015272],[-.671467,.24688],[.158051,.062859],[.806009,.527232],[-.05762,-.247071],[.333436,-.51671],[-.550658,-.315773],[-.652078,.589846],[.008818,.530556],[-.210004,.519896]],Tt=new r5({vertexShader:`#define GLSLIFY 1
6103#include <skinning_pars_vertex>
6104#include <morphtarget_pars_vertex>
6105out vec3 n;void main(){
6106#include <beginnormal_vertex>
6107#include <morphnormal_vertex>
6108#include <skinbase_vertex>
6109#include <skinnormal_vertex>
6110#include <defaultnormal_vertex>
6111#include <begin_vertex>
6112#include <morphtarget_vertex>
6113#include <skinning_vertex>
6114vec4 view_space=viewMatrix*modelMatrix*vec4(transformed,1.0);gl_Position=projectionMatrix*view_space;n=normalize(transformedNormal);}`,fragmentShader:`#define GLSLIFY 1
6115in vec3 n;void main(){gl_FragColor=vec4(n,1.0);}`}),Ti=new r5({vertexShader:C9,fragmentShader:C7,uniforms:{texture_ao_lrez:new lD(null),texture_depth_lrez:new lD(null),texture_depth_hrez:new lD(null),near:new lD(null),far:new lD(null)}}),Tr=class extends E4{constructor(e,t){super("AmbientOcclusionPass",void 0,t),this.fogEnabled=!1,this.fogNear=1,this.fogFar=1e3,this.frameIndex=0,this._runHalfRes=!0,this._width=1,this._height=1,this.gBuffer=new id(1024,1024,{type:uX?1016:1015,depthTexture:new nf(1024,1024),minFilter:1006,magFilter:1006}),this.depthBufferHighRes=new id(1024,1024,{depthTexture:new nf(1024,1024)}),this.aoBuffer=new id(1024,1024,{minFilter:1006,magFilter:1006}
6115),this.splineScene=e,this.splineCamera=t;let i=new Float32Array(2*Te.length);for(let e=0;e<Te.length;e++){let t=2*e;i[t+0]=Te[e][0],i[t+1]=Te[e][1]}this.blueNoiseInDiskTexture=new nM(i,Te.length,1,1030,1015),this.blueNoiseInDiskTexture.wrapS=1e3,this.blueNoiseInDiskTexture.wrapT=1e3,this.blueNoiseInDiskTexture.needsUpdate=!0,this.hbaoMaterial=new r5({vertexShader:C6,fragmentShader:C8,uniforms:{near:new lD(null),far:new lD(null),fov:new lD(null),proj_info:new lD(new ic),is_ortho:new lD(!1),resolution:new lD(new tQ),radius_of_influence:new lD(8),radius_in_screen_space:new lD(1),exponent:new lD(1),ao_color:new lD(new iv),bias:new lD(.5),texture_depth:new lD(null),texture_normals:new lD(null),texture_blue_noise:new lD(null),texture_blue_noise_in_disk:new lD(this.blueNoiseInDiskTexture),frame_index:new lD(0),fog_enabled:new lD(!1),fog_near:new lD(1),fog_far:new lD(1e3)}}),this.radius=128,this.aoColor={r:0,g:0,b:0},this.bias=.5,this.hbaoMaterial.uniforms.texture_depth.value=this.gBuffer.depthTexture,this.hbaoMaterial.uniforms.texture_normals.value=this.gBuffer.texture,this.needsSwap=!0,this.aaBuffer=new id(1024,1024,{minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001,depthBuffer:!1,type:1015});let r=new CO({preset:CI.ULTRA,edgeDetectionMode:2});this.effectPass=new Cc(this.camera,r)}initialize(e,t,i){super.initialize(e,t,i),this.effectPass.initialize(e,t,i)}setBlueNoiseTexture(e){this.hbaoMaterial.uniforms.texture_blue_noise.value=e}setSize(e,t){this._width=e,this._height=t,this.depthBufferHighRes.setSize(e,t);let i=this._runHalfRes?.5:1,r=e*i,s=t*i;this.gBuffer.setSize(r,s),this.aoBuffer.setSize(r,s),this.hbaoMaterial.uniforms.resolution.value.set(r,s),this.aaBuffer.setSize(r,s),this.effectPass.setSize(r,s)}get runHalfRes(){return this._runHalfRes}set runHalfRes(e){this._runHalfRes=e,this.setSize(this._width,this._height)}setCamera(e){this.splineCamera=e}setScene(e){this.splineScene=e}setDepthTexture(e){this.depthBufferHighRes.depthTexture=e,Ti.uniforms.texture_depth_hrez.value=e,Ti.needsUpdate=!0}render(e,t,i){this.splineScene.overrideMaterial=Tt;let r=this.splineCamera.layers.mask;if(this.splineCamera.layers.set(5),e.setRenderTarget(this.gBuffer),e.clear(),e.render(this.splineScene,this.splineCamera),e.setRenderTarget(this.depthBufferHighRes),e.clear(),e.render(this.splineScene,this.splineCamera),this.splineScene.overrideMaterial=null,this.splineCamera.layers.mask=r,this.hbaoMaterial.uniforms.radius_of_influence.value=this.radius,this.hbaoMaterial.uniforms.ao_color.value.set(this.aoColor.r,this.aoColor.g,this.aoColor.b),this.hbaoMaterial.uniforms.bias.value=this.bias,this.hbaoMaterial.uniforms.fog_enabled.value=this.fogEnabled,this.hbaoMaterial.uniforms.fog_near.value=this.fogNear,this.hbaoMaterial.uniforms.fog_far.value=this.fogFar,this.hbaoMaterial.uniforms.frame_index.value=this.frameIndex,this.frameIndex++,this.splineCamera.isPerspectiveCamera){this.hbaoMaterial.uniforms.near.value=this.splineCamera.perspCamera.near,this.hbaoMaterial.uniforms.far.value=this.splineCamera.perspCamera.far;let e=this.splineCamera.perspCamera.projectionMatrix.elements,t=2/e[0],i=2/e[5],r=-(1-e[8])/e[0],s=-(1+e[9])/e[5];this.hbaoMaterial.uniforms.proj_info.value.set(t,i,r,s);let a=this.splineCamera.perspCamera.fov*(Math.PI/180),o=this.hbaoMaterial.uniforms.resolution.value.y/(2*Math.tan(.5*a)),l=.5*this.hbaoMaterial.uniforms.radius_of_influence.value*o;this.hbaoMaterial.uniforms.radius_in_screen_space.value=l,this.hbaoMaterial.uniforms.is_ortho.value=!1}else{this.hbaoMaterial.uniforms.near.value=this.splineCamera.orthoCamera.near,this.hbaoMaterial.uniforms.far.value=this.splineCamera.orthoCamera.far;let e=this.splineCamera.orthoCamera.projectionMatrix.elements,t=2/e[0],i=2/e[5],r=-(1+e[12])/e[0],s=-(1-e[13])/e[5];this.hbaoMaterial.uniforms.proj_info.value.set(t,i,r,s);let a=this.hbaoMaterial.uniforms.resolution.value.y/i*.5,o=this.hbaoMaterial.uniforms.radius_of_influence.value*a;this.hbaoMaterial.uniforms.radius_in_screen_space.value=o,this.hbaoMaterial.uniforms.is_ortho.value=!0}this.runHalfRes?(this.fullscreenMaterial=this.hbaoMaterial,e.setRenderTarget(this.aoBuffer),e.clear(),e.render(this.scene,this.camera),this.fullscreenMaterial=Ti,Ti.uniforms.texture_ao_lrez.value=this.aoBuffer.texture,Ti.uniforms.texture_depth_lrez.value=this.gBuffer.depthTexture,Ti.uniforms.texture_depth_hrez.value=this.depthBufferHighRes.depthTexture,e.setRenderTarget(e.aoRenderTarget),e.clear(),e.render(this.scene,this.camera)):(this.fullscreenMaterial=this.hbaoMaterial,e.setRenderTarget(this.aaBuffer),e.clear(),e.render(this.scene,this.camera),this.effectPass.renderToScreen=!1,this.effectPass.render(e,this.aaBuffer,e.aoRenderTarget))}dispose(){this.gBuffer.dispose(),this.depthBufferHighRes.dispose(),this.aoBuffer.dispose()}},Ts=`
6116varying vec2 vUv;
6117void main() {
6118    vUv = uv;
6119    gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6120}`,Ta=`
6121uniform sampler2D tInput;
6122uniform sampler2D tMap;
6123uniform vec2 resolution;
6124varying vec2 vUv;
6125
6126uniform vec2 uResolution;
6127uniform vec2 uCoords;
6128
6129// Draws a rectangle at center <st> with size <size>
6130float rectangle(vec2 st, vec2 size) {
6131    size = vec2(0.5) - size * 0.5;
6132    vec2 uv = vec2(step(size.x, st.x), step(size.y, st.y));
6133    uv *= vec2(step(size.x, 1.0 - st.x), step(size.y, 1.0 - st.y));
6134
6135    return uv.x * uv.y;
6136}
6137
6138uniform vec2 uSize;
6139uniform float uScale;
6140uniform float uDPR;
6141uniform float uCurrent;
6142uniform vec3 uSceneColor;
6143
6144void main() {
6145    vec2 screenUv = gl_FragCoord.xy / uResolution.xy;
6146    screenUv *= 1.0 / uDPR;
6147
6148    vec2 center = vec2(0.5, -0.5);
6149    vec2 outsideUv = screenUv;
6150    outsideUv += center;
6151    outsideUv -= uCoords.xy / uResolution.xy;
6152    outsideUv = (outsideUv - 0.5) + 0.5;
6153    outsideUv -= center;
6154    vec2 s = (uSize / uResolution) * uScale;
6155    float isOutside = 1.0 - rectangle(outsideUv, s);
6156    
6157    vec2 mid = vec2(0.5);
6158    vec2 insideUv = (screenUv - mid + s * mid) / s;
6159    vec4 background = texture2D(tInput, screenUv);
6160    vec4 image = texture2D(tMap, insideUv);
6161    gl_FragColor = mix(image, background, isOutside);
6162}
6163`,Tn=class extends Cm{constructor(){super(new r5({vertexShader:Ts,fragmentShader:Ta,uniforms:{tInput:new lD(null),tMap:new lD(null),uResolution:new lD(new tQ),uSize:new lD(new tQ),uCoords:new lD(new tQ),uScale:new lD(1),uSceneColor:new lD(new ii(16711680)),uDPR:new lD(1),uCurrent:ne
6163w lD(0)}}),"tInput"),this.needsSwap=!0}get uniforms(){return this.fullscreenMaterial.uniforms}get texture(){return this.uniforms.tMap.value}set texture(e){this.uniforms.tMap.value=e}},To=`
6164void main() {
6165    gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6166}`,Tl=`
6167uniform sampler2D toScene;
6168uniform sampler2D fromScene;
6169uniform vec2 resolution;
6170
6171uniform vec2 uResolution;
6172uniform float uDPR;
6173
6174uniform float mixRatio;
6175uniform sampler2D tMixTexture;
6176uniform int useTexture;
6177uniform float threshold;
6178
6179void main() {
6180	vec2 screenUv = gl_FragCoord.xy / uResolution.xy;
6181	screenUv *= 1.0 / uDPR;
6182
6183	vec4 texel1 = texture2D( fromScene, screenUv );
6184	vec4 texel2 = texture2D( toScene, screenUv );
6185
6186	if (useTexture==1) {
6187		
6188		vec4 transitionTexel = texture2D( tMixTexture, screenUv );
6189		float r = mixRatio * (1.0 + threshold * 2.0) - threshold;
6190		float mixf=clamp((transitionTexel.r - r)*(1.0/threshold), 0.0, 1.0);
6191		
6192		gl_FragColor = mix( texel1, texel2, mixf );
6193	} else {
6194		
6195		gl_FragColor = mix( texel1, texel2, mixRatio );
6196		
6197	}
6198}
6199`,Th=class extends Cm{constructor(){super(new r5({vertexShader:To,fragmentShader:Tl,uniforms:{toScene:new lD(null),fromScene:new lD(null),uResolution:new lD(new tQ),uDPR:new lD(1),mixRatio:new lD(0),threshold:new lD(.1),useTexture:new lD(0),tMixTexture:{value:[][0]}}}),"toScene"),this.needsSwap=!0}get uniforms(){return this.fullscreenMaterial.uniforms}get texture(){return this.uniforms.fromScene.value}set texture(e){this.uniforms.fromScene.value=e}},Tc=`
6200void main() {
6201    gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6202}`,Td=`
6203uniform sampler2D inputBuffer;
6204uniform sampler2D blurredInputBuffer;
6205uniform sampler2D overlay;
6206uniform float blurIntensity;
6207
6208uniform vec2 uResolution;
6209uniform float uDPR;
6210
6211void main() {
6212	vec2 screenUv = gl_FragCoord.xy / uResolution.xy;
6213	screenUv *= 1.0 / uDPR;
6214
6215	vec4 texel1 = texture2D( overlay, screenUv );
6216	vec4 texel2 = texture2D( inputBuffer, screenUv );
6217	vec4 texel3 = texture2D( blurredInputBuffer, screenUv );
6218
6219	float blurMask2 = max(sign(texel1.a), 0.0) * blurIntensity;
6220    gl_FragColor = mix( mix(texel2, texel3, blurMask2), texel1, texel1.a );
6221}
6222`,Tu=class extends Cm{constructor(){super(new r5({vertexShader:Tc,fragmentShader:Td,uniforms:{inputBuffer:new lD(null),blurredInputBuffer:new lD(null),overlay:new lD(null),uResolution:new lD(new tQ),uDPR:new lD(1),blurIntensity:new lD(0)}})),this._blurEnabled=!1,this.blurTarget=new id(1,1,{minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001}),this.blurPass=new Cu({width:window.innerWidth,height:window.innerHeight,kernelSize:Cv.HUGE,resolutionScale:.25}),this.blurPass.renderToScreen=!1,this.uniforms.blurredInputBuffer.value=this.blurTarget.texture}get uniforms(){return this.fullscreenMaterial.uniforms}get texture(){return this.uniforms.overlay.value}set texture(e){this.uniforms.overlay.value=e}setResolution(e,t,i=1){this.uniforms.uResolution.value.set(e,t),this.uniforms.uDPR.value=i,this.blurPass.setSize(e,t),this.blurTarget.setSize(e,t),this.blurPass.setSize(e,t)}get uiCanvas(){return this._uiCanvas}set uiCanvas(e){this._uiCanvas=e,e.texture&&(this.uniforms.overlay.value=e.texture);let t=e.frame;if(t){let e=t.data.backgroundBlur,i=e.radius;this._blurEnabled=e.enabled,this.uniforms.blurIntensity.value=this._blurEnabled?1:0,this.blurPass.scale=i/3}}render(e,t,i,r,s){this._blurEnabled&&(this.blurPass.setDepthTexture(this.getDepthTexture()),this.blurPass.render(e,t,this.blurTarget,r,s)),super.render(e,t,i,r,s)}},Tp=`
6223varying vec2 vUv;
6224void main() {
6225    vUv = uv;
6226    gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6227}`,Tf=`
6228uniform sampler2D tInput;
6229uniform sampler2D tOverlayImage;
6230varying vec2 vUv;
6231uniform vec2 uResolution;
6232uniform vec2 uRightBottom;
6233uniform vec2 uImageSize;
6234uniform float uScale;
6235uniform float uDPR;
6236
6237vec3 blendNormal(vec3 base, vec3 blend) {
6238	return blend;
6239}
6240
6241vec3 blendNormal(vec3 base, vec3 blend, float opacity) {
6242	return (blendNormal(base, blend) * opacity + base * (1.0 - opacity));
6243}
6244
6245vec4 drawFixedSizeImage(sampler2D image, vec2 screenUV, vec2 imageSize, vec2 imageCoords, vec2 screenSize, float dpr) {
6246	vec2 uv = (screenUV * screenSize * dpr - imageCoords) / (imageSize * dpr);
6247	if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) {
6248		return vec4(0.0);
6249	}
6250	return texture2D(image, uv);
6251}
6252
6253void main() {
6254    vec2 screenUV = gl_FragCoord.xy / (uResolution.xy * uDPR);
6255	vec2 imageCoords = vec2(uResolution.x * uDPR - uImageSize.x * uScale * uDPR - uRightBottom.x * uDPR, uRightBottom.y * uDPR);
6256    vec4 background = texture2D(tInput, screenUV);
6257    vec4 image = drawFixedSizeImage(tOverlayImage, screenUV, uImageSize * uScale, imageCoords, uResolution, uDPR);
6258    gl_FragColor = vec4(blendNormal(background.rgb, image.rgb, image.a), max(background.a, image.a));
6259}
6260`,Tm=class extends Cm{constructor(){super(new r5({vertexShader:Tp,fragmentShader:Tf,uniforms:{tInput:new lD(null),tOverlayImage:new lD(null),uResolution:new lD(new tQ),uImageSize:new lD(new tQ),uRightBottom:new lD(new tQ(20,20)),uScale:new lD(.25),uDPR:new lD(1)}}),"tInput")}get uniforms(){return this.fullscreenMaterial.uniforms}get texture(){return this.uniforms.tOverlayImage.value}set texture(e){this.uniforms.tOverlayImage.value=e,this.uniforms.uImageSize.value.set(e.image.width,e.image.height)}};function Tg(e,t){return t&&t.enabled&&e.push(t.effect),e}var Tv=e=>Object.values(Cs).includes(e)?e:Cs.NORMAL,Ty=class extends tL{constructor(e,t){super(),this._needsDOFResize=t,this.postprocessingState=vX.defaultData,this._scene=new nb,this._camera=new Eg,this.effects=new Map,this.blueNoiseTexture=new nM,this._renderToScreen=!0,this._isUIOverlayEnabled=!1,this.clock=new lg,this.renderer=e,this.debug=!1,this.effects.set("bloom",new CN),this.effects.set("chromaticAberration",new CU),this.effects.set("vignette",new CH),this.effects.set("noise",new CG),this.effects.set("colorAverage",new CV),this.effects.set("hueSaturation",new Cj),this.effects.set("brightnessContrast",new Ck),this.effects.set("depthOfField",new CW),this.effects.set("pixelation",new Cq),this.effectComposer=new C3(this.renderer),this.effectComposer.autoRenderToScreen=!1,this.opaquePass=new C2(!0,this.scene,this.camera),this.opaquePass.clear=!0,this.transmissionPass=new C$
6260(this.scene,this.camera,this.renderer),this.aoPass=new Tr(this.scene,this.camera),this.taaPass=new CJ,this.taaPass.renderToScreen=!1,this.helperPass=new C5(this.camera),this.helperPass.renderToScreen=!1,this.stylesOverlayPass=new Tn,this.stylesOverlayPass.enabled=!1,this.uiOverlayPass=new Tu,this.uiOverlayPass.enabled=!1,this.logoOverlayPass=new Tm,this.logoOverlayPass.enabled=!1,this.sceneTransitionPass=new Th,this.sceneTransitionPass.enabled=!1,this._initCopyPass(),this._initPasses()}set overlayTexture(e){void 0!==e?(this.stylesOverlayPass.texture=e,this.stylesOverlayPass.enabled=!0):this.stylesOverlayPass.enabled=!1}get overlayTexture(){return this.stylesOverlayPass.texture}set sceneHelpers(e){this.helperPass.sceneHelpers=e}get sceneHelpers(){return this.helperPass.sceneHelpers}set sceneHelpersOnTop(e){this.helperPass.sceneHelpersOnTop=e}get sceneHelpersOnTop(){return this.helperPass.sceneHelpersOnTop}get scene(){return this._scene}set scene(e){this._scene=e,this.opaquePass.setScene(e),this.transmissionPass.setScene(e),this.aoPass.setScene(e)}get camera(){return this._camera}set camera(e){let t=this._camera!==e;this._camera=e,this.opaquePass.setCamera(e),this.transmissionPass.setCamera(e),t&&this.transmissionPass.updatePasses(this.renderer),this.aoPass.setCamera(e),this.helperPass.setCamera(e),this.effects.get("depthOfField").setCamera(e)}updateRenderToScreen(){let e=!1;for(let t=this.effectComposer.passes.length-1;t>=0;t--){let i=this.effectComposer.passes[t];if(!0===i.enabled&&!e&&this._renderToScreen){i.renderToScreen=!0,e=!0;continue}i.renderToScreen=!1}}get isUIOverlayEnabled(){return this._isUIOverlayEnabled}disableUIOverlay(){this._isUIOverlayEnabled=!1}enableUIOverlay(){this._isUIOverlayEnabled=!0}disableHelpers(){this.helperPass.enabled=!1,this.updateRenderToScreen()}enableHelpers(){this.helperPass.enabled=!0,this.updateRenderToScreen()}updateBlueNoiseTexture(e){this.blueNoiseTexture=new nM(e,128,128),this.blueNoiseTexture.wrapS=1e3,this.blueNoiseTexture.wrapT=1e3,this.blueNoiseTexture.minFilter=1003,this.blueNoiseTexture.magFilter=1003,this.blueNoiseTexture.needsUpdate=!0}setAmbientOcclusionParams(e,t,i,r,s,a,o,l){this.aoPass.enabled=e,this.aoPass.radius=t,this.aoPass.bias=i,this.aoPass.aoColor=r,this.aoPass.fogEnabled=s,this.aoPass.fogNear=a,this.aoPass.fogFar=o,!l!==this.aoPass.runHalfRes&&(this.aoPass.runHalfRes=!l)}setTransmissionPassEnabled(e){this.transmissionPass.enabled=e,this.opaquePass.hasTransmissionPass=e}
6260_initPasses(){if(this.uvEffectPass?.dispose(),this.effectPass?.dispose(),this.effectComposer.removeAllPasses(),this.transmissionPass.updatePasses(this.renderer),this.effectComposer.addPass(this.aoPass),this.effectComposer.addPass(this.opaquePass),this.effectComposer.addPass(this.transmissionPass),this.effectComposer.addPass(this.taaPass),this.postprocessingState.enabled){let e=[this.effects.get("pixelation")].reduce(Tg,[]);e.length>0&&(this.uvEffectPass=new Cc(this.camera,...e),this.uvEffectPass.renderToScreen=!1,this.effectComposer.addPass(this.uvEffectPass));let t=[this.effects.get("chromaticAberration"),this.effects.get("bloom"),this.effects.get("depthOfField"),this.effects.get("colorAverage"),this.effects.get("hueSaturation"),this.effects.get("brightnessContrast"),this.effects.get("vignette"),this.effects.get("noise")].reduce(Tg,[]);if(t.length>0&&(this.effectPass=new Cc(this.camera,...t),this.effectPass.renderToScreen=!1,this.effectComposer.addPass(this.effectPass),this._needsDOFResize&&this.effects.get("depthOfField")?.enabled&&void 0!==window)){let e=this.renderer.viewportWidth,t=this.renderer.viewportHeight;this.renderer.setSize(e-1,t-1),this.renderer.setSize(e,t)}}this.effectComposer.addPass(this.stylesOverlayPass),this.effectComposer.addPass(this.uiOverlayPass),this.effectComposer.addPass(this.sceneTransitionPass),this.effectComposer.addPass(this.helperPass),this.effectComposer.addPass(this.logoOverlayPass)}_initCopyPass(){if(this._savePass)return;let e=new tQ;this.renderer.getDrawingBufferSize(e),this._rt=new id(e.x,e.y,{depthBuffer:!1,stencilBuffer:!1,wrapS:1e3,wrapT:1e3}),this._rt.samples=0,this._savePass=new E5(this._rt,!1),this._savePass.renderToScreen=!1}setCopyPass(e){this._rt=e,this._savePass=new E5(this._rt,!1),this.renderToScreen=!1}get renderToScreen(){return this._renderToScreen}set renderToScreen(e){if(this._renderToScreen===e)return;let t=this.effectComposer;t&&(!0===e?t.removePass(this._savePass):t.addPass(this._savePass),this._renderToScreen=e,this.updateRenderToScreen())}set sceneTransitionFromTexture(e){e!==this.sceneTransitionPass.texture&&(null!==e?this.sceneTransitionPass.enabled=!0:(this.sceneTransitionPass.enabled=!1,this.updateRenderToScreen()),this.sceneTransitionPass.texture=e)}setWatermark(e){this.logoOverlayPass.enabled=null!==e,e&&(this.logoOverlayPass.texture=e)}get texture(){return this._rt&&this._rt.texture}get renderTarget(){return this._rt}updatePostprocessing(e){let{enabled:t,...i}=e,r=!1;for(let e of(t!==this.postprocessingState.enabled&&(r=!0),Object.entries(i))){let t=e[1],i=this.effects.get(e[0]);if(i)for(let[e,s]of(i.enabled!==t.enabled&&(r=!0),i.enabled=t.enabled,Object.entries(t)))"blendFunction"===e?i.blendFunction=Tv(s):i[e]=s}this.postprocessingState=e,r&&this._initPasses()}render(){this.effectComposer.render(this.clock.getDelta())}setScissor(e,t,i,r){e instanceof ic?(this.effectComposer.inputBuffer.scissor.set(e.x,e.y,e.z,e.w),this.effectComposer.outputBuffer.scissor.set(e.x,e.y,e.z,e.w)):(this.effectComposer.inputBuffer.scissor.set(e,t,i,r),this.effectComposer.outputBuffer.scissor.set(e,t,i,r));let s=this.renderer.getPixelRatio();this.effectComposer.inputBuffer.scissor.multiplyScalar(s),this.effectComposer.outputBuffer.scissor.multiplyScalar(s),this.renderer.setScissor(e,t,i,r)}setScissorTest(e){this.effectComposer.inputBuffer.scissorTest=e,this.effectComposer.outputBuffer.scissorTest=e,this.renderer.setScissorTest(e)}setViewport(e,t,i,r){e instanceof ic?(this.effectComposer.inputBuffer.viewport.copy(e),this.effectComposer.outputBuffer.viewport.copy(e)):(this.effectComposer.inputBuffer.viewport.set(e,t,i,r),this.effectComposer.outputBuffer.viewport.set(e,t,i,r))}resize(e,t,i){if(this.effectComposer.setSize(e,t,i),this._rt){let i=this.renderer.getPixelRatio();this._rt.setSize(e*i,t*i)}}dispose(){this.uvEffectPass?.dispose(),this.effectPass?.dispose(),this.effectComposer.dispose()}},Tx=e=>`
6261
6262// PCSS implementation based on:
6263// https://www.gamedev.net/articles/programming/graphics/contact-hardening-soft-shadows-made-fast-r4906/
6264// NOTE: This number affects how big the shadow blur can
6265// possibly get. Bigger number == bigger blur, but less precise results
6266
6267const float  gPenumbraFilterSize = 80.0;
6268const int   gPenumbraSamples = ${e};
6269const int gShadowSamples = ${e};
6270const float gShadowSamplesRpc = 1.0f / float(gShadowSamples);
6271
6272#ifdef USE_SHADOWMAP
6273    #if NUM_DIR_LIGHT_SHADOWS > 0
6274
6275        uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];
6276        varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];
6277
6278        struct DirectionalLightShadow {
6279            float shadowBias;
6280            float shadowNormalBias;
6281            float shadowRadius;
6282            vec2 shadowMapSize;
6283        };
6284
6285        uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];
6286
6287    #endif
6288
6289    #if NUM_SPOT_LIGHT_SHADOWS > 0
6290
6291        uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];
6292        varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_SHADOWS ];
6293
6294        struct SpotLightShadow {
6295            float shadowBias;
6296            float shadowNormalBias;
6297            float shadowRadius;
6298            vec2 shadowMapSize;
6299        };
6300
6301        uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];
6302
6303    #endif
6304
6305    #if NUM_POINT_LIGHT_SHADOWS > 0
6306
6307        uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];
6308        varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];
6309
6310        struct PointLightShadow {
6311            float shadowBias;
6312            float shadowNormalBias;
6313            float shadowRadius;
6314            vec2 shadowMapSize;
6315            float shadowCameraNear;
6316            float shadowCameraFar;
6317        };
6318
6319        uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];
6320
6321    #endif
6322
6323    /*
6324    #if NUM_RECT_AREA_LIGHTS > 0
6325
6326        // TODO (abelnation): create uniforms for area light shadows
6327
6328    #endif
6329    */
6330
6331float computePenumbra(int index, sampler2D shadowMap, float temporalAngle, float texelSize, vec2 uv, float compare, float texelScalar, float shadowRadius)
6332{
6333    float penumbra = 1.0;
6334    float blockerDepthAvg = 0.0;
6335    float blockerCount = 0.0;
6336
6337    #pragma unroll_loop_start
6338    for(int i = 0; i < gPenumbraSamples; i ++)
6339    {
6340        vec2 offset = (vogelDiskSample(i, gShadowSamples, temporalAngle) * texelSize) * texelScalar;
6341        float depth = unpackRGBAToDepth( texture2D( shadowMap, uv + offset ) );
6342
6343        if(depth < compare + 0.0001)
6344        {
6345            blockerDepthAvg += depth;
6346            blockerCount++;
6347        }
6348    }
6349    #pragma unroll_loop_end
6350
6351    if (blockerCount > 0.0)
6352    {
6353        blockerDepthAvg /= blockerCount;
6354
6355        // Compute penumbra
6356        penumbra = (compare - blockerDepthAvg) / (blockerDepthAvg);
6357        penumbra *= penumbra;
6358        penumbra *= 200.0 * penumbraSize[min(index, 5 - 1)]; // Magic number that affects how quickly the penumbra grows
6359
6360        return clamp(penumbra, 0.00, 1.0);
6361    }
6362    return 0.0;
6363}
6364
6365float vogelShadow(int index, sampler2D shadowMap, vec2 uv, float texelSize, float compare, float shadowRadius)
6366{
6367    float shadow         = 0.0f;
6368
6369    // NOTE: When using TAA, we should use screen space interleaved gradient noise
6370    vec2 halton = haltonSequence[frameIndex];
6371    float temporalOffset = getNoiseInterleavedGradient(gl_FragCoord.xy + halton);
6372    float temporalAngle  = temporalOffset * PI2;
6373
6374    float texelScalar = (gPenumbraFilterSize) / (texelSize * 1024.);
6375    float penumbra = computePenumbra(index, shadowMap, temporalAngle, texelSize, uv, compare, texelScalar, shadowRadius);
6376    if (penumbra == -1.0) {
6377        return 1.0;
6378    }
6379
6380    #pragma unroll_loop_start
6381    for (int i = 0; i < gShadowSamples; i++)
6382    {
6383        vec2 vogelSample =  vogelDiskSample(i, gShadowSamples, temporalAngle) * texelSize;
6384        // Overall blurring offset
6385        vec2 offset = vogelSample * (shadowRadius * 2.);
6386
6387        // Penumbra offset
6388        offset += vogelSample * (penumbra * texelScalar);
6389
6390        shadow += step( compare, unpackRGBAToDepth( texture2D( shadowMap, uv + offset ) ) );
6391    }
6392    #pragma unroll_loop_end
6393
6394    return shadow * gShadowSamplesRpc;
6395}
6396
6397
6398    float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {
6399
6400        return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );
6401
6402    }
6403
6404    vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {
6405
6406        return unpackRGBATo2Half( texture2D( shadow, uv ) );
6407
6408    }
6409
6410    float VSMShadow (sampler2D shadow, vec2 uv, float compare ){
6411
6412        float occlusion = 1.0;
6413
6414        vec2 distribution = texture2DDistribution( shadow, uv );
6415
6416        float hard_shadow = step( compare , distribution.x ); // Hard Shadow
6417
6418        if (hard_shadow != 1.0 ) {
6419
6420            float distance = compare - distribution.x ;
6421            float variance = max( 0.00000, distribution.y * distribution.y );
6422            float softness_probability = variance / (variance + distance * distance ); // Chebeyshevs inequality
6423            softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); // 0.3 reduces light bleed
6424            occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );
6425
6426        }
6427        return occlusion;
6428
6429    }
6430
6431    float getShadow( int i, sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {
6432
6433        float shadow = 1.0;
6434
6435        shadowCoord.xyz /= shadowCoord.w;
6436        shadowCoord.z += shadowBias;
6437
6438        // if ( something && something ) breaks ATI OpenGL shader compiler
6439        // if ( all( something, something ) ) using this instead
6440
6441        bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );
6442        bool inFrustum = all( inFrustumVec );
6443
6444        bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );
6445
6446        bool frustumTest = all( frustumTestVec );
6447
6448        if ( frustumTest ) {
6449
6450        #if defined( SHADOWMAP_TYPE_PCF )
6451
6452            vec2 texelSize = vec2( 1.0 ) / shadowMapSize;
6453            return vogelShadow(i, shadowMap, shadowCoord.xy, texelSize.x, shadowCoord.z, shadowRadius );
6454
6455        #elif defined( SHADOWMAP_TYPE_PCF_SOFT )
6456
6457            vec2 texelSize = vec2( 1.0 ) / shadowMapSize;
6458            float dx = texelSize.x;
6459            float dy = texelSize.y;
6460
6461            vec2 uv = shadowCoord.xy;
6462            vec2 f = fract( uv * shadowMapSize + 0.5 );
6463            uv -= f * texelSize;
6464
6465            shadow = (
6466                texture2DCompare( shadowMap, uv, shadowCoord.z ) +
6467                texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +
6468                texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +
6469                texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +
6470                mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),
6471                     texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),
6472                     f.x ) +
6473                mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),
6474                     texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),
6475                     f.x ) +
6476                mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),
6477                     texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),
6478                     f.y ) +
6479                mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),
6480                     texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),
6481                     f.y ) +
6482                mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),
6483                          texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),
6484                          f.x ),
6485                     mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),
6486                          texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),
6487                          f.x ),
6488                     f.y )
6489            ) * ( 1.0 / 9.0 );
6490
6491        #elif defined( SHADOWMAP_TYPE_VSM )
6492
6493            shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );
6494
6495        #else // no percentage-closer filtering:
6496
6497            shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );
6498
6499        #endif
6500
6501        }
6502
6503        return shadow;
6504
6505    }
6506
6507    // cubeToUV() maps a 3D direction vector suitable for cube texture mapping to a 2D
6508    // vector suitable for 2D texture mapping. This code uses the following layout for the
6509    // 2D texture:
6510    //
6511    // xzXZ
6512    //  y Y
6513    //
6514    // Y - Positive y direction
6515    // y - Negative y direction
6516    // X - Positive x direction
6517    // x - Negative x direction
6518    // Z - Positive z direction
6519    // z - Negative z direction
6520    //
6521    // Source and test bed:
6522    // https://gist.github.com/tschw/da10c43c467ce8afd0c4
6523
6524    vec2 cubeToUV( vec3 v, float texelSizeY ) {
6525
6526        // Number of texels to avoid at the edge of each square
6527
6528        vec3 absV = abs( v );
6529
6530        // Intersect unit cube
6531
6532        float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );
6533        absV *= scaleToCube;
6534
6535        // Apply scale to avoid seams
6536
6537        // two texels less per square (one texel will do for NEAREST)
6538        v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );
6539
6540        // Unwrap
6541
6542        // space: -1 ... 1 range for each square
6543        //
6544        // #X##         dim    := ( 4 , 2 )
6545        //  # #         center := ( 1 , 1 )
6546
6547        vec2 planar = v.xy;
6548
6549        float almostATexel = 1.5 * texelSizeY;
6550        float almostOne = 1.0 - almostATexel;
6551
6552        if ( absV.z >= almostOne ) {
6553
6554            if ( v.z > 0.0 )
6555                planar.x = 4.0 - v.x;
6556
6557        } else if ( absV.x >= almostOne ) {
6558
6559            float signX = sign( v.x );
6560            planar.x = v.z * signX + 2.0 * signX;
6561
6562        } else if ( absV.y >= almostOne ) {
6563
6564            float signY = sign( v.y );
6565            planar.x = v.x + 2.0 * signY + 2.0;
6566            planar.y = v.z * signY - 2.0;
6567
6568        }
6569
6570        // Transform to UV space
6571
6572        // scale := 0.5 / dim
6573        // translate := ( center + 0.5 ) / dim
6574        return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );
6575
6576    }
6577
6578    float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {
6579
6580        float shadow = 1.0;
6581        vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );
6582
6583        // for point lights, the uniform @vShadowCoord is re-purposed to hold
6584        // the vector from the light to the world-space position of the fragment.
6585        vec3 lightToPosition = shadowCoord.xyz;
6586
6587        // dp = normalized distance from light to fragment position
6588        float compare = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); // need to clamp?
6589        compare += shadowBias;
6590
6591        // bd3D = base direction 3D
6592        vec3 bd3D = normalize( lightToPosition );
6593
6594        vec2 halton = haltonSequence[frameIndex];
6595        float temporalOffset = getNoiseInterleavedGradient(gl_FragCoord.xy + halton);
6596        float temporalAngle  = temporalOffset * PI2;
6597
6598        #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_VSM )
6599            for (int i = 0; i < gShadowSamples; i++) {
6600                vec2 vogelSample = vogelDiskSample(i, gShadowSamples, temporalAngle) * texelSize;
6601
6602                // Overall blurring offset
6603                vec3 offset = vec3(vogelSample.x, vogelSample.y, -vogelSample.x) * (shadowRadius + 5.);
6604
6605                // NOTE: Removed for now
6606                // Penumbra offset
6607                //offset += vec3(vogelSample.x, vogelSample.y, vogelSample.y)  * (penumbra * gPenumbraFilterSize);
6608
6609                shadow += texture2DCompare( shadowMap, cubeToUV( bd3D + offset, texelSize.y ), compare );
6610
6611            }
6612            return shadow * gShadowSamplesRpc;
6613
6614        #elif defined( SHADOWMAP_TYPE_PCF_SOFT )
6615            for (int i = 0; i < 16; i++) {
6616                vec2 vogelSample = vogelDiskSample(i, gShadowSamples, temporalAngle) * texelSize;
6617
6618                // Overall blurring offset
6619                vec3 offset = vec3(vogelSample.x, vogelSample.y, -vogelSample.x) * (shadowRadius + 5.);
6620
6621                shadow += texture2DCompare( shadowMap, cubeToUV( bd3D + offset, texelSize.y ), compare );
6622
6623            }
6624            return shadow * (1.0 / 16.0);
6625        #else // no percentage-closer filtering
6626
6627            return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), compare );
6628
6629        #endif
6630
6631    }
6632
6633#endif
6634`,Tb=sd.lights_fragment_begin,Tw=sd.shadowmask_pars_fragment,TS=null,T_=e=>{switch(e){case"low":return 8;case"medium":default:return 16;case"high":return 32}},TA=(e="medium")=>{if(TS===e)return!1;TS=e;let t=T_(e);sd.shadowmap_pars_fragment=Tx(t);let i=Tb.slice();i=(i=i.replace("getShadow( spotShadowMap[ i ]","getShadow( UNROLLED_LOOP_INDEX + 3, spotShadowMap[ i ]")).replace("getShadow( directionalShadowMap[ i ]","getShadow( UNROLLED_LOOP_INDEX, directionalShadowMap[ i ]"),sd.lights_fragment_begin=i;let r=Tw.slice();return r=r.replaceAll("getShadow(","getShadow( UNROLLED_LOOP_INDEX, "),sd.shadowmask_pars_fragment=r,!0},TM=new r5({vertexShader:`
6635attribute vec3 randomColor;
6636varying vec3 vNormal;
6637flat out vec3 vColor;
6638#include <skinning_pars_vertex>
6639#include <morphtarget_pars_vertex>
6640	
6641void main()
6642{
6643#include <beginnormal_vertex>
6644#include <morphnormal_vertex>
6645#include <skinbase_vertex>
6646#include <skinnormal_vertex>
6647vec3 transformed = vec3(position);
6648#include <morphtarget_vertex>
6649#include <skinning_vertex>
6650
6651vNormal = normal;
6652vColor = randomColor;
6653gl_Position = projectionMatrix * (modelViewMatrix * vec4(transformed, 1.0));
6654}
6655`,fragmentShader:`
6656uniform float depthContrast;
6657varying vec3 vNormal;
6658flat in vec3 vColor;
6659void main()
6660{
6661vec3 normal = (normalize(vNormal)).rgb;
6662
6663float contrastDepth = (gl_FragCoord.z - 0.5) * depthContrast + 0.5;
6664
6665vec3 resultColor = mix(mix(vColor, normal, 0.2), vec3(contrastDepth), 0.4);
6666gl_FragColor = vec4(resultColor, vColor.r);
6667gl_FragColor = vec4(resultColor, vColor.r);
6668}
6669`,uniforms:{depthContrast:{value:1}}}),TE=new ih,TC=new tQ,TT=class extends ny{constructor(e){super(e),this._pixelRatio=this.getPixelRatio(),this.viewportWidth=1,this.viewportHe
6669ight=1,this.resolution=new tQ,this.dummyCamera=new Eg,this.sceneTransitionDuration=0,this.sceneTransitionTimeRemaining=-1,this.isXRCopyPassSet=!1,this.clear=(e=!0,t=!0,i=!0)=>{let r=this.getContext(),s=0;e&&(s|=r.COLOR_BUFFER_BIT),t&&(s|=r.DEPTH_BUFFER_BIT),i&&(s|=r.STENCIL_BUFFER_BIT),r.clear(s),r.clearBufferfv(r.COLOR,1,[0,0,0,1])},this.pipeline=new Ty(this,e?.needsDOFResize??!1),this.autoClear=!1;let t=this.setPixelRatio.bind(this),i=this.setSize.bind(this);this.shadowMap.enabled=!0,this.shadowMap.type=1,this.dummyCamera.matrixAutoUpdate=!1,this.domElement.removeAttribute("data-engine");let r=this.getContext();if(r&&"drawingBufferColorSpace"in r)try{r.drawingBufferColorSpace="display-p3"}catch(e){console.warn(e)}this.setPixelRatio=e=>{this._pixelRatio!==e&&(this._pixelRatio=e,t(e))},this.setSize=(e,t,r=!0)=>{(this.viewportWidth!==e||this.viewportHeight!==t)&&(this.viewportWidth=e,this.viewportHeight=t,i(e,t,r),this.normalRenderTarget?.setSize(e*this._pixelRatio,t*this._pixelRatio),this._resizeTransmission(e,t),this.transmissionDepthTarget?.setSize(e*this._pixelRatio/2,t*this._pixelRatio/2),this.pipeline.resize(e,t,r))},this._superDispose=this.dispose,this.dispose=this._currentDispose}createAORenderTarget(){void 0===this.aoRenderTarget&&(this.aoRenderTarget=new id(this.viewportWidth*this._pixelRatio,this.viewportHeight*this._pixelRatio,{generateMipmaps:!1,minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001,depthBuffer:!1}))}_resizeTransmission(e,t){this.transmissionRenderTarget?.setSize(e*this._pixelRatio/(this.hdTransmission?1:2),t*this._pixelRatio/(this.hdTransmission?1:2)),this.aoRenderTarget?.setSize(e*this._pixelRatio/1,t*this._pixelRatio/1)}get hdTransmission(){return 1===_k.transmissionLod.value}set hdTransmission(e){_k.transmissionLod.value=!0===e?1:2,this._resizeTransmission(this.viewportWidth,this.viewportHeight)}createTransmissionRenderTarget(){void 0===this.transmissionRenderTarget&&(this.transmissionRenderTarget=new id(this.viewportWidth*this._pixelRatio/(this.hdTransmission?1:2),this.viewportHeight*this._pixelRatio/(this.hdTransmission?1:2),{generateMipmaps:!0,minFilter:1008,magFilter:1006,wrapS:1001,wrapT:1001,depthBuffer:!1}),this.transmissionDepthTarget=new id(this.viewportWidth*this._pixelRatio/2,this.viewportHeight*this._pixelRatio/2,{minFilter:1003,magFilter:1003,depthBuffer:!1}))}createNormalRenderTarget(){void 0===this.normalRenderTarget&&(this.normalRenderTarget=new id(this.viewportWidth*this._pixelRatio,this.viewportHeight*this._pixelRatio,{generateMipmaps:!1,minFilter:1003,magFilter:1003,type:1015,depthTexture:new nf(this.viewportWidth*this._pixelRatio,this.viewportHeight*this._pixelRatio)}))}renderNormal(e,t,i){this.normalRenderTarget&&(this.setClearColor(0),i.layers.enable(8),i.layers.disable(0),i.layers.disable(3),t.traverseEntity(e=>{e.layers.isEnabled(8)&&(e.copyPreviousMatrix=!1)}),this.setRenderTarget(this.normalRenderTarget),this.clear(),i instanceof Eg?TM.uniforms.depthContrast.value=(i.far-i.near)/1e4:TM.uniforms.depthContrast.value=1,t.overrideMaterial=TM,this.render(t,i),this.setClearColor(t.bgColor,t.bgColor.a),this.setRenderTarget(null),t.overrideMaterial=e.wireframeState?DN:null,i.layers.enable(0),i.layers.enable(3),t.traverseEntity(e=>{e.layers.isEnabled(8)&&(e.copyPreviousMatrix=!0)}))}renderSplineSceneWithDummyCamera(e,t,i=1){this.dummyCamera.updateCameraState(t.dataPatched),this.dummyCamera.matrix.copy(t.matrixWorld);let r=t.height,s=t.width,a=this.viewportWidth/this.viewportHeight;s<r?s=r*a:r=s/a,this.dummyCamera.setViewplaneSize(s,r);for(let t=0;t<i;t++)this.renderSplineScene(e,this.dummyCamera)}renderSplineScene(e,t,{sceneHelpers:i=this.sceneHelpers,sceneHelpersOnTop:r=this.sceneHelpersOnTop,overrideTransmission:s,overrideNormal:a}={}){let o=e instanceof DU?e.activePage:e,l=o.visible;o.visible=!0;let h=o.scene;this.xr.enabled&&(!1===this.isXRCopyPassSet&&null!==this.getRenderTarget()&&(this.pipeline.setCopyPass(this.getRenderTarget()),this.isXRCopyPassSet=!0),this.xr.updateCamera(t)),this.setClearColor(o.bgColor,o.bgColor.a),o.penumbraSizeArray.forEach((e,t)=>{_k.penumbraSize.value[t]=e}),_k.pixelRatioNode.value=this.getPixelRatio(),0!==this.resolution.x&&0!==this.resolution.y?_k.resolution.value.set(this.resolution.x,this.resolution.y):_k.resolution.value.set(this.viewportWidth*this._pixelRatio,this.viewportHe
6669ight*this._pixelRatio),void 0!==a?(_k.normalRenderTarget.value=a,_k.normalRenderTargetDepth.value=TE):h.needsNormal()&&(this.createNormalRenderTarget(),_k.normalRenderTarget.value=this.normalRenderTarget.texture,_k.normalRenderTargetDepth.value=this.normalRenderTarget.depthTexture,this.renderNormal(h,o,t));let c=o.data.ao,d=c.occlusion;if(d&&(this.createAORenderTarget(),_k.aoRenderTarget.value=this.aoRenderTarget.texture),_k.aoEnabled.value=d,this.pipeline.setAmbientOcclusionParams(c.occlusion,c.radius,c.bias,o.aoColor,null!==o.fog,o.backupFog.near,o.backupFog.far,c.aoFullRes&&!uX),this.pipeline.aoPass.setBlueNoiseTexture(this.pipeline.blueNoiseTexture),this.pipeline.isUIOverlayEnabled&&o.uiCanvas?.enabled&&o.uiCanvas.texture&&o.uiCanvas.texture.image.width>0){let e=this.getSize(TC),t=this.getPixelRatio();(o.uiCanvas.width!==this.viewportWidth||o.uiCanvas.height!==this.viewportHeight||o.uiCanvas.dpr!==t)&&o.uiCanvas.applySize({width:this.viewportWidth,height:this.viewportHeight},t),o.uiCanvas.render(this),this.pipeline.uiOverlayPass.uiCanvas=o.uiCanvas,this.pipeline.uiOverlayPass.enabled=!0,this.pipeline.uiOverlayPass.setResolution(e.x,e.y,t),this.pipeline.updateRenderToScreen()}else this.pipeline.uiOverlayPass.enabled=!1,this.pipeline.updateRenderToScreen();if(this.pipeline.logoOverlayPass.enabled){let e=this.getSize(TC),t=this.getPixelRatio();this.pipeline.logoOverlayPass.uniforms.uResolution.value.set(e.x,e.y),this.pipeline.logoOverlayPass.uniforms.uDPR.value=t}let u=!1;if(void 0!==s)_k.transmissionRenderTarget.value=s,_k.transmissionRenderTargetDepth.value=TE,this.pipeline.setTransmissionPassEnabled(!1);else{var p,f;let e=h.needsTransmission();e&&(void 0===this.transmissionRenderTarget&&(u=!0),this.createTransmissionRenderTarget(),_k.transmissionRenderTarget.value=this.transmissionRenderTarget.texture,_k.aspectRatio.value=(p=this.viewportWidth)>=(f=this.viewportHeight)?new tQ(f/p,1):new tQ(1,p/f),_k.transmissionRenderTargetDepth.value=this.transmissionDepthTarget.texture),this.pipeline.setTransmissionPassEnabled(e)}t.layers.enable(3),t.layers.enable(8),this.pipeline.sceneHelpers=i,this.pipeline.sceneHelpersOnTop=r,this.pipeline.scene=o,this.pipeline.camera=t,u&&this.pipeline.transmissionPass.updatePasses(this),this.pipeline.postprocessingState===o.postprocessing||(this.pipeline.updatePostprocessing(o.postprocessing),i||r||this.pipeline.disableHelpers()),void 0!==this.clearAlphaOverride&&this.setClearAlpha(this.clearAlphaOverride),h.shapeBlendIntances.forEach(e=>{e.onBeforeShadowPass(this)}),o.overrideMaterial=h.wireframeState?DN:null,this.pipeline.render(),_k.frameIndex.value=(_k.frameIndex.value+1)%16,t instanceof Eg&&t.copyHistory(),o.visible=l}renderFromSceneForSceneTransitionPass(e,t,i){this.pipeline.renderToScreen=!1,this.pipeline.renderTarget,this.renderSplineScene(e,t),this.pipeline.sceneTransitionFromTexture=this.pipeline.renderTarget.texture,this.sceneTransitionDuration=i,this.sceneTransitionTimeRemaining=i,this.pipeline.renderToScreen=!0;let r=this.pipeline.sceneTransitionPass.uniforms;r.uDPR.value=window.devicePixelRatio,r.uResolution.value.set(this.domElement.width,this.domElement.height).divideScalar(window.devicePixelRatio)}_currentDispose(){this._superDispose(),this.pipeline.dispose(),this.aoRenderTarget?.dispose(),this.transmissionRenderTarget?.dispose(),this.transmissionDepthTarget?.dispose(),this.normalRenderTarget?.dispose(),this.normalRenderTarget?.depthTexture?.dispose()}},TP=class extends M7(lq){constructor(e,t=15,i=10066329){super(e,t,i),this.object=e,this.added=!1,this.name=`DirectionalLightHelper: ${e.uuid}`}raycast(e,t){Er(this.object,TP.geometryHelper,e,t)}},TD=class extends M7(lj){constructor(e,t=15,i=6710886){super(e,t,i),this.object=e,this.name=`PointLightHelper: ${e.uuid}`}raycast(e,t){Er(this.object,TD.geometryHelper,e,t)}},TI=class extends M7(lV){constructor(e,t=6710886){super(e,t),this.object=e,this.name=`SpotLightHelper: ${e.uuid}`}raycast(e,t){Er(this.object,TI.geometryHelper,e,t)}update(){if(void 0!==this.object){let e=TI._vector,t=this.object.distance?this.object.distance:1e3,i=t*Math.tan(this.object.angle);this.cone.scale.set(i,i,t),e.setFromMatrixPosition(this.object.target.matrixWorld),this.cone.lookAt(e);let r=void 0!==this.color?this.color:this.light.color;if(this.cone.material instanceof Array)for(let e=0,t=this.cone.material.length;e<t;e++)this.cone.material[e].color.set(r);else this.cone.material.color.set(r)}}},TO=TI;TO._vector=new iv;var TR=class extends nd{constructor(){super(),this.caretIndex=0,this._caretVisibleAlpha=1,this._selectionVisibleAlpha=.3,this.current={start:0,end:void 0},this.matrixAutoUpdate=!1,this.caretMesh=new rK(new sc(1,1),new rS({transparent:!0,opacity:0,side:2})),this.add(this.caretMesh),this.selectionMesh=new rK(new sc(1,1),new rS({color:2857471,transparent:!0,depthTest:!1,depthWrite:!1,opacity:0,side:2})),this.add(this.selectionMesh),this.hide()}get caretHeight(){return this.object?.AD??0}show(e){this.visible=!0,this.object=e,this.caretMesh.scale.set(1,this.caretHeight,1),this.caretMesh.position.y=-(.5*this.caretHeight),this.setCaretPosition(this.caretIndex),this.update()}hide(){this.visible=!1}update(){if(void 0===this.object)return;this.updateHelperMatrix();let{depth:e}=this.object.geometry.userData.parameters;this.caretMesh.position.z=e,this.selectionMesh.position.z=e}updateHelperMatrix(){if(void 0===this.object)return;let e=this.object,t=e.parent;for(let i of(null!==t&&t.updateWorldMatrix(!0,!1),e.matrixAutoUpdate&&e.updateMatrix(),null!==t?(this.matrixWorld.multiplyMatrices(t.matrixWorld,e.hiddenMatrix),this.matrixWorld.multiplyMatrices(this.matrixWorld,e.matrix)):this.matrixWorld.multiplyMatrices(e.hiddenMatrix,e.matrix),this.matrix.copy(this.matrixWorld),this.children))i.matrixWorld.copy(this.matrixWorld);e.updateWorldMatrix(!0,!0)}setCaretColor(e){let t=this.caretMesh.material;t.color.setRGB(e.r,e.g,e.b);let i=this._caretVisibleAlpha===t.opacity;this._caretVisibleAlpha=e.a,i&&(t.opacity=this._caretVisibleAlpha)}setSelectionColor(e){this.selectionMesh.material.color.setRGB(e.r,e.g,e.b)}setCaretPosition(e,t={}){if(void 0===this.object)return;this.caretIndex=e;let i=this.object.wrappedText,[r,s]=TB(i,e),[a,o]=e>0?TB(i,e-1):[null,null];(e>0&&i.length?i[a].charAt(o):null)===`
6670`&&(r++,s=0),this.current.start=e,this.current.end=void 0;let[l,h]=TL(this.object,r,s),{AD:c,descender:d}=this.object,{width:u,height:p,depth:f}=this.object.geometry.userData.parameters;this.caretMesh.scale.set(1,this.caretHeight,1),this.caretMesh.position.set(l-.5*("string"==typeof u?0:u),h+(d+.5*c)+.5*("string"==typeof p?0:p),f),this.hideSelectionMesh(),this.showCaretMesh()}setSelection(e,t){if(void 0===this.object)return;let i=this.object.wrappedText;this.current.start=e,this.current.end=t;let r=[],s=[],a=function(e,t,i){let[r,s]=TB(e,t),[a,o]=TB(e,i),l=[];s>=e[r].length&&(r++,s=0);for(let t=r;t<=a;t++){let i=e[t],h=t===r?s:0,c=t===a?o:i.length;l.push([t,h,c])}return l}(i,e,t),{lineHeight:o,AD:l,descender:h}=this.object,c=h+.5*l-.5*o;for(let[e,t,i]of a)if(t!==i){let[a,l]=TL(this.object,e,t),[h,d]=TL(this.object,e,i);l+=c,d+=c+o;let u=r.length/3;r.push(a,l,0),r.push(h,l,0),r.push(h,d,0),r.push(a,d,0),s.push(u+0,u+1,u+2),s.push(u+2,u+3,u+0)}let d=new rz;d.setIndex(s),d.setAttribute("position",new rT(r,3));let{width:u,height:p,depth:f}=this.object.geometry.userData.parameters;this.selectionMesh.geometry.dispose(),this.selectionMesh.geometry=d,this.selectionMesh.position.x=-(.5*("string"==typeof u?0:u)),this.selectionMesh.position.y=.5*("string"==typeof p?0:p),this.selectionMesh.position.z=f,this.showSelectionMesh(),this.hideCaretMesh()}getSelectionFromPosition(e,t,i="previous"){if(void 0===this.object||void 0===this.object.font)return;let r=this.object.wrappedText,s=r.length,a=this.object.lineHeight,o=s*a,{height:l,verticalAlign:h}=this.object.geometry.userData.parameters,c="string"==typeof l?0:l,d=0;
66703===h?d=c-o:2===h&&(d=.5*c-.5*o);let u=Math.min(Math.floor(Math.max(Math.min(-t-d,o),0)/a),s-1),p=this.object.charCoords[u],f=this.object.charWidths[u],m=0,g=!1;if("previous"===i){for(let t=0;t<p.length;t++)if(p[t][0]+.5*f[t]-e>0){m=t,g=!0;break}}else if("closest"===i){let t=1/0;for(let i=0;i<p.length;i++){let r=Math.abs(p[i][0]+.5*f[i]-e);r<t&&(t=r,m=i,g=!0)}}else for(let t=0;t<p.length;t++){let i=p[t][0],r=p[t][0]+f[t];if(e>=i&&e<r){m=t,g=!0;break}}return g||(m=p.length),{index:this.getGlobalIndexFromLineAndCharIndexes(r,u,m),lineIndex:u,characterIndex:m}}getGlobalIndexFromLineAndCharIndexes(e,t,i){return e.slice(0,t).reduce((e,t)=>e+=t.length,0)+i}showSelectionMesh(){this.selectionMesh.material.opacity=this._selectionVisibleAlpha}hideSelectionMesh(){this.selectionMesh.material.opacity=0}showCaretMesh(){this.caretMesh.material.opacity=this._caretVisibleAlpha}hideCaretMesh(){this.caretMesh.material.opacity=0}};function TL(e,t,i){let{charCoords:r,charWidths:s,initialOffsetY:a,lineHeight:o}=e;if(r[t]&&0===r[t].length||0===r.length){let i=0,{horizontalAlign:r}=e.data.geometry,s=e.wrappedText,{width:l}=e.geometry.userData.parameters;return 1===s.length&&0===s[0].length&&(3===r?i=.5*l:2===r&&(i=l)),[i,a-o*t]}let l=r[t];if(void 0===l||0===l.length)return[0,0];let[h,c]=l[Math.min(i,l.length-1)];return i>=l.length&&(h+=s[t][i-1]),[h,c]}function TB(e,t){let i=0;for(let r=0;r<e.length;r++){let s=e[r],a=t-i;if(a<=s.length)return[r,a];i+=s.length}return[Math.max(0,e.length-1),e[e.length-1]?.length??0]}var Tz=class extends Ew(lp,TP){constructor(e,t,i){super(),this.super_Entity(e,t),this.castShadow=!0,this.shadow.mapSize.width=2048,this.shadow.mapSize.height=2048,this.shadow.normalBias=1,this.layers.enable(3);let r=this.shadow.camera;r.top=1250,r.bottom=-1250,r.right=1250,r.left=-1250,r.near=-1e4,r.far=2500;let s=new lQ(this.shadow.camera);s.visible=!1,this.gizmos.shadowmap=s}update(){for(let e in this.shadow.camera.updateProjectionMatrix(),this.gizmos){let t=this.gizmos[e];t instanceof lQ&&t.update()}}updateMatrixWorld(e){super.updateMatrixWorld(e),this.objectHelper&&this.objectHelper.update()}updateState(e,t){var i;this.updateState_Light(e,t);let r=void 0!==e.depth&&e.depth!==this.shadow.camera.far||void 0!==e.size&&e.size/2!==this.shadow.camera.right;void 0!==e.size&&(i=e.size,this.shadow.camera.right=i/2,this.shadow.camera.left=-i/2,this.shadow.camera.top=i/2,this.shadow.camera.bottom=-i/2,this.shadow.needsUpdate=!0),void 0!==e.shadowRadius&&(this.shadow.radius=e.shadowRadius),void 0!==e.shadowResolution&&(this.shadow.mapSize.set(e.shadowResolution,e.shadowResolution),this.shadow.map&&(this.shadow.map.dispose(),this.shadow.map=null)),void 0!==e.penumbraSize&&t.scene.markPenumbraSizeDirty(),r&&this.update()}},TF=new iv,TN=new iv,Tk=new ig,TU=class extends Ew(ln,TO){constructor(e,t,i){super(),this.super_Entity(e,t),this.castShadow=!0,this.shadow.mapSize.width=1024,this.shadow.mapSize.height=1024,this.shadow.normalBias=1,this.layers.enable(3);let r=this.shadow.camera;r.fov=2*tY.RAD2DEG*this.angle,r.aspect=1,r.near=100,r.far=2500;let s=new lQ(this.shadow.camera);s.visible=!1,this.gizmos.shadowmap=s,this.update()}update(){for(let e in this.shadow.camera.updateProjectionMatrix(),this.gizmos){let t=this.gizmos[e];t instanceof lQ&&t.update()}}updateMatrixWorld(e){super.updateMatrixWorld(e),TN.setFromMatrixPosition(this.matrixWorld),Tk.setFromRotationMatrix(this.matrixWorld),TF.copy(this.up).applyQuaternion(Tk).negate().multiplyScalar(this.distance),this.target.position.copy(TN).add(TF),this.target.updateMatrixWorld(),this.objectHelper&&this.objectHelper.update()}updateState(e,t){this.updateState_Light(e,t),void 0!==e.distance&&(this.distance=e.distance),void 0!==e.decay&&(this.decay=e.decay),void 0!==e.angle&&(this.angle=e.angle),void 0!==e.penumbra&&(this.penumbra=e.penumbra),void 0!==e.shadowRadius&&(this.shadow.radius=e.shadowRadius),void 0!==e.penumbraSize&&t.scene.markPenumbraSizeDirty(),void 0!==e.shadowResolution&&(this.shadow.mapSize.set(e.shadowResolution,e.shadowResolution),this.shadow.map&&(this.shadow.map.dispose(),this.shadow.map=null))}};function TV(e,t){return[[e[0][0]*t[0][0]+e[0][1]*t[1][0],e[0][0]
6670*t[0][1]+e[0][1]*t[1][1]],[e[1][0]*t[0][0]+e[1][1]*t[1][0],e[1][0]*t[0][1]+e[1][1]*t[1][1]]]}function Tj(e){return[[e[0][0],e[1][0]],[e[0][1],e[1][1]]]}(e=>{function t(e){return[e[0],e[3],e[1],e[4],e[2],e[5]]}e.identity=function(){return[1,0,0,0,1,0,0,0,1]},e.copy=function(t,i=e.identity()){for(let e=0,r=t.length;e<r;e++)i[e]=t[e];return i},e.create=function(t,i,r,s,a,o){return e.setAbcdef(e.identity(),t,i,r,s,a,o)},e.setAbcdef=function(e,t,i,r,s,a,o){return e[0]=t,e[1]=r,e[2]=a,e[3]=i,e[4]=s,e[5]=o,e},e.append=function(i,r){let[s,a,o,l,h,c]=t(i),[d,u,p,f,m,g]=t(r);return e.create(d*s+u*o,d*a+u*l,p*s+f*o,p*a+f*l,m*s+g*o+h,m*a+g*l+c)},e.prepend=function(i,r){let[s,a,o,l,h,c]=t(i),[d,u,p,f,m,g]=t(r),v=s,y=a,x=o,b=l;return(1!==d||0!==u||0!==p||1!==f)&&(v=s*d+a*p,y=s*u+a*f,x=o*d+l*p,b=o*u+l*f),e.create(v,y,x,b,h*d+c*p+m,h*u+c*f+g)},e.getAbcdef=t,e.invert=function(t){let[i,r,s,a,o,l]=e.getAbcdef(t),h=i*a-r*s;return e.create(a/h,-r/h,-s/h,i/h,(s*l-a*o)/h,-(i*l-r*o)/h)},e.apply=function([t,i],r){let[s,a,o,l,h,c]=e.getAbcdef(r);return[s*t+o*i+h,a*t+l*i+c]},e.applyInverse=function(t,i){let[r,s,a,o,l,h]=e.getAbcdef(i),c=1/(r*o+-(a*s)),[d,u]=t;return[o*c*d+-a*c*u+(h*a-l*o)*c,r*c*u+-s*c*d+(-h*r+l*s)*c]},e.scale=function(t,i,r=i){let[s,a,o,l,h,c]=e.getAbcdef(t);return e.setAbcdef(t,s*i,a*r,o*i,l*r,h*i,c*r),t},e.rotate=function(t,i){let r=Math.cos(i),s=Math.sin(i),[a,o,l,h,c,d]=e.getAbcdef(t);return e.setAbcdef(t,a*r-o*s,a*s+o*r,l*r-h*s,l*s+h*r,c*r-d*s,c*s+d*r),t},e.rotateAround=function(t,i,r){let[s,a]=r,o=e.translate(t,-s,-a);return o=e.rotate(o,i),o=e.translate(o,s,a)},e.translate=function(t,i,r){let[s,a,o,l,h,c]=e.getAbcdef(t);return e.setAbcdef(t,s,a,o,l,h+i,c+r),t},e.setTranslate=function(t,i,r){let[s,a,o,l]=e.getAbcdef(t);return e.setAbcdef(t,s,a,o,l,i,r),t},e.setPosition=function(t,i,r){let[s,a,o,l]=e.getAbcdef(t);return e.setAbcdef(t,s,a,o,l,i,r),t},e.getScale=function(t){let[i,r,s,a]=e.getAbcdef(t);return[Math.sqrt(i*i+r*r),Math.sqrt(s*s+a*a)]},e.getPosition=function(t){let[,,,,i,r]=e.getAbcdef(t);return[i,r]},e.getRotation=function(t,i){return e.decompose(t,i).rotation},e.decompose=function(t,i){let[r,s,a,o,l,h]=e.getAbcdef(t),{rotation:c,scale:d,shear:u}=function(e){let t,i,r,s,a,o,l,h,c,d,u,p;let[f,m,g]=(t=(e[0][0]+e[1][1])/2,i=(e[0][0]-e[1][1])/2,r=(e[1][0]+e[0][1])/2,a=Math.sqrt(t*t+(s=(e[1][0]-e[0][1])/2)*s),o=Math.sqrt(i*i+r*r),l=Math.atan2(r,i),c=((h=Math.atan2(s,t))-l)/2,u=[[Math.cos(d=(h+l)/2),Math.sin(d)],[-Math.sin(d),Math.cos(d)]],p=[[Math.cos(c),Math.sin(c)],[-Math.sin(c),Math.cos(c)]],u[0][0]*=-1,u[0][1]*=-1,p[0][0]*=-1,p[1][0]*=-1,[u,[[a+o,0],[0,a-o]],p]),v=TV(f,Tj(g)),y=TV(TV(g,m),Tj(g));return{rotation:Math.atan2(v[1][0],v[0][0]),scale:[y[0][0],y[1][1]],shear:[y[0][1]/y[1][1],y[1][0]/y[0][0]]}}([[r,a],[s,o]]);return{position:[l+(i[0]*r+i[1]*a)-i[0],h+(i[0]*s+i[1]*o)-i[1]],scale:d,rotation:c,shear:u,pivot:i}},e.compose=function(t,i,r,s,a=[0,0]){let[o,l]=t,[h,c]=s,[d,u,p,f]=function({rotation:e,scale:t,shear:i}){let r=Math.cos(e),s=Math.sin(e),a=TV([[r,-s],[s,r]],[[t[0],i[0]*t[1]],[i[1]*t[0],t[1]]]);return[a[0][0],a[1][0],a[0][1],a[1][1]]}({rotation:r,scale:i,shear:a});return e.create(d,u,p,f,o-(h*d+c*p)+h,l-(h*u+c*f)+c)}})(TW||(TW={}));var TG,TH,TW,Tq,TX=Math.PI/180,TY=class{constructor(e,t,i){this.uuid=e,this.data=t,this.localMatrix=TW.identity(),this.worldMatrix=TW.identity(),this.ignoreCameraZoom=!1,this.visible=!0,this._singleBBox=new T$,this._recursiveBBox=new T$,this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0,this.stateSelection=null,this.prevState=null,this.currentState=null,this.reversibleToState=null,this.currentTransitionEvent=null,this.previousAction=null,this.name="",this.position=[0,0],this.scale=[1,1],this.rotation=0,this.shear=[0,0],this.emitter=wR(),this.dpr=i.dpr??1,this.dataPatched=t}project(e,t){let i=this.worldMatrix;return t&&(i=TW.append(t.worldMatrix,i)),TW.applyInverse(e,i)}intersects(e,t,i,r=!1){return this.visible&&!this.data.raycastLock&&this.intersectsInLocalSpace(...this.project([e,t],i),r)}intersectsInLocalSpace(e,t,i=!1){let{min:r,max:s}=i?this.recursiveBBox:this.singleBBox;return e>=r[0]&&e<=s[0]&&t>=r[1]&&t<=s[1]}applyTransforms(e){e.setTransform(this.worldMatrix,this.ignoreCameraZoom)}get singleBBox(){return this.singleBBoxNeedsUpdate&&(this.singleBBoxNeedsUpdate=!1,this._singleBBox.setFromObjectSize(this,!1),this._singleBBox.computeVertices(),this._singleBBox.computeEdges()),this._singleBBox}get recursiveBBox(){return this.recursiveBBoxNeedsUpdate&&(this.recursiveBBoxNeedsUpdate=!1,this._recursiveBBox.setFromObjectSize(this,!0),this._recursiveBBox.computeVertices(),this._recursiveBBox.computeEdges()),this._recursiveBBox}updateLocalMatrix(){this.localMatrix=TW.compose(this.position,this.scale,this.rotation*TX,yj.getPivot(this.dataPatched),this.shear)}updateWorldMatrix(e,t,i){let r=this.parent;t&&null!=r&&r.updateWorldMatrix(e,!0,!1),e&&this.updateLocalMatrix(),this.parent?this.worldMatrix=TW.append(this.parent.worldMatrix,this.localMatrix):this.worldMatrix=TW.copy(this.localMatrix),this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0}get pivot(){return yj.getPivot(this.data)}getCenter(){return[0,0]}getHalfSize(){return[0,0]}get id(){return this.uuid}resetBBoxNeedsUpdateSelf(){this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0}resetBBoxNeedsUpdate(){this.resetBBoxNeedsUpdateSelf(),this.traverseAncestors(e=>{e.resetBBoxNeedsUpdateSelf()})}updateTransformState(e){let t=!1;void 0!==e.position&&(t=!0,this.position=e.position),void 0!==e.rotation&&(t=!0,this.rotation=e.rotation),void 0!==e.scale&&(t=!0,this.scale=e.scale),void 0!==e.shear&&(t=!0,this.shear=e.shear),t&&(this.updateWorldMatrix(!0,!1,!0),this.resetBBoxNeedsUpdate())}updateByOp(e,t,i){0===e.type&&void 0!==e.props.visible&&(this.visible=e.props.visible),this.data=t,this.data=t;let r=e,s=pX(e.path,["states","*"]);if(null!==s){if(0===e.type){let[t]=s;if(this?.stateSelection===t){let t={...e.props};if(delete t.name,Object.values(e.props).some(e=>void 0===e)){let i=this.data;if(void 0!==i){let r=p1.zoom(i,e.path.slice(2));if(r)for(let i in e.props)void 0===e.props[i]&&i in r&&(t[i]=r[i])}}r={...e,props:t,path:e.path.slice(2)}}}}else if(0===e.type){let t=this.stateSelection?this.data.states.data(this.stateSelection):void 0;if(void 0!==t){if(void 0!==e.props.name&&t.name){let{name:e,...i}=t;t=i}let i=p1.removeOverridden(e.path,e.props,t);r={...e,props:i}}}this.updateByPatchedOpBase(r,yI.patch(this.data,this.stateSelection?this.data.states.data(this.stateSelection):void 0),i)}changeSelectedState(e,t,i=!1){if(!(0===this.data.states.length&&!i)){for(let e of this.data.states)yI.toOps(this.data,e.data).forEac
vendor: 4,150 bytes, line 6670
6670h(e=>{let i=pJ.replaceProps(e,this.data);this.dataPatched=this.data,this.updateByPatchedOp(i,this.data,t)});if(null!==e){let i=this.data.states.data(e);i&&(this.dataPatched=yI.patch(this.data,i),yI.toOps(this.data,i).forEach(e=>{this.updateByPatchedOp(e,this.dataPatched,t)}))}i&&this.updateTransformState(this.dataPatched),this.stateSelection=e}}updateState(e,t){void 0!==e.name&&(this.name=e.name),void 0!==e.visible&&(this.visible=e.visible),this.updateTransformState(e)}updateByPatchedOpBase(e,t,i){this.dataPatched=t,this.updateByPatchedOp(e,t,i)}updateByPatchedOp(e,t,i){0===e.path.length&&0===e.type&&this.updateState(e.props,i),this.requestRender()}traverseFrameAncestors(e){this.traverseAncestors(t=>{"frame2d"===t.data.type&&e(t)})}traverseAncestors(e){let t=this.parent;for(;t;)e(t),t=t.parent}requestRender(){this.traverseFrameAncestors(e=>{e.requestRender()})}clone(e){let t=new TY(this.uuid,this.data,e);return t.parent=void 0,t}addEventListener(e,t){this.emitter.on(e,t)}removeEventListener(e,t){this.emitter.off(e,t)}dispatchEvent(e){this.emitter.emit(e.type,{...e,target:e.target??this})}traverseSortNextHelper(){let e=this.parent;if(e){let t=e.children;if(t){let i=t.indexOf(this)+1;return t[i]?t[i]:e.traverseSortNextHelper()}}}sortNext(){let e=this.children;return e&&e.length>0&&e[0]?e[0]:this.traverseSortNextHelper()}isDescendantOf(e){e instanceof TY&&(e=e.uuid);let t=this;for(;t.parent;){if(t.parent.uuid===e)return!0;t=t.parent}return!1}},TQ=class extends TY{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.context=i,this.children=[]}add(e){e.parent&&e.parent instanceof TQ&&e.parent.remove(e),this.children.push(e),e.parent=this}remove(e){let t=this.children.indexOf(e);t>=0&&(this.children.splice(t,1),e.parent=void 0)}traverse(e){let t=e(this);if(!0!==t)for(let i of this.children)i instanceof TQ?i.traverse(e):t=e(i)}intersectsChildrenHelper(e,t,i,r,s){for(let a of this.children)if(a.intersects(e,t,i,!1)&&(s.push(a),r)||a instanceof TQ&&a.intersectsChildrenHelper(e,t,i,r,s))return!0;return!1}intersectsChildren(e,t,i,r=!1,s=[],a=!1){return this.intersectsChildrenHelper(e,t,i,r,s),s}intersectsChildrenHelperReverse(e,t,i,r,s){for(let a of this.children)if(a instanceof TQ&&a.intersectsChildrenHelperReverse(e,t,i,r,s)||a.intersects(e,t,i,!1)&&(s.push(a),r))return!0;return!1}intersectsChildrenReverse(e,t,i,r=!1,s=[],a=!1){return this.intersectsChildrenHelperReverse(e,t,i,r,s),s}updateWorldMatrix(e,t,i){if(super.updateWorldMatrix(e,t,i),i&&this.children)for(let t of this.children)t.updateWorldMatrix(e,!1,!0)}find(e){let t;return this.traverse(i=>{i.uuid===e&&(t=i)}),t}innerDrawChildren(e){for(let t=this.children.length-1;t>=0;t--)this.children[t].draw(e)}resetBBoxNeedsUpdate(){super.resetBBoxNeedsUpdate(),this.traverse(e=>{e.resetBBoxNeedsUpdateSelf()})}clone(e){let t=new TQ(this.uuid,this.data,e);for(let i of(t.parent=void 0,this.children))t.add(i.clone(e));return t}},TK=class extends TQ{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.updateState(t,i)}draw(e){this.visible&&(e.save(),this.applyTransforms(e),this.innerDrawChildren(e),e.restore())}clone(e){let t=new TK(this.uuid,this.data,e);for(let i of(t.parent=void 0,this.children))t.add(i.clone(e));return t}},TZ=[[-1,1],[-1,-1],[1,-1],[1,1]],TJ=(e,t,i)=>{let r=e.getCenter(),s=e.getHalfSize(),a=TW.append(t,e.worldMatrix);0===s[0]&&0===s[1]?i.push(TW.apply(r,a)):TZ.forEach(e=>{let t=[e[0]*s[0]+r[0],e[1]*s[1]+r[1]];i.push(TW.apply(t,a))})},T$=class{constructor(){this.matrix=TW.identity(),this.min=[1/0,1/0],this.max=[-1/0,-1/0],this.vertices=[],this.edges=[]}setFromObjectSize(e,t=!1){e.updateWorldMatrix(),this.makeEmpty(),TW.copy(e.worldMatrix,this.matrix);let i=TW.invert(e.worldMatrix);this.expandByObjectSize(e,i,t)}expandByObjectSize(e,t,i=!1){let r=[];!0===i&&e instanceof TQ?e.traverse(e=>{e.visible&&TJ(e,t,r)}):TJ(e,t,r),this.setFromPoints(r)}setFromSize(e,t,i){this.makeEmpty(),TW.copy(i,this.matrix),this.expandBySize(e,t,i)}expandBySize(e,t,i){[TW.apply([0,0],i),TW.apply([0,t],i),TW.apply([e,t],i),TW.apply([e,0],i)].forEach(e=>this.expandByPoint(e))}getCenter(){let[e,t]=this.min,[i,r]=this.getHalfSize();
6670return TW.apply([e+i,t+r],this.matrix)}getSize(){return[this.max[0]-this.min[0],this.max[1]-this.min[1]]}getHalfSize(){return[(this.max[0]-this.min[0])*.5,(this.max[1]-this.min[1])*.5]}makeEmpty(){this.min=[1/0,1/0],this.max=[-1/0,-1/0]}setFromPoints(e){for(let t of(this.makeEmpty(),e))this.expandByPoint(t)}expandByPoint(e){this.min=[Math.min(this.min[0],e[0]),Math.min(this.min[1],e[1])],this.max=[Math.max(this.max[0],e[0]),Math.max(this.max[1],e[1])]}computeVertices(){let[e,t]=this.getHalfSize(),i=this.getCenter(),[r,s,a,o]=TW.getAbcdef(this.matrix),l=TW.create(r,s,a,o,i[0],i[1]);this.vertices=TZ.map(([i,r])=>TW.apply([i*e,r*t],l))}computeEdges(){this.edges=[];for(let e=0,t=this.vertices.length;e<t;++e)this.edges.push([this.vertices[e],this.vertices[(e+1)%t]])}project(e,t){let i=this.matrix;return t&&(i=TW.append(t.worldMatrix,i)),TW.applyInverse(e,i)}intersects(e,t,i){return this.intersectsInLocalSpace(...this.project([e,t],i))}intersectsInLocalSpace(e,t){let{min:i,max:r}=this;return e>=i[0]&&e<=r[0]&&t>=i[1]&&t<=r[1]}containsPoint(e){let[t,i]=e,[r,s]=this.min,[a,o]=this.max;return t>=r&&t<=a&&i>=s&&i<=o}intersectsBBox2D(e){for(let t=0,i=this.edges.length;t<i;t++){let i=this.edges[t];for(let t=0,r=e.edges.length;t<r;t++)if(function(e,t){let[[i,r],[s,a]]=e,[[o,l],[h,c]]=t,d=(i-s)*(l-c)-(r-a)*(o-h);if(0===d)return!1;let u=((i-o)*(l-c)-(r-l)*(o-h))/d,p=-((i-s)*(r-l)-(r-a)*(i-o))/d;return u>=0&&u<=1&&p>=0&&p<=1}(i,e.edges[t]))return!0}for(let t=0,i=e.vertices.length;t<i;t++){let i=e.vertices[t];if(this.containsPoint(i))return!0}return!1}ensureMinMax(){let e=this.min,t=this.max;this.min=[Math.min(e[0],t[0]),Math.min(e[1],t[1])],this.max=[Math.max(e[0],t[0]),Math.max(e[1],t[1])]}copy(e){this.min=[...e.min],this.max=[...e.max],TW.copy(e.matrix,this.matrix),this.computeVertices(),this.computeEdges()}clone(){let e=new T$;return e.copy(this),e}},T0=new Promise(e=>{Tq=e}),T1=!1;function T2(e){let t=!1;return e.scene.objects.traverse((e,i)=>{("Mesh"===i.type&&"UIGeometry"===i.geometry.type||"Page"===i.type&&void 0!==i.uiFrame)&&(t=!0)}),t}async function T3(e){let t=await T0;T7||(Pe||(Pe=t({locateFile:()=>e})),T7=await Pe)}var T4=TW.identity(),T5=class{constructor(e,t=1){this.canvas=e,this._dpr=t,this._width=0,this._height=0,this._strokeMode="inside",this._layerBlur=0,this._backgroundBlur=0,this._dropShadowBlur=0,this._dropShadowOffsetX=0,this._dropShadowOffsetY=0,this._dropShadowColor=ga.transparent,this._innerShadowBlur=0,this._innerShadowOffsetX=0,this._innerShadowOffsetY=0,this._innerShadowSpread=0,this._innerShadowColor=ga.transparent,this._fonts=new Map,this._isSizeDirty=!1;try{let i=e.getBoundingClientRect();e.width=i.width*t,e.height=i.height*t}catch{console.log(e.width,t)}this._currentM3Transform=T4,this._currentTransform=new Float32Array(T4)}get dpr(){return this._dpr}set dpr(e){this._dpr=e,this._isSizeDirty=!0}
6670async init(){if(!this.wasmURL)throw Error("Your must set the wasm binary url with renderer.wasmURL = ... before you can call renderer.init");await T3(this.wasmURL),this._surface=T7.MakeWebGLCanvasSurface(this.canvas),this.ctx=this._surface?.getCanvas(),this._paint=new T7.Paint,this._paint.setAntiAlias(!0),this._paintFill=this._paint.copy(),this._paintFill.setStyle(T7.PaintStyle.Fill),this._paintStroke=this._paint.copy(),this._paintStroke.setStyle(T7.PaintStyle.Stroke),this.ctx?.scale(this.dpr,this.dpr)}get currentTransform(){return this._currentM3Transform}get currentTransformBuffer(){return this._currentTransform}set currentTransform(e){this._currentM3Transform=e,this._currentTransform.set(e)}async loadFont(e,t){let i=await (await fetch(e)).arrayBuffer();this.registerFont(i,t)}registerFont(e,t){if(this._fonts.has(t))return;let i=T7.FontMgr.FromData(e);if(i)this._fonts.set(t,i);else throw Error("Invalid font data for "+t)}get width(){return this._width}get height(){return this._height}set strokeColor(e){this._paintStroke&&this._paintStroke.setColor(T8(e),T7.ColorSpace.DISPLAY_P3)}set fillColor(e){this._paintFill&&this._paintFill.setColor(T8(e),T7.ColorSpace.DISPLAY_P3)}set lineWidth(e){this._paintStroke&&this._paintStroke.setStrokeWidth("center"===this._strokeMode?e:2*e)}set strokeMode(e){this._strokeMode=e}set dropShadowBlur(e){this._dropShadowBlur=e}set dropShadowColor(e){this._dropShadowColor=e}set dropShadowOffsetX(e){this._dropShadowOffsetX=e}set dropShadowOffsetY(e){this._dropShadowOffsetY=e}set innerShadowBlur(e){this._innerShadowBlur=e}set innerShadowColor(e){this._innerShadowColor=e}set innerShadowOffsetX(e){this._innerShadowOffsetX=e}set innerShadowOffsetY(e){this._innerShadowOffsetY=e}set innerShadowSpread(e){this._innerShadowSpread=e}set layerBlur(e){this._layerBlur=e}set backgroundBlur(e){this._backgroundBlur=e}clear(){this.ctx?.clear(T7.TRANSPARENT)}save(){this.ctx?.save()}restore(){this.ctx?.restore()}beginPath(){this._currentPath?.delete(),this._currentPath=new T7.Path}closePath(){let e=this._currentPath;if(e){if(e.isEmpty())return;let t=e.getBounds();(t[3]-t[1]||t[2]-t[0])&&e.close()}}fill(){this._paintInner(this._paintFill,!0)}stroke(){this._paintInner(this._paintStroke,!1)}clipRect(e,t,i,r,s=0,a=0,o=0,l=0){let h=T7.XYWHRect(e,t,i,r);if(0===s&&0===a&&0===l&&0===o)this.ctx?.clipRect(h,T7.ClipOp.Intersect,!0);else{let e=T7.RRectXY(h,s,s);e[4]=e[5]=s,e[6]=e[7]=a,e[8]=e[9]=o,e[10]=e[11]=l,this.ctx?.clipRRect(e,T7.ClipOp.Intersect,!0)}}_applyShadowOffsetMatrix(){if(this.ctx){let e=TW.invert(this.currentTransform);this.ctx.concat(e);let t=TW.translate(TW.identity(),this._dropShadowOffsetX,this._dropShadowOffsetY);this.ctx.concat(t),this.ctx.concat(this._currentTransform)}}_applyEffectsToPaint(e,t,i=!0){if(this.ctx&&this._currentPath){let r,s=!1;if(i&&this._hasDropShadow()){let i,r=e.copy();r.setColor(T8(this._dropShadowColor)),this._dropShadowBlur>0&&(i=T7.MaskFilter.MakeBlur(T7.BlurStyle.Normal,this._dropShadowBlur*this.dpr*(this.camera?.scale??1),!1),r.setMaskFilter(i)),this.ctx.save(),this.ctx.clipPath(this._currentPath,T7.ClipOp.Difference,!0),this._applyShadowOffsetMatrix(),t(r),this.ctx.restore(),r.delete(),i?.delete()}if(this._backgroundBlur>0&&i){this.ctx.save(),this.ctx.clipPath(this._currentPath,T7.ClipOp.Intersect,!0);let t=T7.ImageFilter.MakeBlur(this._backgroundBlur,this._backgroundBlur,T7.TileMode.Clamp,null),i=e.copy();i.setImageFilter(t),i.setAlphaf(1);let r=this._currentPath.computeTightBounds();this.ctx.saveLayer(i,r,null,T7.SaveLayerInitWithPrevious),this.ctx.drawColor(e.getColor()),this.ctx.restore(),this.ctx.restore(),i.delete(),t.delete(),s=!0}if(this._layerBlur>0){let i=e.copy();r=T7.MaskFilter.MakeBlur(T7.BlurStyle.Normal,this._layerBlur*this.dpr*(this.camera?.scale??1),!1),i.setMaskFilter(r),t(i),i.delete(),r.delete(),s=!0}if(s||t(e),i&&this._hasInnerShadow()){let e,t=new T7.Paint;t.setAntiAlias(!0),t.setStyle(T7.PaintStyle.Fill),t.setColor(T8(this._innerShadowColor)),this._innerShadowBlur>0&&(e=T7.MaskFilter.MakeBlur(T7.BlurStyle.Normal,this._innerShadowBlur*this.dpr*(this.camera?.scale??1),!1),t.setMaskFilter(e));let i=this._currentPath.computeTightBounds(),[r,s,a,o]=i;this.ctx.save(),this.ctx.clipPath(this._currentPath,T7.ClipOp.Intersect,!0),this.ctx.saveLayer(t,i,null,T7.SaveLayerInitWithPrevious),this.ctx?.translate(this._innerShadowOffsetX,this._innerShadowOffsetY),this.ctx.drawRect(T7.XYWHRect(-1e3-this._innerShadowOffsetX,-1e3-this._innerShadowOffsetY,2e3+(a-r)+Math.abs(2*this._innerShadowOffsetX),2e3+(o-s)+Math.abs(2*this._innerShadowOffsetY)),t),t.setBlendMode(T7.BlendMode.Clear),this.ctx.drawPath(this._currentPath,t),this.ctx.restore(
6670),this.ctx.restore(),t.delete(),e?.delete()}}}_paintInner(e,t=!0){if(this.ctx&&this._currentPath&&e){let i=this.ctx,r=this._currentPath;this._applyEffectsToPaint(e,e=>{let s=!1;t||"center"===this._strokeMode||(i.save(),i.clipPath(r,"outside"===this._strokeMode?T7.ClipOp.Difference:T7.ClipOp.Intersect,!0),s=!0),i.drawPath(r,e),s&&i.restore()},t)}}_hasDropShadow(){return this._dropShadowColor?.a>0}_hasInnerShadow(){return this._innerShadowColor?.a>0}path(e){this._currentPath?.addPath(T7.Path.MakeFromSVGString(e))}ellipse(e,t,i,r,s,a,o,l){if(!T6([e,t,i,r])||!this._currentPath)return;if(i<0||r<0)throw Error("radii cannot be negative");let h=T7.XYWHRect(e-i,t-r,2*i,2*r);this._currentPath?.addOval(h)}rect(e,t,i,r,s=0,a=0,o=0,l=0){let h=T7.XYWHRect(e,t,i,r);if(T6(h)){if(0===s&&0===a&&0===l&&0===o)this._currentPath?.addRect(h);else{let e=T7.RRectXY(h,s,s);e[4]=e[5]=s,e[6]=e[7]=a,e[8]=e[9]=o,e[10]=e[11]=l,this._currentPath?.addRRect(e)}}}getHorizontalAlign(e){switch(e){case 2:return T7.TextAlign.Right;case 3:return T7.TextAlign.Center;case 4:return T7.TextAlign.Justify;default:return T7.TextAlign.Left}}drawTextInner(e,t,i,[r,s,a,o],l,h,c=!0){let d=0,{ctx:u}=this;if(!u)return d;let p=h.copy(),f=h.copy();return f.setAlphaf(0),this._applyEffectsToPaint(p,h=>{t.pushPaintStyle(i,h,f),t.addText(e);let c=t.build();c.layout(a);let p=s;2===l?p+=(o-c.getHeight())/2:3===l&&(p+=o-c.getHeight()),u.drawParagraph(c,r,p),d=c.getHeight(),t.reset(),c.delete()},c),p.delete(),f.delete(),d}drawText(e,t){let i=0,r=this._fonts.get(t.font),{ctx:s,_paintFill:a,_paintStroke:o}=this;if(r&&s){let s=new T7.TextStyle({fontFamilies:[t.font],fontSize:t.fontSize,heightMultiplier:t.lineHeight,letterSpacing:t.letterSpacing}),l=new T7.ParagraphStyle({textStyle:s,textAlign:this.getHorizontalAlign(t.horizontalAlign)}),h=T7.XYWHRect(t.x,t.y,t.width,t.height),c=T7.ParagraphBuilder.Make(l,r);a&&(i=this.drawTextInner(e,c,s,h,t.verticalAlign,a,!0)),o&&(i=this.drawTextInner(e,c,s,h,t.verticalAlign,o,!1)),c.delete()}return{height:i}}render(){this._surface?.flush()}moveTo(e,t){this._currentPath?.moveTo(e,t)}lineTo(e,t){this._currentPath?.lineTo(e,t)}bezierCurveTo(e,t,i,r,s,a){this._currentPath?.cubicTo(e,t,i,r,s,a)}quadraticCurveTo(e,t,i,r){this._currentPath?.quadTo(e,t,i,r)}setTransform(e,t=!1){if(!this.ctx)return;let i=this.ctx.getTotalMatrix(),r=TW.invert(i);if(r&&this.ctx.concat(r),this.ctx?.scale(this.dpr,this.dpr),this.camera?.enabled&&(this.ctx?.concat(this.camera.worldMatrix),t)){let e=TW.getScale(this.camera.worldMatrix);this.ctx?.scale(1/e[0],1/e[1])}this.ctx?.concat(e),this.currentTransform=e}transform(e){this.ctx?.concat(e)}setSize(e,t){!this._isSizeDirty&&e===this._width&&t===this._height||(this._isSizeDirty=!1,this._width=e,this._height=t,this.canvas.style.width=e+"px",this.canvas.style.height=t+"px",this.canvas.width=e*this.dpr,this.canvas.height=t*this.dpr,this._surface&&(this._surface=T7.MakeWebGLCanvasSurface(this.canvas),this.ctx=this._surface?.getCanvas()))}};function T6(e){for(let t=0;t<e.length;t++)if(void 0!==e[t]&&!Number.isFinite(e[t]))return!1;return!0}function T8({r:e,g:t,b:i,a:r}){return T7.Color4f(e,t,i,r)}var T9,T7,Pe,Pt,Pi=class{constructor(e,t,i){this.uuid=e,this.data=t,this.enabled=!1,this.color=ga.transparent,this.blurRadius=0,this.offset=[0,0],this.spread=0,this.update(t)}update(e){void 0!==e.color&&(this.color=e.color),void 0!==e.enabled&&(this.enabled=e.enabled),void 0!==e.blurRadius&&(this.blurRadius=e.blurRadius),void 0!==e.offset&&(this.offset=e.offset),void 0!==e.spread&&(this.spread=e.spread)}},Pr=class{constructor(e,t,i){this.uuid=e,this.data=t,this.enabled=!1,this.radius=0,this.update(t)}update(e){void 0!==e.enabled&&(this.enabled=e.enabled),void 0!==e.radius&&(this.radius=e.radius)}},Ps=class{constructor(e,t,i){this.uuid=e,this.data=t,this.enabled=!1,this.color=ga.transparent,this.update(t)}update(e){void 0!==e.enabled&&(this.enabled=e.enabled),void 0!==e.color&&(this.color=e.color)}},Pa=class{constructor(e,t,i){this.uuid=e,this.data=t,this.enabled=!1,this.color=ga.transparent,this.thickness=0,this.mode="inside",this.update(t)}update(e){void 0!==e.enabled&&(this.enabled=e.enabled),void 0!==e.color&&(this.color=e.color),void 0!==e.thickness&&(this.thickness=e.thickness),void 0!==e.mode&&(this.mode=e.mode)}},Pn=class extends TY{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.autoClose=!0,this.fill=new Ps(e+"-fill",t.fill,i),this.stroke=new Pa(e+"-stroke",t.stroke,i),this.dropShadow=new Pi(e+"-dropShadow",t.dropShadow,i),this.innerShadow=new Pi(e+"-innerShadow",t.innerShadow,i),this.backgroundBlur=new Pr(e+"-backgroundBlur",t.backgroundBlur,i),this.layerBlur=new Pr(e+"-layerBlur",t.layerBlur,i)}applyFillStroke(e){e.fillColor=this.fill.enabled?this.fill.color:ga.transparent,e.strokeColor=this.stroke.enabled&&this.stroke.thickness>0?this.stroke.color:ga.transparent,e.strokeMode=this.stroke.mode,e.lineWidth=this.stroke.thickness}applyFilters(e){this.layerBlur.enabled?e.layerBlur=5*this.layerBlur.radius:e.layerBlur=0,this.backgroundBlur.enabled?e.backgroundBlur=5*this.backgroundBlur.radius:e.backgroundBlur=0,this.dropShadow.enabled?(e.dropShadowBlur=5*this.dropShadow.blurRadius,e.dropShadowColor=this.dropShadow.color,e.dropShadowOffsetX=this.dropShadow.offset[0],e.dropShadowOffsetY=this.dropShadow.offset[1]):e.dropShadowColor=ga.transparent,this.innerShadow.enabled?(e.innerShadowSpread=this.innerShadow.spread,e.innerShadowBlur=5*this.innerShadow.blurRadius,e.innerShadowColor=this.innerShadow.color,e.innerShadowOffsetX=this.innerShadow.offset[0],e.innerShadowOffsetY=this.innerShadow.offset[1]):e.innerShadowColor=ga.transparent}innerDraw(e){}draw(e){this.visible&&(e.save(),this.applyTransforms(e),this.applyFilters(e),this.applyFillStroke(e),e.beginPath(),this.innerDraw(e),this.autoClose&&e.closePath(),this.fill.enabled&&e.fill(),this.stroke.enabled&&e.stroke(),e.restore(
vendor: 5,368 bytes, line 6670
6670))}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),0===e.type&&(pX(e.path,["fill"])?this.fill.update(e.props):pX(e.path,["stroke"])?this.stroke.update(e.props):pX(e.path,["dropShadow"])?this.dropShadow.update(e.props):pX(e.path,["innerShadow"])?this.innerShadow.update(e.props):pX(e.path,["layerBlur"])?this.layerBlur.update(e.props):pX(e.path,["backgroundBlur"])?this.backgroundBlur.update(e.props):this.resetBBoxNeedsUpdate())}updateState(e,t){super.updateState(e,t),void 0!==e.fill&&this.fill.update(e.fill),void 0!==e.stroke&&this.stroke.update(e.stroke),void 0!==e.dropShadow&&this.dropShadow.update(e.dropShadow),void 0!==e.innerShadow&&this.innerShadow.update(e.innerShadow),void 0!==e.layerBlur&&this.layerBlur.update(e.layerBlur),void 0!==e.backgroundBlur&&this.backgroundBlur.update(e.backgroundBlur)}clone(e){let t=new Pn(this.uuid,this.data,e);return t.parent=void 0,t}},Po=class extends Pn{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.width=0,this.height=0,this.updateState(t,i)}innerDraw(e){e.ellipse(.5*this.width,.5*this.height,.5*this.width,.5*this.height,0,0,2*Math.PI)}intersectsInLocalSpace(e,t){var i,r,s,a;let o,l;return i=.5*this.width,r=.5*this.height,s=.5*this.width,a=.5*this.height,(o=e-i)*o/(s*s)+(l=t-r)*l/(a*a)<=1}getCenter(){return[.5*this.width,.5*this.height]}getHalfSize(){return[.5*this.width,.5*this.height]}updateSizeState(e){let t=!1;void 0!==e.width&&(this.width="number"==typeof e.width?e.width:this.width,t=!0),void 0!==e.height&&(this.height="number"==typeof e.height?e.height:this.height,t=!0),t&&this.updateWorldMatrix(!0,!1,!0)}updateState(e,t){super.updateState(e,t),this.updateSizeState(e)}clone(e){let t=new Po(this.uuid,this.data,e);return t.parent=void 0,t}},Pl=class extends Pn{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.width=0,this.height=0,this.cornerRadius=[0,0,0,0],this.updateState(t,i)}innerDraw(e){e.rect(0,0,this.width,this.height,...this.cornerRadius)}getCenter(){return[.5*this.width,.5*this.height]}getHalfSize(){return[.5*this.width,.5*this.height]}updateCornerState(e){void 0!==e.cornerRadius&&(this.cornerRadius=e.cornerRadius)}updateSizeState(e){let t=!1;void 0!==e.width&&(this.width="number"==typeof e.width?e.width:this.width,t=!0),void 0!==e.height&&(this.height="number"==typeof e.height?e.height:this.height,t=!0),t&&this.updateWorldMatrix(!0,!1,!0)}updateState(e,t){super.updateState(e,t),this.updateSizeState(e),this.updateCornerState(e)}clone(e){let t=new Pl(this.uuid,this.data,e);return t.parent=void 0,t}},Ph=class extends Pn{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this._textHeight=0,this._textHeightDirty=!0,this.width=0,this.height=0,this.updateState(t,i)}get textHeight(){return this._textHeight}applyFillStroke(e){e.fillColor=this.fill.enabled?this.fill.color:ga.transparent,e.strokeColor=this.stroke.enabled&&this.stroke.thickness>0?this.stroke.color:ga.transparent,e.strokeMode="center",e.lineWidth=this.stroke.thickness}innerDraw(e){this._fontHolder?.arrayBuffer&&this._fontHolder.arrayBuffer.byteLength>1&&this.data.font&&e.registerFont(this._fontHolder.arrayBuffer,this.data.font);let t=this.data.textTransform,i=this.data.text.textValue.toString(),r=2===t?i.toUpperCase():3===t?i.toLowerCase():i,{height:s}=e.drawText(r,{x:0,y:0,width:this.width,height:this.height,fontSize:this.data.fontSize,lineHeight:this.data.lineHeight??1,letterSpacing:this.data.letterSpacing??0,horizontalAlign:this.data.horizontalAlign,verticalAlign:this.data.verticalAlign,font:this.data.font});this._textHeight=s}getCenter(){return[.5*this.width,.5*this.height]}getHalfSize(){return[.5*this.width,.5*this.height]}updateSizeState(e){let t=!1;void 0!==e.width&&(this.width="number"==typeof e.width?e.width:this.width,t=!0),void 0!==e.height&&(this.height="number"==typeof e.height?e.height:this.height,t=!0),t&&this.updateWorldMatrix(!0,!1,!0)}updateFontState(e,{shared:t}){void 0!==e.font&&(this._fontHolder=t.getFont(e.font),this._fontHolder&&!this._fontHolder.isLoaded&&this._fontHolder.loadingPromise.then(()=>{this.requestRender()}))}updateState(e,t){super.updateState(e,t),this.updateSizeState(e),this.updateFontState(e,t)}clone(e){let t=new Ph(this.uuid,this.data,e);return t.parent=void 0,t}},Pc=class extends Pn{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.curves=[],this.extremasBBox={min:[0,0],max:[0,0]},this.updateState(t,i)}computeExtremas(){0===this.curves.length&&this.computeCurves();let e=this.curves.map(e=>Pt.extremas(e)),t=[1/0,1/0],i=[-1/0,-1/0];for(let r=0,s=e.length;r<s;r++){let s=e[r];s[0][0]<t[0]&&(t[0]=s[0][0]),s[0][1]<t[1]&&(t[1]=s[0][1]),s[1][0]>i[0]&&(i[0]=s[1][0]),s[1][1]>i[1]&&(i[1]=s[1][1])}return this.extremasBBox.min=[t[0],t[1]],this.extremasBBox.max=[i[0],i[1]],this.extremasBBox}computeCurves(){this.curves=[];for(let e=1,t=this.data.points.length;e<t;e++){let t=this.data.points[e].data,i=this.data.points[e-1].data,r={start:i.position,cp1:i.controlNext.position,cp2:t.controlPrevious.position,end:t.position};this.curves.push(r)}let e=this.data.points[0].data,t=this.data.points[this.data.points.length-1].data;if(this.data.isClosed){let i={start:t.position,cp1:t.controlNext.position,cp2:e.controlPrevious.position,end:e.position};this.curves.push(i)}}getCenter(){let[e,t]=this.extremasBBox.min,[i,r]=this.getHalfSize();return[e+i,t+r]}getHalfSize(){let{min:e,max:t}=this.extremasBBox;
vendor: 6,526 bytes, line 6670
6670return[(t[0]-e[0])*.5,(t[1]-e[1])*.5]}innerDraw(e){for(let t=0,i=this.data.points.length;t<i;t++){let i=this.data.points[t].data;if(0===t){let[t,r]=i.position;e.moveTo(t,r)}else{let r=this.data.points[t-1].data,[s,a]=r.controlNext.position,[o,l]=i.controlPrevious.position,[h,c]=i.position,d={start:r.position,cp1:r.controlNext.position,cp2:i.controlPrevious.position,end:i.position};Pt.derive(d),e.bezierCurveTo(s,a,o,l,h,c)}}let t=this.data.points[0].data,i=this.data.points[this.data.points.length-1].data;if(this.data.isClosed){let[r,s]=i.controlNext.position,[a,o]=t.controlPrevious.position,[l,h]=t.position;e.bezierCurveTo(r,s,a,o,l,h)}}updateState(e,t){super.updateState(e,t),this.computeExtremas()}clone(e){let t=new Pc(this.uuid,this.data,e);return t.parent=void 0,t}};(e=>{function t(e,t,i,r=!1){let s=e-2*t+i;if(0!==s){let r=-Math.sqrt(Math.abs(t*t-e*i)),a=-e+t;return[-(r+a)/s,-(-r+a)/s]}return t!==i&&0===s?[(2*t-i)/(2*(t-i))]:[]}e.derive=function(e){let t=e.start,i=e.cp1,r=e.cp2,s=e.end,a={start:[3*(i[0]-t[0]),3*(i[1]-t[1])],cp:[3*(r[0]-i[0]),3*(r[1]-i[1])],end:[3*(s[0]-r[0]),3*(s[1]-r[1])]};return e.derivative=a,a.derivative=DI.derive(a),a},e.droot=function(i){let r=i.derivative??e.derive(i),s=r.start,a=r.cp,o=r.end;return[t(s[0],a[0],o[0]),t(s[1],a[1],o[1])]},e.extremas=function(t){let[i,r]=e.droot(t),s=[t.start[0],t.end[0]],a=[t.start[1],t.end[1]];for(let r of i)s.push(e.compute(t,Math.min(1,Math.max(0,r)))[0]);for(let i of r)a.push(e.compute(t,Math.min(1,Math.max(0,i)))[1]);return s.sort((e,t)=>e-t),a.sort((e,t)=>e-t),[[s[0],a[0]],[s[s.length-1],a[a.length-1]]]},e.compute=function(e,t){if(0===t)return[...e.start];if(1===t)return[...e.end];let i=1-t,r=i*i,s=t*t,a=r*i,o=r*t*3,l=i*s*3,h=t*s;return[a*e.start[0]+o*e.cp1[0]+l*e.cp2[0]+h*e.end[0],a*e.start[1]+o*e.cp1[1]+l*e.cp2[1]+h*e.end[1]]}})(Pt||(Pt={})),(DP=DI||(DI={})).derive=function(e){let t=e.start,i=e.cp,r=e.end,s={start:[2*(i[0]-t[0]),2*(i[1]-t[1])],end:[2*(r[0]-i[0]),2*(r[1]-i[1])]};return s.derivative=DO.derive(s),e.derivative=s,s},DP.droot=function(e){let t=e.derivative??DP.derive(e),i=t.start,r=t.end;return[i[0]!==r[0]?i[0]/(i[0]-r[0]):0,i[1]!==r[1]?i[1]/(i[1]-r[1]):0]},DP.compute=function(e,t){if(0===t)return[...e.start];if(1===t)return[...e.end];let i=1-t,r=i*i,s=i*t*2,a=t*t;return[r*e.start[0]+s*e.cp[0]+a*e.end[0],r*e.start[1]+s*e.cp[1]+a*e.end[1]]},(DD=DO||(DO={})).derive=function(e){let t=e.start,i=e.end,r=[i[0]-t[0],i[1]-t[1]];return e.derivative=r,e.derivative},DD.compute=function(e,t){if(0===t)return[...e.start];if(1===t)return[...e.end];let i=e.start,r=e.end;return[i[0]+(r[0]-i[0])*t,i[1]+(r[1]-i[1])*t]};var Pd=class extends TQ{constructor(e,t,i){super(e,t,i),this.uuid=e,this.width=0,this.height=0,this.clipped=!0,this.background=new Pl(e+"-background",yz.defaultData,i),this.background.parent=this,this.updateState(t,i)}get fill(){return this.background.fill}get stroke(){return this.background.stroke}get backgroundBlur(){return this.background.backgroundBlur}get layerBlur(){return this.background.layerBlur}get dropShadow(){return this.background.dropShadow}get innerShadow(){return this.background.innerShadow}get cornerRadius(){return this.background.cornerRadius}set cornerRadius(e){this.background.cornerRadius=e}updateLocalMatrix(){super.updateLocalMatrix(),this.background?.updateLocalMatrix()}updateWorldMatrix(e,t,i){super.updateWorldMatrix(e,t,i),this.background?.updateWorldMatrix(e,t,i)}draw(e){if(!this.visible)return;e.save();let t=this.width,i=this.height;this.applyTransforms(e),this.background.width=t,this.background.height=i,this.background.draw(e),this.clipped&&e.clipRect(0,0,t,i,...this.cornerRadius),this.innerDrawChildren(e),e.restore()}getCenter(){return[.5*this.width,.5*this.height]}getHalfSize(){return[.5*this.width,.5*this.height]}updateCornerState(e){void 0!==e.cornerRadius&&(this.cornerRadius=e.cornerRadius)}updateSizeState(e){let t=!1;void 0!==e.width&&(this.width="number"==typeof e.width?e.width:this.width,t=!0),void 0!==e.height&&(this.height="number"==typeof e.height?e.height:this.height,t=!0),t&&this.updateWorldMatrix(!0,!1,!0)}updateState(e,t){super.updateState(e,t),this.updateSizeState(e),this.updateCornerState(e),void 0!==e.fill&&this.fill.update(e.fill),void 0!==e.stroke&&this.stroke.update(e.stroke),void 0!==e.dropShadow&&this.dropShadow.update(e.dropShadow),void 0!==e.innerShadow&&this.innerShadow.update(e.innerShadow),void 0!==e.layerBlur&&this.layerBlur.update(e.layerBlur),void 0!==e.backgroundBlur&&this.backgroundBlur.update(e.backgroundBlur),void 0!==e.clipped&&(this.clipped=e.clipped)}requestRender(){super.requestRender(),this.dispatchEvent({type:"render"})}dispose(){this.removeEventListener("render")}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),0===e.type&&(pX(e.path,["fill"])?this.fill.update(e.props):pX(e.path,["stroke"])?this.stroke.update(e.props):pX(e.path,["dropShadow"])?this.dropShadow.update(e.props):pX(e.path,["innerShadow"])?this.innerShadow.update(e.props):pX(e.path,["layerBlur"])?this.layerBlur.update(e.props):pX(e.path,["backgroundBlur"])?this.backgroundBlur.update(e.props):this.resetBBoxNeedsUpdate())}clone(e){let t=new Pd(this.uuid,this.data,e);for(let i of(t.parent=void 0,this.children))t.add(i.clone(e));return t}},Pu=tw(tT(),1),Pp=class extends Pn{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this._pathBBox=new DOMRect,this.path="",this.updateState(t,i),this.autoClose=!1,this.computeSVGBBox()}computeSVGBBox(){let e=document.createElementNS("http://www.w3.org/2000/svg","svg"),t=document.createElementNS("http://www.w3.org/2000/svg","path");document.body.appendChild(e),t.setAttribute("d",this.path),e.appendChild(t),this._pathBBox=t.getBBox(),e.remove()}innerDraw(e){e.path(this.path)}intersectsInLocalSpace(e,t){return e>=this._pathBBox.x&&e<=this._pathBBox.x+this._pathBBox.width&&t>=this._pathBBox.y&&t<=this._pathBBox.y+this._pathBBox.height}getCenter(){return[(this._pathBBox.x+this._pathBBox.width)/2,(this._pathBBox.y+this._pathBBox.height)/2]}getHalfSize(){return[(this._pathBBox.x+this._pathBBox.width)/2,(this._pathBBox.y+this._pathBBox.height)/2]}updateState(e,t){super.updateState(e,t),void 0!==e.path&&(this.path=e.path,this.computeSVGBBox())}clone(e){let t=new Pp(this.uuid,this.data,e);return t.parent=void 0,t}},Pf=class{constructor(e,t,i){this.uuid=e,this.data=t,this.group=new TK(Pf.GROUP_ID,{...yU.defaultData},i),this.createChildrenObjects(t.objects,this.group,i)}createObject(e,t,i,r,s,a){let o=function(e,t,i){switch(t.type){case"ellipse2d":return new Po(e,t,i);
6670case"rectangle2d":return new Pl(e,t,i);case"text2d":return new Ph(e,t,i);case"vector2d":return new Pc(e,t,i);case"path2d":return new Pp(e,t,i);case"frame2d":return new Pd(e,t,i);default:return new TK(e,t,i)}}(e,t,a);o&&(r.add(o),r.children.splice(s,0,r.children.pop()),o.updateWorldMatrix(),i.length>0&&(o instanceof TK||o instanceof Pd)&&this.createChildrenObjects(i,o,a))}createChildrenObjects(e,t,i){let r=0;for(let s of e)this.createObject(s.id,s.data,s.children,t,r,i),r+=1}draw(e){this.group.draw(e)}updateEntityByOp(e,t,i,r){let s=this.find(e);if(s)try{s.updateByOp(t,i,{shared:r})}catch(e){console.error(e)}}updateTreeByOp(e,t){if(0===e.path.length&&7===e.type){let i=null===e.parent?this.group:this.find(e.parent);void 0!==i&&i instanceof TQ&&(this.createObject(e.id,e.data,e.children,i,e.localIndex,t),i.requestRender())}else if(0===e.path.length&&8===e.type){let t=this.find(e.id);if(void 0!==t&&void 0!==t.parent&&t.parent instanceof TQ){let e=t.parent;t.resetBBoxNeedsUpdate(),e?.remove(t),e?.requestRender()}}else if(0===e.path.length&&9===e.type){let t=this.find(e.id);if(void 0!==t){let i=t.parent,r=null===e.parent?this:this.find(e.parent);if(r instanceof TQ||r===this){r.add(t);let s=e.localIndex;r.children.splice(s,0,r.children.pop()),t.updateWorldMatrix(!0,!1,!0),i?.requestRender(),t.requestRender()}t.resetBBoxNeedsUpdate()}}}add(e){this.group.add(e)}remove(e){this.group.remove(e)}traverse(e){this.group.traverse(t=>{t!==this.group&&e(t)})}intersectsChildren(e,t,i,r=!1,s=[]){return this.group.intersectsChildren(e,t,i,r,s,!0)}intersectsChildrenReverse(e,t,i,r=!1,s=[]){return this.group.intersectsChildrenReverse(e,t,i,r,s,!0)}find(e){return this.group.find(e)}get children(){return this.group.children}project(e,t){return this.group.project(e,t)}getWithSortKey(e){let t=this.find(e);if(void 0===t)return;let i=[],r=t;for(;r!==this.group;){let e=r,t=(r=r.parent).children.indexOf(e);i.splice(0,0,t)}return{entity:t,sortKey:i}}getAllSorted(e){let t=[];for(let i of e){let e=this.getWithSortKey(i.id);void 0!==e&&t.push(e)}return t.sort((e,t)=>u$(e.sortKey,t.sortKey)),t.map(e=>e.entity)}};function Pm({constraints:e,newParentWidth:t,newParentHeight:i,initialParentWidth:r,initialParentHeight:s,objectInitialWidth:a,objectInitialHeight:o,objectInitialPosition:l}){let{horizontalConstraint:h,verticalConstraint:c}=e,d=t-r,u=i-s,p=a,f=o,m=l[0],g=l[1];if(0!==h){if(1===h)m+=d;else if(3===h)m+=d/2;else if(2===h)p=Math.max(1,p+d);else if(4===h){let e=t/r;p*=e,m*=e}}if(0!==c){if(1===c)g+=u;else if(3===c)g+=u/2;else if(2===c)f=Math.max(1,f+u);else if(4===c){let e=i/s;f*=e,g*=e}}return{width:p,height:f,position:[m,g]}}Pf.GROUP_ID="scene2d",tw(tT(),1);var Pg=`
6671	varying vec2 vUv;
6672	void main() {
6673		vUv = uv;
6674		gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6675	}`,Pv=`
6676	uniform sampler2D tDiffuse;
6677	varying vec2 vUv;
6678	void main() {
6679		vec4 texel = texture2D( tDiffuse, vUv );
6680		gl_FragColor = texel;
6681	}`,Py=new sw(-1,1,1,-1,0,1),Px=new class extends rz{constructor(){super(),this.setAttribute("position",new rT([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new rT([0,2,0,0,2,0],2))}},Pb=class{constructor(e){this._mesh=new rK(Px,e)}dispose(){this._mesh.geometry.dispose()}render(e){e.render(this._mesh,Py)}get material(){return this._mesh.material}set material(e){this._mesh.material=e}},Pw=new r5({defines:{},uniforms:{tDiffuse:new lD(null)},vertexShader:Pg,fragmentShader:Pv}),PS=new Pb(Pw),P_=null,PA=null,PM=()=>(null===P_&&(P_=document.createElement("canvas")),P_),PE=e=>(null===PA&&(PA=new T5(e)),PA),PC=TW.identity(),PT=class{constructor(e,t,i,r){this.uuid=e,this.width=t,this.height=i,this.context=r,this.enabled=!0,this.isScreenSpace=!1,this.dpr=window.devicePixelRatio,this.isFrameDirty=!1,this.onRenderRequestedDownstream=()=>{this.isFrameDirty=!0,this.context.shared.requestRender()},this._innerApplySize=()=>{let e=this.width,t=this.height,i=this.dpr;this.renderer.dpr=this.isScreenSpace?i:Math.floor(2048/Math.max(e,t)),this.renderer.setSize(e,t)},this.onFrameOverrideObjectEvent=e=>{if(e.target?.uuid!==void 0){let t=this.frameRoot?.find(e.target.uuid);t&&t.dispatchEvent({...e,target:t})}},this.scene2d=new Pf(tY.generateUUID(),yG.defaultData,{dpr:window.devicePixelRatio,shared:r.shared}),this.canvas=PM(),this.renderer=PE(this.canvas),this.promise=this.init(),this.renderTarget=new id(1,1,{type:1016,stencilBuffer:!1,depthBuffer:!1}),r.shared.addUIBuffer(this.uuid,this.renderTarget),this.textureHolder=r.shared.uiBuffer(this.uuid)}get canvasTexture(){return this._canvasTexture||(this._canvasTexture=new nX(this.canvas)),this._canvasTexture}
6681async init(){this.renderer instanceof T5&&(this.renderer.wasmURL=_W.skiaWasmUrl),await this.renderer.init()}render(e){if(this.isFrameDirty){this.isFrameDirty=!1,this._innerApplySize(),this.renderer.clear(),this.frameOverride?.draw(this.renderer),this.renderer.render(),Pw.uniforms.tDiffuse.value=this.canvasTexture,this.canvasTexture.needsUpdate=!0;let t=e.getRenderTarget();e.setRenderTarget(this.renderTarget),e.clear(),PS.render(e),e.setRenderTarget(t),this.textureHolder?.setNeedsUpdate(!0)}}updateEntity2DByOp(e,t,i,r){this.scene2d.updateEntityByOp(e,t,i,r),this.applySize()}updateTreeByOp(e,t){this.scene2d.updateTreeByOp(e,t),this.applySize()}applyOverrides(e){if(this.frameOverride&&this.frameRoot){this.frameOverride.position=[0,0],this.frameOverride.rotation=0;let t=e?.width??this.width,i=e?.height??this.height;this.frameOverride.width=t,this.frameOverride.height=i,this.frameOverride.localMatrix=PC,this.isScreenSpace&&(this.frameOverride.fill.color=ga.from0to1([0,0,0,0])),this.frameOverride.data={...this.frameOverride.data,width:t,height:i},function e({objectOverride:t,objectRoot:i,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o}){if(t instanceof Pd&&i instanceof Pd||t instanceof TK&&i instanceof TK)for(let l=0,h=t.children.length;l<h;l++){let h=t.children[l],c=i.children[l];h&&c&&h.uuid===c.uuid&&function({objectOverride:t,objectRoot:i,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o}){let[l,h]=function(e){if(PP(e))return[e.width,e.height];if(e instanceof Pp){let[t,i]=e.getHalfSize();return[2*t,2*i]}if(e instanceof TK){let[t,i]=e.recursiveBBox.getHalfSize();return[2*t,2*i]}return[0,0]}(i),{width:c,height:d,position:u}=Pm({constraints:t.data,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o,objectInitialWidth:l,objectInitialHeight:h,objectInitialPosition:i.position});if(t.position=u,t.data={...t.data,position:u},t.states)for(let e in t.states)!function({stateId:e,objectOverride:t,objectRoot:i,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o}){let l=t.states?.[e],h=i.states?.[e];if(l&&h){let{width:i,height:c,position:d}=Pm({constraints:t.data,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o,objectInitialWidth:yj.isResizeable(h)?h.width:0,objectInitialHeight:yj.isResizeable(h)?h.height:0,objectInitialPosition:h.position});Object.assign(t.states[e],{position:d}),yj.isResizeable(l)&&Object.assign(t.states[e],{width:i,height:c})}}({stateId:e,objectOverride:t,objectRoot:i,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o});if(PP(t)||t instanceof TK)PP(t)&&(t.width=c,t.height=d,t.data={...t.data,width:c,height:d}),e({objectOverride:t,objectRoot:i,newParentWidth:c,newParentHeight:d,initialParentWidth:l,initialParentHeight:h});else if(t instanceof Pp){let e=0!==l?c/l:1,r=0!==h?d/h:1;t.path=function(e,t=1,i=1){return t<=0||i<=0?e:function(e){let t=["rx","ry","xAxisRotation","largeArc","sweep","x1","y1","x2","y2","x","y"],i;return e.map(e=>{let r=[];t.forEach(t=>{if(t in e){let i=1*e[t];r.length&&i>=0&&r.push(","),r.push(i)}});let s=(i===e.code?r[0]<0?"":",":e.code)+r.join("");return i=e.code,s}).join("")}((0,Pu.parseSVG)(e).map(e=>{let r={...e};return"x"in r&&(r.x=r.x*t),"y"in r&&(r.y=r.y*i),"x1"in r&&(r.x1=r.x1*t),"x2"in r&&(r.x2=r.x2*t),"y1"in r&&(r.y1=r.y1*i),"y2"in r&&(r.y2=r.y2*i),"rx"in r&&(r.rx=r.rx*t),"ry"in r&&(r.ry=r.ry*i),r}))}(i.path,e,r),t.data={...t.data,path:t.path}}}({objectOverride:h,objectRoot:c,newParentWidth:r,newParentHeight:s,initialParentWidth:a,initialParentHeight:o})}}({objectOverride:this.frameOverride,objectRoot:this.frameRoot,newParentWidth:this.frameOverride.width,newParentHeight:this.frameOverride.height,initialParentWidth:this.frameRoot.width,initialParentHeight:this.frameRoot.height}),this.frameOverride.updateWorldMatrix(!0,!1,!0)}}applySize(e,t=window.devicePixelRatio){let i=Math.max(1,e?.width??this.width),r=Math.max(1,e?.height??this.height);this.dpr=t,this.width=i,this.height=r,this._innerApplySize();let s=1;(i*t<512||r*t<512)&&(s=Math.max(512/(i*t),512/(r*t))),this.renderTarget.setSize(i*t*s,r*t*s),this._canvasTexture?.dispose(),this._canvasTexture=void 0,this.applyOverrides(e),this.frameOverride?.requestRender()}applyFrame(e){let t=this.context.scene.find2D(e);if(!(!t||!(t instanceof Pd)))return this.disposeFrameOverride(),this.frameRoot=t,this.frameOverride=t.clone({dpr:this.renderer.dpr,shared:this.context.shared}),this.scene2d.add(this.frameOverride),this.applySize(),this.frame?.addEventListener("render",this.onRenderRequestedDownstream),this.frameOverride.traverse(e=>{e.addEventListener("beginState",this.onFrameOverrideObjectEvent)}),this.frameOverride.traverse(e=>{e.addEventListener("completeState",this.onFrameOverrideObjectEvent)}),this.frame?.requestRender(),t}get frame(){return this.frameOverride}get frameId(){return this.frame?.uuid}find(e){return this.scene2d.find(e)}get texture(){return this.textureHolder?.getTexture(1001)}disposeFrameOverride(){this.frameOverride?.removeEventListener("render",this.onRenderRequestedDownstream),this.frameOverride?.traverse(e=>{e.removeEventListener("beginStateChange",this.onFrameOverrideObjectEvent)}),this.frameOverride?.traverse(e=>{e.removeEventListener("completeState",this.onFrameOverrideObjectEvent)}),this.frameOverride&&this.scene2d.remove(this.frameOverride)}};function PP(e){return e instanceof Pl||e instanceof Pd||e instanceof Po||e instanceof Ph}var PD=class extends xk(nb){constructor(e,t,i){super(),this.data=t,this.bgColor=new SN(1,1,1,1),this.fog=null,this.backupFog=new nx(16777215,.1,2e3),this.fogUseBGColor=!1,this.isActive=!1,this.aoColor=new ii,this.penumbraSizeArrayCache=null,this.super_Entity(e,t),this.personalCamera=new Eg(mh,{...v7.defaultData,...t.camera,name:"Personal Camera"}),this.personalCamera.objectHelper.visible=!1,this.add(this.personalCamera),this.activeCamera=this.personalCamera,this.ambientLight=new le(13882323,8553090,.75),this.ambientLight.name="Default Ambient Light",this.ambientLight.layers.enable(3),this.ambientLight.removeFromParent(),this.add(this.ambientLight),t.uiScene?this.uiScene=new Pf((Array.isArray(e)?e[0]:e)+"-ui",t.uiScene,{dpr:window.devicePixelRatio,shared:i.shared}):t.uiFrame&&this.createUICanvas(t.uiFrame,i)}get scene(){return this.parent}get postprocessing(){return this.data.postprocessing}get frameId(){return this.data.uiFrame}get frame(){return this.uiCanvas?.frame}createUICanvas(e,t){this.uiCanvas=new PT(this.uuid+"-uiscreen",window.innerWidth,window.innerHeight,t),this.uiCanvas.isScreenSpace=!0,this.uiCanvas.promise.then(()=>{this.uiCanvas?.applyFrame(e),this.uiCanvas?.applySize()})}updateVisible(){}
6681setBackgroundColor(e){this.bgColor=e,!0===this.fogUseBGColor&&(this.backupFog.color=e)}entityChildrenCount(){return this.uiScene?this.uiScene.children.length:super.entityChildrenCount()}updateAmbientLight(e,t){void 0!==e.color&&(this.ambientLight.color=Au(e.color,t)),void 0!==e.intensity&&(this.ambientLight.intensity=e.intensity),void 0!==e.enabled&&(e.enabled?this.add(this.ambientLight):this.remove(this.ambientLight))}onDeactive(){this.isActive=!1}onActive(e){this.isActive=!0,e.fog=this.fog,this.traverseEntity(e=>{e instanceof Eb&&e.recomputeBoolean()}),this.updateShadow(this.data.shadow)}forceMaterialsUpdate(){this.traverseEntity(e=>{if(e instanceof Mf){if(Array.isArray(e.material))for(let t of e.material)t.needsUpdate=!0;else e.material.needsUpdate=!0,e.material.dispose()}})}updateShadow(e){void 0!==e.softShadowQuality&&this.isActive&&TA(e.softShadowQuality)&&this.forceMaterialsUpdate()}updateFog(e,t){e.enabled?this.fog=this.backupFog:this.fog=null,this.isActive&&(this.scene.fog=this.fog),this.fogUseBGColor=e.useBackgroundColor,e.useBackgroundColor?this.backupFog.color.set(this.bgColor):this.backupFog.color=Au(e.color,t),this.backupFog.near=e.near,this.backupFog.far=e.far}updateAo(e,t){void 0!==e.aoColor&&(this.aoColor=Au(e.aoColor,t))}updateByOp(e,t,i,r){let s=this.data.uiFrame;super.updateByOp(e,t,i,r),pX(e.path,["fog"])?this.updateFog(t.fog,i.shared):pX(e.path,["ao"])?this.updateAo(t.ao,i.shared):pX(e.path,["ambient"])?this.updateAmbientLight(t.ambient,i.shared):pX(e.path,["shadow"])?this.updateShadow(t.shadow):0===e.type&&0===e.path.length&&(void 0!==e.props.uiFrame||s!==t.uiFrame)&&this.updateUIFrame(e.props.uiFrame,i)}updateUIFrame(e,t){e?(this.uiCanvas||this.createUICanvas(e,t),this.uiCanvas.enabled=!0,this.uiCanvas.applyFrame(e)):this.uiCanvas&&(this.uiCanvas.enabled=!1)}updateState(e,t){this.updateState_Entity(e,t),void 0!==e.backgroundColor&&this.setBackgroundColor(Au(e.backgroundColor,t.shared)),void 0!==e.fog&&this.updateFog(e.fog,t.shared),void 0!==e.ambient&&this.updateAmbientLight(e.ambient,t.shared),void 0!==e.ao&&this.updateAo(e.ao,t.shared),void 0!==e.shadow&&this.updateShadow(e.shadow)}createFrame(e,t){}raycast(e,t){super.raycast(e,t)}switchActiveCamera(e){e&&e.isDescendantOf(this)&&(this.activeCamera!==this.personalCamera&&(this.activeCamera.objectHelper.visible=!0),this.activeCamera=e,e.objectHelper.visible=!1)}get playCamera(){return this.scene?.find(this.data.publish.playCamera)??this.personalCamera}switchToPlayCamera(){this.switchActiveCamera(this.playCamera)}get penumbraSizeArray(){return null===this.penumbraSizeArrayCache&&this.updatePenumbraSizeArray(),this.penumbraSizeArrayCache}updatePenumbraSizeArray(){this.penumbraSizeArrayCache=[,,,,,].fill(.5);let e=0,t=0;this.traverseEntity(i=>{if(!i.visible)return!0;i instanceof Tz&&i.visible&&e<3&&(this.penumbraSizeArrayCache[e]=i.data.penumbraSize??.5,e+=1),i instanceof TU&&i.visible&&e<2&&(this.penumbraSizeArrayCache[3+t]=i.data.penumbraSize??.5,t+=1)})}raycastWithClones(e){let t=[],i=r=>{for(let s of r.children){let r=s.cloner;wQ.is(s)&&(s.visible||r?.object.data.visible)&&((ES(s)||EE(s)&&this.scene.enableHelpers&&s.objectHelper.visible)&&(e.intersectObject(s,!1,t),DS(s,e,t,!0)),i(s))}};return i(this),t}updateEntity2DByOp(e,t,i,r){this.uiCanvas?.updateEntity2DByOp(e,t,i,r)}},PI=class extends Ew(ld,TD){constructor(e,t,i){super(),this.super_Entity(e,t),this.castShadow=!0,this.shadow.mapSize.width=1024,this.shadow.mapSize.height=1024,this.shadow.normalBias=1,this.layers.enable(3);let r=this.shadow.camera;r.fov=90,r.aspect=1,r.near=100,r.far=2500;let s=new lZ(new ib(new iv(-r.far+this.position.x,-r.far+this.position.y,-r.far+this.position.z),new iv(r.far+this.position.x,r.far+this.position.y,r.far+this.position.z)),new ii(16755200));s.visible=!1,this.gizmos.shadowmap=s,this.update()}update(){if(this.shadow&&(this.shadow.camera.updateProjectionMatrix(),this.gizmos))for(let e in this.gizmos){let t=this.gizmos[e];if(t instanceof lZ){let e=this.shadow.camera,i=new iv(-e.far+this.position.x,-e.far+this.position.y,-e.far+this.position.z),r=new iv(e.far+this.position.x,e.far+this.position.y,e.far+this.position.z);t.box.set(i,r),t.updateMatrixWorld(!0)}}}updateMatrixWorld(e){super.updateMatrixWorld(e),this.objectHelper&&this.objectHelper.update(
6681)}updateState(e,t){this.updateState_Light(e,t),void 0!==e.distance&&(this.distance=e.distance),void 0!==e.decay&&(this.decay=e.decay),void 0!==e.shadowRadius&&(this.shadow.radius=e.shadowRadius),void 0!==e.shadowResolution&&(this.shadow.mapSize.set(e.shadowResolution,e.shadowResolution),this.shadow.map&&(this.shadow.map.dispose(),this.shadow.map=null))}},PO=class extends Mb{get forceComputeSize(){return!0}get shape(){return this.geometry.userData.shape}updateEntityBoxSize(e,t){let i=this.geometry.getAttribute("position");void 0!==i?SE(i,this.geometry.drawRange.start,this.geometry.drawRange.count<1/0?this.geometry.drawRange.count:i.count,e,t):super.updateEntityBoxSize(e,t)}},PR=class extends Mb{constructor(e,t,i){super(e,t,i),this._shapeId=null,this._context=i}updateState(e,t){super.updateState(e,t),this.updateShape(),this.refreshAttachedCloners(t)}updateShape(){let e,t={...this.data.geometry.extrusion.shape};for(let e in t)"string"==typeof t[e]&&(t[e]=this._context.shared.getVariable(t[e],[this.uuid,"geometry","extrusion","shape",e]));if("Custom"===t.type){let i=t.shapeId;if(i!==this._shapeId&&this.detachShape(),i){this._shapeId=i;let t=this._context.scene.find(i);t?.data&&(t.attachedPaths.add(this),e=t.geometry.userData?.shape),e||this._context.scene.addPendingCommand(()=>this.updateShape())}}else{let i;switch(t.type){case"Rectangle":i=wy;break;case"Ellipse":i=bH;break;case"Polygon":i=wp;break;case"Star":i=w_;break;default:throw Error(`Unknown shape type: ${t.type}`)}e=i.create({parameters:t}).userData.shape}let i=this.geometry;e&&i.inputs&&(i.inputs.shapeData=e,i.build())}detachShape(){null!==this._shapeId&&this._context.scene.find(this._shapeId)?.attachedPaths.delete(this)}createGeometryDelayed(e){this.geometryCreateDeleyed=e.shared,this.updateShape(),this.refreshAttachedPaths(e)}updateTransformState(e,t){return super.updateTransformState(e,t)}updateGeometryInteractions(e,t){super.updateGeometryInteractions(e,t),this.updateShape()}updateEntityBoxSize(e,t){let i=this.geometry.getAttribute("position");void 0!==i?SE(i,this.geometry.drawRange.start,this.geometry.drawRange.count<1/0?this.geometry.drawRange.count:i.count,e,t):super.updateEntityBoxSize(e,t)}},PL=class extends MK{constructor(e,t,i){super(e,t,i),this.data=t}},PB=class extends Eh(nd,EI){constructor(e,t,i){super(),"Instance"===t.type&&"string"==typeof e&&(t=this.transformAssignData(t,i)),this.super_Entity(e,t),this.objectHelper.update()}get isComponentRoot(){return"Component"===this.data.type&&"string"==typeof this.identity}get isInstanceRoot(){return"Instance"===this.data.type&&"string"==typeof this.identity}transformAssignData(e,t){let i=yA.getComponentData({scene:t.scene.data,shared:t.shared.data},e.component);if(!i)return{...v3.defaultData,...e,...uV(v3.defaultData,yi.rootOverrideProps)};{let t,r;for(let s of yi.rootOverrideProps)void 0===e[s]?(void 0===t&&(t={...e}),t[s]=i.data[s]):(void 0===r&&(r={}),r[s]=e[s],void 0===t&&(t={...e}),t[s]=p_.apply(i.data[s],e[s]));return this.overrideData=r,t}}updateByOp(e,t,i,r){let s;if(this.isInstanceRoot&&!r){if(t=this.transformAssignData(t,i),0===e.type&&0===e.path.length&&this.component)for(let t of yi.rootOverrideProps)t in e.props&&void 0===e.props[t]&&(void 0===s&&(s={...e,props:{...e.props}}),s.props[t]=this.component.data[t]);else if(0===e.type&&e.path.length>0&&yi.rootOverrideProps.includes(e.path[0])){let i=e.path[0];void 0===s&&(s={...e,path:[],props:{[i]:t[i]}})}}super.updateByOp(s??e,t,i,r)}updateState(e,t){this.updateState_Entity(e,t)}expandInstanceChildren(e){let t=this.data;if(void 0===this.component){let i=e.scene.find(t.component)??null,r=!1;if(i!==this.oldComponent){if(this.oldComponent){let t=0;for(let i of this.children)if(wQ.is(i))e.scene.disposeAndUnregisterEntityRecursivelyIfNotReregistered(i),Pz(i),t+=1;else break;this.children.splice(0,t)}r=!0}if(i){let s={};for(let a of(function e(t,i,r,s,a,o,l,h,c){if(l>50)return!1;if(s.component!==a){if(s.component){let e=s.component.instances.indexOf(s);e>=0&&s.component.instances.splice(e,1)}a.instances.find(e=>e===s)||a.instances.push(s),s.component=a}a instanceof PB&&a.isInstanceRoot&&a.expandInstanceChildren(t);let d=0;for(let u of a.children)if(wQ.is(u)){let a=[...i,..."string"==typeof u.identity?[u.identity]:u.identity],p=yt.resolve(r,a,1);null==p||p instanceof pA||(Object.setPrototypeOf(p,pA.prototype),console.error("wrong prototype"));let f=null,m;if(!h){let e=s.children[d];if(null!==(f=wQ.is(e)?e:null)){let e=PF(f,u,p,a);m=e>=1?f.stateSelection:void 0,2!==e&&(f=null)}if(null===f&&null!==(f=t.scene.findInstance(a)??null)){let e=PF(f,u,p,a);if(m=e>=1?f.stateSelection:void 0,2!==e)f=null;else{let e=f.parent.children.indexOf(f);f.parent.children.splice(e,1),s.children.splice(d,0,f),f.parent===s?e<=d&&console.error("not possible"):(f.parent=s,f.matrixWorldNeedsUpdate=!0,f.resetBBoxNeedsUpdate(),f.updateVisible(),t.pendingDeletes.delete(f))}}}if(null===f){let e=p?p_.apply(u.data,p):u.data;gc.is(e.type)&&(e={...e,type:"Empty"}),(f=xP.createEntity(a,e,t)).overrideData=p,s.add(f),s.children.splice(s.children.length-1,1),s.children.splice(d,0,f),f.updateState(f.data,t),m&&f.changeSelectedState(m,t),t.scene.registerInstanceAndSetUuid(f)}f.isBone&&(c[f.identity[f.identity.length-1]]=f.uuid),d+=1,e(t,i,r,f,u,o,l+1,h,c)}if(!h){let e=d;for(;;){let e=s.children[d];if(wQ.is(e))t.pendingDeletes.add(e);else break;d+=1}s.children.splice(e,d-e)}return!0}
6681(e,[this.uuid],t.overrides,this,i,i,0,r,s),this.children))if(wQ.is(a)){let t=a.data;"Empty"===t.type&&t.animations&&a.traverseEntity(t=>{let i=t.dataPatched;if(t instanceof Mb&&i.bones&&i.boneInverses){let i=t.dataPatched;if(i.bones&&i.boneInverses){let r=new nT(i.bones.map(t=>e.scene.find(s[t])),i.boneInverses.map(e=>new iX().fromArray(e)));t.bind(r,t.bindMatrix)}}else t.matrixAutoUpdate=!0})}}this.oldComponent=this.component}}};function Pz(e){if(e.component){let t=e.component.instances.indexOf(e);for(let i of(t>=0&&e.component.instances.splice(t,1),e.children))wQ.is(i)&&Pz(i)}}function PF(e,t,i,r){return e.component===t&&uL(e.identity,r)?e.overrideData===i?2:1:0}var PN=class extends Eh(nA,EI){constructor(e,t){super(),this.super_Entity(e,t),this.objectHelper.update(),this.matrixAutoUpdate=!0}updateState(e,t){this.updateState_Entity(e,t)}},Pk=class extends Mb{constructor(e,t,i){super(e,t,i),this.onBeforeRender=e=>{this.uiCanvas.render(e)},this.uiCanvas=new PT(e+"-canvas",t.geometry.width,t.geometry.height,i),this.uiCanvas.promise.then(()=>{this.applyFrame(this.dataPatched.geometry.frame,i.shared)})}updateByPatchedOpGeometry(e,t,i){super.updateByPatchedOpGeometry(e,t,i),0===e.type&&(void 0!==e.props.frame&&this.applyFrame(e.props.frame,i.shared),(void 0!==e.props.width||void 0!==e.props.height)&&this.applySize(e.props,i.shared))}applySize(e,t){let i=e?.width??this.dataPatched.geometry.width,r=e?.height??this.dataPatched.geometry.height;this.uiCanvas.applySize({width:i,height:r}),this.applyGeometryParametersFromFrame(t)}applyFrame(e,t){this.uiCanvas.applyFrame(e),this.applyGeometryParametersFromFrame(t),this.applyMaterialParametersFromFrame({shared:t})}applyGeometryParametersFromFrame(e){let t=this.frame;t&&(Object.assign(this.data,{geometry:Object.assign(this.data.geometry,{cornerRadius:t.cornerRadius,cornerType:0})}),Object.assign(this.dataPatched,{geometry:Object.assign(this.dataPatched.geometry,{cornerRadius:t.cornerRadius,cornerType:0})}),this.localGeometry?.dispose(),this.localGeometry=w4(this.dataPatched.geometry,e,this.data.flatShading,this))}applyMaterialParametersFromFrame(e){let t=this.frame;if(t){let i=t.data.backgroundBlur;Object.assign(this.data.material.layers[0].data.texture,{image:this.uiCanvas.uuid}),Object.assign(this.data.material.layers[1].data,{roughness:i.radius,alpha:i.enabled?1:0}),Object.assign(this.dataPatched.material.layers[0].data.texture,{image:this.uiCanvas.uuid}),Object.assign(this.dataPatched.material.layers[1].data,{roughness:i.radius,alpha:i.enabled?1:0}),this.material.reset(this.dataPatched.material,e,!0)}}updateEntity2DByOp(e,t,i,r){this.uiCanvas.updateEntity2DByOp(e,t,i,r),e===this.frameId&&0===t.type&&(void 0!==t.props.cornerRadius?this.applyGeometryParametersFromFrame(r):pX(t.path,["backgroundBlur"])&&this.applyMaterialParametersFromFrame({shared:r}))}get frame(){return this.uiCanvas.frame}get frameId(){return this.frame?.uuid}removeInteractionGeometry(e){super.removeInteractionGeometry(e),this.applySize({},e)}updateGeometryInteractions(e,t){super.updateGeometryInteractions(e,t),this.applySize({width:e.width,height:e.height},t)}},PU=class{constructor(e,t,i){this.variables=[],this.currentTextureIndex=0;let r=1015,s=new nb,a=new r6;a.position.z=1;let o={passThruTexture:{value:null}},l=d(`uniform sampler2D passThruTexture;
6682
6683void main() {
6684
6685	vec2 uv = gl_FragCoord.xy / resolution.xy;
6686
6687	gl_FragColor = texture2D( passThruTexture, uv );
6688
6689}
6690`,o),h=new rK(new sc(2,2),l);
6690function c(i){i.defines.resolution="vec2( "+e.toFixed(1)+", "+t.toFixed(1)+" )"}function d(e,t){let i=new r5({uniforms:t=t||{},vertexShader:`void main()	{
6691
6692	gl_Position = vec4( position, 1.0 );
6693
6694}
6695`,fragmentShader:e});return c(i),i}s.add(h),this.setDataType=function(e){return r=e,this},this.addVariable=function(e,t,i){let r={name:e,initialValueTexture:i,material:this.createShaderMaterial(t),dependencies:null,renderTargets:[],wrapS:null,wrapT:null,minFilter:1003,magFilter:1003};return this.variables.push(r),r},this.setVariableDependencies=function(e,t){e.dependencies=t},this.init=function(){if(!1===i.capabilities.isWebGL2&&!1===i.extensions.has("OES_texture_float"))return"No OES_texture_float support for float textures.";if(0===i.capabilities.maxVertexTextures)return"No support for vertex shader textures.";for(let i=0;i<this.variables.length;i++){let r=this.variables[i];r.renderTargets[0]=this.createRenderTarget(e,t,r.wrapS,r.wrapT,r.minFilter,r.magFilter),r.renderTargets[1]=this.createRenderTarget(e,t,r.wrapS,r.wrapT,r.minFilter,r.magFilter),this.renderTexture(r.initialValueTexture,r.renderTargets[0]),this.renderTexture(r.initialValueTexture,r.renderTargets[1]);let s=r.material,a=s.uniforms;if(null!==r.dependencies)for(let e=0;e<r.dependencies.length;e++){let t=r.dependencies[e];if(t.name!==r.name){let e=!1;for(let i=0;i<this.variables.length;i++)if(t.name===this.variables[i].name){e=!0;break}if(!e)return"Variable dependency not found. Variable="+r.name+", dependency="+t.name}a[t.name]={value:null},s.fragmentShader=`
6696uniform sampler2D `+t.name+`;
6697`+s.fragmentShader}}return this.currentTextureIndex=0,null},this.compute=function(){let e=this.currentTextureIndex,t=0===this.currentTextureIndex?1:0;for(let i=0,r=this.variables.length;i<r;i++){let r=this.variables[i];if(null!==r.dependencies){let t=r.material.uniforms;for(let i=0,s=r.dependencies.length;i<s;i++){let s=r.dependencies[i];t[s.name].value=s.renderTargets[e].texture}}this.doRenderTarget(r.material,r.renderTargets[t])}this.currentTextureIndex=t},this.getCurrentRenderTarget=function(e){return e.renderTargets[this.currentTextureIndex]},this.getAlternateRenderTarget=function(e){return e.renderTargets[0===this.currentTextureIndex?1:0]},this.dispose=function(){h.geometry.dispose(),h.material.dispose();let e=this.variables;for(let t=0;t<e.length;t++){let i=e[t];i.initialValueTexture&&i.initialValueTexture.dispose();let r=i.renderTargets;for(let e=0;e<r.length;e++)r[e].dispose()}},this.addResolutionDefine=c,this.createShaderMaterial=d,this.createRenderTarget=function(i,s,a,o,l,h){return a=a||1001,o=o||1001,l=l||1003,h=h||1003,new id(i=i||e,s=s||t,{wrapS:a,wrapT:o,minFilter:l,magFilter:h,format:1023,type:r,depthBuffer:!1})},this.createTexture=function(){let i=new nM(new Float32Array(e*t*4),e,t,1023,1015);return i.needsUpdate=!0,i},this.renderTexture=function(e,t){o.passThruTexture.value=e,this.doRenderTarget(l,t),o.passThruTexture.value=null},this.doRenderTarget=function(e,t){let r=i.getRenderTarget(),o=i.xr.enabled,c=i.shadowMap.autoUpdate,d=i.outputEncoding,u=i.toneMapping;i.xr.enabled=!1,i.shadowMap.autoUpdate=!1,i.outputEncoding=3e3,i.toneMapping=0,h.material=e,i.setRenderTarget(t),i.render(s,a),h.material=l,i.xr.enabled=o,i.shadowMap.autoUpdate=c,i.outputEncoding=d,i.toneMapping=u,i.setRenderTarget(r)}}},PV=new rx,Pj=new iv,PG=class{constructor(e){let t=e.geometry;if(!t.isBufferGeometry||3!==t.attributes.position.itemSize)throw Error("THREE.MeshSurfaceSampler: Requires BufferGeometry triangle mesh.");t.index&&(console.warn("THREE.MeshSurfaceSampler: Converting geometry to non-indexed BufferGeometry."),t=t.toNonIndexed()),this.geometry=t,this.randomFunction=Math.random,this.positionAttribute=this.geometry.getAttribute("position"),this.colorAttribute=this.geometry.getAttribute("color"),this.weightAttribute=null,this.distribution=null}setWeightAttribute(e){return this.weightAttribute=e?this.geometry.getAttribute(e):null,this}build(){let e=this.positionAttribute,t=this.weightAttribute,i=new Float32Array(e.count/3);for(let r=0;r<e.count;r+=3){let s=1;t&&(s=t.getX(r)+t.getX(r+1)+t.getX(r+2)),PV.a.fromBufferAttribute(e,r),PV.b.fromBufferAttribute(e,r+1),PV.c.fromBufferAttribute(e,r+2),s*=PV.getArea(),i[r/3]=s}this.distribution=new Float32Array(e.count/3);let r=0;for(let e=0;e<i.length;e++)r+=i[e],this.distribution[e]=r;return this}setRandomGenerator(e){return this.randomFunction=e,this}sample(e,t,i){let r=this.distribution[this.distribution.length-1],s=this.binarySearch(this.randomFunction()*r);return this.sampleFace(s,e,t,i)}binarySearch(e){let t=this.distribution,i=0,r=t.length-1,s=-1;for(;i<=r;){let a=Math.ceil((i+r)/2);if(0===a||t[a-1]<=e&&t[a]>e){s=a;break}e<t[a]?r=a-1:i=a+1}return s}sampleFace(e,t,i,r){let s=this.randomFunction(),a=this.randomFunction();return s+a>1&&(s=1-s,a=1-a),PV.a.fromBufferAttribute(this.positionAttribute,3*e),PV.b.fromBufferAttribute(this.positionAttribute,3*e+1),PV.c.fromBufferAttribute(this.positionAttribute,3*e+2),t.set(0,0,0).addScaledVector(PV.a,s).addScaledVector(PV.b,a).addScaledVector(PV.c,1-(s+a)),void 0!==i&&PV.getNormal(i),void 0!==r&&void 0!==this.colorAttribute&&(PV.a.fromBufferAttribute(this.colorAttribute,3*e),PV.b.fromBufferAttribute(this.colorAttribute,3*e+1),PV.c.fromBufferAttribute(this.colorAttribute,3*e+2),Pj.set(0,0,0).addScaledVector(PV.a,s).addScaledVector(PV.b,a).addScaledVector(PV.c,1-(s+a)),r.r=Pj.x,r.g=Pj.y,r.b=Pj.z),this}};function PH(e,t){let i=new Float32Array(4*t*t);for(let r=0;r<t*t;r++)i[4*r]=e[3*r],i[4*r+1]=e[3*r+1],i[4*r+2]=e[3*r+2],i[4*r+3]=0;let r=new nM(i,t,t,1023,1015);return r.needsUpdate=!0,r}var PW=`
6698// uniform sampler2D uCurrentPosition; // Pass in the variable from GPGPU
6699// uniform sampler2D uCurrentVelocity; // Pass in the variable from GPGPU
6700// uniform sampler2D uCurrentEmissionRate; // Pass in the variable from GPGPU
6701uniform sampler2D uOriginalPosition;
6702uniform float uTime;
6703uniform float uSpeed;     // update speed of the particles
6704uniform vec3 uWorldOffset;    
6705uniform vec4 uWorldQuaternion;
6706uniform float uMaxLifeTime;
6707uniform vec3 uEmitterSize;
6708uniform float uFPSRatio;     // 1  for 60 FPS
6709
6710float random (vec2 st) {
6711    return fract(sin(dot(st.xy,
6712        vec2(12.9898,78.233)))*
6713        43758.5453123);
6714}
6715vec3 applyQuaternionToVector( vec4 q, vec3 v ){
6716    return v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v );
6717}
6718
6719vec3 applyForce(vec3 force, float mass) {
6720    vec3 acceleration = force / mass;
6721    
6722    return acceleration;
6723  }
6724  
6725
6726void main() {
6727    vec2 vUv = gl_FragCoord.xy / resolution.xy;
6728    vec3 position = texture2D( uCurrentPosition, vUv ).xyz;
6729    float currentLife = texture2D( uCurrentPosition, vUv ).w;   // from 1 to 0
6730    float isSpawning = texture2D( uCurrentEmissionRate, vUv ).r;        // 1. = spawning, 0. = not spawning
6731    float isActive = texture2D( uCurrentEmissionRate, vUv ).g;          // 1. = active, 0. = not active
6732    float timeStart = texture2D( uCurrentEmissionRate, vUv ).b;         // timeStart in seconds when the particle was emitted
6733    vec3 originalPosition = ((texture2D( uOriginalPosition, vUv ).xyz) * uEmitterSize);
6734    vec3 velocity = texture2D( uCurrentVelocity, vUv ).xyz;
6735    float collisionFlag = texture2D( uCurrentVelocity, vUv ).w;             // 1. = collided, 0. = not collided
6736    float lifeTime = uMaxLifeTime;
6737
6738    // Calculate the position adjustment based on collision
6739    //     if (collisionFlag > .5) {  
6740    float isColliding = step(0.5, collisionFlag); // 1.0 if collisionFlag > 0.5, otherwise 0.0
6741    float bounceOffset = 3.0 * isColliding; // Becomes 3.0 if colliding, 0.0 otherwise
6742    vec3 collisionAdjustedVelocity = velocity * (1.0 + bounceOffset);
6743
6744    // Update position based on collision or normal movement
6745    vec3 fpsVelocity = velocity * min(uFPSRatio, 5.0);
6746    position += mix(fpsVelocity, collisionAdjustedVelocity, isColliding);
6747
6748    // EMISSION RATE - BIRTH
6749    // if (isSpawning == 1.0) {
6750    // Better Approach to avoid If statement
6751    vec3 newPosition = applyQuaternionToVector(uWorldQuaternion, originalPosition) + uWorldOffset;
6752    originalPosition = mix(originalPosition, newPosition, isSpawning);
6753    position = mix(position, originalPosition, isSpawning);;
6754    timeStart = mix(timeStart, uTime, isSpawning);
6755
6756    // Calculate timeLeft for life normalization
6757    float timeLeft = max(lifeTime - (uTime - timeStart), 0.0);
6758    float life_Normalize = timeLeft / lifeTime;
6759
6760    // Use isActive to blend between the calculated color and black
6761    vec4 activeColor = vec4(position, life_Normalize);
6762    // if (isActive == 1.0) {
6763    gl_FragColor = mix(vec4(0.0), activeColor, isActive);
6764
6765}
6766`,Pq=`
6767  #ifdef USE_COLLIDER
6768    float restitution = max(uBounce * 2., .01); // Energy Loss
6769    // SPHERE COLLIDER
6770    // **************************************************************
6771    #ifdef USE_SPHERE_COLLIDER       
6772      // Convert collider size to radii (assuming uColliderSize is the diameter in each axis)
6773      vec3 radii = uColliderSize;
6774      // Adjust position relative to collider
6775      vec3 relPos = position - uColliderPos;
6776      // Apply rotation of the collider to the relative position
6777      relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos);            
6778      // Scale relative position by radii (for ellipsoid collision detection)
6779      vec3 scaledPos = relPos / radii;
6780      // Calculate ellipsoidal distance
6781      float dist = length(scaledPos); // Distance in terms of ellipsoid
6782      
6783      // Check for collision
6784      if (dist <= 1. + particleSize / length(radii) && collisionFlag == 0.0) {
6785          // Compute the normal at the collision point, accounting for particle size
6786        vec3 adjustedPos = scaledPos * (1.0 + particleSize / length(radii));          
6787        // Compute the normal at the collision point
6788        vec3 normal = ellipsoidNormal(adjustedPos, radii);
6789        // Rotate the normal back to world space
6790        normal = applyQuaternionToVector(uColliderQuaternion, normal);
6791        // Reflect the velocity vector off the normal
6792        velocity = reflect(velocity, normal) * restitution;
6793
6794        collisionFlag = 1.0;
6795      } else {
6796        collisionFlag = 0.0;
6797      }
6798    #endif
6799
6800    // BOX COLLIDER or PLANE COLLIDER 
6801    // **************************************************************
6802    #ifdef USE_BOX_COLLIDER
6803      // Box dimensions and repulsion variables
6804      vec3 boxHalfSize = uColliderSize / 2.0;
6805      // Convert world position to box's local space
6806      vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos);      
6807      // Collision detection
6808      vec3 localDistance = abs(localPos) - boxHalfSize;
6809      float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z));    
6810
6811      // Collision Detected
6812      if (distToSurface <= particleSize * 0.5 && collisionFlag == 0.0) {      
6813        // Find the nearest face normal for bounce direction
6814        vec3 normal;
6815        if (localDistance.x > localDistance.y && localDistance.x > localDistance.z) {
6816            normal = vec3(sign(localPos.x), 0.0, 0.0);
6817        } else if (localDistance.y > localDistance.z) {
6818            normal = vec3(0.0, sign(localPos.y), 0.0);
6819        } else {
6820            normal = vec3(0.0, 0.0, sign(localPos.z));
6821        }            
6822        // Rotate normal back to world space
6823        normal = applyQuaternionToVector(uColliderQuaternion, normal);      
6824        // Reflect velocity and apply repulsion force
6825        velocity = reflect(velocity, normal) * restitution;
6826        
6827        collisionFlag = 1.0;
6828      } else {
6829        collisionFlag = 0.0;
6830      }
6831    #endif      
6832  #endif      
6833  // END COLLIDER    
6834`,PX=`
6835  #ifdef USE_ATTRACTOR
6836
6837      #ifdef USE_SPHERE_COLLIDER      
6838        // Convert collider size to radii (assuming uColliderSize is the diameter in each axis)
6839        vec3 radii = uColliderSize;
6840        // Adjust position relative to collider
6841        vec3 relPos = position - uColliderPos;
6842        // Apply rotation of the collider to the relative position
6843        relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos);            
6844        // Scale relative position by radii (for ellipsoid collision detection)
6845        vec3 scaledPos = relPos / radii;
6846        // Calculate ellipsoidal distance
6847        float distToSurface = length(scaledPos); // Distance in terms of ellipsoid
6848        float insideCheck = 1.0;
6849
6850      #endif
6851
6852
6853      #ifdef USE_BOX_COLLIDER
6854        // Box dimensions
6855        vec3 boxHalfSize = uColliderSize / 2.0;
6856        // Convert world position to box's local space
6857        vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos);      
6858        vec3 localDistance = abs(localPos) - boxHalfSize;
6859        float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z));
6860        float insideCheck = particleSize;
6861      #endif      
6862  
6863      // Apply vortex force inside the Helper
6864      #ifdef USE_FORCE_LOCAL_SPACE
6865        if (distToSurface <= insideCheck ) {    
6866            // Define parameters for the attractor field
6867            #ifdef USE_SPHERE_COLLIDER      
6868              float attractorStrength = (1.0 - distToSurface ) * uForceIntensity; // Adjust as needed
6869            #endif
6870
6871            #ifdef USE_BOX_COLLIDER
6872              float attractorStrength = max((1.0 - insideCheck / distToSurface), 0.) * uForceIntensity; // Adjust as needed
6873              #endif
6874
6875            float attractorDamping = uForceDamping;  // Adjust as needed (higher values will attenuate velocity more)
6876          
6877            // Use the same radii calculation code as for the collider
6878            vec3 attractorRadii = uColliderSize;
6879            // Adjust position relative to attractor center
6880            vec3 relPos = position - uColliderPos;
6881            // Apply rotation of the collider to the relative position
6882            relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos);            
6883            // Scale relative position by radii (for ellipsoid attraction)
6884            vec3 scaledPos = relPos / attractorRadii;
6885
6886            // Calculate ellipsoidal distance as attractor radius
6887            float attractorRadius = length(scaledPos);
6888            // Calculate the distance from the attractor center
6889            vec3 relativePosition = position - uColliderPos;
6890            // Calculate the force vector towards the attractor center
6891            vec3 attractorForce = normalize(relativePosition) * attractorStrength;
6892            // Apply the attractor force to the particle
6893            velocity -= attractorForce;
6894            // Attenuate the particle's velocity
6895            velocity *= attractorDamping;
6896        }
6897      #else 
6898            // Calculate the distance from the attractor center
6899            vec3 relativePosition = position - uColliderPos;
6900            // Calculate the force vector towards the attractor center
6901            vec3 attractorForce = normalize(relativePosition) * uForceIntensity;
6902            // Apply the attractor force to the particle
6903            velocity -= attractorForce;
6904            // Attenuate the particle's velocity
6905            velocity *= uForceDamping;
6906      #endif    
6907  #endif      
6908`,PY=`
6909  #ifdef USE_VORTEX
6910    // Box dimensions
6911    vec3 boxHalfSize = uColliderSize / 2.0;
6912    // Convert world position to box's local space
6913    vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos);      
6914    vec3 localDistance = abs(localPos) - boxHalfSize;
6915    float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z));
6916
6917    // Apply vortex force inside the box
6918    if (distToSurface <= particleSize) {
6919      float vortexStrength = uForceIntensity;
6920      vec3 localTopCenter = vec3(0.0, 0., 0.0);
6921
6922      // Transform the local top center to the world space
6923      vec3 vortexCenter = uColliderPos + applyQuaternionToVector(uColliderQuaternion, localTopCenter);
6924      // Calculate the vector from particle to vortex center
6925      vec3 vortexVector = vortexCenter - position;
6926
6927      // Calculate the rotation axis from the inverse of the collider's quaternion and the fixed up vector
6928      // Note: important to add a tiny z component to the up vector to avoid instability
6929      vec3 upVector = vec3(0.0, 1.0, 0.01);
6930      vec3 rotationAxis = cross(upVector, applyQuaternionToVector(uColliderQuaternion, vortexVector));
6931      rotationAxis = normalize(rotationAxis);
6932
6933      // Add rotational component to velocity
6934      float rotationSpeed = length(vortexVector * vortexStrength * 3.0) ; 
6935
6936      vec3 rotationVelocity = rotationAxis * rotationSpeed;
6937      // velocity += rotationVelocity * 0.005 ;
6938      velocity = rotationVelocity * 0.005 ;
6939
6940      // Calculate vortex force
6941      // vec3 vortexForce = normalize(vortexVector) * uSpeed * .1 ;
6942      // Apply the vortex force to the particle
6943      vec3 originDirection = applyQuaternionToVector(uWorldQuaternion, directions);
6944      velocity += applyForce( originDirection * uSpeed * (1. - uForceDamping) , mass * .5);
6945    }
6946  #endif      
6947`,PQ=`
6948// uniform sampler2D uCurrentPosition; // Pass in the variable from GPGPU
6949// uniform sampler2D uCurrentVelocity; // Pass in the variable from GPGPU
6950// uniform sampler2D uCurrentEmissionRate; // Pass in the variable from GPGPU
6951uniform sampler2D uOriginalPosition;
6952uniform sampler2D uDirections;     
6953uniform vec3 uDirectionsAxis;
6954uniform vec4 uWorldQuaternion;
6955uniform vec3 uGravity;        
6956uniform float uNoiseStrength;     // Variation of the noise
6957uniform float uNoiseScale;        // Scale of the noise
6958uniform float uNoiseSeed;         // Seed of the noise
6959uniform float particleSize;
6960uniform float uSpeed;     // update speed of the particles
6961uniform float uRandomMassFactor;
6962
6963// COLLIDER
6964uniform vec3 uColliderPos;                // Collider Position
6965uniform vec3 uColliderSize;               // Collider Dimension
6966uniform vec4 uColliderQuaternion;         // Collider Rotation
6967uniform vec4 uColliderQuaternionInvert;   // Collider Rotation
6968uniform float uBounce;                    // Bounce factor
6969uniform float uForceDamping;
6970uniform float uForceIntensity;
6971
6972
6973
6974
6975    vec3 mod289(vec3 x) {
6976      return x - floor(x * (1.0 / 289.0)) * 289.0;
6977    }
6978    
6979    vec4 mod289(vec4 x) {
6980    return x - floor(x * (1.0 / 289.0)) * 289.0;
6981    }
6982    
6983    vec4 permute(vec4 x) {
6984        return mod289(((x*34.0)+1.0)*x);
6985    }
6986    
6987    vec4 taylorInvSqrt(vec4 r)
6988    {
6989    return 1.79284291400159 - 0.85373472095314 * r;
6990    }
6991    
6992    vec3 fade(vec3 t) {
6993  return t*t*t*(t*(t*6.0-15.0)+10.0);
6994}
6995
6996    float snoise(vec3 v)
6997    {
6998    const vec2  C = vec2(1.0/6.0, 1.0/3.0) ;
6999    const vec4  D = vec4(0.0, 0.5, 1.0, 2.0);
7000    vec3 i  = floor(v + dot(v, C.yyy) );
7001    vec3 x0 =   v - i + dot(i, C.xxx) ;
7002    vec3 g = step(x0.yzx, x0.xyz);
7003    vec3 l = 1.0 - g;
7004    vec3 i1 = min( g.xyz, l.zxy );
7005    vec3 i2 = max( g.xyz, l.zxy );
7006    vec3 x1 = x0 - i1 + C.xxx;
7007    vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y
7008    vec3 x3 = x0 - D.yyy;      // -1.0+3.0*C.x = -0.5 = -D.y
7009    
7010    // Permutations
7011    i = mod289(i);
7012    vec4 p = permute( permute( permute(
7013                i.z + vec4(0.0, i1.z, i2.z, 1.0 ))
7014              + i.y + vec4(0.0, i1.y, i2.y, 1.0 ))
7015              + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));
7016    
7017    // Gradients: 7x7 points over a square, mapped onto an octahedron.
7018    // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)
7019    float n_ = 0.142857142857; // 1.0/7.0
7020    vec3  ns = n_ * D.wyz - D.xzx;
7021    
7022    vec4 j = p - 49.0 * floor(p * ns.z * ns.z);  //  mod(p,7*7)
7023    
7024    vec4 x_ = floor(j * ns.z);
7025    vec4 y_ = floor(j - 7.0 * x_ );    // mod(j,N)
7026    
7027    vec4 x = x_ *ns.x + ns.yyyy;
7028    vec4 y = y_ *ns.x + ns.yyyy;
7029    vec4 h = 1.0 - abs(x) - abs(y);
7030    
7031    vec4 b0 = vec4( x.xy, y.xy );
7032    vec4 b1 = vec4( x.zw, y.zw );
7033    
7034    vec4 s0 = floor(b0)*2.0 + 1.0;
7035    vec4 s1 = floor(b1)*2.0 + 1.0;
7036    vec4 sh = -step(h, vec4(0.0));
7037    
7038    vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;
7039    vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;
7040    
7041    vec3 p0 = vec3(a0.xy,h.x);
7042    vec3 p1 = vec3(a0.zw,h.y);
7043    vec3 p2 = vec3(a1.xy,h.z);
7044    vec3 p3 = vec3(a1.zw,h.w);
7045    
7046    //Normalise gradients
7047    vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));
7048    p0 *= norm.x;
7049    p1 *= norm.y;
7050    p2 *= norm.z;
7051    p3 *= norm.w;
7052    
7053    // Mix final noise value
7054    vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);
7055    m = m * m;
7056    return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),
7057                                  dot(p2,x2), dot(p3,x3) ) );
7058    }
7059    
7060    vec3 snoiseVec3( vec3 x ){
7061    
7062      float s  = snoise(vec3( x ));
7063      float s1 = snoise(vec3( x.y - 19.1 , x.z + 33.4 , x.x + 47.2 ));
7064      float s2 = snoise(vec3( x.z + 74.2 , x.x - 124.5 , x.y + 99.4 ));
7065      vec3 c = vec3( s , s1 , s2 );
7066      return c;
7067    
7068    }
7069    
7070      
7071    vec3 curlNoise( vec3 p, float seed){
7072      p += seed;
7073      const float e = .1;
7074      vec3 dx = vec3( e   , 0.0 , 0.0 );
7075      vec3 dy = vec3( 0.0 , e   , 0.0 );
7076      vec3 dz = vec3( 0.0 , 0.0 , e   );
7077    
7078      vec3 p_x0 = snoiseVec3( p - dx );
7079      vec3 p_x1 = snoiseVec3( p + dx );
7080      vec3 p_y0 = snoiseVec3( p - dy );
7081      vec3 p_y1 = snoiseVec3( p + dy );
7082      vec3 p_z0 = snoiseVec3( p - dz );
7083      vec3 p_z1 = snoiseVec3( p + dz );
7084    
7085      float x = p_y1.z - p_y0.z - p_z1.y + p_z0.y;
7086      float y = p_z1.x - p_z0.x - p_x1.z + p_x0.z;
7087      float z = p_x1.y - p_x0.y - p_y1.x + p_y0.x;
7088    
7089      const float divisor = 1.0 / ( 2.0 * e );
7090      return normalize( vec3( x , y , z ) * divisor );
7091    
7092    }
7093
7094
7095// Classic Perlin noise
7096float cnoise(vec3 P)
7097{
7098  vec3 Pi0 = floor(P); // Integer part for indexing
7099  vec3 Pi1 = Pi0 + vec3(1.0); // Integer part + 1
7100  Pi0 = mod289(Pi0);
7101  Pi1 = mod289(Pi1);
7102  vec3 Pf0 = fract(P); // Fractional part for interpolation
7103  vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0
7104  vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
7105  vec4 iy = vec4(Pi0.yy, Pi1.yy);
7106  vec4 iz0 = Pi0.zzzz;
7107  vec4 iz1 = Pi1.zzzz;
7108
7109  vec4 ixy = permute(permute(ix) + iy);
7110  vec4 ixy0 = permute(ixy + iz0);
7111  vec4 ixy1 = permute(ixy + iz1);
7112
7113  vec4 gx0 = ixy0 * (1.0 / 7.0);
7114  vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;
7115  gx0 = fract(gx0);
7116  vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);
7117  vec4 sz0 = step(gz0, vec4(0.0));
7118  gx0 -= sz0 * (step(0.0, gx0) - 0.5);
7119  gy0 -= sz0 * (step(0.0, gy0) - 0.5);
7120
7121  vec4 gx1 = ixy1 * (1.0 / 7.0);
7122  vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;
7123  gx1 = fract(gx1);
7124  vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);
7125  vec4 sz1 = step(gz1, vec4(0.0));
7126  gx1 -= sz1 * (step(0.0, gx1) - 0.5);
7127  gy1 -= sz1 * (step(0.0, gy1) - 0.5);
7128
7129  vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);
7130  vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);
7131  vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);
7132  vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);
7133  vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);
7134  vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);
7135  vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);
7136  vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);
7137
7138  vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));
7139  g000 *= norm0.x;
7140  g010 *= norm0.y;
7141  g100 *= norm0.z;
7142  g110 *= norm0.w;
7143  vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));
7144  g001 *= norm1.x;
7145  g011 *= norm1.y;
7146  g101 *= norm1.z;
7147  g111 *= norm1.w;
7148
7149  float n000 = dot(g000, Pf0);
7150  float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));
7151  float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));
7152  float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));
7153  float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));
7154  float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));
7155  float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));
7156  float n111 = dot(g111, Pf1);
7157
7158  vec3 fade_xyz = fade(Pf0);
7159  vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);
7160  vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);
7161  float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); 
7162  return 2.2 * n_xyz;
7163}
7164
7165
7166vec3 fbm_vec3(vec3 p, float frequency, float offset)
7167{
7168  return vec3(
7169    cnoise((p+vec3(offset))*frequency),
7170    cnoise((p+vec3(offset+20.0))*frequency),
7171    cnoise((p+vec3(offset-30.0))*frequency)
7172  );
7173}
7174
7175
7176float rand(vec2 co){
7177    return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453);
7178}
7179vec3 applyQuaternionToVector( vec4 q, vec3 v ){
7180    return v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v );
7181 } 
7182vec3 applyForce(vec3 force, float mass) {
7183  vec3 acceleration = force / mass;
7184  
7185  return acceleration;
7186}
7187
7188vec4 conjugate(vec4 q) {
7189  return vec4(q.w, -q.x, -q.y, -q.z);
7190}
7191
7192// Function to compute the normal of the ellipsoid at a given point
7193vec3 ellipsoidNormal(vec3 p, vec3 radii) {
7194  return normalize(p / (radii * radii));
7195}
7196
7197float friction = .3;
7198
7199void main() {
7200    vec2 vUv = gl_FragCoord.xy / resolution.xy;
7201    vec3 position = texture2D( uCurrentPosition, vUv ).xyz;
7202    vec3 originalPosition = texture2D( uOriginalPosition, vUv ).xyz;
7203    float timeLeft = texture2D( uCurrentPosition, vUv ).w;
7204    vec3 directions = texture2D( uDirections, vUv ).xyz;    
7205    vec3 velocity = texture2D( uCurrentVelocity, vUv ).xyz;
7206    float mass = rand(originalPosition.xy) * 0.5 + 0.5;
7207    float isSpawning = texture2D( uCurrentEmissionRate, vUv ).x;        // 1. = spawning, 0. = not spawning
7208    float isActive = texture2D( uCurrentEmissionRate, vUv ).y;          // 1. = active, 0. = not active
7209    float collisionFlag =texture2D( uCurrentVelocity, vUv ).w;          // Indicate collision
7210
7211    // Randomness Mass
7212    mass = (1.0 - (uRandomMassFactor * mass));
7213    
7214    if (isActive == 1.0) {
7215      // **************************************************************
7216      // FORCES NOISES
7217      // **************************************************************
7218      #ifdef USE_CURL_NOISE
7219        if (uNoiseScale > 0.0 ) {
7220          velocity = curlNoise(position * uNoiseScale * .002, uNoiseSeed) * ( uNoiseStrength + 1.0) * .05 * uSpeed;
7221        }
7222        // Variation of the noise Over Time
7223        if (uNoiseStrength > 0.0 && uNoiseScale == 0.0 ) {
7224          velocity += curlNoise( position, uNoiseSeed)  * uNoiseStrength * 0.05 * uSpeed;
7225        }
7226      #endif
7227      // **************************************************************
7228      #ifdef USE_SIMPLEX_NOISE
7229        if (uNoiseScale > 0.0 ) {
7230          velocity = vec3(snoise(position * uNoiseScale * .001) * ( uNoiseStrength + 1.0) * .1);
7231          velocity *= uSpeed;
7232        }
7233        // Variation of the noise Over Time
7234        if (uNoiseStrength > 0.0 && uNoiseScale == 0.0) {
7235          velocity += vec3(snoise(position * uNoiseStrength * .001) * .05 * uSpeed);
7236        }
7237      #endif
7238      // ************************************************************** 
7239      #ifdef USE_FBM_NOISE
7240        if (uNoiseScale > 0.0 ) {
7241          velocity = fbm_vec3(position * uNoiseScale * .001, ( uNoiseStrength + 1.0), uNoiseSeed);
7242          velocity *= uSpeed;
7243        }
7244        // Variation of the noise Over Time
7245        if (uNoiseStrength > 0.0 && uNoiseScale == 0.0 ) {      
7246          velocity += fbm_vec3(position * uNoiseStrength * .001, ( uNoiseStrength + 1.0), uNoiseSeed) * .1 * uSpeed;
7247        }
7248      #endif
7249
7250      // COLLIDER
7251      ${Pq}
7252      // ATTRACTION
7253      ${PX}  
7254      // VORTEX
7255      ${PY}
7256    } 
7257    // End isActive
7258
7259    // SPAWN BIRTH 
7260    // **************************************************************
7261    // if (isSpawning == 1.)
7262    #ifdef USE_NORMALS
7263      velocity = mix(velocity, applyQuaternionToVector(uWorldQuaternion, directions) * uSpeed, isSpawning);
7264    #else
7265      velocity = mix(velocity, applyQuaternionToVector(uWorldQuaternion, uDirectionsAxis) * uSpeed, isSpawning);    
7266    #endif
7267    
7268    // if (collisionFlag == 0.0)
7269    velocity += applyForce(uGravity, mass * .5) * (1.0 - collisionFlag);
7270
7271    gl_FragColor = vec4(velocity, collisionFlag);
7272}
7273`,PK=`
7274
7275  // Linear Fade In
7276  float linearFadeIn(float t) {
7277    return t;
7278  }
7279
7280
7281  // linear fade out
7282  float linearFadeOut(float t) {
7283    return 1.0 - t;
7284  }
7285  
7286  float linearInOut(float t) {
7287    return t < 0.5 ? t :  (1.0 - t);  
7288  }
7289
7290    // lerp
7291    float lerp(float a, float b, float t) {
7292      return a + (b - a) * t;
7293    }
7294
7295  // Ease In Out Quart
7296  float exponentialInOut(float t) {
7297    return t < 0.4 ? lerp(0.0, 1.0, t / 0.4) :
7298    t > 0.6 ? lerp(1.0, 0.0, (t - 0.6) / 0.4) :
7299    1.0;
7300   }
7301
7302  // constant
7303  float constant(float t) {
7304    return 1.0;
7305  } 
7306`,PZ=`
7307
7308float rand(vec3 co){
7309  return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
7310}
7311
7312vec3 applyQuaternionToVector( vec4 q, vec3 v ){
7313  return v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v );
7314}
7315
7316vec3 applyForce(vec3 force, float mass) {
7317  vec3 acceleration = force / mass;
7318    
7319  return acceleration;
7320}
7321`,PJ=`
7322vec3 rgb2xyz (in vec3 rgb) {
7323    float r = rgb.r;
7324	float g = rgb.g;
7325	float b = rgb.b;
7326
7327	r = r > 0.04045 ? pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);
7328	g = g > 0.04045 ? pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);
7329	b = b > 0.04045 ? pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);
7330
7331	float x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
7332	float y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
7333	float z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
7334    
7335    vec3 xyz = vec3(
7336        (r * 0.4124) + (g * 0.3576) + (b * 0.1805) * 100.0,
7337        (r * 0.2126) + (g * 0.7152) + (b * 0.0722) * 100.0,
7338        (r * 0.0193) + (g * 0.1192) + (b * 0.9505) * 100.0
7339    );
7340    return(xyz);
7341}
7342
7343vec3 xyz2lab (in vec3 xyz) {
7344	float x = xyz.x / 95.047;
7345	float y = xyz.y / 100.0;
7346	float z = xyz.z / 108.883;
7347
7348	x = x > 0.008856 ? pow(x, 1.0 / 3.0) : (7.787 * x) + (16.0 / 116.0);
7349	y = y > 0.008856 ? pow(y, 1.0 / 3.0) : (7.787 * y) + (16.0 / 116.0);
7350	z = z > 0.008856 ? pow(z, 1.0 / 3.0) : (7.787 * z) + (16.0 / 116.0);
7351
7352    vec3 lab = vec3((116.0 * y) - 16.0, 500.0 * (x - y), 200.0 * (y - z));
7353    return(lab);
7354}
7355
7356vec3 rgb2lab(in vec3 rgb) {
7357    vec3 xyz = rgb2xyz(rgb);
7358    vec3 lab = xyz2lab(xyz);
7359    return(lab);
7360}
7361
7362vec3 xyz2rgb (in vec3 xyz) {
7363	float x = xyz.x / 100.0;
7364	float y = xyz.y / 100.0;
7365	float z = xyz.z / 100.0;
7366	
7367    
7368	float r = (x *  3.2406) + (y * -1.5372) + (z * -0.4986);
7369	float g = (x * -0.9689) + (y *  1.8758) + (z *  0.0415);
7370	float b = (x *  0.0557) + (y * -0.2040) + (z *  1.0570);
7371
7372	r = r > 0.0031308 ? ((1.055 * pow(r, 1.0 / 2.4)) - 0.055) : r * 12.92;
7373	g = g > 0.0031308 ? ((1.055 * pow(g, 1.0 / 2.4)) - 0.055) : g * 12.92;
7374	b = b > 0.0031308 ? ((1.055 * pow(b, 1.0 / 2.4)) - 0.055) : b * 12.92;
7375
7376	r = min(max(0.0, r), 1.0);
7377	g = min(max(0.0, g), 1.0);
7378	b = min(max(0.0, b), 1.0);
7379
7380	return(vec3(r, g, b));
7381}
7382
7383vec3 lab2xyz (in vec3 lab) {
7384    float l = lab.x;
7385	float a = lab.y;
7386	float b = lab.z;
7387
7388  	float y = (l + 16.0) / 116.0;
7389	float x = a / 500.0 + y;
7390	float z = y - b / 200.0;
7391
7392	float y2 = pow(y, 3.0);
7393	float x2 = pow(x, 3.0);
7394	float z2 = pow(z, 3.0);
7395
7396  	y = y2 > 0.008856 ? y2 : (y - 16.0 / 116.0) / 7.787;
7397	x = x2 > 0.008856 ? x2 : (x - 16.0 / 116.0) / 7.787;
7398	z = z2 > 0.008856 ? z2 : (z - 16.0 / 116.0) / 7.787;
7399
7400	x *= 95.047;
7401	y *= 100.0;
7402	z *= 108.883;
7403
7404	return(vec3(x, y, z));
7405}
7406vec3 lab2rgb (in vec3 lab) {
7407    vec3 xyz = lab2xyz(lab);
7408    vec3 rgb = xyz2rgb(xyz);
7409    return(rgb);
7410}
7411
7412`,P$=`
7413  uniform sampler2D uPosition;
7414  uniform float uSize;
7415  uniform float uSizeEnd;
7416  uniform vec3 uWorldOffset;
7417  uniform vec4 uWorldQuaternion;
7418  // Billboard Behavior - Currently at Zero, but we can change that
7419  uniform float uRotation;
7420  uniform float uRotationEnd;
7421  uniform vec2 center;
7422
7423  // Randomness
7424  uniform float uRandScaleFactor;
7425  uniform float uRandRotationFactor;
7426
7427  attribute vec2 ref;
7428
7429  varying float v_LifeLeft;    // normalized lifetime 1 to 0
7430  varying vec2 vUv;
7431  varying vec2 vRef;
7432
7433  ${PZ}
7434  ${PK}
7435`,P0=({easeSize:e="linearFadeOut"})=>`
7436  vUv = uv;  
7437  vRef = ref;
7438  // Normalized LifeTime 1 to 0
7439  float lifeLeft = texture2D(uPosition, ref).w;
7440  v_LifeLeft = lifeLeft;
7441  // Position From DataTexture Simulation
7442  vec3 pos = texture2D(uPosition, ref).rgb - uWorldOffset;
7443  // Apply World Quaternion
7444  pos = applyQuaternionToVector(uWorldQuaternion, pos);  
7445            
7446  #ifdef  USE_SIZE_END
7447    // Scaled Over Time
7448    float t = 1. - lifeLeft;
7449    float currentSize = mix(uSize, uSizeEnd, t); // Linearly interpolate between uSize and uSizeEnd
7450    vec3 scaledPosition = position * vec3(currentSize);
7451  #else
7452    // Change Size Behavior over LifeTime
7453    float easeSize = ${e}(1. - lifeLeft);
7454    // Scaled Over Time
7455    vec3 scaledPosition = position * vec3(uSize * easeSize);
7456  #endif
7457
7458  // Billboard Behavior
7459  vec2 scale;
7460  scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );
7461  scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );    
7462  // Randomness 
7463  float randRef = rand(ref);
7464  scale *= (1.0 - (uRandScaleFactor * randRef));
7465  // Rotation
7466  float randRotation =  2.0 * PI * ( uRandRotationFactor * randRef);
7467  float originalRotation = (1.0 - uRotation) * 2.0 * PI;
7468  float originalRotationEnd = (1.0 - uRotationEnd) * 2.0 * PI;
7469  // OverTime
7470  float finalRotation = mix(originalRotation + randRotation, originalRotationEnd + randRotation, lifeLeft);
7471
7472  vec2 alignedPosition = ( scaledPosition.xy - ( center - vec2( 0.5 ) ) ) * scale;
7473  vec2 rotatedPosition;
7474  rotatedPosition.x = cos( finalRotation ) * alignedPosition.x - sin( finalRotation ) * alignedPosition.y;
7475  rotatedPosition.y = sin( finalRotation ) * alignedPosition.x + cos( finalRotation ) * alignedPosition.y;
7476  
7477  mat4 instanceMatrix = mat4(
7478    vec4(1.0, 0.0, 0.0, 0.0),
7479    vec4(0.0, 1.0, 0.0, 0.0),
7480    vec4(0.0, 0.0, 1.0, 0.0),
7481    vec4(pos.x, pos.y, pos.z, 1.0)
7482  );  
7483
7484  mvPosition = modelViewMatrix * instanceMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );
7485  mvPosition.xy += rotatedPosition;
7486  gl_Position = projectionMatrix  * mvPosition;   
7487`,P1=`
7488  uniform vec4 uColor;                // start color
7489  uniform vec4 uColor2;               // end color
7490  uniform sampler2D uTexture;         // texture
7491  varying float v_LifeLeft;   // normalized lifetime 1 to 0
7492  varying vec2 vUv;
7493  varying vec2 vRef;
7494
7495  float random(vec2 co) {
7496    return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);
7497  }
7498  `+PK+`  
7499  ${PJ}
7500
7501`,P2=({easeOpacity:e="linearFadeOut"})=>`  
7502  // if Particle is dead, hide it
7503  if (v_LifeLeft <= 0.005 ) {
7504    discard;
7505  }
7506
7507  #ifdef USE_RANDOM_COLORING
7508    float randVal = random(vRef); // Generate a random value based on the reference
7509    vec4 color = mix(uColor, uColor2, randVal); // Interpolate between the two colors
7510  #else
7511    vec4 color = mix(uColor, uColor2, 1. - v_LifeLeft);
7512  #endif
7513
7514  // Opacity over Life Time
7515  float finalAlpha = ${e}(1. - v_LifeLeft);  
7516  vec4 textureColor = texture2D(uTexture, vUv).rgba; 
7517  finalColor = textureColor.rgb * color.rgb;
7518  finalAlpha = color.a * textureColor.a * finalAlpha;
7519  
7520  gl_FragColor = vec4(finalColor, finalAlpha);     
7521
7522`,P3=class extends r5{constructor(e,t){super(),this.needsJitter=!0,this.type="ParticleMaterial",this.easeOpacity="linearFadeIn",this.easeSize="linearFadeIn",this.useSizeEnd=!1,this.isColoringRandom=!1,this.init(e,t),this.context=t}reset(){}init(e,t){this.transparent=!0,this.depthTest=!0,this.depthWrite=!1,this.easeOpacity=e.ease,this.easeSize=e.easeSize,this.layers=[],SI.startContext(SI.globalContext),this.lightLayer=new A_(0,"",{...gM.defaultData("light","phong"),visible:!1},new _q,{},t.shared),SI.endContext(SI.globalContext),this.build()}updateState(e){void 0!==e.coloring&&(this.isColoringRandom="random"===e.coloring),void 0!==e.color&&(e.color instanceof Array?this.uniforms.uColor.value=e.color:this.uniforms.uColor.value=this.context.shared.color(e.color)),void 0!==e.color2&&(e.color2 instanceof Array?this.uniforms.uColor2.value=e.color2:this.uniforms.uColor2.value=this.context.shared.color(e.color2)),void 0!==e.size&&(this.uniforms.uSize.value=e.size[0],this.uniforms.uSizeEnd.value=e.size[1],e.size[0]!==e.size[1]?this.useSizeEnd=!0:this.useSizeEnd=!1),void 0!==e.ease&&(this.easeOpacity=e.ease,this.build()),void 0!==e.easeSize&&(this.easeSize=e.easeSize,this.build()),this.needsUpdate=!0}onBeforeCompile(e){this.build(),e.defines=this.defines,e.uniforms=this.uniforms,e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader}build(){let e=new _l;return e.needsJitter=this.needsJitter,e.addFragmentParsCode(_i),e.buildShader("vertex",this.fragment),e.buildShader("fragment",this.fragment),e.addFragmentFinalCode(_r),this.isColoringRandom&&e.define("USE_RANDOM_COLORING"),this.useSizeEnd&&e.define("USE_SIZE_END"),e.addVertexParsCode(P$),e.addFragmentParsCode(P1),e.addVertexFinalCode(P0({easeSize:this.easeSize})),e.addFragmentFinalCode(P2({easeOpacity:this.easeOpacity})),this.vertexShader=e.getCode("vertex"),this.fragmentShader=e.getCode("fragment"),this.defines=e.defines,this.uniforms={...e.uniforms,...this.uniforms},this.extensions=e.extensions,this}get nodeMaterial(){return this}get fragment(){return this.lightLayer.node}getDefines(){return this.defines}
7522nodeMaterialDispose(){this.layers.forEach(e=>e.dispose()),super.dispose()}},P4=class{constructor(e,t,i,r){this.type="SphereEmitterShape",this.targetMesh=void 0,this.size=e,this.type=i,this.textureSize=Math.max(Math.ceil(Math.sqrt(t)),1),this.targetMesh=r?.type==="Mesh"&&r?r:this.getMesh(i,1);let{positions:s,dataTexture:a,dataTextureNormals:o}=this.createPositions(this.textureSize,this.targetMesh??this.getMesh(i,1));this.positionsTexture=a,this.positionsAttribute=s,this.directionsTexture=o}createPositions(e,t){let{positions:i,normals:r}=function(e,t){let i=new rK(e.geometry,e.material),r=[],s=[],a=new iv,o=new iv;null!==i.geometry.index&&(i.geometry=i.geometry.toNonIndexed());let l=new PG(i).build();for(let e=0;e<t;e++)l.sample(a,o),r.push(a.x,a.y,a.z),s.push(o.x,o.y,o.z);return{positions:new Float32Array(r),normals:new Float32Array(s)}}(t,e*e);return{dataTexture:PH(i,e),positions:i,dataTextureNormals:PH(r,e)}}getMesh(e,t){let i=null;switch(e){case"SphereEmitterShape":i=new oO(.5*t,32,32);break;case"TorusEmitterShape":i=new oR(.5*t,.3,15,40);break;case"ConeEmitterShape":i=new ol(t,t,15);break;case"BoxEmitterShape":i=new rJ(t,t,t);break;case"PlaneEmitterShape":(i=new sc(t,t)).rotateX(-Math.PI/2);break;default:i=new oO(t,32,32)}return new rK(i,new rS({color:16711680}))}applyToShader(e,t){this.size=new iv().fromArray(t.size),e.uEmitterSize.value=this.size}dispose(){this.positionsTexture.dispose(),this.directionsTexture.dispose(),this.positionsAttribute=new Float32Array}};function P5(e){let t={...e},i=gg.defaultData;t.forceFieldObjectId&&(t.colliderEntityId=t.forceFieldObjectId);let r={...i.shape,...t.shape},s={...i.renderMaterial,...t.renderMaterial};return{...i,...t,shape:r,renderMaterial:s}}var P6=`
7523// uniform sampler2D uCurrentPosition; // Pass in the variable from GPGPU
7524// uniform sampler2D uCurrentVelocity; // Pass in the variable from GPGPU
7525// uniform sampler2D uCurrentEmissionRate; // Pass in the variable from GPGPU
7526
7527uniform sampler2D uIndex; // Texture with corresponding index
7528uniform float uLastIndexEmitted; // Last emitted index
7529uniform float uParticlesToEmit; // Number of particles to emit on that frame
7530uniform float uTime;
7531
7532void main() {
7533    vec2 vUv = gl_FragCoord.xy / resolution.xy;
7534    float particleIndex = texture(uIndex, vUv).x;
7535    float timeLeft = texture2D( uCurrentPosition, vUv ).w;
7536    float isActive = texture2D( uCurrentEmissionRate, vUv ).g;    // 1. = active, 0. = not active
7537    float timeStart = texture2D( uCurrentEmissionRate, vUv ).b;
7538
7539
7540    // ********** Detect Colision to Create a flag and use it in position **********
7541    // We are doing this here, so
7542
7543    // ********** Emit Particles **********
7544    // X = isSpawning 0.0 or 1.0
7545    // Y = isActive 0.0 or 1.0
7546    // Check if the vertex index is between the first value and the last value
7547    // if (particleIndex >= uLastIndexEmitted && particleIndex < uLastIndexEmitted + uParticlesToEmit) {
7548    //     // Emit a particle by writing 1 to the red channel of the color output
7549    //     // r: 1. == emit the particle
7550    //     // g: 1. == particle is now active
7551    //     timeStart = uTime;
7552    //     gl_FragColor = vec4(1.0, 1.0, timeStart, 1.0);
7553    // } else {
7554    //     // The Particle is either already emitted or not in the range of the particles to emit
7555    //     // Do not emit a particle by writing 0 to the red channel of the color output        
7556    //     gl_FragColor = vec4(0.0, isActive, timeStart, 1.0);
7557    // }
7558    // Determine if the particle is within the emission range
7559    float emitLowerBound = step(uLastIndexEmitted, particleIndex);
7560    float emitUpperBound = step(particleIndex, uLastIndexEmitted + uParticlesToEmit - 1.0);
7561    float emitParticle = emitLowerBound * emitUpperBound; // 1.0 if in range, 0.0 otherwise
7562
7563    // Set timeStart and color
7564    timeStart = mix(timeStart, uTime, emitParticle);
7565    gl_FragColor = vec4(emitParticle, mix(isActive, 1.0, emitParticle), timeStart, 1.0);
7566
7567
7568}
7569`,P8=class extends rl{constructor(e,t){super(),this.type="ParticleEmitter",this.debugMode=!1,this.worldSpace=!0,this.rootObject=null,this.gpuCompute=null,this.positionSimRT=null,this.velocitySimRT=null,this.emissionRateSimRT=null,this.emitterShape=void 0,this.isEmitting=!1,this.hasBeenReset=!1,this.emittedParticlesAmount=0,this.lastEmitTime=0,this.globalTime=0,this.targetFPS=60,this.previousRatio=1,this.lerpFactor=.4,this.particlesAmount=0,this.noiseStrength=0,this.noiseScale=0,this.isBillboardBased=!0,this.simFeaturesDefinition={USE_COLLIDER:!1,USE_ATTRACTOR:!1,USE_VORTEX:!1,USE_SPHERE_COLLIDER:!1,USE_BOX_COLLIDER:!1,USE_FORCE_LOCAL_SPACE:!1,USE_NORMALS:!1,USE_CURL_NOISE:!0,USE_SIMPLEX_NOISE:!1,USE_FBM_NOISE:!1},this.textureLoader=new o9,this.currentWorldPosition=new iv,this.systemQuaternion=new ig,this.worldGravity=new iv(0,0,0),this.directionAxis=new iv(0,0,0),this.colliderV3=new iv(0,0,0),this.colliderQuaternion=new ig(0,0,0,1),this.matrixAutoUpdate=!0,this.renderer=e,this.system=t,this.shared=t.context.shared;let i=t.data;
7569this.material=new P3(i.renderMaterial,t.context),this.material.uniforms={uSize:{value:0},uSizeEnd:{value:0},uColor:{value:i.renderMaterial.color},uColor2:{value:i.renderMaterial.color2},uPosition:{value:new iv(0,0,0)},uEmissionData:{value:new iv(0,0,0)},uTexture:{value:this.defaultTexture},uWorldOffset:{value:new iv(0,0,0)},uWorldQuaternion:{value:new ic(0,0,0,1)},uRandScaleFactor:{value:i.randomScale??0},uRandRotationFactor:{value:i.randomRotation??0},uRotation:{value:i.renderMaterial.spriteRotation[0]??0},uRotationEnd:{value:i.renderMaterial.spriteRotation[1]??0}},this.setTexture(this.material.uniforms,i.renderMaterial.texture),this.init(i)}setTexture(e,t){let i=t.data;if("string"==typeof t){let i=new ih(this.shared.image(t).img);i.needsUpdate=!0,e.uTexture.value=i;return}if("string"!=typeof i){let t=new Image;t.onload=()=>{let i=new ih(t);i.needsUpdate=!0,e.uTexture.value=i};let r=new Blob([i],{type:"image/*"}),s=URL.createObjectURL(r);t.src=s}}updateGeometryAttributes(e,t){let i=function(e){let t=new Float32Array(e*e*2);for(let i=0;i<e;i++)for(let r=0;r<e;r++){let s=i*e+r;t[2*s+0]=i/(e-1),t[2*s+1]=r/(e-1)}return t}(t);this.emitterShape?.positionsAttribute&&e.geometry.setAttribute("ref",new nP(i,2))}applyWorldSpace(){if(!this.system.started||!this.worldSpace||!this.positionSimRT||!this.velocitySimRT)return;let e=this.system;e.getWorldQuaternion(this.systemQuaternion),this.systemQuaternion.invert(),e.getWorldPosition(this.currentWorldPosition),this.material.uniforms.uWorldOffset.value=this.currentWorldPosition,this.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize()),this.positionSimRT.material.uniforms.uWorldOffset.value=this.currentWorldPosition,this.systemQuaternion.invert(),this.positionSimRT.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize()),this.velocitySimRT.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize())}update(e,t){if(!this.gpuCompute||!this.positionSimRT||!this.velocitySimRT||!this.emissionRateSimRT||this.hasBeenReset)return;if(this.checkIfAllParticlesAreDead()&&!this.hasBeenReset){this.reset();return}this.applyWorldSpace(),this.globalTime=e,this.positionSimRT.material.uniforms.uTime.value=e,this.emissionRateSimRT.material.uniforms.uTime.value=e;let i=this.targetFPS/(1e3/t),r=this.previousRatio+(i-this.previousRatio)*this.lerpFactor;this.positionSimRT.material.uniforms.uFPSRatio.value=r,this.previousRatio=r;let s=this.isEmitting?this.GoEmitSomeParticles(e,this.system.data.birthRatePerSec):0;this.emissionRateSimRT.material.uniforms.uLastIndexEmitted.value=this.emittedParticlesAmount,this.emissionRateSimRT.material.uniforms.uParticlesToEmit.value=s,this.material.uniforms.uPosition.value=this.gpuCompute.getCurrentRenderTarget(this.positionSimRT)?.texture,this.system.colliderEntities.length>0&&this.renderColliders(),this.gpuCompute.compute()}renderColliders(){if(!this.velocitySimRT)return;let e=this.system.colliderEntities[0],t=this.simFeaturesDefinition.USE_COLLIDER||this.simFeaturesDefinition.USE_ATTRACTOR||this.simFeaturesDefinition.USE_VORTEX;if(e.destroyedInAction&&t&&this.init(P5({...this.system.data,colliderEntityId:null})),!e||e.destroyedInAction)return;e.getWorldPosition(this.colliderV3),0===this.colliderV3.y&&(this.colliderV3.y=1e-4),this.velocitySimRT.material.uniforms.uColliderPos.value.copy(this.colliderV3);let i=e.data.size;this.colliderV3.fromArray(i),this.velocitySimRT.material.uniforms.uColliderSize.value.copy(this.simFeaturesDefinition.USE_SPHERE_COLLIDER?this.colliderV3.multiplyScalar(.5):this.colliderV3),e.getWorldQuaternion(this.colliderQuaternion),this.velocitySimRT.material.uniforms.uColliderQuaternion.value.copy(this.colliderQuaternion.normalize()),this.velocitySimRT.material.uniforms.uColliderQuaternionInvert.value.copy(this.colliderQuaternion.normalize().invert())}updateState(e){this.velocitySimRT&&this.positionSimRT&&(e.renderMaterial&&this.updateMaterialState(e.renderMaterial),this.updateParticleState(e))}updateVariableState(e,t){if(!this.velocitySimRT||!this.positionSimRT)return;"size"===t[2]&&this.material.updateState({size:[e,this.material.uniforms.uSizeEnd.value]}),"sizeEnd"===t[2]&&this.material.updateState({size:[this.material.uniforms.uSize.value,e]});let i=(e,t)=>{let i=[...this.system.data.shape.size];i[e]=t,this.updateParticleState({shape:{...this.system.data.shape,size:i}})};"shape_size_0"===t[2]&&i(0,e),"shape_size_1"===t[2]&&i(1,e),"shape_size_2"===t[2]&&i(2,e),"speed"===t[2]&&(this.velocitySimRT.material.uniforms.uSpeed.value=e/10),"gravity"===t[2]&&this.worldGravity.set(0,e/100,0),"noiseStrength"===t[2]&&(this.noiseStrength=e,this.velocitySimRT.material.uniforms.uNoiseStrength.value=this.noiseStrength),"n
7569oiseScale"===t[2]&&(this.noiseScale=e,this.velocitySimRT.material.uniforms.uNoiseScale.value=this.noiseScale),"direction_x"===t[2]&&(this.directionAxis=this.getDirectionAxis([Number(e),this.system.data.direction[1],this.system.data.direction[2]])),"direction_y"===t[2]&&(this.directionAxis=this.getDirectionAxis([this.system.data.direction[0],Number(e),this.system.data.direction[2]])),"direction_z"===t[2]&&(this.directionAxis=this.getDirectionAxis([this.system.data.direction[0],this.system.data.direction[1],Number(e)]))}updateMaterialState(e){this.material.updateState({...e,size:e.size?[Number(this.shared.getVariable(e.size[0],[this.uuid,"particles","size"])),Number(this.shared.getVariable(e.size[1],[this.uuid,"particles","sizeEnd"]))]:[0,0]}),e.texture&&(this.setTexture(this.material.uniforms,e.texture),this.material.needsUpdate=!0)}updateParticleState(e){if(!(!this.positionSimRT||!this.velocitySimRT)){if(this.shouldReInitGPUCompute(e)&&this.init(P5(this.system.data)),void 0!==e.life&&(this.positionSimRT.material.uniforms.uMaxLifeTime.value=e.life),void 0!==e.speed&&(this.velocitySimRT.material.uniforms.uSpeed.value=Number(this.shared.getVariable(e.speed,[this.uuid,"particles","speed"]))/10),void 0!==e.collisionBounce&&(this.velocitySimRT.material.uniforms.uBounce.value=e.collisionBounce),void 0!==e.noiseStrength&&(this.noiseStrength=Number(this.shared.getVariable(e.noiseStrength,[this.uuid,"particles","noiseStrength"])),this.velocitySimRT.material.uniforms.uNoiseStrength.value=this.noiseStrength),void 0!==e.noiseScale&&(this.noiseScale=Number(this.shared.getVariable(e.noiseScale,[this.uuid,"particles","noiseScale"])),this.velocitySimRT.material.uniforms.uNoiseScale.value=this.noiseScale),void 0!==e.noiseSeed&&(this.velocitySimRT.material.uniforms.uNoiseSeed.value=e.noiseSeed),void 0!==e.randomMass&&(this.velocitySimRT.material.uniforms.uRandomMassFactor.value=e.randomMass),e.renderMaterial?.size!==void 0){let t=this.shared.getVariable(e.renderMaterial.size[0],[this.uuid,"particles","size"]);this.velocitySimRT.material.uniforms.particleSize.value=Number(t)}if(e.renderMaterial?.spriteRotation!==void 0&&(this.material.uniforms.uRotation.value=e.renderMaterial.spriteRotation[0],this.material.uniforms.uRotationEnd.value=e.renderMaterial.spriteRotation[1]),void 0!==e.shape){let t=e.shape.size??this.system.data.shape.size,i=[Number(this.shared.getVariable(t[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(t[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(t[2],[this.uuid,"particles","shape_size_2"]))],r={...P5(this.system.data).shape,size:i};this.emitterShape?.applyToShader(this.positionSimRT.material.uniforms,r)}if(void 0!==e.gravity&&(this.worldGravity.set(0,Number(this.shared.getVariable(this.system.data.gravity,[this.uuid,"particles","gravity"]))/100,0),this.velocitySimRT.material.uniforms.uGravity={value:this.worldGravity}),void 0!==e.direction){let t=this.getDirectionFromVariable(e.direction);this.directionAxis=this.getDirectionAxis(t),this.velocitySimRT.material.uniforms.uDirectionsAxis.value=this.directionAxis}void 0!==e.randomRotation&&(this.material.uniforms.uRandRotationFactor.value=e.randomRotation),void 0!==e.randomScale&&(this.material.uniforms.uRandScaleFactor.value=e.randomScale)}}updateForceFieldParameters(e){this.velocitySimRT&&(void 0!==e.forceIntensity&&(this.velocitySimRT.material.uniforms.uForceIntensity.value=e.forceIntensity),void 0===e.forceDambing||(this.velocitySimRT.material.uniforms.uForceDamping.value=e.forceDambing))}getDirectionAxis(e){let t=[Number(e[0])*tY.DEG2RAD,Number(e[1])*tY.DEG2RAD,Number(e[2])*tY.DEG2RAD],i=new i3(t[0],t[1],t[2],"XYZ");return this.directionAxis.set(0,1,0).applyEuler(i).normalize(),this.velocitySimRT&&(this.velocitySimRT.material.uniforms.uDirectionsAxis.value=this.directionAxis),this.directionAxis}shouldReInitGPUCompute(e){let{birthRatePerSec:t,rootObjectType:i,colliderEntityId:r,shape:s,emitTimeDuration:a,emitTimeCycle:o,life:l,directionMode:h,noiseType:c}=e;return void 0!==t||void 0!==i||r||null===r||void 0!==o||void 0!==s||void 0!==l||void 0!==a||void 0!==h||void 0!==c}init(e){this.dispose(),this.particlesAmount=this.getMaxParticlesAmount({birthRatePerSecond:e.b
7569irthRatePerSec,particleMaxLifeTime:e.life,loopDuration:"infinity"===e.emitTimeCycle?0:e.emitTimeDuration}),this.particlesAmount>1e5&&(console.warn("The maximum number of particles is limited to 100000."),this.particlesAmount=1e5),this.emitterShape=this.createShape(e.shape,this.particlesAmount);let t=setInterval(()=>{if(this.emitterShape){if(isNaN(this.emitterShape.positionsTexture.source.data.data[0])){this.init(e);return}clearInterval(t)}},100);if(!this.emitterShape)return;let i=new PU(this.emitterShape.textureSize,this.emitterShape.textureSize,this.renderer),r=this.updateSimulationDefinition(e),s=i.addVariable("uCurrentPosition",r+PW,this.emitterShape.positionsTexture),a=i.addVariable("uCurrentVelocity",r+PQ,this.emitterShape.directionsTexture),o=i.addVariable("uCurrentEmissionRate",P6,function(e){let t=new Float32Array(4*e*e);for(let i=0;i<e*e;i++)t[4*i]=0,t[4*i+1]=0,t[4*i+2]=0,t[4*i+3]=0;let i=new nM(t,e,e,1023,1015);return i.needsUpdate=!0,i}(this.emitterShape.textureSize));i.setVariableDependencies(s,[s,a,o]),i.setVariableDependencies(a,[s,a,o]),i.setVariableDependencies(o,[s,a,o]);let l=function({size:e}){let t=new Float32Array(4*e*e);for(let i=0;i<e*e;i++)t[4*i]=i,t[4*i+1]=0,t[4*i+2]=0,t[4*i+3]=0;let i=new nM(t,e,e,1023,1015);return i.needsUpdate=!0,i}({size:this.emitterShape.textureSize}),h={uOriginalPosition:{value:this.emitterShape.positionsTexture},uWorldOffset:{value:new iv(0,0,0)},uWorldQuaternion:{value:new ic(0,0,0,1)},uTime:{value:0},uFPSRatio:{value:1},uMaxLifeTime:{value:e.life},uEmitterSize:{value:new iv(Number(this.shared.getVariable(e.shape.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(e.shape.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(e.shape.size[2],[this.uuid,"particles","shape_size_2"])))},particleSize:{value:0}};s.material.uniforms=h;let c=this.getDirectionFromVariable(e.direction);this.directionAxis=this.getDirectionAxis(c),this.worldGravity.set(0,Number(this.shared.getVariable(this.system.data.gravity,[this.uuid,"particles","gravity"]))/100,0),this.noiseStrength=Number(this.shared.getVariable(e.noiseStrength,[this.uuid,"particles","noiseStrength"])),this.noiseScale=Number(this.shared.getVariable(e.noiseScale,[this.uuid,"particles","noiseScale"]));let d=e.colliderEntityId&&this.system.getColliderData(e.colliderEntityId),u={uOriginalPosition:{value:this.emitterShape.positionsTexture},uDirections:{value:this.emitterShape.directionsTexture},uDirectionsAxis:{value:this.directionAxis},uWorldQuaternion:{value:new ic(0,0,0,1)},uColliderPos:{value:new iv(0,0,0)},uColliderSize:{value:new iv(0,0,0)},uForceIntensity:{value:d?d.forceIntensity:0},uForceDamping:{value:d?d.forceDambing:0},uColliderQuaternion:{value:new ic(0,0,0,1)},uColliderQuaternionInvert:{value:new ic(0,0,0,1)},particleSize:{value:0},uGravity:{value:this.worldGravity},uNoiseStrength:{value:this.noiseStrength},uNoiseScale:{value:this.noiseScale},uNoiseSeed:{value:e.noiseSeed},uRandomMassFactor:{value:e.randomMass},uBounce:{value:e.collisionBounce},uSpeed:{value:Number(this.shared.getVariable(e.speed,[this.uuid,"particles","speed"]))/10}};a.material.uniforms=u,o.material.uniforms={uIndex:{value:l},uTime:{value:0},uLastIndexEmitted:{value:0},uParticlesToEmit:{value:0}};let p=[Number(this.shared.getVariable(e.shape.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(e.shape.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(e.shape.size[2],[this.uuid,"particles","shape_size_2"]))],f={...P5(this.system.data).shape,size:p};this.emitterShape.applyToShader(s.material.uniforms,f),i.init(),this.gpuCompute=i,this.positionSimRT=s,this.velocitySimRT=a,this.emissionRateSimRT=o,this.rootObject=this.createPrimaryEmitter(this.emitterShape.textureSize),this.add(this.rootObject),this.material.needsUpdate=!0}getDirectionFromVariable(e){return[Number(this.shared.getVariable(e[0],[this.uuid,"particles","direction_x"])),Number(this.shared.getVariable(e[1],[this.uuid,"particles","direction_y"])),Number(this.shared.getVariable(e[2],[this.uuid,"particles","direction_z"]))]}updateSimulationDefinition(e){if(this.simFeaturesDefinition.USE_COLLIDER=!1,this.simFeaturesDefinition.USE_ATTRACTOR=!1,this.simFeaturesDefinition.USE_VORTEX=!1,this.simFeaturesDefinition.USE_SPHERE_COLLIDER=!1,this.simFeaturesDefinition.USE_BOX_COLLIDER=!1,this.simFeaturesDefinition.USE_FORCE_LOCAL_SPACE=!1,this.simFeaturesDefinition.USE_NORMALS=!1,this.simFeaturesDefinition.USE_CURL_NOISE=!1,this.simFeaturesDefinition.USE_SIMPLEX_NOISE=!1,this.simFeaturesDefinition.USE_FBM_NOISE=!1,e.colliderEntityId&&this.system.colliderEntities.length>0){let t=this.system.getColliderData(e.colliderEntityId);switch(t?.forceType){case"attractor":this.simFeaturesDefinition.USE_ATTRACTOR=!0;break;case"collider":this.simFeaturesDefinition.USE_COLLIDER=!0;break;case"vortex":this.simFeaturesDefinition.USE_VORTEX=!0}let i=t?.colliderType;"sphere"===i&&(this.simFeaturesDefinition.USE_SPHERE_COLLIDER=!0),"box"===i&&(this.simFeaturesDefinition.USE_BOX_COLLIDER=!0),t?.forceRange==="helper"&&(this.simFeaturesDefinition.USE_FORCE_LOCAL_SPACE=!0)}"normals"===e.directionMode&&(this.simFeaturesDefinition.USE_NORMALS=!0),"curl"===e.noiseType&&(this.simFeaturesDefinition.USE_CURL_NOISE=!0),"simplex"===e.n
7569oiseType&&(this.simFeaturesDefinition.USE_SIMPLEX_NOISE=!0),"fbm"===e.noiseType&&(this.simFeaturesDefinition.USE_FBM_NOISE=!0);let t="";for(let[e,i]of Object.entries(this.simFeaturesDefinition))i&&(t+=`#define ${e}
7570`);return t}createShape(e,t){this.emitterShape&&this.emitterShape.dispose();let i=new iv(Number(this.shared.getVariable(e.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(e.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(e.size[2],[this.uuid,"particles","shape_size_2"])));if("MeshEmitterShape"!==e.type)return new P4(i,t,e.type);{let r=null;return this.system.context.scene.traverseEntity(t=>{t.uuid===e.fromMeshId&&(r=t)}),r?new P4(i,t,e.type,r):new P4(i,t,"SphereEmitterShape")}}createPrimaryEmitter(e){let t;return t=new nB(new sc(1,1,1),this.material,e*e),this.updateGeometryAttributes(t,e),this.material.needsUpdate=!0,t.onBeforeRender=()=>{this.applyWorldSpace()},t}getMaxParticlesAmount({birthRatePerSecond:e,particleMaxLifeTime:t,loopDuration:i=0}){return Math.ceil(e*(t+i))}dispose(){this.gpuCompute&&(this.rootObject?.parent?.remove(this.rootObject),this.gpuCompute.dispose(),this.material.nodeMaterialDispose(),this.emitterShape?.dispose())}GoEmitSomeParticles(e,t){let i=e-this.lastEmitTime,r=1/t;if(i>=r){let t=Math.max(1,Math.floor(i/r));return this.lastEmitTime=e,this.emittedParticlesAmount+t>this.particlesAmount&&(this.emittedParticlesAmount=0),this.emittedParticlesAmount+=t,t}return 0}checkIfAllParticlesAreDead(){return this.lastEmitTime+this.system.data.life+1<this.globalTime}reset(){this.hasBeenReset=!0,this.lastEmitTime=0,this.emittedParticlesAmount=0,this.gpuCompute&&this.init(P5(this.system.data))}startEmitting(e){this.isEmitting=!0,this.hasBeenReset=!1,this.lastEmitTime=e}stopEmitting(){this.isEmitting=!1}},P9=class extends SP{constructor(e,t,i){super(e,t),this.type="ParticleSystem",this.geometry=new rz,this.actualTime=0,this.currentLoopTime=0,this.started=!1,this.stopped=!1,this.timeoutId=void 0,this.isFrozen=!1,this.isIdle=!0,this.emitter=null,this.colliderEntities=[],this.renderer=null,this.isPreWarm=!1,this._hasOnAfterRenderBeenCalled=!1,this.onAfterRender=e=>{this._hasOnAfterRenderBeenCalled||(this._hasOnAfterRenderBeenCalled=!0,this.init(e))},this.context=i,this.data={...t,...P5(t)},this.geometry.setAttribute("position",new rT([],3)),this.material=new rS({colorWrite:!1}),this.frustumCulled=!1}init(e){this.renderer=e,this.emitter=new P8(e,this),this.add(this.emitter),this.updateParticleState(this.data)}update(e){if(!this.isReady||!this.started||this.isFrozen||this.isIdle)return;this.actualTime+=e,this.stopped||(this.currentLoopTime+=e);let t="one_time"===this.data.emitTimeCycle;if(("loop"===this.data.emitTimeCycle||t)&&this.currentLoopTime>1e3*this.data.emitTimeDuration&&(this.stopped||(this.stop(),t||this.start(1e3*this.data.emitTimeDelay))),this.emitter&&this.started){let t=this.actualTime/1e3;this.emitter.update(t,e)}this.scale.set(1,1,1),this.updateMatrix()}isReady(){return!!this.emitter}hasCollider(e){return this.colliderEntities.some(t=>t.identity===e)}getColliderData(e){let t=this.colliderEntities.find(t=>t.identity===e);return t?t.data:null}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),pX(e.path,["renderMaterial"])&&this.updateParticleState({renderMaterial:{...this.data.renderMaterial,...p$.drop(e,1).props}}),pX(e.path,["shape"])&&this.updateParticleState({shape:{...this.data.shape,...p$.drop(e,1).props}})}updateState(e,t){super.updateState(e,t),this.updateParticleState(e)}updateParticleState(e){if(this.emitter){if(void 0!==e.colliderEntityId&&null!==e.colliderEntityId){let t=this.context.scene.find(e.colliderEntityId);this.colliderEntities=t?[t]:[]}null===e.colliderEntityId&&(this.colliderEntities=[]),this.emitter.updateState(e),e.emitTimeCycle&&this.started&&this.start()}}updateFromColliderEntity(e){this.emitter&&(this.emitter.updateForceFieldParameters(e),this.stop(),this.start())}start(e=0){if(this.currentLoopTime=0,e){this.timeoutId=window.setTimeout(()=>{this.start(0)},e);return}this.started=!0,this.stopped=!1,this.isFrozen=!1,this.emitter?.startEmitting(this.actualTime/1e3)}froze(){this.isFrozen=!0}unFroze(){this.isFrozen=!1}stop(){this.stopped=!0,this.currentLoopTime=0,this.emitter?.stopEmitting(),clearTimeout(this.timeoutId)}reset(){this.started=!1,this.stopped=!1,this.emitter?.reset()}wakeUp(){this.isIdle=!1}sleep(){this.isIdle=!0,this.reset()}},P7=function(){try{let e=window.location.href;if(e.includes("reducesubdiv=")){let t=e.indexOf("reducesubdiv=")+13;return parseInt(e.slice(t,t+1))}}catch{}}();function De(e,t,i){return console.assert(void 0!==t.type),"Mesh"===t.type?(void 0!==P7&&(t?.geometry?.subdivisions??0)>P7&&(console.log("reducing subdivisions",t.name,t.geometry.subdivisions),t.geometry.subdivisions=P7),"TextGeometry"===t.geometry.type?new MK(e,t,i):"InputGeometry"===t.geometry.type?new PL(e,t,i):"SubdivGeometry"===t.geometry.type?new MM(e,t,i):"PathGeometry"===t.geometry.type?new PR(e,t,i):"VectorGeometry"===t.geometry.type?new PO(e,t,i):"BooleanGeometry"===t.geometry.type?new Eb(e,t,i):"ShapeBlendGeometry"===t.geometry.type?new Do(e,t,i):"UIGeometry"===t.geometry.type?new Pk(e,t,i):new Mb(e,t,i)):"Empty"===t.type?new EO(e,t):"Particle"===t.type?new P9(e,t,i):"ParticleCollider"===t.type?new ER(e,t,i):"Splat"===t.type?new EO(e,t):"Bone"===t.type?new PN(e,t):"Page"===t.type?new PD(e,t,i):"PointLight"===t.type?new PI(e,t,i):"SpotLight"===t.type?new TU(e,t,i):"DirectionalLight"===t.type?new Tz(e,t,i):"Component"===t.type||"Instance"===t.type?new PB(e,t,i):gc.is(t.type)?new Eg(e,t):(console.error(t),new EO(e,t))}xP.createEntity=De,xP.changeEntityProptotype=function(e,t,i){let r=De(e.identity,t,i),s=e.children,a=e.attachedPaths,o=e.parent,l=e.component,h=e.instances,c=e.overrideData,d=e.uuid,u=e.stateSelection;
7570for(let t of(e.dispose(),Object.keys(e)))delete e[t];for(let t of(Object.setPrototypeOf(e,Object.getPrototypeOf(r)),Object.keys(r)))e[t]=r[t];e.children=[...e.children,...s],e.attachedPaths=a,e.parent=o,e.component=l,e.instances=h,e.uuid=d,e.overrideData=c,e.updateState(e.data,i),u&&e.changeSelectedState(u,i),e.resetBBoxNeedsUpdate()},xP.Cloner=M9;var Dt=new rz;Dt.setAttribute("position",new rM(new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),3));var Di=class extends oB{constructor(e){super({...e,depthTest:!1,depthWrite:!1,glslVersion:tR,vertexShader:`
7571				precision highp float;
7572				in vec3 position;
7573				void main() {
7574					gl_Position = vec4(position, 1);
7575				}
7576			`})}customProgramCacheKey(){return""}},Dr=new r6,Ds=class{constructor(){this.pyramidPassScene=new nb,this.pyramidPassMaterial=new Di({name:"PyramidPass"}),this.pyramidPassUniforms={inputTexture:{value:void 0},inputWidth:{value:0},inputHeight:{value:0},inputShiftX:{value:0},outputShiftX:{value:0}},this.pyramidTopLevelReadPixelBuffer=new Float32Array(4);let e=`
7577			precision highp float;
7578			precision highp sampler2D;
7579			layout(location = 0) out vec4 pc_FragColor;
7580			uniform sampler2D inputTexture;
7581			uniform float inputWidth;
7582			uniform float inputHeight;
7583			uniform float inputShiftX;
7584			uniform float outputShiftX;
7585			const vec2 half_unit_coord = vec2(0.5);
7586			const vec4 one = vec4(1.0);
7587			void main() {
7588				vec2 inputSize = vec2(inputWidth, inputHeight);
7589				vec2 input_pixel_uv = 1. / inputSize;
7590				vec2 coord = gl_FragCoord.xy - half_unit_coord;
7591				coord.x -= outputShiftX;
7592				coord = coord * 2. + half_unit_coord;
7593				coord.x += inputShiftX;
7594
7595				// sample bottom left corner
7596				vec2 input_uv = coord / inputSize;
7597				float bl = texture(inputTexture, input_uv).r;
7598
7599				// sample bottom right corner
7600				input_uv.x += input_pixel_uv.x;
7601				float br = texture(inputTexture, input_uv).r;
7602
7603				// sample top right corner
7604				input_uv.y += input_pixel_uv.y;
7605				float tr = texture(inputTexture, input_uv).r;
7606
7607				// sample top left corner
7608				input_uv.x -= input_pixel_uv.x;
7609				float tl = texture(inputTexture, input_uv).r;
7610
7611				pc_FragColor.a = bl;
7612				pc_FragColor.b = pc_FragColor.a + br;
7613				pc_FragColor.g = pc_FragColor.b + tr;
7614				pc_FragColor.r = pc_FragColor.g + tl; 
7615			}
7616		`;this.pyramidPassMaterial.fragmentShader=e,this.pyramidPassMaterial.uniforms=this.pyramidPassUniforms,this.pyramidPassMaterial.depthTest=!1,this.pyramidPassMaterial.depthWrite=!1;let t=new rK(Dt,this.pyramidPassMaterial);t.frustumCulled=!1,this.pyramidPassScene.add(t)}renderPyramid(e,t,i,r,s){new lz().min.setScalar(0);let a=t.length-1,o=new ic;i.getViewport(o),this.pyramidPassUniforms.inputShiftX.value=0,this.pyramidPassUniforms.outputShiftX.value=0;let l=a-1;for(let a=l;a>=0;a--){let o=a%2==l%2?s[0]:s[1],h=a===l?r:a%2==l%2?s[1]:s[0];this.pyramidPassUniforms.inputTexture.value=Array.isArray(h.texture)?h.texture[1]:h.texture,this.pyramidPassUniforms.inputWidth.value=h.width,this.pyramidPassUniforms.inputHeight.value=h.height,i.setRenderTarget(o);let c=t[a],d=i.getPixelRatio();i.setViewport(this.pyramidPassUniforms.outputShiftX.value/d,0,c/d,c/d),2===a&&e%2!=0&&i.setViewport(this.pyramidPassUniforms.outputShiftX.value/d,0,3/d,3/d),i.render(this.pyramidPassScene,Dr);let u=this.pyramidPassUniforms.inputShiftX.value;this.pyramidPassUniforms.inputShiftX.value=this.pyramidPassUniforms.outputShiftX.value,this.pyramidPassUniforms.outputShiftX.value=u,a<l&&(this.pyramidPassUniforms.outputShiftX.value+=t[a+1])}i.setViewport(o);let h=t.length%2==0?0:1;return i.readRenderTargetPixelsAsync(s[h],s[h].width-1,0,1,1,this.pyramidTopLevelReadPixelBuffer).then(()=>this.pyramidTopLevelReadPixelBuffer[0])}},Da={shapeInput:()=>`
7617			const float posRowCoord = 0.1;  // vec4: px py pz opType
7618			const float quatRowCoord = 0.3;  // vec4: qx qy qz qw
7619			const float param1RowCoord = 0.5;// vec4: type param1 param2 param3
7620			const float param2RowCoord = 0.7;// vec4: blendRange roundness scale param4
7621			const float colorRowCoord = 0.9; // vec4: r g b a
7622			uniform sampler2D shapesDataTexture;
7623			vec4 shapePos(float iin) { 
7624				vec4 r = texture(shapesDataTexture, vec2(iin, posRowCoord));
7625				return r;
7626			}
7627			vec4 shapeQuat(float iin) {
7628				vec4 r = texture(shapesDataTexture, vec2(iin, quatRowCoord));
7629				return r;
7630			}
7631			vec4 shapeParams1(float iin) {
7632				vec4 r = texture(shapesDataTexture, vec2(iin, param1RowCoord));
7633				return r;
7634			}
7635			vec4 shapeParams2(float iin) {
7636				vec4 r = texture(shapesDataTexture, vec2(iin, param2RowCoord));
7637				return r;
7638			}
7639			vec4 shapeColor(float iin) {
7640				vec4 r = texture(shapesDataTexture, vec2(iin, colorRowCoord));
7641				return r;
7642			}
7643		`,getxyzi:`
7644			// this code must complement lookup
7645			float xi = mod(gl_FragCoord.x - 0.5, VOXEL_RESOLUTION);
7646			float yi = mod(gl_FragCoord.y - 0.5, VOXEL_RESOLUTION);
7647			float zi = floor((gl_FragCoord.x - 0.5) * INV_VOXEL_RESOLUTION) + floor((gl_FragCoord.y - 0.5) * INV_VOXEL_RESOLUTION) * Z_LAYERS_PER_ROW;
7648		`,lookup:`
7649			uniform sampler2D potentialPassTexture;
7650			uniform sampler2D voxelPassTexture; // includes normal (in xyz) and key (in w)
7651			
7652			// box or marching cube lookup value in value texture, integer box coord inputs
7653			// this code must complement codebits.getxyzi
7654			vec4 look(float xi, float yi, float zi, sampler2D rt) {// range 0 .. numv etc
7655				vec2 uv = vec2(
7656					mod(zi, Z_LAYERS_PER_ROW) + (xi + 0.5) / VOXEL_RESOLUTION,
7657					floor(zi / Z_LAYERS_PER_ROW) + (yi + 0.5) / VOXEL_RESOLUTION
7658				); 
7659				uv /= Z_LAYERS_PER_ROW;
7660				return texture(rt, uv);
7661			}
7662		`,getpart:`
7663			float getpart(inout float a, float b) {
7664				float t = floor(a/b);
7665				float r = a - t*b;
7666				a = t;
7667				return r;
7668			}
7669		`,triTable:new Float32Array([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,1,1,8,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,2,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,0,10,2,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,2,9,9,2,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,2,8,10,2,8,9,10,-1,-1,-1,-1,-1,-1,-1,2,11,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,11,0,0,11,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,9,1,11,3,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,11,1,11,9,1,11,8,9,-1,-1,-1,-1,-1,-1,-1,1,10,3,3,10,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,10,0,10,8,0,10,11,8,-1,-1,-1,-1,-1,-1,-1,0,9,3,9,11,3,9,10,11,-1,-1,-1,-1,-1,-1,-1,10,8,9,11,8,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,7,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,3,4,4,3,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,1,0,7,4,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,1,4,1,7,4,1,3,7,-1,-1,-1,-1,-1,-1,-1,10,2,1,7,4,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,4,3,4,0,3,10,2,1,-1,-1,-1,-1,-1,-1,-1,10,2,9,2,0,9,7,4,8,-1,-1,-1,-1,-1,-1,-1,9,10,2,7,9,2,3,7,2,4,9,7,-1,-1,-1,-1,7,4,8,2,11,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,4,11,4,2,11,4,0,2,-1,-1,-1,-1,-1,-1,-1,1,0,9,7,4,8,11,3,2,-1,-1,-1,-1,-1,-1,-1,11,7,4,11,4,9,2,11,9,1,2,9,-1,-1,-1,-1,1,10,3,10,11,3,4,8,7,-1,-1,-1,-1,-1,-1,-1,10,11,1,11,4,1,4,0,1,4,11,7,-1,-1,-1,-1,8,7,4,11,0,9,10,11,9,3,0,11,-1,-1,-1,-1,11,7,4,9,11,4,10,11,9,-1,-1,-1,-1,-1,-1,-1,4,5,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,5,9,3,8,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,5,0,0,5,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,5,8,5,3,8,5,1,3,-1,-1,-1,-1,-1,-1,-1,10,2,1,4,5,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,0,3,10,2,1,5,9,4,-1,-1,-1,-1,-1,-1,-1,10,2,5,2,4,5,2,0,4,-1,-1,-1,-1,-1,-1,-1,5,10,2,5,2,3,4,5,3,8,4,3,-1,-1,-1,-1,4,5,9,11,3,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,11,0,11,8,0,5,9,4,-1,-1,-1,-1,-1,-1,-1,4,5,0,5,1,0,11,3,2,-1,-1,-1,-1,-1,-1,-1,5,1,2,8,5,2,11,8,2,5,8,4,-1,-1,-1,-1,11,3,10,3,1,10,4,5,9,-1,-1,-1,-1,-1,-1,-1,5,9,4,1,8,0,1,10,8,10,11,8,-1,-1,-1,-1,0,4,5,11,0,5,10,11,5,3,0,11,-1,-1,-1,-1,8,4,5,10,8,5,11,8,10,-1,-1,-1,-1,-1,-1,-1,8,7,9,9,7,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,3,9,3,5,9,3,7,5,-1,-1,-1,-1,-1,-1,-1,8,7,0,7,1,0,7,5,1,-1,-1,-1,-1,-1,-1,-1,3,5,1,7,5,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,7,9,7,5,9,2,1,10,-1,-1,-1,-1,-1,-1,-1,2,1,10,0,5,9,0,3,5,3,7,5,-1,-1,-1,-1,2,0,8,5,2,8,7,5,8,2,5,10,-1,-1,-1,-1,5,10,2,3,5,2,7,5,3,-1,-1,-1,-1,-1,-1,-1,5,9,7,9,8,7,2,11,3,-1,-1,-1,-1,-1,-1,-1,7,5,9,2,7,9,0,2,9,11,7,2,-1,-1,-1,-1,11,3,2,8,1,0,8,7,1,7,5,1,-1,-1,-1,-1,1,2,11,7,1,11,5,1,7,-1,-1,-1,-1,-1,-1,-1,8,5,9,7,5,8,3,1,10,11,3,10,-1,-1,-1,-1,0,7,5,9,0,5,0,11,7,10,0,1,0,10,11,-1,0,10,11,3,0,11,0,5,10,7,0,8,0,7,5,-1,5,10,11,5,11,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,6,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,0,6,10,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,0,9,6,10,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,1,8,9,1,6,10,5,-1,-1,-1,-1,-1,-1,-1,5,6,1,1,6,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,6,1,6,2,1,8,0,3,-1,-1,-1,-1,-1,-1,-1,5,6,9,6,0,9,6,2,0,-1,-1,-1,-1,-1,-1,-1,8,9,5,2,8,5,6,2,5,8,2,3,-1,-1,-1,-1,11,3,2,5,6,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,0,11,0,2,11,5,6,10,-1,-1,-1,-1,-1,-1,-1,9,1,0,11,3,2,6,10,5,-1,-1,-1,-1,-1,-1,-1,6,10,5,2,9,1,2,11,9,11,8,9,-1,-1,-1,-1,11,3,6,3,5,6,3,1,5,-1,-1,-1,-1,-1,-1,-1,11,8,0,5,11,0,1,5,0,6,11,5,-1,-1,-1,-1,6,11,3,6,3,0,5,6,0,9,5,0,-1,-1,-1,-1,9,5,6,11,9,6,8,9,11,-1,-1,-1,-1,-1,-1,-1,6,10,5,8,7,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,3,4,3,7,4,10,5,6,-1,-1,-1,-1,-1,-1,-1,0,9,1,6,10,5,7,4,8,-1,-1,-1,-1,-1,-1,-1,5,6,10,7,9,1,3,7,1,4,9,7,-1,-1,-1,-1,2,1,6,1,5,6,8,7,4,-1,-1,-1,-1,-1,-1,-1,5,2,1,6,2,5,4,0,3,7,4,3,-1,-1,-1,-1,7,4,8,5,0,9,5,6,0,6,2,0,-1,-1,-1,-1,9,3,7,4,9,7,9,2,3,6,9,5,9,6,2,-1,2,11,3,4,8,7,5,6,10,-1,-1,-1,-1,-1,-1,-1,6,10,5,2,7,4,0,2,4,11,7,2,-1,-1,-1,-1,9,1,0,8,7,4,11,3,2,6,10,5,-1,-1,-1,-1,1,2,9,2,11,9,11,4,9,4,11,7,6,10,5,-1,7,4,8,5,11,3,1,5,3,6,11,5,-1,-1,-1,-1,11,1,5,6,11,5,11,0,1,4,11,7,11,4,0,-1,9,5,0,5,6,0,6,3,0,3,6,11,7,4,8,-1,9,5,6,11,9,6,9,7,4,9,11,7,-1,-1,-1,-1,9,4,10,10,4,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,10,4,10,9,4,3,8,0,-1,-1,-1,-1,-1,-1,-1,1,0,10,0,6,10,0,4,6,-1,-1,-1,-1,-1,-1,-1,1,3,8,6,1,8,4,6,8,10,1,6,-1,-1,-1,-1,9,4,1,4,2,1,4,6,2,-1,-1,-1,-1,-1,-1,-1,8,0,3,9,2,1,9,4,2,4,6,2,-1,-1,-1,-1,4,2,0,6,2,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,8,4,2,8,6,2,4,-1,-1,-1,-1,-1,-1,-1,9,4,10,4,6,10,3,2,11,-1,-1,-1,-1,-1,-1,-1,2,8,0,11,8,2,10,9,4,6,10,4,-1,-1,-1,-1,2,11,3,6,1,0,4,6,0,10,1,6,-1,-1,-1,-1,1,4,6,10,1,6,1,8,4,11,1,2,1,11,8,-1,4,6,9,6,3,9,3,1,9,3,6,11,-1,-1,-1,-1,1,11,8,0,1,8,1,6,11,4,1,9,1,4,6,-1,6,11,3,0,6,3,4,6,0,-1,-1,-1,-1,-1,-1,-1,8,4,6,8,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,10,7,10,8,7,10,9,8,-1,-1,-1,-1,-1,-1,-1,3,7,0,7,10,0,10,9,0,10,7,6,-1,-1,-1,-1,7,6,10,7,10,1,8,7,1,0,8,1,-1,-1,-1,-1,7,6,10,1,7,10,3,7,1,-1,-1,-1,-1,-1,-1,-1,6,2,1,8,6,1,9,8,1,7,6,8,-1,-1,-1,-1,9,6,2,1,9,2,9,7,6,3,9,0,9,3,7,-1,0,8,7,6,0,7,2,0,6,-1,-1,-1,-1,-1,-1,-1,2,3,7,2,7,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,3,2,8,6,10,9,8,10,7,6,8,-1,-1,-1,-1,7,0,2,11,7,2,7,9,0,10,7,6,7,10,9,-1,0,8,1,8,7,1,7,10,1,10,7,6,11,3,2,-1,1,2,11,7,1,11,1,6,10,1,7,
76696,-1,-1,-1,-1,6,9,8,7,6,8,6,1,9,3,6,11,6,3,1,-1,1,9,0,7,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,7,6,0,7,0,11,3,0,6,11,-1,-1,-1,-1,6,11,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,6,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,0,3,6,7,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,1,0,6,7,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,1,8,1,3,8,6,7,11,-1,-1,-1,-1,-1,-1,-1,2,1,10,7,11,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,2,1,8,0,3,7,11,6,-1,-1,-1,-1,-1,-1,-1,0,9,2,9,10,2,7,11,6,-1,-1,-1,-1,-1,-1,-1,7,11,6,3,10,2,3,8,10,8,9,10,-1,-1,-1,-1,3,2,7,7,2,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,0,7,0,6,7,0,2,6,-1,-1,-1,-1,-1,-1,-1,6,7,2,7,3,2,9,1,0,-1,-1,-1,-1,-1,-1,-1,2,6,1,6,8,1,8,9,1,6,7,8,-1,-1,-1,-1,6,7,10,7,1,10,7,3,1,-1,-1,-1,-1,-1,-1,-1,6,7,10,10,7,1,7,8,1,8,0,1,-1,-1,-1,-1,7,3,0,10,7,0,9,10,0,7,10,6,-1,-1,-1,-1,10,6,7,8,10,7,9,10,8,-1,-1,-1,-1,-1,-1,-1,4,8,6,6,8,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,6,3,6,0,3,6,4,0,-1,-1,-1,-1,-1,-1,-1,11,6,8,6,4,8,1,0,9,-1,-1,-1,-1,-1,-1,-1,6,4,9,3,6,9,1,3,9,6,3,11,-1,-1,-1,-1,4,8,6,8,11,6,1,10,2,-1,-1,-1,-1,-1,-1,-1,10,2,1,11,0,3,11,6,0,6,4,0,-1,-1,-1,-1,8,11,4,11,6,4,9,2,0,9,10,2,-1,-1,-1,-1,3,9,10,2,3,10,3,4,9,6,3,11,3,6,4,-1,3,2,8,2,4,8,2,6,4,-1,-1,-1,-1,-1,-1,-1,2,4,0,2,6,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,9,1,4,3,2,6,4,2,8,3,4,-1,-1,-1,-1,4,9,1,2,4,1,6,4,2,-1,-1,-1,-1,-1,-1,-1,3,1,8,1,6,8,6,4,8,1,10,6,-1,-1,-1,-1,0,1,10,6,0,10,4,0,6,-1,-1,-1,-1,-1,-1,-1,3,6,4,8,3,4,3,10,6,9,3,0,3,9,10,-1,4,9,10,4,10,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,9,4,11,6,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,0,5,9,4,6,7,11,-1,-1,-1,-1,-1,-1,-1,1,0,5,0,4,5,11,6,7,-1,-1,-1,-1,-1,-1,-1,6,7,11,4,3,8,4,5,3,5,1,3,-1,-1,-1,-1,4,5,9,2,1,10,11,6,7,-1,-1,-1,-1,-1,-1,-1,7,11,6,10,2,1,3,8,0,5,9,4,-1,-1,-1,-1,11,6,7,10,4,5,10,2,4,2,0,4,-1,-1,-1,-1,8,4,3,4,5,3,5,2,3,2,5,10,6,7,11,-1,3,2,7,2,6,7,9,4,5,-1,-1,-1,-1,-1,-1,-1,4,5,9,6,8,0,2,6,0,7,8,6,-1,-1,-1,-1,2,6,3,6,7,3,0,5,1,0,4,5,-1,-1,-1,-1,8,2,6,7,8,6,8,1,2,5,8,4,8,5,1,-1,4,5,9,6,1,10,6,7,1,7,3,1,-1,-1,-1,-1,10,6,1,6,7,1,7,0,1,0,7,8,4,5,9,-1,10,0,4,5,10,4,10,3,0,7,10,6,10,7,3,-1,10,6,7,8,10,7,10,4,5,10,8,4,-1,-1,-1,-1,5,9,6,9,11,6,9,8,11,-1,-1,-1,-1,-1,-1,-1,11,6,3,3,6,0,6,5,0,5,9,0,-1,-1,-1,-1,8,11,0,11,5,0,5,1,0,11,6,5,-1,-1,-1,-1,3,11,6,5,3,6,1,3,5,-1,-1,-1,-1,-1,-1,-1,10,2,1,11,5,9,8,11,9,6,5,11,-1,-1,-1,-1,3,11,0,11,6,0,6,9,0,9,6,5,10,2,1,-1,5,8,11,6,5,11,5,0,8,2,5,10,5,2,0,-1,3,11,6,5,3,6,3,10,2,3,5,10,-1,-1,-1,-1,9,8,5,8,2,5,2,6,5,2,8,3,-1,-1,-1,-1,6,5,9,0,6,9,2,6,0,-1,-1,-1,-1,-1,-1,-1,8,5,1,0,8,1,8,6,5,2,8,3,8,2,6,-1,6,5,1,6,1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,3,1,10,6,1,6,8,3,9,6,5,6,9,8,-1,0,1,10,6,0,10,0,5,9,0,6,5,-1,-1,-1,-1,8,3,0,10,6,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,5,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,5,11,11,5,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,5,11,5,7,11,0,3,8,-1,-1,-1,-1,-1,-1,-1,7,11,5,11,10,5,0,9,1,-1,-1,-1,-1,-1,-1,-1,5,7,10,7,11,10,1,8,9,1,3,8,-1,-1,-1,-1,2,1,11,1,7,11,1,5,7,-1,-1,-1,-1,-1,-1,-1,3,8,0,7,2,1,5,7,1,11,2,7,-1,-1,-1,-1,5,7,9,7,2,9,2,0,9,7,11,2,-1,-1,-1,-1,2,5,7,11,2,7,2,9,5,8,2,3,2,8,9,-1,10,5,2,5,3,2,5,7,3,-1,-1,-1,-1,-1,-1,-1,0,2,8,2,5,8,5,7,8,5,2,10,-1,-1,-1,-1,1,0,9,3,10,5,7,3,5,2,10,3,-1,-1,-1,-1,2,8,9,1,2,9,2,7,8,5,2,10,2,5,7,-1,5,3,1,5,7,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,8,0,1,7,0,5,7,1,-1,-1,-1,-1,-1,-1,-1,3,0,9,5,3,9,7,3,5,-1,-1,-1,-1,-1,-1,-1,7,8,9,7,9,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,8,5,8,10,5,8,11,10,-1,-1,-1,-1,-1,-1,-1,4,0,5,0,11,5,11,10,5,0,3,11,-1,-1,-1,-1,9,1,0,10,4,8,11,10,8,5,4,10,-1,-1,-1,-1,4,11,10,5,4,10,4,3,11,1,4,9,4,1,3,-1,1,5,2,5,8,2,8,11,2,8,5,4,-1,-1,-1,-1,11,4,0,3,11,0,11,5,4,1,11,2,11,1,5,-1,5,2,0,9,5,0,5,11,2,8,5,4,5,8,11,-1,5,4,9,3,11,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,5,2,2,5,3,5,4,3,4,8,3,-1,-1,-1,-1,2,10,5,4,2,5,0,2,4,-1,-1,-1,-1,-1,-1,-1,2,10,3,10,5,3,5,8,3,8,5,4,9,1,0,-1,2,10,5,4,2,5,2,9,1,2,4,9,-1,-1,-1,-1,5,4,8,3,5,8,1,5,3,-1,-1,-1,-1,-1,-1,-1,5,4,0,5,0,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,4,8,3,5,8,5,0,9,5,3,0,-1,-1,-1,-1,5,4,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,11,4,11,9,4,11,10,9,-1,-1,-1,-1,-1,-1,-1,3,8,0,7,9,4,7,11,9,11,10,9,-1,-1,-1,-1,11,10,1,4,11,1,0,4,1,11,4,7,-1,-1,-1,-1,4,1,3,8,4,3,4,10,1,11,4,7,4,11,10,-1,7,11,4,4,11,9,11,2,9,2,1,9,-1,-1,-1,-1,4,7,9,7,11,9,11,1,9,1,11,2,3,8,0,-1,4,7,11,2,4,11,0,4,2,-1,-1,-1,-1,-1,-1,-1,4,7,11,2,4,11,4,3,8,4,2,3,-1,-1,-1,-1,10,9,2,9,7,2,7,3,2,9,4,7,-1,-1,-1,-1,7,10,9,4,7,9,7,2,10,0,7,8,7,0,2,-1,10,7,3,2,10,3,10,4,7,0,10,1,10,0,4,-1,2,10,1,4,7,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,9,4,7,1,4,3,1,7,-1,-1,-1,-1,-1,-1,-1,1,9,4,7,1,4,1,8,0,1,7,8,-1,-1,-1,-1,3,0,4,3,4,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,8,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,10,9,8,11,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,0,3,11,9,3,10,9,11,-1,-1,-1,-1,-1,-1,-1,10,1,0,8,10,0,11,10,8,-1,-1,-1,-1,-1,-1,-1,10,1,3,10,3,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,2,1,9,11,1,8,11,9,-1,-1,-1,-1,-1,-1,-1,9,0,3,11,9,3,9,2,1,9,11,2,-1,-1,-1,-1,11,2,0,11,0,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,2,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,3,2,10,8,2,9,8,10,-1,-1,-1,-1,-1,-1,-1,2,10,9,2,9,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,3,2,10,8,2,8,1,0,8,10,1,-1,-1,-1,-1,2,10,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,3,1,8,1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,9,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,3,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]),numTrisTable:new Float32Array([0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,2,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,3,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,3,2,3,3,2,3,4,4,3,3,4,4,3,4,5,5,2,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,3,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,4,2,3,3,4,3,4,2,3,3,4,4,5,4,5,3,2,3,4,4,3,4,5,3,2,4,5,5,4,5,2,4,1,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,3,2,3,3,4,3,4,4,5,3,2,4,3,4,3,5,2,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,4,3,4,4,3,4,5,5,4,4,3,5,2,5,4,2,1,2,3,3,4,3,4,4,5,3,4,4,5,2,3,3,2,3,4,4,5,4,5,5,2,4,3,5,4,3,2,4,1,3,4,4,5,4,5,3,4,4,5,5,2,3,4,2,1,2,3,3,2,3,4,2,1,3,2,4,1,2,1,1,0])},Dn=class extends Mb{constructor(e,t,i){super(e,t,i),this.data=t,this.needsRebuild=!0,this.customDepthMaterialNeedsUpdate=!1,this._npart=-1,this.spatialn=1,this.drawRangeNeedsForceUpdate=!0,this._resolutionLevel=-1,this.resolution=64,this.spatialDivisions=25,this.zLayersPerRow=8,this.basePyramidSize=512,this.pyramidTexture1Width=341,this.pyramidTexture1Height=256,this.pyramidTexture2Width=170,this.pyramidTexture2Height=128,this.numLevels=9,this.pyramidLevelSizes=[1,2,4,8,16,32,64,128,256,512],this.bboxSize=0,this.bboxOffset=0,this.shapesDataTexture={value:void 0},this.spatialscene=new nb,this.potentialPassScene=new nb,this.voxelPassScene=new nb,this._spatialPassRenderTargets=[],this._potentialPassRenderTargets=[],this._voxelPassRenderTargets=[],this._pyramidRenderTargets=[],this.geometry=new rz,this.geometry.drawRange.count=0,this.spatialPassUniforms={span:{value:-1},shapesDataTexture:this.shapesDataTexture,npart:{value:this.npart},spatialn:{value:this.spatialn}},this.spatialMesh=new rK(Dt,this.spatialPassMaterial()),this.spatialMesh.frustumCulled=!1,this.spatialscene.add(this.spatialMesh);let r=new nM(Da.triTable,16,256,1028,1015);r.needsUpdate=!0;let s=new nM(Da.numTrisTable,256,1,1028,1015);s.needsUpdate=!0,this.voxelPassUniforms={potentialPassTexture:{value:void 0},numTrisTable:{value:s}},this.voxelMesh=new rK(Dt,this.voxelPassMaterial()),this.voxelMesh.frustumCulled=!1,this.voxelPassScene.add(this.voxelMesh),this.potentialPassUniforms={shapesDataTexture:this.shapesDataTexture,spatialPassTexture:{value:void 0},npart:{value:this.npart},spatialn:{value:this.spatialn}},this.potentialMesh=new rK(Dt,this.potentialPassMaterial()),this.potentialMesh.frustumCulled=!1,this.potentialPassScene.add(this.potentialMesh),this.marchPassUniforms={triTable:{value:r},potentialPassTexture:{value:void 0},voxelPassTexture:{value:void 0},pyramidTexture1:{value:void 0},pyramidTexture1Size:{value:void 0},pyramidTexture2:{value:void 0}
7669,pyramidTexture2Size:{value:void 0}},this.frustumCulled=!1,this.onBeforeShadowPass=e=>{if(Dg.call(this),0===this.npart){this.geometry.drawRange.count=0;return}let t=this.material.root;if(t.shadersPatchedForShapeBlend){if(this.customDepthMaterialNeedsUpdate){this.customDepthMaterialNeedsUpdate=!1,this.customDepthMaterial=new r5({vertexShader:t.vertexShader,fragmentShader:`
7670						#include <packing>
7671						void main()
7672						{
7673							gl_FragColor = packDepthToRGBA(gl_FragCoord.z);
7674						}
7675					`,uniforms:t.uniforms,defines:this.material.defines}),this.isMeshDepthMaterial=!0,this.customDistanceMaterial=new r5({vertexShader:t.vertexShader,fragmentShader:`
7676					#include <common>
7677					#include <packing>
7678					uniform vec3 referencePosition;
7679					uniform float nearDistance;
7680					uniform float farDistance;
7681					// World-space position
7682					varying vec3 vWPosition;
7683					void main()
7684					{
7685						float dist = length(vWPosition - referencePosition);
7686						dist = (dist - nearDistance) / (farDistance - nearDistance);
7687						dist = saturate(dist);
7688						// Required by Three.js for this to work
7689						gl_FragColor = packDepthToRGBA( dist );
7690					}`,uniforms:{nearDistance:{value:0},farDistance:{value:0},referencePosition:{value:new iv},opacity:{value:0},...t.uniforms},defines:this.material.defines});let e=this.customDistanceMaterial;e.referencePosition=new iv,e.nearDistance=0,e.farDistance=0,e.opacity=1,e.isMeshDistanceMaterial=!0}}else this.patchVertexShaderForShapeBlend(t),t.shadersPatchedForShapeBlend=!0,this.customDepthMaterialNeedsUpdate=!0;if(this.spatialPassUniforms.npart.value=this.npart,this.spatialPassUniforms.spatialn.value=this.spatialn,this.potentialPassUniforms.npart.value=this.npart,this.potentialPassUniforms.spatialn.value=this.spatialn,this.needsRebuild){this.needsRebuild=!1,this.spatialMesh.material.defines.RES=this.resolutionLevel,this.spatialMesh.material.needsUpdate=!0,this.potentialMesh.material.defines.RES=this.resolutionLevel,this.potentialPassUniforms.spatialPassTexture.value=this.spatialPassRenderTarget.texture,this.potentialMesh.material.needsUpdate=!0,this.voxelMesh.material.defines.RES=this.resolutionLevel,this.voxelMesh.material.needsUpdate=!0,this.voxelPassUniforms.potentialPassTexture.value=this.potentialPassRenderTarget.texture,this.marchPassUniforms.potentialPassTexture.value=this.potentialPassRenderTarget.texture,this.marchPassUniforms.voxelPassTexture.value=this.voxelPassRenderTarget.texture[0],this.material.defines.RES=this.resolutionLevel,this.material.defines.LEVELS=this.pyramidLevelSizes.length,this.material.defines.LOOP=this.pyramidLevelSizes.length%2==0?this.pyramidLevelSizes.length-3:this.pyramidLevelSizes.length-2,this.material.defines.HALF=this.pyramidLevelSizes.length%2==0?1:0,this.material.needsUpdate=!0;let e=this.pyramidLevelSizes.length%2==0?0:1,t=this.pyramidLevelSizes.length%2==0?1:0;this.marchPassUniforms.pyramidTexture2.value=this.pyramidRenderTarget[e].texture,this.marchPassUniforms.pyramidTexture2Size.value=new tQ(this.pyramidRenderTarget[e].width,this.pyramidRenderTarget[e].height),this.marchPassUniforms.pyramidTexture1.value=this.pyramidRenderTarget[t].texture,this.marchPassUniforms.pyramidTexture1Size.value=new tQ(this.pyramidRenderTarget[t].width,this.pyramidRenderTarget[t].height),Object.assign(this.material.uniforms,this.marchPassUniforms)}let i=e.shadowMap.enabled;e.shadowMap.enabled=!1;let r=e.getRenderTarget();e.setRenderTarget(this.spatialPassRenderTarget),e.render(this.spatialscene,Dr),e.setRenderTarget(this.potentialPassRenderTarget),e.render(this.potentialPassScene,Dr),e.setRenderTarget(this.voxelPassRenderTarget),e.render(this.voxelPassScene,Dr),Dn.streamCompaction.renderPyramid(this.resolutionLevel,this.pyramidLevelSizes,e,this.voxelPassRenderTarget,this.pyramidRenderTarget).then(e=>{this.material.wireframe&&(3*e>this.geometry.attributes.position.count||this.drawRangeNeedsForceUpdate)&&(this.geometry.dispose(),this.geometry=new rz,this.geometry.userData.parameters={width:this.bboxSize,height:this.bboxSize,depth:this.bboxSize,centerOffset:[this.bboxOffset,this.bboxOffset,this.bboxOffset]},this.geometry.attributes.position=new rM(new Float32Array(6*e),3)),(3*e>this.geometry.drawRange.count||this.drawRangeNeedsForceUpdate)&&(this.geometry.drawRange.count=3*Math.floor(1.2*e)),this.drawRangeNeedsForceUpdate=!1}),e.shadowMap.enabled=i,e.setRenderTarget(r)}}set npart(e){e!==this._npart&&(this.drawRangeNeedsForceUpdate=!0,this._npart=e,this.spatialn=Math.ceil(e/96))}get npart(){return this._npart}set resolutionLevel(e){let t=Math.min(8,Math.max(5,e));if(t!==this._resolutionLevel){switch(this._resolutionLevel=t,this.resolution=Math.pow(2,t),this.resolutionLevel){case 5:this.pyramidLevelSizes=[1,2,4,6,12,24,48,96,192],this.bboxSize=496,this.bboxOffset=-8;break;case 6:this.pyramidLevelSizes=[1,2,4,8,16,32,64,128,256,512],this.bboxSize=504,this.bboxOffset=-4;break;case 7:this.pyramidLevelSizes=[1,2,4,6,12,24,48,96,192,384,768,1536],this.bboxSize=508,this.bboxOffset=-2;break;case 8:this.pyramidLevelSizes=[1,2,4,8,16,32,64,128,256,512,1024,2048,4096],this.bboxSize=510,this.bboxOffset=-1}this.pyramidTexture1Width=0,this.pyramidTexture2Width=0,this.pyramidTexture1Height=this.pyramidLevelSizes[this.pyramidLevelSizes.length-2],this.pyramidTexture2Height=this.pyramidLevelSizes[this.pyramidLevelSizes.length-3];for(let e=this.pyramidLevelSizes.length-2;e>=0;e--)(this.pyramidLevelSizes.length-2)%2==e%2?this.pyramidTexture1Width+=this.pyramidLevelSizes[e]:this.pyramidTexture2Width+=this.pyramidLevelSizes[e];this.basePyramidSize=this.pyramidLevelSizes[this.pyramidLevelSizes.length-1],this.zLayersPerRow=this.basePyramidSize/this.resolution,this.numLevels=this.pyramidLevelSizes.length-1,this.geometry.userData.parameters={width:this.bboxSize,height:this.bboxSize,depth:this.bboxSize,centerOffset:[this.bboxOffset,this.bboxOffset,this.bboxOffset]},this.needsRebuild=!0}}get resolutionLevel(){return this._resolutionLevel}get spatialPassRenderTarget(){let e=this._spatialPassRenderTargets[this.resolutionLevel];return e||(e=new id(this.spatialDivisions*this.spatialn,this.spatialDivisions**2,{format:1023,type:1015,stencilBuffer:!1,depthBuffer:!1,generateMipmaps:!1,minFilter:1003,magFilter:1003}),this._spatialPassRenderTargets[this.resolutionLevel]=e),e}get potentialPassRenderTarget(){let e=this._potentialPassRenderTargets[this.resolutionLevel];return e||(e=new id(this.basePyramidSize,this.basePyramidSize,{format:1023,type:1015,stencilBuffer:!1,depthBuffer:!1,generateMipmaps:!1,minFilter:1003,magFilter:1003}),this._potentialPassRenderTargets[this.resolutionLevel]=e),e}get voxelPassRenderTarget(){let e=this._voxelPassRenderTargets[this.resolutionLevel];return e||((e=new im(this.basePyramidSize,this.basePyramidSize,2,{stencilBuffer:!1,depthBuffer:!1,generateMipmaps:!1,minFilter:1003,magFilter:1003})).texture[0].format=1023,e.texture[0].type=1015,e.texture[1].format=1028,e.texture[1].type=1015,this._voxelPassRenderTargets[this.resolutionLevel]=e),e}get pyramidRenderTarget(){let e=this._pyramidRenderTargets[this.resolutionLevel];return e||(e=[new id(this.pyramidTexture1Width,this.pyramidTexture1Height,{format:1023,type:1015,stencilBuffer:!1,depthBuffer:!1,magFilter:1003,minFilter:1003}),new id(this.pyramidTexture2Width,this.pyramidTexture2Height,{format:1023,type:1015,stencilBuffer:!1,depthBuffer:!1,magFilter:1003,minFilter:1003})],this._pyramidRenderTargets[this.resolutionLevel]=e),e}updateState(e,t){let i=this.material;super.updateState(e,t),i!==this.material&&(this.needsRebuild=!0),e.geometry&&(this.resolutionLevel=e.geometry.resolutionLevel,this.geometry.userData.parameters={width:this.bboxSize,height:this.bboxSize,depth:this.bboxSize,centerOffset:[this.bboxOffset,this.bboxOffset,this.bboxOffset]}),e.wireframe&&!this.geometry.getAttribute("position")?this.geometry.setAttribute("position",new rM(new Float32Array(3*this.geometry.drawRange.count),3)):!e.wireframe&&this.geometry.getAttribute("position")&&this.geometry.deleteAttribute("position")}spatialPassMaterial(){return new Di({name:"Spatial Pass",fragmentShader:`
7691			precision highp float;
7692			out vec4 pc_FragColor;
7693			const float spatialDivisions = ${this.spatialDivisions}.;
7694			uniform float span;
7695			uniform float npart;
7696			uniform float spatialn;
7697			${Da.shapeInput()}
7698
7699			vec3 low, high;     // range of current div; subset of -1 .. 1 with span border
7700
7701			// lookup one element/channel's worth of spheres for current division
7702			// stating with low sphere number lowi
7703			// gives a key to which spheres from lowi..lowi+23 are active within given div (low..high)
7704			float spatialKey(float lowi) {
7705				float t = 0.;
7706				for (float ii = 23.; ii >= 0.; ii--) {
7707					float i = ii + lowi;
7708					float iin = (i + 0.5) / 96.;
7709					vec4 shape = shapePos(iin);
7710					vec3 d = shape.xyz;
7711					float op = shape.w;
7712	
7713					t *= 2.;
7714					t += (
7715						low.x < d.x && d.x < high.x &&
7716						low.y < d.y && d.y < high.y &&
7717						low.z < d.z && d.z < high.z &&
7718						i < npart || op == -2. // always include if op is -2, which is the intersection operation
7719					) ? 1. : 0.;
7720				}
7721				return t;
7722			}
7723
7724			${Da.getpart}
7725
7726			void main() {               // spatialial fragment shader
7727				// find active div
7728				vec3 div;                               // which div is current
7729				// out holds x=> x, lowi faster moving and y=> z, y faster moving
7730				float yz = float(gl_FragCoord.y - 0.5);     // contains  z, y faster moving
7731				div.y = getpart(yz, spatialDivisions);
7732				div.z = yz; // getpart(yz, spatialDivisions.z); // what's left, should be the same as getpart
7733
7734				float lx = float(gl_FragCoord.x - 0.5);     // contains x, lowi faster moving
7735				float lowi = getpart(lx, spatialn) * 96.;
7736				div.x = lx;
7737
7738				low = div / spatialDivisions * 2. - 1. - span;
7739				high = (div+1.) / spatialDivisions * 2. - 1. + span;
7740
7741				// find active range of spheres
7742				pc_FragColor.x = spatialKey(lowi);
7743				pc_FragColor.y = spatialKey(lowi+24.);
7744				pc_FragColor.z = spatialKey(lowi+48.);
7745				pc_FragColor.w = spatialKey(lowi+72.);
7746			}
7747		`,uniforms:this.spatialPassUniforms})}potentialPassMaterial(){return new Di({name:"PotentialPass",fragmentShader:`
7748			precision highp float;
7749			out vec4 pc_FragColor;
7750
7751			${Da.shapeInput()}
7752			uniform sampler2D spatialPassTexture;
7753
7754			const float res = float(RES);
7755			const float VOXEL_RESOLUTION = pow(2., res);
7756			const float Z_LAYERS_PER_ROW = ceil(pow(2., res / 2.));
7757			const float VOXEL_RESOLUTION_SUB1 = VOXEL_RESOLUTION - 1.;
7758			const float INV_VOXEL_RESOLUTION = 1.0 / VOXEL_RESOLUTION;
7759
7760			uniform float npart;
7761			uniform float spatialn;
7762			const float spatialDivisions = ${this.spatialDivisions}.;
7763			const float spatialDivisions2 = spatialDivisions * spatialDivisions;
7764			const float spatialDivisionsSub1 = spatialDivisions - 1.;
7765
7766			${Da.getpart}
7767
7768			vec3 packRGBAToVec3(vec4 color) {
7769				uint r = uint(color.r * 255.);
7770				uint g = uint(color.g * 255.);
7771				uint combined = (r << 8) | g; 
7772				return vec3(float(combined) * 0.00001525902, color.b, color.a); // 1/65535
7773			}
7774
7775			void applyQuaternionToVector(in vec4 q, inout vec3 v) {
7776				v += 2.0 * cross(q.xyz, cross(q.xyz, v) + q.w * v);
7777			}
7778
7779			/**
7780			 * SDF functions (reference: https://iquilezles.org/articles/distfunctions/)
7781			 */
7782
7783			// branchless version of "Smooth Union, Subtraction and Intersection - bound, bound, bound" in above reference
7784			float smoothOperation(float op, float sdf, float d, float k) {
7785			  //        union: op =  1 =>
7785 signSubtract =  1, signIntersection =  1
7786			  //     subtract: op = -1 => signSubtract = -1, signIntersection =  1
7787				// intersection: op = -2 => signSubtract = -1, signIntersection = -1
7788
7789				float signSubtract = clamp(op, -1., 1.);
7790				float signIntersection = 2. * (op - signSubtract) + 1.;
7791				float h = clamp(
7792					0.5 + signSubtract * 0.5 * (sdf - signSubtract * signIntersection * d) / k,
7793					0.0,
7794					1.0
7795				);
7796				return mix(sdf, signSubtract * signIntersection * d, h) - 
7797							 signSubtract * k * h * (1.0 - h);
7798			}
7799
7800			float sdSphere( vec3 p, float s )
7801			{
7802				return length(p)-s;
7803			}
7804
7805			float sdEllipsoid( vec3 p, vec3 r )
7806			{
7807				float k0 = length(p/r);
7808				float k1 = length(p/(r*r));
7809				return k0*(k0-1.0)/k1;
7810			}
7811
7812			float sdBox( vec3 p, vec3 b )
7813			{
7814				vec3 q = abs(p) - b;
7815				return length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0);
7816			}
7817
7818			float sdTorus( vec3 p, vec2 t )
7819			{
7820				vec2 q = vec2(length(p.xy)-t.x,p.z);
7821				return length(q)-t.y;
7822			}
7823
7824			float sdCappedTorus( vec3 p, vec2 sc, float ra, float rb)
7825			{
7826				p.x = abs(p.x);
7827				float k = (sc.y*p.x>sc.x*p.y) ? dot(p.xy,sc) : length(p.xy);
7828				return sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb;
7829			}
7830
7831			float dot2( in vec2 v ) { return dot(v,v); }
7832			float sdCappedCone( vec3 p, float h, float r1, float r2 )
7833			{
7834				vec2 q = vec2( length(p.xz), p.y );
7835				vec2 k1 = vec2(r2,h);
7836				vec2 k2 = vec2(r2-r1,2.0*h);
7837				vec2 ca = vec2(q.x-min(q.x,(q.y<0.0)?r1:r2), abs(q.y)-h);
7838				vec2 cb = q - k1 + k2*clamp( dot(k1-q,k2)/dot2(k2), 0.0, 1.0 );
7839				float s = (cb.x<0.0 && ca.y<0.0) ? -1.0 : 1.0;
7840				return s*sqrt( min(dot2(ca),dot2(cb)) );
7841			}
7842
7843			float sdCappedCylinder( vec3 p, float h, float r )
7844			{
7845				vec2 d = abs(vec2(length(p.xz),p.y)) - vec2(r,h);
7846				return min(max(d.x,d.y),0.0) + length(max(d,0.0));
7847			}
7848
7849			float maxBlend = 0.0;
7850			// compute potential from A (=24) spheres, using the bit flags in 'activeKey'
7851			// to avoid lookup/compute for inactive spheres
7852			// return field potential, side effect updates track,
7853			// compute and return +ve and -ve values separately
7854			void fillSpatialInner(
7855				float ii,
7856				float activeKey,
7857				vec3 corner,
7858				inout float sdf,
7859				inout float colorDivisor,
7860				inout vec4 trackColor
7861			) {
7862				for (float i = 0.; i < 24.; i++) {
7863					if (activeKey < 1.) break; // activeKey exhausted, no more active spheres
7864					activeKey *= 0.5;
7865					if (fract(activeKey) < 0.5) continue;
7866
7867					float iin = (i + ii + 0.5) * 0.010416666666666666;
7868					vec4 shape = shapePos(iin);
7869					vec4 quat = shapeQuat(iin);
7870					vec4 params1 = shapeParams1(iin);
7871					vec4 params2 = shapeParams2(iin);
7872
7873					vec3 p = corner - shape.xyz;
7874					applyQuaternionToVector(quat, p);
7875					p /= params2.z; // scale
7876					float d; // d in -1..1 coordinates
7877					switch (int(params1.x)) {
7878						case 0: d = sdSphere(p, params1.y); break;
7879						case 1: d = sdEllipsoid(p, params1.yzw); break;
7880						case 2: d = sdBox(p, params1.yzw); break;
7881						case 3: d = sdCappedCylinder(p, params1.y, params1.z); break;
7882						case 4: d = sdCappedCone(p, params1.y, params1.z, params1.w); break;
7883						case 5: d = sdTorus(p, params1.yz); break;
7884						case 6: d = sdCappedTorus(p, params1.yz, params1.w, params2.w); break;
7885					}
7886					d -= params2.y; // rounded edge
7887					d *= params2.z; // scale
7888
7889					float k = params2.x;
7890					float op = shape.w;
7891
7892					sdf = smoothOperation(shape.w, sdf, d, k);
7893
7894					float isNegativeOne = step(-1.5, op) * step(op, -0.5); // 1 when op == -1, 0 otherwise
7895					float colorCull = smoothstep(maxBlend, 0., -d);
7896					float cullFactor = mix(1.0, colorCull, isNegativeOne);
7897					trackColor *= cullFactor;
7898					colorDivisor *= cullFactor;
7899
7900					maxBlend = max(maxBlend, k);
7901
7902					k += 2. * INV_VOXEL_RESOLUTION; // avoid division by zero, and other color artifacts with very small k
7903					float nearness = smoothstep(k, 0., d);
7904
7905					vec4 color = shapeColor(iin);
7906					nearness *= float(color.a >= 0.);
7907
7908					colorDivisor += nearness;
7909					trackColor += color * nearness;
7910				}
7911			}
7912
7913			vec3 div;
7914			// compute potential from all spheres; collect +ve and =ve values separately
7915			// work in blocks of A*4 (=96) spheres, using the bit flags in 4 float channel 'activeKey' values
7916			// TODO check if extra vec3 output useful, not really used at present
7917			float fillSpatial(vec3 corner, inout vec4 trackColor) {
7918				float sdf = 1e3; // hack: initialize to large value
7919				float colorDivisor = 0.;
7920				// spatialPassTexture holds x=> lowi, x faster moving and y=> z, y faster moving
7921				float divyz = (div.y + div.z * spatialDivisions + 0.5) / (spatialDivisions2);
7922				for (float ii = 0.; ii < spatialn; ii++) {
7923					float i = ii * 96.;
7924
7925					vec4 activeKey = texture(spatialPassTexture, vec2((div.x * spatialn + ii + 0.5)/(spatialn * spatialDivisions), divyz));
7926					fillSpatialInner(i, activeKey.x, corner, sdf, colorDivisor, trackColor);
7927					fillSpatialInner(i+24., activeKey.y, corner, sdf, colorDivisor, trackColor);
7928					fillSpatialInner(i+48., activeKey.z, corner, sdf, colorDivisor, trackColor);
7929					fillSpatialInner(i+72., activeKey.w, corner, sdf, colorDivisor, trackColor);
7930				}
7931
7932				trackColor /= colorDivisor;
7933				return mix(sdf, 0.0, step(1e20 - 0.1, sdf));
7934			}
7935
7936			void main() {
7937				${Da.getxyzi}    // get xi yi zi from 2d position
7938
7939				vec3 xyzi = vec3(xi,yi,zi);
7940				vec3 corner = xyzi / VOXEL_RESOLUTION_SUB1 * 2. - 1.;  // -1..1 coords
7941
7942				div = floor(xyzi / VOXEL_RESOLUTION_SUB1 * spatialDivisionsSub1);
7943
7944				vec4 c = vec4(0.);
7945				float t = fillSpatial(corner, c);
7946
7947				pc_FragColor = vec4(t, packRGBAToVec3(c)); // RGB texture
7948			}
7949		`,uniforms:this.potentialPassUniforms})}voxelPassMaterial(){return new Di({name:"VoxelPass",fragmentShader:`
7950			precision highp float;
7951			layout(location = 0) out vec4 pc_FragColor;
7952			layout(location = 1) out vec4 numTris;
7953
7954			const float res = float(RES);
7955			const float VOXEL_RESOLUTION = pow(2., res);
7956			const float VOXEL_RESOLUTION_SUB1 = VOXEL_RESOLUTION - 1.; 
7957			const float Z_LAYERS_PER_ROW = ceil(pow(2., res / 2.));
7958			const float INV_VOXEL_RESOLUTION = 1.0 / VOXEL_RESOLUTION;
7959			uniform sampler2D numTrisTable; // 256 x 1
7960
7961			float keyi(float f000, float f100, float f010, float f110, float f001, float f101, float f011, float f111) {
7962				return (float(f000 < 0.) * 1.) +
7963							 (float(f100 < 0.) * 2.) +
7964							 (float(f010 < 0.) * 8.) +
7965							 (float(f110 < 0.) * 4.) +
7966							 (float(f001 < 0.) * 16.) +
7967							 (float(f101 < 0.) * 32.) +
7968							 (float(f011 < 0.) * 128.) +
7969							 (float(f111 < 0.) * 64.);
7970			}
7971
7972			${Da.lookup}
7973
7974			vec3 compNormi(float xi, float yi, float zi) {
7975				float dx = look(xi + 1., yi, zi, potentialPassTexture).r - look(xi - 1., yi, zi, potentialPassTexture).r;
7976				float dy = look(xi, yi + 1., zi, potentialPassTexture).r - look(xi, yi - 1., zi, potentialPassTexture).r;
7977				float dz = look(xi, yi, zi + 1., potentialPassTexture).r - look(xi, yi, zi - 1., potentialPassTexture).r;
7978				// if we allow (common) 0,0,0 case through then NaN can spread
7979				// eg r = vec4(compNorm i(???), 1.) will pollute r.w
7980				if (dx == 0.0 && dy == 0.0 && dz == 0.0) {
7981					return vec3(0.199, 0.299, 0.399);
7982				}
7983				return normalize(vec3(dx, dy, dz));
7984			}
7985
7986			void main() {
7987				${Da.getxyzi}    // get xi yi zi from 2d
7988
7989				vec3 normal = compNormi(xi, yi, zi);  // even if our key is -1 this may be needed by a neighbouring voxel
7990
7991				if (xi >= VOXEL_RESOLUTION_SUB1 || yi >= VOXEL_RESOLUTION_SUB1 || zi >= VOXEL_RESOLUTION_SUB1) {
7992					pc_FragColor = vec4(normal, 0.);
7993					numTris = vec4(0.);
7994					return;
7995				}
7996
7997				float
7998					f000 = look(xi, yi, zi, potentialPassTexture).r,
7999					f100 = look(xi+1., yi, zi, potentialPassTexture).r,
8000					f010 = look(xi, yi+1., zi, potentialPassTexture).r,
8001					f110 = look(xi+1., yi+1., zi, potentialPassTexture).r,
8002					f001 = look(xi, yi, zi+1., potentialPassTexture).r,
8003					f101 = look(xi+1., yi, zi+1., potentialPassTexture).r,
8004					f011 = look(xi, yi+1., zi+1., potentialPassTexture).r,
8005					f111 = look(xi+1., yi+1., zi+1., potentialPassTexture).r;
8006				float key = keyi(f000, f100, f010, f110, f001, f101, f011, f111);
8007
8008				pc_FragColor = vec4(normal, key);
8009
8010				numTris = texture(numTrisTable, vec2((key + 0.5) / 256., 0.5));
8011			}
8012		`,uniforms:this.voxelPassUniforms})}
8012patchVertexShaderForShapeBlend(e){let t=`
8013		#ifdef SHAPEBLEND 
8014			precision highp sampler2D;
8015
8016			uniform float isol;
8017
8018			uniform sampler2D triTable;     // 256 x 16
8019			uniform sampler2D pyramidTexture1;
8020			uniform vec2 pyramidTexture1Size;
8021			uniform sampler2D pyramidTexture2;
8022			uniform vec2 pyramidTexture2Size;
8023
8024			const vec2 halfPixelOffset = vec2(0.5, 0.5);
8025
8026			const vec2 rShift = vec2(0., 1.);
8027			const vec2 gShift = vec2(1., 1.);
8028			const vec2 bShift = vec2(1., 0.);
8029
8030			const float res = float(RES);
8031			const float VOXEL_RESOLUTION = pow(2., res);
8032			const float Z_LAYERS_PER_ROW = ceil(pow(2., res / 2.));
8033			const float INV_VOXEL_RESOLUTION = 1.0 / VOXEL_RESOLUTION;
8034
8035			const float scale_factor = 2.;
8036
8037			#if SHAPEBLEND == 5
8038				const float levelShiftX[7] = float[7](4., 6., 12., 24., 48., 96., 192.);
8039				const float scale = 8. * scale_factor;
8040				const vec3 originOffset = vec3(16.);
8041			#elif SHAPEBLEND == 7
8042				const float levelShiftX[10] = float[10](4., 6., 12., 24., 48., 96., 192., 384., 768., 1536.); 
8043				const float scale = 2. * scale_factor;
8044				const vec3 originOffset = vec3(64.);
8045			#elif SHAPEBLEND == 8
8046				const float levelShiftX[11] = float[11](4., 8., 16., 32., 64., 128., 256., 512., 1024., 2048., 4096.);
8047				const float scale = scale_factor;
8048				const vec3 originOffset = vec3(128.);
8049			#else
8050				const float levelShiftX[8] = float[8](4., 8., 16., 32., 64., 128., 256., 512.);
8051				const float scale = 4. * scale_factor;
8052				const vec3 originOffset = vec3(32.);
8053			#endif
8054
8055			${Da.lookup}
8056
8057			const vec3 offsets[24] = vec3[](
8058				vec3(0., 0., 0.), vec3(1., 0., 0.),
8059				vec3(1., 0., 0.), vec3(1., 1., 0.),
8060				vec3(0., 1., 0.), vec3(1., 1., 0.),
8061				vec3(0., 0., 0.), vec3(0., 1., 0.),
8062				vec3(0., 0., 1.), vec3(1., 0., 1.),
8063				vec3(1., 0., 1.), vec3(1., 1., 1.),
8064				vec3(0., 1., 1.), vec3(1., 1., 1.),
8065				vec3(0., 0., 1.), vec3(0., 1., 1.),
8066				vec3(0., 0., 0.), vec3(0., 0., 1.),
8067				vec3(1., 0., 0.), vec3(1., 0., 1.),
8068				vec3(1., 1., 0.), vec3(1., 1., 1.),
8069				vec3(0., 1., 0.), vec3(0., 1., 1.)
8070			);
8071
8072			vec2 computeShiftedPosition1(vec2 xy, float levelOriginX) {
8073				vec2 xyShifted = xy;
8074				xyShifted.x += levelOriginX;
8075				return (xyShifted + halfPixelOffset) / pyramidTexture1Size;
8076			}
8077
8078			vec2 computeShiftedPosition2(vec2 xy, float levelOriginX) {
8079				vec2 xyShifted = xy;
8080				xyShifted.x += levelOriginX;
8081				return (xyShifted + halfPixelOffset) / pyramidTexture2Size;
8082			}
8083
8084			vec4 unpackVec3ToRGBA(vec3 vec) {
8085				uint combined = uint(vec.x * 65535.0 + 0.5); // Add 0.5 for rounding
8086				float g = float(combined & uint(0xFF)) * 0.00392156862; // 1/255
8087				float r = float((combined >> 8) & uint(0xFF)) * 0.00392156862; 
8088		
8089				return vec4(r, g, vec.y, vec.z);
8090			}
8091
8092			out vec4 marchColor;
8093			// end of marchvertPre
8094		#endif
8095		`,i=`
8096		#ifdef SHAPEBLEND
8097			float triIndex = floor(float(gl_VertexID/3));
8098			float vertexIndex = float(gl_VertexID);
8099			
8100			// Initial pyramid lookup
8101			float levelOriginX1 = pyramidTexture1Size.x - 2.;
8102			float levelOriginX2 = pyramidTexture2Size.x - 1.;
8103			vec2 xy = vec2(0.);
8104			vec4 lookUp = texture(pyramidTexture2, computeShiftedPosition2(xy, levelOriginX2));
8105			
8106			// Early exit check
8107			if (triIndex >= lookUp.r) return;
8108			
8109			// Optimize loop variables
8110			float start = 0.;
8111			vec4 triIndexVec = vec4(triIndex);
8112			
8113			// Main position computation loop
8114			for (int i = 0; i < LOOP;) {
8115				// Compute boundaries
8116				vec4 ends = lookUp + vec4(start);
8117				vec4 starts = vec4(ends.gba, start);
8118				vec4 check = vec4(greaterThanEqual(triIndexVec, starts)) * 
8119											vec4(lessThan(triIndexVec, ends));
8120				
8121				// Update position
8122				xy *= 2.;
8123				xy += check.r * rShift + check.g * gShift + check.b * bShift;
8124				
8125				// Update loop variables
8126				start = dot(check, starts);
8127				levelOriginX2 -= levelShiftX[i];
8128				
8129				// Update lookup
8130				lookUp = texture(pyramidTexture1, computeShiftedPosition1(xy, levelOriginX1));
8131				i++;
8132
8133				ends = lookUp + vec4(start);
8134				starts = vec4(ends.gba, start);
8135				check = vec4(greaterThanEqual(triIndexVec, starts)) * 
8136											vec4(lessThan(triIndexVec, ends));
8137				
8138				// Update position
8139				xy *= 2.;
8140				xy += check.r * rShift + check.g * gShift + check.b * bShift;
8141				
8142				// Update loop variables
8143				start = dot(check, starts);
8144				levelOriginX1 -= levelShiftX[i];
8145				
8146				// Update lookup
8147				lookUp = texture(pyramidTexture2, computeShiftedPosition2(xy, levelOriginX2));
8148
8149				i++;
8150			}
8151
8152			#if HALF == 1
8153				vec4 ends = lookUp + vec4(start);
8154				vec4 starts = vec4(ends.gba, start);
8155				vec4 check = vec4(greaterThanEqual(triIndexVec, starts)) * vec4(lessThan(triIndexVec, ends));
8156			
8157				// Update position
8158				xy *= 2.;
8159				xy += check.r * rShift + check.g * gShift + check.b * bShift;
8160			
8161				// Update loop variables
8162				start = dot(check, starts);
8163			#endif
8164			
8165			// Compute final coordinates
8166			vec3 gridPos;
8167			gridPos.x = mod(xy.x, VOXEL_RESOLUTION);
8168			gridPos.y = mod(xy.y, VOXEL_RESOLUTION);
8169			gridPos.z = floor(xy.x * INV_VOXEL_RESOLUTION) + 
8170									floor(xy.y * INV_VOXEL_RESOLUTION) * Z_LAYERS_PER_ROW;
8171			
8172			// Vertex key computation
8173			vertexIndex -= start * 3.;
8174			float vk = vertexIndex * 0.0625 + 0.03125; // Optimized division by 16 and addition of 1/32
8175			
8176			// Voxel lookup and edge computation
8177			vec4 voxel = look(gridPos.x, gridPos.y, gridPos.z, voxelPassTexture);
8178			float key = (voxel.w + 0.5) * 0.00390625; // Optimized division by 256
8179			
8180			// Edge lookup and offset computation
8181			float edgeNum = texture(triTable, vec2(vk, key)).x;
8182			int edgeIndex = int(edgeNum) * 2;
8183			
8184			// Compute edge positions
8185			vec3 p1 = gridPos + offsets[edgeIndex];
8186			vec3 p2 = gridPos + offsets[edgeIndex + 1];
8187			
8188			// Compute potentials and normals
8189			vec4 potential1 = look(p1.x, p1.y, p1.z, potentialPassTexture);
8190			vec4 potential2 = look(p2.x, p2.y, p2.z, potentialPassTexture);
8191			
8192			// Final position and normal computation
8193			float mu = potential1.r / (potential1.r - potential2.r);
8194
8195			marchColor = mix(
8196				unpackVec3ToRGBA(potential1.gba),
8197				unpackVec3ToRGBA(potential2.gba),
8198				mu
8199			);
8200
8201			transformed = p1 + (p2 - p1) * mu;
8202			transformed -= originOffset;
8203			transformed *= scale;
8204			vec4 data1 = look(p1.x, p1.y, p1.z, voxelPassTexture);
8205			vec4 data2 = look(p2.x, p2.y, p2.z, voxelPassTexture);
8206			objectNormal = normalize(mix(data1.xyz, data2.xyz, mu));
8207			transformedNormal = normalMatrix * objectNormal;
8208			#ifndef FLAT_SHADED
8209				vNormal = transformedNormal;
8210			#endif
8211		#endif
8212		`;e.vertexShader=t+e.vertexShader.replace("#include <project_vertex>",i+`
8213#include <project_vertex>`);let r=e.fragmentShader.match(/vec3 diffuseColor[^\n]*\n/);if(!r)return;let s=`
8214		#ifdef SHAPEBLEND_C
8215			#if SHAPEBLEND_C == 1
8216				${r[0].replace(/nodeU0,/g,"marchColor.rgb,").replace(/nodeU\d+(?=,g_uid\d+_calpha\))/g,"marchColor.a")}
8217			#else
8218				${r[0]}
8219			#endif
8220		#else
8221			${r[0]}
8222		#endif
8223		`;e.fragmentShader=`in vec4 marchColor;
8224`+e.fragmentShader.replace(r[0],s),Object.assign(e.uniforms,this.marchPassUniforms)}initDebugPass(e){console.log("fboToDebug.width",e.width,e.height),this.geometry=new sc(e.width,e.height),this.geometry.userData={parameters:{width:4,height:4}};let t={inputTexture:{value:Array.isArray(e.texture)?e.texture[1]:e.texture},pyramidTextureSize:{value:void 0}},i=e=>{e.vertexShader=`
8225				precision highp float;
8226
8227				varying vec2 vUv;
8228
8229				void main() {
8230						gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
8231						vUv = uv;
8232				}
8233			`,e.fragmentShader=`
8234				layout(location = 1) out vec4 gVelocity;
8235
8236				precision highp float;
8237				
8238				uniform sampler2D inputTexture;
8239				varying vec2 vUv;
8240
8241				uniform vec2 pyramidTextureSize;
8242
8243				void main() {
8244						// Sample the input texture using UV coordinates
8245						gl_FragColor = texture(inputTexture, vUv);
8246						gVelocity = vec4(0.0);
8247				}
8248			`,t.pyramidTextureSize.value=new tQ(this.pyramidRenderTarget.width,this.pyramidRenderTarget.height),Object.assign(e.uniforms,t)};this.material.shapeBlendhack=i,this.material.root.shapeBlendhack=i}},Do=Dn;Do.streamCompaction=new Ds;var Dl=new iX,Dh=new iX,Dc=new ig,Dd=new iv,Du=new iv,Dp=new ig;function Df(e,t=0){let i=this.children.length;for(;i--;){let r=this.children[i];xc.is(r)&&Dm.call(r,e,t+1)}}function Dm(e,t=0){if(!0!==e(this,t)){let i=this.children.length;for(;i--;){let r=this.children[i];xc.is(r)&&Dm.call(r,e,t+1)}}}function Dg(){if(void 0===this.shapesDataTexture.value){let e=new nM(new Float32Array(1920),96,5,1023,1015);this.shapesDataTexture.value=e}let e=this.shapesDataTexture.value,t=e.image.data;e.needsUpdate=!0;let i=0,r=this.data.geometry.blendRange,s=Dl.copy(this.matrixWorld).invert(),a=0;Df.call(this,e=>{let o;if(!1===e.visible)return!0;
8248if(e instanceof M9||e instanceof ER||e instanceof P9)return;o=e instanceof xb?e.object:e;let l=e.data?.cloner;if(wQ.is(e)&&l&&!l.hideBase&&"radial"!==l.type&&!0!==l.disabled||!(o instanceof Mb))return;let h=o.geometry.userData.parameters,c=h.shapeBlendNode;if(void 0===c)return;if(Dh.multiplyMatrices(s,e.matrixWorld).decompose(Du,Dc,Dd),"TorusGeometry"===h.type&&360!==h.arc){let e=h.arc*Math.PI/180;e/=4,Dc.multiply(Dp.set(0,0,Math.sin(e),Math.cos(e)))}let d=c.overrideGlobalBlend?c.blendRange:r;d=d/this.bboxSize*2,t[4*a]=(Du.x-this.bboxOffset)/this.bboxSize*2,t[4*a+1]=(Du.y-this.bboxOffset)/this.bboxSize*2,t[4*a+2]=(Du.z-this.bboxOffset)/this.bboxSize*2,t[4*a+3]=0===c.operation?1:2===c.operation?-1:-2,t[384+4*a]=-Dc.x,t[384+4*a+1]=-Dc.y,t[384+4*a+2]=-Dc.z,t[384+4*a+3]=Dc.w;let u=new Float32Array(4),p=0;if("SphereGeometry"===h.type)h.width===h.height&&h.width===h.depth?u[0]=0:u[0]=1,u[1]=h.width/this.bboxSize,u[2]=h.height/this.bboxSize,u[3]=h.depth/this.bboxSize,i=Math.max(i,u[1]*Dd.x+d,u[2]*Dd.x+d,u[3]*Dd.x+d);else if("CubeGeometry"===h.type){p=h.cornerRadius;let e=h.width,t=h.height,r=h.depth;u[0]=2,u[1]=(e-2*p)/this.bboxSize,u[2]=(t-2*p)/this.bboxSize,u[3]=(r-2*p)/this.bboxSize,i=Math.max(i,Math.sqrt(e**2+t**2+r**2)/this.bboxSize*Dd.x+d)}else if("CylinderGeometry"===h.type){p=h.cornerRadius;let e=h.height,t=h.radiusBottom,r=h.radiusTop;if(r>=t){let i=(Math.PI/2-Math.atan2(r-t,e))/2;r-=p/Math.tan(i),t-=p*Math.tan(i)}else if(t>r){let i=(Math.PI/2-Math.atan2(t-r,e))/2;r-=p*Math.tan(i),t-=p/Math.tan(i)}u[1]=(h.height-2*p)/this.bboxSize,t===r?(u[0]=3,u[2]=t/this.bboxSize*2):(u[0]=4,u[2]=t/this.bboxSize*2,u[3]=r/this.bboxSize*2),i=Math.max(i,4*u[1]*Dd.x+d)}else if("TorusGeometry"===h.type){if(u[0]=5,u[1]=(h.width-h.depth)/this.bboxSize,u[2]=h.depth/this.bboxSize,360!==h.arc){u[0]=6,u[3]=u[1],t[1152+4*a+3]=u[2];let e=2*Math.atan2(u[2]/2,u[1]),i=h.arc*Math.PI/180/2-e;u[1]=Math.sin(i),u[2]=Math.cos(i)}i=Math.max(i,h.width*Dd.x/this.bboxSize+d)}t.set(u,768+4*a),t[1152+4*a]=d,t[1152+4*a+1]=p/this.bboxSize*2,t[1152+4*a+2]=Dd.x;let f=o.material,m=f.uniforms.nodeU0.node.value,g=f.uniforms.nodeU1.value;0===c.operation||c.useColor||(g=-1),t[1536+4*a]=m.r,t[1536+4*a+1]=m.g,t[1536+4*a+2]=m.b,t[1536+4*a+3]=g,g<1&&1===this.material.defines.SHAPEBLEND_C&&(this.material.transparent=!0),a++}),this.npart=a,this.spatialPassUniforms.span.value=1.4*i}function Dv(e,t){let i=!1,r=512&e.layers.mask,s=t.getLayersOfType("transmission"),a=t.getLayersOfType("outline");return a.length>0&&(e.layers.set(8),s.length>0&&e.layers.enable(3),i=!0,MS(e),Mw(e)),0===s.length&&0===a.length&&e.layers.set(0),r&&e.layers.set(9),e instanceof Mf&&e.needsAO&&e.layers.enable(5),i}function Dy(e,t){if(!t.layers)return!1;let i=512&e.layers.mask,r=!1,s=t.getLayersOfType("transmission").filter(e=>e.data.visible),a=t.getLayersOfType("outline").filter(e=>e.data.visible);return s.length>0&&(e.layers.set(3),a.length>0&&e.layers.enable(8),r=!0),0===s.length&&0===a.length&&e.layers.set(0),i&&e.layers.set(9),e.needsAO&&e.layers.enable(5),r}var Dx=new lI,Db=new iX,Dw=new iq;function DS(e,t,i,r=!1){let s=e.cloner;if(s)for(let a of s.children){let s=Db.copy(a.matrixWorld).invert(),o=Dw.copy(t.ray).applyMatrix4(s),l=e.matrixWorld;o.applyMatrix4(l),Dx.set(o.origin,o.direction),Dx.near=t.near,Dx.far=t.far;let h=Dx.intersectObject(e,!1);h.length>0&&i.push({...h[0],object:r?a:e})}}var D_=class{constructor(){this._constraints=new Map}setConstraint(e,t){null===t?this._constraints.delete(e):this._constraints.set(e,t)}removeDependencies(e){this._constraints.delete(e)}applyConstraints(e){let t=new Set;this._constraints.forEach((i,r)=>{let s=[r,i],a=i;for(;this._constraints.has(a);){if(a=this._constraints.get(a),s.includes(a)){console.warn(`circular dependency detected: ${s.join(" -> ")}`);break}t.has(a)||s.push(a)}for(let i=s.length-2;i>=0;i--)if(!t.has(s[i])){let r=e.find(s[i]);r?r.applyPathSnapping(e):console.warn(`missing entity ${s[i]}`),t.add(s[i])}})}findDependency(e,t){let i=e;for(;this._constraints.has(i);)if((i=this._constraints.get(i))===t)return!0;return!1}},DA=class{};function DM(e){let t,i,r,s,a,o,l,h,c,d,u,p,f,m,g;function v(e,t,o){let l=new Float32Array(d,a,3*i);r=0;let h=new Uint32Array(d,s,i);for(let i=0;i<o.length-1;i++){let s=t[i],a=e[i].elements,c=s.filter(e=>e.enabled&&"Include"===e.mode).map(e=>"Box"===e.type?x(e):w(e)),d=s.filter(e=>e.enabled&&"Exclude"===e.mode).map(e=>"Box"===e.type?x(e):w(e));for(let e=o[i];e<o[i+1];e++){let t=p[3*e],i=p[3*e+1],s=p[3*e+2];
8248if((0===c.length||y(t,i,s,c))&&(0===d.length||!y(t,i,s,d))){let o=1/(a[3]*t+a[7]*i+a[11]*s+a[15]);l[3*r]=(a[0]*t+a[4]*i+a[8]*s+a[12])*o,l[3*r+1]=(a[1]*t+a[5]*i+a[9]*s+a[13])*o,l[3*r+2]=(a[2]*t+a[6]*i+a[10]*s+a[14])*o,h[r]=e,r++}}}}function y(e,t,i,r,s){return r["Intersect"===s?"every":"some"](r=>{var s,a,o,l,h,c,d,u;let p,f,m,g,v,y,x;let b=(s=r.invRotationMatrix,p=e-(a=r.cropCenter)[0],f=t-a[1],m=i-a[2],g=1/(s[3]*p+s[7]*f+s[11]*m+s[15]),{x:(s[0]*p+s[4]*f+s[8]*m+s[12])*g+a[0],y:(s[1]*p+s[5]*f+s[9]*m+s[13])*g+a[1],z:(s[2]*p+s[6]*f+s[10]*m+s[14])*g+a[2]});return Array.isArray(r)?(o=b.x,l=b.y,h=b.z,o>=r[0]&&o<=r[3]&&l>=r[1]&&l<=r[4]&&h>=r[2]&&h<=r[5]):(c=b.x,d=b.y,u=b.z,v=(c-r.cropCenter[0])*r.invRadiusX,v*v+(y=(d-r.cropCenter[1])*r.invRadiusY)*y+(x=(u-r.cropCenter[2])*r.invRadiusZ)*x<=1)})}function x(e){let t=e.cropSize[0]/2,i=e.cropSize[1]/2,r=e.cropSize[2]/2;return Object.assign([e.cropCenter[0]-t,e.cropCenter[1]-i,e.cropCenter[2]-r,e.cropCenter[0]+t,e.cropCenter[1]+i,e.cropCenter[2]+r],{invRotationMatrix:b(e.cropRotation),cropCenter:e.cropCenter})}function b(e){let t=[],i=e[0]*Math.PI/180,r=e[1]*Math.PI/180,s=e[2]*Math.PI/180,a=Math.cos(i),o=Math.sin(i),l=Math.cos(r),h=Math.sin(r),c=Math.cos(s),d=Math.sin(s),u=a*c,p=a*d,f=o*c,m=o*d;return t[0]=l*c,t[1]=-l*d,t[2]=h,t[4]=p+f*h,t[5]=u-m*h,t[6]=-o*l,t[8]=m-u*h,t[9]=f+p*h,t[10]=a*l,t[12]=0,t[13]=0,t[14]=0,t[3]=0,t[7]=0,t[11]=0,t[15]=1,t}function w(e){let t=2/e.cropSize[0],i=2/e.cropSize[1],r=2/e.cropSize[2],s=b(e.cropRotation);return{invRadiusX:t,invRadiusY:i,invRadiusZ:r,cropCenter:e.cropCenter,invRotationMatrix:s}}e.onmessage=b=>{if(b.data.getCroppedIndexes){let t=new Uint32Array(function(e,t){let i=[],r=t.filter(e=>e.enabled&&"Include"===e.mode).map(e=>"Box"===e.type?x(e):w(e)),s=t.filter(e=>e.enabled&&"Exclude"===e.mode).map(e=>"Box"===e.type?x(e):w(e)),a=e.length;for(let t=0;t<a;t+=3){let a=e[t],o=e[t+1],l=e[t+2];(0===r.length||y(a,o,l,r))&&(0===s.length||!y(a,o,l,s))||i.push(t/3)}return i}(new Float32Array(b.data.positions),b.data.crops)).buffer;e.postMessage({outOfBoundsIndexes:t},[t])}else if(b.data.positions)p=new Float32Array(b.data.positions),m=b.data.meshMatrixWorlds,g=b.data.cropsArray,f=b.data.meshIndexIntervals,v(m,g,f),e.postMessage({sortSetupComplete:!0});else if(b.data.sort||b.data.newMatrixWorlds||b.data.newCropsArray)(b.data.newMatrixWorlds||b.data.newCropsArray)&&(g=b.data.newCropsArray||g,v(m=b.data.newMatrixWorlds||m,g,f)),function(p){let f,m=new Float64Array(d,o,16);for(let e=0;e<16;e++)m[e]=p[e];if(r>1){t.exports.sortIndexes(s,a,c,o,l,h,u.DepthMapRange,r);let e=new Uint32Array(r);f=e.buffer,e.set(new Uint32Array(d,h,r))}else if(1===r){let e=new Uint32Array(r);e[0]=new Uint32Array(d,s,i)[0],f=e.buffer}else f=new ArrayBuffer(0);e.postMessage({sortDone:!0,indexesBuffer:f},[f])}(b.data.sort.view,b.data.sort.cameraPosition);else if(b.data.init){u=b.data.init.Constants,i=b.data.init.splatCount;let r=u.BytesPerInt,p=3*u.BytesPerFloat,f=new Uint8Array(b.data.init.sorterWasmBytes),m=Math.floor((i*(r+p)+(i*u.BytesPerInt*2+u.DepthMapRange*u.BytesPerInt*2)+32*u.MemoryPageSize)/u.MemoryPageSize)+1,g={module:{},env:{memory:new WebAssembly.Memory({initial:2*m,maximum:3*m,shared:!0})}};WebAssembly.compile(f).then(e=>WebAssembly.instantiate(e,g)).then(f=>{t=f,s=0,h=(l=(c=(o=(a=i*r)+i*p)+16*u.BytesPerFloat*2)+i*u.BytesPerInt)+u.DepthMapRange*u.BytesPerInt,d=g.env.memory.buffer,e.postMessage({sortSetupPhase1Complete:!0})})}}}tS(DA,"DepthMapRange",65536),tS(DA,"MemoryPageSize",65536),tS(DA,"BytesPerFloat",4),tS(DA,"BytesPerInt",4);var DE=(ti=new Int32Array((tt=new Float32Array(1)).buffer),function(e){return tt[0]=e,ti[0]}),DC=new tQ;function DT(e){let t=!1;return e.scene.objects.traverse((e,i)=>{if(!1===i.visible)return!0;"Splat"===i.type&&(t=!0)}),t}var DP,DD,DI,DO,DR,DL=class extends rK{constructor(e,t,i,r,s=!1,a=1,o,l){super(i,r),this.splatCount=t,this.meshIndexIntervals=o,this.meshMatrixWorlds=l,this.splatBuffers=e,this.geometry=i,this.material=r,this.splatDataTextures=null,this.halfPrecisionCovariancesOnGPU=s,this.devicePixelRatio=a,this.resetLocalSplatDataAndTexturesFromSplatBuffer()}static buildMesh(e,t,i=!1,r=1,s,a){let o=DL.buildGeomtery(t),l=DL.buildMaterial(s);return new DL(e,t,o,l,i,r,s,a)}static buildMaterial(e){let t=`
8249            precision highp float;
8250            #include <common>
8251
8252            attribute uint splatIndex;
8253
8254            uniform highp sampler2D covariancesTexture;
8255            uniform highp usampler2D centersColorsTexture;
8256            uniform vec2 focal;
8257            uniform vec2 viewport;
8258            uniform vec2 basisViewport;
8259            uniform vec2 covariancesTextureSize;
8260            uniform vec2 centersColorsTextureSize;
8261						uniform highp sampler2D meshMatrixWorldsTexture;
8262						uniform uint meshIndexIntervals[257];
8263						uniform float orthoZoom;
8264
8265            varying vec4 vColor;
8266            varying vec2 vUv;
8267
8268            varying vec2 vPosition;
8269
8270            const vec4 encodeNorm4 = vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0);
8271            const uvec4 mask4 = uvec4(uint(0x000000FF), uint(0x0000FF00), uint(0x00FF0000), uint(0xFF000000));
8272            const uvec4 shift4 = uvec4(0, 8, 16, 24);
8273            vec4 uintToRGBAVec (uint u) {
8274               uvec4 urgba = mask4 & u;
8275               urgba = urgba >> shift4;
8276               vec4 rgba = vec4(urgba) * encodeNorm4;
8277               return rgba;
8278            }
8279
8280            vec2 getDataUV(in int stride, in int offset, in vec2 dimensions) {
8281                vec2 samplerUV = vec2(0.0, 0.0);
8282                float d = float(splatIndex * uint(stride) + uint(
8282offset)) / dimensions.x;
8283                samplerUV.y = float(floor(d)) / dimensions.y;
8284                samplerUV.x = fract(d);
8285                return samplerUV;
8286            }
8287
8288            void main () {
8289                uvec4 sampledCenterColor = texture(centersColorsTexture, getDataUV(1, 0, centersColorsTextureSize));
8290                vec3 splatCenter = uintBitsToFloat(uvec3(sampledCenterColor.gba));
8291                vColor = uintToRGBAVec(sampledCenterColor.r);
8292
8293                vPosition = position.xy * 2.0;
8294
8295								uint meshIndex;
8296								for (int i = 1; i < 257; i++) {
8297									if (splatIndex < meshIndexIntervals[i]) {
8298										meshIndex = uint(i - 1);
8299										break;
8300									}
8301								}
8302
8303								float strideMulmeshIndex = float(4u*meshIndex);
8304								float meshMatrixWorldsTextureLength = float(256*4);
8305
8306								mat4 modelMat = mat4(
8307									texture(meshMatrixWorldsTexture, vec2((strideMulmeshIndex+0.0)/meshMatrixWorldsTextureLength, 0)),
8308									texture(meshMatrixWorldsTexture, vec2((strideMulmeshIndex+1.0)/meshMatrixWorldsTextureLength, 0)),
8309									texture(meshMatrixWorldsTexture, vec2((strideMulmeshIndex+2.0)/meshMatrixWorldsTextureLength, 0)),
8310									texture(meshMatrixWorldsTexture, vec2((strideMulmeshIndex+3.0)/meshMatrixWorldsTextureLength, 0))
8311								);
8312								mat4 modelViewMat = viewMatrix * modelMat;
8313								vec4 viewCenter = modelViewMat * vec4(splatCenter, 1.0); 
8314                vec4 clipCenter = projectionMatrix * viewCenter;
8315
8316                vec2 sampledCovarianceA = texture(covariancesTexture, getDataUV(3, 0, covariancesTextureSize)).rg;
8317                vec2 sampledCovarianceB = texture(covariancesTexture, getDataUV(3, 1, covariancesTextureSize)).rg;
8318                vec2 sampledCovarianceC = texture(covariancesTexture, getDataUV(3, 2, covariancesTextureSize)).rg;
8319
8320                vec3 cov3D_M11_M12_M13 = vec3(sampledCovarianceA.rg, sampledCovarianceB.r);
8321                vec3 cov3D_M22_M23_M33 = vec3(sampledCovarianceB.g, sampledCovarianceC.rg);
8322
8323                // Compute the 2D covariance matrix from the upper-right portion of the 3D covariance matrix
8324                mat3 Vrk = mat3(
8325                    cov3D_M11_M12_M13.x, cov3D_M11_M12_M13.y, cov3D_M11_M12_M13.z,
8326                    cov3D_M11_M12_M13.y, cov3D_M22_M23_M33.x, cov3D_M22_M23_M33.y,
8327                    cov3D_M11_M12_M13.z, cov3D_M22_M23_M33.y, cov3D_M22_M23_M33.z
8328                );
8329                float s = 1.0 / (viewCenter.z * viewCenter.z);
8330
8331                mat3 W = transpose(mat3(modelViewMat));
8332                mat3 T = orthoZoom > 0.0 ? W : W * mat3(
8333									focal.x / viewCenter.z, 0., -(focal.x * viewCenter.x) * s,
8334									0., focal.y / viewCenter.z, -(focal.y * viewCenter.y) * s,
8335									0., 0., 0.
8336								);
8337                mat3 cov2Dm = transpose(T) * Vrk * T;
8338                cov2Dm[0][0] += 0.3;
8339                cov2Dm[1][1] += 0.3;
8340
8341                // We are interested in the upper-left 2x2 portion of the projected 3D covariance matrix because
8342                // we only care about the X and Y values. We want the X-diagonal, cov2Dm[0][0],
8343                // the Y-diagonal, cov2Dm[1][1], and the correlation between the two cov2Dm[0][1]. We don't
8344                // need cov2Dm[1][0] because it is a symetric matrix.
8345                vec3 cov2Dv = vec3(cov2Dm[0][0], cov2Dm[0][1], cov2Dm[1][1]);
8346
8347                vec3 ndcCenter = clipCenter.xyz / clipCenter.w;
8348
8349                // We now need to solve for the eigen-values and eigen vectors of the 2D covariance matrix
8350                // so that we can determine the 2D basis for the splat. This is done using the method described
8351                // here: https://people.math.harvard.edu/~knill/teaching/math21b2004/exhibits/2dmatrices/index.html
8352                //
8353                // This is a different approach than in the original work at INRIA. In that work they compute the
8354                // max extents of the 2D covariance matrix in screen space to form an axis aligned bounding rectangle
8355                // which forms the geometry that is actually rasterized. They then use the inverse 2D covariance
8356                // matrix (called 'conic') to determine fragment opacity.
8357                float a = cov2Dv.x;
8358                float d = cov2Dv.z;
8359                float b = cov2Dv.y;
8360                float D = a * d - b * b;
8361                float trace = a + d;
8362                float traceOver2 = 0.5 * trace;
8363                float term2 = sqrt(trace * trace / 4.0 - D);
8364                float eigenValue1 = traceOver2 + term2;
8365								float eigenValue2 = max(traceOver2 - term2, 0.00); // prevent negative eigen value
8366
8367                const float maxSplatSize = 1024.0;
8368                vec2 eigenVector1 = normalize(vec2(b, eigenValue1 - a));
8369                // since the eigen vectors are orthogonal, we derive the second one from the first
8370                vec2 eigenVector2 = vec2(eigenVector1.y, -eigenVector1.x);
8371                vec2 basisVector1 = eigenVector1 * min(sqrt(2.0 * eigenValue1), maxSplatSize);
8372                vec2 basisVector2 = eigenVector2 * min(sqrt(2.0 * eigenValue2), maxSplatSize);
8373
8374                vec2 ndcOffset = vec2(vPosition.x * basisVector1 + vPosition.y * basisVector2) * basisViewport;
8375
8376								if (orthoZoom > 0.0) {
8377									ndcOffset *= orthoZoom;
8378								}
8379
8380                gl_Position = vec4(ndcCenter.xy + ndcOffset, ndcCenter.z, 1.0);
8381            }`,i=`
8382            precision highp float;
8383            #include <common>
8384
8385            uniform vec3 debugColor;
8386
8387            varying vec4 vColor;
8388            varying vec2 vUv;
8389
8390            varying vec2 vPosition;
8391						layout(location = 1) out vec4 gVelocity; 
8392
8393            void main () {
8394                // compute the negative squared distance from the center of the splat to the
8395                // current fragment in the splat's local space.
8396                float A = -dot(vPosition, vPosition);
8397                if (A < -4.0) discard;
8398                vec3 color = vColor.rgb;
8399                A = exp(A) * vColor.a;
8400                gl_FragColor = vec4(color.rgb, A);
8401								gVelocity = vec4(0.0); // so it is ignored by TAA
8402            }`;return new r5({uniforms:{covariancesTexture:{type:"t",value:null},centersColorsTexture:{type:"t",value:null},meshIndexIntervals:{value:e},meshMatrixWorldsTexture:{type:"t",value:null},focal:{type:"v2",value:new tQ},viewport:{type:"v2",value:new tQ},basisViewport:{type:"v2",value:new tQ},debugColor:{type:"v3",value:new ii},covariancesTextureSize:{type:"v2",value:new tQ(1024,1024)},centersColorsTextureSize:{type:"v2",value:new tQ(1024,1024)},orthoZoom:{type:"f",value:-1}},vertexShader:t,fragmentShader:i,transparent:!0,alphaTest:1,blending:1,depthTest:!0,depthWrite:!1,side:2})}static buildGeomtery(e){let t=new rz;t.setIndex([0,1,2,0,2,3]);let i=new rM(new Float32Array(12),3);t.setAttribute("position",i),i.setXYZ(0,-1,-1,0),i.setXYZ(1,-1,1,0),i.setXYZ(2,1,1,0),i.setXYZ(3,1,-1,0),i.needsUpdate=!0;let r=new lf().copy(t),s=new nP(new Uint32Array(e),1,!1);return s.setUsage(35048),r.setAttribute("splatIndex",s),r.instanceCount=e,r}resetLocalSplatDataAndTexturesFromSplatBuffer(){this.updateLocalSplatDataFromSplatBuffer(),this.allocateAndStoreLocalSplatDataInTextures()}updateLocalSplatDataFromSplatBuffer(){this.splatBuffers.forEach(e=>e.buildPreComputedBuffers()),this.covariances=new Float32Array(6*this.splatCount),this.colors=new Uint8Array(4*this.splatCount),this.centers=new Float32Array(3*this.splatCount);let e=0,t=0,i=0;for(let r of this.splatBuffers){let s=r.nsplats;this.colors.subarray(e,e+4*s).set(r.colorsA),e+=4*s,this.centers.subarray(t,t+3*s).set(r.decoded.xyz.denormDequant().data),t+=3*s,this.covariances.subarray(i,i+6*s).set(new Float32Array(r.precomputedCovarianceBufferData)),i+=6*s}}allocateAndStoreLocalSplatDataInTextures(){let e,t,i=this.splatCount,r=new tQ(4096,1024);for(;r.x*r.y*2<6*i;)r.y*=2;let s=new tQ(4096,1024);for(;s.x*s.y*4<4*i;)s.y*=2;if(this.halfPrecisionCovariancesOnGPU){t=new Uint16Array(r.x*r.y*2);for(let e=0;e<this.covariances.length;e++)t[e]=l0.toHalfFloat(this.covariances[e]);e=new nM(t,r.x,r.y,1030,1016)}else(t=new Float32Array(r.x*r.y*2)).set(this.covariances),e=new nM(t,r.x,r.y,1030,1015);e.needsUpdate=!0,this.material.uniforms.covariancesTexture.value=e,this.material.uniforms.covariancesTextureSize.value.copy(r);let a=new Uint32Array(s.x*s.y*4);for(let e=0;e<i;e++){var o;let t=4*e,i=3*e,r=4*e;a[r]=(o=this.colors[t],o+(this.colors[t+1]<<8)+(this.colors[t+2]<<16)+(this.colors[t+3]<<24)),a[r+1]=DE(this.centers[i]),a[r+2]=DE(this.centers[i+1]),a[r+3]=DE(this.centers[i+2])}let l=new nM(a,s.x,s.y,1033,1014);l.internalFormat="RGBA32UI",l.needsUpdate=!0,this.material.uniforms.centersColorsTexture.value=l,this.material.uniforms.centersColorsTextureSize.value.copy(s);let h=new Float32Array(4096);for(let e=0;e<this.meshMatrixWorlds.length;e++)h.set(this.meshMatrixWorlds[e].elements,16*e);let c=new nM(h,1024,1,1023,1015);c.needsUpdate=!0,this.material.uniforms.meshMatrixWorldsTexture.value=c,this.material.uniformsNeedUpdate=!0,this.splatDataTextures={covariances:{data:t,texture:e,size:r},centerColors:{data:a,texture:l,size:s},meshMatrixWorlds:{data:h,texture:c}}}updateIndexes(e){let t=this.geometry;t.attributes.splatIndex.set(e),t.attributes.splatIndex.needsUpdate=!0,t.instanceCount=e.length}updateUniforms(e,t,i,r){this.splatCount>0&&(DC.set(e.x*this.devicePixelRatio,e.y*this.devicePixelRatio),this.material.uniforms.viewport.value.copy(DC),this.material.uniforms.basisViewport.value.set(2/DC.x,2/DC.y),this.material.uniforms.focal.value.set(t,i),this.material.uniforms.orthoZoom.value=r,this.material.uniformsNeedUpdate=!0)}getSplatDataTextures(){return this.splatDataTextures}getSplatCount(){return this.splatCount}getCenters(){return this.centers}getColors(){return this.colors}getCovariances(){return this.covariances}dispose(){this.geometry.dispose(),this.material.dispose(),this.splatDataTextures&&(this.splatDataTextures.covariances.texture.dispose(),this.splatDataTextures.centerColors.texture.dispose(),this.splatDataTextures.meshMatrixWorlds.texture.dispose()),this.removeFromParent()}},DB=new Promise(e=>{DR=e}),Dz=!1;DB.then(e=>D9=e);var DF=class{constructor(e={}){let t,i,r,s,a,o;tS(this,"updateView",(t=new iX,i=[],r=new iv(0,0,-1),s=new iv(0,0,-1),a=new iv,o=new iv,function(e=!1,l){let h=this.updateMatrixWorldsInWorkerIfNeeded(),c=this.cropsChanged();if(!e){s.set(0,0,-1).applyQuaternion(l.quaternion);let e=!1,t=!1;if(.95>=s.dot(r)&&(e=!0),o.copy(l.position).sub(a).length()>=1&&(t=!0),!e&&!t&&!h&&!c&&!this.needsInitialRender)return}this.needsInitialRender=!1,a.copy(l.position),r.copy(s),t.copy(l.matrixWorld).invert(),t.premultiply(this.dummyPerspectiveMatrix),i[0]=l.position.x,i[1]=l.position.y,i[2]=l.position.z;let d={sort:{view:t.elements,cameraPosition:i,splatRenderCount:this.splatRenderCount,splatSortCount:this.splatRenderCount},...h?{newMatrixWorlds:this.meshMatrixWorlds}:{},...c?{newCropsArray:this.cropsArray}:{}};this.sortRunning?this.queuedMessage=d:(this.queuedMessage=null,this.sortRunning=!0,this.sortWorker.postMessage(d))})),this.scene=e.scene,this.currentPage=null,this.devicePixelRatio=window.devicePixelRatio,this.sortWorker=null,this.splatRenderCount=0,this.splatSortCount=0,this.splatMesh=null,this.sortRunning=!1,this.meshMatrixWorlds=null,this.meshMatrixWorldsOld=null,this.cropsArray=null,this.splatEntries=null,this.queuedMessage=null,this.needsInitialRender=!0,this.dummyPerspectiveMatrix=new iX().makePerspective(-1,1,-1,1,.1,1e3)}updateSplatMeshUniforms(e,t){let i=new tQ;null!==this.splatMesh&&this.splatMesh.getSplatCount()>0&&(e.getSize(i),this.cameraFocalLengthX=t.projectionMatrix.elements[0]*this.devicePixelRatio*i.x*.45,this.cameraFocalLengthY=t.projectionMatrix.elements[5]*this.devicePixelRatio*i.y*.45,this.splatMesh.updateUniforms(i,this.cameraFocalLengthX,this.cameraFocalLengthY,t.isPerspectiveCamera?-1:t.zoom*this.devicePixelRatio))}loadSplat(e={}){this.activePage=this.scene.activePage,e.position&&(e.position=new iv().fromArray(e.position)),e.orientation&&(e.orientation=new ig().fromArray(e.orientation)),e.halfPrecisionCovariances=!!e.halfPrecisionCovariances;let t=[];if(this.splatEntries=t,this.activePage.traverseVisibleEntity(e=>{"Splat"===e.data.type&&t.push(e)}),this.splatMesh&&this.splatMesh.dispose(),0===t.length)return this.splatMesh=null,!1;this.meshMatrixWorlds=t.map(e=>e.matrixWorld),this.meshMatrixWorldsOld=t.map(e=>e.matrixWorld.clone()),this.cropsArray=t.map(e=>e.data.crops.map(e=>e.data));let i=t.map(e=>new D9.GSplineBuffer(new Uint8Array(e.data.buffer).buffer)),r=0,s=[0];for(let e of i)r+=e.getSplatCount(),s.push(r);return this.setupSplatMesh(i,r,e.position,e.orientation,e.halfPrecisionCovariances,this.devicePixelRatio,s,this.meshMatrixWorlds),this.setupSortWorker(r),!0}updateMatrixWorldsInWorkerIfNeeded(){let e=this.splatDataTextures.meshMatrixWorlds.data;for(let t=0;t<this.meshMatrixWorlds.length;t++)e.set(this.meshMatrixWorlds[t].elements,16*t);return this.splatDataTextures.meshMatrixWorlds.texture.needsUpdate=!0,!this.meshMatrixWorlds.every((e,t)=>e.equals(this.meshMatrixWorldsOld[t]))&&(this.meshMatrixWorldsOld=this.meshMatrixWorlds.map(e=>e.clone()),!0)}cropsChanged(){let e=!1;
8402return this.splatEntries.forEach((t,i)=>{t.data.crops.forEach((t,r)=>{void 0===this.cropsArray[i][r]?(e=!0,this.cropsArray[i][r]=t.data):Object.entries(t.data).forEach(([t,s])=>{Array.isArray(s)&&s.some((e,s)=>e!==this.cropsArray[i][r][t][s])?(e=!0,this.cropsArray[i][r][t]=s):s!==this.cropsArray[i][r]?.[t]&&(e=!0,this.cropsArray[i][r][t]=s)})}),t.data.crops.length!==this.cropsArray[i]?.length&&(this.cropsArray[i].length=t.data.crops.length,e=!0)}),e}setupSplatMesh(e,t,i=new iv,r=new ig,s=!1,a=1,o,l){this.splatMesh=DL.buildMesh(e,t,s,a,o,l),this.splatMesh.position.copy(i),this.splatMesh.quaternion.copy(r),this.splatMesh.frustumCulled=!1,this.splatMesh.renderOrder=99999,this.splatRenderCount=t,this.splatMesh.onBeforeRender=(e,t,i)=>this.update(e,i)}setupSortWorker(e){this.sortWorker=function(e){let t=new Worker(URL.createObjectURL(new Blob(["(",DM.toString(),")(self)"],{type:"application/javascript"}))),i=atob("AGFzbQEAAAAADwhkeWxpbmsuMAEEAAAAAAETA2AAAGAIf39/f39/f38AYAABfwISAQNlbnYGbWVtb3J5AgMAgIAEAwQDAAECBzkDEV9fd2FzbV9jYWxsX2N0b3JzAAALc29ydEluZGV4ZXMAARNlbXNjcmlwdGVuX3Rsc19pbml0AAIK3gMDAwABC9IDAwF/BnwBfgJAIAdFDQAgAysDUCEMIAMrAzAhDSADKwMQIQ5BACEDRP///////+9/IQtEAAAAAAAAEAAhCgNAIAIgA0ECdGoCfyAOIAEgA0EMbGoiCCoCALuiIA0gCCoCBLuioCAMIAgqAgi7oqBEAAAAAAAAsECiIgmZRAAAAAAAAOBBYwRAIAmqDAELQYCAgIB4CzYCACAJIAsgCSALYxshCyAJIAogCSAKZBshCiADQQFqIgMgB0cNAAsgB0UNACAGuCAKIAuhoyEJQQAhAwNAAn8gCSACIANBAnRqIgEoAgC3IAuhoiIKmUQAAAAAAADgQWMEQCAKqgwBC0GAgICAeAshCCABIAg2AgAgBCAIQQJ0aiIBIAEoAgBBAWo2AgAgA0EBaiIDIAdHDQALCyAGQQJPBEAgBCgCACEIQQEhAwNAIAQgA0ECdGoiASABKAIAIAhqIgg2AgAgA0EBaiIDIAZHDQALCyAHQQFrIgGtIQ8DQCAEIAIgD6dBAnQiA2ooAgBBAnRqIgcgBygCAEEBayIHNgIAIAUgASAHa0ECdGogACADaigCADYCACAPUCEDIA9CAX0hDyADRQ0ACyAGBEAgBEEAIAZBAnT8CwALCwQAQQAL"),r=new Uint8Array(i.length);for(let e=0;e<i.length;e++)r[e]=i.charCodeAt(e);return t.postMessage({init:{sorterWasmBytes:r.buffer,splatCount:e,Constants:{BytesPerFloat:DA.BytesPerFloat,BytesPerInt:DA.BytesPerInt,DepthMapRange:DA.DepthMapRange,MemoryPageSize:DA.MemoryPageSize}}}),t}(e),this.sortWorker.onmessage=e=>{e.data.sortDone?(this.sortRunning=!1,this.splatMesh?.updateIndexes(new Uint32Array(e.data.indexesBuffer)),this.lastSortTime=e.data.sortTime,this.queuedMessage&&(this.sortWorker.postMessage(this.queuedMessage),this.queuedMessage=null)):e.data.sortCanceled?this.sortRunning=!1:e.data.sortSetupPhase1Complete?this.sortWorker.postMessage({positions:this.splatMesh.getCenters().buffer,meshMatrixWorlds:this.splatMesh.meshMatrixWorlds,meshIndexIntervals:this.splatMesh.meshIndexIntervals,cropsArray:this.cropsArray}):e.data.sortSetupComplete&&(this.splatDataTextures=this.splatMesh.getSplatDataTextures(),this.scene.activePage.add(this.splatMesh),this.needsInitialRender=!0)}}update(e,t){null!==this.splatMesh&&(this.updateSplatMeshUniforms(e,t),this.updateView(!1,t))}getSplatMesh(){return this.splatMesh}},DN=new rS;DN.wireframe=!0;var Dk=new iv,DU=class extends nb{constructor(e,t){super(),this.data=e,this.sharedAssets=t,this.enableHelpers=!1,this.wireframeState=!1,this.needsTransmissionDirty=!0,this.needsNormalDirty=!0,this._needsTransmission=!1,this._needsNormal=!1,this.geometryCacheChanged=!1,this.splatViewer=null,this.shapeBlendIntances=[],this.entityByUuid={},this.entityIdentityToEntity={},this.toExpandCloner=new Set,this.toUpdateCloner=new Set,this.pendingCommands=[],this.pathConstraints=new D_,this.invisibleObjects=new EO("jflkdsafjasdifjaslk",{...v4.defaultData,visible:!1,name:"buildin invisible"}),this.needsRecomputeInstances=!1,this.init(e,t),this.matrixAutoUpdate=!1,this.errorPage=new PD("fdasfa",{...yr.defaultData,name:""},{shared:t,scene:this})}markGeometryCacheDirty(){this.geometryCacheChanged=!0}markNeedsUpdateRendererDirty(){this.needsTransmissionDirty=!0,this.needsNormalDirty=!0}needsTransmission(){let e;return this.needsTransmissionDirty&&(this._needsTransmission=(e=!1,this.traverseEntity(t=>{if(t instanceof Mf){if(Array.isArray(t.material))for(let i=0;i<t.material.length;i++)Dy(t,t.material[i])&&(e=!0);else Dy(t,t.material)&&(e=!0)}}),e),this.needsTransmissionDirty=!1),this._needsTransmission}needsNormal(){let e;return this.needsNormalDirty&&(this._needsNormal=(e=!1,this.traverseEntity(t=>{if(t instanceof Mf){if(Array.isArray(t.material))for(let i=0;i<t.material.length;
8402i++)Dv(t,t.material[i])&&(e=!0);else Dv(t,t.material)&&(e=!0)}}),e),this.needsNormalDirty=!1),this._needsNormal}registerInstanceAndSetUuid(e){let t=e.identity.join("-"),i=this.entityIdentityToEntity[t];i&&(e.uuid=i.uuid),this.entityIdentityToEntity[t]=e,this.entityByUuid[e.uuid]=e}markPenumbraSizeDirty(){for(let e of this.children)e instanceof PD&&(e.penumbraSizeArrayCache=null)}findInstance(e){return this.entityIdentityToEntity[e.join("-")]}get bgColor(){return this.activePage.bgColor}get postprocessing(){return this.activePage.data.postprocessing}getWithSortKey(e){let t=this.find(e);if(void 0===t)return;let i=[],r=t;for(;r!==this;){let e=r,t=(r=r.parent).children.indexOf(e);i.splice(0,0,t)}return{entity:t,sortKey:i}}getAllSorted(e){let t=[];for(let i of e){let e=this.getWithSortKey(i.id);void 0!==e&&t.push(e)}return t.sort((e,t)=>u$(e.sortKey,t.sortKey)),t.map(e=>e.entity)}nonExistOrDescendantOf(e,t){let i=this.find(e);if(void 0===i)return!0;for(;i;){if(i.uuid===t)return!0;i=i.parent}return!1}find(e){if(this.activePage&&this.activePage.personalCamera.parent&&("f23858d0-4a3b-4bd8-8173-66ed0af7f6fb-personalCamera"===e||e===mh))return this.activePage.personalCamera;if(""===e||void 0===e)return;let t=this.entityByUuid[e];return void 0===t?this.getObjectByProperty("uuid",e):t}find2D(e){for(let t of this.children)if(t instanceof PD&&t.uiScene){let i=t.uiScene.find(e);if(i)return i}}findScene2DfromObject2D(e){for(let t of this.children)if(t instanceof PD&&t.uiScene&&t.uiScene.find(e))return t.uiScene}find2DInUIObjects(e){let t;return this.traverseEntity(i=>{void 0===t&&i instanceof Pk&&(t=i.uiCanvas.find(e))}),t}traverse2D(e){for(let t of this.children)t instanceof PD&&t.uiScene&&t.uiScene.traverse(e)}debugEnsureEntity(e){let t=this.find(e);t?Array.isArray(t.identity)&&void 0===this.findInstance(t.identity)&&console.error("not found instance"):console.error("not found")}addPendingExpandCloner(e){this.toExpandCloner.add(e)}addPendingUpdateCloner(e){this.toUpdateCloner.add(e)}markToExpandCloner(e){this.toExpandCloner.add(e),e.traverseEntityAncestors(e=>{this.toExpandCloner.add(e)})}doPendingExpandCloner(){this.toExpandCloner.forEach(e=>{e.expandCloner(this)}),this.toExpandCloner.clear()}doPendingUpdateCloner(){this.toUpdateCloner.forEach(e=>{e.cloner?.update()}),this.toUpdateCloner.clear()}doPendingUpdates(){this.doPendingExpandCloner(),this.doPendingUpdateCloner(),this.applyPendingCommands()}addPendingCommand(e){this.pendingCommands.push(e)}applyPendingCommands(){this.pendingCommands.forEach(e=>e()),this.pendingCommands.length=0}updateByLibOp(e,t){1===e.path.length&&"components"===e.path[0]&&1===e.type&&this.createChildrenObjects([{...e.data.asset,id:e.id}],this.invisibleObjects,t)}updateTreeByOp(e,t){if(0===e.path.length&&7===e.type){let i=null===e.parent?this:this.find(e.parent);if(void 0===i)throw Error("unexpected");let r=this.createObject(e.id,e.data,e.children,i,e.localIndex,t);r.updateVisible(this),r.resetBBoxNeedsUpdate(),ES(r)&&E_(r.parent)&&(r.invali
vendor: 9,708 bytes, line 8402
8402dateUpstreamBooleanData(),r.parent.invalidateDownstreamBooleanData().recomputeBoolean()),this.markNeedsRecomputeInstancesForAncessors(i),this.markNeedsRecomputeInstancesForChildren(r),this.markToExpandCloner(r),this.markPenumbraSizeDirty(),r.updatePathSnapping()}else if(0===e.path.length&&8===e.type){let t=this.find(e.id);if(void 0===t)throw Error("unexpected");t.traverseEntity(e=>{e instanceof Do&&(this.shapeBlendIntances=this.shapeBlendIntances.filter(t=>t!==e))}),this.markToExpandCloner(t),t.resetBBoxNeedsUpdate(),this.unregisterObject(t);let i=t.parent;this.markNeedsRecomputeInstancesForAncessors(i),this.markNeedsRecomputeInstancesForChildren(t),this.markPenumbraSizeDirty(),t.parent.remove(t),E_(t.parent)&&(t.parent.invalidateUpstreamBooleanData(),t.parent.invalidateDownstreamBooleanData().recomputeBoolean()),ES(t)&&(t.freeBooleanPointer(),i instanceof Eb&&i.invalidateDownstreamBooleanData().recomputeBoolean()),t instanceof PR&&t.detachShape(),this.disposeAndUnregisterEntityRecursivelyIfNotReregistered(t),this.pathConstraints.removeDependencies(t.uuid),t.updatePathSnapping()}else if(0===e.path.length&&9===e.type){let t=this.find(e.id);if(void 0===t)throw Error("unexpected");this.markNeedsRecomputeInstancesForChildren(t);let i=t.parent;this.markNeedsRecomputeInstancesForAncessors(i),t.cloner?.resetOnMove(),this.markToExpandCloner(t);let r=null===e.parent?this:this.find(e.parent);if(void 0===r)throw Error("unexpected");r.add(t),this.markNeedsRecomputeInstancesForAncessors(r),this.markToExpandCloner(t),t.invalidateClonerTransform(t),t.updateVisible(this),t.resetBBoxNeedsUpdate(),this.markPenumbraSizeDirty();let s=e.localIndex;r.children.splice(s,0,r.children.pop()),ES(t)&&(t.invalidateUpstreamBooleanData(),E_(t.parent)?t.parent.invalidateDownstreamBooleanData().recomputeBoolean():i instanceof Eb&&i.invalidateDownstreamBooleanData().recomputeBoolean()),t.updatePathSnapping()}this.markNeedsUpdateRendererDirty(),this.markGeometryCacheDirty()}get playPage(){return this.find(this.data.publish.playPage)??this.errorPage}updatePage(e){for(let t of(this.activePage&&this.activePage.onDeactive(),this.activePage=this.errorPage,this.children))t instanceof PD&&(t.visible=t.uuid===e,t.visible&&(this.activePage=t,this.activePage.onActive(this)));this.activePage!==this.splatViewer?.activePage&&this.reloadSplats()}updateEntityByOp(e,t,i,r){if(0===t.type){if(("overrides"in t.props||"component"in t.props)&&this.markNeedsRecomputeInstances(),"visible"in t.props&&this.markPenumbraSizeDirty(),t.path.includes("overrides")&&"states"in t.props){let{rest:e}=t.props;t={...t,props:e},this.markNeedsRecomputeInstances()}"pathSnapping"===t.path[0]&&void 0!==t.props.pathId&&this.pathConstraints.setConstraint(e,t.props.pathId)}let s=this.find(e);if(s)try{(function(e,t,i,r){e.updateByOp(t,i,r,!1)})(s,t,i,{scene:this,shared:r}),s instanceof Mb&&s.updateGeometryGroupsIfNeeded()}catch(e){console.error(e)}}updateEntity2DByOp(e,t,i,r,s,a=[]){e.updateEntityByOp(t,i,r,s),this.traverseEntity(e=>{(e instanceof Pk||e instanceof PD)&&(a.includes(e.frameId??"")||e.frameId===t)&&e.updateEntity2DByOp(t,i,r,s)})}get activeCamera(){return this.activePage.activeCamera}switchActiveCamera(e){this.activePage.switchActiveCamera(e)}isInvisibleObjects(e){return e===this.invisibleObjects||e.hasAnccestor(this.invisibleObjects)}init(e,t){let i=Object.entries(t.data.lib.components).map((e,t)=>({data:e[1].asset.data,children:e[1].asset.children,id:e[0],fi:t}));this.invisibleObjects.updateState(this.invisibleObjects.data,{scene:this,shared:t}),this.add(this.invisibleObjects),this.createChildrenObjects(i,this.invisibleObjects,t),this.createChildrenObjects(e.objects,this,t),this.updatePage(e.publish.playPage),this.activePage.switchToPlayCamera(),this.expandInstances(t,!0),this.traverseEntity(e=>{e instanceof Eg&&e.updateUp()}),this.doPendingExpandCloner(),this.applyPendingCommands()}markNeedsRecomputeInstances(){this.needsRecomputeInstances=!0}markNeedsRecomputeInstancesForChildren(e){e.traverseEntity(e=>{("Component"===e.data.type||"Instance"===e.data.type)&&this.markNeedsRecomputeInstances()})}markNeedsRecomputeInstancesForAncessors(e){wQ.is(e)&&("Component"===e.data.type&&this.markNeedsRecomputeInstances(),e.traverseAncestors(e=>{wQ.is(e)&&"Component"===e.data.type&&this.markNeedsRecomputeInstances()}))}relativeizeInner(e,t,i,r,s,a,o){if(e){let l=r.find(e);l&&l!==r&&s.forInstancesRec(r=>{r.data=pW(r.data,s=>{let l=s.events.data(o.id),h=r.goUp(a);if(h){let r=[...uJ(h.identity),e].join("-"),s=this.entityIdentityToEntity[r];if(s){let e=s.uuid;p1.zoom(l,t)[i]=e}else console.warn("cannot find instance")}}).data})}}rewriteActions(e,t,i,r,s,a){e.forEach(e=>{"Transition"===e.data.type?this.relativeizeInner(e.data.object,[...t,e.id],"object",i,r,s,a):"Animation"===e.data.type?this.relativeizeInner(e.data.object,[...t,e.id],"object",i,r,s,a):"Conditional"===e.data.type&&(this.rewriteActions(e.data.ifActions,[...t,e.id,"ifActions"],i,r,s,a),this.rewriteActions(e.data.elseActions,[...t,e.id,"elseActions"],i,r,s,a))})}rewriteEventsBeforeGoToPlayMode(){this.traverseEntity(e=>{if(e instanceof PB&&"string"==typeof e.identity&&"Component"===e.data.type)return e.traverseEntity((t,i)=>{t.data.events.forEach(r=>{if("GameControl"===r.data.type){let s=!1;if(t.forInstancesRec(e=>{e.data=pW(e.data,t=>{e.isInstanceRoot||(t.events.delete(r.id),s=!0)}).data}),!1===s)for(let s of yS.list)this.rewriteActions(r.data.gameActions[s],["gameActions",s],e,t,i,r)}else"Conditional"===r.data.type?("Distance"===r.data.condition.type?(this.relativeizeInner(r.data.condition.fromObject,["condition"],"fromObject",e,t,i,r),this.relativeizeInner(r.data.condition.toObject,["condition"],"toObject",e,t,i,r)):"State"===r.data.condition.type?this.relativeizeInner(r.data.condition.object,["condition"],"object",e,t,i,r):"Comparison"===r.data.condition.type&&("Property"===r.data.condition.lOperand.type&&this.relativeizeInner(r.data.condition.lOperand.value[0],["condition","lOperand","value"],0,e,t,i,r),"Property"===r.data.condition.rOperand.type&&this.relativeizeInner(r.data.condition.rOperand.value[0],["condition","rOperand","value"],0,e,t,i,r)),this.rewriteActions(r.data.inActions,["inActions"],e,t,i,r),this.rewriteActions(r.data.outActions,["outActions"],e,t,i,r)):"actions"in r.data&&this.rewriteActions(r.data.actions,["actions"],e,t,i,r)})}),!0})}expandInstances(e,t,i){let r=new Set;for(let s of(this.traverseEntity(s=>{if(s instanceof PB&&s.isInstanceRoot)return s.expandInstanceChildren({scene:this,shared:e,pendingDeletes:r}),t||s.resetBBoxNeedsUpdate(),i&&s.traverseEntity(e=>{i.addClip(e)}),!0}),r))this.disposeAndUnregisterEntityRecursivelyIfNotReregistered(s),Pz(s)}recomputeInstances(e,t){this.needsRecomputeInstances&&(this.needsRecomputeInstances=!1,this.traverseEntity(e=>{e instanceof PB&&e.isInstanceRoot&&(e.component=void 0)}),this.expandInstances(e,!1,t))}disposeAndUnregisterEntityRecursivelyIfNotReregistered(e){e.traverseEntity(e=>{let t="string"==typeof e.identity?e.identity:e.identity.join("-");this.entityIdentityToEntity[t]===e&&(delete this.entityByUuid[e.uuid],delete this.entityIdentityToEntity[t]),e.dispose()})}clearScene(){for(let e of this.children)wQ.is(e)&&e.disposeRecursively();this.children.length=0}resetAfterClear(e,t){this.init(e,t)}raycast(e){return this.raycast1(e,!1)}raycast1(e,t){let i=[],r=s=>{for(let a of s.children){let s=a.cloner;if(wQ.is(a)&&!a.raycastLock&&(a.visible||s?.object.data.visible)){if(!0===t&&a.isInstanceRoot){let t=[];if(e.intersectObject(a,!0,t),t.length){let e=t[0];e.object=a,e.point.applyMatrix4(e.object.matrixWorld);let r=a.matrixWorld.clone().invert();e.point.applyMatrix4(r),i.push(e)}}else(ES(a)||EE(a)&&this.enableHelpers&&a.objectHelper.visible)&&(e.intersectObject(a,!1,i),DS(a,e,i)),r(a)}}};return r(this.activePage),i}raycastWithClones(e){let t=[],i=r=>{for(let s of r.children){let r=s.cloner;wQ.is(s)&&(s.visible||r?.object.data.visible)&&((ES(s)||EE(s)&&this.enableHelpers&&s.objectHelper.visible)&&(e.intersectObject(s,!1,t),DS(s,e,t,!0)),i(s))}};return i(this),t}forEachEntity(e){for(let t of this.children)wQ.is(t)&&e(t)}traverseConcreteEntity(e){for(let t of this.children)wQ.is(t)&&t.isConcreteEntity&&t.traverseEntity(e)}traverseEntity(e){for(let t of this.children)wQ.is(t)&&t.traverseEntity(e)}updateFont(e,t){this.traverseEntity(i=>{if(i instanceof Mb&&"Mesh"===i.data.type&&("TextGeometry"===i.data.geometry.type||"InputGeometry"===i.data.geometry.type)&&i.data.geometry.font===e){let r=i.geometry,s=i.data.geometry;r.updateFont(e,t).then(()=>{r.update(s);let e=i.invalidateDownstreamBooleanData();E_(e)&&e.recomputeBoolean()})}})}traverseObject(e){for(let t of this.children)xc.is(t)&&t.traverseObject(e)}traverseVisibleEntity(e){for(let t of this.children)wQ.is(t)&&t.visible&&t.traverseVisibleEntity(e)}dispose(){this.clearScene()}createChildrenObjects(e,t,i){let r=0;for(let s of e)this.createObject(s.id,s.data,s.children,t,r,i),r+=1}registerObjectCreatedInLegacy(e){this.entityByUuid[e.uuid]=e}unregisterObject(e){for(let t of(delete this.entityByUuid[e.uuid],e.children))this.unregisterObject(t)}createObject(e,t,i,r,s,a){let o={scene:this,shared:a},l=De(e,t,o);return l instanceof Do&&this.shapeBlendIntances.push(l),l&&(this.entityByUuid[e]=l,r.add(l),r.children.splice(s,0,r.children.pop()),i.length>0&&(l.isInstanceRoot?console.error("instance should not have children!"):this.createChildrenObjects(i,l,a)),l.updateState(t,o),l instanceof Mb&&l.updateGeometryGroupsIfNeeded(),l.updateVisible(this),l.cloner&&this.toExpandCloner.add(l),t.pathSnapping?.pathId&&this.pathConstraints.setConstraint(e,t.pathSnapping.pathId)),"Empty"===t.type&&t.animations&&l.traverseEntity(e=>{let t=e.dataPatched;
8402if(e instanceof Mb&&t.bones&&t.boneInverses){let i=new nT(t.bones.map(e=>this.find(e)),t.boneInverses.map(e=>new iX().fromArray(e)));e.bind(i,e.bindMatrix)}else e.matrixAutoUpdate=!0}),l}getCenter(e){let t=[];for(let i=0,r=e.length;i<r;++i){let{id:r,recursive:s}=e[i],a=this.find(r),o=s?a.recursiveBBox:a.singleBBox;t.push(...o.vertices)}let i=new ib;return i.setFromPoints(t),i.getCenter(Dk),Dk}copyMatrixWorld(e,t){if(null===e){t.identity();return}let i=this.find(e);i?t.copy(i.matrixWorld):t.identity()}copyParentMatrixWorld(e,t){if(null===e){t.identity();return}let i=this.find(e)?.parent;i?t.copy(i.matrixWorld):t.identity()}traverseMaterial(e){this.traverseEntity(t=>{if(t instanceof SP){if(Array.isArray(t.material))for(let i=0;i<t.material.length;i++)t.material[i]instanceof AC&&e(t.material[i]);else t.material instanceof AC&&e(t.material)}})}updateViewPlaneSize(e,t,i=!1){this.traverseConcreteEntity(r=>{r instanceof Eg&&r.setViewplaneSize(e,t,i)})}initializeSplatViewer(){this.splatViewer=new DF({scene:this}),this.reloadSplats()}reloadSplats(){this.splatViewer?.loadSplat()}},DV=(e,t)=>{let i=t.x-e.x,r=t.y-e.y;return Math.sqrt(i*i+r*r)},Dj=(e,t)=>{let i=t.x-e.x;return DW(Math.atan2(t.y-e.y,i))},DG=(e,t,i)=>{let r={x:0,y:0};return i=DH(i),r.x=e.x-t*Math.cos(i),r.y=e.y-t*Math.sin(i),r},DH=e=>Math.PI/180*e,DW=e=>180/Math.PI*e,Dq=e=>isNaN(e.buttons)?0!==e.pressure:0!==e.buttons,DX=new Map,DY=e=>{DX.has(e)&&clearTimeout(DX.get(e)),DX.set(e,setTimeout(e,100))},DQ=(e,t,i)=>{let r=t.split(/[ ,]+/g),s;for(let t=0;t<r.length;t+=1)s=r[t],e.addEventListener?e.addEventListener(s,i,!1):e.attachEvent&&e.attachEvent(s,i)},DK=(e,t,i)=>{let r=t.split(/[ ,]+/g),s;for(let t=0;t<r.length;t+=1)s=r[t],e.removeEventListener?e.removeEventListener(s,i):e.detachEvent&&e.detachEvent(s,i)},DZ=e=>(e.preventDefault(),e.type.match(/^touch/)?e.changedTouches:e),DJ=()=>{if(!(typeof window>"u"))return{x:void 0!==window.pageXOffset?window.pageXOffset:(document.documentElement||document.body.parentNode||document.body).scrollLeft,y:void 0!==window.pageYOffset?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop}},D$=(e,t)=>{t.top||t.right||t.bottom||t.left?(e.style.top=t.top,e.style.right=t.right,e.style.bottom=t.bottom,e.style.left=t.left):(e.style.left=t.x+"px",e.style.top=t.y+"px")},D0=(e,t,i)=>{let r=D2(e);for(let e in r)if(r.hasOwnProperty(e)){if("string"==typeof t)r[e]=t+" "+i;else{let s="";for(let e=0,r=t.length;e<r;e+=1)s+=t[e]+" "+i+", ";r[e]=s.slice(0,-2)}}return r},D1=(e,t)=>{let i=D2(e);for(let e in i)i.hasOwnProperty(e)&&(i[e]=t);return i},D2=e=>{let t={};return t[e]="",["webkit","Moz","o"].forEach(function(i){t[i+e.charAt(0).toUpperCase()+e.slice(1)]=""}),t},D3=(e,t)=>{for(let i in t)t.hasOwnProperty(i)&&(e[i]=t[i]);return e},D4=(e,t)=>{let i={};for(let r in e)e.hasOwnProperty(r)&&t.hasOwnProperty(r)?i[r]=t[r]:e.hasOwnProperty(r)&&(i[r]=e[r]);return i},D5=(e,t)=>{if(e.length)for(let i=0,r=e.length;i<r;i+=1)t(e[i]);else t(e)},D6=(e,t,i)=>({x:Math.min(Math.max(e.x,t.x-i),t.x+i),y:Math.min(Math.max(e.y,t.y-i),t.y+i)});"u">typeof window&&(D7="ontouchstart"in window,Ie=!!window.PointerEvent,It=!!window.MSPointerEvent);var D8,D9,D7,Ie,It,Ii,Ir={touch:{start:"touchstart",move:"touchmove",end:"touchend, touchcancel"},mouse:{start:"mousedown",move:"mousemove",end:"mouseup"},pointer:{start:"pointerdown",move:"pointermove",end:"pointerup, pointercancel"},MSPointer:{start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}},Is={};function Ia(){}function In(e,t){return this.identifier=t.identifier,this.position=t.position,this.frontPosition=t.frontPosition,this.collection=e,this.defaults={size:100,threshold:.1,color:"white",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:1,mode:"dynamic",zone:document.body,lockX:!1,lockY:!1,shape:"circle"},this.config(t),"dynamic"===this.options.mode&&(this.options.restOpacity=0),this.id=In.id,In.id+=1,this.buildEl().stylize(),this.instance={el:this.ui.el,on:this.on.bind(this),off:this.off.bind(this),show:this.show.bind(this),hide:this.hide.bind(this),add:this.addToDom.bind(this),remove:this.removeFromDom.bind(this),destroy:this.destroy.bind(this),setPosition:this.setPosition.bind(this),resetDirection:this.resetDirection.bind(this),computeDirection:this.computeDirection.bind(this),trigger:this.trigger.bind(this),position:this.position,frontPosition:this.frontPosition,ui:this.ui,identifier:this.identifier,id:this.id,options:this.options},this.instance}function Io(e,t){this.nipples=[],this.idles=[],this.actives=[],this.ids=[],this.pressureIntervals={},this.manager=e,this.id=Io.id,Io.id+=1,this.defaults={zone:document.body,multitouch:!1,maxNumberOfNipples:10,mode:"dynamic",position:{top:0,left:0},catchDistance:200,size:100,threshold:.1,color:"white",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:1,lockX:!1,lockY:!1,shape:"circle",dynamicPage:!1,follow:!1},this.config(t),("static"===this.options.mode||"semi"===this.options.mode)&&(this.options.multitouch=!1),this.options.multitouch||(this.options.maxNumberOfNipples=1);let i=getComputedStyle(this.options.zone.parentElement);return i&&"flex"===i.display&&(this.parentIsFlex=!0),this.updateBox(),this.prepareNipples(),this.bindings(),this.begin(),this.nipples}function Il(e){var t=this;t.ids={},t.index=0,t.collections=[],t.scroll=DJ(),t.config(e),t.prepareCollections();var i=function(){var e;
8402t.collections.forEach(function(i){i.forEach(function(i){e=i.el.getBoundingClientRect(),i.position={x:t.scroll.x+e.left,y:t.scroll.y+e.top}})})};if(typeof window>"u")return t.collections;DQ(window,"resize",function(){DY(i)});var r=function(){t.scroll=DJ()};return DQ(window,"scroll",function(){DY(r)}),t.collections}Ie?Ii=Ir.pointer:It?Ii=Ir.MSPointer:D7?(Ii=Ir.touch,Is=Ir.mouse):Ii=Ir.mouse,Ia.prototype.on=function(e,t){var i,r=e.split(/[ ,]+/g);this._handlers_=this._handlers_||{};for(var s=0;s<r.length;s+=1)i=r[s],this._handlers_[i]=this._handlers_[i]||[],this._handlers_[i].push(t);return this},Ia.prototype.off=function(e,t){return this._handlers_=this._handlers_||{},void 0===e?this._handlers_={}:void 0===t?this._handlers_[e]=null:this._handlers_[e]&&this._handlers_[e].indexOf(t)>=0&&this._handlers_[e].splice(this._handlers_[e].indexOf(t),1),this},Ia.prototype.trigger=function(e,t){var i,r=this,s=e.split(/[ ,]+/g);r._handlers_=r._handlers_||{};for(var a=0;a<s.length;a+=1)i=s[a],r._handlers_[i]&&r._handlers_[i].length&&r._handlers_[i].forEach(function(e){e.call(r,{type:i,target:r},t)})},Ia.prototype.config=function(e){this.options=this.defaults||{},e&&(this.options=D4(this.options,e))},Ia.prototype.bindEvt=function(e,t){var i=this;return i._domHandlers_=i._domHandlers_||{}
8402,i._domHandlers_[t]=function(){"function"==typeof i["on"+t]?i["on"+t].apply(i,arguments):console.warn('[WARNING] : Missing "on'+t+'" handler.')},DQ(e,Ii[t],i._domHandlers_[t]),Is[t]&&DQ(e,Is[t],i._domHandlers_[t]),i},Ia.prototype.unbindEvt=function(e,t){return this._domHandlers_=this._domHandlers_||{},DK(e,Ii[t],this._domHandlers_[t]),Is[t]&&DK(e,Is[t],this._domHandlers_[t]),delete this._domHandlers_[t],this},In.prototype=new Ia,In.constructor=In,In.id=0,In.prototype.buildEl=function(e){return this.ui={},this.options.dataOnly||(this.ui.el=document.createElement("div"),this.ui.back=document.createElement("div"),this.ui.front=document.createElement("div"),this.ui.el.className="nipple collection_"+this.collection.id,this.ui.back.className="back",this.ui.front.className="front",this.ui.el.setAttribute("id","nipple_"+this.collection.id+"_"+this.id),this.ui.el.appendChild(this.ui.back),this.ui.el.appendChild(this.ui.front)),this},In.prototype.stylize=function(){if(this.options.dataOnly)return this;var e=this.options.fadeTime+"ms",t=D1("borderRadius","50%"),i=D0("transition","opacity",e),r={};return r.el={position:"absolute",opacity:this.options.restOpacity,display:"block",zIndex:999},r.back={position:"absolute",display:"block",width:this.options.size+"px",height:this.options.size+"px",marginLeft:-this.options.size/2+"px",marginTop:-this.options.size/2+"px",background:"rgba(255, 255, 255, .4)",border:"solid 2px rgba(0, 0, 0, .1)"},r.front={width:this.options.size/2+"px",height:this.options.size/2+"px",position:"absolute",display:"block",marginLeft:-this.options.size/4+"px",marginTop:-this.options.size/4+"px",background:"rgba(255, 255, 255, .8)",border:"solid 2px rgba(0, 0, 0, .1)"},D3(r.el,i),"circle"===this.options.shape&&D3(r.back,t),D3(r.front,t),this.applyStyles(r),this},In.prototype.applyStyles=function(e){for(var t in this.ui)if(this.ui.hasOwnProperty(t))for(var i in e[t])this.ui[t].style[i]=e[t][i];return this},In.prototype.addToDom=function(){return this.options.dataOnly||document.body.contains(this.ui.el)||this.options.zone.appendChild(this.ui.el),this},In.prototype.removeFromDom=function(){return this.options.dataOnly||!document.body.contains(this.ui.el)||this.options.zone.removeChild(this.ui.el),this},In.prototype.destroy=function(){clearTimeout(this.removeTimeout),clearTimeout(this.showTimeout),clearTimeout(this.restTimeout),this.trigger("destroyed",this.instance),this.removeFromDom(),this.off()},In.prototype.show=function(e){var t=this;return t.options.dataOnly||(clearTimeout(t.removeTimeout),clearTimeout(t.showTimeout),clearTimeout(t.restTimeout),t.addToDom(),t.restCallback(),setTimeout(function(){t.ui.el.style.opacity=1},0),t.showTimeout=setTimeout(function(){t.trigger("shown",t.instance),"function"==typeof e&&e.call(this)},t.options.fadeTime)),t},In.prototype.hide=function(e){var t=this;if(t.options.dataOnly)return t;if(t.ui.el.style.opacity=t.options.restOpacity,clearTimeout(t.removeTimeout),clearTimeout(t.showTimeout),clearTimeout(t.restTimeout),t.removeTimeout=setTimeout(function(){var i="dynamic"===t.options.mode?"none":"block";t.ui.el.style.display=i,"function"==typeof e&&e.call(t),t.trigger("hidden",t.instance)},t.options.fadeTime),t.options.restJoystick){let i=t.options.restJoystick,r={};r.x=!0===i||!1!==i.x?0:t.instance.frontPosition.x,r.y=!0===i||!1!==i.y?0:t.instance.frontPosition.y,t.setPosition(e,r)}return t},In.prototype.setPosition=function(e,t){var i=this;i.frontPosition={x:t.x,y:t.y};var r=i.options.fadeTime+"ms",s={};s.front=D0("transition",["top","left"],r);var a={front:{}};a.front={left:i.frontPosition.x+"px",top:i.frontPosition.y+"px"},i.applyStyles(s),i.applyStyles(a),i.restTimeout=setTimeout(function(){"function"==typeof e&&e.call(i),i.restCallback()},i.options.fadeTime)},In.prototype.restCallback=function(){var e={};e.front=D0("transition","none",""),this.applyStyles(e),this.trigger("rested",this.instance)},In.prototype.resetDirection=function(){this.direction={x:!1,y:!1,angle:!1}},In.prototype.computeDirection=function(e){var t,i,r,s=e.angle.radian,a=Math.PI/4,o=Math.PI/2;if(s>a&&s<3*a&&!e.lockX?t="up":s>-a&&s<=a&&!e.lockY?t="left":s>-(3*a)&&s<=-a&&!e.lockX?t="down":e.lockY||(t="right"),e.lockY||(i=s>-o&&s<o?"left":"right"),e.lockX||(r=s>0?"up":"down"),e.force>this.options.threshold){var l,h={};for(l in this.direction)this.direction.hasOwnProperty(l)&&(h[l]=this.direction[l]);var c={};for(l in this.direction={x:i,y:r,angle:t},e.direction=this.direction,h)h[l]===this.direction[l]&&(c[l]=!0);if(c.x&&c.y&&c.angle)return e;c.x&&c.y||this.trigger("plain",e),c.x||this.trigger("plain:"+i,e),
8402c.y||this.trigger("plain:"+r,e),c.angle||this.trigger("dir dir:"+t,e)}else this.resetDirection();return e},Io.prototype=new Ia,Io.constructor=Io,Io.id=0,Io.prototype.prepareNipples=function(){var e=this.nipples;e.on=this.on.bind(this),e.off=this.off.bind(this),e.options=this.options,e.destroy=this.destroy.bind(this),e.ids=this.ids,e.id=this.id,e.processOnMove=this.processOnMove.bind(this),e.processOnEnd=this.processOnEnd.bind(this),e.get=function(t){if(void 0===t)return e[0];for(var i=0,r=e.length;i<r;i+=1)if(e[i].identifier===t)return e[i];return!1}},Io.prototype.bindings=function(){this.bindEvt(this.options.zone,"start"),this.options.zone.style.touchAction="none",this.options.zone.style.msTouchAction="none"},Io.prototype.begin=function(){var e=this.options;if("static"===e.mode){var t=this.createNipple(e.position,this.manager.getIdentifier());t.add(),this.idles.push(t)}},Io.prototype.createNipple=function(e,t){var i=this.manager.scroll,r={},s=this.options,a={x:this.parentIsFlex?i.x:i.x+this.box.left,y:this.parentIsFlex?i.y:i.y+this.box.top};if(e.x&&e.y)r={x:e.x-a.x,y:e.y-a.y};else if(e.top||e.right||e.bottom||e.left){var o=document.createElement("DIV");o.style.display="hidden",o.style.top=e.top,o.style.right=e.right,o.style.bottom=e.bottom,o.style.left=e.left,o.style.position="absolute",s.zone.appendChild(o);var l=o.getBoundingClientRect();s.zone.removeChild(o),r=e,e={x:l.left+i.x,y:l.top+i.y}}var h=new In(this,{color:s.color,size:s.size,threshold:s.threshold,fadeTime:s.fadeTime,dataOnly:s.dataOnly,restJoystick:s.restJoystick,restOpacity:s.restOpacity,mode:s.mode,identifier:t,position:e,zone:s.zone,frontPosition:{x:0,y:0},shape:s.shape});return s.dataOnly||(D$(h.ui.el,r),D$(h.ui.front,h.frontPosition)),this.nipples.push(h),this.trigger("added "+h.identifier+":added",h),this.manager.trigger("added "+h.identifier+":added",h),this.bindNipple(h),h},Io.prototype.updateBox=function(){this.box=this.options.zone.getBoundingClientRect()},Io.prototype.bindNipple=function(e){var t,i=this,r=function(e,r){t=e.type+" "+r.id+":"+e.type,i.trigger(t,r)};e.on("destroyed",i.onDestroyed.bind(i)),e.on("shown hidden rested dir plain",r),e.on("dir:up dir:right dir:down dir:left",r),e.on("plain:up plain:right plain:down plain:left",r)},Io.prototype.pressureFn=function(e,t,i){var r=this,s=0;clearInterval(r.pressureIntervals[i]),r.pressureIntervals[i]=setInterval((function(){var i=e.force||e.pressure||e.webkitForce||0;i!==s&&(t.trigger("pressure",i),r.trigger("pressure "+t.identifier+":pressure",i),s=i)}).bind(r),100)},Io.prototype.onstart=function(e){var t=this,i=t.options,r=e;return e=DZ(e),t.updateBox(),D5(e,function(s){t.actives.length<i.maxNumberOfNipples?t.processOnStart(s):r.type.match(/^touch/)&&(Object.keys(t.manager.ids).forEach(function(i){if(0>Object.values(r.touches).findIndex(function(e){return e.identifier===i})){var s=[e[0]];s.identifier=i,t.processOnEnd(s)}}),t.actives.length<i.maxNumberOfNipples&&t.processOnStart(s))}),t.manager.bindDocument(),!1},Io.prototype.processOnStart=function(e){var t,i=this,r=i.options,s=i.manager.getIdentifier(e),a=e.force||e.pressure||e.webkitForce||0,o={x:e.pageX,y:e.pageY},l=i.getOrCreate(s,o);l.identifier!==s&&i.manager.removeIdentifier(l.identifier),l.identifier=s;var h=function(t){t.trigger("start",t),i.trigger("start "+t.id+":start",t),t.show(),a>0&&i.pressureFn(e,t,t.identifier),i.processOnMove(e)};if((t=i.idles.indexOf(l))>=0&&i.idles.splice(t,1),i.actives.push(l),i.ids.push(l.identifier),"semi"!==r.mode)h(l);else if(DV(o,l.position)<=r.catchDistance)h(l);else{l.destroy(),i.processOnStart(e);return}return l},Io.prototype.getOrCreate=function(e,t){var i,r=this.options;return/(semi|static)/.test(r.mode)?(i=this.idles[0])?(this.idles.splice(0,1),i):"semi"===r.mode?this.createNipple(t,e):(console.warn("Coudln't find the needed nipple."),!1):i=this.createNipple(t,e)},Io.prototype.processOnMove=function(e){var t=this.options,i=this.manager.getIdentifier(e),r=this.nipples.get(i),s=this.manager.scroll;if(!Dq(e)){this.processOnEnd(e);return}if(!r){console.error("Found zombie joystick with ID "+i),this.manager.removeIdentifier(i);return}if(t.dynamicPage){var a=r.el.getBoundingClientRect();r.position={x:s.x+a.left,y:s.y+a.top}}r.identifier=i;var o=r.options.size/2,l={x:e.pageX,y:e.pageY};t.lockX&&(l.y=r.position.y),t.lockY&&(l.x=r.position.x);var h,c,d=DV(l,r.position),u=Dj(l,r.position),p=DH(u),f=d/o,m={distance:d,position:l};if("circle"===r.options.shape?(h=Math.min(d,o),c=DG(r.position,h,u)):h=DV(c=D6(l,r.position,o),r.position),t.follow){if(d>o){let e=l.x-c.x,t=l.y-c.y;r.position.x+=e,r.position.y+=t,r.el.style.top=r.position.y-(this.box.top+s.y)+"px",r.el.style.left=r.position.x-(this.box.left+s.x)+"px",d=DV(l,r.position)}}else l=c,d=h;var g=l.x-r.position.x,v=l.y-r.position.y;r.frontPosition={x:g,y:v},t.dataOnly||D$(r.ui.front,r.frontPosition);var y={identifier:r.identifier,position:l,force:f,pressure:e.force||e.pressure||e.webkitForce||0,distance:d,angle:{radian:p,degree:u},vector:{x:g/o,y:-v/o},raw:m,instance:r,lockX:t.lockX,lockY:t.lockY};(y=r.computeDirection(y)).angle={radian:DH(180-u),degree:180-u}
8402,r.trigger("move",y),this.trigger("move "+r.id+":move",y)},Io.prototype.processOnEnd=function(e){var t=this,i=t.options,r=t.manager.getIdentifier(e),s=t.nipples.get(r),a=t.manager.removeIdentifier(s.identifier);!s||(i.dataOnly||s.hide(function(){"dynamic"===i.mode&&(s.trigger("removed",s),t.trigger("removed "+s.id+":removed",s),t.manager.trigger("removed "+s.id+":removed",s),s.destroy())}),clearInterval(t.pressureIntervals[s.identifier]),s.resetDirection(),s.trigger("end",s),t.trigger("end "+s.id+":end",s),t.ids.indexOf(s.identifier)>=0&&t.ids.splice(t.ids.indexOf(s.identifier),1),t.actives.indexOf(s)>=0&&t.actives.splice(t.actives.indexOf(s),1),/(semi|static)/.test(i.mode)?t.idles.push(s):t.nipples.indexOf(s)>=0&&t.nipples.splice(t.nipples.indexOf(s),1),t.manager.unbindDocument(),/(semi|static)/.test(i.mode)&&(t.manager.ids[a.id]=a.identifier))},Io.prototype.onDestroyed=function(e,t){this.nipples.indexOf(t)>=0&&this.nipples.splice(this.nipples.indexOf(t),1),this.actives.indexOf(t)>=0&&this.actives.splice(this.actives.indexOf(t),1),this.idles.indexOf(t)>=0&&this.idles.splice(this.idles.indexOf(t),1),this.ids.indexOf(t.identifier)>=0&&this.ids.splice(this.ids.indexOf(t.identifier),1),this.manager.removeIdentifier(t.identifier),this.manager.unbindDocument()},Io.prototype.destroy=function(){for(var e in this.unbindEvt(this.options.zone,"start"),this.nipples.forEach(function(e){e.destroy()}),this.pressureIntervals)this.pressureIntervals.hasOwnProperty(e)&&clearInterval(this.pressureIntervals[e]);this.trigger("destroyed",this.nipples),this.manager.unbindDocument(),this.off()},Il.prototype=new Ia,Il.constructor=Il,Il.prototype.prepareCollections=function(){var e=this;e.collections.create=e.create.bind(e),e.collections.on=e.on.bind(e),e.collections.off=e.off.bind(e),e.collections.destroy=e.destroy.bind(e),e.collections.get=function(t){var i;return e.collections.every(function(e){return!(i=e.get(t))}),i}},Il.prototype.create=function(e){return this.createCollection(e)},Il.prototype.createCollection=function(e){var t=new Io(this,e);return this.bindCollection(t),this.collections.push(t),t},Il.prototype.bindCollection=function(e){var t,i=this,r=function(e,r){t=e.type+" "+r.id+":"+e.type,i.trigger(t,r)};e.on("destroyed",i.onDestroyed.bind(i)),e.on("shown hidden rested dir plain",r),e.on("dir:up dir:right dir:down dir:left",r),e.on("plain:up plain:right plain:down plain:left",r)},Il.prototype.bindDocument=function(){this.binded||(this.bindEvt(document,"move").bindEvt(document,"end"),this.binded=!0)},Il.prototype.unbindDocument=function(e){Object.keys(this.ids).length&&!0!==e||(this.unbindEvt(document,"move").unbindEvt(document,"end"),this.binded=!1)},Il.prototype.getIdentifier=function(e){var t;return e?void 0===(t=void 0===e.identifier?e.pointerId:e.identifier)&&(t=this.latest||0):t=this.index,void 0===this.ids[t]&&(this.ids[t]=this.index,this.index+=1),this.latest=t,this.ids[t]},Il.prototype.removeIdentifier=function(e){var t={};for(var i in this.ids)if(this.ids[i]===e){t.id=i,t.identifier=this.ids[i],delete this.ids[i];break}return t},Il.prototype.onmove=function(e){return this.onAny("move",e),!1},Il.prototype.onend=function(e){return this.onAny("end",e),!1},Il.prototype.oncancel=function(e){return this.onAny("end",e),!1},Il.prototype.onAny=function(e,t){var i,r=this,s="processOn"+e.charAt(0).toUpperCase()+e.slice(1);t=DZ(t);var a=function(e,t,i){i.ids.indexOf(t)>=0&&(i[s](e),e._found_=!0)};return D5(t,function(e){i=r.getIdentifier(e),D5(r.collections,a.bind(null,e,i)),e._found_||r.removeIdentifier(i)}),!1},Il.prototype.destroy=function(){this.unbindDocument(!0),this.ids={},this.index=0,this.collections.forEach(function(e){e.destroy()}),this.off()},Il.prototype.onDestroyed=function(e,t){if(0>this.collections.indexOf(t))return!1;this.collections.splice(this.collections.indexOf(t),1)};var Ih=new Il,Ic={create:function(e){return Ih.create(e)}},Id=new Map,Iu=new Map,Ip=class{constructor(e,t,i,r){this.data=t;let{audio:s,volume:a,delay:o,loop:l}=t;if(!s)throw Error("Missing property");let h="string"==typeof s?r.getAudio(s).src:s.data;this.audioPlayer=new AN({src:h,volume:a,delay:o,loop:l}),Iu.has(i.uuid)?Iu.get(i.uuid).push(this):Iu.set(i.uuid,[this]),Id.set(e,this)}
8402playByToggle(){"stop"===this.data.toggle?"playing"===this.audioPlayer.status?this.audioPlayer.stop():(this.audioPlayer.stop(),this.audioPlayer.play()):"pause"===this.data.toggle?"playing"===this.audioPlayer.status?this.audioPlayer.pause():this.audioPlayer.play():(this.audioPlayer.stop(),this.audioPlayer.play())}dispose(){this.audioPlayer.stop()}},If=class{constructor(e){this.data=e}dispatch(){this.data.playAudio?this.pauseAudio(this.data.playAudio):this.data.object?this.pauseAllAudiosFromObject(this.data.object):this.pauseAllAudios()}pauseAudio(e){let t=Id.get(e);t&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{t.audioPlayer[this.data.interaction](),this.disposeDelay()},this.data.delay)):t.audioPlayer[this.data.interaction]())}pauseAllAudiosFromObject(e){let t=Iu.get(e);t?.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{t.forEach(e=>e.audioPlayer[this.data.interaction]()),this.disposeDelay()},this.data.delay)):t.forEach(e=>e.audioPlayer[this.data.interaction]()))}pauseAllAudios(){let e=[...Iu.values()];e.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{e.forEach(e=>{e.forEach(e=>{e.audioPlayer[this.data.interaction]()})}),this.disposeDelay()},this.data.delay)):e.forEach(e=>{e.forEach(e=>{e.audioPlayer[this.data.interaction]()})}))}disposeDelay(){clearTimeout(this.timeoutId),delete this.timeoutId}dispose(){clearTimeout(this.timeoutId),delete this.timeoutId}},Im=class{constructor(e,t,i,r,s){if(this.data=t,this.shared=r,this.condition=s,"play"===t.interaction)this.interaction=new Ip(e,t,i,r);else if("pause"===t.interaction||"stop"===t.interaction)this.interaction=new If(t);else throw Error("Missing property")}dispatchBasic(){if(!1===Oq(this.shared,this.condition))return!1;this.interaction instanceof Ip?this.interaction.playByToggle():this.interaction.dispatch()}dispatchConditional(){if(!1===Oq(this.shared,this.condition))return!1;this.interaction instanceof Ip?this.interaction.audioPlayer.play():this.interaction.dispatch()}dispatchGameControl(e){if(!1===Oq(this.shared,this.condition))return!1;this.interaction instanceof Ip&&("start"===e?this.interaction.audioPlayer.play():this.interaction.audioPlayer.stop())}dispose(){this.interaction.dispose()}},Ig=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r,this.delay=0,this.emission=e.emission,void 0!==e.delay&&(this.delay=e.delay),this.particleSystem=this.page.scene.find(this.data.emitterObjectId)}toggleEmitting(){this.particleSystem.started&&!this.particleSystem.stopped?this.stop(this.delay):this.start(this.delay)}toggleFroze(){this.particleSystem.started&&!this.particleSystem.isFrozen?this.freeze(this.delay):this.unFreeze(this.delay)}start(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.start(0),this.clearDelay()},e);return}this.particleSystem.start()}stop(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.stop(0),this.clearDelay()},e);return}this.particleSystem.stop()}freeze(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.freeze(0),this.clearDelay()},e);return}this.particleSystem.froze()}unFreeze(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.unFreeze(0),this.clearDelay()},e);return}this.particleSystem.unFroze()}reset(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.reset(0),this.clearDelay()},e);return}this.particleSystem.reset()}reverseFromCurrent(){switch(this.emission){case"emitToggle":this.toggleEmitting();break;case"pauseToggle":this.toggleFroze()}}dispatchBasic(){if(!1===Oq(this.shared,this.condition)||!this.particleSystem)return!1;switch(this.emission){case"start":this.start(this.delay);break;case"emitToggle":this.toggleEmitting();break;case"pause":this.freeze(this.delay);break;case"pauseToggle":this.toggleFroze();break;case"stop":this.stop(this.delay);break;case"reset":this.reset(this.delay)}}dispatchConditional(){if(!1===Oq(this.shared,this.condition)||!this.particleSystem)return!1;switch(this.emission){case"start":this.start(this.delay);break;case"stop":this.stop(this.delay);break;case"reset":this.reset(this.delay)}}dispatchGameControl(e){if(!1===Oq(this.shared,this.condition)||!this.particleSystem)return!1;"start"===e?this.start(this.delay):this.stop(this.delay)}dispose(){this.particleSystem&&(this.particleSystem.reset(),this.clearDelay())}clearDelay(){this.delayTimerId&&(clearTimeout(this.delayTimerId),delete this.delayTimerId)}},Iv=(e,t)=>t.some(t=>t instanceof RegExp?t.test(e):t===e),Iy=(e,{stripHash:t})=>{let i=/^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(e);if(!i)throw Error(`Invalid URL: ${e}`);let{type:r,data:s,hash:a}=i.groups,o=r.split(";");a=t?"":a;let l=!1;"base64"===o[o.length-1]&&(o.pop(),l=!0);let h=(o.shift()||"").toLowerCase(),c=[...o.map(e=>{let[t,i=""]=e.split("=").map(e=>e.trim());return"charset"===t&&"us-ascii"===(i=i.toLowerCase())?"":`${t}${i?`=${i}`:""}`}
8402).filter(Boolean)];return l&&c.push("base64"),(c.length>0||h&&"text/plain"!==h)&&c.unshift(h),`data:${c.join(";")},${l?s.trim():s}${a?`#${a}`:""}`},Ix=class{constructor({url:e,context:t},i,r,s){if(this.controlsManager=i,this.shared=r,this.condition=s,!e)throw Error("Missing property");this.url=e.startsWith("mailto:")?e:function(e,t){if(t={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...t},e=e.trim(),/^data:/i.test(e))return Iy(e,t);if(/^view-source:/i.test(e))throw Error("`view-source:` is not supported as it is a non-standard protocol");let i=e.startsWith("//");!i&&/^\.*\//.test(e)||(e=e.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,t.defaultProtocol));let r=new URL(e);if(t.forceHttp&&t.forceHttps)throw Error("The `forceHttp` and `forceHttps` options cannot be used together");if(t.forceHttp&&"https:"===r.protocol&&(r.protocol="http:"),t.forceHttps&&"http:"===r.protocol&&(r.protocol="https:"),t.stripAuthentication&&(r.username="",r.password=""),t.stripHash?r.hash="":t.stripTextFragment&&(r.hash=r.hash.replace(/#?:~:text.*?$/i,"")),r.pathname){let e=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,t=0,i="";for(;;){let s=e.exec(r.pathname);if(!s)break;let a=s[0],o=s.index;i+=r.pathname.slice(t,o).replace(/\/{2,}/g,"/")+a,t=o+a.length}i+=r.pathname.slice(t,r.pathname.length).replace(/\/{2,}/g,"/"),r.pathname=i}if(r.pathname)try{r.pathname=decodeURI(r.pathname)}catch{}if(!0===t.removeDirectoryIndex&&(t.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(t.removeDirectoryIndex)&&t.removeDirectoryIndex.length>0){let e=r.pathname.split("/");Iv(e[e.length-1],t.removeDirectoryIndex)&&(e=e.slice(0,-1),r.pathname=e.slice(1).join("/")+"/")}if(r.hostname&&(r.hostname=r.hostname.replace(/\.$/,""),t.stripWWW&&/^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(r.hostname)&&(r.hostname=r.hostname.replace(/^www\./,""))),Array.isArray(t.removeQueryParameters))for(let e of[...r.searchParams.keys()])Iv(e,t.removeQueryParameters)&&r.searchParams.delete(e);if(!0===t.removeQueryParameters&&(r.search=""),t.sortQueryParameters){r.searchParams.sort();try{r.search=decodeURIComponent(r.search)}catch{}}t.removeTrailingSlash&&(r.pathname=r.pathname.replace(/\/$/,""));let s=e;return e=r.toString(),t.removeSingleSlash||"/"!==r.pathname||s.endsWith("/")||""!==r.hash||(e=e.replace(/\/$/,"")),(t.removeTrailingSlash||"/"===r.pathname)&&""===r.hash&&t.removeSingleSlash&&(e=e.replace(/\/$/,"")),i&&!t.normalizeProtocol&&(e=e.replace(/^http:\/\//,"//")),t.stripProtocol&&(e=e.replace(/^(?:https?:)?\/\//,"")),e}(e,{removeTrailingSlash:!1,removeSingleSlash:!1,stripWWW:!1}),this.context=t??"tab"}dispatch(){if(!1===Oq(this.shared,this.condition))return!1;uX?window.location.assign(this.url):("tab"===this.context||uW&&"none"===this.context?window.open(this.url,"_blank"):"window"===this.context?window.open(this.url,"_blank",`width=${window.innerWidth}, height=${window.innerHeight}`):window.open(this.url,"_parent"),this.controlsManager.orbitControls?.onPointerUp(u1[0]),u1.splice(0,u1.length))}},Ib=class{constructor(e,t,i,r,s){this.data=e,this.page=t,this.controlsManager=i,this.shared=r,this.condition=s,this.timeoutIdQueue=[],this.dispatchInner=()=>{this.objects.forEach(this.destroyCallback)},this.destroyCallback=e=>{this.timeoutIdQueue.shift();let t=this.page.scene.find(e);if(void 0===t)return;let i=this.controlsManager.sharedGameControlGlobals.rapierWorld,r=!i||t.dataPatched.physics?.fusedBody;if(t.cloner){for(let e of t.cloner.children)r?(e.playModeVisible=!1,e.rigidBody&&t.dataPatched.physics?.rigidBody==="positioned"&&(this.controlsManager.sharedGameControlGlobals.colliderToEntity.delete(e.rigidBody.collider(0).handle),i.removeRigidBody(e.rigidBody),e.rigidBody=void 0),e.bvhGeometry&&(e.bvhGeometry=void 0)):void 0===this.clone||this.clone===e?(e.playModeVisible=!1,e.rigidBody&&(this.controlsManager.sharedGameControlGlobals.colliderToEntity.delete(e.rigidBody.collider(0).handle),i.removeRigidBody(e.rigidBody),e.rigidBody=void 0)):void 0===e.playModeVisible&&(e.playModeVisible=!0);(r||void 0===this.clone||!1===this.clone)&&(t.visible=!1,t.rigidBody&&(this.controlsManager.sharedGameControlGlobals.colliderToEntity.delete(t.rigidBody.collider(0).handle),i.removeRigidBody(t.rigidBody),t.rigidBody=void 0),t.bvhGeometry&&(t.bvhGeometry=void 0))}else t.rigidBody&&(this.controlsManager.sharedGameControlGlobals.colliderToEntity.delete(t.rigidBody.collider(0).handle),i.removeRigidBody(t.rigidBody),t.rigidBody=void 0),t.bvhGeometry&&(t.bvhGeometry=void 0),t.visible=!1;void 0===i?this.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim=this.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim.filter(e=>void 0!==e.bvhGeometry):this.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim=this.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim.filter(e=>void 0!==e.rigidBody),t.destroyedInAction=!0,this.controlsManager.requestRender()},this.objects=[...e.objects]}dispatch(e){if(!1===Oq(this.shared,this.condition))return!1;this.clone=e,this.data.delay?this.timeoutIdQueue.push(window.setTimeout(this.dispatchInner,1e3*this.data.delay)):this.dispatchInner()}
8402dispatchFromStart(){if(!1===Oq(this.shared,this.condition))return!1;this.timeoutIdQueue.push(window.setTimeout(this.dispatchInner,1e3*this.data.delay))}dispose(){this.timeoutIdQueue.forEach(e=>window.clearTimeout(e))}},Iw=class{constructor(e,t,i,r,s){this.data=e,this.page=t,this.shared=i,this.eventManager=r,this.condition=s,this.shared=i}dispatch(){if(!1===Oq(this.shared,this.condition))return!1;clearTimeout(this.timeoutId),delete this.timeoutId,this.timeoutId=window.setTimeout(()=>{this.shared.reset(this.shared.data,!0),OM(this.page,this.shared,!0),this.eventManager.reset(),this.eventManager.controlsManager.gameControl?.reset(!0),this.page.switchToPlayCamera(),this.eventManager.controlsManager.requestRender(),delete this.timeoutId},(this.data.delay??0)*1e3)}dispose(){clearTimeout(this.timeoutId),delete this.timeoutId}},IS={update:null,begin:null,loopBegin:null,changeBegin:null,change:null,changeComplete:null,timelineChangeComplete:null,loopComplete:null,complete:null,loop:1,direction:"normal",autoplay:!0,timelineOffset:0,rewind:!0},I_={duration:1e3,delay:0,endDelay:0,startOnceDelay:0,pingPongDelayCorrection:0,pingPongEndDelayCorrection:0,easing:"easeOutElastic(1, .5)",round:0},IA=["translateX","translateY","translateZ","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ","skew","skewX","skewY","perspective","matrix","matrix3d"],IM={CSS:{},springs:{}};function IE(e,t,i){return Math.min(Math.max(e,t),i)}function IC(e,t){return e.indexOf(t)>-1}function IT(e,t){return e.apply(null,t)}var IP={arr:function(e){return Array.isArray(e)},obj:function(e){return IC(Object.prototype.toString.call(e),"Object")},pth:function(e){return IP.obj(e)&&e.hasOwnProperty("totalLength")},svg:function(e){return e instanceof SVGElement},inp:function(e){return e instanceof HTMLInputElement},dom:function(e){return!("isNode"in e)&&(e.nodeType||IP.svg(e))},str:function(e){return"string"==typeof e},fnc:function(e){return"function"==typeof e},und:function(e){return typeof e>"u"},hex:function(e){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(e)},rgb:function(e){return/^rgb/.test(e)},hsl:function(e){return/^hsl/.test(e)},col:function(e){return IP.hex(e)||IP.rgb(e)||IP.hsl(e)},key:function(e){return!IS.hasOwnProperty(e)&&!I_.hasOwnProperty(e)&&"targets"!==e&&"keyframes"!==e}};function ID(e){var t=/\(([^)]+)\)/.exec(e);return t?t[1].split(",").map(function(e){return parseFloat(e)}):[]}function II(e,t){var i=ID(e),r=IE(IP.und(i[0])?1:i[0],.1,100),s=IE(IP.und(i[1])?100:i[1],.1,100),a=IE(IP.und(i[2])?10:i[2],.1,100),o=IE(IP.und(i[3])?0:i[3],.1,100),l=Math.sqrt(s/r),h=a/(2*Math.sqrt(s*r)),c=h<1?l*Math.sqrt(1-h*h):0,d=h<1?(h*l+-o)/c:-o+l;function u(e){var i=t?t*e/1e3:e;return i=h<1?Math.exp(-i*h*l)*(1*Math.cos(c*i)+d*Math.sin(c*i)):(1+d*i)*Math.exp(-i*l),0===e||1===e?e:1-i}return t?u:function(){var t=IM.springs[e];if(t)return t;for(var i=1/6,r=0,s=0;;)if(1===u(r+=i)){if(++s>=16)break}else s=0;var a=r*i*1e3;return IM.springs[e]=a,a}}function IO(e){return void 0===e&&(e=10),function(t){return Math.ceil(IE(t,1e-6,1)*e)*(1/e)}}var IR=function(){function e(e,t,i){return(((1-3*i+3*t)*e+(3*i-6*t))*e+3*t)*e}function t(e,t,i){return 3*(1-3*i+3*t)*e*e+2*(3*i-6*t)*e+3*t}return function(i,r,s,a){if(0<=i&&i<=1&&0<=s&&s<=1){var o=new Float32Array(11);if(i!==r||s!==a)for(var l=0;l<11;++l)o[l]=e(.1*l,i,s);return function(l){return i===r&&s===a||0===l||1===l?l:e(function(r){for(var a=0,l=1;10!==l&&o[l]<=r;++l)a+=.1;var h=a+(r-o[--l])/(o[l+1]-o[l])*.1,c=t(h,i,s);return c>=.001?function(i,r,s,a){for(var o=0;o<4;++o){var l=t(r,s,a);if(0===l)break;var h=e(r,s,a)-i;r-=h/l}return r}(r,h,i,s):0===c?h:function(t,i,r,s,a){var o,l,h=0;do(o=e(l=i+(r-i)/2,s,a)-t)>0?r=l:i=l;while(Math.abs(o)>1e-7&&++h<10);return l}(r,a,a+.1,i,s)}(l),r,a)}}}}(),IL=(Oe={linear:function(){return function(e){return e}}},Ot={Sine:function(){return function(e){return 1-Math.cos(e*Math.PI/2)}},Circ:function(){return function(e){return 1-Math.sqrt(1-e*e)}},Back:function(){return function(e){return e*e*(3*e-2)}},Bounce:function(){return function(e){for(var t,i=4;e<((t=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}},Elastic:function(e,t){void 0===e&&(e=1),void 0===t&&(t=.5);var i=IE(e,1,10),r=IE(t,.1,2);return function(e){return 0===e||1===e?e:-i*Math.pow(2,10*(e-1))*Math.sin(2*Math.PI*(e-1-r/(2*Math.PI)*Math.asin(1/i))/r)}}},["Quad","Cubic","Quart","Quint","Expo"].forEach(function(e,t){Ot[e]=function(){return function(e){return Math.pow(e,t+2)}}}),Object.keys(Ot).forEach(function(e){var t=Ot[e];Oe["easeIn"+e]=t,Oe["easeOut"+e]=function(e,i){return function(r){return 1-t(e,i)(1-r)}},Oe["easeInOut"+e]=function(e,i){return function(r){return r<.5?t(e,i
8402)(2*r)/2:1-t(e,i)(-2*r+2)/2}}}),Oe);function IB(e,t){if(IP.fnc(e))return e;var i=e.split("(")[0],r=IL[i],s=ID(e);switch(i){case"spring":return II(e,t);case"cubicBezier":return IT(IR,s);case"steps":return IT(IO,s);default:return IT(r,s)}}function Iz(e){try{return document.querySelectorAll(e)}catch{return}}function IF(e,t){for(var i=e.length,r=arguments.length>=2?arguments[1]:void 0,s=[],a=0;a<i;a++)if(a in e){var o=e[a];t.call(r,o,a,e)&&s.push(o)}return s}function IN(e){return e.reduce(function(e,t){return e.concat(IP.arr(t)?IN(t):t)},[])}function Ik(e){return IP.arr(e)?e:(IP.str(e)&&(e=Iz(e)||e),e instanceof NodeList||e instanceof HTMLCollection?[].slice.call(e):[e])}function IU(e,t){return e.some(function(e){return e===t})}function IV(e){var t={};for(var i in e)t[i]=e[i];return t}function Ij(e,t){var i=IV(e);for(var r in e)i[r]=t.hasOwnProperty(r)?t[r]:e[r];return i}function IG(e,t){var i=IV(e);for(var r in t)i[r]=IP.und(e[r])?t[r]:e[r];return i}function IH(e){var t=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(e);if(t)return t[1]}function IW(e,t){return IP.fnc(e)?e(t.target,t.id,t.total):e}function Iq(e,t){return e.getAttribute(t)}function IX(e,t,i){if(IU([i,"deg","rad","turn"],IH(t)))return t;var r=IM.CSS[t+i];if(!IP.und(r))return r;var s=document.createElement(e.tagName),a=e.parentNode&&e.parentNode!==document?e.parentNode:document.body;a.appendChild(s),s.style.position="absolute",s.style.width=100+i;var o=100/s.offsetWidth;a.removeChild(s);var l=o*parseFloat(t);return IM.CSS[t+i]=l,l}function IY(e,t,i){if(t in e.style){var r=t.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),s=e.style[t]||getComputedStyle(e).getPropertyValue(r)||"0";return i?IX(e,s,i):s}}function IQ(e,t){return IP.dom(e)&&!IP.inp(e)&&(Iq(e,t)||IP.svg(e)&&e[t])?"attribute":IP.dom(e)&&IU(IA,t)?"transform":IP.dom(e)&&"transform"!==t&&IY(e,t)?"css":null!=e[t]?"object":void 0}function IK(e){if(IP.dom(e)){for(var t,i=e.style.transform||"",r=/(\w+)\(([^)]*)\)/g,s=new Map;t=r.exec(i);)s.set(t[1],t[2]);return s}}function IZ(e,t,i,r){switch(IQ(e,t)){case"transform":var s,a;return s=IC(t,"scale")?1:0+(IC(t,"translate")||"perspective"===t?"px":IC(t,"rotate")||IC(t,"skew")?"deg":void 0),a=IK(e).get(t)||s,r&&(r.transforms.list.set(t,a),r.transforms.last=t),i?IX(e,a,i):a;case"css":return IY(e,t,i);case"attribute":return Iq(e,t);default:return e[t]||0}}function IJ(e,t){var i=/^(\*=|\+=|-=)/.exec(e);if(!i)return e;var r=IH(e)||0,s=parseFloat(t),a=parseFloat(e.replace(i[0],""));switch(i[0][0]){case"+":return s+a+r;case"-":return s-a+r;case"*":return s*a+r}}function I$(e,t){if(IP.col(e)){var i,r,s,a;return i=e,IP.rgb(i)?(r=/rgb\((\d+,\s*[\d]+,\s*[\d]+)\)/g.exec(i))?"rgba("+r[1]+",1)":i:IP.hex(i)?(s=i.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(e,t,i,r){return t+t+i+i+r+r}),"rgba("+parseInt((a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(s))[1],16)+","+parseInt(a[2],16)+","+parseInt(a[3],16)+",1)"):IP.hsl(i)?function(e){var t,i,r,s=/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(e)||/hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%,\s*([\d.]+)\)/g.exec(e),a=parseInt(s[1],10)/360,o=parseInt(s[2],10)/100,l=parseInt(s[3],10)/100,h=s[4]||1;function c(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+(t-e)*6*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e}if(0==o)t=i=r=l;else{var d=l<.5?l*(1+o):l+o-l*o,u=2*l-d;t=c(u,d,a+1/3),i=c(u,d,a),r=c(u,d,a-1/3)}return"rgba("+255*t+","+255*i+","+255*r+","+h+")"}(i):void 0}if(/\s/g.test(e))return e;var o=IH(e),l=o?e.substr(0,e.length-o.length):e;return t?l+t:l}function I0(e,t){return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))}function I1(e){for(var t,i=e.points,r=0,s=0;s<i.numberOfItems;s++){var a=i.getItem(s);s>0&&(r+=I0(t,a)),t=a}return r}function I2(e){var t;if(e.getTotalLength)return e.getTotalLength();switch(e.tagName.toLowerCase()){case"circle":return 2*Math.PI*Iq(e,"r");case"rect":return 2*Iq(e,"width")+2*Iq(e,"height");case"line":return I0({x:Iq(e,"x1"),y:Iq(e,"y1")},{x:Iq(e,"x2"),y:Iq(e,"y2")});case"polyline":return I1(e);case"polygon":return t=e.points,I1(e)+I0(t.getItem(t.numberOfItems-1),t.getItem(0))}}function I3(e,t){var i=t||{},r=i.el||function(e){for(var t=e.parentNode;IP.svg(t)&&IP.svg(t.parentNode);)t=t.parentNode;return t}(e),s=r.getBoundingClientRect(),a=Iq(r,"viewBox"),o=s.width,l=s.height,h=i.viewBox||(a?a.split(" "):[0,0,o,l]);
8402return{el:r,viewBox:h,x:h[0]/1,y:h[1]/1,w:o/h[2],h:l/h[3]}}function I4(e,t){var i=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g,r=I$(IP.pth(e)?e.totalLength:e,t)+"";return{original:r,numbers:r.match(i)?r.match(i).map(Number):[0],strings:IP.str(e)||t?r.split(i):[]}}function I5(e){return IF(e?IN(IP.arr(e)?e.map(Ik):Ik(e)):[],function(e,t,i){return i.indexOf(e)===t})}function I6(e){var t=I5(e);return t.map(function(e,i){return{target:e,id:i,total:t.length,transforms:{list:IK(e)}}})}var I8={css:function(e,t,i){return e.style[t]=i},attribute:function(e,t,i){return e.setAttribute(t,i)},object:function(e,t,i){return e[t]=i},transform:function(e,t,i,r,s){if(r.list.set(t,i),t===r.last||s){var a="";r.list.forEach(function(e,t){a+=t+"("+e+") "}),e.style.transform=a}}};function I9(e,t){I6(e).forEach(function(e){for(var i in t){var r=IW(t[i],e),s=e.target,a=IH(r),o=IZ(s,i,a,e),l=IJ(I$(r,a||IH(o)),o);I8[IQ(s,i)](s,i,l,e.transforms,!0)}})}function I7(e,t){var i=e.length,r=function(e){return e.timelineOffset?e.timelineOffset:0},s={};return s.duration=i?Math.max.apply(Math,e.map(function(e){let t=e.startOnceDelay??0,i=e.pingPongDelayCorrection??0,s=e.pingPongEndDelayCorrection??0;return r(e)+t+i+s+e.duration*(e.loop??1)})):t.duration,s.delay=i?Math.min.apply(Math,e.map(function(e){let t=e.startOnceDelay??0,i=e.pingPongDelayCorrection??0;return r(e)+t+i+e.delay})):t.delay,s.endDelay=i?s.duration-Math.max.apply(Math,e.map(function(e){let t=e.startOnceDelay??0,i=e.pingPongDelayCorrection??0,s=e.pingPongEndDelayCorrection??0;return r(e)+t+i+e.duration*(e.loop??1)-e.endDelay-s})):t.endDelay,s}var Oe,Ot,Oi,Or=0,Os=[],Oa=[],On=function(){function e(){Oi=requestAnimationFrame(t)}function t(t){var i=Os.length;if(i){for(var r=0;r<i;){var s=Os[r];s.paused?(Os.splice(r,1),i-=1):(s.tick(t),r++)}e()}else Oi=cancelAnimationFrame(Oi)}return e}();function Oo(e){void 0===e&&(e={});var t,i,r,s,a,o,l,h,c,d,u=0,p=0,f=0,m=0,g=null;function v(e){var t=window.Promise&&new Promise(function(e){return g=e});return e.finished=t,t}var y=(i=Ij(IS,t=e),s=function(e,t){var i=[],r=t.keyframes;for(var s in r&&(t=IG(function(e){for(var t=IF(IN(e.map(function(e){return Object.keys(e)})),function(e){return IP.key(e)}).reduce(function(e,t){return 0>e.indexOf(t)&&e.push(t),e},[]),i={},r=0;r<t.length;r++)!function(r){var s=t[r];i[s]=e.map(function(e){var t={};for(var i in e)IP.key(i)?i==s&&(t.value=e[i]):t[i]=e[i];return t})}(r);return i}(r),t)),t)IP.key(s)&&i.push({name:s,tweens:function(e,t){var i=IV(t);if(/^spring/.test(i.easing)&&(i.duration=II(i.easing)),IP.arr(e)){var r=e.length;2!==r||IP.obj(e[0])?IP.fnc(t.duration)||(i.duration=t.duration/r):e={value:e}}var s=IP.arr(e)?e:[e];return s.map(function(e,i){var r=IP.obj(e)&&!IP.pth(e)?e:{value:e};return IP.und(r.delay)&&(r.delay=i?0:t.delay),IP.und(r.endDelay)&&(r.endDelay=i===s.length-1?t.endDelay:0),r}).map(function(e){return IG(e,i)})}(t[s],e)});return i}(r=Ij(I_,t),t),l=I7(o=IF(IN((a=I6(t.targets)).map(function(e){return s.map(function(t){return function(e,t){var i=IQ(e.target,t.name);if(i){var r,s=t.tweens.map(function(i){var s=function(e,t){var i={};for(var r in e){var s=IW(e[r],t);IP.arr(s)&&1===(s=s.map(function(e){return IW(e,t)})).length&&(s=s[0]),i[r]=s}return i.duration=parseFloat(i.duration),i.delay=parseFloat(i.delay),i}(i,e),a=s.value,o=IP.arr(a)?a[1]:a,l=IH(o),h=IZ(e.target,t.name,l,e),c=r?r.to.original:h,d=IP.arr(a)?a[0]:c,u=IH(d)||IH(h),p=l||u;return IP.und(o)&&(o=c),s.from=I4(d,p),s.to=I4(IJ(o,d),p),s.start=r?r.end:0,s.end=s.start+s.delay+s.duration+s.endDelay,s.easing=IB(s.easing,s.duration),s.isPath=IP.pth(a),s.isColor=IP.col(s.from.original),s.isColor&&(s.round=1),r=s,s}),a=s[s.length-1];return{type:i,property:t.name,animatable:e,tweens:s,duration:a.end,delay:s[0].delay,endDelay:a.endDelay}}}(e,t)})})),function(e){return!IP.und(e)}),r),h=Or,Or++,IG(i,{id:h,children:[],animatables:a,animations:o,duration:l.duration,delay:l.delay,endDelay:l.endDelay,startOnceDelay:r.startOnceDelay,pingPongDelayCorrection:r.pingPongDelayCorrection,pingPongEndDelayCorrection:r.pingPongEndDelayCorrection}));function x(){var e=y.direction;"alternate"!==e&&(y.direction="normal"!==e?"normal":"reverse"),y.reversed=!y.reversed,d.forEach(function(e){(1===e.loop||e.loop%2==0)&&(e.reversed=y.reversed)})}function b(e){return y.reversed?y.duration-e:e}function w(e,t,i=!1){t&&(y.reversed?t.seek(t.duration*t.loop-(e-t.timelineOffset-t.pingPongDelayCorrection),i):t.seek(e-t.timelineOffset-t.startOnceDelay-t.pingPongDelayCorrection,i))}function S(e){var t=0,i=y.animations,r=i.length;for("alternate"!==y.direction&&y.parent?.direction==="alternate"?y.parent?.rewind===!1&&!0===y.reversePlayback&&!1===y.rewind&&(e=y.parent?.reversed&&"alternate"===y.direction?y.duration-y.delay+y.endDelay-e:y.duration+y.delay-y.endDelay-e):M(!1,y.parent?.rewind,y.rewind,y.parent?.reversePlayback,y.reversePlayback)&&(e=y.parent?.reversed&&"alternate"===y.direction?y.duration-y.delay+y.endDelay-e:y.duration+y.delay-y.endDelay-e);t<r;){let r;var s=i[t],a=s.animatable,o=s.tweens,l=o.length-1,h=o[l];l&&(h=IF(o,function(t){return e<t.end})[0]||h),r=y.parent?.reversed&&"alternate"===y.direction?IE(e-h.start-h.endDelay,0,h.duration)/h.duration:IE(e-h.start-h.delay,0,h.duration)/h.duration;for(var c=isNaN(r)?1:h.easing(r),d=h.to.strings,u=h.round,p=[],f=h.to.numbers.length,m=void 0,g=0;g<f;g++){let e,t;var v=void 0;"alternate"!==y.direction?y.parent?.rewind===!1&&!0===y.reversePlayback&&!1===y.rewind?(e=h.to.numbers[g],t=h.from.numbers[g]||0):(t=h.to.numbers[g],e=h.from.numbers[g]||0):M(!0,y.parent?.rewind,y.rewind,y.parent?.reversePlayback,y.reversePlayback)?(e=h.to.numbers[g],t=h.from.numbers[g]||0):(t=h.to.numbers[g],e=h.from.numbers[g]||0),v=h.isPath?function(e,t){function i(i){void 0===i&&(i=0);var r=t+i>=1?t+i:0;return e.el.getPointAtLength(r)}var r=I3(e.el,e.svg),s=i(),a=i(-1),o=i(1);switch(e.property){case"x":return(s.x-r.x)*r.w;case"y":return(s.y-r.y)*r.h;case"angle":return 180*Math.atan2(o.y-a.y,o.x-a.x)/Math.PI}}(h.value,c*t):e+c*(t-e),u&&(h.isColor&&g>2||(v=Math.round(v*u)/u)),p.push(v)}var x=d.length;if(x){m=d[0];for(var b=0;b<x;b++){d[b];var w=d[b+1],S=p[b];isNaN(S)||(w?m+=S+w:m+=S+" ")}}else m=p[0];I8[s.type](a.target,s.property,m,a.transforms),s.currentValue=m,t++}}function _(e){y[e]&&!y.passThrough&&y[e](y)}v(y);let A={0:!1,1:!0,2:!1,3:!0,4:!1,5:!1,6:!1,7:!1,8:!1,9:!0,10:!0,11:!1,12:!1,13:!1,14:!0,15:!0,16:!1,17:!0,18:!0,19:!1,20:!1,21:!1,22:!0,23:!0,24:!1,25:!0,26:!1,27:!0,28:!1,29:!1,30:!1,31:!1};function M(e,t,i,r,s){return A[e<<4|t<<3|i<<2|r<<1|s]}function E(e,t=!1){var i=y.duration;let r=y.delay,s=i-y.endDelay;y.parent?.reversed&&"alternate"===y.direction&&(r=y.endDelay,s=i-y.delay);var a=b(e);if(y.progress=IE(a/i*100,0,100),t||(y.reversePlayback=a<y.currentTime),m&&function(e,t=!1){if(y.reversed)for(var i=m;i--;)w(e,d[i],t);else for(var r=0;r<m;r++)w(e,d[r],t)}(a,t),!y.began&&y.currentTime>=0&&(y.began=!0,_("begin")),!y.loopBegan&&y.currentTime>0&&(y.loopBegan=!0,_("loopBegin")),(y.reversed||a>
8402=0)&&a<=r&&0!==y.currentTime&&(S(0),_("change")),(a>=s&&y.currentTime!==i+y.pingPongDelayCorrection||!i)&&(S(i),_("change")),a>r&&a<s?(y.changeBegan||(y.changeBegan=!0,y.changeCompleted=!1,_("changeBegin")),S(a),_("change")):y.changeBegan?(y.changeCompleted=!0,y.changeBegan=!1,_("change"),m&&_("timelineChangeComplete")):y.began&&a>s&&_("changeComplete"),y.currentTime=IE(a,0,i+y.pingPongDelayCorrection),y.began&&_("update"),e>=i){if(y.remaining&&!0!==y.remaining&&y.remaining--,y.remaining){for(let e of(m?u+=y.duration/Oo.speed:u+=y.duration,d))e.setStartTime(0),e.remaining=e.loop;_("loopComplete"),y.loopBegan=!1,"alternate"===y.direction?x():m&&(y.direction="normal",y.reversed=!1,d.forEach(function(e){return e.reversed=!1}))}else y.paused=!0,y.completed||(y.completed=!0,_("loopComplete"),_("complete"),!y.passThrough&&"Promise"in window&&(g(),v(y)))}}return y.reset=function(){var e=y.direction;y.passThrough=!1,y.currentTime=0,y.progress=0,y.paused=!0,y.began=!1,y.loopBegan=!1,y.changeBegan=!1,y.completed=!1,y.changeCompleted=!1,y.reversePlayback=!1,y.reversed="reverse"===e,y.remaining=y.loop,m=(d=y.children).length;for(var t=m;t--;)y.children[t].reset();S(y.reversed?y.duration:0)},y.setStartTime=function(e){u=e},y.set=function(e,t){return I9(e,t),y},y.tick=function(e){f=e,u||(u=f),E((f+(p-u))*Oo.speed)},y.seek=function(e,t=!1){E(e-u,t)},y.pause=function(e){y.paused=!0,m&&(c=e??performance.now())},y.play=function(e){!y.paused||(y.completed&&y.reset(),y.paused=!1,Os.push(y),m&&void 0!==c&&(u+=(e??performance.now())-c),Oi||On())},y.reverse=function(){x(),y.completed=!y.reversed,u=0,p=b(y.currentTime)*(1/Oo.speed)},y.restart=function(){y.reset(),y.play()},y.reset(),y.autoplay&&y.play(),y}function Ol(e,t){for(var i=t.length;i--;)IU(e,t[i].animatable.target)&&t.splice(i,1)}"u">typeof document&&document.addEventListener("visibilitychange",function(e){document.hidden?(Os.forEac
8402h(function(t){return t.pause(e.timeStamp)}),Oa=Os.slice(0),Oo.running=Os=[]):Oa.forEach(function(t){return t.play(e.timeStamp)})}),Oo.version="3.2.0",Oo.speed=1,Oo.running=Os,Oo.remove=function(e){for(var t=I5(e),i=Os.length;i--;){var r=Os[i],s=r.animations,a=r.children;Ol(t,s);for(var o=a.length;o--;){var l=a[o],h=l.animations;Ol(t,h),h.length||l.children.length||a.splice(o,1)}s.length||a.length||r.pause()}},Oo.get=IZ,Oo.set=I9,Oo.convertPx=IX,Oo.path=function(e,t){var i=IP.str(e)?Iz(e)[0]:e,r=t||100;return function(e){return{property:e,el:i,svg:I3(i),totalLength:I2(i)*(r/100)}}},Oo.setDashoffset=function(e){var t=I2(e);return e.setAttribute("stroke-dasharray",t),t},Oo.stagger=function(e,t){void 0===t&&(t={});var i=t.direction||"normal",r=t.easing?IB(t.easing):null,s=t.grid,a=t.axis,o=t.from||0,l="first"===o,h="center"===o,c="last"===o,d=IP.arr(e),u=parseFloat(d?e[0]:e),p=d?parseFloat(e[1]):0,f=IH(d?e[1]:e)||0,m=t.start||0+(d?u:0),g=[],v=0;return function(e,t,y){if(l&&(o=0),h&&(o=(y-1)/2),c&&(o=y-1),!g.length){for(var x=0;x<y;x++){if(s){var b=h?(s[0]-1)/2:o%s[0],w=h?(s[1]-1)/2:Math.floor(o/s[0]),S=x%s[0],_=Math.floor(x/s[0]),A=b-S,M=w-_,E=Math.sqrt(A*A+M*M);"x"===a&&(E=-A),"y"===a&&(E=-M),g.push(E)}else g.push(Math.abs(o-x));v=Math.max.apply(Math,g)}r&&(g=g.map(function(e){return r(e/v)*v})),"reverse"===i&&(g=g.map(function(e){return a?e<0?-1*e:-e:Math.abs(v-e)}))}var C=d?(p-u)/v:u;return m+Math.round(100*g[t])/100*C+f}},Oo.timeline=function(e){void 0===e&&(e={});var t=Oo(e);return t.duration=0,t.add=function(i,r){var s=Os.indexOf(t),a=t.children;function o(e){e.passThrough=!0}s>-1&&Os.splice(s,1);for(var l=0;l<a.length;l++)o(a[l]);var h=IG(i,Ij(I_,e));h.targets=h.targets||e.targets;var c=t.duration;h.autoplay=!1,h.timelineOffset=IP.und(r)?c:IJ(r,c),o(t);var d=Oo(h);o(d),a.push(d),d.parent=t;var u=I7(a,e);return t.delay=u.delay,t.endDelay=u.endDelay,t.duration=u.duration,!0===d.loop&&(t.duration=1/0),t.seek(0),t.reset(),t.autoplay&&t.play(),t},t},Oo.easing=IB,Oo.penner=IL,Oo.random=function(e,t){return Math.floor(Math.random()*(t-e+1))+e};var Oh=new iv,Oc=new iv,Od=new ig;function Ou(e,t,i,r,s,a){let o=void 0!==i[e]?i[e]:void 0,l=r[e];if(null==l)return;let h=null!=o?"string"==typeof o?Number(s.getVariable(o)??0):o:t[e],c="string"==typeof l?Number(s.getVariable(l)??0):l;if(h!==c)return{update:i=>{let r=tY.lerp(h,c,i);a?t[e]=Math.trunc(r):t[e]=r},start:()=>{t[e]=h},end:()=>{t[e]=c}}}function Op(e,t,i,r,s,a){let o=i[e]?i[e]:void 0,l=r[e];if(!l)return;let h=t[e],c=[...o??h].map(e=>"string"==typeof e?Number(s.getVariable(e)??0):e),d=[...l].map(e=>"string"==typeof e?Number(s.getVariable(e)??0):e);if(!(c.length!==d.length||uL(c,d)))return{update:i=>{c.forEach((r,s)=>{let o=tY.lerp(r,d[s],i);t[e][s]=a?Math.trunc(o):o})},start:()=>{Object.assign(t[e],c)},end:()=>{Object.assign(t[e],d)}}}function Of(e,t,i){return t.forEach((t,r)=>{e.setComponent(r,"string"==typeof t?Number(i.getVariable(t)??0):t)}),e}function Om(e,t,i,r,s){let a=i[e]?i[e]:void 0,o=r[e];if(!o)return;let l=t[e],h=a?Of(new iv,a,s):l.clone(),c=Of(new iv,o,s);if(!h.equals(c))return{update:e=>{l.lerpVectors(h,c,e)},start:()=>{l.copy(h)},end:()=>{l.copy(c)}}}function Og(e,t,i){return t.forEach((t,r)=>{e.setComponent(r,"string"==typeof t?Number(i.getVariable(t)??0):t)}),e}function Ov(e,t,i,r,s){let a=i[e]?i[e]:void 0,o=r[e];if(!o)return;let l=t[e],h=!(l instanceof tQ),c=l instanceof tQ?l:new tQ().fromArray(l),d=a?Og(new tQ,a,s):c.clone(),u=Og(new tQ,o,s);if(!d.equals(u))return{update:i=>{c.lerpVectors(d,u,i),h&&(t[e]=c.toArray())},start:()=>{c.copy(d),h&&(t[e]=c.toArray())},end:()=>{c.copy(u),h&&(t[e]=c.toArray())}}}function Oy(e,t,i,r,s){let a=i[e]?i[e]:void 0,o=r[e];if(!o)return;let l=t[e],h=new SN(l.r,l.g,l.b,l.a),c=a?"string"==typeof a?s.getColor(a).clone():new SN(a.r,a.g,a.b,a.a):h.clone(),d="string"==typeof o?s.getColor(o).clone():new SN(o.r,o.g,o.b,o.a);if(!c.equals(d))return{update:i=>{h.lerpColors(c,d,i);let r=tY.lerp(c.a,d.a,i);h.a=r,t[e]={r:h.r,g:h.g,b:h.b,a:h.a}},start:()=>{h.copy(c)},end:()=>{h.copy(d)}}}function Ox(e,t,i,r,s){return"number"==typeof t[e]?Ou(e,t,i??{},r,s):Array.isArray(t[e])?Op(e,t,i??{},r,s):void 0}function Ob(e,t,i,r){let s=[],a=AE(i,r)||!!t.layers&&AE(t,r);for(let o of(s.push({update:()=>{e.transparent=a}}),e.layers)){let e=t.layers?.data(o.uuid),a=i.layers.data(o.uuid);if(a&&("light"===o.type||(o.visible??!0)&&(a.visible??!0)))for(let t of o.getNames().filter(e=>!gE.some(t=>e.includes(t))))try{let i=o.getValue(t),l;if("colors"===t)l=function(e,t,i,r="colors"){if(!e.hasValue(r)||!(r in i))return;let s=[],a=e.getValue(r),o=t?t[r]:a.map(e=>e.toArray()),l=i[r];for(let e=0;e<a.length;++e){let t=[...o[e]],i=[...l[e]];
8402gt.isEqual(t,i)||s.push({update:r=>{a[e].fromArray(gt.lerp(t,i,r))},start:()=>{a[e].fromArray(t)},end:()=>{a[e].fromArray(i)}})}return s.length?s:void 0}(o,e,a,t);else if(Array.isArray(i))"steps"===t&&(l=function(e,t,i,r="steps"){if(!e.hasValue(r)||!(r in i))return;let s=[],a=e.getValue(r),o=t?t[r]:a,l=i[r];return uL(o,l)||s.push({update:t=>{let i=[...a];for(let e=0;e<a.length;++e){let r=o[e],s=l[e];i[e]=tY.lerp(r,s,t)}e.setValue(r,i)},start:()=>{e.setValue(r,o)},end:()=>{e.setValue(r,l)}}),s.length?s:void 0}(o,e,a,t));else if("number"==typeof i)l=function(e,t,i,r,s){if(!e.hasValue(r)||!(r in i))return;let a=t?t[r]:e.getValue(r),o=i[r],l="string"==typeof a?Number(s.getVariable(a)??0):a,h="string"==typeof o?Number(s.getVariable(o)??0):o;if(l!==h)return{update:t=>{e.setValue(r,tY.lerp(l,h,t))},start:()=>{e.setValue(r,l)},end:()=>{e.setValue(r,h)}}}(o,e,a,t,r);else{if("boolean"==typeof i)continue;i instanceof tQ?l=function(e,t,i,r){if(!e.hasValue(r)||!(r in i))return;let s=e.getValue(r),a=t?new tQ().fromArray(t[r]):s.clone(),o=new tQ().fromArray(i[r]);if(!a.equals(o))return{update:e=>{s.lerpVectors(a,o,e)},start:()=>{s.copy(a)},end:()=>{s.copy(o)}}}(o,e,a,t):i instanceof iv?l=function(e,t,i,r,s){if(!e.hasValue(r)||!(r in i))return;let a=e.getValue(r),o=t?t[r]:void 0,l=i[r],h=o?Of(new iv,o,s):a.clone(),c=Of(new iv,l,s);if(!h.equals(c))return{update:e=>{a.lerpVectors(h,c,e)},start:()=>{a.copy(h)},end:()=>{a.copy(c)}}}(o,e,a,t,r):i instanceof SN?l=function(e,t,i,r,s){if(!e.hasValue(r)||!(r in i))return;let a=t?t[r]:void 0,o=i[r],l=e.getValue(r),h=a?"string"==typeof a?s.getColor(a).clone():new ii().setRGB(a.r,a.g,a.b):l.clone(),c="string"==typeof o?s.getColor(o).clone():new SN(o.r,o.g,o.b,o.a);if(h.equals(c))return;let d=l.clone();return{update:t=>{e.getValue(r)!==d&&e.setValue(r,d),d.lerpColors(h,c,t)},start:()=>{d.copy(h)},end:()=>{d.copy(c)}}}(o,e,a,t,r):i instanceof ii?l=function(e,t,i,r,s){if(!e.hasValue(r)||!(r in i))return;let a=t?t[r]:void 0,o=i[r],l=e.getValue(r),h=a?"string"==typeof a?s.getColor(a).clone():new ii().setRGB(a.r,a.g,a.b):l.clone(),c="string"==typeof o?s.getColor(o).clone():new ii().setRGB(o.r,o.g,o.b);if(h.equals(c))return;let d=l.clone();return{update:t=>{e.getValue(r)!==d&&e.setValue(r,d),d.lerpColors(h,c,t)},start:()=>{d.copy(h)},end:()=>{d.copy(c)}}}(o,e,a,t,r):"isTexture"in i&&(l=function(e,t,i,r="texture"){if(!e.hasValue(r)||!(r in i))return;let s=e.getNode("rotation"),a=t?.[r]?.rotation??0,o=i[r]?.rotation??0;if(s&&a!==o)return{update:e=>{s.value=tY.lerp(a,o,e)*tY.DEG2RAD},start:()=>{s.value=a*tY.DEG2RAD},end:()=>{s.value=o*tY.DEG2RAD}};let l=e.getNode("mat");if(!l)return;let h=t?t[r]:l,c=i[r],d=[...h.repeat],u=[...h.offset],p=[...c.repeat],f=[...c.offset],m=h.rotation??0,g=c.rotation??0;if(!m7.isEqual(d,p)||!m7.isEqual(u,f)||m!==g)return{update:e=>{l.repeat=m7.lerp(d,p,e),l.offset=m7.lerp(u,f,e),l.rotation=tY.lerp(m,g,e),l.updateMatrix()},start:()=>{l.repeat=[...d],l.offset=[...u],l.rotation=m,l.updateMatrix()},end:()=>{l.repeat=[...p],l.offset=[...f],l.rotation=g,l.updateMatrix()}}}(o,e,a,t))}l&&(Array.isArray(l)?s.push(...l):s.push(l))}catch(e){console.error(`lerpMaterial: unexpected material layer for ${t}`,e)}}return s}var Ow=new iv,OS=new i3;function O_(e,t,i,r,s){let a=[];return e.data.visible&&a.push(...function(e,t,i,r,s){let a=[],o,l,h,c,d,u,p,f;if(e instanceof TY?((o=Ov("position",e,t,i,s))&&a.push(o),(h=Ou("rotation",e,t,i,s))&&a.push(h),(c=Ov("shear",e,t,i,s))&&a.push(c)):((u=Ou("slide",f={slide:t.pathSnapping?.slide??e.updatedPathSnapping?.slide??e.dataPatched.pathSnapping?.slide??0,offset:t.pathSnapping?.offset??e.updatedPathSnapping?.offset??e.dataPatched.pathSnapping?.offset??0},t.pathSnapping??e.updatedPathSnapping??e.dataPatched.pathSnapping,i.pathSnapping??e.dataPatched.pathSnapping,s))&&a.push(u),(p=Ou("offset",f,t.pathSnapping??e.updatedPathSnapping??e.dataPatched.pathSnapping,i.pathSnapping??e.dataPatched.pathSnapping,s))&&a.push(p),!u&&!p&&((o=Om("position",e,t,i,s))&&a.push(o),(l=Om("scale",e,t,i,s))&&a.push(l),(h=function(e,t,i,r,s){let a=t?.rotation?t.rotation.map(e=>("string"==typeof e?Number(s.getVariable(e)??0):e)*tY.DEG2RAD):void 0,o=i.rotation?.map(e=>("string"==typeof e?Number(s.getVariable(e)??0):e)*tY.DEG2RAD);if(!o)return;let l=a?new iv().fromArray(a):new iv().setFromEuler(e.rotation),h=new iv().fromArray(o);if(l.equals(h))return;let c=Ow.subVectors(h,l);
8402if(!(r&&c.toArray().every(e=>Math.abs(e)<2*Math.PI)))return{update:t=>{Ow.lerpVectors(l,h,t),e.rotation.setFromVector3(Ow)},start:()=>{e.rotation.setFromVector3(l)},end:()=>{e.rotation.setFromVector3(h)}};{let t=new ig().setFromEuler(OS.setFromVector3(l)),i=new ig().setFromEuler(OS.setFromVector3(h));return{update:r=>{!function(e,t,i,r){if(0===r)return i.copy(e);if(1===r)return i.copy(t);let s=e.w*t.w+e.x*t.x+e.y*t.y+e.z*t.z;if(s>=1)return i.copy(e);let a=1-s*s;if(a<=Number.EPSILON){let s=1-r;return i.w=s*e.w+r*t.w,i.x=s*e.x+r*t.x,i.y=s*e.y+r*t.y,i.z=s*e.z+r*t.z,i.normalize()}let o=Math.sqrt(a),l=Math.atan2(o,s),h=Math.sin((1-r)*l)/o,c=Math.sin(r*l)/o;i.w=e.w*h+t.w*c,i.x=e.x*h+t.x*c,i.y=e.y*h+t.y*c,i.z=e.z*h+t.z*c}(t,i,e.quaternion,r)},start:()=>{e.rotation.setFromVector3(l)},end:()=>{e.rotation.setFromVector3(h)}}}}(e,t,i,r,s))&&a.push(h),(d=function(e,t,i,r){let s=i[e]?i[e]:void 0,a=r[e];if(!a)return;let o=t[e],l=s?new iX().fromArray(s):o.clone(),h=new iv,c=new ig,d=new iv;l.decompose(h,c,d);let u=new iX().fromArray(a),p=new iv,f=new ig,m=new iv;if(u.decompose(p,f,m),!l.equals(u))return{update:e=>{Od.slerpQuaternions(c,f,e),Oh.lerpVectors(h,p,e),Oc.lerpVectors(d,m,e),o.compose(Oh,Od,Oc)},start:()=>{o.compose(h,c,d)},end:()=>{o.compose(p,f,m)}}}("hiddenMatrix",e,t,i))&&a.push(d))),o||l||h||d||u||p){let i=e instanceof TY?()=>{e.updateWorldMatrix(!0,!1,!0),e.resetBBoxNeedsUpdate()}:()=>{e.updateMatrix(),e.hasNonUniformScale&&(e.updateMatrixWorld(),e.updateMatrixWorldSVD()),e.parent?.matrixWorldFusedFalse&&(e.matrixWorld.multiplyMatrices(e.parent.matrixWorldFusedFalse,e.matrix),e.matrixWorldNeedsUpdate=!1),ES(e)&&E_(e.parent)&&e.invali
8402dateDownstreamBooleanData(!0),e.updatePathSnapping(Object.assign({},t.pathSnapping,f))};a.push({update:i,start:i,end:i})}return a}(e,t,i,s,r)),e instanceof TY?a.push(...function(e,t,i,r,s){let a=[],o,l,h,c,d,u,p,f,m,g,v,y,x,b,w;if("width"in e&&(o=Ou("width",e,t,i,s))&&a.push(o),"height"in e&&(l=Ou("height",e,t,i,s))&&a.push(l),e instanceof Pn||e instanceof Pd){let r={...t.fill},o={...i.fill};void 0!==r.enabled&&r.enabled!==o.enabled&&(a.push({update:()=>{e instanceof Pn&&(e.fill.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,color:{...r.color,a:0}}),o.enabled||Object.assign(o,{enabled:!0,color:{...o.color,a:0}})),(h=Oy("color",e.fill,r,o,s))&&a.push(h)}if(e instanceof Pn){let r={...t.stroke},o={...i.stroke};(r.enabled||o.enabled)&&(a.push({update:()=>{e instanceof Pn&&(e.stroke.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,color:{...r.color,a:0}}),o.enabled||Object.assign(o,{enabled:!0,color:{...o.color,a:0}})),(c=Oy("color",e.stroke,r,o,s))&&a.push(c),(d=Ou("thickness",e.stroke,r,o,s))&&a.push(d)}if(e instanceof Pn){let r={...t.dropShadow},o={...i.dropShadow};(r.enabled||o.enabled)&&(a.push({update:()=>{e instanceof Pn&&(e.dropShadow.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,color:{...r.color,a:0}}),o.enabled||Object.assign(o,{enabled:!0,color:{...o.color,a:0}})),(u=Oy("color",e.dropShadow,r,o,s))&&a.push(u),(p=Ou("blurRadius",e.dropShadow,r,o,s))&&a.push(p),(m=Ou("spread",e.dropShadow,r,o,s))&&a.push(m),(f=Ov("offset",e.dropShadow,r,o,s))&&a.push(f)}if(e instanceof Pn){let r={...t.innerShadow},o={...i.innerShadow};(r.enabled||o.enabled)&&(a.push({update:()=>{e instanceof Pn&&(e.innerShadow.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,color:{...r.color,a:0}}),o.enabled||Object.assign(o,{enabled:!0,color:{...o.color,a:0}})),(g=Oy("color",e.innerShadow,r,o,s))&&a.push(g),(v=Ou("blurRadius",e.innerShadow,r,o,s))&&a.push(v),(x=Ou("spread",e.innerShadow,r,o,s))&&a.push(x),(y=Ov("offset",e.innerShadow,r,o,s))&&a.push(y)}if(e instanceof Pn||e instanceof Pd){let r={...t.backgroundBlur},o={...i.backgroundBlur};(r.enabled||o.enabled)&&(a.push({update:()=>{e instanceof Pn&&(e.backgroundBlur.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,radius:0}),o.enabled||Object.assign(o,{enabled:!0,radius:0})),(b=Ou("radius",e.backgroundBlur,r,o,s))&&a.push(b)}if(e instanceof Pn){let r={...t.layerBlur},o={...i.layerBlur};(r.enabled||o.enabled)&&(a.push({update:()=>{e instanceof Pn&&(e.layerBlur.enabled=!0)}}),r.enabled||Object.assign(r,{enabled:!0,radius:0}),o.enabled||Object.assign(o,{enabled:!0,radius:0})),(w=Ou("radius",e.layerBlur,r,o,s))&&a.push(w)}if(e instanceof Pd||e instanceof Pl){let r=Op("cornerRadius",e,t,i,s);r&&a.push(r)}return a}(e,t,i,0,r)):(e.data.visible&&a.push(...function(e,t,i,r){let s=[];if(!("cloner"in i)||!e.cloner)return s;let a=e.cloner,o="cloner"in t?t.cloner:{},l=i.cloner;mu.forEach(e=>{let t;(t="count"===e?Ou("count",a.parameters,o,l,r,!0):Ox(e,a.parameters,o??{},l,r))&&s.push(t)});let h=function(e,t,i,r){if("radial"!==e.parameters.type)return;let s=t.radial,a=i.radial;if(!a)return;let o=e.parameters.radial,l=[];return mp.forEach(e=>{let t=Ox(e,o,s??{},a,r);t&&l.push(t)}),l}(a,o,l,r);h?.length&&s.push(...h);let c=function(e,t,i,r){if("linear"!==e.parameters.type)return;let s=t.linear,a=i.linear;if(!a)return;let o=[],l=e.parameters.linear;return mf.forEach(e=>{let t=Ox(e,l,s??{},a,r);t&&o.push(t)}),o}(a,o,l,r);c?.length&&s.push(...c);let d=function(e,t,i,r){if("grid"!==e.parameters.type)return;let s=t.grid,a=i.grid;if(!a)return;let o=[],l=e.parameters.grid;return mm.forEach(e=>{let t;(t="count"===e?Op(e,l,s??{},a,r,!0):Ox(e,l,s??{},a,r))&&o.push(t)}),o}(a,o,l,r);d?.length&&s.push(...d);let u=function(e,t,i,r){if("toObject"!==e.parameters.type)return;let s=t.toObject,a=i.toObject;if(!a)return;let o=[],l=e.parameters.toObject;return mg.forEach(e=>{let t;(t="count"===e?Ou(e,l,s??{},a,r,!0):Ox(e,l,s??{},a,r))&&o.push(t)}),o}(a,o,l,r);u?.length&&s.push(...u);let p=function(e,t,i,r){if(!e.parameters.randomness)return;let s=t.randomnessObject,a=i.randomnessObject;if(!a)return;let o=[],l=e.parameters.randomnessObject;
8402return mv.forEach(e=>{let t=Ox(e,l,s??{},a,r);t&&o.push(t)}),o}(a,o,l,r);return p?.length&&s.push(...p),s.length&&s.push({update:()=>{a.update()}}),s}(e,t,i,r)),ES(e)?(e instanceof Mb&&e.data.visible&&a.push(...function(e,t,i,r){let s=[];if(!("geometry"in i))return s;let a=e.geometry.userData.parameters,o="geometry"in t?t.geometry:{},l=i.geometry;if(e instanceof MM){let t=function(e,t,i,r){if(void 0===i.scaleBaked)return;let s=(t.scaleBaked??e.data.geometry.scaleBaked).map(e=>"string"==typeof e?Number(r.getVariable(e)??0):e),a=i.scaleBaked.map(e=>"string"==typeof e?Number(r.getVariable(e)??0):e);if(ge.isEqual(s,a))return;let o=[];return o.push({update:t=>{e.updateGeometryInteractions({scaleBaked:[tY.lerp(s[0],a[0],t),tY.lerp(s[1],a[1],t),tY.lerp(s[2],a[2],t)]},r),e.invalidateDownstreamBooleanData(),e.refreshAttachedClonersInteractions()},start:()=>{e.updateGeometryInteractions({scaleBaked:s},r),e.invalidateDownstreamBooleanData(),e.refreshAttachedClonersInteractions()},end:()=>{e.updateGeometryInteractions({scaleBaked:a},r),e.invalidateDownstreamBooleanData(),e.refreshAttachedClonersInteractions()}}),o}(e,o,l,r);t&&s.push(...t)}else{let t={};if(Object.assign(t,uV(a,gI),uV(o,gI)),gI.forEach(e=>{let i=Ox(e,t,o,l,r);i&&s.push(i)}),e instanceof PR){Object.assign(t,{extrusion:{...a.extrusion}});let e=function(e,t,i,r){if(!i.extrusion)return;let s=e.extrusion,a=t.extrusion??{},o=i.extrusion,l=[];return gD.forEach(e=>{let t=Ox(e,s,a,o,r);t&&l.push(t)}),l}(t,o,l,r);e&&s.push(...e)}s.length&&s.push({update:i=>{e.updateGeometryInteractions(t,r),e.updateGeometryGroupsIfNeeded(),e.refreshAttachedClonersInteractions()},start:i=>{e.updateGeometryInteractions(t,r),e.updateGeometryGroupsIfNeeded(),e.refreshAttachedClonersInteractions()},end:i=>{e.updateGeometryInteractions(t,r),e.updateGeometryGroupsIfNeeded(),e.refreshAttachedClonersInteractions()}})}return s}(e,t,i,r)),e.data.visible&&a.push(...function(e,t,i,r){let s=[];if(Array.isArray(e.material)){if(!("materials"in i&&i.materials))return s;let a="materials"in t&&t.materials?t.materials:[],o=i.materials;e.material.forEach((e,t)=>{if(!o[t])return;let i=a[t]??{},l=o[t];"string"==typeof i||"string"==typeof l||s.push(...Ob(e,i,l,r))})}else{if(!("material"in i&&i.material))return s;let a="material"in t&&t.material?t.material:{},o=i.material;if("string"==typeof a||"string"==typeof o)return s;s.push(...Ob(e.material,a,o,r))}return s}(e,t,i,r))):EM(e)?e.data.visible&&a.push(...function(e,t,i,r){let s=[];if(void 0!==i.intensity){let a=Ou("intensity",e,t,i,r);a&&s.push(a)}if(void 0!==i.color){let a=function(e,t,i,r,s){let a=i[e]?i[e]:void 0,o=r[e];if(!o)return;let l=t[e],h=a?"string"==typeof a?s.getColor(a).clone():new ii().setRGB(a.r,a.g,a.b):l.clone(),c="string"==typeof o?s.getColor(o).clone():new ii().setRGB(o.r,o.g,o.b);if(h.equals(c))return;let d=l.clone();return{update:i=>{d.lerpColors(h,c,i),t[e]?.copy?.(d)},start:()=>{d.copy(h)},end:()=>{d.copy(c)}}}("color",e,t,i,r);a&&s.push(a)}return s}(e,t,i,r)):EA(e)&&a.push(...function(e,t,i,r){let s=[],a="OrthographicCamera"===e.cameraType?t.orthographic?.zoom:t.perspective?.zoom,o="OrthographicCamera"===e.cameraType?i.orthographic?.zoom:i.perspective?.zoom;if(void 0!==o){let t=a??e.zoom;t!==o&&s.push({update:i=>{e.zoom=tY.lerp(t,o,i),e.updateProjectionMatrix()},start:()=>{e.zoom=t,e.updateProjectionMatrix()},end:()=>{e.zoom=o,e.updateProjectionMatrix()}})}if(void 0!==i.targetOffset){let a=Ou("targetOffset",e,t,i,r);a&&s.push(a)}return s}(e,t,i,r))),a.length?{update:e=>{a.forEach(t=>t.update(e))},start:e=>{a.forEach(t=>t.start?.(e))},end:e=>{a.forEach(t=>t.end?.(e))}}:void 0}var OA=new iv;function OM(e,t,i=!1){let r=[],s=i=>{let r=i.data;for(let e of(delete i.states,i.currentState=null,i.reversibleToState=null,i.currentTransitionEvent=null,r.states)){let t={...e.data};i.states||(i.states={}),i.states[e.id]=yI.patch(r,t)}OC(e.scene,i,null,t,void 0!==r.events.find(e=>"Follow"===e.data.type||"LookAt"===e.data.type)),OE(e)};e.scene.traverse2D(s),e.traverseChildren(a=>{if(i&&(a.rigidBody?.setTranslation(a.position0,!0),a.rigidBody?.setRotation(a.rotation0,!0),a.rigidBody?.setLinvel(OA,!0),a.rigidBody?.setAngvel(OA,!0)),!wQ.is(a))return;let o=a.uuid,l=a.data;if(delete a.states,a.uuid===mh)return;let h=!1;for(let t of(r.some(t=>e.scene.find(o)?.isDescendantOf(t))?h=!0:l.physics?.fusedBody===!0&&"dynamic"===l.physics.rigidBody&&r.push(o),a.data=l,a.currentState=null,a.reversibleToState=null,a.currentTransitionEvent=null,l.states)){let i={...t.data};!0===e.data.globalPhysics.usePhysics&&l.physics&&("dynamic"===l.physics.rigidBody||h)&&(void 0!==t.data.position&&delete i.position,void 0!==t.data.rotation&&delete i.rotation,void 0!==t.data.hiddenMatrix&&delete i.hiddenMatrix),a.states||(a.states={}),a.states[t.id]=ya.patch(l,i)}OC(e.scene,a,null,t,void 0!==l.events.find(e=>
8402"Follow"===e.data.type||"LookAt"===e.data.type)),a instanceof Pk&&a.frame&&(a.frame.traverse(e=>s(e)),a.uiCanvas?.applySize())}),OE(e),e.frame&&(e.frame.traverse(e=>s(e)),e.uiCanvas?.applySize())}function OE(e){e.traverseEntity(t=>{for(let i of t.data.events){let t=[];switch(i.data.type){case"Follow":case"MouseHover":case"Scroll":case"MouseDown":case"MouseUp":case"MousePress":case"KeyUp":case"KeyDown":case"KeyPress":case"Collision":t.push(...i.data.actions);break;case"GameControl":for(let e of Object.values(i.data.gameActions))t.push(...e);break;case"DragDrop":t.push(...i.data.dragDropActions.drag,...i.data.dragDropActions.drop);break;case"Conditional":t.push(...i.data.inActions,...i.data.outActions)}for(let i of t)if("Create"===i.data.type&&"Yes"===i.data.hideBase){let t=e.scene.find(i.data.object);t&&(t.visible=!1)}}})}function OC(e,t,i,r,s=!1){if(t instanceof Mb&&!(t instanceof Do)&&t.removeInteractionGeometry(r),t instanceof TY?t.changeSelectedState(i,{shared:r},s):t.changeSelectedState(i,{scene:e,shared:r},s),t instanceof Mb&&t.updateGeometryGroupsIfNeeded(),t instanceof Eg&&t.updateCameraState(t.dataPatched,{scene:e,shared:r}),!(t instanceof TY)){if(t.cloner)for(let e of t.cloner.children)e.playModeVisible=void 0;t.updateVisible()}}function OT(e){let t;if(5===e.easing){let{control1:i,control2:r}=e;t=`cubicBezier(
8403			${i[0]}, ${i[1]}, ${r[0]}, ${r[1]}
8404		)`}else if(6===e.easing){let{mass:i,stiffness:r,damping:s,velocity:a}=e;t=`spring( ${i}, ${r}, ${s}, ${a} )`}else{let i;switch(e.easing){case 0:default:i=gh.linear;break;case 1:i=gh.ease;break;case 2:i=gh.easeIn;break;case 3:i=gh.easeOut;break;case 4:i=gh.easeInOut}let[r,s,a,o]=i;t=`cubicBezier( ${r}, ${s}, ${a}, ${o} )`}return{duration:Math.max(e.duration,1e-4),easing:t}}function OP(e){let t={delay:0,loop:-1===e.repeat||e.repeat+1};if(0===e.repeat)t.direction="normal",t.rewind=!1;else switch(e.direction){case"pingpong":t.direction="alternate",t.rewind=!1;break;case"pingpong-rewind":t.direction="alternate",t.rewind=!0;break;default:t.direction="normal",t.rewind=!1}switch(t.delay=0,t.endDelay=0,t.startOnceDelay=0,t.pingPongDelayCorrection=0,t.pingPongEndDelayCorrection=0,e.delayDirection){case"start-once":t.startOnceDelay=e.delay;break;case"start":t.delay=e.delay;break;case"end":t.endDelay=e.delay;break;case"start-end":case void 0:t.delay=e.delay,t.endDelay=e.delay}return"alternate"===t.direction&&(t.delay/=2,t.endDelay/=2,"start"===e.delayDirection?(t.pingPongDelayCorrection=t.delay,"number"==typeof t.loop&&t.loop%2==0&&(t.pingPongEndDelayCorrection=t.delay)):"end"===e.delayDirection?"number"==typeof t.loop&&t.loop%2!=0&&(t.pingPongEndDelayCorrection=t.endDelay):"start-end"===e.delayDirection&&(t.pingPongDelayCorrection=t.delay,t.pingPongEndDelayCorrection=t.endDelay)),t}var OD={type:"beginState"},OI={type:"completeState",isfromEntity:!1},OO=class{constructor(e,t,i,r,s,a){if(this.object=e,this.data=r,this.sharedAssets=s,this.allowSlerp=a,this.targets={t:0},this.firstLoop=!0,this._changeBegan=!1,this._changeCompleted=!0,this.onChange=()=>{this.callback&&(this.callback.update(this.targets.t),this.object.requestRender()),0===this.targets.t||1===this.targets.t?this._changeCompleted||(this._changeCompleted=!0,this._changeBegan=!1,this.onChangeComplete()):(this._changeCompleted&&(this._changeCompleted=!1),this._changeBegan||(this._changeBegan=!0,this.onChangeBegin()))},this.onChangeBegin=()=>{this.object.reversibleToState=this.to.id;let e=this.targets.t>.5?this.from.id:this.to.id;this.object.prevState!==this.object.currentState&&(this.object.prevState=this.object.currentState),this.object.currentState=e,this.object.dispatchEvent({type:"beginState",state:e}),this.object instanceof TY||this.object.traverseEntity(e=>{e!==this.object&&e instanceof Eg&&e.dispatchEvent(OD)})},this.onChangeComplete=()=>{this.firstLoop&&(this.onFirstLoop(),this.firstLoop=!1),this.object.reversibleToState=this.to.id;let e=this.targets.t<.5?this.from.id:this.to.id;this.object.prevState!==this.object.currentState&&(this.object.prevState=this.object.currentState),this.object.currentState=e,this.object.dispatchEvent({type:"completeState",state:e}),this.object instanceof TY||this.object.traverseEntity(e=>{e!==this.object&&e instanceof Eg&&e.dispatchEvent(OI)})},this.onFirstLoop=()=>{this.useCurrentState&&(this.callback=O_(this.object,this.from.data,this.to.data,this.sharedAssets,this.allowSlerp))},void 0===t){let e=OL(this.object,this.object.currentState===i?this.object.prevState:this.object.currentState);if(!e)throw Error("Missing property");this.from=e}else{let e=OL(this.object,t);if(!e)throw Error("Missing property");this.from=e}if(void 0===i)throw Error("Missing property");{let e=OL(this.object,i);if(!e)throw Error("Missing property");this.to=e}this.useCurrentState=void 0===t||void 0===i,this.params={targets:this.targets,t:1,autoplay:!1,...OP(r),...OT(r),
8404change:this.onChange},this.callback=O_(this.object,void 0===t?{}:this.from.data,void 0===i?{}:this.to.data,this.sharedAssets,this.allowSlerp)}get changeBegan(){return this._changeBegan}get changeCompleted(){return this._changeCompleted}},OR=class extends tL{constructor(e,t,i,r,s){if(super(),this.eventType=e,this.data=t,this.page=i,this.shared=r,this.condition=s,this.toggleIsForward=!1,this.timelineNeedsRebuild=!1,this.hasPlayedOnce=!1,this.onTimelineChangeComplete=()=>{"normal"!==this.data.tweens[0].data.direction&&(this.toggleIsForward=!this.toggleIsForward),!1!==this.timelineNeedsRebuild&&(this.timeline?.pause(),this.buildTimeline({isForward:this.toggleIsForward,needsRebuild:!1,isRebuild:!0}),this.timeline.play())},!t.object)throw Error("Missing property");let a=this.page.scene.find(t.object)??this.page.uiCanvas?.find(t.object)??this.page.scene.find2DInUIObjects(t.object);if(!a||!a.states||(this.object=a,t.tweens.length<2))throw Error("Missing property");this.tweens=Array(this.data.tweens.length-1),this.startOnceDelay="start-once"===t.tweens[0].data.delayDirection?t.tweens[0].data.delay:0,this.init()}get playing(){return this.timeline?.paused===!1}get changeBegan(){return this.tweens.some(e=>e.changeBegan)??!1}init(){this.initialCurrentState=OL(this.object,this.object.currentState).id,this.toggleIsForward=!1}get currentState(){return"Toggle"===this.data.runMode&&mr(this.eventType)?this.initialCurrentState:this.object.currentState}buildTimeline({isForward:e=!0,needsRebuild:t=!1,isRebuild:i=!1}={}){try{let r=OP(this.data.tweens[0].data);i&&"number"==typeof r.loop&&r.loop--,this.timeline?.pause(),this.timeline=Oo.timeline({autoplay:!1,...r,...!0===r.loop||r.loop>1?{timelineChangeComplete:this.onTimelineChangeComplete}:{}});let s=this.tweens.findIndex(e=>e?.changeBegan);if(!0===t&&(this.timelineNeedsRebuild=!0),e){let e=-1===s?0:s;for(let t=e;t<this.data.tweens.length-1;t++){let i=this.data.tweens[t],a=this.data.tweens[t+1],o;t===e&&(!0===this.object.wasMovedByUser||this.object.previousAction?.changeBegan===!0)?(o=void 0,this.object instanceof Eg&&(this.object.wasMovedByUser=!1)):o=void 0===i.data.state?this.currentState:i.data.state;let l=new OO(this.object,o,void 0===a.data.state?this.currentState:a.data.state,a.data,this.shared,this.data.allowSlerp??!1);-1!==s&&t===e&&Object.assign(l.params,{startOnceDelay:0}),this.tweens[t]=l,this.timeline.add(l.params,this.timeline.duration+(t===e?r.delay:0))}this.timeline.duration+=r.endDelay}else{let e=-1===s?this.data.tweens.length-1:s+1;for(let t=e;t>0;t--){let i=this.data.tweens[t],a=this.data.tweens[t-1],o;t===e&&(!0===this.object.wasMovedByUser||this.object.previousAction?.changeBegan===!0)?(o=void 0,this.object instanceof Eg&&(this.object.wasMovedByUser=!1)):o=void 0===i.data.state?this.currentState:i.data.state;let l=new OO(this.object,o,void 0===a.data.state?this.currentState:a.data.state,i.data,this.shared,this.data.allowSlerp??!1);-1!==s&&t===e&&Object.assign(l.params,{startOnceDelay:0}),this.tweens[t-1]=l,this.timeline.add(l.params,this.timeline.duration+(t===e?r.endDelay:0))}this.timeline.duration+=r.delay}}catch(e){e instanceof Error&&console.error(e.message)}this.object.previousAction?.playing===!0&&this.object.previousAction.pause(),this.object.previousAction=this}play(){if(!1===Oq(this.shared,this.condition)||mr(this.eventType)&&"Once"===this.data.runMode&&this.hasPlayedOnce||(this.hasPlayedOnce=!0,this.playing))return!1;clearTimeout(this.timeoutId);let e=OP(this.data.tweens[0].data).pingPongDelayCorrection;this.timeoutId=window.setTimeout(()=>{try{this.buildTimeline(),this.timeline.play()}catch(e){e instanceof Error&&console.error(e.message)}},this.startOnceDelay+e)}pause(){this.timeline?.pause(),clearTimeout(this.timeoutId),this.tweens=Array(this.data.tweens.length-1),delete this.timeoutId}stop(){this.pause();let e=void 0===this.data.tweens[0].data.state?this.initialCurrentState:this.data.tweens[0].data.state;this.object instanceof TY?this.object.changeSelectedState(e,{shared:this.shared}):this.object.changeSelectedState(e,{scene:this.page.scene,shared:this.shared}),this.object.currentState=e}seek(e){if(!1===Oq(this.shared,this.condition))return!1;void 0===this.timeline&&this.buildTimeline(),this.timeline?.seek(e*this.timeline.duration,!0)}toggle(e){if(!1===Oq(this.shared,this.condition))return!1;clearTimeout(this.timeoutId),this.toggleIsForward=e??!this.toggleIsForward,this.playing?(this.timeline?.pause(),this.buildTimeline({isForward:this.toggleIsForward,needsRebuild:!0}),this.timeline.play()):this.timeoutId=window.setTimeout(()=>{this.timeline?.pause(),this.buildTimeline({isForward:this.toggleIsForward}),this.timeline.play()},this.startOnceDelay)}playFromCurrent(){this.toggle(!0)}reverseFromCurrent(){this.toggle(!1)}dispose(){this.pause()}};function OL(e,t){let i,r;if("string"==typeof t?(i=t,r=e.states?.[i]):null===t&&(i=null,r=e.data),!(void 0===i||void 0===r))return{id:i,data:r}}var OB={type:"beginState"},Oz={type:"completeState",isfromEntity:!1},OF={type:"requestRender"},ON=class extends tL{constructor(e,t,i,r){super(),this.data=e,this.page=t,this.shared=i,this.condition=r,this.toggleIsForward=!1,this.posStart=new iv,this.posEnd=new iv,this.qStart=new ig,this.qEnd=new ig,this.zoomStart=1,this.zoomEnd=1}init(){}get playing(){return this.animation&&this.animation.began&&!this.animation.completed}buildAnimation(e=!1){if(!this.data.animate)return;let t=this.page.scene.find(this.data.targetCamera);if(!t||!t.visible)throw ReferenceError("Target camera not founded or not visible");let i={t:0};this.posStart.copy(this.page.activeCamera.position),this.qStart.copy(this.page.activeCamera.quaternion),this.zoomStart=this.page.activeCamera.zoom,this.animation=Oo({targets:i,t:1,...OT(this.data),update:()=>{0===i.t&&("Toggle"!==this.data.runMode||this.toggleIsForward?(this.posEnd.copy(t.position),this.qEnd.copy(t.quaternion),this.zoomEnd=t.zoom,this.fromCamera=this.page.activeCamera,this.switchCamera(t.uuid)):this.fromCamera&&(this.posEnd.copy(this.fromCamera.position),this.qEnd.copy(this.fromCamera.quaternion),this.zoomEnd=this.fromCamera.zoom,this.switchCamera(this.fromCamera.uuid)),this.page.activeCamera.dispatchEvent(OB));let e=this.page.activeCamera;e.position.lerpVectors(this.posStart,this.posEnd,i.t),e.quaternion.slerp
8404Quaternions(this.qStart,this.qEnd,i.t),e.zoom=this.zoomStart+(this.zoomEnd-this.zoomStart)*i.t,e.wasMovedBySwitchCameraAction=!0,e.updateMatrix(),e.updateMatrixWorld(),e.updateProjectionMatrix(),e.dispatchEvent(OF),1===i.t&&e.dispatchEvent(Oz)}})}switchCamera(e){let t=this.page.activeCamera,i=this.page.scene.find(e);if(!i||!i.visible)throw ReferenceError("Target camera not founded or not visible");this.page.switchActiveCamera(i),t.dispatchEvent({type:"cameraChange",camera:i})}play(){if(!1===Oq(this.shared,this.condition))return!1;if(!this.playing&&this.page.activeCamera.uuid!==this.data.targetCamera)try{clearTimeout(this.timeoutId),this.timeoutId=window.setTimeout(()=>{delete this.timeoutId,this.data.animate?(this.buildAnimation(),this.animation?.play()):this.switchCamera(this.data.targetCamera)},1e3*this.data.delay)}catch{}}pause(){this.animation?.pause(),clearTimeout(this.timeoutId),delete this.timeoutId}toggle(e){if(!1===Oq(this.shared,this.condition))return!1;if(window.clearTimeout(this.timeoutId),delete this.timeoutId,e!==this.toggleIsForward)try{this.playing?(this.animation?.pause(),this.toggleIsForward=e??!this.toggleIsForward,this.buildAnimation(!0),this.animation?.play()):this.timeoutId=window.setTimeout(()=>{this.toggleIsForward=e??!this.toggleIsForward,this.data.animate?(this.animation?.pause(),this.buildAnimation(),this.animation?.play()):(this.toggleIsForward?(this.fromCamera=this.page.activeCamera,this.switchCamera(this.data.targetCamera)):this.fromCamera&&this.switchCamera(this.fromCamera.uuid),this.page.activeCamera.dispatchEvent(Oz),this.page.activeCamera.dispatchEvent(OF))},1e3*this.data.delay)}catch{}}playFromCurrent(){this.toggle(!0)}reverseFromCurrent(){this.toggle(!1)}dispose(){this.pause(),this.toggleIsForward=!1}};function Ok(e){let t=e?.tracks.filter(e=>"vector"===e.ValueTypeName||"quaternion"===e.ValueTypeName).map(e=>e.times.length);if(t?.length){let e=t&&t.length?uB(t,h1,uR):void 0;return e&&e>2?e:2}return 2}var OU=class extends tL{constructor(e,t,i,r,s){super(),this.data=e,this.page=t,this.animationControls=i,this.shared=r,this.condition=s,this.startOnceDelay=0,this.toggleIsForward=!1;let a=e.object,o=t.scene.find(e.object);o&&Array.isArray(o.identity)&&(a=o.identity[0]),this.data={...e,object:a};let l=this.animationControls.clipIdToAction[e.clipId+"/"+a];if(this.duration=l?.getClip()?.duration??1,this.data.crop2){let e=Ok(l?.getClip());this.leftFrameTime=this.data.crop2[0]/(e-1)*this.duration,this.rightFrameTime=this.data.crop2[1]/(e-1)*this.duration}else{let e=l?.getClip()?.tracks[0]?.times.length;e&&e>1?(this.leftFrameTime=this.data.crop[0]/e*this.duration,this.rightFrameTime=this.data.crop[1]/e*this.duration):(this.leftFrameTime=0,this.rightFrameTime=this.duration)}this.startOnceDelay=e.delay}get playing(){return this.threeAnimAction?.isRunning()??!1}play(e=!1){if(!1===Oq(this.shared,this.condition))return!1;window.clearTimeout(this.timeoutId),this.timeoutId=window.setTimeout(()=>{if(this.threeAnimAction=this.animationControls.play(this.data),!this.threeAnimAction)return;this.threeAnimAction.reset(),this.threeAnimAction.time=this.leftFrameTime,this.threeAnimAction._clip.start=this.leftFrameTime,this.threeAnimAction._clip.duration=this.rightFrameTime;let t=this.data.object;Object.entries(this.animationControls.clipIdToAction).forEach(([i,r])=>{let s=i.split("/")[1];this.threeAnimAction!==r&&s===t&&r.isRunning()&&(e?r.fadeOut(.2):r.stop())}),e&&this.threeAnimAction?.fadeIn(.2)},this.startOnceDelay)}pause(){this.threeAnimAction&&(this.threeAnimAction.paused=!0),window.clearTimeout(this.timeoutId),delete this.timeoutId}stop(){this.threeAnimAction?.fadeOut(.2)}seek(e){this.threeAnimAction=this.animationControls.play(this.data),this.threeAnimAction&&(this.threeAnimAction.paused=!0,this.threeAnimAction.time=tY.clamp(this.threeAnimAction.time+1/60*e,this.leftFrameTime,this.rightFrameTime-16e-5),this.animationControls.needsUpdate=!0,this.animationControls.requestRender())}toggle(e,t=!1){if(!1===Oq(this.shared,this.condition))return!1;this.toggleIsForward=e??!this.toggleIsForward,this.threeAnimAction&&(this.threeAnimAction._loopCount=0),this.playing?this.threeAnimAction&&(this.threeAnimAction.timeScale=this.toggleIsForward?1:-1,this.toggleIsForward?(this.threeAnimAction._clip.start=this.leftFrameTime,this.threeAnimAction._clip.duration=this.rightFrameTime):(this.threeAnimAction._clip.start=this.rightFrameTime,this.threeAnimAction._clip.duration=this.leftFrameTime)):this.timeoutId=window.setTimeout(()=>{if(this.threeAnimAction=this.animationControls.play(this.data),this.threeAnimAction){this.toggleIsForward?(this.threeAnimAction.time=this.leftFrameTime,this.threeAnimAction._clip.start=this.leftFrameTime,this.threeAnimAction._clip.duration=this.rightFrameTime):(this.threeAnimAction.time=this.rightFrameTime,this.threeAnimAction._clip.start=this.rightFrameTime,this.threeAnimAction._clip.duration=this.leftFrameTime),this.threeAnimAction.paused=!1,this.threeAnimAction.timeScale=this.toggleIsForward?1:-1;let e=this.data.clipId.split("/")[1];
vendor: 4,213 bytes, line 8404
8404Object.entries(this.animationControls.clipIdToAction).forEach(([i,r])=>{let s=i.split("/")[1];this.threeAnimAction!==r&&s===e&&r.isRunning()&&(t?r.fadeOut(.2):r.stop())}),t&&this.threeAnimAction?.fadeIn(.2)}},this.startOnceDelay)}playFromCurrent(){this.toggle(!0)}reverseFromCurrent(){this.toggle(!1)}dispose(){let e=this.animationControls.clipIdToAction[this.data.clipId+"/"+this.data.object]?.getClip();e&&(e.duration=this.duration),this.pause()}},OV=class{constructor(e,t,i,r,s){this.data=e,this.page=t,this.eventManager=i,this.shared=r,this.condition=s,this.timeOutId=-1,this.scene=t.scene}dispatch(){if(!1===Oq(this.shared,this.condition))return!1;this.data.target!==this.page.uuid&&(window.clearTimeout(this.timeOutId),this.timeOutId=window.setTimeout(()=>{this.play()},1e3*this.data.delay))}dispose(){window.clearTimeout(this.timeOutId)}play(){if(this.scene.children.every(e=>e.uuid!==this.data.target||e.data.uiScene))return;"fade"===this.data.transition&&this.data.duration>0&&this.eventManager.eventContext.renderer.renderFromSceneForSceneTransitionPass(this.scene,this.scene.activeCamera,1e3*this.data.duration),this.eventManager.deactivate(),this.eventManager.controlsManager.deactivate();let e=this.scene.activeCamera;this.scene.updatePage(this.data.target),this.scene.traverseVisibleEntity(e=>{"ParticleSystem"===e.type&&(e.sleep(),e.wakeUp(),e.data.autoPlay?e.start():e.stop())}),this.scene.activePage.switchToPlayCamera(),this.scene.activeCamera.copyViewPlaneSize(e),OM(this.scene.activePage,this.shared),this.eventManager.activate(),this.eventManager.controlsManager.activate(this.eventManager)}},Oj=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r,this.evaluatedCondition=!1}checkConditions(){this.evaluatedCondition=Oq(this.shared,this.condition)}dispatch(){if(!1===this.evaluatedCondition)return!1;let e=this.shared.getVariable(this.data.variableId),t=wV(this.data.expression,this.shared,yg.typeOfVariable(e));void 0!==t&&this.shared.updateVariable(this.data.variableId,"string"==typeof t?{textValue:t}:t)}dispose(){}},OG=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r,this.timeoutId=null}dispatchInner(){if(!1===Oq(this.shared,this.condition))return!1;let e=this.shared.getDynamicVariablePlayState(this.data.variableId);if("PlayPause"===this.data.mode)void 0===this.shared.getDynamicVariableToggleIsForward(this.data.variableId)&&this.shared.setDynamicVariableToggleIsForward(this.data.variableId,!0),this.shared.setDynamicVariablePlayState(this.data.variableId,"Playing"===e?"Paused":"Playing");else if("Play"===this.data.mode&&"Playing"!==e)void 0===this.shared.getDynamicVariableToggleIsForward(this.data.variableId)&&this.shared.setDynamicVariableToggleIsForward(this.data.variableId,!0),this.shared.setDynamicVariablePlayState(this.data.variableId,"Playing");else if("Stop"===this.data.mode&&"Stopped"!==e)this.shared.setDynamicVariablePlayState(this.data.variableId,"Stopped");else if("Pause"===this.data.mode&&"Paused"!==e)this.shared.setDynamicVariablePlayState(this.data.variableId,"Paused");else if("Restart"===this.data.mode)this.shared.setDynamicVariablePlayState(this.data.variableId,"Restarted");else if("Toggle"===this.data.mode){let t=this.shared.getDynamicVariableToggleIsForward(this.data.variableId);"Playing"===e?this.shared.setDynamicVariableToggleIsForward(this.data.variableId,void 0!==t&&!t):(this.shared.setDynamicVariableToggleIsForward(this.data.variableId,!t),this.shared.setDynamicVariablePlayState(this.data.variableId,"Playing"))}}dispatch(){let e=this.data.delay,t=this.shared.getDynamicVariablePlayState(this.data.variableId);"PlayPause"===this.data.mode&&"Playing"===t&&(e=this.data.pauseDelay),0!==e?(this.timeoutId&&window.clearTimeout(this.timeoutId),this.timeoutId=window.setTimeout(()=>{this.timeoutId=null,this.dispatchInner()},e)):this.dispatchInner()}dispose(){this.timeoutId&&window.clearTimeout(this.timeoutId)}},OH=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r}dispatch(){if(!1===Oq(this.shared,this.condition))return!1;("single"===this.data.target?this.data.variableId?[this.data.variableId]:[]:Object.keys(this.shared.getVariables())).forEac
8404h(e=>{this.shared.getVariable(e);let t=this.shared.data.variables.data(e)?.value;void 0!==t&&this.shared.updateVariable(e,t),this.shared.enableLocalStorageForPersistentVariables&&localStorage.removeItem(Md(e))})}dispose(){}},OW=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r}dispatch(){if(!1===Oq(this.shared,this.condition))return!1;this.data.userAPIId&&this.shared.getUserAPI(this.data.userAPIId)?.callUserAPI(this.shared)}dispose(){}};function Oq(e,t){if(void 0===t)return!0;if(0===t.expression.length)return!1;let i=wV(t.expression,e,"boolean");return t.negate?!i:!!i}function OX(e,t,i,r,s,a){let o={Audio:[],Video:[],Particles:[],Link:[],Destroy:[],Create:[],Reset:[],Transition:[],SwitchCamera:[],Animation:[],SceneTransition:[],SetVariable:[],DynamicVariablePlay:[],ClearLocalStorage:[],UserAPI:[]},l=t=>({id:h,data:c})=>{try{"Audio"===c.type?ml[e.type].includes("Audio")&&o.Audio.push(new Im(h,c,a,r,t)):"Video"!==c.type||a instanceof TY?"Particles"===c.type?ml[e.type].includes("Particles")&&o.Particles.push(new Ig(c,i,r,t)):"Link"===c.type?ml[e.type].includes("Link")&&o.Link.push(new Ix(c,s.controlsManager,r,t)):"Create"===c.type?ml[e.type].includes("Create")&&o.Create.push(new O5(c,i,s.controlsManager,r,t)):"Destroy"===c.type?ml[e.type].includes("Destroy")&&o.Destroy.push(new Ib(c,i,s.controlsManager,r,t)):"Reset"===c.type?ml[e.type].includes("Reset")&&o.Reset.push(new Iw(c,i,r,s,t)):"Transition"===c.type?ml[e.type].includes("Transition")&&o.Transition.push(new OR(e.type,c,i,r,t)):"SwitchCamera"===c.type?ml[e.type].includes("SwitchCamera")&&o.SwitchCamera.push(new ON(c,i,r,t)):"SceneTransition"===c.type?ml[e.type].includes("SceneTransition")&&o.SceneTransition.push(new OV(c,i,s,r,t)):"Animation"===c.type?ml[e.type].includes("Animation")&&o.Animation.push(new OU(c,i,s.animationControls,r,t)):"SetVariable"===c.type?ml[e.type].includes("SetVariable")&&o.SetVariable.push(new Oj(c,i,r,t)):"DynamicVariablePlay"===c.type?ml[e.type].includes("DynamicVariablePlay")&&o.DynamicVariablePlay.push(new OG(c,i,r,t)):"Conditional"===c.type?ml[e.type].includes("Conditional")&&(c.ifActions.forEach(l({expression:c.condition,negate:!1})),c.elseActions.forEach(l({expression:c.condition,negate:!0}))):"ClearLocalStorage"===c.type?ml[e.type].includes("ClearLocalStorage")&&o.ClearLocalStorage.push(new OH(c,i,r,t)):"UserAPI"===c.type&&ml[e.type].includes("UserAPI")&&o.UserAPI.push(new OW(c,i,r,t)):ml[e.type].includes("Video")&&o.Video.push(new O$(h,c,a,r,t))}catch(e){}};return t.forEach(l()),o}function OY(e){Object.values(e).forEach(e=>{e.forEach(e=>{(e instanceof Im||e instanceof O$||e instanceof Ig||e instanceof OU||e instanceof OR||e instanceof O5||e instanceof Ib||e instanceof ON||e instanceof OV||e instanceof Iw||e instanceof Oj||e instanceof OG)&&e.dispose()})})}var OQ=new Map,OK=new Map,OZ=class{constructor(e,t,i){this.data=t,this.delay=0,this.status="stopped";let{layerId:r,loop:s,volume:a,delay:o}=t;if(this.object=i,void 0===r)throw Error("Missing property");let l=function(e,t){let i;if("material"in e&&(i=Array.isArray(e.material)?e.material[0].layers.find(e=>e.uuid===t):e.material.layers.find(e=>e.uuid===t)),i)return i.color.texture.image.img instanceof HTMLVideoElement?i.color.texture.image.img:void 0}(i,r);l&&(this.videoElement=l,this.videoElement.loop=s===1/0,uX&&(this.videoElement.autoplay=!0),void 0!==a&&(this.videoElement.volume=a)),void 0!==o&&(this.delay=o),OK.has(i.uuid)?OK.get(i.uuid).push(this):OK.set(i.uuid,[this]),OQ.set(e,this),this.pause()}mute(){this.videoElement&&(this.videoElement.muted=!0)}unMute(){this.videoElement&&(this.videoElement.muted=!1)}play(e){if(!this.videoElement)return;let t=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);e?(this.mute(),this.delay+=150):t?(this.mute(),window.setTimeout(()=>{this.unMute()},100)):this.unMute(),this.delayTimerId=window.setTimeout(()=>{if(!this.videoElement)return;let e=this.videoElement.play();void 0!==e&&e.then(e=>{}).catch(e=>{this.play()}),this.clearDelay()},this.delay),this.status="playing"}clearDelay(){this.delayTimerId&&(clearTimeout(this.delayTimerId),delete this.delayTimerId)}pause(){this.videoElement&&(this.videoElement.pause(),this.status="paused")}stop(){this.videoElement&&(this.videoElement.pause(),this.videoElement.currentTime=0,this.status="stopped",this.clearDelay())}
8404playByToggle(){"stop"===this.data.toggle?"playing"===this.status?this.stop():(this.stop(),this.play()):"pause"===this.data.toggle?"playing"===this.status?this.pause():this.play():(this.stop(),this.play())}dispose(){this.videoElement&&(this.stop(),this.videoElement.muted=!0)}},OJ=class{constructor(e){this.data=e}dispatch(){this.data.playVideo?this.pauseVideo(this.data.playVideo):this.data.object?this.pauseAllVideosFromObject(this.data.object):this.pauseAllVideos()}pauseVideo(e){let t=OQ.get(e);t&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{t[this.data.interaction](),this.disposeDelay()},this.data.delay)):t[this.data.interaction]())}pauseAllVideosFromObject(e){let t=OK.get(e);t?.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{t.forEach(e=>e[this.data.interaction]()),this.disposeDelay()},this.data.delay)):t.forEach(e=>e[this.data.interaction]()))}pauseAllVideos(){let e=[...OK.values()];e.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{e.forEach(e=>{e.forEach(e=>{e[this.data.interaction]()})}),this.disposeDelay()},this.data.delay)):e.forEach(e=>{e.forEach(e=>{e[this.data.interaction]()})}))}disposeDelay(){clearTimeout(this.timeoutId),delete this.timeoutId}dispose(){clearTimeout(this.timeoutId),delete this.timeoutId}},O$=class{constructor(e,t,i,r,s){if(this.data=t,this.shared=r,this.condition=s,"play"===t.interaction)this.interaction=new OZ(e,t,i);else if("pause"===t.interaction||"stop"===t.interaction)this.interaction=new OJ(t);else throw Error("Missing property")}dispatchBasic(){if(!1===Oq(this.shared,this.condition))return!1;this.interaction instanceof OZ?this.interaction.playByToggle():this.interaction.dispatch()}dispatchConditional(){if(!1===Oq(this.shared,this.condition))return!1;this.interaction instanceof OZ?this.interaction.play():this.interaction.dispatch()}dispose(){this.interaction.dispose()}},O0=(()=>{let e,t,i,r;function s(i){!e&&!O1()&&t?.sharedGameControlGlobals.createdObjects.length>0&&(e=requestAnimationFrame(a)),i&&(t=i,r=i.requestRender)}function a(s){let o=i?s-i:0,l=t.sharedGameControlGlobals.createdObjects,h=t.sharedGameControlGlobals.nCreatedPerAction,c=l.length,d=0;for(;d<c;){let e=l[d];void 0===e.userData.createdTime&&(e.userData.createdTime=s),void 0===e.userData.lifetime&&void 0===e.userData.quantity||e.userData.lifetime&&s-e.userData.createdTime<e.userData.lifetime||e.userData.quantity&&h[e.userData.actionId]<=e.userData.quantity?(e.userData.velocity&&(e.position.addScaledVector(e.userData.velocity,o/1e3),e.updateMatrix(),r()),d++):(h[e.userData.actionId]>e.userData.quantity&&h[e.userData.actionId]--,l.splice(d,1),e.removeFromParent(),t.sharedGameControlGlobals.rapierWorld&&e.rigidBody?(t.sharedGameControlGlobals.colliderToEntity.delete(e.rigidBody.collider(0).handle),t.sharedGameControlGlobals.rapierWorld.removeRigidBody(e.rigidBody)):(e.bvhGeometry=void 0,t.sharedGameControlGlobals.entitiesWithTransformAnim=t.sharedGameControlGlobals.entitiesWithTransformAnim.filter(e=>void 0!==e.bvhGeometry)),c--,r())}e=d>0?requestAnimationFrame(a):void 0,i=d>0?s:void 0}return"u">typeof document&&document.addEventListener("visibilitychange",function(){O1()?e&&(cancelAnimationFrame(e),e=void 0,i=void 0):s()}),s})();function O1(){return!!document&&document.hidden}var O2=new ig,O3=new iv,O4=new iv,O5=class{constructor(e,t,i,r,s){this.data=e,this.page=t,this.controlsManager=i,this.shared=r,this.condition=s,this.intervalId=null,this.timeoutIdQueue=[],this.uniqueId=tY.generateUUID(),this.dispatch=()=>{if(!1===Oq(this.shared,this.condition))return!1;this.data.delay?this.timeoutIdQueue.push(window.setTimeout(this.dispatchInner,1e3*this.data.delay)):this.dispatchInner()},this.dispatchFromStart=()=>{if(!1===Oq(this.shared,this.condition))return!1;this.timeoutIdQueue.push(window.setTimeout(this.dispatchInner,1e3*this.data.delay))},this.dispatchThrottled=uj(this.dispatch,1e3/this.data.creationSpeed),this.dispatchStart=()=>{null===this.intervalId&&(this.intervalId=window.setInterval(this.dispatch,1e3/this.data.creationSpeed))},this.dispatchStop=()=>{null!==this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=null)},this.dispatchInner=()=>{this.timeoutIdQueue.shift();let e=new xb(this.object);if(e.playModeVisible=!0,e.expand(),"world"!==this.data.coordinateSystem){let t=this.data.coordinateSystem,i=this.page.scene.find(t);i&&(i.updateMatrixWorldSVD(),e.hiddenMatrix.copy(i.matrixWorldRigid))}e.scale.copy(this.object.scale),e.position.fromArray(this.data.position),e.rotation.fromArray(this.data.rotation),e.updateMatrix(),this.page.add(e);let t=this.controlsManager.sharedGameControlGlobals;t.createdObjects.push(e),void 0===t.nCreatedPerAction[this.uniqueId]?t.nCreatedPerAction[this.uniqueId]=1:t.nCreatedPerAction[this.uniqueId]++,e.updateWorldMatrix(!0,!0),e.traverseObject(this.traverseObjectCB),O0(),this.controlsManager.requestRender()},this.traverseObjectCB=e=>{let t;if(e.hasNonUniformScale&&e.updateMatrixWorldSVD(),this.controlsManager.sharedGameControlGlobals.rapierWorld){if(e instanceof M9){if(!e.objectForSample)return!0===e.object.dataPatched.physics.fusedBody&&"dynamic"===e.object.dataPatched.physics.rigidBody||void 0;if(e.objectForSample.dataPatched.physics.fusedBody)return;t=e.object}else if(e instanceof xb)t=e.object;else if(t=e,t.dataPatched.cloner?.hideBase)return!0}else{if(e instanceof M9)return;t=e instanceof xb?e.object:e}"Time"===this.data.destroy?e.userData.lifetime=1e3*this.data.lifetime:"Quantity"===this.data.destroy&&(e.userData.quantity=this.data.destroyAfterQuantity,e.userData.actionId=this.uniqueId);let i=new iv().fromArray(this.data.velocity),r=t.dataPatched;
8404if(!("visibility"===r.physics.enabled?!r.visible:!r.physics.enabled)&&(this.controlsManager.sharedGameControlGlobals.rapierWorld?(this.controlsManager.addRigidBody(e,t,{fromCreate:!0,dynamic:this.data.dynamic}),"Collision"===this.data.destroy&&(e.rigidBody?.collider(0).setActiveEvents(1),e.userData.hasCollisionDestroy=!0),e.matrixWorld.decompose(O3,O2,O4),i.applyQuaternion(O2),this.data.velocity.some(e=>0!==e)&&this.data.dynamic&&e.rigidBody?.setLinvel(i.divideScalar(this.controlsManager.pixelsPerMeter),!0)):("geometry"in e.object&&this.controlsManager.addBoundsTree(e),this.data.velocity.some(e=>0!==e)&&this.data.dynamic&&(e.userData.velocity=i)),t.dataPatched.physics?.fusedBody===!0))return!0};let a=this.page.scene.find(this.data.object);if(!a||(this.object=a,"world"!==this.data.coordinateSystem&&!this.page.scene.find(this.data.coordinateSystem)))throw Error("Missing Property");O0(i)}dispose(){null!==this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=null),this.timeoutIdQueue.forEach(e=>window.clearTimeout(e)),this.dispatchThrottled.cancel(),this.page.remove(...this.controlsManager.sharedGameControlGlobals.createdObjects),this.controlsManager.sharedGameControlGlobals.createdObjects=[]}};new iv;var O6=new iv,O8=new iv,O9=new iv,O7=new iv,Re=new iv,Rt=new iv,Ri=new iX,Rr=new iX,Rs=new iX,Ra=(new iX,new ig),Rn=new ig,Ro=new i3(0,0,0,"YXZ"),Rl=new iv(1,0,0),Rh=new iv(0,1,0),Rc=new iv(0,0,1),Rd=new iv(1,1,1),Ru=(new iN,new lk),Rp=new ib,Rf={type:"requestRender"},Rm={type:"updateMatrix"},Rg=Math.PI/6,Rv=class extends tL{constructor(e,t,i,r,s,a,o,l,h){super(),this.object=e,this.domElement=t,this.data=i,this.gloabalPhysics=r,this.controlsManager=s,this.cameraFollow=a,this.camera=o,this.page=l,this.sharedAssets=h,this.enableDamping=!0,this.hiddenMatrix0=new iX,this.target0=new iv,this.zoom0=1,this.rotForce=1,this.moveForce=1,this.pixelsPerMeter=200,this.euler0=new i3(0,0,0,"YXZ"),this.position0Cam=new iv,this.quat0Cam=new ig,this.scale0Cam=new iv,this.hiddenMatrix0Cam=new iX,this.threshEndTranslate=.01,this.threshEndRotate=1e-8,this.threshEndRotVel=.005,this.collider={type:"capsule",radius:40,segment:new lk(new iv(0,-40,0),new iv(0,40,0)),matrix:new iX,position:new iv,rotation:new ig},this.euler=new i3(0,0,0,"YXZ"),this.eulerDelta=new iv,this.lastPosition=new iv,this.lastCameraQuaternion=new ig,this.lastCameraPosition=new iv,this.PI_2=Math.PI/2,this.prevMouse=new tQ,this.velocityTarget=new iv,this.velocity=new iv,this.directionXZ=new iv,this.rotVelocityStick=new iv,this.rotVelocityTarget=new iv,this.rotVelocity=new iv,this.rotDirection=new iv,this.nonColliderRotOffset=new iX,this.nonColliderPosOffset=new iX,this.firstPointerId=-1,this.rot=new iv,this.path=[],this.movementState={moveNegZ:0,movePosZ:0,moveNegX:0,movePosX:0,moveNegY:0,movePosY:0,rotPosX:0,rotNegX:0,rotPosY:0,rotNegY:0,jump:0,run:0},this.vrEulerYOffset=0,this.onObject=!1,this.actionState={},this.keyAssignments=[["moveNegZ","W"],["moveNegX","A"],["movePosZ","S"],["movePosX","D"],["rotPosX","ArrowUp"],["rotPosY","ArrowLeft"],["rotNegX","ArrowDown"],["rotNegY","ArrowRight"],["jump"," "]],this.collisionEnabled=!0,this.offsetMatrix=new iX,this.objectToTarget=new iv,this.objectToTarget0=new iv,this.objectToCamXZ=new iv,this.objectToCamXZ0=new iv,this.targetToCamera=new iv,this.targetToCamera0=new iv,this.cameraPolarAxis0=new iv,this.targetPos=new iv,this.targetQuat=new ig,this.lerpFactorPos=new iv().setScalar(.3),this.lerpFactorPosStart=.3,this.lerpFactorPosEnd=.3,this.lerpFactorRotStart=.3,this.lerpFactorRotEnd=.3,this.lerpFactorPosCamera=.3,this.lerpFactorRotCamera=.3,this.objXZQuat=new ig,this.objXZQuatInv=new ig,this.objXZRotMat=new iX,this.isFirstPerson=!1,this.didHit=!1,this.groundVelocity=new iv,this.pushedVelocity=new iv,this.groundYRotation=0,this.objectRealQuat=new ig,this.colliderWorldQuat=new ig,this.groundNormal=new iv,this.groundTilt=new ig,this.groundTiltInv=new ig,this.lastHitObj=null,this.isFirstFrame=!0,this.rotationAccumWhenOrientWithCamera=0,this.navMeshPathDest=null,this.position=new iv,this.quaternion=new ig,this.scale=new iv,this.initialAction=!0,this.onPointerDown=e=>{(e.target===this.domElement||e.target instanceof HTMLElement&&"SPLINE-VIEWER"===e.target.tagName&&e.target.shadowRoot?.contains(this.domElement))&&-1===this.firstPointerId&&(this.firstPointerId=e.pointerId,this.domElement.ownerDocument.addEventListener("pointermove",this.onPointerMove),this.domElement.ownerDocument.addEventListener("pointerup",this.onPointerUp),"keys"===this.rotBy||uQ||uK||this.domElement.requestPointerLock(),this.prevMouse.set(e.clientX,e.clientY))},this.onPointerUp=e=>{this.firstPointerId=-1,this.domElement.ownerDocument.removeEventListener("pointermove",this.onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this.onPointerUp),"mouse"===e.pointerType&&this.domElement.ownerDocument.exitPointerLock()},this.onPointerMove=e=>{if(e.pointerId!==this.firstPointerId)return;let t=e.clientX-this.prevMouse.x,i=e.clientY-this.prevMouse.y;this.prevMouse.set(e.clientX,e.clientY),"mouse"===e.pointerType&&"keys"!==this.rotBy&&(uK&&uZ<15.5&&!uQ?(this.eulerDelta.y=-t*this.mouseOrbitSensitivity,this.eulerDelta.x=-i*this.mouseOrbitSensitivity):(this.eulerDelta.y=-e.movementX*this.mouseOrbitSensitivity,this.eulerDelta.x=-e.movementY*this.mouseOrbitSensitivity)),"mouse"!==e.pointerType&&"drag"===this.rotByTouch&&(this.eulerDelta.y=-t*this.mouseOrbitSensitivity*5,this.eulerDelta.x=-i*this.mouseOrbitSensitivity*5),this.controlsManager.requestRender()},this.onPointerlockChange=e=>{this.domElement.ownerDocument.pointerLockElement===this.domElement?Rv.isLocked=!0:Rv.isLocked=!1},this.onPointerlockError=()=>{console.error("SPE.GameControls: Unable to use Pointer Lock API")},this.handleVisibilityChange=()=>{if(document?.hidden)for(let e in this.movementState)this.movementState[e]=0},this.onKeyDown=e=>{for(let t of(e.target instanceof HTMLInputElement||"ArrowLeft"!==e.code&&"ArrowUp"!==e.code&&"ArrowRight"!==e.code&&"ArrowDown"!==e.code&&"Space"!==e.code||e.preventDefault(),this.keyAssignments))if(e.key.toUpperCase()===t[1]||e.key===t[1]){this.movementState[t[0]]=1;break}this.controlsManager.requestRender()},this.onKeyUp=e=>{for(let t of this.keyAssignments)if(e.key.toUpperCase()===t[1]||e.key===t[1]||e.code.slice(3,e.code.length).toUpperCase()===t[1]){this.movementState[t[0]]=0;break}},this.copyVRGamePadValues=(e,t)=>{for(let i=2;i<4;i++){let r=e.axes[i];0===t?2===i?this.movementState.movePosX=r:this.movementState.movePosZ=r:(e.buttons[3].pressed?this.movementState.jump=1:this.movementState.jump=0,2===i?(.3>Math.abs(this.movementState.rotPosY)&&Math.abs(r)>=.3&&(this.vrEulerYOffset+=r<0?1:-1),this.movementState.rotPosY=r):"fly"===this.moveMode&&(this.movementState.moveNegY=r))}},this.sharedGameControlGlobals=s.sharedGameControlGlobals,e===o&&(this.isFirstPerson=!0),this.hiddenMatrix0.copy(this.object.hiddenMatrix),this.object.parent?this.object.hiddenMatrix.copy(this.object.parent.matrixWorld).invert():this.object.hiddenMatrix.identity(),this.object.matrix.copy(this.object.matrixWorld),this.object.matrix.decompose(this.position,this.quaternion,this.scale),this.euler0.setFromQuaternion(this.quaternion,"YXZ");let c=this.euler0.clone(),d=c.y;if(this.objectRealQuat.copy(this.quaternion),c.y=0,this.quaternion.setFromEuler(c),this.objXZQuat.copy(this.quaternion),this.objXZQuatInv.copy(this.objXZQuat).invert(),this.objXZ
8404RotMat.makeRotationFromQuaternion(this.quaternion),c.set(0,d,0),this.quaternion.setFromEuler(c),this.rot.setFromEuler(c),this.object.matrixAutoUpdate=!1,(this.isFirstPerson||!0===this.cameraFollow)&&(this.target0.copy(this.camera.getTarget()),this.zoom0=this.camera.zoom),!0===this.cameraFollow){let e,t;this.position0Cam.copy(this.camera.position),this.quat0Cam.copy(this.camera.quaternion),this.scale0Cam.copy(this.camera.scale),this.hiddenMatrix0Cam.copy(this.camera.hiddenMatrix),this.camera.parent?(this.camera.hiddenMatrix.copy(this.camera?.parent.matrixWorld),this.camera.matrix.copy(this.camera.matrixWorld)):this.camera.hiddenMatrix.identity(),this.camera.matrix.copy(this.camera.matrixWorld),this.camera.matrix.decompose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.matrixAutoUpdate=!1,this.offsetMatrix.copy(this.object.matrix).invert().multiply(this.camera.matrix);let i=new iv(0,0,-1).applyQuaternion(this.camera.quaternion),r=new iv().subVectors(this.position,this.camera.position);this.objectToCamXZ.copy(r),this.objectToCamXZ.y=0,this.objectToCamXZ0.copy(this.objectToCamXZ),1e-6>Math.abs(i.y)?(r.y=0,i.y=0,t=r.projectOnVector(i)):t=r.y/i.y>0?i.multiplyScalar(r.y/i.y):i.multiplyScalar(r.length()),this.targetToCamera0.copy(t).negate(),e=this.camera.position.clone().add(t),this.objectToTarget0.subVectors(e,this.position);let s=new i3().setFromQuaternion(this.camera.quaternion,"YXZ");this.cameraPolarOffset=-s.x,s.x=0,s.z=0,s.y-=Math.PI/2,this.cameraPolarAxis0.set(0,0,-1).applyEuler(s)}if(this.object instanceof Eg&&(this.object.matrixAutoUpdate=!1),this.euler.setFromQuaternion(this.quaternion,"YXZ"),this.rotByTouch=i.rotByTouch??"joystick",this.rotBy=i.rotBy??"keys",this.rotationMode=i.rotationMode??"normal",this.moveMode=i.moveMode??"walk",this.collisionEnabled=i.collisionEnabled,this.speedTranslate=(i.speedTranslate??250)*1,this.speedOrbit=(i.speedRotate??100)*.025,this.mouseOrbitSensitivity=(i.speedRotate??100)*16e-6,this.keyAssignments=i.keyAssignments.map(e=>{let t=[e[0],e[1]];return"▲"===t[1]?t[1]="ArrowUp":"◀"===t[1]?t[1]="ArrowLeft":"▼"===t[1]?t[1]="ArrowDown":"▶"===t[1]?t[1]="ArrowRight":"⇧"===t[1]?t[1]="Shift":"↵"===t[1]?t[1]="Enter":"Space"===t[1]?t[1]=" ":"⌘"===t[1]?t[1]="Meta":"Ctrl"===t[1]?t[1]="Control":"Esc"===t[1]&&(t[1]="Escape"),t}),"mouse"===i.rotBy){let e;-1!==(e=this.keyAssignments.findIndex(e=>"rotNegX"===e[0]))&&(this.keyAssignments[e][1]=""),-1!==(e=this.keyAssignments.findIndex(e=>"rotPosX"===e[0]))&&(this.keyAssignments[e][1]=""),-1!==(e=this.keyAssignments.findIndex(e=>"rotPosY"===e[0]))&&(this.keyAssignments[e][1]=""),-1!==(e=this.keyAssignments.findIndex(e=>"rotNegY"===e[0]))&&(this.keyAssignments[e][1]="")}this.lerpFactorPosStart=1-.02**(1/((i.delayPos[0]??.3)*60)),this.lerpFactorPosEnd=1-.02**(1/((i.delayPos[1]??.3)*60)),this.lerpFactorPos.setScalar(this.lerpFactorPosStart),this.lerpFactorRotStart=1-.02**(1/((i.delayRot[0]??.3)*60)),this.lerpFactorRotEnd=1-.02**(1/((i.delayRot[1]??.3)*60)),this.lerpFactorPosCamera=1-.02**(1/((i.delayPosCamera??.3)*60)),this.lerpFactorRotCamera=1-.02**(1/((i.delayRotCamera??.3)*60)),this.gravity=(this.gloabalPhysics.gravity??vZ.defaultData.gravity)*12,this.usePhysics=this.gloabalPhysics.usePhysics??vZ.defaultData.usePhysics,this.jumpPower=20*i.jumpPower,this.resetYPosition=this.position.y+Math.abs(i.resetYPosition)*(this.gravity>0?1:-1),this.alignToGround=i.alignToGround??!1,this.orientMode=i.autoOrientMove?i.orientMode:"none",this.orientWith=i.orientWith??y_.defaultDataThirdPerson.orientWith,this.slopeThresh=65*Math.PI/180,"capsule"===i.collider.type?(this.collider.radius=i.collider.radius,this.collider.segment.start.y=i.collider.height/2-i.collider.radius,this.collider.segment.end.y=-this.collider.segment.start.y,this.offset=.02*i.collider.height/this.pixelsPerMeter,this.stepThresh=.3*i.collider.height/this.pixelsPerMeter,this.colliderHeight=i.collider.height):"sphere"===i.collider.type?(this.collider.radius=i.collider.radius,this.collider.segment.start.y=0,this.collider.segment.end.y=0,this.offset=2*i.collider.radius*.02/this.pixelsPerMeter,this.stepThresh=2*i.collider.radiu
8404s*.3/this.pixelsPerMeter,this.colliderHeight=2*i.collider.radius):(this.offset=.02*i.collider.height/this.pixelsPerMeter,this.stepThresh=.3*i.collider.height/this.pixelsPerMeter,this.colliderHeight=i.collider.height),this.collider.type=i.collider.type;let u=new iv().fromArray(i.collider.position),p=new ig().setFromEuler(new i3().fromArray([...i.collider.rotation,"XYZ"]));this.collider.position.copy(u).multiply(this.scale),this.collider.rotation.copy(p),this.collider.matrix.compose(u,p,Rd),void 0!==i.cameraXAxis&&(this.cameraXAxis=i.cameraXAxis,this.cameraYAxis=i.cameraYAxis,this.minPolarAngle=i.cameraRotXLimits[0],this.maxPolarAngle=i.cameraRotXLimits[1],this.minAzimuthAngleRel=i.cameraRotYLimits[0],this.maxAzimuthAngleRel=i.cameraRotYLimits[1]),this.forwardDir=i.forwardDirection??"-z",this.isFirstPerson&&(this.forwardDir="-z"),this.runMultiplier=i.runMultiplier??2;let f=2*i.navmesh.destinationHelperRadius;if(f>0){let e=new px;e.push({fi:0,data:{...gM.defaultData("light","phong"),alpha:0},id:"layer1"}),e.push({fi:0,data:{...gM.defaultData("color"),color:i.navmesh.destinationHelperColor,alpha:i.navmesh.destinationHelperColor.a},id:"layer2"});let t=new AP({layers:e},{scene:this.page.scene,shared:this.sharedAssets});this.navMeshPathDest=new rK(xU.create({parameters:{width:f,height:f/10,hollow:.7}}),t),this.navMeshPathDest.material.userData.opacity0=i.navmesh.destinationHelperColor.a}this.activate()}reset(e=!1){if(this.object.hiddenMatrix.copy(this.hiddenMatrix0),e){this.object.updateMatrix(),this.object.updateMatrixWorld(),this.object.matrix.copy(this.object.matrixWorld),this.object.matrix.decompose(this.position,this.quaternion,this.scale),this.object.parent?this.object.hiddenMatrix.copy(this.object.parent.matrixWorld).invert():this.object.hiddenMatrix.identity();let e=new i3().setFromQuaternion(this.quaternion,"YXZ"),t=e.y;this.objectRealQuat.copy(this.quaternion),e.y=0,this.quaternion.setFromEuler(e),this.objXZQuat.copy(this.quaternion),this.objXZQuatInv.copy(this.objXZQuat).invert(),this.objXZRotMat.makeRotationFromQuaternion(this.quaternion),e.set(0,t,0),this.quaternion.setFromEuler(e),this.rot.setFromEuler(e),this.euler.setFromQuaternion(this.quaternion,"YXZ"),this.velocityTarget.set(0,0,0),this.velocity.set(0,0,0)}else this.object instanceof Eg?this.object.matrixAutoUpdate=!0:this.object.updateMatrix();!0===this.cameraFollow&&(this.camera.quaternion.copy(this.quat0Cam),this.camera.position.copy(this.position0Cam),this.camera.scale.copy(this.scale0Cam),this.camera.hiddenMatrix.copy(this.hiddenMatrix0Cam),this.camera.matrixAutoUpdate=!0),this.controlsManager.requestRender()}activate(){this.instantiateActions(),this.domElement.ownerDocument.addEventListener("pointerdown",this.onPointerDown),this.domElement.ownerDocument.addEventListener("keydown",this.onKeyDown),this.domElement.ownerDocument.addEventListener("keyup",this.onKeyUp),this.domElement.ownerDocument.addEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.addEventListener("pointerlockerror",this.onPointerlockError),this.domElement.ownerDocument.addEventListener("visibilitychange",this.handleVisibilityChange)}deactivate(){this.disposeActions(),this.domElement.ownerDocument.removeEventListener("pointerdown",this.onPointerDown),this.domElement.ownerDocument.removeEventListener("keydown",this.onKeyDown),this.domElement.ownerDocument.removeEventListener("keyup",this.onKeyUp),this.domElement.ownerDocument.removeEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.removeEventListener("pointerlockerror",this.onPointerlockError),this.domElement.ownerDocument.removeEventListener("visibilitychange",this.handleVisibilityChange)}dispose(){this.deactivate(),this.navMeshPathDest?.parent&&this.page.remove(this.navMeshPathDest)}instantiateActions(){let e=this.data,t=this.sharedAssets;void 0!==e.gameActions&&(this.actions={},yS.list.forEach(i=>{this.actions[i]=OX({...e,disabled:!1,type:"GameControl"},e.gameActions[i],this.page,t,this.controlsManager.eventManager,this.object)})),this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.dispatchStopEvent("jump"),this.dispatchStartEvent("idle"),this.initialAction&&(this.initialAction=!1)}disposeActions(){this.initialAction=!1,this.dispatchStopEvent("idle"),this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.dispatchStopEvent("jump"),OY(this.actions.idle),OY(this.actions.move),OY(this.actions.run),OY(this.actions.jump)}dispatchStartEvent(e){void 0!==this.actions[e]&&(this.actionState[e]||(this.actionState[e]=!0,this.actions[e].Transition.forEach(e
8404=>{e.play()}),this.actions[e].Animation.forEach(e=>{e.play(!1===this.initialAction)}),this.actions[e].Create.forEach(e=>{e.dispatchStart()}),this.actions[e].Audio.forEach(e=>{e.dispatchGameControl("start")}),this.actions[e].Particles.forEach(e=>{e.dispatchGameControl("start")})))}dispatchStopEvent(e){void 0===this.actions[e]||this.actionState[e]&&(this.actionState[e]=!1,this.actions[e].Transition.forEach(e=>{e.stop(),null!==e.object.currentState&&e.object.changeSelectedState(null,{scene:this.page.scene,shared:this.sharedAssets})}),this.actions[e].Create.forEach(e=>{e.dispatchStop()}),this.actions[e].Audio.forEach(e=>{e.dispatchGameControl("stop")}),this.actions[e].Particles.forEach(e=>{e.dispatchGameControl("stop")}))}get colliderWorldPosition(){return O7.copy(this.collider.position).applyQuaternion(this.objectRealQuat).add(this.position)}update(e,t,i){if(this.gravity<0?this.position.y<this.resetYPosition:this.position.y>this.resetYPosition)return this.reset(!0),!0;this.sharedGameControlGlobals.gamePads.forEach(this.copyVRGamePadValues);let r=(this.isFirstFrame?16.6:e)/1e3;this.isFirstFrame&&(this.isFirstFrame=!1);let s=60*r,a=!1;if(this.usePhysics&&this.collisionEnabled){let e=Re.set(0,(0===this.velocity.y?this.pixelsPerMeter*Math.max(Math.abs(this.gravity)/120,1)*(this.gravity>0?1:-1):this.velocity.y)*r,0).divideScalar(this.pixelsPerMeter),t=this.sharedGameControlGlobals.rapierWorld.castShape(this.colliderWorldPosition.divideScalar(this.pixelsPerMeter),this.colliderWorldQuat,e,this.object.rigidBody?.collider(0).shape,1,!1,16,void 0,void 0,this.object.rigidBody);if(t){this.onObject=!0,this.groundNormal.set(t.normal2.x,t.normal2.y,t.normal2.z).applyQuaternion(this.colliderWorldQuat).negate(),this.alignToGround&&this.groundTiltAdjustment(this.groundNormal),Math.acos(this.groundNormal.y)<this.slopeThresh&&(a=!0),t.collider.parent()?.bodyType()===0&&Math.acos(this.groundNormal.y)*(180/Math.PI)>45&&(this.onObject=!1);let e=t.collider.parent();for(let t of(this.groundYRotation=0,this.groundVelocity.set(0,0,0),this.sharedGameControlGlobals.entitiesWithTransformAnim))if(t.rigidBody===e&&t.userData.isFollowingObj!==this.object.uuid){(t.hasNonUniformScale?t.matrixWorldRigid:t.matrixWorld).decompose(O7,Rn,Re),this.groundVelocity.subVectors(O7,t.prevT),this.object.getWorldPosition(Re).add(this.collider.position).sub(O7),this.groundYRotation=Ro.setFromQuaternion(Rn).y-t.prevR.y,Rt.copy(Re).applyAxisAngle(Rh,this.groundYRotation),this.groundVelocity.add(Rt.sub(Re)).divideScalar(r);break}}else this.onObject=!1}if("walk"===this.moveMode&&this.collisionEnabled&&(1===this.movementState.jump&&this.onObject&&(this.velocityTarget.y=this.jumpPower,this.movementState.jump=0,this.dispatchStopEvent("idle"),this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.dispatchStopEvent("jump"),this.dispatchStartEvent("jump"),this.onObject=!1),this.onObject?this.velocityTarget.y/=2:this.velocityTarget.y+=this.gravity*s),"fly"===this.moveMode&&(this.velocityTarget.y=(this.movementState.movePosY-this.movementState.moveNegY)*this.speedTranslate),this.directionXZ.z=this.movementState.movePosZ-this.movementState.moveNegZ,this.directionXZ.x=this.movementState.movePosX-this.movementState.moveNegX,"+z"===this.forwardDir&&this.directionXZ.multiplyScalar(-1),this.directionXZ.manhattanLength()>0&&(this.path=[]),this.navMeshPathDest){let e=this.navMeshPathDest.material;if("walk"===this.moveMode&&this.path.length>1){this.navMeshPathDest.position.copy(this.path[this.path.length-1]),this.navMeshPathDest.parent||this.page.add(this.navMeshPathDest);let t=O7.subVectors(this.path[1],this.position),i=Re.subVectors(this.path[1],this.path[0]);0>t.dot(i)?this.path.shift():(this.directionXZ.x=i.x,this.directionXZ.z=i.z),e.opacity=e.userData.opacity0}else e.opacity-=.05*e.userData.opacity0,this.navMeshPathDest.material.opacity<=0&&this.navMeshPathDest.parent&&this.page.remove(this.navMeshPathDest)}this.directionXZ.normalize(),this.movementState.run?this.moveForce=this.runMultiplier:this.moveForce=1,this.velocityTarget.z=this.directionXZ.z*this.speedTranslate*this.moveForce,this.velocityTarget.x=this.directionXZ.x*this.speedTranslate*this.moveForce,("walk"===this.moveMode?this.velocityTarget.x+this.velocityTarget.z===0:0===this.velocityTarget.manhattanLength())?this.lerpFactorPos.setScalar(this.lerpFactorPosEnd):this.lerpFactorPos.setScalar(this.lerpFactorPosStart),"walk"===this.moveMode&&(this.lerpFactorPos.y=1),!1===this.didHit&&0===this.pushedVelocity.manhattanLength()||!1===this.usePhysics?(this.velocity.x+=(this.velocityTarget.x-this.velocity.x)*(1-(1-this.lerpFactorPos.x)**s),this.velocity.y+=(this.velocityTarget.y-this.velocity.y)*(1-(1-this.lerpFactorPos.y)**s),this.velocity.z+=(this.velocityTarget.z-this.velocity.z)*(1-(1-this.lerpFactorPos.z)**s)):this.velocity.copy(this.velocityTarget),("walk"===this.moveMode?this.velocity.x**2+this.velocity.z**2<this.speedTranslate:this.velocity.lengthSq()<this.speedTranslate)?(this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.onObject&&(this.dispatchStopEvent("jump"),this.dispatchStartEvent("idle"))):(this.dispatchStopEvent("idle"),this.onObject&&(this.dispatchStopEvent("jump"),this.movementState.run?(this.dispatchStopEvent("move"),this.dispatchStartEvent("run")):(this.dispatchStopEvent("run"),this.dispatchStartEvent("move"))));let o=O9.copy(this.velocity);if("none"!==this.orientMode&&!1===this.isFirstPerson){let e=Re.copy(o);e.y=0,o.set(0,o.y,e.length()*("+z"===this.forwardDir?1:-1))}if(this.directionXZ.manhattanLength()>0&&"none"!==this.orientMode&&!1===this.isFirstPerson){if("camera"===this.orientWith&&this.path.length<=1){this.camera.getWorldDirection(O7);let e=Rt.copy(Rh).multiplyScalar(O7.dot(Rh));O7.sub(e);let t=Re.copy(this.directionXZ);t.x*=-1,this.rot.y=O7.angleTo(t)*(O7.cross(t).y>0?-1:1)+this.rotationAccumWhenOrientWithCamera}else this.rot.y=(this.path.length>1?0:this.euler.y)+Math.atan2(-this.directionXZ.z,this.directionXZ.x)+Math.PI/2*("+z"===this.forwardDir?1:-1)}if(Ro.setFromVector3(this.rot),"walk"===this.moveMode&&(Ro.x=0),o.applyEuler(Ro),a&&(Rn.setFromUnitVectors(Rh,this.groundNormal),o.applyQuaternion(Rn)),i){let e=Ro.set(0,this.vrEulerYOffset*Rg,0);i.applyEuler(e),o.x+=i.x,o.z+=i.z,this.nonColliderPosOffset.elements[13]+=i.y*r}if(!0===this.usePhysics){for(let e of(this.pushedVelocity.set(0,0,0),this.sharedGameControlGlobals.entitiesWithTransformAnim)){let t=Rt.setFromMatrixPosition(e.matrixWorld).sub(e.prevT).divideScalar(r).divideScalar(this.pixelsPerMeter),i=e.rigidBody.collider(0).castCollider(t,this.object.rigidBody.collider(0),O7.copy(o).divideScalar(this.pixelsPerMeter),r,!1);t.multiplyScalar(this.pixelsPerMeter);let s=wQ.is(e)?e:e.object;if(null!==i&&this.lastHitObj!==s){let t;e instanceof xb&&(t=e);let i=this.sharedGameControlGlobals.entityToCollisionEvents[s.uuid];
8404if(i)for(let e of i)"character"===e.data.target&&(e.dispatch(t),s.dispatchEvent(By));this.lastHitObj=s}if(null!==i){this.pushedVelocity.copy(t),Re.copy(i.normal1).applyQuaternion(e.quaternion);break}}if(0!==this.pushedVelocity.manhattanLength()){let e=Re.dot(o);e<0&&o.addScaledVector(Re,-e),o.add(this.pushedVelocity)}else o.add(this.groundVelocity)}if(this.rotDirection.y=Number(this.movementState.rotPosY)-Number(this.movementState.rotNegY),this.rotDirection.x=Number(this.movementState.rotPosX)-Number(this.movementState.rotNegX),this.rotDirection.normalize(),"normal"===this.rotationMode&&(this.movementState.rotPosX||this.movementState.rotNegX)||"steer"===this.rotationMode&&(this.movementState.rotPosX||this.movementState.rotNegX)&&(this.movementState.movePosZ||this.movementState.moveNegZ||"walk"===this.moveMode)?this.rotVelocityStick.x=-this.rotDirection.x*this.speedOrbit*this.rotForce:this.rotVelocityStick.x=0,"normal"===this.rotationMode&&(this.movementState.rotPosY||this.movementState.rotNegY)||"steer"===this.rotationMode&&(this.movementState.rotPosY||this.movementState.rotNegY)&&(this.movementState.movePosZ||this.movementState.moveNegZ)?this.rotVelocityStick.y=-this.rotDirection.y*this.speedOrbit*this.rotForce:this.rotVelocityStick.y=0,this.rotVelocityTarget.subVectors(this.eulerDelta.divideScalar(r),this.rotVelocityStick),0===this.rotVelocityTarget.manhattanLength()?this.rotVelocity.lerp(this.rotVelocityTarget,1-(1-this.lerpFactorRotEnd)**s):this.rotVelocity.lerp(this.rotVelocityTarget,1-(1-this.lerpFactorRotStart)**s),this.euler.x+=this.rotVelocity.x*r,this.euler.y+=this.rotVelocity.y*r+this.groundYRotation,0===this.rotVelocityTarget.y&&0===this.directionXZ.manhattanLength()?this.rotationAccumWhenOrientWithCamera=0:(!1===this.cameraFollow||"Locked"===this.cameraYAxis)&&(this.rotationAccumWhenOrientWithCamera+=this.rotVelocity.y*r),!1===this.isFirstPerson&&"none"!==this.orientMode&&this.directionXZ.manhattanLength()>0){if("radial"===this.orientMode){this.objectToCamXZ.copy(this.objectToCamXZ0).applyAxisAngle(Rh,this.euler.y-this.euler0.y);let e=Re.copy(this.objectToCamXZ).normalize(),t=Rt.copy(o).multiplyScalar(r);t.y=0;let i=t.sub(O7.copy(e).multiplyScalar(t.dot(e))).cross(e).y;this.euler.y-=Math.atan2(i,this.objectToCamXZ.length())}}else this.rot.y+=this.rotVelocity.y*r+this.groundYRotation,0!==this.rotVelocityTarget.y&&(!1===this.cameraFollow||"Locked"===this.cameraYAxis)&&(this.euler.y=this.rot.y);if(!0===this.cameraFollow&&("walk"===this.moveMode?"Limit"===this.cameraXAxis?this.euler.x=tY.clamp(this.euler.x,-this.maxPolarAngle+this.cameraPolarOffset+1e-6,-this.minPolarAngle+this.cameraPolarOffset-1e-6):this.euler.x=tY.clamp(this.euler.x,-this.PI_2+this.cameraPolarOffset,this.PI_2+this.cameraPolarOffset):"Limit"===this.cameraXAxis&&(this.euler.x=tY.clamp(this.euler.x,-this.PI_2,this.PI_2))),"fly"===this.moveMode?this.rot.x=this.euler.x:this.isFirstPerson&&(t?Ro.copy(t):Ro.copy(this.euler),Ro.y=0,this.nonColliderRotOffset.makeRotationFromEuler(Ro)),t&&("walk"===this.moveMode?(this.rot.y=t.y,this.rot.x=0,this.rot.z=0):this.rot.setFromEuler(t),this.rot.y+=this.vrEulerYOffset*Rg),Ra.setFromAxisAngle(Rl,this.rot.x),Rn.setFromAxisAngle(Rh,this.rot.y),Rn.multiply(Ra),Ra.setFromAxisAngle(Rc,this.rot.z),Rn.multiply(Ra),this.quaternion.copy(Rn),this.objectRealQuat.multiplyQuaternions(this.quaternion,this.objXZQuat),this.colliderWorldQuat.copy(this.objectRealQuat).multiply(this.collider.rotation),this.collisionEnabled){if(this.usePhysics){let e=Re.copy(o).multiplyScalar(r/this.pixelsPerMeter),t=null;this.didHit=!1;let i=new iv;for(let r=0;r<5;r++){let s=e.length(),a=Rt.copy(e).normalize();if(null!==(t=this.sharedGameControlGlobals.rapierWorld.castShape(this.colliderWorldPosition.divideScalar(this.pixelsPerMeter).add(i),this.colliderWorldQuat,a,this.object.rigidBody?.collider(0).shape,s,!1,24,void 0,void 0,this.object.rigidBody))){this.didHit=!0;let o=this.sharedGameControlGlobals.colliderToEntity.get(t.collider.handle);if(o!==this.lastHitObj&&0===r){this.lastHitObj=o;let e=this.sharedGameControlGlobals.entityToCollisionEvents[o?.uuid];if(e){for(let i of e)if("character"===i.data.target){let e=(this.sharedGameControlGlobals.rapierWorld?.getCollider(t.collider.handle))._parent,r;if(o.cloner){for(let t of o.cloner.children)if(t.rigidBody===e){r=t;break}}i.dispatch(r),o.dispatchEvent(By)}}}let l=O6.set(t.normal2.x,t.normal2.y,t.normal2.z).applyQuaternion(this.colliderWorldQuat),h=O8.copy(a).multiplyScalar(t.toi).dot(l),c=t.toi;if(0===c&&(this.position.y+=this.offset*this.pixelsPerMeter),h>this.offset&&(c=t.toi*(h-this.offset)/h,i.addScaledVector(a,c)),e.copy(a).multiplyScalar(s-c),Math.acos(-l.y)>this.slopeThresh){let r=this.colliderWorldPosition.divideScalar(this.pixelsPerMeter).add(i),s=Rt.copy(t.witness2).applyQuaternion(this.colliderWorldQuat);s.y=0;let a=r.add(s);a.y+=this.stepThresh;let o=this.sharedGameControlGlobals.rapierWorld.castShape(a,this.colliderWorldQuat,e,this.object.rigidBody?.collider(0).shape,1,!1,24,void 0,void 0,this.object.rigidBody);null!==o&&0===o.toi&&(l.y=0,l.normalize())}e.addScaledVector(l,-e.dot(l))}else{0===r&&0!==this.directionXZ.manhattanLength()&&(this.lastHitObj=null),i.add(e);break}}this.position.addScaledVector(i,this.pixelsPerMeter),this.object.rigidBody?.setTranslation(O7.copy(this.position).divideScalar(this.pixelsPerMeter),!0),this.object.rigidBody?.setRotation(Ra.copy(this.quaternion).premultiply(this.groundTilt).multiply(this.objXZQuat),!0)}else{let e=this.onObject?1:5,t=o.multiplyScalar(r/e);for(let i=0;i<e;i++)this.position.add(t),this.collisionAdjustment(r/e)}}else this.position.addScaledVector(o,r);if("walk"===this.moveMode&&this.onObject&&(this.velocityTarget.y=0,this.velocity.y=0),this.quaternion.premultiply(this.groundTilt).multiply(this.objXZQuat),this.object.matrix.compose(this.position,this.quaternion,this.scale),this.object.matrixWorldNeedsUpdate=!0,this.object.matrix.multiply(this.nonColliderPosOffset).multiply(this.nonColliderRotOffset),this.quaternion.premultiply(this.groundTiltInv).multiply(this.objXZQuatInv),!0===this.cameraFollow){this.updateFollowArms();let e=this.objectToTarget.add(this.position),t=this.targetToCamera.add(e);Ri.lookAt(t,e,Rh).setPosition(t),Ri.decompose(this.targetPos,this.targetQuat,O7),this.camera.quaternion.slerp(this.targetQuat,1-(1-this.lerpFactorRotCamera)**s),this.camera.position.lerp(this.targetPos,1-(1-this.lerpFactorPosCamera)**s),this.camera.updateMatrix(),this.camera.updateMatrixWorld(),"Limit"===this.cameraYAxis&&"cartesian"===this.orientMode&&(this.euler.y=tY.clamp(this.euler.y,this.minAzimuthAngleRel,this.maxAzimuthAngleRel)),this.euler.x=tY.clamp(this.euler.x,-this.PI_2+(this.cameraPolarOffset<0?this.cameraPolarOffset:0),this.PI_2+(this.cameraPolarOffset>0?this.cameraPolarOffset:0))}return this.eulerDelta.set(0,0,0),this.object.dispatchEvent(Rm),!(this.path.length<2&&this.lastPosition.distanceToSquared(this.position)<this.threshEndTranslate&&Math.abs(this.rotVelocity.x)<this.threshEndRotVel&&Math.abs(this.rotVelocity.y)<this.threshEndRotVel&&(void 0===this.camera||this.isFirstPerson||this.lastCameraPosition.distanceToSquared(this.camera.position)<this.threshEndTranslate&&8*(1-this.lastCameraQuaternion.dot(this.camera.quaternion))<this.threshEndRotate)&&("fly"===this.moveMode||!0===this.onObject||!1===this.collisionEnabled)&&(null===this.navMeshPathDest||this.navMeshPathDest.material.opacity<-.04*this.navMeshPathDest?.material?.userData.opacity0))&&(this.camera&&(this.lastCameraPosition.copy(this.camera.position),this.lastCameraQuaternion.copy(this.camera.quaternion)),this.lastPosition.copy(this.position),this.object.dispatchEvent(Rf),!0)}updateFollowArms(){let e;this.objectToTarget.copy(this.objectToTarget0),this.targetToCamera.copy(this.targetToCamera0);let t=Ra.setFromAxisAngle(Rh,"Limit"===this.cameraYAxis&&"radial"!==this.orientMode?tY.clamp(this.euler.y-this.euler0.y,this.minAzimuthAngleRel,this.maxAzimuthAngleRel):this.euler.y-this.euler0.y);("Locked"!==this.cameraYAxis||"radial"===this.orientMode)&&this.objectToTarget.applyQuaternion(t),e="Limit"===this.cameraXAxis?tY.clamp(this.euler.x,-this.maxPolarAngle+this.cameraPolarOffset+1e-6,-this.minPolarAngle+this.cameraPolarOffset-1e-6):tY.clamp(this.euler.x,-this.PI_2+this.cameraPolarOffset+1e-6,this.PI_2+this.cameraPolarOffset-1e-6);let i=O7.copy(this.cameraPolarAxis0);("Locked"!==this.cameraYAxis||"radial"===this.orientMode)&&i.applyQuaternion(t);let r=Rn.setFromAxisAngle(i,e);"Locked"!==this.cameraYAxis&&this.targetToCamera.applyQuaternion(t),"Locked"!==this.cameraXAxis&&this.targetToCamera.applyQuaternion(r)}groundTiltAdjustment(e){180*Rh.angleTo(e)/Math.PI<15||180*Rh.angleTo(e)/Math.PI>85?Ra.identity():Ra.setFromUnitVectors(Rh,e),this.groundTilt.slerp(Ra,.06),this.groundTiltInv.copy(this.groundTilt).invert()}collisionAdjustment(e){let t=O8.set(0,0,0);this.object.matrix.compose(this.position,this.quaternion,this.scale);
8404let i=Ri.multiplyMatrices(this.object.matrix,this.objXZRotMat).multiply(this.collider.matrix).decompose(O7,Ra,Re).compose(O7,Ra,Rd);this.sharedGameControlGlobals.entitiesWithTransformAnim.forEach(e=>{if(e===this.object||e.isDescendantOf(this.object))return;Rp.makeEmpty(),e.updateMatrixWorldSVD();let r=e.matrixWorldRigid,s=Rr.copy(r).invert(),a=Rs.copy(Rr).multiply(i);Ru.copy(this.collider.segment),Ru.start.applyMatrix4(a),Ru.end.applyMatrix4(a);let o=O6.copy(this.position).applyMatrix4(s);Rp.expandByPoint(Ru.start),Rp.expandByPoint(Ru.end),Rp.min.addScalar(-this.collider.radius),Rp.max.addScalar(this.collider.radius),e.bvhGeometry.boundsTree.shapecast({traverseBoundsOrder:e=>e.distanceToPoint(Ru.end),intersectsBounds:e=>e.intersectsBox(Rp),intersectsTriangle:e=>{let i=e.closestPointToSegment(Ru,O7,Re);if(i<this.collider.radius){let e=this.collider.radius-i,s=Re.sub(O7).normalize(),a=Rt.copy(o);a.addScaledVector(s,e);let l=a.applyMatrix4(r).sub(this.position);t.add(l),Ru.start.addScaledVector(s,e),Ru.end.addScaledVector(s,e)}}})}),Rp.makeEmpty(),Ru.copy(this.collider.segment),Ru.start.applyMatrix4(i),Ru.end.applyMatrix4(i),Rp.expandByPoint(Ru.start),Rp.expandByPoint(Ru.end),Rp.min.addScalar(-this.collider.radius),Rp.max.addScalar(this.collider.radius),this.sharedGameControlGlobals.staticMeshBVH?.shapecast({traverseBoundsOrder:e=>e.distanceToPoint(Ru.end),intersectsBounds:e=>e.intersectsBox(Rp),intersectsTriangle:e=>{let i=e.closestPointToSegment(Ru,O7,Re);if(i<this.collider.radius){let e=this.collider.radius-i,r=Re.sub(O7).normalize();this.alignToGround&&this.groundTiltAdjustment(r),t.addScaledVector(r,e),Ru.start.addScaledVector(r,e),Ru.end.addScaledVector(r,e)}}}),this.onObject=Math.abs(t.y)>Math.abs(e*this.velocity.y*.25),this.onObject&&this.dispatchStopEvent("jump");let r=Math.max(0,t.length()-1e-5);t.normalize().multiplyScalar(r),this.position.add(t)}};Rv.isLocked=!1;var Ry=tw(tA());function Rx(e){let t=e.elements,i=t[0]**2+t[1]**2+t[2]**2,r=t[4]**2+t[5]**2+t[6]**2,s=t[8]**2+t[9]**2+t[10]**2,a=t[0]**2+t[4]**2+t[8]**2,o=t[1]**2+t[5]**2+t[9]**2,l=t[2]**2+t[6]**2+t[10]**2;return i<1e-8||r<1e-8||s<1e-8||a<1e-8||o<1e-8||l<1e-8}function Rb(e,t){let i=new rz;if(t&&Rx(t)||!e.getAttribute("position"))return i.setAttribute("position",new rT([],3)),i.setIndex([]),i;let{positions:r,triIndices:s}=Sn(e.getAttribute("position"),e.getIndex());return i.setAttribute("position",new rT(r,3)),i.setIndex(s),t&&i.applyMatrix4(t),i}var Rw=new iX,RS=new iX,R_=[[0,0,0],[0,0,0],[0,0,0]];function RA(e){let t=e.elements;R_[0][0]=t[0],R_[0][1]=t[4],R_[0][2]=t[8],R_[1][0]=t[1],R_[1][1]=t[5],R_[1][2]=t[9],R_[2][0]=t[2],R_[2][1]=t[6],R_[2][2]=t[10];let{u:i,v:r}=(0,Ry.SVD)(R_),s=Rw.set(i[0][0],i[0][1],i[0][2],0,i[1][0],i[1][1],i[1][2],0,i[2][0],i[2][1],i[2][2],0,0,0,0,1),a=RS.set(r[0][0],r[0][1],r[0][2],0,r[1][0],r[1][1],r[1][2],0,r[2][0],r[2][1],r[2][2],0,0,0,0,1);return s.multiply(a.transpose())}var RM=class extends lI{constructor(){super(),this.layers.enable(3),this.layers.enable(8),this.layers.enable(9)}setFromCamera(e,t){t.isOrthographicCamera?(this.ray.origin.set(e.x,e.y,-1).unproject(t),this.ray.direction.set(0,0,-1).transformDirection(t.matrixWorld),this.camera=t):t.isPerspectiveCamera?(this.ray.origin.set(e.x,e.y,-1).unproject(t),this.ray.direction.set(e.x,e.y,.5).unproject(t).sub(this.ray.origin).normalize(),this.camera=t):console.error("Raycaster: Unsupported camera type.")}intersectVisibleObjects(e,t=!0,i=[]){return e.forEach(e=>{e.visible&&this.intersectObject(e,t,i)}),i}createRaycastLineHelper(){let e=new nz({color:65280,linewidth:10}),t=new iv(this.ray.origin.x,this.ray.origin.y,this.ray.origin.z),i=new iv(this.ray.direction.x,this.ray.direction.y,this.ray.direction.z),r=this.camera.far-this.camera.near,s=new iv().addVectors(t,i.multiplyScalar(r)),a=new rz;return a.setFromPoints([t,s]),new nj(a,e)}},RE=e=>e instanceof EO||e instanceof PB;function RC(e,t){return e.distance-t.distance}function RT(e,t,i,r=!1){if(!r&&!i.some(t=>void 0!==RI(e,t)))return[];let s=[];return t.children.forEach(t=>(function e(t,i,r){if(!(!xL(i)||!i.visible))for(let s of(ES(i)&&i.raycast(t,r),i.children))e(t,s,r)})(e,t,s)),s.sort(RC),s}function RP(e){let t=[];if(e.length){let i=e[0].object;xL(i)&&t.push(i);let r=i.parent;for(;r;)RE(r)&&t.push(r),r=r.parent}return t}function RD(e,t,i,r){let s=e.frame;if(s){let e=t[0]*s.width,a=(1-t[1])*s.height;for(let t of i){let i=t===s.uuid?s:s.find(t);if(i?.intersects(e,a))return r(i),!0}}return!1}function RI(e,t){if(ES(t)){if(t.visible){let i=[];return t.raycast(e,i),i.length?i[0]:void 0}}else if(RE(t))return function e(t,i){if(!(!xL(i)||!i.visible)){if(ES(i)){let e=[];
8404if(i.raycast(t,e),e.length)return e[0]}for(let r of i.children){let i=e(t,r);if(i)return i}}}(e,t)}var RO=class{constructor(e,t,i,r,s,a,o,l){this.renderer=e,this.publish=t,this.scene=i,this.getCamera=r,this.sharedAssets=s,this.requestRender=a,this.isExport=o,this.frame=l,this.raycaster=new RM,this._useWindowEvents=!1,this.pointerWorld={x:0,y:0},this.pointerScreen={x:0,y:0},this._useWindowEvents="window"===t.mouseEventTarget,this.domElement=e.domElement,this.eventElement=this._useWindowEvents?window:e.domElement,this._domRect=this.domElement.getBoundingClientRect()}get stopRaycast(){return this.publish.stopRaycast}get page(){return this.scene.activePage}set useWindowEvents(e){this._useWindowEvents=e,this.eventElement=e?window:this.renderer.domElement}get useWindowEvents(){return this._useWindowEvents}set domRect(e){this._domRect=e}get domRect(){return this._domRect}updateRaycaster(e){var t,i;let{pageX:r,pageY:s}=e.touches?.length>0?e.touches[0]:e;this.pointerWorld={x:(r-((t=this._domRect).left+window.scrollX))/t.width*2-1,y:-((s-(t.top+window.scrollY))/t.height*2)+1},this.pointerScreen={x:(r-((i=this._domRect).left+window.scrollX))/i.width,y:1-(s-(i.top+window.scrollY))/i.height},this.raycaster.setFromCamera(this.pointerWorld,this.getCamera())}},RR=class{constructor(e){this.eventContext=e,this.domEventsNeeded=new Set,this.hasVideoAction=!1}connect(){}disconnect(){}},RL=[["start","Start"],["keyDown","KeyDown"],["keyUp","KeyUp"],["mouseDown","MouseDown"],["mouseUp","MouseUp"],["mouseHover","MouseHover"],["collision","Collision"],["lookAt","LookAt"],["follow","Follow"],["scroll","Scroll"]],RB=e=>RL.find(([t,i])=>i===e)?.[0],Rz=e=>RL.find(([t])=>t===e)?.[1],RF=(e,t)=>{let i=RB(e);if(i){let e=new CustomEvent(i,{bubbles:!0});return Object.defineProperty(e,"target",{writable:!1,value:t}),e}},RN=class extends RR{constructor(){super(...arguments),this.objectsPerEvents=new Map,this.splineEvents={},this.onBeginEvent=e=>{if(!e.eventName||!e.target||"Scroll"===e.eventName)return;let t=this.splineEvents[RB(e.eventName)]?.[e.target.uuid];if(!t)return;"Scroll"===e.eventName&&void 0!==e.deltaY&&Object.assign(t,{deltaY:e.deltaY});let{domElement:i}=this.eventContext;i.dispatchEvent(t)}}connect(){let{page:e}=this.eventContext;e.traverseEntity(e=>{if(e.data?.events.length){for(let[t,i]of RL)if(e.data.events.some(e=>e.data.type===i&&!e.data.disabled)){this.objectsPerEvents.has(t)?this.objectsPerEvents.get(t)?.push(e):this.objectsPerEvents.set(t,[e]);let r=RF(i,{id:e.uuid,name:e.name}),s=this.splineEvents[t];s?s[e.uuid]=r:this.splineEvents[t]={[e.uuid]:r}}}}),this.objectsPerEvents.forEach(e=>{e.forEach(e=>{e.addEventListener("beginEvent",this.onBeginEvent)})})}disconnect(){this.objectsPerEvents.forEach(e=>{e.forEach(e=>{e.removeEventListener("beginEvent",this.onBeginEvent)})})}},Rk=class{constructor(e,t,i,r,s,a){if(this.id=e,this.data=t,this.object=i,this.entered=!1,("KeyDown"===t.type||"KeyUp"===t.type||"KeyPress"===t.type)&&!t.key)throw Error("Missing property");this.actions=OX(t,t.actions,r,s,a,i)}disconnect(){OY(this.actions)}dispatchHeld(e){this.actions.Create.forEach(t=>{e&&t.dispatchThrottled.cancel(),t.dispatchThrottled()})}dispatch(e=!1){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),"MousePress"===this.data.type||"KeyPress"===this.data.type?this.entered||(this.entered=!0,this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.playFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent()),this.actions.Create.forEach(e=>e.dispatchStart())):(this.actions.Transition.some(e=>e.playing&&"Toggle"!==e.data.runMode)||this.actions.Transition.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.SwitchCamera.some(e=>e.playing&&"Toggle"!==e.data.runMode)||this.actions.SwitchCamera.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.Animation.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()})),this.actions.Link.forEach(e=>{e.dispatch()}
vendor: 1,706 bytes, line 8404
8404),this.actions.SceneTransition.forEach(e=>{e.dispatch()}),!1===e&&this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Audio.forEach(e=>{e.dispatchBasic()}),this.actions.Video.forEach(e=>{e.dispatchBasic()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()}),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}dispatchRelease(){this.entered&&(this.entered=!1,this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Particles.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent()),this.actions.Create.forEach(e=>e.dispatchStop()))}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.playFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent())),this.actions.Link.forEach(e=>{e.dispatch()}),this.actions.SceneTransition.forEach(e=>{e.dispatch()}),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>{e.dispatch()}
8404),this.actions.Audio.forEach(e=>{e.dispatchBasic()}),this.actions.Video.forEach(e=>{e.dispatchBasic()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()}),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}},RU=class extends RR{constructor(e,t,i){super(e),this.eventManager=t,this.useForRaycastProperty=i,this.objectsPerTypes={MouseDown:[],MouseUp:[],MousePress:[],KeyDown:[],KeyUp:[],KeyPress:[]},this.canvasMouseEvents=[],this.eventsPerObjects={MouseDown:{},MouseUp:{},MousePress:{},KeyDown:{},KeyUp:{},KeyPress:{}},this.heldKeys={},this.heldKeysPress={},this._prevObjects=[],this.sceneInterects=null,this.onCanvasRaycast=e=>{if(!0===this.useForRaycastProperty&&null===this.sceneInterects){this.eventContext.updateRaycaster(e);let{raycaster:t,page:i}=this.eventContext,r=RT(t,i,[],!0);this.sceneInterects=r,r.length&&(this.eventContext.sharedAssets.raycastProperty={x:r[0].point.x,y:r[0].point.y,z:r[0].point.z,objX:r[0].object.matrixWorld.elements[12],objY:r[0].object.matrixWorld.elements[13],objZ:r[0].object.matrixWorld.elements[14]})}},this.onCanvasMouseDown=e=>{(e.target===this.eventContext.domElement||"SPLINE-VIEWER"===e.target.tagName)&&this.canvasMouseEvents.forEach(t=>{("MouseDown"===t.data.type||"MousePress"===t.data.type)&&(this.onCanvasRaycast(e),t.dispatch())})},this.onCanvasMouseUp=e=>{(e.target===this.eventContext.domElement||"SPLINE-VIEWER"===e.target.tagName)&&this.canvasMouseEvents.forEach(t=>{"MouseUp"===t.data.type?(this.onCanvasRaycast(e),t.dispatch()):"MousePress"===t.data.type&&t.dispatchRelease()})},this.onMouseDown=e=>{u1.length>1||(this.eventContext.updateRaycaster(e),this.handleMouseEvent("MouseDown"))},this.onMouseUp=e=>{u1.length>1||(this.eventContext.updateRaycaster(e),this.handleMouseEvent("MouseUp"))},this.onMousePressDown=e=>{u1.length>1||(this.eventContext.updateRaycaster(e),this.handleMousePressEvent())},this.onMousePressRelease=e=>{u1.length>1||(this.eventContext.updateRaycaster(e),this.handleMousePressEvent(!0))},this.onKeyDown=e=>{this.heldKeys[e.key]||(this.handleKeyEvent(e,"KeyDown"),this.handleKeyEventHeld(e,"KeyDown",!0)),this.heldKeys[e.key]=!0},this.onKeyUp=e=>{this.handleKeyEvent(e,"KeyUp"),this.handleKeyEventHeld(e,"KeyUp",!0)},this.onKeyPressDown=e=>{this.heldKeysPress[e.key]?this.handleKeyEventHeld(e,"KeyPress"):(this.handleKeyEvent(e,"KeyPress"),this.handleKeyEventHeld(e,"KeyPress",!0)),this.heldKeysPress[e.key]=!0},this.onKeyPressUp=e=>{this.handleKeyEvent(e,"KeyPress",!0)},this.releaseHeldKey=e=>{delete this.heldKeys[e.key]},this.releaseHeldKeyPress=e=>{delete this.heldKeysPress[e.key]},this._onUserEvent=({eventName:e,target:t,reverse:i})=>{if(!e||!t)return;let r=Rz(e);r&&("MouseDown"===r||"MouseUp"===r||"MousePress"===r?(t.dispatchEvent({type:"beginEvent",eventName:r}),this.eventsPerObjects[r]?.[t.uuid]?.forEach(e=>{e.dispatchUserEvent(i)})):("KeyDown"===r||"KeyUp"===r||"KeyPress"===r)&&(t.dispatchEvent({type:"beginEvent",eventName:r}),this.eventsPerObjects[r]?.[t.uuid]?.forEach(e=>{e.dispatchUserEvent()})))}}connect(){let{page:e,sharedAssets:t,domElement:i}=this.eventContext,r=(i,r)=>{if(i.data?.events.length)for(let s of["MouseDown","MouseUp","MousePress","KeyDown","KeyUp","KeyPress"]){let a=this.eventsPerObjects[s];if(i.data.events.filter(({data:e})=>e.type===s&&!0!==e.disabled).forEach(({id:r,data:s})=>{try{let o=new Rk(r,s,i,e,t,this.eventManager);o.actions.Video.length&&(this.hasVideoAction=!0),("MouseDown"===s.type||"MouseUp"===s.type||"MousePress"===s.type)&&("Canvas"===s.mode||"Window"===s.mode)?this.canvasMouseEvents.push(o):(a[i.uuid]?a[i.uuid].some(e=>e.id===o.id)||a[i.uuid].push(o):a[i.uuid]=[o],i instanceof Do&&i.traverseChildren(e=>{if(!e.visible)return!0;e instanceof Mb&&e.data.geometry.shapeBlendNode?.operation!==2&&(a[e.uuid]?a[e.uuid].push(o):a[e.uuid]=[o])}))}catch(e){}}),a[i.uuid]?.length&&(this.objectsPerTypes[s].push(i instanceof TY&&("MouseDown"===s||"MouseUp"===s||"MousePress"===s)?r:i),i instanceof Do)){let e=this.objectsPerTypes[s];i.traverseChildren(t=>{if(!t.visible)return!0;t instanceof Mb&&-1===e.indexOf(t)&&e.push(t)})}}};e.traverseEntity(e=>{(e instanceof Pk||e instanceof PD)&&e.frame?.traverse(t=>{r(t,e)}),r(e)}),this.heldKeys={},this.heldKeysPress={},this.domEventsNeeded.clear(),i.addEventListener("pointerdown",this.onCanvasMouseDown),i.addEventListener("pointerup",this.onCanvasMouseUp),(this.objectsPerTypes.MouseDown?.length||this.useForRaycastProperty)&&(this.domEventsNeeded.add("pointerdown"),i.addEventListener("pointerdown",this.onMouseDown)),this.objectsPerTypes.MouseUp?.length&&(this.domEventsNeeded.add("pointerup"),i.addEventListener("pointerup",this.onMouseUp)),this.objectsPerTypes.MousePress?.length&&(this.domEventsNeeded.add("pointerdown"),i.addEventListener("pointerdown",this.onMousePressDown),this.domEventsNeeded.add("pointerup"),i.addEventListener("pointerup",this.onMousePressRelease)),this.objectsPerTypes.KeyDown?.length&&(this.domEventsNeeded.add("keydown"),document.addEventListener("keydown",this.onKeyDown),document.addEventListener("keyup",this.releaseHeldKey)),this.objectsPerTypes.KeyUp?.length&&(this.domEventsNeeded.add("keyup"),document.addEventListener("keyup",this.onKeyUp)),this.objectsPerTypes.KeyPress?.length&&(this.domEventsNeeded.add("keydown"),document.addEventListener("keydown",this.onKeyPressDown),document.addEventListener("keyup",this.releaseHeldKeyPress),this.domEventsNeeded.add("keyup"),document.addEventListener("keyup",this.onKeyPressUp)),Object.entries(this.objectsPerTypes).forEac
8404h(([e,t])=>{t.forEach(e=>{e.addEventListener("userEvent",this._onUserEvent)})})}disconnect(){let{domElement:e}=this.eventContext;this.domEventsNeeded.clear(),this.heldKeys={},this.heldKeysPress={},e.removeEventListener("pointerdown",this.onCanvasMouseDown),e.removeEventListener("pointerup",this.onCanvasMouseUp),e.removeEventListener("pointerdown",this.onMouseDown),e.removeEventListener("pointerdown",this.onMousePressDown),e.removeEventListener("pointerup",this.onMouseUp),e.removeEventListener("pointerup",this.onMousePressRelease),document.removeEventListener("keydown",this.onKeyDown),document.removeEventListener("keyup",this.onKeyUp),document.removeEventListener("keydown",this.onKeyPressDown),document.removeEventListener("keyup",this.onKeyPressUp),document.removeEventListener("keyup",this.releaseHeldKey),Object.values(this.eventsPerObjects).forEach(e=>{Object.values(e).forEach(e=>{e.forEach(e=>{e.disconnect()})})}),this.canvasMouseEvents.forEach(e=>{e.disconnect()}),Object.entries(this.objectsPerTypes).forEach(([e,t])=>{t.forEach(e=>{e.removeEventListener("userEvent",this._onUserEvent)})})}handleMouseEvent(e){let{stopRaycast:t,raycaster:i,page:r,pointerScreen:s}=this.eventContext,a=this.objectsPerTypes[e],o=a.filter(e=>!(e instanceof TY));if(!(!a.length&&!this.useForRaycastProperty)&&!(r.uiCanvas&&RD(r,[s.x,s.y],Object.keys(this.eventsPerObjects[e]),t=>{this.handleObjectMouseEventDispatch(t,e)}))){if(t||this.useForRaycastProperty){let s;if(null===this.sceneInterects?s=RT(i,r,o,this.useForRaycastProperty):(s=this.sceneInterects,this.sceneInterects=null),this.useForRaycastProperty&&s.length&&(this.eventContext.sharedAssets.raycastProperty={x:s[0].point.x,y:s[0].point.y,z:s[0].point.z,objX:s[0].object.matrixWorld.elements[12],objY:s[0].object.matrixWorld.elements[13],objZ:s[0].object.matrixWorld.elements[14]}),t){let t=[s[0]?.uv?.x??0,s[0]?.uv?.y??0];RP(s).forEach(i=>{i instanceof Pk&&RD(i,t,Object.keys(this.eventsPerObjects[e]),t=>{this.handleObjectMouseEventDispatch(t,e)}),this.eventsPerObjects[e][i.uuid]&&this.handleObjectMouseEventDispatch(i,e)})}}t||o.forEach(t=>{let r=RI(i,t);r&&(this.handleObjectMouseEventDispatch(t,e),t instanceof Pk&&RD(t,[r?.uv?.x??0,r?.uv?.y??0],Object.keys(this.eventsPerObjects[e]),t=>{this.handleObjectMouseEventDispatch(t,e)}))})}}handleMousePressEvent(e=!1){let t="MousePress",i=this.objectsPerTypes[t],r=i.filter(e=>!(e instanceof TY)),s=[];if(i.length){if(!e){let{stopRaycast:e,raycaster:i,page:a,pointerScreen:o}=this.eventContext,l=!1;if(a.uiCanvas&&(l=RD(a,[o.x,o.y],Object.keys(this.eventsPerObjects[t]),e=>{s.push(e)})),e&&!l){let e=RT(i,a,r);s=RP(e),e.forEach(e=>{e.object instanceof Pk&&RD(e.object,[e?.uv?.x??0,e?.uv?.y??0],Object.keys(this.eventsPerObjects[t]),e=>{s.push(e)})})}else r.forEach(e=>{let r=RI(i,e);r&&(s.push(e),e instanceof Pk&&RD(e,[r?.uv?.x??0,r?.uv?.y??0],Object.keys(this.eventsPerObjects[t]),e=>{s.push(e)}))})}this._prevObjects.length&&this._prevObjects.forEach(e=>{s.includes(e)||this.handleObjectMouseEventDispatchRelease(e,t)}),s.length&&s.forEach(e=>{this.handleObjectMouseEventDispatch(e,t)}),this._prevObjects=s}}handleObjectMouseEventDispatch(e,t){e.dispatchEvent({type:"beginEvent",eventName:t}),this.eventsPerObjects[t]?.[e.uuid]?.forEach(e=>{e.dispatch()})}handleObjectMouseEventDispatchRelease(e,t){e.dispatchEvent({type:"beginEvent",eventName:t}),this.eventsPerObjects[t]?.[e.uuid]?.forEach(e=>{e.dispatchRelease()})}handleKeyEvent(e,t,i=!1){this.objectsPerTypes[t].forEach(r=>{let s=this.eventsPerObjects[t][r.uuid];s.some(({data:t})=>"key"in t&&t.key===e.key)&&r.dispatchEvent({type:"beginEvent",eventName:t}
8404),s.forEach(t=>{"key"in t.data&&t.data.key===e.key&&(i?t.dispatchRelease():t.dispatch(!0))})})}handleKeyEventHeld(e,t,i=!1){this.objectsPerTypes[t].forEach(r=>{this.eventsPerObjects[t][r.uuid].forEach(t=>{"key"in t.data&&t.data.key===e.key&&t.dispatchHeld(i)})})}},RV=new iv,Rj=new iv,RG=class{constructor(e,t,i,r,s){this.actionsIn=OX(e,e.inActions,i,r,s,t),this.actionsOut=OX(e,e.outActions,i,r,s,t)}disconnect(){OY(this.actionsIn),OY(this.actionsOut)}},RH=class extends RG{constructor(e,t,i,r,s,a){super(t,i,r,s,a),this.id=e,this.data=t,this.object=i,this.stage="out",this.objects=[],this.onUpdateMatrixWorld=()=>{for(let e of this.objects)if(!e.visible)return;let e=RV.setFromMatrixPosition(this.objects[0].matrixWorld),t=Rj.setFromMatrixPosition(this.objects[1].matrixWorld),i=e.distanceTo(t)<=this.distance?"in":"out";if(this.stage!==i){this.stage=i;let e="in"===i?this.actionsIn:this.actionsOut;e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Link.forEach(e=>e.dispatch()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}};let{distance:o,fromObject:l,toObject:h}=t.condition;for(let e of(this.distance=o,[l,h])){if(!e)throw Error("Missing property");let t=r.find(e);if(!t)throw Error("Missing property");this.objects.push(t)}}connect(){window.setTimeout(()=>{this.objects.forEach(e=>{e.addEventListener("updateMatrixWorld",this.onUpdateMatrixWorld)}),this.onUpdateMatrixWorld()},0)}disconnect(){super.disconnect(),this.stage="out",this.objects.forEach(e=>{e.removeEventListener("updateMatrixWorld",this.onUpdateMatrixWorld)})}},RW=class extends RG{constructor(e,t,i,r,s,a){super(t,i,r,s,a),this.id=e,this.data=t,this.object=i,this.onBegin=({target:e,state:t})=>
8404{this.toState!==t&&(this.actionsOut.Audio.forEach(e=>e.dispatchConditional()),this.actionsOut.Particles.forEach(e=>e.dispatchConditional()),this.actionsOut.Video.forEach(e=>e.dispatchConditional()),this.actionsOut.Link.forEach(e=>e.dispatch()),this.actionsOut.Create.forEach(e=>e.dispatch()),this.actionsOut.Destroy.forEach(e=>e.dispatch()),this.actionsOut.Reset.forEach(e=>e.dispatch()),this.actionsIn.Transition.forEach(e=>e.pause()),this.object.currentTransitionEvent=this,this.actionsOut.Transition.forEach(e=>e.play()),this.actionsOut.Animation.forEach(e=>e.play()),this.actionsIn.SwitchCamera.forEach(e=>e.pause()),this.actionsOut.SwitchCamera.forEach(e=>e.play()),this.actionsOut.SceneTransition.forEach(e=>e.dispatch()),this.actionsOut.SetVariable.forEach(e=>e.checkConditions()),this.actionsOut.SetVariable.forEach(e=>e.dispatch()),this.actionsOut.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actionsOut.ClearLocalStorage.forEach(e=>e.dispatch()),this.actionsOut.UserAPI.forEach(e=>e.dispatch()))},this.onComplete=({target:e,state:t})=>
8404{this.toState===t&&(this.actionsIn.Audio.forEach(e=>e.dispatchConditional()),this.actionsIn.Particles.forEach(e=>e.dispatchConditional()),this.actionsIn.Video.forEach(e=>e.dispatchConditional()),this.actionsIn.Link.forEach(e=>e.dispatch()),this.actionsIn.Create.forEach(e=>e.dispatch()),this.actionsIn.Destroy.forEach(e=>e.dispatch()),this.actionsIn.Reset.forEach(e=>e.dispatch()),this.actionsOut.Transition.forEach(e=>e.pause()),this.actionsOut.Transition.forEach(e=>e.pause()),this.object.currentTransitionEvent=this,this.actionsIn.Transition.forEach(e=>e.play()),this.actionsIn.Animation.forEach(e=>e.play()),this.actionsOut.SwitchCamera.forEach(e=>e.pause()),this.actionsIn.SwitchCamera.forEach(e=>e.play()),this.actionsIn.SceneTransition.forEach(e=>e.dispatch()),this.actionsIn.SetVariable.forEach(e=>e.checkConditions()),this.actionsIn.SetVariable.forEach(e=>e.dispatch()),this.actionsIn.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actionsOut.ClearLocalStorage.forEach(e=>e.dispatch()),this.actionsOut.UserAPI.forEach(e=>e.dispatch()))};let{condition:o}=t;if(!o.object)throw Error("Missing property");let l=r.find(o.object)??r.scene.find2D(o.object);if(!l||(this.toObject=l,o.state&&!this.toObject.states?.[o.state]))throw Error("Missing property");this.toState=o.state}connect(){cJ(this.actionsOut).forEach(e=>{this.actionsOut[e]?.length&&this.toObject.addEventListener("beginState",this.onBegin)}),cJ(this.actionsIn).forEach(e=>{this.actionsIn[e]?.length&&this.toObject.addEventListener("completeState",this.onComplete)})}disconnect(){super.disconnect(),cJ(this.actionsOut).forEach(e=>{this.actionsIn[e]?.length&&this.toObject.removeEventListener("beginState",this.onBegin)}),cJ(this.actionsIn).forEach(e=>{this.actionsIn[e]?.length&&this.toObject.removeEventListener("completeState",this.onComplete)})}},Rq=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.eventsPerConditions={Comparison:[],Distance:[],State:[]},this.hasVideoAction=!1}connect(){super.connect();let{page:e,sharedAssets:t}=this.eventContext;e.traverseEntity(i=>{if(i.data?.events.length){for(let{id:r,data:s}of i.data.events)if(!s.disabled&&"Conditional"===s.type)try{let a;"Comparison"===s.condition.type||("Distance"===s.condition.type?a=new RH(r,s,i,e,t,this.eventManager):"State"===s.condition.type&&(a=new RW(r,s,i,e,t,this.eventManager))),a&&(this.eventsPerConditions[s.condition.type].push(a),(a.actionsIn.Video.length||a.actionsOut.Video.length)&&(this.hasVideoAction=!0))}catch(e){}}}),Object.values(this.eventsPerConditions).forEach(e=>e.forEach(e=>e.connect()))}disconnect(){super.disconnect(),Object.values(this.eventsPerConditions).forEach(e=>e.forEach(e=>e.disconnect()))}},RX=new iv,RY=new iv,RQ=new iv,RK=new ss,RZ=new iv,RJ=new iv,R$=new iv,R0=new ig,R1=new i3,R2=new iX,R3=new tK,R4=new iv,R5=new iv;function R6(e,t){!t||(t[0]<t[1]&&(e.x=Math.min(Math.max(e.x,t[0]),t[1])),t[2]<t[3]&&(e.y=Math.min(Math.max(e.y,t[2]),t[3])),t[4]<t[5]&&(e.z=Math.min(Math.max(e.z,t[4]),t[5])))}var R8=(tr=new iX,(e,t,i)=>{let r=e.obj;tr.copy(r.hiddenMatrix),null!==r.parent&&tr.premultiply(r.parent.matrixWorld),tr.invert(),r.position.copy(t),"global"===e.reference&&R6(r.position,e.limits),r.position.applyMatrix4(tr),"parent"===e.reference?R6(r.position,e.limits):"local"===e.reference&&(R0.copy(e.quat0).invert(),r.position.sub(e.position0),r.position.applyQuaternion(R0),R6(r.position,e.limits),R0.invert(),r.position.applyQuaternion(R0),r.position.add(e.position0)),tr.multiply(i??r.matrixWorld).decompose(RZ,r.quaternion,RJ),r.updateMatrix(),r.hasNonUniformScale&&(r.updateMatrixWorld(),r.updateMatrixWorldSVD()),r instanceof SP&&E_(r.parent)&&r.invalidateDownstreamBooleanData(!0)}),R9=class{constructor(e,t,i,r,s,a,o){this.object=e,this.id=t,this.data=i,this.dropDestIds=[],this.activeIdx=null,this.wasDragEventTriggered=!1,this.resetDampingFactor=0===this.data.resetSpeed?1:8/this.data.resetSpeed+1,this.snapDampingFactor=0===this.data.snapSpeed?1:8/this.data.snapSpeed+1,this.actionsDrag=OX(i,i.dragDropActions.drag,r,s,a,this.object),this.actionsDrop=OX(i,i.dragDropActions.drop,r,s,a,this.object);let l=[];
8404this.data.objects.forEach(e=>{let t=r.find(e);!t||!1!==t.data.visible&&(l.push(t),o[t.uuid]&&o[t.uuid].forEach(e=>{let t=r.find(e);t&&!1!==t.data.visible&&l.push(t)}))}),this.data.dropDestinations.forEach(e=>{let t=r.find(e);!t||!1!==t.data.visible&&(this.dropDestIds.push(t.uuid),o[t.uuid]&&o[t.uuid].forEach(e=>{let t=r.find(e);t&&!1!==t.data.visible&&this.dropDestIds.push(t.uuid)}))}),this.dragItems=l.map(e=>("locked"===this.data.planeMode&&(e.userData.lockedPlane=!0),e.userData.worldPosition0=new iv().setFromMatrixPosition(e.matrixWorld),{obj:e,fromPosition:new iv().setFromMatrixPosition(e.matrixWorld),pointStart:new iv,pointEnd:new iv,paused:!0,currentDampingFactor:this.data.dampingFactor,reset:!1,position0:new iv().copy(e.position),quat0:new ig().copy(e.quaternion),snapped:!1,orientationMatrix:new iX,limits:this.data.limits,reference:this.data.referenceFrame}))}get activeDragItem(){return null!==this.activeIdx?this.dragItems[this.activeIdx]:null}dispose(){OY(this.actionsDrag),OY(this.actionsDrop),this.dragItems.forEach(e=>{e.fromPosition.copy(e.obj.userData.worldPosition0),e.pointStart.copy(e.fromPosition),e.pointEnd.copy(e.pointStart),e.obj.recursiveBBoxNeedsUpdate=!0,e.obj.userData.lockedPlane=void 0,e.obj.position.copy(e.position0),e.obj.quaternion.copy(e.quat0),e.obj.updateMatrix()})}},R7=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.events=[],this.lastDropDestination=null,this.dragTimeout=null,this.onPointerDown=e=>{if(u1.length>1)return;this.eventContext.updateRaycaster(e);let{raycaster:t,page:i}=this.eventContext,r=i.raycastWithClones(t);if(this.lastDropDestination=null,0===r.length){this.activeEvent=null;return}for(let e of this.events){let t=0;for(let{obj:i,pointEnd:s,pointStart:a}of e.dragItems){if(i===r[0].object||i===r[0].object.object||wQ.is(i)&&i.isAncestorOf(r[0].object.uuid)){if(e.activeIdx=t,e.activeDragItem.reset=!1,e.activeDragItem.currentDampingFactor=e.data.dampingFactor,e.activeDragItem.snapped=!1,"hand"===e.data.cursor&&this.setCursor("grabbing"),this.eventManager.controlsManager.usePhysics){e.activeDragItem.obj.rigidBody&&e.activeDragItem.obj.rigidBody.setBodyType(2,!0);let t=e.activeDragItem.obj;i.hasNonUniformScale&&i.updateMatrixWorldSVD(),(t.hasNonUniformScale?t.matrixWorldRigid:t.matrixWorld).decompose(RZ,R0,RJ),R1.setFromQuaternion(R0),void 0===t.prevR?(t.prevR=R1.clone(),t.prevT=RZ.clone()):(t.prevR.copy(R1),t.prevT.copy(RZ)),this.eventManager.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim.push(e.activeDragItem.obj)}this.calcPlaneIntersectPos(i,a,e.data.plane,e.data.referenceFrame),s.copy(a),(this.eventManager.controlsManager.usePhysics&&i.data.physics?.rigidBody==="dynamic"||!1===e.data.drop||!1===e.data.resetOnSnapFail)&&e.activeDragItem.fromPosition.setFromMatrixPosition(e.activeDragItem.obj.matrixWorld),this.activeEvent=e,this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!1);return}t++}}this.activeEvent=null},this.onPointerMove=e=>{if(u1.length>1)return;this.eventContext.updateRaycaster(e);let{raycaster:t,page:i}=this.eventContext,r=i.raycastWithClones(t);if(0===u1.length){let e=!1;for(let t of this.events){for(let{obj:i}of t.dragItems)if(i===r[0]?.object||i===r[0]?.object?.object||wQ.is(i)&&i.isAncestorOf(r[0]?.object.uuid)){switch(e=!0,t.data.cursor){case"hand":this.setCursor("grab");break;case"move":this.setCursor("move")}break}if(e)break}e||this.setCursor("default");return}if(this.activeEvent&&this.activeEvent.activeDragItem){let e,t=this.activeEvent.activeDragItem;if(t.snapped=!1,this.activeEvent.data.drop&&(e=r.filter(e=>t.obj!==e.object&&!t.obj.isAncestorOf(e.object.uuid)&&!(e.object instanceof EO)&&("all"===this.activeEvent.data.dropOn||this.activeEvent.dropDestIds.some(t=>t===e.object.uuid||i.scene.find(t).isAncestorOf(e.object.uuid))))[0]),e){let i=R$.copy(e.face.normal).applyMatrix3(R3.getNormalMatrix(e.object.matrixWorld));if("center"===this.activeEvent.data.snapTo)t.fromPosition.setFromMatrixPosition(e.object.matrixWorld);else if("surface"===this.activeEvent.data.snapTo){if(t.fromPosition.copy(e.point),"bbox"===this.activeEvent.data.snapSurfaceMode){RZ.copy(i).applyMatrix3(R3.setFromMatrix4(t.obj.matrixWorld).transpose());let e=t.obj;RZ.x>.2?RJ.x=-e.recursiveBBox.min.x:RZ.x<-.2&&(RJ.x=-e.recursiveBBox.max.x),RZ.y>.2?RJ.y=-e.recursiveBBox.min.y:RZ.y<-.2&&(RJ.y=-e.recursiveBBox.max.y),RZ.z>.2?RJ.z=-e.recursiveBBox.min.z:RZ.z<-.2&&(RJ.z=-e.recursiveBBox.max.z),RJ.applyM
8404atrix3(R3.invert())}else RJ.copy(i).multiplyScalar(this.activeEvent.data.snapSurfaceOffset);t.fromPosition.add(RJ)}this.activeEvent.data.autoOrient&&(RZ.set(0,1,0).cross(i),1e-4>RZ.length()&&RZ.set(-1,0,0).cross(i),RJ.crossVectors(R$,RZ),t.orientationMatrix.makeBasis(RZ,RJ,i)),t.pointStart.copy(t.fromPosition),t.pointEnd.copy(t.pointStart),t.currentDampingFactor=this.activeEvent.snapDampingFactor,t.snapped=!0,this.lastDropDestination!==e.object&&(this.lastDropDestination=e.object,this.activeEvent.actionsDrop.Transition.forEach(e=>{e.play()}),this.activeEvent.actionsDrop.Animation.forEach(e=>{e.play()}),this.activeEvent.actionsDrop.Audio.forEach(e=>{e.dispatchGameControl("start")}),this.activeEvent.actionsDrop.Particles.forEach(e=>{e.dispatchGameControl("start")}),this.activeEvent.actionsDrop.Create.forEach(e=>{e.dispatchThrottled()}))}else t.orientationMatrix.makeRotationFromQuaternion(t.quat0),this.lastDropDestination=null,t.currentDampingFactor=this.activeEvent.data.dampingFactor,this.calcPlaneIntersectPos(t.obj,t.pointEnd,this.activeEvent.data.plane,this.activeEvent.data.referenceFrame),this.activeEvent.actionsDrop.Transition.forEach(e=>{e.stop(),null!==e.object.currentState&&e.object.changeSelectedState(null,{scene:this.eventContext.page.scene,shared:this.eventContext.sharedAssets})}),this.activeEvent.actionsDrop.Animation.forEach(e=>{e.stop()}
8404),this.activeEvent.actionsDrop.Audio.forEach(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrop.Particles.forEach(e=>{e.dispatchGameControl("stop")});this.activeEvent.actionsDrag.Create.forEach(e=>{e.dispatchThrottled()}),this.activeEvent.actionsDrag.SetVariable.forEach(e=>e.checkConditions()),this.activeEvent.actionsDrag.SetVariable.forEach(e=>e.dispatch()),this.activeEvent.actionsDrag.DynamicVariablePlay.forEach(e=>e.dispatch()),this.activeEvent.actionsDrag.ClearLocalStorage.forEach(e=>e.dispatch()),this.activeEvent.actionsDrag.UserAPI.forEach(e=>e.dispatch()),!1===this.activeEvent.wasDragEventTriggered&&(this.activeEvent.wasDragEventTriggered=!0,this.activeEvent.actionsDrag.Transition.forEach(e=>{e.play()}),this.activeEvent.actionsDrag.Animation.forEach(e=>{e.play()}),this.activeEvent.actionsDrag.Audio.forEach(e=>{e.dispatchGameControl("start")}),this.activeEvent.actionsDrag.Particles.forEach(e=>{e.dispatchGameControl("start")})),this.dragTimeout&&window.clearTimeout(this.dragTimeout),this.dragTimeout=window.setTimeout(()=>{this.activeEvent&&(this.activeEvent.wasDragEventTriggered=!1,this.activeEvent.actionsDrag.Audio.forEac
vendor: 5,919 bytes, line 8404
8404h(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrag.Particles.forEach(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrag.Transition.forEach(e=>{e.stop(),null!==e.object.currentState&&e.object.changeSelectedState(null,{scene:this.eventContext.page.scene,shared:this.eventContext.sharedAssets})}),this.activeEvent.actionsDrag.Animation.forEach(e=>{e.stop()}))},500),this.updateDragItem(t),t.obj.dispatchEvent({type:"requestRender"})}},this.onPointerUp=e=>{if(this.activeEvent&&this.activeEvent.activeDragItem){"hand"===this.activeEvent.data.cursor&&this.setCursor("grab");let e=this.activeEvent.activeDragItem.obj.data.physics?.rigidBody==="dynamic";!1===this.activeEvent.activeDragItem.snapped&&this.activeEvent.data.drop&&this.activeEvent.data.resetOnSnapFail&&(!1===this.eventManager.controlsManager.usePhysics||!e)&&(this.activeEvent.activeDragItem.reset=this.activeEvent.data.resetOnSnapFail,this.activeEvent.activeDragItem.paused=!1,this.activeEvent.activeDragItem.currentDampingFactor=this.activeEvent.resetDampingFactor),this.eventManager.controlsManager.usePhysics&&e&&(this.eventManager.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim.pop(),this.activeEvent.activeDragItem.obj.rigidBody.setBodyType(0,!0),this.activeEvent.activeDragItem.paused=!0),!0===this.activeEvent.wasDragEventTriggered&&(this.activeEvent.wasDragEventTriggered=!1,this.activeEvent.actionsDrag.Transition.forEach(e=>{e.stop(),null!==e.object.currentState&&e.object.changeSelectedState(null,{scene:this.eventContext.page.scene,shared:this.eventContext.sharedAssets})}),this.activeEvent.actionsDrag.Animation.forEach(e=>{e.stop()}),this.activeEvent.actionsDrag.Audio.forEach(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrag.Particles.forEach(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrop.SetVariable.forEach(e=>e.checkConditions()),this.activeEvent.actionsDrop.SetVariable.forEach(e=>e.dispatch()),this.activeEvent.actionsDrop.DynamicVariablePlay.forEach(e=>e.dispatch()),this.activeEvent.actionsDrop.ClearLocalStorage.forEach(e=>e.dispatch()),this.activeEvent.actionsDrop.UserAPI.forEach(e=>e.dispatch())),this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!0)}}}connect(){let e={};if(this.eventContext.page.traverseEntity(t=>{t.component&&(e[t.component.uuid]?e[t.component.uuid].push(t.uuid):e[t.component.uuid]=[t.uuid])}),this.eventContext.page.traverseEntity(t=>{t.data?.events.filter(e=>"DragDrop"===e.data.type&&!e.data.disabled).forEach(i=>{this.events.push(new R9(t,i.id,i.data,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager,e))})}),!this.events.length)return;this.domEventsNeeded.clear(),this.domEventsNeeded.add("pointerdown");let t=this.eventContext.domElement;t.addEventListener("pointerdown",this.onPointerDown),t.addEventListener("pointermove",this.onPointerMove),t.addEventListener("pointerup",this.onPointerUp),this.domEventsNeeded.add("pointermove")}disconnect(){if(!this.events.length)return;this.domEventsNeeded.clear();let e=this.eventContext.domElement;e.removeEventListener("pointerdown",this.onPointerDown),e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerup",this.onPointerUp),this.events.forEach(e=>e.dispose())}setCursor(e){this.eventContext.domElement.style.cursor=e}onAnimationFrameDamping(){for(let e of this.events)for(let t of e.dragItems)t.paused||this.updateDragItem(t,!0)}calcPlaneIntersectPos(e,t,i,r){let{getCamera:s,raycaster:a}=this.eventContext;s().getWorldDirection(RY),RY.negate();let o=R0.identity();switch("parent"===r?R2.multiplyMatrices(e.parent.matrixWorld,e.hiddenMatrix).decompose(RZ,o,RJ):"local"===r&&e.matrixWorld.decompose(RZ,o,RJ),i){case"x":RZ.set(1,0,0).applyQuaternion(o),R4.copy(RY).cross(RZ),R5.copy(RZ).cross(R4);break;case"y":RZ.set(0,1,0).applyQuaternion(o),R4.copy(RY).cross(RZ),R5.copy(RZ).cross(R4);break;case"z":RZ.set(0,0,1).applyQuaternion(o),R4.copy(RY).cross(RZ),R5.copy(RZ).cross(R4);break;case"xy":R5.set(0,0,1).applyQuaternion(o);break;case"yz":R5.set(1,0,0).applyQuaternion(o);break;case"xz":R5.set(0,1,0).applyQuaternion(o);break;case"adaptive":RY.angleTo(RJ.set(0,1,0))>Math.PI/6?(RZ.crossVectors(RJ.set(0,1,0),RY),R5.crossVectors(RZ,RJ)):R5.set(0,1,0);break;default:R5.copy(RY)}RQ.setFromMatrixPosition(e.matrixWorld);let l=e.userData.lockedPlane?e.userData.worldPosition0:RQ;if(RK.setFromNormalAndCoplanarPoint(R5,l),a.ray.intersectPlane(RK,t)&&("x"===i||"y"===i||"z"===i)){let e=RJ.subVectors(t,l).dot(RZ);t.copy(l).addScaledVector(RZ,e)}}updateDragItem(e,t=!1){RQ.setFromMatrixPosition(e.obj.matrixWorld),"current"===e.reset?RX.subVectors(e.fromPosition,RQ).divideScalar(e.currentDampingFactor):"original"===e.reset?(RX.subVectors(e.obj.userData.worldPosition0,RQ).divideScalar(e.currentDampingFactor),e.fromPosition.copy(e.obj.userData.worldPosition0),e.pointStart.copy(e.fromPosition),e.pointEnd.copy(e.pointStart)):RX.subVectors(e.pointEnd,e.pointStart).add(e.fromPosition).sub(RQ).divideScalar(e.currentDampingFactor),e.paused=!(e.currentDampingFactor>1)||.01>RX.length(),(this.activeEvent&&1===this.activeEvent.data.dampingFactor||t)&&R8(e,RX.add(RQ),this.activeEvent?.data.drop&&this.activeEvent?.data.autoOrient?e.orientationMatrix:null),e.obj.dispatchEvent({type:"beginEvent",eventName:"DragDrop"}),this.eventManager.requestRender()}},Le=new iv,Lt=new iv,Li=new iv,Lr=new iv,Ls=new ss,La={type:"requestRender"},Ln=(ts=new iv,ta=new iv,(e,t,i)=>i>0?(ts.subVectors(e,t),ts.length()<=i?e:ta.copy(t).add(ts.normalize().multiplyScalar(i))):t),Lo=(tn=new iX,(e,t)=>{e.position.copy(t),null!==e.parent&&(tn.copy(e.parent.matrixWorld).invert(),e.position.applyMatrix4(tn)),tn.copy(e.hiddenMatrix).invert(),e.position.applyMatrix4(tn),e.updateMatrix(),e.hasNonUniformScale&&(e.updateMatrixWorld(),e.updateMatrixWorldSVD()),e instanceof SP&&E_(e.parent)&&e.invali
8404dateDownstreamBooleanData(!0)}),Ll=class{constructor(e,t,i,r,s,a){this.data=e,this.id=t,this.object=i,this.paused=!1,this.currentDampingFactor=1,this.snapComplete=!1,this.isReset=!1,this.worldPosition0=new iv,this.timeoutId=null,this.delayFinished=!0,this.wasOutside=!1,this.data={...mK.defaultData,...e,...void 0===e.resetOnPointerLeave&&{resetOnPointerLeave:!1}},void 0===e.target||"cursor"===e.target||(this.target=r.find(e.target)),this.data.dampingFactor&&(this.currentDampingFactor=this.data.dampingFactor),this.resetDampingFactor=80/this.data.resetSpeed+1,this.object.getWorldPosition(this.worldPosition0),this.actions=OX(e,e.actions,r,s,a,i)}},Lh=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.events=[],this.pairOfEventListeners=[],this.onMouseMove=e=>{if(!(u1.length>1))for(let t of(this.eventContext.updateRaycaster(e),this.events))void 0===t.target&&this.updateSingleEvent(t)},this.onMouseEnter=e=>{for(let e of this.events)void 0===e.target&&(e.isReset=!1,e.currentDampingFactor=e.data.dampingFactor)},this.onMouseLeave=e=>{for(let e of this.events)void 0===e.target&&(e.data.resetOnPointerLeave&&(e.isReset=!0,e.currentDampingFactor=e.resetDampingFactor),this.updateSingleEvent(e))},this.onTargetChange=e=>()=>{this.updateSingleEvent(e)}}connect(){let{page:e}=this.eventContext;if(e.traverseEntity(t=>{let i=t.data?.events.find(e=>"Follow"===e.data.type&&!e.data.disabled);i&&(!e.data.globalPhysics.usePhysics||t.dataPatched.physics?.rigidBody!=="dynamic")&&this.events.push(new Ll(i.data,i.id,t,e,this.eventContext.sharedAssets,this.eventManager))}),!this.events.length)return;let{domElement:t,eventElement:i}=this.eventContext;for(let e of(this.domEventsNeeded.clear(),uQ&&(this.domEventsNeeded.add("pointerdown"),t.addEventListener("pointerdown",this.onMouseMove)),this.domEventsNeeded.add("pointermove"),i.addEventListener("pointermove",this.onMouseMove),this.eventContext.useWindowEvents||(t.addEventListener("pointerenter",this.onMouseEnter),t.addEventListener("pointerleave",this.onMouseLeave)),this.events))if(void 0!==e.target){let t=e.target,i=this.onTargetChange(e);this.pairOfEventListeners.push([t,i]),t.addEventListener("requestRender",i)}}disconnect(){if(!this.events.length)return;let{domElement:e,eventElement:t}=this.eventContext;for(let[i,r]of(this.domEventsNeeded.clear(),uQ&&e.removeEventListener("pointerdown",this.onMouseMove),t.removeEventListener("pointermove",this.onMouseMove),e.removeEventListener("pointerenter",this.onMouseEnter),e.removeEventListener("pointerleave",this.onMouseLeave),this.pairOfEventListeners))i.removeEventListener("requestRender",r);for(let e of this.events)e.paused=!0,e.isReset=!1,OY(e.actions)}onAnimationFrameDamping(){for(let e of this.events)e.paused||this.updateSingleEvent(e,!0)}updateSingleEvent(e,t=!1){this.events.forEach(e=>{e.actions.Create.forEach(e=>{e.dispatchThrottled()})});let{plane:i,limitDistance:r,limitDistanceEnabled:s}=e.data;if(e.object.getWorldPosition(Li),e.isReset)Lr.copy(e.worldPosition0);else if(e.target)e.target.getWorldPosition(Lr);else{let{getCamera:e,raycaster:t}=this.eventContext;if("custom"===i?(e().getWorldDirection(Lt),Lt.negate(),Le.copy(Lt)):"xy"===i?Le.set(0,0,1):"xz"===i?Le.set(0,1,0):"yz"===i&&Le.set(1,0,0),Ls.setFromNormalAndCoplanarPoint(Le,Li),!t.ray.intersectPlane(Ls,Lr))return}if(!e.isReset){if(Lr.distanceTo(e.worldPosition0)>r&&s&&e.target){if(e.snapComplete=!1,e.data.snapDelay&&(e.delayFinished=!1,"u">typeof window&&null!==e.timeoutId&&(window.clearTimeout(e.timeoutId),e.timeoutId=null)),e.wasOutside=!0,!e.data.resetAfterDistanceLimit)return;Lr.copy(e.worldPosition0),e.currentDampingFactor=e.resetDampingFactor}else if(e.wasOutside&&(e.data.snapDelay&&"u">typeof window&&(e.timeoutId=window.setTimeout(()=>{e.delayFinished=!0,e.paused=!1,this.updateSingleEvent(e)},1e3*e.data.snapDelay)),e.currentDampingFactor=e.data.dampingFactor,e.wasOutside=!1),!1===e.delayFinished)return}!1===e.data.enabledTranslation[0]&&(Lr.x=Li.x),!1===e.data.enabledTranslation[1]&&(Lr.y=Li.y),!1===e.data.enabledTranslation[2]&&(Lr.z=Li.z);
8404let a=Ln(Li,Lr,e.wasOutside?0:e.data.maxDelta);if(e.currentDampingFactor>1){let i=Le.subVectors(a,Li).divideScalar(e.currentDampingFactor);Li.add(i),t&&Lo(e.object,Li),e.paused=.01>i.length()}else Lo(e.object,a),e.paused=!0;e.object?.dispatchEvent({type:"beginEvent",eventName:"Follow"}),e.object.dispatchEvent(La)}},Lc=new iv,Ld=new iv,Lu=new iX,Lp=new ig,Lf=new ig,Lm=new iv,Lg=new iv,Lv=new iv,Ly=new iv,Lx=new ss,Lb={type:"requestRender"},Lw={type:"changeRotation"},LS=(to=new iX,function(e,t){null!==e.parent?to.multiplyMatrices(e.parent.matrixWorld,e.hiddenMatrix):to.copy(e.hiddenMatrix),t.premultiply(RA(to).invert()),e.rotation.setFromRotationMatrix(t),e.updateMatrix(),e instanceof SP&&E_(e.parent)&&e.invalidateDownstreamBooleanData(!0)}),L_=class{constructor(e,t,i,r){this.id=t,this.object=i,this.paused=!1,this.currentDampingFactor=1,this.isReset=!1,this.worldQuaternion0=new ig,this.timeoutId=null,this.delayFinished=!0,this.wasOutside=!1,this.data={...mZ.defaultData,...e,...void 0===e.resetOnPointerLeave&&{resetOnPointerLeave:!1}},void 0===e.target||"cursor"===e.target||(this.target=r.find(e.target)),this.data.dampingFactor&&(this.currentDampingFactor=this.data.dampingFactor),this.object.getWorldQuaternion(this.worldQuaternion0),this.resetDampingFactor=80/this.data.resetSpeed+1}},LA=class extends RR{constructor(){super(...arguments),this.events=[],this.pairOfEventListeners=[],this.pairOfUserEventListeners=[],this.onMouseMove=e=>{if(!(u1.length>1))for(let t of(this._lastMouseEvent=e,this.eventContext.updateRaycaster(e),this.events))void 0===t.target&&this.updateSingleEvent(t)},this.onMouseEnter=e=>{for(let e of this.events)void 0===e.target&&(e.isReset=!1,e.currentDampingFactor=e.data.dampingFactor)},this.onMouseLeave=e=>{for(let e of this.events)void 0===e.target&&(e.data.resetOnPointerLeave&&(e.isReset=!0,e.currentDampingFactor=e.resetDampingFactor),this.updateSingleEvent(e))},this.onScroll=e=>{if(this._lastMouseEvent){let e=new PointerEvent("pointermove",{clientX:this._lastMouseEvent.clientX,clientY:this._lastMouseEvent.clientY,bubbles:!0,cancelable:!0,view:window});this.eventContext.eventElement.dispatchEvent(e)}},this.onTargetChange=e=>()=>{this.updateSingleEvent(e)},this.createUserEventListener=e=>({eventName:t,target:i})=>{if(!t||!i)return;let r=Rz(t);r&&"LookAt"===r&&this.updateSingleEvent(e)}}connect(){let{page:e}=this.eventContext;if(e.traverseEntity(t=>{let i=t.data?.events.find(e=>"LookAt"===e.data.type&&!e.data.disabled);i&&(!e.data.globalPhysics.usePhysics||t.dataPatched.physics?.rigidBody!=="dynamic")&&this.events.push(new L_(i.data,i.id,t,e))}),!this.events.length)return;let{domElement:t,eventElement:i}=this.eventContext;for(let e of(this.domEventsNeeded.clear(),uQ&&(this.domEventsNeeded.add("pointerdown"),t.addEventListener("pointerdown",this.onMouseMove)),this.domEventsNeeded.add("pointermove"),i.addEventListener("pointermove",this.onMouseMove),this.eventContext.useWindowEvents?i.addEventListener("scroll",this.onScroll):(t.addEventListener("pointerenter",this.onMouseEnter),t.addEventListener("pointerleave",this.onMouseLeave)),this.events)){if(void 0!==e.target){let t=this.onTargetChange(e),i=e.target;this.pairOfEventListeners.push([i,t]),i.addEventListener("requestRender",t)}let t=this.createUserEventListener(e),i=e.object;this.pairOfUserEventListeners.push([i,t]),i.addEventListener("userEvent",t)}}disconnect(){if(!this.events.length)return;let{domElement:e,eventElement:t}=this.eventContext;for(let[i,r]of(this.domEventsNeeded.clear(),uQ&&e.removeEventListener("pointerdown",this.onMouseMove),t.removeEventListener("pointermove",this.onMouseMove),e.removeEventListener("pointerenter",this.onMouseEnter),e.removeEventListener("pointerleave",this.onMouseLeave),t.removeEventListener("scroll",this.onScroll),this.pairOfEventListeners))i.removeEventListener("requestRender",r);for(let[e,t]of this.pairOfUserEventListeners)e.removeEventListener("userEvent",t);for(let e of this.events)e.paused=!0,e.isReset=!1}onAnimationFrameDamping(){for(let e of this.events)e.paused||this.updateSingleEvent(e)}updateSingleEvent(e){let{tilt:t,axis:i,distance:r,plane:s,limitDistance:a,enabledRotation:o,limitDistanceEnabled:l}=e.data,{getCamera:h,raycaster:c}=this.eventContext,{object:d,target:u}=e;if(d.getWorldPosition(Lm),!e.isReset){if(e.target)e.target.getWorldPosition(Lg);else{if("custom"===s?(h().getWorldDirection(Ld),Ld.negate(),Lx.setFromNormalAndCoplanarPoint(Ld,Lm)):("xy"===s?Lc.set(0,0,1):"xz"===s?Lc.set(0,1,0):"yz"===s&&Lc.set(1,0,0),Lx.setFromNormalAndCoplanarPoint(Lc,Lm)),!c.ray.intersectPlane(Lx,Lg))return;r>0&&("custom"===s||void 0===s)&&Lg.addScaledVector(Ld,r)}}if(e.isReset||(u?"target"===t?Lv.copy(u.up).applyMatrix4(Lu.extractRotation(u.matrixWorld)).normalize():o.some(e=>!1===e)?("x"===i?(Ly.set(0,0,1),!1===o[2]&&Ly.set(0,1,0)):"y"===i?(Ly.set(1,0,0),!1===o[0]&&Ly.set(0,0,1)):(Ly.set(0,1,0),!1===o[1]&&Ly.set(1,0,0)),Lv.copy(Ly).applyQuaternion(e.worldQuaternion0).normalize()):Lv.set(0,1,0):"custom"===s?Lv.set(0,1,0):Lv.copy(Lc)),e.isReset)Lf.copy(e.worldQuaternion0);else if(Lm.distanceTo(Lg)>a&&l&&u){if(e.data.snapDelay&&(e.delayFinished=!1,"u">typeof window&&null!==e.timeoutId&&(window.clearTimeout(e.timeoutId),e.timeoutId=null)),e.wasOutside=!0,!e.data.resetAfterDistanceLimit)return;Lf.copy(e.worldQuaternion0),e.currentDampingFactor=e.resetDampingFactor}else{let r;if(e.wasOutside&&(e.data.snapDelay&&"u">typeof window&&(e.timeoutId=window.setTimeout(()=>{e.delayFinished=!0,e.paused=!1,this.updateSingleEvent(e)},1e3*e.data.snapDelay)),e.currentDampingFactor=e.data.dampingFactor,e.wasOutside=!1),!1===e.delayFinished)return;r=Lu.elements,LC.subVectors(Lg,Lm),0===LC.lengthSq()&&(LC.z=1),LC.normalize(),LE.crossVectors(Lv,LC),0===LE.lengthSq()&&(1===Math.abs(Lv.z)?LC.x+=1e-4:LC.z+=1e-4,LC.normalize(),LE.crossVectors(Lv,LC)),LE.normalize(),LM.crossVectors(LC,LE),"x"===i?1===Ly.z?[LE,LM,LC]=[LC,LE,LM]:(LE.negate(),[LE,LC]=[LC,LE]):"y"===i?1===Ly.x?[LE,LM,LC]=[LM,LC,LE]:(LE.negate(),[LM,LC]=[LC,LM]):1===Ly.x&&(LE.negate(),[LE,LM]=[LM,LE]),r[0]=LE.x,r[4]=LM.x,r[8]=LC.x,r[1]=LE.y,r[5]=LM.y,r[9]=LC.y,r[2]=LE.z,r[6]=LM.z,r[10]=LC.z,Lf.setFromRotationMatrix(Lu),Lp.setFromUnitVectors(Ly.applyQuaternion(Lf),Lv),o.some(e=>!1===e)&&"target"!==t&&Lf.premultiply(Lp).normalize()}e.currentDampingFactor>1?(d.updateWorldMatrix(!0,!1),Lp.setFromRotationMatrix(RA(d.matrixWorld)),Lp.slerp(Lf,1/e.currentDampingFactor),LS(d,Lu.makeRotationFromQuaternion(Lp)),e.paused=8*(1-L
vendor: 13,068 bytes, line 8404
8404p.dot(Lf))<1e-6):(LS(d,Lu.makeRotationFromQuaternion(Lf)),e.paused=!0),e.object?.dispatchEvent({type:"beginEvent",eventName:"LookAt"}),d.dispatchEvent(Lb),d.dispatchEvent(Lw)}},LM=new iv,LE=new iv,LC=new iv,LT=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.entered=!1,this.actions=OX(t,t.actions,r,s,a,i)}disconnect(){OY(this.actions)}dispatchEnter(){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.entered||(this.entered=!0,this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.play()),this.actions.Create.forEach(e=>e.dispatchStart()),this.actions.Particles.forEach(e=>e.dispatchBasic()),this.actions.Destroy.forEach(e=>e.dispatch()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent()),this.actions.SceneTransition.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()))}dispatchLeave(){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.entered&&(this.entered=!1,this.actions.Create.forEach(e=>e.dispatchStop()),this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Particles.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent()))}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Particles.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.playFromCurrent()),this.actions.Create.forEach(e=>e.dispatch()),this.actions.Particles.forEach(e=>e.dispatchBasic()),this.actions.Destroy.forEach(e=>e.dispatch()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent())),this.actions.SceneTransition.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}},LP=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.eventsPerObjects={},this.objects=[],this.objects2D=[],this._prevObjects=[],this.onMouseDown=e=>{u1.length>1||(this.eventContext.updateRaycaster(e),this.handleMouseHoverEvent())},this.onMouseUp=e=>{u1.length>1||this.handleMouseHoverEvent(!0)},this.onMouseMove=e=>{u1.length>1||(this.eventContext.updateRaycaster(e),this.handleMouseHoverEvent())},this.onUserEvent=({eventName:e,target:t,reverse:i})=>{if(!e||!t)return;let r=Rz(e);r&&"MouseHover"===r&&(t.dispatchEvent({type:"beginEvent",eventName:"MouseHover"}),this.eventsPerObjects[t.uuid]?.forEach(e=>e.dispatchUserEvent(i)))}}connect(){let{page:e,sharedAssets:t}=this.eventContext,i=(i,r)=>{if(!(!i.visible||!i.data?.events.length)){for(let{id:r,data:s}of i.data.events)if(!s.disabled&&"MouseHover"===s.type)try{let a=new LT(r,s,i,e,t,this.eventManager);this.eventsPerObjects[i.uuid]?this.eventsPerObjects[i.uuid].push(a):this.eventsPerObjects[i.uuid]=[a]}catch(e){}this.eventsPerObjects[i.uuid]?.length&&this.objects.push(i instanceof TY?r:i)}};if(e.traverseEntity(e=>{(e instanceof Pk||e instanceof PD)&&e.frame?.traverse(t=>{i(t,e)}),i(e)}),!this.objects.length)return;let{domElement:r}=this.eventContext;this.domEventsNeeded.clear(),uQ&&(this.domEventsNeeded.add("pointerdown"),r.addEventListener("pointerdown",this.onMouseDown),this.domEventsNeeded.add("pointerup"),r.addEventListener("pointerup",this.onMouseUp)),this.domEventsNeeded.add("pointermove"),r.addEventListener("pointermove",this.onMouseMove),this.objects.forEach(e=>{e.addEventListener("userEvent",this.onUserEvent)})}disconnect(){if(!this.objects.length)return;let{domElement:e}=this.eventContext;this.domEventsNeeded.clear(),uQ&&(e.removeEventListener("pointerdown",this.onMouseDown),e.removeEventListener("pointerup",this.onMouseUp)),e.removeEventListener("pointermove",this.onMouseMove),Object.values(this.eventsPerObjects).forEach(e=>{e.forEach(e=>{e.disconnect()})}),this.objects.forEach(e=>{e.removeEventListener("userEvent",this.onUserEvent)})}handleMouseHoverEvent(e=!1){let t=[];if(!e){let{stopRaycast:e,raycaster:i,page:r,pointerScreen:s}=this.eventContext,a=!1;if(r.uiCanvas&&(a=RD(r,[s.x,s.y],Object.keys(this.eventsPerObjects),e=>{t.push(e)})),e&&!a){let e=RT(i,r,this.objects);t=RP(e),e.forEach(e=>{e.object instanceof Pk&&RD(e.object,[e?.uv?.x??0,e?.uv?.y??0],Object.keys(this.eventsPerObjects),e=>{t.push(e)})})}else this.objects.forEach(e=>{let r=RI(i,e);r&&(t.push(e),e instanceof Pk&&RD(e,[r?.uv?.x??0,r?.uv?.y??0],Object.keys(this.eventsPerObjects),e=>{t.push(e)}))})}this._prevObjects.length&&this._prevObjects.forEach(e=>{t.includes(e)||(e.dispatchEvent({type:"beginEvent",eventName:"MouseHover"}),this.eventsPerObjects[e.uuid]?.forEach(e=>e.dispatchLeave()))}),t.length&&t.forEach(e=>{e.dispatchEvent({type:"beginEvent",eventName:"MouseHover"}),this.eventsPerObjects[e.uuid]?.forEach(e=>e.dispatchEnter())}),this._prevObjects=t}},LD=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.scrollCounter=0,this.actions=OX(t,t.actions,r,s,a,i)}connect(){this.scrollCounter=0}disconnect(){OY(this.actions)}dispatch(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())});let t=e>0?1:-1;this.scrollCounter+=t,this.scrollCounter=Math.min(Math.max(this.scrollCounter,0),this.data.steps);let i=this.scrollCounter/this.data.steps;this.actions.Transition.forEach(e=>e.seek(i)),this.actions.Animation.forEach(e=>e.seek(t)),this.actions.Create.forEach(e=>e.dispatchThrottled()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>{e.playFromCurrent()}),this.actions.Animation.forEach(e=>{e.playFromCurrent()})),this.actions.Create.forEach(e=>e.dispatchThrottled()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}},LI=class{constructor(e,t,i,r,s,a,o){this.id=e,this.data=t,this.object=i,this.domElement=a,this.eventManager=o,this.scrollStart=0,this.scrollEnd=0,this.actions=OX(t,t.actions,r,s,o,i)}getStickyParentElement(){let e=this.domElement;for(;e;){if("sticky"===window.getComputedStyle(e).position)return e;e=e.parentElement}return null}computeScrollBounds(){let e=this.getStickyParentElement(),t=e?.parentElement,i=this.domElement.getBoundingClientRect(),r={top:i.top,bottom:i.bottom,left:i.left,right:i.right,width:i.width,height:i.height};if(t){let s=t.getBoundingClientRect(),a=window.getComputedStyle(e),o=parseFloat(a.marginTop)+parseFloat(a.marginBottom),l=parseFloat(a.top),h=parseFloat(a.bottom),c=s.height-o;if(isNaN(l)){if(!isNaN(h)){let e=document.body.clientHeight??window.innerHeight,t=window.innerWidth-(document.documentElement.clientWidth??window.innerWidth);i.bottom===e-h?(r.top+=s.top-i.height+h+t,r.bottom+=s.top-i.height+h+t):i.bottom<e-h&&(r.top-=c-i.height,r.bottom-=c-i.height)}}else i.top===l?(r.top+=s.top-l,r.bottom+=s.top-l):i.top<0&&(r.top-=c-i.height,r.bottom-=c-i.height)}let s=document.body,a=document.documentElement,o=window.pageYOffset||a.scrollTop||s.scrollTop,l=a.clientTop||s.clientTop||0,h=Math.round(r.top+o-l);if("enter"===this.data.startFrom){let e=window.innerHeight,t=r.height,i=this.data.enterAnchor;this.scrollStart=h-("top"===i?e:"bottom"===i?e-t:e-.5*t)}else this.scrollStart=0;this.scrollStart+=this.data.startOffset??0,this.scrollEnd=this.scrollStart+(this.data.endAfter??400),this.box=r,this.computeScroll({x:window.scrollX,y:window.scrollY})}connect(){this.computeScrollBounds()}disconnect(){OY(this.actions)}handleResize(){this.computeScrollBounds()}get isInvalidBox(){return void 0===this.box||0===this.box.width&&0===this.box.height&&0===this.box.top&&0===this.box.bottom}computeScroll({x:e,y:t}){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())});let i=this.scrollEnd-this.scrollStart,r=Math.min(1,Math.max(0,(t-this.scrollStart)/i));this.actions.Transition.forEach(e=>e.seek(r)),this.actions.Animation.forEach(e=>e.seek(r)),this.actions.Create.forEach(e=>e.dispatchThrottled()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}dispatch(e){this.isInvalidBox&&this.computeScrollBounds(),this.computeScroll(e)}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>{e.playFromCurrent()}),this.actions.Animation.forEach(e=>{e.playFromCurrent()})),this.actions.Create.forEach(e=>e.dispatchThrottled()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}},LO=class extends RR{constructor(e,t){super(e),this.managers=t,this.wheelEventsPerObject=new Map,this.scrollEventsPerObject=new Map,this.isInview=!0,this.handleResize=()=>{[...this.scrollEventsPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>e.handleResize())})},this.onScroll=e=>{if(!this.isInview)return;let t={y:window.scrollY,x:window.scrollX};[...this.scrollEventsPerObject.entries()].forEach(([e,i])=>{e.dispatchEvent({type:"beginEvent",eventName:"Scroll",scroll:t}),i.forEach(e=>e.dispatch(t))})},this.onWheel=e=>{!this.isInview||e.ctrlKey||[...this.wheelEventsPerObject.entries()].forEach(([t,i])=>{t.dispatchEvent({type:"beginEvent",eventName:"Scroll",deltaY:e.deltaY}),i.forEach(t=>t.dispatch(e.deltaY))})},this.onUserEvent=({eventName:e,target:t,reverse:i})=>{if(!e||!t)return;let r=Rz(e);r&&"Scroll"===r&&(t.dispatchEvent({type:"beginEvent",eventName:"Scroll"}),this.wheelEventsPerObject.get(t)?.forEach(e=>{e.dispatchUserEvent(i)}))}}connect(){let{page:e,sharedAssets:t,domElement:i,isExport:r}=this.eventContext,s=s=>{if(s.data?.events.length){for(let{id:a,data:o}of s.data.events)if(!o.disabled&&"Scroll"===o.type){if("load"!==o.trigger&&r){let r=new LI(a,o,s,e,t,i,this.managers);this.scrollEventsPerObject.has(s)?this.scrollEventsPerObject.get(s)?.push(r):this.scrollEventsPerObject.set(s,[r])}else{let i=new LD(a,o,s,e,t,this.managers);this.wheelEventsPerObject.has(s)?this.wheelEventsPerObject.get(s)?.push(i):this.wheelEventsPerObject.set(s,[i])}}}};e.traverseEntity(e=>{(e instanceof Pk||e instanceof PD)&&e.frame?.traverse(e=>{s(e)}),s(e)}),this.intersectionObserver=new IntersectionObserver(e=>{let t=e[0];t&&(this.isInview=t.isIntersecting)},{root:null}),this.intersectionObserver.observe(this.eventContext.domElement),[...this.wheelEventsPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>e.connect()),e.addEventListener("userEvent",this.onUserEvent)}),[...this.scrollEventsPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>e.connect()),e.addEventListener("userEvent",this.onUserEvent)}),[...this.wheelEventsPerObject.values()].some(e=>e.length)&&(this.domEventsNeeded.add("wheel"),window.addEventListener("wheel",this.onWheel)),[...this.scrollEventsPerObject.values()].some(e=>e.length)&&(this.domEventsNeeded.add("scroll"),window.addEventListener("scroll",this.onScroll),window.addEventListener("resize",this.handleResize))}disconnect(){window.removeEventListener("wheel",this.onWheel),window.removeEventListener("scroll",this.onScroll),window.removeEventListener("resize",this.handleResize),this.intersectionObserver.unobserve(this.eventContext.domElement),this.domEventsNeeded.clear(),[...this.wheelEventsPerObject.entries()].forEach(([e,t])=>
8404{t.forEach(e=>e.disconnect()),e.removeEventListener("userEvent",this.onUserEvent)}),[...this.scrollEventsPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>e.disconnect()),e.removeEventListener("userEvent",this.onUserEvent)})}},LR=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.actions=OX(t,t.actions,r,s,a,i)}disconnect(){OY(this.actions)}dispatch(){this.actions.Transition.forEach(e=>{e.play()}),this.actions.Animation.forEach(e=>{e.play()}),this.actions.SwitchCamera.forEach(e=>{e.play()}),this.actions.SceneTransition.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()),this.actions.Create.forEach(e=>{e.dispatchFromStart()}),this.actions.Destroy.forEach(e=>{e.dispatchFromStart()})}dispatchAfter(e){this.actions.Audio.forEac
8404h(t=>{(t.interaction.data.triggerAfter??"any")===e&&(t.interaction instanceof Ip?t.interaction.audioPlayer.play():t.interaction instanceof If&&t.interaction.dispatch())}),this.actions.Video.forEach(t=>{let i=t.interaction.data.triggerAfter??"autoplay";i===e&&(t.interaction instanceof OZ?t.interaction.play("autoplay"===i):t.interaction instanceof OJ&&t.interaction.dispatch())}),this.actions.Particles.forEach(t=>{(t.data.triggerAfter??"any")===e&&t.dispatchBasic()})}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.playFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent())),this.actions.SceneTransition.forEach(e=>e.dispatch()),this.actions.Reset.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch()}
8404),this.actions.Audio.forEach(e=>{e.interaction instanceof Ip?e.interaction.audioPlayer.play():e.interaction instanceof If&&e.interaction.dispatch()}),this.actions.Video.forEach(e=>{e.interaction instanceof OZ?e.interaction.play():e.interaction instanceof OJ&&e.interaction.dispatch()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()})}},LL=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.eventsPerObject=new Map,this.eventsAfterPerObject=new Map,this.onMouseDown=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>{e.dispatchAfter("mouseDown")})})},this.onKeyDown=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>{e.dispatchAfter("keyDown")})})},this.onAny=()=>{let{domElement:e,isExport:t}=this.eventContext,i=t?document:e;i.removeEventListener("pointerdown",this.onAny),i.removeEventListener("mousedown",this.onAny),document.removeEventListener("keydown",this.onAny),[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>{e.dispatchAfter("any")})})},this.onSceneTransitionAudioVideoPlay=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>
vendor: 4,072 bytes, line 8404
8404{e.actions.Audio.forEach(e=>{e.interaction instanceof Ip&&e.interaction.audioPlayer.play()}),e.actions.Video.forEach(e=>{let t=e.interaction.data.triggerAfter??"autoplay";e.interaction instanceof OZ&&e.interaction.play("autoplay"===t)}),e.actions.Particles.forEach(e=>{e.dispatchBasic()})})})},this.onPlay=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>{e.dispatchAfter("autoplay")})})},this.onUserEvent=({eventName:e,target:t,reverse:i})=>{if(!e||!t)return;let r=Rz(e);r&&"Start"===r&&(t instanceof TY||t.dispatchEvent({type:"beginEvent",eventName:"Start"}),this.eventsPerObject.get(t)?.forEach(e=>{e.dispatchUserEvent(i)}),this.eventsAfterPerObject.get(t)?.forEach(e=>{e.dispatchUserEvent(i)}))}}connect(){let{sharedAssets:e,page:t}=this.eventContext,i=i=>{if(i.data?.events.length)for(let{id:r,data:s}of i.data.events){if(s.disabled||"Start"!==s.type)continue;let a=new LR(r,s,i,t,e,this.eventManager);(a.actions.Transition.length||a.actions.Animation.length||a.actions.SwitchCamera.length||a.actions.Create.length||a.actions.Destroy.length||a.actions.SceneTransition.length||a.actions.Reset.length||a.actions.SetVariable.length||a.actions.DynamicVariablePlay.length||a.actions.ClearLocalStorage.length||a.actions.UserAPI.length)&&(this.eventsPerObject.has(i)?this.eventsPerObject.get(i)?.push(a):this.eventsPerObject.set(i,[a])),a.actions.Audio.length&&(this.eventsAfterPerObject.has(i)?this.eventsAfterPerObject.get(i)?.push(a):this.eventsAfterPerObject.set(i,[a])),a.actions.Video.length&&(this.hasVideoAction=!0,this.eventsAfterPerObject.has(i)?this.eventsAfterPerObject.get(i)?.push(a):this.eventsAfterPerObject.set(i,[a])),a.actions.Particles.length&&(this.eventsAfterPerObject.has(i)?this.eventsAfterPerObject.get(i)?.push(a):this.eventsAfterPerObject.set(i,[a]))}};if(t.traverseEntity(e=>{(e instanceof Pk||e instanceof PD)&&e.frame?.traverse(e=>{i(e)}),i(e)}),[...this.eventsAfterPerObject.values()].some(e=>e.length)){if(0===this.eventManager.activateCount){let{domElement:e,isExport:t}=this.eventContext,i=t?document:e;i.addEventListener("pointerdown",this.onMouseDown,{once:!0}),i.addEventListener("mousedown",this.onMouseDown,{once:!0}),document.addEventListener("keydown",this.onKeyDown,{once:!0}),i.addEventListener("pointerdown",this.onAny),i.addEventListener("mousedown",this.onAny),document.addEventListener("keydown",this.onAny),[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.addEventListener("userEvent",this.onUserEvent)})}else this.onSceneTransitionAudioVideoPlay();this.onPlay()}[...this.eventsPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>e.dispatch()),e.addEventListener("userEvent",this.onUserEvent)})}disconnect(){if([...this.eventsAfterPerObject.values()].some(e=>e.length)){let{domElement:e,isExport:t}=this.eventContext,i=t?document:e;i.removeEventListener("pointerdown",this.onMouseDown),i.removeEventListener("mousedown",this.onMouseDown),document.removeEventListener("keydown",this.onKeyDown),i.removeEventListener("pointerdown",this.onAny),i.removeEventListener("mousedown",this.onAny),document.removeEventListener("keydown",this.onAny),[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.removeEventListener("userEvent",this.onUserEvent),t.forEach(e=>e.disconnect())})}[...this.eventsPerObject.entries()].forEach(([e,t])=>{e.removeEventListener("userEvent",this.onUserEvent),t.forEach(e=>e.disconnect())}),this.eventsPerObject.clear(),this.eventsAfterPerObject.clear()}},LB=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.initialDisabled=!1,this.actions=OX(t,t.actions,r,s,a,i),this.target=t.target}disconnect(){OY(this.actions)}dispatch(e){this.initialDisabled||(this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.object.dispatchEvent({type:"beginEvent",eventName:"Collision"}),this.actions.Transition.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}
8404),this.actions.Animation.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Link.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(t=>{t.dispatch(e??!1)}),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.Audio.forEach(e=>{e.dispatchBasic()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()}),this.actions.Video.forEach(e=>{e.dispatchBasic()}),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()))}},Lz=class extends RR{constructor(e,t,i,r,s){super(e),this.sharedVariables=t,this.eventManager=i,this.needsMouse=r,this.needsRaycast=s,this.dynamicVars=[],this.variablesToWatch=[],this.prevMouseProperty=null,this.prevRaycastProperty=null,this.pauseTime=0,this.isOutOfFocus=!1,this.events=[],this.onFrame=e=>{let t=this.eventContext.sharedAssets;if(this.rafId=window.requestAnimationFrame(this.onFrame),this.isOutOfFocus)return;let i=new Date,r=[],s=[];for(let e=0;e<this.propertiesToWatch.length;e++){let{objectId:t,property:i,prevValue:r}=this.propertiesToWatch[e],a=this.eventContext.scene.find(t),o=m4.propertyPaths[i];if("width"===o[0]||"height"===o[0]||"depth"===o[0])a=a.geometry.userData.parameters[o[0]];else for(let e=0;e<o.length;e++)a=a[o[e]];null===r?this.propertiesToWatch[e].prevValue=a instanceof iv?a.clone():a:(a instanceof iv?a.equals(r):r===a)||(s.push({objId:t,property:i}),a instanceof iv?this.propertiesToWatch[e].prevValue.copy(a):this.propertiesToWatch[e].prevValue=a)}for(let e=0;e<this.variablesToWatch.length;e++){let{id:i,prevValue:s}=this.variablesToWatch[e],a=t.getVariable(i);a!==s&&(r.push(i),this.variablesToWatch[e].prevValue=a)}for(let s=0;s<this.dynamicVars.length;s++){let{id:a,expectedTime:o,last:l,data:h,timerSeconds:c,startValue:d}=this.dynamicVars[s],u=1e3;if(("timer"===h.dynamicVariableType||"stopwatch"===h.dynamicVariableType)&&"number3decimal"===h.format?u=1:"counter"===h.dynamicVariableType?u=h.updateInterval:"random"===h.dynamicVariableType&&(u=h.isStatic?1/0:h.updateInterval),-1===o){this.dynamicVars[s].last=e,this.dynamicVars[s].expectedTime=e+u;continue}if(!(("Stopped"===t.getDynamicVariablePlayState(a)||"Restarted"===t.getDynamicVariablePlayState(a))&&(this.dynamicVars[s].last=e,this.dynamicVars[s].expectedTime=e+u,"counter"===h.dynamicVariableType&&t.getVariable(a)!==d&&(t.updateVariable(a,d),this.eventManager.requestRender()),("timer"===h.dynamicVariableType||"stopwatch"===h.dynamicVariableType)&&this.dynamicVars[s].timerSeconds!==d&&(this.dynamicVars[s].timerSeconds=d,t.updateVariable(a,yw.getFormattedTimerTime(d,h)),this.eventManager.requestRender()),"Restarted"===t.getDynamicVariablePlayState(a)&&t.setDynamicVariablePlayState(a,"Playing"),"Stopped"===t.getDynamicVariablePlayState(a)))){if("Paused"===t.getDynamicVariablePlayState(a)){void 0===this.dynamicVars[s].deltaToExpectedTime&&(this.dynamicVars[s].deltaToExpectedTime=Math.max(this.dynamicVars[s].expectedTime-e,0)),this.dynamicVars[s].last=e-(u-this.dynamicVars[s].deltaToExpectedTime),this.dynamicVars[s].expectedTime=e+this.dynamicVars[s].deltaToExpectedTime;continue}if(this.dynamicVars[s].deltaToExpectedTime=void 0,e>=o){if(this.dynamicVars[s].last=e,this.dynamicVars[s].expectedTime+=u,"random"===h.dynamicVariableType){let e=h.min+Math.random()*(h.max-h.min),i=h.decimals;e=Math.round(e*Math.pow(10,i))/Math.pow(10,i),t.updateVariable(a,e),r.push(a),this.eventManager.requestRender()}else if("counter"===h.dynamicVariableType){let e=t.getVariable(a),i=t.getDynamicVariableToggleIsForward(a)??!0,s=t.getVariable(a)+h.increment*(i?1:-1);h.hasEnd&&((s=h.increment>0?tY.clamp(s,d,h.endValue):tY.clamp(s,h.endValue,d))===d&&t.setDynamicVariableToggleIsForward(a,void 0),h.repeat?s===h.endValue&&(s=d):(s===d||s===h.endValue)&&t.setDynamicVariablePlayState(a,"Paused")),s!==e&&(r.push(a),t.updateVariable(a,s),this.eventManager.requestRender())}else if("time"===h.dynamicVariableType){let e=t.getVariable(a),s=Ap(i,h);if("object"==typeof e&&"textValue"in e&&"object"==typeof s&&"textValue"in s){if(Array.isArray(e.textValue)&&Array.isArray(s.textValue)){if(e.textValue.every((e,t)=>e===s.textValue[t]))continue}else if(e.textValue===s.textValue)continue}else if(e===s)continue;t.updateVariable(a,s),r.push(a),this.eventManager.requestRender()}else{let i=yg.isTextValue(h.endValue)?LN(h.endValue.textValue):h.endValue,o=t.getDynamicVariableToggleIsForward(a)??!0,u=c+(e-l)/1e3*("timer"===h.dynamicVariableType?-1:1)*(o?1:-1);u=Math.max(u,0),h.hasEnd&&((u="stopwatch"===h.dynamicVariableType?tY.clamp(u,d,i):tY.clamp(u,i,d))===d&&t.setDynamicVariableToggleIsForward(a,void 0),h.repeat?Math.abs(u-i)<("number3decimal"===h.format?1e-4:.1)&&(u=d):(Math.abs(u-d)<("number3decimal"===h.format?1e-4:.1)||Math.abs(u-i)<("number3decimal"===h.format?1e-4:.1))&&t.setDynamicVariablePlayState(a,"Paused")),u!==c&&(r.push(a),this.dynamicVars[s].timerSeconds=u,t.updateVariable(a,yw.getFormattedTimerTime(u,h)),this.eventManager.requestRender())}}}}let a=!1;t.mouseProperty!==this.prevMouseProperty&&(this.prevMouseProperty=t.mouseProperty,a=!0);let o=!1;t.raycastProperty!==this.prevRaycastProperty&&(this.prevRaycastProperty=t.raycastProperty,o=!0),this.events.forEac
vendor: 1,054 bytes, line 8404
8404h(e=>{(r.includes(e.data.variableId)||s.find(t=>t.objId===e.data.objectId&&t.property===e.data.property)||"mouseProperty"===e.data.variableId&&a||"raycastProperty"===e.data.variableId&&o)&&(e.dispatch(),this.eventManager.requestRender())})},this.onBlur=()=>{this.pause()},this.onFocus=()=>{this.resume()}}pause(){this.isOutOfFocus||(this.isOutOfFocus=!0,this.pauseTime=Date.now())}resume(){if(!this.isOutOfFocus)return;this.isOutOfFocus=!1;let e=Date.now()-this.pauseTime;for(let t=0;t<this.dynamicVars.length;t++)this.dynamicVars[t].last+=e,this.dynamicVars[t].expectedTime+=e}connect(){this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"VariableChange"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new LF(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),this.propertiesToWatch=this.events.filter(e=>"objectProperty"===e.data.variableId&&null!==e.data.objectId).map(e=>({objectId:e.data.objectId,property:e.data.property,prevValue:null}));let e=this.eventContext.sharedAssets;
8404this.sharedVariables.forEach(({id:t,data:i})=>{let r;if(!("dynamicVariableType"in i)){this.events.find(e=>e.data.variableId===t)&&this.variablesToWatch.push({id:t,prevValue:e.getVariable(t)});return}if("timer"===i.dynamicVariableType||"stopwatch"===i.dynamicVariableType){let e;if(yg.isTextValue(i.value)&&Array.isArray(i.value.textValue)){let t=i.value.textValue;e=3===t.length?t[2]+60*t[1]+3600*t[0]:t[1]+60*t[0]}else e=i.value;r=e,this.dynamicVars.push({id:t,last:-1,expectedTime:-1,data:i,timerSeconds:e,startValue:r})}else"time"===i.dynamicVariableType&&e.updateVariable(t,Ap(new Date,i)),"counter"===i.dynamicVariableType&&(r=yg.isTextValue(i.value)?LN(i.value.textValue):i.value),this.dynamicVars.push({id:t,last:-1,expectedTime:-1,data:i,startValue:r})}),this.rafId=window.requestAnimationFrame(this.onFrame),window.addEventListener("blur",this.onBlur),window.addEventListener("focus",this.onFocus)}disconnect(){window.removeEventListener("blur",this.onBlur),window.removeEventListener("focus",this.onFocus),this.rafId&&(window.cancelAnimationFrame(this.rafId),this.rafId=void 0),this.events.forEach(e=>e.dispose())}},LF=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.actions=OX(t,t.actions,r,s,a,i)}dispatch(){let e=this.actions;
vendor: 4,186 bytes, lines 8404-8465
8404e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}dispose(){OY(this.actions)}};function LN(e){return 3===e.length?e[2]+60*e[1]+3600*e[0]:e[1]+60*e[0]}var Lk,LU,LV,Lj=`
8405(async function() {
8406	const [wasmImport, wasmBinary] = await Promise.all([
8407		import('https://unpkg.com/@splinetool/[email protected]/build/' + 'navmesh.js'),
8408		fetch('https://unpkg.com/@splinetool/[email protected]/build/' + 'navmesh.wasm').then((res) => res.arrayBuffer()),
8409	]);
8410	const wasmModule = wasmImport.default;
8411	self.module = await wasmModule({ wasmBinary });
8412	postMessage('ready');
8413})();
8414`,LG=`
8415(async function() {
8416	const [wasmImport, wasmBinary] = await Promise.all([
8417		import(self.location.origin + '/_libraries/navmesh.js'),
8418		fetch(self.location.origin + '/_libraries/navmesh.wasm').then((res) => res.arrayBuffer()),
8419	]);
8420	const wasmModule = wasmImport.default;
8421	self.module = await wasmModule({ wasmBinary });
8422	postMessage('ready');
8423})();
8424`,LH=`
8425
8426onmessage = function(messageEvent) {
8427	const meshData = messageEvent.data;
8428	const positions = meshData[0];
8429	const offset = meshData[1];
8430	const indices = meshData[2];
8431	const indicesLength = meshData[3];
8432	const parameters = meshData[4];
8433
8434	const module = self.module;
8435	const rc = new module.rcConfig();
8436	rc.cs = parameters.cs;
8437	rc.ch = parameters.ch;
8438	rc.borderSize = parameters.borderSize ? parameters.borderSize : 0;
8439	rc.tileSize = parameters.tileSize ? parameters.tileSize : 0;
8440	rc.walkableSlopeAngle = parameters.walkableSlopeAngle;
8441	rc.walkableHeight = parameters.walkableHeight;
8442	rc.walkableClimb = parameters.walkableClimb;
8443	rc.walkableRadius = parameters.walkableRadius;
8444	rc.maxEdgeLen = parameters.maxEdgeLen;
8445	rc.maxSimplificationError = parameters.maxSimplificationError;
8446	rc.minRegionArea = parameters.minRegionArea;
8447	rc.mergeRegionArea = parameters.mergeRegionArea;
8448	rc.maxVertsPerPoly = parameters.maxVertsPerPoly;
8449	rc.detailSampleDist = parameters.detailSampleDist;
8450	rc.detailSampleMaxError = parameters.detailSampleMaxError;
8451
8452	if (!self.navMesh) {
8453		self.navMesh = new module.NavMesh();
8454	}
8455	self.navMesh.build(positions, offset, indices, indicesLength, rc);
8456
8457	const navmeshData = navMesh.getNavmeshData();
8458	const arrView = new Uint8Array(module.HEAPU8.buffer, navmeshData.dataPointer, navmeshData.size);
8459	const ret = new Uint8Array(navmeshData.size);
8460	ret.set(arrView);
8461	navMesh.freeNavmeshData(navmeshData);
8462
8463	postMessage(ret);
8464}
8465`,LW={cs:6,ch:2,walkableSlopeAngle:90,walkableHeight:20,walkableClimb:5,walkableRadius:0,maxEdgeLen:12,maxSimplificationError:1.3,minRegionArea:8,mergeRegionArea:20,maxVertsPerPoly:6,detailSampleDist:6,detailSampleMaxError:1};pc.then(e=>{Lk=e,LU=new e.Vec3,LV=new e.Vec3});var Lq=new iv,LX=class{constructor(e=!1,t=!1){this.usePhysics=e,this.isExport=t,this.onPointerDown=e=>{if(1!==u1.length)return;let{raycaster:t,page:i}=this.eventContext;this.eventContext.updateRaycaster(e);let r=i.raycastWithClones(t);if(0!==r.length){if(this.gameControl){let e=Lq.copy(this.gameControl.colliderWorldPosition);e.y-=this.gameControl.colliderHeight/2,this.gameControl.path=this.computePath(e,r[0].point)}this.eventContext.requestRender()}},this.traverseWithPhysics=(e,t)=>i=>{let r;if(i instanceof M9){if(!i.objectForSample)return!0===i.object.dataPatched.physics.fusedBody&&"dynamic"===i.object.dataPatched.physics.rigidBody||void 0;if(i.objectForSample.dataPatched.physics.fusedBody)return;r=i.object}else if(i instanceof xb)r=i.object;else if(r=i,r.dataPatched.cloner?.disabled===!1&&r.dataPatched.cloner?.hideBase&&r.dataPatched.physics?.fusedBody!==!0)return!0;
8465if(t&&!r.userData.navmesh)return;let s=r.dataPatched;if(!s.visible&&s.physics?.enabled!==!0)return!0;i.updateMatrixWorldSVD();let a=Bb(s),o=r.userData.hasDestroy,l=r.userData.hasDrag,h=!1,c=!1;for(let e of s.events)!0!==e.data.disabled&&("GameControl"===e.data.type?h=!0:"Follow"===e.data.type&&(c=!0));if(h||a||c||o||l)return!0;if(this.usePhysics&&s.physics?.rigidBody==="dynamic"){if(this.usePhysics&&s.physics?.fusedBody)return!0}else if("geometry"in i&&i.geometry&&e.push(Rb(i.geometry,i.matrixWorld)),this.usePhysics&&s.physics?.fusedBody)return i.traverseObject((t,i)=>{let r;if(0===i)return;if(t instanceof M9){if(!t.objectForSample)return!0===t.object.dataPatched.physics.fusedBody&&"dynamic"===t.object.dataPatched.physics.rigidBody||void 0;if(t.objectForSample.dataPatched.physics.fusedBody)return;r=t.object}else if(t instanceof xb)r=t.object;else if(r=t,t.dataPatched.cloner?.hideBase)return!0;let s=r.dataPatched;if(!s.visible&&s.physics?.enabled!==!0)return!0;"geometry"in t&&t.geometry&&e.push(Rb(t.geometry,t.matrixWorld))}),!0},this.traverseNoPhysics=(e,t)=>i=>{let r;if(i instanceof M9)return;let s=(r=i instanceof xb?i.object:i).dataPatched;if("visibility"===s.physics.enabled?!s.visible:!s.physics.enabled)return!0;if(t&&!r.userData.navmesh)return;let a=i.geometry,o=!0===r.userData.hasDestroy,l=!0===r.userData.hasDrag;if(Bb(s)||o||l||r.dataPatched.events.some(e=>!0!==e.data.disabled&&"GameControl"===e.data.type))return!0;a&&e.push(Rb(a,i.matrixWorld))},this.navmeshWasm=Lk,this.navMesh=new this.navmeshWasm.NavMesh,this._workerURL=URL.createObjectURL(new Blob([(t?Lj:LG)+LH])),this._worker=new Worker(this._workerURL)}init(e,t,i){this.gameControl=t,this.eventContext=i,this.setDefaultQueryExtent(new iv().setScalar(e.ch*e.walkableRadius*1.2)),this._worker.onmessage=()=>{this.createNavMesh(i.page,e,e=>{this.buildFromNavmeshData(e.data)})},this.eventContext.renderer.domElement.addEventListener("pointerdown",this.onPointerDown)}createNavMesh(e,t,i){t.objects.forEach(t=>{let i=e.scene.find(t);i.traverseEntity(e=>{e.userData.navmesh=!0}),i.cloner?.traverseObject(e=>{e.userData.navmesh=!0})});let r=[],s=(this.usePhysics?this.traverseWithPhysics:this.traverseNoPhysics)(r,"custom"===t.zones);if(e.traverseChildren(s),t.objects.forEach(t=>{let i=e.scene.find(t);i.traverseEntity(e=>{e.userData.navmesh=void 0}),i.cloner?.traverseObject(e=>{e.userData.navmesh=void 0})}),0===r.length)return!1;let a=gQ(r),{positions:o,triIndices:l}=Sn(a.getAttribute("position"),a.getIndex());return this._worker.postMessage([o,o.length/3,l,l.length,{...LW,...t}]),this._worker.onmessage=i,!0}createDebugNavGeometry(){let e,t,i=this.navMesh.getDebugNavMesh(),r=i.getTriangleCount(),s=new Uint32Array(3*r),a=new Float32Array(9*r);for(e=0;e<3*r;e++)s[e]=e;for(e=0;e<r;e++)for(t=0;t<3;t++){let r=i.getTriangle(e).getPoint(t);a[9*e+3*t+0]=r.x,a[9*e+3*t+1]=r.y,a[9*e+3*t+2]=r.z}let o=new rz;return o.setIndex(new rM(s,1)),o.setAttribute("position",new rM(a,3)),o}getClosestPoint(e){return LU.x=e.x,LU.y=e.y,LU.z=e.z,this.navMesh.getClosestPoint(LU)}getClosestPointToRef(e,t){LU.x=e.x,LU.y=e.y,LU.z=e.z;let i=this.navMesh.getClosestPoint(LU);t.set(i.x,i.y,i.z)}getRandomPointAround(e,t){return LU.x=e.x,LU.y=e.y,LU.z=e.z,this.navMesh.getRandomPointAround(LU,t)}getRandomPointAroundToRef(e,t,i){LU.x=e.x,LU.y=e.y,LU.z=e.z;let r=this.navMesh.getRandomPointAround(LU,t);i.set(r.x,r.y,r.z)}moveAlong(e,t){return LU.x=e.x,LU.y=e.y,LU.z=e.z,LV.x=t.x,LV.y=t.y,LV.z=t.z,this.navMesh.moveAlong(LU,LV)}moveAlongToRef(e,t,i){return LU.x=e.x,LU.y=e.y,LU.z=e.z,LV.x=t.x,LV.y=t.y,LV.z=t.z,this.navMesh.moveAlong(LU,LV)}computePath(e,t){let i=this.getClosestPoint(t);if(LV.x=i.x,LV.y=i.y,LV.z=i.z,Math.sqrt(Math.pow(t.x-i.x,2)+Math.pow(t.y-i.y,2)+Math.pow(t.z-i.z,2))>this.getDefaultQueryExtent().y)return[];this.getClosestPoint(e);let r=this.navMesh.computePath(LU,LV),s=r.getPointCount(),a=[];for(let e=0;e<s;e++){let t=r.getPoint(e);a.push(new iv(t.x,t.y,t.z))}return a}createCrowd(e,t){return new LY(this,e,t)}setDefaultQueryExtent(e){LU.x=e.x,LU.y=e.y,LU.z=e.z,this.navMesh.setDefaultQueryExtent(LU)}getDefaultQueryExtent(){return this.navMesh.getDefaultQueryExtent()}buildFromNavmeshData(e){let t=e.length*e.BYTES_PER_ELEMENT,i=this.navmeshWasm._malloc(t),r=new Uint8Array(this.navmeshWasm.HEAPU8.buffer,i,t);r.set(e);let s=new this.navmeshWasm.NavmeshData;s.dataPointer=r.byteOffset,s.size=e.length,this.navMesh.buildFromNavmeshData(s),this.navmeshWasm._free(r.byteOffset)}getNavmeshData(){let e=this.navMesh.getNavmeshData(),t=new Uint8Array(this.navmeshWasm.HEAPU8.buffer,e.dataPointer,e.size),i=new Uint8Array(e.size);return i.set(t),this.navMesh.freeNavmeshData(e),i}getDefaultQueryExtentToRef(e){let t=this.navMesh.getDefaultQueryExtent();e.set(t.x,t.y,t.z)}dispose(){this.navMesh.destroy(),this._worker.terminate(),URL.revokeObjectURL(this._workerURL),this.eventContext?.renderer.domElement.removeEventListener("pointerdown",this.onPointerDown)}addCylinderObstacle(e,t,i){return LU.x=e.x,LU.y=e.y,LU.z=e.z,this.navMesh.addCylinderObstacle(LU,t,i)}addBoxObstacle(e,t,i){return LU.x=e.x,LU.y=e.y,LU.z=e.z,LV.x=t.x,LV.y=t.y,LV.z=t.z,this.navMesh.addB
8465oxObstacle(LU,LV,i)}removeObstacle(e){this.navMesh.removeObstacle(e)}isSupported(){return void 0!==this.navmeshWasm}},LY=class{constructor(e,t,i){this.navmeshWasmWrapper=e,this.transforms=[],this.agents=[],this.reachRadii=[],this._agentDestinationArmed=[],this._agentDestination=[],this.crowd=new this.navmeshWasmWrapper.navmeshWasm.Crowd(t,i,this.navmeshWasmWrapper.navMesh.getNavMesh())}onReachTarget(e,t){}addAgent(e,t,i){let r=new this.navmeshWasmWrapper.navmeshWasm.dtCrowdAgentParams;r.radius=t.radius,r.height=t.height,r.maxAcceleration=t.maxAcceleration,r.maxSpeed=t.maxSpeed,r.collisionQueryRange=t.collisionQueryRange,r.pathOptimizationRange=t.pathOptimizationRange,r.separationWeight=t.separationWeight,r.updateFlags=7,r.obstacleAvoidanceType=0,r.queryFilterType=0,r.userData=0;let s=this.crowd.addAgent(new this.navmeshWasmWrapper.navmeshWasm.Vec3(e.x,e.y,e.z),r);return this.transforms.push(i),this.agents.push(s),this.reachRadii.push(t.reachRadius?t.reachRadius:t.radius),this._agentDestinationArmed.push(!1),this._agentDestination.push(new iv(0,0,0)),s}getAgentPosition(e){return this.crowd.getAgentPosition(e)}getAgentPositionToRef(e,t){let i=this.crowd.getAgentPosition(e);t.set(i.x,i.y,i.z)}getAgentVelocity(e){return this.crowd.getAgentVelocity(e)}getAgentVelocityToRef(e,t){let i=this.crowd.getAgentVelocity(e);t.set(i.x,i.y,i.z)}getAgentNextTargetPath(e){return this.crowd.getAgentNextTargetPath(e)}getAgentNextTargetPathToRef(e,t){let i=this.crowd.getAgentNextTargetPath(e);t.set(i.x,i.y,i.z)}getAgentState(e){return this.crowd.getAgentState(e)}overOffmeshConnection(e){return this.crowd.overOffmeshConnection(e)}agentGoto(e,t){this.crowd.agentGoto(e,new this.navmeshWasmWrapper.navmeshWasm.Vec3(t.x,t.y,t.z));let i=this.agents.indexOf(e);i>-1&&(this._agentDestinationArmed[i]=!0,this._agentDestination[i].set(t.x,t.y,t.z))}agentTeleport(e,t){this.crowd.agentTeleport(e,new this.navmeshWasmWrapper.navmeshWasm.Vec3(t.x,t.y,t.z))}updateAgentParameters(e,t){let i=this.crowd.getAgentParameters(e);void 0!==t.radius&&(i.radius=t.radius),void 0!==t.height&&(i.height=t.height),void 0!==t.maxAcceleration&&(i.maxAcceleration=t.maxAcceleration),void 0!==t.maxSpeed&&(i.maxSpeed=t.maxSpeed),void 0!==t.collisionQueryRange&&(i.collisionQueryRange=t.collisionQueryRange),void 0!==t.pathOptimizationRange&&(i.pathOptimizationRange=t.pathOptimizationRange),void 0!==t.separationWeight&&(i.separationWeight=t.separationWeight),this.crowd.setAgentParameters(e,i)}removeAgent(e){this.crowd.removeAgent(e);let t=this.agents.indexOf(e);t>-1&&(this.agents.splice(t,1),this.transforms.splice(t,1),this.reachRadii.splice(t,1),this._agentDestinationArmed.splice(t,1),this._agentDestination.splice(t,1))}getAgents(){return this.agents}update(e){if(this.navmeshWasmWrapper.navMesh.update(),!(e<=.001)){if(1/60<=.001)this.crowd.update(e);else{let t=Math.floor(e/(1/60));t>10&&(t=10),t<1&&(t=1);let i=e/t;for(let e=0;e<t;e++)this.crowd.update(i)}for(let e=0;e<this.agents.length;e++){let t=this.agents[e],i=this.getAgentPosition(t);if(this.transforms[e].copy(i),this._agentDestinationArmed[e]){let r=i.x-this._agentDestination[e].x,s=i.z-this._agentDestination[e].z,a=this.reachRadii[e],o=this._agentDestination[e].y-this.reachRadii[e],l=this._agentDestination[e].y+this.reachRadii[e],h=r*r+s*s;i.y>o&&i.y<l&&h<a*a&&(this.onReachTarget(t,this._agentDestination[e]),this._agentDestinationArmed[e]=!1)}}}}setDefaultQueryExtent(e){let t=new this.navmeshWasmWrapper.navmeshWasm.Vec3(e.x,e.y,e.z);this.crowd.setDefaultQueryExtent(t)}getDefaultQueryExtent(){return this.crowd.getDefaultQueryExtent()}getDefaultQueryExtentToRef(e){let t=this.crowd.getDefaultQueryExtent();e.set(t.x,t.y,t.z)}getCorners(e){let t,i=this.crowd.getCorners(e),r=i.getPointCount(),s=[];for(t=0;t<r;t++){let e=i.getPoint(t);s.push(new iv(e.x,e.y,e.z))}return s}dispose(){this.crowd.destroy()}},LQ={type:"change"},LK={type:"changeZoom"},LZ={type:"changePan"},LJ={type:"start"},L$={type:"end",changed:!0},L0={type:"end",changed:!1},L1=new ig,L2=new tQ,L3=2*Math.PI,L4=new iv,L5=new tQ,L6=new iv,L8=new ig,L9=new iX,L7={type:"requestRender"},Be=class extends tL{constructor(e,t,i={isPlayMode:!1,isExport:!1}){super(),this.object=e,this.domElement=t,this.options=i,this.enabled=!0,this.useKeyEvents=!0,this.enableDamping=!1,this.enableZoom=!0,this.enableRotate=!0,this.enablePan=!0,this.autoRotate=!1,this.rotationLimitsMode=0,this.panLimitsMode=0,this.rotationSoftLimit=2,this.panSoftLimit=2,this.hoverRotatePanMode=0,this.zoomLimitsEnabled=!1,this.mouseButtons=[0,5],this.mouseButtonsPlay=[3,4,5],this.touches=[null,tD.DOLLY_ROTATE,tD.PAN],this.offset=new iv,this.eye=new iv,this.lastPosition=new iv,this.lastQuaternion=new ig,this.current=ne
vendor: 4,348 bytes, line 8465
8465w tQ,this.overShoot=new tQ,this.overRatio=new tQ,this.spherical=new lL,this.sphericalDelta=new lL,this.panOffset=new iv,this.panLeftV=new iv,this.panUpV=new iv,this.panV=new iv,this.rotateStart=new tQ,this.rotateEnd=new tQ,this.rotateDelta=new tQ,this.panStart=new tQ,this.panEnd=new tQ,this.panDelta=new tQ,this.dollyStart=new tQ,this.dollyEnd=new tQ,this.dollyDelta=new tQ,this.rotationRangeFactor=new tQ,this.panRangeFactor=new tQ,this.state=-1,this.zoomChanged=!1,this.isPointerDown=!1,this.isThetaFlipped=!1,this.prevScale=0,this.scale=1,this.gesture=!1,this.timer=-1,this.timerHover=-1,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPhi=0,this.maxPhi=Math.PI,this.minTheta=-1/0,this.maxTheta=1/0,this.minH=0,this.maxH=Math.PI,this.minV=-1/0,this.maxV=1/0,this.autoRotateClockwise=!0,this.isPanOverShoot=!1,this.isRotateOverShoot=!1,this.resetHoverEffectOnPointerLeave=!1,this.hasChange=!1,this.useWindowEvents=!1,this.isTouchZoom=!0,this.autoRotateSpeed=2,this.dampingFactor=.125,this.zoomSpeed=2,this.rotateSpeed=1,this.panSpeed=1,this.hoverRotatePanStrength=.1,this.hoverRotateDamping=this.dampingFactor,this.thetaIsFree=!1,this.phiIsFree=!1,this.needsUpdate=!0,this.onCameraChange=e=>{this.object.removeEventListener("beginState",this.onBeginState),this.object.removeEventListener("completeState",this.onCompleteState),this.object.removeEventListener("cameraChange",this.onCameraChange),this.object=e.camera,this.object.addEventListener("beginState",this.onBeginState),this.object.addEventListener("completeState",this.onCompleteState),this.object.addEventListener("cameraChange",this.onCameraChange)},this.update=()=>{this.object.updateWorldMatrix(!0,!1),this.object.matrixWorld.decompose(L6,L8,L4),this.offset.copy(L6).sub(this.target),this.spherical.setFromVector3(this.offset),this.object.isUpVectorFlipped&&(this.spherical.phi*=-1,this.spherical.theta-=Math.PI),this.autoRotate&&-1===this.state&&this.rotateLeft((!0===this.autoRotateClockwise?1:-1)*this.getAutoRotationAngle()),0!==this.rotationLimitsMode&&this.applyLimits(this.sphericalDelta,this.rotationLimitsMode,this.rotationSoftLimit,this.maxTheta,this.minTheta,this.maxPhi,this.minPhi,this.rotationRangeFactor),2!==this.rotationLimitsMode&&(this.spherical.phi+=this.sphericalDelta.phi),(1!==this.rotationLimitsMode||!0===this.autoRotate)&&(this.spherical.theta+=this.sphericalDelta.theta),this.spherical.radius*=this.scale,this.zoomLimitsEnabled&&this.object.isPerspectiveCamera&&(this.spherical.radius=Math.max(this.minDistance,Math.min(this.maxDistance,this.spherical.radius))),0!==this.panLimitsMode&&(this.target.applyQuaternion(L1.copy(L8).invert()),this.panOffset.applyQuaternion(L1),this.applyLimits(this.panOffset,this.panLimitsMode,this.panSoftLimit,this.maxH,this.minH,this.maxV,this.minV,this.panRangeFactor),this.target.applyQuaternion(L8),this.panOffset.applyQuaternion(L8)),2===this.panLimitsMode&&(this.panOffset.y=0),1===this.panLimitsMode&&(this.panOffset.x=0),-1!==this.state||this.gesture?(this.target.add(this.panOffset),this.panOffset.set(0,0,0)):(this.panOffset.multiplyScalar(1-this.dampingFactor),this.target.add(this.panOffset)),this.offset.setFromSpherical(this.spherical),L6.copy(this.target).add(this.offset),this.object.position.copy(this.target).add(this.offset),this.object.parent&&(L9.copy(this.object.parent.matrixWorld).invert(),this.object.position.applyMatrix4(L9));let e=this.spherical.phi%L3;if(this.eye.copy(this.offset).normalize(),this.object.up.copy(rl.DEFAULT_UP).applyAxisAngle(this.eye,this.object.angleOffsetFromUp),e>0&&e>Math.PI||e<0&&e>-Math.PI?(this.object.up.negate(),this.object.lookAt(this.target),this.object.isUpVectorFlipped=!0):(this.object.lookAt(this.target),this.object.isUpVectorFlipped=!1),-1===this.state||!0===this.enableDamping){let e=1===this.hoverRotatePanMode?this.hoverRotateDamping:this.dampingFactor;this.sphericalDelta.theta*=1-e,this.sphericalDelta.phi*=1-e}else this.sphericalDelta.set(0,0,0);return this.scale=1,this.zoomChanged||this.lastPosition.distanceToSquared(this.object.position)>.01||8*(1-this.lastQuaternion.dot(this.object.quaternion))>1e-8?(this.dispatchEvent(LQ),this.object.dispatchEvent(L7),this.lastPosition.copy(this.object.position),this.lastQuaternion.copy(this.object.quaternion),this.zoomChanged=!1,!0):(this.isPanOverShoot=!1,this.isRotateOverSho
8465ot=!1,this.object.wasMovedBySwitchCameraAction=!1,this.sphericalDelta.set(0,0,0),this.panOffset.set(0,0,0),!1)},this.onPointerDown=e=>{!1!==this.enabled&&("touch"===e.pointerType||"pen"===e.pointerType&&uQ?this.onPointerDownTouch(e):this.onPointerDownMouse(e),-1!==this.state&&(this.isPointerDown=!0,this.dispatchEvent(LJ),this.domElement.addEventListener("pointermove",this.onPointerMove),this.domElement.addEventListener("pointerup",this.onPointerUp),e.stopPropagation(),"touch"===e.pointerType||"pen"===e.pointerType&&uQ||this.domElement.setPointerCapture(e.pointerId)))},this.onPointerLeave=e=>{this.resetHoverEffectOnPointerLeave&&!this.useWindowEvents?(1===this.hoverRotatePanMode?(this.sphericalDelta.theta=-this.spherical.theta,this.sphericalDelta.phi=-this.spherical.phi,L4.subVectors(this.position0,this.target0),this.spherical.setFromVector3(L4),this.sphericalDelta.theta+=this.spherical.theta,this.sphericalDelta.phi+=this.spherical.phi,this.sphericalDelta.theta/=8,this.sphericalDelta.phi/=8):2===this.hoverRotatePanMode&&this.panOffset.subVectors(this.target0,this.target).divideScalar(8),this.update()):this.pointerLeaveEvent=e},this.onPointerEnter=e=>{this.resetHoverEffectOnPointerLeave||void 0===this.pointerLeaveEvent?L5.set(e.clientX-this.domElement.clientWidth/2,e.clientY-this.domElement.clientHeight/2):L5.set(e.clientX-this.pointerLeaveEvent.clientX,e.clientY-this.pointerLeaveEvent.clientY),1===this.hoverRotatePanMode?(this.rotateDelta.copy(L5).multiplyScalar(this.rotateSpeed*this.hoverRotatePanStrength).rotateAround(L2,-this.object.angleOffsetFromUp),this.rotateLeft(2*Math.PI*this.rotateDelta.x/this.domElement.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/this.domElement.clientHeight),this.rotateStart.set(e.clientX,e.clientY)):2===this.hoverRotatePanMode&&(this.panDelta.copy(L5).multiplyScalar(this.panSpeed*this.hoverRotatePanStrength),this.pan(this.panDelta.x,this.panDelta.y),this.panStart.set(e.clientX,e.clientY)),this.update()},this.onPointerMove=e=>{!1!==this.enabled&&(this.checkRaycastLock()||("touch"===e.pointerType||"pen"===e.pointerType&&uQ?this.onPointerMoveTouch(e):this.onPointerMoveMouse(e),e.stopPropagation()))},this.onPointerUp=e=>{this.isPointerDown=!1,0===u1.length&&(this.domElement.removeEventListener("pointermove",this.onPointerMove),this.domElement.removeEventListener("pointerup",this.onPointerUp)),u1.length>1&&e.preventDefault(),this.hasChange?this.dispatchEvent(L$):this.dispatchEvent(L0),this.state=-1,e&&(e.stopPropagation(),"touch"===e.pointerType||"pen"===e.pointerType&&uQ||this.domElement.releasePointerCapture(e.pointerId))},this.onPointerDownMouse=e=>{switch(this.useKeyEvents?this.mouseButtons[e.button]:this.mouseButtonsPlay[e.button]){case 0:if(!0!==e.altKey||e.shiftKey||u0(e)){if(" "===this.key){if(!1===this.enablePan)return;this.handleMouseDownPan(e),this.state=2}}else{if(!1===this.enableRotate)return;this.handleMouseDownRotate(e),this.state=0}break;case 4:if(!1===this.enablePan)return;this.handleMouseDownPan(e),this.state=2;break;case 3:if(u0(e)||e.shiftKey){if(!1===this.enablePan)return;this.handleMouseDownPan(e),this.state=2}else{if(!1===this.enableRotate)return;this.handleMouseDownRotate(e),this.state=0}break;case 5:if(u0(e)||e.shiftKey){if(!1===this.enableRotate)return;this.handleMouseDownRotate(e),this.state=0}else{if(!1===this.enablePan)return;this.handleMouseDownPan(e),this.state=2}break;default:this.state=-1}},this.onPointerMoveMouse=e=>{switch(this.state){case 0:if(!1===this.enableRotate)return;this.handleMouseMoveRotate(e);break;case 1:if(!1===this.enableZoom)return;this.handleMouseMoveDolly(e);break;case 2:if(!1===this.enablePan)return;this.handleMouseMovePan(e)}this.object.wasMovedByUser=!0},this.onPointerDownTouch=e=>{switch(u1.length>1&&e.preventDefault(),this.touches[u1.length-1]){case tD.ROTATE:if(!1===this.enableRotate){this.state=-1;return}this.handleTouchStartRotate(),this.state=3;break;case tD.PAN:if(!1===this.enablePan){this.state=-1;return}this.handleTouchStartPan(),this.state=4;break;case tD.DOLLY_PAN:if(!1===this.enableZoom&&!1===this.enablePan)return;this.handleTouchStartDollyPan(),this.state=5;break;case tD.DOLLY_ROTATE:if(!1===this.enableZoom&&!1===this.enableRotate)return;this.handleTouchStartDollyRotate(),this.state=6;break;default:this.state=-1}},this.onPointerMoveTouch=e=>{switch(u1.length>1&&e.preventDefault(),this.state){case 3:if(!1===this.enableRotate)return;this.handleTouchMoveRotate(e),this.update();break;case 4:if(!1===this.enablePan)return;this.handleTouchMovePan(e),this.update();break;case 5:if(!1===this.enableZoom&&!1===this.enablePan)return;this.handleTouchMoveDollyPan(e),this.update();break;case 6:if(!1===this.enableZoom&&!1===this.enableRotate)return;this.handleTouchMoveDollyRotate(e),this.update();break;default:this.state=-1}this.object.wasMovedByUser=!0},this.dispatchEndDebounced=uI(()=>this.dispatchEvent(L$),33),this.onMouseWheel=e=>{!1===this.enabled||!1===this.enableZoom&&!1===this.enablePan||this.checkRaycastLock()||(this.options.isExport||this.domElement.clientHeight!==document.body.clientHeight||this.domElement.clientWidth!==document.body.clientWidth||e.preventDefault(),this.dispatchEvent(LJ),this.handleMouseWheel(e),this.dispatchEndDebounced(),this.object.wasMovedByUser=!0)},this.onGesture=e=>{e.preventDefault(),!1===this.enabled||this.checkRaycastLock()||uX||("gesturechange"===e.type?!1!==this.enableZoom&&!1!==this.isTouchZoom&&(this.dispatchEvent(LJ),e.scale>this.prevScale?this.dollyIn(this.getZoomScale()):e.scale<this.prevScale&&this.dollyOut(this.getZoomScale()),this.prevScale=e.scale,this.update(),this.object.wasMovedByUser=!0):this.dispatchEvent(L$))},this.onContextMenu=e=>{e.preventDefault()},this.onTouchEnd=e=>{e.preventDefault()},this.onKeyDown=e=>{!1!==this.enabled&&(this.key=e.key," "===e.key&&this.dispatchEvent(LJ))},this.onKeyUp=e=>{!1!==this.enabled&&(this.key=void 0,-1!==this.state&&"Alt"===e.key&&this.onPointerUp(u1[0])," "===e.key&&this.dispatchEvent(L$))},this.onPointerHover=e=>{"mouse"!==e.pointerType||!1===this.enabled||-1!==this.state||2===this.hoverRotatePanMode&&this.isPanOverShoot||1===this.hoverRotatePanMode&&this.isRotateOverSho
vendor: 8,263 bytes, line 8465
8465ot||(this.isPointerDown=!0,2===this.hoverRotatePanMode?this.handleMouseMovePan(e,this.hoverRotatePanStrength):1===this.hoverRotatePanMode&&this.handleMouseMoveRotate(e,this.hoverRotatePanStrength))},this.onBeginState=()=>{this.enabled=!1,this.needsUpdate=!1},this.onCompleteState=e=>{e.isfromEntity&&this.options.isPlayMode||(this.enabled=!0,this.needsUpdate=!0,this.object.updateUp(),this.object.getTarget(this.target))},this.target=this.object.getTarget(),this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.quat0=this.object.quaternion.clone(),this.isUpVectorFlipped0=this.object.isUpVectorFlipped,this.offset.copy(this.object.position).sub(this.target),this.spherical.setFromVector3(this.offset),this.object.isUpVectorFlipped&&(this.spherical.phi*=-1,this.spherical.theta-=Math.PI),this.initialSphericalRadius=this.spherical.radius,this.addEventListenersToCamera()}dispatchEvent(e){"start"===e.type?this.hasChange=!1:this.hasChange=!0,super.dispatchEvent(e)}addEventListenersToCamera(){this.object.addEventListener("beginState",this.onBeginState),this.object.addEventListener("completeState",this.onCompleteState),this.object.addEventListener("cameraChange",this.onCameraChange)}removeEventListenersFromCamera(){this.object.removeEventListener("beginState",this.onBeginState),this.object.removeEventListener("completeState",this.onCompleteState),this.object.removeEventListener("cameraChange",this.onCameraChange)}updateUseWindowEvents(e){if(window.removeEventListener("pointermove",this.onPointerHover),this.domElement.removeEventListener("pointermove",this.onPointerHover),this.useWindowEvents=e,0!==this.hoverRotatePanMode&&(this.useWindowEvents?window.addEventListener("pointermove",this.onPointerHover):this.domElement.addEventListener("pointermove",this.onPointerHover)),this.domElement.removeEventListener("pointerleave",this.onPointerLeave),this.domElement.removeEventListener("pointerenter",this.onPointerEnter),window.removeEventListener("pointerleave",this.onPointerLeave),window.removeEventListener("pointerenter",this.onPointerEnter),0!==this.hoverRotatePanMode&&!this.useWindowEvents){let e=this.useWindowEvents?window:this.domElement;e.addEventListener("pointerleave",this.onPointerLeave),e.addEventListener("pointerenter",this.onPointerEnter)}}fromJSON(e,t){this.setEnableDampingSpeed(e.enableDamping),this.enablePan=e.enablePan,this.enableZoom=e.enableZoom,this.enableRotate=e.enableRotate,this.rotationLimitsMode=e.rotationLimitsMode,this.thetaIsFree=e.rotationHorizontalOffset.min===e.rotationHorizontalOffset.max&&e.rotationHorizontalOffset.min===Math.PI,this.phiIsFree=e.rotationVerticalOffset.min===e.rotationVerticalOffset.max&&e.rotationVerticalOffset.min===Math.PI,this.panLimitsMode=e.panLimitsMode,this.panSoftLimit=e.panSoftLimit,this.rotationSoftLimit=e.rotationSoftLimit,this.hoverRotatePanMode=e.hoverRotatePanMode,this.hoverRotateDamping=e.hoverRotateDamping??this.dampingFactor,this.useWindowEvents="window"===t,0!==this.hoverRotatePanMode&&(this.useWindowEvents?window.addEventListener("pointermove",this.onPointerHover):this.domElement.addEventListener("pointermove",this.onPointerHover));let i=e.hoverRotatePanStrength/100;this.hoverRotatePanStrength=i**2,this.zoomLimitsEnabled=e.zoomLimitsEnabled,this.minZoom=e.zoomLimits.min,this.maxZoom=Math.max(e.zoomLimits.min,e.zoomLimits.max),this.minDistance=1e3/e.zoomLimits.max,this.maxDistance=Math.max(this.minDistance,1e3/e.zoomLimits.min),this.autoRotate=e.autoRotate,this.autoRotateSpeed=e.autoRotateSpeed,this.autoRotateClockwise=e.autoRotateClockwise;let r=this.object.getTarget().applyQuaternion(L1.copy(this.object.quaternion).invert());this.minV=-e.panVerticalOffset.min+r.y,this.maxV=e.panVerticalOffset.max+r.y,this.minH=-e.panHorizontalOffset.min+r.x,this.maxH=e.panHorizontalOffset.max+r.x,this.panRangeFactor.set(this.maxH-this.minH,this.maxV-this.minV).divideScalar(2),this.rotationRangeFactor.setScalar(Math.PI).divideScalar(4),this.minPhi=Bt(this.spherical.phi-e.rotationVerticalOffset.min),this.maxPhi=Bt(this.spherical.phi+e.rotationVerticalOffset.max),this.minTheta=Bt(Bt(this.spherical.theta)-e.rotationHorizontalOffset.min),this.maxTheta=Bt(Bt(this.spherical.theta)+e.rotationHorizontalOffset.max),this.isThetaFlipped=this.minTheta>this.maxTheta,1===e.orbitTouches&&(this.touches[0]=tD.ROTATE),1===e.panTouches&&(this.touches[0]=tD.PAN),2===e.orbitTouches&&(this.touches[1]=tD.DOLLY_ROTATE),2===e.panTouches&&(this.touches[1]=tD.DOLLY_PAN),3===e.orbitTouches&&(this.touches[2]=tD.ROTATE),3===e.panTouches&&(this.touches[2]=tD.PAN),this.isTouchZoom=e.isTouchZoom,this.resetHoverEffectOnPointerLeave=e.resetHoverEffectOnPointerLeave??!1}connect(){if(this.domElement.addEventListener("contextmenu",this.onContextMenu),this.domElement.addEventListener("pointerdown",this.onPointerDown),this.domElement.addEventListener("wheel",this.onMouseWheel),window.addEventListener("keydown",this.onKeyDown,!1),window.addEventListener("keyup",this.onKeyUp,!1),this.domElement.addEventListener("gesturestart",this.onGesture),this.domElement.addEventListener("gesturechange",this.onGesture),this.domElement.addEventListener("gestureend",this.onGesture),this.domElement.addEventListener("touchend",this.onTouchEnd),0!==this.hoverRotatePanMode&&!this.useWindowEvents){let e=this.useWindowEvents?window:this.domElement;e.addEventListener("pointerleave",this.onPointerLeave),e.addEventListener("pointerenter",this.onPointerEnter)}this.pointerLeaveEvent=void 0}dispose(){this.removeEventListenersFromCamera(),this.domElement.removeEventListener("contextmenu",this.onContextMenu),this.domElement.removeEventListener("pointerdown",this.onPointerDown),this.domElement.removeEventListener("wheel",this.onMouseWheel),window.removeEventListener("keydown",this.onKeyDown,!1),window.removeEventListener("keyup",this.onKeyUp,!1),this.domElement.removeEventListener("pointermove",this.onPointerHover),window.removeEventListener("pointermove",this.onPointerHover),this.domElement.removeEventListener("gesturestart",this.onGesture),this.domElement.removeEventListener("gesturechange",this.onGesture),this.domElement.removeEventListener("gestureend",this.onGesture),this.domElement.removeEventListener("touchend",this.onTouchEnd),this.domElement.removeEventListener("pointerleave",this.onPointerLeave),this.domElement.removeEventListener("pointerenter",this.onPointerEnter),window.removeEventListener("pointerleave",this.onPointerLeave),window.removeEventListener("pointerenter",this.onPointerEnter),this.domElement.removeEventListener("pointermove",this.onPointerMove),this.domElement.removeEventListener("pointerup",this.onPointerUp)}applyLimits(e,t,i,r,s,a,o,l){let h,c,d;this.overShoot.set(0,0),e instanceof iv?(h=e.x,c=e.y,this.current.set(this.target.x,this.target.y),d=!0):(h=e.theta,c=e.phi,this.current.set(Bt(this.spherical.theta),Bt(this.spherical.phi)),d=!1),0===i&&(this.current.x+=h,this.current.y+=c),(3===t||2===t)&&(!d&&this.isThetaFlipped?this.current.x>r&&this.current.x<0?this.overShoot.x=r-this.current.x:this.current.x<s&&this.current.x>0&&(this.overShoot.x=s-this.current.x):this.current.x>r?this.overShoot.x=r-this.current.x:this.current.x<s&&(this.overShoot.x=s-this.current.x)),(3===t||1===t)&&(this.current.y>a?this.overShoot.y=a-this.current.y:this.current.y<o&&(this.overShoot.y=o-this.current.y)),d||(this.overShoot.x=Bt(this.overShoot.x),this.overShoot.y=Bt(this.overShoot.y)),0!==i?(this.overRatio.copy(this.overShoot).divide(l),this.overRatio.x=Math.min(Math.abs(this.overRatio.x),1),this.overRatio.y=Math.min(Math.abs(this.overRatio.y),1),1===i&&(this.overRatio.x=Bi(Math.abs(this.overRatio.x)),this.overRatio.y=Bi(Math.abs(this.overRatio.y))),this.isPointerDown||1===i?2===i&&(this.overRatio.x>.9&&!this.thetaIsFree||this.overRatio.y>.9&&!this.phiIsFree)?this.isPointerDown=!1:(h*this.overShoot.x<0&&!this.thetaIsFree&&(h*=1-this.overRatio.x),c*this.overShoot.y<0&&!this.phiIsFree&&(c*=1-this.overRatio.y)):2===i&&(!d&&(this.overRatio.x>.002&&!this.thetaIsFree||this.overRatio.y>.002&&!this.phiIsFree)||d&&(Math.abs(this.overShoot.x)>2||Math.abs(this.overShoot.y)>2)?(this.thetaIsFree||(h=.05*this.overShoot.x),this.phiIsFree||(c=.05*this.overShoot.y),d?this.isPanOverShoot=!0:this.isRotateOverSho
8465ot=!0):d?this.isPanOverShoot=!1:this.isRotateOverShoot=!1)):(h+=this.overShoot.x,c+=this.overShoot.y),e instanceof iv?(e.x=h,e.y=c):(this.thetaIsFree||(e.theta=h),this.phiIsFree||(e.phi=c))}setEnableDampingSpeed(e){this.enableDamping=e,this.rotateSpeed=!0===e?.2:1}stopDamping(){this.sphericalDelta.theta=0,this.sphericalDelta.phi=0}getAutoRotationAngle(){return 2*Math.PI/60/60*this.autoRotateSpeed}getZoomScale(){return Math.pow(.95,this.zoomSpeed)}rotateLeft(e){this.sphericalDelta.theta-=e}rotateUp(e){this.sphericalDelta.phi-=e}panLeft(e,t){this.panLeftV.setFromMatrixColumn(t,0),this.panLeftV.multiplyScalar(-e),this.panOffset.add(this.panLeftV)}panUp(e,t){this.panUpV.setFromMatrixColumn(t,1),this.panUpV.multiplyScalar(e),this.panOffset.add(this.panUpV)}pan(e,t){let i=this.domElement;if(i&&this.object.isPerspectiveCamera){let r=this.object.position;this.panV.copy(r).sub(this.target);let s=this.panV.length();s*=Math.tan(this.object.fov/2*Math.PI/180),this.panLeft(2*e*s/i.clientHeight,this.object.matrixWorld),this.panUp(2*t*s/i.clientHeight,this.object.matrixWorld)}else i&&this.object.isOrthographicCamera&&(this.panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrixWorld),this.panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrixWorld));this.dispatchEvent(LZ)}dollyOut(e){this.object.isPerspectiveCamera?this.scale/=e:this.object.isOrthographicCamera&&(this.object.zoom*=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0),this.dispatchEvent(LK)}dollyIn(e){this.object.isPerspectiveCamera?this.scale*=e:this.object.isOrthographicCamera&&(this.object.zoom/=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0),this.dispatchEvent(LK)}zoomOut(e=this.getZoomScale()){this.dispatchEvent(LJ),this.dollyOut(e),this.dispatchEvent(L$)}zoomIn(e=this.getZoomScale()){this.dispatchEvent(LJ),this.dollyIn(e),this.dispatchEvent(L$)}setZoom(e){if(this.dispatchEvent(LJ),this.object.isPerspectiveCamera){let t=this.initialSphericalRadius/e/this.spherical.radius;this.scale=t}else this.object.isOrthographicCamera&&(this.object.zoom=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0);this.dispatchEvent(L$)}handleMouseDownRotate(e){this.rotateStart.set(e.clientX,e.clientY)}handleMouseDownDolly(e){this.dollyStart.set(e.clientX,e.clientY)}handleMouseDownPan(e){this.panStart.set(e.clientX,e.clientY)}handleMouseMoveRotate(e,t=1){void 0!==e.movementX?this.rotateDelta.set(e.movementX,e.movementY):(this.rotateEnd.set(e.clientX,e.clientY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart),this.rotateStart.copy(this.rotateEnd)),this.rotateDelta.multiplyScalar(this.rotateSpeed*t).rotateAround(L2,-this.object.angleOffsetFromUp);let i=this.domElement,r=this.useWindowEvents?window.innerHeight:i.clientHeight,s=2*Math.PI*this.rotateDelta.x/r,a=2*Math.PI*this.rotateDelta.y/r;this.rotateLeft(s),this.rotateUp(a),this.update()}handleMouseMoveDolly(e){this.dollyEnd.set(e.clientX,e.clientY),this.dollyDelta.subVectors(this.dollyEnd,this.dollyStart),this.dollyDelta.y>0?this.dollyOut(this.getZoomScale()):this.dollyDelta.y<0&&this.dollyIn(this.getZoomScale()),this.dollyStart.copy(this.dollyEnd),this.update()}handleMouseMovePan(e,t=1){void 0!==e.movementX?this.panDelta.set(e.movementX,e.movementY):(this.panEnd.set(e.clientX,e.clientY),this.panDelta.subVectors(this.panEnd,this.panStart),this.panStart.copy(this.panEnd)),this.panDelta.multiplyScalar(this.panSpeed*t),this.pan(this.panDelta.x,this.panDelta.y),this.update()}handleMouseWheel(e){if(!1===uY&&!1===u0(e)&&!0==(0===e.wheelDeltaY||0===e.deltaY?!(uq&&e.shiftKey&&Math.abs(e.wheelDeltaX)>=120)&&(e.wheelDeltaX?e.wheelDeltaX===-3*e.deltaX||e.wheelDeltaX===-3*window.devicePixelRatio*e.deltaX:0===e.deltaMode):e.wheelDeltaY?e.wheelDeltaY===-3*e.deltaY||e.wheelDeltaY===-3*window.devicePixelRatio*e.deltaY:0===e.deltaMode))!1!==this.enablePan&&(this.gesture?(this.panDelta.set(-e.deltaX,-e.deltaY).multiplyScalar(this.panSpeed),this.panDelta.x=Math.min(Math.abs(this.panDelta.x),100)*(this.panDelta.x<0?-1:1),this.panDelta.y=Math.min(Math.abs(this.panDelta.y),100)*(this.panDelta.y<0?-1:1),e.altKey?this.pan(0,this.panDelta.y):e.shiftKey?this.pan(this.panDelta.x,0):this.pan(this.panDelta.x,this.panDelta.y),this.update()):(this.gesture=!0,this.isPointerDown=!0),window.clearTimeout(this.timer),this.timer=window.setTimeout(()=>{this.gesture=!1,this.isPointerDown=!1},30));else{if(!1===this.enableZoom||this.gesture)return;0===e.deltaY?e.deltaX<0?this.dollyIn(this.getZoomScale()):e.deltaX>0&&this.dollyOut(this.getZoomScale()):e.deltaY<0?this.dollyIn(this.getZoomScale()):e.deltaY>0&&this.dollyOut(this.getZoomScale()),this.update(),this.gesture=!1,this.isPointerDown=!1}}handleTouchStartRotate(){if(2===u1.length){let e=.5*(u1[0].pageX+u1[1].pageX),t=.5*(u1[0].pageY+u1[1].pageY);this.rotateStart.set(e,t)}else this.rotateStart.set(u1[0].pageX,u1[0].pageY)}handleTouchStartPan(){if(2===u1.length){let e=.5*(u1[0].pageX+u1[1].pageX),t=.5*(u1[0].pageY+u1[1].pageY);this.panStart.set(e,t)}else this.panStart.set(u1[0].pageX,u1[0].pageY)}handleTouchStartDolly(){let e=u1[0].pageX-u1[1].pageX,t=u1[0].pageY-u1[1].pageY,
8465i=Math.sqrt(e*e+t*t);this.dollyStart.set(0,i)}handleTouchStartDollyPan(){this.enableZoom&&!0===this.isTouchZoom&&this.handleTouchStartDolly(),this.enablePan&&this.handleTouchStartPan()}handleTouchStartDollyRotate(){this.enableZoom&&!0===this.isTouchZoom&&this.handleTouchStartDolly(),this.enableRotate&&this.handleTouchStartRotate()}handleTouchMoveRotate(e){if(2===u1.length){let t=u9(e),i=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this.rotateEnd.set(i,r)}else{if(e.pointerId!==u1[0].pointerId)return;this.rotateEnd.set(e.pageX,e.pageY)}this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;t&&(this.rotateLeft(2*Math.PI*this.rotateDelta.x/t.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/t.clientHeight)),this.rotateStart.copy(this.rotateEnd)}handleTouchMovePan(e){if(2===u1.length){let t=u9(e),i=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this.panEnd.set(i,r)}else{if(e.pointerId!==u1[0].pointerId)return;this.panEnd.set(e.pageX,e.pageY)}this.panDelta.subVectors(this.panEnd,this.panStart).multiplyScalar(this.panSpeed),this.pan(this.panDelta.x,this.panDelta.y),this.panStart.copy(this.panEnd)}handleTouchMoveDolly(e){let t=u9(e),i=e.pageX-t.x,r=e.pageY-t.y,s=Math.sqrt(i*i+r*r);this.dollyEnd.set(0,s),this.dollyDelta.set(0,Math.pow(this.dollyEnd.y/this.dollyStart.y,this.zoomSpeed)),this.dollyOut(this.dollyDelta.y),this.dollyStart.copy(this.dollyEnd)}handleTouchMoveDollyPan(e){this.enableZoom&&!0===this.isTouchZoom&&this.handleTouchMoveDolly(e),this.enablePan&&this.handleTouchMovePan(e)}handleTouchMoveDollyRotate(e){this.enableZoom&&!0===this.isTouchZoom&&this.handleTouchMoveDolly(e),this.enableRotate&&this.handleTouchMoveRotate(e)}checkRaycastLock(){if(!this.object.data.raycastLock||this.options.isPlayMode)return!1;{let e=this.options?.showCameraLock;return e&&e(),!0}}};function Bt(e){let t=2*Math.PI;for(;e<=-Math.PI;)e+=t;for(;e>Math.PI;)e-=t;return e}function Bi(e){return 1-Math.pow(1-e,4)}var Br=class{constructor(e,t,i,r,s,a){for(let o of(this.id=e,this.data=t,this.object=i,this.page=r,this.currentIntersectedObjects=[],this.actions=OX(t,t.actions,r,s,a,i),this.target=t.target,this.triggeringObjects=[],t.triggeringObjects)){let e=r.scene.find(o);e&&this.triggeringObjects.push(e)}}isValidTriggeringObject(e){return"all"===this.target||this.triggeringObjects.some(t=>t===e||t.isAncestorOf(e.uuid)||e.isAncestorOf(t.uuid))}disconnect(){OY(this.actions)}dispatch(){this.object.destroyedInAction||(this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.object.dispatchEvent({type:"beginEvent",eventName:"Trigger"}),this.actions.Transition.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.SwitchCamera.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.Link.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch(!1)}
8465),this.actions.Audio.forEach(e=>{e.dispatchBasic()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()}),this.actions.Video.forEach(e=>{e.dispatchBasic()}),this.actions.SceneTransition.forEach(e=>{e.dispatch()}),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()))}};pd.then(e=>tl=e);var Bs=new iv,Ba=new ig,Bn=new iv,Bo=new i3(0,0,0,"YXZ"),Bl=new i3(0,0,0,"XYZ"),Bh=new iv,Bc=new iv,Bd=new iv(1,1,1),Bu=new ig,Bp=new iX,Bf=new iX,Bm={type:"updateMatrix"},Bg=new ig,Bv=new iN,By={type:"beginEvent",eventName:"Collision"},Bx={type:"beginEvent",eventName:"Trigger"},Bb=e=>e.states.some(e=>void 0!==e.data.position||void 0!==e.data.rotation||void 0!==e.data.hiddenMatrix||void 0!==e.data.cloner||void 0!==e.data.pathSnapping),Bw=class{constructor(e){this.eventContext=e,this.isEnabled=!1,this.gameControl=null,this.joysticks=[],this.joystickToGameControls=[],this.sharedGameControlGlobals={entitiesWithTransformAnim:[],entityToCollisionEvents:{},colliderToEntity:new Map,triggers:[],gamePads:[],createdObjects:[],nCreatedPerAction:{}},this.sensorToTriggerEvent={},this.eventManager=void 0,this.needsCollisionDetection=!1,this.initializationCounter=-1,this.rigidBodyToMesh=new Map,this.nActiveRigidBodies=0,this.collisionEvents=[],this.isExport=!1,this.processRigidBody=e=>{if(e.bodyType()!==tl.RigidBodyType.Dynamic)return;e.isSleeping()||this.nActiveRigidBodies++;let[t,i,r]=this.rigidBodyToMesh.get(e.handle);if(Bs.copy(e.translation()).multiplyScalar(this.pixelsPerMeter),Ba.copy(e.rotation()),t.matrixWorld.compose(Bs,Ba,i),t.hasNonUniformScale&&t.matrixWorld.multiply(t.shearScale),t.dispatchEvent(Bm),r){let e=t.cloner;if(e&&void 0===e.objectForSample)for(let i of(e.matrixWorld.copy(t.matrixWorld),e.children))i.updateMatrixWorld(!0);for(let e of t.children)e.updateMatrixWorld(!0)}},this.accumulator=0,this.handleCollisionEvents=(e,t,i)=>{let r,s;if(!1!==i){if(this.sensorToTriggerEvent[e]?(r=this.sensorToTriggerEvent[e],s=this.sharedGameControlGlobals.colliderToEntity.get(t)):this.sensorToTriggerEvent[t]&&(r=this.sensorToTriggerEvent[t],s=this.sharedGameControlGlobals.colliderToEntity.get(e)),r&&s&&r.isValidTriggeringObject(s)){r.dispatch();return}for(let i=this.sharedGameControlGlobals.createdObjects.length-1;i>=0;i--){let r=this.sharedGameControlGlobals.createdObjects[i];if(r.userData.hasCollisionDestroy&&(r.rigidBody?.collider(0).handle===e||r.rigidBody?.collider(0).handle===t)){this.sharedGameControlGlobals.createdObjects.splice(i,1),r.removeFromParent(),requestAnimationFrame(()=>this.sharedGameControlGlobals.rapierWorld?.removeRigidBody(r.rigidBody));break}}if(this.gameControl?.object!==void 0&&this.gameControl.object===this.sharedGameControlGlobals.colliderToEntity.get(e)){let e=this.sharedGameControlGlobals.colliderToEntity.get(t),i=this.sharedGameControlGlobals.entityToCollisionEvents[e.uuid];if(void 0===i)return;for(let r of i)"character"===r.data.target&&this.dispatchCollisionEvent(r,e,t)}else if(this.gameControl?.object!==void 0&&this.gameControl.object===this.sharedGameControlGlobals.colliderToEntity.get(t)){let t=this.sharedGameControlGlobals.colliderToEntity.get(e),i=this.sharedGameControlGlobals.entityToCollisionEvents[t.uuid];if(void 0===i)return;for(let r of i)"character"===r.data.target&&this.dispatchCollisionEvent(r,t,e)}else{let i=this.sharedGameControlGlobals.colliderToEntity.get(e),r=this.sharedGameControlGlobals.entityToCollisionEvents[i.uuid];if(void 0!==r)for(let t of r)"scene"===t.data.target&&this.dispatchCollisionEvent(t,i,e);let s=this.sharedGameControlGlobals.colliderToEntity.get(t),a=this.sharedGameControlGlobals.entityToCollisionEvents[s?.uuid];if(void 0!==a)for(let e of a)"scene"===e.data.target&&this.dispatchCollisionEvent(e,s,t)}}},this.isExport=e.isExport,this.sharedAssets=e.sharedAssets,this.renderer=e.renderer,this.requestRender=e.requestRender,this.domElement=this.renderer.domElement,this.pixelsPerMeter=200,this.gravity=this.page.data.globalPhysics.gravity}get page(){return this.eventContext.page}
8465attachVRControllers(e){e.forEach(e=>{e.addEventListener("connected",e=>{"gamepad"in e.data&&"axes"in e.data.gamepad&&this.sharedGameControlGlobals.gamePads.push(e.data.gamepad)})})}markIsDestroyTarget(){this.page.traverseVisibleEntity(e=>{for(let t of e.dataPatched.events){if(!0===t.data.disabled)continue;let e=t.data.actions?.find(e=>"Destroy"===e.data.type)?.data;if(e)for(let t of e.objects){let e=this.page.scene.find(t);e&&(e.userData.hasDestroy=!0)}}})}markIsDragObject(){this.page.traverseVisibleEntity(e=>{for(let t of e.dataPatched.events)if(!(!0===t.data.disabled||"DragDrop"!==t.data.type))for(let e of t.data.objects){let t=this.page.scene.find(e);t&&(t.userData.hasDrag=!0)}})}initBVH(){let e=[];if(this.page.traverseChildren(t=>{let i,r=t instanceof ER,s=t instanceof P9;if(t instanceof M9||r||s)return;let a=(i=t instanceof xb?t.object:t).dataPatched;if(a.physics?.enabled==="visibility"?!a.visible:!a.physics?.enabled)return!0;let o=t.geometry,l=!0===i.userData.hasDestroy,h=!0===i.userData.hasDrag;if(Bb(a)||l||h||i.dataPatched.events.some(e=>!0!==e.data.disabled&&("GameControl"===e.data.type||"Follow"===e.data.type)))return t.updateMatrixWorldSVD(),this.addBoundsTree(t),!0;o&&e.push(Rb(o,t.matrixWorld))}),e.length>0){let t=gQ(e,!1);this.sharedGameControlGlobals.staticMeshBVH=new xe(t)}}addRigidBody(e,t,i){if(Rx(e.matrixWorld))return;let r=[],s="geometry"in e?e.geometry:void 0,a=t.dataPatched;if(s?.getAttribute("position")!==void 0&&r.push(Rb(s,e.shearScale)),a.physics.fusedBody){let t=this.gatherChildrenGeom(e,r);e.traverseObject(t),e.children.forEach(e=>e.updateMatrixWorld(!0));let i=e.cloner;i&&void 0===i.objectForSample&&"dynamic"===a.physics.rigidBody&&(i.traverseObject(t),i.children.forEach(e=>e.updateMatrixWorld(!0)))}if(r.length>0){let o,l=!i.fromCreate&&"dynamic"===a.physics.rigidBody||i.fromCreate&&i.dynamic;l?(o=tl.RigidBodyDesc.dynamic()).setLinearDamping(a.physics.damping).setAngularDamping(a.physics.damping).setAdditionalMass(1e-9).setGravityScale(a.physics.gravityScale).enabledRotations(...a.physics.enabledRotation).enabledTranslations(...a.physics.enabledTranslation):(i.hasTransformAnim||i.hasFollow||i.hasDrag)&&!i.fromCreate?(o=tl.RigidBodyDesc.kinematicPositionBased(),this.sharedGameControlGlobals.entitiesWithTransformAnim.push(e)):o=tl.RigidBodyDesc.fixed();let h=gQ(r);(e.hasNonUniformScale?e.matrixWorldRigid:e.matrixWorld).decompose(Bs,Ba,Bn),e.position0=Bs.clone().divideScalar(this.pixelsPerMeter),e.rotation0=Ba.clone(),Bs.divideScalar(this.pixelsPerMeter),o.setTranslation(Bs.x,Bs.y,Bs.z).setRotation(Ba),s?h?.scale(1/this.pixelsPerMeter,1/this.pixelsPerMeter,1/this.pixelsPerMeter):h?.scale(Bn.x/this.pixelsPerMeter,Bn.y/this.pixelsPerMeter,Bn.z/this.pixelsPerMeter);let c=this.sharedGameControlGlobals.rapierWorld.createRigidBody(o);l&&this.rigidBodyToMesh.set(c.handle,[e,Bn.clone(),a.physics.fusedBody]);let d=!(void 0===a.geometry||"SubdivGeometry"===a.geometry.type||"NonParametricGeometry"===a.geometry.type||"BooleanGeometry"===a.geometry.type||"VectorGeometry"===a.geometry.type||"StarGeometry"===a.geometry.type||"RectangleGeometry"===a.geometry.type||"EllipseGeometry"===a.geometry.type||"TriangleGeometry"===a.geometry.type||"TorusGeometry"===a.geometry.type||"HelixGeometry"===a.geometry.type);try{this.addCollider(c,a.physics,h,t,d)}catch{try{this.addCollider(c,a.physics,h,t,!1)}catch(e){console.error(e)}}e.rigidBody=c}}addBoundsTree(e){let t=[];if(e.geometry?.getAttribute("position")!==void 0&&e.geometry?.getAttribute("position").count>0&&t.push(Rb(e.geometry,e.shearScale)),e.traverseObject(this.gatherChildrenGeom(e,t)),e.children.forEach(e=>e.updateMatrixWorld(!0)),t.length>0){let i=gQ(t,!1);e.bvhGeometry=i,i.getAttribute("position").count>0&&(e.bvhGeometry.boundsTree=new xe(i),this.sharedGameControlGlobals.entitiesWithTransformAnim.push(e))}}addCollider(e,t,i,r,s=!0){let a;if(i?.getAttribute("position").count===0||i?.getIndex()?.count===0)return;i&&(a="trimesh"===t.colliderType?tl.ColliderDesc.trimesh(i.getAttribute("position").array,i.getIndex().array):tl.ColliderDesc.convexMesh(i.getAttribute("position").array,s?i.getIndex().array:void 0)),a.setFrictionCombineRule(tl.CoefficientCombineRule.Average).setRestitutionCombineRule(tl.CoefficientCombineRule.Average).setDensity(t.density).setFriction(t.friction).setRestitution(t.restitution);let o=this.sharedGameControlGlobals.rapierWorld.createCollider(a,e);this.sharedGameControlGlobals.colliderToEntity.set(o.handle,r),this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid]?.some(e=>"scene"===e.target)&&o.setActiveEvents(tl.ActiveEvents.COLLISION_EVENTS)}gatherChildrenGeom(e,t){return(i,r)=>{let s;if(0===r)return;if(i instanceof M9){if(!i.objectForSample)return!0===i.object.dataPatched.physics.fusedBody&&"dynamic"===i.object.dataPatched.physics.rigidBody||void 0;if(i.objectForSample.dataPatched.physics.fusedBody)return;s=i.object}else if(i instanceof xb)s=i.object;else if(s=i,s.dataPatched.cloner?.hideBase)return!0;let a=s.dataPatched;
8465if("visibility"===a.physics.enabled?!a.visible:!a.physics.enabled)return!0;1===r?e.hasNonUniformScale?i.matrixWorld.multiplyMatrices(e.shearScale,i.hiddenMatrix):i.matrixWorld.copy(i.hiddenMatrix):i.matrixWorld.multiplyMatrices(i.parent.matrixWorld,i.hiddenMatrix),i.matrixWorld.multiply(i.matrix);let o=i.geometry;o?.getAttribute("position")!==void 0&&t.push(Rb(o,i.matrixWorld))}}activate(e){if(this.isEnabled)return;this.isEnabled=!0,this.eventManager=e,this.usePhysics=this.page.data.globalPhysics.usePhysics;let t=this.page.playCamera,i=!1,r=5,s=8,a=9,o="drag",l=this.page.data.publish.gameControlObject,h=null!==l?this.page.find(l):null,c=null;if(h)for(let e of h.data.events){if(e.data.disabled||"GameControl"!==e.data.type)continue;let t=h;for(;this.usePhysics&&(t=t.parent)?.parent!==null;)t.data.physics?.fusedBody;e.data.collisionEnabled&&(this.needsCollisionDetection=!0),null===c&&(c=e.data)}if(this.page.traverseEntity(e=>{for(let t of e.dataPatched.events)if(!1===t.data.disabled&&"Trigger"===t.data.type)return this.needsCollisionDetection=!0,!0}),h&&c&&(!0===h.data.visible||!0===h.data.physics.enabled)){i=i||c.camera===t.uuid||h.uuid===t.uuid;let e=new Rv(h,this.renderer.domElement,c,this.eventContext.page.data.globalPhysics,this,h.uuid!==t.uuid&&c.camera===t.uuid,t,this.page,this.sharedAssets);this.gameControl=e,r=c.joystickPosLoc,s=c.joystickRotLoc,a=c.jumpTouchButtonLoc,o=c.rotByTouch,uQ&&c.touchControl&&(this.joystickToGameControls[r]="pos","walk"===c.moveMode&&(this.joystickToGameControls[a]="jmp"),"joystick"===o&&(this.joystickToGameControls[s]="rot"))}if(this.gameControl&&this.gameControl.data.navmesh.enabled){let e=this.gameControl.data;if(!this.navigationMeshWrapper){let t;this.navigationMeshWrapper=new LX(this.usePhysics,this.isExport),t=Math.floor((t="sphere"===e.collider.type?2*e.collider.radius:e.collider.height)/e.navmesh.ch-1),this.navigationMeshWrapper.init({...e.navmesh,walkableHeight:t},this.gameControl,this.eventContext)}}if(!1===i){let{enableRotate:e,enablePan:i,enableZoom:r,autoRotate:s,hoverRotatePanMode:a}=this.eventManager.publish.orbitControls;(e||i||r||s||0!==a)&&(this.orbitControls=new Be(t,this.renderer.domElement,{isExport:this.isExport,isPlayMode:!0}),this.orbitControls.addEventListener("change",this.requestRender),this.orbitControls.addEventListener("end",this.requestRender),this.orbitControls.addEventListener("start",this.requestRender),this.orbitControls.fromJSON(this.eventManager.publish.orbitControls,this.eventManager.publish.mouseEventTarget),this.orbitControls.useKeyEvents=!1,this.orbitControls.addEventListenersToCamera(),this.orbitControls.connect(),this.orbitControls.update())}let d=this.renderer.domElement.width/this.renderer.getPixelRatio(),u=this.renderer.domElement.height/this.renderer.getPixelRatio();this.joystickToGameControls.forEach((e,t)=>{let i=document.body.appendChild(document.createElement("div")),[r,s,a]=this.eventManager.eventContext.publish.joystickSizeAndXYOffset[t],o=(d-5*r)/4+r,l={},h="jmp"===e,c=h?0:r;for(let e in t<10?(t<5?l.top=c/2:l.bottom=c/2,l.left=c/2+t%5*o):(10===t?l.left=c/2:l.right=c/2,l.top=u/2),l.top?l.top-=s[1]:l.bottom+=s[1],l.left?l.left+=s[0]:l.right-=s[0],l)l[e]+="px";if(h){let e=i.appendChild(document.createElement("div"));Object.assign(e.style,l,{position:"absolute",width:r+"px",height:r+"px",backgroundColor:`rgba(255,255,255,${"show"===a?.4:0})`,zIndex:"9999",borderRadius:r+"px",border:"show"===a?"solid 2px rgba(0, 0, 0, .1)":"none",display:"flex",alignItems:"center",justifyContent:"center",touchAction:"none"});let s=r/16*6.4;"show"===a&&(e.innerHTML=`
8466						<svg width="${s}" height="${.4*r}" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
8467							<path d="M2 10L8 4L14 10" stroke="black" stroke-opacity="40%" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
8468						</svg>
8469					`),e.addEventListener("pointerdown",()=>{this.gameControl.movementState.jump=1,this.requestRender()}),e.addEventListener("touchend",e=>e.preventDefault()),this.joysticks[t]=[void 0,i];return}let p={zone:i,mode:"static",position:l,size:r};"hide"===a&&(p.restOpacity=0);let f=Ic.create(p);f.on("move",(t,i)=>{let r=this.gameControl;"pos"===e?i.force<.2?r.moveForce=0:(r.movementState.movePosZ=Math.sin(-i.angle.radian),r.movementState.movePosX=Math.cos(-i.angle.radian),i.force>1.2?r.movementState.run=1:r.movementState.run=0,i.force<.3?r.moveForce=(i.force-.2)/.1:r.moveForce=1):"rot"===e&&(i.force<.2?r.rotForce=0:(r.movementState.rotPosX=i.vector.y,r.movementState.rotPosY=-i.vector.x,i.force<.3?r.rotForce=(i.force-.2)/.1:r.rotForce=1)),this.requestRender()}),f.on("end",(t,i)=>{let r=this.gameControl;"pos"===e?(r.movementState.movePosZ=0,r.movementState.movePosX=0,r.moveForce=1):"rot"===e&&(r.movementState.rotPosX=0,r.movementState.rotPosY=0,r.rotForce=1)}),this.joysticks[t]=[f,i]}),this.markIsDestroyTarget(),this.markIsDragObject(),this.rebuildBVH(),this.initializationCounter++,window.setTimeout(()=>
8469{this.collisionEvents.forEach(e=>e.initialDisabled=!1)},80)}initPhysics(){this.sharedGameControlGlobals.rapierWorld?.free(),this.sharedGameControlGlobals.rapierWorld=new tl.World(new tl.Vector3(0,this.gravity,0)),this.events=new tl.EventQueue(!0);let e=[],t=[];if(this.page.traverseChildren(i=>{let r;if(i instanceof M9){if(!i.objectForSample)return!0===i.object.dataPatched.physics.fusedBody&&"dynamic"===i.object.dataPatched.physics.rigidBody||void 0;if(i.objectForSample.dataPatched.physics.fusedBody)return;r=i.object}else if(i instanceof xb)r=i.object;else{if(i instanceof P9||i instanceof ER)return;if(r=i,r.dataPatched.cloner?.disabled===!1&&r.dataPatched.cloner?.hideBase&&r.dataPatched.physics?.fusedBody!==!0)return!0}let s=r.dataPatched,a;for(let e of s.events)!0!==e.data.disabled&&"GameControl"===e.data.type&&(a=e.data);if(!s.physics||("visibility"===s.physics.enabled?!s.visible:!s.physics.enabled))return!0;i.updateMatrixWorldSVD();let o=Bb(s),l=!1,h=r.userData.hasDestroy,c=r.userData.hasDrag,d=!1;for(let e of s.events)if(!0!==e.data.disabled){if("Collision"===e.data.type){l=!0;let t=new LB(e.id,e.data,r,this.page,this.sharedAssets,this.eventManager);t.initialDisabled=!0,this.collisionEvents.push(t),this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid]&&this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid].every(t=>t.id!==e.id)?this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid].push(t):this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid]=[t]}else if("Follow"===e.data.type){d=!0;let t=e.data.target;i.traverseVisible(e=>{e.userData.isFollowingObj=t})}}"dynamic"===s.physics.rigidBody&&!1===s.physics.fusedBody&&(i.matrixWorldFusedFalse=i.matrixWorld.clone());let u=i.geometry;if(void 0!==a){let e,t=tl.RigidBodyDesc.kinematicPositionBased();(i.hasNonUniformScale?i.matrixWorldRigid:i.matrixWorld).decompose(Bs,Ba,Bn),i.position0=Bs.clone().divideScalar(this.pixelsPerMeter),i.rotation0=Ba.clone(),Bs.divideScalar(this.pixelsPerMeter),t.setTranslation(Bs.x,Bs.y,Bs.z).setRotation(Ba);let o=this.sharedGameControlGlobals.rapierWorld.createRigidBody(t);i.rigidBody=o,(e="sphere"===a.collider.type?tl.ColliderDesc.ball(a.collider.radius/this.pixelsPerMeter):"capsule"===a.collider.type?tl.ColliderDesc.capsule((a.collider.height/2-a.collider.radius)/this.pixelsPerMeter,a.collider.radius/this.pixelsPerMeter):tl.ColliderDesc.cuboid(a.collider.width/this.pixelsPerMeter/2,a.collider.height/this.pixelsPerMeter/2,a.collider.depth/this.pixelsPerMeter/2)).setFrictionCombineRule(tl.CoefficientCombineRule.Average).setRestitutionCombineRule(tl.CoefficientCombineRule.Average).setDensity(s.physics.density).setFriction(s.physics.friction).setRestitution(s.physics.restitution);let l=this.sharedGameControlGlobals.rapierWorld.createCollider(e,o);this.sharedGameControlGlobals.colliderToEntity.set(l.handle,r),Bs.fromArray(a.collider.position).multiply(Bn.setFromMatrixScale(r.matrixWorld)).divideScalar(this.pixelsPerMeter),l.setTranslationWrtParent(Bs);let h=new ig().setFromEuler(new i3().setFromVector3(new iv().fromArray(a.collider.rotation)));l.setRotationWrtParent(h),l.setActiveEvents(tl.ActiveEvents.COLLISION_EVENTS),this.generateSensorColliderDescs(r,!0)}else"dynamic"===s.physics.rigidBody||o||d||h||c||l?(this.addRigidBody(i,r,{hasFollow:d,hasTransformAnim:o,hasDrag:c}),this.generateSensorColliderDescs(r,s.physics.fusedBody)):(u&&e.push(Rb(u,i.matrixWorld)),s.physics.fusedBody&&i.traverseObject((t,i)=>{let r;if(0===i)return;if(t instanceof M9){if(!t.objectForSample)return!0===t.object.dataPatched.physics.fusedBody&&"dynamic"===t.object.dataPatched.physics.rigidBody||void 0;if(t.objectForSample.dataPatched.physics.fusedBody)return;r=t.object}else{if(t instanceof P9||t instanceof ER)return;if(t instanceof xb)r=t.object;else if(r=t,r.dataPatched.cloner?.hideBase)return!0}let s=r.dataPatched;if("visibility"===s.physics.enabled?!s.visible:!s.physics.enabled)return!0;let a=t.geometry;a?.getAttribute("position")!==void 0&&e.push(Rb(a,t.matrixWorld))}),this.generateSensorColliderDescs(r,s.physics.fusedBody,t));if(s.physics?.fusedBody===!0||a)return!0}),0===e.length)return;let i=gQ(e);i.scale(1/this.pixelsPerMeter,1/this.pixelsPerMeter,1/this.pixelsPerMeter);let r=tl.RigidBodyDesc.fixed(),s=this.sharedGameControlGlobals.rapierWorld.createRigidBody(r),a=tl.ColliderDesc.trimesh(i.getAttribute("position").array,i.getIndex().array).setFrictionCombineRule(tl.CoefficientCombineRule.Multiply).setRestitutionCombineRule(tl.CoefficientCombineRule.Multiply).setFriction(1).setRestitution(1);for(let[e,i]of(this.sharedGameControlGlobals.rapierWorld.createCollider(a,s),t)){let t=this.sharedGameControlGlobals.rapierWorld.createCollider(e,s);this.sensorToTriggerEvent[t.handle]=i}}updatePositions(){return this.nActiveRigidBodies=0,this.sharedGameControlGlobals.rapierWorld.forEachRigidBody(this.processRigidBody),this.nActiveRigidBodies>0}rebuildBVH(){this.usePhysics?this.initPhysics():(this.page.traverseEntity(e=>{for(let t of e.dataPatched.events)if("Trigger"===t.data.type&&!0!==t.data.disabled){let i=new Br(t.id,t.data,e,this.page,this.sharedAssets,this.eventManager),r=new iX().compose(Bh.fromArray(t.data.position),Bu.setFromEuler(Bl.fromArray(t.data.rotation)),Bd);if("box"===t.data.triggerZone){let s=new ib;s.min.fromArray(t.data.size).multiplyScalar(-.5),s.max.fromArray(t.data.size).multiplyScalar(.5),this.sharedGameControlGlobals.triggers.push([s,r,e,i])}else this.sharedGameControlGlobals.triggers.push([t.data.radius,r,e,i])}}),this.needsCollisionDetection&&this.initBVH())}
8469disconnectEvents(){this.collisionEvents.forEach(e=>e.disconnect()),this.sharedGameControlGlobals.triggers.forEach(e=>e[3].disconnect()),this.sharedGameControlGlobals.triggers.length=0}deactivate(){if(this.isEnabled){for(let e of(this.isEnabled=!1,this.page.traverse(e=>{e.matrixWorldFusedFalse&&(e.matrixWorldFusedFalse=void 0),e.rigidBody&&(e.rigidBody=void 0),e.position0&&(e.position0=void 0),e.rotation0&&(e.rotation0=void 0)}),this.sharedGameControlGlobals.rapierWorld?.free(),this.sharedGameControlGlobals.rapierWorld=void 0,this.sharedGameControlGlobals.staticMeshBVH=void 0,this.accumulator=0,this.sharedGameControlGlobals.entitiesWithTransformAnim=[],this.disconnectEvents(),this.gameControl?.reset(),this.gameControl?.dispose(),this.gameControl=null,this.initializationCounter=-1,this.joysticks.forEach(([e,t])=>{e?.destroy(),t.remove()}),this.joystickToGameControls=[],this.joysticks=[],this.orbitControls&&(this.orbitControls.dispose(),this.orbitControls=void 0),this.navigationMeshWrapper?.dispose(),this.navigationMeshWrapper=void 0,Object.values(this.sharedGameControlGlobals.entityToCollisionEvents)))e.forEach(e=>e.disconnect());this.sharedGameControlGlobals.entityToCollisionEvents={},this.page.updateMatrixWorld(!0)}}update(e,t,i){if(!this.isEnabled)return!0;let r=!0;if(void 0!==this.orbitControls&&this.orbitControls.needsUpdate&&(r=!this.orbitControls.update()),this.initializationCounter>=0&&this.initializationCounter<2?(this.initializationCounter++,r=!1):2===this.initializationCounter&&this.gameControl&&(r=!this.gameControl.update(e,t,i)&&r),!1===this.usePhysics&&this.checkTrigger(),this.usePhysics){if(0===e)r=this.stepPhysics()&&r;else{let t=e/1e3;t<.016666666666666666&&t>.009166666666666667&&(t=.016666666666666666),this.accumulator+=t;let i=performance.now(),s=0;for(;this.accumulator>=.016666666666666666&&s<6&&(r=this.stepPhysics()&&r,this.accumulator-=.016666666666666666,s++,!(performance.now()-i>16.666666666666668)););this.accumulator=this.accumulator%.016666666666666666}}return r}stepPhysics(){for(let e of this.sharedGameControlGlobals.entitiesWithTransformAnim)(e.hasNonUniformScale?e.matrixWorldRigid:e.matrixWorld).decompose(Bs,Ba,Bn),Bo.setFromQuaternion(Ba),void 0===e.prevR?(e.prevR=Bo.clone(),e.prevT=Bs.clone()):(e.prevR.copy(Bo),e.prevT.copy(Bs)),e.rigidBody&&(e.rigidBody.setNextKinematicTranslation(Bs.divideScalar(this.pixelsPerMeter)),e.rigidBody.setNextKinematicRotation(Ba));return this.sharedGameControlGlobals.rapierWorld.step(this.events),this.events?.drainCollisionEvents(this.handleCollisionEvents),!this.updatePositions()}dispatchCollisionEvent(e,t,i){let r=(this.sharedGameControlGlobals.rapierWorld?.getCollider(i))._parent,s;if(t.cloner){for(let e of t.cloner.children)if(e.rigidBody===r){s=e;break}}e.dispatch(s),t.dispatchEvent(By)}updateUseWindowEvents(e){this.orbitControls?.updateUseWindowEvents(e)}generateSensorColliderDescs(e,t,i){let r=Bf.copy(e.matrixWorld).invert();e.traverseEntity((s,a)=>
8469{if(!1===t&&1===a)return!0;for(let t of s.dataPatched.events)if("Trigger"===t.data.type&&!0!==t.data.disabled){let a=new Br(t.id,t.data,s,this.page,this.sharedAssets,this.eventManager),o;if((o="box"===t.data.triggerZone?tl.ColliderDesc.cuboid(...t.data.size.map(e=>e/(2*this.pixelsPerMeter))):tl.ColliderDesc.ball(t.data.radius/this.pixelsPerMeter)).setDensity(0).setSensor(!0).setActiveEvents(tl.ActiveEvents.COLLISION_EVENTS),Bh.fromArray(t.data.position),Bu.setFromEuler(Bl.fromArray(t.data.rotation)),Bp.compose(Bh,Bu,Bd).premultiply(s.matrixWorld),i?(Bp.decompose(Bh,Bu,Bc),o.setActiveCollisionTypes(tl.ActiveCollisionTypes.KINEMATIC_FIXED|tl.ActiveCollisionTypes.DYNAMIC_FIXED)):(Bp.premultiply(r).decompose(Bh,Bu,Bc),e.rigidBody.bodyType()===tl.RigidBodyType.Dynamic||(e.rigidBody.bodyType()===tl.RigidBodyType.Fixed?o.setActiveCollisionTypes(tl.ActiveCollisionTypes.KINEMATIC_FIXED|tl.ActiveCollisionTypes.DYNAMIC_FIXED):o.setActiveCollisionTypes(tl.ActiveCollisionTypes.KINEMATIC_KINEMATIC|tl.ActiveCollisionTypes.DYNAMIC_KINEMATIC))),Bh.divideScalar(this.pixelsPerMeter),o.setTranslation(Bh.x,Bh.y,Bh.z),o.setRotation(Bu),i)i.push([o,a]);else{let t=this.sharedGameControlGlobals.rapierWorld.createCollider(o,e.rigidBody);this.sensorToTriggerEvent[t.handle]=a}}})}checkTrigger(){let e;for(let t=0;t<this.sharedGameControlGlobals.triggers.length;t++){let[i,r,s,a]=this.sharedGameControlGlobals.triggers[t];for(let t=0;t<this.sharedGameControlGlobals.entitiesWithTransformAnim.length;t++){let o=this.sharedGameControlGlobals.entitiesWithTransformAnim[t];if(s===o||!1===a.isValidTriggeringObject(wQ.is(o)?o:o.object))continue;let l=Bf.copy(s.matrixWorld).decompose(Bh,Bg,Bc).compose(Bh,Bg,Bd).multiply(r),h=Bp.copy(o.matrixWorld).invert().multiply(l);i instanceof ib?e=o.bvhGeometry.boundsTree.intersectsBox(i,h):(Bv.radius=i,Bv.center.setFromMatrixPosition(h),e=o.bvhGeometry.boundsTree.intersectsSphere(Bv)),e?-1===a.currentIntersectedObjects.indexOf(o)&&(a.currentIntersectedObjects.push(o),a.dispatch(),s.dispatchEvent(Bx)):a.currentIntersectedObjects=a.currentIntersectedObjects.filter(e=>e!==o)}}}};function BS(e){let t=this._clip.duration,i=this._clip.start??0,r=this.loop,s=this.time+e,a=this._loopCount,o=2202===r;if(0===e)return -1===a?s:o&&(1&a)==1?t-(s-i):s;if(2200===r){-1===a&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(s>=t)s=t;else if(s<0)s=0;else{this.time=s;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(-1===a&&(e>=0?(a=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o)),s>=t||s<i){let r=Math.floor((s-i)/(t-i));s-=(t-i)*r,a+=Math.abs(r);let l=this.repetitions-a;if(l<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,o||(s=e>0?t:i,1===this.repetitions&&(s=t)),this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(1===l){let t=e<0;this._setEndings(t,!t,o)}else this._setEndings(!1,!1,o);this._loopCount=a,this.time=s,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:r})}}else this.time=s;if(o&&(1&a)==1)return t-(s-i)}return s}var B_=!1,BA=class{constructor(e,t,i,r){this.scene=e,this.requestRender=t,this.updateDisplayProgress=i,this.animationInspectorState=r,this.clipIdToAction={},this.activeClip=null,this.needsUpdate=!1,this.addClip=e=>{"Empty"===e.data.type&&e.data.animations&&e.data.animations.forEach((t,i)=>{let r=t[0]+"/";if(Array.isArray(e.identity)?r+=e.identity[0]:r+=e.uuid,this.clipIdToAction[r])return;let s=o$.parse(JSON.parse(t[2]));e.animations[i]=s;let a=this.mixer.clipAction(s,e);!1===B_&&(Object.getPrototypeOf(a)._updateTime=BS,B_=!0),a.clampWhenFinished=!0,this.clipIdToAction[r]=a})},this.mixer=new lP(e),this.scene.traverseEntity(this.addClip)}deleteClip(e,t){let i=this.scene.find(t);if(!i)return;let r=i.animations.find(t=>t.uuid===e);if(!r)return;let s=this.clipIdToAction[e];s&&(s.stop(),this.mixer.uncacheClip(r),delete this.clipIdToAction[e],i.animations=i.animations.filter(t=>t.uuid!==e))}get isPlaying(){return Object.values(this.clipIdToAction).some(e=>e.isRunning())}playFromInspector(e){this.mixer.stopAllAction();let t=this.clipIdToAction[e];t&&(t.play(),this.activeClip=t.getClip(),this.requestRender())}
8469onExitPlayMode(){Object.values(this.clipIdToAction).forEach(e=>{e.repetitions=1/0,e.loop=2201}),this.mixer.stopAllAction(),this.requestRender()}play(e){let t=e.clipId+"/"+e.object,i=this.clipIdToAction[t];if(i)return e&&(e.repeat>=0&&(i.repetitions=e.repeat+1),"pingpong"===e.direction&&0!==e.repeat&&(i.loop=2202)),i.play(),i.paused=!1,this.requestRender(),i}resumeFromInspector(e){let t=this.clipIdToAction[e];t&&(t.play(),t.paused=!1,this.requestRender())}pauseFromInspector(e){let t=this.clipIdToAction[e];t&&(t.paused=!0)}stop(){this.mixer.stopAllAction(),this.requestRender()}update(e){if(this.needsUpdate)this.needsUpdate=!1;else if(!1===this.isPlaying||this.animationInspectorState?.isScrubbing)return;this.mixer.update(e/1e3),this.activeClip&&this.updateDisplayProgress(Math.round(this.mixer.time/this.activeClip.duration*(this.maxFrames-1)%(this.maxFrames-1))),this.requestRender()}get maxFrames(){return Ok(this.activeClip??void 0)}setProgressFromInspector(e,t){if(!this.clipIdToAction[t])return;this.activeClip!==this.clipIdToAction[t].getClip()&&this.playFromInspector(t);let i=this.clipIdToAction[t].paused;this.clipIdToAction[t].paused=!1,this.mixer.setTime(Math.min(e/(this.maxFrames-1),.9999)*this.activeClip.duration),this.requestRender(),i&&(this.clipIdToAction[t].paused=!0)}},BM=new WeakMap,BE=class extends o3{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,i,r){let s=new o6(this.manager);s.setPath(this.path),s.setResponseType("arraybuffer"),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(e,e=>{this.decodeDracoFile(e,t).catch(r)},i,r)}decodeDracoFile(e,t,i,r){let s={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:r||this.defaultAttributeTypes,useUniqueIDs:!!i};return this.decodeGeometry(e,s).then(t)}decodeGeometry(e,t){let i=JSON.stringify(t);if(BM.has(e)){let t=BM.get(e);if(t.key===i)return t.promise;if(0===e.byteLength)throw Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let r,s=this.workerNextTaskID++,a=e.byteLength,o=this._getWorker(s,a).then(i=>(r=i,new Promise((i,a)=>{r._callbacks[s]={resolve:i,reject:a},r.postMessage({type:"decode",id:s,taskConfig:t,buffer:e},[e])}))).then(e=>this._createGeometry(e.geometry));return o.catch(()=>!0).then(()=>{r&&s&&this._releaseTask(r,s)}),BM.set(e,{key:i,promise:o}),o}_createGeometry(e){let t=new rz;e.index&&t.setIndex(new rM(e.index.array,1));for(let i=0;i<e.attributes.length;i++){let r=e.attributes[i],s=r.name,a=r.array,o=r.itemSize;t.setAttribute(s,new rM(a,o))}return t}_loadLibrary(e,t){let i=new o6(this.manager);return i.setPath(this.decoderPath),i.setResponseType(t),i.setWithCredentials(this.withCredentials),new Promise((t,r)=>{i.load(e,t,void 0,r)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;let e="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(t=>{let i=t[0];e||(this.decoderConfig.wasmBinary=t[1]);let r=BC.toString(),s=["/* draco decoder */",i,"","/* worker */",r.substring(r.indexOf("{")+1,r.lastIndexOf("}"))].join(`
8470`);this.workerSourceURL=URL.createObjectURL(new Blob([s]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){let e=new Worker(this.workerSourceURL);e._callbacks={},e._taskCosts={},e._taskLoad=0,e.postMessage({type:"init",decoderConfig:this.decoderConfig}),e.onmessage=function(t){let i=t.data;switch(i.type){case"decode":e._callbacks[i.id].resolve(i);break;case"error":e._callbacks[i.id].reject(i);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+i.type+'"')}},this.workerPool.push(e)}else this.workerPool.sort(function(e,t){return e._taskLoad>t._taskLoad?-1:1});let i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=t,i._taskLoad+=t,i})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,""!==this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),this}};function BC(){let e,t;onmessage=function(i){let r=i.data;switch(r.type){case"init":e=r.decoderConfig,t=new Promise(function(t){e.onModuleLoaded=function(e){t({draco:e})},DracoDecoderModule(e)});break;case"decode":let s=r.buffer,a=r.taskConfig;t.then(e=>{let t=e.draco,i=new t.Decoder,o=new t.DecoderBuffer;o.Init(new Int8Array(s),s.byteLength);try{let e=function(e,t,i,r){let s=r.attributeIDs,a=r.attributeTypes,o,l,h=t.GetEncodedGeometryType(i);if(h===e.TRIANGULAR_MESH)o=new e.Mesh,l=t.DecodeBufferToMesh(i,o);else if(h===e.POINT_CLOUD)o=new e.PointCloud,l=t.DecodeBufferToPointCloud(i,o);else throw Error("THREE.DRACOLoader: Unexpected geometry type.");if(!l.ok()||0===o.ptr)throw Error("THREE.DRACOLoader: Decoding failed: "+l.error_msg());let c={index:null,attributes:[]};for(let i in s){let l=self[a[i]],h,d;if(r.useUniqueIDs)d=s[i],h=t.GetAttributeByUniqueId(o,d);else{if(-1===(d=t.GetAttributeId(o,e[s[i]])))continue;h=t.GetAttribute(o,d)}c.attributes.push(function(e,t,i,r,s,a){let o=a.num_components(),l=i.num_points()*o,h=l*s.BYTES_PER_ELEMENT,c=function(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}(e,s),d=e._malloc(h);t.GetAttributeDataArrayForAllPoints(i,a,c,h,d);let u=new s(e.HEAPF32.buffer,d,l).slice();return e._free(d),{name:r,array:u,itemSize:o}}(e,t,o,i,l,h))}return h===e.TRIANGULAR_MESH&&(c.index=function(e,t,i){let r=3*i.num_faces(),s=4*r,a=e._malloc(s);t.GetTrianglesUInt32Array(i,s,a);let o=new Uint32Array(e.HEAPF32.buffer,a,r).slice();return e._free(a),{array:o,itemSize:1}}(e,t,o)),e.destroy(o),c}(t,i,o,a),s=e.attributes.map(e=>e.array.buffer);e.index&&s.push(e.index.array.buffer),self.postMessage({type:"decode",id:r.id,geometry:e},s)}catch(e){console.error(e),self.postMessage({type:"error",id:r.id,error:e.message})}finally{t.destroy(o),t.destroy(i)}})}}}async function BT(e){if(th){let t={attributeIDs:th.defaultAttributeIDs,attributeTypes:th.defaultAttributeTypes,useUniqueIDs:!1},i;try{i=await th.decodeGeometry(new Int8Array(e).buffer,t)}catch(e){console.error(e)}if(i)return{index:i.index?{array:i.index.array}:void 0,attributes:Object.entries(i.attributes).map(([e,t])=>({name:e,itemSize:t.itemSize,array:t.array}))}}return null}async function BP(e,t){let[i,r]=pH(ma.deserialize(new Uint8Array(e)));return gY(i),t&&t(i),r.result().data}async function BD(e){for(let t of e){let e=await BT(t.geometry.data.draco);if(e){let i=t.geometry.data;e.index&&(i.index={array:e.index.array,itemSize:1,normalized:!1,type:"Uint32Array"});let r={};
8470e.attributes.forEach(({name:e,array:t,itemSize:i})=>{r[e]={array:t,itemSize:i,type:"Float32Array",normalized:!1}}),i.attributes=r,i.draco=void 0}}}var BI=class{constructor(){this._clickCount=0,this._lastTime=0,this._lastPosition=[0,0],this._delay=500,this._distance=2,this._onMouseDown=e=>{let t=[e.clientX,e.clientY],i=new Date().getTime();if(this._clickCount>0){let e=t[0]-this._lastPosition[0],i=t[1]-this._lastPosition[1];Math.sqrt(e*e+i*i)>this._distance&&(this._clickCount=0)}this._lastPosition=t,this._clickCount=i-this._lastTime>this._delay?1:this._clickCount+1,this._lastTime=i},this._onMouseUp=e=>{}}start(e,t=500,i=2){this._target&&this.stop(),this.reset(),this._delay=t,this._distance=i,this._target=e,this._target.addEventListener("pointerdown",this._onMouseDown,!1),this._target.addEventListener("pointerup",this._onMouseUp,!1)}stop(){this._target&&(this._target.removeEventListener("pointerdown",this._onMouseDown,!1),this._target.removeEventListener("pointerup",this._onMouseUp,!1),this._target=void 0)}get clickCount(){return this._clickCount}reset(){this._clickCount=0,this._lastTime=0,this._lastPosition=[0,0]}},BO=class{constructor(e,t,i,r,s,a,o,l){this.eventId=e,this.id=t,this.data=i,this.dataEvent=r,this.object=s,this.stage=!1,this.actions=OX(r,i.actions,a,o,l,s)}disconnect(){OY(this.actions)}
8470dispatchIn(){this.actions.Audio.forEach(e=>e.dispatchBasic()),this.actions.Particles.forEach(e=>e.dispatchBasic()),this.actions.Video.forEach(e=>e.dispatchBasic()),this.actions.Create.forEach(e=>e.dispatch()),this.actions.Destroy.forEach(e=>e.dispatch()),this.actions.Reset.forEach(e=>e.dispatch()),this.actions.Link.forEach(e=>e.dispatch()),this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.actions.Transition.forEach(e=>e.toggle()),this.actions.Animation.forEach(e=>e.play()),this.actions.SwitchCamera.forEach(e=>e.play()),this.actions.SceneTransition.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}dispatchOut(){this.actions.Transition.forEach(e=>{e.toggle()})}},BR=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.breakpoints=[],this.resize=(e,t)=>{this.breakpoints.forEach(i=>{let r=m3.deviceToSize(i.data.size),s="horizontal"===i.dataEvent.orientation?e:t,a;switch(i.data.operator){case"<":a=s<r[0];break;case">":a=s>r[0];break;case"<>":a=s>r[0]&&s<r[1]}i.stage!==a&&(i.stage=a,i.stage?i.dispatchIn():i.dispatchOut())})},this.onResizeObserver=new ResizeObserver(e=>{for(let t of e){let{width:e,height:i}=t.contentRect;this.resize(e,i)}})}connect(){let{page:e,sharedAssets:t,domElement:i}=this.eventContext;this.onResizeObserver.observe(i);let r=i=>{if(!(!i.visible||!i.data?.events.length))for(let{data:r,id:s}of i.data.events)r.disabled||"Resize"===r.type&&r.breakpoints.forEach(({data:a,id:o})=>{try{let l=new BO(s,o,a,r,i,e,t,this.eventManager);this.breakpoints.push(l)}catch(e){}})};e.traverseEntity(e=>{(e instanceof Pk||e instanceof PD)&&e.frame?.traverse(e=>{r(e)}),r(e)})}disconnect(){this.onResizeObserver.disconnect(),this.breakpoints.forEach(e=>{e.disconnect()}),this.breakpoints=[]}},BL=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.userAPIs={},this.events=[],this.onSuccess=({userAPIId:e})=>{this.events.forEach(t=>{t.data.userAPIId===e&&t.dispatchSuccess()})},this.onError=({userAPIId:e})=>{this.events.forEach(t=>{t.data.userAPIId===e&&t.dispatchError()})},this.userAPIs=e.sharedAssets.getUserAPIs()}connect(){this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"API"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new BB(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),Object.entries(this.userAPIs).forEach(([e,t])=>{t.on("success",this.onSuccess),t.on("error",this.onError),t.autostart&&t.callUserAPI(this.eventContext.sharedAssets)})}disconnect(){Object.entries(this.userAPIs).forEach(([e,t])=>{t.off("success",this.onSuccess),t.off("error",this.onError)})}},BB=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.successActions=OX(t,t.successActions,r,s,a,i),this.errorActions=OX(t,t.errorActions,r,s,a,i)}dispatchSuccess(){this.dispatchActions(this.successActions)}dispatchError(){this.dispatchActions(this.errorActions)}
vendor: 1,586 bytes, line 8470
8470dispatchActions(e){e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}},Bz=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.userWebhooks={},this.events=[],this.onMessage=({userWebhookId:e})=>{this.events.forEach(t=>{t.data.userWebhookId===e&&t.dispatch()})},this.userWebhooks=e.sharedAssets.getUserWebhooks()}connect(){this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"WEBHOOK"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new BF(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),Object.entries(this.userWebhooks).forEach(([e,t])=>{t.connect(),t.on("message",this.onMessage)})}disconnect(){Object.entries(this.userWebhooks).forEach(([e,t])=>{t.off("message",this.onMessage),t.disconnect()})}},BF=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.actions=OX(t,t.actions,r,s,a,i)}dispatch(){let e=this.actions;
8470e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}},BN=new iv(0,0,1),Bk=new iv,BU=new iv,BV=new tK,Bj=class{constructor(e,t,i,r,s){this.containerScene=e,this.raycaster=t,this.sharedAssets=i,this.requestRender=r,this.onExit=s,this.htmlInput=null,this.virtualInput=null,this.helper=new TR,this.doubleClickHandler=new BI,this.isDragging=!1,this.plane=new ss,this.caretInterval=0,this.planeIntersection=new iv,this.projected=new tQ,this._lastIndex=0,this._isFirstDragMove=!1,this.selectionOnDragStart=0,this.onTextMaterialChanged=()=>{let e=this.virtualInput?.data;if(void 0!==this.virtualInput&&e){let t=e.material,i=function(e,t){let i=gs.fromHex(3223857),r=.8;for(let a of e.layers){if("light"===a.data.type||"displace"===a.data.type||"fresnel"===a.data.type||"matcap"===a.data.type||"texture"===a.data.type||"toon"===a.data.type||"outline"===a.data.type||"transmission"===a.data.type||"noise"===a.data.type)continue;let e="string"==typeof a.data.alpha?Number(t.getVariable(a.data.alpha)):a.data.alpha;if("color"===a.data.type&&e>.3){var s;i="string"==typeof(s=a.data.color)?t.data.colors[s]:s,r=e;break}if(("depth"===a.data.type||"gradient"===a.data.type)&&e>.3){let e=a.data.colors[0];i={r:e[0],g:e[1],b:e[2]},r="string"==typeof a.data.alpha?1:a.data.alpha;break}}return{...i,a:r}}("string"==typeof t?this.sharedAssets.data.materials[t]:t,this.sharedAssets);this.helper.setCaretColor(i)}},this.stopAnimateTextCursor=()=>{clearInterval(this.caretInterval),this.helper&&(this.helper.caretMesh.visible=!1)},this.startAnimateTextCursor=()=>{this.stopAnimateTextCursor(),this.helper&&(this.helper.caretMesh.visible=!0,this.caretInterval=setInterval(()=>{this.helper&&(this.helper.caretMesh.visible=!this.helper.caretMesh.visible),this.requestRender()},600))},this.handleCaretUpdate=e=>{if(!this.htmlInput||!this.virtualInput)return;let t=this.helper,i=e?.key==="ArrowLeft"||e?.key==="ArrowRight",r=e?.key==="ArrowUp"||e?.key==="ArrowDown";this.htmlInput.selectionStart===this.htmlInput.selectionEnd?(t.setCaretPosition(this.htmlInput.selectionStart,{horizontalKeyMove:i,verticalKeyMove:r}),this.startAnimateTextCursor()):t.setSelection(this.htmlInput.selectionStart,this.htmlInput.selectionEnd),this.requestRender()},this.containerScene.add(this.helper)}createInput(){let e;return this.htmlInput=((e=document.createElement("textarea")).style.position="fixed",e.style.top="200px",e.style.left="400px",e.style.zIndex="-1",e.style.border="1px solid rgba(255,0,0,0.5)",e.style.width="10px",e.style.height="500px",e.style.color="white",e.style.opacity="0.5",e.style.background="transparent",e.style.display="none",e.style.margin="0px",e.style.padding="0px",e.style.boxSizing="content-box",e.style.pointerEvents="none",e),this.htmlInput}connect(){}disconnect(){this.stopAnimateTextCursor(),this.helper.hide(),this.htmlInput?.remove(),this.doubleClickHandler.stop()}handleMouseDown(){if(!this.htmlInput||!this.virtualInput)return!0;this.getPointOnPlane();let e=this.doubleClickHandler.clickCount,{index:t,lineIndex:i,characterIndex:r}=this.helper.getSelectionFromPosition(this.projected.x,this.projected.y,e>1?"inside":"previous")??{index:0,lineIndex:0,characterIndex:0};this.virtualInput?.wrappedText?.length&&this.virtualInput.wrappedText[i][Math.max(0,r-1)]===`
8471`&&(t--,r--),this._lastIndex=t,this._isFirstDragMove=!0;let s=this.checkClickedObject();if(1===e){if(null===s)return this.onExit(this.virtualInput),!0;this.selectionOnDragStart=t,this.isDragging=!0,this.setInputSelection(t)}else s===this.virtualInput&&(2===e?this.selectClosestWord(i,r):e>2&&(this.setInputSelection(0,this.htmlInput.value.length),this.doubleClickHandler.reset()))}handleMouseUp(){this.applyRangeToTextInput(),this.isDragging=!1,this._isFirstDragMove=!1}handleMouseMove(){this.virtualInput&&(this._isFirstDragMove&&this.doubleClickHandler.clickCount>1&&(this.selectionOnDragStart=this._lastIndex,this.isDragging=!0,this.setInputSelection(this._lastIndex)),this._isFirstDragMove=!1,this.getPointOnPlane(),this.applyRangeToTextInput())}focus(e){if(this.virtualInput=e,this.updateTextInputStyles(),this.htmlInput){if(e){let e=this.data?.geometry.text;this.htmlInput.value="string"==typeof e?"":e?.textValue.toString()??""}else this.htmlInput.value=""}}blur(){}get data(){let{virtualInput:e}=this;if(e)return e.dataPatched}
8471applyRangeToTextInput(){if(!this.isDragging||!this.virtualInput||!this.htmlInput)return;let e=this.selectionOnDragStart,{index:t,lineIndex:i,characterIndex:r}=this.helper.getSelectionFromPosition(this.projected.x,this.projected.y,this.doubleClickHandler.clickCount>2?"inside":"previous")??{index:0};void 0!==i&&void 0!==r&&this.virtualInput?.wrappedText[i][r-1]===`
8472`&&t--,this.htmlInput.setSelectionRange(Math.min(e,t),Math.max(e,t))}checkClickedObject(){if(this.virtualInput){let e=this.raycaster.intersectObject(this.virtualInput,!1);if(e.length>0){let t=e[0];if(t.object instanceof PL)return t.object}}return null}selectClosestWord(e,t){if(!this.virtualInput)return;let i=this.virtualInput.wrappedText,r=i[e],s=t+1,a=t;" "!==r[t]&&(s=this.findNextCharOccurence(r,t,"forward"," "),(a=this.findNextCharOccurence(r,t,"backward"," "))>0&&a++,s>=r.length-1&&e===i.length-1&&s++);let o=this.helper,l=o.getGlobalIndexFromLineAndCharIndexes(i,e,a),h=o.getGlobalIndexFromLineAndCharIndexes(i,e,s);this.setInputSelection(l,h)}findNextCharOccurence(e,t,i,r=" "){let s=Math.max(0,e.length-1),a="forward"===i?s:0,o="forward"===i?1:-1,l=Math.max(Math.min(t,s),0);for(;l!==a;)if(l+=o,e.charAt(l)===r)return l;return a}getPointOnPlane(){let e=this.virtualInput?.data;if(!(!this.virtualInput||!e)&&this.raycaster.ray.intersectsPlane(this.plane)){null===this.planeIntersection&&(this.planeIntersection=new iv);let t=this.raycaster.ray.intersectPlane(this.plane,this.planeIntersection);if(t){this.planeIntersection.copy(this.virtualInput.worldToLocal(t));let i="number"==typeof e.geometry.width?e.geometry.width:1,r="number"==typeof e.geometry.height?e.geometry.height:1;this.projected.set(t.x+.5*i,t.y-.5*r)}}}updatePlane(){let e=this.virtualInput?.data;this.virtualInput&&e&&(BV.getNormalMatrix(this.virtualInput.matrixWorld),Bk.copy(BN).applyMatrix3(BV).normalize(),this.virtualInput.localToWorld(BU.set(0,0,e.geometry.depth)),this.plane.setFromNormalAndCoplanarPoint(Bk,BU))}setInputSelection(e,t=e){this.htmlInput?.setSelectionRange(e,t),setTimeout(()=>{this.htmlInput?.focus()})}updateTextInputStyles(){var e;let t=this.virtualInput?.data;this.virtualInput&&t&&this.htmlInput&&(this.htmlInput.style.fontSize=t.geometry.fontSize+"px",this.htmlInput.style.letterSpacing=t.geometry.letterSpacing*t.geometry.fontSize+"px",this.htmlInput.style.lineHeight=t.geometry.fontSize*t.geometry.lineHeight+"px",this.htmlInput.style.width=t.geometry.width+"px",this.htmlInput.style.height=t.geometry.height+"px",this.htmlInput.style.textAlign=4===(e=t.geometry.horizontalAlign)?"justify":2===e?"right":3===e?"center":"left")}},BG=(e,t)=>
vendor: 6,295 bytes, line 8472
8472{if("string"==typeof e){let i=t.data(e);if(i)return BG(i.value,t)}return yg.getDisplayedValue(e)};function BH(e,t){let i=e.text,r="";if("string"==typeof i){let e=t.variables.data(r);e&&(r=BG(e.value,t.variables))}else r=i.textValue.toString();return r}var BW=class extends RR{constructor(e,t){super(e),this.eventManager=t,this._textInputs=[],this.sceneHelpers=new nb,this.helper=new TR,this._onMouseDownFocusIn=e=>{if(u1.length>1)return;this.eventContext.updateRaycaster(e);let t=null;if(this.eventContext.raycaster){for(let e of this._textInputs)if(this.eventContext.raycaster.intersectObject(e,!0).length>0){t=e;break}}this.focusOnTextInput(t),this._onCaretUpdate(),this._onMouseUp(),this.textInputManager.doubleClickHandler.start(this.eventContext.domElement),this.textInputManager.doubleClickHandler._onMouseDown(e),this._onMouseDown(e)},this.onExit=()=>{let{virtualInput:e}=this.textInputManager;if(null===e)return;let t=this.textInputManager.htmlInput;this.helper.hide(),t?.setSelectionRange(t.value.length,t.value.length),this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!0);let{domElement:i}=this.eventContext;i.removeEventListener("pointerdown",this._onMouseDown,!1),i.removeEventListener("pointerup",this._onMouseUp,!1),i.removeEventListener("pointermove",this._onMouseMove,!1),window.removeEventListener("keydown",this._onKeyPress),this.textInputManager.doubleClickHandler.reset(),i.addEventListener("pointerdown",this._onMouseDownFocusIn),this.eventContext.renderer.sceneHelpersOnTop=void 0,this.eventContext.renderer.pipeline.disableHelpers()},this._onMouseDown=e=>{this.eventContext.updateRaycaster(e),this.textInputManager.handleMouseDown(),this.textInputManager.virtualInput&&this.eventContext.raycaster.intersectObject(this.textInputManager.virtualInput,!0).length>0&&this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!1)},this._onMouseUp=()=>{this.textInputManager.handleMouseUp(),this.eventManager.controlsManager.orbitControls&&!this.eventManager.controlsManager.orbitControls.enabled&&(this.eventManager.controlsManager.orbitControls.enabled=!0)},this._onMouseMove=e=>{this.eventContext.updateRaycaster(e),this.textInputManager.handleMouseMove()},this._onTextEdit=e=>{let{htmlInput:t,virtualInput:i,helper:r}=this.textInputManager;if(!t||!i)return;let s=t.value;i.textGeometry.setText(s).then(()=>{this.eventContext.requestRender()});let a=i.data;r.update();let o=a.geometry.text;"string"==typeof o&&this.eventContext.sharedAssets.updateVariable(o,{textValue:s}),this.textInputManager.updateTextInputStyles(),this._onCaretUpdate()},this._onCaretUpdate=e=>{this.textInputManager.handleCaretUpdate(e)},this._onKeyPress=e=>{"Escape"===e.key&&this.onExit()},this.textInputManager=new Bj(this.sceneHelpers,e.raycaster,e.sharedAssets,e.requestRender,this.onExit)}connect(){let e=[];if(this.eventContext.scene.traverseEntity(t=>{t instanceof PL&&e.push(t)}),this._textInputs=e,0===e.length)return;let{domElement:t}=this.eventContext;t.addEventListener("pointerdown",this._onMouseDownFocusIn),this.textInputManager.connect();let i=this.textInputManager.createInput();document.body.appendChild(i),i.style.display="none",i.addEventListener("keyup",this._onCaretUpdate),i.addEventListener("keydown",this._onCaretUpdate),i.addEventListener("beforeinput",this._onCaretUpdate),i.addEventListener("paste",this._onCaretUpdate),i.addEventListener("cut",this._onCaretUpdate),i.addEventListener("select",this._onCaretUpdate),i.addEventListener("selectstart",this._onCaretUpdate)}disconnect(){let e=this.textInputManager.htmlInput,{domElement:t}=this.eventContext;t.removeEventListener("pointerdown",this._onMouseDownFocusIn),e?.removeEventListener("keyup",this._onCaretUpdate),e?.removeEventListener("keydown",this._onCaretUpdate),e?.removeEventListener("beforeinput",this._onCaretUpdate),e?.removeEventListener("paste",this._onCaretUpdate),e?.removeEventListener("cut",this._onCaretUpdate),e?.removeEventListener("select",this._onCaretUpdate),e?.removeEventListener("selectstart",this._onCaretUpdate),this._textInputs.forEach(e=>{let t=BH(e.data.geometry,this.eventContext.sharedAssets.data);e.textGeometry.setText(t)}),t.removeEventListener("pointerdown",this._onMouseDown,!1),t.removeEventListener("pointerup",this._onMouseUp,!1),t.removeEventListener("pointermove",this._onMouseMove,!1),window.addEventListener("keydown",this._onKeyPress),this.eventContext.renderer.sceneHelpersOnTop=void 0,this.eventContext.renderer.pipeline.disableHelpers(),this.textInputManager.disconnect()}focusOnTextInput(e){this.textInputManager.focus(e),this.textInputManager.onTextMaterialChanged();let t=this.textInputManager.htmlInput;if(!t||null===e)return;this.textInputManager.updateTextInputStyles(),this.eventContext.renderer.sceneHelpersOnTop=this.sceneHelpers,this.eventContext.renderer.pipeline.enableHelpers(),this.textInputManager.isDragging=!1;let i=BH(e.textGeometry.userData.parameters,this.eventContext.sharedAssets.data);t.value=i,t.setSelectionRange(0,0),this.textInputManager.helper.show(e),t.style.display="block",t.addEventListener("input",this._onTextEdit),this.textInputManager.updatePlane();let{domElement:r}=this.eventContext;r.removeEventListener("pointerdown",this._onMouseDownFocusIn),r.addEventListener("pointerdown",this._onMouseDown,!1),r.addEventListener("pointerup",this._onMouseUp,!1),r.addEventListener("pointermove",this._onMouseMove,!1),window.addEventListener("keydown",this._onKeyPress)}},Bq=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.events=[],this.onVoice=({value:e,frequencies:t})=>{this.events.forEach(e=>{e.dispatch()})}}connect(){this.openAIRealtime=this.eventContext.sharedAssets.openAIRealtime,this.openAIRealtime&&(this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"AIAssistantListener"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new BX(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),this.openAIRealtime.on("voice",this.onVoice))}disconnect(){this.openAIRealtime?.off("voice",this.onVoice)}},BX=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.actions=OX(t,t.actions,r,s,a,i)}dispatch(){this.dispatchActions(this.actions)}
vendor: 1,591 bytes, line 8472
8472dispatchActions(e){e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}},BY=class extends RR{constructor(e,t){super(e),this.eventManager=t,this.events=[],this.onTriggerEvent=({description:e,direction:t})=>{let i=this.events.find(t=>t.data.description===e);i&&("backward"===t?i.dispatchReverse():i.dispatch())}}connect(){this.openAIRealtime=this.eventContext.sharedAssets.openAIRealtime,this.openAIRealtime&&(this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"AIAssistantTrigger"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new BQ(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),this.openAIRealtime.on("trigger_event",this.onTriggerEvent))}disconnect(){this.openAIRealtime?.off("trigger_event",this.onTriggerEvent)}},BQ=class{constructor(e,t,i,r,s,a){this.id=e,this.data=t,this.object=i,this.actions=OX(t,t.actions,r,s,a,i)}dispatch(){let e=this.actions;
8472e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}dispatchReverse(){let e=this.actions;e.Transition.forEach(e=>e.reverseFromCurrent()),e.Particles.forEach(e=>e.reverseFromCurrent()),e.Animation.forEach(e=>e.reverseFromCurrent()),e.SwitchCamera.forEach(e=>e.reverseFromCurrent()),e.Create.forEach(e=>e.dispatchStop())}},BK=class{constructor(e,t,i,r,s){this.publish=e,this.controlsManager=t,this.animationControls=i,this.eventContext=r,this.sharedVariables=s,this.isEnabled=!1,this.activateCount=0,this.needsMouse=!1,this.needsRaycast=!1,this.onTouchMovePreventScroll=e=>{let t=window.parent!==window,i=document.documentElement.scrollHeight>document.documentElement.clientHeight||document.documentElement.scrollWidth>document.documentElement.clientWidth;(e.touches.length>1||this.preventTouchScroll||!1===t&&!1===i)&&e.preventDefault()},this.onMouseWheelPreventScroll=e=>{this.preventScroll&&e.preventDefault()},this.onMouseMove=e=>{this.eventContext.sharedAssets.mouseProperty={...this.getMousePosition(e),pressed:e.buttons>0}},this.onMouseDown=e=>{this.eventContext.sharedAssets.mouseProperty={...this.getMousePosition(e),pressed:!0}},this.onMouseUp=e=>{this.eventContext.sharedAssets.mouseProperty={...this.getMousePosition(e),pressed:!1}},this.getMousePosition=e=>{let{domRect:t}=this.eventContext,{pageX:i,pageY:r}=e.touches?.length>0?e.touches[0]:e;return{x:i-(t.left+window.scrollX),y:r-(t.top+window.scrollY)}},this.stopRaycast=e.stopRaycast,this.preventScroll=e.preventScroll,this.preventTouchScroll=e.preventTouchScroll,this.hideCursor=e.hideCursor,this.requestRender=r.requestRender}activate(e=!1){if(this.isEnabled)return;this.isEnabled=!0,this.initializeActionsDependentStates(),this.needsMouse&&(this.eventContext.domElement.addEventListener("pointermove",this.onMouseMove),this.eventContext.domElement.addEventListener("pointerdown",this.onMouseDown)),this.handlers={Spline:new RN(this.eventContext),VariableChange:new Lz(this.eventContext,this.sharedVariables,this,this.needsMouse,this.needsRaycast),API:new BL(this.eventContext,this),WEBHOOK:new Bz(this.eventContext,this),AIAssistantListener:new Bq(this.eventContext,this),AIAssistantTrigger:new BY(this.eventContext,this),Conditional:new Rq(this.eventContext,this),Start:new LL(this.eventContext,this),Basic:new RU(this.eventContext,this,this.needsRaycast),MouseHover:new LP(this.eventContext,this),Scroll:ne
8472w LO(this.eventContext,this),Follow:new Lh(this.eventContext,this),DragDrop:new R7(this.eventContext,this),LookAt:new LA(this.eventContext),Resize:new BR(this.eventContext,this),Textfields:new BW(this.eventContext,this)};let{page:t,domElement:i}=this.eventContext;this.hideCursor&&(i.style.cursor="none"),t.traverseEntity(e=>{e.addEventListener("requestRender",this.requestRender)}),Object.values(this.handlers).forEach(e=>e.connect()),i.addEventListener("wheel",this.onMouseWheelPreventScroll),i.addEventListener("touchmove",this.onTouchMovePreventScroll),this.activateCount++,e||(this.eventContext.sharedAssets.openAIRealtime?.connect(),this.eventContext.sharedAssets.openAIRealtime?.start())}deactivate(e=!1){if(!this.isEnabled)return;this.isEnabled=!1,this.eventContext.domElement.removeEventListener("pointermove",this.onMouseMove),this.eventContext.domElement.removeEventListener("pointerdown",this.onMouseDown),this.eventContext.domElement.removeEventListener("pointerup",this.onMouseUp),this.eventContext.sharedAssets.mouseProperty=null,this.eventContext.sharedAssets.raycastProperty=null;let{page:t,domElement:i}=this.eventContext;if(i.style.cursor="",Object.values(this.handlers).forEach(e=>e.disconnect()),this.controlsManager.gameControl?.disposeActions(),this.controlsManager.disconnectEvents(),t.traverseEntity(e=>{e.removeEventListener("requestRender",this.requestRender),e.destroyedInAction=!1}),i.removeEventListener("touchmove",this.onTouchMovePreventScroll),i.removeEventListener("wheel",this.onMouseWheelPreventScroll),this.animationControls.onExitPlayMode(),!e){let e=this.eventContext.sharedAssets.openAIRealtime;e?.disconnect(),e?.stop().then(()=>{e?.disconnect()})}}get isPaused(){return this.isEnabled}pause(){this.deactivate()}resume(){this.activate()}reset(){this.deactivate(!0),this.activate(!0),this.controlsManager.deactivate(),this.controlsManager.activate(this),this.controlsManager.page.updateMatrixWorld(!0),this.controlsManager.rebuildBVH()}updateUseWindowEvents(e){let t=this.isEnabled;t&&this.deactivate(),this.eventContext.useWindowEvents=e,t&&this.activate()}initializeActionsDependentStates(){let e=this.eventContext.sharedAssets;e.resetDynamicVariablePlayState();let t=i=>{if("Conditional"===i.data.type&&(i.data.ifActions.forEach(t),i.data.elseActions.forEach(t)),"Conditional"===i.data.type||"SetVariable"===i.data.type)for(let e of"Conditional"===i.data.type?i.data.condition:i.data.expression)"id"in e&&Array.isArray(e.id)&&("mouse"===e.id[0]&&(this.needsMouse=!0),"raycast"===e.id[0]&&(this.needsRaycast=!0));"DynamicVariablePlay"===i.data.type&&""!==i.data.variableId&&("Play"===i.data.mode||"PlayPause"===i.data.mode||"Toggle"===i.data.mode)&&e.setDynamicVariablePlayState(i.data.variableId,"Stopped")};this.eventContext.page.traverseEntity(e=>{if(e.data?.events.length)for(let i of e.data.events)if("VariableChange"===i.data.type&&("mouseProperty"===i.data.variableId&&(this.needsMouse=!0),"raycastProperty"===i.data.variableId&&(this.needsRaycast=!0)),"Conditional"===i.data.type)for(let e of["inActions","outActions"])i.data[e].forEach(t);else if("DragDrop"===i.data.type)for(let e of["drag","drop"])i.data.dragDropActions[e].forEach(t);else if("GameControl"===i.data.type)for(let e of["idle","move","jump","run"])i.data.gameActions[e].forEach(t);else if("Resize"===i.data.type)for(let e of i.data.breakpoints)e.data.actions.forEach(t);else"LookAt"===i.data.type||"API"===i.data.type||i.data.actions.forEach(t)})}},BZ=class{constructor(e,t,i,r,s){this._aspect=1,this.enableResponsive=!1,this._renderer=e,this._camera=t,this._frameSize=new tQ().copy(i),this._editorSize=new tQ().copy(r),this._aspect=t.aspect,this._fov=s??t.fov}set frameSize(e){this._frameSize.copy(e)}updateRenderer(){this._renderer&&this._renderer.setSize(this._frameSize.x,this._frameSize.y)}updateViewport(){if(!this._renderer||!this._camera||"PerspectiveCamera"!==this._camera.cameraType)return;let e=this._frameSize.x,t=this._frameSize.y,i=this._editorSize.y;this._aspect=e/t,t<=i&&(this._camera.zoom*=i/t),this._renderer.setViewport(0,0,e,t)}
8472updateCamera(e=!0){if(this._camera){if("PerspectiveCamera"===this._camera.cameraType){let t=this._frameSize.y,i=this._editorSize.y,r=this._fov;if(e&&t>i)r*=t/i*(1-((t-1080)/1080*14+1)/100);this._camera.aspect=this._aspect,this._camera.fov=r,this._camera.updateProjectionMatrix()}else this._camera.setViewplaneSize(this._frameSize.x,this._frameSize.y,this.enableResponsive)}}setCamera(e){this._camera=e,this._aspect=e.aspect,this._fov=e.fov}revert(){let e=window.innerWidth,t=window.innerHeight;this._renderer&&(this._renderer.setViewport(0,0,e,t),this._renderer.setSize(e,t)),this._camera&&(this._camera.aspect=e/t,this._camera.fov=this._fov,this._camera.setViewplaneSize(e,t,this.enableResponsive),this._camera.updateProjectionMatrix())}},BJ=class{get sharedAssets(){return this.shared}constructor(e,t={},i=!0){this.shared=new Mp(e.shared,t,!0,i),this.scene=new DU(e.scene,this.sharedAssets),this.shared.setEntityOpContext({scene:this.scene,shared:this.shared})}reset(e,t){this.scene.clearScene(),this.sharedAssets.reset(e.shared),this.scene.resetAfterClear(e.scene,this.sharedAssets)}resetPersonalCameraFromDocumentData(){for(let e of this.scene.children)e instanceof PD&&!e.uiScene&&e.personalCamera.updateState(e.data.camera,{scene:this.scene,shared:this.shared})}dispose(){this.scene.dispose(),this.shared.dispose()}gc(){this.shared.geometryCache.startGc(),this.shared.geometryCache2.startGc(),this.scene.traverseEntity(e=>{e instanceof Mb&&e.markGeometryAsReachable(this.shared)}),this.shared.geometryCache.endGc(),this.shared.geometryCache2.endGc()}},B$=class{constructor({x:e=10,y:t=10}){this._startTime=0;let i=document.getElementById("spe-perfs");i?this.element=i:(this.element=document.createElement("div"),document.body.appendChild(this.element),this.element.style.position="absolute",this.element.style.zIndex="10000",this.element.style.fontFamily="monospace",this.element.style.background="black",this.element.style.color="white",this.element.style.padding="10px",this.element.style.opacity="0.5",this.element.style.fontSize="11px",this.element.setAttribute("id","spe-perfs")),this.element.style.left=`${e}px`,this.element.style.top=`${t}px`}dispose(){this.element.parentElement?.removeChild(this.element)}start(){this._startTime=performance.now()}end(){let e=performance.now()-this._startTime;this.element.innerHTML=e.toFixed(3)+" ms"}};function B0(e){return e instanceof MM?"SubdivObject":"NonParametricGeometry"===e.geometry.type?"NonParametric":"Mesh"}var B1=tw(tP(),1),B2=new tQ,B3=class{constructor(e,{renderOnDemand:t,renderMode:i="auto"}={}){this._viewportMode=1,this._viewportWidth=window.innerWidth,this._viewportHeight=window.innerHeight,this._proxyObjectCache=new Map,this._variablesCache=new Map,this._isPaused=!1,this._renderRequested=!1,this._skipRender=!1,this.time=performance.now(),this.dt=0,this.currentTAAFrame=0,this.disposed=!1,this._requestRenderAutoMode=()=>{this._skipRender=!1},this.requestRender=()=>{this._renderRequested=!0},this.render=e=>{if(this.time=e,this._lastTime&&(this.dt=this.time-this._lastTime),this._lastTime=this.time,this._perfs?.start(),!this._renderer||!this._isPaused&&("manual"===this.renderMode&&!this._renderRequested||"auto"===this.renderMode&&this._skipRender)){this._perfs?.end();return}if(this._renderRequested=!1,this._skipRender=!0,this._controls&&(this._skipRender=this._controls.update(this.dt)),this._eventManager&&(this._eventManager.handlers?.Start.hasVideoAction||this._eventManager.handlers?.Basic.hasVideoAction||this._eventManager.handlers?.Conditional.hasVideoAction)&&(this._skipRender=!1),this._animationControls?.update(this.dt),this._skipRender?(this.currentTAAFrame++,this.currentTAAFrame<32?this._skipRender=!1:this.currentTAAFrame=0):this.currentTAAFrame=0,this._scene?.traverseVisibleEntity(e=>{"ParticleSystem"===e.type&&(e.update(this.dt),this._skipRender=!1)}),this._scene&&this._scene.activeCamera!==this._camera&&(this._camera=this._scene.activeCamera),this._eventManager?.isEnabled&&((this._eventManager.handlers?.Follow).onAnimationFrameDamping(),(this._eventManager.handlers?.LookAt).onAnimationFrameDamping(),(this._eventManager.handlers?.DragDrop).onAnimationFrameDamping()),this._scene&&this._camera){
8472if(this._scene.pathConstraints.applyConstraints(this._scene),this._renderer.sceneTransitionTimeRemaining>0){this._renderer.sceneTransitionTimeRemaining-=this.dt;let e=1-this._renderer.sceneTransitionTimeRemaining/this._renderer.sceneTransitionDuration;this._renderer.pipeline.sceneTransitionPass.uniforms.mixRatio.value=e,this._skipRender=!1}else this._renderer.pipeline.sceneTransitionFromTexture=null;this._renderer.renderSplineScene(this._scene,this._camera)}this.canvas.dispatchEvent(this._renderedEvent),this._perfs?.end()},this._resize=e=>{if(this._renderer){if(1===this._viewportMode&&this._frameView&&(this._frameView.frameSize=B2.set(this._viewportWidth,this._viewportHeight)),e){let e=this._viewportWidth,t=this._viewportHeight;this._renderer.setSize(e-1,t-1,!1),this._renderer.setSize(e,t,!1)}else this._renderer.setSize(this._viewportWidth,this._viewportHeight,!1);if(this._camera=this._scene?.activeCamera,this._scene?.updateViewPlaneSize(this._frameView?.frameSize?.x??this._viewportWidth,this._frameView?.frameSize?.y??this._viewportHeight,this._frameView?.enableResponsive??!1),this._camera){let e=Object.values(this._data?.frames??{})[0].preset??"fullscreen";this._frameView?.setCamera(this._camera),this._frameView?.updateCamera("fullscreen"!==e),"PerspectiveCamera"===this._camera.cameraType&&(this._camera.aspect=this._viewportWidth/this._viewportHeight),this._camera.updateProjectionMatrix()}this.eventManager&&(this.eventManager.eventContext.domRect=this.canvas.getBoundingClientRect()),this._requestRenderAutoMode()}},this._debouncedResize=uI(this._resize,10),this._onScroll=e=>{this.eventManager&&(this.eventManager.eventContext.domRect=this.canvas.getBoundingClientRect())},this.canvas=e,this.renderMode=t?"auto":i,this._renderedEvent=new CustomEvent("rendered",{bubbles:!0}),Object.defineProperty(this._renderedEvent,"target",{writable:!1,value:this}),window.location.search.includes("perfs")&&(this._perfs=new B$({x:10,y:10})),e.addEventListener("pointerdown",u5,!0),e.addEventListener("pointerdown",u8,!0),e.addEventListener("pointermove",u8,!0),e.addEventListener("pointerup",u6,!0),e.addEventListener("pointercancel",u6,!0),e.addEventListener("pointerleave",u6,!0),window.addEventListener("keydown",u7,!0),window.addEventListener("keyup",pe,!0)}async load(e,t,i){let r;r="The Spline Runtime only accepts .splinecode files that are generated from Spline export panel.",e.endsWith(".spline")?console.warn(r+" The .spline files are only meant to be used by the Editor."):e.endsWith(".splinecode")||console.warn(r),this.disposed=!1;let s=await (await fetch(e,i)).arrayBuffer();await this.start(s,{variables:t})}async start(e,{interactive:t=!0,variables:r}={}){let s,a,o,l;if(this.disposed)return;let h=await BP(e);this._data=h;let c=(s=[],h.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&"NonParametricGeometry"===t.geometry.type&&void 0!==t.geometry.data.draco&&s.push(t)}),s);h.version&&(0,B1.default)(h.version,"1.9.59")>0&&console.warn("Your .splinecode file is more recent than the library. Please upgrade @splinetool/runtime to the latest version."),await Promise.all([c.length&&(th||(th=new BE).setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.2/").preload(),th.decoderPending),Ex(h)&&(_V||(_V=async function(){let e=i.e(869).then(i.bind(i,10869)),[t,r]=await Promise.all([e,fetch("https://unpkg.com/@splinetool/[email protected]/build/boolean.wasm").then(e=>e.arrayBuffer())]),s=t.default,a=await s({wasmBinary:r});_U(a)}())),(a=!1,h.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&"SubdivGeometry"===t.geometry.type&&(a=!0)}),a&&function(){if(!w2)return w8||(w8=e());async function e(){let e=i.e(8303).then(i.bind(i,68303)),[t,r]=await Promise.all([e,fetch("https://unpkg.com/@splinetool/[email protected]/build/process.wasm").then(e=>e.arrayBuffer())]),s=t.default,a=await s({wasmBinary:r});wJ(a),w2=!0}}()),yd.physicsEnabled(h.scene.objects)&&(pw||(pw=async function(){let e=await i.e(1733).then(i.bind(i,25309));await e.init(),ph(e)}())),MH(h)&&function(){if(AU=!0,!Aj)return MW||(MW=e());async function e(){let e=await i.e(8734).then(i.bind(i,60413));AF(e),Aj=!0}}(),DT(h)&&function(){if(!Dz)return D8||(D8=e());async function e(){let e=await i.e(8310).then(i.bind(i,38310));DR(e),Dz=!0}}(),(o=!1,h.scene.objects.traverse((e,t)=>
8472{if(void 0===t.events||!1===Array.isArray(t.events))return!0;let i=[];t.events.forEach(e=>{"dragDropActions"in e.data?(i.push(...e.data.dragDropActions.drag),i.push(...e.data.dragDropActions.drop)):"inActions"in e.data?(i.push(...e.data.inActions),i.push(...e.data.outActions)):"gameActions"in e.data?(i.push(...e.data.gameActions.idle),i.push(...e.data.gameActions.move),i.push(...e.data.gameActions.jump),i.push(...e.data.gameActions.run)):"breakpoints"in e.data?e.data.breakpoints.forEach(e=>{i.push(...e.data.actions)}):"actions"in e.data&&i.push(...e.data.actions),o=o||i.some(e=>"Audio"===e.data.type)})}),o&&function(){if(!AL)return AB||(AB=e());async function e(){await i.e(438).then(i.bind(i,60438)),AD(void 0!==window?window:global),AL=!0}}()),T2(h)&&function(){if(!T1)return T9||(T9=e());async function e(){let e=await i.e(8040).then(i.bind(i,18040));Tq(e.default??e),T1=!0}}(),(l=!1,h.scene.objects.forEach(e=>{"Page"===e.data.type&&!l&&e.data.publish.gameControlObject&&yd.traverseModuleInstances(h,e.id,(e,t,i)=>{for(let e of i)"GameControl"===e.data.type&&e.data.navmesh.enabled&&(l=!0)})}),l&&(pl||(pl=async function(){let e=i.e(6568).then(i.bind(i,66568)),[t,r]=await Promise.all([e,fetch("https://unpkg.com/@splinetool/[email protected]/build/navmesh.wasm").then(e=>e.arrayBuffer())]),s=t.default,a=await s({wasmBinary:r});po(a)}())))].filter(Boolean)),c.length&&await BD(c),this._eventManager?.deactivate(),this._controls?.deactivate(),this._scene?.dispose();let d=new BJ(h);if(d.resetPersonalCameraFromDocumentData(),this._scene=d.scene,this._sharedAssetsManager=d.sharedAssets,this._camera=this._scene.activeCamera,window.location.search.includes("merge-geometries")){let e=performance.now();!function(e,t){let i,r;let s=(i={},t.traverseEntity(t=>{if(!t.visible||!(t instanceof SP)||"Mesh"!==t.type||Array.isArray(t.material)||t.states&&Object.keys(t.states).length)return;let r=t.parent;for(;r;){if(r instanceof SP&&t.states&&Object.keys(t.states).length)return;r=r.parent}let s=t.material.uuid,a=e.shared.materials[s];if(a){if(!vk.isMergable(a))return}else{let i=e.scene.objects.get(t.uuid)?.data;if(i&&"material"in i&&"string"!=typeof i.material){if(!vk.isMergable(i.material))return;s=vk.getHash(i.material)}}i[s]||(i[s]={});let o=i[s][B0(t)];if(o){if(o.push(t),t.cloner)for(let e of t.cloner.children)o.push(e)}else if(i[s][B0(t)]=[t],t.cloner)for(let e of t.cloner.children)i[s][B0(t)].push(e)}),i),a=(r=0,Object.values(s).forEach(e=>{Object.values(e).forEach(e=>{let t=e.length;t>r&&(r=t)})}),r),o=Array(a),l=0,h=Array(a),c=0,d=Array(a),u=0,p=Array(a),f=0;for(let[e,i]of Object.entries(s))for(let r of Object.values(i)){if(c=0,u=0,r.forEach(e=>{e instanceof SP&&(h[c++]=e.geometry.clone(),d[u++]=e)}),u<2)continue;for(let e=0;e<u;e++)d[e].updateWorldMatrix(!0,!1),h[e].applyMatrix4(d[e].matrixWorld),0>d[e].matrixWorld.determinant()&&function(e){let t;if(e.index)for(let i=0;i<e.index.array.length;i+=3)t=e.index.array[i],e.index.array[i]=e.index.array[i+2],e.index.array[i+2]=t}(h[e]);let i=gQ(h.slice(0,c),!1);if(i){let r;"SubdivObject"===e&&console.warn("Turning subdiv object into mesh"),(r=new rK(i,d[0].material)).castShadow=d[0].castShadow,r.receiveShadow=d[0].receiveShadow,t.add(r);let a=e=>{for(let t of(f=0,e))t.children&&a(t.children),t instanceof SP&&(Array.isArray(t.material)||s[t.material.uuid]&&s[t.material.uuid][B0(t)]&&s[t.material.uuid][B0(t)].length>1||(p[f++]=t));for(let e=0;e<f;e++)t.attach(p[e])};for(let e=0;e<u;e++){let t=d[e];a(t.children),o[l++]=t}}}for(let e=0;e<l;e++)o[e].removeFromParent()}(h,d.scene),console.log("Merged geometries in ",performance.now()-e," ms")}Ex(h)&&this._scene.traverse(e=>{E_(e)&&e.recomputeBoolean()}),this._sharedAssetsManager.setRequestRender(()=>{this._requestRenderAutoMode(),this._scene?.traverse(e=>{e instanceof M9&&e.pendingMediaLoad&&e.update()})}),this._scene?.traverse(e=>{"ParticleSystem"===e.type&&(e.wakeUp(),e.data.autoPlay?e.start():e.stop())});let u=Object.keys(h.shared.fonts).map(e=>this._sharedAssetsManager.getFont(e).loadingPromise);if(Promise.all(u).then(()=>{d.scene.markNeedsUpdateRendererDirty(),this._requestRenderAutoMode()}),MH(h)&&function(e){if(yd.physicsEnabled(e.scene.objects))return!0;let t=!1;
8472return e.scene.objects.traverse((e,i)=>{if(i.events){if(Array.isArray(i.events)){for(let e of i.events)if(!0!==e.data.disabled&&"GameControl"===e.data.type&&e.data.collisionEnabled){t=!0;break}}else for(let e of Object.values(i.events))if(!0!==e.disabled&&"GameControl"===e.type&&e.collisionEnabled){t=!0;break}}}),t}(h)&&await Promise.all(u),T2(h)){let e=[];this._scene.traverseEntity(t=>{(t instanceof Pk||t instanceof PD)&&t.uiCanvas&&e.push(t.uiCanvas)}),await Promise.all(e.map(e=>e.promise))}if(this._scene.rewriteEventsBeforeGoToPlayMode(),OM(this._scene.activePage,this._sharedAssetsManager),!this._renderer&&(this._renderer=new TT({canvas:this.canvas,antialias:!1,alpha:!0,stencil:!1,depth:!1,powerPreference:"high-performance"}),this._renderer.hdTransmission=!0===h.scene.publish.hdTransmission,this._renderer.setPixelRatio(window.devicePixelRatio),this._renderer.pipeline.enableUIOverlay(),this._renderer.pipeline.addEventListener("smaaloaded",this._requestRenderAutoMode),h.shared.images.SplineWatermark)){let e=this._sharedAssetsManager.getImage("SplineWatermark");await e.loadPromise;let t=e.getTexture(1001);this._renderer.pipeline.setWatermark(t)}DT(h)&&this._scene.initializeSplatViewer(),void 0!==h.scene.blueNoiseTextureData&&this._renderer.pipeline.updateBlueNoiseTexture(h.scene.blueNoiseTextureData);let p=Object.values(h.frames)[0];if(this._frameView?this._frameView.setCamera(this._camera):("fullscreen"===p.preset?(this._viewportMode=1,this.canvas.style.display="block",this.canvas.parentElement&&(this._viewportWidth=this.canvas.parentElement.clientWidth||300,this.canvas.style.width="100%"),this.canvas.parentElement&&(this._viewportHeight=this.canvas.parentElement.clientHeight||150,this.canvas.style.height="100%")):(this._viewportMode=2,this._viewportWidth=p.size[0],this._viewportHeight=p.size[1],this.canvas.style.width=`${this._viewportWidth}px`,this.canvas.style.height=`${this._viewportHeight}px`),this._renderer.setSize(this._viewportWidth,this._viewportHeight,!1),this._frameView=new BZ(this._renderer,this._camera,new tQ(this._viewportWidth,this._viewportHeight),new tQ(window.innerWidth,window.innerHeight)),this._frameView.enableResponsive=(p.allowResponsive??!1)&&"fullscreen"===p.preset),t){let e=new RO(this._renderer,this.data.scene.publish,this._scene,()=>this._scene.activeCamera,this._sharedAssetsManager,this._requestRenderAutoMode,!0,p);this._scene.updateMatrixWorld(!0),this._controls=new Bw(e),this._animationControls=new BA(this._scene,this._requestRenderAutoMode),this._eventManager=new BK(h.scene.publish,this._controls,this._animationControls,e,h.shared.variables),this._eventManager.activate(),this._controls.activate(this._eventManager)}this._resize(),this._scene.activePage.data.postprocessing.depthOfField.enabled&&Promise.all(this._sharedAssetsManager.getImageLoadPromises()).then(()=>{this._resize(!0)}),void 0!==r&&this.setVariables(r),0===this.dt&&(this.render(performance.now()),setTimeout(()=>{this._renderer?.setAnimationLoop(this.render)},0)),this._resizeObserverTimeout=setTimeout(()=>{!this._resizeObserver&&this.canvas.parentElement&&(this._resizeObserver=new ResizeObserver(()=>{this._viewportWidth=this.canvas.clientWidth,this._viewportHeight=this.canvas.clientHeight,this._debouncedResize()}),this._resizeObserver.observe(this.canvas.parentElement))},300),document.addEventListener("scroll",this._onScroll)}setVariables(e){if(void 0!==this._data)for(let[t,i]of Object.entries(e))this.setVariable(t,i)}setVariable(e,t){let i=this._getVariableByName(e);if(!i||"dynamicVariableType"in i.data)void 0===i?console.warn(`No variable named ${e} was found in your Spline file. Make sure to create it from Spline editor.`):"dynamicVariableType"in i.data&&console.warn(`Dynamic variables like ${e} cannot be updated from code.`);else{let e=t;"number"==typeof i.data.value?e="number"==typeof t?t:"boolean"==typeof t?!0===t?1:0:parseFloat(t):"boolean"==typeof i.data.value?e="number"==typeof t?!!t:"boolean"==typeof t?t:"false"!==t.toLocaleLowerCase()&&!!t:"string"!=typeof i.data.value&&void 0!==i.data.value.textValue&&(e=t.toString());let r="string"==typeof e?{textValue:e}:e;this._sharedAssetsManager?.updateVariable(i.id,r),this.requestRender(),this._requestRenderAutoMode()}}getVariables(){let e={};
8472return this._data&&this._data.shared.variables.forEach(t=>{void 0===e[t.data.name]&&(e[t.data.name]=this._getVariableValue(this._sharedAssetsManager.getVariable(t.id)))}),e}getVariable(e){let t=this._getVariableByName(e);if(t){let e=this._sharedAssetsManager.getVariable(t.id);return this._getVariableValue(e)}}_getVariableValue(e){return"string"!=typeof e&&yg.isTextValue(e)?yg.getDisplayedValue(e):e}_getVariableByName(e){if(this._data){if(this._variablesCache.has(e))return this._variablesCache.get(e);let t=this._data.shared.variables.find(t=>t.data.name===e);return t&&this._variablesCache.set(e,t),t}}findObjectById(e){let t=this._scene?.getObjectByProperty("uuid",e);return this._createProxyObject(t)}findObjectByName(e){let t=this._scene?.getObjectByName(e);return this._createProxyObject(t)}getAllObjects(){let e=[];return this._scene?.traverseEntity(t=>{if(t.uuid!==mh&&!this._scene.isInvisibleObjects(t)&&!(t instanceof PD)){let i=this._createProxyObject(t);i&&e.push(i)}}),e}getSplineEvents(){return(this._eventManager?.handlers?.Spline).splineEvents}emitEvent(e,t){(this.findObjectById(t)||this.findObjectByName(t))?.emitEvent(e)}emitEventReverse(e,t){(this.findObjectById(t)||this.findObjectByName(t))?.emitEventReverse(e)}addEventListener(e,t){this.canvas.addEventListener(e,t)}removeEventListener(e,t){this.canvas.removeEventListener(e,t)}setZoom(e){this._controls?.orbitControls instanceof Be&&this._controls?.orbitControls.setZoom(e)}get eventManager(){return this._eventManager}get controls(){return this._controls}setSize(e,t){this._viewportWidth=e,this._viewportHeight=t,this._viewportMode=2,this._resize()}setBackgroundColor(e){let{r:t,g:i,b:r,a:s}={r:0,g:0,b:0,a:1},a=new SN(t,i,r,s);try{a.setStyle(e)}catch{console.error("This is not a valid css color",e)}this._scene?.activePage.setBackgroundColor(a),this._requestRenderAutoMode()}dispose(){var e;this.disposed=!0,this._eventManager?.deactivate(),this._scene?.dispose(),this._sharedAssetsManager?.dispose(),this._proxyObjectCache.forEach(e=>{hA.unsubscribe(e)}),this._variablesCache.clear(),this._renderer?.setAnimationLoop(null),this._renderer?.dispose(),this._renderer=void 0,this._sharedAssetsManager?.dispose(),this._resizeObserver&&(this._resizeObserver.disconnect(),this._resizeObserver=void 0),void 0!==this._resizeObserverTimeout&&clearTimeout(this._resizeObserverTimeout),this.canvas.style.width="",this.canvas.style.height="",this.canvas.removeAttribute("width"),this.canvas.removeAttribute("height"),this._frameView&&(this._frameView=void 0),this._controls?.deactivate(),this.dt=0,(e=this.canvas).removeEventListener("pointerdown",u5,!0),e.removeEventListener("pointerdown",u8,!0),e.removeEventListener("pointermove",u8,!0),e.removeEventListener("pointerup",u6,!0),e.removeEventListener("pointercancel",u6,!0),e.removeEventListener("pointerleave",u6,!0),window.removeEventListener("keydown",u7,!0),window.removeEventListener("keyup",pe,!0),document.removeEventListener("scroll",this._onScroll)}get isStopped(){return this._isPaused}stop(){this._isPaused||(this._renderer?.setAnimationLoop(null),this._isPaused=!0,this._eventManager?.pause(),this._controls?.orbitControls&&(this._controls.orbitControls.enabled=!1))}play(){this._isPaused&&(this._isPaused=!1,this._eventManager?.resume(),this._controls?.orbitControls&&(this._controls.orbitControls.enabled=!0),this._renderer?.setAnimationLoop(this.render))}setGlobalEvents(e){this._eventManager?.updateUseWindowEvents(e)}get data(){return this._data}_createProxyObject(e){let t;if(null==e)return;if(this._proxyObjectCache.has(e.uuid))return this._proxyObjectCache.get(e.uuid);e.traverseAncestors(e=>{e instanceof PD&&(t=e.name)});let i=hA({name:e.name,uuid:e.uuid,visible:e.visible,intensity:e.intensity,position:e.position,rotation:e.rotation,scale:e.scale,type:e.data.type,page:t,parentUuid:e.parent instanceof PD||e instanceof DU?void 0:e.parent?.uuid,emitEvent(t){e.dispatchEvent({type:"userEvent",eventName:t})},emitEventReverse(t){e.dispatchEvent({type:"userEvent",eventName:t,reverse:!0})}},(t,i)=>{"object"!=typeof e[t]&&Object.getOwnPropertyDescriptor(e,t)?.writable&&(e[t]=i),this._requestRenderAutoMode(),e.updateMatrix()});return this._proxyObjectCache.set(e.uuid,i),i}setUIWasmUrl(e){_W.skiaWasmUrl=e}}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.