| Server IP : 162.214.74.102 / Your IP : 216.73.216.192 Web Server : Apache System : Linux dedi-4363141.lrsys.com.br 3.10.0-1160.119.1.el7.tuxcare.els25.x86_64 #1 SMP Wed Oct 1 17:37:27 UTC 2025 x86_64 User : lrsys ( 1015) PHP Version : 5.6.40 Disable Function : exec,passthru,shell_exec,system MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/lrsys/www/lrsys_apps/marisol/AR/aframe/examples/vendor/aframe/build/ |
Upload File : |
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.AFRAME=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(_dereq_,module,exports){(function(process){var _Group=function(){this._tweens={};this._tweensAddedDuringUpdate={}};_Group.prototype={getAll:function(){return Object.keys(this._tweens).map(function(tweenId){return this._tweens[tweenId]}.bind(this))},removeAll:function(){this._tweens={}},add:function(tween){this._tweens[tween.getId()]=tween;this._tweensAddedDuringUpdate[tween.getId()]=tween},remove:function(tween){delete this._tweens[tween.getId()];delete this._tweensAddedDuringUpdate[tween.getId()]},update:function(time,preserve){var tweenIds=Object.keys(this._tweens);if(tweenIds.length===0){return false}time=time!==undefined?time:TWEEN.now();while(tweenIds.length>0){this._tweensAddedDuringUpdate={};for(var i=0;i<tweenIds.length;i++){if(this._tweens[tweenIds[i]].update(time)===false){this._tweens[tweenIds[i]]._isPlaying=false;if(!preserve){delete this._tweens[tweenIds[i]]}}}tweenIds=Object.keys(this._tweensAddedDuringUpdate)}return true}};var TWEEN=new _Group;TWEEN.Group=_Group;TWEEN._nextId=0;TWEEN.nextId=function(){return TWEEN._nextId++};if(typeof window==="undefined"&&typeof process!=="undefined"){TWEEN.now=function(){var time=process.hrtime();return time[0]*1e3+time[1]/1e6}}else if(typeof window!=="undefined"&&window.performance!==undefined&&window.performance.now!==undefined){TWEEN.now=window.performance.now.bind(window.performance)}else if(Date.now!==undefined){TWEEN.now=Date.now}else{TWEEN.now=function(){return(new Date).getTime()}}TWEEN.Tween=function(object,group){this._object=object;this._valuesStart={};this._valuesEnd={};this._valuesStartRepeat={};this._duration=1e3;this._repeat=0;this._repeatDelayTime=undefined;this._yoyo=false;this._isPlaying=false;this._reversed=false;this._delayTime=0;this._startTime=null;this._easingFunction=TWEEN.Easing.Linear.None;this._interpolationFunction=TWEEN.Interpolation.Linear;this._chainedTweens=[];this._onStartCallback=null;this._onStartCallbackFired=false;this._onUpdateCallback=null;this._onCompleteCallback=null;this._onStopCallback=null;this._group=group||TWEEN;this._id=TWEEN.nextId()};TWEEN.Tween.prototype={getId:function getId(){return this._id},isPlaying:function isPlaying(){return this._isPlaying},to:function to(properties,duration){this._valuesEnd=properties;if(duration!==undefined){this._duration=duration}return this},start:function start(time){this._group.add(this);this._isPlaying=true;this._onStartCallbackFired=false;this._startTime=time!==undefined?time:TWEEN.now();this._startTime+=this._delayTime;for(var property in this._valuesEnd){if(this._valuesEnd[property]instanceof Array){if(this._valuesEnd[property].length===0){continue}this._valuesEnd[property]=[this._object[property]].concat(this._valuesEnd[property])}if(this._object[property]===undefined){continue}this._valuesStart[property]=this._object[property];if(this._valuesStart[property]instanceof Array===false){this._valuesStart[property]*=1}this._valuesStartRepeat[property]=this._valuesStart[property]||0}return this},stop:function stop(){if(!this._isPlaying){return this}this._group.remove(this);this._isPlaying=false;if(this._onStopCallback!==null){this._onStopCallback.call(this._object,this._object)}this.stopChainedTweens();return this},end:function end(){this.update(this._startTime+this._duration);return this},stopChainedTweens:function stopChainedTweens(){for(var i=0,numChainedTweens=this._chainedTweens.length;i<numChainedTweens;i++){this._chainedTweens[i].stop()}},delay:function delay(amount){this._delayTime=amount;return this},repeat:function repeat(times){this._repeat=times;return this},repeatDelay:function repeatDelay(amount){this._repeatDelayTime=amount;return this},yoyo:function yoyo(yoyo){this._yoyo=yoyo;return this},easing:function easing(easing){this._easingFunction=easing;return this},interpolation:function interpolation(interpolation){this._interpolationFunction=interpolation;return this},chain:function chain(){this._chainedTweens=arguments;return this},onStart:function onStart(callback){this._onStartCallback=callback;return this},onUpdate:function onUpdate(callback){this._onUpdateCallback=callback;return this},onComplete:function onComplete(callback){this._onCompleteCallback=callback;return this},onStop:function onStop(callback){this._onStopCallback=callback;return this},update:function update(time){var property;var elapsed;var value;if(time<this._startTime){return true}if(this._onStartCallbackFired===false){if(this._onStartCallback!==null){this._onStartCallback.call(this._object,this._object)}this._onStartCallbackFired=true}elapsed=(time-this._startTime)/this._duration;elapsed=elapsed>1?1:elapsed;value=this._easingFunction(elapsed);for(property in this._valuesEnd){if(this._valuesStart[property]===undefined){continue}var start=this._valuesStart[property]||0;var end=this._valuesEnd[property];if(end instanceof Array){this._object[property]=this._interpolationFunction(end,value)}else{if(typeof end==="string"){if(end.charAt(0)==="+"||end.charAt(0)==="-"){end=start+parseFloat(end)}else{end=parseFloat(end)}}if(typeof end==="number"){this._object[property]=start+(end-start)*value}}}if(this._onUpdateCallback!==null){this._onUpdateCallback.call(this._object,value)}if(elapsed===1){if(this._repeat>0){if(isFinite(this._repeat)){this._repeat--}for(property in this._valuesStartRepeat){if(typeof this._valuesEnd[property]==="string"){this._valuesStartRepeat[property]=this._valuesStartRepeat[property]+parseFloat(this._valuesEnd[property])}if(this._yoyo){var tmp=this._valuesStartRepeat[property];this._valuesStartRepeat[property]=this._valuesEnd[property];this._valuesEnd[property]=tmp}this._valuesStart[property]=this._valuesStartRepeat[property]}if(this._yoyo){this._reversed=!this._reversed}if(this._repeatDelayTime!==undefined){this._startTime=time+this._repeatDelayTime}else{this._startTime=time+this._delayTime}return true}else{if(this._onCompleteCallback!==null){this._onCompleteCallback.call(this._object,this._object)}for(var i=0,numChainedTweens=this._chainedTweens.length;i<numChainedTweens;i++){this._chainedTweens[i].start(this._startTime+this._duration)}return false}}return true}};TWEEN.Easing={Linear:{None:function(k){return k}},Quadratic:{In:function(k){return k*k},Out:function(k){return k*(2-k)},InOut:function(k){if((k*=2)<1){return.5*k*k}return-.5*(--k*(k-2)-1)}},Cubic:{In:function(k){return k*k*k},Out:function(k){return--k*k*k+1},InOut:function(k){if((k*=2)<1){return.5*k*k*k}return.5*((k-=2)*k*k+2)}},Quartic:{In:function(k){return k*k*k*k},Out:function(k){return 1- --k*k*k*k},InOut:function(k){if((k*=2)<1){return.5*k*k*k*k}return-.5*((k-=2)*k*k*k-2)}},Quintic:{In:function(k){return k*k*k*k*k},Out:function(k){return--k*k*k*k*k+1},InOut:function(k){if((k*=2)<1){return.5*k*k*k*k*k}return.5*((k-=2)*k*k*k*k+2)}},Sinusoidal:{In:function(k){return 1-Math.cos(k*Math.PI/2)},Out:function(k){return Math.sin(k*Math.PI/2)},InOut:function(k){return.5*(1-Math.cos(Math.PI*k))}},Exponential:{In:function(k){return k===0?0:Math.pow(1024,k-1)},Out:function(k){return k===1?1:1-Math.pow(2,-10*k)},InOut:function(k){if(k===0){return 0}if(k===1){return 1}if((k*=2)<1){return.5*Math.pow(1024,k-1)}return.5*(-Math.pow(2,-10*(k-1))+2)}},Circular:{In:function(k){return 1-Math.sqrt(1-k*k)},Out:function(k){return Math.sqrt(1- --k*k)},InOut:function(k){if((k*=2)<1){return-.5*(Math.sqrt(1-k*k)-1)}return.5*(Math.sqrt(1-(k-=2)*k)+1)}},Elastic:{In:function(k){if(k===0){return 0}if(k===1){return 1}return-Math.pow(2,10*(k-1))*Math.sin((k-1.1)*5*Math.PI)},Out:function(k){if(k===0){return 0}if(k===1){return 1}return Math.pow(2,-10*k)*Math.sin((k-.1)*5*Math.PI)+1},InOut:function(k){if(k===0){return 0}if(k===1){return 1}k*=2;if(k<1){return-.5*Math.pow(2,10*(k-1))*Math.sin((k-1.1)*5*Math.PI)}return.5*Math.pow(2,-10*(k-1))*Math.sin((k-1.1)*5*Math.PI)+1}},Back:{In:function(k){var s=1.70158;return k*k*((s+1)*k-s)},Out:function(k){var s=1.70158;return--k*k*((s+1)*k+s)+1},InOut:function(k){var s=1.70158*1.525;if((k*=2)<1){return.5*(k*k*((s+1)*k-s))}return.5*((k-=2)*k*((s+1)*k+s)+2)}},Bounce:{In:function(k){return 1-TWEEN.Easing.Bounce.Out(1-k)},Out:function(k){if(k<1/2.75){return 7.5625*k*k}else if(k<2/2.75){return 7.5625*(k-=1.5/2.75)*k+.75}else if(k<2.5/2.75){return 7.5625*(k-=2.25/2.75)*k+.9375}else{return 7.5625*(k-=2.625/2.75)*k+.984375}},InOut:function(k){if(k<.5){return TWEEN.Easing.Bounce.In(k*2)*.5}return TWEEN.Easing.Bounce.Out(k*2-1)*.5+.5}}};TWEEN.Interpolation={Linear:function(v,k){var m=v.length-1;var f=m*k;var i=Math.floor(f);var fn=TWEEN.Interpolation.Utils.Linear;if(k<0){return fn(v[0],v[1],f)}if(k>1){return fn(v[m],v[m-1],m-f)}return fn(v[i],v[i+1>m?m:i+1],f-i)},Bezier:function(v,k){var b=0;var n=v.length-1;var pw=Math.pow;var bn=TWEEN.Interpolation.Utils.Bernstein;for(var i=0;i<=n;i++){b+=pw(1-k,n-i)*pw(k,i)*v[i]*bn(n,i)}return b},CatmullRom:function(v,k){var m=v.length-1;var f=m*k;var i=Math.floor(f);var fn=TWEEN.Interpolation.Utils.CatmullRom;if(v[0]===v[m]){if(k<0){i=Math.floor(f=m*(1+k))}return fn(v[(i-1+m)%m],v[i],v[(i+1)%m],v[(i+2)%m],f-i)}else{if(k<0){return v[0]-(fn(v[0],v[0],v[1],v[1],-f)-v[0])}if(k>1){return v[m]-(fn(v[m],v[m],v[m-1],v[m-1],f-m)-v[m])}return fn(v[i?i-1:0],v[i],v[m<i+1?m:i+1],v[m<i+2?m:i+2],f-i)}},Utils:{Linear:function(p0,p1,t){return(p1-p0)*t+p0},Bernstein:function(n,i){var fc=TWEEN.Interpolation.Utils.Factorial;return fc(n)/fc(i)/fc(n-i)},Factorial:function(){var a=[1];return function(n){var s=1;if(a[n]){return a[n]}for(var i=n;i>1;i--){s*=i}a[n]=s;return s}}(),CatmullRom:function(p0,p1,p2,p3,t){var v0=(p2-p0)*.5;var v1=(p3-p1)*.5;var t2=t*t;var t3=t*t2;return(2*p1-2*p2+v0+v1)*t3+(-3*p1+3*p2-2*v0-v1)*t2+v0*t+p1}}};(function(root){if(typeof define==="function"&&define.amd){define([],function(){return TWEEN})}else if(typeof module!=="undefined"&&typeof exports==="object"){module.exports=TWEEN}else if(root!==undefined){root.TWEEN=TWEEN}})(this)}).call(this,_dereq_("_process"))},{_process:6}],2:[function(_dereq_,module,exports){var str=Object.prototype.toString;module.exports=anArray;function anArray(arr){return arr.BYTES_PER_ELEMENT&&str.call(arr.buffer)==="[object ArrayBuffer]"||Array.isArray(arr)}},{}],3:[function(_dereq_,module,exports){module.exports=function numtype(num,def){return typeof num==="number"?num:typeof def==="number"?def:0}},{}],4:[function(_dereq_,module,exports){"use strict";exports.byteLength=byteLength;exports.toByteArray=toByteArray;exports.fromByteArray=fromByteArray;var lookup=[];var revLookup=[];var Arr=typeof Uint8Array!=="undefined"?Uint8Array:Array;var code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var i=0,len=code.length;i<len;++i){lookup[i]=code[i];revLookup[code.charCodeAt(i)]=i}revLookup["-".charCodeAt(0)]=62;revLookup["_".charCodeAt(0)]=63;function placeHoldersCount(b64){var len=b64.length;if(len%4>0){throw new Error("Invalid string. Length must be a multiple of 4")}return b64[len-2]==="="?2:b64[len-1]==="="?1:0}function byteLength(b64){return b64.length*3/4-placeHoldersCount(b64)}function toByteArray(b64){var i,l,tmp,placeHolders,arr;var len=b64.length;placeHolders=placeHoldersCount(b64);arr=new Arr(len*3/4-placeHolders);l=placeHolders>0?len-4:len;var L=0;for(i=0;i<l;i+=4){tmp=revLookup[b64.charCodeAt(i)]<<18|revLookup[b64.charCodeAt(i+1)]<<12|revLookup[b64.charCodeAt(i+2)]<<6|revLookup[b64.charCodeAt(i+3)];arr[L++]=tmp>>16&255;arr[L++]=tmp>>8&255;arr[L++]=tmp&255}if(placeHolders===2){tmp=revLookup[b64.charCodeAt(i)]<<2|revLookup[b64.charCodeAt(i+1)]>>4;arr[L++]=tmp&255}else if(placeHolders===1){tmp=revLookup[b64.charCodeAt(i)]<<10|revLookup[b64.charCodeAt(i+1)]<<4|revLookup[b64.charCodeAt(i+2)]>>2;arr[L++]=tmp>>8&255;arr[L++]=tmp&255}return arr}function tripletToBase64(num){return lookup[num>>18&63]+lookup[num>>12&63]+lookup[num>>6&63]+lookup[num&63]}function encodeChunk(uint8,start,end){var tmp;var output=[];for(var i=start;i<end;i+=3){tmp=(uint8[i]<<16)+(uint8[i+1]<<8)+uint8[i+2];output.push(tripletToBase64(tmp))}return output.join("")}function fromByteArray(uint8){var tmp;var len=uint8.length;var extraBytes=len%3;var output="";var parts=[];var maxChunkLength=16383;for(var i=0,len2=len-extraBytes;i<len2;i+=maxChunkLength){parts.push(encodeChunk(uint8,i,i+maxChunkLength>len2?len2:i+maxChunkLength))}if(extraBytes===1){tmp=uint8[len-1];output+=lookup[tmp>>2];output+=lookup[tmp<<4&63];output+="=="}else if(extraBytes===2){tmp=(uint8[len-2]<<8)+uint8[len-1];output+=lookup[tmp>>10];output+=lookup[tmp>>4&63];output+=lookup[tmp<<2&63];output+="="}parts.push(output);return parts.join("")}},{}],5:[function(_dereq_,module,exports){"use strict";module.exports={createLink:function(href,attributes){var head=document.head||document.getElementsByTagName("head")[0];var link=document.createElement("link");link.href=href;link.rel="stylesheet";for(var key in attributes){if(!attributes.hasOwnProperty(key)){continue}var value=attributes[key];link.setAttribute("data-"+key,value)}head.appendChild(link)},createStyle:function(cssText,attributes){var head=document.head||document.getElementsByTagName("head")[0],style=document.createElement("style");style.type="text/css";for(var key in attributes){if(!attributes.hasOwnProperty(key)){continue}var value=attributes[key];style.setAttribute("data-"+key,value)}if(style.sheet){style.innerHTML=cssText;style.sheet.cssText=cssText;head.appendChild(style)}else if(style.styleSheet){head.appendChild(style);style.styleSheet.cssText=cssText}else{style.appendChild(document.createTextNode(cssText));head.appendChild(style)}}}},{}],6:[function(_dereq_,module,exports){var process=module.exports={};var cachedSetTimeout;var cachedClearTimeout;function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}(function(){try{if(typeof setTimeout==="function"){cachedSetTimeout=setTimeout}else{cachedSetTimeout=defaultSetTimout}}catch(e){cachedSetTimeout=defaultSetTimout}try{if(typeof clearTimeout==="function"){cachedClearTimeout=clearTimeout}else{cachedClearTimeout=defaultClearTimeout}}catch(e){cachedClearTimeout=defaultClearTimeout}})();function runTimeout(fun){if(cachedSetTimeout===setTimeout){return setTimeout(fun,0)}if((cachedSetTimeout===defaultSetTimout||!cachedSetTimeout)&&setTimeout){cachedSetTimeout=setTimeout;return setTimeout(fun,0)}try{return cachedSetTimeout(fun,0)}catch(e){try{return cachedSetTimeout.call(null,fun,0)}catch(e){return cachedSetTimeout.call(this,fun,0)}}}function runClearTimeout(marker){if(cachedClearTimeout===clearTimeout){return clearTimeout(marker)}if((cachedClearTimeout===defaultClearTimeout||!cachedClearTimeout)&&clearTimeout){cachedClearTimeout=clearTimeout;return clearTimeout(marker)}try{return cachedClearTimeout(marker)}catch(e){try{return cachedClearTimeout.call(null,marker)}catch(e){return cachedClearTimeout.call(this,marker)}}}var queue=[];var draining=false;var currentQueue;var queueIndex=-1;function cleanUpNextTick(){if(!draining||!currentQueue){return}draining=false;if(currentQueue.length){queue=currentQueue.concat(queue)}else{queueIndex=-1}if(queue.length){drainQueue()}}function drainQueue(){if(draining){return}var timeout=runTimeout(cleanUpNextTick);draining=true;var len=queue.length;while(len){currentQueue=queue;queue=[];while(++queueIndex<len){if(currentQueue){currentQueue[queueIndex].run()}}queueIndex=-1;len=queue.length}currentQueue=null;draining=false;runClearTimeout(timeout)}process.nextTick=function(fun){var args=new Array(arguments.length-1);if(arguments.length>1){for(var i=1;i<arguments.length;i++){args[i-1]=arguments[i]}}queue.push(new Item(fun,args));if(queue.length===1&&!draining){runTimeout(drainQueue)}};function Item(fun,array){this.fun=fun;this.array=array}Item.prototype.run=function(){this.fun.apply(null,this.array)};process.title="browser";process.browser=true;process.env={};process.argv=[];process.version="";process.versions={};function noop(){}process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.prependListener=noop;process.prependOnceListener=noop;process.listeners=function(name){return[]};process.binding=function(name){throw new Error("process.binding is not supported")};process.cwd=function(){return"/"};process.chdir=function(dir){throw new Error("process.chdir is not supported")};process.umask=function(){return 0}},{}],7:[function(_dereq_,module,exports){var Buffer=_dereq_("buffer").Buffer;module.exports=function(a,b){if(!Buffer.isBuffer(a))return undefined;if(!Buffer.isBuffer(b))return undefined;if(typeof a.equals==="function")return a.equals(b);if(a.length!==b.length)return false;for(var i=0;i<a.length;i++){if(a[i]!==b[i])return false}return true}},{buffer:8}],8:[function(_dereq_,module,exports){(function(global){"use strict";var base64=_dereq_("base64-js");var ieee754=_dereq_("ieee754");var isArray=_dereq_("isarray");exports.Buffer=Buffer;exports.SlowBuffer=SlowBuffer;exports.INSPECT_MAX_BYTES=50;Buffer.TYPED_ARRAY_SUPPORT=global.TYPED_ARRAY_SUPPORT!==undefined?global.TYPED_ARRAY_SUPPORT:typedArraySupport();exports.kMaxLength=kMaxLength();function typedArraySupport(){try{var arr=new Uint8Array(1);arr.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}};return arr.foo()===42&&typeof arr.subarray==="function"&&arr.subarray(1,1).byteLength===0}catch(e){return false}}function kMaxLength(){return Buffer.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function createBuffer(that,length){if(kMaxLength()<length){throw new RangeError("Invalid typed array length")}if(Buffer.TYPED_ARRAY_SUPPORT){that=new Uint8Array(length);that.__proto__=Buffer.prototype}else{if(that===null){that=new Buffer(length)}that.length=length}return that}function Buffer(arg,encodingOrOffset,length){if(!Buffer.TYPED_ARRAY_SUPPORT&&!(this instanceof Buffer)){return new Buffer(arg,encodingOrOffset,length)}if(typeof arg==="number"){if(typeof encodingOrOffset==="string"){throw new Error("If encoding is specified then the first argument must be a string")}return allocUnsafe(this,arg)}return from(this,arg,encodingOrOffset,length)}Buffer.poolSize=8192;Buffer._augment=function(arr){arr.__proto__=Buffer.prototype;return arr};function from(that,value,encodingOrOffset,length){if(typeof value==="number"){throw new TypeError('"value" argument must not be a number')}if(typeof ArrayBuffer!=="undefined"&&value instanceof ArrayBuffer){return fromArrayBuffer(that,value,encodingOrOffset,length)}if(typeof value==="string"){return fromString(that,value,encodingOrOffset)}return fromObject(that,value)}Buffer.from=function(value,encodingOrOffset,length){return from(null,value,encodingOrOffset,length)};if(Buffer.TYPED_ARRAY_SUPPORT){Buffer.prototype.__proto__=Uint8Array.prototype;Buffer.__proto__=Uint8Array;if(typeof Symbol!=="undefined"&&Symbol.species&&Buffer[Symbol.species]===Buffer){Object.defineProperty(Buffer,Symbol.species,{value:null,configurable:true})}}function assertSize(size){if(typeof size!=="number"){throw new TypeError('"size" argument must be a number')}else if(size<0){throw new RangeError('"size" argument must not be negative')}}function alloc(that,size,fill,encoding){assertSize(size);if(size<=0){return createBuffer(that,size)}if(fill!==undefined){return typeof encoding==="string"?createBuffer(that,size).fill(fill,encoding):createBuffer(that,size).fill(fill)}return createBuffer(that,size)}Buffer.alloc=function(size,fill,encoding){return alloc(null,size,fill,encoding)};function allocUnsafe(that,size){assertSize(size);that=createBuffer(that,size<0?0:checked(size)|0);if(!Buffer.TYPED_ARRAY_SUPPORT){for(var i=0;i<size;++i){that[i]=0}}return that}Buffer.allocUnsafe=function(size){return allocUnsafe(null,size)};Buffer.allocUnsafeSlow=function(size){return allocUnsafe(null,size)};function fromString(that,string,encoding){if(typeof encoding!=="string"||encoding===""){encoding="utf8"}if(!Buffer.isEncoding(encoding)){throw new TypeError('"encoding" must be a valid string encoding')}var length=byteLength(string,encoding)|0;that=createBuffer(that,length);var actual=that.write(string,encoding);if(actual!==length){that=that.slice(0,actual)}return that}function fromArrayLike(that,array){var length=array.length<0?0:checked(array.length)|0;that=createBuffer(that,length);for(var i=0;i<length;i+=1){that[i]=array[i]&255}return that}function fromArrayBuffer(that,array,byteOffset,length){array.byteLength;if(byteOffset<0||array.byteLength<byteOffset){throw new RangeError("'offset' is out of bounds")}if(array.byteLength<byteOffset+(length||0)){throw new RangeError("'length' is out of bounds")}if(byteOffset===undefined&&length===undefined){array=new Uint8Array(array)}else if(length===undefined){array=new Uint8Array(array,byteOffset)}else{array=new Uint8Array(array,byteOffset,length)}if(Buffer.TYPED_ARRAY_SUPPORT){that=array;that.__proto__=Buffer.prototype}else{that=fromArrayLike(that,array)}return that}function fromObject(that,obj){if(Buffer.isBuffer(obj)){var len=checked(obj.length)|0;that=createBuffer(that,len);if(that.length===0){return that}obj.copy(that,0,0,len);return that}if(obj){if(typeof ArrayBuffer!=="undefined"&&obj.buffer instanceof ArrayBuffer||"length"in obj){if(typeof obj.length!=="number"||isnan(obj.length)){return createBuffer(that,0)}return fromArrayLike(that,obj)}if(obj.type==="Buffer"&&isArray(obj.data)){return fromArrayLike(that,obj.data)}}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function checked(length){if(length>=kMaxLength()){throw new RangeError("Attempt to allocate Buffer larger than maximum "+"size: 0x"+kMaxLength().toString(16)+" bytes")}return length|0}function SlowBuffer(length){if(+length!=length){length=0}return Buffer.alloc(+length)}Buffer.isBuffer=function isBuffer(b){return!!(b!=null&&b._isBuffer)};Buffer.compare=function compare(a,b){if(!Buffer.isBuffer(a)||!Buffer.isBuffer(b)){throw new TypeError("Arguments must be Buffers")}if(a===b)return 0;var x=a.length;var y=b.length;for(var i=0,len=Math.min(x,y);i<len;++i){if(a[i]!==b[i]){x=a[i];y=b[i];break}}if(x<y)return-1;if(y<x)return 1;return 0};Buffer.isEncoding=function isEncoding(encoding){switch(String(encoding).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return true;default:return false}};Buffer.concat=function concat(list,length){if(!isArray(list)){throw new TypeError('"list" argument must be an Array of Buffers')}if(list.length===0){return Buffer.alloc(0)}var i;if(length===undefined){length=0;for(i=0;i<list.length;++i){length+=list[i].length}}var buffer=Buffer.allocUnsafe(length);var pos=0;for(i=0;i<list.length;++i){var buf=list[i];if(!Buffer.isBuffer(buf)){throw new TypeError('"list" argument must be an Array of Buffers')}buf.copy(buffer,pos);pos+=buf.length}return buffer};function byteLength(string,encoding){if(Buffer.isBuffer(string)){return string.length}if(typeof ArrayBuffer!=="undefined"&&typeof ArrayBuffer.isView==="function"&&(ArrayBuffer.isView(string)||string instanceof ArrayBuffer)){return string.byteLength}if(typeof string!=="string"){string=""+string}var len=string.length;if(len===0)return 0;var loweredCase=false;for(;;){switch(encoding){case"ascii":case"latin1":case"binary":return len;case"utf8":case"utf-8":case undefined:return utf8ToBytes(string).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return len*2;case"hex":return len>>>1;case"base64":return base64ToBytes(string).length;default:if(loweredCase)return utf8ToBytes(string).length;encoding=(""+encoding).toLowerCase();loweredCase=true}}}Buffer.byteLength=byteLength;function slowToString(encoding,start,end){var loweredCase=false;if(start===undefined||start<0){start=0}if(start>this.length){return""}if(end===undefined||end>this.length){end=this.length}if(end<=0){return""}end>>>=0;start>>>=0;if(end<=start){return""}if(!encoding)encoding="utf8";while(true){switch(encoding){case"hex":return hexSlice(this,start,end);case"utf8":case"utf-8":return utf8Slice(this,start,end);case"ascii":return asciiSlice(this,start,end);case"latin1":case"binary":return latin1Slice(this,start,end);case"base64":return base64Slice(this,start,end);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,start,end);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(encoding+"").toLowerCase();loweredCase=true}}}Buffer.prototype._isBuffer=true;function swap(b,n,m){var i=b[n];b[n]=b[m];b[m]=i}Buffer.prototype.swap16=function swap16(){var len=this.length;if(len%2!==0){throw new RangeError("Buffer size must be a multiple of 16-bits")}for(var i=0;i<len;i+=2){swap(this,i,i+1)}return this};Buffer.prototype.swap32=function swap32(){var len=this.length;if(len%4!==0){throw new RangeError("Buffer size must be a multiple of 32-bits")}for(var i=0;i<len;i+=4){swap(this,i,i+3);swap(this,i+1,i+2)}return this};Buffer.prototype.swap64=function swap64(){var len=this.length;if(len%8!==0){throw new RangeError("Buffer size must be a multiple of 64-bits")}for(var i=0;i<len;i+=8){swap(this,i,i+7);swap(this,i+1,i+6);swap(this,i+2,i+5);swap(this,i+3,i+4)}return this};Buffer.prototype.toString=function toString(){var length=this.length|0;if(length===0)return"";if(arguments.length===0)return utf8Slice(this,0,length);return slowToString.apply(this,arguments)};Buffer.prototype.equals=function equals(b){if(!Buffer.isBuffer(b))throw new TypeError("Argument must be a Buffer");if(this===b)return true;return Buffer.compare(this,b)===0};Buffer.prototype.inspect=function inspect(){var str="";var max=exports.INSPECT_MAX_BYTES;if(this.length>0){str=this.toString("hex",0,max).match(/.{2}/g).join(" ");if(this.length>max)str+=" ... "}return"<Buffer "+str+">"};Buffer.prototype.compare=function compare(target,start,end,thisStart,thisEnd){if(!Buffer.isBuffer(target)){throw new TypeError("Argument must be a Buffer")}if(start===undefined){start=0}if(end===undefined){end=target?target.length:0}if(thisStart===undefined){thisStart=0}if(thisEnd===undefined){thisEnd=this.length}if(start<0||end>target.length||thisStart<0||thisEnd>this.length){throw new RangeError("out of range index")}if(thisStart>=thisEnd&&start>=end){return 0}if(thisStart>=thisEnd){return-1}if(start>=end){return 1}start>>>=0;end>>>=0;thisStart>>>=0;thisEnd>>>=0;if(this===target)return 0;var x=thisEnd-thisStart;var y=end-start;var len=Math.min(x,y);var thisCopy=this.slice(thisStart,thisEnd);var targetCopy=target.slice(start,end);for(var i=0;i<len;++i){if(thisCopy[i]!==targetCopy[i]){x=thisCopy[i];y=targetCopy[i];break}}if(x<y)return-1;if(y<x)return 1;return 0};function bidirectionalIndexOf(buffer,val,byteOffset,encoding,dir){if(buffer.length===0)return-1;if(typeof byteOffset==="string"){encoding=byteOffset;byteOffset=0}else if(byteOffset>2147483647){byteOffset=2147483647}else if(byteOffset<-2147483648){byteOffset=-2147483648}byteOffset=+byteOffset;if(isNaN(byteOffset)){byteOffset=dir?0:buffer.length-1}if(byteOffset<0)byteOffset=buffer.length+byteOffset;if(byteOffset>=buffer.length){if(dir)return-1;else byteOffset=buffer.length-1}else if(byteOffset<0){if(dir)byteOffset=0;else return-1}if(typeof val==="string"){val=Buffer.from(val,encoding)}if(Buffer.isBuffer(val)){if(val.length===0){return-1}return arrayIndexOf(buffer,val,byteOffset,encoding,dir)}else if(typeof val==="number"){val=val&255;if(Buffer.TYPED_ARRAY_SUPPORT&&typeof Uint8Array.prototype.indexOf==="function"){if(dir){return Uint8Array.prototype.indexOf.call(buffer,val,byteOffset)}else{return Uint8Array.prototype.lastIndexOf.call(buffer,val,byteOffset)}}return arrayIndexOf(buffer,[val],byteOffset,encoding,dir)}throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(arr,val,byteOffset,encoding,dir){var indexSize=1;var arrLength=arr.length;var valLength=val.length;if(encoding!==undefined){encoding=String(encoding).toLowerCase();if(encoding==="ucs2"||encoding==="ucs-2"||encoding==="utf16le"||encoding==="utf-16le"){if(arr.length<2||val.length<2){return-1}indexSize=2;arrLength/=2;valLength/=2;byteOffset/=2}}function read(buf,i){if(indexSize===1){return buf[i]}else{return buf.readUInt16BE(i*indexSize)}}var i;if(dir){var foundIndex=-1;for(i=byteOffset;i<arrLength;i++){if(read(arr,i)===read(val,foundIndex===-1?0:i-foundIndex)){if(foundIndex===-1)foundIndex=i;if(i-foundIndex+1===valLength)return foundIndex*indexSize}else{if(foundIndex!==-1)i-=i-foundIndex;foundIndex=-1}}}else{if(byteOffset+valLength>arrLength)byteOffset=arrLength-valLength;for(i=byteOffset;i>=0;i--){var found=true;for(var j=0;j<valLength;j++){if(read(arr,i+j)!==read(val,j)){found=false;break}}if(found)return i}}return-1}Buffer.prototype.includes=function includes(val,byteOffset,encoding){return this.indexOf(val,byteOffset,encoding)!==-1};Buffer.prototype.indexOf=function indexOf(val,byteOffset,encoding){return bidirectionalIndexOf(this,val,byteOffset,encoding,true)};Buffer.prototype.lastIndexOf=function lastIndexOf(val,byteOffset,encoding){return bidirectionalIndexOf(this,val,byteOffset,encoding,false)};function hexWrite(buf,string,offset,length){offset=Number(offset)||0;var remaining=buf.length-offset;if(!length){length=remaining}else{length=Number(length);if(length>remaining){length=remaining}}var strLen=string.length;if(strLen%2!==0)throw new TypeError("Invalid hex string");if(length>strLen/2){length=strLen/2}for(var i=0;i<length;++i){var parsed=parseInt(string.substr(i*2,2),16);if(isNaN(parsed))return i;buf[offset+i]=parsed}return i}function utf8Write(buf,string,offset,length){return blitBuffer(utf8ToBytes(string,buf.length-offset),buf,offset,length)}function asciiWrite(buf,string,offset,length){return blitBuffer(asciiToBytes(string),buf,offset,length)}function latin1Write(buf,string,offset,length){return asciiWrite(buf,string,offset,length)}function base64Write(buf,string,offset,length){return blitBuffer(base64ToBytes(string),buf,offset,length)}function ucs2Write(buf,string,offset,length){return blitBuffer(utf16leToBytes(string,buf.length-offset),buf,offset,length)}Buffer.prototype.write=function write(string,offset,length,encoding){if(offset===undefined){encoding="utf8";length=this.length;offset=0}else if(length===undefined&&typeof offset==="string"){encoding=offset;length=this.length;offset=0}else if(isFinite(offset)){offset=offset|0;if(isFinite(length)){length=length|0;if(encoding===undefined)encoding="utf8"}else{encoding=length;length=undefined}}else{throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported")}var remaining=this.length-offset;if(length===undefined||length>remaining)length=remaining;if(string.length>0&&(length<0||offset<0)||offset>this.length){throw new RangeError("Attempt to write outside buffer bounds")}if(!encoding)encoding="utf8";var loweredCase=false;for(;;){switch(encoding){case"hex":return hexWrite(this,string,offset,length);case"utf8":case"utf-8":return utf8Write(this,string,offset,length);case"ascii":return asciiWrite(this,string,offset,length);case"latin1":case"binary":return latin1Write(this,string,offset,length);case"base64":return base64Write(this,string,offset,length);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,string,offset,length);
default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(""+encoding).toLowerCase();loweredCase=true}}};Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function base64Slice(buf,start,end){if(start===0&&end===buf.length){return base64.fromByteArray(buf)}else{return base64.fromByteArray(buf.slice(start,end))}}function utf8Slice(buf,start,end){end=Math.min(buf.length,end);var res=[];var i=start;while(i<end){var firstByte=buf[i];var codePoint=null;var bytesPerSequence=firstByte>239?4:firstByte>223?3:firstByte>191?2:1;if(i+bytesPerSequence<=end){var secondByte,thirdByte,fourthByte,tempCodePoint;switch(bytesPerSequence){case 1:if(firstByte<128){codePoint=firstByte}break;case 2:secondByte=buf[i+1];if((secondByte&192)===128){tempCodePoint=(firstByte&31)<<6|secondByte&63;if(tempCodePoint>127){codePoint=tempCodePoint}}break;case 3:secondByte=buf[i+1];thirdByte=buf[i+2];if((secondByte&192)===128&&(thirdByte&192)===128){tempCodePoint=(firstByte&15)<<12|(secondByte&63)<<6|thirdByte&63;if(tempCodePoint>2047&&(tempCodePoint<55296||tempCodePoint>57343)){codePoint=tempCodePoint}}break;case 4:secondByte=buf[i+1];thirdByte=buf[i+2];fourthByte=buf[i+3];if((secondByte&192)===128&&(thirdByte&192)===128&&(fourthByte&192)===128){tempCodePoint=(firstByte&15)<<18|(secondByte&63)<<12|(thirdByte&63)<<6|fourthByte&63;if(tempCodePoint>65535&&tempCodePoint<1114112){codePoint=tempCodePoint}}}}if(codePoint===null){codePoint=65533;bytesPerSequence=1}else if(codePoint>65535){codePoint-=65536;res.push(codePoint>>>10&1023|55296);codePoint=56320|codePoint&1023}res.push(codePoint);i+=bytesPerSequence}return decodeCodePointsArray(res)}var MAX_ARGUMENTS_LENGTH=4096;function decodeCodePointsArray(codePoints){var len=codePoints.length;if(len<=MAX_ARGUMENTS_LENGTH){return String.fromCharCode.apply(String,codePoints)}var res="";var i=0;while(i<len){res+=String.fromCharCode.apply(String,codePoints.slice(i,i+=MAX_ARGUMENTS_LENGTH))}return res}function asciiSlice(buf,start,end){var ret="";end=Math.min(buf.length,end);for(var i=start;i<end;++i){ret+=String.fromCharCode(buf[i]&127)}return ret}function latin1Slice(buf,start,end){var ret="";end=Math.min(buf.length,end);for(var i=start;i<end;++i){ret+=String.fromCharCode(buf[i])}return ret}function hexSlice(buf,start,end){var len=buf.length;if(!start||start<0)start=0;if(!end||end<0||end>len)end=len;var out="";for(var i=start;i<end;++i){out+=toHex(buf[i])}return out}function utf16leSlice(buf,start,end){var bytes=buf.slice(start,end);var res="";for(var i=0;i<bytes.length;i+=2){res+=String.fromCharCode(bytes[i]+bytes[i+1]*256)}return res}Buffer.prototype.slice=function slice(start,end){var len=this.length;start=~~start;end=end===undefined?len:~~end;if(start<0){start+=len;if(start<0)start=0}else if(start>len){start=len}if(end<0){end+=len;if(end<0)end=0}else if(end>len){end=len}if(end<start)end=start;var newBuf;if(Buffer.TYPED_ARRAY_SUPPORT){newBuf=this.subarray(start,end);newBuf.__proto__=Buffer.prototype}else{var sliceLen=end-start;newBuf=new Buffer(sliceLen,undefined);for(var i=0;i<sliceLen;++i){newBuf[i]=this[i+start]}}return newBuf};function checkOffset(offset,ext,length){if(offset%1!==0||offset<0)throw new RangeError("offset is not uint");if(offset+ext>length)throw new RangeError("Trying to access beyond buffer length")}Buffer.prototype.readUIntLE=function readUIntLE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i<byteLength&&(mul*=256)){val+=this[offset+i]*mul}return val};Buffer.prototype.readUIntBE=function readUIntBE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert){checkOffset(offset,byteLength,this.length)}var val=this[offset+--byteLength];var mul=1;while(byteLength>0&&(mul*=256)){val+=this[offset+--byteLength]*mul}return val};Buffer.prototype.readUInt8=function readUInt8(offset,noAssert){if(!noAssert)checkOffset(offset,1,this.length);return this[offset]};Buffer.prototype.readUInt16LE=function readUInt16LE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);return this[offset]|this[offset+1]<<8};Buffer.prototype.readUInt16BE=function readUInt16BE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);return this[offset]<<8|this[offset+1]};Buffer.prototype.readUInt32LE=function readUInt32LE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return(this[offset]|this[offset+1]<<8|this[offset+2]<<16)+this[offset+3]*16777216};Buffer.prototype.readUInt32BE=function readUInt32BE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]*16777216+(this[offset+1]<<16|this[offset+2]<<8|this[offset+3])};Buffer.prototype.readIntLE=function readIntLE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i<byteLength&&(mul*=256)){val+=this[offset+i]*mul}mul*=128;if(val>=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readIntBE=function readIntBE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var i=byteLength;var mul=1;var val=this[offset+--i];while(i>0&&(mul*=256)){val+=this[offset+--i]*mul}mul*=128;if(val>=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readInt8=function readInt8(offset,noAssert){if(!noAssert)checkOffset(offset,1,this.length);if(!(this[offset]&128))return this[offset];return(255-this[offset]+1)*-1};Buffer.prototype.readInt16LE=function readInt16LE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset]|this[offset+1]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt16BE=function readInt16BE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset+1]|this[offset]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt32LE=function readInt32LE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]|this[offset+1]<<8|this[offset+2]<<16|this[offset+3]<<24};Buffer.prototype.readInt32BE=function readInt32BE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]<<24|this[offset+1]<<16|this[offset+2]<<8|this[offset+3]};Buffer.prototype.readFloatLE=function readFloatLE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,true,23,4)};Buffer.prototype.readFloatBE=function readFloatBE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,false,23,4)};Buffer.prototype.readDoubleLE=function readDoubleLE(offset,noAssert){if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,true,52,8)};Buffer.prototype.readDoubleBE=function readDoubleBE(offset,noAssert){if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,false,52,8)};function checkInt(buf,value,offset,ext,max,min){if(!Buffer.isBuffer(buf))throw new TypeError('"buffer" argument must be a Buffer instance');if(value>max||value<min)throw new RangeError('"value" argument is out of bounds');if(offset+ext>buf.length)throw new RangeError("Index out of range")}Buffer.prototype.writeUIntLE=function writeUIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;byteLength=byteLength|0;if(!noAssert){var maxBytes=Math.pow(2,8*byteLength)-1;checkInt(this,value,offset,byteLength,maxBytes,0)}var mul=1;var i=0;this[offset]=value&255;while(++i<byteLength&&(mul*=256)){this[offset+i]=value/mul&255}return offset+byteLength};Buffer.prototype.writeUIntBE=function writeUIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;byteLength=byteLength|0;if(!noAssert){var maxBytes=Math.pow(2,8*byteLength)-1;checkInt(this,value,offset,byteLength,maxBytes,0)}var i=byteLength-1;var mul=1;this[offset+i]=value&255;while(--i>=0&&(mul*=256)){this[offset+i]=value/mul&255}return offset+byteLength};Buffer.prototype.writeUInt8=function writeUInt8(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,1,255,0);if(!Buffer.TYPED_ARRAY_SUPPORT)value=Math.floor(value);this[offset]=value&255;return offset+1};function objectWriteUInt16(buf,value,offset,littleEndian){if(value<0)value=65535+value+1;for(var i=0,j=Math.min(buf.length-offset,2);i<j;++i){buf[offset+i]=(value&255<<8*(littleEndian?i:1-i))>>>(littleEndian?i:1-i)*8}}Buffer.prototype.writeUInt16LE=function writeUInt16LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,65535,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value&255;this[offset+1]=value>>>8}else{objectWriteUInt16(this,value,offset,true)}return offset+2};Buffer.prototype.writeUInt16BE=function writeUInt16BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,65535,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>8;this[offset+1]=value&255}else{objectWriteUInt16(this,value,offset,false)}return offset+2};function objectWriteUInt32(buf,value,offset,littleEndian){if(value<0)value=4294967295+value+1;for(var i=0,j=Math.min(buf.length-offset,4);i<j;++i){buf[offset+i]=value>>>(littleEndian?i:3-i)*8&255}}Buffer.prototype.writeUInt32LE=function writeUInt32LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset+3]=value>>>24;this[offset+2]=value>>>16;this[offset+1]=value>>>8;this[offset]=value&255}else{objectWriteUInt32(this,value,offset,true)}return offset+4};Buffer.prototype.writeUInt32BE=function writeUInt32BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&255}else{objectWriteUInt32(this,value,offset,false)}return offset+4};Buffer.prototype.writeIntLE=function writeIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=0;var mul=1;var sub=0;this[offset]=value&255;while(++i<byteLength&&(mul*=256)){if(value<0&&sub===0&&this[offset+i-1]!==0){sub=1}this[offset+i]=(value/mul>>0)-sub&255}return offset+byteLength};Buffer.prototype.writeIntBE=function writeIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=byteLength-1;var mul=1;var sub=0;this[offset+i]=value&255;while(--i>=0&&(mul*=256)){if(value<0&&sub===0&&this[offset+i+1]!==0){sub=1}this[offset+i]=(value/mul>>0)-sub&255}return offset+byteLength};Buffer.prototype.writeInt8=function writeInt8(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,1,127,-128);if(!Buffer.TYPED_ARRAY_SUPPORT)value=Math.floor(value);if(value<0)value=255+value+1;this[offset]=value&255;return offset+1};Buffer.prototype.writeInt16LE=function writeInt16LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value&255;this[offset+1]=value>>>8}else{objectWriteUInt16(this,value,offset,true)}return offset+2};Buffer.prototype.writeInt16BE=function writeInt16BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>8;this[offset+1]=value&255}else{objectWriteUInt16(this,value,offset,false)}return offset+2};Buffer.prototype.writeInt32LE=function writeInt32LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value&255;this[offset+1]=value>>>8;this[offset+2]=value>>>16;this[offset+3]=value>>>24}else{objectWriteUInt32(this,value,offset,true)}return offset+4};Buffer.prototype.writeInt32BE=function writeInt32BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);if(value<0)value=4294967295+value+1;if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&255}else{objectWriteUInt32(this,value,offset,false)}return offset+4};function checkIEEE754(buf,value,offset,ext,max,min){if(offset+ext>buf.length)throw new RangeError("Index out of range");if(offset<0)throw new RangeError("Index out of range")}function writeFloat(buf,value,offset,littleEndian,noAssert){if(!noAssert){checkIEEE754(buf,value,offset,4,3.4028234663852886e38,-3.4028234663852886e38)}ieee754.write(buf,value,offset,littleEndian,23,4);return offset+4}Buffer.prototype.writeFloatLE=function writeFloatLE(value,offset,noAssert){return writeFloat(this,value,offset,true,noAssert)};Buffer.prototype.writeFloatBE=function writeFloatBE(value,offset,noAssert){return writeFloat(this,value,offset,false,noAssert)};function writeDouble(buf,value,offset,littleEndian,noAssert){if(!noAssert){checkIEEE754(buf,value,offset,8,1.7976931348623157e308,-1.7976931348623157e308)}ieee754.write(buf,value,offset,littleEndian,52,8);return offset+8}Buffer.prototype.writeDoubleLE=function writeDoubleLE(value,offset,noAssert){return writeDouble(this,value,offset,true,noAssert)};Buffer.prototype.writeDoubleBE=function writeDoubleBE(value,offset,noAssert){return writeDouble(this,value,offset,false,noAssert)};Buffer.prototype.copy=function copy(target,targetStart,start,end){if(!start)start=0;if(!end&&end!==0)end=this.length;if(targetStart>=target.length)targetStart=target.length;if(!targetStart)targetStart=0;if(end>0&&end<start)end=start;if(end===start)return 0;if(target.length===0||this.length===0)return 0;if(targetStart<0){throw new RangeError("targetStart out of bounds")}if(start<0||start>=this.length)throw new RangeError("sourceStart out of bounds");if(end<0)throw new RangeError("sourceEnd out of bounds");if(end>this.length)end=this.length;if(target.length-targetStart<end-start){end=target.length-targetStart+start}var len=end-start;var i;if(this===target&&start<targetStart&&targetStart<end){for(i=len-1;i>=0;--i){target[i+targetStart]=this[i+start]}}else if(len<1e3||!Buffer.TYPED_ARRAY_SUPPORT){for(i=0;i<len;++i){target[i+targetStart]=this[i+start]}}else{Uint8Array.prototype.set.call(target,this.subarray(start,start+len),targetStart)}return len};Buffer.prototype.fill=function fill(val,start,end,encoding){if(typeof val==="string"){if(typeof start==="string"){encoding=start;start=0;end=this.length}else if(typeof end==="string"){encoding=end;end=this.length}if(val.length===1){var code=val.charCodeAt(0);if(code<256){val=code}}if(encoding!==undefined&&typeof encoding!=="string"){throw new TypeError("encoding must be a string")}if(typeof encoding==="string"&&!Buffer.isEncoding(encoding)){throw new TypeError("Unknown encoding: "+encoding)}}else if(typeof val==="number"){val=val&255}if(start<0||this.length<start||this.length<end){throw new RangeError("Out of range index")}if(end<=start){return this}start=start>>>0;end=end===undefined?this.length:end>>>0;if(!val)val=0;var i;if(typeof val==="number"){for(i=start;i<end;++i){this[i]=val}}else{var bytes=Buffer.isBuffer(val)?val:utf8ToBytes(new Buffer(val,encoding).toString());var len=bytes.length;for(i=0;i<end-start;++i){this[i+start]=bytes[i%len]}}return this};var INVALID_BASE64_RE=/[^+\/0-9A-Za-z-_]/g;function base64clean(str){str=stringtrim(str).replace(INVALID_BASE64_RE,"");if(str.length<2)return"";while(str.length%4!==0){str=str+"="}return str}function stringtrim(str){if(str.trim)return str.trim();return str.replace(/^\s+|\s+$/g,"")}function toHex(n){if(n<16)return"0"+n.toString(16);return n.toString(16)}function utf8ToBytes(string,units){units=units||Infinity;var codePoint;var length=string.length;var leadSurrogate=null;var bytes=[];for(var i=0;i<length;++i){codePoint=string.charCodeAt(i);if(codePoint>55295&&codePoint<57344){if(!leadSurrogate){if(codePoint>56319){if((units-=3)>-1)bytes.push(239,191,189);continue}else if(i+1===length){if((units-=3)>-1)bytes.push(239,191,189);continue}leadSurrogate=codePoint;continue}if(codePoint<56320){if((units-=3)>-1)bytes.push(239,191,189);leadSurrogate=codePoint;continue}codePoint=(leadSurrogate-55296<<10|codePoint-56320)+65536}else if(leadSurrogate){if((units-=3)>-1)bytes.push(239,191,189)}leadSurrogate=null;if(codePoint<128){if((units-=1)<0)break;bytes.push(codePoint)}else if(codePoint<2048){if((units-=2)<0)break;bytes.push(codePoint>>6|192,codePoint&63|128)}else if(codePoint<65536){if((units-=3)<0)break;bytes.push(codePoint>>12|224,codePoint>>6&63|128,codePoint&63|128)}else if(codePoint<1114112){if((units-=4)<0)break;bytes.push(codePoint>>18|240,codePoint>>12&63|128,codePoint>>6&63|128,codePoint&63|128)}else{throw new Error("Invalid code point")}}return bytes}function asciiToBytes(str){var byteArray=[];for(var i=0;i<str.length;++i){byteArray.push(str.charCodeAt(i)&255)}return byteArray}function utf16leToBytes(str,units){var c,hi,lo;var byteArray=[];for(var i=0;i<str.length;++i){if((units-=2)<0)break;c=str.charCodeAt(i);hi=c>>8;lo=c%256;byteArray.push(lo);byteArray.push(hi)}return byteArray}function base64ToBytes(str){return base64.toByteArray(base64clean(str))}function blitBuffer(src,dst,offset,length){for(var i=0;i<length;++i){if(i+offset>=dst.length||i>=src.length)break;dst[i+offset]=src[i]}return i}function isnan(val){return val!==val}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"base64-js":4,ieee754:18,isarray:9}],9:[function(_dereq_,module,exports){var toString={}.toString;module.exports=Array.isArray||function(arr){return toString.call(arr)=="[object Array]"}},{}],10:[function(_dereq_,module,exports){exports=module.exports=_dereq_("./debug");exports.log=log;exports.formatArgs=formatArgs;exports.save=save;exports.load=load;exports.useColors=useColors;exports.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:localstorage();exports.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"];function useColors(){return"WebkitAppearance"in document.documentElement.style||window.console&&(console.firebug||console.exception&&console.table)||navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31}exports.formatters.j=function(v){return JSON.stringify(v)};function formatArgs(){var args=arguments;var useColors=this.useColors;args[0]=(useColors?"%c":"")+this.namespace+(useColors?" %c":" ")+args[0]+(useColors?"%c ":" ");if(!useColors)return args;var c="color: "+this.color;args=[args[0],c,"color: inherit"].concat(Array.prototype.slice.call(args,1));var index=0;var lastC=0;args[0].replace(/%[a-z%]/g,function(match){if("%%"===match)return;index++;if("%c"===match){lastC=index}});args.splice(lastC,0,c);return args}function log(){return"object"===typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function save(namespaces){try{if(null==namespaces){exports.storage.removeItem("debug")}else{exports.storage.debug=namespaces}}catch(e){}}function load(){var r;try{r=exports.storage.debug}catch(e){}return r}exports.enable(load());function localstorage(){try{return window.localStorage}catch(e){}}},{"./debug":11}],11:[function(_dereq_,module,exports){exports=module.exports=debug;exports.coerce=coerce;exports.disable=disable;exports.enable=enable;exports.enabled=enabled;exports.names=[];exports.skips=[];exports.formatters={};var prevColor=0;function selectColor(){return exports.colors[prevColor++%exports.colors.length]}function debug(namespace){function disabled(){}disabled.enabled=false;function enabled(){var self=enabled;if(null==self.useColors)self.useColors=exports.useColors();if(null==self.color&&self.useColors)self.color=selectColor();var args=Array.prototype.slice.call(arguments);args[0]=exports.coerce(args[0]);if("string"!==typeof args[0]){args=["%o"].concat(args)}var index=0;args[0]=args[0].replace(/%([a-z%])/g,function(match,format){if(match==="%%")return match;index++;var formatter=exports.formatters[format];if("function"===typeof formatter){var val=args[index];match=formatter.call(self,val);args.splice(index,1);index--}return match});if("function"===typeof exports.formatArgs){args=exports.formatArgs.apply(self,args)}var logFn=enabled.log||exports.log||console.log.bind(console);logFn.apply(self,args)}enabled.enabled=true;var fn=exports.enabled(namespace)?enabled:disabled;fn.namespace=namespace;return fn}function enable(namespaces){exports.save(namespaces);var split=(namespaces||"").split(/[\s,]+/);var len=split.length;for(var i=0;i<len;i++){if(!split[i])continue;namespaces=split[i].replace(/\*/g,".*?");if(namespaces[0]==="-"){exports.skips.push(new RegExp("^"+namespaces.substr(1)+"$"))}else{exports.names.push(new RegExp("^"+namespaces+"$"))}}}function disable(){exports.enable("")}function enabled(name){var i,len;for(i=0,len=exports.skips.length;i<len;i++){if(exports.skips[i].test(name)){return false}}for(i=0,len=exports.names.length;i<len;i++){if(exports.names[i].test(name)){return true}}return false}function coerce(val){if(val instanceof Error)return val.stack||val.message;return val}},{}],12:[function(_dereq_,module,exports){"use strict";var isObj=_dereq_("is-obj");var hasOwnProperty=Object.prototype.hasOwnProperty;var propIsEnumerable=Object.prototype.propertyIsEnumerable;function toObject(val){if(val===null||val===undefined){throw new TypeError("Sources cannot be null or undefined")}return Object(val)}function assignKey(to,from,key){var val=from[key];if(val===undefined||val===null){return}if(hasOwnProperty.call(to,key)){if(to[key]===undefined||to[key]===null){throw new TypeError("Cannot convert undefined or null to object ("+key+")")}}if(!hasOwnProperty.call(to,key)||!isObj(val)){to[key]=val}else{to[key]=assign(Object(to[key]),from[key])}}function assign(to,from){if(to===from){return to}from=Object(from);for(var key in from){if(hasOwnProperty.call(from,key)){assignKey(to,from,key)}}if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(from);for(var i=0;i<symbols.length;i++){if(propIsEnumerable.call(from,symbols[i])){assignKey(to,from,symbols[i])}}}return to}module.exports=function deepAssign(target){target=toObject(target);for(var s=1;s<arguments.length;s++){assign(target,arguments[s])}return target}},{"is-obj":22}],13:[function(_dereq_,module,exports){(function(t,n,r,i){"use strict";function st(e,t){for(var n=0,r=e.length;n<r;n++)gt(e[n],t)}function ot(e){for(var t=0,n=e.length,r;t<n;t++)r=e[t],it(r,w[at(r)])}function ut(e){return function(t){F(t)&&(gt(t,e),st(t.querySelectorAll(E),e))}}function at(e){var t=R.call(e,"is"),n=e.nodeName.toUpperCase(),r=x.call(b,t?m+t.toUpperCase():v+n);return t&&-1<r&&!ft(n,t)?-1:r}function ft(e,t){return-1<E.indexOf(e+'[is="'+t+'"]')}function lt(e){var t=e.currentTarget,n=e.attrChange,r=e.attrName,i=e.target;Y&&(!i||i===t)&&t.attributeChangedCallback&&r!=="style"&&e.prevValue!==e.newValue&&t.attributeChangedCallback(r,n===e[f]?null:e.prevValue,n===e[c]?null:e.newValue)}function ct(e){var t=ut(e);return function(e){$.push(t,e.target)}}function ht(e){G&&(G=!1,e.currentTarget.removeEventListener(p,ht)),st((e.target||n).querySelectorAll(E),e.detail===u?u:o),j&&vt()}function pt(e,t){var n=this;U.call(n,e,t),Z.call(n,{target:n})}function dt(e,t){P(e,t),nt?nt.observe(e,X):(Q&&(e.setAttribute=pt,e[s]=tt(e),e.addEventListener(d,Z)),e.addEventListener(h,lt)),e.createdCallback&&Y&&(e.created=!0,e.createdCallback(),e.created=!1)}function vt(){for(var e,t=0,n=I.length;t<n;t++)e=I[t],S.contains(e)||(n--,I.splice(t--,1),gt(e,u))}function mt(e){throw new Error("A "+e+" type is already registered")}function gt(e,t){var n,r=at(e);-1<r&&(rt(e,w[r]),r=0,t===o&&!e[o]?(e[u]=!1,e[o]=!0,r=1,j&&x.call(I,e)<0&&I.push(e)):t===u&&!e[u]&&(e[o]=!1,e[u]=!0,r=1),r&&(n=e[t+"Callback"])&&n.call(e))}if(i in n)return;var s="__"+i+(Math.random()*1e5>>0),o="attached",u="detached",a="extends",f="ADDITION",l="MODIFICATION",c="REMOVAL",h="DOMAttrModified",p="DOMContentLoaded",d="DOMSubtreeModified",v="<",m="=",g=/^[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+$/,y=["ANNOTATION-XML","COLOR-PROFILE","FONT-FACE","FONT-FACE-SRC","FONT-FACE-URI","FONT-FACE-FORMAT","FONT-FACE-NAME","MISSING-GLYPH"],b=[],w=[],E="",S=n.documentElement,x=b.indexOf||function(e){for(var t=this.length;t--&&this[t]!==e;);return t},T=r.prototype,N=T.hasOwnProperty,C=T.isPrototypeOf,k=r.defineProperty,L=r.getOwnPropertyDescriptor,A=r.getOwnPropertyNames,O=r.getPrototypeOf,M=r.setPrototypeOf,_=!!r.__proto__,D=r.create||function yt(e){return e?(yt.prototype=e,new yt):this},P=M||(_?function(e,t){return e.__proto__=t,e}:A&&L?function(){function e(e,t){for(var n,r=A(t),i=0,s=r.length;i<s;i++)n=r[i],N.call(e,n)||k(e,n,L(t,n))}return function(t,n){do e(t,n);while((n=O(n))&&!C.call(n,t));return t}}():function(e,t){for(var n in t)e[n]=t[n];return e}),H=t.MutationObserver||t.WebKitMutationObserver,B=(t.HTMLElement||t.Element||t.Node).prototype,j=!C.call(B,S),F=j?function(e){return e.nodeType===1}:function(e){return C.call(B,e)},I=j&&[],q=B.cloneNode,R=B.getAttribute,U=B.setAttribute,z=B.removeAttribute,W=n.createElement,X=H&&{attributes:!0,characterData:!0,attributeOldValue:!0},V=H||function(e){Q=!1,S.removeEventListener(h,V)},$,J=t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.msRequestAnimationFrame||function(e){setTimeout(e,10)},K=!1,Q=!0,G=!0,Y=!0,Z,et,tt,nt,rt,it;M||_?(rt=function(e,t){C.call(t,e)||dt(e,t)},it=dt):(rt=function(e,t){e[s]||(e[s]=r(!0),dt(e,t))},it=rt),j?(Q=!1,function(){var t=L(B,"addEventListener"),n=t.value,r=function(e){var t=new CustomEvent(h,{bubbles:!0});t.attrName=e,t.prevValue=R.call(this,e),t.newValue=null,t[c]=t.attrChange=2,z.call(this,e),this.dispatchEvent(t)},i=function(t,n){var r=this.hasAttribute(t),i=r&&R.call(this,t);e=new CustomEvent(h,{bubbles:!0}),U.call(this,t,n),e.attrName=t,e.prevValue=r?i:null,e.newValue=n,r?e[l]=e.attrChange=1:e[f]=e.attrChange=0,this.dispatchEvent(e)},o=function(e){var t=e.currentTarget,n=t[s],r=e.propertyName,i;n.hasOwnProperty(r)&&(n=n[r],i=new CustomEvent(h,{bubbles:!0}),i.attrName=n.name,i.prevValue=n.value||null,i.newValue=n.value=t[r]||null,i.prevValue==null?i[f]=i.attrChange=0:i[l]=i.attrChange=1,t.dispatchEvent(i))};t.value=function(e,t,u){e===h&&this.attributeChangedCallback&&this.setAttribute!==i&&(this[s]={className:{name:"class",value:this.className}},this.setAttribute=i,this.removeAttribute=r,n.call(this,"propertychange",o)),n.call(this,e,t,u)},k(B,"addEventListener",t)}()):H||(S.addEventListener(h,V),S.setAttribute(s,1),S.removeAttribute(s),Q&&(Z=function(e){var t=this,n,r,i;if(t===e.target){n=t[s],t[s]=r=tt(t);for(i in r){if(!(i in n))return et(0,t,i,n[i],r[i],f);if(r[i]!==n[i])return et(1,t,i,n[i],r[i],l)}for(i in n)if(!(i in r))return et(2,t,i,n[i],r[i],c)}},et=function(e,t,n,r,i,s){var o={attrChange:e,currentTarget:t,attrName:n,prevValue:r,newValue:i};o[s]=e,lt(o)},tt=function(e){for(var t,n,r={},i=e.attributes,s=0,o=i.length;s<o;s++)t=i[s],n=t.name,n!=="setAttribute"&&(r[n]=t.value);return r})),n[i]=function(t,r){c=t.toUpperCase(),K||(K=!0,H?(nt=function(e,t){function n(e,t){for(var n=0,r=e.length;n<r;t(e[n++]));}return new H(function(r){for(var i,s,o,u=0,a=r.length;u<a;u++)i=r[u],i.type==="childList"?(n(i.addedNodes,e),n(i.removedNodes,t)):(s=i.target,Y&&s.attributeChangedCallback&&i.attributeName!=="style"&&(o=R.call(s,i.attributeName),o!==i.oldValue&&s.attributeChangedCallback(i.attributeName,i.oldValue,o)))})}(ut(o),ut(u)),nt.observe(n,{childList:!0,subtree:!0})):($=[],J(function d(){while($.length)$.shift().call(null,$.shift());J(d)}),n.addEventListener("DOMNodeInserted",ct(o)),n.addEventListener("DOMNodeRemoved",ct(u))),n.addEventListener(p,ht),n.addEventListener("readystatechange",ht),n.createElement=function(e,t){var r=W.apply(n,arguments),i=""+e,s=x.call(b,(t?m:v)+(t||i).toUpperCase()),o=-1<s;return t&&(r.setAttribute("is",t=t.toLowerCase()),o&&(o=ft(i.toUpperCase(),t))),Y=!n.createElement.innerHTMLHelper,o&&it(r,w[s]),r},B.cloneNode=function(e){var t=q.call(this,!!e),n=at(t);return-1<n&&it(t,w[n]),e&&ot(t.querySelectorAll(E)),t}),-2<x.call(b,m+c)+x.call(b,v+c)&&mt(t);if(!g.test(c)||-1<x.call(y,c))throw new Error("The type "+t+" is invalid");var i=function(){return f?n.createElement(l,c):n.createElement(l)},s=r||T,f=N.call(s,a),l=f?r[a].toUpperCase():c,c,h;return f&&-1<x.call(b,v+l)&&mt(l),h=b.push((f?m:v)+c)-1,E=E.concat(E.length?",":"",f?l+'[is="'+t.toLowerCase()+'"]':l),i.prototype=w[h]=N.call(s,"prototype")?s.prototype:D(B),st(n.querySelectorAll(E),o),i}})(window,document,Object,"registerElement")},{}],14:[function(_dereq_,module,exports){module.exports=function(dtype){switch(dtype){case"int8":return Int8Array;case"int16":return Int16Array;case"int32":return Int32Array;case"uint8":return Uint8Array;case"uint16":return Uint16Array;case"uint32":return Uint32Array;case"float32":return Float32Array;case"float64":return Float64Array;case"array":return Array;case"uint8_clamped":return Uint8ClampedArray}}},{}],15:[function(_dereq_,module,exports){var dtype=_dereq_("dtype");module.exports=flattenVertexData;function flattenVertexData(data,output,offset){if(!data)throw new TypeError("must specify data as first parameter");offset=+(offset||0)|0;if(Array.isArray(data)&&Array.isArray(data[0])){var dim=data[0].length;var length=data.length*dim;if(!output||typeof output==="string"){output=new(dtype(output||"float32"))(length+offset)}var dstLength=output.length-offset;if(length!==dstLength){throw new Error("source length "+length+" ("+dim+"x"+data.length+")"+" does not match destination length "+dstLength)}for(var i=0,k=offset;i<data.length;i++){for(var j=0;j<dim;j++){output[k++]=data[i][j]}}}else{if(!output||typeof output==="string"){var Ctor=dtype(output||"float32");if(offset===0){output=new Ctor(data)}else{output=new Ctor(data.length+offset);output.set(data,offset)}}else{output.set(data,offset)}}return output}},{dtype:14}],16:[function(_dereq_,module,exports){var isFunction=_dereq_("is-function");module.exports=forEach;var toString=Object.prototype.toString;var hasOwnProperty=Object.prototype.hasOwnProperty;function forEach(list,iterator,context){if(!isFunction(iterator)){throw new TypeError("iterator must be a function")}if(arguments.length<3){context=this}if(toString.call(list)==="[object Array]")forEachArray(list,iterator,context);else if(typeof list==="string")forEachString(list,iterator,context);else forEachObject(list,iterator,context)}function forEachArray(array,iterator,context){for(var i=0,len=array.length;i<len;i++){if(hasOwnProperty.call(array,i)){iterator.call(context,array[i],i,array)}}}function forEachString(string,iterator,context){for(var i=0,len=string.length;i<len;i++){iterator.call(context,string.charAt(i),i,string)}}function forEachObject(object,iterator,context){for(var k in object){if(hasOwnProperty.call(object,k)){iterator.call(context,object[k],k,object)}}}},{"is-function":21}],17:[function(_dereq_,module,exports){(function(global){var win;if(typeof window!=="undefined"){win=window}else if(typeof global!=="undefined"){win=global}else if(typeof self!=="undefined"){win=self}else{win={}}module.exports=win}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],18:[function(_dereq_,module,exports){exports.read=function(buffer,offset,isLE,mLen,nBytes){var e,m;var eLen=nBytes*8-mLen-1;var eMax=(1<<eLen)-1;var eBias=eMax>>1;var nBits=-7;var i=isLE?nBytes-1:0;var d=isLE?-1:1;var s=buffer[offset+i];i+=d;e=s&(1<<-nBits)-1;s>>=-nBits;nBits+=eLen;for(;nBits>0;e=e*256+buffer[offset+i],i+=d,nBits-=8){}m=e&(1<<-nBits)-1;e>>=-nBits;nBits+=mLen;for(;nBits>0;m=m*256+buffer[offset+i],
i+=d,nBits-=8){}if(e===0){e=1-eBias}else if(e===eMax){return m?NaN:(s?-1:1)*Infinity}else{m=m+Math.pow(2,mLen);e=e-eBias}return(s?-1:1)*m*Math.pow(2,e-mLen)};exports.write=function(buffer,value,offset,isLE,mLen,nBytes){var e,m,c;var eLen=nBytes*8-mLen-1;var eMax=(1<<eLen)-1;var eBias=eMax>>1;var rt=mLen===23?Math.pow(2,-24)-Math.pow(2,-77):0;var i=isLE?0:nBytes-1;var d=isLE?1:-1;var s=value<0||value===0&&1/value<0?1:0;value=Math.abs(value);if(isNaN(value)||value===Infinity){m=isNaN(value)?1:0;e=eMax}else{e=Math.floor(Math.log(value)/Math.LN2);if(value*(c=Math.pow(2,-e))<1){e--;c*=2}if(e+eBias>=1){value+=rt/c}else{value+=rt*Math.pow(2,1-eBias)}if(value*c>=2){e++;c/=2}if(e+eBias>=eMax){m=0;e=eMax}else if(e+eBias>=1){m=(value*c-1)*Math.pow(2,mLen);e=e+eBias}else{m=value*Math.pow(2,eBias-1)*Math.pow(2,mLen);e=0}}for(;mLen>=8;buffer[offset+i]=m&255,i+=d,m/=256,mLen-=8){}e=e<<mLen|m;eLen+=mLen;for(;eLen>0;buffer[offset+i]=e&255,i+=d,e/=256,eLen-=8){}buffer[offset+i-d]|=s*128}},{}],19:[function(_dereq_,module,exports){if(typeof Object.create==="function"){module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:false,writable:true,configurable:true}})}}else{module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;var TempCtor=function(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor;ctor.prototype.constructor=ctor}}},{}],20:[function(_dereq_,module,exports){module.exports=function(obj){return obj!=null&&(isBuffer(obj)||isSlowBuffer(obj)||!!obj._isBuffer)};function isBuffer(obj){return!!obj.constructor&&typeof obj.constructor.isBuffer==="function"&&obj.constructor.isBuffer(obj)}function isSlowBuffer(obj){return typeof obj.readFloatLE==="function"&&typeof obj.slice==="function"&&isBuffer(obj.slice(0,0))}},{}],21:[function(_dereq_,module,exports){module.exports=isFunction;var toString=Object.prototype.toString;function isFunction(fn){var string=toString.call(fn);return string==="[object Function]"||typeof fn==="function"&&string!=="[object RegExp]"||typeof window!=="undefined"&&(fn===window.setTimeout||fn===window.alert||fn===window.confirm||fn===window.prompt)}},{}],22:[function(_dereq_,module,exports){"use strict";module.exports=function(x){var type=typeof x;return x!==null&&(type==="object"||type==="function")}},{}],23:[function(_dereq_,module,exports){var wordWrap=_dereq_("word-wrapper");var xtend=_dereq_("xtend");var number=_dereq_("as-number");var X_HEIGHTS=["x","e","a","o","n","s","r","c","u","m","v","w","z"];var M_WIDTHS=["m","w"];var CAP_HEIGHTS=["H","I","N","E","F","K","L","T","U","V","W","X","Y","Z"];var TAB_ID=" ".charCodeAt(0);var SPACE_ID=" ".charCodeAt(0);var ALIGN_LEFT=0,ALIGN_CENTER=1,ALIGN_RIGHT=2;module.exports=function createLayout(opt){return new TextLayout(opt)};function TextLayout(opt){this.glyphs=[];this._measure=this.computeMetrics.bind(this);this.update(opt)}TextLayout.prototype.update=function(opt){opt=xtend({measure:this._measure},opt);this._opt=opt;this._opt.tabSize=number(this._opt.tabSize,4);if(!opt.font)throw new Error("must provide a valid bitmap font");var glyphs=this.glyphs;var text=opt.text||"";var font=opt.font;this._setupSpaceGlyphs(font);var lines=wordWrap.lines(text,opt);var minWidth=opt.width||0;glyphs.length=0;var maxLineWidth=lines.reduce(function(prev,line){return Math.max(prev,line.width,minWidth)},0);var x=0;var y=0;var lineHeight=number(opt.lineHeight,font.common.lineHeight);var baseline=font.common.base;var descender=lineHeight-baseline;var letterSpacing=opt.letterSpacing||0;var height=lineHeight*lines.length-descender;var align=getAlignType(this._opt.align);y-=height;this._width=maxLineWidth;this._height=height;this._descender=lineHeight-baseline;this._baseline=baseline;this._xHeight=getXHeight(font);this._capHeight=getCapHeight(font);this._lineHeight=lineHeight;this._ascender=lineHeight-descender-this._xHeight;var self=this;lines.forEach(function(line,lineIndex){var start=line.start;var end=line.end;var lineWidth=line.width;var lastGlyph;for(var i=start;i<end;i++){var id=text.charCodeAt(i);var glyph=self.getGlyph(font,id);if(glyph){if(lastGlyph)x+=getKerning(font,lastGlyph.id,glyph.id);var tx=x;if(align===ALIGN_CENTER)tx+=(maxLineWidth-lineWidth)/2;else if(align===ALIGN_RIGHT)tx+=maxLineWidth-lineWidth;glyphs.push({position:[tx,y],data:glyph,index:i,line:lineIndex});x+=glyph.xadvance+letterSpacing;lastGlyph=glyph}}y+=lineHeight;x=0});this._linesTotal=lines.length};TextLayout.prototype._setupSpaceGlyphs=function(font){this._fallbackSpaceGlyph=null;this._fallbackTabGlyph=null;if(!font.chars||font.chars.length===0)return;var space=getGlyphById(font,SPACE_ID)||getMGlyph(font)||font.chars[0];var tabWidth=this._opt.tabSize*space.xadvance;this._fallbackSpaceGlyph=space;this._fallbackTabGlyph=xtend(space,{x:0,y:0,xadvance:tabWidth,id:TAB_ID,xoffset:0,yoffset:0,width:0,height:0})};TextLayout.prototype.getGlyph=function(font,id){var glyph=getGlyphById(font,id);if(glyph)return glyph;else if(id===TAB_ID)return this._fallbackTabGlyph;else if(id===SPACE_ID)return this._fallbackSpaceGlyph;return null};TextLayout.prototype.computeMetrics=function(text,start,end,width){var letterSpacing=this._opt.letterSpacing||0;var font=this._opt.font;var curPen=0;var curWidth=0;var count=0;var glyph;var lastGlyph;if(!font.chars||font.chars.length===0){return{start:start,end:start,width:0}}end=Math.min(text.length,end);for(var i=start;i<end;i++){var id=text.charCodeAt(i);var glyph=this.getGlyph(font,id);if(glyph){var xoff=glyph.xoffset;var kern=lastGlyph?getKerning(font,lastGlyph.id,glyph.id):0;curPen+=kern;var nextPen=curPen+glyph.xadvance+letterSpacing;var nextWidth=curPen+glyph.width;if(nextWidth>=width||nextPen>=width)break;curPen=nextPen;curWidth=nextWidth;lastGlyph=glyph}count++}if(lastGlyph)curWidth+=lastGlyph.xoffset;return{start:start,end:start+count,width:curWidth}};["width","height","descender","ascender","xHeight","baseline","capHeight","lineHeight"].forEach(addGetter);function addGetter(name){Object.defineProperty(TextLayout.prototype,name,{get:wrapper(name),configurable:true})}function wrapper(name){return new Function(["return function "+name+"() {"," return this._"+name,"}"].join("\n"))()}function getGlyphById(font,id){if(!font.chars||font.chars.length===0)return null;var glyphIdx=findChar(font.chars,id);if(glyphIdx>=0)return font.chars[glyphIdx];return null}function getXHeight(font){for(var i=0;i<X_HEIGHTS.length;i++){var id=X_HEIGHTS[i].charCodeAt(0);var idx=findChar(font.chars,id);if(idx>=0)return font.chars[idx].height}return 0}function getMGlyph(font){for(var i=0;i<M_WIDTHS.length;i++){var id=M_WIDTHS[i].charCodeAt(0);var idx=findChar(font.chars,id);if(idx>=0)return font.chars[idx]}return 0}function getCapHeight(font){for(var i=0;i<CAP_HEIGHTS.length;i++){var id=CAP_HEIGHTS[i].charCodeAt(0);var idx=findChar(font.chars,id);if(idx>=0)return font.chars[idx].height}return 0}function getKerning(font,left,right){if(!font.kernings||font.kernings.length===0)return 0;var table=font.kernings;for(var i=0;i<table.length;i++){var kern=table[i];if(kern.first===left&&kern.second===right)return kern.amount}return 0}function getAlignType(align){if(align==="center")return ALIGN_CENTER;else if(align==="right")return ALIGN_RIGHT;return ALIGN_LEFT}function findChar(array,value,start){start=start||0;for(var i=start;i<array.length;i++){if(array[i].id===value){return i}}return-1}},{"as-number":3,"word-wrapper":72,xtend:75}],24:[function(_dereq_,module,exports){(function(Buffer){var xhr=_dereq_("xhr");var noop=function(){};var parseASCII=_dereq_("parse-bmfont-ascii");var parseXML=_dereq_("parse-bmfont-xml");var readBinary=_dereq_("parse-bmfont-binary");var isBinaryFormat=_dereq_("./lib/is-binary");var xtend=_dereq_("xtend");var xml2=function hasXML2(){return self.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}();module.exports=function(opt,cb){cb=typeof cb==="function"?cb:noop;if(typeof opt==="string")opt={uri:opt};else if(!opt)opt={};var expectBinary=opt.binary;if(expectBinary)opt=getBinaryOpts(opt);xhr(opt,function(err,res,body){if(err)return cb(err);if(!/^2/.test(res.statusCode))return cb(new Error("http status code: "+res.statusCode));if(!body)return cb(new Error("no body result"));var binary=false;if(isArrayBuffer(body)){var array=new Uint8Array(body);body=new Buffer(array,"binary")}if(isBinaryFormat(body)){binary=true;if(typeof body==="string")body=new Buffer(body,"binary")}if(!binary){if(Buffer.isBuffer(body))body=body.toString(opt.encoding);body=body.trim()}var result;try{var type=res.headers["content-type"];if(binary)result=readBinary(body);else if(/json/.test(type)||body.charAt(0)==="{")result=JSON.parse(body);else if(/xml/.test(type)||body.charAt(0)==="<")result=parseXML(body);else result=parseASCII(body)}catch(e){cb(new Error("error parsing font "+e.message));cb=noop}cb(null,result)})};function isArrayBuffer(arr){var str=Object.prototype.toString;return str.call(arr)==="[object ArrayBuffer]"}function getBinaryOpts(opt){if(xml2)return xtend(opt,{responseType:"arraybuffer"});if(typeof self.XMLHttpRequest==="undefined")throw new Error("your browser does not support XHR loading");var req=new self.XMLHttpRequest;req.overrideMimeType("text/plain; charset=x-user-defined");return xtend({xhr:req},opt)}}).call(this,_dereq_("buffer").Buffer)},{"./lib/is-binary":25,buffer:8,"parse-bmfont-ascii":27,"parse-bmfont-binary":28,"parse-bmfont-xml":29,xhr:73,xtend:75}],25:[function(_dereq_,module,exports){(function(Buffer){var equal=_dereq_("buffer-equal");var HEADER=new Buffer([66,77,70,3]);module.exports=function(buf){if(typeof buf==="string")return buf.substring(0,3)==="BMF";return buf.length>4&&equal(buf.slice(0,4),HEADER)}}).call(this,_dereq_("buffer").Buffer)},{buffer:8,"buffer-equal":7}],26:[function(_dereq_,module,exports){"use strict";var getOwnPropertySymbols=Object.getOwnPropertySymbols;var hasOwnProperty=Object.prototype.hasOwnProperty;var propIsEnumerable=Object.prototype.propertyIsEnumerable;function toObject(val){if(val===null||val===undefined){throw new TypeError("Object.assign cannot be called with null or undefined")}return Object(val)}function shouldUseNative(){try{if(!Object.assign){return false}var test1=new String("abc");test1[5]="de";if(Object.getOwnPropertyNames(test1)[0]==="5"){return false}var test2={};for(var i=0;i<10;i++){test2["_"+String.fromCharCode(i)]=i}var order2=Object.getOwnPropertyNames(test2).map(function(n){return test2[n]});if(order2.join("")!=="0123456789"){return false}var test3={};"abcdefghijklmnopqrst".split("").forEach(function(letter){test3[letter]=letter});if(Object.keys(Object.assign({},test3)).join("")!=="abcdefghijklmnopqrst"){return false}return true}catch(err){return false}}module.exports=shouldUseNative()?Object.assign:function(target,source){var from;var to=toObject(target);var symbols;for(var s=1;s<arguments.length;s++){from=Object(arguments[s]);for(var key in from){if(hasOwnProperty.call(from,key)){to[key]=from[key]}}if(getOwnPropertySymbols){symbols=getOwnPropertySymbols(from);for(var i=0;i<symbols.length;i++){if(propIsEnumerable.call(from,symbols[i])){to[symbols[i]]=from[symbols[i]]}}}}return to}},{}],27:[function(_dereq_,module,exports){module.exports=function parseBMFontAscii(data){if(!data)throw new Error("no data provided");data=data.toString().trim();var output={pages:[],chars:[],kernings:[]};var lines=data.split(/\r\n?|\n/g);if(lines.length===0)throw new Error("no data in BMFont file");for(var i=0;i<lines.length;i++){var lineData=splitLine(lines[i],i);if(!lineData)continue;if(lineData.key==="page"){if(typeof lineData.data.id!=="number")throw new Error("malformed file at line "+i+" -- needs page id=N");if(typeof lineData.data.file!=="string")throw new Error("malformed file at line "+i+' -- needs page file="path"');output.pages[lineData.data.id]=lineData.data.file}else if(lineData.key==="chars"||lineData.key==="kernings"){}else if(lineData.key==="char"){output.chars.push(lineData.data)}else if(lineData.key==="kerning"){output.kernings.push(lineData.data)}else{output[lineData.key]=lineData.data}}return output};function splitLine(line,idx){line=line.replace(/\t+/g," ").trim();if(!line)return null;var space=line.indexOf(" ");if(space===-1)throw new Error("no named row at line "+idx);var key=line.substring(0,space);line=line.substring(space+1);line=line.replace(/letter=[\'\"]\S+[\'\"]/gi,"");line=line.split("=");line=line.map(function(str){return str.trim().match(/(".*?"|[^"\s]+)+(?=\s*|\s*$)/g)});var data=[];for(var i=0;i<line.length;i++){var dt=line[i];if(i===0){data.push({key:dt[0],data:""})}else if(i===line.length-1){data[data.length-1].data=parseData(dt[0])}else{data[data.length-1].data=parseData(dt[0]);data.push({key:dt[1],data:""})}}var out={key:key,data:{}};data.forEach(function(v){out.data[v.key]=v.data});return out}function parseData(data){if(!data||data.length===0)return"";if(data.indexOf('"')===0||data.indexOf("'")===0)return data.substring(1,data.length-1);if(data.indexOf(",")!==-1)return parseIntList(data);return parseInt(data,10)}function parseIntList(data){return data.split(",").map(function(val){return parseInt(val,10)})}},{}],28:[function(_dereq_,module,exports){var HEADER=[66,77,70];module.exports=function readBMFontBinary(buf){if(buf.length<6)throw new Error("invalid buffer length for BMFont");var header=HEADER.every(function(byte,i){return buf.readUInt8(i)===byte});if(!header)throw new Error("BMFont missing BMF byte header");var i=3;var vers=buf.readUInt8(i++);if(vers>3)throw new Error("Only supports BMFont Binary v3 (BMFont App v1.10)");var target={kernings:[],chars:[]};for(var b=0;b<5;b++)i+=readBlock(target,buf,i);return target};function readBlock(target,buf,i){if(i>buf.length-1)return 0;var blockID=buf.readUInt8(i++);var blockSize=buf.readInt32LE(i);i+=4;switch(blockID){case 1:target.info=readInfo(buf,i);break;case 2:target.common=readCommon(buf,i);break;case 3:target.pages=readPages(buf,i,blockSize);break;case 4:target.chars=readChars(buf,i,blockSize);break;case 5:target.kernings=readKernings(buf,i,blockSize);break}return 5+blockSize}function readInfo(buf,i){var info={};info.size=buf.readInt16LE(i);var bitField=buf.readUInt8(i+2);info.smooth=bitField>>7&1;info.unicode=bitField>>6&1;info.italic=bitField>>5&1;info.bold=bitField>>4&1;if(bitField>>3&1)info.fixedHeight=1;info.charset=buf.readUInt8(i+3)||"";info.stretchH=buf.readUInt16LE(i+4);info.aa=buf.readUInt8(i+6);info.padding=[buf.readInt8(i+7),buf.readInt8(i+8),buf.readInt8(i+9),buf.readInt8(i+10)];info.spacing=[buf.readInt8(i+11),buf.readInt8(i+12)];info.outline=buf.readUInt8(i+13);info.face=readStringNT(buf,i+14);return info}function readCommon(buf,i){var common={};common.lineHeight=buf.readUInt16LE(i);common.base=buf.readUInt16LE(i+2);common.scaleW=buf.readUInt16LE(i+4);common.scaleH=buf.readUInt16LE(i+6);common.pages=buf.readUInt16LE(i+8);var bitField=buf.readUInt8(i+10);common.packed=0;common.alphaChnl=buf.readUInt8(i+11);common.redChnl=buf.readUInt8(i+12);common.greenChnl=buf.readUInt8(i+13);common.blueChnl=buf.readUInt8(i+14);return common}function readPages(buf,i,size){var pages=[];var text=readNameNT(buf,i);var len=text.length+1;var count=size/len;for(var c=0;c<count;c++){pages[c]=buf.slice(i,i+text.length).toString("utf8");i+=len}return pages}function readChars(buf,i,blockSize){var chars=[];var count=blockSize/20;for(var c=0;c<count;c++){var char={};var off=c*20;char.id=buf.readUInt32LE(i+0+off);char.x=buf.readUInt16LE(i+4+off);char.y=buf.readUInt16LE(i+6+off);char.width=buf.readUInt16LE(i+8+off);char.height=buf.readUInt16LE(i+10+off);char.xoffset=buf.readInt16LE(i+12+off);char.yoffset=buf.readInt16LE(i+14+off);char.xadvance=buf.readInt16LE(i+16+off);char.page=buf.readUInt8(i+18+off);char.chnl=buf.readUInt8(i+19+off);chars[c]=char}return chars}function readKernings(buf,i,blockSize){var kernings=[];var count=blockSize/10;for(var c=0;c<count;c++){var kern={};var off=c*10;kern.first=buf.readUInt32LE(i+0+off);kern.second=buf.readUInt32LE(i+4+off);kern.amount=buf.readInt16LE(i+8+off);kernings[c]=kern}return kernings}function readNameNT(buf,offset){var pos=offset;for(;pos<buf.length;pos++){if(buf[pos]===0)break}return buf.slice(offset,pos)}function readStringNT(buf,offset){return readNameNT(buf,offset).toString("utf8")}},{}],29:[function(_dereq_,module,exports){var parseAttributes=_dereq_("./parse-attribs");var parseFromString=_dereq_("xml-parse-from-string");var NAME_MAP={scaleh:"scaleH",scalew:"scaleW",stretchh:"stretchH",lineheight:"lineHeight",alphachnl:"alphaChnl",redchnl:"redChnl",greenchnl:"greenChnl",bluechnl:"blueChnl"};module.exports=function parse(data){data=data.toString();var xmlRoot=parseFromString(data);var output={pages:[],chars:[],kernings:[]};["info","common"].forEach(function(key){var element=xmlRoot.getElementsByTagName(key)[0];if(element)output[key]=parseAttributes(getAttribs(element))});var pageRoot=xmlRoot.getElementsByTagName("pages")[0];if(!pageRoot)throw new Error("malformed file -- no <pages> element");var pages=pageRoot.getElementsByTagName("page");for(var i=0;i<pages.length;i++){var p=pages[i];var id=parseInt(p.getAttribute("id"),10);var file=p.getAttribute("file");if(isNaN(id))throw new Error('malformed file -- page "id" attribute is NaN');if(!file)throw new Error('malformed file -- needs page "file" attribute');output.pages[parseInt(id,10)]=file}["chars","kernings"].forEach(function(key){var element=xmlRoot.getElementsByTagName(key)[0];if(!element)return;var childTag=key.substring(0,key.length-1);var children=element.getElementsByTagName(childTag);for(var i=0;i<children.length;i++){var child=children[i];output[key].push(parseAttributes(getAttribs(child)))}});return output};function getAttribs(element){var attribs=getAttribList(element);return attribs.reduce(function(dict,attrib){var key=mapName(attrib.nodeName);dict[key]=attrib.nodeValue;return dict},{})}function getAttribList(element){var attribs=[];for(var i=0;i<element.attributes.length;i++)attribs.push(element.attributes[i]);return attribs}function mapName(nodeName){return NAME_MAP[nodeName.toLowerCase()]||nodeName}},{"./parse-attribs":30,"xml-parse-from-string":74}],30:[function(_dereq_,module,exports){var GLYPH_DESIGNER_ERROR="chasrset";module.exports=function parseAttributes(obj){if(GLYPH_DESIGNER_ERROR in obj){obj["charset"]=obj[GLYPH_DESIGNER_ERROR];delete obj[GLYPH_DESIGNER_ERROR]}for(var k in obj){if(k==="face"||k==="charset")continue;else if(k==="padding"||k==="spacing")obj[k]=parseIntList(obj[k]);else obj[k]=parseInt(obj[k],10)}return obj};function parseIntList(data){return data.split(",").map(function(val){return parseInt(val,10)})}},{}],31:[function(_dereq_,module,exports){var trim=_dereq_("trim"),forEach=_dereq_("for-each"),isArray=function(arg){return Object.prototype.toString.call(arg)==="[object Array]"};module.exports=function(headers){if(!headers)return{};var result={};forEach(trim(headers).split("\n"),function(row){var index=row.indexOf(":"),key=trim(row.slice(0,index)).toLowerCase(),value=trim(row.slice(index+1));if(typeof result[key]==="undefined"){result[key]=value}else if(isArray(result[key])){result[key].push(value)}else{result[key]=[result[key],value]}});return result}},{"for-each":16,trim:46}],32:[function(_dereq_,module,exports){(function(process){function normalizeArray(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up--;up){parts.unshift("..")}}return parts}var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;var splitPath=function(filename){return splitPathRe.exec(filename).slice(1)};exports.resolve=function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:process.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){continue}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=normalizeArray(filter(resolvedPath.split("/"),function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."};exports.normalize=function(path){var isAbsolute=exports.isAbsolute(path),trailingSlash=substr(path,-1)==="/";path=normalizeArray(filter(path.split("/"),function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path};exports.isAbsolute=function(path){return path.charAt(0)==="/"};exports.join=function(){var paths=Array.prototype.slice.call(arguments,0);return exports.normalize(filter(paths,function(p,index){if(typeof p!=="string"){throw new TypeError("Arguments to path.join must be strings")}return p}).join("/"))};exports.relative=function(from,to){from=exports.resolve(from).substr(1);to=exports.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")};exports.sep="/";exports.delimiter=":";exports.dirname=function(path){var result=splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir};exports.basename=function(path,ext){var f=splitPath(path)[2];if(ext&&f.substr(-1*ext.length)===ext){f=f.substr(0,f.length-ext.length)}return f};exports.extname=function(path){return splitPath(path)[3]};function filter(xs,f){if(xs.filter)return xs.filter(f);var res=[];for(var i=0;i<xs.length;i++){if(f(xs[i],i,xs))res.push(xs[i])}return res}var substr="ab".substr(-1)==="b"?function(str,start,len){return str.substr(start,len)}:function(str,start,len){if(start<0)start=str.length+start;return str.substr(start,len)}}).call(this,_dereq_("_process"))},{_process:6}],33:[function(_dereq_,module,exports){(function(global){var performance=global.performance||{};var present=function(){var names=["now","webkitNow","msNow","mozNow","oNow"];while(names.length){var name=names.shift();if(name in performance){return performance[name].bind(performance)}}var dateNow=Date.now||function(){return(new Date).getTime()};var navigationStart=(performance.timing||{}).navigationStart||dateNow();return function(){return dateNow()-navigationStart}}();present.performanceNow=performance.now;present.noConflict=function(){performance.now=present.performanceNow};present.conflict=function(){performance.now=present};present.conflict();module.exports=present}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],34:[function(_dereq_,module,exports){(function(root){var setTimeoutFunc=setTimeout;var asap=typeof setImmediate==="function"&&setImmediate||function(fn){setTimeoutFunc(fn,1)};function bind(fn,thisArg){return function(){fn.apply(thisArg,arguments)}}var isArray=Array.isArray||function(value){return Object.prototype.toString.call(value)==="[object Array]"};function Promise(fn){if(typeof this!=="object")throw new TypeError("Promises must be constructed via new");if(typeof fn!=="function")throw new TypeError("not a function");this._state=null;this._value=null;this._deferreds=[];doResolve(fn,bind(resolve,this),bind(reject,this))}function handle(deferred){var me=this;if(this._state===null){this._deferreds.push(deferred);return}asap(function(){var cb=me._state?deferred.onFulfilled:deferred.onRejected;if(cb===null){(me._state?deferred.resolve:deferred.reject)(me._value);return}var ret;try{ret=cb(me._value)}catch(e){deferred.reject(e);return}deferred.resolve(ret)})}function resolve(newValue){try{if(newValue===this)throw new TypeError("A promise cannot be resolved with itself.");if(newValue&&(typeof newValue==="object"||typeof newValue==="function")){var then=newValue.then;if(typeof then==="function"){doResolve(bind(then,newValue),bind(resolve,this),bind(reject,this));return}}this._state=true;this._value=newValue;finale.call(this)}catch(e){reject.call(this,e)}}function reject(newValue){this._state=false;this._value=newValue;finale.call(this)}function finale(){for(var i=0,len=this._deferreds.length;i<len;i++){handle.call(this,this._deferreds[i])}this._deferreds=null}function Handler(onFulfilled,onRejected,resolve,reject){this.onFulfilled=typeof onFulfilled==="function"?onFulfilled:null;this.onRejected=typeof onRejected==="function"?onRejected:null;this.resolve=resolve;this.reject=reject}function doResolve(fn,onFulfilled,onRejected){var done=false;try{fn(function(value){if(done)return;done=true;onFulfilled(value)},function(reason){if(done)return;done=true;onRejected(reason)})}catch(ex){if(done)return;done=true;onRejected(ex)}}Promise.prototype["catch"]=function(onRejected){return this.then(null,onRejected)};Promise.prototype.then=function(onFulfilled,onRejected){var me=this;return new Promise(function(resolve,reject){handle.call(me,new Handler(onFulfilled,onRejected,resolve,reject))})};Promise.all=function(){var args=Array.prototype.slice.call(arguments.length===1&&isArray(arguments[0])?arguments[0]:arguments);return new Promise(function(resolve,reject){if(args.length===0)return resolve([]);var remaining=args.length;function res(i,val){try{if(val&&(typeof val==="object"||typeof val==="function")){var then=val.then;if(typeof then==="function"){then.call(val,function(val){res(i,val)},reject);return}}args[i]=val;if(--remaining===0){resolve(args)}}catch(ex){reject(ex)}}for(var i=0;i<args.length;i++){res(i,args[i])}})};Promise.resolve=function(value){if(value&&typeof value==="object"&&value.constructor===Promise){return value}return new Promise(function(resolve){resolve(value)})};Promise.reject=function(value){return new Promise(function(resolve,reject){reject(value)})};Promise.race=function(values){return new Promise(function(resolve,reject){for(var i=0,len=values.length;i<len;i++){values[i].then(resolve,reject)}})};Promise._setImmediateFn=function _setImmediateFn(fn){asap=fn};if(typeof module!=="undefined"&&module.exports){module.exports=Promise}else if(!root.Promise){root.Promise=Promise}})(this)},{}],35:[function(_dereq_,module,exports){var dtype=_dereq_("dtype");var anArray=_dereq_("an-array");var isBuffer=_dereq_("is-buffer");var CW=[0,2,3];var CCW=[2,1,3];module.exports=function createQuadElements(array,opt){if(!array||!(anArray(array)||isBuffer(array))){opt=array||{};array=null}if(typeof opt==="number")opt={count:opt};else opt=opt||{};var type=typeof opt.type==="string"?opt.type:"uint16";var count=typeof opt.count==="number"?opt.count:1;var start=opt.start||0;var dir=opt.clockwise!==false?CW:CCW,a=dir[0],b=dir[1],c=dir[2];var numIndices=count*6;var indices=array||new(dtype(type))(numIndices);for(var i=0,j=0;i<numIndices;i+=6,j+=4){var x=i+start;indices[x+0]=j+0;indices[x+1]=j+1;indices[x+2]=j+2;indices[x+3]=j+a;indices[x+4]=j+b;indices[x+5]=j+c}return indices}},{"an-array":2,dtype:14,"is-buffer":20}],36:[function(_dereq_,module,exports){function parse(raw,opts){opts=opts||{};var preserveNumbers=opts.preserveNumbers;var trim=function(s){return s.trim()};var obj={};getKeyValueChunks(raw).map(trim).filter(Boolean).forEach(function(item){var pos=item.indexOf(":");var key=item.substr(0,pos).trim();var val=item.substr(pos+1).trim();if(preserveNumbers&&isNumeric(val)){val=Number(val)}obj[key]=val});return obj}function isNumeric(n){return!isNaN(parseFloat(n))&&isFinite(n)}function getKeyValueChunks(raw){var chunks=[];var offset=0;var sep=";";var hasUnclosedUrl=/url\([^\)]+$/;var chunk="";var nextSplit;while(offset<raw.length){nextSplit=raw.indexOf(sep,offset);if(nextSplit===-1){nextSplit=raw.length}chunk+=raw.substring(offset,nextSplit);if(hasUnclosedUrl.test(chunk)){chunk+=";";offset=nextSplit+1;continue}chunks.push(chunk);chunk="";offset=nextSplit+1}return chunks}function stringify(obj){return Object.keys(obj).map(function(key){return key+":"+obj[key]}).join(";")}function normalize(str,opts){return stringify(parse(str,opts))}module.exports.parse=parse;module.exports.stringify=stringify;module.exports.normalize=normalize},{}],37:[function(_dereq_,module,exports){var createLayout=_dereq_("layout-bmfont-text");var inherits=_dereq_("inherits");var createIndices=_dereq_("quad-indices");var buffer=_dereq_("three-buffer-vertex-data");var assign=_dereq_("object-assign");var vertices=_dereq_("./lib/vertices");var utils=_dereq_("./lib/utils");var Base=THREE.BufferGeometry;module.exports=function createTextGeometry(opt){return new TextGeometry(opt)};function TextGeometry(opt){Base.call(this);if(typeof opt==="string"){opt={text:opt}}this._opt=assign({},opt);if(opt)this.update(opt)}inherits(TextGeometry,Base);TextGeometry.prototype.update=function(opt){if(typeof opt==="string"){opt={text:opt}}opt=assign({},this._opt,opt);if(!opt.font){throw new TypeError("must specify a { font } in options")}this.layout=createLayout(opt);var flipY=opt.flipY!==false;var font=opt.font;var texWidth=font.common.scaleW;var texHeight=font.common.scaleH;var glyphs=this.layout.glyphs.filter(function(glyph){var bitmap=glyph.data;return bitmap.width*bitmap.height>0});this.visibleGlyphs=glyphs;var positions=vertices.positions(glyphs);var uvs=vertices.uvs(glyphs,texWidth,texHeight,flipY);var indices=createIndices({clockwise:true,type:"uint16",count:glyphs.length});buffer.index(this,indices,1,"uint16");buffer.attr(this,"position",positions,2);buffer.attr(this,"uv",uvs,2);if(!opt.multipage&&"page"in this.attributes){this.removeAttribute("page")}else if(opt.multipage){var pages=vertices.pages(glyphs);buffer.attr(this,"page",pages,1)}};TextGeometry.prototype.computeBoundingSphere=function(){if(this.boundingSphere===null){this.boundingSphere=new THREE.Sphere}var positions=this.attributes.position.array;var itemSize=this.attributes.position.itemSize;if(!positions||!itemSize||positions.length<2){this.boundingSphere.radius=0;this.boundingSphere.center.set(0,0,0);return}utils.computeSphere(positions,this.boundingSphere);if(isNaN(this.boundingSphere.radius)){console.error("THREE.BufferGeometry.computeBoundingSphere(): "+"Computed radius is NaN. The "+'"position" attribute is likely to have NaN values.')}};TextGeometry.prototype.computeBoundingBox=function(){if(this.boundingBox===null){this.boundingBox=new THREE.Box3}var bbox=this.boundingBox;var positions=this.attributes.position.array;var itemSize=this.attributes.position.itemSize;if(!positions||!itemSize||positions.length<2){bbox.makeEmpty();return}utils.computeBox(positions,bbox)}},{"./lib/utils":38,"./lib/vertices":39,inherits:19,"layout-bmfont-text":23,"object-assign":26,"quad-indices":35,"three-buffer-vertex-data":40}],38:[function(_dereq_,module,exports){var itemSize=2;var box={min:[0,0],max:[0,0]};function bounds(positions){var count=positions.length/itemSize;box.min[0]=positions[0];box.min[1]=positions[1];box.max[0]=positions[0];box.max[1]=positions[1];for(var i=0;i<count;i++){var x=positions[i*itemSize+0];var y=positions[i*itemSize+1];box.min[0]=Math.min(x,box.min[0]);box.min[1]=Math.min(y,box.min[1]);box.max[0]=Math.max(x,box.max[0]);box.max[1]=Math.max(y,box.max[1])}}module.exports.computeBox=function(positions,output){bounds(positions);output.min.set(box.min[0],box.min[1],0);output.max.set(box.max[0],box.max[1],0)};module.exports.computeSphere=function(positions,output){bounds(positions);var minX=box.min[0];var minY=box.min[1];var maxX=box.max[0];var maxY=box.max[1];var width=maxX-minX;var height=maxY-minY;var length=Math.sqrt(width*width+height*height);output.center.set(minX+width/2,minY+height/2,0);
output.radius=length/2}},{}],39:[function(_dereq_,module,exports){module.exports.pages=function pages(glyphs){var pages=new Float32Array(glyphs.length*4*1);var i=0;glyphs.forEach(function(glyph){var id=glyph.data.page||0;pages[i++]=id;pages[i++]=id;pages[i++]=id;pages[i++]=id});return pages};module.exports.uvs=function uvs(glyphs,texWidth,texHeight,flipY){var uvs=new Float32Array(glyphs.length*4*2);var i=0;glyphs.forEach(function(glyph){var bitmap=glyph.data;var bw=bitmap.x+bitmap.width;var bh=bitmap.y+bitmap.height;var u0=bitmap.x/texWidth;var v1=bitmap.y/texHeight;var u1=bw/texWidth;var v0=bh/texHeight;if(flipY){v1=(texHeight-bitmap.y)/texHeight;v0=(texHeight-bh)/texHeight}uvs[i++]=u0;uvs[i++]=v1;uvs[i++]=u0;uvs[i++]=v0;uvs[i++]=u1;uvs[i++]=v0;uvs[i++]=u1;uvs[i++]=v1});return uvs};module.exports.positions=function positions(glyphs){var positions=new Float32Array(glyphs.length*4*2);var i=0;glyphs.forEach(function(glyph){var bitmap=glyph.data;var x=glyph.position[0]+bitmap.xoffset;var y=glyph.position[1]+bitmap.yoffset;var w=bitmap.width;var h=bitmap.height;positions[i++]=x;positions[i++]=y;positions[i++]=x;positions[i++]=y+h;positions[i++]=x+w;positions[i++]=y+h;positions[i++]=x+w;positions[i++]=y});return positions}},{}],40:[function(_dereq_,module,exports){var flatten=_dereq_("flatten-vertex-data");var warned=false;module.exports.attr=setAttribute;module.exports.index=setIndex;function setIndex(geometry,data,itemSize,dtype){if(typeof itemSize!=="number")itemSize=1;if(typeof dtype!=="string")dtype="uint16";var isR69=!geometry.index&&typeof geometry.setIndex!=="function";var attrib=isR69?geometry.getAttribute("index"):geometry.index;var newAttrib=updateAttribute(attrib,data,itemSize,dtype);if(newAttrib){if(isR69)geometry.addAttribute("index",newAttrib);else geometry.index=newAttrib}}function setAttribute(geometry,key,data,itemSize,dtype){if(typeof itemSize!=="number")itemSize=3;if(typeof dtype!=="string")dtype="float32";if(Array.isArray(data)&&Array.isArray(data[0])&&data[0].length!==itemSize){throw new Error("Nested vertex array has unexpected size; expected "+itemSize+" but found "+data[0].length)}var attrib=geometry.getAttribute(key);var newAttrib=updateAttribute(attrib,data,itemSize,dtype);if(newAttrib){geometry.addAttribute(key,newAttrib)}}function updateAttribute(attrib,data,itemSize,dtype){data=data||[];if(!attrib||rebuildAttribute(attrib,data,itemSize)){data=flatten(data,dtype);var needsNewBuffer=attrib&&typeof attrib.setArray!=="function";if(!attrib||needsNewBuffer){if(needsNewBuffer&&!warned){warned=true;console.warn(["A WebGL buffer is being updated with a new size or itemSize, ","however this version of ThreeJS only supports fixed-size buffers.","\nThe old buffer may still be kept in memory.\n","To avoid memory leaks, it is recommended that you dispose ","your geometries and create new ones, or update to ThreeJS r82 or newer.\n","See here for discussion:\n","https://github.com/mrdoob/three.js/pull/9631"].join(""))}attrib=new THREE.BufferAttribute(data,itemSize)}attrib.itemSize=itemSize;attrib.needsUpdate=true;if(typeof attrib.setArray==="function"){attrib.setArray(data)}return attrib}else{flatten(data,attrib.array);attrib.needsUpdate=true;return null}}function rebuildAttribute(attrib,data,itemSize){if(attrib.itemSize!==itemSize)return true;if(!attrib.array)return true;var attribLength=attrib.array.length;if(Array.isArray(data)&&Array.isArray(data[0])){return attribLength!==data.length*itemSize}else{return attribLength!==data.length}return false}},{"flatten-vertex-data":15}],41:[function(_dereq_,module,exports){(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?factory(exports):typeof define==="function"&&define.amd?define(["exports"],factory):factory(global.THREE=global.THREE||{})})(this,function(exports){"use strict";if(Number.EPSILON===undefined){Number.EPSILON=Math.pow(2,-52)}if(Number.isInteger===undefined){Number.isInteger=function(value){return typeof value==="number"&&isFinite(value)&&Math.floor(value)===value}}if(Math.sign===undefined){Math.sign=function(x){return x<0?-1:x>0?1:+x}}if(Function.prototype.name===undefined){Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}})}if(Object.assign===undefined){(function(){Object.assign=function(target){"use strict";if(target===undefined||target===null){throw new TypeError("Cannot convert undefined or null to object")}var output=Object(target);for(var index=1;index<arguments.length;index++){var source=arguments[index];if(source!==undefined&&source!==null){for(var nextKey in source){if(Object.prototype.hasOwnProperty.call(source,nextKey)){output[nextKey]=source[nextKey]}}}}return output}})()}function EventDispatcher(){}Object.assign(EventDispatcher.prototype,{addEventListener:function(type,listener){if(this._listeners===undefined)this._listeners={};var listeners=this._listeners;if(listeners[type]===undefined){listeners[type]=[]}if(listeners[type].indexOf(listener)===-1){listeners[type].push(listener)}},hasEventListener:function(type,listener){if(this._listeners===undefined)return false;var listeners=this._listeners;return listeners[type]!==undefined&&listeners[type].indexOf(listener)!==-1},removeEventListener:function(type,listener){if(this._listeners===undefined)return;var listeners=this._listeners;var listenerArray=listeners[type];if(listenerArray!==undefined){var index=listenerArray.indexOf(listener);if(index!==-1){listenerArray.splice(index,1)}}},dispatchEvent:function(event){if(this._listeners===undefined)return;var listeners=this._listeners;var listenerArray=listeners[event.type];if(listenerArray!==undefined){event.target=this;var array=listenerArray.slice(0);for(var i=0,l=array.length;i<l;i++){array[i].call(this,event)}}}});var REVISION="86";var MOUSE={LEFT:0,MIDDLE:1,RIGHT:2};var CullFaceNone=0;var CullFaceBack=1;var CullFaceFront=2;var CullFaceFrontBack=3;var FrontFaceDirectionCW=0;var FrontFaceDirectionCCW=1;var BasicShadowMap=0;var PCFShadowMap=1;var PCFSoftShadowMap=2;var FrontSide=0;var BackSide=1;var DoubleSide=2;var FlatShading=1;var SmoothShading=2;var NoColors=0;var FaceColors=1;var VertexColors=2;var NoBlending=0;var NormalBlending=1;var AdditiveBlending=2;var SubtractiveBlending=3;var MultiplyBlending=4;var CustomBlending=5;var AddEquation=100;var SubtractEquation=101;var ReverseSubtractEquation=102;var MinEquation=103;var MaxEquation=104;var ZeroFactor=200;var OneFactor=201;var SrcColorFactor=202;var OneMinusSrcColorFactor=203;var SrcAlphaFactor=204;var OneMinusSrcAlphaFactor=205;var DstAlphaFactor=206;var OneMinusDstAlphaFactor=207;var DstColorFactor=208;var OneMinusDstColorFactor=209;var SrcAlphaSaturateFactor=210;var NeverDepth=0;var AlwaysDepth=1;var LessDepth=2;var LessEqualDepth=3;var EqualDepth=4;var GreaterEqualDepth=5;var GreaterDepth=6;var NotEqualDepth=7;var MultiplyOperation=0;var MixOperation=1;var AddOperation=2;var NoToneMapping=0;var LinearToneMapping=1;var ReinhardToneMapping=2;var Uncharted2ToneMapping=3;var CineonToneMapping=4;var UVMapping=300;var CubeReflectionMapping=301;var CubeRefractionMapping=302;var EquirectangularReflectionMapping=303;var EquirectangularRefractionMapping=304;var SphericalReflectionMapping=305;var CubeUVReflectionMapping=306;var CubeUVRefractionMapping=307;var RepeatWrapping=1e3;var ClampToEdgeWrapping=1001;var MirroredRepeatWrapping=1002;var NearestFilter=1003;var NearestMipMapNearestFilter=1004;var NearestMipMapLinearFilter=1005;var LinearFilter=1006;var LinearMipMapNearestFilter=1007;var LinearMipMapLinearFilter=1008;var UnsignedByteType=1009;var ByteType=1010;var ShortType=1011;var UnsignedShortType=1012;var IntType=1013;var UnsignedIntType=1014;var FloatType=1015;var HalfFloatType=1016;var UnsignedShort4444Type=1017;var UnsignedShort5551Type=1018;var UnsignedShort565Type=1019;var UnsignedInt248Type=1020;var AlphaFormat=1021;var RGBFormat=1022;var RGBAFormat=1023;var LuminanceFormat=1024;var LuminanceAlphaFormat=1025;var RGBEFormat=RGBAFormat;var DepthFormat=1026;var DepthStencilFormat=1027;var RGB_S3TC_DXT1_Format=2001;var RGBA_S3TC_DXT1_Format=2002;var RGBA_S3TC_DXT3_Format=2003;var RGBA_S3TC_DXT5_Format=2004;var RGB_PVRTC_4BPPV1_Format=2100;var RGB_PVRTC_2BPPV1_Format=2101;var RGBA_PVRTC_4BPPV1_Format=2102;var RGBA_PVRTC_2BPPV1_Format=2103;var RGB_ETC1_Format=2151;var LoopOnce=2200;var LoopRepeat=2201;var LoopPingPong=2202;var InterpolateDiscrete=2300;var InterpolateLinear=2301;var InterpolateSmooth=2302;var ZeroCurvatureEnding=2400;var ZeroSlopeEnding=2401;var WrapAroundEnding=2402;var TrianglesDrawMode=0;var TriangleStripDrawMode=1;var TriangleFanDrawMode=2;var LinearEncoding=3e3;var sRGBEncoding=3001;var GammaEncoding=3007;var RGBEEncoding=3002;var LogLuvEncoding=3003;var RGBM7Encoding=3004;var RGBM16Encoding=3005;var RGBDEncoding=3006;var BasicDepthPacking=3200;var RGBADepthPacking=3201;var _Math={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){var chars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");var uuid=new Array(36);var rnd=0,r;return function generateUUID(){for(var i=0;i<36;i++){if(i===8||i===13||i===18||i===23){uuid[i]="-"}else if(i===14){uuid[i]="4"}else{if(rnd<=2)rnd=33554432+Math.random()*16777216|0;r=rnd&15;rnd=rnd>>4;uuid[i]=chars[i===19?r&3|8:r]}}return uuid.join("")}}(),clamp:function(value,min,max){return Math.max(min,Math.min(max,value))},euclideanModulo:function(n,m){return(n%m+m)%m},mapLinear:function(x,a1,a2,b1,b2){return b1+(x-a1)*(b2-b1)/(a2-a1)},lerp:function(x,y,t){return(1-t)*x+t*y},smoothstep:function(x,min,max){if(x<=min)return 0;if(x>=max)return 1;x=(x-min)/(max-min);return x*x*(3-2*x)},smootherstep:function(x,min,max){if(x<=min)return 0;if(x>=max)return 1;x=(x-min)/(max-min);return x*x*x*(x*(x*6-15)+10)},randInt:function(low,high){return low+Math.floor(Math.random()*(high-low+1))},randFloat:function(low,high){return low+Math.random()*(high-low)},randFloatSpread:function(range){return range*(.5-Math.random())},degToRad:function(degrees){return degrees*_Math.DEG2RAD},radToDeg:function(radians){return radians*_Math.RAD2DEG},isPowerOfTwo:function(value){return(value&value-1)===0&&value!==0},nearestPowerOfTwo:function(value){return Math.pow(2,Math.round(Math.log(value)/Math.LN2))},nextPowerOfTwo:function(value){value--;value|=value>>1;value|=value>>2;value|=value>>4;value|=value>>8;value|=value>>16;value++;return value}};function Vector2(x,y){this.x=x||0;this.y=y||0}Object.defineProperties(Vector2.prototype,{width:{get:function(){return this.x},set:function(value){this.x=value}},height:{get:function(){return this.y},set:function(value){this.y=value}}});Object.assign(Vector2.prototype,{isVector2:true,set:function(x,y){this.x=x;this.y=y;return this},setScalar:function(scalar){this.x=scalar;this.y=scalar;return this},setX:function(x){this.x=x;return this},setY:function(y){this.y=y;return this},setComponent:function(index,value){switch(index){case 0:this.x=value;break;case 1:this.y=value;break;default:throw new Error("index is out of range: "+index)}return this},getComponent:function(index){switch(index){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+index)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(v){this.x=v.x;this.y=v.y;return this},add:function(v,w){if(w!==undefined){console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.");return this.addVectors(v,w)}this.x+=v.x;this.y+=v.y;return this},addScalar:function(s){this.x+=s;this.y+=s;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(v,s){this.x+=v.x*s;this.y+=v.y*s;return this},sub:function(v,w){if(w!==undefined){console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.");return this.subVectors(v,w)}this.x-=v.x;this.y-=v.y;return this},subScalar:function(s){this.x-=s;this.y-=s;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(v){this.x*=v.x;this.y*=v.y;return this},multiplyScalar:function(scalar){this.x*=scalar;this.y*=scalar;return this},divide:function(v){this.x/=v.x;this.y/=v.y;return this},divideScalar:function(scalar){return this.multiplyScalar(1/scalar)},min:function(v){this.x=Math.min(this.x,v.x);this.y=Math.min(this.y,v.y);return this},max:function(v){this.x=Math.max(this.x,v.x);this.y=Math.max(this.y,v.y);return this},clamp:function(min,max){this.x=Math.max(min.x,Math.min(max.x,this.x));this.y=Math.max(min.y,Math.min(max.y,this.y));return this},clampScalar:function(){var min=new Vector2;var max=new Vector2;return function clampScalar(minVal,maxVal){min.set(minVal,minVal);max.set(maxVal,maxVal);return this.clamp(min,max)}}(),clampLength:function(min,max){var length=this.length();return this.divideScalar(length||1).multiplyScalar(Math.max(min,Math.min(max,length)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){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);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(v){return this.x*v.x+this.y*v.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){var angle=Math.atan2(this.y,this.x);if(angle<0)angle+=2*Math.PI;return angle},distanceTo:function(v){return Math.sqrt(this.distanceToSquared(v))},distanceToSquared:function(v){var dx=this.x-v.x,dy=this.y-v.y;return dx*dx+dy*dy},distanceToManhattan:function(v){return Math.abs(this.x-v.x)+Math.abs(this.y-v.y)},setLength:function(length){return this.normalize().multiplyScalar(length)},lerp:function(v,alpha){this.x+=(v.x-this.x)*alpha;this.y+=(v.y-this.y)*alpha;return this},lerpVectors:function(v1,v2,alpha){return this.subVectors(v2,v1).multiplyScalar(alpha).add(v1)},equals:function(v){return v.x===this.x&&v.y===this.y},fromArray:function(array,offset){if(offset===undefined)offset=0;this.x=array[offset];this.y=array[offset+1];return this},toArray:function(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this.x;array[offset+1]=this.y;return array},fromBufferAttribute:function(attribute,index,offset){if(offset!==undefined){console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().")}this.x=attribute.getX(index);this.y=attribute.getY(index);return this},rotateAround:function(center,angle){var c=Math.cos(angle),s=Math.sin(angle);var x=this.x-center.x;var y=this.y-center.y;this.x=x*c-y*s+center.x;this.y=x*s+y*c+center.y;return this}});var textureId=0;function Texture(image,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy,encoding){Object.defineProperty(this,"id",{value:textureId++});this.uuid=_Math.generateUUID();this.name="";this.image=image!==undefined?image:Texture.DEFAULT_IMAGE;this.mipmaps=[];this.mapping=mapping!==undefined?mapping:Texture.DEFAULT_MAPPING;this.wrapS=wrapS!==undefined?wrapS:ClampToEdgeWrapping;this.wrapT=wrapT!==undefined?wrapT:ClampToEdgeWrapping;this.magFilter=magFilter!==undefined?magFilter:LinearFilter;this.minFilter=minFilter!==undefined?minFilter:LinearMipMapLinearFilter;this.anisotropy=anisotropy!==undefined?anisotropy:1;this.format=format!==undefined?format:RGBAFormat;this.type=type!==undefined?type:UnsignedByteType;this.offset=new Vector2(0,0);this.repeat=new Vector2(1,1);this.generateMipmaps=true;this.premultiplyAlpha=false;this.flipY=true;this.unpackAlignment=4;this.encoding=encoding!==undefined?encoding:LinearEncoding;this.version=0;this.onUpdate=null}Texture.DEFAULT_IMAGE=undefined;Texture.DEFAULT_MAPPING=UVMapping;Object.defineProperty(Texture.prototype,"needsUpdate",{set:function(value){if(value===true)this.version++}});Object.assign(Texture.prototype,EventDispatcher.prototype,{constructor:Texture,isTexture:true,clone:function(){return(new this.constructor).copy(this)},copy:function(source){this.name=source.name;this.image=source.image;this.mipmaps=source.mipmaps.slice(0);this.mapping=source.mapping;this.wrapS=source.wrapS;this.wrapT=source.wrapT;this.magFilter=source.magFilter;this.minFilter=source.minFilter;this.anisotropy=source.anisotropy;this.format=source.format;this.type=source.type;this.offset.copy(source.offset);this.repeat.copy(source.repeat);this.generateMipmaps=source.generateMipmaps;this.premultiplyAlpha=source.premultiplyAlpha;this.flipY=source.flipY;this.unpackAlignment=source.unpackAlignment;this.encoding=source.encoding;return this},toJSON:function(meta){if(meta.textures[this.uuid]!==undefined){return meta.textures[this.uuid]}function getDataURL(image){var canvas;if(image.toDataURL!==undefined){canvas=image}else{canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");canvas.width=image.width;canvas.height=image.height;canvas.getContext("2d").drawImage(image,0,0,image.width,image.height)}if(canvas.width>2048||canvas.height>2048){return canvas.toDataURL("image/jpeg",.6)}else{return canvas.toDataURL("image/png")}}var output={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],wrap:[this.wrapS,this.wrapT],minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY};if(this.image!==undefined){var image=this.image;if(image.uuid===undefined){image.uuid=_Math.generateUUID()}if(meta.images[image.uuid]===undefined){meta.images[image.uuid]={uuid:image.uuid,url:getDataURL(image)}}output.image=image.uuid}meta.textures[this.uuid]=output;return output},dispose:function(){this.dispatchEvent({type:"dispose"})},transformUv:function(uv){if(this.mapping!==UVMapping)return;uv.multiply(this.repeat);uv.add(this.offset);if(uv.x<0||uv.x>1){switch(this.wrapS){case RepeatWrapping:uv.x=uv.x-Math.floor(uv.x);break;case ClampToEdgeWrapping:uv.x=uv.x<0?0:1;break;case MirroredRepeatWrapping:if(Math.abs(Math.floor(uv.x)%2)===1){uv.x=Math.ceil(uv.x)-uv.x}else{uv.x=uv.x-Math.floor(uv.x)}break}}if(uv.y<0||uv.y>1){switch(this.wrapT){case RepeatWrapping:uv.y=uv.y-Math.floor(uv.y);break;case ClampToEdgeWrapping:uv.y=uv.y<0?0:1;break;case MirroredRepeatWrapping:if(Math.abs(Math.floor(uv.y)%2)===1){uv.y=Math.ceil(uv.y)-uv.y}else{uv.y=uv.y-Math.floor(uv.y)}break}}if(this.flipY){uv.y=1-uv.y}}});function Vector4(x,y,z,w){this.x=x||0;this.y=y||0;this.z=z||0;this.w=w!==undefined?w:1}Object.assign(Vector4.prototype,{isVector4:true,set:function(x,y,z,w){this.x=x;this.y=y;this.z=z;this.w=w;return this},setScalar:function(scalar){this.x=scalar;this.y=scalar;this.z=scalar;this.w=scalar;return this},setX:function(x){this.x=x;return this},setY:function(y){this.y=y;return this},setZ:function(z){this.z=z;return this},setW:function(w){this.w=w;return this},setComponent:function(index,value){switch(index){case 0:this.x=value;break;case 1:this.y=value;break;case 2:this.z=value;break;case 3:this.w=value;break;default:throw new Error("index is out of range: "+index)}return this},getComponent:function(index){switch(index){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+index)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(v){this.x=v.x;this.y=v.y;this.z=v.z;this.w=v.w!==undefined?v.w:1;return this},add:function(v,w){if(w!==undefined){console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.");return this.addVectors(v,w)}this.x+=v.x;this.y+=v.y;this.z+=v.z;this.w+=v.w;return this},addScalar:function(s){this.x+=s;this.y+=s;this.z+=s;this.w+=s;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(v,s){this.x+=v.x*s;this.y+=v.y*s;this.z+=v.z*s;this.w+=v.w*s;return this},sub:function(v,w){if(w!==undefined){console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.");return this.subVectors(v,w)}this.x-=v.x;this.y-=v.y;this.z-=v.z;this.w-=v.w;return this},subScalar:function(s){this.x-=s;this.y-=s;this.z-=s;this.w-=s;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(scalar){this.x*=scalar;this.y*=scalar;this.z*=scalar;this.w*=scalar;return this},applyMatrix4:function(m){var x=this.x,y=this.y,z=this.z,w=this.w;var e=m.elements;this.x=e[0]*x+e[4]*y+e[8]*z+e[12]*w;this.y=e[1]*x+e[5]*y+e[9]*z+e[13]*w;this.z=e[2]*x+e[6]*y+e[10]*z+e[14]*w;this.w=e[3]*x+e[7]*y+e[11]*z+e[15]*w;return this},divideScalar:function(scalar){return this.multiplyScalar(1/scalar)},setAxisAngleFromQuaternion:function(q){this.w=2*Math.acos(q.w);var s=Math.sqrt(1-q.w*q.w);if(s<1e-4){this.x=1;this.y=0;this.z=0}else{this.x=q.x/s;this.y=q.y/s;this.z=q.z/s}return this},setAxisAngleFromRotationMatrix:function(m){var angle,x,y,z,epsilon=.01,epsilon2=.1,te=m.elements,m11=te[0],m12=te[4],m13=te[8],m21=te[1],m22=te[5],m23=te[9],m31=te[2],m32=te[6],m33=te[10];if(Math.abs(m12-m21)<epsilon&&Math.abs(m13-m31)<epsilon&&Math.abs(m23-m32)<epsilon){if(Math.abs(m12+m21)<epsilon2&&Math.abs(m13+m31)<epsilon2&&Math.abs(m23+m32)<epsilon2&&Math.abs(m11+m22+m33-3)<epsilon2){this.set(1,0,0,0);return this}angle=Math.PI;var xx=(m11+1)/2;var yy=(m22+1)/2;var zz=(m33+1)/2;var xy=(m12+m21)/4;var xz=(m13+m31)/4;var yz=(m23+m32)/4;if(xx>yy&&xx>zz){if(xx<epsilon){x=0;y=.707106781;z=.707106781}else{x=Math.sqrt(xx);y=xy/x;z=xz/x}}else if(yy>zz){if(yy<epsilon){x=.707106781;y=0;z=.707106781}else{y=Math.sqrt(yy);x=xy/y;z=yz/y}}else{if(zz<epsilon){x=.707106781;y=.707106781;z=0}else{z=Math.sqrt(zz);x=xz/z;y=yz/z}}this.set(x,y,z,angle);return this}var s=Math.sqrt((m32-m23)*(m32-m23)+(m13-m31)*(m13-m31)+(m21-m12)*(m21-m12));if(Math.abs(s)<.001)s=1;this.x=(m32-m23)/s;this.y=(m13-m31)/s;this.z=(m21-m12)/s;this.w=Math.acos((m11+m22+m33-1)/2);return this},min:function(v){this.x=Math.min(this.x,v.x);this.y=Math.min(this.y,v.y);this.z=Math.min(this.z,v.z);this.w=Math.min(this.w,v.w);return this},max:function(v){this.x=Math.max(this.x,v.x);this.y=Math.max(this.y,v.y);this.z=Math.max(this.z,v.z);this.w=Math.max(this.w,v.w);return this},clamp:function(min,max){this.x=Math.max(min.x,Math.min(max.x,this.x));this.y=Math.max(min.y,Math.min(max.y,this.y));this.z=Math.max(min.z,Math.min(max.z,this.z));this.w=Math.max(min.w,Math.min(max.w,this.w));return this},clampScalar:function(){var min,max;return function clampScalar(minVal,maxVal){if(min===undefined){min=new Vector4;max=new Vector4}min.set(minVal,minVal,minVal,minVal);max.set(maxVal,maxVal,maxVal,maxVal);return this.clamp(min,max)}}(),clampLength:function(min,max){var length=this.length();return this.divideScalar(length||1).multiplyScalar(Math.max(min,Math.min(max,length)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){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);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(v){return this.x*v.x+this.y*v.y+this.z*v.z+this.w*v.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(length){return this.normalize().multiplyScalar(length)},lerp:function(v,alpha){this.x+=(v.x-this.x)*alpha;this.y+=(v.y-this.y)*alpha;this.z+=(v.z-this.z)*alpha;this.w+=(v.w-this.w)*alpha;return this},lerpVectors:function(v1,v2,alpha){return this.subVectors(v2,v1).multiplyScalar(alpha).add(v1)},equals:function(v){return v.x===this.x&&v.y===this.y&&v.z===this.z&&v.w===this.w},fromArray:function(array,offset){if(offset===undefined)offset=0;this.x=array[offset];this.y=array[offset+1];this.z=array[offset+2];this.w=array[offset+3];return this},toArray:function(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this.x;array[offset+1]=this.y;array[offset+2]=this.z;array[offset+3]=this.w;return array},fromBufferAttribute:function(attribute,index,offset){if(offset!==undefined){console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute().")}this.x=attribute.getX(index);this.y=attribute.getY(index);this.z=attribute.getZ(index);this.w=attribute.getW(index);return this}});function WebGLRenderTarget(width,height,options){this.uuid=_Math.generateUUID();this.width=width;this.height=height;this.scissor=new Vector4(0,0,width,height);this.scissorTest=false;this.viewport=new Vector4(0,0,width,height);options=options||{};if(options.minFilter===undefined)options.minFilter=LinearFilter;this.texture=new Texture(undefined,undefined,options.wrapS,options.wrapT,options.magFilter,options.minFilter,options.format,options.type,options.anisotropy,options.encoding);this.depthBuffer=options.depthBuffer!==undefined?options.depthBuffer:true;this.stencilBuffer=options.stencilBuffer!==undefined?options.stencilBuffer:true;this.depthTexture=options.depthTexture!==undefined?options.depthTexture:null}Object.assign(WebGLRenderTarget.prototype,EventDispatcher.prototype,{isWebGLRenderTarget:true,setSize:function(width,height){if(this.width!==width||this.height!==height){this.width=width;this.height=height;this.dispose()}this.viewport.set(0,0,width,height);this.scissor.set(0,0,width,height)},clone:function(){return(new this.constructor).copy(this)},copy:function(source){this.width=source.width;this.height=source.height;this.viewport.copy(source.viewport);this.texture=source.texture.clone();this.depthBuffer=source.depthBuffer;this.stencilBuffer=source.stencilBuffer;this.depthTexture=source.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});function WebGLRenderTargetCube(width,height,options){WebGLRenderTarget.call(this,width,height,options);this.activeCubeFace=0;this.activeMipMapLevel=0}WebGLRenderTargetCube.prototype=Object.create(WebGLRenderTarget.prototype);WebGLRenderTargetCube.prototype.constructor=WebGLRenderTargetCube;WebGLRenderTargetCube.prototype.isWebGLRenderTargetCube=true;function Quaternion(x,y,z,w){this._x=x||0;this._y=y||0;this._z=z||0;this._w=w!==undefined?w:1}Object.assign(Quaternion,{slerp:function(qa,qb,qm,t){return qm.copy(qa).slerp(qb,t)},slerpFlat:function(dst,dstOffset,src0,srcOffset0,src1,srcOffset1,t){var x0=src0[srcOffset0+0],y0=src0[srcOffset0+1],z0=src0[srcOffset0+2],w0=src0[srcOffset0+3],x1=src1[srcOffset1+0],y1=src1[srcOffset1+1],z1=src1[srcOffset1+2],w1=src1[srcOffset1+3];if(w0!==w1||x0!==x1||y0!==y1||z0!==z1){var s=1-t,cos=x0*x1+y0*y1+z0*z1+w0*w1,dir=cos>=0?1:-1,sqrSin=1-cos*cos;if(sqrSin>Number.EPSILON){var sin=Math.sqrt(sqrSin),len=Math.atan2(sin,cos*dir);s=Math.sin(s*len)/sin;t=Math.sin(t*len)/sin}var tDir=t*dir;x0=x0*s+x1*tDir;y0=y0*s+y1*tDir;z0=z0*s+z1*tDir;w0=w0*s+w1*tDir;if(s===1-t){var f=1/Math.sqrt(x0*x0+y0*y0+z0*z0+w0*w0);x0*=f;y0*=f;z0*=f;w0*=f}}dst[dstOffset]=x0;dst[dstOffset+1]=y0;dst[dstOffset+2]=z0;dst[dstOffset+3]=w0}});Object.defineProperties(Quaternion.prototype,{x:{get:function(){return this._x},set:function(value){this._x=value;this.onChangeCallback()}},y:{get:function(){return this._y},set:function(value){this._y=value;this.onChangeCallback()}},z:{get:function(){return this._z},set:function(value){this._z=value;this.onChangeCallback()}},w:{get:function(){return this._w},set:function(value){this._w=value;this.onChangeCallback()}}});Object.assign(Quaternion.prototype,{set:function(x,y,z,w){this._x=x;this._y=y;this._z=z;this._w=w;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(quaternion){this._x=quaternion.x;this._y=quaternion.y;this._z=quaternion.z;this._w=quaternion.w;this.onChangeCallback();return this},setFromEuler:function(euler,update){if(!(euler&&euler.isEuler)){throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.")}var x=euler._x,y=euler._y,z=euler._z,order=euler.order;var cos=Math.cos;var sin=Math.sin;var c1=cos(x/2);var c2=cos(y/2);var c3=cos(z/2);var s1=sin(x/2);var s2=sin(y/2);var s3=sin(z/2);if(order==="XYZ"){this._x=s1*c2*c3+c1*s2*s3;this._y=c1*s2*c3-s1*c2*s3;this._z=c1*c2*s3+s1*s2*c3;this._w=c1*c2*c3-s1*s2*s3}else if(order==="YXZ"){this._x=s1*c2*c3+c1*s2*s3;this._y=c1*s2*c3-s1*c2*s3;this._z=c1*c2*s3-s1*s2*c3;this._w=c1*c2*c3+s1*s2*s3}else if(order==="ZXY"){this._x=s1*c2*c3-c1*s2*s3;this._y=c1*s2*c3+s1*c2*s3;this._z=c1*c2*s3+s1*s2*c3;this._w=c1*c2*c3-s1*s2*s3}else if(order==="ZYX"){this._x=s1*c2*c3-c1*s2*s3;this._y=c1*s2*c3+s1*c2*s3;this._z=c1*c2*s3-s1*s2*c3;this._w=c1*c2*c3+s1*s2*s3}else if(order==="YZX"){this._x=s1*c2*c3+c1*s2*s3;this._y=c1*s2*c3+s1*c2*s3;this._z=c1*c2*s3-s1*s2*c3;this._w=c1*c2*c3-s1*s2*s3}else if(order==="XZY"){this._x=s1*c2*c3-c1*s2*s3;this._y=c1*s2*c3-s1*c2*s3;this._z=c1*c2*s3+s1*s2*c3;this._w=c1*c2*c3+s1*s2*s3}if(update!==false)this.onChangeCallback();return this},setFromAxisAngle:function(axis,angle){var halfAngle=angle/2,s=Math.sin(halfAngle);this._x=axis.x*s;this._y=axis.y*s;this._z=axis.z*s;this._w=Math.cos(halfAngle);this.onChangeCallback();return this},setFromRotationMatrix:function(m){var te=m.elements,m11=te[0],m12=te[4],m13=te[8],m21=te[1],m22=te[5],m23=te[9],m31=te[2],m32=te[6],m33=te[10],trace=m11+m22+m33,s;if(trace>0){s=.5/Math.sqrt(trace+1);this._w=.25/s;this._x=(m32-m23)*s;this._y=(m13-m31)*s;this._z=(m21-m12)*s}else if(m11>m22&&m11>m33){s=2*Math.sqrt(1+m11-m22-m33);this._w=(m32-m23)/s;this._x=.25*s;this._y=(m12+m21)/s;this._z=(m13+m31)/s}else if(m22>m33){s=2*Math.sqrt(1+m22-m11-m33);this._w=(m13-m31)/s;this._x=(m12+m21)/s;this._y=.25*s;this._z=(m23+m32)/s}else{s=2*Math.sqrt(1+m33-m11-m22);this._w=(m21-m12)/s;this._x=(m13+m31)/s;this._y=(m23+m32)/s;this._z=.25*s}this.onChangeCallback();return this},setFromUnitVectors:function(){var v1=new Vector3;var r;var EPS=1e-6;return function setFromUnitVectors(vFrom,vTo){if(v1===undefined)v1=new Vector3;r=vFrom.dot(vTo)+1;if(r<EPS){r=0;if(Math.abs(vFrom.x)>Math.abs(vFrom.z)){v1.set(-vFrom.y,vFrom.x,0)}else{v1.set(0,-vFrom.z,vFrom.y)}}else{v1.crossVectors(vFrom,vTo)}this._x=v1.x;this._y=v1.y;this._z=v1.z;this._w=r;return this.normalize()}}(),inverse:function(){return this.conjugate().normalize()},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(v){return this._x*v._x+this._y*v._y+this._z*v._z+this._w*v._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var l=this.length();if(l===0){this._x=0;this._y=0;this._z=0;this._w=1}else{l=1/l;this._x=this._x*l;this._y=this._y*l;this._z=this._z*l;this._w=this._w*l}this.onChangeCallback();return this},multiply:function(q,p){if(p!==undefined){console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.");
return this.multiplyQuaternions(q,p)}return this.multiplyQuaternions(this,q)},premultiply:function(q){return this.multiplyQuaternions(q,this)},multiplyQuaternions:function(a,b){var qax=a._x,qay=a._y,qaz=a._z,qaw=a._w;var qbx=b._x,qby=b._y,qbz=b._z,qbw=b._w;this._x=qax*qbw+qaw*qbx+qay*qbz-qaz*qby;this._y=qay*qbw+qaw*qby+qaz*qbx-qax*qbz;this._z=qaz*qbw+qaw*qbz+qax*qby-qay*qbx;this._w=qaw*qbw-qax*qbx-qay*qby-qaz*qbz;this.onChangeCallback();return this},slerp:function(qb,t){if(t===0)return this;if(t===1)return this.copy(qb);var x=this._x,y=this._y,z=this._z,w=this._w;var cosHalfTheta=w*qb._w+x*qb._x+y*qb._y+z*qb._z;if(cosHalfTheta<0){this._w=-qb._w;this._x=-qb._x;this._y=-qb._y;this._z=-qb._z;cosHalfTheta=-cosHalfTheta}else{this.copy(qb)}if(cosHalfTheta>=1){this._w=w;this._x=x;this._y=y;this._z=z;return this}var sinHalfTheta=Math.sqrt(1-cosHalfTheta*cosHalfTheta);if(Math.abs(sinHalfTheta)<.001){this._w=.5*(w+this._w);this._x=.5*(x+this._x);this._y=.5*(y+this._y);this._z=.5*(z+this._z);return this}var halfTheta=Math.atan2(sinHalfTheta,cosHalfTheta);var ratioA=Math.sin((1-t)*halfTheta)/sinHalfTheta,ratioB=Math.sin(t*halfTheta)/sinHalfTheta;this._w=w*ratioA+this._w*ratioB;this._x=x*ratioA+this._x*ratioB;this._y=y*ratioA+this._y*ratioB;this._z=z*ratioA+this._z*ratioB;this.onChangeCallback();return this},equals:function(quaternion){return quaternion._x===this._x&&quaternion._y===this._y&&quaternion._z===this._z&&quaternion._w===this._w},fromArray:function(array,offset){if(offset===undefined)offset=0;this._x=array[offset];this._y=array[offset+1];this._z=array[offset+2];this._w=array[offset+3];this.onChangeCallback();return this},toArray:function(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this._x;array[offset+1]=this._y;array[offset+2]=this._z;array[offset+3]=this._w;return array},onChange:function(callback){this.onChangeCallback=callback;return this},onChangeCallback:function(){}});function Vector3(x,y,z){this.x=x||0;this.y=y||0;this.z=z||0}Object.assign(Vector3.prototype,{isVector3:true,set:function(x,y,z){this.x=x;this.y=y;this.z=z;return this},setScalar:function(scalar){this.x=scalar;this.y=scalar;this.z=scalar;return this},setX:function(x){this.x=x;return this},setY:function(y){this.y=y;return this},setZ:function(z){this.z=z;return this},setComponent:function(index,value){switch(index){case 0:this.x=value;break;case 1:this.y=value;break;case 2:this.z=value;break;default:throw new Error("index is out of range: "+index)}return this},getComponent:function(index){switch(index){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+index)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(v){this.x=v.x;this.y=v.y;this.z=v.z;return this},add:function(v,w){if(w!==undefined){console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.");return this.addVectors(v,w)}this.x+=v.x;this.y+=v.y;this.z+=v.z;return this},addScalar:function(s){this.x+=s;this.y+=s;this.z+=s;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(v,s){this.x+=v.x*s;this.y+=v.y*s;this.z+=v.z*s;return this},sub:function(v,w){if(w!==undefined){console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.");return this.subVectors(v,w)}this.x-=v.x;this.y-=v.y;this.z-=v.z;return this},subScalar:function(s){this.x-=s;this.y-=s;this.z-=s;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(v,w){if(w!==undefined){console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.");return this.multiplyVectors(v,w)}this.x*=v.x;this.y*=v.y;this.z*=v.z;return this},multiplyScalar:function(scalar){this.x*=scalar;this.y*=scalar;this.z*=scalar;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var quaternion=new Quaternion;return function applyEuler(euler){if(!(euler&&euler.isEuler)){console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.")}return this.applyQuaternion(quaternion.setFromEuler(euler))}}(),applyAxisAngle:function(){var quaternion=new Quaternion;return function applyAxisAngle(axis,angle){return this.applyQuaternion(quaternion.setFromAxisAngle(axis,angle))}}(),applyMatrix3:function(m){var x=this.x,y=this.y,z=this.z;var e=m.elements;this.x=e[0]*x+e[3]*y+e[6]*z;this.y=e[1]*x+e[4]*y+e[7]*z;this.z=e[2]*x+e[5]*y+e[8]*z;return this},applyMatrix4:function(m){var x=this.x,y=this.y,z=this.z;var e=m.elements;var w=1/(e[3]*x+e[7]*y+e[11]*z+e[15]);this.x=(e[0]*x+e[4]*y+e[8]*z+e[12])*w;this.y=(e[1]*x+e[5]*y+e[9]*z+e[13])*w;this.z=(e[2]*x+e[6]*y+e[10]*z+e[14])*w;return this},applyQuaternion:function(q){var x=this.x,y=this.y,z=this.z;var qx=q.x,qy=q.y,qz=q.z,qw=q.w;var ix=qw*x+qy*z-qz*y;var iy=qw*y+qz*x-qx*z;var iz=qw*z+qx*y-qy*x;var iw=-qx*x-qy*y-qz*z;this.x=ix*qw+iw*-qx+iy*-qz-iz*-qy;this.y=iy*qw+iw*-qy+iz*-qx-ix*-qz;this.z=iz*qw+iw*-qz+ix*-qy-iy*-qx;return this},project:function(){var matrix=new Matrix4;return function project(camera){matrix.multiplyMatrices(camera.projectionMatrix,matrix.getInverse(camera.matrixWorld));return this.applyMatrix4(matrix)}}(),unproject:function(){var matrix=new Matrix4;return function unproject(camera){matrix.multiplyMatrices(camera.matrixWorld,matrix.getInverse(camera.projectionMatrix));return this.applyMatrix4(matrix)}}(),transformDirection:function(m){var x=this.x,y=this.y,z=this.z;var e=m.elements;this.x=e[0]*x+e[4]*y+e[8]*z;this.y=e[1]*x+e[5]*y+e[9]*z;this.z=e[2]*x+e[6]*y+e[10]*z;return this.normalize()},divide:function(v){this.x/=v.x;this.y/=v.y;this.z/=v.z;return this},divideScalar:function(scalar){return this.multiplyScalar(1/scalar)},min:function(v){this.x=Math.min(this.x,v.x);this.y=Math.min(this.y,v.y);this.z=Math.min(this.z,v.z);return this},max:function(v){this.x=Math.max(this.x,v.x);this.y=Math.max(this.y,v.y);this.z=Math.max(this.z,v.z);return this},clamp:function(min,max){this.x=Math.max(min.x,Math.min(max.x,this.x));this.y=Math.max(min.y,Math.min(max.y,this.y));this.z=Math.max(min.z,Math.min(max.z,this.z));return this},clampScalar:function(){var min=new Vector3;var max=new Vector3;return function clampScalar(minVal,maxVal){min.set(minVal,minVal,minVal);max.set(maxVal,maxVal,maxVal);return this.clamp(min,max)}}(),clampLength:function(min,max){var length=this.length();return this.divideScalar(length||1).multiplyScalar(Math.max(min,Math.min(max,length)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){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);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(v){return this.x*v.x+this.y*v.y+this.z*v.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)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(length){return this.normalize().multiplyScalar(length)},lerp:function(v,alpha){this.x+=(v.x-this.x)*alpha;this.y+=(v.y-this.y)*alpha;this.z+=(v.z-this.z)*alpha;return this},lerpVectors:function(v1,v2,alpha){return this.subVectors(v2,v1).multiplyScalar(alpha).add(v1)},cross:function(v,w){if(w!==undefined){console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.");return this.crossVectors(v,w)}var x=this.x,y=this.y,z=this.z;this.x=y*v.z-z*v.y;this.y=z*v.x-x*v.z;this.z=x*v.y-y*v.x;return this},crossVectors:function(a,b){var ax=a.x,ay=a.y,az=a.z;var bx=b.x,by=b.y,bz=b.z;this.x=ay*bz-az*by;this.y=az*bx-ax*bz;this.z=ax*by-ay*bx;return this},projectOnVector:function(vector){var scalar=vector.dot(this)/vector.lengthSq();return this.copy(vector).multiplyScalar(scalar)},projectOnPlane:function(){var v1=new Vector3;return function projectOnPlane(planeNormal){v1.copy(this).projectOnVector(planeNormal);return this.sub(v1)}}(),reflect:function(){var v1=new Vector3;return function reflect(normal){return this.sub(v1.copy(normal).multiplyScalar(2*this.dot(normal)))}}(),angleTo:function(v){var theta=this.dot(v)/Math.sqrt(this.lengthSq()*v.lengthSq());return Math.acos(_Math.clamp(theta,-1,1))},distanceTo:function(v){return Math.sqrt(this.distanceToSquared(v))},distanceToSquared:function(v){var dx=this.x-v.x,dy=this.y-v.y,dz=this.z-v.z;return dx*dx+dy*dy+dz*dz},distanceToManhattan:function(v){return Math.abs(this.x-v.x)+Math.abs(this.y-v.y)+Math.abs(this.z-v.z)},setFromSpherical:function(s){var sinPhiRadius=Math.sin(s.phi)*s.radius;this.x=sinPhiRadius*Math.sin(s.theta);this.y=Math.cos(s.phi)*s.radius;this.z=sinPhiRadius*Math.cos(s.theta);return this},setFromCylindrical:function(c){this.x=c.radius*Math.sin(c.theta);this.y=c.y;this.z=c.radius*Math.cos(c.theta);return this},setFromMatrixPosition:function(m){var e=m.elements;this.x=e[12];this.y=e[13];this.z=e[14];return this},setFromMatrixScale:function(m){var sx=this.setFromMatrixColumn(m,0).length();var sy=this.setFromMatrixColumn(m,1).length();var sz=this.setFromMatrixColumn(m,2).length();this.x=sx;this.y=sy;this.z=sz;return this},setFromMatrixColumn:function(m,index){return this.fromArray(m.elements,index*4)},equals:function(v){return v.x===this.x&&v.y===this.y&&v.z===this.z},fromArray:function(array,offset){if(offset===undefined)offset=0;this.x=array[offset];this.y=array[offset+1];this.z=array[offset+2];return this},toArray:function(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this.x;array[offset+1]=this.y;array[offset+2]=this.z;return array},fromBufferAttribute:function(attribute,index,offset){if(offset!==undefined){console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().")}this.x=attribute.getX(index);this.y=attribute.getY(index);this.z=attribute.getZ(index);return this}});function Matrix4(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];if(arguments.length>0){console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}}Object.assign(Matrix4.prototype,{isMatrix4:true,set:function(n11,n12,n13,n14,n21,n22,n23,n24,n31,n32,n33,n34,n41,n42,n43,n44){var te=this.elements;te[0]=n11;te[4]=n12;te[8]=n13;te[12]=n14;te[1]=n21;te[5]=n22;te[9]=n23;te[13]=n24;te[2]=n31;te[6]=n32;te[10]=n33;te[14]=n34;te[3]=n41;te[7]=n42;te[11]=n43;te[15]=n44;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new Matrix4).fromArray(this.elements)},copy:function(m){var te=this.elements;var me=m.elements;te[0]=me[0];te[1]=me[1];te[2]=me[2];te[3]=me[3];te[4]=me[4];te[5]=me[5];te[6]=me[6];te[7]=me[7];te[8]=me[8];te[9]=me[9];te[10]=me[10];te[11]=me[11];te[12]=me[12];te[13]=me[13];te[14]=me[14];te[15]=me[15];return this},copyPosition:function(m){var te=this.elements,me=m.elements;te[12]=me[12];te[13]=me[13];te[14]=me[14];return this},extractBasis:function(xAxis,yAxis,zAxis){xAxis.setFromMatrixColumn(this,0);yAxis.setFromMatrixColumn(this,1);zAxis.setFromMatrixColumn(this,2);return this},makeBasis:function(xAxis,yAxis,zAxis){this.set(xAxis.x,yAxis.x,zAxis.x,0,xAxis.y,yAxis.y,zAxis.y,0,xAxis.z,yAxis.z,zAxis.z,0,0,0,0,1);return this},extractRotation:function(){var v1=new Vector3;return function extractRotation(m){var te=this.elements;var me=m.elements;var scaleX=1/v1.setFromMatrixColumn(m,0).length();var scaleY=1/v1.setFromMatrixColumn(m,1).length();var scaleZ=1/v1.setFromMatrixColumn(m,2).length();te[0]=me[0]*scaleX;te[1]=me[1]*scaleX;te[2]=me[2]*scaleX;te[4]=me[4]*scaleY;te[5]=me[5]*scaleY;te[6]=me[6]*scaleY;te[8]=me[8]*scaleZ;te[9]=me[9]*scaleZ;te[10]=me[10]*scaleZ;return this}}(),makeRotationFromEuler:function(euler){if(!(euler&&euler.isEuler)){console.error("THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.")}var te=this.elements;var x=euler.x,y=euler.y,z=euler.z;var a=Math.cos(x),b=Math.sin(x);var c=Math.cos(y),d=Math.sin(y);var e=Math.cos(z),f=Math.sin(z);if(euler.order==="XYZ"){var ae=a*e,af=a*f,be=b*e,bf=b*f;te[0]=c*e;te[4]=-c*f;te[8]=d;te[1]=af+be*d;te[5]=ae-bf*d;te[9]=-b*c;te[2]=bf-ae*d;te[6]=be+af*d;te[10]=a*c}else if(euler.order==="YXZ"){var ce=c*e,cf=c*f,de=d*e,df=d*f;te[0]=ce+df*b;te[4]=de*b-cf;te[8]=a*d;te[1]=a*f;te[5]=a*e;te[9]=-b;te[2]=cf*b-de;te[6]=df+ce*b;te[10]=a*c}else if(euler.order==="ZXY"){var ce=c*e,cf=c*f,de=d*e,df=d*f;te[0]=ce-df*b;te[4]=-a*f;te[8]=de+cf*b;te[1]=cf+de*b;te[5]=a*e;te[9]=df-ce*b;te[2]=-a*d;te[6]=b;te[10]=a*c}else if(euler.order==="ZYX"){var ae=a*e,af=a*f,be=b*e,bf=b*f;te[0]=c*e;te[4]=be*d-af;te[8]=ae*d+bf;te[1]=c*f;te[5]=bf*d+ae;te[9]=af*d-be;te[2]=-d;te[6]=b*c;te[10]=a*c}else if(euler.order==="YZX"){var ac=a*c,ad=a*d,bc=b*c,bd=b*d;te[0]=c*e;te[4]=bd-ac*f;te[8]=bc*f+ad;te[1]=f;te[5]=a*e;te[9]=-b*e;te[2]=-d*e;te[6]=ad*f+bc;te[10]=ac-bd*f}else if(euler.order==="XZY"){var ac=a*c,ad=a*d,bc=b*c,bd=b*d;te[0]=c*e;te[4]=-f;te[8]=d*e;te[1]=ac*f+bd;te[5]=a*e;te[9]=ad*f-bc;te[2]=bc*f-ad;te[6]=b*e;te[10]=bd*f+ac}te[3]=0;te[7]=0;te[11]=0;te[12]=0;te[13]=0;te[14]=0;te[15]=1;return this},makeRotationFromQuaternion:function(q){var te=this.elements;var x=q._x,y=q._y,z=q._z,w=q._w;var x2=x+x,y2=y+y,z2=z+z;var xx=x*x2,xy=x*y2,xz=x*z2;var yy=y*y2,yz=y*z2,zz=z*z2;var wx=w*x2,wy=w*y2,wz=w*z2;te[0]=1-(yy+zz);te[4]=xy-wz;te[8]=xz+wy;te[1]=xy+wz;te[5]=1-(xx+zz);te[9]=yz-wx;te[2]=xz-wy;te[6]=yz+wx;te[10]=1-(xx+yy);te[3]=0;te[7]=0;te[11]=0;te[12]=0;te[13]=0;te[14]=0;te[15]=1;return this},lookAt:function(){var x=new Vector3;var y=new Vector3;var z=new Vector3;return function lookAt(eye,target,up){var te=this.elements;z.subVectors(eye,target);if(z.lengthSq()===0){z.z=1}z.normalize();x.crossVectors(up,z);if(x.lengthSq()===0){if(Math.abs(up.z)===1){z.x+=1e-4}else{z.z+=1e-4}z.normalize();x.crossVectors(up,z)}x.normalize();y.crossVectors(z,x);te[0]=x.x;te[4]=y.x;te[8]=z.x;te[1]=x.y;te[5]=y.y;te[9]=z.y;te[2]=x.z;te[6]=y.z;te[10]=z.z;return this}}(),multiply:function(m,n){if(n!==undefined){console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.");return this.multiplyMatrices(m,n)}return this.multiplyMatrices(this,m)},premultiply:function(m){return this.multiplyMatrices(m,this)},multiplyMatrices:function(a,b){var ae=a.elements;var be=b.elements;var te=this.elements;var a11=ae[0],a12=ae[4],a13=ae[8],a14=ae[12];var a21=ae[1],a22=ae[5],a23=ae[9],a24=ae[13];var a31=ae[2],a32=ae[6],a33=ae[10],a34=ae[14];var a41=ae[3],a42=ae[7],a43=ae[11],a44=ae[15];var b11=be[0],b12=be[4],b13=be[8],b14=be[12];var b21=be[1],b22=be[5],b23=be[9],b24=be[13];var b31=be[2],b32=be[6],b33=be[10],b34=be[14];var b41=be[3],b42=be[7],b43=be[11],b44=be[15];te[0]=a11*b11+a12*b21+a13*b31+a14*b41;te[4]=a11*b12+a12*b22+a13*b32+a14*b42;te[8]=a11*b13+a12*b23+a13*b33+a14*b43;te[12]=a11*b14+a12*b24+a13*b34+a14*b44;te[1]=a21*b11+a22*b21+a23*b31+a24*b41;te[5]=a21*b12+a22*b22+a23*b32+a24*b42;te[9]=a21*b13+a22*b23+a23*b33+a24*b43;te[13]=a21*b14+a22*b24+a23*b34+a24*b44;te[2]=a31*b11+a32*b21+a33*b31+a34*b41;te[6]=a31*b12+a32*b22+a33*b32+a34*b42;te[10]=a31*b13+a32*b23+a33*b33+a34*b43;te[14]=a31*b14+a32*b24+a33*b34+a34*b44;te[3]=a41*b11+a42*b21+a43*b31+a44*b41;te[7]=a41*b12+a42*b22+a43*b32+a44*b42;te[11]=a41*b13+a42*b23+a43*b33+a44*b43;te[15]=a41*b14+a42*b24+a43*b34+a44*b44;return this},multiplyScalar:function(s){var te=this.elements;te[0]*=s;te[4]*=s;te[8]*=s;te[12]*=s;te[1]*=s;te[5]*=s;te[9]*=s;te[13]*=s;te[2]*=s;te[6]*=s;te[10]*=s;te[14]*=s;te[3]*=s;te[7]*=s;te[11]*=s;te[15]*=s;return this},applyToBufferAttribute:function(){var v1=new Vector3;return function applyToBufferAttribute(attribute){for(var i=0,l=attribute.count;i<l;i++){v1.x=attribute.getX(i);v1.y=attribute.getY(i);v1.z=attribute.getZ(i);v1.applyMatrix4(this);attribute.setXYZ(i,v1.x,v1.y,v1.z)}return attribute}}(),determinant:function(){var te=this.elements;var n11=te[0],n12=te[4],n13=te[8],n14=te[12];var n21=te[1],n22=te[5],n23=te[9],n24=te[13];var n31=te[2],n32=te[6],n33=te[10],n34=te[14];var n41=te[3],n42=te[7],n43=te[11],n44=te[15];return n41*(+n14*n23*n32-n13*n24*n32-n14*n22*n33+n12*n24*n33+n13*n22*n34-n12*n23*n34)+n42*(+n11*n23*n34-n11*n24*n33+n14*n21*n33-n13*n21*n34+n13*n24*n31-n14*n23*n31)+n43*(+n11*n24*n32-n11*n22*n34-n14*n21*n32+n12*n21*n34+n14*n22*n31-n12*n24*n31)+n44*(-n13*n22*n31-n11*n23*n32+n11*n22*n33+n13*n21*n32-n12*n21*n33+n12*n23*n31)},transpose:function(){var te=this.elements;var tmp;tmp=te[1];te[1]=te[4];te[4]=tmp;tmp=te[2];te[2]=te[8];te[8]=tmp;tmp=te[6];te[6]=te[9];te[9]=tmp;tmp=te[3];te[3]=te[12];te[12]=tmp;tmp=te[7];te[7]=te[13];te[13]=tmp;tmp=te[11];te[11]=te[14];te[14]=tmp;return this},setPosition:function(v){var te=this.elements;te[12]=v.x;te[13]=v.y;te[14]=v.z;return this},getInverse:function(m,throwOnDegenerate){var te=this.elements,me=m.elements,n11=me[0],n21=me[1],n31=me[2],n41=me[3],n12=me[4],n22=me[5],n32=me[6],n42=me[7],n13=me[8],n23=me[9],n33=me[10],n43=me[11],n14=me[12],n24=me[13],n34=me[14],n44=me[15],t11=n23*n34*n42-n24*n33*n42+n24*n32*n43-n22*n34*n43-n23*n32*n44+n22*n33*n44,t12=n14*n33*n42-n13*n34*n42-n14*n32*n43+n12*n34*n43+n13*n32*n44-n12*n33*n44,t13=n13*n24*n42-n14*n23*n42+n14*n22*n43-n12*n24*n43-n13*n22*n44+n12*n23*n44,t14=n14*n23*n32-n13*n24*n32-n14*n22*n33+n12*n24*n33+n13*n22*n34-n12*n23*n34;var det=n11*t11+n21*t12+n31*t13+n41*t14;if(det===0){var msg="THREE.Matrix4.getInverse(): can't invert matrix, determinant is 0";if(throwOnDegenerate===true){throw new Error(msg)}else{console.warn(msg)}return this.identity()}var detInv=1/det;te[0]=t11*detInv;te[1]=(n24*n33*n41-n23*n34*n41-n24*n31*n43+n21*n34*n43+n23*n31*n44-n21*n33*n44)*detInv;te[2]=(n22*n34*n41-n24*n32*n41+n24*n31*n42-n21*n34*n42-n22*n31*n44+n21*n32*n44)*detInv;te[3]=(n23*n32*n41-n22*n33*n41-n23*n31*n42+n21*n33*n42+n22*n31*n43-n21*n32*n43)*detInv;te[4]=t12*detInv;te[5]=(n13*n34*n41-n14*n33*n41+n14*n31*n43-n11*n34*n43-n13*n31*n44+n11*n33*n44)*detInv;te[6]=(n14*n32*n41-n12*n34*n41-n14*n31*n42+n11*n34*n42+n12*n31*n44-n11*n32*n44)*detInv;te[7]=(n12*n33*n41-n13*n32*n41+n13*n31*n42-n11*n33*n42-n12*n31*n43+n11*n32*n43)*detInv;te[8]=t13*detInv;te[9]=(n14*n23*n41-n13*n24*n41-n14*n21*n43+n11*n24*n43+n13*n21*n44-n11*n23*n44)*detInv;te[10]=(n12*n24*n41-n14*n22*n41+n14*n21*n42-n11*n24*n42-n12*n21*n44+n11*n22*n44)*detInv;te[11]=(n13*n22*n41-n12*n23*n41-n13*n21*n42+n11*n23*n42+n12*n21*n43-n11*n22*n43)*detInv;te[12]=t14*detInv;te[13]=(n13*n24*n31-n14*n23*n31+n14*n21*n33-n11*n24*n33-n13*n21*n34+n11*n23*n34)*detInv;te[14]=(n14*n22*n31-n12*n24*n31-n14*n21*n32+n11*n24*n32+n12*n21*n34-n11*n22*n34)*detInv;te[15]=(n12*n23*n31-n13*n22*n31+n13*n21*n32-n11*n23*n32-n12*n21*n33+n11*n22*n33)*detInv;return this},scale:function(v){var te=this.elements;var x=v.x,y=v.y,z=v.z;te[0]*=x;te[4]*=y;te[8]*=z;te[1]*=x;te[5]*=y;te[9]*=z;te[2]*=x;te[6]*=y;te[10]*=z;te[3]*=x;te[7]*=y;te[11]*=z;return this},getMaxScaleOnAxis:function(){var te=this.elements;var scaleXSq=te[0]*te[0]+te[1]*te[1]+te[2]*te[2];var scaleYSq=te[4]*te[4]+te[5]*te[5]+te[6]*te[6];var scaleZSq=te[8]*te[8]+te[9]*te[9]+te[10]*te[10];return Math.sqrt(Math.max(scaleXSq,scaleYSq,scaleZSq))},makeTranslation:function(x,y,z){this.set(1,0,0,x,0,1,0,y,0,0,1,z,0,0,0,1);return this},makeRotationX:function(theta){var c=Math.cos(theta),s=Math.sin(theta);this.set(1,0,0,0,0,c,-s,0,0,s,c,0,0,0,0,1);return this},makeRotationY:function(theta){var c=Math.cos(theta),s=Math.sin(theta);this.set(c,0,s,0,0,1,0,0,-s,0,c,0,0,0,0,1);return this},makeRotationZ:function(theta){var c=Math.cos(theta),s=Math.sin(theta);this.set(c,-s,0,0,s,c,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(axis,angle){var c=Math.cos(angle);var s=Math.sin(angle);var t=1-c;var x=axis.x,y=axis.y,z=axis.z;var tx=t*x,ty=t*y;this.set(tx*x+c,tx*y-s*z,tx*z+s*y,0,tx*y+s*z,ty*y+c,ty*z-s*x,0,tx*z-s*y,ty*z+s*x,t*z*z+c,0,0,0,0,1);return this},makeScale:function(x,y,z){this.set(x,0,0,0,0,y,0,0,0,0,z,0,0,0,0,1);return this},makeShear:function(x,y,z){this.set(1,y,z,0,x,1,z,0,x,y,1,0,0,0,0,1);return this},compose:function(position,quaternion,scale){this.makeRotationFromQuaternion(quaternion);this.scale(scale);this.setPosition(position);return this},decompose:function(){var vector=new Vector3;var matrix=new Matrix4;return function decompose(position,quaternion,scale){var te=this.elements;var sx=vector.set(te[0],te[1],te[2]).length();var sy=vector.set(te[4],te[5],te[6]).length();var sz=vector.set(te[8],te[9],te[10]).length();var det=this.determinant();if(det<0)sx=-sx;position.x=te[12];position.y=te[13];position.z=te[14];matrix.copy(this);var invSX=1/sx;var invSY=1/sy;var invSZ=1/sz;matrix.elements[0]*=invSX;matrix.elements[1]*=invSX;matrix.elements[2]*=invSX;matrix.elements[4]*=invSY;matrix.elements[5]*=invSY;matrix.elements[6]*=invSY;matrix.elements[8]*=invSZ;matrix.elements[9]*=invSZ;matrix.elements[10]*=invSZ;quaternion.setFromRotationMatrix(matrix);scale.x=sx;scale.y=sy;scale.z=sz;return this}}(),makePerspective:function(left,right,top,bottom,near,far){if(far===undefined){console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.")}var te=this.elements;var x=2*near/(right-left);var y=2*near/(top-bottom);var a=(right+left)/(right-left);var b=(top+bottom)/(top-bottom);var c=-(far+near)/(far-near);var d=-2*far*near/(far-near);te[0]=x;te[4]=0;te[8]=a;te[12]=0;te[1]=0;te[5]=y;te[9]=b;te[13]=0;te[2]=0;te[6]=0;te[10]=c;te[14]=d;te[3]=0;te[7]=0;te[11]=-1;te[15]=0;return this},makeOrthographic:function(left,right,top,bottom,near,far){var te=this.elements;var w=1/(right-left);var h=1/(top-bottom);var p=1/(far-near);var x=(right+left)*w;var y=(top+bottom)*h;var z=(far+near)*p;te[0]=2*w;te[4]=0;te[8]=0;te[12]=-x;te[1]=0;te[5]=2*h;te[9]=0;te[13]=-y;te[2]=0;te[6]=0;te[10]=-2*p;te[14]=-z;te[3]=0;te[7]=0;te[11]=0;te[15]=1;return this},equals:function(matrix){var te=this.elements;var me=matrix.elements;for(var i=0;i<16;i++){if(te[i]!==me[i])return false}return true},fromArray:function(array,offset){if(offset===undefined)offset=0;for(var i=0;i<16;i++){this.elements[i]=array[i+offset]}return this},toArray:function(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;var te=this.elements;array[offset]=te[0];array[offset+1]=te[1];array[offset+2]=te[2];array[offset+3]=te[3];array[offset+4]=te[4];array[offset+5]=te[5];array[offset+6]=te[6];array[offset+7]=te[7];array[offset+8]=te[8];array[offset+9]=te[9];array[offset+10]=te[10];array[offset+11]=te[11];array[offset+12]=te[12];array[offset+13]=te[13];array[offset+14]=te[14];array[offset+15]=te[15];return array}});function DataTexture(data,width,height,format,type,mapping,wrapS,wrapT,magFilter,minFilter,anisotropy,encoding){Texture.call(this,null,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy,encoding);this.image={data:data,width:width,height:height};this.magFilter=magFilter!==undefined?magFilter:NearestFilter;this.minFilter=minFilter!==undefined?minFilter:NearestFilter;this.generateMipmaps=false;this.flipY=false;this.unpackAlignment=1}DataTexture.prototype=Object.create(Texture.prototype);DataTexture.prototype.constructor=DataTexture;DataTexture.prototype.isDataTexture=true;function CubeTexture(images,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy,encoding){images=images!==undefined?images:[];mapping=mapping!==undefined?mapping:CubeReflectionMapping;Texture.call(this,images,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy,encoding);this.flipY=false}CubeTexture.prototype=Object.create(Texture.prototype);CubeTexture.prototype.constructor=CubeTexture;CubeTexture.prototype.isCubeTexture=true;Object.defineProperty(CubeTexture.prototype,"images",{get:function(){return this.image},set:function(value){this.image=value}});var emptyTexture=new Texture;var emptyCubeTexture=new CubeTexture;function UniformContainer(){this.seq=[];this.map={}}var arrayCacheF32=[];var arrayCacheI32=[];var mat4array=new Float32Array(16);var mat3array=new Float32Array(9);function flatten(array,nBlocks,blockSize){var firstElem=array[0];if(firstElem<=0||firstElem>0)return array;var n=nBlocks*blockSize,r=arrayCacheF32[n];if(r===undefined){r=new Float32Array(n);arrayCacheF32[n]=r}if(nBlocks!==0){firstElem.toArray(r,0);for(var i=1,offset=0;i!==nBlocks;++i){offset+=blockSize;array[i].toArray(r,offset)}}return r}function allocTexUnits(renderer,n){var r=arrayCacheI32[n];if(r===undefined){r=new Int32Array(n);arrayCacheI32[n]=r}for(var i=0;i!==n;++i)r[i]=renderer.allocTextureUnit();return r}function setValue1f(gl,v){gl.uniform1f(this.addr,v)}function setValue1i(gl,v){gl.uniform1i(this.addr,v)}function setValue2fv(gl,v){if(v.x===undefined)gl.uniform2fv(this.addr,v);else gl.uniform2f(this.addr,v.x,v.y)}function setValue3fv(gl,v){if(v.x!==undefined)gl.uniform3f(this.addr,v.x,v.y,v.z);else if(v.r!==undefined)gl.uniform3f(this.addr,v.r,v.g,v.b);else gl.uniform3fv(this.addr,v)}function setValue4fv(gl,v){if(v.x===undefined)gl.uniform4fv(this.addr,v);else gl.uniform4f(this.addr,v.x,v.y,v.z,v.w)}function setValue2fm(gl,v){gl.uniformMatrix2fv(this.addr,false,v.elements||v)}function setValue3fm(gl,v){if(v.elements===undefined){gl.uniformMatrix3fv(this.addr,false,v)}else{mat3array.set(v.elements);gl.uniformMatrix3fv(this.addr,false,mat3array)}}function setValue4fm(gl,v){if(v.elements===undefined){gl.uniformMatrix4fv(this.addr,false,v)}else{mat4array.set(v.elements);gl.uniformMatrix4fv(this.addr,false,mat4array)}}function setValueT1(gl,v,renderer){var unit=renderer.allocTextureUnit();gl.uniform1i(this.addr,unit);renderer.setTexture2D(v||emptyTexture,unit)}function setValueT6(gl,v,renderer){var unit=renderer.allocTextureUnit();gl.uniform1i(this.addr,unit);renderer.setTextureCube(v||emptyCubeTexture,unit)}function setValue2iv(gl,v){gl.uniform2iv(this.addr,v)}function setValue3iv(gl,v){gl.uniform3iv(this.addr,v)}function setValue4iv(gl,v){gl.uniform4iv(this.addr,v)}function getSingularSetter(type){switch(type){case 5126:return setValue1f;case 35664:return setValue2fv;case 35665:return setValue3fv;case 35666:return setValue4fv;case 35674:return setValue2fm;case 35675:return setValue3fm;case 35676:return setValue4fm;case 35678:case 36198:return setValueT1;case 35680:return setValueT6;case 5124:case 35670:return setValue1i;case 35667:case 35671:return setValue2iv;case 35668:case 35672:return setValue3iv;case 35669:case 35673:return setValue4iv}}function setValue1fv(gl,v){gl.uniform1fv(this.addr,v)}function setValue1iv(gl,v){gl.uniform1iv(this.addr,v)}function setValueV2a(gl,v){gl.uniform2fv(this.addr,flatten(v,this.size,2))}function setValueV3a(gl,v){gl.uniform3fv(this.addr,flatten(v,this.size,3))}function setValueV4a(gl,v){gl.uniform4fv(this.addr,flatten(v,this.size,4))}function setValueM2a(gl,v){gl.uniformMatrix2fv(this.addr,false,flatten(v,this.size,4))}function setValueM3a(gl,v){gl.uniformMatrix3fv(this.addr,false,flatten(v,this.size,9))}function setValueM4a(gl,v){gl.uniformMatrix4fv(this.addr,false,flatten(v,this.size,16))}function setValueT1a(gl,v,renderer){var n=v.length,units=allocTexUnits(renderer,n);gl.uniform1iv(this.addr,units);for(var i=0;i!==n;++i){renderer.setTexture2D(v[i]||emptyTexture,units[i])}}function setValueT6a(gl,v,renderer){var n=v.length,units=allocTexUnits(renderer,n);gl.uniform1iv(this.addr,units);for(var i=0;i!==n;++i){renderer.setTextureCube(v[i]||emptyCubeTexture,units[i])}}function getPureArraySetter(type){switch(type){case 5126:return setValue1fv;case 35664:return setValueV2a;case 35665:return setValueV3a;case 35666:return setValueV4a;case 35674:return setValueM2a;case 35675:return setValueM3a;case 35676:return setValueM4a;case 35678:return setValueT1a;case 35680:return setValueT6a;case 5124:case 35670:return setValue1iv;case 35667:case 35671:return setValue2iv;case 35668:case 35672:return setValue3iv;case 35669:case 35673:return setValue4iv}}function SingleUniform(id,activeInfo,addr){this.id=id;this.addr=addr;this.setValue=getSingularSetter(activeInfo.type)}function PureArrayUniform(id,activeInfo,addr){this.id=id;this.addr=addr;this.size=activeInfo.size;this.setValue=getPureArraySetter(activeInfo.type)}function StructuredUniform(id){this.id=id;UniformContainer.call(this)}StructuredUniform.prototype.setValue=function(gl,value){var seq=this.seq;for(var i=0,n=seq.length;i!==n;++i){var u=seq[i];u.setValue(gl,value[u.id])}};var RePathPart=/([\w\d_]+)(\])?(\[|\.)?/g;function addUniform(container,uniformObject){container.seq.push(uniformObject);container.map[uniformObject.id]=uniformObject}function parseUniform(activeInfo,addr,container){var path=activeInfo.name,pathLength=path.length;RePathPart.lastIndex=0;for(;;){var match=RePathPart.exec(path),matchEnd=RePathPart.lastIndex,id=match[1],idIsIndex=match[2]==="]",subscript=match[3];if(idIsIndex)id=id|0;if(subscript===undefined||subscript==="["&&matchEnd+2===pathLength){addUniform(container,subscript===undefined?new SingleUniform(id,activeInfo,addr):new PureArrayUniform(id,activeInfo,addr));break}else{var map=container.map,next=map[id];if(next===undefined){next=new StructuredUniform(id);addUniform(container,next)}container=next}}}function WebGLUniforms(gl,program,renderer){UniformContainer.call(this);this.renderer=renderer;var n=gl.getProgramParameter(program,gl.ACTIVE_UNIFORMS);for(var i=0;i<n;++i){var info=gl.getActiveUniform(program,i),path=info.name,addr=gl.getUniformLocation(program,path);parseUniform(info,addr,this)}}WebGLUniforms.prototype.setValue=function(gl,name,value){var u=this.map[name];if(u!==undefined)u.setValue(gl,value,this.renderer)};WebGLUniforms.prototype.setOptional=function(gl,object,name){var v=object[name];if(v!==undefined)this.setValue(gl,name,v)};WebGLUniforms.upload=function(gl,seq,values,renderer){for(var i=0,n=seq.length;i!==n;++i){var u=seq[i],v=values[u.id];if(v.needsUpdate!==false){u.setValue(gl,v.value,renderer)}}};WebGLUniforms.seqWithValue=function(seq,values){var r=[];for(var i=0,n=seq.length;i!==n;++i){var u=seq[i];if(u.id in values)r.push(u)}return r};var ColorKeywords={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,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};function Color(r,g,b){if(g===undefined&&b===undefined){return this.set(r)}return this.setRGB(r,g,b)}Object.assign(Color.prototype,{isColor:true,r:1,g:1,b:1,set:function(value){if(value&&value.isColor){this.copy(value)}else if(typeof value==="number"){this.setHex(value)}else if(typeof value==="string"){this.setStyle(value)}return this},setScalar:function(scalar){this.r=scalar;this.g=scalar;this.b=scalar;return this},setHex:function(hex){hex=Math.floor(hex);this.r=(hex>>16&255)/255;this.g=(hex>>8&255)/255;this.b=(hex&255)/255;return this},setRGB:function(r,g,b){this.r=r;this.g=g;this.b=b;return this},setHSL:function(){function hue2rgb(p,q,t){if(t<0)t+=1;if(t>1)t-=1;if(t<1/6)return p+(q-p)*6*t;if(t<1/2)return q;if(t<2/3)return p+(q-p)*6*(2/3-t);return p}return function setHSL(h,s,l){h=_Math.euclideanModulo(h,1);s=_Math.clamp(s,0,1);l=_Math.clamp(l,0,1);if(s===0){this.r=this.g=this.b=l}else{var p=l<=.5?l*(1+s):l+s-l*s;var q=2*l-p;this.r=hue2rgb(q,p,h+1/3);this.g=hue2rgb(q,p,h);this.b=hue2rgb(q,p,h-1/3)}return this}}(),setStyle:function(style){function handleAlpha(string){if(string===undefined)return;if(parseFloat(string)<1){console.warn("THREE.Color: Alpha component of "+style+" will be ignored.")}}var m;if(m=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(style)){var color;var name=m[1];var components=m[2];switch(name){case"rgb":case"rgba":if(color=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(components)){this.r=Math.min(255,parseInt(color[1],10))/255;this.g=Math.min(255,parseInt(color[2],10))/255;this.b=Math.min(255,parseInt(color[3],10))/255;handleAlpha(color[5]);return this}if(color=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(components)){this.r=Math.min(100,parseInt(color[1],10))/100;this.g=Math.min(100,parseInt(color[2],10))/100;this.b=Math.min(100,parseInt(color[3],10))/100;handleAlpha(color[5]);return this}break;case"hsl":case"hsla":if(color=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(components)){var h=parseFloat(color[1])/360;var s=parseInt(color[2],10)/100;var l=parseInt(color[3],10)/100;handleAlpha(color[5]);return this.setHSL(h,s,l)}break}}else if(m=/^\#([A-Fa-f0-9]+)$/.exec(style)){var hex=m[1];var size=hex.length;if(size===3){this.r=parseInt(hex.charAt(0)+hex.charAt(0),16)/255;this.g=parseInt(hex.charAt(1)+hex.charAt(1),16)/255;this.b=parseInt(hex.charAt(2)+hex.charAt(2),16)/255;return this}else if(size===6){this.r=parseInt(hex.charAt(0)+hex.charAt(1),16)/255;this.g=parseInt(hex.charAt(2)+hex.charAt(3),16)/255;this.b=parseInt(hex.charAt(4)+hex.charAt(5),16)/255;return this}}if(style&&style.length>0){var hex=ColorKeywords[style];if(hex!==undefined){this.setHex(hex)}else{console.warn("THREE.Color: Unknown color "+style)}}return this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(color){this.r=color.r;this.g=color.g;this.b=color.b;return this},copyGammaToLinear:function(color,gammaFactor){if(gammaFactor===undefined)gammaFactor=2;this.r=Math.pow(color.r,gammaFactor);this.g=Math.pow(color.g,gammaFactor);this.b=Math.pow(color.b,gammaFactor);return this},copyLinearToGamma:function(color,gammaFactor){if(gammaFactor===undefined)gammaFactor=2;var safeInverse=gammaFactor>0?1/gammaFactor:1;this.r=Math.pow(color.r,safeInverse);this.g=Math.pow(color.g,safeInverse);this.b=Math.pow(color.b,safeInverse);return this},convertGammaToLinear:function(){var r=this.r,g=this.g,b=this.b;this.r=r*r;this.g=g*g;this.b=b*b;return this},convertLinearToGamma:function(){this.r=Math.sqrt(this.r);this.g=Math.sqrt(this.g);this.b=Math.sqrt(this.b);return this},getHex:function(){return this.r*255<<16^this.g*255<<8^this.b*255<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(optionalTarget){var hsl=optionalTarget||{h:0,s:0,l:0};var r=this.r,g=this.g,b=this.b;var max=Math.max(r,g,b);var min=Math.min(r,g,b);var hue,saturation;var lightness=(min+max)/2;if(min===max){hue=0;saturation=0}else{var delta=max-min;saturation=lightness<=.5?delta/(max+min):delta/(2-max-min);switch(max){case r:hue=(g-b)/delta+(g<b?6:0);break;case g:hue=(b-r)/delta+2;break;case b:hue=(r-g)/delta+4;break}hue/=6}hsl.h=hue;hsl.s=saturation;hsl.l=lightness;return hsl},getStyle:function(){return"rgb("+(this.r*255|0)+","+(this.g*255|0)+","+(this.b*255|0)+")"},offsetHSL:function(h,s,l){var hsl=this.getHSL();hsl.h+=h;hsl.s+=s;hsl.l+=l;this.setHSL(hsl.h,hsl.s,hsl.l);return this},add:function(color){this.r+=color.r;this.g+=color.g;this.b+=color.b;return this},addColors:function(color1,color2){this.r=color1.r+color2.r;this.g=color1.g+color2.g;this.b=color1.b+color2.b;return this},addScalar:function(s){this.r+=s;this.g+=s;this.b+=s;return this},sub:function(color){this.r=Math.max(0,this.r-color.r);this.g=Math.max(0,this.g-color.g);this.b=Math.max(0,this.b-color.b);return this},multiply:function(color){this.r*=color.r;this.g*=color.g;this.b*=color.b;return this},multiplyScalar:function(s){this.r*=s;this.g*=s;this.b*=s;return this},lerp:function(color,alpha){this.r+=(color.r-this.r)*alpha;this.g+=(color.g-this.g)*alpha;this.b+=(color.b-this.b)*alpha;return this},equals:function(c){return c.r===this.r&&c.g===this.g&&c.b===this.b},fromArray:function(array,offset){if(offset===undefined)offset=0;this.r=array[offset];this.g=array[offset+1];this.b=array[offset+2];return this},toArray:function(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this.r;array[offset+1]=this.g;array[offset+2]=this.b;return array},toJSON:function(){return this.getHex()}});var UniformsLib={common:{diffuse:{value:new Color(15658734)},opacity:{value:1},map:{value:null},offsetRepeat:{value:new Vector4(0,0,1,1)},specularMap:{value:null},alphaMap:{value:null},envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},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 Vector2(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 Color(16777215)}},lights:{ambientLightColor:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}}},points:{diffuse:{value:new Color(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},offsetRepeat:{value:new Vector4(0,0,1,1)}}};var UniformsUtils={merge:function(uniforms){var merged={};for(var u=0;u<uniforms.length;u++){var tmp=this.clone(uniforms[u]);for(var p in tmp){merged[p]=tmp[p]}}return merged},clone:function(uniforms_src){var uniforms_dst={};for(var u in uniforms_src){uniforms_dst[u]={};for(var p in uniforms_src[u]){var parameter_src=uniforms_src[u][p];if(parameter_src&&(parameter_src.isColor||parameter_src.isMatrix3||parameter_src.isMatrix4||parameter_src.isVector2||parameter_src.isVector3||parameter_src.isVector4||parameter_src.isTexture)){uniforms_dst[u][p]=parameter_src.clone()}else if(Array.isArray(parameter_src)){uniforms_dst[u][p]=parameter_src.slice()}else{uniforms_dst[u][p]=parameter_src}}}return uniforms_dst}};var alphamap_fragment="#ifdef USE_ALPHAMAP\n diffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif\n";var alphamap_pars_fragment="#ifdef USE_ALPHAMAP\n uniform sampler2D alphaMap;\n#endif\n";var alphatest_fragment="#ifdef ALPHATEST\n if ( diffuseColor.a < ALPHATEST ) discard;\n#endif\n";var aomap_fragment="#ifdef USE_AOMAP\n float ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n reflectedLight.indirectDiffuse *= ambientOcclusion;\n #if defined( USE_ENVMAP ) && defined( PHYSICAL )\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n #endif\n#endif\n";var aomap_pars_fragment="#ifdef USE_AOMAP\n uniform sampler2D aoMap;\n uniform float aoMapIntensity;\n#endif";var begin_vertex="\nvec3 transformed = vec3( position );\n";var beginnormal_vertex="\nvec3 objectNormal = vec3( normal );\n";var bsdfs="float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n if( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n float maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n return distanceFalloff * maxDistanceCutoffFactor;\n#else\n return pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n }\n return 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n return RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n float fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n return ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n float a2 = pow2( alpha );\n float gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n float gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n return 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n float a2 = pow2( alpha );\n float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n return 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n float a2 = pow2( alpha );\n float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n return RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n float alpha = pow2( roughness );\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n float dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n float dotNH = saturate( dot( geometry.normal, halfDir ) );\n float dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n vec3 F = F_Schlick( specularColor, dotLH );\n float G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n float D = D_GGX( alpha, dotNH );\n return F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n const float LUT_SIZE = 64.0;\n const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n const float LUT_BIAS = 0.5 / LUT_SIZE;\n float theta = acos( dot( N, V ) );\n vec2 uv = vec2(\n sqrt( saturate( roughness ) ),\n saturate( theta / ( 0.5 * PI ) ) );\n uv = uv * LUT_SCALE + LUT_BIAS;\n return uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n float l = length( f );\n return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n float x = dot( v1, v2 );\n float y = abs( x );\n float a = 0.86267 + (0.49788 + 0.01436 * y ) * y;\n float b = 3.45068 + (4.18814 + y) * y;\n float v = a / b;\n float theta_sintheta = (x > 0.0) ? v : 0.5 * inversesqrt( 1.0 - x * x ) - v;\n return cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n vec3 lightNormal = cross( v1, v2 );\n if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n vec3 T1, T2;\n T1 = normalize( V - N * dot( V, N ) );\n T2 = - cross( N, T1 );\n mat3 mat = mInv * transpose( mat3( T1, T2, N ) );\n vec3 coords[ 4 ];\n coords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n coords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n coords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n coords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n coords[ 0 ] = normalize( coords[ 0 ] );\n coords[ 1 ] = normalize( coords[ 1 ] );\n coords[ 2 ] = normalize( coords[ 2 ] );\n coords[ 3 ] = normalize( coords[ 3 ] );\n vec3 vectorFormFactor = vec3( 0.0 );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n vec3 result = vec3( LTC_ClippedSphereFormFactor( vectorFormFactor ) );\n return result;\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n vec4 r = roughness * c0 + c1;\n float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n vec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n return specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n return 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n float dotNH = saturate( dot( geometry.normal, halfDir ) );\n float dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n vec3 F = F_Schlick( specularColor, dotLH );\n float G = G_BlinnPhong_Implicit( );\n float D = D_BlinnPhong( shininess, dotNH );\n return F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n return ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n return sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n";var bumpmap_pars_fragment="#ifdef USE_BUMPMAP\n uniform sampler2D bumpMap;\n uniform float bumpScale;\n vec2 dHdxy_fwd() {\n vec2 dSTdx = dFdx( vUv );\n vec2 dSTdy = dFdy( vUv );\n float Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n float dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n float dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n return vec2( dBx, dBy );\n }\n vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n vec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n vec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n vec3 vN = surf_norm;\n vec3 R1 = cross( vSigmaY, vN );\n vec3 R2 = cross( vN, vSigmaX );\n float fDet = dot( vSigmaX, R1 );\n vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n return normalize( abs( fDet ) * surf_norm - vGrad );\n }\n#endif\n";var clipping_planes_fragment="#if NUM_CLIPPING_PLANES > 0\n for ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {\n vec4 plane = clippingPlanes[ i ];\n if ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n }\n \n #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n bool clipped = true;\n for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {\n vec4 plane = clippingPlanes[ i ];\n clipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n }\n if ( clipped ) discard;\n \n #endif\n#endif\n";var clipping_planes_pars_fragment="#if NUM_CLIPPING_PLANES > 0\n #if ! defined( PHYSICAL ) && ! defined( PHONG )\n varying vec3 vViewPosition;\n #endif\n uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif\n";var clipping_planes_pars_vertex="#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n varying vec3 vViewPosition;\n#endif\n";var clipping_planes_vertex="#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n vViewPosition = - mvPosition.xyz;\n#endif\n";var color_fragment="#ifdef USE_COLOR\n diffuseColor.rgb *= vColor;\n#endif";var color_pars_fragment="#ifdef USE_COLOR\n varying vec3 vColor;\n#endif\n";var color_pars_vertex="#ifdef USE_COLOR\n varying vec3 vColor;\n#endif";var color_vertex="#ifdef USE_COLOR\n vColor.xyz = color.xyz;\n#endif";var common="#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n const highp float a = 12.9898, b = 78.233, c = 43758.5453;\n highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n return fract(sin(sn) * c);\n}\nstruct IncidentLight {\n vec3 color;\n vec3 direction;\n bool visible;\n};\nstruct ReflectedLight {\n vec3 directDiffuse;\n vec3 directSpecular;\n vec3 indirectDiffuse;\n vec3 indirectSpecular;\n};\nstruct GeometricContext {\n vec3 position;\n vec3 normal;\n vec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n float distance = dot( planeNormal, point - pointOnPlane );\n return - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n return sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n return lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transpose( const in mat3 v ) {\n mat3 tmp;\n tmp[0] = vec3(v[0].x, v[1].x, v[2].x);\n tmp[1] = vec3(v[0].y, v[1].y, v[2].y);\n tmp[2] = vec3(v[0].z, v[1].z, v[2].z);\n return tmp;\n}\n";var cube_uv_reflection_fragment="#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n vec3 absDirection = abs(direction);\n int face = -1;\n if( absDirection.x > absDirection.z ) {\n if(absDirection.x > absDirection.y )\n face = direction.x > 0.0 ? 0 : 3;\n else\n face = direction.y > 0.0 ? 1 : 4;\n }\n else {\n if(absDirection.z > absDirection.y )\n face = direction.z > 0.0 ? 2 : 5;\n else\n face = direction.y > 0.0 ? 1 : 4;\n }\n return face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n float scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n float dxRoughness = dFdx(roughness);\n float dyRoughness = dFdy(roughness);\n vec3 dx = dFdx( vec * scale * dxRoughness );\n vec3 dy = dFdy( vec * scale * dyRoughness );\n float d = max( dot( dx, dx ), dot( dy, dy ) );\n d = clamp(d, 1.0, cubeUV_rangeClamp);\n float mipLevel = 0.5 * log2(d);\n return vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n mipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n float a = 16.0 * cubeUV_rcpTextureSize;\n vec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n vec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n float powScale = exp2_packed.x * exp2_packed.y;\n float scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n float mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n bool bRes = mipLevel == 0.0;\n scale = bRes && (scale < a) ? a : scale;\n vec3 r;\n vec2 offset;\n int face = getFaceFromDirection(direction);\n float rcpPowScale = 1.0 / powScale;\n if( face == 0) {\n r = vec3(direction.x, -direction.z, direction.y);\n offset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 1) {\n r = vec3(direction.y, direction.x, direction.z);\n offset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 2) {\n r = vec3(direction.z, direction.x, direction.y);\n offset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 3) {\n r = vec3(direction.x, direction.z, direction.y);\n offset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n else if( face == 4) {\n r = vec3(direction.y, direction.x, -direction.z);\n offset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n else {\n r = vec3(direction.z, -direction.x, direction.y);\n offset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n r = normalize(r);\n float texelOffset = 0.5 * cubeUV_rcpTextureSize;\n vec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n vec2 base = offset + vec2( texelOffset );\n return base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\n float roughnessVal = roughness* cubeUV_maxLods3;\n float r1 = floor(roughnessVal);\n float r2 = r1 + 1.0;\n float t = fract(roughnessVal);\n vec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n float s = mipInfo.y;\n float level0 = mipInfo.x;\n float level1 = level0 + 1.0;\n level1 = level1 > 5.0 ? 5.0 : level1;\n level0 += min( floor( s + 0.5 ), 5.0 );\n vec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n vec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n vec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n vec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n vec4 result = mix(color10, color20, t);\n return vec4(result.rgb, 1.0);\n}\n#endif\n";var defaultnormal_vertex="vec3 transformedNormal = normalMatrix * objectNormal;\n#ifdef FLIP_SIDED\n transformedNormal = - transformedNormal;\n#endif\n";var displacementmap_pars_vertex="#ifdef USE_DISPLACEMENTMAP\n uniform sampler2D displacementMap;\n uniform float displacementScale;\n uniform float displacementBias;\n#endif\n";var displacementmap_vertex="#ifdef USE_DISPLACEMENTMAP\n transformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n";var emissivemap_fragment="#ifdef USE_EMISSIVEMAP\n vec4 emissiveColor = texture2D( emissiveMap, vUv );\n emissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n totalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n";var emissivemap_pars_fragment="#ifdef USE_EMISSIVEMAP\n uniform sampler2D emissiveMap;\n#endif\n";var encodings_fragment=" gl_FragColor = linearToOutputTexel( gl_FragColor );\n";var encodings_pars_fragment="\nvec4 LinearToLinear( in vec4 value ) {\n return value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n 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 );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n 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 );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n return vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n float maxComponent = max( max( value.r, value.g ), value.b );\n float fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.x, max( value.g, value.b ) );\n float M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n M = ceil( M * 255.0 ) / 255.0;\n return vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.x, max( value.g, value.b ) );\n float D = max( maxRange / maxRGB, 1.0 );\n D = min( floor( D ) / 255.0, 1.0 );\n return vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n vec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n Xp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n vec4 vResult;\n vResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n float Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n vResult.w = fract(Le);\n vResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n return vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n float Le = value.z * 255.0 + value.w;\n vec3 Xp_Y_XYZp;\n Xp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n Xp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n Xp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n vec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n return vec4( max(vRGB, 0.0), 1.0 );\n}\n";var envmap_fragment="#ifdef USE_ENVMAP\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n vec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( cameraToVertex, worldNormal );\n #else\n vec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n #else\n vec3 reflectVec = vReflect;\n #endif\n #ifdef ENVMAP_TYPE_CUBE\n vec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n #elif defined( ENVMAP_TYPE_EQUIREC )\n vec2 sampleUV;\n sampleUV.y = asin( flipNormal * reflectVec.y ) * RECIPROCAL_PI + 0.5;\n sampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n vec4 envColor = texture2D( envMap, sampleUV );\n #elif defined( ENVMAP_TYPE_SPHERE )\n vec3 reflectView = flipNormal * normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n vec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n #else\n vec4 envColor = vec4( 0.0 );\n #endif\n envColor = envMapTexelToLinear( envColor );\n #ifdef ENVMAP_BLENDING_MULTIPLY\n outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_MIX )\n outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_ADD )\n outgoingLight += envColor.xyz * specularStrength * reflectivity;\n #endif\n#endif\n";var envmap_pars_fragment="#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n uniform float reflectivity;\n uniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n #if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n varying vec3 vWorldPosition;\n #endif\n #ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n #else\n uniform sampler2D envMap;\n #endif\n uniform float flipEnvMap;\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n uniform float refractionRatio;\n #else\n varying vec3 vReflect;\n #endif\n#endif\n";var envmap_pars_vertex="#ifdef USE_ENVMAP\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n varying vec3 vWorldPosition;\n #else\n varying vec3 vReflect;\n uniform float refractionRatio;\n #endif\n#endif\n";var envmap_vertex="#ifdef USE_ENVMAP\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n vWorldPosition = worldPosition.xyz;\n #else\n vec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vReflect = reflect( cameraToVertex, worldNormal );\n #else\n vReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n #endif\n#endif\n";var fog_vertex="\n#ifdef USE_FOG\nfogDepth = -mvPosition.z;\n#endif";var fog_pars_vertex="#ifdef USE_FOG\n varying float fogDepth;\n#endif\n";var fog_fragment="#ifdef USE_FOG\n #ifdef FOG_EXP2\n float fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n #else\n float fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n #endif\n gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n";var fog_pars_fragment="#ifdef USE_FOG\n uniform vec3 fogColor;\n varying float fogDepth;\n #ifdef FOG_EXP2\n uniform float fogDensity;\n #else\n uniform float fogNear;\n uniform float fogFar;\n #endif\n#endif\n";
var gradientmap_pars_fragment="#ifdef TOON\n uniform sampler2D gradientMap;\n vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n float dotNL = dot( normal, lightDirection );\n vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n #ifdef USE_GRADIENTMAP\n return texture2D( gradientMap, coord ).rgb;\n #else\n return ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n #endif\n }\n#endif\n";var lightmap_fragment="#ifdef USE_LIGHTMAP\n reflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n";var lightmap_pars_fragment="#ifdef USE_LIGHTMAP\n uniform sampler2D lightMap;\n uniform float lightMapIntensity;\n#endif";var lights_lambert_vertex="vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n vLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n getPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n getSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_DIR_LIGHTS > 0\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n getDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_HEMI_LIGHTS > 0\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n vLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n #ifdef DOUBLE_SIDED\n vLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n #endif\n }\n#endif\n";var lights_pars="uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n vec3 irradiance = ambientLightColor;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n return irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n struct DirectionalLight {\n vec3 direction;\n vec3 color;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n void getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n directLight.color = directionalLight.color;\n directLight.direction = directionalLight.direction;\n directLight.visible = true;\n }\n#endif\n#if NUM_POINT_LIGHTS > 0\n struct PointLight {\n vec3 position;\n vec3 color;\n float distance;\n float decay;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n void getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n vec3 lVector = pointLight.position - geometry.position;\n directLight.direction = normalize( lVector );\n float lightDistance = length( lVector );\n directLight.color = pointLight.color;\n directLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n directLight.visible = ( directLight.color != vec3( 0.0 ) );\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n struct SpotLight {\n vec3 position;\n vec3 direction;\n vec3 color;\n float distance;\n float decay;\n float coneCos;\n float penumbraCos;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n void getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n vec3 lVector = spotLight.position - geometry.position;\n directLight.direction = normalize( lVector );\n float lightDistance = length( lVector );\n float angleCos = dot( directLight.direction, spotLight.direction );\n if ( angleCos > spotLight.coneCos ) {\n float spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n directLight.color = spotLight.color;\n directLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n directLight.visible = true;\n } else {\n directLight.color = vec3( 0.0 );\n directLight.visible = false;\n }\n }\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n struct RectAreaLight {\n vec3 color;\n vec3 position;\n vec3 halfWidth;\n vec3 halfHeight;\n };\n uniform sampler2D ltcMat; uniform sampler2D ltcMag;\n uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n struct HemisphereLight {\n vec3 direction;\n vec3 skyColor;\n vec3 groundColor;\n };\n uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n float dotNL = dot( geometry.normal, hemiLight.direction );\n float hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n return irradiance;\n }\n#endif\n#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n vec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n #ifdef ENVMAP_TYPE_CUBE\n vec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n #else\n vec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n vec4 envMapColor = textureCubeUV( queryVec, 1.0 );\n #else\n vec4 envMapColor = vec4( 0.0 );\n #endif\n return PI * envMapColor.rgb * envMapIntensity;\n }\n float getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n float maxMIPLevelScalar = float( maxMIPLevel );\n float desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n return clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n }\n vec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n #else\n vec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n #endif\n reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n float specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n #ifdef ENVMAP_TYPE_CUBE\n vec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n #else\n vec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n vec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n #elif defined( ENVMAP_TYPE_EQUIREC )\n vec2 sampleUV;\n sampleUV.y = saturate( reflectVec.y * 0.5 + 0.5 );\n sampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n #else\n vec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n #elif defined( ENVMAP_TYPE_SPHERE )\n vec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n #else\n vec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n #endif\n return envMapColor.rgb * envMapIntensity;\n }\n#endif\n";var lights_phong_fragment="BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n";var lights_phong_pars_fragment="varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n vec3 diffuseColor;\n vec3 specularColor;\n float specularShininess;\n float specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n #ifdef TOON\n vec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n #else\n float dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #endif\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n reflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_BlinnPhong\n#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material ) (0)\n";var lights_physical_fragment="PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n material.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n material.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n material.clearCoat = saturate( clearCoat ); material.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif\n";var lights_physical_pars_fragment="struct PhysicalMaterial {\n vec3 diffuseColor;\n float specularRoughness;\n vec3 specularColor;\n #ifndef STANDARD\n float clearCoat;\n float clearCoatRoughness;\n #endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n return DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n vec3 normal = geometry.normal;\n vec3 viewDir = geometry.viewDir;\n vec3 position = geometry.position;\n vec3 lightPos = rectAreaLight.position;\n vec3 halfWidth = rectAreaLight.halfWidth;\n vec3 halfHeight = rectAreaLight.halfHeight;\n vec3 lightColor = rectAreaLight.color;\n float roughness = material.specularRoughness;\n vec3 rectCoords[ 4 ];\n rectCoords[ 0 ] = lightPos - halfWidth - halfHeight; rectCoords[ 1 ] = lightPos + halfWidth - halfHeight;\n rectCoords[ 2 ] = lightPos + halfWidth + halfHeight;\n rectCoords[ 3 ] = lightPos - halfWidth + halfHeight;\n vec2 uv = LTC_Uv( normal, viewDir, roughness );\n float norm = texture2D( ltcMag, uv ).a;\n vec4 t = texture2D( ltcMat, uv );\n mat3 mInv = mat3(\n vec3( 1, 0, t.y ),\n vec3( 0, t.z, 0 ),\n vec3( t.w, 0, t.x )\n );\n reflectedLight.directSpecular += lightColor * material.specularColor * norm * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1 ), rectCoords );\n }\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n #ifndef STANDARD\n float clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n #else\n float clearCoatDHR = 0.0;\n #endif\n reflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n reflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n #ifndef STANDARD\n reflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n #endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n #ifndef STANDARD\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n float dotNL = dotNV;\n float clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n #else\n float clearCoatDHR = 0.0;\n #endif\n reflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n #ifndef STANDARD\n reflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n #endif\n}\n#define RE_Direct RE_Direct_Physical\n#define RE_Direct_RectArea RE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular RE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n";var lights_template="\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n getPointDirectLightIrradiance( pointLight, geometry, directLight );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n getSpotDirectLightIrradiance( spotLight, geometry, directLight );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n RectAreaLight rectAreaLight;\n for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n rectAreaLight = rectAreaLights[ i ];\n RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n }\n#endif\n#if defined( RE_IndirectDiffuse )\n vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n #ifdef USE_LIGHTMAP\n vec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n lightMapIrradiance *= PI;\n #endif\n irradiance += lightMapIrradiance;\n #endif\n #if ( NUM_HEMI_LIGHTS > 0 )\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n }\n #endif\n #if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n irradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n #endif\n RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n vec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n #ifndef STANDARD\n vec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );\n #else\n vec3 clearCoatRadiance = vec3( 0.0 );\n #endif\n RE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif\n";var logdepthbuf_fragment="#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n gl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif";var logdepthbuf_pars_fragment="#ifdef USE_LOGDEPTHBUF\n uniform float logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n#endif\n";var logdepthbuf_pars_vertex="#ifdef USE_LOGDEPTHBUF\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n uniform float logDepthBufFC;\n#endif";var logdepthbuf_vertex="#ifdef USE_LOGDEPTHBUF\n gl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n vFragDepth = 1.0 + gl_Position.w;\n #else\n gl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n #endif\n#endif\n";var map_fragment="#ifdef USE_MAP\n vec4 texelColor = texture2D( map, vUv );\n texelColor = mapTexelToLinear( texelColor );\n diffuseColor *= texelColor;\n#endif\n";var map_pars_fragment="#ifdef USE_MAP\n uniform sampler2D map;\n#endif\n";var map_particle_fragment="#ifdef USE_MAP\n vec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n diffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n";var map_particle_pars_fragment="#ifdef USE_MAP\n uniform vec4 offsetRepeat;\n uniform sampler2D map;\n#endif\n";var metalnessmap_fragment="float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n vec4 texelMetalness = texture2D( metalnessMap, vUv );\n metalnessFactor *= texelMetalness.b;\n#endif\n";var metalnessmap_pars_fragment="#ifdef USE_METALNESSMAP\n uniform sampler2D metalnessMap;\n#endif";var morphnormal_vertex="#ifdef USE_MORPHNORMALS\n objectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n objectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n objectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n objectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n";var morphtarget_pars_vertex="#ifdef USE_MORPHTARGETS\n #ifndef USE_MORPHNORMALS\n uniform float morphTargetInfluences[ 8 ];\n #else\n uniform float morphTargetInfluences[ 4 ];\n #endif\n#endif";var morphtarget_vertex="#ifdef USE_MORPHTARGETS\n transformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n transformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n transformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n transformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n #ifndef USE_MORPHNORMALS\n transformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n transformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n transformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n transformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n #endif\n#endif\n";var normal_flip="#ifdef DOUBLE_SIDED\n float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n#else\n float flipNormal = 1.0;\n#endif\n";var normal_fragment="#ifdef FLAT_SHADED\n vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n vec3 normal = normalize( cross( fdx, fdy ) );\n#else\n vec3 normal = normalize( vNormal ) * flipNormal;\n#endif\n#ifdef USE_NORMALMAP\n normal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n";var normalmap_pars_fragment="#ifdef USE_NORMALMAP\n uniform sampler2D normalMap;\n uniform vec2 normalScale;\n vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n vec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n vec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n vec2 st0 = dFdx( vUv.st );\n vec2 st1 = dFdy( vUv.st );\n vec3 S = normalize( q0 * st1.t - q1 * st0.t );\n vec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n vec3 N = normalize( surf_norm );\n vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n mapN.xy = normalScale * mapN.xy;\n mat3 tsn = mat3( S, T, N );\n return normalize( tsn * mapN );\n }\n#endif\n";var packing="vec3 packNormalToRGB( const in vec3 normal ) {\n return normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n return 1.0 - 2.0 * rgb.xyz;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n vec4 r = vec4( fract( v * PackFactors ), v );\n r.yzw -= r.xyz * ShiftRight8; return r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n return dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n return ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n return linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n return (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n return ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n";var premultiplied_alpha_fragment="#ifdef PREMULTIPLIED_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif\n";var project_vertex="vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\n";var dithering_fragment="#if defined( DITHERING )\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif\n";var dithering_pars_fragment="#if defined( DITHERING )\n vec3 dithering( vec3 color ) {\n float grid_position = rand( gl_FragCoord.xy );\n vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n return color + dither_shift_RGB;\n }\n#endif\n";var roughnessmap_fragment="float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n vec4 texelRoughness = texture2D( roughnessMap, vUv );\n roughnessFactor *= texelRoughness.g;\n#endif\n";var roughnessmap_pars_fragment="#ifdef USE_ROUGHNESSMAP\n uniform sampler2D roughnessMap;\n#endif";var shadowmap_pars_fragment="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n }\n float texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n const vec2 offset = vec2( 0.0, 1.0 );\n vec2 texelSize = vec2( 1.0 ) / size;\n vec2 centroidUV = floor( uv * size + 0.5 ) / size;\n float lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n float lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n float rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n float rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n vec2 f = fract( uv * size + 0.5 );\n float a = mix( lb, lt, f.y );\n float b = mix( rb, rt, f.y );\n float c = mix( a, b, f.x );\n return c;\n }\n float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n float shadow = 1.0;\n shadowCoord.xyz /= shadowCoord.w;\n shadowCoord.z += shadowBias;\n bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n bool inFrustum = all( inFrustumVec );\n bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n bool frustumTest = all( frustumTestVec );\n if ( frustumTest ) {\n #if defined( SHADOWMAP_TYPE_PCF )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n shadow = (\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n shadow = (\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #else\n shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n #endif\n }\n return shadow;\n }\n vec2 cubeToUV( vec3 v, float texelSizeY ) {\n vec3 absV = abs( v );\n float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n absV *= scaleToCube;\n v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n vec2 planar = v.xy;\n float almostATexel = 1.5 * texelSizeY;\n float almostOne = 1.0 - almostATexel;\n if ( absV.z >= almostOne ) {\n if ( v.z > 0.0 )\n planar.x = 4.0 - v.x;\n } else if ( absV.x >= almostOne ) {\n float signX = sign( v.x );\n planar.x = v.z * signX + 2.0 * signX;\n } else if ( absV.y >= almostOne ) {\n float signY = sign( v.y );\n planar.x = v.x + 2.0 * signY + 2.0;\n planar.y = v.z * signY - 2.0;\n }\n return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n }\n float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n vec3 lightToPosition = shadowCoord.xyz;\n vec3 bd3D = normalize( lightToPosition );\n float dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\n #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n return (\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n #endif\n }\n#endif\n";
var shadowmap_pars_vertex="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n#endif\n";var shadowmap_vertex="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n vSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n }\n #endif\n#endif\n";var shadowmask_pars_fragment="float getShadowMask() {\n float shadow = 1.0;\n #ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n shadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n shadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n shadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #endif\n return shadow;\n}\n";var skinbase_vertex="#ifdef USE_SKINNING\n mat4 boneMatX = getBoneMatrix( skinIndex.x );\n mat4 boneMatY = getBoneMatrix( skinIndex.y );\n mat4 boneMatZ = getBoneMatrix( skinIndex.z );\n mat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif";var skinning_pars_vertex="#ifdef USE_SKINNING\n uniform mat4 bindMatrix;\n uniform mat4 bindMatrixInverse;\n #ifdef BONE_TEXTURE\n uniform sampler2D boneTexture;\n uniform int boneTextureSize;\n mat4 getBoneMatrix( const in float i ) {\n float j = i * 4.0;\n float x = mod( j, float( boneTextureSize ) );\n float y = floor( j / float( boneTextureSize ) );\n float dx = 1.0 / float( boneTextureSize );\n float dy = 1.0 / float( boneTextureSize );\n y = dy * ( y + 0.5 );\n vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n mat4 bone = mat4( v1, v2, v3, v4 );\n return bone;\n }\n #else\n uniform mat4 boneMatrices[ MAX_BONES ];\n mat4 getBoneMatrix( const in float i ) {\n mat4 bone = boneMatrices[ int(i) ];\n return bone;\n }\n #endif\n#endif\n";var skinning_vertex="#ifdef USE_SKINNING\n vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n vec4 skinned = vec4( 0.0 );\n skinned += boneMatX * skinVertex * skinWeight.x;\n skinned += boneMatY * skinVertex * skinWeight.y;\n skinned += boneMatZ * skinVertex * skinWeight.z;\n skinned += boneMatW * skinVertex * skinWeight.w;\n transformed = ( bindMatrixInverse * skinned ).xyz;\n#endif\n";var skinnormal_vertex="#ifdef USE_SKINNING\n mat4 skinMatrix = mat4( 0.0 );\n skinMatrix += skinWeight.x * boneMatX;\n skinMatrix += skinWeight.y * boneMatY;\n skinMatrix += skinWeight.z * boneMatZ;\n skinMatrix += skinWeight.w * boneMatW;\n skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n";var specularmap_fragment="float specularStrength;\n#ifdef USE_SPECULARMAP\n vec4 texelSpecular = texture2D( specularMap, vUv );\n specularStrength = texelSpecular.r;\n#else\n specularStrength = 1.0;\n#endif";var specularmap_pars_fragment="#ifdef USE_SPECULARMAP\n uniform sampler2D specularMap;\n#endif";var tonemapping_fragment="#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n";var tonemapping_pars_fragment="#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n return toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n color = max( vec3( 0.0 ), color - 0.004 );\n return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n";var uv_pars_fragment="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n#endif";var uv_pars_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n uniform vec4 offsetRepeat;\n#endif\n";var uv_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n vUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif";var uv2_pars_fragment="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n varying vec2 vUv2;\n#endif";var uv2_pars_vertex="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n attribute vec2 uv2;\n varying vec2 vUv2;\n#endif";var uv2_vertex="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n vUv2 = uv2;\n#endif";var worldpos_vertex="#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( PHYSICAL ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n#endif\n";var cube_frag="uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n gl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n gl_FragColor.a *= opacity;\n}\n";var cube_vert="varying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n vWorldPosition = transformDirection( position, modelMatrix );\n #include <begin_vertex>\n #include <project_vertex>\n}\n";var depth_frag="#if DEPTH_PACKING == 3200\n uniform float opacity;\n#endif\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n #include <clipping_planes_fragment>\n vec4 diffuseColor = vec4( 1.0 );\n #if DEPTH_PACKING == 3200\n diffuseColor.a = opacity;\n #endif\n #include <map_fragment>\n #include <alphamap_fragment>\n #include <alphatest_fragment>\n #include <logdepthbuf_fragment>\n #if DEPTH_PACKING == 3200\n gl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );\n #elif DEPTH_PACKING == 3201\n gl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n #endif\n}\n";var depth_vert="#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n #include <uv_vertex>\n #include <skinbase_vertex>\n #ifdef USE_DISPLACEMENTMAP\n #include <beginnormal_vertex>\n #include <morphnormal_vertex>\n #include <skinnormal_vertex>\n #endif\n #include <begin_vertex>\n #include <morphtarget_vertex>\n #include <skinning_vertex>\n #include <displacementmap_vertex>\n #include <project_vertex>\n #include <logdepthbuf_vertex>\n #include <clipping_planes_vertex>\n}\n";var distanceRGBA_frag="uniform vec3 lightPos;\nvarying vec4 vWorldPosition;\n#include <common>\n#include <packing>\n#include <clipping_planes_pars_fragment>\nvoid main () {\n #include <clipping_planes_fragment>\n gl_FragColor = packDepthToRGBA( length( vWorldPosition.xyz - lightPos.xyz ) / 1000.0 );\n}\n";var distanceRGBA_vert="varying vec4 vWorldPosition;\n#include <common>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n #include <skinbase_vertex>\n #include <begin_vertex>\n #include <morphtarget_vertex>\n #include <skinning_vertex>\n #include <project_vertex>\n #include <worldpos_vertex>\n #include <clipping_planes_vertex>\n vWorldPosition = worldPosition;\n}\n";var equirect_frag="uniform sampler2D tEquirect;\nuniform float tFlip;\nvarying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n vec3 direction = normalize( vWorldPosition );\n vec2 sampleUV;\n sampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );\n sampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n gl_FragColor = texture2D( tEquirect, sampleUV );\n}\n";var equirect_vert="varying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n vWorldPosition = transformDirection( position, modelMatrix );\n #include <begin_vertex>\n #include <project_vertex>\n}\n";var linedashed_frag="uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n #include <clipping_planes_fragment>\n if ( mod( vLineDistance, totalSize ) > dashSize ) {\n discard;\n }\n vec3 outgoingLight = vec3( 0.0 );\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include <logdepthbuf_fragment>\n #include <color_fragment>\n outgoingLight = diffuseColor.rgb;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include <premultiplied_alpha_fragment>\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n #include <fog_fragment>\n}\n";var linedashed_vert="uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n #include <color_vertex>\n vLineDistance = scale * lineDistance;\n vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n gl_Position = projectionMatrix * mvPosition;\n #include <logdepthbuf_vertex>\n #include <clipping_planes_vertex>\n #include <fog_vertex>\n}\n";var meshbasic_frag="uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include <common>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n #include <clipping_planes_fragment>\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include <logdepthbuf_fragment>\n #include <map_fragment>\n #include <color_fragment>\n #include <alphamap_fragment>\n #include <alphatest_fragment>\n #include <specularmap_fragment>\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n #ifdef USE_LIGHTMAP\n reflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n #else\n reflectedLight.indirectDiffuse += vec3( 1.0 );\n #endif\n #include <aomap_fragment>\n reflectedLight.indirectDiffuse *= diffuseColor.rgb;\n vec3 outgoingLight = reflectedLight.indirectDiffuse;\n #include <normal_flip>\n #include <envmap_fragment>\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include <premultiplied_alpha_fragment>\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n #include <fog_fragment>\n}\n";var meshbasic_vert="#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n #include <uv_vertex>\n #include <uv2_vertex>\n #include <color_vertex>\n #include <skinbase_vertex>\n #ifdef USE_ENVMAP\n #include <beginnormal_vertex>\n #include <morphnormal_vertex>\n #include <skinnormal_vertex>\n #include <defaultnormal_vertex>\n #endif\n #include <begin_vertex>\n #include <morphtarget_vertex>\n #include <skinning_vertex>\n #include <project_vertex>\n #include <logdepthbuf_vertex>\n #include <worldpos_vertex>\n #include <clipping_planes_vertex>\n #include <envmap_vertex>\n #include <fog_vertex>\n}\n";var meshlambert_frag="uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n varying vec3 vLightBack;\n#endif\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <bsdfs>\n#include <lights_pars>\n#include <fog_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n #include <clipping_planes_fragment>\n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include <logdepthbuf_fragment>\n #include <map_fragment>\n #include <color_fragment>\n #include <alphamap_fragment>\n #include <alphatest_fragment>\n #include <specularmap_fragment>\n #include <emissivemap_fragment>\n reflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n #include <lightmap_fragment>\n reflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n #ifdef DOUBLE_SIDED\n reflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n #else\n reflectedLight.directDiffuse = vLightFront;\n #endif\n reflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n #include <aomap_fragment>\n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n #include <normal_flip>\n #include <envmap_fragment>\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n #include <fog_fragment>\n #include <premultiplied_alpha_fragment>\n #include <dithering_fragment>\n}\n";var meshlambert_vert="#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n varying vec3 vLightBack;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <bsdfs>\n#include <lights_pars>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n #include <uv_vertex>\n #include <uv2_vertex>\n #include <color_vertex>\n #include <beginnormal_vertex>\n #include <morphnormal_vertex>\n #include <skinbase_vertex>\n #include <skinnormal_vertex>\n #include <defaultnormal_vertex>\n #include <begin_vertex>\n #include <morphtarget_vertex>\n #include <skinning_vertex>\n #include <project_vertex>\n #include <logdepthbuf_vertex>\n #include <clipping_planes_vertex>\n #include <worldpos_vertex>\n #include <envmap_vertex>\n #include <lights_lambert_vertex>\n #include <shadowmap_vertex>\n #include <fog_vertex>\n}\n";var meshphong_frag="#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <gradientmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars>\n#include <lights_phong_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n #include <clipping_planes_fragment>\n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include <logdepthbuf_fragment>\n #include <map_fragment>\n #include <color_fragment>\n #include <alphamap_fragment>\n #include <alphatest_fragment>\n #include <specularmap_fragment>\n #include <normal_flip>\n #include <normal_fragment>\n #include <emissivemap_fragment>\n #include <lights_phong_fragment>\n #include <lights_template>\n #include <aomap_fragment>\n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n #include <envmap_fragment>\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n #include <fog_fragment>\n #include <premultiplied_alpha_fragment>\n #include <dithering_fragment>\n}\n";var meshphong_vert="#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n #include <uv_vertex>\n #include <uv2_vertex>\n #include <color_vertex>\n #include <beginnormal_vertex>\n #include <morphnormal_vertex>\n #include <skinbase_vertex>\n #include <skinnormal_vertex>\n #include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n#endif\n #include <begin_vertex>\n #include <morphtarget_vertex>\n #include <skinning_vertex>\n #include <displacementmap_vertex>\n #include <project_vertex>\n #include <logdepthbuf_vertex>\n #include <clipping_planes_vertex>\n vViewPosition = - mvPosition.xyz;\n #include <worldpos_vertex>\n #include <envmap_vertex>\n #include <shadowmap_vertex>\n #include <fog_vertex>\n}\n";var meshphysical_frag="#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n uniform float clearCoat;\n uniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <cube_uv_reflection_fragment>\n#include <lights_pars>\n#include <lights_physical_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n #include <clipping_planes_fragment>\n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include <logdepthbuf_fragment>\n #include <map_fragment>\n #include <color_fragment>\n #include <alphamap_fragment>\n #include <alphatest_fragment>\n #include <roughnessmap_fragment>\n #include <metalnessmap_fragment>\n #include <normal_flip>\n #include <normal_fragment>\n #include <emissivemap_fragment>\n #include <lights_physical_fragment>\n #include <lights_template>\n #include <aomap_fragment>\n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n #include <fog_fragment>\n #include <premultiplied_alpha_fragment>\n #include <dithering_fragment>\n}\n";var meshphysical_vert="#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n #include <uv_vertex>\n #include <uv2_vertex>\n #include <color_vertex>\n #include <beginnormal_vertex>\n #include <morphnormal_vertex>\n #include <skinbase_vertex>\n #include <skinnormal_vertex>\n #include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n#endif\n #include <begin_vertex>\n #include <morphtarget_vertex>\n #include <skinning_vertex>\n #include <displacementmap_vertex>\n #include <project_vertex>\n #include <logdepthbuf_vertex>\n #include <clipping_planes_vertex>\n vViewPosition = - mvPosition.xyz;\n #include <worldpos_vertex>\n #include <shadowmap_vertex>\n #include <fog_vertex>\n}\n";var normal_frag="#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n varying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include <packing>\n#include <uv_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\nvoid main() {\n #include <logdepthbuf_fragment>\n #include <normal_flip>\n #include <normal_fragment>\n gl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}\n";var normal_vert="#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n varying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\nvoid main() {\n #include <uv_vertex>\n #include <beginnormal_vertex>\n #include <morphnormal_vertex>\n #include <skinbase_vertex>\n #include <skinnormal_vertex>\n #include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n#endif\n #include <begin_vertex>\n #include <morphtarget_vertex>\n #include <skinning_vertex>\n #include <displacementmap_vertex>\n #include <project_vertex>\n #include <logdepthbuf_vertex>\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n vViewPosition = - mvPosition.xyz;\n#endif\n}\n";var points_frag="uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <color_pars_fragment>\n#include <map_particle_pars_fragment>\n#include <fog_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n #include <clipping_planes_fragment>\n vec3 outgoingLight = vec3( 0.0 );\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include <logdepthbuf_fragment>\n #include <map_particle_fragment>\n #include <color_fragment>\n #include <alphatest_fragment>\n outgoingLight = diffuseColor.rgb;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include <premultiplied_alpha_fragment>\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n #include <fog_fragment>\n}\n";var points_vert="uniform float size;\nuniform float scale;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n #include <color_vertex>\n #include <begin_vertex>\n #include <project_vertex>\n #ifdef USE_SIZEATTENUATION\n gl_PointSize = size * ( scale / - mvPosition.z );\n #else\n gl_PointSize = size;\n #endif\n #include <logdepthbuf_vertex>\n #include <clipping_planes_vertex>\n #include <worldpos_vertex>\n #include <shadowmap_vertex>\n #include <fog_vertex>\n}\n";var shadow_frag="uniform float opacity;\n#include <common>\n#include <packing>\n#include <bsdfs>\n#include <lights_pars>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\nvoid main() {\n gl_FragColor = vec4( 0.0, 0.0, 0.0, opacity * ( 1.0 - getShadowMask() ) );\n}\n";var shadow_vert="#include <shadowmap_pars_vertex>\nvoid main() {\n #include <begin_vertex>\n #include <project_vertex>\n #include <worldpos_vertex>\n #include <shadowmap_vertex>\n}\n";var ShaderChunk={alphamap_fragment:alphamap_fragment,alphamap_pars_fragment:alphamap_pars_fragment,alphatest_fragment:alphatest_fragment,aomap_fragment:aomap_fragment,aomap_pars_fragment:aomap_pars_fragment,begin_vertex:begin_vertex,beginnormal_vertex:beginnormal_vertex,bsdfs:bsdfs,bumpmap_pars_fragment:bumpmap_pars_fragment,clipping_planes_fragment:clipping_planes_fragment,clipping_planes_pars_fragment:clipping_planes_pars_fragment,clipping_planes_pars_vertex:clipping_planes_pars_vertex,clipping_planes_vertex:clipping_planes_vertex,color_fragment:color_fragment,color_pars_fragment:color_pars_fragment,color_pars_vertex:color_pars_vertex,color_vertex:color_vertex,common:common,cube_uv_reflection_fragment:cube_uv_reflection_fragment,defaultnormal_vertex:defaultnormal_vertex,displacementmap_pars_vertex:displacementmap_pars_vertex,displacementmap_vertex:displacementmap_vertex,emissivemap_fragment:emissivemap_fragment,emissivemap_pars_fragment:emissivemap_pars_fragment,encodings_fragment:encodings_fragment,encodings_pars_fragment:encodings_pars_fragment,envmap_fragment:envmap_fragment,envmap_pars_fragment:envmap_pars_fragment,envmap_pars_vertex:envmap_pars_vertex,envmap_vertex:envmap_vertex,fog_vertex:fog_vertex,fog_pars_vertex:fog_pars_vertex,fog_fragment:fog_fragment,fog_pars_fragment:fog_pars_fragment,gradientmap_pars_fragment:gradientmap_pars_fragment,lightmap_fragment:lightmap_fragment,lightmap_pars_fragment:lightmap_pars_fragment,lights_lambert_vertex:lights_lambert_vertex,lights_pars:lights_pars,lights_phong_fragment:lights_phong_fragment,lights_phong_pars_fragment:lights_phong_pars_fragment,lights_physical_fragment:lights_physical_fragment,lights_physical_pars_fragment:lights_physical_pars_fragment,lights_template:lights_template,logdepthbuf_fragment:logdepthbuf_fragment,logdepthbuf_pars_fragment:logdepthbuf_pars_fragment,logdepthbuf_pars_vertex:logdepthbuf_pars_vertex,logdepthbuf_vertex:logdepthbuf_vertex,map_fragment:map_fragment,map_pars_fragment:map_pars_fragment,map_particle_fragment:map_particle_fragment,map_particle_pars_fragment:map_particle_pars_fragment,metalnessmap_fragment:metalnessmap_fragment,metalnessmap_pars_fragment:metalnessmap_pars_fragment,morphnormal_vertex:morphnormal_vertex,morphtarget_pars_vertex:morphtarget_pars_vertex,morphtarget_vertex:morphtarget_vertex,normal_flip:normal_flip,normal_fragment:normal_fragment,normalmap_pars_fragment:normalmap_pars_fragment,packing:packing,premultiplied_alpha_fragment:premultiplied_alpha_fragment,project_vertex:project_vertex,dithering_fragment:dithering_fragment,dithering_pars_fragment:dithering_pars_fragment,roughnessmap_fragment:roughnessmap_fragment,roughnessmap_pars_fragment:roughnessmap_pars_fragment,shadowmap_pars_fragment:shadowmap_pars_fragment,shadowmap_pars_vertex:shadowmap_pars_vertex,shadowmap_vertex:shadowmap_vertex,shadowmask_pars_fragment:shadowmask_pars_fragment,skinbase_vertex:skinbase_vertex,skinning_pars_vertex:skinning_pars_vertex,skinning_vertex:skinning_vertex,skinnormal_vertex:skinnormal_vertex,specularmap_fragment:specularmap_fragment,specularmap_pars_fragment:specularmap_pars_fragment,tonemapping_fragment:tonemapping_fragment,tonemapping_pars_fragment:tonemapping_pars_fragment,uv_pars_fragment:uv_pars_fragment,uv_pars_vertex:uv_pars_vertex,uv_vertex:uv_vertex,uv2_pars_fragment:uv2_pars_fragment,uv2_pars_vertex:uv2_pars_vertex,uv2_vertex:uv2_vertex,worldpos_vertex:worldpos_vertex,cube_frag:cube_frag,cube_vert:cube_vert,depth_frag:depth_frag,depth_vert:depth_vert,distanceRGBA_frag:distanceRGBA_frag,distanceRGBA_vert:distanceRGBA_vert,equirect_frag:equirect_frag,equirect_vert:equirect_vert,linedashed_frag:linedashed_frag,linedashed_vert:linedashed_vert,meshbasic_frag:meshbasic_frag,meshbasic_vert:meshbasic_vert,meshlambert_frag:meshlambert_frag,meshlambert_vert:meshlambert_vert,meshphong_frag:meshphong_frag,meshphong_vert:meshphong_vert,meshphysical_frag:meshphysical_frag,meshphysical_vert:meshphysical_vert,normal_frag:normal_frag,normal_vert:normal_vert,points_frag:points_frag,points_vert:points_vert,shadow_frag:shadow_frag,shadow_vert:shadow_vert};var ShaderLib={basic:{uniforms:UniformsUtils.merge([UniformsLib.common,UniformsLib.aomap,UniformsLib.lightmap,UniformsLib.fog]),vertexShader:ShaderChunk.meshbasic_vert,fragmentShader:ShaderChunk.meshbasic_frag},lambert:{uniforms:UniformsUtils.merge([UniformsLib.common,UniformsLib.aomap,UniformsLib.lightmap,UniformsLib.emissivemap,UniformsLib.fog,UniformsLib.lights,{emissive:{value:new Color(0)}}]),vertexShader:ShaderChunk.meshlambert_vert,fragmentShader:ShaderChunk.meshlambert_frag},phong:{uniforms:UniformsUtils.merge([UniformsLib.common,UniformsLib.aomap,UniformsLib.lightmap,UniformsLib.emissivemap,UniformsLib.bumpmap,UniformsLib.normalmap,UniformsLib.displacementmap,UniformsLib.gradientmap,UniformsLib.fog,UniformsLib.lights,{emissive:{value:new Color(0)},specular:{value:new Color(1118481)},shininess:{value:30}
}]),vertexShader:ShaderChunk.meshphong_vert,fragmentShader:ShaderChunk.meshphong_frag},standard:{uniforms:UniformsUtils.merge([UniformsLib.common,UniformsLib.aomap,UniformsLib.lightmap,UniformsLib.emissivemap,UniformsLib.bumpmap,UniformsLib.normalmap,UniformsLib.displacementmap,UniformsLib.roughnessmap,UniformsLib.metalnessmap,UniformsLib.fog,UniformsLib.lights,{emissive:{value:new Color(0)},roughness:{value:.5},metalness:{value:.5},envMapIntensity:{value:1}}]),vertexShader:ShaderChunk.meshphysical_vert,fragmentShader:ShaderChunk.meshphysical_frag},points:{uniforms:UniformsUtils.merge([UniformsLib.points,UniformsLib.fog]),vertexShader:ShaderChunk.points_vert,fragmentShader:ShaderChunk.points_frag},dashed:{uniforms:UniformsUtils.merge([UniformsLib.common,UniformsLib.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:ShaderChunk.linedashed_vert,fragmentShader:ShaderChunk.linedashed_frag},depth:{uniforms:UniformsUtils.merge([UniformsLib.common,UniformsLib.displacementmap]),vertexShader:ShaderChunk.depth_vert,fragmentShader:ShaderChunk.depth_frag},normal:{uniforms:UniformsUtils.merge([UniformsLib.common,UniformsLib.bumpmap,UniformsLib.normalmap,UniformsLib.displacementmap,{opacity:{value:1}}]),vertexShader:ShaderChunk.normal_vert,fragmentShader:ShaderChunk.normal_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:ShaderChunk.cube_vert,fragmentShader:ShaderChunk.cube_frag},equirect:{uniforms:{tEquirect:{value:null},tFlip:{value:-1}},vertexShader:ShaderChunk.equirect_vert,fragmentShader:ShaderChunk.equirect_frag},distanceRGBA:{uniforms:{lightPos:{value:new Vector3}},vertexShader:ShaderChunk.distanceRGBA_vert,fragmentShader:ShaderChunk.distanceRGBA_frag}};ShaderLib.physical={uniforms:UniformsUtils.merge([ShaderLib.standard.uniforms,{clearCoat:{value:0},clearCoatRoughness:{value:0}}]),vertexShader:ShaderChunk.meshphysical_vert,fragmentShader:ShaderChunk.meshphysical_frag};function Box2(min,max){this.min=min!==undefined?min:new Vector2(+Infinity,+Infinity);this.max=max!==undefined?max:new Vector2(-Infinity,-Infinity)}Object.assign(Box2.prototype,{set:function(min,max){this.min.copy(min);this.max.copy(max);return this},setFromPoints:function(points){this.makeEmpty();for(var i=0,il=points.length;i<il;i++){this.expandByPoint(points[i])}return this},setFromCenterAndSize:function(){var v1=new Vector2;return function setFromCenterAndSize(center,size){var halfSize=v1.copy(size).multiplyScalar(.5);this.min.copy(center).sub(halfSize);this.max.copy(center).add(halfSize);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(box){this.min.copy(box.min);this.max.copy(box.max);return this},makeEmpty:function(){this.min.x=this.min.y=+Infinity;this.max.x=this.max.y=-Infinity;return this},isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y},getCenter:function(optionalTarget){var result=optionalTarget||new Vector2;return this.isEmpty()?result.set(0,0):result.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(optionalTarget){var result=optionalTarget||new Vector2;return this.isEmpty()?result.set(0,0):result.subVectors(this.max,this.min)},expandByPoint:function(point){this.min.min(point);this.max.max(point);return this},expandByVector:function(vector){this.min.sub(vector);this.max.add(vector);return this},expandByScalar:function(scalar){this.min.addScalar(-scalar);this.max.addScalar(scalar);return this},containsPoint:function(point){return point.x<this.min.x||point.x>this.max.x||point.y<this.min.y||point.y>this.max.y?false:true},containsBox:function(box){return this.min.x<=box.min.x&&box.max.x<=this.max.x&&this.min.y<=box.min.y&&box.max.y<=this.max.y},getParameter:function(point,optionalTarget){var result=optionalTarget||new Vector2;return result.set((point.x-this.min.x)/(this.max.x-this.min.x),(point.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(box){return box.max.x<this.min.x||box.min.x>this.max.x||box.max.y<this.min.y||box.min.y>this.max.y?false:true},clampPoint:function(point,optionalTarget){var result=optionalTarget||new Vector2;return result.copy(point).clamp(this.min,this.max)},distanceToPoint:function(){var v1=new Vector2;return function distanceToPoint(point){var clampedPoint=v1.copy(point).clamp(this.min,this.max);return clampedPoint.sub(point).length()}}(),intersect:function(box){this.min.max(box.min);this.max.min(box.max);return this},union:function(box){this.min.min(box.min);this.max.max(box.max);return this},translate:function(offset){this.min.add(offset);this.max.add(offset);return this},equals:function(box){return box.min.equals(this.min)&&box.max.equals(this.max)}});function LensFlarePlugin(renderer,flares){var gl=renderer.context;var state=renderer.state;var vertexBuffer,elementBuffer;var shader,program,attributes,uniforms;var tempTexture,occlusionTexture;function init(){var vertices=new Float32Array([-1,-1,0,0,1,-1,1,0,1,1,1,1,-1,1,0,1]);var faces=new Uint16Array([0,1,2,0,2,3]);vertexBuffer=gl.createBuffer();elementBuffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,elementBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,faces,gl.STATIC_DRAW);tempTexture=gl.createTexture();occlusionTexture=gl.createTexture();state.bindTexture(gl.TEXTURE_2D,tempTexture);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGB,16,16,0,gl.RGB,gl.UNSIGNED_BYTE,null);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST);state.bindTexture(gl.TEXTURE_2D,occlusionTexture);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,16,16,0,gl.RGBA,gl.UNSIGNED_BYTE,null);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST);shader={vertexShader:["uniform lowp int renderType;","uniform vec3 screenPosition;","uniform vec2 scale;","uniform float rotation;","uniform sampler2D occlusionMap;","attribute vec2 position;","attribute vec2 uv;","varying vec2 vUV;","varying float vVisibility;","void main() {","vUV = uv;","vec2 pos = position;","if ( renderType == 2 ) {","vec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );","visibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );","visibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );","visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );","visibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );","visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );","visibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );","visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );","visibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );","vVisibility = visibility.r / 9.0;","vVisibility *= 1.0 - visibility.g / 9.0;","vVisibility *= visibility.b / 9.0;","vVisibility *= 1.0 - visibility.a / 9.0;","pos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;","pos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;","}","gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );","}"].join("\n"),fragmentShader:["uniform lowp int renderType;","uniform sampler2D map;","uniform float opacity;","uniform vec3 color;","varying vec2 vUV;","varying float vVisibility;","void main() {","if ( renderType == 0 ) {","gl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );","} else if ( renderType == 1 ) {","gl_FragColor = texture2D( map, vUV );","} else {","vec4 texture = texture2D( map, vUV );","texture.a *= opacity * vVisibility;","gl_FragColor = texture;","gl_FragColor.rgb *= color;","}","}"].join("\n")};program=createProgram(shader);attributes={vertex:gl.getAttribLocation(program,"position"),uv:gl.getAttribLocation(program,"uv")};uniforms={renderType:gl.getUniformLocation(program,"renderType"),map:gl.getUniformLocation(program,"map"),occlusionMap:gl.getUniformLocation(program,"occlusionMap"),opacity:gl.getUniformLocation(program,"opacity"),color:gl.getUniformLocation(program,"color"),scale:gl.getUniformLocation(program,"scale"),rotation:gl.getUniformLocation(program,"rotation"),screenPosition:gl.getUniformLocation(program,"screenPosition")}}this.render=function(scene,camera,viewport){if(flares.length===0)return;var tempPosition=new Vector3;var invAspect=viewport.w/viewport.z,halfViewportWidth=viewport.z*.5,halfViewportHeight=viewport.w*.5;var size=16/viewport.w,scale=new Vector2(size*invAspect,size);var screenPosition=new Vector3(1,1,0),screenPositionPixels=new Vector2(1,1);var validArea=new Box2;validArea.min.set(viewport.x,viewport.y);validArea.max.set(viewport.x+(viewport.z-16),viewport.y+(viewport.w-16));if(program===undefined){init()}gl.useProgram(program);state.initAttributes();state.enableAttribute(attributes.vertex);state.enableAttribute(attributes.uv);state.disableUnusedAttributes();gl.uniform1i(uniforms.occlusionMap,0);gl.uniform1i(uniforms.map,1);gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);gl.vertexAttribPointer(attributes.vertex,2,gl.FLOAT,false,2*8,0);gl.vertexAttribPointer(attributes.uv,2,gl.FLOAT,false,2*8,8);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,elementBuffer);state.disable(gl.CULL_FACE);state.buffers.depth.setMask(false);for(var i=0,l=flares.length;i<l;i++){size=16/viewport.w;scale.set(size*invAspect,size);var flare=flares[i];tempPosition.set(flare.matrixWorld.elements[12],flare.matrixWorld.elements[13],flare.matrixWorld.elements[14]);tempPosition.applyMatrix4(camera.matrixWorldInverse);tempPosition.applyMatrix4(camera.projectionMatrix);screenPosition.copy(tempPosition);screenPositionPixels.x=viewport.x+screenPosition.x*halfViewportWidth+halfViewportWidth-8;screenPositionPixels.y=viewport.y+screenPosition.y*halfViewportHeight+halfViewportHeight-8;if(validArea.containsPoint(screenPositionPixels)===true){state.activeTexture(gl.TEXTURE0);state.bindTexture(gl.TEXTURE_2D,null);state.activeTexture(gl.TEXTURE1);state.bindTexture(gl.TEXTURE_2D,tempTexture);gl.copyTexImage2D(gl.TEXTURE_2D,0,gl.RGB,screenPositionPixels.x,screenPositionPixels.y,16,16,0);gl.uniform1i(uniforms.renderType,0);gl.uniform2f(uniforms.scale,scale.x,scale.y);gl.uniform3f(uniforms.screenPosition,screenPosition.x,screenPosition.y,screenPosition.z);state.disable(gl.BLEND);state.enable(gl.DEPTH_TEST);gl.drawElements(gl.TRIANGLES,6,gl.UNSIGNED_SHORT,0);state.activeTexture(gl.TEXTURE0);state.bindTexture(gl.TEXTURE_2D,occlusionTexture);gl.copyTexImage2D(gl.TEXTURE_2D,0,gl.RGBA,screenPositionPixels.x,screenPositionPixels.y,16,16,0);gl.uniform1i(uniforms.renderType,1);state.disable(gl.DEPTH_TEST);state.activeTexture(gl.TEXTURE1);state.bindTexture(gl.TEXTURE_2D,tempTexture);gl.drawElements(gl.TRIANGLES,6,gl.UNSIGNED_SHORT,0);flare.positionScreen.copy(screenPosition);if(flare.customUpdateCallback){flare.customUpdateCallback(flare)}else{flare.updateLensFlares()}gl.uniform1i(uniforms.renderType,2);state.enable(gl.BLEND);for(var j=0,jl=flare.lensFlares.length;j<jl;j++){var sprite=flare.lensFlares[j];if(sprite.opacity>.001&&sprite.scale>.001){screenPosition.x=sprite.x;screenPosition.y=sprite.y;screenPosition.z=sprite.z;size=sprite.size*sprite.scale/viewport.w;scale.x=size*invAspect;scale.y=size;gl.uniform3f(uniforms.screenPosition,screenPosition.x,screenPosition.y,screenPosition.z);gl.uniform2f(uniforms.scale,scale.x,scale.y);gl.uniform1f(uniforms.rotation,sprite.rotation);gl.uniform1f(uniforms.opacity,sprite.opacity);gl.uniform3f(uniforms.color,sprite.color.r,sprite.color.g,sprite.color.b);state.setBlending(sprite.blending,sprite.blendEquation,sprite.blendSrc,sprite.blendDst);renderer.setTexture2D(sprite.texture,1);gl.drawElements(gl.TRIANGLES,6,gl.UNSIGNED_SHORT,0)}}}}state.enable(gl.CULL_FACE);state.enable(gl.DEPTH_TEST);state.buffers.depth.setMask(true);renderer.resetGLState()};function createProgram(shader){var program=gl.createProgram();var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);var vertexShader=gl.createShader(gl.VERTEX_SHADER);var prefix="precision "+renderer.getPrecision()+" float;\n";gl.shaderSource(fragmentShader,prefix+shader.fragmentShader);gl.shaderSource(vertexShader,prefix+shader.vertexShader);gl.compileShader(fragmentShader);gl.compileShader(vertexShader);gl.attachShader(program,fragmentShader);gl.attachShader(program,vertexShader);gl.linkProgram(program);return program}}function SpritePlugin(renderer,sprites){var gl=renderer.context;var state=renderer.state;var vertexBuffer,elementBuffer;var program,attributes,uniforms;var texture;var spritePosition=new Vector3;var spriteRotation=new Quaternion;var spriteScale=new Vector3;function init(){var vertices=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,.5,.5,1,1,-.5,.5,0,1]);var faces=new Uint16Array([0,1,2,0,2,3]);vertexBuffer=gl.createBuffer();elementBuffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,elementBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,faces,gl.STATIC_DRAW);program=createProgram();attributes={position:gl.getAttribLocation(program,"position"),uv:gl.getAttribLocation(program,"uv")};uniforms={uvOffset:gl.getUniformLocation(program,"uvOffset"),uvScale:gl.getUniformLocation(program,"uvScale"),rotation:gl.getUniformLocation(program,"rotation"),scale:gl.getUniformLocation(program,"scale"),color:gl.getUniformLocation(program,"color"),map:gl.getUniformLocation(program,"map"),opacity:gl.getUniformLocation(program,"opacity"),modelViewMatrix:gl.getUniformLocation(program,"modelViewMatrix"),projectionMatrix:gl.getUniformLocation(program,"projectionMatrix"),fogType:gl.getUniformLocation(program,"fogType"),fogDensity:gl.getUniformLocation(program,"fogDensity"),fogNear:gl.getUniformLocation(program,"fogNear"),fogFar:gl.getUniformLocation(program,"fogFar"),fogColor:gl.getUniformLocation(program,"fogColor"),alphaTest:gl.getUniformLocation(program,"alphaTest")};var canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");canvas.width=8;canvas.height=8;var context=canvas.getContext("2d");context.fillStyle="white";context.fillRect(0,0,8,8);texture=new Texture(canvas);texture.needsUpdate=true}this.render=function(scene,camera){if(sprites.length===0)return;if(program===undefined){init()}gl.useProgram(program);state.initAttributes();state.enableAttribute(attributes.position);state.enableAttribute(attributes.uv);state.disableUnusedAttributes();state.disable(gl.CULL_FACE);state.enable(gl.BLEND);gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);gl.vertexAttribPointer(attributes.position,2,gl.FLOAT,false,2*8,0);gl.vertexAttribPointer(attributes.uv,2,gl.FLOAT,false,2*8,8);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,elementBuffer);gl.uniformMatrix4fv(uniforms.projectionMatrix,false,camera.projectionMatrix.elements);state.activeTexture(gl.TEXTURE0);gl.uniform1i(uniforms.map,0);var oldFogType=0;var sceneFogType=0;var fog=scene.fog;if(fog){gl.uniform3f(uniforms.fogColor,fog.color.r,fog.color.g,fog.color.b);if(fog.isFog){gl.uniform1f(uniforms.fogNear,fog.near);gl.uniform1f(uniforms.fogFar,fog.far);gl.uniform1i(uniforms.fogType,1);oldFogType=1;sceneFogType=1}else if(fog.isFogExp2){gl.uniform1f(uniforms.fogDensity,fog.density);gl.uniform1i(uniforms.fogType,2);oldFogType=2;sceneFogType=2}}else{gl.uniform1i(uniforms.fogType,0);oldFogType=0;sceneFogType=0}for(var i=0,l=sprites.length;i<l;i++){var sprite=sprites[i];sprite.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse,sprite.matrixWorld);sprite.z=-sprite.modelViewMatrix.elements[14]}sprites.sort(painterSortStable);var scale=[];for(var i=0,l=sprites.length;i<l;i++){var sprite=sprites[i];var material=sprite.material;if(material.visible===false)continue;sprite.onBeforeRender(renderer,scene,camera,undefined,material,undefined);gl.uniform1f(uniforms.alphaTest,material.alphaTest);gl.uniformMatrix4fv(uniforms.modelViewMatrix,false,sprite.modelViewMatrix.elements);sprite.matrixWorld.decompose(spritePosition,spriteRotation,spriteScale);scale[0]=spriteScale.x;scale[1]=spriteScale.y;var fogType=0;if(scene.fog&&material.fog){fogType=sceneFogType}if(oldFogType!==fogType){gl.uniform1i(uniforms.fogType,fogType);oldFogType=fogType}if(material.map!==null){gl.uniform2f(uniforms.uvOffset,material.map.offset.x,material.map.offset.y);gl.uniform2f(uniforms.uvScale,material.map.repeat.x,material.map.repeat.y)}else{gl.uniform2f(uniforms.uvOffset,0,0);gl.uniform2f(uniforms.uvScale,1,1)}gl.uniform1f(uniforms.opacity,material.opacity);gl.uniform3f(uniforms.color,material.color.r,material.color.g,material.color.b);gl.uniform1f(uniforms.rotation,material.rotation);gl.uniform2fv(uniforms.scale,scale);state.setBlending(material.blending,material.blendEquation,material.blendSrc,material.blendDst,material.blendEquationAlpha,material.blendSrcAlpha,material.blendDstAlpha,material.premultipliedAlpha);state.buffers.depth.setTest(material.depthTest);state.buffers.depth.setMask(material.depthWrite);if(material.map){renderer.setTexture2D(material.map,0)}else{renderer.setTexture2D(texture,0)}gl.drawElements(gl.TRIANGLES,6,gl.UNSIGNED_SHORT,0);sprite.onAfterRender(renderer,scene,camera,undefined,material,undefined)}state.enable(gl.CULL_FACE);renderer.resetGLState()};function createProgram(){var program=gl.createProgram();var vertexShader=gl.createShader(gl.VERTEX_SHADER);var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(vertexShader,["precision "+renderer.getPrecision()+" float;","#define SHADER_NAME "+"SpriteMaterial","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform float rotation;","uniform vec2 scale;","uniform vec2 uvOffset;","uniform vec2 uvScale;","attribute vec2 position;","attribute vec2 uv;","varying vec2 vUV;","void main() {","vUV = uvOffset + uv * uvScale;","vec2 alignedPosition = position * scale;","vec2 rotatedPosition;","rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;","rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;","vec4 finalPosition;","finalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );","finalPosition.xy += rotatedPosition;","finalPosition = projectionMatrix * finalPosition;","gl_Position = finalPosition;","}"].join("\n"));gl.shaderSource(fragmentShader,["precision "+renderer.getPrecision()+" float;","#define SHADER_NAME "+"SpriteMaterial","uniform vec3 color;","uniform sampler2D map;","uniform float opacity;","uniform int fogType;","uniform vec3 fogColor;","uniform float fogDensity;","uniform float fogNear;","uniform float fogFar;","uniform float alphaTest;","varying vec2 vUV;","void main() {","vec4 texture = texture2D( map, vUV );","if ( texture.a < alphaTest ) discard;","gl_FragColor = vec4( color * texture.xyz, texture.a * opacity );","if ( fogType > 0 ) {","float depth = gl_FragCoord.z / gl_FragCoord.w;","float fogFactor = 0.0;","if ( fogType == 1 ) {","fogFactor = smoothstep( fogNear, fogFar, depth );","} else {","const float LOG2 = 1.442695;","fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );","fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );","}","gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );","}","}"].join("\n"));gl.compileShader(vertexShader);gl.compileShader(fragmentShader);gl.attachShader(program,vertexShader);gl.attachShader(program,fragmentShader);gl.linkProgram(program);return program}function painterSortStable(a,b){if(a.renderOrder!==b.renderOrder){return a.renderOrder-b.renderOrder}else if(a.z!==b.z){return b.z-a.z}else{return b.id-a.id}}}var materialId=0;function Material(){Object.defineProperty(this,"id",{value:materialId++});this.uuid=_Math.generateUUID();this.name="";this.type="Material";this.fog=true;this.lights=true;this.blending=NormalBlending;this.side=FrontSide;this.shading=SmoothShading;this.vertexColors=NoColors;this.opacity=1;this.transparent=false;this.blendSrc=SrcAlphaFactor;this.blendDst=OneMinusSrcAlphaFactor;this.blendEquation=AddEquation;this.blendSrcAlpha=null;this.blendDstAlpha=null;this.blendEquationAlpha=null;this.depthFunc=LessEqualDepth;this.depthTest=true;this.depthWrite=true;this.clippingPlanes=null;this.clipIntersection=false;this.clipShadows=false;this.colorWrite=true;this.precision=null;this.polygonOffset=false;this.polygonOffsetFactor=0;this.polygonOffsetUnits=0;this.dithering=false;this.alphaTest=0;this.premultipliedAlpha=false;this.overdraw=0;this.visible=true;this.needsUpdate=true}Object.assign(Material.prototype,EventDispatcher.prototype,{isMaterial:true,onBeforeCompile:function(){},setValues:function(values){if(values===undefined)return;for(var key in values){var newValue=values[key];if(newValue===undefined){console.warn("THREE.Material: '"+key+"' parameter is undefined.");continue}var currentValue=this[key];if(currentValue===undefined){console.warn("THREE."+this.type+": '"+key+"' is not a property of this material.");continue}if(currentValue&¤tValue.isColor){currentValue.set(newValue)}else if(currentValue&¤tValue.isVector3&&(newValue&&newValue.isVector3)){currentValue.copy(newValue)}else if(key==="overdraw"){this[key]=Number(newValue)}else{this[key]=newValue}}},toJSON:function(meta){var isRoot=meta===undefined;if(isRoot){meta={textures:{},images:{}}}var data={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};data.uuid=this.uuid;data.type=this.type;if(this.name!=="")data.name=this.name;if(this.color&&this.color.isColor)data.color=this.color.getHex();if(this.roughness!==undefined)data.roughness=this.roughness;if(this.metalness!==undefined)data.metalness=this.metalness;if(this.emissive&&this.emissive.isColor)data.emissive=this.emissive.getHex();if(this.specular&&this.specular.isColor)data.specular=this.specular.getHex();if(this.shininess!==undefined)data.shininess=this.shininess;if(this.clearCoat!==undefined)data.clearCoat=this.clearCoat;if(this.clearCoatRoughness!==undefined)data.clearCoatRoughness=this.clearCoatRoughness;if(this.map&&this.map.isTexture)data.map=this.map.toJSON(meta).uuid;if(this.alphaMap&&this.alphaMap.isTexture)data.alphaMap=this.alphaMap.toJSON(meta).uuid;if(this.lightMap&&this.lightMap.isTexture)data.lightMap=this.lightMap.toJSON(meta).uuid;if(this.bumpMap&&this.bumpMap.isTexture){data.bumpMap=this.bumpMap.toJSON(meta).uuid;data.bumpScale=this.bumpScale}if(this.normalMap&&this.normalMap.isTexture){data.normalMap=this.normalMap.toJSON(meta).uuid;data.normalScale=this.normalScale.toArray()}if(this.displacementMap&&this.displacementMap.isTexture){data.displacementMap=this.displacementMap.toJSON(meta).uuid;data.displacementScale=this.displacementScale;data.displacementBias=this.displacementBias}if(this.roughnessMap&&this.roughnessMap.isTexture)data.roughnessMap=this.roughnessMap.toJSON(meta).uuid;if(this.metalnessMap&&this.metalnessMap.isTexture)data.metalnessMap=this.metalnessMap.toJSON(meta).uuid;if(this.emissiveMap&&this.emissiveMap.isTexture)data.emissiveMap=this.emissiveMap.toJSON(meta).uuid;if(this.specularMap&&this.specularMap.isTexture)data.specularMap=this.specularMap.toJSON(meta).uuid;if(this.envMap&&this.envMap.isTexture){data.envMap=this.envMap.toJSON(meta).uuid;data.reflectivity=this.reflectivity}if(this.gradientMap&&this.gradientMap.isTexture){data.gradientMap=this.gradientMap.toJSON(meta).uuid}if(this.size!==undefined)data.size=this.size;if(this.sizeAttenuation!==undefined)data.sizeAttenuation=this.sizeAttenuation;if(this.blending!==NormalBlending)data.blending=this.blending;if(this.shading!==SmoothShading)data.shading=this.shading;if(this.side!==FrontSide)data.side=this.side;if(this.vertexColors!==NoColors)data.vertexColors=this.vertexColors;if(this.opacity<1)data.opacity=this.opacity;if(this.transparent===true)data.transparent=this.transparent;data.depthFunc=this.depthFunc;data.depthTest=this.depthTest;data.depthWrite=this.depthWrite;if(this.alphaTest>0)data.alphaTest=this.alphaTest;if(this.premultipliedAlpha===true)data.premultipliedAlpha=this.premultipliedAlpha;if(this.wireframe===true)data.wireframe=this.wireframe;if(this.wireframeLinewidth>1)data.wireframeLinewidth=this.wireframeLinewidth;if(this.wireframeLinecap!=="round")data.wireframeLinecap=this.wireframeLinecap;if(this.wireframeLinejoin!=="round")data.wireframeLinejoin=this.wireframeLinejoin;data.skinning=this.skinning;data.morphTargets=this.morphTargets;data.dithering=this.dithering;function extractFromCache(cache){var values=[];for(var key in cache){var data=cache[key];delete data.metadata;values.push(data)}return values}if(isRoot){var textures=extractFromCache(meta.textures);var images=extractFromCache(meta.images);if(textures.length>0)data.textures=textures;if(images.length>0)data.images=images}return data},clone:function(){return(new this.constructor).copy(this)},copy:function(source){this.name=source.name;this.fog=source.fog;this.lights=source.lights;this.blending=source.blending;this.side=source.side;this.shading=source.shading;this.vertexColors=source.vertexColors;this.opacity=source.opacity;this.transparent=source.transparent;this.blendSrc=source.blendSrc;this.blendDst=source.blendDst;this.blendEquation=source.blendEquation;this.blendSrcAlpha=source.blendSrcAlpha;this.blendDstAlpha=source.blendDstAlpha;this.blendEquationAlpha=source.blendEquationAlpha;this.depthFunc=source.depthFunc;this.depthTest=source.depthTest;this.depthWrite=source.depthWrite;this.colorWrite=source.colorWrite;this.precision=source.precision;this.polygonOffset=source.polygonOffset;this.polygonOffsetFactor=source.polygonOffsetFactor;this.polygonOffsetUnits=source.polygonOffsetUnits;this.dithering=source.dithering;this.alphaTest=source.alphaTest;this.premultipliedAlpha=source.premultipliedAlpha;this.overdraw=source.overdraw;this.visible=source.visible;this.clipShadows=source.clipShadows;this.clipIntersection=source.clipIntersection;var srcPlanes=source.clippingPlanes,dstPlanes=null;if(srcPlanes!==null){var n=srcPlanes.length;dstPlanes=new Array(n);for(var i=0;i!==n;++i)dstPlanes[i]=srcPlanes[i].clone()}this.clippingPlanes=dstPlanes;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});function ShaderMaterial(parameters){Material.call(this);this.type="ShaderMaterial";this.defines={};this.uniforms={};this.vertexShader="void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}";this.fragmentShader="void main() {\n gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}";this.linewidth=1;this.wireframe=false;this.wireframeLinewidth=1;this.fog=false;this.lights=false;this.clipping=false;this.skinning=false;this.morphTargets=false;this.morphNormals=false;this.extensions={derivatives:false,fragDepth:false,drawBuffers:false,shaderTextureLOD:false};this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]};this.index0AttributeName=undefined;if(parameters!==undefined){if(parameters.attributes!==undefined){console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.")}this.setValues(parameters)}}ShaderMaterial.prototype=Object.create(Material.prototype);ShaderMaterial.prototype.constructor=ShaderMaterial;ShaderMaterial.prototype.isShaderMaterial=true;ShaderMaterial.prototype.copy=function(source){Material.prototype.copy.call(this,source);this.fragmentShader=source.fragmentShader;this.vertexShader=source.vertexShader;this.uniforms=UniformsUtils.clone(source.uniforms);this.defines=source.defines;this.wireframe=source.wireframe;this.wireframeLinewidth=source.wireframeLinewidth;this.lights=source.lights;this.clipping=source.clipping;this.skinning=source.skinning;this.morphTargets=source.morphTargets;this.morphNormals=source.morphNormals;this.extensions=source.extensions;return this};ShaderMaterial.prototype.toJSON=function(meta){var data=Material.prototype.toJSON.call(this,meta);data.uniforms=this.uniforms;data.vertexShader=this.vertexShader;data.fragmentShader=this.fragmentShader;return data};function MeshDepthMaterial(parameters){Material.call(this);this.type="MeshDepthMaterial";this.depthPacking=BasicDepthPacking;this.skinning=false;this.morphTargets=false;this.map=null;this.alphaMap=null;this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=false;this.wireframeLinewidth=1;this.fog=false;this.lights=false;this.setValues(parameters)}MeshDepthMaterial.prototype=Object.create(Material.prototype);MeshDepthMaterial.prototype.constructor=MeshDepthMaterial;MeshDepthMaterial.prototype.isMeshDepthMaterial=true;MeshDepthMaterial.prototype.copy=function(source){Material.prototype.copy.call(this,source);this.depthPacking=source.depthPacking;this.skinning=source.skinning;this.morphTargets=source.morphTargets;this.map=source.map;this.alphaMap=source.alphaMap;this.displacementMap=source.displacementMap;this.displacementScale=source.displacementScale;this.displacementBias=source.displacementBias;this.wireframe=source.wireframe;this.wireframeLinewidth=source.wireframeLinewidth;return this};function Box3(min,max){this.min=min!==undefined?min:new Vector3(+Infinity,+Infinity,+Infinity);this.max=max!==undefined?max:new Vector3(-Infinity,-Infinity,-Infinity)}Object.assign(Box3.prototype,{isBox3:true,set:function(min,max){this.min.copy(min);this.max.copy(max);return this},setFromArray:function(array){var minX=+Infinity;var minY=+Infinity;var minZ=+Infinity;var maxX=-Infinity;var maxY=-Infinity;var maxZ=-Infinity;for(var i=0,l=array.length;i<l;i+=3){var x=array[i];var y=array[i+1];var z=array[i+2];if(x<minX)minX=x;if(y<minY)minY=y;if(z<minZ)minZ=z;if(x>maxX)maxX=x;if(y>maxY)maxY=y;if(z>maxZ)maxZ=z}this.min.set(minX,minY,minZ);this.max.set(maxX,maxY,maxZ);return this},setFromBufferAttribute:function(attribute){var minX=+Infinity;var minY=+Infinity;var minZ=+Infinity;var maxX=-Infinity;var maxY=-Infinity;var maxZ=-Infinity;for(var i=0,l=attribute.count;i<l;i++){var x=attribute.getX(i);var y=attribute.getY(i);var z=attribute.getZ(i);if(x<minX)minX=x;if(y<minY)minY=y;if(z<minZ)minZ=z;if(x>maxX)maxX=x;if(y>maxY)maxY=y;if(z>maxZ)maxZ=z}this.min.set(minX,minY,minZ);this.max.set(maxX,maxY,maxZ);return this},setFromPoints:function(points){this.makeEmpty();for(var i=0,il=points.length;i<il;i++){this.expandByPoint(points[i])}return this},setFromCenterAndSize:function(){var v1=new Vector3;return function setFromCenterAndSize(center,size){var halfSize=v1.copy(size).multiplyScalar(.5);this.min.copy(center).sub(halfSize);this.max.copy(center).add(halfSize);return this}}(),setFromObject:function(object){this.makeEmpty();return this.expandByObject(object)},clone:function(){return(new this.constructor).copy(this)},copy:function(box){this.min.copy(box.min);this.max.copy(box.max);return this},makeEmpty:function(){this.min.x=this.min.y=this.min.z=+Infinity;this.max.x=this.max.y=this.max.z=-Infinity;return this},isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z},getCenter:function(optionalTarget){var result=optionalTarget||new Vector3;return this.isEmpty()?result.set(0,0,0):result.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(optionalTarget){var result=optionalTarget||new Vector3;return this.isEmpty()?result.set(0,0,0):result.subVectors(this.max,this.min)},expandByPoint:function(point){this.min.min(point);this.max.max(point);return this},expandByVector:function(vector){this.min.sub(vector);this.max.add(vector);return this},expandByScalar:function(scalar){this.min.addScalar(-scalar);this.max.addScalar(scalar);return this},expandByObject:function(){var v1=new Vector3;return function expandByObject(object){var scope=this;object.updateMatrixWorld(true);object.traverse(function(node){var i,l;var geometry=node.geometry;if(geometry!==undefined){if(geometry.isGeometry){var vertices=geometry.vertices;for(i=0,l=vertices.length;i<l;i++){v1.copy(vertices[i]);v1.applyMatrix4(node.matrixWorld);
scope.expandByPoint(v1)}}else if(geometry.isBufferGeometry){var attribute=geometry.attributes.position;if(attribute!==undefined){for(i=0,l=attribute.count;i<l;i++){v1.fromBufferAttribute(attribute,i).applyMatrix4(node.matrixWorld);scope.expandByPoint(v1)}}}}});return this}}(),containsPoint:function(point){return point.x<this.min.x||point.x>this.max.x||point.y<this.min.y||point.y>this.max.y||point.z<this.min.z||point.z>this.max.z?false:true},containsBox:function(box){return this.min.x<=box.min.x&&box.max.x<=this.max.x&&this.min.y<=box.min.y&&box.max.y<=this.max.y&&this.min.z<=box.min.z&&box.max.z<=this.max.z},getParameter:function(point,optionalTarget){var result=optionalTarget||new Vector3;return result.set((point.x-this.min.x)/(this.max.x-this.min.x),(point.y-this.min.y)/(this.max.y-this.min.y),(point.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(box){return box.max.x<this.min.x||box.min.x>this.max.x||box.max.y<this.min.y||box.min.y>this.max.y||box.max.z<this.min.z||box.min.z>this.max.z?false:true},intersectsSphere:function(){var closestPoint=new Vector3;return function intersectsSphere(sphere){this.clampPoint(sphere.center,closestPoint);return closestPoint.distanceToSquared(sphere.center)<=sphere.radius*sphere.radius}}(),intersectsPlane:function(plane){var min,max;if(plane.normal.x>0){min=plane.normal.x*this.min.x;max=plane.normal.x*this.max.x}else{min=plane.normal.x*this.max.x;max=plane.normal.x*this.min.x}if(plane.normal.y>0){min+=plane.normal.y*this.min.y;max+=plane.normal.y*this.max.y}else{min+=plane.normal.y*this.max.y;max+=plane.normal.y*this.min.y}if(plane.normal.z>0){min+=plane.normal.z*this.min.z;max+=plane.normal.z*this.max.z}else{min+=plane.normal.z*this.max.z;max+=plane.normal.z*this.min.z}return min<=plane.constant&&max>=plane.constant},clampPoint:function(point,optionalTarget){var result=optionalTarget||new Vector3;return result.copy(point).clamp(this.min,this.max)},distanceToPoint:function(){var v1=new Vector3;return function distanceToPoint(point){var clampedPoint=v1.copy(point).clamp(this.min,this.max);return clampedPoint.sub(point).length()}}(),getBoundingSphere:function(){var v1=new Vector3;return function getBoundingSphere(optionalTarget){var result=optionalTarget||new Sphere;this.getCenter(result.center);result.radius=this.getSize(v1).length()*.5;return result}}(),intersect:function(box){this.min.max(box.min);this.max.min(box.max);if(this.isEmpty())this.makeEmpty();return this},union:function(box){this.min.min(box.min);this.max.max(box.max);return this},applyMatrix4:function(){var points=[new Vector3,new Vector3,new Vector3,new Vector3,new Vector3,new Vector3,new Vector3,new Vector3];return function applyMatrix4(matrix){if(this.isEmpty())return this;points[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(matrix);points[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(matrix);points[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(matrix);points[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(matrix);points[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(matrix);points[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(matrix);points[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(matrix);points[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(matrix);this.setFromPoints(points);return this}}(),translate:function(offset){this.min.add(offset);this.max.add(offset);return this},equals:function(box){return box.min.equals(this.min)&&box.max.equals(this.max)}});function Sphere(center,radius){this.center=center!==undefined?center:new Vector3;this.radius=radius!==undefined?radius:0}Object.assign(Sphere.prototype,{set:function(center,radius){this.center.copy(center);this.radius=radius;return this},setFromPoints:function(){var box=new Box3;return function setFromPoints(points,optionalCenter){var center=this.center;if(optionalCenter!==undefined){center.copy(optionalCenter)}else{box.setFromPoints(points).getCenter(center)}var maxRadiusSq=0;for(var i=0,il=points.length;i<il;i++){maxRadiusSq=Math.max(maxRadiusSq,center.distanceToSquared(points[i]))}this.radius=Math.sqrt(maxRadiusSq);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(sphere){this.center.copy(sphere.center);this.radius=sphere.radius;return this},empty:function(){return this.radius<=0},containsPoint:function(point){return point.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(point){return point.distanceTo(this.center)-this.radius},intersectsSphere:function(sphere){var radiusSum=this.radius+sphere.radius;return sphere.center.distanceToSquared(this.center)<=radiusSum*radiusSum},intersectsBox:function(box){return box.intersectsSphere(this)},intersectsPlane:function(plane){return Math.abs(this.center.dot(plane.normal)-plane.constant)<=this.radius},clampPoint:function(point,optionalTarget){var deltaLengthSq=this.center.distanceToSquared(point);var result=optionalTarget||new Vector3;result.copy(point);if(deltaLengthSq>this.radius*this.radius){result.sub(this.center).normalize();result.multiplyScalar(this.radius).add(this.center)}return result},getBoundingBox:function(optionalTarget){var box=optionalTarget||new Box3;box.set(this.center,this.center);box.expandByScalar(this.radius);return box},applyMatrix4:function(matrix){this.center.applyMatrix4(matrix);this.radius=this.radius*matrix.getMaxScaleOnAxis();return this},translate:function(offset){this.center.add(offset);return this},equals:function(sphere){return sphere.center.equals(this.center)&&sphere.radius===this.radius}});function Matrix3(){this.elements=[1,0,0,0,1,0,0,0,1];if(arguments.length>0){console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}}Object.assign(Matrix3.prototype,{isMatrix3:true,set:function(n11,n12,n13,n21,n22,n23,n31,n32,n33){var te=this.elements;te[0]=n11;te[1]=n21;te[2]=n31;te[3]=n12;te[4]=n22;te[5]=n32;te[6]=n13;te[7]=n23;te[8]=n33;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(m){var te=this.elements;var me=m.elements;te[0]=me[0];te[1]=me[1];te[2]=me[2];te[3]=me[3];te[4]=me[4];te[5]=me[5];te[6]=me[6];te[7]=me[7];te[8]=me[8];return this},setFromMatrix4:function(m){var me=m.elements;this.set(me[0],me[4],me[8],me[1],me[5],me[9],me[2],me[6],me[10]);return this},applyToBufferAttribute:function(){var v1=new Vector3;return function applyToBufferAttribute(attribute){for(var i=0,l=attribute.count;i<l;i++){v1.x=attribute.getX(i);v1.y=attribute.getY(i);v1.z=attribute.getZ(i);v1.applyMatrix3(this);attribute.setXYZ(i,v1.x,v1.y,v1.z)}return attribute}}(),multiply:function(m){return this.multiplyMatrices(this,m)},premultiply:function(m){return this.multiplyMatrices(m,this)},multiplyMatrices:function(a,b){var ae=a.elements;var be=b.elements;var te=this.elements;var a11=ae[0],a12=ae[3],a13=ae[6];var a21=ae[1],a22=ae[4],a23=ae[7];var a31=ae[2],a32=ae[5],a33=ae[8];var b11=be[0],b12=be[3],b13=be[6];var b21=be[1],b22=be[4],b23=be[7];var b31=be[2],b32=be[5],b33=be[8];te[0]=a11*b11+a12*b21+a13*b31;te[3]=a11*b12+a12*b22+a13*b32;te[6]=a11*b13+a12*b23+a13*b33;te[1]=a21*b11+a22*b21+a23*b31;te[4]=a21*b12+a22*b22+a23*b32;te[7]=a21*b13+a22*b23+a23*b33;te[2]=a31*b11+a32*b21+a33*b31;te[5]=a31*b12+a32*b22+a33*b32;te[8]=a31*b13+a32*b23+a33*b33;return this},multiplyScalar:function(s){var te=this.elements;te[0]*=s;te[3]*=s;te[6]*=s;te[1]*=s;te[4]*=s;te[7]*=s;te[2]*=s;te[5]*=s;te[8]*=s;return this},determinant:function(){var te=this.elements;var a=te[0],b=te[1],c=te[2],d=te[3],e=te[4],f=te[5],g=te[6],h=te[7],i=te[8];return a*e*i-a*f*h-b*d*i+b*f*g+c*d*h-c*e*g},getInverse:function(matrix,throwOnDegenerate){if(matrix&&matrix.isMatrix4){console.error("THREE.Matrix3.getInverse no longer takes a Matrix4 argument.")}var me=matrix.elements,te=this.elements,n11=me[0],n21=me[1],n31=me[2],n12=me[3],n22=me[4],n32=me[5],n13=me[6],n23=me[7],n33=me[8],t11=n33*n22-n32*n23,t12=n32*n13-n33*n12,t13=n23*n12-n22*n13,det=n11*t11+n21*t12+n31*t13;if(det===0){var msg="THREE.Matrix3.getInverse(): can't invert matrix, determinant is 0";if(throwOnDegenerate===true){throw new Error(msg)}else{console.warn(msg)}return this.identity()}var detInv=1/det;te[0]=t11*detInv;te[1]=(n31*n23-n33*n21)*detInv;te[2]=(n32*n21-n31*n22)*detInv;te[3]=t12*detInv;te[4]=(n33*n11-n31*n13)*detInv;te[5]=(n31*n12-n32*n11)*detInv;te[6]=t13*detInv;te[7]=(n21*n13-n23*n11)*detInv;te[8]=(n22*n11-n21*n12)*detInv;return this},transpose:function(){var tmp,m=this.elements;tmp=m[1];m[1]=m[3];m[3]=tmp;tmp=m[2];m[2]=m[6];m[6]=tmp;tmp=m[5];m[5]=m[7];m[7]=tmp;return this},getNormalMatrix:function(matrix4){return this.setFromMatrix4(matrix4).getInverse(this).transpose()},transposeIntoArray:function(r){var m=this.elements;r[0]=m[0];r[1]=m[3];r[2]=m[6];r[3]=m[1];r[4]=m[4];r[5]=m[7];r[6]=m[2];r[7]=m[5];r[8]=m[8];return this},equals:function(matrix){var te=this.elements;var me=matrix.elements;for(var i=0;i<9;i++){if(te[i]!==me[i])return false}return true},fromArray:function(array,offset){if(offset===undefined)offset=0;for(var i=0;i<9;i++){this.elements[i]=array[i+offset]}return this},toArray:function(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;var te=this.elements;array[offset]=te[0];array[offset+1]=te[1];array[offset+2]=te[2];array[offset+3]=te[3];array[offset+4]=te[4];array[offset+5]=te[5];array[offset+6]=te[6];array[offset+7]=te[7];array[offset+8]=te[8];return array}});function Plane(normal,constant){this.normal=normal!==undefined?normal:new Vector3(1,0,0);this.constant=constant!==undefined?constant:0}Object.assign(Plane.prototype,{set:function(normal,constant){this.normal.copy(normal);this.constant=constant;return this},setComponents:function(x,y,z,w){this.normal.set(x,y,z);this.constant=w;return this},setFromNormalAndCoplanarPoint:function(normal,point){this.normal.copy(normal);this.constant=-point.dot(this.normal);return this},setFromCoplanarPoints:function(){var v1=new Vector3;var v2=new Vector3;return function setFromCoplanarPoints(a,b,c){var normal=v1.subVectors(c,b).cross(v2.subVectors(a,b)).normalize();this.setFromNormalAndCoplanarPoint(normal,a);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(plane){this.normal.copy(plane.normal);this.constant=plane.constant;return this},normalize:function(){var inverseNormalLength=1/this.normal.length();this.normal.multiplyScalar(inverseNormalLength);this.constant*=inverseNormalLength;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(point){return this.normal.dot(point)+this.constant},distanceToSphere:function(sphere){return this.distanceToPoint(sphere.center)-sphere.radius},projectPoint:function(point,optionalTarget){return this.orthoPoint(point,optionalTarget).sub(point).negate()},orthoPoint:function(point,optionalTarget){var perpendicularMagnitude=this.distanceToPoint(point);var result=optionalTarget||new Vector3;return result.copy(this.normal).multiplyScalar(perpendicularMagnitude)},intersectLine:function(){var v1=new Vector3;return function intersectLine(line,optionalTarget){var result=optionalTarget||new Vector3;var direction=line.delta(v1);var denominator=this.normal.dot(direction);if(denominator===0){if(this.distanceToPoint(line.start)===0){return result.copy(line.start)}return undefined}var t=-(line.start.dot(this.normal)+this.constant)/denominator;if(t<0||t>1){return undefined}return result.copy(direction).multiplyScalar(t).add(line.start)}}(),intersectsLine:function(line){var startSign=this.distanceToPoint(line.start);var endSign=this.distanceToPoint(line.end);return startSign<0&&endSign>0||endSign<0&&startSign>0},intersectsBox:function(box){return box.intersectsPlane(this)},intersectsSphere:function(sphere){return sphere.intersectsPlane(this)},coplanarPoint:function(optionalTarget){var result=optionalTarget||new Vector3;return result.copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var v1=new Vector3;var m1=new Matrix3;return function applyMatrix4(matrix,optionalNormalMatrix){var referencePoint=this.coplanarPoint(v1).applyMatrix4(matrix);var normalMatrix=optionalNormalMatrix||m1.getNormalMatrix(matrix);var normal=this.normal.applyMatrix3(normalMatrix).normalize();this.constant=-referencePoint.dot(normal);return this}}(),translate:function(offset){this.constant=this.constant-offset.dot(this.normal);return this},equals:function(plane){return plane.normal.equals(this.normal)&&plane.constant===this.constant}});function Frustum(p0,p1,p2,p3,p4,p5){this.planes=[p0!==undefined?p0:new Plane,p1!==undefined?p1:new Plane,p2!==undefined?p2:new Plane,p3!==undefined?p3:new Plane,p4!==undefined?p4:new Plane,p5!==undefined?p5:new Plane]}Object.assign(Frustum.prototype,{set:function(p0,p1,p2,p3,p4,p5){var planes=this.planes;planes[0].copy(p0);planes[1].copy(p1);planes[2].copy(p2);planes[3].copy(p3);planes[4].copy(p4);planes[5].copy(p5);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(frustum){var planes=this.planes;for(var i=0;i<6;i++){planes[i].copy(frustum.planes[i])}return this},setFromMatrix:function(m){var planes=this.planes;var me=m.elements;var me0=me[0],me1=me[1],me2=me[2],me3=me[3];var me4=me[4],me5=me[5],me6=me[6],me7=me[7];var me8=me[8],me9=me[9],me10=me[10],me11=me[11];var me12=me[12],me13=me[13],me14=me[14],me15=me[15];planes[0].setComponents(me3-me0,me7-me4,me11-me8,me15-me12).normalize();planes[1].setComponents(me3+me0,me7+me4,me11+me8,me15+me12).normalize();planes[2].setComponents(me3+me1,me7+me5,me11+me9,me15+me13).normalize();planes[3].setComponents(me3-me1,me7-me5,me11-me9,me15-me13).normalize();planes[4].setComponents(me3-me2,me7-me6,me11-me10,me15-me14).normalize();planes[5].setComponents(me3+me2,me7+me6,me11+me10,me15+me14).normalize();return this},intersectsObject:function(){var sphere=new Sphere;return function intersectsObject(object){var geometry=object.geometry;if(geometry.boundingSphere===null)geometry.computeBoundingSphere();sphere.copy(geometry.boundingSphere).applyMatrix4(object.matrixWorld);return this.intersectsSphere(sphere)}}(),intersectsSprite:function(){var sphere=new Sphere;return function intersectsSprite(sprite){sphere.center.set(0,0,0);sphere.radius=.7071067811865476;sphere.applyMatrix4(sprite.matrixWorld);return this.intersectsSphere(sphere)}}(),intersectsSphere:function(sphere){var planes=this.planes;var center=sphere.center;var negRadius=-sphere.radius;for(var i=0;i<6;i++){var distance=planes[i].distanceToPoint(center);if(distance<negRadius){return false}}return true},intersectsBox:function(){var p1=new Vector3,p2=new Vector3;return function intersectsBox(box){var planes=this.planes;for(var i=0;i<6;i++){var plane=planes[i];p1.x=plane.normal.x>0?box.min.x:box.max.x;p2.x=plane.normal.x>0?box.max.x:box.min.x;p1.y=plane.normal.y>0?box.min.y:box.max.y;p2.y=plane.normal.y>0?box.max.y:box.min.y;p1.z=plane.normal.z>0?box.min.z:box.max.z;p2.z=plane.normal.z>0?box.max.z:box.min.z;var d1=plane.distanceToPoint(p1);var d2=plane.distanceToPoint(p2);if(d1<0&&d2<0){return false}}return true}}(),containsPoint:function(point){var planes=this.planes;for(var i=0;i<6;i++){if(planes[i].distanceToPoint(point)<0){return false}}return true}});function WebGLShadowMap(_renderer,_lights,_objects,capabilities){var _gl=_renderer.context,_state=_renderer.state,_frustum=new Frustum,_projScreenMatrix=new Matrix4,_lightShadows=_lights.shadows,_shadowMapSize=new Vector2,_maxShadowMapSize=new Vector2(capabilities.maxTextureSize,capabilities.maxTextureSize),_lookTarget=new Vector3,_lightPositionWorld=new Vector3,_MorphingFlag=1,_SkinningFlag=2,_NumberOfMaterialVariants=(_MorphingFlag|_SkinningFlag)+1,_depthMaterials=new Array(_NumberOfMaterialVariants),_distanceMaterials=new Array(_NumberOfMaterialVariants),_materialCache={};var cubeDirections=[new Vector3(1,0,0),new Vector3(-1,0,0),new Vector3(0,0,1),new Vector3(0,0,-1),new Vector3(0,1,0),new Vector3(0,-1,0)];var cubeUps=[new Vector3(0,1,0),new Vector3(0,1,0),new Vector3(0,1,0),new Vector3(0,1,0),new Vector3(0,0,1),new Vector3(0,0,-1)];var cube2DViewPorts=[new Vector4,new Vector4,new Vector4,new Vector4,new Vector4,new Vector4];var depthMaterialTemplate=new MeshDepthMaterial;depthMaterialTemplate.depthPacking=RGBADepthPacking;depthMaterialTemplate.clipping=true;var distanceShader=ShaderLib["distanceRGBA"];var distanceUniforms=UniformsUtils.clone(distanceShader.uniforms);for(var i=0;i!==_NumberOfMaterialVariants;++i){var useMorphing=(i&_MorphingFlag)!==0;var useSkinning=(i&_SkinningFlag)!==0;var depthMaterial=depthMaterialTemplate.clone();depthMaterial.morphTargets=useMorphing;depthMaterial.skinning=useSkinning;_depthMaterials[i]=depthMaterial;var distanceMaterial=new ShaderMaterial({defines:{USE_SHADOWMAP:""},uniforms:distanceUniforms,vertexShader:distanceShader.vertexShader,fragmentShader:distanceShader.fragmentShader,morphTargets:useMorphing,skinning:useSkinning,clipping:true});_distanceMaterials[i]=distanceMaterial}var scope=this;this.enabled=false;this.autoUpdate=true;this.needsUpdate=false;this.type=PCFShadowMap;this.renderReverseSided=true;this.renderSingleSided=true;this.render=function(scene,camera){if(scope.enabled===false)return;if(scope.autoUpdate===false&&scope.needsUpdate===false)return;if(_lightShadows.length===0)return;_state.disable(_gl.BLEND);_state.buffers.color.setClear(1,1,1,1);_state.buffers.depth.setTest(true);_state.setScissorTest(false);var faceCount;for(var i=0,il=_lightShadows.length;i<il;i++){var light=_lightShadows[i];var shadow=light.shadow;var isPointLight=light&&light.isPointLight;if(shadow===undefined){console.warn("THREE.WebGLShadowMap:",light,"has no shadow.");continue}var shadowCamera=shadow.camera;_shadowMapSize.copy(shadow.mapSize);_shadowMapSize.min(_maxShadowMapSize);if(isPointLight){var vpWidth=_shadowMapSize.x;var vpHeight=_shadowMapSize.y;cube2DViewPorts[0].set(vpWidth*2,vpHeight,vpWidth,vpHeight);cube2DViewPorts[1].set(0,vpHeight,vpWidth,vpHeight);cube2DViewPorts[2].set(vpWidth*3,vpHeight,vpWidth,vpHeight);cube2DViewPorts[3].set(vpWidth,vpHeight,vpWidth,vpHeight);cube2DViewPorts[4].set(vpWidth*3,0,vpWidth,vpHeight);cube2DViewPorts[5].set(vpWidth,0,vpWidth,vpHeight);_shadowMapSize.x*=4;_shadowMapSize.y*=2}if(shadow.map===null){var pars={minFilter:NearestFilter,magFilter:NearestFilter,format:RGBAFormat};shadow.map=new WebGLRenderTarget(_shadowMapSize.x,_shadowMapSize.y,pars);shadow.map.texture.name=light.name+".shadowMap";shadowCamera.updateProjectionMatrix()}if(shadow.isSpotLightShadow){shadow.update(light)}var shadowMap=shadow.map;var shadowMatrix=shadow.matrix;_lightPositionWorld.setFromMatrixPosition(light.matrixWorld);shadowCamera.position.copy(_lightPositionWorld);if(isPointLight){faceCount=6;shadowMatrix.makeTranslation(-_lightPositionWorld.x,-_lightPositionWorld.y,-_lightPositionWorld.z)}else{faceCount=1;_lookTarget.setFromMatrixPosition(light.target.matrixWorld);shadowCamera.lookAt(_lookTarget);shadowCamera.updateMatrixWorld();shadowMatrix.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);shadowMatrix.multiply(shadowCamera.projectionMatrix);shadowMatrix.multiply(shadowCamera.matrixWorldInverse)}_renderer.setRenderTarget(shadowMap);_renderer.clear();for(var face=0;face<faceCount;face++){if(isPointLight){_lookTarget.copy(shadowCamera.position);_lookTarget.add(cubeDirections[face]);shadowCamera.up.copy(cubeUps[face]);shadowCamera.lookAt(_lookTarget);shadowCamera.updateMatrixWorld();var vpDimensions=cube2DViewPorts[face];_state.viewport(vpDimensions)}_projScreenMatrix.multiplyMatrices(shadowCamera.projectionMatrix,shadowCamera.matrixWorldInverse);_frustum.setFromMatrix(_projScreenMatrix);renderObject(scene,camera,shadowCamera,isPointLight)}}var clearColor=_renderer.getClearColor();var clearAlpha=_renderer.getClearAlpha();_renderer.setClearColor(clearColor,clearAlpha);scope.needsUpdate=false};function getDepthMaterial(object,material,isPointLight,lightPositionWorld){var geometry=object.geometry;var result=null;var materialVariants=_depthMaterials;var customMaterial=object.customDepthMaterial;if(isPointLight){materialVariants=_distanceMaterials;customMaterial=object.customDistanceMaterial}if(!customMaterial){var useMorphing=false;if(material.morphTargets){if(geometry&&geometry.isBufferGeometry){useMorphing=geometry.morphAttributes&&geometry.morphAttributes.position&&geometry.morphAttributes.position.length>0}else if(geometry&&geometry.isGeometry){useMorphing=geometry.morphTargets&&geometry.morphTargets.length>0}}if(object.isSkinnedMesh&&material.skinning===false){console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",object)}var useSkinning=object.isSkinnedMesh&&material.skinning;var variantIndex=0;if(useMorphing)variantIndex|=_MorphingFlag;if(useSkinning)variantIndex|=_SkinningFlag;result=materialVariants[variantIndex]}else{result=customMaterial}if(_renderer.localClippingEnabled&&material.clipShadows===true&&material.clippingPlanes.length!==0){var keyA=result.uuid,keyB=material.uuid;var materialsForVariant=_materialCache[keyA];if(materialsForVariant===undefined){materialsForVariant={};_materialCache[keyA]=materialsForVariant}var cachedMaterial=materialsForVariant[keyB];if(cachedMaterial===undefined){cachedMaterial=result.clone();materialsForVariant[keyB]=cachedMaterial}result=cachedMaterial}result.visible=material.visible;result.wireframe=material.wireframe;var side=material.side;if(scope.renderSingleSided&&side==DoubleSide){side=FrontSide}if(scope.renderReverseSided){if(side===FrontSide)side=BackSide;else if(side===BackSide)side=FrontSide}result.side=side;result.clipShadows=material.clipShadows;result.clippingPlanes=material.clippingPlanes;result.wireframeLinewidth=material.wireframeLinewidth;result.linewidth=material.linewidth;if(isPointLight&&result.uniforms.lightPos!==undefined){result.uniforms.lightPos.value.copy(lightPositionWorld)}return result}function renderObject(object,camera,shadowCamera,isPointLight){if(object.visible===false)return;var visible=object.layers.test(camera.layers);if(visible&&(object.isMesh||object.isLine||object.isPoints)){if(object.castShadow&&(!object.frustumCulled||_frustum.intersectsObject(object))){object.modelViewMatrix.multiplyMatrices(shadowCamera.matrixWorldInverse,object.matrixWorld);var geometry=_objects.update(object);var material=object.material;if(Array.isArray(material)){var groups=geometry.groups;for(var k=0,kl=groups.length;k<kl;k++){var group=groups[k];var groupMaterial=material[group.materialIndex];if(groupMaterial&&groupMaterial.visible){var depthMaterial=getDepthMaterial(object,groupMaterial,isPointLight,_lightPositionWorld);_renderer.renderBufferDirect(shadowCamera,null,geometry,depthMaterial,object,group)}}}else if(material.visible){var depthMaterial=getDepthMaterial(object,material,isPointLight,_lightPositionWorld);_renderer.renderBufferDirect(shadowCamera,null,geometry,depthMaterial,object,null)}}}var children=object.children;for(var i=0,l=children.length;i<l;i++){renderObject(children[i],camera,shadowCamera,isPointLight)}}}function WebGLAttributes(gl){var buffers={};function createBuffer(attribute,bufferType){var array=attribute.array;var usage=attribute.dynamic?gl.DYNAMIC_DRAW:gl.STATIC_DRAW;var buffer=gl.createBuffer();gl.bindBuffer(bufferType,buffer);gl.bufferData(bufferType,array,usage);attribute.onUploadCallback();var type=gl.FLOAT;if(array instanceof Float32Array){type=gl.FLOAT}else if(array instanceof Float64Array){console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.")}else if(array instanceof Uint16Array){type=gl.UNSIGNED_SHORT}else if(array instanceof Int16Array){type=gl.SHORT}else if(array instanceof Uint32Array){type=gl.UNSIGNED_INT}else if(array instanceof Int32Array){type=gl.INT}else if(array instanceof Int8Array){type=gl.BYTE}else if(array instanceof Uint8Array){type=gl.UNSIGNED_BYTE}return{buffer:buffer,type:type,bytesPerElement:array.BYTES_PER_ELEMENT,version:attribute.version}}function updateBuffer(buffer,attribute,bufferType){var array=attribute.array;var updateRange=attribute.updateRange;gl.bindBuffer(bufferType,buffer);if(attribute.dynamic===false){gl.bufferData(bufferType,array,gl.STATIC_DRAW)}else if(updateRange.count===-1){gl.bufferSubData(bufferType,0,array)}else if(updateRange.count===0){console.error("THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually.")}else{gl.bufferSubData(bufferType,updateRange.offset*array.BYTES_PER_ELEMENT,array.subarray(updateRange.offset,updateRange.offset+updateRange.count));updateRange.count=-1}}function get(attribute){if(attribute.isInterleavedBufferAttribute)attribute=attribute.data;return buffers[attribute.uuid]}function remove(attribute){if(attribute.isInterleavedBufferAttribute)attribute=attribute.data;var data=buffers[attribute.uuid];if(data){gl.deleteBuffer(data.buffer);delete buffers[attribute.uuid]}}function update(attribute,bufferType){if(attribute.isInterleavedBufferAttribute)attribute=attribute.data;var data=buffers[attribute.uuid];if(data===undefined){buffers[attribute.uuid]=createBuffer(attribute,bufferType)}else if(data.version<attribute.version){updateBuffer(data.buffer,attribute,bufferType);data.version=attribute.version}}return{get:get,remove:remove,update:update}}function Euler(x,y,z,order){this._x=x||0;this._y=y||0;this._z=z||0;this._order=order||Euler.DefaultOrder}Euler.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];Euler.DefaultOrder="XYZ";Object.defineProperties(Euler.prototype,{x:{get:function(){return this._x},set:function(value){this._x=value;this.onChangeCallback()}},y:{get:function(){return this._y},set:function(value){this._y=value;this.onChangeCallback()}},z:{get:function(){return this._z},set:function(value){this._z=value;this.onChangeCallback()}},order:{get:function(){return this._order},set:function(value){this._order=value;this.onChangeCallback()}}});Object.assign(Euler.prototype,{isEuler:true,set:function(x,y,z,order){this._x=x;this._y=y;this._z=z;this._order=order||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(euler){this._x=euler._x;this._y=euler._y;this._z=euler._z;this._order=euler._order;this.onChangeCallback();return this},setFromRotationMatrix:function(m,order,update){var clamp=_Math.clamp;var te=m.elements;var m11=te[0],m12=te[4],m13=te[8];var m21=te[1],m22=te[5],m23=te[9];var m31=te[2],m32=te[6],m33=te[10];order=order||this._order;if(order==="XYZ"){this._y=Math.asin(clamp(m13,-1,1));if(Math.abs(m13)<.99999){this._x=Math.atan2(-m23,m33);this._z=Math.atan2(-m12,m11)}else{this._x=Math.atan2(m32,m22);this._z=0}}else if(order==="YXZ"){this._x=Math.asin(-clamp(m23,-1,1));if(Math.abs(m23)<.99999){this._y=Math.atan2(m13,m33);this._z=Math.atan2(m21,m22)}else{this._y=Math.atan2(-m31,m11);this._z=0}}else if(order==="ZXY"){this._x=Math.asin(clamp(m32,-1,1));if(Math.abs(m32)<.99999){this._y=Math.atan2(-m31,m33);this._z=Math.atan2(-m12,m22)}else{this._y=0;this._z=Math.atan2(m21,m11)}}else if(order==="ZYX"){this._y=Math.asin(-clamp(m31,-1,1));if(Math.abs(m31)<.99999){this._x=Math.atan2(m32,m33);this._z=Math.atan2(m21,m11)}else{this._x=0;this._z=Math.atan2(-m12,m22)}}else if(order==="YZX"){this._z=Math.asin(clamp(m21,-1,1));if(Math.abs(m21)<.99999){this._x=Math.atan2(-m23,m22);this._y=Math.atan2(-m31,m11)}else{this._x=0;this._y=Math.atan2(m13,m33)}}else if(order==="XZY"){this._z=Math.asin(-clamp(m12,-1,1));if(Math.abs(m12)<.99999){this._x=Math.atan2(m32,m22);this._y=Math.atan2(m13,m11)}else{this._x=Math.atan2(-m23,m33);this._y=0}}else{console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+order)}this._order=order;if(update!==false)this.onChangeCallback();return this},setFromQuaternion:function(){var matrix=new Matrix4;return function setFromQuaternion(q,order,update){matrix.makeRotationFromQuaternion(q);return this.setFromRotationMatrix(matrix,order,update)}}(),setFromVector3:function(v,order){return this.set(v.x,v.y,v.z,order||this._order)},reorder:function(){var q=new Quaternion;return function reorder(newOrder){q.setFromEuler(this);return this.setFromQuaternion(q,newOrder)}}(),equals:function(euler){return euler._x===this._x&&euler._y===this._y&&euler._z===this._z&&euler._order===this._order},fromArray:function(array){this._x=array[0];this._y=array[1];this._z=array[2];if(array[3]!==undefined)this._order=array[3];this.onChangeCallback();return this},toArray:function(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this._x;array[offset+1]=this._y;array[offset+2]=this._z;array[offset+3]=this._order;return array},toVector3:function(optionalResult){if(optionalResult){return optionalResult.set(this._x,this._y,this._z)}else{return new Vector3(this._x,this._y,this._z)}},onChange:function(callback){this.onChangeCallback=callback;return this},onChangeCallback:function(){}});function Layers(){this.mask=1|0}Object.assign(Layers.prototype,{set:function(channel){this.mask=1<<channel|0},enable:function(channel){this.mask|=1<<channel|0},toggle:function(channel){this.mask^=1<<channel|0},disable:function(channel){this.mask&=~(1<<channel|0)},test:function(layers){return(this.mask&layers.mask)!==0}});var object3DId=0;function Object3D(){Object.defineProperty(this,"id",{value:object3DId++});this.uuid=_Math.generateUUID();this.name="";this.type="Object3D";this.parent=null;this.children=[];this.up=Object3D.DefaultUp.clone();var position=new Vector3;var rotation=new Euler;var quaternion=new Quaternion;var scale=new Vector3(1,1,1);function onRotationChange(){quaternion.setFromEuler(rotation,false)}function onQuaternionChange(){rotation.setFromQuaternion(quaternion,undefined,false)}rotation.onChange(onRotationChange);quaternion.onChange(onQuaternionChange);Object.defineProperties(this,{position:{enumerable:true,value:position},rotation:{enumerable:true,value:rotation},quaternion:{enumerable:true,value:quaternion},scale:{enumerable:true,value:scale},modelViewMatrix:{value:new Matrix4},normalMatrix:{value:new Matrix3}});this.matrix=new Matrix4;this.matrixWorld=new Matrix4;this.matrixAutoUpdate=Object3D.DefaultMatrixAutoUpdate;this.matrixWorldNeedsUpdate=false;this.layers=new Layers;this.visible=true;this.castShadow=false;this.receiveShadow=false;this.frustumCulled=true;this.renderOrder=0;this.userData={}}Object3D.DefaultUp=new Vector3(0,1,0);Object3D.DefaultMatrixAutoUpdate=true;Object.assign(Object3D.prototype,EventDispatcher.prototype,{isObject3D:true,onBeforeRender:function(){},onAfterRender:function(){},applyMatrix:function(matrix){this.matrix.multiplyMatrices(matrix,this.matrix);this.matrix.decompose(this.position,this.quaternion,this.scale)},applyQuaternion:function(q){this.quaternion.premultiply(q);return this},setRotationFromAxisAngle:function(axis,angle){this.quaternion.setFromAxisAngle(axis,angle)},setRotationFromEuler:function(euler){this.quaternion.setFromEuler(euler,true)},setRotationFromMatrix:function(m){this.quaternion.setFromRotationMatrix(m)},setRotationFromQuaternion:function(q){this.quaternion.copy(q)},rotateOnAxis:function(){var q1=new Quaternion;return function rotateOnAxis(axis,angle){q1.setFromAxisAngle(axis,angle);this.quaternion.multiply(q1);return this}}(),rotateX:function(){var v1=new Vector3(1,0,0);return function rotateX(angle){return this.rotateOnAxis(v1,angle)}}(),rotateY:function(){var v1=new Vector3(0,1,0);return function rotateY(angle){return this.rotateOnAxis(v1,angle)}}(),rotateZ:function(){var v1=new Vector3(0,0,1);return function rotateZ(angle){return this.rotateOnAxis(v1,angle)}}(),translateOnAxis:function(){var v1=new Vector3;return function translateOnAxis(axis,distance){v1.copy(axis).applyQuaternion(this.quaternion);this.position.add(v1.multiplyScalar(distance));return this}}(),translateX:function(){var v1=new Vector3(1,0,0);return function translateX(distance){
return this.translateOnAxis(v1,distance)}}(),translateY:function(){var v1=new Vector3(0,1,0);return function translateY(distance){return this.translateOnAxis(v1,distance)}}(),translateZ:function(){var v1=new Vector3(0,0,1);return function translateZ(distance){return this.translateOnAxis(v1,distance)}}(),localToWorld:function(vector){return vector.applyMatrix4(this.matrixWorld)},worldToLocal:function(){var m1=new Matrix4;return function worldToLocal(vector){return vector.applyMatrix4(m1.getInverse(this.matrixWorld))}}(),lookAt:function(){var m1=new Matrix4;return function lookAt(vector){if(this.isCamera){m1.lookAt(this.position,vector,this.up)}else{m1.lookAt(vector,this.position,this.up)}this.quaternion.setFromRotationMatrix(m1)}}(),add:function(object){if(arguments.length>1){for(var i=0;i<arguments.length;i++){this.add(arguments[i])}return this}if(object===this){console.error("THREE.Object3D.add: object can't be added as a child of itself.",object);return this}if(object&&object.isObject3D){if(object.parent!==null){object.parent.remove(object)}object.parent=this;object.dispatchEvent({type:"added"});this.children.push(object)}else{console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",object)}return this},remove:function(object){if(arguments.length>1){for(var i=0;i<arguments.length;i++){this.remove(arguments[i])}return this}var index=this.children.indexOf(object);if(index!==-1){object.parent=null;object.dispatchEvent({type:"removed"});this.children.splice(index,1)}return this},getObjectById:function(id){return this.getObjectByProperty("id",id)},getObjectByName:function(name){return this.getObjectByProperty("name",name)},getObjectByProperty:function(name,value){if(this[name]===value)return this;for(var i=0,l=this.children.length;i<l;i++){var child=this.children[i];var object=child.getObjectByProperty(name,value);if(object!==undefined){return object}}return undefined},getWorldPosition:function(optionalTarget){var result=optionalTarget||new Vector3;this.updateMatrixWorld(true);return result.setFromMatrixPosition(this.matrixWorld)},getWorldQuaternion:function(){var position=new Vector3;var scale=new Vector3;return function getWorldQuaternion(optionalTarget){var result=optionalTarget||new Quaternion;this.updateMatrixWorld(true);this.matrixWorld.decompose(position,result,scale);return result}}(),getWorldRotation:function(){var quaternion=new Quaternion;return function getWorldRotation(optionalTarget){var result=optionalTarget||new Euler;this.getWorldQuaternion(quaternion);return result.setFromQuaternion(quaternion,this.rotation.order,false)}}(),getWorldScale:function(){var position=new Vector3;var quaternion=new Quaternion;return function getWorldScale(optionalTarget){var result=optionalTarget||new Vector3;this.updateMatrixWorld(true);this.matrixWorld.decompose(position,quaternion,result);return result}}(),getWorldDirection:function(){var quaternion=new Quaternion;return function getWorldDirection(optionalTarget){var result=optionalTarget||new Vector3;this.getWorldQuaternion(quaternion);return result.set(0,0,1).applyQuaternion(quaternion)}}(),raycast:function(){},traverse:function(callback){callback(this);var children=this.children;for(var i=0,l=children.length;i<l;i++){children[i].traverse(callback)}},traverseVisible:function(callback){if(this.visible===false)return;callback(this);var children=this.children;for(var i=0,l=children.length;i<l;i++){children[i].traverseVisible(callback)}},traverseAncestors:function(callback){var parent=this.parent;if(parent!==null){callback(parent);parent.traverseAncestors(callback)}},updateMatrix:function(){this.matrix.compose(this.position,this.quaternion,this.scale);this.matrixWorldNeedsUpdate=true},updateMatrixWorld:function(force){if(this.matrixAutoUpdate)this.updateMatrix();if(this.matrixWorldNeedsUpdate||force){if(this.parent===null){this.matrixWorld.copy(this.matrix)}else{this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)}this.matrixWorldNeedsUpdate=false;force=true}var children=this.children;for(var i=0,l=children.length;i<l;i++){children[i].updateMatrixWorld(force)}},toJSON:function(meta){var isRootObject=meta===undefined||meta==="";var output={};if(isRootObject){meta={geometries:{},materials:{},textures:{},images:{}};output.metadata={version:4.5,type:"Object",generator:"Object3D.toJSON"}}var object={};object.uuid=this.uuid;object.type=this.type;if(this.name!=="")object.name=this.name;if(JSON.stringify(this.userData)!=="{}")object.userData=this.userData;if(this.castShadow===true)object.castShadow=true;if(this.receiveShadow===true)object.receiveShadow=true;if(this.visible===false)object.visible=false;object.matrix=this.matrix.toArray();function serialize(library,element){if(library[element.uuid]===undefined){library[element.uuid]=element.toJSON(meta)}return element.uuid}if(this.geometry!==undefined){object.geometry=serialize(meta.geometries,this.geometry)}if(this.material!==undefined){if(Array.isArray(this.material)){var uuids=[];for(var i=0,l=this.material.length;i<l;i++){uuids.push(serialize(meta.materials,this.material[i]))}object.material=uuids}else{object.material=serialize(meta.materials,this.material)}}if(this.children.length>0){object.children=[];for(var i=0;i<this.children.length;i++){object.children.push(this.children[i].toJSON(meta).object)}}if(isRootObject){var geometries=extractFromCache(meta.geometries);var materials=extractFromCache(meta.materials);var textures=extractFromCache(meta.textures);var images=extractFromCache(meta.images);if(geometries.length>0)output.geometries=geometries;if(materials.length>0)output.materials=materials;if(textures.length>0)output.textures=textures;if(images.length>0)output.images=images}output.object=object;return output;function extractFromCache(cache){var values=[];for(var key in cache){var data=cache[key];delete data.metadata;values.push(data)}return values}},clone:function(recursive){return(new this.constructor).copy(this,recursive)},copy:function(source,recursive){if(recursive===undefined)recursive=true;this.name=source.name;this.up.copy(source.up);this.position.copy(source.position);this.quaternion.copy(source.quaternion);this.scale.copy(source.scale);this.matrix.copy(source.matrix);this.matrixWorld.copy(source.matrixWorld);this.matrixAutoUpdate=source.matrixAutoUpdate;this.matrixWorldNeedsUpdate=source.matrixWorldNeedsUpdate;this.layers.mask=source.layers.mask;this.visible=source.visible;this.castShadow=source.castShadow;this.receiveShadow=source.receiveShadow;this.frustumCulled=source.frustumCulled;this.renderOrder=source.renderOrder;this.userData=JSON.parse(JSON.stringify(source.userData));if(recursive===true){for(var i=0;i<source.children.length;i++){var child=source.children[i];this.add(child.clone())}}return this}});function Camera(){Object3D.call(this);this.type="Camera";this.matrixWorldInverse=new Matrix4;this.projectionMatrix=new Matrix4}Camera.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Camera,isCamera:true,copy:function(source,recursive){Object3D.prototype.copy.call(this,source,recursive);this.matrixWorldInverse.copy(source.matrixWorldInverse);this.projectionMatrix.copy(source.projectionMatrix);return this},getWorldDirection:function(){var quaternion=new Quaternion;return function getWorldDirection(optionalTarget){var result=optionalTarget||new Vector3;this.getWorldQuaternion(quaternion);return result.set(0,0,-1).applyQuaternion(quaternion)}}(),updateMatrixWorld:function(force){Object3D.prototype.updateMatrixWorld.call(this,force);this.matrixWorldInverse.getInverse(this.matrixWorld)},clone:function(){return(new this.constructor).copy(this)}});function OrthographicCamera(left,right,top,bottom,near,far){Camera.call(this);this.type="OrthographicCamera";this.zoom=1;this.view=null;this.left=left;this.right=right;this.top=top;this.bottom=bottom;this.near=near!==undefined?near:.1;this.far=far!==undefined?far:2e3;this.updateProjectionMatrix()}OrthographicCamera.prototype=Object.assign(Object.create(Camera.prototype),{constructor:OrthographicCamera,isOrthographicCamera:true,copy:function(source,recursive){Camera.prototype.copy.call(this,source,recursive);this.left=source.left;this.right=source.right;this.top=source.top;this.bottom=source.bottom;this.near=source.near;this.far=source.far;this.zoom=source.zoom;this.view=source.view===null?null:Object.assign({},source.view);return this},setViewOffset:function(fullWidth,fullHeight,x,y,width,height){this.view={fullWidth:fullWidth,fullHeight:fullHeight,offsetX:x,offsetY:y,width:width,height:height};this.updateProjectionMatrix()},clearViewOffset:function(){this.view=null;this.updateProjectionMatrix()},updateProjectionMatrix:function(){var dx=(this.right-this.left)/(2*this.zoom);var dy=(this.top-this.bottom)/(2*this.zoom);var cx=(this.right+this.left)/2;var cy=(this.top+this.bottom)/2;var left=cx-dx;var right=cx+dx;var top=cy+dy;var bottom=cy-dy;if(this.view!==null){var zoomW=this.zoom/(this.view.width/this.view.fullWidth);var zoomH=this.zoom/(this.view.height/this.view.fullHeight);var scaleW=(this.right-this.left)/this.view.width;var scaleH=(this.top-this.bottom)/this.view.height;left+=scaleW*(this.view.offsetX/zoomW);right=left+scaleW*(this.view.width/zoomW);top-=scaleH*(this.view.offsetY/zoomH);bottom=top-scaleH*(this.view.height/zoomH)}this.projectionMatrix.makeOrthographic(left,right,top,bottom,this.near,this.far)},toJSON:function(meta){var data=Object3D.prototype.toJSON.call(this,meta);data.object.zoom=this.zoom;data.object.left=this.left;data.object.right=this.right;data.object.top=this.top;data.object.bottom=this.bottom;data.object.near=this.near;data.object.far=this.far;if(this.view!==null)data.object.view=Object.assign({},this.view);return data}});function PerspectiveCamera(fov,aspect,near,far){Camera.call(this);this.type="PerspectiveCamera";this.fov=fov!==undefined?fov:50;this.zoom=1;this.near=near!==undefined?near:.1;this.far=far!==undefined?far:2e3;this.focus=10;this.aspect=aspect!==undefined?aspect:1;this.view=null;this.filmGauge=35;this.filmOffset=0;this.updateProjectionMatrix()}PerspectiveCamera.prototype=Object.assign(Object.create(Camera.prototype),{constructor:PerspectiveCamera,isPerspectiveCamera:true,copy:function(source,recursive){Camera.prototype.copy.call(this,source,recursive);this.fov=source.fov;this.zoom=source.zoom;this.near=source.near;this.far=source.far;this.focus=source.focus;this.aspect=source.aspect;this.view=source.view===null?null:Object.assign({},source.view);this.filmGauge=source.filmGauge;this.filmOffset=source.filmOffset;return this},setFocalLength:function(focalLength){var vExtentSlope=.5*this.getFilmHeight()/focalLength;this.fov=_Math.RAD2DEG*2*Math.atan(vExtentSlope);this.updateProjectionMatrix()},getFocalLength:function(){var vExtentSlope=Math.tan(_Math.DEG2RAD*.5*this.fov);return.5*this.getFilmHeight()/vExtentSlope},getEffectiveFOV:function(){return _Math.RAD2DEG*2*Math.atan(Math.tan(_Math.DEG2RAD*.5*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(fullWidth,fullHeight,x,y,width,height){this.aspect=fullWidth/fullHeight;this.view={fullWidth:fullWidth,fullHeight:fullHeight,offsetX:x,offsetY:y,width:width,height:height};this.updateProjectionMatrix()},clearViewOffset:function(){this.view=null;this.updateProjectionMatrix()},updateProjectionMatrix:function(){var near=this.near,top=near*Math.tan(_Math.DEG2RAD*.5*this.fov)/this.zoom,height=2*top,width=this.aspect*height,left=-.5*width,view=this.view;if(view!==null){var fullWidth=view.fullWidth,fullHeight=view.fullHeight;left+=view.offsetX*width/fullWidth;top-=view.offsetY*height/fullHeight;width*=view.width/fullWidth;height*=view.height/fullHeight}var skew=this.filmOffset;if(skew!==0)left+=near*skew/this.getFilmWidth();this.projectionMatrix.makePerspective(left,left+width,top,top-height,near,this.far)},toJSON:function(meta){var data=Object3D.prototype.toJSON.call(this,meta);data.object.fov=this.fov;data.object.zoom=this.zoom;data.object.near=this.near;data.object.far=this.far;data.object.focus=this.focus;data.object.aspect=this.aspect;if(this.view!==null)data.object.view=Object.assign({},this.view);data.object.filmGauge=this.filmGauge;data.object.filmOffset=this.filmOffset;return data}});function Face3(a,b,c,normal,color,materialIndex){this.a=a;this.b=b;this.c=c;this.normal=normal&&normal.isVector3?normal:new Vector3;this.vertexNormals=Array.isArray(normal)?normal:[];this.color=color&&color.isColor?color:new Color;this.vertexColors=Array.isArray(color)?color:[];this.materialIndex=materialIndex!==undefined?materialIndex:0}Object.assign(Face3.prototype,{clone:function(){return(new this.constructor).copy(this)},copy:function(source){this.a=source.a;this.b=source.b;this.c=source.c;this.normal.copy(source.normal);this.color.copy(source.color);this.materialIndex=source.materialIndex;for(var i=0,il=source.vertexNormals.length;i<il;i++){this.vertexNormals[i]=source.vertexNormals[i].clone()}for(var i=0,il=source.vertexColors.length;i<il;i++){this.vertexColors[i]=source.vertexColors[i].clone()}return this}});var count=0;function GeometryIdCount(){return count++}function Geometry(){Object.defineProperty(this,"id",{value:GeometryIdCount()});this.uuid=_Math.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=false;this.verticesNeedUpdate=false;this.uvsNeedUpdate=false;this.normalsNeedUpdate=false;this.colorsNeedUpdate=false;this.lineDistancesNeedUpdate=false;this.groupsNeedUpdate=false}Object.assign(Geometry.prototype,EventDispatcher.prototype,{isGeometry:true,applyMatrix:function(matrix){var normalMatrix=(new Matrix3).getNormalMatrix(matrix);for(var i=0,il=this.vertices.length;i<il;i++){var vertex=this.vertices[i];vertex.applyMatrix4(matrix)}for(var i=0,il=this.faces.length;i<il;i++){var face=this.faces[i];face.normal.applyMatrix3(normalMatrix).normalize();for(var j=0,jl=face.vertexNormals.length;j<jl;j++){face.vertexNormals[j].applyMatrix3(normalMatrix).normalize()}}if(this.boundingBox!==null){this.computeBoundingBox()}if(this.boundingSphere!==null){this.computeBoundingSphere()}this.verticesNeedUpdate=true;this.normalsNeedUpdate=true;return this},rotateX:function(){var m1=new Matrix4;return function rotateX(angle){m1.makeRotationX(angle);this.applyMatrix(m1);return this}}(),rotateY:function(){var m1=new Matrix4;return function rotateY(angle){m1.makeRotationY(angle);this.applyMatrix(m1);return this}}(),rotateZ:function(){var m1=new Matrix4;return function rotateZ(angle){m1.makeRotationZ(angle);this.applyMatrix(m1);return this}}(),translate:function(){var m1=new Matrix4;return function translate(x,y,z){m1.makeTranslation(x,y,z);this.applyMatrix(m1);return this}}(),scale:function(){var m1=new Matrix4;return function scale(x,y,z){m1.makeScale(x,y,z);this.applyMatrix(m1);return this}}(),lookAt:function(){var obj=new Object3D;return function lookAt(vector){obj.lookAt(vector);obj.updateMatrix();this.applyMatrix(obj.matrix)}}(),fromBufferGeometry:function(geometry){var scope=this;var indices=geometry.index!==null?geometry.index.array:undefined;var attributes=geometry.attributes;var positions=attributes.position.array;var normals=attributes.normal!==undefined?attributes.normal.array:undefined;var colors=attributes.color!==undefined?attributes.color.array:undefined;var uvs=attributes.uv!==undefined?attributes.uv.array:undefined;var uvs2=attributes.uv2!==undefined?attributes.uv2.array:undefined;if(uvs2!==undefined)this.faceVertexUvs[1]=[];var tempNormals=[];var tempUVs=[];var tempUVs2=[];for(var i=0,j=0;i<positions.length;i+=3,j+=2){scope.vertices.push(new Vector3(positions[i],positions[i+1],positions[i+2]));if(normals!==undefined){tempNormals.push(new Vector3(normals[i],normals[i+1],normals[i+2]))}if(colors!==undefined){scope.colors.push(new Color(colors[i],colors[i+1],colors[i+2]))}if(uvs!==undefined){tempUVs.push(new Vector2(uvs[j],uvs[j+1]))}if(uvs2!==undefined){tempUVs2.push(new Vector2(uvs2[j],uvs2[j+1]))}}function addFace(a,b,c,materialIndex){var vertexNormals=normals!==undefined?[tempNormals[a].clone(),tempNormals[b].clone(),tempNormals[c].clone()]:[];var vertexColors=colors!==undefined?[scope.colors[a].clone(),scope.colors[b].clone(),scope.colors[c].clone()]:[];var face=new Face3(a,b,c,vertexNormals,vertexColors,materialIndex);scope.faces.push(face);if(uvs!==undefined){scope.faceVertexUvs[0].push([tempUVs[a].clone(),tempUVs[b].clone(),tempUVs[c].clone()])}if(uvs2!==undefined){scope.faceVertexUvs[1].push([tempUVs2[a].clone(),tempUVs2[b].clone(),tempUVs2[c].clone()])}}var groups=geometry.groups;if(groups.length>0){for(var i=0;i<groups.length;i++){var group=groups[i];var start=group.start;var count=group.count;for(var j=start,jl=start+count;j<jl;j+=3){if(indices!==undefined){addFace(indices[j],indices[j+1],indices[j+2],group.materialIndex)}else{addFace(j,j+1,j+2,group.materialIndex)}}}}else{if(indices!==undefined){for(var i=0;i<indices.length;i+=3){addFace(indices[i],indices[i+1],indices[i+2])}}else{for(var i=0;i<positions.length/3;i+=3){addFace(i,i+1,i+2)}}}this.computeFaceNormals();if(geometry.boundingBox!==null){this.boundingBox=geometry.boundingBox.clone()}if(geometry.boundingSphere!==null){this.boundingSphere=geometry.boundingSphere.clone()}return this},center:function(){this.computeBoundingBox();var offset=this.boundingBox.getCenter().negate();this.translate(offset.x,offset.y,offset.z);return offset},normalize:function(){this.computeBoundingSphere();var center=this.boundingSphere.center;var radius=this.boundingSphere.radius;var s=radius===0?1:1/radius;var matrix=new Matrix4;matrix.set(s,0,0,-s*center.x,0,s,0,-s*center.y,0,0,s,-s*center.z,0,0,0,1);this.applyMatrix(matrix);return this},computeFaceNormals:function(){var cb=new Vector3,ab=new Vector3;for(var f=0,fl=this.faces.length;f<fl;f++){var face=this.faces[f];var vA=this.vertices[face.a];var vB=this.vertices[face.b];var vC=this.vertices[face.c];cb.subVectors(vC,vB);ab.subVectors(vA,vB);cb.cross(ab);cb.normalize();face.normal.copy(cb)}},computeVertexNormals:function(areaWeighted){if(areaWeighted===undefined)areaWeighted=true;var v,vl,f,fl,face,vertices;vertices=new Array(this.vertices.length);for(v=0,vl=this.vertices.length;v<vl;v++){vertices[v]=new Vector3}if(areaWeighted){var vA,vB,vC;var cb=new Vector3,ab=new Vector3;for(f=0,fl=this.faces.length;f<fl;f++){face=this.faces[f];vA=this.vertices[face.a];vB=this.vertices[face.b];vC=this.vertices[face.c];cb.subVectors(vC,vB);ab.subVectors(vA,vB);cb.cross(ab);vertices[face.a].add(cb);vertices[face.b].add(cb);vertices[face.c].add(cb)}}else{this.computeFaceNormals();for(f=0,fl=this.faces.length;f<fl;f++){face=this.faces[f];vertices[face.a].add(face.normal);vertices[face.b].add(face.normal);vertices[face.c].add(face.normal)}}for(v=0,vl=this.vertices.length;v<vl;v++){vertices[v].normalize()}for(f=0,fl=this.faces.length;f<fl;f++){face=this.faces[f];var vertexNormals=face.vertexNormals;if(vertexNormals.length===3){vertexNormals[0].copy(vertices[face.a]);vertexNormals[1].copy(vertices[face.b]);vertexNormals[2].copy(vertices[face.c])}else{vertexNormals[0]=vertices[face.a].clone();vertexNormals[1]=vertices[face.b].clone();vertexNormals[2]=vertices[face.c].clone()}}if(this.faces.length>0){this.normalsNeedUpdate=true}},computeFlatVertexNormals:function(){var f,fl,face;this.computeFaceNormals();for(f=0,fl=this.faces.length;f<fl;f++){face=this.faces[f];var vertexNormals=face.vertexNormals;if(vertexNormals.length===3){vertexNormals[0].copy(face.normal);vertexNormals[1].copy(face.normal);vertexNormals[2].copy(face.normal)}else{vertexNormals[0]=face.normal.clone();vertexNormals[1]=face.normal.clone();vertexNormals[2]=face.normal.clone()}}if(this.faces.length>0){this.normalsNeedUpdate=true}},computeMorphNormals:function(){var i,il,f,fl,face;for(f=0,fl=this.faces.length;f<fl;f++){face=this.faces[f];if(!face.__originalFaceNormal){face.__originalFaceNormal=face.normal.clone()}else{face.__originalFaceNormal.copy(face.normal)}if(!face.__originalVertexNormals)face.__originalVertexNormals=[];for(i=0,il=face.vertexNormals.length;i<il;i++){if(!face.__originalVertexNormals[i]){face.__originalVertexNormals[i]=face.vertexNormals[i].clone()}else{face.__originalVertexNormals[i].copy(face.vertexNormals[i])}}}var tmpGeo=new Geometry;tmpGeo.faces=this.faces;for(i=0,il=this.morphTargets.length;i<il;i++){if(!this.morphNormals[i]){this.morphNormals[i]={};this.morphNormals[i].faceNormals=[];this.morphNormals[i].vertexNormals=[];var dstNormalsFace=this.morphNormals[i].faceNormals;var dstNormalsVertex=this.morphNormals[i].vertexNormals;var faceNormal,vertexNormals;for(f=0,fl=this.faces.length;f<fl;f++){faceNormal=new Vector3;vertexNormals={a:new Vector3,b:new Vector3,c:new Vector3};dstNormalsFace.push(faceNormal);dstNormalsVertex.push(vertexNormals)}}var morphNormals=this.morphNormals[i];tmpGeo.vertices=this.morphTargets[i].vertices;tmpGeo.computeFaceNormals();tmpGeo.computeVertexNormals();var faceNormal,vertexNormals;for(f=0,fl=this.faces.length;f<fl;f++){face=this.faces[f];faceNormal=morphNormals.faceNormals[f];vertexNormals=morphNormals.vertexNormals[f];faceNormal.copy(face.normal);vertexNormals.a.copy(face.vertexNormals[0]);vertexNormals.b.copy(face.vertexNormals[1]);vertexNormals.c.copy(face.vertexNormals[2])}}for(f=0,fl=this.faces.length;f<fl;f++){face=this.faces[f];face.normal=face.__originalFaceNormal;face.vertexNormals=face.__originalVertexNormals}},computeLineDistances:function(){var d=0;var vertices=this.vertices;for(var i=0,il=vertices.length;i<il;i++){if(i>0){d+=vertices[i].distanceTo(vertices[i-1])}this.lineDistances[i]=d}},computeBoundingBox:function(){if(this.boundingBox===null){this.boundingBox=new Box3}this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){if(this.boundingSphere===null){this.boundingSphere=new Sphere}this.boundingSphere.setFromPoints(this.vertices)},merge:function(geometry,matrix,materialIndexOffset){if(!(geometry&&geometry.isGeometry)){console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",geometry);return}var normalMatrix,vertexOffset=this.vertices.length,vertices1=this.vertices,vertices2=geometry.vertices,faces1=this.faces,faces2=geometry.faces,uvs1=this.faceVertexUvs[0],uvs2=geometry.faceVertexUvs[0],colors1=this.colors,colors2=geometry.colors;if(materialIndexOffset===undefined)materialIndexOffset=0;if(matrix!==undefined){normalMatrix=(new Matrix3).getNormalMatrix(matrix)}for(var i=0,il=vertices2.length;i<il;i++){var vertex=vertices2[i];var vertexCopy=vertex.clone();if(matrix!==undefined)vertexCopy.applyMatrix4(matrix);vertices1.push(vertexCopy)}for(var i=0,il=colors2.length;i<il;i++){colors1.push(colors2[i].clone())}for(i=0,il=faces2.length;i<il;i++){var face=faces2[i],faceCopy,normal,color,faceVertexNormals=face.vertexNormals,faceVertexColors=face.vertexColors;faceCopy=new Face3(face.a+vertexOffset,face.b+vertexOffset,face.c+vertexOffset);faceCopy.normal.copy(face.normal);if(normalMatrix!==undefined){faceCopy.normal.applyMatrix3(normalMatrix).normalize()}for(var j=0,jl=faceVertexNormals.length;j<jl;j++){normal=faceVertexNormals[j].clone();if(normalMatrix!==undefined){normal.applyMatrix3(normalMatrix).normalize()}faceCopy.vertexNormals.push(normal)}faceCopy.color.copy(face.color);for(var j=0,jl=faceVertexColors.length;j<jl;j++){color=faceVertexColors[j];faceCopy.vertexColors.push(color.clone())}faceCopy.materialIndex=face.materialIndex+materialIndexOffset;faces1.push(faceCopy)}for(i=0,il=uvs2.length;i<il;i++){var uv=uvs2[i],uvCopy=[];if(uv===undefined){continue}for(var j=0,jl=uv.length;j<jl;j++){uvCopy.push(uv[j].clone())}uvs1.push(uvCopy)}},mergeMesh:function(mesh){if(!(mesh&&mesh.isMesh)){console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",mesh);return}mesh.matrixAutoUpdate&&mesh.updateMatrix();this.merge(mesh.geometry,mesh.matrix)},mergeVertices:function(){var verticesMap={};var unique=[],changes=[];var v,key;var precisionPoints=4;var precision=Math.pow(10,precisionPoints);var i,il,face;var indices,j,jl;for(i=0,il=this.vertices.length;i<il;i++){v=this.vertices[i];key=Math.round(v.x*precision)+"_"+Math.round(v.y*precision)+"_"+Math.round(v.z*precision);if(verticesMap[key]===undefined){verticesMap[key]=i;unique.push(this.vertices[i]);changes[i]=unique.length-1}else{changes[i]=changes[verticesMap[key]]}}var faceIndicesToRemove=[];for(i=0,il=this.faces.length;i<il;i++){face=this.faces[i];face.a=changes[face.a];face.b=changes[face.b];face.c=changes[face.c];indices=[face.a,face.b,face.c];for(var n=0;n<3;n++){if(indices[n]===indices[(n+1)%3]){faceIndicesToRemove.push(i);break}}}for(i=faceIndicesToRemove.length-1;i>=0;i--){var idx=faceIndicesToRemove[i];this.faces.splice(idx,1);for(j=0,jl=this.faceVertexUvs.length;j<jl;j++){this.faceVertexUvs[j].splice(idx,1)}}var diff=this.vertices.length-unique.length;this.vertices=unique;return diff},sortFacesByMaterialIndex:function(){var faces=this.faces;var length=faces.length;for(var i=0;i<length;i++){faces[i]._id=i}function materialIndexSort(a,b){return a.materialIndex-b.materialIndex}faces.sort(materialIndexSort);var uvs1=this.faceVertexUvs[0];var uvs2=this.faceVertexUvs[1];var newUvs1,newUvs2;if(uvs1&&uvs1.length===length)newUvs1=[];if(uvs2&&uvs2.length===length)newUvs2=[];for(var i=0;i<length;i++){var id=faces[i]._id;if(newUvs1)newUvs1.push(uvs1[id]);if(newUvs2)newUvs2.push(uvs2[id])}if(newUvs1)this.faceVertexUvs[0]=newUvs1;if(newUvs2)this.faceVertexUvs[1]=newUvs2},toJSON:function(){var data={metadata:{version:4.5,type:"Geometry",generator:"Geometry.toJSON"}};data.uuid=this.uuid;data.type=this.type;if(this.name!=="")data.name=this.name;if(this.parameters!==undefined){var parameters=this.parameters;for(var key in parameters){if(parameters[key]!==undefined)data[key]=parameters[key]}return data}var vertices=[];for(var i=0;i<this.vertices.length;i++){var vertex=this.vertices[i];vertices.push(vertex.x,vertex.y,vertex.z)}var faces=[];var normals=[];var normalsHash={};var colors=[];var colorsHash={};var uvs=[];var uvsHash={};for(var i=0;i<this.faces.length;i++){var face=this.faces[i];var hasMaterial=true;var hasFaceUv=false;var hasFaceVertexUv=this.faceVertexUvs[0][i]!==undefined;var hasFaceNormal=face.normal.length()>0;var hasFaceVertexNormal=face.vertexNormals.length>0;var hasFaceColor=face.color.r!==1||face.color.g!==1||face.color.b!==1;var hasFaceVertexColor=face.vertexColors.length>0;var faceType=0;faceType=setBit(faceType,0,0);faceType=setBit(faceType,1,hasMaterial);faceType=setBit(faceType,2,hasFaceUv);faceType=setBit(faceType,3,hasFaceVertexUv);faceType=setBit(faceType,4,hasFaceNormal);faceType=setBit(faceType,5,hasFaceVertexNormal);faceType=setBit(faceType,6,hasFaceColor);faceType=setBit(faceType,7,hasFaceVertexColor);faces.push(faceType);faces.push(face.a,face.b,face.c);faces.push(face.materialIndex);if(hasFaceVertexUv){var faceVertexUvs=this.faceVertexUvs[0][i];faces.push(getUvIndex(faceVertexUvs[0]),getUvIndex(faceVertexUvs[1]),getUvIndex(faceVertexUvs[2]))}if(hasFaceNormal){faces.push(getNormalIndex(face.normal))}if(hasFaceVertexNormal){var vertexNormals=face.vertexNormals;faces.push(getNormalIndex(vertexNormals[0]),getNormalIndex(vertexNormals[1]),getNormalIndex(vertexNormals[2]))}if(hasFaceColor){faces.push(getColorIndex(face.color))}if(hasFaceVertexColor){var vertexColors=face.vertexColors;faces.push(getColorIndex(vertexColors[0]),getColorIndex(vertexColors[1]),getColorIndex(vertexColors[2]))}}function setBit(value,position,enabled){return enabled?value|1<<position:value&~(1<<position)}function getNormalIndex(normal){var hash=normal.x.toString()+normal.y.toString()+normal.z.toString();if(normalsHash[hash]!==undefined){return normalsHash[hash]}normalsHash[hash]=normals.length/3;normals.push(normal.x,normal.y,normal.z);return normalsHash[hash]}function getColorIndex(color){var hash=color.r.toString()+color.g.toString()+color.b.toString();if(colorsHash[hash]!==undefined){return colorsHash[hash]}colorsHash[hash]=colors.length;colors.push(color.getHex());return colorsHash[hash]}function getUvIndex(uv){var hash=uv.x.toString()+uv.y.toString();if(uvsHash[hash]!==undefined){return uvsHash[hash]}uvsHash[hash]=uvs.length/2;uvs.push(uv.x,uv.y);return uvsHash[hash]}data.data={};data.data.vertices=vertices;data.data.normals=normals;if(colors.length>0)data.data.colors=colors;if(uvs.length>0)data.data.uvs=[uvs];data.data.faces=faces;return data},clone:function(){return(new Geometry).copy(this)},copy:function(source){var i,il,j,jl,k,kl;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=source.name;var vertices=source.vertices;for(i=0,il=vertices.length;i<il;i++){this.vertices.push(vertices[i].clone())}var colors=source.colors;for(i=0,il=colors.length;i<il;i++){this.colors.push(colors[i].clone())}var faces=source.faces;for(i=0,il=faces.length;i<il;i++){this.faces.push(faces[i].clone())}for(i=0,il=source.faceVertexUvs.length;i<il;i++){var faceVertexUvs=source.faceVertexUvs[i];if(this.faceVertexUvs[i]===undefined){this.faceVertexUvs[i]=[]}for(j=0,jl=faceVertexUvs.length;j<jl;j++){var uvs=faceVertexUvs[j],uvsCopy=[];for(k=0,kl=uvs.length;k<kl;k++){var uv=uvs[k];uvsCopy.push(uv.clone())}this.faceVertexUvs[i].push(uvsCopy)}}var morphTargets=source.morphTargets;for(i=0,il=morphTargets.length;i<il;i++){var morphTarget={};morphTarget.name=morphTargets[i].name;if(morphTargets[i].vertices!==undefined){morphTarget.vertices=[];for(j=0,jl=morphTargets[i].vertices.length;j<jl;j++){morphTarget.vertices.push(morphTargets[i].vertices[j].clone())}}if(morphTargets[i].normals!==undefined){morphTarget.normals=[];for(j=0,jl=morphTargets[i].normals.length;j<jl;j++){morphTarget.normals.push(morphTargets[i].normals[j].clone())}}this.morphTargets.push(morphTarget)}var morphNormals=source.morphNormals;for(i=0,il=morphNormals.length;i<il;i++){var morphNormal={};if(morphNormals[i].vertexNormals!==undefined){morphNormal.vertexNormals=[];for(j=0,jl=morphNormals[i].vertexNormals.length;j<jl;j++){var srcVertexNormal=morphNormals[i].vertexNormals[j];var destVertexNormal={};destVertexNormal.a=srcVertexNormal.a.clone();destVertexNormal.b=srcVertexNormal.b.clone();destVertexNormal.c=srcVertexNormal.c.clone();morphNormal.vertexNormals.push(destVertexNormal)}}if(morphNormals[i].faceNormals!==undefined){morphNormal.faceNormals=[];for(j=0,jl=morphNormals[i].faceNormals.length;j<jl;j++){morphNormal.faceNormals.push(morphNormals[i].faceNormals[j].clone())}}this.morphNormals.push(morphNormal)}var skinWeights=source.skinWeights;for(i=0,il=skinWeights.length;i<il;i++){this.skinWeights.push(skinWeights[i].clone())}var skinIndices=source.skinIndices;for(i=0,il=skinIndices.length;i<il;i++){this.skinIndices.push(skinIndices[i].clone())}var lineDistances=source.lineDistances;for(i=0,il=lineDistances.length;i<il;i++){this.lineDistances.push(lineDistances[i])}var boundingBox=source.boundingBox;if(boundingBox!==null){this.boundingBox=boundingBox.clone()}var boundingSphere=source.boundingSphere;if(boundingSphere!==null){this.boundingSphere=boundingSphere.clone()}this.elementsNeedUpdate=source.elementsNeedUpdate;this.verticesNeedUpdate=source.verticesNeedUpdate;this.uvsNeedUpdate=source.uvsNeedUpdate;this.normalsNeedUpdate=source.normalsNeedUpdate;this.colorsNeedUpdate=source.colorsNeedUpdate;this.lineDistancesNeedUpdate=source.lineDistancesNeedUpdate;this.groupsNeedUpdate=source.groupsNeedUpdate;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});function BufferAttribute(array,itemSize,normalized){if(Array.isArray(array)){throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");
}this.uuid=_Math.generateUUID();this.name="";this.array=array;this.itemSize=itemSize;this.count=array!==undefined?array.length/itemSize:0;this.normalized=normalized===true;this.dynamic=false;this.updateRange={offset:0,count:-1};this.onUploadCallback=function(){};this.version=0}Object.defineProperty(BufferAttribute.prototype,"needsUpdate",{set:function(value){if(value===true)this.version++}});Object.assign(BufferAttribute.prototype,{isBufferAttribute:true,setArray:function(array){if(Array.isArray(array)){throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.")}this.count=array!==undefined?array.length/this.itemSize:0;this.array=array},setDynamic:function(value){this.dynamic=value;return this},copy:function(source){this.array=new source.array.constructor(source.array);this.itemSize=source.itemSize;this.count=source.count;this.normalized=source.normalized;this.dynamic=source.dynamic;return this},copyAt:function(index1,attribute,index2){index1*=this.itemSize;index2*=attribute.itemSize;for(var i=0,l=this.itemSize;i<l;i++){this.array[index1+i]=attribute.array[index2+i]}return this},copyArray:function(array){this.array.set(array);return this},copyColorsArray:function(colors){var array=this.array,offset=0;for(var i=0,l=colors.length;i<l;i++){var color=colors[i];if(color===undefined){console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined",i);color=new Color}array[offset++]=color.r;array[offset++]=color.g;array[offset++]=color.b}return this},copyIndicesArray:function(indices){var array=this.array,offset=0;for(var i=0,l=indices.length;i<l;i++){var index=indices[i];array[offset++]=index.a;array[offset++]=index.b;array[offset++]=index.c}return this},copyVector2sArray:function(vectors){var array=this.array,offset=0;for(var i=0,l=vectors.length;i<l;i++){var vector=vectors[i];if(vector===undefined){console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined",i);vector=new Vector2}array[offset++]=vector.x;array[offset++]=vector.y}return this},copyVector3sArray:function(vectors){var array=this.array,offset=0;for(var i=0,l=vectors.length;i<l;i++){var vector=vectors[i];if(vector===undefined){console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined",i);vector=new Vector3}array[offset++]=vector.x;array[offset++]=vector.y;array[offset++]=vector.z}return this},copyVector4sArray:function(vectors){var array=this.array,offset=0;for(var i=0,l=vectors.length;i<l;i++){var vector=vectors[i];if(vector===undefined){console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined",i);vector=new Vector4}array[offset++]=vector.x;array[offset++]=vector.y;array[offset++]=vector.z;array[offset++]=vector.w}return this},set:function(value,offset){if(offset===undefined)offset=0;this.array.set(value,offset);return this},getX:function(index){return this.array[index*this.itemSize]},setX:function(index,x){this.array[index*this.itemSize]=x;return this},getY:function(index){return this.array[index*this.itemSize+1]},setY:function(index,y){this.array[index*this.itemSize+1]=y;return this},getZ:function(index){return this.array[index*this.itemSize+2]},setZ:function(index,z){this.array[index*this.itemSize+2]=z;return this},getW:function(index){return this.array[index*this.itemSize+3]},setW:function(index,w){this.array[index*this.itemSize+3]=w;return this},setXY:function(index,x,y){index*=this.itemSize;this.array[index+0]=x;this.array[index+1]=y;return this},setXYZ:function(index,x,y,z){index*=this.itemSize;this.array[index+0]=x;this.array[index+1]=y;this.array[index+2]=z;return this},setXYZW:function(index,x,y,z,w){index*=this.itemSize;this.array[index+0]=x;this.array[index+1]=y;this.array[index+2]=z;this.array[index+3]=w;return this},onUpload:function(callback){this.onUploadCallback=callback;return this},clone:function(){return new this.constructor(this.array,this.itemSize).copy(this)}});function Int8BufferAttribute(array,itemSize){BufferAttribute.call(this,new Int8Array(array),itemSize)}Int8BufferAttribute.prototype=Object.create(BufferAttribute.prototype);Int8BufferAttribute.prototype.constructor=Int8BufferAttribute;function Uint8BufferAttribute(array,itemSize){BufferAttribute.call(this,new Uint8Array(array),itemSize)}Uint8BufferAttribute.prototype=Object.create(BufferAttribute.prototype);Uint8BufferAttribute.prototype.constructor=Uint8BufferAttribute;function Uint8ClampedBufferAttribute(array,itemSize){BufferAttribute.call(this,new Uint8ClampedArray(array),itemSize)}Uint8ClampedBufferAttribute.prototype=Object.create(BufferAttribute.prototype);Uint8ClampedBufferAttribute.prototype.constructor=Uint8ClampedBufferAttribute;function Int16BufferAttribute(array,itemSize){BufferAttribute.call(this,new Int16Array(array),itemSize)}Int16BufferAttribute.prototype=Object.create(BufferAttribute.prototype);Int16BufferAttribute.prototype.constructor=Int16BufferAttribute;function Uint16BufferAttribute(array,itemSize){BufferAttribute.call(this,new Uint16Array(array),itemSize)}Uint16BufferAttribute.prototype=Object.create(BufferAttribute.prototype);Uint16BufferAttribute.prototype.constructor=Uint16BufferAttribute;function Int32BufferAttribute(array,itemSize){BufferAttribute.call(this,new Int32Array(array),itemSize)}Int32BufferAttribute.prototype=Object.create(BufferAttribute.prototype);Int32BufferAttribute.prototype.constructor=Int32BufferAttribute;function Uint32BufferAttribute(array,itemSize){BufferAttribute.call(this,new Uint32Array(array),itemSize)}Uint32BufferAttribute.prototype=Object.create(BufferAttribute.prototype);Uint32BufferAttribute.prototype.constructor=Uint32BufferAttribute;function Float32BufferAttribute(array,itemSize){BufferAttribute.call(this,new Float32Array(array),itemSize)}Float32BufferAttribute.prototype=Object.create(BufferAttribute.prototype);Float32BufferAttribute.prototype.constructor=Float32BufferAttribute;function Float64BufferAttribute(array,itemSize){BufferAttribute.call(this,new Float64Array(array),itemSize)}Float64BufferAttribute.prototype=Object.create(BufferAttribute.prototype);Float64BufferAttribute.prototype.constructor=Float64BufferAttribute;function DirectGeometry(){this.indices=[];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=false;this.normalsNeedUpdate=false;this.colorsNeedUpdate=false;this.uvsNeedUpdate=false;this.groupsNeedUpdate=false}Object.assign(DirectGeometry.prototype,{computeGroups:function(geometry){var group;var groups=[];var materialIndex=undefined;var faces=geometry.faces;for(var i=0;i<faces.length;i++){var face=faces[i];if(face.materialIndex!==materialIndex){materialIndex=face.materialIndex;if(group!==undefined){group.count=i*3-group.start;groups.push(group)}group={start:i*3,materialIndex:materialIndex}}}if(group!==undefined){group.count=i*3-group.start;groups.push(group)}this.groups=groups},fromGeometry:function(geometry){var faces=geometry.faces;var vertices=geometry.vertices;var faceVertexUvs=geometry.faceVertexUvs;var hasFaceVertexUv=faceVertexUvs[0]&&faceVertexUvs[0].length>0;var hasFaceVertexUv2=faceVertexUvs[1]&&faceVertexUvs[1].length>0;var morphTargets=geometry.morphTargets;var morphTargetsLength=morphTargets.length;var morphTargetsPosition;if(morphTargetsLength>0){morphTargetsPosition=[];for(var i=0;i<morphTargetsLength;i++){morphTargetsPosition[i]=[]}this.morphTargets.position=morphTargetsPosition}var morphNormals=geometry.morphNormals;var morphNormalsLength=morphNormals.length;var morphTargetsNormal;if(morphNormalsLength>0){morphTargetsNormal=[];for(var i=0;i<morphNormalsLength;i++){morphTargetsNormal[i]=[]}this.morphTargets.normal=morphTargetsNormal}var skinIndices=geometry.skinIndices;var skinWeights=geometry.skinWeights;var hasSkinIndices=skinIndices.length===vertices.length;var hasSkinWeights=skinWeights.length===vertices.length;for(var i=0;i<faces.length;i++){var face=faces[i];this.vertices.push(vertices[face.a],vertices[face.b],vertices[face.c]);var vertexNormals=face.vertexNormals;if(vertexNormals.length===3){this.normals.push(vertexNormals[0],vertexNormals[1],vertexNormals[2])}else{var normal=face.normal;this.normals.push(normal,normal,normal)}var vertexColors=face.vertexColors;if(vertexColors.length===3){this.colors.push(vertexColors[0],vertexColors[1],vertexColors[2])}else{var color=face.color;this.colors.push(color,color,color)}if(hasFaceVertexUv===true){var vertexUvs=faceVertexUvs[0][i];if(vertexUvs!==undefined){this.uvs.push(vertexUvs[0],vertexUvs[1],vertexUvs[2])}else{console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ",i);this.uvs.push(new Vector2,new Vector2,new Vector2)}}if(hasFaceVertexUv2===true){var vertexUvs=faceVertexUvs[1][i];if(vertexUvs!==undefined){this.uvs2.push(vertexUvs[0],vertexUvs[1],vertexUvs[2])}else{console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ",i);this.uvs2.push(new Vector2,new Vector2,new Vector2)}}for(var j=0;j<morphTargetsLength;j++){var morphTarget=morphTargets[j].vertices;morphTargetsPosition[j].push(morphTarget[face.a],morphTarget[face.b],morphTarget[face.c])}for(var j=0;j<morphNormalsLength;j++){var morphNormal=morphNormals[j].vertexNormals[i];morphTargetsNormal[j].push(morphNormal.a,morphNormal.b,morphNormal.c)}if(hasSkinIndices){this.skinIndices.push(skinIndices[face.a],skinIndices[face.b],skinIndices[face.c])}if(hasSkinWeights){this.skinWeights.push(skinWeights[face.a],skinWeights[face.b],skinWeights[face.c])}}this.computeGroups(geometry);this.verticesNeedUpdate=geometry.verticesNeedUpdate;this.normalsNeedUpdate=geometry.normalsNeedUpdate;this.colorsNeedUpdate=geometry.colorsNeedUpdate;this.uvsNeedUpdate=geometry.uvsNeedUpdate;this.groupsNeedUpdate=geometry.groupsNeedUpdate;return this}});function arrayMax(array){if(array.length===0)return-Infinity;var max=array[0];for(var i=1,l=array.length;i<l;++i){if(array[i]>max)max=array[i]}return max}function BufferGeometry(){Object.defineProperty(this,"id",{value:GeometryIdCount()});this.uuid=_Math.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.groups=[];this.boundingBox=null;this.boundingSphere=null;this.drawRange={start:0,count:Infinity}}BufferGeometry.MaxIndex=65535;Object.assign(BufferGeometry.prototype,EventDispatcher.prototype,{isBufferGeometry:true,getIndex:function(){return this.index},setIndex:function(index){if(Array.isArray(index)){this.index=new(arrayMax(index)>65535?Uint32BufferAttribute:Uint16BufferAttribute)(index,1)}else{this.index=index}},addAttribute:function(name,attribute){if(!(attribute&&attribute.isBufferAttribute)&&!(attribute&&attribute.isInterleavedBufferAttribute)){console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).");this.addAttribute(name,new BufferAttribute(arguments[1],arguments[2]));return}if(name==="index"){console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.");this.setIndex(attribute);return}this.attributes[name]=attribute;return this},getAttribute:function(name){return this.attributes[name]},removeAttribute:function(name){delete this.attributes[name];return this},addGroup:function(start,count,materialIndex){this.groups.push({start:start,count:count,materialIndex:materialIndex!==undefined?materialIndex:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(start,count){this.drawRange.start=start;this.drawRange.count=count},applyMatrix:function(matrix){var position=this.attributes.position;if(position!==undefined){matrix.applyToBufferAttribute(position);position.needsUpdate=true}var normal=this.attributes.normal;if(normal!==undefined){var normalMatrix=(new Matrix3).getNormalMatrix(matrix);normalMatrix.applyToBufferAttribute(normal);normal.needsUpdate=true}if(this.boundingBox!==null){this.computeBoundingBox()}if(this.boundingSphere!==null){this.computeBoundingSphere()}return this},rotateX:function(){var m1=new Matrix4;return function rotateX(angle){m1.makeRotationX(angle);this.applyMatrix(m1);return this}}(),rotateY:function(){var m1=new Matrix4;return function rotateY(angle){m1.makeRotationY(angle);this.applyMatrix(m1);return this}}(),rotateZ:function(){var m1=new Matrix4;return function rotateZ(angle){m1.makeRotationZ(angle);this.applyMatrix(m1);return this}}(),translate:function(){var m1=new Matrix4;return function translate(x,y,z){m1.makeTranslation(x,y,z);this.applyMatrix(m1);return this}}(),scale:function(){var m1=new Matrix4;return function scale(x,y,z){m1.makeScale(x,y,z);this.applyMatrix(m1);return this}}(),lookAt:function(){var obj=new Object3D;return function lookAt(vector){obj.lookAt(vector);obj.updateMatrix();this.applyMatrix(obj.matrix)}}(),center:function(){this.computeBoundingBox();var offset=this.boundingBox.getCenter().negate();this.translate(offset.x,offset.y,offset.z);return offset},setFromObject:function(object){var geometry=object.geometry;if(object.isPoints||object.isLine){var positions=new Float32BufferAttribute(geometry.vertices.length*3,3);var colors=new Float32BufferAttribute(geometry.colors.length*3,3);this.addAttribute("position",positions.copyVector3sArray(geometry.vertices));this.addAttribute("color",colors.copyColorsArray(geometry.colors));if(geometry.lineDistances&&geometry.lineDistances.length===geometry.vertices.length){var lineDistances=new Float32BufferAttribute(geometry.lineDistances.length,1);this.addAttribute("lineDistance",lineDistances.copyArray(geometry.lineDistances))}if(geometry.boundingSphere!==null){this.boundingSphere=geometry.boundingSphere.clone()}if(geometry.boundingBox!==null){this.boundingBox=geometry.boundingBox.clone()}}else if(object.isMesh){if(geometry&&geometry.isGeometry){this.fromGeometry(geometry)}}return this},updateFromObject:function(object){var geometry=object.geometry;if(object.isMesh){var direct=geometry.__directGeometry;if(geometry.elementsNeedUpdate===true){direct=undefined;geometry.elementsNeedUpdate=false}if(direct===undefined){return this.fromGeometry(geometry)}direct.verticesNeedUpdate=geometry.verticesNeedUpdate;direct.normalsNeedUpdate=geometry.normalsNeedUpdate;direct.colorsNeedUpdate=geometry.colorsNeedUpdate;direct.uvsNeedUpdate=geometry.uvsNeedUpdate;direct.groupsNeedUpdate=geometry.groupsNeedUpdate;geometry.verticesNeedUpdate=false;geometry.normalsNeedUpdate=false;geometry.colorsNeedUpdate=false;geometry.uvsNeedUpdate=false;geometry.groupsNeedUpdate=false;geometry=direct}var attribute;if(geometry.verticesNeedUpdate===true){attribute=this.attributes.position;if(attribute!==undefined){attribute.copyVector3sArray(geometry.vertices);attribute.needsUpdate=true}geometry.verticesNeedUpdate=false}if(geometry.normalsNeedUpdate===true){attribute=this.attributes.normal;if(attribute!==undefined){attribute.copyVector3sArray(geometry.normals);attribute.needsUpdate=true}geometry.normalsNeedUpdate=false}if(geometry.colorsNeedUpdate===true){attribute=this.attributes.color;if(attribute!==undefined){attribute.copyColorsArray(geometry.colors);attribute.needsUpdate=true}geometry.colorsNeedUpdate=false}if(geometry.uvsNeedUpdate){attribute=this.attributes.uv;if(attribute!==undefined){attribute.copyVector2sArray(geometry.uvs);attribute.needsUpdate=true}geometry.uvsNeedUpdate=false}if(geometry.lineDistancesNeedUpdate){attribute=this.attributes.lineDistance;if(attribute!==undefined){attribute.copyArray(geometry.lineDistances);attribute.needsUpdate=true}geometry.lineDistancesNeedUpdate=false}if(geometry.groupsNeedUpdate){geometry.computeGroups(object.geometry);this.groups=geometry.groups;geometry.groupsNeedUpdate=false}return this},fromGeometry:function(geometry){geometry.__directGeometry=(new DirectGeometry).fromGeometry(geometry);return this.fromDirectGeometry(geometry.__directGeometry)},fromDirectGeometry:function(geometry){var positions=new Float32Array(geometry.vertices.length*3);this.addAttribute("position",new BufferAttribute(positions,3).copyVector3sArray(geometry.vertices));if(geometry.normals.length>0){var normals=new Float32Array(geometry.normals.length*3);this.addAttribute("normal",new BufferAttribute(normals,3).copyVector3sArray(geometry.normals))}if(geometry.colors.length>0){var colors=new Float32Array(geometry.colors.length*3);this.addAttribute("color",new BufferAttribute(colors,3).copyColorsArray(geometry.colors))}if(geometry.uvs.length>0){var uvs=new Float32Array(geometry.uvs.length*2);this.addAttribute("uv",new BufferAttribute(uvs,2).copyVector2sArray(geometry.uvs))}if(geometry.uvs2.length>0){var uvs2=new Float32Array(geometry.uvs2.length*2);this.addAttribute("uv2",new BufferAttribute(uvs2,2).copyVector2sArray(geometry.uvs2))}if(geometry.indices.length>0){var TypeArray=arrayMax(geometry.indices)>65535?Uint32Array:Uint16Array;var indices=new TypeArray(geometry.indices.length*3);this.setIndex(new BufferAttribute(indices,1).copyIndicesArray(geometry.indices))}this.groups=geometry.groups;for(var name in geometry.morphTargets){var array=[];var morphTargets=geometry.morphTargets[name];for(var i=0,l=morphTargets.length;i<l;i++){var morphTarget=morphTargets[i];var attribute=new Float32BufferAttribute(morphTarget.length*3,3);array.push(attribute.copyVector3sArray(morphTarget))}this.morphAttributes[name]=array}if(geometry.skinIndices.length>0){var skinIndices=new Float32BufferAttribute(geometry.skinIndices.length*4,4);this.addAttribute("skinIndex",skinIndices.copyVector4sArray(geometry.skinIndices))}if(geometry.skinWeights.length>0){var skinWeights=new Float32BufferAttribute(geometry.skinWeights.length*4,4);this.addAttribute("skinWeight",skinWeights.copyVector4sArray(geometry.skinWeights))}if(geometry.boundingSphere!==null){this.boundingSphere=geometry.boundingSphere.clone()}if(geometry.boundingBox!==null){this.boundingBox=geometry.boundingBox.clone()}return this},computeBoundingBox:function(){if(this.boundingBox===null){this.boundingBox=new Box3}var position=this.attributes.position;if(position!==undefined){this.boundingBox.setFromBufferAttribute(position)}else{this.boundingBox.makeEmpty()}if(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:function(){var box=new Box3;var vector=new Vector3;return function computeBoundingSphere(){if(this.boundingSphere===null){this.boundingSphere=new Sphere}var position=this.attributes.position;if(position){var center=this.boundingSphere.center;box.setFromBufferAttribute(position);box.getCenter(center);var maxRadiusSq=0;for(var i=0,il=position.count;i<il;i++){vector.x=position.getX(i);vector.y=position.getY(i);vector.z=position.getZ(i);maxRadiusSq=Math.max(maxRadiusSq,center.distanceToSquared(vector))}this.boundingSphere.radius=Math.sqrt(maxRadiusSq);if(isNaN(this.boundingSphere.radius)){console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}}}(),computeFaceNormals:function(){},computeVertexNormals:function(){var index=this.index;var attributes=this.attributes;var groups=this.groups;if(attributes.position){var positions=attributes.position.array;if(attributes.normal===undefined){this.addAttribute("normal",new BufferAttribute(new Float32Array(positions.length),3))}else{var array=attributes.normal.array;for(var i=0,il=array.length;i<il;i++){array[i]=0}}var normals=attributes.normal.array;var vA,vB,vC;var pA=new Vector3,pB=new Vector3,pC=new Vector3;var cb=new Vector3,ab=new Vector3;if(index){var indices=index.array;if(groups.length===0){this.addGroup(0,indices.length)}for(var j=0,jl=groups.length;j<jl;++j){var group=groups[j];var start=group.start;var count=group.count;for(var i=start,il=start+count;i<il;i+=3){vA=indices[i+0]*3;vB=indices[i+1]*3;vC=indices[i+2]*3;pA.fromArray(positions,vA);pB.fromArray(positions,vB);pC.fromArray(positions,vC);cb.subVectors(pC,pB);ab.subVectors(pA,pB);cb.cross(ab);normals[vA]+=cb.x;normals[vA+1]+=cb.y;normals[vA+2]+=cb.z;normals[vB]+=cb.x;normals[vB+1]+=cb.y;normals[vB+2]+=cb.z;normals[vC]+=cb.x;normals[vC+1]+=cb.y;normals[vC+2]+=cb.z}}}else{for(var i=0,il=positions.length;i<il;i+=9){pA.fromArray(positions,i);pB.fromArray(positions,i+3);pC.fromArray(positions,i+6);cb.subVectors(pC,pB);ab.subVectors(pA,pB);cb.cross(ab);normals[i]=cb.x;normals[i+1]=cb.y;normals[i+2]=cb.z;normals[i+3]=cb.x;normals[i+4]=cb.y;normals[i+5]=cb.z;normals[i+6]=cb.x;normals[i+7]=cb.y;normals[i+8]=cb.z}}this.normalizeNormals();attributes.normal.needsUpdate=true}},merge:function(geometry,offset){if(!(geometry&&geometry.isBufferGeometry)){console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.",geometry);return}if(offset===undefined)offset=0;var attributes=this.attributes;for(var key in attributes){if(geometry.attributes[key]===undefined)continue;var attribute1=attributes[key];var attributeArray1=attribute1.array;var attribute2=geometry.attributes[key];var attributeArray2=attribute2.array;var attributeSize=attribute2.itemSize;for(var i=0,j=attributeSize*offset;i<attributeArray2.length;i++,j++){attributeArray1[j]=attributeArray2[i]}}return this},normalizeNormals:function(){var normals=this.attributes.normal;var x,y,z,n;for(var i=0,il=normals.count;i<il;i++){x=normals.getX(i);y=normals.getY(i);z=normals.getZ(i);n=1/Math.sqrt(x*x+y*y+z*z);normals.setXYZ(i,x*n,y*n,z*n)}},toNonIndexed:function(){if(this.index===null){console.warn("THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.");return this}var geometry2=new BufferGeometry;var indices=this.index.array;var attributes=this.attributes;for(var name in attributes){var attribute=attributes[name];var array=attribute.array;var itemSize=attribute.itemSize;var array2=new array.constructor(indices.length*itemSize);var index=0,index2=0;for(var i=0,l=indices.length;i<l;i++){index=indices[i]*itemSize;for(var j=0;j<itemSize;j++){array2[index2++]=array[index++]}}geometry2.addAttribute(name,new BufferAttribute(array2,itemSize))}return geometry2},toJSON:function(){var data={metadata:{version:4.5,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};data.uuid=this.uuid;data.type=this.type;if(this.name!=="")data.name=this.name;if(this.parameters!==undefined){var parameters=this.parameters;for(var key in parameters){if(parameters[key]!==undefined)data[key]=parameters[key]}return data}data.data={attributes:{}};var index=this.index;if(index!==null){var array=Array.prototype.slice.call(index.array);data.data.index={type:index.array.constructor.name,array:array}}var attributes=this.attributes;for(var key in attributes){var attribute=attributes[key];var array=Array.prototype.slice.call(attribute.array);data.data.attributes[key]={itemSize:attribute.itemSize,type:attribute.array.constructor.name,array:array,normalized:attribute.normalized}}var groups=this.groups;if(groups.length>0){data.data.groups=JSON.parse(JSON.stringify(groups))}var boundingSphere=this.boundingSphere;if(boundingSphere!==null){data.data.boundingSphere={center:boundingSphere.center.toArray(),radius:boundingSphere.radius}}return data},clone:function(){return(new BufferGeometry).copy(this)},copy:function(source){var name,i,l;this.index=null;this.attributes={};this.morphAttributes={};this.groups=[];this.boundingBox=null;this.boundingSphere=null;this.name=source.name;var index=source.index;if(index!==null){this.setIndex(index.clone())}var attributes=source.attributes;for(name in attributes){var attribute=attributes[name];this.addAttribute(name,attribute.clone())}var morphAttributes=source.morphAttributes;for(name in morphAttributes){var array=[];var morphAttribute=morphAttributes[name];for(i=0,l=morphAttribute.length;i<l;i++){array.push(morphAttribute[i].clone())}this.morphAttributes[name]=array}var groups=source.groups;for(i=0,l=groups.length;i<l;i++){var group=groups[i];this.addGroup(group.start,group.count,group.materialIndex)}var boundingBox=source.boundingBox;if(boundingBox!==null){this.boundingBox=boundingBox.clone()}var boundingSphere=source.boundingSphere;if(boundingSphere!==null){this.boundingSphere=boundingSphere.clone()}this.drawRange.start=source.drawRange.start;this.drawRange.count=source.drawRange.count;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});function BoxGeometry(width,height,depth,widthSegments,heightSegments,depthSegments){Geometry.call(this);this.type="BoxGeometry";this.parameters={width:width,height:height,depth:depth,widthSegments:widthSegments,heightSegments:heightSegments,depthSegments:depthSegments};this.fromBufferGeometry(new BoxBufferGeometry(width,height,depth,widthSegments,heightSegments,depthSegments));this.mergeVertices()}BoxGeometry.prototype=Object.create(Geometry.prototype);BoxGeometry.prototype.constructor=BoxGeometry;function BoxBufferGeometry(width,height,depth,widthSegments,heightSegments,depthSegments){BufferGeometry.call(this);this.type="BoxBufferGeometry";this.parameters={width:width,height:height,depth:depth,widthSegments:widthSegments,heightSegments:heightSegments,depthSegments:depthSegments};var scope=this;widthSegments=Math.floor(widthSegments)||1;heightSegments=Math.floor(heightSegments)||1;depthSegments=Math.floor(depthSegments)||1;var indices=[];var vertices=[];var normals=[];var uvs=[];var numberOfVertices=0;var groupStart=0;buildPlane("z","y","x",-1,-1,depth,height,width,depthSegments,heightSegments,0);buildPlane("z","y","x",1,-1,depth,height,-width,depthSegments,heightSegments,1);buildPlane("x","z","y",1,1,width,depth,height,widthSegments,depthSegments,2);buildPlane("x","z","y",1,-1,width,depth,-height,widthSegments,depthSegments,3);buildPlane("x","y","z",1,-1,width,height,depth,widthSegments,heightSegments,4);buildPlane("x","y","z",-1,-1,width,height,-depth,widthSegments,heightSegments,5);this.setIndex(indices);this.addAttribute("position",new Float32BufferAttribute(vertices,3));this.addAttribute("normal",new Float32BufferAttribute(normals,3));this.addAttribute("uv",new Float32BufferAttribute(uvs,2));function buildPlane(u,v,w,udir,vdir,width,height,depth,gridX,gridY,materialIndex){var segmentWidth=width/gridX;var segmentHeight=height/gridY;var widthHalf=width/2;var heightHalf=height/2;var depthHalf=depth/2;var gridX1=gridX+1;var gridY1=gridY+1;var vertexCounter=0;var groupCount=0;var ix,iy;var vector=new Vector3;for(iy=0;iy<gridY1;iy++){var y=iy*segmentHeight-heightHalf;for(ix=0;ix<gridX1;ix++){var x=ix*segmentWidth-widthHalf;vector[u]=x*udir;vector[v]=y*vdir;vector[w]=depthHalf;vertices.push(vector.x,vector.y,vector.z);vector[u]=0;vector[v]=0;vector[w]=depth>0?1:-1;normals.push(vector.x,vector.y,vector.z);uvs.push(ix/gridX);uvs.push(1-iy/gridY);vertexCounter+=1}}for(iy=0;iy<gridY;iy++){for(ix=0;ix<gridX;ix++){var a=numberOfVertices+ix+gridX1*iy;var b=numberOfVertices+ix+gridX1*(iy+1);var c=numberOfVertices+(ix+1)+gridX1*(iy+1);var d=numberOfVertices+(ix+1)+gridX1*iy;indices.push(a,b,d);indices.push(b,c,d);groupCount+=6}}scope.addGroup(groupStart,groupCount,materialIndex);groupStart+=groupCount;numberOfVertices+=vertexCounter}}BoxBufferGeometry.prototype=Object.create(BufferGeometry.prototype);BoxBufferGeometry.prototype.constructor=BoxBufferGeometry;function PlaneGeometry(width,height,widthSegments,heightSegments){Geometry.call(this);this.type="PlaneGeometry";this.parameters={width:width,height:height,widthSegments:widthSegments,heightSegments:heightSegments};this.fromBufferGeometry(new PlaneBufferGeometry(width,height,widthSegments,heightSegments));this.mergeVertices()}PlaneGeometry.prototype=Object.create(Geometry.prototype);PlaneGeometry.prototype.constructor=PlaneGeometry;function PlaneBufferGeometry(width,height,widthSegments,heightSegments){BufferGeometry.call(this);this.type="PlaneBufferGeometry";this.parameters={width:width,height:height,widthSegments:widthSegments,heightSegments:heightSegments};var width_half=width/2;var height_half=height/2;var gridX=Math.floor(widthSegments)||1;var gridY=Math.floor(heightSegments)||1;var gridX1=gridX+1;var gridY1=gridY+1;var segment_width=width/gridX;var segment_height=height/gridY;var ix,iy;var indices=[];var vertices=[];var normals=[];var uvs=[];for(iy=0;iy<gridY1;iy++){var y=iy*segment_height-height_half;for(ix=0;ix<gridX1;ix++){var x=ix*segment_width-width_half;vertices.push(x,-y,0);normals.push(0,0,1);uvs.push(ix/gridX);uvs.push(1-iy/gridY)}}for(iy=0;iy<gridY;iy++){for(ix=0;ix<gridX;ix++){var a=ix+gridX1*iy;var b=ix+gridX1*(iy+1);var c=ix+1+gridX1*(iy+1);var d=ix+1+gridX1*iy;indices.push(a,b,d);indices.push(b,c,d)}}this.setIndex(indices);this.addAttribute("position",new Float32BufferAttribute(vertices,3));this.addAttribute("normal",new Float32BufferAttribute(normals,3));this.addAttribute("uv",new Float32BufferAttribute(uvs,2))}PlaneBufferGeometry.prototype=Object.create(BufferGeometry.prototype);PlaneBufferGeometry.prototype.constructor=PlaneBufferGeometry;function MeshBasicMaterial(parameters){Material.call(this);this.type="MeshBasicMaterial";this.color=new Color(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=MultiplyOperation;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=false;this.wireframeLinewidth=1;this.wireframeLinecap="round";this.wireframeLinejoin="round";this.skinning=false;this.morphTargets=false;this.lights=false;this.setValues(parameters)}MeshBasicMaterial.prototype=Object.create(Material.prototype);MeshBasicMaterial.prototype.constructor=MeshBasicMaterial;MeshBasicMaterial.prototype.isMeshBasicMaterial=true;MeshBasicMaterial.prototype.copy=function(source){Material.prototype.copy.call(this,source);this.color.copy(source.color);this.map=source.map;this.lightMap=source.lightMap;this.lightMapIntensity=source.lightMapIntensity;this.aoMap=source.aoMap;this.aoMapIntensity=source.aoMapIntensity;this.specularMap=source.specularMap;this.alphaMap=source.alphaMap;this.envMap=source.envMap;this.combine=source.combine;this.reflectivity=source.reflectivity;this.refractionRatio=source.refractionRatio;this.wireframe=source.wireframe;this.wireframeLinewidth=source.wireframeLinewidth;this.wireframeLinecap=source.wireframeLinecap;this.wireframeLinejoin=source.wireframeLinejoin;this.skinning=source.skinning;this.morphTargets=source.morphTargets;return this};function Ray(origin,direction){this.origin=origin!==undefined?origin:new Vector3;this.direction=direction!==undefined?direction:new Vector3}Object.assign(Ray.prototype,{set:function(origin,direction){this.origin.copy(origin);this.direction.copy(direction);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(ray){this.origin.copy(ray.origin);this.direction.copy(ray.direction);return this},at:function(t,optionalTarget){var result=optionalTarget||new Vector3;return result.copy(this.direction).multiplyScalar(t).add(this.origin)},lookAt:function(v){this.direction.copy(v).sub(this.origin).normalize();return this},recast:function(){var v1=new Vector3;return function recast(t){this.origin.copy(this.at(t,v1));return this}}(),closestPointToPoint:function(point,optionalTarget){var result=optionalTarget||new Vector3;result.subVectors(point,this.origin);var directionDistance=result.dot(this.direction);if(directionDistance<0){return result.copy(this.origin)}return result.copy(this.direction).multiplyScalar(directionDistance).add(this.origin)},distanceToPoint:function(point){return Math.sqrt(this.distanceSqToPoint(point))},distanceSqToPoint:function(){var v1=new Vector3;return function distanceSqToPoint(point){var directionDistance=v1.subVectors(point,this.origin).dot(this.direction);if(directionDistance<0){return this.origin.distanceToSquared(point)}v1.copy(this.direction).multiplyScalar(directionDistance).add(this.origin);return v1.distanceToSquared(point)}}(),distanceSqToSegment:function(){var segCenter=new Vector3;var segDir=new Vector3;
var diff=new Vector3;return function distanceSqToSegment(v0,v1,optionalPointOnRay,optionalPointOnSegment){segCenter.copy(v0).add(v1).multiplyScalar(.5);segDir.copy(v1).sub(v0).normalize();diff.copy(this.origin).sub(segCenter);var segExtent=v0.distanceTo(v1)*.5;var a01=-this.direction.dot(segDir);var b0=diff.dot(this.direction);var b1=-diff.dot(segDir);var c=diff.lengthSq();var det=Math.abs(1-a01*a01);var s0,s1,sqrDist,extDet;if(det>0){s0=a01*b1-b0;s1=a01*b0-b1;extDet=segExtent*det;if(s0>=0){if(s1>=-extDet){if(s1<=extDet){var invDet=1/det;s0*=invDet;s1*=invDet;sqrDist=s0*(s0+a01*s1+2*b0)+s1*(a01*s0+s1+2*b1)+c}else{s1=segExtent;s0=Math.max(0,-(a01*s1+b0));sqrDist=-s0*s0+s1*(s1+2*b1)+c}}else{s1=-segExtent;s0=Math.max(0,-(a01*s1+b0));sqrDist=-s0*s0+s1*(s1+2*b1)+c}}else{if(s1<=-extDet){s0=Math.max(0,-(-a01*segExtent+b0));s1=s0>0?-segExtent:Math.min(Math.max(-segExtent,-b1),segExtent);sqrDist=-s0*s0+s1*(s1+2*b1)+c}else if(s1<=extDet){s0=0;s1=Math.min(Math.max(-segExtent,-b1),segExtent);sqrDist=s1*(s1+2*b1)+c}else{s0=Math.max(0,-(a01*segExtent+b0));s1=s0>0?segExtent:Math.min(Math.max(-segExtent,-b1),segExtent);sqrDist=-s0*s0+s1*(s1+2*b1)+c}}}else{s1=a01>0?-segExtent:segExtent;s0=Math.max(0,-(a01*s1+b0));sqrDist=-s0*s0+s1*(s1+2*b1)+c}if(optionalPointOnRay){optionalPointOnRay.copy(this.direction).multiplyScalar(s0).add(this.origin)}if(optionalPointOnSegment){optionalPointOnSegment.copy(segDir).multiplyScalar(s1).add(segCenter)}return sqrDist}}(),intersectSphere:function(){var v1=new Vector3;return function intersectSphere(sphere,optionalTarget){v1.subVectors(sphere.center,this.origin);var tca=v1.dot(this.direction);var d2=v1.dot(v1)-tca*tca;var radius2=sphere.radius*sphere.radius;if(d2>radius2)return null;var thc=Math.sqrt(radius2-d2);var t0=tca-thc;var t1=tca+thc;if(t0<0&&t1<0)return null;if(t0<0)return this.at(t1,optionalTarget);return this.at(t0,optionalTarget)}}(),intersectsSphere:function(sphere){return this.distanceToPoint(sphere.center)<=sphere.radius},distanceToPlane:function(plane){var denominator=plane.normal.dot(this.direction);if(denominator===0){if(plane.distanceToPoint(this.origin)===0){return 0}return null}var t=-(this.origin.dot(plane.normal)+plane.constant)/denominator;return t>=0?t:null},intersectPlane:function(plane,optionalTarget){var t=this.distanceToPlane(plane);if(t===null){return null}return this.at(t,optionalTarget)},intersectsPlane:function(plane){var distToPoint=plane.distanceToPoint(this.origin);if(distToPoint===0){return true}var denominator=plane.normal.dot(this.direction);if(denominator*distToPoint<0){return true}return false},intersectBox:function(box,optionalTarget){var tmin,tmax,tymin,tymax,tzmin,tzmax;var invdirx=1/this.direction.x,invdiry=1/this.direction.y,invdirz=1/this.direction.z;var origin=this.origin;if(invdirx>=0){tmin=(box.min.x-origin.x)*invdirx;tmax=(box.max.x-origin.x)*invdirx}else{tmin=(box.max.x-origin.x)*invdirx;tmax=(box.min.x-origin.x)*invdirx}if(invdiry>=0){tymin=(box.min.y-origin.y)*invdiry;tymax=(box.max.y-origin.y)*invdiry}else{tymin=(box.max.y-origin.y)*invdiry;tymax=(box.min.y-origin.y)*invdiry}if(tmin>tymax||tymin>tmax)return null;if(tymin>tmin||tmin!==tmin)tmin=tymin;if(tymax<tmax||tmax!==tmax)tmax=tymax;if(invdirz>=0){tzmin=(box.min.z-origin.z)*invdirz;tzmax=(box.max.z-origin.z)*invdirz}else{tzmin=(box.max.z-origin.z)*invdirz;tzmax=(box.min.z-origin.z)*invdirz}if(tmin>tzmax||tzmin>tmax)return null;if(tzmin>tmin||tmin!==tmin)tmin=tzmin;if(tzmax<tmax||tmax!==tmax)tmax=tzmax;if(tmax<0)return null;return this.at(tmin>=0?tmin:tmax,optionalTarget)},intersectsBox:function(){var v=new Vector3;return function intersectsBox(box){return this.intersectBox(box,v)!==null}}(),intersectTriangle:function(){var diff=new Vector3;var edge1=new Vector3;var edge2=new Vector3;var normal=new Vector3;return function intersectTriangle(a,b,c,backfaceCulling,optionalTarget){edge1.subVectors(b,a);edge2.subVectors(c,a);normal.crossVectors(edge1,edge2);var DdN=this.direction.dot(normal);var sign;if(DdN>0){if(backfaceCulling)return null;sign=1}else if(DdN<0){sign=-1;DdN=-DdN}else{return null}diff.subVectors(this.origin,a);var DdQxE2=sign*this.direction.dot(edge2.crossVectors(diff,edge2));if(DdQxE2<0){return null}var DdE1xQ=sign*this.direction.dot(edge1.cross(diff));if(DdE1xQ<0){return null}if(DdQxE2+DdE1xQ>DdN){return null}var QdN=-sign*diff.dot(normal);if(QdN<0){return null}return this.at(QdN/DdN,optionalTarget)}}(),applyMatrix4:function(matrix4){this.origin.applyMatrix4(matrix4);this.direction.transformDirection(matrix4);return this},equals:function(ray){return ray.origin.equals(this.origin)&&ray.direction.equals(this.direction)}});function Line3(start,end){this.start=start!==undefined?start:new Vector3;this.end=end!==undefined?end:new Vector3}Object.assign(Line3.prototype,{set:function(start,end){this.start.copy(start);this.end.copy(end);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(line){this.start.copy(line.start);this.end.copy(line.end);return this},getCenter:function(optionalTarget){var result=optionalTarget||new Vector3;return result.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(optionalTarget){var result=optionalTarget||new Vector3;return result.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(t,optionalTarget){var result=optionalTarget||new Vector3;return this.delta(result).multiplyScalar(t).add(this.start)},closestPointToPointParameter:function(){var startP=new Vector3;var startEnd=new Vector3;return function closestPointToPointParameter(point,clampToLine){startP.subVectors(point,this.start);startEnd.subVectors(this.end,this.start);var startEnd2=startEnd.dot(startEnd);var startEnd_startP=startEnd.dot(startP);var t=startEnd_startP/startEnd2;if(clampToLine){t=_Math.clamp(t,0,1)}return t}}(),closestPointToPoint:function(point,clampToLine,optionalTarget){var t=this.closestPointToPointParameter(point,clampToLine);var result=optionalTarget||new Vector3;return this.delta(result).multiplyScalar(t).add(this.start)},applyMatrix4:function(matrix){this.start.applyMatrix4(matrix);this.end.applyMatrix4(matrix);return this},equals:function(line){return line.start.equals(this.start)&&line.end.equals(this.end)}});function Triangle(a,b,c){this.a=a!==undefined?a:new Vector3;this.b=b!==undefined?b:new Vector3;this.c=c!==undefined?c:new Vector3}Object.assign(Triangle,{normal:function(){var v0=new Vector3;return function normal(a,b,c,optionalTarget){var result=optionalTarget||new Vector3;result.subVectors(c,b);v0.subVectors(a,b);result.cross(v0);var resultLengthSq=result.lengthSq();if(resultLengthSq>0){return result.multiplyScalar(1/Math.sqrt(resultLengthSq))}return result.set(0,0,0)}}(),barycoordFromPoint:function(){var v0=new Vector3;var v1=new Vector3;var v2=new Vector3;return function barycoordFromPoint(point,a,b,c,optionalTarget){v0.subVectors(c,a);v1.subVectors(b,a);v2.subVectors(point,a);var dot00=v0.dot(v0);var dot01=v0.dot(v1);var dot02=v0.dot(v2);var dot11=v1.dot(v1);var dot12=v1.dot(v2);var denom=dot00*dot11-dot01*dot01;var result=optionalTarget||new Vector3;if(denom===0){return result.set(-2,-1,-1)}var invDenom=1/denom;var u=(dot11*dot02-dot01*dot12)*invDenom;var v=(dot00*dot12-dot01*dot02)*invDenom;return result.set(1-u-v,v,u)}}(),containsPoint:function(){var v1=new Vector3;return function containsPoint(point,a,b,c){var result=Triangle.barycoordFromPoint(point,a,b,c,v1);return result.x>=0&&result.y>=0&&result.x+result.y<=1}}()});Object.assign(Triangle.prototype,{set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(points,i0,i1,i2){this.a.copy(points[i0]);this.b.copy(points[i1]);this.c.copy(points[i2]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(triangle){this.a.copy(triangle.a);this.b.copy(triangle.b);this.c.copy(triangle.c);return this},area:function(){var v0=new Vector3;var v1=new Vector3;return function area(){v0.subVectors(this.c,this.b);v1.subVectors(this.a,this.b);return v0.cross(v1).length()*.5}}(),midpoint:function(optionalTarget){var result=optionalTarget||new Vector3;return result.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(optionalTarget){return Triangle.normal(this.a,this.b,this.c,optionalTarget)},plane:function(optionalTarget){var result=optionalTarget||new Plane;return result.setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(point,optionalTarget){return Triangle.barycoordFromPoint(point,this.a,this.b,this.c,optionalTarget)},containsPoint:function(point){return Triangle.containsPoint(point,this.a,this.b,this.c)},closestPointToPoint:function(){var plane=new Plane;var edgeList=[new Line3,new Line3,new Line3];var projectedPoint=new Vector3;var closestPoint=new Vector3;return function closestPointToPoint(point,optionalTarget){var result=optionalTarget||new Vector3;var minDistance=Infinity;plane.setFromCoplanarPoints(this.a,this.b,this.c);plane.projectPoint(point,projectedPoint);if(this.containsPoint(projectedPoint)===true){result.copy(projectedPoint)}else{edgeList[0].set(this.a,this.b);edgeList[1].set(this.b,this.c);edgeList[2].set(this.c,this.a);for(var i=0;i<edgeList.length;i++){edgeList[i].closestPointToPoint(projectedPoint,true,closestPoint);var distance=projectedPoint.distanceToSquared(closestPoint);if(distance<minDistance){minDistance=distance;result.copy(closestPoint)}}}return result}}(),equals:function(triangle){return triangle.a.equals(this.a)&&triangle.b.equals(this.b)&&triangle.c.equals(this.c)}});function Mesh(geometry,material){Object3D.call(this);this.type="Mesh";this.geometry=geometry!==undefined?geometry:new BufferGeometry;this.material=material!==undefined?material:new MeshBasicMaterial({color:Math.random()*16777215});this.drawMode=TrianglesDrawMode;this.updateMorphTargets()}Mesh.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Mesh,isMesh:true,setDrawMode:function(value){this.drawMode=value},copy:function(source){Object3D.prototype.copy.call(this,source);this.drawMode=source.drawMode;return this},updateMorphTargets:function(){var geometry=this.geometry;var m,ml,name;if(geometry.isBufferGeometry){var morphAttributes=geometry.morphAttributes;var keys=Object.keys(morphAttributes);if(keys.length>0){var morphAttribute=morphAttributes[keys[0]];if(morphAttribute!==undefined){this.morphTargetInfluences=[];this.morphTargetDictionary={};for(m=0,ml=morphAttribute.length;m<ml;m++){name=morphAttribute[m].name||String(m);this.morphTargetInfluences.push(0);this.morphTargetDictionary[name]=m}}}}else{var morphTargets=geometry.morphTargets;if(morphTargets!==undefined&&morphTargets.length>0){this.morphTargetInfluences=[];this.morphTargetDictionary={};for(m=0,ml=morphTargets.length;m<ml;m++){name=morphTargets[m].name||String(m);this.morphTargetInfluences.push(0);this.morphTargetDictionary[name]=m}}}},raycast:function(){var inverseMatrix=new Matrix4;var ray=new Ray;var sphere=new Sphere;var vA=new Vector3;var vB=new Vector3;var vC=new Vector3;var tempA=new Vector3;var tempB=new Vector3;var tempC=new Vector3;var uvA=new Vector2;var uvB=new Vector2;var uvC=new Vector2;var barycoord=new Vector3;var intersectionPoint=new Vector3;var intersectionPointWorld=new Vector3;function uvIntersection(point,p1,p2,p3,uv1,uv2,uv3){Triangle.barycoordFromPoint(point,p1,p2,p3,barycoord);uv1.multiplyScalar(barycoord.x);uv2.multiplyScalar(barycoord.y);uv3.multiplyScalar(barycoord.z);uv1.add(uv2).add(uv3);return uv1.clone()}function checkIntersection(object,raycaster,ray,pA,pB,pC,point){var intersect;var material=object.material;if(material.side===BackSide){intersect=ray.intersectTriangle(pC,pB,pA,true,point)}else{intersect=ray.intersectTriangle(pA,pB,pC,material.side!==DoubleSide,point)}if(intersect===null)return null;intersectionPointWorld.copy(point);intersectionPointWorld.applyMatrix4(object.matrixWorld);var distance=raycaster.ray.origin.distanceTo(intersectionPointWorld);if(distance<raycaster.near||distance>raycaster.far)return null;return{distance:distance,point:intersectionPointWorld.clone(),object:object}}function checkBufferGeometryIntersection(object,raycaster,ray,position,uv,a,b,c){vA.fromBufferAttribute(position,a);vB.fromBufferAttribute(position,b);vC.fromBufferAttribute(position,c);var intersection=checkIntersection(object,raycaster,ray,vA,vB,vC,intersectionPoint);if(intersection){if(uv){uvA.fromBufferAttribute(uv,a);uvB.fromBufferAttribute(uv,b);uvC.fromBufferAttribute(uv,c);intersection.uv=uvIntersection(intersectionPoint,vA,vB,vC,uvA,uvB,uvC)}intersection.face=new Face3(a,b,c,Triangle.normal(vA,vB,vC));intersection.faceIndex=a}return intersection}return function raycast(raycaster,intersects){var geometry=this.geometry;var material=this.material;var matrixWorld=this.matrixWorld;if(material===undefined)return;if(geometry.boundingSphere===null)geometry.computeBoundingSphere();sphere.copy(geometry.boundingSphere);sphere.applyMatrix4(matrixWorld);if(raycaster.ray.intersectsSphere(sphere)===false)return;inverseMatrix.getInverse(matrixWorld);ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);if(geometry.boundingBox!==null){if(ray.intersectsBox(geometry.boundingBox)===false)return}var intersection;if(geometry.isBufferGeometry){var a,b,c;var index=geometry.index;var position=geometry.attributes.position;var uv=geometry.attributes.uv;var i,l;if(index!==null){for(i=0,l=index.count;i<l;i+=3){a=index.getX(i);b=index.getX(i+1);c=index.getX(i+2);intersection=checkBufferGeometryIntersection(this,raycaster,ray,position,uv,a,b,c);if(intersection){intersection.faceIndex=Math.floor(i/3);intersects.push(intersection)}}}else{for(i=0,l=position.count;i<l;i+=3){a=i;b=i+1;c=i+2;intersection=checkBufferGeometryIntersection(this,raycaster,ray,position,uv,a,b,c);if(intersection){intersection.index=a;intersects.push(intersection)}}}}else if(geometry.isGeometry){var fvA,fvB,fvC;var isMultiMaterial=Array.isArray(material);var vertices=geometry.vertices;var faces=geometry.faces;var uvs;var faceVertexUvs=geometry.faceVertexUvs[0];if(faceVertexUvs.length>0)uvs=faceVertexUvs;for(var f=0,fl=faces.length;f<fl;f++){var face=faces[f];var faceMaterial=isMultiMaterial?material[face.materialIndex]:material;if(faceMaterial===undefined)continue;fvA=vertices[face.a];fvB=vertices[face.b];fvC=vertices[face.c];if(faceMaterial.morphTargets===true){var morphTargets=geometry.morphTargets;var morphInfluences=this.morphTargetInfluences;vA.set(0,0,0);vB.set(0,0,0);vC.set(0,0,0);for(var t=0,tl=morphTargets.length;t<tl;t++){var influence=morphInfluences[t];if(influence===0)continue;var targets=morphTargets[t].vertices;vA.addScaledVector(tempA.subVectors(targets[face.a],fvA),influence);vB.addScaledVector(tempB.subVectors(targets[face.b],fvB),influence);vC.addScaledVector(tempC.subVectors(targets[face.c],fvC),influence)}vA.add(fvA);vB.add(fvB);vC.add(fvC);fvA=vA;fvB=vB;fvC=vC}intersection=checkIntersection(this,raycaster,ray,fvA,fvB,fvC,intersectionPoint);if(intersection){if(uvs&&uvs[f]){var uvs_f=uvs[f];uvA.copy(uvs_f[0]);uvB.copy(uvs_f[1]);uvC.copy(uvs_f[2]);intersection.uv=uvIntersection(intersectionPoint,fvA,fvB,fvC,uvA,uvB,uvC)}intersection.face=face;intersection.faceIndex=f;intersects.push(intersection)}}}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}});function WebGLBackground(renderer,state,objects,premultipliedAlpha){var clearColor=new Color(0);var clearAlpha=0;var planeCamera,planeMesh;var boxCamera,boxMesh;function render(scene,camera,forceClear){var background=scene.background;if(background===null){setClear(clearColor,clearAlpha)}else if(background&&background.isColor){setClear(background,1);forceClear=true}if(renderer.autoClear||forceClear){renderer.clear(renderer.autoClearColor,renderer.autoClearDepth,renderer.autoClearStencil)}if(background&&background.isCubeTexture){if(boxCamera===undefined){boxCamera=new PerspectiveCamera;boxMesh=new Mesh(new BoxBufferGeometry(5,5,5),new ShaderMaterial({uniforms:ShaderLib.cube.uniforms,vertexShader:ShaderLib.cube.vertexShader,fragmentShader:ShaderLib.cube.fragmentShader,side:BackSide,depthTest:false,depthWrite:false,fog:false}))}boxCamera.projectionMatrix.copy(camera.projectionMatrix);boxCamera.matrixWorld.extractRotation(camera.matrixWorld);boxCamera.matrixWorldInverse.getInverse(boxCamera.matrixWorld);boxMesh.material.uniforms["tCube"].value=background;boxMesh.modelViewMatrix.multiplyMatrices(boxCamera.matrixWorldInverse,boxMesh.matrixWorld);objects.update(boxMesh);renderer.renderBufferDirect(boxCamera,null,boxMesh.geometry,boxMesh.material,boxMesh,null)}else if(background&&background.isTexture){if(planeCamera===undefined){planeCamera=new OrthographicCamera(-1,1,1,-1,0,1);planeMesh=new Mesh(new PlaneBufferGeometry(2,2),new MeshBasicMaterial({depthTest:false,depthWrite:false,fog:false}))}planeMesh.material.map=background;objects.update(planeMesh);renderer.renderBufferDirect(planeCamera,null,planeMesh.geometry,planeMesh.material,planeMesh,null)}}function setClear(color,alpha){state.buffers.color.setClear(color.r,color.g,color.b,alpha,premultipliedAlpha)}return{getClearColor:function(){return clearColor},setClearColor:function(color,alpha){clearColor.set(color);clearAlpha=alpha!==undefined?alpha:1;setClear(clearColor,clearAlpha)},getClearAlpha:function(){return clearAlpha},setClearAlpha:function(alpha){clearAlpha=alpha;setClear(clearColor,clearAlpha)},render:render}}function painterSortStable(a,b){if(a.renderOrder!==b.renderOrder){return a.renderOrder-b.renderOrder}else if(a.program&&b.program&&a.program!==b.program){return a.program.id-b.program.id}else if(a.material.id!==b.material.id){return a.material.id-b.material.id}else if(a.z!==b.z){return a.z-b.z}else{return a.id-b.id}}function reversePainterSortStable(a,b){if(a.renderOrder!==b.renderOrder){return a.renderOrder-b.renderOrder}if(a.z!==b.z){return b.z-a.z}else{return a.id-b.id}}function WebGLRenderList(){var opaque=[];var opaqueLastIndex=-1;var transparent=[];var transparentLastIndex=-1;function init(){opaqueLastIndex=-1;transparentLastIndex=-1}function push(object,geometry,material,z,group){var array,index;if(material.transparent){array=transparent;index=++transparentLastIndex}else{array=opaque;index=++opaqueLastIndex}var renderItem=array[index];if(renderItem){renderItem.id=object.id;renderItem.object=object;renderItem.geometry=geometry;renderItem.material=material;renderItem.program=material.program;renderItem.renderOrder=object.renderOrder;renderItem.z=z;renderItem.group=group}else{renderItem={id:object.id,object:object,geometry:geometry,material:material,program:material.program,renderOrder:object.renderOrder,z:z,group:group};array.push(renderItem)}}function finish(){opaque.length=opaqueLastIndex+1;transparent.length=transparentLastIndex+1}function sort(){opaque.sort(painterSortStable);transparent.sort(reversePainterSortStable)}return{opaque:opaque,transparent:transparent,init:init,push:push,finish:finish,sort:sort}}function WebGLRenderLists(){var lists={};function get(scene,camera){var hash=scene.id+","+camera.id;var list=lists[hash];if(list===undefined){list=new WebGLRenderList;lists[hash]=list}return list}function dispose(){lists={}}return{get:get,dispose:dispose}}function WebGLIndexedBufferRenderer(gl,extensions,infoRender){var mode;function setMode(value){mode=value}var type,bytesPerElement;function setIndex(value){type=value.type;bytesPerElement=value.bytesPerElement}function render(start,count){gl.drawElements(mode,count,type,start*bytesPerElement);infoRender.calls++;infoRender.vertices+=count;if(mode===gl.TRIANGLES)infoRender.faces+=count/3}function renderInstances(geometry,start,count){var extension=extensions.get("ANGLE_instanced_arrays");if(extension===null){console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}extension.drawElementsInstancedANGLE(mode,count,type,start*bytesPerElement,geometry.maxInstancedCount);infoRender.calls++;infoRender.vertices+=count*geometry.maxInstancedCount;if(mode===gl.TRIANGLES)infoRender.faces+=geometry.maxInstancedCount*count/3}this.setMode=setMode;this.setIndex=setIndex;this.render=render;this.renderInstances=renderInstances}function WebGLBufferRenderer(gl,extensions,infoRender){var mode;function setMode(value){mode=value}function render(start,count){gl.drawArrays(mode,start,count);infoRender.calls++;infoRender.vertices+=count;if(mode===gl.TRIANGLES)infoRender.faces+=count/3}function renderInstances(geometry,start,count){var extension=extensions.get("ANGLE_instanced_arrays");if(extension===null){console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}var position=geometry.attributes.position;if(position.isInterleavedBufferAttribute){count=position.data.count;extension.drawArraysInstancedANGLE(mode,0,count,geometry.maxInstancedCount)}else{extension.drawArraysInstancedANGLE(mode,start,count,geometry.maxInstancedCount)}infoRender.calls++;infoRender.vertices+=count*geometry.maxInstancedCount;if(mode===gl.TRIANGLES)infoRender.faces+=geometry.maxInstancedCount*count/3}this.setMode=setMode;this.render=render;this.renderInstances=renderInstances}function WebGLGeometries(gl,attributes,infoMemory){var geometries={};var wireframeAttributes={};function onGeometryDispose(event){var geometry=event.target;var buffergeometry=geometries[geometry.id];if(buffergeometry.index!==null){attributes.remove(buffergeometry.index)}for(var name in buffergeometry.attributes){attributes.remove(buffergeometry.attributes[name])}geometry.removeEventListener("dispose",onGeometryDispose);delete geometries[geometry.id];var attribute=wireframeAttributes[geometry.id];if(attribute){attributes.remove(attribute);delete wireframeAttributes[geometry.id]}attribute=wireframeAttributes[buffergeometry.id];if(attribute){attributes.remove(attribute);delete wireframeAttributes[buffergeometry.id]}infoMemory.geometries--}function get(object,geometry){var buffergeometry=geometries[geometry.id];if(buffergeometry)return buffergeometry;geometry.addEventListener("dispose",onGeometryDispose);if(geometry.isBufferGeometry){buffergeometry=geometry}else if(geometry.isGeometry){if(geometry._bufferGeometry===undefined){geometry._bufferGeometry=(new BufferGeometry).setFromObject(object)}buffergeometry=geometry._bufferGeometry}geometries[geometry.id]=buffergeometry;infoMemory.geometries++;return buffergeometry}function update(geometry){var index=geometry.index;var geometryAttributes=geometry.attributes;if(index!==null){attributes.update(index,gl.ELEMENT_ARRAY_BUFFER)}for(var name in geometryAttributes){attributes.update(geometryAttributes[name],gl.ARRAY_BUFFER)}var morphAttributes=geometry.morphAttributes;for(var name in morphAttributes){var array=morphAttributes[name];for(var i=0,l=array.length;i<l;i++){attributes.update(array[i],gl.ARRAY_BUFFER)}}}function getWireframeAttribute(geometry){var attribute=wireframeAttributes[geometry.id];if(attribute)return attribute;var indices=[];var geometryIndex=geometry.index;var geometryAttributes=geometry.attributes;if(geometryIndex!==null){var array=geometryIndex.array;for(var i=0,l=array.length;i<l;i+=3){var a=array[i+0];var b=array[i+1];var c=array[i+2];indices.push(a,b,b,c,c,a)}}else{var array=geometryAttributes.position.array;for(var i=0,l=array.length/3-1;i<l;i+=3){var a=i+0;var b=i+1;var c=i+2;indices.push(a,b,b,c,c,a)}}attribute=new(arrayMax(indices)>65535?Uint32BufferAttribute:Uint16BufferAttribute)(indices,1);attributes.update(attribute,gl.ELEMENT_ARRAY_BUFFER);wireframeAttributes[geometry.id]=attribute;return attribute}return{get:get,update:update,getWireframeAttribute:getWireframeAttribute}}function WebGLLights(){var lights={};return{get:function(light){if(lights[light.id]!==undefined){return lights[light.id]}var uniforms;switch(light.type){case"DirectionalLight":uniforms={direction:new Vector3,color:new Color,shadow:false,shadowBias:0,shadowRadius:1,shadowMapSize:new Vector2};break;case"SpotLight":uniforms={position:new Vector3,direction:new Vector3,color:new Color,distance:0,coneCos:0,penumbraCos:0,decay:0,shadow:false,shadowBias:0,shadowRadius:1,shadowMapSize:new Vector2};break;case"PointLight":uniforms={position:new Vector3,color:new Color,distance:0,decay:0,shadow:false,shadowBias:0,shadowRadius:1,shadowMapSize:new Vector2};break;case"HemisphereLight":uniforms={direction:new Vector3,skyColor:new Color,groundColor:new Color};break;case"RectAreaLight":uniforms={color:new Color,position:new Vector3,halfWidth:new Vector3,halfHeight:new Vector3};break}lights[light.id]=uniforms;return uniforms}}}function WebGLObjects(gl,geometries,infoRender){var updateList={};function update(object){var frame=infoRender.frame;var geometry=object.geometry;var buffergeometry=geometries.get(object,geometry);if(updateList[buffergeometry.id]!==frame){if(geometry.isGeometry){buffergeometry.updateFromObject(object)}geometries.update(buffergeometry);updateList[buffergeometry.id]=frame}return buffergeometry}function clear(){updateList={}}return{update:update,clear:clear}}function addLineNumbers(string){var lines=string.split("\n");for(var i=0;i<lines.length;i++){lines[i]=i+1+": "+lines[i]}return lines.join("\n")}function WebGLShader(gl,type,string){var shader=gl.createShader(type);gl.shaderSource(shader,string);gl.compileShader(shader);if(gl.getShaderParameter(shader,gl.COMPILE_STATUS)===false){console.error("THREE.WebGLShader: Shader couldn't compile.")}if(gl.getShaderInfoLog(shader)!==""){console.warn("THREE.WebGLShader: gl.getShaderInfoLog()",type===gl.VERTEX_SHADER?"vertex":"fragment",gl.getShaderInfoLog(shader),addLineNumbers(string))}return shader}var programIdCount=0;function getEncodingComponents(encoding){switch(encoding){case LinearEncoding:return["Linear","( value )"];case sRGBEncoding:return["sRGB","( value )"];case RGBEEncoding:return["RGBE","( value )"];case RGBM7Encoding:return["RGBM","( value, 7.0 )"];case RGBM16Encoding:return["RGBM","( value, 16.0 )"];case RGBDEncoding:return["RGBD","( value, 256.0 )"];case GammaEncoding:return["Gamma","( value, float( GAMMA_FACTOR ) )"];default:throw new Error("unsupported encoding: "+encoding)}}function getTexelDecodingFunction(functionName,encoding){var components=getEncodingComponents(encoding);return"vec4 "+functionName+"( vec4 value ) { return "+components[0]+"ToLinear"+components[1]+"; }"}function getTexelEncodingFunction(functionName,encoding){var components=getEncodingComponents(encoding);return"vec4 "+functionName+"( vec4 value ) { return LinearTo"+components[0]+components[1]+"; }"}function getToneMappingFunction(functionName,toneMapping){var toneMappingName;switch(toneMapping){case LinearToneMapping:toneMappingName="Linear";break;case ReinhardToneMapping:toneMappingName="Reinhard";break;case Uncharted2ToneMapping:toneMappingName="Uncharted2";break;case CineonToneMapping:toneMappingName="OptimizedCineon";break;default:throw new Error("unsupported toneMapping: "+toneMapping)}return"vec3 "+functionName+"( vec3 color ) { return "+toneMappingName+"ToneMapping( color ); }"}function generateExtensions(extensions,parameters,rendererExtensions){extensions=extensions||{};var chunks=[extensions.derivatives||parameters.envMapCubeUV||parameters.bumpMap||parameters.normalMap||parameters.flatShading?"#extension GL_OES_standard_derivatives : enable":"",(extensions.fragDepth||parameters.logarithmicDepthBuffer)&&rendererExtensions.get("EXT_frag_depth")?"#extension GL_EXT_frag_depth : enable":"",extensions.drawBuffers&&rendererExtensions.get("WEBGL_draw_buffers")?"#extension GL_EXT_draw_buffers : require":"",(extensions.shaderTextureLOD||parameters.envMap)&&rendererExtensions.get("EXT_shader_texture_lod")?"#extension GL_EXT_shader_texture_lod : enable":""];return chunks.filter(filterEmptyLine).join("\n")}function generateDefines(defines){var chunks=[];for(var name in defines){var value=defines[name];if(value===false)continue;chunks.push("#define "+name+" "+value)}return chunks.join("\n")}function fetchAttributeLocations(gl,program,identifiers){var attributes={};var n=gl.getProgramParameter(program,gl.ACTIVE_ATTRIBUTES);for(var i=0;i<n;i++){var info=gl.getActiveAttrib(program,i);var name=info.name;attributes[name]=gl.getAttribLocation(program,name)}return attributes}function filterEmptyLine(string){return string!==""}function replaceLightNums(string,parameters){return string.replace(/NUM_DIR_LIGHTS/g,parameters.numDirLights).replace(/NUM_SPOT_LIGHTS/g,parameters.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,parameters.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,parameters.numPointLights).replace(/NUM_HEMI_LIGHTS/g,parameters.numHemiLights)}function parseIncludes(string){var pattern=/^[ \t]*#include +<([\w\d.]+)>/gm;function replace(match,include){var replace=ShaderChunk[include];if(replace===undefined){throw new Error("Can not resolve #include <"+include+">")}return parseIncludes(replace)}return string.replace(pattern,replace)}function unrollLoops(string){var pattern=/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g;function replace(match,start,end,snippet){var unroll="";for(var i=parseInt(start);i<parseInt(end);i++){unroll+=snippet.replace(/\[ i \]/g,"[ "+i+" ]")}return unroll}return string.replace(pattern,replace)}function WebGLProgram(renderer,code,material,shader,parameters){var gl=renderer.context;var extensions=material.extensions;var defines=material.defines;var vertexShader=shader.vertexShader;var fragmentShader=shader.fragmentShader;var shadowMapTypeDefine="SHADOWMAP_TYPE_BASIC";if(parameters.shadowMapType===PCFShadowMap){shadowMapTypeDefine="SHADOWMAP_TYPE_PCF"}else if(parameters.shadowMapType===PCFSoftShadowMap){shadowMapTypeDefine="SHADOWMAP_TYPE_PCF_SOFT"}var envMapTypeDefine="ENVMAP_TYPE_CUBE";var envMapModeDefine="ENVMAP_MODE_REFLECTION";var envMapBlendingDefine="ENVMAP_BLENDING_MULTIPLY";if(parameters.envMap){switch(material.envMap.mapping){case CubeReflectionMapping:case CubeRefractionMapping:envMapTypeDefine="ENVMAP_TYPE_CUBE";break;case CubeUVReflectionMapping:case CubeUVRefractionMapping:envMapTypeDefine="ENVMAP_TYPE_CUBE_UV";break;case EquirectangularReflectionMapping:case EquirectangularRefractionMapping:envMapTypeDefine="ENVMAP_TYPE_EQUIREC";break;case SphericalReflectionMapping:envMapTypeDefine="ENVMAP_TYPE_SPHERE";break}switch(material.envMap.mapping){case CubeRefractionMapping:case EquirectangularRefractionMapping:envMapModeDefine="ENVMAP_MODE_REFRACTION";break}switch(material.combine){case MultiplyOperation:envMapBlendingDefine="ENVMAP_BLENDING_MULTIPLY";break;case MixOperation:envMapBlendingDefine="ENVMAP_BLENDING_MIX";break;case AddOperation:envMapBlendingDefine="ENVMAP_BLENDING_ADD";break}}var gammaFactorDefine=renderer.gammaFactor>0?renderer.gammaFactor:1;var customExtensions=generateExtensions(extensions,parameters,renderer.extensions);var customDefines=generateDefines(defines);var program=gl.createProgram();var prefixVertex,prefixFragment;if(material.isRawShaderMaterial){prefixVertex=[customDefines,"\n"].filter(filterEmptyLine).join("\n");prefixFragment=[customExtensions,customDefines,"\n"].filter(filterEmptyLine).join("\n")}else{prefixVertex=["precision "+parameters.precision+" float;","precision "+parameters.precision+" int;","#define SHADER_NAME "+shader.name,customDefines,parameters.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+gammaFactorDefine,"#define MAX_BONES "+parameters.maxBones,parameters.useFog&¶meters.fog?"#define USE_FOG":"",parameters.useFog&¶meters.fogExp?"#define FOG_EXP2":"",parameters.map?"#define USE_MAP":"",parameters.envMap?"#define USE_ENVMAP":"",parameters.envMap?"#define "+envMapModeDefine:"",parameters.lightMap?"#define USE_LIGHTMAP":"",parameters.aoMap?"#define USE_AOMAP":"",parameters.emissiveMap?"#define USE_EMISSIVEMAP":"",parameters.bumpMap?"#define USE_BUMPMAP":"",parameters.normalMap?"#define USE_NORMALMAP":"",parameters.displacementMap&¶meters.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",parameters.specularMap?"#define USE_SPECULARMAP":"",parameters.roughnessMap?"#define USE_ROUGHNESSMAP":"",parameters.metalnessMap?"#define USE_METALNESSMAP":"",parameters.alphaMap?"#define USE_ALPHAMAP":"",parameters.vertexColors?"#define USE_COLOR":"",parameters.flatShading?"#define FLAT_SHADED":"",parameters.skinning?"#define USE_SKINNING":"",parameters.useVertexTexture?"#define BONE_TEXTURE":"",parameters.morphTargets?"#define USE_MORPHTARGETS":"",parameters.morphNormals&¶meters.flatShading===false?"#define USE_MORPHNORMALS":"",parameters.doubleSided?"#define DOUBLE_SIDED":"",parameters.flipSided?"#define FLIP_SIDED":"","#define NUM_CLIPPING_PLANES "+parameters.numClippingPlanes,parameters.shadowMapEnabled?"#define USE_SHADOWMAP":"",parameters.shadowMapEnabled?"#define "+shadowMapTypeDefine:"",parameters.sizeAttenuation?"#define USE_SIZEATTENUATION":"",parameters.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",parameters.logarithmicDepthBuffer&&renderer.extensions.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_COLOR"," attribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS"," 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","\n"].filter(filterEmptyLine).join("\n");
prefixFragment=[customExtensions,"precision "+parameters.precision+" float;","precision "+parameters.precision+" int;","#define SHADER_NAME "+shader.name,customDefines,parameters.alphaTest?"#define ALPHATEST "+parameters.alphaTest:"","#define GAMMA_FACTOR "+gammaFactorDefine,parameters.useFog&¶meters.fog?"#define USE_FOG":"",parameters.useFog&¶meters.fogExp?"#define FOG_EXP2":"",parameters.map?"#define USE_MAP":"",parameters.envMap?"#define USE_ENVMAP":"",parameters.envMap?"#define "+envMapTypeDefine:"",parameters.envMap?"#define "+envMapModeDefine:"",parameters.envMap?"#define "+envMapBlendingDefine:"",parameters.lightMap?"#define USE_LIGHTMAP":"",parameters.aoMap?"#define USE_AOMAP":"",parameters.emissiveMap?"#define USE_EMISSIVEMAP":"",parameters.bumpMap?"#define USE_BUMPMAP":"",parameters.normalMap?"#define USE_NORMALMAP":"",parameters.specularMap?"#define USE_SPECULARMAP":"",parameters.roughnessMap?"#define USE_ROUGHNESSMAP":"",parameters.metalnessMap?"#define USE_METALNESSMAP":"",parameters.alphaMap?"#define USE_ALPHAMAP":"",parameters.vertexColors?"#define USE_COLOR":"",parameters.gradientMap?"#define USE_GRADIENTMAP":"",parameters.flatShading?"#define FLAT_SHADED":"",parameters.doubleSided?"#define DOUBLE_SIDED":"",parameters.flipSided?"#define FLIP_SIDED":"","#define NUM_CLIPPING_PLANES "+parameters.numClippingPlanes,"#define UNION_CLIPPING_PLANES "+(parameters.numClippingPlanes-parameters.numClipIntersection),parameters.shadowMapEnabled?"#define USE_SHADOWMAP":"",parameters.shadowMapEnabled?"#define "+shadowMapTypeDefine:"",parameters.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",parameters.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",parameters.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",parameters.logarithmicDepthBuffer&&renderer.extensions.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"",parameters.envMap&&renderer.extensions.get("EXT_shader_texture_lod")?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;",parameters.toneMapping!==NoToneMapping?"#define TONE_MAPPING":"",parameters.toneMapping!==NoToneMapping?ShaderChunk["tonemapping_pars_fragment"]:"",parameters.toneMapping!==NoToneMapping?getToneMappingFunction("toneMapping",parameters.toneMapping):"",parameters.dithering?"#define DITHERING":"",parameters.outputEncoding||parameters.mapEncoding||parameters.envMapEncoding||parameters.emissiveMapEncoding?ShaderChunk["encodings_pars_fragment"]:"",parameters.mapEncoding?getTexelDecodingFunction("mapTexelToLinear",parameters.mapEncoding):"",parameters.envMapEncoding?getTexelDecodingFunction("envMapTexelToLinear",parameters.envMapEncoding):"",parameters.emissiveMapEncoding?getTexelDecodingFunction("emissiveMapTexelToLinear",parameters.emissiveMapEncoding):"",parameters.outputEncoding?getTexelEncodingFunction("linearToOutputTexel",parameters.outputEncoding):"",parameters.depthPacking?"#define DEPTH_PACKING "+material.depthPacking:"","\n"].filter(filterEmptyLine).join("\n")}vertexShader=parseIncludes(vertexShader);vertexShader=replaceLightNums(vertexShader,parameters);fragmentShader=parseIncludes(fragmentShader);fragmentShader=replaceLightNums(fragmentShader,parameters);if(!material.isShaderMaterial){vertexShader=unrollLoops(vertexShader);fragmentShader=unrollLoops(fragmentShader)}var vertexGlsl=prefixVertex+vertexShader;var fragmentGlsl=prefixFragment+fragmentShader;var glVertexShader=WebGLShader(gl,gl.VERTEX_SHADER,vertexGlsl);var glFragmentShader=WebGLShader(gl,gl.FRAGMENT_SHADER,fragmentGlsl);gl.attachShader(program,glVertexShader);gl.attachShader(program,glFragmentShader);if(material.index0AttributeName!==undefined){gl.bindAttribLocation(program,0,material.index0AttributeName)}else if(parameters.morphTargets===true){gl.bindAttribLocation(program,0,"position")}gl.linkProgram(program);var programLog=gl.getProgramInfoLog(program);var vertexLog=gl.getShaderInfoLog(glVertexShader);var fragmentLog=gl.getShaderInfoLog(glFragmentShader);var runnable=true;var haveDiagnostics=true;if(gl.getProgramParameter(program,gl.LINK_STATUS)===false){runnable=false;console.error("THREE.WebGLProgram: shader error: ",gl.getError(),"gl.VALIDATE_STATUS",gl.getProgramParameter(program,gl.VALIDATE_STATUS),"gl.getProgramInfoLog",programLog,vertexLog,fragmentLog)}else if(programLog!==""){console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",programLog)}else if(vertexLog===""||fragmentLog===""){haveDiagnostics=false}if(haveDiagnostics){this.diagnostics={runnable:runnable,material:material,programLog:programLog,vertexShader:{log:vertexLog,prefix:prefixVertex},fragmentShader:{log:fragmentLog,prefix:prefixFragment}}}gl.deleteShader(glVertexShader);gl.deleteShader(glFragmentShader);var cachedUniforms;this.getUniforms=function(){if(cachedUniforms===undefined){cachedUniforms=new WebGLUniforms(gl,program,renderer)}return cachedUniforms};var cachedAttributes;this.getAttributes=function(){if(cachedAttributes===undefined){cachedAttributes=fetchAttributeLocations(gl,program)}return cachedAttributes};this.destroy=function(){gl.deleteProgram(program);this.program=undefined};Object.defineProperties(this,{uniforms:{get:function(){console.warn("THREE.WebGLProgram: .uniforms is now .getUniforms().");return this.getUniforms()}},attributes:{get:function(){console.warn("THREE.WebGLProgram: .attributes is now .getAttributes().");return this.getAttributes()}}});this.id=programIdCount++;this.code=code;this.usedTimes=1;this.program=program;this.vertexShader=glVertexShader;this.fragmentShader=glFragmentShader;return this}function WebGLPrograms(renderer,capabilities){var programs=[];var shaderIDs={MeshDepthMaterial:"depth",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"phong",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points"};var parameterNames=["precision","supportsVertexTextures","map","mapEncoding","envMap","envMapMode","envMapEncoding","lightMap","aoMap","emissiveMap","emissiveMapEncoding","bumpMap","normalMap","displacementMap","specularMap","roughnessMap","metalnessMap","gradientMap","alphaMap","combine","vertexColors","fog","useFog","fogExp","flatShading","sizeAttenuation","logarithmicDepthBuffer","skinning","maxBones","useVertexTexture","morphTargets","morphNormals","maxMorphTargets","maxMorphNormals","premultipliedAlpha","numDirLights","numPointLights","numSpotLights","numHemiLights","numRectAreaLights","shadowMapEnabled","shadowMapType","toneMapping","physicallyCorrectLights","alphaTest","doubleSided","flipSided","numClippingPlanes","numClipIntersection","depthPacking","dithering"];function allocateBones(object){var skeleton=object.skeleton;var bones=skeleton.bones;if(capabilities.floatVertexTextures){return 1024}else{var nVertexUniforms=capabilities.maxVertexUniforms;var nVertexMatrices=Math.floor((nVertexUniforms-20)/4);var maxBones=Math.min(nVertexMatrices,bones.length);if(maxBones<bones.length){console.warn("THREE.WebGLRenderer: Skeleton has "+bones.length+" bones. This GPU supports "+maxBones+".");return 0}return maxBones}}function getTextureEncodingFromMap(map,gammaOverrideLinear){var encoding;if(!map){encoding=LinearEncoding}else if(map.isTexture){encoding=map.encoding}else if(map.isWebGLRenderTarget){console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.");encoding=map.texture.encoding}if(encoding===LinearEncoding&&gammaOverrideLinear){encoding=GammaEncoding}return encoding}this.getParameters=function(material,lights,fog,nClipPlanes,nClipIntersection,object){var shaderID=shaderIDs[material.type];var maxBones=object.isSkinnedMesh?allocateBones(object):0;var precision=renderer.getPrecision();if(material.precision!==null){precision=capabilities.getMaxPrecision(material.precision);if(precision!==material.precision){console.warn("THREE.WebGLProgram.getParameters:",material.precision,"not supported, using",precision,"instead.")}}var currentRenderTarget=renderer.getRenderTarget();var parameters={shaderID:shaderID,precision:precision,supportsVertexTextures:capabilities.vertexTextures,outputEncoding:getTextureEncodingFromMap(!currentRenderTarget?null:currentRenderTarget.texture,renderer.gammaOutput),map:!!material.map,mapEncoding:getTextureEncodingFromMap(material.map,renderer.gammaInput),envMap:!!material.envMap,envMapMode:material.envMap&&material.envMap.mapping,envMapEncoding:getTextureEncodingFromMap(material.envMap,renderer.gammaInput),envMapCubeUV:!!material.envMap&&(material.envMap.mapping===CubeUVReflectionMapping||material.envMap.mapping===CubeUVRefractionMapping),lightMap:!!material.lightMap,aoMap:!!material.aoMap,emissiveMap:!!material.emissiveMap,emissiveMapEncoding:getTextureEncodingFromMap(material.emissiveMap,renderer.gammaInput),bumpMap:!!material.bumpMap,normalMap:!!material.normalMap,displacementMap:!!material.displacementMap,roughnessMap:!!material.roughnessMap,metalnessMap:!!material.metalnessMap,specularMap:!!material.specularMap,alphaMap:!!material.alphaMap,gradientMap:!!material.gradientMap,combine:material.combine,vertexColors:material.vertexColors,fog:!!fog,useFog:material.fog,fogExp:fog&&fog.isFogExp2,flatShading:material.shading===FlatShading,sizeAttenuation:material.sizeAttenuation,logarithmicDepthBuffer:capabilities.logarithmicDepthBuffer,skinning:material.skinning&&maxBones>0,maxBones:maxBones,useVertexTexture:capabilities.floatVertexTextures,morphTargets:material.morphTargets,morphNormals:material.morphNormals,maxMorphTargets:renderer.maxMorphTargets,maxMorphNormals:renderer.maxMorphNormals,numDirLights:lights.directional.length,numPointLights:lights.point.length,numSpotLights:lights.spot.length,numRectAreaLights:lights.rectArea.length,numHemiLights:lights.hemi.length,numClippingPlanes:nClipPlanes,numClipIntersection:nClipIntersection,dithering:material.dithering,shadowMapEnabled:renderer.shadowMap.enabled&&object.receiveShadow&&lights.shadows.length>0,shadowMapType:renderer.shadowMap.type,toneMapping:renderer.toneMapping,physicallyCorrectLights:renderer.physicallyCorrectLights,premultipliedAlpha:material.premultipliedAlpha,alphaTest:material.alphaTest,doubleSided:material.side===DoubleSide,flipSided:material.side===BackSide,depthPacking:material.depthPacking!==undefined?material.depthPacking:false};return parameters};this.getProgramCode=function(material,parameters){var array=[];if(parameters.shaderID){array.push(parameters.shaderID)}else{array.push(material.fragmentShader);array.push(material.vertexShader)}if(material.defines!==undefined){for(var name in material.defines){array.push(name);array.push(material.defines[name])}}for(var i=0;i<parameterNames.length;i++){array.push(parameters[parameterNames[i]])}array.push(material.onBeforeCompile.toString());array.push(renderer.gammaOutput);return array.join()};this.acquireProgram=function(material,shader,parameters,code){var program;for(var p=0,pl=programs.length;p<pl;p++){var programInfo=programs[p];if(programInfo.code===code){program=programInfo;++program.usedTimes;break}}if(program===undefined){program=new WebGLProgram(renderer,code,material,shader,parameters);programs.push(program)}return program};this.releaseProgram=function(program){if(--program.usedTimes===0){var i=programs.indexOf(program);programs[i]=programs[programs.length-1];programs.pop();program.destroy()}};this.programs=programs}function WebGLTextures(_gl,extensions,state,properties,capabilities,paramThreeToGL,infoMemory){var _isWebGL2=typeof WebGL2RenderingContext!=="undefined"&&_gl instanceof WebGL2RenderingContext;function clampToMaxSize(image,maxSize){if(image.width>maxSize||image.height>maxSize){var scale=maxSize/Math.max(image.width,image.height);var canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");canvas.width=Math.floor(image.width*scale);canvas.height=Math.floor(image.height*scale);var context=canvas.getContext("2d");context.drawImage(image,0,0,image.width,image.height,0,0,canvas.width,canvas.height);console.warn("THREE.WebGLRenderer: image is too big ("+image.width+"x"+image.height+"). Resized to "+canvas.width+"x"+canvas.height,image);return canvas}return image}function isPowerOfTwo(image){return _Math.isPowerOfTwo(image.width)&&_Math.isPowerOfTwo(image.height)}function makePowerOfTwo(image){if(image instanceof HTMLImageElement||image instanceof HTMLCanvasElement){var canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");canvas.width=_Math.nearestPowerOfTwo(image.width);canvas.height=_Math.nearestPowerOfTwo(image.height);var context=canvas.getContext("2d");context.drawImage(image,0,0,canvas.width,canvas.height);console.warn("THREE.WebGLRenderer: image is not power of two ("+image.width+"x"+image.height+"). Resized to "+canvas.width+"x"+canvas.height,image);return canvas}return image}function textureNeedsPowerOfTwo(texture){return texture.wrapS!==ClampToEdgeWrapping||texture.wrapT!==ClampToEdgeWrapping||texture.minFilter!==NearestFilter&&texture.minFilter!==LinearFilter}function textureNeedsGenerateMipmaps(texture,isPowerOfTwo){return texture.generateMipmaps&&isPowerOfTwo&&texture.minFilter!==NearestFilter&&texture.minFilter!==LinearFilter}function filterFallback(f){if(f===NearestFilter||f===NearestMipMapNearestFilter||f===NearestMipMapLinearFilter){return _gl.NEAREST}return _gl.LINEAR}function onTextureDispose(event){var texture=event.target;texture.removeEventListener("dispose",onTextureDispose);deallocateTexture(texture);infoMemory.textures--}function onRenderTargetDispose(event){var renderTarget=event.target;renderTarget.removeEventListener("dispose",onRenderTargetDispose);deallocateRenderTarget(renderTarget);infoMemory.textures--}function deallocateTexture(texture){var textureProperties=properties.get(texture);if(texture.image&&textureProperties.__image__webglTextureCube){_gl.deleteTexture(textureProperties.__image__webglTextureCube)}else{if(textureProperties.__webglInit===undefined)return;_gl.deleteTexture(textureProperties.__webglTexture)}properties.remove(texture)}function deallocateRenderTarget(renderTarget){var renderTargetProperties=properties.get(renderTarget);var textureProperties=properties.get(renderTarget.texture);if(!renderTarget)return;if(textureProperties.__webglTexture!==undefined){_gl.deleteTexture(textureProperties.__webglTexture)}if(renderTarget.depthTexture){renderTarget.depthTexture.dispose()}if(renderTarget.isWebGLRenderTargetCube){for(var i=0;i<6;i++){_gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer[i]);if(renderTargetProperties.__webglDepthbuffer)_gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer[i])}}else{_gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer);if(renderTargetProperties.__webglDepthbuffer)_gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer)}properties.remove(renderTarget.texture);properties.remove(renderTarget)}function setTexture2D(texture,slot){var textureProperties=properties.get(texture);if(texture.version>0&&textureProperties.__version!==texture.version){var image=texture.image;if(image===undefined){console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined",texture)}else if(image.complete===false){console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete",texture)}else{uploadTexture(textureProperties,texture,slot);return}}state.activeTexture(_gl.TEXTURE0+slot);state.bindTexture(_gl.TEXTURE_2D,textureProperties.__webglTexture)}function setTextureCube(texture,slot){var textureProperties=properties.get(texture);if(texture.image.length===6){if(texture.version>0&&textureProperties.__version!==texture.version){if(!textureProperties.__image__webglTextureCube){texture.addEventListener("dispose",onTextureDispose);textureProperties.__image__webglTextureCube=_gl.createTexture();infoMemory.textures++}state.activeTexture(_gl.TEXTURE0+slot);state.bindTexture(_gl.TEXTURE_CUBE_MAP,textureProperties.__image__webglTextureCube);_gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL,texture.flipY);var isCompressed=texture&&texture.isCompressedTexture;var isDataTexture=texture.image[0]&&texture.image[0].isDataTexture;var cubeImage=[];for(var i=0;i<6;i++){if(!isCompressed&&!isDataTexture){cubeImage[i]=clampToMaxSize(texture.image[i],capabilities.maxCubemapSize)}else{cubeImage[i]=isDataTexture?texture.image[i].image:texture.image[i]}}var image=cubeImage[0],isPowerOfTwoImage=isPowerOfTwo(image),glFormat=paramThreeToGL(texture.format),glType=paramThreeToGL(texture.type);setTextureParameters(_gl.TEXTURE_CUBE_MAP,texture,isPowerOfTwoImage);for(var i=0;i<6;i++){if(!isCompressed){if(isDataTexture){state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,glFormat,cubeImage[i].width,cubeImage[i].height,0,glFormat,glType,cubeImage[i].data)}else{state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,glFormat,glFormat,glType,cubeImage[i])}}else{var mipmap,mipmaps=cubeImage[i].mipmaps;for(var j=0,jl=mipmaps.length;j<jl;j++){mipmap=mipmaps[j];if(texture.format!==RGBAFormat&&texture.format!==RGBFormat){if(state.getCompressedTextureFormats().indexOf(glFormat)>-1){state.compressedTexImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,j,glFormat,mipmap.width,mipmap.height,0,mipmap.data)}else{console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()")}}else{state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,j,glFormat,mipmap.width,mipmap.height,0,glFormat,glType,mipmap.data)}}}}if(textureNeedsGenerateMipmaps(texture,isPowerOfTwoImage)){_gl.generateMipmap(_gl.TEXTURE_CUBE_MAP)}textureProperties.__version=texture.version;if(texture.onUpdate)texture.onUpdate(texture)}else{state.activeTexture(_gl.TEXTURE0+slot);state.bindTexture(_gl.TEXTURE_CUBE_MAP,textureProperties.__image__webglTextureCube)}}}function setTextureCubeDynamic(texture,slot){state.activeTexture(_gl.TEXTURE0+slot);state.bindTexture(_gl.TEXTURE_CUBE_MAP,properties.get(texture).__webglTexture)}function setTextureParameters(textureType,texture,isPowerOfTwoImage){var extension;if(isPowerOfTwoImage){_gl.texParameteri(textureType,_gl.TEXTURE_WRAP_S,paramThreeToGL(texture.wrapS));_gl.texParameteri(textureType,_gl.TEXTURE_WRAP_T,paramThreeToGL(texture.wrapT));_gl.texParameteri(textureType,_gl.TEXTURE_MAG_FILTER,paramThreeToGL(texture.magFilter));_gl.texParameteri(textureType,_gl.TEXTURE_MIN_FILTER,paramThreeToGL(texture.minFilter))}else{_gl.texParameteri(textureType,_gl.TEXTURE_WRAP_S,_gl.CLAMP_TO_EDGE);_gl.texParameteri(textureType,_gl.TEXTURE_WRAP_T,_gl.CLAMP_TO_EDGE);if(texture.wrapS!==ClampToEdgeWrapping||texture.wrapT!==ClampToEdgeWrapping){console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.",texture)}_gl.texParameteri(textureType,_gl.TEXTURE_MAG_FILTER,filterFallback(texture.magFilter));_gl.texParameteri(textureType,_gl.TEXTURE_MIN_FILTER,filterFallback(texture.minFilter));if(texture.minFilter!==NearestFilter&&texture.minFilter!==LinearFilter){console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.",texture)}}extension=extensions.get("EXT_texture_filter_anisotropic");if(extension){if(texture.type===FloatType&&extensions.get("OES_texture_float_linear")===null)return;if(texture.type===HalfFloatType&&extensions.get("OES_texture_half_float_linear")===null)return;if(texture.anisotropy>1||properties.get(texture).__currentAnisotropy){_gl.texParameterf(textureType,extension.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(texture.anisotropy,capabilities.getMaxAnisotropy()));properties.get(texture).__currentAnisotropy=texture.anisotropy}}}function uploadTexture(textureProperties,texture,slot){if(textureProperties.__webglInit===undefined){textureProperties.__webglInit=true;texture.addEventListener("dispose",onTextureDispose);textureProperties.__webglTexture=_gl.createTexture();infoMemory.textures++}state.activeTexture(_gl.TEXTURE0+slot);state.bindTexture(_gl.TEXTURE_2D,textureProperties.__webglTexture);_gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL,texture.flipY);_gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,texture.premultiplyAlpha);_gl.pixelStorei(_gl.UNPACK_ALIGNMENT,texture.unpackAlignment);var image=clampToMaxSize(texture.image,capabilities.maxTextureSize);if(textureNeedsPowerOfTwo(texture)&&isPowerOfTwo(image)===false){image=makePowerOfTwo(image)}var isPowerOfTwoImage=isPowerOfTwo(image),glFormat=paramThreeToGL(texture.format),glType=paramThreeToGL(texture.type);setTextureParameters(_gl.TEXTURE_2D,texture,isPowerOfTwoImage);var mipmap,mipmaps=texture.mipmaps;if(texture.isDepthTexture){var internalFormat=_gl.DEPTH_COMPONENT;if(texture.type===FloatType){if(!_isWebGL2)throw new Error("Float Depth Texture only supported in WebGL2.0");internalFormat=_gl.DEPTH_COMPONENT32F}else if(_isWebGL2){internalFormat=_gl.DEPTH_COMPONENT16}if(texture.format===DepthFormat&&internalFormat===_gl.DEPTH_COMPONENT){if(texture.type!==UnsignedShortType&&texture.type!==UnsignedIntType){console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.");texture.type=UnsignedShortType;glType=paramThreeToGL(texture.type)}}if(texture.format===DepthStencilFormat){internalFormat=_gl.DEPTH_STENCIL;if(texture.type!==UnsignedInt248Type){console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.");texture.type=UnsignedInt248Type;glType=paramThreeToGL(texture.type)}}state.texImage2D(_gl.TEXTURE_2D,0,internalFormat,image.width,image.height,0,glFormat,glType,null)}else if(texture.isDataTexture){if(mipmaps.length>0&&isPowerOfTwoImage){for(var i=0,il=mipmaps.length;i<il;i++){mipmap=mipmaps[i];state.texImage2D(_gl.TEXTURE_2D,i,glFormat,mipmap.width,mipmap.height,0,glFormat,glType,mipmap.data)}texture.generateMipmaps=false}else{state.texImage2D(_gl.TEXTURE_2D,0,glFormat,image.width,image.height,0,glFormat,glType,image.data)}}else if(texture.isCompressedTexture){for(var i=0,il=mipmaps.length;i<il;i++){mipmap=mipmaps[i];if(texture.format!==RGBAFormat&&texture.format!==RGBFormat){if(state.getCompressedTextureFormats().indexOf(glFormat)>-1){state.compressedTexImage2D(_gl.TEXTURE_2D,i,glFormat,mipmap.width,mipmap.height,0,mipmap.data)}else{console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()")}}else{state.texImage2D(_gl.TEXTURE_2D,i,glFormat,mipmap.width,mipmap.height,0,glFormat,glType,mipmap.data)}}}else{if(mipmaps.length>0&&isPowerOfTwoImage){for(var i=0,il=mipmaps.length;i<il;i++){mipmap=mipmaps[i];state.texImage2D(_gl.TEXTURE_2D,i,glFormat,glFormat,glType,mipmap)}texture.generateMipmaps=false}else{state.texImage2D(_gl.TEXTURE_2D,0,glFormat,glFormat,glType,image)}}if(textureNeedsGenerateMipmaps(texture,isPowerOfTwoImage))_gl.generateMipmap(_gl.TEXTURE_2D);textureProperties.__version=texture.version;if(texture.onUpdate)texture.onUpdate(texture)}function setupFrameBufferTexture(framebuffer,renderTarget,attachment,textureTarget){var glFormat=paramThreeToGL(renderTarget.texture.format);var glType=paramThreeToGL(renderTarget.texture.type);state.texImage2D(textureTarget,0,glFormat,renderTarget.width,renderTarget.height,0,glFormat,glType,null);_gl.bindFramebuffer(_gl.FRAMEBUFFER,framebuffer);_gl.framebufferTexture2D(_gl.FRAMEBUFFER,attachment,textureTarget,properties.get(renderTarget.texture).__webglTexture,0);_gl.bindFramebuffer(_gl.FRAMEBUFFER,null)}function setupRenderBufferStorage(renderbuffer,renderTarget){_gl.bindRenderbuffer(_gl.RENDERBUFFER,renderbuffer);if(renderTarget.depthBuffer&&!renderTarget.stencilBuffer){_gl.renderbufferStorage(_gl.RENDERBUFFER,_gl.DEPTH_COMPONENT16,renderTarget.width,renderTarget.height);_gl.framebufferRenderbuffer(_gl.FRAMEBUFFER,_gl.DEPTH_ATTACHMENT,_gl.RENDERBUFFER,renderbuffer)}else if(renderTarget.depthBuffer&&renderTarget.stencilBuffer){_gl.renderbufferStorage(_gl.RENDERBUFFER,_gl.DEPTH_STENCIL,renderTarget.width,renderTarget.height);_gl.framebufferRenderbuffer(_gl.FRAMEBUFFER,_gl.DEPTH_STENCIL_ATTACHMENT,_gl.RENDERBUFFER,renderbuffer)}else{_gl.renderbufferStorage(_gl.RENDERBUFFER,_gl.RGBA4,renderTarget.width,renderTarget.height)}_gl.bindRenderbuffer(_gl.RENDERBUFFER,null)}function setupDepthTexture(framebuffer,renderTarget){var isCube=renderTarget&&renderTarget.isWebGLRenderTargetCube;if(isCube)throw new Error("Depth Texture with cube render targets is not supported!");_gl.bindFramebuffer(_gl.FRAMEBUFFER,framebuffer);if(!(renderTarget.depthTexture&&renderTarget.depthTexture.isDepthTexture)){throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture")}if(!properties.get(renderTarget.depthTexture).__webglTexture||renderTarget.depthTexture.image.width!==renderTarget.width||renderTarget.depthTexture.image.height!==renderTarget.height){renderTarget.depthTexture.image.width=renderTarget.width;renderTarget.depthTexture.image.height=renderTarget.height;renderTarget.depthTexture.needsUpdate=true}setTexture2D(renderTarget.depthTexture,0);var webglDepthTexture=properties.get(renderTarget.depthTexture).__webglTexture;if(renderTarget.depthTexture.format===DepthFormat){_gl.framebufferTexture2D(_gl.FRAMEBUFFER,_gl.DEPTH_ATTACHMENT,_gl.TEXTURE_2D,webglDepthTexture,0)}else if(renderTarget.depthTexture.format===DepthStencilFormat){_gl.framebufferTexture2D(_gl.FRAMEBUFFER,_gl.DEPTH_STENCIL_ATTACHMENT,_gl.TEXTURE_2D,webglDepthTexture,0)}else{throw new Error("Unknown depthTexture format")}}function setupDepthRenderbuffer(renderTarget){var renderTargetProperties=properties.get(renderTarget);var isCube=renderTarget.isWebGLRenderTargetCube===true;if(renderTarget.depthTexture){if(isCube)throw new Error("target.depthTexture not supported in Cube render targets");setupDepthTexture(renderTargetProperties.__webglFramebuffer,renderTarget)}else{if(isCube){renderTargetProperties.__webglDepthbuffer=[];for(var i=0;i<6;i++){_gl.bindFramebuffer(_gl.FRAMEBUFFER,renderTargetProperties.__webglFramebuffer[i]);renderTargetProperties.__webglDepthbuffer[i]=_gl.createRenderbuffer();setupRenderBufferStorage(renderTargetProperties.__webglDepthbuffer[i],renderTarget)}}else{_gl.bindFramebuffer(_gl.FRAMEBUFFER,renderTargetProperties.__webglFramebuffer);renderTargetProperties.__webglDepthbuffer=_gl.createRenderbuffer();setupRenderBufferStorage(renderTargetProperties.__webglDepthbuffer,renderTarget)}}_gl.bindFramebuffer(_gl.FRAMEBUFFER,null)}function setupRenderTarget(renderTarget){var renderTargetProperties=properties.get(renderTarget);var textureProperties=properties.get(renderTarget.texture);renderTarget.addEventListener("dispose",onRenderTargetDispose);textureProperties.__webglTexture=_gl.createTexture();infoMemory.textures++;var isCube=renderTarget.isWebGLRenderTargetCube===true;var isTargetPowerOfTwo=isPowerOfTwo(renderTarget);if(isCube){renderTargetProperties.__webglFramebuffer=[];for(var i=0;i<6;i++){renderTargetProperties.__webglFramebuffer[i]=_gl.createFramebuffer()}}else{renderTargetProperties.__webglFramebuffer=_gl.createFramebuffer()}if(isCube){state.bindTexture(_gl.TEXTURE_CUBE_MAP,textureProperties.__webglTexture);setTextureParameters(_gl.TEXTURE_CUBE_MAP,renderTarget.texture,isTargetPowerOfTwo);for(var i=0;i<6;i++){setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer[i],renderTarget,_gl.COLOR_ATTACHMENT0,_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i)}if(textureNeedsGenerateMipmaps(renderTarget.texture,isTargetPowerOfTwo))_gl.generateMipmap(_gl.TEXTURE_CUBE_MAP);state.bindTexture(_gl.TEXTURE_CUBE_MAP,null)}else{state.bindTexture(_gl.TEXTURE_2D,textureProperties.__webglTexture);setTextureParameters(_gl.TEXTURE_2D,renderTarget.texture,isTargetPowerOfTwo);setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer,renderTarget,_gl.COLOR_ATTACHMENT0,_gl.TEXTURE_2D);if(textureNeedsGenerateMipmaps(renderTarget.texture,isTargetPowerOfTwo))_gl.generateMipmap(_gl.TEXTURE_2D);state.bindTexture(_gl.TEXTURE_2D,null)}if(renderTarget.depthBuffer){setupDepthRenderbuffer(renderTarget)}}function updateRenderTargetMipmap(renderTarget){var texture=renderTarget.texture;var isTargetPowerOfTwo=isPowerOfTwo(renderTarget);if(textureNeedsGenerateMipmaps(texture,isTargetPowerOfTwo)){var target=renderTarget.isWebGLRenderTargetCube?_gl.TEXTURE_CUBE_MAP:_gl.TEXTURE_2D;var webglTexture=properties.get(texture).__webglTexture;state.bindTexture(target,webglTexture);_gl.generateMipmap(target);state.bindTexture(target,null)}}this.setTexture2D=setTexture2D;this.setTextureCube=setTextureCube;this.setTextureCubeDynamic=setTextureCubeDynamic;this.setupRenderTarget=setupRenderTarget;this.updateRenderTargetMipmap=updateRenderTargetMipmap}function WebGLProperties(){var properties={};function get(object){var uuid=object.uuid;var map=properties[uuid];if(map===undefined){map={};properties[uuid]=map}return map}function remove(object){delete properties[object.uuid]}function clear(){properties={}}return{get:get,remove:remove,clear:clear}}function WebGLState(gl,extensions,paramThreeToGL){function ColorBuffer(){var locked=false;var color=new Vector4;var currentColorMask=null;var currentColorClear=new Vector4;return{setMask:function(colorMask){if(currentColorMask!==colorMask&&!locked){gl.colorMask(colorMask,colorMask,colorMask,colorMask);currentColorMask=colorMask}},setLocked:function(lock){locked=lock},setClear:function(r,g,b,a,premultipliedAlpha){if(premultipliedAlpha===true){r*=a;g*=a;b*=a}color.set(r,g,b,a);if(currentColorClear.equals(color)===false){gl.clearColor(r,g,b,a);currentColorClear.copy(color)}},reset:function(){locked=false;currentColorMask=null;currentColorClear.set(0,0,0,1)}}}function DepthBuffer(){var locked=false;var currentDepthMask=null;var currentDepthFunc=null;var currentDepthClear=null;return{setTest:function(depthTest){if(depthTest){enable(gl.DEPTH_TEST)}else{disable(gl.DEPTH_TEST)}},setMask:function(depthMask){if(currentDepthMask!==depthMask&&!locked){gl.depthMask(depthMask);currentDepthMask=depthMask}},setFunc:function(depthFunc){if(currentDepthFunc!==depthFunc){if(depthFunc){switch(depthFunc){case NeverDepth:gl.depthFunc(gl.NEVER);break;case AlwaysDepth:gl.depthFunc(gl.ALWAYS);break;case LessDepth:gl.depthFunc(gl.LESS);break;case LessEqualDepth:gl.depthFunc(gl.LEQUAL);break;case EqualDepth:gl.depthFunc(gl.EQUAL);break;case GreaterEqualDepth:gl.depthFunc(gl.GEQUAL);break;case GreaterDepth:gl.depthFunc(gl.GREATER);break;case NotEqualDepth:gl.depthFunc(gl.NOTEQUAL);break;default:gl.depthFunc(gl.LEQUAL)}}else{gl.depthFunc(gl.LEQUAL)}currentDepthFunc=depthFunc}},setLocked:function(lock){locked=lock},setClear:function(depth){if(currentDepthClear!==depth){gl.clearDepth(depth);currentDepthClear=depth}},reset:function(){locked=false;currentDepthMask=null;currentDepthFunc=null;currentDepthClear=null}}}function StencilBuffer(){var locked=false;var currentStencilMask=null;var currentStencilFunc=null;var currentStencilRef=null;var currentStencilFuncMask=null;var currentStencilFail=null;var currentStencilZFail=null;var currentStencilZPass=null;var currentStencilClear=null;return{setTest:function(stencilTest){if(stencilTest){enable(gl.STENCIL_TEST)}else{disable(gl.STENCIL_TEST)}},setMask:function(stencilMask){if(currentStencilMask!==stencilMask&&!locked){gl.stencilMask(stencilMask);currentStencilMask=stencilMask}},setFunc:function(stencilFunc,stencilRef,stencilMask){if(currentStencilFunc!==stencilFunc||currentStencilRef!==stencilRef||currentStencilFuncMask!==stencilMask){gl.stencilFunc(stencilFunc,stencilRef,stencilMask);currentStencilFunc=stencilFunc;currentStencilRef=stencilRef;currentStencilFuncMask=stencilMask}},setOp:function(stencilFail,stencilZFail,stencilZPass){if(currentStencilFail!==stencilFail||currentStencilZFail!==stencilZFail||currentStencilZPass!==stencilZPass){gl.stencilOp(stencilFail,stencilZFail,stencilZPass);currentStencilFail=stencilFail;currentStencilZFail=stencilZFail;currentStencilZPass=stencilZPass}},setLocked:function(lock){locked=lock},setClear:function(stencil){
if(currentStencilClear!==stencil){gl.clearStencil(stencil);currentStencilClear=stencil}},reset:function(){locked=false;currentStencilMask=null;currentStencilFunc=null;currentStencilRef=null;currentStencilFuncMask=null;currentStencilFail=null;currentStencilZFail=null;currentStencilZPass=null;currentStencilClear=null}}}var colorBuffer=new ColorBuffer;var depthBuffer=new DepthBuffer;var stencilBuffer=new StencilBuffer;var maxVertexAttributes=gl.getParameter(gl.MAX_VERTEX_ATTRIBS);var newAttributes=new Uint8Array(maxVertexAttributes);var enabledAttributes=new Uint8Array(maxVertexAttributes);var attributeDivisors=new Uint8Array(maxVertexAttributes);var capabilities={};var compressedTextureFormats=null;var currentBlending=null;var currentBlendEquation=null;var currentBlendSrc=null;var currentBlendDst=null;var currentBlendEquationAlpha=null;var currentBlendSrcAlpha=null;var currentBlendDstAlpha=null;var currentPremultipledAlpha=false;var currentFlipSided=null;var currentCullFace=null;var currentLineWidth=null;var currentPolygonOffsetFactor=null;var currentPolygonOffsetUnits=null;var currentScissorTest=null;var maxTextures=gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS);var version=parseFloat(/^WebGL\ ([0-9])/.exec(gl.getParameter(gl.VERSION))[1]);var lineWidthAvailable=parseFloat(version)>=1;var currentTextureSlot=null;var currentBoundTextures={};var currentScissor=new Vector4;var currentViewport=new Vector4;function createTexture(type,target,count){var data=new Uint8Array(4);var texture=gl.createTexture();gl.bindTexture(type,texture);gl.texParameteri(type,gl.TEXTURE_MIN_FILTER,gl.NEAREST);gl.texParameteri(type,gl.TEXTURE_MAG_FILTER,gl.NEAREST);for(var i=0;i<count;i++){gl.texImage2D(target+i,0,gl.RGBA,1,1,0,gl.RGBA,gl.UNSIGNED_BYTE,data)}return texture}var emptyTextures={};emptyTextures[gl.TEXTURE_2D]=createTexture(gl.TEXTURE_2D,gl.TEXTURE_2D,1);emptyTextures[gl.TEXTURE_CUBE_MAP]=createTexture(gl.TEXTURE_CUBE_MAP,gl.TEXTURE_CUBE_MAP_POSITIVE_X,6);function init(){colorBuffer.setClear(0,0,0,1);depthBuffer.setClear(1);stencilBuffer.setClear(0);enable(gl.DEPTH_TEST);depthBuffer.setFunc(LessEqualDepth);setFlipSided(false);setCullFace(CullFaceBack);enable(gl.CULL_FACE);enable(gl.BLEND);setBlending(NormalBlending)}function initAttributes(){for(var i=0,l=newAttributes.length;i<l;i++){newAttributes[i]=0}}function enableAttribute(attribute){newAttributes[attribute]=1;if(enabledAttributes[attribute]===0){gl.enableVertexAttribArray(attribute);enabledAttributes[attribute]=1}if(attributeDivisors[attribute]!==0){var extension=extensions.get("ANGLE_instanced_arrays");extension.vertexAttribDivisorANGLE(attribute,0);attributeDivisors[attribute]=0}}function enableAttributeAndDivisor(attribute,meshPerAttribute){newAttributes[attribute]=1;if(enabledAttributes[attribute]===0){gl.enableVertexAttribArray(attribute);enabledAttributes[attribute]=1}if(attributeDivisors[attribute]!==meshPerAttribute){var extension=extensions.get("ANGLE_instanced_arrays");extension.vertexAttribDivisorANGLE(attribute,meshPerAttribute);attributeDivisors[attribute]=meshPerAttribute}}function disableUnusedAttributes(){for(var i=0,l=enabledAttributes.length;i!==l;++i){if(enabledAttributes[i]!==newAttributes[i]){gl.disableVertexAttribArray(i);enabledAttributes[i]=0}}}function enable(id){if(capabilities[id]!==true){gl.enable(id);capabilities[id]=true}}function disable(id){if(capabilities[id]!==false){gl.disable(id);capabilities[id]=false}}function getCompressedTextureFormats(){if(compressedTextureFormats===null){compressedTextureFormats=[];if(extensions.get("WEBGL_compressed_texture_pvrtc")||extensions.get("WEBGL_compressed_texture_s3tc")||extensions.get("WEBGL_compressed_texture_etc1")){var formats=gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS);for(var i=0;i<formats.length;i++){compressedTextureFormats.push(formats[i])}}}return compressedTextureFormats}function setBlending(blending,blendEquation,blendSrc,blendDst,blendEquationAlpha,blendSrcAlpha,blendDstAlpha,premultipliedAlpha){if(blending!==NoBlending){enable(gl.BLEND)}else{disable(gl.BLEND)}if(blending!==CustomBlending&&(blending!==currentBlending||premultipliedAlpha!==currentPremultipledAlpha)){if(blending===AdditiveBlending){if(premultipliedAlpha){gl.blendEquationSeparate(gl.FUNC_ADD,gl.FUNC_ADD);gl.blendFuncSeparate(gl.ONE,gl.ONE,gl.ONE,gl.ONE)}else{gl.blendEquation(gl.FUNC_ADD);gl.blendFunc(gl.SRC_ALPHA,gl.ONE)}}else if(blending===SubtractiveBlending){if(premultipliedAlpha){gl.blendEquationSeparate(gl.FUNC_ADD,gl.FUNC_ADD);gl.blendFuncSeparate(gl.ZERO,gl.ZERO,gl.ONE_MINUS_SRC_COLOR,gl.ONE_MINUS_SRC_ALPHA)}else{gl.blendEquation(gl.FUNC_ADD);gl.blendFunc(gl.ZERO,gl.ONE_MINUS_SRC_COLOR)}}else if(blending===MultiplyBlending){if(premultipliedAlpha){gl.blendEquationSeparate(gl.FUNC_ADD,gl.FUNC_ADD);gl.blendFuncSeparate(gl.ZERO,gl.SRC_COLOR,gl.ZERO,gl.SRC_ALPHA)}else{gl.blendEquation(gl.FUNC_ADD);gl.blendFunc(gl.ZERO,gl.SRC_COLOR)}}else{if(premultipliedAlpha){gl.blendEquationSeparate(gl.FUNC_ADD,gl.FUNC_ADD);gl.blendFuncSeparate(gl.ONE,gl.ONE_MINUS_SRC_ALPHA,gl.ONE,gl.ONE_MINUS_SRC_ALPHA)}else{gl.blendEquationSeparate(gl.FUNC_ADD,gl.FUNC_ADD);gl.blendFuncSeparate(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA,gl.ONE,gl.ONE_MINUS_SRC_ALPHA)}}currentBlending=blending;currentPremultipledAlpha=premultipliedAlpha}if(blending===CustomBlending){blendEquationAlpha=blendEquationAlpha||blendEquation;blendSrcAlpha=blendSrcAlpha||blendSrc;blendDstAlpha=blendDstAlpha||blendDst;if(blendEquation!==currentBlendEquation||blendEquationAlpha!==currentBlendEquationAlpha){gl.blendEquationSeparate(paramThreeToGL(blendEquation),paramThreeToGL(blendEquationAlpha));currentBlendEquation=blendEquation;currentBlendEquationAlpha=blendEquationAlpha}if(blendSrc!==currentBlendSrc||blendDst!==currentBlendDst||blendSrcAlpha!==currentBlendSrcAlpha||blendDstAlpha!==currentBlendDstAlpha){gl.blendFuncSeparate(paramThreeToGL(blendSrc),paramThreeToGL(blendDst),paramThreeToGL(blendSrcAlpha),paramThreeToGL(blendDstAlpha));currentBlendSrc=blendSrc;currentBlendDst=blendDst;currentBlendSrcAlpha=blendSrcAlpha;currentBlendDstAlpha=blendDstAlpha}}else{currentBlendEquation=null;currentBlendSrc=null;currentBlendDst=null;currentBlendEquationAlpha=null;currentBlendSrcAlpha=null;currentBlendDstAlpha=null}}function setMaterial(material){material.side===DoubleSide?disable(gl.CULL_FACE):enable(gl.CULL_FACE);setFlipSided(material.side===BackSide);material.transparent===true?setBlending(material.blending,material.blendEquation,material.blendSrc,material.blendDst,material.blendEquationAlpha,material.blendSrcAlpha,material.blendDstAlpha,material.premultipliedAlpha):setBlending(NoBlending);depthBuffer.setFunc(material.depthFunc);depthBuffer.setTest(material.depthTest);depthBuffer.setMask(material.depthWrite);colorBuffer.setMask(material.colorWrite);setPolygonOffset(material.polygonOffset,material.polygonOffsetFactor,material.polygonOffsetUnits)}function setFlipSided(flipSided){if(currentFlipSided!==flipSided){if(flipSided){gl.frontFace(gl.CW)}else{gl.frontFace(gl.CCW)}currentFlipSided=flipSided}}function setCullFace(cullFace){if(cullFace!==CullFaceNone){enable(gl.CULL_FACE);if(cullFace!==currentCullFace){if(cullFace===CullFaceBack){gl.cullFace(gl.BACK)}else if(cullFace===CullFaceFront){gl.cullFace(gl.FRONT)}else{gl.cullFace(gl.FRONT_AND_BACK)}}}else{disable(gl.CULL_FACE)}currentCullFace=cullFace}function setLineWidth(width){if(width!==currentLineWidth){if(lineWidthAvailable)gl.lineWidth(width);currentLineWidth=width}}function setPolygonOffset(polygonOffset,factor,units){if(polygonOffset){enable(gl.POLYGON_OFFSET_FILL);if(currentPolygonOffsetFactor!==factor||currentPolygonOffsetUnits!==units){gl.polygonOffset(factor,units);currentPolygonOffsetFactor=factor;currentPolygonOffsetUnits=units}}else{disable(gl.POLYGON_OFFSET_FILL)}}function getScissorTest(){return currentScissorTest}function setScissorTest(scissorTest){currentScissorTest=scissorTest;if(scissorTest){enable(gl.SCISSOR_TEST)}else{disable(gl.SCISSOR_TEST)}}function activeTexture(webglSlot){if(webglSlot===undefined)webglSlot=gl.TEXTURE0+maxTextures-1;if(currentTextureSlot!==webglSlot){gl.activeTexture(webglSlot);currentTextureSlot=webglSlot}}function bindTexture(webglType,webglTexture){if(currentTextureSlot===null){activeTexture()}var boundTexture=currentBoundTextures[currentTextureSlot];if(boundTexture===undefined){boundTexture={type:undefined,texture:undefined};currentBoundTextures[currentTextureSlot]=boundTexture}if(boundTexture.type!==webglType||boundTexture.texture!==webglTexture){gl.bindTexture(webglType,webglTexture||emptyTextures[webglType]);boundTexture.type=webglType;boundTexture.texture=webglTexture}}function compressedTexImage2D(){try{gl.compressedTexImage2D.apply(gl,arguments)}catch(error){console.error("THREE.WebGLState:",error)}}function texImage2D(){try{gl.texImage2D.apply(gl,arguments)}catch(error){console.error("THREE.WebGLState:",error)}}function scissor(scissor){if(currentScissor.equals(scissor)===false){gl.scissor(scissor.x,scissor.y,scissor.z,scissor.w);currentScissor.copy(scissor)}}function viewport(viewport){if(currentViewport.equals(viewport)===false){gl.viewport(viewport.x,viewport.y,viewport.z,viewport.w);currentViewport.copy(viewport)}}function reset(){for(var i=0;i<enabledAttributes.length;i++){if(enabledAttributes[i]===1){gl.disableVertexAttribArray(i);enabledAttributes[i]=0}}capabilities={};compressedTextureFormats=null;currentTextureSlot=null;currentBoundTextures={};currentBlending=null;currentFlipSided=null;currentCullFace=null;colorBuffer.reset();depthBuffer.reset();stencilBuffer.reset()}return{buffers:{color:colorBuffer,depth:depthBuffer,stencil:stencilBuffer},init:init,initAttributes:initAttributes,enableAttribute:enableAttribute,enableAttributeAndDivisor:enableAttributeAndDivisor,disableUnusedAttributes:disableUnusedAttributes,enable:enable,disable:disable,getCompressedTextureFormats:getCompressedTextureFormats,setBlending:setBlending,setMaterial:setMaterial,setFlipSided:setFlipSided,setCullFace:setCullFace,setLineWidth:setLineWidth,setPolygonOffset:setPolygonOffset,getScissorTest:getScissorTest,setScissorTest:setScissorTest,activeTexture:activeTexture,bindTexture:bindTexture,compressedTexImage2D:compressedTexImage2D,texImage2D:texImage2D,scissor:scissor,viewport:viewport,reset:reset}}function WebGLCapabilities(gl,extensions,parameters){var maxAnisotropy;function getMaxAnisotropy(){if(maxAnisotropy!==undefined)return maxAnisotropy;var extension=extensions.get("EXT_texture_filter_anisotropic");if(extension!==null){maxAnisotropy=gl.getParameter(extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else{maxAnisotropy=0}return maxAnisotropy}function getMaxPrecision(precision){if(precision==="highp"){if(gl.getShaderPrecisionFormat(gl.VERTEX_SHADER,gl.HIGH_FLOAT).precision>0&&gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER,gl.HIGH_FLOAT).precision>0){return"highp"}precision="mediump"}if(precision==="mediump"){if(gl.getShaderPrecisionFormat(gl.VERTEX_SHADER,gl.MEDIUM_FLOAT).precision>0&&gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER,gl.MEDIUM_FLOAT).precision>0){return"mediump"}}return"lowp"}var precision=parameters.precision!==undefined?parameters.precision:"highp";var maxPrecision=getMaxPrecision(precision);if(maxPrecision!==precision){console.warn("THREE.WebGLRenderer:",precision,"not supported, using",maxPrecision,"instead.");precision=maxPrecision}var logarithmicDepthBuffer=parameters.logarithmicDepthBuffer===true&&!!extensions.get("EXT_frag_depth");var maxTextures=gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);var maxVertexTextures=gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS);var maxTextureSize=gl.getParameter(gl.MAX_TEXTURE_SIZE);var maxCubemapSize=gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE);var maxAttributes=gl.getParameter(gl.MAX_VERTEX_ATTRIBS);var maxVertexUniforms=gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);var maxVaryings=gl.getParameter(gl.MAX_VARYING_VECTORS);var maxFragmentUniforms=gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS);var vertexTextures=maxVertexTextures>0;var floatFragmentTextures=!!extensions.get("OES_texture_float");var floatVertexTextures=vertexTextures&&floatFragmentTextures;return{getMaxAnisotropy:getMaxAnisotropy,getMaxPrecision:getMaxPrecision,precision:precision,logarithmicDepthBuffer:logarithmicDepthBuffer,maxTextures:maxTextures,maxVertexTextures:maxVertexTextures,maxTextureSize:maxTextureSize,maxCubemapSize:maxCubemapSize,maxAttributes:maxAttributes,maxVertexUniforms:maxVertexUniforms,maxVaryings:maxVaryings,maxFragmentUniforms:maxFragmentUniforms,vertexTextures:vertexTextures,floatFragmentTextures:floatFragmentTextures,floatVertexTextures:floatVertexTextures}}function ArrayCamera(array){PerspectiveCamera.call(this);this.cameras=array||[]}ArrayCamera.prototype=Object.assign(Object.create(PerspectiveCamera.prototype),{constructor:ArrayCamera,isArrayCamera:true});function WebVRManager(renderer){var scope=this;var device=null;var frameData=null;if("VRFrameData"in window){frameData=new window.VRFrameData}var matrixWorldInverse=new Matrix4;var standingMatrix=new Matrix4;var standingMatrixInverse=new Matrix4;var cameraL=new PerspectiveCamera;cameraL.bounds=new Vector4(0,0,.5,1);cameraL.layers.enable(1);var cameraR=new PerspectiveCamera;cameraR.bounds=new Vector4(.5,0,.5,1);cameraR.layers.enable(2);var cameraVR=new ArrayCamera([cameraL,cameraR]);cameraVR.layers.enable(1);cameraVR.layers.enable(2);var currentSize,currentPixelRatio;function onVRDisplayPresentChange(){if(device.isPresenting){var eyeParameters=device.getEyeParameters("left");var renderWidth=eyeParameters.renderWidth;var renderHeight=eyeParameters.renderHeight;currentPixelRatio=renderer.getPixelRatio();currentSize=renderer.getSize();renderer.setDrawingBufferSize(renderWidth*2,renderHeight,1)}else if(scope.enabled){renderer.setDrawingBufferSize(currentSize.width,currentSize.height,currentPixelRatio)}}window.addEventListener("vrdisplaypresentchange",onVRDisplayPresentChange,false);this.enabled=false;this.standing=false;this.getDevice=function(){return device};this.setDevice=function(value){if(value!==undefined)device=value};this.getCamera=function(camera){if(device===null)return camera;device.depthNear=camera.near;device.depthFar=camera.far;device.getFrameData(frameData);var pose=frameData.pose;if(pose.position!==null){camera.position.fromArray(pose.position)}else{camera.position.set(0,0,0)}if(pose.orientation!==null){camera.quaternion.fromArray(pose.orientation)}camera.updateMatrixWorld();var stageParameters=device.stageParameters;if(this.standing&&stageParameters){standingMatrix.fromArray(stageParameters.sittingToStandingTransform);standingMatrixInverse.getInverse(standingMatrix);camera.matrixWorld.multiply(standingMatrix);camera.matrixWorldInverse.multiply(standingMatrixInverse)}if(device.isPresenting===false)return camera;cameraVR.matrixWorld.copy(camera.matrixWorld);cameraVR.matrixWorldInverse.copy(camera.matrixWorldInverse);cameraL.matrixWorldInverse.fromArray(frameData.leftViewMatrix);cameraR.matrixWorldInverse.fromArray(frameData.rightViewMatrix);if(this.standing&&stageParameters){cameraL.matrixWorldInverse.multiply(standingMatrixInverse);cameraR.matrixWorldInverse.multiply(standingMatrixInverse)}var parent=camera.parent;if(parent!==null){matrixWorldInverse.getInverse(parent.matrixWorld);cameraL.matrixWorldInverse.multiply(matrixWorldInverse);cameraR.matrixWorldInverse.multiply(matrixWorldInverse)}cameraL.matrixWorld.getInverse(cameraL.matrixWorldInverse);cameraR.matrixWorld.getInverse(cameraR.matrixWorldInverse);cameraL.projectionMatrix.fromArray(frameData.leftProjectionMatrix);cameraR.projectionMatrix.fromArray(frameData.rightProjectionMatrix);cameraVR.projectionMatrix.copy(cameraL.projectionMatrix);var layers=device.getLayers();if(layers.length){var layer=layers[0];if(layer.leftBounds!==null&&layer.leftBounds.length===4){cameraL.bounds.fromArray(layer.leftBounds)}if(layer.rightBounds!==null&&layer.rightBounds.length===4){cameraR.bounds.fromArray(layer.rightBounds)}}return cameraVR};this.getStandingMatrix=function(){return standingMatrix};this.submitFrame=function(){if(device&&device.isPresenting)device.submitFrame()}}function WebGLExtensions(gl){var extensions={};return{get:function(name){if(extensions[name]!==undefined){return extensions[name]}var extension;switch(name){case"WEBGL_depth_texture":extension=gl.getExtension("WEBGL_depth_texture")||gl.getExtension("MOZ_WEBGL_depth_texture")||gl.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":extension=gl.getExtension("EXT_texture_filter_anisotropic")||gl.getExtension("MOZ_EXT_texture_filter_anisotropic")||gl.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":extension=gl.getExtension("WEBGL_compressed_texture_s3tc")||gl.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":extension=gl.getExtension("WEBGL_compressed_texture_pvrtc")||gl.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case"WEBGL_compressed_texture_etc1":extension=gl.getExtension("WEBGL_compressed_texture_etc1");break;default:extension=gl.getExtension(name)}if(extension===null){console.warn("THREE.WebGLRenderer: "+name+" extension not supported.")}extensions[name]=extension;return extension}}}function WebGLClipping(){var scope=this,globalState=null,numGlobalPlanes=0,localClippingEnabled=false,renderingShadows=false,plane=new Plane,viewNormalMatrix=new Matrix3,uniform={value:null,needsUpdate:false};this.uniform=uniform;this.numPlanes=0;this.numIntersection=0;this.init=function(planes,enableLocalClipping,camera){var enabled=planes.length!==0||enableLocalClipping||numGlobalPlanes!==0||localClippingEnabled;localClippingEnabled=enableLocalClipping;globalState=projectPlanes(planes,camera,0);numGlobalPlanes=planes.length;return enabled};this.beginShadows=function(){renderingShadows=true;projectPlanes(null)};this.endShadows=function(){renderingShadows=false;resetGlobalState()};this.setState=function(planes,clipIntersection,clipShadows,camera,cache,fromCache){if(!localClippingEnabled||planes===null||planes.length===0||renderingShadows&&!clipShadows){if(renderingShadows){projectPlanes(null)}else{resetGlobalState()}}else{var nGlobal=renderingShadows?0:numGlobalPlanes,lGlobal=nGlobal*4,dstArray=cache.clippingState||null;uniform.value=dstArray;dstArray=projectPlanes(planes,camera,lGlobal,fromCache);for(var i=0;i!==lGlobal;++i){dstArray[i]=globalState[i]}cache.clippingState=dstArray;this.numIntersection=clipIntersection?this.numPlanes:0;this.numPlanes+=nGlobal}};function resetGlobalState(){if(uniform.value!==globalState){uniform.value=globalState;uniform.needsUpdate=numGlobalPlanes>0}scope.numPlanes=numGlobalPlanes;scope.numIntersection=0}function projectPlanes(planes,camera,dstOffset,skipTransform){var nPlanes=planes!==null?planes.length:0,dstArray=null;if(nPlanes!==0){dstArray=uniform.value;if(skipTransform!==true||dstArray===null){var flatSize=dstOffset+nPlanes*4,viewMatrix=camera.matrixWorldInverse;viewNormalMatrix.getNormalMatrix(viewMatrix);if(dstArray===null||dstArray.length<flatSize){dstArray=new Float32Array(flatSize)}for(var i=0,i4=dstOffset;i!==nPlanes;++i,i4+=4){plane.copy(planes[i]).applyMatrix4(viewMatrix,viewNormalMatrix);plane.normal.toArray(dstArray,i4);dstArray[i4+3]=plane.constant}}uniform.value=dstArray;uniform.needsUpdate=true}scope.numPlanes=nPlanes;return dstArray}}function WebGLRenderer(parameters){console.log("THREE.WebGLRenderer",REVISION);parameters=parameters||{};var _canvas=parameters.canvas!==undefined?parameters.canvas:document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),_context=parameters.context!==undefined?parameters.context:null,_alpha=parameters.alpha!==undefined?parameters.alpha:false,_depth=parameters.depth!==undefined?parameters.depth:true,_stencil=parameters.stencil!==undefined?parameters.stencil:true,_antialias=parameters.antialias!==undefined?parameters.antialias:false,_premultipliedAlpha=parameters.premultipliedAlpha!==undefined?parameters.premultipliedAlpha:true,_preserveDrawingBuffer=parameters.preserveDrawingBuffer!==undefined?parameters.preserveDrawingBuffer:false;var lights=[];var currentRenderList=null;var morphInfluences=new Float32Array(8);var sprites=[];var lensFlares=[];this.domElement=_canvas;this.context=null;this.autoClear=true;this.autoClearColor=true;this.autoClearDepth=true;this.autoClearStencil=true;this.sortObjects=true;this.clippingPlanes=[];this.localClippingEnabled=false;this.gammaFactor=2;this.gammaInput=false;this.gammaOutput=false;this.physicallyCorrectLights=false;this.toneMapping=LinearToneMapping;this.toneMappingExposure=1;this.toneMappingWhitePoint=1;this.maxMorphTargets=8;this.maxMorphNormals=4;var _this=this,_currentProgram=null,_currentRenderTarget=null,_currentFramebuffer=null,_currentMaterialId=-1,_currentGeometryProgram="",_currentCamera=null,_currentArrayCamera=null,_currentScissor=new Vector4,_currentScissorTest=null,_currentViewport=new Vector4,_usedTextureUnits=0,_width=_canvas.width,_height=_canvas.height,_pixelRatio=1,_scissor=new Vector4(0,0,_width,_height),_scissorTest=false,_viewport=new Vector4(0,0,_width,_height),_frustum=new Frustum,_clipping=new WebGLClipping,_clippingEnabled=false,_localClippingEnabled=false,_projScreenMatrix=new Matrix4,_vector3=new Vector3,_matrix4=new Matrix4,_matrix42=new Matrix4,_lights={hash:"",ambient:[0,0,0],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],shadows:[]},_infoMemory={geometries:0,textures:0},_infoRender={frame:0,calls:0,vertices:0,faces:0,points:0};this.info={render:_infoRender,memory:_infoMemory,programs:null};var _gl;try{var contextAttributes={alpha:_alpha,depth:_depth,stencil:_stencil,antialias:_antialias,premultipliedAlpha:_premultipliedAlpha,preserveDrawingBuffer:_preserveDrawingBuffer};_gl=_context||_canvas.getContext("webgl",contextAttributes)||_canvas.getContext("experimental-webgl",contextAttributes);if(_gl===null){if(_canvas.getContext("webgl")!==null){throw"Error creating WebGL context with your selected attributes."}else{throw"Error creating WebGL context."}}if(_gl.getShaderPrecisionFormat===undefined){_gl.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}}}_canvas.addEventListener("webglcontextlost",onContextLost,false)}catch(error){console.error("THREE.WebGLRenderer: "+error)}var extensions=new WebGLExtensions(_gl);extensions.get("WEBGL_depth_texture");extensions.get("OES_texture_float");extensions.get("OES_texture_float_linear");extensions.get("OES_texture_half_float");extensions.get("OES_texture_half_float_linear");extensions.get("OES_standard_derivatives");extensions.get("ANGLE_instanced_arrays");if(extensions.get("OES_element_index_uint")){BufferGeometry.MaxIndex=4294967296}var capabilities=new WebGLCapabilities(_gl,extensions,parameters);var state=new WebGLState(_gl,extensions,paramThreeToGL);var properties=new WebGLProperties;var textures=new WebGLTextures(_gl,extensions,state,properties,capabilities,paramThreeToGL,_infoMemory);var attributes=new WebGLAttributes(_gl);var geometries=new WebGLGeometries(_gl,attributes,_infoMemory);var objects=new WebGLObjects(_gl,geometries,_infoRender);var programCache=new WebGLPrograms(this,capabilities);var lightCache=new WebGLLights;var renderLists=new WebGLRenderLists;var background=new WebGLBackground(this,state,objects,_premultipliedAlpha);var vr=new WebVRManager(this);this.info.programs=programCache.programs;var bufferRenderer=new WebGLBufferRenderer(_gl,extensions,_infoRender);var indexedBufferRenderer=new WebGLIndexedBufferRenderer(_gl,extensions,_infoRender);function getTargetPixelRatio(){return _currentRenderTarget===null?_pixelRatio:1}function setDefaultGLState(){state.init();state.scissor(_currentScissor.copy(_scissor).multiplyScalar(_pixelRatio));state.viewport(_currentViewport.copy(_viewport).multiplyScalar(_pixelRatio))}function resetGLState(){_currentProgram=null;_currentCamera=null;_currentGeometryProgram="";_currentMaterialId=-1;state.reset()}setDefaultGLState();this.context=_gl;this.capabilities=capabilities;this.extensions=extensions;this.properties=properties;this.renderLists=renderLists;this.state=state;this.vr=vr;var shadowMap=new WebGLShadowMap(this,_lights,objects,capabilities);this.shadowMap=shadowMap;var spritePlugin=new SpritePlugin(this,sprites);var lensFlarePlugin=new LensFlarePlugin(this,lensFlares);this.getContext=function(){return _gl};this.getContextAttributes=function(){return _gl.getContextAttributes()};this.forceContextLoss=function(){var extension=extensions.get("WEBGL_lose_context");if(extension)extension.loseContext()};this.getMaxAnisotropy=function(){return capabilities.getMaxAnisotropy()};this.getPrecision=function(){return capabilities.precision};this.getPixelRatio=function(){return _pixelRatio};this.setPixelRatio=function(value){if(value===undefined)return;_pixelRatio=value;this.setSize(_width,_height,false)};this.getSize=function(){return{width:_width,height:_height}};this.setSize=function(width,height,updateStyle){var device=vr.getDevice();if(device&&device.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}_width=width;_height=height;_canvas.width=width*_pixelRatio;_canvas.height=height*_pixelRatio;if(updateStyle!==false){_canvas.style.width=width+"px";_canvas.style.height=height+"px"}this.setViewport(0,0,width,height)};this.getDrawingBufferSize=function(){return{width:_width*_pixelRatio,height:_height*_pixelRatio}};this.setDrawingBufferSize=function(width,height,pixelRatio){_width=width;_height=height;_pixelRatio=pixelRatio;_canvas.width=width*pixelRatio;_canvas.height=height*pixelRatio;this.setViewport(0,0,width,height)};this.setViewport=function(x,y,width,height){_viewport.set(x,_height-y-height,width,height);state.viewport(_currentViewport.copy(_viewport).multiplyScalar(_pixelRatio))};this.setScissor=function(x,y,width,height){_scissor.set(x,_height-y-height,width,height);state.scissor(_currentScissor.copy(_scissor).multiplyScalar(_pixelRatio))};this.setScissorTest=function(boolean){state.setScissorTest(_scissorTest=boolean)};this.getClearColor=background.getClearColor;this.setClearColor=background.setClearColor;this.getClearAlpha=background.getClearAlpha;this.setClearAlpha=background.setClearAlpha;this.clear=function(color,depth,stencil){var bits=0;if(color===undefined||color)bits|=_gl.COLOR_BUFFER_BIT;if(depth===undefined||depth)bits|=_gl.DEPTH_BUFFER_BIT;if(stencil===undefined||stencil)bits|=_gl.STENCIL_BUFFER_BIT;_gl.clear(bits)};this.clearColor=function(){this.clear(true,false,false)};this.clearDepth=function(){this.clear(false,true,false)};this.clearStencil=function(){this.clear(false,false,true)};this.clearTarget=function(renderTarget,color,depth,stencil){this.setRenderTarget(renderTarget);this.clear(color,depth,stencil)};this.resetGLState=resetGLState;this.dispose=function(){_canvas.removeEventListener("webglcontextlost",onContextLost,false);renderLists.dispose()};function onContextLost(event){event.preventDefault();resetGLState();setDefaultGLState();properties.clear();objects.clear()}function onMaterialDispose(event){var material=event.target;material.removeEventListener("dispose",onMaterialDispose);deallocateMaterial(material)}function deallocateMaterial(material){releaseMaterialProgramReference(material);properties.remove(material)}function releaseMaterialProgramReference(material){var programInfo=properties.get(material).program;material.program=undefined;if(programInfo!==undefined){programCache.releaseProgram(programInfo)}}function renderObjectImmediate(object,program,material){object.render(function(object){_this.renderBufferImmediate(object,program,material)})}this.renderBufferImmediate=function(object,program,material){state.initAttributes();var buffers=properties.get(object);if(object.hasPositions&&!buffers.position)buffers.position=_gl.createBuffer();if(object.hasNormals&&!buffers.normal)buffers.normal=_gl.createBuffer();if(object.hasUvs&&!buffers.uv)buffers.uv=_gl.createBuffer();if(object.hasColors&&!buffers.color)buffers.color=_gl.createBuffer();var programAttributes=program.getAttributes();if(object.hasPositions){_gl.bindBuffer(_gl.ARRAY_BUFFER,buffers.position);_gl.bufferData(_gl.ARRAY_BUFFER,object.positionArray,_gl.DYNAMIC_DRAW);state.enableAttribute(programAttributes.position);_gl.vertexAttribPointer(programAttributes.position,3,_gl.FLOAT,false,0,0)}if(object.hasNormals){_gl.bindBuffer(_gl.ARRAY_BUFFER,buffers.normal);if(!material.isMeshPhongMaterial&&!material.isMeshStandardMaterial&&!material.isMeshNormalMaterial&&material.shading===FlatShading){for(var i=0,l=object.count*3;i<l;i+=9){var array=object.normalArray;var nx=(array[i+0]+array[i+3]+array[i+6])/3;var ny=(array[i+1]+array[i+4]+array[i+7])/3;var nz=(array[i+2]+array[i+5]+array[i+8])/3;array[i+0]=nx;array[i+1]=ny;array[i+2]=nz;array[i+3]=nx;array[i+4]=ny;array[i+5]=nz;array[i+6]=nx;array[i+7]=ny;array[i+8]=nz}}_gl.bufferData(_gl.ARRAY_BUFFER,object.normalArray,_gl.DYNAMIC_DRAW);state.enableAttribute(programAttributes.normal);_gl.vertexAttribPointer(programAttributes.normal,3,_gl.FLOAT,false,0,0)}if(object.hasUvs&&material.map){_gl.bindBuffer(_gl.ARRAY_BUFFER,buffers.uv);_gl.bufferData(_gl.ARRAY_BUFFER,object.uvArray,_gl.DYNAMIC_DRAW);state.enableAttribute(programAttributes.uv);_gl.vertexAttribPointer(attributes.uv,2,_gl.FLOAT,false,0,0)}if(object.hasColors&&material.vertexColors!==NoColors){_gl.bindBuffer(_gl.ARRAY_BUFFER,buffers.color);_gl.bufferData(_gl.ARRAY_BUFFER,object.colorArray,_gl.DYNAMIC_DRAW);state.enableAttribute(programAttributes.color);_gl.vertexAttribPointer(programAttributes.color,3,_gl.FLOAT,false,0,0)}state.disableUnusedAttributes();_gl.drawArrays(_gl.TRIANGLES,0,object.count);object.count=0};function absNumericalSort(a,b){return Math.abs(b[0])-Math.abs(a[0])}this.renderBufferDirect=function(camera,fog,geometry,material,object,group){state.setMaterial(material);var program=setProgram(camera,fog,material,object);var geometryProgram=geometry.id+"_"+program.id+"_"+(material.wireframe===true);var updateBuffers=false;if(geometryProgram!==_currentGeometryProgram){_currentGeometryProgram=geometryProgram;updateBuffers=true}var morphTargetInfluences=object.morphTargetInfluences;if(morphTargetInfluences!==undefined){var activeInfluences=[];for(var i=0,l=morphTargetInfluences.length;i<l;i++){var influence=morphTargetInfluences[i];activeInfluences.push([influence,i])}activeInfluences.sort(absNumericalSort);if(activeInfluences.length>8){activeInfluences.length=8}var morphAttributes=geometry.morphAttributes;for(var i=0,l=activeInfluences.length;i<l;i++){var influence=activeInfluences[i];morphInfluences[i]=influence[0];if(influence[0]!==0){var index=influence[1];if(material.morphTargets===true&&morphAttributes.position)geometry.addAttribute("morphTarget"+i,morphAttributes.position[index]);if(material.morphNormals===true&&morphAttributes.normal)geometry.addAttribute("morphNormal"+i,morphAttributes.normal[index])}else{if(material.morphTargets===true)geometry.removeAttribute("morphTarget"+i);if(material.morphNormals===true)geometry.removeAttribute("morphNormal"+i)}}for(var i=activeInfluences.length,il=morphInfluences.length;i<il;i++){morphInfluences[i]=0}program.getUniforms().setValue(_gl,"morphTargetInfluences",morphInfluences);updateBuffers=true}var index=geometry.index;var position=geometry.attributes.position;var rangeFactor=1;if(material.wireframe===true){index=geometries.getWireframeAttribute(geometry);rangeFactor=2}var attribute;var renderer=bufferRenderer;if(index!==null){attribute=attributes.get(index);renderer=indexedBufferRenderer;renderer.setIndex(attribute)}if(updateBuffers){setupVertexAttributes(material,program,geometry);if(index!==null){_gl.bindBuffer(_gl.ELEMENT_ARRAY_BUFFER,attribute.buffer)}}var dataCount=0;if(index!==null){dataCount=index.count;
}else if(position!==undefined){dataCount=position.count}var rangeStart=geometry.drawRange.start*rangeFactor;var rangeCount=geometry.drawRange.count*rangeFactor;var groupStart=group!==null?group.start*rangeFactor:0;var groupCount=group!==null?group.count*rangeFactor:Infinity;var drawStart=Math.max(rangeStart,groupStart);var drawEnd=Math.min(dataCount,rangeStart+rangeCount,groupStart+groupCount)-1;var drawCount=Math.max(0,drawEnd-drawStart+1);if(drawCount===0)return;if(object.isMesh){if(material.wireframe===true){state.setLineWidth(material.wireframeLinewidth*getTargetPixelRatio());renderer.setMode(_gl.LINES)}else{switch(object.drawMode){case TrianglesDrawMode:renderer.setMode(_gl.TRIANGLES);break;case TriangleStripDrawMode:renderer.setMode(_gl.TRIANGLE_STRIP);break;case TriangleFanDrawMode:renderer.setMode(_gl.TRIANGLE_FAN);break}}}else if(object.isLine){var lineWidth=material.linewidth;if(lineWidth===undefined)lineWidth=1;state.setLineWidth(lineWidth*getTargetPixelRatio());if(object.isLineSegments){renderer.setMode(_gl.LINES)}else if(object.isLineLoop){renderer.setMode(_gl.LINE_LOOP)}else{renderer.setMode(_gl.LINE_STRIP)}}else if(object.isPoints){renderer.setMode(_gl.POINTS)}if(geometry&&geometry.isInstancedBufferGeometry){if(geometry.maxInstancedCount>0){renderer.renderInstances(geometry,drawStart,drawCount)}}else{renderer.render(drawStart,drawCount)}};function setupVertexAttributes(material,program,geometry,startIndex){if(geometry&&geometry.isInstancedBufferGeometry){if(extensions.get("ANGLE_instanced_arrays")===null){console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}}if(startIndex===undefined)startIndex=0;state.initAttributes();var geometryAttributes=geometry.attributes;var programAttributes=program.getAttributes();var materialDefaultAttributeValues=material.defaultAttributeValues;for(var name in programAttributes){var programAttribute=programAttributes[name];if(programAttribute>=0){var geometryAttribute=geometryAttributes[name];if(geometryAttribute!==undefined){var normalized=geometryAttribute.normalized;var size=geometryAttribute.itemSize;var attribute=attributes.get(geometryAttribute);var buffer=attribute.buffer;var type=attribute.type;var bytesPerElement=attribute.bytesPerElement;if(geometryAttribute.isInterleavedBufferAttribute){var data=geometryAttribute.data;var stride=data.stride;var offset=geometryAttribute.offset;if(data&&data.isInstancedInterleavedBuffer){state.enableAttributeAndDivisor(programAttribute,data.meshPerAttribute);if(geometry.maxInstancedCount===undefined){geometry.maxInstancedCount=data.meshPerAttribute*data.count}}else{state.enableAttribute(programAttribute)}_gl.bindBuffer(_gl.ARRAY_BUFFER,buffer);_gl.vertexAttribPointer(programAttribute,size,type,normalized,stride*bytesPerElement,(startIndex*stride+offset)*bytesPerElement)}else{if(geometryAttribute.isInstancedBufferAttribute){state.enableAttributeAndDivisor(programAttribute,geometryAttribute.meshPerAttribute);if(geometry.maxInstancedCount===undefined){geometry.maxInstancedCount=geometryAttribute.meshPerAttribute*geometryAttribute.count}}else{state.enableAttribute(programAttribute)}_gl.bindBuffer(_gl.ARRAY_BUFFER,buffer);_gl.vertexAttribPointer(programAttribute,size,type,normalized,0,startIndex*size*bytesPerElement)}}else if(materialDefaultAttributeValues!==undefined){var value=materialDefaultAttributeValues[name];if(value!==undefined){switch(value.length){case 2:_gl.vertexAttrib2fv(programAttribute,value);break;case 3:_gl.vertexAttrib3fv(programAttribute,value);break;case 4:_gl.vertexAttrib4fv(programAttribute,value);break;default:_gl.vertexAttrib1fv(programAttribute,value)}}}}}state.disableUnusedAttributes()}this.compile=function(scene,camera){lights=[];scene.traverse(function(object){if(object.isLight){lights.push(object)}});setupLights(lights,camera);scene.traverse(function(object){if(object.material){if(Array.isArray(object.material)){for(var i=0;i<object.material.length;i++){initMaterial(object.material[i],scene.fog,object)}}else{initMaterial(object.material,scene.fog,object)}}})};this.animate=function(callback){function onFrame(){callback();(vr.getDevice()||window).requestAnimationFrame(onFrame)}(vr.getDevice()||window).requestAnimationFrame(onFrame)};this.render=function(scene,camera,renderTarget,forceClear){if(!(camera&&camera.isCamera)){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}_currentGeometryProgram="";_currentMaterialId=-1;_currentCamera=null;if(scene.autoUpdate===true)scene.updateMatrixWorld();if(camera.parent===null)camera.updateMatrixWorld();if(vr.enabled){camera=vr.getCamera(camera)}_projScreenMatrix.multiplyMatrices(camera.projectionMatrix,camera.matrixWorldInverse);_frustum.setFromMatrix(_projScreenMatrix);lights.length=0;sprites.length=0;lensFlares.length=0;_localClippingEnabled=this.localClippingEnabled;_clippingEnabled=_clipping.init(this.clippingPlanes,_localClippingEnabled,camera);currentRenderList=renderLists.get(scene,camera);currentRenderList.init();projectObject(scene,camera,_this.sortObjects);currentRenderList.finish();if(_this.sortObjects===true){currentRenderList.sort()}if(_clippingEnabled)_clipping.beginShadows();setupShadows(lights);shadowMap.render(scene,camera);setupLights(lights,camera);if(_clippingEnabled)_clipping.endShadows();_infoRender.frame++;_infoRender.calls=0;_infoRender.vertices=0;_infoRender.faces=0;_infoRender.points=0;if(renderTarget===undefined){renderTarget=null}this.setRenderTarget(renderTarget);background.render(scene,camera,forceClear);var opaqueObjects=currentRenderList.opaque;var transparentObjects=currentRenderList.transparent;if(scene.overrideMaterial){var overrideMaterial=scene.overrideMaterial;if(opaqueObjects.length)renderObjects(opaqueObjects,scene,camera,overrideMaterial);if(transparentObjects.length)renderObjects(transparentObjects,scene,camera,overrideMaterial)}else{if(opaqueObjects.length)renderObjects(opaqueObjects,scene,camera);if(transparentObjects.length)renderObjects(transparentObjects,scene,camera)}spritePlugin.render(scene,camera);lensFlarePlugin.render(scene,camera,_currentViewport);if(renderTarget){textures.updateRenderTargetMipmap(renderTarget)}state.buffers.depth.setTest(true);state.buffers.depth.setMask(true);state.buffers.color.setMask(true);if(camera.isArrayCamera){_this.setScissorTest(false)}if(vr.enabled){vr.submitFrame()}};function projectObject(object,camera,sortObjects){if(!object.visible)return;var visible=object.layers.test(camera.layers);if(visible){if(object.isLight){lights.push(object)}else if(object.isSprite){if(!object.frustumCulled||_frustum.intersectsSprite(object)){sprites.push(object)}}else if(object.isLensFlare){lensFlares.push(object)}else if(object.isImmediateRenderObject){if(sortObjects){_vector3.setFromMatrixPosition(object.matrixWorld).applyMatrix4(_projScreenMatrix)}currentRenderList.push(object,null,object.material,_vector3.z,null)}else if(object.isMesh||object.isLine||object.isPoints){if(object.isSkinnedMesh){object.skeleton.update()}if(!object.frustumCulled||_frustum.intersectsObject(object)){if(sortObjects){_vector3.setFromMatrixPosition(object.matrixWorld).applyMatrix4(_projScreenMatrix)}var geometry=objects.update(object);var material=object.material;if(Array.isArray(material)){var groups=geometry.groups;for(var i=0,l=groups.length;i<l;i++){var group=groups[i];var groupMaterial=material[group.materialIndex];if(groupMaterial&&groupMaterial.visible){currentRenderList.push(object,geometry,groupMaterial,_vector3.z,group)}}}else if(material.visible){currentRenderList.push(object,geometry,material,_vector3.z,null)}}}}var children=object.children;for(var i=0,l=children.length;i<l;i++){projectObject(children[i],camera,sortObjects)}}function renderObjects(renderList,scene,camera,overrideMaterial){for(var i=0,l=renderList.length;i<l;i++){var renderItem=renderList[i];var object=renderItem.object;var geometry=renderItem.geometry;var material=overrideMaterial===undefined?renderItem.material:overrideMaterial;var group=renderItem.group;if(camera.isArrayCamera){_currentArrayCamera=camera;var cameras=camera.cameras;for(var j=0,jl=cameras.length;j<jl;j++){var camera2=cameras[j];if(object.layers.test(camera2.layers)){var bounds=camera2.bounds;var x=bounds.x*_width;var y=bounds.y*_height;var width=bounds.z*_width;var height=bounds.w*_height;_this.setViewport(x,y,width,height);_this.setScissor(x,y,width,height);_this.setScissorTest(true);renderObject(object,scene,camera2,geometry,material,group)}}}else{_currentArrayCamera=null;renderObject(object,scene,camera,geometry,material,group)}}}function renderObject(object,scene,camera,geometry,material,group){object.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse,object.matrixWorld);object.normalMatrix.getNormalMatrix(object.modelViewMatrix);object.onBeforeRender(_this,scene,camera,geometry,material,group);if(object.isImmediateRenderObject){state.setMaterial(material);var program=setProgram(camera,scene.fog,material,object);_currentGeometryProgram="";renderObjectImmediate(object,program,material)}else{_this.renderBufferDirect(camera,scene.fog,geometry,material,object,group)}object.onAfterRender(_this,scene,camera,geometry,material,group)}function initMaterial(material,fog,object){var materialProperties=properties.get(material);var parameters=programCache.getParameters(material,_lights,fog,_clipping.numPlanes,_clipping.numIntersection,object);var code=programCache.getProgramCode(material,parameters);var program=materialProperties.program;var programChange=true;if(program===undefined){material.addEventListener("dispose",onMaterialDispose)}else if(program.code!==code){releaseMaterialProgramReference(material)}else if(parameters.shaderID!==undefined){return}else{programChange=false}if(programChange){if(parameters.shaderID){var shader=ShaderLib[parameters.shaderID];materialProperties.shader={name:material.type,uniforms:UniformsUtils.clone(shader.uniforms),vertexShader:shader.vertexShader,fragmentShader:shader.fragmentShader}}else{materialProperties.shader={name:material.type,uniforms:material.uniforms,vertexShader:material.vertexShader,fragmentShader:material.fragmentShader}}material.onBeforeCompile(materialProperties.shader);program=programCache.acquireProgram(material,materialProperties.shader,parameters,code);materialProperties.program=program;material.program=program}var programAttributes=program.getAttributes();if(material.morphTargets){material.numSupportedMorphTargets=0;for(var i=0;i<_this.maxMorphTargets;i++){if(programAttributes["morphTarget"+i]>=0){material.numSupportedMorphTargets++}}}if(material.morphNormals){material.numSupportedMorphNormals=0;for(var i=0;i<_this.maxMorphNormals;i++){if(programAttributes["morphNormal"+i]>=0){material.numSupportedMorphNormals++}}}var uniforms=materialProperties.shader.uniforms;if(!material.isShaderMaterial&&!material.isRawShaderMaterial||material.clipping===true){materialProperties.numClippingPlanes=_clipping.numPlanes;materialProperties.numIntersection=_clipping.numIntersection;uniforms.clippingPlanes=_clipping.uniform}materialProperties.fog=fog;materialProperties.lightsHash=_lights.hash;if(material.lights){uniforms.ambientLightColor.value=_lights.ambient;uniforms.directionalLights.value=_lights.directional;uniforms.spotLights.value=_lights.spot;uniforms.rectAreaLights.value=_lights.rectArea;uniforms.pointLights.value=_lights.point;uniforms.hemisphereLights.value=_lights.hemi;uniforms.directionalShadowMap.value=_lights.directionalShadowMap;uniforms.directionalShadowMatrix.value=_lights.directionalShadowMatrix;uniforms.spotShadowMap.value=_lights.spotShadowMap;uniforms.spotShadowMatrix.value=_lights.spotShadowMatrix;uniforms.pointShadowMap.value=_lights.pointShadowMap;uniforms.pointShadowMatrix.value=_lights.pointShadowMatrix}var progUniforms=materialProperties.program.getUniforms(),uniformsList=WebGLUniforms.seqWithValue(progUniforms.seq,uniforms);materialProperties.uniformsList=uniformsList}function setProgram(camera,fog,material,object){_usedTextureUnits=0;var materialProperties=properties.get(material);if(_clippingEnabled){if(_localClippingEnabled||camera!==_currentCamera){var useCache=camera===_currentCamera&&material.id===_currentMaterialId;_clipping.setState(material.clippingPlanes,material.clipIntersection,material.clipShadows,camera,materialProperties,useCache)}}if(material.needsUpdate===false){if(materialProperties.program===undefined){material.needsUpdate=true}else if(material.fog&&materialProperties.fog!==fog){material.needsUpdate=true}else if(material.lights&&materialProperties.lightsHash!==_lights.hash){material.needsUpdate=true}else if(materialProperties.numClippingPlanes!==undefined&&(materialProperties.numClippingPlanes!==_clipping.numPlanes||materialProperties.numIntersection!==_clipping.numIntersection)){material.needsUpdate=true}}if(material.needsUpdate){initMaterial(material,fog,object);material.needsUpdate=false}var refreshProgram=false;var refreshMaterial=false;var refreshLights=false;var program=materialProperties.program,p_uniforms=program.getUniforms(),m_uniforms=materialProperties.shader.uniforms;if(program.id!==_currentProgram){_gl.useProgram(program.program);_currentProgram=program.id;refreshProgram=true;refreshMaterial=true;refreshLights=true}if(material.id!==_currentMaterialId){_currentMaterialId=material.id;refreshMaterial=true}if(refreshProgram||camera!==_currentCamera){p_uniforms.setValue(_gl,"projectionMatrix",camera.projectionMatrix);if(capabilities.logarithmicDepthBuffer){p_uniforms.setValue(_gl,"logDepthBufFC",2/(Math.log(camera.far+1)/Math.LN2))}if(_currentCamera!==(_currentArrayCamera||camera)){_currentCamera=_currentArrayCamera||camera;refreshMaterial=true;refreshLights=true}if(material.isShaderMaterial||material.isMeshPhongMaterial||material.isMeshStandardMaterial||material.envMap){var uCamPos=p_uniforms.map.cameraPosition;if(uCamPos!==undefined){uCamPos.setValue(_gl,_vector3.setFromMatrixPosition(camera.matrixWorld))}}if(material.isMeshPhongMaterial||material.isMeshLambertMaterial||material.isMeshBasicMaterial||material.isMeshStandardMaterial||material.isShaderMaterial||material.skinning){p_uniforms.setValue(_gl,"viewMatrix",camera.matrixWorldInverse)}}if(material.skinning){p_uniforms.setOptional(_gl,object,"bindMatrix");p_uniforms.setOptional(_gl,object,"bindMatrixInverse");var skeleton=object.skeleton;if(skeleton){var bones=skeleton.bones;if(capabilities.floatVertexTextures){if(skeleton.boneTexture===undefined){var size=Math.sqrt(bones.length*4);size=_Math.nextPowerOfTwo(Math.ceil(size));size=Math.max(size,4);var boneMatrices=new Float32Array(size*size*4);boneMatrices.set(skeleton.boneMatrices);var boneTexture=new DataTexture(boneMatrices,size,size,RGBAFormat,FloatType);skeleton.boneMatrices=boneMatrices;skeleton.boneTexture=boneTexture;skeleton.boneTextureSize=size}p_uniforms.setValue(_gl,"boneTexture",skeleton.boneTexture);p_uniforms.setValue(_gl,"boneTextureSize",skeleton.boneTextureSize)}else{p_uniforms.setOptional(_gl,skeleton,"boneMatrices")}}}if(refreshMaterial){p_uniforms.setValue(_gl,"toneMappingExposure",_this.toneMappingExposure);p_uniforms.setValue(_gl,"toneMappingWhitePoint",_this.toneMappingWhitePoint);if(material.lights){markUniformsLightsNeedsUpdate(m_uniforms,refreshLights)}if(fog&&material.fog){refreshUniformsFog(m_uniforms,fog)}if(material.isMeshBasicMaterial||material.isMeshLambertMaterial||material.isMeshPhongMaterial||material.isMeshStandardMaterial||material.isMeshNormalMaterial||material.isMeshDepthMaterial){refreshUniformsCommon(m_uniforms,material)}if(material.isLineBasicMaterial){refreshUniformsLine(m_uniforms,material)}else if(material.isLineDashedMaterial){refreshUniformsLine(m_uniforms,material);refreshUniformsDash(m_uniforms,material)}else if(material.isPointsMaterial){refreshUniformsPoints(m_uniforms,material)}else if(material.isMeshLambertMaterial){refreshUniformsLambert(m_uniforms,material)}else if(material.isMeshToonMaterial){refreshUniformsToon(m_uniforms,material)}else if(material.isMeshPhongMaterial){refreshUniformsPhong(m_uniforms,material)}else if(material.isMeshPhysicalMaterial){refreshUniformsPhysical(m_uniforms,material)}else if(material.isMeshStandardMaterial){refreshUniformsStandard(m_uniforms,material)}else if(material.isMeshDepthMaterial){if(material.displacementMap){m_uniforms.displacementMap.value=material.displacementMap;m_uniforms.displacementScale.value=material.displacementScale;m_uniforms.displacementBias.value=material.displacementBias}}else if(material.isMeshNormalMaterial){refreshUniformsNormal(m_uniforms,material)}if(m_uniforms.ltcMat!==undefined)m_uniforms.ltcMat.value=UniformsLib.LTC_MAT_TEXTURE;if(m_uniforms.ltcMag!==undefined)m_uniforms.ltcMag.value=UniformsLib.LTC_MAG_TEXTURE;WebGLUniforms.upload(_gl,materialProperties.uniformsList,m_uniforms,_this)}p_uniforms.setValue(_gl,"modelViewMatrix",object.modelViewMatrix);p_uniforms.setValue(_gl,"normalMatrix",object.normalMatrix);p_uniforms.setValue(_gl,"modelMatrix",object.matrixWorld);return program}function refreshUniformsCommon(uniforms,material){uniforms.opacity.value=material.opacity;uniforms.diffuse.value=material.color;if(material.emissive){uniforms.emissive.value.copy(material.emissive).multiplyScalar(material.emissiveIntensity)}uniforms.map.value=material.map;uniforms.specularMap.value=material.specularMap;uniforms.alphaMap.value=material.alphaMap;if(material.lightMap){uniforms.lightMap.value=material.lightMap;uniforms.lightMapIntensity.value=material.lightMapIntensity}if(material.aoMap){uniforms.aoMap.value=material.aoMap;uniforms.aoMapIntensity.value=material.aoMapIntensity}var uvScaleMap;if(material.map){uvScaleMap=material.map}else if(material.specularMap){uvScaleMap=material.specularMap}else if(material.displacementMap){uvScaleMap=material.displacementMap}else if(material.normalMap){uvScaleMap=material.normalMap}else if(material.bumpMap){uvScaleMap=material.bumpMap}else if(material.roughnessMap){uvScaleMap=material.roughnessMap}else if(material.metalnessMap){uvScaleMap=material.metalnessMap}else if(material.alphaMap){uvScaleMap=material.alphaMap}else if(material.emissiveMap){uvScaleMap=material.emissiveMap}if(uvScaleMap!==undefined){if(uvScaleMap.isWebGLRenderTarget){uvScaleMap=uvScaleMap.texture}var offset=uvScaleMap.offset;var repeat=uvScaleMap.repeat;uniforms.offsetRepeat.value.set(offset.x,offset.y,repeat.x,repeat.y)}uniforms.envMap.value=material.envMap;uniforms.flipEnvMap.value=!(material.envMap&&material.envMap.isCubeTexture)?1:-1;uniforms.reflectivity.value=material.reflectivity;uniforms.refractionRatio.value=material.refractionRatio}function refreshUniformsLine(uniforms,material){uniforms.diffuse.value=material.color;uniforms.opacity.value=material.opacity}function refreshUniformsDash(uniforms,material){uniforms.dashSize.value=material.dashSize;uniforms.totalSize.value=material.dashSize+material.gapSize;uniforms.scale.value=material.scale}function refreshUniformsPoints(uniforms,material){uniforms.diffuse.value=material.color;uniforms.opacity.value=material.opacity;uniforms.size.value=material.size*_pixelRatio;uniforms.scale.value=_height*.5;uniforms.map.value=material.map;if(material.map!==null){var offset=material.map.offset;var repeat=material.map.repeat;uniforms.offsetRepeat.value.set(offset.x,offset.y,repeat.x,repeat.y)}}function refreshUniformsFog(uniforms,fog){uniforms.fogColor.value=fog.color;if(fog.isFog){uniforms.fogNear.value=fog.near;uniforms.fogFar.value=fog.far}else if(fog.isFogExp2){uniforms.fogDensity.value=fog.density}}function refreshUniformsLambert(uniforms,material){if(material.emissiveMap){uniforms.emissiveMap.value=material.emissiveMap}}function refreshUniformsPhong(uniforms,material){uniforms.specular.value=material.specular;uniforms.shininess.value=Math.max(material.shininess,1e-4);if(material.emissiveMap){uniforms.emissiveMap.value=material.emissiveMap}if(material.bumpMap){uniforms.bumpMap.value=material.bumpMap;uniforms.bumpScale.value=material.bumpScale}if(material.normalMap){uniforms.normalMap.value=material.normalMap;uniforms.normalScale.value.copy(material.normalScale)}if(material.displacementMap){uniforms.displacementMap.value=material.displacementMap;uniforms.displacementScale.value=material.displacementScale;uniforms.displacementBias.value=material.displacementBias}}function refreshUniformsToon(uniforms,material){refreshUniformsPhong(uniforms,material);if(material.gradientMap){uniforms.gradientMap.value=material.gradientMap}}function refreshUniformsStandard(uniforms,material){uniforms.roughness.value=material.roughness;uniforms.metalness.value=material.metalness;if(material.roughnessMap){uniforms.roughnessMap.value=material.roughnessMap}if(material.metalnessMap){uniforms.metalnessMap.value=material.metalnessMap}if(material.emissiveMap){uniforms.emissiveMap.value=material.emissiveMap}if(material.bumpMap){uniforms.bumpMap.value=material.bumpMap;uniforms.bumpScale.value=material.bumpScale}if(material.normalMap){uniforms.normalMap.value=material.normalMap;uniforms.normalScale.value.copy(material.normalScale)}if(material.displacementMap){uniforms.displacementMap.value=material.displacementMap;uniforms.displacementScale.value=material.displacementScale;uniforms.displacementBias.value=material.displacementBias}if(material.envMap){uniforms.envMapIntensity.value=material.envMapIntensity}}function refreshUniformsPhysical(uniforms,material){uniforms.clearCoat.value=material.clearCoat;uniforms.clearCoatRoughness.value=material.clearCoatRoughness;refreshUniformsStandard(uniforms,material)}function refreshUniformsNormal(uniforms,material){if(material.bumpMap){uniforms.bumpMap.value=material.bumpMap;uniforms.bumpScale.value=material.bumpScale}if(material.normalMap){uniforms.normalMap.value=material.normalMap;uniforms.normalScale.value.copy(material.normalScale)}if(material.displacementMap){uniforms.displacementMap.value=material.displacementMap;uniforms.displacementScale.value=material.displacementScale;uniforms.displacementBias.value=material.displacementBias}}function markUniformsLightsNeedsUpdate(uniforms,value){uniforms.ambientLightColor.needsUpdate=value;uniforms.directionalLights.needsUpdate=value;uniforms.pointLights.needsUpdate=value;uniforms.spotLights.needsUpdate=value;uniforms.rectAreaLights.needsUpdate=value;uniforms.hemisphereLights.needsUpdate=value}function setupShadows(lights){var lightShadowsLength=0;for(var i=0,l=lights.length;i<l;i++){var light=lights[i];if(light.castShadow){_lights.shadows[lightShadowsLength]=light;lightShadowsLength++}}_lights.shadows.length=lightShadowsLength}function setupLights(lights,camera){var l,ll,light,shadow,r=0,g=0,b=0,color,intensity,distance,shadowMap,viewMatrix=camera.matrixWorldInverse,directionalLength=0,pointLength=0,spotLength=0,rectAreaLength=0,hemiLength=0;for(l=0,ll=lights.length;l<ll;l++){light=lights[l];color=light.color;intensity=light.intensity;distance=light.distance;shadowMap=light.shadow&&light.shadow.map?light.shadow.map.texture:null;if(light.isAmbientLight){r+=color.r*intensity;g+=color.g*intensity;b+=color.b*intensity}else if(light.isDirectionalLight){var uniforms=lightCache.get(light);uniforms.color.copy(light.color).multiplyScalar(light.intensity);uniforms.direction.setFromMatrixPosition(light.matrixWorld);_vector3.setFromMatrixPosition(light.target.matrixWorld);uniforms.direction.sub(_vector3);uniforms.direction.transformDirection(viewMatrix);uniforms.shadow=light.castShadow;if(light.castShadow){shadow=light.shadow;uniforms.shadowBias=shadow.bias;uniforms.shadowRadius=shadow.radius;uniforms.shadowMapSize=shadow.mapSize}_lights.directionalShadowMap[directionalLength]=shadowMap;_lights.directionalShadowMatrix[directionalLength]=light.shadow.matrix;_lights.directional[directionalLength]=uniforms;directionalLength++}else if(light.isSpotLight){var uniforms=lightCache.get(light);uniforms.position.setFromMatrixPosition(light.matrixWorld);uniforms.position.applyMatrix4(viewMatrix);uniforms.color.copy(color).multiplyScalar(intensity);uniforms.distance=distance;uniforms.direction.setFromMatrixPosition(light.matrixWorld);_vector3.setFromMatrixPosition(light.target.matrixWorld);uniforms.direction.sub(_vector3);uniforms.direction.transformDirection(viewMatrix);uniforms.coneCos=Math.cos(light.angle);uniforms.penumbraCos=Math.cos(light.angle*(1-light.penumbra));uniforms.decay=light.distance===0?0:light.decay;uniforms.shadow=light.castShadow;if(light.castShadow){shadow=light.shadow;uniforms.shadowBias=shadow.bias;uniforms.shadowRadius=shadow.radius;uniforms.shadowMapSize=shadow.mapSize}_lights.spotShadowMap[spotLength]=shadowMap;_lights.spotShadowMatrix[spotLength]=light.shadow.matrix;_lights.spot[spotLength]=uniforms;spotLength++}else if(light.isRectAreaLight){var uniforms=lightCache.get(light);uniforms.color.copy(color).multiplyScalar(intensity/(light.width*light.height));uniforms.position.setFromMatrixPosition(light.matrixWorld);uniforms.position.applyMatrix4(viewMatrix);_matrix42.identity();_matrix4.copy(light.matrixWorld);_matrix4.premultiply(viewMatrix);_matrix42.extractRotation(_matrix4);uniforms.halfWidth.set(light.width*.5,0,0);uniforms.halfHeight.set(0,light.height*.5,0);uniforms.halfWidth.applyMatrix4(_matrix42);uniforms.halfHeight.applyMatrix4(_matrix42);_lights.rectArea[rectAreaLength]=uniforms;rectAreaLength++}else if(light.isPointLight){var uniforms=lightCache.get(light);uniforms.position.setFromMatrixPosition(light.matrixWorld);uniforms.position.applyMatrix4(viewMatrix);uniforms.color.copy(light.color).multiplyScalar(light.intensity);uniforms.distance=light.distance;uniforms.decay=light.distance===0?0:light.decay;uniforms.shadow=light.castShadow;if(light.castShadow){shadow=light.shadow;uniforms.shadowBias=shadow.bias;uniforms.shadowRadius=shadow.radius;uniforms.shadowMapSize=shadow.mapSize}_lights.pointShadowMap[pointLength]=shadowMap;_lights.pointShadowMatrix[pointLength]=light.shadow.matrix;_lights.point[pointLength]=uniforms;pointLength++}else if(light.isHemisphereLight){var uniforms=lightCache.get(light);uniforms.direction.setFromMatrixPosition(light.matrixWorld);uniforms.direction.transformDirection(viewMatrix);uniforms.direction.normalize();uniforms.skyColor.copy(light.color).multiplyScalar(intensity);uniforms.groundColor.copy(light.groundColor).multiplyScalar(intensity);_lights.hemi[hemiLength]=uniforms;hemiLength++}}_lights.ambient[0]=r;_lights.ambient[1]=g;_lights.ambient[2]=b;_lights.directional.length=directionalLength;_lights.spot.length=spotLength;_lights.rectArea.length=rectAreaLength;_lights.point.length=pointLength;_lights.hemi.length=hemiLength;_lights.hash=directionalLength+","+pointLength+","+spotLength+","+rectAreaLength+","+hemiLength+","+_lights.shadows.length}this.setFaceCulling=function(cullFace,frontFaceDirection){state.setCullFace(cullFace);state.setFlipSided(frontFaceDirection===FrontFaceDirectionCW)};function allocTextureUnit(){var textureUnit=_usedTextureUnits;if(textureUnit>=capabilities.maxTextures){console.warn("THREE.WebGLRenderer: Trying to use "+textureUnit+" texture units while this GPU supports only "+capabilities.maxTextures)}_usedTextureUnits+=1;return textureUnit}this.allocTextureUnit=allocTextureUnit;this.setTexture2D=function(){var warned=false;return function setTexture2D(texture,slot){if(texture&&texture.isWebGLRenderTarget){if(!warned){console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead.");warned=true}texture=texture.texture}textures.setTexture2D(texture,slot)}}();this.setTexture=function(){var warned=false;return function setTexture(texture,slot){if(!warned){console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead.");warned=true}textures.setTexture2D(texture,slot)}}();this.setTextureCube=function(){var warned=false;return function setTextureCube(texture,slot){if(texture&&texture.isWebGLRenderTargetCube){if(!warned){console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead.");warned=true}texture=texture.texture}if(texture&&texture.isCubeTexture||Array.isArray(texture.image)&&texture.image.length===6){textures.setTextureCube(texture,slot)}else{textures.setTextureCubeDynamic(texture,slot)}}}();this.getRenderTarget=function(){return _currentRenderTarget};this.setRenderTarget=function(renderTarget){_currentRenderTarget=renderTarget;if(renderTarget&&properties.get(renderTarget).__webglFramebuffer===undefined){textures.setupRenderTarget(renderTarget)}var isCube=renderTarget&&renderTarget.isWebGLRenderTargetCube;var framebuffer;if(renderTarget){var renderTargetProperties=properties.get(renderTarget);if(isCube){framebuffer=renderTargetProperties.__webglFramebuffer[renderTarget.activeCubeFace]}else{framebuffer=renderTargetProperties.__webglFramebuffer}_currentScissor.copy(renderTarget.scissor);_currentScissorTest=renderTarget.scissorTest;_currentViewport.copy(renderTarget.viewport)}else{framebuffer=null;_currentScissor.copy(_scissor).multiplyScalar(_pixelRatio);_currentScissorTest=_scissorTest;_currentViewport.copy(_viewport).multiplyScalar(_pixelRatio)}if(_currentFramebuffer!==framebuffer){_gl.bindFramebuffer(_gl.FRAMEBUFFER,framebuffer);_currentFramebuffer=framebuffer}state.scissor(_currentScissor);state.setScissorTest(_currentScissorTest);state.viewport(_currentViewport);if(isCube){var textureProperties=properties.get(renderTarget.texture);_gl.framebufferTexture2D(_gl.FRAMEBUFFER,_gl.COLOR_ATTACHMENT0,_gl.TEXTURE_CUBE_MAP_POSITIVE_X+renderTarget.activeCubeFace,textureProperties.__webglTexture,renderTarget.activeMipMapLevel)}};this.readRenderTargetPixels=function(renderTarget,x,y,width,height,buffer){if(!(renderTarget&&renderTarget.isWebGLRenderTarget)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}var framebuffer=properties.get(renderTarget).__webglFramebuffer;if(framebuffer){var restore=false;if(framebuffer!==_currentFramebuffer){_gl.bindFramebuffer(_gl.FRAMEBUFFER,framebuffer);restore=true}try{var texture=renderTarget.texture;var textureFormat=texture.format;var textureType=texture.type;if(textureFormat!==RGBAFormat&¶mThreeToGL(textureFormat)!==_gl.getParameter(_gl.IMPLEMENTATION_COLOR_READ_FORMAT)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(textureType!==UnsignedByteType&¶mThreeToGL(textureType)!==_gl.getParameter(_gl.IMPLEMENTATION_COLOR_READ_TYPE)&&!(textureType===FloatType&&(extensions.get("OES_texture_float")||extensions.get("WEBGL_color_buffer_float")))&&!(textureType===HalfFloatType&&extensions.get("EXT_color_buffer_half_float"))){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}if(_gl.checkFramebufferStatus(_gl.FRAMEBUFFER)===_gl.FRAMEBUFFER_COMPLETE){if(x>=0&&x<=renderTarget.width-width&&(y>=0&&y<=renderTarget.height-height)){_gl.readPixels(x,y,width,height,paramThreeToGL(textureFormat),paramThreeToGL(textureType),buffer)}}else{console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}}finally{if(restore){_gl.bindFramebuffer(_gl.FRAMEBUFFER,_currentFramebuffer)}}}};function paramThreeToGL(p){var extension;if(p===RepeatWrapping)return _gl.REPEAT;if(p===ClampToEdgeWrapping)return _gl.CLAMP_TO_EDGE;if(p===MirroredRepeatWrapping)return _gl.MIRRORED_REPEAT;if(p===NearestFilter)return _gl.NEAREST;if(p===NearestMipMapNearestFilter)return _gl.NEAREST_MIPMAP_NEAREST;if(p===NearestMipMapLinearFilter)return _gl.NEAREST_MIPMAP_LINEAR;if(p===LinearFilter)return _gl.LINEAR;if(p===LinearMipMapNearestFilter)return _gl.LINEAR_MIPMAP_NEAREST;if(p===LinearMipMapLinearFilter)return _gl.LINEAR_MIPMAP_LINEAR;if(p===UnsignedByteType)return _gl.UNSIGNED_BYTE;if(p===UnsignedShort4444Type)return _gl.UNSIGNED_SHORT_4_4_4_4;
if(p===UnsignedShort5551Type)return _gl.UNSIGNED_SHORT_5_5_5_1;if(p===UnsignedShort565Type)return _gl.UNSIGNED_SHORT_5_6_5;if(p===ByteType)return _gl.BYTE;if(p===ShortType)return _gl.SHORT;if(p===UnsignedShortType)return _gl.UNSIGNED_SHORT;if(p===IntType)return _gl.INT;if(p===UnsignedIntType)return _gl.UNSIGNED_INT;if(p===FloatType)return _gl.FLOAT;if(p===HalfFloatType){extension=extensions.get("OES_texture_half_float");if(extension!==null)return extension.HALF_FLOAT_OES}if(p===AlphaFormat)return _gl.ALPHA;if(p===RGBFormat)return _gl.RGB;if(p===RGBAFormat)return _gl.RGBA;if(p===LuminanceFormat)return _gl.LUMINANCE;if(p===LuminanceAlphaFormat)return _gl.LUMINANCE_ALPHA;if(p===DepthFormat)return _gl.DEPTH_COMPONENT;if(p===DepthStencilFormat)return _gl.DEPTH_STENCIL;if(p===AddEquation)return _gl.FUNC_ADD;if(p===SubtractEquation)return _gl.FUNC_SUBTRACT;if(p===ReverseSubtractEquation)return _gl.FUNC_REVERSE_SUBTRACT;if(p===ZeroFactor)return _gl.ZERO;if(p===OneFactor)return _gl.ONE;if(p===SrcColorFactor)return _gl.SRC_COLOR;if(p===OneMinusSrcColorFactor)return _gl.ONE_MINUS_SRC_COLOR;if(p===SrcAlphaFactor)return _gl.SRC_ALPHA;if(p===OneMinusSrcAlphaFactor)return _gl.ONE_MINUS_SRC_ALPHA;if(p===DstAlphaFactor)return _gl.DST_ALPHA;if(p===OneMinusDstAlphaFactor)return _gl.ONE_MINUS_DST_ALPHA;if(p===DstColorFactor)return _gl.DST_COLOR;if(p===OneMinusDstColorFactor)return _gl.ONE_MINUS_DST_COLOR;if(p===SrcAlphaSaturateFactor)return _gl.SRC_ALPHA_SATURATE;if(p===RGB_S3TC_DXT1_Format||p===RGBA_S3TC_DXT1_Format||p===RGBA_S3TC_DXT3_Format||p===RGBA_S3TC_DXT5_Format){extension=extensions.get("WEBGL_compressed_texture_s3tc");if(extension!==null){if(p===RGB_S3TC_DXT1_Format)return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;if(p===RGBA_S3TC_DXT1_Format)return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(p===RGBA_S3TC_DXT3_Format)return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(p===RGBA_S3TC_DXT5_Format)return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT}}if(p===RGB_PVRTC_4BPPV1_Format||p===RGB_PVRTC_2BPPV1_Format||p===RGBA_PVRTC_4BPPV1_Format||p===RGBA_PVRTC_2BPPV1_Format){extension=extensions.get("WEBGL_compressed_texture_pvrtc");if(extension!==null){if(p===RGB_PVRTC_4BPPV1_Format)return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(p===RGB_PVRTC_2BPPV1_Format)return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(p===RGBA_PVRTC_4BPPV1_Format)return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(p===RGBA_PVRTC_2BPPV1_Format)return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}}if(p===RGB_ETC1_Format){extension=extensions.get("WEBGL_compressed_texture_etc1");if(extension!==null)return extension.COMPRESSED_RGB_ETC1_WEBGL}if(p===MinEquation||p===MaxEquation){extension=extensions.get("EXT_blend_minmax");if(extension!==null){if(p===MinEquation)return extension.MIN_EXT;if(p===MaxEquation)return extension.MAX_EXT}}if(p===UnsignedInt248Type){extension=extensions.get("WEBGL_depth_texture");if(extension!==null)return extension.UNSIGNED_INT_24_8_WEBGL}return 0}}function FogExp2(color,density){this.name="";this.color=new Color(color);this.density=density!==undefined?density:25e-5}FogExp2.prototype.isFogExp2=true;FogExp2.prototype.clone=function(){return new FogExp2(this.color.getHex(),this.density)};FogExp2.prototype.toJSON=function(meta){return{type:"FogExp2",color:this.color.getHex(),density:this.density}};function Fog(color,near,far){this.name="";this.color=new Color(color);this.near=near!==undefined?near:1;this.far=far!==undefined?far:1e3}Fog.prototype.isFog=true;Fog.prototype.clone=function(){return new Fog(this.color.getHex(),this.near,this.far)};Fog.prototype.toJSON=function(meta){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}};function Scene(){Object3D.call(this);this.type="Scene";this.background=null;this.fog=null;this.overrideMaterial=null;this.autoUpdate=true}Scene.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Scene,copy:function(source,recursive){Object3D.prototype.copy.call(this,source,recursive);if(source.background!==null)this.background=source.background.clone();if(source.fog!==null)this.fog=source.fog.clone();if(source.overrideMaterial!==null)this.overrideMaterial=source.overrideMaterial.clone();this.autoUpdate=source.autoUpdate;this.matrixAutoUpdate=source.matrixAutoUpdate;return this},toJSON:function(meta){var data=Object3D.prototype.toJSON.call(this,meta);if(this.background!==null)data.object.background=this.background.toJSON(meta);if(this.fog!==null)data.object.fog=this.fog.toJSON();return data}});function LensFlare(texture,size,distance,blending,color){Object3D.call(this);this.lensFlares=[];this.positionScreen=new Vector3;this.customUpdateCallback=undefined;if(texture!==undefined){this.add(texture,size,distance,blending,color)}}LensFlare.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:LensFlare,isLensFlare:true,copy:function(source){Object3D.prototype.copy.call(this,source);this.positionScreen.copy(source.positionScreen);this.customUpdateCallback=source.customUpdateCallback;for(var i=0,l=source.lensFlares.length;i<l;i++){this.lensFlares.push(source.lensFlares[i])}return this},add:function(texture,size,distance,blending,color,opacity){if(size===undefined)size=-1;if(distance===undefined)distance=0;if(opacity===undefined)opacity=1;if(color===undefined)color=new Color(16777215);if(blending===undefined)blending=NormalBlending;distance=Math.min(distance,Math.max(0,distance));this.lensFlares.push({texture:texture,size:size,distance:distance,x:0,y:0,z:0,scale:1,rotation:0,opacity:opacity,color:color,blending:blending})},updateLensFlares:function(){var f,fl=this.lensFlares.length;var flare;var vecX=-this.positionScreen.x*2;var vecY=-this.positionScreen.y*2;for(f=0;f<fl;f++){flare=this.lensFlares[f];flare.x=this.positionScreen.x+vecX*flare.distance;flare.y=this.positionScreen.y+vecY*flare.distance;flare.wantedRotation=flare.x*Math.PI*.25;flare.rotation+=(flare.wantedRotation-flare.rotation)*.25}}});function SpriteMaterial(parameters){Material.call(this);this.type="SpriteMaterial";this.color=new Color(16777215);this.map=null;this.rotation=0;this.fog=false;this.lights=false;this.setValues(parameters)}SpriteMaterial.prototype=Object.create(Material.prototype);SpriteMaterial.prototype.constructor=SpriteMaterial;SpriteMaterial.prototype.isSpriteMaterial=true;SpriteMaterial.prototype.copy=function(source){Material.prototype.copy.call(this,source);this.color.copy(source.color);this.map=source.map;this.rotation=source.rotation;return this};function Sprite(material){Object3D.call(this);this.type="Sprite";this.material=material!==undefined?material:new SpriteMaterial}Sprite.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Sprite,isSprite:true,raycast:function(){var intersectPoint=new Vector3;var worldPosition=new Vector3;var worldScale=new Vector3;return function raycast(raycaster,intersects){worldPosition.setFromMatrixPosition(this.matrixWorld);raycaster.ray.closestPointToPoint(worldPosition,intersectPoint);worldScale.setFromMatrixScale(this.matrixWorld);var guessSizeSq=worldScale.x*worldScale.y/4;if(worldPosition.distanceToSquared(intersectPoint)>guessSizeSq)return;var distance=raycaster.ray.origin.distanceTo(intersectPoint);if(distance<raycaster.near||distance>raycaster.far)return;intersects.push({distance:distance,point:intersectPoint.clone(),face:null,object:this})}}(),clone:function(){return new this.constructor(this.material).copy(this)}});function LOD(){Object3D.call(this);this.type="LOD";Object.defineProperties(this,{levels:{enumerable:true,value:[]}})}LOD.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:LOD,copy:function(source){Object3D.prototype.copy.call(this,source,false);var levels=source.levels;for(var i=0,l=levels.length;i<l;i++){var level=levels[i];this.addLevel(level.object.clone(),level.distance)}return this},addLevel:function(object,distance){if(distance===undefined)distance=0;distance=Math.abs(distance);var levels=this.levels;for(var l=0;l<levels.length;l++){if(distance<levels[l].distance){break}}levels.splice(l,0,{distance:distance,object:object});this.add(object)},getObjectForDistance:function(distance){var levels=this.levels;for(var i=1,l=levels.length;i<l;i++){if(distance<levels[i].distance){break}}return levels[i-1].object},raycast:function(){var matrixPosition=new Vector3;return function raycast(raycaster,intersects){matrixPosition.setFromMatrixPosition(this.matrixWorld);var distance=raycaster.ray.origin.distanceTo(matrixPosition);this.getObjectForDistance(distance).raycast(raycaster,intersects)}}(),update:function(){var v1=new Vector3;var v2=new Vector3;return function update(camera){var levels=this.levels;if(levels.length>1){v1.setFromMatrixPosition(camera.matrixWorld);v2.setFromMatrixPosition(this.matrixWorld);var distance=v1.distanceTo(v2);levels[0].object.visible=true;for(var i=1,l=levels.length;i<l;i++){if(distance>=levels[i].distance){levels[i-1].object.visible=false;levels[i].object.visible=true}else{break}}for(;i<l;i++){levels[i].object.visible=false}}}}(),toJSON:function(meta){var data=Object3D.prototype.toJSON.call(this,meta);data.object.levels=[];var levels=this.levels;for(var i=0,l=levels.length;i<l;i++){var level=levels[i];data.object.levels.push({object:level.object.uuid,distance:level.distance})}return data}});function Skeleton(bones,boneInverses){bones=bones||[];this.bones=bones.slice(0);this.boneMatrices=new Float32Array(this.bones.length*16);if(boneInverses===undefined){this.calculateInverses()}else{if(this.bones.length===boneInverses.length){this.boneInverses=boneInverses.slice(0)}else{console.warn("THREE.Skeleton boneInverses is the wrong length.");this.boneInverses=[];for(var i=0,il=this.bones.length;i<il;i++){this.boneInverses.push(new Matrix4)}}}}Object.assign(Skeleton.prototype,{calculateInverses:function(){this.boneInverses=[];for(var i=0,il=this.bones.length;i<il;i++){var inverse=new Matrix4;if(this.bones[i]){inverse.getInverse(this.bones[i].matrixWorld)}this.boneInverses.push(inverse)}},pose:function(){var bone,i,il;for(i=0,il=this.bones.length;i<il;i++){bone=this.bones[i];if(bone){bone.matrixWorld.getInverse(this.boneInverses[i])}}for(i=0,il=this.bones.length;i<il;i++){bone=this.bones[i];if(bone){if(bone.parent&&bone.parent.isBone){bone.matrix.getInverse(bone.parent.matrixWorld);bone.matrix.multiply(bone.matrixWorld)}else{bone.matrix.copy(bone.matrixWorld)}bone.matrix.decompose(bone.position,bone.quaternion,bone.scale)}}},update:function(){var offsetMatrix=new Matrix4;var identityMatrix=new Matrix4;return function update(){var bones=this.bones;var boneInverses=this.boneInverses;var boneMatrices=this.boneMatrices;var boneTexture=this.boneTexture;for(var i=0,il=bones.length;i<il;i++){var matrix=bones[i]?bones[i].matrixWorld:identityMatrix;offsetMatrix.multiplyMatrices(matrix,boneInverses[i]);offsetMatrix.toArray(boneMatrices,i*16)}if(boneTexture!==undefined){boneTexture.needsUpdate=true}}}(),clone:function(){return new Skeleton(this.bones,this.boneInverses)}});function Bone(){Object3D.call(this);this.type="Bone"}Bone.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Bone,isBone:true});function SkinnedMesh(geometry,material){Mesh.call(this,geometry,material);this.type="SkinnedMesh";this.bindMode="attached";this.bindMatrix=new Matrix4;this.bindMatrixInverse=new Matrix4;var bones=this.initBones();var skeleton=new Skeleton(bones);this.bind(skeleton,this.matrixWorld);this.normalizeSkinWeights()}SkinnedMesh.prototype=Object.assign(Object.create(Mesh.prototype),{constructor:SkinnedMesh,isSkinnedMesh:true,initBones:function(){var bones=[],bone,gbone;var i,il;if(this.geometry&&this.geometry.bones!==undefined){for(i=0,il=this.geometry.bones.length;i<il;i++){gbone=this.geometry.bones[i];bone=new Bone;bones.push(bone);bone.name=gbone.name;bone.position.fromArray(gbone.pos);bone.quaternion.fromArray(gbone.rotq);if(gbone.scl!==undefined)bone.scale.fromArray(gbone.scl)}for(i=0,il=this.geometry.bones.length;i<il;i++){gbone=this.geometry.bones[i];if(gbone.parent!==-1&&gbone.parent!==null&&bones[gbone.parent]!==undefined){bones[gbone.parent].add(bones[i])}else{this.add(bones[i])}}}this.updateMatrixWorld(true);return bones},bind:function(skeleton,bindMatrix){this.skeleton=skeleton;if(bindMatrix===undefined){this.updateMatrixWorld(true);this.skeleton.calculateInverses();bindMatrix=this.matrixWorld}this.bindMatrix.copy(bindMatrix);this.bindMatrixInverse.getInverse(bindMatrix)},pose:function(){this.skeleton.pose()},normalizeSkinWeights:function(){var scale,i;if(this.geometry&&this.geometry.isGeometry){for(i=0;i<this.geometry.skinWeights.length;i++){var sw=this.geometry.skinWeights[i];scale=1/sw.lengthManhattan();if(scale!==Infinity){sw.multiplyScalar(scale)}else{sw.set(1,0,0,0)}}}else if(this.geometry&&this.geometry.isBufferGeometry){var vec=new Vector4;var skinWeight=this.geometry.attributes.skinWeight;for(i=0;i<skinWeight.count;i++){vec.x=skinWeight.getX(i);vec.y=skinWeight.getY(i);vec.z=skinWeight.getZ(i);vec.w=skinWeight.getW(i);scale=1/vec.lengthManhattan();if(scale!==Infinity){vec.multiplyScalar(scale)}else{vec.set(1,0,0,0)}skinWeight.setXYZW(i,vec.x,vec.y,vec.z,vec.w)}}},updateMatrixWorld:function(force){Mesh.prototype.updateMatrixWorld.call(this,force);if(this.bindMode==="attached"){this.bindMatrixInverse.getInverse(this.matrixWorld)}else if(this.bindMode==="detached"){this.bindMatrixInverse.getInverse(this.bindMatrix)}else{console.warn("THREE.SkinnedMesh: Unrecognized bindMode: "+this.bindMode)}},clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}});function LineBasicMaterial(parameters){Material.call(this);this.type="LineBasicMaterial";this.color=new Color(16777215);this.linewidth=1;this.linecap="round";this.linejoin="round";this.lights=false;this.setValues(parameters)}LineBasicMaterial.prototype=Object.create(Material.prototype);LineBasicMaterial.prototype.constructor=LineBasicMaterial;LineBasicMaterial.prototype.isLineBasicMaterial=true;LineBasicMaterial.prototype.copy=function(source){Material.prototype.copy.call(this,source);this.color.copy(source.color);this.linewidth=source.linewidth;this.linecap=source.linecap;this.linejoin=source.linejoin;return this};function Line(geometry,material,mode){if(mode===1){console.warn("THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead.");return new LineSegments(geometry,material)}Object3D.call(this);this.type="Line";this.geometry=geometry!==undefined?geometry:new BufferGeometry;this.material=material!==undefined?material:new LineBasicMaterial({color:Math.random()*16777215})}Line.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Line,isLine:true,raycast:function(){var inverseMatrix=new Matrix4;var ray=new Ray;var sphere=new Sphere;return function raycast(raycaster,intersects){var precision=raycaster.linePrecision;var precisionSq=precision*precision;var geometry=this.geometry;var matrixWorld=this.matrixWorld;if(geometry.boundingSphere===null)geometry.computeBoundingSphere();sphere.copy(geometry.boundingSphere);sphere.applyMatrix4(matrixWorld);if(raycaster.ray.intersectsSphere(sphere)===false)return;inverseMatrix.getInverse(matrixWorld);ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);var vStart=new Vector3;var vEnd=new Vector3;var interSegment=new Vector3;var interRay=new Vector3;var step=this&&this.isLineSegments?2:1;if(geometry.isBufferGeometry){var index=geometry.index;var attributes=geometry.attributes;var positions=attributes.position.array;if(index!==null){var indices=index.array;for(var i=0,l=indices.length-1;i<l;i+=step){var a=indices[i];var b=indices[i+1];vStart.fromArray(positions,a*3);vEnd.fromArray(positions,b*3);var distSq=ray.distanceSqToSegment(vStart,vEnd,interRay,interSegment);if(distSq>precisionSq)continue;interRay.applyMatrix4(this.matrixWorld);var distance=raycaster.ray.origin.distanceTo(interRay);if(distance<raycaster.near||distance>raycaster.far)continue;intersects.push({distance:distance,point:interSegment.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}else{for(var i=0,l=positions.length/3-1;i<l;i+=step){vStart.fromArray(positions,3*i);vEnd.fromArray(positions,3*i+3);var distSq=ray.distanceSqToSegment(vStart,vEnd,interRay,interSegment);if(distSq>precisionSq)continue;interRay.applyMatrix4(this.matrixWorld);var distance=raycaster.ray.origin.distanceTo(interRay);if(distance<raycaster.near||distance>raycaster.far)continue;intersects.push({distance:distance,point:interSegment.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}}else if(geometry.isGeometry){var vertices=geometry.vertices;var nbVertices=vertices.length;for(var i=0;i<nbVertices-1;i+=step){var distSq=ray.distanceSqToSegment(vertices[i],vertices[i+1],interRay,interSegment);if(distSq>precisionSq)continue;interRay.applyMatrix4(this.matrixWorld);var distance=raycaster.ray.origin.distanceTo(interRay);if(distance<raycaster.near||distance>raycaster.far)continue;intersects.push({distance:distance,point:interSegment.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}});function LineSegments(geometry,material){Line.call(this,geometry,material);this.type="LineSegments"}LineSegments.prototype=Object.assign(Object.create(Line.prototype),{constructor:LineSegments,isLineSegments:true});function LineLoop(geometry,material){Line.call(this,geometry,material);this.type="LineLoop"}LineLoop.prototype=Object.assign(Object.create(Line.prototype),{constructor:LineLoop,isLineLoop:true});function PointsMaterial(parameters){Material.call(this);this.type="PointsMaterial";this.color=new Color(16777215);this.map=null;this.size=1;this.sizeAttenuation=true;this.lights=false;this.setValues(parameters)}PointsMaterial.prototype=Object.create(Material.prototype);PointsMaterial.prototype.constructor=PointsMaterial;PointsMaterial.prototype.isPointsMaterial=true;PointsMaterial.prototype.copy=function(source){Material.prototype.copy.call(this,source);this.color.copy(source.color);this.map=source.map;this.size=source.size;this.sizeAttenuation=source.sizeAttenuation;return this};function Points(geometry,material){Object3D.call(this);this.type="Points";this.geometry=geometry!==undefined?geometry:new BufferGeometry;this.material=material!==undefined?material:new PointsMaterial({color:Math.random()*16777215})}Points.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Points,isPoints:true,raycast:function(){var inverseMatrix=new Matrix4;var ray=new Ray;var sphere=new Sphere;return function raycast(raycaster,intersects){var object=this;var geometry=this.geometry;var matrixWorld=this.matrixWorld;var threshold=raycaster.params.Points.threshold;if(geometry.boundingSphere===null)geometry.computeBoundingSphere();sphere.copy(geometry.boundingSphere);sphere.applyMatrix4(matrixWorld);sphere.radius+=threshold;if(raycaster.ray.intersectsSphere(sphere)===false)return;inverseMatrix.getInverse(matrixWorld);ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);var localThreshold=threshold/((this.scale.x+this.scale.y+this.scale.z)/3);var localThresholdSq=localThreshold*localThreshold;var position=new Vector3;function testPoint(point,index){var rayPointDistanceSq=ray.distanceSqToPoint(point);if(rayPointDistanceSq<localThresholdSq){var intersectPoint=ray.closestPointToPoint(point);intersectPoint.applyMatrix4(matrixWorld);var distance=raycaster.ray.origin.distanceTo(intersectPoint);if(distance<raycaster.near||distance>raycaster.far)return;intersects.push({distance:distance,distanceToRay:Math.sqrt(rayPointDistanceSq),point:intersectPoint.clone(),index:index,face:null,object:object})}}if(geometry.isBufferGeometry){var index=geometry.index;var attributes=geometry.attributes;var positions=attributes.position.array;if(index!==null){var indices=index.array;for(var i=0,il=indices.length;i<il;i++){var a=indices[i];position.fromArray(positions,a*3);testPoint(position,a)}}else{for(var i=0,l=positions.length/3;i<l;i++){position.fromArray(positions,i*3);testPoint(position,i)}}}else{var vertices=geometry.vertices;for(var i=0,l=vertices.length;i<l;i++){testPoint(vertices[i],i)}}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}});function Group(){Object3D.call(this);this.type="Group"}Group.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Group});function VideoTexture(video,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy){Texture.call(this,video,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy);this.generateMipmaps=false;var scope=this;function update(){requestAnimationFrame(update);if(video.readyState>=video.HAVE_CURRENT_DATA){scope.needsUpdate=true}}update()}VideoTexture.prototype=Object.create(Texture.prototype);VideoTexture.prototype.constructor=VideoTexture;function CompressedTexture(mipmaps,width,height,format,type,mapping,wrapS,wrapT,magFilter,minFilter,anisotropy,encoding){Texture.call(this,null,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy,encoding);this.image={width:width,height:height};this.mipmaps=mipmaps;this.flipY=false;this.generateMipmaps=false}CompressedTexture.prototype=Object.create(Texture.prototype);CompressedTexture.prototype.constructor=CompressedTexture;CompressedTexture.prototype.isCompressedTexture=true;function CanvasTexture(canvas,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy){Texture.call(this,canvas,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy);this.needsUpdate=true}CanvasTexture.prototype=Object.create(Texture.prototype);CanvasTexture.prototype.constructor=CanvasTexture;function DepthTexture(width,height,type,mapping,wrapS,wrapT,magFilter,minFilter,anisotropy,format){format=format!==undefined?format:DepthFormat;if(format!==DepthFormat&&format!==DepthStencilFormat){throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat")}if(type===undefined&&format===DepthFormat)type=UnsignedShortType;if(type===undefined&&format===DepthStencilFormat)type=UnsignedInt248Type;Texture.call(this,null,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy);this.image={width:width,height:height};this.magFilter=magFilter!==undefined?magFilter:NearestFilter;this.minFilter=minFilter!==undefined?minFilter:NearestFilter;this.flipY=false;this.generateMipmaps=false}DepthTexture.prototype=Object.create(Texture.prototype);DepthTexture.prototype.constructor=DepthTexture;DepthTexture.prototype.isDepthTexture=true;function WireframeGeometry(geometry){BufferGeometry.call(this);this.type="WireframeGeometry";var vertices=[];var i,j,l,o,ol;var edge=[0,0],edges={},e,edge1,edge2;var key,keys=["a","b","c"];var vertex;if(geometry&&geometry.isGeometry){var faces=geometry.faces;for(i=0,l=faces.length;i<l;i++){var face=faces[i];for(j=0;j<3;j++){edge1=face[keys[j]];edge2=face[keys[(j+1)%3]];edge[0]=Math.min(edge1,edge2);edge[1]=Math.max(edge1,edge2);key=edge[0]+","+edge[1];if(edges[key]===undefined){edges[key]={index1:edge[0],index2:edge[1]}}}}for(key in edges){e=edges[key];vertex=geometry.vertices[e.index1];vertices.push(vertex.x,vertex.y,vertex.z);vertex=geometry.vertices[e.index2];vertices.push(vertex.x,vertex.y,vertex.z)}}else if(geometry&&geometry.isBufferGeometry){var position,indices,groups;var group,start,count;var index1,index2;vertex=new Vector3;if(geometry.index!==null){position=geometry.attributes.position;indices=geometry.index;groups=geometry.groups;if(groups.length===0){groups=[{start:0,count:indices.count,materialIndex:0}]}for(o=0,ol=groups.length;o<ol;++o){group=groups[o];start=group.start;count=group.count;for(i=start,l=start+count;i<l;i+=3){for(j=0;j<3;j++){edge1=indices.getX(i+j);edge2=indices.getX(i+(j+1)%3);edge[0]=Math.min(edge1,edge2);edge[1]=Math.max(edge1,edge2);key=edge[0]+","+edge[1];if(edges[key]===undefined){edges[key]={index1:edge[0],index2:edge[1]}}}}}for(key in edges){e=edges[key];vertex.fromBufferAttribute(position,e.index1);vertices.push(vertex.x,vertex.y,vertex.z);vertex.fromBufferAttribute(position,e.index2);vertices.push(vertex.x,vertex.y,vertex.z)}}else{position=geometry.attributes.position;for(i=0,l=position.count/3;i<l;i++){for(j=0;j<3;j++){index1=3*i+j;vertex.fromBufferAttribute(position,index1);vertices.push(vertex.x,vertex.y,vertex.z);index2=3*i+(j+1)%3;vertex.fromBufferAttribute(position,index2);vertices.push(vertex.x,vertex.y,vertex.z)}}}}this.addAttribute("position",new Float32BufferAttribute(vertices,3))}WireframeGeometry.prototype=Object.create(BufferGeometry.prototype);WireframeGeometry.prototype.constructor=WireframeGeometry;function ParametricGeometry(func,slices,stacks){Geometry.call(this);this.type="ParametricGeometry";this.parameters={func:func,slices:slices,stacks:stacks};this.fromBufferGeometry(new ParametricBufferGeometry(func,slices,stacks));this.mergeVertices()}ParametricGeometry.prototype=Object.create(Geometry.prototype);ParametricGeometry.prototype.constructor=ParametricGeometry;function ParametricBufferGeometry(func,slices,stacks){BufferGeometry.call(this);this.type="ParametricBufferGeometry";this.parameters={func:func,slices:slices,stacks:stacks};var indices=[];var vertices=[];var normals=[];var uvs=[];var EPS=1e-5;var normal=new Vector3;var p0=new Vector3,p1=new Vector3;var pu=new Vector3,pv=new Vector3;var i,j;var sliceCount=slices+1;for(i=0;i<=stacks;i++){var v=i/stacks;for(j=0;j<=slices;j++){var u=j/slices;p0=func(u,v,p0);vertices.push(p0.x,p0.y,p0.z);if(u-EPS>=0){p1=func(u-EPS,v,p1);pu.subVectors(p0,p1)}else{p1=func(u+EPS,v,p1);pu.subVectors(p1,p0)}if(v-EPS>=0){p1=func(u,v-EPS,p1);pv.subVectors(p0,p1)}else{p1=func(u,v+EPS,p1);pv.subVectors(p1,p0)}normal.crossVectors(pu,pv).normalize();normals.push(normal.x,normal.y,normal.z);uvs.push(u,v)}}for(i=0;i<stacks;i++){for(j=0;j<slices;j++){var a=i*sliceCount+j;var b=i*sliceCount+j+1;var c=(i+1)*sliceCount+j+1;var d=(i+1)*sliceCount+j;indices.push(a,b,d);indices.push(b,c,d)}}this.setIndex(indices);this.addAttribute("position",new Float32BufferAttribute(vertices,3));this.addAttribute("normal",new Float32BufferAttribute(normals,3));this.addAttribute("uv",new Float32BufferAttribute(uvs,2))}ParametricBufferGeometry.prototype=Object.create(BufferGeometry.prototype);ParametricBufferGeometry.prototype.constructor=ParametricBufferGeometry;function PolyhedronGeometry(vertices,indices,radius,detail){Geometry.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:vertices,indices:indices,radius:radius,detail:detail};this.fromBufferGeometry(new PolyhedronBufferGeometry(vertices,indices,radius,detail));this.mergeVertices()}PolyhedronGeometry.prototype=Object.create(Geometry.prototype);PolyhedronGeometry.prototype.constructor=PolyhedronGeometry;function PolyhedronBufferGeometry(vertices,indices,radius,detail){BufferGeometry.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:vertices,indices:indices,radius:radius,detail:detail};radius=radius||1;detail=detail||0;var vertexBuffer=[];var uvBuffer=[];subdivide(detail);appplyRadius(radius);generateUVs();this.addAttribute("position",new Float32BufferAttribute(vertexBuffer,3));this.addAttribute("normal",new Float32BufferAttribute(vertexBuffer.slice(),3));this.addAttribute("uv",new Float32BufferAttribute(uvBuffer,2));if(detail===0){this.computeVertexNormals()}else{this.normalizeNormals()}function subdivide(detail){var a=new Vector3;var b=new Vector3;var c=new Vector3;for(var i=0;i<indices.length;i+=3){getVertexByIndex(indices[i+0],a);getVertexByIndex(indices[i+1],b);getVertexByIndex(indices[i+2],c);subdivideFace(a,b,c,detail)}}function subdivideFace(a,b,c,detail){var cols=Math.pow(2,detail);var v=[];var i,j;for(i=0;i<=cols;i++){v[i]=[];var aj=a.clone().lerp(c,i/cols);var bj=b.clone().lerp(c,i/cols);var rows=cols-i;for(j=0;j<=rows;j++){if(j===0&&i===cols){v[i][j]=aj}else{v[i][j]=aj.clone().lerp(bj,j/rows)}}}for(i=0;i<cols;i++){for(j=0;j<2*(cols-i)-1;j++){var k=Math.floor(j/2);if(j%2===0){pushVertex(v[i][k+1]);pushVertex(v[i+1][k]);pushVertex(v[i][k])}else{pushVertex(v[i][k+1]);pushVertex(v[i+1][k+1]);pushVertex(v[i+1][k])}}}}function appplyRadius(radius){var vertex=new Vector3;for(var i=0;i<vertexBuffer.length;i+=3){vertex.x=vertexBuffer[i+0];vertex.y=vertexBuffer[i+1];vertex.z=vertexBuffer[i+2];vertex.normalize().multiplyScalar(radius);vertexBuffer[i+0]=vertex.x;vertexBuffer[i+1]=vertex.y;vertexBuffer[i+2]=vertex.z}}function generateUVs(){var vertex=new Vector3;for(var i=0;i<vertexBuffer.length;i+=3){vertex.x=vertexBuffer[i+0];vertex.y=vertexBuffer[i+1];vertex.z=vertexBuffer[i+2];var u=azimuth(vertex)/2/Math.PI+.5;var v=inclination(vertex)/Math.PI+.5;uvBuffer.push(u,1-v)}correctUVs();correctSeam()}function correctSeam(){for(var i=0;i<uvBuffer.length;i+=6){var x0=uvBuffer[i+0];var x1=uvBuffer[i+2];var x2=uvBuffer[i+4];var max=Math.max(x0,x1,x2);var min=Math.min(x0,x1,x2);if(max>.9&&min<.1){if(x0<.2)uvBuffer[i+0]+=1;if(x1<.2)uvBuffer[i+2]+=1;if(x2<.2)uvBuffer[i+4]+=1}}}function pushVertex(vertex){vertexBuffer.push(vertex.x,vertex.y,vertex.z)}function getVertexByIndex(index,vertex){var stride=index*3;vertex.x=vertices[stride+0];vertex.y=vertices[stride+1];vertex.z=vertices[stride+2]}function correctUVs(){var a=new Vector3;var b=new Vector3;var c=new Vector3;var centroid=new Vector3;var uvA=new Vector2;var uvB=new Vector2;var uvC=new Vector2;for(var i=0,j=0;i<vertexBuffer.length;i+=9,j+=6){a.set(vertexBuffer[i+0],vertexBuffer[i+1],vertexBuffer[i+2]);b.set(vertexBuffer[i+3],vertexBuffer[i+4],vertexBuffer[i+5]);c.set(vertexBuffer[i+6],vertexBuffer[i+7],vertexBuffer[i+8]);uvA.set(uvBuffer[j+0],uvBuffer[j+1]);uvB.set(uvBuffer[j+2],uvBuffer[j+3]);uvC.set(uvBuffer[j+4],uvBuffer[j+5]);centroid.copy(a).add(b).add(c).divideScalar(3);var azi=azimuth(centroid);correctUV(uvA,j+0,a,azi);correctUV(uvB,j+2,b,azi);correctUV(uvC,j+4,c,azi)}}function correctUV(uv,stride,vector,azimuth){if(azimuth<0&&uv.x===1){uvBuffer[stride]=uv.x-1}if(vector.x===0&&vector.z===0){uvBuffer[stride]=azimuth/2/Math.PI+.5}}function azimuth(vector){return Math.atan2(vector.z,-vector.x)}function inclination(vector){return Math.atan2(-vector.y,Math.sqrt(vector.x*vector.x+vector.z*vector.z))}}PolyhedronBufferGeometry.prototype=Object.create(BufferGeometry.prototype);PolyhedronBufferGeometry.prototype.constructor=PolyhedronBufferGeometry;function TetrahedronGeometry(radius,detail){Geometry.call(this);this.type="TetrahedronGeometry";this.parameters={radius:radius,detail:detail};this.fromBufferGeometry(new TetrahedronBufferGeometry(radius,detail));this.mergeVertices()}TetrahedronGeometry.prototype=Object.create(Geometry.prototype);TetrahedronGeometry.prototype.constructor=TetrahedronGeometry;function TetrahedronBufferGeometry(radius,detail){var vertices=[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1];var indices=[2,1,0,0,3,2,1,3,0,2,3,1];PolyhedronBufferGeometry.call(this,vertices,indices,radius,detail);this.type="TetrahedronBufferGeometry";this.parameters={radius:radius,detail:detail}}TetrahedronBufferGeometry.prototype=Object.create(PolyhedronBufferGeometry.prototype);TetrahedronBufferGeometry.prototype.constructor=TetrahedronBufferGeometry;function OctahedronGeometry(radius,detail){Geometry.call(this);this.type="OctahedronGeometry";this.parameters={radius:radius,detail:detail};this.fromBufferGeometry(new OctahedronBufferGeometry(radius,detail));this.mergeVertices()}OctahedronGeometry.prototype=Object.create(Geometry.prototype);OctahedronGeometry.prototype.constructor=OctahedronGeometry;function OctahedronBufferGeometry(radius,detail){var vertices=[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1];var indices=[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2];PolyhedronBufferGeometry.call(this,vertices,indices,radius,detail);this.type="OctahedronBufferGeometry";this.parameters={radius:radius,detail:detail}}OctahedronBufferGeometry.prototype=Object.create(PolyhedronBufferGeometry.prototype);OctahedronBufferGeometry.prototype.constructor=OctahedronBufferGeometry;
function IcosahedronGeometry(radius,detail){Geometry.call(this);this.type="IcosahedronGeometry";this.parameters={radius:radius,detail:detail};this.fromBufferGeometry(new IcosahedronBufferGeometry(radius,detail));this.mergeVertices()}IcosahedronGeometry.prototype=Object.create(Geometry.prototype);IcosahedronGeometry.prototype.constructor=IcosahedronGeometry;function IcosahedronBufferGeometry(radius,detail){var t=(1+Math.sqrt(5))/2;var vertices=[-1,t,0,1,t,0,-1,-t,0,1,-t,0,0,-1,t,0,1,t,0,-1,-t,0,1,-t,t,0,-1,t,0,1,-t,0,-1,-t,0,1];var indices=[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];PolyhedronBufferGeometry.call(this,vertices,indices,radius,detail);this.type="IcosahedronBufferGeometry";this.parameters={radius:radius,detail:detail}}IcosahedronBufferGeometry.prototype=Object.create(PolyhedronBufferGeometry.prototype);IcosahedronBufferGeometry.prototype.constructor=IcosahedronBufferGeometry;function DodecahedronGeometry(radius,detail){Geometry.call(this);this.type="DodecahedronGeometry";this.parameters={radius:radius,detail:detail};this.fromBufferGeometry(new DodecahedronBufferGeometry(radius,detail));this.mergeVertices()}DodecahedronGeometry.prototype=Object.create(Geometry.prototype);DodecahedronGeometry.prototype.constructor=DodecahedronGeometry;function DodecahedronBufferGeometry(radius,detail){var t=(1+Math.sqrt(5))/2;var r=1/t;var vertices=[-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,-t,0,-r,t,0,r,-t,0,r,t,-r,-t,0,-r,t,0,r,-t,0,r,t,0,-t,0,-r,t,0,-r,-t,0,r,t,0,r];var indices=[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,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9];PolyhedronBufferGeometry.call(this,vertices,indices,radius,detail);this.type="DodecahedronBufferGeometry";this.parameters={radius:radius,detail:detail}}DodecahedronBufferGeometry.prototype=Object.create(PolyhedronBufferGeometry.prototype);DodecahedronBufferGeometry.prototype.constructor=DodecahedronBufferGeometry;function TubeGeometry(path,tubularSegments,radius,radialSegments,closed,taper){Geometry.call(this);this.type="TubeGeometry";this.parameters={path:path,tubularSegments:tubularSegments,radius:radius,radialSegments:radialSegments,closed:closed};if(taper!==undefined)console.warn("THREE.TubeGeometry: taper has been removed.");var bufferGeometry=new TubeBufferGeometry(path,tubularSegments,radius,radialSegments,closed);this.tangents=bufferGeometry.tangents;this.normals=bufferGeometry.normals;this.binormals=bufferGeometry.binormals;this.fromBufferGeometry(bufferGeometry);this.mergeVertices()}TubeGeometry.prototype=Object.create(Geometry.prototype);TubeGeometry.prototype.constructor=TubeGeometry;function TubeBufferGeometry(path,tubularSegments,radius,radialSegments,closed){BufferGeometry.call(this);this.type="TubeBufferGeometry";this.parameters={path:path,tubularSegments:tubularSegments,radius:radius,radialSegments:radialSegments,closed:closed};tubularSegments=tubularSegments||64;radius=radius||1;radialSegments=radialSegments||8;closed=closed||false;var frames=path.computeFrenetFrames(tubularSegments,closed);this.tangents=frames.tangents;this.normals=frames.normals;this.binormals=frames.binormals;var vertex=new Vector3;var normal=new Vector3;var uv=new Vector2;var i,j;var vertices=[];var normals=[];var uvs=[];var indices=[];generateBufferData();this.setIndex(indices);this.addAttribute("position",new Float32BufferAttribute(vertices,3));this.addAttribute("normal",new Float32BufferAttribute(normals,3));this.addAttribute("uv",new Float32BufferAttribute(uvs,2));function generateBufferData(){for(i=0;i<tubularSegments;i++){generateSegment(i)}generateSegment(closed===false?tubularSegments:0);generateUVs();generateIndices()}function generateSegment(i){var P=path.getPointAt(i/tubularSegments);var N=frames.normals[i];var B=frames.binormals[i];for(j=0;j<=radialSegments;j++){var v=j/radialSegments*Math.PI*2;var sin=Math.sin(v);var cos=-Math.cos(v);normal.x=cos*N.x+sin*B.x;normal.y=cos*N.y+sin*B.y;normal.z=cos*N.z+sin*B.z;normal.normalize();normals.push(normal.x,normal.y,normal.z);vertex.x=P.x+radius*normal.x;vertex.y=P.y+radius*normal.y;vertex.z=P.z+radius*normal.z;vertices.push(vertex.x,vertex.y,vertex.z)}}function generateIndices(){for(j=1;j<=tubularSegments;j++){for(i=1;i<=radialSegments;i++){var a=(radialSegments+1)*(j-1)+(i-1);var b=(radialSegments+1)*j+(i-1);var c=(radialSegments+1)*j+i;var d=(radialSegments+1)*(j-1)+i;indices.push(a,b,d);indices.push(b,c,d)}}}function generateUVs(){for(i=0;i<=tubularSegments;i++){for(j=0;j<=radialSegments;j++){uv.x=i/tubularSegments;uv.y=j/radialSegments;uvs.push(uv.x,uv.y)}}}}TubeBufferGeometry.prototype=Object.create(BufferGeometry.prototype);TubeBufferGeometry.prototype.constructor=TubeBufferGeometry;function TorusKnotGeometry(radius,tube,tubularSegments,radialSegments,p,q,heightScale){Geometry.call(this);this.type="TorusKnotGeometry";this.parameters={radius:radius,tube:tube,tubularSegments:tubularSegments,radialSegments:radialSegments,p:p,q:q};if(heightScale!==undefined)console.warn("THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.");this.fromBufferGeometry(new TorusKnotBufferGeometry(radius,tube,tubularSegments,radialSegments,p,q));this.mergeVertices()}TorusKnotGeometry.prototype=Object.create(Geometry.prototype);TorusKnotGeometry.prototype.constructor=TorusKnotGeometry;function TorusKnotBufferGeometry(radius,tube,tubularSegments,radialSegments,p,q){BufferGeometry.call(this);this.type="TorusKnotBufferGeometry";this.parameters={radius:radius,tube:tube,tubularSegments:tubularSegments,radialSegments:radialSegments,p:p,q:q};radius=radius||100;tube=tube||40;tubularSegments=Math.floor(tubularSegments)||64;radialSegments=Math.floor(radialSegments)||8;p=p||2;q=q||3;var indices=[];var vertices=[];var normals=[];var uvs=[];var i,j;var vertex=new Vector3;var normal=new Vector3;var P1=new Vector3;var P2=new Vector3;var B=new Vector3;var T=new Vector3;var N=new Vector3;for(i=0;i<=tubularSegments;++i){var u=i/tubularSegments*p*Math.PI*2;calculatePositionOnCurve(u,p,q,radius,P1);calculatePositionOnCurve(u+.01,p,q,radius,P2);T.subVectors(P2,P1);N.addVectors(P2,P1);B.crossVectors(T,N);N.crossVectors(B,T);B.normalize();N.normalize();for(j=0;j<=radialSegments;++j){var v=j/radialSegments*Math.PI*2;var cx=-tube*Math.cos(v);var cy=tube*Math.sin(v);vertex.x=P1.x+(cx*N.x+cy*B.x);vertex.y=P1.y+(cx*N.y+cy*B.y);vertex.z=P1.z+(cx*N.z+cy*B.z);vertices.push(vertex.x,vertex.y,vertex.z);normal.subVectors(vertex,P1).normalize();normals.push(normal.x,normal.y,normal.z);uvs.push(i/tubularSegments);uvs.push(j/radialSegments)}}for(j=1;j<=tubularSegments;j++){for(i=1;i<=radialSegments;i++){var a=(radialSegments+1)*(j-1)+(i-1);var b=(radialSegments+1)*j+(i-1);var c=(radialSegments+1)*j+i;var d=(radialSegments+1)*(j-1)+i;indices.push(a,b,d);indices.push(b,c,d)}}this.setIndex(indices);this.addAttribute("position",new Float32BufferAttribute(vertices,3));this.addAttribute("normal",new Float32BufferAttribute(normals,3));this.addAttribute("uv",new Float32BufferAttribute(uvs,2));function calculatePositionOnCurve(u,p,q,radius,position){var cu=Math.cos(u);var su=Math.sin(u);var quOverP=q/p*u;var cs=Math.cos(quOverP);position.x=radius*(2+cs)*.5*cu;position.y=radius*(2+cs)*su*.5;position.z=radius*Math.sin(quOverP)*.5}}TorusKnotBufferGeometry.prototype=Object.create(BufferGeometry.prototype);TorusKnotBufferGeometry.prototype.constructor=TorusKnotBufferGeometry;function TorusGeometry(radius,tube,radialSegments,tubularSegments,arc){Geometry.call(this);this.type="TorusGeometry";this.parameters={radius:radius,tube:tube,radialSegments:radialSegments,tubularSegments:tubularSegments,arc:arc};this.fromBufferGeometry(new TorusBufferGeometry(radius,tube,radialSegments,tubularSegments,arc));this.mergeVertices()}TorusGeometry.prototype=Object.create(Geometry.prototype);TorusGeometry.prototype.constructor=TorusGeometry;function TorusBufferGeometry(radius,tube,radialSegments,tubularSegments,arc){BufferGeometry.call(this);this.type="TorusBufferGeometry";this.parameters={radius:radius,tube:tube,radialSegments:radialSegments,tubularSegments:tubularSegments,arc:arc};radius=radius||100;tube=tube||40;radialSegments=Math.floor(radialSegments)||8;tubularSegments=Math.floor(tubularSegments)||6;arc=arc||Math.PI*2;var indices=[];var vertices=[];var normals=[];var uvs=[];var center=new Vector3;var vertex=new Vector3;var normal=new Vector3;var j,i;for(j=0;j<=radialSegments;j++){for(i=0;i<=tubularSegments;i++){var u=i/tubularSegments*arc;var v=j/radialSegments*Math.PI*2;vertex.x=(radius+tube*Math.cos(v))*Math.cos(u);vertex.y=(radius+tube*Math.cos(v))*Math.sin(u);vertex.z=tube*Math.sin(v);vertices.push(vertex.x,vertex.y,vertex.z);center.x=radius*Math.cos(u);center.y=radius*Math.sin(u);normal.subVectors(vertex,center).normalize();normals.push(normal.x,normal.y,normal.z);uvs.push(i/tubularSegments);uvs.push(j/radialSegments)}}for(j=1;j<=radialSegments;j++){for(i=1;i<=tubularSegments;i++){var a=(tubularSegments+1)*j+i-1;var b=(tubularSegments+1)*(j-1)+i-1;var c=(tubularSegments+1)*(j-1)+i;var d=(tubularSegments+1)*j+i;indices.push(a,b,d);indices.push(b,c,d)}}this.setIndex(indices);this.addAttribute("position",new Float32BufferAttribute(vertices,3));this.addAttribute("normal",new Float32BufferAttribute(normals,3));this.addAttribute("uv",new Float32BufferAttribute(uvs,2))}TorusBufferGeometry.prototype=Object.create(BufferGeometry.prototype);TorusBufferGeometry.prototype.constructor=TorusBufferGeometry;var ShapeUtils={area:function(contour){var n=contour.length;var a=0;for(var p=n-1,q=0;q<n;p=q++){a+=contour[p].x*contour[q].y-contour[q].x*contour[p].y}return a*.5},triangulate:function(){function snip(contour,u,v,w,n,verts){var p;var ax,ay,bx,by;var cx,cy,px,py;ax=contour[verts[u]].x;ay=contour[verts[u]].y;bx=contour[verts[v]].x;by=contour[verts[v]].y;cx=contour[verts[w]].x;cy=contour[verts[w]].y;if((bx-ax)*(cy-ay)-(by-ay)*(cx-ax)<=0)return false;var aX,aY,bX,bY,cX,cY;var apx,apy,bpx,bpy,cpx,cpy;var cCROSSap,bCROSScp,aCROSSbp;aX=cx-bx;aY=cy-by;bX=ax-cx;bY=ay-cy;cX=bx-ax;cY=by-ay;for(p=0;p<n;p++){px=contour[verts[p]].x;py=contour[verts[p]].y;if(px===ax&&py===ay||px===bx&&py===by||px===cx&&py===cy)continue;apx=px-ax;apy=py-ay;bpx=px-bx;bpy=py-by;cpx=px-cx;cpy=py-cy;aCROSSbp=aX*bpy-aY*bpx;cCROSSap=cX*apy-cY*apx;bCROSScp=bX*cpy-bY*cpx;if(aCROSSbp>=-Number.EPSILON&&bCROSScp>=-Number.EPSILON&&cCROSSap>=-Number.EPSILON)return false}return true}return function triangulate(contour,indices){var n=contour.length;if(n<3)return null;var result=[],verts=[],vertIndices=[];var u,v,w;if(ShapeUtils.area(contour)>0){for(v=0;v<n;v++)verts[v]=v}else{for(v=0;v<n;v++)verts[v]=n-1-v}var nv=n;var count=2*nv;for(v=nv-1;nv>2;){if(count--<=0){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");if(indices)return vertIndices;return result}u=v;if(nv<=u)u=0;v=u+1;if(nv<=v)v=0;w=v+1;if(nv<=w)w=0;if(snip(contour,u,v,w,nv,verts)){var a,b,c,s,t;a=verts[u];b=verts[v];c=verts[w];result.push([contour[a],contour[b],contour[c]]);vertIndices.push([verts[u],verts[v],verts[w]]);for(s=v,t=v+1;t<nv;s++,t++){verts[s]=verts[t]}nv--;count=2*nv}}if(indices)return vertIndices;return result}}(),triangulateShape:function(contour,holes){function removeDupEndPts(points){var l=points.length;if(l>2&&points[l-1].equals(points[0])){points.pop()}}removeDupEndPts(contour);holes.forEach(removeDupEndPts);function point_in_segment_2D_colin(inSegPt1,inSegPt2,inOtherPt){if(inSegPt1.x!==inSegPt2.x){if(inSegPt1.x<inSegPt2.x){return inSegPt1.x<=inOtherPt.x&&inOtherPt.x<=inSegPt2.x}else{return inSegPt2.x<=inOtherPt.x&&inOtherPt.x<=inSegPt1.x}}else{if(inSegPt1.y<inSegPt2.y){return inSegPt1.y<=inOtherPt.y&&inOtherPt.y<=inSegPt2.y}else{return inSegPt2.y<=inOtherPt.y&&inOtherPt.y<=inSegPt1.y}}}function intersect_segments_2D(inSeg1Pt1,inSeg1Pt2,inSeg2Pt1,inSeg2Pt2,inExcludeAdjacentSegs){var seg1dx=inSeg1Pt2.x-inSeg1Pt1.x,seg1dy=inSeg1Pt2.y-inSeg1Pt1.y;var seg2dx=inSeg2Pt2.x-inSeg2Pt1.x,seg2dy=inSeg2Pt2.y-inSeg2Pt1.y;var seg1seg2dx=inSeg1Pt1.x-inSeg2Pt1.x;var seg1seg2dy=inSeg1Pt1.y-inSeg2Pt1.y;var limit=seg1dy*seg2dx-seg1dx*seg2dy;var perpSeg1=seg1dy*seg1seg2dx-seg1dx*seg1seg2dy;if(Math.abs(limit)>Number.EPSILON){var perpSeg2;if(limit>0){if(perpSeg1<0||perpSeg1>limit)return[];perpSeg2=seg2dy*seg1seg2dx-seg2dx*seg1seg2dy;if(perpSeg2<0||perpSeg2>limit)return[]}else{if(perpSeg1>0||perpSeg1<limit)return[];perpSeg2=seg2dy*seg1seg2dx-seg2dx*seg1seg2dy;if(perpSeg2>0||perpSeg2<limit)return[]}if(perpSeg2===0){if(inExcludeAdjacentSegs&&(perpSeg1===0||perpSeg1===limit))return[];return[inSeg1Pt1]}if(perpSeg2===limit){if(inExcludeAdjacentSegs&&(perpSeg1===0||perpSeg1===limit))return[];return[inSeg1Pt2]}if(perpSeg1===0)return[inSeg2Pt1];if(perpSeg1===limit)return[inSeg2Pt2];var factorSeg1=perpSeg2/limit;return[{x:inSeg1Pt1.x+factorSeg1*seg1dx,y:inSeg1Pt1.y+factorSeg1*seg1dy}]}else{if(perpSeg1!==0||seg2dy*seg1seg2dx!==seg2dx*seg1seg2dy)return[];var seg1Pt=seg1dx===0&&seg1dy===0;var seg2Pt=seg2dx===0&&seg2dy===0;if(seg1Pt&&seg2Pt){if(inSeg1Pt1.x!==inSeg2Pt1.x||inSeg1Pt1.y!==inSeg2Pt1.y)return[];return[inSeg1Pt1]}if(seg1Pt){if(!point_in_segment_2D_colin(inSeg2Pt1,inSeg2Pt2,inSeg1Pt1))return[];return[inSeg1Pt1]}if(seg2Pt){if(!point_in_segment_2D_colin(inSeg1Pt1,inSeg1Pt2,inSeg2Pt1))return[];return[inSeg2Pt1]}var seg1min,seg1max,seg1minVal,seg1maxVal;var seg2min,seg2max,seg2minVal,seg2maxVal;if(seg1dx!==0){if(inSeg1Pt1.x<inSeg1Pt2.x){seg1min=inSeg1Pt1;seg1minVal=inSeg1Pt1.x;seg1max=inSeg1Pt2;seg1maxVal=inSeg1Pt2.x}else{seg1min=inSeg1Pt2;seg1minVal=inSeg1Pt2.x;seg1max=inSeg1Pt1;seg1maxVal=inSeg1Pt1.x}if(inSeg2Pt1.x<inSeg2Pt2.x){seg2min=inSeg2Pt1;seg2minVal=inSeg2Pt1.x;seg2max=inSeg2Pt2;seg2maxVal=inSeg2Pt2.x}else{seg2min=inSeg2Pt2;seg2minVal=inSeg2Pt2.x;seg2max=inSeg2Pt1;seg2maxVal=inSeg2Pt1.x}}else{if(inSeg1Pt1.y<inSeg1Pt2.y){seg1min=inSeg1Pt1;seg1minVal=inSeg1Pt1.y;seg1max=inSeg1Pt2;seg1maxVal=inSeg1Pt2.y}else{seg1min=inSeg1Pt2;seg1minVal=inSeg1Pt2.y;seg1max=inSeg1Pt1;seg1maxVal=inSeg1Pt1.y}if(inSeg2Pt1.y<inSeg2Pt2.y){seg2min=inSeg2Pt1;seg2minVal=inSeg2Pt1.y;seg2max=inSeg2Pt2;seg2maxVal=inSeg2Pt2.y}else{seg2min=inSeg2Pt2;seg2minVal=inSeg2Pt2.y;seg2max=inSeg2Pt1;seg2maxVal=inSeg2Pt1.y}}if(seg1minVal<=seg2minVal){if(seg1maxVal<seg2minVal)return[];if(seg1maxVal===seg2minVal){if(inExcludeAdjacentSegs)return[];return[seg2min]}if(seg1maxVal<=seg2maxVal)return[seg2min,seg1max];return[seg2min,seg2max]}else{if(seg1minVal>seg2maxVal)return[];if(seg1minVal===seg2maxVal){if(inExcludeAdjacentSegs)return[];return[seg1min]}if(seg1maxVal<=seg2maxVal)return[seg1min,seg1max];return[seg1min,seg2max]}}}function isPointInsideAngle(inVertex,inLegFromPt,inLegToPt,inOtherPt){var legFromPtX=inLegFromPt.x-inVertex.x,legFromPtY=inLegFromPt.y-inVertex.y;var legToPtX=inLegToPt.x-inVertex.x,legToPtY=inLegToPt.y-inVertex.y;var otherPtX=inOtherPt.x-inVertex.x,otherPtY=inOtherPt.y-inVertex.y;var from2toAngle=legFromPtX*legToPtY-legFromPtY*legToPtX;var from2otherAngle=legFromPtX*otherPtY-legFromPtY*otherPtX;if(Math.abs(from2toAngle)>Number.EPSILON){var other2toAngle=otherPtX*legToPtY-otherPtY*legToPtX;if(from2toAngle>0){return from2otherAngle>=0&&other2toAngle>=0}else{return from2otherAngle>=0||other2toAngle>=0}}else{return from2otherAngle>0}}function removeHoles(contour,holes){var shape=contour.concat();var hole;function isCutLineInsideAngles(inShapeIdx,inHoleIdx){var lastShapeIdx=shape.length-1;var prevShapeIdx=inShapeIdx-1;if(prevShapeIdx<0)prevShapeIdx=lastShapeIdx;var nextShapeIdx=inShapeIdx+1;if(nextShapeIdx>lastShapeIdx)nextShapeIdx=0;var insideAngle=isPointInsideAngle(shape[inShapeIdx],shape[prevShapeIdx],shape[nextShapeIdx],hole[inHoleIdx]);if(!insideAngle){return false}var lastHoleIdx=hole.length-1;var prevHoleIdx=inHoleIdx-1;if(prevHoleIdx<0)prevHoleIdx=lastHoleIdx;var nextHoleIdx=inHoleIdx+1;if(nextHoleIdx>lastHoleIdx)nextHoleIdx=0;insideAngle=isPointInsideAngle(hole[inHoleIdx],hole[prevHoleIdx],hole[nextHoleIdx],shape[inShapeIdx]);if(!insideAngle){return false}return true}function intersectsShapeEdge(inShapePt,inHolePt){var sIdx,nextIdx,intersection;for(sIdx=0;sIdx<shape.length;sIdx++){nextIdx=sIdx+1;nextIdx%=shape.length;intersection=intersect_segments_2D(inShapePt,inHolePt,shape[sIdx],shape[nextIdx],true);if(intersection.length>0)return true}return false}var indepHoles=[];function intersectsHoleEdge(inShapePt,inHolePt){var ihIdx,chkHole,hIdx,nextIdx,intersection;for(ihIdx=0;ihIdx<indepHoles.length;ihIdx++){chkHole=holes[indepHoles[ihIdx]];for(hIdx=0;hIdx<chkHole.length;hIdx++){nextIdx=hIdx+1;nextIdx%=chkHole.length;intersection=intersect_segments_2D(inShapePt,inHolePt,chkHole[hIdx],chkHole[nextIdx],true);if(intersection.length>0)return true}}return false}var holeIndex,shapeIndex,shapePt,holePt,holeIdx,cutKey,failedCuts=[],tmpShape1,tmpShape2,tmpHole1,tmpHole2;for(var h=0,hl=holes.length;h<hl;h++){indepHoles.push(h)}var minShapeIndex=0;var counter=indepHoles.length*2;while(indepHoles.length>0){counter--;if(counter<0){console.log("Infinite Loop! Holes left:"+indepHoles.length+", Probably Hole outside Shape!");break}for(shapeIndex=minShapeIndex;shapeIndex<shape.length;shapeIndex++){shapePt=shape[shapeIndex];holeIndex=-1;for(var h=0;h<indepHoles.length;h++){holeIdx=indepHoles[h];cutKey=shapePt.x+":"+shapePt.y+":"+holeIdx;if(failedCuts[cutKey]!==undefined)continue;hole=holes[holeIdx];for(var h2=0;h2<hole.length;h2++){holePt=hole[h2];if(!isCutLineInsideAngles(shapeIndex,h2))continue;if(intersectsShapeEdge(shapePt,holePt))continue;if(intersectsHoleEdge(shapePt,holePt))continue;holeIndex=h2;indepHoles.splice(h,1);tmpShape1=shape.slice(0,shapeIndex+1);tmpShape2=shape.slice(shapeIndex);tmpHole1=hole.slice(holeIndex);tmpHole2=hole.slice(0,holeIndex+1);shape=tmpShape1.concat(tmpHole1).concat(tmpHole2).concat(tmpShape2);minShapeIndex=shapeIndex;break}if(holeIndex>=0)break;failedCuts[cutKey]=true}if(holeIndex>=0)break}}return shape}var i,il,f,face,key,index,allPointsMap={};var allpoints=contour.concat();for(var h=0,hl=holes.length;h<hl;h++){Array.prototype.push.apply(allpoints,holes[h])}for(i=0,il=allpoints.length;i<il;i++){key=allpoints[i].x+":"+allpoints[i].y;if(allPointsMap[key]!==undefined){console.warn("THREE.ShapeUtils: Duplicate point",key,i)}allPointsMap[key]=i}var shapeWithoutHoles=removeHoles(contour,holes);var triangles=ShapeUtils.triangulate(shapeWithoutHoles,false);for(i=0,il=triangles.length;i<il;i++){face=triangles[i];for(f=0;f<3;f++){key=face[f].x+":"+face[f].y;index=allPointsMap[key];if(index!==undefined){face[f]=index}}}return triangles.concat()},isClockWise:function(pts){return ShapeUtils.area(pts)<0}};function ExtrudeGeometry(shapes,options){Geometry.call(this);this.type="ExtrudeGeometry";this.parameters={shapes:shapes,options:options};this.fromBufferGeometry(new ExtrudeBufferGeometry(shapes,options));this.mergeVertices()}ExtrudeGeometry.prototype=Object.create(Geometry.prototype);ExtrudeGeometry.prototype.constructor=ExtrudeGeometry;function ExtrudeBufferGeometry(shapes,options){if(typeof shapes==="undefined"){return}BufferGeometry.call(this);this.type="ExtrudeBufferGeometry";shapes=Array.isArray(shapes)?shapes:[shapes];this.addShapeList(shapes,options);this.computeVertexNormals()}ExtrudeBufferGeometry.prototype=Object.create(BufferGeometry.prototype);ExtrudeBufferGeometry.prototype.constructor=ExtrudeBufferGeometry;ExtrudeBufferGeometry.prototype.getArrays=function(){var positionAttribute=this.getAttribute("position");var verticesArray=positionAttribute?Array.prototype.slice.call(positionAttribute.array):[];var uvAttribute=this.getAttribute("uv");var uvArray=uvAttribute?Array.prototype.slice.call(uvAttribute.array):[];var IndexAttribute=this.index;var indicesArray=IndexAttribute?Array.prototype.slice.call(IndexAttribute.array):[];return{position:verticesArray,uv:uvArray,index:indicesArray}};ExtrudeBufferGeometry.prototype.addShapeList=function(shapes,options){var sl=shapes.length;options.arrays=this.getArrays();for(var s=0;s<sl;s++){var shape=shapes[s];this.addShape(shape,options)}this.setIndex(options.arrays.index);this.addAttribute("position",new Float32BufferAttribute(options.arrays.position,3));this.addAttribute("uv",new Float32BufferAttribute(options.arrays.uv,2))};ExtrudeBufferGeometry.prototype.addShape=function(shape,options){var arrays=options.arrays?options.arrays:this.getArrays();var verticesArray=arrays.position;var indicesArray=arrays.index;var uvArray=arrays.uv;var placeholder=[];var amount=options.amount!==undefined?options.amount:100;var bevelThickness=options.bevelThickness!==undefined?options.bevelThickness:6;var bevelSize=options.bevelSize!==undefined?options.bevelSize:bevelThickness-2;var bevelSegments=options.bevelSegments!==undefined?options.bevelSegments:3;var bevelEnabled=options.bevelEnabled!==undefined?options.bevelEnabled:true;var curveSegments=options.curveSegments!==undefined?options.curveSegments:12;var steps=options.steps!==undefined?options.steps:1;var extrudePath=options.extrudePath;var extrudePts,extrudeByPath=false;var uvgen=options.UVGenerator!==undefined?options.UVGenerator:ExtrudeGeometry.WorldUVGenerator;var splineTube,binormal,normal,position2;if(extrudePath){extrudePts=extrudePath.getSpacedPoints(steps);extrudeByPath=true;bevelEnabled=false;splineTube=options.frames!==undefined?options.frames:extrudePath.computeFrenetFrames(steps,false);binormal=new Vector3;normal=new Vector3;position2=new Vector3}if(!bevelEnabled){bevelSegments=0;bevelThickness=0;bevelSize=0}var ahole,h,hl;var scope=this;var shapePoints=shape.extractPoints(curveSegments);var vertices=shapePoints.shape;var holes=shapePoints.holes;var reverse=!ShapeUtils.isClockWise(vertices);if(reverse){vertices=vertices.reverse();for(h=0,hl=holes.length;h<hl;h++){ahole=holes[h];if(ShapeUtils.isClockWise(ahole)){holes[h]=ahole.reverse()}}}var faces=ShapeUtils.triangulateShape(vertices,holes);var contour=vertices;for(h=0,hl=holes.length;h<hl;h++){ahole=holes[h];vertices=vertices.concat(ahole)}function scalePt2(pt,vec,size){if(!vec)console.error("THREE.ExtrudeGeometry: vec does not exist");return vec.clone().multiplyScalar(size).add(pt)}var b,bs,t,z,vert,vlen=vertices.length,face,flen=faces.length;function getBevelVec(inPt,inPrev,inNext){var v_trans_x,v_trans_y,shrink_by;var v_prev_x=inPt.x-inPrev.x,v_prev_y=inPt.y-inPrev.y;var v_next_x=inNext.x-inPt.x,v_next_y=inNext.y-inPt.y;var v_prev_lensq=v_prev_x*v_prev_x+v_prev_y*v_prev_y;var collinear0=v_prev_x*v_next_y-v_prev_y*v_next_x;if(Math.abs(collinear0)>Number.EPSILON){var v_prev_len=Math.sqrt(v_prev_lensq);var v_next_len=Math.sqrt(v_next_x*v_next_x+v_next_y*v_next_y);var ptPrevShift_x=inPrev.x-v_prev_y/v_prev_len;var ptPrevShift_y=inPrev.y+v_prev_x/v_prev_len;var ptNextShift_x=inNext.x-v_next_y/v_next_len;var ptNextShift_y=inNext.y+v_next_x/v_next_len;var sf=((ptNextShift_x-ptPrevShift_x)*v_next_y-(ptNextShift_y-ptPrevShift_y)*v_next_x)/(v_prev_x*v_next_y-v_prev_y*v_next_x);v_trans_x=ptPrevShift_x+v_prev_x*sf-inPt.x;v_trans_y=ptPrevShift_y+v_prev_y*sf-inPt.y;var v_trans_lensq=v_trans_x*v_trans_x+v_trans_y*v_trans_y;if(v_trans_lensq<=2){return new Vector2(v_trans_x,v_trans_y)}else{shrink_by=Math.sqrt(v_trans_lensq/2)}}else{var direction_eq=false;if(v_prev_x>Number.EPSILON){if(v_next_x>Number.EPSILON){direction_eq=true}}else{if(v_prev_x<-Number.EPSILON){if(v_next_x<-Number.EPSILON){direction_eq=true}}else{if(Math.sign(v_prev_y)===Math.sign(v_next_y)){direction_eq=true}}}if(direction_eq){v_trans_x=-v_prev_y;v_trans_y=v_prev_x;shrink_by=Math.sqrt(v_prev_lensq)}else{v_trans_x=v_prev_x;v_trans_y=v_prev_y;shrink_by=Math.sqrt(v_prev_lensq/2)}}return new Vector2(v_trans_x/shrink_by,v_trans_y/shrink_by)}var contourMovements=[];for(var i=0,il=contour.length,j=il-1,k=i+1;i<il;i++,j++,k++){if(j===il)j=0;if(k===il)k=0;contourMovements[i]=getBevelVec(contour[i],contour[j],contour[k])}var holesMovements=[],oneHoleMovements,verticesMovements=contourMovements.concat();for(h=0,hl=holes.length;h<hl;h++){ahole=holes[h];oneHoleMovements=[];for(i=0,il=ahole.length,j=il-1,k=i+1;i<il;i++,j++,k++){if(j===il)j=0;if(k===il)k=0;oneHoleMovements[i]=getBevelVec(ahole[i],ahole[j],ahole[k])}holesMovements.push(oneHoleMovements);verticesMovements=verticesMovements.concat(oneHoleMovements)}for(b=0;b<bevelSegments;b++){t=b/bevelSegments;z=bevelThickness*Math.cos(t*Math.PI/2);bs=bevelSize*Math.sin(t*Math.PI/2);for(i=0,il=contour.length;i<il;i++){vert=scalePt2(contour[i],contourMovements[i],bs);v(vert.x,vert.y,-z)}for(h=0,hl=holes.length;h<hl;h++){ahole=holes[h];oneHoleMovements=holesMovements[h];for(i=0,il=ahole.length;i<il;i++){vert=scalePt2(ahole[i],oneHoleMovements[i],bs);v(vert.x,vert.y,-z)}}}bs=bevelSize;for(i=0;i<vlen;i++){vert=bevelEnabled?scalePt2(vertices[i],verticesMovements[i],bs):vertices[i];if(!extrudeByPath){v(vert.x,vert.y,0)}else{normal.copy(splineTube.normals[0]).multiplyScalar(vert.x);binormal.copy(splineTube.binormals[0]).multiplyScalar(vert.y);position2.copy(extrudePts[0]).add(normal).add(binormal);v(position2.x,position2.y,position2.z)}}var s;for(s=1;s<=steps;s++){for(i=0;i<vlen;i++){vert=bevelEnabled?scalePt2(vertices[i],verticesMovements[i],bs):vertices[i];if(!extrudeByPath){v(vert.x,vert.y,amount/steps*s)}else{normal.copy(splineTube.normals[s]).multiplyScalar(vert.x);binormal.copy(splineTube.binormals[s]).multiplyScalar(vert.y);position2.copy(extrudePts[s]).add(normal).add(binormal);v(position2.x,position2.y,position2.z)}}}for(b=bevelSegments-1;b>=0;b--){t=b/bevelSegments;z=bevelThickness*Math.cos(t*Math.PI/2);bs=bevelSize*Math.sin(t*Math.PI/2);for(i=0,il=contour.length;i<il;i++){vert=scalePt2(contour[i],contourMovements[i],bs);v(vert.x,vert.y,amount+z)}for(h=0,hl=holes.length;h<hl;h++){ahole=holes[h];oneHoleMovements=holesMovements[h];for(i=0,il=ahole.length;i<il;i++){vert=scalePt2(ahole[i],oneHoleMovements[i],bs);if(!extrudeByPath){v(vert.x,vert.y,amount+z)}else{v(vert.x,vert.y+extrudePts[steps-1].y,extrudePts[steps-1].x+z)}}}}buildLidFaces();buildSideFaces();function buildLidFaces(){var start=verticesArray.length/3;if(bevelEnabled){var layer=0;var offset=vlen*layer;for(i=0;i<flen;i++){face=faces[i];f3(face[2]+offset,face[1]+offset,face[0]+offset)}layer=steps+bevelSegments*2;offset=vlen*layer;for(i=0;i<flen;i++){face=faces[i];f3(face[0]+offset,face[1]+offset,face[2]+offset)}}else{for(i=0;i<flen;i++){face=faces[i];f3(face[2],face[1],face[0])}for(i=0;i<flen;i++){face=faces[i];f3(face[0]+vlen*steps,face[1]+vlen*steps,face[2]+vlen*steps)}}scope.addGroup(start,verticesArray.length/3-start,options.material!==undefined?options.material:0)}function buildSideFaces(){var start=verticesArray.length/3;var layeroffset=0;sidewalls(contour,layeroffset);layeroffset+=contour.length;for(h=0,hl=holes.length;h<hl;h++){ahole=holes[h];sidewalls(ahole,layeroffset);layeroffset+=ahole.length}scope.addGroup(start,verticesArray.length/3-start,options.extrudeMaterial!==undefined?options.extrudeMaterial:1)}function sidewalls(contour,layeroffset){var j,k;i=contour.length;while(--i>=0){j=i;k=i-1;if(k<0)k=contour.length-1;var s=0,sl=steps+bevelSegments*2;for(s=0;s<sl;s++){var slen1=vlen*s;var slen2=vlen*(s+1);var a=layeroffset+j+slen1,b=layeroffset+k+slen1,c=layeroffset+k+slen2,d=layeroffset+j+slen2;f4(a,b,c,d,contour,s,sl,j,k)}}}function v(x,y,z){placeholder.push(x);placeholder.push(y);placeholder.push(z)}function f3(a,b,c){addVertex(a);addVertex(b);addVertex(c);var nextIndex=verticesArray.length/3;var uvs=uvgen.generateTopUV(scope,verticesArray,nextIndex-3,nextIndex-2,nextIndex-1);addUV(uvs[0]);addUV(uvs[1]);addUV(uvs[2])}function f4(a,b,c,d,wallContour,stepIndex,stepsLength,contourIndex1,contourIndex2){addVertex(a);addVertex(b);addVertex(d);addVertex(b);addVertex(c);addVertex(d);var nextIndex=verticesArray.length/3;var uvs=uvgen.generateSideWallUV(scope,verticesArray,nextIndex-6,nextIndex-3,nextIndex-2,nextIndex-1);addUV(uvs[0]);addUV(uvs[1]);addUV(uvs[3]);addUV(uvs[1]);addUV(uvs[2]);addUV(uvs[3])}function addVertex(index){indicesArray.push(verticesArray.length/3);verticesArray.push(placeholder[index*3+0]);verticesArray.push(placeholder[index*3+1]);verticesArray.push(placeholder[index*3+2])}function addUV(vector2){uvArray.push(vector2.x);uvArray.push(vector2.y)}if(!options.arrays){this.setIndex(indicesArray);this.addAttribute("position",new Float32BufferAttribute(verticesArray,3));this.addAttribute("uv",new Float32BufferAttribute(options.arrays.uv,2))}};ExtrudeGeometry.WorldUVGenerator={generateTopUV:function(geometry,vertices,indexA,indexB,indexC){var a_x=vertices[indexA*3];var a_y=vertices[indexA*3+1];var b_x=vertices[indexB*3];var b_y=vertices[indexB*3+1];var c_x=vertices[indexC*3];var c_y=vertices[indexC*3+1];return[new Vector2(a_x,a_y),new Vector2(b_x,b_y),new Vector2(c_x,c_y)]},generateSideWallUV:function(geometry,vertices,indexA,indexB,indexC,indexD){var a_x=vertices[indexA*3];var a_y=vertices[indexA*3+1];var a_z=vertices[indexA*3+2];var b_x=vertices[indexB*3];var b_y=vertices[indexB*3+1];var b_z=vertices[indexB*3+2];var c_x=vertices[indexC*3];var c_y=vertices[indexC*3+1];var c_z=vertices[indexC*3+2];var d_x=vertices[indexD*3];var d_y=vertices[indexD*3+1];var d_z=vertices[indexD*3+2];if(Math.abs(a_y-b_y)<.01){return[new Vector2(a_x,1-a_z),new Vector2(b_x,1-b_z),new Vector2(c_x,1-c_z),new Vector2(d_x,1-d_z)]}else{return[new Vector2(a_y,1-a_z),new Vector2(b_y,1-b_z),new Vector2(c_y,1-c_z),new Vector2(d_y,1-d_z)]}}};function TextGeometry(text,parameters){Geometry.call(this);this.type="TextGeometry";this.parameters={text:text,parameters:parameters};this.fromBufferGeometry(new TextBufferGeometry(text,parameters));this.mergeVertices()}TextGeometry.prototype=Object.create(Geometry.prototype);TextGeometry.prototype.constructor=TextGeometry;function TextBufferGeometry(text,parameters){parameters=parameters||{};var font=parameters.font;if(!(font&&font.isFont)){console.error("THREE.TextGeometry: font parameter is not an instance of THREE.Font.");return new Geometry}var shapes=font.generateShapes(text,parameters.size,parameters.curveSegments);parameters.amount=parameters.height!==undefined?parameters.height:50;if(parameters.bevelThickness===undefined)parameters.bevelThickness=10;if(parameters.bevelSize===undefined)parameters.bevelSize=8;if(parameters.bevelEnabled===undefined)parameters.bevelEnabled=false;ExtrudeBufferGeometry.call(this,shapes,parameters);this.type="TextBufferGeometry"}TextBufferGeometry.prototype=Object.create(ExtrudeBufferGeometry.prototype);TextBufferGeometry.prototype.constructor=TextBufferGeometry;function SphereGeometry(radius,widthSegments,heightSegments,phiStart,phiLength,thetaStart,thetaLength){Geometry.call(this);this.type="SphereGeometry";this.parameters={radius:radius,widthSegments:widthSegments,heightSegments:heightSegments,phiStart:phiStart,phiLength:phiLength,thetaStart:thetaStart,thetaLength:thetaLength};this.fromBufferGeometry(new SphereBufferGeometry(radius,widthSegments,heightSegments,phiStart,phiLength,thetaStart,thetaLength));this.mergeVertices()}SphereGeometry.prototype=Object.create(Geometry.prototype);SphereGeometry.prototype.constructor=SphereGeometry;function SphereBufferGeometry(radius,widthSegments,heightSegments,phiStart,phiLength,thetaStart,thetaLength){BufferGeometry.call(this);this.type="SphereBufferGeometry";this.parameters={radius:radius,widthSegments:widthSegments,heightSegments:heightSegments,phiStart:phiStart,phiLength:phiLength,thetaStart:thetaStart,thetaLength:thetaLength};radius=radius||50;widthSegments=Math.max(3,Math.floor(widthSegments)||8);heightSegments=Math.max(2,Math.floor(heightSegments)||6);phiStart=phiStart!==undefined?phiStart:0;phiLength=phiLength!==undefined?phiLength:Math.PI*2;thetaStart=thetaStart!==undefined?thetaStart:0;thetaLength=thetaLength!==undefined?thetaLength:Math.PI;var thetaEnd=thetaStart+thetaLength;var ix,iy;var index=0;var grid=[];var vertex=new Vector3;
var normal=new Vector3;var indices=[];var vertices=[];var normals=[];var uvs=[];for(iy=0;iy<=heightSegments;iy++){var verticesRow=[];var v=iy/heightSegments;for(ix=0;ix<=widthSegments;ix++){var u=ix/widthSegments;vertex.x=-radius*Math.cos(phiStart+u*phiLength)*Math.sin(thetaStart+v*thetaLength);vertex.y=radius*Math.cos(thetaStart+v*thetaLength);vertex.z=radius*Math.sin(phiStart+u*phiLength)*Math.sin(thetaStart+v*thetaLength);vertices.push(vertex.x,vertex.y,vertex.z);normal.set(vertex.x,vertex.y,vertex.z).normalize();normals.push(normal.x,normal.y,normal.z);uvs.push(u,1-v);verticesRow.push(index++)}grid.push(verticesRow)}for(iy=0;iy<heightSegments;iy++){for(ix=0;ix<widthSegments;ix++){var a=grid[iy][ix+1];var b=grid[iy][ix];var c=grid[iy+1][ix];var d=grid[iy+1][ix+1];if(iy!==0||thetaStart>0)indices.push(a,b,d);if(iy!==heightSegments-1||thetaEnd<Math.PI)indices.push(b,c,d)}}this.setIndex(indices);this.addAttribute("position",new Float32BufferAttribute(vertices,3));this.addAttribute("normal",new Float32BufferAttribute(normals,3));this.addAttribute("uv",new Float32BufferAttribute(uvs,2))}SphereBufferGeometry.prototype=Object.create(BufferGeometry.prototype);SphereBufferGeometry.prototype.constructor=SphereBufferGeometry;function RingGeometry(innerRadius,outerRadius,thetaSegments,phiSegments,thetaStart,thetaLength){Geometry.call(this);this.type="RingGeometry";this.parameters={innerRadius:innerRadius,outerRadius:outerRadius,thetaSegments:thetaSegments,phiSegments:phiSegments,thetaStart:thetaStart,thetaLength:thetaLength};this.fromBufferGeometry(new RingBufferGeometry(innerRadius,outerRadius,thetaSegments,phiSegments,thetaStart,thetaLength));this.mergeVertices()}RingGeometry.prototype=Object.create(Geometry.prototype);RingGeometry.prototype.constructor=RingGeometry;function RingBufferGeometry(innerRadius,outerRadius,thetaSegments,phiSegments,thetaStart,thetaLength){BufferGeometry.call(this);this.type="RingBufferGeometry";this.parameters={innerRadius:innerRadius,outerRadius:outerRadius,thetaSegments:thetaSegments,phiSegments:phiSegments,thetaStart:thetaStart,thetaLength:thetaLength};innerRadius=innerRadius||20;outerRadius=outerRadius||50;thetaStart=thetaStart!==undefined?thetaStart:0;thetaLength=thetaLength!==undefined?thetaLength:Math.PI*2;thetaSegments=thetaSegments!==undefined?Math.max(3,thetaSegments):8;phiSegments=phiSegments!==undefined?Math.max(1,phiSegments):1;var indices=[];var vertices=[];var normals=[];var uvs=[];var segment;var radius=innerRadius;var radiusStep=(outerRadius-innerRadius)/phiSegments;var vertex=new Vector3;var uv=new Vector2;var j,i;for(j=0;j<=phiSegments;j++){for(i=0;i<=thetaSegments;i++){segment=thetaStart+i/thetaSegments*thetaLength;vertex.x=radius*Math.cos(segment);vertex.y=radius*Math.sin(segment);vertices.push(vertex.x,vertex.y,vertex.z);normals.push(0,0,1);uv.x=(vertex.x/outerRadius+1)/2;uv.y=(vertex.y/outerRadius+1)/2;uvs.push(uv.x,uv.y)}radius+=radiusStep}for(j=0;j<phiSegments;j++){var thetaSegmentLevel=j*(thetaSegments+1);for(i=0;i<thetaSegments;i++){segment=i+thetaSegmentLevel;var a=segment;var b=segment+thetaSegments+1;var c=segment+thetaSegments+2;var d=segment+1;indices.push(a,b,d);indices.push(b,c,d)}}this.setIndex(indices);this.addAttribute("position",new Float32BufferAttribute(vertices,3));this.addAttribute("normal",new Float32BufferAttribute(normals,3));this.addAttribute("uv",new Float32BufferAttribute(uvs,2))}RingBufferGeometry.prototype=Object.create(BufferGeometry.prototype);RingBufferGeometry.prototype.constructor=RingBufferGeometry;function LatheGeometry(points,segments,phiStart,phiLength){Geometry.call(this);this.type="LatheGeometry";this.parameters={points:points,segments:segments,phiStart:phiStart,phiLength:phiLength};this.fromBufferGeometry(new LatheBufferGeometry(points,segments,phiStart,phiLength));this.mergeVertices()}LatheGeometry.prototype=Object.create(Geometry.prototype);LatheGeometry.prototype.constructor=LatheGeometry;function LatheBufferGeometry(points,segments,phiStart,phiLength){BufferGeometry.call(this);this.type="LatheBufferGeometry";this.parameters={points:points,segments:segments,phiStart:phiStart,phiLength:phiLength};segments=Math.floor(segments)||12;phiStart=phiStart||0;phiLength=phiLength||Math.PI*2;phiLength=_Math.clamp(phiLength,0,Math.PI*2);var indices=[];var vertices=[];var uvs=[];var base;var inverseSegments=1/segments;var vertex=new Vector3;var uv=new Vector2;var i,j;for(i=0;i<=segments;i++){var phi=phiStart+i*inverseSegments*phiLength;var sin=Math.sin(phi);var cos=Math.cos(phi);for(j=0;j<=points.length-1;j++){vertex.x=points[j].x*sin;vertex.y=points[j].y;vertex.z=points[j].x*cos;vertices.push(vertex.x,vertex.y,vertex.z);uv.x=i/segments;uv.y=j/(points.length-1);uvs.push(uv.x,uv.y)}}for(i=0;i<segments;i++){for(j=0;j<points.length-1;j++){base=j+i*points.length;var a=base;var b=base+points.length;var c=base+points.length+1;var d=base+1;indices.push(a,b,d);indices.push(b,c,d)}}this.setIndex(indices);this.addAttribute("position",new Float32BufferAttribute(vertices,3));this.addAttribute("uv",new Float32BufferAttribute(uvs,2));this.computeVertexNormals();if(phiLength===Math.PI*2){var normals=this.attributes.normal.array;var n1=new Vector3;var n2=new Vector3;var n=new Vector3;base=segments*points.length*3;for(i=0,j=0;i<points.length;i++,j+=3){n1.x=normals[j+0];n1.y=normals[j+1];n1.z=normals[j+2];n2.x=normals[base+j+0];n2.y=normals[base+j+1];n2.z=normals[base+j+2];n.addVectors(n1,n2).normalize();normals[j+0]=normals[base+j+0]=n.x;normals[j+1]=normals[base+j+1]=n.y;normals[j+2]=normals[base+j+2]=n.z}}}LatheBufferGeometry.prototype=Object.create(BufferGeometry.prototype);LatheBufferGeometry.prototype.constructor=LatheBufferGeometry;function ShapeGeometry(shapes,curveSegments){Geometry.call(this);this.type="ShapeGeometry";if(typeof curveSegments==="object"){console.warn("THREE.ShapeGeometry: Options parameter has been removed.");curveSegments=curveSegments.curveSegments}this.parameters={shapes:shapes,curveSegments:curveSegments};this.fromBufferGeometry(new ShapeBufferGeometry(shapes,curveSegments));this.mergeVertices()}ShapeGeometry.prototype=Object.create(Geometry.prototype);ShapeGeometry.prototype.constructor=ShapeGeometry;function ShapeBufferGeometry(shapes,curveSegments){BufferGeometry.call(this);this.type="ShapeBufferGeometry";this.parameters={shapes:shapes,curveSegments:curveSegments};curveSegments=curveSegments||12;var indices=[];var vertices=[];var normals=[];var uvs=[];var groupStart=0;var groupCount=0;if(Array.isArray(shapes)===false){addShape(shapes)}else{for(var i=0;i<shapes.length;i++){addShape(shapes[i]);this.addGroup(groupStart,groupCount,i);groupStart+=groupCount;groupCount=0}}this.setIndex(indices);this.addAttribute("position",new Float32BufferAttribute(vertices,3));this.addAttribute("normal",new Float32BufferAttribute(normals,3));this.addAttribute("uv",new Float32BufferAttribute(uvs,2));function addShape(shape){var i,l,shapeHole;var indexOffset=vertices.length/3;var points=shape.extractPoints(curveSegments);var shapeVertices=points.shape;var shapeHoles=points.holes;if(ShapeUtils.isClockWise(shapeVertices)===false){shapeVertices=shapeVertices.reverse();for(i=0,l=shapeHoles.length;i<l;i++){shapeHole=shapeHoles[i];if(ShapeUtils.isClockWise(shapeHole)===true){shapeHoles[i]=shapeHole.reverse()}}}var faces=ShapeUtils.triangulateShape(shapeVertices,shapeHoles);for(i=0,l=shapeHoles.length;i<l;i++){shapeHole=shapeHoles[i];shapeVertices=shapeVertices.concat(shapeHole)}for(i=0,l=shapeVertices.length;i<l;i++){var vertex=shapeVertices[i];vertices.push(vertex.x,vertex.y,0);normals.push(0,0,1);uvs.push(vertex.x,vertex.y)}for(i=0,l=faces.length;i<l;i++){var face=faces[i];var a=face[0]+indexOffset;var b=face[1]+indexOffset;var c=face[2]+indexOffset;indices.push(a,b,c);groupCount+=3}}}ShapeBufferGeometry.prototype=Object.create(BufferGeometry.prototype);ShapeBufferGeometry.prototype.constructor=ShapeBufferGeometry;function EdgesGeometry(geometry,thresholdAngle){BufferGeometry.call(this);this.type="EdgesGeometry";this.parameters={thresholdAngle:thresholdAngle};thresholdAngle=thresholdAngle!==undefined?thresholdAngle:1;var vertices=[];var thresholdDot=Math.cos(_Math.DEG2RAD*thresholdAngle);var edge=[0,0],edges={},edge1,edge2;var key,keys=["a","b","c"];var geometry2;if(geometry.isBufferGeometry){geometry2=new Geometry;geometry2.fromBufferGeometry(geometry)}else{geometry2=geometry.clone()}geometry2.mergeVertices();geometry2.computeFaceNormals();var sourceVertices=geometry2.vertices;var faces=geometry2.faces;for(var i=0,l=faces.length;i<l;i++){var face=faces[i];for(var j=0;j<3;j++){edge1=face[keys[j]];edge2=face[keys[(j+1)%3]];edge[0]=Math.min(edge1,edge2);edge[1]=Math.max(edge1,edge2);key=edge[0]+","+edge[1];if(edges[key]===undefined){edges[key]={index1:edge[0],index2:edge[1],face1:i,face2:undefined}}else{edges[key].face2=i}}}for(key in edges){var e=edges[key];if(e.face2===undefined||faces[e.face1].normal.dot(faces[e.face2].normal)<=thresholdDot){var vertex=sourceVertices[e.index1];vertices.push(vertex.x,vertex.y,vertex.z);vertex=sourceVertices[e.index2];vertices.push(vertex.x,vertex.y,vertex.z)}}this.addAttribute("position",new Float32BufferAttribute(vertices,3))}EdgesGeometry.prototype=Object.create(BufferGeometry.prototype);EdgesGeometry.prototype.constructor=EdgesGeometry;function CylinderGeometry(radiusTop,radiusBottom,height,radialSegments,heightSegments,openEnded,thetaStart,thetaLength){Geometry.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:radiusTop,radiusBottom:radiusBottom,height:height,radialSegments:radialSegments,heightSegments:heightSegments,openEnded:openEnded,thetaStart:thetaStart,thetaLength:thetaLength};this.fromBufferGeometry(new CylinderBufferGeometry(radiusTop,radiusBottom,height,radialSegments,heightSegments,openEnded,thetaStart,thetaLength));this.mergeVertices()}CylinderGeometry.prototype=Object.create(Geometry.prototype);CylinderGeometry.prototype.constructor=CylinderGeometry;function CylinderBufferGeometry(radiusTop,radiusBottom,height,radialSegments,heightSegments,openEnded,thetaStart,thetaLength){BufferGeometry.call(this);this.type="CylinderBufferGeometry";this.parameters={radiusTop:radiusTop,radiusBottom:radiusBottom,height:height,radialSegments:radialSegments,heightSegments:heightSegments,openEnded:openEnded,thetaStart:thetaStart,thetaLength:thetaLength};var scope=this;radiusTop=radiusTop!==undefined?radiusTop:20;radiusBottom=radiusBottom!==undefined?radiusBottom:20;height=height!==undefined?height:100;radialSegments=Math.floor(radialSegments)||8;heightSegments=Math.floor(heightSegments)||1;openEnded=openEnded!==undefined?openEnded:false;thetaStart=thetaStart!==undefined?thetaStart:0;thetaLength=thetaLength!==undefined?thetaLength:2*Math.PI;var indices=[];var vertices=[];var normals=[];var uvs=[];var index=0;var indexArray=[];var halfHeight=height/2;var groupStart=0;generateTorso();if(openEnded===false){if(radiusTop>0)generateCap(true);if(radiusBottom>0)generateCap(false)}this.setIndex(indices);this.addAttribute("position",new Float32BufferAttribute(vertices,3));this.addAttribute("normal",new Float32BufferAttribute(normals,3));this.addAttribute("uv",new Float32BufferAttribute(uvs,2));function generateTorso(){var x,y;var normal=new Vector3;var vertex=new Vector3;var groupCount=0;var slope=(radiusBottom-radiusTop)/height;for(y=0;y<=heightSegments;y++){var indexRow=[];var v=y/heightSegments;var radius=v*(radiusBottom-radiusTop)+radiusTop;for(x=0;x<=radialSegments;x++){var u=x/radialSegments;var theta=u*thetaLength+thetaStart;var sinTheta=Math.sin(theta);var cosTheta=Math.cos(theta);vertex.x=radius*sinTheta;vertex.y=-v*height+halfHeight;vertex.z=radius*cosTheta;vertices.push(vertex.x,vertex.y,vertex.z);normal.set(sinTheta,slope,cosTheta).normalize();normals.push(normal.x,normal.y,normal.z);uvs.push(u,1-v);indexRow.push(index++)}indexArray.push(indexRow)}for(x=0;x<radialSegments;x++){for(y=0;y<heightSegments;y++){var a=indexArray[y][x];var b=indexArray[y+1][x];var c=indexArray[y+1][x+1];var d=indexArray[y][x+1];indices.push(a,b,d);indices.push(b,c,d);groupCount+=6}}scope.addGroup(groupStart,groupCount,0);groupStart+=groupCount}function generateCap(top){var x,centerIndexStart,centerIndexEnd;var uv=new Vector2;var vertex=new Vector3;var groupCount=0;var radius=top===true?radiusTop:radiusBottom;var sign=top===true?1:-1;centerIndexStart=index;for(x=1;x<=radialSegments;x++){vertices.push(0,halfHeight*sign,0);normals.push(0,sign,0);uvs.push(.5,.5);index++}centerIndexEnd=index;for(x=0;x<=radialSegments;x++){var u=x/radialSegments;var theta=u*thetaLength+thetaStart;var cosTheta=Math.cos(theta);var sinTheta=Math.sin(theta);vertex.x=radius*sinTheta;vertex.y=halfHeight*sign;vertex.z=radius*cosTheta;vertices.push(vertex.x,vertex.y,vertex.z);normals.push(0,sign,0);uv.x=cosTheta*.5+.5;uv.y=sinTheta*.5*sign+.5;uvs.push(uv.x,uv.y);index++}for(x=0;x<radialSegments;x++){var c=centerIndexStart+x;var i=centerIndexEnd+x;if(top===true){indices.push(i,i+1,c)}else{indices.push(i+1,i,c)}groupCount+=3}scope.addGroup(groupStart,groupCount,top===true?1:2);groupStart+=groupCount}}CylinderBufferGeometry.prototype=Object.create(BufferGeometry.prototype);CylinderBufferGeometry.prototype.constructor=CylinderBufferGeometry;function ConeGeometry(radius,height,radialSegments,heightSegments,openEnded,thetaStart,thetaLength){CylinderGeometry.call(this,0,radius,height,radialSegments,heightSegments,openEnded,thetaStart,thetaLength);this.type="ConeGeometry";this.parameters={radius:radius,height:height,radialSegments:radialSegments,heightSegments:heightSegments,openEnded:openEnded,thetaStart:thetaStart,thetaLength:thetaLength}}ConeGeometry.prototype=Object.create(CylinderGeometry.prototype);ConeGeometry.prototype.constructor=ConeGeometry;function ConeBufferGeometry(radius,height,radialSegments,heightSegments,openEnded,thetaStart,thetaLength){CylinderBufferGeometry.call(this,0,radius,height,radialSegments,heightSegments,openEnded,thetaStart,thetaLength);this.type="ConeBufferGeometry";this.parameters={radius:radius,height:height,radialSegments:radialSegments,heightSegments:heightSegments,openEnded:openEnded,thetaStart:thetaStart,thetaLength:thetaLength}}ConeBufferGeometry.prototype=Object.create(CylinderBufferGeometry.prototype);ConeBufferGeometry.prototype.constructor=ConeBufferGeometry;function CircleGeometry(radius,segments,thetaStart,thetaLength){Geometry.call(this);this.type="CircleGeometry";this.parameters={radius:radius,segments:segments,thetaStart:thetaStart,thetaLength:thetaLength};this.fromBufferGeometry(new CircleBufferGeometry(radius,segments,thetaStart,thetaLength));this.mergeVertices()}CircleGeometry.prototype=Object.create(Geometry.prototype);CircleGeometry.prototype.constructor=CircleGeometry;function CircleBufferGeometry(radius,segments,thetaStart,thetaLength){BufferGeometry.call(this);this.type="CircleBufferGeometry";this.parameters={radius:radius,segments:segments,thetaStart:thetaStart,thetaLength:thetaLength};radius=radius||50;segments=segments!==undefined?Math.max(3,segments):8;thetaStart=thetaStart!==undefined?thetaStart:0;thetaLength=thetaLength!==undefined?thetaLength:Math.PI*2;var indices=[];var vertices=[];var normals=[];var uvs=[];var i,s;var vertex=new Vector3;var uv=new Vector2;vertices.push(0,0,0);normals.push(0,0,1);uvs.push(.5,.5);for(s=0,i=3;s<=segments;s++,i+=3){var segment=thetaStart+s/segments*thetaLength;vertex.x=radius*Math.cos(segment);vertex.y=radius*Math.sin(segment);vertices.push(vertex.x,vertex.y,vertex.z);normals.push(0,0,1);uv.x=(vertices[i]/radius+1)/2;uv.y=(vertices[i+1]/radius+1)/2;uvs.push(uv.x,uv.y)}for(i=1;i<=segments;i++){indices.push(i,i+1,0)}this.setIndex(indices);this.addAttribute("position",new Float32BufferAttribute(vertices,3));this.addAttribute("normal",new Float32BufferAttribute(normals,3));this.addAttribute("uv",new Float32BufferAttribute(uvs,2))}CircleBufferGeometry.prototype=Object.create(BufferGeometry.prototype);CircleBufferGeometry.prototype.constructor=CircleBufferGeometry;var Geometries=Object.freeze({WireframeGeometry:WireframeGeometry,ParametricGeometry:ParametricGeometry,ParametricBufferGeometry:ParametricBufferGeometry,TetrahedronGeometry:TetrahedronGeometry,TetrahedronBufferGeometry:TetrahedronBufferGeometry,OctahedronGeometry:OctahedronGeometry,OctahedronBufferGeometry:OctahedronBufferGeometry,IcosahedronGeometry:IcosahedronGeometry,IcosahedronBufferGeometry:IcosahedronBufferGeometry,DodecahedronGeometry:DodecahedronGeometry,DodecahedronBufferGeometry:DodecahedronBufferGeometry,PolyhedronGeometry:PolyhedronGeometry,PolyhedronBufferGeometry:PolyhedronBufferGeometry,TubeGeometry:TubeGeometry,TubeBufferGeometry:TubeBufferGeometry,TorusKnotGeometry:TorusKnotGeometry,TorusKnotBufferGeometry:TorusKnotBufferGeometry,TorusGeometry:TorusGeometry,TorusBufferGeometry:TorusBufferGeometry,TextGeometry:TextGeometry,TextBufferGeometry:TextBufferGeometry,SphereGeometry:SphereGeometry,SphereBufferGeometry:SphereBufferGeometry,RingGeometry:RingGeometry,RingBufferGeometry:RingBufferGeometry,PlaneGeometry:PlaneGeometry,PlaneBufferGeometry:PlaneBufferGeometry,LatheGeometry:LatheGeometry,LatheBufferGeometry:LatheBufferGeometry,ShapeGeometry:ShapeGeometry,ShapeBufferGeometry:ShapeBufferGeometry,ExtrudeGeometry:ExtrudeGeometry,ExtrudeBufferGeometry:ExtrudeBufferGeometry,EdgesGeometry:EdgesGeometry,ConeGeometry:ConeGeometry,ConeBufferGeometry:ConeBufferGeometry,CylinderGeometry:CylinderGeometry,CylinderBufferGeometry:CylinderBufferGeometry,CircleGeometry:CircleGeometry,CircleBufferGeometry:CircleBufferGeometry,BoxGeometry:BoxGeometry,BoxBufferGeometry:BoxBufferGeometry});function ShadowMaterial(parameters){ShaderMaterial.call(this,{uniforms:UniformsUtils.merge([UniformsLib.lights,{opacity:{value:1}}]),vertexShader:ShaderChunk["shadow_vert"],fragmentShader:ShaderChunk["shadow_frag"]});this.lights=true;this.transparent=true;Object.defineProperties(this,{opacity:{enumerable:true,get:function(){return this.uniforms.opacity.value},set:function(value){this.uniforms.opacity.value=value}}});this.setValues(parameters)}ShadowMaterial.prototype=Object.create(ShaderMaterial.prototype);ShadowMaterial.prototype.constructor=ShadowMaterial;ShadowMaterial.prototype.isShadowMaterial=true;function RawShaderMaterial(parameters){ShaderMaterial.call(this,parameters);this.type="RawShaderMaterial"}RawShaderMaterial.prototype=Object.create(ShaderMaterial.prototype);RawShaderMaterial.prototype.constructor=RawShaderMaterial;RawShaderMaterial.prototype.isRawShaderMaterial=true;function MeshStandardMaterial(parameters){Material.call(this);this.defines={STANDARD:""};this.type="MeshStandardMaterial";this.color=new Color(16777215);this.roughness=.5;this.metalness=.5;this.map=null;this.lightMap=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new Color(0);this.emissiveIntensity=1;this.emissiveMap=null;this.bumpMap=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new Vector2(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.roughnessMap=null;this.metalnessMap=null;this.alphaMap=null;this.envMap=null;this.envMapIntensity=1;this.refractionRatio=.98;this.wireframe=false;this.wireframeLinewidth=1;this.wireframeLinecap="round";this.wireframeLinejoin="round";this.skinning=false;this.morphTargets=false;this.morphNormals=false;this.setValues(parameters)}MeshStandardMaterial.prototype=Object.create(Material.prototype);MeshStandardMaterial.prototype.constructor=MeshStandardMaterial;MeshStandardMaterial.prototype.isMeshStandardMaterial=true;MeshStandardMaterial.prototype.copy=function(source){Material.prototype.copy.call(this,source);this.defines={STANDARD:""};this.color.copy(source.color);this.roughness=source.roughness;this.metalness=source.metalness;this.map=source.map;this.lightMap=source.lightMap;this.lightMapIntensity=source.lightMapIntensity;this.aoMap=source.aoMap;this.aoMapIntensity=source.aoMapIntensity;this.emissive.copy(source.emissive);this.emissiveMap=source.emissiveMap;this.emissiveIntensity=source.emissiveIntensity;this.bumpMap=source.bumpMap;this.bumpScale=source.bumpScale;this.normalMap=source.normalMap;this.normalScale.copy(source.normalScale);this.displacementMap=source.displacementMap;this.displacementScale=source.displacementScale;this.displacementBias=source.displacementBias;this.roughnessMap=source.roughnessMap;this.metalnessMap=source.metalnessMap;this.alphaMap=source.alphaMap;this.envMap=source.envMap;this.envMapIntensity=source.envMapIntensity;this.refractionRatio=source.refractionRatio;this.wireframe=source.wireframe;this.wireframeLinewidth=source.wireframeLinewidth;this.wireframeLinecap=source.wireframeLinecap;this.wireframeLinejoin=source.wireframeLinejoin;this.skinning=source.skinning;this.morphTargets=source.morphTargets;this.morphNormals=source.morphNormals;return this};function MeshPhysicalMaterial(parameters){MeshStandardMaterial.call(this);this.defines={PHYSICAL:""};this.type="MeshPhysicalMaterial";this.reflectivity=.5;this.clearCoat=0;this.clearCoatRoughness=0;this.setValues(parameters)}MeshPhysicalMaterial.prototype=Object.create(MeshStandardMaterial.prototype);MeshPhysicalMaterial.prototype.constructor=MeshPhysicalMaterial;MeshPhysicalMaterial.prototype.isMeshPhysicalMaterial=true;MeshPhysicalMaterial.prototype.copy=function(source){MeshStandardMaterial.prototype.copy.call(this,source);this.defines={PHYSICAL:""};this.reflectivity=source.reflectivity;this.clearCoat=source.clearCoat;this.clearCoatRoughness=source.clearCoatRoughness;return this};function MeshPhongMaterial(parameters){Material.call(this);this.type="MeshPhongMaterial";this.color=new Color(16777215);this.specular=new Color(1118481);this.shininess=30;this.map=null;this.lightMap=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new Color(0);this.emissiveIntensity=1;this.emissiveMap=null;this.bumpMap=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new Vector2(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.specularMap=null;this.alphaMap=null;this.envMap=null;this.combine=MultiplyOperation;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=false;this.wireframeLinewidth=1;this.wireframeLinecap="round";this.wireframeLinejoin="round";this.skinning=false;this.morphTargets=false;this.morphNormals=false;this.setValues(parameters)}MeshPhongMaterial.prototype=Object.create(Material.prototype);MeshPhongMaterial.prototype.constructor=MeshPhongMaterial;MeshPhongMaterial.prototype.isMeshPhongMaterial=true;MeshPhongMaterial.prototype.copy=function(source){Material.prototype.copy.call(this,source);this.color.copy(source.color);this.specular.copy(source.specular);this.shininess=source.shininess;this.map=source.map;this.lightMap=source.lightMap;this.lightMapIntensity=source.lightMapIntensity;this.aoMap=source.aoMap;this.aoMapIntensity=source.aoMapIntensity;this.emissive.copy(source.emissive);this.emissiveMap=source.emissiveMap;this.emissiveIntensity=source.emissiveIntensity;this.bumpMap=source.bumpMap;this.bumpScale=source.bumpScale;this.normalMap=source.normalMap;this.normalScale.copy(source.normalScale);this.displacementMap=source.displacementMap;this.displacementScale=source.displacementScale;this.displacementBias=source.displacementBias;this.specularMap=source.specularMap;this.alphaMap=source.alphaMap;this.envMap=source.envMap;this.combine=source.combine;this.reflectivity=source.reflectivity;this.refractionRatio=source.refractionRatio;this.wireframe=source.wireframe;this.wireframeLinewidth=source.wireframeLinewidth;this.wireframeLinecap=source.wireframeLinecap;this.wireframeLinejoin=source.wireframeLinejoin;this.skinning=source.skinning;this.morphTargets=source.morphTargets;this.morphNormals=source.morphNormals;return this};function MeshToonMaterial(parameters){MeshPhongMaterial.call(this);this.defines={TOON:""};this.type="MeshToonMaterial";this.gradientMap=null;this.setValues(parameters)}MeshToonMaterial.prototype=Object.create(MeshPhongMaterial.prototype);MeshToonMaterial.prototype.constructor=MeshToonMaterial;MeshToonMaterial.prototype.isMeshToonMaterial=true;MeshToonMaterial.prototype.copy=function(source){MeshPhongMaterial.prototype.copy.call(this,source);this.gradientMap=source.gradientMap;return this};function MeshNormalMaterial(parameters){Material.call(this);this.type="MeshNormalMaterial";this.bumpMap=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new Vector2(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=false;this.wireframeLinewidth=1;this.fog=false;this.lights=false;this.skinning=false;this.morphTargets=false;this.morphNormals=false;this.setValues(parameters)}MeshNormalMaterial.prototype=Object.create(Material.prototype);MeshNormalMaterial.prototype.constructor=MeshNormalMaterial;MeshNormalMaterial.prototype.isMeshNormalMaterial=true;MeshNormalMaterial.prototype.copy=function(source){Material.prototype.copy.call(this,source);this.bumpMap=source.bumpMap;this.bumpScale=source.bumpScale;this.normalMap=source.normalMap;this.normalScale.copy(source.normalScale);this.displacementMap=source.displacementMap;this.displacementScale=source.displacementScale;this.displacementBias=source.displacementBias;this.wireframe=source.wireframe;this.wireframeLinewidth=source.wireframeLinewidth;this.skinning=source.skinning;this.morphTargets=source.morphTargets;this.morphNormals=source.morphNormals;return this};function MeshLambertMaterial(parameters){Material.call(this);this.type="MeshLambertMaterial";this.color=new Color(16777215);this.map=null;this.lightMap=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new Color(0);this.emissiveIntensity=1;this.emissiveMap=null;this.specularMap=null;this.alphaMap=null;this.envMap=null;this.combine=MultiplyOperation;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=false;this.wireframeLinewidth=1;this.wireframeLinecap="round";this.wireframeLinejoin="round";this.skinning=false;this.morphTargets=false;this.morphNormals=false;this.setValues(parameters)}MeshLambertMaterial.prototype=Object.create(Material.prototype);MeshLambertMaterial.prototype.constructor=MeshLambertMaterial;MeshLambertMaterial.prototype.isMeshLambertMaterial=true;MeshLambertMaterial.prototype.copy=function(source){Material.prototype.copy.call(this,source);this.color.copy(source.color);this.map=source.map;this.lightMap=source.lightMap;this.lightMapIntensity=source.lightMapIntensity;this.aoMap=source.aoMap;this.aoMapIntensity=source.aoMapIntensity;this.emissive.copy(source.emissive);this.emissiveMap=source.emissiveMap;this.emissiveIntensity=source.emissiveIntensity;this.specularMap=source.specularMap;this.alphaMap=source.alphaMap;this.envMap=source.envMap;this.combine=source.combine;this.reflectivity=source.reflectivity;this.refractionRatio=source.refractionRatio;this.wireframe=source.wireframe;this.wireframeLinewidth=source.wireframeLinewidth;this.wireframeLinecap=source.wireframeLinecap;this.wireframeLinejoin=source.wireframeLinejoin;this.skinning=source.skinning;this.morphTargets=source.morphTargets;this.morphNormals=source.morphNormals;return this};function LineDashedMaterial(parameters){Material.call(this);this.type="LineDashedMaterial";this.color=new Color(16777215);this.linewidth=1;this.scale=1;this.dashSize=3;this.gapSize=1;this.lights=false;this.setValues(parameters)}LineDashedMaterial.prototype=Object.create(Material.prototype);LineDashedMaterial.prototype.constructor=LineDashedMaterial;LineDashedMaterial.prototype.isLineDashedMaterial=true;LineDashedMaterial.prototype.copy=function(source){Material.prototype.copy.call(this,source);this.color.copy(source.color);this.linewidth=source.linewidth;this.scale=source.scale;this.dashSize=source.dashSize;this.gapSize=source.gapSize;return this};var Materials=Object.freeze({ShadowMaterial:ShadowMaterial,SpriteMaterial:SpriteMaterial,RawShaderMaterial:RawShaderMaterial,ShaderMaterial:ShaderMaterial,PointsMaterial:PointsMaterial,MeshPhysicalMaterial:MeshPhysicalMaterial,MeshStandardMaterial:MeshStandardMaterial,MeshPhongMaterial:MeshPhongMaterial,MeshToonMaterial:MeshToonMaterial,MeshNormalMaterial:MeshNormalMaterial,MeshLambertMaterial:MeshLambertMaterial,MeshDepthMaterial:MeshDepthMaterial,MeshBasicMaterial:MeshBasicMaterial,LineDashedMaterial:LineDashedMaterial,LineBasicMaterial:LineBasicMaterial,Material:Material});var Cache={enabled:false,files:{},add:function(key,file){if(this.enabled===false)return;this.files[key]=file},get:function(key){if(this.enabled===false)return;return this.files[key]},remove:function(key){delete this.files[key]},clear:function(){this.files={}}};function LoadingManager(onLoad,onProgress,onError){var scope=this;var isLoading=false,itemsLoaded=0,itemsTotal=0;this.onStart=undefined;this.onLoad=onLoad;this.onProgress=onProgress;this.onError=onError;this.itemStart=function(url){itemsTotal++;if(isLoading===false){if(scope.onStart!==undefined){scope.onStart(url,itemsLoaded,itemsTotal)}}isLoading=true};this.itemEnd=function(url){itemsLoaded++;if(scope.onProgress!==undefined){scope.onProgress(url,itemsLoaded,itemsTotal)}if(itemsLoaded===itemsTotal){isLoading=false;if(scope.onLoad!==undefined){scope.onLoad()}}};this.itemError=function(url){if(scope.onError!==undefined){scope.onError(url)}}}var DefaultLoadingManager=new LoadingManager;function FileLoader(manager){this.manager=manager!==undefined?manager:DefaultLoadingManager}Object.assign(FileLoader.prototype,{load:function(url,onLoad,onProgress,onError){if(url===undefined)url="";if(this.path!==undefined)url=this.path+url;var scope=this;var cached=Cache.get(url);if(cached!==undefined){scope.manager.itemStart(url);setTimeout(function(){if(onLoad)onLoad(cached);scope.manager.itemEnd(url)},0);return cached}var dataUriRegex=/^data:(.*?)(;base64)?,(.*)$/;var dataUriRegexResult=url.match(dataUriRegex);if(dataUriRegexResult){var mimeType=dataUriRegexResult[1];var isBase64=!!dataUriRegexResult[2];var data=dataUriRegexResult[3];data=window.decodeURIComponent(data);if(isBase64)data=window.atob(data);try{var response;var responseType=(this.responseType||"").toLowerCase();switch(responseType){case"arraybuffer":case"blob":response=new ArrayBuffer(data.length);var view=new Uint8Array(response);for(var i=0;i<data.length;i++){view[i]=data.charCodeAt(i)}if(responseType==="blob"){response=new Blob([response],{type:mimeType})}break;case"document":var parser=new DOMParser;response=parser.parseFromString(data,mimeType);break;case"json":response=JSON.parse(data);break;default:response=data;break}window.setTimeout(function(){if(onLoad)onLoad(response);scope.manager.itemEnd(url)},0)}catch(error){window.setTimeout(function(){if(onError)onError(error);scope.manager.itemEnd(url);scope.manager.itemError(url)},0)}}else{var request=new XMLHttpRequest;request.open("GET",url,true);request.addEventListener("load",function(event){var response=event.target.response;Cache.add(url,response);if(this.status===200){if(onLoad)onLoad(response);scope.manager.itemEnd(url)}else if(this.status===0){console.warn("THREE.FileLoader: HTTP Status 0 received.");if(onLoad)onLoad(response);scope.manager.itemEnd(url)}else{if(onError)onError(event);scope.manager.itemEnd(url);scope.manager.itemError(url)}},false);if(onProgress!==undefined){request.addEventListener("progress",function(event){onProgress(event)},false)}request.addEventListener("error",function(event){if(onError)onError(event);scope.manager.itemEnd(url);scope.manager.itemError(url)},false);if(this.responseType!==undefined)request.responseType=this.responseType;if(this.withCredentials!==undefined)request.withCredentials=this.withCredentials;if(request.overrideMimeType)request.overrideMimeType(this.mimeType!==undefined?this.mimeType:"text/plain");for(var header in this.requestHeader){request.setRequestHeader(header,this.requestHeader[header])}request.send(null)}scope.manager.itemStart(url);return request},setPath:function(value){this.path=value;return this},setResponseType:function(value){
this.responseType=value;return this},setWithCredentials:function(value){this.withCredentials=value;return this},setMimeType:function(value){this.mimeType=value;return this},setRequestHeader:function(value){this.requestHeader=value;return this}});function CompressedTextureLoader(manager){this.manager=manager!==undefined?manager:DefaultLoadingManager;this._parser=null}Object.assign(CompressedTextureLoader.prototype,{load:function(url,onLoad,onProgress,onError){var scope=this;var images=[];var texture=new CompressedTexture;texture.image=images;var loader=new FileLoader(this.manager);loader.setPath(this.path);loader.setResponseType("arraybuffer");function loadTexture(i){loader.load(url[i],function(buffer){var texDatas=scope._parser(buffer,true);images[i]={width:texDatas.width,height:texDatas.height,format:texDatas.format,mipmaps:texDatas.mipmaps};loaded+=1;if(loaded===6){if(texDatas.mipmapCount===1)texture.minFilter=LinearFilter;texture.format=texDatas.format;texture.needsUpdate=true;if(onLoad)onLoad(texture)}},onProgress,onError)}if(Array.isArray(url)){var loaded=0;for(var i=0,il=url.length;i<il;++i){loadTexture(i)}}else{loader.load(url,function(buffer){var texDatas=scope._parser(buffer,true);if(texDatas.isCubemap){var faces=texDatas.mipmaps.length/texDatas.mipmapCount;for(var f=0;f<faces;f++){images[f]={mipmaps:[]};for(var i=0;i<texDatas.mipmapCount;i++){images[f].mipmaps.push(texDatas.mipmaps[f*texDatas.mipmapCount+i]);images[f].format=texDatas.format;images[f].width=texDatas.width;images[f].height=texDatas.height}}}else{texture.image.width=texDatas.width;texture.image.height=texDatas.height;texture.mipmaps=texDatas.mipmaps}if(texDatas.mipmapCount===1){texture.minFilter=LinearFilter}texture.format=texDatas.format;texture.needsUpdate=true;if(onLoad)onLoad(texture)},onProgress,onError)}return texture},setPath:function(value){this.path=value;return this}});function DataTextureLoader(manager){this.manager=manager!==undefined?manager:DefaultLoadingManager;this._parser=null}Object.assign(DataTextureLoader.prototype,{load:function(url,onLoad,onProgress,onError){var scope=this;var texture=new DataTexture;var loader=new FileLoader(this.manager);loader.setResponseType("arraybuffer");loader.load(url,function(buffer){var texData=scope._parser(buffer);if(!texData)return;if(undefined!==texData.image){texture.image=texData.image}else if(undefined!==texData.data){texture.image.width=texData.width;texture.image.height=texData.height;texture.image.data=texData.data}texture.wrapS=undefined!==texData.wrapS?texData.wrapS:ClampToEdgeWrapping;texture.wrapT=undefined!==texData.wrapT?texData.wrapT:ClampToEdgeWrapping;texture.magFilter=undefined!==texData.magFilter?texData.magFilter:LinearFilter;texture.minFilter=undefined!==texData.minFilter?texData.minFilter:LinearMipMapLinearFilter;texture.anisotropy=undefined!==texData.anisotropy?texData.anisotropy:1;if(undefined!==texData.format){texture.format=texData.format}if(undefined!==texData.type){texture.type=texData.type}if(undefined!==texData.mipmaps){texture.mipmaps=texData.mipmaps}if(1===texData.mipmapCount){texture.minFilter=LinearFilter}texture.needsUpdate=true;if(onLoad)onLoad(texture,texData)},onProgress,onError);return texture}});function ImageLoader(manager){this.manager=manager!==undefined?manager:DefaultLoadingManager}Object.assign(ImageLoader.prototype,{load:function(url,onLoad,onProgress,onError){if(url===undefined)url="";if(this.path!==undefined)url=this.path+url;var scope=this;var cached=Cache.get(url);if(cached!==undefined){scope.manager.itemStart(url);setTimeout(function(){if(onLoad)onLoad(cached);scope.manager.itemEnd(url)},0);return cached}var image=document.createElementNS("http://www.w3.org/1999/xhtml","img");image.addEventListener("load",function(){Cache.add(url,this);if(onLoad)onLoad(this);scope.manager.itemEnd(url)},false);image.addEventListener("error",function(event){if(onError)onError(event);scope.manager.itemEnd(url);scope.manager.itemError(url)},false);if(url.substr(0,5)!=="data:"){if(this.crossOrigin!==undefined)image.crossOrigin=this.crossOrigin}scope.manager.itemStart(url);image.src=url;return image},setCrossOrigin:function(value){this.crossOrigin=value;return this},setPath:function(value){this.path=value;return this}});function CubeTextureLoader(manager){this.manager=manager!==undefined?manager:DefaultLoadingManager}Object.assign(CubeTextureLoader.prototype,{load:function(urls,onLoad,onProgress,onError){var texture=new CubeTexture;var loader=new ImageLoader(this.manager);loader.setCrossOrigin(this.crossOrigin);loader.setPath(this.path);var loaded=0;function loadTexture(i){loader.load(urls[i],function(image){texture.images[i]=image;loaded++;if(loaded===6){texture.needsUpdate=true;if(onLoad)onLoad(texture)}},undefined,onError)}for(var i=0;i<urls.length;++i){loadTexture(i)}return texture},setCrossOrigin:function(value){this.crossOrigin=value;return this},setPath:function(value){this.path=value;return this}});function TextureLoader(manager){this.manager=manager!==undefined?manager:DefaultLoadingManager}Object.assign(TextureLoader.prototype,{load:function(url,onLoad,onProgress,onError){var loader=new ImageLoader(this.manager);loader.setCrossOrigin(this.crossOrigin);loader.setPath(this.path);var texture=new Texture;texture.image=loader.load(url,function(){var isJPEG=url.search(/\.(jpg|jpeg)$/)>0||url.search(/^data\:image\/jpeg/)===0;texture.format=isJPEG?RGBFormat:RGBAFormat;texture.needsUpdate=true;if(onLoad!==undefined){onLoad(texture)}},onProgress,onError);return texture},setCrossOrigin:function(value){this.crossOrigin=value;return this},setPath:function(value){this.path=value;return this}});function Light(color,intensity){Object3D.call(this);this.type="Light";this.color=new Color(color);this.intensity=intensity!==undefined?intensity:1;this.receiveShadow=undefined}Light.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Light,isLight:true,copy:function(source){Object3D.prototype.copy.call(this,source);this.color.copy(source.color);this.intensity=source.intensity;return this},toJSON:function(meta){var data=Object3D.prototype.toJSON.call(this,meta);data.object.color=this.color.getHex();data.object.intensity=this.intensity;if(this.groundColor!==undefined)data.object.groundColor=this.groundColor.getHex();if(this.distance!==undefined)data.object.distance=this.distance;if(this.angle!==undefined)data.object.angle=this.angle;if(this.decay!==undefined)data.object.decay=this.decay;if(this.penumbra!==undefined)data.object.penumbra=this.penumbra;if(this.shadow!==undefined)data.object.shadow=this.shadow.toJSON();return data}});function HemisphereLight(skyColor,groundColor,intensity){Light.call(this,skyColor,intensity);this.type="HemisphereLight";this.castShadow=undefined;this.position.copy(Object3D.DefaultUp);this.updateMatrix();this.groundColor=new Color(groundColor)}HemisphereLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:HemisphereLight,isHemisphereLight:true,copy:function(source){Light.prototype.copy.call(this,source);this.groundColor.copy(source.groundColor);return this}});function LightShadow(camera){this.camera=camera;this.bias=0;this.radius=1;this.mapSize=new Vector2(512,512);this.map=null;this.matrix=new Matrix4}Object.assign(LightShadow.prototype,{copy:function(source){this.camera=source.camera.clone();this.bias=source.bias;this.radius=source.radius;this.mapSize.copy(source.mapSize);return this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){var object={};if(this.bias!==0)object.bias=this.bias;if(this.radius!==1)object.radius=this.radius;if(this.mapSize.x!==512||this.mapSize.y!==512)object.mapSize=this.mapSize.toArray();object.camera=this.camera.toJSON(false).object;delete object.camera.matrix;return object}});function SpotLightShadow(){LightShadow.call(this,new PerspectiveCamera(50,1,.5,500))}SpotLightShadow.prototype=Object.assign(Object.create(LightShadow.prototype),{constructor:SpotLightShadow,isSpotLightShadow:true,update:function(light){var camera=this.camera;var fov=_Math.RAD2DEG*2*light.angle;var aspect=this.mapSize.width/this.mapSize.height;var far=light.distance||camera.far;if(fov!==camera.fov||aspect!==camera.aspect||far!==camera.far){camera.fov=fov;camera.aspect=aspect;camera.far=far;camera.updateProjectionMatrix()}}});function SpotLight(color,intensity,distance,angle,penumbra,decay){Light.call(this,color,intensity);this.type="SpotLight";this.position.copy(Object3D.DefaultUp);this.updateMatrix();this.target=new Object3D;Object.defineProperty(this,"power",{get:function(){return this.intensity*Math.PI},set:function(power){this.intensity=power/Math.PI}});this.distance=distance!==undefined?distance:0;this.angle=angle!==undefined?angle:Math.PI/3;this.penumbra=penumbra!==undefined?penumbra:0;this.decay=decay!==undefined?decay:1;this.shadow=new SpotLightShadow}SpotLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:SpotLight,isSpotLight:true,copy:function(source){Light.prototype.copy.call(this,source);this.distance=source.distance;this.angle=source.angle;this.penumbra=source.penumbra;this.decay=source.decay;this.target=source.target.clone();this.shadow=source.shadow.clone();return this}});function PointLight(color,intensity,distance,decay){Light.call(this,color,intensity);this.type="PointLight";Object.defineProperty(this,"power",{get:function(){return this.intensity*4*Math.PI},set:function(power){this.intensity=power/(4*Math.PI)}});this.distance=distance!==undefined?distance:0;this.decay=decay!==undefined?decay:1;this.shadow=new LightShadow(new PerspectiveCamera(90,1,.5,500))}PointLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:PointLight,isPointLight:true,copy:function(source){Light.prototype.copy.call(this,source);this.distance=source.distance;this.decay=source.decay;this.shadow=source.shadow.clone();return this}});function DirectionalLightShadow(){LightShadow.call(this,new OrthographicCamera(-5,5,5,-5,.5,500))}DirectionalLightShadow.prototype=Object.assign(Object.create(LightShadow.prototype),{constructor:DirectionalLightShadow});function DirectionalLight(color,intensity){Light.call(this,color,intensity);this.type="DirectionalLight";this.position.copy(Object3D.DefaultUp);this.updateMatrix();this.target=new Object3D;this.shadow=new DirectionalLightShadow}DirectionalLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:DirectionalLight,isDirectionalLight:true,copy:function(source){Light.prototype.copy.call(this,source);this.target=source.target.clone();this.shadow=source.shadow.clone();return this}});function AmbientLight(color,intensity){Light.call(this,color,intensity);this.type="AmbientLight";this.castShadow=undefined}AmbientLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:AmbientLight,isAmbientLight:true});function RectAreaLight(color,intensity,width,height){Light.call(this,color,intensity);this.type="RectAreaLight";this.position.set(0,1,0);this.updateMatrix();this.width=width!==undefined?width:10;this.height=height!==undefined?height:10}RectAreaLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:RectAreaLight,isRectAreaLight:true,copy:function(source){Light.prototype.copy.call(this,source);this.width=source.width;this.height=source.height;return this},toJSON:function(meta){var data=Light.prototype.toJSON.call(this,meta);data.object.width=this.width;data.object.height=this.height;return data}});var AnimationUtils={arraySlice:function(array,from,to){if(AnimationUtils.isTypedArray(array)){return new array.constructor(array.subarray(from,to!==undefined?to:array.length))}return array.slice(from,to)},convertArray:function(array,type,forceClone){if(!array||!forceClone&&array.constructor===type)return array;if(typeof type.BYTES_PER_ELEMENT==="number"){return new type(array)}return Array.prototype.slice.call(array)},isTypedArray:function(object){return ArrayBuffer.isView(object)&&!(object instanceof DataView)},getKeyframeOrder:function(times){function compareTime(i,j){return times[i]-times[j]}var n=times.length;var result=new Array(n);for(var i=0;i!==n;++i)result[i]=i;result.sort(compareTime);return result},sortedArray:function(values,stride,order){var nValues=values.length;var result=new values.constructor(nValues);for(var i=0,dstOffset=0;dstOffset!==nValues;++i){var srcOffset=order[i]*stride;for(var j=0;j!==stride;++j){result[dstOffset++]=values[srcOffset+j]}}return result},flattenJSON:function(jsonKeys,times,values,valuePropertyName){var i=1,key=jsonKeys[0];while(key!==undefined&&key[valuePropertyName]===undefined){key=jsonKeys[i++]}if(key===undefined)return;var value=key[valuePropertyName];if(value===undefined)return;if(Array.isArray(value)){do{value=key[valuePropertyName];if(value!==undefined){times.push(key.time);values.push.apply(values,value)}key=jsonKeys[i++]}while(key!==undefined)}else if(value.toArray!==undefined){do{value=key[valuePropertyName];if(value!==undefined){times.push(key.time);value.toArray(values,values.length)}key=jsonKeys[i++]}while(key!==undefined)}else{do{value=key[valuePropertyName];if(value!==undefined){times.push(key.time);values.push(value)}key=jsonKeys[i++]}while(key!==undefined)}}};function Interpolant(parameterPositions,sampleValues,sampleSize,resultBuffer){this.parameterPositions=parameterPositions;this._cachedIndex=0;this.resultBuffer=resultBuffer!==undefined?resultBuffer:new sampleValues.constructor(sampleSize);this.sampleValues=sampleValues;this.valueSize=sampleSize}Object.assign(Interpolant.prototype,{evaluate:function(t){var pp=this.parameterPositions,i1=this._cachedIndex,t1=pp[i1],t0=pp[i1-1];validate_interval:{seek:{var right;linear_scan:{forward_scan:if(!(t<t1)){for(var giveUpAt=i1+2;;){if(t1===undefined){if(t<t0)break forward_scan;i1=pp.length;this._cachedIndex=i1;return this.afterEnd_(i1-1,t,t0)}if(i1===giveUpAt)break;t0=t1;t1=pp[++i1];if(t<t1){break seek}}right=pp.length;break linear_scan}if(!(t>=t0)){var t1global=pp[1];if(t<t1global){i1=2;t0=t1global}for(var giveUpAt=i1-2;;){if(t0===undefined){this._cachedIndex=0;return this.beforeStart_(0,t,t1)}if(i1===giveUpAt)break;t1=t0;t0=pp[--i1-1];if(t>=t0){break seek}}right=i1;i1=0;break linear_scan}break validate_interval}while(i1<right){var mid=i1+right>>>1;if(t<pp[mid]){right=mid}else{i1=mid+1}}t1=pp[i1];t0=pp[i1-1];if(t0===undefined){this._cachedIndex=0;return this.beforeStart_(0,t,t1)}if(t1===undefined){i1=pp.length;this._cachedIndex=i1;return this.afterEnd_(i1-1,t0,t)}}this._cachedIndex=i1;this.intervalChanged_(i1,t0,t1)}return this.interpolate_(i1,t0,t,t1)},settings:null,DefaultSettings_:{},getSettings_:function(){return this.settings||this.DefaultSettings_},copySampleValue_:function(index){var result=this.resultBuffer,values=this.sampleValues,stride=this.valueSize,offset=index*stride;for(var i=0;i!==stride;++i){result[i]=values[offset+i]}return result},interpolate_:function(i1,t0,t,t1){throw new Error("call to abstract method")},intervalChanged_:function(i1,t0,t1){}});Object.assign(Interpolant.prototype,{beforeStart_:Interpolant.prototype.copySampleValue_,afterEnd_:Interpolant.prototype.copySampleValue_});function CubicInterpolant(parameterPositions,sampleValues,sampleSize,resultBuffer){Interpolant.call(this,parameterPositions,sampleValues,sampleSize,resultBuffer);this._weightPrev=-0;this._offsetPrev=-0;this._weightNext=-0;this._offsetNext=-0}CubicInterpolant.prototype=Object.assign(Object.create(Interpolant.prototype),{constructor:CubicInterpolant,DefaultSettings_:{endingStart:ZeroCurvatureEnding,endingEnd:ZeroCurvatureEnding},intervalChanged_:function(i1,t0,t1){var pp=this.parameterPositions,iPrev=i1-2,iNext=i1+1,tPrev=pp[iPrev],tNext=pp[iNext];if(tPrev===undefined){switch(this.getSettings_().endingStart){case ZeroSlopeEnding:iPrev=i1;tPrev=2*t0-t1;break;case WrapAroundEnding:iPrev=pp.length-2;tPrev=t0+pp[iPrev]-pp[iPrev+1];break;default:iPrev=i1;tPrev=t1}}if(tNext===undefined){switch(this.getSettings_().endingEnd){case ZeroSlopeEnding:iNext=i1;tNext=2*t1-t0;break;case WrapAroundEnding:iNext=1;tNext=t1+pp[1]-pp[0];break;default:iNext=i1-1;tNext=t0}}var halfDt=(t1-t0)*.5,stride=this.valueSize;this._weightPrev=halfDt/(t0-tPrev);this._weightNext=halfDt/(tNext-t1);this._offsetPrev=iPrev*stride;this._offsetNext=iNext*stride},interpolate_:function(i1,t0,t,t1){var result=this.resultBuffer,values=this.sampleValues,stride=this.valueSize,o1=i1*stride,o0=o1-stride,oP=this._offsetPrev,oN=this._offsetNext,wP=this._weightPrev,wN=this._weightNext,p=(t-t0)/(t1-t0),pp=p*p,ppp=pp*p;var sP=-wP*ppp+2*wP*pp-wP*p;var s0=(1+wP)*ppp+(-1.5-2*wP)*pp+(-.5+wP)*p+1;var s1=(-1-wN)*ppp+(1.5+wN)*pp+.5*p;var sN=wN*ppp-wN*pp;for(var i=0;i!==stride;++i){result[i]=sP*values[oP+i]+s0*values[o0+i]+s1*values[o1+i]+sN*values[oN+i]}return result}});function LinearInterpolant(parameterPositions,sampleValues,sampleSize,resultBuffer){Interpolant.call(this,parameterPositions,sampleValues,sampleSize,resultBuffer)}LinearInterpolant.prototype=Object.assign(Object.create(Interpolant.prototype),{constructor:LinearInterpolant,interpolate_:function(i1,t0,t,t1){var result=this.resultBuffer,values=this.sampleValues,stride=this.valueSize,offset1=i1*stride,offset0=offset1-stride,weight1=(t-t0)/(t1-t0),weight0=1-weight1;for(var i=0;i!==stride;++i){result[i]=values[offset0+i]*weight0+values[offset1+i]*weight1}return result}});function DiscreteInterpolant(parameterPositions,sampleValues,sampleSize,resultBuffer){Interpolant.call(this,parameterPositions,sampleValues,sampleSize,resultBuffer)}DiscreteInterpolant.prototype=Object.assign(Object.create(Interpolant.prototype),{constructor:DiscreteInterpolant,interpolate_:function(i1,t0,t,t1){return this.copySampleValue_(i1-1)}});var KeyframeTrackPrototype;KeyframeTrackPrototype={TimeBufferType:Float32Array,ValueBufferType:Float32Array,DefaultInterpolation:InterpolateLinear,InterpolantFactoryMethodDiscrete:function(result){return new DiscreteInterpolant(this.times,this.values,this.getValueSize(),result)},InterpolantFactoryMethodLinear:function(result){return new LinearInterpolant(this.times,this.values,this.getValueSize(),result)},InterpolantFactoryMethodSmooth:function(result){return new CubicInterpolant(this.times,this.values,this.getValueSize(),result)},setInterpolation:function(interpolation){var factoryMethod;switch(interpolation){case InterpolateDiscrete:factoryMethod=this.InterpolantFactoryMethodDiscrete;break;case InterpolateLinear:factoryMethod=this.InterpolantFactoryMethodLinear;break;case InterpolateSmooth:factoryMethod=this.InterpolantFactoryMethodSmooth;break}if(factoryMethod===undefined){var message="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name;if(this.createInterpolant===undefined){if(interpolation!==this.DefaultInterpolation){this.setInterpolation(this.DefaultInterpolation)}else{throw new Error(message)}}console.warn("THREE.KeyframeTrackPrototype:",message);return}this.createInterpolant=factoryMethod},getInterpolation:function(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return InterpolateDiscrete;case this.InterpolantFactoryMethodLinear:return InterpolateLinear;case this.InterpolantFactoryMethodSmooth:return InterpolateSmooth}},getValueSize:function(){return this.values.length/this.times.length},shift:function(timeOffset){if(timeOffset!==0){var times=this.times;for(var i=0,n=times.length;i!==n;++i){times[i]+=timeOffset}}return this},scale:function(timeScale){if(timeScale!==1){var times=this.times;for(var i=0,n=times.length;i!==n;++i){times[i]*=timeScale}}return this},trim:function(startTime,endTime){var times=this.times,nKeys=times.length,from=0,to=nKeys-1;while(from!==nKeys&×[from]<startTime)++from;while(to!==-1&×[to]>endTime)--to;++to;if(from!==0||to!==nKeys){if(from>=to)to=Math.max(to,1),from=to-1;var stride=this.getValueSize();this.times=AnimationUtils.arraySlice(times,from,to);this.values=AnimationUtils.arraySlice(this.values,from*stride,to*stride)}return this},validate:function(){var valid=true;var valueSize=this.getValueSize();if(valueSize-Math.floor(valueSize)!==0){console.error("THREE.KeyframeTrackPrototype: Invalid value size in track.",this);valid=false}var times=this.times,values=this.values,nKeys=times.length;if(nKeys===0){console.error("THREE.KeyframeTrackPrototype: Track is empty.",this);valid=false}var prevTime=null;for(var i=0;i!==nKeys;i++){var currTime=times[i];if(typeof currTime==="number"&&isNaN(currTime)){console.error("THREE.KeyframeTrackPrototype: Time is not a valid number.",this,i,currTime);valid=false;break}if(prevTime!==null&&prevTime>currTime){console.error("THREE.KeyframeTrackPrototype: Out of order keys.",this,i,currTime,prevTime);valid=false;break}prevTime=currTime}if(values!==undefined){if(AnimationUtils.isTypedArray(values)){for(var i=0,n=values.length;i!==n;++i){var value=values[i];if(isNaN(value)){console.error("THREE.KeyframeTrackPrototype: Value is not a valid number.",this,i,value);valid=false;break}}}}return valid},optimize:function(){var times=this.times,values=this.values,stride=this.getValueSize(),smoothInterpolation=this.getInterpolation()===InterpolateSmooth,writeIndex=1,lastIndex=times.length-1;for(var i=1;i<lastIndex;++i){var keep=false;var time=times[i];var timeNext=times[i+1];if(time!==timeNext&&(i!==1||time!==time[0])){if(!smoothInterpolation){var offset=i*stride,offsetP=offset-stride,offsetN=offset+stride;for(var j=0;j!==stride;++j){var value=values[offset+j];if(value!==values[offsetP+j]||value!==values[offsetN+j]){keep=true;break}}}else keep=true}if(keep){if(i!==writeIndex){times[writeIndex]=times[i];var readOffset=i*stride,writeOffset=writeIndex*stride;for(var j=0;j!==stride;++j)values[writeOffset+j]=values[readOffset+j]}++writeIndex}}if(lastIndex>0){times[writeIndex]=times[lastIndex];for(var readOffset=lastIndex*stride,writeOffset=writeIndex*stride,j=0;j!==stride;++j)values[writeOffset+j]=values[readOffset+j];++writeIndex}if(writeIndex!==times.length){this.times=AnimationUtils.arraySlice(times,0,writeIndex);this.values=AnimationUtils.arraySlice(values,0,writeIndex*stride)}return this}};function KeyframeTrackConstructor(name,times,values,interpolation){if(name===undefined)throw new Error("track name is undefined");if(times===undefined||times.length===0){throw new Error("no keyframes in track named "+name)}this.name=name;this.times=AnimationUtils.convertArray(times,this.TimeBufferType);this.values=AnimationUtils.convertArray(values,this.ValueBufferType);this.setInterpolation(interpolation||this.DefaultInterpolation);this.validate();this.optimize()}function VectorKeyframeTrack(name,times,values,interpolation){KeyframeTrackConstructor.call(this,name,times,values,interpolation)}VectorKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrackPrototype),{constructor:VectorKeyframeTrack,ValueTypeName:"vector"});function QuaternionLinearInterpolant(parameterPositions,sampleValues,sampleSize,resultBuffer){Interpolant.call(this,parameterPositions,sampleValues,sampleSize,resultBuffer)}QuaternionLinearInterpolant.prototype=Object.assign(Object.create(Interpolant.prototype),{constructor:QuaternionLinearInterpolant,interpolate_:function(i1,t0,t,t1){var result=this.resultBuffer,values=this.sampleValues,stride=this.valueSize,offset=i1*stride,alpha=(t-t0)/(t1-t0);for(var end=offset+stride;offset!==end;offset+=4){Quaternion.slerpFlat(result,0,values,offset-stride,values,offset,alpha)}return result}});function QuaternionKeyframeTrack(name,times,values,interpolation){KeyframeTrackConstructor.call(this,name,times,values,interpolation)}QuaternionKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrackPrototype),{constructor:QuaternionKeyframeTrack,ValueTypeName:"quaternion",DefaultInterpolation:InterpolateLinear,InterpolantFactoryMethodLinear:function(result){return new QuaternionLinearInterpolant(this.times,this.values,this.getValueSize(),result)},InterpolantFactoryMethodSmooth:undefined});function NumberKeyframeTrack(name,times,values,interpolation){KeyframeTrackConstructor.call(this,name,times,values,interpolation)}NumberKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrackPrototype),{constructor:NumberKeyframeTrack,ValueTypeName:"number"});function StringKeyframeTrack(name,times,values,interpolation){KeyframeTrackConstructor.call(this,name,times,values,interpolation)}StringKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrackPrototype),{constructor:StringKeyframeTrack,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:InterpolateDiscrete,InterpolantFactoryMethodLinear:undefined,InterpolantFactoryMethodSmooth:undefined});function BooleanKeyframeTrack(name,times,values){KeyframeTrackConstructor.call(this,name,times,values)}BooleanKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrackPrototype),{constructor:BooleanKeyframeTrack,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:InterpolateDiscrete,InterpolantFactoryMethodLinear:undefined,InterpolantFactoryMethodSmooth:undefined});function ColorKeyframeTrack(name,times,values,interpolation){KeyframeTrackConstructor.call(this,name,times,values,interpolation)}ColorKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrackPrototype),{constructor:ColorKeyframeTrack,ValueTypeName:"color"});function KeyframeTrack(name,times,values,interpolation){KeyframeTrackConstructor.apply(this,arguments)}KeyframeTrack.prototype=KeyframeTrackPrototype;KeyframeTrackPrototype.constructor=KeyframeTrack;Object.assign(KeyframeTrack,{parse:function(json){if(json.type===undefined){throw new Error("track type undefined, can not parse")}var trackType=KeyframeTrack._getTrackTypeForValueTypeName(json.type);if(json.times===undefined){var times=[],values=[];AnimationUtils.flattenJSON(json.keys,times,values,"value");json.times=times;json.values=values}if(trackType.parse!==undefined){return trackType.parse(json)}else{return new trackType(json.name,json.times,json.values,json.interpolation)}},toJSON:function(track){var trackType=track.constructor;var json;if(trackType.toJSON!==undefined){json=trackType.toJSON(track)}else{json={name:track.name,times:AnimationUtils.convertArray(track.times,Array),values:AnimationUtils.convertArray(track.values,Array)};var interpolation=track.getInterpolation();if(interpolation!==track.DefaultInterpolation){json.interpolation=interpolation}}json.type=track.ValueTypeName;return json},_getTrackTypeForValueTypeName:function(typeName){switch(typeName.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return NumberKeyframeTrack;case"vector":case"vector2":case"vector3":case"vector4":return VectorKeyframeTrack;case"color":return ColorKeyframeTrack;case"quaternion":return QuaternionKeyframeTrack;case"bool":case"boolean":return BooleanKeyframeTrack;case"string":return StringKeyframeTrack}throw new Error("Unsupported typeName: "+typeName)}});function AnimationClip(name,duration,tracks){this.name=name;this.tracks=tracks;this.duration=duration!==undefined?duration:-1;this.uuid=_Math.generateUUID();if(this.duration<0){this.resetDuration()}this.optimize()}Object.assign(AnimationClip,{parse:function(json){var tracks=[],jsonTracks=json.tracks,frameTime=1/(json.fps||1);for(var i=0,n=jsonTracks.length;i!==n;++i){tracks.push(KeyframeTrack.parse(jsonTracks[i]).scale(frameTime))}return new AnimationClip(json.name,json.duration,tracks)},toJSON:function(clip){var tracks=[],clipTracks=clip.tracks;var json={name:clip.name,duration:clip.duration,tracks:tracks};for(var i=0,n=clipTracks.length;i!==n;++i){tracks.push(KeyframeTrack.toJSON(clipTracks[i]))}return json},CreateFromMorphTargetSequence:function(name,morphTargetSequence,fps,noLoop){var numMorphTargets=morphTargetSequence.length;var tracks=[];for(var i=0;i<numMorphTargets;i++){var times=[];var values=[];times.push((i+numMorphTargets-1)%numMorphTargets,i,(i+1)%numMorphTargets);values.push(0,1,0);var order=AnimationUtils.getKeyframeOrder(times);times=AnimationUtils.sortedArray(times,1,order);values=AnimationUtils.sortedArray(values,1,order);if(!noLoop&×[0]===0){times.push(numMorphTargets);values.push(values[0])}tracks.push(new NumberKeyframeTrack(".morphTargetInfluences["+morphTargetSequence[i].name+"]",times,values).scale(1/fps))}return new AnimationClip(name,-1,tracks)},findByName:function(objectOrClipArray,name){var clipArray=objectOrClipArray;if(!Array.isArray(objectOrClipArray)){var o=objectOrClipArray;clipArray=o.geometry&&o.geometry.animations||o.animations}for(var i=0;i<clipArray.length;i++){if(clipArray[i].name===name){return clipArray[i]}}return null},CreateClipsFromMorphTargetSequences:function(morphTargets,fps,noLoop){var animationToMorphTargets={};var pattern=/^([\w-]*?)([\d]+)$/;for(var i=0,il=morphTargets.length;i<il;i++){var morphTarget=morphTargets[i];var parts=morphTarget.name.match(pattern);if(parts&&parts.length>1){var name=parts[1];var animationMorphTargets=animationToMorphTargets[name];if(!animationMorphTargets){animationToMorphTargets[name]=animationMorphTargets=[]}animationMorphTargets.push(morphTarget)}}var clips=[];for(var name in animationToMorphTargets){clips.push(AnimationClip.CreateFromMorphTargetSequence(name,animationToMorphTargets[name],fps,noLoop))}return clips},parseAnimation:function(animation,bones){if(!animation){console.error("THREE.AnimationClip: No animation in JSONLoader data.");return null}var addNonemptyTrack=function(trackType,trackName,animationKeys,propertyName,destTracks){if(animationKeys.length!==0){var times=[];var values=[];AnimationUtils.flattenJSON(animationKeys,times,values,propertyName);if(times.length!==0){destTracks.push(new trackType(trackName,times,values))}}};var tracks=[];var clipName=animation.name||"default";var duration=animation.length||-1;var fps=animation.fps||30;var hierarchyTracks=animation.hierarchy||[];for(var h=0;h<hierarchyTracks.length;h++){var animationKeys=hierarchyTracks[h].keys;if(!animationKeys||animationKeys.length===0)continue;if(animationKeys[0].morphTargets){var morphTargetNames={};for(var k=0;k<animationKeys.length;k++){if(animationKeys[k].morphTargets){for(var m=0;m<animationKeys[k].morphTargets.length;m++){morphTargetNames[animationKeys[k].morphTargets[m]]=-1}}}for(var morphTargetName in morphTargetNames){var times=[];var values=[];for(var m=0;m!==animationKeys[k].morphTargets.length;++m){var animationKey=animationKeys[k];times.push(animationKey.time);values.push(animationKey.morphTarget===morphTargetName?1:0)}tracks.push(new NumberKeyframeTrack(".morphTargetInfluence["+morphTargetName+"]",times,values))}duration=morphTargetNames.length*(fps||1)}else{var boneName=".bones["+bones[h].name+"]";addNonemptyTrack(VectorKeyframeTrack,boneName+".position",animationKeys,"pos",tracks);addNonemptyTrack(QuaternionKeyframeTrack,boneName+".quaternion",animationKeys,"rot",tracks);addNonemptyTrack(VectorKeyframeTrack,boneName+".scale",animationKeys,"scl",tracks)}}if(tracks.length===0){return null}var clip=new AnimationClip(clipName,duration,tracks);return clip}});Object.assign(AnimationClip.prototype,{resetDuration:function(){var tracks=this.tracks,duration=0;for(var i=0,n=tracks.length;i!==n;++i){var track=this.tracks[i];duration=Math.max(duration,track.times[track.times.length-1])}this.duration=duration},trim:function(){for(var i=0;i<this.tracks.length;i++){this.tracks[i].trim(0,this.duration)}return this},optimize:function(){for(var i=0;i<this.tracks.length;i++){this.tracks[i].optimize()}return this}});function MaterialLoader(manager){this.manager=manager!==undefined?manager:DefaultLoadingManager;this.textures={}}Object.assign(MaterialLoader.prototype,{load:function(url,onLoad,onProgress,onError){var scope=this;var loader=new FileLoader(scope.manager);loader.load(url,function(text){onLoad(scope.parse(JSON.parse(text)))},onProgress,onError)},setTextures:function(value){this.textures=value},parse:function(json){var textures=this.textures;function getTexture(name){if(textures[name]===undefined){console.warn("THREE.MaterialLoader: Undefined texture",name)}return textures[name];
}var material=new Materials[json.type];if(json.uuid!==undefined)material.uuid=json.uuid;if(json.name!==undefined)material.name=json.name;if(json.color!==undefined)material.color.setHex(json.color);if(json.roughness!==undefined)material.roughness=json.roughness;if(json.metalness!==undefined)material.metalness=json.metalness;if(json.emissive!==undefined)material.emissive.setHex(json.emissive);if(json.specular!==undefined)material.specular.setHex(json.specular);if(json.shininess!==undefined)material.shininess=json.shininess;if(json.clearCoat!==undefined)material.clearCoat=json.clearCoat;if(json.clearCoatRoughness!==undefined)material.clearCoatRoughness=json.clearCoatRoughness;if(json.uniforms!==undefined)material.uniforms=json.uniforms;if(json.vertexShader!==undefined)material.vertexShader=json.vertexShader;if(json.fragmentShader!==undefined)material.fragmentShader=json.fragmentShader;if(json.vertexColors!==undefined)material.vertexColors=json.vertexColors;if(json.fog!==undefined)material.fog=json.fog;if(json.shading!==undefined)material.shading=json.shading;if(json.blending!==undefined)material.blending=json.blending;if(json.side!==undefined)material.side=json.side;if(json.opacity!==undefined)material.opacity=json.opacity;if(json.transparent!==undefined)material.transparent=json.transparent;if(json.alphaTest!==undefined)material.alphaTest=json.alphaTest;if(json.depthTest!==undefined)material.depthTest=json.depthTest;if(json.depthWrite!==undefined)material.depthWrite=json.depthWrite;if(json.colorWrite!==undefined)material.colorWrite=json.colorWrite;if(json.wireframe!==undefined)material.wireframe=json.wireframe;if(json.wireframeLinewidth!==undefined)material.wireframeLinewidth=json.wireframeLinewidth;if(json.wireframeLinecap!==undefined)material.wireframeLinecap=json.wireframeLinecap;if(json.wireframeLinejoin!==undefined)material.wireframeLinejoin=json.wireframeLinejoin;if(json.skinning!==undefined)material.skinning=json.skinning;if(json.morphTargets!==undefined)material.morphTargets=json.morphTargets;if(json.size!==undefined)material.size=json.size;if(json.sizeAttenuation!==undefined)material.sizeAttenuation=json.sizeAttenuation;if(json.map!==undefined)material.map=getTexture(json.map);if(json.alphaMap!==undefined){material.alphaMap=getTexture(json.alphaMap);material.transparent=true}if(json.bumpMap!==undefined)material.bumpMap=getTexture(json.bumpMap);if(json.bumpScale!==undefined)material.bumpScale=json.bumpScale;if(json.normalMap!==undefined)material.normalMap=getTexture(json.normalMap);if(json.normalScale!==undefined){var normalScale=json.normalScale;if(Array.isArray(normalScale)===false){normalScale=[normalScale,normalScale]}material.normalScale=(new Vector2).fromArray(normalScale)}if(json.displacementMap!==undefined)material.displacementMap=getTexture(json.displacementMap);if(json.displacementScale!==undefined)material.displacementScale=json.displacementScale;if(json.displacementBias!==undefined)material.displacementBias=json.displacementBias;if(json.roughnessMap!==undefined)material.roughnessMap=getTexture(json.roughnessMap);if(json.metalnessMap!==undefined)material.metalnessMap=getTexture(json.metalnessMap);if(json.emissiveMap!==undefined)material.emissiveMap=getTexture(json.emissiveMap);if(json.emissiveIntensity!==undefined)material.emissiveIntensity=json.emissiveIntensity;if(json.specularMap!==undefined)material.specularMap=getTexture(json.specularMap);if(json.envMap!==undefined)material.envMap=getTexture(json.envMap);if(json.reflectivity!==undefined)material.reflectivity=json.reflectivity;if(json.lightMap!==undefined)material.lightMap=getTexture(json.lightMap);if(json.lightMapIntensity!==undefined)material.lightMapIntensity=json.lightMapIntensity;if(json.aoMap!==undefined)material.aoMap=getTexture(json.aoMap);if(json.aoMapIntensity!==undefined)material.aoMapIntensity=json.aoMapIntensity;if(json.gradientMap!==undefined)material.gradientMap=getTexture(json.gradientMap);return material}});function BufferGeometryLoader(manager){this.manager=manager!==undefined?manager:DefaultLoadingManager}Object.assign(BufferGeometryLoader.prototype,{load:function(url,onLoad,onProgress,onError){var scope=this;var loader=new FileLoader(scope.manager);loader.load(url,function(text){onLoad(scope.parse(JSON.parse(text)))},onProgress,onError)},parse:function(json){var geometry=new BufferGeometry;var index=json.data.index;if(index!==undefined){var typedArray=new TYPED_ARRAYS[index.type](index.array);geometry.setIndex(new BufferAttribute(typedArray,1))}var attributes=json.data.attributes;for(var key in attributes){var attribute=attributes[key];var typedArray=new TYPED_ARRAYS[attribute.type](attribute.array);geometry.addAttribute(key,new BufferAttribute(typedArray,attribute.itemSize,attribute.normalized))}var groups=json.data.groups||json.data.drawcalls||json.data.offsets;if(groups!==undefined){for(var i=0,n=groups.length;i!==n;++i){var group=groups[i];geometry.addGroup(group.start,group.count,group.materialIndex)}}var boundingSphere=json.data.boundingSphere;if(boundingSphere!==undefined){var center=new Vector3;if(boundingSphere.center!==undefined){center.fromArray(boundingSphere.center)}geometry.boundingSphere=new Sphere(center,boundingSphere.radius)}return geometry}});var TYPED_ARRAYS={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:typeof Uint8ClampedArray!=="undefined"?Uint8ClampedArray:Uint8Array,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function Loader(){this.onLoadStart=function(){};this.onLoadProgress=function(){};this.onLoadComplete=function(){}}Loader.Handlers={handlers:[],add:function(regex,loader){this.handlers.push(regex,loader)},get:function(file){var handlers=this.handlers;for(var i=0,l=handlers.length;i<l;i+=2){var regex=handlers[i];var loader=handlers[i+1];if(regex.test(file)){return loader}}return null}};Object.assign(Loader.prototype,{crossOrigin:undefined,extractUrlBase:function(url){var parts=url.split("/");if(parts.length===1)return"./";parts.pop();return parts.join("/")+"/"},initMaterials:function(materials,texturePath,crossOrigin){var array=[];for(var i=0;i<materials.length;++i){array[i]=this.createMaterial(materials[i],texturePath,crossOrigin)}return array},createMaterial:function(){var BlendingMode={NoBlending:NoBlending,NormalBlending:NormalBlending,AdditiveBlending:AdditiveBlending,SubtractiveBlending:SubtractiveBlending,MultiplyBlending:MultiplyBlending,CustomBlending:CustomBlending};var color=new Color;var textureLoader=new TextureLoader;var materialLoader=new MaterialLoader;return function createMaterial(m,texturePath,crossOrigin){var textures={};function loadTexture(path,repeat,offset,wrap,anisotropy){var fullPath=texturePath+path;var loader=Loader.Handlers.get(fullPath);var texture;if(loader!==null){texture=loader.load(fullPath)}else{textureLoader.setCrossOrigin(crossOrigin);texture=textureLoader.load(fullPath)}if(repeat!==undefined){texture.repeat.fromArray(repeat);if(repeat[0]!==1)texture.wrapS=RepeatWrapping;if(repeat[1]!==1)texture.wrapT=RepeatWrapping}if(offset!==undefined){texture.offset.fromArray(offset)}if(wrap!==undefined){if(wrap[0]==="repeat")texture.wrapS=RepeatWrapping;if(wrap[0]==="mirror")texture.wrapS=MirroredRepeatWrapping;if(wrap[1]==="repeat")texture.wrapT=RepeatWrapping;if(wrap[1]==="mirror")texture.wrapT=MirroredRepeatWrapping}if(anisotropy!==undefined){texture.anisotropy=anisotropy}var uuid=_Math.generateUUID();textures[uuid]=texture;return uuid}var json={uuid:_Math.generateUUID(),type:"MeshLambertMaterial"};for(var name in m){var value=m[name];switch(name){case"DbgColor":case"DbgIndex":case"opticalDensity":case"illumination":break;case"DbgName":json.name=value;break;case"blending":json.blending=BlendingMode[value];break;case"colorAmbient":case"mapAmbient":console.warn("THREE.Loader.createMaterial:",name,"is no longer supported.");break;case"colorDiffuse":json.color=color.fromArray(value).getHex();break;case"colorSpecular":json.specular=color.fromArray(value).getHex();break;case"colorEmissive":json.emissive=color.fromArray(value).getHex();break;case"specularCoef":json.shininess=value;break;case"shading":if(value.toLowerCase()==="basic")json.type="MeshBasicMaterial";if(value.toLowerCase()==="phong")json.type="MeshPhongMaterial";if(value.toLowerCase()==="standard")json.type="MeshStandardMaterial";break;case"mapDiffuse":json.map=loadTexture(value,m.mapDiffuseRepeat,m.mapDiffuseOffset,m.mapDiffuseWrap,m.mapDiffuseAnisotropy);break;case"mapDiffuseRepeat":case"mapDiffuseOffset":case"mapDiffuseWrap":case"mapDiffuseAnisotropy":break;case"mapEmissive":json.emissiveMap=loadTexture(value,m.mapEmissiveRepeat,m.mapEmissiveOffset,m.mapEmissiveWrap,m.mapEmissiveAnisotropy);break;case"mapEmissiveRepeat":case"mapEmissiveOffset":case"mapEmissiveWrap":case"mapEmissiveAnisotropy":break;case"mapLight":json.lightMap=loadTexture(value,m.mapLightRepeat,m.mapLightOffset,m.mapLightWrap,m.mapLightAnisotropy);break;case"mapLightRepeat":case"mapLightOffset":case"mapLightWrap":case"mapLightAnisotropy":break;case"mapAO":json.aoMap=loadTexture(value,m.mapAORepeat,m.mapAOOffset,m.mapAOWrap,m.mapAOAnisotropy);break;case"mapAORepeat":case"mapAOOffset":case"mapAOWrap":case"mapAOAnisotropy":break;case"mapBump":json.bumpMap=loadTexture(value,m.mapBumpRepeat,m.mapBumpOffset,m.mapBumpWrap,m.mapBumpAnisotropy);break;case"mapBumpScale":json.bumpScale=value;break;case"mapBumpRepeat":case"mapBumpOffset":case"mapBumpWrap":case"mapBumpAnisotropy":break;case"mapNormal":json.normalMap=loadTexture(value,m.mapNormalRepeat,m.mapNormalOffset,m.mapNormalWrap,m.mapNormalAnisotropy);break;case"mapNormalFactor":json.normalScale=[value,value];break;case"mapNormalRepeat":case"mapNormalOffset":case"mapNormalWrap":case"mapNormalAnisotropy":break;case"mapSpecular":json.specularMap=loadTexture(value,m.mapSpecularRepeat,m.mapSpecularOffset,m.mapSpecularWrap,m.mapSpecularAnisotropy);break;case"mapSpecularRepeat":case"mapSpecularOffset":case"mapSpecularWrap":case"mapSpecularAnisotropy":break;case"mapMetalness":json.metalnessMap=loadTexture(value,m.mapMetalnessRepeat,m.mapMetalnessOffset,m.mapMetalnessWrap,m.mapMetalnessAnisotropy);break;case"mapMetalnessRepeat":case"mapMetalnessOffset":case"mapMetalnessWrap":case"mapMetalnessAnisotropy":break;case"mapRoughness":json.roughnessMap=loadTexture(value,m.mapRoughnessRepeat,m.mapRoughnessOffset,m.mapRoughnessWrap,m.mapRoughnessAnisotropy);break;case"mapRoughnessRepeat":case"mapRoughnessOffset":case"mapRoughnessWrap":case"mapRoughnessAnisotropy":break;case"mapAlpha":json.alphaMap=loadTexture(value,m.mapAlphaRepeat,m.mapAlphaOffset,m.mapAlphaWrap,m.mapAlphaAnisotropy);break;case"mapAlphaRepeat":case"mapAlphaOffset":case"mapAlphaWrap":case"mapAlphaAnisotropy":break;case"flipSided":json.side=BackSide;break;case"doubleSided":json.side=DoubleSide;break;case"transparency":console.warn("THREE.Loader.createMaterial: transparency has been renamed to opacity");json.opacity=value;break;case"depthTest":case"depthWrite":case"colorWrite":case"opacity":case"reflectivity":case"transparent":case"visible":case"wireframe":json[name]=value;break;case"vertexColors":if(value===true)json.vertexColors=VertexColors;if(value==="face")json.vertexColors=FaceColors;break;default:console.error("THREE.Loader.createMaterial: Unsupported",name,value);break}}if(json.type==="MeshBasicMaterial")delete json.emissive;if(json.type!=="MeshPhongMaterial")delete json.specular;if(json.opacity<1)json.transparent=true;materialLoader.setTextures(textures);return materialLoader.parse(json)}}()});function JSONLoader(manager){if(typeof manager==="boolean"){console.warn("THREE.JSONLoader: showStatus parameter has been removed from constructor.");manager=undefined}this.manager=manager!==undefined?manager:DefaultLoadingManager;this.withCredentials=false}Object.assign(JSONLoader.prototype,{load:function(url,onLoad,onProgress,onError){var scope=this;var texturePath=this.texturePath&&typeof this.texturePath==="string"?this.texturePath:Loader.prototype.extractUrlBase(url);var loader=new FileLoader(this.manager);loader.setWithCredentials(this.withCredentials);loader.load(url,function(text){var json=JSON.parse(text);var metadata=json.metadata;if(metadata!==undefined){var type=metadata.type;if(type!==undefined){if(type.toLowerCase()==="object"){console.error("THREE.JSONLoader: "+url+" should be loaded with THREE.ObjectLoader instead.");return}if(type.toLowerCase()==="scene"){console.error("THREE.JSONLoader: "+url+" should be loaded with THREE.SceneLoader instead.");return}}}var object=scope.parse(json,texturePath);onLoad(object.geometry,object.materials)},onProgress,onError)},setTexturePath:function(value){this.texturePath=value},parse:function(){function parseModel(json,geometry){function isBitSet(value,position){return value&1<<position}var i,j,fi,offset,zLength,colorIndex,normalIndex,uvIndex,materialIndex,type,isQuad,hasMaterial,hasFaceVertexUv,hasFaceNormal,hasFaceVertexNormal,hasFaceColor,hasFaceVertexColor,vertex,face,faceA,faceB,hex,normal,uvLayer,uv,u,v,faces=json.faces,vertices=json.vertices,normals=json.normals,colors=json.colors,scale=json.scale,nUvLayers=0;if(json.uvs!==undefined){for(i=0;i<json.uvs.length;i++){if(json.uvs[i].length)nUvLayers++}for(i=0;i<nUvLayers;i++){geometry.faceVertexUvs[i]=[]}}offset=0;zLength=vertices.length;while(offset<zLength){vertex=new Vector3;vertex.x=vertices[offset++]*scale;vertex.y=vertices[offset++]*scale;vertex.z=vertices[offset++]*scale;geometry.vertices.push(vertex)}offset=0;zLength=faces.length;while(offset<zLength){type=faces[offset++];isQuad=isBitSet(type,0);hasMaterial=isBitSet(type,1);hasFaceVertexUv=isBitSet(type,3);hasFaceNormal=isBitSet(type,4);hasFaceVertexNormal=isBitSet(type,5);hasFaceColor=isBitSet(type,6);hasFaceVertexColor=isBitSet(type,7);if(isQuad){faceA=new Face3;faceA.a=faces[offset];faceA.b=faces[offset+1];faceA.c=faces[offset+3];faceB=new Face3;faceB.a=faces[offset+1];faceB.b=faces[offset+2];faceB.c=faces[offset+3];offset+=4;if(hasMaterial){materialIndex=faces[offset++];faceA.materialIndex=materialIndex;faceB.materialIndex=materialIndex}fi=geometry.faces.length;if(hasFaceVertexUv){for(i=0;i<nUvLayers;i++){uvLayer=json.uvs[i];geometry.faceVertexUvs[i][fi]=[];geometry.faceVertexUvs[i][fi+1]=[];for(j=0;j<4;j++){uvIndex=faces[offset++];u=uvLayer[uvIndex*2];v=uvLayer[uvIndex*2+1];uv=new Vector2(u,v);if(j!==2)geometry.faceVertexUvs[i][fi].push(uv);if(j!==0)geometry.faceVertexUvs[i][fi+1].push(uv)}}}if(hasFaceNormal){normalIndex=faces[offset++]*3;faceA.normal.set(normals[normalIndex++],normals[normalIndex++],normals[normalIndex]);faceB.normal.copy(faceA.normal)}if(hasFaceVertexNormal){for(i=0;i<4;i++){normalIndex=faces[offset++]*3;normal=new Vector3(normals[normalIndex++],normals[normalIndex++],normals[normalIndex]);if(i!==2)faceA.vertexNormals.push(normal);if(i!==0)faceB.vertexNormals.push(normal)}}if(hasFaceColor){colorIndex=faces[offset++];hex=colors[colorIndex];faceA.color.setHex(hex);faceB.color.setHex(hex)}if(hasFaceVertexColor){for(i=0;i<4;i++){colorIndex=faces[offset++];hex=colors[colorIndex];if(i!==2)faceA.vertexColors.push(new Color(hex));if(i!==0)faceB.vertexColors.push(new Color(hex))}}geometry.faces.push(faceA);geometry.faces.push(faceB)}else{face=new Face3;face.a=faces[offset++];face.b=faces[offset++];face.c=faces[offset++];if(hasMaterial){materialIndex=faces[offset++];face.materialIndex=materialIndex}fi=geometry.faces.length;if(hasFaceVertexUv){for(i=0;i<nUvLayers;i++){uvLayer=json.uvs[i];geometry.faceVertexUvs[i][fi]=[];for(j=0;j<3;j++){uvIndex=faces[offset++];u=uvLayer[uvIndex*2];v=uvLayer[uvIndex*2+1];uv=new Vector2(u,v);geometry.faceVertexUvs[i][fi].push(uv)}}}if(hasFaceNormal){normalIndex=faces[offset++]*3;face.normal.set(normals[normalIndex++],normals[normalIndex++],normals[normalIndex])}if(hasFaceVertexNormal){for(i=0;i<3;i++){normalIndex=faces[offset++]*3;normal=new Vector3(normals[normalIndex++],normals[normalIndex++],normals[normalIndex]);face.vertexNormals.push(normal)}}if(hasFaceColor){colorIndex=faces[offset++];face.color.setHex(colors[colorIndex])}if(hasFaceVertexColor){for(i=0;i<3;i++){colorIndex=faces[offset++];face.vertexColors.push(new Color(colors[colorIndex]))}}geometry.faces.push(face)}}}function parseSkin(json,geometry){var influencesPerVertex=json.influencesPerVertex!==undefined?json.influencesPerVertex:2;if(json.skinWeights){for(var i=0,l=json.skinWeights.length;i<l;i+=influencesPerVertex){var x=json.skinWeights[i];var y=influencesPerVertex>1?json.skinWeights[i+1]:0;var z=influencesPerVertex>2?json.skinWeights[i+2]:0;var w=influencesPerVertex>3?json.skinWeights[i+3]:0;geometry.skinWeights.push(new Vector4(x,y,z,w))}}if(json.skinIndices){for(var i=0,l=json.skinIndices.length;i<l;i+=influencesPerVertex){var a=json.skinIndices[i];var b=influencesPerVertex>1?json.skinIndices[i+1]:0;var c=influencesPerVertex>2?json.skinIndices[i+2]:0;var d=influencesPerVertex>3?json.skinIndices[i+3]:0;geometry.skinIndices.push(new Vector4(a,b,c,d))}}geometry.bones=json.bones;if(geometry.bones&&geometry.bones.length>0&&(geometry.skinWeights.length!==geometry.skinIndices.length||geometry.skinIndices.length!==geometry.vertices.length)){console.warn("When skinning, number of vertices ("+geometry.vertices.length+"), skinIndices ("+geometry.skinIndices.length+"), and skinWeights ("+geometry.skinWeights.length+") should match.")}}function parseMorphing(json,geometry){var scale=json.scale;if(json.morphTargets!==undefined){for(var i=0,l=json.morphTargets.length;i<l;i++){geometry.morphTargets[i]={};geometry.morphTargets[i].name=json.morphTargets[i].name;geometry.morphTargets[i].vertices=[];var dstVertices=geometry.morphTargets[i].vertices;var srcVertices=json.morphTargets[i].vertices;for(var v=0,vl=srcVertices.length;v<vl;v+=3){var vertex=new Vector3;vertex.x=srcVertices[v]*scale;vertex.y=srcVertices[v+1]*scale;vertex.z=srcVertices[v+2]*scale;dstVertices.push(vertex)}}}if(json.morphColors!==undefined&&json.morphColors.length>0){console.warn('THREE.JSONLoader: "morphColors" no longer supported. Using them as face colors.');var faces=geometry.faces;var morphColors=json.morphColors[0].colors;for(var i=0,l=faces.length;i<l;i++){faces[i].color.fromArray(morphColors,i*3)}}}function parseAnimations(json,geometry){var outputAnimations=[];var animations=[];if(json.animation!==undefined){animations.push(json.animation)}if(json.animations!==undefined){if(json.animations.length){animations=animations.concat(json.animations)}else{animations.push(json.animations)}}for(var i=0;i<animations.length;i++){var clip=AnimationClip.parseAnimation(animations[i],geometry.bones);if(clip)outputAnimations.push(clip)}if(geometry.morphTargets){var morphAnimationClips=AnimationClip.CreateClipsFromMorphTargetSequences(geometry.morphTargets,10);outputAnimations=outputAnimations.concat(morphAnimationClips)}if(outputAnimations.length>0)geometry.animations=outputAnimations}return function(json,texturePath){if(json.data!==undefined){json=json.data}if(json.scale!==undefined){json.scale=1/json.scale}else{json.scale=1}var geometry=new Geometry;parseModel(json,geometry);parseSkin(json,geometry);parseMorphing(json,geometry);parseAnimations(json,geometry);geometry.computeFaceNormals();geometry.computeBoundingSphere();if(json.materials===undefined||json.materials.length===0){return{geometry:geometry}}else{var materials=Loader.prototype.initMaterials(json.materials,texturePath,this.crossOrigin);return{geometry:geometry,materials:materials}}}}()});function ObjectLoader(manager){this.manager=manager!==undefined?manager:DefaultLoadingManager;this.texturePath=""}Object.assign(ObjectLoader.prototype,{load:function(url,onLoad,onProgress,onError){if(this.texturePath===""){this.texturePath=url.substring(0,url.lastIndexOf("/")+1)}var scope=this;var loader=new FileLoader(scope.manager);loader.load(url,function(text){var json=null;try{json=JSON.parse(text)}catch(error){if(onError!==undefined)onError(error);console.error("THREE:ObjectLoader: Can't parse "+url+".",error.message);return}var metadata=json.metadata;if(metadata===undefined||metadata.type===undefined||metadata.type.toLowerCase()==="geometry"){console.error("THREE.ObjectLoader: Can't load "+url+". Use THREE.JSONLoader instead.");return}scope.parse(json,onLoad)},onProgress,onError)},setTexturePath:function(value){this.texturePath=value},setCrossOrigin:function(value){this.crossOrigin=value},parse:function(json,onLoad){var geometries=this.parseGeometries(json.geometries);var images=this.parseImages(json.images,function(){if(onLoad!==undefined)onLoad(object)});var textures=this.parseTextures(json.textures,images);var materials=this.parseMaterials(json.materials,textures);var object=this.parseObject(json.object,geometries,materials);if(json.animations){object.animations=this.parseAnimations(json.animations)}if(json.images===undefined||json.images.length===0){if(onLoad!==undefined)onLoad(object)}return object},parseGeometries:function(json){var geometries={};if(json!==undefined){var geometryLoader=new JSONLoader;var bufferGeometryLoader=new BufferGeometryLoader;for(var i=0,l=json.length;i<l;i++){var geometry;var data=json[i];switch(data.type){case"PlaneGeometry":case"PlaneBufferGeometry":geometry=new Geometries[data.type](data.width,data.height,data.widthSegments,data.heightSegments);break;case"BoxGeometry":case"BoxBufferGeometry":case"CubeGeometry":geometry=new Geometries[data.type](data.width,data.height,data.depth,data.widthSegments,data.heightSegments,data.depthSegments);break;case"CircleGeometry":case"CircleBufferGeometry":geometry=new Geometries[data.type](data.radius,data.segments,data.thetaStart,data.thetaLength);break;case"CylinderGeometry":case"CylinderBufferGeometry":geometry=new Geometries[data.type](data.radiusTop,data.radiusBottom,data.height,data.radialSegments,data.heightSegments,data.openEnded,data.thetaStart,data.thetaLength);break;case"ConeGeometry":case"ConeBufferGeometry":geometry=new Geometries[data.type](data.radius,data.height,data.radialSegments,data.heightSegments,data.openEnded,data.thetaStart,data.thetaLength);break;case"SphereGeometry":case"SphereBufferGeometry":geometry=new Geometries[data.type](data.radius,data.widthSegments,data.heightSegments,data.phiStart,data.phiLength,data.thetaStart,data.thetaLength);break;case"DodecahedronGeometry":case"IcosahedronGeometry":case"OctahedronGeometry":case"TetrahedronGeometry":geometry=new Geometries[data.type](data.radius,data.detail);break;case"RingGeometry":case"RingBufferGeometry":geometry=new Geometries[data.type](data.innerRadius,data.outerRadius,data.thetaSegments,data.phiSegments,data.thetaStart,data.thetaLength);break;case"TorusGeometry":case"TorusBufferGeometry":geometry=new Geometries[data.type](data.radius,data.tube,data.radialSegments,data.tubularSegments,data.arc);break;case"TorusKnotGeometry":case"TorusKnotBufferGeometry":geometry=new Geometries[data.type](data.radius,data.tube,data.tubularSegments,data.radialSegments,data.p,data.q);break;case"LatheGeometry":case"LatheBufferGeometry":geometry=new Geometries[data.type](data.points,data.segments,data.phiStart,data.phiLength);break;case"BufferGeometry":geometry=bufferGeometryLoader.parse(data);break;case"Geometry":geometry=geometryLoader.parse(data,this.texturePath).geometry;break;default:console.warn('THREE.ObjectLoader: Unsupported geometry type "'+data.type+'"');continue}geometry.uuid=data.uuid;if(data.name!==undefined)geometry.name=data.name;geometries[data.uuid]=geometry}}return geometries},parseMaterials:function(json,textures){var materials={};if(json!==undefined){var loader=new MaterialLoader;loader.setTextures(textures);for(var i=0,l=json.length;i<l;i++){var data=json[i];if(data.type==="MultiMaterial"){var array=[];for(var j=0;j<data.materials.length;j++){array.push(loader.parse(data.materials[j]))}materials[data.uuid]=array}else{materials[data.uuid]=loader.parse(data)}}}return materials},parseAnimations:function(json){var animations=[];for(var i=0;i<json.length;i++){var clip=AnimationClip.parse(json[i]);animations.push(clip)}return animations},parseImages:function(json,onLoad){var scope=this;var images={};function loadImage(url){scope.manager.itemStart(url);return loader.load(url,function(){scope.manager.itemEnd(url)},undefined,function(){scope.manager.itemEnd(url);scope.manager.itemError(url)})}if(json!==undefined&&json.length>0){var manager=new LoadingManager(onLoad);var loader=new ImageLoader(manager);loader.setCrossOrigin(this.crossOrigin);for(var i=0,l=json.length;i<l;i++){var image=json[i];var path=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(image.url)?image.url:scope.texturePath+image.url;images[image.uuid]=loadImage(path)}}return images},parseTextures:function(json,images){function parseConstant(value,type){if(typeof value==="number")return value;console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.",value);return type[value]}var textures={};if(json!==undefined){for(var i=0,l=json.length;i<l;i++){var data=json[i];if(data.image===undefined){console.warn('THREE.ObjectLoader: No "image" specified for',data.uuid)}if(images[data.image]===undefined){console.warn("THREE.ObjectLoader: Undefined image",data.image)}var texture=new Texture(images[data.image]);texture.needsUpdate=true;texture.uuid=data.uuid;if(data.name!==undefined)texture.name=data.name;if(data.mapping!==undefined)texture.mapping=parseConstant(data.mapping,TEXTURE_MAPPING);if(data.offset!==undefined)texture.offset.fromArray(data.offset);if(data.repeat!==undefined)texture.repeat.fromArray(data.repeat);if(data.wrap!==undefined){texture.wrapS=parseConstant(data.wrap[0],TEXTURE_WRAPPING);texture.wrapT=parseConstant(data.wrap[1],TEXTURE_WRAPPING)}if(data.minFilter!==undefined)texture.minFilter=parseConstant(data.minFilter,TEXTURE_FILTER);if(data.magFilter!==undefined)texture.magFilter=parseConstant(data.magFilter,TEXTURE_FILTER);if(data.anisotropy!==undefined)texture.anisotropy=data.anisotropy;if(data.flipY!==undefined)texture.flipY=data.flipY;textures[data.uuid]=texture}}return textures},parseObject:function(){var matrix=new Matrix4;return function parseObject(data,geometries,materials){var object;function getGeometry(name){if(geometries[name]===undefined){console.warn("THREE.ObjectLoader: Undefined geometry",name)}return geometries[name]}function getMaterial(name){if(name===undefined)return undefined;if(Array.isArray(name)){var array=[];for(var i=0,l=name.length;i<l;i++){var uuid=name[i];if(materials[uuid]===undefined){console.warn("THREE.ObjectLoader: Undefined material",uuid)}array.push(materials[uuid])}return array}if(materials[name]===undefined){console.warn("THREE.ObjectLoader: Undefined material",name)}return materials[name]}switch(data.type){case"Scene":object=new Scene;if(data.background!==undefined){if(Number.isInteger(data.background)){object.background=new Color(data.background)}}if(data.fog!==undefined){if(data.fog.type==="Fog"){object.fog=new Fog(data.fog.color,data.fog.near,data.fog.far)}else if(data.fog.type==="FogExp2"){object.fog=new FogExp2(data.fog.color,data.fog.density)}}break;case"PerspectiveCamera":object=new PerspectiveCamera(data.fov,data.aspect,data.near,data.far);if(data.focus!==undefined)object.focus=data.focus;if(data.zoom!==undefined)object.zoom=data.zoom;if(data.filmGauge!==undefined)object.filmGauge=data.filmGauge;if(data.filmOffset!==undefined)object.filmOffset=data.filmOffset;if(data.view!==undefined)object.view=Object.assign({},data.view);break;case"OrthographicCamera":object=new OrthographicCamera(data.left,data.right,data.top,data.bottom,data.near,data.far);break;case"AmbientLight":object=new AmbientLight(data.color,data.intensity);break;case"DirectionalLight":object=new DirectionalLight(data.color,data.intensity);break;case"PointLight":object=new PointLight(data.color,data.intensity,data.distance,data.decay);break;case"RectAreaLight":object=new RectAreaLight(data.color,data.intensity,data.width,data.height);break;case"SpotLight":object=new SpotLight(data.color,data.intensity,data.distance,data.angle,data.penumbra,data.decay);break;case"HemisphereLight":object=new HemisphereLight(data.color,data.groundColor,data.intensity);break;case"SkinnedMesh":console.warn("THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.");case"Mesh":var geometry=getGeometry(data.geometry);var material=getMaterial(data.material);if(geometry.bones&&geometry.bones.length>0){object=new SkinnedMesh(geometry,material)}else{object=new Mesh(geometry,material)}break;case"LOD":object=new LOD;break;case"Line":object=new Line(getGeometry(data.geometry),getMaterial(data.material),data.mode);break;case"LineLoop":object=new LineLoop(getGeometry(data.geometry),getMaterial(data.material));break;case"LineSegments":object=new LineSegments(getGeometry(data.geometry),getMaterial(data.material));break;case"PointCloud":case"Points":object=new Points(getGeometry(data.geometry),getMaterial(data.material));break;case"Sprite":object=new Sprite(getMaterial(data.material));break;case"Group":object=new Group;break;default:object=new Object3D}object.uuid=data.uuid;if(data.name!==undefined)object.name=data.name;if(data.matrix!==undefined){matrix.fromArray(data.matrix);matrix.decompose(object.position,object.quaternion,object.scale)}else{if(data.position!==undefined)object.position.fromArray(data.position);if(data.rotation!==undefined)object.rotation.fromArray(data.rotation);if(data.quaternion!==undefined)object.quaternion.fromArray(data.quaternion);if(data.scale!==undefined)object.scale.fromArray(data.scale)}if(data.castShadow!==undefined)object.castShadow=data.castShadow;if(data.receiveShadow!==undefined)object.receiveShadow=data.receiveShadow;if(data.shadow){if(data.shadow.bias!==undefined)object.shadow.bias=data.shadow.bias;if(data.shadow.radius!==undefined)object.shadow.radius=data.shadow.radius;if(data.shadow.mapSize!==undefined)object.shadow.mapSize.fromArray(data.shadow.mapSize);if(data.shadow.camera!==undefined)object.shadow.camera=this.parseObject(data.shadow.camera)}if(data.visible!==undefined)object.visible=data.visible;if(data.userData!==undefined)object.userData=data.userData;if(data.children!==undefined){for(var child in data.children){object.add(this.parseObject(data.children[child],geometries,materials))}}if(data.type==="LOD"){var levels=data.levels;for(var l=0;l<levels.length;l++){var level=levels[l];var child=object.getObjectByProperty("uuid",level.object);if(child!==undefined){object.addLevel(child,level.distance)}}}return object}}()});var TEXTURE_MAPPING={UVMapping:UVMapping,CubeReflectionMapping:CubeReflectionMapping,CubeRefractionMapping:CubeRefractionMapping,EquirectangularReflectionMapping:EquirectangularReflectionMapping,EquirectangularRefractionMapping:EquirectangularRefractionMapping,SphericalReflectionMapping:SphericalReflectionMapping,CubeUVReflectionMapping:CubeUVReflectionMapping,CubeUVRefractionMapping:CubeUVRefractionMapping};var TEXTURE_WRAPPING={RepeatWrapping:RepeatWrapping,ClampToEdgeWrapping:ClampToEdgeWrapping,MirroredRepeatWrapping:MirroredRepeatWrapping};var TEXTURE_FILTER={NearestFilter:NearestFilter,NearestMipMapNearestFilter:NearestMipMapNearestFilter,NearestMipMapLinearFilter:NearestMipMapLinearFilter,LinearFilter:LinearFilter,LinearMipMapNearestFilter:LinearMipMapNearestFilter,LinearMipMapLinearFilter:LinearMipMapLinearFilter};function CatmullRom(t,p0,p1,p2,p3){var v0=(p2-p0)*.5;var v1=(p3-p1)*.5;var t2=t*t;var t3=t*t2;return(2*p1-2*p2+v0+v1)*t3+(-3*p1+3*p2-2*v0-v1)*t2+v0*t+p1}function QuadraticBezierP0(t,p){var k=1-t;return k*k*p}function QuadraticBezierP1(t,p){return 2*(1-t)*t*p}function QuadraticBezierP2(t,p){return t*t*p}function QuadraticBezier(t,p0,p1,p2){return QuadraticBezierP0(t,p0)+QuadraticBezierP1(t,p1)+QuadraticBezierP2(t,p2)}function CubicBezierP0(t,p){var k=1-t;return k*k*k*p}function CubicBezierP1(t,p){var k=1-t;return 3*k*k*t*p}function CubicBezierP2(t,p){return 3*(1-t)*t*t*p}function CubicBezierP3(t,p){return t*t*t*p}function CubicBezier(t,p0,p1,p2,p3){return CubicBezierP0(t,p0)+CubicBezierP1(t,p1)+CubicBezierP2(t,p2)+CubicBezierP3(t,p3);
}function Curve(){this.arcLengthDivisions=200}Object.assign(Curve.prototype,{getPoint:function(){console.warn("THREE.Curve: .getPoint() not implemented.");return null},getPointAt:function(u){var t=this.getUtoTmapping(u);return this.getPoint(t)},getPoints:function(divisions){if(divisions===undefined)divisions=5;var points=[];for(var d=0;d<=divisions;d++){points.push(this.getPoint(d/divisions))}return points},getSpacedPoints:function(divisions){if(divisions===undefined)divisions=5;var points=[];for(var d=0;d<=divisions;d++){points.push(this.getPointAt(d/divisions))}return points},getLength:function(){var lengths=this.getLengths();return lengths[lengths.length-1]},getLengths:function(divisions){if(divisions===undefined)divisions=this.arcLengthDivisions;if(this.cacheArcLengths&&this.cacheArcLengths.length===divisions+1&&!this.needsUpdate){return this.cacheArcLengths}this.needsUpdate=false;var cache=[];var current,last=this.getPoint(0);var p,sum=0;cache.push(0);for(p=1;p<=divisions;p++){current=this.getPoint(p/divisions);sum+=current.distanceTo(last);cache.push(sum);last=current}this.cacheArcLengths=cache;return cache},updateArcLengths:function(){this.needsUpdate=true;this.getLengths()},getUtoTmapping:function(u,distance){var arcLengths=this.getLengths();var i=0,il=arcLengths.length;var targetArcLength;if(distance){targetArcLength=distance}else{targetArcLength=u*arcLengths[il-1]}var low=0,high=il-1,comparison;while(low<=high){i=Math.floor(low+(high-low)/2);comparison=arcLengths[i]-targetArcLength;if(comparison<0){low=i+1}else if(comparison>0){high=i-1}else{high=i;break}}i=high;if(arcLengths[i]===targetArcLength){return i/(il-1)}var lengthBefore=arcLengths[i];var lengthAfter=arcLengths[i+1];var segmentLength=lengthAfter-lengthBefore;var segmentFraction=(targetArcLength-lengthBefore)/segmentLength;var t=(i+segmentFraction)/(il-1);return t},getTangent:function(t){var delta=1e-4;var t1=t-delta;var t2=t+delta;if(t1<0)t1=0;if(t2>1)t2=1;var pt1=this.getPoint(t1);var pt2=this.getPoint(t2);var vec=pt2.clone().sub(pt1);return vec.normalize()},getTangentAt:function(u){var t=this.getUtoTmapping(u);return this.getTangent(t)},computeFrenetFrames:function(segments,closed){var normal=new Vector3;var tangents=[];var normals=[];var binormals=[];var vec=new Vector3;var mat=new Matrix4;var i,u,theta;for(i=0;i<=segments;i++){u=i/segments;tangents[i]=this.getTangentAt(u);tangents[i].normalize()}normals[0]=new Vector3;binormals[0]=new Vector3;var min=Number.MAX_VALUE;var tx=Math.abs(tangents[0].x);var ty=Math.abs(tangents[0].y);var tz=Math.abs(tangents[0].z);if(tx<=min){min=tx;normal.set(1,0,0)}if(ty<=min){min=ty;normal.set(0,1,0)}if(tz<=min){normal.set(0,0,1)}vec.crossVectors(tangents[0],normal).normalize();normals[0].crossVectors(tangents[0],vec);binormals[0].crossVectors(tangents[0],normals[0]);for(i=1;i<=segments;i++){normals[i]=normals[i-1].clone();binormals[i]=binormals[i-1].clone();vec.crossVectors(tangents[i-1],tangents[i]);if(vec.length()>Number.EPSILON){vec.normalize();theta=Math.acos(_Math.clamp(tangents[i-1].dot(tangents[i]),-1,1));normals[i].applyMatrix4(mat.makeRotationAxis(vec,theta))}binormals[i].crossVectors(tangents[i],normals[i])}if(closed===true){theta=Math.acos(_Math.clamp(normals[0].dot(normals[segments]),-1,1));theta/=segments;if(tangents[0].dot(vec.crossVectors(normals[0],normals[segments]))>0){theta=-theta}for(i=1;i<=segments;i++){normals[i].applyMatrix4(mat.makeRotationAxis(tangents[i],theta*i));binormals[i].crossVectors(tangents[i],normals[i])}}return{tangents:tangents,normals:normals,binormals:binormals}}});function LineCurve(v1,v2){Curve.call(this);this.v1=v1;this.v2=v2}LineCurve.prototype=Object.create(Curve.prototype);LineCurve.prototype.constructor=LineCurve;LineCurve.prototype.isLineCurve=true;LineCurve.prototype.getPoint=function(t){if(t===1){return this.v2.clone()}var point=this.v2.clone().sub(this.v1);point.multiplyScalar(t).add(this.v1);return point};LineCurve.prototype.getPointAt=function(u){return this.getPoint(u)};LineCurve.prototype.getTangent=function(t){var tangent=this.v2.clone().sub(this.v1);return tangent.normalize()};function CurvePath(){Curve.call(this);this.curves=[];this.autoClose=false}CurvePath.prototype=Object.assign(Object.create(Curve.prototype),{constructor:CurvePath,add:function(curve){this.curves.push(curve)},closePath:function(){var startPoint=this.curves[0].getPoint(0);var endPoint=this.curves[this.curves.length-1].getPoint(1);if(!startPoint.equals(endPoint)){this.curves.push(new LineCurve(endPoint,startPoint))}},getPoint:function(t){var d=t*this.getLength();var curveLengths=this.getCurveLengths();var i=0;while(i<curveLengths.length){if(curveLengths[i]>=d){var diff=curveLengths[i]-d;var curve=this.curves[i];var segmentLength=curve.getLength();var u=segmentLength===0?0:1-diff/segmentLength;return curve.getPointAt(u)}i++}return null},getLength:function(){var lens=this.getCurveLengths();return lens[lens.length-1]},updateArcLengths:function(){this.needsUpdate=true;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length){return this.cacheLengths}var lengths=[],sums=0;for(var i=0,l=this.curves.length;i<l;i++){sums+=this.curves[i].getLength();lengths.push(sums)}this.cacheLengths=lengths;return lengths},getSpacedPoints:function(divisions){if(divisions===undefined)divisions=40;var points=[];for(var i=0;i<=divisions;i++){points.push(this.getPoint(i/divisions))}if(this.autoClose){points.push(points[0])}return points},getPoints:function(divisions){divisions=divisions||12;var points=[],last;for(var i=0,curves=this.curves;i<curves.length;i++){var curve=curves[i];var resolution=curve&&curve.isEllipseCurve?divisions*2:curve&&curve.isLineCurve?1:curve&&curve.isSplineCurve?divisions*curve.points.length:divisions;var pts=curve.getPoints(resolution);for(var j=0;j<pts.length;j++){var point=pts[j];if(last&&last.equals(point))continue;points.push(point);last=point}}if(this.autoClose&&points.length>1&&!points[points.length-1].equals(points[0])){points.push(points[0])}return points},createPointsGeometry:function(divisions){var pts=this.getPoints(divisions);return this.createGeometry(pts)},createSpacedPointsGeometry:function(divisions){var pts=this.getSpacedPoints(divisions);return this.createGeometry(pts)},createGeometry:function(points){var geometry=new Geometry;for(var i=0,l=points.length;i<l;i++){var point=points[i];geometry.vertices.push(new Vector3(point.x,point.y,point.z||0))}return geometry}});function EllipseCurve(aX,aY,xRadius,yRadius,aStartAngle,aEndAngle,aClockwise,aRotation){Curve.call(this);this.aX=aX;this.aY=aY;this.xRadius=xRadius;this.yRadius=yRadius;this.aStartAngle=aStartAngle;this.aEndAngle=aEndAngle;this.aClockwise=aClockwise;this.aRotation=aRotation||0}EllipseCurve.prototype=Object.create(Curve.prototype);EllipseCurve.prototype.constructor=EllipseCurve;EllipseCurve.prototype.isEllipseCurve=true;EllipseCurve.prototype.getPoint=function(t){var twoPi=Math.PI*2;var deltaAngle=this.aEndAngle-this.aStartAngle;var samePoints=Math.abs(deltaAngle)<Number.EPSILON;while(deltaAngle<0)deltaAngle+=twoPi;while(deltaAngle>twoPi)deltaAngle-=twoPi;if(deltaAngle<Number.EPSILON){if(samePoints){deltaAngle=0}else{deltaAngle=twoPi}}if(this.aClockwise===true&&!samePoints){if(deltaAngle===twoPi){deltaAngle=-twoPi}else{deltaAngle=deltaAngle-twoPi}}var angle=this.aStartAngle+t*deltaAngle;var x=this.aX+this.xRadius*Math.cos(angle);var y=this.aY+this.yRadius*Math.sin(angle);if(this.aRotation!==0){var cos=Math.cos(this.aRotation);var sin=Math.sin(this.aRotation);var tx=x-this.aX;var ty=y-this.aY;x=tx*cos-ty*sin+this.aX;y=tx*sin+ty*cos+this.aY}return new Vector2(x,y)};function SplineCurve(points){Curve.call(this);this.points=points===undefined?[]:points}SplineCurve.prototype=Object.create(Curve.prototype);SplineCurve.prototype.constructor=SplineCurve;SplineCurve.prototype.isSplineCurve=true;SplineCurve.prototype.getPoint=function(t){var points=this.points;var point=(points.length-1)*t;var intPoint=Math.floor(point);var weight=point-intPoint;var point0=points[intPoint===0?intPoint:intPoint-1];var point1=points[intPoint];var point2=points[intPoint>points.length-2?points.length-1:intPoint+1];var point3=points[intPoint>points.length-3?points.length-1:intPoint+2];return new Vector2(CatmullRom(weight,point0.x,point1.x,point2.x,point3.x),CatmullRom(weight,point0.y,point1.y,point2.y,point3.y))};function CubicBezierCurve(v0,v1,v2,v3){Curve.call(this);this.v0=v0;this.v1=v1;this.v2=v2;this.v3=v3}CubicBezierCurve.prototype=Object.create(Curve.prototype);CubicBezierCurve.prototype.constructor=CubicBezierCurve;CubicBezierCurve.prototype.getPoint=function(t){var v0=this.v0,v1=this.v1,v2=this.v2,v3=this.v3;return new Vector2(CubicBezier(t,v0.x,v1.x,v2.x,v3.x),CubicBezier(t,v0.y,v1.y,v2.y,v3.y))};function QuadraticBezierCurve(v0,v1,v2){Curve.call(this);this.v0=v0;this.v1=v1;this.v2=v2}QuadraticBezierCurve.prototype=Object.create(Curve.prototype);QuadraticBezierCurve.prototype.constructor=QuadraticBezierCurve;QuadraticBezierCurve.prototype.getPoint=function(t){var v0=this.v0,v1=this.v1,v2=this.v2;return new Vector2(QuadraticBezier(t,v0.x,v1.x,v2.x),QuadraticBezier(t,v0.y,v1.y,v2.y))};var PathPrototype=Object.assign(Object.create(CurvePath.prototype),{fromPoints:function(vectors){this.moveTo(vectors[0].x,vectors[0].y);for(var i=1,l=vectors.length;i<l;i++){this.lineTo(vectors[i].x,vectors[i].y)}},moveTo:function(x,y){this.currentPoint.set(x,y)},lineTo:function(x,y){var curve=new LineCurve(this.currentPoint.clone(),new Vector2(x,y));this.curves.push(curve);this.currentPoint.set(x,y)},quadraticCurveTo:function(aCPx,aCPy,aX,aY){var curve=new QuadraticBezierCurve(this.currentPoint.clone(),new Vector2(aCPx,aCPy),new Vector2(aX,aY));this.curves.push(curve);this.currentPoint.set(aX,aY)},bezierCurveTo:function(aCP1x,aCP1y,aCP2x,aCP2y,aX,aY){var curve=new CubicBezierCurve(this.currentPoint.clone(),new Vector2(aCP1x,aCP1y),new Vector2(aCP2x,aCP2y),new Vector2(aX,aY));this.curves.push(curve);this.currentPoint.set(aX,aY)},splineThru:function(pts){var npts=[this.currentPoint.clone()].concat(pts);var curve=new SplineCurve(npts);this.curves.push(curve);this.currentPoint.copy(pts[pts.length-1])},arc:function(aX,aY,aRadius,aStartAngle,aEndAngle,aClockwise){var x0=this.currentPoint.x;var y0=this.currentPoint.y;this.absarc(aX+x0,aY+y0,aRadius,aStartAngle,aEndAngle,aClockwise)},absarc:function(aX,aY,aRadius,aStartAngle,aEndAngle,aClockwise){this.absellipse(aX,aY,aRadius,aRadius,aStartAngle,aEndAngle,aClockwise)},ellipse:function(aX,aY,xRadius,yRadius,aStartAngle,aEndAngle,aClockwise,aRotation){var x0=this.currentPoint.x;var y0=this.currentPoint.y;this.absellipse(aX+x0,aY+y0,xRadius,yRadius,aStartAngle,aEndAngle,aClockwise,aRotation)},absellipse:function(aX,aY,xRadius,yRadius,aStartAngle,aEndAngle,aClockwise,aRotation){var curve=new EllipseCurve(aX,aY,xRadius,yRadius,aStartAngle,aEndAngle,aClockwise,aRotation);if(this.curves.length>0){var firstPoint=curve.getPoint(0);if(!firstPoint.equals(this.currentPoint)){this.lineTo(firstPoint.x,firstPoint.y)}}this.curves.push(curve);var lastPoint=curve.getPoint(1);this.currentPoint.copy(lastPoint)}});function Path(points){CurvePath.call(this);this.currentPoint=new Vector2;if(points){this.fromPoints(points)}}Path.prototype=PathPrototype;PathPrototype.constructor=Path;function Shape(){Path.apply(this,arguments);this.holes=[]}Shape.prototype=Object.assign(Object.create(PathPrototype),{constructor:Shape,getPointsHoles:function(divisions){var holesPts=[];for(var i=0,l=this.holes.length;i<l;i++){holesPts[i]=this.holes[i].getPoints(divisions)}return holesPts},extractAllPoints:function(divisions){return{shape:this.getPoints(divisions),holes:this.getPointsHoles(divisions)}},extractPoints:function(divisions){return this.extractAllPoints(divisions)}});function ShapePath(){this.subPaths=[];this.currentPath=null}Object.assign(ShapePath.prototype,{moveTo:function(x,y){this.currentPath=new Path;this.subPaths.push(this.currentPath);this.currentPath.moveTo(x,y)},lineTo:function(x,y){this.currentPath.lineTo(x,y)},quadraticCurveTo:function(aCPx,aCPy,aX,aY){this.currentPath.quadraticCurveTo(aCPx,aCPy,aX,aY)},bezierCurveTo:function(aCP1x,aCP1y,aCP2x,aCP2y,aX,aY){this.currentPath.bezierCurveTo(aCP1x,aCP1y,aCP2x,aCP2y,aX,aY)},splineThru:function(pts){this.currentPath.splineThru(pts)},toShapes:function(isCCW,noHoles){function toShapesNoHoles(inSubpaths){var shapes=[];for(var i=0,l=inSubpaths.length;i<l;i++){var tmpPath=inSubpaths[i];var tmpShape=new Shape;tmpShape.curves=tmpPath.curves;shapes.push(tmpShape)}return shapes}function isPointInsidePolygon(inPt,inPolygon){var polyLen=inPolygon.length;var inside=false;for(var p=polyLen-1,q=0;q<polyLen;p=q++){var edgeLowPt=inPolygon[p];var edgeHighPt=inPolygon[q];var edgeDx=edgeHighPt.x-edgeLowPt.x;var edgeDy=edgeHighPt.y-edgeLowPt.y;if(Math.abs(edgeDy)>Number.EPSILON){if(edgeDy<0){edgeLowPt=inPolygon[q];edgeDx=-edgeDx;edgeHighPt=inPolygon[p];edgeDy=-edgeDy}if(inPt.y<edgeLowPt.y||inPt.y>edgeHighPt.y)continue;if(inPt.y===edgeLowPt.y){if(inPt.x===edgeLowPt.x)return true}else{var perpEdge=edgeDy*(inPt.x-edgeLowPt.x)-edgeDx*(inPt.y-edgeLowPt.y);if(perpEdge===0)return true;if(perpEdge<0)continue;inside=!inside}}else{if(inPt.y!==edgeLowPt.y)continue;if(edgeHighPt.x<=inPt.x&&inPt.x<=edgeLowPt.x||edgeLowPt.x<=inPt.x&&inPt.x<=edgeHighPt.x)return true}}return inside}var isClockWise=ShapeUtils.isClockWise;var subPaths=this.subPaths;if(subPaths.length===0)return[];if(noHoles===true)return toShapesNoHoles(subPaths);var solid,tmpPath,tmpShape,shapes=[];if(subPaths.length===1){tmpPath=subPaths[0];tmpShape=new Shape;tmpShape.curves=tmpPath.curves;shapes.push(tmpShape);return shapes}var holesFirst=!isClockWise(subPaths[0].getPoints());holesFirst=isCCW?!holesFirst:holesFirst;var betterShapeHoles=[];var newShapes=[];var newShapeHoles=[];var mainIdx=0;var tmpPoints;newShapes[mainIdx]=undefined;newShapeHoles[mainIdx]=[];for(var i=0,l=subPaths.length;i<l;i++){tmpPath=subPaths[i];tmpPoints=tmpPath.getPoints();solid=isClockWise(tmpPoints);solid=isCCW?!solid:solid;if(solid){if(!holesFirst&&newShapes[mainIdx])mainIdx++;newShapes[mainIdx]={s:new Shape,p:tmpPoints};newShapes[mainIdx].s.curves=tmpPath.curves;if(holesFirst)mainIdx++;newShapeHoles[mainIdx]=[]}else{newShapeHoles[mainIdx].push({h:tmpPath,p:tmpPoints[0]})}}if(!newShapes[0])return toShapesNoHoles(subPaths);if(newShapes.length>1){var ambiguous=false;var toChange=[];for(var sIdx=0,sLen=newShapes.length;sIdx<sLen;sIdx++){betterShapeHoles[sIdx]=[]}for(var sIdx=0,sLen=newShapes.length;sIdx<sLen;sIdx++){var sho=newShapeHoles[sIdx];for(var hIdx=0;hIdx<sho.length;hIdx++){var ho=sho[hIdx];var hole_unassigned=true;for(var s2Idx=0;s2Idx<newShapes.length;s2Idx++){if(isPointInsidePolygon(ho.p,newShapes[s2Idx].p)){if(sIdx!==s2Idx)toChange.push({froms:sIdx,tos:s2Idx,hole:hIdx});if(hole_unassigned){hole_unassigned=false;betterShapeHoles[s2Idx].push(ho)}else{ambiguous=true}}}if(hole_unassigned){betterShapeHoles[sIdx].push(ho)}}}if(toChange.length>0){if(!ambiguous)newShapeHoles=betterShapeHoles}}var tmpHoles;for(var i=0,il=newShapes.length;i<il;i++){tmpShape=newShapes[i].s;shapes.push(tmpShape);tmpHoles=newShapeHoles[i];for(var j=0,jl=tmpHoles.length;j<jl;j++){tmpShape.holes.push(tmpHoles[j].h)}}return shapes}});function Font(data){this.data=data}Object.assign(Font.prototype,{isFont:true,generateShapes:function(text,size,divisions){function createPaths(text){var chars=String(text).split("");var scale=size/data.resolution;var line_height=(data.boundingBox.yMax-data.boundingBox.yMin+data.underlineThickness)*scale;var offsetX=0,offsetY=0;var paths=[];for(var i=0;i<chars.length;i++){var char=chars[i];if(char==="\n"){offsetX=0;offsetY-=line_height}else{var ret=createPath(char,scale,offsetX,offsetY);offsetX+=ret.offsetX;paths.push(ret.path)}}return paths}function createPath(c,scale,offsetX,offsetY){var glyph=data.glyphs[c]||data.glyphs["?"];if(!glyph)return;var path=new ShapePath;var pts=[];var x,y,cpx,cpy,cpx0,cpy0,cpx1,cpy1,cpx2,cpy2,laste;if(glyph.o){var outline=glyph._cachedOutline||(glyph._cachedOutline=glyph.o.split(" "));for(var i=0,l=outline.length;i<l;){var action=outline[i++];switch(action){case"m":x=outline[i++]*scale+offsetX;y=outline[i++]*scale+offsetY;path.moveTo(x,y);break;case"l":x=outline[i++]*scale+offsetX;y=outline[i++]*scale+offsetY;path.lineTo(x,y);break;case"q":cpx=outline[i++]*scale+offsetX;cpy=outline[i++]*scale+offsetY;cpx1=outline[i++]*scale+offsetX;cpy1=outline[i++]*scale+offsetY;path.quadraticCurveTo(cpx1,cpy1,cpx,cpy);laste=pts[pts.length-1];if(laste){cpx0=laste.x;cpy0=laste.y;for(var i2=1;i2<=divisions;i2++){var t=i2/divisions;QuadraticBezier(t,cpx0,cpx1,cpx);QuadraticBezier(t,cpy0,cpy1,cpy)}}break;case"b":cpx=outline[i++]*scale+offsetX;cpy=outline[i++]*scale+offsetY;cpx1=outline[i++]*scale+offsetX;cpy1=outline[i++]*scale+offsetY;cpx2=outline[i++]*scale+offsetX;cpy2=outline[i++]*scale+offsetY;path.bezierCurveTo(cpx1,cpy1,cpx2,cpy2,cpx,cpy);laste=pts[pts.length-1];if(laste){cpx0=laste.x;cpy0=laste.y;for(var i2=1;i2<=divisions;i2++){var t=i2/divisions;CubicBezier(t,cpx0,cpx1,cpx2,cpx);CubicBezier(t,cpy0,cpy1,cpy2,cpy)}}break}}}return{offsetX:glyph.ha*scale,path:path}}if(size===undefined)size=100;if(divisions===undefined)divisions=4;var data=this.data;var paths=createPaths(text);var shapes=[];for(var p=0,pl=paths.length;p<pl;p++){Array.prototype.push.apply(shapes,paths[p].toShapes())}return shapes}});function FontLoader(manager){this.manager=manager!==undefined?manager:DefaultLoadingManager}Object.assign(FontLoader.prototype,{load:function(url,onLoad,onProgress,onError){var scope=this;var loader=new FileLoader(this.manager);loader.load(url,function(text){var json;try{json=JSON.parse(text)}catch(e){console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.");json=JSON.parse(text.substring(65,text.length-2))}var font=scope.parse(json);if(onLoad)onLoad(font)},onProgress,onError)},parse:function(json){return new Font(json)}});var context;var AudioContext={getContext:function(){if(context===undefined){context=new(window.AudioContext||window.webkitAudioContext)}return context},setContext:function(value){context=value}};function AudioLoader(manager){this.manager=manager!==undefined?manager:DefaultLoadingManager}Object.assign(AudioLoader.prototype,{load:function(url,onLoad,onProgress,onError){var loader=new FileLoader(this.manager);loader.setResponseType("arraybuffer");loader.load(url,function(buffer){var context=AudioContext.getContext();context.decodeAudioData(buffer,function(audioBuffer){onLoad(audioBuffer)})},onProgress,onError)}});function StereoCamera(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new PerspectiveCamera;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=false;this.cameraR=new PerspectiveCamera;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=false}Object.assign(StereoCamera.prototype,{update:function(){var instance,focus,fov,aspect,near,far,zoom,eyeSep;var eyeRight=new Matrix4;var eyeLeft=new Matrix4;return function update(camera){var needsUpdate=instance!==this||focus!==camera.focus||fov!==camera.fov||aspect!==camera.aspect*this.aspect||near!==camera.near||far!==camera.far||zoom!==camera.zoom||eyeSep!==this.eyeSep;if(needsUpdate){instance=this;focus=camera.focus;fov=camera.fov;aspect=camera.aspect*this.aspect;near=camera.near;far=camera.far;zoom=camera.zoom;var projectionMatrix=camera.projectionMatrix.clone();eyeSep=this.eyeSep/2;var eyeSepOnProjection=eyeSep*near/focus;var ymax=near*Math.tan(_Math.DEG2RAD*fov*.5)/zoom;var xmin,xmax;eyeLeft.elements[12]=-eyeSep;eyeRight.elements[12]=eyeSep;xmin=-ymax*aspect+eyeSepOnProjection;xmax=ymax*aspect+eyeSepOnProjection;projectionMatrix.elements[0]=2*near/(xmax-xmin);projectionMatrix.elements[8]=(xmax+xmin)/(xmax-xmin);this.cameraL.projectionMatrix.copy(projectionMatrix);xmin=-ymax*aspect-eyeSepOnProjection;xmax=ymax*aspect-eyeSepOnProjection;projectionMatrix.elements[0]=2*near/(xmax-xmin);projectionMatrix.elements[8]=(xmax+xmin)/(xmax-xmin);this.cameraR.projectionMatrix.copy(projectionMatrix)}this.cameraL.matrixWorld.copy(camera.matrixWorld).multiply(eyeLeft);this.cameraR.matrixWorld.copy(camera.matrixWorld).multiply(eyeRight)}}()});function CubeCamera(near,far,cubeResolution){Object3D.call(this);this.type="CubeCamera";var fov=90,aspect=1;var cameraPX=new PerspectiveCamera(fov,aspect,near,far);cameraPX.up.set(0,-1,0);cameraPX.lookAt(new Vector3(1,0,0));this.add(cameraPX);var cameraNX=new PerspectiveCamera(fov,aspect,near,far);cameraNX.up.set(0,-1,0);cameraNX.lookAt(new Vector3(-1,0,0));this.add(cameraNX);var cameraPY=new PerspectiveCamera(fov,aspect,near,far);cameraPY.up.set(0,0,1);cameraPY.lookAt(new Vector3(0,1,0));this.add(cameraPY);var cameraNY=new PerspectiveCamera(fov,aspect,near,far);cameraNY.up.set(0,0,-1);cameraNY.lookAt(new Vector3(0,-1,0));this.add(cameraNY);var cameraPZ=new PerspectiveCamera(fov,aspect,near,far);cameraPZ.up.set(0,-1,0);cameraPZ.lookAt(new Vector3(0,0,1));this.add(cameraPZ);var cameraNZ=new PerspectiveCamera(fov,aspect,near,far);cameraNZ.up.set(0,-1,0);cameraNZ.lookAt(new Vector3(0,0,-1));this.add(cameraNZ);var options={format:RGBFormat,magFilter:LinearFilter,minFilter:LinearFilter};this.renderTarget=new WebGLRenderTargetCube(cubeResolution,cubeResolution,options);this.renderTarget.texture.name="CubeCamera";this.updateCubeMap=function(renderer,scene){if(this.parent===null)this.updateMatrixWorld();var renderTarget=this.renderTarget;var generateMipmaps=renderTarget.texture.generateMipmaps;renderTarget.texture.generateMipmaps=false;renderTarget.activeCubeFace=0;renderer.render(scene,cameraPX,renderTarget);renderTarget.activeCubeFace=1;renderer.render(scene,cameraNX,renderTarget);renderTarget.activeCubeFace=2;renderer.render(scene,cameraPY,renderTarget);renderTarget.activeCubeFace=3;renderer.render(scene,cameraNY,renderTarget);renderTarget.activeCubeFace=4;renderer.render(scene,cameraPZ,renderTarget);renderTarget.texture.generateMipmaps=generateMipmaps;renderTarget.activeCubeFace=5;renderer.render(scene,cameraNZ,renderTarget);renderer.setRenderTarget(null)}}CubeCamera.prototype=Object.create(Object3D.prototype);CubeCamera.prototype.constructor=CubeCamera;function AudioListener(){Object3D.call(this);this.type="AudioListener";this.context=AudioContext.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null}AudioListener.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:AudioListener,getInput:function(){return this.gain},removeFilter:function(){if(this.filter!==null){this.gain.disconnect(this.filter);this.filter.disconnect(this.context.destination);this.gain.connect(this.context.destination);this.filter=null}},getFilter:function(){return this.filter},setFilter:function(value){if(this.filter!==null){this.gain.disconnect(this.filter);this.filter.disconnect(this.context.destination)}else{this.gain.disconnect(this.context.destination)}this.filter=value;this.gain.connect(this.filter);this.filter.connect(this.context.destination)},getMasterVolume:function(){return this.gain.gain.value},setMasterVolume:function(value){this.gain.gain.value=value},updateMatrixWorld:function(){var position=new Vector3;var quaternion=new Quaternion;var scale=new Vector3;var orientation=new Vector3;return function updateMatrixWorld(force){Object3D.prototype.updateMatrixWorld.call(this,force);var listener=this.context.listener;var up=this.up;this.matrixWorld.decompose(position,quaternion,scale);orientation.set(0,0,-1).applyQuaternion(quaternion);if(listener.positionX){listener.positionX.setValueAtTime(position.x,this.context.currentTime);listener.positionY.setValueAtTime(position.y,this.context.currentTime);listener.positionZ.setValueAtTime(position.z,this.context.currentTime);listener.forwardX.setValueAtTime(orientation.x,this.context.currentTime);listener.forwardY.setValueAtTime(orientation.y,this.context.currentTime);listener.forwardZ.setValueAtTime(orientation.z,this.context.currentTime);listener.upX.setValueAtTime(up.x,this.context.currentTime);listener.upY.setValueAtTime(up.y,this.context.currentTime);listener.upZ.setValueAtTime(up.z,this.context.currentTime)}else{listener.setPosition(position.x,position.y,position.z);listener.setOrientation(orientation.x,orientation.y,orientation.z,up.x,up.y,up.z)}}}()});function Audio(listener){Object3D.call(this);this.type="Audio";this.context=listener.context;this.gain=this.context.createGain();this.gain.connect(listener.getInput());this.autoplay=false;this.buffer=null;this.loop=false;this.startTime=0;this.playbackRate=1;this.isPlaying=false;this.hasPlaybackControl=true;this.sourceType="empty";this.filters=[]}Audio.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Audio,getOutput:function(){return this.gain},setNodeSource:function(audioNode){this.hasPlaybackControl=false;this.sourceType="audioNode";this.source=audioNode;this.connect();return this},setBuffer:function(audioBuffer){this.buffer=audioBuffer;this.sourceType="buffer";if(this.autoplay)this.play();return this},play:function(){if(this.isPlaying===true){console.warn("THREE.Audio: Audio is already playing.");return}if(this.hasPlaybackControl===false){console.warn("THREE.Audio: this Audio has no playback control.");return}var source=this.context.createBufferSource();source.buffer=this.buffer;source.loop=this.loop;source.onended=this.onEnded.bind(this);source.playbackRate.setValueAtTime(this.playbackRate,this.startTime);source.start(0,this.startTime);this.isPlaying=true;this.source=source;return this.connect()},pause:function(){if(this.hasPlaybackControl===false){console.warn("THREE.Audio: this Audio has no playback control.");return}this.source.stop();this.startTime=this.context.currentTime;this.isPlaying=false;return this},stop:function(){if(this.hasPlaybackControl===false){console.warn("THREE.Audio: this Audio has no playback control.");return}this.source.stop();this.startTime=0;this.isPlaying=false;return this},connect:function(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(var i=1,l=this.filters.length;i<l;i++){this.filters[i-1].connect(this.filters[i])}this.filters[this.filters.length-1].connect(this.getOutput())}else{this.source.connect(this.getOutput())}return this},disconnect:function(){if(this.filters.length>0){this.source.disconnect(this.filters[0]);for(var i=1,l=this.filters.length;i<l;i++){this.filters[i-1].disconnect(this.filters[i])}this.filters[this.filters.length-1].disconnect(this.getOutput())}else{this.source.disconnect(this.getOutput())}return this},getFilters:function(){return this.filters},setFilters:function(value){if(!value)value=[];if(this.isPlaying===true){this.disconnect();this.filters=value;this.connect()}else{this.filters=value}return this},getFilter:function(){return this.getFilters()[0]},setFilter:function(filter){return this.setFilters(filter?[filter]:[])},setPlaybackRate:function(value){if(this.hasPlaybackControl===false){console.warn("THREE.Audio: this Audio has no playback control.");return}this.playbackRate=value;if(this.isPlaying===true){this.source.playbackRate.setValueAtTime(this.playbackRate,this.context.currentTime)}return this},getPlaybackRate:function(){return this.playbackRate},onEnded:function(){this.isPlaying=false},getLoop:function(){if(this.hasPlaybackControl===false){console.warn("THREE.Audio: this Audio has no playback control.");return false}return this.loop},setLoop:function(value){if(this.hasPlaybackControl===false){console.warn("THREE.Audio: this Audio has no playback control.");return}this.loop=value;if(this.isPlaying===true){this.source.loop=this.loop}return this},getVolume:function(){return this.gain.gain.value},setVolume:function(value){this.gain.gain.value=value;return this}});function PositionalAudio(listener){Audio.call(this,listener);this.panner=this.context.createPanner();this.panner.connect(this.gain)}PositionalAudio.prototype=Object.assign(Object.create(Audio.prototype),{constructor:PositionalAudio,getOutput:function(){return this.panner},getRefDistance:function(){return this.panner.refDistance},setRefDistance:function(value){this.panner.refDistance=value},getRolloffFactor:function(){return this.panner.rolloffFactor},setRolloffFactor:function(value){this.panner.rolloffFactor=value},getDistanceModel:function(){return this.panner.distanceModel},setDistanceModel:function(value){this.panner.distanceModel=value},getMaxDistance:function(){return this.panner.maxDistance},setMaxDistance:function(value){this.panner.maxDistance=value},updateMatrixWorld:function(){var position=new Vector3;return function updateMatrixWorld(force){Object3D.prototype.updateMatrixWorld.call(this,force);position.setFromMatrixPosition(this.matrixWorld);this.panner.setPosition(position.x,position.y,position.z)}}()});function AudioAnalyser(audio,fftSize){this.analyser=audio.context.createAnalyser();this.analyser.fftSize=fftSize!==undefined?fftSize:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);audio.getOutput().connect(this.analyser)}Object.assign(AudioAnalyser.prototype,{getFrequencyData:function(){this.analyser.getByteFrequencyData(this.data);return this.data},getAverageFrequency:function(){var value=0,data=this.getFrequencyData();for(var i=0;i<data.length;i++){value+=data[i]}return value/data.length}});function PropertyMixer(binding,typeName,valueSize){this.binding=binding;this.valueSize=valueSize;var bufferType=Float64Array,mixFunction;switch(typeName){case"quaternion":mixFunction=this._slerp;break;case"string":case"bool":bufferType=Array;mixFunction=this._select;break;default:mixFunction=this._lerp}this.buffer=new bufferType(valueSize*4);this._mixBufferRegion=mixFunction;this.cumulativeWeight=0;this.useCount=0;this.referenceCount=0}Object.assign(PropertyMixer.prototype,{accumulate:function(accuIndex,weight){var buffer=this.buffer,stride=this.valueSize,offset=accuIndex*stride+stride,currentWeight=this.cumulativeWeight;if(currentWeight===0){for(var i=0;i!==stride;++i){buffer[offset+i]=buffer[i]}currentWeight=weight}else{currentWeight+=weight;var mix=weight/currentWeight;this._mixBufferRegion(buffer,offset,0,mix,stride)}this.cumulativeWeight=currentWeight},apply:function(accuIndex){var stride=this.valueSize,buffer=this.buffer,offset=accuIndex*stride+stride,weight=this.cumulativeWeight,binding=this.binding;this.cumulativeWeight=0;if(weight<1){var originalValueOffset=stride*3;this._mixBufferRegion(buffer,offset,originalValueOffset,1-weight,stride)}for(var i=stride,e=stride+stride;i!==e;++i){if(buffer[i]!==buffer[i+stride]){binding.setValue(buffer,offset);break}}},saveOriginalState:function(){var binding=this.binding;var buffer=this.buffer,stride=this.valueSize,originalValueOffset=stride*3;binding.getValue(buffer,originalValueOffset);for(var i=stride,e=originalValueOffset;i!==e;++i){buffer[i]=buffer[originalValueOffset+i%stride]}this.cumulativeWeight=0},restoreOriginalState:function(){var originalValueOffset=this.valueSize*3;this.binding.setValue(this.buffer,originalValueOffset)},_select:function(buffer,dstOffset,srcOffset,t,stride){if(t>=.5){for(var i=0;i!==stride;++i){buffer[dstOffset+i]=buffer[srcOffset+i]}}},_slerp:function(buffer,dstOffset,srcOffset,t){Quaternion.slerpFlat(buffer,dstOffset,buffer,dstOffset,buffer,srcOffset,t)},_lerp:function(buffer,dstOffset,srcOffset,t,stride){var s=1-t;for(var i=0;i!==stride;++i){var j=dstOffset+i;buffer[j]=buffer[j]*s+buffer[srcOffset+i]*t}}});function Composite(targetGroup,path,optionalParsedPath){var parsedPath=optionalParsedPath||PropertyBinding.parseTrackName(path);this._targetGroup=targetGroup;this._bindings=targetGroup.subscribe_(path,parsedPath)}Object.assign(Composite.prototype,{getValue:function(array,offset){this.bind();var firstValidIndex=this._targetGroup.nCachedObjects_,binding=this._bindings[firstValidIndex];if(binding!==undefined)binding.getValue(array,offset)},setValue:function(array,offset){var bindings=this._bindings;
for(var i=this._targetGroup.nCachedObjects_,n=bindings.length;i!==n;++i){bindings[i].setValue(array,offset)}},bind:function(){var bindings=this._bindings;for(var i=this._targetGroup.nCachedObjects_,n=bindings.length;i!==n;++i){bindings[i].bind()}},unbind:function(){var bindings=this._bindings;for(var i=this._targetGroup.nCachedObjects_,n=bindings.length;i!==n;++i){bindings[i].unbind()}}});function PropertyBinding(rootNode,path,parsedPath){this.path=path;this.parsedPath=parsedPath||PropertyBinding.parseTrackName(path);this.node=PropertyBinding.findNode(rootNode,this.parsedPath.nodeName)||rootNode;this.rootNode=rootNode}Object.assign(PropertyBinding,{Composite:Composite,create:function(root,path,parsedPath){if(!(root&&root.isAnimationObjectGroup)){return new PropertyBinding(root,path,parsedPath)}else{return new PropertyBinding.Composite(root,path,parsedPath)}},sanitizeNodeName:function(name){return name.replace(/\s/g,"_").replace(/[^\w-]/g,"")},parseTrackName:function(){var directoryRe=/((?:[\w-]+[\/:])*)/;var nodeRe=/([\w-\.]+)?/;var objectRe=/(?:\.([\w-]+)(?:\[(.+)\])?)?/;var propertyRe=/\.([\w-]+)(?:\[(.+)\])?/;var trackRe=new RegExp(""+"^"+directoryRe.source+nodeRe.source+objectRe.source+propertyRe.source+"$");var supportedObjectNames=["material","materials","bones"];return function(trackName){var matches=trackRe.exec(trackName);if(!matches){throw new Error("PropertyBinding: Cannot parse trackName: "+trackName)}var results={nodeName:matches[2],objectName:matches[3],objectIndex:matches[4],propertyName:matches[5],propertyIndex:matches[6]};var lastDot=results.nodeName&&results.nodeName.lastIndexOf(".");if(lastDot!==undefined&&lastDot!==-1){var objectName=results.nodeName.substring(lastDot+1);if(supportedObjectNames.indexOf(objectName)!==-1){results.nodeName=results.nodeName.substring(0,lastDot);results.objectName=objectName}}if(results.propertyName===null||results.propertyName.length===0){throw new Error("PropertyBinding: can not parse propertyName from trackName: "+trackName)}return results}}(),findNode:function(root,nodeName){if(!nodeName||nodeName===""||nodeName==="root"||nodeName==="."||nodeName===-1||nodeName===root.name||nodeName===root.uuid){return root}if(root.skeleton){var searchSkeleton=function(skeleton){for(var i=0;i<skeleton.bones.length;i++){var bone=skeleton.bones[i];if(bone.name===nodeName){return bone}}return null};var bone=searchSkeleton(root.skeleton);if(bone){return bone}}if(root.children){var searchNodeSubtree=function(children){for(var i=0;i<children.length;i++){var childNode=children[i];if(childNode.name===nodeName||childNode.uuid===nodeName){return childNode}var result=searchNodeSubtree(childNode.children);if(result)return result}return null};var subTreeNode=searchNodeSubtree(root.children);if(subTreeNode){return subTreeNode}}return null}});Object.assign(PropertyBinding.prototype,{_getValue_unavailable:function(){},_setValue_unavailable:function(){},BindingType:{Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},Versioning:{None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},GetterByBindingType:[function getValue_direct(buffer,offset){buffer[offset]=this.node[this.propertyName]},function getValue_array(buffer,offset){var source=this.resolvedProperty;for(var i=0,n=source.length;i!==n;++i){buffer[offset++]=source[i]}},function getValue_arrayElement(buffer,offset){buffer[offset]=this.resolvedProperty[this.propertyIndex]},function getValue_toArray(buffer,offset){this.resolvedProperty.toArray(buffer,offset)}],SetterByBindingTypeAndVersioning:[[function setValue_direct(buffer,offset){this.node[this.propertyName]=buffer[offset]},function setValue_direct_setNeedsUpdate(buffer,offset){this.node[this.propertyName]=buffer[offset];this.targetObject.needsUpdate=true},function setValue_direct_setMatrixWorldNeedsUpdate(buffer,offset){this.node[this.propertyName]=buffer[offset];this.targetObject.matrixWorldNeedsUpdate=true}],[function setValue_array(buffer,offset){var dest=this.resolvedProperty;for(var i=0,n=dest.length;i!==n;++i){dest[i]=buffer[offset++]}},function setValue_array_setNeedsUpdate(buffer,offset){var dest=this.resolvedProperty;for(var i=0,n=dest.length;i!==n;++i){dest[i]=buffer[offset++]}this.targetObject.needsUpdate=true},function setValue_array_setMatrixWorldNeedsUpdate(buffer,offset){var dest=this.resolvedProperty;for(var i=0,n=dest.length;i!==n;++i){dest[i]=buffer[offset++]}this.targetObject.matrixWorldNeedsUpdate=true}],[function setValue_arrayElement(buffer,offset){this.resolvedProperty[this.propertyIndex]=buffer[offset]},function setValue_arrayElement_setNeedsUpdate(buffer,offset){this.resolvedProperty[this.propertyIndex]=buffer[offset];this.targetObject.needsUpdate=true},function setValue_arrayElement_setMatrixWorldNeedsUpdate(buffer,offset){this.resolvedProperty[this.propertyIndex]=buffer[offset];this.targetObject.matrixWorldNeedsUpdate=true}],[function setValue_fromArray(buffer,offset){this.resolvedProperty.fromArray(buffer,offset)},function setValue_fromArray_setNeedsUpdate(buffer,offset){this.resolvedProperty.fromArray(buffer,offset);this.targetObject.needsUpdate=true},function setValue_fromArray_setMatrixWorldNeedsUpdate(buffer,offset){this.resolvedProperty.fromArray(buffer,offset);this.targetObject.matrixWorldNeedsUpdate=true}]],getValue:function getValue_unbound(targetArray,offset){this.bind();this.getValue(targetArray,offset)},setValue:function getValue_unbound(sourceArray,offset){this.bind();this.setValue(sourceArray,offset)},bind:function(){var targetObject=this.node,parsedPath=this.parsedPath,objectName=parsedPath.objectName,propertyName=parsedPath.propertyName,propertyIndex=parsedPath.propertyIndex;if(!targetObject){targetObject=PropertyBinding.findNode(this.rootNode,parsedPath.nodeName)||this.rootNode;this.node=targetObject}this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(!targetObject){console.error("THREE.PropertyBinding: Trying to update node for track: "+this.path+" but it wasn't found.");return}if(objectName){var objectIndex=parsedPath.objectIndex;switch(objectName){case"materials":if(!targetObject.material){console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!targetObject.material.materials){console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.",this);return}targetObject=targetObject.material.materials;break;case"bones":if(!targetObject.skeleton){console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.",this);return}targetObject=targetObject.skeleton.bones;for(var i=0;i<targetObject.length;i++){if(targetObject[i].name===objectIndex){objectIndex=i;break}}break;default:if(targetObject[objectName]===undefined){console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.",this);return}targetObject=targetObject[objectName]}if(objectIndex!==undefined){if(targetObject[objectIndex]===undefined){console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.",this,targetObject);return}targetObject=targetObject[objectIndex]}}var nodeProperty=targetObject[propertyName];if(nodeProperty===undefined){var nodeName=parsedPath.nodeName;console.error("THREE.PropertyBinding: Trying to update property for track: "+nodeName+"."+propertyName+" but it wasn't found.",targetObject);return}var versioning=this.Versioning.None;if(targetObject.needsUpdate!==undefined){versioning=this.Versioning.NeedsUpdate;this.targetObject=targetObject}else if(targetObject.matrixWorldNeedsUpdate!==undefined){versioning=this.Versioning.MatrixWorldNeedsUpdate;this.targetObject=targetObject}var bindingType=this.BindingType.Direct;if(propertyIndex!==undefined){if(propertyName==="morphTargetInfluences"){if(!targetObject.geometry){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.",this);return}if(targetObject.geometry.isBufferGeometry){if(!targetObject.geometry.morphAttributes){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.",this);return}for(var i=0;i<this.node.geometry.morphAttributes.position.length;i++){if(targetObject.geometry.morphAttributes.position[i].name===propertyIndex){propertyIndex=i;break}}}else{if(!targetObject.geometry.morphTargets){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.",this);return}for(var i=0;i<this.node.geometry.morphTargets.length;i++){if(targetObject.geometry.morphTargets[i].name===propertyIndex){propertyIndex=i;break}}}}bindingType=this.BindingType.ArrayElement;this.resolvedProperty=nodeProperty;this.propertyIndex=propertyIndex}else if(nodeProperty.fromArray!==undefined&&nodeProperty.toArray!==undefined){bindingType=this.BindingType.HasFromToArray;this.resolvedProperty=nodeProperty}else if(Array.isArray(nodeProperty)){bindingType=this.BindingType.EntireArray;this.resolvedProperty=nodeProperty}else{this.propertyName=propertyName}this.getValue=this.GetterByBindingType[bindingType];this.setValue=this.SetterByBindingTypeAndVersioning[bindingType][versioning]},unbind:function(){this.node=null;this.getValue=this._getValue_unbound;this.setValue=this._setValue_unbound}});Object.assign(PropertyBinding.prototype,{_getValue_unbound:PropertyBinding.prototype.getValue,_setValue_unbound:PropertyBinding.prototype.setValue});function AnimationObjectGroup(var_args){this.uuid=_Math.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var indices={};this._indicesByUUID=indices;for(var i=0,n=arguments.length;i!==n;++i){indices[arguments[i].uuid]=i}this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var scope=this;this.stats={objects:{get total(){return scope._objects.length},get inUse(){return this.total-scope.nCachedObjects_}},get bindingsPerObject(){return scope._bindings.length}}}Object.assign(AnimationObjectGroup.prototype,{isAnimationObjectGroup:true,add:function(var_args){var objects=this._objects,nObjects=objects.length,nCachedObjects=this.nCachedObjects_,indicesByUUID=this._indicesByUUID,paths=this._paths,parsedPaths=this._parsedPaths,bindings=this._bindings,nBindings=bindings.length;for(var i=0,n=arguments.length;i!==n;++i){var object=arguments[i],uuid=object.uuid,index=indicesByUUID[uuid],knownObject=undefined;if(index===undefined){index=nObjects++;indicesByUUID[uuid]=index;objects.push(object);for(var j=0,m=nBindings;j!==m;++j){bindings[j].push(new PropertyBinding(object,paths[j],parsedPaths[j]))}}else if(index<nCachedObjects){knownObject=objects[index];var firstActiveIndex=--nCachedObjects,lastCachedObject=objects[firstActiveIndex];indicesByUUID[lastCachedObject.uuid]=index;objects[index]=lastCachedObject;indicesByUUID[uuid]=firstActiveIndex;objects[firstActiveIndex]=object;for(var j=0,m=nBindings;j!==m;++j){var bindingsForPath=bindings[j],lastCached=bindingsForPath[firstActiveIndex],binding=bindingsForPath[index];bindingsForPath[index]=lastCached;if(binding===undefined){binding=new PropertyBinding(object,paths[j],parsedPaths[j])}bindingsForPath[firstActiveIndex]=binding}}else if(objects[index]!==knownObject){console.error("THREE.AnimationObjectGroup: Different objects with the same UUID "+"detected. Clean the caches or recreate your infrastructure when reloading scenes.")}}this.nCachedObjects_=nCachedObjects},remove:function(var_args){var objects=this._objects,nCachedObjects=this.nCachedObjects_,indicesByUUID=this._indicesByUUID,bindings=this._bindings,nBindings=bindings.length;for(var i=0,n=arguments.length;i!==n;++i){var object=arguments[i],uuid=object.uuid,index=indicesByUUID[uuid];if(index!==undefined&&index>=nCachedObjects){var lastCachedIndex=nCachedObjects++,firstActiveObject=objects[lastCachedIndex];indicesByUUID[firstActiveObject.uuid]=index;objects[index]=firstActiveObject;indicesByUUID[uuid]=lastCachedIndex;objects[lastCachedIndex]=object;for(var j=0,m=nBindings;j!==m;++j){var bindingsForPath=bindings[j],firstActive=bindingsForPath[lastCachedIndex],binding=bindingsForPath[index];bindingsForPath[index]=firstActive;bindingsForPath[lastCachedIndex]=binding}}}this.nCachedObjects_=nCachedObjects},uncache:function(var_args){var objects=this._objects,nObjects=objects.length,nCachedObjects=this.nCachedObjects_,indicesByUUID=this._indicesByUUID,bindings=this._bindings,nBindings=bindings.length;for(var i=0,n=arguments.length;i!==n;++i){var object=arguments[i],uuid=object.uuid,index=indicesByUUID[uuid];if(index!==undefined){delete indicesByUUID[uuid];if(index<nCachedObjects){var firstActiveIndex=--nCachedObjects,lastCachedObject=objects[firstActiveIndex],lastIndex=--nObjects,lastObject=objects[lastIndex];indicesByUUID[lastCachedObject.uuid]=index;objects[index]=lastCachedObject;indicesByUUID[lastObject.uuid]=firstActiveIndex;objects[firstActiveIndex]=lastObject;objects.pop();for(var j=0,m=nBindings;j!==m;++j){var bindingsForPath=bindings[j],lastCached=bindingsForPath[firstActiveIndex],last=bindingsForPath[lastIndex];bindingsForPath[index]=lastCached;bindingsForPath[firstActiveIndex]=last;bindingsForPath.pop()}}else{var lastIndex=--nObjects,lastObject=objects[lastIndex];indicesByUUID[lastObject.uuid]=index;objects[index]=lastObject;objects.pop();for(var j=0,m=nBindings;j!==m;++j){var bindingsForPath=bindings[j];bindingsForPath[index]=bindingsForPath[lastIndex];bindingsForPath.pop()}}}}this.nCachedObjects_=nCachedObjects},subscribe_:function(path,parsedPath){var indicesByPath=this._bindingsIndicesByPath,index=indicesByPath[path],bindings=this._bindings;if(index!==undefined)return bindings[index];var paths=this._paths,parsedPaths=this._parsedPaths,objects=this._objects,nObjects=objects.length,nCachedObjects=this.nCachedObjects_,bindingsForPath=new Array(nObjects);index=bindings.length;indicesByPath[path]=index;paths.push(path);parsedPaths.push(parsedPath);bindings.push(bindingsForPath);for(var i=nCachedObjects,n=objects.length;i!==n;++i){var object=objects[i];bindingsForPath[i]=new PropertyBinding(object,path,parsedPath)}return bindingsForPath},unsubscribe_:function(path){var indicesByPath=this._bindingsIndicesByPath,index=indicesByPath[path];if(index!==undefined){var paths=this._paths,parsedPaths=this._parsedPaths,bindings=this._bindings,lastBindingsIndex=bindings.length-1,lastBindings=bindings[lastBindingsIndex],lastBindingsPath=path[lastBindingsIndex];indicesByPath[lastBindingsPath]=index;bindings[index]=lastBindings;bindings.pop();parsedPaths[index]=parsedPaths[lastBindingsIndex];parsedPaths.pop();paths[index]=paths[lastBindingsIndex];paths.pop()}}});function AnimationAction(mixer,clip,localRoot){this._mixer=mixer;this._clip=clip;this._localRoot=localRoot||null;var tracks=clip.tracks,nTracks=tracks.length,interpolants=new Array(nTracks);var interpolantSettings={endingStart:ZeroCurvatureEnding,endingEnd:ZeroCurvatureEnding};for(var i=0;i!==nTracks;++i){var interpolant=tracks[i].createInterpolant(null);interpolants[i]=interpolant;interpolant.settings=interpolantSettings}this._interpolantSettings=interpolantSettings;this._interpolants=interpolants;this._propertyBindings=new Array(nTracks);this._cacheIndex=null;this._byClipCacheIndex=null;this._timeScaleInterpolant=null;this._weightInterpolant=null;this.loop=LoopRepeat;this._loopCount=-1;this._startTime=null;this.time=0;this.timeScale=1;this._effectiveTimeScale=1;this.weight=1;this._effectiveWeight=1;this.repetitions=Infinity;this.paused=false;this.enabled=true;this.clampWhenFinished=false;this.zeroSlopeAtStart=true;this.zeroSlopeAtEnd=true}Object.assign(AnimationAction.prototype,{play:function(){this._mixer._activateAction(this);return this},stop:function(){this._mixer._deactivateAction(this);return this.reset()},reset:function(){this.paused=false;this.enabled=true;this.time=0;this._loopCount=-1;this._startTime=null;return this.stopFading().stopWarping()},isRunning:function(){return this.enabled&&!this.paused&&this.timeScale!==0&&this._startTime===null&&this._mixer._isActiveAction(this)},isScheduled:function(){return this._mixer._isActiveAction(this)},startAt:function(time){this._startTime=time;return this},setLoop:function(mode,repetitions){this.loop=mode;this.repetitions=repetitions;return this},setEffectiveWeight:function(weight){this.weight=weight;this._effectiveWeight=this.enabled?weight:0;return this.stopFading()},getEffectiveWeight:function(){return this._effectiveWeight},fadeIn:function(duration){return this._scheduleFading(duration,0,1)},fadeOut:function(duration){return this._scheduleFading(duration,1,0)},crossFadeFrom:function(fadeOutAction,duration,warp){fadeOutAction.fadeOut(duration);this.fadeIn(duration);if(warp){var fadeInDuration=this._clip.duration,fadeOutDuration=fadeOutAction._clip.duration,startEndRatio=fadeOutDuration/fadeInDuration,endStartRatio=fadeInDuration/fadeOutDuration;fadeOutAction.warp(1,startEndRatio,duration);this.warp(endStartRatio,1,duration)}return this},crossFadeTo:function(fadeInAction,duration,warp){return fadeInAction.crossFadeFrom(this,duration,warp)},stopFading:function(){var weightInterpolant=this._weightInterpolant;if(weightInterpolant!==null){this._weightInterpolant=null;this._mixer._takeBackControlInterpolant(weightInterpolant)}return this},setEffectiveTimeScale:function(timeScale){this.timeScale=timeScale;this._effectiveTimeScale=this.paused?0:timeScale;return this.stopWarping()},getEffectiveTimeScale:function(){return this._effectiveTimeScale},setDuration:function(duration){this.timeScale=this._clip.duration/duration;return this.stopWarping()},syncWith:function(action){this.time=action.time;this.timeScale=action.timeScale;return this.stopWarping()},halt:function(duration){return this.warp(this._effectiveTimeScale,0,duration)},warp:function(startTimeScale,endTimeScale,duration){var mixer=this._mixer,now=mixer.time,interpolant=this._timeScaleInterpolant,timeScale=this.timeScale;if(interpolant===null){interpolant=mixer._lendControlInterpolant();this._timeScaleInterpolant=interpolant}var times=interpolant.parameterPositions,values=interpolant.sampleValues;times[0]=now;times[1]=now+duration;values[0]=startTimeScale/timeScale;values[1]=endTimeScale/timeScale;return this},stopWarping:function(){var timeScaleInterpolant=this._timeScaleInterpolant;if(timeScaleInterpolant!==null){this._timeScaleInterpolant=null;this._mixer._takeBackControlInterpolant(timeScaleInterpolant)}return this},getMixer:function(){return this._mixer},getClip:function(){return this._clip},getRoot:function(){return this._localRoot||this._mixer._root},_update:function(time,deltaTime,timeDirection,accuIndex){if(!this.enabled){this._updateWeight(time);return}var startTime=this._startTime;if(startTime!==null){var timeRunning=(time-startTime)*timeDirection;if(timeRunning<0||timeDirection===0){return}this._startTime=null;deltaTime=timeDirection*timeRunning}deltaTime*=this._updateTimeScale(time);var clipTime=this._updateTime(deltaTime);var weight=this._updateWeight(time);if(weight>0){var interpolants=this._interpolants;var propertyMixers=this._propertyBindings;for(var j=0,m=interpolants.length;j!==m;++j){interpolants[j].evaluate(clipTime);propertyMixers[j].accumulate(accuIndex,weight)}}},_updateWeight:function(time){var weight=0;if(this.enabled){weight=this.weight;var interpolant=this._weightInterpolant;if(interpolant!==null){var interpolantValue=interpolant.evaluate(time)[0];weight*=interpolantValue;if(time>interpolant.parameterPositions[1]){this.stopFading();if(interpolantValue===0){this.enabled=false}}}}this._effectiveWeight=weight;return weight},_updateTimeScale:function(time){var timeScale=0;if(!this.paused){timeScale=this.timeScale;var interpolant=this._timeScaleInterpolant;if(interpolant!==null){var interpolantValue=interpolant.evaluate(time)[0];timeScale*=interpolantValue;if(time>interpolant.parameterPositions[1]){this.stopWarping();if(timeScale===0){this.paused=true}else{this.timeScale=timeScale}}}}this._effectiveTimeScale=timeScale;return timeScale},_updateTime:function(deltaTime){var time=this.time+deltaTime;if(deltaTime===0)return time;var duration=this._clip.duration,loop=this.loop,loopCount=this._loopCount;if(loop===LoopOnce){if(loopCount===-1){this._loopCount=0;this._setEndings(true,true,false)}handle_stop:{if(time>=duration){time=duration}else if(time<0){time=0}else break handle_stop;if(this.clampWhenFinished)this.paused=true;else this.enabled=false;this._mixer.dispatchEvent({type:"finished",action:this,direction:deltaTime<0?-1:1})}}else{var pingPong=loop===LoopPingPong;if(loopCount===-1){if(deltaTime>=0){loopCount=0;this._setEndings(true,this.repetitions===0,pingPong)}else{this._setEndings(this.repetitions===0,true,pingPong)}}if(time>=duration||time<0){var loopDelta=Math.floor(time/duration);time-=duration*loopDelta;loopCount+=Math.abs(loopDelta);var pending=this.repetitions-loopCount;if(pending<0){if(this.clampWhenFinished)this.paused=true;else this.enabled=false;time=deltaTime>0?duration:0;this._mixer.dispatchEvent({type:"finished",action:this,direction:deltaTime>0?1:-1})}else{if(pending===0){var atStart=deltaTime<0;this._setEndings(atStart,!atStart,pingPong)}else{this._setEndings(false,false,pingPong)}this._loopCount=loopCount;this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:loopDelta})}}if(pingPong&&(loopCount&1)===1){this.time=time;return duration-time}}this.time=time;return time},_setEndings:function(atStart,atEnd,pingPong){var settings=this._interpolantSettings;if(pingPong){settings.endingStart=ZeroSlopeEnding;settings.endingEnd=ZeroSlopeEnding}else{if(atStart){settings.endingStart=this.zeroSlopeAtStart?ZeroSlopeEnding:ZeroCurvatureEnding}else{settings.endingStart=WrapAroundEnding}if(atEnd){settings.endingEnd=this.zeroSlopeAtEnd?ZeroSlopeEnding:ZeroCurvatureEnding}else{settings.endingEnd=WrapAroundEnding}}},_scheduleFading:function(duration,weightNow,weightThen){var mixer=this._mixer,now=mixer.time,interpolant=this._weightInterpolant;if(interpolant===null){interpolant=mixer._lendControlInterpolant();this._weightInterpolant=interpolant}var times=interpolant.parameterPositions,values=interpolant.sampleValues;times[0]=now;values[0]=weightNow;times[1]=now+duration;values[1]=weightThen;return this}});function AnimationMixer(root){this._root=root;this._initMemoryManager();this._accuIndex=0;this.time=0;this.timeScale=1}Object.assign(AnimationMixer.prototype,EventDispatcher.prototype,{_bindAction:function(action,prototypeAction){var root=action._localRoot||this._root,tracks=action._clip.tracks,nTracks=tracks.length,bindings=action._propertyBindings,interpolants=action._interpolants,rootUuid=root.uuid,bindingsByRoot=this._bindingsByRootAndName,bindingsByName=bindingsByRoot[rootUuid];if(bindingsByName===undefined){bindingsByName={};bindingsByRoot[rootUuid]=bindingsByName}for(var i=0;i!==nTracks;++i){var track=tracks[i],trackName=track.name,binding=bindingsByName[trackName];if(binding!==undefined){bindings[i]=binding}else{binding=bindings[i];if(binding!==undefined){if(binding._cacheIndex===null){++binding.referenceCount;this._addInactiveBinding(binding,rootUuid,trackName)}continue}var path=prototypeAction&&prototypeAction._propertyBindings[i].binding.parsedPath;binding=new PropertyMixer(PropertyBinding.create(root,trackName,path),track.ValueTypeName,track.getValueSize());++binding.referenceCount;this._addInactiveBinding(binding,rootUuid,trackName);bindings[i]=binding}interpolants[i].resultBuffer=binding.buffer}},_activateAction:function(action){if(!this._isActiveAction(action)){if(action._cacheIndex===null){var rootUuid=(action._localRoot||this._root).uuid,clipUuid=action._clip.uuid,actionsForClip=this._actionsByClip[clipUuid];this._bindAction(action,actionsForClip&&actionsForClip.knownActions[0]);this._addInactiveAction(action,clipUuid,rootUuid)}var bindings=action._propertyBindings;for(var i=0,n=bindings.length;i!==n;++i){var binding=bindings[i];if(binding.useCount++===0){this._lendBinding(binding);binding.saveOriginalState()}}this._lendAction(action)}},_deactivateAction:function(action){if(this._isActiveAction(action)){var bindings=action._propertyBindings;for(var i=0,n=bindings.length;i!==n;++i){var binding=bindings[i];if(--binding.useCount===0){binding.restoreOriginalState();this._takeBackBinding(binding)}}this._takeBackAction(action)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var scope=this;this.stats={actions:{get total(){return scope._actions.length},get inUse(){return scope._nActiveActions}},bindings:{get total(){return scope._bindings.length},get inUse(){return scope._nActiveBindings}},controlInterpolants:{get total(){return scope._controlInterpolants.length},get inUse(){return scope._nActiveControlInterpolants}}}},_isActiveAction:function(action){var index=action._cacheIndex;return index!==null&&index<this._nActiveActions},_addInactiveAction:function(action,clipUuid,rootUuid){var actions=this._actions,actionsByClip=this._actionsByClip,actionsForClip=actionsByClip[clipUuid];if(actionsForClip===undefined){actionsForClip={knownActions:[action],actionByRoot:{}};action._byClipCacheIndex=0;actionsByClip[clipUuid]=actionsForClip}else{var knownActions=actionsForClip.knownActions;action._byClipCacheIndex=knownActions.length;knownActions.push(action)}action._cacheIndex=actions.length;actions.push(action);actionsForClip.actionByRoot[rootUuid]=action},_removeInactiveAction:function(action){var actions=this._actions,lastInactiveAction=actions[actions.length-1],cacheIndex=action._cacheIndex;lastInactiveAction._cacheIndex=cacheIndex;actions[cacheIndex]=lastInactiveAction;actions.pop();action._cacheIndex=null;var clipUuid=action._clip.uuid,actionsByClip=this._actionsByClip,actionsForClip=actionsByClip[clipUuid],knownActionsForClip=actionsForClip.knownActions,lastKnownAction=knownActionsForClip[knownActionsForClip.length-1],byClipCacheIndex=action._byClipCacheIndex;lastKnownAction._byClipCacheIndex=byClipCacheIndex;knownActionsForClip[byClipCacheIndex]=lastKnownAction;knownActionsForClip.pop();action._byClipCacheIndex=null;var actionByRoot=actionsForClip.actionByRoot,rootUuid=(action._localRoot||this._root).uuid;delete actionByRoot[rootUuid];if(knownActionsForClip.length===0){delete actionsByClip[clipUuid]}this._removeInactiveBindingsForAction(action)},_removeInactiveBindingsForAction:function(action){var bindings=action._propertyBindings;for(var i=0,n=bindings.length;i!==n;++i){var binding=bindings[i];if(--binding.referenceCount===0){this._removeInactiveBinding(binding)}}},_lendAction:function(action){var actions=this._actions,prevIndex=action._cacheIndex,lastActiveIndex=this._nActiveActions++,firstInactiveAction=actions[lastActiveIndex];action._cacheIndex=lastActiveIndex;actions[lastActiveIndex]=action;firstInactiveAction._cacheIndex=prevIndex;actions[prevIndex]=firstInactiveAction},_takeBackAction:function(action){var actions=this._actions,prevIndex=action._cacheIndex,firstInactiveIndex=--this._nActiveActions,lastActiveAction=actions[firstInactiveIndex];action._cacheIndex=firstInactiveIndex;actions[firstInactiveIndex]=action;lastActiveAction._cacheIndex=prevIndex;actions[prevIndex]=lastActiveAction},_addInactiveBinding:function(binding,rootUuid,trackName){var bindingsByRoot=this._bindingsByRootAndName,bindingByName=bindingsByRoot[rootUuid],bindings=this._bindings;if(bindingByName===undefined){bindingByName={};bindingsByRoot[rootUuid]=bindingByName}bindingByName[trackName]=binding;binding._cacheIndex=bindings.length;bindings.push(binding)},_removeInactiveBinding:function(binding){var bindings=this._bindings,propBinding=binding.binding,rootUuid=propBinding.rootNode.uuid,trackName=propBinding.path,bindingsByRoot=this._bindingsByRootAndName,bindingByName=bindingsByRoot[rootUuid],lastInactiveBinding=bindings[bindings.length-1],cacheIndex=binding._cacheIndex;lastInactiveBinding._cacheIndex=cacheIndex;bindings[cacheIndex]=lastInactiveBinding;bindings.pop();delete bindingByName[trackName];remove_empty_map:{for(var _ in bindingByName)break remove_empty_map;delete bindingsByRoot[rootUuid]}},_lendBinding:function(binding){var bindings=this._bindings,prevIndex=binding._cacheIndex,lastActiveIndex=this._nActiveBindings++,firstInactiveBinding=bindings[lastActiveIndex];binding._cacheIndex=lastActiveIndex;bindings[lastActiveIndex]=binding;firstInactiveBinding._cacheIndex=prevIndex;bindings[prevIndex]=firstInactiveBinding},_takeBackBinding:function(binding){var bindings=this._bindings,prevIndex=binding._cacheIndex,firstInactiveIndex=--this._nActiveBindings,lastActiveBinding=bindings[firstInactiveIndex];binding._cacheIndex=firstInactiveIndex;bindings[firstInactiveIndex]=binding;lastActiveBinding._cacheIndex=prevIndex;bindings[prevIndex]=lastActiveBinding},_lendControlInterpolant:function(){var interpolants=this._controlInterpolants,lastActiveIndex=this._nActiveControlInterpolants++,interpolant=interpolants[lastActiveIndex];if(interpolant===undefined){interpolant=new LinearInterpolant(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer);interpolant.__cacheIndex=lastActiveIndex;interpolants[lastActiveIndex]=interpolant}return interpolant},_takeBackControlInterpolant:function(interpolant){var interpolants=this._controlInterpolants,prevIndex=interpolant.__cacheIndex,firstInactiveIndex=--this._nActiveControlInterpolants,lastActiveInterpolant=interpolants[firstInactiveIndex];interpolant.__cacheIndex=firstInactiveIndex;interpolants[firstInactiveIndex]=interpolant;lastActiveInterpolant.__cacheIndex=prevIndex;interpolants[prevIndex]=lastActiveInterpolant},_controlInterpolantsResultBuffer:new Float32Array(1),clipAction:function(clip,optionalRoot){var root=optionalRoot||this._root,rootUuid=root.uuid,clipObject=typeof clip==="string"?AnimationClip.findByName(root,clip):clip,clipUuid=clipObject!==null?clipObject.uuid:clip,actionsForClip=this._actionsByClip[clipUuid],prototypeAction=null;if(actionsForClip!==undefined){var existingAction=actionsForClip.actionByRoot[rootUuid];if(existingAction!==undefined){return existingAction}prototypeAction=actionsForClip.knownActions[0];if(clipObject===null)clipObject=prototypeAction._clip}if(clipObject===null)return null;var newAction=new AnimationAction(this,clipObject,optionalRoot);this._bindAction(newAction,prototypeAction);this._addInactiveAction(newAction,clipUuid,rootUuid);return newAction},existingAction:function(clip,optionalRoot){var root=optionalRoot||this._root,rootUuid=root.uuid,clipObject=typeof clip==="string"?AnimationClip.findByName(root,clip):clip,clipUuid=clipObject?clipObject.uuid:clip,actionsForClip=this._actionsByClip[clipUuid];if(actionsForClip!==undefined){return actionsForClip.actionByRoot[rootUuid]||null}return null},stopAllAction:function(){var actions=this._actions,nActions=this._nActiveActions,bindings=this._bindings,nBindings=this._nActiveBindings;this._nActiveActions=0;this._nActiveBindings=0;for(var i=0;i!==nActions;++i){actions[i].reset()}for(var i=0;i!==nBindings;++i){bindings[i].useCount=0}return this},update:function(deltaTime){deltaTime*=this.timeScale;var actions=this._actions,nActions=this._nActiveActions,time=this.time+=deltaTime,timeDirection=Math.sign(deltaTime),accuIndex=this._accuIndex^=1;for(var i=0;i!==nActions;++i){var action=actions[i];action._update(time,deltaTime,timeDirection,accuIndex)}var bindings=this._bindings,nBindings=this._nActiveBindings;for(var i=0;i!==nBindings;++i){bindings[i].apply(accuIndex)}return this},getRoot:function(){return this._root},uncacheClip:function(clip){var actions=this._actions,clipUuid=clip.uuid,actionsByClip=this._actionsByClip,actionsForClip=actionsByClip[clipUuid];if(actionsForClip!==undefined){var actionsToRemove=actionsForClip.knownActions;for(var i=0,n=actionsToRemove.length;i!==n;++i){var action=actionsToRemove[i];this._deactivateAction(action);
var cacheIndex=action._cacheIndex,lastInactiveAction=actions[actions.length-1];action._cacheIndex=null;action._byClipCacheIndex=null;lastInactiveAction._cacheIndex=cacheIndex;actions[cacheIndex]=lastInactiveAction;actions.pop();this._removeInactiveBindingsForAction(action)}delete actionsByClip[clipUuid]}},uncacheRoot:function(root){var rootUuid=root.uuid,actionsByClip=this._actionsByClip;for(var clipUuid in actionsByClip){var actionByRoot=actionsByClip[clipUuid].actionByRoot,action=actionByRoot[rootUuid];if(action!==undefined){this._deactivateAction(action);this._removeInactiveAction(action)}}var bindingsByRoot=this._bindingsByRootAndName,bindingByName=bindingsByRoot[rootUuid];if(bindingByName!==undefined){for(var trackName in bindingByName){var binding=bindingByName[trackName];binding.restoreOriginalState();this._removeInactiveBinding(binding)}}},uncacheAction:function(clip,optionalRoot){var action=this.existingAction(clip,optionalRoot);if(action!==null){this._deactivateAction(action);this._removeInactiveAction(action)}}});function Uniform(value){if(typeof value==="string"){console.warn("THREE.Uniform: Type parameter is no longer needed.");value=arguments[1]}this.value=value}Uniform.prototype.clone=function(){return new Uniform(this.value.clone===undefined?this.value:this.value.clone())};function InstancedBufferGeometry(){BufferGeometry.call(this);this.type="InstancedBufferGeometry";this.maxInstancedCount=undefined}InstancedBufferGeometry.prototype=Object.assign(Object.create(BufferGeometry.prototype),{constructor:InstancedBufferGeometry,isInstancedBufferGeometry:true,addGroup:function(start,count,materialIndex){this.groups.push({start:start,count:count,materialIndex:materialIndex})},copy:function(source){var index=source.index;if(index!==null){this.setIndex(index.clone())}var attributes=source.attributes;for(var name in attributes){var attribute=attributes[name];this.addAttribute(name,attribute.clone())}var groups=source.groups;for(var i=0,l=groups.length;i<l;i++){var group=groups[i];this.addGroup(group.start,group.count,group.materialIndex)}return this}});function InterleavedBufferAttribute(interleavedBuffer,itemSize,offset,normalized){this.uuid=_Math.generateUUID();this.data=interleavedBuffer;this.itemSize=itemSize;this.offset=offset;this.normalized=normalized===true}Object.defineProperties(InterleavedBufferAttribute.prototype,{count:{get:function(){return this.data.count}},array:{get:function(){return this.data.array}}});Object.assign(InterleavedBufferAttribute.prototype,{isInterleavedBufferAttribute:true,setX:function(index,x){this.data.array[index*this.data.stride+this.offset]=x;return this},setY:function(index,y){this.data.array[index*this.data.stride+this.offset+1]=y;return this},setZ:function(index,z){this.data.array[index*this.data.stride+this.offset+2]=z;return this},setW:function(index,w){this.data.array[index*this.data.stride+this.offset+3]=w;return this},getX:function(index){return this.data.array[index*this.data.stride+this.offset]},getY:function(index){return this.data.array[index*this.data.stride+this.offset+1]},getZ:function(index){return this.data.array[index*this.data.stride+this.offset+2]},getW:function(index){return this.data.array[index*this.data.stride+this.offset+3]},setXY:function(index,x,y){index=index*this.data.stride+this.offset;this.data.array[index+0]=x;this.data.array[index+1]=y;return this},setXYZ:function(index,x,y,z){index=index*this.data.stride+this.offset;this.data.array[index+0]=x;this.data.array[index+1]=y;this.data.array[index+2]=z;return this},setXYZW:function(index,x,y,z,w){index=index*this.data.stride+this.offset;this.data.array[index+0]=x;this.data.array[index+1]=y;this.data.array[index+2]=z;this.data.array[index+3]=w;return this}});function InterleavedBuffer(array,stride){this.uuid=_Math.generateUUID();this.array=array;this.stride=stride;this.count=array!==undefined?array.length/stride:0;this.dynamic=false;this.updateRange={offset:0,count:-1};this.onUploadCallback=function(){};this.version=0}Object.defineProperty(InterleavedBuffer.prototype,"needsUpdate",{set:function(value){if(value===true)this.version++}});Object.assign(InterleavedBuffer.prototype,{isInterleavedBuffer:true,setArray:function(array){if(Array.isArray(array)){throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.")}this.count=array!==undefined?array.length/this.stride:0;this.array=array},setDynamic:function(value){this.dynamic=value;return this},copy:function(source){this.array=new source.array.constructor(source.array);this.count=source.count;this.stride=source.stride;this.dynamic=source.dynamic;return this},copyAt:function(index1,attribute,index2){index1*=this.stride;index2*=attribute.stride;for(var i=0,l=this.stride;i<l;i++){this.array[index1+i]=attribute.array[index2+i]}return this},set:function(value,offset){if(offset===undefined)offset=0;this.array.set(value,offset);return this},clone:function(){return(new this.constructor).copy(this)},onUpload:function(callback){this.onUploadCallback=callback;return this}});function InstancedInterleavedBuffer(array,stride,meshPerAttribute){InterleavedBuffer.call(this,array,stride);this.meshPerAttribute=meshPerAttribute||1}InstancedInterleavedBuffer.prototype=Object.assign(Object.create(InterleavedBuffer.prototype),{constructor:InstancedInterleavedBuffer,isInstancedInterleavedBuffer:true,copy:function(source){InterleavedBuffer.prototype.copy.call(this,source);this.meshPerAttribute=source.meshPerAttribute;return this}});function InstancedBufferAttribute(array,itemSize,meshPerAttribute){BufferAttribute.call(this,array,itemSize);this.meshPerAttribute=meshPerAttribute||1}InstancedBufferAttribute.prototype=Object.assign(Object.create(BufferAttribute.prototype),{constructor:InstancedBufferAttribute,isInstancedBufferAttribute:true,copy:function(source){BufferAttribute.prototype.copy.call(this,source);this.meshPerAttribute=source.meshPerAttribute;return this}});function Raycaster(origin,direction,near,far){this.ray=new Ray(origin,direction);this.near=near||0;this.far=far||Infinity;this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params,{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points.");return this.Points}}})}function ascSort(a,b){return a.distance-b.distance}function intersectObject(object,raycaster,intersects,recursive){if(object.visible===false)return;object.raycast(raycaster,intersects);if(recursive===true){var children=object.children;for(var i=0,l=children.length;i<l;i++){intersectObject(children[i],raycaster,intersects,true)}}}Object.assign(Raycaster.prototype,{linePrecision:1,set:function(origin,direction){this.ray.set(origin,direction)},setFromCamera:function(coords,camera){if(camera&&camera.isPerspectiveCamera){this.ray.origin.setFromMatrixPosition(camera.matrixWorld);this.ray.direction.set(coords.x,coords.y,.5).unproject(camera).sub(this.ray.origin).normalize()}else if(camera&&camera.isOrthographicCamera){this.ray.origin.set(coords.x,coords.y,(camera.near+camera.far)/(camera.near-camera.far)).unproject(camera);this.ray.direction.set(0,0,-1).transformDirection(camera.matrixWorld)}else{console.error("THREE.Raycaster: Unsupported camera type.")}},intersectObject:function(object,recursive){var intersects=[];intersectObject(object,this,intersects,recursive);intersects.sort(ascSort);return intersects},intersectObjects:function(objects,recursive){var intersects=[];if(Array.isArray(objects)===false){console.warn("THREE.Raycaster.intersectObjects: objects is not an Array.");return intersects}for(var i=0,l=objects.length;i<l;i++){intersectObject(objects[i],this,intersects,recursive)}intersects.sort(ascSort);return intersects}});function Clock(autoStart){this.autoStart=autoStart!==undefined?autoStart:true;this.startTime=0;this.oldTime=0;this.elapsedTime=0;this.running=false}Object.assign(Clock.prototype,{start:function(){this.startTime=(typeof performance==="undefined"?Date:performance).now();this.oldTime=this.startTime;this.elapsedTime=0;this.running=true},stop:function(){this.getElapsedTime();this.running=false;this.autoStart=false},getElapsedTime:function(){this.getDelta();return this.elapsedTime},getDelta:function(){var diff=0;if(this.autoStart&&!this.running){this.start();return 0}if(this.running){var newTime=(typeof performance==="undefined"?Date:performance).now();diff=(newTime-this.oldTime)/1e3;this.oldTime=newTime;this.elapsedTime+=diff}return diff}});function Spherical(radius,phi,theta){this.radius=radius!==undefined?radius:1;this.phi=phi!==undefined?phi:0;this.theta=theta!==undefined?theta:0;return this}Object.assign(Spherical.prototype,{set:function(radius,phi,theta){this.radius=radius;this.phi=phi;this.theta=theta;return this},clone:function(){return(new this.constructor).copy(this)},copy:function(other){this.radius=other.radius;this.phi=other.phi;this.theta=other.theta;return this},makeSafe:function(){var EPS=1e-6;this.phi=Math.max(EPS,Math.min(Math.PI-EPS,this.phi));return this},setFromVector3:function(vec3){this.radius=vec3.length();if(this.radius===0){this.theta=0;this.phi=0}else{this.theta=Math.atan2(vec3.x,vec3.z);this.phi=Math.acos(_Math.clamp(vec3.y/this.radius,-1,1))}return this}});function Cylindrical(radius,theta,y){this.radius=radius!==undefined?radius:1;this.theta=theta!==undefined?theta:0;this.y=y!==undefined?y:0;return this}Object.assign(Cylindrical.prototype,{set:function(radius,theta,y){this.radius=radius;this.theta=theta;this.y=y;return this},clone:function(){return(new this.constructor).copy(this)},copy:function(other){this.radius=other.radius;this.theta=other.theta;this.y=other.y;return this},setFromVector3:function(vec3){this.radius=Math.sqrt(vec3.x*vec3.x+vec3.z*vec3.z);this.theta=Math.atan2(vec3.x,vec3.z);this.y=vec3.y;return this}});function MorphBlendMesh(geometry,material){Mesh.call(this,geometry,material);this.animationsMap={};this.animationsList=[];var numFrames=this.geometry.morphTargets.length;var name="__default";var startFrame=0;var endFrame=numFrames-1;var fps=numFrames/1;this.createAnimation(name,startFrame,endFrame,fps);this.setAnimationWeight(name,1)}MorphBlendMesh.prototype=Object.create(Mesh.prototype);MorphBlendMesh.prototype.constructor=MorphBlendMesh;MorphBlendMesh.prototype.createAnimation=function(name,start,end,fps){var animation={start:start,end:end,length:end-start+1,fps:fps,duration:(end-start)/fps,lastFrame:0,currentFrame:0,active:false,time:0,direction:1,weight:1,directionBackwards:false,mirroredLoop:false};this.animationsMap[name]=animation;this.animationsList.push(animation)};MorphBlendMesh.prototype.autoCreateAnimations=function(fps){var pattern=/([a-z]+)_?(\d+)/i;var firstAnimation,frameRanges={};var geometry=this.geometry;for(var i=0,il=geometry.morphTargets.length;i<il;i++){var morph=geometry.morphTargets[i];var chunks=morph.name.match(pattern);if(chunks&&chunks.length>1){var name=chunks[1];if(!frameRanges[name])frameRanges[name]={start:Infinity,end:-Infinity};var range=frameRanges[name];if(i<range.start)range.start=i;if(i>range.end)range.end=i;if(!firstAnimation)firstAnimation=name}}for(var name in frameRanges){var range=frameRanges[name];this.createAnimation(name,range.start,range.end,fps)}this.firstAnimation=firstAnimation};MorphBlendMesh.prototype.setAnimationDirectionForward=function(name){var animation=this.animationsMap[name];if(animation){animation.direction=1;animation.directionBackwards=false}};MorphBlendMesh.prototype.setAnimationDirectionBackward=function(name){var animation=this.animationsMap[name];if(animation){animation.direction=-1;animation.directionBackwards=true}};MorphBlendMesh.prototype.setAnimationFPS=function(name,fps){var animation=this.animationsMap[name];if(animation){animation.fps=fps;animation.duration=(animation.end-animation.start)/animation.fps}};MorphBlendMesh.prototype.setAnimationDuration=function(name,duration){var animation=this.animationsMap[name];if(animation){animation.duration=duration;animation.fps=(animation.end-animation.start)/animation.duration}};MorphBlendMesh.prototype.setAnimationWeight=function(name,weight){var animation=this.animationsMap[name];if(animation){animation.weight=weight}};MorphBlendMesh.prototype.setAnimationTime=function(name,time){var animation=this.animationsMap[name];if(animation){animation.time=time}};MorphBlendMesh.prototype.getAnimationTime=function(name){var time=0;var animation=this.animationsMap[name];if(animation){time=animation.time}return time};MorphBlendMesh.prototype.getAnimationDuration=function(name){var duration=-1;var animation=this.animationsMap[name];if(animation){duration=animation.duration}return duration};MorphBlendMesh.prototype.playAnimation=function(name){var animation=this.animationsMap[name];if(animation){animation.time=0;animation.active=true}else{console.warn("THREE.MorphBlendMesh: animation["+name+"] undefined in .playAnimation()")}};MorphBlendMesh.prototype.stopAnimation=function(name){var animation=this.animationsMap[name];if(animation){animation.active=false}};MorphBlendMesh.prototype.update=function(delta){for(var i=0,il=this.animationsList.length;i<il;i++){var animation=this.animationsList[i];if(!animation.active)continue;var frameTime=animation.duration/animation.length;animation.time+=animation.direction*delta;if(animation.mirroredLoop){if(animation.time>animation.duration||animation.time<0){animation.direction*=-1;if(animation.time>animation.duration){animation.time=animation.duration;animation.directionBackwards=true}if(animation.time<0){animation.time=0;animation.directionBackwards=false}}}else{animation.time=animation.time%animation.duration;if(animation.time<0)animation.time+=animation.duration}var keyframe=animation.start+_Math.clamp(Math.floor(animation.time/frameTime),0,animation.length-1);var weight=animation.weight;if(keyframe!==animation.currentFrame){this.morphTargetInfluences[animation.lastFrame]=0;this.morphTargetInfluences[animation.currentFrame]=1*weight;this.morphTargetInfluences[keyframe]=0;animation.lastFrame=animation.currentFrame;animation.currentFrame=keyframe}var mix=animation.time%frameTime/frameTime;if(animation.directionBackwards)mix=1-mix;if(animation.currentFrame!==animation.lastFrame){this.morphTargetInfluences[animation.currentFrame]=mix*weight;this.morphTargetInfluences[animation.lastFrame]=(1-mix)*weight}else{this.morphTargetInfluences[animation.currentFrame]=weight}}};function ImmediateRenderObject(material){Object3D.call(this);this.material=material;this.render=function(renderCallback){}}ImmediateRenderObject.prototype=Object.create(Object3D.prototype);ImmediateRenderObject.prototype.constructor=ImmediateRenderObject;ImmediateRenderObject.prototype.isImmediateRenderObject=true;function VertexNormalsHelper(object,size,hex,linewidth){this.object=object;this.size=size!==undefined?size:1;var color=hex!==undefined?hex:16711680;var width=linewidth!==undefined?linewidth:1;var nNormals=0;var objGeometry=this.object.geometry;if(objGeometry&&objGeometry.isGeometry){nNormals=objGeometry.faces.length*3}else if(objGeometry&&objGeometry.isBufferGeometry){nNormals=objGeometry.attributes.normal.count}var geometry=new BufferGeometry;var positions=new Float32BufferAttribute(nNormals*2*3,3);geometry.addAttribute("position",positions);LineSegments.call(this,geometry,new LineBasicMaterial({color:color,linewidth:width}));this.matrixAutoUpdate=false;this.update()}VertexNormalsHelper.prototype=Object.create(LineSegments.prototype);VertexNormalsHelper.prototype.constructor=VertexNormalsHelper;VertexNormalsHelper.prototype.update=function(){var v1=new Vector3;var v2=new Vector3;var normalMatrix=new Matrix3;return function update(){var keys=["a","b","c"];this.object.updateMatrixWorld(true);normalMatrix.getNormalMatrix(this.object.matrixWorld);var matrixWorld=this.object.matrixWorld;var position=this.geometry.attributes.position;var objGeometry=this.object.geometry;if(objGeometry&&objGeometry.isGeometry){var vertices=objGeometry.vertices;var faces=objGeometry.faces;var idx=0;for(var i=0,l=faces.length;i<l;i++){var face=faces[i];for(var j=0,jl=face.vertexNormals.length;j<jl;j++){var vertex=vertices[face[keys[j]]];var normal=face.vertexNormals[j];v1.copy(vertex).applyMatrix4(matrixWorld);v2.copy(normal).applyMatrix3(normalMatrix).normalize().multiplyScalar(this.size).add(v1);position.setXYZ(idx,v1.x,v1.y,v1.z);idx=idx+1;position.setXYZ(idx,v2.x,v2.y,v2.z);idx=idx+1}}}else if(objGeometry&&objGeometry.isBufferGeometry){var objPos=objGeometry.attributes.position;var objNorm=objGeometry.attributes.normal;var idx=0;for(var j=0,jl=objPos.count;j<jl;j++){v1.set(objPos.getX(j),objPos.getY(j),objPos.getZ(j)).applyMatrix4(matrixWorld);v2.set(objNorm.getX(j),objNorm.getY(j),objNorm.getZ(j));v2.applyMatrix3(normalMatrix).normalize().multiplyScalar(this.size).add(v1);position.setXYZ(idx,v1.x,v1.y,v1.z);idx=idx+1;position.setXYZ(idx,v2.x,v2.y,v2.z);idx=idx+1}}position.needsUpdate=true}}();function SpotLightHelper(light){Object3D.call(this);this.light=light;this.light.updateMatrixWorld();this.matrix=light.matrixWorld;this.matrixAutoUpdate=false;var geometry=new BufferGeometry;var positions=[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(var i=0,j=1,l=32;i<l;i++,j++){var p1=i/l*Math.PI*2;var p2=j/l*Math.PI*2;positions.push(Math.cos(p1),Math.sin(p1),1,Math.cos(p2),Math.sin(p2),1)}geometry.addAttribute("position",new Float32BufferAttribute(positions,3));var material=new LineBasicMaterial({fog:false});this.cone=new LineSegments(geometry,material);this.add(this.cone);this.update()}SpotLightHelper.prototype=Object.create(Object3D.prototype);SpotLightHelper.prototype.constructor=SpotLightHelper;SpotLightHelper.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};SpotLightHelper.prototype.update=function(){var vector=new Vector3;var vector2=new Vector3;return function update(){this.light.updateMatrixWorld();var coneLength=this.light.distance?this.light.distance:1e3;var coneWidth=coneLength*Math.tan(this.light.angle);this.cone.scale.set(coneWidth,coneWidth,coneLength);vector.setFromMatrixPosition(this.light.matrixWorld);vector2.setFromMatrixPosition(this.light.target.matrixWorld);this.cone.lookAt(vector2.sub(vector));this.cone.material.color.copy(this.light.color)}}();function getBoneList(object){var boneList=[];if(object&&object.isBone){boneList.push(object)}for(var i=0;i<object.children.length;i++){boneList.push.apply(boneList,getBoneList(object.children[i]))}return boneList}function SkeletonHelper(object){var bones=getBoneList(object);var geometry=new BufferGeometry;var vertices=[];var colors=[];var color1=new Color(0,0,1);var color2=new Color(0,1,0);for(var i=0;i<bones.length;i++){var bone=bones[i];if(bone.parent&&bone.parent.isBone){vertices.push(0,0,0);vertices.push(0,0,0);colors.push(color1.r,color1.g,color1.b);colors.push(color2.r,color2.g,color2.b)}}geometry.addAttribute("position",new Float32BufferAttribute(vertices,3));geometry.addAttribute("color",new Float32BufferAttribute(colors,3));var material=new LineBasicMaterial({vertexColors:VertexColors,depthTest:false,depthWrite:false,transparent:true});LineSegments.call(this,geometry,material);this.root=object;this.bones=bones;this.matrix=object.matrixWorld;this.matrixAutoUpdate=false;this.onBeforeRender()}SkeletonHelper.prototype=Object.create(LineSegments.prototype);SkeletonHelper.prototype.constructor=SkeletonHelper;SkeletonHelper.prototype.onBeforeRender=function(){var vector=new Vector3;var boneMatrix=new Matrix4;var matrixWorldInv=new Matrix4;return function onBeforeRender(){var bones=this.bones;var geometry=this.geometry;var position=geometry.getAttribute("position");matrixWorldInv.getInverse(this.root.matrixWorld);for(var i=0,j=0;i<bones.length;i++){var bone=bones[i];if(bone.parent&&bone.parent.isBone){boneMatrix.multiplyMatrices(matrixWorldInv,bone.matrixWorld);vector.setFromMatrixPosition(boneMatrix);position.setXYZ(j,vector.x,vector.y,vector.z);boneMatrix.multiplyMatrices(matrixWorldInv,bone.parent.matrixWorld);vector.setFromMatrixPosition(boneMatrix);position.setXYZ(j+1,vector.x,vector.y,vector.z);j+=2}}geometry.getAttribute("position").needsUpdate=true}}();function PointLightHelper(light,sphereSize){this.light=light;this.light.updateMatrixWorld();var geometry=new SphereBufferGeometry(sphereSize,4,2);var material=new MeshBasicMaterial({wireframe:true,fog:false});material.color.copy(this.light.color);Mesh.call(this,geometry,material);this.matrix=this.light.matrixWorld;this.matrixAutoUpdate=false}PointLightHelper.prototype=Object.create(Mesh.prototype);PointLightHelper.prototype.constructor=PointLightHelper;PointLightHelper.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};PointLightHelper.prototype.update=function(){this.material.color.copy(this.light.color)};function RectAreaLightHelper(light){Object3D.call(this);this.light=light;this.light.updateMatrixWorld();this.matrix=light.matrixWorld;this.matrixAutoUpdate=false;var material=new LineBasicMaterial({color:light.color});var geometry=new BufferGeometry;geometry.addAttribute("position",new BufferAttribute(new Float32Array(5*3),3));this.add(new Line(geometry,material));this.update()}RectAreaLightHelper.prototype=Object.create(Object3D.prototype);RectAreaLightHelper.prototype.constructor=RectAreaLightHelper;RectAreaLightHelper.prototype.dispose=function(){this.children[0].geometry.dispose();this.children[0].material.dispose()};RectAreaLightHelper.prototype.update=function(){var line=this.children[0];line.material.color.copy(this.light.color);var hx=this.light.width*.5;var hy=this.light.height*.5;var position=line.geometry.attributes.position;var array=position.array;array[0]=hx;array[1]=-hy;array[2]=0;array[3]=hx;array[4]=hy;array[5]=0;array[6]=-hx;array[7]=hy;array[8]=0;array[9]=-hx;array[10]=-hy;array[11]=0;array[12]=hx;array[13]=-hy;array[14]=0;position.needsUpdate=true};function HemisphereLightHelper(light,size){Object3D.call(this);this.light=light;this.light.updateMatrixWorld();this.matrix=light.matrixWorld;this.matrixAutoUpdate=false;var geometry=new OctahedronBufferGeometry(size);geometry.rotateY(Math.PI*.5);var material=new MeshBasicMaterial({vertexColors:VertexColors,wireframe:true});var position=geometry.getAttribute("position");var colors=new Float32Array(position.count*3);geometry.addAttribute("color",new BufferAttribute(colors,3));this.add(new Mesh(geometry,material));this.update()}HemisphereLightHelper.prototype=Object.create(Object3D.prototype);HemisphereLightHelper.prototype.constructor=HemisphereLightHelper;HemisphereLightHelper.prototype.dispose=function(){this.children[0].geometry.dispose();this.children[0].material.dispose()};HemisphereLightHelper.prototype.update=function(){var vector=new Vector3;var color1=new Color;var color2=new Color;return function update(){var mesh=this.children[0];var colors=mesh.geometry.getAttribute("color");color1.copy(this.light.color);color2.copy(this.light.groundColor);for(var i=0,l=colors.count;i<l;i++){var color=i<l/2?color1:color2;colors.setXYZ(i,color.r,color.g,color.b)}mesh.lookAt(vector.setFromMatrixPosition(this.light.matrixWorld).negate());colors.needsUpdate=true}}();function GridHelper(size,divisions,color1,color2){size=size||10;divisions=divisions||10;color1=new Color(color1!==undefined?color1:4473924);color2=new Color(color2!==undefined?color2:8947848);var center=divisions/2;var step=size/divisions;var halfSize=size/2;var vertices=[],colors=[];for(var i=0,j=0,k=-halfSize;i<=divisions;i++,k+=step){vertices.push(-halfSize,0,k,halfSize,0,k);vertices.push(k,0,-halfSize,k,0,halfSize);var color=i===center?color1:color2;color.toArray(colors,j);j+=3;color.toArray(colors,j);j+=3;color.toArray(colors,j);j+=3;color.toArray(colors,j);j+=3}var geometry=new BufferGeometry;geometry.addAttribute("position",new Float32BufferAttribute(vertices,3));geometry.addAttribute("color",new Float32BufferAttribute(colors,3));var material=new LineBasicMaterial({vertexColors:VertexColors});LineSegments.call(this,geometry,material)}GridHelper.prototype=Object.create(LineSegments.prototype);GridHelper.prototype.constructor=GridHelper;function PolarGridHelper(radius,radials,circles,divisions,color1,color2){radius=radius||10;radials=radials||16;circles=circles||8;divisions=divisions||64;color1=new Color(color1!==undefined?color1:4473924);color2=new Color(color2!==undefined?color2:8947848);var vertices=[];var colors=[];var x,z;var v,i,j,r,color;for(i=0;i<=radials;i++){v=i/radials*(Math.PI*2);x=Math.sin(v)*radius;z=Math.cos(v)*radius;vertices.push(0,0,0);vertices.push(x,0,z);color=i&1?color1:color2;colors.push(color.r,color.g,color.b);colors.push(color.r,color.g,color.b)}for(i=0;i<=circles;i++){color=i&1?color1:color2;r=radius-radius/circles*i;for(j=0;j<divisions;j++){v=j/divisions*(Math.PI*2);x=Math.sin(v)*r;z=Math.cos(v)*r;vertices.push(x,0,z);colors.push(color.r,color.g,color.b);v=(j+1)/divisions*(Math.PI*2);x=Math.sin(v)*r;z=Math.cos(v)*r;vertices.push(x,0,z);colors.push(color.r,color.g,color.b)}}var geometry=new BufferGeometry;geometry.addAttribute("position",new Float32BufferAttribute(vertices,3));geometry.addAttribute("color",new Float32BufferAttribute(colors,3));var material=new LineBasicMaterial({vertexColors:VertexColors});LineSegments.call(this,geometry,material)}PolarGridHelper.prototype=Object.create(LineSegments.prototype);PolarGridHelper.prototype.constructor=PolarGridHelper;function FaceNormalsHelper(object,size,hex,linewidth){this.object=object;this.size=size!==undefined?size:1;var color=hex!==undefined?hex:16776960;var width=linewidth!==undefined?linewidth:1;var nNormals=0;var objGeometry=this.object.geometry;if(objGeometry&&objGeometry.isGeometry){nNormals=objGeometry.faces.length}else{console.warn("THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.")}var geometry=new BufferGeometry;var positions=new Float32BufferAttribute(nNormals*2*3,3);geometry.addAttribute("position",positions);LineSegments.call(this,geometry,new LineBasicMaterial({color:color,linewidth:width}));this.matrixAutoUpdate=false;this.update()}FaceNormalsHelper.prototype=Object.create(LineSegments.prototype);FaceNormalsHelper.prototype.constructor=FaceNormalsHelper;FaceNormalsHelper.prototype.update=function(){var v1=new Vector3;var v2=new Vector3;var normalMatrix=new Matrix3;return function update(){this.object.updateMatrixWorld(true);normalMatrix.getNormalMatrix(this.object.matrixWorld);var matrixWorld=this.object.matrixWorld;var position=this.geometry.attributes.position;var objGeometry=this.object.geometry;var vertices=objGeometry.vertices;var faces=objGeometry.faces;var idx=0;for(var i=0,l=faces.length;i<l;i++){var face=faces[i];var normal=face.normal;v1.copy(vertices[face.a]).add(vertices[face.b]).add(vertices[face.c]).divideScalar(3).applyMatrix4(matrixWorld);v2.copy(normal).applyMatrix3(normalMatrix).normalize().multiplyScalar(this.size).add(v1);position.setXYZ(idx,v1.x,v1.y,v1.z);idx=idx+1;position.setXYZ(idx,v2.x,v2.y,v2.z);idx=idx+1}position.needsUpdate=true}}();function DirectionalLightHelper(light,size){Object3D.call(this);this.light=light;this.light.updateMatrixWorld();this.matrix=light.matrixWorld;this.matrixAutoUpdate=false;if(size===undefined)size=1;var geometry=new BufferGeometry;geometry.addAttribute("position",new Float32BufferAttribute([-size,size,0,size,size,0,size,-size,0,-size,-size,0,-size,size,0],3));var material=new LineBasicMaterial({fog:false});this.add(new Line(geometry,material));geometry=new BufferGeometry;geometry.addAttribute("position",new Float32BufferAttribute([0,0,0,0,0,1],3));this.add(new Line(geometry,material));this.update()}DirectionalLightHelper.prototype=Object.create(Object3D.prototype);DirectionalLightHelper.prototype.constructor=DirectionalLightHelper;DirectionalLightHelper.prototype.dispose=function(){var lightPlane=this.children[0];var targetLine=this.children[1];lightPlane.geometry.dispose();lightPlane.material.dispose();targetLine.geometry.dispose();targetLine.material.dispose()};DirectionalLightHelper.prototype.update=function(){var v1=new Vector3;var v2=new Vector3;var v3=new Vector3;return function update(){v1.setFromMatrixPosition(this.light.matrixWorld);v2.setFromMatrixPosition(this.light.target.matrixWorld);v3.subVectors(v2,v1);var lightPlane=this.children[0];var targetLine=this.children[1];lightPlane.lookAt(v3);lightPlane.material.color.copy(this.light.color);targetLine.lookAt(v3);targetLine.scale.z=v3.length()}}();function CameraHelper(camera){var geometry=new BufferGeometry;var material=new LineBasicMaterial({color:16777215,vertexColors:FaceColors});var vertices=[];var colors=[];var pointMap={};var colorFrustum=new Color(16755200);var colorCone=new Color(16711680);var colorUp=new Color(43775);var colorTarget=new Color(16777215);var colorCross=new Color(3355443);addLine("n1","n2",colorFrustum);addLine("n2","n4",colorFrustum);addLine("n4","n3",colorFrustum);addLine("n3","n1",colorFrustum);addLine("f1","f2",colorFrustum);addLine("f2","f4",colorFrustum);addLine("f4","f3",colorFrustum);addLine("f3","f1",colorFrustum);addLine("n1","f1",colorFrustum);addLine("n2","f2",colorFrustum);addLine("n3","f3",colorFrustum);addLine("n4","f4",colorFrustum);addLine("p","n1",colorCone);addLine("p","n2",colorCone);addLine("p","n3",colorCone);addLine("p","n4",colorCone);addLine("u1","u2",colorUp);addLine("u2","u3",colorUp);addLine("u3","u1",colorUp);addLine("c","t",colorTarget);addLine("p","c",colorCross);addLine("cn1","cn2",colorCross);addLine("cn3","cn4",colorCross);addLine("cf1","cf2",colorCross);addLine("cf3","cf4",colorCross);function addLine(a,b,color){addPoint(a,color);addPoint(b,color)}function addPoint(id,color){vertices.push(0,0,0);colors.push(color.r,color.g,color.b);if(pointMap[id]===undefined){pointMap[id]=[]}pointMap[id].push(vertices.length/3-1)}geometry.addAttribute("position",new Float32BufferAttribute(vertices,3));geometry.addAttribute("color",new Float32BufferAttribute(colors,3));LineSegments.call(this,geometry,material);this.camera=camera;if(this.camera.updateProjectionMatrix)this.camera.updateProjectionMatrix();this.matrix=camera.matrixWorld;this.matrixAutoUpdate=false;this.pointMap=pointMap;this.update()}CameraHelper.prototype=Object.create(LineSegments.prototype);CameraHelper.prototype.constructor=CameraHelper;CameraHelper.prototype.update=function(){var geometry,pointMap;var vector=new Vector3;var camera=new Camera;function setPoint(point,x,y,z){vector.set(x,y,z).unproject(camera);var points=pointMap[point];if(points!==undefined){var position=geometry.getAttribute("position");for(var i=0,l=points.length;i<l;i++){position.setXYZ(points[i],vector.x,vector.y,vector.z)}}}return function update(){geometry=this.geometry;pointMap=this.pointMap;var w=1,h=1;camera.projectionMatrix.copy(this.camera.projectionMatrix);setPoint("c",0,0,-1);setPoint("t",0,0,1);setPoint("n1",-w,-h,-1);setPoint("n2",w,-h,-1);setPoint("n3",-w,h,-1);setPoint("n4",w,h,-1);setPoint("f1",-w,-h,1);setPoint("f2",w,-h,1);setPoint("f3",-w,h,1);setPoint("f4",w,h,1);setPoint("u1",w*.7,h*1.1,-1);setPoint("u2",-w*.7,h*1.1,-1);setPoint("u3",0,h*2,-1);setPoint("cf1",-w,0,1);setPoint("cf2",w,0,1);setPoint("cf3",0,-h,1);setPoint("cf4",0,h,1);setPoint("cn1",-w,0,-1);setPoint("cn2",w,0,-1);setPoint("cn3",0,-h,-1);setPoint("cn4",0,h,-1);geometry.getAttribute("position").needsUpdate=true}}();function BoxHelper(object,color){this.object=object;if(color===undefined)color=16776960;var indices=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]);var positions=new Float32Array(8*3);var geometry=new BufferGeometry;geometry.setIndex(new BufferAttribute(indices,1));geometry.addAttribute("position",new BufferAttribute(positions,3));LineSegments.call(this,geometry,new LineBasicMaterial({color:color}));this.matrixAutoUpdate=false;this.update()}BoxHelper.prototype=Object.create(LineSegments.prototype);BoxHelper.prototype.constructor=BoxHelper;BoxHelper.prototype.update=function(){var box=new Box3;return function update(object){
if(object!==undefined){console.warn("THREE.BoxHelper: .update() has no longer arguments.")}if(this.object!==undefined){box.setFromObject(this.object)}if(box.isEmpty())return;var min=box.min;var max=box.max;var position=this.geometry.attributes.position;var array=position.array;array[0]=max.x;array[1]=max.y;array[2]=max.z;array[3]=min.x;array[4]=max.y;array[5]=max.z;array[6]=min.x;array[7]=min.y;array[8]=max.z;array[9]=max.x;array[10]=min.y;array[11]=max.z;array[12]=max.x;array[13]=max.y;array[14]=min.z;array[15]=min.x;array[16]=max.y;array[17]=min.z;array[18]=min.x;array[19]=min.y;array[20]=min.z;array[21]=max.x;array[22]=min.y;array[23]=min.z;position.needsUpdate=true;this.geometry.computeBoundingSphere()}}();BoxHelper.prototype.setFromObject=function(object){this.object=object;this.update();return this};var lineGeometry;var coneGeometry;function ArrowHelper(dir,origin,length,color,headLength,headWidth){Object3D.call(this);if(color===undefined)color=16776960;if(length===undefined)length=1;if(headLength===undefined)headLength=.2*length;if(headWidth===undefined)headWidth=.2*headLength;if(lineGeometry===undefined){lineGeometry=new BufferGeometry;lineGeometry.addAttribute("position",new Float32BufferAttribute([0,0,0,0,1,0],3));coneGeometry=new CylinderBufferGeometry(0,.5,1,5,1);coneGeometry.translate(0,-.5,0)}this.position.copy(origin);this.line=new Line(lineGeometry,new LineBasicMaterial({color:color}));this.line.matrixAutoUpdate=false;this.add(this.line);this.cone=new Mesh(coneGeometry,new MeshBasicMaterial({color:color}));this.cone.matrixAutoUpdate=false;this.add(this.cone);this.setDirection(dir);this.setLength(length,headLength,headWidth)}ArrowHelper.prototype=Object.create(Object3D.prototype);ArrowHelper.prototype.constructor=ArrowHelper;ArrowHelper.prototype.setDirection=function(){var axis=new Vector3;var radians;return function setDirection(dir){if(dir.y>.99999){this.quaternion.set(0,0,0,1)}else if(dir.y<-.99999){this.quaternion.set(1,0,0,0)}else{axis.set(dir.z,0,-dir.x).normalize();radians=Math.acos(dir.y);this.quaternion.setFromAxisAngle(axis,radians)}}}();ArrowHelper.prototype.setLength=function(length,headLength,headWidth){if(headLength===undefined)headLength=.2*length;if(headWidth===undefined)headWidth=.2*headLength;this.line.scale.set(1,Math.max(0,length-headLength),1);this.line.updateMatrix();this.cone.scale.set(headWidth,headLength,headWidth);this.cone.position.y=length;this.cone.updateMatrix()};ArrowHelper.prototype.setColor=function(color){this.line.material.color.copy(color);this.cone.material.color.copy(color)};function AxisHelper(size){size=size||1;var vertices=[0,0,0,size,0,0,0,0,0,0,size,0,0,0,0,0,0,size];var colors=[1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1];var geometry=new BufferGeometry;geometry.addAttribute("position",new Float32BufferAttribute(vertices,3));geometry.addAttribute("color",new Float32BufferAttribute(colors,3));var material=new LineBasicMaterial({vertexColors:VertexColors});LineSegments.call(this,geometry,material)}AxisHelper.prototype=Object.create(LineSegments.prototype);AxisHelper.prototype.constructor=AxisHelper;function CubicPoly(){var c0=0,c1=0,c2=0,c3=0;function init(x0,x1,t0,t1){c0=x0;c1=t0;c2=-3*x0+3*x1-2*t0-t1;c3=2*x0-2*x1+t0+t1}return{initCatmullRom:function(x0,x1,x2,x3,tension){init(x1,x2,tension*(x2-x0),tension*(x3-x1))},initNonuniformCatmullRom:function(x0,x1,x2,x3,dt0,dt1,dt2){var t1=(x1-x0)/dt0-(x2-x0)/(dt0+dt1)+(x2-x1)/dt1;var t2=(x2-x1)/dt1-(x3-x1)/(dt1+dt2)+(x3-x2)/dt2;t1*=dt1;t2*=dt1;init(x1,x2,t1,t2)},calc:function(t){var t2=t*t;var t3=t2*t;return c0+c1*t+c2*t2+c3*t3}}}var tmp=new Vector3;var px=new CubicPoly;var py=new CubicPoly;var pz=new CubicPoly;function CatmullRomCurve3(points){Curve.call(this);if(points.length<2)console.warn("THREE.CatmullRomCurve3: Points array needs at least two entries.");this.points=points||[];this.closed=false}CatmullRomCurve3.prototype=Object.create(Curve.prototype);CatmullRomCurve3.prototype.constructor=CatmullRomCurve3;CatmullRomCurve3.prototype.getPoint=function(t){var points=this.points;var l=points.length;var point=(l-(this.closed?0:1))*t;var intPoint=Math.floor(point);var weight=point-intPoint;if(this.closed){intPoint+=intPoint>0?0:(Math.floor(Math.abs(intPoint)/points.length)+1)*points.length}else if(weight===0&&intPoint===l-1){intPoint=l-2;weight=1}var p0,p1,p2,p3;if(this.closed||intPoint>0){p0=points[(intPoint-1)%l]}else{tmp.subVectors(points[0],points[1]).add(points[0]);p0=tmp}p1=points[intPoint%l];p2=points[(intPoint+1)%l];if(this.closed||intPoint+2<l){p3=points[(intPoint+2)%l]}else{tmp.subVectors(points[l-1],points[l-2]).add(points[l-1]);p3=tmp}if(this.type===undefined||this.type==="centripetal"||this.type==="chordal"){var pow=this.type==="chordal"?.5:.25;var dt0=Math.pow(p0.distanceToSquared(p1),pow);var dt1=Math.pow(p1.distanceToSquared(p2),pow);var dt2=Math.pow(p2.distanceToSquared(p3),pow);if(dt1<1e-4)dt1=1;if(dt0<1e-4)dt0=dt1;if(dt2<1e-4)dt2=dt1;px.initNonuniformCatmullRom(p0.x,p1.x,p2.x,p3.x,dt0,dt1,dt2);py.initNonuniformCatmullRom(p0.y,p1.y,p2.y,p3.y,dt0,dt1,dt2);pz.initNonuniformCatmullRom(p0.z,p1.z,p2.z,p3.z,dt0,dt1,dt2)}else if(this.type==="catmullrom"){var tension=this.tension!==undefined?this.tension:.5;px.initCatmullRom(p0.x,p1.x,p2.x,p3.x,tension);py.initCatmullRom(p0.y,p1.y,p2.y,p3.y,tension);pz.initCatmullRom(p0.z,p1.z,p2.z,p3.z,tension)}return new Vector3(px.calc(weight),py.calc(weight),pz.calc(weight))};function CubicBezierCurve3(v0,v1,v2,v3){Curve.call(this);this.v0=v0;this.v1=v1;this.v2=v2;this.v3=v3}CubicBezierCurve3.prototype=Object.create(Curve.prototype);CubicBezierCurve3.prototype.constructor=CubicBezierCurve3;CubicBezierCurve3.prototype.getPoint=function(t){var v0=this.v0,v1=this.v1,v2=this.v2,v3=this.v3;return new Vector3(CubicBezier(t,v0.x,v1.x,v2.x,v3.x),CubicBezier(t,v0.y,v1.y,v2.y,v3.y),CubicBezier(t,v0.z,v1.z,v2.z,v3.z))};function QuadraticBezierCurve3(v0,v1,v2){Curve.call(this);this.v0=v0;this.v1=v1;this.v2=v2}QuadraticBezierCurve3.prototype=Object.create(Curve.prototype);QuadraticBezierCurve3.prototype.constructor=QuadraticBezierCurve3;QuadraticBezierCurve3.prototype.getPoint=function(t){var v0=this.v0,v1=this.v1,v2=this.v2;return new Vector3(QuadraticBezier(t,v0.x,v1.x,v2.x),QuadraticBezier(t,v0.y,v1.y,v2.y),QuadraticBezier(t,v0.z,v1.z,v2.z))};function LineCurve3(v1,v2){Curve.call(this);this.v1=v1;this.v2=v2}LineCurve3.prototype=Object.create(Curve.prototype);LineCurve3.prototype.constructor=LineCurve3;LineCurve3.prototype.getPoint=function(t){if(t===1){return this.v2.clone()}var vector=new Vector3;vector.subVectors(this.v2,this.v1);vector.multiplyScalar(t);vector.add(this.v1);return vector};function ArcCurve(aX,aY,aRadius,aStartAngle,aEndAngle,aClockwise){EllipseCurve.call(this,aX,aY,aRadius,aRadius,aStartAngle,aEndAngle,aClockwise)}ArcCurve.prototype=Object.create(EllipseCurve.prototype);ArcCurve.prototype.constructor=ArcCurve;var SceneUtils={createMultiMaterialObject:function(geometry,materials){var group=new Group;for(var i=0,l=materials.length;i<l;i++){group.add(new Mesh(geometry,materials[i]))}return group},detach:function(child,parent,scene){child.applyMatrix(parent.matrixWorld);parent.remove(child);scene.add(child)},attach:function(child,scene,parent){child.applyMatrix((new Matrix4).getInverse(parent.matrixWorld));scene.remove(child);parent.add(child)}};function Face4(a,b,c,d,normal,color,materialIndex){console.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead.");return new Face3(a,b,c,normal,color,materialIndex)}var LineStrip=0;var LinePieces=1;function MeshFaceMaterial(materials){console.warn("THREE.MeshFaceMaterial has been removed. Use an Array instead.");return materials}function MultiMaterial(materials){if(materials===undefined)materials=[];console.warn("THREE.MultiMaterial has been removed. Use an Array instead.");materials.isMultiMaterial=true;materials.materials=materials;materials.clone=function(){return materials.slice()};return materials}function PointCloud(geometry,material){console.warn("THREE.PointCloud has been renamed to THREE.Points.");return new Points(geometry,material)}function Particle(material){console.warn("THREE.Particle has been renamed to THREE.Sprite.");return new Sprite(material)}function ParticleSystem(geometry,material){console.warn("THREE.ParticleSystem has been renamed to THREE.Points.");return new Points(geometry,material)}function PointCloudMaterial(parameters){console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.");return new PointsMaterial(parameters)}function ParticleBasicMaterial(parameters){console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.");return new PointsMaterial(parameters)}function ParticleSystemMaterial(parameters){console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.");return new PointsMaterial(parameters)}function Vertex(x,y,z){console.warn("THREE.Vertex has been removed. Use THREE.Vector3 instead.");return new Vector3(x,y,z)}function DynamicBufferAttribute(array,itemSize){console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.");return new BufferAttribute(array,itemSize).setDynamic(true)}function Int8Attribute(array,itemSize){console.warn("THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.");return new Int8BufferAttribute(array,itemSize)}function Uint8Attribute(array,itemSize){console.warn("THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.");return new Uint8BufferAttribute(array,itemSize)}function Uint8ClampedAttribute(array,itemSize){console.warn("THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.");return new Uint8ClampedBufferAttribute(array,itemSize)}function Int16Attribute(array,itemSize){console.warn("THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.");return new Int16BufferAttribute(array,itemSize)}function Uint16Attribute(array,itemSize){console.warn("THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.");return new Uint16BufferAttribute(array,itemSize)}function Int32Attribute(array,itemSize){console.warn("THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.");return new Int32BufferAttribute(array,itemSize)}function Uint32Attribute(array,itemSize){console.warn("THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.");return new Uint32BufferAttribute(array,itemSize)}function Float32Attribute(array,itemSize){console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.");return new Float32BufferAttribute(array,itemSize)}function Float64Attribute(array,itemSize){console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.");return new Float64BufferAttribute(array,itemSize)}Curve.create=function(construct,getPoint){console.log("THREE.Curve.create() has been deprecated");construct.prototype=Object.create(Curve.prototype);construct.prototype.constructor=construct;construct.prototype.getPoint=getPoint;return construct};function ClosedSplineCurve3(points){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");CatmullRomCurve3.call(this,points);this.type="catmullrom";this.closed=true}ClosedSplineCurve3.prototype=Object.create(CatmullRomCurve3.prototype);function SplineCurve3(points){console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");CatmullRomCurve3.call(this,points);this.type="catmullrom"}SplineCurve3.prototype=Object.create(CatmullRomCurve3.prototype);function Spline(points){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.");CatmullRomCurve3.call(this,points);this.type="catmullrom"}Spline.prototype=Object.create(CatmullRomCurve3.prototype);Object.assign(Spline.prototype,{initFromArray:function(a){console.error("THREE.Spline: .initFromArray() has been removed.")},getControlPointsArray:function(optionalTarget){console.error("THREE.Spline: .getControlPointsArray() has been removed.")},reparametrizeByArcLength:function(samplingCoef){console.error("THREE.Spline: .reparametrizeByArcLength() has been removed.")}});function BoundingBoxHelper(object,color){console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.");return new BoxHelper(object,color)}function EdgesHelper(object,hex){console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.");return new LineSegments(new EdgesGeometry(object.geometry),new LineBasicMaterial({color:hex!==undefined?hex:16777215}))}GridHelper.prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")};SkeletonHelper.prototype.update=function(){console.error("THREE.SkeletonHelper: update() no longer needs to be called.")};function WireframeHelper(object,hex){console.warn("THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.");return new LineSegments(new WireframeGeometry(object.geometry),new LineBasicMaterial({color:hex!==undefined?hex:16777215}))}function XHRLoader(manager){console.warn("THREE.XHRLoader has been renamed to THREE.FileLoader.");return new FileLoader(manager)}function BinaryTextureLoader(manager){console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.");return new DataTextureLoader(manager)}Object.assign(Box2.prototype,{center:function(optionalTarget){console.warn("THREE.Box2: .center() has been renamed to .getCenter().");return this.getCenter(optionalTarget)},empty:function(){console.warn("THREE.Box2: .empty() has been renamed to .isEmpty().");return this.isEmpty()},isIntersectionBox:function(box){console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(box)},size:function(optionalTarget){console.warn("THREE.Box2: .size() has been renamed to .getSize().");return this.getSize(optionalTarget)}});Object.assign(Box3.prototype,{center:function(optionalTarget){console.warn("THREE.Box3: .center() has been renamed to .getCenter().");return this.getCenter(optionalTarget)},empty:function(){console.warn("THREE.Box3: .empty() has been renamed to .isEmpty().");return this.isEmpty()},isIntersectionBox:function(box){console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(box)},isIntersectionSphere:function(sphere){console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().");return this.intersectsSphere(sphere)},size:function(optionalTarget){console.warn("THREE.Box3: .size() has been renamed to .getSize().");return this.getSize(optionalTarget)}});Line3.prototype.center=function(optionalTarget){console.warn("THREE.Line3: .center() has been renamed to .getCenter().");return this.getCenter(optionalTarget)};_Math.random16=function(){console.warn("THREE.Math.random16() has been deprecated. Use Math.random() instead.");return Math.random()};Object.assign(Matrix3.prototype,{flattenToArrayOffset:function(array,offset){console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.");return this.toArray(array,offset)},multiplyVector3:function(vector){console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.");return vector.applyMatrix3(this)},multiplyVector3Array:function(a){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},applyToBuffer:function(buffer,offset,length){console.warn("THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.");return this.applyToBufferAttribute(buffer)},applyToVector3Array:function(array,offset,length){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")}});Object.assign(Matrix4.prototype,{extractPosition:function(m){console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().");return this.copyPosition(m)},flattenToArrayOffset:function(array,offset){console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.");return this.toArray(array,offset)},getPosition:function(){var v1;return function getPosition(){if(v1===undefined)v1=new Vector3;console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.");return v1.setFromMatrixColumn(this,3)}}(),setRotationFromQuaternion:function(q){console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().");return this.makeRotationFromQuaternion(q)},multiplyToArray:function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},multiplyVector3:function(vector){console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.");return vector.applyMatrix4(this)},multiplyVector4:function(vector){console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.");return vector.applyMatrix4(this)},multiplyVector3Array:function(a){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},rotateAxis:function(v){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.");v.transformDirection(this)},crossVector:function(vector){console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.");return vector.applyMatrix4(this)},translate:function(){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},rotateY:function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},rotateZ:function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},rotateByAxis:function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},applyToBuffer:function(buffer,offset,length){console.warn("THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.");return this.applyToBufferAttribute(buffer)},applyToVector3Array:function(array,offset,length){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},makeFrustum:function(left,right,bottom,top,near,far){console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.");return this.makePerspective(left,right,top,bottom,near,far)}});Plane.prototype.isIntersectionLine=function(line){console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().");return this.intersectsLine(line)};Quaternion.prototype.multiplyVector3=function(vector){console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.");return vector.applyQuaternion(this)};Object.assign(Ray.prototype,{isIntersectionBox:function(box){console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(box)},isIntersectionPlane:function(plane){console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().");return this.intersectsPlane(plane)},isIntersectionSphere:function(sphere){console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().");return this.intersectsSphere(sphere)}});Object.assign(Shape.prototype,{extrude:function(options){console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.");return new ExtrudeGeometry(this,options)},makeGeometry:function(options){console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.");return new ShapeGeometry(this,options)}});Object.assign(Vector2.prototype,{fromAttribute:function(attribute,index,offset){console.error("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().");return this.fromBufferAttribute(attribute,index,offset)}});Object.assign(Vector3.prototype,{setEulerFromRotationMatrix:function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},getPositionFromMatrix:function(m){console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().");return this.setFromMatrixPosition(m)},getScaleFromMatrix:function(m){console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().");return this.setFromMatrixScale(m)},getColumnFromMatrix:function(index,matrix){console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().");return this.setFromMatrixColumn(matrix,index)},applyProjection:function(m){console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.");return this.applyMatrix4(m)},fromAttribute:function(attribute,index,offset){console.error("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().");return this.fromBufferAttribute(attribute,index,offset)}});Object.assign(Vector4.prototype,{fromAttribute:function(attribute,index,offset){console.error("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().");return this.fromBufferAttribute(attribute,index,offset)}});Geometry.prototype.computeTangents=function(){console.warn("THREE.Geometry: .computeTangents() has been removed.")};Object.assign(Object3D.prototype,{getChildByName:function(name){console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().");return this.getObjectByName(name)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(distance,axis){console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.");return this.translateOnAxis(axis,distance)}});Object.defineProperties(Object3D.prototype,{eulerOrder:{get:function(){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order.");return this.rotation.order},set:function(value){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order.");this.rotation.order=value}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}});Object.defineProperties(LOD.prototype,{objects:{get:function(){console.warn("THREE.LOD: .objects has been renamed to .levels.");return this.levels}}});Object.defineProperty(Skeleton.prototype,"useVertexTexture",{get:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")},set:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")}});Object.defineProperty(Curve.prototype,"__arcLengthDivisions",{get:function(){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.");return this.arcLengthDivisions},set:function(value){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.");this.arcLengthDivisions=value}});PerspectiveCamera.prototype.setLens=function(focalLength,filmGauge){console.warn("THREE.PerspectiveCamera.setLens is deprecated. "+"Use .setFocalLength and .filmGauge for a photographic setup.");if(filmGauge!==undefined)this.filmGauge=filmGauge;this.setFocalLength(focalLength)};Object.defineProperties(Light.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(value){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov.");this.shadow.camera.fov=value}},shadowCameraLeft:{set:function(value){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left.");this.shadow.camera.left=value}},shadowCameraRight:{set:function(value){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right.");this.shadow.camera.right=value}},shadowCameraTop:{set:function(value){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top.");this.shadow.camera.top=value}},shadowCameraBottom:{set:function(value){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.");this.shadow.camera.bottom=value}},shadowCameraNear:{set:function(value){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near.");this.shadow.camera.near=value}},shadowCameraFar:{set:function(value){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far.");this.shadow.camera.far=value}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(value){console.warn("THREE.Light: .shadowBias is now .shadow.bias.");this.shadow.bias=value}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(value){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.");this.shadow.mapSize.width=value}},shadowMapHeight:{set:function(value){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.");this.shadow.mapSize.height=value}}});Object.defineProperties(BufferAttribute.prototype,{length:{get:function(){console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead.");return this.array.length}}});Object.assign(BufferGeometry.prototype,{addIndex:function(index){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().");this.setIndex(index)},addDrawCall:function(start,count,indexOffset){if(indexOffset!==undefined){console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.")}console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup().");this.addGroup(start,count)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().");this.clearGroups()},computeTangents:function(){console.warn("THREE.BufferGeometry: .computeTangents() has been removed.")},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")}});Object.defineProperties(BufferGeometry.prototype,{drawcalls:{get:function(){console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups.");return this.groups}},offsets:{get:function(){console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups.");return this.groups}}});Object.defineProperties(Uniform.prototype,{dynamic:{set:function(){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.");return this}}});Object.defineProperties(Material.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},wrapRGB:{get:function(){console.warn("THREE.Material: .wrapRGB has been removed.");return new Color}}});Object.defineProperties(MeshPhongMaterial.prototype,{metal:{get:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.");return false},set:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}});Object.defineProperties(ShaderMaterial.prototype,{derivatives:{get:function(){console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.");return this.extensions.derivatives},set:function(value){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.");this.extensions.derivatives=value}}});Object.assign(WebGLRenderer.prototype,{getCurrentRenderTarget:function(){console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().");return this.getRenderTarget()},supportsFloatTextures:function(){console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).");return this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' ).");return this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' ).");return this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' ).");return this.extensions.get("WEBGL_compressed_texture_s3tc")},supportsCompressedTexturePVRTC:function(){console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' ).");return this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' ).");return this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.");return this.capabilities.vertexTextures},supportsInstancedArrays:function(){console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' ).");return this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(boolean){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().");this.setScissorTest(boolean)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")}});Object.defineProperties(WebGLRenderer.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(value){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.");this.shadowMap.enabled=value}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(value){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.");this.shadowMap.type=value}},shadowMapCullFace:{get:function(){return this.shadowMap.cullFace},set:function(value){console.warn("THREE.WebGLRenderer: .shadowMapCullFace is now .shadowMap.cullFace.");this.shadowMap.cullFace=value}}});Object.defineProperties(WebGLShadowMap.prototype,{cullFace:{get:function(){return this.renderReverseSided?CullFaceFront:CullFaceBack},set:function(cullFace){var value=cullFace!==CullFaceBack;console.warn("WebGLRenderer: .shadowMap.cullFace is deprecated. Set .shadowMap.renderReverseSided to "+value+".");this.renderReverseSided=value}}});Object.defineProperties(WebGLRenderTarget.prototype,{wrapS:{get:function(){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.");return this.texture.wrapS},set:function(value){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.");this.texture.wrapS=value}},wrapT:{get:function(){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.");return this.texture.wrapT},set:function(value){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.");
this.texture.wrapT=value}},magFilter:{get:function(){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.");return this.texture.magFilter},set:function(value){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.");this.texture.magFilter=value}},minFilter:{get:function(){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.");return this.texture.minFilter},set:function(value){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.");this.texture.minFilter=value}},anisotropy:{get:function(){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.");return this.texture.anisotropy},set:function(value){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.");this.texture.anisotropy=value}},offset:{get:function(){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset.");return this.texture.offset},set:function(value){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset.");this.texture.offset=value}},repeat:{get:function(){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat.");return this.texture.repeat},set:function(value){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat.");this.texture.repeat=value}},format:{get:function(){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format.");return this.texture.format},set:function(value){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format.");this.texture.format=value}},type:{get:function(){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type.");return this.texture.type},set:function(value){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type.");this.texture.type=value}},generateMipmaps:{get:function(){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.");return this.texture.generateMipmaps},set:function(value){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.");this.texture.generateMipmaps=value}}});Audio.prototype.load=function(file){console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");var scope=this;var audioLoader=new AudioLoader;audioLoader.load(file,function(buffer){scope.setBuffer(buffer)});return this};AudioAnalyser.prototype.getData=function(){console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData().");return this.getFrequencyData()};var GeometryUtils={merge:function(geometry1,geometry2,materialIndexOffset){console.warn("THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.");var matrix;if(geometry2.isMesh){geometry2.matrixAutoUpdate&&geometry2.updateMatrix();matrix=geometry2.matrix;geometry2=geometry2.geometry}geometry1.merge(geometry2,matrix,materialIndexOffset)},center:function(geometry){console.warn("THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.");return geometry.center()}};var ImageUtils={crossOrigin:undefined,loadTexture:function(url,mapping,onLoad,onError){console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.");var loader=new TextureLoader;loader.setCrossOrigin(this.crossOrigin);var texture=loader.load(url,onLoad,undefined,onError);if(mapping)texture.mapping=mapping;return texture},loadTextureCube:function(urls,mapping,onLoad,onError){console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.");var loader=new CubeTextureLoader;loader.setCrossOrigin(this.crossOrigin);var texture=loader.load(urls,onLoad,undefined,onError);if(mapping)texture.mapping=mapping;return texture},loadCompressedTexture:function(){console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")},loadCompressedTextureCube:function(){console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")}};function Projector(){console.error("THREE.Projector has been moved to /examples/js/renderers/Projector.js.");this.projectVector=function(vector,camera){console.warn("THREE.Projector: .projectVector() is now vector.project().");vector.project(camera)};this.unprojectVector=function(vector,camera){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject().");vector.unproject(camera)};this.pickingRay=function(){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")}}function CanvasRenderer(){console.error("THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js");this.domElement=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");this.clear=function(){};this.render=function(){};this.setClearColor=function(){};this.setSize=function(){}}exports.WebGLRenderTargetCube=WebGLRenderTargetCube;exports.WebGLRenderTarget=WebGLRenderTarget;exports.WebGLRenderer=WebGLRenderer;exports.ShaderLib=ShaderLib;exports.UniformsLib=UniformsLib;exports.UniformsUtils=UniformsUtils;exports.ShaderChunk=ShaderChunk;exports.FogExp2=FogExp2;exports.Fog=Fog;exports.Scene=Scene;exports.LensFlare=LensFlare;exports.Sprite=Sprite;exports.LOD=LOD;exports.SkinnedMesh=SkinnedMesh;exports.Skeleton=Skeleton;exports.Bone=Bone;exports.Mesh=Mesh;exports.LineSegments=LineSegments;exports.LineLoop=LineLoop;exports.Line=Line;exports.Points=Points;exports.Group=Group;exports.VideoTexture=VideoTexture;exports.DataTexture=DataTexture;exports.CompressedTexture=CompressedTexture;exports.CubeTexture=CubeTexture;exports.CanvasTexture=CanvasTexture;exports.DepthTexture=DepthTexture;exports.Texture=Texture;exports.CompressedTextureLoader=CompressedTextureLoader;exports.DataTextureLoader=DataTextureLoader;exports.CubeTextureLoader=CubeTextureLoader;exports.TextureLoader=TextureLoader;exports.ObjectLoader=ObjectLoader;exports.MaterialLoader=MaterialLoader;exports.BufferGeometryLoader=BufferGeometryLoader;exports.DefaultLoadingManager=DefaultLoadingManager;exports.LoadingManager=LoadingManager;exports.JSONLoader=JSONLoader;exports.ImageLoader=ImageLoader;exports.FontLoader=FontLoader;exports.FileLoader=FileLoader;exports.Loader=Loader;exports.Cache=Cache;exports.AudioLoader=AudioLoader;exports.SpotLightShadow=SpotLightShadow;exports.SpotLight=SpotLight;exports.PointLight=PointLight;exports.RectAreaLight=RectAreaLight;exports.HemisphereLight=HemisphereLight;exports.DirectionalLightShadow=DirectionalLightShadow;exports.DirectionalLight=DirectionalLight;exports.AmbientLight=AmbientLight;exports.LightShadow=LightShadow;exports.Light=Light;exports.StereoCamera=StereoCamera;exports.PerspectiveCamera=PerspectiveCamera;exports.OrthographicCamera=OrthographicCamera;exports.CubeCamera=CubeCamera;exports.ArrayCamera=ArrayCamera;exports.Camera=Camera;exports.AudioListener=AudioListener;exports.PositionalAudio=PositionalAudio;exports.AudioContext=AudioContext;exports.AudioAnalyser=AudioAnalyser;exports.Audio=Audio;exports.VectorKeyframeTrack=VectorKeyframeTrack;exports.StringKeyframeTrack=StringKeyframeTrack;exports.QuaternionKeyframeTrack=QuaternionKeyframeTrack;exports.NumberKeyframeTrack=NumberKeyframeTrack;exports.ColorKeyframeTrack=ColorKeyframeTrack;exports.BooleanKeyframeTrack=BooleanKeyframeTrack;exports.PropertyMixer=PropertyMixer;exports.PropertyBinding=PropertyBinding;exports.KeyframeTrack=KeyframeTrack;exports.AnimationUtils=AnimationUtils;exports.AnimationObjectGroup=AnimationObjectGroup;exports.AnimationMixer=AnimationMixer;exports.AnimationClip=AnimationClip;exports.Uniform=Uniform;exports.InstancedBufferGeometry=InstancedBufferGeometry;exports.BufferGeometry=BufferGeometry;exports.GeometryIdCount=GeometryIdCount;exports.Geometry=Geometry;exports.InterleavedBufferAttribute=InterleavedBufferAttribute;exports.InstancedInterleavedBuffer=InstancedInterleavedBuffer;exports.InterleavedBuffer=InterleavedBuffer;exports.InstancedBufferAttribute=InstancedBufferAttribute;exports.Face3=Face3;exports.Object3D=Object3D;exports.Raycaster=Raycaster;exports.Layers=Layers;exports.EventDispatcher=EventDispatcher;exports.Clock=Clock;exports.QuaternionLinearInterpolant=QuaternionLinearInterpolant;exports.LinearInterpolant=LinearInterpolant;exports.DiscreteInterpolant=DiscreteInterpolant;exports.CubicInterpolant=CubicInterpolant;exports.Interpolant=Interpolant;exports.Triangle=Triangle;exports.Math=_Math;exports.Spherical=Spherical;exports.Cylindrical=Cylindrical;exports.Plane=Plane;exports.Frustum=Frustum;exports.Sphere=Sphere;exports.Ray=Ray;exports.Matrix4=Matrix4;exports.Matrix3=Matrix3;exports.Box3=Box3;exports.Box2=Box2;exports.Line3=Line3;exports.Euler=Euler;exports.Vector4=Vector4;exports.Vector3=Vector3;exports.Vector2=Vector2;exports.Quaternion=Quaternion;exports.Color=Color;exports.MorphBlendMesh=MorphBlendMesh;exports.ImmediateRenderObject=ImmediateRenderObject;exports.VertexNormalsHelper=VertexNormalsHelper;exports.SpotLightHelper=SpotLightHelper;exports.SkeletonHelper=SkeletonHelper;exports.PointLightHelper=PointLightHelper;exports.RectAreaLightHelper=RectAreaLightHelper;exports.HemisphereLightHelper=HemisphereLightHelper;exports.GridHelper=GridHelper;exports.PolarGridHelper=PolarGridHelper;exports.FaceNormalsHelper=FaceNormalsHelper;exports.DirectionalLightHelper=DirectionalLightHelper;exports.CameraHelper=CameraHelper;exports.BoxHelper=BoxHelper;exports.ArrowHelper=ArrowHelper;exports.AxisHelper=AxisHelper;exports.CatmullRomCurve3=CatmullRomCurve3;exports.CubicBezierCurve3=CubicBezierCurve3;exports.QuadraticBezierCurve3=QuadraticBezierCurve3;exports.LineCurve3=LineCurve3;exports.ArcCurve=ArcCurve;exports.EllipseCurve=EllipseCurve;exports.SplineCurve=SplineCurve;exports.CubicBezierCurve=CubicBezierCurve;exports.QuadraticBezierCurve=QuadraticBezierCurve;exports.LineCurve=LineCurve;exports.Shape=Shape;exports.Path=Path;exports.ShapePath=ShapePath;exports.Font=Font;exports.CurvePath=CurvePath;exports.Curve=Curve;exports.ShapeUtils=ShapeUtils;exports.SceneUtils=SceneUtils;exports.WireframeGeometry=WireframeGeometry;exports.ParametricGeometry=ParametricGeometry;exports.ParametricBufferGeometry=ParametricBufferGeometry;exports.TetrahedronGeometry=TetrahedronGeometry;exports.TetrahedronBufferGeometry=TetrahedronBufferGeometry;exports.OctahedronGeometry=OctahedronGeometry;exports.OctahedronBufferGeometry=OctahedronBufferGeometry;exports.IcosahedronGeometry=IcosahedronGeometry;exports.IcosahedronBufferGeometry=IcosahedronBufferGeometry;exports.DodecahedronGeometry=DodecahedronGeometry;exports.DodecahedronBufferGeometry=DodecahedronBufferGeometry;exports.PolyhedronGeometry=PolyhedronGeometry;exports.PolyhedronBufferGeometry=PolyhedronBufferGeometry;exports.TubeGeometry=TubeGeometry;exports.TubeBufferGeometry=TubeBufferGeometry;exports.TorusKnotGeometry=TorusKnotGeometry;exports.TorusKnotBufferGeometry=TorusKnotBufferGeometry;exports.TorusGeometry=TorusGeometry;exports.TorusBufferGeometry=TorusBufferGeometry;exports.TextGeometry=TextGeometry;exports.TextBufferGeometry=TextBufferGeometry;exports.SphereGeometry=SphereGeometry;exports.SphereBufferGeometry=SphereBufferGeometry;exports.RingGeometry=RingGeometry;exports.RingBufferGeometry=RingBufferGeometry;exports.PlaneGeometry=PlaneGeometry;exports.PlaneBufferGeometry=PlaneBufferGeometry;exports.LatheGeometry=LatheGeometry;exports.LatheBufferGeometry=LatheBufferGeometry;exports.ShapeGeometry=ShapeGeometry;exports.ShapeBufferGeometry=ShapeBufferGeometry;exports.ExtrudeGeometry=ExtrudeGeometry;exports.ExtrudeBufferGeometry=ExtrudeBufferGeometry;exports.EdgesGeometry=EdgesGeometry;exports.ConeGeometry=ConeGeometry;exports.ConeBufferGeometry=ConeBufferGeometry;exports.CylinderGeometry=CylinderGeometry;exports.CylinderBufferGeometry=CylinderBufferGeometry;exports.CircleGeometry=CircleGeometry;exports.CircleBufferGeometry=CircleBufferGeometry;exports.BoxGeometry=BoxGeometry;exports.BoxBufferGeometry=BoxBufferGeometry;exports.ShadowMaterial=ShadowMaterial;exports.SpriteMaterial=SpriteMaterial;exports.RawShaderMaterial=RawShaderMaterial;exports.ShaderMaterial=ShaderMaterial;exports.PointsMaterial=PointsMaterial;exports.MeshPhysicalMaterial=MeshPhysicalMaterial;exports.MeshStandardMaterial=MeshStandardMaterial;exports.MeshPhongMaterial=MeshPhongMaterial;exports.MeshToonMaterial=MeshToonMaterial;exports.MeshNormalMaterial=MeshNormalMaterial;exports.MeshLambertMaterial=MeshLambertMaterial;exports.MeshDepthMaterial=MeshDepthMaterial;exports.MeshBasicMaterial=MeshBasicMaterial;exports.LineDashedMaterial=LineDashedMaterial;exports.LineBasicMaterial=LineBasicMaterial;exports.Material=Material;exports.Float64BufferAttribute=Float64BufferAttribute;exports.Float32BufferAttribute=Float32BufferAttribute;exports.Uint32BufferAttribute=Uint32BufferAttribute;exports.Int32BufferAttribute=Int32BufferAttribute;exports.Uint16BufferAttribute=Uint16BufferAttribute;exports.Int16BufferAttribute=Int16BufferAttribute;exports.Uint8ClampedBufferAttribute=Uint8ClampedBufferAttribute;exports.Uint8BufferAttribute=Uint8BufferAttribute;exports.Int8BufferAttribute=Int8BufferAttribute;exports.BufferAttribute=BufferAttribute;exports.REVISION=REVISION;exports.MOUSE=MOUSE;exports.CullFaceNone=CullFaceNone;exports.CullFaceBack=CullFaceBack;exports.CullFaceFront=CullFaceFront;exports.CullFaceFrontBack=CullFaceFrontBack;exports.FrontFaceDirectionCW=FrontFaceDirectionCW;exports.FrontFaceDirectionCCW=FrontFaceDirectionCCW;exports.BasicShadowMap=BasicShadowMap;exports.PCFShadowMap=PCFShadowMap;exports.PCFSoftShadowMap=PCFSoftShadowMap;exports.FrontSide=FrontSide;exports.BackSide=BackSide;exports.DoubleSide=DoubleSide;exports.FlatShading=FlatShading;exports.SmoothShading=SmoothShading;exports.NoColors=NoColors;exports.FaceColors=FaceColors;exports.VertexColors=VertexColors;exports.NoBlending=NoBlending;exports.NormalBlending=NormalBlending;exports.AdditiveBlending=AdditiveBlending;exports.SubtractiveBlending=SubtractiveBlending;exports.MultiplyBlending=MultiplyBlending;exports.CustomBlending=CustomBlending;exports.AddEquation=AddEquation;exports.SubtractEquation=SubtractEquation;exports.ReverseSubtractEquation=ReverseSubtractEquation;exports.MinEquation=MinEquation;exports.MaxEquation=MaxEquation;exports.ZeroFactor=ZeroFactor;exports.OneFactor=OneFactor;exports.SrcColorFactor=SrcColorFactor;exports.OneMinusSrcColorFactor=OneMinusSrcColorFactor;exports.SrcAlphaFactor=SrcAlphaFactor;exports.OneMinusSrcAlphaFactor=OneMinusSrcAlphaFactor;exports.DstAlphaFactor=DstAlphaFactor;exports.OneMinusDstAlphaFactor=OneMinusDstAlphaFactor;exports.DstColorFactor=DstColorFactor;exports.OneMinusDstColorFactor=OneMinusDstColorFactor;exports.SrcAlphaSaturateFactor=SrcAlphaSaturateFactor;exports.NeverDepth=NeverDepth;exports.AlwaysDepth=AlwaysDepth;exports.LessDepth=LessDepth;exports.LessEqualDepth=LessEqualDepth;exports.EqualDepth=EqualDepth;exports.GreaterEqualDepth=GreaterEqualDepth;exports.GreaterDepth=GreaterDepth;exports.NotEqualDepth=NotEqualDepth;exports.MultiplyOperation=MultiplyOperation;exports.MixOperation=MixOperation;exports.AddOperation=AddOperation;exports.NoToneMapping=NoToneMapping;exports.LinearToneMapping=LinearToneMapping;exports.ReinhardToneMapping=ReinhardToneMapping;exports.Uncharted2ToneMapping=Uncharted2ToneMapping;exports.CineonToneMapping=CineonToneMapping;exports.UVMapping=UVMapping;exports.CubeReflectionMapping=CubeReflectionMapping;exports.CubeRefractionMapping=CubeRefractionMapping;exports.EquirectangularReflectionMapping=EquirectangularReflectionMapping;exports.EquirectangularRefractionMapping=EquirectangularRefractionMapping;exports.SphericalReflectionMapping=SphericalReflectionMapping;exports.CubeUVReflectionMapping=CubeUVReflectionMapping;exports.CubeUVRefractionMapping=CubeUVRefractionMapping;exports.RepeatWrapping=RepeatWrapping;exports.ClampToEdgeWrapping=ClampToEdgeWrapping;exports.MirroredRepeatWrapping=MirroredRepeatWrapping;exports.NearestFilter=NearestFilter;exports.NearestMipMapNearestFilter=NearestMipMapNearestFilter;exports.NearestMipMapLinearFilter=NearestMipMapLinearFilter;exports.LinearFilter=LinearFilter;exports.LinearMipMapNearestFilter=LinearMipMapNearestFilter;exports.LinearMipMapLinearFilter=LinearMipMapLinearFilter;exports.UnsignedByteType=UnsignedByteType;exports.ByteType=ByteType;exports.ShortType=ShortType;exports.UnsignedShortType=UnsignedShortType;exports.IntType=IntType;exports.UnsignedIntType=UnsignedIntType;exports.FloatType=FloatType;exports.HalfFloatType=HalfFloatType;exports.UnsignedShort4444Type=UnsignedShort4444Type;exports.UnsignedShort5551Type=UnsignedShort5551Type;exports.UnsignedShort565Type=UnsignedShort565Type;exports.UnsignedInt248Type=UnsignedInt248Type;exports.AlphaFormat=AlphaFormat;exports.RGBFormat=RGBFormat;exports.RGBAFormat=RGBAFormat;exports.LuminanceFormat=LuminanceFormat;exports.LuminanceAlphaFormat=LuminanceAlphaFormat;exports.RGBEFormat=RGBEFormat;exports.DepthFormat=DepthFormat;exports.DepthStencilFormat=DepthStencilFormat;exports.RGB_S3TC_DXT1_Format=RGB_S3TC_DXT1_Format;exports.RGBA_S3TC_DXT1_Format=RGBA_S3TC_DXT1_Format;exports.RGBA_S3TC_DXT3_Format=RGBA_S3TC_DXT3_Format;exports.RGBA_S3TC_DXT5_Format=RGBA_S3TC_DXT5_Format;exports.RGB_PVRTC_4BPPV1_Format=RGB_PVRTC_4BPPV1_Format;exports.RGB_PVRTC_2BPPV1_Format=RGB_PVRTC_2BPPV1_Format;exports.RGBA_PVRTC_4BPPV1_Format=RGBA_PVRTC_4BPPV1_Format;exports.RGBA_PVRTC_2BPPV1_Format=RGBA_PVRTC_2BPPV1_Format;exports.RGB_ETC1_Format=RGB_ETC1_Format;exports.LoopOnce=LoopOnce;exports.LoopRepeat=LoopRepeat;exports.LoopPingPong=LoopPingPong;exports.InterpolateDiscrete=InterpolateDiscrete;exports.InterpolateLinear=InterpolateLinear;exports.InterpolateSmooth=InterpolateSmooth;exports.ZeroCurvatureEnding=ZeroCurvatureEnding;exports.ZeroSlopeEnding=ZeroSlopeEnding;exports.WrapAroundEnding=WrapAroundEnding;exports.TrianglesDrawMode=TrianglesDrawMode;exports.TriangleStripDrawMode=TriangleStripDrawMode;exports.TriangleFanDrawMode=TriangleFanDrawMode;exports.LinearEncoding=LinearEncoding;exports.sRGBEncoding=sRGBEncoding;exports.GammaEncoding=GammaEncoding;exports.RGBEEncoding=RGBEEncoding;exports.LogLuvEncoding=LogLuvEncoding;exports.RGBM7Encoding=RGBM7Encoding;exports.RGBM16Encoding=RGBM16Encoding;exports.RGBDEncoding=RGBDEncoding;exports.BasicDepthPacking=BasicDepthPacking;exports.RGBADepthPacking=RGBADepthPacking;exports.CubeGeometry=BoxGeometry;exports.Face4=Face4;exports.LineStrip=LineStrip;exports.LinePieces=LinePieces;exports.MeshFaceMaterial=MeshFaceMaterial;exports.MultiMaterial=MultiMaterial;exports.PointCloud=PointCloud;exports.Particle=Particle;exports.ParticleSystem=ParticleSystem;exports.PointCloudMaterial=PointCloudMaterial;exports.ParticleBasicMaterial=ParticleBasicMaterial;exports.ParticleSystemMaterial=ParticleSystemMaterial;exports.Vertex=Vertex;exports.DynamicBufferAttribute=DynamicBufferAttribute;exports.Int8Attribute=Int8Attribute;exports.Uint8Attribute=Uint8Attribute;exports.Uint8ClampedAttribute=Uint8ClampedAttribute;exports.Int16Attribute=Int16Attribute;exports.Uint16Attribute=Uint16Attribute;exports.Int32Attribute=Int32Attribute;exports.Uint32Attribute=Uint32Attribute;exports.Float32Attribute=Float32Attribute;exports.Float64Attribute=Float64Attribute;exports.ClosedSplineCurve3=ClosedSplineCurve3;exports.SplineCurve3=SplineCurve3;exports.Spline=Spline;exports.BoundingBoxHelper=BoundingBoxHelper;exports.EdgesHelper=EdgesHelper;exports.WireframeHelper=WireframeHelper;exports.XHRLoader=XHRLoader;exports.BinaryTextureLoader=BinaryTextureLoader;exports.GeometryUtils=GeometryUtils;exports.ImageUtils=ImageUtils;exports.Projector=Projector;exports.CanvasRenderer=CanvasRenderer;Object.defineProperty(exports,"__esModule",{value:true})})},{}],42:[function(_dereq_,module,exports){THREE.ColladaLoader=function(){var COLLADA=null;var scene=null;var visualScene;var kinematicsModel;var readyCallbackFunc=null;var sources={};var images={};var animations={};var controllers={};var geometries={};var materials={};var effects={};var cameras={};var lights={};var animData;var kinematics;var visualScenes;var kinematicsModels;var baseUrl;var morphs;var skins;var flip_uv=true;var preferredShading=THREE.SmoothShading;var options={centerGeometry:false,convertUpAxis:false,subdivideFaces:true,upAxis:"Y",defaultEnvMap:null};var colladaUnit=1;var colladaUp="Y";var upConversion=null;function load(url,readyCallback,progressCallback,failCallback){var length=0;if(document.implementation&&document.implementation.createDocument){var request=new XMLHttpRequest;request.onreadystatechange=function(){if(request.readyState===4){if(request.status===0||request.status===200){if(request.response){readyCallbackFunc=readyCallback;parse(request.response,undefined,url)}else{if(failCallback){failCallback({type:"error",url:url})}else{console.error("ColladaLoader: Empty or non-existing file ("+url+")")}}}else{if(failCallback){failCallback({type:"error",url:url})}else{console.error("ColladaLoader: Couldn't load \""+url+'" ('+request.status+")")}}}else if(request.readyState===3){if(progressCallback){if(length===0){length=request.getResponseHeader("Content-Length")}progressCallback({total:length,loaded:request.responseText.length})}}};request.open("GET",url,true);request.send(null)}else{alert("Don't know how to parse XML!")}}function parse(text,callBack,url){COLLADA=(new DOMParser).parseFromString(text,"text/xml");callBack=callBack||readyCallbackFunc;if(url!==undefined){var parts=url.split("/");parts.pop();baseUrl=(parts.length<1?".":parts.join("/"))+"/"}parseAsset();setUpConversion();images=parseLib("library_images image",_Image,"image");materials=parseLib("library_materials material",Material,"material");effects=parseLib("library_effects effect",Effect,"effect");geometries=parseLib("library_geometries geometry",Geometry,"geometry");cameras=parseLib("library_cameras camera",Camera,"camera");lights=parseLib("library_lights light",Light,"light");controllers=parseLib("library_controllers controller",Controller,"controller");animations=parseLib("library_animations animation",Animation,"animation");visualScenes=parseLib("library_visual_scenes visual_scene",VisualScene,"visual_scene");kinematicsModels=parseLib("library_kinematics_models kinematics_model",KinematicsModel,"kinematics_model");morphs=[];skins=[];visualScene=parseScene();scene=new THREE.Group;for(var i=0;i<visualScene.nodes.length;i++){scene.add(createSceneGraph(visualScene.nodes[i]))}scene.scale.multiplyScalar(colladaUnit);createAnimations();kinematicsModel=parseKinematicsModel();createKinematics();var result={scene:scene,morphs:morphs,skins:skins,animations:animData,kinematics:kinematics,dae:{images:images,materials:materials,cameras:cameras,lights:lights,effects:effects,geometries:geometries,controllers:controllers,animations:animations,visualScenes:visualScenes,visualScene:visualScene,scene:visualScene,kinematicsModels:kinematicsModels,kinematicsModel:kinematicsModel}};if(callBack){callBack(result)}return result}function setPreferredShading(shading){preferredShading=shading}function parseAsset(){var elements=COLLADA.querySelectorAll("asset");var element=elements[0];if(element&&element.childNodes){for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];switch(child.nodeName){case"unit":var meter=child.getAttribute("meter");if(meter){colladaUnit=parseFloat(meter)}break;case"up_axis":colladaUp=child.textContent.charAt(0);break}}}}function parseLib(q,classSpec,prefix){var elements=COLLADA.querySelectorAll(q);var lib={};var i=0;var elementsLength=elements.length;for(var j=0;j<elementsLength;j++){var element=elements[j];var daeElement=(new classSpec).parse(element);if(!daeElement.id||daeElement.id.length===0)daeElement.id=prefix+i++;lib[daeElement.id]=daeElement}return lib}function parseScene(){var sceneElement=COLLADA.querySelectorAll("scene instance_visual_scene")[0];if(sceneElement){var url=sceneElement.getAttribute("url").replace(/^#/,"");return visualScenes[url.length>0?url:"visual_scene0"]}else{return null}}function parseKinematicsModel(){var kinematicsModelElement=COLLADA.querySelectorAll("instance_kinematics_model")[0];if(kinematicsModelElement){var url=kinematicsModelElement.getAttribute("url").replace(/^#/,"");return kinematicsModels[url.length>0?url:"kinematics_model0"]}else{return null}}function createAnimations(){animData=[];recurseHierarchy(scene)}function recurseHierarchy(node){var n=visualScene.getChildById(node.colladaId,true),newData=null;if(n&&n.keys){newData={fps:60,hierarchy:[{node:n,keys:n.keys,sids:n.sids}],node:node,name:"animation_"+node.name,length:0};animData.push(newData);for(var i=0,il=n.keys.length;i<il;i++){newData.length=Math.max(newData.length,n.keys[i].time)}}else{newData={hierarchy:[{keys:[],sids:[]}]}}for(var i=0,il=node.children.length;i<il;i++){var d=recurseHierarchy(node.children[i]);for(var j=0,jl=d.hierarchy.length;j<jl;j++){newData.hierarchy.push({keys:[],sids:[]})}}return newData}function calcAnimationBounds(){var start=1e6;var end=-start;var frames=0;var ID;for(var id in animations){var animation=animations[id];ID=ID||animation.id;for(var i=0;i<animation.sampler.length;i++){var sampler=animation.sampler[i];sampler.create();start=Math.min(start,sampler.startTime);end=Math.max(end,sampler.endTime);frames=Math.max(frames,sampler.input.length)}}return{start:start,end:end,frames:frames,ID:ID}}function createMorph(geometry,ctrl){var morphCtrl=ctrl instanceof InstanceController?controllers[ctrl.url]:ctrl;if(!morphCtrl||!morphCtrl.morph){console.log("could not find morph controller!");return}var morph=morphCtrl.morph;for(var i=0;i<morph.targets.length;i++){var target_id=morph.targets[i];var daeGeometry=geometries[target_id];if(!daeGeometry.mesh||!daeGeometry.mesh.primitives||!daeGeometry.mesh.primitives.length){continue}var target=daeGeometry.mesh.primitives[0].geometry;if(target.vertices.length===geometry.vertices.length){geometry.morphTargets.push({name:"target_1",vertices:target.vertices})}}geometry.morphTargets.push({name:"target_Z",vertices:geometry.vertices})}function createSkin(geometry,ctrl,applyBindShape){var skinCtrl=controllers[ctrl.url];if(!skinCtrl||!skinCtrl.skin){console.log("could not find skin controller!");return}if(!ctrl.skeleton||!ctrl.skeleton.length){console.log("could not find the skeleton for the skin!");return}var skin=skinCtrl.skin;var skeleton=visualScene.getChildById(ctrl.skeleton[0]);var hierarchy=[];applyBindShape=applyBindShape!==undefined?applyBindShape:true;var bones=[];geometry.skinWeights=[];geometry.skinIndices=[];if(applyBindShape){for(var i=0;i<geometry.vertices.length;i++){geometry.vertices[i].applyMatrix4(skin.bindShapeMatrix)}}}function setupSkeleton(node,bones,frame,parent){node.world=node.world||new THREE.Matrix4;node.localworld=node.localworld||new THREE.Matrix4;node.world.copy(node.matrix);node.localworld.copy(node.matrix);if(node.channels&&node.channels.length){var channel=node.channels[0];var m=channel.sampler.output[frame];if(m instanceof THREE.Matrix4){node.world.copy(m);node.localworld.copy(m);if(frame===0)node.matrix.copy(m)}}if(parent){node.world.multiplyMatrices(parent,node.world)}bones.push(node);for(var i=0;i<node.nodes.length;i++){setupSkeleton(node.nodes[i],bones,frame,node.world)}}function setupSkinningMatrices(bones,skin){for(var i=0;i<bones.length;i++){var bone=bones[i];var found=-1;if(bone.type!="JOINT")continue;for(var j=0;j<skin.joints.length;j++){if(bone.sid===skin.joints[j]){found=j;break}}if(found>=0){var inv=skin.invBindMatrices[found];bone.invBindMatrix=inv;bone.skinningMatrix=new THREE.Matrix4;bone.skinningMatrix.multiplyMatrices(bone.world,inv);bone.animatrix=new THREE.Matrix4;bone.animatrix.copy(bone.localworld);bone.weights=[];for(var j=0;j<skin.weights.length;j++){for(var k=0;k<skin.weights[j].length;k++){var w=skin.weights[j][k];if(w.joint===found){bone.weights.push(w)}}}}else{console.warn("ColladaLoader: Could not find joint '"+bone.sid+"'.");bone.skinningMatrix=new THREE.Matrix4;bone.weights=[]}}}function flattenSkeleton(skeleton){var list=[];var walk=function(parentid,node,list){var bone={};bone.name=node.sid;bone.parent=parentid;bone.matrix=node.matrix;var data=[new THREE.Vector3,new THREE.Quaternion,new THREE.Vector3];bone.matrix.decompose(data[0],data[1],data[2]);bone.pos=[data[0].x,data[0].y,data[0].z];bone.scl=[data[2].x,data[2].y,data[2].z];bone.rotq=[data[1].x,data[1].y,data[1].z,data[1].w];list.push(bone);for(var i in node.nodes){walk(node.sid,node.nodes[i],list)}};walk(-1,skeleton,list);return list}function skinToBindPose(geometry,skeleton,skinController){var bones=[];setupSkeleton(skeleton,bones,-1);setupSkinningMatrices(bones,skinController.skin);var v=new THREE.Vector3;var skinned=[];for(var i=0;i<geometry.vertices.length;i++){skinned.push(new THREE.Vector3)}for(i=0;i<bones.length;i++){if(bones[i].type!="JOINT")continue;for(var j=0;j<bones[i].weights.length;j++){var w=bones[i].weights[j];var vidx=w.index;var weight=w.weight;var o=geometry.vertices[vidx];var s=skinned[vidx];v.x=o.x;v.y=o.y;v.z=o.z;v.applyMatrix4(bones[i].skinningMatrix);s.x+=v.x*weight;s.y+=v.y*weight;s.z+=v.z*weight}}for(var i=0;i<geometry.vertices.length;i++){geometry.vertices[i]=skinned[i]}}function applySkin(geometry,instanceCtrl,frame){if(frame===undefined)frame=40;var skinController=controllers[instanceCtrl.url];if(!skinController||!skinController.skin){console.log("ColladaLoader: Could not find skin controller.");return}if(!instanceCtrl.skeleton||!instanceCtrl.skeleton.length){console.log("ColladaLoader: Could not find the skeleton for the skin. ");return}var animationBounds=calcAnimationBounds();var skeleton=visualScene.getChildById(instanceCtrl.skeleton[0],true)||visualScene.getChildBySid(instanceCtrl.skeleton[0],true);var bonelist=flattenSkeleton(skeleton);var joints=skinController.skin.joints;var sortedbones=[];for(var i=0;i<joints.length;i++){for(var j=0;j<bonelist.length;j++){if(bonelist[j].name===joints[i]){sortedbones[i]=bonelist[j]}}}for(var i=0;i<sortedbones.length;i++){for(var j=0;j<sortedbones.length;j++){if(sortedbones[i].parent===sortedbones[j].name){sortedbones[i].parent=j}}}var i,j,w,vidx,weight;var v=new THREE.Vector3,o,s;for(i=0;i<geometry.vertices.length;i++){geometry.vertices[i].applyMatrix4(skinController.skin.bindShapeMatrix)}var skinIndices=[];var skinWeights=[];var weights=skinController.skin.weights;for(var i=0;i<weights.length;i++){var indicies=new THREE.Vector4(weights[i][0]?weights[i][0].joint:0,weights[i][1]?weights[i][1].joint:0,weights[i][2]?weights[i][2].joint:0,weights[i][3]?weights[i][3].joint:0);var weight=new THREE.Vector4(weights[i][0]?weights[i][0].weight:0,weights[i][1]?weights[i][1].weight:0,weights[i][2]?weights[i][2].weight:0,weights[i][3]?weights[i][3].weight:0);skinIndices.push(indicies);skinWeights.push(weight)}geometry.skinIndices=skinIndices;geometry.skinWeights=skinWeights;geometry.bones=sortedbones;var animationdata={name:animationBounds.ID,fps:30,length:animationBounds.frames/30,hierarchy:[]};for(var j=0;j<sortedbones.length;j++){animationdata.hierarchy.push({parent:sortedbones[j].parent,name:sortedbones[j].name,keys:[]})}console.log("ColladaLoader:",animationBounds.ID+" has "+sortedbones.length+" bones.");skinToBindPose(geometry,skeleton,skinController);for(frame=0;frame<animationBounds.frames;frame++){var bones=[];var skinned=[];setupSkeleton(skeleton,bones,frame);setupSkinningMatrices(bones,skinController.skin);for(var i=0;i<bones.length;i++){for(var j=0;j<animationdata.hierarchy.length;j++){if(animationdata.hierarchy[j].name===bones[i].sid){var key={};key.time=frame/30;key.matrix=bones[i].animatrix;if(frame===0)bones[i].matrix=key.matrix;var data=[new THREE.Vector3,new THREE.Quaternion,new THREE.Vector3];key.matrix.decompose(data[0],data[1],data[2]);key.pos=[data[0].x,data[0].y,data[0].z];key.scl=[data[2].x,data[2].y,data[2].z];key.rot=data[1];animationdata.hierarchy[j].keys.push(key)}}}geometry.animation=animationdata}}function createKinematics(){if(kinematicsModel&&kinematicsModel.joints.length===0){kinematics=undefined;
return}var jointMap={};var _addToMap=function(jointIndex,parentVisualElement){var parentVisualElementId=parentVisualElement.getAttribute("id");var colladaNode=visualScene.getChildById(parentVisualElementId,true);var joint=kinematicsModel.joints[jointIndex];scene.traverse(function(node){if(node.colladaId==parentVisualElementId){jointMap[jointIndex]={node:node,transforms:colladaNode.transforms,joint:joint,position:joint.zeroPosition}}})};kinematics={joints:kinematicsModel&&kinematicsModel.joints,getJointValue:function(jointIndex){var jointData=jointMap[jointIndex];if(jointData){return jointData.position}else{console.log("getJointValue: joint "+jointIndex+" doesn't exist")}},setJointValue:function(jointIndex,value){var jointData=jointMap[jointIndex];if(jointData){var joint=jointData.joint;if(value>joint.limits.max||value<joint.limits.min){console.log("setJointValue: joint "+jointIndex+" value "+value+" outside of limits (min: "+joint.limits.min+", max: "+joint.limits.max+")")}else if(joint.static){console.log("setJointValue: joint "+jointIndex+" is static")}else{var threejsNode=jointData.node;var axis=joint.axis;var transforms=jointData.transforms;var matrix=new THREE.Matrix4;var m1=new THREE.Matrix4;for(i=0;i<transforms.length;i++){var transform=transforms[i];if(transform.sid&&transform.sid.indexOf("joint"+jointIndex)!==-1){switch(joint.type){case"revolute":matrix.multiply(m1.makeRotationAxis(axis,THREE.Math.degToRad(value)));break;case"prismatic":matrix.multiply(m1.makeTranslation(axis.x*value,axis.y*value,axis.z*value));break;default:console.warn("setJointValue: unknown joint type: "+joint.type);break}}else{switch(transform.type){case"matrix":matrix.multiply(transform.obj);break;case"translate":matrix.multiply(m1.makeTranslation(transform.obj.x,transform.obj.y,transform.obj.z));break;case"rotate":matrix.multiply(m1.makeRotationAxis(transform.obj,transform.angle));break}}}var elementsFloat32Arr=matrix.elements;var elements=Array.prototype.slice.call(elementsFloat32Arr);var elementsRowMajor=[elements[0],elements[4],elements[8],elements[12],elements[1],elements[5],elements[9],elements[13],elements[2],elements[6],elements[10],elements[14],elements[3],elements[7],elements[11],elements[15]];threejsNode.matrix.set.apply(threejsNode.matrix,elementsRowMajor);threejsNode.matrix.decompose(threejsNode.position,threejsNode.quaternion,threejsNode.scale);jointMap[jointIndex].position=value}}else{console.log("setJointValue: joint "+jointIndex+" doesn't exist")}}};var element=COLLADA.querySelector("scene instance_kinematics_scene");if(element){for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"bind_joint_axis":var visualTarget=child.getAttribute("target").split("/").pop();var axis=child.querySelector("axis param").textContent;var jointIndex=parseInt(axis.split("joint").pop().split(".")[0]);var visualTargetElement=COLLADA.querySelector('[sid="'+visualTarget+'"]');if(visualTargetElement){var parentVisualElement=visualTargetElement.parentElement;_addToMap(jointIndex,parentVisualElement)}break;default:break}}}}function createSceneGraph(node,parent){var obj=new THREE.Object3D;var skinned=false;var skinController;var morphController;var i,j;for(i=0;i<node.controllers.length;i++){var controller=controllers[node.controllers[i].url];switch(controller.type){case"skin":if(geometries[controller.skin.source]){var inst_geom=new InstanceGeometry;inst_geom.url=controller.skin.source;inst_geom.instance_material=node.controllers[i].instance_material;node.geometries.push(inst_geom);skinned=true;skinController=node.controllers[i]}else if(controllers[controller.skin.source]){var second=controllers[controller.skin.source];morphController=second;if(second.morph&&geometries[second.morph.source]){var inst_geom=new InstanceGeometry;inst_geom.url=second.morph.source;inst_geom.instance_material=node.controllers[i].instance_material;node.geometries.push(inst_geom)}}break;case"morph":if(geometries[controller.morph.source]){var inst_geom=new InstanceGeometry;inst_geom.url=controller.morph.source;inst_geom.instance_material=node.controllers[i].instance_material;node.geometries.push(inst_geom);morphController=node.controllers[i]}console.log("ColladaLoader: Morph-controller partially supported.");default:break}}var double_sided_materials={};for(i=0;i<node.geometries.length;i++){var instance_geometry=node.geometries[i];var instance_materials=instance_geometry.instance_material;var geometry=geometries[instance_geometry.url];var used_materials={};var used_materials_array=[];var num_materials=0;var first_material;if(geometry){if(!geometry.mesh||!geometry.mesh.primitives)continue;if(obj.name.length===0){obj.name=geometry.id}if(instance_materials){for(j=0;j<instance_materials.length;j++){var instance_material=instance_materials[j];var mat=materials[instance_material.target];var effect_id=mat.instance_effect.url;var shader=effects[effect_id].shader;var material3js=shader.material;if(geometry.doubleSided){if(!(instance_material.symbol in double_sided_materials)){var _copied_material=material3js.clone();_copied_material.side=THREE.DoubleSide;double_sided_materials[instance_material.symbol]=_copied_material}material3js=double_sided_materials[instance_material.symbol]}material3js.opacity=!material3js.opacity?1:material3js.opacity;used_materials[instance_material.symbol]=num_materials;used_materials_array.push(material3js);first_material=material3js;first_material.name=mat.name===null||mat.name===""?mat.id:mat.name;num_materials++}}var mesh;var material=first_material||new THREE.MeshLambertMaterial({color:14540253,side:geometry.doubleSided?THREE.DoubleSide:THREE.FrontSide});var geom=geometry.mesh.geometry3js;if(num_materials>1){material=new THREE.MultiMaterial(used_materials_array);for(j=0;j<geom.faces.length;j++){var face=geom.faces[j];face.materialIndex=used_materials[face.daeMaterial]}}if(skinController!==undefined){applySkin(geom,skinController);if(geom.morphTargets.length>0){material.morphTargets=true;material.skinning=false}else{material.morphTargets=false;material.skinning=true}mesh=new THREE.SkinnedMesh(geom,material,false);mesh.name="skin_"+skins.length;skins.push(mesh)}else if(morphController!==undefined){createMorph(geom,morphController);material.morphTargets=true;mesh=new THREE.Mesh(geom,material);mesh.name="morph_"+morphs.length;morphs.push(mesh)}else{if(geom.isLineStrip===true){mesh=new THREE.Line(geom)}else{mesh=new THREE.Mesh(geom,material)}}obj.add(mesh)}}for(i=0;i<node.cameras.length;i++){var instance_camera=node.cameras[i];var cparams=cameras[instance_camera.url];var cam=new THREE.PerspectiveCamera(cparams.yfov,parseFloat(cparams.aspect_ratio),parseFloat(cparams.znear),parseFloat(cparams.zfar));obj.add(cam)}for(i=0;i<node.lights.length;i++){var light=null;var instance_light=node.lights[i];var lparams=lights[instance_light.url];if(lparams&&lparams.technique){var color=lparams.color.getHex();var intensity=lparams.intensity;var distance=lparams.distance;var angle=lparams.falloff_angle;switch(lparams.technique){case"directional":light=new THREE.DirectionalLight(color,intensity,distance);light.position.set(0,0,1);break;case"point":light=new THREE.PointLight(color,intensity,distance);break;case"spot":light=new THREE.SpotLight(color,intensity,distance,angle);light.position.set(0,0,1);break;case"ambient":light=new THREE.AmbientLight(color);break}}if(light){obj.add(light)}}obj.name=node.name||node.id||"";obj.colladaId=node.id||"";obj.layer=node.layer||"";obj.matrix=node.matrix;obj.matrix.decompose(obj.position,obj.quaternion,obj.scale);if(options.centerGeometry&&obj.geometry){var delta=obj.geometry.center();delta.multiply(obj.scale);delta.applyQuaternion(obj.quaternion);obj.position.sub(delta)}for(i=0;i<node.nodes.length;i++){obj.add(createSceneGraph(node.nodes[i],node))}return obj}function getJointId(skin,id){for(var i=0;i<skin.joints.length;i++){if(skin.joints[i]===id){return i}}}function getLibraryNode(id){var nodes=COLLADA.querySelectorAll("library_nodes node");for(var i=0;i<nodes.length;i++){var attObj=nodes[i].attributes.getNamedItem("id");if(attObj&&attObj.value===id){return nodes[i]}}return undefined}function getChannelsForNode(node){var channels=[];var startTime=1e6;var endTime=-1e6;for(var id in animations){var animation=animations[id];for(var i=0;i<animation.channel.length;i++){var channel=animation.channel[i];var sampler=animation.sampler[i];var id=channel.target.split("/")[0];if(id==node.id){sampler.create();channel.sampler=sampler;startTime=Math.min(startTime,sampler.startTime);endTime=Math.max(endTime,sampler.endTime);channels.push(channel)}}}if(channels.length){node.startTime=startTime;node.endTime=endTime}return channels}function calcFrameDuration(node){var minT=1e7;for(var i=0;i<node.channels.length;i++){var sampler=node.channels[i].sampler;for(var j=0;j<sampler.input.length-1;j++){var t0=sampler.input[j];var t1=sampler.input[j+1];minT=Math.min(minT,t1-t0)}}return minT}function calcMatrixAt(node,t){var animated={};var i,j;for(i=0;i<node.channels.length;i++){var channel=node.channels[i];animated[channel.sid]=channel}var matrix=new THREE.Matrix4;for(i=0;i<node.transforms.length;i++){var transform=node.transforms[i];var channel=animated[transform.sid];if(channel!==undefined){var sampler=channel.sampler;var value;for(j=0;j<sampler.input.length-1;j++){if(sampler.input[j+1]>t){value=sampler.output[j];break}}if(value!==undefined){if(value instanceof THREE.Matrix4){matrix.multiplyMatrices(matrix,value)}else{matrix.multiplyMatrices(matrix,transform.matrix)}}else{matrix.multiplyMatrices(matrix,transform.matrix)}}else{matrix.multiplyMatrices(matrix,transform.matrix)}}return matrix}function bakeAnimations(node){if(node.channels&&node.channels.length){var keys=[],sids=[];for(var i=0,il=node.channels.length;i<il;i++){var channel=node.channels[i],fullSid=channel.fullSid,sampler=channel.sampler,input=sampler.input,transform=node.getTransformBySid(channel.sid),member;if(channel.arrIndices){member=[];for(var j=0,jl=channel.arrIndices.length;j<jl;j++){member[j]=getConvertedIndex(channel.arrIndices[j])}}else{member=getConvertedMember(channel.member)}if(transform){if(sids.indexOf(fullSid)===-1){sids.push(fullSid)}for(var j=0,jl=input.length;j<jl;j++){var time=input[j],data=sampler.getData(transform.type,j,member),key=findKey(keys,time);if(!key){key=new Key(time);var timeNdx=findTimeNdx(keys,time);keys.splice(timeNdx===-1?keys.length:timeNdx,0,key)}key.addTarget(fullSid,transform,member,data)}}else{console.log('Could not find transform "'+channel.sid+'" in node '+node.id)}}for(var i=0;i<sids.length;i++){var sid=sids[i];for(var j=0;j<keys.length;j++){var key=keys[j];if(!key.hasTarget(sid)){interpolateKeys(keys,key,j,sid)}}}node.keys=keys;node.sids=sids}}function findKey(keys,time){var retVal=null;for(var i=0,il=keys.length;i<il&&retVal===null;i++){var key=keys[i];if(key.time===time){retVal=key}else if(key.time>time){break}}return retVal}function findTimeNdx(keys,time){var ndx=-1;for(var i=0,il=keys.length;i<il&&ndx===-1;i++){var key=keys[i];if(key.time>=time){ndx=i}}return ndx}function interpolateKeys(keys,key,ndx,fullSid){var prevKey=getPrevKeyWith(keys,fullSid,ndx?ndx-1:0),nextKey=getNextKeyWith(keys,fullSid,ndx+1);if(prevKey&&nextKey){var scale=(key.time-prevKey.time)/(nextKey.time-prevKey.time),prevTarget=prevKey.getTarget(fullSid),nextData=nextKey.getTarget(fullSid).data,prevData=prevTarget.data,data;if(prevTarget.type==="matrix"){data=prevData}else if(prevData.length){data=[];for(var i=0;i<prevData.length;++i){data[i]=prevData[i]+(nextData[i]-prevData[i])*scale}}else{data=prevData+(nextData-prevData)*scale}key.addTarget(fullSid,prevTarget.transform,prevTarget.member,data)}}function getNextKeyWith(keys,fullSid,ndx){for(;ndx<keys.length;ndx++){var key=keys[ndx];if(key.hasTarget(fullSid)){return key}}return null}function getPrevKeyWith(keys,fullSid,ndx){ndx=ndx>=0?ndx:ndx+keys.length;for(;ndx>=0;ndx--){var key=keys[ndx];if(key.hasTarget(fullSid)){return key}}return null}function _Image(){this.id="";this.init_from=""}_Image.prototype.parse=function(element){this.id=element.getAttribute("id");for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeName==="init_from"){this.init_from=child.textContent}}return this};function Controller(){this.id="";this.name="";this.type="";this.skin=null;this.morph=null}Controller.prototype.parse=function(element){this.id=element.getAttribute("id");this.name=element.getAttribute("name");this.type="none";for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];switch(child.nodeName){case"skin":this.skin=(new Skin).parse(child);this.type=child.nodeName;break;case"morph":this.morph=(new Morph).parse(child);this.type=child.nodeName;break;default:break}}return this};function Morph(){this.method=null;this.source=null;this.targets=null;this.weights=null}Morph.prototype.parse=function(element){var sources={};var inputs=[];var i;this.method=element.getAttribute("method");this.source=element.getAttribute("source").replace(/^#/,"");for(i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"source":var source=(new Source).parse(child);sources[source.id]=source;break;case"targets":inputs=this.parseInputs(child);break;default:console.log(child.nodeName);break}}for(i=0;i<inputs.length;i++){var input=inputs[i];var source=sources[input.source];switch(input.semantic){case"MORPH_TARGET":this.targets=source.read();break;case"MORPH_WEIGHT":this.weights=source.read();break;default:break}}return this};Morph.prototype.parseInputs=function(element){var inputs=[];for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"input":inputs.push((new Input).parse(child));break;default:break}}return inputs};function Skin(){this.source="";this.bindShapeMatrix=null;this.invBindMatrices=[];this.joints=[];this.weights=[]}Skin.prototype.parse=function(element){var sources={};var joints,weights;this.source=element.getAttribute("source").replace(/^#/,"");this.invBindMatrices=[];this.joints=[];this.weights=[];for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"bind_shape_matrix":var f=_floats(child.textContent);this.bindShapeMatrix=getConvertedMat4(f);break;case"source":var src=(new Source).parse(child);sources[src.id]=src;break;case"joints":joints=child;break;case"vertex_weights":weights=child;break;default:console.log(child.nodeName);break}}this.parseJoints(joints,sources);this.parseWeights(weights,sources);return this};Skin.prototype.parseJoints=function(element,sources){for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"input":var input=(new Input).parse(child);var source=sources[input.source];if(input.semantic==="JOINT"){this.joints=source.read()}else if(input.semantic==="INV_BIND_MATRIX"){this.invBindMatrices=source.read()}break;default:break}}};Skin.prototype.parseWeights=function(element,sources){var v,vcount,inputs=[];for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"input":inputs.push((new Input).parse(child));break;case"v":v=_ints(child.textContent);break;case"vcount":vcount=_ints(child.textContent);break;default:break}}var index=0;for(var i=0;i<vcount.length;i++){var numBones=vcount[i];var vertex_weights=[];for(var j=0;j<numBones;j++){var influence={};for(var k=0;k<inputs.length;k++){var input=inputs[k];var value=v[index+input.offset];switch(input.semantic){case"JOINT":influence.joint=value;break;case"WEIGHT":influence.weight=sources[input.source].data[value];break;default:break}}vertex_weights.push(influence);index+=inputs.length}for(var j=0;j<vertex_weights.length;j++){vertex_weights[j].index=i}this.weights.push(vertex_weights)}};function VisualScene(){this.id="";this.name="";this.nodes=[];this.scene=new THREE.Group}VisualScene.prototype.getChildById=function(id,recursive){for(var i=0;i<this.nodes.length;i++){var node=this.nodes[i].getChildById(id,recursive);if(node){return node}}return null};VisualScene.prototype.getChildBySid=function(sid,recursive){for(var i=0;i<this.nodes.length;i++){var node=this.nodes[i].getChildBySid(sid,recursive);if(node){return node}}return null};VisualScene.prototype.parse=function(element){this.id=element.getAttribute("id");this.name=element.getAttribute("name");this.nodes=[];for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"node":this.nodes.push((new Node).parse(child));break;default:break}}return this};function Node(){this.id="";this.name="";this.sid="";this.nodes=[];this.controllers=[];this.transforms=[];this.geometries=[];this.channels=[];this.matrix=new THREE.Matrix4}Node.prototype.getChannelForTransform=function(transformSid){for(var i=0;i<this.channels.length;i++){var channel=this.channels[i];var parts=channel.target.split("/");var id=parts.shift();var sid=parts.shift();var dotSyntax=sid.indexOf(".")>=0;var arrSyntax=sid.indexOf("(")>=0;var arrIndices;if(dotSyntax){parts=sid.split(".");sid=parts.shift()}else if(arrSyntax){arrIndices=sid.split("(");sid=arrIndices.shift();for(var j=0;j<arrIndices.length;j++){arrIndices[j]=parseInt(arrIndices[j].replace(/\)/,""))}}if(sid===transformSid){channel.info={sid:sid,dotSyntax:dotSyntax,arrSyntax:arrSyntax,arrIndices:arrIndices};return channel}}return null};Node.prototype.getChildById=function(id,recursive){if(this.id===id){return this}if(recursive){for(var i=0;i<this.nodes.length;i++){var n=this.nodes[i].getChildById(id,recursive);if(n){return n}}}return null};Node.prototype.getChildBySid=function(sid,recursive){if(this.sid===sid){return this}if(recursive){for(var i=0;i<this.nodes.length;i++){var n=this.nodes[i].getChildBySid(sid,recursive);if(n){return n}}}return null};Node.prototype.getTransformBySid=function(sid){for(var i=0;i<this.transforms.length;i++){if(this.transforms[i].sid===sid)return this.transforms[i]}return null};Node.prototype.parse=function(element){var url;this.id=element.getAttribute("id");this.sid=element.getAttribute("sid");this.name=element.getAttribute("name");this.type=element.getAttribute("type");this.layer=element.getAttribute("layer");this.type=this.type==="JOINT"?this.type:"NODE";this.nodes=[];this.transforms=[];this.geometries=[];this.cameras=[];this.lights=[];this.controllers=[];this.matrix=new THREE.Matrix4;for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"node":this.nodes.push((new Node).parse(child));break;case"instance_camera":this.cameras.push((new InstanceCamera).parse(child));break;case"instance_controller":this.controllers.push((new InstanceController).parse(child));break;case"instance_geometry":this.geometries.push((new InstanceGeometry).parse(child));break;case"instance_light":this.lights.push((new InstanceLight).parse(child));break;case"instance_node":url=child.getAttribute("url").replace(/^#/,"");var iNode=getLibraryNode(url);if(iNode){this.nodes.push((new Node).parse(iNode))}break;case"rotate":case"translate":case"scale":case"matrix":case"lookat":case"skew":this.transforms.push((new Transform).parse(child));break;case"extra":break;default:console.log(child.nodeName);break}}this.channels=getChannelsForNode(this);bakeAnimations(this);this.updateMatrix();return this};Node.prototype.updateMatrix=function(){this.matrix.identity();for(var i=0;i<this.transforms.length;i++){this.transforms[i].apply(this.matrix)}};function Transform(){this.sid="";this.type="";this.data=[];this.obj=null}Transform.prototype.parse=function(element){this.sid=element.getAttribute("sid");this.type=element.nodeName;this.data=_floats(element.textContent);this.convert();return this};Transform.prototype.convert=function(){switch(this.type){case"matrix":this.obj=getConvertedMat4(this.data);break;case"rotate":this.angle=THREE.Math.degToRad(this.data[3]);case"translate":fixCoords(this.data,-1);this.obj=new THREE.Vector3(this.data[0],this.data[1],this.data[2]);break;case"scale":fixCoords(this.data,1);this.obj=new THREE.Vector3(this.data[0],this.data[1],this.data[2]);break;default:console.log("Can not convert Transform of type "+this.type);break}};Transform.prototype.apply=function(){var m1=new THREE.Matrix4;return function(matrix){switch(this.type){case"matrix":matrix.multiply(this.obj);break;case"translate":matrix.multiply(m1.makeTranslation(this.obj.x,this.obj.y,this.obj.z));break;case"rotate":matrix.multiply(m1.makeRotationAxis(this.obj,this.angle));break;case"scale":matrix.scale(this.obj);break}}}();Transform.prototype.update=function(data,member){var members=["X","Y","Z","ANGLE"];switch(this.type){case"matrix":if(!member){this.obj.copy(data)}else if(member.length===1){switch(member[0]){case 0:this.obj.n11=data[0];this.obj.n21=data[1];this.obj.n31=data[2];this.obj.n41=data[3];break;case 1:this.obj.n12=data[0];this.obj.n22=data[1];this.obj.n32=data[2];this.obj.n42=data[3];break;case 2:this.obj.n13=data[0];this.obj.n23=data[1];this.obj.n33=data[2];this.obj.n43=data[3];break;case 3:this.obj.n14=data[0];this.obj.n24=data[1];this.obj.n34=data[2];this.obj.n44=data[3];break}}else if(member.length===2){var propName="n"+(member[0]+1)+(member[1]+1);this.obj[propName]=data}else{console.log("Incorrect addressing of matrix in transform.")}break;case"translate":case"scale":if(Object.prototype.toString.call(member)==="[object Array]"){member=members[member[0]]}switch(member){case"X":this.obj.x=data;break;case"Y":this.obj.y=data;break;case"Z":this.obj.z=data;break;default:this.obj.x=data[0];this.obj.y=data[1];this.obj.z=data[2];break}break;case"rotate":if(Object.prototype.toString.call(member)==="[object Array]"){member=members[member[0]]}switch(member){case"X":this.obj.x=data;break;case"Y":this.obj.y=data;break;case"Z":this.obj.z=data;break;case"ANGLE":this.angle=THREE.Math.degToRad(data);break;default:this.obj.x=data[0];this.obj.y=data[1];this.obj.z=data[2];this.angle=THREE.Math.degToRad(data[3]);break}break}};function InstanceController(){this.url="";this.skeleton=[];this.instance_material=[]}InstanceController.prototype.parse=function(element){this.url=element.getAttribute("url").replace(/^#/,"");this.skeleton=[];this.instance_material=[];for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!==1)continue;switch(child.nodeName){case"skeleton":this.skeleton.push(child.textContent.replace(/^#/,""));break;case"bind_material":var instances=child.querySelectorAll("instance_material");for(var j=0;j<instances.length;j++){var instance=instances[j];this.instance_material.push((new InstanceMaterial).parse(instance))}break;case"extra":break;default:break}}return this};function InstanceMaterial(){this.symbol="";this.target=""}InstanceMaterial.prototype.parse=function(element){this.symbol=element.getAttribute("symbol");this.target=element.getAttribute("target").replace(/^#/,"");return this};function InstanceGeometry(){this.url="";this.instance_material=[]}InstanceGeometry.prototype.parse=function(element){this.url=element.getAttribute("url").replace(/^#/,"");this.instance_material=[];for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;if(child.nodeName==="bind_material"){var instances=child.querySelectorAll("instance_material");for(var j=0;j<instances.length;j++){var instance=instances[j];this.instance_material.push((new InstanceMaterial).parse(instance))}break}}return this};function Geometry(){this.id="";this.mesh=null}Geometry.prototype.parse=function(element){this.id=element.getAttribute("id");extractDoubleSided(this,element);for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];switch(child.nodeName){case"mesh":this.mesh=new Mesh(this).parse(child);break;case"extra":break;default:break}}return this};function Mesh(geometry){this.geometry=geometry.id;this.primitives=[];this.vertices=null;this.geometry3js=null}Mesh.prototype.parse=function(element){this.primitives=[];for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];switch(child.nodeName){case"source":_source(child);break;case"vertices":this.vertices=(new Vertices).parse(child);break;case"linestrips":this.primitives.push((new LineStrips).parse(child));break;case"triangles":this.primitives.push((new Triangles).parse(child));break;case"polygons":this.primitives.push((new Polygons).parse(child));break;case"polylist":this.primitives.push((new Polylist).parse(child));break;default:break}}this.geometry3js=new THREE.Geometry;if(this.vertices===null){return this}var vertexData=sources[this.vertices.input["POSITION"].source].data;for(var i=0;i<vertexData.length;i+=3){this.geometry3js.vertices.push(getConvertedVec3(vertexData,i).clone())}for(var i=0;i<this.primitives.length;i++){var primitive=this.primitives[i];primitive.setVertices(this.vertices);this.handlePrimitive(primitive,this.geometry3js)}if(this.geometry3js.calcNormals){this.geometry3js.computeVertexNormals();delete this.geometry3js.calcNormals}return this};Mesh.prototype.handlePrimitive=function(primitive,geom){if(primitive instanceof LineStrips){geom.isLineStrip=true;return}var j,k,pList=primitive.p,inputs=primitive.inputs;var input,index,idx32;var source,numParams;var vcount,vcIndex=0,maxOffset=0;var texture_sets=[];for(j=0;j<inputs.length;j++){input=inputs[j];var offset=input.offset+1;maxOffset=maxOffset<offset?offset:maxOffset;switch(input.semantic){case"TEXCOORD":texture_sets.push(input.set);break}}for(var pCount=0;pCount<pList.length;++pCount){var p=pList[pCount],i=0;while(i<p.length){var vs=[];var ns=[];var ts=null;var cs=[];if(primitive.vcount){vcount=primitive.vcount.length?primitive.vcount[vcIndex++]:primitive.vcount}else{vcount=p.length/maxOffset}for(j=0;j<vcount;j++){for(k=0;k<inputs.length;k++){input=inputs[k];source=sources[input.source];index=p[i+j*maxOffset+input.offset];numParams=source.accessor.params.length;idx32=index*numParams;switch(input.semantic){case"VERTEX":vs.push(index);break;case"NORMAL":ns.push(getConvertedVec3(source.data,idx32));break;case"TEXCOORD":ts=ts||{};if(ts[input.set]===undefined)ts[input.set]=[];ts[input.set].push(new THREE.Vector2(source.data[idx32],source.data[idx32+1]));break;case"COLOR":cs.push((new THREE.Color).setRGB(source.data[idx32],source.data[idx32+1],source.data[idx32+2]));break;default:break}}}if(ns.length===0){input=this.vertices.input.NORMAL;if(input){source=sources[input.source];numParams=source.accessor.params.length;for(var ndx=0,len=vs.length;ndx<len;ndx++){ns.push(getConvertedVec3(source.data,vs[ndx]*numParams))}}else{geom.calcNormals=true}}if(!ts){ts={};input=this.vertices.input.TEXCOORD;if(input){texture_sets.push(input.set);source=sources[input.source];numParams=source.accessor.params.length;for(var ndx=0,len=vs.length;ndx<len;ndx++){idx32=vs[ndx]*numParams;if(ts[input.set]===undefined)ts[input.set]=[];ts[input.set].push(new THREE.Vector2(source.data[idx32],1-source.data[idx32+1]))}}}if(cs.length===0){input=this.vertices.input.COLOR;if(input){source=sources[input.source];numParams=source.accessor.params.length;for(var ndx=0,len=vs.length;ndx<len;ndx++){idx32=vs[ndx]*numParams;cs.push((new THREE.Color).setRGB(source.data[idx32],source.data[idx32+1],source.data[idx32+2]))}}}var face=null,faces=[],uv,uvArr;if(vcount===3){faces.push(new THREE.Face3(vs[0],vs[1],vs[2],ns,cs.length?cs:new THREE.Color))}else if(vcount===4){faces.push(new THREE.Face3(vs[0],vs[1],vs[3],ns.length?[ns[0].clone(),ns[1].clone(),ns[3].clone()]:[],cs.length?[cs[0],cs[1],cs[3]]:new THREE.Color));faces.push(new THREE.Face3(vs[1],vs[2],vs[3],ns.length?[ns[1].clone(),ns[2].clone(),ns[3].clone()]:[],cs.length?[cs[1],cs[2],cs[3]]:new THREE.Color))}else if(vcount>4&&options.subdivideFaces){var clr=cs.length?cs:new THREE.Color,vec1,vec2,vec3,v1,v2,norm;for(k=1;k<vcount-1;){faces.push(new THREE.Face3(vs[0],vs[k],vs[k+1],ns.length?[ns[0].clone(),ns[k++].clone(),ns[k].clone()]:[],clr))}}if(faces.length){for(var ndx=0,len=faces.length;ndx<len;ndx++){face=faces[ndx];face.daeMaterial=primitive.material;geom.faces.push(face);for(k=0;k<texture_sets.length;k++){uv=ts[texture_sets[k]];if(vcount>4){uvArr=[uv[0],uv[ndx+1],uv[ndx+2]]}else if(vcount===4){if(ndx===0){uvArr=[uv[0],uv[1],uv[3]]}else{uvArr=[uv[1].clone(),uv[2],uv[3].clone()]}}else{uvArr=[uv[0],uv[1],uv[2]]}if(geom.faceVertexUvs[k]===undefined){geom.faceVertexUvs[k]=[]}geom.faceVertexUvs[k].push(uvArr)}}}else{console.log("dropped face with vcount "+vcount+" for geometry with id: "+geom.id)}i+=maxOffset*vcount}}};function Polygons(){this.material="";this.count=0;this.inputs=[];this.vcount=null;this.p=[];this.geometry=new THREE.Geometry}Polygons.prototype.setVertices=function(vertices){for(var i=0;i<this.inputs.length;i++){if(this.inputs[i].source===vertices.id){this.inputs[i].source=vertices.input["POSITION"].source}}};Polygons.prototype.parse=function(element){this.material=element.getAttribute("material");this.count=_attr_as_int(element,"count",0);for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];switch(child.nodeName){case"input":this.inputs.push((new Input).parse(element.childNodes[i]));break;case"vcount":this.vcount=_ints(child.textContent);break;case"p":this.p.push(_ints(child.textContent));break;case"ph":console.warn("polygon holes not yet supported!");break;default:break}}return this};function Polylist(){Polygons.call(this);this.vcount=[]}Polylist.prototype=Object.create(Polygons.prototype);Polylist.prototype.constructor=Polylist;function LineStrips(){Polygons.call(this);this.vcount=1}LineStrips.prototype=Object.create(Polygons.prototype);LineStrips.prototype.constructor=LineStrips;function Triangles(){Polygons.call(this);this.vcount=3}Triangles.prototype=Object.create(Polygons.prototype);Triangles.prototype.constructor=Triangles;function Accessor(){this.source="";this.count=0;this.stride=0;this.params=[]}Accessor.prototype.parse=function(element){this.params=[];this.source=element.getAttribute("source");this.count=_attr_as_int(element,"count",0);this.stride=_attr_as_int(element,"stride",0);for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeName==="param"){var param={};param["name"]=child.getAttribute("name");param["type"]=child.getAttribute("type");this.params.push(param)}}return this};function Vertices(){this.input={}}Vertices.prototype.parse=function(element){this.id=element.getAttribute("id");for(var i=0;i<element.childNodes.length;i++){if(element.childNodes[i].nodeName==="input"){var input=(new Input).parse(element.childNodes[i]);this.input[input.semantic]=input}}return this};function Input(){this.semantic="";this.offset=0;this.source="";this.set=0}Input.prototype.parse=function(element){this.semantic=element.getAttribute("semantic");this.source=element.getAttribute("source").replace(/^#/,"");this.set=_attr_as_int(element,"set",-1);this.offset=_attr_as_int(element,"offset",0);if(this.semantic==="TEXCOORD"&&this.set<0){this.set=0}return this};function Source(id){this.id=id;this.type=null}Source.prototype.parse=function(element){this.id=element.getAttribute("id");for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];switch(child.nodeName){case"bool_array":this.data=_bools(child.textContent);this.type=child.nodeName;break;case"float_array":this.data=_floats(child.textContent);this.type=child.nodeName;break;case"int_array":this.data=_ints(child.textContent);this.type=child.nodeName;break;case"IDREF_array":case"Name_array":this.data=_strings(child.textContent);this.type=child.nodeName;break;case"technique_common":for(var j=0;j<child.childNodes.length;j++){if(child.childNodes[j].nodeName==="accessor"){this.accessor=(new Accessor).parse(child.childNodes[j]);break}}break;default:
break}}return this};Source.prototype.read=function(){var result=[];var param=this.accessor.params[0];switch(param.type){case"IDREF":case"Name":case"name":case"float":return this.data;case"float4x4":for(var j=0;j<this.data.length;j+=16){var s=this.data.slice(j,j+16);var m=getConvertedMat4(s);result.push(m)}break;default:console.log("ColladaLoader: Source: Read dont know how to read "+param.type+".");break}return result};function Material(){this.id="";this.name="";this.instance_effect=null}Material.prototype.parse=function(element){this.id=element.getAttribute("id");this.name=element.getAttribute("name");for(var i=0;i<element.childNodes.length;i++){if(element.childNodes[i].nodeName==="instance_effect"){this.instance_effect=(new InstanceEffect).parse(element.childNodes[i]);break}}return this};function ColorOrTexture(){this.color=new THREE.Color;this.color.setRGB(Math.random(),Math.random(),Math.random());this.color.a=1;this.texture=null;this.texcoord=null;this.texOpts=null}ColorOrTexture.prototype.isColor=function(){return this.texture===null};ColorOrTexture.prototype.isTexture=function(){return this.texture!=null};ColorOrTexture.prototype.parse=function(element){if(element.nodeName==="transparent"){this.opaque=element.getAttribute("opaque")}for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"color":var rgba=_floats(child.textContent);this.color=new THREE.Color;this.color.setRGB(rgba[0],rgba[1],rgba[2]);this.color.a=rgba[3];break;case"texture":this.texture=child.getAttribute("texture");this.texcoord=child.getAttribute("texcoord");this.texOpts={offsetU:0,offsetV:0,repeatU:1,repeatV:1,wrapU:1,wrapV:1};this.parseTexture(child);break;default:break}}return this};ColorOrTexture.prototype.parseTexture=function(element){if(!element.childNodes)return this;if(element.childNodes[1]&&element.childNodes[1].nodeName==="extra"){element=element.childNodes[1];if(element.childNodes[1]&&element.childNodes[1].nodeName==="technique"){element=element.childNodes[1]}}for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];switch(child.nodeName){case"offsetU":case"offsetV":case"repeatU":case"repeatV":this.texOpts[child.nodeName]=parseFloat(child.textContent);break;case"wrapU":case"wrapV":if(child.textContent.toUpperCase()==="TRUE"){this.texOpts[child.nodeName]=1}else{this.texOpts[child.nodeName]=parseInt(child.textContent)}break;default:this.texOpts[child.nodeName]=child.textContent;break}}return this};function Shader(type,effect){this.type=type;this.effect=effect;this.material=null}Shader.prototype.parse=function(element){for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"emission":case"diffuse":case"specular":case"transparent":this[child.nodeName]=(new ColorOrTexture).parse(child);break;case"bump":var bumpType=child.getAttribute("bumptype");if(bumpType){if(bumpType.toLowerCase()==="heightfield"){this["bump"]=(new ColorOrTexture).parse(child)}else if(bumpType.toLowerCase()==="normalmap"){this["normal"]=(new ColorOrTexture).parse(child)}else{console.error("Shader.prototype.parse: Invalid value for attribute 'bumptype' ("+bumpType+") - valid bumptypes are 'HEIGHTFIELD' and 'NORMALMAP' - defaulting to 'HEIGHTFIELD'");this["bump"]=(new ColorOrTexture).parse(child)}}else{console.warn("Shader.prototype.parse: Attribute 'bumptype' missing from bump node - defaulting to 'HEIGHTFIELD'");this["bump"]=(new ColorOrTexture).parse(child)}break;case"shininess":case"reflectivity":case"index_of_refraction":case"transparency":var f=child.querySelectorAll("float");if(f.length>0)this[child.nodeName]=parseFloat(f[0].textContent);break;default:break}}this.create();return this};Shader.prototype.create=function(){var props={};var transparent=false;if(this["transparency"]!==undefined&&this["transparent"]!==undefined){var transparentColor=this["transparent"];var transparencyLevel=(this.transparent.color.r+this.transparent.color.g+this.transparent.color.b)/3*this.transparency;if(transparencyLevel>0){transparent=true;props["transparent"]=true;props["opacity"]=1-transparencyLevel}}var keys={diffuse:"map",ambient:"lightMap",specular:"specularMap",emission:"emissionMap",bump:"bumpMap",normal:"normalMap"};for(var prop in this){switch(prop){case"ambient":case"emission":case"diffuse":case"specular":case"bump":case"normal":var cot=this[prop];if(cot instanceof ColorOrTexture){if(cot.isTexture()){var samplerId=cot.texture;var sampler=this.effect.sampler[samplerId];if(sampler!==undefined&&sampler.source!==undefined){var surface=this.effect.surface[sampler.source];if(surface!==undefined){var image=images[surface.init_from];if(image){var url=baseUrl+image.init_from;var texture;var loader=THREE.Loader.Handlers.get(url);if(loader!==null){texture=loader.load(url)}else{texture=new THREE.Texture;loadTextureImage(texture,url)}if(sampler.wrap_s==="MIRROR"){texture.wrapS=THREE.MirroredRepeatWrapping}else if(sampler.wrap_s==="WRAP"||cot.texOpts.wrapU){texture.wrapS=THREE.RepeatWrapping}else{texture.wrapS=THREE.ClampToEdgeWrapping}if(sampler.wrap_t==="MIRROR"){texture.wrapT=THREE.MirroredRepeatWrapping}else if(sampler.wrap_t==="WRAP"||cot.texOpts.wrapV){texture.wrapT=THREE.RepeatWrapping}else{texture.wrapT=THREE.ClampToEdgeWrapping}texture.offset.x=cot.texOpts.offsetU;texture.offset.y=cot.texOpts.offsetV;texture.repeat.x=cot.texOpts.repeatU;texture.repeat.y=cot.texOpts.repeatV;props[keys[prop]]=texture;if(prop==="emission")props["emissive"]=16777215}}}}else if(prop==="diffuse"||!transparent){if(prop==="emission"){props["emissive"]=cot.color.getHex()}else{props[prop]=cot.color.getHex()}}}break;case"shininess":props[prop]=this[prop];break;case"reflectivity":props[prop]=this[prop];if(props[prop]>0)props["envMap"]=options.defaultEnvMap;props["combine"]=THREE.MixOperation;break;case"index_of_refraction":props["refractionRatio"]=this[prop];if(this[prop]!==1)props["envMap"]=options.defaultEnvMap;break;case"transparency":break;default:break}}props["shading"]=preferredShading;props["side"]=this.effect.doubleSided?THREE.DoubleSide:THREE.FrontSide;if(props.diffuse!==undefined){props.color=props.diffuse;delete props.diffuse}switch(this.type){case"constant":if(props.emissive!=undefined)props.color=props.emissive;this.material=new THREE.MeshBasicMaterial(props);break;case"phong":case"blinn":this.material=new THREE.MeshPhongMaterial(props);break;case"lambert":default:this.material=new THREE.MeshLambertMaterial(props);break}return this.material};function Surface(effect){this.effect=effect;this.init_from=null;this.format=null}Surface.prototype.parse=function(element){for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"init_from":this.init_from=child.textContent;break;case"format":this.format=child.textContent;break;default:console.log("unhandled Surface prop: "+child.nodeName);break}}return this};function Sampler2D(effect){this.effect=effect;this.source=null;this.wrap_s=null;this.wrap_t=null;this.minfilter=null;this.magfilter=null;this.mipfilter=null}Sampler2D.prototype.parse=function(element){for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"source":this.source=child.textContent;break;case"minfilter":this.minfilter=child.textContent;break;case"magfilter":this.magfilter=child.textContent;break;case"mipfilter":this.mipfilter=child.textContent;break;case"wrap_s":this.wrap_s=child.textContent;break;case"wrap_t":this.wrap_t=child.textContent;break;default:console.log("unhandled Sampler2D prop: "+child.nodeName);break}}return this};function Effect(){this.id="";this.name="";this.shader=null;this.surface={};this.sampler={}}Effect.prototype.create=function(){if(this.shader===null){return null}};Effect.prototype.parse=function(element){this.id=element.getAttribute("id");this.name=element.getAttribute("name");extractDoubleSided(this,element);this.shader=null;for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"profile_COMMON":this.parseTechnique(this.parseProfileCOMMON(child));break;default:break}}return this};Effect.prototype.parseNewparam=function(element){var sid=element.getAttribute("sid");for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"surface":this.surface[sid]=new Surface(this).parse(child);break;case"sampler2D":this.sampler[sid]=new Sampler2D(this).parse(child);break;case"extra":break;default:console.log(child.nodeName);break}}};Effect.prototype.parseProfileCOMMON=function(element){var technique;for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"profile_COMMON":this.parseProfileCOMMON(child);break;case"technique":technique=child;break;case"newparam":this.parseNewparam(child);break;case"image":var _image=(new _Image).parse(child);images[_image.id]=_image;break;case"extra":break;default:console.log(child.nodeName);break}}return technique};Effect.prototype.parseTechnique=function(element){for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"constant":case"lambert":case"blinn":case"phong":this.shader=new Shader(child.nodeName,this).parse(child);break;case"extra":this.parseExtra(child);break;default:break}}};Effect.prototype.parseExtra=function(element){for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"technique":this.parseExtraTechnique(child);break;default:break}}};Effect.prototype.parseExtraTechnique=function(element){for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"bump":this.shader.parse(element);break;default:break}}};function InstanceEffect(){this.url=""}InstanceEffect.prototype.parse=function(element){this.url=element.getAttribute("url").replace(/^#/,"");return this};function Animation(){this.id="";this.name="";this.source={};this.sampler=[];this.channel=[]}Animation.prototype.parse=function(element){this.id=element.getAttribute("id");this.name=element.getAttribute("name");this.source={};for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"animation":var anim=(new Animation).parse(child);for(var src in anim.source){this.source[src]=anim.source[src]}for(var j=0;j<anim.channel.length;j++){this.channel.push(anim.channel[j]);this.sampler.push(anim.sampler[j])}break;case"source":var src=(new Source).parse(child);this.source[src.id]=src;break;case"sampler":this.sampler.push(new Sampler(this).parse(child));break;case"channel":this.channel.push(new Channel(this).parse(child));break;default:break}}return this};function Channel(animation){this.animation=animation;this.source="";this.target="";this.fullSid=null;this.sid=null;this.dotSyntax=null;this.arrSyntax=null;this.arrIndices=null;this.member=null}Channel.prototype.parse=function(element){this.source=element.getAttribute("source").replace(/^#/,"");this.target=element.getAttribute("target");var parts=this.target.split("/");var id=parts.shift();var sid=parts.shift();var dotSyntax=sid.indexOf(".")>=0;var arrSyntax=sid.indexOf("(")>=0;if(dotSyntax){parts=sid.split(".");this.sid=parts.shift();this.member=parts.shift()}else if(arrSyntax){var arrIndices=sid.split("(");this.sid=arrIndices.shift();for(var j=0;j<arrIndices.length;j++){arrIndices[j]=parseInt(arrIndices[j].replace(/\)/,""))}this.arrIndices=arrIndices}else{this.sid=sid}this.fullSid=sid;this.dotSyntax=dotSyntax;this.arrSyntax=arrSyntax;return this};function Sampler(animation){this.id="";this.animation=animation;this.inputs=[];this.input=null;this.output=null;this.strideOut=null;this.interpolation=null;this.startTime=null;this.endTime=null;this.duration=0}Sampler.prototype.parse=function(element){this.id=element.getAttribute("id");this.inputs=[];for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"input":this.inputs.push((new Input).parse(child));break;default:break}}return this};Sampler.prototype.create=function(){for(var i=0;i<this.inputs.length;i++){var input=this.inputs[i];var source=this.animation.source[input.source];switch(input.semantic){case"INPUT":this.input=source.read();break;case"OUTPUT":this.output=source.read();this.strideOut=source.accessor.stride;break;case"INTERPOLATION":this.interpolation=source.read();break;case"IN_TANGENT":break;case"OUT_TANGENT":break;default:console.log(input.semantic);break}}this.startTime=0;this.endTime=0;this.duration=0;if(this.input.length){this.startTime=1e8;this.endTime=-1e8;for(var i=0;i<this.input.length;i++){this.startTime=Math.min(this.startTime,this.input[i]);this.endTime=Math.max(this.endTime,this.input[i])}this.duration=this.endTime-this.startTime}};Sampler.prototype.getData=function(type,ndx,member){var data;if(type==="matrix"&&this.strideOut===16){data=this.output[ndx]}else if(this.strideOut>1){data=[];ndx*=this.strideOut;for(var i=0;i<this.strideOut;++i){data[i]=this.output[ndx+i]}if(this.strideOut===3){switch(type){case"rotate":case"translate":fixCoords(data,-1);break;case"scale":fixCoords(data,1);break}}else if(this.strideOut===4&&type==="matrix"){fixCoords(data,-1)}}else{data=this.output[ndx];if(member&&type==="translate"){data=getConvertedTranslation(member,data)}}return data};function Key(time){this.targets=[];this.time=time}Key.prototype.addTarget=function(fullSid,transform,member,data){this.targets.push({sid:fullSid,member:member,transform:transform,data:data})};Key.prototype.apply=function(opt_sid){for(var i=0;i<this.targets.length;++i){var target=this.targets[i];if(!opt_sid||target.sid===opt_sid){target.transform.update(target.data,target.member)}}};Key.prototype.getTarget=function(fullSid){for(var i=0;i<this.targets.length;++i){if(this.targets[i].sid===fullSid){return this.targets[i]}}return null};Key.prototype.hasTarget=function(fullSid){for(var i=0;i<this.targets.length;++i){if(this.targets[i].sid===fullSid){return true}}return false};Key.prototype.interpolate=function(nextKey,time){for(var i=0,l=this.targets.length;i<l;i++){var target=this.targets[i],nextTarget=nextKey.getTarget(target.sid),data;if(target.transform.type!=="matrix"&&nextTarget){var scale=(time-this.time)/(nextKey.time-this.time),nextData=nextTarget.data,prevData=target.data;if(scale<0)scale=0;if(scale>1)scale=1;if(prevData.length){data=[];for(var j=0;j<prevData.length;++j){data[j]=prevData[j]+(nextData[j]-prevData[j])*scale}}else{data=prevData+(nextData-prevData)*scale}}else{data=target.data}target.transform.update(data,target.member)}};function Camera(){this.id="";this.name="";this.technique=""}Camera.prototype.parse=function(element){this.id=element.getAttribute("id");this.name=element.getAttribute("name");for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"optics":this.parseOptics(child);break;default:break}}return this};Camera.prototype.parseOptics=function(element){for(var i=0;i<element.childNodes.length;i++){if(element.childNodes[i].nodeName==="technique_common"){var technique=element.childNodes[i];for(var j=0;j<technique.childNodes.length;j++){this.technique=technique.childNodes[j].nodeName;if(this.technique==="perspective"){var perspective=technique.childNodes[j];for(var k=0;k<perspective.childNodes.length;k++){var param=perspective.childNodes[k];switch(param.nodeName){case"yfov":this.yfov=param.textContent;break;case"xfov":this.xfov=param.textContent;break;case"znear":this.znear=param.textContent;break;case"zfar":this.zfar=param.textContent;break;case"aspect_ratio":this.aspect_ratio=param.textContent;break}}}else if(this.technique==="orthographic"){var orthographic=technique.childNodes[j];for(var k=0;k<orthographic.childNodes.length;k++){var param=orthographic.childNodes[k];switch(param.nodeName){case"xmag":this.xmag=param.textContent;break;case"ymag":this.ymag=param.textContent;break;case"znear":this.znear=param.textContent;break;case"zfar":this.zfar=param.textContent;break;case"aspect_ratio":this.aspect_ratio=param.textContent;break}}}}}}return this};function InstanceCamera(){this.url=""}InstanceCamera.prototype.parse=function(element){this.url=element.getAttribute("url").replace(/^#/,"");return this};function Light(){this.id="";this.name="";this.technique=""}Light.prototype.parse=function(element){this.id=element.getAttribute("id");this.name=element.getAttribute("name");for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"technique_common":this.parseCommon(child);break;case"technique":this.parseTechnique(child);break;default:break}}return this};Light.prototype.parseCommon=function(element){for(var i=0;i<element.childNodes.length;i++){switch(element.childNodes[i].nodeName){case"directional":case"point":case"spot":case"ambient":this.technique=element.childNodes[i].nodeName;var light=element.childNodes[i];for(var j=0;j<light.childNodes.length;j++){var child=light.childNodes[j];switch(child.nodeName){case"color":var rgba=_floats(child.textContent);this.color=new THREE.Color(0);this.color.setRGB(rgba[0],rgba[1],rgba[2]);this.color.a=rgba[3];break;case"falloff_angle":this.falloff_angle=parseFloat(child.textContent);break;case"quadratic_attenuation":var f=parseFloat(child.textContent);this.distance=f?Math.sqrt(1/f):0}}}}return this};Light.prototype.parseTechnique=function(element){this.profile=element.getAttribute("profile");for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];switch(child.nodeName){case"intensity":this.intensity=parseFloat(child.textContent);break}}return this};function InstanceLight(){this.url=""}InstanceLight.prototype.parse=function(element){this.url=element.getAttribute("url").replace(/^#/,"");return this};function KinematicsModel(){this.id="";this.name="";this.joints=[];this.links=[]}KinematicsModel.prototype.parse=function(element){this.id=element.getAttribute("id");this.name=element.getAttribute("name");this.joints=[];this.links=[];for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"technique_common":this.parseCommon(child);break;default:break}}return this};KinematicsModel.prototype.parseCommon=function(element){for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(element.childNodes[i].nodeName){case"joint":this.joints.push((new Joint).parse(child));break;case"link":this.links.push((new Link).parse(child));break;default:break}}return this};function Joint(){this.sid="";this.name="";this.axis=new THREE.Vector3;this.limits={min:0,max:0};this.type="";this.static=false;this.zeroPosition=0;this.middlePosition=0}Joint.prototype.parse=function(element){this.sid=element.getAttribute("sid");this.name=element.getAttribute("name");this.axis=new THREE.Vector3;this.limits={min:0,max:0};this.type="";this.static=false;this.zeroPosition=0;this.middlePosition=0;var axisElement=element.querySelector("axis");var _axis=_floats(axisElement.textContent);this.axis=getConvertedVec3(_axis,0);var min=element.querySelector("limits min")?parseFloat(element.querySelector("limits min").textContent):-360;var max=element.querySelector("limits max")?parseFloat(element.querySelector("limits max").textContent):360;this.limits={min:min,max:max};var jointTypes=["prismatic","revolute"];for(var i=0;i<jointTypes.length;i++){var type=jointTypes[i];var jointElement=element.querySelector(type);if(jointElement){this.type=type}}if(this.limits.min>=this.limits.max){this.static=true}this.middlePosition=(this.limits.min+this.limits.max)/2;return this};function Link(){this.sid="";this.name="";this.transforms=[];this.attachments=[]}Link.prototype.parse=function(element){this.sid=element.getAttribute("sid");this.name=element.getAttribute("name");this.transforms=[];this.attachments=[];for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"attachment_full":this.attachments.push((new Attachment).parse(child));break;case"rotate":case"translate":case"matrix":this.transforms.push((new Transform).parse(child));break;default:break}}return this};function Attachment(){this.joint="";this.transforms=[];this.links=[]}Attachment.prototype.parse=function(element){this.joint=element.getAttribute("joint").split("/").pop();this.links=[];for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType!=1)continue;switch(child.nodeName){case"link":this.links.push((new Link).parse(child));break;case"rotate":case"translate":case"matrix":this.transforms.push((new Transform).parse(child));break;default:break}}return this};function _source(element){var id=element.getAttribute("id");if(sources[id]!=undefined){return sources[id]}sources[id]=new Source(id).parse(element);return sources[id]}function _nsResolver(nsPrefix){if(nsPrefix==="dae"){return"http://www.collada.org/2005/11/COLLADASchema"}return null}function _bools(str){var raw=_strings(str);var data=[];for(var i=0,l=raw.length;i<l;i++){data.push(raw[i]==="true"||raw[i]==="1"?true:false)}return data}function _floats(str){var raw=_strings(str);var data=[];for(var i=0,l=raw.length;i<l;i++){data.push(parseFloat(raw[i]))}return data}function _ints(str){var raw=_strings(str);var data=[];for(var i=0,l=raw.length;i<l;i++){data.push(parseInt(raw[i],10))}return data}function _strings(str){return str.length>0?_trimString(str).split(/\s+/):[]}function _trimString(str){return str.replace(/^\s+/,"").replace(/\s+$/,"")}function _attr_as_float(element,name,defaultValue){if(element.hasAttribute(name)){return parseFloat(element.getAttribute(name))}else{return defaultValue}}function _attr_as_int(element,name,defaultValue){if(element.hasAttribute(name)){return parseInt(element.getAttribute(name),10)}else{return defaultValue}}function _attr_as_string(element,name,defaultValue){if(element.hasAttribute(name)){return element.getAttribute(name)}else{return defaultValue}}function _format_float(f,num){if(f===undefined){var s="0.";while(s.length<num+2){s+="0"}return s}num=num||2;var parts=f.toString().split(".");parts[1]=parts.length>1?parts[1].substr(0,num):"0";while(parts[1].length<num){parts[1]+="0"}return parts.join(".")}function loadTextureImage(texture,url){var loader=new THREE.ImageLoader;loader.load(url,function(image){texture.image=image;texture.needsUpdate=true})}function extractDoubleSided(obj,element){obj.doubleSided=false;var node=element.querySelectorAll("extra double_sided")[0];if(node){if(node&&parseInt(node.textContent,10)===1){obj.doubleSided=true}}}function setUpConversion(){if(options.convertUpAxis!==true||colladaUp===options.upAxis){upConversion=null}else{switch(colladaUp){case"X":upConversion=options.upAxis==="Y"?"XtoY":"XtoZ";break;case"Y":upConversion=options.upAxis==="X"?"YtoX":"YtoZ";break;case"Z":upConversion=options.upAxis==="X"?"ZtoX":"ZtoY";break}}}function fixCoords(data,sign){if(options.convertUpAxis!==true||colladaUp===options.upAxis){return}switch(upConversion){case"XtoY":var tmp=data[0];data[0]=sign*data[1];data[1]=tmp;break;case"XtoZ":var tmp=data[2];data[2]=data[1];data[1]=data[0];data[0]=tmp;break;case"YtoX":var tmp=data[0];data[0]=data[1];data[1]=sign*tmp;break;case"YtoZ":var tmp=data[1];data[1]=sign*data[2];data[2]=tmp;break;case"ZtoX":var tmp=data[0];data[0]=data[1];data[1]=data[2];data[2]=tmp;break;case"ZtoY":var tmp=data[1];data[1]=data[2];data[2]=sign*tmp;break}}function getConvertedTranslation(axis,data){if(options.convertUpAxis!==true||colladaUp===options.upAxis){return data}switch(axis){case"X":data=upConversion==="XtoY"?data*-1:data;break;case"Y":data=upConversion==="YtoZ"||upConversion==="YtoX"?data*-1:data;break;case"Z":data=upConversion==="ZtoY"?data*-1:data;break;default:break}return data}function getConvertedVec3(data,offset){var arr=[data[offset],data[offset+1],data[offset+2]];fixCoords(arr,-1);return new THREE.Vector3(arr[0],arr[1],arr[2])}function getConvertedMat4(data){if(options.convertUpAxis){var arr=[data[0],data[4],data[8]];fixCoords(arr,-1);data[0]=arr[0];data[4]=arr[1];data[8]=arr[2];arr=[data[1],data[5],data[9]];fixCoords(arr,-1);data[1]=arr[0];data[5]=arr[1];data[9]=arr[2];arr=[data[2],data[6],data[10]];fixCoords(arr,-1);data[2]=arr[0];data[6]=arr[1];data[10]=arr[2];arr=[data[0],data[1],data[2]];fixCoords(arr,-1);data[0]=arr[0];data[1]=arr[1];data[2]=arr[2];arr=[data[4],data[5],data[6]];fixCoords(arr,-1);data[4]=arr[0];data[5]=arr[1];data[6]=arr[2];arr=[data[8],data[9],data[10]];fixCoords(arr,-1);data[8]=arr[0];data[9]=arr[1];data[10]=arr[2];arr=[data[3],data[7],data[11]];fixCoords(arr,-1);data[3]=arr[0];data[7]=arr[1];data[11]=arr[2]}return(new THREE.Matrix4).set(data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7],data[8],data[9],data[10],data[11],data[12],data[13],data[14],data[15])}function getConvertedIndex(index){if(index>-1&&index<3){var members=["X","Y","Z"],indices={X:0,Y:1,Z:2};index=getConvertedMember(members[index]);index=indices[index]}return index}function getConvertedMember(member){if(options.convertUpAxis){switch(member){case"X":switch(upConversion){case"XtoY":case"XtoZ":case"YtoX":member="Y";break;case"ZtoX":member="Z";break}break;case"Y":switch(upConversion){case"XtoY":case"YtoX":case"ZtoX":member="X";break;case"XtoZ":case"YtoZ":case"ZtoY":member="Z";break}break;case"Z":switch(upConversion){case"XtoZ":member="X";break;case"YtoZ":case"ZtoX":case"ZtoY":member="Y";break}break}}return member}return{load:load,parse:parse,setPreferredShading:setPreferredShading,applySkin:applySkin,geometries:geometries,options:options}}},{}],43:[function(_dereq_,module,exports){THREE.GLTFLoader=function(){function GLTFLoader(manager){this.manager=manager!==undefined?manager:THREE.DefaultLoadingManager}GLTFLoader.prototype={constructor:GLTFLoader,load:function(url,onLoad,onProgress,onError){var scope=this;var path=this.path&&typeof this.path==="string"?this.path:THREE.Loader.prototype.extractUrlBase(url);var loader=new THREE.FileLoader(scope.manager);loader.setResponseType("arraybuffer");loader.load(url,function(data){scope.parse(data,onLoad,path)},onProgress,onError)},setCrossOrigin:function(value){this.crossOrigin=value},setPath:function(value){this.path=value},parse:function(data,callback,path){var content;var extensions={};var magic=convertUint8ArrayToString(new Uint8Array(data,0,4));if(magic===BINARY_EXTENSION_HEADER_DEFAULTS.magic){extensions[EXTENSIONS.KHR_BINARY_GLTF]=new GLTFBinaryExtension(data);content=extensions[EXTENSIONS.KHR_BINARY_GLTF].content}else{content=convertUint8ArrayToString(new Uint8Array(data))}var json=JSON.parse(content);if(json.extensionsUsed&&json.extensionsUsed.indexOf(EXTENSIONS.KHR_MATERIALS_COMMON)>=0){extensions[EXTENSIONS.KHR_MATERIALS_COMMON]=new GLTFMaterialsCommonExtension(json)}console.time("GLTFLoader");var parser=new GLTFParser(json,extensions,{path:path||this.path,crossOrigin:this.crossOrigin});parser.parse(function(scene,scenes,cameras,animations){console.timeEnd("GLTFLoader");var glTF={scene:scene,scenes:scenes,cameras:cameras,animations:animations};callback(glTF)})}};function GLTFRegistry(){var objects={};return{get:function(key){return objects[key]},add:function(key,object){objects[key]=object},remove:function(key){delete objects[key]},removeAll:function(){objects={}},update:function(scene,camera){for(var name in objects){var object=objects[name];if(object.update){object.update(scene,camera)}}}}}GLTFLoader.Shaders={update:function(){console.warn("THREE.GLTFLoader.Shaders has been deprecated, and now updates automatically.")}};function GLTFShader(targetNode,allNodes){var boundUniforms={};var uniforms=targetNode.material.uniforms;for(var uniformId in uniforms){var uniform=uniforms[uniformId];if(uniform.semantic){var sourceNodeRef=uniform.node;var sourceNode=targetNode;if(sourceNodeRef){sourceNode=allNodes[sourceNodeRef]}boundUniforms[uniformId]={semantic:uniform.semantic,sourceNode:sourceNode,targetNode:targetNode,uniform:uniform}}}this.boundUniforms=boundUniforms;this._m4=new THREE.Matrix4}GLTFShader.prototype.update=function(scene,camera){var boundUniforms=this.boundUniforms;for(var name in boundUniforms){var boundUniform=boundUniforms[name];switch(boundUniform.semantic){case"MODELVIEW":var m4=boundUniform.uniform.value;m4.multiplyMatrices(camera.matrixWorldInverse,boundUniform.sourceNode.matrixWorld);break;case"MODELVIEWINVERSETRANSPOSE":var m3=boundUniform.uniform.value;this._m4.multiplyMatrices(camera.matrixWorldInverse,boundUniform.sourceNode.matrixWorld);m3.getNormalMatrix(this._m4);break;case"PROJECTION":var m4=boundUniform.uniform.value;m4.copy(camera.projectionMatrix);break;case"JOINTMATRIX":var m4v=boundUniform.uniform.value;for(var mi=0;mi<m4v.length;mi++){m4v[mi].getInverse(boundUniform.sourceNode.matrixWorld).multiply(boundUniform.targetNode.skeleton.bones[mi].matrixWorld).multiply(boundUniform.targetNode.skeleton.boneInverses[mi]).multiply(boundUniform.targetNode.bindMatrix)}break;default:console.warn("Unhandled shader semantic: "+boundUniform.semantic);break}}};GLTFLoader.Animations={update:function(){console.warn("THREE.GLTFLoader.Animation has been deprecated. Use THREE.AnimationMixer instead.")}};var EXTENSIONS={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_MATERIALS_COMMON:"KHR_materials_common"};function GLTFMaterialsCommonExtension(json){this.name=EXTENSIONS.KHR_MATERIALS_COMMON;this.lights={};var extension=json.extensions&&json.extensions[EXTENSIONS.KHR_MATERIALS_COMMON]||{};var lights=extension.lights||{};for(var lightId in lights){var light=lights[lightId];var lightNode;var lightParams=light[light.type];var color=(new THREE.Color).fromArray(lightParams.color);switch(light.type){case"directional":lightNode=new THREE.DirectionalLight(color);lightNode.position.set(0,0,1);break;case"point":lightNode=new THREE.PointLight(color);break;case"spot":lightNode=new THREE.SpotLight(color);lightNode.position.set(0,0,1);break;case"ambient":lightNode=new THREE.AmbientLight(color);break}if(lightNode){this.lights[lightId]=lightNode}}}var BINARY_EXTENSION_BUFFER_NAME="binary_glTF";var BINARY_EXTENSION_HEADER_DEFAULTS={magic:"glTF",version:1,contentFormat:0};var BINARY_EXTENSION_HEADER_LENGTH=20;function GLTFBinaryExtension(data){this.name=EXTENSIONS.KHR_BINARY_GLTF;var headerView=new DataView(data,0,BINARY_EXTENSION_HEADER_LENGTH);var header={magic:convertUint8ArrayToString(new Uint8Array(data.slice(0,4))),version:headerView.getUint32(4,true),length:headerView.getUint32(8,true),contentLength:headerView.getUint32(12,true),contentFormat:headerView.getUint32(16,true)};for(var key in BINARY_EXTENSION_HEADER_DEFAULTS){var value=BINARY_EXTENSION_HEADER_DEFAULTS[key];if(header[key]!==value){throw new Error('Unsupported glTF-Binary header: Expected "%s" to be "%s".',key,value)}}var contentArray=new Uint8Array(data,BINARY_EXTENSION_HEADER_LENGTH,header.contentLength);this.header=header;this.content=convertUint8ArrayToString(contentArray);this.body=data.slice(BINARY_EXTENSION_HEADER_LENGTH+header.contentLength,header.length)}GLTFBinaryExtension.prototype.loadShader=function(shader,bufferViews){var bufferView=bufferViews[shader.extensions[EXTENSIONS.KHR_BINARY_GLTF].bufferView];var array=new Uint8Array(bufferView);return convertUint8ArrayToString(array)};GLTFBinaryExtension.prototype.loadTextureSourceUri=function(source,bufferViews){var metadata=source.extensions[EXTENSIONS.KHR_BINARY_GLTF];var bufferView=bufferViews[metadata.bufferView];var stringData=convertUint8ArrayToString(new Uint8Array(bufferView));return"data:"+metadata.mimeType+";base64,"+btoa(stringData);
};var WEBGL_CONSTANTS={FLOAT:5126,FLOAT_MAT3:35675,FLOAT_MAT4:35676,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,LINEAR:9729,REPEAT:10497,SAMPLER_2D:35678,TRIANGLES:4,LINES:1,UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123,VERTEX_SHADER:35633,FRAGMENT_SHADER:35632};var WEBGL_TYPE={5126:Number,35675:THREE.Matrix3,35676:THREE.Matrix4,35664:THREE.Vector2,35665:THREE.Vector3,35666:THREE.Vector4,35678:THREE.Texture};var WEBGL_COMPONENT_TYPES={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};var WEBGL_FILTERS={9728:THREE.NearestFilter,9729:THREE.LinearFilter,9984:THREE.NearestMipMapNearestFilter,9985:THREE.LinearMipMapNearestFilter,9986:THREE.NearestMipMapLinearFilter,9987:THREE.LinearMipMapLinearFilter};var WEBGL_WRAPPINGS={33071:THREE.ClampToEdgeWrapping,33648:THREE.MirroredRepeatWrapping,10497:THREE.RepeatWrapping};var WEBGL_TEXTURE_FORMATS={6406:THREE.AlphaFormat,6407:THREE.RGBFormat,6408:THREE.RGBAFormat,6409:THREE.LuminanceFormat,6410:THREE.LuminanceAlphaFormat};var WEBGL_TEXTURE_DATATYPES={5121:THREE.UnsignedByteType,32819:THREE.UnsignedShort4444Type,32820:THREE.UnsignedShort5551Type,33635:THREE.UnsignedShort565Type};var WEBGL_SIDES={1028:THREE.BackSide,1029:THREE.FrontSide};var WEBGL_DEPTH_FUNCS={512:THREE.NeverDepth,513:THREE.LessDepth,514:THREE.EqualDepth,515:THREE.LessEqualDepth,516:THREE.GreaterEqualDepth,517:THREE.NotEqualDepth,518:THREE.GreaterEqualDepth,519:THREE.AlwaysDepth};var WEBGL_BLEND_EQUATIONS={32774:THREE.AddEquation,32778:THREE.SubtractEquation,32779:THREE.ReverseSubtractEquation};var WEBGL_BLEND_FUNCS={0:THREE.ZeroFactor,1:THREE.OneFactor,768:THREE.SrcColorFactor,769:THREE.OneMinusSrcColorFactor,770:THREE.SrcAlphaFactor,771:THREE.OneMinusSrcAlphaFactor,772:THREE.DstAlphaFactor,773:THREE.OneMinusDstAlphaFactor,774:THREE.DstColorFactor,775:THREE.OneMinusDstColorFactor,776:THREE.SrcAlphaSaturateFactor};var WEBGL_TYPE_SIZES={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16};var PATH_PROPERTIES={scale:"scale",translation:"position",rotation:"quaternion"};var INTERPOLATION={LINEAR:THREE.InterpolateLinear,STEP:THREE.InterpolateDiscrete};var STATES_ENABLES={2884:"CULL_FACE",2929:"DEPTH_TEST",3042:"BLEND",3089:"SCISSOR_TEST",32823:"POLYGON_OFFSET_FILL",32926:"SAMPLE_ALPHA_TO_COVERAGE"};function _each(object,callback,thisObj){if(!object){return Promise.resolve()}var results;var fns=[];if(Object.prototype.toString.call(object)==="[object Array]"){results=[];var length=object.length;for(var idx=0;idx<length;idx++){var value=callback.call(thisObj||this,object[idx],idx);if(value){fns.push(value);if(value instanceof Promise){value.then(function(key,value){results[key]=value}.bind(this,idx))}else{results[idx]=value}}}}else{results={};for(var key in object){if(object.hasOwnProperty(key)){var value=callback.call(thisObj||this,object[key],key);if(value){fns.push(value);if(value instanceof Promise){value.then(function(key,value){results[key]=value}.bind(this,key))}else{results[key]=value}}}}}return Promise.all(fns).then(function(){return results})}function resolveURL(url,path){if(typeof url!=="string"||url==="")return"";if(/^(https?:)?\/\//i.test(url)){return url}if(/^data:.*,.*$/i.test(url)){return url}return(path||"")+url}function convertUint8ArrayToString(array){if(window.TextDecoder!==undefined){}var s="";for(var i=0,il=array.length;i<il;i++){s+=String.fromCharCode(array[i])}return s}function replaceTHREEShaderAttributes(shaderText,technique){var attributes={};for(var attributeId in technique.attributes){var pname=technique.attributes[attributeId];var param=technique.parameters[pname];var atype=param.type;var semantic=param.semantic;attributes[attributeId]={type:atype,semantic:semantic}}var shaderParams=technique.parameters;var shaderAttributes=technique.attributes;var params={};for(var attributeId in attributes){var pname=shaderAttributes[attributeId];var shaderParam=shaderParams[pname];var semantic=shaderParam.semantic;if(semantic){params[attributeId]=shaderParam}}for(var pname in params){var param=params[pname];var semantic=param.semantic;var regEx=new RegExp("\\b"+pname+"\\b","g");switch(semantic){case"POSITION":shaderText=shaderText.replace(regEx,"position");break;case"NORMAL":shaderText=shaderText.replace(regEx,"normal");break;case"TEXCOORD_0":case"TEXCOORD0":case"TEXCOORD":shaderText=shaderText.replace(regEx,"uv");break;case"TEXCOORD_1":shaderText=shaderText.replace(regEx,"uv2");break;case"COLOR_0":case"COLOR0":case"COLOR":shaderText=shaderText.replace(regEx,"color");break;case"WEIGHT":shaderText=shaderText.replace(regEx,"skinWeight");break;case"JOINT":shaderText=shaderText.replace(regEx,"skinIndex");break}}return shaderText}function createDefaultMaterial(){return new THREE.MeshPhongMaterial({color:0,emissive:8947848,specular:0,shininess:0,transparent:false,depthTest:true,side:THREE.FrontSide})}function DeferredShaderMaterial(params){this.isDeferredShaderMaterial=true;this.params=params}DeferredShaderMaterial.prototype.create=function(){var uniforms=THREE.UniformsUtils.clone(this.params.uniforms);for(var uniformId in this.params.uniforms){var originalUniform=this.params.uniforms[uniformId];if(originalUniform.value instanceof THREE.Texture){uniforms[uniformId].value=originalUniform.value;uniforms[uniformId].value.needsUpdate=true}uniforms[uniformId].semantic=originalUniform.semantic;uniforms[uniformId].node=originalUniform.node}this.params.uniforms=uniforms;return new THREE.RawShaderMaterial(this.params)};function GLTFParser(json,extensions,options){this.json=json||{};this.extensions=extensions||{};this.options=options||{};this.cache=new GLTFRegistry}GLTFParser.prototype._withDependencies=function(dependencies){var _dependencies={};for(var i=0;i<dependencies.length;i++){var dependency=dependencies[i];var fnName="load"+dependency.charAt(0).toUpperCase()+dependency.slice(1);var cached=this.cache.get(dependency);if(cached!==undefined){_dependencies[dependency]=cached}else if(this[fnName]){var fn=this[fnName]();this.cache.add(dependency,fn);_dependencies[dependency]=fn}}return _each(_dependencies,function(dependency){return dependency})};GLTFParser.prototype.parse=function(callback){var json=this.json;this.cache.removeAll();this._withDependencies(["scenes","cameras","animations"]).then(function(dependencies){var scenes=[];for(var name in dependencies.scenes){scenes.push(dependencies.scenes[name])}var scene=json.scene!==undefined?dependencies.scenes[json.scene]:scenes[0];var cameras=[];for(var name in dependencies.cameras){var camera=dependencies.cameras[name];cameras.push(camera)}var animations=[];for(var name in dependencies.animations){animations.push(dependencies.animations[name])}callback(scene,scenes,cameras,animations)})};GLTFParser.prototype.loadShaders=function(){var json=this.json;var extensions=this.extensions;var options=this.options;return this._withDependencies(["bufferViews"]).then(function(dependencies){return _each(json.shaders,function(shader){if(shader.extensions&&shader.extensions[EXTENSIONS.KHR_BINARY_GLTF]){return extensions[EXTENSIONS.KHR_BINARY_GLTF].loadShader(shader,dependencies.bufferViews)}return new Promise(function(resolve){var loader=new THREE.FileLoader;loader.setResponseType("text");loader.load(resolveURL(shader.uri,options.path),function(shaderText){resolve(shaderText)})})})})};GLTFParser.prototype.loadBuffers=function(){var json=this.json;var extensions=this.extensions;var options=this.options;return _each(json.buffers,function(buffer,name){if(name===BINARY_EXTENSION_BUFFER_NAME){return extensions[EXTENSIONS.KHR_BINARY_GLTF].body}if(buffer.type==="arraybuffer"||buffer.type===undefined){return new Promise(function(resolve){var loader=new THREE.FileLoader;loader.setResponseType("arraybuffer");loader.load(resolveURL(buffer.uri,options.path),function(buffer){resolve(buffer)})})}else{console.warn("THREE.GLTFLoader: "+buffer.type+" buffer type is not supported")}})};GLTFParser.prototype.loadBufferViews=function(){var json=this.json;return this._withDependencies(["buffers"]).then(function(dependencies){return _each(json.bufferViews,function(bufferView){var arraybuffer=dependencies.buffers[bufferView.buffer];var byteLength=bufferView.byteLength!==undefined?bufferView.byteLength:0;return arraybuffer.slice(bufferView.byteOffset,bufferView.byteOffset+byteLength)})})};GLTFParser.prototype.loadAccessors=function(){var json=this.json;return this._withDependencies(["bufferViews"]).then(function(dependencies){return _each(json.accessors,function(accessor){var arraybuffer=dependencies.bufferViews[accessor.bufferView];var itemSize=WEBGL_TYPE_SIZES[accessor.type];var TypedArray=WEBGL_COMPONENT_TYPES[accessor.componentType];var elementBytes=TypedArray.BYTES_PER_ELEMENT;var itemBytes=elementBytes*itemSize;if(accessor.byteStride&&accessor.byteStride!==itemBytes){var array=new TypedArray(arraybuffer);var ib=new THREE.InterleavedBuffer(array,accessor.byteStride/elementBytes);return new THREE.InterleavedBufferAttribute(ib,itemSize,accessor.byteOffset/elementBytes)}else{array=new TypedArray(arraybuffer,accessor.byteOffset,accessor.count*itemSize);return new THREE.BufferAttribute(array,itemSize)}})})};GLTFParser.prototype.loadTextures=function(){var json=this.json;var extensions=this.extensions;var options=this.options;return this._withDependencies(["bufferViews"]).then(function(dependencies){return _each(json.textures,function(texture){if(texture.source){return new Promise(function(resolve){var source=json.images[texture.source];var sourceUri=source.uri;if(source.extensions&&source.extensions[EXTENSIONS.KHR_BINARY_GLTF]){sourceUri=extensions[EXTENSIONS.KHR_BINARY_GLTF].loadTextureSourceUri(source,dependencies.bufferViews)}var textureLoader=THREE.Loader.Handlers.get(sourceUri);if(textureLoader===null){textureLoader=new THREE.TextureLoader}textureLoader.setCrossOrigin(options.crossOrigin);textureLoader.load(resolveURL(sourceUri,options.path),function(_texture){_texture.flipY=false;if(texture.name!==undefined)_texture.name=texture.name;_texture.format=texture.format!==undefined?WEBGL_TEXTURE_FORMATS[texture.format]:THREE.RGBAFormat;if(texture.internalFormat!==undefined&&_texture.format!==WEBGL_TEXTURE_FORMATS[texture.internalFormat]){console.warn("THREE.GLTFLoader: Three.js doesn't support texture internalFormat which is different from texture format. "+"internalFormat will be forced to be the same value as format.")}_texture.type=texture.type!==undefined?WEBGL_TEXTURE_DATATYPES[texture.type]:THREE.UnsignedByteType;if(texture.sampler){var sampler=json.samplers[texture.sampler];_texture.magFilter=WEBGL_FILTERS[sampler.magFilter]||THREE.LinearFilter;_texture.minFilter=WEBGL_FILTERS[sampler.minFilter]||THREE.NearestMipMapLinearFilter;_texture.wrapS=WEBGL_WRAPPINGS[sampler.wrapS]||THREE.RepeatWrapping;_texture.wrapT=WEBGL_WRAPPINGS[sampler.wrapT]||THREE.RepeatWrapping}resolve(_texture)},undefined,function(){resolve()})})}})})};GLTFParser.prototype.loadMaterials=function(){var json=this.json;return this._withDependencies(["shaders","textures"]).then(function(dependencies){return _each(json.materials,function(material){var materialType;var materialValues={};var materialParams={};var khr_material;if(material.extensions&&material.extensions[EXTENSIONS.KHR_MATERIALS_COMMON]){khr_material=material.extensions[EXTENSIONS.KHR_MATERIALS_COMMON]}if(khr_material){var keys=["ambient","emission","transparent","transparency","doubleSided"];switch(khr_material.technique){case"BLINN":case"PHONG":materialType=THREE.MeshPhongMaterial;keys.push("diffuse","specular","shininess");break;case"LAMBERT":materialType=THREE.MeshLambertMaterial;keys.push("diffuse");break;case"CONSTANT":default:materialType=THREE.MeshBasicMaterial;break}keys.forEach(function(v){if(khr_material.values[v]!==undefined)materialValues[v]=khr_material.values[v]});if(khr_material.doubleSided||materialValues.doubleSided){materialParams.side=THREE.DoubleSide}if(khr_material.transparent||materialValues.transparent){materialParams.transparent=true;materialParams.opacity=materialValues.transparency!==undefined?materialValues.transparency:1}}else if(material.technique===undefined){materialType=THREE.MeshPhongMaterial;Object.assign(materialValues,material.values)}else{materialType=DeferredShaderMaterial;var technique=json.techniques[material.technique];materialParams.uniforms={};var program=json.programs[technique.program];if(program){materialParams.fragmentShader=dependencies.shaders[program.fragmentShader];if(!materialParams.fragmentShader){console.warn("ERROR: Missing fragment shader definition:",program.fragmentShader);materialType=THREE.MeshPhongMaterial}var vertexShader=dependencies.shaders[program.vertexShader];if(!vertexShader){console.warn("ERROR: Missing vertex shader definition:",program.vertexShader);materialType=THREE.MeshPhongMaterial}materialParams.vertexShader=replaceTHREEShaderAttributes(vertexShader,technique);var uniforms=technique.uniforms;for(var uniformId in uniforms){var pname=uniforms[uniformId];var shaderParam=technique.parameters[pname];var ptype=shaderParam.type;if(WEBGL_TYPE[ptype]){var pcount=shaderParam.count;var value;if(material.values!==undefined)value=material.values[pname];var uvalue=new WEBGL_TYPE[ptype];var usemantic=shaderParam.semantic;var unode=shaderParam.node;switch(ptype){case WEBGL_CONSTANTS.FLOAT:uvalue=shaderParam.value;if(pname=="transparency"){materialParams.transparent=true}if(value!==undefined){uvalue=value}break;case WEBGL_CONSTANTS.FLOAT_VEC2:case WEBGL_CONSTANTS.FLOAT_VEC3:case WEBGL_CONSTANTS.FLOAT_VEC4:case WEBGL_CONSTANTS.FLOAT_MAT3:if(shaderParam&&shaderParam.value){uvalue.fromArray(shaderParam.value)}if(value){uvalue.fromArray(value)}break;case WEBGL_CONSTANTS.FLOAT_MAT2:console.warn("FLOAT_MAT2 is not a supported uniform type");break;case WEBGL_CONSTANTS.FLOAT_MAT4:if(pcount){uvalue=new Array(pcount);for(var mi=0;mi<pcount;mi++){uvalue[mi]=new WEBGL_TYPE[ptype]}if(shaderParam&&shaderParam.value){var m4v=shaderParam.value;uvalue.fromArray(m4v)}if(value){uvalue.fromArray(value)}}else{if(shaderParam&&shaderParam.value){var m4=shaderParam.value;uvalue.fromArray(m4)}if(value){uvalue.fromArray(value)}}break;case WEBGL_CONSTANTS.SAMPLER_2D:if(value!==undefined){uvalue=dependencies.textures[value]}else if(shaderParam.value!==undefined){uvalue=dependencies.textures[shaderParam.value]}else{uvalue=null}break}materialParams.uniforms[uniformId]={value:uvalue,semantic:usemantic,node:unode}}else{throw new Error("Unknown shader uniform param type: "+ptype)}}var states=technique.states||{};var enables=states.enable||[];var functions=states.functions||{};var enableCullFace=false;var enableDepthTest=false;var enableBlend=false;for(var i=0,il=enables.length;i<il;i++){var enable=enables[i];switch(STATES_ENABLES[enable]){case"CULL_FACE":enableCullFace=true;break;case"DEPTH_TEST":enableDepthTest=true;break;case"BLEND":enableBlend=true;break;case"SCISSOR_TEST":case"POLYGON_OFFSET_FILL":case"SAMPLE_ALPHA_TO_COVERAGE":break;default:throw new Error("Unknown technique.states.enable: "+enable)}}if(enableCullFace){materialParams.side=functions.cullFace!==undefined?WEBGL_SIDES[functions.cullFace]:THREE.FrontSide}else{materialParams.side=THREE.DoubleSide}materialParams.depthTest=enableDepthTest;materialParams.depthFunc=functions.depthFunc!==undefined?WEBGL_DEPTH_FUNCS[functions.depthFunc]:THREE.LessDepth;materialParams.depthWrite=functions.depthMask!==undefined?functions.depthMask[0]:true;materialParams.blending=enableBlend?THREE.CustomBlending:THREE.NoBlending;materialParams.transparent=enableBlend;var blendEquationSeparate=functions.blendEquationSeparate;if(blendEquationSeparate!==undefined){materialParams.blendEquation=WEBGL_BLEND_EQUATIONS[blendEquationSeparate[0]];materialParams.blendEquationAlpha=WEBGL_BLEND_EQUATIONS[blendEquationSeparate[1]]}else{materialParams.blendEquation=THREE.AddEquation;materialParams.blendEquationAlpha=THREE.AddEquation}var blendFuncSeparate=functions.blendFuncSeparate;if(blendFuncSeparate!==undefined){materialParams.blendSrc=WEBGL_BLEND_FUNCS[blendFuncSeparate[0]];materialParams.blendDst=WEBGL_BLEND_FUNCS[blendFuncSeparate[1]];materialParams.blendSrcAlpha=WEBGL_BLEND_FUNCS[blendFuncSeparate[2]];materialParams.blendDstAlpha=WEBGL_BLEND_FUNCS[blendFuncSeparate[3]]}else{materialParams.blendSrc=THREE.OneFactor;materialParams.blendDst=THREE.ZeroFactor;materialParams.blendSrcAlpha=THREE.OneFactor;materialParams.blendDstAlpha=THREE.ZeroFactor}}}if(Array.isArray(materialValues.diffuse)){materialParams.color=(new THREE.Color).fromArray(materialValues.diffuse)}else if(typeof materialValues.diffuse==="string"){materialParams.map=dependencies.textures[materialValues.diffuse]}delete materialParams.diffuse;if(typeof materialValues.reflective==="string"){materialParams.envMap=dependencies.textures[materialValues.reflective]}if(typeof materialValues.bump==="string"){materialParams.bumpMap=dependencies.textures[materialValues.bump]}if(Array.isArray(materialValues.emission)){if(materialType===THREE.MeshBasicMaterial){materialParams.color=(new THREE.Color).fromArray(materialValues.emission)}else{materialParams.emissive=(new THREE.Color).fromArray(materialValues.emission)}}else if(typeof materialValues.emission==="string"){if(materialType===THREE.MeshBasicMaterial){materialParams.map=dependencies.textures[materialValues.emission]}else{materialParams.emissiveMap=dependencies.textures[materialValues.emission]}}if(Array.isArray(materialValues.specular)){materialParams.specular=(new THREE.Color).fromArray(materialValues.specular)}else if(typeof materialValues.specular==="string"){materialParams.specularMap=dependencies.textures[materialValues.specular]}if(materialValues.shininess!==undefined){materialParams.shininess=materialValues.shininess}var _material=new materialType(materialParams);if(material.name!==undefined)_material.name=material.name;return _material})})};GLTFParser.prototype.loadMeshes=function(){var json=this.json;return this._withDependencies(["accessors","materials"]).then(function(dependencies){return _each(json.meshes,function(mesh){var group=new THREE.Group;if(mesh.name!==undefined)group.name=mesh.name;if(mesh.extras)group.userData=mesh.extras;var primitives=mesh.primitives||[];for(var name in primitives){var primitive=primitives[name];if(primitive.mode===WEBGL_CONSTANTS.TRIANGLES||primitive.mode===undefined){var geometry=new THREE.BufferGeometry;var attributes=primitive.attributes;for(var attributeId in attributes){var attributeEntry=attributes[attributeId];if(!attributeEntry)return;var bufferAttribute=dependencies.accessors[attributeEntry];switch(attributeId){case"POSITION":geometry.addAttribute("position",bufferAttribute);break;case"NORMAL":geometry.addAttribute("normal",bufferAttribute);break;case"TEXCOORD_0":case"TEXCOORD0":case"TEXCOORD":geometry.addAttribute("uv",bufferAttribute);break;case"TEXCOORD_1":geometry.addAttribute("uv2",bufferAttribute);break;case"COLOR_0":case"COLOR0":case"COLOR":geometry.addAttribute("color",bufferAttribute);break;case"WEIGHT":geometry.addAttribute("skinWeight",bufferAttribute);break;case"JOINT":geometry.addAttribute("skinIndex",bufferAttribute);break}}if(primitive.indices){geometry.setIndex(dependencies.accessors[primitive.indices])}var material=dependencies.materials!==undefined?dependencies.materials[primitive.material]:createDefaultMaterial();var meshNode=new THREE.Mesh(geometry,material);meshNode.castShadow=true;meshNode.name=name==="0"?group.name:group.name+name;if(primitive.extras)meshNode.userData=primitive.extras;group.add(meshNode)}else if(primitive.mode===WEBGL_CONSTANTS.LINES){var geometry=new THREE.BufferGeometry;var attributes=primitive.attributes;for(var attributeId in attributes){var attributeEntry=attributes[attributeId];if(!attributeEntry)return;var bufferAttribute=dependencies.accessors[attributeEntry];switch(attributeId){case"POSITION":geometry.addAttribute("position",bufferAttribute);break;case"COLOR_0":case"COLOR0":case"COLOR":geometry.addAttribute("color",bufferAttribute);break}}var material=dependencies.materials[primitive.material];var meshNode;if(primitive.indices){geometry.setIndex(dependencies.accessors[primitive.indices]);meshNode=new THREE.LineSegments(geometry,material)}else{meshNode=new THREE.Line(geometry,material)}meshNode.name=name==="0"?group.name:group.name+name;if(primitive.extras)meshNode.userData=primitive.extras;group.add(meshNode)}else{console.warn("Only triangular and line primitives are supported")}}return group})})};GLTFParser.prototype.loadCameras=function(){var json=this.json;return _each(json.cameras,function(camera){if(camera.type=="perspective"&&camera.perspective){var yfov=camera.perspective.yfov;var aspectRatio=camera.perspective.aspectRatio!==undefined?camera.perspective.aspectRatio:1;var xfov=yfov*aspectRatio;var _camera=new THREE.PerspectiveCamera(THREE.Math.radToDeg(xfov),aspectRatio,camera.perspective.znear||1,camera.perspective.zfar||2e6);if(camera.name!==undefined)_camera.name=camera.name;if(camera.extras)_camera.userData=camera.extras;return _camera}else if(camera.type=="orthographic"&&camera.orthographic){var _camera=new THREE.OrthographicCamera(window.innerWidth/-2,window.innerWidth/2,window.innerHeight/2,window.innerHeight/-2,camera.orthographic.znear,camera.orthographic.zfar);if(camera.name!==undefined)_camera.name=camera.name;if(camera.extras)_camera.userData=camera.extras;return _camera}})};GLTFParser.prototype.loadSkins=function(){var json=this.json;return this._withDependencies(["accessors"]).then(function(dependencies){return _each(json.skins,function(skin){var bindShapeMatrix=new THREE.Matrix4;if(skin.bindShapeMatrix!==undefined)bindShapeMatrix.fromArray(skin.bindShapeMatrix);var _skin={bindShapeMatrix:bindShapeMatrix,jointNames:skin.jointNames,inverseBindMatrices:dependencies.accessors[skin.inverseBindMatrices]};return _skin})})};GLTFParser.prototype.loadAnimations=function(){var json=this.json;return this._withDependencies(["accessors","nodes"]).then(function(dependencies){return _each(json.animations,function(animation,animationId){var tracks=[];for(var channelId in animation.channels){var channel=animation.channels[channelId];var sampler=animation.samplers[channel.sampler];if(sampler){var target=channel.target;var name=target.id;var input=animation.parameters!==undefined?animation.parameters[sampler.input]:sampler.input;var output=animation.parameters!==undefined?animation.parameters[sampler.output]:sampler.output;var inputAccessor=dependencies.accessors[input];var outputAccessor=dependencies.accessors[output];var node=dependencies.nodes[name];if(node){node.updateMatrix();node.matrixAutoUpdate=true;var TypedKeyframeTrack=PATH_PROPERTIES[target.path]===PATH_PROPERTIES.rotation?THREE.QuaternionKeyframeTrack:THREE.VectorKeyframeTrack;var targetName=node.name?node.name:node.uuid;var interpolation=sampler.interpolation!==undefined?INTERPOLATION[sampler.interpolation]:THREE.InterpolateLinear;tracks.push(new TypedKeyframeTrack(targetName+"."+PATH_PROPERTIES[target.path],THREE.AnimationUtils.arraySlice(inputAccessor.array,0),THREE.AnimationUtils.arraySlice(outputAccessor.array,0),interpolation))}}}var name=animation.name!==undefined?animation.name:"animation_"+animationId;return new THREE.AnimationClip(name,undefined,tracks)})})};GLTFParser.prototype.loadNodes=function(){var json=this.json;var extensions=this.extensions;var scope=this;return _each(json.nodes,function(node){var matrix=new THREE.Matrix4;var _node;if(node.jointName){_node=new THREE.Bone;_node.name=node.name!==undefined?node.name:node.jointName;_node.jointName=node.jointName}else{_node=new THREE.Object3D;if(node.name!==undefined)_node.name=node.name}if(node.extras)_node.userData=node.extras;if(node.matrix!==undefined){matrix.fromArray(node.matrix);_node.applyMatrix(matrix)}else{if(node.translation!==undefined){_node.position.fromArray(node.translation)}if(node.rotation!==undefined){_node.quaternion.fromArray(node.rotation)}if(node.scale!==undefined){_node.scale.fromArray(node.scale)}}return _node}).then(function(__nodes){return scope._withDependencies(["meshes","skins","cameras"]).then(function(dependencies){return _each(__nodes,function(_node,nodeId){var node=json.nodes[nodeId];if(node.meshes!==undefined){for(var meshId in node.meshes){var mesh=node.meshes[meshId];var group=dependencies.meshes[mesh];if(group===undefined){console.warn("GLTFLoader: Couldn't find node \""+mesh+'".');continue}for(var childrenId in group.children){var child=group.children[childrenId];var originalMaterial=child.material;var originalGeometry=child.geometry;var originalUserData=child.userData;var originalName=child.name;var material;if(originalMaterial.isDeferredShaderMaterial){originalMaterial=material=originalMaterial.create()}else{material=originalMaterial}switch(child.type){case"LineSegments":child=new THREE.LineSegments(originalGeometry,material);break;case"LineLoop":child=new THREE.LineLoop(originalGeometry,material);break;case"Line":child=new THREE.Line(originalGeometry,material);break;default:child=new THREE.Mesh(originalGeometry,material)}child.castShadow=true;child.userData=originalUserData;child.name=originalName;var skinEntry;if(node.skin){skinEntry=dependencies.skins[node.skin]}if(skinEntry){var getJointNode=function(jointId){var keys=Object.keys(__nodes);for(var i=0,il=keys.length;i<il;i++){var n=__nodes[keys[i]];if(n.jointName===jointId)return n}return null};var geometry=originalGeometry;var material=originalMaterial;material.skinning=true;child=new THREE.SkinnedMesh(geometry,material,false);child.castShadow=true;child.userData=originalUserData;child.name=originalName;var bones=[];var boneInverses=[];for(var i=0,l=skinEntry.jointNames.length;i<l;i++){var jointId=skinEntry.jointNames[i];var jointNode=getJointNode(jointId);if(jointNode){bones.push(jointNode);var m=skinEntry.inverseBindMatrices.array;var mat=(new THREE.Matrix4).fromArray(m,i*16);boneInverses.push(mat)}else{console.warn("WARNING: joint: '"+jointId+"' could not be found")}}child.bind(new THREE.Skeleton(bones,boneInverses,false),skinEntry.bindShapeMatrix);var buildBoneGraph=function(parentJson,parentObject,property){var children=parentJson[property];if(children===undefined)return;for(var i=0,il=children.length;i<il;i++){var nodeId=children[i];var bone=__nodes[nodeId];var boneJson=json.nodes[nodeId];if(bone!==undefined&&bone.isBone===true&&boneJson!==undefined){parentObject.add(bone);buildBoneGraph(boneJson,bone,"children")}}};buildBoneGraph(node,child,"skeletons")}_node.add(child)}}}if(node.camera!==undefined){var camera=dependencies.cameras[node.camera];_node.add(camera)}if(node.extensions&&node.extensions[EXTENSIONS.KHR_MATERIALS_COMMON]&&node.extensions[EXTENSIONS.KHR_MATERIALS_COMMON].light){var extensionLights=extensions[EXTENSIONS.KHR_MATERIALS_COMMON].lights;var light=extensionLights[node.extensions[EXTENSIONS.KHR_MATERIALS_COMMON].light];_node.add(light)}return _node})})})};GLTFParser.prototype.loadScenes=function(){var json=this.json;function buildNodeHierachy(nodeId,parentObject,allNodes){var _node=allNodes[nodeId];parentObject.add(_node);var node=json.nodes[nodeId];if(node.children){var children=node.children;for(var i=0,l=children.length;i<l;i++){var child=children[i];buildNodeHierachy(child,_node,allNodes)}}}return this._withDependencies(["nodes"]).then(function(dependencies){return _each(json.scenes,function(scene){var _scene=new THREE.Scene;if(scene.name!==undefined)_scene.name=scene.name;if(scene.extras)_scene.userData=scene.extras;var nodes=scene.nodes||[];for(var i=0,l=nodes.length;i<l;i++){var nodeId=nodes[i];buildNodeHierachy(nodeId,_scene,dependencies.nodes)}_scene.traverse(function(child){if(child.material&&child.material.isRawShaderMaterial){child.gltfShader=new GLTFShader(child,dependencies.nodes);child.onBeforeRender=function(renderer,scene,camera){this.gltfShader.update(scene,camera)}}});return _scene})})};return GLTFLoader}()},{}],44:[function(_dereq_,module,exports){THREE.MTLLoader=function(manager){this.manager=manager!==undefined?manager:THREE.DefaultLoadingManager};THREE.MTLLoader.prototype={constructor:THREE.MTLLoader,load:function(url,onLoad,onProgress,onError){var scope=this;var loader=new THREE.FileLoader(this.manager);loader.setPath(this.path);loader.load(url,function(text){onLoad(scope.parse(text))},onProgress,onError)},setPath:function(path){this.path=path},setTexturePath:function(path){this.texturePath=path},setBaseUrl:function(path){console.warn("THREE.MTLLoader: .setBaseUrl() is deprecated. Use .setTexturePath( path ) for texture path or .setPath( path ) for general base path instead.");this.setTexturePath(path)},setCrossOrigin:function(value){this.crossOrigin=value},setMaterialOptions:function(value){this.materialOptions=value},parse:function(text){var lines=text.split("\n");var info={};var delimiter_pattern=/\s+/;var materialsInfo={};for(var i=0;i<lines.length;i++){var line=lines[i];line=line.trim();if(line.length===0||line.charAt(0)==="#"){continue}var pos=line.indexOf(" ");var key=pos>=0?line.substring(0,pos):line;key=key.toLowerCase();var value=pos>=0?line.substring(pos+1):"";value=value.trim();if(key==="newmtl"){info={name:value};materialsInfo[value]=info}else if(info){if(key==="ka"||key==="kd"||key==="ks"){var ss=value.split(delimiter_pattern,3);info[key]=[parseFloat(ss[0]),parseFloat(ss[1]),parseFloat(ss[2])]}else{info[key]=value}}}var materialCreator=new THREE.MTLLoader.MaterialCreator(this.texturePath||this.path,this.materialOptions);materialCreator.setCrossOrigin(this.crossOrigin);materialCreator.setManager(this.manager);materialCreator.setMaterials(materialsInfo);return materialCreator}};THREE.MTLLoader.MaterialCreator=function(baseUrl,options){this.baseUrl=baseUrl||"";this.options=options;this.materialsInfo={};this.materials={};this.materialsArray=[];this.nameLookup={};this.side=this.options&&this.options.side?this.options.side:THREE.FrontSide;this.wrap=this.options&&this.options.wrap?this.options.wrap:THREE.RepeatWrapping};THREE.MTLLoader.MaterialCreator.prototype={constructor:THREE.MTLLoader.MaterialCreator,setCrossOrigin:function(value){this.crossOrigin=value},setManager:function(value){this.manager=value},setMaterials:function(materialsInfo){this.materialsInfo=this.convert(materialsInfo);this.materials={};this.materialsArray=[];this.nameLookup={}},convert:function(materialsInfo){if(!this.options)return materialsInfo;var converted={};for(var mn in materialsInfo){var mat=materialsInfo[mn];var covmat={};converted[mn]=covmat;for(var prop in mat){var save=true;var value=mat[prop];var lprop=prop.toLowerCase();switch(lprop){case"kd":case"ka":case"ks":if(this.options&&this.options.normalizeRGB){value=[value[0]/255,value[1]/255,value[2]/255]}if(this.options&&this.options.ignoreZeroRGBs){if(value[0]===0&&value[1]===0&&value[2]===0){save=false}}break;default:break}if(save){covmat[lprop]=value}}}return converted},preload:function(){for(var mn in this.materialsInfo){this.create(mn)}},getIndex:function(materialName){return this.nameLookup[materialName]},getAsArray:function(){var index=0;for(var mn in this.materialsInfo){this.materialsArray[index]=this.create(mn);this.nameLookup[mn]=index;index++}return this.materialsArray},create:function(materialName){if(this.materials[materialName]===undefined){this.createMaterial_(materialName)}return this.materials[materialName]},createMaterial_:function(materialName){var scope=this;var mat=this.materialsInfo[materialName];var params={name:materialName,side:this.side};function resolveURL(baseUrl,url){if(typeof url!=="string"||url==="")return"";if(/^https?:\/\//i.test(url))return url;return baseUrl+url}function setMapForType(mapType,value){if(params[mapType])return;var texParams=scope.getTextureParams(value,params);var map=scope.loadTexture(resolveURL(scope.baseUrl,texParams.url));map.repeat.copy(texParams.scale);map.offset.copy(texParams.offset);map.wrapS=scope.wrap;map.wrapT=scope.wrap;params[mapType]=map}for(var prop in mat){var value=mat[prop];var n;if(value==="")continue;switch(prop.toLowerCase()){case"kd":params.color=(new THREE.Color).fromArray(value);
break;case"ks":params.specular=(new THREE.Color).fromArray(value);break;case"map_kd":setMapForType("map",value);break;case"map_ks":setMapForType("specularMap",value);break;case"map_bump":case"bump":setMapForType("bumpMap",value);break;case"ns":params.shininess=parseFloat(value);break;case"d":n=parseFloat(value);if(n<1){params.opacity=n;params.transparent=true}break;case"tr":n=parseFloat(value);if(n>0){params.opacity=1-n;params.transparent=true}break;default:break}}this.materials[materialName]=new THREE.MeshPhongMaterial(params);return this.materials[materialName]},getTextureParams:function(value,matParams){var texParams={scale:new THREE.Vector2(1,1),offset:new THREE.Vector2(0,0)};var items=value.split(/\s+/);var pos;pos=items.indexOf("-bm");if(pos>=0){matParams.bumpScale=parseFloat(items[pos+1]);items.splice(pos,2)}pos=items.indexOf("-s");if(pos>=0){texParams.scale.set(parseFloat(items[pos+1]),parseFloat(items[pos+2]));items.splice(pos,4)}pos=items.indexOf("-o");if(pos>=0){texParams.offset.set(parseFloat(items[pos+1]),parseFloat(items[pos+2]));items.splice(pos,4)}texParams.url=items.join(" ").trim();return texParams},loadTexture:function(url,mapping,onLoad,onProgress,onError){var texture;var loader=THREE.Loader.Handlers.get(url);var manager=this.manager!==undefined?this.manager:THREE.DefaultLoadingManager;if(loader===null){loader=new THREE.TextureLoader(manager)}if(loader.setCrossOrigin)loader.setCrossOrigin(this.crossOrigin);texture=loader.load(url,onLoad,onProgress,onError);if(mapping!==undefined)texture.mapping=mapping;return texture}}},{}],45:[function(_dereq_,module,exports){THREE.OBJLoader=function(manager){this.manager=manager!==undefined?manager:THREE.DefaultLoadingManager;this.materials=null;this.regexp={vertex_pattern:/^v\s+([\d\.\+\-eE]+)\s+([\d\.\+\-eE]+)\s+([\d\.\+\-eE]+)/,normal_pattern:/^vn\s+([\d\.\+\-eE]+)\s+([\d\.\+\-eE]+)\s+([\d\.\+\-eE]+)/,uv_pattern:/^vt\s+([\d\.\+\-eE]+)\s+([\d\.\+\-eE]+)/,face_vertex:/^f\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)(?:\s+(-?\d+))?/,face_vertex_uv:/^f\s+(-?\d+)\/(-?\d+)\s+(-?\d+)\/(-?\d+)\s+(-?\d+)\/(-?\d+)(?:\s+(-?\d+)\/(-?\d+))?/,face_vertex_uv_normal:/^f\s+(-?\d+)\/(-?\d+)\/(-?\d+)\s+(-?\d+)\/(-?\d+)\/(-?\d+)\s+(-?\d+)\/(-?\d+)\/(-?\d+)(?:\s+(-?\d+)\/(-?\d+)\/(-?\d+))?/,face_vertex_normal:/^f\s+(-?\d+)\/\/(-?\d+)\s+(-?\d+)\/\/(-?\d+)\s+(-?\d+)\/\/(-?\d+)(?:\s+(-?\d+)\/\/(-?\d+))?/,object_pattern:/^[og]\s*(.+)?/,smoothing_pattern:/^s\s+(\d+|on|off)/,material_library_pattern:/^mtllib /,material_use_pattern:/^usemtl /}};THREE.OBJLoader.prototype={constructor:THREE.OBJLoader,load:function(url,onLoad,onProgress,onError){var scope=this;var loader=new THREE.FileLoader(scope.manager);loader.setPath(this.path);loader.load(url,function(text){onLoad(scope.parse(text))},onProgress,onError)},setPath:function(value){this.path=value},setMaterials:function(materials){this.materials=materials},_createParserState:function(){var state={objects:[],object:{},vertices:[],normals:[],uvs:[],materialLibraries:[],startObject:function(name,fromDeclaration){if(this.object&&this.object.fromDeclaration===false){this.object.name=name;this.object.fromDeclaration=fromDeclaration!==false;return}var previousMaterial=this.object&&typeof this.object.currentMaterial==="function"?this.object.currentMaterial():undefined;if(this.object&&typeof this.object._finalize==="function"){this.object._finalize(true)}this.object={name:name||"",fromDeclaration:fromDeclaration!==false,geometry:{vertices:[],normals:[],uvs:[]},materials:[],smooth:true,startMaterial:function(name,libraries){var previous=this._finalize(false);if(previous&&(previous.inherited||previous.groupCount<=0)){this.materials.splice(previous.index,1)}var material={index:this.materials.length,name:name||"",mtllib:Array.isArray(libraries)&&libraries.length>0?libraries[libraries.length-1]:"",smooth:previous!==undefined?previous.smooth:this.smooth,groupStart:previous!==undefined?previous.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:false,clone:function(index){var cloned={index:typeof index==="number"?index:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:false};cloned.clone=this.clone.bind(cloned);return cloned}};this.materials.push(material);return material},currentMaterial:function(){if(this.materials.length>0){return this.materials[this.materials.length-1]}return undefined},_finalize:function(end){var lastMultiMaterial=this.currentMaterial();if(lastMultiMaterial&&lastMultiMaterial.groupEnd===-1){lastMultiMaterial.groupEnd=this.geometry.vertices.length/3;lastMultiMaterial.groupCount=lastMultiMaterial.groupEnd-lastMultiMaterial.groupStart;lastMultiMaterial.inherited=false}if(end&&this.materials.length>1){for(var mi=this.materials.length-1;mi>=0;mi--){if(this.materials[mi].groupCount<=0){this.materials.splice(mi,1)}}}if(end&&this.materials.length===0){this.materials.push({name:"",smooth:this.smooth})}return lastMultiMaterial}};if(previousMaterial&&previousMaterial.name&&typeof previousMaterial.clone==="function"){var declared=previousMaterial.clone(0);declared.inherited=true;this.object.materials.push(declared)}this.objects.push(this.object)},finalize:function(){if(this.object&&typeof this.object._finalize==="function"){this.object._finalize(true)}},parseVertexIndex:function(value,len){var index=parseInt(value,10);return(index>=0?index-1:index+len/3)*3},parseNormalIndex:function(value,len){var index=parseInt(value,10);return(index>=0?index-1:index+len/3)*3},parseUVIndex:function(value,len){var index=parseInt(value,10);return(index>=0?index-1:index+len/2)*2},addVertex:function(a,b,c){var src=this.vertices;var dst=this.object.geometry.vertices;dst.push(src[a+0]);dst.push(src[a+1]);dst.push(src[a+2]);dst.push(src[b+0]);dst.push(src[b+1]);dst.push(src[b+2]);dst.push(src[c+0]);dst.push(src[c+1]);dst.push(src[c+2])},addVertexLine:function(a){var src=this.vertices;var dst=this.object.geometry.vertices;dst.push(src[a+0]);dst.push(src[a+1]);dst.push(src[a+2])},addNormal:function(a,b,c){var src=this.normals;var dst=this.object.geometry.normals;dst.push(src[a+0]);dst.push(src[a+1]);dst.push(src[a+2]);dst.push(src[b+0]);dst.push(src[b+1]);dst.push(src[b+2]);dst.push(src[c+0]);dst.push(src[c+1]);dst.push(src[c+2])},addUV:function(a,b,c){var src=this.uvs;var dst=this.object.geometry.uvs;dst.push(src[a+0]);dst.push(src[a+1]);dst.push(src[b+0]);dst.push(src[b+1]);dst.push(src[c+0]);dst.push(src[c+1])},addUVLine:function(a){var src=this.uvs;var dst=this.object.geometry.uvs;dst.push(src[a+0]);dst.push(src[a+1])},addFace:function(a,b,c,d,ua,ub,uc,ud,na,nb,nc,nd){var vLen=this.vertices.length;var ia=this.parseVertexIndex(a,vLen);var ib=this.parseVertexIndex(b,vLen);var ic=this.parseVertexIndex(c,vLen);var id;if(d===undefined){this.addVertex(ia,ib,ic)}else{id=this.parseVertexIndex(d,vLen);this.addVertex(ia,ib,id);this.addVertex(ib,ic,id)}if(ua!==undefined){var uvLen=this.uvs.length;ia=this.parseUVIndex(ua,uvLen);ib=this.parseUVIndex(ub,uvLen);ic=this.parseUVIndex(uc,uvLen);if(d===undefined){this.addUV(ia,ib,ic)}else{id=this.parseUVIndex(ud,uvLen);this.addUV(ia,ib,id);this.addUV(ib,ic,id)}}if(na!==undefined){var nLen=this.normals.length;ia=this.parseNormalIndex(na,nLen);ib=na===nb?ia:this.parseNormalIndex(nb,nLen);ic=na===nc?ia:this.parseNormalIndex(nc,nLen);if(d===undefined){this.addNormal(ia,ib,ic)}else{id=this.parseNormalIndex(nd,nLen);this.addNormal(ia,ib,id);this.addNormal(ib,ic,id)}}},addLineGeometry:function(vertices,uvs){this.object.geometry.type="Line";var vLen=this.vertices.length;var uvLen=this.uvs.length;for(var vi=0,l=vertices.length;vi<l;vi++){this.addVertexLine(this.parseVertexIndex(vertices[vi],vLen))}for(var uvi=0,l=uvs.length;uvi<l;uvi++){this.addUVLine(this.parseUVIndex(uvs[uvi],uvLen))}}};state.startObject("",false);return state},parse:function(text){console.time("OBJLoader");var state=this._createParserState();if(text.indexOf("\r\n")!==-1){text=text.replace(/\r\n/g,"\n")}if(text.indexOf("\\\n")!==-1){text=text.replace(/\\\n/g,"")}var lines=text.split("\n");var line="",lineFirstChar="",lineSecondChar="";var lineLength=0;var result=[];var trimLeft=typeof"".trimLeft==="function";for(var i=0,l=lines.length;i<l;i++){line=lines[i];line=trimLeft?line.trimLeft():line.trim();lineLength=line.length;if(lineLength===0)continue;lineFirstChar=line.charAt(0);if(lineFirstChar==="#")continue;if(lineFirstChar==="v"){lineSecondChar=line.charAt(1);if(lineSecondChar===" "&&(result=this.regexp.vertex_pattern.exec(line))!==null){state.vertices.push(parseFloat(result[1]),parseFloat(result[2]),parseFloat(result[3]))}else if(lineSecondChar==="n"&&(result=this.regexp.normal_pattern.exec(line))!==null){state.normals.push(parseFloat(result[1]),parseFloat(result[2]),parseFloat(result[3]))}else if(lineSecondChar==="t"&&(result=this.regexp.uv_pattern.exec(line))!==null){state.uvs.push(parseFloat(result[1]),parseFloat(result[2]))}else{throw new Error("Unexpected vertex/normal/uv line: '"+line+"'")}}else if(lineFirstChar==="f"){if((result=this.regexp.face_vertex_uv_normal.exec(line))!==null){state.addFace(result[1],result[4],result[7],result[10],result[2],result[5],result[8],result[11],result[3],result[6],result[9],result[12])}else if((result=this.regexp.face_vertex_uv.exec(line))!==null){state.addFace(result[1],result[3],result[5],result[7],result[2],result[4],result[6],result[8])}else if((result=this.regexp.face_vertex_normal.exec(line))!==null){state.addFace(result[1],result[3],result[5],result[7],undefined,undefined,undefined,undefined,result[2],result[4],result[6],result[8])}else if((result=this.regexp.face_vertex.exec(line))!==null){state.addFace(result[1],result[2],result[3],result[4])}else{throw new Error("Unexpected face line: '"+line+"'")}}else if(lineFirstChar==="l"){var lineParts=line.substring(1).trim().split(" ");var lineVertices=[],lineUVs=[];if(line.indexOf("/")===-1){lineVertices=lineParts}else{for(var li=0,llen=lineParts.length;li<llen;li++){var parts=lineParts[li].split("/");if(parts[0]!=="")lineVertices.push(parts[0]);if(parts[1]!=="")lineUVs.push(parts[1])}}state.addLineGeometry(lineVertices,lineUVs)}else if((result=this.regexp.object_pattern.exec(line))!==null){var name=(" "+result[0].substr(1).trim()).substr(1);state.startObject(name)}else if(this.regexp.material_use_pattern.test(line)){state.object.startMaterial(line.substring(7).trim(),state.materialLibraries)}else if(this.regexp.material_library_pattern.test(line)){state.materialLibraries.push(line.substring(7).trim())}else if((result=this.regexp.smoothing_pattern.exec(line))!==null){var value=result[1].trim().toLowerCase();state.object.smooth=value!=="0"&&value!=="off";var material=state.object.currentMaterial();if(material){material.smooth=state.object.smooth}}else{if(line==="\x00")continue;throw new Error("Unexpected line: '"+line+"'")}}state.finalize();var container=new THREE.Group;container.materialLibraries=[].concat(state.materialLibraries);for(var i=0,l=state.objects.length;i<l;i++){var object=state.objects[i];var geometry=object.geometry;var materials=object.materials;var isLine=geometry.type==="Line";if(geometry.vertices.length===0)continue;var buffergeometry=new THREE.BufferGeometry;buffergeometry.addAttribute("position",new THREE.BufferAttribute(new Float32Array(geometry.vertices),3));if(geometry.normals.length>0){buffergeometry.addAttribute("normal",new THREE.BufferAttribute(new Float32Array(geometry.normals),3))}else{buffergeometry.computeVertexNormals()}if(geometry.uvs.length>0){buffergeometry.addAttribute("uv",new THREE.BufferAttribute(new Float32Array(geometry.uvs),2))}var createdMaterials=[];for(var mi=0,miLen=materials.length;mi<miLen;mi++){var sourceMaterial=materials[mi];var material=undefined;if(this.materials!==null){material=this.materials.create(sourceMaterial.name);if(isLine&&material&&!(material instanceof THREE.LineBasicMaterial)){var materialLine=new THREE.LineBasicMaterial;materialLine.copy(material);material=materialLine}}if(!material){material=!isLine?new THREE.MeshPhongMaterial:new THREE.LineBasicMaterial;material.name=sourceMaterial.name}material.shading=sourceMaterial.smooth?THREE.SmoothShading:THREE.FlatShading;createdMaterials.push(material)}var mesh;if(createdMaterials.length>1){for(var mi=0,miLen=materials.length;mi<miLen;mi++){var sourceMaterial=materials[mi];buffergeometry.addGroup(sourceMaterial.groupStart,sourceMaterial.groupCount,mi)}mesh=!isLine?new THREE.Mesh(buffergeometry,createdMaterials):new THREE.LineSegments(buffergeometry,createdMaterials)}else{mesh=!isLine?new THREE.Mesh(buffergeometry,createdMaterials[0]):new THREE.LineSegments(buffergeometry,createdMaterials[0])}mesh.name=object.name;container.add(mesh)}console.timeEnd("OBJLoader");return container}}},{}],46:[function(_dereq_,module,exports){exports=module.exports=trim;function trim(str){return str.replace(/^\s*|\s*$/g,"")}exports.left=function(str){return str.replace(/^\s*/,"")};exports.right=function(str){return str.replace(/\s*$/,"")}},{}],47:[function(_dereq_,module,exports){module.exports={_args:[[{raw:"webvr-polyfill@^0.9.36",scope:null,escapedName:"webvr-polyfill",name:"webvr-polyfill",rawSpec:"^0.9.36",spec:">=0.9.36 <0.10.0",type:"range"},"/Users/jerome/Downloads/tmp/aframe"]],_from:"webvr-polyfill@>=0.9.36 <0.10.0",_id:"webvr-polyfill@0.9.36",_inCache:true,_location:"/webvr-polyfill",_nodeVersion:"4.8.4",_npmOperationalInternal:{host:"s3://npm-registry-packages",tmp:"tmp/webvr-polyfill-0.9.36.tgz_1499892972378_0.10267087002284825"},_npmUser:{name:"jsantell",email:"jsantell@gmail.com"},_npmVersion:"2.15.11",_phantomChildren:{},_requested:{raw:"webvr-polyfill@^0.9.36",scope:null,escapedName:"webvr-polyfill",name:"webvr-polyfill",rawSpec:"^0.9.36",spec:">=0.9.36 <0.10.0",type:"range"},_requiredBy:["/"],_resolved:"https://registry.npmjs.org/webvr-polyfill/-/webvr-polyfill-0.9.36.tgz",_shasum:"4b1e1556667e804beb0c8c2e67fdfcba3371e8c6",_shrinkwrap:null,_spec:"webvr-polyfill@^0.9.36",_where:"/Users/jerome/Downloads/tmp/aframe",authors:["Boris Smus <boris@smus.com>","Brandon Jones <tojiro@gmail.com>","Jordan Santell <jordan@jsantell.com>"],bugs:{url:"https://github.com/googlevr/webvr-polyfill/issues"},dependencies:{},description:"Use WebVR today, on mobile or desktop, without requiring a special browser build.",devDependencies:{chai:"^3.5.0",jsdom:"^9.12.0",mocha:"^3.2.0",semver:"^5.3.0",webpack:"^2.6.1","webpack-dev-server":"^2.4.5"},directories:{},dist:{shasum:"4b1e1556667e804beb0c8c2e67fdfcba3371e8c6",tarball:"https://registry.npmjs.org/webvr-polyfill/-/webvr-polyfill-0.9.36.tgz"},gitHead:"5f8693a9053ee1dea425e96d14cd1f2bef7a284c",homepage:"https://github.com/googlevr/webvr-polyfill",keywords:["vr","webvr"],license:"Apache-2.0",main:"src/node-entry",maintainers:[{name:"jsantell",email:"jsantell@gmail.com"},{name:"toji",email:"tojiro@gmail.com"},{name:"smus",email:"boris@smus.com"}],name:"webvr-polyfill",optionalDependencies:{},readme:"ERROR: No README data found!",repository:{type:"git",url:"git+https://github.com/googlevr/webvr-polyfill.git"},scripts:{build:"webpack",start:"npm run watch",test:"mocha",watch:"webpack-dev-server"},version:"0.9.36"}},{}],48:[function(_dereq_,module,exports){var Util=_dereq_("./util.js");var WakeLock=_dereq_("./wakelock.js");var nextDisplayId=1e3;var hasShowDeprecationWarning=false;var defaultLeftBounds=[0,0,.5,1];var defaultRightBounds=[.5,0,.5,1];function VRFrameData(){this.leftProjectionMatrix=new Float32Array(16);this.leftViewMatrix=new Float32Array(16);this.rightProjectionMatrix=new Float32Array(16);this.rightViewMatrix=new Float32Array(16);this.pose=null}function VRDisplay(){this.isPolyfilled=true;this.displayId=nextDisplayId++;this.displayName="webvr-polyfill displayName";this.depthNear=.01;this.depthFar=1e4;this.isConnected=true;this.isPresenting=false;this.capabilities={hasPosition:false,hasOrientation:false,hasExternalDisplay:false,canPresent:false,maxLayers:1};this.stageParameters=null;this.waitingForPresent_=false;this.layer_=null;this.fullscreenElement_=null;this.fullscreenWrapper_=null;this.fullscreenElementCachedStyle_=null;this.fullscreenEventTarget_=null;this.fullscreenChangeHandler_=null;this.fullscreenErrorHandler_=null;this.wakelock_=new WakeLock}VRDisplay.prototype.getFrameData=function(frameData){return Util.frameDataFromPose(frameData,this.getPose(),this)};VRDisplay.prototype.getPose=function(){return this.getImmediatePose()};VRDisplay.prototype.requestAnimationFrame=function(callback){return window.requestAnimationFrame(callback)};VRDisplay.prototype.cancelAnimationFrame=function(id){return window.cancelAnimationFrame(id)};VRDisplay.prototype.wrapForFullscreen=function(element){if(Util.isIOS()){return element}if(!this.fullscreenWrapper_){this.fullscreenWrapper_=document.createElement("div");var cssProperties=["height: "+Math.min(screen.height,screen.width)+"px !important","top: 0 !important","left: 0 !important","right: 0 !important","border: 0","margin: 0","padding: 0","z-index: 999999 !important","position: fixed"];this.fullscreenWrapper_.setAttribute("style",cssProperties.join("; ")+";");this.fullscreenWrapper_.classList.add("webvr-polyfill-fullscreen-wrapper")}if(this.fullscreenElement_==element){return this.fullscreenWrapper_}this.removeFullscreenWrapper();this.fullscreenElement_=element;var parent=this.fullscreenElement_.parentElement;parent.insertBefore(this.fullscreenWrapper_,this.fullscreenElement_);parent.removeChild(this.fullscreenElement_);this.fullscreenWrapper_.insertBefore(this.fullscreenElement_,this.fullscreenWrapper_.firstChild);this.fullscreenElementCachedStyle_=this.fullscreenElement_.getAttribute("style");var self=this;function applyFullscreenElementStyle(){if(!self.fullscreenElement_){return}var cssProperties=["position: absolute","top: 0","left: 0","width: "+Math.max(screen.width,screen.height)+"px","height: "+Math.min(screen.height,screen.width)+"px","border: 0","margin: 0","padding: 0"];self.fullscreenElement_.setAttribute("style",cssProperties.join("; ")+";")}applyFullscreenElementStyle();return this.fullscreenWrapper_};VRDisplay.prototype.removeFullscreenWrapper=function(){if(!this.fullscreenElement_){return}var element=this.fullscreenElement_;if(this.fullscreenElementCachedStyle_){element.setAttribute("style",this.fullscreenElementCachedStyle_)}else{element.removeAttribute("style")}this.fullscreenElement_=null;this.fullscreenElementCachedStyle_=null;var parent=this.fullscreenWrapper_.parentElement;this.fullscreenWrapper_.removeChild(element);parent.insertBefore(element,this.fullscreenWrapper_);parent.removeChild(this.fullscreenWrapper_);return element};VRDisplay.prototype.requestPresent=function(layers){var wasPresenting=this.isPresenting;var self=this;if(!(layers instanceof Array)){if(!hasShowDeprecationWarning){console.warn("Using a deprecated form of requestPresent. Should pass in an array of VRLayers.");hasShowDeprecationWarning=true}layers=[layers]}return new Promise(function(resolve,reject){if(!self.capabilities.canPresent){reject(new Error("VRDisplay is not capable of presenting."));return}if(layers.length==0||layers.length>self.capabilities.maxLayers){reject(new Error("Invalid number of layers."));return}var incomingLayer=layers[0];if(!incomingLayer.source){resolve();return}var leftBounds=incomingLayer.leftBounds||defaultLeftBounds;var rightBounds=incomingLayer.rightBounds||defaultRightBounds;if(wasPresenting){var layer=self.layer_;if(layer.source!==incomingLayer.source){layer.source=incomingLayer.source}for(var i=0;i<4;i++){layer.leftBounds[i]=leftBounds[i];layer.rightBounds[i]=rightBounds[i]}resolve();return}self.layer_={predistorted:incomingLayer.predistorted,source:incomingLayer.source,leftBounds:leftBounds.slice(0),rightBounds:rightBounds.slice(0)};self.waitingForPresent_=false;if(self.layer_&&self.layer_.source){var fullscreenElement=self.wrapForFullscreen(self.layer_.source);var onFullscreenChange=function(){var actualFullscreenElement=Util.getFullscreenElement();self.isPresenting=fullscreenElement===actualFullscreenElement;if(self.isPresenting){if(screen.orientation&&screen.orientation.lock){screen.orientation.lock("landscape-primary").catch(function(error){console.error("screen.orientation.lock() failed due to",error.message)})}self.waitingForPresent_=false;self.beginPresent_();resolve()}else{if(screen.orientation&&screen.orientation.unlock){screen.orientation.unlock()}self.removeFullscreenWrapper();self.wakelock_.release();self.endPresent_();self.removeFullscreenListeners_()}self.fireVRDisplayPresentChange_()};var onFullscreenError=function(){if(!self.waitingForPresent_){return}self.removeFullscreenWrapper();self.removeFullscreenListeners_();self.wakelock_.release();self.waitingForPresent_=false;self.isPresenting=false;reject(new Error("Unable to present."))};self.addFullscreenListeners_(fullscreenElement,onFullscreenChange,onFullscreenError);if(Util.requestFullscreen(fullscreenElement)){self.wakelock_.request();self.waitingForPresent_=true}else if(Util.isIOS()||Util.isWebViewAndroid()){self.wakelock_.request();self.isPresenting=true;self.beginPresent_();self.fireVRDisplayPresentChange_();resolve()}}if(!self.waitingForPresent_&&!Util.isIOS()){Util.exitFullscreen();reject(new Error("Unable to present."))}})};VRDisplay.prototype.exitPresent=function(){var wasPresenting=this.isPresenting;var self=this;this.isPresenting=false;this.layer_=null;this.wakelock_.release();return new Promise(function(resolve,reject){if(wasPresenting){if(!Util.exitFullscreen()&&Util.isIOS()){self.endPresent_();self.fireVRDisplayPresentChange_()}if(Util.isWebViewAndroid()){self.removeFullscreenWrapper();self.removeFullscreenListeners_();self.endPresent_();self.fireVRDisplayPresentChange_()}resolve()}else{reject(new Error("Was not presenting to VRDisplay."))}})};VRDisplay.prototype.getLayers=function(){if(this.layer_){return[this.layer_]}return[]};VRDisplay.prototype.fireVRDisplayPresentChange_=function(){var event=new CustomEvent("vrdisplaypresentchange",{detail:{display:this}});window.dispatchEvent(event)};VRDisplay.prototype.fireVRDisplayConnect_=function(){var event=new CustomEvent("vrdisplayconnect",{detail:{display:this}});window.dispatchEvent(event)};VRDisplay.prototype.addFullscreenListeners_=function(element,changeHandler,errorHandler){this.removeFullscreenListeners_();this.fullscreenEventTarget_=element;this.fullscreenChangeHandler_=changeHandler;this.fullscreenErrorHandler_=errorHandler;if(changeHandler){if(document.fullscreenEnabled){element.addEventListener("fullscreenchange",changeHandler,false)}else if(document.webkitFullscreenEnabled){element.addEventListener("webkitfullscreenchange",changeHandler,false)}else if(document.mozFullScreenEnabled){document.addEventListener("mozfullscreenchange",changeHandler,false)}else if(document.msFullscreenEnabled){element.addEventListener("msfullscreenchange",changeHandler,false)}}if(errorHandler){if(document.fullscreenEnabled){element.addEventListener("fullscreenerror",errorHandler,false)}else if(document.webkitFullscreenEnabled){element.addEventListener("webkitfullscreenerror",errorHandler,false)}else if(document.mozFullScreenEnabled){document.addEventListener("mozfullscreenerror",errorHandler,false)}else if(document.msFullscreenEnabled){element.addEventListener("msfullscreenerror",errorHandler,false)}}};VRDisplay.prototype.removeFullscreenListeners_=function(){if(!this.fullscreenEventTarget_)return;var element=this.fullscreenEventTarget_;if(this.fullscreenChangeHandler_){var changeHandler=this.fullscreenChangeHandler_;element.removeEventListener("fullscreenchange",changeHandler,false);element.removeEventListener("webkitfullscreenchange",changeHandler,false);document.removeEventListener("mozfullscreenchange",changeHandler,false);element.removeEventListener("msfullscreenchange",changeHandler,false)}if(this.fullscreenErrorHandler_){var errorHandler=this.fullscreenErrorHandler_;element.removeEventListener("fullscreenerror",errorHandler,false);element.removeEventListener("webkitfullscreenerror",errorHandler,false);document.removeEventListener("mozfullscreenerror",errorHandler,false);element.removeEventListener("msfullscreenerror",errorHandler,false)}this.fullscreenEventTarget_=null;this.fullscreenChangeHandler_=null;this.fullscreenErrorHandler_=null};VRDisplay.prototype.beginPresent_=function(){};VRDisplay.prototype.endPresent_=function(){};VRDisplay.prototype.submitFrame=function(pose){};VRDisplay.prototype.getEyeParameters=function(whichEye){return null};function VRDevice(){this.isPolyfilled=true;this.hardwareUnitId="webvr-polyfill hardwareUnitId";this.deviceId="webvr-polyfill deviceId";this.deviceName="webvr-polyfill deviceName"}function HMDVRDevice(){}HMDVRDevice.prototype=new VRDevice;function PositionSensorVRDevice(){}PositionSensorVRDevice.prototype=new VRDevice;module.exports.VRFrameData=VRFrameData;module.exports.VRDisplay=VRDisplay;module.exports.VRDevice=VRDevice;module.exports.HMDVRDevice=HMDVRDevice;module.exports.PositionSensorVRDevice=PositionSensorVRDevice},{"./util.js":68,"./wakelock.js":70}],49:[function(_dereq_,module,exports){var CardboardUI=_dereq_("./cardboard-ui.js");var Util=_dereq_("./util.js");var WGLUPreserveGLState=_dereq_("./deps/wglu-preserve-state.js");var distortionVS=["attribute vec2 position;","attribute vec3 texCoord;","varying vec2 vTexCoord;","uniform vec4 viewportOffsetScale[2];","void main() {"," vec4 viewport = viewportOffsetScale[int(texCoord.z)];"," vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;"," gl_Position = vec4( position, 1.0, 1.0 );","}"].join("\n");var distortionFS=["precision mediump float;","uniform sampler2D diffuse;","varying vec2 vTexCoord;","void main() {"," gl_FragColor = texture2D(diffuse, vTexCoord);","}"].join("\n");function CardboardDistorter(gl){this.gl=gl;this.ctxAttribs=gl.getContextAttributes();this.meshWidth=20;this.meshHeight=20;this.bufferScale=window.WebVRConfig.BUFFER_SCALE;this.bufferWidth=gl.drawingBufferWidth;this.bufferHeight=gl.drawingBufferHeight;this.realBindFramebuffer=gl.bindFramebuffer;this.realEnable=gl.enable;this.realDisable=gl.disable;this.realColorMask=gl.colorMask;this.realClearColor=gl.clearColor;this.realViewport=gl.viewport;if(!Util.isIOS()){this.realCanvasWidth=Object.getOwnPropertyDescriptor(gl.canvas.__proto__,"width");this.realCanvasHeight=Object.getOwnPropertyDescriptor(gl.canvas.__proto__,"height")}this.isPatched=false;this.lastBoundFramebuffer=null;this.cullFace=false;this.depthTest=false;this.blend=false;this.scissorTest=false;this.stencilTest=false;this.viewport=[0,0,0,0];this.colorMask=[true,true,true,true];this.clearColor=[0,0,0,0];this.attribs={position:0,texCoord:1};this.program=Util.linkProgram(gl,distortionVS,distortionFS,this.attribs);this.uniforms=Util.getProgramUniforms(gl,this.program);this.viewportOffsetScale=new Float32Array(8);this.setTextureBounds();this.vertexBuffer=gl.createBuffer();this.indexBuffer=gl.createBuffer();this.indexCount=0;this.renderTarget=gl.createTexture();this.framebuffer=gl.createFramebuffer();this.depthStencilBuffer=null;this.depthBuffer=null;this.stencilBuffer=null;if(this.ctxAttribs.depth&&this.ctxAttribs.stencil){this.depthStencilBuffer=gl.createRenderbuffer()}else if(this.ctxAttribs.depth){this.depthBuffer=gl.createRenderbuffer()}else if(this.ctxAttribs.stencil){this.stencilBuffer=gl.createRenderbuffer()}this.patch();this.onResize();if(!window.WebVRConfig.CARDBOARD_UI_DISABLED){this.cardboardUI=new CardboardUI(gl)}}CardboardDistorter.prototype.destroy=function(){var gl=this.gl;this.unpatch();gl.deleteProgram(this.program);gl.deleteBuffer(this.vertexBuffer);gl.deleteBuffer(this.indexBuffer);gl.deleteTexture(this.renderTarget);gl.deleteFramebuffer(this.framebuffer);if(this.depthStencilBuffer){gl.deleteRenderbuffer(this.depthStencilBuffer)}if(this.depthBuffer){gl.deleteRenderbuffer(this.depthBuffer)}if(this.stencilBuffer){gl.deleteRenderbuffer(this.stencilBuffer)}if(this.cardboardUI){this.cardboardUI.destroy()}};CardboardDistorter.prototype.onResize=function(){var gl=this.gl;var self=this;var glState=[gl.RENDERBUFFER_BINDING,gl.TEXTURE_BINDING_2D,gl.TEXTURE0];WGLUPreserveGLState(gl,glState,function(gl){self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,null);if(self.scissorTest){self.realDisable.call(gl,gl.SCISSOR_TEST)}self.realColorMask.call(gl,true,true,true,true);self.realViewport.call(gl,0,0,gl.drawingBufferWidth,gl.drawingBufferHeight);self.realClearColor.call(gl,0,0,0,1);gl.clear(gl.COLOR_BUFFER_BIT);self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,self.framebuffer);gl.bindTexture(gl.TEXTURE_2D,self.renderTarget);gl.texImage2D(gl.TEXTURE_2D,0,self.ctxAttribs.alpha?gl.RGBA:gl.RGB,self.bufferWidth,self.bufferHeight,0,self.ctxAttribs.alpha?gl.RGBA:gl.RGB,gl.UNSIGNED_BYTE,null);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,self.renderTarget,0);if(self.ctxAttribs.depth&&self.ctxAttribs.stencil){gl.bindRenderbuffer(gl.RENDERBUFFER,self.depthStencilBuffer);gl.renderbufferStorage(gl.RENDERBUFFER,gl.DEPTH_STENCIL,self.bufferWidth,self.bufferHeight);gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.DEPTH_STENCIL_ATTACHMENT,gl.RENDERBUFFER,self.depthStencilBuffer)}else if(self.ctxAttribs.depth){gl.bindRenderbuffer(gl.RENDERBUFFER,self.depthBuffer);gl.renderbufferStorage(gl.RENDERBUFFER,gl.DEPTH_COMPONENT16,self.bufferWidth,self.bufferHeight);gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.DEPTH_ATTACHMENT,gl.RENDERBUFFER,self.depthBuffer)}else if(self.ctxAttribs.stencil){gl.bindRenderbuffer(gl.RENDERBUFFER,self.stencilBuffer);gl.renderbufferStorage(gl.RENDERBUFFER,gl.STENCIL_INDEX8,self.bufferWidth,self.bufferHeight);gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.STENCIL_ATTACHMENT,gl.RENDERBUFFER,self.stencilBuffer)}if(!gl.checkFramebufferStatus(gl.FRAMEBUFFER)===gl.FRAMEBUFFER_COMPLETE){console.error("Framebuffer incomplete!")}self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,self.lastBoundFramebuffer);if(self.scissorTest){self.realEnable.call(gl,gl.SCISSOR_TEST)}self.realColorMask.apply(gl,self.colorMask);self.realViewport.apply(gl,self.viewport);self.realClearColor.apply(gl,self.clearColor)});if(this.cardboardUI){this.cardboardUI.onResize()}};CardboardDistorter.prototype.patch=function(){if(this.isPatched){return}var self=this;var canvas=this.gl.canvas;var gl=this.gl;if(!Util.isIOS()){canvas.width=Util.getScreenWidth()*this.bufferScale;canvas.height=Util.getScreenHeight()*this.bufferScale;Object.defineProperty(canvas,"width",{configurable:true,enumerable:true,get:function(){return self.bufferWidth},set:function(value){self.bufferWidth=value;self.realCanvasWidth.set.call(canvas,value);self.onResize()}});Object.defineProperty(canvas,"height",{configurable:true,enumerable:true,get:function(){return self.bufferHeight},set:function(value){self.bufferHeight=value;self.realCanvasHeight.set.call(canvas,value);self.onResize()}})}this.lastBoundFramebuffer=gl.getParameter(gl.FRAMEBUFFER_BINDING);if(this.lastBoundFramebuffer==null){this.lastBoundFramebuffer=this.framebuffer;this.gl.bindFramebuffer(gl.FRAMEBUFFER,this.framebuffer)}this.gl.bindFramebuffer=function(target,framebuffer){self.lastBoundFramebuffer=framebuffer?framebuffer:self.framebuffer;self.realBindFramebuffer.call(gl,target,self.lastBoundFramebuffer)};this.cullFace=gl.getParameter(gl.CULL_FACE);this.depthTest=gl.getParameter(gl.DEPTH_TEST);this.blend=gl.getParameter(gl.BLEND);this.scissorTest=gl.getParameter(gl.SCISSOR_TEST);this.stencilTest=gl.getParameter(gl.STENCIL_TEST);gl.enable=function(pname){switch(pname){case gl.CULL_FACE:self.cullFace=true;break;case gl.DEPTH_TEST:self.depthTest=true;break;case gl.BLEND:self.blend=true;break;case gl.SCISSOR_TEST:self.scissorTest=true;break;case gl.STENCIL_TEST:self.stencilTest=true;break}self.realEnable.call(gl,pname)};gl.disable=function(pname){switch(pname){case gl.CULL_FACE:self.cullFace=false;
break;case gl.DEPTH_TEST:self.depthTest=false;break;case gl.BLEND:self.blend=false;break;case gl.SCISSOR_TEST:self.scissorTest=false;break;case gl.STENCIL_TEST:self.stencilTest=false;break}self.realDisable.call(gl,pname)};this.colorMask=gl.getParameter(gl.COLOR_WRITEMASK);gl.colorMask=function(r,g,b,a){self.colorMask[0]=r;self.colorMask[1]=g;self.colorMask[2]=b;self.colorMask[3]=a;self.realColorMask.call(gl,r,g,b,a)};this.clearColor=gl.getParameter(gl.COLOR_CLEAR_VALUE);gl.clearColor=function(r,g,b,a){self.clearColor[0]=r;self.clearColor[1]=g;self.clearColor[2]=b;self.clearColor[3]=a;self.realClearColor.call(gl,r,g,b,a)};this.viewport=gl.getParameter(gl.VIEWPORT);gl.viewport=function(x,y,w,h){self.viewport[0]=x;self.viewport[1]=y;self.viewport[2]=w;self.viewport[3]=h;self.realViewport.call(gl,x,y,w,h)};this.isPatched=true;Util.safariCssSizeWorkaround(canvas)};CardboardDistorter.prototype.unpatch=function(){if(!this.isPatched){return}var gl=this.gl;var canvas=this.gl.canvas;if(!Util.isIOS()){Object.defineProperty(canvas,"width",this.realCanvasWidth);Object.defineProperty(canvas,"height",this.realCanvasHeight)}canvas.width=this.bufferWidth;canvas.height=this.bufferHeight;gl.bindFramebuffer=this.realBindFramebuffer;gl.enable=this.realEnable;gl.disable=this.realDisable;gl.colorMask=this.realColorMask;gl.clearColor=this.realClearColor;gl.viewport=this.realViewport;if(this.lastBoundFramebuffer==this.framebuffer){gl.bindFramebuffer(gl.FRAMEBUFFER,null)}this.isPatched=false;setTimeout(function(){Util.safariCssSizeWorkaround(canvas)},1)};CardboardDistorter.prototype.setTextureBounds=function(leftBounds,rightBounds){if(!leftBounds){leftBounds=[0,0,.5,1]}if(!rightBounds){rightBounds=[.5,0,.5,1]}this.viewportOffsetScale[0]=leftBounds[0];this.viewportOffsetScale[1]=leftBounds[1];this.viewportOffsetScale[2]=leftBounds[2];this.viewportOffsetScale[3]=leftBounds[3];this.viewportOffsetScale[4]=rightBounds[0];this.viewportOffsetScale[5]=rightBounds[1];this.viewportOffsetScale[6]=rightBounds[2];this.viewportOffsetScale[7]=rightBounds[3]};CardboardDistorter.prototype.submitFrame=function(){var gl=this.gl;var self=this;var glState=[];if(!window.WebVRConfig.DIRTY_SUBMIT_FRAME_BINDINGS){glState.push(gl.CURRENT_PROGRAM,gl.ARRAY_BUFFER_BINDING,gl.ELEMENT_ARRAY_BUFFER_BINDING,gl.TEXTURE_BINDING_2D,gl.TEXTURE0)}WGLUPreserveGLState(gl,glState,function(gl){self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,null);if(self.cullFace){self.realDisable.call(gl,gl.CULL_FACE)}if(self.depthTest){self.realDisable.call(gl,gl.DEPTH_TEST)}if(self.blend){self.realDisable.call(gl,gl.BLEND)}if(self.scissorTest){self.realDisable.call(gl,gl.SCISSOR_TEST)}if(self.stencilTest){self.realDisable.call(gl,gl.STENCIL_TEST)}self.realColorMask.call(gl,true,true,true,true);self.realViewport.call(gl,0,0,gl.drawingBufferWidth,gl.drawingBufferHeight);if(self.ctxAttribs.alpha||Util.isIOS()){self.realClearColor.call(gl,0,0,0,1);gl.clear(gl.COLOR_BUFFER_BIT)}gl.useProgram(self.program);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,self.indexBuffer);gl.bindBuffer(gl.ARRAY_BUFFER,self.vertexBuffer);gl.enableVertexAttribArray(self.attribs.position);gl.enableVertexAttribArray(self.attribs.texCoord);gl.vertexAttribPointer(self.attribs.position,2,gl.FLOAT,false,20,0);gl.vertexAttribPointer(self.attribs.texCoord,3,gl.FLOAT,false,20,8);gl.activeTexture(gl.TEXTURE0);gl.uniform1i(self.uniforms.diffuse,0);gl.bindTexture(gl.TEXTURE_2D,self.renderTarget);gl.uniform4fv(self.uniforms.viewportOffsetScale,self.viewportOffsetScale);gl.drawElements(gl.TRIANGLES,self.indexCount,gl.UNSIGNED_SHORT,0);if(self.cardboardUI){self.cardboardUI.renderNoState()}self.realBindFramebuffer.call(self.gl,gl.FRAMEBUFFER,self.framebuffer);if(!self.ctxAttribs.preserveDrawingBuffer){self.realClearColor.call(gl,0,0,0,0);gl.clear(gl.COLOR_BUFFER_BIT)}if(!window.WebVRConfig.DIRTY_SUBMIT_FRAME_BINDINGS){self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,self.lastBoundFramebuffer)}if(self.cullFace){self.realEnable.call(gl,gl.CULL_FACE)}if(self.depthTest){self.realEnable.call(gl,gl.DEPTH_TEST)}if(self.blend){self.realEnable.call(gl,gl.BLEND)}if(self.scissorTest){self.realEnable.call(gl,gl.SCISSOR_TEST)}if(self.stencilTest){self.realEnable.call(gl,gl.STENCIL_TEST)}self.realColorMask.apply(gl,self.colorMask);self.realViewport.apply(gl,self.viewport);if(self.ctxAttribs.alpha||!self.ctxAttribs.preserveDrawingBuffer){self.realClearColor.apply(gl,self.clearColor)}});if(Util.isIOS()){var canvas=gl.canvas;if(canvas.width!=self.bufferWidth||canvas.height!=self.bufferHeight){self.bufferWidth=canvas.width;self.bufferHeight=canvas.height;self.onResize()}}};CardboardDistorter.prototype.updateDeviceInfo=function(deviceInfo){var gl=this.gl;var self=this;var glState=[gl.ARRAY_BUFFER_BINDING,gl.ELEMENT_ARRAY_BUFFER_BINDING];WGLUPreserveGLState(gl,glState,function(gl){var vertices=self.computeMeshVertices_(self.meshWidth,self.meshHeight,deviceInfo);gl.bindBuffer(gl.ARRAY_BUFFER,self.vertexBuffer);gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);if(!self.indexCount){var indices=self.computeMeshIndices_(self.meshWidth,self.meshHeight);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,self.indexBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,indices,gl.STATIC_DRAW);self.indexCount=indices.length}})};CardboardDistorter.prototype.computeMeshVertices_=function(width,height,deviceInfo){var vertices=new Float32Array(2*width*height*5);var lensFrustum=deviceInfo.getLeftEyeVisibleTanAngles();var noLensFrustum=deviceInfo.getLeftEyeNoLensTanAngles();var viewport=deviceInfo.getLeftEyeVisibleScreenRect(noLensFrustum);var vidx=0;var iidx=0;for(var e=0;e<2;e++){for(var j=0;j<height;j++){for(var i=0;i<width;i++,vidx++){var u=i/(width-1);var v=j/(height-1);var s=u;var t=v;var x=Util.lerp(lensFrustum[0],lensFrustum[2],u);var y=Util.lerp(lensFrustum[3],lensFrustum[1],v);var d=Math.sqrt(x*x+y*y);var r=deviceInfo.distortion.distortInverse(d);var p=x*r/d;var q=y*r/d;u=(p-noLensFrustum[0])/(noLensFrustum[2]-noLensFrustum[0]);v=(q-noLensFrustum[3])/(noLensFrustum[1]-noLensFrustum[3]);var aspect=deviceInfo.device.widthMeters/deviceInfo.device.heightMeters;u=(viewport.x+u*viewport.width-.5)*2;v=(viewport.y+v*viewport.height-.5)*2;vertices[vidx*5+0]=u;vertices[vidx*5+1]=v;vertices[vidx*5+2]=s;vertices[vidx*5+3]=t;vertices[vidx*5+4]=e}}var w=lensFrustum[2]-lensFrustum[0];lensFrustum[0]=-(w+lensFrustum[0]);lensFrustum[2]=w-lensFrustum[2];w=noLensFrustum[2]-noLensFrustum[0];noLensFrustum[0]=-(w+noLensFrustum[0]);noLensFrustum[2]=w-noLensFrustum[2];viewport.x=1-(viewport.x+viewport.width)}return vertices};CardboardDistorter.prototype.computeMeshIndices_=function(width,height){var indices=new Uint16Array(2*(width-1)*(height-1)*6);var halfwidth=width/2;var halfheight=height/2;var vidx=0;var iidx=0;for(var e=0;e<2;e++){for(var j=0;j<height;j++){for(var i=0;i<width;i++,vidx++){if(i==0||j==0)continue;if(i<=halfwidth==j<=halfheight){indices[iidx++]=vidx;indices[iidx++]=vidx-width-1;indices[iidx++]=vidx-width;indices[iidx++]=vidx-width-1;indices[iidx++]=vidx;indices[iidx++]=vidx-1}else{indices[iidx++]=vidx-1;indices[iidx++]=vidx-width;indices[iidx++]=vidx;indices[iidx++]=vidx-width;indices[iidx++]=vidx-1;indices[iidx++]=vidx-width-1}}}}return indices};CardboardDistorter.prototype.getOwnPropertyDescriptor_=function(proto,attrName){var descriptor=Object.getOwnPropertyDescriptor(proto,attrName);if(descriptor.get===undefined||descriptor.set===undefined){descriptor.configurable=true;descriptor.enumerable=true;descriptor.get=function(){return this.getAttribute(attrName)};descriptor.set=function(val){this.setAttribute(attrName,val)}}return descriptor};module.exports=CardboardDistorter},{"./cardboard-ui.js":50,"./deps/wglu-preserve-state.js":52,"./util.js":68}],50:[function(_dereq_,module,exports){var Util=_dereq_("./util.js");var WGLUPreserveGLState=_dereq_("./deps/wglu-preserve-state.js");var uiVS=["attribute vec2 position;","uniform mat4 projectionMat;","void main() {"," gl_Position = projectionMat * vec4( position, -1.0, 1.0 );","}"].join("\n");var uiFS=["precision mediump float;","uniform vec4 color;","void main() {"," gl_FragColor = color;","}"].join("\n");var DEG2RAD=Math.PI/180;var kAnglePerGearSection=60;var kOuterRimEndAngle=12;var kInnerRimBeginAngle=20;var kOuterRadius=1;var kMiddleRadius=.75;var kInnerRadius=.3125;var kCenterLineThicknessDp=4;var kButtonWidthDp=28;var kTouchSlopFactor=1.5;var Angles=[0,kOuterRimEndAngle,kInnerRimBeginAngle,kAnglePerGearSection-kInnerRimBeginAngle,kAnglePerGearSection-kOuterRimEndAngle];function CardboardUI(gl){this.gl=gl;this.attribs={position:0};this.program=Util.linkProgram(gl,uiVS,uiFS,this.attribs);this.uniforms=Util.getProgramUniforms(gl,this.program);this.vertexBuffer=gl.createBuffer();this.gearOffset=0;this.gearVertexCount=0;this.arrowOffset=0;this.arrowVertexCount=0;this.projMat=new Float32Array(16);this.listener=null;this.onResize()}CardboardUI.prototype.destroy=function(){var gl=this.gl;if(this.listener){gl.canvas.removeEventListener("click",this.listener,false)}gl.deleteProgram(this.program);gl.deleteBuffer(this.vertexBuffer)};CardboardUI.prototype.listen=function(optionsCallback,backCallback){var canvas=this.gl.canvas;this.listener=function(event){var midline=canvas.clientWidth/2;var buttonSize=kButtonWidthDp*kTouchSlopFactor;if(event.clientX>midline-buttonSize&&event.clientX<midline+buttonSize&&event.clientY>canvas.clientHeight-buttonSize){optionsCallback(event)}else if(event.clientX<buttonSize&&event.clientY<buttonSize){backCallback(event)}};canvas.addEventListener("click",this.listener,false)};CardboardUI.prototype.onResize=function(){var gl=this.gl;var self=this;var glState=[gl.ARRAY_BUFFER_BINDING];WGLUPreserveGLState(gl,glState,function(gl){var vertices=[];var midline=gl.drawingBufferWidth/2;var physicalPixels=Math.max(screen.width,screen.height)*window.devicePixelRatio;var scalingRatio=gl.drawingBufferWidth/physicalPixels;var dps=scalingRatio*window.devicePixelRatio;var lineWidth=kCenterLineThicknessDp*dps/2;var buttonSize=kButtonWidthDp*kTouchSlopFactor*dps;var buttonScale=kButtonWidthDp*dps/2;var buttonBorder=(kButtonWidthDp*kTouchSlopFactor-kButtonWidthDp)*dps;vertices.push(midline-lineWidth,buttonSize);vertices.push(midline-lineWidth,gl.drawingBufferHeight);vertices.push(midline+lineWidth,buttonSize);vertices.push(midline+lineWidth,gl.drawingBufferHeight);self.gearOffset=vertices.length/2;function addGearSegment(theta,r){var angle=(90-theta)*DEG2RAD;var x=Math.cos(angle);var y=Math.sin(angle);vertices.push(kInnerRadius*x*buttonScale+midline,kInnerRadius*y*buttonScale+buttonScale);vertices.push(r*x*buttonScale+midline,r*y*buttonScale+buttonScale)}for(var i=0;i<=6;i++){var segmentTheta=i*kAnglePerGearSection;addGearSegment(segmentTheta,kOuterRadius);addGearSegment(segmentTheta+kOuterRimEndAngle,kOuterRadius);addGearSegment(segmentTheta+kInnerRimBeginAngle,kMiddleRadius);addGearSegment(segmentTheta+(kAnglePerGearSection-kInnerRimBeginAngle),kMiddleRadius);addGearSegment(segmentTheta+(kAnglePerGearSection-kOuterRimEndAngle),kOuterRadius)}self.gearVertexCount=vertices.length/2-self.gearOffset;self.arrowOffset=vertices.length/2;function addArrowVertex(x,y){vertices.push(buttonBorder+x,gl.drawingBufferHeight-buttonBorder-y)}var angledLineWidth=lineWidth/Math.sin(45*DEG2RAD);addArrowVertex(0,buttonScale);addArrowVertex(buttonScale,0);addArrowVertex(buttonScale+angledLineWidth,angledLineWidth);addArrowVertex(angledLineWidth,buttonScale+angledLineWidth);addArrowVertex(angledLineWidth,buttonScale-angledLineWidth);addArrowVertex(0,buttonScale);addArrowVertex(buttonScale,buttonScale*2);addArrowVertex(buttonScale+angledLineWidth,buttonScale*2-angledLineWidth);addArrowVertex(angledLineWidth,buttonScale-angledLineWidth);addArrowVertex(0,buttonScale);addArrowVertex(angledLineWidth,buttonScale-lineWidth);addArrowVertex(kButtonWidthDp*dps,buttonScale-lineWidth);addArrowVertex(angledLineWidth,buttonScale+lineWidth);addArrowVertex(kButtonWidthDp*dps,buttonScale+lineWidth);self.arrowVertexCount=vertices.length/2-self.arrowOffset;gl.bindBuffer(gl.ARRAY_BUFFER,self.vertexBuffer);gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(vertices),gl.STATIC_DRAW)})};CardboardUI.prototype.render=function(){var gl=this.gl;var self=this;var glState=[gl.CULL_FACE,gl.DEPTH_TEST,gl.BLEND,gl.SCISSOR_TEST,gl.STENCIL_TEST,gl.COLOR_WRITEMASK,gl.VIEWPORT,gl.CURRENT_PROGRAM,gl.ARRAY_BUFFER_BINDING];WGLUPreserveGLState(gl,glState,function(gl){gl.disable(gl.CULL_FACE);gl.disable(gl.DEPTH_TEST);gl.disable(gl.BLEND);gl.disable(gl.SCISSOR_TEST);gl.disable(gl.STENCIL_TEST);gl.colorMask(true,true,true,true);gl.viewport(0,0,gl.drawingBufferWidth,gl.drawingBufferHeight);self.renderNoState()})};CardboardUI.prototype.renderNoState=function(){var gl=this.gl;gl.useProgram(this.program);gl.bindBuffer(gl.ARRAY_BUFFER,this.vertexBuffer);gl.enableVertexAttribArray(this.attribs.position);gl.vertexAttribPointer(this.attribs.position,2,gl.FLOAT,false,8,0);gl.uniform4f(this.uniforms.color,1,1,1,1);Util.orthoMatrix(this.projMat,0,gl.drawingBufferWidth,0,gl.drawingBufferHeight,.1,1024);gl.uniformMatrix4fv(this.uniforms.projectionMat,false,this.projMat);gl.drawArrays(gl.TRIANGLE_STRIP,0,4);gl.drawArrays(gl.TRIANGLE_STRIP,this.gearOffset,this.gearVertexCount);gl.drawArrays(gl.TRIANGLE_STRIP,this.arrowOffset,this.arrowVertexCount)};module.exports=CardboardUI},{"./deps/wglu-preserve-state.js":52,"./util.js":68}],51:[function(_dereq_,module,exports){var CardboardDistorter=_dereq_("./cardboard-distorter.js");var CardboardUI=_dereq_("./cardboard-ui.js");var DeviceInfo=_dereq_("./device-info.js");var Dpdb=_dereq_("./dpdb/dpdb.js");var FusionPoseSensor=_dereq_("./sensor-fusion/fusion-pose-sensor.js");var RotateInstructions=_dereq_("./rotate-instructions.js");var ViewerSelector=_dereq_("./viewer-selector.js");var VRDisplay=_dereq_("./base.js").VRDisplay;var Util=_dereq_("./util.js");var Eye={LEFT:"left",RIGHT:"right"};function CardboardVRDisplay(){this.displayName="Cardboard VRDisplay (webvr-polyfill)";this.capabilities.hasOrientation=true;this.capabilities.canPresent=true;this.bufferScale_=window.WebVRConfig.BUFFER_SCALE;this.poseSensor_=new FusionPoseSensor;this.distorter_=null;this.cardboardUI_=null;this.dpdb_=new Dpdb(true,this.onDeviceParamsUpdated_.bind(this));this.deviceInfo_=new DeviceInfo(this.dpdb_.getDeviceParams());this.viewerSelector_=new ViewerSelector;this.viewerSelector_.onChange(this.onViewerChanged_.bind(this));this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer());if(!window.WebVRConfig.ROTATE_INSTRUCTIONS_DISABLED){this.rotateInstructions_=new RotateInstructions}if(Util.isIOS()){window.addEventListener("resize",this.onResize_.bind(this))}}CardboardVRDisplay.prototype=new VRDisplay;CardboardVRDisplay.prototype.getImmediatePose=function(){return{position:this.poseSensor_.getPosition(),orientation:this.poseSensor_.getOrientation(),linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}};CardboardVRDisplay.prototype.resetPose=function(){this.poseSensor_.resetPose()};CardboardVRDisplay.prototype.getEyeParameters=function(whichEye){var offset=[this.deviceInfo_.viewer.interLensDistance*.5,0,0];var fieldOfView;if(whichEye==Eye.LEFT){offset[0]*=-1;fieldOfView=this.deviceInfo_.getFieldOfViewLeftEye()}else if(whichEye==Eye.RIGHT){fieldOfView=this.deviceInfo_.getFieldOfViewRightEye()}else{console.error("Invalid eye provided: %s",whichEye);return null}return{fieldOfView:fieldOfView,offset:offset,renderWidth:this.deviceInfo_.device.width*.5*this.bufferScale_,renderHeight:this.deviceInfo_.device.height*this.bufferScale_}};CardboardVRDisplay.prototype.onDeviceParamsUpdated_=function(newParams){if(Util.isDebug()){console.log("DPDB reported that device params were updated.")}this.deviceInfo_.updateDeviceParams(newParams);if(this.distorter_){this.distorter_.updateDeviceInfo(this.deviceInfo_)}};CardboardVRDisplay.prototype.updateBounds_=function(){if(this.layer_&&this.distorter_&&(this.layer_.leftBounds||this.layer_.rightBounds)){this.distorter_.setTextureBounds(this.layer_.leftBounds,this.layer_.rightBounds)}};CardboardVRDisplay.prototype.beginPresent_=function(){var gl=this.layer_.source.getContext("webgl");if(!gl)gl=this.layer_.source.getContext("experimental-webgl");if(!gl)gl=this.layer_.source.getContext("webgl2");if(!gl)return;if(this.layer_.predistorted){if(!window.WebVRConfig.CARDBOARD_UI_DISABLED){gl.canvas.width=Util.getScreenWidth()*this.bufferScale_;gl.canvas.height=Util.getScreenHeight()*this.bufferScale_;this.cardboardUI_=new CardboardUI(gl)}}else{this.distorter_=new CardboardDistorter(gl);this.distorter_.updateDeviceInfo(this.deviceInfo_);this.cardboardUI_=this.distorter_.cardboardUI}if(this.cardboardUI_){this.cardboardUI_.listen(function(e){this.viewerSelector_.show(this.layer_.source.parentElement);e.stopPropagation();e.preventDefault()}.bind(this),function(e){this.exitPresent();e.stopPropagation();e.preventDefault()}.bind(this))}if(this.rotateInstructions_){if(Util.isLandscapeMode()&&Util.isMobile()){this.rotateInstructions_.showTemporarily(3e3,this.layer_.source.parentElement)}else{this.rotateInstructions_.update()}}this.orientationHandler=this.onOrientationChange_.bind(this);window.addEventListener("orientationchange",this.orientationHandler);this.vrdisplaypresentchangeHandler=this.updateBounds_.bind(this);window.addEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler);this.fireVRDisplayDeviceParamsChange_()};CardboardVRDisplay.prototype.endPresent_=function(){if(this.distorter_){this.distorter_.destroy();this.distorter_=null}if(this.cardboardUI_){this.cardboardUI_.destroy();this.cardboardUI_=null}if(this.rotateInstructions_){this.rotateInstructions_.hide()}this.viewerSelector_.hide();window.removeEventListener("orientationchange",this.orientationHandler);window.removeEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler)};CardboardVRDisplay.prototype.submitFrame=function(pose){if(this.distorter_){this.updateBounds_();this.distorter_.submitFrame()}else if(this.cardboardUI_&&this.layer_){var canvas=this.layer_.source.getContext("webgl").canvas;if(canvas.width!=this.lastWidth||canvas.height!=this.lastHeight){this.cardboardUI_.onResize()}this.lastWidth=canvas.width;this.lastHeight=canvas.height;this.cardboardUI_.render()}};CardboardVRDisplay.prototype.onOrientationChange_=function(e){this.viewerSelector_.hide();if(this.rotateInstructions_){this.rotateInstructions_.update()}this.onResize_()};CardboardVRDisplay.prototype.onResize_=function(e){if(this.layer_){var gl=this.layer_.source.getContext("webgl");var cssProperties=["position: absolute","top: 0","left: 0","width: "+Math.max(screen.width,screen.height)+"px","height: "+Math.min(screen.height,screen.width)+"px","border: 0","margin: 0","padding: 0 10px 10px 0","box-sizing: content-box"];gl.canvas.setAttribute("style",cssProperties.join("; ")+";");Util.safariCssSizeWorkaround(gl.canvas)}};CardboardVRDisplay.prototype.onViewerChanged_=function(viewer){this.deviceInfo_.setViewer(viewer);if(this.distorter_){this.distorter_.updateDeviceInfo(this.deviceInfo_)}this.fireVRDisplayDeviceParamsChange_()};CardboardVRDisplay.prototype.fireVRDisplayDeviceParamsChange_=function(){var event=new CustomEvent("vrdisplaydeviceparamschange",{detail:{vrdisplay:this,deviceInfo:this.deviceInfo_}});window.dispatchEvent(event)};module.exports=CardboardVRDisplay},{"./base.js":48,"./cardboard-distorter.js":49,"./cardboard-ui.js":50,"./device-info.js":53,"./dpdb/dpdb.js":57,"./rotate-instructions.js":62,"./sensor-fusion/fusion-pose-sensor.js":64,"./util.js":68,"./viewer-selector.js":69}],52:[function(_dereq_,module,exports){function WGLUPreserveGLState(gl,bindings,callback){if(!bindings){callback(gl);return}var boundValues=[];var activeTexture=null;for(var i=0;i<bindings.length;++i){var binding=bindings[i];switch(binding){case gl.TEXTURE_BINDING_2D:case gl.TEXTURE_BINDING_CUBE_MAP:var textureUnit=bindings[++i];if(textureUnit<gl.TEXTURE0||textureUnit>gl.TEXTURE31){console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit");boundValues.push(null,null);break}if(!activeTexture){activeTexture=gl.getParameter(gl.ACTIVE_TEXTURE)}gl.activeTexture(textureUnit);boundValues.push(gl.getParameter(binding),null);break;case gl.ACTIVE_TEXTURE:activeTexture=gl.getParameter(gl.ACTIVE_TEXTURE);boundValues.push(null);break;default:boundValues.push(gl.getParameter(binding));break}}callback(gl);for(var i=0;i<bindings.length;++i){var binding=bindings[i];var boundValue=boundValues[i];switch(binding){case gl.ACTIVE_TEXTURE:break;case gl.ARRAY_BUFFER_BINDING:gl.bindBuffer(gl.ARRAY_BUFFER,boundValue);break;case gl.COLOR_CLEAR_VALUE:gl.clearColor(boundValue[0],boundValue[1],boundValue[2],boundValue[3]);break;case gl.COLOR_WRITEMASK:gl.colorMask(boundValue[0],boundValue[1],boundValue[2],boundValue[3]);break;case gl.CURRENT_PROGRAM:gl.useProgram(boundValue);break;case gl.ELEMENT_ARRAY_BUFFER_BINDING:gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,boundValue);break;case gl.FRAMEBUFFER_BINDING:gl.bindFramebuffer(gl.FRAMEBUFFER,boundValue);break;case gl.RENDERBUFFER_BINDING:gl.bindRenderbuffer(gl.RENDERBUFFER,boundValue);break;case gl.TEXTURE_BINDING_2D:var textureUnit=bindings[++i];if(textureUnit<gl.TEXTURE0||textureUnit>gl.TEXTURE31)break;gl.activeTexture(textureUnit);gl.bindTexture(gl.TEXTURE_2D,boundValue);break;case gl.TEXTURE_BINDING_CUBE_MAP:var textureUnit=bindings[++i];if(textureUnit<gl.TEXTURE0||textureUnit>gl.TEXTURE31)break;gl.activeTexture(textureUnit);gl.bindTexture(gl.TEXTURE_CUBE_MAP,boundValue);break;case gl.VIEWPORT:gl.viewport(boundValue[0],boundValue[1],boundValue[2],boundValue[3]);break;case gl.BLEND:case gl.CULL_FACE:case gl.DEPTH_TEST:case gl.SCISSOR_TEST:case gl.STENCIL_TEST:if(boundValue){gl.enable(binding)}else{gl.disable(binding)}break;default:console.log("No GL restore behavior for 0x"+binding.toString(16));break}if(activeTexture){gl.activeTexture(activeTexture)}}}module.exports=WGLUPreserveGLState},{}],53:[function(_dereq_,module,exports){var Distortion=_dereq_("./distortion/distortion.js");var MathUtil=_dereq_("./math-util.js");var Util=_dereq_("./util.js");function Device(params){this.width=params.width||Util.getScreenWidth();this.height=params.height||Util.getScreenHeight();this.widthMeters=params.widthMeters;this.heightMeters=params.heightMeters;this.bevelMeters=params.bevelMeters}var DEFAULT_ANDROID=new Device({widthMeters:.11,heightMeters:.062,bevelMeters:.004});var DEFAULT_IOS=new Device({widthMeters:.1038,heightMeters:.0584,bevelMeters:.004});var Viewers={CardboardV1:new CardboardViewer({id:"CardboardV1",label:"Cardboard I/O 2014",fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]}),CardboardV2:new CardboardViewer({id:"CardboardV2",label:"Cardboard I/O 2015",fov:60,interLensDistance:.064,baselineLensDistance:.035,screenLensDistance:.039,distortionCoefficients:[.34,.55],inverseCoefficients:[-.33836704,-.18162185,.862655,-1.2462051,1.0560602,-.58208317,.21609078,-.05444823,.009177956,-.0009904169,6183535e-11,-16981803e-13]})};var DEFAULT_LEFT_CENTER={x:.5,y:.5};var DEFAULT_RIGHT_CENTER={x:.5,y:.5};function DeviceInfo(deviceParams){this.viewer=Viewers.CardboardV2;this.updateDeviceParams(deviceParams);this.distortion=new Distortion(this.viewer.distortionCoefficients)}DeviceInfo.prototype.updateDeviceParams=function(deviceParams){this.device=this.determineDevice_(deviceParams)||this.device};DeviceInfo.prototype.getDevice=function(){return this.device};DeviceInfo.prototype.setViewer=function(viewer){this.viewer=viewer;this.distortion=new Distortion(this.viewer.distortionCoefficients)};DeviceInfo.prototype.determineDevice_=function(deviceParams){if(!deviceParams){if(Util.isIOS()){console.warn("Using fallback iOS device measurements.");return DEFAULT_IOS}else{console.warn("Using fallback Android device measurements.");return DEFAULT_ANDROID}}var METERS_PER_INCH=.0254;var metersPerPixelX=METERS_PER_INCH/deviceParams.xdpi;var metersPerPixelY=METERS_PER_INCH/deviceParams.ydpi;var width=Util.getScreenWidth();var height=Util.getScreenHeight();return new Device({widthMeters:metersPerPixelX*width,heightMeters:metersPerPixelY*height,bevelMeters:deviceParams.bevelMm*.001})};DeviceInfo.prototype.getDistortedFieldOfViewLeftEye=function(){var viewer=this.viewer;var device=this.device;var distortion=this.distortion;var eyeToScreenDistance=viewer.screenLensDistance;var outerDist=(device.widthMeters-viewer.interLensDistance)/2;var innerDist=viewer.interLensDistance/2;var bottomDist=viewer.baselineLensDistance-device.bevelMeters;var topDist=device.heightMeters-bottomDist;var outerAngle=MathUtil.radToDeg*Math.atan(distortion.distort(outerDist/eyeToScreenDistance));var innerAngle=MathUtil.radToDeg*Math.atan(distortion.distort(innerDist/eyeToScreenDistance));var bottomAngle=MathUtil.radToDeg*Math.atan(distortion.distort(bottomDist/eyeToScreenDistance));var topAngle=MathUtil.radToDeg*Math.atan(distortion.distort(topDist/eyeToScreenDistance));return{leftDegrees:Math.min(outerAngle,viewer.fov),rightDegrees:Math.min(innerAngle,viewer.fov),downDegrees:Math.min(bottomAngle,viewer.fov),upDegrees:Math.min(topAngle,viewer.fov)}};DeviceInfo.prototype.getLeftEyeVisibleTanAngles=function(){var viewer=this.viewer;var device=this.device;var distortion=this.distortion;var fovLeft=Math.tan(-MathUtil.degToRad*viewer.fov);var fovTop=Math.tan(MathUtil.degToRad*viewer.fov);var fovRight=Math.tan(MathUtil.degToRad*viewer.fov);var fovBottom=Math.tan(-MathUtil.degToRad*viewer.fov);var halfWidth=device.widthMeters/4;var halfHeight=device.heightMeters/2;var verticalLensOffset=viewer.baselineLensDistance-device.bevelMeters-halfHeight;var centerX=viewer.interLensDistance/2-halfWidth;var centerY=-verticalLensOffset;var centerZ=viewer.screenLensDistance;var screenLeft=distortion.distort((centerX-halfWidth)/centerZ);var screenTop=distortion.distort((centerY+halfHeight)/centerZ);var screenRight=distortion.distort((centerX+halfWidth)/centerZ);var screenBottom=distortion.distort((centerY-halfHeight)/centerZ);var result=new Float32Array(4);result[0]=Math.max(fovLeft,screenLeft);result[1]=Math.min(fovTop,screenTop);result[2]=Math.min(fovRight,screenRight);result[3]=Math.max(fovBottom,screenBottom);return result};DeviceInfo.prototype.getLeftEyeNoLensTanAngles=function(){var viewer=this.viewer;var device=this.device;var distortion=this.distortion;var result=new Float32Array(4);var fovLeft=distortion.distortInverse(Math.tan(-MathUtil.degToRad*viewer.fov));var fovTop=distortion.distortInverse(Math.tan(MathUtil.degToRad*viewer.fov));var fovRight=distortion.distortInverse(Math.tan(MathUtil.degToRad*viewer.fov));var fovBottom=distortion.distortInverse(Math.tan(-MathUtil.degToRad*viewer.fov));var halfWidth=device.widthMeters/4;var halfHeight=device.heightMeters/2;var verticalLensOffset=viewer.baselineLensDistance-device.bevelMeters-halfHeight;var centerX=viewer.interLensDistance/2-halfWidth;var centerY=-verticalLensOffset;var centerZ=viewer.screenLensDistance;var screenLeft=(centerX-halfWidth)/centerZ;var screenTop=(centerY+halfHeight)/centerZ;var screenRight=(centerX+halfWidth)/centerZ;var screenBottom=(centerY-halfHeight)/centerZ;result[0]=Math.max(fovLeft,screenLeft);result[1]=Math.min(fovTop,screenTop);result[2]=Math.min(fovRight,screenRight);result[3]=Math.max(fovBottom,screenBottom);return result};DeviceInfo.prototype.getLeftEyeVisibleScreenRect=function(undistortedFrustum){var viewer=this.viewer;var device=this.device;var dist=viewer.screenLensDistance;var eyeX=(device.widthMeters-viewer.interLensDistance)/2;var eyeY=viewer.baselineLensDistance-device.bevelMeters;var left=(undistortedFrustum[0]*dist+eyeX)/device.widthMeters;var top=(undistortedFrustum[1]*dist+eyeY)/device.heightMeters;var right=(undistortedFrustum[2]*dist+eyeX)/device.widthMeters;var bottom=(undistortedFrustum[3]*dist+eyeY)/device.heightMeters;return{x:left,y:bottom,width:right-left,height:top-bottom}};DeviceInfo.prototype.getFieldOfViewLeftEye=function(opt_isUndistorted){return opt_isUndistorted?this.getUndistortedFieldOfViewLeftEye():this.getDistortedFieldOfViewLeftEye()};DeviceInfo.prototype.getFieldOfViewRightEye=function(opt_isUndistorted){var fov=this.getFieldOfViewLeftEye(opt_isUndistorted);return{leftDegrees:fov.rightDegrees,rightDegrees:fov.leftDegrees,upDegrees:fov.upDegrees,downDegrees:fov.downDegrees}};DeviceInfo.prototype.getUndistortedFieldOfViewLeftEye=function(){var p=this.getUndistortedParams_();return{leftDegrees:MathUtil.radToDeg*Math.atan(p.outerDist),rightDegrees:MathUtil.radToDeg*Math.atan(p.innerDist),downDegrees:MathUtil.radToDeg*Math.atan(p.bottomDist),upDegrees:MathUtil.radToDeg*Math.atan(p.topDist)}};DeviceInfo.prototype.getUndistortedViewportLeftEye=function(){var p=this.getUndistortedParams_();var viewer=this.viewer;var device=this.device;var eyeToScreenDistance=viewer.screenLensDistance;var screenWidth=device.widthMeters/eyeToScreenDistance;var screenHeight=device.heightMeters/eyeToScreenDistance;var xPxPerTanAngle=device.width/screenWidth;var yPxPerTanAngle=device.height/screenHeight;var x=Math.round((p.eyePosX-p.outerDist)*xPxPerTanAngle);var y=Math.round((p.eyePosY-p.bottomDist)*yPxPerTanAngle);return{x:x,y:y,width:Math.round((p.eyePosX+p.innerDist)*xPxPerTanAngle)-x,height:Math.round((p.eyePosY+p.topDist)*yPxPerTanAngle)-y}};DeviceInfo.prototype.getUndistortedParams_=function(){var viewer=this.viewer;var device=this.device;var distortion=this.distortion;var eyeToScreenDistance=viewer.screenLensDistance;var halfLensDistance=viewer.interLensDistance/2/eyeToScreenDistance;var screenWidth=device.widthMeters/eyeToScreenDistance;var screenHeight=device.heightMeters/eyeToScreenDistance;var eyePosX=screenWidth/2-halfLensDistance;var eyePosY=(viewer.baselineLensDistance-device.bevelMeters)/eyeToScreenDistance;var maxFov=viewer.fov;var viewerMax=distortion.distortInverse(Math.tan(MathUtil.degToRad*maxFov));var outerDist=Math.min(eyePosX,viewerMax);var innerDist=Math.min(halfLensDistance,viewerMax);var bottomDist=Math.min(eyePosY,viewerMax);var topDist=Math.min(screenHeight-eyePosY,viewerMax);return{outerDist:outerDist,innerDist:innerDist,topDist:topDist,bottomDist:bottomDist,eyePosX:eyePosX,eyePosY:eyePosY}};function CardboardViewer(params){this.id=params.id;this.label=params.label;this.fov=params.fov;this.interLensDistance=params.interLensDistance;this.baselineLensDistance=params.baselineLensDistance;this.screenLensDistance=params.screenLensDistance;this.distortionCoefficients=params.distortionCoefficients;this.inverseCoefficients=params.inverseCoefficients}DeviceInfo.Viewers=Viewers;module.exports=DeviceInfo},{"./distortion/distortion.js":55,"./math-util.js":59,"./util.js":68}],54:[function(_dereq_,module,exports){var VRDisplay=_dereq_("./base.js").VRDisplay;var HMDVRDevice=_dereq_("./base.js").HMDVRDevice;var PositionSensorVRDevice=_dereq_("./base.js").PositionSensorVRDevice;function VRDisplayHMDDevice(display){this.display=display;this.hardwareUnitId=display.displayId;this.deviceId="webvr-polyfill:HMD:"+display.displayId;this.deviceName=display.displayName+" (HMD)"}VRDisplayHMDDevice.prototype=new HMDVRDevice;VRDisplayHMDDevice.prototype.getEyeParameters=function(whichEye){var eyeParameters=this.display.getEyeParameters(whichEye);return{currentFieldOfView:eyeParameters.fieldOfView,maximumFieldOfView:eyeParameters.fieldOfView,minimumFieldOfView:eyeParameters.fieldOfView,recommendedFieldOfView:eyeParameters.fieldOfView,eyeTranslation:{x:eyeParameters.offset[0],y:eyeParameters.offset[1],z:eyeParameters.offset[2]},renderRect:{x:whichEye=="right"?eyeParameters.renderWidth:0,y:0,width:eyeParameters.renderWidth,height:eyeParameters.renderHeight}}};VRDisplayHMDDevice.prototype.setFieldOfView=function(opt_fovLeft,opt_fovRight,opt_zNear,opt_zFar){};function VRDisplayPositionSensorDevice(display){
this.display=display;this.hardwareUnitId=display.displayId;this.deviceId="webvr-polyfill:PositionSensor: "+display.displayId;this.deviceName=display.displayName+" (PositionSensor)"}VRDisplayPositionSensorDevice.prototype=new PositionSensorVRDevice;VRDisplayPositionSensorDevice.prototype.getState=function(){var pose=this.display.getPose();return{position:pose.position?{x:pose.position[0],y:pose.position[1],z:pose.position[2]}:null,orientation:pose.orientation?{x:pose.orientation[0],y:pose.orientation[1],z:pose.orientation[2],w:pose.orientation[3]}:null,linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}};VRDisplayPositionSensorDevice.prototype.resetState=function(){return this.positionDevice.resetPose()};module.exports.VRDisplayHMDDevice=VRDisplayHMDDevice;module.exports.VRDisplayPositionSensorDevice=VRDisplayPositionSensorDevice},{"./base.js":48}],55:[function(_dereq_,module,exports){function Distortion(coefficients){this.coefficients=coefficients}Distortion.prototype.distortInverse=function(radius){var r0=0;var r1=1;var dr0=radius-this.distort(r0);while(Math.abs(r1-r0)>1e-4){var dr1=radius-this.distort(r1);var r2=r1-dr1*((r1-r0)/(dr1-dr0));r0=r1;r1=r2;dr0=dr1}return r1};Distortion.prototype.distort=function(radius){var r2=radius*radius;var ret=0;for(var i=0;i<this.coefficients.length;i++){ret=r2*(ret+this.coefficients[i])}return(ret+1)*radius};module.exports=Distortion},{}],56:[function(_dereq_,module,exports){module.exports={format:1,last_updated:"2017-06-01T22:33:42Z",devices:[{type:"android",rules:[{mdmh:"asus/*/Nexus 7/*"},{ua:"Nexus 7"}],dpi:[320.8,323],bw:3,ac:500},{type:"android",rules:[{mdmh:"asus/*/ASUS_Z00AD/*"},{ua:"ASUS_Z00AD"}],dpi:[403,404.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google/*/Pixel XL/*"},{ua:"Pixel XL"}],dpi:[537.9,533],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google/*/Pixel/*"},{ua:"Pixel"}],dpi:[432.6,436.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"HTC/*/HTC6435LVW/*"},{ua:"HTC6435LVW"}],dpi:[449.7,443.3],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"HTC/*/HTC One XL/*"},{ua:"HTC One XL"}],dpi:[315.3,314.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"htc/*/Nexus 9/*"},{ua:"Nexus 9"}],dpi:289,bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One M9/*"},{ua:"HTC One M9"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One_M8/*"},{ua:"HTC One_M8"}],dpi:[449.7,447.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One/*"},{ua:"HTC One"}],dpi:472.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Huawei/*/Nexus 6P/*"},{ua:"Nexus 6P"}],dpi:[515.1,518],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/Nexus 5X/*"},{ua:"Nexus 5X"}],dpi:[422,419.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGMS345/*"},{ua:"LGMS345"}],dpi:[221.7,219.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/LG-D800/*"},{ua:"LG-D800"}],dpi:[422,424.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/LG-D850/*"},{ua:"LG-D850"}],dpi:[537.9,541.9],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/VS985 4G/*"},{ua:"VS985 4G"}],dpi:[537.9,535.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/Nexus 5/*"},{ua:"Nexus 5 B"}],dpi:[442.4,444.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/Nexus 4/*"},{ua:"Nexus 4"}],dpi:[319.8,318.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LG-P769/*"},{ua:"LG-P769"}],dpi:[240.6,247.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGMS323/*"},{ua:"LGMS323"}],dpi:[206.6,204.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGLS996/*"},{ua:"LGLS996"}],dpi:[403.4,401.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/4560MMX/*"},{ua:"4560MMX"}],dpi:[240,219.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/A250/*"},{ua:"Micromax A250"}],dpi:[480,446.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/Micromax AQ4501/*"},{ua:"Micromax AQ4501"}],dpi:240,bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/DROID RAZR/*"},{ua:"DROID RAZR"}],dpi:[368.1,256.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT830C/*"},{ua:"XT830C"}],dpi:[254,255.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1021/*"},{ua:"XT1021"}],dpi:[254,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1023/*"},{ua:"XT1023"}],dpi:[254,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1028/*"},{ua:"XT1028"}],dpi:[326.6,327.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1034/*"},{ua:"XT1034"}],dpi:[326.6,328.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1053/*"},{ua:"XT1053"}],dpi:[315.3,316.1],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1562/*"},{ua:"XT1562"}],dpi:[403.4,402.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/Nexus 6/*"},{ua:"Nexus 6 B"}],dpi:[494.3,489.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1063/*"},{ua:"XT1063"}],dpi:[295,296.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1064/*"},{ua:"XT1064"}],dpi:[295,295.6],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1092/*"},{ua:"XT1092"}],dpi:[422,424.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1095/*"},{ua:"XT1095"}],dpi:[422,423.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/G4/*"},{ua:"Moto G (4)"}],dpi:401,bw:4,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/A0001/*"},{ua:"A0001"}],dpi:[403.4,401],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE E1005/*"},{ua:"ONE E1005"}],dpi:[442.4,441.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE A2005/*"},{ua:"ONE A2005"}],dpi:[391.9,405.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OPPO/*/X909/*"},{ua:"X909"}],dpi:[442.4,444.1],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9082/*"},{ua:"GT-I9082"}],dpi:[184.7,185.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G360P/*"},{ua:"SM-G360P"}],dpi:[196.7,205.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/Nexus S/*"},{ua:"Nexus S"}],dpi:[234.5,229.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300/*"},{ua:"GT-I9300"}],dpi:[304.8,303.9],bw:5,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-T230NU/*"},{ua:"SM-T230NU"}],dpi:216,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SGH-T399/*"},{ua:"SGH-T399"}],dpi:[217.7,231.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SGH-M919/*"},{ua:"SGH-M919"}],dpi:[440.8,437.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N9005/*"},{ua:"SM-N9005"}],dpi:[386.4,387],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SAMSUNG-SM-N900A/*"},{ua:"SAMSUNG-SM-N900A"}],dpi:[386.4,387.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9500/*"},{ua:"GT-I9500"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/GT-I9505/*"},{ua:"GT-I9505"}],dpi:439.4,bw:4,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G900F/*"},{ua:"SM-G900F"}],dpi:[415.6,431.6],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G900M/*"},{ua:"SM-G900M"}],dpi:[415.6,431.6],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G800F/*"},{ua:"SM-G800F"}],dpi:326.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G906S/*"},{ua:"SM-G906S"}],dpi:[562.7,572.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300/*"},{ua:"GT-I9300"}],dpi:[306.7,304.8],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-T535/*"},{ua:"SM-T535"}],dpi:[142.6,136.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-N920C/*"},{ua:"SM-N920C"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N920W8/*"},{ua:"SM-N920W8"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300I/*"},{ua:"GT-I9300I"}],dpi:[304.8,305.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9195/*"},{ua:"GT-I9195"}],dpi:[249.4,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SPH-L520/*"},{ua:"SPH-L520"}],dpi:[249.4,255.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SAMSUNG-SGH-I717/*"},{ua:"SAMSUNG-SGH-I717"}],dpi:285.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SPH-D710/*"},{ua:"SPH-D710"}],dpi:[217.7,204.2],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-N7100/*"},{ua:"GT-N7100"}],dpi:265.1,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SCH-I605/*"},{ua:"SCH-I605"}],dpi:265.1,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/Galaxy Nexus/*"},{ua:"Galaxy Nexus"}],dpi:[315.3,314.2],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N910H/*"},{ua:"SM-N910H"}],dpi:[515.1,518],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N910C/*"},{ua:"SM-N910C"}],dpi:[515.2,520.2],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G130M/*"},{ua:"SM-G130M"}],dpi:[165.9,164.8],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G928I/*"},{ua:"SM-G928I"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G920F/*"},{ua:"SM-G920F"}],dpi:580.6,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G920P/*"},{ua:"SM-G920P"}],dpi:[522.5,577],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G925F/*"},{ua:"SM-G925F"}],dpi:580.6,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G925V/*"},{ua:"SM-G925V"}],dpi:[522.5,576.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G930F/*"},{ua:"SM-G930F"}],dpi:576.6,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G935F/*"},{ua:"SM-G935F"}],dpi:533,bw:3,ac:500},{type:"android",rules:[{mdmh:"Sony/*/C6903/*"},{ua:"C6903"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"Sony/*/D6653/*"},{ua:"D6653"}],dpi:[428.6,427.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/E6653/*"},{ua:"E6653"}],dpi:[428.6,425.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/E6853/*"},{ua:"E6853"}],dpi:[403.4,401.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/SGP321/*"},{ua:"SGP321"}],dpi:[224.7,224.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"TCT/*/ALCATEL ONE TOUCH Fierce/*"},{ua:"ALCATEL ONE TOUCH Fierce"}],dpi:[240,247.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"THL/*/thl 5000/*"},{ua:"thl 5000"}],dpi:[480,443.3],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"ZTE/*/ZTE Blade L2/*"},{ua:"ZTE Blade L2"}],dpi:240,bw:3,ac:500},{type:"ios",rules:[{res:[640,960]}],dpi:[325.1,328.4],bw:4,ac:1e3},{type:"ios",rules:[{res:[640,1136]}],dpi:[317.1,320.2],bw:3,ac:1e3},{type:"ios",rules:[{res:[750,1334]}],dpi:326.4,bw:4,ac:1e3},{type:"ios",rules:[{res:[1242,2208]}],dpi:[453.6,458.4],bw:4,ac:1e3},{type:"ios",rules:[{res:[1125,2001]}],dpi:[410.9,415.4],bw:4,ac:1e3}]}},{}],57:[function(_dereq_,module,exports){var DPDB_CACHE=_dereq_("./dpdb.json");var Util=_dereq_("../util.js");var ONLINE_DPDB_URL="https://dpdb.webvr.rocks/dpdb.json";function Dpdb(fetchOnline,onDeviceParamsUpdated){this.dpdb=DPDB_CACHE;this.recalculateDeviceParams_();if(fetchOnline){this.onDeviceParamsUpdated=onDeviceParamsUpdated;var xhr=new XMLHttpRequest;var obj=this;xhr.open("GET",ONLINE_DPDB_URL,true);xhr.addEventListener("load",function(){obj.loading=false;if(xhr.status>=200&&xhr.status<=299){obj.dpdb=JSON.parse(xhr.response);obj.recalculateDeviceParams_()}else{console.error("Error loading online DPDB!")}});xhr.send()}}Dpdb.prototype.getDeviceParams=function(){return this.deviceParams};Dpdb.prototype.recalculateDeviceParams_=function(){var newDeviceParams=this.calcDeviceParams_();if(newDeviceParams){this.deviceParams=newDeviceParams;if(this.onDeviceParamsUpdated){this.onDeviceParamsUpdated(this.deviceParams)}}else{console.error("Failed to recalculate device parameters.")}};Dpdb.prototype.calcDeviceParams_=function(){var db=this.dpdb;if(!db){console.error("DPDB not available.");return null}if(db.format!=1){console.error("DPDB has unexpected format version.");return null}if(!db.devices||!db.devices.length){console.error("DPDB does not have a devices section.");return null}var userAgent=navigator.userAgent||navigator.vendor||window.opera;var width=Util.getScreenWidth();var height=Util.getScreenHeight();if(!db.devices){console.error("DPDB has no devices section.");return null}for(var i=0;i<db.devices.length;i++){var device=db.devices[i];if(!device.rules){console.warn("Device["+i+"] has no rules section.");continue}if(device.type!="ios"&&device.type!="android"){console.warn("Device["+i+"] has invalid type.");continue}if(Util.isIOS()!=(device.type=="ios"))continue;var matched=false;for(var j=0;j<device.rules.length;j++){var rule=device.rules[j];if(this.matchRule_(rule,userAgent,width,height)){matched=true;break}}if(!matched)continue;var xdpi=device.dpi[0]||device.dpi;var ydpi=device.dpi[1]||device.dpi;return new DeviceParams({xdpi:xdpi,ydpi:ydpi,bevelMm:device.bw})}console.warn("No DPDB device match.");return null};Dpdb.prototype.matchRule_=function(rule,ua,screenWidth,screenHeight){if(!rule.ua&&!rule.res)return false;if(rule.ua&&ua.indexOf(rule.ua)<0)return false;if(rule.res){if(!rule.res[0]||!rule.res[1])return false;var resX=rule.res[0];var resY=rule.res[1];if(Math.min(screenWidth,screenHeight)!=Math.min(resX,resY)||Math.max(screenWidth,screenHeight)!=Math.max(resX,resY)){return false}}return true};function DeviceParams(params){this.xdpi=params.xdpi;this.ydpi=params.ydpi;this.bevelMm=params.bevelMm}module.exports=Dpdb},{"../util.js":68,"./dpdb.json":56}],58:[function(_dereq_,module,exports){var Util=_dereq_("./util.js");var WebVRPolyfill=_dereq_("./webvr-polyfill.js").WebVRPolyfill;window.WebVRConfig=Util.extend({FORCE_ENABLE_VR:false,K_FILTER:.98,PREDICTION_TIME_S:.04,TOUCH_PANNER_DISABLED:true,CARDBOARD_UI_DISABLED:false,ROTATE_INSTRUCTIONS_DISABLED:false,YAW_ONLY:false,MOUSE_KEYBOARD_CONTROLS_DISABLED:false,DEFER_INITIALIZATION:false,ENABLE_DEPRECATED_API:false,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:false,ALWAYS_APPEND_POLYFILL_DISPLAY:false,GET_VR_DISPLAYS_TIMEOUT:1e3},window.WebVRConfig);if(!window.WebVRConfig.DEFER_INITIALIZATION){new WebVRPolyfill}else{window.InitializeWebVRPolyfill=function(){new WebVRPolyfill}}window.WebVRPolyfill=WebVRPolyfill},{"./util.js":68,"./webvr-polyfill.js":71}],59:[function(_dereq_,module,exports){var MathUtil=window.MathUtil||{};MathUtil.degToRad=Math.PI/180;MathUtil.radToDeg=180/Math.PI;MathUtil.Vector2=function(x,y){this.x=x||0;this.y=y||0};MathUtil.Vector2.prototype={constructor:MathUtil.Vector2,set:function(x,y){this.x=x;this.y=y;return this},copy:function(v){this.x=v.x;this.y=v.y;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this}};MathUtil.Vector3=function(x,y,z){this.x=x||0;this.y=y||0;this.z=z||0};MathUtil.Vector3.prototype={constructor:MathUtil.Vector3,set:function(x,y,z){this.x=x;this.y=y;this.z=z;return this},copy:function(v){this.x=v.x;this.y=v.y;this.z=v.z;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},normalize:function(){var scalar=this.length();if(scalar!==0){var invScalar=1/scalar;this.multiplyScalar(invScalar)}else{this.x=0;this.y=0;this.z=0}return this},multiplyScalar:function(scalar){this.x*=scalar;this.y*=scalar;this.z*=scalar},applyQuaternion:function(q){var x=this.x;var y=this.y;var z=this.z;var qx=q.x;var qy=q.y;var qz=q.z;var qw=q.w;var ix=qw*x+qy*z-qz*y;var iy=qw*y+qz*x-qx*z;var iz=qw*z+qx*y-qy*x;var iw=-qx*x-qy*y-qz*z;this.x=ix*qw+iw*-qx+iy*-qz-iz*-qy;this.y=iy*qw+iw*-qy+iz*-qx-ix*-qz;this.z=iz*qw+iw*-qz+ix*-qy-iy*-qx;return this},dot:function(v){return this.x*v.x+this.y*v.y+this.z*v.z},crossVectors:function(a,b){var ax=a.x,ay=a.y,az=a.z;var bx=b.x,by=b.y,bz=b.z;this.x=ay*bz-az*by;this.y=az*bx-ax*bz;this.z=ax*by-ay*bx;return this}};MathUtil.Quaternion=function(x,y,z,w){this.x=x||0;this.y=y||0;this.z=z||0;this.w=w!==undefined?w:1};MathUtil.Quaternion.prototype={constructor:MathUtil.Quaternion,set:function(x,y,z,w){this.x=x;this.y=y;this.z=z;this.w=w;return this},copy:function(quaternion){this.x=quaternion.x;this.y=quaternion.y;this.z=quaternion.z;this.w=quaternion.w;return this},setFromEulerXYZ:function(x,y,z){var c1=Math.cos(x/2);var c2=Math.cos(y/2);var c3=Math.cos(z/2);var s1=Math.sin(x/2);var s2=Math.sin(y/2);var s3=Math.sin(z/2);this.x=s1*c2*c3+c1*s2*s3;this.y=c1*s2*c3-s1*c2*s3;this.z=c1*c2*s3+s1*s2*c3;this.w=c1*c2*c3-s1*s2*s3;return this},setFromEulerYXZ:function(x,y,z){var c1=Math.cos(x/2);var c2=Math.cos(y/2);var c3=Math.cos(z/2);var s1=Math.sin(x/2);var s2=Math.sin(y/2);var s3=Math.sin(z/2);this.x=s1*c2*c3+c1*s2*s3;this.y=c1*s2*c3-s1*c2*s3;this.z=c1*c2*s3-s1*s2*c3;this.w=c1*c2*c3+s1*s2*s3;return this},setFromAxisAngle:function(axis,angle){var halfAngle=angle/2,s=Math.sin(halfAngle);this.x=axis.x*s;this.y=axis.y*s;this.z=axis.z*s;this.w=Math.cos(halfAngle);return this},multiply:function(q){return this.multiplyQuaternions(this,q)},multiplyQuaternions:function(a,b){var qax=a.x,qay=a.y,qaz=a.z,qaw=a.w;var qbx=b.x,qby=b.y,qbz=b.z,qbw=b.w;this.x=qax*qbw+qaw*qbx+qay*qbz-qaz*qby;this.y=qay*qbw+qaw*qby+qaz*qbx-qax*qbz;this.z=qaz*qbw+qaw*qbz+qax*qby-qay*qbx;this.w=qaw*qbw-qax*qbx-qay*qby-qaz*qbz;return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;this.normalize();return this},normalize:function(){var l=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);if(l===0){this.x=0;this.y=0;this.z=0;this.w=1}else{l=1/l;this.x=this.x*l;this.y=this.y*l;this.z=this.z*l;this.w=this.w*l}return this},slerp:function(qb,t){if(t===0)return this;if(t===1)return this.copy(qb);var x=this.x,y=this.y,z=this.z,w=this.w;var cosHalfTheta=w*qb.w+x*qb.x+y*qb.y+z*qb.z;if(cosHalfTheta<0){this.w=-qb.w;this.x=-qb.x;this.y=-qb.y;this.z=-qb.z;cosHalfTheta=-cosHalfTheta}else{this.copy(qb)}if(cosHalfTheta>=1){this.w=w;this.x=x;this.y=y;this.z=z;return this}var halfTheta=Math.acos(cosHalfTheta);var sinHalfTheta=Math.sqrt(1-cosHalfTheta*cosHalfTheta);if(Math.abs(sinHalfTheta)<.001){this.w=.5*(w+this.w);this.x=.5*(x+this.x);this.y=.5*(y+this.y);this.z=.5*(z+this.z);return this}var ratioA=Math.sin((1-t)*halfTheta)/sinHalfTheta,ratioB=Math.sin(t*halfTheta)/sinHalfTheta;this.w=w*ratioA+this.w*ratioB;this.x=x*ratioA+this.x*ratioB;this.y=y*ratioA+this.y*ratioB;this.z=z*ratioA+this.z*ratioB;return this},setFromUnitVectors:function(){var v1,r;var EPS=1e-6;return function(vFrom,vTo){if(v1===undefined)v1=new MathUtil.Vector3;r=vFrom.dot(vTo)+1;if(r<EPS){r=0;if(Math.abs(vFrom.x)>Math.abs(vFrom.z)){v1.set(-vFrom.y,vFrom.x,0)}else{v1.set(0,-vFrom.z,vFrom.y)}}else{v1.crossVectors(vFrom,vTo)}this.x=v1.x;this.y=v1.y;this.z=v1.z;this.w=r;this.normalize();return this}}()};module.exports=MathUtil},{}],60:[function(_dereq_,module,exports){var VRDisplay=_dereq_("./base.js").VRDisplay;var MathUtil=_dereq_("./math-util.js");var Util=_dereq_("./util.js");var KEY_SPEED=.15;var KEY_ANIMATION_DURATION=80;var MOUSE_SPEED_X=.5;var MOUSE_SPEED_Y=.3;function MouseKeyboardVRDisplay(){this.displayName="Mouse and Keyboard VRDisplay (webvr-polyfill)";this.capabilities.hasOrientation=true;window.addEventListener("keydown",this.onKeyDown_.bind(this));window.addEventListener("mousemove",this.onMouseMove_.bind(this));window.addEventListener("mousedown",this.onMouseDown_.bind(this));window.addEventListener("mouseup",this.onMouseUp_.bind(this));this.phi_=0;this.theta_=0;this.targetAngle_=null;this.angleAnimation_=null;this.orientation_=new MathUtil.Quaternion;this.rotateStart_=new MathUtil.Vector2;this.rotateEnd_=new MathUtil.Vector2;this.rotateDelta_=new MathUtil.Vector2;this.isDragging_=false;this.orientationOut_=new Float32Array(4)}MouseKeyboardVRDisplay.prototype=new VRDisplay;MouseKeyboardVRDisplay.prototype.getImmediatePose=function(){this.orientation_.setFromEulerYXZ(this.phi_,this.theta_,0);this.orientationOut_[0]=this.orientation_.x;this.orientationOut_[1]=this.orientation_.y;this.orientationOut_[2]=this.orientation_.z;this.orientationOut_[3]=this.orientation_.w;return{position:null,orientation:this.orientationOut_,linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}};MouseKeyboardVRDisplay.prototype.onKeyDown_=function(e){if(e.keyCode==38){this.animatePhi_(this.phi_+KEY_SPEED)}else if(e.keyCode==39){this.animateTheta_(this.theta_-KEY_SPEED)}else if(e.keyCode==40){this.animatePhi_(this.phi_-KEY_SPEED)}else if(e.keyCode==37){this.animateTheta_(this.theta_+KEY_SPEED)}};MouseKeyboardVRDisplay.prototype.animateTheta_=function(targetAngle){this.animateKeyTransitions_("theta_",targetAngle)};MouseKeyboardVRDisplay.prototype.animatePhi_=function(targetAngle){targetAngle=Util.clamp(targetAngle,-Math.PI/2,Math.PI/2);this.animateKeyTransitions_("phi_",targetAngle)};MouseKeyboardVRDisplay.prototype.animateKeyTransitions_=function(angleName,targetAngle){if(this.angleAnimation_){cancelAnimationFrame(this.angleAnimation_)}var startAngle=this[angleName];var startTime=new Date;this.angleAnimation_=requestAnimationFrame(function animate(){var elapsed=new Date-startTime;if(elapsed>=KEY_ANIMATION_DURATION){this[angleName]=targetAngle;cancelAnimationFrame(this.angleAnimation_);return}this.angleAnimation_=requestAnimationFrame(animate.bind(this));var percent=elapsed/KEY_ANIMATION_DURATION;this[angleName]=startAngle+(targetAngle-startAngle)*percent}.bind(this))};MouseKeyboardVRDisplay.prototype.onMouseDown_=function(e){this.rotateStart_.set(e.clientX,e.clientY);this.isDragging_=true};MouseKeyboardVRDisplay.prototype.onMouseMove_=function(e){if(!this.isDragging_&&!this.isPointerLocked_()){return}if(this.isPointerLocked_()){var movementX=e.movementX||e.mozMovementX||0;var movementY=e.movementY||e.mozMovementY||0;this.rotateEnd_.set(this.rotateStart_.x-movementX,this.rotateStart_.y-movementY)}else{this.rotateEnd_.set(e.clientX,e.clientY)}this.rotateDelta_.subVectors(this.rotateEnd_,this.rotateStart_);this.rotateStart_.copy(this.rotateEnd_);this.phi_+=2*Math.PI*this.rotateDelta_.y/screen.height*MOUSE_SPEED_Y;this.theta_+=2*Math.PI*this.rotateDelta_.x/screen.width*MOUSE_SPEED_X;this.phi_=Util.clamp(this.phi_,-Math.PI/2,Math.PI/2)};MouseKeyboardVRDisplay.prototype.onMouseUp_=function(e){this.isDragging_=false};MouseKeyboardVRDisplay.prototype.isPointerLocked_=function(){var el=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement;return el!==undefined};MouseKeyboardVRDisplay.prototype.resetPose=function(){this.phi_=0;this.theta_=0};module.exports=MouseKeyboardVRDisplay},{"./base.js":48,"./math-util.js":59,"./util.js":68}],61:[function(_dereq_,module,exports){(function(global){if(typeof global!=="undefined"&&global.window){global.document=global.window.document;global.navigator=global.window.navigator}_dereq_("./main")}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./main":58}],62:[function(_dereq_,module,exports){var Util=_dereq_("./util.js");function RotateInstructions(){this.loadIcon_();var overlay=document.createElement("div");var s=overlay.style;s.position="fixed";s.top=0;s.right=0;s.bottom=0;s.left=0;s.backgroundColor="gray";s.fontFamily="sans-serif";s.zIndex=1e6;var img=document.createElement("img");img.src=this.icon;var s=img.style;s.marginLeft="25%";s.marginTop="25%";s.width="50%";overlay.appendChild(img);var text=document.createElement("div");var s=text.style;s.textAlign="center";s.fontSize="16px";s.lineHeight="24px";s.margin="24px 25%";s.width="50%";text.innerHTML="Place your phone into your Cardboard viewer.";overlay.appendChild(text);var snackbar=document.createElement("div");var s=snackbar.style;s.backgroundColor="#CFD8DC";s.position="fixed";s.bottom=0;s.width="100%";s.height="48px";s.padding="14px 24px";s.boxSizing="border-box";s.color="#656A6B";overlay.appendChild(snackbar);var snackbarText=document.createElement("div");snackbarText.style.float="left";snackbarText.innerHTML="No Cardboard viewer?";var snackbarButton=document.createElement("a");snackbarButton.href="https://www.google.com/get/cardboard/get-cardboard/";snackbarButton.innerHTML="get one";snackbarButton.target="_blank";var s=snackbarButton.style;s.float="right";s.fontWeight=600;s.textTransform="uppercase";s.borderLeft="1px solid gray";s.paddingLeft="24px";s.textDecoration="none";s.color="#656A6B";snackbar.appendChild(snackbarText);snackbar.appendChild(snackbarButton);this.overlay=overlay;this.text=text;this.hide()}RotateInstructions.prototype.show=function(parent){if(!parent&&!this.overlay.parentElement){document.body.appendChild(this.overlay)}else if(parent){if(this.overlay.parentElement&&this.overlay.parentElement!=parent)this.overlay.parentElement.removeChild(this.overlay);parent.appendChild(this.overlay)}this.overlay.style.display="block";var img=this.overlay.querySelector("img");var s=img.style;if(Util.isLandscapeMode()){s.width="20%";s.marginLeft="40%";s.marginTop="3%"}else{s.width="50%";s.marginLeft="25%";s.marginTop="25%"}};RotateInstructions.prototype.hide=function(){this.overlay.style.display="none"};RotateInstructions.prototype.showTemporarily=function(ms,parent){this.show(parent);this.timer=setTimeout(this.hide.bind(this),ms)};RotateInstructions.prototype.disableShowTemporarily=function(){clearTimeout(this.timer)};RotateInstructions.prototype.update=function(){this.disableShowTemporarily();if(!Util.isLandscapeMode()&&Util.isMobile()){this.show()}else{this.hide()}};RotateInstructions.prototype.loadIcon_=function(){this.icon=Util.base64("image/svg+xml","PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjE5OHB4IiBoZWlnaHQ9IjI0MHB4IiB2aWV3Qm94PSIwIDAgMTk4IDI0MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpza2V0Y2g9Imh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9ucyI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDMuMy4zICgxMjA4MSkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+dHJhbnNpdGlvbjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNrZXRjaDp0eXBlPSJNU1BhZ2UiPgogICAgICAgIDxnIGlkPSJ0cmFuc2l0aW9uIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIj4KICAgICAgICAgICAgPGcgaWQ9IkltcG9ydGVkLUxheWVycy1Db3B5LTQtKy1JbXBvcnRlZC1MYXllcnMtQ29weS0rLUltcG9ydGVkLUxheWVycy1Db3B5LTItQ29weSIgc2tldGNoOnR5cGU9Ik1TTGF5ZXJHcm91cCI+CiAgICAgICAgICAgICAgICA8ZyBpZD0iSW1wb3J0ZWQtTGF5ZXJzLUNvcHktNCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDEwNy4wMDAwMDApIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQ5LjYyNSwyLjUyNyBDMTQ5LjYyNSwyLjUyNyAxNTUuODA1LDYuMDk2IDE1Ni4zNjIsNi40MTggTDE1Ni4zNjIsNy4zMDQgQzE1Ni4zNjIsNy40ODEgMTU2LjM3NSw3LjY2NCAxNTYuNCw3Ljg1MyBDMTU2LjQxLDcuOTM0IDE1Ni40Miw4LjAxNSAxNTYuNDI3LDguMDk1IEMxNTYuNTY3LDkuNTEgMTU3LjQwMSwxMS4wOTMgMTU4LjUzMiwxMi4wOTQgTDE2NC4yNTIsMTcuMTU2IEwxNjQuMzMzLDE3LjA2NiBDMTY0LjMzMywxNy4wNjYgMTY4LjcxNSwxNC41MzYgMTY5LjU2OCwxNC4wNDIgQzE3MS4wMjUsMTQuODgzIDE5NS41MzgsMjkuMDM1IDE5NS41MzgsMjkuMDM1IEwxOTUuNTM4LDgzLjAzNiBDMTk1LjUzOCw4My44MDcgMTk1LjE1Miw4NC4yNTMgMTk0LjU5LDg0LjI1MyBDMTk0LjM1Nyw4NC4yNTMgMTk0LjA5NSw4NC4xNzcgMTkzLjgxOCw4NC4wMTcgTDE2OS44NTEsNzAuMTc5IEwxNjkuODM3LDcwLjIwMyBMMTQyLjUxNSw4NS45NzggTDE0MS42NjUsODQuNjU1IEMxMzYuOTM0LDgzLjEyNiAxMzEuOTE3LDgxLjkxNSAxMjYuNzE0LDgxLjA0NSBDMTI2LjcwOSw4MS4wNiAxMjYuNzA3LDgxLjA2OSAxMjYuNzA3LDgxLjA2OSBMMTIxLjY0LDk4LjAzIEwxMTMuNzQ5LDEwMi41ODYgTDExMy43MTIsMTAyLjUyMyBMMTEzLjcxMiwxMzAuMTEzIEMxMTMuNzEyLDEzMC44ODUgMTEzLjMyNiwxMzEuMzMgMTEyLjc2NCwxMzEuMzMgQzExMi41MzIsMTMxLjMzIDExMi4yNjksMTMxLjI1NCAxMTEuOTkyLDEzMS4wOTQgTDY5LjUxOSwxMDYuNTcyIEM2OC41NjksMTA2LjAyMyA2Ny43OTksMTA0LjY5NSA2Ny43OTksMTAzLjYwNSBMNjcuNzk5LDEwMi41NyBMNjcuNzc4LDEwMi42MTcgQzY3LjI3LDEwMi4zOTMgNjYuNjQ4LDEwMi4yNDkgNjUuOTYyLDEwMi4yMTggQzY1Ljg3NSwxMDIuMjE0IDY1Ljc4OCwxMDIuMjEyIDY1LjcwMSwxMDIuMjEyIEM2NS42MDYsMTAyLjIxMiA2NS41MTEsMTAyLjIxNSA2NS40MTYsMTAyLjIxOSBDNjUuMTk1LDEwMi4yMjkgNjQuOTc0LDEwMi4yMzUgNjQuNzU0LDEwMi4yMzUgQzY0LjMzMSwxMDIuMjM1IDYzLjkxMSwxMDIuMjE2IDYzLjQ5OCwxMDIuMTc4IEM2MS44NDMsMTAyLjAyNSA2MC4yOTgsMTAxLjU3OCA1OS4wOTQsMTAwLjg4MiBMMTIuNTE4LDczLjk5MiBMMTIuNTIzLDc0LjAwNCBMMi4yNDUsNTUuMjU0IEMxLjI0NCw1My40MjcgMi4wMDQsNTEuMDM4IDMuOTQzLDQ5LjkxOCBMNTkuOTU0LDE3LjU3MyBDNjAuNjI2LDE3LjE4NSA2MS4zNSwxNy4wMDEgNjIuMDUzLDE3LjAwMSBDNjMuMzc5LDE3LjAwMSA2NC42MjUsMTcuNjYgNjUuMjgsMTguODU0IEw2NS4yODUsMTguODUxIEw2NS41MTIsMTkuMjY0IEw2NS41MDYsMTkuMjY4IEM2NS45MDksMjAuMDAzIDY2LjQwNSwyMC42OCA2Ni45ODMsMjEuMjg2IEw2Ny4yNiwyMS41NTYgQzY5LjE3NCwyMy40MDYgNzEuNzI4LDI0LjM1NyA3NC4zNzMsMjQuMzU3IEM3Ni4zMjIsMjQuMzU3IDc4LjMyMSwyMy44NCA4MC4xNDgsMjIuNzg1IEM4MC4xNjEsMjIuNzg1IDg3LjQ2NywxOC41NjYgODcuNDY3LDE4LjU2NiBDODguMTM5LDE4LjE3OCA4OC44NjMsMTcuOTk0IDg5LjU2NiwxNy45OTQgQzkwLjg5MiwxNy45OTQgOTIuMTM4LDE4LjY1MiA5Mi43OTIsMTkuODQ3IEw5Ni4wNDIsMjUuNzc1IEw5Ni4wNjQsMjUuNzU3IEwxMDIuODQ5LDI5LjY3NCBMMTAyLjc0NCwyOS40OTIgTDE0OS42MjUsMi41MjcgTTE0OS42MjUsMC44OTIgQzE0OS4zNDMsMC44OTIgMTQ5LjA2MiwwLjk2NSAxNDguODEsMS4xMSBMMTAyLjY0MSwyNy42NjYgTDk3LjIzMSwyNC41NDIgTDk0LjIyNiwxOS4wNjEgQzkzLjMxMywxNy4zOTQgOTEuNTI3LDE2LjM1OSA4OS41NjYsMTYuMzU4IEM4OC41NTUsMTYuMzU4IDg3LjU0NiwxNi42MzIgODYuNjQ5LDE3LjE1IEM4My44NzgsMTguNzUgNzkuNjg3LDIxLjE2OSA3OS4zNzQsMjEuMzQ1IEM3OS4zNTksMjEuMzUzIDc5LjM0NSwyMS4zNjEgNzkuMzMsMjEuMzY5IEM3Ny43OTgsMjIuMjU0IDc2LjA4NCwyMi43MjIgNzQuMzczLDIyLjcyMiBDNzIuMDgxLDIyLjcyMiA2OS45NTksMjEuODkgNjguMzk3LDIwLjM4IEw2OC4xNDUsMjAuMTM1IEM2Ny43MDYsMTkuNjcyIDY3LjMyMywxOS4xNTYgNjcuMDA2LDE4LjYwMSBDNjYuOTg4LDE4LjU1OSA2Ni45NjgsMTguNTE5IDY2Ljk0NiwxOC40NzkgTDY2LjcxOSwxOC4wNjUgQzY2LjY5LDE4LjAxMiA2Ni42NTgsMTcuOTYgNjYuNjI0LDE3LjkxMSBDNjUuNjg2LDE2LjMzNyA2My45NTEsMTUuMzY2IDYyLjA1MywxNS4zNjYgQzYxLjA0MiwxNS4zNjYgNjAuMDMzLDE1LjY0IDU5LjEzNiwxNi4xNTggTDMuMTI1LDQ4LjUwMiBDMC40MjYsNTAuMDYxIC0wLjYxMyw1My40NDIgMC44MTEsNTYuMDQgTDExLjA4OSw3NC43OSBDMTEuMjY2LDc1LjExMyAxMS41MzcsNzUuMzUzIDExLjg1LDc1LjQ5NCBMNTguMjc2LDEwMi4yOTggQzU5LjY3OSwxMDMuMTA4IDYxLjQzMywxMDMuNjMgNjMuMzQ4LDEwMy44MDYgQzYzLjgxMiwxMDMuODQ4IDY0LjI4NSwxMDMuODcgNjQuNzU0LDEwMy44NyBDNjUsMTAzLjg3IDY1LjI0OSwxMDMuODY0IDY1LjQ5NCwxMDMuODUyIEM2NS41NjMsMTAzLjg0OSA2NS42MzIsMTAzLjg0NyA2NS43MDEsMTAzLjg0NyBDNjUuNzY0LDEwMy44NDcgNjUuODI4LDEwMy44NDkgNjUuODksMTAzLjg1MiBDNjUuOTg2LDEwMy44NTYgNjYuMDgsMTAzLjg2MyA2Ni4xNzMsMTAzLjg3NCBDNjYuMjgyLDEwNS40NjcgNjcuMzMyLDEwNy4xOTcgNjguNzAyLDEwNy45ODggTDExMS4xNzQsMTMyLjUxIEMxMTEuNjk4LDEzMi44MTIgMTEyLjIzMiwxMzIuOTY1IDExMi43NjQsMTMyLjk2NSBDMTE0LjI2MSwxMzIuOTY1IDExNS4zNDcsMTMxLjc2NSAxMTUuMzQ3LDEzMC4xMTMgTDExNS4zNDcsMTAzLjU1MSBMMTIyLjQ1OCw5OS40NDYgQzEyMi44MTksOTkuMjM3IDEyMy4wODcsOTguODk4IDEyMy4yMDcsOTguNDk4IEwxMjcuODY1LDgyLjkwNSBDMTMyLjI3OSw4My43MDIgMTM2LjU1Nyw4NC43NTMgMTQwLjYwNyw4Ni4wMzMgTDE0MS4xNCw4Ni44NjIgQzE0MS40NTEsODcuMzQ2IDE0MS45NzcsODcuNjEzIDE0Mi41MTYsODcuNjEzIEMxNDIuNzk0LDg3LjYxMyAxNDMuMDc2LDg3LjU0MiAxNDMuMzMzLDg3LjM5MyBMMTY5Ljg2NSw3Mi4wNzYgTDE5Myw4NS40MzMgQzE5My41MjMsODUuNzM1IDE5NC4wNTgsODUuODg4IDE5NC41OSw4NS44ODggQzE5Ni4wODcsODUuODg4IDE5Ny4xNzMsODQuNjg5IDE5Ny4xNzMsODMuMDM2IEwxOTcuMTczLDI5LjAzNSBDMTk3LjE3MywyOC40NTEgMTk2Ljg2MSwyNy45MTEgMTk2LjM1NSwyNy42MTkgQzE5Ni4zNTUsMjcuNjE5IDE3MS44NDMsMTMuNDY3IDE3MC4zODUsMTIuNjI2IEMxNzAuMTMyLDEyLjQ4IDE2OS44NSwxMi40MDcgMTY5LjU2OCwxMi40MDcgQzE2OS4yODUsMTIuNDA3IDE2OS4wMDIsMTIuNDgxIDE2OC43NDksMTIuNjI3IEMxNjguMTQzLDEyLjk3OCAxNjUuNzU2LDE0LjM1NyAxNjQuNDI0LDE1LjEyNSBMMTU5LjYxNSwxMC44NyBDMTU4Ljc5NiwxMC4xNDUgMTU4LjE1NCw4LjkzNyAxNTguMDU0LDcuOTM0IEMxNTguMDQ1LDcuODM3IDE1OC4wMzQsNy43MzkgMTU4LjAyMSw3LjY0IEMxNTguMDA1LDcuNTIzIDE1Ny45OTgsNy40MSAxNTcuOTk4LDcuMzA0IEwxNTcuOTk4LDYuNDE4IEMxNTcuOTk4LDUuODM0IDE1Ny42ODYsNS4yOTUgMTU3LjE4MSw1LjAwMiBDMTU2LjYyNCw0LjY4IDE1MC40NDIsMS4xMTEgMTUwLjQ0MiwxLjExMSBDMTUwLjE4OSwwLjk2NSAxNDkuOTA3LDAuODkyIDE0OS42MjUsMC44OTIiIGlkPSJGaWxsLTEiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTYuMDI3LDI1LjYzNiBMMTQyLjYwMyw1Mi41MjcgQzE0My44MDcsNTMuMjIyIDE0NC41ODIsNTQuMTE0IDE0NC44NDUsNTUuMDY4IEwxNDQuODM1LDU1LjA3NSBMNjMuNDYxLDEwMi4wNTcgTDYzLjQ2LDEwMi4wNTcgQzYxLjgwNiwxMDEuOTA1IDYwLjI2MSwxMDEuNDU3IDU5LjA1NywxMDAuNzYyIEwxMi40ODEsNzMuODcxIEw5Ni4wMjcsMjUuNjM2IiBpZD0iRmlsbC0yIiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTYzLjQ2MSwxMDIuMTc0IEM2My40NTMsMTAyLjE3NCA2My40NDYsMTAyLjE3NCA2My40MzksMTAyLjE3MiBDNjEuNzQ2LDEwMi4wMTYgNjAuMjExLDEwMS41NjMgNTguOTk4LDEwMC44NjMgTDEyLjQyMiw3My45NzMgQzEyLjM4Niw3My45NTIgMTIuMzY0LDczLjkxNCAxMi4zNjQsNzMuODcxIEMxMi4zNjQsNzMuODMgMTIuMzg2LDczLjc5MSAxMi40MjIsNzMuNzcgTDk1Ljk2OCwyNS41MzUgQzk2LjAwNCwyNS41MTQgOTYuMDQ5LDI1LjUxNCA5Ni4wODUsMjUuNTM1IEwxNDIuNjYxLDUyLjQyNiBDMTQzLjg4OCw1My4xMzQgMTQ0LjY4Miw1NC4wMzggMTQ0Ljk1Nyw1NS4wMzcgQzE0NC45Nyw1NS4wODMgMTQ0Ljk1Myw1NS4xMzMgMTQ0LjkxNSw1NS4xNjEgQzE0NC45MTEsNTUuMTY1IDE0NC44OTgsNTUuMTc0IDE0NC44OTQsNTUuMTc3IEw2My41MTksMTAyLjE1OCBDNjMuNTAxLDEwMi4xNjkgNjMuNDgxLDEwMi4xNzQgNjMuNDYxLDEwMi4xNzQgTDYzLjQ2MSwxMDIuMTc0IFogTTEyLjcxNCw3My44NzEgTDU5LjExNSwxMDAuNjYxIEM2MC4yOTMsMTAxLjM0MSA2MS43ODYsMTAxLjc4MiA2My40MzUsMTAxLjkzNyBMMTQ0LjcwNyw1NS4wMTUgQzE0NC40MjgsNTQuMTA4IDE0My42ODIsNTMuMjg1IDE0Mi41NDQsNTIuNjI4IEw5Ni4wMjcsMjUuNzcxIEwxMi43MTQsNzMuODcxIEwxMi43MTQsNzMuODcxIFoiIGlkPSJGaWxsLTMiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQ4LjMyNyw1OC40NzEgQzE0OC4xNDUsNTguNDggMTQ3Ljk2Miw1OC40OCAxNDcuNzgxLDU4LjQ3MiBDMTQ1Ljg4Nyw1OC4zODkgMTQ0LjQ3OSw1Ny40MzQgMTQ0LjYzNiw1Ni4zNCBDMTQ0LjY4OSw1NS45NjcgMTQ0LjY2NCw1NS41OTcgMTQ0LjU2NCw1NS4yMzUgTDYzLjQ2MSwxMDIuMDU3IEM2NC4wODksMTAyLjExNSA2NC43MzMsMTAyLjEzIDY1LjM3OSwxMDIuMDk5IEM2NS41NjEsMTAyLjA5IDY1Ljc0MywxMDIuMDkgNjUuOTI1LDEwMi4wOTggQzY3LjgxOSwxMDIuMTgxIDY5LjIyNywxMDMuMTM2IDY5LjA3LDEwNC4yMyBMMTQ4LjMyNyw1OC40NzEiIGlkPSJGaWxsLTQiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNjkuMDcsMTA0LjM0NyBDNjkuMDQ4LDEwNC4zNDcgNjkuMDI1LDEwNC4zNCA2OS4wMDUsMTA0LjMyNyBDNjguOTY4LDEwNC4zMDEgNjguOTQ4LDEwNC4yNTcgNjguOTU1LDEwNC4yMTMgQzY5LDEwMy44OTYgNjguODk4LDEwMy41NzYgNjguNjU4LDEwMy4yODggQzY4LjE1MywxMDIuNjc4IDY3LjEwMywxMDIuMjY2IDY1LjkyLDEwMi4yMTQgQzY1Ljc0MiwxMDIuMjA2IDY1LjU2MywxMDIuMjA3IDY1LjM4NSwxMDIuMjE1IEM2NC43NDIsMTAyLjI0NiA2NC4wODcsMTAyLjIzMiA2My40NSwxMDIuMTc0IEM2My4zOTksMTAyLjE2OSA2My4zNTgsMTAyLjEzMiA2My4zNDcsMTAyLjA4MiBDNjMuMzM2LDEwMi4wMzMgNjMuMzU4LDEwMS45ODEgNjMuNDAyLDEwMS45NTYgTDE0NC41MDYsNTUuMTM0IEMxNDQuNTM3LDU1LjExNiAxNDQuNTc1LDU1LjExMyAxNDQuNjA5LDU1LjEyNyBDMTQ0LjY0Miw1NS4xNDEgMTQ0LjY2OCw1NS4xNyAxNDQuNjc3LDU1LjIwNCBDMTQ0Ljc4MSw1NS41ODUgMTQ0LjgwNiw1NS45NzIgMTQ0Ljc1MSw1Ni4zNTcgQzE0NC43MDYsNTYuNjczIDE0NC44MDgsNTYuOTk0IDE0NS4wNDcsNTcuMjgyIEMxNDUuNTUzLDU3Ljg5MiAxNDYuNjAyLDU4LjMwMyAxNDcuNzg2LDU4LjM1NSBDMTQ3Ljk2NCw1OC4zNjMgMTQ4LjE0Myw1OC4zNjMgMTQ4LjMyMSw1OC4zNTQgQzE0OC4zNzcsNTguMzUyIDE0OC40MjQsNTguMzg3IDE0OC40MzksNTguNDM4IEMxNDguNDU0LDU4LjQ5IDE0OC40MzIsNTguNTQ1IDE0OC4zODUsNTguNTcyIEw2OS4xMjksMTA0LjMzMSBDNjkuMTExLDEwNC4zNDIgNjkuMDksMTA0LjM0NyA2OS4wNywxMDQuMzQ3IEw2OS4wNywxMDQuMzQ3IFogTTY1LjY2NSwxMDEuOTc1IEM2NS43NTQsMTAxLjk3NSA2NS44NDIsMTAxLjk3NyA2NS45MywxMDEuOTgxIEM2Ny4xOTYsMTAyLjAzNyA2OC4yODMsMTAyLjQ2OSA2OC44MzgsMTAzLjEzOSBDNjkuMDY1LDEwMy40MTMgNjkuMTg4LDEwMy43MTQgNjkuMTk4LDEwNC4wMjEgTDE0Ny44ODMsNTguNTkyIEMxNDcuODQ3LDU4LjU5MiAxNDcuODExLDU4LjU5MSAxNDcuNzc2LDU4LjU4OSBDMTQ2LjUwOSw1OC41MzMgMTQ1LjQyMiw1OC4xIDE0NC44NjcsNTcuNDMxIEMxNDQuNTg1LDU3LjA5MSAxNDQuNDY1LDU2LjcwNyAxNDQuNTIsNTYuMzI0IEMxNDQuNTYzLDU2LjAyMSAxNDQuNTUyLDU1LjcxNiAxNDQuNDg4LDU1LjQxNCBMNjMuODQ2LDEwMS45NyBDNjQuMzUzLDEwMi4wMDIgNjQuODY3LDEwMi4wMDYgNjUuMzc0LDEwMS45ODIgQzY1LjQ3MSwxMDEuOTc3IDY1LjU2OCwxMDEuOTc1IDY1LjY2NSwxMDEuOTc1IEw2NS42NjUsMTAxLjk3NSBaIiBpZD0iRmlsbC01IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTIuMjA4LDU1LjEzNCBDMS4yMDcsNTMuMzA3IDEuOTY3LDUwLjkxNyAzLjkwNiw0OS43OTcgTDU5LjkxNywxNy40NTMgQzYxLjg1NiwxNi4zMzMgNjQuMjQxLDE2LjkwNyA2NS4yNDMsMTguNzM0IEw2NS40NzUsMTkuMTQ0IEM2NS44NzIsMTkuODgyIDY2LjM2OCwyMC41NiA2Ni45NDUsMjEuMTY1IEw2Ny4yMjMsMjEuNDM1IEM3MC41NDgsMjQuNjQ5IDc1LjgwNiwyNS4xNTEgODAuMTExLDIyLjY2NSBMODcuNDMsMTguNDQ1IEM4OS4zNywxNy4zMjYgOTEuNzU0LDE3Ljg5OSA5Mi43NTUsMTkuNzI3IEw5Ni4wMDUsMjUuNjU1IEwxMi40ODYsNzMuODg0IEwyLjIwOCw1NS4xMzQgWiIgaWQ9IkZpbGwtNiIgZmlsbD0iI0ZBRkFGQSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi40ODYsNzQuMDAxIEMxMi40NzYsNzQuMDAxIDEyLjQ2NSw3My45OTkgMTIuNDU1LDczLjk5NiBDMTIuNDI0LDczLjk4OCAxMi4zOTksNzMuOTY3IDEyLjM4NCw3My45NCBMMi4xMDYsNTUuMTkgQzEuMDc1LDUzLjMxIDEuODU3LDUwLjg0NSAzLjg0OCw0OS42OTYgTDU5Ljg1OCwxNy4zNTIgQzYwLjUyNSwxNi45NjcgNjEuMjcxLDE2Ljc2NCA2Mi4wMTYsMTYuNzY0IEM2My40MzEsMTYuNzY0IDY0LjY2NiwxNy40NjYgNjUuMzI3LDE4LjY0NiBDNjUuMzM3LDE4LjY1NCA2NS4zNDUsMTguNjYzIDY1LjM1MSwxOC42NzQgTDY1LjU3OCwxOS4wODggQzY1LjU4NCwxOS4xIDY1LjU4OSwxOS4xMTIgNjUuNTkxLDE5LjEyNiBDNjUuOTg1LDE5LjgzOCA2Ni40NjksMjAuNDk3IDY3LjAzLDIxLjA4NSBMNjcuMzA1LDIxLjM1MSBDNjkuMTUxLDIzLjEzNyA3MS42NDksMjQuMTIgNzQuMzM2LDI0LjEyIEM3Ni4zMTMsMjQuMTIgNzguMjksMjMuNTgyIDgwLjA1MywyMi41NjMgQzgwLjA2NCwyMi41NTcgODAuMDc2LDIyLjU1MyA4MC4wODgsMjIuNTUgTDg3LjM3MiwxOC4zNDQgQzg4LjAzOCwxNy45NTkgODguNzg0LDE3Ljc1NiA4OS41MjksMTcuNzU2IEM5MC45NTYsMTcuNzU2IDkyLjIwMSwxOC40NzIgOTIuODU4LDE5LjY3IEw5Ni4xMDcsMjUuNTk5IEM5Ni4xMzgsMjUuNjU0IDk2LjExOCwyNS43MjQgOTYuMDYzLDI1Ljc1NiBMMTIuNTQ1LDczLjk4NSBDMTIuNTI2LDczLjk5NiAxMi41MDYsNzQuMDAxIDEyLjQ4Niw3NC4wMDEgTDEyLjQ4Niw3NC4wMDEgWiBNNjIuMDE2LDE2Ljk5NyBDNjEuMzEyLDE2Ljk5NyA2MC42MDYsMTcuMTkgNTkuOTc1LDE3LjU1NCBMMy45NjUsNDkuODk5IEMyLjA4Myw1MC45ODUgMS4zNDEsNTMuMzA4IDIuMzEsNTUuMDc4IEwxMi41MzEsNzMuNzIzIEw5NS44NDgsMjUuNjExIEw5Mi42NTMsMTkuNzgyIEM5Mi4wMzgsMTguNjYgOTAuODcsMTcuOTkgODkuNTI5LDE3Ljk5IEM4OC44MjUsMTcuOTkgODguMTE5LDE4LjE4MiA4Ny40ODksMTguNTQ3IEw4MC4xNzIsMjIuNzcyIEM4MC4xNjEsMjIuNzc4IDgwLjE0OSwyMi43ODIgODAuMTM3LDIyLjc4NSBDNzguMzQ2LDIzLjgxMSA3Ni4zNDEsMjQuMzU0IDc0LjMzNiwyNC4zNTQgQzcxLjU4OCwyNC4zNTQgNjkuMDMzLDIzLjM0NyA2Ny4xNDIsMjEuNTE5IEw2Ni44NjQsMjEuMjQ5IEM2Ni4yNzcsMjAuNjM0IDY1Ljc3NCwxOS45NDcgNjUuMzY3LDE5LjIwMyBDNjUuMzYsMTkuMTkyIDY1LjM1NiwxOS4xNzkgNjUuMzU0LDE5LjE2NiBMNjUuMTYzLDE4LjgxOSBDNjUuMTU0LDE4LjgxMSA2NS4xNDYsMTguODAxIDY1LjE0LDE4Ljc5IEM2NC41MjUsMTcuNjY3IDYzLjM1NywxNi45OTcgNjIuMDE2LDE2Ljk5NyBMNjIuMDE2LDE2Ljk5NyBaIiBpZD0iRmlsbC03IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTQyLjQzNCw0OC44MDggTDQyLjQzNCw0OC44MDggQzM5LjkyNCw0OC44MDcgMzcuNzM3LDQ3LjU1IDM2LjU4Miw0NS40NDMgQzM0Ljc3MSw0Mi4xMzkgMzYuMTQ0LDM3LjgwOSAzOS42NDEsMzUuNzg5IEw1MS45MzIsMjguNjkxIEM1My4xMDMsMjguMDE1IDU0LjQxMywyNy42NTggNTUuNzIxLDI3LjY1OCBDNTguMjMxLDI3LjY1OCA2MC40MTgsMjguOTE2IDYxLjU3MywzMS4wMjMgQzYzLjM4NCwzNC4zMjcgNjIuMDEyLDM4LjY1NyA1OC41MTQsNDAuNjc3IEw0Ni4yMjMsNDcuNzc1IEM0NS4wNTMsNDguNDUgNDMuNzQyLDQ4LjgwOCA0Mi40MzQsNDguODA4IEw0Mi40MzQsNDguODA4IFogTTU1LjcyMSwyOC4xMjUgQzU0LjQ5NSwyOC4xMjUgNTMuMjY1LDI4LjQ2MSA1Mi4xNjYsMjkuMDk2IEwzOS44NzUsMzYuMTk0IEMzNi41OTYsMzguMDg3IDM1LjMwMiw0Mi4xMzYgMzYuOTkyLDQ1LjIxOCBDMzguMDYzLDQ3LjE3MyA0MC4wOTgsNDguMzQgNDIuNDM0LDQ4LjM0IEM0My42NjEsNDguMzQgNDQuODksNDguMDA1IDQ1Ljk5LDQ3LjM3IEw1OC4yODEsNDAuMjcyIEM2MS41NiwzOC4zNzkgNjIuODUzLDM0LjMzIDYxLjE2NCwzMS4yNDggQzYwLjA5MiwyOS4yOTMgNTguMDU4LDI4LjEyNSA1NS43MjEsMjguMTI1IEw1NS43MjEsMjguMTI1IFoiIGlkPSJGaWxsLTgiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQ5LjU4OCwyLjQwNyBDMTQ5LjU4OCwyLjQwNyAxNTUuNzY4LDUuOTc1IDE1Ni4zMjUsNi4yOTcgTDE1Ni4zMjUsNy4xODQgQzE1Ni4zMjUsNy4zNiAxNTYuMzM4LDcuNTQ0IDE1Ni4zNjIsNy43MzMgQzE1Ni4zNzMsNy44MTQgMTU2LjM4Miw3Ljg5NCAxNTYuMzksNy45NzUgQzE1Ni41Myw5LjM5IDE1Ny4zNjMsMTAuOTczIDE1OC40OTUsMTEuOTc0IEwxNjUuODkxLDE4LjUxOSBDMTY2LjA2OCwxOC42NzUgMTY2LjI0OSwxOC44MTQgMTY2LjQzMiwxOC45MzQgQzE2OC4wMTEsMTkuOTc0IDE2OS4zODIsMTkuNCAxNjkuNDk0LDE3LjY1MiBDMTY5LjU0MywxNi44NjggMTY5LjU1MSwxNi4wNTcgMTY5LjUxNywxNS4yMjMgTDE2OS41MTQsMTUuMDYzIEwxNjkuNTE0LDEzLjkxMiBDMTcwLjc4LDE0LjY0MiAxOTUuNTAxLDI4LjkxNSAxOTUuNTAxLDI4LjkxNSBMMTk1LjUwMSw4Mi45MTUgQzE5NS41MDEsODQuMDA1IDE5NC43MzEsODQuNDQ1IDE5My43ODEsODMuODk3IEwxNTEuMzA4LDU5LjM3NCBDMTUwLjM1OCw1OC44MjYgMTQ5LjU4OCw1Ny40OTcgMTQ5LjU4OCw1Ni40MDggTDE0OS41ODgsMjIuMzc1IiBpZD0iRmlsbC05IiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE5NC41NTMsODQuMjUgQzE5NC4yOTYsODQuMjUgMTk0LjAxMyw4NC4xNjUgMTkzLjcyMiw4My45OTcgTDE1MS4yNSw1OS40NzYgQzE1MC4yNjksNTguOTA5IDE0OS40NzEsNTcuNTMzIDE0OS40NzEsNTYuNDA4IEwxNDkuNDcxLDIyLjM3NSBMMTQ5LjcwNSwyMi4zNzUgTDE0OS43MDUsNTYuNDA4IEMxNDkuNzA1LDU3LjQ1OSAxNTAuNDUsNTguNzQ0IDE1MS4zNjYsNTkuMjc0IEwxOTMuODM5LDgzLjc5NSBDMTk0LjI2Myw4NC4wNCAxOTQuNjU1LDg0LjA4MyAxOTQuOTQyLDgzLjkxNyBDMTk1LjIyNyw4My43NTMgMTk1LjM4NCw4My4zOTcgMTk1LjM4NCw4Mi45MTUgTDE5NS4zODQsMjguOTgyIEMxOTQuMTAyLDI4LjI0MiAxNzIuMTA0LDE1LjU0MiAxNjkuNjMxLDE0LjExNCBMMTY5LjYzNCwxNS4yMiBDMTY5LjY2OCwxNi4wNTIgMTY5LjY2LDE2Ljg3NCAxNjkuNjEsMTcuNjU5IEMxNjkuNTU2LDE4LjUwMyAxNjkuMjE0LDE5LjEyMyAxNjguNjQ3LDE5LjQwNSBDMTY4LjAyOCwxOS43MTQgMTY3LjE5NywxOS41NzggMTY2LjM2NywxOS4wMzIgQzE2Ni4xODEsMTguOTA5IDE2NS45OTUsMTguNzY2IDE2NS44MTQsMTguNjA2IEwxNTguNDE3LDEyLjA2MiBDMTU3LjI1OSwxMS4wMzYgMTU2LjQxOCw5LjQzNyAxNTYuMjc0LDcuOTg2IEMxNTYuMjY2LDcuOTA3IDE1Ni4yNTcsNy44MjcgMTU2LjI0Nyw3Ljc0OCBDMTU2LjIyMSw3LjU1NSAxNTYuMjA5LDcuMzY1IDE1Ni4yMDksNy4xODQgTDE1Ni4yMDksNi4zNjQgQzE1NS4zNzUsNS44ODMgMTQ5LjUyOSwyLjUwOCAxNDkuNTI5LDIuNTA4IEwxNDkuNjQ2LDIuMzA2IEMxNDkuNjQ2LDIuMzA2IDE1NS44MjcsNS44NzQgMTU2LjM4NCw2LjE5NiBMMTU2LjQ0Miw2LjIzIEwxNTYuNDQyLDcuMTg0IEMxNTYuNDQyLDcuMzU1IDE1Ni40NTQsNy41MzUgMTU2LjQ3OCw3LjcxNyBDMTU2LjQ4OSw3LjggMTU2LjQ5OSw3Ljg4MiAxNTYuNTA3LDcuOTYzIEMxNTYuNjQ1LDkuMzU4IDE1Ny40NTUsMTAuODk4IDE1OC41NzIsMTEuODg2IEwxNjUuOTY5LDE4LjQzMSBDMTY2LjE0MiwxOC41ODQgMTY2LjMxOSwxOC43MiAxNjYuNDk2LDE4LjgzNyBDMTY3LjI1NCwxOS4zMzYgMTY4LDE5LjQ2NyAxNjguNTQzLDE5LjE5NiBDMTY5LjAzMywxOC45NTMgMTY5LjMyOSwxOC40MDEgMTY5LjM3NywxNy42NDUgQzE2OS40MjcsMTYuODY3IDE2OS40MzQsMTYuMDU0IDE2OS40MDEsMTUuMjI4IEwxNjkuMzk3LDE1LjA2NSBMMTY5LjM5NywxMy43MSBMMTY5LjU3MiwxMy44MSBDMTcwLjgzOSwxNC41NDEgMTk1LjU1OSwyOC44MTQgMTk1LjU1OSwyOC44MTQgTDE5NS42MTgsMjguODQ3IEwxOTUuNjE4LDgyLjkxNSBDMTk1LjYxOCw4My40ODQgMTk1LjQyLDgzLjkxMSAxOTUuMDU5LDg0LjExOSBDMTk0LjkwOCw4NC4yMDYgMTk0LjczNyw4NC4yNSAxOTQuNTUzLDg0LjI1IiBpZD0iRmlsbC0xMCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNDUuNjg1LDU2LjE2MSBMMTY5LjgsNzAuMDgzIEwxNDMuODIyLDg1LjA4MSBMMTQyLjM2LDg0Ljc3NCBDMTM1LjgyNiw4Mi42MDQgMTI4LjczMiw4MS4wNDYgMTIxLjM0MSw4MC4xNTggQzExNi45NzYsNzkuNjM0IDExMi42NzgsODEuMjU0IDExMS43NDMsODMuNzc4IEMxMTEuNTA2LDg0LjQxNCAxMTEuNTAzLDg1LjA3MSAxMTEuNzMyLDg1LjcwNiBDMTEzLjI3LDg5Ljk3MyAxMTUuOTY4LDk0LjA2OSAxMTkuNzI3LDk3Ljg0MSBMMTIwLjI1OSw5OC42ODYgQzEyMC4yNiw5OC42ODUgOTQuMjgyLDExMy42ODMgOTQuMjgyLDExMy42ODMgTDcwLjE2Nyw5OS43NjEgTDE0NS42ODUsNTYuMTYxIiBpZD0iRmlsbC0xMSIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik05NC4yODIsMTEzLjgxOCBMOTQuMjIzLDExMy43ODUgTDY5LjkzMyw5OS43NjEgTDcwLjEwOCw5OS42NiBMMTQ1LjY4NSw1Ni4wMjYgTDE0NS43NDMsNTYuMDU5IEwxNzAuMDMzLDcwLjA4MyBMMTQzLjg0Miw4NS4yMDUgTDE0My43OTcsODUuMTk1IEMxNDMuNzcyLDg1LjE5IDE0Mi4zMzYsODQuODg4IDE0Mi4zMzYsODQuODg4IEMxMzUuNzg3LDgyLjcxNCAxMjguNzIzLDgxLjE2MyAxMjEuMzI3LDgwLjI3NCBDMTIwLjc4OCw4MC4yMDkgMTIwLjIzNiw4MC4xNzcgMTE5LjY4OSw4MC4xNzcgQzExNS45MzEsODAuMTc3IDExMi42MzUsODEuNzA4IDExMS44NTIsODMuODE5IEMxMTEuNjI0LDg0LjQzMiAxMTEuNjIxLDg1LjA1MyAxMTEuODQyLDg1LjY2NyBDMTEzLjM3Nyw4OS45MjUgMTE2LjA1OCw5My45OTMgMTE5LjgxLDk3Ljc1OCBMMTE5LjgyNiw5Ny43NzkgTDEyMC4zNTIsOTguNjE0IEMxMjAuMzU0LDk4LjYxNyAxMjAuMzU2LDk4LjYyIDEyMC4zNTgsOTguNjI0IEwxMjAuNDIyLDk4LjcyNiBMMTIwLjMxNyw5OC43ODcgQzEyMC4yNjQsOTguODE4IDk0LjU5OSwxMTMuNjM1IDk0LjM0LDExMy43ODUgTDk0LjI4MiwxMTMuODE4IEw5NC4yODIsMTEzLjgxOCBaIE03MC40MDEsOTkuNzYxIEw5NC4yODIsMTEzLjU0OSBMMTE5LjA4NCw5OS4yMjkgQzExOS42Myw5OC45MTQgMTE5LjkzLDk4Ljc0IDEyMC4xMDEsOTguNjU0IEwxMTkuNjM1LDk3LjkxNCBDMTE1Ljg2NCw5NC4xMjcgMTEzLjE2OCw5MC4wMzMgMTExLjYyMiw4NS43NDYgQzExMS4zODIsODUuMDc5IDExMS4zODYsODQuNDA0IDExMS42MzMsODMuNzM4IEMxMTIuNDQ4LDgxLjUzOSAxMTUuODM2LDc5Ljk0MyAxMTkuNjg5LDc5Ljk0MyBDMTIwLjI0Niw3OS45NDMgMTIwLjgwNiw3OS45NzYgMTIxLjM1NSw4MC4wNDIgQzEyOC43NjcsODAuOTMzIDEzNS44NDYsODIuNDg3IDE0Mi4zOTYsODQuNjYzIEMxNDMuMjMyLDg0LjgzOCAxNDMuNjExLDg0LjkxNyAxNDMuNzg2LDg0Ljk2NyBMMTY5LjU2Niw3MC4wODMgTDE0NS42ODUsNTYuMjk1IEw3MC40MDEsOTkuNzYxIEw3MC40MDEsOTkuNzYxIFoiIGlkPSJGaWxsLTEyIiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2Ny4yMywxOC45NzkgTDE2Ny4yMyw2OS44NSBMMTM5LjkwOSw4NS42MjMgTDEzMy40NDgsNzEuNDU2IEMxMzIuNTM4LDY5LjQ2IDEzMC4wMiw2OS43MTggMTI3LjgyNCw3Mi4wMyBDMTI2Ljc2OSw3My4xNCAxMjUuOTMxLDc0LjU4NSAxMjUuNDk0LDc2LjA0OCBMMTE5LjAzNCw5Ny42NzYgTDkxLjcxMiwxMTMuNDUgTDkxLjcxMiw2Mi41NzkgTDE2Ny4yMywxOC45NzkiIGlkPSJGaWxsLTEzIiBmaWxsPSIjRkZGRkZGIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTkxLjcxMiwxMTMuNTY3IEM5MS42OTIsMTEzLjU2NyA5MS42NzIsMTEzLjU2MSA5MS42NTMsMTEzLjU1MSBDOTEuNjE4LDExMy41MyA5MS41OTUsMTEzLjQ5MiA5MS41OTUsMTEzLjQ1IEw5MS41OTUsNjIuNTc5IEM5MS41OTUsNjIuNTM3IDkxLjYxOCw2Mi40OTkgOTEuNjUzLDYyLjQ3OCBMMTY3LjE3MiwxOC44NzggQzE2Ny4yMDgsMTguODU3IDE2Ny4yNTIsMTguODU3IDE2Ny4yODgsMTguODc4IEMxNjcuMzI0LDE4Ljg5OSAxNjcuMzQ3LDE4LjkzNyAxNjcuMzQ3LDE4Ljk3OSBMMTY3LjM0Nyw2OS44NSBDMTY3LjM0Nyw2OS44OTEgMTY3LjMyNCw2OS45MyAxNjcuMjg4LDY5Ljk1IEwxMzkuOTY3LDg1LjcyNSBDMTM5LjkzOSw4NS43NDEgMTM5LjkwNSw4NS43NDUgMTM5Ljg3Myw4NS43MzUgQzEzOS44NDIsODUuNzI1IDEzOS44MTYsODUuNzAyIDEzOS44MDIsODUuNjcyIEwxMzMuMzQyLDcxLjUwNCBDMTMyLjk2Nyw3MC42ODIgMTMyLjI4LDcwLjIyOSAxMzEuNDA4LDcwLjIyOSBDMTMwLjMxOSw3MC4yMjkgMTI5LjA0NCw3MC45MTUgMTI3LjkwOCw3Mi4xMSBDMTI2Ljg3NCw3My4yIDEyNi4wMzQsNzQuNjQ3IDEyNS42MDYsNzYuMDgyIEwxMTkuMTQ2LDk3LjcwOSBDMTE5LjEzNyw5Ny43MzggMTE5LjExOCw5Ny43NjIgMTE5LjA5Miw5Ny43NzcgTDkxLjc3LDExMy41NTEgQzkxLjc1MiwxMTMuNTYxIDkxLjczMiwxMTMuNTY3IDkxLjcxMiwxMTMuNTY3IEw5MS43MTIsMTEzLjU2NyBaIE05MS44MjksNjIuNjQ3IEw5MS44MjksMTEzLjI0OCBMMTE4LjkzNSw5Ny41OTggTDEyNS4zODIsNzYuMDE1IEMxMjUuODI3LDc0LjUyNSAxMjYuNjY0LDczLjA4MSAxMjcuNzM5LDcxLjk1IEMxMjguOTE5LDcwLjcwOCAxMzAuMjU2LDY5Ljk5NiAxMzEuNDA4LDY5Ljk5NiBDMTMyLjM3Nyw2OS45OTYgMTMzLjEzOSw3MC40OTcgMTMzLjU1NCw3MS40MDcgTDEzOS45NjEsODUuNDU4IEwxNjcuMTEzLDY5Ljc4MiBMMTY3LjExMywxOS4xODEgTDkxLjgyOSw2Mi42NDcgTDkxLjgyOSw2Mi42NDcgWiIgaWQ9IkZpbGwtMTQiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTY4LjU0MywxOS4yMTMgTDE2OC41NDMsNzAuMDgzIEwxNDEuMjIxLDg1Ljg1NyBMMTM0Ljc2MSw3MS42ODkgQzEzMy44NTEsNjkuNjk0IDEzMS4zMzMsNjkuOTUxIDEyOS4xMzcsNzIuMjYzIEMxMjguMDgyLDczLjM3NCAxMjcuMjQ0LDc0LjgxOSAxMjYuODA3LDc2LjI4MiBMMTIwLjM0Niw5Ny45MDkgTDkzLjAyNSwxMTMuNjgzIEw5My4wMjUsNjIuODEzIEwxNjguNTQzLDE5LjIxMyIgaWQ9IkZpbGwtMTUiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTMuMDI1LDExMy44IEM5My4wMDUsMTEzLjggOTIuOTg0LDExMy43OTUgOTIuOTY2LDExMy43ODUgQzkyLjkzMSwxMTMuNzY0IDkyLjkwOCwxMTMuNzI1IDkyLjkwOCwxMTMuNjg0IEw5Mi45MDgsNjIuODEzIEM5Mi45MDgsNjIuNzcxIDkyLjkzMSw2Mi43MzMgOTIuOTY2LDYyLjcxMiBMMTY4LjQ4NCwxOS4xMTIgQzE2OC41MiwxOS4wOSAxNjguNTY1LDE5LjA5IDE2OC42MDEsMTkuMTEyIEMxNjguNjM3LDE5LjEzMiAxNjguNjYsMTkuMTcxIDE2OC42NiwxOS4yMTIgTDE2OC42Niw3MC4wODMgQzE2OC42Niw3MC4xMjUgMTY4LjYzNyw3MC4xNjQgMTY4LjYwMSw3MC4xODQgTDE0MS4yOCw4NS45NTggQzE0MS4yNTEsODUuOTc1IDE0MS4yMTcsODUuOTc5IDE0MS4xODYsODUuOTY4IEMxNDEuMTU0LDg1Ljk1OCAxNDEuMTI5LDg1LjkzNiAxNDEuMTE1LDg1LjkwNiBMMTM0LjY1NSw3MS43MzggQzEzNC4yOCw3MC45MTUgMTMzLjU5Myw3MC40NjMgMTMyLjcyLDcwLjQ2MyBDMTMxLjYzMiw3MC40NjMgMTMwLjM1Nyw3MS4xNDggMTI5LjIyMSw3Mi4zNDQgQzEyOC4xODYsNzMuNDMzIDEyNy4zNDcsNzQuODgxIDEyNi45MTksNzYuMzE1IEwxMjAuNDU4LDk3Ljk0MyBDMTIwLjQ1LDk3Ljk3MiAxMjAuNDMxLDk3Ljk5NiAxMjAuNDA1LDk4LjAxIEw5My4wODMsMTEzLjc4NSBDOTMuMDY1LDExMy43OTUgOTMuMDQ1LDExMy44IDkzLjAyNSwxMTMuOCBMOTMuMDI1LDExMy44IFogTTkzLjE0Miw2Mi44ODEgTDkzLjE0MiwxMTMuNDgxIEwxMjAuMjQ4LDk3LjgzMiBMMTI2LjY5NSw3Ni4yNDggQzEyNy4xNCw3NC43NTggMTI3Ljk3Nyw3My4zMTUgMTI5LjA1Miw3Mi4xODMgQzEzMC4yMzEsNzAuOTQyIDEzMS41NjgsNzAuMjI5IDEzMi43Miw3MC4yMjkgQzEzMy42ODksNzAuMjI5IDEzNC40NTIsNzAuNzMxIDEzNC44NjcsNzEuNjQxIEwxNDEuMjc0LDg1LjY5MiBMMTY4LjQyNiw3MC4wMTYgTDE2OC40MjYsMTkuNDE1IEw5My4xNDIsNjIuODgxIEw5My4xNDIsNjIuODgxIFoiIGlkPSJGaWxsLTE2IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2OS44LDcwLjA4MyBMMTQyLjQ3OCw4NS44NTcgTDEzNi4wMTgsNzEuNjg5IEMxMzUuMTA4LDY5LjY5NCAxMzIuNTksNjkuOTUxIDEzMC4zOTMsNzIuMjYzIEMxMjkuMzM5LDczLjM3NCAxMjguNSw3NC44MTkgMTI4LjA2NCw3Ni4yODIgTDEyMS42MDMsOTcuOTA5IEw5NC4yODIsMTEzLjY4MyBMOTQuMjgyLDYyLjgxMyBMMTY5LjgsMTkuMjEzIEwxNjkuOCw3MC4wODMgWiIgaWQ9IkZpbGwtMTciIGZpbGw9IiNGQUZBRkEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTQuMjgyLDExMy45MTcgQzk0LjI0MSwxMTMuOTE3IDk0LjIwMSwxMTMuOTA3IDk0LjE2NSwxMTMuODg2IEM5NC4wOTMsMTEzLjg0NSA5NC4wNDgsMTEzLjc2NyA5NC4wNDgsMTEzLjY4NCBMOTQuMDQ4LDYyLjgxMyBDOTQuMDQ4LDYyLjczIDk0LjA5Myw2Mi42NTIgOTQuMTY1LDYyLjYxMSBMMTY5LjY4MywxOS4wMSBDMTY5Ljc1NSwxOC45NjkgMTY5Ljg0NCwxOC45NjkgMTY5LjkxNywxOS4wMSBDMTY5Ljk4OSwxOS4wNTIgMTcwLjAzMywxOS4xMjkgMTcwLjAzMywxOS4yMTIgTDE3MC4wMzMsNzAuMDgzIEMxNzAuMDMzLDcwLjE2NiAxNjkuOTg5LDcwLjI0NCAxNjkuOTE3LDcwLjI4NSBMMTQyLjU5NSw4Ni4wNiBDMTQyLjUzOCw4Ni4wOTIgMTQyLjQ2OSw4Ni4xIDE0Mi40MDcsODYuMDggQzE0Mi4zNDQsODYuMDYgMTQyLjI5Myw4Ni4wMTQgMTQyLjI2Niw4NS45NTQgTDEzNS44MDUsNzEuNzg2IEMxMzUuNDQ1LDcwLjk5NyAxMzQuODEzLDcwLjU4IDEzMy45NzcsNzAuNTggQzEzMi45MjEsNzAuNTggMTMxLjY3Niw3MS4yNTIgMTMwLjU2Miw3Mi40MjQgQzEyOS41NCw3My41MDEgMTI4LjcxMSw3NC45MzEgMTI4LjI4Nyw3Ni4zNDggTDEyMS44MjcsOTcuOTc2IEMxMjEuODEsOTguMDM0IDEyMS43NzEsOTguMDgyIDEyMS43Miw5OC4xMTIgTDk0LjM5OCwxMTMuODg2IEM5NC4zNjIsMTEzLjkwNyA5NC4zMjIsMTEzLjkxNyA5NC4yODIsMTEzLjkxNyBMOTQuMjgyLDExMy45MTcgWiBNOTQuNTE1LDYyLjk0OCBMOTQuNTE1LDExMy4yNzkgTDEyMS40MDYsOTcuNzU0IEwxMjcuODQsNzYuMjE1IEMxMjguMjksNzQuNzA4IDEyOS4xMzcsNzMuMjQ3IDEzMC4yMjQsNzIuMTAzIEMxMzEuNDI1LDcwLjgzOCAxMzIuNzkzLDcwLjExMiAxMzMuOTc3LDcwLjExMiBDMTM0Ljk5NSw3MC4xMTIgMTM1Ljc5NSw3MC42MzggMTM2LjIzLDcxLjU5MiBMMTQyLjU4NCw4NS41MjYgTDE2OS41NjYsNjkuOTQ4IEwxNjkuNTY2LDE5LjYxNyBMOTQuNTE1LDYyLjk0OCBMOTQuNTE1LDYyLjk0OCBaIiBpZD0iRmlsbC0xOCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMDkuODk0LDkyLjk0MyBMMTA5Ljg5NCw5Mi45NDMgQzEwOC4xMiw5Mi45NDMgMTA2LjY1Myw5Mi4yMTggMTA1LjY1LDkwLjgyMyBDMTA1LjU4Myw5MC43MzEgMTA1LjU5Myw5MC42MSAxMDUuNjczLDkwLjUyOSBDMTA1Ljc1Myw5MC40NDggMTA1Ljg4LDkwLjQ0IDEwNS45NzQsOTAuNTA2IEMxMDYuNzU0LDkxLjA1MyAxMDcuNjc5LDkxLjMzMyAxMDguNzI0LDkxLjMzMyBDMTEwLjA0Nyw5MS4zMzMgMTExLjQ3OCw5MC44OTQgMTEyLjk4LDkwLjAyNyBDMTE4LjI5MSw4Ni45NiAxMjIuNjExLDc5LjUwOSAxMjIuNjExLDczLjQxNiBDMTIyLjYxMSw3MS40ODkgMTIyLjE2OSw2OS44NTYgMTIxLjMzMyw2OC42OTIgQzEyMS4yNjYsNjguNiAxMjEuMjc2LDY4LjQ3MyAxMjEuMzU2LDY4LjM5MiBDMTIxLjQzNiw2OC4zMTEgMTIxLjU2Myw2OC4yOTkgMTIxLjY1Niw2OC4zNjUgQzEyMy4zMjcsNjkuNTM3IDEyNC4yNDcsNzEuNzQ2IDEyNC4yNDcsNzQuNTg0IEMxMjQuMjQ3LDgwLjgyNiAxMTkuODIxLDg4LjQ0NyAxMTQuMzgyLDkxLjU4NyBDMTEyLjgwOCw5Mi40OTUgMTExLjI5OCw5Mi45NDMgMTA5Ljg5NCw5Mi45NDMgTDEwOS44OTQsOTIuOTQzIFogTTEwNi45MjUsOTEuNDAxIEMxMDcuNzM4LDkyLjA1MiAxMDguNzQ1LDkyLjI3OCAxMDkuODkzLDkyLjI3OCBMMTA5Ljg5NCw5Mi4yNzggQzExMS4yMTUsOTIuMjc4IDExMi42NDcsOTEuOTUxIDExNC4xNDgsOTEuMDg0IEMxMTkuNDU5LDg4LjAxNyAxMjMuNzgsODAuNjIxIDEyMy43OCw3NC41MjggQzEyMy43OCw3Mi41NDkgMTIzLjMxNyw3MC45MjkgMTIyLjQ1NCw2OS43NjcgQzEyMi44NjUsNzAuODAyIDEyMy4wNzksNzIuMDQyIDEyMy4wNzksNzMuNDAyIEMxMjMuMDc5LDc5LjY0NSAxMTguNjUzLDg3LjI4NSAxMTMuMjE0LDkwLjQyNSBDMTExLjY0LDkxLjMzNCAxMTAuMTMsOTEuNzQyIDEwOC43MjQsOTEuNzQyIEMxMDguMDgzLDkxLjc0MiAxMDcuNDgxLDkxLjU5MyAxMDYuOTI1LDkxLjQwMSBMMTA2LjkyNSw5MS40MDEgWiIgaWQ9IkZpbGwtMTkiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEzLjA5Nyw5MC4yMyBDMTE4LjQ4MSw4Ny4xMjIgMTIyLjg0NSw3OS41OTQgMTIyLjg0NSw3My40MTYgQzEyMi44NDUsNzEuMzY1IDEyMi4zNjIsNjkuNzI0IDEyMS41MjIsNjguNTU2IEMxMTkuNzM4LDY3LjMwNCAxMTcuMTQ4LDY3LjM2MiAxMTQuMjY1LDY5LjAyNiBDMTA4Ljg4MSw3Mi4xMzQgMTA0LjUxNyw3OS42NjIgMTA0LjUxNyw4NS44NCBDMTA0LjUxNyw4Ny44OTEgMTA1LDg5LjUzMiAxMDUuODQsOTAuNyBDMTA3LjYyNCw5MS45NTIgMTEwLjIxNCw5MS44OTQgMTEzLjA5Nyw5MC4yMyIgaWQ9IkZpbGwtMjAiIGZpbGw9IiNGQUZBRkEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTA4LjcyNCw5MS42MTQgTDEwOC43MjQsOTEuNjE0IEMxMDcuNTgyLDkxLjYxNCAxMDYuNTY2LDkxLjQwMSAxMDUuNzA1LDkwLjc5NyBDMTA1LjY4NCw5MC43ODMgMTA1LjY2NSw5MC44MTEgMTA1LjY1LDkwLjc5IEMxMDQuNzU2LDg5LjU0NiAxMDQuMjgzLDg3Ljg0MiAxMDQuMjgzLDg1LjgxNyBDMTA0LjI4Myw3OS41NzUgMTA4LjcwOSw3MS45NTMgMTE0LjE0OCw2OC44MTIgQzExNS43MjIsNjcuOTA0IDExNy4yMzIsNjcuNDQ5IDExOC42MzgsNjcuNDQ5IEMxMTkuNzgsNjcuNDQ5IDEyMC43OTYsNjcuNzU4IDEyMS42NTYsNjguMzYyIEMxMjEuNjc4LDY4LjM3NyAxMjEuNjk3LDY4LjM5NyAxMjEuNzEyLDY4LjQxOCBDMTIyLjYwNiw2OS42NjIgMTIzLjA3OSw3MS4zOSAxMjMuMDc5LDczLjQxNSBDMTIzLjA3OSw3OS42NTggMTE4LjY1Myw4Ny4xOTggMTEzLjIxNCw5MC4zMzggQzExMS42NCw5MS4yNDcgMTEwLjEzLDkxLjYxNCAxMDguNzI0LDkxLjYxNCBMMTA4LjcyNCw5MS42MTQgWiBNMTA2LjAwNiw5MC41MDUgQzEwNi43OCw5MS4wMzcgMTA3LjY5NCw5MS4yODEgMTA4LjcyNCw5MS4yODEgQzExMC4wNDcsOTEuMjgxIDExMS40NzgsOTAuODY4IDExMi45OCw5MC4wMDEgQzExOC4yOTEsODYuOTM1IDEyMi42MTEsNzkuNDk2IDEyMi42MTEsNzMuNDAzIEMxMjIuNjExLDcxLjQ5NCAxMjIuMTc3LDY5Ljg4IDEyMS4zNTYsNjguNzE4IEMxMjAuNTgyLDY4LjE4NSAxMTkuNjY4LDY3LjkxOSAxMTguNjM4LDY3LjkxOSBDMTE3LjMxNSw2Ny45MTkgMTE1Ljg4Myw2OC4zNiAxMTQuMzgyLDY5LjIyNyBDMTA5LjA3MSw3Mi4yOTMgMTA0Ljc1MSw3OS43MzMgMTA0Ljc1MSw4NS44MjYgQzEwNC43NTEsODcuNzM1IDEwNS4xODUsODkuMzQzIDEwNi4wMDYsOTAuNTA1IEwxMDYuMDA2LDkwLjUwNSBaIiBpZD0iRmlsbC0yMSIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNDkuMzE4LDcuMjYyIEwxMzkuMzM0LDE2LjE0IEwxNTUuMjI3LDI3LjE3MSBMMTYwLjgxNiwyMS4wNTkgTDE0OS4zMTgsNy4yNjIiIGlkPSJGaWxsLTIyIiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2OS42NzYsMTMuODQgTDE1OS45MjgsMTkuNDY3IEMxNTYuMjg2LDIxLjU3IDE1MC40LDIxLjU4IDE0Ni43ODEsMTkuNDkxIEMxNDMuMTYxLDE3LjQwMiAxNDMuMTgsMTQuMDAzIDE0Ni44MjIsMTEuOSBMMTU2LjMxNyw2LjI5MiBMMTQ5LjU4OCwyLjQwNyBMNjcuNzUyLDQ5LjQ3OCBMMTEzLjY3NSw3NS45OTIgTDExNi43NTYsNzQuMjEzIEMxMTcuMzg3LDczLjg0OCAxMTcuNjI1LDczLjMxNSAxMTcuMzc0LDcyLjgyMyBDMTE1LjAxNyw2OC4xOTEgMTE0Ljc4MSw2My4yNzcgMTE2LjY5MSw1OC41NjEgQzEyMi4zMjksNDQuNjQxIDE0MS4yLDMzLjc0NiAxNjUuMzA5LDMwLjQ5MSBDMTczLjQ3OCwyOS4zODggMTgxLjk4OSwyOS41MjQgMTkwLjAxMywzMC44ODUgQzE5MC44NjUsMzEuMDMgMTkxLjc4OSwzMC44OTMgMTkyLjQyLDMwLjUyOCBMMTk1LjUwMSwyOC43NSBMMTY5LjY3NiwxMy44NCIgaWQ9IkZpbGwtMjMiIGZpbGw9IiNGQUZBRkEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEzLjY3NSw3Ni40NTkgQzExMy41OTQsNzYuNDU5IDExMy41MTQsNzYuNDM4IDExMy40NDIsNzYuMzk3IEw2Ny41MTgsNDkuODgyIEM2Ny4zNzQsNDkuNzk5IDY3LjI4NCw0OS42NDUgNjcuMjg1LDQ5LjQ3OCBDNjcuMjg1LDQ5LjMxMSA2Ny4zNzQsNDkuMTU3IDY3LjUxOSw0OS4wNzMgTDE0OS4zNTUsMi4wMDIgQzE0OS40OTksMS45MTkgMTQ5LjY3NywxLjkxOSAxNDkuODIxLDIuMDAyIEwxNTYuNTUsNS44ODcgQzE1Ni43NzQsNi4wMTcgMTU2Ljg1LDYuMzAyIDE1Ni43MjIsNi41MjYgQzE1Ni41OTIsNi43NDkgMTU2LjMwNyw2LjgyNiAxNTYuMDgzLDYuNjk2IEwxNDkuNTg3LDIuOTQ2IEw2OC42ODcsNDkuNDc5IEwxMTMuNjc1LDc1LjQ1MiBMMTE2LjUyMyw3My44MDggQzExNi43MTUsNzMuNjk3IDExNy4xNDMsNzMuMzk5IDExNi45NTgsNzMuMDM1IEMxMTQuNTQyLDY4LjI4NyAxMTQuMyw2My4yMjEgMTE2LjI1OCw1OC4zODUgQzExOS4wNjQsNTEuNDU4IDEyNS4xNDMsNDUuMTQzIDEzMy44NCw0MC4xMjIgQzE0Mi40OTcsMzUuMTI0IDE1My4zNTgsMzEuNjMzIDE2NS4yNDcsMzAuMDI4IEMxNzMuNDQ1LDI4LjkyMSAxODIuMDM3LDI5LjA1OCAxOTAuMDkxLDMwLjQyNSBDMTkwLjgzLDMwLjU1IDE5MS42NTIsMzAuNDMyIDE5Mi4xODYsMzAuMTI0IEwxOTQuNTY3LDI4Ljc1IEwxNjkuNDQyLDE0LjI0NCBDMTY5LjIxOSwxNC4xMTUgMTY5LjE0MiwxMy44MjkgMTY5LjI3MSwxMy42MDYgQzE2OS40LDEzLjM4MiAxNjkuNjg1LDEzLjMwNiAxNjkuOTA5LDEzLjQzNSBMMTk1LjczNCwyOC4zNDUgQzE5NS44NzksMjguNDI4IDE5NS45NjgsMjguNTgzIDE5NS45NjgsMjguNzUgQzE5NS45NjgsMjguOTE2IDE5NS44NzksMjkuMDcxIDE5NS43MzQsMjkuMTU0IEwxOTIuNjUzLDMwLjkzMyBDMTkxLjkzMiwzMS4zNSAxOTAuODksMzEuNTA4IDE4OS45MzUsMzEuMzQ2IEMxODEuOTcyLDI5Ljk5NSAxNzMuNDc4LDI5Ljg2IDE2NS4zNzIsMzAuOTU0IEMxNTMuNjAyLDMyLjU0MyAxNDIuODYsMzUuOTkzIDEzNC4zMDcsNDAuOTMxIEMxMjUuNzkzLDQ1Ljg0NyAxMTkuODUxLDUyLjAwNCAxMTcuMTI0LDU4LjczNiBDMTE1LjI3LDYzLjMxNCAxMTUuNTAxLDY4LjExMiAxMTcuNzksNzIuNjExIEMxMTguMTYsNzMuMzM2IDExNy44NDUsNzQuMTI0IDExNi45OSw3NC42MTcgTDExMy45MDksNzYuMzk3IEMxMTMuODM2LDc2LjQzOCAxMTMuNzU2LDc2LjQ1OSAxMTMuNjc1LDc2LjQ1OSIgaWQ9IkZpbGwtMjQiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTUzLjMxNiwyMS4yNzkgQzE1MC45MDMsMjEuMjc5IDE0OC40OTUsMjAuNzUxIDE0Ni42NjQsMTkuNjkzIEMxNDQuODQ2LDE4LjY0NCAxNDMuODQ0LDE3LjIzMiAxNDMuODQ0LDE1LjcxOCBDMTQzLjg0NCwxNC4xOTEgMTQ0Ljg2LDEyLjc2MyAxNDYuNzA1LDExLjY5OCBMMTU2LjE5OCw2LjA5MSBDMTU2LjMwOSw2LjAyNSAxNTYuNDUyLDYuMDYyIDE1Ni41MTgsNi4xNzMgQzE1Ni41ODMsNi4yODQgMTU2LjU0Nyw2LjQyNyAxNTYuNDM2LDYuNDkzIEwxNDYuOTQsMTIuMTAyIEMxNDUuMjQ0LDEzLjA4MSAxNDQuMzEyLDE0LjM2NSAxNDQuMzEyLDE1LjcxOCBDMTQ0LjMxMiwxNy4wNTggMTQ1LjIzLDE4LjMyNiAxNDYuODk3LDE5LjI4OSBDMTUwLjQ0NiwyMS4zMzggMTU2LjI0LDIxLjMyNyAxNTkuODExLDE5LjI2NSBMMTY5LjU1OSwxMy42MzcgQzE2OS42NywxMy41NzMgMTY5LjgxMywxMy42MTEgMTY5Ljg3OCwxMy43MjMgQzE2OS45NDMsMTMuODM0IDE2OS45MDQsMTMuOTc3IDE2OS43OTMsMTQuMDQyIEwxNjAuMDQ1LDE5LjY3IEMxNTguMTg3LDIwLjc0MiAxNTUuNzQ5LDIxLjI3OSAxNTMuMzE2LDIxLjI3OSIgaWQ9IkZpbGwtMjUiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEzLjY3NSw3NS45OTIgTDY3Ljc2Miw0OS40ODQiIGlkPSJGaWxsLTI2IiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTExMy42NzUsNzYuMzQyIEMxMTMuNjE1LDc2LjM0MiAxMTMuNTU1LDc2LjMyNyAxMTMuNSw3Ni4yOTUgTDY3LjU4Nyw0OS43ODcgQzY3LjQxOSw0OS42OSA2Ny4zNjIsNDkuNDc2IDY3LjQ1OSw0OS4zMDkgQzY3LjU1Niw0OS4xNDEgNjcuNzcsNDkuMDgzIDY3LjkzNyw0OS4xOCBMMTEzLjg1LDc1LjY4OCBDMTE0LjAxOCw3NS43ODUgMTE0LjA3NSw3NiAxMTMuOTc4LDc2LjE2NyBDMTEzLjkxNCw3Ni4yNzkgMTEzLjc5Niw3Ni4zNDIgMTEzLjY3NSw3Ni4zNDIiIGlkPSJGaWxsLTI3IiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTY3Ljc2Miw0OS40ODQgTDY3Ljc2MiwxMDMuNDg1IEM2Ny43NjIsMTA0LjU3NSA2OC41MzIsMTA1LjkwMyA2OS40ODIsMTA2LjQ1MiBMMTExLjk1NSwxMzAuOTczIEMxMTIuOTA1LDEzMS41MjIgMTEzLjY3NSwxMzEuMDgzIDExMy42NzUsMTI5Ljk5MyBMMTEzLjY3NSw3NS45OTIiIGlkPSJGaWxsLTI4IiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTExMi43MjcsMTMxLjU2MSBDMTEyLjQzLDEzMS41NjEgMTEyLjEwNywxMzEuNDY2IDExMS43OCwxMzEuMjc2IEw2OS4zMDcsMTA2Ljc1NSBDNjguMjQ0LDEwNi4xNDIgNjcuNDEyLDEwNC43MDUgNjcuNDEyLDEwMy40ODUgTDY3LjQxMiw0OS40ODQgQzY3LjQxMiw0OS4yOSA2Ny41NjksNDkuMTM0IDY3Ljc2Miw0OS4xMzQgQzY3Ljk1Niw0OS4xMzQgNjguMTEzLDQ5LjI5IDY4LjExMyw0OS40ODQgTDY4LjExMywxMDMuNDg1IEM2OC4xMTMsMTA0LjQ0NSA2OC44MiwxMDUuNjY1IDY5LjY1NywxMDYuMTQ4IEwxMTIuMTMsMTMwLjY3IEMxMTIuNDc0LDEzMC44NjggMTEyLjc5MSwxMzAuOTEzIDExMywxMzAuNzkyIEMxMTMuMjA2LDEzMC42NzMgMTEzLjMyNSwxMzAuMzgxIDExMy4zMjUsMTI5Ljk5MyBMMTEzLjMyNSw3NS45OTIgQzExMy4zMjUsNzUuNzk4IDExMy40ODIsNzUuNjQxIDExMy42NzUsNzUuNjQxIEMxMTMuODY5LDc1LjY0MSAxMTQuMDI1LDc1Ljc5OCAxMTQuMDI1LDc1Ljk5MiBMMTE0LjAyNSwxMjkuOTkzIEMxMTQuMDI1LDEzMC42NDggMTEzLjc4NiwxMzEuMTQ3IDExMy4zNSwxMzEuMzk5IEMxMTMuMTYyLDEzMS41MDcgMTEyLjk1MiwxMzEuNTYxIDExMi43MjcsMTMxLjU2MSIgaWQ9IkZpbGwtMjkiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEyLjg2LDQwLjUxMiBDMTEyLjg2LDQwLjUxMiAxMTIuODYsNDAuNTEyIDExMi44NTksNDAuNTEyIEMxMTAuNTQxLDQwLjUxMiAxMDguMzYsMzkuOTkgMTA2LjcxNywzOS4wNDEgQzEwNS4wMTIsMzguMDU3IDEwNC4wNzQsMzYuNzI2IDEwNC4wNzQsMzUuMjkyIEMxMDQuMDc0LDMzLjg0NyAxMDUuMDI2LDMyLjUwMSAxMDYuNzU0LDMxLjUwNCBMMTE4Ljc5NSwyNC41NTEgQzEyMC40NjMsMjMuNTg5IDEyMi42NjksMjMuMDU4IDEyNS4wMDcsMjMuMDU4IEMxMjcuMzI1LDIzLjA1OCAxMjkuNTA2LDIzLjU4MSAxMzEuMTUsMjQuNTMgQzEzMi44NTQsMjUuNTE0IDEzMy43OTMsMjYuODQ1IDEzMy43OTMsMjguMjc4IEMxMzMuNzkzLDI5LjcyNCAxMzIuODQxLDMxLjA2OSAxMzEuMTEzLDMyLjA2NyBMMTE5LjA3MSwzOS4wMTkgQzExNy40MDMsMzkuOTgyIDExNS4xOTcsNDAuNTEyIDExMi44Niw0MC41MTIgTDExMi44Niw0MC41MTIgWiBNMTI1LjAwNywyMy43NTkgQzEyMi43OSwyMy43NTkgMTIwLjcwOSwyNC4yNTYgMTE5LjE0NiwyNS4xNTggTDEwNy4xMDQsMzIuMTEgQzEwNS42MDIsMzIuOTc4IDEwNC43NzQsMzQuMTA4IDEwNC43NzQsMzUuMjkyIEMxMDQuNzc0LDM2LjQ2NSAxMDUuNTg5LDM3LjU4MSAxMDcuMDY3LDM4LjQzNCBDMTA4LjYwNSwzOS4zMjMgMTEwLjY2MywzOS44MTIgMTEyLjg1OSwzOS44MTIgTDExMi44NiwzOS44MTIgQzExNS4wNzYsMzkuODEyIDExNy4xNTgsMzkuMzE1IDExOC43MjEsMzguNDEzIEwxMzAuNzYyLDMxLjQ2IEMxMzIuMjY0LDMwLjU5MyAxMzMuMDkyLDI5LjQ2MyAxMzMuMDkyLDI4LjI3OCBDMTMzLjA5MiwyNy4xMDYgMTMyLjI3OCwyNS45OSAxMzAuOCwyNS4xMzYgQzEyOS4yNjEsMjQuMjQ4IDEyNy4yMDQsMjMuNzU5IDEyNS4wMDcsMjMuNzU5IEwxMjUuMDA3LDIzLjc1OSBaIiBpZD0iRmlsbC0zMCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNjUuNjMsMTYuMjE5IEwxNTkuODk2LDE5LjUzIEMxNTYuNzI5LDIxLjM1OCAxNTEuNjEsMjEuMzY3IDE0OC40NjMsMTkuNTUgQzE0NS4zMTYsMTcuNzMzIDE0NS4zMzIsMTQuNzc4IDE0OC40OTksMTIuOTQ5IEwxNTQuMjMzLDkuNjM5IEwxNjUuNjMsMTYuMjE5IiBpZD0iRmlsbC0zMSIgZmlsbD0iI0ZBRkFGQSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNTQuMjMzLDEwLjQ0OCBMMTY0LjIyOCwxNi4yMTkgTDE1OS41NDYsMTguOTIzIEMxNTguMTEyLDE5Ljc1IDE1Ni4xOTQsMjAuMjA2IDE1NC4xNDcsMjAuMjA2IEMxNTIuMTE4LDIwLjIwNiAxNTAuMjI0LDE5Ljc1NyAxNDguODE0LDE4Ljk0MyBDMTQ3LjUyNCwxOC4xOTkgMTQ2LjgxNCwxNy4yNDkgMTQ2LjgxNCwxNi4yNjkgQzE0Ni44MTQsMTUuMjc4IDE0Ny41MzcsMTQuMzE0IDE0OC44NSwxMy41NTYgTDE1NC4yMzMsMTAuNDQ4IE0xNTQuMjMzLDkuNjM5IEwxNDguNDk5LDEyLjk0OSBDMTQ1LjMzMiwxNC43NzggMTQ1LjMxNiwxNy43MzMgMTQ4LjQ2MywxOS41NSBDMTUwLjAzMSwyMC40NTUgMTUyLjA4NiwyMC45MDcgMTU0LjE0NywyMC45MDcgQzE1Ni4yMjQsMjAuOTA3IDE1OC4zMDYsMjAuNDQ3IDE1OS44OTYsMTkuNTMgTDE2NS42MywxNi4yMTkgTDE1NC4yMzMsOS42MzkiIGlkPSJGaWxsLTMyIiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE0NS40NDUsNzIuNjY3IEwxNDUuNDQ1LDcyLjY2NyBDMTQzLjY3Miw3Mi42NjcgMTQyLjIwNCw3MS44MTcgMTQxLjIwMiw3MC40MjIgQzE0MS4xMzUsNzAuMzMgMTQxLjE0NSw3MC4xNDcgMTQxLjIyNSw3MC4wNjYgQzE0MS4zMDUsNjkuOTg1IDE0MS40MzIsNjkuOTQ2IDE0MS41MjUsNzAuMDExIEMxNDIuMzA2LDcwLjU1OSAxNDMuMjMxLDcwLjgyMyAxNDQuMjc2LDcwLjgyMiBDMTQ1LjU5OCw3MC44MjIgMTQ3LjAzLDcwLjM3NiAxNDguNTMyLDY5LjUwOSBDMTUzLjg0Miw2Ni40NDMgMTU4LjE2Myw1OC45ODcgMTU4LjE2Myw1Mi44OTQgQzE1OC4xNjMsNTAuOTY3IDE1Ny43MjEsNDkuMzMyIDE1Ni44ODQsNDguMTY4IEMxNTYuODE4LDQ4LjA3NiAxNTYuODI4LDQ3Ljk0OCAxNTYuOTA4LDQ3Ljg2NyBDMTU2Ljk4OCw0Ny43ODYgMTU3LjExNCw0Ny43NzQgMTU3LjIwOCw0Ny44NCBDMTU4Ljg3OCw0OS4wMTIgMTU5Ljc5OCw1MS4yMiAxNTkuNzk4LDU0LjA1OSBDMTU5Ljc5OCw2MC4zMDEgMTU1LjM3Myw2OC4wNDYgMTQ5LjkzMyw3MS4xODYgQzE0OC4zNiw3Mi4wOTQgMTQ2Ljg1LDcyLjY2NyAxNDUuNDQ1LDcyLjY2NyBMMTQ1LjQ0NSw3Mi42NjcgWiBNMTQyLjQ3Niw3MSBDMTQzLjI5LDcxLjY1MSAxNDQuMjk2LDcyLjAwMiAxNDUuNDQ1LDcyLjAwMiBDMTQ2Ljc2Nyw3Mi4wMDIgMTQ4LjE5OCw3MS41NSAxNDkuNyw3MC42ODIgQzE1NS4wMSw2Ny42MTcgMTU5LjMzMSw2MC4xNTkgMTU5LjMzMSw1NC4wNjUgQzE1OS4zMzEsNTIuMDg1IDE1OC44NjgsNTAuNDM1IDE1OC4wMDYsNDkuMjcyIEMxNTguNDE3LDUwLjMwNyAxNTguNjMsNTEuNTMyIDE1OC42Myw1Mi44OTIgQzE1OC42Myw1OS4xMzQgMTU0LjIwNSw2Ni43NjcgMTQ4Ljc2NSw2OS45MDcgQzE0Ny4xOTIsNzAuODE2IDE0NS42ODEsNzEuMjgzIDE0NC4yNzYsNzEuMjgzIEMxNDMuNjM0LDcxLjI4MyAxNDMuMDMzLDcxLjE5MiAxNDIuNDc2LDcxIEwxNDIuNDc2LDcxIFoiIGlkPSJGaWxsLTMzIiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE0OC42NDgsNjkuNzA0IEMxNTQuMDMyLDY2LjU5NiAxNTguMzk2LDU5LjA2OCAxNTguMzk2LDUyLjg5MSBDMTU4LjM5Niw1MC44MzkgMTU3LjkxMyw0OS4xOTggMTU3LjA3NCw0OC4wMyBDMTU1LjI4OSw0Ni43NzggMTUyLjY5OSw0Ni44MzYgMTQ5LjgxNiw0OC41MDEgQzE0NC40MzMsNTEuNjA5IDE0MC4wNjgsNTkuMTM3IDE0MC4wNjgsNjUuMzE0IEMxNDAuMDY4LDY3LjM2NSAxNDAuNTUyLDY5LjAwNiAxNDEuMzkxLDcwLjE3NCBDMTQzLjE3Niw3MS40MjcgMTQ1Ljc2NSw3MS4zNjkgMTQ4LjY0OCw2OS43MDQiIGlkPSJGaWxsLTM0IiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE0NC4yNzYsNzEuMjc2IEwxNDQuMjc2LDcxLjI3NiBDMTQzLjEzMyw3MS4yNzYgMTQyLjExOCw3MC45NjkgMTQxLjI1Nyw3MC4zNjUgQzE0MS4yMzYsNzAuMzUxIDE0MS4yMTcsNzAuMzMyIDE0MS4yMDIsNzAuMzExIEMxNDAuMzA3LDY5LjA2NyAxMzkuODM1LDY3LjMzOSAxMzkuODM1LDY1LjMxNCBDMTM5LjgzNSw1OS4wNzMgMTQ0LjI2LDUxLjQzOSAxNDkuNyw0OC4yOTggQzE1MS4yNzMsNDcuMzkgMTUyLjc4NCw0Ni45MjkgMTU0LjE4OSw0Ni45MjkgQzE1NS4zMzIsNDYuOTI5IDE1Ni4zNDcsNDcuMjM2IDE1Ny4yMDgsNDcuODM5IEMxNTcuMjI5LDQ3Ljg1NCAxNTcuMjQ4LDQ3Ljg3MyAxNTcuMjYzLDQ3Ljg5NCBDMTU4LjE1Nyw0OS4xMzggMTU4LjYzLDUwLjg2NSAxNTguNjMsNTIuODkxIEMxNTguNjMsNTkuMTMyIDE1NC4yMDUsNjYuNzY2IDE0OC43NjUsNjkuOTA3IEMxNDcuMTkyLDcwLjgxNSAxNDUuNjgxLDcxLjI3NiAxNDQuMjc2LDcxLjI3NiBMMTQ0LjI3Niw3MS4yNzYgWiBNMTQxLjU1OCw3MC4xMDQgQzE0Mi4zMzEsNzAuNjM3IDE0My4yNDUsNzEuMDA1IDE0NC4yNzYsNzEuMDA1IEMxNDUuNTk4LDcxLjAwNSAxNDcuMDMsNzAuNDY3IDE0OC41MzIsNjkuNiBDMTUzLjg0Miw2Ni41MzQgMTU4LjE2Myw1OS4wMzMgMTU4LjE2Myw1Mi45MzkgQzE1OC4xNjMsNTEuMDMxIDE1Ny43MjksNDkuMzg1IDE1Ni45MDcsNDguMjIzIEMxNTYuMTMzLDQ3LjY5MSAxNTUuMjE5LDQ3LjQwOSAxNTQuMTg5LDQ3LjQwOSBDMTUyLjg2Nyw0Ny40MDkgMTUxLjQzNSw0Ny44NDIgMTQ5LjkzMyw0OC43MDkgQzE0NC42MjMsNTEuNzc1IDE0MC4zMDIsNTkuMjczIDE0MC4zMDIsNjUuMzY2IEMxNDAuMzAyLDY3LjI3NiAxNDAuNzM2LDY4Ljk0MiAxNDEuNTU4LDcwLjEwNCBMMTQxLjU1OCw3MC4xMDQgWiIgaWQ9IkZpbGwtMzUiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTUwLjcyLDY1LjM2MSBMMTUwLjM1Nyw2NS4wNjYgQzE1MS4xNDcsNjQuMDkyIDE1MS44NjksNjMuMDQgMTUyLjUwNSw2MS45MzggQzE1My4zMTMsNjAuNTM5IDE1My45NzgsNTkuMDY3IDE1NC40ODIsNTcuNTYzIEwxNTQuOTI1LDU3LjcxMiBDMTU0LjQxMiw1OS4yNDUgMTUzLjczMyw2MC43NDUgMTUyLjkxLDYyLjE3MiBDMTUyLjI2Miw2My4yOTUgMTUxLjUyNSw2NC4zNjggMTUwLjcyLDY1LjM2MSIgaWQ9IkZpbGwtMzYiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTE1LjkxNyw4NC41MTQgTDExNS41NTQsODQuMjIgQzExNi4zNDQsODMuMjQ1IDExNy4wNjYsODIuMTk0IDExNy43MDIsODEuMDkyIEMxMTguNTEsNzkuNjkyIDExOS4xNzUsNzguMjIgMTE5LjY3OCw3Ni43MTcgTDEyMC4xMjEsNzYuODY1IEMxMTkuNjA4LDc4LjM5OCAxMTguOTMsNzkuODk5IDExOC4xMDYsODEuMzI2IEMxMTcuNDU4LDgyLjQ0OCAxMTYuNzIyLDgzLjUyMSAxMTUuOTE3LDg0LjUxNCIgaWQ9IkZpbGwtMzciIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTE0LDEzMC40NzYgTDExNCwxMzAuMDA4IEwxMTQsNzYuMDUyIEwxMTQsNzUuNTg0IEwxMTQsNzYuMDUyIEwxMTQsMTMwLjAwOCBMMTE0LDEzMC40NzYiIGlkPSJGaWxsLTM4IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICA8ZyBpZD0iSW1wb3J0ZWQtTGF5ZXJzLUNvcHkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYyLjAwMDAwMCwgMC4wMDAwMDApIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTkuODIyLDM3LjQ3NCBDMTkuODM5LDM3LjMzOSAxOS43NDcsMzcuMTk0IDE5LjU1NSwzNy4wODIgQzE5LjIyOCwzNi44OTQgMTguNzI5LDM2Ljg3MiAxOC40NDYsMzcuMDM3IEwxMi40MzQsNDAuNTA4IEMxMi4zMDMsNDAuNTg0IDEyLjI0LDQwLjY4NiAxMi4yNDMsNDAuNzkzIEMxMi4yNDUsNDAuOTI1IDEyLjI0NSw0MS4yNTQgMTIuMjQ1LDQxLjM3MSBMMTIuMjQ1LDQxLjQxNCBMMTIuMjM4LDQxLjU0MiBDOC4xNDgsNDMuODg3IDUuNjQ3LDQ1LjMyMSA1LjY0Nyw0NS4zMjEgQzUuNjQ2LDQ1LjMyMSAzLjU3LDQ2LjM2NyAyLjg2LDUwLjUxMyBDMi44Niw1MC41MTMgMS45NDgsNTcuNDc0IDEuOTYyLDcwLjI1OCBDMS45NzcsODIuODI4IDIuNTY4LDg3LjMyOCAzLjEyOSw5MS42MDkgQzMuMzQ5LDkzLjI5MyA2LjEzLDkzLjczNCA2LjEzLDkzLjczNCBDNi40NjEsOTMuNzc0IDYuODI4LDkzLjcwNyA3LjIxLDkzLjQ4NiBMODIuNDgzLDQ5LjkzNSBDODQuMjkxLDQ4Ljg2NiA4NS4xNSw0Ni4yMTYgODUuNTM5LDQzLjY1MSBDODYuNzUyLDM1LjY2MSA4Ny4yMTQsMTAuNjczIDg1LjI2NCwzLjc3MyBDODUuMDY4LDMuMDggODQuNzU0LDIuNjkgODQuMzk2LDIuNDkxIEw4Mi4zMSwxLjcwMSBDODEuNTgzLDEuNzI5IDgwLjg5NCwyLjE2OCA4MC43NzYsMi4yMzYgQzgwLjYzNiwyLjMxNyA0MS44MDcsMjQuNTg1IDIwLjAzMiwzNy4wNzIgTDE5LjgyMiwzNy40NzQiIGlkPSJGaWxsLTEiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNODIuMzExLDEuNzAxIEw4NC4zOTYsMi40OTEgQzg0Ljc1NCwyLjY5IDg1LjA2OCwzLjA4IDg1LjI2NCwzLjc3MyBDODcuMjEzLDEwLjY3MyA4Ni43NTEsMzUuNjYgODUuNTM5LDQzLjY1MSBDODUuMTQ5LDQ2LjIxNiA4NC4yOSw0OC44NjYgODIuNDgzLDQ5LjkzNSBMNy4yMSw5My40ODYgQzYuODk3LDkzLjY2NyA2LjU5NSw5My43NDQgNi4zMTQsOTMuNzQ0IEw2LjEzMSw5My43MzMgQzYuMTMxLDkzLjczNCAzLjM0OSw5My4yOTMgMy4xMjgsOTEuNjA5IEMyLjU2OCw4Ny4zMjcgMS45NzcsODIuODI4IDEuOTYzLDcwLjI1OCBDMS45NDgsNTcuNDc0IDIuODYsNTAuNTEzIDIuODYsNTAuNTEzIEMzLjU3LDQ2LjM2NyA1LjY0Nyw0NS4zMjEgNS42NDcsNDUuMzIxIEM1LjY0Nyw0NS4zMjEgOC4xNDgsNDMuODg3IDEyLjIzOCw0MS41NDIgTDEyLjI0NSw0MS40MTQgTDEyLjI0NSw0MS4zNzEgQzEyLjI0NSw0MS4yNTQgMTIuMjQ1LDQwLjkyNSAxMi4yNDMsNDAuNzkzIEMxMi4yNCw0MC42ODYgMTIuMzAyLDQwLjU4MyAxMi40MzQsNDAuNTA4IEwxOC40NDYsMzcuMDM2IEMxOC41NzQsMzYuOTYyIDE4Ljc0NiwzNi45MjYgMTguOTI3LDM2LjkyNiBDMTkuMTQ1LDM2LjkyNiAxOS4zNzYsMzYuOTc5IDE5LjU1NCwzNy4wODIgQzE5Ljc0NywzNy4xOTQgMTkuODM5LDM3LjM0IDE5LjgyMiwzNy40NzQgTDIwLjAzMywzNy4wNzIgQzQxLjgwNiwyNC41ODUgODAuNjM2LDIuMzE4IDgwLjc3NywyLjIzNiBDODAuODk0LDIuMTY4IDgxLjU4MywxLjcyOSA4Mi4zMTEsMS43MDEgTTgyLjMxMSwwLjcwNCBMODIuMjcyLDAuNzA1IEM4MS42NTQsMC43MjggODAuOTg5LDAuOTQ5IDgwLjI5OCwxLjM2MSBMODAuMjc3LDEuMzczIEM4MC4xMjksMS40NTggNTkuNzY4LDEzLjEzNSAxOS43NTgsMzYuMDc5IEMxOS41LDM1Ljk4MSAxOS4yMTQsMzUuOTI5IDE4LjkyNywzNS45MjkgQzE4LjU2MiwzNS45MjkgMTguMjIzLDM2LjAxMyAxNy45NDcsMzYuMTczIEwxMS45MzUsMzkuNjQ0IEMxMS40OTMsMzkuODk5IDExLjIzNiw0MC4zMzQgMTEuMjQ2LDQwLjgxIEwxMS4yNDcsNDAuOTYgTDUuMTY3LDQ0LjQ0NyBDNC43OTQsNDQuNjQ2IDIuNjI1LDQ1Ljk3OCAxLjg3Nyw1MC4zNDUgTDEuODcxLDUwLjM4NCBDMS44NjIsNTAuNDU0IDAuOTUxLDU3LjU1NyAwLjk2NSw3MC4yNTkgQzAuOTc5LDgyLjg3OSAxLjU2OCw4Ny4zNzUgMi4xMzcsOTEuNzI0IEwyLjEzOSw5MS43MzkgQzIuNDQ3LDk0LjA5NCA1LjYxNCw5NC42NjIgNS45NzUsOTQuNzE5IEw2LjAwOSw5NC43MjMgQzYuMTEsOTQuNzM2IDYuMjEzLDk0Ljc0MiA2LjMxNCw5NC43NDIgQzYuNzksOTQuNzQyIDcuMjYsOTQuNjEgNy43MSw5NC4zNSBMODIuOTgzLDUwLjc5OCBDODQuNzk0LDQ5LjcyNyA4NS45ODIsNDcuMzc1IDg2LjUyNSw0My44MDEgQzg3LjcxMSwzNS45ODcgODguMjU5LDEwLjcwNSA4Ni4yMjQsMy41MDIgQzg1Ljk3MSwyLjYwOSA4NS41MiwxLjk3NSA4NC44ODEsMS42MiBMODQuNzQ5LDEuNTU4IEw4Mi42NjQsMC43NjkgQzgyLjU1MSwwLjcyNSA4Mi40MzEsMC43MDQgODIuMzExLDAuNzA0IiBpZD0iRmlsbC0yIiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTY2LjI2NywxMS41NjUgTDY3Ljc2MiwxMS45OTkgTDExLjQyMyw0NC4zMjUiIGlkPSJGaWxsLTMiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTIuMjAyLDkwLjU0NSBDMTIuMDI5LDkwLjU0NSAxMS44NjIsOTAuNDU1IDExLjc2OSw5MC4yOTUgQzExLjYzMiw5MC4wNTcgMTEuNzEzLDg5Ljc1MiAxMS45NTIsODkuNjE0IEwzMC4zODksNzguOTY5IEMzMC42MjgsNzguODMxIDMwLjkzMyw3OC45MTMgMzEuMDcxLDc5LjE1MiBDMzEuMjA4LDc5LjM5IDMxLjEyNyw3OS42OTYgMzAuODg4LDc5LjgzMyBMMTIuNDUxLDkwLjQ3OCBMMTIuMjAyLDkwLjU0NSIgaWQ9IkZpbGwtNCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43NjQsNDIuNjU0IEwxMy42NTYsNDIuNTkyIEwxMy43MDIsNDIuNDIxIEwxOC44MzcsMzkuNDU3IEwxOS4wMDcsMzkuNTAyIEwxOC45NjIsMzkuNjczIEwxMy44MjcsNDIuNjM3IEwxMy43NjQsNDIuNjU0IiBpZD0iRmlsbC01IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTguNTIsOTAuMzc1IEw4LjUyLDQ2LjQyMSBMOC41ODMsNDYuMzg1IEw3NS44NCw3LjU1NCBMNzUuODQsNTEuNTA4IEw3NS43NzgsNTEuNTQ0IEw4LjUyLDkwLjM3NSBMOC41Miw5MC4zNzUgWiBNOC43Nyw0Ni41NjQgTDguNzcsODkuOTQ0IEw3NS41OTEsNTEuMzY1IEw3NS41OTEsNy45ODUgTDguNzcsNDYuNTY0IEw4Ljc3LDQ2LjU2NCBaIiBpZD0iRmlsbC02IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTI0Ljk4Niw4My4xODIgQzI0Ljc1Niw4My4zMzEgMjQuMzc0LDgzLjU2NiAyNC4xMzcsODMuNzA1IEwxMi42MzIsOTAuNDA2IEMxMi4zOTUsOTAuNTQ1IDEyLjQyNiw5MC42NTggMTIuNyw5MC42NTggTDEzLjI2NSw5MC42NTggQzEzLjU0LDkwLjY1OCAxMy45NTgsOTAuNTQ1IDE0LjE5NSw5MC40MDYgTDI1LjcsODMuNzA1IEMyNS45MzcsODMuNTY2IDI2LjEyOCw4My40NTIgMjYuMTI1LDgzLjQ0OSBDMjYuMTIyLDgzLjQ0NyAyNi4xMTksODMuMjIgMjYuMTE5LDgyLjk0NiBDMjYuMTE5LDgyLjY3MiAyNS45MzEsODIuNTY5IDI1LjcwMSw4Mi43MTkgTDI0Ljk4Niw4My4xODIiIGlkPSJGaWxsLTciIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjY2LDkwLjc4MiBMMTIuNyw5MC43ODIgQzEyLjUsOTAuNzgyIDEyLjM4NCw5MC43MjYgMTIuMzU0LDkwLjYxNiBDMTIuMzI0LDkwLjUwNiAxMi4zOTcsOTAuMzk5IDEyLjU2OSw5MC4yOTkgTDI0LjA3NCw4My41OTcgQzI0LjMxLDgzLjQ1OSAyNC42ODksODMuMjI2IDI0LjkxOCw4My4wNzggTDI1LjYzMyw4Mi42MTQgQzI1LjcyMyw4Mi41NTUgMjUuODEzLDgyLjUyNSAyNS44OTksODIuNTI1IEMyNi4wNzEsODIuNTI1IDI2LjI0NCw4Mi42NTUgMjYuMjQ0LDgyLjk0NiBDMjYuMjQ0LDgzLjE2IDI2LjI0NSw4My4zMDkgMjYuMjQ3LDgzLjM4MyBMMjYuMjUzLDgzLjM4NyBMMjYuMjQ5LDgzLjQ1NiBDMjYuMjQ2LDgzLjUzMSAyNi4yNDYsODMuNTMxIDI1Ljc2Myw4My44MTIgTDE0LjI1OCw5MC41MTQgQzE0LDkwLjY2NSAxMy41NjQsOTAuNzgyIDEzLjI2Niw5MC43ODIgTDEzLjI2Niw5MC43ODIgWiBNMTIuNjY2LDkwLjUzMiBMMTIuNyw5MC41MzMgTDEzLjI2Niw5MC41MzMgQzEzLjUxOCw5MC41MzMgMTMuOTE1LDkwLjQyNSAxNC4xMzIsOTAuMjk5IEwyNS42MzcsODMuNTk3IEMyNS44MDUsODMuNDk5IDI1LjkzMSw4My40MjQgMjUuOTk4LDgzLjM4MyBDMjUuOTk0LDgzLjI5OSAyNS45OTQsODMuMTY1IDI1Ljk5NCw4Mi45NDYgTDI1Ljg5OSw4Mi43NzUgTDI1Ljc2OCw4Mi44MjQgTDI1LjA1NCw4My4yODcgQzI0LjgyMiw4My40MzcgMjQuNDM4LDgzLjY3MyAyNC4yLDgzLjgxMiBMMTIuNjk1LDkwLjUxNCBMMTIuNjY2LDkwLjUzMiBMMTIuNjY2LDkwLjUzMiBaIiBpZD0iRmlsbC04IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTEzLjI2Niw4OS44NzEgTDEyLjcsODkuODcxIEMxMi41LDg5Ljg3MSAxMi4zODQsODkuODE1IDEyLjM1NCw4OS43MDUgQzEyLjMyNCw4OS41OTUgMTIuMzk3LDg5LjQ4OCAxMi41NjksODkuMzg4IEwyNC4wNzQsODIuNjg2IEMyNC4zMzIsODIuNTM1IDI0Ljc2OCw4Mi40MTggMjUuMDY3LDgyLjQxOCBMMjUuNjMyLDgyLjQxOCBDMjUuODMyLDgyLjQxOCAyNS45NDgsODIuNDc0IDI1Ljk3OCw4Mi41ODQgQzI2LjAwOCw4Mi42OTQgMjUuOTM1LDgyLjgwMSAyNS43NjMsODIuOTAxIEwxNC4yNTgsODkuNjAzIEMxNCw4OS43NTQgMTMuNTY0LDg5Ljg3MSAxMy4yNjYsODkuODcxIEwxMy4yNjYsODkuODcxIFogTTEyLjY2Niw4OS42MjEgTDEyLjcsODkuNjIyIEwxMy4yNjYsODkuNjIyIEMxMy41MTgsODkuNjIyIDEzLjkxNSw4OS41MTUgMTQuMTMyLDg5LjM4OCBMMjUuNjM3LDgyLjY4NiBMMjUuNjY3LDgyLjY2OCBMMjUuNjMyLDgyLjY2NyBMMjUuMDY3LDgyLjY2NyBDMjQuODE1LDgyLjY2NyAyNC40MTgsODIuNzc1IDI0LjIsODIuOTAxIEwxMi42OTUsODkuNjAzIEwxMi42NjYsODkuNjIxIEwxMi42NjYsODkuNjIxIFoiIGlkPSJGaWxsLTkiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTIuMzcsOTAuODAxIEwxMi4zNyw4OS41NTQgTDEyLjM3LDkwLjgwMSIgaWQ9IkZpbGwtMTAiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNi4xMyw5My45MDEgQzUuMzc5LDkzLjgwOCA0LjgxNiw5My4xNjQgNC42OTEsOTIuNTI1IEMzLjg2LDg4LjI4NyAzLjU0LDgzLjc0MyAzLjUyNiw3MS4xNzMgQzMuNTExLDU4LjM4OSA0LjQyMyw1MS40MjggNC40MjMsNTEuNDI4IEM1LjEzNCw0Ny4yODIgNy4yMSw0Ni4yMzYgNy4yMSw0Ni4yMzYgQzcuMjEsNDYuMjM2IDgxLjY2NywzLjI1IDgyLjA2OSwzLjAxNyBDODIuMjkyLDIuODg4IDg0LjU1NiwxLjQzMyA4NS4yNjQsMy45NCBDODcuMjE0LDEwLjg0IDg2Ljc1MiwzNS44MjcgODUuNTM5LDQzLjgxOCBDODUuMTUsNDYuMzgzIDg0LjI5MSw0OS4wMzMgODIuNDgzLDUwLjEwMSBMNy4yMSw5My42NTMgQzYuODI4LDkzLjg3NCA2LjQ2MSw5My45NDEgNi4xMyw5My45MDEgQzYuMTMsOTMuOTAxIDMuMzQ5LDkzLjQ2IDMuMTI5LDkxLjc3NiBDMi41NjgsODcuNDk1IDEuOTc3LDgyLjk5NSAxLjk2Miw3MC40MjUgQzEuOTQ4LDU3LjY0MSAyLjg2LDUwLjY4IDIuODYsNTAuNjggQzMuNTcsNDYuNTM0IDUuNjQ3LDQ1LjQ4OSA1LjY0Nyw0NS40ODkgQzUuNjQ2LDQ1LjQ4OSA4LjA2NSw0NC4wOTIgMTIuMjQ1LDQxLjY3OSBMMTMuMTE2LDQxLjU2IEwxOS43MTUsMzcuNzMgTDE5Ljc2MSwzNy4yNjkgTDYuMTMsOTMuOTAxIiBpZD0iRmlsbC0xMSIgZmlsbD0iI0ZBRkFGQSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik02LjMxNyw5NC4xNjEgTDYuMTAyLDk0LjE0OCBMNi4xMDEsOTQuMTQ4IEw1Ljg1Nyw5NC4xMDEgQzUuMTM4LDkzLjk0NSAzLjA4NSw5My4zNjUgMi44ODEsOTEuODA5IEMyLjMxMyw4Ny40NjkgMS43MjcsODIuOTk2IDEuNzEzLDcwLjQyNSBDMS42OTksNTcuNzcxIDIuNjA0LDUwLjcxOCAyLjYxMyw1MC42NDggQzMuMzM4LDQ2LjQxNyA1LjQ0NSw0NS4zMSA1LjUzNSw0NS4yNjYgTDEyLjE2Myw0MS40MzkgTDEzLjAzMyw0MS4zMiBMMTkuNDc5LDM3LjU3OCBMMTkuNTEzLDM3LjI0NCBDMTkuNTI2LDM3LjEwNyAxOS42NDcsMzcuMDA4IDE5Ljc4NiwzNy4wMjEgQzE5LjkyMiwzNy4wMzQgMjAuMDIzLDM3LjE1NiAyMC4wMDksMzcuMjkzIEwxOS45NSwzNy44ODIgTDEzLjE5OCw0MS44MDEgTDEyLjMyOCw0MS45MTkgTDUuNzcyLDQ1LjcwNCBDNS43NDEsNDUuNzIgMy43ODIsNDYuNzcyIDMuMTA2LDUwLjcyMiBDMy4wOTksNTAuNzgyIDIuMTk4LDU3LjgwOCAyLjIxMiw3MC40MjQgQzIuMjI2LDgyLjk2MyAyLjgwOSw4Ny40MiAzLjM3Myw5MS43MjkgQzMuNDY0LDkyLjQyIDQuMDYyLDkyLjg4MyA0LjY4Miw5My4xODEgQzQuNTY2LDkyLjk4NCA0LjQ4Niw5Mi43NzYgNC40NDYsOTIuNTcyIEMzLjY2NSw4OC41ODggMy4yOTEsODQuMzcgMy4yNzYsNzEuMTczIEMzLjI2Miw1OC41MiA0LjE2Nyw1MS40NjYgNC4xNzYsNTEuMzk2IEM0LjkwMSw0Ny4xNjUgNy4wMDgsNDYuMDU5IDcuMDk4LDQ2LjAxNCBDNy4wOTQsNDYuMDE1IDgxLjU0MiwzLjAzNCA4MS45NDQsMi44MDIgTDgxLjk3MiwyLjc4NSBDODIuODc2LDIuMjQ3IDgzLjY5MiwyLjA5NyA4NC4zMzIsMi4zNTIgQzg0Ljg4NywyLjU3MyA4NS4yODEsMy4wODUgODUuNTA0LDMuODcyIEM4Ny41MTgsMTEgODYuOTY0LDM2LjA5MSA4NS43ODUsNDMuODU1IEM4NS4yNzgsNDcuMTk2IDg0LjIxLDQ5LjM3IDgyLjYxLDUwLjMxNyBMNy4zMzUsOTMuODY5IEM2Ljk5OSw5NC4wNjMgNi42NTgsOTQuMTYxIDYuMzE3LDk0LjE2MSBMNi4zMTcsOTQuMTYxIFogTTYuMTcsOTMuNjU0IEM2LjQ2Myw5My42OSA2Ljc3NCw5My42MTcgNy4wODUsOTMuNDM3IEw4Mi4zNTgsNDkuODg2IEM4NC4xODEsNDguODA4IDg0Ljk2LDQ1Ljk3MSA4NS4yOTIsNDMuNzggQzg2LjQ2NiwzNi4wNDkgODcuMDIzLDExLjA4NSA4NS4wMjQsNC4wMDggQzg0Ljg0NiwzLjM3NyA4NC41NTEsMi45NzYgODQuMTQ4LDIuODE2IEM4My42NjQsMi42MjMgODIuOTgyLDIuNzY0IDgyLjIyNywzLjIxMyBMODIuMTkzLDMuMjM0IEM4MS43OTEsMy40NjYgNy4zMzUsNDYuNDUyIDcuMzM1LDQ2LjQ1MiBDNy4zMDQsNDYuNDY5IDUuMzQ2LDQ3LjUyMSA0LjY2OSw1MS40NzEgQzQuNjYyLDUxLjUzIDMuNzYxLDU4LjU1NiAzLjc3NSw3MS4xNzMgQzMuNzksODQuMzI4IDQuMTYxLDg4LjUyNCA0LjkzNiw5Mi40NzYgQzUuMDI2LDkyLjkzNyA1LjQxMiw5My40NTkgNS45NzMsOTMuNjE1IEM2LjA4Nyw5My42NCA2LjE1OCw5My42NTIgNi4xNjksOTMuNjU0IEw2LjE3LDkzLjY1NCBMNi4xNyw5My42NTQgWiIgaWQ9IkZpbGwtMTIiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNy4zMTcsNjguOTgyIEM3LjgwNiw2OC43MDEgOC4yMDIsNjguOTI2IDguMjAyLDY5LjQ4NyBDOC4yMDIsNzAuMDQ3IDcuODA2LDcwLjczIDcuMzE3LDcxLjAxMiBDNi44MjksNzEuMjk0IDYuNDMzLDcxLjA2OSA2LjQzMyw3MC41MDggQzYuNDMzLDY5Ljk0OCA2LjgyOSw2OS4yNjUgNy4zMTcsNjguOTgyIiBpZD0iRmlsbC0xMyIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik02LjkyLDcxLjEzMyBDNi42MzEsNzEuMTMzIDYuNDMzLDcwLjkwNSA2LjQzMyw3MC41MDggQzYuNDMzLDY5Ljk0OCA2LjgyOSw2OS4yNjUgNy4zMTcsNjguOTgyIEM3LjQ2LDY4LjkgNy41OTUsNjguODYxIDcuNzE0LDY4Ljg2MSBDOC4wMDMsNjguODYxIDguMjAyLDY5LjA5IDguMjAyLDY5LjQ4NyBDOC4yMDIsNzAuMDQ3IDcuODA2LDcwLjczIDcuMzE3LDcxLjAxMiBDNy4xNzQsNzEuMDk0IDcuMDM5LDcxLjEzMyA2LjkyLDcxLjEzMyBNNy43MTQsNjguNjc0IEM3LjU1Nyw2OC42NzQgNy4zOTIsNjguNzIzIDcuMjI0LDY4LjgyMSBDNi42NzYsNjkuMTM4IDYuMjQ2LDY5Ljg3OSA2LjI0Niw3MC41MDggQzYuMjQ2LDcwLjk5NCA2LjUxNyw3MS4zMiA2LjkyLDcxLjMyIEM3LjA3OCw3MS4zMiA3LjI0Myw3MS4yNzEgNy40MTEsNzEuMTc0IEM3Ljk1OSw3MC44NTcgOC4zODksNzAuMTE3IDguMzg5LDY5LjQ4NyBDOC4zODksNjkuMDAxIDguMTE3LDY4LjY3NCA3LjcxNCw2OC42NzQiIGlkPSJGaWxsLTE0IiBmaWxsPSIjODA5N0EyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTYuOTIsNzAuOTQ3IEM2LjY0OSw3MC45NDcgNi42MjEsNzAuNjQgNi42MjEsNzAuNTA4IEM2LjYyMSw3MC4wMTcgNi45ODIsNjkuMzkyIDcuNDExLDY5LjE0NSBDNy41MjEsNjkuMDgyIDcuNjI1LDY5LjA0OSA3LjcxNCw2OS4wNDkgQzcuOTg2LDY5LjA0OSA4LjAxNSw2OS4zNTUgOC4wMTUsNjkuNDg3IEM4LjAxNSw2OS45NzggNy42NTIsNzAuNjAzIDcuMjI0LDcwLjg1MSBDNy4xMTUsNzAuOTE0IDcuMDEsNzAuOTQ3IDYuOTIsNzAuOTQ3IE03LjcxNCw2OC44NjEgQzcuNTk1LDY4Ljg2MSA3LjQ2LDY4LjkgNy4zMTcsNjguOTgyIEM2LjgyOSw2OS4yNjUgNi40MzMsNjkuOTQ4IDYuNDMzLDcwLjUwOCBDNi40MzMsNzAuOTA1IDYuNjMxLDcxLjEzMyA2LjkyLDcxLjEzMyBDNy4wMzksNzEuMTMzIDcuMTc0LDcxLjA5NCA3LjMxNyw3MS4wMTIgQzcuODA2LDcwLjczIDguMjAyLDcwLjA0NyA4LjIwMiw2OS40ODcgQzguMjAyLDY5LjA5IDguMDAzLDY4Ljg2MSA3LjcxNCw2OC44NjEiIGlkPSJGaWxsLTE1IiBmaWxsPSIjODA5N0EyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTcuNDQ0LDg1LjM1IEM3LjcwOCw4NS4xOTggNy45MjEsODUuMzE5IDcuOTIxLDg1LjYyMiBDNy45MjEsODUuOTI1IDcuNzA4LDg2LjI5MiA3LjQ0NCw4Ni40NDQgQzcuMTgxLDg2LjU5NyA2Ljk2Nyw4Ni40NzUgNi45NjcsODYuMTczIEM2Ljk2Nyw4NS44NzEgNy4xODEsODUuNTAyIDcuNDQ0LDg1LjM1IiBpZD0iRmlsbC0xNiIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjIzLDg2LjUxIEM3LjA3NCw4Ni41MSA2Ljk2Nyw4Ni4zODcgNi45NjcsODYuMTczIEM2Ljk2Nyw4NS44NzEgNy4xODEsODUuNTAyIDcuNDQ0LDg1LjM1IEM3LjUyMSw4NS4zMDUgNy41OTQsODUuMjg0IDcuNjU4LDg1LjI4NCBDNy44MTQsODUuMjg0IDcuOTIxLDg1LjQwOCA3LjkyMSw4NS42MjIgQzcuOTIxLDg1LjkyNSA3LjcwOCw4Ni4yOTIgNy40NDQsODYuNDQ0IEM3LjM2Nyw4Ni40ODkgNy4yOTQsODYuNTEgNy4yMyw4Ni41MSBNNy42NTgsODUuMDk4IEM3LjU1OCw4NS4wOTggNy40NTUsODUuMTI3IDcuMzUxLDg1LjE4OCBDNy4wMzEsODUuMzczIDYuNzgxLDg1LjgwNiA2Ljc4MSw4Ni4xNzMgQzYuNzgxLDg2LjQ4MiA2Ljk2Niw4Ni42OTcgNy4yMyw4Ni42OTcgQzcuMzMsODYuNjk3IDcuNDMzLDg2LjY2NiA3LjUzOCw4Ni42MDcgQzcuODU4LDg2LjQyMiA4LjEwOCw4NS45ODkgOC4xMDgsODUuNjIyIEM4LjEwOCw4NS4zMTMgNy45MjMsODUuMDk4IDcuNjU4LDg1LjA5OCIgaWQ9IkZpbGwtMTciIGZpbGw9IiM4MDk3QTIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNy4yMyw4Ni4zMjIgTDcuMTU0LDg2LjE3MyBDNy4xNTQsODUuOTM4IDcuMzMzLDg1LjYyOSA3LjUzOCw4NS41MTIgTDcuNjU4LDg1LjQ3MSBMNy43MzQsODUuNjIyIEM3LjczNCw4NS44NTYgNy41NTUsODYuMTY0IDcuMzUxLDg2LjI4MiBMNy4yMyw4Ni4zMjIgTTcuNjU4LDg1LjI4NCBDNy41OTQsODUuMjg0IDcuNTIxLDg1LjMwNSA3LjQ0NCw4NS4zNSBDNy4xODEsODUuNTAyIDYuOTY3LDg1Ljg3MSA2Ljk2Nyw4Ni4xNzMgQzYuOTY3LDg2LjM4NyA3LjA3NCw4Ni41MSA3LjIzLDg2LjUxIEM3LjI5NCw4Ni41MSA3LjM2Nyw4Ni40ODkgNy40NDQsODYuNDQ0IEM3LjcwOCw4Ni4yOTIgNy45MjEsODUuOTI1IDcuOTIxLDg1LjYyMiBDNy45MjEsODUuNDA4IDcuODE0LDg1LjI4NCA3LjY1OCw4NS4yODQiIGlkPSJGaWxsLTE4IiBmaWxsPSIjODA5N0EyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTc3LjI3OCw3Ljc2OSBMNzcuMjc4LDUxLjQzNiBMMTAuMjA4LDkwLjE2IEwxMC4yMDgsNDYuNDkzIEw3Ny4yNzgsNy43NjkiIGlkPSJGaWxsLTE5IiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTEwLjA4Myw5MC4zNzUgTDEwLjA4Myw0Ni40MjEgTDEwLjE0Niw0Ni4zODUgTDc3LjQwMyw3LjU1NCBMNzcuNDAzLDUxLjUwOCBMNzcuMzQxLDUxLjU0NCBMMTAuMDgzLDkwLjM3NSBMMTAuMDgzLDkwLjM3NSBaIE0xMC4zMzMsNDYuNTY0IEwxMC4zMzMsODkuOTQ0IEw3Ny4xNTQsNTEuMzY1IEw3Ny4xNTQsNy45ODUgTDEwLjMzMyw0Ni41NjQgTDEwLjMzMyw0Ni41NjQgWiIgaWQ9IkZpbGwtMjAiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMjUuNzM3LDg4LjY0NyBMMTE4LjA5OCw5MS45ODEgTDExOC4wOTgsODQgTDEwNi42MzksODguNzEzIEwxMDYuNjM5LDk2Ljk4MiBMOTksMTAwLjMxNSBMMTEyLjM2OSwxMDMuOTYxIEwxMjUuNzM3LDg4LjY0NyIgaWQ9IkltcG9ydGVkLUxheWVycy1Db3B5LTIiIGZpbGw9IiM0NTVBNjQiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+");
};module.exports=RotateInstructions},{"./util.js":68}],63:[function(_dereq_,module,exports){var SensorSample=_dereq_("./sensor-sample.js");var MathUtil=_dereq_("../math-util.js");var Util=_dereq_("../util.js");function ComplementaryFilter(kFilter){this.kFilter=kFilter;this.currentAccelMeasurement=new SensorSample;this.currentGyroMeasurement=new SensorSample;this.previousGyroMeasurement=new SensorSample;if(Util.isIOS()){this.filterQ=new MathUtil.Quaternion(-1,0,0,1)}else{this.filterQ=new MathUtil.Quaternion(1,0,0,1)}this.previousFilterQ=new MathUtil.Quaternion;this.previousFilterQ.copy(this.filterQ);this.accelQ=new MathUtil.Quaternion;this.isOrientationInitialized=false;this.estimatedGravity=new MathUtil.Vector3;this.measuredGravity=new MathUtil.Vector3;this.gyroIntegralQ=new MathUtil.Quaternion}ComplementaryFilter.prototype.addAccelMeasurement=function(vector,timestampS){this.currentAccelMeasurement.set(vector,timestampS)};ComplementaryFilter.prototype.addGyroMeasurement=function(vector,timestampS){this.currentGyroMeasurement.set(vector,timestampS);var deltaT=timestampS-this.previousGyroMeasurement.timestampS;if(Util.isTimestampDeltaValid(deltaT)){this.run_()}this.previousGyroMeasurement.copy(this.currentGyroMeasurement)};ComplementaryFilter.prototype.run_=function(){if(!this.isOrientationInitialized){this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample);this.previousFilterQ.copy(this.accelQ);this.isOrientationInitialized=true;return}var deltaT=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS;var gyroDeltaQ=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,deltaT);this.gyroIntegralQ.multiply(gyroDeltaQ);this.filterQ.copy(this.previousFilterQ);this.filterQ.multiply(gyroDeltaQ);var invFilterQ=new MathUtil.Quaternion;invFilterQ.copy(this.filterQ);invFilterQ.inverse();this.estimatedGravity.set(0,0,-1);this.estimatedGravity.applyQuaternion(invFilterQ);this.estimatedGravity.normalize();this.measuredGravity.copy(this.currentAccelMeasurement.sample);this.measuredGravity.normalize();var deltaQ=new MathUtil.Quaternion;deltaQ.setFromUnitVectors(this.estimatedGravity,this.measuredGravity);deltaQ.inverse();if(Util.isDebug()){console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)",MathUtil.radToDeg*Util.getQuaternionAngle(deltaQ),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1))}var targetQ=new MathUtil.Quaternion;targetQ.copy(this.filterQ);targetQ.multiply(deltaQ);this.filterQ.slerp(targetQ,1-this.kFilter);this.previousFilterQ.copy(this.filterQ)};ComplementaryFilter.prototype.getOrientation=function(){return this.filterQ};ComplementaryFilter.prototype.accelToQuaternion_=function(accel){var normAccel=new MathUtil.Vector3;normAccel.copy(accel);normAccel.normalize();var quat=new MathUtil.Quaternion;quat.setFromUnitVectors(new MathUtil.Vector3(0,0,-1),normAccel);quat.inverse();return quat};ComplementaryFilter.prototype.gyroToQuaternionDelta_=function(gyro,dt){var quat=new MathUtil.Quaternion;var axis=new MathUtil.Vector3;axis.copy(gyro);axis.normalize();quat.setFromAxisAngle(axis,gyro.length()*dt);return quat};module.exports=ComplementaryFilter},{"../math-util.js":59,"../util.js":68,"./sensor-sample.js":66}],64:[function(_dereq_,module,exports){var ComplementaryFilter=_dereq_("./complementary-filter.js");var PosePredictor=_dereq_("./pose-predictor.js");var TouchPanner=_dereq_("../touch-panner.js");var MathUtil=_dereq_("../math-util.js");var Util=_dereq_("../util.js");function FusionPoseSensor(){this.deviceId="webvr-polyfill:fused";this.deviceName="VR Position Device (webvr-polyfill:fused)";this.accelerometer=new MathUtil.Vector3;this.gyroscope=new MathUtil.Vector3;this.start();this.filter=new ComplementaryFilter(window.WebVRConfig.K_FILTER);this.posePredictor=new PosePredictor(window.WebVRConfig.PREDICTION_TIME_S);this.touchPanner=new TouchPanner;this.filterToWorldQ=new MathUtil.Quaternion;if(Util.isIOS()){this.filterToWorldQ.setFromAxisAngle(new MathUtil.Vector3(1,0,0),Math.PI/2)}else{this.filterToWorldQ.setFromAxisAngle(new MathUtil.Vector3(1,0,0),-Math.PI/2)}this.inverseWorldToScreenQ=new MathUtil.Quaternion;this.worldToScreenQ=new MathUtil.Quaternion;this.originalPoseAdjustQ=new MathUtil.Quaternion;this.originalPoseAdjustQ.setFromAxisAngle(new MathUtil.Vector3(0,0,1),-window.orientation*Math.PI/180);this.setScreenTransform_();if(Util.isLandscapeMode()){this.filterToWorldQ.multiply(this.inverseWorldToScreenQ)}this.resetQ=new MathUtil.Quaternion;this.isFirefoxAndroid=Util.isFirefoxAndroid();this.isIOS=Util.isIOS();this.orientationOut_=new Float32Array(4)}FusionPoseSensor.prototype.getPosition=function(){return null};FusionPoseSensor.prototype.getOrientation=function(){var orientation=this.filter.getOrientation();this.predictedQ=this.posePredictor.getPrediction(orientation,this.gyroscope,this.previousTimestampS);var out=new MathUtil.Quaternion;out.copy(this.filterToWorldQ);out.multiply(this.resetQ);if(!window.WebVRConfig.TOUCH_PANNER_DISABLED){out.multiply(this.touchPanner.getOrientation())}out.multiply(this.predictedQ);out.multiply(this.worldToScreenQ);if(window.WebVRConfig.YAW_ONLY){out.x=0;out.z=0;out.normalize()}this.orientationOut_[0]=out.x;this.orientationOut_[1]=out.y;this.orientationOut_[2]=out.z;this.orientationOut_[3]=out.w;return this.orientationOut_};FusionPoseSensor.prototype.resetPose=function(){this.resetQ.copy(this.filter.getOrientation());this.resetQ.x=0;this.resetQ.y=0;this.resetQ.z*=-1;this.resetQ.normalize();if(Util.isLandscapeMode()){this.resetQ.multiply(this.inverseWorldToScreenQ)}this.resetQ.multiply(this.originalPoseAdjustQ);if(!window.WebVRConfig.TOUCH_PANNER_DISABLED){this.touchPanner.resetSensor()}};FusionPoseSensor.prototype.onDeviceMotion_=function(deviceMotion){this.updateDeviceMotion_(deviceMotion)};FusionPoseSensor.prototype.updateDeviceMotion_=function(deviceMotion){var accGravity=deviceMotion.accelerationIncludingGravity;var rotRate=deviceMotion.rotationRate;var timestampS=deviceMotion.timeStamp/1e3;var deltaS=timestampS-this.previousTimestampS;if(deltaS<=Util.MIN_TIMESTEP||deltaS>Util.MAX_TIMESTEP){console.warn("Invalid timestamps detected. Time step between successive "+"gyroscope sensor samples is very small or not monotonic");this.previousTimestampS=timestampS;return}this.accelerometer.set(-accGravity.x,-accGravity.y,-accGravity.z);this.gyroscope.set(rotRate.alpha,rotRate.beta,rotRate.gamma);if(this.isIOS||this.isFirefoxAndroid){this.gyroscope.multiplyScalar(Math.PI/180)}this.filter.addAccelMeasurement(this.accelerometer,timestampS);this.filter.addGyroMeasurement(this.gyroscope,timestampS);this.previousTimestampS=timestampS};FusionPoseSensor.prototype.onOrientationChange_=function(screenOrientation){this.setScreenTransform_()};FusionPoseSensor.prototype.onMessage_=function(event){var message=event.data;if(!message||!message.type){return}var type=message.type.toLowerCase();if(type!=="devicemotion"){return}this.updateDeviceMotion_(message.deviceMotionEvent)};FusionPoseSensor.prototype.setScreenTransform_=function(){this.worldToScreenQ.set(0,0,0,1);switch(window.orientation){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new MathUtil.Vector3(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new MathUtil.Vector3(0,0,1),Math.PI/2);break;case 180:break}this.inverseWorldToScreenQ.copy(this.worldToScreenQ);this.inverseWorldToScreenQ.inverse()};FusionPoseSensor.prototype.start=function(){this.onDeviceMotionCallback_=this.onDeviceMotion_.bind(this);this.onOrientationChangeCallback_=this.onOrientationChange_.bind(this);this.onMessageCallback_=this.onMessage_.bind(this);if(Util.isIOS()&&Util.isInsideCrossDomainIFrame()){window.addEventListener("message",this.onMessageCallback_)}window.addEventListener("orientationchange",this.onOrientationChangeCallback_);window.addEventListener("devicemotion",this.onDeviceMotionCallback_)};FusionPoseSensor.prototype.stop=function(){window.removeEventListener("devicemotion",this.onDeviceMotionCallback_);window.removeEventListener("orientationchange",this.onOrientationChangeCallback_);window.removeEventListener("message",this.onMessageCallback_)};module.exports=FusionPoseSensor},{"../math-util.js":59,"../touch-panner.js":67,"../util.js":68,"./complementary-filter.js":63,"./pose-predictor.js":65}],65:[function(_dereq_,module,exports){var MathUtil=_dereq_("../math-util");var Util=_dereq_("../util");function PosePredictor(predictionTimeS){this.predictionTimeS=predictionTimeS;this.previousQ=new MathUtil.Quaternion;this.previousTimestampS=null;this.deltaQ=new MathUtil.Quaternion;this.outQ=new MathUtil.Quaternion}PosePredictor.prototype.getPrediction=function(currentQ,gyro,timestampS){if(!this.previousTimestampS){this.previousQ.copy(currentQ);this.previousTimestampS=timestampS;return currentQ}var axis=new MathUtil.Vector3;axis.copy(gyro);axis.normalize();var angularSpeed=gyro.length();if(angularSpeed<MathUtil.degToRad*20){if(Util.isDebug()){console.log("Moving slowly, at %s deg/s: no prediction",(MathUtil.radToDeg*angularSpeed).toFixed(1))}this.outQ.copy(currentQ);this.previousQ.copy(currentQ);return this.outQ}var deltaT=timestampS-this.previousTimestampS;var predictAngle=angularSpeed*this.predictionTimeS;this.deltaQ.setFromAxisAngle(axis,predictAngle);this.outQ.copy(this.previousQ);this.outQ.multiply(this.deltaQ);this.previousQ.copy(currentQ);this.previousTimestampS=timestampS;return this.outQ};module.exports=PosePredictor},{"../math-util":59,"../util":68}],66:[function(_dereq_,module,exports){function SensorSample(sample,timestampS){this.set(sample,timestampS)}SensorSample.prototype.set=function(sample,timestampS){this.sample=sample;this.timestampS=timestampS};SensorSample.prototype.copy=function(sensorSample){this.set(sensorSample.sample,sensorSample.timestampS)};module.exports=SensorSample},{}],67:[function(_dereq_,module,exports){var MathUtil=_dereq_("./math-util.js");var Util=_dereq_("./util.js");var ROTATE_SPEED=.5;function TouchPanner(){window.addEventListener("touchstart",this.onTouchStart_.bind(this));window.addEventListener("touchmove",this.onTouchMove_.bind(this));window.addEventListener("touchend",this.onTouchEnd_.bind(this));this.isTouching=false;this.rotateStart=new MathUtil.Vector2;this.rotateEnd=new MathUtil.Vector2;this.rotateDelta=new MathUtil.Vector2;this.theta=0;this.orientation=new MathUtil.Quaternion}TouchPanner.prototype.getOrientation=function(){this.orientation.setFromEulerXYZ(0,0,this.theta);return this.orientation};TouchPanner.prototype.resetSensor=function(){this.theta=0};TouchPanner.prototype.onTouchStart_=function(e){if(!e.touches||e.touches.length!=1){return}this.rotateStart.set(e.touches[0].pageX,e.touches[0].pageY);this.isTouching=true};TouchPanner.prototype.onTouchMove_=function(e){if(!this.isTouching){return}this.rotateEnd.set(e.touches[0].pageX,e.touches[0].pageY);this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart);this.rotateStart.copy(this.rotateEnd);if(Util.isIOS()){this.rotateDelta.x*=-1}var element=document.body;this.theta+=2*Math.PI*this.rotateDelta.x/element.clientWidth*ROTATE_SPEED};TouchPanner.prototype.onTouchEnd_=function(e){this.isTouching=false};module.exports=TouchPanner},{"./math-util.js":59,"./util.js":68}],68:[function(_dereq_,module,exports){var Util=window.Util||{};Util.MIN_TIMESTEP=.001;Util.MAX_TIMESTEP=1;Util.base64=function(mimeType,base64){return"data:"+mimeType+";base64,"+base64};Util.clamp=function(value,min,max){return Math.min(Math.max(min,value),max)};Util.lerp=function(a,b,t){return a+(b-a)*t};Util.race=function(promises){if(Promise.race){return Promise.race(promises)}return new Promise(function(resolve,reject){for(var i=0;i<promises.length;i++){promises[i].then(resolve,reject)}})};Util.isIOS=function(){var isIOS=/iPad|iPhone|iPod/.test(navigator.platform);return function(){return isIOS}}();Util.isWebViewAndroid=function(){var isWebViewAndroid=navigator.userAgent.indexOf("Version")!==-1&&navigator.userAgent.indexOf("Android")!==-1&&navigator.userAgent.indexOf("Chrome")!==-1;return function(){return isWebViewAndroid}}();Util.isSafari=function(){var isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);return function(){return isSafari}}();Util.isFirefoxAndroid=function(){var isFirefoxAndroid=navigator.userAgent.indexOf("Firefox")!==-1&&navigator.userAgent.indexOf("Android")!==-1;return function(){return isFirefoxAndroid}}();Util.isLandscapeMode=function(){return window.orientation==90||window.orientation==-90};Util.isTimestampDeltaValid=function(timestampDeltaS){if(isNaN(timestampDeltaS)){return false}if(timestampDeltaS<=Util.MIN_TIMESTEP){return false}if(timestampDeltaS>Util.MAX_TIMESTEP){return false}return true};Util.getScreenWidth=function(){return Math.max(window.screen.width,window.screen.height)*window.devicePixelRatio};Util.getScreenHeight=function(){return Math.min(window.screen.width,window.screen.height)*window.devicePixelRatio};Util.requestFullscreen=function(element){if(Util.isWebViewAndroid()){return false}if(element.requestFullscreen){element.requestFullscreen()}else if(element.webkitRequestFullscreen){element.webkitRequestFullscreen()}else if(element.mozRequestFullScreen){element.mozRequestFullScreen()}else if(element.msRequestFullscreen){element.msRequestFullscreen()}else{return false}return true};Util.exitFullscreen=function(){if(document.exitFullscreen){document.exitFullscreen()}else if(document.webkitExitFullscreen){document.webkitExitFullscreen()}else if(document.mozCancelFullScreen){document.mozCancelFullScreen()}else if(document.msExitFullscreen){document.msExitFullscreen()}else{return false}return true};Util.getFullscreenElement=function(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement};Util.linkProgram=function(gl,vertexSource,fragmentSource,attribLocationMap){var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,vertexSource);gl.compileShader(vertexShader);var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,fragmentSource);gl.compileShader(fragmentShader);var program=gl.createProgram();gl.attachShader(program,vertexShader);gl.attachShader(program,fragmentShader);for(var attribName in attribLocationMap)gl.bindAttribLocation(program,attribLocationMap[attribName],attribName);gl.linkProgram(program);gl.deleteShader(vertexShader);gl.deleteShader(fragmentShader);return program};Util.getProgramUniforms=function(gl,program){var uniforms={};var uniformCount=gl.getProgramParameter(program,gl.ACTIVE_UNIFORMS);var uniformName="";for(var i=0;i<uniformCount;i++){var uniformInfo=gl.getActiveUniform(program,i);uniformName=uniformInfo.name.replace("[0]","");uniforms[uniformName]=gl.getUniformLocation(program,uniformName)}return uniforms};Util.orthoMatrix=function(out,left,right,bottom,top,near,far){var lr=1/(left-right),bt=1/(bottom-top),nf=1/(near-far);out[0]=-2*lr;out[1]=0;out[2]=0;out[3]=0;out[4]=0;out[5]=-2*bt;out[6]=0;out[7]=0;out[8]=0;out[9]=0;out[10]=2*nf;out[11]=0;out[12]=(left+right)*lr;out[13]=(top+bottom)*bt;out[14]=(far+near)*nf;out[15]=1;return out};Util.copyArray=function(source,dest){for(var i=0,n=source.length;i<n;i++){dest[i]=source[i]}};Util.isMobile=function(){var check=false;(function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))check=true})(navigator.userAgent||navigator.vendor||window.opera);return check};Util.extend=function(dest,src){for(var key in src){if(src.hasOwnProperty(key)){dest[key]=src[key]}}return dest};Util.safariCssSizeWorkaround=function(canvas){if(Util.isIOS()){var width=canvas.style.width;var height=canvas.style.height;canvas.style.width=parseInt(width)+1+"px";canvas.style.height=parseInt(height)+"px";setTimeout(function(){canvas.style.width=width;canvas.style.height=height},100)}window.Util=Util;window.canvas=canvas};Util.isDebug=function(){return Util.getQueryParameter("debug")};Util.getQueryParameter=function(name){var name=name.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var regex=new RegExp("[\\?&]"+name+"=([^&#]*)"),results=regex.exec(location.search);return results===null?"":decodeURIComponent(results[1].replace(/\+/g," "))};Util.frameDataFromPose=function(){var piOver180=Math.PI/180;var rad45=Math.PI*.25;function mat4_perspectiveFromFieldOfView(out,fov,near,far){var upTan=Math.tan(fov?fov.upDegrees*piOver180:rad45),downTan=Math.tan(fov?fov.downDegrees*piOver180:rad45),leftTan=Math.tan(fov?fov.leftDegrees*piOver180:rad45),rightTan=Math.tan(fov?fov.rightDegrees*piOver180:rad45),xScale=2/(leftTan+rightTan),yScale=2/(upTan+downTan);out[0]=xScale;out[1]=0;out[2]=0;out[3]=0;out[4]=0;out[5]=yScale;out[6]=0;out[7]=0;out[8]=-((leftTan-rightTan)*xScale*.5);out[9]=(upTan-downTan)*yScale*.5;out[10]=far/(near-far);out[11]=-1;out[12]=0;out[13]=0;out[14]=far*near/(near-far);out[15]=0;return out}function mat4_fromRotationTranslation(out,q,v){var x=q[0],y=q[1],z=q[2],w=q[3],x2=x+x,y2=y+y,z2=z+z,xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;out[0]=1-(yy+zz);out[1]=xy+wz;out[2]=xz-wy;out[3]=0;out[4]=xy-wz;out[5]=1-(xx+zz);out[6]=yz+wx;out[7]=0;out[8]=xz+wy;out[9]=yz-wx;out[10]=1-(xx+yy);out[11]=0;out[12]=v[0];out[13]=v[1];out[14]=v[2];out[15]=1;return out}function mat4_translate(out,a,v){var x=v[0],y=v[1],z=v[2],a00,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a23;if(a===out){out[12]=a[0]*x+a[4]*y+a[8]*z+a[12];out[13]=a[1]*x+a[5]*y+a[9]*z+a[13];out[14]=a[2]*x+a[6]*y+a[10]*z+a[14];out[15]=a[3]*x+a[7]*y+a[11]*z+a[15]}else{a00=a[0];a01=a[1];a02=a[2];a03=a[3];a10=a[4];a11=a[5];a12=a[6];a13=a[7];a20=a[8];a21=a[9];a22=a[10];a23=a[11];out[0]=a00;out[1]=a01;out[2]=a02;out[3]=a03;out[4]=a10;out[5]=a11;out[6]=a12;out[7]=a13;out[8]=a20;out[9]=a21;out[10]=a22;out[11]=a23;out[12]=a00*x+a10*y+a20*z+a[12];out[13]=a01*x+a11*y+a21*z+a[13];out[14]=a02*x+a12*y+a22*z+a[14];out[15]=a03*x+a13*y+a23*z+a[15]}return out}function mat4_invert(out,a){var a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],a30=a[12],a31=a[13],a32=a[14],a33=a[15],b00=a00*a11-a01*a10,b01=a00*a12-a02*a10,b02=a00*a13-a03*a10,b03=a01*a12-a02*a11,b04=a01*a13-a03*a11,b05=a02*a13-a03*a12,b06=a20*a31-a21*a30,b07=a20*a32-a22*a30,b08=a20*a33-a23*a30,b09=a21*a32-a22*a31,b10=a21*a33-a23*a31,b11=a22*a33-a23*a32,det=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06;if(!det){return null}det=1/det;out[0]=(a11*b11-a12*b10+a13*b09)*det;out[1]=(a02*b10-a01*b11-a03*b09)*det;out[2]=(a31*b05-a32*b04+a33*b03)*det;out[3]=(a22*b04-a21*b05-a23*b03)*det;out[4]=(a12*b08-a10*b11-a13*b07)*det;out[5]=(a00*b11-a02*b08+a03*b07)*det;out[6]=(a32*b02-a30*b05-a33*b01)*det;out[7]=(a20*b05-a22*b02+a23*b01)*det;out[8]=(a10*b10-a11*b08+a13*b06)*det;out[9]=(a01*b08-a00*b10-a03*b06)*det;out[10]=(a30*b04-a31*b02+a33*b00)*det;out[11]=(a21*b02-a20*b04-a23*b00)*det;out[12]=(a11*b07-a10*b09-a12*b06)*det;out[13]=(a00*b09-a01*b07+a02*b06)*det;out[14]=(a31*b01-a30*b03-a32*b00)*det;out[15]=(a20*b03-a21*b01+a22*b00)*det;return out}var defaultOrientation=new Float32Array([0,0,0,1]);var defaultPosition=new Float32Array([0,0,0]);function updateEyeMatrices(projection,view,pose,parameters,vrDisplay){mat4_perspectiveFromFieldOfView(projection,parameters?parameters.fieldOfView:null,vrDisplay.depthNear,vrDisplay.depthFar);var orientation=pose.orientation||defaultOrientation;var position=pose.position||defaultPosition;mat4_fromRotationTranslation(view,orientation,position);if(parameters)mat4_translate(view,view,parameters.offset);mat4_invert(view,view)}return function(frameData,pose,vrDisplay){if(!frameData||!pose)return false;frameData.pose=pose;frameData.timestamp=pose.timestamp;updateEyeMatrices(frameData.leftProjectionMatrix,frameData.leftViewMatrix,pose,vrDisplay.getEyeParameters("left"),vrDisplay);updateEyeMatrices(frameData.rightProjectionMatrix,frameData.rightViewMatrix,pose,vrDisplay.getEyeParameters("right"),vrDisplay);return true}}();Util.isInsideCrossDomainIFrame=function(){var isFramed=window.self!==window.top;var refDomain=Util.getDomainFromUrl(document.referrer);var thisDomain=Util.getDomainFromUrl(window.location.href);return isFramed&&refDomain!==thisDomain};Util.getDomainFromUrl=function(url){var domain;if(url.indexOf("://")>-1){domain=url.split("/")[2]}else{domain=url.split("/")[0]}domain=domain.split(":")[0];return domain};module.exports=Util},{}],69:[function(_dereq_,module,exports){var DeviceInfo=_dereq_("./device-info.js");var Util=_dereq_("./util.js");var DEFAULT_VIEWER="CardboardV1";var VIEWER_KEY="WEBVR_CARDBOARD_VIEWER";var CLASS_NAME="webvr-polyfill-viewer-selector";function ViewerSelector(){try{this.selectedKey=localStorage.getItem(VIEWER_KEY)}catch(error){console.error("Failed to load viewer profile: %s",error)}if(!this.selectedKey){this.selectedKey=DEFAULT_VIEWER}this.dialog=this.createDialog_(DeviceInfo.Viewers);this.root=null;this.onChangeCallbacks_=[]}ViewerSelector.prototype.show=function(root){this.root=root;root.appendChild(this.dialog);var selected=this.dialog.querySelector("#"+this.selectedKey);selected.checked=true;this.dialog.style.display="block"};ViewerSelector.prototype.hide=function(){if(this.root&&this.root.contains(this.dialog)){this.root.removeChild(this.dialog)}this.dialog.style.display="none"};ViewerSelector.prototype.getCurrentViewer=function(){return DeviceInfo.Viewers[this.selectedKey]};ViewerSelector.prototype.getSelectedKey_=function(){var input=this.dialog.querySelector("input[name=field]:checked");if(input){return input.id}return null};ViewerSelector.prototype.onChange=function(cb){this.onChangeCallbacks_.push(cb)};ViewerSelector.prototype.fireOnChange_=function(viewer){for(var i=0;i<this.onChangeCallbacks_.length;i++){this.onChangeCallbacks_[i](viewer)}};ViewerSelector.prototype.onSave_=function(){this.selectedKey=this.getSelectedKey_();if(!this.selectedKey||!DeviceInfo.Viewers[this.selectedKey]){console.error("ViewerSelector.onSave_: this should never happen!");return}this.fireOnChange_(DeviceInfo.Viewers[this.selectedKey]);try{localStorage.setItem(VIEWER_KEY,this.selectedKey)}catch(error){console.error("Failed to save viewer profile: %s",error)}this.hide()};ViewerSelector.prototype.createDialog_=function(options){var container=document.createElement("div");container.classList.add(CLASS_NAME);container.style.display="none";var overlay=document.createElement("div");var s=overlay.style;s.position="fixed";s.left=0;s.top=0;s.width="100%";s.height="100%";s.background="rgba(0, 0, 0, 0.3)";overlay.addEventListener("click",this.hide.bind(this));var width=280;var dialog=document.createElement("div");var s=dialog.style;s.boxSizing="border-box";s.position="fixed";s.top="24px";s.left="50%";s.marginLeft=-width/2+"px";s.width=width+"px";s.padding="24px";s.overflow="hidden";s.background="#fafafa";s.fontFamily="'Roboto', sans-serif";s.boxShadow="0px 5px 20px #666";dialog.appendChild(this.createH1_("Select your viewer"));for(var id in options){dialog.appendChild(this.createChoice_(id,options[id].label))}dialog.appendChild(this.createButton_("Save",this.onSave_.bind(this)));container.appendChild(overlay);container.appendChild(dialog);return container};ViewerSelector.prototype.createH1_=function(name){var h1=document.createElement("h1");var s=h1.style;s.color="black";s.fontSize="20px";s.fontWeight="bold";s.marginTop=0;s.marginBottom="24px";h1.innerHTML=name;return h1};ViewerSelector.prototype.createChoice_=function(id,name){var div=document.createElement("div");div.style.marginTop="8px";div.style.color="black";var input=document.createElement("input");input.style.fontSize="30px";input.setAttribute("id",id);input.setAttribute("type","radio");input.setAttribute("value",id);input.setAttribute("name","field");var label=document.createElement("label");label.style.marginLeft="4px";label.setAttribute("for",id);label.innerHTML=name;div.appendChild(input);div.appendChild(label);return div};ViewerSelector.prototype.createButton_=function(label,onclick){var button=document.createElement("button");button.innerHTML=label;var s=button.style;s.float="right";s.textTransform="uppercase";s.color="#1094f7";s.fontSize="14px";s.letterSpacing=0;s.border=0;s.background="none";s.marginTop="16px";button.addEventListener("click",onclick);return button};module.exports=ViewerSelector},{"./device-info.js":53,"./util.js":68}],70:[function(_dereq_,module,exports){var Util=_dereq_("./util.js");function AndroidWakeLock(){var video=document.createElement("video");video.setAttribute("loop","");function addSourceToVideo(element,type,dataURI){var source=document.createElement("source");source.src=dataURI;source.type="video/"+type;element.appendChild(source)}addSourceToVideo(video,"webm",Util.base64("video/webm","GkXfo0AgQoaBAUL3gQFC8oEEQvOBCEKCQAR3ZWJtQoeBAkKFgQIYU4BnQI0VSalmQCgq17FAAw9CQE2AQAZ3aGFtbXlXQUAGd2hhbW15RIlACECPQAAAAAAAFlSua0AxrkAu14EBY8WBAZyBACK1nEADdW5khkAFVl9WUDglhohAA1ZQOIOBAeBABrCBCLqBCB9DtnVAIueBAKNAHIEAAIAwAQCdASoIAAgAAUAmJaQAA3AA/vz0AAA="));addSourceToVideo(video,"mp4",Util.base64("video/mp4","AAAAHGZ0eXBpc29tAAACAGlzb21pc28ybXA0MQAAAAhmcmVlAAAAG21kYXQAAAGzABAHAAABthADAowdbb9/AAAC6W1vb3YAAABsbXZoZAAAAAB8JbCAfCWwgAAAA+gAAAAAAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIVdHJhawAAAFx0a2hkAAAAD3wlsIB8JbCAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAIAAAACAAAAAABsW1kaWEAAAAgbWRoZAAAAAB8JbCAfCWwgAAAA+gAAAAAVcQAAAAAAC1oZGxyAAAAAAAAAAB2aWRlAAAAAAAAAAAAAAAAVmlkZW9IYW5kbGVyAAAAAVxtaW5mAAAAFHZtaGQAAAABAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAAEcc3RibAAAALhzdHNkAAAAAAAAAAEAAACobXA0dgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAIAAgASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAAFJlc2RzAAAAAANEAAEABDwgEQAAAAADDUAAAAAABS0AAAGwAQAAAbWJEwAAAQAAAAEgAMSNiB9FAEQBFGMAAAGyTGF2YzUyLjg3LjQGAQIAAAAYc3R0cwAAAAAAAAABAAAAAQAAAAAAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAEAAAABAAAAFHN0c3oAAAAAAAAAEwAAAAEAAAAUc3RjbwAAAAAAAAABAAAALAAAAGB1ZHRhAAAAWG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAK2lsc3QAAAAjqXRvbwAAABtkYXRhAAAAAQAAAABMYXZmNTIuNzguMw=="));this.request=function(){if(video.paused){video.play()}};this.release=function(){video.pause()}}function iOSWakeLock(){var timer=null;this.request=function(){if(!timer){timer=setInterval(function(){window.location=window.location;setTimeout(window.stop,0)},3e4)}};this.release=function(){if(timer){clearInterval(timer);timer=null}}}function getWakeLock(){var userAgent=navigator.userAgent||navigator.vendor||window.opera;if(userAgent.match(/iPhone/i)||userAgent.match(/iPod/i)){return iOSWakeLock}else{return AndroidWakeLock}}module.exports=getWakeLock()},{"./util.js":68}],71:[function(_dereq_,module,exports){var Util=_dereq_("./util.js");var CardboardVRDisplay=_dereq_("./cardboard-vr-display.js");var MouseKeyboardVRDisplay=_dereq_("./mouse-keyboard-vr-display.js");var VRDisplay=_dereq_("./base.js").VRDisplay;var VRFrameData=_dereq_("./base.js").VRFrameData;var HMDVRDevice=_dereq_("./base.js").HMDVRDevice;var PositionSensorVRDevice=_dereq_("./base.js").PositionSensorVRDevice;var VRDisplayHMDDevice=_dereq_("./display-wrappers.js").VRDisplayHMDDevice;var VRDisplayPositionSensorDevice=_dereq_("./display-wrappers.js").VRDisplayPositionSensorDevice;var version=_dereq_("../package.json").version;function WebVRPolyfill(){this.displays=[];this.devices=[];this.devicesPopulated=false;this.nativeWebVRAvailable=this.isWebVRAvailable();this.nativeLegacyWebVRAvailable=this.isDeprecatedWebVRAvailable();this.nativeGetVRDisplaysFunc=this.nativeWebVRAvailable?navigator.getVRDisplays:null;if(!this.nativeLegacyWebVRAvailable){this.enablePolyfill();if(window.WebVRConfig.ENABLE_DEPRECATED_API){this.enableDeprecatedPolyfill()}}InstallWebVRSpecShim()}WebVRPolyfill.prototype.isWebVRAvailable=function(){return"getVRDisplays"in navigator};WebVRPolyfill.prototype.isDeprecatedWebVRAvailable=function(){return"getVRDevices"in navigator||"mozGetVRDevices"in navigator};WebVRPolyfill.prototype.connectDisplay=function(vrDisplay){vrDisplay.fireVRDisplayConnect_();this.displays.push(vrDisplay)};WebVRPolyfill.prototype.populateDevices=function(){if(this.devicesPopulated){return}var vrDisplay=null;if(this.isCardboardCompatible()){vrDisplay=new CardboardVRDisplay;this.connectDisplay(vrDisplay);if(window.WebVRConfig.ENABLE_DEPRECATED_API){this.devices.push(new VRDisplayHMDDevice(vrDisplay));this.devices.push(new VRDisplayPositionSensorDevice(vrDisplay))}}if(!this.isMobile()&&!window.WebVRConfig.MOUSE_KEYBOARD_CONTROLS_DISABLED){vrDisplay=new MouseKeyboardVRDisplay;this.connectDisplay(vrDisplay);if(window.WebVRConfig.ENABLE_DEPRECATED_API){this.devices.push(new VRDisplayHMDDevice(vrDisplay));this.devices.push(new VRDisplayPositionSensorDevice(vrDisplay))}}this.devicesPopulated=true};WebVRPolyfill.prototype.enablePolyfill=function(){navigator.getVRDisplays=this.getVRDisplays.bind(this);if(this.nativeWebVRAvailable&&window.VRFrameData){var NativeVRFrameData=window.VRFrameData;var nativeFrameData=new window.VRFrameData;var nativeGetFrameData=window.VRDisplay.prototype.getFrameData;window.VRFrameData=VRFrameData;window.VRDisplay.prototype.getFrameData=function(frameData){if(frameData instanceof NativeVRFrameData){nativeGetFrameData.call(this,frameData);return}nativeGetFrameData.call(this,nativeFrameData);frameData.pose=nativeFrameData.pose;Util.copyArray(nativeFrameData.leftProjectionMatrix,frameData.leftProjectionMatrix);Util.copyArray(nativeFrameData.rightProjectionMatrix,frameData.rightProjectionMatrix);Util.copyArray(nativeFrameData.leftViewMatrix,frameData.leftViewMatrix);Util.copyArray(nativeFrameData.rightViewMatrix,frameData.rightViewMatrix)}}window.VRDisplay=VRDisplay;if(navigator&&!navigator.vrEnabled){var self=this;Object.defineProperty(navigator,"vrEnabled",{get:function(){return self.isCardboardCompatible()&&(self.isFullScreenAvailable()||Util.isIOS())}})}if(!("VRFrameData"in window)){window.VRFrameData=VRFrameData}};WebVRPolyfill.prototype.enableDeprecatedPolyfill=function(){
navigator.getVRDevices=this.getVRDevices.bind(this);window.HMDVRDevice=HMDVRDevice;window.PositionSensorVRDevice=PositionSensorVRDevice};WebVRPolyfill.prototype.getVRDisplays=function(){this.populateDevices();var polyfillDisplays=this.displays;if(!this.nativeWebVRAvailable){return Promise.resolve(polyfillDisplays)}var timeoutId;var vrDisplaysNative=this.nativeGetVRDisplaysFunc.call(navigator);var timeoutPromise=new Promise(function(resolve){timeoutId=setTimeout(function(){console.warn("Native WebVR implementation detected, but `getVRDisplays()` failed to resolve. Falling back to polyfill.");resolve([])},window.WebVRConfig.GET_VR_DISPLAYS_TIMEOUT)});return Util.race([vrDisplaysNative,timeoutPromise]).then(function(nativeDisplays){clearTimeout(timeoutId);if(window.WebVRConfig.ALWAYS_APPEND_POLYFILL_DISPLAY){return nativeDisplays.concat(polyfillDisplays)}else{return nativeDisplays.length>0?nativeDisplays:polyfillDisplays}})};WebVRPolyfill.prototype.getVRDevices=function(){console.warn("getVRDevices is deprecated. Please update your code to use getVRDisplays instead.");var self=this;return new Promise(function(resolve,reject){try{if(!self.devicesPopulated){if(self.nativeWebVRAvailable){return navigator.getVRDisplays(function(displays){for(var i=0;i<displays.length;++i){self.devices.push(new VRDisplayHMDDevice(displays[i]));self.devices.push(new VRDisplayPositionSensorDevice(displays[i]))}self.devicesPopulated=true;resolve(self.devices)},reject)}if(self.nativeLegacyWebVRAvailable){return(navigator.getVRDDevices||navigator.mozGetVRDevices)(function(devices){for(var i=0;i<devices.length;++i){if(devices[i]instanceof HMDVRDevice){self.devices.push(devices[i])}if(devices[i]instanceof PositionSensorVRDevice){self.devices.push(devices[i])}}self.devicesPopulated=true;resolve(self.devices)},reject)}}self.populateDevices();resolve(self.devices)}catch(e){reject(e)}})};WebVRPolyfill.prototype.NativeVRFrameData=window.VRFrameData;WebVRPolyfill.prototype.isMobile=function(){return/Android/i.test(navigator.userAgent)||/iPhone|iPad|iPod/i.test(navigator.userAgent)};WebVRPolyfill.prototype.isCardboardCompatible=function(){return this.isMobile()||window.WebVRConfig.FORCE_ENABLE_VR};WebVRPolyfill.prototype.isFullScreenAvailable=function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||false};function InstallWebVRSpecShim(){if("VRDisplay"in window&&!("VRFrameData"in window)){window.VRFrameData=VRFrameData;if(!("depthNear"in window.VRDisplay.prototype)){window.VRDisplay.prototype.depthNear=.01}if(!("depthFar"in window.VRDisplay.prototype)){window.VRDisplay.prototype.depthFar=1e4}window.VRDisplay.prototype.getFrameData=function(frameData){return Util.frameDataFromPose(frameData,this.getPose(),this)}}}WebVRPolyfill.InstallWebVRSpecShim=InstallWebVRSpecShim;WebVRPolyfill.version=version;module.exports.WebVRPolyfill=WebVRPolyfill},{"../package.json":47,"./base.js":48,"./cardboard-vr-display.js":51,"./display-wrappers.js":54,"./mouse-keyboard-vr-display.js":60,"./util.js":68}],72:[function(_dereq_,module,exports){var newline=/\n/;var newlineChar="\n";var whitespace=/\s/;module.exports=function(text,opt){var lines=module.exports.lines(text,opt);return lines.map(function(line){return text.substring(line.start,line.end)}).join("\n")};module.exports.lines=function wordwrap(text,opt){opt=opt||{};if(opt.width===0&&opt.mode!=="nowrap")return[];text=text||"";var width=typeof opt.width==="number"?opt.width:Number.MAX_VALUE;var start=Math.max(0,opt.start||0);var end=typeof opt.end==="number"?opt.end:text.length;var mode=opt.mode;var measure=opt.measure||monospace;if(mode==="pre")return pre(measure,text,start,end,width);else return greedy(measure,text,start,end,width,mode)};function idxOf(text,chr,start,end){var idx=text.indexOf(chr,start);if(idx===-1||idx>end)return end;return idx}function isWhitespace(chr){return whitespace.test(chr)}function pre(measure,text,start,end,width){var lines=[];var lineStart=start;for(var i=start;i<end&&i<text.length;i++){var chr=text.charAt(i);var isNewline=newline.test(chr);if(isNewline||i===end-1){var lineEnd=isNewline?i:i+1;var measured=measure(text,lineStart,lineEnd,width);lines.push(measured);lineStart=i+1}}return lines}function greedy(measure,text,start,end,width,mode){var lines=[];var testWidth=width;if(mode==="nowrap")testWidth=Number.MAX_VALUE;while(start<end&&start<text.length){var newLine=idxOf(text,newlineChar,start,end);while(start<newLine){if(!isWhitespace(text.charAt(start)))break;start++}var measured=measure(text,start,newLine,testWidth);var lineEnd=start+(measured.end-measured.start);var nextStart=lineEnd+newlineChar.length;if(lineEnd<newLine){while(lineEnd>start){if(isWhitespace(text.charAt(lineEnd)))break;lineEnd--}if(lineEnd===start){if(nextStart>start+newlineChar.length)nextStart--;lineEnd=nextStart}else{nextStart=lineEnd;while(lineEnd>start){if(!isWhitespace(text.charAt(lineEnd-newlineChar.length)))break;lineEnd--}}}if(lineEnd>=start){var result=measure(text,start,lineEnd,testWidth);lines.push(result)}start=nextStart}return lines}function monospace(text,start,end,width){var glyphs=Math.min(width,end-start);return{start:start,end:start+glyphs}}},{}],73:[function(_dereq_,module,exports){"use strict";var window=_dereq_("global/window");var isFunction=_dereq_("is-function");var parseHeaders=_dereq_("parse-headers");var xtend=_dereq_("xtend");module.exports=createXHR;createXHR.XMLHttpRequest=window.XMLHttpRequest||noop;createXHR.XDomainRequest="withCredentials"in new createXHR.XMLHttpRequest?createXHR.XMLHttpRequest:window.XDomainRequest;forEachArray(["get","put","post","patch","head","delete"],function(method){createXHR[method==="delete"?"del":method]=function(uri,options,callback){options=initParams(uri,options,callback);options.method=method.toUpperCase();return _createXHR(options)}});function forEachArray(array,iterator){for(var i=0;i<array.length;i++){iterator(array[i])}}function isEmpty(obj){for(var i in obj){if(obj.hasOwnProperty(i))return false}return true}function initParams(uri,options,callback){var params=uri;if(isFunction(options)){callback=options;if(typeof uri==="string"){params={uri:uri}}}else{params=xtend(options,{uri:uri})}params.callback=callback;return params}function createXHR(uri,options,callback){options=initParams(uri,options,callback);return _createXHR(options)}function _createXHR(options){if(typeof options.callback==="undefined"){throw new Error("callback argument missing")}var called=false;var callback=function cbOnce(err,response,body){if(!called){called=true;options.callback(err,response,body)}};function readystatechange(){if(xhr.readyState===4){setTimeout(loadFunc,0)}}function getBody(){var body=undefined;if(xhr.response){body=xhr.response}else{body=xhr.responseText||getXml(xhr)}if(isJson){try{body=JSON.parse(body)}catch(e){}}return body}function errorFunc(evt){clearTimeout(timeoutTimer);if(!(evt instanceof Error)){evt=new Error(""+(evt||"Unknown XMLHttpRequest Error"))}evt.statusCode=0;return callback(evt,failureResponse)}function loadFunc(){if(aborted)return;var status;clearTimeout(timeoutTimer);if(options.useXDR&&xhr.status===undefined){status=200}else{status=xhr.status===1223?204:xhr.status}var response=failureResponse;var err=null;if(status!==0){response={body:getBody(),statusCode:status,method:method,headers:{},url:uri,rawRequest:xhr};if(xhr.getAllResponseHeaders){response.headers=parseHeaders(xhr.getAllResponseHeaders())}}else{err=new Error("Internal XMLHttpRequest Error")}return callback(err,response,response.body)}var xhr=options.xhr||null;if(!xhr){if(options.cors||options.useXDR){xhr=new createXHR.XDomainRequest}else{xhr=new createXHR.XMLHttpRequest}}var key;var aborted;var uri=xhr.url=options.uri||options.url;var method=xhr.method=options.method||"GET";var body=options.body||options.data;var headers=xhr.headers=options.headers||{};var sync=!!options.sync;var isJson=false;var timeoutTimer;var failureResponse={body:undefined,headers:{},statusCode:0,method:method,url:uri,rawRequest:xhr};if("json"in options&&options.json!==false){isJson=true;headers["accept"]||headers["Accept"]||(headers["Accept"]="application/json");if(method!=="GET"&&method!=="HEAD"){headers["content-type"]||headers["Content-Type"]||(headers["Content-Type"]="application/json");body=JSON.stringify(options.json===true?body:options.json)}}xhr.onreadystatechange=readystatechange;xhr.onload=loadFunc;xhr.onerror=errorFunc;xhr.onprogress=function(){};xhr.onabort=function(){aborted=true};xhr.ontimeout=errorFunc;xhr.open(method,uri,!sync,options.username,options.password);if(!sync){xhr.withCredentials=!!options.withCredentials}if(!sync&&options.timeout>0){timeoutTimer=setTimeout(function(){if(aborted)return;aborted=true;xhr.abort("timeout");var e=new Error("XMLHttpRequest timeout");e.code="ETIMEDOUT";errorFunc(e)},options.timeout)}if(xhr.setRequestHeader){for(key in headers){if(headers.hasOwnProperty(key)){xhr.setRequestHeader(key,headers[key])}}}else if(options.headers&&!isEmpty(options.headers)){throw new Error("Headers cannot be set on an XDomainRequest object")}if("responseType"in options){xhr.responseType=options.responseType}if("beforeSend"in options&&typeof options.beforeSend==="function"){options.beforeSend(xhr)}xhr.send(body||null);return xhr}function getXml(xhr){if(xhr.responseType==="document"){return xhr.responseXML}var firefoxBugTakenEffect=xhr.responseXML&&xhr.responseXML.documentElement.nodeName==="parsererror";if(xhr.responseType===""&&!firefoxBugTakenEffect){return xhr.responseXML}return null}function noop(){}},{"global/window":17,"is-function":21,"parse-headers":31,xtend:75}],74:[function(_dereq_,module,exports){module.exports=function xmlparser(){if(typeof self.DOMParser!=="undefined"){return function(str){var parser=new self.DOMParser;return parser.parseFromString(str,"application/xml")}}if(typeof self.ActiveXObject!=="undefined"&&new self.ActiveXObject("Microsoft.XMLDOM")){return function(str){var xmlDoc=new self.ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(str);return xmlDoc}}return function(str){var div=document.createElement("div");div.innerHTML=str;return div}}()},{}],75:[function(_dereq_,module,exports){module.exports=extend;var hasOwnProperty=Object.prototype.hasOwnProperty;function extend(){var target={};for(var i=0;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(hasOwnProperty.call(source,key)){target[key]=source[key]}}}return target}},{}],76:[function(_dereq_,module,exports){module.exports={name:"aframe",version:"0.6.1",description:"A web framework for building virtual reality experiences.",homepage:"https://aframe.io/",main:"dist/aframe-master.js",scripts:{browserify:"browserify src/index.js -s 'AFRAME' -p browserify-derequire",build:"shx mkdir -p build/ && npm run browserify -- --debug -t [envify --INSPECTOR_VERSION dev] -o build/aframe.js",codecov:"codecov",dev:"npm run build && cross-env INSPECTOR_VERSION=dev node ./scripts/budo -t envify",dist:"node scripts/updateVersionLog.js && npm run dist:min && npm run dist:max","dist:max":"npm run browserify -s -- --debug | exorcist dist/aframe-master.js.map > dist/aframe-master.js","dist:min":"npm run browserify -s -- --debug -p [minifyify --map aframe-master.min.js.map --output dist/aframe-master.min.js.map] -o dist/aframe-master.min.js",docs:"markserv --dir docs --port 9001",preghpages:"node ./scripts/preghpages.js",ghpages:"ghpages -p gh-pages/",lint:"semistandard -v | snazzy","lint:fix":"semistandard --fix",precommit:"npm run lint",prerelease:"node scripts/release.js 0.6.0 0.6.1",start:"npm run dev",test:"karma start ./tests/karma.conf.js","test:docs":"node scripts/docsLint.js","test:firefox":"npm test -- --browsers Firefox","test:chrome":"npm test -- --browsers Chrome","test:node":"mocha --ui tdd tests/node"},repository:"aframevr/aframe",license:"MIT",dependencies:{"@tweenjs/tween.js":"^16.8.0","browserify-css":"^0.8.2",debug:"ngokevin/debug#noTimestamp","deep-assign":"^2.0.0","document-register-element":"dmarcos/document-register-element#8ccc532b7",envify:"^3.4.1","load-bmfont":"^1.2.3","object-assign":"^4.0.1",present:"0.0.6","promise-polyfill":"^3.1.0","style-attr":"^1.0.2",three:"^0.86.0","three-bmfont-text":"^2.1.0","webvr-polyfill":"^0.9.36"},devDependencies:{browserify:"^13.1.0","browserify-derequire":"^0.9.4","browserify-istanbul":"^2.0.0",budo:"^9.2.0",chai:"^3.5.0","chai-shallow-deep-equal":"^1.4.0",chalk:"^1.1.3",codecov:"^1.0.1","cross-env":"^5.0.1",exorcist:"^0.4.0",ghpages:"0.0.8","git-rev":"^0.2.1",glob:"^7.1.1",husky:"^0.11.7",istanbul:"^0.4.5",jsdom:"^9.11.0",karma:"1.4.1","karma-browserify":"^5.1.0","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"^2.0.0","karma-coverage":"^1.1.1","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^1.0.0","karma-mocha":"^1.1.1","karma-mocha-reporter":"^2.1.0","karma-sinon-chai":"1.2.4",lolex:"^1.5.1",markserv:"0.0.20",minifyify:"^7.3.3",mocha:"^3.0.2","mozilla-download":"^1.1.1","replace-in-file":"^2.5.3",semistandard:"^9.0.0",shelljs:"^0.7.7",shx:"^0.2.2",sinon:"^1.17.5","sinon-chai":"2.8.0",snazzy:"^5.0.0","too-wordy":"ngokevin/too-wordy",uglifyjs:"^2.4.10","write-good":"^0.9.1"},link:true,browserify:{transform:["browserify-css","envify"]},semistandard:{ignore:["build/**","dist/**","examples/**/shaders/*.js","**/vendor/**"]},keywords:["3d","aframe","cardboard","components","oculus","three","three.js","rift","vive","vr","web-components","webvr"],"browserify-css":{minify:true},engines:{node:">= 4.6.0",npm:"^2.15.9"}}},{}],77:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var THREE=_dereq_("../lib/three");var utils=_dereq_("../utils/");var bind=utils.bind;var checkHasPositionalTracking=utils.device.checkHasPositionalTracking;module.exports.Component=registerComponent("camera",{schema:{active:{"default":true},far:{"default":1e4},fov:{"default":80,min:0},near:{"default":.005,min:0},userHeight:{"default":0,min:0},zoom:{"default":1,min:0}},init:function(){var camera;var el=this.el;var sceneEl=el.sceneEl;this.savedPose=null;camera=this.camera=new THREE.PerspectiveCamera;el.setObject3D("camera",camera);this.onEnterVR=bind(this.onEnterVR,this);this.onExitVR=bind(this.onExitVR,this);sceneEl.addEventListener("enter-vr",this.onEnterVR);sceneEl.addEventListener("exit-vr",this.onExitVR)},update:function(oldData){var el=this.el;var data=this.data;var camera=this.camera;var system=this.system;this.addHeightOffset(oldData.userHeight);camera.aspect=data.aspect||window.innerWidth/window.innerHeight;camera.far=data.far;camera.fov=data.fov;camera.near=data.near;camera.zoom=data.zoom;camera.updateProjectionMatrix();if(oldData&&oldData.active===data.active){return}if(data.active&&system.activeCameraEl!==el){system.setActiveCamera(el)}else if(!data.active&&system.activeCameraEl===el){system.disableActiveCamera()}},remove:function(){var sceneEl=this.el.sceneEl;this.el.removeObject3D("camera");sceneEl.removeEventListener("enter-vr",this.onEnterVR);sceneEl.removeEventListener("exit-vr",this.onExitVR)},onEnterVR:function(){this.saveCameraPose();this.removeHeightOffset()},onExitVR:function(){this.restoreCameraPose()},addHeightOffset:function(oldOffset){var el=this.el;var currentPosition;var userHeightOffset=this.data.userHeight;oldOffset=oldOffset||0;currentPosition=el.getAttribute("position")||{x:0,y:0,z:0};el.setAttribute("position",{x:currentPosition.x,y:currentPosition.y-oldOffset+userHeightOffset,z:currentPosition.z})},removeHeightOffset:function(){var currentPosition;var el=this.el;var hasPositionalTracking;var userHeightOffset=this.data.userHeight;hasPositionalTracking=this.hasPositionalTracking!==undefined?this.hasPositionalTracking:checkHasPositionalTracking();if(!userHeightOffset||!hasPositionalTracking){return}currentPosition=el.getAttribute("position")||{x:0,y:0,z:0};el.setAttribute("position",{x:currentPosition.x,y:currentPosition.y-userHeightOffset,z:currentPosition.z})},saveCameraPose:function(){var el=this.el;var hasPositionalTracking=this.hasPositionalTracking!==undefined?this.hasPositionalTracking:checkHasPositionalTracking();if(this.savedPose||!hasPositionalTracking){return}this.savedPose={position:el.getAttribute("position"),rotation:el.getAttribute("rotation")}},restoreCameraPose:function(){var el=this.el;var savedPose=this.savedPose;var hasPositionalTracking=this.hasPositionalTracking!==undefined?this.hasPositionalTracking:checkHasPositionalTracking();if(!savedPose||!hasPositionalTracking){return}el.setAttribute("position",savedPose.position);el.setAttribute("rotation",savedPose.rotation);this.savedPose=null}})},{"../core/component":125,"../lib/three":173,"../utils/":196}],78:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var THREE=_dereq_("../lib/three");module.exports.Component=registerComponent("collada-model",{schema:{type:"asset"},init:function(){this.model=null;this.loader=new THREE.ColladaLoader;this.loader.options.convertUpAxis=true},update:function(){var self=this;var el=this.el;var src=this.data;if(!src){return}this.remove();this.loader.load(src,function(colladaModel){self.model=colladaModel.scene;el.setObject3D("mesh",self.model);el.emit("model-loaded",{format:"collada",model:self.model})})},remove:function(){if(!this.model){return}this.el.removeObject3D("mesh")}})},{"../core/component":125,"../lib/three":173}],79:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var utils=_dereq_("../utils/");var bind=utils.bind;var EVENTS={CLICK:"click",FUSING:"fusing",MOUSEENTER:"mouseenter",MOUSEDOWN:"mousedown",MOUSELEAVE:"mouseleave",MOUSEUP:"mouseup"};var STATES={FUSING:"cursor-fusing",HOVERING:"cursor-hovering",HOVERED:"cursor-hovered"};module.exports.Component=registerComponent("cursor",{dependencies:["raycaster"],schema:{downEvents:{"default":[]},fuse:{"default":utils.device.isMobile()},fuseTimeout:{"default":1500,min:0},upEvents:{"default":[]},rayOrigin:{"default":"entity",oneOf:["mouse","entity"]}},init:function(){this.fuseTimeout=undefined;this.cursorDownEl=null;this.intersection=null;this.intersectedEl=null;this.onCursorDown=bind(this.onCursorDown,this);this.onCursorUp=bind(this.onCursorUp,this);this.onIntersection=bind(this.onIntersection,this);this.onIntersectionCleared=bind(this.onIntersectionCleared,this);this.onMouseMove=bind(this.onMouseMove,this)},update:function(oldData){if(this.data.rayOrigin===oldData.rayOrigin){return}this.updateMouseEventListeners()},play:function(){this.addEventListeners()},pause:function(){this.removeEventListeners()},remove:function(){var el=this.el;el.removeState(STATES.HOVERING);el.removeState(STATES.FUSING);clearTimeout(this.fuseTimeout);if(this.intersectedEl){this.intersectedEl.removeState(STATES.HOVERED)}this.removeEventListeners()},addEventListeners:function(){var canvas;var data=this.data;var el=this.el;var self=this;canvas=el.sceneEl.canvas;if(canvas){canvas.addEventListener("mousedown",this.onCursorDown);canvas.addEventListener("mouseup",this.onCursorUp)}else{el.sceneEl.addEventListener("render-target-loaded",function(){canvas=el.sceneEl.canvas;canvas.addEventListener("mousedown",self.onCursorDown);canvas.addEventListener("mouseup",self.onCursorUp)})}data.downEvents.forEach(function(downEvent){el.addEventListener(downEvent,self.onCursorDown)});data.upEvents.forEach(function(upEvent){el.addEventListener(upEvent,self.onCursorUp)});el.addEventListener("raycaster-intersection",this.onIntersection);el.addEventListener("raycaster-intersection-cleared",this.onIntersectionCleared)},removeEventListeners:function(){var canvas;var data=this.data;var el=this.el;var self=this;canvas=el.sceneEl.canvas;if(canvas){canvas.removeEventListener("mousedown",this.onCursorDown);canvas.removeEventListener("mouseup",this.onCursorUp)}data.downEvents.forEach(function(downEvent){el.removeEventListener(downEvent,self.onCursorDown)});data.upEvents.forEach(function(upEvent){el.removeEventListener(upEvent,self.onCursorUp)});el.removeEventListener("raycaster-intersection",this.onIntersection);el.removeEventListener("raycaster-intersection-cleared",this.onIntersectionCleared);window.removeEventListener("mousemove",this.onMouseMove)},updateMouseEventListeners:function(){var el=this.el;window.removeEventListener("mousemove",this.onMouseMove);el.setAttribute("raycaster","useWorldCoordinates",false);if(this.data.rayOrigin!=="mouse"){return}window.addEventListener("mousemove",this.onMouseMove,false);el.setAttribute("raycaster","useWorldCoordinates",true)},onMouseMove:function(){var mouse=new THREE.Vector2;var origin=new THREE.Vector3;var direction=new THREE.Vector3;var rayCasterConfig={origin:origin,direction:direction};return function(evt){var camera=this.el.sceneEl.camera;camera.parent.updateMatrixWorld();camera.updateMatrixWorld();mouse.x=evt.clientX/window.innerWidth*2-1;mouse.y=-(evt.clientY/window.innerHeight)*2+1;origin.setFromMatrixPosition(camera.matrixWorld);direction.set(mouse.x,mouse.y,.5).unproject(camera).sub(origin).normalize();this.el.setAttribute("raycaster",rayCasterConfig)}}(),onCursorDown:function(evt){this.twoWayEmit(EVENTS.MOUSEDOWN);this.cursorDownEl=this.intersectedEl},onCursorUp:function(evt){this.twoWayEmit(EVENTS.MOUSEUP);if(this.cursorDownEl&&this.cursorDownEl!==this.intersectedEl){this.cursorDownEl.emit(EVENTS.MOUSEUP,{cursorEl:this.el,intersection:null})}if(!this.data.fuse&&this.intersectedEl&&this.cursorDownEl===this.intersectedEl){this.twoWayEmit(EVENTS.CLICK)}this.cursorDownEl=null},onIntersection:function(evt){var self=this;var cursorEl=this.el;var data=this.data;var index;var intersectedEl;var intersection;index=evt.detail.els[0]===cursorEl?1:0;intersection=evt.detail.intersections[index];intersectedEl=evt.detail.els[index];if(!intersectedEl){return}if(this.intersectedEl===intersectedEl){this.intersection=intersection;return}if(this.intersectedEl){this.clearCurrentIntersection()}this.intersection=intersection;this.intersectedEl=intersectedEl;cursorEl.addState(STATES.HOVERING);intersectedEl.addState(STATES.HOVERED);self.twoWayEmit(EVENTS.MOUSEENTER);if(data.fuseTimeout===0||!data.fuse){return}cursorEl.addState(STATES.FUSING);this.twoWayEmit(EVENTS.FUSING);this.fuseTimeout=setTimeout(function fuse(){cursorEl.removeState(STATES.FUSING);self.twoWayEmit(EVENTS.CLICK)},data.fuseTimeout)},onIntersectionCleared:function(evt){var cursorEl=this.el;var intersectedEl=evt.detail.el;if(cursorEl===intersectedEl){return}if(intersectedEl!==this.intersectedEl){return}this.clearCurrentIntersection()},clearCurrentIntersection:function(){var cursorEl=this.el;this.intersectedEl.removeState(STATES.HOVERED);cursorEl.removeState(STATES.HOVERING);cursorEl.removeState(STATES.FUSING);this.twoWayEmit(EVENTS.MOUSELEAVE);this.intersection=null;this.intersectedEl=null;clearTimeout(this.fuseTimeout)},twoWayEmit:function(evtName){var el=this.el;var intersectedEl=this.intersectedEl;var intersection=this.intersection;el.emit(evtName,{intersectedEl:intersectedEl,intersection:intersection});if(!intersectedEl){return}intersectedEl.emit(evtName,{cursorEl:el,intersection:intersection})}})},{"../core/component":125,"../utils/":196}],80:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var bind=_dereq_("../utils/bind");var checkControllerPresentAndSetup=_dereq_("../utils/tracked-controls").checkControllerPresentAndSetup;var emitIfAxesChanged=_dereq_("../utils/tracked-controls").emitIfAxesChanged;var DAYDREAM_CONTROLLER_MODEL_BASE_URL="https://cdn.aframe.io/controllers/google/";var DAYDREAM_CONTROLLER_MODEL_OBJ_URL=DAYDREAM_CONTROLLER_MODEL_BASE_URL+"vr_controller_daydream.obj";var DAYDREAM_CONTROLLER_MODEL_OBJ_MTL=DAYDREAM_CONTROLLER_MODEL_BASE_URL+"vr_controller_daydream.mtl";var GAMEPAD_ID_PREFIX="Daydream Controller";module.exports.Component=registerComponent("daydream-controls",{schema:{hand:{"default":""},buttonColor:{type:"color","default":"#000000"},buttonTouchedColor:{type:"color","default":"#777777"},buttonHighlightColor:{type:"color","default":"#FFFFFF"},model:{"default":true},rotationOffset:{"default":0},armModel:{"default":true}},mapping:{axes:{trackpad:[0,1]},buttons:["trackpad","menu","system"]},axisLabels:["x","y","z","w"],bindMethods:function(){this.onModelLoaded=bind(this.onModelLoaded,this);this.onControllersUpdate=bind(this.onControllersUpdate,this);this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this);this.removeControllersUpdateListener=bind(this.removeControllersUpdateListener,this);this.onAxisMoved=bind(this.onAxisMoved,this);this.onGamepadConnectionEvent=bind(this.onGamepadConnectionEvent,this)},init:function(){var self=this;this.animationActive="pointing";this.onButtonChanged=bind(this.onButtonChanged,this);this.onButtonDown=function(evt){self.onButtonEvent(evt.detail.id,"down")};this.onButtonUp=function(evt){self.onButtonEvent(evt.detail.id,"up")};this.onButtonTouchStart=function(evt){self.onButtonEvent(evt.detail.id,"touchstart")};this.onButtonTouchEnd=function(evt){self.onButtonEvent(evt.detail.id,"touchend")};this.onAxisMoved=bind(this.onAxisMoved,this);this.controllerPresent=false;this.everGotGamepadEvent=false;this.lastControllerCheck=0;this.bindMethods();this.checkControllerPresentAndSetup=checkControllerPresentAndSetup;this.emitIfAxesChanged=emitIfAxesChanged},addEventListeners:function(){var el=this.el;el.addEventListener("buttonchanged",this.onButtonChanged);el.addEventListener("buttondown",this.onButtonDown);el.addEventListener("buttonup",this.onButtonUp);el.addEventListener("touchstart",this.onButtonTouchStart);el.addEventListener("touchend",this.onButtonTouchEnd);el.addEventListener("model-loaded",this.onModelLoaded);el.addEventListener("axismove",this.onAxisMoved);this.controllerEventsActive=true},removeEventListeners:function(){var el=this.el;el.removeEventListener("buttonchanged",this.onButtonChanged);el.removeEventListener("buttondown",this.onButtonDown);el.removeEventListener("buttonup",this.onButtonUp);el.removeEventListener("touchstart",this.onButtonTouchStart);el.removeEventListener("touchend",this.onButtonTouchEnd);el.removeEventListener("model-loaded",this.onModelLoaded);el.removeEventListener("axismove",this.onAxisMoved);this.controllerEventsActive=false},checkIfControllerPresent:function(){this.checkControllerPresentAndSetup(this,GAMEPAD_ID_PREFIX,{hand:this.data.hand})},onGamepadConnectionEvent:function(evt){this.everGotGamepadEvent=true;this.checkIfControllerPresent()},play:function(){this.checkIfControllerPresent();this.addControllersUpdateListener();window.addEventListener("gamepadconnected",this.onGamepadConnectionEvent,false);window.addEventListener("gamepaddisconnected",this.onGamepadConnectionEvent,false)},pause:function(){this.removeEventListeners();this.removeControllersUpdateListener();window.removeEventListener("gamepadconnected",this.onGamepadConnectionEvent,false);window.removeEventListener("gamepaddisconnected",this.onGamepadConnectionEvent,false)},injectTrackedControls:function(){var el=this.el;var data=this.data;el.setAttribute("tracked-controls",{idPrefix:GAMEPAD_ID_PREFIX,hand:data.hand,rotationOffset:data.rotationOffset,armModel:data.armModel});if(!this.data.model){return}this.el.setAttribute("obj-model",{obj:DAYDREAM_CONTROLLER_MODEL_OBJ_URL,mtl:DAYDREAM_CONTROLLER_MODEL_OBJ_MTL})},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,false)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,false)},onControllersUpdate:function(){if(!this.everGotGamepadEvent){this.checkIfControllerPresent()}},onModelLoaded:function(evt){var controllerObject3D=evt.detail.model;var buttonMeshes;if(!this.data.model){return}buttonMeshes=this.buttonMeshes={};buttonMeshes.menu=controllerObject3D.getObjectByName("AppButton_AppButton_Cylinder.004");buttonMeshes.system=controllerObject3D.getObjectByName("HomeButton_HomeButton_Cylinder.005");buttonMeshes.trackpad=controllerObject3D.getObjectByName("TouchPad_TouchPad_Cylinder.003");controllerObject3D.position.set(0,0,-.04)},onAxisMoved:function(evt){this.emitIfAxesChanged(this,this.mapping.axes,evt)},onButtonChanged:function(evt){var button=this.mapping.buttons[evt.detail.id];if(!button)return;this.el.emit(button+"changed",evt.detail.state)},onButtonEvent:function(id,evtName){var buttonName=this.mapping.buttons[id];var i;if(Array.isArray(buttonName)){for(i=0;i<buttonName.length;i++){this.el.emit(buttonName[i]+evtName)}}else{this.el.emit(buttonName+evtName)}this.updateModel(buttonName,evtName)},updateModel:function(buttonName,evtName){var i;if(!this.data.model){return}if(Array.isArray(buttonName)){for(i=0;i<buttonName.length;i++){this.updateButtonModel(buttonName[i],evtName)}}else{this.updateButtonModel(buttonName,evtName)}},updateButtonModel:function(buttonName,state){var buttonMeshes=this.buttonMeshes;if(!buttonMeshes||!buttonMeshes[buttonName]){return}var color;switch(state){case"down":color=this.data.buttonHighlightColor;break;case"touchstart":color=this.data.buttonTouchedColor;break;default:color=this.data.buttonColor}buttonMeshes[buttonName].material.color.set(color)}})},{"../core/component":125,"../utils/bind":190,"../utils/tracked-controls":200}],81:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var bind=_dereq_("../utils/bind");var checkControllerPresentAndSetup=_dereq_("../utils/tracked-controls").checkControllerPresentAndSetup;var emitIfAxesChanged=_dereq_("../utils/tracked-controls").emitIfAxesChanged;var GEARVR_CONTROLLER_MODEL_BASE_URL="https://cdn.aframe.io/controllers/samsung/";var GEARVR_CONTROLLER_MODEL_OBJ_URL=GEARVR_CONTROLLER_MODEL_BASE_URL+"gear_vr_controller.obj";var GEARVR_CONTROLLER_MODEL_OBJ_MTL=GEARVR_CONTROLLER_MODEL_BASE_URL+"gear_vr_controller.mtl";var GAMEPAD_ID_PREFIX="Gear VR";module.exports.Component=registerComponent("gearvr-controls",{schema:{hand:{"default":""},buttonColor:{type:"color","default":"#000000"},buttonTouchedColor:{type:"color","default":"#777777"},buttonHighlightColor:{type:"color","default":"#FFFFFF"},model:{"default":true},rotationOffset:{"default":0},armModel:{"default":true}},mapping:{axes:{trackpad:[0,1]},buttons:["trackpad","trigger"]},axisLabels:["x","y","z","w"],bindMethods:function(){this.onModelLoaded=bind(this.onModelLoaded,this);this.onControllersUpdate=bind(this.onControllersUpdate,this);this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this);this.removeControllersUpdateListener=bind(this.removeControllersUpdateListener,this);this.onAxisMoved=bind(this.onAxisMoved,this);this.onGamepadConnectionEvent=bind(this.onGamepadConnectionEvent,this)},init:function(){var self=this;this.animationActive="pointing";this.onButtonChanged=bind(this.onButtonChanged,this);this.onButtonDown=function(evt){self.onButtonEvent(evt.detail.id,"down")};this.onButtonUp=function(evt){self.onButtonEvent(evt.detail.id,"up")};this.onButtonTouchStart=function(evt){self.onButtonEvent(evt.detail.id,"touchstart")};this.onButtonTouchEnd=function(evt){self.onButtonEvent(evt.detail.id,"touchend")};this.onAxisMoved=bind(this.onAxisMoved,this);this.controllerPresent=false;this.everGotGamepadEvent=false;this.lastControllerCheck=0;this.bindMethods();this.checkControllerPresentAndSetup=checkControllerPresentAndSetup;this.emitIfAxesChanged=emitIfAxesChanged},addEventListeners:function(){var el=this.el;el.addEventListener("buttonchanged",this.onButtonChanged);el.addEventListener("buttondown",this.onButtonDown);el.addEventListener("buttonup",this.onButtonUp);el.addEventListener("touchstart",this.onButtonTouchStart);el.addEventListener("touchend",this.onButtonTouchEnd);el.addEventListener("model-loaded",this.onModelLoaded);el.addEventListener("axismove",this.onAxisMoved);this.controllerEventsActive=true;this.addControllersUpdateListener()},removeEventListeners:function(){var el=this.el;
el.removeEventListener("buttonchanged",this.onButtonChanged);el.removeEventListener("buttondown",this.onButtonDown);el.removeEventListener("buttonup",this.onButtonUp);el.removeEventListener("touchstart",this.onButtonTouchStart);el.removeEventListener("touchend",this.onButtonTouchEnd);el.removeEventListener("model-loaded",this.onModelLoaded);el.removeEventListener("axismove",this.onAxisMoved);this.controllerEventsActive=false;this.removeControllersUpdateListener()},checkIfControllerPresent:function(){this.checkControllerPresentAndSetup(this,GAMEPAD_ID_PREFIX,this.data.hand?{hand:this.data.hand}:{})},onGamepadConnectionEvent:function(evt){this.checkIfControllerPresent()},play:function(){this.checkIfControllerPresent();window.addEventListener("gamepaddisconnected",this.checkIfControllerPresent,false);this.addControllersUpdateListener()},pause:function(){this.removeEventListeners();this.removeControllersUpdateListener();window.removeEventListener("gamepaddisconnected",this.checkIfControllerPresent,false)},injectTrackedControls:function(){var el=this.el;var data=this.data;el.setAttribute("tracked-controls",{idPrefix:GAMEPAD_ID_PREFIX,rotationOffset:data.rotationOffset,armModel:data.armModel});if(!this.data.model){return}this.el.setAttribute("obj-model",{obj:GEARVR_CONTROLLER_MODEL_OBJ_URL,mtl:GEARVR_CONTROLLER_MODEL_OBJ_MTL})},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,false)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,false)},onControllersUpdate:function(){this.checkIfControllerPresent()},onModelLoaded:function(evt){var controllerObject3D=evt.detail.model;var buttonMeshes;if(!this.data.model){return}buttonMeshes=this.buttonMeshes={};buttonMeshes.trigger=controllerObject3D.getObjectByName("Trigger");buttonMeshes.trackpad=controllerObject3D.getObjectByName("Touchpad")},onButtonChanged:function(evt){var button=this.mapping.buttons[evt.detail.id];if(!button)return;this.el.emit(button+"changed",evt.detail.state)},onButtonEvent:function(id,evtName){var buttonName=this.mapping.buttons[id];var i;if(Array.isArray(buttonName)){for(i=0;i<buttonName.length;i++){this.el.emit(buttonName[i]+evtName)}}else{this.el.emit(buttonName+evtName)}this.updateModel(buttonName,evtName)},onAxisMoved:function(evt){this.emitIfAxesChanged(this,this.mapping.axes,evt)},updateModel:function(buttonName,evtName){var i;if(!this.data.model){return}if(Array.isArray(buttonName)){for(i=0;i<buttonName.length;i++){this.updateButtonModel(buttonName[i],evtName)}}else{this.updateButtonModel(buttonName,evtName)}},updateButtonModel:function(buttonName,state){var buttonMeshes=this.buttonMeshes;if(!buttonMeshes||!buttonMeshes[buttonName]){return}var color;switch(state){case"down":color=this.data.buttonHighlightColor;break;case"touchstart":color=this.data.buttonTouchedColor;break;default:color=this.data.buttonColor}buttonMeshes[buttonName].material.color.set(color)}})},{"../core/component":125,"../utils/bind":190,"../utils/tracked-controls":200}],82:[function(_dereq_,module,exports){var debug=_dereq_("../utils/debug");var geometries=_dereq_("../core/geometry").geometries;var geometryNames=_dereq_("../core/geometry").geometryNames;var registerComponent=_dereq_("../core/component").registerComponent;var THREE=_dereq_("../lib/three");var dummyGeometry=new THREE.Geometry;var warn=debug("components:geometry:warn");module.exports.Component=registerComponent("geometry",{schema:{buffer:{"default":true},mergeTo:{type:"selector"},primitive:{"default":"box",oneOf:geometryNames},skipCache:{"default":false}},init:function(){this.geometry=null},update:function(previousData){var data=this.data;var mesh=this.el.getOrCreateObject3D("mesh",THREE.Mesh);var system=this.system;if(this.geometry){system.unuseGeometry(previousData);this.geometry=null}this.geometry=mesh.geometry=system.getOrCreateGeometry(data);if(data.mergeTo){this.mergeTo(data.mergeTo)}},mergeTo:function(toEl){var el=this.el;var mesh=el.getObject3D("mesh");var toMesh;if(!toEl||!toEl.isEntity){warn("There is not a valid entity to merge the geometry to");return}if(toEl===el){warn("Source and target geometries cannot be the same for merge");return}toMesh=toEl.getObject3D("mesh");if(!toMesh){toMesh=toEl.getOrCreateObject3D("mesh",THREE.Mesh);toEl.setAttribute("material",el.getAttribute("material"));return}if(toMesh.geometry instanceof THREE.Geometry===false||mesh.geometry instanceof THREE.Geometry===false){warn("Geometry merge is only available for `THREE.Geometry` types. "+"Check that both of the merging geometry and the target geometry have `buffer` "+"set to false");return}if(this.data.skipCache===false){warn("Cached geometries are not allowed to merge. Set `skipCache` to true");return}mesh.parent.updateMatrixWorld();toMesh.geometry.merge(mesh.geometry,mesh.matrixWorld);el.emit("geometry-merged",{mergeTarget:toEl});el.parentNode.removeChild(el)},remove:function(){this.system.unuseGeometry(this.data);this.el.getObject3D("mesh").geometry=dummyGeometry;this.geometry=null},updateSchema:function(data){var newGeometryType=data.primitive;var currentGeometryType=this.data&&this.data.primitive;var schema=geometries[newGeometryType]&&geometries[newGeometryType].schema;if(!schema){throw new Error("Unknown geometry schema `"+newGeometryType+"`")}if(currentGeometryType&¤tGeometryType===newGeometryType){return}this.extendSchema(schema)}})},{"../core/component":125,"../core/geometry":126,"../lib/three":173,"../utils/debug":192}],83:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var THREE=_dereq_("../lib/three");module.exports.Component=registerComponent("gltf-model",{schema:{type:"model"},init:function(){this.model=null;this.loader=new THREE.GLTFLoader},update:function(){var self=this;var el=this.el;var src=this.data;if(!src){return}this.remove();this.loader.load(src,function gltfLoaded(gltfModel){self.model=gltfModel.scene||gltfModel.scenes[0];self.model.animations=gltfModel.animations;self.system.registerModel(self.model);el.setObject3D("mesh",self.model);el.emit("model-loaded",{format:"gltf",model:self.model})})},remove:function(){if(!this.model){return}this.el.removeObject3D("mesh");this.system.unregisterModel(this.model)}})},{"../core/component":125,"../lib/three":173}],84:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var MODEL_URLS={left:"https://cdn.aframe.io/controllers/oculus-hands/v2/leftHand.json",right:"https://cdn.aframe.io/controllers/oculus-hands/v2/rightHand.json"};var ANIMATIONS={open:"Open",point:"Point",pointThumb:"Point + Thumb",fist:"Fist",hold:"Hold",thumbUp:"Thumb Up"};var EVENTS={};EVENTS[ANIMATIONS.fist]="grip";EVENTS[ANIMATIONS.thumbUp]="pistol";EVENTS[ANIMATIONS.point]="pointing";EVENTS[ANIMATIONS.thumb]="thumb";module.exports.Component=registerComponent("hand-controls",{schema:{"default":"left"},init:function(){var self=this;this.gesture=ANIMATIONS.open;this.pressedButtons={};this.touchedButtons={};this.loader=new THREE.ObjectLoader;this.loader.setCrossOrigin("anonymous");this.onGripDown=function(){self.handleButton("grip","down")};this.onGripUp=function(){self.handleButton("grip","up")};this.onTrackpadDown=function(){self.handleButton("trackpad","down")};this.onTrackpadUp=function(){self.handleButton("trackpad","up")};this.onTrackpadTouchStart=function(){self.handleButton("trackpad","touchstart")};this.onTrackpadTouchEnd=function(){self.handleButton("trackpad","touchend")};this.onTriggerDown=function(){self.handleButton("trigger","down")};this.onTriggerUp=function(){self.handleButton("trigger","up")};this.onTriggerTouchStart=function(){self.handleButton("trigger","touchstart")};this.onTriggerTouchEnd=function(){self.handleButton("trigger","touchend")};this.onGripTouchStart=function(){self.handleButton("grip","touchstart")};this.onGripTouchEnd=function(){self.handleButton("grip","touchend")};this.onThumbstickDown=function(){self.handleButton("thumbstick","down")};this.onThumbstickUp=function(){self.handleButton("thumbstick","up")};this.onAorXTouchStart=function(){self.handleButton("AorX","touchstart")};this.onAorXTouchEnd=function(){self.handleButton("AorX","touchend")};this.onBorYTouchStart=function(){self.handleButton("BorY","touchstart")};this.onBorYTouchEnd=function(){self.handleButton("BorY","touchend")};this.onSurfaceTouchStart=function(){self.handleButton("surface","touchstart")};this.onSurfaceTouchEnd=function(){self.handleButton("surface","touchend")}},play:function(){this.addEventListeners()},pause:function(){this.removeEventListeners()},tick:function(time,delta){var mesh=this.el.getObject3D("mesh");if(!mesh){return}mesh.mixer.update(delta/1e3)},addEventListeners:function(){var el=this.el;el.addEventListener("gripdown",this.onGripDown);el.addEventListener("gripup",this.onGripUp);el.addEventListener("trackpaddown",this.onTrackpadDown);el.addEventListener("trackpadup",this.onTrackpadUp);el.addEventListener("trackpadtouchstart",this.onTrackpadTouchStart);el.addEventListener("trackpadtouchend",this.onTrackpadTouchEnd);el.addEventListener("triggerdown",this.onTriggerDown);el.addEventListener("triggerup",this.onTriggerUp);el.addEventListener("triggertouchstart",this.onTriggerTouchStart);el.addEventListener("triggertouchend",this.onTriggerTouchEnd);el.addEventListener("griptouchstart",this.onGripTouchStart);el.addEventListener("griptouchend",this.onGripTouchEnd);el.addEventListener("thumbstickdown",this.onThumbstickDown);el.addEventListener("thumbstickup",this.onThumbstickUp);el.addEventListener("abuttontouchstart",this.onAorXTouchStart);el.addEventListener("abuttontouchend",this.onAorXTouchEnd);el.addEventListener("bbuttontouchstart",this.onBorYTouchStart);el.addEventListener("bbuttontouchend",this.onBorYTouchEnd);el.addEventListener("xbuttontouchstart",this.onAorXTouchStart);el.addEventListener("xbuttontouchend",this.onAorXTouchEnd);el.addEventListener("ybuttontouchstart",this.onBorYTouchStart);el.addEventListener("ybuttontouchend",this.onBorYTouchEnd);el.addEventListener("surfacetouchstart",this.onSurfaceTouchStart);el.addEventListener("surfacetouchend",this.onSurfaceTouchEnd)},removeEventListeners:function(){var el=this.el;el.removeEventListener("gripdown",this.onGripDown);el.removeEventListener("gripup",this.onGripUp);el.removeEventListener("trackpaddown",this.onTrackpadDown);el.removeEventListener("trackpadup",this.onTrackpadUp);el.removeEventListener("trackpadtouchstart",this.onTrackpadTouchStart);el.removeEventListener("trackpadtouchend",this.onTrackpadTouchEnd);el.removeEventListener("triggerdown",this.onTriggerDown);el.removeEventListener("triggerup",this.onTriggerUp);el.removeEventListener("triggertouchstart",this.onTriggerTouchStart);el.removeEventListener("triggertouchend",this.onTriggerTouchEnd);el.removeEventListener("griptouchstart",this.onGripTouchStart);el.removeEventListener("griptouchend",this.onGripTouchEnd);el.removeEventListener("thumbstickdown",this.onThumbstickDown);el.removeEventListener("thumbstickup",this.onThumbstickUp);el.removeEventListener("abuttontouchstart",this.onAorXTouchStart);el.removeEventListener("abuttontouchend",this.onAorXTouchEnd);el.removeEventListener("bbuttontouchstart",this.onBorYTouchStart);el.removeEventListener("bbuttontouchend",this.onBorYTouchEnd);el.removeEventListener("xbuttontouchstart",this.onAorXTouchStart);el.removeEventListener("xbuttontouchend",this.onAorXTouchEnd);el.removeEventListener("ybuttontouchstart",this.onBorYTouchStart);el.removeEventListener("ybuttontouchend",this.onBorYTouchEnd);el.removeEventListener("surfacetouchstart",this.onSurfaceTouchStart);el.removeEventListener("surfacetouchend",this.onSurfaceTouchEnd)},update:function(previousHand){var controlConfiguration;var el=this.el;var hand=this.data;controlConfiguration={hand:hand,model:false,rotationOffset:hand==="left"?90:-90};el.setAttribute("vive-controls",controlConfiguration);el.setAttribute("oculus-touch-controls",controlConfiguration);if(hand!==previousHand){this.loader.load(MODEL_URLS[hand],function(scene){var mesh=scene.getObjectByName("Hand");mesh.material.skinning=true;mesh.mixer=new THREE.AnimationMixer(mesh);el.setObject3D("mesh",mesh)})}},remove:function(){this.el.removeObject3D("mesh")},handleButton:function(button,evt){var lastGesture;var isPressed=evt==="down";var isTouched=evt==="touchstart";if(evt.indexOf("touch")===0){if(isTouched===this.touchedButtons[button]){return}this.touchedButtons[button]=isTouched}else{if(isPressed===this.pressedButtons[button]){return}this.pressedButtons[button]=isPressed}lastGesture=this.gesture;this.gesture=this.determineGesture();if(this.gesture===lastGesture){return}this.animateGesture(this.gesture,lastGesture);this.emitGestureEvents(this.gesture,lastGesture)},determineGesture:function(){var gesture;var isGripActive=this.pressedButtons["grip"];var isSurfaceActive=this.pressedButtons["surface"]||this.touchedButtons["surface"];var isTrackpadActive=this.pressedButtons["trackpad"]||this.touchedButtons["trackpad"];var isTriggerActive=this.pressedButtons["trigger"]||this.touchedButtons["trigger"];var isABXYActive=this.touchedButtons["AorX"]||this.touchedButtons["BorY"];var isOculusTouch=isOculusTouchController(this.el.components["tracked-controls"]);if(isGripActive){if(!isOculusTouch){gesture=ANIMATIONS.fist}else if(isSurfaceActive||isABXYActive||isTrackpadActive){gesture=isTriggerActive?ANIMATIONS.fist:ANIMATIONS.point}else{gesture=isTriggerActive?ANIMATIONS.thumbUp:ANIMATIONS.pointThumb}}else{if(isTriggerActive){gesture=isOculusTouch?ANIMATIONS.hold:ANIMATIONS.fist}else if(!isOculusTouch&&isTrackpadActive){gesture=ANIMATIONS.point}}return gesture},animateGesture:function(gesture,lastGesture){if(gesture){this.playAnimation(gesture||ANIMATIONS.open,lastGesture,false);return}this.playAnimation(lastGesture,lastGesture,true)},emitGestureEvents:function(gesture,lastGesture){var el=this.el;var eventName;if(lastGesture===gesture){return}eventName=getGestureEventName(lastGesture,false);if(eventName){el.emit(eventName)}eventName=getGestureEventName(gesture,true);if(eventName){el.emit(eventName)}},playAnimation:function(gesture,lastGesture,reverse){var fromAction;var mesh=this.el.getObject3D("mesh");var toAction;if(!mesh){return}toAction=mesh.mixer.clipAction(gesture);toAction.clampWhenFinished=true;toAction.loop=THREE.PingPong;toAction.repetitions=0;toAction.timeScale=reverse?-1:1;toAction.weight=1;if(!lastGesture||gesture===lastGesture){mesh.mixer.stopAllAction();toAction.play();return}fromAction=mesh.mixer.clipAction(lastGesture);mesh.mixer.stopAllAction();fromAction.weight=.15;fromAction.play();toAction.play();fromAction.crossFadeTo(toAction,.15,true)}});function getGestureEventName(gesture,active){var eventName;if(!gesture){return}eventName=EVENTS[gesture];if(eventName==="grip"){return eventName+(active?"close":"open")}if(eventName==="point"||eventName==="thumb"){return eventName+(active?"up":"down")}if(eventName==="pointing"||eventName==="pistol"){return eventName+(active?"start":"end")}return}function isOculusTouchController(trackedControls){var controllerId=trackedControls&&trackedControls.controller&&trackedControls.controller.id;return controllerId&&controllerId.indexOf("Oculus Touch")===0}},{"../core/component":125}],85:[function(_dereq_,module,exports){_dereq_("./camera");_dereq_("./collada-model");_dereq_("./cursor");_dereq_("./daydream-controls");_dereq_("./gearvr-controls");_dereq_("./geometry");_dereq_("./gltf-model");_dereq_("./hand-controls");_dereq_("./laser-controls");_dereq_("./light");_dereq_("./line");_dereq_("./link");_dereq_("./look-controls");_dereq_("./material");_dereq_("./obj-model");_dereq_("./oculus-touch-controls");_dereq_("./position");_dereq_("./raycaster");_dereq_("./rotation");_dereq_("./scale");_dereq_("./shadow");_dereq_("./sound");_dereq_("./text");_dereq_("./tracked-controls");_dereq_("./visible");_dereq_("./vive-controls");_dereq_("./wasd-controls");_dereq_("./scene/canvas");_dereq_("./scene/debug");_dereq_("./scene/embedded");_dereq_("./scene/inspector");_dereq_("./scene/fog");_dereq_("./scene/keyboard-shortcuts");_dereq_("./scene/pool");_dereq_("./scene/screenshot");_dereq_("./scene/stats");_dereq_("./scene/vr-mode-ui")},{"./camera":77,"./collada-model":78,"./cursor":79,"./daydream-controls":80,"./gearvr-controls":81,"./geometry":82,"./gltf-model":83,"./hand-controls":84,"./laser-controls":86,"./light":87,"./line":88,"./link":89,"./look-controls":90,"./material":91,"./obj-model":92,"./oculus-touch-controls":93,"./position":94,"./raycaster":95,"./rotation":96,"./scale":97,"./scene/canvas":98,"./scene/debug":99,"./scene/embedded":100,"./scene/fog":101,"./scene/inspector":102,"./scene/keyboard-shortcuts":103,"./scene/pool":104,"./scene/screenshot":105,"./scene/stats":106,"./scene/vr-mode-ui":107,"./shadow":108,"./sound":109,"./text":110,"./tracked-controls":111,"./visible":112,"./vive-controls":113,"./wasd-controls":114}],86:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var utils=_dereq_("../utils/");registerComponent("laser-controls",{schema:{hand:{"default":"right"}},init:function(){var config=this.config;var data=this.data;var el=this.el;el.setAttribute("daydream-controls",{hand:data.hand});el.setAttribute("gearvr-controls",{hand:data.hand});el.setAttribute("oculus-touch-controls",{hand:data.hand});el.setAttribute("vive-controls",{hand:data.hand});el.addEventListener("controllerconnected",function(evt){var controllerConfig=config[evt.detail.name];if(!controllerConfig){return}el.setAttribute("raycaster",utils.extend({showLine:true},controllerConfig.raycaster||{}));el.setAttribute("cursor",utils.extend({fuse:false},controllerConfig.cursor))})},config:{"daydream-controls":{cursor:{downEvents:["trackpaddown"],upEvents:["trackpadup"]}},"gearvr-controls":{cursor:{downEvents:["trackpaddown"],upEvents:["trackpadup"]},raycaster:{origin:{x:0,y:5e-4,z:0}}},"oculus-touch-controls":{cursor:{downEvents:["triggerdown"],upEvents:["triggerup"]},raycaster:{origin:{x:.001,y:0,z:.065},direction:{x:0,y:-.8,z:-1}}},"vive-controls":{cursor:{downEvents:["triggerdown"],upEvents:["triggerup"]}}}})},{"../core/component":125,"../utils/":196}],87:[function(_dereq_,module,exports){var bind=_dereq_("../utils/bind");var diff=_dereq_("../utils").diff;var debug=_dereq_("../utils/debug");var registerComponent=_dereq_("../core/component").registerComponent;var THREE=_dereq_("../lib/three");var degToRad=THREE.Math.degToRad;var warn=debug("components:light:warn");module.exports.Component=registerComponent("light",{schema:{angle:{"default":60,"if":{type:["spot"]}},color:{type:"color"},groundColor:{type:"color","if":{type:["hemisphere"]}},decay:{"default":1,"if":{type:["point","spot"]}},distance:{"default":0,min:0,"if":{type:["point","spot"]}},intensity:{"default":1,min:0,"if":{type:["ambient","directional","hemisphere","point","spot"]}},penumbra:{"default":0,min:0,max:1,"if":{type:["spot"]}},type:{"default":"directional",oneOf:["ambient","directional","hemisphere","point","spot"]},target:{type:"selector","if":{type:["spot","directional"]}},castShadow:{"default":false,"if":{type:["point","spot","directional"]}},shadowBias:{"default":0,"if":{castShadow:true}},shadowCameraFar:{"default":500,"if":{castShadow:true}},shadowCameraFov:{"default":90,"if":{castShadow:true}},shadowCameraNear:{"default":.5,"if":{castShadow:true}},shadowCameraTop:{"default":5,"if":{castShadow:true}},shadowCameraRight:{"default":5,"if":{castShadow:true}},shadowCameraBottom:{"default":-5,"if":{castShadow:true}},shadowCameraLeft:{"default":-5,"if":{castShadow:true}},shadowCameraVisible:{"default":false,"if":{castShadow:true}},shadowMapHeight:{"default":512,"if":{castShadow:true}},shadowMapWidth:{"default":512,"if":{castShadow:true}}},init:function(){var el=this.el;this.light=null;this.defaultTarget=null;this.system.registerLight(el)},update:function(oldData){var data=this.data;var diffData=diff(data,oldData);var light=this.light;var self=this;if(light&&!("type"in diffData)){var shadowsLoaded=false;Object.keys(diffData).forEach(function(key){var value=data[key];switch(key){case"color":{light.color.set(value);break}case"groundColor":{light.groundColor.set(value);break}case"angle":{light.angle=degToRad(value);break}case"target":{if(value===null){if(data.type==="spot"||data.type==="directional"){light.target=self.defaultTarget}}else{if(value.hasLoaded){self.onSetTarget(value,light)}else{value.addEventListener("loaded",bind(self.onSetTarget,self,value,light))}}break}case"castShadow":case"shadowBias":case"shadowCameraFar":case"shadowCameraFov":case"shadowCameraNear":case"shadowCameraTop":case"shadowCameraRight":case"shadowCameraBottom":case"shadowCameraLeft":case"shadowCameraVisible":case"shadowMapHeight":case"shadowMapWidth":if(!shadowsLoaded){self.updateShadow();shadowsLoaded=true}break;default:{light[key]=value}}});return}this.setLight(this.data);this.updateShadow()},setLight:function(data){var el=this.el;var newLight=this.getLight(data);if(newLight){if(this.light){el.removeObject3D("light")}this.light=newLight;this.light.el=el;el.setObject3D("light",this.light);if(data.type==="spot"||data.type==="directional"||data.type==="hemisphere"){el.getObject3D("light").translateY(-1)}if(data.type==="spot"){el.setObject3D("light-target",this.defaultTarget);el.getObject3D("light-target").position.set(0,0,-1)}}},updateShadow:function(){var el=this.el;var data=this.data;var light=this.light;light.castShadow=data.castShadow;var cameraHelper=el.getObject3D("cameraHelper");if(data.shadowCameraVisible&&!cameraHelper){el.setObject3D("cameraHelper",new THREE.CameraHelper(light.shadow.camera))}else if(!data.shadowCameraVisible&&cameraHelper){el.removeObject3D("cameraHelper")}if(!data.castShadow){return light}light.shadow.bias=data.shadowBias;light.shadow.mapSize.height=data.shadowMapHeight;light.shadow.mapSize.width=data.shadowMapWidth;light.shadow.camera.near=data.shadowCameraNear;light.shadow.camera.far=data.shadowCameraFar;if(light.shadow.camera instanceof THREE.OrthographicCamera){light.shadow.camera.top=data.shadowCameraTop;light.shadow.camera.right=data.shadowCameraRight;light.shadow.camera.bottom=data.shadowCameraBottom;light.shadow.camera.left=data.shadowCameraLeft}else{light.shadow.camera.fov=data.shadowCameraFov}light.shadow.camera.updateProjectionMatrix();if(cameraHelper){cameraHelper.update()}},getLight:function(data){var angle=data.angle;var color=new THREE.Color(data.color).getHex();var decay=data.decay;var distance=data.distance;var groundColor=new THREE.Color(data.groundColor).getHex();var intensity=data.intensity;var type=data.type;var target=data.target;var light=null;switch(type.toLowerCase()){case"ambient":{return new THREE.AmbientLight(color,intensity)}case"directional":{light=new THREE.DirectionalLight(color,intensity);this.defaultTarget=light.target;if(target){if(target.hasLoaded){this.onSetTarget(target,light)}else{target.addEventListener("loaded",bind(this.onSetTarget,this,target,light))}}return light}case"hemisphere":{return new THREE.HemisphereLight(color,groundColor,intensity)}case"point":{return new THREE.PointLight(color,intensity,distance,decay)}case"spot":{light=new THREE.SpotLight(color,intensity,distance,degToRad(angle),data.penumbra,decay);this.defaultTarget=light.target;if(target){if(target.hasLoaded){this.onSetTarget(target,light)}else{target.addEventListener("loaded",bind(this.onSetTarget,this,target,light))}}return light}default:{warn("%s is not a valid light type. "+"Choose from ambient, directional, hemisphere, point, spot.",type)}}},onSetTarget:function(targetEl,light){light.target=targetEl.object3D},remove:function(){var el=this.el;el.removeObject3D("light");if(el.getObject3D("cameraHelper")){el.removeObject3D("cameraHelper")}}})},{"../core/component":125,"../lib/three":173,"../utils":196,"../utils/bind":190,"../utils/debug":192}],88:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;module.exports.Component=registerComponent("line",{schema:{start:{type:"vec3","default":{x:0,y:0,z:0}},end:{type:"vec3","default":{x:0,y:0,z:0}},color:{type:"color","default":"#74BEC1"},opacity:{type:"number","default":1},visible:{"default":true}},multiple:true,init:function(){var data=this.data;var geometry;var material;material=this.material=new THREE.LineBasicMaterial({color:data.color,opacity:data.opacity,transparent:data.opacity<1,visible:data.visible});geometry=this.geometry=new THREE.BufferGeometry;geometry.addAttribute("position",new THREE.BufferAttribute(new Float32Array(2*3),3));this.line=new THREE.Line(geometry,material);this.el.setObject3D(this.attrName,this.line)},update:function(oldData){var data=this.data;var geometry=this.geometry;var geoNeedsUpdate=false;var material=this.material;var positionArray=geometry.attributes.position.array;if(!isEqualVec3(data.start,oldData.start)){positionArray[0]=data.start.x;positionArray[1]=data.start.y;positionArray[2]=data.start.z;geoNeedsUpdate=true}if(!isEqualVec3(data.end,oldData.end)){positionArray[3]=data.end.x;positionArray[4]=data.end.y;positionArray[5]=data.end.z;geoNeedsUpdate=true}if(geoNeedsUpdate){geometry.attributes.position.needsUpdate=true;geometry.computeBoundingSphere()}material.color.setStyle(data.color);material.opacity=data.opacity;material.transparent=data.opacity<1;material.visible=data.visible},remove:function(){this.el.removeObject3D("line",this.line)}});function isEqualVec3(a,b){if(!a||!b){return false}return a.x===b.x&&a.y===b.y&&a.z===b.z}},{"../core/component":125}],89:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var registerShader=_dereq_("../core/shader").registerShader;var THREE=_dereq_("../lib/three");module.exports.Component=registerComponent("link",{schema:{color:{"default":"white",type:"color"},highlighted:{"default":false},highlightedColor:{"default":"#24CAFF",type:"color"},href:{"default":""},image:{type:"asset"},on:{"default":"click"},peekMode:{"default":false},title:{"default":""},visualAspectEnabled:{"default":true}},init:function(){this.navigate=this.navigate.bind(this);this.previousQuaternion=undefined;this.hiddenEls=[];this.initVisualAspect()},update:function(oldData){var data=this.data;var el=this.el;var strokeColor=data.highlighted?data.highlightedColor:data.color;el.setAttribute("material","strokeColor",strokeColor);if(data.on!==oldData.on){this.updateEventListener()}if(data.peekMode!==oldData.peekMode){this.updatePeekMode()}if(!data.image||oldData.image===data.image){return}el.setAttribute("material","pano",typeof data.image==="string"?data.image:data.image.src)},updatePeekMode:function(){var el=this.el;var sphereEl=this.sphereEl;if(this.data.peekMode){this.hideAll();el.getObject3D("mesh").visible=false;sphereEl.setAttribute("visible",true)}else{this.showAll();el.getObject3D("mesh").visible=true;sphereEl.setAttribute("visible",false)}},play:function(){this.updateEventListener()},pause:function(){this.removeEventListener()},updateEventListener:function(){var el=this.el;if(!el.isPlaying){return}this.removeEventListener();el.addEventListener(this.data.on,this.navigate)},removeEventListener:function(){var on=this.data.on;if(!on){return}this.el.removeEventListener(on,this.navigate)},initVisualAspect:function(){var el=this.el;var textEl;var sphereEl;var semiSphereEl;if(!this.data.visualAspectEnabled){return}textEl=this.textEl=this.textEl||document.createElement("a-entity");sphereEl=this.sphereEl=this.sphereEl||document.createElement("a-entity");semiSphereEl=this.semiSphereEl=this.semiSphereEl||document.createElement("a-entity");el.setAttribute("geometry",{primitive:"circle",radius:1,segments:64});el.setAttribute("material",{shader:"portal",pano:this.data.image,side:"double"});textEl.setAttribute("text",{color:"white",align:"center",font:"kelsonsans",value:this.data.title||this.data.href,width:4});textEl.setAttribute("position","0 1.5 0");el.appendChild(textEl);semiSphereEl.setAttribute("geometry",{primitive:"sphere",radius:1,phiStart:0,segmentsWidth:64,segmentsHeight:64,phiLength:180,thetaStart:0,thetaLength:360});semiSphereEl.setAttribute("material",{shader:"portal",borderEnabled:0,pano:this.data.image,side:"back"});semiSphereEl.setAttribute("rotation","0 180 0");semiSphereEl.setAttribute("position","0 0 0");semiSphereEl.setAttribute("visible",false);el.appendChild(semiSphereEl);sphereEl.setAttribute("geometry",{primitive:"sphere",radius:10,segmentsWidth:64,segmentsHeight:64});sphereEl.setAttribute("material",{shader:"portal",borderEnabled:0,pano:this.data.image,side:"back"});sphereEl.setAttribute("visible",false);el.appendChild(sphereEl)},navigate:function(){window.location=this.data.href},tick:function(){var elWorldPosition=new THREE.Vector3;var cameraWorldPosition=new THREE.Vector3;var scale=new THREE.Vector3;var quaternion=new THREE.Quaternion;return function(){var el=this.el;var object3D=el.object3D;var camera=el.sceneEl.camera;var cameraPortalOrientation;var distance;var textEl=this.textEl;object3D.updateMatrixWorld();camera.parent.updateMatrixWorld();camera.updateMatrixWorld();object3D.matrix.decompose(elWorldPosition,quaternion,scale);elWorldPosition.setFromMatrixPosition(object3D.matrixWorld);cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);distance=elWorldPosition.distanceTo(cameraWorldPosition);this.previousQuaternion=this.previousQuaternion||quaternion.clone();if(distance>20){object3D.lookAt(cameraWorldPosition)}else{cameraPortalOrientation=this.calculateCameraPortalOrientation();if(distance<.5){if(this.semiSphereEl.getAttribute("visible")===true){return}textEl.setAttribute("text","width",1.5);if(cameraPortalOrientation<=0){textEl.setAttribute("position","0 0 0.75");textEl.setAttribute("rotation","0 180 0");this.semiSphereEl.setAttribute("rotation","0 0 0")}else{textEl.setAttribute("position","0 0 -0.75");textEl.setAttribute("rotation","0 0 0");this.semiSphereEl.setAttribute("rotation","0 180 0")}el.getObject3D("mesh").visible=false;this.semiSphereEl.setAttribute("visible",true);this.peekCameraPortalOrientation=cameraPortalOrientation}else{if(cameraPortalOrientation<=0){textEl.setAttribute("rotation","0 180 0")}else{textEl.setAttribute("rotation","0 0 0")}textEl.setAttribute("text","width",5);textEl.setAttribute("position","0 1.5 0");el.getObject3D("mesh").visible=true;this.semiSphereEl.setAttribute("visible",false);this.peekCameraPortalOrientation=undefined}if(this.previousQuaternion){object3D.quaternion.copy(this.previousQuaternion);this.previousQuaternion=undefined}}}}(),hideAll:function(){var el=this.el;var hiddenEls=this.hiddenEls;var self=this;if(hiddenEls.length>0){return}el.sceneEl.object3D.traverse(function(object){if(object&&object.el&&object.el.hasAttribute("link-controls")){return}if(!object.el||object===el.sceneEl.object3D||object.el===el||object.el===self.sphereEl||object.el===el.sceneEl.cameraEl||object.el.getAttribute("visible")===false||object.el===self.textEl||object.el===self.semiSphereEl){return}object.el.setAttribute("visible",false);hiddenEls.push(object.el)})},showAll:function(){this.hiddenEls.forEach(function(el){el.setAttribute("visible",true)});this.hiddenEls=[]},calculateCameraPortalOrientation:function(){var mat4=new THREE.Matrix4;var cameraPosition=new THREE.Vector3;var portalNormal=new THREE.Vector3(0,0,1);var portalPosition=new THREE.Vector3(0,0,0);return function(){var el=this.el;var camera=el.sceneEl.camera;cameraPosition.set(0,0,0);portalNormal.set(0,0,1);portalPosition.set(0,0,0);el.object3D.matrixWorld.extractRotation(mat4);portalNormal.applyMatrix4(mat4);el.object3D.updateMatrixWorld();el.object3D.localToWorld(portalPosition);camera.parent.parent.updateMatrixWorld();camera.parent.updateMatrixWorld();camera.updateMatrixWorld();camera.localToWorld(cameraPosition);cameraPosition.sub(portalPosition).normalize();portalNormal.normalize();return Math.sign(portalNormal.dot(cameraPosition));
}}(),remove:function(){this.removeEventListener()}});registerShader("portal",{schema:{pano:{type:"map",is:"uniform"},borderEnabled:{"default":1,type:"int",is:"uniform"},strokeColor:{"default":"white",type:"color",is:"uniform"}},vertexShader:["vec3 portalPosition;","varying vec3 vWorldPosition;","varying float vDistanceToCenter;","varying float vDistance;","void main() {","vDistanceToCenter = clamp(length(position - vec3(0.0, 0.0, 0.0)), 0.0, 1.0);","portalPosition = (modelMatrix * vec4(0.0, 0.0, 0.0, 1.0)).xyz;","vDistance = length(portalPosition - cameraPosition);","vWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;","gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);","}"].join("\n"),fragmentShader:["#define RECIPROCAL_PI2 0.15915494","uniform sampler2D pano;","uniform vec3 strokeColor;","uniform float borderEnabled;","varying float vDistanceToCenter;","varying float vDistance;","varying vec3 vWorldPosition;","void main() {","vec3 direction = normalize(vWorldPosition - cameraPosition);","vec2 sampleUV;","float borderThickness = clamp(exp(-vDistance / 50.0), 0.6, 0.95);","sampleUV.y = saturate(direction.y * 0.5 + 0.5);","sampleUV.x = atan(direction.z, direction.x) * -RECIPROCAL_PI2 + 0.5;","if (vDistanceToCenter > borderThickness && borderEnabled == 1.0) {","gl_FragColor = vec4(strokeColor, 1.0);","} else {","gl_FragColor = mix(texture2D(pano, sampleUV), vec4(0.93, 0.17, 0.36, 1.0), clamp(pow((vDistance / 15.0), 2.0), 0.0, 1.0));","}","}"].join("\n")})},{"../core/component":125,"../core/shader":134,"../lib/three":173}],90:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var THREE=_dereq_("../lib/three");var bind=_dereq_("../utils/bind");var GRABBING_CLASS="a-grabbing";var PI_2=Math.PI/2;var radToDeg=THREE.Math.radToDeg;module.exports.Component=registerComponent("look-controls",{dependencies:["position","rotation"],schema:{enabled:{"default":true},hmdEnabled:{"default":true},reverseMouseDrag:{"default":false},standing:{"default":true}},init:function(){var sceneEl=this.el.sceneEl;this.previousHMDPosition=new THREE.Vector3;this.hmdQuaternion=new THREE.Quaternion;this.hmdEuler=new THREE.Euler;this.setupMouseControls();this.setupHMDControls();this.bindMethods();sceneEl.addEventListener("exit-vr",this.onExitVR)},update:function(oldData){var data=this.data;if(data.enabled!==oldData.enabled){this.updateGrabCursor(data.enabled)}if(oldData&&!data.hmdEnabled&&!oldData.hmdEnabled){this.pitchObject.rotation.set(0,0,0);this.yawObject.rotation.set(0,0,0)}},tick:function(t){var data=this.data;if(!data.enabled){return}this.controls.standing=data.standing;this.controls.update();this.updateOrientation();this.updatePosition()},play:function(){this.addEventListeners()},pause:function(){this.removeEventListeners()},remove:function(){this.removeEventListeners()},bindMethods:function(){this.onMouseDown=bind(this.onMouseDown,this);this.onMouseMove=bind(this.onMouseMove,this);this.onMouseUp=bind(this.onMouseUp,this);this.onTouchStart=bind(this.onTouchStart,this);this.onTouchMove=bind(this.onTouchMove,this);this.onTouchEnd=bind(this.onTouchEnd,this);this.onExitVR=bind(this.onExitVR,this)},setupMouseControls:function(){this.mouseDown=false;this.pitchObject=new THREE.Object3D;this.yawObject=new THREE.Object3D;this.yawObject.position.y=10;this.yawObject.add(this.pitchObject)},setupHMDControls:function(){this.dolly=new THREE.Object3D;this.euler=new THREE.Euler;this.controls=new THREE.VRControls(this.dolly);this.controls.userHeight=0},addEventListeners:function(){var sceneEl=this.el.sceneEl;var canvasEl=sceneEl.canvas;if(!canvasEl){sceneEl.addEventListener("render-target-loaded",bind(this.addEventListeners,this));return}canvasEl.addEventListener("mousedown",this.onMouseDown,false);window.addEventListener("mousemove",this.onMouseMove,false);window.addEventListener("mouseup",this.onMouseUp,false);canvasEl.addEventListener("touchstart",this.onTouchStart);window.addEventListener("touchmove",this.onTouchMove);window.addEventListener("touchend",this.onTouchEnd)},removeEventListeners:function(){var sceneEl=this.el.sceneEl;var canvasEl=sceneEl&&sceneEl.canvas;if(!canvasEl){return}canvasEl.removeEventListener("mousedown",this.onMouseDown);canvasEl.removeEventListener("mousemove",this.onMouseMove);canvasEl.removeEventListener("mouseup",this.onMouseUp);canvasEl.removeEventListener("mouseout",this.onMouseUp);canvasEl.removeEventListener("touchstart",this.onTouchStart);canvasEl.removeEventListener("touchmove",this.onTouchMove);canvasEl.removeEventListener("touchend",this.onTouchEnd)},updateOrientation:function(){var currentRotation;var deltaRotation;var hmdEuler=this.hmdEuler;var hmdQuaternion=this.hmdQuaternion;var pitchObject=this.pitchObject;var yawObject=this.yawObject;var sceneEl=this.el.sceneEl;var rotation;hmdQuaternion=hmdQuaternion.copy(this.dolly.quaternion);hmdEuler.setFromQuaternion(hmdQuaternion,"YXZ");if(sceneEl.isMobile){rotation={x:radToDeg(hmdEuler.x)+radToDeg(pitchObject.rotation.x),y:radToDeg(hmdEuler.y)+radToDeg(yawObject.rotation.y),z:radToDeg(hmdEuler.z)}}else if(!sceneEl.is("vr-mode")||isNullVector(hmdEuler)||!this.data.hmdEnabled){currentRotation=this.el.getAttribute("rotation");deltaRotation=this.calculateDeltaRotation();if(this.data.reverseMouseDrag){rotation={x:currentRotation.x-deltaRotation.x,y:currentRotation.y-deltaRotation.y,z:currentRotation.z}}else{rotation={x:currentRotation.x+deltaRotation.x,y:currentRotation.y+deltaRotation.y,z:currentRotation.z}}}else{rotation={x:radToDeg(hmdEuler.x),y:radToDeg(hmdEuler.y),z:radToDeg(hmdEuler.z)}}this.el.setAttribute("rotation",rotation)},calculateDeltaRotation:function(){var currentRotationX=radToDeg(this.pitchObject.rotation.x);var currentRotationY=radToDeg(this.yawObject.rotation.y);var deltaRotation;deltaRotation={x:currentRotationX-(this.previousRotationX||0),y:currentRotationY-(this.previousRotationY||0)};this.previousRotationX=currentRotationX;this.previousRotationY=currentRotationY;return deltaRotation},updatePosition:function(){var deltaHMDPosition=new THREE.Vector3;return function(){var el=this.el;var currentPosition=el.getAttribute("position");var currentHMDPosition;var previousHMDPosition=this.previousHMDPosition;var sceneEl=this.el.sceneEl;if(!sceneEl.is("vr-mode")){return}currentHMDPosition=this.calculateHMDPosition();deltaHMDPosition.copy(currentHMDPosition).sub(previousHMDPosition);if(isNullVector(deltaHMDPosition)){return}previousHMDPosition.copy(currentHMDPosition);el.setAttribute("position",{x:currentPosition.x+deltaHMDPosition.x,y:currentPosition.y+deltaHMDPosition.y,z:currentPosition.z+deltaHMDPosition.z})}}(),calculateHMDPosition:function(){var position=new THREE.Vector3;return function(){this.dolly.updateMatrix();position.setFromMatrixPosition(this.dolly.matrix);return position}}(),onMouseMove:function(event){var pitchObject=this.pitchObject;var yawObject=this.yawObject;var previousMouseEvent=this.previousMouseEvent;var movementX;var movementY;if(!this.mouseDown||!this.data.enabled){return}movementX=event.movementX||event.mozMovementX;movementY=event.movementY||event.mozMovementY;if(movementX===undefined||movementY===undefined){movementX=event.screenX-previousMouseEvent.screenX;movementY=event.screenY-previousMouseEvent.screenY}this.previousMouseEvent=event;yawObject.rotation.y-=movementX*.002;pitchObject.rotation.x-=movementY*.002;pitchObject.rotation.x=Math.max(-PI_2,Math.min(PI_2,pitchObject.rotation.x))},onMouseDown:function(evt){if(!this.data.enabled){return}if(evt.button!==0){return}this.mouseDown=true;this.previousMouseEvent=evt;document.body.classList.add(GRABBING_CLASS)},onMouseUp:function(){this.mouseDown=false;document.body.classList.remove(GRABBING_CLASS)},onTouchStart:function(evt){if(evt.touches.length!==1){return}this.touchStart={x:evt.touches[0].pageX,y:evt.touches[0].pageY};this.touchStarted=true},onTouchMove:function(evt){var canvas=this.el.sceneEl.canvas;var deltaY;var yawObject=this.yawObject;if(!this.touchStarted){return}deltaY=2*Math.PI*(evt.touches[0].pageX-this.touchStart.x)/canvas.clientWidth;yawObject.rotation.y-=deltaY*.5;this.touchStart={x:evt.touches[0].pageX,y:evt.touches[0].pageY}},onTouchEnd:function(){this.touchStarted=false},onExitVR:function(){this.previousHMDPosition.set(0,0,0)},updateGrabCursor:function(enabled){var sceneEl=this.el.sceneEl;function enableGrabCursor(){sceneEl.canvas.classList.add("a-grab-cursor")}function disableGrabCursor(){sceneEl.canvas.classList.remove("a-grab-cursor")}if(!sceneEl.canvas){if(enabled){sceneEl.addEventListener("render-target-loaded",enableGrabCursor)}else{sceneEl.addEventListener("render-target-loaded",disableGrabCursor)}return}if(enabled){enableGrabCursor();return}disableGrabCursor()}});function isNullVector(vector){return vector.x===0&&vector.y===0&&vector.z===0}},{"../core/component":125,"../lib/three":173,"../utils/bind":190}],91:[function(_dereq_,module,exports){var utils=_dereq_("../utils/");var component=_dereq_("../core/component");var THREE=_dereq_("../lib/three");var shader=_dereq_("../core/shader");var error=utils.debug("components:material:error");var registerComponent=component.registerComponent;var shaders=shader.shaders;var shaderNames=shader.shaderNames;module.exports.Component=registerComponent("material",{schema:{alphaTest:{"default":0,min:0,max:1},depthTest:{"default":true},depthWrite:{"default":true},flatShading:{"default":false},npot:{"default":false},offset:{type:"vec2","default":{x:0,y:0}},opacity:{"default":1,min:0,max:1},repeat:{type:"vec2","default":{x:1,y:1}},shader:{"default":"standard",oneOf:shaderNames},side:{"default":"front",oneOf:["front","back","double"]},transparent:{"default":false},vertexColors:{type:"string","default":"none",oneOf:["face","vertex"]},visible:{"default":true}},init:function(){this.material=null},update:function(oldData){var data=this.data;if(!this.shader||data.shader!==oldData.shader){this.updateShader(data.shader)}this.shader.update(this.data);this.updateMaterial(oldData)},updateSchema:function(data){var newShader=data.shader;var currentShader=this.data&&this.data.shader;var shader=newShader||currentShader;var schema=shaders[shader]&&shaders[shader].schema;if(!schema){error("Unknown shader schema "+shader)}if(currentShader&&newShader===currentShader){return}this.extendSchema(schema);this.updateBehavior()},updateBehavior:function(){var schema=this.schema;var self=this;var sceneEl=this.el.sceneEl;var tickProperties={};var tick=function(time,delta){Object.keys(tickProperties).forEach(function update(key){tickProperties[key]=time});self.shader.update(tickProperties)};this.tick=undefined;Object.keys(schema).forEach(function(key){if(schema[key].type==="time"){self.tick=tick;tickProperties[key]=true}});if(!sceneEl){return}if(!this.tick){sceneEl.removeBehavior(this)}else{sceneEl.addBehavior(this)}},updateShader:function(shaderName){var data=this.data;var Shader=shaders[shaderName]&&shaders[shaderName].Shader;var shaderInstance;if(!Shader){throw new Error("Unknown shader "+shaderName)}shaderInstance=this.shader=new Shader;shaderInstance.el=this.el;shaderInstance.init(data);this.setMaterial(shaderInstance.material);this.updateSchema(data)},updateMaterial:function(oldData){var data=this.data;var material=this.material;material.alphaTest=data.alphaTest;material.depthTest=data.depthTest!==false;material.depthWrite=data.depthWrite!==false;material.opacity=data.opacity;material.shading=data.flatShading?THREE.FlatShading:THREE.SmoothShading;material.side=parseSide(data.side);material.transparent=data.transparent!==false||data.opacity<1;material.vertexColors=parseVertexColors(data.vertexColors);material.visible=data.visible;if(Object.keys(oldData).length&&(oldData.alphaTest!==data.alphaTest||oldData.side!==data.side||oldData.vertexColors!==data.vertexColors)){material.needsUpdate=true}},remove:function(){var defaultMaterial=new THREE.MeshBasicMaterial;var material=this.material;var object3D=this.el.getObject3D("mesh");if(object3D){object3D.material=defaultMaterial}disposeMaterial(material,this.system)},setMaterial:function(material){var mesh=this.el.getOrCreateObject3D("mesh",THREE.Mesh);var system=this.system;if(this.material){disposeMaterial(this.material,system)}this.material=mesh.material=material;system.registerMaterial(material)}});function parseSide(side){switch(side){case"back":{return THREE.BackSide}case"double":{return THREE.DoubleSide}default:{return THREE.FrontSide}}}function parseVertexColors(coloring){switch(coloring){case"face":{return THREE.FaceColors}case"vertex":{return THREE.VertexColors}default:{return THREE.NoColors}}}function disposeMaterial(material,system){material.dispose();system.unregisterMaterial(material)}},{"../core/component":125,"../core/shader":134,"../lib/three":173,"../utils/":196}],92:[function(_dereq_,module,exports){var debug=_dereq_("../utils/debug");var registerComponent=_dereq_("../core/component").registerComponent;var THREE=_dereq_("../lib/three");var warn=debug("components:obj-model:warn");module.exports.Component=registerComponent("obj-model",{schema:{mtl:{type:"model"},obj:{type:"model"}},init:function(){this.model=null;this.objLoader=new THREE.OBJLoader;this.mtlLoader=new THREE.MTLLoader(this.objLoader.manager);this.mtlLoader.crossOrigin=""},update:function(){var data=this.data;if(!data.obj){return}this.remove();this.loadObj(data.obj,data.mtl)},remove:function(){if(!this.model){return}this.el.removeObject3D("mesh")},loadObj:function(objUrl,mtlUrl){var self=this;var el=this.el;var mtlLoader=this.mtlLoader;var objLoader=this.objLoader;if(mtlUrl){if(el.hasAttribute("material")){warn("Material component properties are ignored when a .MTL is provided")}mtlLoader.setTexturePath(mtlUrl.substr(0,mtlUrl.lastIndexOf("/")+1));mtlLoader.load(mtlUrl,function(materials){materials.preload();objLoader.setMaterials(materials);objLoader.load(objUrl,function(objModel){self.model=objModel;el.setObject3D("mesh",objModel);el.emit("model-loaded",{format:"obj",model:objModel})})});return}objLoader.load(objUrl,function loadObjOnly(objModel){var material=el.components.material;if(material){objModel.traverse(function(child){if(child instanceof THREE.Mesh){child.material=material.material}})}self.model=objModel;el.setObject3D("mesh",objModel);el.emit("model-loaded",{format:"obj",model:objModel})})}})},{"../core/component":125,"../lib/three":173,"../utils/debug":192}],93:[function(_dereq_,module,exports){var bind=_dereq_("../utils/bind");var registerComponent=_dereq_("../core/component").registerComponent;var controllerUtils=_dereq_("../utils/tracked-controls");var TOUCH_CONTROLLER_MODEL_BASE_URL="https://cdn.aframe.io/controllers/oculus/oculus-touch-controller-";var TOUCH_CONTROLLER_MODEL_OBJ_URL_L=TOUCH_CONTROLLER_MODEL_BASE_URL+"left.obj";var TOUCH_CONTROLLER_MODEL_OBJ_MTL_L=TOUCH_CONTROLLER_MODEL_BASE_URL+"left.mtl";var TOUCH_CONTROLLER_MODEL_OBJ_URL_R=TOUCH_CONTROLLER_MODEL_BASE_URL+"right.obj";var TOUCH_CONTROLLER_MODEL_OBJ_MTL_R=TOUCH_CONTROLLER_MODEL_BASE_URL+"right.mtl";var GAMEPAD_ID_PREFIX="Oculus Touch";var PIVOT_OFFSET={x:0,y:-.015,z:.04};module.exports.Component=registerComponent("oculus-touch-controls",{schema:{hand:{"default":"left"},buttonColor:{type:"color","default":"#999"},buttonTouchColor:{type:"color","default":"#8AB"},buttonHighlightColor:{type:"color","default":"#2DF"},model:{"default":true},rotationOffset:{"default":0}},mapping:{left:{axes:{thumbstick:[0,1]},buttons:["thumbstick","trigger","grip","xbutton","ybutton","surface"]},right:{axes:{thumbstick:[0,1]},buttons:["thumbstick","trigger","grip","abutton","bbutton","surface"]}},axisLabels:["x","y","z","w"],bindMethods:function(){this.onModelLoaded=bind(this.onModelLoaded,this);this.onControllersUpdate=bind(this.onControllersUpdate,this);this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this);this.onAxisMoved=bind(this.onAxisMoved,this)},init:function(){var self=this;this.onButtonChanged=bind(this.onButtonChanged,this);this.onButtonDown=function(evt){self.onButtonEvent(evt.detail.id,"down")};this.onButtonUp=function(evt){self.onButtonEvent(evt.detail.id,"up")};this.onButtonTouchStart=function(evt){self.onButtonEvent(evt.detail.id,"touchstart")};this.onButtonTouchEnd=function(evt){self.onButtonEvent(evt.detail.id,"touchend")};this.controllerPresent=false;this.lastControllerCheck=0;this.previousButtonValues={};this.bindMethods();this.emitIfAxesChanged=controllerUtils.emitIfAxesChanged;this.checkControllerPresentAndSetup=controllerUtils.checkControllerPresentAndSetup},addEventListeners:function(){var el=this.el;el.addEventListener("buttonchanged",this.onButtonChanged);el.addEventListener("buttondown",this.onButtonDown);el.addEventListener("buttonup",this.onButtonUp);el.addEventListener("touchstart",this.onButtonTouchStart);el.addEventListener("touchend",this.onButtonTouchEnd);el.addEventListener("axismove",this.onAxisMoved);el.addEventListener("model-loaded",this.onModelLoaded);this.controllerEventsActive=true},removeEventListeners:function(){var el=this.el;el.removeEventListener("buttonchanged",this.onButtonChanged);el.removeEventListener("buttondown",this.onButtonDown);el.removeEventListener("buttonup",this.onButtonUp);el.removeEventListener("touchstart",this.onButtonTouchStart);el.removeEventListener("touchend",this.onButtonTouchEnd);el.removeEventListener("axismove",this.onAxisMoved);el.removeEventListener("model-loaded",this.onModelLoaded);this.controllerEventsActive=false},checkIfControllerPresent:function(){this.checkControllerPresentAndSetup(this,GAMEPAD_ID_PREFIX,{hand:this.data.hand})},play:function(){this.checkIfControllerPresent();this.addControllersUpdateListener();window.addEventListener("gamepaddisconnected",this.checkIfControllerPresent,false)},pause:function(){this.removeEventListeners();this.removeControllersUpdateListener();window.removeEventListener("gamepaddisconnected",this.checkIfControllerPresent,false)},updateControllerModel:function(){var objUrl,mtlUrl;if(!this.data.model){return}if(this.data.hand==="right"){objUrl="url("+TOUCH_CONTROLLER_MODEL_OBJ_URL_R+")";mtlUrl="url("+TOUCH_CONTROLLER_MODEL_OBJ_MTL_R+")"}else{objUrl="url("+TOUCH_CONTROLLER_MODEL_OBJ_URL_L+")";mtlUrl="url("+TOUCH_CONTROLLER_MODEL_OBJ_MTL_L+")"}this.el.setAttribute("obj-model",{obj:objUrl,mtl:mtlUrl})},injectTrackedControls:function(){var data=this.data;var offset=data.hand==="right"?-90:90;this.el.setAttribute("tracked-controls",{id:data.hand==="right"?"Oculus Touch (Right)":"Oculus Touch (Left)",controller:0,rotationOffset:data.rotationOffset!==-999?data.rotationOffset:offset});this.updateControllerModel()},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,false)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,false)},onControllersUpdate:function(){this.checkIfControllerPresent()},onButtonChanged:function(evt){var button=this.mapping[this.data.hand].buttons[evt.detail.id];var buttonMeshes=this.buttonMeshes;var analogValue;if(!button){return}if(button==="trigger"||button==="grip"){analogValue=evt.detail.state.value}if(buttonMeshes){if(button==="trigger"&&buttonMeshes.trigger){buttonMeshes.trigger.rotation.x=-analogValue*(Math.PI/24)}if(button==="grip"&&buttonMeshes.grip){buttonMeshes.grip.rotation.y=(this.data.hand==="left"?-1:1)*analogValue*(Math.PI/60)}}this.el.emit(button+"changed",evt.detail.state)},onModelLoaded:function(evt){var controllerObject3D=evt.detail.model;var buttonMeshes;if(!this.data.model){return}var leftHand=this.data.hand==="left";buttonMeshes=this.buttonMeshes={};buttonMeshes.grip=controllerObject3D.getObjectByName(leftHand?"buttonHand_oculus-touch-controller-left.004":"buttonHand_oculus-touch-controller-right.005");buttonMeshes.thumbstick=controllerObject3D.getObjectByName(leftHand?"stick_oculus-touch-controller-left.007":"stick_oculus-touch-controller-right.004");buttonMeshes.trigger=controllerObject3D.getObjectByName(leftHand?"buttonTrigger_oculus-touch-controller-left.005":"buttonTrigger_oculus-touch-controller-right.006");buttonMeshes.xbutton=controllerObject3D.getObjectByName("buttonX_oculus-touch-controller-left.002");buttonMeshes.abutton=controllerObject3D.getObjectByName("buttonA_oculus-touch-controller-right.002");buttonMeshes.ybutton=controllerObject3D.getObjectByName("buttonY_oculus-touch-controller-left.001");buttonMeshes.bbutton=controllerObject3D.getObjectByName("buttonB_oculus-touch-controller-right.003");controllerObject3D.position=PIVOT_OFFSET},onButtonEvent:function(id,evtName){var buttonName=this.mapping[this.data.hand].buttons[id];var i;if(Array.isArray(buttonName)){for(i=0;i<buttonName.length;i++){this.el.emit(buttonName[i]+evtName)}}else{this.el.emit(buttonName+evtName)}this.updateModel(buttonName,evtName)},onAxisMoved:function(evt){this.emitIfAxesChanged(this,this.mapping[this.data.hand].axes,evt)},updateModel:function(buttonName,evtName){var i;if(Array.isArray(buttonName)){for(i=0;i<buttonName.length;i++){this.updateButtonModel(buttonName[i],evtName)}}else{this.updateButtonModel(buttonName,evtName)}},updateButtonModel:function(buttonName,state){var color=state==="up"||state==="touchend"?this.data.buttonColor:state==="touchstart"?this.data.buttonTouchColor:this.data.buttonHighlightColor;var buttonMeshes=this.buttonMeshes;if(!this.data.model){return}if(buttonMeshes&&buttonMeshes[buttonName]){buttonMeshes[buttonName].material.color.set(color)}}})},{"../core/component":125,"../utils/bind":190,"../utils/tracked-controls":200}],94:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;module.exports.Component=registerComponent("position",{schema:{type:"vec3"},update:function(){var object3D=this.el.object3D;var data=this.data;object3D.position.set(data.x,data.y,data.z)}})},{"../core/component":125}],95:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var THREE=_dereq_("../lib/three");var utils=_dereq_("../utils/");var bind=utils.bind;var dummyVec=new THREE.Vector3;module.exports.Component=registerComponent("raycaster",{schema:{direction:{type:"vec3","default":{x:0,y:0,z:-1}},far:{"default":1e3},interval:{"default":100},near:{"default":0},objects:{"default":""},origin:{type:"vec3"},recursive:{"default":true},showLine:{"default":false},useWorldCoordinates:{"default":false}},init:function(){this.lineData={};this.lineEndVec3=new THREE.Vector3;this.unitLineEndVec3=new THREE.Vector3;this.intersectedEls=[];this.objects=null;this.prevCheckTime=undefined;this.prevIntersectedEls=[];this.raycaster=new THREE.Raycaster;this.updateOriginDirection();this.refreshObjects=bind(this.refreshObjects,this);this.refreshOnceChildLoaded=bind(this.refreshOnceChildLoaded,this)},update:function(oldData){var data=this.data;var el=this.el;var raycaster=this.raycaster;raycaster.far=data.far;raycaster.near=data.near;if(data.showLine&&(data.far!==oldData.far||data.origin!==oldData.origin||data.direction!==oldData.direction)){this.unitLineEndVec3.copy(data.origin).add(data.direction).normalize();this.drawLine()}if(!data.showLine&&oldData.showLine){el.removeAttribute("line")}this.refreshObjects()},play:function(){this.el.sceneEl.addEventListener("loaded",this.refreshObjects);this.el.sceneEl.addEventListener("child-attached",this.refreshOnceChildLoaded);this.el.sceneEl.addEventListener("child-detached",this.refreshObjects)},pause:function(){this.el.sceneEl.removeEventListener("loaded",this.refreshObjects);this.el.sceneEl.removeEventListener("child-attached",this.refreshOnceChildLoaded);this.el.sceneEl.removeEventListener("child-detached",this.refreshObjects)},remove:function(){if(this.data.showLine){this.el.removeAttribute("line")}},refreshOnceChildLoaded:function(evt){var self=this;var childEl=evt.detail.el;if(!childEl){return}if(childEl.hasLoaded){this.refreshObjects()}else{childEl.addEventListener("loaded",function nowRefresh(evt){childEl.removeEventListener("loaded",nowRefresh);self.refreshObjects()})}},refreshObjects:function(){var children;var data=this.data;var i;var objects;var targetEls=data.objects?this.el.sceneEl.querySelectorAll(data.objects):null;if(targetEls){objects=[];for(i=0;i<targetEls.length;i++){objects.push(targetEls[i].object3D)}}else{objects=this.el.sceneEl.object3D.children}this.objects=[];for(i=0;i<objects.length;i++){children=objects[i].children;if(children){this.objects.push.apply(this.objects,children)}}},tick:function(time){var el=this.el;var data=this.data;var i;var intersectedEls=this.intersectedEls;var intersections;var lineLength;var prevCheckTime=this.prevCheckTime;var prevIntersectedEls=this.prevIntersectedEls;if(prevCheckTime&&time-prevCheckTime<data.interval){return}this.prevCheckTime=time;copyArray(this.prevIntersectedEls,this.intersectedEls);this.updateOriginDirection();intersections=this.raycaster.intersectObjects(this.objects,data.recursive);intersections=intersections.filter(function hasEl(intersection){if(data.showLine&&intersection.object===el.getObject3D("line")){return false}return!!intersection.object.el});intersectedEls.length=intersections.length;for(i=0;i<intersections.length;i++){intersectedEls[i]=intersections[i].object.el}intersections.forEach(function emitEvents(intersection){var intersectedEl=intersection.object.el;intersectedEl.emit("raycaster-intersected",{el:el,intersection:intersection})});if(intersections.length){el.emit("raycaster-intersection",{els:intersectedEls,intersections:intersections})}prevIntersectedEls.forEach(function checkStillIntersected(intersectedEl){if(intersectedEls.indexOf(intersectedEl)!==-1){return}el.emit("raycaster-intersection-cleared",{el:intersectedEl});intersectedEl.emit("raycaster-intersected-cleared",{el:el})});if(data.showLine){if(intersections.length){if(intersections[0].object.el===el&&intersections[1]){lineLength=intersections[1].distance}else{lineLength=intersections[0].distance}}this.drawLine(lineLength)}},updateOriginDirection:function(){var direction=new THREE.Vector3;var quaternion=new THREE.Quaternion;var originVec3=new THREE.Vector3;return function updateOriginDirection(){var el=this.el;var data=this.data;if(data.useWorldCoordinates){this.raycaster.set(data.origin,data.direction);return}el.object3D.updateMatrixWorld();el.object3D.matrixWorld.decompose(originVec3,quaternion,dummyVec);if(data.origin.x!==0||data.origin.y!==0||data.origin.z!==0){originVec3=el.object3D.localToWorld(originVec3.copy(data.origin))}direction.copy(data.direction).add(data.origin).applyQuaternion(quaternion).normalize();this.raycaster.set(originVec3,direction)}}(),drawLine:function(length){var lineEndVec3=new THREE.Vector3;var lineData={};return function(length){var data=this.data;var el=this.el;if(length===undefined){length=data.far===Infinity?1e3:data.far}lineData.start=data.origin;lineData.end=lineEndVec3.copy(this.unitLineEndVec3).multiplyScalar(length);el.setAttribute("line",lineData)}}()});function copyArray(a,b){var i;a.length=b.length;for(i=0;i<b.length;i++){a[i]=b[i]}}},{"../core/component":125,"../lib/three":173,"../utils/":196}],96:[function(_dereq_,module,exports){var degToRad=_dereq_("../lib/three").Math.degToRad;var registerComponent=_dereq_("../core/component").registerComponent;module.exports.Component=registerComponent("rotation",{schema:{type:"vec3"},update:function(){var data=this.data;var object3D=this.el.object3D;object3D.rotation.set(degToRad(data.x),degToRad(data.y),degToRad(data.z));object3D.rotation.order="YXZ"}})},{"../core/component":125,"../lib/three":173}],97:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var zeroScale=1e-5;module.exports.Component=registerComponent("scale",{schema:{type:"vec3","default":{x:1,y:1,z:1}},update:function(){var data=this.data;var object3D=this.el.object3D;var x=data.x===0?zeroScale:data.x;var y=data.y===0?zeroScale:data.y;var z=data.z===0?zeroScale:data.z;object3D.scale.set(x,y,z)}})},{"../core/component":125}],98:[function(_dereq_,module,exports){var bind=_dereq_("../../utils/bind");var registerComponent=_dereq_("../../core/component").registerComponent;module.exports.Component=registerComponent("canvas",{init:function(){var canvasEl;var sceneEl=this.el;canvasEl=document.createElement("canvas");canvasEl.classList.add("a-canvas");canvasEl.dataset.aframeCanvas=true;sceneEl.appendChild(canvasEl);document.addEventListener("fullscreenchange",onFullScreenChange);document.addEventListener("mozfullscreenchange",onFullScreenChange);document.addEventListener("webkitfullscreenchange",onFullScreenChange);canvasEl.addEventListener("touchmove",function(event){event.preventDefault()});sceneEl.canvas=canvasEl;sceneEl.emit("render-target-loaded",{target:canvasEl});setTimeout(bind(sceneEl.resize,sceneEl),0);function onFullScreenChange(){var fullscreenEl=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement;if(!fullscreenEl){sceneEl.exitVR()}document.activeElement.blur();document.body.focus()}}})},{"../../core/component":125,"../../utils/bind":190}],99:[function(_dereq_,module,exports){var register=_dereq_("../../core/component").registerComponent;module.exports.Component=register("debug",{schema:{"default":true}})},{"../../core/component":125}],100:[function(_dereq_,module,exports){var registerComponent=_dereq_("../../core/component").registerComponent;module.exports.Component=registerComponent("embedded",{dependencies:["vr-mode-ui"],schema:{"default":true},update:function(){var sceneEl=this.el;var enterVREl=sceneEl.querySelector(".a-enter-vr");if(this.data===true){if(enterVREl){enterVREl.classList.add("embedded")}sceneEl.removeFullScreenStyles()}else{if(enterVREl){enterVREl.classList.remove("embedded")}sceneEl.addFullScreenStyles()}}})},{"../../core/component":125}],101:[function(_dereq_,module,exports){var register=_dereq_("../../core/component").registerComponent;var THREE=_dereq_("../../lib/three");var debug=_dereq_("../../utils/debug");var warn=debug("components:fog:warn");module.exports.Component=register("fog",{schema:{color:{type:"color","default":"#000"},density:{"default":25e-5},far:{"default":1e3,min:0},near:{"default":1,min:0},type:{"default":"linear",oneOf:["linear","exponential"]}},update:function(){var data=this.data;var el=this.el;var fog=this.el.object3D.fog;if(!el.isScene){warn("Fog component can only be applied to <a-scene>");return}if(!fog||data.type!==fog.name){el.object3D.fog=getFog(data);el.systems.material.updateMaterials();return}Object.keys(this.schema).forEach(function(key){var value=data[key];if(key==="color"){value=new THREE.Color(value)}fog[key]=value})},remove:function(){var fog=this.el.object3D.fog;if(!fog){return}fog.far=0;fog.near=.1}});function getFog(data){var fog;if(data.type==="exponential"){fog=new THREE.FogExp2(data.color,data.density)}else{fog=new THREE.Fog(data.color,data.near,data.far)}fog.name=data.type;return fog}},{"../../core/component":125,"../../lib/three":173,"../../utils/debug":192}],102:[function(_dereq_,module,exports){(function(process){var AFRAME_INJECTED=_dereq_("../../constants").AFRAME_INJECTED;var bind=_dereq_("../../utils/bind");var pkg=_dereq_("../../../package");var registerComponent=_dereq_("../../core/component").registerComponent;function getFuzzyPatchVersion(version){var split=version.split(".");split[2]="x";return split.join(".")}var INSPECTOR_DEV_URL="https://aframe.io/aframe-inspector/dist/aframe-inspector.js";var INSPECTOR_RELEASE_URL="https://unpkg.com/aframe-inspector@"+getFuzzyPatchVersion(pkg.version)+"/dist/aframe-inspector.min.js";var INSPECTOR_URL=process.env.INSPECTOR_VERSION==="dev"?INSPECTOR_DEV_URL:INSPECTOR_RELEASE_URL;var LOADING_MESSAGE="Loading Inspector";var LOADING_ERROR_MESSAGE="Error loading Inspector";module.exports.Component=registerComponent("inspector",{schema:{url:{"default":INSPECTOR_URL}},init:function(){this.onKeydown=bind(this.onKeydown,this);this.onMessage=bind(this.onMessage,this);this.initOverlay();
window.addEventListener("keydown",this.onKeydown);window.addEventListener("message",this.onMessage)},initOverlay:function(){var dotsHTML='<span class="dots"><span>.</span><span>.</span><span>.</span></span>';this.loadingMessageEl=document.createElement("div");this.loadingMessageEl.classList.add("a-inspector-loader");this.loadingMessageEl.innerHTML=LOADING_MESSAGE+dotsHTML},remove:function(){this.removeEventListeners()},onKeydown:function(evt){var shortcutPressed=evt.keyCode===73&&evt.ctrlKey&&evt.altKey;if(!this.data||!shortcutPressed){return}this.injectInspector()},showLoader:function(){document.body.appendChild(this.loadingMessageEl)},hideLoader:function(){document.body.removeChild(this.loadingMessageEl)},onMessage:function(evt){if(evt.data==="INJECT_AFRAME_INSPECTOR"){this.injectInspector()}},injectInspector:function(){var self=this;var script;if(AFRAME.INSPECTOR||AFRAME.inspectorInjected){return}this.showLoader();script=document.createElement("script");script.src=this.data.url;script.setAttribute("data-name","aframe-inspector");script.setAttribute(AFRAME_INJECTED,"");script.onload=function(){AFRAME.INSPECTOR.open();self.hideLoader();self.removeEventListeners()};script.onerror=function(){self.loadingMessageEl.innerHTML=LOADING_ERROR_MESSAGE};document.head.appendChild(script);AFRAME.inspectorInjected=true},removeEventListeners:function(){window.removeEventListener("keydown",this.onKeydown);window.removeEventListener("message",this.onMessage)}})}).call(this,_dereq_("_process"))},{"../../../package":76,"../../constants":116,"../../core/component":125,"../../utils/bind":190,_process:6}],103:[function(_dereq_,module,exports){var registerComponent=_dereq_("../../core/component").registerComponent;var shouldCaptureKeyEvent=_dereq_("../../utils/").shouldCaptureKeyEvent;module.exports.Component=registerComponent("keyboard-shortcuts",{schema:{enterVR:{"default":true},exitVR:{"default":true}},init:function(){var self=this;var scene=this.el;this.listener=window.addEventListener("keyup",function(event){if(!shouldCaptureKeyEvent(event)){return}if(self.enterVREnabled&&event.keyCode===70){scene.enterVR()}if(self.enterVREnabled&&event.keyCode===27){scene.exitVR()}},false)},update:function(oldData){var data=this.data;this.enterVREnabled=data.enterVR},remove:function(){window.removeEventListener("keyup",this.listener)}})},{"../../core/component":125,"../../utils/":196}],104:[function(_dereq_,module,exports){var debug=_dereq_("../../utils/debug");var registerComponent=_dereq_("../../core/component").registerComponent;var warn=debug("components:pool:warn");module.exports.Component=registerComponent("pool",{schema:{mixin:{"default":""},size:{"default":0},dynamic:{"default":false}},multiple:true,initPool:function(){var i;var mixin=this.data.mixin;if(!mixin){return}this.availableEls=[];this.usedEls=[];for(i=0;i<this.data.size;++i){this.createEntity()}},update:function(oldData){var data=this.data;if(oldData.mixin!==data.mixin||oldData.size!==data.size){this.initPool()}},createEntity:function(){var el=document.createElement("a-entity");el.play=this.wrapPlay(el.play);el.setAttribute("mixin",this.data.mixin);el.setAttribute("visible",false);this.el.appendChild(el);this.availableEls.push(el)},wrapPlay:function(playMethod){var usedEls=this.usedEls;return function(){if(usedEls.indexOf(this)===-1){return}playMethod.call(this)}},requestEntity:function(){var el;if(this.availableEls.length===0){if(this.data.dynamic===false){warn("Requested entity from empty pool "+this.name);return}else{warn("Requested entity from empty pool. This pool is dynamic"+"and will resize automatically. You might want to increase its initial size"+this.name)}this.createEntity()}el=this.availableEls.shift();this.usedEls.push(el);el.setAttribute("visible",true);return el},returnEntity:function(el){var index=this.usedEls.indexOf(el);if(index===-1){warn("The returned entity was not previously pooled from "+this.name);return}this.usedEls.splice(index,1);this.availableEls.push(el);el.setAttribute("visible",false);el.pause()}})},{"../../core/component":125,"../../utils/debug":192}],105:[function(_dereq_,module,exports){var registerComponent=_dereq_("../../core/component").registerComponent;var THREE=_dereq_("../../lib/three");var VERTEX_SHADER=["attribute vec3 position;","attribute vec2 uv;","uniform mat4 projectionMatrix;","uniform mat4 modelViewMatrix;","varying vec2 vUv;","void main() {"," vUv = vec2( 1.- uv.x, uv.y );"," gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n");var FRAGMENT_SHADER=["precision mediump float;","uniform samplerCube map;","varying vec2 vUv;","#define M_PI 3.141592653589793238462643383279","void main() {"," vec2 uv = vUv;"," float longitude = uv.x * 2. * M_PI - M_PI + M_PI / 2.;"," float latitude = uv.y * M_PI;"," vec3 dir = vec3("," - sin( longitude ) * sin( latitude ),"," cos( latitude ),"," - cos( longitude ) * sin( latitude )"," );"," normalize( dir );"," gl_FragColor = vec4( textureCube( map, dir ).rgb, 1.0 );","}"].join("\n");module.exports.Component=registerComponent("screenshot",{schema:{width:{"default":4096},height:{"default":2048}},init:function(){var el=this.el;var self=this;if(el.renderer){setup()}else{el.addEventListener("render-target-loaded",setup)}function setup(){var gl=el.renderer.getContext();self.cubeMapSize=gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE);self.material=new THREE.RawShaderMaterial({uniforms:{map:{type:"t",value:null}},vertexShader:VERTEX_SHADER,fragmentShader:FRAGMENT_SHADER,side:THREE.DoubleSide});self.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(1,1),self.material);self.quad.visible=false;self.camera=new THREE.OrthographicCamera(-1/2,1/2,1/2,-1/2,-1e4,1e4);self.canvas=document.createElement("canvas");self.ctx=self.canvas.getContext("2d");if(el.camera){el.camera.add(self.quad)}self.onKeyDown=self.onKeyDown.bind(self);self.onCameraActive=self.onCameraActive.bind(self);el.addEventListener("camera-set-active",self.onCameraActive)}},getRenderTarget:function(width,height){return new THREE.WebGLRenderTarget(width,height,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,wrapS:THREE.ClampToEdgeWrapping,wrapT:THREE.ClampToEdgeWrapping,format:THREE.RGBAFormat,type:THREE.UnsignedByteType})},resize:function(width,height){this.quad.scale.set(width,height,1);this.camera.left=-1*width/2;this.camera.right=width/2;this.camera.top=height/2;this.camera.bottom=-1*height/2;this.camera.updateProjectionMatrix();this.canvas.width=width;this.canvas.height=height},play:function(){window.addEventListener("keydown",this.onKeyDown)},onCameraActive:function(evt){var cameraParent=this.quad.parent;if(cameraParent){cameraParent.remove(this.quad)}evt.detail.cameraEl.getObject3D("camera").add(this.quad)},onKeyDown:function(evt){var shortcutPressed=evt.keyCode===83&&evt.ctrlKey&&evt.altKey;if(!this.data||!shortcutPressed){return}var projection=evt.shiftKey?"equirectangular":"perspective";this.capture(projection)},setCapture:function(projection){var el=this.el;var size;var camera;var cubeCamera;if(projection==="perspective"){this.quad.visible=false;camera=el.camera;size={width:this.data.width,height:this.data.height}}else{camera=this.camera;camera.position.copy(el.camera.getWorldPosition());camera.rotation.copy(el.camera.getWorldRotation());cubeCamera=new THREE.CubeCamera(el.camera.near,el.camera.far,Math.min(this.cubeMapSize,2048));cubeCamera.position.copy(el.camera.getWorldPosition());cubeCamera.rotation.copy(el.camera.getWorldRotation());cubeCamera.updateCubeMap(el.renderer,el.object3D);this.quad.material.uniforms.map.value=cubeCamera.renderTarget.texture;size={width:this.data.width,height:this.data.height};this.quad.visible=true}return{camera:camera,size:size,projection:projection}},capture:function(projection){var params=this.setCapture(projection);this.renderCapture(params.camera,params.size,params.projection);this.saveCapture()},getCanvas:function(projection){var params=this.setCapture(projection);this.renderCapture(params.camera,params.size,params.projection);return this.canvas},renderCapture:function(camera,size,projection){var autoClear=this.el.renderer.autoClear;var el=this.el;var imageData;var output;var pixels;var renderer=this.el.renderer;output=this.getRenderTarget(size.width,size.height);pixels=new Uint8Array(4*size.width*size.height);this.resize(size.width,size.height);renderer.autoClear=true;renderer.render(el.object3D,camera,output,true);renderer.autoClear=autoClear;renderer.readRenderTargetPixels(output,0,0,size.width,size.height,pixels);if(projection==="perspective"){pixels=this.flipPixelsVertically(pixels,size.width,size.height)}imageData=new ImageData(new Uint8ClampedArray(pixels),size.width,size.height);this.quad.visible=false;this.ctx.putImageData(imageData,0,0)},flipPixelsVertically:function(pixels,width,height){var flippedPixels=pixels.slice(0);for(var x=0;x<width;++x){for(var y=0;y<height;++y){flippedPixels[x*4+y*width*4]=pixels[x*4+(height-y)*width*4];flippedPixels[x*4+1+y*width*4]=pixels[x*4+1+(height-y)*width*4];flippedPixels[x*4+2+y*width*4]=pixels[x*4+2+(height-y)*width*4];flippedPixels[x*4+3+y*width*4]=pixels[x*4+3+(height-y)*width*4]}}return flippedPixels},saveCapture:function(){this.canvas.toBlob(function(blob){var fileName="screenshot-"+document.title.toLowerCase()+"-"+Date.now()+".png";var linkEl=document.createElement("a");var url=URL.createObjectURL(blob);linkEl.href=url;linkEl.setAttribute("download",fileName);linkEl.innerHTML="downloading...";linkEl.style.display="none";document.body.appendChild(linkEl);setTimeout(function(){linkEl.click();document.body.removeChild(linkEl)},1)},"image/png")}})},{"../../core/component":125,"../../lib/three":173}],106:[function(_dereq_,module,exports){var registerComponent=_dereq_("../../core/component").registerComponent;var RStats=_dereq_("../../../vendor/rStats");var utils=_dereq_("../../utils");_dereq_("../../../vendor/rStats.extras");_dereq_("../../lib/rStatsAframe");var AFrameStats=window.aframeStats;var bind=utils.bind;var HIDDEN_CLASS="a-hidden";var ThreeStats=window.threeStats;module.exports.Component=registerComponent("stats",{schema:{"default":true},init:function(){var scene=this.el;if(utils.getUrlParameter("stats")==="false"){return}this.stats=createStats(scene);this.statsEl=document.querySelector(".rs-base");this.hideBound=bind(this.hide,this);this.showBound=bind(this.show,this);scene.addEventListener("enter-vr",this.hideBound);scene.addEventListener("exit-vr",this.showBound)},update:function(){if(!this.stats){return}return!this.data?this.hide():this.show()},remove:function(){this.el.removeEventListener("enter-vr",this.hideBound);this.el.removeEventListener("exit-vr",this.showBound);if(!this.statsEl){return}this.statsEl.parentNode.removeChild(this.statsEl)},tick:function(){var stats=this.stats;if(!stats){return}stats("rAF").tick();stats("FPS").frame();stats().update()},hide:function(){this.statsEl.classList.add(HIDDEN_CLASS)},show:function(){this.statsEl.classList.remove(HIDDEN_CLASS)}});function createStats(scene){var threeStats=new ThreeStats(scene.renderer);var aframeStats=new AFrameStats(scene);var plugins=scene.isMobile?[]:[threeStats,aframeStats];return new RStats({css:[],values:{fps:{caption:"fps",below:30}},groups:[{caption:"Framerate",values:["fps","raf"]}],plugins:plugins})}},{"../../../vendor/rStats":204,"../../../vendor/rStats.extras":203,"../../core/component":125,"../../lib/rStatsAframe":172,"../../utils":196}],107:[function(_dereq_,module,exports){var registerComponent=_dereq_("../../core/component").registerComponent;var constants=_dereq_("../../constants/");var utils=_dereq_("../../utils/");var bind=utils.bind;var ENTER_VR_CLASS="a-enter-vr";var ENTER_VR_BTN_CLASS="a-enter-vr-button";var HIDDEN_CLASS="a-hidden";var ORIENTATION_MODAL_CLASS="a-orientation-modal";module.exports.Component=registerComponent("vr-mode-ui",{dependencies:["canvas"],schema:{enabled:{"default":true}},init:function(){var self=this;var sceneEl=this.el;if(utils.getUrlParameter("ui")==="false"){return}this.enterVR=bind(sceneEl.enterVR,sceneEl);this.exitVR=bind(sceneEl.exitVR,sceneEl);this.insideLoader=false;this.enterVREl=null;this.orientationModalEl=null;sceneEl.addEventListener("enter-vr",bind(this.updateEnterVRInterface,this));sceneEl.addEventListener("exit-vr",bind(this.updateEnterVRInterface,this));window.addEventListener("message",function(event){if(event.data.type==="loaderReady"){self.insideLoader=true;self.remove()}});window.addEventListener("orientationchange",bind(this.toggleOrientationModalIfNeeded,this))},update:function(){var sceneEl=this.el;if(!this.data.enabled||this.insideLoader||utils.getUrlParameter("ui")==="false"){return this.remove()}if(this.enterVREl||this.orientationModalEl){return}this.enterVREl=createEnterVRButton(this.enterVR);sceneEl.appendChild(this.enterVREl);this.orientationModalEl=createOrientationModal(this.exitVR);sceneEl.appendChild(this.orientationModalEl);this.updateEnterVRInterface()},remove:function(){[this.enterVREl,this.orientationModalEl].forEach(function(uiElement){if(uiElement){uiElement.parentNode.removeChild(uiElement)}})},updateEnterVRInterface:function(){this.toggleEnterVRButtonIfNeeded();this.toggleOrientationModalIfNeeded()},toggleEnterVRButtonIfNeeded:function(){var sceneEl=this.el;if(!this.enterVREl){return}if(sceneEl.is("vr-mode")){this.enterVREl.classList.add(HIDDEN_CLASS)}else{this.enterVREl.classList.remove(HIDDEN_CLASS)}},toggleOrientationModalIfNeeded:function(){var sceneEl=this.el;var orientationModalEl=this.orientationModalEl;if(!orientationModalEl||!sceneEl.isMobile){return}if(!utils.device.isLandscape()&&sceneEl.is("vr-mode")){orientationModalEl.classList.remove(HIDDEN_CLASS)}else{orientationModalEl.classList.add(HIDDEN_CLASS)}}});function createEnterVRButton(enterVRHandler){var vrButton;var wrapper;wrapper=document.createElement("div");wrapper.classList.add(ENTER_VR_CLASS);wrapper.setAttribute(constants.AFRAME_INJECTED,"");vrButton=document.createElement("button");vrButton.className=ENTER_VR_BTN_CLASS;vrButton.setAttribute(constants.AFRAME_INJECTED,"");wrapper.appendChild(vrButton);vrButton.addEventListener("click",function(evt){enterVRHandler()});return wrapper}function createOrientationModal(exitVRHandler){var modal=document.createElement("div");modal.className=ORIENTATION_MODAL_CLASS;modal.classList.add(HIDDEN_CLASS);modal.setAttribute(constants.AFRAME_INJECTED,"");var exit=document.createElement("button");exit.setAttribute(constants.AFRAME_INJECTED,"");exit.innerHTML="Exit VR";exit.addEventListener("click",exitVRHandler);modal.appendChild(exit);return modal}},{"../../constants/":116,"../../core/component":125,"../../utils/":196}],108:[function(_dereq_,module,exports){var component=_dereq_("../core/component");var THREE=_dereq_("../lib/three");var bind=_dereq_("../utils/bind");var registerComponent=component.registerComponent;module.exports.Component=registerComponent("shadow",{schema:{cast:{"default":true},receive:{"default":true}},init:function(){this.onMeshChanged=bind(this.update,this);this.el.addEventListener("object3dset",this.onMeshChanged);this.system.setShadowMapEnabled(true)},update:function(){var data=this.data;this.updateDescendants(data.cast,data.receive)},remove:function(){var el=this.el;el.removeEventListener("object3dset",this.onMeshChanged);this.updateDescendants(false,false)},updateDescendants:function(cast,receive){var sceneEl=this.el.sceneEl;this.el.object3D.traverse(function(node){if(!(node instanceof THREE.Mesh)){return}node.castShadow=cast;node.receiveShadow=receive;if(sceneEl.hasLoaded&&node.material){var materials=node.material.materials||[node.material];for(var i=0;i<materials.length;i++){materials[i].needsUpdate=true}}})}})},{"../core/component":125,"../lib/three":173,"../utils/bind":190}],109:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var debug=_dereq_("../utils/debug");var bind=_dereq_("../utils/bind");var THREE=_dereq_("../lib/three");var warn=debug("components:sound:warn");module.exports.Component=registerComponent("sound",{schema:{autoplay:{"default":false},distanceModel:{"default":"inverse",oneOf:["linear","inverse","exponential"]},loop:{"default":false},maxDistance:{"default":1e4},on:{"default":""},poolSize:{"default":1},positional:{"default":true},refDistance:{"default":1},rolloffFactor:{"default":1},src:{type:"audio"},volume:{"default":1}},multiple:true,init:function(){this.listener=null;this.audioLoader=new THREE.AudioLoader;this.pool=new THREE.Group;this.loaded=false;this.mustPlay=false;this.playSound=bind(this.playSound,this)},update:function(oldData){var data=this.data;var srcChanged=data.src!==oldData.src;if(srcChanged){if(!data.src){warn("Audio source was not specified with `src`");return}this.setupSound()}this.pool.children.forEach(function(sound){if(data.positional){sound.setDistanceModel(data.distanceModel);sound.setMaxDistance(data.maxDistance);sound.setRefDistance(data.refDistance);sound.setRolloffFactor(data.rolloffFactor)}sound.setLoop(data.loop);sound.setVolume(data.volume);sound.isPaused=false});if(data.on!==oldData.on){this.updateEventListener(oldData.on)}if(srcChanged){var self=this;this.loaded=false;this.audioLoader.load(data.src,function(buffer){self.pool.children.forEach(function(sound){sound.setBuffer(buffer)});self.loaded=true;THREE.Cache.remove(data.src);if(self.data.autoplay||self.mustPlay){self.playSound()}self.el.emit("sound-loaded")})}},pause:function(){this.stopSound();this.removeEventListener()},play:function(){if(this.data.autoplay){this.playSound()}this.updateEventListener()},remove:function(){this.removeEventListener();this.el.removeObject3D(this.attrName);try{this.pool.children.forEach(function(sound){sound.disconnect()})}catch(e){warn("Audio source not properly disconnected")}},updateEventListener:function(oldEvt){var el=this.el;if(oldEvt){el.removeEventListener(oldEvt,this.playSound)}el.addEventListener(this.data.on,this.playSound)},removeEventListener:function(){this.el.removeEventListener(this.data.on,this.playSound)},setupSound:function(){var el=this.el;var sceneEl=el.sceneEl;if(this.pool.children.length>0){this.stopSound();el.removeObject3D("sound")}var listener=this.listener=sceneEl.audioListener||new THREE.AudioListener;sceneEl.audioListener=listener;if(sceneEl.camera){sceneEl.camera.add(listener)}sceneEl.addEventListener("camera-set-active",function(evt){evt.detail.cameraEl.getObject3D("camera").add(listener)});this.pool=new THREE.Group;for(var i=0;i<this.data.poolSize;i++){var sound=this.data.positional?new THREE.PositionalAudio(listener):new THREE.Audio(listener);this.pool.add(sound)}el.setObject3D(this.attrName,this.pool);this.pool.children.forEach(function(sound){sound.onEnded=function(){sound.isPlaying=false;el.emit("sound-ended",{index:i})}})},pauseSound:function(){this.isPlaying=false;this.pool.children.forEach(function(sound){if(!sound.source||!sound.source.buffer||!sound.isPlaying||sound.isPaused){return}sound.isPaused=true;sound.pause()})},playSound:function(){if(!this.loaded){warn("Sound not loaded yet. It will be played once it finished loading");this.mustPlay=true;return}var found=false;this.isPlaying=true;this.pool.children.forEach(function(sound){if(!sound.isPlaying&&sound.buffer&&!found){sound.play();sound.isPaused=false;found=true;return}});if(!found){warn("All the sounds are playing. If you need to play more sounds simultaneously "+"consider increasing the size of pool with the `poolSize` attribute.",this.el);return}this.mustPlay=false},stopSound:function(){this.isPlaying=false;this.pool.children.forEach(function(sound){if(!sound.source||!sound.source.buffer){return}sound.stop()})}})},{"../core/component":125,"../lib/three":173,"../utils/bind":190,"../utils/debug":192}],110:[function(_dereq_,module,exports){var createTextGeometry=_dereq_("three-bmfont-text");var loadBMFont=_dereq_("load-bmfont");var path=_dereq_("path");var registerComponent=_dereq_("../core/component").registerComponent;var coreShader=_dereq_("../core/shader");var THREE=_dereq_("../lib/three");var utils=_dereq_("../utils/");var error=utils.debug("components:text:error");var shaders=coreShader.shaders;var warn=utils.debug("components:text:warn");var DEFAULT_WIDTH=1;var MAX_ANISOTROPY=16;var FONT_BASE_URL="https://cdn.aframe.io/fonts/";var FONTS={aileronsemibold:FONT_BASE_URL+"Aileron-Semibold.fnt",dejavu:FONT_BASE_URL+"DejaVu-sdf.fnt",exo2bold:FONT_BASE_URL+"Exo2Bold.fnt",exo2semibold:FONT_BASE_URL+"Exo2SemiBold.fnt",kelsonsans:FONT_BASE_URL+"KelsonSans.fnt",monoid:FONT_BASE_URL+"Monoid.fnt",mozillavr:FONT_BASE_URL+"mozillavr.fnt",roboto:FONT_BASE_URL+"Roboto-msdf.json",sourcecodepro:FONT_BASE_URL+"SourceCodePro.fnt"};var MSDF_FONTS=["roboto"];var DEFAULT_FONT="roboto";module.exports.FONTS=FONTS;var cache=new PromiseCache;var fontWidthFactors={};module.exports.Component=registerComponent("text",{multiple:true,schema:{align:{type:"string","default":"left",oneOf:["left","right","center"]},alphaTest:{"default":.5},anchor:{"default":"center",oneOf:["left","right","center","align"]},baseline:{"default":"center",oneOf:["top","center","bottom"]},color:{type:"color","default":"#FFF"},font:{type:"string","default":DEFAULT_FONT},fontImage:{type:"string"},height:{type:"number"},letterSpacing:{type:"number","default":0},lineHeight:{type:"number"},opacity:{type:"number","default":1},shader:{"default":"sdf",oneOf:shaders},side:{"default":"front",oneOf:["front","back","double"]},tabSize:{"default":4},transparent:{"default":true},value:{type:"string"},whiteSpace:{"default":"normal",oneOf:["normal","pre","nowrap"]},width:{type:"number"},wrapCount:{type:"number","default":40},wrapPixels:{type:"number"},yOffset:{type:"number","default":0},zOffset:{type:"number","default":.001}},init:function(){this.texture=new THREE.Texture;this.texture.anisotropy=MAX_ANISOTROPY;this.geometry=createTextGeometry();this.createOrUpdateMaterial();this.mesh=new THREE.Mesh(this.geometry,this.material);this.el.setObject3D(this.attrName,this.mesh)},update:function(oldData){var data=coerceData(this.data);var font=this.currentFont;this.createOrUpdateMaterial();if(oldData.font!==data.font){this.updateFont();return}if(font){this.updateGeometry(this.geometry,data,font);this.updateLayout(data)}},remove:function(){this.geometry.dispose();this.geometry=null;this.el.removeObject3D(this.attrName);this.material.dispose();this.material=null;this.texture.dispose();this.texture=null;if(this.shaderObject){delete this.shaderObject}},createOrUpdateMaterial:function(){var data=this.data;var hasChangedShader;var material=this.material;var NewShader;var shaderData;var shaderName;shaderName=data.shader;if(MSDF_FONTS.indexOf(data.font)!==-1||data.font.indexOf("-msdf.")>=0){shaderName="msdf"}else if(data.font in FONTS&&MSDF_FONTS.indexOf(data.font)===-1){shaderName="sdf"}hasChangedShader=(this.shaderObject&&this.shaderObject.name)!==shaderName;shaderData={alphaTest:data.alphaTest,color:data.color,map:this.texture,opacity:data.opacity,side:parseSide(data.side),transparent:data.transparent};if(!hasChangedShader){this.shaderObject.update(shaderData);material.transparent=shaderData.transparent;updateBaseMaterial(material,shaderData);return}NewShader=createShader(this.el,shaderName,shaderData);this.material=NewShader.material;this.shaderObject=NewShader.shader;updateBaseMaterial(this.material,shaderData);if(this.mesh){this.mesh.material=this.material}},updateFont:function(){var data=this.data;var el=this.el;var fontSrc;var geometry=this.geometry;var self=this;if(!data.font){warn("No font specified. Using the default font.")}this.mesh.visible=false;fontSrc=this.lookupFont(data.font||DEFAULT_FONT)||data.font;cache.get(fontSrc,function doLoadFont(){return loadFont(fontSrc,data.yOffset)}).then(function setFont(font){var coercedData;var fontImgSrc;if(font.pages.length!==1){throw new Error("Currently only single-page bitmap fonts are supported.")}if(!fontWidthFactors[fontSrc]){font.widthFactor=fontWidthFactors[font]=computeFontWidthFactor(font)}coercedData=coerceData(data);self.updateGeometry(geometry,self.data,font);self.currentFont=font;self.updateLayout(coercedData);fontImgSrc=data.fontImage||fontSrc.replace(/(\.fnt)|(\.json)/,".png")||path.dirname(data.font)+"/"+font.pages[0];cache.get(fontImgSrc,function(){return loadTexture(fontImgSrc)}).then(function(image){self.mesh.visible=true;self.texture.image=image;self.texture.needsUpdate=true;el.emit("textfontset",{font:data.font,fontObj:font})}).catch(function(err){error(err);throw err})}).catch(function(err){error(err);throw err})},updateLayout:function(data){var anchor;var baseline;var el=this.el;var geometry=this.geometry;var geometryComponent=el.getAttribute("geometry");var height;var layout=geometry.layout;var mesh=this.mesh;var textRenderWidth;var textScale;var width;var x;var y;geometryComponent=el.getAttribute("geometry");width=data.width||geometryComponent&&geometryComponent.width||DEFAULT_WIDTH;textRenderWidth=computeWidth(data.wrapPixels,data.wrapCount,this.currentFont.widthFactor);textScale=width/textRenderWidth;height=textScale*(layout.height+layout.descender);if(geometryComponent){if(!geometryComponent.width){el.setAttribute("geometry","width",width)}if(!geometryComponent.height){el.setAttribute("geometry","height",height)}}anchor=data.anchor==="align"?data.align:data.anchor;if(anchor==="left"){x=0}else if(anchor==="right"){x=-1*layout.width}else if(anchor==="center"){x=-1*layout.width/2}else{throw new TypeError("Invalid text.anchor property value",anchor)}baseline=data.baseline;if(baseline==="bottom"){y=0}else if(baseline==="top"){y=-1*layout.height+layout.ascender}else if(baseline==="center"){y=-1*layout.height/2}else{throw new TypeError("Invalid text.baseline property value",baseline)}mesh.position.x=x*textScale;mesh.position.y=y*textScale;mesh.position.z=data.zOffset;mesh.scale.set(textScale,-1*textScale,textScale);this.geometry.computeBoundingSphere()},lookupFont:function(key){return FONTS[key]},updateGeometry:function(geometry,data,font){geometry.update(utils.extend({},data,{font:font,width:computeWidth(data.wrapPixels,data.wrapCount,font.widthFactor),text:data.value.replace(/\\n/g,"\n").replace(/\\t/g," "),lineHeight:data.lineHeight||font.common.lineHeight}))}});function parseSide(side){switch(side){case"back":{return THREE.BackSide}case"double":{return THREE.DoubleSide}default:{return THREE.FrontSide}}}function coerceData(data){data=utils.clone(data);if(data.lineHeight!==undefined){data.lineHeight=parseFloat(data.lineHeight);if(!isFinite(data.lineHeight)){data.lineHeight=undefined}}if(data.width!==undefined){data.width=parseFloat(data.width);if(!isFinite(data.width)){data.width=undefined}}return data}function loadFont(src,yOffset){return new Promise(function(resolve,reject){loadBMFont(src,function(err,font){if(err){error("Error loading font",src);reject(err);return}if(src.indexOf("/Roboto-msdf.json")>=0){yOffset=30}if(yOffset){font.chars.map(function doOffset(ch){ch.yoffset+=yOffset})}resolve(font)})})}function loadTexture(src){return new Promise(function(resolve,reject){(new THREE.ImageLoader).load(src,function(image){resolve(image)},undefined,function(){error("Error loading font image",src);reject(null)})})}function createShader(el,shaderName,data){var shader;var shaderObject;shaderObject=new shaders[shaderName].Shader;shaderObject.el=el;shaderObject.init(data);shaderObject.update(data);shader=shaderObject.material;shader.transparent=data.transparent;return{material:shader,shader:shaderObject}}function updateBaseMaterial(material,data){material.side=data.side}function computeWidth(wrapPixels,wrapCount,widthFactor){return wrapPixels||(.5+wrapCount)*widthFactor}function computeFontWidthFactor(font){var sum=0;var digitsum=0;var digits=0;font.chars.map(function(ch){sum+=ch.xadvance;if(ch.id>=48&&ch.id<=57){digits++;digitsum+=ch.xadvance}});return digits?digitsum/digits:sum/font.chars.length}function PromiseCache(){var cache=this.cache={};this.get=function(key,promiseGenerator){if(key in cache){return cache[key]}cache[key]=promiseGenerator();return cache[key]}}},{"../core/component":125,"../core/shader":134,"../lib/three":173,"../utils/":196,"load-bmfont":24,path:32,"three-bmfont-text":37}],111:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var THREE=_dereq_("../lib/three");var DEFAULT_USER_HEIGHT=_dereq_("../constants").DEFAULT_USER_HEIGHT;var DEFAULT_HANDEDNESS=_dereq_("../constants").DEFAULT_HANDEDNESS;var EYES_TO_ELBOW={x:.175,y:-.3,z:-.03};var FOREARM={x:0,y:0,z:-.175};module.exports.Component=registerComponent("tracked-controls",{schema:{controller:{"default":0},id:{type:"string","default":""},idPrefix:{type:"string","default":""},rotationOffset:{"default":0},armModel:{"default":true},headElement:{type:"selector"}},init:function(){this.axis=[0,0,0];this.buttonStates={};this.dolly=new THREE.Object3D;this.controllerEuler=new THREE.Euler;this.controllerEuler.order="YXZ";this.controllerPosition=new THREE.Vector3;this.controllerQuaternion=new THREE.Quaternion;this.deltaControllerPosition=new THREE.Vector3;this.standingMatrix=new THREE.Matrix4;this.previousControllerPosition=new THREE.Vector3;this.updateGamepad()},tick:function(time,delta){var mesh=this.el.getObject3D("mesh");if(mesh&&mesh.update){mesh.update(delta/1e3)}this.updateGamepad();this.updatePose();this.updateButtons()},defaultUserHeight:function(){return DEFAULT_USER_HEIGHT},getHeadElement:function(){return this.data.headElement||this.el.sceneEl.camera.el},updateGamepad:function(){var controllers=this.system.controllers;var data=this.data;var matchingControllers;matchingControllers=controllers.filter(function hasIdOrPrefix(controller){if(data.idPrefix){return controller.id.indexOf(data.idPrefix)===0}return controller.id===data.id});this.controller=matchingControllers[data.controller]},applyArmModel:function(controllerPosition){var controller=this.controller;var pose=controller.pose;var controllerQuaternion=this.controllerQuaternion;var controllerEuler=this.controllerEuler;var deltaControllerPosition=this.deltaControllerPosition;var hand=(controller?controller.hand:undefined)||DEFAULT_HANDEDNESS;var headEl=this.getHeadElement();var headObject3D=headEl.object3D;var headCamera=headEl.components.camera;var userHeight=(headCamera?headCamera.data.userHeight:0)||this.defaultUserHeight();controllerPosition.copy(headObject3D.position);deltaControllerPosition.set(EYES_TO_ELBOW.x*(hand==="left"?-1:hand==="right"?1:0),EYES_TO_ELBOW.y,EYES_TO_ELBOW.z);deltaControllerPosition.multiplyScalar(userHeight);deltaControllerPosition.applyAxisAngle(headObject3D.up,headObject3D.rotation.y);controllerPosition.add(deltaControllerPosition);deltaControllerPosition.set(FOREARM.x,FOREARM.y,FOREARM.z);deltaControllerPosition.multiplyScalar(userHeight);if(pose.orientation){controllerQuaternion.fromArray(pose.orientation)}else{controllerQuaternion.copy(headObject3D.quaternion)}controllerEuler.setFromQuaternion(controllerQuaternion);controllerEuler.set(controllerEuler.x,controllerEuler.y,0);deltaControllerPosition.applyEuler(controllerEuler);controllerPosition.add(deltaControllerPosition)},updatePose:function(){var controller=this.controller;var controllerEuler=this.controllerEuler;var controllerPosition=this.controllerPosition;var currentPosition;var deltaControllerPosition=this.deltaControllerPosition;var dolly=this.dolly;var el=this.el;var pose;var standingMatrix=this.standingMatrix;var vrDisplay=this.system.vrDisplay;var headEl=this.getHeadElement();var headObject3D=headEl.object3D;var headCamera=headEl.components.camera;var userHeight=(headCamera?headCamera.data.userHeight:0)||this.defaultUserHeight();if(!controller){return}pose=controller.pose;if(pose.orientation){dolly.quaternion.fromArray(pose.orientation)}else{dolly.quaternion.copy(headObject3D.quaternion)}if(pose.position){dolly.position.fromArray(pose.position)}else{if(this.data.armModel){this.applyArmModel(controllerPosition)}dolly.position.copy(controllerPosition);
}dolly.updateMatrix();if(pose.position&&vrDisplay){if(vrDisplay.stageParameters){standingMatrix.fromArray(vrDisplay.stageParameters.sittingToStandingTransform);dolly.applyMatrix(standingMatrix)}else{dolly.position.y+=userHeight;dolly.updateMatrix()}}controllerEuler.setFromRotationMatrix(dolly.matrix);controllerPosition.setFromMatrixPosition(dolly.matrix);el.setAttribute("rotation",{x:THREE.Math.radToDeg(controllerEuler.x),y:THREE.Math.radToDeg(controllerEuler.y),z:THREE.Math.radToDeg(controllerEuler.z)+this.data.rotationOffset});deltaControllerPosition.copy(controllerPosition).sub(this.previousControllerPosition);this.previousControllerPosition.copy(controllerPosition);currentPosition=el.getAttribute("position");el.setAttribute("position",{x:currentPosition.x+deltaControllerPosition.x,y:currentPosition.y+deltaControllerPosition.y,z:currentPosition.z+deltaControllerPosition.z})},updateButtons:function(){var buttonState;var controller=this.controller;var id;if(!controller){return}for(id=0;id<controller.buttons.length;++id){if(!this.buttonStates[id]){this.buttonStates[id]={pressed:false,touched:false,value:0}}buttonState=controller.buttons[id];this.handleButton(id,buttonState)}this.handleAxes()},handleButton:function(id,buttonState){var changed=this.handlePress(id,buttonState)||this.handleTouch(id,buttonState)||this.handleValue(id,buttonState);if(!changed){return false}this.el.emit("buttonchanged",{id:id,state:buttonState});return true},handleAxes:function(){var changed=false;var controllerAxes=this.controller.axes;var i;var previousAxis=this.axis;var changedAxes=[];for(i=0;i<controllerAxes.length;++i){changedAxes.push(previousAxis[i]!==controllerAxes[i]);if(changedAxes[i]){changed=true}}if(!changed){return false}this.axis=controllerAxes.slice();this.el.emit("axismove",{axis:this.axis,changed:changedAxes});return true},handlePress:function(id,buttonState){var evtName;var previousButtonState=this.buttonStates[id];if(buttonState.pressed===previousButtonState.pressed){return false}evtName=buttonState.pressed?"down":"up";this.el.emit("button"+evtName,{id:id,state:buttonState});previousButtonState.pressed=buttonState.pressed;return true},handleTouch:function(id,buttonState){var evtName;var previousButtonState=this.buttonStates[id];if(buttonState.touched===previousButtonState.touched){return false}evtName=buttonState.touched?"start":"end";this.el.emit("touch"+evtName,{id:id,state:buttonState},true,{touches:[]});previousButtonState.touched=buttonState.touched;return true},handleValue:function(id,buttonState){var previousButtonState=this.buttonStates[id];if(buttonState.value===previousButtonState.value){return false}previousButtonState.value=buttonState.value;return true}})},{"../constants":116,"../core/component":125,"../lib/three":173}],112:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;module.exports.Component=registerComponent("visible",{schema:{"default":true},update:function(){this.el.object3D.visible=this.data}})},{"../core/component":125}],113:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var utils=_dereq_("../utils/");var bind=utils.bind;var checkControllerPresentAndSetup=utils.trackedControls.checkControllerPresentAndSetup;var emitIfAxesChanged=utils.trackedControls.emitIfAxesChanged;var VIVE_CONTROLLER_MODEL_OBJ_URL="https://cdn.aframe.io/controllers/vive/vr_controller_vive.obj";var VIVE_CONTROLLER_MODEL_OBJ_MTL="https://cdn.aframe.io/controllers/vive/vr_controller_vive.mtl";var GAMEPAD_ID_PREFIX="OpenVR ";module.exports.Component=registerComponent("vive-controls",{schema:{hand:{"default":"left"},buttonColor:{type:"color","default":"#FAFAFA"},buttonHighlightColor:{type:"color","default":"#22D1EE"},model:{"default":true},rotationOffset:{"default":0}},mapping:{axes:{trackpad:[0,1]},buttons:["trackpad","trigger","grip","menu","system"]},axisLabels:["x","y","z","w"],init:function(){var self=this;this.animationActive="pointing";this.checkControllerPresentAndSetup=checkControllerPresentAndSetup;this.controllerPresent=false;this.emitIfAxesChanged=emitIfAxesChanged;this.lastControllerCheck=0;this.onButtonChanged=bind(this.onButtonChanged,this);this.onButtonDown=function(evt){self.onButtonEvent(evt.detail.id,"down")};this.onButtonUp=function(evt){self.onButtonEvent(evt.detail.id,"up")};this.onButtonTouchEnd=function(evt){self.onButtonEvent(evt.detail.id,"touchend")};this.onButtonTouchStart=function(evt){self.onButtonEvent(evt.detail.id,"touchstart")};this.onAxisMoved=bind(this.onAxisMoved,this);this.previousButtonValues={};this.bindMethods()},play:function(){this.checkIfControllerPresent();this.addControllersUpdateListener();window.addEventListener("gamepaddisconnected",this.checkIfControllerPresent,false)},pause:function(){this.removeEventListeners();this.removeControllersUpdateListener();window.removeEventListener("gamepaddisconnected",this.checkIfControllerPresent,false)},bindMethods:function(){this.onModelLoaded=bind(this.onModelLoaded,this);this.onControllersUpdate=bind(this.onControllersUpdate,this);this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this);this.removeControllersUpdateListener=bind(this.removeControllersUpdateListener,this);this.onAxisMoved=bind(this.onAxisMoved,this)},addEventListeners:function(){var el=this.el;el.addEventListener("buttonchanged",this.onButtonChanged);el.addEventListener("buttondown",this.onButtonDown);el.addEventListener("buttonup",this.onButtonUp);el.addEventListener("touchend",this.onButtonTouchEnd);el.addEventListener("touchstart",this.onButtonTouchStart);el.addEventListener("model-loaded",this.onModelLoaded);el.addEventListener("axismove",this.onAxisMoved);this.controllerEventsActive=true},removeEventListeners:function(){var el=this.el;el.removeEventListener("buttonchanged",this.onButtonChanged);el.removeEventListener("buttondown",this.onButtonDown);el.removeEventListener("buttonup",this.onButtonUp);el.removeEventListener("touchend",this.onButtonTouchEnd);el.removeEventListener("touchstart",this.onButtonTouchStart);el.removeEventListener("model-loaded",this.onModelLoaded);el.removeEventListener("axismove",this.onAxisMoved);this.controllerEventsActive=false},checkIfControllerPresent:function(){var data=this.data;var controllerIndex=data.hand==="right"?0:data.hand==="left"?1:2;this.checkControllerPresentAndSetup(this,GAMEPAD_ID_PREFIX,{index:controllerIndex})},injectTrackedControls:function(){var el=this.el;var data=this.data;el.setAttribute("tracked-controls",{idPrefix:GAMEPAD_ID_PREFIX,controller:data.hand==="right"?0:data.hand==="left"?1:2,rotationOffset:data.rotationOffset});if(!this.data.model){return}this.el.setAttribute("obj-model",{obj:VIVE_CONTROLLER_MODEL_OBJ_URL,mtl:VIVE_CONTROLLER_MODEL_OBJ_MTL})},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,false)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,false)},onControllersUpdate:function(){this.checkIfControllerPresent()},onButtonChanged:function(evt){var button=this.mapping.buttons[evt.detail.id];var buttonMeshes=this.buttonMeshes;var analogValue;if(!button){return}if(button==="trigger"){analogValue=evt.detail.state.value;if(buttonMeshes&&buttonMeshes.trigger){buttonMeshes.trigger.rotation.x=-analogValue*(Math.PI/12)}}this.el.emit(button+"changed",evt.detail.state)},onModelLoaded:function(evt){var buttonMeshes;var controllerObject3D=evt.detail.model;var self=this;if(!this.data.model){return}buttonMeshes=this.buttonMeshes={};buttonMeshes.grip={left:controllerObject3D.getObjectByName("leftgrip"),right:controllerObject3D.getObjectByName("rightgrip")};buttonMeshes.menu=controllerObject3D.getObjectByName("menubutton");buttonMeshes.system=controllerObject3D.getObjectByName("systembutton");buttonMeshes.trackpad=controllerObject3D.getObjectByName("touchpad");buttonMeshes.trigger=controllerObject3D.getObjectByName("trigger");Object.keys(buttonMeshes).forEach(function(buttonName){self.setButtonColor(buttonName,self.data.buttonColor)});controllerObject3D.position.set(0,-.015,.04)},onAxisMoved:function(evt){this.emitIfAxesChanged(this,this.mapping.axes,evt)},onButtonEvent:function(id,evtName){var buttonName=this.mapping.buttons[id];var color;var i;var isTouch=evtName.indexOf("touch")!==-1;if(Array.isArray(buttonName)){for(i=0;i<buttonName.length;i++){this.el.emit(buttonName[i]+evtName)}}else{this.el.emit(buttonName+evtName)}if(!this.data.model){return}if(isTouch){return}color=evtName==="up"?this.data.buttonColor:this.data.buttonHighlightColor;if(Array.isArray(buttonName)){for(i=0;i<buttonName.length;i++){this.setButtonColor(buttonName[i],color)}}else{this.setButtonColor(buttonName,color)}},setButtonColor:function(buttonName,color){var buttonMeshes=this.buttonMeshes;if(!buttonMeshes){return}if(buttonName==="grip"){buttonMeshes.grip.left.material.color.set(color);buttonMeshes.grip.right.material.color.set(color);return}buttonMeshes[buttonName].material.color.set(color)}})},{"../core/component":125,"../utils/":196}],114:[function(_dereq_,module,exports){var KEYCODE_TO_CODE=_dereq_("../constants").keyboardevent.KEYCODE_TO_CODE;var registerComponent=_dereq_("../core/component").registerComponent;var THREE=_dereq_("../lib/three");var utils=_dereq_("../utils/");var bind=utils.bind;var shouldCaptureKeyEvent=utils.shouldCaptureKeyEvent;var CLAMP_VELOCITY=1e-5;var MAX_DELTA=.2;module.exports.Component=registerComponent("wasd-controls",{schema:{acceleration:{"default":65},adAxis:{"default":"x",oneOf:["x","y","z"]},adEnabled:{"default":true},adInverted:{"default":false},easing:{"default":20},enabled:{"default":true},fly:{"default":false},wsAxis:{"default":"z",oneOf:["x","y","z"]},wsEnabled:{"default":true},wsInverted:{"default":false}},init:function(){this.keys={};this.velocity=new THREE.Vector3;this.onBlur=bind(this.onBlur,this);this.onFocus=bind(this.onFocus,this);this.onKeyDown=bind(this.onKeyDown,this);this.onKeyUp=bind(this.onKeyUp,this);this.onVisibilityChange=bind(this.onVisibilityChange,this);this.attachVisibilityEventListeners()},tick:function(time,delta){var data=this.data;var el=this.el;var movementVector;var position;var velocity=this.velocity;delta=delta/1e3;this.updateVelocity(delta);if(!velocity[data.adAxis]&&!velocity[data.wsAxis]){return}movementVector=this.getMovementVector(delta);position=el.getAttribute("position");el.setAttribute("position",{x:position.x+movementVector.x,y:position.y+movementVector.y,z:position.z+movementVector.z})},remove:function(){this.removeKeyEventListeners();this.removeVisibilityEventListeners()},play:function(){this.attachKeyEventListeners()},pause:function(){this.keys={};this.removeKeyEventListeners()},updateVelocity:function(delta){var acceleration;var adAxis;var adSign;var data=this.data;var keys=this.keys;var velocity=this.velocity;var wsAxis;var wsSign;adAxis=data.adAxis;wsAxis=data.wsAxis;if(delta>MAX_DELTA){velocity[adAxis]=0;velocity[wsAxis]=0;return}if(velocity[adAxis]!==0){velocity[adAxis]-=velocity[adAxis]*data.easing*delta}if(velocity[wsAxis]!==0){velocity[wsAxis]-=velocity[wsAxis]*data.easing*delta}if(Math.abs(velocity[adAxis])<CLAMP_VELOCITY){velocity[adAxis]=0}if(Math.abs(velocity[wsAxis])<CLAMP_VELOCITY){velocity[wsAxis]=0}if(!data.enabled){return}acceleration=data.acceleration;if(data.adEnabled){adSign=data.adInverted?-1:1;if(keys.KeyA||keys.ArrowLeft){velocity[adAxis]-=adSign*acceleration*delta}if(keys.KeyD||keys.ArrowRight){velocity[adAxis]+=adSign*acceleration*delta}}if(data.wsEnabled){wsSign=data.wsInverted?-1:1;if(keys.KeyW||keys.ArrowUp){velocity[wsAxis]-=wsSign*acceleration*delta}if(keys.KeyS||keys.ArrowDown){velocity[wsAxis]+=wsSign*acceleration*delta}}},getMovementVector:function(){var directionVector=new THREE.Vector3(0,0,0);var rotationEuler=new THREE.Euler(0,0,0,"YXZ");return function(delta){var rotation=this.el.getAttribute("rotation");var velocity=this.velocity;var xRotation;directionVector.copy(velocity);directionVector.multiplyScalar(delta);if(!rotation){return directionVector}xRotation=this.data.fly?rotation.x:0;rotationEuler.set(THREE.Math.degToRad(xRotation),THREE.Math.degToRad(rotation.y),0);directionVector.applyEuler(rotationEuler);return directionVector}}(),attachVisibilityEventListeners:function(){window.addEventListener("blur",this.onBlur);window.addEventListener("focus",this.onFocus);document.addEventListener("visibilitychange",this.onVisibilityChange)},removeVisibilityEventListeners:function(){window.removeEventListener("blur",this.onBlur);window.removeEventListener("focus",this.onFocus);document.removeEventListener("visibilitychange",this.onVisibilityChange)},attachKeyEventListeners:function(){window.addEventListener("keydown",this.onKeyDown);window.addEventListener("keyup",this.onKeyUp)},removeKeyEventListeners:function(){window.removeEventListener("keydown",this.onKeyDown);window.removeEventListener("keyup",this.onKeyUp)},onBlur:function(){this.pause()},onFocus:function(){this.play()},onVisibilityChange:function(){if(document.hidden){this.onBlur()}else{this.onFocus()}},onKeyDown:function(event){var code;if(!shouldCaptureKeyEvent(event)){return}code=event.code||KEYCODE_TO_CODE[event.keyCode];this.keys[code]=true},onKeyUp:function(event){var code;code=event.code||KEYCODE_TO_CODE[event.keyCode];this.keys[code]=false}})},{"../constants":116,"../core/component":125,"../lib/three":173,"../utils/":196}],115:[function(_dereq_,module,exports){var TWEEN=_dereq_("@tweenjs/tween.js");var DIRECTIONS={alternate:"alternate",alternateReverse:"alternate-reverse",normal:"normal",reverse:"reverse"};var EASING_FUNCTIONS={linear:TWEEN.Easing.Linear.None,ease:TWEEN.Easing.Cubic.InOut,"ease-in":TWEEN.Easing.Cubic.In,"ease-out":TWEEN.Easing.Cubic.Out,"ease-in-out":TWEEN.Easing.Cubic.InOut,"ease-cubic":TWEEN.Easing.Cubic.In,"ease-in-cubic":TWEEN.Easing.Cubic.In,"ease-out-cubic":TWEEN.Easing.Cubic.Out,"ease-in-out-cubic":TWEEN.Easing.Cubic.InOut,"ease-quad":TWEEN.Easing.Quadratic.InOut,"ease-in-quad":TWEEN.Easing.Quadratic.In,"ease-out-quad":TWEEN.Easing.Quadratic.Out,"ease-in-out-quad":TWEEN.Easing.Quadratic.InOut,"ease-quart":TWEEN.Easing.Quartic.InOut,"ease-in-quart":TWEEN.Easing.Quartic.In,"ease-out-quart":TWEEN.Easing.Quartic.Out,"ease-in-out-quart":TWEEN.Easing.Quartic.InOut,"ease-quint":TWEEN.Easing.Quintic.InOut,"ease-in-quint":TWEEN.Easing.Quintic.In,"ease-out-quint":TWEEN.Easing.Quintic.Out,"ease-in-out-quint":TWEEN.Easing.Quintic.InOut,"ease-sine":TWEEN.Easing.Sinusoidal.InOut,"ease-in-sine":TWEEN.Easing.Sinusoidal.In,"ease-out-sine":TWEEN.Easing.Sinusoidal.Out,"ease-in-out-sine":TWEEN.Easing.Sinusoidal.InOut,"ease-expo":TWEEN.Easing.Exponential.InOut,"ease-in-expo":TWEEN.Easing.Exponential.In,"ease-out-expo":TWEEN.Easing.Exponential.Out,"ease-in-out-expo":TWEEN.Easing.Exponential.InOut,"ease-circ":TWEEN.Easing.Circular.InOut,"ease-in-circ":TWEEN.Easing.Circular.In,"ease-out-circ":TWEEN.Easing.Circular.Out,"ease-in-out-circ":TWEEN.Easing.Circular.InOut,"ease-elastic":TWEEN.Easing.Elastic.InOut,"ease-in-elastic":TWEEN.Easing.Elastic.In,"ease-out-elastic":TWEEN.Easing.Elastic.Out,"ease-in-out-elastic":TWEEN.Easing.Elastic.InOut,"ease-back":TWEEN.Easing.Back.InOut,"ease-in-back":TWEEN.Easing.Back.In,"ease-out-back":TWEEN.Easing.Back.Out,"ease-in-out-back":TWEEN.Easing.Back.InOut,"ease-bounce":TWEEN.Easing.Bounce.InOut,"ease-in-bounce":TWEEN.Easing.Bounce.In,"ease-out-bounce":TWEEN.Easing.Bounce.Out,"ease-in-out-bounce":TWEEN.Easing.Bounce.InOut};var FILLS={backwards:"backwards",both:"both",forwards:"forwards",none:"none"};var REPEATS={indefinite:"indefinite"};var DEFAULTS={attribute:"rotation",begin:"",end:"",delay:0,dur:1e3,easing:"ease",direction:DIRECTIONS.normal,fill:FILLS.forwards,from:undefined,repeat:0,to:undefined};module.exports.defaults=DEFAULTS;module.exports.directions=DIRECTIONS;module.exports.easingFunctions=EASING_FUNCTIONS;module.exports.fills=FILLS;module.exports.repeats=REPEATS},{"@tweenjs/tween.js":1}],116:[function(_dereq_,module,exports){module.exports={AFRAME_INJECTED:"aframe-injected",DEFAULT_CAMERA_HEIGHT:1.6,DEFAULT_HANDEDNESS:"right",animation:_dereq_("./animation"),keyboardevent:_dereq_("./keyboardevent")}},{"./animation":115,"./keyboardevent":117}],117:[function(_dereq_,module,exports){module.exports={KEYCODE_TO_CODE:{38:"ArrowUp",37:"ArrowLeft",40:"ArrowDown",39:"ArrowRight",87:"KeyW",65:"KeyA",83:"KeyS",68:"KeyD"}}},{}],118:[function(_dereq_,module,exports){var ANode=_dereq_("./a-node");var animationConstants=_dereq_("../constants/animation");var coordinates=_dereq_("../utils/").coordinates;var parseProperty=_dereq_("./schema").parseProperty;var registerElement=_dereq_("./a-register-element").registerElement;var TWEEN=_dereq_("@tweenjs/tween.js");var THREE=_dereq_("../lib/three");var utils=_dereq_("../utils/");var bind=utils.bind;var getComponentProperty=utils.entity.getComponentProperty;var DEFAULTS=animationConstants.defaults;var DIRECTIONS=animationConstants.directions;var EASING_FUNCTIONS=animationConstants.easingFunctions;var FILLS=animationConstants.fills;var REPEATS=animationConstants.repeats;var isCoordinates=coordinates.isCoordinates;module.exports.AAnimation=registerElement("a-animation",{prototype:Object.create(ANode.prototype,{createdCallback:{value:function(){this.bindMethods();this.isRunning=false;this.partialSetAttribute=function(){};this.tween=null}},attachedCallback:{value:function(){this.el=this.parentNode;this.handleMixinUpdate();this.update();this.load()}},attributeChangedCallback:{value:function(attr,oldVal,newVal){if(!this.hasLoaded||!this.isRunning){return}this.stop();this.handleMixinUpdate();this.update()}},detachedCallback:{value:function(){if(!this.isRunning){return}this.stop()}},getTween:{value:function(){var self=this;var data=self.data;var el=self.el;var animationValues;var attribute=data.attribute;var delay=parseInt(data.delay,10);var currentValue=getComponentProperty(el,attribute);var direction=self.getDirection(data.direction);var easing=EASING_FUNCTIONS[data.easing];var fill=data.fill;var from;var repeat=data.repeat===REPEATS.indefinite?Infinity:0;var to;var toTemp;var yoyo=false;animationValues=getAnimationValues(el,attribute,data.from||self.initialValue,data.to,currentValue);from=animationValues.from;to=animationValues.to;self.partialSetAttribute=animationValues.partialSetAttribute;if(self.count===undefined){self.count=repeat===Infinity?0:parseInt(data.repeat,10)}if(isNaN(delay)){delay=0}self.initialValue=self.initialValue||cloneValue(currentValue);if(repeat===Infinity&&fill===FILLS.forwards&&[DIRECTIONS.alternate,DIRECTIONS.alternateReverse].indexOf(data.direction)!==-1){yoyo=true}if(direction===DIRECTIONS.reverse){toTemp=to;to=cloneValue(from);from=cloneValue(toTemp)}if([FILLS.backwards,FILLS.both].indexOf(fill)!==-1){self.partialSetAttribute(from)}return new TWEEN.Tween(cloneValue(from)).to(to,data.dur).delay(delay).easing(easing).repeat(repeat).yoyo(yoyo).onUpdate(function(){self.partialSetAttribute(this)}).onComplete(bind(self.onCompleted,self))}},update:{value:function(){var data=this.data;if(data.repeat==="infinite"){console.warn("Using 'infinite' as 'repeat' value is invalid. Use 'indefinite' instead.")}if(data.begin!==""&&!isNaN(data.begin)){console.warn("Using 'begin' to specify a delay is deprecated. Use 'delay' instead.");data.delay=data.begin;data.begin=""}var begin=data.begin;var end=data.end;if(this.evt){this.removeEventListeners(this.evt)}this.evt={begin:begin,end:end};this.addEventListeners(this.evt);if(begin===""){this.stop();this.start()}},writable:window.debug},onCompleted:{value:function(){var data=this.data;this.isRunning=false;if([FILLS.backwards,FILLS.none].indexOf(data.fill)!==-1){this.partialSetAttribute(this.initialValue)}if(this.count===0){this.count=undefined;this.emit("animationend");return}this.isRunning=false;this.count--;this.start()}},start:{value:function(){var self=this;if(!this.el.hasLoaded){this.el.addEventListener("loaded",function(){self.start()});return}if(this.isRunning||!this.el.isPlaying){return}this.tween=this.getTween();this.isRunning=true;this.tween.start();this.emit("animationstart")},writable:true},stop:{value:function(){var tween=this.tween;if(!tween){return}tween.stop();this.isRunning=false;if([FILLS.backwards,FILLS.none].indexOf(this.data.fill)!==-1){this.partialSetAttribute(this.initialValue)}this.emit("animationstop")},writable:true},getDirection:{value:function(direction){if(direction===DIRECTIONS.alternate){this.prevDirection=this.prevDirection===DIRECTIONS.normal?DIRECTIONS.reverse:DIRECTIONS.normal;return this.prevDirection}if(direction===DIRECTIONS.alternateReverse){this.prevDirection=this.prevDirection===DIRECTIONS.reverse?DIRECTIONS.normal:DIRECTIONS.reverse;return this.prevDirection}return direction}},bindMethods:{value:function(){this.start=bind(this.start,this);this.stop=bind(this.stop,this);this.onStateAdded=bind(this.onStateAdded,this);this.onStateRemoved=bind(this.onStateRemoved,this)}},addEventListeners:{value:function(evts){var el=this.el;var self=this;utils.splitString(evts.begin).forEach(function(evt){el.addEventListener(evt,self.start)});utils.splitString(evts.end).forEach(function(evt){el.addEventListener(evt,self.stop)});if(evts.begin===""){el.addEventListener("play",this.start)}el.addEventListener("pause",this.stop);el.addEventListener("stateadded",this.onStateAdded);el.addEventListener("stateremoved",this.onStateRemoved)}},removeEventListeners:{value:function(evts){var el=this.el;var start=this.start;var stop=this.stop;utils.splitString(evts.begin).forEach(function(evt){el.removeEventListener(evt,start)});utils.splitString(evts.end).forEach(function(evt){el.removeEventListener(evt,stop)});el.removeEventListener("stateadded",this.onStateAdded);el.removeEventListener("stateremoved",this.onStateRemoved)}},onStateAdded:{value:function(evt){if(evt.detail.state===this.data.begin){this.start()}},writable:true},onStateRemoved:{value:function(evt){if(evt.detail.state===this.data.begin){this.stop()}},writable:true},handleMixinUpdate:{value:function(){var data={};var elData;var mixinData;var mixinEl;mixinEl=document.querySelector("#"+this.getAttribute("mixin"));mixinData=mixinEl?utils.getElData(mixinEl,DEFAULTS):{};elData=utils.getElData(this,DEFAULTS);utils.extend(data,DEFAULTS,mixinData,elData);this.data=data}}})});function cloneValue(val){return utils.extend({},val)}function getAnimationValues(el,attribute,dataFrom,dataTo,currentValue){var attributeSplit=attribute.split(".");var schema;var component;var componentPropName;var componentName;var from={};var partialSetAttribute;var to={};if(attributeSplit.length===2){if(isColor()){getForColorComponent()}else{getForComponentAttribute()}}else if(dataTo&&isCoordinates(dataTo)){getForCoordinateComponent()}else if(["true","false"].indexOf(dataTo)!==-1){getForBoolean()}else if(isNaN(dataTo)){getForColorComponent()}else{getForNumber()}return{from:from,partialSetAttribute:partialSetAttribute,to:to};function isColor(){var componentName=attributeSplit[0];var propertyName=attributeSplit[1];var component=el.components[componentName];var schema=component&&component.schema;return schema&&schema[propertyName]&&schema[propertyName].type==="color"}function getForComponentAttribute(){componentName=attributeSplit[0];componentPropName=attributeSplit[1];component=el.components[componentName];if(!component){el.setAttribute(componentName,"");component=el.components[componentName]}schema=component.schema;if(dataFrom===undefined){from[attribute]=getComponentProperty(el,attribute)}else{from[attribute]=dataFrom}from[attribute]=parseProperty(from[attribute],schema[componentPropName]);to[attribute]=parseProperty(dataTo,schema[componentPropName]);partialSetAttribute=function(value){if(!(attribute in value)){return}el.setAttribute(componentName,componentPropName,value[attribute])}}function getForCoordinateComponent(){from=dataFrom?coordinates.parse(dataFrom):currentValue;to=coordinates.parse(dataTo);partialSetAttribute=function(value){el.setAttribute(attribute,value)}}function getForBoolean(){if(dataFrom===undefined){from[attribute]=false}else{from[attribute]=strToBool(dataFrom)}from[attribute]=boolToNum(from[attribute]);to[attribute]=boolToNum(strToBool(dataTo));partialSetAttribute=function(value){el.setAttribute(attribute,!!value[attribute])}}function getForColorComponent(){from=new THREE.Color(dataFrom||el.getAttribute(attribute));to=new THREE.Color(dataTo);partialSetAttribute=function(value){if(attributeSplit.length>1){el.setAttribute(attributeSplit[0],attributeSplit[1],rgbVectorToHex(value))}el.setAttribute(attribute,rgbVectorToHex(value))}}function getForNumber(){if(dataFrom===undefined){from[attribute]=parseFloat(el.getAttribute(attribute))}else{from[attribute]=parseFloat(dataFrom)}to[attribute]=parseFloat(dataTo);partialSetAttribute=function(value){el.setAttribute(attribute,value[attribute])}}}module.exports.getAnimationValues=getAnimationValues;function strToBool(str){if(str==="true"){return true}return false}function boolToNum(bool){return bool?1:0}function componentToHex(color){var hex=color.toString(16);return hex.length===1?"0"+hex:hex}function convertToIntegerColor(color){return Math.floor(Math.min(Math.abs(color),1)*255)}function rgbVectorToHex(color){return"#"+["r","g","b"].map(function(prop){return componentToHex(convertToIntegerColor(color[prop]))}).join("")}},{"../constants/animation":115,"../lib/three":173,"../utils/":196,"./a-node":123,"./a-register-element":124,"./schema":133,"@tweenjs/tween.js":1}],119:[function(_dereq_,module,exports){var ANode=_dereq_("./a-node");var bind=_dereq_("../utils/bind");var debug=_dereq_("../utils/debug");var registerElement=_dereq_("./a-register-element").registerElement;var THREE=_dereq_("../lib/three");var fileLoader=new THREE.FileLoader;var warn=debug("core:a-assets:warn");module.exports=registerElement("a-assets",{prototype:Object.create(ANode.prototype,{createdCallback:{value:function(){this.isAssets=true;this.fileLoader=fileLoader;this.timeout=null}},attachedCallback:{value:function(){var self=this;var i;var loaded=[];var mediaEl;var mediaEls;var imgEl;var imgEls;var timeout;if(!this.parentNode.isScene){throw new Error("<a-assets> must be a child of a <a-scene>.")}imgEls=this.querySelectorAll("img");for(i=0;i<imgEls.length;i++){imgEl=fixUpMediaElement(imgEls[i]);loaded.push(new Promise(function(resolve,reject){THREE.Cache.files[imgEls[i].getAttribute("src")]=imgEl;imgEl.onload=resolve;imgEl.onerror=reject}))}mediaEls=this.querySelectorAll("audio, video");for(i=0;i<mediaEls.length;i++){mediaEl=fixUpMediaElement(mediaEls[i]);loaded.push(mediaElementLoaded(mediaEl))}Promise.all(loaded).then(bind(this.load,this));timeout=parseInt(this.getAttribute("timeout"),10)||3e3;this.timeout=setTimeout(function(){if(self.hasLoaded){return}warn("Asset loading timed out in ",timeout,"ms");self.emit("timeout");self.load()},timeout)}},detachedCallback:{value:function(){if(this.timeout){clearTimeout(this.timeout)}}},load:{value:function(){ANode.prototype.load.call(this,null,function waitOnFilter(el){return el.isAssetItem&&el.hasAttribute("src")})}}})});registerElement("a-asset-item",{prototype:Object.create(ANode.prototype,{createdCallback:{value:function(){this.data=null;this.isAssetItem=true}},attachedCallback:{value:function(){var self=this;var src=this.getAttribute("src");fileLoader.setResponseType(this.getAttribute("response-type")||inferResponseType(src));fileLoader.load(src,function handleOnLoad(response){self.data=response;setTimeout(function load(){ANode.prototype.load.call(self)})},function handleOnProgress(xhr){self.emit("progress",{loadedBytes:xhr.loaded,totalBytes:xhr.total,xhr:xhr})},function handleOnError(xhr){self.emit("error",{xhr:xhr})})}}})});function mediaElementLoaded(el){if(!el.hasAttribute("autoplay")&&el.getAttribute("preload")!=="auto"){return}return new Promise(function(resolve,reject){if(el.readyState===4){return resolve()}if(el.error){return reject()}el.addEventListener("loadeddata",checkProgress,false);el.addEventListener("progress",checkProgress,false);el.addEventListener("error",reject,false);function checkProgress(){var secondsBuffered=0;for(var i=0;i<el.buffered.length;i++){secondsBuffered+=el.buffered.end(i)-el.buffered.start(i)}if(secondsBuffered>=el.duration){THREE.Cache.files[el.getAttribute("src")]=el;resolve()}}})}function fixUpMediaElement(mediaEl){var newMediaEl=setCrossOrigin(mediaEl);if(newMediaEl.tagName&&newMediaEl.tagName.toLowerCase()==="video"){newMediaEl.setAttribute("playsinline","");newMediaEl.setAttribute("webkit-playsinline","")}if(newMediaEl!==mediaEl){mediaEl.parentNode.appendChild(newMediaEl);mediaEl.parentNode.removeChild(mediaEl)}return newMediaEl}function setCrossOrigin(mediaEl){var newMediaEl;var src;if(mediaEl.hasAttribute("crossorigin")){return mediaEl}src=mediaEl.getAttribute("src");if(src!==null){if(src.indexOf("://")===-1){return mediaEl}if(extractDomain(src)===window.location.host){return mediaEl}}warn("Cross-origin element (e.g., <img>) was requested without `crossorigin` set. "+"A-Frame will re-request the asset with `crossorigin` attribute set. "+'Please set `crossorigin` on the element (e.g., <img crossorigin="anonymous">)',src);mediaEl.crossOrigin="anonymous";newMediaEl=mediaEl.cloneNode(true);return newMediaEl}function extractDomain(url){var domain=url.indexOf("://")>-1?url.split("/")[2]:url.split("/")[0];return domain.split(":")[0]}function inferResponseType(src){var dotLastIndex=src.lastIndexOf(".");if(dotLastIndex>=0){var extension=src.slice(dotLastIndex,src.length);if(extension===".gltf"||extension===".glb"){return"arraybuffer"}}return"text"}module.exports.inferResponseType=inferResponseType},{"../lib/three":173,"../utils/bind":190,"../utils/debug":192,"./a-node":123,"./a-register-element":124}],120:[function(_dereq_,module,exports){var debug=_dereq_("../utils/debug");var registerElement=_dereq_("./a-register-element").registerElement;var warn=debug("core:cubemap:warn");module.exports=registerElement("a-cubemap",{prototype:Object.create(window.HTMLElement.prototype,{attachedCallback:{value:function(){this.srcs=this.validate()},writable:window.debug},validate:{value:function(){var elements=this.querySelectorAll("[src]");var i;var srcs=[];if(elements.length===6){for(i=0;i<elements.length;i++){srcs.push(elements[i].getAttribute("src"))}return srcs}warn("<a-cubemap> did not contain exactly six elements each with a "+"`src` attribute.")},writable:window.debug}})})},{"../utils/debug":192,"./a-register-element":124}],121:[function(_dereq_,module,exports){var ANode=_dereq_("./a-node");var COMPONENTS=_dereq_("./component").components;var registerElement=_dereq_("./a-register-element").registerElement;var THREE=_dereq_("../lib/three");var utils=_dereq_("../utils/");var AEntity;var bind=utils.bind;var debug=utils.debug("core:a-entity:debug");var warn=utils.debug("core:a-entity:warn");var MULTIPLE_COMPONENT_DELIMITER="__";var proto=Object.create(ANode.prototype,{defaultComponents:{value:{position:"",rotation:"",scale:"",visible:""}},createdCallback:{value:function(){this.components={};this.initializingComponents={};this.isEntity=true;this.isPlaying=false;this.object3D=new THREE.Group;this.object3D.el=this;this.object3DMap={};this.parentEl=null;this.states=[]}},attributeChangedCallback:{value:function(attr,oldVal,newVal){var component=this.components[attr];if(component&&component.justInitialized&&newVal===""){delete component.justInitialized;return}if(!component&&newVal===null){return}this.setEntityAttribute(attr,oldVal,newVal)}},attachedCallback:{value:function(){var assetsEl;var sceneEl=this.sceneEl;var self=this;this.addToParent();if(this.isScene){return}if(!sceneEl){this.load();return}assetsEl=sceneEl.querySelector("a-assets");if(assetsEl&&!assetsEl.hasLoaded){assetsEl.addEventListener("loaded",function(){self.load()});return}this.load()}},detachedCallback:{value:function(){if(!this.parentEl){return}Object.keys(this.components).forEach(bind(this.removeComponent,this));
if(this.isScene){return}this.removeFromParent();ANode.prototype.detachedCallback.call(this)}},handleMixinUpdate:{value:function(attrName){if(!attrName){this.updateComponents();return}this.updateComponent(attrName,this.getDOMAttribute(attrName))}},mapStateMixins:{value:function(state,op){var mixins=this.getAttribute("mixin");var mixinIds;if(!mixins){return}mixinIds=mixins.split(" ");mixinIds.forEach(function(id){var mixinId=id+"-"+state;op(mixinId)});this.updateComponents()}},updateStateMixins:{value:function(newMixins,oldMixins){var diff;var newMixinsIds=newMixins.split(" ");var oldMixinsIds=oldMixins||""?oldMixins.split(" "):[];var self=this;diff=oldMixinsIds.filter(function(i){return newMixinsIds.indexOf(i)<0});diff.forEach(function(mixinId){var stateMixinsEls=document.querySelectorAll("[id^="+mixinId+"-]");Array.prototype.forEach.call(stateMixinsEls,function(el){self.unregisterMixin(el.id)})});this.states.forEach(function(state){newMixinsIds.forEach(function(id){var mixinId=id+"-"+state;self.registerMixin(mixinId)})})}},getObject3D:{value:function(type){return this.object3DMap[type]}},setObject3D:{value:function(type,obj){var oldObj;var self=this;if(!(obj instanceof THREE.Object3D)){throw new Error("`Entity.setObject3D` was called with an object that was not an instance of "+"THREE.Object3D.")}oldObj=this.getObject3D(type);if(oldObj){this.object3D.remove(oldObj)}obj.el=this;if(obj.children.length){obj.traverse(function bindEl(child){child.el=self})}this.object3D.add(obj);this.object3DMap[type]=obj;this.emit("object3dset",{object:obj,type:type})}},removeObject3D:{value:function(type){var obj=this.getObject3D(type);if(!obj){warn("Tried to remove `Object3D` of type:",type,"which was not defined.");return}this.object3D.remove(obj);delete this.object3DMap[type];this.emit("object3dremove",{type:type})}},getOrCreateObject3D:{value:function(type,Constructor){var object3D=this.getObject3D(type);if(!object3D&&Constructor){object3D=new Constructor;this.setObject3D(type,object3D)}return object3D}},add:{value:function(el){if(!el.object3D){throw new Error("Trying to add an element that doesn't have an `object3D`")}this.object3D.add(el.object3D);this.emit("child-attached",{el:el})}},addToParent:{value:function(){var parentNode=this.parentEl=this.parentNode;if(!parentNode||!parentNode.add||this.attachedToParent){return}parentNode.add(this);this.attachedToParent=true}},removeFromParent:{value:function(){var parentEl=this.parentEl;this.parentEl.remove(this);this.attachedToParent=false;this.parentEl=this.parentNode=null;parentEl.emit("child-detached",{el:this})}},load:{value:function(){var self=this;if(this.hasLoaded||!this.parentEl){return}ANode.prototype.load.call(this,function entityLoadCallback(){if(!self.parentEl){return}self.updateComponents();if(self.isScene||self.parentEl.isPlaying){self.play()}})},writable:window.debug},remove:{value:function(el){this.object3D.remove(el.object3D)}},getChildEntities:{value:function(){var children=this.children;var childEntities=[];for(var i=0;i<children.length;i++){var child=children[i];if(child instanceof AEntity){childEntities.push(child)}}return childEntities}},initComponent:{value:function(attrName,data,isDependency){var component;var componentInfo=attrName.split(MULTIPLE_COMPONENT_DELIMITER);var componentId=componentInfo[1];var componentName=componentInfo[0];var isComponentDefined=checkComponentDefined(this,attrName)||data!==undefined;if(!COMPONENTS[componentName]){return}if(!isComponentDefined&&!isDependency){return}if(attrName in this.components){return}this.initComponentDependencies(componentName);if(componentId&&!COMPONENTS[componentName].multiple){throw new Error("Trying to initialize multiple "+"components of type `"+componentName+"`. There can only be one component of this type per entity.")}component=new COMPONENTS[componentName].Component(this,data,componentId);if(this.isPlaying){component.play()}if(!this.hasAttribute(attrName)){component.justInitialized=true;window.HTMLElement.prototype.setAttribute.call(this,attrName,"")}debug("Component initialized: %s",attrName)},writable:window.debug},initComponentDependencies:{value:function(name){var self=this;var component=COMPONENTS[name];var dependencies;if(!component){return}dependencies=COMPONENTS[name].dependencies;if(!dependencies){return}dependencies.forEach(function initializeDependency(componentName){self.initComponent(componentName,window.HTMLElement.prototype.getAttribute.call(self,componentName)||undefined,true)})}},removeComponent:{value:function(name){var component;var isDefault;var isMixedIn;isDefault=name in this.defaultComponents;isMixedIn=isComponentMixedIn(name,this.mixinEls);if(isDefault||isMixedIn){return}component=this.components[name];if(!component){return}if(!component.initialized){this.addEventListener("componentinitialized",function tryRemoveLater(evt){if(evt.detail.name!==name){return}this.removeComponent(name);this.removeEventListener("componentinitialized",tryRemoveLater)});return}component.pause();component.remove();delete this.components[name];this.emit("componentremoved",{id:component.id,name:name})},writable:window.debug},updateComponents:{value:function(){var componentsToUpdate={};var extraComponents={};var i;var self=this;if(!this.hasLoaded){return}getMixedInComponents(this).forEach(addComponent);if(this.getExtraComponents){extraComponents=this.getExtraComponents();Object.keys(extraComponents).forEach(addComponent)}for(i=0;i<this.attributes.length;++i){addComponent(this.attributes[i].name)}Object.keys(this.defaultComponents).forEach(doUpdateComponent);Object.keys(componentsToUpdate).forEach(doUpdateComponent);function addComponent(componentName){var name=componentName.split(MULTIPLE_COMPONENT_DELIMITER)[0];if(!COMPONENTS[name]){return}componentsToUpdate[componentName]=true}function doUpdateComponent(name){var data=mergeComponentData(self.getDOMAttribute(name),extraComponents[name]);delete componentsToUpdate[name];self.updateComponent(name,data)}},writable:window.debug},updateComponent:{value:function(attr,attrValue,clobber){var component=this.components[attr];var isDefault=attr in this.defaultComponents;if(component){if(attrValue===null&&!isDefault){this.removeComponent(attr);return}component.updateProperties(attrValue,clobber);return}this.initComponent(attr,attrValue,false)}},removeAttribute:{value:function(attr,propertyName){var component=this.components[attr];if(component&&propertyName===undefined){this.setEntityAttribute(attr,undefined,null);if(this.components[attr]){return}}if(component&&propertyName!==undefined){component.resetProperty(propertyName);return}if(attr==="mixin"){this.mixinUpdate("")}window.HTMLElement.prototype.removeAttribute.call(this,attr)}},play:{value:function(){var components=this.components;var componentKeys=Object.keys(components);if(this.isPlaying||!this.hasLoaded){return}this.isPlaying=true;componentKeys.forEach(function playComponent(key){components[key].play()});this.getChildEntities().forEach(function play(entity){entity.play()});this.emit("play")},writable:true},pause:{value:function(){var components=this.components;var componentKeys=Object.keys(components);if(!this.isPlaying){return}this.isPlaying=false;componentKeys.forEach(function pauseComponent(key){components[key].pause()});this.getChildEntities().forEach(function pause(obj){obj.pause()});this.emit("pause")},writable:true},setEntityAttribute:{value:function(attr,oldVal,newVal){if(COMPONENTS[attr]||this.components[attr]){this.updateComponent(attr,newVal);return}if(attr==="mixin"){this.mixinUpdate(newVal,oldVal);return}}},mixinUpdate:{value:function(newMixins,oldMixins){oldMixins=oldMixins||this.getAttribute("mixin");this.updateMixins(newMixins,oldMixins);this.updateStateMixins(newMixins,oldMixins);this.updateComponents()}},setAttribute:{value:function(attrName,arg1,arg2){var newAttrValue;var clobber;var componentName;var delimiterIndex;var isDebugMode;delimiterIndex=attrName.indexOf(MULTIPLE_COMPONENT_DELIMITER);componentName=delimiterIndex>0?attrName.substring(0,delimiterIndex):attrName;if(!COMPONENTS[componentName]){normalSetAttribute(this,attrName,arg1);return}if(!this.components[attrName]&&this.hasAttribute(attrName)){this.updateComponent(attrName,window.HTMLElement.prototype.getAttribute.call(this,attrName))}if(typeof arg2!=="undefined"&&typeof arg1==="string"&&arg1.length>0&&typeof utils.styleParser.parse(arg1)==="string"){newAttrValue={};newAttrValue[arg1]=arg2;clobber=false}else{newAttrValue=arg1;clobber=arg2===true}this.updateComponent(attrName,newAttrValue,clobber);isDebugMode=this.sceneEl&&this.sceneEl.getAttribute("debug");if(isDebugMode){this.components[attrName].flushToDOM()}function normalSetAttribute(el,attrName,value){ANode.prototype.setAttribute.call(el,attrName,value);if(attrName==="mixin"){el.mixinUpdate(value)}}},writable:window.debug},flushToDOM:{value:function(recursive){var components=this.components;var defaultComponents=this.defaultComponents;var child;var children=this.children;var i;Object.keys(components).forEach(function flushComponent(componentName){components[componentName].flushToDOM(componentName in defaultComponents)});if(!recursive){return}for(i=0;i<children.length;++i){child=children[i];if(!child.flushToDOM){continue}child.flushToDOM(recursive)}}},getAttribute:{value:function(attr){var component=this.components[attr];if(component){return component.data}return window.HTMLElement.prototype.getAttribute.call(this,attr)},writable:window.debug},getComputedAttribute:{value:function(attr){warn("`getComputedAttribute` is deprecated. Use `getAttribute` instead.");return this.getAttribute(attr)}},getDOMAttribute:{value:function(attr){var component=this.components[attr];if(component){return component.attrValue}return window.HTMLElement.prototype.getAttribute.call(this,attr)},writable:window.debug},addState:{value:function(state){if(this.is(state)){return}this.states.push(state);this.mapStateMixins(state,bind(this.registerMixin,this));this.emit("stateadded",{state:state})}},removeState:{value:function(state){var stateIndex=this.states.indexOf(state);if(stateIndex===-1){return}this.states.splice(stateIndex,1);this.mapStateMixins(state,bind(this.unregisterMixin,this));this.emit("stateremoved",{state:state})}},is:{value:function(state){return this.states.indexOf(state)!==-1}}});function checkComponentDefined(el,name){if(el.defaultComponents[name]!==undefined){return true}if(el.components[name]&&el.components[name].attrValue){return true}return isComponentMixedIn(name,el.mixinEls)}function getMixedInComponents(entityEl){var components=[];entityEl.mixinEls.forEach(function getMixedComponents(mixinEl){Object.keys(mixinEl.componentCache).forEach(addComponent);function addComponent(key){components.push(key)}});return components}function isComponentMixedIn(name,mixinEls){var i;var inMixin=false;for(i=0;i<mixinEls.length;++i){inMixin=mixinEls[i].hasAttribute(name);if(inMixin){break}}return inMixin}function mergeComponentData(attrValue,extraData){if(!extraData){return attrValue}if(extraData.constructor===Object){return utils.extend(extraData,utils.styleParser.parse(attrValue||{}))}return attrValue||extraData}AEntity=registerElement("a-entity",{prototype:proto});module.exports=AEntity},{"../lib/three":173,"../utils/":196,"./a-node":123,"./a-register-element":124,"./component":125}],122:[function(_dereq_,module,exports){var ANode=_dereq_("./a-node");var registerElement=_dereq_("./a-register-element").registerElement;var components=_dereq_("./component").components;var MULTIPLE_COMPONENT_DELIMITER="__";module.exports=registerElement("a-mixin",{prototype:Object.create(ANode.prototype,{createdCallback:{value:function(){this.componentCache={};this.id=this.getAttribute("id")}},attributeChangedCallback:{value:function(attr,oldVal,newVal){this.cacheAttribute(attr,newVal)}},attachedCallback:{value:function(){this.sceneEl=this.closestScene();this.cacheAttributes();this.updateEntities();this.load()}},setAttribute:{value:function(attr,value){this.cacheAttribute(attr,value);window.HTMLElement.prototype.setAttribute.call(this,attr,value)}},cacheAttribute:{value:function(attr,value){var componentName=attr.split(MULTIPLE_COMPONENT_DELIMITER)[0];var component=components[componentName];if(!component){return}if(value===undefined){value=window.HTMLElement.prototype.getAttribute.call(this,attr)}this.componentCache[attr]=component.parseAttrValueForCache(value)}},getAttribute:{value:function(attr){return this.componentCache[attr]||window.HTMLElement.prototype.getAttribute.call(this,attr)}},cacheAttributes:{value:function(){var attributes=this.attributes;var attrName;var i;for(i=0;i<attributes.length;i++){attrName=attributes[i].name;this.cacheAttribute(attrName)}}},updateEntities:{value:function(){if(!this.sceneEl){return}var entities=this.sceneEl.querySelectorAll("[mixin~="+this.id+"]");for(var i=0;i<entities.length;i++){var entity=entities[i];if(!entity.hasLoaded){continue}entity.registerMixin(this.id);Object.keys(this.componentCache).forEach(function updateComponent(componentName){entity.updateComponent(componentName)})}}}})})},{"./a-node":123,"./a-register-element":124,"./component":125}],123:[function(_dereq_,module,exports){var registerElement=_dereq_("./a-register-element").registerElement;var isNode=_dereq_("./a-register-element").isNode;var utils=_dereq_("../utils/");var bind=utils.bind;var warn=utils.debug("core:a-node:warn");module.exports=registerElement("a-node",{prototype:Object.create(window.HTMLElement.prototype,{createdCallback:{value:function(){this.hasLoaded=false;this.isNode=true;this.mixinEls=[];this.mixinObservers={}},writable:window.debug},attachedCallback:{value:function(){var mixins;this.sceneEl=this.closestScene();if(!this.sceneEl){warn("You are attempting to attach <"+this.tagName+"> outside of an A-Frame "+"scene. Append this element to `<a-scene>` instead.")}this.hasLoaded=false;this.emit("nodeready",{},false);mixins=this.getAttribute("mixin");if(mixins){this.updateMixins(mixins)}},writable:window.debug},attributeChangedCallback:{value:function(attr,oldVal,newVal){if(attr==="mixin"){this.updateMixins(newVal,oldVal)}}},closestScene:{value:function closest(){var element=this;while(element){if(element.isScene){break}element=element.parentElement}return element}},closest:{value:function closest(selector){var matches=this.matches||this.mozMatchesSelector||this.msMatchesSelector||this.oMatchesSelector||this.webkitMatchesSelector;var element=this;while(element){if(matches.call(element,selector)){break}element=element.parentElement}return element}},detachedCallback:{value:function(){this.hasLoaded=false}},load:{value:function(cb,childFilter){var children;var childrenLoaded;var self=this;if(this.hasLoaded){return}childFilter=childFilter||isNode;children=this.getChildren();childrenLoaded=children.filter(childFilter).map(function(child){return new Promise(function waitForLoaded(resolve){if(child.hasLoaded){return resolve()}child.addEventListener("loaded",resolve)})});Promise.all(childrenLoaded).then(function emitLoaded(){self.hasLoaded=true;if(cb){cb()}self.emit("loaded",{},false)})},writable:true},getChildren:{value:function(){return Array.prototype.slice.call(this.children,0)}},updateMixins:{value:function(newMixins,oldMixins){var newMixinIds=newMixins?newMixins.trim().split(/\s+/):[];var oldMixinIds=oldMixins?oldMixins.trim().split(/\s+/):[];oldMixinIds.filter(function(i){return newMixinIds.indexOf(i)<0}).forEach(bind(this.unregisterMixin,this));this.mixinEls=[];newMixinIds.forEach(bind(this.registerMixin,this))}},registerMixin:{value:function(mixinId){if(!this.sceneEl){return}var mixinEl=this.sceneEl.querySelector("a-mixin#"+mixinId);if(!mixinEl){return}this.attachMixinListener(mixinEl);this.mixinEls.push(mixinEl)}},setAttribute:{value:function(attr,newValue){if(attr==="mixin"){this.updateMixins(newValue)}window.HTMLElement.prototype.setAttribute.call(this,attr,newValue)}},unregisterMixin:{value:function(mixinId){var mixinEls=this.mixinEls;var mixinEl;var i;for(i=0;i<mixinEls.length;++i){mixinEl=mixinEls[i];if(mixinId===mixinEl.id){mixinEls.splice(i,1);break}}this.removeMixinListener(mixinId)}},removeMixinListener:{value:function(mixinId){var observer=this.mixinObservers[mixinId];if(!observer){return}observer.disconnect();this.mixinObservers[mixinId]=null}},attachMixinListener:{value:function(mixinEl){var self=this;var mixinId=mixinEl.id;var currentObserver=this.mixinObservers[mixinId];if(!mixinEl){return}if(currentObserver){return}var observer=new MutationObserver(function(mutations){var attr=mutations[0].attributeName;self.handleMixinUpdate(attr)});var config={attributes:true};observer.observe(mixinEl,config);this.mixinObservers[mixinId]=observer}},handleMixinUpdate:{value:function(){}},emit:{value:function(name,detail,bubbles,extraData){var self=this;detail=detail||{};if(bubbles===undefined){bubbles=true}var data={bubbles:!!bubbles,detail:detail};if(extraData){utils.extend(data,extraData)}return name.split(" ").map(function(eventName){return utils.fireEvent(self,eventName,data)})},writable:window.debug},emitter:{value:function(name,detail,bubbles){var self=this;return function(){self.emit(name,detail,bubbles)}}}})})},{"../utils/":196,"./a-register-element":124}],124:[function(_dereq_,module,exports){_dereq_("document-register-element");var ANode;var AEntity;var knownTags=module.exports.knownTags={};function addTagName(tagName){knownTags[tagName.toLowerCase()]=true}module.exports.isNode=function(node){return node.tagName.toLowerCase()in knownTags||node.isNode};module.exports.registerElement=function(tagName,obj){var proto=Object.getPrototypeOf(obj.prototype);var newObj=obj;var isANode=ANode&&proto===ANode.prototype;var isAEntity=AEntity&&proto===AEntity.prototype;if(isANode||isAEntity){addTagName(tagName)}if(isANode){newObj=wrapANodeMethods(obj.prototype);newObj={prototype:Object.create(proto,newObj)}}if(isAEntity){newObj=wrapAEntityMethods(obj.prototype);newObj={prototype:Object.create(proto,newObj)}}return document.registerElement(tagName,newObj)};function wrapANodeMethods(obj){var newObj={};var ANodeMethods=["attachedCallback","attributeChangedCallback","createdCallback"];wrapMethods(newObj,ANodeMethods,obj,ANode.prototype);copyProperties(obj,newObj);return newObj}function wrapAEntityMethods(obj){var newObj={};var ANodeMethods=["attachedCallback","attributeChangedCallback","createdCallback"];var AEntityMethods=["attachedCallback","attributeChangedCallback","createdCallback","detachedCallback"];wrapMethods(newObj,ANodeMethods,obj,ANode.prototype);wrapMethods(newObj,AEntityMethods,obj,AEntity.prototype);copyProperties(obj,newObj);return newObj}function wrapMethods(targetObj,methodList,derivedObj,baseObj){methodList.forEach(function(methodName){wrapMethod(targetObj,methodName,derivedObj,baseObj)})}module.exports.wrapMethods=wrapMethods;function wrapMethod(obj,methodName,derivedObj,baseObj){var derivedMethod=derivedObj[methodName];var baseMethod=baseObj[methodName];if(!derivedMethod||!baseMethod){return}if(derivedMethod===baseMethod){return}obj[methodName]={value:function wrappedMethod(){baseMethod.apply(this,arguments);return derivedMethod.apply(this,arguments)},writable:window.debug}}function copyProperties(source,destination){var props=Object.getOwnPropertyNames(source);props.forEach(function(prop){var desc;if(!destination[prop]){desc=Object.getOwnPropertyDescriptor(source,prop);destination[prop]={value:source[prop],writable:desc.writable}}})}ANode=_dereq_("./a-node");AEntity=_dereq_("./a-entity")},{"./a-entity":121,"./a-node":123,"document-register-element":13}],125:[function(_dereq_,module,exports){var schema=_dereq_("./schema");var scenes=_dereq_("./scene/scenes");var systems=_dereq_("./system");var utils=_dereq_("../utils/");var components=module.exports.components={};var parseProperties=schema.parseProperties;var parseProperty=schema.parseProperty;var processSchema=schema.process;var isSingleProp=schema.isSingleProperty;var stringifyProperties=schema.stringifyProperties;var stringifyProperty=schema.stringifyProperty;var styleParser=utils.styleParser;var warn=utils.debug("core:component:warn");var aframeScript=document.currentScript;var upperCaseRegExp=new RegExp("[A-Z]+");var Component=module.exports.Component=function(el,attrValue,id){var self=this;this.el=el;this.id=id;this.attrName=this.name+(id?"__"+id:"");this.initialized=false;this.el.components[this.attrName]=this;this.oldData=undefined;this.previousAttrValue=undefined;this.throttledEmitComponentChanged=utils.throttle(function emitComponentChange(oldData){el.emit("componentchanged",{id:self.id,name:self.name,newData:self.data,oldData:oldData},false)},200);this.updateProperties(attrValue)};Component.prototype={schema:{},init:function(){},update:function(prevData){},updateSchema:undefined,tick:undefined,tock:undefined,play:function(){},pause:function(){},remove:function(){},parse:function(value,silent){var schema=this.schema;if(isSingleProp(schema)){return parseProperty(value,schema)}return parseProperties(styleParser.parse(value),schema,true,this.name,silent)},stringify:function(data){var schema=this.schema;if(typeof data==="string"){return data}if(isSingleProp(schema)){return stringifyProperty(data,schema)}data=stringifyProperties(data,schema);return styleParser.stringify(data)},getData:function(){var data=this.data;if(typeof data!=="object"){return data}return utils.extend({},data)},updateCachedAttrValue:function(value,clobber){var attrValue=this.parseAttrValueForCache(value);var isSinglePropSchema=isSingleProp(this.schema);var property;if(value===undefined){return}if(!isSinglePropSchema&&!clobber&&this.attrValue){for(property in this.attrValue){if(!(property in attrValue)){attrValue[property]=this.attrValue[property]}}}this.attrValue=extendProperties({},attrValue,isSinglePropSchema)},parseAttrValueForCache:function(value){var parsedValue;if(typeof value!=="string"){return value}if(isSingleProp(this.schema)){parsedValue=this.schema.parse(value);if(typeof parsedValue==="string"){parsedValue=value}}else{parsedValue=styleParser.parse(value)}return parsedValue},flushToDOM:function(isDefault){var attrValue=isDefault?this.data:this.attrValue;if(!attrValue){return}window.HTMLElement.prototype.setAttribute.call(this.el,this.attrName,this.stringify(attrValue))},updateProperties:function(attrValue,clobber){var el=this.el;var isSinglePropSchema;var skipTypeChecking;var oldData=this.oldData;if(!el.hasLoaded){this.updateCachedAttrValue(attrValue);return}isSinglePropSchema=isSingleProp(this.schema);skipTypeChecking=attrValue!==null&&typeof this.previousAttrValue==="object"&&attrValue===this.previousAttrValue;this.previousAttrValue=attrValue;attrValue=this.parseAttrValueForCache(attrValue);if(this.updateSchema){this.updateSchema(this.buildData(attrValue,false,true))}this.data=this.buildData(attrValue,clobber,false,skipTypeChecking);this.updateCachedAttrValue(attrValue,clobber);if(!this.initialized){if(el.initializingComponents[this.name]){return}el.initializingComponents[this.name]=true;this.init();this.initialized=true;delete el.initializingComponents[this.name];oldData=!isSinglePropSchema||typeof parseProperty(undefined,this.schema)==="object"?{}:undefined;this.oldData=extendProperties({},this.data,isSinglePropSchema);this.update(oldData);if(el.isPlaying){this.play()}el.emit("componentinitialized",{id:this.id,name:this.name,data:this.getData()},false)}else{if(!skipTypeChecking&&utils.deepEqual(this.oldData,this.data)){return}this.oldData=extendProperties({},this.data,isSinglePropSchema);this.update(oldData);this.throttledEmitComponentChanged(oldData)}},resetProperty:function(propertyName){if(isSingleProp(this.schema)){this.attrValue=undefined}else{if(!(propertyName in this.attrValue)){return}delete this.attrValue[propertyName]}this.updateProperties(this.attrValue)},extendSchema:function(schemaAddon){var extendedSchema=utils.extend({},components[this.name].schema);utils.extend(extendedSchema,schemaAddon);this.schema=processSchema(extendedSchema);this.el.emit("schemachanged",{component:this.name})},buildData:function(newData,clobber,silent,skipTypeChecking){var self=this;var componentDefined=newData!==undefined&&newData!==null;var data;var schema=this.schema;var isSinglePropSchema=isSingleProp(schema);var mixinEls=this.el.mixinEls;var previousData;if(isSinglePropSchema){data=typeof schema.default==="object"?utils.extend({},schema.default):schema.default}else{previousData=!clobber&&this.attrValue;data=typeof previousData==="object"?utils.extend({},previousData):{};Object.keys(schema).forEach(function applyDefault(key){var defaultValue=schema[key].default;if(data[key]!==undefined){return}data[key]=defaultValue&&defaultValue.constructor===Object?utils.extend({},defaultValue):defaultValue})}mixinEls.forEach(function handleMixinUpdate(mixinEl){var mixinData=mixinEl.getAttribute(self.attrName);if(mixinData){data=extendProperties(data,mixinData,isSinglePropSchema)}});if(componentDefined){if(isSinglePropSchema){if(skipTypeChecking===true){return newData}return parseProperty(newData,schema)}data=extendProperties(data,newData,isSinglePropSchema)}else{if(skipTypeChecking===true){return data}if(isSinglePropSchema){return parseProperty(data,schema)}}if(skipTypeChecking===true){return data}return parseProperties(data,schema,undefined,this.name,silent)}};if(window.debug){var registrationOrderWarnings=module.exports.registrationOrderWarnings={}}module.exports.registerComponent=function(name,definition){var NewComponent;var proto={};if(document.currentScript&&document.currentScript!==aframeScript){scenes.forEach(function checkPosition(sceneEl){if(sceneEl.hasLoaded){return}if(document.currentScript.compareDocumentPosition(sceneEl)===Node.DOCUMENT_POSITION_FOLLOWING){return}warn("The component `"+name+"` was registered in a <script> tag after the scene. "+"Component <script> tags in an HTML file should be declared *before* the scene "+"such that the component is available to entities during scene initialization.");if(window.debug){registrationOrderWarnings[name]=true}})}if(upperCaseRegExp.test(name)===true){warn("The component name `"+name+"` contains uppercase characters, but "+"HTML will ignore the capitalization of attribute names. "+"Change the name to be lowercase: `"+name.toLowerCase()+"`")}if(name.indexOf("__")!==-1){throw new Error("The component name `"+name+"` is not allowed. "+"The sequence __ (double underscore) is reserved to specify an id"+" for multiple components of the same type")}Object.keys(definition).forEach(function(key){proto[key]={value:definition[key],writable:true}});if(components[name]){throw new Error("The component `"+name+"` has been already registered. "+"Check that you are not loading two versions of the same component "+"or two different components of the same name.")}NewComponent=function(el,attr,id){Component.call(this,el,attr,id)};NewComponent.prototype=Object.create(Component.prototype,proto);NewComponent.prototype.name=name;NewComponent.prototype.constructor=NewComponent;NewComponent.prototype.system=systems&&systems.systems[name];NewComponent.prototype.play=wrapPlay(NewComponent.prototype.play);NewComponent.prototype.pause=wrapPause(NewComponent.prototype.pause);components[name]={Component:NewComponent,dependencies:NewComponent.prototype.dependencies,isSingleProp:isSingleProp(NewComponent.prototype.schema),multiple:NewComponent.prototype.multiple,parse:NewComponent.prototype.parse,parseAttrValueForCache:NewComponent.prototype.parseAttrValueForCache,schema:utils.extend(processSchema(NewComponent.prototype.schema,NewComponent.prototype.name)),stringify:NewComponent.prototype.stringify,type:NewComponent.prototype.type};return NewComponent};function extendProperties(dest,source,isSinglePropSchema){if(isSinglePropSchema&&(source===null||typeof source!=="object")){return source}return utils.extend(dest,source)}function hasBehavior(component){return component.tick||component.tock}function wrapPause(pauseMethod){return function pause(){var sceneEl=this.el.sceneEl;if(!this.isPlaying){return}pauseMethod.call(this);this.isPlaying=false;if(!hasBehavior(this)){return}sceneEl.removeBehavior(this)}}function wrapPlay(playMethod){return function play(){var sceneEl=this.el.sceneEl;var shouldPlay=this.el.isPlaying&&!this.isPlaying;if(!this.initialized||!shouldPlay){return}playMethod.call(this);this.isPlaying=true;if(!hasBehavior(this)){return}sceneEl.addBehavior(this)}}},{"../utils/":196,"./scene/scenes":131,"./schema":133,"./system":135}],126:[function(_dereq_,module,exports){var schema=_dereq_("./schema");var processSchema=schema.process;var geometries=module.exports.geometries={};var geometryNames=module.exports.geometryNames=[];var THREE=_dereq_("../lib/three");var Geometry=module.exports.Geometry=function(){};Geometry.prototype={schema:{},init:function(data){this.geometry=new THREE.Geometry;return this.geometry},update:function(data){}};module.exports.registerGeometry=function(name,definition){var NewGeometry;var proto={};Object.keys(definition).forEach(function expandDefinition(key){proto[key]={value:definition[key],writable:true}});if(geometries[name]){throw new Error("The geometry `"+name+"` has been already registered")}NewGeometry=function(){Geometry.call(this)};NewGeometry.prototype=Object.create(Geometry.prototype,proto);NewGeometry.prototype.name=name;NewGeometry.prototype.constructor=NewGeometry;geometries[name]={Geometry:NewGeometry,schema:processSchema(NewGeometry.prototype.schema)};geometryNames.push(name);return NewGeometry}},{"../lib/three":173,"./schema":133}],127:[function(_dereq_,module,exports){var coordinates=_dereq_("../utils/coordinates");var debug=_dereq_("debug");var error=debug("core:propertyTypes:warn");var warn=debug("core:propertyTypes:warn");var propertyTypes=module.exports.propertyTypes={};var nonCharRegex=/[,> .[\]:]/;registerPropertyType("audio","",assetParse);registerPropertyType("array",[],arrayParse,arrayStringify);registerPropertyType("asset","",assetParse);registerPropertyType("boolean",false,boolParse);registerPropertyType("color","#FFF",defaultParse,defaultStringify);registerPropertyType("int",0,intParse);registerPropertyType("number",0,numberParse);registerPropertyType("map","",assetParse);registerPropertyType("model","",assetParse);registerPropertyType("selector","",selectorParse,selectorStringify);registerPropertyType("selectorAll","",selectorAllParse,selectorAllStringify);registerPropertyType("src","",srcParse);registerPropertyType("string","",defaultParse,defaultStringify);registerPropertyType("time",0,intParse);registerPropertyType("vec2",{x:0,y:0},vecParse,coordinates.stringify);registerPropertyType("vec3",{x:0,y:0,z:0},vecParse,coordinates.stringify);registerPropertyType("vec4",{x:0,y:0,z:0,w:0},vecParse,coordinates.stringify);function registerPropertyType(type,defaultValue,parse,stringify){if("type"in propertyTypes){error("Property type "+type+" is already registered.");return}propertyTypes[type]={"default":defaultValue,parse:parse||defaultParse,stringify:stringify||defaultStringify}}module.exports.registerPropertyType=registerPropertyType;function arrayParse(value){if(Array.isArray(value)){return value}if(!value||typeof value!=="string"){return[]}return value.split(",").map(trim);function trim(str){return str.trim()}}function arrayStringify(value){return value.join(", ")}function assetParse(value){var el;var parsedUrl;if(typeof value!=="string"){return value}parsedUrl=value.match(/\url\((.+)\)/);if(parsedUrl){return parsedUrl[1]}if(value.charAt(0)==="#"){el=document.getElementById(value.substring(1));if(el){if(el.tagName==="CANVAS"||el.tagName==="VIDEO"||el.tagName==="IMG"){return el}return el.getAttribute("src")}warn('"'+value+'" asset not found.');return}return value}function defaultParse(value){return value}function defaultStringify(value){if(value===null){return"null"}return value.toString()}function boolParse(value){return value!=="false"&&value!==false}function intParse(value){return parseInt(value,10)}function numberParse(value){return parseFloat(value,10);
}function selectorParse(value){if(!value){return null}if(typeof value!=="string"){return value}if(value[0]==="#"&&!nonCharRegex.test(value)){return document.getElementById(value.substring(1))}return document.querySelector(value)}function selectorAllParse(value){if(!value){return null}if(typeof value!=="string"){return value}return Array.prototype.slice.call(document.querySelectorAll(value),0)}function selectorStringify(value){if(value.getAttribute){return"#"+value.getAttribute("id")}return defaultStringify(value)}function selectorAllStringify(value){if(value instanceof Array){return value.map(function(element){return"#"+element.getAttribute("id")}).join(", ")}return defaultStringify(value)}function srcParse(value){warn("`src` property type is deprecated. Use `asset` instead.");return assetParse(value)}function vecParse(value){return coordinates.parse(value,this.default)}function isValidDefaultValue(type,defaultVal){if(type==="audio"&&typeof defaultVal!=="string"){return false}if(type==="array"&&!Array.isArray(defaultVal)){return false}if(type==="asset"&&typeof defaultVal!=="string"){return false}if(type==="boolean"&&typeof defaultVal!=="boolean"){return false}if(type==="color"&&typeof defaultVal!=="string"){return false}if(type==="int"&&typeof defaultVal!=="number"){return false}if(type==="number"&&typeof defaultVal!=="number"){return false}if(type==="map"&&typeof defaultVal!=="string"){return false}if(type==="model"&&typeof defaultVal!=="string"){return false}if(type==="selector"&&typeof defaultVal!=="string"){return false}if(type==="selectorAll"&&typeof defaultVal!=="string"){return false}if(type==="src"&&typeof defaultVal!=="string"){return false}if(type==="string"&&typeof defaultVal!=="string"){return false}if(type==="time"&&typeof defaultVal!=="number"){return false}if(type==="vec2"){return isValidDefaultCoordinate(defaultVal,2)}if(type==="vec3"){return isValidDefaultCoordinate(defaultVal,3)}if(type==="vec4"){return isValidDefaultCoordinate(defaultVal,4)}return true}module.exports.isValidDefaultValue=isValidDefaultValue;function isValidDefaultCoordinate(possibleCoordinates,dimensions){if(possibleCoordinates===null){return true}if(typeof possibleCoordinates!=="object"){return false}if(Object.keys(possibleCoordinates).length!==dimensions){return false}else{var x=possibleCoordinates.x;var y=possibleCoordinates.y;var z=possibleCoordinates.z;var w=possibleCoordinates.w;if(typeof x!=="number"||typeof y!=="number"){return false}if(dimensions>2&&typeof z!=="number"){return false}if(dimensions>3&&typeof w!=="number"){return false}}return true}module.exports.isValidDefaultCoordinate=isValidDefaultCoordinate},{"../utils/coordinates":191,debug:10}],128:[function(_dereq_,module,exports){var initMetaTags=_dereq_("./metaTags").inject;var initWakelock=_dereq_("./wakelock");var re=_dereq_("../a-register-element");var scenes=_dereq_("./scenes");var systems=_dereq_("../system").systems;var THREE=_dereq_("../../lib/three");var TWEEN=_dereq_("@tweenjs/tween.js");var utils=_dereq_("../../utils/");var AEntity=_dereq_("../a-entity");var ANode=_dereq_("../a-node");var initPostMessageAPI=_dereq_("./postMessage");var bind=utils.bind;var isIOS=utils.device.isIOS();var isMobile=utils.device.isMobile();var registerElement=re.registerElement;var warn=utils.debug("core:a-scene:warn");module.exports.AScene=registerElement("a-scene",{prototype:Object.create(AEntity.prototype,{defaultComponents:{value:{canvas:"",inspector:"","keyboard-shortcuts":"",screenshot:"","vr-mode-ui":""}},createdCallback:{value:function(){this.isIOS=isIOS;this.isMobile=isMobile;this.isScene=true;this.object3D=new THREE.Scene;this.render=bind(this.render,this);this.systems={};this.time=0;this.init()}},init:{value:function(){this.behaviors={tick:[],tock:[]};this.hasLoaded=false;this.isPlaying=false;this.originalHTML=this.innerHTML;this.renderTarget=null;this.addEventListener("render-target-loaded",function(){this.setupRenderer();this.resize()});this.addFullScreenStyles();initPostMessageAPI(this)},writable:true},addFullScreenStyles:{value:function(){var htmlEl=document.documentElement;htmlEl.classList.add("a-html");document.body.classList.add("a-body");this.classList.add("fullscreen")}},removeFullScreenStyles:{value:function(){var htmlEl=document.documentElement;htmlEl.classList.remove("a-html");document.body.classList.remove("a-body");this.classList.remove("fullscreen")}},attachedCallback:{value:function(){var resize;var self=this;initMetaTags(this);initWakelock(this);this.initSystems();resize=bind(this.resize,this);window.addEventListener("load",resize);window.addEventListener("resize",resize);this.play();scenes.push(this);this.onVRPresentChangeBound=bind(this.onVRPresentChange,this);window.addEventListener("vrdisplaypresentchange",this.onVRPresentChangeBound);window.addEventListener("vrdisplayactivate",function(){self.enterVR()});window.addEventListener("vrdisplaydeactivate",function(){self.exitVR()})},writable:window.debug},initSystems:{value:function(){Object.keys(systems).forEach(bind(this.initSystem,this))}},initSystem:{value:function(name){if(this.systems[name]){return}this.systems[name]=new systems[name](this)}},detachedCallback:{value:function(){var sceneIndex;if(this.effect&&this.effect.cancelAnimationFrame){this.effect.cancelAnimationFrame(this.animationFrameID)}else{window.cancelAnimationFrame(this.animationFrameID)}this.animationFrameID=null;sceneIndex=scenes.indexOf(this);scenes.splice(sceneIndex,1);window.removeEventListener("vrdisplaypresentchange",this.onVRPresentChangeBound)}},addBehavior:{value:function(behavior){var self=this;var behaviors=this.behaviors;Object.keys(behaviors).forEach(function(behaviorType){if(!behavior[behaviorType]){return}var behaviorArr=self.behaviors[behaviorType];if(behaviorArr.indexOf(behavior)===-1){behaviorArr.push(behavior)}})}},checkHeadsetConnected:{value:utils.device.checkHeadsetConnected,writable:window.debug},enterVR:{value:function(fromExternal){var self=this;if(this.is("vr-mode")){return Promise.resolve("Already in VR.")}if(!fromExternal&&(this.checkHeadsetConnected()||this.isMobile)){return this.effect.requestPresent().then(enterVRSuccess,enterVRFailure)}enterVRSuccess();return Promise.resolve();function enterVRSuccess(){self.addState("vr-mode");self.emit("enter-vr",{target:self});if(self.isMobile&&screen.orientation&&screen.orientation.lock){screen.orientation.lock("landscape")}self.addFullScreenStyles();if(!self.isMobile&&!self.checkHeadsetConnected()){requestFullscreen(self.canvas)}self.resize()}function enterVRFailure(err){if(err&&err.message){throw new Error("Failed to enter VR mode (`requestPresent`): "+err.message)}else{throw new Error("Failed to enter VR mode (`requestPresent`).")}}}},exitVR:{value:function(fromExternal){var self=this;if(!this.is("vr-mode")){return Promise.resolve("Not in VR.")}exitFullscreen();if(!fromExternal&&(this.checkHeadsetConnected()||this.isMobile)){return this.effect.exitPresent().then(exitVRSuccess,exitVRFailure)}exitVRSuccess();return Promise.resolve();function exitVRSuccess(){self.removeState("vr-mode");if(self.isMobile&&screen.orientation&&screen.orientation.unlock){screen.orientation.unlock()}if(self.hasAttribute("embedded")){self.removeFullScreenStyles()}self.resize();if(self.isIOS){utils.forceCanvasResizeSafariMobile(this.canvas)}self.emit("exit-vr",{target:self})}function exitVRFailure(err){if(err&&err.message){throw new Error("Failed to exit VR mode (`exitPresent`): "+err.message)}else{throw new Error("Failed to exit VR mode (`exitPresent`).")}}}},onVRPresentChange:{value:function(evt){if(evt.display.isPresenting){this.enterVR(true);return}this.exitVR(true)}},getAttribute:{value:function(attr){var system=this.systems[attr];if(system){return system.data}return AEntity.prototype.getAttribute.call(this,attr)}},getComputedAttribute:{value:function(attr){warn("`getComputedAttribute` is deprecated. Use `getAttribute` instead.");this.getAttribute(attr)}},getDOMAttribute:{value:function(attr){var system=this.systems[attr];if(system){return system.data}return AEntity.prototype.getDOMAttribute.call(this,attr)}},setAttribute:{value:function(attr,value,componentPropValue){var system=this.systems[attr];if(system){ANode.prototype.setAttribute.call(this,attr,value);system.updateProperties(value);return}AEntity.prototype.setAttribute.call(this,attr,value,componentPropValue)}},removeBehavior:{value:function(behavior){var self=this;var behaviors=this.behaviors;Object.keys(behaviors).forEach(function(behaviorType){if(!behavior[behaviorType]){return}var behaviorArr=self.behaviors[behaviorType];var index=behaviorArr.indexOf(behavior);if(index!==-1){behaviorArr.splice(index,1)}})}},resize:{value:function(){var camera=this.camera;var canvas=this.canvas;var embedded=this.getAttribute("embedded")&&!this.is("vr-mode");var size;if(!camera||!canvas||this.is("vr-mode")&&isMobile){return}size=getCanvasSize(canvas,embedded);camera.aspect=size.width/size.height;camera.updateProjectionMatrix();this.renderer.setSize(size.width,size.height)},writable:window.debug},setupRenderer:{value:function(){var renderer=this.renderer=new THREE.WebGLRenderer({canvas:this.canvas,antialias:shouldAntiAlias(this),alpha:true});renderer.setPixelRatio(window.devicePixelRatio);renderer.sortObjects=false;this.effect=new THREE.VREffect(renderer);this.effect.autoSubmitFrame=false},writable:window.debug},play:{value:function(){var self=this;if(this.renderStarted){AEntity.prototype.play.call(this);return}this.addEventListener("loaded",function(){AEntity.prototype.play.call(this);if(this.camera){startRender(this);return}this.addEventListener("camera-set-active",function(){startRender(this)});function startRender(sceneEl){if(sceneEl.renderStarted){return}sceneEl.resize();if(sceneEl.renderer){if(window.performance){window.performance.mark("render-started")}sceneEl.clock=new THREE.Clock;sceneEl.render();sceneEl.renderStarted=true;sceneEl.emit("renderstart")}}});setTimeout(function(){AEntity.prototype.load.call(self)})}},reload:{value:function(doPause){var self=this;if(doPause){this.pause()}this.innerHTML=this.originalHTML;this.init();ANode.prototype.load.call(this,play);function play(){if(!self.isPlaying){return}AEntity.prototype.play.call(self)}}},updateComponent:{value:function(componentName){if(componentName in systems){return}AEntity.prototype.updateComponent.apply(this,arguments)}},tick:{value:function(time,timeDelta){var systems=this.systems;TWEEN.update();this.behaviors.tick.forEach(function(component){if(!component.el.isPlaying){return}component.tick(time,timeDelta)});Object.keys(systems).forEach(function(key){if(!systems[key].tick){return}systems[key].tick(time,timeDelta)})}},tock:{value:function(time,timeDelta){var systems=this.systems;this.behaviors.tock.forEach(function(component){if(!component.el.isPlaying){return}component.tock(time,timeDelta)});Object.keys(systems).forEach(function(key){if(!systems[key].tock){return}systems[key].tock(time,timeDelta)})}},render:{value:function(){var effect=this.effect;var delta=this.clock.getDelta()*1e3;this.time=this.clock.elapsedTime*1e3;if(this.isPlaying){this.tick(this.time,delta)}this.animationFrameID=effect.requestAnimationFrame(this.render);effect.render(this.object3D,this.camera,this.renderTarget);if(this.isPlaying){this.tock(this.time,delta)}this.effect.submitFrame()},writable:true}})});function getCanvasSize(canvasEl,embedded){if(embedded){return{height:canvasEl.parentElement.offsetHeight,width:canvasEl.parentElement.offsetWidth}}return{height:window.innerHeight,width:window.innerWidth}}function requestFullscreen(canvas){var requestFullscreen=canvas.requestFullscreen||canvas.webkitRequestFullscreen||canvas.mozRequestFullScreen||canvas.msRequestFullscreen;requestFullscreen.apply(canvas)}function exitFullscreen(){if(document.exitFullscreen){document.exitFullscreen()}else if(document.mozCancelFullScreen){document.mozCancelFullScreen()}else if(document.webkitExitFullscreen){document.webkitExitFullscreen()}}function shouldAntiAlias(sceneEl){if(sceneEl.getAttribute("antialias")!==null){return sceneEl.getAttribute("antialias")==="true"}return!sceneEl.isMobile}module.exports.shouldAntiAlias=shouldAntiAlias},{"../../lib/three":173,"../../utils/":196,"../a-entity":121,"../a-node":123,"../a-register-element":124,"../system":135,"./metaTags":129,"./postMessage":130,"./scenes":131,"./wakelock":132,"@tweenjs/tween.js":1}],129:[function(_dereq_,module,exports){var constants=_dereq_("../../constants/");var extend=_dereq_("../../utils").extend;var MOBILE_HEAD_TAGS=module.exports.MOBILE_HEAD_TAGS=[Meta({name:"viewport",content:"width=device-width,initial-scale=1,maximum-scale=1,shrink-to-fit=no,user-scalable=no,minimal-ui"}),Meta({name:"mobile-web-app-capable",content:"yes"}),Meta({name:"theme-color",content:"black"})];var MOBILE_IOS_HEAD_TAGS=[Meta({name:"apple-mobile-web-app-capable",content:"yes"}),Meta({name:"apple-mobile-web-app-status-bar-style",content:"black"}),Link({rel:"apple-touch-icon",href:"https://aframe.io/images/aframe-logo-152.png"})];function Meta(attrs){return{tagName:"meta",attributes:attrs,exists:function(){return document.querySelector('meta[name="'+attrs.name+'"]')}}}function Link(attrs){return{tagName:"link",attributes:attrs,exists:function(){return document.querySelector('link[rel="'+attrs.rel+'"]')}}}module.exports.inject=function injectHeadTags(scene){var headEl=document.head;var headScriptEl=headEl.querySelector("script");var tag;var headTags=[];MOBILE_HEAD_TAGS.forEach(createAndInjectTag);if(scene.isIOS){MOBILE_IOS_HEAD_TAGS.forEach(createAndInjectTag)}return headTags;function createAndInjectTag(tagObj){if(!tagObj||tagObj.exists()){return}tag=createTag(tagObj);if(!tag){return}if(headScriptEl){headScriptEl.parentNode.insertBefore(tag,headScriptEl)}else{headEl.appendChild(tag)}headTags.push(tag)}};function createTag(tagObj){if(!tagObj||!tagObj.tagName){return}var meta=document.createElement(tagObj.tagName);meta.setAttribute(constants.AFRAME_INJECTED,"");return extend(meta,tagObj.attributes)}},{"../../constants/":116,"../../utils":196}],130:[function(_dereq_,module,exports){var bind=_dereq_("../../utils/bind");var isIframed=_dereq_("../../utils/").isIframed;module.exports=function initPostMessageAPI(scene){if(!isIframed()){return}window.addEventListener("message",bind(postMessageAPIHandler,scene))};function postMessageAPIHandler(event){var scene=this;if(!event.data){return}switch(event.data.type){case"vr":{switch(event.data.data){case"enter":scene.enterVR();break;case"exit":scene.exitVR();break}}}}},{"../../utils/":196,"../../utils/bind":190}],131:[function(_dereq_,module,exports){module.exports=[]},{}],132:[function(_dereq_,module,exports){var Wakelock=_dereq_("../../../vendor/wakelock/wakelock");module.exports=function initWakelock(scene){if(!scene.isMobile){return}var wakelock=scene.wakelock=new Wakelock;scene.addEventListener("enter-vr",function(){wakelock.request()});scene.addEventListener("exit-vr",function(){wakelock.release()})}},{"../../../vendor/wakelock/wakelock":206}],133:[function(_dereq_,module,exports){var utils=_dereq_("../utils/");var PropertyTypes=_dereq_("./propertyTypes");var debug=utils.debug;var isValidDefaultValue=PropertyTypes.isValidDefaultValue;var propertyTypes=PropertyTypes.propertyTypes;var warn=debug("core:schema:warn");function isSingleProperty(schema){if("type"in schema){return typeof schema.type==="string"}return"default"in schema}module.exports.isSingleProperty=isSingleProperty;module.exports.process=function(schema,componentName){if(isSingleProperty(schema)){return processPropertyDefinition(schema,componentName)}Object.keys(schema).forEach(function(propName){schema[propName]=processPropertyDefinition(schema[propName],componentName)});return schema};function processPropertyDefinition(propDefinition,componentName){var defaultVal=propDefinition.default;var propType;var typeName=propDefinition.type;if(!propDefinition.type){if(defaultVal!==undefined&&["boolean","number"].indexOf(typeof defaultVal)!==-1){typeName=typeof defaultVal}else if(Array.isArray(defaultVal)){typeName="array"}else{typeName="string"}}else if(propDefinition.type==="bool"){typeName="boolean"}else if(propDefinition.type==="float"){typeName="number"}propType=propertyTypes[typeName];if(!propType){warn("Unknown property type for component `"+componentName+"`: "+typeName)}propDefinition.parse=propDefinition.parse||propType.parse;propDefinition.stringify=propDefinition.stringify||propType.stringify;propDefinition.type=typeName;if("default"in propDefinition){if(!isValidDefaultValue(typeName,defaultVal)){warn("Default value `"+defaultVal+"` does not match type `"+typeName+"` in component `"+componentName+"`")}}else{propDefinition.default=propType.default}return propDefinition}module.exports.processPropertyDefinition=processPropertyDefinition;module.exports.parseProperties=function(propData,schema,getPartialData,componentName,silent){var propNames=Object.keys(getPartialData?propData:schema);if(propData===null||typeof propData!=="object"){return propData}Object.keys(propData).forEach(function(propName){if(!schema[propName]&&!silent){warn("Unknown property `"+propName+"` for component/system `"+componentName+"`.")}});propNames.forEach(function parse(propName){var propDefinition=schema[propName];var propValue=propData[propName];if(!schema[propName]){return}propData[propName]=parseProperty(propValue,propDefinition)});return propData};function parseProperty(value,propDefinition){if(value===undefined||value===null||value===""){value=propDefinition.default;if(Array.isArray(value)){value=value.slice()}}return propDefinition.parse(value,propDefinition.default)}module.exports.parseProperty=parseProperty;module.exports.stringifyProperties=function(propData,schema){var stringifiedData={};Object.keys(propData).forEach(function(propName){var propDefinition=schema[propName];var propValue=propData[propName];var value=propValue;if(typeof value==="object"){value=stringifyProperty(propValue,propDefinition);if(!propDefinition){warn("Unknown component property: "+propName)}}stringifiedData[propName]=value});return stringifiedData};function stringifyProperty(value,propDefinition){if(typeof value!=="object"){return value}if(!propDefinition||value===null){return JSON.stringify(value)}return propDefinition.stringify(value)}module.exports.stringifyProperty=stringifyProperty},{"../utils/":196,"./propertyTypes":127}],134:[function(_dereq_,module,exports){var schema=_dereq_("./schema");var processSchema=schema.process;var shaders=module.exports.shaders={};var shaderNames=module.exports.shaderNames=[];var THREE=_dereq_("../lib/three");var utils=_dereq_("../utils");var propertyToThreeMapping={array:"v3",color:"v3","int":"i",number:"f",map:"t",time:"f",vec2:"v2",vec3:"v3",vec4:"v4"};var Shader=module.exports.Shader=function(){};Shader.prototype={schema:{},vertexShader:"void main() {"+"gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);"+"}",fragmentShader:"void main() {"+"gl_FragColor = vec4(1.0, 0.0, 1.0, 1.0);"+"}",init:function(data){this.attributes=this.initVariables(data,"attribute");this.uniforms=this.initVariables(data,"uniform");this.material=new(this.raw?THREE.RawShaderMaterial:THREE.ShaderMaterial)({uniforms:this.uniforms,vertexShader:this.vertexShader,fragmentShader:this.fragmentShader});return this.material},initVariables:function(data,type){var variables={};var schema=this.schema;Object.keys(schema).forEach(function processSchema(key){if(schema[key].is!==type){return}var varType=propertyToThreeMapping[schema[key].type];variables[key]={type:varType,value:undefined}});return variables},update:function(data){this.updateVariables(data,"attribute");this.updateVariables(data,"uniform")},updateVariables:function(data,type){var self=this;var variables=type==="uniform"?this.uniforms:this.attributes;var schema=this.schema;Object.keys(data).forEach(function processData(key){var materialKey;if(!schema[key]||schema[key].is!==type){return}if(schema[key].type==="map"){if(!variables[key]||variables[key].value===data[key]){return}materialKey="_texture_"+key;self.el.addEventListener("materialtextureloaded",function(){variables[key].value=self.material[materialKey];variables[key].needsUpdate=true});utils.material.updateMapMaterialFromData(materialKey,key,self,data);return}variables[key].value=self.parseValue(schema[key].type,data[key]);variables[key].needsUpdate=true})},parseValue:function(type,value){var color;switch(type){case"vec2":{return new THREE.Vector2(value.x,value.y)}case"vec3":{return new THREE.Vector3(value.x,value.y,value.z)}case"vec4":{return new THREE.Vector4(value.x,value.y,value.z,value.w)}case"color":{color=new THREE.Color(value);return new THREE.Vector3(color.r,color.g,color.b)}case"map":{return THREE.ImageUtils.loadTexture(value)}default:{return value}}}};module.exports.registerShader=function(name,definition){var NewShader;var proto={};Object.keys(definition).forEach(function(key){proto[key]={value:definition[key],writable:true}});if(shaders[name]){throw new Error("The shader "+name+" has been already registered")}NewShader=function(){Shader.call(this)};NewShader.prototype=Object.create(Shader.prototype,proto);NewShader.prototype.name=name;NewShader.prototype.constructor=NewShader;shaders[name]={Shader:NewShader,schema:processSchema(NewShader.prototype.schema)};shaderNames.push(name);return NewShader}},{"../lib/three":173,"../utils":196,"./schema":133}],135:[function(_dereq_,module,exports){var components=_dereq_("./component");var schema=_dereq_("./schema");var utils=_dereq_("../utils/");var parseProperties=schema.parseProperties;var parseProperty=schema.parseProperty;var processSchema=schema.process;var isSingleProp=schema.isSingleProperty;var styleParser=utils.styleParser;var systems=module.exports.systems={};var System=module.exports.System=function(sceneEl){var component=components&&components.components[this.name];this.el=sceneEl;this.sceneEl=sceneEl;if(component){component.Component.prototype.system=this}this.buildData();this.init();this.update({})};System.prototype={schema:{},init:function(){},update:function(oldData){},updateProperties:function(rawData){var oldData=this.data;if(!Object.keys(schema).length){return}this.buildData(rawData);this.update(oldData)},buildData:function(rawData){var schema=this.schema;if(!Object.keys(schema).length){return}rawData=rawData||window.HTMLElement.prototype.getAttribute.call(this.sceneEl,this.name);if(isSingleProp(schema)){this.data=parseProperty(rawData,schema)}else{this.data=parseProperties(styleParser.parse(rawData)||{},schema)}},tick:undefined,tock:undefined,play:function(){},pause:function(){}};module.exports.registerSystem=function(name,definition){var i;var NewSystem;var proto={};var scenes=utils.findAllScenes(document);Object.keys(definition).forEach(function(key){proto[key]={value:definition[key],writable:true}});if(systems[name]){throw new Error("The system `"+name+"` has been already registered. "+"Check that you are not loading two versions of the same system "+"or two different systems of the same name.")}NewSystem=function(sceneEl){System.call(this,sceneEl)};NewSystem.prototype=Object.create(System.prototype,proto);NewSystem.prototype.name=name;NewSystem.prototype.constructor=NewSystem;NewSystem.prototype.schema=utils.extend(processSchema(NewSystem.prototype.schema));systems[name]=NewSystem;for(i=0;i<scenes.length;i++){scenes[i].initSystem(name)}}},{"../utils/":196,"./component":125,"./schema":133}],136:[function(_dereq_,module,exports){_dereq_("./pivot")},{"./pivot":137}],137:[function(_dereq_,module,exports){var registerComponent=_dereq_("../../core/component").registerComponent;var THREE=_dereq_("../../lib/three");var originalPosition=new THREE.Vector3;var originalRotation=new THREE.Vector3;registerComponent("pivot",{dependencies:["position"],schema:{type:"vec3"},init:function(){var data=this.data;var el=this.el;var originalParent=el.object3D.parent;var originalGroup=el.object3D;var outerGroup=new THREE.Group;originalPosition.copy(originalGroup.position);originalRotation.copy(originalGroup.rotation);originalParent.remove(originalGroup);outerGroup.add(originalGroup);originalParent.add(outerGroup);el.object3D=outerGroup;originalGroup.position.set(-1*data.x,-1*data.y,-1*data.z);outerGroup.position.set(data.x+originalPosition.x,data.y+originalPosition.y,data.z+originalPosition.z);outerGroup.rotation.copy(originalGroup.rotation);originalGroup.rotation.set(0,0,0)}})},{"../../core/component":125,"../../lib/three":173}],138:[function(_dereq_,module,exports){var components=_dereq_("../../core/component").components;var shaders=_dereq_("../../core/shader").shaders;var utils=_dereq_("../../utils/");var materialMappings={};Object.keys(components.material.schema).forEach(addMapping);Object.keys(shaders.standard.schema).forEach(addMapping);function addMapping(prop){var htmlAttrName=prop.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase();if(prop==="fog"){htmlAttrName="material-fog"}if(prop==="visible"){htmlAttrName="material-visible"}materialMappings[htmlAttrName]="material."+prop}module.exports=function getMeshMixin(){return{defaultComponents:{material:{}},mappings:utils.extend({},materialMappings)}}},{"../../core/component":125,"../../core/shader":134,"../../utils/":196}],139:[function(_dereq_,module,exports){_dereq_("./primitives/a-camera");_dereq_("./primitives/a-collada-model");_dereq_("./primitives/a-cursor");_dereq_("./primitives/a-curvedimage");_dereq_("./primitives/a-gltf-model");_dereq_("./primitives/a-image");_dereq_("./primitives/a-light");_dereq_("./primitives/a-link");_dereq_("./primitives/a-obj-model");_dereq_("./primitives/a-sky");_dereq_("./primitives/a-sound");_dereq_("./primitives/a-text");_dereq_("./primitives/a-video");_dereq_("./primitives/a-videosphere");_dereq_("./primitives/meshPrimitives")},{"./primitives/a-camera":141,"./primitives/a-collada-model":142,"./primitives/a-cursor":143,"./primitives/a-curvedimage":144,"./primitives/a-gltf-model":145,"./primitives/a-image":146,"./primitives/a-light":147,"./primitives/a-link":148,"./primitives/a-obj-model":149,"./primitives/a-sky":150,"./primitives/a-sound":151,"./primitives/a-text":152,"./primitives/a-video":153,"./primitives/a-videosphere":154,"./primitives/meshPrimitives":155}],140:[function(_dereq_,module,exports){var AEntity=_dereq_("../../core/a-entity");var components=_dereq_("../../core/component").components;var registerElement=_dereq_("../../core/a-register-element").registerElement;var utils=_dereq_("../../utils/");var debug=utils.debug;var setComponentProperty=utils.entity.setComponentProperty;var log=debug("extras:primitives:debug");var warn=debug("extras:primitives:warn");var primitives=module.exports.primitives={};module.exports.registerPrimitive=function registerPrimitive(name,definition){name=name.toLowerCase();log("Registering <%s>",name);if(definition.defaultAttributes){warn("The 'defaultAttributes' object is deprecated. Use 'defaultComponents' instead.")}var primitive=registerElement(name,{prototype:Object.create(AEntity.prototype,{defaultComponentsFromPrimitive:{value:definition.defaultComponents||definition.defaultAttributes||{}},deprecated:{value:definition.deprecated||null},deprecatedMappings:{value:definition.deprecatedMappings||{}},mappings:{value:definition.mappings||{}},createdCallback:{value:function(){if(definition.deprecated){console.warn(definition.deprecated)}this.resolveMappingCollisions()}},resolveMappingCollisions:{value:function(){var mappings=this.mappings;var self=this;Object.keys(mappings).forEach(function resolveCollision(key){var newAttribute;if(key!==key.toLowerCase()){warn("Mapping keys should be specified in lower case. The mapping key "+key+" may not be recognized")}if(components[key]){newAttribute=mappings[key].replace(".","-");mappings[newAttribute]=mappings[key];delete mappings[key];console.warn("The primitive "+self.tagName.toLowerCase()+" has a mapping collision. "+"The attribute "+key+" has the same name as a registered component and"+" has been renamed to "+newAttribute)}})}},getExtraComponents:{value:function(){var attr;var data;var i;var mapping;var mixins;var path;var self=this;data=utils.clone(this.defaultComponentsFromPrimitive);mixins=this.getAttribute("mixin");if(mixins){mixins=mixins.trim().split(" ");mixins.forEach(function applyMixin(mixinId){var mixinComponents=self.sceneEl.querySelector("#"+mixinId).componentCache;Object.keys(mixinComponents).forEach(function setComponent(name){data[name]=extend(data[name],mixinComponents[name])})})}for(i=0;i<this.attributes.length;i++){attr=this.attributes[i];mapping=this.mappings[attr.name];if(mapping){path=utils.entity.getComponentPropertyPath(mapping);if(path.constructor===Array){data[path[0]]=data[path[0]]||{};data[path[0]][path[1]]=attr.value}else{data[path]=attr.value}continue}}return data;function extend(base,extension){if(isUndefined(base)){return copy(extension)}if(isUndefined(extension)){return copy(base)}if(isPureObject(base)&&isPureObject(extension)){return utils.extendDeep(base,extension)}return copy(extension)}function isUndefined(value){return typeof value==="undefined"}function copy(value){if(isPureObject(value)){return utils.extendDeep({},value)}return value}function isPureObject(value){return value!==null&&value.constructor===Object}}},attributeChangedCallback:{value:function(attr,oldVal,value){var componentName=this.mappings[attr];if(attr in this.deprecatedMappings){console.warn(this.deprecatedMappings[attr])}if(!attr||!componentName){return}setComponentProperty(this,componentName,value)}}})});primitives[name]=primitive;return primitive};function addComponentMapping(componentName,mappings){var schema=components[componentName].schema;Object.keys(schema).map(function(prop){var attrName=prop.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase();if(mappings[attrName]!==undefined){attrName=componentName+"-"+prop}mappings[attrName]=componentName+"."+prop})}function definePrimitive(tagName,defaultComponents,mappings){mappings=mappings||{};Object.keys(defaultComponents).map(function buildMappings(componentName){addComponentMapping(componentName,mappings)});module.exports.registerPrimitive(tagName,utils.extendDeep({},null,{defaultComponents:defaultComponents,mappings:mappings}))}module.exports.definePrimitive=definePrimitive},{"../../core/a-entity":121,"../../core/a-register-element":124,"../../core/component":125,"../../utils/":196}],141:[function(_dereq_,module,exports){var DEFAULT_CAMERA_HEIGHT=_dereq_("../../../constants/").DEFAULT_CAMERA_HEIGHT;var registerPrimitive=_dereq_("../primitives").registerPrimitive;registerPrimitive("a-camera",{defaultComponents:{camera:{userHeight:DEFAULT_CAMERA_HEIGHT},"look-controls":{},"wasd-controls":{}},mappings:{active:"camera.active",far:"camera.far",fov:"camera.fov","look-controls-enabled":"look-controls.enabled",near:"camera.near","wasd-controls-enabled":"wasd-controls.enabled","reverse-mouse-drag":"look-controls.reverseMouseDrag","user-height":"camera.userHeight",zoom:"camera.zoom"},deprecatedMappings:{"cursor-color":"a-camera[cursor-color] has been removed. Use a-cursor[color] instead.","cursor-maxdistance":"a-camera[cursor-maxdistance] has been removed. Use a-cursor[max-distance] instead.","cursor-offset":"a-camera[cursor-offset] has been removed. Use a-cursor[position] instead.","cursor-opacity":"a-camera[cursor-offset] has been removed. Use a-cursor[opacity] instead.","cursor-scale":"a-camera[cursor-scale] has been removed. Use a-cursor[scale] instead.","cursor-visible":"a-camera[cursor-visible] has been removed. Use a-cursor[visible] instead."}})},{"../../../constants/":116,"../primitives":140}],142:[function(_dereq_,module,exports){var registerPrimitive=_dereq_("../primitives").registerPrimitive;registerPrimitive("a-collada-model",{mappings:{src:"collada-model"}})},{"../primitives":140}],143:[function(_dereq_,module,exports){var getMeshMixin=_dereq_("../getMeshMixin");var registerPrimitive=_dereq_("../primitives").registerPrimitive;var utils=_dereq_("../../../utils/");registerPrimitive("a-cursor",utils.extendDeep({},getMeshMixin(),{
defaultComponents:{cursor:{},geometry:{primitive:"ring",radiusOuter:.016,radiusInner:.01,segmentsTheta:32},material:{color:"#000",shader:"flat",opacity:.8},position:{x:0,y:0,z:-1}},mappings:{far:"raycaster.far",fuse:"cursor.fuse","fuse-timeout":"cursor.fuseTimeout",interval:"raycaster.interval",objects:"raycaster.objects"}}))},{"../../../utils/":196,"../getMeshMixin":138,"../primitives":140}],144:[function(_dereq_,module,exports){var getMeshMixin=_dereq_("../getMeshMixin");var registerPrimitive=_dereq_("../primitives").registerPrimitive;var utils=_dereq_("../../../utils/");registerPrimitive("a-curvedimage",utils.extendDeep({},getMeshMixin(),{defaultComponents:{geometry:{height:1,primitive:"cylinder",radius:2,segmentsRadial:48,thetaLength:270,openEnded:true,thetaStart:0},material:{color:"#FFF",shader:"flat",side:"double",transparent:true,repeat:"-1 1"}},mappings:{height:"geometry.height","open-ended":"geometry.openEnded",radius:"geometry.radius",segments:"geometry.segmentsRadial",start:"geometry.thetaStart","theta-length":"geometry.thetaLength","theta-start":"geometry.thetaStart",width:"geometry.thetaLength"}}))},{"../../../utils/":196,"../getMeshMixin":138,"../primitives":140}],145:[function(_dereq_,module,exports){var registerPrimitive=_dereq_("../primitives").registerPrimitive;registerPrimitive("a-gltf-model",{mappings:{src:"gltf-model"}})},{"../primitives":140}],146:[function(_dereq_,module,exports){var getMeshMixin=_dereq_("../getMeshMixin");var registerPrimitive=_dereq_("../primitives").registerPrimitive;var utils=_dereq_("../../../utils/");registerPrimitive("a-image",utils.extendDeep({},getMeshMixin(),{defaultComponents:{geometry:{primitive:"plane"},material:{color:"#FFF",shader:"flat",side:"double",transparent:true}},mappings:{height:"geometry.height",width:"geometry.width"}}))},{"../../../utils/":196,"../getMeshMixin":138,"../primitives":140}],147:[function(_dereq_,module,exports){var registerPrimitive=_dereq_("../primitives").registerPrimitive;registerPrimitive("a-light",{defaultComponents:{light:{}},mappings:{angle:"light.angle",color:"light.color","ground-color":"light.groundColor",decay:"light.decay",distance:"light.distance",intensity:"light.intensity",penumbra:"light.penumbra",type:"light.type",target:"light.target"}})},{"../primitives":140}],148:[function(_dereq_,module,exports){var registerPrimitive=_dereq_("../primitives").registerPrimitive;registerPrimitive("a-link",{defaultComponents:{},mappings:{href:"link.href",image:"link.image",title:"link.title"}})},{"../primitives":140}],149:[function(_dereq_,module,exports){var meshMixin=_dereq_("../getMeshMixin")();var registerPrimitive=_dereq_("../primitives").registerPrimitive;var utils=_dereq_("../../../utils/");registerPrimitive("a-obj-model",utils.extendDeep({},meshMixin,{defaultComponents:{"obj-model":{}},mappings:{src:"obj-model.obj",mtl:"obj-model.mtl"}}))},{"../../../utils/":196,"../getMeshMixin":138,"../primitives":140}],150:[function(_dereq_,module,exports){var getMeshMixin=_dereq_("../getMeshMixin");var registerPrimitive=_dereq_("../primitives").registerPrimitive;var utils=_dereq_("../../../utils/");var meshPrimitives=_dereq_("./meshPrimitives");registerPrimitive("a-sky",utils.extendDeep({},getMeshMixin(),{defaultComponents:{geometry:{primitive:"sphere",radius:5e3,segmentsWidth:64,segmentsHeight:32},material:{color:"#FFF",shader:"flat",npot:true},scale:"-1 1 1"},mappings:utils.extendDeep({},meshPrimitives["a-sphere"].prototype.mappings)}))},{"../../../utils/":196,"../getMeshMixin":138,"../primitives":140,"./meshPrimitives":155}],151:[function(_dereq_,module,exports){var registerPrimitive=_dereq_("../primitives").registerPrimitive;registerPrimitive("a-sound",{defaultComponents:{sound:{}},mappings:{src:"sound.src",on:"sound.on",autoplay:"sound.autoplay",loop:"sound.loop",volume:"sound.volume"}})},{"../primitives":140}],152:[function(_dereq_,module,exports){var definePrimitive=_dereq_("../primitives").definePrimitive;definePrimitive("a-text",{text:{anchor:"align",width:5}})},{"../primitives":140}],153:[function(_dereq_,module,exports){var getMeshMixin=_dereq_("../getMeshMixin");var registerPrimitive=_dereq_("../primitives").registerPrimitive;var utils=_dereq_("../../../utils/");registerPrimitive("a-video",utils.extendDeep({},getMeshMixin(),{defaultComponents:{geometry:{primitive:"plane"},material:{color:"#FFF",shader:"flat",side:"double",transparent:true}},mappings:{height:"geometry.height",width:"geometry.width"}}))},{"../../../utils/":196,"../getMeshMixin":138,"../primitives":140}],154:[function(_dereq_,module,exports){var getMeshMixin=_dereq_("../getMeshMixin");var registerPrimitive=_dereq_("../primitives").registerPrimitive;var utils=_dereq_("../../../utils/");registerPrimitive("a-videosphere",utils.extendDeep({},getMeshMixin(),{defaultComponents:{geometry:{primitive:"sphere",radius:5e3,segmentsWidth:64,segmentsHeight:32},material:{color:"#FFF",shader:"flat",npot:true},scale:"-1 1 1"},mappings:{radius:"geometry.radius","segments-height":"geometry.segmentsHeight","segments-width":"geometry.segmentsWidth"}}))},{"../../../utils/":196,"../getMeshMixin":138,"../primitives":140}],155:[function(_dereq_,module,exports){var getMeshMixin=_dereq_("../getMeshMixin");var geometries=_dereq_("../../../core/geometry").geometries;var geometryNames=_dereq_("../../../core/geometry").geometryNames;var registerPrimitive=_dereq_("../primitives").registerPrimitive;var utils=_dereq_("../../../utils/");var meshPrimitives=module.exports={};geometryNames.forEach(function registerMeshPrimitive(geometryName){var geometry=geometries[geometryName];var geometryHyphened=unCamelCase(geometryName);var mappings={};Object.keys(geometry.schema).forEach(function createMapping(property){mappings[unCamelCase(property)]="geometry."+property});var tagName="a-"+geometryHyphened;var primitive=registerPrimitive(tagName,utils.extendDeep({},getMeshMixin(),{defaultComponents:{geometry:{primitive:geometryName}},mappings:mappings}));meshPrimitives[tagName]=primitive});function unCamelCase(str){return str.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}},{"../../../core/geometry":126,"../../../utils/":196,"../getMeshMixin":138,"../primitives":140}],156:[function(_dereq_,module,exports){var registerGeometry=_dereq_("../core/geometry").registerGeometry;var THREE=_dereq_("../lib/three");registerGeometry("box",{schema:{depth:{"default":1,min:0},height:{"default":1,min:0},width:{"default":1,min:0},segmentsHeight:{"default":1,min:1,max:20,type:"int"},segmentsWidth:{"default":1,min:1,max:20,type:"int"},segmentsDepth:{"default":1,min:1,max:20,type:"int"}},init:function(data){this.geometry=new THREE.BoxGeometry(data.width,data.height,data.depth)}})},{"../core/geometry":126,"../lib/three":173}],157:[function(_dereq_,module,exports){var registerGeometry=_dereq_("../core/geometry").registerGeometry;var THREE=_dereq_("../lib/three");var degToRad=THREE.Math.degToRad;registerGeometry("circle",{schema:{radius:{"default":1,min:0},segments:{"default":32,min:3,type:"int"},thetaLength:{"default":360,min:0},thetaStart:{"default":0}},init:function(data){this.geometry=new THREE.CircleGeometry(data.radius,data.segments,degToRad(data.thetaStart),degToRad(data.thetaLength))}})},{"../core/geometry":126,"../lib/three":173}],158:[function(_dereq_,module,exports){var registerGeometry=_dereq_("../core/geometry").registerGeometry;var THREE=_dereq_("../lib/three");var degToRad=THREE.Math.degToRad;registerGeometry("cone",{schema:{height:{"default":1,min:0},openEnded:{"default":false},radiusBottom:{"default":1,min:0},radiusTop:{"default":.01,min:0},segmentsHeight:{"default":18,min:1,type:"int"},segmentsRadial:{"default":36,min:3,type:"int"},thetaLength:{"default":360,min:0},thetaStart:{"default":0}},init:function(data){this.geometry=new THREE.CylinderGeometry(data.radiusTop,data.radiusBottom,data.height,data.segmentsRadial,data.segmentsHeight,data.openEnded,degToRad(data.thetaStart),degToRad(data.thetaLength))}})},{"../core/geometry":126,"../lib/three":173}],159:[function(_dereq_,module,exports){var registerGeometry=_dereq_("../core/geometry").registerGeometry;var THREE=_dereq_("../lib/three");var degToRad=THREE.Math.degToRad;registerGeometry("cylinder",{schema:{height:{"default":1,min:0},openEnded:{"default":false},radius:{"default":1,min:0},segmentsHeight:{"default":18,min:1,type:"int"},segmentsRadial:{"default":36,min:3,type:"int"},thetaLength:{"default":360,min:0},thetaStart:{"default":0}},init:function(data){this.geometry=new THREE.CylinderGeometry(data.radius,data.radius,data.height,data.segmentsRadial,data.segmentsHeight,data.openEnded,degToRad(data.thetaStart),degToRad(data.thetaLength))}})},{"../core/geometry":126,"../lib/three":173}],160:[function(_dereq_,module,exports){var registerGeometry=_dereq_("../core/geometry").registerGeometry;var THREE=_dereq_("../lib/three");registerGeometry("dodecahedron",{schema:{detail:{"default":0,min:0,max:5,type:"int"},radius:{"default":1,min:0}},init:function(data){this.geometry=new THREE.DodecahedronGeometry(data.radius,data.detail)}})},{"../core/geometry":126,"../lib/three":173}],161:[function(_dereq_,module,exports){var registerGeometry=_dereq_("../core/geometry").registerGeometry;var THREE=_dereq_("../lib/three");registerGeometry("icosahedron",{schema:{detail:{"default":0,min:0,max:5,type:"int"},radius:{"default":1,min:0}},init:function(data){this.geometry=new THREE.IcosahedronGeometry(data.radius,data.detail)}})},{"../core/geometry":126,"../lib/three":173}],162:[function(_dereq_,module,exports){_dereq_("./box.js");_dereq_("./circle.js");_dereq_("./cone.js");_dereq_("./cylinder.js");_dereq_("./dodecahedron.js");_dereq_("./icosahedron.js");_dereq_("./octahedron.js");_dereq_("./plane.js");_dereq_("./ring.js");_dereq_("./sphere.js");_dereq_("./tetrahedron.js");_dereq_("./torus.js");_dereq_("./torusKnot.js");_dereq_("./triangle.js")},{"./box.js":156,"./circle.js":157,"./cone.js":158,"./cylinder.js":159,"./dodecahedron.js":160,"./icosahedron.js":161,"./octahedron.js":163,"./plane.js":164,"./ring.js":165,"./sphere.js":166,"./tetrahedron.js":167,"./torus.js":168,"./torusKnot.js":169,"./triangle.js":170}],163:[function(_dereq_,module,exports){var registerGeometry=_dereq_("../core/geometry").registerGeometry;var THREE=_dereq_("../lib/three");registerGeometry("octahedron",{schema:{detail:{"default":0,min:0,max:5,type:"int"},radius:{"default":1,min:0}},init:function(data){this.geometry=new THREE.OctahedronGeometry(data.radius,data.detail)}})},{"../core/geometry":126,"../lib/three":173}],164:[function(_dereq_,module,exports){var registerGeometry=_dereq_("../core/geometry").registerGeometry;var THREE=_dereq_("../lib/three");registerGeometry("plane",{schema:{height:{"default":1,min:0},width:{"default":1,min:0},segmentsHeight:{"default":1,min:1,max:20,type:"int"},segmentsWidth:{"default":1,min:1,max:20,type:"int"}},init:function(data){this.geometry=new THREE.PlaneGeometry(data.width,data.height,data.segmentsWidth,data.segmentsHeight)}})},{"../core/geometry":126,"../lib/three":173}],165:[function(_dereq_,module,exports){var registerGeometry=_dereq_("../core/geometry").registerGeometry;var THREE=_dereq_("../lib/three");var degToRad=THREE.Math.degToRad;registerGeometry("ring",{schema:{radiusInner:{"default":.8,min:0},radiusOuter:{"default":1.2,min:0},segmentsPhi:{"default":10,min:1,type:"int"},segmentsTheta:{"default":32,min:3,type:"int"},thetaLength:{"default":360,min:0},thetaStart:{"default":0}},init:function(data){this.geometry=new THREE.RingGeometry(data.radiusInner,data.radiusOuter,data.segmentsTheta,data.segmentsPhi,degToRad(data.thetaStart),degToRad(data.thetaLength))}})},{"../core/geometry":126,"../lib/three":173}],166:[function(_dereq_,module,exports){var registerGeometry=_dereq_("../core/geometry").registerGeometry;var THREE=_dereq_("../lib/three");var degToRad=THREE.Math.degToRad;registerGeometry("sphere",{schema:{radius:{"default":1,min:0},phiLength:{"default":360},phiStart:{"default":0,min:0},thetaLength:{"default":180,min:0},thetaStart:{"default":0},segmentsHeight:{"default":18,min:2,type:"int"},segmentsWidth:{"default":36,min:3,type:"int"}},init:function(data){this.geometry=new THREE.SphereGeometry(data.radius,data.segmentsWidth,data.segmentsHeight,degToRad(data.phiStart),degToRad(data.phiLength),degToRad(data.thetaStart),degToRad(data.thetaLength))}})},{"../core/geometry":126,"../lib/three":173}],167:[function(_dereq_,module,exports){var registerGeometry=_dereq_("../core/geometry").registerGeometry;var THREE=_dereq_("../lib/three");registerGeometry("tetrahedron",{schema:{detail:{"default":0,min:0,max:5,type:"int"},radius:{"default":1,min:0}},init:function(data){this.geometry=new THREE.TetrahedronGeometry(data.radius,data.detail)}})},{"../core/geometry":126,"../lib/three":173}],168:[function(_dereq_,module,exports){var registerGeometry=_dereq_("../core/geometry").registerGeometry;var THREE=_dereq_("../lib/three");var degToRad=THREE.Math.degToRad;registerGeometry("torus",{schema:{arc:{"default":360},radius:{"default":1,min:0},radiusTubular:{"default":.2,min:0},segmentsRadial:{"default":36,min:2,type:"int"},segmentsTubular:{"default":32,min:3,type:"int"}},init:function(data){this.geometry=new THREE.TorusGeometry(data.radius,data.radiusTubular*2,data.segmentsRadial,data.segmentsTubular,degToRad(data.arc))}})},{"../core/geometry":126,"../lib/three":173}],169:[function(_dereq_,module,exports){var registerGeometry=_dereq_("../core/geometry").registerGeometry;var THREE=_dereq_("../lib/three");registerGeometry("torusKnot",{schema:{p:{"default":2,min:1},q:{"default":3,min:1},radius:{"default":1,min:0},radiusTubular:{"default":.2,min:0},segmentsRadial:{"default":8,min:3,type:"int"},segmentsTubular:{"default":100,min:3,type:"int"}},init:function(data){this.geometry=new THREE.TorusKnotGeometry(data.radius,data.radiusTubular*2,data.segmentsTubular,data.segmentsRadial,data.p,data.q)}})},{"../core/geometry":126,"../lib/three":173}],170:[function(_dereq_,module,exports){var registerGeometry=_dereq_("../core/geometry").registerGeometry;var THREE=_dereq_("../lib/three");var quaternion=new THREE.Quaternion;var rotateVector=new THREE.Vector3(0,0,1);var uvMinVector=new THREE.Vector2;var uvMaxVector=new THREE.Vector2;var uvScaleVector=new THREE.Vector2;registerGeometry("triangle",{schema:{vertexA:{type:"vec3","default":{x:0,y:.5,z:0}},vertexB:{type:"vec3","default":{x:-.5,y:-.5,z:0}},vertexC:{type:"vec3","default":{x:.5,y:-.5,z:0}}},init:function(data){var geometry;var normal;var triangle;var uvA;var uvB;var uvC;triangle=new THREE.Triangle;triangle.a.set(data.vertexA.x,data.vertexA.y,data.vertexA.z);triangle.b.set(data.vertexB.x,data.vertexB.y,data.vertexB.z);triangle.c.set(data.vertexC.x,data.vertexC.y,data.vertexC.z);normal=triangle.normal();quaternion.setFromUnitVectors(normal,rotateVector);uvA=triangle.a.clone().applyQuaternion(quaternion);uvB=triangle.b.clone().applyQuaternion(quaternion);uvC=triangle.c.clone().applyQuaternion(quaternion);uvMinVector.set(Math.min(uvA.x,uvB.x,uvC.x),Math.min(uvA.y,uvB.y,uvC.y));uvMaxVector.set(Math.max(uvA.x,uvB.x,uvC.x),Math.max(uvA.y,uvB.y,uvC.y));uvScaleVector.set(0,0).subVectors(uvMaxVector,uvMinVector);uvA=(new THREE.Vector2).subVectors(uvA,uvMinVector).divide(uvScaleVector);uvB=(new THREE.Vector2).subVectors(uvB,uvMinVector).divide(uvScaleVector);uvC=(new THREE.Vector2).subVectors(uvC,uvMinVector).divide(uvScaleVector);geometry=this.geometry=new THREE.Geometry;geometry.vertices.push(triangle.a);geometry.vertices.push(triangle.b);geometry.vertices.push(triangle.c);geometry.faces.push(new THREE.Face3(0,1,2,normal));geometry.faceVertexUvs[0]=[[uvA,uvB,uvC]]}})},{"../core/geometry":126,"../lib/three":173}],171:[function(_dereq_,module,exports){var utils=_dereq_("./utils/");var debug=utils.debug;var error=debug("A-Frame:error");var warn=debug("A-Frame:warn");if(window.document.currentScript&&window.document.currentScript.parentNode!==window.document.head&&!window.debug){warn("Put the A-Frame <script> tag in the <head> of the HTML *before* the scene to "+"ensure everything for A-Frame is properly registered before they are used from "+"HTML.")}if(window.location.protocol==="file:"){error("This HTML file is currently being served via the file:// protocol. "+"Assets, textures, and models WILL NOT WORK due to cross-origin policy! "+"Please use a local or hosted server: "+"https://aframe.io/docs/0.5.0/introduction/getting-started.html#using-a-local-server.")}window.Promise=window.Promise||_dereq_("promise-polyfill");window.hasNativeWebVRImplementation=!!window.navigator.getVRDisplays||!!window.navigator.getVRDevices;window.WebVRConfig=window.WebVRConfig||{BUFFER_SCALE:1,CARDBOARD_UI_DISABLED:true,ROTATE_INSTRUCTIONS_DISABLED:true,TOUCH_PANNER_DISABLED:true,MOUSE_KEYBOARD_CONTROLS_DISABLED:true};if(utils.device.isIOSOlderThan10(window.navigator.userAgent)){window.WebVRConfig.BUFFER_SCALE=1/window.devicePixelRatio}_dereq_("webvr-polyfill");_dereq_("present");if(utils.device.isBrowserEnvironment){_dereq_("./style/aframe.css");_dereq_("./style/rStats.css")}var AScene=_dereq_("./core/scene/a-scene").AScene;var components=_dereq_("./core/component").components;var registerComponent=_dereq_("./core/component").registerComponent;var registerGeometry=_dereq_("./core/geometry").registerGeometry;var registerPrimitive=_dereq_("./extras/primitives/primitives").registerPrimitive;var registerShader=_dereq_("./core/shader").registerShader;var registerSystem=_dereq_("./core/system").registerSystem;var shaders=_dereq_("./core/shader").shaders;var systems=_dereq_("./core/system").systems;var THREE=window.THREE=_dereq_("./lib/three");var TWEEN=window.TWEEN=_dereq_("@tweenjs/tween.js");var pkg=_dereq_("../package");_dereq_("./components/index");_dereq_("./geometries/index");_dereq_("./shaders/index");_dereq_("./systems/index");var ANode=_dereq_("./core/a-node");var AEntity=_dereq_("./core/a-entity");_dereq_("./core/a-animation");_dereq_("./core/a-assets");_dereq_("./core/a-cubemap");_dereq_("./core/a-mixin");_dereq_("./extras/components/");_dereq_("./extras/primitives/");console.log("A-Frame Version: 0.6.1 (Date 29-07-2017, Commit #1bfc562)");console.log("three Version:",pkg.dependencies["three"]);console.log("WebVR Polyfill Version:",pkg.dependencies["webvr-polyfill"]);module.exports=window.AFRAME={AComponent:_dereq_("./core/component").Component,AEntity:AEntity,ANode:ANode,AScene:AScene,components:components,geometries:_dereq_("./core/geometry").geometries,registerComponent:registerComponent,registerElement:_dereq_("./core/a-register-element").registerElement,registerGeometry:registerGeometry,registerPrimitive:registerPrimitive,registerShader:registerShader,registerSystem:registerSystem,primitives:{getMeshMixin:_dereq_("./extras/primitives/getMeshMixin"),primitives:_dereq_("./extras/primitives/primitives").primitives},scenes:_dereq_("./core/scene/scenes"),schema:_dereq_("./core/schema"),shaders:shaders,systems:systems,THREE:THREE,TWEEN:TWEEN,utils:utils,version:pkg.version}},{"../package":76,"./components/index":85,"./core/a-animation":118,"./core/a-assets":119,"./core/a-cubemap":120,"./core/a-entity":121,"./core/a-mixin":122,"./core/a-node":123,"./core/a-register-element":124,"./core/component":125,"./core/geometry":126,"./core/scene/a-scene":128,"./core/scene/scenes":131,"./core/schema":133,"./core/shader":134,"./core/system":135,"./extras/components/":136,"./extras/primitives/":139,"./extras/primitives/getMeshMixin":138,"./extras/primitives/primitives":140,"./geometries/index":162,"./lib/three":173,"./shaders/index":175,"./style/aframe.css":180,"./style/rStats.css":181,"./systems/index":185,"./utils/":196,"@tweenjs/tween.js":1,present:33,"promise-polyfill":34,"webvr-polyfill":61}],172:[function(_dereq_,module,exports){window.aframeStats=function(scene){var _rS=null;var _scene=scene;var _values={te:{caption:"Entities"},lt:{caption:"Load Time"}};var _groups=[{caption:"A-Frame",values:["te","lt"]}];function _update(){_rS("te").set(getEntityCount());if(window.performance.getEntriesByName){_rS("lt").set(window.performance.getEntriesByName("render-started")[0].startTime.toFixed(0))}}function getEntityCount(){var elements=_scene.querySelectorAll("*");Array.prototype.slice.call(elements).filter(function(el){return el.isEntity});return elements.length}function _start(){}function _end(){}function _attach(r){_rS=r}return{update:_update,start:_start,end:_end,attach:_attach,values:_values,groups:_groups,fractions:[]}};if(typeof module==="object"){module.exports={aframeStats:window.aframeStats}}},{}],173:[function(_dereq_,module,exports){(function(global){var THREE=global.THREE=_dereq_("three");if(THREE.TextureLoader){THREE.TextureLoader.prototype.crossOrigin="anonymous"}if(THREE.ImageLoader){THREE.ImageLoader.prototype.crossOrigin="anonymous"}if(THREE.Cache){THREE.Cache.enabled=true}_dereq_("three/examples/js/loaders/GLTFLoader");_dereq_("three/examples/js/loaders/OBJLoader");_dereq_("three/examples/js/loaders/MTLLoader");_dereq_("three/examples/js/loaders/ColladaLoader");_dereq_("../../vendor/VRControls");_dereq_("../../vendor/VREffect");THREE.ColladaLoader.prototype.crossOrigin="anonymous";THREE.GLTFLoader.prototype.crossOrigin="anonymous";THREE.MTLLoader.prototype.crossOrigin="anonymous";THREE.OBJLoader.prototype.crossOrigin="anonymous";module.exports=THREE}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"../../vendor/VRControls":201,"../../vendor/VREffect":202,three:41,"three/examples/js/loaders/ColladaLoader":42,"three/examples/js/loaders/GLTFLoader":43,"three/examples/js/loaders/MTLLoader":44,"three/examples/js/loaders/OBJLoader":45}],174:[function(_dereq_,module,exports){var registerShader=_dereq_("../core/shader").registerShader;var THREE=_dereq_("../lib/three");var utils=_dereq_("../utils/");module.exports.Shader=registerShader("flat",{schema:{color:{type:"color"},fog:{"default":true},height:{"default":256},offset:{type:"vec2","default":{x:0,y:0}},repeat:{type:"vec2","default":{x:1,y:1}},src:{type:"map"},width:{"default":512},wireframe:{"default":false},wireframeLinewidth:{"default":2}},init:function(data){this.textureSrc=null;this.material=new THREE.MeshBasicMaterial(getMaterialData(data));utils.material.updateMap(this,data)},update:function(data){this.updateMaterial(data);utils.material.updateMap(this,data)},updateMaterial:function(data){var material=this.material;data=getMaterialData(data);Object.keys(data).forEach(function(key){material[key]=data[key]})}});function getMaterialData(data){return{fog:data.fog,color:new THREE.Color(data.color),wireframe:data.wireframe,wireframeLinewidth:data.wireframeLinewidth}}},{"../core/shader":134,"../lib/three":173,"../utils/":196}],175:[function(_dereq_,module,exports){_dereq_("./flat");_dereq_("./standard");_dereq_("./sdf");_dereq_("./msdf");_dereq_("./ios10hls")},{"./flat":174,"./ios10hls":176,"./msdf":177,"./sdf":178,"./standard":179}],176:[function(_dereq_,module,exports){var registerShader=_dereq_("../core/shader").registerShader;module.exports.Shader=registerShader("ios10hls",{schema:{src:{type:"map",is:"uniform"},opacity:{type:"number",is:"uniform","default":1}},vertexShader:["varying vec2 vUV;","void main(void) {"," gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);"," vUV = uv;","}"].join("\n"),fragmentShader:["uniform sampler2D src;","uniform float opacity;","varying vec2 vUV;","void main() {"," vec2 offset = vec2(0, 0);"," vec2 repeat = vec2(1, 1);"," vec4 color = texture2D(src, vec2(vUV.x / repeat.x + offset.x, (1.0 - vUV.y) / repeat.y + offset.y)).bgra;"," gl_FragColor = vec4(color.rgb, opacity);","}"].join("\n")})},{"../core/shader":134}],177:[function(_dereq_,module,exports){var registerShader=_dereq_("../core/shader").registerShader;module.exports.Shader=registerShader("msdf",{schema:{alphaTest:{type:"number",is:"uniform","default":.5},color:{type:"color",is:"uniform","default":"white"},map:{type:"map",is:"uniform"},opacity:{type:"number",is:"uniform","default":1}},raw:true,vertexShader:["attribute vec2 uv;","attribute vec3 position;","uniform mat4 projectionMatrix;","uniform mat4 modelViewMatrix;","varying vec2 vUV;","void main(void) {"," gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);"," vUV = uv;","}"].join("\n"),fragmentShader:["#ifdef GL_OES_standard_derivatives","#extension GL_OES_standard_derivatives: enable","#endif","precision highp float;","#define BIG_ENOUGH 0.001","#define MODIFIED_ALPHATEST (0.02 * isBigEnough / BIG_ENOUGH)","#define ALL_SMOOTH 0.4","#define ALL_ROUGH 0.02","#define DISCARD_ALPHA (alphaTest / (2.2 - 1.2 * ratio))","uniform sampler2D map;","uniform vec3 color;","uniform float opacity;","uniform float alphaTest;","varying vec2 vUV;","float median(float r, float g, float b) {"," return max(min(r, g), min(max(r, g), b));","}","void main() {"," vec3 sample = 1.0 - texture2D(map, vUV).rgb;"," float sigDist = median(sample.r, sample.g, sample.b) - 0.5;"," float alpha = clamp(sigDist/fwidth(sigDist) + 0.5, 0.0, 1.0);"," float dscale = 0.353505;"," vec2 duv = dscale * (dFdx(vUV) + dFdy(vUV));"," float isBigEnough = max(abs(duv.x), abs(duv.y));"," if (isBigEnough > BIG_ENOUGH) {"," float ratio = BIG_ENOUGH / isBigEnough;"," alpha = ratio * alpha + (1.0 - ratio) * (sigDist + 0.5);"," }"," if (isBigEnough <= BIG_ENOUGH && alpha < alphaTest) { discard; return; }"," if (alpha < alphaTest * MODIFIED_ALPHATEST) { discard; return; }"," gl_FragColor = vec4(color.xyz, alpha * opacity);","}"].join("\n")})},{"../core/shader":134}],178:[function(_dereq_,module,exports){var registerShader=_dereq_("../core/shader").registerShader;module.exports.Shader=registerShader("sdf",{schema:{alphaTest:{type:"number",is:"uniform","default":.5},color:{type:"color",is:"uniform","default":"white"},map:{type:"map",is:"uniform"},opacity:{type:"number",is:"uniform","default":1}},raw:true,vertexShader:["attribute vec2 uv;","attribute vec3 position;","uniform mat4 projectionMatrix;","uniform mat4 modelViewMatrix;","varying vec2 vUV;","void main(void) {"," gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);"," vUV = uv;","}"].join("\n"),fragmentShader:["#ifdef GL_OES_standard_derivatives","#extension GL_OES_standard_derivatives: enable","#endif","precision highp float;","#define BIG_ENOUGH 0.001","#define MODIFIED_ALPHATEST (0.02 * isBigEnough / BIG_ENOUGH)","#define ALL_SMOOTH 0.4","#define ALL_ROUGH 0.02","#define DISCARD_ALPHA (alphaTest / (2.2 - 1.2 * ratio))","uniform sampler2D map;","uniform vec3 color;","uniform float opacity;","uniform float alphaTest;","varying vec2 vUV;","#ifdef GL_OES_standard_derivatives","float contour(float width, float value) {"," return smoothstep(0.5 - value, 0.5 + value, width);","}","#else","float aastep(float value, float afwidth) {"," return smoothstep(0.5 - afwidth, 0.5 + afwidth, value);","}","#endif","void main() {","#ifdef GL_OES_standard_derivatives"," vec2 uv = vUV;"," vec4 texColor = texture2D(map, uv);"," float dist = texColor.a;"," float width = fwidth(dist);"," float alpha = contour(dist, width);"," float dscale = 0.353505;"," vec2 duv = dscale * (dFdx(uv) + dFdy(uv));"," float isBigEnough = max(abs(duv.x), abs(duv.y));"," if (isBigEnough > BIG_ENOUGH) {"," float ratio = BIG_ENOUGH / isBigEnough;"," alpha = ratio * alpha + (1.0 - ratio) * dist;"," }"," else if (isBigEnough <= BIG_ENOUGH) {"," vec4 box = vec4 (uv - duv, uv + duv);"," alpha = (alpha + 0.5 * ("," contour(texture2D(map, box.xy).a, width)"," + contour(texture2D(map, box.zw).a, width)"," + contour(texture2D(map, box.xw).a, width)"," + contour(texture2D(map, box.zy).a, width)"," )) / 3.0;"," }"," if (isBigEnough <= BIG_ENOUGH && alpha < alphaTest) { discard; return; }"," if (alpha < alphaTest * MODIFIED_ALPHATEST) { discard; return; }","#else"," vec4 texColor = texture2D(map, vUV);"," float value = texColor.a;"," float afwidth = (1.0 / 32.0) * (1.4142135623730951 / (2.0 * gl_FragCoord.w));"," float alpha = aastep(value, afwidth);"," float ratio = (gl_FragCoord.w >= ALL_SMOOTH) ? 1.0 : (gl_FragCoord.w < ALL_ROUGH) ? 0.0 : (gl_FragCoord.w - ALL_ROUGH) / (ALL_SMOOTH - ALL_ROUGH);"," if (alpha < alphaTest) { if (ratio >= 1.0) { discard; return; } alpha = 0.0; }"," alpha = alpha * ratio + (1.0 - ratio) * value;"," if (ratio < 1.0)"," if (alpha <= DISCARD_ALPHA) { discard; return; }","#endif"," gl_FragColor = vec4(color, opacity * alpha);","}"].join("\n")})},{"../core/shader":134}],179:[function(_dereq_,module,exports){var registerShader=_dereq_("../core/shader").registerShader;var THREE=_dereq_("../lib/three");var utils=_dereq_("../utils/");var CubeLoader=new THREE.CubeTextureLoader;var texturePromises={};module.exports.Shader=registerShader("standard",{schema:{ambientOcclusionMap:{type:"map"},ambientOcclusionMapIntensity:{"default":1},ambientOcclusionTextureOffset:{type:"vec2"},ambientOcclusionTextureRepeat:{type:"vec2","default":{x:1,y:1}},color:{type:"color"},displacementMap:{type:"map"},displacementScale:{"default":1},displacementBias:{"default":.5},displacementTextureOffset:{type:"vec2"},displacementTextureRepeat:{type:"vec2","default":{x:1,y:1}},emissive:{type:"color","default":"#000"},emissiveIntensity:{"default":1},envMap:{"default":""},fog:{"default":true},height:{"default":256},metalness:{"default":0,min:0,max:1},normalMap:{type:"map"},normalScale:{type:"vec2","default":{x:1,y:1}},normalTextureOffset:{type:"vec2"},normalTextureRepeat:{type:"vec2","default":{x:1,y:1}},offset:{type:"vec2","default":{x:0,y:0}},repeat:{type:"vec2","default":{x:1,y:1}},roughness:{"default":.5,min:0,max:1},sphericalEnvMap:{type:"map"},src:{type:"map"},width:{"default":512},wireframe:{"default":false},wireframeLinewidth:{"default":2}},init:function(data){this.material=new THREE.MeshStandardMaterial(getMaterialData(data));utils.material.updateMap(this,data);if(data.normalMap){utils.material.updateDistortionMap("normal",this,data)}if(data.displacementMap){utils.material.updateDistortionMap("displacement",this,data)}if(data.ambientOcclusionMap){utils.material.updateDistortionMap("ambientOcclusion",this,data)}this.updateEnvMap(data)},update:function(data){this.updateMaterial(data);utils.material.updateMap(this,data);if(data.normalMap){utils.material.updateDistortionMap("normal",this,data)}if(data.displacementMap){utils.material.updateDistortionMap("displacement",this,data)}if(data.ambientOcclusionMap){utils.material.updateDistortionMap("ambientOcclusion",this,data)}this.updateEnvMap(data)},updateMaterial:function(data){var material=this.material;data=getMaterialData(data);Object.keys(data).forEach(function(key){material[key]=data[key]})},updateEnvMap:function(data){var self=this;var material=this.material;var envMap=data.envMap;var sphericalEnvMap=data.sphericalEnvMap;if(!envMap&&!sphericalEnvMap||this.isLoadingEnvMap){material.envMap=null;material.needsUpdate=true;return}this.isLoadingEnvMap=true;if(sphericalEnvMap){this.el.sceneEl.systems.material.loadTexture(sphericalEnvMap,{src:sphericalEnvMap},function textureLoaded(texture){self.isLoadingEnvMap=false;texture.mapping=THREE.SphericalReflectionMapping;material.envMap=texture;utils.material.handleTextureEvents(self.el,texture);material.needsUpdate=true});return}if(texturePromises[envMap]){texturePromises[envMap].then(function(cube){self.isLoadingEnvMap=false;material.envMap=cube;utils.material.handleTextureEvents(self.el,cube);material.needsUpdate=true});return}texturePromises[envMap]=new Promise(function(resolve){utils.srcLoader.validateCubemapSrc(envMap,function loadEnvMap(urls){CubeLoader.load(urls,function(cube){self.isLoadingEnvMap=false;material.envMap=cube;utils.material.handleTextureEvents(self.el,cube);resolve(cube)})})})}});function getMaterialData(data){var newData={color:new THREE.Color(data.color),emissive:new THREE.Color(data.emissive),emissiveIntensity:data.emissiveIntensity,fog:data.fog,metalness:data.metalness,roughness:data.roughness,wireframe:data.wireframe,
wireframeLinewidth:data.wireframeLinewidth};if(data.normalMap){newData.normalScale=data.normalScale}if(data.ambientOcclusionMap){newData.aoMapIntensity=data.ambientOcclusionMapIntensity}if(data.displacementMap){newData.displacementScale=data.displacementScale;newData.displacementBias=data.displacementBias}return newData}},{"../core/shader":134,"../lib/three":173,"../utils/":196}],180:[function(_dereq_,module,exports){var css=".a-html{bottom:0;left:0;position:fixed;right:0;top:0}.a-body{height:100%;margin:0;overflow:hidden;padding:0;width:100%}:-webkit-full-screen{background-color:transparent}.a-hidden{display:none!important}.a-canvas{height:100%;left:0;position:absolute;top:0;width:100%}.a-canvas.a-grab-cursor:hover{cursor:grab;cursor:-moz-grab;cursor:-webkit-grab}.a-canvas.a-grab-cursor:active,.a-grabbing{cursor:grabbing;cursor:-moz-grabbing;cursor:-webkit-grabbing}// Class is removed when doing <a-scene embedded>. a-scene.fullscreen .a-canvas{width:100%!important;height:100%!important;top:0!important;left:0!important;right:0!important;bottom:0!important;z-index:999999!important;position:fixed!important}.a-inspector-loader{background-color:#ed3160;position:fixed;left:3px;top:3px;padding:6px 10px;color:#fff;text-decoration:none;font-size:12px;font-family:Roboto,sans-serif;text-align:center;z-index:99999;width:204px}@keyframes dots-1{from{opacity:0}25%{opacity:1}}@keyframes dots-2{from{opacity:0}50%{opacity:1}}@keyframes dots-3{from{opacity:0}75%{opacity:1}}@-webkit-keyframes dots-1{from{opacity:0}25%{opacity:1}}@-webkit-keyframes dots-2{from{opacity:0}50%{opacity:1}}@-webkit-keyframes dots-3{from{opacity:0}75%{opacity:1}}.a-inspector-loader .dots span{animation:dots-1 2s infinite steps(1);-webkit-animation:dots-1 2s infinite steps(1)}.a-inspector-loader .dots span:first-child+span{animation-name:dots-2;-webkit-animation-name:dots-2}.a-inspector-loader .dots span:first-child+span+span{animation-name:dots-3;-webkit-animation-name:dots-3}a-scene{display:block;position:relative;height:100%;width:100%}a-assets,a-scene audio,a-scene img,a-scene video{display:none}.a-enter-vr-modal,.a-orientation-modal{font-family:Consolas,Andale Mono,Courier New,monospace}.a-enter-vr-modal a{border-bottom:1px solid #fff;padding:2px 0;text-decoration:none;transition:.1s color ease-in}.a-enter-vr-modal a:hover{background-color:#fff;color:#111;padding:2px 4px;position:relative;left:-4px}.a-enter-vr{font-family:sans-serif,monospace;font-size:13px;width:100%;font-weight:200;line-height:16px;position:absolute;right:20px;bottom:20px}.a-enter-vr.embedded{right:5px;bottom:5px}.a-enter-vr-button,.a-enter-vr-modal,.a-enter-vr-modal a{color:#fff}.a-enter-vr-button{background:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20245.82%20141.73%22%3E%3Cdefs%3E%3Cstyle%3E.a%7Bfill%3A%23fff%3Bfill-rule%3Aevenodd%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Emask%3C%2Ftitle%3E%3Cpath%20class%3D%22a%22%20d%3D%22M175.56%2C111.37c-22.52%2C0-40.77-18.84-40.77-42.07S153%2C27.24%2C175.56%2C27.24s40.77%2C18.84%2C40.77%2C42.07S198.08%2C111.37%2C175.56%2C111.37ZM26.84%2C69.31c0-23.23%2C18.25-42.07%2C40.77-42.07s40.77%2C18.84%2C40.77%2C42.07-18.26%2C42.07-40.77%2C42.07S26.84%2C92.54%2C26.84%2C69.31ZM27.27%2C0C11.54%2C0%2C0%2C12.34%2C0%2C28.58V110.9c0%2C16.24%2C11.54%2C30.83%2C27.27%2C30.83H99.57c2.17%2C0%2C4.19-1.83%2C5.4-3.7L116.47%2C118a8%2C8%2C0%2C0%2C1%2C12.52-.18l11.51%2C20.34c1.2%2C1.86%2C3.22%2C3.61%2C5.39%2C3.61h72.29c15.74%2C0%2C27.63-14.6%2C27.63-30.83V28.58C245.82%2C12.34%2C233.93%2C0%2C218.19%2C0H27.27Z%22%2F%3E%3C%2Fsvg%3E) 50% 50%/70% 70% no-repeat rgba(0,0,0,.35);border:0;bottom:0;cursor:pointer;min-width:50px;min-height:30px;padding-right:5%;padding-top:4%;position:absolute;right:0;transition:background-color .05s ease;-webkit-transition:background-color .05s ease;z-index:9999}.a-enter-vr-button:active,.a-enter-vr-button:hover{background-color:#666}[data-a-enter-vr-no-webvr] .a-enter-vr-button{border-color:#666;opacity:.65}[data-a-enter-vr-no-webvr] .a-enter-vr-button:active,[data-a-enter-vr-no-webvr] .a-enter-vr-button:hover{background-color:rgba(0,0,0,.35);cursor:not-allowed}.a-enter-vr-modal{background-color:#666;border-radius:0;display:none;min-height:32px;margin-right:70px;padding:9px;width:280px;right:2%;position:absolute}.a-enter-vr-modal:after{border-bottom:10px solid transparent;border-left:10px solid #666;border-top:10px solid transparent;display:inline-block;content:'';position:absolute;right:-5px;top:5px;width:0;height:0}.a-enter-vr-modal a,.a-enter-vr-modal p{display:inline}.a-enter-vr-modal p{margin:0}.a-enter-vr-modal p:after{content:' '}[data-a-enter-vr-no-headset].a-enter-vr:hover .a-enter-vr-modal,[data-a-enter-vr-no-webvr].a-enter-vr:hover .a-enter-vr-modal{display:block}.a-orientation-modal{background:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%20version%3D%221.1%22%20x%3D%220px%22%20y%3D%220px%22%20viewBox%3D%220%200%2090%2090%22%20enable-background%3D%22new%200%200%2090%2090%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%220%2C0%200%2C0%200%2C0%20%22%3E%3C/polygon%3E%3Cg%3E%3Cpath%20d%3D%22M71.545%2C48.145h-31.98V20.743c0-2.627-2.138-4.765-4.765-4.765H18.456c-2.628%2C0-4.767%2C2.138-4.767%2C4.765v42.789%20%20%20c0%2C2.628%2C2.138%2C4.766%2C4.767%2C4.766h5.535v0.959c0%2C2.628%2C2.138%2C4.765%2C4.766%2C4.765h42.788c2.628%2C0%2C4.766-2.137%2C4.766-4.765V52.914%20%20%20C76.311%2C50.284%2C74.173%2C48.145%2C71.545%2C48.145z%20M18.455%2C16.935h16.344c2.1%2C0%2C3.808%2C1.708%2C3.808%2C3.808v27.401H37.25V22.636%20%20%20c0-0.264-0.215-0.478-0.479-0.478H16.482c-0.264%2C0-0.479%2C0.214-0.479%2C0.478v36.585c0%2C0.264%2C0.215%2C0.478%2C0.479%2C0.478h7.507v7.644%20%20%20h-5.534c-2.101%2C0-3.81-1.709-3.81-3.81V20.743C14.645%2C18.643%2C16.354%2C16.935%2C18.455%2C16.935z%20M16.96%2C23.116h19.331v25.031h-7.535%20%20%20c-2.628%2C0-4.766%2C2.139-4.766%2C4.768v5.828h-7.03V23.116z%20M71.545%2C73.064H28.757c-2.101%2C0-3.81-1.708-3.81-3.808V52.914%20%20%20c0-2.102%2C1.709-3.812%2C3.81-3.812h42.788c2.1%2C0%2C3.809%2C1.71%2C3.809%2C3.812v16.343C75.354%2C71.356%2C73.645%2C73.064%2C71.545%2C73.064z%22%3E%3C/path%3E%3Cpath%20d%3D%22M28.919%2C58.424c-1.466%2C0-2.659%2C1.193-2.659%2C2.66c0%2C1.466%2C1.193%2C2.658%2C2.659%2C2.658c1.468%2C0%2C2.662-1.192%2C2.662-2.658%20%20%20C31.581%2C59.617%2C30.387%2C58.424%2C28.919%2C58.424z%20M28.919%2C62.786c-0.939%2C0-1.703-0.764-1.703-1.702c0-0.939%2C0.764-1.704%2C1.703-1.704%20%20%20c0.94%2C0%2C1.705%2C0.765%2C1.705%2C1.704C30.623%2C62.022%2C29.858%2C62.786%2C28.919%2C62.786z%22%3E%3C/path%3E%3Cpath%20d%3D%22M69.654%2C50.461H33.069c-0.264%2C0-0.479%2C0.215-0.479%2C0.479v20.288c0%2C0.264%2C0.215%2C0.478%2C0.479%2C0.478h36.585%20%20%20c0.263%2C0%2C0.477-0.214%2C0.477-0.478V50.939C70.131%2C50.676%2C69.917%2C50.461%2C69.654%2C50.461z%20M69.174%2C51.417V70.75H33.548V51.417H69.174z%22%3E%3C/path%3E%3Cpath%20d%3D%22M45.201%2C30.296c6.651%2C0%2C12.233%2C5.351%2C12.551%2C11.977l-3.033-2.638c-0.193-0.165-0.507-0.142-0.675%2C0.048%20%20%20c-0.174%2C0.198-0.153%2C0.501%2C0.045%2C0.676l3.883%2C3.375c0.09%2C0.075%2C0.198%2C0.115%2C0.312%2C0.115c0.141%2C0%2C0.273-0.061%2C0.362-0.166%20%20%20l3.371-3.877c0.173-0.2%2C0.151-0.502-0.047-0.675c-0.194-0.166-0.508-0.144-0.676%2C0.048l-2.592%2C2.979%20%20%20c-0.18-3.417-1.629-6.605-4.099-9.001c-2.538-2.461-5.877-3.817-9.404-3.817c-0.264%2C0-0.479%2C0.215-0.479%2C0.479%20%20%20C44.72%2C30.083%2C44.936%2C30.296%2C45.201%2C30.296z%22%3E%3C/path%3E%3C/g%3E%3C/svg%3E) center/50% 50% no-repeat rgba(244,244,244,1);bottom:0;font-size:14px;font-weight:600;left:0;line-height:20px;right:0;position:fixed;top:0;z-index:9999999}.a-orientation-modal:after{color:#666;content:\"Insert phone into Cardboard holder.\";display:block;position:absolute;text-align:center;top:70%;transform:translateY(-70%);width:100%}.a-orientation-modal button{background:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%20version%3D%221.1%22%20x%3D%220px%22%20y%3D%220px%22%20viewBox%3D%220%200%20100%20100%22%20enable-background%3D%22new%200%200%20100%20100%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23000000%22%20d%3D%22M55.209%2C50l17.803-17.803c1.416-1.416%2C1.416-3.713%2C0-5.129c-1.416-1.417-3.713-1.417-5.129%2C0L50.08%2C44.872%20%20L32.278%2C27.069c-1.416-1.417-3.714-1.417-5.129%2C0c-1.417%2C1.416-1.417%2C3.713%2C0%2C5.129L44.951%2C50L27.149%2C67.803%20%20c-1.417%2C1.416-1.417%2C3.713%2C0%2C5.129c0.708%2C0.708%2C1.636%2C1.062%2C2.564%2C1.062c0.928%2C0%2C1.856-0.354%2C2.564-1.062L50.08%2C55.13l17.803%2C17.802%20%20c0.708%2C0.708%2C1.637%2C1.062%2C2.564%2C1.062s1.856-0.354%2C2.564-1.062c1.416-1.416%2C1.416-3.713%2C0-5.129L55.209%2C50z%22%3E%3C/path%3E%3C/svg%3E) no-repeat;border:none;height:50px;text-indent:-9999px;width:50px}";_dereq_("browserify-css").createStyle(css,{href:"src/style/aframe.css"});module.exports=css},{"browserify-css":5}],181:[function(_dereq_,module,exports){var css=".rs-base{background-color:#333;color:#fafafa;border-radius:0;font:10px monospace;left:5px;line-height:1em;opacity:.85;overflow:hidden;padding:10px;position:fixed;top:5px;width:300px;z-index:10000}.rs-base div.hidden{display:none}.rs-base h1{color:#fff;cursor:pointer;font-size:1.4em;font-weight:300;margin:0 0 5px;padding:0}.rs-group{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-direction:column-reverse;flex-direction:column-reverse;margin-bottom:5px}.rs-group:last-child{margin-bottom:0}.rs-counter-base{align-items:center;display:-webkit-box;display:-webkit-flex;display:flex;height:10px;-webkit-justify-content:space-between;justify-content:space-between;margin:2px 0}.rs-counter-base.alarm{color:#b70000;text-shadow:0 0 0 #b70000,0 0 1px #fff,0 0 1px #fff,0 0 2px #fff,0 0 2px #fff,0 0 3px #fff,0 0 3px #fff,0 0 4px #fff,0 0 4px #fff}.rs-counter-id{font-weight:300;-webkit-box-ordinal-group:0;-webkit-order:0;order:0;width:54px}.rs-counter-value{font-weight:300;-webkit-box-ordinal-group:1;-webkit-order:1;order:1;text-align:right;width:35px}.rs-canvas{-webkit-box-ordinal-group:2;-webkit-order:2;order:2}@media (min-width:480px){.rs-base{left:20px;top:20px}}";_dereq_("browserify-css").createStyle(css,{href:"src/style/rStats.css"});module.exports=css},{"browserify-css":5}],182:[function(_dereq_,module,exports){var bind=_dereq_("../utils/bind");var constants=_dereq_("../constants/");var registerSystem=_dereq_("../core/system").registerSystem;var DEFAULT_CAMERA_ATTR="data-aframe-default-camera";module.exports.System=registerSystem("camera",{init:function(){this.activeCameraEl=null;this.sceneEl.addEventListener("loaded",bind(this.setupDefaultCamera,this))},setupDefaultCamera:function(){var sceneEl=this.sceneEl;var defaultCameraEl;if(sceneEl.camera){sceneEl.emit("camera-ready",{cameraEl:sceneEl.camera.el});return}defaultCameraEl=document.createElement("a-entity");defaultCameraEl.setAttribute("position","0 0 0");defaultCameraEl.setAttribute(DEFAULT_CAMERA_ATTR,"");defaultCameraEl.setAttribute("camera",{active:true,userHeight:constants.DEFAULT_CAMERA_HEIGHT});defaultCameraEl.setAttribute("wasd-controls","");defaultCameraEl.setAttribute("look-controls","");defaultCameraEl.setAttribute(constants.AFRAME_INJECTED,"");sceneEl.appendChild(defaultCameraEl);sceneEl.addEventListener("enter-vr",this.removeDefaultOffset);sceneEl.addEventListener("exit-vr",this.addDefaultOffset);sceneEl.emit("camera-ready",{cameraEl:defaultCameraEl})},disableActiveCamera:function(){var cameraEls=this.sceneEl.querySelectorAll("[camera]");var newActiveCameraEl=cameraEls[cameraEls.length-1];newActiveCameraEl.setAttribute("camera","active",true)},setActiveCamera:function(newCameraEl){var cameraEl;var cameraEls;var i;var newCamera;var previousCamera=this.activeCameraEl;var sceneEl=this.sceneEl;newCamera=newCameraEl.getObject3D("camera");if(!newCamera||newCameraEl===this.activeCameraEl){return}var defaultCameraWrapper=sceneEl.querySelector("["+DEFAULT_CAMERA_ATTR+"]");var defaultCameraEl=defaultCameraWrapper&&defaultCameraWrapper.querySelector("[camera]");if(newCameraEl!==defaultCameraEl){removeDefaultCamera(sceneEl)}this.activeCameraEl=newCameraEl;this.activeCameraEl.play();sceneEl.camera=newCamera;if(previousCamera){previousCamera.setAttribute("camera","active",false)}cameraEls=sceneEl.querySelectorAll("[camera]");for(i=0;i<cameraEls.length;i++){cameraEl=cameraEls[i];if(newCameraEl===cameraEl){continue}cameraEl.setAttribute("camera","active",false);cameraEl.pause()}sceneEl.emit("camera-set-active",{cameraEl:newCameraEl})}});function removeDefaultCamera(sceneEl){var defaultCamera;var camera=sceneEl.camera;if(!camera){return}defaultCamera=sceneEl.querySelector("["+DEFAULT_CAMERA_ATTR+"]");if(!defaultCamera){return}sceneEl.removeChild(defaultCamera)}},{"../constants/":116,"../core/system":135,"../utils/bind":190}],183:[function(_dereq_,module,exports){var geometries=_dereq_("../core/geometry").geometries;var registerSystem=_dereq_("../core/system").registerSystem;var THREE=_dereq_("../lib/three");module.exports.System=registerSystem("geometry",{init:function(){this.cache={};this.cacheCount={}},clearCache:function(){this.cache={};this.cacheCount={}},getOrCreateGeometry:function(data){var cache=this.cache;var cachedGeometry;var hash;if(data.skipCache||data.mergeTo){return createGeometry(data)}hash=this.hash(data);cachedGeometry=cache[hash];incrementCacheCount(this.cacheCount,hash);if(cachedGeometry){return cachedGeometry}cachedGeometry=createGeometry(data);cache[hash]=cachedGeometry;return cachedGeometry},unuseGeometry:function(data){var cache=this.cache;var cacheCount=this.cacheCount;var geometry;var hash;if(data.skipCache||data.mergeTo){return}hash=this.hash(data);if(!cache[hash]){return}decrementCacheCount(cacheCount,hash);if(cacheCount[hash]>0){return}geometry=cache[hash];geometry.dispose();delete cache[hash];delete cacheCount[hash]},hash:function(data){return JSON.stringify(data)}});function createGeometry(data){var geometryType=data.primitive;var GeometryClass=geometries[geometryType]&&geometries[geometryType].Geometry;var geometryInstance=new GeometryClass;if(!GeometryClass){throw new Error("Unknown geometry `"+geometryType+"`")}geometryInstance.init(data);return toBufferGeometry(geometryInstance.geometry,data.buffer)}function decrementCacheCount(cacheCount,hash){cacheCount[hash]--}function incrementCacheCount(cacheCount,hash){cacheCount[hash]=cacheCount[hash]===undefined?1:cacheCount[hash]+1}function toBufferGeometry(geometry,doBuffer){var bufferGeometry;if(!doBuffer){return geometry}bufferGeometry=(new THREE.BufferGeometry).fromGeometry(geometry);bufferGeometry.metadata={type:geometry.type,parameters:geometry.parameters||{}};geometry.dispose();return bufferGeometry}},{"../core/geometry":126,"../core/system":135,"../lib/three":173}],184:[function(_dereq_,module,exports){var registerSystem=_dereq_("../core/system").registerSystem;var THREE=_dereq_("../lib/three");module.exports.System=registerSystem("gltf-model",{init:function(){this.models=[]},tick:function(){var sceneEl=this.sceneEl;if(sceneEl.hasLoaded&&this.models.length){THREE.GLTFLoader.Shaders.update(sceneEl.object3D,sceneEl.camera)}},registerModel:function(gltf){this.models.push(gltf)},unregisterModel:function(gltf){var models=this.models;var index=models.indexOf(gltf);if(index>=0){models.splice(index,1)}}})},{"../core/system":135,"../lib/three":173}],185:[function(_dereq_,module,exports){_dereq_("./camera");_dereq_("./geometry");_dereq_("./gltf-model");_dereq_("./light");_dereq_("./material");_dereq_("./shadow");_dereq_("./tracked-controls")},{"./camera":182,"./geometry":183,"./gltf-model":184,"./light":186,"./material":187,"./shadow":188,"./tracked-controls":189}],186:[function(_dereq_,module,exports){var registerSystem=_dereq_("../core/system").registerSystem;var bind=_dereq_("../utils/bind");var constants=_dereq_("../constants/");var DEFAULT_LIGHT_ATTR="data-aframe-default-light";module.exports.System=registerSystem("light",{schema:{defaultLightsEnabled:{"default":true}},init:function(){this.defaultLights=false;this.userDefinedLights=false;this.sceneEl.addEventListener("loaded",bind(this.setupDefaultLights,this))},registerLight:function(el){if(!el.hasAttribute(DEFAULT_LIGHT_ATTR)){this.removeDefaultLights();this.userDefinedLights=true}},removeDefaultLights:function(){var defaultLights;var sceneEl=this.sceneEl;if(!this.defaultLights){return}defaultLights=document.querySelectorAll("["+DEFAULT_LIGHT_ATTR+"]");for(var i=0;i<defaultLights.length;i++){sceneEl.removeChild(defaultLights[i])}this.defaultLights=false},setupDefaultLights:function(){var sceneEl=this.sceneEl;var ambientLight;var directionalLight;if(this.userDefinedLights||this.defaultLights||!this.data.defaultLightsEnabled){return}ambientLight=document.createElement("a-entity");ambientLight.setAttribute("light",{color:"#BBB",type:"ambient"});ambientLight.setAttribute(DEFAULT_LIGHT_ATTR,"");ambientLight.setAttribute(constants.AFRAME_INJECTED,"");sceneEl.appendChild(ambientLight);directionalLight=document.createElement("a-entity");directionalLight.setAttribute("light",{color:"#FFF",intensity:.6,castShadow:true});directionalLight.setAttribute("position",{x:-.5,y:1,z:1});directionalLight.setAttribute(DEFAULT_LIGHT_ATTR,"");directionalLight.setAttribute(constants.AFRAME_INJECTED,"");sceneEl.appendChild(directionalLight);this.defaultLights=true}})},{"../constants/":116,"../core/system":135,"../utils/bind":190}],187:[function(_dereq_,module,exports){var registerSystem=_dereq_("../core/system").registerSystem;var THREE=_dereq_("../lib/three");var utils=_dereq_("../utils/");var isHLS=_dereq_("../utils/material").isHLS;var bind=utils.bind;var debug=utils.debug;var error=debug("components:texture:error");var TextureLoader=new THREE.TextureLoader;var warn=debug("components:texture:warn");TextureLoader.setCrossOrigin("anonymous");module.exports.System=registerSystem("material",{init:function(){this.materials={};this.textureCounts={};this.textureCache={};this.sceneEl.addEventListener("materialtextureloaded",bind(this.onMaterialTextureLoaded,this))},clearTextureCache:function(){this.textureCache={}},loadTexture:function(src,data,cb){var self=this;if(src.tagName==="CANVAS"){this.loadCanvas(src,data,cb);return}if(src.tagName==="VIDEO"){if(!src.hasAttribute("src")&&!src.hasAttribute("srcObject")){warn("Video element was defined without `src` nor `srcObject` attributes.")}this.loadVideo(src,data,cb);return}utils.srcLoader.validateSrc(src,loadImageCb,loadVideoCb);function loadImageCb(src){self.loadImage(src,data,cb)}function loadVideoCb(src){self.loadVideo(src,data,cb)}},loadImage:function(src,data,handleImageTextureLoaded){var hash=this.hash(data);var textureCache=this.textureCache;if(textureCache[hash]){textureCache[hash].then(handleImageTextureLoaded);return}textureCache[hash]=loadImageTexture(src,data);textureCache[hash].then(handleImageTextureLoaded)},loadCanvas:function(src,data,cb){src.readyState=2;src.HAVE_CURRENT_DATA=2;this.loadVideo(src,data,cb)},loadVideo:function(src,data,cb){var hash;var texture;var textureCache=this.textureCache;var videoEl;var videoTextureResult;function handleVideoTextureLoaded(result){result.texture.needsUpdate=true;cb(result.texture,result.videoEl)}if(typeof src!=="string"){videoEl=src;hash=this.hashVideo(data,videoEl);if(textureCache[hash]){textureCache[hash].then(handleVideoTextureLoaded);return}fixVideoAttributes(videoEl)}videoEl=videoEl||createVideoEl(src,data.width,data.height);hash=this.hashVideo(data,videoEl);if(textureCache[hash]){textureCache[hash].then(handleVideoTextureLoaded);return}texture=new THREE.VideoTexture(videoEl);texture.minFilter=THREE.LinearFilter;setTextureProperties(texture,data);if(this.sceneEl.isIOS&&isHLS(videoEl.src||videoEl.getAttribute("src"),videoEl.type||videoEl.getAttribute("type"))){texture.format=THREE.RGBAFormat;texture.needsCorrectionBGRA=true;texture.flipY=false;texture.needsCorrectionFlipY=true}videoTextureResult={texture:texture,videoEl:videoEl};textureCache[hash]=Promise.resolve(videoTextureResult);handleVideoTextureLoaded(videoTextureResult)},hash:function(data){if(data.src.tagName){data=utils.extendDeep({},data);data.src=data.src.getAttribute("src")}return JSON.stringify(data)},hashVideo:function(data,videoEl){return calculateVideoCacheHash(data,videoEl)},registerMaterial:function(material){this.materials[material.uuid]=material},unregisterMaterial:function(material){delete this.materials[material.uuid];var textureCounts=this.textureCounts;Object.keys(material).filter(function(propName){return material[propName]&&material[propName].isTexture}).forEach(function(mapName){textureCounts[material[mapName].uuid]--;if(textureCounts[material[mapName].uuid]<=0){material[mapName].dispose()}})},updateMaterials:function(material){var materials=this.materials;Object.keys(materials).forEach(function(uuid){materials[uuid].needsUpdate=true})},onMaterialTextureLoaded:function(e){if(!this.textureCounts[e.detail.texture.uuid]){this.textureCounts[e.detail.texture.uuid]=0}this.textureCounts[e.detail.texture.uuid]++}});function calculateVideoCacheHash(data,videoEl){var i;var id=videoEl.getAttribute("id");var hash;var videoAttributes;if(id){return id}hash="";videoAttributes=data||{};for(i=0;i<videoEl.attributes.length;i++){videoAttributes[videoEl.attributes[i].name]=videoEl.attributes[i].value}Object.keys(videoAttributes).sort().forEach(function(name){hash+=name+":"+videoAttributes[name]+";"});return hash}function loadImageTexture(src,data){return new Promise(doLoadImageTexture);function doLoadImageTexture(resolve,reject){var isEl=typeof src!=="string";function resolveTexture(texture){setTextureProperties(texture,data);texture.needsUpdate=true;resolve(texture)}if(isEl){resolveTexture(new THREE.Texture(src));return}TextureLoader.load(src,resolveTexture,function(){},function(xhr){error("`$s` could not be fetched (Error code: %s; Response: %s)",xhr.status,xhr.statusText)})}}function setTextureProperties(texture,data){var offset=data.offset||{x:0,y:0};var repeat=data.repeat||{x:1,y:1};var npot=data.npot||false;if(npot){texture.wrapS=THREE.ClampToEdgeWrapping;texture.wrapT=THREE.ClampToEdgeWrapping;texture.magFilter=THREE.LinearFilter;texture.minFilter=THREE.LinearFilter}if(repeat.x!==1||repeat.y!==1){texture.wrapS=THREE.RepeatWrapping;texture.wrapT=THREE.RepeatWrapping;texture.repeat.set(repeat.x,repeat.y)}if(offset.x!==0||offset.y!==0){texture.offset.set(offset.x,offset.y)}}function createVideoEl(src,width,height){var videoEl=document.createElement("video");videoEl.width=width;videoEl.height=height;videoEl.setAttribute("playsinline","");videoEl.setAttribute("webkit-playsinline","");videoEl.autoplay=true;videoEl.loop=true;videoEl.crossOrigin="anonymous";videoEl.addEventListener("error",function(){warn("`$s` is not a valid video",src)},true);videoEl.src=src;return videoEl}function fixVideoAttributes(videoEl){videoEl.autoplay=videoEl.hasAttribute("autoplay")&&videoEl.getAttribute("autoplay")!=="false";videoEl.controls=videoEl.hasAttribute("controls")&&videoEl.getAttribute("controls")!=="false";if(videoEl.getAttribute("loop")==="false"){videoEl.removeAttribute("loop")}if(videoEl.getAttribute("preload")==="false"){videoEl.preload="none"}videoEl.crossOrigin=videoEl.crossOrigin||"anonymous";videoEl.setAttribute("playsinline","");videoEl.setAttribute("webkit-playsinline","");return videoEl}},{"../core/system":135,"../lib/three":173,"../utils/":196,"../utils/material":197}],188:[function(_dereq_,module,exports){var registerSystem=_dereq_("../core/system").registerSystem;var bind=_dereq_("../utils/bind");var THREE=_dereq_("../lib/three");var SHADOW_MAP_TYPE_MAP={basic:THREE.BasicShadowMap,pcf:THREE.PCFShadowMap,pcfsoft:THREE.PCFSoftShadowMap};module.exports.System=registerSystem("shadow",{schema:{type:{"default":"pcf",oneOf:["basic","pcf","pcfsoft"]},renderReverseSided:{"default":true},renderSingleSided:{"default":true}},init:function(){var sceneEl=this.sceneEl;var data=this.data;this.shadowMapEnabled=false;sceneEl.addEventListener("render-target-loaded",bind(function(){if(!sceneEl.renderer){return}sceneEl.renderer.shadowMap.type=SHADOW_MAP_TYPE_MAP[data.type];sceneEl.renderer.shadowMap.renderReverseSided=data.renderReverseSided;sceneEl.renderer.shadowMap.renderSingleSided=data.renderSingleSided;this.setShadowMapEnabled(this.shadowMapEnabled)},this))},setShadowMapEnabled:function(enabled){var renderer=this.sceneEl.renderer;this.shadowMapEnabled=enabled;if(renderer){renderer.shadowMap.enabled=enabled}}})},{"../core/system":135,"../lib/three":173,"../utils/bind":190}],189:[function(_dereq_,module,exports){var registerSystem=_dereq_("../core/system").registerSystem;var trackedControlsUtils=_dereq_("../utils/tracked-controls");var utils=_dereq_("../utils");module.exports.System=registerSystem("tracked-controls",{init:function(){var self=this;this.controllers=[];this.lastControllersUpdate=0;this.tick=utils.throttle(this.throttledTick,10,this);if(!navigator.getVRDisplays){return}this.sceneEl.addEventListener("enter-vr",function(){navigator.getVRDisplays().then(function(displays){if(displays.length){self.vrDisplay=displays[0]}})})},updateControllerList:function(){var controllers=this.controllers=[];var gamepads=trackedControlsUtils.getGamepadsByPrefix("");for(var i=0;i<gamepads.length;i++){var gamepad=gamepads[i];if(gamepad&&gamepad.pose){controllers.push(gamepad)}}},throttledTick:function(){this.updateControllerList();this.sceneEl.emit("controllersupdated",{controllers:this.controllers})}})},{"../core/system":135,"../utils":196,"../utils/tracked-controls":200}],190:[function(_dereq_,module,exports){module.exports=function bind(fn,ctx){return function(prependedArgs){return function bound(){var args=prependedArgs.concat(Array.prototype.slice.call(arguments,0));return fn.apply(ctx,args)}}(Array.prototype.slice.call(arguments,2))}},{}],191:[function(_dereq_,module,exports){var debug=_dereq_("./debug");var extend=_dereq_("object-assign");var warn=debug("utils:coordinates:warn");var regex=/^\s*((-?\d*\.{0,1}\d+(e-?\d+)?)\s+){2,3}(-?\d*\.{0,1}\d+(e-?\d+)?)\s*$/;module.exports.regex=regex;function parse(value,defaultVec){var coordinate;var vec={};if(value&&typeof value==="object"){return vecParseFloat({x:value.x!==undefined?value.x:defaultVec&&defaultVec.x,y:value.y!==undefined?value.y:defaultVec&&defaultVec.y,z:value.z!==undefined?value.z:defaultVec&&defaultVec.z,w:value.w!==undefined?value.w:defaultVec&&defaultVec.w})}if(typeof value!=="string"||value===null){return typeof defaultVec==="object"?extend({},defaultVec):defaultVec}coordinate=value.trim().replace(/\s+/g," ").split(" ");vec.x=coordinate[0]||defaultVec&&defaultVec.x;vec.y=coordinate[1]||defaultVec&&defaultVec.y;vec.z=coordinate[2]||defaultVec&&defaultVec.z;vec.w=coordinate[3]||defaultVec&&defaultVec.w;return vecParseFloat(vec)}module.exports.parse=parse;function stringify(data){if(typeof data!=="object"){return data}return[data.x,data.y,data.z,data.w].join(" ").trim()}module.exports.stringify=stringify;function isCoordinates(value){return regex.test(value)}module.exports.isCoordinates=isCoordinates;module.exports.isCoordinate=function(value){warn("`AFRAME.utils.isCoordinate` has been renamed to `AFRAME.utils.isCoordinates`");return isCoordinates(value)};function vecParseFloat(vec){Object.keys(vec).forEach(function(key){if(vec[key]===undefined){delete vec[key];return}vec[key]=parseFloat(vec[key],10)});return vec}module.exports.toVector3=function(vec3){return new THREE.Vector3(vec3.x,vec3.y,vec3.z)}},{"./debug":192,"object-assign":26}],192:[function(_dereq_,module,exports){(function(process){var debugLib=_dereq_("debug");var extend=_dereq_("object-assign");var settings={colors:{debug:"gray",error:"red",info:"gray",warn:"orange"}};var debug=function(namespace){var d=debugLib(namespace);d.color=getDebugNamespaceColor(namespace);return d};extend(debug,debugLib);function getDebugNamespaceType(namespace){var chunks=namespace.split(":");return chunks[chunks.length-1]}function getDebugNamespaceColor(namespace){var type=getDebugNamespaceType(namespace);var color=settings.colors&&settings.colors[type];return color||null}function storage(){try{return window.localStorage}catch(e){}}var ls=storage();if(ls&&(parseInt(ls.logs,10)||ls.logs==="true")){debug.enable("*")}else{debug.enable("*:error,*:info,*:warn")}if(process.browser){window.logs=debug}module.exports=debug}).call(this,_dereq_("_process"))},{_process:6,debug:10,"object-assign":26}],193:[function(_dereq_,module,exports){(function(process){var THREE=_dereq_("../lib/three");var dolly=new THREE.Object3D;var controls=new THREE.VRControls(dolly);function checkHeadsetConnected(){var orientation;var vrDisplay=controls.getVRDisplay();if(vrDisplay&&"isConnected"in vrDisplay){return vrDisplay.isConnected}controls.update();orientation=dolly.quaternion;if(orientation._x!==0||orientation._y!==0||orientation._z!==0){return true}return false}module.exports.checkHeadsetConnected=checkHeadsetConnected;function checkHasPositionalTracking(){var vrDisplay=controls.getVRDisplay();if(isMobile()||isGearVR()){return false}return vrDisplay&&vrDisplay.capabilities.hasPosition}module.exports.checkHasPositionalTracking=checkHasPositionalTracking;var isMobile=function(){var _isMobile=false;(function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))){_isMobile=true}if(isIOS()||isTablet()){_isMobile=true}})(window.navigator.userAgent||window.navigator.vendor||window.opera);return function(){return _isMobile}}();module.exports.isMobile=isMobile;function isTablet(mockUserAgent){var userAgent=mockUserAgent||window.navigator.userAgent;return/ipad|Nexus (7|9)|xoom|sch-i800|playbook|tablet|kindle/i.test(userAgent)}module.exports.isTablet=isTablet;function isIOS(){return/iPad|iPhone|iPod/.test(window.navigator.platform)}module.exports.isIOS=isIOS;function isGearVR(){return/SamsungBrowser.+Mobile VR/i.test(window.navigator.userAgent)}module.exports.isGearVR=isGearVR;module.exports.isLandscape=function(){return window.orientation===90||window.orientation===-90;
};module.exports.isIOSOlderThan10=function(userAgent){return/(iphone|ipod|ipad).*os.(7|8|9)/i.test(userAgent)};module.exports.isBrowserEnvironment=!!(!process||process.browser);module.exports.isNodeEnvironment=!module.exports.isBrowserEnvironment}).call(this,_dereq_("_process"))},{"../lib/three":173,_process:6}],194:[function(_dereq_,module,exports){module.exports.getComponentPropertyPath=function(str,delimiter){delimiter=delimiter||".";if(str.indexOf(delimiter)===-1){return str}return str.split(delimiter)};module.exports.getComponentProperty=function(el,name,delimiter){var splitName;delimiter=delimiter||".";if(name.indexOf(delimiter)!==-1){splitName=name.split(delimiter);return el.getAttribute(splitName[0])[splitName[1]]}return el.getAttribute(name)};module.exports.setComponentProperty=function(el,name,value,delimiter){var data={};var splitName;delimiter=delimiter||".";if(name.indexOf(delimiter)!==-1){splitName=name.split(delimiter);data[splitName[1]]=value;el.setAttribute(splitName[0],data);return}el.setAttribute(name,value)}},{}],195:[function(_dereq_,module,exports){module.exports=function forceCanvasResizeSafariMobile(canvasEl){var width=canvasEl.style.width;var height=canvasEl.style.height;canvasEl.style.width=parseInt(width,10)+1+"px";canvasEl.style.height=parseInt(height,10)+1+"px";setTimeout(function(){canvasEl.style.width=width;canvasEl.style.height=height},200)}},{}],196:[function(_dereq_,module,exports){var debug=_dereq_("./debug");var deepAssign=_dereq_("deep-assign");var device=_dereq_("./device");var objectAssign=_dereq_("object-assign");var warn=debug("utils:warn");module.exports.bind=_dereq_("./bind");module.exports.coordinates=_dereq_("./coordinates");module.exports.debug=debug;module.exports.device=device;module.exports.entity=_dereq_("./entity");module.exports.forceCanvasResizeSafariMobile=_dereq_("./forceCanvasResizeSafariMobile");module.exports.material=_dereq_("./material");module.exports.styleParser=_dereq_("./styleParser");module.exports.trackedControls=_dereq_("./tracked-controls");module.exports.checkHeadsetConnected=function(){warn("`utils.checkHeadsetConnected` has moved to `utils.device.checkHeadsetConnected`");return device.checkHeadsetConnected(arguments)};module.exports.isGearVR=function(){warn("`utils.isGearVR` has moved to `utils.device.isGearVR`");return device.isGearVR(arguments)};module.exports.isIOS=function(){warn("`utils.isIOS` has moved to `utils.device.isIOS`");return device.isIOS(arguments)};module.exports.isMobile=function(){warn("`utils.isMobile has moved to `utils.device.isMobile`");return device.isMobile(arguments)};module.exports.throttle=function(functionToThrottle,minimumInterval,optionalContext){var lastTime;if(optionalContext){functionToThrottle=module.exports.bind(functionToThrottle,optionalContext)}return function(){var time=Date.now();var sinceLastTime=typeof lastTime==="undefined"?minimumInterval:time-lastTime;if(typeof lastTime==="undefined"||sinceLastTime>=minimumInterval){lastTime=time;functionToThrottle.apply(null,arguments)}}};module.exports.throttleTick=function(functionToThrottle,minimumInterval,optionalContext){var lastTime;if(optionalContext){functionToThrottle=module.exports.bind(functionToThrottle,optionalContext)}return function(time,delta){var sinceLastTime=typeof lastTime==="undefined"?delta:time-lastTime;if(typeof lastTime==="undefined"||sinceLastTime>=minimumInterval){lastTime=time;functionToThrottle(time,sinceLastTime)}}};module.exports.fireEvent=function(el,name,data){data=data||{};data.detail=data.detail||{};data.detail.target=data.detail.target||el;var evt=new CustomEvent(name,data);el.dispatchEvent(evt)};module.exports.extend=objectAssign;module.exports.extendDeep=deepAssign;module.exports.clone=function(obj){return JSON.parse(JSON.stringify(obj))};function deepEqual(a,b){var i;var keysA;var keysB;var valA;var valB;if(a===undefined||b===undefined||a===null||b===null||!(a&&b&&(a.constructor===Object&&b.constructor===Object)||a.constructor===Array&&b.constructor===Array)){return a===b}keysA=Object.keys(a);keysB=Object.keys(b);if(keysA.length!==keysB.length){return false}for(i=0;i<keysA.length;++i){valA=a[keysA[i]];valB=b[keysA[i]];if(typeof valA==="object"||typeof valB==="object"||Array.isArray(valA)&&Array.isArray(valB)){if(valA===valB){continue}if(!deepEqual(valA,valB)){return false}}else if(valA!==valB){return false}}return true}module.exports.deepEqual=deepEqual;module.exports.diff=function(a,b){var diff={};var keys=Object.keys(a);if(!b){return diff}Object.keys(b).forEach(function collectKeys(bKey){if(keys.indexOf(bKey)===-1){keys.push(bKey)}});keys.forEach(function doDiff(key){var aVal=a[key];var bVal=b[key];var isComparingObjects=aVal&&bVal&&aVal.constructor===Object&&bVal.constructor===Object;if(isComparingObjects&&!deepEqual(aVal,bVal)||!isComparingObjects&&aVal!==bVal){diff[key]=bVal}});return diff};module.exports.shouldCaptureKeyEvent=function(event){if(event.metaKey){return false}return document.activeElement===document.body};module.exports.splitString=function(str,delimiter){if(typeof delimiter==="undefined"){delimiter=" "}var regex=new RegExp(delimiter,"g");str=(str||"").replace(regex,delimiter);return str.split(delimiter)};module.exports.getElData=function(el,defaults){defaults=defaults||{};var data={};Object.keys(defaults).forEach(copyAttribute);function copyAttribute(key){if(el.hasAttribute(key)){data[key]=el.getAttribute(key)}}return data};module.exports.getUrlParameter=function(name){name=name.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var regex=new RegExp("[\\?&]"+name+"=([^&#]*)");var results=regex.exec(location.search);return results===null?"":decodeURIComponent(results[1].replace(/\+/g," "))};module.exports.isIframed=function(){return window.top!==window.self};module.exports.findAllScenes=function(el){var matchingElements=[];var allElements=el.getElementsByTagName("*");for(var i=0,n=allElements.length;i<n;i++){if(allElements[i].isScene){matchingElements.push(allElements[i])}}return matchingElements};module.exports.srcLoader=_dereq_("./src-loader")},{"./bind":190,"./coordinates":191,"./debug":192,"./device":193,"./entity":194,"./forceCanvasResizeSafariMobile":195,"./material":197,"./src-loader":198,"./styleParser":199,"./tracked-controls":200,"deep-assign":12,"object-assign":26}],197:[function(_dereq_,module,exports){var THREE=_dereq_("../lib/three");var HLS_MIMETYPES=["application/x-mpegurl","application/vnd.apple.mpegurl"];module.exports.updateMapMaterialFromData=function(materialName,dataName,shader,data){var el=shader.el;var material=shader.material;var src=data[dataName];if(!shader.materialSrcs){shader.materialSrcs={}}if(!src){delete shader.materialSrcs[materialName];setMap(null);return}if(src===shader.materialSrcs[materialName]){return}shader.materialSrcs[materialName]=src;if(src instanceof THREE.Texture){setMap(src)}else{el.sceneEl.systems.material.loadTexture(src,{src:src,repeat:data.repeat,offset:data.offset,npot:data.npot},checkSetMap)}function checkSetMap(texture){if(shader.materialSrcs[materialName]!==src){return}setMap(texture)}function setMap(texture){material[materialName]=texture;material.needsUpdate=true;handleTextureEvents(el,texture)}};module.exports.updateMap=function(shader,data){return module.exports.updateMapMaterialFromData("map","src",shader,data)};module.exports.updateDistortionMap=function(longType,shader,data){var shortType=longType;if(longType==="ambientOcclusion"){shortType="ao"}var el=shader.el;var material=shader.material;var src=data[longType+"Map"];var info={};info.src=src;info.offset=data[longType+"TextureOffset"];info.repeat=data[longType+"TextureRepeat"];info.wrap=data[longType+"TextureWrap"];if(src){if(src===shader[longType+"TextureSrc"]){return}shader[longType+"TextureSrc"]=src;el.sceneEl.systems.material.loadTexture(src,info,setMap);return}if(!material.map){return}setMap(null);function setMap(texture){material[shortType+"Map"]=texture;material.needsUpdate=true;handleTextureEvents(el,texture)}};function handleTextureEvents(el,texture){if(!texture){return}el.emit("materialtextureloaded",{src:texture.image,texture:texture});if(!texture.image||texture.image.tagName!=="VIDEO"){return}texture.image.addEventListener("loadeddata",function emitVideoTextureLoadedDataAll(){if(!el.components||!el.components.material){return}if(texture.needsCorrectionBGRA&&texture.needsCorrectionFlipY&&["standard","flat"].indexOf(el.components.material.data.shader)!==-1){el.setAttribute("material","shader","ios10hls")}el.emit("materialvideoloadeddata",{src:texture.image,texture:texture})});texture.image.addEventListener("ended",function emitVideoTextureEndedAll(){el.emit("materialvideoended",{src:texture.image,texture:texture})})}module.exports.handleTextureEvents=handleTextureEvents;module.exports.isHLS=function(src,type){if(type&&HLS_MIMETYPES.includes(type.toLowerCase())){return true}if(src&&src.toLowerCase().indexOf(".m3u8")>0){return true}return false}},{"../lib/three":173}],198:[function(_dereq_,module,exports){var debug=_dereq_("./debug");var warn=debug("utils:src-loader:warn");function validateSrc(src,isImageCb,isVideoCb){checkIsImage(src,function isAnImageUrl(isImage){if(isImage){isImageCb(src);return}isVideoCb(src)})}function validateCubemapSrc(src,cb){var aCubemap;var cubemapSrcRegex="";var i;var urls;var validatedUrls=[];for(i=0;i<5;i++){cubemapSrcRegex+="(url\\((?:[^\\)]+)\\),\\s*)"}cubemapSrcRegex+="(url\\((?:[^\\)]+)\\)\\s*)";urls=src.match(new RegExp(cubemapSrcRegex));function isImageCb(url){validatedUrls.push(url);if(validatedUrls.length===6){cb(validatedUrls)}}if(urls){for(i=1;i<7;i++){validateSrc(parseUrl(urls[i]),isImageCb)}return}aCubemap=validateAndGetQuerySelector(src);if(!aCubemap){return}if(aCubemap.tagName==="A-CUBEMAP"&&aCubemap.srcs){return cb(aCubemap.srcs)}warn('Selector "%s" does not point to <a-cubemap>',src)}function parseUrl(src){var parsedSrc=src.match(/\url\((.+)\)/);if(!parsedSrc){return}return parsedSrc[1]}function checkIsImage(src,onResult){if(src.tagName){onResult(src.tagName==="IMG");return}var tester=new Image;tester.addEventListener("load",onLoad);function onLoad(){onResult(true)}tester.addEventListener("error",onError);function onError(){onResult(false)}tester.src=src}function validateAndGetQuerySelector(selector){try{var el=document.querySelector(selector);if(!el){warn('No element was found matching the selector: "%s"',selector)}return el}catch(e){warn('"%s" is not a valid selector',selector);return undefined}}module.exports={parseUrl:parseUrl,validateSrc:validateSrc,validateCubemapSrc:validateCubemapSrc}},{"./debug":192}],199:[function(_dereq_,module,exports){var styleParser=_dereq_("style-attr");module.exports.parse=function(value){var parsedData;if(typeof value!=="string"){return value}parsedData=styleParser.parse(value);if(parsedData[""]){return value}return transformKeysToCamelCase(parsedData)};module.exports.stringify=function(data){if(typeof data==="string"){return data}return styleParser.stringify(data)};function toCamelCase(str){return str.replace(/-([a-z])/g,camelCase);function camelCase(g){return g[1].toUpperCase()}}module.exports.toCamelCase=toCamelCase;function transformKeysToCamelCase(obj){var keys=Object.keys(obj);var camelCaseObj={};keys.forEach(function(key){var camelCaseKey=toCamelCase(key);camelCaseObj[camelCaseKey]=obj[key]});return camelCaseObj}module.exports.transformKeysToCamelCase=transformKeysToCamelCase},{"style-attr":36}],200:[function(_dereq_,module,exports){var DEFAULT_HANDEDNESS=_dereq_("../constants").DEFAULT_HANDEDNESS;var AXIS_LABELS=["x","y","z","w"];module.exports.getGamepadsByPrefix=function(idPrefix){var gamepadsList=[];var gamepad;var gamepads=navigator.getGamepads&&navigator.getGamepads();if(!gamepads){return gamepadsList}for(var i=0;i<gamepads.length;++i){gamepad=gamepads[i];if(gamepad){if(!idPrefix||gamepad.id.indexOf(idPrefix)===0){gamepadsList.push(gamepad)}}}return gamepadsList};module.exports.checkControllerPresentAndSetup=function(component,idPrefix,queryObject){var el=component.el;var isPresent=isControllerPresent(component,idPrefix,queryObject);if(component.controllerPresent&&!component.controllerEventsActive){component.addEventListeners()}if(isPresent===component.controllerPresent){return isPresent}component.controllerPresent=isPresent;if(isPresent){component.injectTrackedControls();component.addEventListeners();el.emit("controllerconnected",{name:component.name,component:component})}else{component.removeEventListeners();el.emit("controllerdisconnected",{name:component.name,component:component})}};function isControllerPresent(component,idPrefix,queryObject){var isPresent=false;var index=0;var gamepad;var isPrefixMatch;var gamepads;var sceneEl=component.el.sceneEl;var trackedControlsSystem=sceneEl&&sceneEl.systems["tracked-controls"];if(!trackedControlsSystem){return isPresent}gamepads=trackedControlsSystem.controllers;if(!gamepads||gamepads.length===0){trackedControlsSystem.updateControllerList();gamepads=trackedControlsSystem.controllers}if(!gamepads){return isPresent}for(var i=0;i<gamepads.length;++i){gamepad=gamepads[i];isPrefixMatch=!idPrefix||idPrefix===""||gamepad.id.indexOf(idPrefix)===0;isPresent=isPrefixMatch;if(isPresent&&queryObject.hand){isPresent=(gamepad.hand||DEFAULT_HANDEDNESS)===queryObject.hand}if(isPresent&&queryObject.index){isPresent=index===queryObject.index}if(isPresent){break}if(isPrefixMatch){index++}}return isPresent}module.exports.isControllerPresent=isControllerPresent;module.exports.emitIfAxesChanged=function(self,axesMapping,evt){Object.keys(axesMapping).forEach(function(key){var axes=axesMapping[key];var changed=evt.detail.changed;if(axes.reduce(function(b,axis){return b||changed[axis]},!changed)){var detail={};axes.forEach(function(axis){detail[AXIS_LABELS[axis]]=evt.detail.axis[axis]});self.el.emit(key+"moved",detail)}})}},{"../constants":116}],201:[function(_dereq_,module,exports){THREE.VRControls=function(object,onError){var scope=this;var vrDisplay,vrDisplays;var standingMatrix=new THREE.Matrix4;var frameData=null;if("VRFrameData"in window){frameData=new window.VRFrameData}function gotVRDisplays(displays){vrDisplays=displays;if(displays.length>0){vrDisplay=displays[0]}else{if(onError)onError("VR input not available.")}}if(navigator.getVRDisplays){navigator.getVRDisplays().then(gotVRDisplays).catch(function(){console.warn("THREE.VRControls: Unable to get VR Displays")})}this.scale=1;this.standing=false;this.userHeight=1.6;this.getVRDisplay=function(){return vrDisplay};this.setVRDisplay=function(value){vrDisplay=value};this.getVRDisplays=function(){console.warn("THREE.VRControls: getVRDisplays() is being deprecated.");return vrDisplays};this.getStandingMatrix=function(){return standingMatrix};this.update=function(){if(vrDisplay){var pose;if(vrDisplay.getFrameData){vrDisplay.getFrameData(frameData);pose=frameData.pose}else if(vrDisplay.getPose){pose=vrDisplay.getPose()}if(pose.orientation!==null){object.quaternion.fromArray(pose.orientation)}if(pose.position!==null){object.position.fromArray(pose.position)}else{object.position.set(0,0,0)}if(this.standing){if(vrDisplay.stageParameters){object.updateMatrix();standingMatrix.fromArray(vrDisplay.stageParameters.sittingToStandingTransform);object.applyMatrix(standingMatrix)}else{object.position.setY(object.position.y+this.userHeight)}}object.position.multiplyScalar(scope.scale)}};this.resetPose=function(){if(vrDisplay){vrDisplay.resetPose()}};this.resetSensor=function(){console.warn("THREE.VRControls: .resetSensor() is now .resetPose().");this.resetPose()};this.zeroSensor=function(){console.warn("THREE.VRControls: .zeroSensor() is now .resetPose().");this.resetPose()};this.dispose=function(){vrDisplay=null}}},{}],202:[function(_dereq_,module,exports){THREE.VREffect=function(renderer,onError){var vrDisplay,vrDisplays;var eyeTranslationL=new THREE.Vector3;var eyeTranslationR=new THREE.Vector3;var renderRectL,renderRectR;var frameData=null;if("VRFrameData"in window){frameData=new window.VRFrameData}function gotVRDisplays(displays){vrDisplays=displays;if(displays.length>0){vrDisplay=displays[0]}else{if(onError)onError("HMD not available")}}if(navigator.getVRDisplays){navigator.getVRDisplays().then(gotVRDisplays).catch(function(){console.warn("THREE.VREffect: Unable to get VR Displays")})}this.isPresenting=false;var scope=this;var rendererSize=renderer.getSize();var rendererUpdateStyle=false;var rendererPixelRatio=renderer.getPixelRatio();this.getVRDisplay=function(){return vrDisplay};this.setVRDisplay=function(value){vrDisplay=value};this.getVRDisplays=function(){console.warn("THREE.VREffect: getVRDisplays() is being deprecated.");return vrDisplays};this.setSize=function(width,height,updateStyle){rendererSize={width:width,height:height};rendererUpdateStyle=updateStyle;if(scope.isPresenting){var eyeParamsL=vrDisplay.getEyeParameters("left");renderer.setPixelRatio(1);renderer.setSize(eyeParamsL.renderWidth*2,eyeParamsL.renderHeight,false)}else{renderer.setPixelRatio(rendererPixelRatio);renderer.setSize(width,height,updateStyle)}};var canvas=renderer.domElement;var defaultLeftBounds=[0,0,.5,1];var defaultRightBounds=[.5,0,.5,1];function onVRDisplayPresentChange(){var wasPresenting=scope.isPresenting;scope.isPresenting=vrDisplay!==undefined&&vrDisplay.isPresenting;if(scope.isPresenting){var eyeParamsL=vrDisplay.getEyeParameters("left");var eyeWidth=eyeParamsL.renderWidth;var eyeHeight=eyeParamsL.renderHeight;if(!wasPresenting){rendererPixelRatio=renderer.getPixelRatio();rendererSize=renderer.getSize();renderer.setPixelRatio(1);renderer.setSize(eyeWidth*2,eyeHeight,false)}}else if(wasPresenting){renderer.setPixelRatio(rendererPixelRatio);renderer.setSize(rendererSize.width,rendererSize.height,rendererUpdateStyle)}}window.addEventListener("vrdisplaypresentchange",onVRDisplayPresentChange,false);this.setFullScreen=function(boolean){return new Promise(function(resolve,reject){if(vrDisplay===undefined){reject(new Error("No VR hardware found."));return}if(scope.isPresenting===boolean){resolve();return}if(boolean){resolve(vrDisplay.requestPresent([{source:canvas}]))}else{resolve(vrDisplay.exitPresent())}})};this.requestPresent=function(){return this.setFullScreen(true)};this.exitPresent=function(){return this.setFullScreen(false)};this.requestAnimationFrame=function(f){if(vrDisplay!==undefined){return vrDisplay.requestAnimationFrame(f)}else{return window.requestAnimationFrame(f)}};this.cancelAnimationFrame=function(h){if(vrDisplay!==undefined){vrDisplay.cancelAnimationFrame(h)}else{window.cancelAnimationFrame(h)}};this.submitFrame=function(){if(vrDisplay!==undefined&&scope.isPresenting){vrDisplay.submitFrame()}};this.autoSubmitFrame=true;var cameraL=new THREE.PerspectiveCamera;cameraL.layers.enable(1);var cameraR=new THREE.PerspectiveCamera;cameraR.layers.enable(2);this.render=function(scene,camera,renderTarget,forceClear){if(vrDisplay&&scope.isPresenting){var autoUpdate=scene.autoUpdate;if(autoUpdate){scene.updateMatrixWorld();scene.autoUpdate=false}var eyeParamsL=vrDisplay.getEyeParameters("left");var eyeParamsR=vrDisplay.getEyeParameters("right");eyeTranslationL.fromArray(eyeParamsL.offset);eyeTranslationR.fromArray(eyeParamsR.offset);if(Array.isArray(scene)){console.warn("THREE.VREffect.render() no longer supports arrays. Use object.layers instead.");scene=scene[0]}var size=renderer.getSize();var layers=vrDisplay.getLayers();var leftBounds;var rightBounds;if(layers.length){var layer=layers[0];leftBounds=layer.leftBounds!==null&&layer.leftBounds.length===4?layer.leftBounds:defaultLeftBounds;rightBounds=layer.rightBounds!==null&&layer.rightBounds.length===4?layer.rightBounds:defaultRightBounds}else{leftBounds=defaultLeftBounds;rightBounds=defaultRightBounds}renderRectL={x:Math.round(size.width*leftBounds[0]),y:Math.round(size.height*leftBounds[1]),width:Math.round(size.width*leftBounds[2]),height:Math.round(size.height*leftBounds[3])};renderRectR={x:Math.round(size.width*rightBounds[0]),y:Math.round(size.height*rightBounds[1]),width:Math.round(size.width*rightBounds[2]),height:Math.round(size.height*rightBounds[3])};if(renderTarget){renderer.setRenderTarget(renderTarget);renderTarget.scissorTest=true}else{renderer.setRenderTarget(null);renderer.setScissorTest(true)}if(renderer.autoClear||forceClear)renderer.clear();if(camera.parent===null)camera.updateMatrixWorld();camera.matrixWorld.decompose(cameraL.position,cameraL.quaternion,cameraL.scale);cameraR.position.copy(cameraL.position);cameraR.quaternion.copy(cameraL.quaternion);cameraR.scale.copy(cameraL.scale);cameraL.translateOnAxis(eyeTranslationL,cameraL.scale.x);cameraR.translateOnAxis(eyeTranslationR,cameraR.scale.x);if(vrDisplay.getFrameData){vrDisplay.depthNear=camera.near;vrDisplay.depthFar=camera.far;vrDisplay.getFrameData(frameData);cameraL.projectionMatrix.elements=frameData.leftProjectionMatrix;cameraR.projectionMatrix.elements=frameData.rightProjectionMatrix}else{cameraL.projectionMatrix=fovToProjection(eyeParamsL.fieldOfView,true,camera.near,camera.far);cameraR.projectionMatrix=fovToProjection(eyeParamsR.fieldOfView,true,camera.near,camera.far)}if(renderTarget){renderTarget.viewport.set(renderRectL.x,renderRectL.y,renderRectL.width,renderRectL.height);renderTarget.scissor.set(renderRectL.x,renderRectL.y,renderRectL.width,renderRectL.height)}else{renderer.setViewport(renderRectL.x,renderRectL.y,renderRectL.width,renderRectL.height);renderer.setScissor(renderRectL.x,renderRectL.y,renderRectL.width,renderRectL.height)}renderer.render(scene,cameraL,renderTarget,forceClear);if(renderTarget){renderTarget.viewport.set(renderRectR.x,renderRectR.y,renderRectR.width,renderRectR.height);renderTarget.scissor.set(renderRectR.x,renderRectR.y,renderRectR.width,renderRectR.height)}else{renderer.setViewport(renderRectR.x,renderRectR.y,renderRectR.width,renderRectR.height);renderer.setScissor(renderRectR.x,renderRectR.y,renderRectR.width,renderRectR.height)}renderer.render(scene,cameraR,renderTarget,forceClear);if(renderTarget){renderTarget.viewport.set(0,0,size.width,size.height);renderTarget.scissor.set(0,0,size.width,size.height);renderTarget.scissorTest=false;renderer.setRenderTarget(null)}else{renderer.setViewport(0,0,size.width,size.height);renderer.setScissorTest(false)}if(autoUpdate){scene.autoUpdate=true}if(scope.autoSubmitFrame){scope.submitFrame()}return}renderer.render(scene,camera,renderTarget,forceClear)};this.dispose=function(){window.removeEventListener("vrdisplaypresentchange",onVRDisplayPresentChange,false)};function fovToNDCScaleOffset(fov){var pxscale=2/(fov.leftTan+fov.rightTan);var pxoffset=(fov.leftTan-fov.rightTan)*pxscale*.5;var pyscale=2/(fov.upTan+fov.downTan);var pyoffset=(fov.upTan-fov.downTan)*pyscale*.5;return{scale:[pxscale,pyscale],offset:[pxoffset,pyoffset]}}function fovPortToProjection(fov,rightHanded,zNear,zFar){rightHanded=rightHanded===undefined?true:rightHanded;zNear=zNear===undefined?.01:zNear;zFar=zFar===undefined?1e4:zFar;var handednessScale=rightHanded?-1:1;var mobj=new THREE.Matrix4;var m=mobj.elements;var scaleAndOffset=fovToNDCScaleOffset(fov);m[0*4+0]=scaleAndOffset.scale[0];m[0*4+1]=0;m[0*4+2]=scaleAndOffset.offset[0]*handednessScale;m[0*4+3]=0;m[1*4+0]=0;m[1*4+1]=scaleAndOffset.scale[1];m[1*4+2]=-scaleAndOffset.offset[1]*handednessScale;m[1*4+3]=0;m[2*4+0]=0;m[2*4+1]=0;m[2*4+2]=zFar/(zNear-zFar)*-handednessScale;m[2*4+3]=zFar*zNear/(zNear-zFar);m[3*4+0]=0;m[3*4+1]=0;m[3*4+2]=handednessScale;m[3*4+3]=0;mobj.transpose();return mobj}function fovToProjection(fov,rightHanded,zNear,zFar){var DEG2RAD=Math.PI/180;var fovPort={upTan:Math.tan(fov.upDegrees*DEG2RAD),downTan:Math.tan(fov.downDegrees*DEG2RAD),leftTan:Math.tan(fov.leftDegrees*DEG2RAD),rightTan:Math.tan(fov.rightDegrees*DEG2RAD)};return fovPortToProjection(fovPort,rightHanded,zNear,zFar)}}},{}],203:[function(_dereq_,module,exports){window.glStats=function(){var _rS=null;var _totalDrawArraysCalls=0,_totalDrawElementsCalls=0,_totalUseProgramCalls=0,_totalFaces=0,_totalVertices=0,_totalPoints=0,_totalBindTexures=0;function _h(f,c){return function(){c.apply(this,arguments);f.apply(this,arguments)}}WebGLRenderingContext.prototype.drawArrays=_h(WebGLRenderingContext.prototype.drawArrays,function(){_totalDrawArraysCalls++;if(arguments[0]==this.POINTS)_totalPoints+=arguments[2];else _totalVertices+=arguments[2]});WebGLRenderingContext.prototype.drawElements=_h(WebGLRenderingContext.prototype.drawElements,function(){_totalDrawElementsCalls++;_totalFaces+=arguments[1]/3;_totalVertices+=arguments[1]});WebGLRenderingContext.prototype.useProgram=_h(WebGLRenderingContext.prototype.useProgram,function(){_totalUseProgramCalls++});WebGLRenderingContext.prototype.bindTexture=_h(WebGLRenderingContext.prototype.bindTexture,function(){_totalBindTexures++});var _values={allcalls:{over:3e3,caption:"Calls (hook)"},drawelements:{caption:"drawElements (hook)"},drawarrays:{caption:"drawArrays (hook)"}};var _groups=[{caption:"WebGL",values:["allcalls","drawelements","drawarrays","useprogram","bindtexture","glfaces","glvertices","glpoints"]}];var _fractions=[{base:"allcalls",steps:["drawelements","drawarrays"]}];function _update(){_rS("allcalls").set(_totalDrawArraysCalls+_totalDrawElementsCalls);_rS("drawElements").set(_totalDrawElementsCalls);_rS("drawArrays").set(_totalDrawArraysCalls);_rS("bindTexture").set(_totalBindTexures);_rS("useProgram").set(_totalUseProgramCalls);_rS("glfaces").set(_totalFaces);_rS("glvertices").set(_totalVertices);_rS("glpoints").set(_totalPoints)}function _start(){_totalDrawArraysCalls=0;_totalDrawElementsCalls=0;_totalUseProgramCalls=0;_totalFaces=0;_totalVertices=0;_totalPoints=0;_totalBindTexures=0}function _end(){}function _attach(r){_rS=r}return{update:_update,start:_start,end:_end,attach:_attach,values:_values,groups:_groups,fractions:_fractions}};window.threeStats=function(renderer){var _rS=null;var _values={"renderer.info.memory.geometries":{caption:"Geometries"},"renderer.info.memory.textures":{caption:"Textures"},"renderer.info.programs":{caption:"Programs"},"renderer.info.render.calls":{caption:"Calls"},"renderer.info.render.faces":{caption:"Faces",over:1e3},"renderer.info.render.points":{caption:"Points"},"renderer.info.render.vertices":{caption:"Vertices"}};var _groups=[{caption:"Three.js - Memory",values:["renderer.info.memory.geometries","renderer.info.programs","renderer.info.memory.textures"]},{caption:"Three.js - Render",values:["renderer.info.render.calls","renderer.info.render.faces","renderer.info.render.points","renderer.info.render.vertices"]}];var _fractions=[];function _update(){_rS("renderer.info.memory.geometries").set(renderer.info.memory.geometries);_rS("renderer.info.programs").set(renderer.info.programs.length);_rS("renderer.info.memory.textures").set(renderer.info.memory.textures);_rS("renderer.info.render.calls").set(renderer.info.render.calls);_rS("renderer.info.render.faces").set(renderer.info.render.faces);_rS("renderer.info.render.points").set(renderer.info.render.points);_rS("renderer.info.render.vertices").set(renderer.info.render.vertices)}function _start(){}function _end(){}function _attach(r){_rS=r}return{update:_update,start:_start,end:_end,attach:_attach,values:_values,groups:_groups,fractions:_fractions}};window.BrowserStats=function(){var _rS=null;var _usedJSHeapSize=0,_totalJSHeapSize=0;if(window.performance&&!performance.memory){performance.memory={usedJSHeapSize:0,totalJSHeapSize:0}}if(performance.memory.totalJSHeapSize===0){console.warn("totalJSHeapSize === 0... performance.memory is only available in Chrome .")}var _values={memory:{caption:"Used Memory",average:true,avgMs:1e3,over:22},total:{caption:"Total Memory"}};var _groups=[{caption:"Browser",values:["memory","total"]}];var _fractions=[{base:"total",steps:["memory"]}];var log1024=Math.log(1024);function _size(v){var precision=100;var i=Math.floor(Math.log(v)/log1024);return Math.round(v*precision/Math.pow(1024,i))/precision}function _update(){_usedJSHeapSize=_size(performance.memory.usedJSHeapSize);_totalJSHeapSize=_size(performance.memory.totalJSHeapSize);_rS("memory").set(_usedJSHeapSize);_rS("total").set(_totalJSHeapSize)}function _start(){_usedJSHeapSize=0}function _end(){}function _attach(r){_rS=r}return{update:_update,start:_start,end:_end,attach:_attach,values:_values,groups:_groups,fractions:_fractions}};if(typeof module==="object"){module.exports={glStats:window.glStats,threeStats:window.threeStats,BrowserStats:window.BrowserStats}}},{}],204:[function(_dereq_,module,exports){"use strict";(function(){if("performance"in window==false){window.performance={}}var performance=window.performance;if("now"in performance==false){var nowOffset=Date.now();if(performance.timing&&performance.timing.navigationStart){nowOffset=performance.timing.navigationStart}performance.now=function now(){return Date.now()-nowOffset}}if(!performance.mark){performance.mark=function(){}}if(!performance.measure){performance.measure=function(){}}})();window.rStats=function rStats(settings){function iterateKeys(array,callback){var keys=Object.keys(array);for(var j=0,l=keys.length;j<l;j++){callback(keys[j])}}function importCSS(url){var element=document.createElement("link");element.href=url;element.rel="stylesheet";element.type="text/css";document.getElementsByTagName("head")[0].appendChild(element)}var _settings=settings||{};var _colours=_settings.colours||["#850700","#c74900","#fcb300","#284280","#4c7c0c"];var _cssFont="https://fonts.googleapis.com/css?family=Roboto+Condensed:400,700,300";var _cssRStats=(_settings.CSSPath?_settings.CSSPath:"")+"rStats.css";var _css=_settings.css||[_cssFont,_cssRStats];_css.forEach(function(uri){importCSS(uri)});if(!_settings.values)_settings.values={};var _base,_div,_elHeight=10,_elWidth=200;var _perfCounters={};function Graph(_dom,_id,_defArg){var _def=_defArg||{};var _canvas=document.createElement("canvas"),_ctx=_canvas.getContext("2d"),_max=0,_current=0;var c=_def.color?_def.color:"#666666";var _dotCanvas=document.createElement("canvas"),_dotCtx=_dotCanvas.getContext("2d");_dotCanvas.width=1;_dotCanvas.height=2*_elHeight;_dotCtx.fillStyle="#444444";_dotCtx.fillRect(0,0,1,2*_elHeight);_dotCtx.fillStyle=c;_dotCtx.fillRect(0,_elHeight,1,_elHeight);_dotCtx.fillStyle="#ffffff";_dotCtx.globalAlpha=.5;_dotCtx.fillRect(0,_elHeight,1,1);_dotCtx.globalAlpha=1;var _alarmCanvas=document.createElement("canvas"),_alarmCtx=_alarmCanvas.getContext("2d");_alarmCanvas.width=1;_alarmCanvas.height=2*_elHeight;_alarmCtx.fillStyle="#444444";_alarmCtx.fillRect(0,0,1,2*_elHeight);_alarmCtx.fillStyle="#b70000";_alarmCtx.fillRect(0,_elHeight,1,_elHeight);_alarmCtx.globalAlpha=.5;_alarmCtx.fillStyle="#ffffff";_alarmCtx.fillRect(0,_elHeight,1,1);_alarmCtx.globalAlpha=1;function _init(){_canvas.width=_elWidth;_canvas.height=_elHeight;_canvas.style.width=_canvas.width+"px";_canvas.style.height=_canvas.height+"px";_canvas.className="rs-canvas";_dom.appendChild(_canvas);_ctx.fillStyle="#444444";_ctx.fillRect(0,0,_canvas.width,_canvas.height)}function _draw(v,alarm){_current+=(v-_current)*.1;_max*=.99;if(_current>_max)_max=_current;_ctx.drawImage(_canvas,1,0,_canvas.width-1,_canvas.height,0,0,_canvas.width-1,_canvas.height);if(alarm){_ctx.drawImage(_alarmCanvas,_canvas.width-1,_canvas.height-_current*_canvas.height/_max-_elHeight)}else{_ctx.drawImage(_dotCanvas,_canvas.width-1,_canvas.height-_current*_canvas.height/_max-_elHeight)}}_init();return{draw:_draw}}function StackGraph(_dom,_num){var _canvas=document.createElement("canvas"),_ctx=_canvas.getContext("2d");function _init(){_canvas.width=_elWidth;_canvas.height=_elHeight*_num;_canvas.style.width=_canvas.width+"px";_canvas.style.height=_canvas.height+"px";_canvas.className="rs-canvas";_dom.appendChild(_canvas);_ctx.fillStyle="#444444";_ctx.fillRect(0,0,_canvas.width,_canvas.height)}function _draw(v){_ctx.drawImage(_canvas,1,0,_canvas.width-1,_canvas.height,0,0,_canvas.width-1,_canvas.height);var th=0;iterateKeys(v,function(j){var h=v[j]*_canvas.height;_ctx.fillStyle=_colours[j];_ctx.fillRect(_canvas.width-1,th,1,h);th+=h})}_init();return{
draw:_draw}}function PerfCounter(id,group){var _id=id,_time,_value=0,_total=0,_averageValue=0,_accumValue=0,_accumStart=performance.now(),_accumSamples=0,_dom=document.createElement("div"),_spanId=document.createElement("span"),_spanValue=document.createElement("div"),_spanValueText=document.createTextNode(""),_def=_settings?_settings.values[_id.toLowerCase()]:null,_graph=new Graph(_dom,_id,_def),_started=false;_spanId.className="rs-counter-id";_spanId.textContent=_def&&_def.caption?_def.caption:_id;_spanValue.className="rs-counter-value";_spanValue.appendChild(_spanValueText);_dom.appendChild(_spanId);_dom.appendChild(_spanValue);if(group)group.div.appendChild(_dom);else _div.appendChild(_dom);_time=performance.now();function _average(v){if(_def&&_def.average){_accumValue+=v;_accumSamples++;var t=performance.now();if(t-_accumStart>=(_def.avgMs||1e3)){_averageValue=_accumValue/_accumSamples;_accumValue=0;_accumStart=t;_accumSamples=0}}}function _start(){_time=performance.now();if(_settings.userTimingAPI)performance.mark(_id+"-start");_started=true}function _end(){_value=performance.now()-_time;if(_settings.userTimingAPI){performance.mark(_id+"-end");if(_started){performance.measure(_id,_id+"-start",_id+"-end")}}_average(_value)}function _tick(){_end();_start()}function _draw(){var v=_def&&_def.average?_averageValue:_value;_spanValueText.nodeValue=Math.round(v*100)/100;var a=_def&&(_def.below&&_value<_def.below||_def.over&&_value>_def.over);_graph.draw(_value,a);_dom.className=a?"rs-counter-base alarm":"rs-counter-base"}function _frame(){var t=performance.now();var e=t-_time;_total++;if(e>1e3){if(_def&&_def.interpolate===false){_value=_total}else{_value=_total*1e3/e}_total=0;_time=t;_average(_value)}}function _set(v){_value=v;_average(_value)}return{set:_set,start:_start,tick:_tick,end:_end,frame:_frame,value:function(){return _value},draw:_draw}}function sample(){var _value=0;function _set(v){_value=v}return{set:_set,value:function(){return _value}}}function _perf(idArg){var id=idArg.toLowerCase();if(id===undefined)id="default";if(_perfCounters[id])return _perfCounters[id];var group=null;if(_settings&&_settings.groups){iterateKeys(_settings.groups,function(j){var g=_settings.groups[parseInt(j,10)];if(!group&&g.values.indexOf(id.toLowerCase())!==-1){group=g}})}var p=new PerfCounter(id,group);_perfCounters[id]=p;return p}function _init(){if(_settings.plugins){if(!_settings.values)_settings.values={};if(!_settings.groups)_settings.groups=[];if(!_settings.fractions)_settings.fractions=[];for(var j=0;j<_settings.plugins.length;j++){_settings.plugins[j].attach(_perf);iterateKeys(_settings.plugins[j].values,function(k){_settings.values[k]=_settings.plugins[j].values[k]});_settings.groups=_settings.groups.concat(_settings.plugins[j].groups);_settings.fractions=_settings.fractions.concat(_settings.plugins[j].fractions)}}else{_settings.plugins={}}_base=document.createElement("div");_base.className="rs-base";_div=document.createElement("div");_div.className="rs-container";_div.style.height="auto";_base.appendChild(_div);document.body.appendChild(_base);if(!_settings)return;if(_settings.groups){iterateKeys(_settings.groups,function(j){var g=_settings.groups[parseInt(j,10)];var div=document.createElement("div");div.className="rs-group";g.div=div;var h1=document.createElement("h1");h1.textContent=g.caption;h1.addEventListener("click",function(e){this.classList.toggle("hidden");e.preventDefault()}.bind(div));_div.appendChild(h1);_div.appendChild(div)})}if(_settings.fractions){iterateKeys(_settings.fractions,function(j){var f=_settings.fractions[parseInt(j,10)];var div=document.createElement("div");div.className="rs-fraction";var legend=document.createElement("div");legend.className="rs-legend";var h=0;iterateKeys(_settings.fractions[j].steps,function(k){var p=document.createElement("p");p.textContent=_settings.fractions[j].steps[k];p.style.color=_colours[h];legend.appendChild(p);h++});div.appendChild(legend);div.style.height=h*_elHeight+"px";f.div=div;var graph=new StackGraph(div,h);f.graph=graph;_div.appendChild(div)})}}function _update(){iterateKeys(_settings.plugins,function(j){_settings.plugins[j].update()});iterateKeys(_perfCounters,function(j){_perfCounters[j].draw()});if(_settings&&_settings.fractions){iterateKeys(_settings.fractions,function(j){var f=_settings.fractions[parseInt(j,10)];var v=[];var base=_perfCounters[f.base.toLowerCase()];if(base){base=base.value();iterateKeys(_settings.fractions[j].steps,function(k){var s=_settings.fractions[j].steps[parseInt(k,10)].toLowerCase();var val=_perfCounters[s];if(val){v.push(val.value()/base)}})}f.graph.draw(v)})}}_init();return function(id){if(id)return _perf(id);return{element:_base,update:_update}}};if(typeof module==="object"){module.exports=window.rStats}},{}],205:[function(_dereq_,module,exports){var Util={};Util.base64=function(mimeType,base64){return"data:"+mimeType+";base64,"+base64};Util.isMobile=function(){var check=false;(function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))check=true})(navigator.userAgent||navigator.vendor||window.opera);return check};Util.isIOS=function(){return/(iPad|iPhone|iPod)/g.test(navigator.userAgent)};Util.isIFrame=function(){try{return window.self!==window.top}catch(e){return true}};Util.appendQueryParameter=function(url,key,value){var delimiter=url.indexOf("?")<0?"?":"&";url+=delimiter+key+"="+value;return url};Util.getQueryParameter=function(name){name=name.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var regex=new RegExp("[\\?&]"+name+"=([^&#]*)"),results=regex.exec(location.search);return results===null?"":decodeURIComponent(results[1].replace(/\+/g," "))};Util.isLandscapeMode=function(){return window.orientation==90||window.orientation==-90};module.exports=Util},{}],206:[function(_dereq_,module,exports){var Util=_dereq_("./util.js");function AndroidWakeLock(){var video=document.createElement("video");video.addEventListener("ended",function(){video.play()});this.request=function(){if(video.paused){video.src=Util.base64("video/webm","GkXfowEAAAAAAAAfQoaBAUL3gQFC8oEEQvOBCEKChHdlYm1Ch4ECQoWBAhhTgGcBAAAAAAAH4xFNm3RALE27i1OrhBVJqWZTrIHfTbuMU6uEFlSua1OsggEwTbuMU6uEHFO7a1OsggfG7AEAAAAAAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmAQAAAAAAAEUq17GDD0JATYCNTGF2ZjU2LjQwLjEwMVdBjUxhdmY1Ni40MC4xMDFzpJAGSJTMbsLpDt/ySkipgX1fRImIQO1MAAAAAAAWVK5rAQAAAAAAADuuAQAAAAAAADLXgQFzxYEBnIEAIrWcg3VuZIaFVl9WUDmDgQEj44OEO5rKAOABAAAAAAAABrCBsLqBkB9DtnUBAAAAAAAAo+eBAKOmgQAAgKJJg0IAAV4BHsAHBIODCoAACmH2MAAAZxgz4dPSTFi5JACjloED6ACmAECSnABMQAADYAAAWi0quoCjloEH0ACmAECSnABNwAADYAAAWi0quoCjloELuACmAECSnABNgAADYAAAWi0quoCjloEPoACmAECSnABNYAADYAAAWi0quoCjloETiACmAECSnABNIAADYAAAWi0quoAfQ7Z1AQAAAAAAAJTnghdwo5aBAAAApgBAkpwATOAAA2AAAFotKrqAo5aBA+gApgBAkpwATMAAA2AAAFotKrqAo5aBB9AApgBAkpwATIAAA2AAAFotKrqAo5aBC7gApgBAkpwATEAAA2AAAFotKrqAo5aBD6AApgDAkpwAQ2AAA2AAAFotKrqAo5aBE4gApgBAkpwATCAAA2AAAFotKrqAH0O2dQEAAAAAAACU54Iu4KOWgQAAAKYAQJKcAEvAAANgAABaLSq6gKOWgQPoAKYAQJKcAEtgAANgAABaLSq6gKOWgQfQAKYAQJKcAEsAAANgAABaLSq6gKOWgQu4AKYAQJKcAEqAAANgAABaLSq6gKOWgQ+gAKYAQJKcAEogAANgAABaLSq6gKOWgROIAKYAQJKcAEnAAANgAABaLSq6gB9DtnUBAAAAAAAAlOeCRlCjloEAAACmAECSnABJgAADYAAAWi0quoCjloED6ACmAECSnABJIAADYAAAWi0quoCjloEH0ACmAMCSnABDYAADYAAAWi0quoCjloELuACmAECSnABI4AADYAAAWi0quoCjloEPoACmAECSnABIoAADYAAAWi0quoCjloETiACmAECSnABIYAADYAAAWi0quoAfQ7Z1AQAAAAAAAJTngl3Ao5aBAAAApgBAkpwASCAAA2AAAFotKrqAo5aBA+gApgBAkpwASAAAA2AAAFotKrqAo5aBB9AApgBAkpwAR8AAA2AAAFotKrqAo5aBC7gApgBAkpwAR4AAA2AAAFotKrqAo5aBD6AApgBAkpwAR2AAA2AAAFotKrqAo5aBE4gApgBAkpwARyAAA2AAAFotKrqAH0O2dQEAAAAAAACU54J1MKOWgQAAAKYAwJKcAENgAANgAABaLSq6gKOWgQPoAKYAQJKcAEbgAANgAABaLSq6gKOWgQfQAKYAQJKcAEagAANgAABaLSq6gKOWgQu4AKYAQJKcAEaAAANgAABaLSq6gKOWgQ+gAKYAQJKcAEZAAANgAABaLSq6gKOWgROIAKYAQJKcAEYAAANgAABaLSq6gB9DtnUBAAAAAAAAlOeCjKCjloEAAACmAECSnABF4AADYAAAWi0quoCjloED6ACmAECSnABFwAADYAAAWi0quoCjloEH0ACmAECSnABFoAADYAAAWi0quoCjloELuACmAECSnABFgAADYAAAWi0quoCjloEPoACmAMCSnABDYAADYAAAWi0quoCjloETiACmAECSnABFYAADYAAAWi0quoAfQ7Z1AQAAAAAAAJTngqQQo5aBAAAApgBAkpwARUAAA2AAAFotKrqAo5aBA+gApgBAkpwARSAAA2AAAFotKrqAo5aBB9AApgBAkpwARQAAA2AAAFotKrqAo5aBC7gApgBAkpwARQAAA2AAAFotKrqAo5aBD6AApgBAkpwAROAAA2AAAFotKrqAo5aBE4gApgBAkpwARMAAA2AAAFotKrqAH0O2dQEAAAAAAACU54K7gKOWgQAAAKYAQJKcAESgAANgAABaLSq6gKOWgQPoAKYAQJKcAESAAANgAABaLSq6gKOWgQfQAKYAwJKcAENgAANgAABaLSq6gKOWgQu4AKYAQJKcAERgAANgAABaLSq6gKOWgQ+gAKYAQJKcAERAAANgAABaLSq6gKOWgROIAKYAQJKcAEQgAANgAABaLSq6gB9DtnUBAAAAAAAAlOeC0vCjloEAAACmAECSnABEIAADYAAAWi0quoCjloED6ACmAECSnABEAAADYAAAWi0quoCjloEH0ACmAECSnABD4AADYAAAWi0quoCjloELuACmAECSnABDwAADYAAAWi0quoCjloEPoACmAECSnABDoAADYAAAWi0quoCjloETiACmAECSnABDgAADYAAAWi0quoAcU7trAQAAAAAAABG7j7OBALeK94EB8YIBd/CBAw==");video.play()}};this.release=function(){video.pause();video.src=""}}function iOSWakeLock(){var timer=null;this.request=function(){if(!timer){timer=setInterval(function(){window.location=window.location;setTimeout(window.stop,0)},3e4)}};this.release=function(){if(timer){clearInterval(timer);timer=null}}}function getWakeLock(){var userAgent=navigator.userAgent||navigator.vendor||window.opera;if(userAgent.match(/iPhone/i)||userAgent.match(/iPod/i)){return iOSWakeLock}else{return AndroidWakeLock}}module.exports=getWakeLock()},{"./util.js":205}]},{},[171])(171)});