uglymol
Version:
Macromolecular Viewer for Crystallographers
1 lines • 126 kB
JavaScript
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).UM={})}(this,function(t){"use strict";function F(t,e,i,r,n,o){if(t<=0||e<=0||i<=0||r<=0||n<=0||o<=0)throw Error("Zero or negative unit cell parameter(s).");this.parameters=[t,e,i,r,n,o];var s=Math.PI/180,a=Math.cos(s*r),h=Math.cos(s*n),l=Math.cos(s*o),c=Math.sin(s*r),d=Math.sin(s*n),u=Math.sin(s*o);if(0===c||0===d||0===u)throw Error("Impossible angle - N*180deg.");var f=(h*l-a)/u,p=f/d,_=Math.sqrt(1-p*p);this.orth=[t,e*l,i*h,0,e*u,-i*f,0,0,i*d*_],this.frac=[1/t,-l/(u*t),-(l*f+h*u)/(d*_*u*t),0,1/(u*e),p/(_*u*e),0,0,1/(d*_*i)]}var e=t.VERSION="0.6.4";function i(t,e){return[e[0]*t[0]+e[1]*t[1]+e[2]*t[2],+e[4]*t[1]+e[5]*t[2],+e[8]*t[2]]}F.prototype.fractionalize=function(t){return i(t,this.frac)},F.prototype.orthogonalize=function(t){return i(t,this.orth)};var o=["HOH"].concat(["ALA","ARG","ASN","ASP","CYS","GLN","GLU","GLY","HIS","ILE","LEU","LYS","MET","MSE","PHE","PRO","SER","THR","TRP","TYR","VAL","UNK"],["DA","DC","DG","DT","A","C","G","U","rA","rC","rG","rU","Ar","Cr","Gr","Ur"]);function s(t){for(var e=[new n],i=e[0].from_pdb(t.split("\n"));null!=i;){var r=new n;i=r.from_pdb(i),0<r.atoms.length&&e.push(r)}return e}function n(){this.atoms=[],this.unit_cell=null,this.space_group=null,this.has_hydrogens=!1,this.lower_bound=[0,0,0],this.upper_bound=[0,0,0],this.residue_map=null,this.cubes=null}n.prototype.from_pdb=function(t){for(var e=0,i=null,r=0,n=null,o=0;o<t.length;o++){var s=t[o],a=s.substring(0,6).toUpperCase();if("ATOM "===a||"HETATM"===a){var h=new _;h.from_pdb_line(s),h.i_seq=r++,this.has_hydrogens||"H"!==h.element||(this.has_hydrogens=!0),h.chain!==i&&e++,h.chain_index=e,i=h.chain,this.atoms.push(h)}else if("ANISOU"===a);else if("CRYST1"===a){var l=parseFloat(s.substring(6,15)),c=parseFloat(s.substring(15,24)),d=parseFloat(s.substring(24,33)),u=parseFloat(s.substring(33,40)),f=parseFloat(s.substring(40,47)),p=parseFloat(s.substring(47,54));this.unit_cell=new F(l,c,d,u,f,p)}else if("TER"===a.substring(0,3))i=null;else if("ENDMDL"===a){for(;o<t.length;o++)if("MODEL "===t[o].substring(0,6).toUpperCase()){n=t.slice(o);break}break}}if(0===this.atoms.length)throw Error("No atom records found.");return this.calculate_bounds(),this.calculate_connectivity(),n},n.prototype.calculate_bounds=function(){for(var t=this.lower_bound=[1/0,1/0,1/0],e=this.upper_bound=[-1/0,-1/0,-1/0],i=0;i<this.atoms.length;i++)for(var r=this.atoms[i],n=0;n<3;n++){var o=r.xyz[n];o<t[n]&&(t[n]=o),o>e[n]&&(e[n]=o)}for(var s=0;s<3;++s)t[s]-=.001,e[s]+=.001},n.prototype.next_residue=function(t,e){for(var i=this.atoms.length,r=(t?t.i_seq:0)+i,n=t?1:0;n<i;n++){var o=(r+(e?-n:n))%i,s=this.atoms[o];if(s.is_main_conformer()&&("CA"===s.name&&"C"===s.element||"P"===s.name))return s}},n.prototype.extract_trace=function(){for(var t=[],e=[],i=null,r=0;r<this.atoms.length;r++){var n=this.atoms[r];if((""===n.altloc||"A"===n.altloc)&&("CA"===n.name&&"C"===n.element||"P"===n.name)){var o=!0;if(null!==i&&i.chain_index===n.chain_index){var s=n.distance_sq(i);("CA"===n.name&&s<=30.25||"P"===n.name&&s<56.25)&&(e.push(n),o=!1)}o&&(2<e.length&&t.push(e),e=[n]),i=n}}return 2<e.length&&t.push(e),t},n.prototype.get_residues=function(){if(null!=this.residue_map)return this.residue_map;for(var t={},e=0;e<this.atoms.length;e++){var i=this.atoms[e],r=i.resid(),n=t[r];void 0===n?t[r]=[i]:n.push(i)}return this.residue_map=t},n.prototype.calculate_tangent_vector=function(t){for(var e=null,i=null,r=3===t[0].resname.length,n=r?"C":"C2'",o=r?"O":"O4'",s=0;s<t.length;s++){var a=t[s];a.is_main_conformer()&&(a.name===n?e=a.xyz:a.name===o&&(i=a.xyz))}if(null===e||null===i)return[0,0,1];var h=[e[0]-i[0],e[1]-i[1],e[2]-i[2]],l=Math.sqrt(h[0]*h[0]+h[1]*h[1]+h[2]*h[2]);return[h[0]/l,h[1]/l,h[2]/l]},n.prototype.get_center=function(){for(var t=0,e=0,i=0,r=this.atoms.length,n=0;n<r;n++){var o=this.atoms[n].xyz;t+=o[0],e+=o[1],i+=o[2]}return[t/r,e/r,i/r]},n.prototype.calculate_connectivity=function(){for(var t=this.atoms,e=new l(t,3,this.lower_bound,this.upper_bound),i=0;i<e.boxes.length;i++){var r=e.boxes[i];if(0!==r.length)for(var n=e.get_nearby_atoms(i),o=0;o<r.length;o++)for(var s=r[o],a=0;a<n.length;a++){var h=n[a];s<h&&t[s].is_bonded_to(t[h])&&(t[s].bonds.push(h),t[h].bonds.push(s))}}this.cubes=e},n.prototype.get_nearest_atom=function(t,e,i,r){var n=this.cubes;if(null==n)throw Error("Missing Cubicles");for(var o=n.find_box_id(t,e,i),s=n.get_nearby_atoms(o),a=null,h=1/0,l=0;l<s.length;l++){var c=this.atoms[s[l]];if(null==r||r===c.name){var d=c.xyz[0]-t,u=c.xyz[1]-e,f=c.xyz[2]-i,p=d*d+u*u+f*f;p<h&&(a=c,h=p)}}return a};var _=function(){this.hetero=!1,this.name="",this.altloc="",this.resname="",this.chain="",this.chain_index=-1,this.resseq=-1,this.icode=null,this.xyz=[0,0,0],this.occ=1,this.b=0,this.element="",this.i_seq=-1,this.is_ligand=null,this.bonds=[]};_.prototype.from_pdb_line=function(t){if(t.length<66)throw Error("ATOM or HETATM record is too short: "+t);var e=t.substring(0,6);if("HETATM"===e)this.hetero=!0;else if("ATOM "!==e)throw Error("Wrong record type: "+e);this.name=t.substring(12,16).trim(),this.altloc=t.substring(16,17).trim(),this.resname=t.substring(17,20).trim(),this.chain=t.substring(20,22).trim(),this.resseq=parseInt(t.substring(22,26),10),this.icode=t.substring(26,27).trim();var i=parseFloat(t.substring(30,38)),r=parseFloat(t.substring(38,46)),n=parseFloat(t.substring(46,54));this.xyz=[i,r,n],this.occ=parseFloat(t.substring(54,60)),this.b=parseFloat(t.substring(60,66)),78<=t.length&&(this.element=t.substring(76,78).trim().toUpperCase()),this.is_ligand=-1===o.indexOf(this.resname)},_.prototype.b_as_u=function(){return Math.sqrt(this.b/(25.13272*3.14159))},_.prototype.distance_sq=function(t){var e=this.xyz[0]-t.xyz[0],i=this.xyz[1]-t.xyz[1],r=this.xyz[2]-t.xyz[2];return e*e+i*i+r*r},_.prototype.distance=function(t){return Math.sqrt(this.distance_sq(t))},_.prototype.midpoint=function(t){return[(this.xyz[0]+t.xyz[0])/2,(this.xyz[1]+t.xyz[1])/2,(this.xyz[2]+t.xyz[2])/2]},_.prototype.is_hydrogen=function(){return"H"===this.element||"D"===this.element},_.prototype.is_ion=function(){return this.element===this.resname},_.prototype.is_water=function(){return"HOH"===this.resname},_.prototype.is_same_residue=function(t,e){return t.resseq===this.resseq&&t.icode===this.icode&&t.chain===this.chain&&t.resname===this.resname&&(e||t.altloc===this.altloc)},_.prototype.is_same_conformer=function(t){return""===this.altloc||""===t.altloc||this.altloc===t.altloc},_.prototype.is_main_conformer=function(){return""===this.altloc||"A"===this.altloc},_.prototype.bond_radius=function(){return"H"===this.element?1.3:"S"===this.element||"P"===this.element?2.43:1.99},_.prototype.is_bonded_to=function(t){if(!this.is_same_conformer(t))return!1;var e=this.distance_sq(t);return!(2.2*2.2<e)&&(("H"!==this.element||"H"!==t.element)&&e<=this.bond_radius()*t.bond_radius())},_.prototype.resid=function(){return this.resseq+"/"+this.chain},_.prototype.long_label=function(){var t=this;return t.name+" /"+t.resseq+" "+t.resname+"/"+t.chain+" - occ: "+t.occ.toFixed(2)+" bf: "+t.b.toFixed(2)+" ele: "+t.element+" pos: ("+t.xyz[0].toFixed(2)+","+t.xyz[1].toFixed(2)+","+t.xyz[2].toFixed(2)+")"},_.prototype.short_label=function(){return this.name+" /"+this.resseq+" "+this.resname+"/"+this.chain};var l=function(t,e,i,r){this.boxes=[],this.box_length=e,this.lower_bound=i,this.upper_bound=r,this.xdim=Math.ceil((r[0]-i[0])/e),this.ydim=Math.ceil((r[1]-i[1])/e),this.zdim=Math.ceil((r[2]-i[2])/e);for(var n=this.xdim*this.ydim*this.zdim,o=0;o<n;o++)this.boxes.push([]);for(var s=0;s<t.length;s++){var a=t[s].xyz,h=this.find_box_id(a[0],a[1],a[2]);if(null===h)throw Error("wrong cubicle");this.boxes[h].push(s)}};l.prototype.find_box_id=function(t,e,i){var r=Math.floor((t-this.lower_bound[0])/this.box_length),n=Math.floor((e-this.lower_bound[1])/this.box_length),o=(Math.floor((i-this.lower_bound[2])/this.box_length)*this.ydim+n)*this.xdim+r;if(o<0||o>=this.boxes.length)throw Error("Ups!");return o},l.prototype.get_nearby_atoms=function(t){var e=[],i=this.xdim*this.ydim,r=Math.max(t%i,0),n=Math.max(r%this.xdim,0),o=Math.floor(r/this.xdim),s=Math.floor(t/i);console.assert(s*i+o*this.xdim+n===t);for(var a=n-1;a<=n+1;a++)if(!(a<0||a>=this.xdim))for(var h=o-1;h<=o+1;h++)if(!(h<0||h>=this.ydim))for(var l=s-1;l<=s+1;l++)if(!(l<0||l>=this.zdim)){var c=l*i+h*this.xdim+a;if(c>=this.boxes.length||c<0)throw Error("Box out of bounds: ID "+c);for(var d=this.boxes[c],u=0;u<d.length;u++)e.push(d[u])}return e};function r(){this._points=null,this._values=null,this._size=[0,0,0]}r.prototype.set=function(t,e,i){if(i[0]<=0||i[1]<=0||i[2]<=0)throw Error("Grid dimensions are zero along at least one edge");var r=i[0]*i[1]*i[2];if(e.length!==r||t.length!==r)throw Error("isosurface: array size mismatch");this._points=t,this._values=e,this._size=i},r.prototype.clear=function(){this._points=null,this._values=null},r.prototype.empty=function(){return null===this._values},r.prototype.isosurface=function(t,e){return function(t,e,i,r,n){var o="snapped MC"===n,s="squarish"===n?C:P,a=new Array(12),h=function(t){for(var e=[],i=0;i<8;++i){var r=O[i];e.push(r[0]+t[2]*(r[1]+t[1]*r[2]))}return e}(t),l=new Float32Array(8),c=[0,0,0],d=[c,c,c,c,c,c,c,c],u=t[0],f=t[1],p=t[2];if(null==e||null==i)return;for(var _=[],m=[],g=0,v=0;v<u-1;v++)for(var y=0;y<f-1;y++)for(var b=0;b<p-1;b++){var w=b+p*(y+f*v),x=0,z=void 0,E=void 0;for(z=0;z<8;++z)E=w+h[z],x|=e[E]<r?1<<z:0;if(0!==x&&255!==x){for(z=0;z<8;++z)E=w+h[z],l[z]=e[E],d[z]=i[E];var A=R[x];for(z=0;z<12;++z)if(0!=(A&1<<z)){var M=U[z],S=(r-l[M[0]])/(l[M[1]]-l[M[0]]);!0==o&&(.85<S?S=1:S<.15&&(S=0));var T=d[M[0]],F=d[M[1]];_.push(T[0]+(F[0]-T[0])*S,T[1]+(F[1]-T[1])*S,T[2]+(F[2]-T[2])*S),a[z]=g++}var L=s[x];for(z=0;z<L.length;z++)m.push(a[L[z]])}}return{vertices:_,segments:m}}(this._size,this._values,this._points,t,e)};var R=new Int32Array([0,0,514,770,1030,1030,1540,1796,2052,2053,2566,2566,3082,3331,3592,3840,144,152,658,658,1174,1182,1684,1684,2196,2196,2710,2710,3226,3218,3729,3728,560,560,51,314,1590,1590,1076,1084,2612,2613,2103,2358,3642,3890,3121,3376,672,680,163,170,1702,1711,1444,1196,2724,2724,2470,2214,4010,3747,3233,3232,1120,1120,1634,1890,102,102,613,868,3172,3173,3686,3686,2154,2147,2665,2656,1264,1272,1778,1778,246,254,757,764,3316,3316,3830,3830,2298,2291,2809,2800,1616,1616,1107,1362,598,598,84,340,3668,3924,3159,3414,2650,2898,2137,2384,1984,1729,1474,1218,966,718,197,196,4036,3781,3526,3270,3018,2754,2241,2240,2240,2240,2754,3010,3270,3270,3780,4044,196,197,710,966,1218,1474,1729,1984,2384,2137,2898,2650,3414,3159,3668,3676,340,84,606,598,1362,1107,1624,1616,2800,2800,2291,2298,3830,3830,3316,3324,756,1013,255,502,1778,1779,1273,1520,2656,2665,2147,2154,3686,3687,3429,3180,868,613,358,102,1898,1635,1120,1120,3232,3232,3746,4002,2214,2214,2724,2980,1196,1444,1710,1958,170,163,680,672,3376,3121,3890,3642,2358,2103,2869,2612,1084,1076,1854,1590,314,51,825,560,3728,3728,3218,3226,2710,2710,2196,2204,1684,1685,1183,1174,658,914,152,144,3840,3592,3331,3082,2566,2574,2053,2052,1796,1540,1286,1030,770,514,0,0]),P=[[],[],[1,9],[1,8,1,9],[2,10,10,1],[2,10,10,1],[9,2,2,10,10,9],[2,8,2,10,10,8,10,9],[11,2],[0,11,11,2],[1,9,11,2],[1,11,11,2,1,9,9,11],[3,10,10,1,11,10],[0,10,10,1,8,10,11,10],[3,9,11,9,11,10,10,9],[8,10,10,9,11,10],[4,7],[4,3,4,7],[1,9,4,7],[4,1,1,9,4,7,7,1],[2,10,10,1,4,7],[3,4,4,7,2,10,10,1],[9,2,2,10,10,9,4,7],[2,10,10,9,9,2,9,7,7,2,4,7],[4,7,11,2],[11,4,4,7,11,2,2,4],[1,9,4,7,11,2],[4,7,11,4,11,9,11,2,2,9,1,9],[3,10,10,1,11,10,4,7],[1,11,11,10,10,1,1,4,4,11,4,7],[4,7,0,11,11,9,11,10,10,9],[4,7,11,4,11,9,11,10,10,9],[9,5,5,4],[9,5,5,4],[0,5,5,4,1,5],[8,5,5,4,3,5,1,5],[2,10,10,1,9,5,5,4],[2,10,10,1,9,5,5,4],[5,2,2,10,10,5,5,4,4,2],[2,10,10,5,5,2,5,3,5,4,4,3],[9,5,5,4,11,2],[0,11,11,2,9,5,5,4],[0,5,5,4,1,5,11,2],[1,5,5,2,5,8,8,2,11,2,5,4],[10,3,11,10,10,1,9,5,5,4],[9,5,5,4,8,1,8,10,10,1,11,10],[5,4,0,5,0,11,11,5,11,10,10,5],[5,4,8,5,8,10,10,5,11,10],[9,7,5,7,9,5],[9,3,9,5,5,3,5,7],[0,7,1,7,1,5,5,7],[1,5,5,3,5,7],[9,7,9,5,5,7,10,1,2,10],[10,1,2,10,9,5,5,0,5,3,5,7],[2,8,2,5,5,8,5,7,10,5,2,10],[2,10,10,5,5,2,5,3,5,7],[7,9,9,5,5,7,11,2],[9,5,5,7,7,9,7,2,2,9,11,2],[11,2,1,8,1,7,1,5,5,7],[11,2,1,11,1,7,1,5,5,7],[9,5,5,8,5,7,10,1,3,10,11,10],[5,7,7,0,0,5,9,5,11,0,0,10,10,1,11,10],[11,10,10,0,0,11,10,5,5,0,0,7,5,7],[11,10,10,5,5,11,5,7],[10,6,6,5,5,10],[5,10,10,6,6,5],[1,9,5,10,10,6,6,5],[1,8,1,9,5,10,10,6,6,5],[1,6,6,5,5,1,2,6],[1,6,6,5,5,1,2,6],[9,6,6,5,5,9,0,6,2,6],[5,9,8,5,8,2,2,5,2,6,6,5],[11,2,10,6,6,5,5,10],[11,0,11,2,10,6,6,5,5,10],[1,9,11,2,5,10,10,6,6,5],[5,10,10,6,6,5,1,9,9,2,9,11,11,2],[6,3,11,6,6,5,5,3,5,1],[11,0,11,5,5,0,5,1,11,6,6,5],[11,6,6,3,6,0,6,5,5,0,5,9],[6,5,5,9,9,6,9,11,11,6],[5,10,10,6,6,5,4,7],[4,3,4,7,6,5,5,10,10,6],[1,9,5,10,10,6,6,5,4,7],[10,6,6,5,5,10,1,9,9,7,7,1,4,7],[6,1,2,6,6,5,5,1,4,7],[2,5,5,1,2,6,6,5,4,3,4,7],[4,7,0,5,5,9,0,6,6,5,2,6],[3,9,9,7,4,7,2,9,5,9,9,6,6,5,2,6],[11,2,4,7,10,6,6,5,5,10],[5,10,10,6,6,5,4,7,7,2,2,4,11,2],[1,9,4,7,11,2,5,10,10,6,6,5],[9,2,1,9,9,11,11,2,4,11,4,7,5,10,10,6,6,5],[4,7,11,5,5,3,5,1,11,6,6,5],[5,1,1,11,11,5,11,6,6,5,0,11,11,4,4,7],[0,5,5,9,0,6,6,5,3,6,11,6,4,7],[6,5,5,9,9,6,9,11,11,6,4,7,7,9],[10,4,9,10,6,4,10,6],[4,10,10,6,6,4,9,10],[10,0,1,10,10,6,6,0,6,4],[1,8,1,6,6,8,6,4,1,10,10,6],[1,4,9,1,2,4,2,6,6,4],[2,9,9,1,2,4,2,6,6,4],[2,4,2,6,6,4],[2,8,2,4,2,6,6,4],[10,4,9,10,10,6,6,4,11,2],[8,2,11,2,9,10,10,4,10,6,6,4],[11,2,1,6,6,0,6,4,1,10,10,6],[6,4,4,1,1,6,1,10,10,6,8,1,1,11,11,2],[9,6,6,4,9,3,3,6,9,1,11,6],[11,1,1,8,11,6,6,1,9,1,1,4,6,4],[11,6,6,3,6,0,6,4],[6,4,8,6,11,6],[7,10,10,6,6,7,8,10,9,10],[0,7,0,10,10,7,9,10,6,7,10,6],[10,6,6,7,7,10,1,10,7,1,8,1],[10,6,6,7,7,10,7,1,1,10],[2,6,6,1,6,8,8,1,9,1,6,7],[2,6,6,9,9,2,9,1,6,7,7,9,9,3],[0,7,0,6,6,7,2,6],[2,7,6,7,2,6],[11,2,10,6,6,8,8,10,9,10,6,7],[0,7,7,2,11,2,9,7,6,7,7,10,10,6,9,10],[1,8,1,7,1,10,10,7,6,7,10,6,11,2],[11,2,1,11,1,7,10,6,6,1,1,10,6,7],[9,6,6,8,6,7,9,1,1,6,11,6,6,3],[9,1,11,6,6,7],[0,7,0,6,6,7,11,0,11,6],[11,6,6,7],[7,6,6,11],[7,6,6,11],[1,9,7,6,6,11],[8,1,1,9,7,6,6,11],[10,1,2,10,6,11,7,6],[2,10,10,1,6,11,7,6],[2,9,2,10,10,9,6,11,7,6],[6,11,7,6,2,10,10,3,10,8,10,9],[7,2,6,2,7,6],[7,0,7,6,6,0,6,2],[2,7,7,6,6,2,1,9],[1,6,6,2,1,8,8,6,1,9,7,6],[10,7,7,6,6,10,10,1,1,7],[10,7,7,6,6,10,1,7,10,1,1,8],[7,0,7,10,10,0,10,9,6,10,7,6],[7,6,6,10,10,7,10,8,10,9],[6,8,4,6,6,11],[3,6,6,11,0,6,4,6],[8,6,6,11,4,6,1,9],[4,6,6,9,6,3,3,9,1,9,6,11],[6,8,4,6,6,11,2,10,10,1],[2,10,10,1,0,11,0,6,6,11,4,6],[4,11,4,6,6,11,2,9,2,10,10,9],[10,9,9,3,3,10,2,10,4,3,3,6,6,11,4,6],[8,2,4,2,4,6,6,2],[4,2,4,6,6,2],[1,9,3,4,4,2,4,6,6,2],[1,9,4,1,4,2,4,6,6,2],[8,1,8,6,6,1,4,6,6,10,10,1],[10,1,0,10,0,6,6,10,4,6],[4,6,6,3,3,4,6,10,10,3,3,9,10,9],[10,9,4,10,6,10,4,6],[9,5,5,4,7,6,6,11],[9,5,5,4,7,6,6,11],[5,0,1,5,5,4,7,6,6,11],[7,6,6,11,3,4,3,5,5,4,1,5],[9,5,5,4,10,1,2,10,7,6,6,11],[6,11,7,6,2,10,10,1,9,5,5,4],[7,6,6,11,5,4,4,10,10,5,4,2,2,10],[3,4,3,5,5,4,2,5,10,5,2,10,7,6,6,11],[7,2,7,6,6,2,5,4,9,5],[9,5,5,4,8,6,6,0,6,2,7,6],[3,6,6,2,7,6,1,5,5,0,5,4],[6,2,2,8,8,6,7,6,1,8,8,5,5,4,1,5],[9,5,5,4,10,1,1,6,6,10,1,7,7,6],[1,6,6,10,10,1,1,7,7,6,0,7,9,5,5,4],[0,10,10,4,10,5,5,4,3,10,6,10,10,7,7,6],[7,6,6,10,10,7,10,8,5,4,4,10,10,5],[6,9,9,5,5,6,6,11,11,9],[3,6,6,11,0,6,0,5,5,6,9,5],[0,11,0,5,5,11,1,5,5,6,6,11],[6,11,3,6,3,5,5,6,1,5],[2,10,10,1,9,5,5,11,11,9,5,6,6,11],[0,11,0,6,6,11,9,6,5,6,9,5,2,10,10,1],[8,5,5,11,5,6,6,11,0,5,10,5,5,2,2,10],[6,11,3,6,3,5,5,6,2,10,10,3,10,5],[5,8,9,5,5,2,2,8,5,6,6,2],[9,5,5,6,6,9,6,0,6,2],[1,5,5,8,8,1,5,6,6,8,8,2,6,2],[1,5,5,6,6,1,6,2],[3,6,6,1,6,10,10,1,8,6,5,6,6,9,9,5],[10,1,0,10,0,6,6,10,9,5,5,0,5,6],[5,6,6,10,10,5],[10,5,5,6,6,10],[11,5,5,10,10,11,7,5],[11,5,5,10,10,11,7,5],[5,11,7,5,5,10,10,11,1,9],[10,7,7,5,5,10,10,11,8,1,1,9],[11,1,2,11,7,1,7,5,5,1],[2,7,7,1,7,5,5,1,2,11],[9,7,7,5,5,9,9,2,2,7,2,11],[7,5,5,2,2,7,2,11,5,9,9,2,2,8],[2,5,5,10,10,2,3,5,7,5],[8,2,8,5,5,2,7,5,10,2,5,10],[1,9,5,10,10,3,3,5,7,5,10,2],[8,2,2,9,1,9,7,2,10,2,2,5,5,10,7,5],[3,5,5,1,7,5],[7,0,7,1,7,5,5,1],[3,9,3,5,5,9,7,5],[7,9,5,9,7,5],[5,8,4,5,5,10,10,8,10,11],[5,0,4,5,5,11,11,0,5,10,10,11],[1,9,4,10,10,8,10,11,4,5,5,10],[10,11,11,4,4,10,4,5,5,10,3,4,4,1,1,9],[2,5,5,1,2,8,8,5,2,11,4,5],[4,11,11,0,4,5,5,11,2,11,11,1,5,1],[2,5,5,0,5,9,2,11,11,5,4,5,5,8],[4,5,5,9,2,11],[2,5,5,10,10,2,3,5,3,4,4,5],[5,10,10,2,2,5,2,4,4,5],[3,10,10,2,3,5,5,10,8,5,4,5,1,9],[5,10,10,2,2,5,2,4,4,5,1,9,9,2],[4,5,5,8,5,3,5,1],[4,5,5,0,5,1],[4,5,5,8,5,3,0,5,5,9],[4,5,5,9],[4,11,7,4,9,11,9,10,10,11],[9,7,7,4,9,11,9,10,10,11],[1,10,10,11,11,1,11,4,4,1,7,4],[1,4,4,3,1,10,10,4,7,4,4,11,10,11],[4,11,7,4,9,11,9,2,2,11,9,1],[9,7,7,4,9,11,9,1,1,11,2,11],[7,4,4,11,4,2,2,11],[7,4,4,11,4,2,2,11,3,4],[2,9,9,10,10,2,2,7,7,9,7,4],[9,10,10,7,7,9,7,4,10,2,2,7,7,0],[7,10,10,3,10,2,7,4,4,10,1,10,10,0],[1,10,10,2,7,4],[9,1,1,4,1,7,7,4],[9,1,1,4,1,7,7,4,8,1],[3,4,7,4],[7,4],[9,10,10,8,10,11],[9,3,9,11,9,10,10,11],[1,10,10,0,10,8,10,11],[1,10,10,3,10,11],[2,11,11,1,11,9,9,1],[9,3,9,11,2,9,9,1,2,11],[2,11,11,0],[2,11],[8,2,8,10,10,2,9,10],[9,10,10,2,2,9],[8,2,8,10,10,2,1,8,1,10],[1,10,10,2],[8,1,9,1],[9,1],[],[]],C=[[],[],[1,9],[1,9],[2,10,10,1],[2,10,10,1],[2,10,10,9],[2,10,10,9],[11,2],[11,2],[1,9,11,2],[11,2,1,9],[10,1,11,10],[10,1,11,10],[11,10,10,9],[10,9,11,10],[4,7],[4,7],[1,9,4,7],[1,9,4,7],[2,10,10,1,4,7],[4,7,2,10,10,1],[2,10,10,9,4,7],[2,10,10,9,4,7],[4,7,11,2],[4,7,11,2],[1,9,4,7,11,2],[4,7,11,2,1,9],[10,1,11,10,4,7],[11,10,10,1,4,7],[4,7,11,10,10,9],[4,7,11,10,10,9],[9,5,5,4],[9,5,5,4],[5,4,1,5],[5,4,1,5],[2,10,10,1,9,5,5,4],[2,10,10,1,9,5,5,4],[2,10,10,5,5,4],[2,10,10,5,5,4],[9,5,5,4,11,2],[11,2,9,5,5,4],[5,4,1,5,11,2],[1,5,11,2,5,4],[11,10,10,1,9,5,5,4],[9,5,5,4,10,1,11,10],[5,4,11,10,10,5],[5,4,10,5,11,10],[5,7,9,5],[9,5,5,7],[1,5,5,7],[1,5,5,7],[9,5,5,7,10,1,2,10],[10,1,2,10,9,5,5,7],[5,7,10,5,2,10],[2,10,10,5,5,7],[9,5,5,7,11,2],[9,5,5,7,11,2],[11,2,1,5,5,7],[11,2,1,5,5,7],[9,5,5,7,10,1,11,10],[5,7,9,5,10,1,11,10],[11,10,10,5,5,7],[11,10,10,5,5,7],[10,6,6,5,5,10],[5,10,10,6,6,5],[1,9,5,10,10,6,6,5],[1,9,5,10,10,6,6,5],[6,5,5,1,2,6],[6,5,5,1,2,6],[6,5,5,9,2,6],[5,9,2,6,6,5],[11,2,10,6,6,5,5,10],[11,2,10,6,6,5,5,10],[1,9,11,2,5,10,10,6,6,5],[5,10,10,6,6,5,1,9,11,2],[11,6,6,5,5,1],[5,1,11,6,6,5],[11,6,6,5,5,9],[6,5,5,9,11,6],[5,10,10,6,6,5,4,7],[4,7,6,5,5,10,10,6],[1,9,5,10,10,6,6,5,4,7],[10,6,6,5,5,10,1,9,4,7],[2,6,6,5,5,1,4,7],[5,1,2,6,6,5,4,7],[4,7,5,9,6,5,2,6],[4,7,5,9,6,5,2,6],[11,2,4,7,10,6,6,5,5,10],[5,10,10,6,6,5,4,7,11,2],[1,9,4,7,11,2,5,10,10,6,6,5],[1,9,11,2,4,7,5,10,10,6,6,5],[4,7,5,1,11,6,6,5],[5,1,11,6,6,5,4,7],[5,9,6,5,11,6,4,7],[6,5,5,9,11,6,4,7],[9,10,6,4,10,6],[10,6,6,4,9,10],[1,10,10,6,6,4],[6,4,1,10,10,6],[9,1,2,6,6,4],[9,1,2,6,6,4],[2,6,6,4],[2,6,6,4],[9,10,10,6,6,4,11,2],[11,2,9,10,10,6,6,4],[11,2,6,4,1,10,10,6],[6,4,1,10,10,6,11,2],[6,4,9,1,11,6],[11,6,9,1,6,4],[11,6,6,4],[6,4,11,6],[10,6,6,7,9,10],[9,10,6,7,10,6],[10,6,6,7,1,10],[10,6,6,7,1,10],[2,6,9,1,6,7],[2,6,9,1,6,7],[6,7,2,6],[6,7,2,6],[11,2,10,6,9,10,6,7],[11,2,6,7,10,6,9,10],[1,10,6,7,10,6,11,2],[11,2,10,6,1,10,6,7],[6,7,9,1,11,6],[9,1,11,6,6,7],[6,7,11,6],[11,6,6,7],[7,6,6,11],[7,6,6,11],[1,9,7,6,6,11],[1,9,7,6,6,11],[10,1,2,10,6,11,7,6],[2,10,10,1,6,11,7,6],[2,10,10,9,6,11,7,6],[6,11,7,6,2,10,10,9],[6,2,7,6],[7,6,6,2],[7,6,6,2,1,9],[6,2,1,9,7,6],[7,6,6,10,10,1],[7,6,6,10,10,1],[10,9,6,10,7,6],[7,6,6,10,10,9],[4,6,6,11],[6,11,4,6],[6,11,4,6,1,9],[4,6,1,9,6,11],[4,6,6,11,2,10,10,1],[2,10,10,1,6,11,4,6],[4,6,6,11,2,10,10,9],[10,9,2,10,6,11,4,6],[4,6,6,2],[4,6,6,2],[1,9,4,6,6,2],[1,9,4,6,6,2],[4,6,6,10,10,1],[10,1,6,10,4,6],[4,6,6,10,10,9],[10,9,6,10,4,6],[9,5,5,4,7,6,6,11],[9,5,5,4,7,6,6,11],[1,5,5,4,7,6,6,11],[7,6,6,11,5,4,1,5],[9,5,5,4,10,1,2,10,7,6,6,11],[6,11,7,6,2,10,10,1,9,5,5,4],[7,6,6,11,5,4,10,5,2,10],[5,4,10,5,2,10,7,6,6,11],[7,6,6,2,5,4,9,5],[9,5,5,4,6,2,7,6],[6,2,7,6,1,5,5,4],[6,2,7,6,5,4,1,5],[9,5,5,4,10,1,6,10,7,6],[6,10,10,1,7,6,9,5,5,4],[10,5,5,4,6,10,7,6],[7,6,6,10,5,4,10,5],[9,5,5,6,6,11],[6,11,5,6,9,5],[1,5,5,6,6,11],[6,11,5,6,1,5],[2,10,10,1,9,5,5,6,6,11],[6,11,5,6,9,5,2,10,10,1],[5,6,6,11,10,5,2,10],[6,11,5,6,2,10,10,5],[9,5,5,6,6,2],[9,5,5,6,6,2],[1,5,5,6,6,2],[1,5,5,6,6,2],[6,10,10,1,5,6,9,5],[10,1,6,10,9,5,5,6],[5,6,6,10,10,5],[10,5,5,6,6,10],[5,10,10,11,7,5],[5,10,10,11,7,5],[7,5,5,10,10,11,1,9],[7,5,5,10,10,11,1,9],[2,11,7,5,5,1],[7,5,5,1,2,11],[7,5,5,9,2,11],[7,5,2,11,5,9],[5,10,10,2,7,5],[7,5,10,2,5,10],[1,9,5,10,7,5,10,2],[1,9,10,2,5,10,7,5],[5,1,7,5],[7,5,5,1],[5,9,7,5],[5,9,7,5],[4,5,5,10,10,11],[4,5,5,10,10,11],[1,9,10,11,4,5,5,10],[10,11,4,5,5,10,1,9],[5,1,2,11,4,5],[4,5,2,11,5,1],[5,9,2,11,4,5],[4,5,5,9,2,11],[5,10,10,2,4,5],[5,10,10,2,4,5],[10,2,5,10,4,5,1,9],[5,10,10,2,4,5,1,9],[4,5,5,1],[4,5,5,1],[4,5,5,9],[4,5,5,9],[7,4,9,10,10,11],[7,4,9,10,10,11],[1,10,10,11,7,4],[1,10,7,4,10,11],[7,4,2,11,9,1],[7,4,9,1,2,11],[7,4,2,11],[7,4,2,11],[9,10,10,2,7,4],[9,10,7,4,10,2],[10,2,7,4,1,10],[1,10,10,2,7,4],[9,1,7,4],[9,1,7,4],[7,4],[7,4],[9,10,10,11],[9,10,10,11],[1,10,10,11],[1,10,10,11],[2,11,9,1],[9,1,2,11],[2,11],[2,11],[10,2,9,10],[9,10,10,2],[10,2,1,10],[1,10,10,2],[9,1],[9,1],[],[]],O=[[0,0,0],[1,0,0],[1,1,0],[0,1,0],[0,0,1],[1,0,1],[1,1,1],[0,1,1]],U=[[0,1],[1,2],[2,3],[3,0],[4,5],[5,6],[6,7],[7,4],[0,4],[1,5],[2,6],[3,7]];function a(t,e){var i=t%e;return 0<=i?i:i+e}function L(t){this.dim=t,this.values=new Float32Array(t[0]*t[1]*t[2])}function N(t,e){for(var i=0,r=0,n=t.length,o=e;o<n;o++)i+=t[o],r+=t[o]*t[o];var s=i/(n-e),a=r/(n-e)-s*s;return{mean:s,rms:Math.sqrt(a)}}L.prototype.grid2index=function(t,e,i){return t=a(t,this.dim[0]),e=a(e,this.dim[1]),i=a(i,this.dim[2]),this.dim[2]*(this.dim[1]*t+e)+i},L.prototype.grid2index_unchecked=function(t,e,i){return this.dim[2]*(this.dim[1]*t+e)+i},L.prototype.grid2frac=function(t,e,i){return[t/this.dim[0],e/this.dim[1],i/this.dim[2]]},L.prototype.frac2grid=function(t){return[0|Math.floor(t[0]*this.dim[0]),0|Math.floor(t[1]*this.dim[1]),0|Math.floor(t[2]*this.dim[2])]},L.prototype.set_grid_value=function(t,e,i,r){var n=this.grid2index(t,e,i);this.values[n]=r},L.prototype.get_grid_value=function(t,e,i){var r=this.grid2index(t,e,i);return this.values[r]};function h(){this.unit_cell=null,this.grid=null,this.stats={mean:0,rms:1},this.block=new r}function k(t){var e=t.toLowerCase().replace(/\s+/g,"").split(",");if(3!==e.length)throw Error("Unexpected symop: "+t);for(var i=[],r=0;r<3;r++){for(var n=e[r].split(/(?=[+-])/),o=[0,0,0,0],s=0;s<n.length;s++){var a="-"===n[s][0]?-1:1,h=n[s].match(/^[+-]?([xyz])$/);if(h){o[{x:0,y:1,z:2}[h[1]]]=a}else{if(!(h=n[s].match(/^[+-]?(\d)\/(\d)$/)))throw Error("What is "+n[s]+" in "+t);o[3]=a*Number(h[1])/Number(h[2])}}i.push(o)}return i}h.prototype.abs_level=function(t){return t*this.stats.rms+this.stats.mean},h.prototype.from_ccp4=function(t,e){if(void 0===e&&(e=!0),t.byteLength<1024)throw Error("File shorter than 1024 bytes.");var i=new Int32Array(t,0,256);if(542130509!==i[52])throw Error("not a CCP4 map");var r,n=[i[0],i[1],i[2]],o=i[3];if(2===o)r=4;else{if(0!==o)throw Error("Only Mode 2 and Mode 0 of CCP4 map is supported.");r=1}var s=[i[4],i[5],i[6]],a=[i[7],i[8],i[9]],h=i[23];if(1024+h+r*n[0]*n[1]*n[2]!==t.byteLength)throw Error("ccp4 file too short or too long");var l=new Float32Array(t,0,t.byteLength/4);this.unit_cell=new F(l[10],l[11],l[12],l[13],l[14],l[15]);var c,d=[i[16],i[17],i[18]],u=d.indexOf(1),f=d.indexOf(2),p=d.indexOf(3),_=l[19],m=l[20],g=new L(a);if(h%4!=0)throw Error("CCP4 map with NSYMBT not divisible by 4 is not supported.");c=2===o?l:new Int8Array(t);var v=(1024+h)/r|0;this.stats.mean=l[21],this.stats.rms=l[54],(this.stats.mean<_||this.stats.mean>m||this.stats.rms<=0)&&(this.stats=N(c,v));var y=1,b=0;0===o&&-128===i[39]&&127===i[40]&&(b=.5*(_+m+(y=(m-_)/255)));var w=[s[0]+n[0],s[1]+n[1],s[2]+n[2]],x=[0,0,0];for(x[2]=s[2];x[2]<w[2];x[2]++)for(x[1]=s[1];x[1]<w[1];x[1]++)for(x[0]=s[0];x[0]<w[0];x[0]++)g.set_grid_value(x[u],x[f],x[p],y*c[v]+b),v++;if(e&&0<h)for(var z=new Uint8Array(t),E=0;E+80<=h;E+=80){var A=void 0,M="";for(A=0;A<80;++A)M+=String.fromCharCode(z[1024+E+A]);if(!/^\s*x\s*,\s*y\s*,\s*z\s*$/i.test(M)){var S=k(M);for(A=0;A<3;++A)S[A][3]=0|Math.round(S[A][3]*a[A]);v=(1024+h)/r|0;var T=[0,0,0];for(x[2]=s[2];x[2]<w[2];x[2]++)for(x[1]=s[1];x[1]<w[1];x[1]++)for(x[0]=s[0];x[0]<w[0];x[0]++){for(A=0;A<3;++A)T[A]=x[u]*S[A][0]+x[f]*S[A][1]+x[p]*S[A][2]+S[A][3];g.set_grid_value(T[0],T[1],T[2],y*c[v]+b),v++}}}this.grid=g},h.prototype.from_dsn6=function(t){var e=new Uint8Array(t),i=new Int16Array(e.buffer);if(100!==i[18])for(var r=i.length,n=0;n<r;n++){var o=i[n];i[n]=(255&o)<<8|o>>8&255}if(100!==i[18])throw Error("Endian swap failed");var s=[i[0],i[1],i[2]],a=[i[3],i[4],i[5]],h=[i[6],i[7],i[8]],l=1/i[17];this.unit_cell=new F(l*i[9],l*i[10],l*i[11],l*i[12],l*i[13],l*i[14]);for(var c=new L(h),d=i[15]/100,u=i[16],f=512,p=[Math.ceil(a[0]/8),Math.ceil(a[1]/8),Math.ceil(a[2]/8)],_=0;_<p[2];_++)for(var m=0;m<p[1];m++)for(var g=0;g<p[0];g++)for(var v=0;v<8;v++)for(var y=8*_+v,b=0;b<8;b++)for(var w=8*m+b,x=0;x<8;x++){var z=8*g+x;if(!(z<a[0]&&w<a[1]&&y<a[2])){f+=8-x;break}var E=(e[f]-u)/d;f++,c.set_grid_value(s[0]+z,s[1]+w,s[2]+y,E)}this.stats=N(c.values,0),this.grid=c},h.prototype.show_debug_info=function(){console.log("unit cell:",this.unit_cell&&this.unit_cell.parameters),console.log("grid:",this.grid&&this.grid.dim)},h.prototype.extract_block=function(t,e){var i=this.grid,r=this.unit_cell;if(null!=i&&null!=r){for(var n=r.fractionalize(e),o=[t/r.parameters[0],t/r.parameters[1],t/r.parameters[2]],s=i.frac2grid([n[0]-o[0],n[1]-o[1],n[2]-o[2]]),a=i.frac2grid([n[0]+o[0],n[1]+o[1],n[2]+o[2]]),h=[a[0]-s[0]+1,a[1]-s[1]+1,a[2]-s[2]+1],l=[],c=[],d=s[0];d<=a[0];d++)for(var u=s[1];u<=a[1];u++)for(var f=s[2];f<=a[2];f++){var p=i.grid2frac(d,u,f),_=r.orthogonalize(p);l.push(_);var m=i.get_grid_value(d,u,f);c.push(m)}this.block.set(l,c,h)}},h.prototype.isomesh_in_block=function(t,e){var i=this.abs_level(t);return this.block.isosurface(i,e)},h.prototype.unit="e/ų",void 0===Function.prototype.name&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}}),void 0===Object.assign&&(Object.assign=function(t){if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),i=1;i<arguments.length;i++){var r=arguments[i];if(null!=r)for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e});var c,d,u,f,p,m,g,v,y,b,w,K=0,Y=1,Z=0,Q=1,x={generateUUID:(d="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),u=new Array(36),f=0,function(){for(var t=0;t<36;t++)8===t||13===t||18===t||23===t?u[t]="-":14===t?u[t]="4":(f<=2&&(f=33554432+16777216*Math.random()|0),c=15&f,f>>=4,u[t]=d[19===t?3&c|8:c]);return u.join("")}),clamp:function(t,e,i){return Math.max(e,Math.min(i,t))},euclideanModulo:function(t,e){return(t%e+e)%e}};function z(t,e,i,r){this._x=t||0,this._y=e||0,this._z=i||0,this._w=void 0!==r?r:1}function $(t,e,i){this.x=t||0,this.y=e||0,this.z=i||0}function J(){this.elements=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function E(){}z.prototype={constructor:z,get x(){return this._x},get y(){return this._y},get z(){return this._z},get w(){return this._w},setFromAxisAngle:function(t,e){var i=e/2,r=Math.sin(i);return this._x=t.x*r,this._y=t.y*r,this._z=t.z*r,this._w=Math.cos(i),this},setFromRotationMatrix:function(t){var e,i=t.elements,r=i[0],n=i[4],o=i[8],s=i[1],a=i[5],h=i[9],l=i[2],c=i[6],d=i[10],u=r+a+d;return 0<u?(e=.5/Math.sqrt(u+1),this._w=.25/e,this._x=(c-h)*e,this._y=(o-l)*e,this._z=(s-n)*e):a<r&&d<r?(e=2*Math.sqrt(1+r-a-d),this._w=(c-h)/e,this._x=.25*e,this._y=(n+s)/e,this._z=(o+l)/e):d<a?(e=2*Math.sqrt(1+a-r-d),this._w=(o-l)/e,this._x=(n+s)/e,this._y=.25*e,this._z=(h+c)/e):(e=2*Math.sqrt(1+d-r-a),this._w=(s-n)/e,this._x=(o+l)/e,this._y=(h+c)/e,this._z=.25*e),this},setFromUnitVectors:function(t,e){return void 0===p&&(p=new $),(m=t.dot(e)+1)<1e-6?(m=0,Math.abs(t.x)>Math.abs(t.z)?p.set(-t.y,t.x,0):p.set(0,-t.z,t.y)):p.crossVectors(t,e),this._x=p.x,this._y=p.y,this._z=p.z,this._w=m,this.normalize()},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this}},$.prototype={constructor:$,isVector3:!0,set:function(t,e,i){return this.x=t,this.y=e,this.z=i,this},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this},add:function(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this},sub:function(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this},multiplyScalar:function(t){return isFinite(t)?(this.x*=t,this.y*=t,this.z*=t):(this.x=0,this.y=0,this.z=0),this},applyMatrix4:function(t){var e=this.x,i=this.y,r=this.z,n=t.elements;return this.x=n[0]*e+n[4]*i+n[8]*r+n[12],this.y=n[1]*e+n[5]*i+n[9]*r+n[13],this.z=n[2]*e+n[6]*i+n[10]*r+n[14],this},applyProjection:function(t){var e=this.x,i=this.y,r=this.z,n=t.elements,o=1/(n[3]*e+n[7]*i+n[11]*r+n[15]);return this.x=(n[0]*e+n[4]*i+n[8]*r+n[12])*o,this.y=(n[1]*e+n[5]*i+n[9]*r+n[13])*o,this.z=(n[2]*e+n[6]*i+n[10]*r+n[14])*o,this},applyQuaternion:function(t){var e=this.x,i=this.y,r=this.z,n=t.x,o=t.y,s=t.z,a=t.w,h=a*e+o*r-s*i,l=a*i+s*e-n*r,c=a*r+n*i-o*e,d=-n*e-o*i-s*r;return this.x=h*a+d*-n+l*-s-c*-o,this.y=l*a+d*-o+c*-n-h*-s,this.z=c*a+d*-s+h*-o-l*-n,this},unproject:function(t){return void 0===v&&(v=new J),v.multiplyMatrices(t.matrixWorld,v.getInverse(t.projectionMatrix)),this.applyProjection(v)},transformDirection:function(t){var e=this.x,i=this.y,r=this.z,n=t.elements;return this.x=n[0]*e+n[4]*i+n[8]*r,this.y=n[1]*e+n[5]*i+n[9]*r,this.z=n[2]*e+n[6]*i+n[10]*r,this.normalize()},divideScalar:function(t){return this.multiplyScalar(1/t)},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(t){return this.multiplyScalar(t/this.length())},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this},cross:function(t){var e=this.x,i=this.y,r=this.z;return this.x=i*t.z-r*t.y,this.y=r*t.x-e*t.z,this.z=e*t.y-i*t.x,this},crossVectors:function(t,e){var i=t.x,r=t.y,n=t.z,o=e.x,s=e.y,a=e.z;return this.x=r*a-n*s,this.y=n*o-i*a,this.z=i*s-r*o,this},projectOnVector:function(t){var e=t.dot(this)/t.lengthSq();return this.copy(t).multiplyScalar(e)},projectOnPlane:function(t){return void 0===g&&(g=new $),g.copy(this).projectOnVector(t),this.sub(g)},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,i=this.y-t.y,r=this.z-t.z;return e*e+i*i+r*r},setFromMatrixPosition:function(t){return this.setFromMatrixColumn(t,3)},setFromMatrixColumn:function(t,e){return this.fromArray(t.elements,4*e)},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}},J.prototype={constructor:J,isMatrix4:!0,copy:function(t){return this.elements.set(t.elements),this},makeRotationFromQuaternion:function(t){var e=this.elements,i=t.x,r=t.y,n=t.z,o=t.w,s=i+i,a=r+r,h=n+n,l=i*s,c=i*a,d=i*h,u=r*a,f=r*h,p=n*h,_=o*s,m=o*a,g=o*h;return e[0]=1-(u+p),e[4]=c-g,e[8]=d+m,e[1]=c+g,e[5]=1-(l+p),e[9]=f-_,e[2]=d-m,e[6]=f+_,e[10]=1-(l+u),e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},lookAt:function(t,e,i){void 0===y&&(y=new $,b=new $,w=new $);var r=this.elements;return w.subVectors(t,e).normalize(),0===w.lengthSq()&&(w.z=1),y.crossVectors(i,w).normalize(),0===y.lengthSq()&&(w.z+=1e-4,y.crossVectors(i,w).normalize()),b.crossVectors(w,y),r[0]=y.x,r[4]=b.x,r[8]=w.x,r[1]=y.y,r[5]=b.y,r[9]=w.y,r[2]=y.z,r[6]=b.z,r[10]=w.z,this},multiplyMatrices:function(t,e){var i=t.elements,r=e.elements,n=this.elements,o=i[0],s=i[4],a=i[8],h=i[12],l=i[1],c=i[5],d=i[9],u=i[13],f=i[2],p=i[6],_=i[10],m=i[14],g=i[3],v=i[7],y=i[11],b=i[15],w=r[0],x=r[4],z=r[8],E=r[12],A=r[1],M=r[5],S=r[9],T=r[13],F=r[2],L=r[6],R=r[10],P=r[14],C=r[3],O=r[7],U=r[11],N=r[15];return n[0]=o*w+s*A+a*F+h*C,n[4]=o*x+s*M+a*L+h*O,n[8]=o*z+s*S+a*R+h*U,n[12]=o*E+s*T+a*P+h*N,n[1]=l*w+c*A+d*F+u*C,n[5]=l*x+c*M+d*L+u*O,n[9]=l*z+c*S+d*R+u*U,n[13]=l*E+c*T+d*P+u*N,n[2]=f*w+p*A+_*F+m*C,n[6]=f*x+p*M+_*L+m*O,n[10]=f*z+p*S+_*R+m*U,n[14]=f*E+p*T+_*P+m*N,n[3]=g*w+v*A+y*F+b*C,n[7]=g*x+v*M+y*L+b*O,n[11]=g*z+v*S+y*R+b*U,n[15]=g*E+v*T+y*P+b*N,this},setPosition:function(t){var e=this.elements;return e[12]=t.x,e[13]=t.y,e[14]=t.z,this},getInverse:function(t,e){var i=this.elements,r=t.elements,n=r[0],o=r[1],s=r[2],a=r[3],h=r[4],l=r[5],c=r[6],d=r[7],u=r[8],f=r[9],p=r[10],_=r[11],m=r[12],g=r[13],v=r[14],y=r[15],b=f*v*d-g*p*d+g*c*_-l*v*_-f*c*y+l*p*y,w=m*p*d-u*v*d-m*c*_+h*v*_+u*c*y-h*p*y,x=u*g*d-m*f*d+m*l*_-h*g*_-u*l*y+h*f*y,z=m*f*c-u*g*c-m*l*p+h*g*p+u*l*v-h*f*v,E=n*b+o*w+s*x+a*z;if(0==E){var A="Matrix4.getInverse(): can't invert matrix, determinant is 0";if(!0===e)throw new Error(A);return console.warn(A),this.identity()}var M=1/E;return i[0]=b*M,i[1]=(g*p*a-f*v*a-g*s*_+o*v*_+f*s*y-o*p*y)*M,i[2]=(l*v*a-g*c*a+g*s*d-o*v*d-l*s*y+o*c*y)*M,i[3]=(f*c*a-l*p*a-f*s*d+o*p*d+l*s*_-o*c*_)*M,i[4]=w*M,i[5]=(u*v*a-m*p*a+m*s*_-n*v*_-u*s*y+n*p*y)*M,i[6]=(m*c*a-h*v*a-m*s*d+n*v*d+h*s*y-n*c*y)*M,i[7]=(h*p*a-u*c*a+u*s*d-n*p*d-h*s*_+n*c*_)*M,i[8]=x*M,i[9]=(m*f*a-u*g*a-m*o*_+n*g*_+u*o*y-n*f*y)*M,i[10]=(h*g*a-m*l*a+m*o*d-n*g*d-h*o*y+n*l*y)*M,i[11]=(u*l*a-h*f*a-u*o*d+n*f*d+h*o*_-n*l*_)*M,i[12]=z*M,i[13]=(u*g*s-m*f*s+m*o*p-n*g*p-u*o*v+n*f*v)*M,i[14]=(m*l*s-h*g*s-m*o*c+n*g*c+h*o*v-n*l*v)*M,i[15]=(h*f*s-u*l*s+u*o*c-n*f*c-h*o*p+n*l*p)*M,this},scale:function(t){var e=this.elements,i=t.x,r=t.y,n=t.z;return e[0]*=i,e[4]*=r,e[8]*=n,e[1]*=i,e[5]*=r,e[9]*=n,e[2]*=i,e[6]*=r,e[10]*=n,e[3]*=i,e[7]*=r,e[11]*=n,this},getMaxScaleOnAxis:function(){var t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],i=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],r=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,i,r))},compose:function(t,e,i){return this.makeRotationFromQuaternion(e),this.scale(i),this.setPosition(t),this},makeOrthographic:function(t,e,i,r,n,o){var s=this.elements,a=1/(e-t),h=1/(i-r),l=1/(o-n),c=(e+t)*a,d=(i+r)*h,u=(o+n)*l;return s[0]=2*a,s[4]=0,s[8]=0,s[12]=-c,s[1]=0,s[5]=2*h,s[9]=0,s[13]=-d,s[2]=0,s[6]=0,s[10]=-2*l,s[14]=-u,s[3]=0,s[7]=0,s[11]=0,s[15]=1,this}},Object.assign(E.prototype,{addEventListener:function(t,e){void 0===this._listeners&&(this._listeners={});var i=this._listeners;void 0===i[t]&&(i[t]=[]),-1===i[t].indexOf(e)&&i[t].push(e)},removeEventListener:function(t,e){if(void 0!==this._listeners){var i=this._listeners[t];if(void 0!==i){var r=i.indexOf(e);-1!==r&&i.splice(r,1)}}},dispatchEvent:function(t){if(void 0!==this._listeners){var e=this._listeners[t.type];if(void 0!==e){t.target=this;var i=[],r=0,n=e.length;for(r=0;r<n;r++)i[r]=e[r];for(r=0;r<n;r++)i[r].call(this,t)}}}});var A=0;function M(t){Object.defineProperty(this,"id",{value:A++}),this.uuid=x.generateUUID(),this.name="",this.image=t,this.version=0}M.prototype={constructor:M,isTexture:!0,set needsUpdate(t){!0===t&&this.version++},dispose:function(){this.dispatchEvent({type:"dispose"})}},Object.assign(M.prototype,E.prototype);var S=new M;function T(t,e){t.uniform1f(this.addr,e)}function j(t,e){t.uniform1i(this.addr,e)}function D(t,e){void 0===e.x?t.uniform2fv(this.addr,e):t.uniform2f(this.addr,e.x,e.y)}function I(t,e){void 0!==e.x?t.uniform3f(this.addr,e.x,e.y,e.z):void 0!==e.r?t.uniform3f(this.addr,e.r,e.g,e.b):t.uniform3fv(this.addr,e)}function q(t,e){void 0===e.x?t.uniform4fv(this.addr,e):t.uniform4f(this.addr,e.x,e.y,e.z,e.w)}function B(t,e){t.uniformMatrix2fv(this.addr,!1,e.elements||e)}function G(t,e){t.uniformMatrix3fv(this.addr,!1,e.elements||e)}function H(t,e){t.uniformMatrix4fv(this.addr,!1,e.elements||e)}function V(t,e,i){var r=i.allocTextureUnit();t.uniform1i(this.addr,r),i.setTexture2D(e||S,r)}function W(t,e){t.uniform2iv(this.addr,e)}function X(t,e){t.uniform3iv(this.addr,e)}function tt(t,e){t.uniform4iv(this.addr,e)}function et(t,e,i){this.id=t,this.addr=i,this.setValue=function(t){switch(t){case 5126:return T;case 35664:return D;case 35665:return I;case 35666:return q;case 35674:return B;case 35675:return G;case 35676:return H;case 35678:return V;case 5124:case 35670:return j;case 35667:case 35671:return W;case 35668:case 35672:return X;case 35669:case 35673:return tt}}(e.type)}var it=/([\w\d_]+)(\])?(\[|\.)?/g;function rt(t,e,i){var r,n,o=t.name;for(it.lastIndex=0;;){var s=it.exec(o),a=s[1];if("]"===s[2]&&(a|=0),void 0===s[3]){r=i,n=new et(a,t,e),r.seq.push(n),r.map[n.id]=n;break}}}function nt(t,e,i){(function(){this.seq=[],this.map={}}).call(this),this.renderer=i;for(var r=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),n=0;n!==r;++n){var o=t.getActiveUniform(e,n),s=o.name;rt(o,t.getUniformLocation(e,s),this)}}function ot(t,e,i,r){this.x=t||0,this.y=e||0,this.z=i||0,this.w=void 0!==r?r:1}function st(t,e,i){return void 0===e&&void 0===i?this.set(t):this.setRGB(t,e,i)}function at(t,e,i){return i<0&&(i+=1),1<i&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+6*(e-t)*(2/3-i):t}nt.prototype.setValue=function(t,e,i){var r=this.map[e];void 0!==r&&r.setValue(t,i,this.renderer)},nt.prototype.set=function(t,e,i){var r=this.map[i];void 0!==r&&r.setValue(t,e[i],this.renderer)},nt.upload=function(t,e,i,r){for(var n=0,o=e.length;n!==o;++n){var s=e[n],a=i[s.id];!1!==a.needsUpdate&&s.setValue(t,a.value,r)}},nt.seqWithValue=function(t,e){for(var i=[],r=0,n=t.length;r!==n;++r){var o=t[r];o.id in e&&i.push(o)}return i},ot.prototype={constructor:ot,isVector4:!0,set:function(t,e,i,r){return this.x=t,this.y=e,this.z=i,this.w=r,this},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this},multiplyScalar:function(t){return isFinite(t)?(this.x*=t,this.y*=t,this.z*=t,this.w*=t):(this.x=0,this.y=0,this.z=0,this.w=0),this},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}},st.prototype={constructor:st,isColor:!0,r:1,g:1,b:1,set:function(t){return t&&t.isColor?this.copy(t):"number"==typeof t&&this.setHex(t),this},setHex:function(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this},setRGB:function(t,e,i){return this.r=t,this.g=e,this.b=i,this},setHSL:function(t,e,i){if(t=x.euclideanModulo(t,1),e=x.clamp(e,0,1),i=x.clamp(i,0,1),0===e)this.r=this.g=this.b=i;else{var r=i<=.5?i*(1+e):i+e-i*e,n=2*i-r;this.r=at(n,r,t+1/3),this.g=at(n,r,t),this.b=at(n,r,t-1/3)}return this},getHSL:function(){var t,e,i={h:0,s:0,l:0},r=this.r,n=this.g,o=this.b,s=Math.max(r,n,o),a=Math.min(r,n,o),h=(a+s)/2;if(a===s)e=t=0;else{var l=s-a;switch(e=h<=.5?l/(s+a):l/(2-s-a),s){case r:t=(n-o)/l+(n<o?6:0);break;case n:t=(o-r)/l+2;break;case o:t=(r-n)/l+4}t/=6}return i.h=t,i.s=e,i.l=h,i},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(t){return this.r=t.r,this.g=t.g,this.b=t.b,this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)}};var ht,lt,ct,dt,ut=0;function ft(){Object.defineProperty(this,"id",{value:ut++}),this.uuid=x.generateUUID(),this.name="",this.type="Material",this.fog=!0,this.opacity=1,this.transparent=!1,this.depthTest=!0,this.depthWrite=!0,this.precision=null,this.premultipliedAlpha=!1,this.visible=!0,this._needsUpdate=!0}function pt(t){ft.call(this),this.type="ShaderMaterial",this.uniforms={},this.vertexShader="",this.fragmentShader="",this.linewidth=1,this.fog=!1,this.extensions={fragDepth:!1},this.setValues(t)}function _t(t,e){this.origin=void 0!==t?t:new $,this.direction=void 0!==e?e:new $}ft.prototype={constructor:ft,isMaterial:!0,get needsUpdate(){return this._needsUpdate},set needsUpdate(t){!0===t&&this.update(),this._needsUpdate=t},setValues:function(t){for(var e in t){var i=t[e];this[e]=i}},update:function(){this.dispatchEvent({type:"update"})},dispose:function(){this.dispatchEvent({type:"dispose"})}},Object.assign(ft.prototype,E.prototype),((pt.prototype=Object.create(ft.prototype)).constructor=pt).prototype.isShaderMaterial=!0,_t.prototype={constructor:_t,copy:function(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this},distanceSqToPoint:(dt=new $,function(t){var e=dt.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(dt.copy(this.direction).multiplyScalar(e).add(this.origin),dt.distanceToSquared(t))}),distanceSqToSegment:(ht=new $,lt=new $,ct=new $,function(t,e,i,r){ht.copy(t).add(e).multiplyScalar(.5),lt.copy(e).sub(t).normalize(),ct.copy(this.origin).sub(ht);var n,o,s,a,h=.5*t.distanceTo(e),l=-this.direction.dot(lt),c=ct.dot(this.direction),d=-ct.dot(lt),u=ct.lengthSq(),f=Math.abs(1-l*l);if(0<f)if(o=l*c-d,a=h*f,0<=(n=l*d-c))if(-a<=o)if(o<=a){var p=1/f;s=(n*=p)*(n+l*(o*=p)+2*c)+o*(l*n+o+2*d)+u}else o=h,s=-(n=Math.max(0,-(l*o+c)))*n+o*(o+2*d)+u;else o=-h,s=-(n=Math.max(0,-(l*o+c)))*n+o*(o+2*d)+u;else s=o<=-a?-(n=Math.max(0,-(-l*h+c)))*n+(o=0<n?-h:Math.min(Math.max(-h,-d),h))*(o+2*d)+u:o<=a?(n=0,(o=Math.min(Math.max(-h,-d),h))*(o+2*d)+u):-(n=Math.max(0,-(l*h+c)))*n+(o=0<n?h:Math.min(Math.max(-h,-d),h))*(o+2*d)+u;else o=0<l?-h:h,s=-(n=Math.max(0,-(l*o+c)))*n+o*(o+2*d)+u;return i&&i.copy(this.direction).multiplyScalar(n).add(this.origin),r&&r.copy(lt).multiplyScalar(o).add(ht),s}),applyMatrix4:function(t){return this.direction.add(this.origin).applyMatrix4(t),this.origin.applyMatrix4(t),this.direction.sub(this.origin),this.direction.normalize(),this}};var mt=0;function gt(){Object.defineProperty(this,"id",{value:mt++}),this.uuid=x.generateUUID(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=gt.DefaultUp.clone();var t=new $,e=new z,i=new $(1,1,1);Object.defineProperties(this,{position:{enumerable:!0,value:t},quaternion:{enumerable:!0,value:e},scale:{enumerable:!0,value:i},modelViewMatrix:{value:new J}}),this.matrix=new J,this.matrixWorld=new J,this.matrixAutoUpdate=gt.DefaultMatrixAutoUpdate,this.matrixWorldNeedsUpdate=!1,this.visible=!0,this.frustumCulled=!0,this.renderOrder=0,this.userData={}}function vt(t,e,i){if(Array.isArray(t))throw new TypeError("BufferAttribute: array should be a Typed Array.");this.uuid=x.generateUUID(),this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===i,this.dynamic=!1,this.updateRange={offset:0,count:-1},this.onUploadCallback=function(){},this.version=0}gt.DefaultUp=new $(0,1,0),gt.DefaultMatrixAutoUpdate=!0,Object.assign(gt.prototype,E.prototype,{isObject3D:!0,add:function(t){if(1<arguments.length){for(var e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return t&&t.isObject3D&&(null!==t.parent&&t.parent.remove(t),t.parent=this,t.dispatchEvent({type:"added"}),this.children.push(t)),this},remove:function(t){if(1<arguments.length)for(var e=0;e<arguments.length;e++)this.remove(arguments[e]);var i=this.children.indexOf(t);-1!==i&&(t.parent=null,t.dispatchEvent({type:"removed"}),this.children.splice(i,1))},updateMatrix:function(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(t){!0===this.matrixAutoUpdate&&this.updateMatrix(),!0!==this.matrixWorldNeedsUpdate&&!0!==t||(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),t=!(this.matrixWorldNeedsUpdate=!1));for(var e=this.children,i=0,r=e.length;i<r;i++)e[i].updateMatrixWorld(t)}}),vt.prototype={constructor:vt,isBufferAttribute:!0};var yt,bt=0;function wt(){Object.defineProperty(this,"id",{value:bt++}),this.uuid=x.generateUUID(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0}}function xt(t,e){gt.call(this),this.type="Mesh",this.geometry=void 0!==t?t:new wt,this.material=e,this.drawMode=Z}function zt(){gt.call(this),this.type="Camera",this.matrixWorldInverse=new J,this.projectionMatrix=new J}function Et(t,e,i,r,n,o){zt.call(this),this.type="OrthographicCamera",this.zoom=1,this.left=t,this.right=e,this.top=i,this.bottom=r,this.near=void 0!==n?n:.1,this.far=void 0!==o?o:2e3,this.updateProjectionMatrix()}function At(i,e,r){var n,o,s;return{setMode:function(t){n=t},setIndex:function(t){s=t.array instanceof Uint32Array&&e.get("OES_element_index_uint")?(o=i.UNSIGNED_INT,4):t.array instanceof Uint16Array?(o=i.UNSIGNED_SHORT,2):(o=i.UNSIGNED_BYTE,1)},render:function(t,e){i.drawElements(n,e,o,t*s),r.calls++,r.vertices+=e,n===i.TRIANGLES&&(r.faces+=e/3)}}}function Mt(i,t,r){var n;return{setMode:function(t){n=t},render:function(t,e){i.drawArrays(n,t,e),r.calls++,r.vertices+=e,n===i.TRIANGLES&&(r.faces+=e/3)}}}function St(t,e,i){var r=t.createShader(e);if(t.shaderSource(r,i),t.compileShader(r),!1===t.getShaderParameter(r,t.COMPILE_STATUS)&&console.error("WebGLShader: Shader couldn't compile."),""!==t.getShaderInfoLog(r)){var n=t.getShaderInfoLog(r);-1===n.indexOf("GL_ARB_gpu_shader5")&&console.warn("WebGLShader: gl.getShaderInfoLog()",e===t.VERTEX_SHADER?"vertex":"fragment",n,i)}return r}Object.assign(wt.prototype,E.prototype,{isBufferGeometry:!0,setIndex:function(t){this.index=t},addAttribute:function(t,e){return this.attributes[t]=e,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),wt.MaxIndex=65535,xt.prototype=Object.assign(Object.create(gt.prototype),{constructor:xt,isMesh:!0}),((zt.prototype=Object.create(gt.prototype)).constructor=zt).prototype.isCamera=!0,zt.prototype.lookAt=(yt=new J,function(t){yt.lookAt(this.position,t,this.up),this.quaternion.setFromRotationMatrix(yt)}),Et.prototype=Object.assign(Object.create(zt.prototype),{constructor:Et,updateProjectionMatrix:function(){var t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),i=(this.right+this.left)/2,r=(this.top+this.bottom)/2,n=i-t,o=i+t,s=r+e,a=r-e;this.projectionMatrix.makeOrthographic(n,o,s,a,this.near,this.far)}});var Tt=0;function Ft(t,e,i,r){var n=t.context,o=i.extensions,s=i.__webglShader.vertexShader,a=i.__webglShader.fragmentShader,h=function(t,e,i){return[(t=t||{}).fragDepth&&i.get("EXT_frag_depth")?"#extension GL_EXT_frag_depth : enable":""].join("\n")}(o,0,t.extensions),l=n.createProgram(),c=["precision "+r.precision+" float;","precision "+r.precision+" int;","#define SHADER_NAME "+i.__webglShader.name,"uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","attribute vec3 position;",""].join("\n")+s,d=[h,"precision "+r.precision+" float;","precision "+r.precision+" int;","#define SHADER_NAME "+i.__webglShader.name,r.useFog&&r.fog?"#define USE_FOG":"",""].join("\n")+a,u=St(n,n.VERTEX_SHADER,c),f=St(n,n.FRAGMENT_SHADER,d);n.attachShader(l,u),n.attachShader(l,f),n.linkProgram(l);var p,_,m=n.getProgramInfoLog(l),g=n.getShaderInfoLog(u),v=n.getShaderInfoLog(f);return!1===n.getProgramParameter(l,n.LINK_STATUS)?console.error("WebGLProgram: shader error: ",n.getError(),"gl.VALIDATE_STATUS",n.getProgramParameter(l,n.VALIDATE_STATUS),"gl.getProgramInfoLog",m,g,v):""!==m&&console.warn("WebGLProgram: gl.getProgramInfoLog()",m),n.deleteShader(u),n.deleteShader(f),this.getUniforms=function(){return void 0===p&&(p=new nt(n,l,t)),p},this.getAttributes=function(){return void 0===_&&(_=function(t,e){for(var i={},r=t.getProgramParameter(e,t.ACTIVE_ATTRIBUTES),n=0;n<r;n++){var o=t.getActiveAttrib(e,n).name;i[o]=t.getAttribLocation(e,o)}return i}(n,l)),_},this.destroy=function(){n.deleteProgram(l),this.program=void 0},this.id=Tt++,this.code=e,this.usedTimes=1,this.program=l,this.vertexShader=u,this.fragmentShader=f,this}function Lt(a,n){var h=[],o=["precision","fog","useFog","premultipliedAlpha"];this.getParameters=function(t,e,i){var r=a.getPrecision();return null!==t.precision&&(r=n.getMaxPrecision(t.precision))!==t.precision&&console.warn("WebGLProgram.getParameters:",t.precision,"not supported, using",r,"instead."),{precision:r,fog:!!e,useFog:t.fog,premultipliedAlpha:t.premultipliedAlpha}},this.getProgramCode=function(t,e){var i=[];i.push(t.fragmentShader),i.push(t.vertexShader);for(var r=0;r<o.length;r++)i.push(e[o[r]]);return i.join()},this.acquireProgram=function(t,e,i){for(var r,n=0,o=h.length;n<o;n++){var s=h[n];if(s.code===i){++(r=s).usedTimes;break}}return void 0===r&&(r=new Ft(a,i,t,e),h.push(r)),r},this.releaseProgram=function(t){if(0==--t.usedTimes){var e=h.indexOf(t);h[e]=h[h.length-1],h.pop(),t.destroy()}},this.programs=h}function Rt(i,r,t){var n={};function o(t){var e=t.target,i=n[e.id];null!==i.index&&s(i.index),function(t){for(var e in t)s(t[e])}(i.attributes),e.removeEventListener("dispose",o),delete n[e.id],r.delete(e),r.delete(i)}function s(t){var e=function(t){return r.get(t).__webglBuffer}(t);void 0!==e&&(i.deleteBuffer(e),function(t){r.delete(t)}(t))}return{get:function(t){var e,i=t.geometry;return void 0!==n[i.id]?n[i.id]:(i.addEventListener("dispose",o),i.isBufferGeometry&&(e=i),n[i.id]=e)}}}function Pt(s,n,t){var o=new Rt(s,n,t);function a(t,e){var i=t,r=n.get(i);void 0===r.__webglBuffer?function(t,e,i){t.__webglBuffer=s.createBuffer(),s.bindBuffer(i,t.__webglBuffer);var r=e.dynamic?s.DYNAMIC_DRAW:s.STATIC_DRAW;s.bufferData(i,e.array,r);var n=s.FLOAT,o=e.array;o instanceof Float32Array?n=s.FLOAT:o instanceof Float64Array?console.warn("Unsupported data buffer format: Float64Array"):o instanceof Uint16Array?n=s.UNSIGNED_SHORT:o instanceof Int16Array?n=s.SHORT:o instanceof Uint32Array?n=s.UNSIGNED_INT:o instanceof Int32Array?n=s.INT:o instanc