{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/fullpage.js/dist/fullpage.extensions.min.js","webpack:///./node_modules/fullpage.js/vendors/scrolloverflow.min.js","webpack:///./node_modules/three/three.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/images sync \\.(gif|png|jpe","webpack:///./src/images/quotations.svg","webpack:///./src/js/partials/homepage-fullscreen.js","webpack:///./src/js/partials/homepage-particles.js","webpack:///./src/js/square360.homepage.js","webpack:///./src/vendors/GPUParticleSystem.js","webpack:///./src/vendors/fullpage.js/fullpage.parallax.min.js","webpack:///./src/vendors/fullpage.js/fullpage.scrollOverflowReset.min.js","webpack:///external \"jQuery\""],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__webpack_provided_window_dot_jQuery","__WEBPACK_AMD_DEFINE_RESULT__","e","undefined","fullpage","cn","sn","un","fn","dn","vn","pn","hn","gn","mn","Sn","bn","wn","yn","En","xn","Ln","An","Mn","On","Cn","Hn","zn","Rn","In","Nn","Bn","jn","Pn","Yn","Wn","Dn","Vn","Zn","Xn","Gn","console","Un","arguments","length","querySelectorAll","Fn","toString","_n","classList","contains","RegExp","test","className","Qn","innerHeight","documentElement","offsetHeight","Jn","innerWidth","Kn","style","Eo","$n","qn","eo","previousElementSibling","to","nextElementSibling","no","oo","lo","parentNode","childNodes","nodeType","ro","display","io","ao","add","co","split","remove","replace","join","so","appendChild","createElement","cloneNode","insertBefore","uo","fo","Lo","firstChild","vo","createDocumentFragment","replaceChild","po","ho","nextSibling","go","mo","pageYOffset","scrollTop","clientTop","So","Array","filter","children","bo","preventDefault","returnValue","wo","yo","CustomEvent","detail","createEvent","initCustomEvent","dispatchEvent","matches","matchesSelector","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","oMatchesSelector","xo","innerHTML","trim","Ao","parentElement","removeChild","push","Mo","To","Oo","NodeList","forEach","this","fp_utils","$","deepExtend","hasClass","getWindowHeight","css","until","prevUntil","nextUntil","prev","next","last","index","getList","hide","show","isArrayOrList","addClass","removeClass","appendTo","wrap","wrapAll","wrapInner","unwrap","closest","after","before","getScrollTop","siblings","isFunction","trigger","toggle","createElementFromHTML","untilAll","nextAll","prevAll","showError","prependTo","toggleClass","b","licenseKey","domain","indexOf","g","menu","anchors","lockAnchors","navigation","navigationPosition","navigationTooltips","showActiveTooltip","slidesNavigation","slidesNavPosition","scrollBar","hybrid","css3","scrollingSpeed","autoScrolling","fitToSection","fitToSectionDelay","easing","easingcss3","loopBottom","loopTop","loopHorizontal","continuousVertical","continuousHorizontal","scrollHorizontally","interlockedSlides","dragAndMove","offsetSections","resetSliders","fadingEffect","normalScrollElements","scrollOverflow","scrollOverflowReset","scrollOverflowHandler","fp_scrolloverflow","iscrollHandler","scrollOverflowOptions","touchSensitivity","touchWrapper","bigSectionsDestination","keyboardScrolling","animateAnchor","recordHistory","controlArrows","controlArrowColor","verticalCentered","sectionsColor","paddingTop","paddingBottom","fixedElements","responsive","responsiveWidth","responsiveHeight","responsiveSlides","parallax","parallaxOptions","type","percentage","cards","cardsOptions","perspective","fadeContent","fadeBackground","sectionSelector","slideSelector","v2compatible","afterLoad","onLeave","afterRender","afterResize","afterReBuild","afterSlideLoad","onSlideLeave","afterResponsive","lazyLoading","S","u","a","navigator","userAgent","match","msMaxTouchPoints","maxTouchPoints","w","y","f","E","x","v","up","down","left","right","k","h","L","A","M","T","O","C","H","z","Vt","R","touchmove","move","touchstart","I","N","ot","B","j","P","addEventListener","removeEventListener","Y","W","D","V","Z","X","G","tn","fp_easings","easeInOutCubic","version","setAutoScrolling","re","setRecordHistory","ie","setScrollingSpeed","le","setFitToSection","ae","setLockAnchors","setMouseWheelScrolling","ce","setAllowScrolling","se","setKeyboardScrolling","fe","moveSectionUp","de","moveSectionDown","ve","silentMoveTo","pe","moveTo","he","moveSlideRight","ge","moveSlideLeft","me","ze","reBuild","Se","setResponsive","we","getFullpageData","options","internals","container","canScroll","isScrollAllowed","getDestinationPosition","Ve","isTouch","at","getXmovement","Ht","removeAnimation","Ot","getTransforms","Ut","lazyLoad","Ke","addAnimation","Tt","performHorizontalMove","xt","landscapeScroll","wt","silentLandscapeScroll","Xt","keepSlidesPosition","De","silentScroll","Gt","styleSlides","Me","styleSection","Oe","scrollHandler","He","getEventsPage","Zt","getMSPointer","isReallyTouch","Be","usingExtension","Jt","toggleControlArrows","yt","touchStartHandler","je","touchMoveHandler","Ne","nullOrSection","Ge","destroy","ue","clearTimeout","ut","Lt","dt","vt","ye","xe","Kt","Qe","height","background-color","padding","width","position","-ms-touch-action","touch-action","overflow","getAttribute","setAttribute","removeAttribute","_t","scrollTo","getActiveSection","ln","getActiveSlide","Ue","top","translate3d","translate3dH","shared","afterRenderActions","Ce","isNormalScrollElement","fullpage_api","fullpage_extensions","keys","Ae","webkitTransform","OTransform","msTransform","MozTransform","transform","body","getComputedStyle","getPropertyValue","kt","zt","ke","init","Mt","Dt","readyState","st","setTimeout","Le","Ee","U","F","_","Q","J","K","q","ee","Date","getTime","te","ne","oe","en","offsetTop","Fe","element","update","onmousewheel","passive","Ye","pt","ht","detachEvent","Ft","directions","Ie","Ze","Nt","Bt","We","Rt","Te","createScrollBarForAll","be","target","toElement","relatedTarget","setIscroll","border-color","margin-left","Math","round","padding-top","padding-bottom","Je","qe","ft","section","Xe","activeSection","direction","anchorLink","sectionIndex","qt","abs","getCurrentScroll","getDocumentHeight","Ct","leavingSection","apply","localIsResizing","tt","Pt","Re","getScrollSection","scrollable","isScrolled","pointerType","Pe","slice","max","ceil","event","wheelDelta","deltaY","min","wheelDeltaX","deltaX","shift","$t","isTesting","isGrabbing","isScrollingDown","getSectionPosition","callback","isMovementUp","dtop","yMovement","activeSlide","Qt","dropEffect","waterEffect","reverse","wrapAroundElements","setPrevious","beforeLeave","It","_e","scroll-behavior","nn","destiny","slideAnchor","slideIndex","prevSlide","prevSlideIndex","slide","origin","destination","map","rn","getBoundingClientRect","bottom","nt","$e","load","onloadeddata","createScrollBar","hasAttribute","play","et","onload","contentWindow","postMessage","pause","charAt","String","fromCharCode","charCodeAt","it","removedNodes","isEqualNode","lt","MutationObserver","observe","childList","subtree","toLowerCase","rt","ct","random","location","hash","decodeURIComponent","activeElement","keyCode","shiftKey","gt","focus","ctrlKey","which","pageY","bt","offsetParent","slides","destinyPos","offsetLeft","slidesNav","Wt","xMovement","Et","afterSlideLoads","isInterlockedSlide","At","-webkit-transition","transition","parseInt","jt","Yt","history","replaceState","href","PointerEvent","pageX","touches","on","-webkit-transform","-moz-transform","-ms-transform","isAnimating","warn","self","scrollLeft","anchor","item","isLast","isFirst","window","document","extend","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","substr","toUpperCase","now","addEvent","removeEvent","prefixPointerEvent","MSPointerEvent","momentum","duration","hasTransform","hasPerspective","hasTouch","hasPointer","hasTransition","isBadAndroid","appVersion","parseFloat","transitionTimingFunction","transitionDuration","transitionDelay","transformOrigin","offset","preventDefaultException","eventType","touchend","mousedown","mousemove","mouseup","pointerdown","pointermove","pointerup","MSPointerDown","MSPointerMove","MSPointerUp","ease","quadratic","circular","sqrt","back","bounce","elastic","pow","sin","PI","tap","initEvent","click","tagName","MouseEvent","view","screenX","screenY","clientX","clientY","altKey","metaKey","button","_constructed","wrapper","querySelector","scroller","scrollerStyle","resizeScrollbars","mouseWheelSpeed","snapThreshold","disablePointer","disableTouch","disableMouse","startX","startY","scrollY","directionLockThreshold","bounceTime","bounceEasing","HWCompositing","useTransition","useTransform","bindToWrapper","onmousedown","translateZ","eventPassthrough","scrollX","freeScroll","resizePolling","shrinkScrollbars","invertWheelDirection","directionX","directionY","_events","_init","refresh","enable","cssText","pointerEvents","el","wrapperStyle","indicator","indicatorStyle","listenX","listenY","interactive","resize","defaultScrollbars","shrink","fade","speedRatioX","speedRatioY","sizeRatioX","sizeRatioY","maxPosX","maxPosY","opacity","_initEvents","scrollbars","indicators","_initIndicators","mouseWheel","_initWheel","snap","_initSnap","keyBindings","_initKeys","resizeTimeout","_execEvent","_transitionEnd","isInTransition","_transitionTime","resetPosition","_start","enabled","initiated","moved","distX","distY","directionLocked","startTime","getComputedPosition","_translate","absStartX","absStartY","pointX","pointY","_move","endTime","hasHorizontalScroll","hasVerticalScroll","maxScrollX","maxScrollY","_end","changedTouches","flick","wrapperWidth","deceleration","wrapperHeight","_nearestSnap","currentPage","snapSpeed","_resize","disable","clientWidth","clientHeight","scrollerWidth","offsetWidth","scrollerHeight","wrapperOffset","off","splice","scrollBy","_transitionTimingFunction","_animate","scrollToElement","transitionTime","updatePosition","interactiveScrollbars","customStyle","fadeScrollbars","concat","wheelTimeout","_wheel","deltaMode","wheelDeltaY","goToPage","snapStepX","snapStepY","pages","cx","cy","snapThresholdX","snapThresholdY","pageUp","pageDown","end","home","_key","keyTime","keyAcceleration","handleEvent","stopPropagation","fadeTimeout","lastPointX","lastPointY","_pos","indicatorWidth","minBoundaryX","maxBoundaryX","indicatorHeight","minBoundaryY","maxBoundaryY","ignoreBoundaries","visible","utils","IScroll","wheelOn","wheelOff","refreshId","iScrollInstances","lastScrollY","hasBeenInit","iscrollOptions","hideScrollbars","wrapContent","scrollHeight","toggleWheel","fp_iscrollInstance","__WEBPACK_AMD_DEFINE_FACTORY__","THREE","REVISION","Number","EPSILON","sign","Function","assign","TypeError","output","source","nextKey","MOUSE","LEFT","MIDDLE","RIGHT","CullFaceNone","CullFaceBack","CullFaceFront","CullFaceFrontBack","FrontFaceDirectionCW","FrontFaceDirectionCCW","BasicShadowMap","PCFShadowMap","PCFSoftShadowMap","FrontSide","BackSide","DoubleSide","FlatShading","SmoothShading","NoColors","FaceColors","VertexColors","NoBlending","NormalBlending","AdditiveBlending","SubtractiveBlending","MultiplyBlending","CustomBlending","AddEquation","SubtractEquation","ReverseSubtractEquation","MinEquation","MaxEquation","ZeroFactor","OneFactor","SrcColorFactor","OneMinusSrcColorFactor","SrcAlphaFactor","OneMinusSrcAlphaFactor","DstAlphaFactor","OneMinusDstAlphaFactor","DstColorFactor","OneMinusDstColorFactor","SrcAlphaSaturateFactor","NeverDepth","AlwaysDepth","LessDepth","LessEqualDepth","EqualDepth","GreaterEqualDepth","GreaterDepth","NotEqualDepth","MultiplyOperation","MixOperation","AddOperation","NoToneMapping","LinearToneMapping","ReinhardToneMapping","Uncharted2ToneMapping","CineonToneMapping","UVMapping","CubeReflectionMapping","CubeRefractionMapping","EquirectangularReflectionMapping","EquirectangularRefractionMapping","SphericalReflectionMapping","CubeUVReflectionMapping","CubeUVRefractionMapping","RepeatWrapping","ClampToEdgeWrapping","MirroredRepeatWrapping","NearestFilter","NearestMipMapNearestFilter","NearestMipMapLinearFilter","LinearFilter","LinearMipMapNearestFilter","LinearMipMapLinearFilter","UnsignedByteType","ByteType","ShortType","UnsignedShortType","IntType","UnsignedIntType","FloatType","HalfFloatType","UnsignedShort4444Type","UnsignedShort5551Type","UnsignedShort565Type","AlphaFormat","RGBFormat","RGBAFormat","LuminanceFormat","LuminanceAlphaFormat","RGBEFormat","DepthFormat","RGB_S3TC_DXT1_Format","RGBA_S3TC_DXT1_Format","RGBA_S3TC_DXT3_Format","RGBA_S3TC_DXT5_Format","RGB_PVRTC_4BPPV1_Format","RGB_PVRTC_2BPPV1_Format","RGBA_PVRTC_4BPPV1_Format","RGBA_PVRTC_2BPPV1_Format","RGB_ETC1_Format","LoopOnce","LoopRepeat","LoopPingPong","InterpolateDiscrete","InterpolateLinear","InterpolateSmooth","ZeroCurvatureEnding","ZeroSlopeEnding","WrapAroundEnding","TrianglesDrawMode","TriangleStripDrawMode","TriangleFanDrawMode","LinearEncoding","sRGBEncoding","GammaEncoding","RGBEEncoding","LogLuvEncoding","RGBM7Encoding","RGBM16Encoding","RGBDEncoding","BasicDepthPacking","RGBADepthPacking","Color","set","setRGB","constructor","copy","setHex","setStyle","setScalar","scalar","hex","floor","setHSL","hue2rgb","euclideanModulo","clamp","handleAlpha","string","exec","color","components","size","ColorKeywords","clone","copyGammaToLinear","gammaFactor","copyLinearToGamma","safeInverse","convertGammaToLinear","convertLinearToGamma","getHex","getHexString","getHSL","optionalTarget","hue","saturation","hsl","lightness","delta","getStyle","offsetHSL","addColors","color1","color2","addScalar","multiply","multiplyScalar","lerp","alpha","equals","fromArray","array","toArray","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","Quaternion","_x","_y","_z","_w","onChangeCallback","quaternion","setFromEuler","euler","Euler","Error","c1","cos","c2","c3","s1","s2","s3","order","setFromAxisAngle","axis","angle","halfAngle","setFromRotationMatrix","elements","m11","m12","m13","m21","m22","m23","m31","m32","m33","trace","setFromUnitVectors","v1","vFrom","vTo","Vector3","dot","crossVectors","normalize","inverse","conjugate","lengthSq","multiplyQuaternions","premultiply","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","slerp","qb","cosHalfTheta","sinHalfTheta","halfTheta","atan2","ratioA","ratioB","onChange","qa","qm","slerpFlat","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","dir","sqrSin","len","tDir","Vector2","setX","setY","setComponent","getComponent","addVectors","addScaledVector","sub","subVectors","subScalar","isFinite","divide","divideScalar","clampScalar","minVal","maxVal","clampLength","roundToZero","negate","lengthManhattan","distanceTo","distanceToSquared","dx","dy","setLength","lerpVectors","v2","fromAttribute","attribute","itemSize","rotateAround","center","setZ","multiplyVectors","applyEuler","error","applyQuaternion","applyAxisAngle","applyMatrix3","applyMatrix4","applyProjection","qx","qy","qz","qw","ix","iy","iz","iw","project","matrix","camera","Matrix4","multiplyMatrices","projectionMatrix","getInverse","matrixWorld","unproject","transformDirection","cross","ax","ay","az","bx","by","bz","projectOnVector","vector","projectOnPlane","planeNormal","reflect","normal","angleTo","theta","acos","dz","setFromSpherical","sinPhiRadius","phi","radius","setFromMatrixPosition","setFromMatrixColumn","setFromMatrixScale","sx","sy","sz","temp","Vector4","setW","setAxisAngleFromQuaternion","setAxisAngleFromRotationMatrix","xx","yy","zz","xy","xz","yz","_order","DefaultOrder","RotationOrders","asin","setFromQuaternion","makeRotationFromQuaternion","setFromVector3","reorder","newOrder","toVector3","optionalResult","Line3","start","line","distanceSq","distance","result","closestPointToPointParameter","startP","startEnd","point","clampToLine","startEnd2","closestPointToPoint","Box2","Infinity","setFromPoints","points","makeEmpty","il","expandByPoint","setFromCenterAndSize","halfSize","box","isEmpty","expandByVector","expandByScalar","containsPoint","containsBox","getParameter","intersectsBox","clampPoint","distanceToPoint","intersect","union","translate","Box3","setFromArray","minX","minY","minZ","maxX","maxY","maxZ","setFromObject","scope","updateMatrixWorld","traverse","node","geometry","Geometry","vertices","BufferGeometry","attributes","positions","intersectsSphere","closestPoint","sphere","intersectsPlane","plane","constant","getBoundingSphere","Sphere","Matrix3","Float32Array","n11","n12","n13","n21","n22","n23","n31","n32","n33","identity","setFromMatrix4","applyToVector3Array","applyToBuffer","buffer","getX","getY","getZ","setXYZ","determinant","throwOnDegenerate","t11","t12","t13","det","msg","detInv","transpose","tmp","flattenToArrayOffset","getNormalMatrix","matrix4","transposeIntoArray","n14","n24","n34","n41","n42","n43","n44","copyPosition","extractBasis","xAxis","yAxis","zAxis","makeBasis","extractRotation","scaleX","scaleY","scaleZ","makeRotationFromEuler","af","bf","cf","df","ac","ad","bc","bd","x2","y2","z2","wx","wy","wz","lookAt","eye","a11","a12","a13","a14","a21","a22","a23","a24","a31","a32","a33","a34","a41","a42","a43","a44","b11","b12","b13","b14","b21","b22","b23","b24","b31","b32","b33","b34","b41","b42","b43","b44","multiplyToArray","getPosition","setPosition","t14","scale","getMaxScaleOnAxis","scaleXSq","scaleYSq","scaleZSq","makeTranslation","makeRotationX","makeRotationY","makeRotationZ","makeRotationAxis","tx","ty","makeScale","compose","decompose","invSX","invSY","invSZ","makeFrustum","near","far","makePerspective","fov","aspect","ymax","DEG2RAD","ymin","xmin","xmax","makeOrthographic","Ray","ray","recast","directionDistance","distanceSqToPoint","distanceSqToSegment","segCenter","segDir","diff","v0","optionalPointOnRay","optionalPointOnSegment","s0","sqrDist","extDet","segExtent","a01","b0","b1","invDet","intersectSphere","tca","d2","radius2","thc","t0","t1","distanceToPlane","denominator","intersectPlane","distToPoint","intersectBox","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","intersectTriangle","edge1","edge2","backfaceCulling","DdN","DdQxE2","DdE1xQ","QdN","optionalCenter","maxRadiusSq","empty","radiusSum","deltaLengthSq","getBoundingBox","Frustum","p0","p1","p2","p3","p4","p5","planes","Plane","frustum","setFromMatrix","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","setComponents","intersectsObject","boundingSphere","computeBoundingSphere","intersectsSprite","sprite","negRadius","d1","setFromNormalAndCoplanarPoint","setFromCoplanarPoints","inverseNormalLength","distanceToSphere","projectPoint","orthoPoint","perpendicularMagnitude","intersectLine","intersectsLine","startSign","endSign","coplanarPoint","m1","optionalNormalMatrix","referencePoint","normalMatrix","Spherical","other","makeSafe","vec3","RAD2DEG","generateUUID","chars","uuid","rnd","mapLinear","a1","a2","b2","smoothstep","smootherstep","random16","randInt","low","high","randFloat","randFloatSpread","range","degToRad","degrees","radToDeg","radians","isPowerOfTwo","nearestPowerOfTwo","log","LN2","nextPowerOfTwo","Spline","intPoint","weight","w2","w3","pa","pb","pc","pd","v3","interpolate","t2","t3","initFromArray","getPoint","getControlPointsArray","coords","getLength","nSubDivisions","nSamples","oldIntPoint","oldPosition","tmpVec","chunkLengths","totalLength","chunks","total","reparametrizeByArcLength","samplingCoef","indexCurrent","indexNext","realDistance","sampling","newpoints","sl","Triangle","resultLengthSq","barycoordFromPoint","dot00","dot01","dot02","dot11","dot12","denom","invDenom","setFromPointsAndIndices","i0","i1","i2","triangle","area","midpoint","edgeList","projectedPoint","minDistance","Interpolant","parameterPositions","sampleValues","sampleSize","resultBuffer","_cachedIndex","valueSize","evaluate","pp","validate_interval","seek","linear_scan","forward_scan","giveUpAt","afterEnd_","t1global","beforeStart_","mid","intervalChanged_","interpolate_","settings","DefaultSettings_","getSettings_","copySampleValue_","values","stride","CubicInterpolant","_weightPrev","_offsetPrev","_weightNext","_offsetNext","endingStart","endingEnd","iPrev","iNext","tPrev","tNext","halfDt","o1","o0","oP","oN","wP","wN","ppp","sP","sN","DiscreteInterpolant","LinearInterpolant","offset1","offset0","weight1","weight0","QuaternionLinearInterpolant","Clock","autoStart","oldTime","elapsedTime","running","performance","stop","getElapsedTime","getDelta","newTime","EventDispatcher","listener","_listeners","listeners","hasEventListener","listenerArray","Layers","mask","channel","layers","ascSort","intersectObject","raycaster","intersects","recursive","raycast","Raycaster","params","Mesh","Line","LOD","Points","threshold","Sprite","defineProperties","PointCloud","linePrecision","setFromCamera","PerspectiveCamera","OrthographicCamera","sort","intersectObjects","objects","isArray","Object3D","Object3DIdCount","parent","DefaultUp","rotation","modelViewMatrix","matrixAutoUpdate","DefaultMatrixAutoUpdate","matrixWorldNeedsUpdate","castShadow","receiveShadow","frustumCulled","renderOrder","userData","applyMatrix","setRotationFromAxisAngle","setRotationFromEuler","setRotationFromMatrix","setRotationFromQuaternion","rotateOnAxis","q1","rotateX","rotateY","rotateZ","translateOnAxis","translateX","translateY","localToWorld","worldToLocal","getObjectById","id","getObjectByProperty","getObjectByName","getWorldPosition","getWorldQuaternion","getWorldRotation","getWorldScale","getWorldDirection","traverseVisible","traverseAncestors","updateMatrix","force","toJSON","meta","isRootObject","geometries","materials","textures","images","metadata","generator","JSON","stringify","material","extractFromCache","cache","data","parse","child","Face3","materialIndex","vertexNormals","vertexColors","BufferAttribute","normalized","dynamic","updateRange","count","needsUpdate","setDynamic","copyAt","index1","index2","copyArray","copyColorsArray","colors","copyIndicesArray","indices","copyVector2sArray","vectors","copyVector3sArray","copyVector4sArray","getW","setXY","setXYZW","Int8Attribute","Int8Array","Uint8Attribute","Uint8Array","Uint8ClampedAttribute","Uint8ClampedArray","Int16Attribute","Int16Array","Uint16Attribute","Uint16Array","Int32Attribute","Int32Array","Uint32Attribute","Uint32Array","Float32Attribute","Float64Attribute","Float64Array","DynamicBufferAttribute","InstancedBufferAttribute","meshPerAttribute","InterleavedBuffer","InstancedInterleavedBuffer","InterleavedBufferAttribute","interleavedBuffer","GeometryIdCount","faces","faceVertexUvs","morphTargets","morphNormals","skinWeights","skinIndices","lineDistances","boundingBox","verticesNeedUpdate","elementsNeedUpdate","uvsNeedUpdate","normalsNeedUpdate","colorsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","face","jl","computeBoundingBox","obj","fromBufferGeometry","normals","uvs","uv","uvs2","uv2","tempNormals","tempUVs","tempUVs2","addFace","groups","group","computeFaceNormals","cb","ab","fl","vA","vB","vC","computeVertexNormals","areaWeighted","vl","computeMorphNormals","__originalFaceNormal","__originalVertexNormals","tmpGeo","faceNormals","dstNormalsFace","dstNormalsVertex","faceNormal","computeTangents","computeLineDistances","merge","materialIndexOffset","vertexOffset","vertices1","vertices2","faces1","faces2","uvs1","vertexCopy","faceCopy","faceVertexNormals","faceVertexColors","uvCopy","mergeMesh","mesh","mergeVertices","verticesMap","unique","changes","precision","faceIndicesToRemove","idx","sortFacesByMaterialIndex","_id","newUvs1","newUvs2","parameters","vertex","normalsHash","colorsHash","uvsHash","hasFaceVertexUv","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","setBit","getUvIndex","getNormalIndex","getColorIndex","uvsCopy","kl","dispose","DirectGeometry","computeGroups","fromGeometry","morphTargetsPosition","hasFaceVertexUv2","morphTargetsLength","morphTargetsNormal","morphNormalsLength","hasSkinIndices","hasSkinWeights","vertexUvs","morphTarget","morphNormal","morphAttributes","drawRange","getIndex","setIndex","addAttribute","addGroup","clearGroups","setDrawRange","updateFromObject","direct","__directGeometry","lineDistance","fromDirectGeometry","isNaN","pA","pB","pC","normalizeNormals","attributeArray1","attribute2","attributeArray2","toNonIndexed","geometry2","array2","MaxIndex","InstancedBufferGeometry","maxInstancedCount","instances","Uniform","onUpdate","onUpdateCallback","AnimationAction","_new","mixer","clip","localRoot","_mixer","_clip","_localRoot","tracks","nTracks","interpolants","interpolantSettings","interpolant","createInterpolant","_interpolantSettings","_interpolants","_propertyBindings","_cacheIndex","_byClipCacheIndex","_timeScaleInterpolant","_weightInterpolant","loop","_loopCount","_startTime","time","timeScale","_effectiveTimeScale","_effectiveWeight","repetitions","paused","clampWhenFinished","zeroSlopeAtStart","zeroSlopeAtEnd","_activateAction","_deactivateAction","reset","stopFading","stopWarping","isRunning","_isActiveAction","isScheduled","startAt","setLoop","setEffectiveWeight","getEffectiveWeight","fadeIn","_scheduleFading","fadeOut","crossFadeFrom","fadeOutAction","warp","fadeInDuration","fadeOutDuration","startEndRatio","endStartRatio","crossFadeTo","fadeInAction","weightInterpolant","_takeBackControlInterpolant","setEffectiveTimeScale","getEffectiveTimeScale","setDuration","syncWith","action","halt","startTimeScale","endTimeScale","_lendControlInterpolant","times","timeScaleInterpolant","getMixer","getClip","getRoot","_root","_update","deltaTime","timeDirection","accuIndex","timeRunning","_updateTimeScale","clipTime","_updateTime","_updateWeight","propertyMixers","accumulate","interpolantValue","loopCount","_setEndings","handle_stop","pingPong","loopDelta","pending","atStart","atEnd","weightNow","weightThen","AnimationClip","resetDuration","optimize","track","json","jsonTracks","frameTime","fps","KeyframeTrack","clipTracks","CreateFromMorphTargetSequence","morphTargetSequence","noLoop","numMorphTargets","AnimationUtils","getKeyframeOrder","sortedArray","NumberKeyframeTrack","findByName","objectOrClipArray","clipArray","animations","CreateClipsFromMorphTargetSequences","animationToMorphTargets","pattern","parts","animationMorphTargets","clips","parseAnimation","animation","bones","nodeName","addNonemptyTrack","trackType","trackName","animationKeys","propertyName","destTracks","flattenJSON","clipName","hierarchyTracks","hierarchy","morphTargetNames","morphTargetName","animationKey","boneName","VectorKeyframeTrack","QuaternionKeyframeTrack","AnimationMixer","root","_initMemoryManager","_accuIndex","clipAction","optionalRoot","rootUuid","clipObject","clipUuid","actionsForClip","_actionsByClip","prototypeAction","existingAction","actionByRoot","knownActions","newAction","_Action","_bindAction","_addInactiveAction","stopAllAction","actions","_actions","nActions","_nActiveActions","bindings","_bindings","nBindings","_nActiveBindings","useCount","uncacheClip","actionsByClip","actionsToRemove","cacheIndex","lastInactiveAction","pop","_removeInactiveBindingsForAction","uncacheRoot","_removeInactiveAction","bindingByName","_bindingsByRootAndName","binding","restoreOriginalState","_removeInactiveBinding","uncacheAction","bindingsByRoot","bindingsByName","referenceCount","_addInactiveBinding","path","parsedPath","PropertyMixer","PropertyBinding","ValueTypeName","getValueSize","_lendBinding","saveOriginalState","_lendAction","_takeBackBinding","_takeBackAction","_controlInterpolants","_nActiveControlInterpolants","stats","inUse","controlInterpolants","knownActionsForClip","lastKnownAction","byClipCacheIndex","prevIndex","lastActiveIndex","firstInactiveAction","firstInactiveIndex","lastActiveAction","propBinding","rootNode","lastInactiveBinding","remove_empty_map","firstInactiveBinding","lastActiveBinding","_controlInterpolantsResultBuffer","__cacheIndex","lastActiveInterpolant","AnimationObjectGroup","var_args","_objects","nCachedObjects_","_indicesByUUID","_paths","_parsedPaths","_bindingsIndicesByPath","bindingsPerObject","nObjects","nCachedObjects","indicesByUUID","paths","parsedPaths","knownObject","firstActiveIndex","lastCachedObject","bindingsForPath","lastCached","lastCachedIndex","firstActiveObject","firstActive","uncache","lastObject","lastIndex","subscribe_","indicesByPath","unsubscribe_","lastBindingsIndex","lastBindings","arraySlice","from","isTypedArray","subarray","convertArray","forceClone","BYTES_PER_ELEMENT","ArrayBuffer","isView","DataView","nValues","srcOffset","jsonKeys","valuePropertyName","interpolation","TimeBufferType","ValueBufferType","setInterpolation","DefaultInterpolation","validate","InterpolantFactoryMethodDiscrete","InterpolantFactoryMethodLinear","InterpolantFactoryMethodSmooth","factoryMethod","message","getInterpolation","timeOffset","nKeys","valid","prevTime","currTime","writeIndex","keep","offsetP","offsetN","readOffset","writeOffset","_getTrackTypeForValueTypeName","typeName","ColorKeyframeTrack","BooleanKeyframeTrack","StringKeyframeTrack","parseTrackName","findNode","getValue","targetArray","setValue","sourceArray","targetObject","objectName","propertyIndex","_getValue_unavailable","_setValue_unavailable","objectIndex","skeleton","nodeProperty","versioning","Versioning","None","NeedsUpdate","MatrixWorldNeedsUpdate","bindingType","BindingType","Direct","ArrayElement","resolvedProperty","HasFromToArray","EntireArray","GetterByBindingType","SetterByBindingTypeAndVersioning","unbind","_getValue_unbound","_setValue_unbound","dest","Composite","targetGroup","optionalParsedPath","_targetGroup","firstValidIndex","results","bone","searchSkeleton","searchNodeSubtree","childNode","subTreeNode","mixFunction","bufferType","_slerp","_select","_lerp","_mixBufferRegion","cumulativeWeight","currentWeight","mix","originalValueOffset","Audio","context","createBufferSource","onended","onEnded","gain","createGain","connect","getInput","autoplay","playbackRate","isPlaying","hasPlaybackControl","sourceType","filters","getOutput","setNodeSource","audioNode","setBuffer","audioBuffer","currentTime","disconnect","getFilters","setFilters","getFilter","setFilter","setPlaybackRate","getPlaybackRate","getLoop","getVolume","setVolume","AudioAnalyser","audio","fftSize","analyser","createAnalyser","frequencyBinCount","getFrequencyData","getByteFrequencyData","getAverageFrequency","AudioContext","webkitAudioContext","PositionalAudio","panner","createPanner","getRefDistance","refDistance","setRefDistance","getRolloffFactor","rolloffFactor","setRolloffFactor","getDistanceModel","distanceModel","setDistanceModel","getMaxDistance","maxDistance","setMaxDistance","AudioListener","removeFilter","getMasterVolume","setMasterVolume","orientation","setOrientation","Camera","matrixWorldInverse","CubeCamera","cubeResolution","cameraPX","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","format","magFilter","minFilter","renderTarget","WebGLRenderTargetCube","updateCubeMap","renderer","scene","generateMipmaps","texture","activeCubeFace","render","setRenderTarget","zoom","updateProjectionMatrix","filmGauge","filmOffset","setFocalLength","focalLength","vExtentSlope","getFilmHeight","atan","getFocalLength","getEffectiveFOV","getFilmWidth","setViewOffset","fullWidth","fullHeight","offsetX","offsetY","clearViewOffset","skew","StereoCamera","cameraL","cameraR","eyeRight","eyeLeft","eyeSepOnProjection","Light","intensity","groundColor","decay","penumbra","LightShadow","bias","mapSize","AmbientLight","DirectionalLight","shadow","DirectionalLightShadow","light","HemisphereLight","skyColor","PointLight","power","SpotLight","SpotLightShadow","AudioLoader","manager","DefaultLoadingManager","url","onLoad","onProgress","onError","loader","XHRLoader","setResponseType","decodeAudioData","Cache","files","file","clear","Loader","onLoadStart","onLoadProgress","onLoadComplete","crossOrigin","extractUrlBase","initMaterials","texturePath","createMaterial","textureLoader","materialLoader","TextureLoader","MaterialLoader","loadTexture","repeat","anisotropy","fullPath","Handlers","setCrossOrigin","wrapS","wrapT","blending","specular","emissive","shininess","mapDiffuseRepeat","mapDiffuseOffset","mapDiffuseWrap","mapDiffuseAnisotropy","lightMap","mapLightRepeat","mapLightOffset","mapLightWrap","mapLightAnisotropy","aoMap","mapAORepeat","mapAOOffset","mapAOWrap","mapAOAnisotropy","bumpMap","mapBumpRepeat","mapBumpOffset","mapBumpWrap","mapBumpAnisotropy","bumpScale","normalMap","mapNormalRepeat","mapNormalOffset","mapNormalWrap","mapNormalAnisotropy","normalScale","specularMap","mapSpecularRepeat","mapSpecularOffset","mapSpecularWrap","mapSpecularAnisotropy","alphaMap","mapAlphaRepeat","mapAlphaOffset","mapAlphaWrap","mapAlphaAnisotropy","side","transparent","setTextures","handlers","regex","cached","request","XMLHttpRequest","overrideMimeType","open","response","status","itemEnd","itemError","responseType","withCredentials","send","itemStart","setPath","setWithCredentials","FontLoader","text","substring","font","Font","ImageLoader","image","src","JSONLoader","statusDomElement","_statusDomElement","setTexturePath","isBitSet","fi","zLength","colorIndex","normalIndex","uvIndex","isQuad","hasMaterial","faceA","faceB","uvLayer","nUvLayers","parseModel","influencesPerVertex","parseSkin","dstVertices","srcVertices","morphColors","parseMorphing","outputAnimations","morphAnimationClips","parseAnimations","LoadingManager","isLoading","itemsLoaded","itemsTotal","onStart","BufferGeometryLoader","TYPED_ARRAYS","typedArray","drawcalls","offsets","getTexture","roughness","metalness","uniforms","vertexShader","fragmentShader","shading","alphaTest","depthTest","depthWrite","colorWrite","wireframe","wireframeLinewidth","sizeAttenuation","displacementMap","displacementScale","displacementBias","roughnessMap","metalnessMap","emissiveMap","emissiveIntensity","envMap","combine","reflectivity","lightMapIntensity","aoMapIntensity","ObjectLoader","lastIndexOf","parseGeometries","parseImages","parseTextures","parseMaterials","parseObject","geometryLoader","bufferGeometryLoader","widthSegments","heightSegments","depth","depthSegments","segments","thetaStart","thetaLength","radiusTop","radiusBottom","radialSegments","openEnded","phiStart","phiLength","innerRadius","outerRadius","thetaSegments","phiSegments","tube","tubularSegments","arc","loadImage","parseConstant","Texture","mapping","getGeometry","getMaterial","Scene","SkinnedMesh","Group","levels","level","addLevel","CubeTextureLoader","urls","CubeTexture","loaded","DataTextureLoader","BinaryTextureLoader","_parser","DataTexture","texData","mipmaps","mipmapCount","CompressedTextureLoader","CompressedTexture","texDatas","isCubemap","Material","MaterialIdCount","fog","lights","blendSrc","blendDst","blendEquation","blendSrcAlpha","blendDstAlpha","blendEquationAlpha","depthFunc","clippingPlanes","clipShadows","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","premultipliedAlpha","overdraw","_needsUpdate","setValues","newValue","currentValue","isRoot","srcPlanes","dstPlanes","LineBasicMaterial","linewidth","linecap","linejoin","LineDashedMaterial","dashSize","gapSize","MeshBasicMaterial","refractionRatio","wireframeLinecap","wireframeLinejoin","skinning","MeshDepthMaterial","depthPacking","MeshLambertMaterial","MeshNormalMaterial","MeshPhongMaterial","MeshStandardMaterial","defines","STANDARD","envMapIntensity","MeshPhysicalMaterial","PHYSICAL","MultiMaterial","PointsMaterial","ShaderMaterial","clipping","extensions","derivatives","fragDepth","drawBuffers","shaderTextureLOD","defaultAttributeValues","index0AttributeName","UniformsUtils","RawShaderMaterial","SpriteMaterial","ShadowMaterial","UniformsLib","ShaderChunk","encoding","TextureIdCount","sourceFile","DEFAULT_IMAGE","DEFAULT_MAPPING","premultiplyAlpha","flipY","unpackAlignment","canvas","toDataURL","getContext","drawImage","getDataURL","transformUv","DepthTexture","CanvasTexture","VideoTexture","video","HAVE_CURRENT_DATA","inverseMatrix","localThreshold","localThresholdSq","testPoint","rayPointDistanceSq","intersectPoint","distanceToRay","LineSegments","precisionSq","vStart","vEnd","interSegment","interRay","step","faceIndex","nbVertices","drawMode","updateMorphTargets","setDrawMode","morphTargetBase","morphTargetInfluences","morphTargetDictionary","ml","getMorphTargetIndexByName","tempA","tempB","tempC","uvA","uvB","uvC","barycoord","intersectionPoint","intersectionPointWorld","uvIntersection","uv1","uv3","checkIntersection","checkBufferGeometryIntersection","intersection","fvA","fvB","fvC","isFaceMaterial","faceMaterial","morphInfluences","tl","influence","targets","uvs_f","Bone","skin","Skeleton","boneInverses","useVertexTexture","identityMatrix","boneTextureWidth","boneTextureHeight","boneMatrices","boneTexture","calculateInverses","bl","pose","offsetMatrix","bindMode","bindMatrix","bindMatrixInverse","gbone","pos","rotq","scl","normalizeSkinWeights","sw","vec","skinWeight","getObjectForDistance","matrixPosition","LensFlare","lensFlares","positionScreen","customUpdateCallback","updateLensFlares","flare","vecX","vecY","wantedRotation","overrideMaterial","autoUpdate","Fog","FogExp2","density","merged","uniforms_src","uniforms_dst","parameter_src","common","diffuse","offsetRepeat","flipEnvMap","aomap","lightmap","emissivemap","bumpmap","normalmap","displacementmap","roughnessmap","metalnessmap","fogDensity","fogNear","fogFar","fogColor","ambientLightColor","directionalLights","properties","shadowBias","shadowRadius","shadowMapSize","directionalShadowMap","directionalShadowMatrix","spotLights","coneCos","penumbraCos","spotShadowMap","spotShadowMatrix","pointLights","pointShadowMap","pointShadowMatrix","hemisphereLights","ShaderLib","basic","lambert","phong","standard","dashed","totalSize","cube","tCube","tFlip","equirect","tEquirect","distanceRGBA","lightPos","WebGLRenderer","_canvas","_context","_alpha","_depth","_stencil","stencil","_antialias","antialias","_premultipliedAlpha","_preserveDrawingBuffer","preserveDrawingBuffer","opaqueObjects","opaqueObjectsLastIndex","transparentObjects","transparentObjectsLastIndex","sprites","domElement","autoClear","autoClearColor","autoClearDepth","autoClearStencil","sortObjects","localClippingEnabled","gammaInput","gammaOutput","physicallyCorrectLights","toneMapping","toneMappingExposure","toneMappingWhitePoint","maxMorphTargets","maxMorphNormals","autoScaleCubemaps","_gl","_this","_currentProgram","_currentRenderTarget","_currentFramebuffer","_currentMaterialId","_currentGeometryProgram","_currentCamera","_currentScissor","_currentScissorTest","_currentViewport","_usedTextureUnits","_clearColor","_clearAlpha","_width","_height","_pixelRatio","_scissor","_scissorTest","_viewport","_frustum","_clipping","WebGLClipping","_clippingEnabled","_localClippingEnabled","_sphere","_projScreenMatrix","_vector3","_lights","ambient","directional","spot","hemi","shadows","_infoMemory","_infoRender","calls","info","memory","programs","getShaderPrecisionFormat","rangeMin","rangeMax","onContextLost","_isWebGL2","WebGL2RenderingContext","WebGLExtensions","capabilities","WebGLCapabilities","state","WebGLState","paramThreeToGL","WebGLProperties","WebGLObjects","programCache","WebGLPrograms","lightCache","WebGLLights","bufferRenderer","WebGLBufferRenderer","indexedBufferRenderer","WebGLIndexedBufferRenderer","getTargetPixelRatio","glClearColor","clearColor","setDefaultGLState","scissor","viewport","resetGLState","shadowMap","WebGLShadowMap","spritePlugin","SpritePlugin","lensFlarePlugin","LensFlarePlugin","onTextureDispose","textureProperties","__image__webglTextureCube","deleteTexture","__webglInit","__webglTexture","delete","deallocateTexture","onRenderTargetDispose","renderTargetProperties","depthTexture","deleteFramebuffer","__webglFramebuffer","__webglDepthbuffer","deleteRenderbuffer","deallocateRenderTarget","onMaterialDispose","releaseMaterialProgramReference","deallocateMaterial","programInfo","program","releaseProgram","absNumericalSort","painterSortStable","reversePainterSortStable","pushRenderItem","renderItem","isSphereViewable","numPlanes","negRad","renderObjects","renderList","ImmediateRenderObject","setMaterial","setProgram","renderBufferImmediate","renderBufferDirect","CULL_FACE","setFlipSided","setBlending","setDepthFunc","setDepthTest","setDepthWrite","setColorWrite","setPolygonOffset","materialProperties","useCache","setState","numClippingPlanes","lightsHash","getParameters","code","getProgramCode","programChange","shaderID","shader","__webglShader","acquireProgram","getAttributes","numSupportedMorphTargets","numSupportedMorphNormals","uniform","progUniforms","getUniforms","uniformsList","WebGLUniforms","seqWithValue","seq","dynamicUniforms","splitDynamic","initMaterial","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","useProgram","logarithmicDepthBuffer","uCamPos","cameraPosition","setOptional","floatVertexTextures","markUniformsLightsNeedsUpdate","refreshUniformsFog","uvScaleMap","WebGLRenderTarget","refreshUniformsCommon","refreshUniformsLine","refreshUniformsDash","refreshUniformsPoints","refreshUniformsLambert","refreshUniformsPhong","refreshUniformsStandard","refreshUniformsPhysical","upload","dynUniforms","evalDynamic","setTextureParameters","textureType","isPowerOfTwoImage","extension","texParameteri","TEXTURE_WRAP_S","TEXTURE_WRAP_T","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","CLAMP_TO_EDGE","filterFallback","__currentAnisotropy","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","getMaxAnisotropy","uploadTexture","slot","createTexture","activeTexture","TEXTURE0","bindTexture","TEXTURE_2D","pixelStorei","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","UNPACK_ALIGNMENT","clampToMaxSize","maxTextureSize","textureNeedsPowerOfTwo","HTMLImageElement","HTMLCanvasElement","makePowerOfTwo","glFormat","glType","mipmap","internalFormat","DEPTH_COMPONENT","DEPTH_COMPONENT32F","DEPTH_COMPONENT16","texImage2D","getCompressedTextureFormats","compressedTexImage2D","generateMipmap","__version","maxSize","setupFrameBufferTexture","framebuffer","attachment","textureTarget","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","setupRenderBufferStorage","renderbuffer","bindRenderbuffer","RENDERBUFFER","depthBuffer","stencilBuffer","renderbufferStorage","framebufferRenderbuffer","DEPTH_ATTACHMENT","DEPTH_STENCIL","DEPTH_STENCIL_ATTACHMENT","RGBA4","setupDepthRenderbuffer","isCube","setTexture2D","webglDepthTexture","setupDepthTexture","createRenderbuffer","NEAREST","LINEAR","REPEAT","MIRRORED_REPEAT","NEAREST_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_NEAREST","LINEAR_MIPMAP_LINEAR","UNSIGNED_BYTE","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","UNSIGNED_SHORT_5_6_5","BYTE","SHORT","UNSIGNED_SHORT","INT","UNSIGNED_INT","FLOAT","HALF_FLOAT_OES","ALPHA","RGB","RGBA","LUMINANCE","LUMINANCE_ALPHA","FUNC_ADD","FUNC_SUBTRACT","FUNC_REVERSE_SUBTRACT","ZERO","ONE","SRC_COLOR","ONE_MINUS_SRC_COLOR","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","DST_ALPHA","ONE_MINUS_DST_ALPHA","DST_COLOR","ONE_MINUS_DST_COLOR","SRC_ALPHA_SATURATE","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","MIN_EXT","MAX_EXT","getContextAttributes","forceContextLoss","loseContext","MAX_TEXTURE_MAX_ANISOTROPY_EXT","getPrecision","getPixelRatio","setPixelRatio","setSize","getSize","updateStyle","setViewport","setScissor","setScissorTest","boolean","getClearColor","setClearColor","getClearAlpha","setClearAlpha","bits","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","clearDepth","clearStencil","clearTarget","initAttributes","buffers","hasPositions","createBuffer","hasNormals","hasUvs","hasColors","bindBuffer","ARRAY_BUFFER","bufferData","positionArray","DYNAMIC_DRAW","enableAttribute","vertexAttribPointer","normalArray","nx","ny","nz","uvArray","colorArray","disableUnusedAttributes","drawArrays","TRIANGLES","updateBuffers","geometryProgram","activeInfluences","getWireframeAttribute","startIndex","geometryAttributes","programAttributes","materialDefaultAttributeValues","programAttribute","geometryAttribute","getAttributeBuffer","enableAttributeAndDivisor","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttrib1fv","setupVertexAttributes","ELEMENT_ARRAY_BUFFER","dataCount","rangeStart","rangeCount","groupStart","groupCount","drawStart","drawEnd","drawCount","setLineWidth","setMode","LINES","TRIANGLE_STRIP","TRIANGLE_FAN","lineWidth","LINE_STRIP","POINTS","renderInstances","forceClear","projectObject","isSpriteViewable","isObjectViewable","groupMaterial","beginShadows","lightShadowsLength","setupShadows","ll","viewMatrix","directionalLength","pointLength","spotLength","hemiLength","setupLights","endShadows","TEXTURE_CUBE_MAP","updateRenderTargetMipmap","setFaceCulling","cullFace","frontFaceDirection","setCullFace","allocTextureUnit","textureUnit","maxTextures","warned","complete","setTexture","setTextureCube","isCompressed","isDataTexture","cubeImage","maxCubemapSize","TEXTURE_CUBE_MAP_POSITIVE_X","setTextureCubeDynamic","getCurrentRenderTarget","isTargetPowerOfTwo","createFramebuffer","COLOR_ATTACHMENT0","setupRenderTarget","scissorTest","activeMipMapLevel","readRenderTargetPixels","restore","IMPLEMENTATION_COLOR_READ_FORMAT","IMPLEMENTATION_COLOR_READ_TYPE","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","readPixels","drawArraysInstancedANGLE","globalState","numGlobalPlanes","renderingShadows","viewNormalMatrix","resetGlobalState","projectPlanes","skipTransform","nPlanes","dstArray","flatSize","i4","enableLocalClipping","fromCache","nGlobal","lGlobal","clippingState","drawElements","drawElementsInstancedANGLE","gl","getExtension","getMaxPrecision","VERTEX_SHADER","HIGH_FLOAT","FRAGMENT_SHADER","MEDIUM_FLOAT","MAX_TEXTURE_IMAGE_UNITS","maxVertexTextures","MAX_VERTEX_TEXTURE_IMAGE_UNITS","MAX_TEXTURE_SIZE","MAX_CUBE_MAP_TEXTURE_SIZE","maxAttributes","MAX_VERTEX_ATTRIBS","maxVertexUniforms","MAX_VERTEX_UNIFORM_VECTORS","maxVaryings","MAX_VARYING_VECTORS","maxFragmentUniforms","MAX_FRAGMENT_UNIFORM_VECTORS","vertexTextures","floatFragmentTextures","_maxPrecision","WebGLGeometries","onGeometryDispose","buffergeometry","deleteAttribute","deleteAttributes","bufferproperty","__webglBuffer","deleteBuffer","removeAttributeBuffer","_bufferGeometry","updateAttribute","attributeProperties","usage","STATIC_DRAW","bufferSubData","updateBuffer","checkEdge","edges","list","TypeArray","WebGLProgram","programIdCount","getEncodingComponents","getTexelDecodingFunction","functionName","filterEmptyLine","replaceLightNums","numDirLights","numSpotLights","numPointLights","numHemiLights","parseIncludes","include","unrollLoops","snippet","unroll","shadowMapTypeDefine","shadowMapType","envMapTypeDefine","envMapModeDefine","envMapBlendingDefine","prefixVertex","prefixFragment","gammaFactorDefine","customExtensions","rendererExtensions","envMapCubeUV","flatShading","generateExtensions","customDefines","generateDefines","createProgram","supportsVertexTextures","maxBones","doubleSided","flipSided","shadowMapEnabled","useFog","fogExp","toneMappingName","getToneMappingFunction","outputEncoding","mapEncoding","envMapEncoding","emissiveMapEncoding","getTexelEncodingFunction","vertexGlsl","fragmentGlsl","glVertexShader","WebGLShader","glFragmentShader","attachShader","bindAttribLocation","linkProgram","cachedUniforms","cachedAttributes","programLog","getProgramInfoLog","vertexLog","getShaderInfoLog","fragmentLog","runnable","haveDiagnostics","getProgramParameter","LINK_STATUS","getError","VALIDATE_STATUS","diagnostics","prefix","deleteShader","identifiers","ACTIVE_ATTRIBUTES","getActiveAttrib","getAttribLocation","fetchAttributeLocations","deleteProgram","usedTimes","shaderIDs","parameterNames","getTextureEncodingFromMap","gammaOverrideLinear","nClipPlanes","nVertexUniforms","allocateBones","currentRenderTarget","envMapMode","pl","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","lines","addLineNumbers","_renderer","_state","_lightShadows","_shadowMapSize","_lookTarget","_lightPositionWorld","_renderList","_MorphingFlag","_SkinningFlag","_NumberOfMaterialVariants","_depthMaterials","_distanceMaterials","_materialCache","cubeDirections","cubeUps","cube2DViewPorts","depthMaterialTemplate","distanceShader","distanceUniforms","useMorphing","useSkinning","depthMaterial","distanceMaterial","USE_SHADOWMAP","getDepthMaterial","isPointLight","lightPositionWorld","materialVariants","customMaterial","customDepthMaterial","customDistanceMaterial","variantIndex","keyA","keyB","materialsForVariant","cachedMaterial","renderSingleSided","renderReverseSided","shadowCamera","faceCount","BLEND","vpWidth","vpHeight","pars","shadowMatrix","vpDimensions","clearAlpha","WebGLColorBuffer","WebGLDepthBuffer","WebGLStencilBuffer","maxVertexAttributes","newAttributes","enabledAttributes","attributeDivisors","compressedTextureFormats","currentBlending","currentBlendEquation","currentBlendSrc","currentBlendDst","currentBlendEquationAlpha","currentBlendSrcAlpha","currentBlendDstAlpha","currentPremultipledAlpha","currentFlipSided","currentCullFace","currentLineWidth","currentPolygonOffsetFactor","currentPolygonOffsetUnits","currentScissorTest","currentTextureSlot","currentBoundTextures","currentScissor","currentViewport","emptyTextures","DEPTH_TEST","enableVertexAttribArray","vertexAttribDivisorANGLE","disableVertexAttribArray","formats","COMPRESSED_TEXTURE_FORMATS","blendEquationSeparate","blendFuncSeparate","blendFunc","setMask","setTest","setFunc","setStencilTest","stencilTest","setStencilWrite","stencilWrite","setStencilFunc","stencilFunc","stencilRef","stencilMask","setStencilOp","stencilFail","stencilZFail","stencilZPass","setOp","frontFace","CW","CCW","BACK","FRONT","FRONT_AND_BACK","factor","units","POLYGON_OFFSET_FILL","getScissorTest","SCISSOR_TEST","webglSlot","webglType","webglTexture","boundTexture","setClear","locked","currentColorMask","currentColorClear","colorMask","setLocked","lock","currentDepthMask","currentDepthFunc","currentDepthClear","depthMask","NEVER","ALWAYS","LESS","LEQUAL","EQUAL","GEQUAL","GREATER","NOTEQUAL","currentStencilMask","currentStencilFunc","currentStencilRef","currentStencilFuncMask","currentStencilFail","currentStencilZFail","currentStencilZPass","currentStencilClear","STENCIL_TEST","stencilOp","UniformContainer","arrayCacheF32","arrayCacheI32","flatten","nBlocks","blockSize","firstElem","allocTexUnits","setValue1f","uniform1f","addr","setValue1i","uniform1i","setValue2fv","uniform2fv","uniform2f","setValue3fv","uniform3f","uniform3fv","setValue4fv","uniform4fv","uniform4f","setValue2fm","uniformMatrix2fv","setValue3fm","uniformMatrix3fv","setValue4fm","uniformMatrix4fv","setValueT1","unit","setValueT6","setValue2iv","uniform2iv","setValue3iv","uniform3iv","setValue4iv","uniform4iv","setValue1fv","uniform1fv","setValue1iv","uniform1iv","setValueV2a","setValueV3a","setValueV4a","setValueM2a","setValueM3a","setValueM4a","setValueT1a","tex","setValueT6a","SingleUniform","activeInfo","getSingularSetter","PureArrayUniform","getPureArraySetter","StructuredUniform","RePathPart","addUniform","uniformObject","parseUniform","pathLength","matchEnd","idIsIndex","subscript","ACTIVE_UNIFORMS","getActiveUniform","getUniformLocation","flares","vertexBuffer","elementBuffer","tempTexture","occlusionTexture","renderType","occlusionMap","screenPosition","tempPosition","invAspect","halfViewportWidth","halfViewportHeight","screenPositionPixels","validArea","TEXTURE1","copyTexImage2D","spritePosition","spriteRotation","spriteScale","uvOffset","uvScale","fogType","fillStyle","fillRect","oldFogType","sceneFogType","Face4","LineStrip","LinePieces","MeshFaceMaterial","Particle","ParticleSystem","PointCloudMaterial","ParticleBasicMaterial","ParticleSystemMaterial","Vertex","isIntersectionBox","isIntersectionSphere","multiplyVector3","multiplyVector3Array","extractPosition","multiplyVector4","rotateAxis","crossVector","rotateByAxis","isIntersectionLine","isIntersectionPlane","setEulerFromRotationMatrix","setEulerFromQuaternion","getPositionFromMatrix","getScaleFromMatrix","getColumnFromMatrix","getChildByName","renderDepth","eulerOrder","useQuaternion","setLens","onlyShadow","shadowCameraFov","shadowCameraLeft","shadowCameraRight","shadowCameraTop","shadowCameraBottom","shadowCameraNear","shadowCameraFar","shadowCameraVisible","shadowDarkness","shadowMapWidth","shadowMapHeight","addIndex","addDrawCall","indexOffset","clearDrawCalls","computeOffsets","wrapAround","wrapRGB","metal","supportsFloatTextures","supportsHalfFloatTextures","supportsStandardDerivatives","supportsCompressedTextureS3TC","supportsCompressedTexturePVRTC","supportsBlendMinMax","supportsInstancedArrays","enableScissorTest","addPrePlugin","addPostPlugin","updateShadowMap","shadowMapCullFace","getData","GeometryUtils","geometry1","ImageUtils","loadTextureCube","loadCompressedTexture","loadCompressedTextureCube","Projector","projectVector","unprojectVector","pickingRay","CanvasRenderer","CurveUtils","tangentQuadraticBezier","tangentCubicBezier","tangentSpline","SceneUtils","createMultiMaterialObject","detach","attach","ShapeUtils","contour","triangulate","snip","verts","px","py","aX","aY","bX","bY","cX","cY","cCROSSap","bCROSScp","vertIndices","nv","triangulateShape","holes","point_in_segment_2D_colin","inSegPt1","inSegPt2","inOtherPt","intersect_segments_2D","inSeg1Pt1","inSeg1Pt2","inSeg2Pt1","inSeg2Pt2","inExcludeAdjacentSegs","seg1dx","seg1dy","seg2dx","seg2dy","seg1seg2dx","seg1seg2dy","limit","perpSeg1","perpSeg2","factorSeg1","seg1min","seg1max","seg1minVal","seg1maxVal","seg2min","seg2max","seg2minVal","seg2maxVal","seg1Pt","seg2Pt","isPointInsideAngle","inVertex","inLegFromPt","inLegToPt","legFromPtX","legFromPtY","legToPtX","legToPtY","otherPtX","otherPtY","from2toAngle","from2otherAngle","other2toAngle","allPointsMap","allpoints","hl","shapeWithoutHoles","hole","shape","isCutLineInsideAngles","inShapeIdx","inHoleIdx","lastShapeIdx","prevShapeIdx","nextShapeIdx","insideAngle","lastHoleIdx","prevHoleIdx","nextHoleIdx","intersectsShapeEdge","inShapePt","inHolePt","sIdx","nextIdx","indepHoles","intersectsHoleEdge","ihIdx","chkHole","hIdx","holeIndex","shapeIndex","shapePt","holePt","holeIdx","cutKey","tmpShape1","tmpShape2","tmpHole1","tmpHole2","failedCuts","minShapeIndex","counter","h2","removeHoles","triangles","isClockWise","pts","b2p0","b2p1","b2p2","b3","b3p0","b3p1","b3p2","b3p3","Curve","getPointAt","getUtoTmapping","getPoints","divisions","getSpacedPoints","lengths","getLengths","cacheArcLengths","current","sum","updateArcLengths","targetArcLength","arcLengths","comparison","lengthBefore","getTangent","pt1","getTangentAt","getPointFunc","CurvePath","curves","autoClose","curve","closePath","startPoint","endPoint","LineCurve","curveLengths","getCurveLengths","lens","cacheLengths","sums","createPointsGeometry","createGeometry","createSpacedPointsGeometry","generateShapes","createPath","glyph","glyphs","cpx","cpy","cpx0","cpy0","cpx1","cpy1","cpx2","cpy2","laste","Path","outline","_cachedOutline","lineTo","quadraticCurveTo","bezierCurveTo","ha","resolution","ret","createPaths","shapes","toShapes","fromPoints","args","lastargs","aCPx","aCPy","QuadraticBezierCurve","aCP1x","aCP1y","aCP2x","aCP2y","CubicBezierCurve","splineThru","npts","SplineCurve","aRadius","aStartAngle","aEndAngle","aClockwise","absarc","absellipse","ellipse","xRadius","yRadius","aRotation","EllipseCurve","lastPoint","spts","spline","deltaAngle","tdivisions","isCCW","noHoles","toShapesNoHoles","inSubpaths","tmpPath","tmpShape","Shape","isPointInsidePolygon","inPt","inPolygon","polyLen","inside","edgeLowPt","edgeHighPt","edgeDx","edgeDy","perpEdge","subPaths","inActions","lastPath","extractSubpaths","solid","holesFirst","tmpPoints","tmpHoles","betterShapeHoles","newShapes","newShapeHoles","mainIdx","ambiguous","toChange","sLen","sho","hole_unassigned","s2Idx","froms","tos","extrude","ExtrudeGeometry","makeGeometry","ShapeGeometry","getPointsHoles","holesPts","extractAllPoints","extractPoints","point0","point1","point2","point3","ArcCurve","LineCurve3","QuadraticBezierCurve3","CubicBezierCurve3","SplineCurve3","CatmullRomCurve3","CubicPoly","pz","c0","initNonuniformCatmullRom","x3","dt0","dt1","dt2","initCatmullRom","tension","calc","closed","ClosedSplineCurve3","BoxGeometry","BoxBufferGeometry","CubeGeometry","vertexCount","calculateVertexCount","indexCount","calculateIndexCount","vertexBufferOffset","uvBufferOffset","indexBufferOffset","numberOfVertices","buildPlane","udir","vdir","gridX","gridY","segmentWidth","segmentHeight","widthHalf","heightHalf","depthHalf","gridX1","gridY1","vertexCounter","CircleGeometry","CircleBufferGeometry","ii","segment","CylinderBufferGeometry","nbCap","indexArray","halfHeight","generateCap","centerIndexStart","centerIndexEnd","cosTheta","sinTheta","tanTheta","indexRow","i3","generateTorso","CylinderGeometry","ConeBufferGeometry","ConeGeometry","EdgesGeometry","thresholdAngle","thresholdDot","edge","sortFunction","vert1","vert2","face1","face2","addShapeList","addShape","extrudePts","splineTube","binormal","position2","ahole","amount","bevelThickness","bevelSize","bevelSegments","bevelEnabled","curveSegments","steps","extrudePath","extrudeByPath","uvgen","UVGenerator","WorldUVGenerator","frames","TubeGeometry","FrenetFrames","shapesOffset","shapePoints","scalePt2","bs","vert","vlen","flen","getBevelVec","inPrev","inNext","v_trans_x","v_trans_y","shrink_by","v_prev_x","v_prev_y","v_next_x","v_next_y","v_prev_lensq","collinear0","v_prev_len","v_next_len","ptPrevShift_x","ptPrevShift_y","sf","v_trans_lensq","direction_eq","contourMovements","oneHoleMovements","holesMovements","verticesMovements","binormals","sidewalls","layeroffset","slen1","slen2","f4","f3","generateTopUV","wallContour","stepIndex","stepsLength","contourIndex1","contourIndex2","generateSideWallUV","layer","buildLidFaces","buildSideFaces","indexA","indexB","indexC","indexD","LatheBufferGeometry","base","inverseSegments","n1","n2","LatheGeometry","PlaneGeometry","PlaneBufferGeometry","width_half","height_half","segment_width","segment_height","offset2","RingBufferGeometry","radiusStep","thetaSegmentLevel","RingGeometry","SphereGeometry","SphereBufferGeometry","thetaEnd","verticesRow","v4","TextGeometry","TorusBufferGeometry","TorusGeometry","TorusKnotBufferGeometry","P1","P2","calculatePositionOnCurve","cu","su","quOverP","cs","TorusKnotGeometry","heightScale","taper","NoTaper","ip","jp","uva","uvb","uvc","uvd","grid","numpoints","pos2","tangents","SinusoidalTaper","smallest","tz","mat","MAX_VALUE","initialNormal3","PolyhedronGeometry","that","prepare","centroid","subdivide","azimuth","inclination","make","azi","correctUV","cols","aj","bj","rows","DodecahedronGeometry","IcosahedronGeometry","OctahedronGeometry","TetrahedronGeometry","ParametricGeometry","func","slices","stacks","sliceCount","WireframeGeometry","numEdges","ol","numTris","AxisHelper","ArrowHelper","lineGeometry","coneGeometry","headLength","headWidth","cone","setDirection","setColor","BoxHelper","BoundingBoxHelper","CameraHelper","pointMap","addLine","addPoint","setPoint","DirectionalLightHelper","lightPlane","targetLine","EdgesHelper","FaceNormalsHelper","nNormals","objGeometry","GridHelper","setColors","HemisphereLightHelper","sphereSize","lightSphere","PointLightHelper","SkeletonHelper","getBoneList","boneList","matrixWorldInv","boneMatrix","SpotLightHelper","vector2","coneLength","coneWidth","VertexNormalsHelper","objPos","objNorm","WireframeHelper","renderCallback","MorphBlendMesh","animationsMap","animationsList","numFrames","endFrame","createAnimation","setAnimationWeight","lastFrame","currentFrame","active","directionBackwards","mirroredLoop","autoCreateAnimations","firstAnimation","frameRanges","setAnimationDirectionForward","setAnimationDirectionBackward","setAnimationFPS","setAnimationDuration","setAnimationTime","getAnimationTime","getAnimationDuration","playAnimation","stopAnimation","keyframe","./quotations.svg","webpackContext","req","webpackContextResolve","resolve","ready","find","each","group_anchor","quote","group_menu","item_anchor","item_list","fullPageInstance","append","parallaxKey","scrollOverflowResetKey","destinationClasses","attr","jQuery","global","require","GPUParticleSystem","options2","spawnerOptions","particleSystem","particleSystem2","tick","clock","onWindowResize","winSize","getWindowSize","maxParticles","positionRandomness","velocity","velocityRandomness","colorRandomness","turbulence","lifetime","sizeRandomness","smoothPosition","spawnRate","horizontalSpeed","verticalSpeed","devicePixelRatio","animate","spawnParticle","PARTICLE_COUNT","PARTICLE_CONTAINERS","containerCount","PARTICLES_PER_CONTAINER","PARTICLE_CURSOR","GPUParticleShader","rand","noiseImg","particleNoiseTex","particleImg","particleSpriteTex","particleShaderMat","uTime","uScale","tNoise","tSprite","particlePositionsStartTime","particleVelColSizeLife","particleContainers","GPUParticleContainer","DPR","MAX_ATTRIBUTES","UINT8_VIEW","FLOAT_VIEW","decodeFloat","particles","deadParticles","particlesAvailableSlot","particleUpdate","particleShaderGeo","particleVertices","posStart","velCol","velX","velY","velZ","rgb","hexToRgb","geometryUpdate","fp_parallaxExtension","cover","offsetNormal","reveal","getElementsByTagName","applyHorizontal","fp_dragAndMoveExtension","background-position-y","background-position-x","head","styleSheet","createTextNode","setOption","applyProperties","fp_scrollOverflowResetExtension","prevDestiny"],"mappings":"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","file":"js/square360.homepage.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"../\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/js/square360.homepage.js\");\n","/*!\n * fullPage 3.1.2 - Extensions 0.2.2\n * https://github.com/alvarotrigo/fullPage.js\n * @license http://alvarotrigo.com/fullPage/extensions/#license\n *\n * Copyright (C) 2018 alvarotrigo.com - A project by Alvaro Trigo\n */\n!function(e,t,n,o,r){\"function\"==typeof define&&define.amd?define(function(){return e.fullpage=o(t,n),e.fullpage}):\"object\"==typeof exports?module.exports=o(t,n):t.fullpage=o(t,n)}(this,window,document,function(cn,sn){\"use strict\";var un=\"fullpage-wrapper\",fn=\".\"+un,dn=\"fp-responsive\",vn=\"fp-notransition\",pn=\"fp-destroyed\",hn=\"fp-enabled\",gn=\"fp-viewing\",mn=\"active\",Sn=\".\"+mn,bn=\"fp-completely\",wn=\"fp-section\",yn=\".\"+wn,En=yn+Sn,xn=\"fp-tableCell\",Ln=\".\"+xn,An=\"fp-auto-height\",Mn=\"fp-normal-scroll\",Tn=\"fp-nav\",On=\"#\"+Tn,kn=\"fp-tooltip\",Cn=\"fp-slide\",Hn=\".\"+Cn,zn=Hn+Sn,Rn=\"fp-slides\",In=\".\"+Rn,Nn=\"fp-slidesContainer\",Bn=\".\"+Nn,jn=\"fp-table\",Pn=\"fp-slidesNav\",Yn=\".\"+Pn,Wn=Yn+\" a\",e=\"fp-controlArrow\",Dn=\".\"+e,Vn=\"fp-prev\",Zn=Dn+\".fp-prev\",Xn=Dn+\".fp-next\";function Gn(e,t){cn.console&&cn.console[e]&&cn.console[e](\"fullPage: \"+t)}function Un(e,t){return(t=1'+ke(r,\"Section\")+\"\";var l=b.navigationTooltips[r];void 0!==l&&\"\"!==l&&(o+='
'+l+\"
\"),o+=\"\"}Un(\"ul\",n)[0].innerHTML=o,ao(Un(\"a\",Un(\"li\",Un(On)[0])[oo(Un(En)[0],yn)]),mn)}(),Un('iframe[src*=\"youtube.com/embed/\"]',w).forEach(function(e){var t,n,o;n=\"enablejsapi=1\",o=(t=e).getAttribute(\"src\"),t.setAttribute(\"src\",o+(/\\?/.test(o)?\"&\":\"?\")+n)}),Kt(\"fadingEffect\",\"apply\"),Kt(\"dropEffect\",\"init\"),Kt(\"waterEffect\",\"init\"),Kt(\"cards\",\"init\"),b.scrollOverflow&&(p=b.scrollOverflowHandler.init(b))}(),se(!0),ue(!0),re(b.autoScrolling,\"internal\"),Mt(),Dt(),\"complete\"===sn.readyState&&st(),cn.addEventListener(\"load\",st),b.scrollOverflow||Ce(),function(){for(var e=1;e<4;e++)C=setTimeout(Le,350*e)}(),N||at(\"l\"),cn.addEventListener(\"scroll\",He),cn.addEventListener(\"hashchange\",ut),cn.addEventListener(\"focus\",mt),cn.addEventListener(\"blur\",St),cn.addEventListener(\"resize\",Lt),sn.addEventListener(\"keydown\",dt),sn.addEventListener(\"keyup\",vt),[\"click\",\"touchstart\"].forEach(function(e){sn.addEventListener(e,ye)}),b.normalScrollElements&&([\"mouseenter\",\"touchstart\"].forEach(function(e){Ee(e,!1)}),[\"mouseleave\",\"touchend\"].forEach(function(e){Ee(e,!0)})),Kt(\"dragAndMove\",\"turnOffTouch\"));var U,F,_,Q=!1,J=0,K=0,$=0,q=0,ee=(new Date).getTime(),te=0,ne=0,oe=y;return m}function re(e,t){e||Gt(0),en(\"autoScrolling\",e,t);var n=Un(En)[0];if(b.autoScrolling&&!b.scrollBar)Kn(s,{overflow:\"hidden\",height:\"100%\"}),ie(V.recordHistory,\"internal\"),Kn(w,{\"-ms-touch-action\":\"none\",\"touch-action\":\"none\"}),null!=n&&Gt(n.offsetTop);else if(Kn(s,{overflow:\"visible\",height:\"initial\"}),ie(!!b.autoScrolling&&V.recordHistory,\"internal\"),Kn(w,{\"-ms-touch-action\":\"\",\"touch-action\":\"\"}),_t(w),null!=n){var o=Fe(n.offsetTop);o.element.scrollTo(0,o.options)}yo(w,\"setAutoScrolling\",e)}function ie(e,t){en(\"recordHistory\",e,t)}function le(e,t){\"internal\"!==t&&Jt(\"fadingEffect\")&&m.fadingEffect.update(e),Jt(\"cards\")&&m.cards.update(e),en(\"scrollingSpeed\",e,t)}function ae(e,t){en(\"fitToSection\",e,t)}function ce(e){e?(function(){var e,t=\"\";cn.addEventListener?e=\"addEventListener\":(e=\"attachEvent\",t=\"on\");var n=\"onwheel\"in sn.createElement(\"div\")?\"wheel\":void 0!==sn.onmousewheel?\"mousewheel\":\"DOMMouseScroll\",o=!!j&&{passive:!1};\"DOMMouseScroll\"==n?sn[e](t+\"MozMousePixelScroll\",Ye,o):sn[e](t+n,Ye,o)}(),w.addEventListener(\"mousedown\",pt),w.addEventListener(\"mouseup\",ht)):(sn.addEventListener?(sn.removeEventListener(\"mousewheel\",Ye,!1),sn.removeEventListener(\"wheel\",Ye,!1),sn.removeEventListener(\"MozMousePixelScroll\",Ye,!1)):sn.detachEvent(\"onmousewheel\",Ye),w.removeEventListener(\"mousedown\",pt),w.removeEventListener(\"mouseup\",ht))}function se(t,e){void 0!==e?(e=e.replace(/ /g,\"\").split(\",\")).forEach(function(e){Ft(t,e,\"m\")}):Ft(t,\"all\",\"m\"),yo(w,\"setAllowScrolling\",{value:t,directions:e})}function ue(e){e?(ce(!0),function(){if((r||i)&&(!Jt(\"dragAndMove\")||\"mouseonly\"===b.dragAndMove)){b.autoScrolling&&(g.removeEventListener(R.touchmove,Ie,{passive:!1}),g.addEventListener(R.touchmove,Ie,{passive:!1}));var e=b.touchWrapper;e.removeEventListener(R.touchstart,je),e.removeEventListener(R.touchmove,Ne,{passive:!1}),e.addEventListener(R.touchstart,je),e.addEventListener(R.touchmove,Ne,{passive:!1})}}()):(ce(!1),function(){if(r||i){b.autoScrolling&&(g.removeEventListener(R.touchmove,Ne,{passive:!1}),g.removeEventListener(R.touchmove,Ie,{passive:!1}));var e=b.touchWrapper;e.removeEventListener(R.touchstart,je),e.removeEventListener(R.touchmove,Ne,{passive:!1})}}())}function fe(t,e){void 0!==e?(e=e.replace(/ /g,\"\").split(\",\")).forEach(function(e){Ft(t,e,\"k\")}):(Ft(t,\"all\",\"k\"),b.keyboardScrolling=t)}function de(){var e=$n(Un(En)[0],yn);e||!b.loopTop&&!b.continuousVertical||(e=no(Un(yn))),null!=e&&Ze(e,null,!0)}function ve(){var e=qn(Un(En)[0],yn);e||!b.loopBottom&&!b.continuousVertical||(e=Un(yn)[0]),null!=e&&Ze(e,null,!1)}function pe(e,t){le(0,\"internal\"),he(e,t),le(V.scrollingSpeed,\"internal\")}function he(e,t){var n=Nt(e);void 0!==t?Bt(e,t):null!=n&&Ze(n)}function ge(e){We(\"right\",e)}function me(e){We(\"left\",e)}function Se(e){if(!_n(w,pn)){E=!0,y=Qn(),f=Jn();for(var t=Un(yn),n=0;n'),Lo('
')],ho(Un(In,l)[0],a),\"#fff\"!==b.controlArrowColor&&(Kn(Un(Xn,l),{\"border-color\":\"transparent transparent transparent \"+b.controlArrowColor}),Kn(Un(Zn,l),{\"border-color\":\"transparent \"+b.controlArrowColor+\" transparent transparent\"})),b.loopHorizontal||ro(Un(Zn,l))),b.slidesNavigation&&function(e,t){so(Lo('
    '),e);var n=Un(Yn,e)[0];ao(n,\"fp-\"+b.slidesNavPosition);for(var o=0;o'+ke(o,\"Slide\",r)+\"\"),Un(\"ul\",n)[0])}Kn(n,{\"margin-left\":\"-\"+n.innerWidth/2+\"px\"}),ao(Un(\"a\",Un(\"li\",n)[0]),mn)}(e,n)),t.forEach(function(e){Kn(e,{width:r+\"%\"}),b.verticalCentered&&zt(e)});var s=Un(zn,e)[0];null!=s&&(0!==oo(Un(En),yn)||0===oo(Un(En),yn)&&0!==oo(s))?(Xt(s,\"internal\"),ao(s,\"fp-initial\")):ao(t[0],mn)}function Te(e){return b.offsetSections&&m.offsetSections?Math.round(m.offsetSections.getWindowHeight(e)):Qn()}function Oe(e,t){t||null!=Un(En)[0]||ao(e,mn),o=Un(En)[0],Kn(e,{height:Te(e)+\"px\"}),b.paddingTop&&Kn(e,{\"padding-top\":b.paddingTop}),b.paddingBottom&&Kn(e,{\"padding-bottom\":b.paddingBottom}),void 0!==b.sectionsColor[t]&&Kn(e,{\"background-color\":b.sectionsColor[t]}),void 0!==b.anchors[t]&&e.setAttribute(\"data-anchor\",b.anchors[t])}function ke(e,t,n){var o=\"Section\"===t?b.anchors[e]:n.getAttribute(\"data-anchor\");return b.navigationTooltips[e]||o||t+\" \"+(e+1)}function Ce(){var e,t,n=Un(En)[0];ao(n,bn),Ke(n),Je(),qe(n),b.scrollOverflow&&b.scrollOverflowHandler.afterLoad(),e=ft(),t=Nt(e.section),e.section&&t&&(void 0===t||oo(t)!==oo(o))||!wo(b.afterLoad)||Xe(\"afterLoad\",{activeSection:n,element:n,direction:null,anchorLink:n.getAttribute(\"data-anchor\"),sectionIndex:oo(n,yn)}),wo(b.afterRender)&&Xe(\"afterRender\"),yo(w,\"afterRender\")}function He(){var e;if(yo(w,\"onScroll\"),!E&&(!b.autoScrolling||b.scrollBar||Jt(\"dragAndMove\"))&&!qt()){var t=Jt(\"dragAndMove\")?Math.abs(m.dragAndMove.getCurrentScroll()):mo(),n=0,o=t+Qn()/2,r=(Jt(\"dragAndMove\")?m.dragAndMove.getDocumentHeight():g.offsetHeight-Qn())===t,i=Un(yn);if(r)n=i.length-1;else if(t)for(var l=0;lMath.abs(J-$)?!a&&Math.abs(K-q)>Jn()/100*b.touchSensitivity&&(qcn.innerHeight/100*b.touchSensitivity&&($>4,n=(15&r)<<4|(i=s.indexOf(e.charAt(c++)))>>2,o=(3&i)<<6|(l=s.indexOf(e.charAt(c++))),a+=String.fromCharCode(t),64!=i&&(a+=String.fromCharCode(n)),64!=l&&(a+=String.fromCharCode(o));return a=function(e){for(var t,n=\"\",o=0,r=0,i=0;one&&v.m.down&&ve()),ne=e.pageY)}function wt(e,t,n){var o=po(e,yn),r={slides:e,destiny:t,direction:n,destinyPos:{left:t.offsetLeft},slideIndex:oo(t),section:o,sectionIndex:oo(o,yn),anchorLink:o.getAttribute(\"data-anchor\"),slidesNav:Un(Yn,o)[0],slideAnchor:Wt(t),prevSlide:Un(zn,o)[0],prevSlideIndex:oo(Un(zn,o)[0]),localIsResizing:E};r.xMovement=Ht(r.prevSlideIndex,r.slideIndex),r.direction=r.direction?r.direction:r.xMovement,r.localIsResizing||(x=!1),Kt(\"parallax\",\"applyHorizontal\",r),Kt(\"cards\",\"apply\",r),Kt(\"dropEffect\",\"apply\",r),Kt(\"waterEffect\",\"apply\",r),b.onSlideLeave&&!r.localIsResizing&&\"none\"!==r.xMovement&&wo(b.onSlideLeave)&&!1===Xe(\"onSlideLeave\",r)?a=!1:(Jt(\"dropEffect\")&&b.dropEffect||(ao(t,mn),co(So(t),mn)),r.localIsResizing||(tt(r.prevSlide),Ke(t)),yt(r),_n(o,mn)&&!r.localIsResizing&&Pt(r.slideIndex,r.slideAnchor,r.anchorLink,r.sectionIndex),m.continuousHorizontal&&m.continuousHorizontal.apply(r),qt()?Et(r):xt(e,r,!0),b.interlockedSlides&&m.interlockedSlides&&(Jt(\"continuousHorizontal\")&&void 0!==n&&n!==r.xMovement||m.interlockedSlides.apply(r)))}function yt(e){!b.loopHorizontal&&b.controlArrows&&(xo(Un(Zn,e.section),0!==e.slideIndex),xo(Un(Xn,e.section),null!=to(e.destiny)))}function Et(e){var t,n;m.continuousHorizontal&&m.continuousHorizontal.afterSlideLoads(e),t=e.slidesNav,n=e.slideIndex,b.slidesNavigation&&null!=t&&(co(Un(Sn,t),mn),ao(Un(\"a\",Un(\"li\",t)[n]),mn)),e.localIsResizing||(Kt(\"parallax\",\"afterSlideLoads\"),Kt(\"scrollOverflowReset\",\"setPrevious\",e.prevSlide),Kt(\"scrollOverflowReset\",\"reset\"),wo(b.afterSlideLoad)&&Xe(\"afterSlideLoad\",e),x=!0,qe(e.destiny)),a=!1,Jt(\"interlockedSlides\")&&m.interlockedSlides.apply(e)}function xt(e,t,n){var o=t.destinyPos;if(b.css3){var r=\"translate3d(-\"+Math.round(o.left)+\"px, 0px, 0px)\";m.test.translate3dH[t.sectionIndex]=r,Jt(\"dragAndMove\")&&void 0!==t.isInterlockedSlide||Tt(Un(Bn,e)),Kn(Un(Bn,e),Ut(r)),M=setTimeout(function(){n&&Et(t)},b.scrollingSpeed)}else m.test.left[t.sectionIndex]=Math.round(o.left),nn(e,Math.round(o.left),b.scrollingSpeed,function(){n&&Et(t)})}function Lt(){clearTimeout(h),h=setTimeout(function(){for(var e=0;e<4;e++)L=setTimeout(At,200*e)},200)}function At(){if(E=!0,yo(w,\"onResize\"),Mt(),r){var e=sn.activeElement;if(!Eo(e,\"textarea\")&&!Eo(e,\"input\")&&!Eo(e,\"select\")){var t=Qn();Math.abs(t-oe)>20*Math.max(oe,t)/100&&(Se(!0),oe=t)}}else Le();E=!1}function Mt(){var e=b.responsive||b.responsiveWidth,t=b.responsiveHeight,n=e&&cn.innerWidtho+this.options.directionLockThreshold?this.directionLocked=\"h\":o>=e+this.options.directionLockThreshold?this.directionLocked=\"v\":this.directionLocked=\"n\"),\"h\"==this.directionLocked){if(\"vertical\"==this.options.eventPassthrough)t.preventDefault();else if(\"horizontal\"==this.options.eventPassthrough)return void(this.initiated=!1);h=0}else if(\"v\"==this.directionLocked){if(\"horizontal\"==this.options.eventPassthrough)t.preventDefault();else if(\"vertical\"==this.options.eventPassthrough)return void(this.initiated=!1);r=0}r=this.hasHorizontalScroll?r:0,h=this.hasVerticalScroll?h:0,i=this.x+r,s=this.y+h,(0-this.scrollerWidth;){for(this.pages[r]=[],o=t=0;o>-this.scrollerHeight;)this.pages[r][t]={x:p.max(a,this.maxScrollX),y:p.max(o,this.maxScrollY),width:l,height:c,cx:a-s,cy:o-e},o-=c,t++;a-=l,r++}else for(t=(n=this.options.snap).length,i=-1;rthis.maxScrollX&&h++;this.goToPage(this.currentPage.pageX||0,this.currentPage.pageY||0,0),this.options.snapThreshold%1==0?(this.snapThresholdX=this.options.snapThreshold,this.snapThresholdY=this.options.snapThreshold):(this.snapThresholdX=p.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].width*this.options.snapThreshold),this.snapThresholdY=p.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].height*this.options.snapThreshold))}}),this.on(\"flick\",function(){var t=this.options.snapSpeed||p.max(p.max(p.min(p.abs(this.x-this.startX),1e3),p.min(p.abs(this.y-this.startY),1e3)),300);this.goToPage(this.currentPage.pageX+this.directionX,this.currentPage.pageY+this.directionY,t)})},_nearestSnap:function(t,i){if(!this.pages.length)return{x:0,y:0,pageX:0,pageY:0};var s=0,e=this.pages.length,o=0;if(p.abs(t-this.absStartX)=this.pages[s][0].cx){t=this.pages[s][0].x;break}for(e=this.pages[s].length;o=this.pages[0][o].cy){i=this.pages[0][o].y;break}return s==this.currentPage.pageX&&((s+=this.directionX)<0?s=0:s>=this.pages.length&&(s=this.pages.length-1),t=this.pages[s][0].x),o==this.currentPage.pageY&&((o+=this.directionY)<0?o=0:o>=this.pages[0].length&&(o=this.pages[0].length-1),i=this.pages[0][o].y),{x:t,y:i,pageX:s,pageY:o}},goToPage:function(t,i,s,e){e=e||this.options.bounceEasing,t>=this.pages.length?t=this.pages.length-1:t<0&&(t=0),i>=this.pages[t].length?i=this.pages[t].length-1:i<0&&(i=0);var o=this.pages[t][i].x,n=this.pages[t][i].y;s=void 0===s?this.options.snapSpeed||p.max(p.max(p.min(p.abs(o-this.x),1e3),p.min(p.abs(n-this.y),1e3)),300):s,this.currentPage={x:o,y:n,pageX:t,pageY:i},this.scrollTo(o,n,s,e)},next:function(t,i){var s=this.currentPage.pageX,e=this.currentPage.pageY;++s>=this.pages.length&&this.hasVerticalScroll&&(s=0,e++),this.goToPage(s,e,t,i)},prev:function(t,i){var s=this.currentPage.pageX,e=this.currentPage.pageY;--s<0&&this.hasVerticalScroll&&(s=0,e--),this.goToPage(s,e,t,i)},_initKeys:function(t){var i,s={pageUp:33,pageDown:34,end:35,home:36,left:37,up:38,right:39,down:40};if(\"object\"==typeof this.options.keyBindings)for(i in this.options.keyBindings)\"string\"==typeof this.options.keyBindings[i]&&(this.options.keyBindings[i]=this.options.keyBindings[i].toUpperCase().charCodeAt(0));else this.options.keyBindings={};for(i in s)this.options.keyBindings[i]=this.options.keyBindings[i]||s[i];m.addEvent(r,\"keydown\",this),this.on(\"destroy\",function(){m.removeEvent(r,\"keydown\",this)})},_key:function(t){if(this.enabled){var i,s=this.options.snap,e=s?this.currentPage.pageX:this.x,o=s?this.currentPage.pageY:this.y,n=m.getTime(),r=this.keyTime||0;switch(this.options.useTransition&&this.isInTransition&&(i=this.getComputedPosition(),this._translate(p.round(i.x),p.round(i.y)),this.isInTransition=!1),this.keyAcceleration=n-r<200?p.min(this.keyAcceleration+.25,50):0,t.keyCode){case this.options.keyBindings.pageUp:this.hasHorizontalScroll&&!this.hasVerticalScroll?e+=s?1:this.wrapperWidth:o+=s?1:this.wrapperHeight;break;case this.options.keyBindings.pageDown:this.hasHorizontalScroll&&!this.hasVerticalScroll?e-=s?1:this.wrapperWidth:o-=s?1:this.wrapperHeight;break;case this.options.keyBindings.end:e=s?this.pages.length-1:this.maxScrollX,o=s?this.pages[0].length-1:this.maxScrollY;break;case this.options.keyBindings.home:o=e=0;break;case this.options.keyBindings.left:e+=s?-1:5+this.keyAcceleration>>0;break;case this.options.keyBindings.up:o+=s?1:5+this.keyAcceleration>>0;break;case this.options.keyBindings.right:e-=s?-1:5+this.keyAcceleration>>0;break;case this.options.keyBindings.down:o-=s?1:5+this.keyAcceleration>>0;break;default:return}s?this.goToPage(e,o):(0this.maxBoundaryX?t=\"scale\"==this.options.shrink?(this.width=p.max(this.indicatorWidth-(t-this.maxPosX),8),this.indicatorStyle.width=this.width+\"px\",this.maxPosX+this.indicatorWidth-this.width):this.maxBoundaryX:\"scale\"==this.options.shrink&&this.width!=this.indicatorWidth&&(this.width=this.indicatorWidth,this.indicatorStyle.width=this.width+\"px\"),ithis.maxBoundaryY?i=\"scale\"==this.options.shrink?(this.height=p.max(this.indicatorHeight-3*(i-this.maxPosY),8),this.indicatorStyle.height=this.height+\"px\",this.maxPosY+this.indicatorHeight-this.height):this.maxBoundaryY:\"scale\"==this.options.shrink&&this.height!=this.indicatorHeight&&(this.height=this.indicatorHeight,this.indicatorStyle.height=this.height+\"px\")),this.x=t,this.y=i,this.scroller.options.useTransform?this.indicatorStyle[m.style.transform]=\"translate(\"+t+\"px,\"+i+\"px)\"+this.scroller.translateZ:(this.indicatorStyle.left=t+\"px\",this.indicatorStyle.top=i+\"px\")},_pos:function(t,i){t<0?t=0:t>this.maxPosX&&(t=this.maxPosX),i<0?i=0:i>this.maxPosY&&(i=this.maxPosY),t=this.options.listenX?p.round(t/this.sizeRatioX):this.scroller.x,i=this.options.listenY?p.round(i/this.sizeRatioY):this.scroller.y,this.scroller.scrollTo(t,i)},fade:function(t,i){if(!i||this.visible){clearTimeout(this.fadeTimeout),this.fadeTimeout=null;var s=t?250:500,e=t?0:300;t=t?\"1\":\"0\",this.wrapperStyle[m.style.transitionDuration]=s+\"ms\",this.fadeTimeout=setTimeout(function(t){this.wrapperStyle.opacity=t,this.visible=+t}.bind(this,t),e)}}},t.utils=m,\"undefined\"!=typeof module&&module.exports?module.exports=t:\"function\"==typeof define&&define.amd?(define(function(){return t}),void 0!==r&&(r.IScroll=t)):r.IScroll=t}(window,document,Math),\n/*!\n* Scrolloverflow 2.0.7 module for fullPage.js >= 3\n* https://github.com/alvarotrigo/fullPage.js\n* @license MIT licensed\n*\n* Copyright (C) 2015 alvarotrigo.com - A project by Alvaro Trigo\n*/\nfunction(l,c){l.fp_scrolloverflow=function(){l.IScroll||(l.IScroll=module.exports);var s=\"fp-scrollable\",n=\".\"+s,t=\".active\",d=\".fp-section\",e=d+t,o=\".fp-slide\",u=\".fp-tableCell\";function r(){var p=this;function s(){fp_utils.hasClass(c.body,\"fp-responsive\")?i(e):i(t)}function t(t){if(!fp_utils.hasClass(t,\"fp-noscroll\")){fp_utils.css(t,{overflow:\"hidden\"});var i,s,e,o=p.options.scrollOverflowHandler,n=o.wrapContent(),r=fp_utils.closest(t,d),h=o.scrollable(t),a=(s=r,null!=(e=fp_utils.closest(s,d))?parseInt(getComputedStyle(e)[\"padding-bottom\"])+parseInt(getComputedStyle(e)[\"padding-top\"]):0);null!=h?i=o.scrollHeight(t):(i=t.scrollHeight,p.options.verticalCentered&&(i=f(u,t)[0].scrollHeight));var l=fp_utils.getWindowHeight(),c=l-a;l=i.scrollHeight}},scrollable:function(t){return f(\".fp-slides\",t).length?f(n,f(\".fp-slide.active\",t)[0])[0]:f(n,t)[0]},scrollHeight:function(t){return f(\".fp-scroller\",f(n,t)[0])[0].scrollHeight},remove:function(t){if(null!=t){var i=f(n,t)[0];if(null!=i){var s=i.fp_iscrollInstance;null!=s&&s.destroy(),i.fp_iscrollInstance=null,fp_utils.unwrap(f(\".fp-scroller\",t)[0]),fp_utils.unwrap(f(n,t)[0])}}},update:function(t,i){clearTimeout(a.refreshId),a.refreshId=setTimeout(function(){a.iScrollInstances.forEach(function(t){t.refresh(),fullpage_api.silentMoveTo(fp_utils.index(f(e)[0])+1)})},150),fp_utils.css(f(n,t)[0],{height:i+\"px\"}),h.verticalCentered&&fp_utils.css(f(n,t)[0].parentNode,{height:i+\"px\"})},wrapContent:function(){var t=c.createElement(\"div\");t.className=s;var i=c.createElement(\"div\");return i.className=\"fp-scroller\",{scrollable:t,scroller:i}}};return{iscrollHandler:a}}()}(window,document);\n//# sourceMappingURL=scrolloverflow.min.js.map\n","var self = self || {};// File:src/Three.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nvar THREE = { REVISION: '77' };\r\n\r\n//\r\n\r\nif ( typeof define === 'function' && define.amd ) {\r\n\r\n\tdefine( 'three', THREE );\r\n\r\n} else if ( 'undefined' !== typeof exports && 'undefined' !== typeof module ) {\r\n\r\n\tmodule.exports = THREE;\r\n\r\n}\r\n\r\n// Polyfills\r\n\r\nif ( Number.EPSILON === undefined ) {\r\n\r\n\tNumber.EPSILON = Math.pow( 2, - 52 );\r\n\r\n}\r\n\r\n//\r\n\r\nif ( Math.sign === undefined ) {\r\n\r\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign\r\n\r\n\tMath.sign = function ( x ) {\r\n\r\n\t\treturn ( x < 0 ) ? - 1 : ( x > 0 ) ? 1 : + x;\r\n\r\n\t};\r\n\r\n}\r\n\r\nif ( Function.prototype.name === undefined ) {\r\n\r\n\t// Missing in IE9-11.\r\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\r\n\r\n\tObject.defineProperty( Function.prototype, 'name', {\r\n\r\n\t\tget: function () {\r\n\r\n\t\t\treturn this.toString().match( /^\\s*function\\s*(\\S*)\\s*\\(/ )[ 1 ];\r\n\r\n\t\t}\r\n\r\n\t} );\r\n\r\n}\r\n\r\nif ( Object.assign === undefined ) {\r\n\r\n\t// Missing in IE.\r\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\r\n\r\n\t( function () {\r\n\r\n\t\tObject.assign = function ( target ) {\r\n\r\n\t\t\t'use strict';\r\n\r\n\t\t\tif ( target === undefined || target === null ) {\r\n\r\n\t\t\t\tthrow new TypeError( 'Cannot convert undefined or null to object' );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar output = Object( target );\r\n\r\n\t\t\tfor ( var index = 1; index < arguments.length; index ++ ) {\r\n\r\n\t\t\t\tvar source = arguments[ index ];\r\n\r\n\t\t\t\tif ( source !== undefined && source !== null ) {\r\n\r\n\t\t\t\t\tfor ( var nextKey in source ) {\r\n\r\n\t\t\t\t\t\tif ( Object.prototype.hasOwnProperty.call( source, nextKey ) ) {\r\n\r\n\t\t\t\t\t\t\toutput[ nextKey ] = source[ nextKey ];\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn output;\r\n\r\n\t\t};\r\n\r\n\t} )();\r\n\r\n}\r\n\r\n//\r\n\r\nObject.assign( THREE, {\r\n\r\n\t// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.button\r\n\r\n\tMOUSE: { LEFT: 0, MIDDLE: 1, RIGHT: 2 },\r\n\r\n\t// GL STATE CONSTANTS\r\n\r\n\tCullFaceNone: 0,\r\n\tCullFaceBack: 1,\r\n\tCullFaceFront: 2,\r\n\tCullFaceFrontBack: 3,\r\n\r\n\tFrontFaceDirectionCW: 0,\r\n\tFrontFaceDirectionCCW: 1,\r\n\r\n\t// SHADOWING TYPES\r\n\r\n\tBasicShadowMap: 0,\r\n\tPCFShadowMap: 1,\r\n\tPCFSoftShadowMap: 2,\r\n\r\n\t// MATERIAL CONSTANTS\r\n\r\n\t// side\r\n\r\n\tFrontSide: 0,\r\n\tBackSide: 1,\r\n\tDoubleSide: 2,\r\n\r\n\t// shading\r\n\r\n\tFlatShading: 1,\r\n\tSmoothShading: 2,\r\n\r\n\t// colors\r\n\r\n\tNoColors: 0,\r\n\tFaceColors: 1,\r\n\tVertexColors: 2,\r\n\r\n\t// blending modes\r\n\r\n\tNoBlending: 0,\r\n\tNormalBlending: 1,\r\n\tAdditiveBlending: 2,\r\n\tSubtractiveBlending: 3,\r\n\tMultiplyBlending: 4,\r\n\tCustomBlending: 5,\r\n\r\n\t// custom blending equations\r\n\t// (numbers start from 100 not to clash with other\r\n\t// mappings to OpenGL constants defined in Texture.js)\r\n\r\n\tAddEquation: 100,\r\n\tSubtractEquation: 101,\r\n\tReverseSubtractEquation: 102,\r\n\tMinEquation: 103,\r\n\tMaxEquation: 104,\r\n\r\n\t// custom blending destination factors\r\n\r\n\tZeroFactor: 200,\r\n\tOneFactor: 201,\r\n\tSrcColorFactor: 202,\r\n\tOneMinusSrcColorFactor: 203,\r\n\tSrcAlphaFactor: 204,\r\n\tOneMinusSrcAlphaFactor: 205,\r\n\tDstAlphaFactor: 206,\r\n\tOneMinusDstAlphaFactor: 207,\r\n\r\n\t// custom blending source factors\r\n\r\n\t//ZeroFactor: 200,\r\n\t//OneFactor: 201,\r\n\t//SrcAlphaFactor: 204,\r\n\t//OneMinusSrcAlphaFactor: 205,\r\n\t//DstAlphaFactor: 206,\r\n\t//OneMinusDstAlphaFactor: 207,\r\n\tDstColorFactor: 208,\r\n\tOneMinusDstColorFactor: 209,\r\n\tSrcAlphaSaturateFactor: 210,\r\n\r\n\t// depth modes\r\n\r\n\tNeverDepth: 0,\r\n\tAlwaysDepth: 1,\r\n\tLessDepth: 2,\r\n\tLessEqualDepth: 3,\r\n\tEqualDepth: 4,\r\n\tGreaterEqualDepth: 5,\r\n\tGreaterDepth: 6,\r\n\tNotEqualDepth: 7,\r\n\r\n\r\n\t// TEXTURE CONSTANTS\r\n\r\n\tMultiplyOperation: 0,\r\n\tMixOperation: 1,\r\n\tAddOperation: 2,\r\n\r\n\t// Tone Mapping modes\r\n\r\n\tNoToneMapping: 0, // do not do any tone mapping, not even exposure (required for special purpose passes.)\r\n\tLinearToneMapping: 1, // only apply exposure.\r\n\tReinhardToneMapping: 2,\r\n\tUncharted2ToneMapping: 3, // John Hable\r\n\tCineonToneMapping: 4, // optimized filmic operator by Jim Hejl and Richard Burgess-Dawson\r\n\r\n\t// Mapping modes\r\n\r\n\tUVMapping: 300,\r\n\r\n\tCubeReflectionMapping: 301,\r\n\tCubeRefractionMapping: 302,\r\n\r\n\tEquirectangularReflectionMapping: 303,\r\n\tEquirectangularRefractionMapping: 304,\r\n\r\n\tSphericalReflectionMapping: 305,\r\n\tCubeUVReflectionMapping: 306,\r\n\tCubeUVRefractionMapping: 307,\r\n\r\n\t// Wrapping modes\r\n\r\n\tRepeatWrapping: 1000,\r\n\tClampToEdgeWrapping: 1001,\r\n\tMirroredRepeatWrapping: 1002,\r\n\r\n\t// Filters\r\n\r\n\tNearestFilter: 1003,\r\n\tNearestMipMapNearestFilter: 1004,\r\n\tNearestMipMapLinearFilter: 1005,\r\n\tLinearFilter: 1006,\r\n\tLinearMipMapNearestFilter: 1007,\r\n\tLinearMipMapLinearFilter: 1008,\r\n\r\n\t// Data types\r\n\r\n\tUnsignedByteType: 1009,\r\n\tByteType: 1010,\r\n\tShortType: 1011,\r\n\tUnsignedShortType: 1012,\r\n\tIntType: 1013,\r\n\tUnsignedIntType: 1014,\r\n\tFloatType: 1015,\r\n\tHalfFloatType: 1025,\r\n\r\n\t// Pixel types\r\n\r\n\t//UnsignedByteType: 1009,\r\n\tUnsignedShort4444Type: 1016,\r\n\tUnsignedShort5551Type: 1017,\r\n\tUnsignedShort565Type: 1018,\r\n\r\n\t// Pixel formats\r\n\r\n\tAlphaFormat: 1019,\r\n\tRGBFormat: 1020,\r\n\tRGBAFormat: 1021,\r\n\tLuminanceFormat: 1022,\r\n\tLuminanceAlphaFormat: 1023,\r\n\t// THREE.RGBEFormat handled as THREE.RGBAFormat in shaders\r\n\tRGBEFormat: THREE.RGBAFormat, //1024;\r\n\tDepthFormat: 1026,\r\n\r\n\t// DDS / ST3C Compressed texture formats\r\n\r\n\tRGB_S3TC_DXT1_Format: 2001,\r\n\tRGBA_S3TC_DXT1_Format: 2002,\r\n\tRGBA_S3TC_DXT3_Format: 2003,\r\n\tRGBA_S3TC_DXT5_Format: 2004,\r\n\r\n\t// PVRTC compressed texture formats\r\n\r\n\tRGB_PVRTC_4BPPV1_Format: 2100,\r\n\tRGB_PVRTC_2BPPV1_Format: 2101,\r\n\tRGBA_PVRTC_4BPPV1_Format: 2102,\r\n\tRGBA_PVRTC_2BPPV1_Format: 2103,\r\n\r\n\t// ETC compressed texture formats\r\n\r\n\tRGB_ETC1_Format: 2151,\r\n\r\n\t// Loop styles for AnimationAction\r\n\r\n\tLoopOnce: 2200,\r\n\tLoopRepeat: 2201,\r\n\tLoopPingPong: 2202,\r\n\r\n\t// Interpolation\r\n\r\n\tInterpolateDiscrete: 2300,\r\n\tInterpolateLinear: 2301,\r\n\tInterpolateSmooth: 2302,\r\n\r\n\t// Interpolant ending modes\r\n\r\n\tZeroCurvatureEnding: 2400,\r\n\tZeroSlopeEnding: 2401,\r\n\tWrapAroundEnding: 2402,\r\n\r\n\t// Triangle Draw modes\r\n\r\n\tTrianglesDrawMode: 0,\r\n\tTriangleStripDrawMode: 1,\r\n\tTriangleFanDrawMode: 2,\r\n\r\n\t// Texture Encodings\r\n\r\n\tLinearEncoding: 3000, // No encoding at all.\r\n\tsRGBEncoding: 3001,\r\n\tGammaEncoding: 3007, // uses GAMMA_FACTOR, for backwards compatibility with WebGLRenderer.gammaInput/gammaOutput\r\n\r\n\t// The following Texture Encodings are for RGB-only (no alpha) HDR light emission sources.\r\n\t// These encodings should not specified as output encodings except in rare situations.\r\n\tRGBEEncoding: 3002, // AKA Radiance.\r\n\tLogLuvEncoding: 3003,\r\n\tRGBM7Encoding: 3004,\r\n\tRGBM16Encoding: 3005,\r\n\tRGBDEncoding: 3006, // MaxRange is 256.\r\n\r\n\t// Depth packing strategies\r\n\r\n\tBasicDepthPacking: 3200, // for writing to float textures for high precision or for visualizing results in RGB buffers\r\n\tRGBADepthPacking: 3201 // for packing into RGBA buffers.\r\n\r\n} );\r\n\r\n// File:src/math/Color.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Color = function ( r, g, b ) {\r\n\r\n\tif ( g === undefined && b === undefined ) {\r\n\r\n\t\t// r is THREE.Color, hex or string\r\n\t\treturn this.set( r );\r\n\r\n\t}\r\n\r\n\treturn this.setRGB( r, g, b );\r\n\r\n};\r\n\r\nTHREE.Color.prototype = {\r\n\r\n\tconstructor: THREE.Color,\r\n\r\n\tr: 1, g: 1, b: 1,\r\n\r\n\tset: function ( value ) {\r\n\r\n\t\tif ( value instanceof THREE.Color ) {\r\n\r\n\t\t\tthis.copy( value );\r\n\r\n\t\t} else if ( typeof value === 'number' ) {\r\n\r\n\t\t\tthis.setHex( value );\r\n\r\n\t\t} else if ( typeof value === 'string' ) {\r\n\r\n\t\t\tthis.setStyle( value );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetScalar: function ( scalar ) {\r\n\r\n\t\tthis.r = scalar;\r\n\t\tthis.g = scalar;\r\n\t\tthis.b = scalar;\r\n\r\n\t},\r\n\r\n\tsetHex: function ( hex ) {\r\n\r\n\t\thex = Math.floor( hex );\r\n\r\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\r\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\r\n\t\tthis.b = ( hex & 255 ) / 255;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetRGB: function ( r, g, b ) {\r\n\r\n\t\tthis.r = r;\r\n\t\tthis.g = g;\r\n\t\tthis.b = b;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetHSL: function () {\r\n\r\n\t\tfunction hue2rgb( p, q, t ) {\r\n\r\n\t\t\tif ( t < 0 ) t += 1;\r\n\t\t\tif ( t > 1 ) t -= 1;\r\n\t\t\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\r\n\t\t\tif ( t < 1 / 2 ) return q;\r\n\t\t\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\r\n\t\t\treturn p;\r\n\r\n\t\t}\r\n\r\n\t\treturn function ( h, s, l ) {\r\n\r\n\t\t\t// h,s,l ranges are in 0.0 - 1.0\r\n\t\t\th = THREE.Math.euclideanModulo( h, 1 );\r\n\t\t\ts = THREE.Math.clamp( s, 0, 1 );\r\n\t\t\tl = THREE.Math.clamp( l, 0, 1 );\r\n\r\n\t\t\tif ( s === 0 ) {\r\n\r\n\t\t\t\tthis.r = this.g = this.b = l;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tvar p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\r\n\t\t\t\tvar q = ( 2 * l ) - p;\r\n\r\n\t\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\r\n\t\t\t\tthis.g = hue2rgb( q, p, h );\r\n\t\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tsetStyle: function ( style ) {\r\n\r\n\t\tfunction handleAlpha( string ) {\r\n\r\n\t\t\tif ( string === undefined ) return;\r\n\r\n\t\t\tif ( parseFloat( string ) < 1 ) {\r\n\r\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\r\n\t\tvar m;\r\n\r\n\t\tif ( m = /^((?:rgb|hsl)a?)\\(\\s*([^\\)]*)\\)/.exec( style ) ) {\r\n\r\n\t\t\t// rgb / hsl\r\n\r\n\t\t\tvar color;\r\n\t\t\tvar name = m[ 1 ];\r\n\t\t\tvar components = m[ 2 ];\r\n\r\n\t\t\tswitch ( name ) {\r\n\r\n\t\t\t\tcase 'rgb':\r\n\t\t\t\tcase 'rgba':\r\n\r\n\t\t\t\t\tif ( color = /^(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\r\n\r\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\r\n\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\r\n\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\r\n\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\r\n\r\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\r\n\r\n\t\t\t\t\t\treturn this;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( color = /^(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\r\n\r\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\r\n\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\r\n\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\r\n\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\r\n\r\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\r\n\r\n\t\t\t\t\t\treturn this;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'hsl':\r\n\t\t\t\tcase 'hsla':\r\n\r\n\t\t\t\t\tif ( color = /^([0-9]*\\.?[0-9]+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\r\n\r\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\r\n\t\t\t\t\t\tvar h = parseFloat( color[ 1 ] ) / 360;\r\n\t\t\t\t\t\tvar s = parseInt( color[ 2 ], 10 ) / 100;\r\n\t\t\t\t\t\tvar l = parseInt( color[ 3 ], 10 ) / 100;\r\n\r\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\r\n\r\n\t\t\t\t\t\treturn this.setHSL( h, s, l );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( m = /^\\#([A-Fa-f0-9]+)$/.exec( style ) ) {\r\n\r\n\t\t\t// hex color\r\n\r\n\t\t\tvar hex = m[ 1 ];\r\n\t\t\tvar size = hex.length;\r\n\r\n\t\t\tif ( size === 3 ) {\r\n\r\n\t\t\t\t// #ff0\r\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\r\n\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\r\n\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\r\n\r\n\t\t\t\treturn this;\r\n\r\n\t\t\t} else if ( size === 6 ) {\r\n\r\n\t\t\t\t// #ff0000\r\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\r\n\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\r\n\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\r\n\r\n\t\t\t\treturn this;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( style && style.length > 0 ) {\r\n\r\n\t\t\t// color keywords\r\n\t\t\tvar hex = THREE.ColorKeywords[ style ];\r\n\r\n\t\t\tif ( hex !== undefined ) {\r\n\r\n\t\t\t\t// red\r\n\t\t\t\tthis.setHex( hex );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// unknown color\r\n\t\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor( this.r, this.g, this.b );\r\n\r\n\t},\r\n\r\n\tcopy: function ( color ) {\r\n\r\n\t\tthis.r = color.r;\r\n\t\tthis.g = color.g;\r\n\t\tthis.b = color.b;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopyGammaToLinear: function ( color, gammaFactor ) {\r\n\r\n\t\tif ( gammaFactor === undefined ) gammaFactor = 2.0;\r\n\r\n\t\tthis.r = Math.pow( color.r, gammaFactor );\r\n\t\tthis.g = Math.pow( color.g, gammaFactor );\r\n\t\tthis.b = Math.pow( color.b, gammaFactor );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopyLinearToGamma: function ( color, gammaFactor ) {\r\n\r\n\t\tif ( gammaFactor === undefined ) gammaFactor = 2.0;\r\n\r\n\t\tvar safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0;\r\n\r\n\t\tthis.r = Math.pow( color.r, safeInverse );\r\n\t\tthis.g = Math.pow( color.g, safeInverse );\r\n\t\tthis.b = Math.pow( color.b, safeInverse );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tconvertGammaToLinear: function () {\r\n\r\n\t\tvar r = this.r, g = this.g, b = this.b;\r\n\r\n\t\tthis.r = r * r;\r\n\t\tthis.g = g * g;\r\n\t\tthis.b = b * b;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tconvertLinearToGamma: function () {\r\n\r\n\t\tthis.r = Math.sqrt( this.r );\r\n\t\tthis.g = Math.sqrt( this.g );\r\n\t\tthis.b = Math.sqrt( this.b );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tgetHex: function () {\r\n\r\n\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\r\n\r\n\t},\r\n\r\n\tgetHexString: function () {\r\n\r\n\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\r\n\r\n\t},\r\n\r\n\tgetHSL: function ( optionalTarget ) {\r\n\r\n\t\t// h,s,l ranges are in 0.0 - 1.0\r\n\r\n\t\tvar hsl = optionalTarget || { h: 0, s: 0, l: 0 };\r\n\r\n\t\tvar r = this.r, g = this.g, b = this.b;\r\n\r\n\t\tvar max = Math.max( r, g, b );\r\n\t\tvar min = Math.min( r, g, b );\r\n\r\n\t\tvar hue, saturation;\r\n\t\tvar lightness = ( min + max ) / 2.0;\r\n\r\n\t\tif ( min === max ) {\r\n\r\n\t\t\thue = 0;\r\n\t\t\tsaturation = 0;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tvar delta = max - min;\r\n\r\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\r\n\r\n\t\t\tswitch ( max ) {\r\n\r\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\r\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\r\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\r\n\r\n\t\t\t}\r\n\r\n\t\t\thue /= 6;\r\n\r\n\t\t}\r\n\r\n\t\thsl.h = hue;\r\n\t\thsl.s = saturation;\r\n\t\thsl.l = lightness;\r\n\r\n\t\treturn hsl;\r\n\r\n\t},\r\n\r\n\tgetStyle: function () {\r\n\r\n\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\r\n\r\n\t},\r\n\r\n\toffsetHSL: function ( h, s, l ) {\r\n\r\n\t\tvar hsl = this.getHSL();\r\n\r\n\t\thsl.h += h; hsl.s += s; hsl.l += l;\r\n\r\n\t\tthis.setHSL( hsl.h, hsl.s, hsl.l );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tadd: function ( color ) {\r\n\r\n\t\tthis.r += color.r;\r\n\t\tthis.g += color.g;\r\n\t\tthis.b += color.b;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddColors: function ( color1, color2 ) {\r\n\r\n\t\tthis.r = color1.r + color2.r;\r\n\t\tthis.g = color1.g + color2.g;\r\n\t\tthis.b = color1.b + color2.b;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddScalar: function ( s ) {\r\n\r\n\t\tthis.r += s;\r\n\t\tthis.g += s;\r\n\t\tthis.b += s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiply: function ( color ) {\r\n\r\n\t\tthis.r *= color.r;\r\n\t\tthis.g *= color.g;\r\n\t\tthis.b *= color.b;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiplyScalar: function ( s ) {\r\n\r\n\t\tthis.r *= s;\r\n\t\tthis.g *= s;\r\n\t\tthis.b *= s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tlerp: function ( color, alpha ) {\r\n\r\n\t\tthis.r += ( color.r - this.r ) * alpha;\r\n\t\tthis.g += ( color.g - this.g ) * alpha;\r\n\t\tthis.b += ( color.b - this.b ) * alpha;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( c ) {\r\n\r\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\r\n\r\n\t},\r\n\r\n\tfromArray: function ( array, offset ) {\r\n\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tthis.r = array[ offset ];\r\n\t\tthis.g = array[ offset + 1 ];\r\n\t\tthis.b = array[ offset + 2 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoArray: function ( array, offset ) {\r\n\r\n\t\tif ( array === undefined ) array = [];\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tarray[ offset ] = this.r;\r\n\t\tarray[ offset + 1 ] = this.g;\r\n\t\tarray[ offset + 2 ] = this.b;\r\n\r\n\t\treturn array;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.ColorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\r\n'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\r\n'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\r\n'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\r\n'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\r\n'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\r\n'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\r\n'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\r\n'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\r\n'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\r\n'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\r\n'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\r\n'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\r\n'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\r\n'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\r\n'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\r\n'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\r\n'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\r\n'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\r\n'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\r\n'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\r\n'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\r\n'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\r\n'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\r\n\r\n// File:src/math/Quaternion.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n * @author bhouston / http://clara.io\r\n */\r\n\r\nTHREE.Quaternion = function ( x, y, z, w ) {\r\n\r\n\tthis._x = x || 0;\r\n\tthis._y = y || 0;\r\n\tthis._z = z || 0;\r\n\tthis._w = ( w !== undefined ) ? w : 1;\r\n\r\n};\r\n\r\nTHREE.Quaternion.prototype = {\r\n\r\n\tconstructor: THREE.Quaternion,\r\n\r\n\tget x () {\r\n\r\n\t\treturn this._x;\r\n\r\n\t},\r\n\r\n\tset x ( value ) {\r\n\r\n\t\tthis._x = value;\r\n\t\tthis.onChangeCallback();\r\n\r\n\t},\r\n\r\n\tget y () {\r\n\r\n\t\treturn this._y;\r\n\r\n\t},\r\n\r\n\tset y ( value ) {\r\n\r\n\t\tthis._y = value;\r\n\t\tthis.onChangeCallback();\r\n\r\n\t},\r\n\r\n\tget z () {\r\n\r\n\t\treturn this._z;\r\n\r\n\t},\r\n\r\n\tset z ( value ) {\r\n\r\n\t\tthis._z = value;\r\n\t\tthis.onChangeCallback();\r\n\r\n\t},\r\n\r\n\tget w () {\r\n\r\n\t\treturn this._w;\r\n\r\n\t},\r\n\r\n\tset w ( value ) {\r\n\r\n\t\tthis._w = value;\r\n\t\tthis.onChangeCallback();\r\n\r\n\t},\r\n\r\n\tset: function ( x, y, z, w ) {\r\n\r\n\t\tthis._x = x;\r\n\t\tthis._y = y;\r\n\t\tthis._z = z;\r\n\t\tthis._w = w;\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\r\n\r\n\t},\r\n\r\n\tcopy: function ( quaternion ) {\r\n\r\n\t\tthis._x = quaternion.x;\r\n\t\tthis._y = quaternion.y;\r\n\t\tthis._z = quaternion.z;\r\n\t\tthis._w = quaternion.w;\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromEuler: function ( euler, update ) {\r\n\r\n\t\tif ( euler instanceof THREE.Euler === false ) {\r\n\r\n\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\r\n\r\n\t\t}\r\n\r\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\r\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\r\n\t\t//\tcontent/SpinCalc.m\r\n\r\n\t\tvar c1 = Math.cos( euler._x / 2 );\r\n\t\tvar c2 = Math.cos( euler._y / 2 );\r\n\t\tvar c3 = Math.cos( euler._z / 2 );\r\n\t\tvar s1 = Math.sin( euler._x / 2 );\r\n\t\tvar s2 = Math.sin( euler._y / 2 );\r\n\t\tvar s3 = Math.sin( euler._z / 2 );\r\n\r\n\t\tvar order = euler.order;\r\n\r\n\t\tif ( order === 'XYZ' ) {\r\n\r\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\r\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\r\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\r\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\r\n\r\n\t\t} else if ( order === 'YXZ' ) {\r\n\r\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\r\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\r\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\r\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\r\n\r\n\t\t} else if ( order === 'ZXY' ) {\r\n\r\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\r\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\r\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\r\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\r\n\r\n\t\t} else if ( order === 'ZYX' ) {\r\n\r\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\r\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\r\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\r\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\r\n\r\n\t\t} else if ( order === 'YZX' ) {\r\n\r\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\r\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\r\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\r\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\r\n\r\n\t\t} else if ( order === 'XZY' ) {\r\n\r\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\r\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\r\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\r\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\r\n\r\n\t\t}\r\n\r\n\t\tif ( update !== false ) this.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromAxisAngle: function ( axis, angle ) {\r\n\r\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\r\n\r\n\t\t// assumes axis is normalized\r\n\r\n\t\tvar halfAngle = angle / 2, s = Math.sin( halfAngle );\r\n\r\n\t\tthis._x = axis.x * s;\r\n\t\tthis._y = axis.y * s;\r\n\t\tthis._z = axis.z * s;\r\n\t\tthis._w = Math.cos( halfAngle );\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromRotationMatrix: function ( m ) {\r\n\r\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\r\n\r\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\r\n\r\n\t\tvar te = m.elements,\r\n\r\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\r\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\r\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\r\n\r\n\t\t\ttrace = m11 + m22 + m33,\r\n\t\t\ts;\r\n\r\n\t\tif ( trace > 0 ) {\r\n\r\n\t\t\ts = 0.5 / Math.sqrt( trace + 1.0 );\r\n\r\n\t\t\tthis._w = 0.25 / s;\r\n\t\t\tthis._x = ( m32 - m23 ) * s;\r\n\t\t\tthis._y = ( m13 - m31 ) * s;\r\n\t\t\tthis._z = ( m21 - m12 ) * s;\r\n\r\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\r\n\r\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\r\n\r\n\t\t\tthis._w = ( m32 - m23 ) / s;\r\n\t\t\tthis._x = 0.25 * s;\r\n\t\t\tthis._y = ( m12 + m21 ) / s;\r\n\t\t\tthis._z = ( m13 + m31 ) / s;\r\n\r\n\t\t} else if ( m22 > m33 ) {\r\n\r\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\r\n\r\n\t\t\tthis._w = ( m13 - m31 ) / s;\r\n\t\t\tthis._x = ( m12 + m21 ) / s;\r\n\t\t\tthis._y = 0.25 * s;\r\n\t\t\tthis._z = ( m23 + m32 ) / s;\r\n\r\n\t\t} else {\r\n\r\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\r\n\r\n\t\t\tthis._w = ( m21 - m12 ) / s;\r\n\t\t\tthis._x = ( m13 + m31 ) / s;\r\n\t\t\tthis._y = ( m23 + m32 ) / s;\r\n\t\t\tthis._z = 0.25 * s;\r\n\r\n\t\t}\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromUnitVectors: function () {\r\n\r\n\t\t// http://lolengine.net/blog/2014/02/24/quaternion-from-two-vectors-final\r\n\r\n\t\t// assumes direction vectors vFrom and vTo are normalized\r\n\r\n\t\tvar v1, r;\r\n\r\n\t\tvar EPS = 0.000001;\r\n\r\n\t\treturn function ( vFrom, vTo ) {\r\n\r\n\t\t\tif ( v1 === undefined ) v1 = new THREE.Vector3();\r\n\r\n\t\t\tr = vFrom.dot( vTo ) + 1;\r\n\r\n\t\t\tif ( r < EPS ) {\r\n\r\n\t\t\t\tr = 0;\r\n\r\n\t\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\r\n\r\n\t\t\t\t\tv1.set( - vFrom.y, vFrom.x, 0 );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tv1.set( 0, - vFrom.z, vFrom.y );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tv1.crossVectors( vFrom, vTo );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis._x = v1.x;\r\n\t\t\tthis._y = v1.y;\r\n\t\t\tthis._z = v1.z;\r\n\t\t\tthis._w = r;\r\n\r\n\t\t\treturn this.normalize();\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tinverse: function () {\r\n\r\n\t\treturn this.conjugate().normalize();\r\n\r\n\t},\r\n\r\n\tconjugate: function () {\r\n\r\n\t\tthis._x *= - 1;\r\n\t\tthis._y *= - 1;\r\n\t\tthis._z *= - 1;\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdot: function ( v ) {\r\n\r\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\r\n\r\n\t},\r\n\r\n\tlengthSq: function () {\r\n\r\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\r\n\r\n\t},\r\n\r\n\tlength: function () {\r\n\r\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\r\n\r\n\t},\r\n\r\n\tnormalize: function () {\r\n\r\n\t\tvar l = this.length();\r\n\r\n\t\tif ( l === 0 ) {\r\n\r\n\t\t\tthis._x = 0;\r\n\t\t\tthis._y = 0;\r\n\t\t\tthis._z = 0;\r\n\t\t\tthis._w = 1;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tl = 1 / l;\r\n\r\n\t\t\tthis._x = this._x * l;\r\n\t\t\tthis._y = this._y * l;\r\n\t\t\tthis._z = this._z * l;\r\n\t\t\tthis._w = this._w * l;\r\n\r\n\t\t}\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiply: function ( q, p ) {\r\n\r\n\t\tif ( p !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\r\n\t\t\treturn this.multiplyQuaternions( q, p );\r\n\r\n\t\t}\r\n\r\n\t\treturn this.multiplyQuaternions( this, q );\r\n\r\n\t},\r\n\r\n\tpremultiply: function ( q ) {\r\n\r\n\t\treturn this.multiplyQuaternions( q, this );\r\n\r\n\t},\r\n\r\n\tmultiplyQuaternions: function ( a, b ) {\r\n\r\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\r\n\r\n\t\tvar qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\r\n\t\tvar qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\r\n\r\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\r\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\r\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\r\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tslerp: function ( qb, t ) {\r\n\r\n\t\tif ( t === 0 ) return this;\r\n\t\tif ( t === 1 ) return this.copy( qb );\r\n\r\n\t\tvar x = this._x, y = this._y, z = this._z, w = this._w;\r\n\r\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\r\n\r\n\t\tvar cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\r\n\r\n\t\tif ( cosHalfTheta < 0 ) {\r\n\r\n\t\t\tthis._w = - qb._w;\r\n\t\t\tthis._x = - qb._x;\r\n\t\t\tthis._y = - qb._y;\r\n\t\t\tthis._z = - qb._z;\r\n\r\n\t\t\tcosHalfTheta = - cosHalfTheta;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.copy( qb );\r\n\r\n\t\t}\r\n\r\n\t\tif ( cosHalfTheta >= 1.0 ) {\r\n\r\n\t\t\tthis._w = w;\r\n\t\t\tthis._x = x;\r\n\t\t\tthis._y = y;\r\n\t\t\tthis._z = z;\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t}\r\n\r\n\t\tvar sinHalfTheta = Math.sqrt( 1.0 - cosHalfTheta * cosHalfTheta );\r\n\r\n\t\tif ( Math.abs( sinHalfTheta ) < 0.001 ) {\r\n\r\n\t\t\tthis._w = 0.5 * ( w + this._w );\r\n\t\t\tthis._x = 0.5 * ( x + this._x );\r\n\t\t\tthis._y = 0.5 * ( y + this._y );\r\n\t\t\tthis._z = 0.5 * ( z + this._z );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t}\r\n\r\n\t\tvar halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\r\n\t\tvar ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\r\n\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\r\n\r\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\r\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\r\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\r\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( quaternion ) {\r\n\r\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\r\n\r\n\t},\r\n\r\n\tfromArray: function ( array, offset ) {\r\n\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tthis._x = array[ offset ];\r\n\t\tthis._y = array[ offset + 1 ];\r\n\t\tthis._z = array[ offset + 2 ];\r\n\t\tthis._w = array[ offset + 3 ];\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoArray: function ( array, offset ) {\r\n\r\n\t\tif ( array === undefined ) array = [];\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tarray[ offset ] = this._x;\r\n\t\tarray[ offset + 1 ] = this._y;\r\n\t\tarray[ offset + 2 ] = this._z;\r\n\t\tarray[ offset + 3 ] = this._w;\r\n\r\n\t\treturn array;\r\n\r\n\t},\r\n\r\n\tonChange: function ( callback ) {\r\n\r\n\t\tthis.onChangeCallback = callback;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tonChangeCallback: function () {}\r\n\r\n};\r\n\r\nObject.assign( THREE.Quaternion, {\r\n\r\n\tslerp: function( qa, qb, qm, t ) {\r\n\r\n\t\treturn qm.copy( qa ).slerp( qb, t );\r\n\r\n\t},\r\n\r\n\tslerpFlat: function(\r\n\t\t\tdst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\r\n\r\n\t\t// fuzz-free, array-based Quaternion SLERP operation\r\n\r\n\t\tvar x0 = src0[ srcOffset0 + 0 ],\r\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\r\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\r\n\t\t\tw0 = src0[ srcOffset0 + 3 ],\r\n\r\n\t\t\tx1 = src1[ srcOffset1 + 0 ],\r\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\r\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\r\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\r\n\r\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\r\n\r\n\t\t\tvar s = 1 - t,\r\n\r\n\t\t\t\tcos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\r\n\r\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\r\n\t\t\t\tsqrSin = 1 - cos * cos;\r\n\r\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\r\n\t\t\tif ( sqrSin > Number.EPSILON ) {\r\n\r\n\t\t\t\tvar sin = Math.sqrt( sqrSin ),\r\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\r\n\r\n\t\t\t\ts = Math.sin( s * len ) / sin;\r\n\t\t\t\tt = Math.sin( t * len ) / sin;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar tDir = t * dir;\r\n\r\n\t\t\tx0 = x0 * s + x1 * tDir;\r\n\t\t\ty0 = y0 * s + y1 * tDir;\r\n\t\t\tz0 = z0 * s + z1 * tDir;\r\n\t\t\tw0 = w0 * s + w1 * tDir;\r\n\r\n\t\t\t// Normalize in case we just did a lerp:\r\n\t\t\tif ( s === 1 - t ) {\r\n\r\n\t\t\t\tvar f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\r\n\r\n\t\t\t\tx0 *= f;\r\n\t\t\t\ty0 *= f;\r\n\t\t\t\tz0 *= f;\r\n\t\t\t\tw0 *= f;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tdst[ dstOffset ] = x0;\r\n\t\tdst[ dstOffset + 1 ] = y0;\r\n\t\tdst[ dstOffset + 2 ] = z0;\r\n\t\tdst[ dstOffset + 3 ] = w0;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/math/Vector2.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author philogb / http://blog.thejit.org/\r\n * @author egraether / http://egraether.com/\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n */\r\n\r\nTHREE.Vector2 = function ( x, y ) {\r\n\r\n\tthis.x = x || 0;\r\n\tthis.y = y || 0;\r\n\r\n};\r\n\r\nTHREE.Vector2.prototype = {\r\n\r\n\tconstructor: THREE.Vector2,\r\n\r\n\tget width() {\r\n\r\n\t\treturn this.x;\r\n\r\n\t},\r\n\r\n\tset width( value ) {\r\n\r\n\t\tthis.x = value;\r\n\r\n\t},\r\n\r\n\tget height() {\r\n\r\n\t\treturn this.y;\r\n\r\n\t},\r\n\r\n\tset height( value ) {\r\n\r\n\t\tthis.y = value;\r\n\r\n\t},\r\n\r\n\t//\r\n\r\n\tset: function ( x, y ) {\r\n\r\n\t\tthis.x = x;\r\n\t\tthis.y = y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetScalar: function ( scalar ) {\r\n\r\n\t\tthis.x = scalar;\r\n\t\tthis.y = scalar;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetX: function ( x ) {\r\n\r\n\t\tthis.x = x;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetY: function ( y ) {\r\n\r\n\t\tthis.y = y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetComponent: function ( index, value ) {\r\n\r\n\t\tswitch ( index ) {\r\n\r\n\t\t\tcase 0: this.x = value; break;\r\n\t\t\tcase 1: this.y = value; break;\r\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tgetComponent: function ( index ) {\r\n\r\n\t\tswitch ( index ) {\r\n\r\n\t\t\tcase 0: return this.x;\r\n\t\t\tcase 1: return this.y;\r\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor( this.x, this.y );\r\n\r\n\t},\r\n\r\n\tcopy: function ( v ) {\r\n\r\n\t\tthis.x = v.x;\r\n\t\tthis.y = v.y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tadd: function ( v, w ) {\r\n\r\n\t\tif ( w !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\r\n\t\t\treturn this.addVectors( v, w );\r\n\r\n\t\t}\r\n\r\n\t\tthis.x += v.x;\r\n\t\tthis.y += v.y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddScalar: function ( s ) {\r\n\r\n\t\tthis.x += s;\r\n\t\tthis.y += s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddVectors: function ( a, b ) {\r\n\r\n\t\tthis.x = a.x + b.x;\r\n\t\tthis.y = a.y + b.y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddScaledVector: function ( v, s ) {\r\n\r\n\t\tthis.x += v.x * s;\r\n\t\tthis.y += v.y * s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsub: function ( v, w ) {\r\n\r\n\t\tif ( w !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\r\n\t\t\treturn this.subVectors( v, w );\r\n\r\n\t\t}\r\n\r\n\t\tthis.x -= v.x;\r\n\t\tthis.y -= v.y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsubScalar: function ( s ) {\r\n\r\n\t\tthis.x -= s;\r\n\t\tthis.y -= s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsubVectors: function ( a, b ) {\r\n\r\n\t\tthis.x = a.x - b.x;\r\n\t\tthis.y = a.y - b.y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiply: function ( v ) {\r\n\r\n\t\tthis.x *= v.x;\r\n\t\tthis.y *= v.y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiplyScalar: function ( scalar ) {\r\n\r\n\t\tif ( isFinite( scalar ) ) {\r\n\r\n\t\t\tthis.x *= scalar;\r\n\t\t\tthis.y *= scalar;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.x = 0;\r\n\t\t\tthis.y = 0;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdivide: function ( v ) {\r\n\r\n\t\tthis.x /= v.x;\r\n\t\tthis.y /= v.y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdivideScalar: function ( scalar ) {\r\n\r\n\t\treturn this.multiplyScalar( 1 / scalar );\r\n\r\n\t},\r\n\r\n\tmin: function ( v ) {\r\n\r\n\t\tthis.x = Math.min( this.x, v.x );\r\n\t\tthis.y = Math.min( this.y, v.y );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmax: function ( v ) {\r\n\r\n\t\tthis.x = Math.max( this.x, v.x );\r\n\t\tthis.y = Math.max( this.y, v.y );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclamp: function ( min, max ) {\r\n\r\n\t\t// This function assumes min < max, if this assumption isn't true it will not operate correctly\r\n\r\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\r\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclampScalar: function () {\r\n\r\n\t\tvar min, max;\r\n\r\n\t\treturn function clampScalar( minVal, maxVal ) {\r\n\r\n\t\t\tif ( min === undefined ) {\r\n\r\n\t\t\t\tmin = new THREE.Vector2();\r\n\t\t\t\tmax = new THREE.Vector2();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tmin.set( minVal, minVal );\r\n\t\t\tmax.set( maxVal, maxVal );\r\n\r\n\t\t\treturn this.clamp( min, max );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tclampLength: function ( min, max ) {\r\n\r\n\t\tvar length = this.length();\r\n\r\n\t\treturn this.multiplyScalar( Math.max( min, Math.min( max, length ) ) / length );\r\n\r\n\t},\r\n\r\n\tfloor: function () {\r\n\r\n\t\tthis.x = Math.floor( this.x );\r\n\t\tthis.y = Math.floor( this.y );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tceil: function () {\r\n\r\n\t\tthis.x = Math.ceil( this.x );\r\n\t\tthis.y = Math.ceil( this.y );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tround: function () {\r\n\r\n\t\tthis.x = Math.round( this.x );\r\n\t\tthis.y = Math.round( this.y );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\troundToZero: function () {\r\n\r\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\r\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tnegate: function () {\r\n\r\n\t\tthis.x = - this.x;\r\n\t\tthis.y = - this.y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdot: function ( v ) {\r\n\r\n\t\treturn this.x * v.x + this.y * v.y;\r\n\r\n\t},\r\n\r\n\tlengthSq: function () {\r\n\r\n\t\treturn this.x * this.x + this.y * this.y;\r\n\r\n\t},\r\n\r\n\tlength: function () {\r\n\r\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\r\n\r\n\t},\r\n\r\n\tlengthManhattan: function() {\r\n\r\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\r\n\r\n\t},\r\n\r\n\tnormalize: function () {\r\n\r\n\t\treturn this.divideScalar( this.length() );\r\n\r\n\t},\r\n\r\n\tangle: function () {\r\n\r\n\t\t// computes the angle in radians with respect to the positive x-axis\r\n\r\n\t\tvar angle = Math.atan2( this.y, this.x );\r\n\r\n\t\tif ( angle < 0 ) angle += 2 * Math.PI;\r\n\r\n\t\treturn angle;\r\n\r\n\t},\r\n\r\n\tdistanceTo: function ( v ) {\r\n\r\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\r\n\r\n\t},\r\n\r\n\tdistanceToSquared: function ( v ) {\r\n\r\n\t\tvar dx = this.x - v.x, dy = this.y - v.y;\r\n\t\treturn dx * dx + dy * dy;\r\n\r\n\t},\r\n\r\n\tsetLength: function ( length ) {\r\n\r\n\t\treturn this.multiplyScalar( length / this.length() );\r\n\r\n\t},\r\n\r\n\tlerp: function ( v, alpha ) {\r\n\r\n\t\tthis.x += ( v.x - this.x ) * alpha;\r\n\t\tthis.y += ( v.y - this.y ) * alpha;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tlerpVectors: function ( v1, v2, alpha ) {\r\n\r\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\r\n\r\n\t},\r\n\r\n\tequals: function ( v ) {\r\n\r\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\r\n\r\n\t},\r\n\r\n\tfromArray: function ( array, offset ) {\r\n\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tthis.x = array[ offset ];\r\n\t\tthis.y = array[ offset + 1 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoArray: function ( array, offset ) {\r\n\r\n\t\tif ( array === undefined ) array = [];\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tarray[ offset ] = this.x;\r\n\t\tarray[ offset + 1 ] = this.y;\r\n\r\n\t\treturn array;\r\n\r\n\t},\r\n\r\n\tfromAttribute: function ( attribute, index, offset ) {\r\n\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tindex = index * attribute.itemSize + offset;\r\n\r\n\t\tthis.x = attribute.array[ index ];\r\n\t\tthis.y = attribute.array[ index + 1 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\trotateAround: function ( center, angle ) {\r\n\r\n\t\tvar c = Math.cos( angle ), s = Math.sin( angle );\r\n\r\n\t\tvar x = this.x - center.x;\r\n\t\tvar y = this.y - center.y;\r\n\r\n\t\tthis.x = x * c - y * s + center.x;\r\n\t\tthis.y = x * s + y * c + center.y;\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Vector3.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author *kile / http://kile.stravaganza.org/\r\n * @author philogb / http://blog.thejit.org/\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author egraether / http://egraether.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n */\r\n\r\nTHREE.Vector3 = function ( x, y, z ) {\r\n\r\n\tthis.x = x || 0;\r\n\tthis.y = y || 0;\r\n\tthis.z = z || 0;\r\n\r\n};\r\n\r\nTHREE.Vector3.prototype = {\r\n\r\n\tconstructor: THREE.Vector3,\r\n\r\n\tset: function ( x, y, z ) {\r\n\r\n\t\tthis.x = x;\r\n\t\tthis.y = y;\r\n\t\tthis.z = z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetScalar: function ( scalar ) {\r\n\r\n\t\tthis.x = scalar;\r\n\t\tthis.y = scalar;\r\n\t\tthis.z = scalar;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetX: function ( x ) {\r\n\r\n\t\tthis.x = x;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetY: function ( y ) {\r\n\r\n\t\tthis.y = y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetZ: function ( z ) {\r\n\r\n\t\tthis.z = z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetComponent: function ( index, value ) {\r\n\r\n\t\tswitch ( index ) {\r\n\r\n\t\t\tcase 0: this.x = value; break;\r\n\t\t\tcase 1: this.y = value; break;\r\n\t\t\tcase 2: this.z = value; break;\r\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tgetComponent: function ( index ) {\r\n\r\n\t\tswitch ( index ) {\r\n\r\n\t\t\tcase 0: return this.x;\r\n\t\t\tcase 1: return this.y;\r\n\t\t\tcase 2: return this.z;\r\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor( this.x, this.y, this.z );\r\n\r\n\t},\r\n\r\n\tcopy: function ( v ) {\r\n\r\n\t\tthis.x = v.x;\r\n\t\tthis.y = v.y;\r\n\t\tthis.z = v.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tadd: function ( v, w ) {\r\n\r\n\t\tif ( w !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\r\n\t\t\treturn this.addVectors( v, w );\r\n\r\n\t\t}\r\n\r\n\t\tthis.x += v.x;\r\n\t\tthis.y += v.y;\r\n\t\tthis.z += v.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddScalar: function ( s ) {\r\n\r\n\t\tthis.x += s;\r\n\t\tthis.y += s;\r\n\t\tthis.z += s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddVectors: function ( a, b ) {\r\n\r\n\t\tthis.x = a.x + b.x;\r\n\t\tthis.y = a.y + b.y;\r\n\t\tthis.z = a.z + b.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddScaledVector: function ( v, s ) {\r\n\r\n\t\tthis.x += v.x * s;\r\n\t\tthis.y += v.y * s;\r\n\t\tthis.z += v.z * s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsub: function ( v, w ) {\r\n\r\n\t\tif ( w !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\r\n\t\t\treturn this.subVectors( v, w );\r\n\r\n\t\t}\r\n\r\n\t\tthis.x -= v.x;\r\n\t\tthis.y -= v.y;\r\n\t\tthis.z -= v.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsubScalar: function ( s ) {\r\n\r\n\t\tthis.x -= s;\r\n\t\tthis.y -= s;\r\n\t\tthis.z -= s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsubVectors: function ( a, b ) {\r\n\r\n\t\tthis.x = a.x - b.x;\r\n\t\tthis.y = a.y - b.y;\r\n\t\tthis.z = a.z - b.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiply: function ( v, w ) {\r\n\r\n\t\tif ( w !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\r\n\t\t\treturn this.multiplyVectors( v, w );\r\n\r\n\t\t}\r\n\r\n\t\tthis.x *= v.x;\r\n\t\tthis.y *= v.y;\r\n\t\tthis.z *= v.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiplyScalar: function ( scalar ) {\r\n\r\n\t\tif ( isFinite( scalar ) ) {\r\n\r\n\t\t\tthis.x *= scalar;\r\n\t\t\tthis.y *= scalar;\r\n\t\t\tthis.z *= scalar;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.x = 0;\r\n\t\t\tthis.y = 0;\r\n\t\t\tthis.z = 0;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiplyVectors: function ( a, b ) {\r\n\r\n\t\tthis.x = a.x * b.x;\r\n\t\tthis.y = a.y * b.y;\r\n\t\tthis.z = a.z * b.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tapplyEuler: function () {\r\n\r\n\t\tvar quaternion;\r\n\r\n\t\treturn function applyEuler( euler ) {\r\n\r\n\t\t\tif ( euler instanceof THREE.Euler === false ) {\r\n\r\n\t\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( quaternion === undefined ) quaternion = new THREE.Quaternion();\r\n\r\n\t\t\treturn this.applyQuaternion( quaternion.setFromEuler( euler ) );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tapplyAxisAngle: function () {\r\n\r\n\t\tvar quaternion;\r\n\r\n\t\treturn function applyAxisAngle( axis, angle ) {\r\n\r\n\t\t\tif ( quaternion === undefined ) quaternion = new THREE.Quaternion();\r\n\r\n\t\t\treturn this.applyQuaternion( quaternion.setFromAxisAngle( axis, angle ) );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tapplyMatrix3: function ( m ) {\r\n\r\n\t\tvar x = this.x, y = this.y, z = this.z;\r\n\t\tvar e = m.elements;\r\n\r\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\r\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\r\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tapplyMatrix4: function ( m ) {\r\n\r\n\t\t// input: THREE.Matrix4 affine matrix\r\n\r\n\t\tvar x = this.x, y = this.y, z = this.z;\r\n\t\tvar e = m.elements;\r\n\r\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ];\r\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ];\r\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tapplyProjection: function ( m ) {\r\n\r\n\t\t// input: THREE.Matrix4 projection matrix\r\n\r\n\t\tvar x = this.x, y = this.y, z = this.z;\r\n\t\tvar e = m.elements;\r\n\t\tvar d = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] ); // perspective divide\r\n\r\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * d;\r\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * d;\r\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * d;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tapplyQuaternion: function ( q ) {\r\n\r\n\t\tvar x = this.x, y = this.y, z = this.z;\r\n\t\tvar qx = q.x, qy = q.y, qz = q.z, qw = q.w;\r\n\r\n\t\t// calculate quat * vector\r\n\r\n\t\tvar ix = qw * x + qy * z - qz * y;\r\n\t\tvar iy = qw * y + qz * x - qx * z;\r\n\t\tvar iz = qw * z + qx * y - qy * x;\r\n\t\tvar iw = - qx * x - qy * y - qz * z;\r\n\r\n\t\t// calculate result * inverse quat\r\n\r\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\r\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\r\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tproject: function () {\r\n\r\n\t\tvar matrix;\r\n\r\n\t\treturn function project( camera ) {\r\n\r\n\t\t\tif ( matrix === undefined ) matrix = new THREE.Matrix4();\r\n\r\n\t\t\tmatrix.multiplyMatrices( camera.projectionMatrix, matrix.getInverse( camera.matrixWorld ) );\r\n\t\t\treturn this.applyProjection( matrix );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tunproject: function () {\r\n\r\n\t\tvar matrix;\r\n\r\n\t\treturn function unproject( camera ) {\r\n\r\n\t\t\tif ( matrix === undefined ) matrix = new THREE.Matrix4();\r\n\r\n\t\t\tmatrix.multiplyMatrices( camera.matrixWorld, matrix.getInverse( camera.projectionMatrix ) );\r\n\t\t\treturn this.applyProjection( matrix );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\ttransformDirection: function ( m ) {\r\n\r\n\t\t// input: THREE.Matrix4 affine matrix\r\n\t\t// vector interpreted as a direction\r\n\r\n\t\tvar x = this.x, y = this.y, z = this.z;\r\n\t\tvar e = m.elements;\r\n\r\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\r\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\r\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\r\n\r\n\t\treturn this.normalize();\r\n\r\n\t},\r\n\r\n\tdivide: function ( v ) {\r\n\r\n\t\tthis.x /= v.x;\r\n\t\tthis.y /= v.y;\r\n\t\tthis.z /= v.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdivideScalar: function ( scalar ) {\r\n\r\n\t\treturn this.multiplyScalar( 1 / scalar );\r\n\r\n\t},\r\n\r\n\tmin: function ( v ) {\r\n\r\n\t\tthis.x = Math.min( this.x, v.x );\r\n\t\tthis.y = Math.min( this.y, v.y );\r\n\t\tthis.z = Math.min( this.z, v.z );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmax: function ( v ) {\r\n\r\n\t\tthis.x = Math.max( this.x, v.x );\r\n\t\tthis.y = Math.max( this.y, v.y );\r\n\t\tthis.z = Math.max( this.z, v.z );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclamp: function ( min, max ) {\r\n\r\n\t\t// This function assumes min < max, if this assumption isn't true it will not operate correctly\r\n\r\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\r\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\r\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclampScalar: function () {\r\n\r\n\t\tvar min, max;\r\n\r\n\t\treturn function clampScalar( minVal, maxVal ) {\r\n\r\n\t\t\tif ( min === undefined ) {\r\n\r\n\t\t\t\tmin = new THREE.Vector3();\r\n\t\t\t\tmax = new THREE.Vector3();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tmin.set( minVal, minVal, minVal );\r\n\t\t\tmax.set( maxVal, maxVal, maxVal );\r\n\r\n\t\t\treturn this.clamp( min, max );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tclampLength: function ( min, max ) {\r\n\r\n\t\tvar length = this.length();\r\n\r\n\t\treturn this.multiplyScalar( Math.max( min, Math.min( max, length ) ) / length );\r\n\r\n\t},\r\n\r\n\tfloor: function () {\r\n\r\n\t\tthis.x = Math.floor( this.x );\r\n\t\tthis.y = Math.floor( this.y );\r\n\t\tthis.z = Math.floor( this.z );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tceil: function () {\r\n\r\n\t\tthis.x = Math.ceil( this.x );\r\n\t\tthis.y = Math.ceil( this.y );\r\n\t\tthis.z = Math.ceil( this.z );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tround: function () {\r\n\r\n\t\tthis.x = Math.round( this.x );\r\n\t\tthis.y = Math.round( this.y );\r\n\t\tthis.z = Math.round( this.z );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\troundToZero: function () {\r\n\r\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\r\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\r\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tnegate: function () {\r\n\r\n\t\tthis.x = - this.x;\r\n\t\tthis.y = - this.y;\r\n\t\tthis.z = - this.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdot: function ( v ) {\r\n\r\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\r\n\r\n\t},\r\n\r\n\tlengthSq: function () {\r\n\r\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\r\n\r\n\t},\r\n\r\n\tlength: function () {\r\n\r\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\r\n\r\n\t},\r\n\r\n\tlengthManhattan: function () {\r\n\r\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\r\n\r\n\t},\r\n\r\n\tnormalize: function () {\r\n\r\n\t\treturn this.divideScalar( this.length() );\r\n\r\n\t},\r\n\r\n\tsetLength: function ( length ) {\r\n\r\n\t\treturn this.multiplyScalar( length / this.length() );\r\n\r\n\t},\r\n\r\n\tlerp: function ( v, alpha ) {\r\n\r\n\t\tthis.x += ( v.x - this.x ) * alpha;\r\n\t\tthis.y += ( v.y - this.y ) * alpha;\r\n\t\tthis.z += ( v.z - this.z ) * alpha;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tlerpVectors: function ( v1, v2, alpha ) {\r\n\r\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\r\n\r\n\t},\r\n\r\n\tcross: function ( v, w ) {\r\n\r\n\t\tif ( w !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\r\n\t\t\treturn this.crossVectors( v, w );\r\n\r\n\t\t}\r\n\r\n\t\tvar x = this.x, y = this.y, z = this.z;\r\n\r\n\t\tthis.x = y * v.z - z * v.y;\r\n\t\tthis.y = z * v.x - x * v.z;\r\n\t\tthis.z = x * v.y - y * v.x;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcrossVectors: function ( a, b ) {\r\n\r\n\t\tvar ax = a.x, ay = a.y, az = a.z;\r\n\t\tvar bx = b.x, by = b.y, bz = b.z;\r\n\r\n\t\tthis.x = ay * bz - az * by;\r\n\t\tthis.y = az * bx - ax * bz;\r\n\t\tthis.z = ax * by - ay * bx;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tprojectOnVector: function () {\r\n\r\n\t\tvar v1, dot;\r\n\r\n\t\treturn function projectOnVector( vector ) {\r\n\r\n\t\t\tif ( v1 === undefined ) v1 = new THREE.Vector3();\r\n\r\n\t\t\tv1.copy( vector ).normalize();\r\n\r\n\t\t\tdot = this.dot( v1 );\r\n\r\n\t\t\treturn this.copy( v1 ).multiplyScalar( dot );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tprojectOnPlane: function () {\r\n\r\n\t\tvar v1;\r\n\r\n\t\treturn function projectOnPlane( planeNormal ) {\r\n\r\n\t\t\tif ( v1 === undefined ) v1 = new THREE.Vector3();\r\n\r\n\t\t\tv1.copy( this ).projectOnVector( planeNormal );\r\n\r\n\t\t\treturn this.sub( v1 );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\treflect: function () {\r\n\r\n\t\t// reflect incident vector off plane orthogonal to normal\r\n\t\t// normal is assumed to have unit length\r\n\r\n\t\tvar v1;\r\n\r\n\t\treturn function reflect( normal ) {\r\n\r\n\t\t\tif ( v1 === undefined ) v1 = new THREE.Vector3();\r\n\r\n\t\t\treturn this.sub( v1.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tangleTo: function ( v ) {\r\n\r\n\t\tvar theta = this.dot( v ) / ( Math.sqrt( this.lengthSq() * v.lengthSq() ) );\r\n\r\n\t\t// clamp, to handle numerical problems\r\n\r\n\t\treturn Math.acos( THREE.Math.clamp( theta, - 1, 1 ) );\r\n\r\n\t},\r\n\r\n\tdistanceTo: function ( v ) {\r\n\r\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\r\n\r\n\t},\r\n\r\n\tdistanceToSquared: function ( v ) {\r\n\r\n\t\tvar dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\r\n\r\n\t\treturn dx * dx + dy * dy + dz * dz;\r\n\r\n\t},\r\n\r\n\tsetFromSpherical: function( s ) {\r\n\r\n\t\tvar sinPhiRadius = Math.sin( s.phi ) * s.radius;\r\n\r\n\t\tthis.x = sinPhiRadius * Math.sin( s.theta );\r\n\t\tthis.y = Math.cos( s.phi ) * s.radius;\r\n\t\tthis.z = sinPhiRadius * Math.cos( s.theta );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromMatrixPosition: function ( m ) {\r\n\r\n\t\treturn this.setFromMatrixColumn( m, 3 );\r\n\r\n\t},\r\n\r\n\tsetFromMatrixScale: function ( m ) {\r\n\r\n\t\tvar sx = this.setFromMatrixColumn( m, 0 ).length();\r\n\t\tvar sy = this.setFromMatrixColumn( m, 1 ).length();\r\n\t\tvar sz = this.setFromMatrixColumn( m, 2 ).length();\r\n\r\n\t\tthis.x = sx;\r\n\t\tthis.y = sy;\r\n\t\tthis.z = sz;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromMatrixColumn: function ( m, index ) {\r\n\r\n\t\tif ( typeof m === 'number' ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Vector3: setFromMatrixColumn now expects ( matrix, index ).' );\r\n\t\t\tvar temp = m\r\n\t\t\tm = index;\r\n\t\t\tindex = temp;\r\n\r\n\t\t}\r\n\r\n\t\treturn this.fromArray( m.elements, index * 4 );\r\n\r\n\t},\r\n\r\n\tequals: function ( v ) {\r\n\r\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\r\n\r\n\t},\r\n\r\n\tfromArray: function ( array, offset ) {\r\n\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tthis.x = array[ offset ];\r\n\t\tthis.y = array[ offset + 1 ];\r\n\t\tthis.z = array[ offset + 2 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoArray: function ( array, offset ) {\r\n\r\n\t\tif ( array === undefined ) array = [];\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tarray[ offset ] = this.x;\r\n\t\tarray[ offset + 1 ] = this.y;\r\n\t\tarray[ offset + 2 ] = this.z;\r\n\r\n\t\treturn array;\r\n\r\n\t},\r\n\r\n\tfromAttribute: function ( attribute, index, offset ) {\r\n\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tindex = index * attribute.itemSize + offset;\r\n\r\n\t\tthis.x = attribute.array[ index ];\r\n\t\tthis.y = attribute.array[ index + 1 ];\r\n\t\tthis.z = attribute.array[ index + 2 ];\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Vector4.js\r\n\r\n/**\r\n * @author supereggbert / http://www.paulbrunt.co.uk/\r\n * @author philogb / http://blog.thejit.org/\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author egraether / http://egraether.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n */\r\n\r\nTHREE.Vector4 = function ( x, y, z, w ) {\r\n\r\n\tthis.x = x || 0;\r\n\tthis.y = y || 0;\r\n\tthis.z = z || 0;\r\n\tthis.w = ( w !== undefined ) ? w : 1;\r\n\r\n};\r\n\r\nTHREE.Vector4.prototype = {\r\n\r\n\tconstructor: THREE.Vector4,\r\n\r\n\tset: function ( x, y, z, w ) {\r\n\r\n\t\tthis.x = x;\r\n\t\tthis.y = y;\r\n\t\tthis.z = z;\r\n\t\tthis.w = w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetScalar: function ( scalar ) {\r\n\r\n\t\tthis.x = scalar;\r\n\t\tthis.y = scalar;\r\n\t\tthis.z = scalar;\r\n\t\tthis.w = scalar;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetX: function ( x ) {\r\n\r\n\t\tthis.x = x;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetY: function ( y ) {\r\n\r\n\t\tthis.y = y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetZ: function ( z ) {\r\n\r\n\t\tthis.z = z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetW: function ( w ) {\r\n\r\n\t\tthis.w = w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetComponent: function ( index, value ) {\r\n\r\n\t\tswitch ( index ) {\r\n\r\n\t\t\tcase 0: this.x = value; break;\r\n\t\t\tcase 1: this.y = value; break;\r\n\t\t\tcase 2: this.z = value; break;\r\n\t\t\tcase 3: this.w = value; break;\r\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tgetComponent: function ( index ) {\r\n\r\n\t\tswitch ( index ) {\r\n\r\n\t\t\tcase 0: return this.x;\r\n\t\t\tcase 1: return this.y;\r\n\t\t\tcase 2: return this.z;\r\n\t\t\tcase 3: return this.w;\r\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\r\n\r\n\t},\r\n\r\n\tcopy: function ( v ) {\r\n\r\n\t\tthis.x = v.x;\r\n\t\tthis.y = v.y;\r\n\t\tthis.z = v.z;\r\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tadd: function ( v, w ) {\r\n\r\n\t\tif ( w !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\r\n\t\t\treturn this.addVectors( v, w );\r\n\r\n\t\t}\r\n\r\n\t\tthis.x += v.x;\r\n\t\tthis.y += v.y;\r\n\t\tthis.z += v.z;\r\n\t\tthis.w += v.w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddScalar: function ( s ) {\r\n\r\n\t\tthis.x += s;\r\n\t\tthis.y += s;\r\n\t\tthis.z += s;\r\n\t\tthis.w += s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddVectors: function ( a, b ) {\r\n\r\n\t\tthis.x = a.x + b.x;\r\n\t\tthis.y = a.y + b.y;\r\n\t\tthis.z = a.z + b.z;\r\n\t\tthis.w = a.w + b.w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddScaledVector: function ( v, s ) {\r\n\r\n\t\tthis.x += v.x * s;\r\n\t\tthis.y += v.y * s;\r\n\t\tthis.z += v.z * s;\r\n\t\tthis.w += v.w * s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsub: function ( v, w ) {\r\n\r\n\t\tif ( w !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\r\n\t\t\treturn this.subVectors( v, w );\r\n\r\n\t\t}\r\n\r\n\t\tthis.x -= v.x;\r\n\t\tthis.y -= v.y;\r\n\t\tthis.z -= v.z;\r\n\t\tthis.w -= v.w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsubScalar: function ( s ) {\r\n\r\n\t\tthis.x -= s;\r\n\t\tthis.y -= s;\r\n\t\tthis.z -= s;\r\n\t\tthis.w -= s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsubVectors: function ( a, b ) {\r\n\r\n\t\tthis.x = a.x - b.x;\r\n\t\tthis.y = a.y - b.y;\r\n\t\tthis.z = a.z - b.z;\r\n\t\tthis.w = a.w - b.w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiplyScalar: function ( scalar ) {\r\n\r\n\t\tif ( isFinite( scalar ) ) {\r\n\r\n\t\t\tthis.x *= scalar;\r\n\t\t\tthis.y *= scalar;\r\n\t\t\tthis.z *= scalar;\r\n\t\t\tthis.w *= scalar;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.x = 0;\r\n\t\t\tthis.y = 0;\r\n\t\t\tthis.z = 0;\r\n\t\t\tthis.w = 0;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tapplyMatrix4: function ( m ) {\r\n\r\n\t\tvar x = this.x, y = this.y, z = this.z, w = this.w;\r\n\t\tvar e = m.elements;\r\n\r\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\r\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\r\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\r\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdivideScalar: function ( scalar ) {\r\n\r\n\t\treturn this.multiplyScalar( 1 / scalar );\r\n\r\n\t},\r\n\r\n\tsetAxisAngleFromQuaternion: function ( q ) {\r\n\r\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\r\n\r\n\t\t// q is assumed to be normalized\r\n\r\n\t\tthis.w = 2 * Math.acos( q.w );\r\n\r\n\t\tvar s = Math.sqrt( 1 - q.w * q.w );\r\n\r\n\t\tif ( s < 0.0001 ) {\r\n\r\n\t\t\t this.x = 1;\r\n\t\t\t this.y = 0;\r\n\t\t\t this.z = 0;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t this.x = q.x / s;\r\n\t\t\t this.y = q.y / s;\r\n\t\t\t this.z = q.z / s;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetAxisAngleFromRotationMatrix: function ( m ) {\r\n\r\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\r\n\r\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\r\n\r\n\t\tvar angle, x, y, z,\t\t// variables for result\r\n\t\t\tepsilon = 0.01,\t\t// margin to allow for rounding errors\r\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\r\n\r\n\t\t\tte = m.elements,\r\n\r\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\r\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\r\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\r\n\r\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\r\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\r\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\r\n\r\n\t\t\t// singularity found\r\n\t\t\t// first check for identity matrix which must have +1 for all terms\r\n\t\t\t// in leading diagonal and zero in other terms\r\n\r\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\r\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\r\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\r\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\r\n\r\n\t\t\t\t// this singularity is identity matrix so angle = 0\r\n\r\n\t\t\t\tthis.set( 1, 0, 0, 0 );\r\n\r\n\t\t\t\treturn this; // zero angle, arbitrary axis\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// otherwise this singularity is angle = 180\r\n\r\n\t\t\tangle = Math.PI;\r\n\r\n\t\t\tvar xx = ( m11 + 1 ) / 2;\r\n\t\t\tvar yy = ( m22 + 1 ) / 2;\r\n\t\t\tvar zz = ( m33 + 1 ) / 2;\r\n\t\t\tvar xy = ( m12 + m21 ) / 4;\r\n\t\t\tvar xz = ( m13 + m31 ) / 4;\r\n\t\t\tvar yz = ( m23 + m32 ) / 4;\r\n\r\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\r\n\r\n\t\t\t\t// m11 is the largest diagonal term\r\n\r\n\t\t\t\tif ( xx < epsilon ) {\r\n\r\n\t\t\t\t\tx = 0;\r\n\t\t\t\t\ty = 0.707106781;\r\n\t\t\t\t\tz = 0.707106781;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tx = Math.sqrt( xx );\r\n\t\t\t\t\ty = xy / x;\r\n\t\t\t\t\tz = xz / x;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( yy > zz ) {\r\n\r\n\t\t\t\t// m22 is the largest diagonal term\r\n\r\n\t\t\t\tif ( yy < epsilon ) {\r\n\r\n\t\t\t\t\tx = 0.707106781;\r\n\t\t\t\t\ty = 0;\r\n\t\t\t\t\tz = 0.707106781;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\ty = Math.sqrt( yy );\r\n\t\t\t\t\tx = xy / y;\r\n\t\t\t\t\tz = yz / y;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// m33 is the largest diagonal term so base result on this\r\n\r\n\t\t\t\tif ( zz < epsilon ) {\r\n\r\n\t\t\t\t\tx = 0.707106781;\r\n\t\t\t\t\ty = 0.707106781;\r\n\t\t\t\t\tz = 0;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tz = Math.sqrt( zz );\r\n\t\t\t\t\tx = xz / z;\r\n\t\t\t\t\ty = yz / z;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.set( x, y, z, angle );\r\n\r\n\t\t\treturn this; // return 180 deg rotation\r\n\r\n\t\t}\r\n\r\n\t\t// as we have reached here there are no singularities so we can handle normally\r\n\r\n\t\tvar s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\r\n\t\t ( m13 - m31 ) * ( m13 - m31 ) +\r\n\t\t ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\r\n\r\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\r\n\r\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\r\n\t\t// caught by singularity test above, but I've left it in just in case\r\n\r\n\t\tthis.x = ( m32 - m23 ) / s;\r\n\t\tthis.y = ( m13 - m31 ) / s;\r\n\t\tthis.z = ( m21 - m12 ) / s;\r\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmin: function ( v ) {\r\n\r\n\t\tthis.x = Math.min( this.x, v.x );\r\n\t\tthis.y = Math.min( this.y, v.y );\r\n\t\tthis.z = Math.min( this.z, v.z );\r\n\t\tthis.w = Math.min( this.w, v.w );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmax: function ( v ) {\r\n\r\n\t\tthis.x = Math.max( this.x, v.x );\r\n\t\tthis.y = Math.max( this.y, v.y );\r\n\t\tthis.z = Math.max( this.z, v.z );\r\n\t\tthis.w = Math.max( this.w, v.w );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclamp: function ( min, max ) {\r\n\r\n\t\t// This function assumes min < max, if this assumption isn't true it will not operate correctly\r\n\r\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\r\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\r\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\r\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclampScalar: function () {\r\n\r\n\t\tvar min, max;\r\n\r\n\t\treturn function clampScalar( minVal, maxVal ) {\r\n\r\n\t\t\tif ( min === undefined ) {\r\n\r\n\t\t\t\tmin = new THREE.Vector4();\r\n\t\t\t\tmax = new THREE.Vector4();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tmin.set( minVal, minVal, minVal, minVal );\r\n\t\t\tmax.set( maxVal, maxVal, maxVal, maxVal );\r\n\r\n\t\t\treturn this.clamp( min, max );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tfloor: function () {\r\n\r\n\t\tthis.x = Math.floor( this.x );\r\n\t\tthis.y = Math.floor( this.y );\r\n\t\tthis.z = Math.floor( this.z );\r\n\t\tthis.w = Math.floor( this.w );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tceil: function () {\r\n\r\n\t\tthis.x = Math.ceil( this.x );\r\n\t\tthis.y = Math.ceil( this.y );\r\n\t\tthis.z = Math.ceil( this.z );\r\n\t\tthis.w = Math.ceil( this.w );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tround: function () {\r\n\r\n\t\tthis.x = Math.round( this.x );\r\n\t\tthis.y = Math.round( this.y );\r\n\t\tthis.z = Math.round( this.z );\r\n\t\tthis.w = Math.round( this.w );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\troundToZero: function () {\r\n\r\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\r\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\r\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\r\n\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tnegate: function () {\r\n\r\n\t\tthis.x = - this.x;\r\n\t\tthis.y = - this.y;\r\n\t\tthis.z = - this.z;\r\n\t\tthis.w = - this.w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdot: function ( v ) {\r\n\r\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\r\n\r\n\t},\r\n\r\n\tlengthSq: function () {\r\n\r\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\r\n\r\n\t},\r\n\r\n\tlength: function () {\r\n\r\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\r\n\r\n\t},\r\n\r\n\tlengthManhattan: function () {\r\n\r\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\r\n\r\n\t},\r\n\r\n\tnormalize: function () {\r\n\r\n\t\treturn this.divideScalar( this.length() );\r\n\r\n\t},\r\n\r\n\tsetLength: function ( length ) {\r\n\r\n\t\treturn this.multiplyScalar( length / this.length() );\r\n\r\n\t},\r\n\r\n\tlerp: function ( v, alpha ) {\r\n\r\n\t\tthis.x += ( v.x - this.x ) * alpha;\r\n\t\tthis.y += ( v.y - this.y ) * alpha;\r\n\t\tthis.z += ( v.z - this.z ) * alpha;\r\n\t\tthis.w += ( v.w - this.w ) * alpha;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tlerpVectors: function ( v1, v2, alpha ) {\r\n\r\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\r\n\r\n\t},\r\n\r\n\tequals: function ( v ) {\r\n\r\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\r\n\r\n\t},\r\n\r\n\tfromArray: function ( array, offset ) {\r\n\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tthis.x = array[ offset ];\r\n\t\tthis.y = array[ offset + 1 ];\r\n\t\tthis.z = array[ offset + 2 ];\r\n\t\tthis.w = array[ offset + 3 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoArray: function ( array, offset ) {\r\n\r\n\t\tif ( array === undefined ) array = [];\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tarray[ offset ] = this.x;\r\n\t\tarray[ offset + 1 ] = this.y;\r\n\t\tarray[ offset + 2 ] = this.z;\r\n\t\tarray[ offset + 3 ] = this.w;\r\n\r\n\t\treturn array;\r\n\r\n\t},\r\n\r\n\tfromAttribute: function ( attribute, index, offset ) {\r\n\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tindex = index * attribute.itemSize + offset;\r\n\r\n\t\tthis.x = attribute.array[ index ];\r\n\t\tthis.y = attribute.array[ index + 1 ];\r\n\t\tthis.z = attribute.array[ index + 2 ];\r\n\t\tthis.w = attribute.array[ index + 3 ];\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Euler.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n * @author bhouston / http://clara.io\r\n */\r\n\r\nTHREE.Euler = function ( x, y, z, order ) {\r\n\r\n\tthis._x = x || 0;\r\n\tthis._y = y || 0;\r\n\tthis._z = z || 0;\r\n\tthis._order = order || THREE.Euler.DefaultOrder;\r\n\r\n};\r\n\r\nTHREE.Euler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\r\n\r\nTHREE.Euler.DefaultOrder = 'XYZ';\r\n\r\nTHREE.Euler.prototype = {\r\n\r\n\tconstructor: THREE.Euler,\r\n\r\n\tget x () {\r\n\r\n\t\treturn this._x;\r\n\r\n\t},\r\n\r\n\tset x ( value ) {\r\n\r\n\t\tthis._x = value;\r\n\t\tthis.onChangeCallback();\r\n\r\n\t},\r\n\r\n\tget y () {\r\n\r\n\t\treturn this._y;\r\n\r\n\t},\r\n\r\n\tset y ( value ) {\r\n\r\n\t\tthis._y = value;\r\n\t\tthis.onChangeCallback();\r\n\r\n\t},\r\n\r\n\tget z () {\r\n\r\n\t\treturn this._z;\r\n\r\n\t},\r\n\r\n\tset z ( value ) {\r\n\r\n\t\tthis._z = value;\r\n\t\tthis.onChangeCallback();\r\n\r\n\t},\r\n\r\n\tget order () {\r\n\r\n\t\treturn this._order;\r\n\r\n\t},\r\n\r\n\tset order ( value ) {\r\n\r\n\t\tthis._order = value;\r\n\t\tthis.onChangeCallback();\r\n\r\n\t},\r\n\r\n\tset: function ( x, y, z, order ) {\r\n\r\n\t\tthis._x = x;\r\n\t\tthis._y = y;\r\n\t\tthis._z = z;\r\n\t\tthis._order = order || this._order;\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\r\n\r\n\t},\r\n\r\n\tcopy: function ( euler ) {\r\n\r\n\t\tthis._x = euler._x;\r\n\t\tthis._y = euler._y;\r\n\t\tthis._z = euler._z;\r\n\t\tthis._order = euler._order;\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromRotationMatrix: function ( m, order, update ) {\r\n\r\n\t\tvar clamp = THREE.Math.clamp;\r\n\r\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\r\n\r\n\t\tvar te = m.elements;\r\n\t\tvar m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\r\n\t\tvar m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\r\n\t\tvar m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\r\n\r\n\t\torder = order || this._order;\r\n\r\n\t\tif ( order === 'XYZ' ) {\r\n\r\n\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\r\n\r\n\t\t\tif ( Math.abs( m13 ) < 0.99999 ) {\r\n\r\n\t\t\t\tthis._x = Math.atan2( - m23, m33 );\r\n\t\t\t\tthis._z = Math.atan2( - m12, m11 );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis._x = Math.atan2( m32, m22 );\r\n\t\t\t\tthis._z = 0;\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( order === 'YXZ' ) {\r\n\r\n\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\r\n\r\n\t\t\tif ( Math.abs( m23 ) < 0.99999 ) {\r\n\r\n\t\t\t\tthis._y = Math.atan2( m13, m33 );\r\n\t\t\t\tthis._z = Math.atan2( m21, m22 );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis._y = Math.atan2( - m31, m11 );\r\n\t\t\t\tthis._z = 0;\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( order === 'ZXY' ) {\r\n\r\n\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\r\n\r\n\t\t\tif ( Math.abs( m32 ) < 0.99999 ) {\r\n\r\n\t\t\t\tthis._y = Math.atan2( - m31, m33 );\r\n\t\t\t\tthis._z = Math.atan2( - m12, m22 );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis._y = 0;\r\n\t\t\t\tthis._z = Math.atan2( m21, m11 );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( order === 'ZYX' ) {\r\n\r\n\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\r\n\r\n\t\t\tif ( Math.abs( m31 ) < 0.99999 ) {\r\n\r\n\t\t\t\tthis._x = Math.atan2( m32, m33 );\r\n\t\t\t\tthis._z = Math.atan2( m21, m11 );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis._x = 0;\r\n\t\t\t\tthis._z = Math.atan2( - m12, m22 );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( order === 'YZX' ) {\r\n\r\n\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\r\n\r\n\t\t\tif ( Math.abs( m21 ) < 0.99999 ) {\r\n\r\n\t\t\t\tthis._x = Math.atan2( - m23, m22 );\r\n\t\t\t\tthis._y = Math.atan2( - m31, m11 );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis._x = 0;\r\n\t\t\t\tthis._y = Math.atan2( m13, m33 );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( order === 'XZY' ) {\r\n\r\n\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\r\n\r\n\t\t\tif ( Math.abs( m12 ) < 0.99999 ) {\r\n\r\n\t\t\t\tthis._x = Math.atan2( m32, m22 );\r\n\t\t\t\tthis._y = Math.atan2( m13, m11 );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis._x = Math.atan2( - m23, m33 );\r\n\t\t\t\tthis._y = 0;\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() given unsupported order: ' + order );\r\n\r\n\t\t}\r\n\r\n\t\tthis._order = order;\r\n\r\n\t\tif ( update !== false ) this.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromQuaternion: function () {\r\n\r\n\t\tvar matrix;\r\n\r\n\t\treturn function ( q, order, update ) {\r\n\r\n\t\t\tif ( matrix === undefined ) matrix = new THREE.Matrix4();\r\n\r\n\t\t\tmatrix.makeRotationFromQuaternion( q );\r\n\r\n\t\t\treturn this.setFromRotationMatrix( matrix, order, update );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tsetFromVector3: function ( v, order ) {\r\n\r\n\t\treturn this.set( v.x, v.y, v.z, order || this._order );\r\n\r\n\t},\r\n\r\n\treorder: function () {\r\n\r\n\t\t// WARNING: this discards revolution information -bhouston\r\n\r\n\t\tvar q = new THREE.Quaternion();\r\n\r\n\t\treturn function ( newOrder ) {\r\n\r\n\t\t\tq.setFromEuler( this );\r\n\t\t\t\r\n\t\t\treturn this.setFromQuaternion( q, newOrder );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tequals: function ( euler ) {\r\n\r\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\r\n\r\n\t},\r\n\r\n\tfromArray: function ( array ) {\r\n\r\n\t\tthis._x = array[ 0 ];\r\n\t\tthis._y = array[ 1 ];\r\n\t\tthis._z = array[ 2 ];\r\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\r\n\r\n\t\tthis.onChangeCallback();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoArray: function ( array, offset ) {\r\n\r\n\t\tif ( array === undefined ) array = [];\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tarray[ offset ] = this._x;\r\n\t\tarray[ offset + 1 ] = this._y;\r\n\t\tarray[ offset + 2 ] = this._z;\r\n\t\tarray[ offset + 3 ] = this._order;\r\n\r\n\t\treturn array;\r\n\r\n\t},\r\n\r\n\ttoVector3: function ( optionalResult ) {\r\n\r\n\t\tif ( optionalResult ) {\r\n\r\n\t\t\treturn optionalResult.set( this._x, this._y, this._z );\r\n\r\n\t\t} else {\r\n\r\n\t\t\treturn new THREE.Vector3( this._x, this._y, this._z );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tonChange: function ( callback ) {\r\n\r\n\t\tthis.onChangeCallback = callback;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tonChangeCallback: function () {}\r\n\r\n};\r\n\r\n// File:src/math/Line3.js\r\n\r\n/**\r\n * @author bhouston / http://clara.io\r\n */\r\n\r\nTHREE.Line3 = function ( start, end ) {\r\n\r\n\tthis.start = ( start !== undefined ) ? start : new THREE.Vector3();\r\n\tthis.end = ( end !== undefined ) ? end : new THREE.Vector3();\r\n\r\n};\r\n\r\nTHREE.Line3.prototype = {\r\n\r\n\tconstructor: THREE.Line3,\r\n\r\n\tset: function ( start, end ) {\r\n\r\n\t\tthis.start.copy( start );\r\n\t\tthis.end.copy( end );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\r\n\t},\r\n\r\n\tcopy: function ( line ) {\r\n\r\n\t\tthis.start.copy( line.start );\r\n\t\tthis.end.copy( line.end );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcenter: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\treturn result.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\r\n\r\n\t},\r\n\r\n\tdelta: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\treturn result.subVectors( this.end, this.start );\r\n\r\n\t},\r\n\r\n\tdistanceSq: function () {\r\n\r\n\t\treturn this.start.distanceToSquared( this.end );\r\n\r\n\t},\r\n\r\n\tdistance: function () {\r\n\r\n\t\treturn this.start.distanceTo( this.end );\r\n\r\n\t},\r\n\r\n\tat: function ( t, optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\treturn this.delta( result ).multiplyScalar( t ).add( this.start );\r\n\r\n\t},\r\n\r\n\tclosestPointToPointParameter: function () {\r\n\r\n\t\tvar startP = new THREE.Vector3();\r\n\t\tvar startEnd = new THREE.Vector3();\r\n\r\n\t\treturn function ( point, clampToLine ) {\r\n\r\n\t\t\tstartP.subVectors( point, this.start );\r\n\t\t\tstartEnd.subVectors( this.end, this.start );\r\n\r\n\t\t\tvar startEnd2 = startEnd.dot( startEnd );\r\n\t\t\tvar startEnd_startP = startEnd.dot( startP );\r\n\r\n\t\t\tvar t = startEnd_startP / startEnd2;\r\n\r\n\t\t\tif ( clampToLine ) {\r\n\r\n\t\t\t\tt = THREE.Math.clamp( t, 0, 1 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn t;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tclosestPointToPoint: function ( point, clampToLine, optionalTarget ) {\r\n\r\n\t\tvar t = this.closestPointToPointParameter( point, clampToLine );\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\treturn this.delta( result ).multiplyScalar( t ).add( this.start );\r\n\r\n\t},\r\n\r\n\tapplyMatrix4: function ( matrix ) {\r\n\r\n\t\tthis.start.applyMatrix4( matrix );\r\n\t\tthis.end.applyMatrix4( matrix );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( line ) {\r\n\r\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Box2.js\r\n\r\n/**\r\n * @author bhouston / http://clara.io\r\n */\r\n\r\nTHREE.Box2 = function ( min, max ) {\r\n\r\n\tthis.min = ( min !== undefined ) ? min : new THREE.Vector2( + Infinity, + Infinity );\r\n\tthis.max = ( max !== undefined ) ? max : new THREE.Vector2( - Infinity, - Infinity );\r\n\r\n};\r\n\r\nTHREE.Box2.prototype = {\r\n\r\n\tconstructor: THREE.Box2,\r\n\r\n\tset: function ( min, max ) {\r\n\r\n\t\tthis.min.copy( min );\r\n\t\tthis.max.copy( max );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromPoints: function ( points ) {\r\n\r\n\t\tthis.makeEmpty();\r\n\r\n\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\r\n\r\n\t\t\tthis.expandByPoint( points[ i ] );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromCenterAndSize: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector2();\r\n\r\n\t\treturn function ( center, size ) {\r\n\r\n\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\r\n\t\t\tthis.min.copy( center ).sub( halfSize );\r\n\t\t\tthis.max.copy( center ).add( halfSize );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\r\n\t},\r\n\r\n\tcopy: function ( box ) {\r\n\r\n\t\tthis.min.copy( box.min );\r\n\t\tthis.max.copy( box.max );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmakeEmpty: function () {\r\n\r\n\t\tthis.min.x = this.min.y = + Infinity;\r\n\t\tthis.max.x = this.max.y = - Infinity;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tisEmpty: function () {\r\n\r\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\r\n\r\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\r\n\r\n\t},\r\n\r\n\tcenter: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector2();\r\n\t\treturn result.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\r\n\r\n\t},\r\n\r\n\tsize: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector2();\r\n\t\treturn result.subVectors( this.max, this.min );\r\n\r\n\t},\r\n\r\n\texpandByPoint: function ( point ) {\r\n\r\n\t\tthis.min.min( point );\r\n\t\tthis.max.max( point );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\texpandByVector: function ( vector ) {\r\n\r\n\t\tthis.min.sub( vector );\r\n\t\tthis.max.add( vector );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\texpandByScalar: function ( scalar ) {\r\n\r\n\t\tthis.min.addScalar( - scalar );\r\n\t\tthis.max.addScalar( scalar );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcontainsPoint: function ( point ) {\r\n\r\n\t\tif ( point.x < this.min.x || point.x > this.max.x ||\r\n\t\t point.y < this.min.y || point.y > this.max.y ) {\r\n\r\n\t\t\treturn false;\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\tcontainsBox: function ( box ) {\r\n\r\n\t\tif ( ( this.min.x <= box.min.x ) && ( box.max.x <= this.max.x ) &&\r\n\t\t ( this.min.y <= box.min.y ) && ( box.max.y <= this.max.y ) ) {\r\n\r\n\t\t\treturn true;\r\n\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t},\r\n\r\n\tgetParameter: function ( point, optionalTarget ) {\r\n\r\n\t\t// This can potentially have a divide by zero if the box\r\n\t\t// has a size dimension of 0.\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector2();\r\n\r\n\t\treturn result.set(\r\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\r\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\r\n\t\t);\r\n\r\n\t},\r\n\r\n\tintersectsBox: function ( box ) {\r\n\r\n\t\t// using 6 splitting planes to rule out intersections.\r\n\r\n\t\tif ( box.max.x < this.min.x || box.min.x > this.max.x ||\r\n\t\t box.max.y < this.min.y || box.min.y > this.max.y ) {\r\n\r\n\t\t\treturn false;\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\tclampPoint: function ( point, optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector2();\r\n\t\treturn result.copy( point ).clamp( this.min, this.max );\r\n\r\n\t},\r\n\r\n\tdistanceToPoint: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector2();\r\n\r\n\t\treturn function ( point ) {\r\n\r\n\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\r\n\t\t\treturn clampedPoint.sub( point ).length();\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tintersect: function ( box ) {\r\n\r\n\t\tthis.min.max( box.min );\r\n\t\tthis.max.min( box.max );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tunion: function ( box ) {\r\n\r\n\t\tthis.min.min( box.min );\r\n\t\tthis.max.max( box.max );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttranslate: function ( offset ) {\r\n\r\n\t\tthis.min.add( offset );\r\n\t\tthis.max.add( offset );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( box ) {\r\n\r\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Box3.js\r\n\r\n/**\r\n * @author bhouston / http://clara.io\r\n * @author WestLangley / http://github.com/WestLangley\r\n */\r\n\r\nTHREE.Box3 = function ( min, max ) {\r\n\r\n\tthis.min = ( min !== undefined ) ? min : new THREE.Vector3( + Infinity, + Infinity, + Infinity );\r\n\tthis.max = ( max !== undefined ) ? max : new THREE.Vector3( - Infinity, - Infinity, - Infinity );\r\n\r\n};\r\n\r\nTHREE.Box3.prototype = {\r\n\r\n\tconstructor: THREE.Box3,\r\n\r\n\tset: function ( min, max ) {\r\n\r\n\t\tthis.min.copy( min );\r\n\t\tthis.max.copy( max );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromArray: function ( array ) {\r\n\r\n\t\tvar minX = + Infinity;\r\n\t\tvar minY = + Infinity;\r\n\t\tvar minZ = + Infinity;\r\n\r\n\t\tvar maxX = - Infinity;\r\n\t\tvar maxY = - Infinity;\r\n\t\tvar maxZ = - Infinity;\r\n\r\n\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\r\n\r\n\t\t\tvar x = array[ i ];\r\n\t\t\tvar y = array[ i + 1 ];\r\n\t\t\tvar z = array[ i + 2 ];\r\n\r\n\t\t\tif ( x < minX ) minX = x;\r\n\t\t\tif ( y < minY ) minY = y;\r\n\t\t\tif ( z < minZ ) minZ = z;\r\n\r\n\t\t\tif ( x > maxX ) maxX = x;\r\n\t\t\tif ( y > maxY ) maxY = y;\r\n\t\t\tif ( z > maxZ ) maxZ = z;\r\n\r\n\t\t}\r\n\r\n\t\tthis.min.set( minX, minY, minZ );\r\n\t\tthis.max.set( maxX, maxY, maxZ );\r\n\r\n\t},\r\n\r\n\tsetFromPoints: function ( points ) {\r\n\r\n\t\tthis.makeEmpty();\r\n\r\n\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\r\n\r\n\t\t\tthis.expandByPoint( points[ i ] );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromCenterAndSize: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( center, size ) {\r\n\r\n\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\r\n\r\n\t\t\tthis.min.copy( center ).sub( halfSize );\r\n\t\t\tthis.max.copy( center ).add( halfSize );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tsetFromObject: function () {\r\n\r\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\r\n\t\t// accounting for both the object's, and children's, world transforms\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( object ) {\r\n\r\n\t\t\tvar scope = this;\r\n\r\n\t\t\tobject.updateMatrixWorld( true );\r\n\r\n\t\t\tthis.makeEmpty();\r\n\r\n\t\t\tobject.traverse( function ( node ) {\r\n\r\n\t\t\t\tvar geometry = node.geometry;\r\n\r\n\t\t\t\tif ( geometry !== undefined ) {\r\n\r\n\t\t\t\t\tif ( geometry instanceof THREE.Geometry ) {\r\n\r\n\t\t\t\t\t\tvar vertices = geometry.vertices;\r\n\r\n\t\t\t\t\t\tfor ( var i = 0, il = vertices.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\t\t\tv1.copy( vertices[ i ] );\r\n\t\t\t\t\t\t\tv1.applyMatrix4( node.matrixWorld );\r\n\r\n\t\t\t\t\t\t\tscope.expandByPoint( v1 );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if ( geometry instanceof THREE.BufferGeometry && geometry.attributes[ 'position' ] !== undefined ) {\r\n\r\n\t\t\t\t\t\tvar positions = geometry.attributes[ 'position' ].array;\r\n\r\n\t\t\t\t\t\tfor ( var i = 0, il = positions.length; i < il; i += 3 ) {\r\n\r\n\t\t\t\t\t\t\tv1.fromArray( positions, i );\r\n\t\t\t\t\t\t\tv1.applyMatrix4( node.matrixWorld );\r\n\r\n\t\t\t\t\t\t\tscope.expandByPoint( v1 );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\r\n\t},\r\n\r\n\tcopy: function ( box ) {\r\n\r\n\t\tthis.min.copy( box.min );\r\n\t\tthis.max.copy( box.max );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmakeEmpty: function () {\r\n\r\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\r\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tisEmpty: function () {\r\n\r\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\r\n\r\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\r\n\r\n\t},\r\n\r\n\tcenter: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\treturn result.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\r\n\r\n\t},\r\n\r\n\tsize: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\treturn result.subVectors( this.max, this.min );\r\n\r\n\t},\r\n\r\n\texpandByPoint: function ( point ) {\r\n\r\n\t\tthis.min.min( point );\r\n\t\tthis.max.max( point );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\texpandByVector: function ( vector ) {\r\n\r\n\t\tthis.min.sub( vector );\r\n\t\tthis.max.add( vector );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\texpandByScalar: function ( scalar ) {\r\n\r\n\t\tthis.min.addScalar( - scalar );\r\n\t\tthis.max.addScalar( scalar );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcontainsPoint: function ( point ) {\r\n\r\n\t\tif ( point.x < this.min.x || point.x > this.max.x ||\r\n\t\t\t\t point.y < this.min.y || point.y > this.max.y ||\r\n\t\t\t\t point.z < this.min.z || point.z > this.max.z ) {\r\n\r\n\t\t\treturn false;\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\tcontainsBox: function ( box ) {\r\n\r\n\t\tif ( ( this.min.x <= box.min.x ) && ( box.max.x <= this.max.x ) &&\r\n\t\t\t ( this.min.y <= box.min.y ) && ( box.max.y <= this.max.y ) &&\r\n\t\t\t ( this.min.z <= box.min.z ) && ( box.max.z <= this.max.z ) ) {\r\n\r\n\t\t\treturn true;\r\n\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t},\r\n\r\n\tgetParameter: function ( point, optionalTarget ) {\r\n\r\n\t\t// This can potentially have a divide by zero if the box\r\n\t\t// has a size dimension of 0.\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\treturn result.set(\r\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\r\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\r\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\r\n\t\t);\r\n\r\n\t},\r\n\r\n\tintersectsBox: function ( box ) {\r\n\r\n\t\t// using 6 splitting planes to rule out intersections.\r\n\r\n\t\tif ( box.max.x < this.min.x || box.min.x > this.max.x ||\r\n\t\t\t\t box.max.y < this.min.y || box.min.y > this.max.y ||\r\n\t\t\t\t box.max.z < this.min.z || box.min.z > this.max.z ) {\r\n\r\n\t\t\treturn false;\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\tintersectsSphere: ( function () {\r\n\r\n\t\tvar closestPoint;\r\n\r\n\t\treturn function intersectsSphere( sphere ) {\r\n\r\n\t\t\tif ( closestPoint === undefined ) closestPoint = new THREE.Vector3();\r\n\r\n\t\t\t// Find the point on the AABB closest to the sphere center.\r\n\t\t\tthis.clampPoint( sphere.center, closestPoint );\r\n\r\n\t\t\t// If that point is inside the sphere, the AABB and sphere intersect.\r\n\t\t\treturn closestPoint.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\r\n\r\n\t\t};\r\n\r\n\t} )(),\r\n\r\n\tintersectsPlane: function ( plane ) {\r\n\r\n\t\t// We compute the minimum and maximum dot product values. If those values\r\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\r\n\r\n\t\tvar min, max;\r\n\r\n\t\tif ( plane.normal.x > 0 ) {\r\n\r\n\t\t\tmin = plane.normal.x * this.min.x;\r\n\t\t\tmax = plane.normal.x * this.max.x;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tmin = plane.normal.x * this.max.x;\r\n\t\t\tmax = plane.normal.x * this.min.x;\r\n\r\n\t\t}\r\n\r\n\t\tif ( plane.normal.y > 0 ) {\r\n\r\n\t\t\tmin += plane.normal.y * this.min.y;\r\n\t\t\tmax += plane.normal.y * this.max.y;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tmin += plane.normal.y * this.max.y;\r\n\t\t\tmax += plane.normal.y * this.min.y;\r\n\r\n\t\t}\r\n\r\n\t\tif ( plane.normal.z > 0 ) {\r\n\r\n\t\t\tmin += plane.normal.z * this.min.z;\r\n\t\t\tmax += plane.normal.z * this.max.z;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tmin += plane.normal.z * this.max.z;\r\n\t\t\tmax += plane.normal.z * this.min.z;\r\n\r\n\t\t}\r\n\r\n\t\treturn ( min <= plane.constant && max >= plane.constant );\r\n\r\n\t},\r\n\r\n\tclampPoint: function ( point, optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\treturn result.copy( point ).clamp( this.min, this.max );\r\n\r\n\t},\r\n\r\n\tdistanceToPoint: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( point ) {\r\n\r\n\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\r\n\t\t\treturn clampedPoint.sub( point ).length();\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tgetBoundingSphere: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( optionalTarget ) {\r\n\r\n\t\t\tvar result = optionalTarget || new THREE.Sphere();\r\n\r\n\t\t\tresult.center = this.center();\r\n\t\t\tresult.radius = this.size( v1 ).length() * 0.5;\r\n\r\n\t\t\treturn result;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tintersect: function ( box ) {\r\n\r\n\t\tthis.min.max( box.min );\r\n\t\tthis.max.min( box.max );\r\n\r\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\r\n\t\tif( this.isEmpty() ) this.makeEmpty();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tunion: function ( box ) {\r\n\r\n\t\tthis.min.min( box.min );\r\n\t\tthis.max.max( box.max );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tapplyMatrix4: function () {\r\n\r\n\t\tvar points = [\r\n\t\t\tnew THREE.Vector3(),\r\n\t\t\tnew THREE.Vector3(),\r\n\t\t\tnew THREE.Vector3(),\r\n\t\t\tnew THREE.Vector3(),\r\n\t\t\tnew THREE.Vector3(),\r\n\t\t\tnew THREE.Vector3(),\r\n\t\t\tnew THREE.Vector3(),\r\n\t\t\tnew THREE.Vector3()\r\n\t\t];\r\n\r\n\t\treturn function ( matrix ) {\r\n\r\n\t\t\t// transform of empty box is an empty box.\r\n\t\t\tif( this.isEmpty() ) return this;\r\n\r\n\t\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\r\n\t\t\tpoints[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\r\n\t\t\tpoints[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\r\n\t\t\tpoints[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\r\n\t\t\tpoints[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\r\n\t\t\tpoints[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\r\n\t\t\tpoints[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\r\n\t\t\tpoints[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\r\n\t\t\tpoints[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix );\t// 111\r\n\r\n\t\t\tthis.setFromPoints( points );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\ttranslate: function ( offset ) {\r\n\r\n\t\tthis.min.add( offset );\r\n\t\tthis.max.add( offset );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( box ) {\r\n\r\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Matrix3.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n * @author bhouston / http://clara.io\r\n * @author tschw\r\n */\r\n\r\nTHREE.Matrix3 = function () {\r\n\r\n\tthis.elements = new Float32Array( [\r\n\r\n\t\t1, 0, 0,\r\n\t\t0, 1, 0,\r\n\t\t0, 0, 1\r\n\r\n\t] );\r\n\r\n\tif ( arguments.length > 0 ) {\r\n\r\n\t\tconsole.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.Matrix3.prototype = {\r\n\r\n\tconstructor: THREE.Matrix3,\r\n\r\n\tset: function ( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\r\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\r\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tidentity: function () {\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\t1, 0, 0,\r\n\t\t\t0, 1, 0,\r\n\t\t\t0, 0, 1\r\n\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().fromArray( this.elements );\r\n\r\n\t},\r\n\r\n\tcopy: function ( m ) {\r\n\r\n\t\tvar me = m.elements;\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\tme[ 0 ], me[ 3 ], me[ 6 ],\r\n\t\t\tme[ 1 ], me[ 4 ], me[ 7 ],\r\n\t\t\tme[ 2 ], me[ 5 ], me[ 8 ]\r\n\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromMatrix4: function( m ) {\r\n\r\n\t\tvar me = m.elements;\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\r\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\r\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\r\n\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tapplyToVector3Array: function () {\r\n\r\n\t\tvar v1;\r\n\r\n\t\treturn function ( array, offset, length ) {\r\n\r\n\t\t\tif ( v1 === undefined ) v1 = new THREE.Vector3();\r\n\t\t\tif ( offset === undefined ) offset = 0;\r\n\t\t\tif ( length === undefined ) length = array.length;\r\n\r\n\t\t\tfor ( var i = 0, j = offset; i < length; i += 3, j += 3 ) {\r\n\r\n\t\t\t\tv1.fromArray( array, j );\r\n\t\t\t\tv1.applyMatrix3( this );\r\n\t\t\t\tv1.toArray( array, j );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn array;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tapplyToBuffer: function () {\r\n\r\n\t\tvar v1;\r\n\r\n\t\treturn function applyToBuffer( buffer, offset, length ) {\r\n\r\n\t\t\tif ( v1 === undefined ) v1 = new THREE.Vector3();\r\n\t\t\tif ( offset === undefined ) offset = 0;\r\n\t\t\tif ( length === undefined ) length = buffer.length / buffer.itemSize;\r\n\r\n\t\t\tfor ( var i = 0, j = offset; i < length; i ++, j ++ ) {\r\n\r\n\t\t\t\tv1.x = buffer.getX( j );\r\n\t\t\t\tv1.y = buffer.getY( j );\r\n\t\t\t\tv1.z = buffer.getZ( j );\r\n\r\n\t\t\t\tv1.applyMatrix3( this );\r\n\r\n\t\t\t\tbuffer.setXYZ( v1.x, v1.y, v1.z );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn buffer;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tmultiplyScalar: function ( s ) {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\r\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\r\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdeterminant: function () {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tvar a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\r\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\r\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\r\n\r\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\r\n\r\n\t},\r\n\r\n\tgetInverse: function ( matrix, throwOnDegenerate ) {\r\n\r\n\t\tif ( matrix instanceof THREE.Matrix4 ) {\r\n\r\n\t\t\tconsole.error( \"THREE.Matrix3.getInverse no longer takes a Matrix4 argument.\" );\r\n\r\n\t\t}\r\n\r\n\t\tvar me = matrix.elements,\r\n\t\t\tte = this.elements,\r\n\r\n\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ],\r\n\t\t\tn12 = me[ 3 ], n22 = me[ 4 ], n32 = me[ 5 ],\r\n\t\t\tn13 = me[ 6 ], n23 = me[ 7 ], n33 = me[ 8 ],\r\n\r\n\t\t\tt11 = n33 * n22 - n32 * n23,\r\n\t\t\tt12 = n32 * n13 - n33 * n12,\r\n\t\t\tt13 = n23 * n12 - n22 * n13,\r\n\r\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\r\n\r\n\t\tif ( det === 0 ) {\r\n\r\n\t\t\tvar msg = \"THREE.Matrix3.getInverse(): can't invert matrix, determinant is 0\";\r\n\r\n\t\t\tif ( throwOnDegenerate || false ) {\r\n\r\n\t\t\t\tthrow new Error( msg );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tconsole.warn( msg );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn this.identity();\r\n\t\t}\r\n\t\t\r\n\t\tvar detInv = 1 / det;\r\n\r\n\t\tte[ 0 ] = t11 * detInv;\r\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\r\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\r\n\r\n\t\tte[ 3 ] = t12 * detInv;\r\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\r\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\r\n\r\n\t\tte[ 6 ] = t13 * detInv;\r\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\r\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttranspose: function () {\r\n\r\n\t\tvar tmp, m = this.elements;\r\n\r\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\r\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\r\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tflattenToArrayOffset: function ( array, offset ) {\r\n\r\n\t\tconsole.warn( \"THREE.Matrix3: .flattenToArrayOffset is deprecated \" +\r\n\t\t\t\t\"- just use .toArray instead.\" );\r\n\r\n\t\treturn this.toArray( array, offset );\r\n\r\n\t},\r\n\r\n\tgetNormalMatrix: function ( matrix4 ) {\r\n\r\n\t\treturn this.setFromMatrix4( matrix4 ).getInverse( this ).transpose();\r\n\r\n\t},\r\n\r\n\ttransposeIntoArray: function ( r ) {\r\n\r\n\t\tvar m = this.elements;\r\n\r\n\t\tr[ 0 ] = m[ 0 ];\r\n\t\tr[ 1 ] = m[ 3 ];\r\n\t\tr[ 2 ] = m[ 6 ];\r\n\t\tr[ 3 ] = m[ 1 ];\r\n\t\tr[ 4 ] = m[ 4 ];\r\n\t\tr[ 5 ] = m[ 7 ];\r\n\t\tr[ 6 ] = m[ 2 ];\r\n\t\tr[ 7 ] = m[ 5 ];\r\n\t\tr[ 8 ] = m[ 8 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tfromArray: function ( array ) {\r\n\r\n\t\tthis.elements.set( array );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoArray: function ( array, offset ) {\r\n\r\n\t\tif ( array === undefined ) array = [];\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tarray[ offset ] = te[ 0 ];\r\n\t\tarray[ offset + 1 ] = te[ 1 ];\r\n\t\tarray[ offset + 2 ] = te[ 2 ];\r\n\r\n\t\tarray[ offset + 3 ] = te[ 3 ];\r\n\t\tarray[ offset + 4 ] = te[ 4 ];\r\n\t\tarray[ offset + 5 ] = te[ 5 ];\r\n\r\n\t\tarray[ offset + 6 ] = te[ 6 ];\r\n\t\tarray[ offset + 7 ] = te[ 7 ];\r\n\t\tarray[ offset + 8 ] = te[ 8 ];\r\n\r\n\t\treturn array;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Matrix4.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author supereggbert / http://www.paulbrunt.co.uk/\r\n * @author philogb / http://blog.thejit.org/\r\n * @author jordi_ros / http://plattsoft.com\r\n * @author D1plo1d / http://github.com/D1plo1d\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author timknip / http://www.floorplanner.com/\r\n * @author bhouston / http://clara.io\r\n * @author WestLangley / http://github.com/WestLangley\r\n */\r\n\r\nTHREE.Matrix4 = function () {\r\n\r\n\tthis.elements = new Float32Array( [\r\n\r\n\t\t1, 0, 0, 0,\r\n\t\t0, 1, 0, 0,\r\n\t\t0, 0, 1, 0,\r\n\t\t0, 0, 0, 1\r\n\r\n\t] );\r\n\r\n\tif ( arguments.length > 0 ) {\r\n\r\n\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.Matrix4.prototype = {\r\n\r\n\tconstructor: THREE.Matrix4,\r\n\r\n\tset: function ( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\r\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\r\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\r\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tidentity: function () {\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\t1, 0, 0, 0,\r\n\t\t\t0, 1, 0, 0,\r\n\t\t\t0, 0, 1, 0,\r\n\t\t\t0, 0, 0, 1\r\n\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Matrix4().fromArray( this.elements );\r\n\r\n\t},\r\n\r\n\tcopy: function ( m ) {\r\n\r\n\t\tthis.elements.set( m.elements );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopyPosition: function ( m ) {\r\n\r\n\t\tvar te = this.elements;\r\n\t\tvar me = m.elements;\r\n\r\n\t\tte[ 12 ] = me[ 12 ];\r\n\t\tte[ 13 ] = me[ 13 ];\r\n\t\tte[ 14 ] = me[ 14 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\textractBasis: function ( xAxis, yAxis, zAxis ) {\r\n\r\n\t\txAxis.setFromMatrixColumn( this, 0 );\r\n\t\tyAxis.setFromMatrixColumn( this, 1 );\r\n\t\tzAxis.setFromMatrixColumn( this, 2 );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmakeBasis: function ( xAxis, yAxis, zAxis ) {\r\n\r\n\t\tthis.set(\r\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\r\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\r\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\r\n\t\t\t0, 0, 0, 1\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\textractRotation: function () {\r\n\r\n\t\tvar v1;\r\n\r\n\t\treturn function ( m ) {\r\n\r\n\t\t\tif ( v1 === undefined ) v1 = new THREE.Vector3();\r\n\r\n\t\t\tvar te = this.elements;\r\n\t\t\tvar me = m.elements;\r\n\r\n\t\t\tvar scaleX = 1 / v1.setFromMatrixColumn( m, 0 ).length();\r\n\t\t\tvar scaleY = 1 / v1.setFromMatrixColumn( m, 1 ).length();\r\n\t\t\tvar scaleZ = 1 / v1.setFromMatrixColumn( m, 2 ).length();\r\n\r\n\t\t\tte[ 0 ] = me[ 0 ] * scaleX;\r\n\t\t\tte[ 1 ] = me[ 1 ] * scaleX;\r\n\t\t\tte[ 2 ] = me[ 2 ] * scaleX;\r\n\r\n\t\t\tte[ 4 ] = me[ 4 ] * scaleY;\r\n\t\t\tte[ 5 ] = me[ 5 ] * scaleY;\r\n\t\t\tte[ 6 ] = me[ 6 ] * scaleY;\r\n\r\n\t\t\tte[ 8 ] = me[ 8 ] * scaleZ;\r\n\t\t\tte[ 9 ] = me[ 9 ] * scaleZ;\r\n\t\t\tte[ 10 ] = me[ 10 ] * scaleZ;\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tmakeRotationFromEuler: function ( euler ) {\r\n\r\n\t\tif ( euler instanceof THREE.Euler === false ) {\r\n\r\n\t\t\tconsole.error( 'THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\r\n\r\n\t\t}\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tvar x = euler.x, y = euler.y, z = euler.z;\r\n\t\tvar a = Math.cos( x ), b = Math.sin( x );\r\n\t\tvar c = Math.cos( y ), d = Math.sin( y );\r\n\t\tvar e = Math.cos( z ), f = Math.sin( z );\r\n\r\n\t\tif ( euler.order === 'XYZ' ) {\r\n\r\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\r\n\r\n\t\t\tte[ 0 ] = c * e;\r\n\t\t\tte[ 4 ] = - c * f;\r\n\t\t\tte[ 8 ] = d;\r\n\r\n\t\t\tte[ 1 ] = af + be * d;\r\n\t\t\tte[ 5 ] = ae - bf * d;\r\n\t\t\tte[ 9 ] = - b * c;\r\n\r\n\t\t\tte[ 2 ] = bf - ae * d;\r\n\t\t\tte[ 6 ] = be + af * d;\r\n\t\t\tte[ 10 ] = a * c;\r\n\r\n\t\t} else if ( euler.order === 'YXZ' ) {\r\n\r\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\r\n\r\n\t\t\tte[ 0 ] = ce + df * b;\r\n\t\t\tte[ 4 ] = de * b - cf;\r\n\t\t\tte[ 8 ] = a * d;\r\n\r\n\t\t\tte[ 1 ] = a * f;\r\n\t\t\tte[ 5 ] = a * e;\r\n\t\t\tte[ 9 ] = - b;\r\n\r\n\t\t\tte[ 2 ] = cf * b - de;\r\n\t\t\tte[ 6 ] = df + ce * b;\r\n\t\t\tte[ 10 ] = a * c;\r\n\r\n\t\t} else if ( euler.order === 'ZXY' ) {\r\n\r\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\r\n\r\n\t\t\tte[ 0 ] = ce - df * b;\r\n\t\t\tte[ 4 ] = - a * f;\r\n\t\t\tte[ 8 ] = de + cf * b;\r\n\r\n\t\t\tte[ 1 ] = cf + de * b;\r\n\t\t\tte[ 5 ] = a * e;\r\n\t\t\tte[ 9 ] = df - ce * b;\r\n\r\n\t\t\tte[ 2 ] = - a * d;\r\n\t\t\tte[ 6 ] = b;\r\n\t\t\tte[ 10 ] = a * c;\r\n\r\n\t\t} else if ( euler.order === 'ZYX' ) {\r\n\r\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\r\n\r\n\t\t\tte[ 0 ] = c * e;\r\n\t\t\tte[ 4 ] = be * d - af;\r\n\t\t\tte[ 8 ] = ae * d + bf;\r\n\r\n\t\t\tte[ 1 ] = c * f;\r\n\t\t\tte[ 5 ] = bf * d + ae;\r\n\t\t\tte[ 9 ] = af * d - be;\r\n\r\n\t\t\tte[ 2 ] = - d;\r\n\t\t\tte[ 6 ] = b * c;\r\n\t\t\tte[ 10 ] = a * c;\r\n\r\n\t\t} else if ( euler.order === 'YZX' ) {\r\n\r\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\r\n\r\n\t\t\tte[ 0 ] = c * e;\r\n\t\t\tte[ 4 ] = bd - ac * f;\r\n\t\t\tte[ 8 ] = bc * f + ad;\r\n\r\n\t\t\tte[ 1 ] = f;\r\n\t\t\tte[ 5 ] = a * e;\r\n\t\t\tte[ 9 ] = - b * e;\r\n\r\n\t\t\tte[ 2 ] = - d * e;\r\n\t\t\tte[ 6 ] = ad * f + bc;\r\n\t\t\tte[ 10 ] = ac - bd * f;\r\n\r\n\t\t} else if ( euler.order === 'XZY' ) {\r\n\r\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\r\n\r\n\t\t\tte[ 0 ] = c * e;\r\n\t\t\tte[ 4 ] = - f;\r\n\t\t\tte[ 8 ] = d * e;\r\n\r\n\t\t\tte[ 1 ] = ac * f + bd;\r\n\t\t\tte[ 5 ] = a * e;\r\n\t\t\tte[ 9 ] = ad * f - bc;\r\n\r\n\t\t\tte[ 2 ] = bc * f - ad;\r\n\t\t\tte[ 6 ] = b * e;\r\n\t\t\tte[ 10 ] = bd * f + ac;\r\n\r\n\t\t}\r\n\r\n\t\t// last column\r\n\t\tte[ 3 ] = 0;\r\n\t\tte[ 7 ] = 0;\r\n\t\tte[ 11 ] = 0;\r\n\r\n\t\t// bottom row\r\n\t\tte[ 12 ] = 0;\r\n\t\tte[ 13 ] = 0;\r\n\t\tte[ 14 ] = 0;\r\n\t\tte[ 15 ] = 1;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmakeRotationFromQuaternion: function ( q ) {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tvar x = q.x, y = q.y, z = q.z, w = q.w;\r\n\t\tvar x2 = x + x, y2 = y + y, z2 = z + z;\r\n\t\tvar xx = x * x2, xy = x * y2, xz = x * z2;\r\n\t\tvar yy = y * y2, yz = y * z2, zz = z * z2;\r\n\t\tvar wx = w * x2, wy = w * y2, wz = w * z2;\r\n\r\n\t\tte[ 0 ] = 1 - ( yy + zz );\r\n\t\tte[ 4 ] = xy - wz;\r\n\t\tte[ 8 ] = xz + wy;\r\n\r\n\t\tte[ 1 ] = xy + wz;\r\n\t\tte[ 5 ] = 1 - ( xx + zz );\r\n\t\tte[ 9 ] = yz - wx;\r\n\r\n\t\tte[ 2 ] = xz - wy;\r\n\t\tte[ 6 ] = yz + wx;\r\n\t\tte[ 10 ] = 1 - ( xx + yy );\r\n\r\n\t\t// last column\r\n\t\tte[ 3 ] = 0;\r\n\t\tte[ 7 ] = 0;\r\n\t\tte[ 11 ] = 0;\r\n\r\n\t\t// bottom row\r\n\t\tte[ 12 ] = 0;\r\n\t\tte[ 13 ] = 0;\r\n\t\tte[ 14 ] = 0;\r\n\t\tte[ 15 ] = 1;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tlookAt: function () {\r\n\r\n\t\tvar x, y, z;\r\n\r\n\t\treturn function ( eye, target, up ) {\r\n\r\n\t\t\tif ( x === undefined ) {\r\n\r\n\t\t\t\tx = new THREE.Vector3();\r\n\t\t\t\ty = new THREE.Vector3();\r\n\t\t\t\tz = new THREE.Vector3();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar te = this.elements;\r\n\r\n\t\t\tz.subVectors( eye, target ).normalize();\r\n\r\n\t\t\tif ( z.lengthSq() === 0 ) {\r\n\r\n\t\t\t\tz.z = 1;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tx.crossVectors( up, z ).normalize();\r\n\r\n\t\t\tif ( x.lengthSq() === 0 ) {\r\n\r\n\t\t\t\tz.z += 0.0001;\r\n\t\t\t\tx.crossVectors( up, z ).normalize();\r\n\r\n\t\t\t}\r\n\r\n\t\t\ty.crossVectors( z, x );\r\n\r\n\r\n\t\t\tte[ 0 ] = x.x; te[ 4 ] = y.x; te[ 8 ] = z.x;\r\n\t\t\tte[ 1 ] = x.y; te[ 5 ] = y.y; te[ 9 ] = z.y;\r\n\t\t\tte[ 2 ] = x.z; te[ 6 ] = y.z; te[ 10 ] = z.z;\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tmultiply: function ( m, n ) {\r\n\r\n\t\tif ( n !== undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\r\n\t\t\treturn this.multiplyMatrices( m, n );\r\n\r\n\t\t}\r\n\r\n\t\treturn this.multiplyMatrices( this, m );\r\n\r\n\t},\r\n\r\n\tpremultiply: function ( m ) {\r\n\r\n\t\treturn this.multiplyMatrices( m, this );\r\n\r\n\t},\r\n\r\n\tmultiplyMatrices: function ( a, b ) {\r\n\r\n\t\tvar ae = a.elements;\r\n\t\tvar be = b.elements;\r\n\t\tvar te = this.elements;\r\n\r\n\t\tvar a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\r\n\t\tvar a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\r\n\t\tvar a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\r\n\t\tvar a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\r\n\r\n\t\tvar b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\r\n\t\tvar b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\r\n\t\tvar b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\r\n\t\tvar b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\r\n\r\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\r\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\r\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\r\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\r\n\r\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\r\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\r\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\r\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\r\n\r\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\r\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\r\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\r\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\r\n\r\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\r\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\r\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\r\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiplyToArray: function ( a, b, r ) {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tthis.multiplyMatrices( a, b );\r\n\r\n\t\tr[ 0 ] = te[ 0 ]; r[ 1 ] = te[ 1 ]; r[ 2 ] = te[ 2 ]; r[ 3 ] = te[ 3 ];\r\n\t\tr[ 4 ] = te[ 4 ]; r[ 5 ] = te[ 5 ]; r[ 6 ] = te[ 6 ]; r[ 7 ] = te[ 7 ];\r\n\t\tr[ 8 ] = te[ 8 ]; r[ 9 ] = te[ 9 ]; r[ 10 ] = te[ 10 ]; r[ 11 ] = te[ 11 ];\r\n\t\tr[ 12 ] = te[ 12 ]; r[ 13 ] = te[ 13 ]; r[ 14 ] = te[ 14 ]; r[ 15 ] = te[ 15 ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmultiplyScalar: function ( s ) {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\r\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\r\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\r\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tapplyToVector3Array: function () {\r\n\r\n\t\tvar v1;\r\n\r\n\t\treturn function ( array, offset, length ) {\r\n\r\n\t\t\tif ( v1 === undefined ) v1 = new THREE.Vector3();\r\n\t\t\tif ( offset === undefined ) offset = 0;\r\n\t\t\tif ( length === undefined ) length = array.length;\r\n\r\n\t\t\tfor ( var i = 0, j = offset; i < length; i += 3, j += 3 ) {\r\n\r\n\t\t\t\tv1.fromArray( array, j );\r\n\t\t\t\tv1.applyMatrix4( this );\r\n\t\t\t\tv1.toArray( array, j );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn array;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tapplyToBuffer: function () {\r\n\r\n\t\tvar v1;\r\n\r\n\t\treturn function applyToBuffer( buffer, offset, length ) {\r\n\r\n\t\t\tif ( v1 === undefined ) v1 = new THREE.Vector3();\r\n\t\t\tif ( offset === undefined ) offset = 0;\r\n\t\t\tif ( length === undefined ) length = buffer.length / buffer.itemSize;\r\n\r\n\t\t\tfor ( var i = 0, j = offset; i < length; i ++, j ++ ) {\r\n\r\n\t\t\t\tv1.x = buffer.getX( j );\r\n\t\t\t\tv1.y = buffer.getY( j );\r\n\t\t\t\tv1.z = buffer.getZ( j );\r\n\r\n\t\t\t\tv1.applyMatrix4( this );\r\n\r\n\t\t\t\tbuffer.setXYZ( v1.x, v1.y, v1.z );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn buffer;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tdeterminant: function () {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tvar n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\r\n\t\tvar n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\r\n\t\tvar n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\r\n\t\tvar n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\r\n\r\n\t\t//TODO: make this more efficient\r\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\r\n\r\n\t\treturn (\r\n\t\t\tn41 * (\r\n\t\t\t\t+ n14 * n23 * n32\r\n\t\t\t\t - n13 * n24 * n32\r\n\t\t\t\t - n14 * n22 * n33\r\n\t\t\t\t + n12 * n24 * n33\r\n\t\t\t\t + n13 * n22 * n34\r\n\t\t\t\t - n12 * n23 * n34\r\n\t\t\t) +\r\n\t\t\tn42 * (\r\n\t\t\t\t+ n11 * n23 * n34\r\n\t\t\t\t - n11 * n24 * n33\r\n\t\t\t\t + n14 * n21 * n33\r\n\t\t\t\t - n13 * n21 * n34\r\n\t\t\t\t + n13 * n24 * n31\r\n\t\t\t\t - n14 * n23 * n31\r\n\t\t\t) +\r\n\t\t\tn43 * (\r\n\t\t\t\t+ n11 * n24 * n32\r\n\t\t\t\t - n11 * n22 * n34\r\n\t\t\t\t - n14 * n21 * n32\r\n\t\t\t\t + n12 * n21 * n34\r\n\t\t\t\t + n14 * n22 * n31\r\n\t\t\t\t - n12 * n24 * n31\r\n\t\t\t) +\r\n\t\t\tn44 * (\r\n\t\t\t\t- n13 * n22 * n31\r\n\t\t\t\t - n11 * n23 * n32\r\n\t\t\t\t + n11 * n22 * n33\r\n\t\t\t\t + n13 * n21 * n32\r\n\t\t\t\t - n12 * n21 * n33\r\n\t\t\t\t + n12 * n23 * n31\r\n\t\t\t)\r\n\r\n\t\t);\r\n\r\n\t},\r\n\r\n\ttranspose: function () {\r\n\r\n\t\tvar te = this.elements;\r\n\t\tvar tmp;\r\n\r\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\r\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\r\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\r\n\r\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\r\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\r\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tflattenToArrayOffset: function ( array, offset ) {\r\n\r\n\t\tconsole.warn( \"THREE.Matrix3: .flattenToArrayOffset is deprecated \" +\r\n\t\t\t\t\"- just use .toArray instead.\" );\r\n\r\n\t\treturn this.toArray( array, offset );\r\n\r\n\t},\r\n\r\n\tgetPosition: function () {\r\n\r\n\t\tvar v1;\r\n\r\n\t\treturn function () {\r\n\r\n\t\t\tif ( v1 === undefined ) v1 = new THREE.Vector3();\r\n\t\t\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\r\n\r\n\t\t\treturn v1.setFromMatrixColumn( this, 3 );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tsetPosition: function ( v ) {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tte[ 12 ] = v.x;\r\n\t\tte[ 13 ] = v.y;\r\n\t\tte[ 14 ] = v.z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tgetInverse: function ( m, throwOnDegenerate ) {\r\n\r\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\r\n\t\tvar te = this.elements,\r\n\t\t\tme = m.elements,\r\n\r\n\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], n41 = me[ 3 ],\r\n\t\t\tn12 = me[ 4 ], n22 = me[ 5 ], n32 = me[ 6 ], n42 = me[ 7 ],\r\n\t\t\tn13 = me[ 8 ], n23 = me[ 9 ], n33 = me[ 10 ], n43 = me[ 11 ],\r\n\t\t\tn14 = me[ 12 ], n24 = me[ 13 ], n34 = me[ 14 ], n44 = me[ 15 ],\r\n\r\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\r\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\r\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\r\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\r\n\r\n\t\tvar det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\r\n\r\n\t\tif ( det === 0 ) {\r\n\r\n\t\t\tvar msg = \"THREE.Matrix4.getInverse(): can't invert matrix, determinant is 0\";\r\n\r\n\t\t\tif ( throwOnDegenerate || false ) {\r\n\r\n\t\t\t\tthrow new Error( msg );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tconsole.warn( msg );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn this.identity();\r\n\r\n\t\t}\r\n\t\t\r\n\t\tvar detInv = 1 / det;\r\n\r\n\t\tte[ 0 ] = t11 * detInv;\r\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\r\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\r\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\r\n\r\n\t\tte[ 4 ] = t12 * detInv;\r\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\r\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\r\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\r\n\r\n\t\tte[ 8 ] = t13 * detInv;\r\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\r\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\r\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\r\n\r\n\t\tte[ 12 ] = t14 * detInv;\r\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\r\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\r\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tscale: function ( v ) {\r\n\r\n\t\tvar te = this.elements;\r\n\t\tvar x = v.x, y = v.y, z = v.z;\r\n\r\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\r\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\r\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\r\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tgetMaxScaleOnAxis: function () {\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tvar scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\r\n\t\tvar scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\r\n\t\tvar scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\r\n\r\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\r\n\r\n\t},\r\n\r\n\tmakeTranslation: function ( x, y, z ) {\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\t1, 0, 0, x,\r\n\t\t\t0, 1, 0, y,\r\n\t\t\t0, 0, 1, z,\r\n\t\t\t0, 0, 0, 1\r\n\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmakeRotationX: function ( theta ) {\r\n\r\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\t1, 0, 0, 0,\r\n\t\t\t0, c, - s, 0,\r\n\t\t\t0, s, c, 0,\r\n\t\t\t0, 0, 0, 1\r\n\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmakeRotationY: function ( theta ) {\r\n\r\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\t c, 0, s, 0,\r\n\t\t\t 0, 1, 0, 0,\r\n\t\t\t- s, 0, c, 0,\r\n\t\t\t 0, 0, 0, 1\r\n\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmakeRotationZ: function ( theta ) {\r\n\r\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\tc, - s, 0, 0,\r\n\t\t\ts, c, 0, 0,\r\n\t\t\t0, 0, 1, 0,\r\n\t\t\t0, 0, 0, 1\r\n\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmakeRotationAxis: function ( axis, angle ) {\r\n\r\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\r\n\r\n\t\tvar c = Math.cos( angle );\r\n\t\tvar s = Math.sin( angle );\r\n\t\tvar t = 1 - c;\r\n\t\tvar x = axis.x, y = axis.y, z = axis.z;\r\n\t\tvar tx = t * x, ty = t * y;\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\r\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\r\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\r\n\t\t\t0, 0, 0, 1\r\n\r\n\t\t);\r\n\r\n\t\t return this;\r\n\r\n\t},\r\n\r\n\tmakeScale: function ( x, y, z ) {\r\n\r\n\t\tthis.set(\r\n\r\n\t\t\tx, 0, 0, 0,\r\n\t\t\t0, y, 0, 0,\r\n\t\t\t0, 0, z, 0,\r\n\t\t\t0, 0, 0, 1\r\n\r\n\t\t);\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcompose: function ( position, quaternion, scale ) {\r\n\r\n\t\tthis.makeRotationFromQuaternion( quaternion );\r\n\t\tthis.scale( scale );\r\n\t\tthis.setPosition( position );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdecompose: function () {\r\n\r\n\t\tvar vector, matrix;\r\n\r\n\t\treturn function ( position, quaternion, scale ) {\r\n\r\n\t\t\tif ( vector === undefined ) {\r\n\r\n\t\t\t\tvector = new THREE.Vector3();\r\n\t\t\t\tmatrix = new THREE.Matrix4();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar te = this.elements;\r\n\r\n\t\t\tvar sx = vector.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\r\n\t\t\tvar sy = vector.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\r\n\t\t\tvar sz = vector.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\r\n\r\n\t\t\t// if determine is negative, we need to invert one scale\r\n\t\t\tvar det = this.determinant();\r\n\t\t\tif ( det < 0 ) {\r\n\r\n\t\t\t\tsx = - sx;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tposition.x = te[ 12 ];\r\n\t\t\tposition.y = te[ 13 ];\r\n\t\t\tposition.z = te[ 14 ];\r\n\r\n\t\t\t// scale the rotation part\r\n\r\n\t\t\tmatrix.elements.set( this.elements ); // at this point matrix is incomplete so we can't use .copy()\r\n\r\n\t\t\tvar invSX = 1 / sx;\r\n\t\t\tvar invSY = 1 / sy;\r\n\t\t\tvar invSZ = 1 / sz;\r\n\r\n\t\t\tmatrix.elements[ 0 ] *= invSX;\r\n\t\t\tmatrix.elements[ 1 ] *= invSX;\r\n\t\t\tmatrix.elements[ 2 ] *= invSX;\r\n\r\n\t\t\tmatrix.elements[ 4 ] *= invSY;\r\n\t\t\tmatrix.elements[ 5 ] *= invSY;\r\n\t\t\tmatrix.elements[ 6 ] *= invSY;\r\n\r\n\t\t\tmatrix.elements[ 8 ] *= invSZ;\r\n\t\t\tmatrix.elements[ 9 ] *= invSZ;\r\n\t\t\tmatrix.elements[ 10 ] *= invSZ;\r\n\r\n\t\t\tquaternion.setFromRotationMatrix( matrix );\r\n\r\n\t\t\tscale.x = sx;\r\n\t\t\tscale.y = sy;\r\n\t\t\tscale.z = sz;\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tmakeFrustum: function ( left, right, bottom, top, near, far ) {\r\n\r\n\t\tvar te = this.elements;\r\n\t\tvar x = 2 * near / ( right - left );\r\n\t\tvar y = 2 * near / ( top - bottom );\r\n\r\n\t\tvar a = ( right + left ) / ( right - left );\r\n\t\tvar b = ( top + bottom ) / ( top - bottom );\r\n\t\tvar c = - ( far + near ) / ( far - near );\r\n\t\tvar d = - 2 * far * near / ( far - near );\r\n\r\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\r\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\r\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\r\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tmakePerspective: function ( fov, aspect, near, far ) {\r\n\r\n\t\tvar ymax = near * Math.tan( THREE.Math.DEG2RAD * fov * 0.5 );\r\n\t\tvar ymin = - ymax;\r\n\t\tvar xmin = ymin * aspect;\r\n\t\tvar xmax = ymax * aspect;\r\n\r\n\t\treturn this.makeFrustum( xmin, xmax, ymin, ymax, near, far );\r\n\r\n\t},\r\n\r\n\tmakeOrthographic: function ( left, right, top, bottom, near, far ) {\r\n\r\n\t\tvar te = this.elements;\r\n\t\tvar w = 1.0 / ( right - left );\r\n\t\tvar h = 1.0 / ( top - bottom );\r\n\t\tvar p = 1.0 / ( far - near );\r\n\r\n\t\tvar x = ( right + left ) * w;\r\n\t\tvar y = ( top + bottom ) * h;\r\n\t\tvar z = ( far + near ) * p;\r\n\r\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\r\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\r\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\r\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( matrix ) {\r\n\r\n\t\tvar te = this.elements;\r\n\t\tvar me = matrix.elements;\r\n\r\n\t\tfor ( var i = 0; i < 16; i ++ ) {\r\n\r\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\tfromArray: function ( array ) {\r\n\r\n\t\tthis.elements.set( array );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoArray: function ( array, offset ) {\r\n\r\n\t\tif ( array === undefined ) array = [];\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tvar te = this.elements;\r\n\r\n\t\tarray[ offset ] = te[ 0 ];\r\n\t\tarray[ offset + 1 ] = te[ 1 ];\r\n\t\tarray[ offset + 2 ] = te[ 2 ];\r\n\t\tarray[ offset + 3 ] = te[ 3 ];\r\n\r\n\t\tarray[ offset + 4 ] = te[ 4 ];\r\n\t\tarray[ offset + 5 ] = te[ 5 ];\r\n\t\tarray[ offset + 6 ] = te[ 6 ];\r\n\t\tarray[ offset + 7 ] = te[ 7 ];\r\n\r\n\t\tarray[ offset + 8 ] = te[ 8 ];\r\n\t\tarray[ offset + 9 ] = te[ 9 ];\r\n\t\tarray[ offset + 10 ] = te[ 10 ];\r\n\t\tarray[ offset + 11 ] = te[ 11 ];\r\n\r\n\t\tarray[ offset + 12 ] = te[ 12 ];\r\n\t\tarray[ offset + 13 ] = te[ 13 ];\r\n\t\tarray[ offset + 14 ] = te[ 14 ];\r\n\t\tarray[ offset + 15 ] = te[ 15 ];\r\n\r\n\t\treturn array;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Ray.js\r\n\r\n/**\r\n * @author bhouston / http://clara.io\r\n */\r\n\r\nTHREE.Ray = function ( origin, direction ) {\r\n\r\n\tthis.origin = ( origin !== undefined ) ? origin : new THREE.Vector3();\r\n\tthis.direction = ( direction !== undefined ) ? direction : new THREE.Vector3();\r\n\r\n};\r\n\r\nTHREE.Ray.prototype = {\r\n\r\n\tconstructor: THREE.Ray,\r\n\r\n\tset: function ( origin, direction ) {\r\n\r\n\t\tthis.origin.copy( origin );\r\n\t\tthis.direction.copy( direction );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\r\n\t},\r\n\r\n\tcopy: function ( ray ) {\r\n\r\n\t\tthis.origin.copy( ray.origin );\r\n\t\tthis.direction.copy( ray.direction );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tat: function ( t, optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\treturn result.copy( this.direction ).multiplyScalar( t ).add( this.origin );\r\n\r\n\t},\r\n\r\n\tlookAt: function ( v ) {\r\n\r\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\trecast: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( t ) {\r\n\r\n\t\t\tthis.origin.copy( this.at( t, v1 ) );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tclosestPointToPoint: function ( point, optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\tresult.subVectors( point, this.origin );\r\n\t\tvar directionDistance = result.dot( this.direction );\r\n\r\n\t\tif ( directionDistance < 0 ) {\r\n\r\n\t\t\treturn result.copy( this.origin );\r\n\r\n\t\t}\r\n\r\n\t\treturn result.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\r\n\r\n\t},\r\n\r\n\tdistanceToPoint: function ( point ) {\r\n\r\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\r\n\r\n\t},\r\n\r\n\tdistanceSqToPoint: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( point ) {\r\n\r\n\t\t\tvar directionDistance = v1.subVectors( point, this.origin ).dot( this.direction );\r\n\r\n\t\t\t// point behind the ray\r\n\r\n\t\t\tif ( directionDistance < 0 ) {\r\n\r\n\t\t\t\treturn this.origin.distanceToSquared( point );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tv1.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\r\n\r\n\t\t\treturn v1.distanceToSquared( point );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tdistanceSqToSegment: function () {\r\n\r\n\t\tvar segCenter = new THREE.Vector3();\r\n\t\tvar segDir = new THREE.Vector3();\r\n\t\tvar diff = new THREE.Vector3();\r\n\r\n\t\treturn function ( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\r\n\r\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\r\n\t\t\t// It returns the min distance between the ray and the segment\r\n\t\t\t// defined by v0 and v1\r\n\t\t\t// It can also set two optional targets :\r\n\t\t\t// - The closest point on the ray\r\n\t\t\t// - The closest point on the segment\r\n\r\n\t\t\tsegCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\r\n\t\t\tsegDir.copy( v1 ).sub( v0 ).normalize();\r\n\t\t\tdiff.copy( this.origin ).sub( segCenter );\r\n\r\n\t\t\tvar segExtent = v0.distanceTo( v1 ) * 0.5;\r\n\t\t\tvar a01 = - this.direction.dot( segDir );\r\n\t\t\tvar b0 = diff.dot( this.direction );\r\n\t\t\tvar b1 = - diff.dot( segDir );\r\n\t\t\tvar c = diff.lengthSq();\r\n\t\t\tvar det = Math.abs( 1 - a01 * a01 );\r\n\t\t\tvar s0, s1, sqrDist, extDet;\r\n\r\n\t\t\tif ( det > 0 ) {\r\n\r\n\t\t\t\t// The ray and segment are not parallel.\r\n\r\n\t\t\t\ts0 = a01 * b1 - b0;\r\n\t\t\t\ts1 = a01 * b0 - b1;\r\n\t\t\t\textDet = segExtent * det;\r\n\r\n\t\t\t\tif ( s0 >= 0 ) {\r\n\r\n\t\t\t\t\tif ( s1 >= - extDet ) {\r\n\r\n\t\t\t\t\t\tif ( s1 <= extDet ) {\r\n\r\n\t\t\t\t\t\t\t// region 0\r\n\t\t\t\t\t\t\t// Minimum at interior points of ray and segment.\r\n\r\n\t\t\t\t\t\t\tvar invDet = 1 / det;\r\n\t\t\t\t\t\t\ts0 *= invDet;\r\n\t\t\t\t\t\t\ts1 *= invDet;\r\n\t\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\r\n\r\n\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\t// region 1\r\n\r\n\t\t\t\t\t\t\ts1 = segExtent;\r\n\t\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\r\n\t\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t// region 5\r\n\r\n\t\t\t\t\t\ts1 = - segExtent;\r\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\r\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tif ( s1 <= - extDet ) {\r\n\r\n\t\t\t\t\t\t// region 4\r\n\r\n\t\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\r\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\r\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\r\n\r\n\t\t\t\t\t} else if ( s1 <= extDet ) {\r\n\r\n\t\t\t\t\t\t// region 3\r\n\r\n\t\t\t\t\t\ts0 = 0;\r\n\t\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\r\n\t\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t// region 2\r\n\r\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\r\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\r\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// Ray and segment are parallel.\r\n\r\n\t\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\r\n\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\r\n\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( optionalPointOnRay ) {\r\n\r\n\t\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( optionalPointOnSegment ) {\r\n\r\n\t\t\t\toptionalPointOnSegment.copy( segDir ).multiplyScalar( s1 ).add( segCenter );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn sqrDist;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tintersectSphere: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( sphere, optionalTarget ) {\r\n\r\n\t\t\tv1.subVectors( sphere.center, this.origin );\r\n\t\t\tvar tca = v1.dot( this.direction );\r\n\t\t\tvar d2 = v1.dot( v1 ) - tca * tca;\r\n\t\t\tvar radius2 = sphere.radius * sphere.radius;\r\n\r\n\t\t\tif ( d2 > radius2 ) return null;\r\n\r\n\t\t\tvar thc = Math.sqrt( radius2 - d2 );\r\n\r\n\t\t\t// t0 = first intersect point - entrance on front of sphere\r\n\t\t\tvar t0 = tca - thc;\r\n\r\n\t\t\t// t1 = second intersect point - exit point on back of sphere\r\n\t\t\tvar t1 = tca + thc;\r\n\r\n\t\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\r\n\t\t\tif ( t0 < 0 && t1 < 0 ) return null;\r\n\r\n\t\t\t// test to see if t0 is behind the ray:\r\n\t\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\r\n\t\t\t// in order to always return an intersect point that is in front of the ray.\r\n\t\t\tif ( t0 < 0 ) return this.at( t1, optionalTarget );\r\n\r\n\t\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\r\n\t\t\treturn this.at( t0, optionalTarget );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tintersectsSphere: function ( sphere ) {\r\n\r\n\t\treturn this.distanceToPoint( sphere.center ) <= sphere.radius;\r\n\r\n\t},\r\n\r\n\tdistanceToPlane: function ( plane ) {\r\n\r\n\t\tvar denominator = plane.normal.dot( this.direction );\r\n\r\n\t\tif ( denominator === 0 ) {\r\n\r\n\t\t\t// line is coplanar, return origin\r\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\r\n\r\n\t\t\t\treturn 0;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\r\n\r\n\t\t\treturn null;\r\n\r\n\t\t}\r\n\r\n\t\tvar t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\r\n\r\n\t\t// Return if the ray never intersects the plane\r\n\r\n\t\treturn t >= 0 ? t : null;\r\n\r\n\t},\r\n\r\n\tintersectPlane: function ( plane, optionalTarget ) {\r\n\r\n\t\tvar t = this.distanceToPlane( plane );\r\n\r\n\t\tif ( t === null ) {\r\n\r\n\t\t\treturn null;\r\n\r\n\t\t}\r\n\r\n\t\treturn this.at( t, optionalTarget );\r\n\r\n\t},\r\n\r\n\r\n\r\n\tintersectsPlane: function ( plane ) {\r\n\r\n\t\t// check if the ray lies on the plane first\r\n\r\n\t\tvar distToPoint = plane.distanceToPoint( this.origin );\r\n\r\n\t\tif ( distToPoint === 0 ) {\r\n\r\n\t\t\treturn true;\r\n\r\n\t\t}\r\n\r\n\t\tvar denominator = plane.normal.dot( this.direction );\r\n\r\n\t\tif ( denominator * distToPoint < 0 ) {\r\n\r\n\t\t\treturn true;\r\n\r\n\t\t}\r\n\r\n\t\t// ray origin is behind the plane (and is pointing behind it)\r\n\r\n\t\treturn false;\r\n\r\n\t},\r\n\r\n\tintersectBox: function ( box, optionalTarget ) {\r\n\r\n\t\tvar tmin, tmax, tymin, tymax, tzmin, tzmax;\r\n\r\n\t\tvar invdirx = 1 / this.direction.x,\r\n\t\t\tinvdiry = 1 / this.direction.y,\r\n\t\t\tinvdirz = 1 / this.direction.z;\r\n\r\n\t\tvar origin = this.origin;\r\n\r\n\t\tif ( invdirx >= 0 ) {\r\n\r\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\r\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\r\n\r\n\t\t} else {\r\n\r\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\r\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\r\n\r\n\t\t}\r\n\r\n\t\tif ( invdiry >= 0 ) {\r\n\r\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\r\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\r\n\r\n\t\t} else {\r\n\r\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\r\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\r\n\r\n\t\t}\r\n\r\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\r\n\r\n\t\t// These lines also handle the case where tmin or tmax is NaN\r\n\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\r\n\r\n\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\r\n\r\n\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\r\n\r\n\t\tif ( invdirz >= 0 ) {\r\n\r\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\r\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\r\n\r\n\t\t} else {\r\n\r\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\r\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\r\n\r\n\t\t}\r\n\r\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\r\n\r\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\r\n\r\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\r\n\r\n\t\t//return point closest to the ray (positive side)\r\n\r\n\t\tif ( tmax < 0 ) return null;\r\n\r\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, optionalTarget );\r\n\r\n\t},\r\n\r\n\tintersectsBox: ( function () {\r\n\r\n\t\tvar v = new THREE.Vector3();\r\n\r\n\t\treturn function ( box ) {\r\n\r\n\t\t\treturn this.intersectBox( box, v ) !== null;\r\n\r\n\t\t};\r\n\r\n\t} )(),\r\n\r\n\tintersectTriangle: function () {\r\n\r\n\t\t// Compute the offset origin, edges, and normal.\r\n\t\tvar diff = new THREE.Vector3();\r\n\t\tvar edge1 = new THREE.Vector3();\r\n\t\tvar edge2 = new THREE.Vector3();\r\n\t\tvar normal = new THREE.Vector3();\r\n\r\n\t\treturn function ( a, b, c, backfaceCulling, optionalTarget ) {\r\n\r\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\r\n\r\n\t\t\tedge1.subVectors( b, a );\r\n\t\t\tedge2.subVectors( c, a );\r\n\t\t\tnormal.crossVectors( edge1, edge2 );\r\n\r\n\t\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\r\n\t\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\r\n\t\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\r\n\t\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\r\n\t\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\r\n\t\t\tvar DdN = this.direction.dot( normal );\r\n\t\t\tvar sign;\r\n\r\n\t\t\tif ( DdN > 0 ) {\r\n\r\n\t\t\t\tif ( backfaceCulling ) return null;\r\n\t\t\t\tsign = 1;\r\n\r\n\t\t\t} else if ( DdN < 0 ) {\r\n\r\n\t\t\t\tsign = - 1;\r\n\t\t\t\tDdN = - DdN;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\treturn null;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tdiff.subVectors( this.origin, a );\r\n\t\t\tvar DdQxE2 = sign * this.direction.dot( edge2.crossVectors( diff, edge2 ) );\r\n\r\n\t\t\t// b1 < 0, no intersection\r\n\t\t\tif ( DdQxE2 < 0 ) {\r\n\r\n\t\t\t\treturn null;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar DdE1xQ = sign * this.direction.dot( edge1.cross( diff ) );\r\n\r\n\t\t\t// b2 < 0, no intersection\r\n\t\t\tif ( DdE1xQ < 0 ) {\r\n\r\n\t\t\t\treturn null;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// b1+b2 > 1, no intersection\r\n\t\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\r\n\r\n\t\t\t\treturn null;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Line intersects triangle, check if ray does.\r\n\t\t\tvar QdN = - sign * diff.dot( normal );\r\n\r\n\t\t\t// t < 0, no intersection\r\n\t\t\tif ( QdN < 0 ) {\r\n\r\n\t\t\t\treturn null;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Ray intersects triangle.\r\n\t\t\treturn this.at( QdN / DdN, optionalTarget );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tapplyMatrix4: function ( matrix4 ) {\r\n\r\n\t\tthis.direction.add( this.origin ).applyMatrix4( matrix4 );\r\n\t\tthis.origin.applyMatrix4( matrix4 );\r\n\t\tthis.direction.sub( this.origin );\r\n\t\tthis.direction.normalize();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( ray ) {\r\n\r\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Sphere.js\r\n\r\n/**\r\n * @author bhouston / http://clara.io\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Sphere = function ( center, radius ) {\r\n\r\n\tthis.center = ( center !== undefined ) ? center : new THREE.Vector3();\r\n\tthis.radius = ( radius !== undefined ) ? radius : 0;\r\n\r\n};\r\n\r\nTHREE.Sphere.prototype = {\r\n\r\n\tconstructor: THREE.Sphere,\r\n\r\n\tset: function ( center, radius ) {\r\n\r\n\t\tthis.center.copy( center );\r\n\t\tthis.radius = radius;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromPoints: function () {\r\n\r\n\t\tvar box = new THREE.Box3();\r\n\r\n\t\treturn function ( points, optionalCenter ) {\r\n\r\n\t\t\tvar center = this.center;\r\n\r\n\t\t\tif ( optionalCenter !== undefined ) {\r\n\r\n\t\t\t\tcenter.copy( optionalCenter );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tbox.setFromPoints( points ).center( center );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar maxRadiusSq = 0;\r\n\r\n\t\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.radius = Math.sqrt( maxRadiusSq );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\r\n\t},\r\n\r\n\tcopy: function ( sphere ) {\r\n\r\n\t\tthis.center.copy( sphere.center );\r\n\t\tthis.radius = sphere.radius;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tempty: function () {\r\n\r\n\t\treturn ( this.radius <= 0 );\r\n\r\n\t},\r\n\r\n\tcontainsPoint: function ( point ) {\r\n\r\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\r\n\r\n\t},\r\n\r\n\tdistanceToPoint: function ( point ) {\r\n\r\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\r\n\r\n\t},\r\n\r\n\tintersectsSphere: function ( sphere ) {\r\n\r\n\t\tvar radiusSum = this.radius + sphere.radius;\r\n\r\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\r\n\r\n\t},\r\n\r\n\tintersectsBox: function ( box ) {\r\n\r\n\t\treturn box.intersectsSphere( this );\r\n\r\n\t},\r\n\r\n\tintersectsPlane: function ( plane ) {\r\n\r\n\t\t// We use the following equation to compute the signed distance from\r\n\t\t// the center of the sphere to the plane.\r\n\t\t//\r\n\t\t// distance = q * n - d\r\n\t\t//\r\n\t\t// If this distance is greater than the radius of the sphere,\r\n\t\t// then there is no intersection.\r\n\r\n\t\treturn Math.abs( this.center.dot( plane.normal ) - plane.constant ) <= this.radius;\r\n\r\n\t},\r\n\r\n\tclampPoint: function ( point, optionalTarget ) {\r\n\r\n\t\tvar deltaLengthSq = this.center.distanceToSquared( point );\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\tresult.copy( point );\r\n\r\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\r\n\r\n\t\t\tresult.sub( this.center ).normalize();\r\n\t\t\tresult.multiplyScalar( this.radius ).add( this.center );\r\n\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\r\n\t},\r\n\r\n\tgetBoundingBox: function ( optionalTarget ) {\r\n\r\n\t\tvar box = optionalTarget || new THREE.Box3();\r\n\r\n\t\tbox.set( this.center, this.center );\r\n\t\tbox.expandByScalar( this.radius );\r\n\r\n\t\treturn box;\r\n\r\n\t},\r\n\r\n\tapplyMatrix4: function ( matrix ) {\r\n\r\n\t\tthis.center.applyMatrix4( matrix );\r\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttranslate: function ( offset ) {\r\n\r\n\t\tthis.center.add( offset );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( sphere ) {\r\n\r\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Frustum.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author bhouston / http://clara.io\r\n */\r\n\r\nTHREE.Frustum = function ( p0, p1, p2, p3, p4, p5 ) {\r\n\r\n\tthis.planes = [\r\n\r\n\t\t( p0 !== undefined ) ? p0 : new THREE.Plane(),\r\n\t\t( p1 !== undefined ) ? p1 : new THREE.Plane(),\r\n\t\t( p2 !== undefined ) ? p2 : new THREE.Plane(),\r\n\t\t( p3 !== undefined ) ? p3 : new THREE.Plane(),\r\n\t\t( p4 !== undefined ) ? p4 : new THREE.Plane(),\r\n\t\t( p5 !== undefined ) ? p5 : new THREE.Plane()\r\n\r\n\t];\r\n\r\n};\r\n\r\nTHREE.Frustum.prototype = {\r\n\r\n\tconstructor: THREE.Frustum,\r\n\r\n\tset: function ( p0, p1, p2, p3, p4, p5 ) {\r\n\r\n\t\tvar planes = this.planes;\r\n\r\n\t\tplanes[ 0 ].copy( p0 );\r\n\t\tplanes[ 1 ].copy( p1 );\r\n\t\tplanes[ 2 ].copy( p2 );\r\n\t\tplanes[ 3 ].copy( p3 );\r\n\t\tplanes[ 4 ].copy( p4 );\r\n\t\tplanes[ 5 ].copy( p5 );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\r\n\t},\r\n\r\n\tcopy: function ( frustum ) {\r\n\r\n\t\tvar planes = this.planes;\r\n\r\n\t\tfor ( var i = 0; i < 6; i ++ ) {\r\n\r\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromMatrix: function ( m ) {\r\n\r\n\t\tvar planes = this.planes;\r\n\t\tvar me = m.elements;\r\n\t\tvar me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\r\n\t\tvar me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\r\n\t\tvar me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\r\n\t\tvar me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\r\n\r\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\r\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\r\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\r\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\r\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\r\n\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tintersectsObject: function () {\r\n\r\n\t\tvar sphere = new THREE.Sphere();\r\n\r\n\t\treturn function ( object ) {\r\n\r\n\t\t\tvar geometry = object.geometry;\r\n\r\n\t\t\tif ( geometry.boundingSphere === null )\r\n\t\t\t\tgeometry.computeBoundingSphere();\r\n\r\n\t\t\tsphere.copy( geometry.boundingSphere )\r\n\t\t\t\t.applyMatrix4( object.matrixWorld );\r\n\r\n\t\t\treturn this.intersectsSphere( sphere );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tintersectsSprite: function () {\r\n\r\n\t\tvar sphere = new THREE.Sphere();\r\n\r\n\t\treturn function ( sprite ) {\r\n\r\n\t\t\tsphere.center.set( 0, 0, 0 );\r\n\t\t\tsphere.radius = 0.7071067811865476;\r\n\t\t\tsphere.applyMatrix4( sprite.matrixWorld );\r\n\r\n\t\t\treturn this.intersectsSphere( sphere );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tintersectsSphere: function ( sphere ) {\r\n\r\n\t\tvar planes = this.planes;\r\n\t\tvar center = sphere.center;\r\n\t\tvar negRadius = - sphere.radius;\r\n\r\n\t\tfor ( var i = 0; i < 6; i ++ ) {\r\n\r\n\t\t\tvar distance = planes[ i ].distanceToPoint( center );\r\n\r\n\t\t\tif ( distance < negRadius ) {\r\n\r\n\t\t\t\treturn false;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\tintersectsBox: function () {\r\n\r\n\t\tvar p1 = new THREE.Vector3(),\r\n\t\t\tp2 = new THREE.Vector3();\r\n\r\n\t\treturn function ( box ) {\r\n\r\n\t\t\tvar planes = this.planes;\r\n\r\n\t\t\tfor ( var i = 0; i < 6 ; i ++ ) {\r\n\r\n\t\t\t\tvar plane = planes[ i ];\r\n\r\n\t\t\t\tp1.x = plane.normal.x > 0 ? box.min.x : box.max.x;\r\n\t\t\t\tp2.x = plane.normal.x > 0 ? box.max.x : box.min.x;\r\n\t\t\t\tp1.y = plane.normal.y > 0 ? box.min.y : box.max.y;\r\n\t\t\t\tp2.y = plane.normal.y > 0 ? box.max.y : box.min.y;\r\n\t\t\t\tp1.z = plane.normal.z > 0 ? box.min.z : box.max.z;\r\n\t\t\t\tp2.z = plane.normal.z > 0 ? box.max.z : box.min.z;\r\n\r\n\t\t\t\tvar d1 = plane.distanceToPoint( p1 );\r\n\t\t\t\tvar d2 = plane.distanceToPoint( p2 );\r\n\r\n\t\t\t\t// if both outside plane, no intersection\r\n\r\n\t\t\t\tif ( d1 < 0 && d2 < 0 ) {\r\n\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\r\n\tcontainsPoint: function ( point ) {\r\n\r\n\t\tvar planes = this.planes;\r\n\r\n\t\tfor ( var i = 0; i < 6; i ++ ) {\r\n\r\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\r\n\r\n\t\t\t\treturn false;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Plane.js\r\n\r\n/**\r\n * @author bhouston / http://clara.io\r\n */\r\n\r\nTHREE.Plane = function ( normal, constant ) {\r\n\r\n\tthis.normal = ( normal !== undefined ) ? normal : new THREE.Vector3( 1, 0, 0 );\r\n\tthis.constant = ( constant !== undefined ) ? constant : 0;\r\n\r\n};\r\n\r\nTHREE.Plane.prototype = {\r\n\r\n\tconstructor: THREE.Plane,\r\n\r\n\tset: function ( normal, constant ) {\r\n\r\n\t\tthis.normal.copy( normal );\r\n\t\tthis.constant = constant;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetComponents: function ( x, y, z, w ) {\r\n\r\n\t\tthis.normal.set( x, y, z );\r\n\t\tthis.constant = w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromNormalAndCoplanarPoint: function ( normal, point ) {\r\n\r\n\t\tthis.normal.copy( normal );\r\n\t\tthis.constant = - point.dot( this.normal );\t// must be this.normal, not normal, as this.normal is normalized\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromCoplanarPoints: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\t\tvar v2 = new THREE.Vector3();\r\n\r\n\t\treturn function ( a, b, c ) {\r\n\r\n\t\t\tvar normal = v1.subVectors( c, b ).cross( v2.subVectors( a, b ) ).normalize();\r\n\r\n\t\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\r\n\r\n\t\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\r\n\t},\r\n\r\n\tcopy: function ( plane ) {\r\n\r\n\t\tthis.normal.copy( plane.normal );\r\n\t\tthis.constant = plane.constant;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tnormalize: function () {\r\n\r\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\r\n\r\n\t\tvar inverseNormalLength = 1.0 / this.normal.length();\r\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\r\n\t\tthis.constant *= inverseNormalLength;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tnegate: function () {\r\n\r\n\t\tthis.constant *= - 1;\r\n\t\tthis.normal.negate();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdistanceToPoint: function ( point ) {\r\n\r\n\t\treturn this.normal.dot( point ) + this.constant;\r\n\r\n\t},\r\n\r\n\tdistanceToSphere: function ( sphere ) {\r\n\r\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\r\n\r\n\t},\r\n\r\n\tprojectPoint: function ( point, optionalTarget ) {\r\n\r\n\t\treturn this.orthoPoint( point, optionalTarget ).sub( point ).negate();\r\n\r\n\t},\r\n\r\n\torthoPoint: function ( point, optionalTarget ) {\r\n\r\n\t\tvar perpendicularMagnitude = this.distanceToPoint( point );\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\treturn result.copy( this.normal ).multiplyScalar( perpendicularMagnitude );\r\n\r\n\t},\r\n\r\n\tintersectLine: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( line, optionalTarget ) {\r\n\r\n\t\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\t\tvar direction = line.delta( v1 );\r\n\r\n\t\t\tvar denominator = this.normal.dot( direction );\r\n\r\n\t\t\tif ( denominator === 0 ) {\r\n\r\n\t\t\t\t// line is coplanar, return origin\r\n\t\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\r\n\r\n\t\t\t\t\treturn result.copy( line.start );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Unsure if this is the correct method to handle this case.\r\n\t\t\t\treturn undefined;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\r\n\r\n\t\t\tif ( t < 0 || t > 1 ) {\r\n\r\n\t\t\t\treturn undefined;\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn result.copy( direction ).multiplyScalar( t ).add( line.start );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tintersectsLine: function ( line ) {\r\n\r\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\r\n\r\n\t\tvar startSign = this.distanceToPoint( line.start );\r\n\t\tvar endSign = this.distanceToPoint( line.end );\r\n\r\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\r\n\r\n\t},\r\n\r\n\tintersectsBox: function ( box ) {\r\n\r\n\t\treturn box.intersectsPlane( this );\r\n\r\n\t},\r\n\r\n\tintersectsSphere: function ( sphere ) {\r\n\r\n\t\treturn sphere.intersectsPlane( this );\r\n\r\n\t},\r\n\r\n\tcoplanarPoint: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\treturn result.copy( this.normal ).multiplyScalar( - this.constant );\r\n\r\n\t},\r\n\r\n\tapplyMatrix4: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\t\tvar m1 = new THREE.Matrix3();\r\n\r\n\t\treturn function ( matrix, optionalNormalMatrix ) {\r\n\r\n\t\t\tvar referencePoint = this.coplanarPoint( v1 ).applyMatrix4( matrix );\r\n\r\n\t\t\t// transform normal based on theory here:\r\n\t\t\t// http://www.songho.ca/opengl/gl_normaltransform.html\r\n\t\t\tvar normalMatrix = optionalNormalMatrix || m1.getNormalMatrix( matrix );\r\n\t\t\tvar normal = this.normal.applyMatrix3( normalMatrix ).normalize();\r\n\r\n\t\t\t// recalculate constant (like in setFromNormalAndCoplanarPoint)\r\n\t\t\tthis.constant = - referencePoint.dot( normal );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\ttranslate: function ( offset ) {\r\n\r\n\t\tthis.constant = this.constant - offset.dot( this.normal );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tequals: function ( plane ) {\r\n\r\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Spherical.js\r\n\r\n/**\r\n * @author bhouston / http://clara.io\r\n * @author WestLangley / http://github.com/WestLangley\r\n *\r\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\r\n *\r\n * The poles (phi) are at the positive and negative y axis.\r\n * The equator starts at positive z.\r\n */\r\n\r\nTHREE.Spherical = function ( radius, phi, theta ) {\r\n\r\n\tthis.radius = ( radius !== undefined ) ? radius : 1.0;\r\n\tthis.phi = ( phi !== undefined ) ? phi : 0; // up / down towards top and bottom pole\r\n\tthis.theta = ( theta !== undefined ) ? theta : 0; // around the equator of the sphere\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\nTHREE.Spherical.prototype = {\r\n\r\n\tconstructor: THREE.Spherical,\r\n\r\n\tset: function ( radius, phi, theta ) {\r\n\r\n\t\tthis.radius = radius;\r\n\t\tthis.phi = phi;\r\n\t\tthis.theta = theta;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\r\n\t},\r\n\r\n\tcopy: function ( other ) {\r\n\r\n\t\tthis.radius.copy( other.radius );\r\n\t\tthis.phi.copy( other.phi );\r\n\t\tthis.theta.copy( other.theta );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\t// restrict phi to be betwee EPS and PI-EPS\r\n\tmakeSafe: function() {\r\n\r\n\t\tvar EPS = 0.000001;\r\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromVector3: function( vec3 ) {\r\n\r\n\t\tthis.radius = vec3.length();\r\n\r\n\t\tif ( this.radius === 0 ) {\r\n\r\n\t\t\tthis.theta = 0;\r\n\t\t\tthis.phi = 0;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.theta = Math.atan2( vec3.x, vec3.z ); // equator angle around y-up axis\r\n\t\t\tthis.phi = Math.acos( THREE.Math.clamp( vec3.y / this.radius, - 1, 1 ) ); // polar angle\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n};\r\n\r\n// File:src/math/Math.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Math = {\r\n\r\n\tDEG2RAD: Math.PI / 180,\r\n\tRAD2DEG: 180 / Math.PI,\r\n\r\n\tgenerateUUID: function () {\r\n\r\n\t\t// http://www.broofa.com/Tools/Math.uuid.htm\r\n\r\n\t\tvar chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split( '' );\r\n\t\tvar uuid = new Array( 36 );\r\n\t\tvar rnd = 0, r;\r\n\r\n\t\treturn function () {\r\n\r\n\t\t\tfor ( var i = 0; i < 36; i ++ ) {\r\n\r\n\t\t\t\tif ( i === 8 || i === 13 || i === 18 || i === 23 ) {\r\n\r\n\t\t\t\t\tuuid[ i ] = '-';\r\n\r\n\t\t\t\t} else if ( i === 14 ) {\r\n\r\n\t\t\t\t\tuuid[ i ] = '4';\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tif ( rnd <= 0x02 ) rnd = 0x2000000 + ( Math.random() * 0x1000000 ) | 0;\r\n\t\t\t\t\tr = rnd & 0xf;\r\n\t\t\t\t\trnd = rnd >> 4;\r\n\t\t\t\t\tuuid[ i ] = chars[ ( i === 19 ) ? ( r & 0x3 ) | 0x8 : r ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn uuid.join( '' );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tclamp: function ( value, min, max ) {\r\n\r\n\t\treturn Math.max( min, Math.min( max, value ) );\r\n\r\n\t},\r\n\r\n\t// compute euclidian modulo of m % n\r\n\t// https://en.wikipedia.org/wiki/Modulo_operation\r\n\r\n\teuclideanModulo: function ( n, m ) {\r\n\r\n\t\treturn ( ( n % m ) + m ) % m;\r\n\r\n\t},\r\n\r\n\t// Linear mapping from range to range \r\n\r\n\tmapLinear: function ( x, a1, a2, b1, b2 ) {\r\n\r\n\t\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\r\n\r\n\t},\r\n\r\n\t// http://en.wikipedia.org/wiki/Smoothstep\r\n\r\n\tsmoothstep: function ( x, min, max ) {\r\n\r\n\t\tif ( x <= min ) return 0;\r\n\t\tif ( x >= max ) return 1;\r\n\r\n\t\tx = ( x - min ) / ( max - min );\r\n\r\n\t\treturn x * x * ( 3 - 2 * x );\r\n\r\n\t},\r\n\r\n\tsmootherstep: function ( x, min, max ) {\r\n\r\n\t\tif ( x <= min ) return 0;\r\n\t\tif ( x >= max ) return 1;\r\n\r\n\t\tx = ( x - min ) / ( max - min );\r\n\r\n\t\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\r\n\r\n\t},\r\n\r\n\trandom16: function () {\r\n\r\n\t\tconsole.warn( 'THREE.Math.random16() has been deprecated. Use Math.random() instead.' );\r\n\t\treturn Math.random();\r\n\r\n\t},\r\n\r\n\t// Random integer from interval\r\n\r\n\trandInt: function ( low, high ) {\r\n\r\n\t\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\r\n\r\n\t},\r\n\r\n\t// Random float from interval\r\n\r\n\trandFloat: function ( low, high ) {\r\n\r\n\t\treturn low + Math.random() * ( high - low );\r\n\r\n\t},\r\n\r\n\t// Random float from <-range/2, range/2> interval\r\n\r\n\trandFloatSpread: function ( range ) {\r\n\r\n\t\treturn range * ( 0.5 - Math.random() );\r\n\r\n\t},\r\n\r\n\tdegToRad: function ( degrees ) {\r\n\r\n\t\treturn degrees * THREE.Math.DEG2RAD;\r\n\r\n\t},\r\n\r\n\tradToDeg: function ( radians ) {\r\n\r\n\t\treturn radians * THREE.Math.RAD2DEG;\r\n\r\n\t},\r\n\r\n\tisPowerOfTwo: function ( value ) {\r\n\r\n\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\r\n\r\n\t},\r\n\r\n\tnearestPowerOfTwo: function ( value ) {\r\n\r\n\t\treturn Math.pow( 2, Math.round( Math.log( value ) / Math.LN2 ) );\r\n\r\n\t},\r\n\r\n\tnextPowerOfTwo: function ( value ) {\r\n\r\n\t\tvalue --;\r\n\t\tvalue |= value >> 1;\r\n\t\tvalue |= value >> 2;\r\n\t\tvalue |= value >> 4;\r\n\t\tvalue |= value >> 8;\r\n\t\tvalue |= value >> 16;\r\n\t\tvalue ++;\r\n\r\n\t\treturn value;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Spline.js\r\n\r\n/**\r\n * Spline from Tween.js, slightly optimized (and trashed)\r\n * http://sole.github.com/tween.js/examples/05_spline.html\r\n *\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Spline = function ( points ) {\r\n\r\n\tthis.points = points;\r\n\r\n\tvar c = [], v3 = { x: 0, y: 0, z: 0 },\r\n\tpoint, intPoint, weight, w2, w3,\r\n\tpa, pb, pc, pd;\r\n\r\n\tthis.initFromArray = function ( a ) {\r\n\r\n\t\tthis.points = [];\r\n\r\n\t\tfor ( var i = 0; i < a.length; i ++ ) {\r\n\r\n\t\t\tthis.points[ i ] = { x: a[ i ][ 0 ], y: a[ i ][ 1 ], z: a[ i ][ 2 ] };\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.getPoint = function ( k ) {\r\n\r\n\t\tpoint = ( this.points.length - 1 ) * k;\r\n\t\tintPoint = Math.floor( point );\r\n\t\tweight = point - intPoint;\r\n\r\n\t\tc[ 0 ] = intPoint === 0 ? intPoint : intPoint - 1;\r\n\t\tc[ 1 ] = intPoint;\r\n\t\tc[ 2 ] = intPoint > this.points.length - 2 ? this.points.length - 1 : intPoint + 1;\r\n\t\tc[ 3 ] = intPoint > this.points.length - 3 ? this.points.length - 1 : intPoint + 2;\r\n\r\n\t\tpa = this.points[ c[ 0 ] ];\r\n\t\tpb = this.points[ c[ 1 ] ];\r\n\t\tpc = this.points[ c[ 2 ] ];\r\n\t\tpd = this.points[ c[ 3 ] ];\r\n\r\n\t\tw2 = weight * weight;\r\n\t\tw3 = weight * w2;\r\n\r\n\t\tv3.x = interpolate( pa.x, pb.x, pc.x, pd.x, weight, w2, w3 );\r\n\t\tv3.y = interpolate( pa.y, pb.y, pc.y, pd.y, weight, w2, w3 );\r\n\t\tv3.z = interpolate( pa.z, pb.z, pc.z, pd.z, weight, w2, w3 );\r\n\r\n\t\treturn v3;\r\n\r\n\t};\r\n\r\n\tthis.getControlPointsArray = function () {\r\n\r\n\t\tvar i, p, l = this.points.length,\r\n\t\t\tcoords = [];\r\n\r\n\t\tfor ( i = 0; i < l; i ++ ) {\r\n\r\n\t\t\tp = this.points[ i ];\r\n\t\t\tcoords[ i ] = [ p.x, p.y, p.z ];\r\n\r\n\t\t}\r\n\r\n\t\treturn coords;\r\n\r\n\t};\r\n\r\n\t// approximate length by summing linear segments\r\n\r\n\tthis.getLength = function ( nSubDivisions ) {\r\n\r\n\t\tvar i, index, nSamples, position,\r\n\t\t\tpoint = 0, intPoint = 0, oldIntPoint = 0,\r\n\t\t\toldPosition = new THREE.Vector3(),\r\n\t\t\ttmpVec = new THREE.Vector3(),\r\n\t\t\tchunkLengths = [],\r\n\t\t\ttotalLength = 0;\r\n\r\n\t\t// first point has 0 length\r\n\r\n\t\tchunkLengths[ 0 ] = 0;\r\n\r\n\t\tif ( ! nSubDivisions ) nSubDivisions = 100;\r\n\r\n\t\tnSamples = this.points.length * nSubDivisions;\r\n\r\n\t\toldPosition.copy( this.points[ 0 ] );\r\n\r\n\t\tfor ( i = 1; i < nSamples; i ++ ) {\r\n\r\n\t\t\tindex = i / nSamples;\r\n\r\n\t\t\tposition = this.getPoint( index );\r\n\t\t\ttmpVec.copy( position );\r\n\r\n\t\t\ttotalLength += tmpVec.distanceTo( oldPosition );\r\n\r\n\t\t\toldPosition.copy( position );\r\n\r\n\t\t\tpoint = ( this.points.length - 1 ) * index;\r\n\t\t\tintPoint = Math.floor( point );\r\n\r\n\t\t\tif ( intPoint !== oldIntPoint ) {\r\n\r\n\t\t\t\tchunkLengths[ intPoint ] = totalLength;\r\n\t\t\t\toldIntPoint = intPoint;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// last point ends with total length\r\n\r\n\t\tchunkLengths[ chunkLengths.length ] = totalLength;\r\n\r\n\t\treturn { chunks: chunkLengths, total: totalLength };\r\n\r\n\t};\r\n\r\n\tthis.reparametrizeByArcLength = function ( samplingCoef ) {\r\n\r\n\t\tvar i, j,\r\n\t\t\tindex, indexCurrent, indexNext,\r\n\t\t\trealDistance,\r\n\t\t\tsampling, position,\r\n\t\t\tnewpoints = [],\r\n\t\t\ttmpVec = new THREE.Vector3(),\r\n\t\t\tsl = this.getLength();\r\n\r\n\t\tnewpoints.push( tmpVec.copy( this.points[ 0 ] ).clone() );\r\n\r\n\t\tfor ( i = 1; i < this.points.length; i ++ ) {\r\n\r\n\t\t\t//tmpVec.copy( this.points[ i - 1 ] );\r\n\t\t\t//linearDistance = tmpVec.distanceTo( this.points[ i ] );\r\n\r\n\t\t\trealDistance = sl.chunks[ i ] - sl.chunks[ i - 1 ];\r\n\r\n\t\t\tsampling = Math.ceil( samplingCoef * realDistance / sl.total );\r\n\r\n\t\t\tindexCurrent = ( i - 1 ) / ( this.points.length - 1 );\r\n\t\t\tindexNext = i / ( this.points.length - 1 );\r\n\r\n\t\t\tfor ( j = 1; j < sampling - 1; j ++ ) {\r\n\r\n\t\t\t\tindex = indexCurrent + j * ( 1 / sampling ) * ( indexNext - indexCurrent );\r\n\r\n\t\t\t\tposition = this.getPoint( index );\r\n\t\t\t\tnewpoints.push( tmpVec.copy( position ).clone() );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tnewpoints.push( tmpVec.copy( this.points[ i ] ).clone() );\r\n\r\n\t\t}\r\n\r\n\t\tthis.points = newpoints;\r\n\r\n\t};\r\n\r\n\t// Catmull-Rom\r\n\r\n\tfunction interpolate( p0, p1, p2, p3, t, t2, t3 ) {\r\n\r\n\t\tvar v0 = ( p2 - p0 ) * 0.5,\r\n\t\t\tv1 = ( p3 - p1 ) * 0.5;\r\n\r\n\t\treturn ( 2 * ( p1 - p2 ) + v0 + v1 ) * t3 + ( - 3 * ( p1 - p2 ) - 2 * v0 - v1 ) * t2 + v0 * t + p1;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Triangle.js\r\n\r\n/**\r\n * @author bhouston / http://clara.io\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Triangle = function ( a, b, c ) {\r\n\r\n\tthis.a = ( a !== undefined ) ? a : new THREE.Vector3();\r\n\tthis.b = ( b !== undefined ) ? b : new THREE.Vector3();\r\n\tthis.c = ( c !== undefined ) ? c : new THREE.Vector3();\r\n\r\n};\r\n\r\nTHREE.Triangle.normal = function () {\r\n\r\n\tvar v0 = new THREE.Vector3();\r\n\r\n\treturn function ( a, b, c, optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\tresult.subVectors( c, b );\r\n\t\tv0.subVectors( a, b );\r\n\t\tresult.cross( v0 );\r\n\r\n\t\tvar resultLengthSq = result.lengthSq();\r\n\t\tif ( resultLengthSq > 0 ) {\r\n\r\n\t\t\treturn result.multiplyScalar( 1 / Math.sqrt( resultLengthSq ) );\r\n\r\n\t\t}\r\n\r\n\t\treturn result.set( 0, 0, 0 );\r\n\r\n\t};\r\n\r\n}();\r\n\r\n// static/instance method to calculate barycentric coordinates\r\n// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\r\nTHREE.Triangle.barycoordFromPoint = function () {\r\n\r\n\tvar v0 = new THREE.Vector3();\r\n\tvar v1 = new THREE.Vector3();\r\n\tvar v2 = new THREE.Vector3();\r\n\r\n\treturn function ( point, a, b, c, optionalTarget ) {\r\n\r\n\t\tv0.subVectors( c, a );\r\n\t\tv1.subVectors( b, a );\r\n\t\tv2.subVectors( point, a );\r\n\r\n\t\tvar dot00 = v0.dot( v0 );\r\n\t\tvar dot01 = v0.dot( v1 );\r\n\t\tvar dot02 = v0.dot( v2 );\r\n\t\tvar dot11 = v1.dot( v1 );\r\n\t\tvar dot12 = v1.dot( v2 );\r\n\r\n\t\tvar denom = ( dot00 * dot11 - dot01 * dot01 );\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\t// collinear or singular triangle\r\n\t\tif ( denom === 0 ) {\r\n\r\n\t\t\t// arbitrary location outside of triangle?\r\n\t\t\t// not sure if this is the best idea, maybe should be returning undefined\r\n\t\t\treturn result.set( - 2, - 1, - 1 );\r\n\r\n\t\t}\r\n\r\n\t\tvar invDenom = 1 / denom;\r\n\t\tvar u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\r\n\t\tvar v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\r\n\r\n\t\t// barycentric coordinates must always sum to 1\r\n\t\treturn result.set( 1 - u - v, v, u );\r\n\r\n\t};\r\n\r\n}();\r\n\r\nTHREE.Triangle.containsPoint = function () {\r\n\r\n\tvar v1 = new THREE.Vector3();\r\n\r\n\treturn function ( point, a, b, c ) {\r\n\r\n\t\tvar result = THREE.Triangle.barycoordFromPoint( point, a, b, c, v1 );\r\n\r\n\t\treturn ( result.x >= 0 ) && ( result.y >= 0 ) && ( ( result.x + result.y ) <= 1 );\r\n\r\n\t};\r\n\r\n}();\r\n\r\nTHREE.Triangle.prototype = {\r\n\r\n\tconstructor: THREE.Triangle,\r\n\r\n\tset: function ( a, b, c ) {\r\n\r\n\t\tthis.a.copy( a );\r\n\t\tthis.b.copy( b );\r\n\t\tthis.c.copy( c );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetFromPointsAndIndices: function ( points, i0, i1, i2 ) {\r\n\r\n\t\tthis.a.copy( points[ i0 ] );\r\n\t\tthis.b.copy( points[ i1 ] );\r\n\t\tthis.c.copy( points[ i2 ] );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\r\n\t},\r\n\r\n\tcopy: function ( triangle ) {\r\n\r\n\t\tthis.a.copy( triangle.a );\r\n\t\tthis.b.copy( triangle.b );\r\n\t\tthis.c.copy( triangle.c );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tarea: function () {\r\n\r\n\t\tvar v0 = new THREE.Vector3();\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function () {\r\n\r\n\t\t\tv0.subVectors( this.c, this.b );\r\n\t\t\tv1.subVectors( this.a, this.b );\r\n\r\n\t\t\treturn v0.cross( v1 ).length() * 0.5;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tmidpoint: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\treturn result.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\r\n\r\n\t},\r\n\r\n\tnormal: function ( optionalTarget ) {\r\n\r\n\t\treturn THREE.Triangle.normal( this.a, this.b, this.c, optionalTarget );\r\n\r\n\t},\r\n\r\n\tplane: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Plane();\r\n\r\n\t\treturn result.setFromCoplanarPoints( this.a, this.b, this.c );\r\n\r\n\t},\r\n\r\n\tbarycoordFromPoint: function ( point, optionalTarget ) {\r\n\r\n\t\treturn THREE.Triangle.barycoordFromPoint( point, this.a, this.b, this.c, optionalTarget );\r\n\r\n\t},\r\n\r\n\tcontainsPoint: function ( point ) {\r\n\r\n\t\treturn THREE.Triangle.containsPoint( point, this.a, this.b, this.c );\r\n\r\n\t},\r\n\r\n\tclosestPointToPoint: function () {\r\n\r\n\t\tvar plane, edgeList, projectedPoint, closestPoint;\r\n\r\n\t\treturn function closestPointToPoint( point, optionalTarget ) {\r\n\r\n\t\t\tif ( plane === undefined ) {\r\n\r\n\t\t\t\tplane = new THREE.Plane();\r\n\t\t\t\tedgeList = [ new THREE.Line3(), new THREE.Line3(), new THREE.Line3() ];\r\n\t\t\t\tprojectedPoint = new THREE.Vector3();\r\n\t\t\t\tclosestPoint = new THREE.Vector3();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\t\t\tvar minDistance = Infinity;\r\n\r\n\t\t\t// project the point onto the plane of the triangle\r\n\r\n\t\t\tplane.setFromCoplanarPoints( this.a, this.b, this.c );\r\n\t\t\tplane.projectPoint( point, projectedPoint );\r\n\r\n\t\t\t// check if the projection lies within the triangle\r\n\r\n\t\t\tif( this.containsPoint( projectedPoint ) === true ) {\r\n\r\n\t\t\t\t// if so, this is the closest point\r\n\r\n\t\t\t\tresult.copy( projectedPoint );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// if not, the point falls outside the triangle. the result is the closest point to the triangle's edges or vertices\r\n\r\n\t\t\t\tedgeList[ 0 ].set( this.a, this.b );\r\n\t\t\t\tedgeList[ 1 ].set( this.b, this.c );\r\n\t\t\t\tedgeList[ 2 ].set( this.c, this.a );\r\n\r\n\t\t\t\tfor( var i = 0; i < edgeList.length; i ++ ) {\r\n\r\n\t\t\t\t\tedgeList[ i ].closestPointToPoint( projectedPoint, true, closestPoint );\r\n\r\n\t\t\t\t\tvar distance = projectedPoint.distanceToSquared( closestPoint );\r\n\r\n\t\t\t\t\tif( distance < minDistance ) {\r\n\r\n\t\t\t\t\t\tminDistance = distance;\r\n\r\n\t\t\t\t\t\tresult.copy( closestPoint );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tequals: function ( triangle ) {\r\n\r\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/math/Interpolant.js\r\n\r\n/**\r\n * Abstract base class of interpolants over parametric samples.\r\n *\r\n * The parameter domain is one dimensional, typically the time or a path\r\n * along a curve defined by the data.\r\n *\r\n * The sample values can have any dimensionality and derived classes may\r\n * apply special interpretations to the data.\r\n *\r\n * This class provides the interval seek in a Template Method, deferring\r\n * the actual interpolation to derived classes.\r\n *\r\n * Time complexity is O(1) for linear access crossing at most two points\r\n * and O(log N) for random access, where N is the number of positions.\r\n *\r\n * References:\r\n *\r\n * \t\thttp://www.oodesign.com/template-method-pattern.html\r\n *\r\n * @author tschw\r\n */\r\n\r\nTHREE.Interpolant = function(\r\n\t\tparameterPositions, sampleValues, sampleSize, resultBuffer ) {\r\n\r\n\tthis.parameterPositions = parameterPositions;\r\n\tthis._cachedIndex = 0;\r\n\r\n\tthis.resultBuffer = resultBuffer !== undefined ?\r\n\t\t\tresultBuffer : new sampleValues.constructor( sampleSize );\r\n\tthis.sampleValues = sampleValues;\r\n\tthis.valueSize = sampleSize;\r\n\r\n};\r\n\r\nTHREE.Interpolant.prototype = {\r\n\r\n\tconstructor: THREE.Interpolant,\r\n\r\n\tevaluate: function( t ) {\r\n\r\n\t\tvar pp = this.parameterPositions,\r\n\t\t\ti1 = this._cachedIndex,\r\n\r\n\t\t\tt1 = pp[ i1 ],\r\n\t\t\tt0 = pp[ i1 - 1 ];\r\n\r\n\t\tvalidate_interval: {\r\n\r\n\t\t\tseek: {\r\n\r\n\t\t\t\tvar right;\r\n\r\n\t\t\t\tlinear_scan: {\r\n//- See http://jsperf.com/comparison-to-undefined/3\r\n//- slower code:\r\n//-\r\n//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\r\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\r\n\r\n\t\t\t\t\t\tfor ( var giveUpAt = i1 + 2; ;) {\r\n\r\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\r\n\r\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\r\n\r\n\t\t\t\t\t\t\t\t// after end\r\n\r\n\t\t\t\t\t\t\t\ti1 = pp.length;\r\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\r\n\t\t\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t, t0 );\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\r\n\r\n\t\t\t\t\t\t\tt0 = t1;\r\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\r\n\r\n\t\t\t\t\t\t\tif ( t < t1 ) {\r\n\r\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\r\n\t\t\t\t\t\t\t\tbreak seek;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// prepare binary search on the right side of the index\r\n\t\t\t\t\t\tright = pp.length;\r\n\t\t\t\t\t\tbreak linear_scan;\r\n\r\n\t\t\t\t\t}\r\n\r\n//- slower code:\r\n//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\r\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\r\n\r\n\t\t\t\t\t\t// looping?\r\n\r\n\t\t\t\t\t\tvar t1global = pp[ 1 ];\r\n\r\n\t\t\t\t\t\tif ( t < t1global ) {\r\n\r\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\r\n\t\t\t\t\t\t\tt0 = t1global;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// linear reverse scan\r\n\r\n\t\t\t\t\t\tfor ( var giveUpAt = i1 - 2; ;) {\r\n\r\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\r\n\r\n\t\t\t\t\t\t\t\t// before start\r\n\r\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\r\n\t\t\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\r\n\r\n\t\t\t\t\t\t\tt1 = t0;\r\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\r\n\r\n\t\t\t\t\t\t\tif ( t >= t0 ) {\r\n\r\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\r\n\t\t\t\t\t\t\t\tbreak seek;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// prepare binary search on the left side of the index\r\n\t\t\t\t\t\tright = i1;\r\n\t\t\t\t\t\ti1 = 0;\r\n\t\t\t\t\t\tbreak linear_scan;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// the interval is valid\r\n\r\n\t\t\t\t\tbreak validate_interval;\r\n\r\n\t\t\t\t} // linear scan\r\n\r\n\t\t\t\t// binary search\r\n\r\n\t\t\t\twhile ( i1 < right ) {\r\n\r\n\t\t\t\t\tvar mid = ( i1 + right ) >>> 1;\r\n\r\n\t\t\t\t\tif ( t < pp[ mid ] ) {\r\n\r\n\t\t\t\t\t\tright = mid;\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\ti1 = mid + 1;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tt1 = pp[ i1 ];\r\n\t\t\t\tt0 = pp[ i1 - 1 ];\r\n\r\n\t\t\t\t// check boundary cases, again\r\n\r\n\t\t\t\tif ( t0 === undefined ) {\r\n\r\n\t\t\t\t\tthis._cachedIndex = 0;\r\n\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( t1 === undefined ) {\r\n\r\n\t\t\t\t\ti1 = pp.length;\r\n\t\t\t\t\tthis._cachedIndex = i1;\r\n\t\t\t\t\treturn this.afterEnd_( i1 - 1, t0, t );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} // seek\r\n\r\n\t\t\tthis._cachedIndex = i1;\r\n\r\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\r\n\r\n\t\t} // validate_interval\r\n\r\n\t\treturn this.interpolate_( i1, t0, t, t1 );\r\n\r\n\t},\r\n\r\n\tsettings: null, // optional, subclass-specific settings structure\r\n\t// Note: The indirection allows central control of many interpolants.\r\n\r\n\t// --- Protected interface\r\n\r\n\tDefaultSettings_: {},\r\n\r\n\tgetSettings_: function() {\r\n\r\n\t\treturn this.settings || this.DefaultSettings_;\r\n\r\n\t},\r\n\r\n\tcopySampleValue_: function( index ) {\r\n\r\n\t\t// copies a sample value to the result buffer\r\n\r\n\t\tvar result = this.resultBuffer,\r\n\t\t\tvalues = this.sampleValues,\r\n\t\t\tstride = this.valueSize,\r\n\t\t\toffset = index * stride;\r\n\r\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\r\n\r\n\t\t\tresult[ i ] = values[ offset + i ];\r\n\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\r\n\t},\r\n\r\n\t// Template methods for derived classes:\r\n\r\n\tinterpolate_: function( i1, t0, t, t1 ) {\r\n\r\n\t\tthrow new Error( \"call to abstract method\" );\r\n\t\t// implementations shall return this.resultBuffer\r\n\r\n\t},\r\n\r\n\tintervalChanged_: function( i1, t0, t1 ) {\r\n\r\n\t\t// empty\r\n\r\n\t}\r\n\r\n};\r\n\r\nObject.assign( THREE.Interpolant.prototype, {\r\n\r\n\tbeforeStart_: //( 0, t, t0 ), returns this.resultBuffer\r\n\t\tTHREE.Interpolant.prototype.copySampleValue_,\r\n\r\n\tafterEnd_: //( N-1, tN-1, t ), returns this.resultBuffer\r\n\t\tTHREE.Interpolant.prototype.copySampleValue_\r\n\r\n} );\r\n\r\n// File:src/math/interpolants/CubicInterpolant.js\r\n\r\n/**\r\n * Fast and simple cubic spline interpolant.\r\n *\r\n * It was derived from a Hermitian construction setting the first derivative\r\n * at each sample position to the linear slope between neighboring positions\r\n * over their parameter interval.\r\n *\r\n * @author tschw\r\n */\r\n\r\nTHREE.CubicInterpolant = function(\r\n\t\tparameterPositions, sampleValues, sampleSize, resultBuffer ) {\r\n\r\n\tTHREE.Interpolant.call(\r\n\t\t\tthis, parameterPositions, sampleValues, sampleSize, resultBuffer );\r\n\r\n\tthis._weightPrev = -0;\r\n\tthis._offsetPrev = -0;\r\n\tthis._weightNext = -0;\r\n\tthis._offsetNext = -0;\r\n\r\n};\r\n\r\nTHREE.CubicInterpolant.prototype =\r\n\t\tObject.assign( Object.create( THREE.Interpolant.prototype ), {\r\n\r\n\tconstructor: THREE.CubicInterpolant,\r\n\r\n\tDefaultSettings_: {\r\n\r\n\t\tendingStart: \tTHREE.ZeroCurvatureEnding,\r\n\t\tendingEnd:\t\tTHREE.ZeroCurvatureEnding\r\n\r\n\t},\r\n\r\n\tintervalChanged_: function( i1, t0, t1 ) {\r\n\r\n\t\tvar pp = this.parameterPositions,\r\n\t\t\tiPrev = i1 - 2,\r\n\t\t\tiNext = i1 + 1,\r\n\r\n\t\t\ttPrev = pp[ iPrev ],\r\n\t\t\ttNext = pp[ iNext ];\r\n\r\n\t\tif ( tPrev === undefined ) {\r\n\r\n\t\t\tswitch ( this.getSettings_().endingStart ) {\r\n\r\n\t\t\t\tcase THREE.ZeroSlopeEnding:\r\n\r\n\t\t\t\t\t// f'(t0) = 0\r\n\t\t\t\t\tiPrev = i1;\r\n\t\t\t\t\ttPrev = 2 * t0 - t1;\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase THREE.WrapAroundEnding:\r\n\r\n\t\t\t\t\t// use the other end of the curve\r\n\t\t\t\t\tiPrev = pp.length - 2;\r\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault: // ZeroCurvatureEnding\r\n\r\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\r\n\t\t\t\t\tiPrev = i1;\r\n\t\t\t\t\ttPrev = t1;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( tNext === undefined ) {\r\n\r\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\r\n\r\n\t\t\t\tcase THREE.ZeroSlopeEnding:\r\n\r\n\t\t\t\t\t// f'(tN) = 0\r\n\t\t\t\t\tiNext = i1;\r\n\t\t\t\t\ttNext = 2 * t1 - t0;\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase THREE.WrapAroundEnding:\r\n\r\n\t\t\t\t\t// use the other end of the curve\r\n\t\t\t\t\tiNext = 1;\r\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault: // ZeroCurvatureEnding\r\n\r\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\r\n\t\t\t\t\tiNext = i1 - 1;\r\n\t\t\t\t\ttNext = t0;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar halfDt = ( t1 - t0 ) * 0.5,\r\n\t\t\tstride = this.valueSize;\r\n\r\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\r\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\r\n\t\tthis._offsetPrev = iPrev * stride;\r\n\t\tthis._offsetNext = iNext * stride;\r\n\r\n\t},\r\n\r\n\tinterpolate_: function( i1, t0, t, t1 ) {\r\n\r\n\t\tvar result = this.resultBuffer,\r\n\t\t\tvalues = this.sampleValues,\r\n\t\t\tstride = this.valueSize,\r\n\r\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\r\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\r\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\r\n\r\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\r\n\t\t\tpp = p * p,\r\n\t\t\tppp = pp * p;\r\n\r\n\t\t// evaluate polynomials\r\n\r\n\t\tvar sP = - wP * ppp + 2 * wP * pp - wP * p;\r\n\t\tvar s0 = ( 1 + wP ) * ppp + (-1.5 - 2 * wP ) * pp + ( -0.5 + wP ) * p + 1;\r\n\t\tvar s1 = (-1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\r\n\t\tvar sN = wN * ppp - wN * pp;\r\n\r\n\t\t// combine data linearly\r\n\r\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\r\n\r\n\t\t\tresult[ i ] =\r\n\t\t\t\t\tsP * values[ oP + i ] +\r\n\t\t\t\t\ts0 * values[ o0 + i ] +\r\n\t\t\t\t\ts1 * values[ o1 + i ] +\r\n\t\t\t\t\tsN * values[ oN + i ];\r\n\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/math/interpolants/DiscreteInterpolant.js\r\n\r\n/**\r\n *\r\n * Interpolant that evaluates to the sample value at the position preceeding\r\n * the parameter.\r\n *\r\n * @author tschw\r\n */\r\n\r\nTHREE.DiscreteInterpolant = function(\r\n\t\tparameterPositions, sampleValues, sampleSize, resultBuffer ) {\r\n\r\n\tTHREE.Interpolant.call(\r\n\t\t\tthis, parameterPositions, sampleValues, sampleSize, resultBuffer );\r\n\r\n};\r\n\r\nTHREE.DiscreteInterpolant.prototype =\r\n\t\tObject.assign( Object.create( THREE.Interpolant.prototype ), {\r\n\r\n\tconstructor: THREE.DiscreteInterpolant,\r\n\r\n\tinterpolate_: function( i1, t0, t, t1 ) {\r\n\r\n\t\treturn this.copySampleValue_( i1 - 1 );\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/math/interpolants/LinearInterpolant.js\r\n\r\n/**\r\n * @author tschw\r\n */\r\n\r\nTHREE.LinearInterpolant = function(\r\n\t\tparameterPositions, sampleValues, sampleSize, resultBuffer ) {\r\n\r\n\tTHREE.Interpolant.call(\r\n\t\t\tthis, parameterPositions, sampleValues, sampleSize, resultBuffer );\r\n\r\n};\r\n\r\nTHREE.LinearInterpolant.prototype =\r\n\t\tObject.assign( Object.create( THREE.Interpolant.prototype ), {\r\n\r\n\tconstructor: THREE.LinearInterpolant,\r\n\r\n\tinterpolate_: function( i1, t0, t, t1 ) {\r\n\r\n\t\tvar result = this.resultBuffer,\r\n\t\t\tvalues = this.sampleValues,\r\n\t\t\tstride = this.valueSize,\r\n\r\n\t\t\toffset1 = i1 * stride,\r\n\t\t\toffset0 = offset1 - stride,\r\n\r\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\r\n\t\t\tweight0 = 1 - weight1;\r\n\r\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\r\n\r\n\t\t\tresult[ i ] =\r\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\r\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\r\n\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/math/interpolants/QuaternionLinearInterpolant.js\r\n\r\n/**\r\n * Spherical linear unit quaternion interpolant.\r\n *\r\n * @author tschw\r\n */\r\n\r\nTHREE.QuaternionLinearInterpolant = function(\r\n\t\tparameterPositions, sampleValues, sampleSize, resultBuffer ) {\r\n\r\n\tTHREE.Interpolant.call(\r\n\t\t\tthis, parameterPositions, sampleValues, sampleSize, resultBuffer );\r\n\r\n};\r\n\r\nTHREE.QuaternionLinearInterpolant.prototype =\r\n\t\tObject.assign( Object.create( THREE.Interpolant.prototype ), {\r\n\r\n\tconstructor: THREE.QuaternionLinearInterpolant,\r\n\r\n\tinterpolate_: function( i1, t0, t, t1 ) {\r\n\r\n\t\tvar result = this.resultBuffer,\r\n\t\t\tvalues = this.sampleValues,\r\n\t\t\tstride = this.valueSize,\r\n\r\n\t\t\toffset = i1 * stride,\r\n\r\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\r\n\r\n\t\tfor ( var end = offset + stride; offset !== end; offset += 4 ) {\r\n\r\n\t\t\tTHREE.Quaternion.slerpFlat( result, 0,\r\n\t\t\t\t\tvalues, offset - stride, values, offset, alpha );\r\n\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/core/Clock.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Clock = function ( autoStart ) {\r\n\r\n\tthis.autoStart = ( autoStart !== undefined ) ? autoStart : true;\r\n\r\n\tthis.startTime = 0;\r\n\tthis.oldTime = 0;\r\n\tthis.elapsedTime = 0;\r\n\r\n\tthis.running = false;\r\n\r\n};\r\n\r\nTHREE.Clock.prototype = {\r\n\r\n\tconstructor: THREE.Clock,\r\n\r\n\tstart: function () {\r\n\r\n\t\tthis.startTime = ( performance || Date ).now();\r\n\r\n\t\tthis.oldTime = this.startTime;\r\n\t\tthis.running = true;\r\n\r\n\t},\r\n\r\n\tstop: function () {\r\n\r\n\t\tthis.getElapsedTime();\r\n\t\tthis.running = false;\r\n\r\n\t},\r\n\r\n\tgetElapsedTime: function () {\r\n\r\n\t\tthis.getDelta();\r\n\t\treturn this.elapsedTime;\r\n\r\n\t},\r\n\r\n\tgetDelta: function () {\r\n\r\n\t\tvar diff = 0;\r\n\r\n\t\tif ( this.autoStart && ! this.running ) {\r\n\r\n\t\t\tthis.start();\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.running ) {\r\n\r\n\t\t\tvar newTime = ( performance || Date ).now();\r\n\r\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\r\n\t\t\tthis.oldTime = newTime;\r\n\r\n\t\t\tthis.elapsedTime += diff;\r\n\r\n\t\t}\r\n\r\n\t\treturn diff;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/core/EventDispatcher.js\r\n\r\n/**\r\n * https://github.com/mrdoob/eventdispatcher.js/\r\n */\r\n\r\nTHREE.EventDispatcher = function () {};\r\n\r\nObject.assign( THREE.EventDispatcher.prototype, {\r\n\r\n\taddEventListener: function ( type, listener ) {\r\n\r\n\t\tif ( this._listeners === undefined ) this._listeners = {};\r\n\r\n\t\tvar listeners = this._listeners;\r\n\r\n\t\tif ( listeners[ type ] === undefined ) {\r\n\r\n\t\t\tlisteners[ type ] = [];\r\n\r\n\t\t}\r\n\r\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\r\n\r\n\t\t\tlisteners[ type ].push( listener );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\thasEventListener: function ( type, listener ) {\r\n\r\n\t\tif ( this._listeners === undefined ) return false;\r\n\r\n\t\tvar listeners = this._listeners;\r\n\r\n\t\tif ( listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1 ) {\r\n\r\n\t\t\treturn true;\r\n\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t},\r\n\r\n\tremoveEventListener: function ( type, listener ) {\r\n\r\n\t\tif ( this._listeners === undefined ) return;\r\n\r\n\t\tvar listeners = this._listeners;\r\n\t\tvar listenerArray = listeners[ type ];\r\n\r\n\t\tif ( listenerArray !== undefined ) {\r\n\r\n\t\t\tvar index = listenerArray.indexOf( listener );\r\n\r\n\t\t\tif ( index !== - 1 ) {\r\n\r\n\t\t\t\tlistenerArray.splice( index, 1 );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tdispatchEvent: function ( event ) {\r\n\r\n\t\tif ( this._listeners === undefined ) return;\r\n\r\n\t\tvar listeners = this._listeners;\r\n\t\tvar listenerArray = listeners[ event.type ];\r\n\r\n\t\tif ( listenerArray !== undefined ) {\r\n\r\n\t\t\tevent.target = this;\r\n\r\n\t\t\tvar array = [], i = 0;\r\n\t\t\tvar length = listenerArray.length;\r\n\r\n\t\t\tfor ( i = 0; i < length; i ++ ) {\r\n\r\n\t\t\t\tarray[ i ] = listenerArray[ i ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( i = 0; i < length; i ++ ) {\r\n\r\n\t\t\t\tarray[ i ].call( this, event );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/core/Layers.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Layers = function () {\r\n\r\n\tthis.mask = 1;\r\n\r\n};\r\n\r\nTHREE.Layers.prototype = {\r\n\r\n\tconstructor: THREE.Layers,\r\n\r\n\tset: function ( channel ) {\r\n\r\n\t\tthis.mask = 1 << channel;\r\n\r\n\t},\r\n\r\n\tenable: function ( channel ) {\r\n\r\n\t\tthis.mask |= 1 << channel;\r\n\r\n\t},\r\n\r\n\ttoggle: function ( channel ) {\r\n\r\n\t\tthis.mask ^= 1 << channel;\r\n\r\n\t},\r\n\r\n\tdisable: function ( channel ) {\r\n\r\n\t\tthis.mask &= ~ ( 1 << channel );\r\n\r\n\t},\r\n\r\n\ttest: function ( layers ) {\r\n\r\n\t\treturn ( this.mask & layers.mask ) !== 0;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/core/Raycaster.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author bhouston / http://clara.io/\r\n * @author stephomi / http://stephaneginier.com/\r\n */\r\n\r\n( function ( THREE ) {\r\n\r\n\tTHREE.Raycaster = function ( origin, direction, near, far ) {\r\n\r\n\t\tthis.ray = new THREE.Ray( origin, direction );\r\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\r\n\r\n\t\tthis.near = near || 0;\r\n\t\tthis.far = far || Infinity;\r\n\r\n\t\tthis.params = {\r\n\t\t\tMesh: {},\r\n\t\t\tLine: {},\r\n\t\t\tLOD: {},\r\n\t\t\tPoints: { threshold: 1 },\r\n\t\t\tSprite: {}\r\n\t\t};\r\n\r\n\t\tObject.defineProperties( this.params, {\r\n\t\t\tPointCloud: {\r\n\t\t\t\tget: function () {\r\n\t\t\t\t\tconsole.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' );\r\n\t\t\t\t\treturn this.Points;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\tfunction ascSort( a, b ) {\r\n\r\n\t\treturn a.distance - b.distance;\r\n\r\n\t}\r\n\r\n\tfunction intersectObject( object, raycaster, intersects, recursive ) {\r\n\r\n\t\tif ( object.visible === false ) return;\r\n\r\n\t\tobject.raycast( raycaster, intersects );\r\n\r\n\t\tif ( recursive === true ) {\r\n\r\n\t\t\tvar children = object.children;\r\n\r\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//\r\n\r\n\tTHREE.Raycaster.prototype = {\r\n\r\n\t\tconstructor: THREE.Raycaster,\r\n\r\n\t\tlinePrecision: 1,\r\n\r\n\t\tset: function ( origin, direction ) {\r\n\r\n\t\t\t// direction is assumed to be normalized (for accurate distance calculations)\r\n\r\n\t\t\tthis.ray.set( origin, direction );\r\n\r\n\t\t},\r\n\r\n\t\tsetFromCamera: function ( coords, camera ) {\r\n\r\n\t\t\tif ( camera instanceof THREE.PerspectiveCamera ) {\r\n\r\n\t\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\r\n\t\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\r\n\r\n\t\t\t} else if ( camera instanceof THREE.OrthographicCamera ) {\r\n\r\n\t\t\t\tthis.ray.origin.set( coords.x, coords.y, - 1 ).unproject( camera );\r\n\t\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type.' );\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\tintersectObject: function ( object, recursive ) {\r\n\r\n\t\t\tvar intersects = [];\r\n\r\n\t\t\tintersectObject( object, this, intersects, recursive );\r\n\r\n\t\t\tintersects.sort( ascSort );\r\n\r\n\t\t\treturn intersects;\r\n\r\n\t\t},\r\n\r\n\t\tintersectObjects: function ( objects, recursive ) {\r\n\r\n\t\t\tvar intersects = [];\r\n\r\n\t\t\tif ( Array.isArray( objects ) === false ) {\r\n\r\n\t\t\t\tconsole.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );\r\n\t\t\t\treturn intersects;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( var i = 0, l = objects.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tintersects.sort( ascSort );\r\n\r\n\t\t\treturn intersects;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n}( THREE ) );\r\n\r\n// File:src/core/Object3D.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n * @author elephantatwork / www.elephantatwork.ch\r\n */\r\n\r\nTHREE.Object3D = function () {\r\n\r\n\tObject.defineProperty( this, 'id', { value: THREE.Object3DIdCount ++ } );\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\tthis.name = '';\r\n\tthis.type = 'Object3D';\r\n\r\n\tthis.parent = null;\r\n\tthis.children = [];\r\n\r\n\tthis.up = THREE.Object3D.DefaultUp.clone();\r\n\r\n\tvar position = new THREE.Vector3();\r\n\tvar rotation = new THREE.Euler();\r\n\tvar quaternion = new THREE.Quaternion();\r\n\tvar scale = new THREE.Vector3( 1, 1, 1 );\r\n\r\n\tfunction onRotationChange() {\r\n\r\n\t\tquaternion.setFromEuler( rotation, false );\r\n\r\n\t}\r\n\r\n\tfunction onQuaternionChange() {\r\n\r\n\t\trotation.setFromQuaternion( quaternion, undefined, false );\r\n\r\n\t}\r\n\r\n\trotation.onChange( onRotationChange );\r\n\tquaternion.onChange( onQuaternionChange );\r\n\r\n\tObject.defineProperties( this, {\r\n\t\tposition: {\r\n\t\t\tenumerable: true,\r\n\t\t\tvalue: position\r\n\t\t},\r\n\t\trotation: {\r\n\t\t\tenumerable: true,\r\n\t\t\tvalue: rotation\r\n\t\t},\r\n\t\tquaternion: {\r\n\t\t\tenumerable: true,\r\n\t\t\tvalue: quaternion\r\n\t\t},\r\n\t\tscale: {\r\n\t\t\tenumerable: true,\r\n\t\t\tvalue: scale\r\n\t\t},\r\n\t\tmodelViewMatrix: {\r\n\t\t\tvalue: new THREE.Matrix4()\r\n\t\t},\r\n\t\tnormalMatrix: {\r\n\t\t\tvalue: new THREE.Matrix3()\r\n\t\t}\r\n\t} );\r\n\r\n\tthis.matrix = new THREE.Matrix4();\r\n\tthis.matrixWorld = new THREE.Matrix4();\r\n\r\n\tthis.matrixAutoUpdate = THREE.Object3D.DefaultMatrixAutoUpdate;\r\n\tthis.matrixWorldNeedsUpdate = false;\r\n\r\n\tthis.layers = new THREE.Layers();\r\n\tthis.visible = true;\r\n\r\n\tthis.castShadow = false;\r\n\tthis.receiveShadow = false;\r\n\r\n\tthis.frustumCulled = true;\r\n\tthis.renderOrder = 0;\r\n\r\n\tthis.userData = {};\r\n\r\n};\r\n\r\nTHREE.Object3D.DefaultUp = new THREE.Vector3( 0, 1, 0 );\r\nTHREE.Object3D.DefaultMatrixAutoUpdate = true;\r\n\r\nObject.assign( THREE.Object3D.prototype, THREE.EventDispatcher.prototype, {\r\n\r\n\tapplyMatrix: function ( matrix ) {\r\n\r\n\t\tthis.matrix.multiplyMatrices( matrix, this.matrix );\r\n\r\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\r\n\r\n\t},\r\n\r\n\tsetRotationFromAxisAngle: function ( axis, angle ) {\r\n\r\n\t\t// assumes axis is normalized\r\n\r\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\r\n\r\n\t},\r\n\r\n\tsetRotationFromEuler: function ( euler ) {\r\n\r\n\t\tthis.quaternion.setFromEuler( euler, true );\r\n\r\n\t},\r\n\r\n\tsetRotationFromMatrix: function ( m ) {\r\n\r\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\r\n\r\n\t\tthis.quaternion.setFromRotationMatrix( m );\r\n\r\n\t},\r\n\r\n\tsetRotationFromQuaternion: function ( q ) {\r\n\r\n\t\t// assumes q is normalized\r\n\r\n\t\tthis.quaternion.copy( q );\r\n\r\n\t},\r\n\r\n\trotateOnAxis: function () {\r\n\r\n\t\t// rotate object on axis in object space\r\n\t\t// axis is assumed to be normalized\r\n\r\n\t\tvar q1 = new THREE.Quaternion();\r\n\r\n\t\treturn function ( axis, angle ) {\r\n\r\n\t\t\tq1.setFromAxisAngle( axis, angle );\r\n\r\n\t\t\tthis.quaternion.multiply( q1 );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\trotateX: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3( 1, 0, 0 );\r\n\r\n\t\treturn function ( angle ) {\r\n\r\n\t\t\treturn this.rotateOnAxis( v1, angle );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\trotateY: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3( 0, 1, 0 );\r\n\r\n\t\treturn function ( angle ) {\r\n\r\n\t\t\treturn this.rotateOnAxis( v1, angle );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\trotateZ: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3( 0, 0, 1 );\r\n\r\n\t\treturn function ( angle ) {\r\n\r\n\t\t\treturn this.rotateOnAxis( v1, angle );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\ttranslateOnAxis: function () {\r\n\r\n\t\t// translate object by distance along axis in object space\r\n\t\t// axis is assumed to be normalized\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\r\n\t\treturn function ( axis, distance ) {\r\n\r\n\t\t\tv1.copy( axis ).applyQuaternion( this.quaternion );\r\n\r\n\t\t\tthis.position.add( v1.multiplyScalar( distance ) );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\ttranslateX: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3( 1, 0, 0 );\r\n\r\n\t\treturn function ( distance ) {\r\n\r\n\t\t\treturn this.translateOnAxis( v1, distance );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\ttranslateY: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3( 0, 1, 0 );\r\n\r\n\t\treturn function ( distance ) {\r\n\r\n\t\t\treturn this.translateOnAxis( v1, distance );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\ttranslateZ: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3( 0, 0, 1 );\r\n\r\n\t\treturn function ( distance ) {\r\n\r\n\t\t\treturn this.translateOnAxis( v1, distance );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tlocalToWorld: function ( vector ) {\r\n\r\n\t\treturn vector.applyMatrix4( this.matrixWorld );\r\n\r\n\t},\r\n\r\n\tworldToLocal: function () {\r\n\r\n\t\tvar m1 = new THREE.Matrix4();\r\n\r\n\t\treturn function ( vector ) {\r\n\r\n\t\t\treturn vector.applyMatrix4( m1.getInverse( this.matrixWorld ) );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tlookAt: function () {\r\n\r\n\t\t// This routine does not support objects with rotated and/or translated parent(s)\r\n\r\n\t\tvar m1 = new THREE.Matrix4();\r\n\r\n\t\treturn function ( vector ) {\r\n\r\n\t\t\tm1.lookAt( vector, this.position, this.up );\r\n\r\n\t\t\tthis.quaternion.setFromRotationMatrix( m1 );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tadd: function ( object ) {\r\n\r\n\t\tif ( arguments.length > 1 ) {\r\n\r\n\t\t\tfor ( var i = 0; i < arguments.length; i ++ ) {\r\n\r\n\t\t\t\tthis.add( arguments[ i ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t}\r\n\r\n\t\tif ( object === this ) {\r\n\r\n\t\t\tconsole.error( \"THREE.Object3D.add: object can't be added as a child of itself.\", object );\r\n\t\t\treturn this;\r\n\r\n\t\t}\r\n\r\n\t\tif ( object instanceof THREE.Object3D ) {\r\n\r\n\t\t\tif ( object.parent !== null ) {\r\n\r\n\t\t\t\tobject.parent.remove( object );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tobject.parent = this;\r\n\t\t\tobject.dispatchEvent( { type: 'added' } );\r\n\r\n\t\t\tthis.children.push( object );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconsole.error( \"THREE.Object3D.add: object not an instance of THREE.Object3D.\", object );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tremove: function ( object ) {\r\n\r\n\t\tif ( arguments.length > 1 ) {\r\n\r\n\t\t\tfor ( var i = 0; i < arguments.length; i ++ ) {\r\n\r\n\t\t\t\tthis.remove( arguments[ i ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar index = this.children.indexOf( object );\r\n\r\n\t\tif ( index !== - 1 ) {\r\n\r\n\t\t\tobject.parent = null;\r\n\r\n\t\t\tobject.dispatchEvent( { type: 'removed' } );\r\n\r\n\t\t\tthis.children.splice( index, 1 );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tgetObjectById: function ( id ) {\r\n\r\n\t\treturn this.getObjectByProperty( 'id', id );\r\n\r\n\t},\r\n\r\n\tgetObjectByName: function ( name ) {\r\n\r\n\t\treturn this.getObjectByProperty( 'name', name );\r\n\r\n\t},\r\n\r\n\tgetObjectByProperty: function ( name, value ) {\r\n\r\n\t\tif ( this[ name ] === value ) return this;\r\n\r\n\t\tfor ( var i = 0, l = this.children.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar child = this.children[ i ];\r\n\t\t\tvar object = child.getObjectByProperty( name, value );\r\n\r\n\t\t\tif ( object !== undefined ) {\r\n\r\n\t\t\t\treturn object;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn undefined;\r\n\r\n\t},\r\n\r\n\tgetWorldPosition: function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\tthis.updateMatrixWorld( true );\r\n\r\n\t\treturn result.setFromMatrixPosition( this.matrixWorld );\r\n\r\n\t},\r\n\r\n\tgetWorldQuaternion: function () {\r\n\r\n\t\tvar position = new THREE.Vector3();\r\n\t\tvar scale = new THREE.Vector3();\r\n\r\n\t\treturn function ( optionalTarget ) {\r\n\r\n\t\t\tvar result = optionalTarget || new THREE.Quaternion();\r\n\r\n\t\t\tthis.updateMatrixWorld( true );\r\n\r\n\t\t\tthis.matrixWorld.decompose( position, result, scale );\r\n\r\n\t\t\treturn result;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tgetWorldRotation: function () {\r\n\r\n\t\tvar quaternion = new THREE.Quaternion();\r\n\r\n\t\treturn function ( optionalTarget ) {\r\n\r\n\t\t\tvar result = optionalTarget || new THREE.Euler();\r\n\r\n\t\t\tthis.getWorldQuaternion( quaternion );\r\n\r\n\t\t\treturn result.setFromQuaternion( quaternion, this.rotation.order, false );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tgetWorldScale: function () {\r\n\r\n\t\tvar position = new THREE.Vector3();\r\n\t\tvar quaternion = new THREE.Quaternion();\r\n\r\n\t\treturn function ( optionalTarget ) {\r\n\r\n\t\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\t\tthis.updateMatrixWorld( true );\r\n\r\n\t\t\tthis.matrixWorld.decompose( position, quaternion, result );\r\n\r\n\t\t\treturn result;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tgetWorldDirection: function () {\r\n\r\n\t\tvar quaternion = new THREE.Quaternion();\r\n\r\n\t\treturn function ( optionalTarget ) {\r\n\r\n\t\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\t\tthis.getWorldQuaternion( quaternion );\r\n\r\n\t\t\treturn result.set( 0, 0, 1 ).applyQuaternion( quaternion );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\traycast: function () {},\r\n\r\n\ttraverse: function ( callback ) {\r\n\r\n\t\tcallback( this );\r\n\r\n\t\tvar children = this.children;\r\n\r\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\r\n\r\n\t\t\tchildren[ i ].traverse( callback );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\ttraverseVisible: function ( callback ) {\r\n\r\n\t\tif ( this.visible === false ) return;\r\n\r\n\t\tcallback( this );\r\n\r\n\t\tvar children = this.children;\r\n\r\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\r\n\r\n\t\t\tchildren[ i ].traverseVisible( callback );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\ttraverseAncestors: function ( callback ) {\r\n\r\n\t\tvar parent = this.parent;\r\n\r\n\t\tif ( parent !== null ) {\r\n\r\n\t\t\tcallback( parent );\r\n\r\n\t\t\tparent.traverseAncestors( callback );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tupdateMatrix: function () {\r\n\r\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\r\n\r\n\t\tthis.matrixWorldNeedsUpdate = true;\r\n\r\n\t},\r\n\r\n\tupdateMatrixWorld: function ( force ) {\r\n\r\n\t\tif ( this.matrixAutoUpdate === true ) this.updateMatrix();\r\n\r\n\t\tif ( this.matrixWorldNeedsUpdate === true || force === true ) {\r\n\r\n\t\t\tif ( this.parent === null ) {\r\n\r\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.matrixWorldNeedsUpdate = false;\r\n\r\n\t\t\tforce = true;\r\n\r\n\t\t}\r\n\r\n\t\t// update children\r\n\r\n\t\tfor ( var i = 0, l = this.children.length; i < l; i ++ ) {\r\n\r\n\t\t\tthis.children[ i ].updateMatrixWorld( force );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\ttoJSON: function ( meta ) {\r\n\r\n\t\t// meta is '' when called from JSON.stringify\r\n\t\tvar isRootObject = ( meta === undefined || meta === '' );\r\n\r\n\t\tvar output = {};\r\n\r\n\t\t// meta is a hash used to collect geometries, materials.\r\n\t\t// not providing it implies that this is the root object\r\n\t\t// being serialized.\r\n\t\tif ( isRootObject ) {\r\n\r\n\t\t\t// initialize meta obj\r\n\t\t\tmeta = {\r\n\t\t\t\tgeometries: {},\r\n\t\t\t\tmaterials: {},\r\n\t\t\t\ttextures: {},\r\n\t\t\t\timages: {}\r\n\t\t\t};\r\n\r\n\t\t\toutput.metadata = {\r\n\t\t\t\tversion: 4.4,\r\n\t\t\t\ttype: 'Object',\r\n\t\t\t\tgenerator: 'Object3D.toJSON'\r\n\t\t\t};\r\n\r\n\t\t}\r\n\r\n\t\t// standard Object3D serialization\r\n\r\n\t\tvar object = {};\r\n\r\n\t\tobject.uuid = this.uuid;\r\n\t\tobject.type = this.type;\r\n\r\n\t\tif ( this.name !== '' ) object.name = this.name;\r\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData;\r\n\t\tif ( this.castShadow === true ) object.castShadow = true;\r\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\r\n\t\tif ( this.visible === false ) object.visible = false;\r\n\r\n\t\tobject.matrix = this.matrix.toArray();\r\n\r\n\t\t//\r\n\r\n\t\tif ( this.geometry !== undefined ) {\r\n\r\n\t\t\tif ( meta.geometries[ this.geometry.uuid ] === undefined ) {\r\n\r\n\t\t\t\tmeta.geometries[ this.geometry.uuid ] = this.geometry.toJSON( meta );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tobject.geometry = this.geometry.uuid;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.material !== undefined ) {\r\n\r\n\t\t\tif ( meta.materials[ this.material.uuid ] === undefined ) {\r\n\r\n\t\t\t\tmeta.materials[ this.material.uuid ] = this.material.toJSON( meta );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tobject.material = this.material.uuid;\r\n\r\n\t\t}\r\n\r\n\t\t//\r\n\r\n\t\tif ( this.children.length > 0 ) {\r\n\r\n\t\t\tobject.children = [];\r\n\r\n\t\t\tfor ( var i = 0; i < this.children.length; i ++ ) {\r\n\r\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( isRootObject ) {\r\n\r\n\t\t\tvar geometries = extractFromCache( meta.geometries );\r\n\t\t\tvar materials = extractFromCache( meta.materials );\r\n\t\t\tvar textures = extractFromCache( meta.textures );\r\n\t\t\tvar images = extractFromCache( meta.images );\r\n\r\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\r\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\r\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\r\n\t\t\tif ( images.length > 0 ) output.images = images;\r\n\r\n\t\t}\r\n\r\n\t\toutput.object = object;\r\n\r\n\t\treturn output;\r\n\r\n\t\t// extract data from the cache hash\r\n\t\t// remove metadata on each item\r\n\t\t// and return as array\r\n\t\tfunction extractFromCache ( cache ) {\r\n\r\n\t\t\tvar values = [];\r\n\t\t\tfor ( var key in cache ) {\r\n\r\n\t\t\t\tvar data = cache[ key ];\r\n\t\t\t\tdelete data.metadata;\r\n\t\t\t\tvalues.push( data );\r\n\r\n\t\t\t}\r\n\t\t\treturn values;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tclone: function ( recursive ) {\r\n\r\n\t\treturn new this.constructor().copy( this, recursive );\r\n\r\n\t},\r\n\r\n\tcopy: function ( source, recursive ) {\r\n\r\n\t\tif ( recursive === undefined ) recursive = true;\r\n\r\n\t\tthis.name = source.name;\r\n\r\n\t\tthis.up.copy( source.up );\r\n\r\n\t\tthis.position.copy( source.position );\r\n\t\tthis.quaternion.copy( source.quaternion );\r\n\t\tthis.scale.copy( source.scale );\r\n\r\n\t\tthis.matrix.copy( source.matrix );\r\n\t\tthis.matrixWorld.copy( source.matrixWorld );\r\n\r\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\r\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\r\n\r\n\t\tthis.visible = source.visible;\r\n\r\n\t\tthis.castShadow = source.castShadow;\r\n\t\tthis.receiveShadow = source.receiveShadow;\r\n\r\n\t\tthis.frustumCulled = source.frustumCulled;\r\n\t\tthis.renderOrder = source.renderOrder;\r\n\r\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\r\n\r\n\t\tif ( recursive === true ) {\r\n\r\n\t\t\tfor ( var i = 0; i < source.children.length; i ++ ) {\r\n\r\n\t\t\t\tvar child = source.children[ i ];\r\n\t\t\t\tthis.add( child.clone() );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n} );\r\n\r\nTHREE.Object3DIdCount = 0;\r\n\r\n// File:src/core/Face3.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Face3 = function ( a, b, c, normal, color, materialIndex ) {\r\n\r\n\tthis.a = a;\r\n\tthis.b = b;\r\n\tthis.c = c;\r\n\r\n\tthis.normal = normal instanceof THREE.Vector3 ? normal : new THREE.Vector3();\r\n\tthis.vertexNormals = Array.isArray( normal ) ? normal : [];\r\n\r\n\tthis.color = color instanceof THREE.Color ? color : new THREE.Color();\r\n\tthis.vertexColors = Array.isArray( color ) ? color : [];\r\n\r\n\tthis.materialIndex = materialIndex !== undefined ? materialIndex : 0;\r\n\r\n};\r\n\r\nTHREE.Face3.prototype = {\r\n\r\n\tconstructor: THREE.Face3,\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\r\n\t},\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tthis.a = source.a;\r\n\t\tthis.b = source.b;\r\n\t\tthis.c = source.c;\r\n\r\n\t\tthis.normal.copy( source.normal );\r\n\t\tthis.color.copy( source.color );\r\n\r\n\t\tthis.materialIndex = source.materialIndex;\r\n\r\n\t\tfor ( var i = 0, il = source.vertexNormals.length; i < il; i ++ ) {\r\n\r\n\t\t\tthis.vertexNormals[ i ] = source.vertexNormals[ i ].clone();\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0, il = source.vertexColors.length; i < il; i ++ ) {\r\n\r\n\t\t\tthis.vertexColors[ i ] = source.vertexColors[ i ].clone();\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/core/BufferAttribute.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.BufferAttribute = function ( array, itemSize, normalized ) {\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\tthis.array = array;\r\n\tthis.itemSize = itemSize;\r\n\r\n\tthis.dynamic = false;\r\n\tthis.updateRange = { offset: 0, count: - 1 };\r\n\r\n\tthis.version = 0;\r\n\tthis.normalized = normalized === true;\r\n\r\n};\r\n\r\nTHREE.BufferAttribute.prototype = {\r\n\r\n\tconstructor: THREE.BufferAttribute,\r\n\r\n\tget count() {\r\n\r\n\t\treturn this.array.length / this.itemSize;\r\n\r\n\t},\r\n\r\n\tset needsUpdate( value ) {\r\n\r\n\t\tif ( value === true ) this.version ++;\r\n\r\n\t},\r\n\r\n\tsetDynamic: function ( value ) {\r\n\r\n\t\tthis.dynamic = value;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tthis.array = new source.array.constructor( source.array );\r\n\t\tthis.itemSize = source.itemSize;\r\n\r\n\t\tthis.dynamic = source.dynamic;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopyAt: function ( index1, attribute, index2 ) {\r\n\r\n\t\tindex1 *= this.itemSize;\r\n\t\tindex2 *= attribute.itemSize;\r\n\r\n\t\tfor ( var i = 0, l = this.itemSize; i < l; i ++ ) {\r\n\r\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopyArray: function ( array ) {\r\n\r\n\t\tthis.array.set( array );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopyColorsArray: function ( colors ) {\r\n\r\n\t\tvar array = this.array, offset = 0;\r\n\r\n\t\tfor ( var i = 0, l = colors.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar color = colors[ i ];\r\n\r\n\t\t\tif ( color === undefined ) {\r\n\r\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i );\r\n\t\t\t\tcolor = new THREE.Color();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tarray[ offset ++ ] = color.r;\r\n\t\t\tarray[ offset ++ ] = color.g;\r\n\t\t\tarray[ offset ++ ] = color.b;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopyIndicesArray: function ( indices ) {\r\n\r\n\t\tvar array = this.array, offset = 0;\r\n\r\n\t\tfor ( var i = 0, l = indices.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar index = indices[ i ];\r\n\r\n\t\t\tarray[ offset ++ ] = index.a;\r\n\t\t\tarray[ offset ++ ] = index.b;\r\n\t\t\tarray[ offset ++ ] = index.c;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopyVector2sArray: function ( vectors ) {\r\n\r\n\t\tvar array = this.array, offset = 0;\r\n\r\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar vector = vectors[ i ];\r\n\r\n\t\t\tif ( vector === undefined ) {\r\n\r\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i );\r\n\t\t\t\tvector = new THREE.Vector2();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tarray[ offset ++ ] = vector.x;\r\n\t\t\tarray[ offset ++ ] = vector.y;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopyVector3sArray: function ( vectors ) {\r\n\r\n\t\tvar array = this.array, offset = 0;\r\n\r\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar vector = vectors[ i ];\r\n\r\n\t\t\tif ( vector === undefined ) {\r\n\r\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i );\r\n\t\t\t\tvector = new THREE.Vector3();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tarray[ offset ++ ] = vector.x;\r\n\t\t\tarray[ offset ++ ] = vector.y;\r\n\t\t\tarray[ offset ++ ] = vector.z;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopyVector4sArray: function ( vectors ) {\r\n\r\n\t\tvar array = this.array, offset = 0;\r\n\r\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar vector = vectors[ i ];\r\n\r\n\t\t\tif ( vector === undefined ) {\r\n\r\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i );\r\n\t\t\t\tvector = new THREE.Vector4();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tarray[ offset ++ ] = vector.x;\r\n\t\t\tarray[ offset ++ ] = vector.y;\r\n\t\t\tarray[ offset ++ ] = vector.z;\r\n\t\t\tarray[ offset ++ ] = vector.w;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tset: function ( value, offset ) {\r\n\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tthis.array.set( value, offset );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tgetX: function ( index ) {\r\n\r\n\t\treturn this.array[ index * this.itemSize ];\r\n\r\n\t},\r\n\r\n\tsetX: function ( index, x ) {\r\n\r\n\t\tthis.array[ index * this.itemSize ] = x;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tgetY: function ( index ) {\r\n\r\n\t\treturn this.array[ index * this.itemSize + 1 ];\r\n\r\n\t},\r\n\r\n\tsetY: function ( index, y ) {\r\n\r\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tgetZ: function ( index ) {\r\n\r\n\t\treturn this.array[ index * this.itemSize + 2 ];\r\n\r\n\t},\r\n\r\n\tsetZ: function ( index, z ) {\r\n\r\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tgetW: function ( index ) {\r\n\r\n\t\treturn this.array[ index * this.itemSize + 3 ];\r\n\r\n\t},\r\n\r\n\tsetW: function ( index, w ) {\r\n\r\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetXY: function ( index, x, y ) {\r\n\r\n\t\tindex *= this.itemSize;\r\n\r\n\t\tthis.array[ index + 0 ] = x;\r\n\t\tthis.array[ index + 1 ] = y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetXYZ: function ( index, x, y, z ) {\r\n\r\n\t\tindex *= this.itemSize;\r\n\r\n\t\tthis.array[ index + 0 ] = x;\r\n\t\tthis.array[ index + 1 ] = y;\r\n\t\tthis.array[ index + 2 ] = z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetXYZW: function ( index, x, y, z, w ) {\r\n\r\n\t\tindex *= this.itemSize;\r\n\r\n\t\tthis.array[ index + 0 ] = x;\r\n\t\tthis.array[ index + 1 ] = y;\r\n\t\tthis.array[ index + 2 ] = z;\r\n\t\tthis.array[ index + 3 ] = w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\r\n\t}\r\n\r\n};\r\n\r\n//\r\n\r\nTHREE.Int8Attribute = function ( array, itemSize ) {\r\n\r\n\treturn new THREE.BufferAttribute( new Int8Array( array ), itemSize );\r\n\r\n};\r\n\r\nTHREE.Uint8Attribute = function ( array, itemSize ) {\r\n\r\n\treturn new THREE.BufferAttribute( new Uint8Array( array ), itemSize );\r\n\r\n};\r\n\r\nTHREE.Uint8ClampedAttribute = function ( array, itemSize ) {\r\n\r\n\treturn new THREE.BufferAttribute( new Uint8ClampedArray( array ), itemSize );\r\n\r\n};\r\n\r\nTHREE.Int16Attribute = function ( array, itemSize ) {\r\n\r\n\treturn new THREE.BufferAttribute( new Int16Array( array ), itemSize );\r\n\r\n};\r\n\r\nTHREE.Uint16Attribute = function ( array, itemSize ) {\r\n\r\n\treturn new THREE.BufferAttribute( new Uint16Array( array ), itemSize );\r\n\r\n};\r\n\r\nTHREE.Int32Attribute = function ( array, itemSize ) {\r\n\r\n\treturn new THREE.BufferAttribute( new Int32Array( array ), itemSize );\r\n\r\n};\r\n\r\nTHREE.Uint32Attribute = function ( array, itemSize ) {\r\n\r\n\treturn new THREE.BufferAttribute( new Uint32Array( array ), itemSize );\r\n\r\n};\r\n\r\nTHREE.Float32Attribute = function ( array, itemSize ) {\r\n\r\n\treturn new THREE.BufferAttribute( new Float32Array( array ), itemSize );\r\n\r\n};\r\n\r\nTHREE.Float64Attribute = function ( array, itemSize ) {\r\n\r\n\treturn new THREE.BufferAttribute( new Float64Array( array ), itemSize );\r\n\r\n};\r\n\r\n\r\n// Deprecated\r\n\r\nTHREE.DynamicBufferAttribute = function ( array, itemSize ) {\r\n\r\n\tconsole.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.' );\r\n\treturn new THREE.BufferAttribute( array, itemSize ).setDynamic( true );\r\n\r\n};\r\n\r\n// File:src/core/InstancedBufferAttribute.js\r\n\r\n/**\r\n * @author benaadams / https://twitter.com/ben_a_adams\r\n */\r\n\r\nTHREE.InstancedBufferAttribute = function ( array, itemSize, meshPerAttribute ) {\r\n\r\n\tTHREE.BufferAttribute.call( this, array, itemSize );\r\n\r\n\tthis.meshPerAttribute = meshPerAttribute || 1;\r\n\r\n};\r\n\r\nTHREE.InstancedBufferAttribute.prototype = Object.create( THREE.BufferAttribute.prototype );\r\nTHREE.InstancedBufferAttribute.prototype.constructor = THREE.InstancedBufferAttribute;\r\n\r\nTHREE.InstancedBufferAttribute.prototype.copy = function ( source ) {\r\n\r\n\tTHREE.BufferAttribute.prototype.copy.call( this, source );\r\n\r\n\tthis.meshPerAttribute = source.meshPerAttribute;\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n// File:src/core/InterleavedBuffer.js\r\n\r\n/**\r\n * @author benaadams / https://twitter.com/ben_a_adams\r\n */\r\n\r\nTHREE.InterleavedBuffer = function ( array, stride ) {\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\tthis.array = array;\r\n\tthis.stride = stride;\r\n\r\n\tthis.dynamic = false;\r\n\tthis.updateRange = { offset: 0, count: - 1 };\r\n\r\n\tthis.version = 0;\r\n\r\n};\r\n\r\nTHREE.InterleavedBuffer.prototype = {\r\n\r\n\tconstructor: THREE.InterleavedBuffer,\r\n\r\n\tget length () {\r\n\r\n\t\treturn this.array.length;\r\n\r\n\t},\r\n\r\n\tget count () {\r\n\r\n\t\treturn this.array.length / this.stride;\r\n\r\n\t},\r\n\r\n\tset needsUpdate( value ) {\r\n\r\n\t\tif ( value === true ) this.version ++;\r\n\r\n\t},\r\n\r\n\tsetDynamic: function ( value ) {\r\n\r\n\t\tthis.dynamic = value;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tthis.array = new source.array.constructor( source.array );\r\n\t\tthis.stride = source.stride;\r\n\t\tthis.dynamic = source.dynamic;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopyAt: function ( index1, attribute, index2 ) {\r\n\r\n\t\tindex1 *= this.stride;\r\n\t\tindex2 *= attribute.stride;\r\n\r\n\t\tfor ( var i = 0, l = this.stride; i < l; i ++ ) {\r\n\r\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tset: function ( value, offset ) {\r\n\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tthis.array.set( value, offset );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/core/InstancedInterleavedBuffer.js\r\n\r\n/**\r\n * @author benaadams / https://twitter.com/ben_a_adams\r\n */\r\n\r\nTHREE.InstancedInterleavedBuffer = function ( array, stride, meshPerAttribute ) {\r\n\r\n\tTHREE.InterleavedBuffer.call( this, array, stride );\r\n\r\n\tthis.meshPerAttribute = meshPerAttribute || 1;\r\n\r\n};\r\n\r\nTHREE.InstancedInterleavedBuffer.prototype = Object.create( THREE.InterleavedBuffer.prototype );\r\nTHREE.InstancedInterleavedBuffer.prototype.constructor = THREE.InstancedInterleavedBuffer;\r\n\r\nTHREE.InstancedInterleavedBuffer.prototype.copy = function ( source ) {\r\n\r\n\tTHREE.InterleavedBuffer.prototype.copy.call( this, source );\r\n\r\n\tthis.meshPerAttribute = source.meshPerAttribute;\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n// File:src/core/InterleavedBufferAttribute.js\r\n\r\n/**\r\n * @author benaadams / https://twitter.com/ben_a_adams\r\n */\r\n\r\nTHREE.InterleavedBufferAttribute = function ( interleavedBuffer, itemSize, offset ) {\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\tthis.data = interleavedBuffer;\r\n\tthis.itemSize = itemSize;\r\n\tthis.offset = offset;\r\n\r\n};\r\n\r\n\r\nTHREE.InterleavedBufferAttribute.prototype = {\r\n\r\n\tconstructor: THREE.InterleavedBufferAttribute,\r\n\r\n\tget length() {\r\n\r\n\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Please use .count.' );\r\n\t\treturn this.array.length;\r\n\r\n\t},\r\n\r\n\tget count() {\r\n\r\n\t\treturn this.data.count;\r\n\r\n\t},\r\n\r\n\tsetX: function ( index, x ) {\r\n\r\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetY: function ( index, y ) {\r\n\r\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetZ: function ( index, z ) {\r\n\r\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetW: function ( index, w ) {\r\n\r\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tgetX: function ( index ) {\r\n\r\n\t\treturn this.data.array[ index * this.data.stride + this.offset ];\r\n\r\n\t},\r\n\r\n\tgetY: function ( index ) {\r\n\r\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\r\n\r\n\t},\r\n\r\n\tgetZ: function ( index ) {\r\n\r\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\r\n\r\n\t},\r\n\r\n\tgetW: function ( index ) {\r\n\r\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\r\n\r\n\t},\r\n\r\n\tsetXY: function ( index, x, y ) {\r\n\r\n\t\tindex = index * this.data.stride + this.offset;\r\n\r\n\t\tthis.data.array[ index + 0 ] = x;\r\n\t\tthis.data.array[ index + 1 ] = y;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetXYZ: function ( index, x, y, z ) {\r\n\r\n\t\tindex = index * this.data.stride + this.offset;\r\n\r\n\t\tthis.data.array[ index + 0 ] = x;\r\n\t\tthis.data.array[ index + 1 ] = y;\r\n\t\tthis.data.array[ index + 2 ] = z;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetXYZW: function ( index, x, y, z, w ) {\r\n\r\n\t\tindex = index * this.data.stride + this.offset;\r\n\r\n\t\tthis.data.array[ index + 0 ] = x;\r\n\t\tthis.data.array[ index + 1 ] = y;\r\n\t\tthis.data.array[ index + 2 ] = z;\r\n\t\tthis.data.array[ index + 3 ] = w;\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/core/Geometry.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author kile / http://kile.stravaganza.org/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n * @author bhouston / http://clara.io\r\n */\r\n\r\nTHREE.Geometry = function () {\r\n\r\n\tObject.defineProperty( this, 'id', { value: THREE.GeometryIdCount ++ } );\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\tthis.name = '';\r\n\tthis.type = 'Geometry';\r\n\r\n\tthis.vertices = [];\r\n\tthis.colors = [];\r\n\tthis.faces = [];\r\n\tthis.faceVertexUvs = [ [] ];\r\n\r\n\tthis.morphTargets = [];\r\n\tthis.morphNormals = [];\r\n\r\n\tthis.skinWeights = [];\r\n\tthis.skinIndices = [];\r\n\r\n\tthis.lineDistances = [];\r\n\r\n\tthis.boundingBox = null;\r\n\tthis.boundingSphere = null;\r\n\r\n\t// update flags\r\n\r\n\tthis.verticesNeedUpdate = false;\r\n\tthis.elementsNeedUpdate = false;\r\n\tthis.uvsNeedUpdate = false;\r\n\tthis.normalsNeedUpdate = false;\r\n\tthis.colorsNeedUpdate = false;\r\n\tthis.lineDistancesNeedUpdate = false;\r\n\tthis.groupsNeedUpdate = false;\r\n\r\n};\r\n\r\nObject.assign( THREE.Geometry.prototype, THREE.EventDispatcher.prototype, {\r\n\r\n\tapplyMatrix: function ( matrix ) {\r\n\r\n\t\tvar normalMatrix = new THREE.Matrix3().getNormalMatrix( matrix );\r\n\r\n\t\tfor ( var i = 0, il = this.vertices.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar vertex = this.vertices[ i ];\r\n\t\t\tvertex.applyMatrix4( matrix );\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0, il = this.faces.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar face = this.faces[ i ];\r\n\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\r\n\r\n\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.boundingBox !== null ) {\r\n\r\n\t\t\tthis.computeBoundingBox();\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.boundingSphere !== null ) {\r\n\r\n\t\t\tthis.computeBoundingSphere();\r\n\r\n\t\t}\r\n\r\n\t\tthis.verticesNeedUpdate = true;\r\n\t\tthis.normalsNeedUpdate = true;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\trotateX: function () {\r\n\r\n\t\t// rotate geometry around world x-axis\r\n\r\n\t\tvar m1;\r\n\r\n\t\treturn function rotateX( angle ) {\r\n\r\n\t\t\tif ( m1 === undefined ) m1 = new THREE.Matrix4();\r\n\r\n\t\t\tm1.makeRotationX( angle );\r\n\r\n\t\t\tthis.applyMatrix( m1 );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\trotateY: function () {\r\n\r\n\t\t// rotate geometry around world y-axis\r\n\r\n\t\tvar m1;\r\n\r\n\t\treturn function rotateY( angle ) {\r\n\r\n\t\t\tif ( m1 === undefined ) m1 = new THREE.Matrix4();\r\n\r\n\t\t\tm1.makeRotationY( angle );\r\n\r\n\t\t\tthis.applyMatrix( m1 );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\trotateZ: function () {\r\n\r\n\t\t// rotate geometry around world z-axis\r\n\r\n\t\tvar m1;\r\n\r\n\t\treturn function rotateZ( angle ) {\r\n\r\n\t\t\tif ( m1 === undefined ) m1 = new THREE.Matrix4();\r\n\r\n\t\t\tm1.makeRotationZ( angle );\r\n\r\n\t\t\tthis.applyMatrix( m1 );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\ttranslate: function () {\r\n\r\n\t\t// translate geometry\r\n\r\n\t\tvar m1;\r\n\r\n\t\treturn function translate( x, y, z ) {\r\n\r\n\t\t\tif ( m1 === undefined ) m1 = new THREE.Matrix4();\r\n\r\n\t\t\tm1.makeTranslation( x, y, z );\r\n\r\n\t\t\tthis.applyMatrix( m1 );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tscale: function () {\r\n\r\n\t\t// scale geometry\r\n\r\n\t\tvar m1;\r\n\r\n\t\treturn function scale( x, y, z ) {\r\n\r\n\t\t\tif ( m1 === undefined ) m1 = new THREE.Matrix4();\r\n\r\n\t\t\tm1.makeScale( x, y, z );\r\n\r\n\t\t\tthis.applyMatrix( m1 );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tlookAt: function () {\r\n\r\n\t\tvar obj;\r\n\r\n\t\treturn function lookAt( vector ) {\r\n\r\n\t\t\tif ( obj === undefined ) obj = new THREE.Object3D();\r\n\r\n\t\t\tobj.lookAt( vector );\r\n\r\n\t\t\tobj.updateMatrix();\r\n\r\n\t\t\tthis.applyMatrix( obj.matrix );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tfromBufferGeometry: function ( geometry ) {\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar indices = geometry.index !== null ? geometry.index.array : undefined;\r\n\t\tvar attributes = geometry.attributes;\r\n\r\n\t\tvar positions = attributes.position.array;\r\n\t\tvar normals = attributes.normal !== undefined ? attributes.normal.array : undefined;\r\n\t\tvar colors = attributes.color !== undefined ? attributes.color.array : undefined;\r\n\t\tvar uvs = attributes.uv !== undefined ? attributes.uv.array : undefined;\r\n\t\tvar uvs2 = attributes.uv2 !== undefined ? attributes.uv2.array : undefined;\r\n\r\n\t\tif ( uvs2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\r\n\r\n\t\tvar tempNormals = [];\r\n\t\tvar tempUVs = [];\r\n\t\tvar tempUVs2 = [];\r\n\r\n\t\tfor ( var i = 0, j = 0; i < positions.length; i += 3, j += 2 ) {\r\n\r\n\t\t\tscope.vertices.push( new THREE.Vector3( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] ) );\r\n\r\n\t\t\tif ( normals !== undefined ) {\r\n\r\n\t\t\t\ttempNormals.push( new THREE.Vector3( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( colors !== undefined ) {\r\n\r\n\t\t\t\tscope.colors.push( new THREE.Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( uvs !== undefined ) {\r\n\r\n\t\t\t\ttempUVs.push( new THREE.Vector2( uvs[ j ], uvs[ j + 1 ] ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( uvs2 !== undefined ) {\r\n\r\n\t\t\t\ttempUVs2.push( new THREE.Vector2( uvs2[ j ], uvs2[ j + 1 ] ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfunction addFace( a, b, c, materialIndex ) {\r\n\r\n\t\t\tvar vertexNormals = normals !== undefined ? [ tempNormals[ a ].clone(), tempNormals[ b ].clone(), tempNormals[ c ].clone() ] : [];\r\n\t\t\tvar vertexColors = colors !== undefined ? [ scope.colors[ a ].clone(), scope.colors[ b ].clone(), scope.colors[ c ].clone() ] : [];\r\n\r\n\t\t\tvar face = new THREE.Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\r\n\r\n\t\t\tscope.faces.push( face );\r\n\r\n\t\t\tif ( uvs !== undefined ) {\r\n\r\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [ tempUVs[ a ].clone(), tempUVs[ b ].clone(), tempUVs[ c ].clone() ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( uvs2 !== undefined ) {\r\n\r\n\t\t\t\tscope.faceVertexUvs[ 1 ].push( [ tempUVs2[ a ].clone(), tempUVs2[ b ].clone(), tempUVs2[ c ].clone() ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( indices !== undefined ) {\r\n\r\n\t\t\tvar groups = geometry.groups;\r\n\r\n\t\t\tif ( groups.length > 0 ) {\r\n\r\n\t\t\t\tfor ( var i = 0; i < groups.length; i ++ ) {\r\n\r\n\t\t\t\t\tvar group = groups[ i ];\r\n\r\n\t\t\t\t\tvar start = group.start;\r\n\t\t\t\t\tvar count = group.count;\r\n\r\n\t\t\t\t\tfor ( var j = start, jl = start + count; j < jl; j += 3 ) {\r\n\r\n\t\t\t\t\t\taddFace( indices[ j ], indices[ j + 1 ], indices[ j + 2 ], group.materialIndex );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tfor ( var i = 0; i < indices.length; i += 3 ) {\r\n\r\n\t\t\t\t\taddFace( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tfor ( var i = 0; i < positions.length / 3; i += 3 ) {\r\n\r\n\t\t\t\taddFace( i, i + 1, i + 2 );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthis.computeFaceNormals();\r\n\r\n\t\tif ( geometry.boundingBox !== null ) {\r\n\r\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometry.boundingSphere !== null ) {\r\n\r\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcenter: function () {\r\n\r\n\t\tthis.computeBoundingBox();\r\n\r\n\t\tvar offset = this.boundingBox.center().negate();\r\n\r\n\t\tthis.translate( offset.x, offset.y, offset.z );\r\n\r\n\t\treturn offset;\r\n\r\n\t},\r\n\r\n\tnormalize: function () {\r\n\r\n\t\tthis.computeBoundingSphere();\r\n\r\n\t\tvar center = this.boundingSphere.center;\r\n\t\tvar radius = this.boundingSphere.radius;\r\n\r\n\t\tvar s = radius === 0 ? 1 : 1.0 / radius;\r\n\r\n\t\tvar matrix = new THREE.Matrix4();\r\n\t\tmatrix.set(\r\n\t\t\ts, 0, 0, - s * center.x,\r\n\t\t\t0, s, 0, - s * center.y,\r\n\t\t\t0, 0, s, - s * center.z,\r\n\t\t\t0, 0, 0, 1\r\n\t\t);\r\n\r\n\t\tthis.applyMatrix( matrix );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcomputeFaceNormals: function () {\r\n\r\n\t\tvar cb = new THREE.Vector3(), ab = new THREE.Vector3();\r\n\r\n\t\tfor ( var f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\tvar face = this.faces[ f ];\r\n\r\n\t\t\tvar vA = this.vertices[ face.a ];\r\n\t\t\tvar vB = this.vertices[ face.b ];\r\n\t\t\tvar vC = this.vertices[ face.c ];\r\n\r\n\t\t\tcb.subVectors( vC, vB );\r\n\t\t\tab.subVectors( vA, vB );\r\n\t\t\tcb.cross( ab );\r\n\r\n\t\t\tcb.normalize();\r\n\r\n\t\t\tface.normal.copy( cb );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tcomputeVertexNormals: function ( areaWeighted ) {\r\n\r\n\t\tif ( areaWeighted === undefined ) areaWeighted = true;\r\n\r\n\t\tvar v, vl, f, fl, face, vertices;\r\n\r\n\t\tvertices = new Array( this.vertices.length );\r\n\r\n\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\r\n\r\n\t\t\tvertices[ v ] = new THREE.Vector3();\r\n\r\n\t\t}\r\n\r\n\t\tif ( areaWeighted ) {\r\n\r\n\t\t\t// vertex normals weighted by triangle areas\r\n\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\r\n\r\n\t\t\tvar vA, vB, vC;\r\n\t\t\tvar cb = new THREE.Vector3(), ab = new THREE.Vector3();\r\n\r\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\tface = this.faces[ f ];\r\n\r\n\t\t\t\tvA = this.vertices[ face.a ];\r\n\t\t\t\tvB = this.vertices[ face.b ];\r\n\t\t\t\tvC = this.vertices[ face.c ];\r\n\r\n\t\t\t\tcb.subVectors( vC, vB );\r\n\t\t\t\tab.subVectors( vA, vB );\r\n\t\t\t\tcb.cross( ab );\r\n\r\n\t\t\t\tvertices[ face.a ].add( cb );\r\n\t\t\t\tvertices[ face.b ].add( cb );\r\n\t\t\t\tvertices[ face.c ].add( cb );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\tface = this.faces[ f ];\r\n\r\n\t\t\t\tvertices[ face.a ].add( face.normal );\r\n\t\t\t\tvertices[ face.b ].add( face.normal );\r\n\t\t\t\tvertices[ face.c ].add( face.normal );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\r\n\r\n\t\t\tvertices[ v ].normalize();\r\n\r\n\t\t}\r\n\r\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\tface = this.faces[ f ];\r\n\r\n\t\t\tvar vertexNormals = face.vertexNormals;\r\n\r\n\t\t\tif ( vertexNormals.length === 3 ) {\r\n\r\n\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\r\n\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\r\n\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\r\n\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\r\n\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.faces.length > 0 ) {\r\n\r\n\t\t\tthis.normalsNeedUpdate = true;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tcomputeMorphNormals: function () {\r\n\r\n\t\tvar i, il, f, fl, face;\r\n\r\n\t\t// save original normals\r\n\t\t// - create temp variables on first access\r\n\t\t// otherwise just copy (for faster repeated calls)\r\n\r\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\tface = this.faces[ f ];\r\n\r\n\t\t\tif ( ! face.__originalFaceNormal ) {\r\n\r\n\t\t\t\tface.__originalFaceNormal = face.normal.clone();\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tface.__originalFaceNormal.copy( face.normal );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\r\n\r\n\t\t\tfor ( i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\r\n\r\n\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// use temp geometry to compute face and vertex normals for each morph\r\n\r\n\t\tvar tmpGeo = new THREE.Geometry();\r\n\t\ttmpGeo.faces = this.faces;\r\n\r\n\t\tfor ( i = 0, il = this.morphTargets.length; i < il; i ++ ) {\r\n\r\n\t\t\t// create on first access\r\n\r\n\t\t\tif ( ! this.morphNormals[ i ] ) {\r\n\r\n\t\t\t\tthis.morphNormals[ i ] = {};\r\n\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\r\n\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\r\n\r\n\t\t\t\tvar dstNormalsFace = this.morphNormals[ i ].faceNormals;\r\n\t\t\t\tvar dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\r\n\r\n\t\t\t\tvar faceNormal, vertexNormals;\r\n\r\n\t\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\t\tfaceNormal = new THREE.Vector3();\r\n\t\t\t\t\tvertexNormals = { a: new THREE.Vector3(), b: new THREE.Vector3(), c: new THREE.Vector3() };\r\n\r\n\t\t\t\t\tdstNormalsFace.push( faceNormal );\r\n\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar morphNormals = this.morphNormals[ i ];\r\n\r\n\t\t\t// set vertices to morph target\r\n\r\n\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\r\n\r\n\t\t\t// compute morph normals\r\n\r\n\t\t\ttmpGeo.computeFaceNormals();\r\n\t\t\ttmpGeo.computeVertexNormals();\r\n\r\n\t\t\t// store morph normals\r\n\r\n\t\t\tvar faceNormal, vertexNormals;\r\n\r\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\tface = this.faces[ f ];\r\n\r\n\t\t\t\tfaceNormal = morphNormals.faceNormals[ f ];\r\n\t\t\t\tvertexNormals = morphNormals.vertexNormals[ f ];\r\n\r\n\t\t\t\tfaceNormal.copy( face.normal );\r\n\r\n\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\r\n\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\r\n\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// restore original normals\r\n\r\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\tface = this.faces[ f ];\r\n\r\n\t\t\tface.normal = face.__originalFaceNormal;\r\n\t\t\tface.vertexNormals = face.__originalVertexNormals;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tcomputeTangents: function () {\r\n\r\n\t\tconsole.warn( 'THREE.Geometry: .computeTangents() has been removed.' );\r\n\r\n\t},\r\n\r\n\tcomputeLineDistances: function () {\r\n\r\n\t\tvar d = 0;\r\n\t\tvar vertices = this.vertices;\r\n\r\n\t\tfor ( var i = 0, il = vertices.length; i < il; i ++ ) {\r\n\r\n\t\t\tif ( i > 0 ) {\r\n\r\n\t\t\t\td += vertices[ i ].distanceTo( vertices[ i - 1 ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.lineDistances[ i ] = d;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tcomputeBoundingBox: function () {\r\n\r\n\t\tif ( this.boundingBox === null ) {\r\n\r\n\t\t\tthis.boundingBox = new THREE.Box3();\r\n\r\n\t\t}\r\n\r\n\t\tthis.boundingBox.setFromPoints( this.vertices );\r\n\r\n\t},\r\n\r\n\tcomputeBoundingSphere: function () {\r\n\r\n\t\tif ( this.boundingSphere === null ) {\r\n\r\n\t\t\tthis.boundingSphere = new THREE.Sphere();\r\n\r\n\t\t}\r\n\r\n\t\tthis.boundingSphere.setFromPoints( this.vertices );\r\n\r\n\t},\r\n\r\n\tmerge: function ( geometry, matrix, materialIndexOffset ) {\r\n\r\n\t\tif ( geometry instanceof THREE.Geometry === false ) {\r\n\r\n\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tvar normalMatrix,\r\n\t\tvertexOffset = this.vertices.length,\r\n\t\tvertices1 = this.vertices,\r\n\t\tvertices2 = geometry.vertices,\r\n\t\tfaces1 = this.faces,\r\n\t\tfaces2 = geometry.faces,\r\n\t\tuvs1 = this.faceVertexUvs[ 0 ],\r\n\t\tuvs2 = geometry.faceVertexUvs[ 0 ];\r\n\r\n\t\tif ( materialIndexOffset === undefined ) materialIndexOffset = 0;\r\n\r\n\t\tif ( matrix !== undefined ) {\r\n\r\n\t\t\tnormalMatrix = new THREE.Matrix3().getNormalMatrix( matrix );\r\n\r\n\t\t}\r\n\r\n\t\t// vertices\r\n\r\n\t\tfor ( var i = 0, il = vertices2.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar vertex = vertices2[ i ];\r\n\r\n\t\t\tvar vertexCopy = vertex.clone();\r\n\r\n\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\r\n\r\n\t\t\tvertices1.push( vertexCopy );\r\n\r\n\t\t}\r\n\r\n\t\t// faces\r\n\r\n\t\tfor ( i = 0, il = faces2.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar face = faces2[ i ], faceCopy, normal, color,\r\n\t\t\tfaceVertexNormals = face.vertexNormals,\r\n\t\t\tfaceVertexColors = face.vertexColors;\r\n\r\n\t\t\tfaceCopy = new THREE.Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\r\n\t\t\tfaceCopy.normal.copy( face.normal );\r\n\r\n\t\t\tif ( normalMatrix !== undefined ) {\r\n\r\n\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\tnormal = faceVertexNormals[ j ].clone();\r\n\r\n\t\t\t\tif ( normalMatrix !== undefined ) {\r\n\r\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfaceCopy.vertexNormals.push( normal );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfaceCopy.color.copy( face.color );\r\n\r\n\t\t\tfor ( var j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\tcolor = faceVertexColors[ j ];\r\n\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\r\n\r\n\t\t\tfaces1.push( faceCopy );\r\n\r\n\t\t}\r\n\r\n\t\t// uvs\r\n\r\n\t\tfor ( i = 0, il = uvs2.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar uv = uvs2[ i ], uvCopy = [];\r\n\r\n\t\t\tif ( uv === undefined ) {\r\n\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( var j = 0, jl = uv.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\tuvCopy.push( uv[ j ].clone() );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tuvs1.push( uvCopy );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tmergeMesh: function ( mesh ) {\r\n\r\n\t\tif ( mesh instanceof THREE.Mesh === false ) {\r\n\r\n\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tmesh.matrixAutoUpdate && mesh.updateMatrix();\r\n\r\n\t\tthis.merge( mesh.geometry, mesh.matrix );\r\n\r\n\t},\r\n\r\n\t/*\r\n\t * Checks for duplicate vertices with hashmap.\r\n\t * Duplicated vertices are removed\r\n\t * and faces' vertices are updated.\r\n\t */\r\n\r\n\tmergeVertices: function () {\r\n\r\n\t\tvar verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\r\n\t\tvar unique = [], changes = [];\r\n\r\n\t\tvar v, key;\r\n\t\tvar precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001\r\n\t\tvar precision = Math.pow( 10, precisionPoints );\r\n\t\tvar i, il, face;\r\n\t\tvar indices, j, jl;\r\n\r\n\t\tfor ( i = 0, il = this.vertices.length; i < il; i ++ ) {\r\n\r\n\t\t\tv = this.vertices[ i ];\r\n\t\t\tkey = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\r\n\r\n\t\t\tif ( verticesMap[ key ] === undefined ) {\r\n\r\n\t\t\t\tverticesMap[ key ] = i;\r\n\t\t\t\tunique.push( this.vertices[ i ] );\r\n\t\t\t\tchanges[ i ] = unique.length - 1;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\r\n\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\r\n\t\t// if faces are completely degenerate after merging vertices, we\r\n\t\t// have to remove them from the geometry.\r\n\t\tvar faceIndicesToRemove = [];\r\n\r\n\t\tfor ( i = 0, il = this.faces.length; i < il; i ++ ) {\r\n\r\n\t\t\tface = this.faces[ i ];\r\n\r\n\t\t\tface.a = changes[ face.a ];\r\n\t\t\tface.b = changes[ face.b ];\r\n\t\t\tface.c = changes[ face.c ];\r\n\r\n\t\t\tindices = [ face.a, face.b, face.c ];\r\n\r\n\t\t\tvar dupIndex = - 1;\r\n\r\n\t\t\t// if any duplicate vertices are found in a Face3\r\n\t\t\t// we have to remove the face as nothing can be saved\r\n\t\t\tfor ( var n = 0; n < 3; n ++ ) {\r\n\r\n\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\r\n\r\n\t\t\t\t\tdupIndex = n;\r\n\t\t\t\t\tfaceIndicesToRemove.push( i );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfor ( i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\r\n\r\n\t\t\tvar idx = faceIndicesToRemove[ i ];\r\n\r\n\t\t\tthis.faces.splice( idx, 1 );\r\n\r\n\t\t\tfor ( j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// Use unique set of vertices\r\n\r\n\t\tvar diff = this.vertices.length - unique.length;\r\n\t\tthis.vertices = unique;\r\n\t\treturn diff;\r\n\r\n\t},\r\n\r\n\tsortFacesByMaterialIndex: function () {\r\n\r\n\t\tvar faces = this.faces;\r\n\t\tvar length = faces.length;\r\n\r\n\t\t// tag faces\r\n\r\n\t\tfor ( var i = 0; i < length; i ++ ) {\r\n\r\n\t\t\tfaces[ i ]._id = i;\r\n\r\n\t\t}\r\n\r\n\t\t// sort faces\r\n\r\n\t\tfunction materialIndexSort( a, b ) {\r\n\r\n\t\t\treturn a.materialIndex - b.materialIndex;\r\n\r\n\t\t}\r\n\r\n\t\tfaces.sort( materialIndexSort );\r\n\r\n\t\t// sort uvs\r\n\r\n\t\tvar uvs1 = this.faceVertexUvs[ 0 ];\r\n\t\tvar uvs2 = this.faceVertexUvs[ 1 ];\r\n\r\n\t\tvar newUvs1, newUvs2;\r\n\r\n\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\r\n\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\r\n\r\n\t\tfor ( var i = 0; i < length; i ++ ) {\r\n\r\n\t\t\tvar id = faces[ i ]._id;\r\n\r\n\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\r\n\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\r\n\r\n\t\t}\r\n\r\n\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\r\n\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\r\n\r\n\t},\r\n\r\n\ttoJSON: function () {\r\n\r\n\t\tvar data = {\r\n\t\t\tmetadata: {\r\n\t\t\t\tversion: 4.4,\r\n\t\t\t\ttype: 'Geometry',\r\n\t\t\t\tgenerator: 'Geometry.toJSON'\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// standard Geometry serialization\r\n\r\n\t\tdata.uuid = this.uuid;\r\n\t\tdata.type = this.type;\r\n\t\tif ( this.name !== '' ) data.name = this.name;\r\n\r\n\t\tif ( this.parameters !== undefined ) {\r\n\r\n\t\t\tvar parameters = this.parameters;\r\n\r\n\t\t\tfor ( var key in parameters ) {\r\n\r\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn data;\r\n\r\n\t\t}\r\n\r\n\t\tvar vertices = [];\r\n\r\n\t\tfor ( var i = 0; i < this.vertices.length; i ++ ) {\r\n\r\n\t\t\tvar vertex = this.vertices[ i ];\r\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\r\n\r\n\t\t}\r\n\r\n\t\tvar faces = [];\r\n\t\tvar normals = [];\r\n\t\tvar normalsHash = {};\r\n\t\tvar colors = [];\r\n\t\tvar colorsHash = {};\r\n\t\tvar uvs = [];\r\n\t\tvar uvsHash = {};\r\n\r\n\t\tfor ( var i = 0; i < this.faces.length; i ++ ) {\r\n\r\n\t\t\tvar face = this.faces[ i ];\r\n\r\n\t\t\tvar hasMaterial = true;\r\n\t\t\tvar hasFaceUv = false; // deprecated\r\n\t\t\tvar hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\r\n\t\t\tvar hasFaceNormal = face.normal.length() > 0;\r\n\t\t\tvar hasFaceVertexNormal = face.vertexNormals.length > 0;\r\n\t\t\tvar hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\r\n\t\t\tvar hasFaceVertexColor = face.vertexColors.length > 0;\r\n\r\n\t\t\tvar faceType = 0;\r\n\r\n\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\r\n\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\r\n\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\r\n\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\r\n\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\r\n\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\r\n\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\r\n\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\r\n\r\n\t\t\tfaces.push( faceType );\r\n\t\t\tfaces.push( face.a, face.b, face.c );\r\n\t\t\tfaces.push( face.materialIndex );\r\n\r\n\t\t\tif ( hasFaceVertexUv ) {\r\n\r\n\t\t\t\tvar faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\r\n\r\n\t\t\t\tfaces.push(\r\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\r\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\r\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\r\n\t\t\t\t);\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( hasFaceNormal ) {\r\n\r\n\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( hasFaceVertexNormal ) {\r\n\r\n\t\t\t\tvar vertexNormals = face.vertexNormals;\r\n\r\n\t\t\t\tfaces.push(\r\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\r\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\r\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\r\n\t\t\t\t);\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( hasFaceColor ) {\r\n\r\n\t\t\t\tfaces.push( getColorIndex( face.color ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( hasFaceVertexColor ) {\r\n\r\n\t\t\t\tvar vertexColors = face.vertexColors;\r\n\r\n\t\t\t\tfaces.push(\r\n\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\r\n\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\r\n\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\r\n\t\t\t\t);\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfunction setBit( value, position, enabled ) {\r\n\r\n\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\r\n\r\n\t\t}\r\n\r\n\t\tfunction getNormalIndex( normal ) {\r\n\r\n\t\t\tvar hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\r\n\r\n\t\t\tif ( normalsHash[ hash ] !== undefined ) {\r\n\r\n\t\t\t\treturn normalsHash[ hash ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tnormalsHash[ hash ] = normals.length / 3;\r\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\r\n\r\n\t\t\treturn normalsHash[ hash ];\r\n\r\n\t\t}\r\n\r\n\t\tfunction getColorIndex( color ) {\r\n\r\n\t\t\tvar hash = color.r.toString() + color.g.toString() + color.b.toString();\r\n\r\n\t\t\tif ( colorsHash[ hash ] !== undefined ) {\r\n\r\n\t\t\t\treturn colorsHash[ hash ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tcolorsHash[ hash ] = colors.length;\r\n\t\t\tcolors.push( color.getHex() );\r\n\r\n\t\t\treturn colorsHash[ hash ];\r\n\r\n\t\t}\r\n\r\n\t\tfunction getUvIndex( uv ) {\r\n\r\n\t\t\tvar hash = uv.x.toString() + uv.y.toString();\r\n\r\n\t\t\tif ( uvsHash[ hash ] !== undefined ) {\r\n\r\n\t\t\t\treturn uvsHash[ hash ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tuvsHash[ hash ] = uvs.length / 2;\r\n\t\t\tuvs.push( uv.x, uv.y );\r\n\r\n\t\t\treturn uvsHash[ hash ];\r\n\r\n\t\t}\r\n\r\n\t\tdata.data = {};\r\n\r\n\t\tdata.data.vertices = vertices;\r\n\t\tdata.data.normals = normals;\r\n\t\tif ( colors.length > 0 ) data.data.colors = colors;\r\n\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\r\n\t\tdata.data.faces = faces;\r\n\r\n\t\treturn data;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\t/*\r\n\t\t// Handle primitives\r\n\r\n\t\tvar parameters = this.parameters;\r\n\r\n\t\tif ( parameters !== undefined ) {\r\n\r\n\t\t\tvar values = [];\r\n\r\n\t\t\tfor ( var key in parameters ) {\r\n\r\n\t\t\t\tvalues.push( parameters[ key ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar geometry = Object.create( this.constructor.prototype );\r\n\t\t\tthis.constructor.apply( geometry, values );\r\n\t\t\treturn geometry;\r\n\r\n\t\t}\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\t\t*/\r\n\r\n\t\treturn new THREE.Geometry().copy( this );\r\n\r\n\t},\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tthis.vertices = [];\r\n\t\tthis.faces = [];\r\n\t\tthis.faceVertexUvs = [ [] ];\r\n\r\n\t\tvar vertices = source.vertices;\r\n\r\n\t\tfor ( var i = 0, il = vertices.length; i < il; i ++ ) {\r\n\r\n\t\t\tthis.vertices.push( vertices[ i ].clone() );\r\n\r\n\t\t}\r\n\r\n\t\tvar faces = source.faces;\r\n\r\n\t\tfor ( var i = 0, il = faces.length; i < il; i ++ ) {\r\n\r\n\t\t\tthis.faces.push( faces[ i ].clone() );\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar faceVertexUvs = source.faceVertexUvs[ i ];\r\n\r\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\r\n\r\n\t\t\t\tthis.faceVertexUvs[ i ] = [];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( var j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\tvar uvs = faceVertexUvs[ j ], uvsCopy = [];\r\n\r\n\t\t\t\tfor ( var k = 0, kl = uvs.length; k < kl; k ++ ) {\r\n\r\n\t\t\t\t\tvar uv = uvs[ k ];\r\n\r\n\t\t\t\t\tuvsCopy.push( uv.clone() );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdispose: function () {\r\n\r\n\t\tthis.dispatchEvent( { type: 'dispose' } );\r\n\r\n\t}\r\n\r\n} );\r\n\r\nTHREE.GeometryIdCount = 0;\r\n\r\n// File:src/core/DirectGeometry.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.DirectGeometry = function () {\r\n\r\n\tObject.defineProperty( this, 'id', { value: THREE.GeometryIdCount ++ } );\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\tthis.name = '';\r\n\tthis.type = 'DirectGeometry';\r\n\r\n\tthis.indices = [];\r\n\tthis.vertices = [];\r\n\tthis.normals = [];\r\n\tthis.colors = [];\r\n\tthis.uvs = [];\r\n\tthis.uvs2 = [];\r\n\r\n\tthis.groups = [];\r\n\r\n\tthis.morphTargets = {};\r\n\r\n\tthis.skinWeights = [];\r\n\tthis.skinIndices = [];\r\n\r\n\t// this.lineDistances = [];\r\n\r\n\tthis.boundingBox = null;\r\n\tthis.boundingSphere = null;\r\n\r\n\t// update flags\r\n\r\n\tthis.verticesNeedUpdate = false;\r\n\tthis.normalsNeedUpdate = false;\r\n\tthis.colorsNeedUpdate = false;\r\n\tthis.uvsNeedUpdate = false;\r\n\tthis.groupsNeedUpdate = false;\r\n\r\n};\r\n\r\nObject.assign( THREE.DirectGeometry.prototype, THREE.EventDispatcher.prototype, {\r\n\r\n\tcomputeBoundingBox: THREE.Geometry.prototype.computeBoundingBox,\r\n\tcomputeBoundingSphere: THREE.Geometry.prototype.computeBoundingSphere,\r\n\r\n\tcomputeFaceNormals: function () {\r\n\r\n\t\tconsole.warn( 'THREE.DirectGeometry: computeFaceNormals() is not a method of this type of geometry.' );\r\n\r\n\t},\r\n\r\n\tcomputeVertexNormals: function () {\r\n\r\n\t\tconsole.warn( 'THREE.DirectGeometry: computeVertexNormals() is not a method of this type of geometry.' );\r\n\r\n\t},\r\n\r\n\tcomputeGroups: function ( geometry ) {\r\n\r\n\t\tvar group;\r\n\t\tvar groups = [];\r\n\t\tvar materialIndex;\r\n\r\n\t\tvar faces = geometry.faces;\r\n\r\n\t\tfor ( var i = 0; i < faces.length; i ++ ) {\r\n\r\n\t\t\tvar face = faces[ i ];\r\n\r\n\t\t\t// materials\r\n\r\n\t\t\tif ( face.materialIndex !== materialIndex ) {\r\n\r\n\t\t\t\tmaterialIndex = face.materialIndex;\r\n\r\n\t\t\t\tif ( group !== undefined ) {\r\n\r\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\r\n\t\t\t\t\tgroups.push( group );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgroup = {\r\n\t\t\t\t\tstart: i * 3,\r\n\t\t\t\t\tmaterialIndex: materialIndex\r\n\t\t\t\t};\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( group !== undefined ) {\r\n\r\n\t\t\tgroup.count = ( i * 3 ) - group.start;\r\n\t\t\tgroups.push( group );\r\n\r\n\t\t}\r\n\r\n\t\tthis.groups = groups;\r\n\r\n\t},\r\n\r\n\tfromGeometry: function ( geometry ) {\r\n\r\n\t\tvar faces = geometry.faces;\r\n\t\tvar vertices = geometry.vertices;\r\n\t\tvar faceVertexUvs = geometry.faceVertexUvs;\r\n\r\n\t\tvar hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\r\n\t\tvar hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\r\n\r\n\t\t// morphs\r\n\r\n\t\tvar morphTargets = geometry.morphTargets;\r\n\t\tvar morphTargetsLength = morphTargets.length;\r\n\r\n\t\tvar morphTargetsPosition;\r\n\r\n\t\tif ( morphTargetsLength > 0 ) {\r\n\r\n\t\t\tmorphTargetsPosition = [];\r\n\r\n\t\t\tfor ( var i = 0; i < morphTargetsLength; i ++ ) {\r\n\r\n\t\t\t\tmorphTargetsPosition[ i ] = [];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.morphTargets.position = morphTargetsPosition;\r\n\r\n\t\t}\r\n\r\n\t\tvar morphNormals = geometry.morphNormals;\r\n\t\tvar morphNormalsLength = morphNormals.length;\r\n\r\n\t\tvar morphTargetsNormal;\r\n\r\n\t\tif ( morphNormalsLength > 0 ) {\r\n\r\n\t\t\tmorphTargetsNormal = [];\r\n\r\n\t\t\tfor ( var i = 0; i < morphNormalsLength; i ++ ) {\r\n\r\n\t\t\t\tmorphTargetsNormal[ i ] = [];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.morphTargets.normal = morphTargetsNormal;\r\n\r\n\t\t}\r\n\r\n\t\t// skins\r\n\r\n\t\tvar skinIndices = geometry.skinIndices;\r\n\t\tvar skinWeights = geometry.skinWeights;\r\n\r\n\t\tvar hasSkinIndices = skinIndices.length === vertices.length;\r\n\t\tvar hasSkinWeights = skinWeights.length === vertices.length;\r\n\r\n\t\t//\r\n\r\n\t\tfor ( var i = 0; i < faces.length; i ++ ) {\r\n\r\n\t\t\tvar face = faces[ i ];\r\n\r\n\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\r\n\r\n\t\t\tvar vertexNormals = face.vertexNormals;\r\n\r\n\t\t\tif ( vertexNormals.length === 3 ) {\r\n\r\n\t\t\t\tthis.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tvar normal = face.normal;\r\n\r\n\t\t\t\tthis.normals.push( normal, normal, normal );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar vertexColors = face.vertexColors;\r\n\r\n\t\t\tif ( vertexColors.length === 3 ) {\r\n\r\n\t\t\t\tthis.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tvar color = face.color;\r\n\r\n\t\t\t\tthis.colors.push( color, color, color );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( hasFaceVertexUv === true ) {\r\n\r\n\t\t\t\tvar vertexUvs = faceVertexUvs[ 0 ][ i ];\r\n\r\n\t\t\t\tif ( vertexUvs !== undefined ) {\r\n\r\n\t\t\t\t\tthis.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );\r\n\r\n\t\t\t\t\tthis.uvs.push( new THREE.Vector2(), new THREE.Vector2(), new THREE.Vector2() );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( hasFaceVertexUv2 === true ) {\r\n\r\n\t\t\t\tvar vertexUvs = faceVertexUvs[ 1 ][ i ];\r\n\r\n\t\t\t\tif ( vertexUvs !== undefined ) {\r\n\r\n\t\t\t\t\tthis.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );\r\n\r\n\t\t\t\t\tthis.uvs2.push( new THREE.Vector2(), new THREE.Vector2(), new THREE.Vector2() );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// morphs\r\n\r\n\t\t\tfor ( var j = 0; j < morphTargetsLength; j ++ ) {\r\n\r\n\t\t\t\tvar morphTarget = morphTargets[ j ].vertices;\r\n\r\n\t\t\t\tmorphTargetsPosition[ j ].push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( var j = 0; j < morphNormalsLength; j ++ ) {\r\n\r\n\t\t\t\tvar morphNormal = morphNormals[ j ].vertexNormals[ i ];\r\n\r\n\t\t\t\tmorphTargetsNormal[ j ].push( morphNormal.a, morphNormal.b, morphNormal.c );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// skins\r\n\r\n\t\t\tif ( hasSkinIndices ) {\r\n\r\n\t\t\t\tthis.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( hasSkinWeights ) {\r\n\r\n\t\t\t\tthis.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthis.computeGroups( geometry );\r\n\r\n\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\r\n\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\r\n\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\r\n\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\r\n\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdispose: function () {\r\n\r\n\t\tthis.dispatchEvent( { type: 'dispose' } );\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/core/BufferGeometry.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.BufferGeometry = function () {\r\n\r\n\tObject.defineProperty( this, 'id', { value: THREE.GeometryIdCount ++ } );\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\tthis.name = '';\r\n\tthis.type = 'BufferGeometry';\r\n\r\n\tthis.index = null;\r\n\tthis.attributes = {};\r\n\r\n\tthis.morphAttributes = {};\r\n\r\n\tthis.groups = [];\r\n\r\n\tthis.boundingBox = null;\r\n\tthis.boundingSphere = null;\r\n\r\n\tthis.drawRange = { start: 0, count: Infinity };\r\n\r\n};\r\n\r\nObject.assign( THREE.BufferGeometry.prototype, THREE.EventDispatcher.prototype, {\r\n\r\n\tgetIndex: function () {\r\n\r\n\t\treturn this.index;\r\n\r\n\t},\r\n\r\n\tsetIndex: function ( index ) {\r\n\r\n\t\tthis.index = index;\r\n\r\n\t},\r\n\r\n\taddAttribute: function ( name, attribute ) {\r\n\r\n\t\tif ( attribute instanceof THREE.BufferAttribute === false && attribute instanceof THREE.InterleavedBufferAttribute === false ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\r\n\r\n\t\t\tthis.addAttribute( name, new THREE.BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\r\n\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tif ( name === 'index' ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\r\n\t\t\tthis.setIndex( attribute );\r\n\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tthis.attributes[ name ] = attribute;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tgetAttribute: function ( name ) {\r\n\r\n\t\treturn this.attributes[ name ];\r\n\r\n\t},\r\n\r\n\tremoveAttribute: function ( name ) {\r\n\r\n\t\tdelete this.attributes[ name ];\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddGroup: function ( start, count, materialIndex ) {\r\n\r\n\t\tthis.groups.push( {\r\n\r\n\t\t\tstart: start,\r\n\t\t\tcount: count,\r\n\t\t\tmaterialIndex: materialIndex !== undefined ? materialIndex : 0\r\n\r\n\t\t} );\r\n\r\n\t},\r\n\r\n\tclearGroups: function () {\r\n\r\n\t\tthis.groups = [];\r\n\r\n\t},\r\n\r\n\tsetDrawRange: function ( start, count ) {\r\n\r\n\t\tthis.drawRange.start = start;\r\n\t\tthis.drawRange.count = count;\r\n\r\n\t},\r\n\r\n\tapplyMatrix: function ( matrix ) {\r\n\r\n\t\tvar position = this.attributes.position;\r\n\r\n\t\tif ( position !== undefined ) {\r\n\r\n\t\t\tmatrix.applyToVector3Array( position.array );\r\n\t\t\tposition.needsUpdate = true;\r\n\r\n\t\t}\r\n\r\n\t\tvar normal = this.attributes.normal;\r\n\r\n\t\tif ( normal !== undefined ) {\r\n\r\n\t\t\tvar normalMatrix = new THREE.Matrix3().getNormalMatrix( matrix );\r\n\r\n\t\t\tnormalMatrix.applyToVector3Array( normal.array );\r\n\t\t\tnormal.needsUpdate = true;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.boundingBox !== null ) {\r\n\r\n\t\t\tthis.computeBoundingBox();\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.boundingSphere !== null ) {\r\n\r\n\t\t\tthis.computeBoundingSphere();\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\trotateX: function () {\r\n\r\n\t\t// rotate geometry around world x-axis\r\n\r\n\t\tvar m1;\r\n\r\n\t\treturn function rotateX( angle ) {\r\n\r\n\t\t\tif ( m1 === undefined ) m1 = new THREE.Matrix4();\r\n\r\n\t\t\tm1.makeRotationX( angle );\r\n\r\n\t\t\tthis.applyMatrix( m1 );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\trotateY: function () {\r\n\r\n\t\t// rotate geometry around world y-axis\r\n\r\n\t\tvar m1;\r\n\r\n\t\treturn function rotateY( angle ) {\r\n\r\n\t\t\tif ( m1 === undefined ) m1 = new THREE.Matrix4();\r\n\r\n\t\t\tm1.makeRotationY( angle );\r\n\r\n\t\t\tthis.applyMatrix( m1 );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\trotateZ: function () {\r\n\r\n\t\t// rotate geometry around world z-axis\r\n\r\n\t\tvar m1;\r\n\r\n\t\treturn function rotateZ( angle ) {\r\n\r\n\t\t\tif ( m1 === undefined ) m1 = new THREE.Matrix4();\r\n\r\n\t\t\tm1.makeRotationZ( angle );\r\n\r\n\t\t\tthis.applyMatrix( m1 );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\ttranslate: function () {\r\n\r\n\t\t// translate geometry\r\n\r\n\t\tvar m1;\r\n\r\n\t\treturn function translate( x, y, z ) {\r\n\r\n\t\t\tif ( m1 === undefined ) m1 = new THREE.Matrix4();\r\n\r\n\t\t\tm1.makeTranslation( x, y, z );\r\n\r\n\t\t\tthis.applyMatrix( m1 );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tscale: function () {\r\n\r\n\t\t// scale geometry\r\n\r\n\t\tvar m1;\r\n\r\n\t\treturn function scale( x, y, z ) {\r\n\r\n\t\t\tif ( m1 === undefined ) m1 = new THREE.Matrix4();\r\n\r\n\t\t\tm1.makeScale( x, y, z );\r\n\r\n\t\t\tthis.applyMatrix( m1 );\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tlookAt: function () {\r\n\r\n\t\tvar obj;\r\n\r\n\t\treturn function lookAt( vector ) {\r\n\r\n\t\t\tif ( obj === undefined ) obj = new THREE.Object3D();\r\n\r\n\t\t\tobj.lookAt( vector );\r\n\r\n\t\t\tobj.updateMatrix();\r\n\r\n\t\t\tthis.applyMatrix( obj.matrix );\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tcenter: function () {\r\n\r\n\t\tthis.computeBoundingBox();\r\n\r\n\t\tvar offset = this.boundingBox.center().negate();\r\n\r\n\t\tthis.translate( offset.x, offset.y, offset.z );\r\n\r\n\t\treturn offset;\r\n\r\n\t},\r\n\r\n\tsetFromObject: function ( object ) {\r\n\r\n\t\t// console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this );\r\n\r\n\t\tvar geometry = object.geometry;\r\n\r\n\t\tif ( object instanceof THREE.Points || object instanceof THREE.Line ) {\r\n\r\n\t\t\tvar positions = new THREE.Float32Attribute( geometry.vertices.length * 3, 3 );\r\n\t\t\tvar colors = new THREE.Float32Attribute( geometry.colors.length * 3, 3 );\r\n\r\n\t\t\tthis.addAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\r\n\t\t\tthis.addAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\r\n\r\n\t\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\r\n\r\n\t\t\t\tvar lineDistances = new THREE.Float32Attribute( geometry.lineDistances.length, 1 );\r\n\r\n\t\t\t\tthis.addAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( geometry.boundingSphere !== null ) {\r\n\r\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( geometry.boundingBox !== null ) {\r\n\r\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( object instanceof THREE.Mesh ) {\r\n\r\n\t\t\tif ( geometry instanceof THREE.Geometry ) {\r\n\r\n\t\t\t\tthis.fromGeometry( geometry );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tupdateFromObject: function ( object ) {\r\n\r\n\t\tvar geometry = object.geometry;\r\n\r\n\t\tif ( object instanceof THREE.Mesh ) {\r\n\r\n\t\t\tvar direct = geometry.__directGeometry;\r\n\r\n\t\t\tif ( direct === undefined ) {\r\n\r\n\t\t\t\treturn this.fromGeometry( geometry );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tdirect.verticesNeedUpdate = geometry.verticesNeedUpdate;\r\n\t\t\tdirect.normalsNeedUpdate = geometry.normalsNeedUpdate;\r\n\t\t\tdirect.colorsNeedUpdate = geometry.colorsNeedUpdate;\r\n\t\t\tdirect.uvsNeedUpdate = geometry.uvsNeedUpdate;\r\n\t\t\tdirect.groupsNeedUpdate = geometry.groupsNeedUpdate;\r\n\r\n\t\t\tgeometry.verticesNeedUpdate = false;\r\n\t\t\tgeometry.normalsNeedUpdate = false;\r\n\t\t\tgeometry.colorsNeedUpdate = false;\r\n\t\t\tgeometry.uvsNeedUpdate = false;\r\n\t\t\tgeometry.groupsNeedUpdate = false;\r\n\r\n\t\t\tgeometry = direct;\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometry.verticesNeedUpdate === true ) {\r\n\r\n\t\t\tvar attribute = this.attributes.position;\r\n\r\n\t\t\tif ( attribute !== undefined ) {\r\n\r\n\t\t\t\tattribute.copyVector3sArray( geometry.vertices );\r\n\t\t\t\tattribute.needsUpdate = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgeometry.verticesNeedUpdate = false;\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometry.normalsNeedUpdate === true ) {\r\n\r\n\t\t\tvar attribute = this.attributes.normal;\r\n\r\n\t\t\tif ( attribute !== undefined ) {\r\n\r\n\t\t\t\tattribute.copyVector3sArray( geometry.normals );\r\n\t\t\t\tattribute.needsUpdate = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgeometry.normalsNeedUpdate = false;\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometry.colorsNeedUpdate === true ) {\r\n\r\n\t\t\tvar attribute = this.attributes.color;\r\n\r\n\t\t\tif ( attribute !== undefined ) {\r\n\r\n\t\t\t\tattribute.copyColorsArray( geometry.colors );\r\n\t\t\t\tattribute.needsUpdate = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgeometry.colorsNeedUpdate = false;\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometry.uvsNeedUpdate ) {\r\n\r\n\t\t\tvar attribute = this.attributes.uv;\r\n\r\n\t\t\tif ( attribute !== undefined ) {\r\n\r\n\t\t\t\tattribute.copyVector2sArray( geometry.uvs );\r\n\t\t\t\tattribute.needsUpdate = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgeometry.uvsNeedUpdate = false;\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometry.lineDistancesNeedUpdate ) {\r\n\r\n\t\t\tvar attribute = this.attributes.lineDistance;\r\n\r\n\t\t\tif ( attribute !== undefined ) {\r\n\r\n\t\t\t\tattribute.copyArray( geometry.lineDistances );\r\n\t\t\t\tattribute.needsUpdate = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgeometry.lineDistancesNeedUpdate = false;\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometry.groupsNeedUpdate ) {\r\n\r\n\t\t\tgeometry.computeGroups( object.geometry );\r\n\t\t\tthis.groups = geometry.groups;\r\n\r\n\t\t\tgeometry.groupsNeedUpdate = false;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tfromGeometry: function ( geometry ) {\r\n\r\n\t\tgeometry.__directGeometry = new THREE.DirectGeometry().fromGeometry( geometry );\r\n\r\n\t\treturn this.fromDirectGeometry( geometry.__directGeometry );\r\n\r\n\t},\r\n\r\n\tfromDirectGeometry: function ( geometry ) {\r\n\r\n\t\tvar positions = new Float32Array( geometry.vertices.length * 3 );\r\n\t\tthis.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\r\n\r\n\t\tif ( geometry.normals.length > 0 ) {\r\n\r\n\t\t\tvar normals = new Float32Array( geometry.normals.length * 3 );\r\n\t\t\tthis.addAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometry.colors.length > 0 ) {\r\n\r\n\t\t\tvar colors = new Float32Array( geometry.colors.length * 3 );\r\n\t\t\tthis.addAttribute( 'color', new THREE.BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometry.uvs.length > 0 ) {\r\n\r\n\t\t\tvar uvs = new Float32Array( geometry.uvs.length * 2 );\r\n\t\t\tthis.addAttribute( 'uv', new THREE.BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometry.uvs2.length > 0 ) {\r\n\r\n\t\t\tvar uvs2 = new Float32Array( geometry.uvs2.length * 2 );\r\n\t\t\tthis.addAttribute( 'uv2', new THREE.BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometry.indices.length > 0 ) {\r\n\r\n\t\t\tvar TypeArray = geometry.vertices.length > 65535 ? Uint32Array : Uint16Array;\r\n\t\t\tvar indices = new TypeArray( geometry.indices.length * 3 );\r\n\t\t\tthis.setIndex( new THREE.BufferAttribute( indices, 1 ).copyIndicesArray( geometry.indices ) );\r\n\r\n\t\t}\r\n\r\n\t\t// groups\r\n\r\n\t\tthis.groups = geometry.groups;\r\n\r\n\t\t// morphs\r\n\r\n\t\tfor ( var name in geometry.morphTargets ) {\r\n\r\n\t\t\tvar array = [];\r\n\t\t\tvar morphTargets = geometry.morphTargets[ name ];\r\n\r\n\t\t\tfor ( var i = 0, l = morphTargets.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tvar morphTarget = morphTargets[ i ];\r\n\r\n\t\t\t\tvar attribute = new THREE.Float32Attribute( morphTarget.length * 3, 3 );\r\n\r\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.morphAttributes[ name ] = array;\r\n\r\n\t\t}\r\n\r\n\t\t// skinning\r\n\r\n\t\tif ( geometry.skinIndices.length > 0 ) {\r\n\r\n\t\t\tvar skinIndices = new THREE.Float32Attribute( geometry.skinIndices.length * 4, 4 );\r\n\t\t\tthis.addAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometry.skinWeights.length > 0 ) {\r\n\r\n\t\t\tvar skinWeights = new THREE.Float32Attribute( geometry.skinWeights.length * 4, 4 );\r\n\t\t\tthis.addAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );\r\n\r\n\t\t}\r\n\r\n\t\t//\r\n\r\n\t\tif ( geometry.boundingSphere !== null ) {\r\n\r\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometry.boundingBox !== null ) {\r\n\r\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcomputeBoundingBox: function () {\r\n\r\n\t\tif ( this.boundingBox === null ) {\r\n\r\n\t\t\tthis.boundingBox = new THREE.Box3();\r\n\r\n\t\t}\r\n\r\n\t\tvar positions = this.attributes.position.array;\r\n\r\n\t\tif ( positions !== undefined ) {\r\n\r\n\t\t\tthis.boundingBox.setFromArray( positions );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.boundingBox.makeEmpty();\r\n\r\n\t\t}\r\n\r\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\r\n\r\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tcomputeBoundingSphere: function () {\r\n\r\n\t\tvar box = new THREE.Box3();\r\n\t\tvar vector = new THREE.Vector3();\r\n\r\n\t\treturn function computeBoundingSphere() {\r\n\r\n\t\t\tif ( this.boundingSphere === null ) {\r\n\r\n\t\t\t\tthis.boundingSphere = new THREE.Sphere();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar positions = this.attributes.position.array;\r\n\r\n\t\t\tif ( positions ) {\r\n\r\n\t\t\t\tvar center = this.boundingSphere.center;\r\n\r\n\t\t\t\tbox.setFromArray( positions );\r\n\t\t\t\tbox.center( center );\r\n\r\n\t\t\t\t// hoping to find a boundingSphere with a radius smaller than the\r\n\t\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\r\n\r\n\t\t\t\tvar maxRadiusSq = 0;\r\n\r\n\t\t\t\tfor ( var i = 0, il = positions.length; i < il; i += 3 ) {\r\n\r\n\t\t\t\t\tvector.fromArray( positions, i );\r\n\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\r\n\r\n\t\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\r\n\r\n\t\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tcomputeFaceNormals: function () {\r\n\r\n\t\t// backwards compatibility\r\n\r\n\t},\r\n\r\n\tcomputeVertexNormals: function () {\r\n\r\n\t\tvar index = this.index;\r\n\t\tvar attributes = this.attributes;\r\n\t\tvar groups = this.groups;\r\n\r\n\t\tif ( attributes.position ) {\r\n\r\n\t\t\tvar positions = attributes.position.array;\r\n\r\n\t\t\tif ( attributes.normal === undefined ) {\r\n\r\n\t\t\t\tthis.addAttribute( 'normal', new THREE.BufferAttribute( new Float32Array( positions.length ), 3 ) );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// reset existing normals to zero\r\n\r\n\t\t\t\tvar array = attributes.normal.array;\r\n\r\n\t\t\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\tarray[ i ] = 0;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar normals = attributes.normal.array;\r\n\r\n\t\t\tvar vA, vB, vC,\r\n\r\n\t\t\tpA = new THREE.Vector3(),\r\n\t\t\tpB = new THREE.Vector3(),\r\n\t\t\tpC = new THREE.Vector3(),\r\n\r\n\t\t\tcb = new THREE.Vector3(),\r\n\t\t\tab = new THREE.Vector3();\r\n\r\n\t\t\t// indexed elements\r\n\r\n\t\t\tif ( index ) {\r\n\r\n\t\t\t\tvar indices = index.array;\r\n\r\n\t\t\t\tif ( groups.length === 0 ) {\r\n\r\n\t\t\t\t\tthis.addGroup( 0, indices.length );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor ( var j = 0, jl = groups.length; j < jl; ++ j ) {\r\n\r\n\t\t\t\t\tvar group = groups[ j ];\r\n\r\n\t\t\t\t\tvar start = group.start;\r\n\t\t\t\t\tvar count = group.count;\r\n\r\n\t\t\t\t\tfor ( var i = start, il = start + count; i < il; i += 3 ) {\r\n\r\n\t\t\t\t\t\tvA = indices[ i + 0 ] * 3;\r\n\t\t\t\t\t\tvB = indices[ i + 1 ] * 3;\r\n\t\t\t\t\t\tvC = indices[ i + 2 ] * 3;\r\n\r\n\t\t\t\t\t\tpA.fromArray( positions, vA );\r\n\t\t\t\t\t\tpB.fromArray( positions, vB );\r\n\t\t\t\t\t\tpC.fromArray( positions, vC );\r\n\r\n\t\t\t\t\t\tcb.subVectors( pC, pB );\r\n\t\t\t\t\t\tab.subVectors( pA, pB );\r\n\t\t\t\t\t\tcb.cross( ab );\r\n\r\n\t\t\t\t\t\tnormals[ vA ] += cb.x;\r\n\t\t\t\t\t\tnormals[ vA + 1 ] += cb.y;\r\n\t\t\t\t\t\tnormals[ vA + 2 ] += cb.z;\r\n\r\n\t\t\t\t\t\tnormals[ vB ] += cb.x;\r\n\t\t\t\t\t\tnormals[ vB + 1 ] += cb.y;\r\n\t\t\t\t\t\tnormals[ vB + 2 ] += cb.z;\r\n\r\n\t\t\t\t\t\tnormals[ vC ] += cb.x;\r\n\t\t\t\t\t\tnormals[ vC + 1 ] += cb.y;\r\n\t\t\t\t\t\tnormals[ vC + 2 ] += cb.z;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\r\n\r\n\t\t\t\tfor ( var i = 0, il = positions.length; i < il; i += 9 ) {\r\n\r\n\t\t\t\t\tpA.fromArray( positions, i );\r\n\t\t\t\t\tpB.fromArray( positions, i + 3 );\r\n\t\t\t\t\tpC.fromArray( positions, i + 6 );\r\n\r\n\t\t\t\t\tcb.subVectors( pC, pB );\r\n\t\t\t\t\tab.subVectors( pA, pB );\r\n\t\t\t\t\tcb.cross( ab );\r\n\r\n\t\t\t\t\tnormals[ i ] = cb.x;\r\n\t\t\t\t\tnormals[ i + 1 ] = cb.y;\r\n\t\t\t\t\tnormals[ i + 2 ] = cb.z;\r\n\r\n\t\t\t\t\tnormals[ i + 3 ] = cb.x;\r\n\t\t\t\t\tnormals[ i + 4 ] = cb.y;\r\n\t\t\t\t\tnormals[ i + 5 ] = cb.z;\r\n\r\n\t\t\t\t\tnormals[ i + 6 ] = cb.x;\r\n\t\t\t\t\tnormals[ i + 7 ] = cb.y;\r\n\t\t\t\t\tnormals[ i + 8 ] = cb.z;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.normalizeNormals();\r\n\r\n\t\t\tattributes.normal.needsUpdate = true;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tmerge: function ( geometry, offset ) {\r\n\r\n\t\tif ( geometry instanceof THREE.BufferGeometry === false ) {\r\n\r\n\t\t\tconsole.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tif ( offset === undefined ) offset = 0;\r\n\r\n\t\tvar attributes = this.attributes;\r\n\r\n\t\tfor ( var key in attributes ) {\r\n\r\n\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\r\n\r\n\t\t\tvar attribute1 = attributes[ key ];\r\n\t\t\tvar attributeArray1 = attribute1.array;\r\n\r\n\t\t\tvar attribute2 = geometry.attributes[ key ];\r\n\t\t\tvar attributeArray2 = attribute2.array;\r\n\r\n\t\t\tvar attributeSize = attribute2.itemSize;\r\n\r\n\t\t\tfor ( var i = 0, j = attributeSize * offset; i < attributeArray2.length; i ++, j ++ ) {\r\n\r\n\t\t\t\tattributeArray1[ j ] = attributeArray2[ i ];\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tnormalizeNormals: function () {\r\n\r\n\t\tvar normals = this.attributes.normal.array;\r\n\r\n\t\tvar x, y, z, n;\r\n\r\n\t\tfor ( var i = 0, il = normals.length; i < il; i += 3 ) {\r\n\r\n\t\t\tx = normals[ i ];\r\n\t\t\ty = normals[ i + 1 ];\r\n\t\t\tz = normals[ i + 2 ];\r\n\r\n\t\t\tn = 1.0 / Math.sqrt( x * x + y * y + z * z );\r\n\r\n\t\t\tnormals[ i ] *= n;\r\n\t\t\tnormals[ i + 1 ] *= n;\r\n\t\t\tnormals[ i + 2 ] *= n;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\ttoNonIndexed: function () {\r\n\r\n\t\tif ( this.index === null ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' );\r\n\t\t\treturn this;\r\n\r\n\t\t}\r\n\r\n\t\tvar geometry2 = new THREE.BufferGeometry();\r\n\r\n\t\tvar indices = this.index.array;\r\n\t\tvar attributes = this.attributes;\r\n\r\n\t\tfor ( var name in attributes ) {\r\n\r\n\t\t\tvar attribute = attributes[ name ];\r\n\r\n\t\t\tvar array = attribute.array;\r\n\t\t\tvar itemSize = attribute.itemSize;\r\n\r\n\t\t\tvar array2 = new array.constructor( indices.length * itemSize );\r\n\r\n\t\t\tvar index = 0, index2 = 0;\r\n\r\n\t\t\tfor ( var i = 0, l = indices.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tindex = indices[ i ] * itemSize;\r\n\r\n\t\t\t\tfor ( var j = 0; j < itemSize; j ++ ) {\r\n\r\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgeometry2.addAttribute( name, new THREE.BufferAttribute( array2, itemSize ) );\r\n\r\n\t\t}\r\n\r\n\t\treturn geometry2;\r\n\r\n\t},\r\n\r\n\ttoJSON: function () {\r\n\r\n\t\tvar data = {\r\n\t\t\tmetadata: {\r\n\t\t\t\tversion: 4.4,\r\n\t\t\t\ttype: 'BufferGeometry',\r\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// standard BufferGeometry serialization\r\n\r\n\t\tdata.uuid = this.uuid;\r\n\t\tdata.type = this.type;\r\n\t\tif ( this.name !== '' ) data.name = this.name;\r\n\r\n\t\tif ( this.parameters !== undefined ) {\r\n\r\n\t\t\tvar parameters = this.parameters;\r\n\r\n\t\t\tfor ( var key in parameters ) {\r\n\r\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn data;\r\n\r\n\t\t}\r\n\r\n\t\tdata.data = { attributes: {} };\r\n\r\n\t\tvar index = this.index;\r\n\r\n\t\tif ( index !== null ) {\r\n\r\n\t\t\tvar array = Array.prototype.slice.call( index.array );\r\n\r\n\t\t\tdata.data.index = {\r\n\t\t\t\ttype: index.array.constructor.name,\r\n\t\t\t\tarray: array\r\n\t\t\t};\r\n\r\n\t\t}\r\n\r\n\t\tvar attributes = this.attributes;\r\n\r\n\t\tfor ( var key in attributes ) {\r\n\r\n\t\t\tvar attribute = attributes[ key ];\r\n\r\n\t\t\tvar array = Array.prototype.slice.call( attribute.array );\r\n\r\n\t\t\tdata.data.attributes[ key ] = {\r\n\t\t\t\titemSize: attribute.itemSize,\r\n\t\t\t\ttype: attribute.array.constructor.name,\r\n\t\t\t\tarray: array,\r\n\t\t\t\tnormalized: attribute.normalized\r\n\t\t\t};\r\n\r\n\t\t}\r\n\r\n\t\tvar groups = this.groups;\r\n\r\n\t\tif ( groups.length > 0 ) {\r\n\r\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\r\n\r\n\t\t}\r\n\r\n\t\tvar boundingSphere = this.boundingSphere;\r\n\r\n\t\tif ( boundingSphere !== null ) {\r\n\r\n\t\t\tdata.data.boundingSphere = {\r\n\t\t\t\tcenter: boundingSphere.center.toArray(),\r\n\t\t\t\tradius: boundingSphere.radius\r\n\t\t\t};\r\n\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\t/*\r\n\t\t// Handle primitives\r\n\r\n\t\tvar parameters = this.parameters;\r\n\r\n\t\tif ( parameters !== undefined ) {\r\n\r\n\t\t\tvar values = [];\r\n\r\n\t\t\tfor ( var key in parameters ) {\r\n\r\n\t\t\t\tvalues.push( parameters[ key ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar geometry = Object.create( this.constructor.prototype );\r\n\t\t\tthis.constructor.apply( geometry, values );\r\n\t\t\treturn geometry;\r\n\r\n\t\t}\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\t\t*/\r\n\r\n\t\treturn new THREE.BufferGeometry().copy( this );\r\n\r\n\t},\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tvar index = source.index;\r\n\r\n\t\tif ( index !== null ) {\r\n\r\n\t\t\tthis.setIndex( index.clone() );\r\n\r\n\t\t}\r\n\r\n\t\tvar attributes = source.attributes;\r\n\r\n\t\tfor ( var name in attributes ) {\r\n\r\n\t\t\tvar attribute = attributes[ name ];\r\n\t\t\tthis.addAttribute( name, attribute.clone() );\r\n\r\n\t\t}\r\n\r\n\t\tvar groups = source.groups;\r\n\r\n\t\tfor ( var i = 0, l = groups.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar group = groups[ i ];\r\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdispose: function () {\r\n\r\n\t\tthis.dispatchEvent( { type: 'dispose' } );\r\n\r\n\t}\r\n\r\n} );\r\n\r\nTHREE.BufferGeometry.MaxIndex = 65535;\r\n\r\n// File:src/core/InstancedBufferGeometry.js\r\n\r\n/**\r\n * @author benaadams / https://twitter.com/ben_a_adams\r\n */\r\n\r\nTHREE.InstancedBufferGeometry = function () {\r\n\r\n\tTHREE.BufferGeometry.call( this );\r\n\r\n\tthis.type = 'InstancedBufferGeometry';\r\n\tthis.maxInstancedCount = undefined;\r\n\r\n};\r\n\r\nTHREE.InstancedBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype );\r\nTHREE.InstancedBufferGeometry.prototype.constructor = THREE.InstancedBufferGeometry;\r\n\r\nTHREE.InstancedBufferGeometry.prototype.addGroup = function ( start, count, instances ) {\r\n\r\n\tthis.groups.push( {\r\n\r\n\t\tstart: start,\r\n\t\tcount: count,\r\n\t\tinstances: instances\r\n\r\n\t} );\r\n\r\n};\r\n\r\nTHREE.InstancedBufferGeometry.prototype.copy = function ( source ) {\r\n\r\n\tvar index = source.index;\r\n\r\n\tif ( index !== null ) {\r\n\r\n\t\tthis.setIndex( index.clone() );\r\n\r\n\t}\r\n\r\n\tvar attributes = source.attributes;\r\n\r\n\tfor ( var name in attributes ) {\r\n\r\n\t\tvar attribute = attributes[ name ];\r\n\t\tthis.addAttribute( name, attribute.clone() );\r\n\r\n\t}\r\n\r\n\tvar groups = source.groups;\r\n\r\n\tfor ( var i = 0, l = groups.length; i < l; i ++ ) {\r\n\r\n\t\tvar group = groups[ i ];\r\n\t\tthis.addGroup( group.start, group.count, group.instances );\r\n\r\n\t}\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n// File:src/core/Uniform.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Uniform = function ( value ) {\r\n\r\n\tif ( typeof value === 'string' ) {\r\n\r\n\t\tconsole.warn( 'THREE.Uniform: Type parameter is no longer needed.' );\r\n\t\tvalue = arguments[ 1 ];\r\n\r\n\t}\r\n\r\n\tthis.value = value;\r\n\r\n\tthis.dynamic = false;\r\n\r\n};\r\n\r\nTHREE.Uniform.prototype = {\r\n\r\n\tconstructor: THREE.Uniform,\r\n\r\n\tonUpdate: function ( callback ) {\r\n\r\n\t\tthis.dynamic = true;\r\n\t\tthis.onUpdateCallback = callback;\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/animation/AnimationAction.js\r\n\r\n/**\r\n *\r\n * Action provided by AnimationMixer for scheduling clip playback on specific\r\n * objects.\r\n *\r\n * @author Ben Houston / http://clara.io/\r\n * @author David Sarno / http://lighthaus.us/\r\n * @author tschw\r\n *\r\n */\r\n\r\nTHREE.AnimationAction = function() {\r\n\r\n\tthrow new Error( \"THREE.AnimationAction: \" +\r\n\t\t\t\"Use mixer.clipAction for construction.\" );\r\n\r\n};\r\n\r\nTHREE.AnimationAction._new =\r\n\t\tfunction AnimationAction( mixer, clip, localRoot ) {\r\n\r\n\tthis._mixer = mixer;\r\n\tthis._clip = clip;\r\n\tthis._localRoot = localRoot || null;\r\n\r\n\tvar tracks = clip.tracks,\r\n\t\tnTracks = tracks.length,\r\n\t\tinterpolants = new Array( nTracks );\r\n\r\n\tvar interpolantSettings = {\r\n\t\t\tendingStart: \tTHREE.ZeroCurvatureEnding,\r\n\t\t\tendingEnd:\t\tTHREE.ZeroCurvatureEnding\r\n\t};\r\n\r\n\tfor ( var i = 0; i !== nTracks; ++ i ) {\r\n\r\n\t\tvar interpolant = tracks[ i ].createInterpolant( null );\r\n\t\tinterpolants[ i ] = interpolant;\r\n\t\tinterpolant.settings = interpolantSettings;\r\n\r\n\t}\r\n\r\n\tthis._interpolantSettings = interpolantSettings;\r\n\r\n\tthis._interpolants = interpolants;\t// bound by the mixer\r\n\r\n\t// inside: PropertyMixer (managed by the mixer)\r\n\tthis._propertyBindings = new Array( nTracks );\r\n\r\n\tthis._cacheIndex = null;\t\t\t// for the memory manager\r\n\tthis._byClipCacheIndex = null;\t\t// for the memory manager\r\n\r\n\tthis._timeScaleInterpolant = null;\r\n\tthis._weightInterpolant = null;\r\n\r\n\tthis.loop = THREE.LoopRepeat;\r\n\tthis._loopCount = -1;\r\n\r\n\t// global mixer time when the action is to be started\r\n\t// it's set back to 'null' upon start of the action\r\n\tthis._startTime = null;\r\n\r\n\t// scaled local time of the action\r\n\t// gets clamped or wrapped to 0..clip.duration according to loop\r\n\tthis.time = 0;\r\n\r\n\tthis.timeScale = 1;\r\n\tthis._effectiveTimeScale = 1;\r\n\r\n\tthis.weight = 1;\r\n\tthis._effectiveWeight = 1;\r\n\r\n\tthis.repetitions = Infinity; \t\t// no. of repetitions when looping\r\n\r\n\tthis.paused = false;\t\t\t\t// false -> zero effective time scale\r\n\tthis.enabled = true;\t\t\t\t// true -> zero effective weight\r\n\r\n\tthis.clampWhenFinished \t= false;\t// keep feeding the last frame?\r\n\r\n\tthis.zeroSlopeAtStart \t= true;\t\t// for smooth interpolation w/o separate\r\n\tthis.zeroSlopeAtEnd\t\t= true;\t\t// clips for start, loop and end\r\n\r\n};\r\n\r\nTHREE.AnimationAction._new.prototype = {\r\n\r\n\tconstructor: THREE.AnimationAction._new,\r\n\r\n\t// State & Scheduling\r\n\r\n\tplay: function() {\r\n\r\n\t\tthis._mixer._activateAction( this );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tstop: function() {\r\n\r\n\t\tthis._mixer._deactivateAction( this );\r\n\r\n\t\treturn this.reset();\r\n\r\n\t},\r\n\r\n\treset: function() {\r\n\r\n\t\tthis.paused = false;\r\n\t\tthis.enabled = true;\r\n\r\n\t\tthis.time = 0;\t\t\t// restart clip\r\n\t\tthis._loopCount = -1;\t// forget previous loops\r\n\t\tthis._startTime = null;\t// forget scheduling\r\n\r\n\t\treturn this.stopFading().stopWarping();\r\n\r\n\t},\r\n\r\n\tisRunning: function() {\r\n\r\n\t\tvar start = this._startTime;\r\n\r\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\r\n\t\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\r\n\r\n\t},\r\n\r\n\t// return true when play has been called\r\n\tisScheduled: function() {\r\n\r\n\t\treturn this._mixer._isActiveAction( this );\r\n\r\n\t},\r\n\r\n\tstartAt: function( time ) {\r\n\r\n\t\tthis._startTime = time;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetLoop: function( mode, repetitions ) {\r\n\r\n\t\tthis.loop = mode;\r\n\t\tthis.repetitions = repetitions;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\t// Weight\r\n\r\n\t// set the weight stopping any scheduled fading\r\n\t// although .enabled = false yields an effective weight of zero, this\r\n\t// method does *not* change .enabled, because it would be confusing\r\n\tsetEffectiveWeight: function( weight ) {\r\n\r\n\t\tthis.weight = weight;\r\n\r\n\t\t// note: same logic as when updated at runtime\r\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\r\n\r\n\t\treturn this.stopFading();\r\n\r\n\t},\r\n\r\n\t// return the weight considering fading and .enabled\r\n\tgetEffectiveWeight: function() {\r\n\r\n\t\treturn this._effectiveWeight;\r\n\r\n\t},\r\n\r\n\tfadeIn: function( duration ) {\r\n\r\n\t\treturn this._scheduleFading( duration, 0, 1 );\r\n\r\n\t},\r\n\r\n\tfadeOut: function( duration ) {\r\n\r\n\t\treturn this._scheduleFading( duration, 1, 0 );\r\n\r\n\t},\r\n\r\n\tcrossFadeFrom: function( fadeOutAction, duration, warp ) {\r\n\r\n\t\tvar mixer = this._mixer;\r\n\r\n\t\tfadeOutAction.fadeOut( duration );\r\n\t\tthis.fadeIn( duration );\r\n\r\n\t\tif( warp ) {\r\n\r\n\t\t\tvar fadeInDuration = this._clip.duration,\r\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\r\n\r\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\r\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\r\n\r\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\r\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcrossFadeTo: function( fadeInAction, duration, warp ) {\r\n\r\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\r\n\r\n\t},\r\n\r\n\tstopFading: function() {\r\n\r\n\t\tvar weightInterpolant = this._weightInterpolant;\r\n\r\n\t\tif ( weightInterpolant !== null ) {\r\n\r\n\t\t\tthis._weightInterpolant = null;\r\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\t// Time Scale Control\r\n\r\n\t// set the weight stopping any scheduled warping\r\n\t// although .paused = true yields an effective time scale of zero, this\r\n\t// method does *not* change .paused, because it would be confusing\r\n\tsetEffectiveTimeScale: function( timeScale ) {\r\n\r\n\t\tthis.timeScale = timeScale;\r\n\t\tthis._effectiveTimeScale = this.paused ? 0 :timeScale;\r\n\r\n\t\treturn this.stopWarping();\r\n\r\n\t},\r\n\r\n\t// return the time scale considering warping and .paused\r\n\tgetEffectiveTimeScale: function() {\r\n\r\n\t\treturn this._effectiveTimeScale;\r\n\r\n\t},\r\n\r\n\tsetDuration: function( duration ) {\r\n\r\n\t\tthis.timeScale = this._clip.duration / duration;\r\n\r\n\t\treturn this.stopWarping();\r\n\r\n\t},\r\n\r\n\tsyncWith: function( action ) {\r\n\r\n\t\tthis.time = action.time;\r\n\t\tthis.timeScale = action.timeScale;\r\n\r\n\t\treturn this.stopWarping();\r\n\r\n\t},\r\n\r\n\thalt: function( duration ) {\r\n\r\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\r\n\r\n\t},\r\n\r\n\twarp: function( startTimeScale, endTimeScale, duration ) {\r\n\r\n\t\tvar mixer = this._mixer, now = mixer.time,\r\n\t\t\tinterpolant = this._timeScaleInterpolant,\r\n\r\n\t\t\ttimeScale = this.timeScale;\r\n\r\n\t\tif ( interpolant === null ) {\r\n\r\n\t\t\tinterpolant = mixer._lendControlInterpolant(),\r\n\t\t\tthis._timeScaleInterpolant = interpolant;\r\n\r\n\t\t}\r\n\r\n\t\tvar times = interpolant.parameterPositions,\r\n\t\t\tvalues = interpolant.sampleValues;\r\n\r\n\t\ttimes[ 0 ] = now;\r\n\t\ttimes[ 1 ] = now + duration;\r\n\r\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\r\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tstopWarping: function() {\r\n\r\n\t\tvar timeScaleInterpolant = this._timeScaleInterpolant;\r\n\r\n\t\tif ( timeScaleInterpolant !== null ) {\r\n\r\n\t\t\tthis._timeScaleInterpolant = null;\r\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\t// Object Accessors\r\n\r\n\tgetMixer: function() {\r\n\r\n\t\treturn this._mixer;\r\n\r\n\t},\r\n\r\n\tgetClip: function() {\r\n\r\n\t\treturn this._clip;\r\n\r\n\t},\r\n\r\n\tgetRoot: function() {\r\n\r\n\t\treturn this._localRoot || this._mixer._root;\r\n\r\n\t},\r\n\r\n\t// Interna\r\n\r\n\t_update: function( time, deltaTime, timeDirection, accuIndex ) {\r\n\t\t// called by the mixer\r\n\r\n\t\tvar startTime = this._startTime;\r\n\r\n\t\tif ( startTime !== null ) {\r\n\r\n\t\t\t// check for scheduled start of action\r\n\r\n\t\t\tvar timeRunning = ( time - startTime ) * timeDirection;\r\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\r\n\r\n\t\t\t\treturn; // yet to come / don't decide when delta = 0\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// start\r\n\r\n\t\t\tthis._startTime = null; // unschedule\r\n\t\t\tdeltaTime = timeDirection * timeRunning;\r\n\r\n\t\t}\r\n\r\n\t\t// apply time scale and advance time\r\n\r\n\t\tdeltaTime *= this._updateTimeScale( time );\r\n\t\tvar clipTime = this._updateTime( deltaTime );\r\n\r\n\t\t// note: _updateTime may disable the action resulting in\r\n\t\t// an effective weight of 0\r\n\r\n\t\tvar weight = this._updateWeight( time );\r\n\r\n\t\tif ( weight > 0 ) {\r\n\r\n\t\t\tvar interpolants = this._interpolants;\r\n\t\t\tvar propertyMixers = this._propertyBindings;\r\n\r\n\t\t\tfor ( var j = 0, m = interpolants.length; j !== m; ++ j ) {\r\n\r\n\t\t\t\tinterpolants[ j ].evaluate( clipTime );\r\n\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t_updateWeight: function( time ) {\r\n\r\n\t\tvar weight = 0;\r\n\r\n\t\tif ( this.enabled ) {\r\n\r\n\t\t\tweight = this.weight;\r\n\t\t\tvar interpolant = this._weightInterpolant;\r\n\r\n\t\t\tif ( interpolant !== null ) {\r\n\r\n\t\t\t\tvar interpolantValue = interpolant.evaluate( time )[ 0 ];\r\n\r\n\t\t\t\tweight *= interpolantValue;\r\n\r\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\r\n\r\n\t\t\t\t\tthis.stopFading();\r\n\r\n\t\t\t\t\tif ( interpolantValue === 0 ) {\r\n\r\n\t\t\t\t\t\t// faded out, disable\r\n\t\t\t\t\t\tthis.enabled = false;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthis._effectiveWeight = weight;\r\n\t\treturn weight;\r\n\r\n\t},\r\n\r\n\t_updateTimeScale: function( time ) {\r\n\r\n\t\tvar timeScale = 0;\r\n\r\n\t\tif ( ! this.paused ) {\r\n\r\n\t\t\ttimeScale = this.timeScale;\r\n\r\n\t\t\tvar interpolant = this._timeScaleInterpolant;\r\n\r\n\t\t\tif ( interpolant !== null ) {\r\n\r\n\t\t\t\tvar interpolantValue = interpolant.evaluate( time )[ 0 ];\r\n\r\n\t\t\t\ttimeScale *= interpolantValue;\r\n\r\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\r\n\r\n\t\t\t\t\tthis.stopWarping();\r\n\r\n\t\t\t\t\tif ( timeScale === 0 ) {\r\n\r\n\t\t\t\t\t\t// motion has halted, pause\r\n\t\t\t\t\t\tthis.paused = true;\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t// warp done - apply final time scale\r\n\t\t\t\t\t\tthis.timeScale = timeScale;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthis._effectiveTimeScale = timeScale;\r\n\t\treturn timeScale;\r\n\r\n\t},\r\n\r\n\t_updateTime: function( deltaTime ) {\r\n\r\n\t\tvar time = this.time + deltaTime;\r\n\r\n\t\tif ( deltaTime === 0 ) return time;\r\n\r\n\t\tvar duration = this._clip.duration,\r\n\r\n\t\t\tloop = this.loop,\r\n\t\t\tloopCount = this._loopCount;\r\n\r\n\t\tif ( loop === THREE.LoopOnce ) {\r\n\r\n\t\t\tif ( loopCount === -1 ) {\r\n\t\t\t\t// just started\r\n\r\n\t\t\t\tthis.loopCount = 0;\r\n\t\t\t\tthis._setEndings( true, true, false );\r\n\r\n\t\t\t}\r\n\r\n\t\t\thandle_stop: {\r\n\r\n\t\t\t\tif ( time >= duration ) {\r\n\r\n\t\t\t\t\ttime = duration;\r\n\r\n\t\t\t\t} else if ( time < 0 ) {\r\n\r\n\t\t\t\t\ttime = 0;\r\n\r\n\t\t\t\t} else break handle_stop;\r\n\r\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\r\n\t\t\t\telse this.enabled = false;\r\n\r\n\t\t\t\tthis._mixer.dispatchEvent( {\r\n\t\t\t\t\ttype: 'finished', action: this,\r\n\t\t\t\t\tdirection: deltaTime < 0 ? -1 : 1\r\n\t\t\t\t} );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else { // repetitive Repeat or PingPong\r\n\r\n\t\t\tvar pingPong = ( loop === THREE.LoopPingPong );\r\n\r\n\t\t\tif ( loopCount === -1 ) {\r\n\t\t\t\t// just started\r\n\r\n\t\t\t\tif ( deltaTime >= 0 ) {\r\n\r\n\t\t\t\t\tloopCount = 0;\r\n\r\n\t\t\t\t\tthis._setEndings(\r\n\t\t\t\t\t\t\ttrue, this.repetitions === 0, pingPong );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// when looping in reverse direction, the initial\r\n\t\t\t\t\t// transition through zero counts as a repetition,\r\n\t\t\t\t\t// so leave loopCount at -1\r\n\r\n\t\t\t\t\tthis._setEndings(\r\n\t\t\t\t\t\t\tthis.repetitions === 0, true, pingPong );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( time >= duration || time < 0 ) {\r\n\t\t\t\t// wrap around\r\n\r\n\t\t\t\tvar loopDelta = Math.floor( time / duration ); // signed\r\n\t\t\t\ttime -= duration * loopDelta;\r\n\r\n\t\t\t\tloopCount += Math.abs( loopDelta );\r\n\r\n\t\t\t\tvar pending = this.repetitions - loopCount;\r\n\r\n\t\t\t\tif ( pending < 0 ) {\r\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\r\n\r\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\r\n\t\t\t\t\telse this.enabled = false;\r\n\r\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\r\n\r\n\t\t\t\t\tthis._mixer.dispatchEvent( {\r\n\t\t\t\t\t\ttype: 'finished', action: this,\r\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : -1\r\n\t\t\t\t\t} );\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// keep running\r\n\r\n\t\t\t\t\tif ( pending === 0 ) {\r\n\t\t\t\t\t\t// entering the last round\r\n\r\n\t\t\t\t\t\tvar atStart = deltaTime < 0;\r\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis._loopCount = loopCount;\r\n\r\n\t\t\t\t\tthis._mixer.dispatchEvent( {\r\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\r\n\t\t\t\t\t} );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\r\n\t\t\t\t// invert time for the \"pong round\"\r\n\r\n\t\t\t\tthis.time = time;\r\n\t\t\t\treturn duration - time;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthis.time = time;\r\n\t\treturn time;\r\n\r\n\t},\r\n\r\n\t_setEndings: function( atStart, atEnd, pingPong ) {\r\n\r\n\t\tvar settings = this._interpolantSettings;\r\n\r\n\t\tif ( pingPong ) {\r\n\r\n\t\t\tsettings.endingStart \t= THREE.ZeroSlopeEnding;\r\n\t\t\tsettings.endingEnd\t\t= THREE.ZeroSlopeEnding;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\r\n\r\n\t\t\tif ( atStart ) {\r\n\r\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ?\r\n\t\t\t\t\t\tTHREE.ZeroSlopeEnding : THREE.ZeroCurvatureEnding;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tsettings.endingStart = THREE.WrapAroundEnding;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( atEnd ) {\r\n\r\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ?\r\n\t\t\t\t\t\tTHREE.ZeroSlopeEnding : THREE.ZeroCurvatureEnding;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tsettings.endingEnd \t = THREE.WrapAroundEnding;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t_scheduleFading: function( duration, weightNow, weightThen ) {\r\n\r\n\t\tvar mixer = this._mixer, now = mixer.time,\r\n\t\t\tinterpolant = this._weightInterpolant;\r\n\r\n\t\tif ( interpolant === null ) {\r\n\r\n\t\t\tinterpolant = mixer._lendControlInterpolant(),\r\n\t\t\tthis._weightInterpolant = interpolant;\r\n\r\n\t\t}\r\n\r\n\t\tvar times = interpolant.parameterPositions,\r\n\t\t\tvalues = interpolant.sampleValues;\r\n\r\n\t\ttimes[ 0 ] = now; \t\t\t\tvalues[ 0 ] = weightNow;\r\n\t\ttimes[ 1 ] = now + duration;\tvalues[ 1 ] = weightThen;\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n};\r\n\r\n\r\n// File:src/animation/AnimationClip.js\r\n\r\n/**\r\n *\r\n * Reusable set of Tracks that represent an animation.\r\n *\r\n * @author Ben Houston / http://clara.io/\r\n * @author David Sarno / http://lighthaus.us/\r\n */\r\n\r\nTHREE.AnimationClip = function ( name, duration, tracks ) {\r\n\r\n\tthis.name = name;\r\n\tthis.tracks = tracks;\r\n\tthis.duration = ( duration !== undefined ) ? duration : -1;\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\t// this means it should figure out its duration by scanning the tracks\r\n\tif ( this.duration < 0 ) {\r\n\r\n\t\tthis.resetDuration();\r\n\r\n\t}\r\n\r\n\t// maybe only do these on demand, as doing them here could potentially slow down loading\r\n\t// but leaving these here during development as this ensures a lot of testing of these functions\r\n\tthis.trim();\r\n\tthis.optimize();\r\n\r\n};\r\n\r\nTHREE.AnimationClip.prototype = {\r\n\r\n\tconstructor: THREE.AnimationClip,\r\n\r\n\tresetDuration: function() {\r\n\r\n\t\tvar tracks = this.tracks,\r\n\t\t\tduration = 0;\r\n\r\n\t\tfor ( var i = 0, n = tracks.length; i !== n; ++ i ) {\r\n\r\n\t\t\tvar track = this.tracks[ i ];\r\n\r\n\t\t\tduration = Math.max(\r\n\t\t\t\t\tduration, track.times[ track.times.length - 1 ] );\r\n\r\n\t\t}\r\n\r\n\t\tthis.duration = duration;\r\n\r\n\t},\r\n\r\n\ttrim: function() {\r\n\r\n\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\r\n\r\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\toptimize: function() {\r\n\r\n\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\r\n\r\n\t\t\tthis.tracks[ i ].optimize();\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// Static methods:\r\n\r\nObject.assign( THREE.AnimationClip, {\r\n\r\n\tparse: function( json ) {\r\n\r\n\t\tvar tracks = [],\r\n\t\t\tjsonTracks = json.tracks,\r\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\r\n\r\n\t\tfor ( var i = 0, n = jsonTracks.length; i !== n; ++ i ) {\r\n\r\n\t\t\ttracks.push( THREE.KeyframeTrack.parse( jsonTracks[ i ] ).scale( frameTime ) );\r\n\r\n\t\t}\r\n\r\n\t\treturn new THREE.AnimationClip( json.name, json.duration, tracks );\r\n\r\n\t},\r\n\r\n\r\n\ttoJSON: function( clip ) {\r\n\r\n\t\tvar tracks = [],\r\n\t\t\tclipTracks = clip.tracks;\r\n\r\n\t\tvar json = {\r\n\r\n\t\t\t'name': clip.name,\r\n\t\t\t'duration': clip.duration,\r\n\t\t\t'tracks': tracks\r\n\r\n\t\t};\r\n\r\n\t\tfor ( var i = 0, n = clipTracks.length; i !== n; ++ i ) {\r\n\r\n\t\t\ttracks.push( THREE.KeyframeTrack.toJSON( clipTracks[ i ] ) );\r\n\r\n\t\t}\r\n\r\n\t\treturn json;\r\n\r\n\t},\r\n\r\n\r\n\tCreateFromMorphTargetSequence: function( name, morphTargetSequence, fps, noLoop ) {\r\n\r\n\t\tvar numMorphTargets = morphTargetSequence.length;\r\n\t\tvar tracks = [];\r\n\r\n\t\tfor ( var i = 0; i < numMorphTargets; i ++ ) {\r\n\r\n\t\t\tvar times = [];\r\n\t\t\tvar values = [];\r\n\r\n\t\t\ttimes.push(\r\n\t\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\r\n\t\t\t\t\ti,\r\n\t\t\t\t\t( i + 1 ) % numMorphTargets );\r\n\r\n\t\t\tvalues.push( 0, 1, 0 );\r\n\r\n\t\t\tvar order = THREE.AnimationUtils.getKeyframeOrder( times );\r\n\t\t\ttimes = THREE.AnimationUtils.sortedArray( times, 1, order );\r\n\t\t\tvalues = THREE.AnimationUtils.sortedArray( values, 1, order );\r\n\r\n\t\t\t// if there is a key at the first frame, duplicate it as the\r\n\t\t\t// last frame as well for perfect loop.\r\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\r\n\r\n\t\t\t\ttimes.push( numMorphTargets );\r\n\t\t\t\tvalues.push( values[ 0 ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t\ttracks.push(\r\n\t\t\t\t\tnew THREE.NumberKeyframeTrack(\r\n\t\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\r\n\t\t\t\t\t\ttimes, values\r\n\t\t\t\t\t).scale( 1.0 / fps ) );\r\n\t\t}\r\n\r\n\t\treturn new THREE.AnimationClip( name, -1, tracks );\r\n\r\n\t},\r\n\r\n\tfindByName: function( objectOrClipArray, name ) {\r\n\r\n\t\tvar clipArray = objectOrClipArray;\r\n\r\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\r\n\r\n\t\t\tvar o = objectOrClipArray;\r\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0; i < clipArray.length; i ++ ) {\r\n\r\n\t\t\tif ( clipArray[ i ].name === name ) {\r\n\r\n\t\t\t\treturn clipArray[ i ];\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\r\n\t},\r\n\r\n\tCreateClipsFromMorphTargetSequences: function( morphTargets, fps, noLoop ) {\r\n\r\n\t\tvar animationToMorphTargets = {};\r\n\r\n\t\t// tested with https://regex101.com/ on trick sequences\r\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\r\n\t\tvar pattern = /^([\\w-]*?)([\\d]+)$/;\r\n\r\n\t\t// sort morph target names into animation groups based\r\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\r\n\t\tfor ( var i = 0, il = morphTargets.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar morphTarget = morphTargets[ i ];\r\n\t\t\tvar parts = morphTarget.name.match( pattern );\r\n\r\n\t\t\tif ( parts && parts.length > 1 ) {\r\n\r\n\t\t\t\tvar name = parts[ 1 ];\r\n\r\n\t\t\t\tvar animationMorphTargets = animationToMorphTargets[ name ];\r\n\t\t\t\tif ( ! animationMorphTargets ) {\r\n\r\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tanimationMorphTargets.push( morphTarget );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar clips = [];\r\n\r\n\t\tfor ( var name in animationToMorphTargets ) {\r\n\r\n\t\t\tclips.push( THREE.AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\r\n\r\n\t\t}\r\n\r\n\t\treturn clips;\r\n\r\n\t},\r\n\r\n\t// parse the animation.hierarchy format\r\n\tparseAnimation: function( animation, bones, nodeName ) {\r\n\r\n\t\tif ( ! animation ) {\r\n\r\n\t\t\tconsole.error( \" no animation in JSONLoader data\" );\r\n\t\t\treturn null;\r\n\r\n\t\t}\r\n\r\n\t\tvar addNonemptyTrack = function(\r\n\t\t\t\ttrackType, trackName, animationKeys, propertyName, destTracks ) {\r\n\r\n\t\t\t// only return track if there are actually keys.\r\n\t\t\tif ( animationKeys.length !== 0 ) {\r\n\r\n\t\t\t\tvar times = [];\r\n\t\t\t\tvar values = [];\r\n\r\n\t\t\t\tTHREE.AnimationUtils.flattenJSON(\r\n\t\t\t\t\t\tanimationKeys, times, values, propertyName );\r\n\r\n\t\t\t\t// empty keys are filtered out, so check again\r\n\t\t\t\tif ( times.length !== 0 ) {\r\n\r\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t\tvar tracks = [];\r\n\r\n\t\tvar clipName = animation.name || 'default';\r\n\t\t// automatic length determination in AnimationClip.\r\n\t\tvar duration = animation.length || -1;\r\n\t\tvar fps = animation.fps || 30;\r\n\r\n\t\tvar hierarchyTracks = animation.hierarchy || [];\r\n\r\n\t\tfor ( var h = 0; h < hierarchyTracks.length; h ++ ) {\r\n\r\n\t\t\tvar animationKeys = hierarchyTracks[ h ].keys;\r\n\r\n\t\t\t// skip empty tracks\r\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\r\n\r\n\t\t\t// process morph targets in a way exactly compatible\r\n\t\t\t// with AnimationHandler.init( animation )\r\n\t\t\tif ( animationKeys[0].morphTargets ) {\r\n\r\n\t\t\t\t// figure out all morph targets used in this track\r\n\t\t\t\tvar morphTargetNames = {};\r\n\t\t\t\tfor ( var k = 0; k < animationKeys.length; k ++ ) {\r\n\r\n\t\t\t\t\tif ( animationKeys[k].morphTargets ) {\r\n\r\n\t\t\t\t\t\tfor ( var m = 0; m < animationKeys[k].morphTargets.length; m ++ ) {\r\n\r\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[k].morphTargets[m] ] = -1;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// create a track for each morph target with all zero\r\n\t\t\t\t// morphTargetInfluences except for the keys in which\r\n\t\t\t\t// the morphTarget is named.\r\n\t\t\t\tfor ( var morphTargetName in morphTargetNames ) {\r\n\r\n\t\t\t\t\tvar times = [];\r\n\t\t\t\t\tvar values = [];\r\n\r\n\t\t\t\t\tfor ( var m = 0;\r\n\t\t\t\t\t\t\tm !== animationKeys[k].morphTargets.length; ++ m ) {\r\n\r\n\t\t\t\t\t\tvar animationKey = animationKeys[k];\r\n\r\n\t\t\t\t\t\ttimes.push( animationKey.time );\r\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttracks.push( new THREE.NumberKeyframeTrack(\r\n\t\t\t\t\t\t\t'.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tduration = morphTargetNames.length * ( fps || 1.0 );\r\n\r\n\t\t\t} else {\r\n\t\t\t\t// ...assume skeletal animation\r\n\r\n\t\t\t\tvar boneName = '.bones[' + bones[ h ].name + ']';\r\n\r\n\t\t\t\taddNonemptyTrack(\r\n\t\t\t\t\t\tTHREE.VectorKeyframeTrack, boneName + '.position',\r\n\t\t\t\t\t\tanimationKeys, 'pos', tracks );\r\n\r\n\t\t\t\taddNonemptyTrack(\r\n\t\t\t\t\t\tTHREE.QuaternionKeyframeTrack, boneName + '.quaternion',\r\n\t\t\t\t\t\tanimationKeys, 'rot', tracks );\r\n\r\n\t\t\t\taddNonemptyTrack(\r\n\t\t\t\t\t\tTHREE.VectorKeyframeTrack, boneName + '.scale',\r\n\t\t\t\t\t\tanimationKeys, 'scl', tracks );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( tracks.length === 0 ) {\r\n\r\n\t\t\treturn null;\r\n\r\n\t\t}\r\n\r\n\t\tvar clip = new THREE.AnimationClip( clipName, duration, tracks );\r\n\r\n\t\treturn clip;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/animation/AnimationMixer.js\r\n\r\n/**\r\n *\r\n * Player for AnimationClips.\r\n *\r\n *\r\n * @author Ben Houston / http://clara.io/\r\n * @author David Sarno / http://lighthaus.us/\r\n * @author tschw\r\n */\r\n\r\nTHREE.AnimationMixer = function( root ) {\r\n\r\n\tthis._root = root;\r\n\tthis._initMemoryManager();\r\n\tthis._accuIndex = 0;\r\n\r\n\tthis.time = 0;\r\n\r\n\tthis.timeScale = 1.0;\r\n\r\n};\r\n\r\nObject.assign( THREE.AnimationMixer.prototype, THREE.EventDispatcher.prototype, {\r\n\r\n\t// return an action for a clip optionally using a custom root target\r\n\t// object (this method allocates a lot of dynamic memory in case a\r\n\t// previously unknown clip/root combination is specified)\r\n\tclipAction: function( clip, optionalRoot ) {\r\n\r\n\t\tvar root = optionalRoot || this._root,\r\n\t\t\trootUuid = root.uuid,\r\n\r\n\t\t\tclipObject = typeof clip === 'string' ?\r\n\t\t\t\t\tTHREE.AnimationClip.findByName( root, clip ) : clip,\r\n\r\n\t\t\tclipUuid = clipObject !== null ? clipObject.uuid : clip,\r\n\r\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ],\r\n\t\t\tprototypeAction = null;\r\n\r\n\t\tif ( actionsForClip !== undefined ) {\r\n\r\n\t\t\tvar existingAction =\r\n\t\t\t\t\tactionsForClip.actionByRoot[ rootUuid ];\r\n\r\n\t\t\tif ( existingAction !== undefined ) {\r\n\r\n\t\t\t\treturn existingAction;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// we know the clip, so we don't have to parse all\r\n\t\t\t// the bindings again but can just copy\r\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\r\n\r\n\t\t\t// also, take the clip from the prototype action\r\n\t\t\tif ( clipObject === null )\r\n\t\t\t\tclipObject = prototypeAction._clip;\r\n\r\n\t\t}\r\n\r\n\t\t// clip must be known when specified via string\r\n\t\tif ( clipObject === null ) return null;\r\n\r\n\t\t// allocate all resources required to run it\r\n\t\tvar newAction = new THREE.\r\n\t\t\t\tAnimationMixer._Action( this, clipObject, optionalRoot );\r\n\r\n\t\tthis._bindAction( newAction, prototypeAction );\r\n\r\n\t\t// and make the action known to the memory manager\r\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\r\n\r\n\t\treturn newAction;\r\n\r\n\t},\r\n\r\n\t// get an existing action\r\n\texistingAction: function( clip, optionalRoot ) {\r\n\r\n\t\tvar root = optionalRoot || this._root,\r\n\t\t\trootUuid = root.uuid,\r\n\r\n\t\t\tclipObject = typeof clip === 'string' ?\r\n\t\t\t\t\tTHREE.AnimationClip.findByName( root, clip ) : clip,\r\n\r\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\r\n\r\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\r\n\r\n\t\tif ( actionsForClip !== undefined ) {\r\n\r\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\r\n\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\r\n\t},\r\n\r\n\t// deactivates all previously scheduled actions\r\n\tstopAllAction: function() {\r\n\r\n\t\tvar actions = this._actions,\r\n\t\t\tnActions = this._nActiveActions,\r\n\t\t\tbindings = this._bindings,\r\n\t\t\tnBindings = this._nActiveBindings;\r\n\r\n\t\tthis._nActiveActions = 0;\r\n\t\tthis._nActiveBindings = 0;\r\n\r\n\t\tfor ( var i = 0; i !== nActions; ++ i ) {\r\n\r\n\t\t\tactions[ i ].reset();\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0; i !== nBindings; ++ i ) {\r\n\r\n\t\t\tbindings[ i ].useCount = 0;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\t// advance the time and update apply the animation\r\n\tupdate: function( deltaTime ) {\r\n\r\n\t\tdeltaTime *= this.timeScale;\r\n\r\n\t\tvar actions = this._actions,\r\n\t\t\tnActions = this._nActiveActions,\r\n\r\n\t\t\ttime = this.time += deltaTime,\r\n\t\t\ttimeDirection = Math.sign( deltaTime ),\r\n\r\n\t\t\taccuIndex = this._accuIndex ^= 1;\r\n\r\n\t\t// run active actions\r\n\r\n\t\tfor ( var i = 0; i !== nActions; ++ i ) {\r\n\r\n\t\t\tvar action = actions[ i ];\r\n\r\n\t\t\tif ( action.enabled ) {\r\n\r\n\t\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// update scene graph\r\n\r\n\t\tvar bindings = this._bindings,\r\n\t\t\tnBindings = this._nActiveBindings;\r\n\r\n\t\tfor ( var i = 0; i !== nBindings; ++ i ) {\r\n\r\n\t\t\tbindings[ i ].apply( accuIndex );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\t// return this mixer's root target object\r\n\tgetRoot: function() {\r\n\r\n\t\treturn this._root;\r\n\r\n\t},\r\n\r\n\t// free all resources specific to a particular clip\r\n\tuncacheClip: function( clip ) {\r\n\r\n\t\tvar actions = this._actions,\r\n\t\t\tclipUuid = clip.uuid,\r\n\t\t\tactionsByClip = this._actionsByClip,\r\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\r\n\r\n\t\tif ( actionsForClip !== undefined ) {\r\n\r\n\t\t\t// note: just calling _removeInactiveAction would mess up the\r\n\t\t\t// iteration state and also require updating the state we can\r\n\t\t\t// just throw away\r\n\r\n\t\t\tvar actionsToRemove = actionsForClip.knownActions;\r\n\r\n\t\t\tfor ( var i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\r\n\r\n\t\t\t\tvar action = actionsToRemove[ i ];\r\n\r\n\t\t\t\tthis._deactivateAction( action );\r\n\r\n\t\t\t\tvar cacheIndex = action._cacheIndex,\r\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\r\n\r\n\t\t\t\taction._cacheIndex = null;\r\n\t\t\t\taction._byClipCacheIndex = null;\r\n\r\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\r\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\r\n\t\t\t\tactions.pop();\r\n\r\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tdelete actionsByClip[ clipUuid ];\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t// free all resources specific to a particular root target object\r\n\tuncacheRoot: function( root ) {\r\n\r\n\t\tvar rootUuid = root.uuid,\r\n\t\t\tactionsByClip = this._actionsByClip;\r\n\r\n\t\tfor ( var clipUuid in actionsByClip ) {\r\n\r\n\t\t\tvar actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\r\n\t\t\t\taction = actionByRoot[ rootUuid ];\r\n\r\n\t\t\tif ( action !== undefined ) {\r\n\r\n\t\t\t\tthis._deactivateAction( action );\r\n\t\t\t\tthis._removeInactiveAction( action );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar bindingsByRoot = this._bindingsByRootAndName,\r\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\r\n\r\n\t\tif ( bindingByName !== undefined ) {\r\n\r\n\t\t\tfor ( var trackName in bindingByName ) {\r\n\r\n\t\t\t\tvar binding = bindingByName[ trackName ];\r\n\t\t\t\tbinding.restoreOriginalState();\r\n\t\t\t\tthis._removeInactiveBinding( binding );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t// remove a targeted clip from the cache\r\n\tuncacheAction: function( clip, optionalRoot ) {\r\n\r\n\t\tvar action = this.existingAction( clip, optionalRoot );\r\n\r\n\t\tif ( action !== null ) {\r\n\r\n\t\t\tthis._deactivateAction( action );\r\n\t\t\tthis._removeInactiveAction( action );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n} );\r\n\r\nTHREE.AnimationMixer._Action = THREE.AnimationAction._new;\r\n\r\n// Implementation details:\r\n\r\nObject.assign( THREE.AnimationMixer.prototype, {\r\n\r\n\t_bindAction: function( action, prototypeAction ) {\r\n\r\n\t\tvar root = action._localRoot || this._root,\r\n\t\t\ttracks = action._clip.tracks,\r\n\t\t\tnTracks = tracks.length,\r\n\t\t\tbindings = action._propertyBindings,\r\n\t\t\tinterpolants = action._interpolants,\r\n\t\t\trootUuid = root.uuid,\r\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\r\n\t\t\tbindingsByName = bindingsByRoot[ rootUuid ];\r\n\r\n\t\tif ( bindingsByName === undefined ) {\r\n\r\n\t\t\tbindingsByName = {};\r\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0; i !== nTracks; ++ i ) {\r\n\r\n\t\t\tvar track = tracks[ i ],\r\n\t\t\t\ttrackName = track.name,\r\n\t\t\t\tbinding = bindingsByName[ trackName ];\r\n\r\n\t\t\tif ( binding !== undefined ) {\r\n\r\n\t\t\t\tbindings[ i ] = binding;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tbinding = bindings[ i ];\r\n\r\n\t\t\t\tif ( binding !== undefined ) {\r\n\r\n\t\t\t\t\t// existing binding, make sure the cache knows\r\n\r\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\r\n\r\n\t\t\t\t\t\t++ binding.referenceCount;\r\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar path = prototypeAction && prototypeAction.\r\n\t\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\r\n\r\n\t\t\t\tbinding = new THREE.PropertyMixer(\r\n\t\t\t\t\t\tTHREE.PropertyBinding.create( root, trackName, path ),\r\n\t\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\r\n\r\n\t\t\t\t++ binding.referenceCount;\r\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\r\n\r\n\t\t\t\tbindings[ i ] = binding;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t_activateAction: function( action ) {\r\n\r\n\t\tif ( ! this._isActiveAction( action ) ) {\r\n\r\n\t\t\tif ( action._cacheIndex === null ) {\r\n\r\n\t\t\t\t// this action has been forgotten by the cache, but the user\r\n\t\t\t\t// appears to be still using it -> rebind\r\n\r\n\t\t\t\tvar rootUuid = ( action._localRoot || this._root ).uuid,\r\n\t\t\t\t\tclipUuid = action._clip.uuid,\r\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\r\n\r\n\t\t\t\tthis._bindAction( action,\r\n\t\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\r\n\r\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar bindings = action._propertyBindings;\r\n\r\n\t\t\t// increment reference counts / sort out state\r\n\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\r\n\r\n\t\t\t\tvar binding = bindings[ i ];\r\n\r\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\r\n\r\n\t\t\t\t\tthis._lendBinding( binding );\r\n\t\t\t\t\tbinding.saveOriginalState();\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis._lendAction( action );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t_deactivateAction: function( action ) {\r\n\r\n\t\tif ( this._isActiveAction( action ) ) {\r\n\r\n\t\t\tvar bindings = action._propertyBindings;\r\n\r\n\t\t\t// decrement reference counts / sort out state\r\n\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\r\n\r\n\t\t\t\tvar binding = bindings[ i ];\r\n\r\n\t\t\t\tif ( -- binding.useCount === 0 ) {\r\n\r\n\t\t\t\t\tbinding.restoreOriginalState();\r\n\t\t\t\t\tthis._takeBackBinding( binding );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis._takeBackAction( action );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t// Memory manager\r\n\r\n\t_initMemoryManager: function() {\r\n\r\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\r\n\t\tthis._nActiveActions = 0;\r\n\r\n\t\tthis._actionsByClip = {};\r\n\t\t// inside:\r\n\t\t// {\r\n\t\t// \t\tknownActions: Array< _Action >\t- used as prototypes\r\n\t\t// \t\tactionByRoot: _Action\t\t\t- lookup\r\n\t\t// }\r\n\r\n\r\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\r\n\t\tthis._nActiveBindings = 0;\r\n\r\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\r\n\r\n\r\n\t\tthis._controlInterpolants = []; // same game as above\r\n\t\tthis._nActiveControlInterpolants = 0;\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tthis.stats = {\r\n\r\n\t\t\tactions: {\r\n\t\t\t\tget total() { return scope._actions.length; },\r\n\t\t\t\tget inUse() { return scope._nActiveActions; }\r\n\t\t\t},\r\n\t\t\tbindings: {\r\n\t\t\t\tget total() { return scope._bindings.length; },\r\n\t\t\t\tget inUse() { return scope._nActiveBindings; }\r\n\t\t\t},\r\n\t\t\tcontrolInterpolants: {\r\n\t\t\t\tget total() { return scope._controlInterpolants.length; },\r\n\t\t\t\tget inUse() { return scope._nActiveControlInterpolants; }\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t},\r\n\r\n\t// Memory management for _Action objects\r\n\r\n\t_isActiveAction: function( action ) {\r\n\r\n\t\tvar index = action._cacheIndex;\r\n\t\treturn index !== null && index < this._nActiveActions;\r\n\r\n\t},\r\n\r\n\t_addInactiveAction: function( action, clipUuid, rootUuid ) {\r\n\r\n\t\tvar actions = this._actions,\r\n\t\t\tactionsByClip = this._actionsByClip,\r\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\r\n\r\n\t\tif ( actionsForClip === undefined ) {\r\n\r\n\t\t\tactionsForClip = {\r\n\r\n\t\t\t\tknownActions: [ action ],\r\n\t\t\t\tactionByRoot: {}\r\n\r\n\t\t\t};\r\n\r\n\t\t\taction._byClipCacheIndex = 0;\r\n\r\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tvar knownActions = actionsForClip.knownActions;\r\n\r\n\t\t\taction._byClipCacheIndex = knownActions.length;\r\n\t\t\tknownActions.push( action );\r\n\r\n\t\t}\r\n\r\n\t\taction._cacheIndex = actions.length;\r\n\t\tactions.push( action );\r\n\r\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\r\n\r\n\t},\r\n\r\n\t_removeInactiveAction: function( action ) {\r\n\r\n\t\tvar actions = this._actions,\r\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\r\n\t\t\tcacheIndex = action._cacheIndex;\r\n\r\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\r\n\t\tactions[ cacheIndex ] = lastInactiveAction;\r\n\t\tactions.pop();\r\n\r\n\t\taction._cacheIndex = null;\r\n\r\n\r\n\t\tvar clipUuid = action._clip.uuid,\r\n\t\t\tactionsByClip = this._actionsByClip,\r\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\r\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\r\n\r\n\t\t\tlastKnownAction =\r\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\r\n\r\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\r\n\r\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\r\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\r\n\t\tknownActionsForClip.pop();\r\n\r\n\t\taction._byClipCacheIndex = null;\r\n\r\n\r\n\t\tvar actionByRoot = actionsForClip.actionByRoot,\r\n\t\t\trootUuid = ( actions._localRoot || this._root ).uuid;\r\n\r\n\t\tdelete actionByRoot[ rootUuid ];\r\n\r\n\t\tif ( knownActionsForClip.length === 0 ) {\r\n\r\n\t\t\tdelete actionsByClip[ clipUuid ];\r\n\r\n\t\t}\r\n\r\n\t\tthis._removeInactiveBindingsForAction( action );\r\n\r\n\t},\r\n\r\n\t_removeInactiveBindingsForAction: function( action ) {\r\n\r\n\t\tvar bindings = action._propertyBindings;\r\n\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\r\n\r\n\t\t\tvar binding = bindings[ i ];\r\n\r\n\t\t\tif ( -- binding.referenceCount === 0 ) {\r\n\r\n\t\t\t\tthis._removeInactiveBinding( binding );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t_lendAction: function( action ) {\r\n\r\n\t\t// [ active actions | inactive actions ]\r\n\t\t// [ active actions >| inactive actions ]\r\n\t\t// s a\r\n\t\t// <-swap->\r\n\t\t// a s\r\n\r\n\t\tvar actions = this._actions,\r\n\t\t\tprevIndex = action._cacheIndex,\r\n\r\n\t\t\tlastActiveIndex = this._nActiveActions ++,\r\n\r\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\r\n\r\n\t\taction._cacheIndex = lastActiveIndex;\r\n\t\tactions[ lastActiveIndex ] = action;\r\n\r\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\r\n\t\tactions[ prevIndex ] = firstInactiveAction;\r\n\r\n\t},\r\n\r\n\t_takeBackAction: function( action ) {\r\n\r\n\t\t// [ active actions | inactive actions ]\r\n\t\t// [ active actions |< inactive actions ]\r\n\t\t// a s\r\n\t\t// <-swap->\r\n\t\t// s a\r\n\r\n\t\tvar actions = this._actions,\r\n\t\t\tprevIndex = action._cacheIndex,\r\n\r\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\r\n\r\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\r\n\r\n\t\taction._cacheIndex = firstInactiveIndex;\r\n\t\tactions[ firstInactiveIndex ] = action;\r\n\r\n\t\tlastActiveAction._cacheIndex = prevIndex;\r\n\t\tactions[ prevIndex ] = lastActiveAction;\r\n\r\n\t},\r\n\r\n\t// Memory management for PropertyMixer objects\r\n\r\n\t_addInactiveBinding: function( binding, rootUuid, trackName ) {\r\n\r\n\t\tvar bindingsByRoot = this._bindingsByRootAndName,\r\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\r\n\r\n\t\t\tbindings = this._bindings;\r\n\r\n\t\tif ( bindingByName === undefined ) {\r\n\r\n\t\t\tbindingByName = {};\r\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\r\n\r\n\t\t}\r\n\r\n\t\tbindingByName[ trackName ] = binding;\r\n\r\n\t\tbinding._cacheIndex = bindings.length;\r\n\t\tbindings.push( binding );\r\n\r\n\t},\r\n\r\n\t_removeInactiveBinding: function( binding ) {\r\n\r\n\t\tvar bindings = this._bindings,\r\n\t\t\tpropBinding = binding.binding,\r\n\t\t\trootUuid = propBinding.rootNode.uuid,\r\n\t\t\ttrackName = propBinding.path,\r\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\r\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\r\n\r\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\r\n\t\t\tcacheIndex = binding._cacheIndex;\r\n\r\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\r\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\r\n\t\tbindings.pop();\r\n\r\n\t\tdelete bindingByName[ trackName ];\r\n\r\n\t\tremove_empty_map: {\r\n\r\n\t\t\tfor ( var _ in bindingByName ) break remove_empty_map;\r\n\r\n\t\t\tdelete bindingsByRoot[ rootUuid ];\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t_lendBinding: function( binding ) {\r\n\r\n\t\tvar bindings = this._bindings,\r\n\t\t\tprevIndex = binding._cacheIndex,\r\n\r\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\r\n\r\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\r\n\r\n\t\tbinding._cacheIndex = lastActiveIndex;\r\n\t\tbindings[ lastActiveIndex ] = binding;\r\n\r\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\r\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\r\n\r\n\t},\r\n\r\n\t_takeBackBinding: function( binding ) {\r\n\r\n\t\tvar bindings = this._bindings,\r\n\t\t\tprevIndex = binding._cacheIndex,\r\n\r\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\r\n\r\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\r\n\r\n\t\tbinding._cacheIndex = firstInactiveIndex;\r\n\t\tbindings[ firstInactiveIndex ] = binding;\r\n\r\n\t\tlastActiveBinding._cacheIndex = prevIndex;\r\n\t\tbindings[ prevIndex ] = lastActiveBinding;\r\n\r\n\t},\r\n\r\n\r\n\t// Memory management of Interpolants for weight and time scale\r\n\r\n\t_lendControlInterpolant: function() {\r\n\r\n\t\tvar interpolants = this._controlInterpolants,\r\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++,\r\n\t\t\tinterpolant = interpolants[ lastActiveIndex ];\r\n\r\n\t\tif ( interpolant === undefined ) {\r\n\r\n\t\t\tinterpolant = new THREE.LinearInterpolant(\r\n\t\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\r\n\t\t\t\t\t\t1, this._controlInterpolantsResultBuffer );\r\n\r\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\r\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\r\n\r\n\t\t}\r\n\r\n\t\treturn interpolant;\r\n\r\n\t},\r\n\r\n\t_takeBackControlInterpolant: function( interpolant ) {\r\n\r\n\t\tvar interpolants = this._controlInterpolants,\r\n\t\t\tprevIndex = interpolant.__cacheIndex,\r\n\r\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\r\n\r\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\r\n\r\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\r\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\r\n\r\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\r\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\r\n\r\n\t},\r\n\r\n\t_controlInterpolantsResultBuffer: new Float32Array( 1 )\r\n\r\n} );\r\n\r\n// File:src/animation/AnimationObjectGroup.js\r\n\r\n/**\r\n *\r\n * A group of objects that receives a shared animation state.\r\n *\r\n * Usage:\r\n *\r\n * \t-\tAdd objects you would otherwise pass as 'root' to the\r\n * \t\tconstructor or the .clipAction method of AnimationMixer.\r\n *\r\n * \t-\tInstead pass this object as 'root'.\r\n *\r\n * \t-\tYou can also add and remove objects later when the mixer\r\n * \t\tis running.\r\n *\r\n * Note:\r\n *\r\n * \tObjects of this class appear as one object to the mixer,\r\n * \tso cache control of the individual objects must be done\r\n * \ton the group.\r\n *\r\n * Limitation:\r\n *\r\n * \t- \tThe animated properties must be compatible among the\r\n * \t\tall objects in the group.\r\n *\r\n * -\tA single property can either be controlled through a\r\n * \ttarget group or directly, but not both.\r\n *\r\n * @author tschw\r\n */\r\n\r\nTHREE.AnimationObjectGroup = function( var_args ) {\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\t// cached objects followed by the active ones\r\n\tthis._objects = Array.prototype.slice.call( arguments );\r\n\r\n\tthis.nCachedObjects_ = 0;\t\t\t// threshold\r\n\t// note: read by PropertyBinding.Composite\r\n\r\n\tvar indices = {};\r\n\tthis._indicesByUUID = indices;\t\t// for bookkeeping\r\n\r\n\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\r\n\r\n\t\tindices[ arguments[ i ].uuid ] = i;\r\n\r\n\t}\r\n\r\n\tthis._paths = [];\t\t\t\t\t// inside: string\r\n\tthis._parsedPaths = [];\t\t\t\t// inside: { we don't care, here }\r\n\tthis._bindings = []; \t\t\t\t// inside: Array< PropertyBinding >\r\n\tthis._bindingsIndicesByPath = {}; \t// inside: indices in these arrays\r\n\r\n\tvar scope = this;\r\n\r\n\tthis.stats = {\r\n\r\n\t\tobjects: {\r\n\t\t\tget total() { return scope._objects.length; },\r\n\t\t\tget inUse() { return this.total - scope.nCachedObjects_; }\r\n\t\t},\r\n\r\n\t\tget bindingsPerObject() { return scope._bindings.length; }\r\n\r\n\t};\r\n\r\n};\r\n\r\nTHREE.AnimationObjectGroup.prototype = {\r\n\r\n\tconstructor: THREE.AnimationObjectGroup,\r\n\r\n\tadd: function( var_args ) {\r\n\r\n\t\tvar objects = this._objects,\r\n\t\t\tnObjects = objects.length,\r\n\t\t\tnCachedObjects = this.nCachedObjects_,\r\n\t\t\tindicesByUUID = this._indicesByUUID,\r\n\t\t\tpaths = this._paths,\r\n\t\t\tparsedPaths = this._parsedPaths,\r\n\t\t\tbindings = this._bindings,\r\n\t\t\tnBindings = bindings.length;\r\n\r\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\r\n\r\n\t\t\tvar object = arguments[ i ],\r\n\t\t\t\tuuid = object.uuid,\r\n\t\t\t\tindex = indicesByUUID[ uuid ];\r\n\r\n\t\t\tif ( index === undefined ) {\r\n\r\n\t\t\t\t// unknown object -> add it to the ACTIVE region\r\n\r\n\t\t\t\tindex = nObjects ++;\r\n\t\t\t\tindicesByUUID[ uuid ] = index;\r\n\t\t\t\tobjects.push( object );\r\n\r\n\t\t\t\t// accounting is done, now do the same for all bindings\r\n\r\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\r\n\r\n\t\t\t\t\tbindings[ j ].push(\r\n\t\t\t\t\t\t\tnew THREE.PropertyBinding(\r\n\t\t\t\t\t\t\t\tobject, paths[ j ], parsedPaths[ j ] ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( index < nCachedObjects ) {\r\n\r\n\t\t\t\tvar knownObject = objects[ index ];\r\n\r\n\t\t\t\t// move existing object to the ACTIVE region\r\n\r\n\t\t\t\tvar firstActiveIndex = -- nCachedObjects,\r\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\r\n\r\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\r\n\t\t\t\tobjects[ index ] = lastCachedObject;\r\n\r\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\r\n\t\t\t\tobjects[ firstActiveIndex ] = object;\r\n\r\n\t\t\t\t// accounting is done, now do the same for all bindings\r\n\r\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\r\n\r\n\t\t\t\t\tvar bindingsForPath = bindings[ j ],\r\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\r\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\r\n\r\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\r\n\r\n\t\t\t\t\tif ( binding === undefined ) {\r\n\r\n\t\t\t\t\t\t// since we do not bother to create new bindings\r\n\t\t\t\t\t\t// for objects that are cached, the binding may\r\n\t\t\t\t\t\t// or may not exist\r\n\r\n\t\t\t\t\t\tbinding = new THREE.PropertyBinding(\r\n\t\t\t\t\t\t\t\tobject, paths[ j ], parsedPaths[ j ] );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( objects[ index ] !== knownObject) {\r\n\r\n\t\t\t\tconsole.error( \"Different objects with the same UUID \" +\r\n\t\t\t\t\t\t\"detected. Clean the caches or recreate your \" +\r\n\t\t\t\t\t\t\"infrastructure when reloading scenes...\" );\r\n\r\n\t\t\t} // else the object is already where we want it to be\r\n\r\n\t\t} // for arguments\r\n\r\n\t\tthis.nCachedObjects_ = nCachedObjects;\r\n\r\n\t},\r\n\r\n\tremove: function( var_args ) {\r\n\r\n\t\tvar objects = this._objects,\r\n\t\t\tnObjects = objects.length,\r\n\t\t\tnCachedObjects = this.nCachedObjects_,\r\n\t\t\tindicesByUUID = this._indicesByUUID,\r\n\t\t\tbindings = this._bindings,\r\n\t\t\tnBindings = bindings.length;\r\n\r\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\r\n\r\n\t\t\tvar object = arguments[ i ],\r\n\t\t\t\tuuid = object.uuid,\r\n\t\t\t\tindex = indicesByUUID[ uuid ];\r\n\r\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\r\n\r\n\t\t\t\t// move existing object into the CACHED region\r\n\r\n\t\t\t\tvar lastCachedIndex = nCachedObjects ++,\r\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\r\n\r\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\r\n\t\t\t\tobjects[ index ] = firstActiveObject;\r\n\r\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\r\n\t\t\t\tobjects[ lastCachedIndex ] = object;\r\n\r\n\t\t\t\t// accounting is done, now do the same for all bindings\r\n\r\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\r\n\r\n\t\t\t\t\tvar bindingsForPath = bindings[ j ],\r\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\r\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\r\n\r\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\r\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t} // for arguments\r\n\r\n\t\tthis.nCachedObjects_ = nCachedObjects;\r\n\r\n\t},\r\n\r\n\t// remove & forget\r\n\tuncache: function( var_args ) {\r\n\r\n\t\tvar objects = this._objects,\r\n\t\t\tnObjects = objects.length,\r\n\t\t\tnCachedObjects = this.nCachedObjects_,\r\n\t\t\tindicesByUUID = this._indicesByUUID,\r\n\t\t\tbindings = this._bindings,\r\n\t\t\tnBindings = bindings.length;\r\n\r\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\r\n\r\n\t\t\tvar object = arguments[ i ],\r\n\t\t\t\tuuid = object.uuid,\r\n\t\t\t\tindex = indicesByUUID[ uuid ];\r\n\r\n\t\t\tif ( index !== undefined ) {\r\n\r\n\t\t\t\tdelete indicesByUUID[ uuid ];\r\n\r\n\t\t\t\tif ( index < nCachedObjects ) {\r\n\r\n\t\t\t\t\t// object is cached, shrink the CACHED region\r\n\r\n\t\t\t\t\tvar firstActiveIndex = -- nCachedObjects,\r\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\r\n\t\t\t\t\t\tlastIndex = -- nObjects,\r\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\r\n\r\n\t\t\t\t\t// last cached object takes this object's place\r\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\r\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\r\n\r\n\t\t\t\t\t// last object goes to the activated slot and pop\r\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\r\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\r\n\t\t\t\t\tobjects.pop();\r\n\r\n\t\t\t\t\t// accounting is done, now do the same for all bindings\r\n\r\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\r\n\r\n\t\t\t\t\t\tvar bindingsForPath = bindings[ j ],\r\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\r\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\r\n\r\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\r\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\r\n\t\t\t\t\t\tbindingsForPath.pop();\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// object is active, just swap with the last and pop\r\n\r\n\t\t\t\t\tvar lastIndex = -- nObjects,\r\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\r\n\r\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\r\n\t\t\t\t\tobjects[ index ] = lastObject;\r\n\t\t\t\t\tobjects.pop();\r\n\r\n\t\t\t\t\t// accounting is done, now do the same for all bindings\r\n\r\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\r\n\r\n\t\t\t\t\t\tvar bindingsForPath = bindings[ j ];\r\n\r\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\r\n\t\t\t\t\t\tbindingsForPath.pop();\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} // cached or active\r\n\r\n\t\t\t} // if object is known\r\n\r\n\t\t} // for arguments\r\n\r\n\t\tthis.nCachedObjects_ = nCachedObjects;\r\n\r\n\t},\r\n\r\n\t// Internal interface used by befriended PropertyBinding.Composite:\r\n\r\n\tsubscribe_: function( path, parsedPath ) {\r\n\t\t// returns an array of bindings for the given path that is changed\r\n\t\t// according to the contained objects in the group\r\n\r\n\t\tvar indicesByPath = this._bindingsIndicesByPath,\r\n\t\t\tindex = indicesByPath[ path ],\r\n\t\t\tbindings = this._bindings;\r\n\r\n\t\tif ( index !== undefined ) return bindings[ index ];\r\n\r\n\t\tvar paths = this._paths,\r\n\t\t\tparsedPaths = this._parsedPaths,\r\n\t\t\tobjects = this._objects,\r\n\t\t\tnObjects = objects.length,\r\n\t\t\tnCachedObjects = this.nCachedObjects_,\r\n\t\t\tbindingsForPath = new Array( nObjects );\r\n\r\n\t\tindex = bindings.length;\r\n\r\n\t\tindicesByPath[ path ] = index;\r\n\r\n\t\tpaths.push( path );\r\n\t\tparsedPaths.push( parsedPath );\r\n\t\tbindings.push( bindingsForPath );\r\n\r\n\t\tfor ( var i = nCachedObjects,\r\n\t\t\t\tn = objects.length; i !== n; ++ i ) {\r\n\r\n\t\t\tvar object = objects[ i ];\r\n\r\n\t\t\tbindingsForPath[ i ] =\r\n\t\t\t\t\tnew THREE.PropertyBinding( object, path, parsedPath );\r\n\r\n\t\t}\r\n\r\n\t\treturn bindingsForPath;\r\n\r\n\t},\r\n\r\n\tunsubscribe_: function( path ) {\r\n\t\t// tells the group to forget about a property path and no longer\r\n\t\t// update the array previously obtained with 'subscribe_'\r\n\r\n\t\tvar indicesByPath = this._bindingsIndicesByPath,\r\n\t\t\tindex = indicesByPath[ path ];\r\n\r\n\t\tif ( index !== undefined ) {\r\n\r\n\t\t\tvar paths = this._paths,\r\n\t\t\t\tparsedPaths = this._parsedPaths,\r\n\t\t\t\tbindings = this._bindings,\r\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\r\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\r\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\r\n\r\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\r\n\r\n\t\t\tbindings[ index ] = lastBindings;\r\n\t\t\tbindings.pop();\r\n\r\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\r\n\t\t\tparsedPaths.pop();\r\n\r\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\r\n\t\t\tpaths.pop();\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\n\r\n// File:src/animation/AnimationUtils.js\r\n\r\n/**\r\n * @author tschw\r\n * @author Ben Houston / http://clara.io/\r\n * @author David Sarno / http://lighthaus.us/\r\n */\r\n\r\nTHREE.AnimationUtils = {\r\n\r\n\t// same as Array.prototype.slice, but also works on typed arrays\r\n\tarraySlice: function( array, from, to ) {\r\n\r\n\t\tif ( THREE.AnimationUtils.isTypedArray( array ) ) {\r\n\r\n\t\t\treturn new array.constructor( array.subarray( from, to ) );\r\n\r\n\t\t}\r\n\r\n\t\treturn array.slice( from, to );\r\n\r\n\t},\r\n\r\n\t// converts an array to a specific type\r\n\tconvertArray: function( array, type, forceClone ) {\r\n\r\n\t\tif ( ! array || // let 'undefined' and 'null' pass\r\n\t\t\t\t! forceClone && array.constructor === type ) return array;\r\n\r\n\t\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\r\n\r\n\t\t\treturn new type( array ); // create typed array\r\n\r\n\t\t}\r\n\r\n\t\treturn Array.prototype.slice.call( array ); // create Array\r\n\r\n\t},\r\n\r\n\tisTypedArray: function( object ) {\r\n\r\n\t\treturn ArrayBuffer.isView( object ) &&\r\n\t\t\t\t! ( object instanceof DataView );\r\n\r\n\t},\r\n\r\n\t// returns an array by which times and values can be sorted\r\n\tgetKeyframeOrder: function( times ) {\r\n\r\n\t\tfunction compareTime( i, j ) {\r\n\r\n\t\t\treturn times[ i ] - times[ j ];\r\n\r\n\t\t}\r\n\r\n\t\tvar n = times.length;\r\n\t\tvar result = new Array( n );\r\n\t\tfor ( var i = 0; i !== n; ++ i ) result[ i ] = i;\r\n\r\n\t\tresult.sort( compareTime );\r\n\r\n\t\treturn result;\r\n\r\n\t},\r\n\r\n\t// uses the array previously returned by 'getKeyframeOrder' to sort data\r\n\tsortedArray: function( values, stride, order ) {\r\n\r\n\t\tvar nValues = values.length;\r\n\t\tvar result = new values.constructor( nValues );\r\n\r\n\t\tfor ( var i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\r\n\r\n\t\t\tvar srcOffset = order[ i ] * stride;\r\n\r\n\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\r\n\r\n\t\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\r\n\t},\r\n\r\n\t// function for parsing AOS keyframe formats\r\n\tflattenJSON: function( jsonKeys, times, values, valuePropertyName ) {\r\n\r\n\t\tvar i = 1, key = jsonKeys[ 0 ];\r\n\r\n\t\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\r\n\r\n\t\t\tkey = jsonKeys[ i ++ ];\r\n\r\n\t\t}\r\n\r\n\t\tif ( key === undefined ) return; // no data\r\n\r\n\t\tvar value = key[ valuePropertyName ];\r\n\t\tif ( value === undefined ) return; // no data\r\n\r\n\t\tif ( Array.isArray( value ) ) {\r\n\r\n\t\t\tdo {\r\n\r\n\t\t\t\tvalue = key[ valuePropertyName ];\r\n\r\n\t\t\t\tif ( value !== undefined ) {\r\n\r\n\t\t\t\t\ttimes.push( key.time );\r\n\t\t\t\t\tvalues.push.apply( values, value ); // push all elements\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkey = jsonKeys[ i ++ ];\r\n\r\n\t\t\t} while ( key !== undefined );\r\n\r\n\t\t} else if ( value.toArray !== undefined ) {\r\n\t\t\t// ...assume THREE.Math-ish\r\n\r\n\t\t\tdo {\r\n\r\n\t\t\t\tvalue = key[ valuePropertyName ];\r\n\r\n\t\t\t\tif ( value !== undefined ) {\r\n\r\n\t\t\t\t\ttimes.push( key.time );\r\n\t\t\t\t\tvalue.toArray( values, values.length );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkey = jsonKeys[ i ++ ];\r\n\r\n\t\t\t} while ( key !== undefined );\r\n\r\n\t\t} else {\r\n\t\t\t// otherwise push as-is\r\n\r\n\t\t\tdo {\r\n\r\n\t\t\t\tvalue = key[ valuePropertyName ];\r\n\r\n\t\t\t\tif ( value !== undefined ) {\r\n\r\n\t\t\t\t\ttimes.push( key.time );\r\n\t\t\t\t\tvalues.push( value );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkey = jsonKeys[ i ++ ];\r\n\r\n\t\t\t} while ( key !== undefined );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/animation/KeyframeTrack.js\r\n\r\n/**\r\n *\r\n * A timed sequence of keyframes for a specific property.\r\n *\r\n *\r\n * @author Ben Houston / http://clara.io/\r\n * @author David Sarno / http://lighthaus.us/\r\n * @author tschw\r\n */\r\n\r\nTHREE.KeyframeTrack = function ( name, times, values, interpolation ) {\r\n\r\n\tif( name === undefined ) throw new Error( \"track name is undefined\" );\r\n\r\n\tif( times === undefined || times.length === 0 ) {\r\n\r\n\t\tthrow new Error( \"no keyframes in track named \" + name );\r\n\r\n\t}\r\n\r\n\tthis.name = name;\r\n\r\n\tthis.times = THREE.AnimationUtils.convertArray( times, this.TimeBufferType );\r\n\tthis.values = THREE.AnimationUtils.convertArray( values, this.ValueBufferType );\r\n\r\n\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\r\n\r\n\tthis.validate();\r\n\tthis.optimize();\r\n\r\n};\r\n\r\nTHREE.KeyframeTrack.prototype = {\r\n\r\n\tconstructor: THREE.KeyframeTrack,\r\n\r\n\tTimeBufferType: Float32Array,\r\n\tValueBufferType: Float32Array,\r\n\r\n\tDefaultInterpolation: THREE.InterpolateLinear,\r\n\r\n\tInterpolantFactoryMethodDiscrete: function( result ) {\r\n\r\n\t\treturn new THREE.DiscreteInterpolant(\r\n\t\t\t\tthis.times, this.values, this.getValueSize(), result );\r\n\r\n\t},\r\n\r\n\tInterpolantFactoryMethodLinear: function( result ) {\r\n\r\n\t\treturn new THREE.LinearInterpolant(\r\n\t\t\t\tthis.times, this.values, this.getValueSize(), result );\r\n\r\n\t},\r\n\r\n\tInterpolantFactoryMethodSmooth: function( result ) {\r\n\r\n\t\treturn new THREE.CubicInterpolant(\r\n\t\t\t\tthis.times, this.values, this.getValueSize(), result );\r\n\r\n\t},\r\n\r\n\tsetInterpolation: function( interpolation ) {\r\n\r\n\t\tvar factoryMethod;\r\n\r\n\t\tswitch ( interpolation ) {\r\n\r\n\t\t\tcase THREE.InterpolateDiscrete:\r\n\r\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase THREE.InterpolateLinear:\r\n\r\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase THREE.InterpolateSmooth:\r\n\r\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t}\r\n\r\n\t\tif ( factoryMethod === undefined ) {\r\n\r\n\t\t\tvar message = \"unsupported interpolation for \" +\r\n\t\t\t\t\tthis.ValueTypeName + \" keyframe track named \" + this.name;\r\n\r\n\t\t\tif ( this.createInterpolant === undefined ) {\r\n\r\n\t\t\t\t// fall back to default, unless the default itself is messed up\r\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\r\n\r\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tconsole.warn( message );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tthis.createInterpolant = factoryMethod;\r\n\r\n\t},\r\n\r\n\tgetInterpolation: function() {\r\n\r\n\t\tswitch ( this.createInterpolant ) {\r\n\r\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\r\n\r\n\t\t\t\treturn THREE.InterpolateDiscrete;\r\n\r\n\t\t\tcase this.InterpolantFactoryMethodLinear:\r\n\r\n\t\t\t\treturn THREE.InterpolateLinear;\r\n\r\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\r\n\r\n\t\t\t\treturn THREE.InterpolateSmooth;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tgetValueSize: function() {\r\n\r\n\t\treturn this.values.length / this.times.length;\r\n\r\n\t},\r\n\r\n\t// move all keyframes either forwards or backwards in time\r\n\tshift: function( timeOffset ) {\r\n\r\n\t\tif( timeOffset !== 0.0 ) {\r\n\r\n\t\t\tvar times = this.times;\r\n\r\n\t\t\tfor( var i = 0, n = times.length; i !== n; ++ i ) {\r\n\r\n\t\t\t\ttimes[ i ] += timeOffset;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\r\n\tscale: function( timeScale ) {\r\n\r\n\t\tif( timeScale !== 1.0 ) {\r\n\r\n\t\t\tvar times = this.times;\r\n\r\n\t\t\tfor( var i = 0, n = times.length; i !== n; ++ i ) {\r\n\r\n\t\t\t\ttimes[ i ] *= timeScale;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\r\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\r\n\ttrim: function( startTime, endTime ) {\r\n\r\n\t\tvar times = this.times,\r\n\t\t\tnKeys = times.length,\r\n\t\t\tfrom = 0,\r\n\t\t\tto = nKeys - 1;\r\n\r\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) ++ from;\r\n\t\twhile ( to !== -1 && times[ to ] > endTime ) -- to;\r\n\r\n\t\t++ to; // inclusive -> exclusive bound\r\n\r\n\t\tif( from !== 0 || to !== nKeys ) {\r\n\r\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\r\n\t\t\tif ( from >= to ) to = Math.max( to , 1 ), from = to - 1;\r\n\r\n\t\t\tvar stride = this.getValueSize();\r\n\t\t\tthis.times = THREE.AnimationUtils.arraySlice( times, from, to );\r\n\t\t\tthis.values = THREE.AnimationUtils.\r\n\t\t\t\t\tarraySlice( this.values, from * stride, to * stride );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\r\n\tvalidate: function() {\r\n\r\n\t\tvar valid = true;\r\n\r\n\t\tvar valueSize = this.getValueSize();\r\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\r\n\r\n\t\t\tconsole.error( \"invalid value size in track\", this );\r\n\t\t\tvalid = false;\r\n\r\n\t\t}\r\n\r\n\t\tvar times = this.times,\r\n\t\t\tvalues = this.values,\r\n\r\n\t\t\tnKeys = times.length;\r\n\r\n\t\tif( nKeys === 0 ) {\r\n\r\n\t\t\tconsole.error( \"track is empty\", this );\r\n\t\t\tvalid = false;\r\n\r\n\t\t}\r\n\r\n\t\tvar prevTime = null;\r\n\r\n\t\tfor( var i = 0; i !== nKeys; i ++ ) {\r\n\r\n\t\t\tvar currTime = times[ i ];\r\n\r\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\r\n\r\n\t\t\t\tconsole.error( \"time is not a valid number\", this, i, currTime );\r\n\t\t\t\tvalid = false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif( prevTime !== null && prevTime > currTime ) {\r\n\r\n\t\t\t\tconsole.error( \"out of order keys\", this, i, currTime, prevTime );\r\n\t\t\t\tvalid = false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tprevTime = currTime;\r\n\r\n\t\t}\r\n\r\n\t\tif ( values !== undefined ) {\r\n\r\n\t\t\tif ( THREE.AnimationUtils.isTypedArray( values ) ) {\r\n\r\n\t\t\t\tfor ( var i = 0, n = values.length; i !== n; ++ i ) {\r\n\r\n\t\t\t\t\tvar value = values[ i ];\r\n\r\n\t\t\t\t\tif ( isNaN( value ) ) {\r\n\r\n\t\t\t\t\t\tconsole.error( \"value is not a valid number\", this, i, value );\r\n\t\t\t\t\t\tvalid = false;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\r\n\t},\r\n\r\n\t// removes equivalent sequential keys as common in morph target sequences\r\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\r\n\toptimize: function() {\r\n\r\n\t\tvar times = this.times,\r\n\t\t\tvalues = this.values,\r\n\t\t\tstride = this.getValueSize(),\r\n\r\n\t\t\twriteIndex = 1;\r\n\r\n\t\tfor( var i = 1, n = times.length - 1; i <= n; ++ i ) {\r\n\r\n\t\t\tvar keep = false;\r\n\r\n\t\t\tvar time = times[ i ];\r\n\t\t\tvar timeNext = times[ i + 1 ];\r\n\r\n\t\t\t// remove adjacent keyframes scheduled at the same time\r\n\r\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) {\r\n\r\n\t\t\t\t// remove unnecessary keyframes same as their neighbors\r\n\t\t\t\tvar offset = i * stride,\r\n\t\t\t\t\toffsetP = offset - stride,\r\n\t\t\t\t\toffsetN = offset + stride;\r\n\r\n\t\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\r\n\r\n\t\t\t\t\tvar value = values[ offset + j ];\r\n\r\n\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\r\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\r\n\r\n\t\t\t\t\t\tkeep = true;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// in-place compaction\r\n\r\n\t\t\tif ( keep ) {\r\n\r\n\t\t\t\tif ( i !== writeIndex ) {\r\n\r\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\r\n\r\n\t\t\t\t\tvar readOffset = i * stride,\r\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\r\n\r\n\t\t\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\r\n\r\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\r\n\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t++ writeIndex;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( writeIndex !== times.length ) {\r\n\r\n\t\t\tthis.times = THREE.AnimationUtils.arraySlice( times, 0, writeIndex );\r\n\t\t\tthis.values = THREE.AnimationUtils.arraySlice( values, 0, writeIndex * stride );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// Static methods:\r\n\r\nObject.assign( THREE.KeyframeTrack, {\r\n\r\n\t// Serialization (in static context, because of constructor invocation\r\n\t// and automatic invocation of .toJSON):\r\n\r\n\tparse: function( json ) {\r\n\r\n\t\tif( json.type === undefined ) {\r\n\r\n\t\t\tthrow new Error( \"track type undefined, can not parse\" );\r\n\r\n\t\t}\r\n\r\n\t\tvar trackType = THREE.KeyframeTrack._getTrackTypeForValueTypeName( json.type );\r\n\r\n\t\tif ( json.times === undefined ) {\r\n\r\n\t\t\tvar times = [], values = [];\r\n\r\n\t\t\tTHREE.AnimationUtils.flattenJSON( json.keys, times, values, 'value' );\r\n\r\n\t\t\tjson.times = times;\r\n\t\t\tjson.values = values;\r\n\r\n\t\t}\r\n\r\n\t\t// derived classes can define a static parse method\r\n\t\tif ( trackType.parse !== undefined ) {\r\n\r\n\t\t\treturn trackType.parse( json );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// by default, we asssume a constructor compatible with the base\r\n\t\t\treturn new trackType(\r\n\t\t\t\t\tjson.name, json.times, json.values, json.interpolation );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\ttoJSON: function( track ) {\r\n\r\n\t\tvar trackType = track.constructor;\r\n\r\n\t\tvar json;\r\n\r\n\t\t// derived classes can define a static toJSON method\r\n\t\tif ( trackType.toJSON !== undefined ) {\r\n\r\n\t\t\tjson = trackType.toJSON( track );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// by default, we assume the data can be serialized as-is\r\n\t\t\tjson = {\r\n\r\n\t\t\t\t'name': track.name,\r\n\t\t\t\t'times': THREE.AnimationUtils.convertArray( track.times, Array ),\r\n\t\t\t\t'values': THREE.AnimationUtils.convertArray( track.values, Array )\r\n\r\n\t\t\t};\r\n\r\n\t\t\tvar interpolation = track.getInterpolation();\r\n\r\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\r\n\r\n\t\t\t\tjson.interpolation = interpolation;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tjson.type = track.ValueTypeName; // mandatory\r\n\r\n\t\treturn json;\r\n\r\n\t},\r\n\r\n\t_getTrackTypeForValueTypeName: function( typeName ) {\r\n\r\n\t\tswitch( typeName.toLowerCase() ) {\r\n\r\n\t\t\tcase \"scalar\":\r\n\t\t\tcase \"double\":\r\n\t\t\tcase \"float\":\r\n\t\t\tcase \"number\":\r\n\t\t\tcase \"integer\":\r\n\r\n\t\t\t\treturn THREE.NumberKeyframeTrack;\r\n\r\n\t\t\tcase \"vector\":\r\n\t\t\tcase \"vector2\":\r\n\t\t\tcase \"vector3\":\r\n\t\t\tcase \"vector4\":\r\n\r\n\t\t\t\treturn THREE.VectorKeyframeTrack;\r\n\r\n\t\t\tcase \"color\":\r\n\r\n\t\t\t\treturn THREE.ColorKeyframeTrack;\r\n\r\n\t\t\tcase \"quaternion\":\r\n\r\n\t\t\t\treturn THREE.QuaternionKeyframeTrack;\r\n\r\n\t\t\tcase \"bool\":\r\n\t\t\tcase \"boolean\":\r\n\r\n\t\t\t\treturn THREE.BooleanKeyframeTrack;\r\n\r\n\t\t\tcase \"string\":\r\n\r\n\t\t\t\treturn THREE.StringKeyframeTrack;\r\n\r\n\t\t}\r\n\r\n\t\tthrow new Error( \"Unsupported typeName: \" + typeName );\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/animation/PropertyBinding.js\r\n\r\n/**\r\n *\r\n * A reference to a real property in the scene graph.\r\n *\r\n *\r\n * @author Ben Houston / http://clara.io/\r\n * @author David Sarno / http://lighthaus.us/\r\n * @author tschw\r\n */\r\n\r\nTHREE.PropertyBinding = function ( rootNode, path, parsedPath ) {\r\n\r\n\tthis.path = path;\r\n\tthis.parsedPath = parsedPath ||\r\n\t\t\tTHREE.PropertyBinding.parseTrackName( path );\r\n\r\n\tthis.node = THREE.PropertyBinding.findNode(\r\n\t\t\trootNode, this.parsedPath.nodeName ) || rootNode;\r\n\r\n\tthis.rootNode = rootNode;\r\n\r\n};\r\n\r\nTHREE.PropertyBinding.prototype = {\r\n\r\n\tconstructor: THREE.PropertyBinding,\r\n\r\n\tgetValue: function getValue_unbound( targetArray, offset ) {\r\n\r\n\t\tthis.bind();\r\n\t\tthis.getValue( targetArray, offset );\r\n\r\n\t\t// Note: This class uses a State pattern on a per-method basis:\r\n\t\t// 'bind' sets 'this.getValue' / 'setValue' and shadows the\r\n\t\t// prototype version of these methods with one that represents\r\n\t\t// the bound state. When the property is not found, the methods\r\n\t\t// become no-ops.\r\n\r\n\t},\r\n\r\n\tsetValue: function getValue_unbound( sourceArray, offset ) {\r\n\r\n\t\tthis.bind();\r\n\t\tthis.setValue( sourceArray, offset );\r\n\r\n\t},\r\n\r\n\t// create getter / setter pair for a property in the scene graph\r\n\tbind: function() {\r\n\r\n\t\tvar targetObject = this.node,\r\n\t\t\tparsedPath = this.parsedPath,\r\n\r\n\t\t\tobjectName = parsedPath.objectName,\r\n\t\t\tpropertyName = parsedPath.propertyName,\r\n\t\t\tpropertyIndex = parsedPath.propertyIndex;\r\n\r\n\t\tif ( ! targetObject ) {\r\n\r\n\t\t\ttargetObject = THREE.PropertyBinding.findNode(\r\n\t\t\t\t\tthis.rootNode, parsedPath.nodeName ) || this.rootNode;\r\n\r\n\t\t\tthis.node = targetObject;\r\n\r\n\t\t}\r\n\r\n\t\t// set fail state so we can just 'return' on error\r\n\t\tthis.getValue = this._getValue_unavailable;\r\n\t\tthis.setValue = this._setValue_unavailable;\r\n\r\n \t\t// ensure there is a value node\r\n\t\tif ( ! targetObject ) {\r\n\r\n\t\t\tconsole.error( \" trying to update node for track: \" + this.path + \" but it wasn't found.\" );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tif( objectName ) {\r\n\r\n\t\t\tvar objectIndex = parsedPath.objectIndex;\r\n\r\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\r\n\t\t\tswitch ( objectName ) {\r\n\r\n\t\t\t\tcase 'materials':\r\n\r\n\t\t\t\t\tif( ! targetObject.material ) {\r\n\r\n\t\t\t\t\t\tconsole.error( ' can not bind to material as node does not have a material', this );\r\n\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif( ! targetObject.material.materials ) {\r\n\r\n\t\t\t\t\t\tconsole.error( ' can not bind to material.materials as node.material does not have a materials array', this );\r\n\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttargetObject = targetObject.material.materials;\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'bones':\r\n\r\n\t\t\t\t\tif( ! targetObject.skeleton ) {\r\n\r\n\t\t\t\t\t\tconsole.error( ' can not bind to bones as node does not have a skeleton', this );\r\n\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\r\n\t\t\t\t\t// and convert the integer string to a true integer.\r\n\r\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\r\n\r\n\t\t\t\t\t// support resolving morphTarget names into indices.\r\n\t\t\t\t\tfor ( var i = 0; i < targetObject.length; i ++ ) {\r\n\r\n\t\t\t\t\t\tif ( targetObject[i].name === objectIndex ) {\r\n\r\n\t\t\t\t\t\t\tobjectIndex = i;\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\r\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\r\n\r\n\t\t\t\t\t\tconsole.error( ' can not bind to objectName of node, undefined', this );\r\n\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\r\n\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif ( objectIndex !== undefined ) {\r\n\r\n\t\t\t\tif( targetObject[ objectIndex ] === undefined ) {\r\n\r\n\t\t\t\t\tconsole.error( \" trying to bind to objectIndex of objectName, but is undefined:\", this, targetObject );\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// resolve property\r\n\t\tvar nodeProperty = targetObject[ propertyName ];\r\n\r\n\t\tif ( ! nodeProperty ) {\r\n\r\n\t\t\tvar nodeName = parsedPath.nodeName;\r\n\r\n\t\t\tconsole.error( \" trying to update property for track: \" + nodeName +\r\n\t\t\t\t\t'.' + propertyName + \" but it wasn't found.\", targetObject );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\t// determine versioning scheme\r\n\t\tvar versioning = this.Versioning.None;\r\n\r\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\r\n\r\n\t\t\tversioning = this.Versioning.NeedsUpdate;\r\n\t\t\tthis.targetObject = targetObject;\r\n\r\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\r\n\r\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\r\n\t\t\tthis.targetObject = targetObject;\r\n\r\n\t\t}\r\n\r\n\t\t// determine how the property gets bound\r\n\t\tvar bindingType = this.BindingType.Direct;\r\n\r\n\t\tif ( propertyIndex !== undefined ) {\r\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\r\n\r\n\t\t\tif ( propertyName === \"morphTargetInfluences\" ) {\r\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\r\n\r\n\t\t\t\t// support resolving morphTarget names into indices.\r\n\t\t\t\tif ( ! targetObject.geometry ) {\r\n\r\n\t\t\t\t\tconsole.error( ' can not bind to morphTargetInfluences becasuse node does not have a geometry', this );\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( ! targetObject.geometry.morphTargets ) {\r\n\r\n\t\t\t\t\tconsole.error( ' can not bind to morphTargetInfluences becasuse node does not have a geometry.morphTargets', this );\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor ( var i = 0; i < this.node.geometry.morphTargets.length; i ++ ) {\r\n\r\n\t\t\t\t\tif ( targetObject.geometry.morphTargets[i].name === propertyIndex ) {\r\n\r\n\t\t\t\t\t\tpropertyIndex = i;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tbindingType = this.BindingType.ArrayElement;\r\n\r\n\t\t\tthis.resolvedProperty = nodeProperty;\r\n\t\t\tthis.propertyIndex = propertyIndex;\r\n\r\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\r\n\t\t\t// must use copy for Object3D.Euler/Quaternion\r\n\r\n\t\t\tbindingType = this.BindingType.HasFromToArray;\r\n\r\n\t\t\tthis.resolvedProperty = nodeProperty;\r\n\r\n\t\t} else if ( nodeProperty.length !== undefined ) {\r\n\r\n\t\t\tbindingType = this.BindingType.EntireArray;\r\n\r\n\t\t\tthis.resolvedProperty = nodeProperty;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.propertyName = propertyName;\r\n\r\n\t\t}\r\n\r\n\t\t// select getter / setter\r\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\r\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\r\n\r\n\t},\r\n\r\n\tunbind: function() {\r\n\r\n\t\tthis.node = null;\r\n\r\n\t\t// back to the prototype version of getValue / setValue\r\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\r\n\t\tthis.getValue = this._getValue_unbound;\r\n\t\tthis.setValue = this._setValue_unbound;\r\n\r\n\t}\r\n\r\n};\r\n\r\nObject.assign( THREE.PropertyBinding.prototype, { // prototype, continued\r\n\r\n\t// these are used to \"bind\" a nonexistent property\r\n\t_getValue_unavailable: function() {},\r\n\t_setValue_unavailable: function() {},\r\n\r\n\t// initial state of these methods that calls 'bind'\r\n\t_getValue_unbound: THREE.PropertyBinding.prototype.getValue,\r\n\t_setValue_unbound: THREE.PropertyBinding.prototype.setValue,\r\n\r\n\tBindingType: {\r\n\t\tDirect: 0,\r\n\t\tEntireArray: 1,\r\n\t\tArrayElement: 2,\r\n\t\tHasFromToArray: 3\r\n\t},\r\n\r\n\tVersioning: {\r\n\t\tNone: 0,\r\n\t\tNeedsUpdate: 1,\r\n\t\tMatrixWorldNeedsUpdate: 2\r\n\t},\r\n\r\n\tGetterByBindingType: [\r\n\r\n\t\tfunction getValue_direct( buffer, offset ) {\r\n\r\n\t\t\tbuffer[ offset ] = this.node[ this.propertyName ];\r\n\r\n\t\t},\r\n\r\n\t\tfunction getValue_array( buffer, offset ) {\r\n\r\n\t\t\tvar source = this.resolvedProperty;\r\n\r\n\t\t\tfor ( var i = 0, n = source.length; i !== n; ++ i ) {\r\n\r\n\t\t\t\tbuffer[ offset ++ ] = source[ i ];\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\tfunction getValue_arrayElement( buffer, offset ) {\r\n\r\n\t\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\r\n\r\n\t\t},\r\n\r\n\t\tfunction getValue_toArray( buffer, offset ) {\r\n\r\n\t\t\tthis.resolvedProperty.toArray( buffer, offset );\r\n\r\n\t\t}\r\n\r\n\t],\r\n\r\n\tSetterByBindingTypeAndVersioning: [\r\n\r\n\t\t[\r\n\t\t\t// Direct\r\n\r\n\t\t\tfunction setValue_direct( buffer, offset ) {\r\n\r\n\t\t\t\tthis.node[ this.propertyName ] = buffer[ offset ];\r\n\r\n\t\t\t},\r\n\r\n\t\t\tfunction setValue_direct_setNeedsUpdate( buffer, offset ) {\r\n\r\n\t\t\t\tthis.node[ this.propertyName ] = buffer[ offset ];\r\n\t\t\t\tthis.targetObject.needsUpdate = true;\r\n\r\n\t\t\t},\r\n\r\n\t\t\tfunction setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\r\n\r\n\t\t\t\tthis.node[ this.propertyName ] = buffer[ offset ];\r\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t], [\r\n\r\n\t\t\t// EntireArray\r\n\r\n\t\t\tfunction setValue_array( buffer, offset ) {\r\n\r\n\t\t\t\tvar dest = this.resolvedProperty;\r\n\r\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\r\n\r\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\r\n\t\t\tfunction setValue_array_setNeedsUpdate( buffer, offset ) {\r\n\r\n\t\t\t\tvar dest = this.resolvedProperty;\r\n\r\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\r\n\r\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.targetObject.needsUpdate = true;\r\n\r\n\t\t\t},\r\n\r\n\t\t\tfunction setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\r\n\r\n\t\t\t\tvar dest = this.resolvedProperty;\r\n\r\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\r\n\r\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t], [\r\n\r\n\t\t\t// ArrayElement\r\n\r\n\t\t\tfunction setValue_arrayElement( buffer, offset ) {\r\n\r\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\r\n\r\n\t\t\t},\r\n\r\n\t\t\tfunction setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\r\n\r\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\r\n\t\t\t\tthis.targetObject.needsUpdate = true;\r\n\r\n\t\t\t},\r\n\r\n\t\t\tfunction setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\r\n\r\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\r\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t], [\r\n\r\n\t\t\t// HasToFromArray\r\n\r\n\t\t\tfunction setValue_fromArray( buffer, offset ) {\r\n\r\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\r\n\r\n\t\t\t},\r\n\r\n\t\t\tfunction setValue_fromArray_setNeedsUpdate( buffer, offset ) {\r\n\r\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\r\n\t\t\t\tthis.targetObject.needsUpdate = true;\r\n\r\n\t\t\t},\r\n\r\n\t\t\tfunction setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\r\n\r\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\r\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t]\r\n\r\n\t]\r\n\r\n} );\r\n\r\nTHREE.PropertyBinding.Composite =\r\n\t\tfunction( targetGroup, path, optionalParsedPath ) {\r\n\r\n\tvar parsedPath = optionalParsedPath ||\r\n\t\t\tTHREE.PropertyBinding.parseTrackName( path );\r\n\r\n\tthis._targetGroup = targetGroup;\r\n\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\r\n\r\n};\r\n\r\nTHREE.PropertyBinding.Composite.prototype = {\r\n\r\n\tconstructor: THREE.PropertyBinding.Composite,\r\n\r\n\tgetValue: function( array, offset ) {\r\n\r\n\t\tthis.bind(); // bind all binding\r\n\r\n\t\tvar firstValidIndex = this._targetGroup.nCachedObjects_,\r\n\t\t\tbinding = this._bindings[ firstValidIndex ];\r\n\r\n\t\t// and only call .getValue on the first\r\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\r\n\r\n\t},\r\n\r\n\tsetValue: function( array, offset ) {\r\n\r\n\t\tvar bindings = this._bindings;\r\n\r\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\r\n\t\t\t\tn = bindings.length; i !== n; ++ i ) {\r\n\r\n\t\t\tbindings[ i ].setValue( array, offset );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tbind: function() {\r\n\r\n\t\tvar bindings = this._bindings;\r\n\r\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\r\n\t\t\t\tn = bindings.length; i !== n; ++ i ) {\r\n\r\n\t\t\tbindings[ i ].bind();\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tunbind: function() {\r\n\r\n\t\tvar bindings = this._bindings;\r\n\r\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\r\n\t\t\t\tn = bindings.length; i !== n; ++ i ) {\r\n\r\n\t\t\tbindings[ i ].unbind();\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.PropertyBinding.create = function( root, path, parsedPath ) {\r\n\r\n\tif ( ! ( root instanceof THREE.AnimationObjectGroup ) ) {\r\n\r\n\t\treturn new THREE.PropertyBinding( root, path, parsedPath );\r\n\r\n\t} else {\r\n\r\n\t\treturn new THREE.PropertyBinding.Composite( root, path, parsedPath );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.PropertyBinding.parseTrackName = function( trackName ) {\r\n\r\n\t// matches strings in the form of:\r\n\t// nodeName.property\r\n\t// nodeName.property[accessor]\r\n\t// nodeName.material.property[accessor]\r\n\t// uuid.property[accessor]\r\n\t// uuid.objectName[objectIndex].propertyName[propertyIndex]\r\n\t// parentName/nodeName.property\r\n\t// parentName/parentName/nodeName.property[index]\r\n\t//\t .bone[Armature.DEF_cog].position\r\n\t// created and tested via https://regex101.com/#javascript\r\n\r\n\tvar re = /^(([\\w]+\\/)*)([\\w-\\d]+)?(\\.([\\w]+)(\\[([\\w\\d\\[\\]\\_.:\\- ]+)\\])?)?(\\.([\\w.]+)(\\[([\\w\\d\\[\\]\\_. ]+)\\])?)$/;\r\n\tvar matches = re.exec(trackName);\r\n\r\n\tif( ! matches ) {\r\n\t\tthrow new Error( \"cannot parse trackName at all: \" + trackName );\r\n\t}\r\n\r\n if (matches.index === re.lastIndex) {\r\n re.lastIndex++;\r\n }\r\n\r\n\tvar results = {\r\n\t\t// directoryName: matches[1], // (tschw) currently unused\r\n\t\tnodeName: matches[3], \t// allowed to be null, specified root node.\r\n\t\tobjectName: matches[5],\r\n\t\tobjectIndex: matches[7],\r\n\t\tpropertyName: matches[9],\r\n\t\tpropertyIndex: matches[11]\t// allowed to be null, specifies that the whole property is set.\r\n\t};\r\n\r\n\tif( results.propertyName === null || results.propertyName.length === 0 ) {\r\n\t\tthrow new Error( \"can not parse propertyName from trackName: \" + trackName );\r\n\t}\r\n\r\n\treturn results;\r\n\r\n};\r\n\r\nTHREE.PropertyBinding.findNode = function( root, nodeName ) {\r\n\r\n\tif( ! nodeName || nodeName === \"\" || nodeName === \"root\" || nodeName === \".\" || nodeName === -1 || nodeName === root.name || nodeName === root.uuid ) {\r\n\r\n\t\treturn root;\r\n\r\n\t}\r\n\r\n\t// search into skeleton bones.\r\n\tif( root.skeleton ) {\r\n\r\n\t\tvar searchSkeleton = function( skeleton ) {\r\n\r\n\t\t\tfor( var i = 0; i < skeleton.bones.length; i ++ ) {\r\n\r\n\t\t\t\tvar bone = skeleton.bones[i];\r\n\r\n\t\t\t\tif( bone.name === nodeName ) {\r\n\r\n\t\t\t\t\treturn bone;\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\r\n\t\t};\r\n\r\n\t\tvar bone = searchSkeleton( root.skeleton );\r\n\r\n\t\tif( bone ) {\r\n\r\n\t\t\treturn bone;\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t// search into node subtree.\r\n\tif( root.children ) {\r\n\r\n\t\tvar searchNodeSubtree = function( children ) {\r\n\r\n\t\t\tfor( var i = 0; i < children.length; i ++ ) {\r\n\r\n\t\t\t\tvar childNode = children[i];\r\n\r\n\t\t\t\tif( childNode.name === nodeName || childNode.uuid === nodeName ) {\r\n\r\n\t\t\t\t\treturn childNode;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar result = searchNodeSubtree( childNode.children );\r\n\r\n\t\t\t\tif( result ) return result;\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\r\n\t\t};\r\n\r\n\t\tvar subTreeNode = searchNodeSubtree( root.children );\r\n\r\n\t\tif( subTreeNode ) {\r\n\r\n\t\t\treturn subTreeNode;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\treturn null;\r\n\r\n};\r\n\r\n// File:src/animation/PropertyMixer.js\r\n\r\n/**\r\n *\r\n * Buffered scene graph property that allows weighted accumulation.\r\n *\r\n *\r\n * @author Ben Houston / http://clara.io/\r\n * @author David Sarno / http://lighthaus.us/\r\n * @author tschw\r\n */\r\n\r\nTHREE.PropertyMixer = function ( binding, typeName, valueSize ) {\r\n\r\n\tthis.binding = binding;\r\n\tthis.valueSize = valueSize;\r\n\r\n\tvar bufferType = Float64Array,\r\n\t\tmixFunction;\r\n\r\n\tswitch ( typeName ) {\r\n\r\n\t\tcase 'quaternion':\t\t\tmixFunction = this._slerp;\t\tbreak;\r\n\r\n\t\tcase 'string':\r\n\t\tcase 'bool':\r\n\r\n\t\t\tbufferType = Array,\t\tmixFunction = this._select;\t\tbreak;\r\n\r\n\t\tdefault:\t\t\t\t\tmixFunction = this._lerp;\r\n\r\n\t}\r\n\r\n\tthis.buffer = new bufferType( valueSize * 4 );\r\n\t// layout: [ incoming | accu0 | accu1 | orig ]\r\n\t//\r\n\t// interpolators can use .buffer as their .result\r\n\t// the data then goes to 'incoming'\r\n\t//\r\n\t// 'accu0' and 'accu1' are used frame-interleaved for\r\n\t// the cumulative result and are compared to detect\r\n\t// changes\r\n\t//\r\n\t// 'orig' stores the original state of the property\r\n\r\n\tthis._mixBufferRegion = mixFunction;\r\n\r\n\tthis.cumulativeWeight = 0;\r\n\r\n\tthis.useCount = 0;\r\n\tthis.referenceCount = 0;\r\n\r\n};\r\n\r\nTHREE.PropertyMixer.prototype = {\r\n\r\n\tconstructor: THREE.PropertyMixer,\r\n\r\n\t// accumulate data in the 'incoming' region into 'accu'\r\n\taccumulate: function( accuIndex, weight ) {\r\n\r\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\r\n\t\t// the weight and shouldn't have made the call in the first place\r\n\r\n\t\tvar buffer = this.buffer,\r\n\t\t\tstride = this.valueSize,\r\n\t\t\toffset = accuIndex * stride + stride,\r\n\r\n\t\t\tcurrentWeight = this.cumulativeWeight;\r\n\r\n\t\tif ( currentWeight === 0 ) {\r\n\r\n\t\t\t// accuN := incoming * weight\r\n\r\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\r\n\r\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tcurrentWeight = weight;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// accuN := accuN + incoming * weight\r\n\r\n\t\t\tcurrentWeight += weight;\r\n\t\t\tvar mix = weight / currentWeight;\r\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\r\n\r\n\t\t}\r\n\r\n\t\tthis.cumulativeWeight = currentWeight;\r\n\r\n\t},\r\n\r\n\t// apply the state of 'accu' to the binding when accus differ\r\n\tapply: function( accuIndex ) {\r\n\r\n\t\tvar stride = this.valueSize,\r\n\t\t\tbuffer = this.buffer,\r\n\t\t\toffset = accuIndex * stride + stride,\r\n\r\n\t\t\tweight = this.cumulativeWeight,\r\n\r\n\t\t\tbinding = this.binding;\r\n\r\n\t\tthis.cumulativeWeight = 0;\r\n\r\n\t\tif ( weight < 1 ) {\r\n\r\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\r\n\r\n\t\t\tvar originalValueOffset = stride * 3;\r\n\r\n\t\t\tthis._mixBufferRegion(\r\n\t\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = stride, e = stride + stride; i !== e; ++ i ) {\r\n\r\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\r\n\r\n\t\t\t\t// value has changed -> update scene graph\r\n\r\n\t\t\t\tbinding.setValue( buffer, offset );\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t// remember the state of the bound property and copy it to both accus\r\n\tsaveOriginalState: function() {\r\n\r\n\t\tvar binding = this.binding;\r\n\r\n\t\tvar buffer = this.buffer,\r\n\t\t\tstride = this.valueSize,\r\n\r\n\t\t\toriginalValueOffset = stride * 3;\r\n\r\n\t\tbinding.getValue( buffer, originalValueOffset );\r\n\r\n\t\t// accu[0..1] := orig -- initially detect changes against the original\r\n\t\tfor ( var i = stride, e = originalValueOffset; i !== e; ++ i ) {\r\n\r\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\r\n\r\n\t\t}\r\n\r\n\t\tthis.cumulativeWeight = 0;\r\n\r\n\t},\r\n\r\n\t// apply the state previously taken via 'saveOriginalState' to the binding\r\n\trestoreOriginalState: function() {\r\n\r\n\t\tvar originalValueOffset = this.valueSize * 3;\r\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\r\n\r\n\t},\r\n\r\n\r\n\t// mix functions\r\n\r\n\t_select: function( buffer, dstOffset, srcOffset, t, stride ) {\r\n\r\n\t\tif ( t >= 0.5 ) {\r\n\r\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\r\n\r\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t_slerp: function( buffer, dstOffset, srcOffset, t, stride ) {\r\n\r\n\t\tTHREE.Quaternion.slerpFlat( buffer, dstOffset,\r\n\t\t\t\tbuffer, dstOffset, buffer, srcOffset, t );\r\n\r\n\t},\r\n\r\n\t_lerp: function( buffer, dstOffset, srcOffset, t, stride ) {\r\n\r\n\t\tvar s = 1 - t;\r\n\r\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\r\n\r\n\t\t\tvar j = dstOffset + i;\r\n\r\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/animation/tracks/BooleanKeyframeTrack.js\r\n\r\n/**\r\n *\r\n * A Track of Boolean keyframe values.\r\n *\r\n *\r\n * @author Ben Houston / http://clara.io/\r\n * @author David Sarno / http://lighthaus.us/\r\n * @author tschw\r\n */\r\n\r\nTHREE.BooleanKeyframeTrack = function ( name, times, values ) {\r\n\r\n\tTHREE.KeyframeTrack.call( this, name, times, values );\r\n\r\n};\r\n\r\nTHREE.BooleanKeyframeTrack.prototype =\r\n\t\tObject.assign( Object.create( THREE.KeyframeTrack.prototype ), {\r\n\r\n\tconstructor: THREE.BooleanKeyframeTrack,\r\n\r\n\tValueTypeName: 'bool',\r\n\tValueBufferType: Array,\r\n\r\n\tDefaultInterpolation: THREE.InterpolateDiscrete,\r\n\r\n\tInterpolantFactoryMethodLinear: undefined,\r\n\tInterpolantFactoryMethodSmooth: undefined\r\n\r\n\t// Note: Actually this track could have a optimized / compressed\r\n\t// representation of a single value and a custom interpolant that\r\n\t// computes \"firstValue ^ isOdd( index )\".\r\n\r\n} );\r\n\r\n// File:src/animation/tracks/ColorKeyframeTrack.js\r\n\r\n/**\r\n *\r\n * A Track of keyframe values that represent color.\r\n *\r\n *\r\n * @author Ben Houston / http://clara.io/\r\n * @author David Sarno / http://lighthaus.us/\r\n * @author tschw\r\n */\r\n\r\nTHREE.ColorKeyframeTrack = function ( name, times, values, interpolation ) {\r\n\r\n\tTHREE.KeyframeTrack.call( this, name, times, values, interpolation );\r\n\r\n};\r\n\r\nTHREE.ColorKeyframeTrack.prototype =\r\n\t\tObject.assign( Object.create( THREE.KeyframeTrack.prototype ), {\r\n\r\n\tconstructor: THREE.ColorKeyframeTrack,\r\n\r\n\tValueTypeName: 'color'\r\n\r\n\t// ValueBufferType is inherited\r\n\r\n\t// DefaultInterpolation is inherited\r\n\r\n\r\n\t// Note: Very basic implementation and nothing special yet.\r\n\t// However, this is the place for color space parameterization.\r\n\r\n} );\r\n\r\n// File:src/animation/tracks/NumberKeyframeTrack.js\r\n\r\n/**\r\n *\r\n * A Track of numeric keyframe values.\r\n *\r\n * @author Ben Houston / http://clara.io/\r\n * @author David Sarno / http://lighthaus.us/\r\n * @author tschw\r\n */\r\n\r\nTHREE.NumberKeyframeTrack = function ( name, times, values, interpolation ) {\r\n\r\n\tTHREE.KeyframeTrack.call( this, name, times, values, interpolation );\r\n\r\n};\r\n\r\nTHREE.NumberKeyframeTrack.prototype =\r\n\t\tObject.assign( Object.create( THREE.KeyframeTrack.prototype ), {\r\n\r\n\tconstructor: THREE.NumberKeyframeTrack,\r\n\r\n\tValueTypeName: 'number',\r\n\r\n\t// ValueBufferType is inherited\r\n\r\n\t// DefaultInterpolation is inherited\r\n\r\n} );\r\n\r\n// File:src/animation/tracks/QuaternionKeyframeTrack.js\r\n\r\n/**\r\n *\r\n * A Track of quaternion keyframe values.\r\n *\r\n * @author Ben Houston / http://clara.io/\r\n * @author David Sarno / http://lighthaus.us/\r\n * @author tschw\r\n */\r\n\r\nTHREE.QuaternionKeyframeTrack = function ( name, times, values, interpolation ) {\r\n\r\n\tTHREE.KeyframeTrack.call( this, name, times, values, interpolation );\r\n\r\n};\r\n\r\nTHREE.QuaternionKeyframeTrack.prototype =\r\n\t\tObject.assign( Object.create( THREE.KeyframeTrack.prototype ), {\r\n\r\n\tconstructor: THREE.QuaternionKeyframeTrack,\r\n\r\n\tValueTypeName: 'quaternion',\r\n\r\n\t// ValueBufferType is inherited\r\n\r\n\tDefaultInterpolation: THREE.InterpolateLinear,\r\n\r\n\tInterpolantFactoryMethodLinear: function( result ) {\r\n\r\n\t\treturn new THREE.QuaternionLinearInterpolant(\r\n\t\t\t\tthis.times, this.values, this.getValueSize(), result );\r\n\r\n\t},\r\n\r\n\tInterpolantFactoryMethodSmooth: undefined // not yet implemented\r\n\r\n} );\r\n\r\n// File:src/animation/tracks/StringKeyframeTrack.js\r\n\r\n/**\r\n *\r\n * A Track that interpolates Strings\r\n *\r\n *\r\n * @author Ben Houston / http://clara.io/\r\n * @author David Sarno / http://lighthaus.us/\r\n * @author tschw\r\n */\r\n\r\nTHREE.StringKeyframeTrack = function ( name, times, values, interpolation ) {\r\n\r\n\tTHREE.KeyframeTrack.call( this, name, times, values, interpolation );\r\n\r\n};\r\n\r\nTHREE.StringKeyframeTrack.prototype =\r\n\t\tObject.assign( Object.create( THREE.KeyframeTrack.prototype ), {\r\n\r\n\tconstructor: THREE.StringKeyframeTrack,\r\n\r\n\tValueTypeName: 'string',\r\n\tValueBufferType: Array,\r\n\r\n\tDefaultInterpolation: THREE.InterpolateDiscrete,\r\n\r\n\tInterpolantFactoryMethodLinear: undefined,\r\n\r\n\tInterpolantFactoryMethodSmooth: undefined\r\n\r\n} );\r\n\r\n// File:src/animation/tracks/VectorKeyframeTrack.js\r\n\r\n/**\r\n *\r\n * A Track of vectored keyframe values.\r\n *\r\n *\r\n * @author Ben Houston / http://clara.io/\r\n * @author David Sarno / http://lighthaus.us/\r\n * @author tschw\r\n */\r\n\r\nTHREE.VectorKeyframeTrack = function ( name, times, values, interpolation ) {\r\n\r\n\tTHREE.KeyframeTrack.call( this, name, times, values, interpolation );\r\n\r\n};\r\n\r\nTHREE.VectorKeyframeTrack.prototype =\r\n\t\tObject.assign( Object.create( THREE.KeyframeTrack.prototype ), {\r\n\r\n\tconstructor: THREE.VectorKeyframeTrack,\r\n\r\n\tValueTypeName: 'vector'\r\n\r\n\t// ValueBufferType is inherited\r\n\r\n\t// DefaultInterpolation is inherited\r\n\r\n} );\r\n\r\n// File:src/audio/Audio.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author Reece Aaron Lecrivain / http://reecenotes.com/\r\n */\r\n\r\nTHREE.Audio = function ( listener ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'Audio';\r\n\r\n\tthis.context = listener.context;\r\n\tthis.source = this.context.createBufferSource();\r\n\tthis.source.onended = this.onEnded.bind( this );\r\n\r\n\tthis.gain = this.context.createGain();\r\n\tthis.gain.connect( listener.getInput() );\r\n\r\n\tthis.autoplay = false;\r\n\r\n\tthis.startTime = 0;\r\n\tthis.playbackRate = 1;\r\n\tthis.isPlaying = false;\r\n\tthis.hasPlaybackControl = true;\r\n\tthis.sourceType = 'empty';\r\n\r\n\tthis.filters = [];\r\n\r\n};\r\n\r\nTHREE.Audio.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), {\r\n\r\n\tconstructor: THREE.Audio,\r\n\r\n\tgetOutput: function () {\r\n\r\n\t\treturn this.gain;\r\n\r\n\t},\r\n\r\n\tsetNodeSource: function ( audioNode ) {\r\n\r\n\t\tthis.hasPlaybackControl = false;\r\n\t\tthis.sourceType = 'audioNode';\r\n\t\tthis.source = audioNode;\r\n\t\tthis.connect();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetBuffer: function ( audioBuffer ) {\r\n\r\n\t\tthis.source.buffer = audioBuffer;\r\n\t\tthis.sourceType = 'buffer';\r\n\r\n\t\tif ( this.autoplay ) this.play();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tplay: function () {\r\n\r\n\t\tif ( this.isPlaying === true ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.hasPlaybackControl === false ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tvar source = this.context.createBufferSource();\r\n\r\n\t\tsource.buffer = this.source.buffer;\r\n\t\tsource.loop = this.source.loop;\r\n\t\tsource.onended = this.source.onended;\r\n\t\tsource.start( 0, this.startTime );\r\n\t\tsource.playbackRate.value = this.playbackRate;\r\n\r\n\t\tthis.isPlaying = true;\r\n\r\n\t\tthis.source = source;\r\n\r\n\t\treturn this.connect();\r\n\r\n\t},\r\n\r\n\tpause: function () {\r\n\r\n\t\tif ( this.hasPlaybackControl === false ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tthis.source.stop();\r\n\t\tthis.startTime = this.context.currentTime;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tstop: function () {\r\n\r\n\t\tif ( this.hasPlaybackControl === false ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tthis.source.stop();\r\n\t\tthis.startTime = 0;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tconnect: function () {\r\n\r\n\t\tif ( this.filters.length > 0 ) {\r\n\r\n\t\t\tthis.source.connect( this.filters[ 0 ] );\r\n\r\n\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.source.connect( this.getOutput() );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdisconnect: function () {\r\n\r\n\t\tif ( this.filters.length > 0 ) {\r\n\r\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\r\n\r\n\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.source.disconnect( this.getOutput() );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tgetFilters: function () {\r\n\r\n\t\treturn this.filters;\r\n\r\n\t},\r\n\r\n\tsetFilters: function ( value ) {\r\n\r\n\t\tif ( ! value ) value = [];\r\n\r\n\t\tif ( this.isPlaying === true ) {\r\n\r\n\t\t\tthis.disconnect();\r\n\t\t\tthis.filters = value;\r\n\t\t\tthis.connect();\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.filters = value;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tgetFilter: function () {\r\n\r\n\t\treturn this.getFilters()[ 0 ];\r\n\r\n\t},\r\n\r\n\tsetFilter: function ( filter ) {\r\n\r\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\r\n\r\n\t},\r\n\r\n\tsetPlaybackRate: function ( value ) {\r\n\r\n\t\tif ( this.hasPlaybackControl === false ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tthis.playbackRate = value;\r\n\r\n\t\tif ( this.isPlaying === true ) {\r\n\r\n\t\t\tthis.source.playbackRate.value = this.playbackRate;\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tgetPlaybackRate: function () {\r\n\r\n\t\treturn this.playbackRate;\r\n\r\n\t},\r\n\r\n\tonEnded: function () {\r\n\r\n\t\tthis.isPlaying = false;\r\n\r\n\t},\r\n\r\n\tgetLoop: function () {\r\n\r\n\t\tif ( this.hasPlaybackControl === false ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\r\n\t\t\treturn false;\r\n\r\n\t\t}\r\n\r\n\t\treturn this.source.loop;\r\n\r\n\t},\r\n\r\n\tsetLoop: function ( value ) {\r\n\r\n\t\tif ( this.hasPlaybackControl === false ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tthis.source.loop = value;\r\n\r\n\t},\r\n\r\n\tgetVolume: function () {\r\n\r\n\t\treturn this.gain.gain.value;\r\n\r\n\t},\r\n\r\n\r\n\tsetVolume: function ( value ) {\r\n\r\n\t\tthis.gain.gain.value = value;\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/audio/AudioAnalyser.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.AudioAnalyser = function ( audio, fftSize ) {\r\n\r\n\tthis.analyser = audio.context.createAnalyser();\r\n\tthis.analyser.fftSize = fftSize !== undefined ? fftSize : 2048;\r\n\r\n\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\r\n\r\n\taudio.getOutput().connect( this.analyser );\r\n\r\n};\r\n\r\nObject.assign( THREE.AudioAnalyser.prototype, {\r\n\r\n\tgetFrequencyData: function () {\r\n\r\n\t\tthis.analyser.getByteFrequencyData( this.data );\r\n\r\n\t\treturn this.data;\r\n\r\n\t},\r\n\r\n\tgetAverageFrequency: function () {\r\n\r\n\t\tvar value = 0, data = this.getFrequencyData();\r\n\r\n\t\tfor ( var i = 0; i < data.length; i ++ ) {\r\n\r\n\t\t\tvalue += data[ i ];\r\n\r\n\t\t}\r\n\r\n\t\treturn value / data.length;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/audio/AudioContext.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nObject.defineProperty( THREE, 'AudioContext', {\r\n\r\n\tget: ( function () {\r\n\r\n\t\tvar context;\r\n\r\n\t\treturn function () {\r\n\r\n\t\t\tif ( context === undefined ) {\r\n\r\n\t\t\t\tcontext = new ( window.AudioContext || window.webkitAudioContext )();\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn context;\r\n\r\n\t\t};\r\n\r\n\t} )()\r\n\r\n} );\r\n\r\n// File:src/audio/PositionalAudio.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.PositionalAudio = function ( listener ) {\r\n\r\n\tTHREE.Audio.call( this, listener );\r\n\r\n\tthis.panner = this.context.createPanner();\r\n\tthis.panner.connect( this.gain );\r\n\r\n};\r\n\r\nTHREE.PositionalAudio.prototype = Object.assign( Object.create( THREE.Audio.prototype ), {\r\n\r\n\tconstructor: THREE.PositionalAudio,\r\n\r\n\tgetOutput: function () {\r\n\r\n\t\treturn this.panner;\r\n\r\n\t},\r\n\r\n\tgetRefDistance: function () {\r\n\r\n\t\treturn this.panner.refDistance;\r\n\r\n\t},\r\n\r\n\tsetRefDistance: function ( value ) {\r\n\r\n\t\tthis.panner.refDistance = value;\r\n\r\n\t},\r\n\r\n\tgetRolloffFactor: function () {\r\n\r\n\t\treturn this.panner.rolloffFactor;\r\n\r\n\t},\r\n\r\n\tsetRolloffFactor: function ( value ) {\r\n\r\n\t\tthis.panner.rolloffFactor = value;\r\n\r\n\t},\r\n\r\n\tgetDistanceModel: function () {\r\n\r\n\t\treturn this.panner.distanceModel;\r\n\r\n\t},\r\n\r\n\tsetDistanceModel: function ( value ) {\r\n\r\n\t\tthis.panner.distanceModel = value;\r\n\r\n\t},\r\n\r\n\tgetMaxDistance: function () {\r\n\r\n\t\treturn this.panner.maxDistance;\r\n\r\n\t},\r\n\r\n\tsetMaxDistance: function ( value ) {\r\n\r\n\t\tthis.panner.maxDistance = value;\r\n\r\n\t},\r\n\r\n\tupdateMatrixWorld: ( function () {\r\n\r\n\t\tvar position = new THREE.Vector3();\r\n\r\n\t\treturn function updateMatrixWorld( force ) {\r\n\r\n\t\t\tTHREE.Object3D.prototype.updateMatrixWorld.call( this, force );\r\n\r\n\t\t\tposition.setFromMatrixPosition( this.matrixWorld );\r\n\r\n\t\t\tthis.panner.setPosition( position.x, position.y, position.z );\r\n\r\n\t\t};\r\n\r\n\t} )()\r\n\r\n\r\n} );\r\n\r\n// File:src/audio/AudioListener.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.AudioListener = function () {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'AudioListener';\r\n\r\n\tthis.context = THREE.AudioContext;\r\n\r\n\tthis.gain = this.context.createGain();\r\n\tthis.gain.connect( this.context.destination );\r\n\r\n\tthis.filter = null;\r\n\r\n};\r\n\r\nTHREE.AudioListener.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), {\r\n\r\n\tconstructor: THREE.AudioListener,\r\n\r\n\tgetInput: function () {\r\n\r\n\t\treturn this.gain;\r\n\r\n\t},\r\n\r\n\tremoveFilter: function ( ) {\r\n\r\n\t\tif ( this.filter !== null ) {\r\n\r\n\t\t\tthis.gain.disconnect( this.filter );\r\n\t\t\tthis.filter.disconnect( this.context.destination );\r\n\t\t\tthis.gain.connect( this.context.destination );\r\n\t\t\tthis.filter = null;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tgetFilter: function () {\r\n\r\n\t\treturn this.filter;\r\n\r\n\t},\r\n\r\n\tsetFilter: function ( value ) {\r\n\r\n\t\tif ( this.filter !== null ) {\r\n\r\n\t\t\tthis.gain.disconnect( this.filter );\r\n\t\t\tthis.filter.disconnect( this.context.destination );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.gain.disconnect( this.context.destination );\r\n\r\n\t\t}\r\n\r\n\t\tthis.filter = value;\r\n\t\tthis.gain.connect( this.filter );\r\n\t\tthis.filter.connect( this.context.destination );\r\n\r\n\t},\r\n\r\n\tgetMasterVolume: function () {\r\n\r\n\t\treturn this.gain.gain.value;\r\n\r\n\t},\r\n\r\n\tsetMasterVolume: function ( value ) {\r\n\r\n\t\tthis.gain.gain.value = value;\r\n\r\n\t},\r\n\r\n\tupdateMatrixWorld: ( function () {\r\n\r\n\t\tvar position = new THREE.Vector3();\r\n\t\tvar quaternion = new THREE.Quaternion();\r\n\t\tvar scale = new THREE.Vector3();\r\n\r\n\t\tvar orientation = new THREE.Vector3();\r\n\r\n\t\treturn function updateMatrixWorld( force ) {\r\n\r\n\t\t\tTHREE.Object3D.prototype.updateMatrixWorld.call( this, force );\r\n\r\n\t\t\tvar listener = this.context.listener;\r\n\t\t\tvar up = this.up;\r\n\r\n\t\t\tthis.matrixWorld.decompose( position, quaternion, scale );\r\n\r\n\t\t\torientation.set( 0, 0, - 1 ).applyQuaternion( quaternion );\r\n\r\n\t\t\tlistener.setPosition( position.x, position.y, position.z );\r\n\t\t\tlistener.setOrientation( orientation.x, orientation.y, orientation.z, up.x, up.y, up.z );\r\n\r\n\t\t};\r\n\r\n\t} )()\r\n\r\n} );\r\n\r\n// File:src/cameras/Camera.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author WestLangley / http://github.com/WestLangley\r\n*/\r\n\r\nTHREE.Camera = function () {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'Camera';\r\n\r\n\tthis.matrixWorldInverse = new THREE.Matrix4();\r\n\tthis.projectionMatrix = new THREE.Matrix4();\r\n\r\n};\r\n\r\nTHREE.Camera.prototype = Object.create( THREE.Object3D.prototype );\r\nTHREE.Camera.prototype.constructor = THREE.Camera;\r\n\r\nTHREE.Camera.prototype.getWorldDirection = function () {\r\n\r\n\tvar quaternion = new THREE.Quaternion();\r\n\r\n\treturn function ( optionalTarget ) {\r\n\r\n\t\tvar result = optionalTarget || new THREE.Vector3();\r\n\r\n\t\tthis.getWorldQuaternion( quaternion );\r\n\r\n\t\treturn result.set( 0, 0, - 1 ).applyQuaternion( quaternion );\r\n\r\n\t};\r\n\r\n}();\r\n\r\nTHREE.Camera.prototype.lookAt = function () {\r\n\r\n\t// This routine does not support cameras with rotated and/or translated parent(s)\r\n\r\n\tvar m1 = new THREE.Matrix4();\r\n\r\n\treturn function ( vector ) {\r\n\r\n\t\tm1.lookAt( this.position, vector, this.up );\r\n\r\n\t\tthis.quaternion.setFromRotationMatrix( m1 );\r\n\r\n\t};\r\n\r\n}();\r\n\r\nTHREE.Camera.prototype.clone = function () {\r\n\r\n\treturn new this.constructor().copy( this );\r\n\r\n};\r\n\r\nTHREE.Camera.prototype.copy = function ( source ) {\r\n\r\n\tTHREE.Object3D.prototype.copy.call( this, source );\r\n\r\n\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\r\n\tthis.projectionMatrix.copy( source.projectionMatrix );\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n// File:src/cameras/CubeCamera.js\r\n\r\n/**\r\n * Camera for rendering cube maps\r\n *\t- renders scene into axis-aligned cube\r\n *\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.CubeCamera = function ( near, far, cubeResolution ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'CubeCamera';\r\n\r\n\tvar fov = 90, aspect = 1;\r\n\r\n\tvar cameraPX = new THREE.PerspectiveCamera( fov, aspect, near, far );\r\n\tcameraPX.up.set( 0, - 1, 0 );\r\n\tcameraPX.lookAt( new THREE.Vector3( 1, 0, 0 ) );\r\n\tthis.add( cameraPX );\r\n\r\n\tvar cameraNX = new THREE.PerspectiveCamera( fov, aspect, near, far );\r\n\tcameraNX.up.set( 0, - 1, 0 );\r\n\tcameraNX.lookAt( new THREE.Vector3( - 1, 0, 0 ) );\r\n\tthis.add( cameraNX );\r\n\r\n\tvar cameraPY = new THREE.PerspectiveCamera( fov, aspect, near, far );\r\n\tcameraPY.up.set( 0, 0, 1 );\r\n\tcameraPY.lookAt( new THREE.Vector3( 0, 1, 0 ) );\r\n\tthis.add( cameraPY );\r\n\r\n\tvar cameraNY = new THREE.PerspectiveCamera( fov, aspect, near, far );\r\n\tcameraNY.up.set( 0, 0, - 1 );\r\n\tcameraNY.lookAt( new THREE.Vector3( 0, - 1, 0 ) );\r\n\tthis.add( cameraNY );\r\n\r\n\tvar cameraPZ = new THREE.PerspectiveCamera( fov, aspect, near, far );\r\n\tcameraPZ.up.set( 0, - 1, 0 );\r\n\tcameraPZ.lookAt( new THREE.Vector3( 0, 0, 1 ) );\r\n\tthis.add( cameraPZ );\r\n\r\n\tvar cameraNZ = new THREE.PerspectiveCamera( fov, aspect, near, far );\r\n\tcameraNZ.up.set( 0, - 1, 0 );\r\n\tcameraNZ.lookAt( new THREE.Vector3( 0, 0, - 1 ) );\r\n\tthis.add( cameraNZ );\r\n\r\n\tvar options = { format: THREE.RGBFormat, magFilter: THREE.LinearFilter, minFilter: THREE.LinearFilter };\r\n\r\n\tthis.renderTarget = new THREE.WebGLRenderTargetCube( cubeResolution, cubeResolution, options );\r\n\r\n\tthis.updateCubeMap = function ( renderer, scene ) {\r\n\r\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\r\n\r\n\t\tvar renderTarget = this.renderTarget;\r\n\t\tvar generateMipmaps = renderTarget.texture.generateMipmaps;\r\n\r\n\t\trenderTarget.texture.generateMipmaps = false;\r\n\r\n\t\trenderTarget.activeCubeFace = 0;\r\n\t\trenderer.render( scene, cameraPX, renderTarget );\r\n\r\n\t\trenderTarget.activeCubeFace = 1;\r\n\t\trenderer.render( scene, cameraNX, renderTarget );\r\n\r\n\t\trenderTarget.activeCubeFace = 2;\r\n\t\trenderer.render( scene, cameraPY, renderTarget );\r\n\r\n\t\trenderTarget.activeCubeFace = 3;\r\n\t\trenderer.render( scene, cameraNY, renderTarget );\r\n\r\n\t\trenderTarget.activeCubeFace = 4;\r\n\t\trenderer.render( scene, cameraPZ, renderTarget );\r\n\r\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\r\n\r\n\t\trenderTarget.activeCubeFace = 5;\r\n\t\trenderer.render( scene, cameraNZ, renderTarget );\r\n\r\n\t\trenderer.setRenderTarget( null );\r\n\r\n\t};\r\n\r\n};\r\n\r\nTHREE.CubeCamera.prototype = Object.create( THREE.Object3D.prototype );\r\nTHREE.CubeCamera.prototype.constructor = THREE.CubeCamera;\r\n\r\n// File:src/cameras/OrthographicCamera.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.OrthographicCamera = function ( left, right, top, bottom, near, far ) {\r\n\r\n\tTHREE.Camera.call( this );\r\n\r\n\tthis.type = 'OrthographicCamera';\r\n\r\n\tthis.zoom = 1;\r\n\r\n\tthis.left = left;\r\n\tthis.right = right;\r\n\tthis.top = top;\r\n\tthis.bottom = bottom;\r\n\r\n\tthis.near = ( near !== undefined ) ? near : 0.1;\r\n\tthis.far = ( far !== undefined ) ? far : 2000;\r\n\r\n\tthis.updateProjectionMatrix();\r\n\r\n};\r\n\r\nTHREE.OrthographicCamera.prototype = Object.assign( Object.create( THREE.Camera.prototype ), {\r\n\r\n\tconstructor: THREE.OrthographicCamera,\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tTHREE.Camera.prototype.copy.call( this, source );\r\n\r\n\t\tthis.left = source.left;\r\n\t\tthis.right = source.right;\r\n\t\tthis.top = source.top;\r\n\t\tthis.bottom = source.bottom;\r\n\t\tthis.near = source.near;\r\n\t\tthis.far = source.far;\r\n\r\n\t\tthis.zoom = source.zoom;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tupdateProjectionMatrix: function () {\r\n\r\n\t\tvar dx = ( this.right - this.left ) / ( 2 * this.zoom );\r\n\t\tvar dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\r\n\t\tvar cx = ( this.right + this.left ) / 2;\r\n\t\tvar cy = ( this.top + this.bottom ) / 2;\r\n\r\n\t\tthis.projectionMatrix.makeOrthographic( cx - dx, cx + dx, cy + dy, cy - dy, this.near, this.far );\r\n\r\n\t},\r\n\r\n\ttoJSON: function ( meta ) {\r\n\r\n\t\tvar data = THREE.Object3D.prototype.toJSON.call( this, meta );\r\n\r\n\t\tdata.object.zoom = this.zoom;\r\n\t\tdata.object.left = this.left;\r\n\t\tdata.object.right = this.right;\r\n\t\tdata.object.top = this.top;\r\n\t\tdata.object.bottom = this.bottom;\r\n\t\tdata.object.near = this.near;\r\n\t\tdata.object.far = this.far;\r\n\r\n\t\treturn data;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/cameras/PerspectiveCamera.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author greggman / http://games.greggman.com/\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n * @author tschw\r\n */\r\n\r\nTHREE.PerspectiveCamera = function( fov, aspect, near, far ) {\r\n\r\n\tTHREE.Camera.call( this );\r\n\r\n\tthis.type = 'PerspectiveCamera';\r\n\r\n\tthis.fov = fov !== undefined ? fov : 50;\r\n\tthis.zoom = 1;\r\n\r\n\tthis.near = near !== undefined ? near : 0.1;\r\n\tthis.far = far !== undefined ? far : 2000;\r\n\tthis.focus = 10;\r\n\r\n\tthis.aspect = aspect !== undefined ? aspect : 1;\r\n\tthis.view = null;\r\n\r\n\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\r\n\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\r\n\r\n\tthis.updateProjectionMatrix();\r\n\r\n};\r\n\r\nTHREE.PerspectiveCamera.prototype = Object.assign( Object.create( THREE.Camera.prototype ), {\r\n\r\n\tconstructor: THREE.PerspectiveCamera,\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tTHREE.Camera.prototype.copy.call( this, source );\r\n\r\n\t\tthis.fov = source.fov;\r\n\t\tthis.zoom = source.zoom;\r\n\r\n\t\tthis.near = source.near;\r\n\t\tthis.far = source.far;\r\n\t\tthis.focus = source.focus;\r\n\r\n\t\tthis.aspect = source.aspect;\r\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\r\n\r\n\t\tthis.filmGauge = source.filmGauge;\r\n\t\tthis.filmOffset = source.filmOffset;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\t/**\r\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\r\n\t *\r\n\t * The default film gauge is 35, so that the focal length can be specified for\r\n\t * a 35mm (full frame) camera.\r\n\t *\r\n\t * Values for focal length and film gauge must have the same unit.\r\n\t */\r\n\tsetFocalLength: function ( focalLength ) {\r\n\r\n\t\t// see http://www.bobatkins.com/photography/technical/field_of_view.html\r\n\t\tvar vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\r\n\r\n\t\tthis.fov = THREE.Math.RAD2DEG * 2 * Math.atan( vExtentSlope );\r\n\t\tthis.updateProjectionMatrix();\r\n\r\n\t},\r\n\r\n\t/**\r\n\t * Calculates the focal length from the current .fov and .filmGauge.\r\n\t */\r\n\tgetFocalLength: function () {\r\n\r\n\t\tvar vExtentSlope = Math.tan( THREE.Math.DEG2RAD * 0.5 * this.fov );\r\n\r\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\r\n\r\n\t},\r\n\r\n\tgetEffectiveFOV: function () {\r\n\r\n\t\treturn THREE.Math.RAD2DEG * 2 * Math.atan(\r\n\t\t\t\tMath.tan( THREE.Math.DEG2RAD * 0.5 * this.fov ) / this.zoom );\r\n\r\n\t},\r\n\r\n\tgetFilmWidth: function () {\r\n\r\n\t\t// film not completely covered in portrait format (aspect < 1)\r\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\r\n\r\n\t},\r\n\r\n\tgetFilmHeight: function () {\r\n\r\n\t\t// film not completely covered in landscape format (aspect > 1)\r\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\r\n\r\n\t},\r\n\r\n\t/**\r\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\r\n\t * multi-monitor/multi-machine setups.\r\n\t *\r\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\r\n\t * the monitors are in grid like this\r\n\t *\r\n\t * +---+---+---+\r\n\t * | A | B | C |\r\n\t * +---+---+---+\r\n\t * | D | E | F |\r\n\t * +---+---+---+\r\n\t *\r\n\t * then for each monitor you would call it like this\r\n\t *\r\n\t * var w = 1920;\r\n\t * var h = 1080;\r\n\t * var fullWidth = w * 3;\r\n\t * var fullHeight = h * 2;\r\n\t *\r\n\t * --A--\r\n\t * camera.setOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\r\n\t * --B--\r\n\t * camera.setOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\r\n\t * --C--\r\n\t * camera.setOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\r\n\t * --D--\r\n\t * camera.setOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\r\n\t * --E--\r\n\t * camera.setOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\r\n\t * --F--\r\n\t * camera.setOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\r\n\t *\r\n\t * Note there is no reason monitors have to be the same size or in a grid.\r\n\t */\r\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\r\n\r\n\t\tthis.aspect = fullWidth / fullHeight;\r\n\r\n\t\tthis.view = {\r\n\t\t\tfullWidth: fullWidth,\r\n\t\t\tfullHeight: fullHeight,\r\n\t\t\toffsetX: x,\r\n\t\t\toffsetY: y,\r\n\t\t\twidth: width,\r\n\t\t\theight: height\r\n\t\t};\r\n\r\n\t\tthis.updateProjectionMatrix();\r\n\r\n\t},\r\n\r\n\tclearViewOffset: function() {\r\n\r\n\t\tthis.view = null;\r\n\t\tthis.updateProjectionMatrix();\r\n\r\n\t},\r\n\r\n\tupdateProjectionMatrix: function () {\r\n\r\n\t\tvar near = this.near,\r\n\t\t\ttop = near * Math.tan(\r\n\t\t\t\t\tTHREE.Math.DEG2RAD * 0.5 * this.fov ) / this.zoom,\r\n\t\t\theight = 2 * top,\r\n\t\t\twidth = this.aspect * height,\r\n\t\t\tleft = - 0.5 * width,\r\n\t\t\tview = this.view;\r\n\r\n\t\tif ( view !== null ) {\r\n\r\n\t\t\tvar fullWidth = view.fullWidth,\r\n\t\t\t\tfullHeight = view.fullHeight;\r\n\r\n\t\t\tleft += view.offsetX * width / fullWidth;\r\n\t\t\ttop -= view.offsetY * height / fullHeight;\r\n\t\t\twidth *= view.width / fullWidth;\r\n\t\t\theight *= view.height / fullHeight;\r\n\r\n\t\t}\r\n\r\n\t\tvar skew = this.filmOffset;\r\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\r\n\r\n\t\tthis.projectionMatrix.makeFrustum(\r\n\t\t\t\tleft, left + width, top - height, top, near, this.far );\r\n\r\n\t},\r\n\r\n\ttoJSON: function ( meta ) {\r\n\r\n\t\tvar data = THREE.Object3D.prototype.toJSON.call( this, meta );\r\n\r\n\t\tdata.object.fov = this.fov;\r\n\t\tdata.object.zoom = this.zoom;\r\n\r\n\t\tdata.object.near = this.near;\r\n\t\tdata.object.far = this.far;\r\n\t\tdata.object.focus = this.focus;\r\n\r\n\t\tdata.object.aspect = this.aspect;\r\n\r\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\r\n\r\n\t\tdata.object.filmGauge = this.filmGauge;\r\n\t\tdata.object.filmOffset = this.filmOffset;\r\n\r\n\t\treturn data;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/cameras/StereoCamera.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.StereoCamera = function () {\r\n\r\n\tthis.type = 'StereoCamera';\r\n\r\n\tthis.aspect = 1;\r\n\r\n\tthis.cameraL = new THREE.PerspectiveCamera();\r\n\tthis.cameraL.layers.enable( 1 );\r\n\tthis.cameraL.matrixAutoUpdate = false;\r\n\r\n\tthis.cameraR = new THREE.PerspectiveCamera();\r\n\tthis.cameraR.layers.enable( 2 );\r\n\tthis.cameraR.matrixAutoUpdate = false;\r\n\r\n};\r\n\r\nObject.assign( THREE.StereoCamera.prototype, {\r\n\r\n\tupdate: ( function () {\r\n\r\n\t\tvar focus, fov, aspect, near, far;\r\n\r\n\t\tvar eyeRight = new THREE.Matrix4();\r\n\t\tvar eyeLeft = new THREE.Matrix4();\r\n\r\n\t\treturn function update ( camera ) {\r\n\r\n\t\t\tvar needsUpdate = focus !== camera.focus || fov !== camera.fov ||\r\n\t\t\t\t\t\t\t\t\t\t\t\taspect !== camera.aspect * this.aspect || near !== camera.near ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tfar !== camera.far;\r\n\r\n\t\t\tif ( needsUpdate ) {\r\n\r\n\t\t\t\tfocus = camera.focus;\r\n\t\t\t\tfov = camera.fov;\r\n\t\t\t\taspect = camera.aspect * this.aspect;\r\n\t\t\t\tnear = camera.near;\r\n\t\t\t\tfar = camera.far;\r\n\r\n\t\t\t\t// Off-axis stereoscopic effect based on\r\n\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\r\n\r\n\t\t\t\tvar projectionMatrix = camera.projectionMatrix.clone();\r\n\t\t\t\tvar eyeSep = 0.064 / 2;\r\n\t\t\t\tvar eyeSepOnProjection = eyeSep * near / focus;\r\n\t\t\t\tvar ymax = near * Math.tan( THREE.Math.DEG2RAD * fov * 0.5 );\r\n\t\t\t\tvar xmin, xmax;\r\n\r\n\t\t\t\t// translate xOffset\r\n\r\n\t\t\t\teyeLeft.elements[ 12 ] = - eyeSep;\r\n\t\t\t\teyeRight.elements[ 12 ] = eyeSep;\r\n\r\n\t\t\t\t// for left eye\r\n\r\n\t\t\t\txmin = - ymax * aspect + eyeSepOnProjection;\r\n\t\t\t\txmax = ymax * aspect + eyeSepOnProjection;\r\n\r\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\r\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\r\n\r\n\t\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\r\n\r\n\t\t\t\t// for right eye\r\n\r\n\t\t\t\txmin = - ymax * aspect - eyeSepOnProjection;\r\n\t\t\t\txmax = ymax * aspect - eyeSepOnProjection;\r\n\r\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\r\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\r\n\r\n\t\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft );\r\n\t\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight );\r\n\r\n\t\t};\r\n\r\n\t} )()\r\n\r\n} );\r\n\r\n// File:src/lights/Light.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Light = function ( color, intensity ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'Light';\r\n\r\n\tthis.color = new THREE.Color( color );\r\n\tthis.intensity = intensity !== undefined ? intensity : 1;\r\n\r\n\tthis.receiveShadow = undefined;\r\n\r\n};\r\n\r\nTHREE.Light.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), {\r\n\r\n\tconstructor: THREE.Light,\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tTHREE.Object3D.prototype.copy.call( this, source );\r\n\r\n\t\tthis.color.copy( source.color );\r\n\t\tthis.intensity = source.intensity;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoJSON: function ( meta ) {\r\n\r\n\t\tvar data = THREE.Object3D.prototype.toJSON.call( this, meta );\r\n\r\n\t\tdata.object.color = this.color.getHex();\r\n\t\tdata.object.intensity = this.intensity;\r\n\r\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\r\n\r\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\r\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\r\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\r\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\r\n\r\n\t\treturn data;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/lights/LightShadow.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.LightShadow = function ( camera ) {\r\n\r\n\tthis.camera = camera;\r\n\r\n\tthis.bias = 0;\r\n\tthis.radius = 1;\r\n\r\n\tthis.mapSize = new THREE.Vector2( 512, 512 );\r\n\r\n\tthis.map = null;\r\n\tthis.matrix = new THREE.Matrix4();\r\n\r\n};\r\n\r\nObject.assign( THREE.LightShadow.prototype, {\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tthis.camera = source.camera.clone();\r\n\r\n\t\tthis.bias = source.bias;\r\n\t\tthis.radius = source.radius;\r\n\r\n\t\tthis.mapSize.copy( source.mapSize );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/lights/AmbientLight.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.AmbientLight = function ( color, intensity ) {\r\n\r\n\tTHREE.Light.call( this, color, intensity );\r\n\r\n\tthis.type = 'AmbientLight';\r\n\r\n\tthis.castShadow = undefined;\r\n\r\n};\r\n\r\nTHREE.AmbientLight.prototype = Object.assign( Object.create( THREE.Light.prototype ), {\r\n\r\n\tconstructor: THREE.AmbientLight\r\n\r\n} );\r\n\r\n// File:src/lights/DirectionalLight.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.DirectionalLight = function ( color, intensity ) {\r\n\r\n\tTHREE.Light.call( this, color, intensity );\r\n\r\n\tthis.type = 'DirectionalLight';\r\n\r\n\tthis.position.set( 0, 1, 0 );\r\n\tthis.updateMatrix();\r\n\r\n\tthis.target = new THREE.Object3D();\r\n\r\n\tthis.shadow = new THREE.DirectionalLightShadow();\r\n\r\n};\r\n\r\nTHREE.DirectionalLight.prototype = Object.assign( Object.create( THREE.Light.prototype ), {\r\n\r\n\tconstructor: THREE.DirectionalLight,\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tTHREE.Light.prototype.copy.call( this, source );\r\n\r\n\t\tthis.target = source.target.clone();\r\n\r\n\t\tthis.shadow = source.shadow.clone();\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/lights/DirectionalLightShadow.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.DirectionalLightShadow = function ( light ) {\r\n\r\n\tTHREE.LightShadow.call( this, new THREE.OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\r\n\r\n};\r\n\r\nTHREE.DirectionalLightShadow.prototype = Object.assign( Object.create( THREE.LightShadow.prototype ), {\r\n\r\n\tconstructor: THREE.DirectionalLightShadow\r\n\r\n} );\r\n\r\n// File:src/lights/HemisphereLight.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.HemisphereLight = function ( skyColor, groundColor, intensity ) {\r\n\r\n\tTHREE.Light.call( this, skyColor, intensity );\r\n\r\n\tthis.type = 'HemisphereLight';\r\n\r\n\tthis.castShadow = undefined;\r\n\r\n\tthis.position.set( 0, 1, 0 );\r\n\tthis.updateMatrix();\r\n\r\n\tthis.groundColor = new THREE.Color( groundColor );\r\n\r\n};\r\n\r\nTHREE.HemisphereLight.prototype = Object.assign( Object.create( THREE.Light.prototype ), {\r\n\r\n\tconstructor: THREE.HemisphereLight,\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tTHREE.Light.prototype.copy.call( this, source );\r\n\r\n\t\tthis.groundColor.copy( source.groundColor );\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/lights/PointLight.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\n\r\nTHREE.PointLight = function ( color, intensity, distance, decay ) {\r\n\r\n\tTHREE.Light.call( this, color, intensity );\r\n\r\n\tthis.type = 'PointLight';\r\n\r\n\tObject.defineProperty( this, 'power', {\r\n\t\tget: function () {\r\n\t\t\t// intensity = power per solid angle.\r\n\t\t\t// ref: equation (15) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf\r\n\t\t\treturn this.intensity * 4 * Math.PI;\r\n\r\n\t\t},\r\n\t\tset: function ( power ) {\r\n\t\t\t// intensity = power per solid angle.\r\n\t\t\t// ref: equation (15) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf\r\n\t\t\tthis.intensity = power / ( 4 * Math.PI );\r\n\t\t}\r\n\t} );\r\n\r\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\r\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\r\n\r\n\tthis.shadow = new THREE.LightShadow( new THREE.PerspectiveCamera( 90, 1, 0.5, 500 ) );\r\n\r\n};\r\n\r\nTHREE.PointLight.prototype = Object.assign( Object.create( THREE.Light.prototype ), {\r\n\r\n\tconstructor: THREE.PointLight,\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tTHREE.Light.prototype.copy.call( this, source );\r\n\r\n\t\tthis.distance = source.distance;\r\n\t\tthis.decay = source.decay;\r\n\r\n\t\tthis.shadow = source.shadow.clone();\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/lights/SpotLight.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.SpotLight = function ( color, intensity, distance, angle, penumbra, decay ) {\r\n\r\n\tTHREE.Light.call( this, color, intensity );\r\n\r\n\tthis.type = 'SpotLight';\r\n\r\n\tthis.position.set( 0, 1, 0 );\r\n\tthis.updateMatrix();\r\n\r\n\tthis.target = new THREE.Object3D();\r\n\r\n\tObject.defineProperty( this, 'power', {\r\n\t\tget: function () {\r\n\t\t\t// intensity = power per solid angle.\r\n\t\t\t// ref: equation (17) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf\r\n\t\t\treturn this.intensity * Math.PI;\r\n\t\t},\r\n\t\tset: function ( power ) {\r\n\t\t\t// intensity = power per solid angle.\r\n\t\t\t// ref: equation (17) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf\r\n\t\t\tthis.intensity = power / Math.PI;\r\n\t\t}\r\n\t} );\r\n\r\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\r\n\tthis.angle = ( angle !== undefined ) ? angle : Math.PI / 3;\r\n\tthis.penumbra = ( penumbra !== undefined ) ? penumbra : 0;\r\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\r\n\r\n\tthis.shadow = new THREE.SpotLightShadow();\r\n\r\n};\r\n\r\nTHREE.SpotLight.prototype = Object.assign( Object.create( THREE.Light.prototype ), {\r\n\r\n\tconstructor: THREE.SpotLight,\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tTHREE.Light.prototype.copy.call( this, source );\r\n\r\n\t\tthis.distance = source.distance;\r\n\t\tthis.angle = source.angle;\r\n\t\tthis.penumbra = source.penumbra;\r\n\t\tthis.decay = source.decay;\r\n\r\n\t\tthis.target = source.target.clone();\r\n\r\n\t\tthis.shadow = source.shadow.clone();\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/lights/SpotLightShadow.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.SpotLightShadow = function () {\r\n\r\n\tTHREE.LightShadow.call( this, new THREE.PerspectiveCamera( 50, 1, 0.5, 500 ) );\r\n\r\n};\r\n\r\nTHREE.SpotLightShadow.prototype = Object.assign( Object.create( THREE.LightShadow.prototype ), {\r\n\r\n\tconstructor: THREE.SpotLightShadow,\r\n\r\n\tupdate: function ( light ) {\r\n\r\n\t\tvar fov = THREE.Math.RAD2DEG * 2 * light.angle;\r\n\t\tvar aspect = this.mapSize.width / this.mapSize.height;\r\n\t\tvar far = light.distance || 500;\r\n\r\n\t\tvar camera = this.camera;\r\n\r\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\r\n\r\n\t\t\tcamera.fov = fov;\r\n\t\t\tcamera.aspect = aspect;\r\n\t\t\tcamera.far = far;\r\n\t\t\tcamera.updateProjectionMatrix();\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/loaders/AudioLoader.js\r\n\r\n/**\r\n * @author Reece Aaron Lecrivain / http://reecenotes.com/\r\n */\r\n\r\nTHREE.AudioLoader = function ( manager ) {\r\n\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\r\n};\r\n\r\nTHREE.AudioLoader.prototype = {\r\n\r\n\tconstructor: THREE.AudioLoader,\r\n\r\n\tload: function ( url, onLoad, onProgress, onError ) {\r\n\r\n\t\tvar loader = new THREE.XHRLoader( this.manager );\r\n\t\tloader.setResponseType( 'arraybuffer' );\r\n\t\tloader.load( url, function ( buffer ) {\r\n\r\n\t\t\tvar context = THREE.AudioContext;\r\n\r\n\t\t\tcontext.decodeAudioData( buffer, function ( audioBuffer ) {\r\n\r\n\t\t\t\tonLoad( audioBuffer );\r\n\r\n\t\t\t} );\r\n\r\n\t\t}, onProgress, onError );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/Cache.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Cache = {\r\n\r\n\tenabled: false,\r\n\r\n\tfiles: {},\r\n\r\n\tadd: function ( key, file ) {\r\n\r\n\t\tif ( this.enabled === false ) return;\r\n\r\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\r\n\r\n\t\tthis.files[ key ] = file;\r\n\r\n\t},\r\n\r\n\tget: function ( key ) {\r\n\r\n\t\tif ( this.enabled === false ) return;\r\n\r\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\r\n\r\n\t\treturn this.files[ key ];\r\n\r\n\t},\r\n\r\n\tremove: function ( key ) {\r\n\r\n\t\tdelete this.files[ key ];\r\n\r\n\t},\r\n\r\n\tclear: function () {\r\n\r\n\t\tthis.files = {};\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/Loader.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Loader = function () {\r\n\r\n\tthis.onLoadStart = function () {};\r\n\tthis.onLoadProgress = function () {};\r\n\tthis.onLoadComplete = function () {};\r\n\r\n};\r\n\r\nTHREE.Loader.prototype = {\r\n\r\n\tconstructor: THREE.Loader,\r\n\r\n\tcrossOrigin: undefined,\r\n\r\n\textractUrlBase: function ( url ) {\r\n\r\n\t\tvar parts = url.split( '/' );\r\n\r\n\t\tif ( parts.length === 1 ) return './';\r\n\r\n\t\tparts.pop();\r\n\r\n\t\treturn parts.join( '/' ) + '/';\r\n\r\n\t},\r\n\r\n\tinitMaterials: function ( materials, texturePath, crossOrigin ) {\r\n\r\n\t\tvar array = [];\r\n\r\n\t\tfor ( var i = 0; i < materials.length; ++ i ) {\r\n\r\n\t\t\tarray[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin );\r\n\r\n\t\t}\r\n\r\n\t\treturn array;\r\n\r\n\t},\r\n\r\n\tcreateMaterial: ( function () {\r\n\r\n\t\tvar color, textureLoader, materialLoader;\r\n\r\n\t\treturn function ( m, texturePath, crossOrigin ) {\r\n\r\n\t\t\tif ( color === undefined ) color = new THREE.Color();\r\n\t\t\tif ( textureLoader === undefined ) textureLoader = new THREE.TextureLoader();\r\n\t\t\tif ( materialLoader === undefined ) materialLoader = new THREE.MaterialLoader();\r\n\r\n\t\t\t// convert from old material format\r\n\r\n\t\t\tvar textures = {};\r\n\r\n\t\t\tfunction loadTexture( path, repeat, offset, wrap, anisotropy ) {\r\n\r\n\t\t\t\tvar fullPath = texturePath + path;\r\n\t\t\t\tvar loader = THREE.Loader.Handlers.get( fullPath );\r\n\r\n\t\t\t\tvar texture;\r\n\r\n\t\t\t\tif ( loader !== null ) {\r\n\r\n\t\t\t\t\ttexture = loader.load( fullPath );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\ttextureLoader.setCrossOrigin( crossOrigin );\r\n\t\t\t\t\ttexture = textureLoader.load( fullPath );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( repeat !== undefined ) {\r\n\r\n\t\t\t\t\ttexture.repeat.fromArray( repeat );\r\n\r\n\t\t\t\t\tif ( repeat[ 0 ] !== 1 ) texture.wrapS = THREE.RepeatWrapping;\r\n\t\t\t\t\tif ( repeat[ 1 ] !== 1 ) texture.wrapT = THREE.RepeatWrapping;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( offset !== undefined ) {\r\n\r\n\t\t\t\t\ttexture.offset.fromArray( offset );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( wrap !== undefined ) {\r\n\r\n\t\t\t\t\tif ( wrap[ 0 ] === 'repeat' ) texture.wrapS = THREE.RepeatWrapping;\r\n\t\t\t\t\tif ( wrap[ 0 ] === 'mirror' ) texture.wrapS = THREE.MirroredRepeatWrapping;\r\n\r\n\t\t\t\t\tif ( wrap[ 1 ] === 'repeat' ) texture.wrapT = THREE.RepeatWrapping;\r\n\t\t\t\t\tif ( wrap[ 1 ] === 'mirror' ) texture.wrapT = THREE.MirroredRepeatWrapping;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( anisotropy !== undefined ) {\r\n\r\n\t\t\t\t\ttexture.anisotropy = anisotropy;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar uuid = THREE.Math.generateUUID();\r\n\r\n\t\t\t\ttextures[ uuid ] = texture;\r\n\r\n\t\t\t\treturn uuid;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//\r\n\r\n\t\t\tvar json = {\r\n\t\t\t\tuuid: THREE.Math.generateUUID(),\r\n\t\t\t\ttype: 'MeshLambertMaterial'\r\n\t\t\t};\r\n\r\n\t\t\tfor ( var name in m ) {\r\n\r\n\t\t\t\tvar value = m[ name ];\r\n\r\n\t\t\t\tswitch ( name ) {\r\n\t\t\t\t\tcase 'DbgColor':\r\n\t\t\t\t\tcase 'DbgIndex':\r\n\t\t\t\t\tcase 'opticalDensity':\r\n\t\t\t\t\tcase 'illumination':\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'DbgName':\r\n\t\t\t\t\t\tjson.name = value;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'blending':\r\n\t\t\t\t\t\tjson.blending = THREE[ value ];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'colorAmbient':\r\n\t\t\t\t\tcase 'mapAmbient':\r\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' );\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'colorDiffuse':\r\n\t\t\t\t\t\tjson.color = color.fromArray( value ).getHex();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'colorSpecular':\r\n\t\t\t\t\t\tjson.specular = color.fromArray( value ).getHex();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'colorEmissive':\r\n\t\t\t\t\t\tjson.emissive = color.fromArray( value ).getHex();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'specularCoef':\r\n\t\t\t\t\t\tjson.shininess = value;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'shading':\r\n\t\t\t\t\t\tif ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial';\r\n\t\t\t\t\t\tif ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'mapDiffuse':\r\n\t\t\t\t\t\tjson.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy );\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'mapDiffuseRepeat':\r\n\t\t\t\t\tcase 'mapDiffuseOffset':\r\n\t\t\t\t\tcase 'mapDiffuseWrap':\r\n\t\t\t\t\tcase 'mapDiffuseAnisotropy':\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'mapLight':\r\n\t\t\t\t\t\tjson.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy );\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'mapLightRepeat':\r\n\t\t\t\t\tcase 'mapLightOffset':\r\n\t\t\t\t\tcase 'mapLightWrap':\r\n\t\t\t\t\tcase 'mapLightAnisotropy':\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'mapAO':\r\n\t\t\t\t\t\tjson.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy );\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'mapAORepeat':\r\n\t\t\t\t\tcase 'mapAOOffset':\r\n\t\t\t\t\tcase 'mapAOWrap':\r\n\t\t\t\t\tcase 'mapAOAnisotropy':\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'mapBump':\r\n\t\t\t\t\t\tjson.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy );\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'mapBumpScale':\r\n\t\t\t\t\t\tjson.bumpScale = value;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'mapBumpRepeat':\r\n\t\t\t\t\tcase 'mapBumpOffset':\r\n\t\t\t\t\tcase 'mapBumpWrap':\r\n\t\t\t\t\tcase 'mapBumpAnisotropy':\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'mapNormal':\r\n\t\t\t\t\t\tjson.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy );\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'mapNormalFactor':\r\n\t\t\t\t\t\tjson.normalScale = [ value, value ];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'mapNormalRepeat':\r\n\t\t\t\t\tcase 'mapNormalOffset':\r\n\t\t\t\t\tcase 'mapNormalWrap':\r\n\t\t\t\t\tcase 'mapNormalAnisotropy':\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'mapSpecular':\r\n\t\t\t\t\t\tjson.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy );\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'mapSpecularRepeat':\r\n\t\t\t\t\tcase 'mapSpecularOffset':\r\n\t\t\t\t\tcase 'mapSpecularWrap':\r\n\t\t\t\t\tcase 'mapSpecularAnisotropy':\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'mapAlpha':\r\n\t\t\t\t\t\tjson.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy );\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'mapAlphaRepeat':\r\n\t\t\t\t\tcase 'mapAlphaOffset':\r\n\t\t\t\t\tcase 'mapAlphaWrap':\r\n\t\t\t\t\tcase 'mapAlphaAnisotropy':\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'flipSided':\r\n\t\t\t\t\t\tjson.side = THREE.BackSide;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'doubleSided':\r\n\t\t\t\t\t\tjson.side = THREE.DoubleSide;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'transparency':\r\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' );\r\n\t\t\t\t\t\tjson.opacity = value;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'depthTest':\r\n\t\t\t\t\tcase 'depthWrite':\r\n\t\t\t\t\tcase 'colorWrite':\r\n\t\t\t\t\tcase 'opacity':\r\n\t\t\t\t\tcase 'reflectivity':\r\n\t\t\t\t\tcase 'transparent':\r\n\t\t\t\t\tcase 'visible':\r\n\t\t\t\t\tcase 'wireframe':\r\n\t\t\t\t\t\tjson[ name ] = value;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'vertexColors':\r\n\t\t\t\t\t\tif ( value === true ) json.vertexColors = THREE.VertexColors;\r\n\t\t\t\t\t\tif ( value === 'face' ) json.vertexColors = THREE.FaceColors;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tconsole.error( 'THREE.Loader.createMaterial: Unsupported', name, value );\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( json.type === 'MeshBasicMaterial' ) delete json.emissive;\r\n\t\t\tif ( json.type !== 'MeshPhongMaterial' ) delete json.specular;\r\n\r\n\t\t\tif ( json.opacity < 1 ) json.transparent = true;\r\n\r\n\t\t\tmaterialLoader.setTextures( textures );\r\n\r\n\t\t\treturn materialLoader.parse( json );\r\n\r\n\t\t};\r\n\r\n\t} )()\r\n\r\n};\r\n\r\nTHREE.Loader.Handlers = {\r\n\r\n\thandlers: [],\r\n\r\n\tadd: function ( regex, loader ) {\r\n\r\n\t\tthis.handlers.push( regex, loader );\r\n\r\n\t},\r\n\r\n\tget: function ( file ) {\r\n\r\n\t\tvar handlers = this.handlers;\r\n\r\n\t\tfor ( var i = 0, l = handlers.length; i < l; i += 2 ) {\r\n\r\n\t\t\tvar regex = handlers[ i ];\r\n\t\t\tvar loader = handlers[ i + 1 ];\r\n\r\n\t\t\tif ( regex.test( file ) ) {\r\n\r\n\t\t\t\treturn loader;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/XHRLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.XHRLoader = function ( manager ) {\r\n\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\r\n};\r\n\r\nTHREE.XHRLoader.prototype = {\r\n\r\n\tconstructor: THREE.XHRLoader,\r\n\r\n\tload: function ( url, onLoad, onProgress, onError ) {\r\n\r\n\t\tif ( this.path !== undefined ) url = this.path + url;\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar cached = THREE.Cache.get( url );\r\n\r\n\t\tif ( cached !== undefined ) {\r\n\r\n\t\t\tif ( onLoad ) {\r\n\r\n\t\t\t\tsetTimeout( function () {\r\n\r\n\t\t\t\t\tonLoad( cached );\r\n\r\n\t\t\t\t}, 0 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn cached;\r\n\r\n\t\t}\r\n\r\n\t\tvar request = new XMLHttpRequest();\r\n\t\trequest.overrideMimeType( 'text/plain' );\r\n\t\trequest.open( 'GET', url, true );\r\n\r\n\t\trequest.addEventListener( 'load', function ( event ) {\r\n\r\n\t\t\tvar response = event.target.response;\r\n\r\n\t\t\tTHREE.Cache.add( url, response );\r\n\r\n\t\t\tif ( this.status === 200 ) {\r\n\r\n\t\t\t\tif ( onLoad ) onLoad( response );\r\n\r\n\t\t\t\tscope.manager.itemEnd( url );\r\n\r\n\t\t\t} else if ( this.status === 0 ) {\r\n\r\n\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\r\n\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\r\n\r\n\t\t\t\tconsole.warn( 'THREE.XHRLoader: HTTP Status 0 received.' );\r\n\r\n\t\t\t\tif ( onLoad ) onLoad( response );\r\n\r\n\t\t\t\tscope.manager.itemEnd( url );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tif ( onError ) onError( event );\r\n\r\n\t\t\t\tscope.manager.itemError( url );\r\n\r\n\t\t\t}\r\n\r\n\t\t}, false );\r\n\r\n\t\tif ( onProgress !== undefined ) {\r\n\r\n\t\t\trequest.addEventListener( 'progress', function ( event ) {\r\n\r\n\t\t\t\tonProgress( event );\r\n\r\n\t\t\t}, false );\r\n\r\n\t\t}\r\n\r\n\t\trequest.addEventListener( 'error', function ( event ) {\r\n\r\n\t\t\tif ( onError ) onError( event );\r\n\r\n\t\t\tscope.manager.itemError( url );\r\n\r\n\t\t}, false );\r\n\r\n\t\tif ( this.responseType !== undefined ) request.responseType = this.responseType;\r\n\t\tif ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;\r\n\r\n\t\trequest.send( null );\r\n\r\n\t\tscope.manager.itemStart( url );\r\n\r\n\t\treturn request;\r\n\r\n\t},\r\n\r\n\tsetPath: function ( value ) {\r\n\r\n\t\tthis.path = value;\r\n\r\n\t},\r\n\r\n\tsetResponseType: function ( value ) {\r\n\r\n\t\tthis.responseType = value;\r\n\r\n\t},\r\n\r\n\tsetWithCredentials: function ( value ) {\r\n\r\n\t\tthis.withCredentials = value;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/FontLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.FontLoader = function ( manager ) {\r\n\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\r\n};\r\n\r\nTHREE.FontLoader.prototype = {\r\n\r\n\tconstructor: THREE.FontLoader,\r\n\r\n\tload: function ( url, onLoad, onProgress, onError ) {\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar loader = new THREE.XHRLoader( this.manager );\r\n\t\tloader.load( url, function ( text ) {\r\n\r\n\t\t\tvar json;\r\n\r\n\t\t\ttry {\r\n\r\n\t\t\t\tjson = JSON.parse( text );\r\n\r\n\t\t\t} catch ( e ) {\r\n\r\n\t\t\t\tconsole.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' );\r\n\t\t\t\tjson = JSON.parse( text.substring( 65, text.length - 2 ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar font = scope.parse( json );\r\n\r\n\t\t\tif ( onLoad ) onLoad( font );\r\n\r\n\t\t}, onProgress, onError );\r\n\r\n\t},\r\n\r\n\tparse: function ( json ) {\r\n\r\n\t\treturn new THREE.Font( json );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/ImageLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.ImageLoader = function ( manager ) {\r\n\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\r\n};\r\n\r\nTHREE.ImageLoader.prototype = {\r\n\r\n\tconstructor: THREE.ImageLoader,\r\n\r\n\tload: function ( url, onLoad, onProgress, onError ) {\r\n\r\n\t\tif ( this.path !== undefined ) url = this.path + url;\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar cached = THREE.Cache.get( url );\r\n\r\n\t\tif ( cached !== undefined ) {\r\n\r\n\t\t\tscope.manager.itemStart( url );\r\n\r\n\t\t\tif ( onLoad ) {\r\n\r\n\t\t\t\tsetTimeout( function () {\r\n\r\n\t\t\t\t\tonLoad( cached );\r\n\r\n\t\t\t\t\tscope.manager.itemEnd( url );\r\n\r\n\t\t\t\t}, 0 );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tscope.manager.itemEnd( url );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn cached;\r\n\r\n\t\t}\r\n\r\n\t\tvar image = document.createElement( 'img' );\r\n\r\n\t\timage.addEventListener( 'load', function ( event ) {\r\n\r\n\t\t\tTHREE.Cache.add( url, this );\r\n\r\n\t\t\tif ( onLoad ) onLoad( this );\r\n\r\n\t\t\tscope.manager.itemEnd( url );\r\n\r\n\t\t}, false );\r\n\r\n\t\tif ( onProgress !== undefined ) {\r\n\r\n\t\t\timage.addEventListener( 'progress', function ( event ) {\r\n\r\n\t\t\t\tonProgress( event );\r\n\r\n\t\t\t}, false );\r\n\r\n\t\t}\r\n\r\n\t\timage.addEventListener( 'error', function ( event ) {\r\n\r\n\t\t\tif ( onError ) onError( event );\r\n\r\n\t\t\tscope.manager.itemError( url );\r\n\r\n\t\t}, false );\r\n\r\n\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\r\n\r\n\t\tscope.manager.itemStart( url );\r\n\r\n\t\timage.src = url;\r\n\r\n\t\treturn image;\r\n\r\n\t},\r\n\r\n\tsetCrossOrigin: function ( value ) {\r\n\r\n\t\tthis.crossOrigin = value;\r\n\r\n\t},\r\n\r\n\tsetPath: function ( value ) {\r\n\r\n\t\tthis.path = value;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/JSONLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.JSONLoader = function ( manager ) {\r\n\r\n\tif ( typeof manager === 'boolean' ) {\r\n\r\n\t\tconsole.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' );\r\n\t\tmanager = undefined;\r\n\r\n\t}\r\n\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\r\n\tthis.withCredentials = false;\r\n\r\n};\r\n\r\nTHREE.JSONLoader.prototype = {\r\n\r\n\tconstructor: THREE.JSONLoader,\r\n\r\n\t// Deprecated\r\n\r\n\tget statusDomElement () {\r\n\r\n\t\tif ( this._statusDomElement === undefined ) {\r\n\r\n\t\t\tthis._statusDomElement = document.createElement( 'div' );\r\n\r\n\t\t}\r\n\r\n\t\tconsole.warn( 'THREE.JSONLoader: .statusDomElement has been removed.' );\r\n\t\treturn this._statusDomElement;\r\n\r\n\t},\r\n\r\n\tload: function( url, onLoad, onProgress, onError ) {\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar texturePath = this.texturePath && ( typeof this.texturePath === \"string\" ) ? this.texturePath : THREE.Loader.prototype.extractUrlBase( url );\r\n\r\n\t\tvar loader = new THREE.XHRLoader( this.manager );\r\n\t\tloader.setWithCredentials( this.withCredentials );\r\n\t\tloader.load( url, function ( text ) {\r\n\r\n\t\t\tvar json = JSON.parse( text );\r\n\t\t\tvar metadata = json.metadata;\r\n\r\n\t\t\tif ( metadata !== undefined ) {\r\n\r\n\t\t\t\tvar type = metadata.type;\r\n\r\n\t\t\t\tif ( type !== undefined ) {\r\n\r\n\t\t\t\t\tif ( type.toLowerCase() === 'object' ) {\r\n\r\n\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' );\r\n\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( type.toLowerCase() === 'scene' ) {\r\n\r\n\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.SceneLoader instead.' );\r\n\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar object = scope.parse( json, texturePath );\r\n\t\t\tonLoad( object.geometry, object.materials );\r\n\r\n\t\t}, onProgress, onError );\r\n\r\n\t},\r\n\r\n\tsetTexturePath: function ( value ) {\r\n\r\n\t\tthis.texturePath = value;\r\n\r\n\t},\r\n\r\n\tparse: function ( json, texturePath ) {\r\n\r\n\t\tvar geometry = new THREE.Geometry(),\r\n\t\tscale = ( json.scale !== undefined ) ? 1.0 / json.scale : 1.0;\r\n\r\n\t\tparseModel( scale );\r\n\r\n\t\tparseSkin();\r\n\t\tparseMorphing( scale );\r\n\t\tparseAnimations();\r\n\r\n\t\tgeometry.computeFaceNormals();\r\n\t\tgeometry.computeBoundingSphere();\r\n\r\n\t\tfunction parseModel( scale ) {\r\n\r\n\t\t\tfunction isBitSet( value, position ) {\r\n\r\n\t\t\t\treturn value & ( 1 << position );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar i, j, fi,\r\n\r\n\t\t\toffset, zLength,\r\n\r\n\t\tcolorIndex, normalIndex, uvIndex, materialIndex,\r\n\r\n\t\t\ttype,\r\n\t\t\tisQuad,\r\n\t\t\thasMaterial,\r\n\t\t\thasFaceVertexUv,\r\n\t\t\thasFaceNormal, hasFaceVertexNormal,\r\n\t\t\thasFaceColor, hasFaceVertexColor,\r\n\r\n\t\tvertex, face, faceA, faceB, hex, normal,\r\n\r\n\t\t\tuvLayer, uv, u, v,\r\n\r\n\t\t\tfaces = json.faces,\r\n\t\t\tvertices = json.vertices,\r\n\t\t\tnormals = json.normals,\r\n\t\t\tcolors = json.colors,\r\n\r\n\t\t\tnUvLayers = 0;\r\n\r\n\t\t\tif ( json.uvs !== undefined ) {\r\n\r\n\t\t\t\t// disregard empty arrays\r\n\r\n\t\t\t\tfor ( i = 0; i < json.uvs.length; i ++ ) {\r\n\r\n\t\t\t\t\tif ( json.uvs[ i ].length ) nUvLayers ++;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\r\n\r\n\t\t\t\t\tgeometry.faceVertexUvs[ i ] = [];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\toffset = 0;\r\n\t\t\tzLength = vertices.length;\r\n\r\n\t\t\twhile ( offset < zLength ) {\r\n\r\n\t\t\t\tvertex = new THREE.Vector3();\r\n\r\n\t\t\t\tvertex.x = vertices[ offset ++ ] * scale;\r\n\t\t\t\tvertex.y = vertices[ offset ++ ] * scale;\r\n\t\t\t\tvertex.z = vertices[ offset ++ ] * scale;\r\n\r\n\t\t\t\tgeometry.vertices.push( vertex );\r\n\r\n\t\t\t}\r\n\r\n\t\t\toffset = 0;\r\n\t\t\tzLength = faces.length;\r\n\r\n\t\t\twhile ( offset < zLength ) {\r\n\r\n\t\t\t\ttype = faces[ offset ++ ];\r\n\r\n\r\n\t\t\t\tisQuad = isBitSet( type, 0 );\r\n\t\t\t\thasMaterial = isBitSet( type, 1 );\r\n\t\t\t\thasFaceVertexUv = isBitSet( type, 3 );\r\n\t\t\t\thasFaceNormal = isBitSet( type, 4 );\r\n\t\t\t\thasFaceVertexNormal = isBitSet( type, 5 );\r\n\t\t\t\thasFaceColor\t = isBitSet( type, 6 );\r\n\t\t\t\thasFaceVertexColor = isBitSet( type, 7 );\r\n\r\n\t\t\t\t// console.log(\"type\", type, \"bits\", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor);\r\n\r\n\t\t\t\tif ( isQuad ) {\r\n\r\n\t\t\t\t\tfaceA = new THREE.Face3();\r\n\t\t\t\t\tfaceA.a = faces[ offset ];\r\n\t\t\t\t\tfaceA.b = faces[ offset + 1 ];\r\n\t\t\t\t\tfaceA.c = faces[ offset + 3 ];\r\n\r\n\t\t\t\t\tfaceB = new THREE.Face3();\r\n\t\t\t\t\tfaceB.a = faces[ offset + 1 ];\r\n\t\t\t\t\tfaceB.b = faces[ offset + 2 ];\r\n\t\t\t\t\tfaceB.c = faces[ offset + 3 ];\r\n\r\n\t\t\t\t\toffset += 4;\r\n\r\n\t\t\t\t\tif ( hasMaterial ) {\r\n\r\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\r\n\t\t\t\t\t\tfaceA.materialIndex = materialIndex;\r\n\t\t\t\t\t\tfaceB.materialIndex = materialIndex;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// to get face <=> uv index correspondence\r\n\r\n\t\t\t\t\tfi = geometry.faces.length;\r\n\r\n\t\t\t\t\tif ( hasFaceVertexUv ) {\r\n\r\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\r\n\r\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\r\n\r\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\r\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi + 1 ] = [];\r\n\r\n\t\t\t\t\t\t\tfor ( j = 0; j < 4; j ++ ) {\r\n\r\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\r\n\r\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\r\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\r\n\r\n\t\t\t\t\t\t\t\tuv = new THREE.Vector2( u, v );\r\n\r\n\t\t\t\t\t\t\t\tif ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv );\r\n\t\t\t\t\t\t\t\tif ( j !== 0 ) geometry.faceVertexUvs[ i ][ fi + 1 ].push( uv );\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( hasFaceNormal ) {\r\n\r\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\r\n\r\n\t\t\t\t\t\tfaceA.normal.set(\r\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\r\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\r\n\t\t\t\t\t\t\tnormals[ normalIndex ]\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tfaceB.normal.copy( faceA.normal );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\r\n\r\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\r\n\r\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\r\n\r\n\t\t\t\t\t\t\tnormal = new THREE.Vector3(\r\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\r\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\r\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\r\n\t\t\t\t\t\t\t);\r\n\r\n\r\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexNormals.push( normal );\r\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexNormals.push( normal );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tif ( hasFaceColor ) {\r\n\r\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\r\n\t\t\t\t\t\thex = colors[ colorIndex ];\r\n\r\n\t\t\t\t\t\tfaceA.color.setHex( hex );\r\n\t\t\t\t\t\tfaceB.color.setHex( hex );\r\n\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tif ( hasFaceVertexColor ) {\r\n\r\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\r\n\r\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\r\n\t\t\t\t\t\t\thex = colors[ colorIndex ];\r\n\r\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexColors.push( new THREE.Color( hex ) );\r\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexColors.push( new THREE.Color( hex ) );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tgeometry.faces.push( faceA );\r\n\t\t\t\t\tgeometry.faces.push( faceB );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tface = new THREE.Face3();\r\n\t\t\t\t\tface.a = faces[ offset ++ ];\r\n\t\t\t\t\tface.b = faces[ offset ++ ];\r\n\t\t\t\t\tface.c = faces[ offset ++ ];\r\n\r\n\t\t\t\t\tif ( hasMaterial ) {\r\n\r\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\r\n\t\t\t\t\t\tface.materialIndex = materialIndex;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// to get face <=> uv index correspondence\r\n\r\n\t\t\t\t\tfi = geometry.faces.length;\r\n\r\n\t\t\t\t\tif ( hasFaceVertexUv ) {\r\n\r\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\r\n\r\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\r\n\r\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\r\n\r\n\t\t\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\r\n\r\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\r\n\r\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\r\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\r\n\r\n\t\t\t\t\t\t\t\tuv = new THREE.Vector2( u, v );\r\n\r\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ].push( uv );\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( hasFaceNormal ) {\r\n\r\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\r\n\r\n\t\t\t\t\t\tface.normal.set(\r\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\r\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\r\n\t\t\t\t\t\t\tnormals[ normalIndex ]\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\r\n\r\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\r\n\r\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\r\n\r\n\t\t\t\t\t\t\tnormal = new THREE.Vector3(\r\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\r\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\r\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tface.vertexNormals.push( normal );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tif ( hasFaceColor ) {\r\n\r\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\r\n\t\t\t\t\t\tface.color.setHex( colors[ colorIndex ] );\r\n\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tif ( hasFaceVertexColor ) {\r\n\r\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\r\n\r\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\r\n\t\t\t\t\t\t\tface.vertexColors.push( new THREE.Color( colors[ colorIndex ] ) );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tgeometry.faces.push( face );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfunction parseSkin() {\r\n\r\n\t\t\tvar influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2;\r\n\r\n\t\t\tif ( json.skinWeights ) {\r\n\r\n\t\t\t\tfor ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) {\r\n\r\n\t\t\t\t\tvar x = json.skinWeights[ i ];\r\n\t\t\t\t\tvar y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0;\r\n\t\t\t\t\tvar z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0;\r\n\t\t\t\t\tvar w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0;\r\n\r\n\t\t\t\t\tgeometry.skinWeights.push( new THREE.Vector4( x, y, z, w ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( json.skinIndices ) {\r\n\r\n\t\t\t\tfor ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) {\r\n\r\n\t\t\t\t\tvar a = json.skinIndices[ i ];\r\n\t\t\t\t\tvar b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0;\r\n\t\t\t\t\tvar c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0;\r\n\t\t\t\t\tvar d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0;\r\n\r\n\t\t\t\t\tgeometry.skinIndices.push( new THREE.Vector4( a, b, c, d ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgeometry.bones = json.bones;\r\n\r\n\t\t\tif ( geometry.bones && geometry.bones.length > 0 && ( geometry.skinWeights.length !== geometry.skinIndices.length || geometry.skinIndices.length !== geometry.vertices.length ) ) {\r\n\r\n\t\t\t\tconsole.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' +\r\n\t\t\t\t\tgeometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfunction parseMorphing( scale ) {\r\n\r\n\t\t\tif ( json.morphTargets !== undefined ) {\r\n\r\n\t\t\t\tfor ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) {\r\n\r\n\t\t\t\t\tgeometry.morphTargets[ i ] = {};\r\n\t\t\t\t\tgeometry.morphTargets[ i ].name = json.morphTargets[ i ].name;\r\n\t\t\t\t\tgeometry.morphTargets[ i ].vertices = [];\r\n\r\n\t\t\t\t\tvar dstVertices = geometry.morphTargets[ i ].vertices;\r\n\t\t\t\t\tvar srcVertices = json.morphTargets[ i ].vertices;\r\n\r\n\t\t\t\t\tfor ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) {\r\n\r\n\t\t\t\t\t\tvar vertex = new THREE.Vector3();\r\n\t\t\t\t\t\tvertex.x = srcVertices[ v ] * scale;\r\n\t\t\t\t\t\tvertex.y = srcVertices[ v + 1 ] * scale;\r\n\t\t\t\t\t\tvertex.z = srcVertices[ v + 2 ] * scale;\r\n\r\n\t\t\t\t\t\tdstVertices.push( vertex );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( json.morphColors !== undefined && json.morphColors.length > 0 ) {\r\n\r\n\t\t\t\tconsole.warn( 'THREE.JSONLoader: \"morphColors\" no longer supported. Using them as face colors.' );\r\n\r\n\t\t\t\tvar faces = geometry.faces;\r\n\t\t\t\tvar morphColors = json.morphColors[ 0 ].colors;\r\n\r\n\t\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\r\n\r\n\t\t\t\t\tfaces[ i ].color.fromArray( morphColors, i * 3 );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfunction parseAnimations() {\r\n\r\n\t\t\tvar outputAnimations = [];\r\n\r\n\t\t\t// parse old style Bone/Hierarchy animations\r\n\t\t\tvar animations = [];\r\n\r\n\t\t\tif ( json.animation !== undefined ) {\r\n\r\n\t\t\t\tanimations.push( json.animation );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( json.animations !== undefined ) {\r\n\r\n\t\t\t\tif ( json.animations.length ) {\r\n\r\n\t\t\t\t\tanimations = animations.concat( json.animations );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tanimations.push( json.animations );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( var i = 0; i < animations.length; i ++ ) {\r\n\r\n\t\t\t\tvar clip = THREE.AnimationClip.parseAnimation( animations[ i ], geometry.bones );\r\n\t\t\t\tif ( clip ) outputAnimations.push( clip );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// parse implicit morph animations\r\n\t\t\tif ( geometry.morphTargets ) {\r\n\r\n\t\t\t\t// TODO: Figure out what an appropraite FPS is for morph target animations -- defaulting to 10, but really it is completely arbitrary.\r\n\t\t\t\tvar morphAnimationClips = THREE.AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 );\r\n\t\t\t\toutputAnimations = outputAnimations.concat( morphAnimationClips );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( outputAnimations.length > 0 ) geometry.animations = outputAnimations;\r\n\r\n\t\t}\r\n\r\n\t\tif ( json.materials === undefined || json.materials.length === 0 ) {\r\n\r\n\t\t\treturn { geometry: geometry };\r\n\r\n\t\t} else {\r\n\r\n\t\t\tvar materials = THREE.Loader.prototype.initMaterials( json.materials, texturePath, this.crossOrigin );\r\n\r\n\t\t\treturn { geometry: geometry, materials: materials };\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/LoadingManager.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.LoadingManager = function ( onLoad, onProgress, onError ) {\r\n\r\n\tvar scope = this;\r\n\r\n\tvar isLoading = false, itemsLoaded = 0, itemsTotal = 0;\r\n\r\n\tthis.onStart = undefined;\r\n\tthis.onLoad = onLoad;\r\n\tthis.onProgress = onProgress;\r\n\tthis.onError = onError;\r\n\r\n\tthis.itemStart = function ( url ) {\r\n\r\n\t\titemsTotal ++;\r\n\r\n\t\tif ( isLoading === false ) {\r\n\r\n\t\t\tif ( scope.onStart !== undefined ) {\r\n\r\n\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tisLoading = true;\r\n\r\n\t};\r\n\r\n\tthis.itemEnd = function ( url ) {\r\n\r\n\t\titemsLoaded ++;\r\n\r\n\t\tif ( scope.onProgress !== undefined ) {\r\n\r\n\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\r\n\r\n\t\t}\r\n\r\n\t\tif ( itemsLoaded === itemsTotal ) {\r\n\r\n\t\t\tisLoading = false;\r\n\r\n\t\t\tif ( scope.onLoad !== undefined ) {\r\n\r\n\t\t\t\tscope.onLoad();\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.itemError = function ( url ) {\r\n\r\n\t\tif ( scope.onError !== undefined ) {\r\n\r\n\t\t\tscope.onError( url );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n};\r\n\r\nTHREE.DefaultLoadingManager = new THREE.LoadingManager();\r\n\r\n// File:src/loaders/BufferGeometryLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.BufferGeometryLoader = function ( manager ) {\r\n\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\r\n};\r\n\r\nTHREE.BufferGeometryLoader.prototype = {\r\n\r\n\tconstructor: THREE.BufferGeometryLoader,\r\n\r\n\tload: function ( url, onLoad, onProgress, onError ) {\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar loader = new THREE.XHRLoader( scope.manager );\r\n\t\tloader.load( url, function ( text ) {\r\n\r\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\r\n\r\n\t\t}, onProgress, onError );\r\n\r\n\t},\r\n\r\n\tparse: function ( json ) {\r\n\r\n\t\tvar geometry = new THREE.BufferGeometry();\r\n\r\n\t\tvar index = json.data.index;\r\n\r\n\t\tvar TYPED_ARRAYS = {\r\n\t\t\t'Int8Array': Int8Array,\r\n\t\t\t'Uint8Array': Uint8Array,\r\n\t\t\t'Uint8ClampedArray': Uint8ClampedArray,\r\n\t\t\t'Int16Array': Int16Array,\r\n\t\t\t'Uint16Array': Uint16Array,\r\n\t\t\t'Int32Array': Int32Array,\r\n\t\t\t'Uint32Array': Uint32Array,\r\n\t\t\t'Float32Array': Float32Array,\r\n\t\t\t'Float64Array': Float64Array\r\n\t\t};\r\n\r\n\t\tif ( index !== undefined ) {\r\n\r\n\t\t\tvar typedArray = new TYPED_ARRAYS[ index.type ]( index.array );\r\n\t\t\tgeometry.setIndex( new THREE.BufferAttribute( typedArray, 1 ) );\r\n\r\n\t\t}\r\n\r\n\t\tvar attributes = json.data.attributes;\r\n\r\n\t\tfor ( var key in attributes ) {\r\n\r\n\t\t\tvar attribute = attributes[ key ];\r\n\t\t\tvar typedArray = new TYPED_ARRAYS[ attribute.type ]( attribute.array );\r\n\r\n\t\t\tgeometry.addAttribute( key, new THREE.BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ) );\r\n\r\n\t\t}\r\n\r\n\t\tvar groups = json.data.groups || json.data.drawcalls || json.data.offsets;\r\n\r\n\t\tif ( groups !== undefined ) {\r\n\r\n\t\t\tfor ( var i = 0, n = groups.length; i !== n; ++ i ) {\r\n\r\n\t\t\t\tvar group = groups[ i ];\r\n\r\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar boundingSphere = json.data.boundingSphere;\r\n\r\n\t\tif ( boundingSphere !== undefined ) {\r\n\r\n\t\t\tvar center = new THREE.Vector3();\r\n\r\n\t\t\tif ( boundingSphere.center !== undefined ) {\r\n\r\n\t\t\t\tcenter.fromArray( boundingSphere.center );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgeometry.boundingSphere = new THREE.Sphere( center, boundingSphere.radius );\r\n\r\n\t\t}\r\n\r\n\t\treturn geometry;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/MaterialLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.MaterialLoader = function ( manager ) {\r\n\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\tthis.textures = {};\r\n\r\n};\r\n\r\nTHREE.MaterialLoader.prototype = {\r\n\r\n\tconstructor: THREE.MaterialLoader,\r\n\r\n\tload: function ( url, onLoad, onProgress, onError ) {\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar loader = new THREE.XHRLoader( scope.manager );\r\n\t\tloader.load( url, function ( text ) {\r\n\r\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\r\n\r\n\t\t}, onProgress, onError );\r\n\r\n\t},\r\n\r\n\tsetTextures: function ( value ) {\r\n\r\n\t\tthis.textures = value;\r\n\r\n\t},\r\n\r\n\tgetTexture: function ( name ) {\r\n\r\n\t\tvar textures = this.textures;\r\n\r\n\t\tif ( textures[ name ] === undefined ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\r\n\r\n\t\t}\r\n\r\n\t\treturn textures[ name ];\r\n\r\n\t},\r\n\r\n\tparse: function ( json ) {\r\n\r\n\t\tvar material = new THREE[ json.type ];\r\n\r\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\r\n\t\tif ( json.name !== undefined ) material.name = json.name;\r\n\t\tif ( json.color !== undefined ) material.color.setHex( json.color );\r\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\r\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\r\n\t\tif ( json.emissive !== undefined ) material.emissive.setHex( json.emissive );\r\n\t\tif ( json.specular !== undefined ) material.specular.setHex( json.specular );\r\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\r\n\t\tif ( json.uniforms !== undefined ) material.uniforms = json.uniforms;\r\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\r\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\r\n\t\tif ( json.vertexColors !== undefined ) material.vertexColors = json.vertexColors;\r\n\t\tif ( json.shading !== undefined ) material.shading = json.shading;\r\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\r\n\t\tif ( json.side !== undefined ) material.side = json.side;\r\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\r\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\r\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\r\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\r\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\r\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\r\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\r\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\r\n\r\n\t\t// for PointsMaterial\r\n\t\tif ( json.size !== undefined ) material.size = json.size;\r\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\r\n\r\n\t\t// maps\r\n\r\n\t\tif ( json.map !== undefined ) material.map = this.getTexture( json.map );\r\n\r\n\t\tif ( json.alphaMap !== undefined ) {\r\n\r\n\t\t\tmaterial.alphaMap = this.getTexture( json.alphaMap );\r\n\t\t\tmaterial.transparent = true;\r\n\r\n\t\t}\r\n\r\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = this.getTexture( json.bumpMap );\r\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\r\n\r\n\t\tif ( json.normalMap !== undefined ) material.normalMap = this.getTexture( json.normalMap );\r\n\t\tif ( json.normalScale !== undefined ) {\r\n\r\n\t\t\tvar normalScale = json.normalScale;\r\n\r\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\r\n\r\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\r\n\r\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tmaterial.normalScale = new THREE.Vector2().fromArray( normalScale );\r\n\r\n\t\t}\r\n\r\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = this.getTexture( json.displacementMap );\r\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\r\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\r\n\r\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = this.getTexture( json.roughnessMap );\r\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = this.getTexture( json.metalnessMap );\r\n\r\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = this.getTexture( json.emissiveMap );\r\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\r\n\r\n\t\tif ( json.specularMap !== undefined ) material.specularMap = this.getTexture( json.specularMap );\r\n\r\n\t\tif ( json.envMap !== undefined ) {\r\n\r\n\t\t\tmaterial.envMap = this.getTexture( json.envMap );\r\n\t\t\tmaterial.combine = THREE.MultiplyOperation;\r\n\r\n\t\t}\r\n\r\n\t\tif ( json.reflectivity ) material.reflectivity = json.reflectivity;\r\n\r\n\t\tif ( json.lightMap !== undefined ) material.lightMap = this.getTexture( json.lightMap );\r\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\r\n\r\n\t\tif ( json.aoMap !== undefined ) material.aoMap = this.getTexture( json.aoMap );\r\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\r\n\r\n\t\t// MultiMaterial\r\n\r\n\t\tif ( json.materials !== undefined ) {\r\n\r\n\t\t\tfor ( var i = 0, l = json.materials.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tmaterial.materials.push( this.parse( json.materials[ i ] ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn material;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/ObjectLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.ObjectLoader = function ( manager ) {\r\n\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\tthis.texturePath = '';\r\n\r\n};\r\n\r\nTHREE.ObjectLoader.prototype = {\r\n\r\n\tconstructor: THREE.ObjectLoader,\r\n\r\n\tload: function ( url, onLoad, onProgress, onError ) {\r\n\r\n\t\tif ( this.texturePath === '' ) {\r\n\r\n\t\t\tthis.texturePath = url.substring( 0, url.lastIndexOf( '/' ) + 1 );\r\n\r\n\t\t}\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar loader = new THREE.XHRLoader( scope.manager );\r\n\t\tloader.load( url, function ( text ) {\r\n\r\n\t\t\tscope.parse( JSON.parse( text ), onLoad );\r\n\r\n\t\t}, onProgress, onError );\r\n\r\n\t},\r\n\r\n\tsetTexturePath: function ( value ) {\r\n\r\n\t\tthis.texturePath = value;\r\n\r\n\t},\r\n\r\n\tsetCrossOrigin: function ( value ) {\r\n\r\n\t\tthis.crossOrigin = value;\r\n\r\n\t},\r\n\r\n\tparse: function ( json, onLoad ) {\r\n\r\n\t\tvar geometries = this.parseGeometries( json.geometries );\r\n\r\n\t\tvar images = this.parseImages( json.images, function () {\r\n\r\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\r\n\r\n\t\t} );\r\n\r\n\t\tvar textures = this.parseTextures( json.textures, images );\r\n\t\tvar materials = this.parseMaterials( json.materials, textures );\r\n\r\n\t\tvar object = this.parseObject( json.object, geometries, materials );\r\n\r\n\t\tif ( json.animations ) {\r\n\r\n\t\t\tobject.animations = this.parseAnimations( json.animations );\r\n\r\n\t\t}\r\n\r\n\t\tif ( json.images === undefined || json.images.length === 0 ) {\r\n\r\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\r\n\r\n\t\t}\r\n\r\n\t\treturn object;\r\n\r\n\t},\r\n\r\n\tparseGeometries: function ( json ) {\r\n\r\n\t\tvar geometries = {};\r\n\r\n\t\tif ( json !== undefined ) {\r\n\r\n\t\t\tvar geometryLoader = new THREE.JSONLoader();\r\n\t\t\tvar bufferGeometryLoader = new THREE.BufferGeometryLoader();\r\n\r\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tvar geometry;\r\n\t\t\t\tvar data = json[ i ];\r\n\r\n\t\t\t\tswitch ( data.type ) {\r\n\r\n\t\t\t\t\tcase 'PlaneGeometry':\r\n\t\t\t\t\tcase 'PlaneBufferGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = new THREE[ data.type ](\r\n\t\t\t\t\t\t\tdata.width,\r\n\t\t\t\t\t\t\tdata.height,\r\n\t\t\t\t\t\t\tdata.widthSegments,\r\n\t\t\t\t\t\t\tdata.heightSegments\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'BoxGeometry':\r\n\t\t\t\t\tcase 'BoxBufferGeometry':\r\n\t\t\t\t\tcase 'CubeGeometry': // backwards compatible\r\n\r\n\t\t\t\t\t\tgeometry = new THREE[ data.type ](\r\n\t\t\t\t\t\t\tdata.width,\r\n\t\t\t\t\t\t\tdata.height,\r\n\t\t\t\t\t\t\tdata.depth,\r\n\t\t\t\t\t\t\tdata.widthSegments,\r\n\t\t\t\t\t\t\tdata.heightSegments,\r\n\t\t\t\t\t\t\tdata.depthSegments\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'CircleGeometry':\r\n\t\t\t\t\tcase 'CircleBufferGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = new THREE[ data.type ](\r\n\t\t\t\t\t\t\tdata.radius,\r\n\t\t\t\t\t\t\tdata.segments,\r\n\t\t\t\t\t\t\tdata.thetaStart,\r\n\t\t\t\t\t\t\tdata.thetaLength\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'CylinderGeometry':\r\n\t\t\t\t\tcase 'CylinderBufferGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = new THREE[ data.type ](\r\n\t\t\t\t\t\t\tdata.radiusTop,\r\n\t\t\t\t\t\t\tdata.radiusBottom,\r\n\t\t\t\t\t\t\tdata.height,\r\n\t\t\t\t\t\t\tdata.radialSegments,\r\n\t\t\t\t\t\t\tdata.heightSegments,\r\n\t\t\t\t\t\t\tdata.openEnded,\r\n\t\t\t\t\t\t\tdata.thetaStart,\r\n\t\t\t\t\t\t\tdata.thetaLength\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'ConeGeometry':\r\n\t\t\t\t\tcase 'ConeBufferGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = new THREE [ data.type ](\r\n\t\t\t\t\t\t\tdata.radius,\r\n\t\t\t\t\t\t\tdata.height,\r\n\t\t\t\t\t\t\tdata.radialSegments,\r\n\t\t\t\t\t\t\tdata.heightSegments,\r\n\t\t\t\t\t\t\tdata.openEnded,\r\n\t\t\t\t\t\t\tdata.thetaStart,\r\n\t\t\t\t\t\t\tdata.thetaLength\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'SphereGeometry':\r\n\t\t\t\t\tcase 'SphereBufferGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = new THREE[ data.type ](\r\n\t\t\t\t\t\t\tdata.radius,\r\n\t\t\t\t\t\t\tdata.widthSegments,\r\n\t\t\t\t\t\t\tdata.heightSegments,\r\n\t\t\t\t\t\t\tdata.phiStart,\r\n\t\t\t\t\t\t\tdata.phiLength,\r\n\t\t\t\t\t\t\tdata.thetaStart,\r\n\t\t\t\t\t\t\tdata.thetaLength\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'DodecahedronGeometry':\r\n\t\t\t\t\tcase 'IcosahedronGeometry':\r\n\t\t\t\t\tcase 'OctahedronGeometry':\r\n\t\t\t\t\tcase 'TetrahedronGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = new THREE[ data.type ](\r\n\t\t\t\t\t\t\tdata.radius,\r\n\t\t\t\t\t\t\tdata.detail\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'RingGeometry':\r\n\t\t\t\t\tcase 'RingBufferGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = new THREE[ data.type ](\r\n\t\t\t\t\t\t\tdata.innerRadius,\r\n\t\t\t\t\t\t\tdata.outerRadius,\r\n\t\t\t\t\t\t\tdata.thetaSegments,\r\n\t\t\t\t\t\t\tdata.phiSegments,\r\n\t\t\t\t\t\t\tdata.thetaStart,\r\n\t\t\t\t\t\t\tdata.thetaLength\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'TorusGeometry':\r\n\t\t\t\t\tcase 'TorusBufferGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = new THREE[ data.type ](\r\n\t\t\t\t\t\t\tdata.radius,\r\n\t\t\t\t\t\t\tdata.tube,\r\n\t\t\t\t\t\t\tdata.radialSegments,\r\n\t\t\t\t\t\t\tdata.tubularSegments,\r\n\t\t\t\t\t\t\tdata.arc\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'TorusKnotGeometry':\r\n\t\t\t\t\tcase 'TorusKnotBufferGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = new THREE[ data.type ](\r\n\t\t\t\t\t\t\tdata.radius,\r\n\t\t\t\t\t\t\tdata.tube,\r\n\t\t\t\t\t\t\tdata.tubularSegments,\r\n\t\t\t\t\t\t\tdata.radialSegments,\r\n\t\t\t\t\t\t\tdata.p,\r\n\t\t\t\t\t\t\tdata.q\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'LatheGeometry':\r\n\t\t\t\t\tcase 'LatheBufferGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = new THREE[ data.type ](\r\n\t\t\t\t\t\t\tdata.points,\r\n\t\t\t\t\t\t\tdata.segments,\r\n\t\t\t\t\t\t\tdata.phiStart,\r\n\t\t\t\t\t\t\tdata.phiLength\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'BufferGeometry':\r\n\r\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'Geometry':\r\n\r\n\t\t\t\t\t\tgeometry = geometryLoader.parse( data.data, this.texturePath ).geometry;\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\r\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Unsupported geometry type \"' + data.type + '\"' );\r\n\r\n\t\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgeometry.uuid = data.uuid;\r\n\r\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\r\n\r\n\t\t\t\tgeometries[ data.uuid ] = geometry;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn geometries;\r\n\r\n\t},\r\n\r\n\tparseMaterials: function ( json, textures ) {\r\n\r\n\t\tvar materials = {};\r\n\r\n\t\tif ( json !== undefined ) {\r\n\r\n\t\t\tvar loader = new THREE.MaterialLoader();\r\n\t\t\tloader.setTextures( textures );\r\n\r\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tvar material = loader.parse( json[ i ] );\r\n\t\t\t\tmaterials[ material.uuid ] = material;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn materials;\r\n\r\n\t},\r\n\r\n\tparseAnimations: function ( json ) {\r\n\r\n\t\tvar animations = [];\r\n\r\n\t\tfor ( var i = 0; i < json.length; i ++ ) {\r\n\r\n\t\t\tvar clip = THREE.AnimationClip.parse( json[ i ] );\r\n\r\n\t\t\tanimations.push( clip );\r\n\r\n\t\t}\r\n\r\n\t\treturn animations;\r\n\r\n\t},\r\n\r\n\tparseImages: function ( json, onLoad ) {\r\n\r\n\t\tvar scope = this;\r\n\t\tvar images = {};\r\n\r\n\t\tfunction loadImage( url ) {\r\n\r\n\t\t\tscope.manager.itemStart( url );\r\n\r\n\t\t\treturn loader.load( url, function () {\r\n\r\n\t\t\t\tscope.manager.itemEnd( url );\r\n\r\n\t\t\t} );\r\n\r\n\t\t}\r\n\r\n\t\tif ( json !== undefined && json.length > 0 ) {\r\n\r\n\t\t\tvar manager = new THREE.LoadingManager( onLoad );\r\n\r\n\t\t\tvar loader = new THREE.ImageLoader( manager );\r\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\r\n\r\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tvar image = json[ i ];\r\n\t\t\t\tvar path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( image.url ) ? image.url : scope.texturePath + image.url;\r\n\r\n\t\t\t\timages[ image.uuid ] = loadImage( path );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn images;\r\n\r\n\t},\r\n\r\n\tparseTextures: function ( json, images ) {\r\n\r\n\t\tfunction parseConstant( value ) {\r\n\r\n\t\t\tif ( typeof( value ) === 'number' ) return value;\r\n\r\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\r\n\r\n\t\t\treturn THREE[ value ];\r\n\r\n\t\t}\r\n\r\n\t\tvar textures = {};\r\n\r\n\t\tif ( json !== undefined ) {\r\n\r\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tvar data = json[ i ];\r\n\r\n\t\t\t\tif ( data.image === undefined ) {\r\n\r\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( images[ data.image ] === undefined ) {\r\n\r\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar texture = new THREE.Texture( images[ data.image ] );\r\n\t\t\t\ttexture.needsUpdate = true;\r\n\r\n\t\t\t\ttexture.uuid = data.uuid;\r\n\r\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\r\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping );\r\n\t\t\t\tif ( data.offset !== undefined ) texture.offset = new THREE.Vector2( data.offset[ 0 ], data.offset[ 1 ] );\r\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat = new THREE.Vector2( data.repeat[ 0 ], data.repeat[ 1 ] );\r\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter );\r\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter );\r\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\r\n\t\t\t\tif ( Array.isArray( data.wrap ) ) {\r\n\r\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ] );\r\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ] );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttextures[ data.uuid ] = texture;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn textures;\r\n\r\n\t},\r\n\r\n\tparseObject: function () {\r\n\r\n\t\tvar matrix = new THREE.Matrix4();\r\n\r\n\t\treturn function ( data, geometries, materials ) {\r\n\r\n\t\t\tvar object;\r\n\r\n\t\t\tfunction getGeometry( name ) {\r\n\r\n\t\t\t\tif ( geometries[ name ] === undefined ) {\r\n\r\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn geometries[ name ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction getMaterial( name ) {\r\n\r\n\t\t\t\tif ( name === undefined ) return undefined;\r\n\r\n\t\t\t\tif ( materials[ name ] === undefined ) {\r\n\r\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn materials[ name ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tswitch ( data.type ) {\r\n\r\n\t\t\t\tcase 'Scene':\r\n\r\n\t\t\t\t\tobject = new THREE.Scene();\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'PerspectiveCamera':\r\n\r\n\t\t\t\t\tobject = new THREE.PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\r\n\r\n\t\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\r\n\t\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\r\n\t\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\r\n\t\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\r\n\t\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'OrthographicCamera':\r\n\r\n\t\t\t\t\tobject = new THREE.OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'AmbientLight':\r\n\r\n\t\t\t\t\tobject = new THREE.AmbientLight( data.color, data.intensity );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'DirectionalLight':\r\n\r\n\t\t\t\t\tobject = new THREE.DirectionalLight( data.color, data.intensity );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'PointLight':\r\n\r\n\t\t\t\t\tobject = new THREE.PointLight( data.color, data.intensity, data.distance, data.decay );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'SpotLight':\r\n\r\n\t\t\t\t\tobject = new THREE.SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'HemisphereLight':\r\n\r\n\t\t\t\t\tobject = new THREE.HemisphereLight( data.color, data.groundColor, data.intensity );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'Mesh':\r\n\r\n\t\t\t\t\tvar geometry = getGeometry( data.geometry );\r\n\t\t\t\t\tvar material = getMaterial( data.material );\r\n\r\n\t\t\t\t\tif ( geometry.bones && geometry.bones.length > 0 ) {\r\n\r\n\t\t\t\t\t\tobject = new THREE.SkinnedMesh( geometry, material );\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tobject = new THREE.Mesh( geometry, material );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'LOD':\r\n\r\n\t\t\t\t\tobject = new THREE.LOD();\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'Line':\r\n\r\n\t\t\t\t\tobject = new THREE.Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'PointCloud':\r\n\t\t\t\tcase 'Points':\r\n\r\n\t\t\t\t\tobject = new THREE.Points( getGeometry( data.geometry ), getMaterial( data.material ) );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'Sprite':\r\n\r\n\t\t\t\t\tobject = new THREE.Sprite( getMaterial( data.material ) );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'Group':\r\n\r\n\t\t\t\t\tobject = new THREE.Group();\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\r\n\t\t\t\t\tobject = new THREE.Object3D();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tobject.uuid = data.uuid;\r\n\r\n\t\t\tif ( data.name !== undefined ) object.name = data.name;\r\n\t\t\tif ( data.matrix !== undefined ) {\r\n\r\n\t\t\t\tmatrix.fromArray( data.matrix );\r\n\t\t\t\tmatrix.decompose( object.position, object.quaternion, object.scale );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\r\n\t\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\r\n\t\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\r\n\t\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\r\n\r\n\t\t\tif ( data.visible !== undefined ) object.visible = data.visible;\r\n\t\t\tif ( data.userData !== undefined ) object.userData = data.userData;\r\n\r\n\t\t\tif ( data.children !== undefined ) {\r\n\r\n\t\t\t\tfor ( var child in data.children ) {\r\n\r\n\t\t\t\t\tobject.add( this.parseObject( data.children[ child ], geometries, materials ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( data.type === 'LOD' ) {\r\n\r\n\t\t\t\tvar levels = data.levels;\r\n\r\n\t\t\t\tfor ( var l = 0; l < levels.length; l ++ ) {\r\n\r\n\t\t\t\t\tvar level = levels[ l ];\r\n\t\t\t\t\tvar child = object.getObjectByProperty( 'uuid', level.object );\r\n\r\n\t\t\t\t\tif ( child !== undefined ) {\r\n\r\n\t\t\t\t\t\tobject.addLevel( child, level.distance );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn object;\r\n\r\n\t\t};\r\n\r\n\t}()\r\n\r\n};\r\n\r\n// File:src/loaders/TextureLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.TextureLoader = function ( manager ) {\r\n\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\r\n};\r\n\r\nTHREE.TextureLoader.prototype = {\r\n\r\n\tconstructor: THREE.TextureLoader,\r\n\r\n\tload: function ( url, onLoad, onProgress, onError ) {\r\n\r\n\t\tvar texture = new THREE.Texture();\r\n\r\n\t\tvar loader = new THREE.ImageLoader( this.manager );\r\n\t\tloader.setCrossOrigin( this.crossOrigin );\r\n\t\tloader.setPath( this.path );\r\n\t\tloader.load( url, function ( image ) {\r\n\r\n\t\t\ttexture.image = image;\r\n\t\t\ttexture.needsUpdate = true;\r\n\r\n\t\t\tif ( onLoad !== undefined ) {\r\n\r\n\t\t\t\tonLoad( texture );\r\n\r\n\t\t\t}\r\n\r\n\t\t}, onProgress, onError );\r\n\r\n\t\treturn texture;\r\n\r\n\t},\r\n\r\n\tsetCrossOrigin: function ( value ) {\r\n\r\n\t\tthis.crossOrigin = value;\r\n\r\n\t},\r\n\r\n\tsetPath: function ( value ) {\r\n\r\n\t\tthis.path = value;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/CubeTextureLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.CubeTextureLoader = function ( manager ) {\r\n\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\r\n};\r\n\r\nTHREE.CubeTextureLoader.prototype = {\r\n\r\n\tconstructor: THREE.CubeTextureLoader,\r\n\r\n\tload: function ( urls, onLoad, onProgress, onError ) {\r\n\r\n\t\tvar texture = new THREE.CubeTexture();\r\n\r\n\t\tvar loader = new THREE.ImageLoader( this.manager );\r\n\t\tloader.setCrossOrigin( this.crossOrigin );\r\n\t\tloader.setPath( this.path );\r\n\r\n\t\tvar loaded = 0;\r\n\r\n\t\tfunction loadTexture( i ) {\r\n\r\n\t\t\tloader.load( urls[ i ], function ( image ) {\r\n\r\n\t\t\t\ttexture.images[ i ] = image;\r\n\r\n\t\t\t\tloaded ++;\r\n\r\n\t\t\t\tif ( loaded === 6 ) {\r\n\r\n\t\t\t\t\ttexture.needsUpdate = true;\r\n\r\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}, undefined, onError );\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0; i < urls.length; ++ i ) {\r\n\r\n\t\t\tloadTexture( i );\r\n\r\n\t\t}\r\n\r\n\t\treturn texture;\r\n\r\n\t},\r\n\r\n\tsetCrossOrigin: function ( value ) {\r\n\r\n\t\tthis.crossOrigin = value;\r\n\r\n\t},\r\n\r\n\tsetPath: function ( value ) {\r\n\r\n\t\tthis.path = value;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/BinaryTextureLoader.js\r\n\r\n/**\r\n * @author Nikos M. / https://github.com/foo123/\r\n *\r\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\r\n */\r\n\r\nTHREE.DataTextureLoader = THREE.BinaryTextureLoader = function ( manager ) {\r\n\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\r\n\t// override in sub classes\r\n\tthis._parser = null;\r\n\r\n};\r\n\r\nTHREE.BinaryTextureLoader.prototype = {\r\n\r\n\tconstructor: THREE.BinaryTextureLoader,\r\n\r\n\tload: function ( url, onLoad, onProgress, onError ) {\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar texture = new THREE.DataTexture();\r\n\r\n\t\tvar loader = new THREE.XHRLoader( this.manager );\r\n\t\tloader.setResponseType( 'arraybuffer' );\r\n\r\n\t\tloader.load( url, function ( buffer ) {\r\n\r\n\t\t\tvar texData = scope._parser( buffer );\r\n\r\n\t\t\tif ( ! texData ) return;\r\n\r\n\t\t\tif ( undefined !== texData.image ) {\r\n\r\n\t\t\t\ttexture.image = texData.image;\r\n\r\n\t\t\t} else if ( undefined !== texData.data ) {\r\n\r\n\t\t\t\ttexture.image.width = texData.width;\r\n\t\t\t\ttexture.image.height = texData.height;\r\n\t\t\t\ttexture.image.data = texData.data;\r\n\r\n\t\t\t}\r\n\r\n\t\t\ttexture.wrapS = undefined !== texData.wrapS ? texData.wrapS : THREE.ClampToEdgeWrapping;\r\n\t\t\ttexture.wrapT = undefined !== texData.wrapT ? texData.wrapT : THREE.ClampToEdgeWrapping;\r\n\r\n\t\t\ttexture.magFilter = undefined !== texData.magFilter ? texData.magFilter : THREE.LinearFilter;\r\n\t\t\ttexture.minFilter = undefined !== texData.minFilter ? texData.minFilter : THREE.LinearMipMapLinearFilter;\r\n\r\n\t\t\ttexture.anisotropy = undefined !== texData.anisotropy ? texData.anisotropy : 1;\r\n\r\n\t\t\tif ( undefined !== texData.format ) {\r\n\r\n\t\t\t\ttexture.format = texData.format;\r\n\r\n\t\t\t}\r\n\t\t\tif ( undefined !== texData.type ) {\r\n\r\n\t\t\t\ttexture.type = texData.type;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( undefined !== texData.mipmaps ) {\r\n\r\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( 1 === texData.mipmapCount ) {\r\n\r\n\t\t\t\ttexture.minFilter = THREE.LinearFilter;\r\n\r\n\t\t\t}\r\n\r\n\t\t\ttexture.needsUpdate = true;\r\n\r\n\t\t\tif ( onLoad ) onLoad( texture, texData );\r\n\r\n\t\t}, onProgress, onError );\r\n\r\n\r\n\t\treturn texture;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/loaders/CompressedTextureLoader.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n *\r\n * Abstract Base class to block based textures loader (dds, pvr, ...)\r\n */\r\n\r\nTHREE.CompressedTextureLoader = function ( manager ) {\r\n\r\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\r\n\r\n\t// override in sub classes\r\n\tthis._parser = null;\r\n\r\n};\r\n\r\n\r\nTHREE.CompressedTextureLoader.prototype = {\r\n\r\n\tconstructor: THREE.CompressedTextureLoader,\r\n\r\n\tload: function ( url, onLoad, onProgress, onError ) {\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar images = [];\r\n\r\n\t\tvar texture = new THREE.CompressedTexture();\r\n\t\ttexture.image = images;\r\n\r\n\t\tvar loader = new THREE.XHRLoader( this.manager );\r\n\t\tloader.setPath( this.path );\r\n\t\tloader.setResponseType( 'arraybuffer' );\r\n\r\n\t\tfunction loadTexture( i ) {\r\n\r\n\t\t\tloader.load( url[ i ], function ( buffer ) {\r\n\r\n\t\t\t\tvar texDatas = scope._parser( buffer, true );\r\n\r\n\t\t\t\timages[ i ] = {\r\n\t\t\t\t\twidth: texDatas.width,\r\n\t\t\t\t\theight: texDatas.height,\r\n\t\t\t\t\tformat: texDatas.format,\r\n\t\t\t\t\tmipmaps: texDatas.mipmaps\r\n\t\t\t\t};\r\n\r\n\t\t\t\tloaded += 1;\r\n\r\n\t\t\t\tif ( loaded === 6 ) {\r\n\r\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 )\r\n\t\t\t\t\t\ttexture.minFilter = THREE.LinearFilter;\r\n\r\n\t\t\t\t\ttexture.format = texDatas.format;\r\n\t\t\t\t\ttexture.needsUpdate = true;\r\n\r\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}, onProgress, onError );\r\n\r\n\t\t}\r\n\r\n\t\tif ( Array.isArray( url ) ) {\r\n\r\n\t\t\tvar loaded = 0;\r\n\r\n\t\t\tfor ( var i = 0, il = url.length; i < il; ++ i ) {\r\n\r\n\t\t\t\tloadTexture( i );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// compressed cubemap texture stored in a single DDS file\r\n\r\n\t\t\tloader.load( url, function ( buffer ) {\r\n\r\n\t\t\t\tvar texDatas = scope._parser( buffer, true );\r\n\r\n\t\t\t\tif ( texDatas.isCubemap ) {\r\n\r\n\t\t\t\t\tvar faces = texDatas.mipmaps.length / texDatas.mipmapCount;\r\n\r\n\t\t\t\t\tfor ( var f = 0; f < faces; f ++ ) {\r\n\r\n\t\t\t\t\t\timages[ f ] = { mipmaps : [] };\r\n\r\n\t\t\t\t\t\tfor ( var i = 0; i < texDatas.mipmapCount; i ++ ) {\r\n\r\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\r\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\r\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\r\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\ttexture.image.width = texDatas.width;\r\n\t\t\t\t\ttexture.image.height = texDatas.height;\r\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\r\n\r\n\t\t\t\t\ttexture.minFilter = THREE.LinearFilter;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttexture.format = texDatas.format;\r\n\t\t\t\ttexture.needsUpdate = true;\r\n\r\n\t\t\t\tif ( onLoad ) onLoad( texture );\r\n\r\n\t\t\t}, onProgress, onError );\r\n\r\n\t\t}\r\n\r\n\t\treturn texture;\r\n\r\n\t},\r\n\r\n\tsetPath: function ( value ) {\r\n\r\n\t\tthis.path = value;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/materials/Material.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Material = function () {\r\n\r\n\tObject.defineProperty( this, 'id', { value: THREE.MaterialIdCount ++ } );\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\tthis.name = '';\r\n\tthis.type = 'Material';\r\n\r\n\tthis.fog = true;\r\n\tthis.lights = true;\r\n\r\n\tthis.blending = THREE.NormalBlending;\r\n\tthis.side = THREE.FrontSide;\r\n\tthis.shading = THREE.SmoothShading; // THREE.FlatShading, THREE.SmoothShading\r\n\tthis.vertexColors = THREE.NoColors; // THREE.NoColors, THREE.VertexColors, THREE.FaceColors\r\n\r\n\tthis.opacity = 1;\r\n\tthis.transparent = false;\r\n\r\n\tthis.blendSrc = THREE.SrcAlphaFactor;\r\n\tthis.blendDst = THREE.OneMinusSrcAlphaFactor;\r\n\tthis.blendEquation = THREE.AddEquation;\r\n\tthis.blendSrcAlpha = null;\r\n\tthis.blendDstAlpha = null;\r\n\tthis.blendEquationAlpha = null;\r\n\r\n\tthis.depthFunc = THREE.LessEqualDepth;\r\n\tthis.depthTest = true;\r\n\tthis.depthWrite = true;\r\n\r\n\tthis.clippingPlanes = null;\r\n\tthis.clipShadows = false;\r\n\r\n\tthis.colorWrite = true;\r\n\r\n\tthis.precision = null; // override the renderer's default precision for this material\r\n\r\n\tthis.polygonOffset = false;\r\n\tthis.polygonOffsetFactor = 0;\r\n\tthis.polygonOffsetUnits = 0;\r\n\r\n\tthis.alphaTest = 0;\r\n\tthis.premultipliedAlpha = false;\r\n\r\n\tthis.overdraw = 0; // Overdrawn pixels (typically between 0 and 1) for fixing antialiasing gaps in CanvasRenderer\r\n\r\n\tthis.visible = true;\r\n\r\n\tthis._needsUpdate = true;\r\n\r\n};\r\n\r\nTHREE.Material.prototype = {\r\n\r\n\tconstructor: THREE.Material,\r\n\r\n\tget needsUpdate() {\r\n\r\n\t\treturn this._needsUpdate;\r\n\r\n\t},\r\n\r\n\tset needsUpdate( value ) {\r\n\r\n\t\tif ( value === true ) this.update();\r\n\t\tthis._needsUpdate = value;\r\n\r\n\t},\r\n\r\n\tsetValues: function ( values ) {\r\n\r\n\t\tif ( values === undefined ) return;\r\n\r\n\t\tfor ( var key in values ) {\r\n\r\n\t\t\tvar newValue = values[ key ];\r\n\r\n\t\t\tif ( newValue === undefined ) {\r\n\r\n\t\t\t\tconsole.warn( \"THREE.Material: '\" + key + \"' parameter is undefined.\" );\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar currentValue = this[ key ];\r\n\r\n\t\t\tif ( currentValue === undefined ) {\r\n\r\n\t\t\t\tconsole.warn( \"THREE.\" + this.type + \": '\" + key + \"' is not a property of this material.\" );\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( currentValue instanceof THREE.Color ) {\r\n\r\n\t\t\t\tcurrentValue.set( newValue );\r\n\r\n\t\t\t} else if ( currentValue instanceof THREE.Vector3 && newValue instanceof THREE.Vector3 ) {\r\n\r\n\t\t\t\tcurrentValue.copy( newValue );\r\n\r\n\t\t\t} else if ( key === 'overdraw' ) {\r\n\r\n\t\t\t\t// ensure overdraw is backwards-compatible with legacy boolean type\r\n\t\t\t\tthis[ key ] = Number( newValue );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis[ key ] = newValue;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\ttoJSON: function ( meta ) {\r\n\r\n\t\tvar isRoot = meta === undefined;\r\n\r\n\t\tif ( isRoot ) {\r\n\r\n\t\t\tmeta = {\r\n\t\t\t\ttextures: {},\r\n\t\t\t\timages: {}\r\n\t\t\t};\r\n\r\n\t\t}\r\n\r\n\t\tvar data = {\r\n\t\t\tmetadata: {\r\n\t\t\t\tversion: 4.4,\r\n\t\t\t\ttype: 'Material',\r\n\t\t\t\tgenerator: 'Material.toJSON'\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// standard Material serialization\r\n\t\tdata.uuid = this.uuid;\r\n\t\tdata.type = this.type;\r\n\r\n\t\tif ( this.name !== '' ) data.name = this.name;\r\n\r\n\t\tif ( this.color instanceof THREE.Color ) data.color = this.color.getHex();\r\n\r\n\t\tif ( this.roughness !== 0.5 ) data.roughness = this.roughness;\r\n\t\tif ( this.metalness !== 0.5 ) data.metalness = this.metalness;\r\n\r\n\t\tif ( this.emissive instanceof THREE.Color ) data.emissive = this.emissive.getHex();\r\n\t\tif ( this.specular instanceof THREE.Color ) data.specular = this.specular.getHex();\r\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\r\n\r\n\t\tif ( this.map instanceof THREE.Texture ) data.map = this.map.toJSON( meta ).uuid;\r\n\t\tif ( this.alphaMap instanceof THREE.Texture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\r\n\t\tif ( this.lightMap instanceof THREE.Texture ) data.lightMap = this.lightMap.toJSON( meta ).uuid;\r\n\t\tif ( this.bumpMap instanceof THREE.Texture ) {\r\n\r\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\r\n\t\t\tdata.bumpScale = this.bumpScale;\r\n\r\n\t\t}\r\n\t\tif ( this.normalMap instanceof THREE.Texture ) {\r\n\r\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\r\n\t\t\tdata.normalScale = this.normalScale.toArray();\r\n\r\n\t\t}\r\n\t\tif ( this.displacementMap instanceof THREE.Texture ) {\r\n\r\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\r\n\t\t\tdata.displacementScale = this.displacementScale;\r\n\t\t\tdata.displacementBias = this.displacementBias;\r\n\r\n\t\t}\r\n\t\tif ( this.roughnessMap instanceof THREE.Texture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\r\n\t\tif ( this.metalnessMap instanceof THREE.Texture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\r\n\r\n\t\tif ( this.emissiveMap instanceof THREE.Texture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\r\n\t\tif ( this.specularMap instanceof THREE.Texture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\r\n\r\n\t\tif ( this.envMap instanceof THREE.Texture ) {\r\n\r\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\r\n\t\t\tdata.reflectivity = this.reflectivity; // Scale behind envMap\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.size !== undefined ) data.size = this.size;\r\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\r\n\r\n\t\tif ( this.blending !== THREE.NormalBlending ) data.blending = this.blending;\r\n\t\tif ( this.shading !== THREE.SmoothShading ) data.shading = this.shading;\r\n\t\tif ( this.side !== THREE.FrontSide ) data.side = this.side;\r\n\t\tif ( this.vertexColors !== THREE.NoColors ) data.vertexColors = this.vertexColors;\r\n\r\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\r\n\t\tif ( this.transparent === true ) data.transparent = this.transparent;\r\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\r\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\r\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\r\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\r\n\r\n\t\t// TODO: Copied from Object3D.toJSON\r\n\r\n\t\tfunction extractFromCache ( cache ) {\r\n\r\n\t\t\tvar values = [];\r\n\r\n\t\t\tfor ( var key in cache ) {\r\n\r\n\t\t\t\tvar data = cache[ key ];\r\n\t\t\t\tdelete data.metadata;\r\n\t\t\t\tvalues.push( data );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn values;\r\n\r\n\t\t}\r\n\r\n\t\tif ( isRoot ) {\r\n\r\n\t\t\tvar textures = extractFromCache( meta.textures );\r\n\t\t\tvar images = extractFromCache( meta.images );\r\n\r\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\r\n\t\t\tif ( images.length > 0 ) data.images = images;\r\n\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\r\n\t},\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tthis.name = source.name;\r\n\r\n\t\tthis.fog = source.fog;\r\n\t\tthis.lights = source.lights;\r\n\r\n\t\tthis.blending = source.blending;\r\n\t\tthis.side = source.side;\r\n\t\tthis.vertexColors = source.vertexColors;\r\n\r\n\t\tthis.opacity = source.opacity;\r\n\t\tthis.transparent = source.transparent;\r\n\r\n\t\tthis.blendSrc = source.blendSrc;\r\n\t\tthis.blendDst = source.blendDst;\r\n\t\tthis.blendEquation = source.blendEquation;\r\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\r\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\r\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\r\n\r\n\t\tthis.depthFunc = source.depthFunc;\r\n\t\tthis.depthTest = source.depthTest;\r\n\t\tthis.depthWrite = source.depthWrite;\r\n\r\n\t\tthis.colorWrite = source.colorWrite;\r\n\r\n\t\tthis.precision = source.precision;\r\n\r\n\t\tthis.polygonOffset = source.polygonOffset;\r\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\r\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\r\n\r\n\t\tthis.alphaTest = source.alphaTest;\r\n\r\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\r\n\r\n\t\tthis.overdraw = source.overdraw;\r\n\r\n\t\tthis.visible = source.visible;\r\n\t\tthis.clipShadows = source.clipShadows;\r\n\r\n\t\tvar srcPlanes = source.clippingPlanes,\r\n\t\t\tdstPlanes = null;\r\n\r\n\t\tif ( srcPlanes !== null ) {\r\n\r\n\t\t\tvar n = srcPlanes.length;\r\n\t\t\tdstPlanes = new Array( n );\r\n\r\n\t\t\tfor ( var i = 0; i !== n; ++ i )\r\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\r\n\r\n\t\t}\r\n\r\n\t\tthis.clippingPlanes = dstPlanes;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tupdate: function () {\r\n\r\n\t\tthis.dispatchEvent( { type: 'update' } );\r\n\r\n\t},\r\n\r\n\tdispose: function () {\r\n\r\n\t\tthis.dispatchEvent( { type: 'dispose' } );\r\n\r\n\t}\r\n\r\n};\r\n\r\nObject.assign( THREE.Material.prototype, THREE.EventDispatcher.prototype );\r\n\r\nTHREE.MaterialIdCount = 0;\r\n\r\n// File:src/materials/LineBasicMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * parameters = {\r\n * color: ,\r\n * opacity: ,\r\n *\r\n * linewidth: ,\r\n * linecap: \"round\",\r\n * linejoin: \"round\"\r\n * }\r\n */\r\n\r\nTHREE.LineBasicMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'LineBasicMaterial';\r\n\r\n\tthis.color = new THREE.Color( 0xffffff );\r\n\r\n\tthis.linewidth = 1;\r\n\tthis.linecap = 'round';\r\n\tthis.linejoin = 'round';\r\n\r\n\tthis.lights = false;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.LineBasicMaterial.prototype = Object.create( THREE.Material.prototype );\r\nTHREE.LineBasicMaterial.prototype.constructor = THREE.LineBasicMaterial;\r\n\r\nTHREE.LineBasicMaterial.prototype.copy = function ( source ) {\r\n\r\n\tTHREE.Material.prototype.copy.call( this, source );\r\n\r\n\tthis.color.copy( source.color );\r\n\r\n\tthis.linewidth = source.linewidth;\r\n\tthis.linecap = source.linecap;\r\n\tthis.linejoin = source.linejoin;\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n// File:src/materials/LineDashedMaterial.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * parameters = {\r\n * color: ,\r\n * opacity: ,\r\n *\r\n * linewidth: ,\r\n *\r\n * scale: ,\r\n * dashSize: ,\r\n * gapSize: \r\n * }\r\n */\r\n\r\nTHREE.LineDashedMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'LineDashedMaterial';\r\n\r\n\tthis.color = new THREE.Color( 0xffffff );\r\n\r\n\tthis.linewidth = 1;\r\n\r\n\tthis.scale = 1;\r\n\tthis.dashSize = 3;\r\n\tthis.gapSize = 1;\r\n\r\n\tthis.lights = false;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.LineDashedMaterial.prototype = Object.create( THREE.Material.prototype );\r\nTHREE.LineDashedMaterial.prototype.constructor = THREE.LineDashedMaterial;\r\n\r\nTHREE.LineDashedMaterial.prototype.copy = function ( source ) {\r\n\r\n\tTHREE.Material.prototype.copy.call( this, source );\r\n\r\n\tthis.color.copy( source.color );\r\n\r\n\tthis.linewidth = source.linewidth;\r\n\r\n\tthis.scale = source.scale;\r\n\tthis.dashSize = source.dashSize;\r\n\tthis.gapSize = source.gapSize;\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n// File:src/materials/MeshBasicMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * parameters = {\r\n * color: ,\r\n * opacity: ,\r\n * map: new THREE.Texture( ),\r\n *\r\n * aoMap: new THREE.Texture( ),\r\n * aoMapIntensity: \r\n *\r\n * specularMap: new THREE.Texture( ),\r\n *\r\n * alphaMap: new THREE.Texture( ),\r\n *\r\n * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ),\r\n * combine: THREE.Multiply,\r\n * reflectivity: ,\r\n * refractionRatio: ,\r\n *\r\n * shading: THREE.SmoothShading,\r\n * depthTest: ,\r\n * depthWrite: ,\r\n *\r\n * wireframe: ,\r\n * wireframeLinewidth: ,\r\n *\r\n * skinning: ,\r\n * morphTargets: \r\n * }\r\n */\r\n\r\nTHREE.MeshBasicMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'MeshBasicMaterial';\r\n\r\n\tthis.color = new THREE.Color( 0xffffff ); // emissive\r\n\r\n\tthis.map = null;\r\n\r\n\tthis.aoMap = null;\r\n\tthis.aoMapIntensity = 1.0;\r\n\r\n\tthis.specularMap = null;\r\n\r\n\tthis.alphaMap = null;\r\n\r\n\tthis.envMap = null;\r\n\tthis.combine = THREE.MultiplyOperation;\r\n\tthis.reflectivity = 1;\r\n\tthis.refractionRatio = 0.98;\r\n\r\n\tthis.wireframe = false;\r\n\tthis.wireframeLinewidth = 1;\r\n\tthis.wireframeLinecap = 'round';\r\n\tthis.wireframeLinejoin = 'round';\r\n\r\n\tthis.skinning = false;\r\n\tthis.morphTargets = false;\r\n\r\n\tthis.lights = false;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.MeshBasicMaterial.prototype = Object.create( THREE.Material.prototype );\r\nTHREE.MeshBasicMaterial.prototype.constructor = THREE.MeshBasicMaterial;\r\n\r\nTHREE.MeshBasicMaterial.prototype.copy = function ( source ) {\r\n\r\n\tTHREE.Material.prototype.copy.call( this, source );\r\n\r\n\tthis.color.copy( source.color );\r\n\r\n\tthis.map = source.map;\r\n\r\n\tthis.aoMap = source.aoMap;\r\n\tthis.aoMapIntensity = source.aoMapIntensity;\r\n\r\n\tthis.specularMap = source.specularMap;\r\n\r\n\tthis.alphaMap = source.alphaMap;\r\n\r\n\tthis.envMap = source.envMap;\r\n\tthis.combine = source.combine;\r\n\tthis.reflectivity = source.reflectivity;\r\n\tthis.refractionRatio = source.refractionRatio;\r\n\r\n\tthis.wireframe = source.wireframe;\r\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\r\n\tthis.wireframeLinecap = source.wireframeLinecap;\r\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\r\n\r\n\tthis.skinning = source.skinning;\r\n\tthis.morphTargets = source.morphTargets;\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n// File:src/materials/MeshDepthMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author bhouston / https://clara.io\r\n * @author WestLangley / http://github.com/WestLangley\r\n *\r\n * parameters = {\r\n *\r\n * opacity: ,\r\n *\r\n * map: new THREE.Texture( ),\r\n *\r\n * alphaMap: new THREE.Texture( ),\r\n *\r\n * displacementMap: new THREE.Texture( ),\r\n * displacementScale: ,\r\n * displacementBias: ,\r\n *\r\n * wireframe: ,\r\n * wireframeLinewidth: \r\n * }\r\n */\r\n\r\nTHREE.MeshDepthMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'MeshDepthMaterial';\r\n\r\n\tthis.depthPacking = THREE.BasicDepthPacking;\r\n\r\n\tthis.skinning = false;\r\n\tthis.morphTargets = false;\r\n\r\n\tthis.map = null;\r\n\r\n\tthis.alphaMap = null;\r\n\r\n\tthis.displacementMap = null;\r\n\tthis.displacementScale = 1;\r\n\tthis.displacementBias = 0;\r\n\r\n\tthis.wireframe = false;\r\n\tthis.wireframeLinewidth = 1;\r\n\r\n\tthis.fog = false;\r\n\tthis.lights = false;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.MeshDepthMaterial.prototype = Object.create( THREE.Material.prototype );\r\nTHREE.MeshDepthMaterial.prototype.constructor = THREE.MeshDepthMaterial;\r\n\r\nTHREE.MeshDepthMaterial.prototype.copy = function ( source ) {\r\n\r\n\tTHREE.Material.prototype.copy.call( this, source );\r\n\r\n\tthis.depthPacking = source.depthPacking;\r\n\r\n\tthis.skinning = source.skinning;\r\n\tthis.morphTargets = source.morphTargets;\r\n\r\n\tthis.map = source.map;\r\n\r\n\tthis.alphaMap = source.alphaMap;\r\n\r\n\tthis.displacementMap = source.displacementMap;\r\n\tthis.displacementScale = source.displacementScale;\r\n\tthis.displacementBias = source.displacementBias;\r\n\r\n\tthis.wireframe = source.wireframe;\r\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n// File:src/materials/MeshLambertMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * parameters = {\r\n * color: ,\r\n * opacity: ,\r\n *\r\n * map: new THREE.Texture( ),\r\n *\r\n * lightMap: new THREE.Texture( ),\r\n * lightMapIntensity: \r\n *\r\n * aoMap: new THREE.Texture( ),\r\n * aoMapIntensity: \r\n *\r\n * emissive: ,\r\n * emissiveIntensity: \r\n * emissiveMap: new THREE.Texture( ),\r\n *\r\n * specularMap: new THREE.Texture( ),\r\n *\r\n * alphaMap: new THREE.Texture( ),\r\n *\r\n * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ),\r\n * combine: THREE.Multiply,\r\n * reflectivity: ,\r\n * refractionRatio: ,\r\n *\r\n * wireframe: ,\r\n * wireframeLinewidth: ,\r\n *\r\n * skinning: ,\r\n * morphTargets: ,\r\n * morphNormals: \r\n * }\r\n */\r\n\r\nTHREE.MeshLambertMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'MeshLambertMaterial';\r\n\r\n\tthis.color = new THREE.Color( 0xffffff ); // diffuse\r\n\r\n\tthis.map = null;\r\n\r\n\tthis.lightMap = null;\r\n\tthis.lightMapIntensity = 1.0;\r\n\r\n\tthis.aoMap = null;\r\n\tthis.aoMapIntensity = 1.0;\r\n\r\n\tthis.emissive = new THREE.Color( 0x000000 );\r\n\tthis.emissiveIntensity = 1.0;\r\n\tthis.emissiveMap = null;\r\n\r\n\tthis.specularMap = null;\r\n\r\n\tthis.alphaMap = null;\r\n\r\n\tthis.envMap = null;\r\n\tthis.combine = THREE.MultiplyOperation;\r\n\tthis.reflectivity = 1;\r\n\tthis.refractionRatio = 0.98;\r\n\r\n\tthis.wireframe = false;\r\n\tthis.wireframeLinewidth = 1;\r\n\tthis.wireframeLinecap = 'round';\r\n\tthis.wireframeLinejoin = 'round';\r\n\r\n\tthis.skinning = false;\r\n\tthis.morphTargets = false;\r\n\tthis.morphNormals = false;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.MeshLambertMaterial.prototype = Object.create( THREE.Material.prototype );\r\nTHREE.MeshLambertMaterial.prototype.constructor = THREE.MeshLambertMaterial;\r\n\r\nTHREE.MeshLambertMaterial.prototype.copy = function ( source ) {\r\n\r\n\tTHREE.Material.prototype.copy.call( this, source );\r\n\r\n\tthis.color.copy( source.color );\r\n\r\n\tthis.map = source.map;\r\n\r\n\tthis.lightMap = source.lightMap;\r\n\tthis.lightMapIntensity = source.lightMapIntensity;\r\n\r\n\tthis.aoMap = source.aoMap;\r\n\tthis.aoMapIntensity = source.aoMapIntensity;\r\n\r\n\tthis.emissive.copy( source.emissive );\r\n\tthis.emissiveMap = source.emissiveMap;\r\n\tthis.emissiveIntensity = source.emissiveIntensity;\r\n\r\n\tthis.specularMap = source.specularMap;\r\n\r\n\tthis.alphaMap = source.alphaMap;\r\n\r\n\tthis.envMap = source.envMap;\r\n\tthis.combine = source.combine;\r\n\tthis.reflectivity = source.reflectivity;\r\n\tthis.refractionRatio = source.refractionRatio;\r\n\r\n\tthis.wireframe = source.wireframe;\r\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\r\n\tthis.wireframeLinecap = source.wireframeLinecap;\r\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\r\n\r\n\tthis.skinning = source.skinning;\r\n\tthis.morphTargets = source.morphTargets;\r\n\tthis.morphNormals = source.morphNormals;\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n// File:src/materials/MeshNormalMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n *\r\n * parameters = {\r\n * opacity: ,\r\n *\r\n * wireframe: ,\r\n * wireframeLinewidth: \r\n * }\r\n */\r\n\r\nTHREE.MeshNormalMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this, parameters );\r\n\r\n\tthis.type = 'MeshNormalMaterial';\r\n\r\n\tthis.wireframe = false;\r\n\tthis.wireframeLinewidth = 1;\r\n\r\n\tthis.fog = false;\r\n\tthis.lights = false;\r\n\tthis.morphTargets = false;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.MeshNormalMaterial.prototype = Object.create( THREE.Material.prototype );\r\nTHREE.MeshNormalMaterial.prototype.constructor = THREE.MeshNormalMaterial;\r\n\r\nTHREE.MeshNormalMaterial.prototype.copy = function ( source ) {\r\n\r\n\tTHREE.Material.prototype.copy.call( this, source );\r\n\r\n\tthis.wireframe = source.wireframe;\r\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n// File:src/materials/MeshPhongMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * parameters = {\r\n * color: ,\r\n * specular: ,\r\n * shininess: ,\r\n * opacity: ,\r\n *\r\n * map: new THREE.Texture( ),\r\n *\r\n * lightMap: new THREE.Texture( ),\r\n * lightMapIntensity: \r\n *\r\n * aoMap: new THREE.Texture( ),\r\n * aoMapIntensity: \r\n *\r\n * emissive: ,\r\n * emissiveIntensity: \r\n * emissiveMap: new THREE.Texture( ),\r\n *\r\n * bumpMap: new THREE.Texture( ),\r\n * bumpScale: ,\r\n *\r\n * normalMap: new THREE.Texture( ),\r\n * normalScale: ,\r\n *\r\n * displacementMap: new THREE.Texture( ),\r\n * displacementScale: ,\r\n * displacementBias: ,\r\n *\r\n * specularMap: new THREE.Texture( ),\r\n *\r\n * alphaMap: new THREE.Texture( ),\r\n *\r\n * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ),\r\n * combine: THREE.Multiply,\r\n * reflectivity: ,\r\n * refractionRatio: ,\r\n *\r\n * wireframe: ,\r\n * wireframeLinewidth: ,\r\n *\r\n * skinning: ,\r\n * morphTargets: ,\r\n * morphNormals: \r\n * }\r\n */\r\n\r\nTHREE.MeshPhongMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'MeshPhongMaterial';\r\n\r\n\tthis.color = new THREE.Color( 0xffffff ); // diffuse\r\n\tthis.specular = new THREE.Color( 0x111111 );\r\n\tthis.shininess = 30;\r\n\r\n\tthis.map = null;\r\n\r\n\tthis.lightMap = null;\r\n\tthis.lightMapIntensity = 1.0;\r\n\r\n\tthis.aoMap = null;\r\n\tthis.aoMapIntensity = 1.0;\r\n\r\n\tthis.emissive = new THREE.Color( 0x000000 );\r\n\tthis.emissiveIntensity = 1.0;\r\n\tthis.emissiveMap = null;\r\n\r\n\tthis.bumpMap = null;\r\n\tthis.bumpScale = 1;\r\n\r\n\tthis.normalMap = null;\r\n\tthis.normalScale = new THREE.Vector2( 1, 1 );\r\n\r\n\tthis.displacementMap = null;\r\n\tthis.displacementScale = 1;\r\n\tthis.displacementBias = 0;\r\n\r\n\tthis.specularMap = null;\r\n\r\n\tthis.alphaMap = null;\r\n\r\n\tthis.envMap = null;\r\n\tthis.combine = THREE.MultiplyOperation;\r\n\tthis.reflectivity = 1;\r\n\tthis.refractionRatio = 0.98;\r\n\r\n\tthis.wireframe = false;\r\n\tthis.wireframeLinewidth = 1;\r\n\tthis.wireframeLinecap = 'round';\r\n\tthis.wireframeLinejoin = 'round';\r\n\r\n\tthis.skinning = false;\r\n\tthis.morphTargets = false;\r\n\tthis.morphNormals = false;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.MeshPhongMaterial.prototype = Object.create( THREE.Material.prototype );\r\nTHREE.MeshPhongMaterial.prototype.constructor = THREE.MeshPhongMaterial;\r\n\r\nTHREE.MeshPhongMaterial.prototype.copy = function ( source ) {\r\n\r\n\tTHREE.Material.prototype.copy.call( this, source );\r\n\r\n\tthis.color.copy( source.color );\r\n\tthis.specular.copy( source.specular );\r\n\tthis.shininess = source.shininess;\r\n\r\n\tthis.map = source.map;\r\n\r\n\tthis.lightMap = source.lightMap;\r\n\tthis.lightMapIntensity = source.lightMapIntensity;\r\n\r\n\tthis.aoMap = source.aoMap;\r\n\tthis.aoMapIntensity = source.aoMapIntensity;\r\n\r\n\tthis.emissive.copy( source.emissive );\r\n\tthis.emissiveMap = source.emissiveMap;\r\n\tthis.emissiveIntensity = source.emissiveIntensity;\r\n\r\n\tthis.bumpMap = source.bumpMap;\r\n\tthis.bumpScale = source.bumpScale;\r\n\r\n\tthis.normalMap = source.normalMap;\r\n\tthis.normalScale.copy( source.normalScale );\r\n\r\n\tthis.displacementMap = source.displacementMap;\r\n\tthis.displacementScale = source.displacementScale;\r\n\tthis.displacementBias = source.displacementBias;\r\n\r\n\tthis.specularMap = source.specularMap;\r\n\r\n\tthis.alphaMap = source.alphaMap;\r\n\r\n\tthis.envMap = source.envMap;\r\n\tthis.combine = source.combine;\r\n\tthis.reflectivity = source.reflectivity;\r\n\tthis.refractionRatio = source.refractionRatio;\r\n\r\n\tthis.wireframe = source.wireframe;\r\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\r\n\tthis.wireframeLinecap = source.wireframeLinecap;\r\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\r\n\r\n\tthis.skinning = source.skinning;\r\n\tthis.morphTargets = source.morphTargets;\r\n\tthis.morphNormals = source.morphNormals;\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n// File:src/materials/MeshStandardMaterial.js\r\n\r\n/**\r\n * @author WestLangley / http://github.com/WestLangley\r\n *\r\n * parameters = {\r\n * color: ,\r\n * roughness: ,\r\n * metalness: ,\r\n * opacity: ,\r\n *\r\n * map: new THREE.Texture( ),\r\n *\r\n * lightMap: new THREE.Texture( ),\r\n * lightMapIntensity: \r\n *\r\n * aoMap: new THREE.Texture( ),\r\n * aoMapIntensity: \r\n *\r\n * emissive: ,\r\n * emissiveIntensity: \r\n * emissiveMap: new THREE.Texture( ),\r\n *\r\n * bumpMap: new THREE.Texture( ),\r\n * bumpScale: ,\r\n *\r\n * normalMap: new THREE.Texture( ),\r\n * normalScale: ,\r\n *\r\n * displacementMap: new THREE.Texture( ),\r\n * displacementScale: ,\r\n * displacementBias: ,\r\n *\r\n * roughnessMap: new THREE.Texture( ),\r\n *\r\n * metalnessMap: new THREE.Texture( ),\r\n *\r\n * alphaMap: new THREE.Texture( ),\r\n *\r\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\r\n * envMapIntensity: \r\n *\r\n * refractionRatio: ,\r\n *\r\n * wireframe: ,\r\n * wireframeLinewidth: ,\r\n *\r\n * skinning: ,\r\n * morphTargets: ,\r\n * morphNormals: \r\n * }\r\n */\r\n\r\nTHREE.MeshStandardMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.defines = { 'STANDARD': '' };\r\n\r\n\tthis.type = 'MeshStandardMaterial';\r\n\r\n\tthis.color = new THREE.Color( 0xffffff ); // diffuse\r\n\tthis.roughness = 0.5;\r\n\tthis.metalness = 0.5;\r\n\r\n\tthis.map = null;\r\n\r\n\tthis.lightMap = null;\r\n\tthis.lightMapIntensity = 1.0;\r\n\r\n\tthis.aoMap = null;\r\n\tthis.aoMapIntensity = 1.0;\r\n\r\n\tthis.emissive = new THREE.Color( 0x000000 );\r\n\tthis.emissiveIntensity = 1.0;\r\n\tthis.emissiveMap = null;\r\n\r\n\tthis.bumpMap = null;\r\n\tthis.bumpScale = 1;\r\n\r\n\tthis.normalMap = null;\r\n\tthis.normalScale = new THREE.Vector2( 1, 1 );\r\n\r\n\tthis.displacementMap = null;\r\n\tthis.displacementScale = 1;\r\n\tthis.displacementBias = 0;\r\n\r\n\tthis.roughnessMap = null;\r\n\r\n\tthis.metalnessMap = null;\r\n\r\n\tthis.alphaMap = null;\r\n\r\n\tthis.envMap = null;\r\n\tthis.envMapIntensity = 1.0;\r\n\r\n\tthis.refractionRatio = 0.98;\r\n\r\n\tthis.wireframe = false;\r\n\tthis.wireframeLinewidth = 1;\r\n\tthis.wireframeLinecap = 'round';\r\n\tthis.wireframeLinejoin = 'round';\r\n\r\n\tthis.skinning = false;\r\n\tthis.morphTargets = false;\r\n\tthis.morphNormals = false;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.MeshStandardMaterial.prototype = Object.create( THREE.Material.prototype );\r\nTHREE.MeshStandardMaterial.prototype.constructor = THREE.MeshStandardMaterial;\r\n\r\nTHREE.MeshStandardMaterial.prototype.copy = function ( source ) {\r\n\r\n\tTHREE.Material.prototype.copy.call( this, source );\r\n\r\n\tthis.defines = { 'STANDARD': '' };\r\n\r\n\tthis.color.copy( source.color );\r\n\tthis.roughness = source.roughness;\r\n\tthis.metalness = source.metalness;\r\n\r\n\tthis.map = source.map;\r\n\r\n\tthis.lightMap = source.lightMap;\r\n\tthis.lightMapIntensity = source.lightMapIntensity;\r\n\r\n\tthis.aoMap = source.aoMap;\r\n\tthis.aoMapIntensity = source.aoMapIntensity;\r\n\r\n\tthis.emissive.copy( source.emissive );\r\n\tthis.emissiveMap = source.emissiveMap;\r\n\tthis.emissiveIntensity = source.emissiveIntensity;\r\n\r\n\tthis.bumpMap = source.bumpMap;\r\n\tthis.bumpScale = source.bumpScale;\r\n\r\n\tthis.normalMap = source.normalMap;\r\n\tthis.normalScale.copy( source.normalScale );\r\n\r\n\tthis.displacementMap = source.displacementMap;\r\n\tthis.displacementScale = source.displacementScale;\r\n\tthis.displacementBias = source.displacementBias;\r\n\r\n\tthis.roughnessMap = source.roughnessMap;\r\n\r\n\tthis.metalnessMap = source.metalnessMap;\r\n\r\n\tthis.alphaMap = source.alphaMap;\r\n\r\n\tthis.envMap = source.envMap;\r\n\tthis.envMapIntensity = source.envMapIntensity;\r\n\r\n\tthis.refractionRatio = source.refractionRatio;\r\n\r\n\tthis.wireframe = source.wireframe;\r\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\r\n\tthis.wireframeLinecap = source.wireframeLinecap;\r\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\r\n\r\n\tthis.skinning = source.skinning;\r\n\tthis.morphTargets = source.morphTargets;\r\n\tthis.morphNormals = source.morphNormals;\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n// File:src/materials/MeshPhysicalMaterial.js\r\n\r\n/**\r\n * @author WestLangley / http://github.com/WestLangley\r\n *\r\n * parameters = {\r\n * reflectivity: \r\n * }\r\n */\r\n\r\nTHREE.MeshPhysicalMaterial = function ( parameters ) {\r\n\r\n\tTHREE.MeshStandardMaterial.call( this );\r\n\r\n\tthis.defines = { 'PHYSICAL': '' };\r\n\r\n\tthis.type = 'MeshPhysicalMaterial';\r\n\r\n\tthis.reflectivity = 0.5; // maps to F0 = 0.04\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.MeshPhysicalMaterial.prototype = Object.create( THREE.MeshStandardMaterial.prototype );\r\nTHREE.MeshPhysicalMaterial.prototype.constructor = THREE.MeshPhysicalMaterial;\r\n\r\nTHREE.MeshPhysicalMaterial.prototype.copy = function ( source ) {\r\n\r\n\tTHREE.MeshStandardMaterial.prototype.copy.call( this, source );\r\n\r\n\tthis.defines = { 'PHYSICAL': '' };\r\n\r\n\tthis.reflectivity = source.reflectivity;\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n// File:src/materials/MultiMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.MultiMaterial = function ( materials ) {\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\tthis.type = 'MultiMaterial';\r\n\r\n\tthis.materials = materials instanceof Array ? materials : [];\r\n\r\n\tthis.visible = true;\r\n\r\n};\r\n\r\nTHREE.MultiMaterial.prototype = {\r\n\r\n\tconstructor: THREE.MultiMaterial,\r\n\r\n\ttoJSON: function ( meta ) {\r\n\r\n\t\tvar output = {\r\n\t\t\tmetadata: {\r\n\t\t\t\tversion: 4.2,\r\n\t\t\t\ttype: 'material',\r\n\t\t\t\tgenerator: 'MaterialExporter'\r\n\t\t\t},\r\n\t\t\tuuid: this.uuid,\r\n\t\t\ttype: this.type,\r\n\t\t\tmaterials: []\r\n\t\t};\r\n\r\n\t\tvar materials = this.materials;\r\n\r\n\t\tfor ( var i = 0, l = materials.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar material = materials[ i ].toJSON( meta );\r\n\t\t\tdelete material.metadata;\r\n\r\n\t\t\toutput.materials.push( material );\r\n\r\n\t\t}\r\n\r\n\t\toutput.visible = this.visible;\r\n\r\n\t\treturn output;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\tvar material = new this.constructor();\r\n\r\n\t\tfor ( var i = 0; i < this.materials.length; i ++ ) {\r\n\r\n\t\t\tmaterial.materials.push( this.materials[ i ].clone() );\r\n\r\n\t\t}\r\n\r\n\t\tmaterial.visible = this.visible;\r\n\r\n\t\treturn material;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/materials/PointsMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * parameters = {\r\n * color: ,\r\n * opacity: ,\r\n * map: new THREE.Texture( ),\r\n *\r\n * size: ,\r\n * sizeAttenuation: \r\n * }\r\n */\r\n\r\nTHREE.PointsMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'PointsMaterial';\r\n\r\n\tthis.color = new THREE.Color( 0xffffff );\r\n\r\n\tthis.map = null;\r\n\r\n\tthis.size = 1;\r\n\tthis.sizeAttenuation = true;\r\n\r\n\tthis.lights = false;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.PointsMaterial.prototype = Object.create( THREE.Material.prototype );\r\nTHREE.PointsMaterial.prototype.constructor = THREE.PointsMaterial;\r\n\r\nTHREE.PointsMaterial.prototype.copy = function ( source ) {\r\n\r\n\tTHREE.Material.prototype.copy.call( this, source );\r\n\r\n\tthis.color.copy( source.color );\r\n\r\n\tthis.map = source.map;\r\n\r\n\tthis.size = source.size;\r\n\tthis.sizeAttenuation = source.sizeAttenuation;\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n// File:src/materials/ShaderMaterial.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * parameters = {\r\n * defines: { \"label\" : \"value\" },\r\n * uniforms: { \"parameter1\": { type: \"1f\", value: 1.0 }, \"parameter2\": { type: \"1i\" value2: 2 } },\r\n *\r\n * fragmentShader: ,\r\n * vertexShader: ,\r\n *\r\n * wireframe: ,\r\n * wireframeLinewidth: ,\r\n *\r\n * lights: ,\r\n *\r\n * skinning: ,\r\n * morphTargets: ,\r\n * morphNormals: \r\n * }\r\n */\r\n\r\nTHREE.ShaderMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'ShaderMaterial';\r\n\r\n\tthis.defines = {};\r\n\tthis.uniforms = {};\r\n\r\n\tthis.vertexShader = 'void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}';\r\n\tthis.fragmentShader = 'void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}';\r\n\r\n\tthis.linewidth = 1;\r\n\r\n\tthis.wireframe = false;\r\n\tthis.wireframeLinewidth = 1;\r\n\r\n\tthis.fog = false; // set to use scene fog\r\n\tthis.lights = false; // set to use scene lights\r\n\tthis.clipping = false; // set to use user-defined clipping planes\r\n\r\n\tthis.skinning = false; // set to use skinning attribute streams\r\n\tthis.morphTargets = false; // set to use morph targets\r\n\tthis.morphNormals = false; // set to use morph normals\r\n\r\n\tthis.extensions = {\r\n\t\tderivatives: false, // set to use derivatives\r\n\t\tfragDepth: false, // set to use fragment depth values\r\n\t\tdrawBuffers: false, // set to use draw buffers\r\n\t\tshaderTextureLOD: false // set to use shader texture LOD\r\n\t};\r\n\r\n\t// When rendered geometry doesn't include these attributes but the material does,\r\n\t// use these default values in WebGL. This avoids errors when buffer data is missing.\r\n\tthis.defaultAttributeValues = {\r\n\t\t'color': [ 1, 1, 1 ],\r\n\t\t'uv': [ 0, 0 ],\r\n\t\t'uv2': [ 0, 0 ]\r\n\t};\r\n\r\n\tthis.index0AttributeName = undefined;\r\n\r\n\tif ( parameters !== undefined ) {\r\n\r\n\t\tif ( parameters.attributes !== undefined ) {\r\n\r\n\t\t\tconsole.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );\r\n\r\n\t\t}\r\n\r\n\t\tthis.setValues( parameters );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.ShaderMaterial.prototype = Object.create( THREE.Material.prototype );\r\nTHREE.ShaderMaterial.prototype.constructor = THREE.ShaderMaterial;\r\n\r\nTHREE.ShaderMaterial.prototype.copy = function ( source ) {\r\n\r\n\tTHREE.Material.prototype.copy.call( this, source );\r\n\r\n\tthis.fragmentShader = source.fragmentShader;\r\n\tthis.vertexShader = source.vertexShader;\r\n\r\n\tthis.uniforms = THREE.UniformsUtils.clone( source.uniforms );\r\n\r\n\tthis.defines = source.defines;\r\n\r\n\tthis.wireframe = source.wireframe;\r\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\r\n\r\n\tthis.lights = source.lights;\r\n\tthis.clipping = source.clipping;\r\n\r\n\tthis.skinning = source.skinning;\r\n\r\n\tthis.morphTargets = source.morphTargets;\r\n\tthis.morphNormals = source.morphNormals;\r\n\r\n\tthis.extensions = source.extensions;\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\nTHREE.ShaderMaterial.prototype.toJSON = function ( meta ) {\r\n\r\n\tvar data = THREE.Material.prototype.toJSON.call( this, meta );\r\n\r\n\tdata.uniforms = this.uniforms;\r\n\tdata.vertexShader = this.vertexShader;\r\n\tdata.fragmentShader = this.fragmentShader;\r\n\r\n\treturn data;\r\n\r\n};\r\n\r\n// File:src/materials/RawShaderMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.RawShaderMaterial = function ( parameters ) {\r\n\r\n\tTHREE.ShaderMaterial.call( this, parameters );\r\n\r\n\tthis.type = 'RawShaderMaterial';\r\n\r\n};\r\n\r\nTHREE.RawShaderMaterial.prototype = Object.create( THREE.ShaderMaterial.prototype );\r\nTHREE.RawShaderMaterial.prototype.constructor = THREE.RawShaderMaterial;\r\n\r\n// File:src/materials/SpriteMaterial.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * parameters = {\r\n * color: ,\r\n * opacity: ,\r\n * map: new THREE.Texture( ),\r\n *\r\n *\tuvOffset: new THREE.Vector2(),\r\n *\tuvScale: new THREE.Vector2()\r\n * }\r\n */\r\n\r\nTHREE.SpriteMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'SpriteMaterial';\r\n\r\n\tthis.color = new THREE.Color( 0xffffff );\r\n\tthis.map = null;\r\n\r\n\tthis.rotation = 0;\r\n\r\n\tthis.fog = false;\r\n\tthis.lights = false;\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.SpriteMaterial.prototype = Object.create( THREE.Material.prototype );\r\nTHREE.SpriteMaterial.prototype.constructor = THREE.SpriteMaterial;\r\n\r\nTHREE.SpriteMaterial.prototype.copy = function ( source ) {\r\n\r\n\tTHREE.Material.prototype.copy.call( this, source );\r\n\r\n\tthis.color.copy( source.color );\r\n\tthis.map = source.map;\r\n\r\n\tthis.rotation = source.rotation;\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n// File:src/materials/ShadowMaterial.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.ShadowMaterial = function () {\r\n\r\n\tTHREE.ShaderMaterial.call( this, {\r\n\t\tuniforms: THREE.UniformsUtils.merge( [\r\n\t\t\tTHREE.UniformsLib[ \"lights\" ],\r\n\t\t\t{\r\n\t\t\t\topacity: { value: 1.0 }\r\n\t\t\t}\r\n\t\t] ),\r\n\t\tvertexShader: THREE.ShaderChunk[ 'shadow_vert' ],\r\n\t\tfragmentShader: THREE.ShaderChunk[ 'shadow_frag' ]\r\n\t} );\r\n\r\n\tthis.lights = true;\r\n\tthis.transparent = true;\r\n\r\n\tObject.defineProperties( this, {\r\n\t\topacity: {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function () {\r\n\t\t\t\treturn this.uniforms.opacity.value;\r\n\t\t\t},\r\n\t\t\tset: function ( value ) {\r\n\t\t\t\tthis.uniforms.opacity.value = value;\r\n\t\t\t}\r\n\t\t}\r\n\t} );\r\n\r\n};\r\n\r\nTHREE.ShadowMaterial.prototype = Object.create( THREE.ShaderMaterial.prototype );\r\nTHREE.ShadowMaterial.prototype.constructor = THREE.ShadowMaterial;\r\n\r\n// File:src/textures/Texture.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author szimek / https://github.com/szimek/\r\n */\r\n\r\nTHREE.Texture = function ( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\r\n\r\n\tObject.defineProperty( this, 'id', { value: THREE.TextureIdCount ++ } );\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\tthis.name = '';\r\n\tthis.sourceFile = '';\r\n\r\n\tthis.image = image !== undefined ? image : THREE.Texture.DEFAULT_IMAGE;\r\n\tthis.mipmaps = [];\r\n\r\n\tthis.mapping = mapping !== undefined ? mapping : THREE.Texture.DEFAULT_MAPPING;\r\n\r\n\tthis.wrapS = wrapS !== undefined ? wrapS : THREE.ClampToEdgeWrapping;\r\n\tthis.wrapT = wrapT !== undefined ? wrapT : THREE.ClampToEdgeWrapping;\r\n\r\n\tthis.magFilter = magFilter !== undefined ? magFilter : THREE.LinearFilter;\r\n\tthis.minFilter = minFilter !== undefined ? minFilter : THREE.LinearMipMapLinearFilter;\r\n\r\n\tthis.anisotropy = anisotropy !== undefined ? anisotropy : 1;\r\n\r\n\tthis.format = format !== undefined ? format : THREE.RGBAFormat;\r\n\tthis.type = type !== undefined ? type : THREE.UnsignedByteType;\r\n\r\n\tthis.offset = new THREE.Vector2( 0, 0 );\r\n\tthis.repeat = new THREE.Vector2( 1, 1 );\r\n\r\n\tthis.generateMipmaps = true;\r\n\tthis.premultiplyAlpha = false;\r\n\tthis.flipY = true;\r\n\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\r\n\r\n\r\n\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\r\n\t//\r\n\t// Also changing the encoding after already used by a Material will not automatically make the Material\r\n\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\r\n\tthis.encoding = encoding !== undefined ? encoding : THREE.LinearEncoding;\r\n\r\n\tthis.version = 0;\r\n\tthis.onUpdate = null;\r\n\r\n};\r\n\r\nTHREE.Texture.DEFAULT_IMAGE = undefined;\r\nTHREE.Texture.DEFAULT_MAPPING = THREE.UVMapping;\r\n\r\nTHREE.Texture.prototype = {\r\n\r\n\tconstructor: THREE.Texture,\r\n\r\n\tset needsUpdate( value ) {\r\n\r\n\t\tif ( value === true ) this.version ++;\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\r\n\t},\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tthis.image = source.image;\r\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\r\n\r\n\t\tthis.mapping = source.mapping;\r\n\r\n\t\tthis.wrapS = source.wrapS;\r\n\t\tthis.wrapT = source.wrapT;\r\n\r\n\t\tthis.magFilter = source.magFilter;\r\n\t\tthis.minFilter = source.minFilter;\r\n\r\n\t\tthis.anisotropy = source.anisotropy;\r\n\r\n\t\tthis.format = source.format;\r\n\t\tthis.type = source.type;\r\n\r\n\t\tthis.offset.copy( source.offset );\r\n\t\tthis.repeat.copy( source.repeat );\r\n\r\n\t\tthis.generateMipmaps = source.generateMipmaps;\r\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\r\n\t\tthis.flipY = source.flipY;\r\n\t\tthis.unpackAlignment = source.unpackAlignment;\r\n\t\tthis.encoding = source.encoding;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\ttoJSON: function ( meta ) {\r\n\r\n\t\tif ( meta.textures[ this.uuid ] !== undefined ) {\r\n\r\n\t\t\treturn meta.textures[ this.uuid ];\r\n\r\n\t\t}\r\n\r\n\t\tfunction getDataURL( image ) {\r\n\r\n\t\t\tvar canvas;\r\n\r\n\t\t\tif ( image.toDataURL !== undefined ) {\r\n\r\n\t\t\t\tcanvas = image;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tcanvas = document.createElement( 'canvas' );\r\n\t\t\t\tcanvas.width = image.width;\r\n\t\t\t\tcanvas.height = image.height;\r\n\r\n\t\t\t\tcanvas.getContext( '2d' ).drawImage( image, 0, 0, image.width, image.height );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\r\n\r\n\t\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\treturn canvas.toDataURL( 'image/png' );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar output = {\r\n\t\t\tmetadata: {\r\n\t\t\t\tversion: 4.4,\r\n\t\t\t\ttype: 'Texture',\r\n\t\t\t\tgenerator: 'Texture.toJSON'\r\n\t\t\t},\r\n\r\n\t\t\tuuid: this.uuid,\r\n\t\t\tname: this.name,\r\n\r\n\t\t\tmapping: this.mapping,\r\n\r\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\r\n\t\t\toffset: [ this.offset.x, this.offset.y ],\r\n\t\t\twrap: [ this.wrapS, this.wrapT ],\r\n\r\n\t\t\tminFilter: this.minFilter,\r\n\t\t\tmagFilter: this.magFilter,\r\n\t\t\tanisotropy: this.anisotropy\r\n\t\t};\r\n\r\n\t\tif ( this.image !== undefined ) {\r\n\r\n\t\t\t// TODO: Move to THREE.Image\r\n\r\n\t\t\tvar image = this.image;\r\n\r\n\t\t\tif ( image.uuid === undefined ) {\r\n\r\n\t\t\t\timage.uuid = THREE.Math.generateUUID(); // UGH\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( meta.images[ image.uuid ] === undefined ) {\r\n\r\n\t\t\t\tmeta.images[ image.uuid ] = {\r\n\t\t\t\t\tuuid: image.uuid,\r\n\t\t\t\t\turl: getDataURL( image )\r\n\t\t\t\t};\r\n\r\n\t\t\t}\r\n\r\n\t\t\toutput.image = image.uuid;\r\n\r\n\t\t}\r\n\r\n\t\tmeta.textures[ this.uuid ] = output;\r\n\r\n\t\treturn output;\r\n\r\n\t},\r\n\r\n\tdispose: function () {\r\n\r\n\t\tthis.dispatchEvent( { type: 'dispose' } );\r\n\r\n\t},\r\n\r\n\ttransformUv: function ( uv ) {\r\n\r\n\t\tif ( this.mapping !== THREE.UVMapping ) return;\r\n\r\n\t\tuv.multiply( this.repeat );\r\n\t\tuv.add( this.offset );\r\n\r\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\r\n\r\n\t\t\tswitch ( this.wrapS ) {\r\n\r\n\t\t\t\tcase THREE.RepeatWrapping:\r\n\r\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase THREE.ClampToEdgeWrapping:\r\n\r\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase THREE.MirroredRepeatWrapping:\r\n\r\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\r\n\r\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\r\n\r\n\t\t\tswitch ( this.wrapT ) {\r\n\r\n\t\t\t\tcase THREE.RepeatWrapping:\r\n\r\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase THREE.ClampToEdgeWrapping:\r\n\r\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase THREE.MirroredRepeatWrapping:\r\n\r\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\r\n\r\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.flipY ) {\r\n\r\n\t\t\tuv.y = 1 - uv.y;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\nObject.assign( THREE.Texture.prototype, THREE.EventDispatcher.prototype );\r\n\r\nTHREE.TextureIdCount = 0;\r\n\r\n// File:src/textures/DepthTexture.js\r\n\r\n/**\r\n * @author Matt DesLauriers / @mattdesl\r\n */\r\n\r\nTHREE.DepthTexture = function ( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy ) {\r\n\r\n THREE.Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, THREE.DepthFormat, type, anisotropy );\r\n\r\n this.image = { width: width, height: height };\r\n\r\n this.type = type !== undefined ? type : THREE.UnsignedShortType;\r\n\r\n this.magFilter = magFilter !== undefined ? magFilter : THREE.NearestFilter;\r\n this.minFilter = minFilter !== undefined ? minFilter : THREE.NearestFilter;\r\n\r\n this.flipY = false;\r\n this.generateMipmaps = false;\r\n\r\n};\r\n\r\nTHREE.DepthTexture.prototype = Object.create( THREE.Texture.prototype );\r\nTHREE.DepthTexture.prototype.constructor = THREE.DepthTexture;\r\n\r\n// File:src/textures/CanvasTexture.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.CanvasTexture = function ( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\r\n\r\n\tTHREE.Texture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\r\n\r\n\tthis.needsUpdate = true;\r\n\r\n};\r\n\r\nTHREE.CanvasTexture.prototype = Object.create( THREE.Texture.prototype );\r\nTHREE.CanvasTexture.prototype.constructor = THREE.CanvasTexture;\r\n\r\n// File:src/textures/CubeTexture.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.CubeTexture = function ( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\r\n\r\n\timages = images !== undefined ? images : [];\r\n\tmapping = mapping !== undefined ? mapping : THREE.CubeReflectionMapping;\r\n\r\n\tTHREE.Texture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\r\n\r\n\tthis.flipY = false;\r\n\r\n};\r\n\r\nTHREE.CubeTexture.prototype = Object.create( THREE.Texture.prototype );\r\nTHREE.CubeTexture.prototype.constructor = THREE.CubeTexture;\r\n\r\nObject.defineProperty( THREE.CubeTexture.prototype, 'images', {\r\n\r\n\tget: function () {\r\n\r\n\t\treturn this.image;\r\n\r\n\t},\r\n\r\n\tset: function ( value ) {\r\n\r\n\t\tthis.image = value;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/textures/CompressedTexture.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.CompressedTexture = function ( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\r\n\r\n\tTHREE.Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\r\n\r\n\tthis.image = { width: width, height: height };\r\n\tthis.mipmaps = mipmaps;\r\n\r\n\t// no flipping for cube textures\r\n\t// (also flipping doesn't work for compressed textures )\r\n\r\n\tthis.flipY = false;\r\n\r\n\t// can't generate mipmaps for compressed textures\r\n\t// mips must be embedded in DDS files\r\n\r\n\tthis.generateMipmaps = false;\r\n\r\n};\r\n\r\nTHREE.CompressedTexture.prototype = Object.create( THREE.Texture.prototype );\r\nTHREE.CompressedTexture.prototype.constructor = THREE.CompressedTexture;\r\n\r\n// File:src/textures/DataTexture.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.DataTexture = function ( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\r\n\r\n\tTHREE.Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\r\n\r\n\tthis.image = { data: data, width: width, height: height };\r\n\r\n\tthis.magFilter = magFilter !== undefined ? magFilter : THREE.NearestFilter;\r\n\tthis.minFilter = minFilter !== undefined ? minFilter : THREE.NearestFilter;\r\n\r\n\tthis.flipY = false;\r\n\tthis.generateMipmaps = false;\r\n\r\n};\r\n\r\nTHREE.DataTexture.prototype = Object.create( THREE.Texture.prototype );\r\nTHREE.DataTexture.prototype.constructor = THREE.DataTexture;\r\n\r\n// File:src/textures/VideoTexture.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.VideoTexture = function ( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\r\n\r\n\tTHREE.Texture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\r\n\r\n\tthis.generateMipmaps = false;\r\n\r\n\tvar scope = this;\r\n\r\n\tfunction update() {\r\n\r\n\t\trequestAnimationFrame( update );\r\n\r\n\t\tif ( video.readyState >= video.HAVE_CURRENT_DATA ) {\r\n\r\n\t\t\tscope.needsUpdate = true;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tupdate();\r\n\r\n};\r\n\r\nTHREE.VideoTexture.prototype = Object.create( THREE.Texture.prototype );\r\nTHREE.VideoTexture.prototype.constructor = THREE.VideoTexture;\r\n\r\n// File:src/objects/Group.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Group = function () {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'Group';\r\n\r\n};\r\n\r\nTHREE.Group.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), {\r\n\r\n\tconstructor: THREE.Group\r\n\r\n} );\r\n\r\n// File:src/objects/Points.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Points = function ( geometry, material ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'Points';\r\n\r\n\tthis.geometry = geometry !== undefined ? geometry : new THREE.BufferGeometry();\r\n\tthis.material = material !== undefined ? material : new THREE.PointsMaterial( { color: Math.random() * 0xffffff } );\r\n\r\n};\r\n\r\nTHREE.Points.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), {\r\n\r\n\tconstructor: THREE.Points,\r\n\r\n\traycast: ( function () {\r\n\r\n\t\tvar inverseMatrix = new THREE.Matrix4();\r\n\t\tvar ray = new THREE.Ray();\r\n\t\tvar sphere = new THREE.Sphere();\r\n\r\n\t\treturn function raycast( raycaster, intersects ) {\r\n\r\n\t\t\tvar object = this;\r\n\t\t\tvar geometry = this.geometry;\r\n\t\t\tvar matrixWorld = this.matrixWorld;\r\n\t\t\tvar threshold = raycaster.params.Points.threshold;\r\n\r\n\t\t\t// Checking boundingSphere distance to ray\r\n\r\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\r\n\r\n\t\t\tsphere.copy( geometry.boundingSphere );\r\n\t\t\tsphere.applyMatrix4( matrixWorld );\r\n\r\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\r\n\r\n\t\t\t//\r\n\r\n\t\t\tinverseMatrix.getInverse( matrixWorld );\r\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\r\n\r\n\t\t\tvar localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\r\n\t\t\tvar localThresholdSq = localThreshold * localThreshold;\r\n\t\t\tvar position = new THREE.Vector3();\r\n\r\n\t\t\tfunction testPoint( point, index ) {\r\n\r\n\t\t\t\tvar rayPointDistanceSq = ray.distanceSqToPoint( point );\r\n\r\n\t\t\t\tif ( rayPointDistanceSq < localThresholdSq ) {\r\n\r\n\t\t\t\t\tvar intersectPoint = ray.closestPointToPoint( point );\r\n\t\t\t\t\tintersectPoint.applyMatrix4( matrixWorld );\r\n\r\n\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectPoint );\r\n\r\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\r\n\r\n\t\t\t\t\tintersects.push( {\r\n\r\n\t\t\t\t\t\tdistance: distance,\r\n\t\t\t\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\r\n\t\t\t\t\t\tpoint: intersectPoint.clone(),\r\n\t\t\t\t\t\tindex: index,\r\n\t\t\t\t\t\tface: null,\r\n\t\t\t\t\t\tobject: object\r\n\r\n\t\t\t\t\t} );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( geometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\t\t\tvar index = geometry.index;\r\n\t\t\t\tvar attributes = geometry.attributes;\r\n\t\t\t\tvar positions = attributes.position.array;\r\n\r\n\t\t\t\tif ( index !== null ) {\r\n\r\n\t\t\t\t\tvar indices = index.array;\r\n\r\n\t\t\t\t\tfor ( var i = 0, il = indices.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\t\tvar a = indices[ i ];\r\n\r\n\t\t\t\t\t\tposition.fromArray( positions, a * 3 );\r\n\r\n\t\t\t\t\t\ttestPoint( position, a );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tfor ( var i = 0, l = positions.length / 3; i < l; i ++ ) {\r\n\r\n\t\t\t\t\t\tposition.fromArray( positions, i * 3 );\r\n\r\n\t\t\t\t\t\ttestPoint( position, i );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tvar vertices = geometry.vertices;\r\n\r\n\t\t\t\tfor ( var i = 0, l = vertices.length; i < l; i ++ ) {\r\n\r\n\t\t\t\t\ttestPoint( vertices[ i ], i );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t}() ),\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/objects/Line.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Line = function ( geometry, material, mode ) {\r\n\r\n\tif ( mode === 1 ) {\r\n\r\n\t\tconsole.warn( 'THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead.' );\r\n\t\treturn new THREE.LineSegments( geometry, material );\r\n\r\n\t}\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'Line';\r\n\r\n\tthis.geometry = geometry !== undefined ? geometry : new THREE.BufferGeometry();\r\n\tthis.material = material !== undefined ? material : new THREE.LineBasicMaterial( { color: Math.random() * 0xffffff } );\r\n\r\n};\r\n\r\nTHREE.Line.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), {\r\n\r\n\tconstructor: THREE.Line,\r\n\r\n\traycast: ( function () {\r\n\r\n\t\tvar inverseMatrix = new THREE.Matrix4();\r\n\t\tvar ray = new THREE.Ray();\r\n\t\tvar sphere = new THREE.Sphere();\r\n\r\n\t\treturn function raycast( raycaster, intersects ) {\r\n\r\n\t\t\tvar precision = raycaster.linePrecision;\r\n\t\t\tvar precisionSq = precision * precision;\r\n\r\n\t\t\tvar geometry = this.geometry;\r\n\t\t\tvar matrixWorld = this.matrixWorld;\r\n\r\n\t\t\t// Checking boundingSphere distance to ray\r\n\r\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\r\n\r\n\t\t\tsphere.copy( geometry.boundingSphere );\r\n\t\t\tsphere.applyMatrix4( matrixWorld );\r\n\r\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\r\n\r\n\t\t\t//\r\n\r\n\t\t\tinverseMatrix.getInverse( matrixWorld );\r\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\r\n\r\n\t\t\tvar vStart = new THREE.Vector3();\r\n\t\t\tvar vEnd = new THREE.Vector3();\r\n\t\t\tvar interSegment = new THREE.Vector3();\r\n\t\t\tvar interRay = new THREE.Vector3();\r\n\t\t\tvar step = this instanceof THREE.LineSegments ? 2 : 1;\r\n\r\n\t\t\tif ( geometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\t\t\tvar index = geometry.index;\r\n\t\t\t\tvar attributes = geometry.attributes;\r\n\t\t\t\tvar positions = attributes.position.array;\r\n\r\n\t\t\t\tif ( index !== null ) {\r\n\r\n\t\t\t\t\tvar indices = index.array;\r\n\r\n\t\t\t\t\tfor ( var i = 0, l = indices.length - 1; i < l; i += step ) {\r\n\r\n\t\t\t\t\t\tvar a = indices[ i ];\r\n\t\t\t\t\t\tvar b = indices[ i + 1 ];\r\n\r\n\t\t\t\t\t\tvStart.fromArray( positions, a * 3 );\r\n\t\t\t\t\t\tvEnd.fromArray( positions, b * 3 );\r\n\r\n\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\r\n\r\n\t\t\t\t\t\tif ( distSq > precisionSq ) continue;\r\n\r\n\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\r\n\r\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\r\n\r\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\r\n\r\n\t\t\t\t\t\tintersects.push( {\r\n\r\n\t\t\t\t\t\t\tdistance: distance,\r\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\r\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\r\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\r\n\t\t\t\t\t\t\tindex: i,\r\n\t\t\t\t\t\t\tface: null,\r\n\t\t\t\t\t\t\tfaceIndex: null,\r\n\t\t\t\t\t\t\tobject: this\r\n\r\n\t\t\t\t\t\t} );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tfor ( var i = 0, l = positions.length / 3 - 1; i < l; i += step ) {\r\n\r\n\t\t\t\t\t\tvStart.fromArray( positions, 3 * i );\r\n\t\t\t\t\t\tvEnd.fromArray( positions, 3 * i + 3 );\r\n\r\n\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\r\n\r\n\t\t\t\t\t\tif ( distSq > precisionSq ) continue;\r\n\r\n\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\r\n\r\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\r\n\r\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\r\n\r\n\t\t\t\t\t\tintersects.push( {\r\n\r\n\t\t\t\t\t\t\tdistance: distance,\r\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\r\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\r\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\r\n\t\t\t\t\t\t\tindex: i,\r\n\t\t\t\t\t\t\tface: null,\r\n\t\t\t\t\t\t\tfaceIndex: null,\r\n\t\t\t\t\t\t\tobject: this\r\n\r\n\t\t\t\t\t\t} );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( geometry instanceof THREE.Geometry ) {\r\n\r\n\t\t\t\tvar vertices = geometry.vertices;\r\n\t\t\t\tvar nbVertices = vertices.length;\r\n\r\n\t\t\t\tfor ( var i = 0; i < nbVertices - 1; i += step ) {\r\n\r\n\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );\r\n\r\n\t\t\t\t\tif ( distSq > precisionSq ) continue;\r\n\r\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\r\n\r\n\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\r\n\r\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\r\n\r\n\t\t\t\t\tintersects.push( {\r\n\r\n\t\t\t\t\t\tdistance: distance,\r\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\r\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\r\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\r\n\t\t\t\t\t\tindex: i,\r\n\t\t\t\t\t\tface: null,\r\n\t\t\t\t\t\tfaceIndex: null,\r\n\t\t\t\t\t\tobject: this\r\n\r\n\t\t\t\t\t} );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t}() ),\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/objects/LineSegments.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.LineSegments = function ( geometry, material ) {\r\n\r\n\tTHREE.Line.call( this, geometry, material );\r\n\r\n\tthis.type = 'LineSegments';\r\n\r\n};\r\n\r\nTHREE.LineSegments.prototype = Object.assign( Object.create( THREE.Line.prototype ), {\r\n\r\n\tconstructor: THREE.LineSegments\r\n\r\n} );\r\n\r\n// File:src/objects/Mesh.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author jonobr1 / http://jonobr1.com/\r\n */\r\n\r\nTHREE.Mesh = function ( geometry, material ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'Mesh';\r\n\r\n\tthis.geometry = geometry !== undefined ? geometry : new THREE.BufferGeometry();\r\n\tthis.material = material !== undefined ? material : new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff } );\r\n\r\n\tthis.drawMode = THREE.TrianglesDrawMode;\r\n\r\n\tthis.updateMorphTargets();\r\n\r\n};\r\n\r\nTHREE.Mesh.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), {\r\n\r\n\tconstructor: THREE.Mesh,\r\n\r\n\tsetDrawMode: function ( value ) {\r\n\r\n\t\tthis.drawMode = value;\r\n\r\n\t},\r\n\r\n\tupdateMorphTargets: function () {\r\n\r\n\t\tif ( this.geometry.morphTargets !== undefined && this.geometry.morphTargets.length > 0 ) {\r\n\r\n\t\t\tthis.morphTargetBase = - 1;\r\n\t\t\tthis.morphTargetInfluences = [];\r\n\t\t\tthis.morphTargetDictionary = {};\r\n\r\n\t\t\tfor ( var m = 0, ml = this.geometry.morphTargets.length; m < ml; m ++ ) {\r\n\r\n\t\t\t\tthis.morphTargetInfluences.push( 0 );\r\n\t\t\t\tthis.morphTargetDictionary[ this.geometry.morphTargets[ m ].name ] = m;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tgetMorphTargetIndexByName: function ( name ) {\r\n\r\n\t\tif ( this.morphTargetDictionary[ name ] !== undefined ) {\r\n\r\n\t\t\treturn this.morphTargetDictionary[ name ];\r\n\r\n\t\t}\r\n\r\n\t\tconsole.warn( 'THREE.Mesh.getMorphTargetIndexByName: morph target ' + name + ' does not exist. Returning 0.' );\r\n\r\n\t\treturn 0;\r\n\r\n\t},\r\n\r\n\traycast: ( function () {\r\n\r\n\t\tvar inverseMatrix = new THREE.Matrix4();\r\n\t\tvar ray = new THREE.Ray();\r\n\t\tvar sphere = new THREE.Sphere();\r\n\r\n\t\tvar vA = new THREE.Vector3();\r\n\t\tvar vB = new THREE.Vector3();\r\n\t\tvar vC = new THREE.Vector3();\r\n\r\n\t\tvar tempA = new THREE.Vector3();\r\n\t\tvar tempB = new THREE.Vector3();\r\n\t\tvar tempC = new THREE.Vector3();\r\n\r\n\t\tvar uvA = new THREE.Vector2();\r\n\t\tvar uvB = new THREE.Vector2();\r\n\t\tvar uvC = new THREE.Vector2();\r\n\r\n\t\tvar barycoord = new THREE.Vector3();\r\n\r\n\t\tvar intersectionPoint = new THREE.Vector3();\r\n\t\tvar intersectionPointWorld = new THREE.Vector3();\r\n\r\n\t\tfunction uvIntersection( point, p1, p2, p3, uv1, uv2, uv3 ) {\r\n\r\n\t\t\tTHREE.Triangle.barycoordFromPoint( point, p1, p2, p3, barycoord );\r\n\r\n\t\t\tuv1.multiplyScalar( barycoord.x );\r\n\t\t\tuv2.multiplyScalar( barycoord.y );\r\n\t\t\tuv3.multiplyScalar( barycoord.z );\r\n\r\n\t\t\tuv1.add( uv2 ).add( uv3 );\r\n\r\n\t\t\treturn uv1.clone();\r\n\r\n\t\t}\r\n\r\n\t\tfunction checkIntersection( object, raycaster, ray, pA, pB, pC, point ) {\r\n\r\n\t\t\tvar intersect;\r\n\t\t\tvar material = object.material;\r\n\r\n\t\t\tif ( material.side === THREE.BackSide ) {\r\n\r\n\t\t\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== THREE.DoubleSide, point );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( intersect === null ) return null;\r\n\r\n\t\t\tintersectionPointWorld.copy( point );\r\n\t\t\tintersectionPointWorld.applyMatrix4( object.matrixWorld );\r\n\r\n\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectionPointWorld );\r\n\r\n\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\r\n\r\n\t\t\treturn {\r\n\t\t\t\tdistance: distance,\r\n\t\t\t\tpoint: intersectionPointWorld.clone(),\r\n\t\t\t\tobject: object\r\n\t\t\t};\r\n\r\n\t\t}\r\n\r\n\t\tfunction checkBufferGeometryIntersection( object, raycaster, ray, positions, uvs, a, b, c ) {\r\n\r\n\t\t\tvA.fromArray( positions, a * 3 );\r\n\t\t\tvB.fromArray( positions, b * 3 );\r\n\t\t\tvC.fromArray( positions, c * 3 );\r\n\r\n\t\t\tvar intersection = checkIntersection( object, raycaster, ray, vA, vB, vC, intersectionPoint );\r\n\r\n\t\t\tif ( intersection ) {\r\n\r\n\t\t\t\tif ( uvs ) {\r\n\r\n\t\t\t\t\tuvA.fromArray( uvs, a * 2 );\r\n\t\t\t\t\tuvB.fromArray( uvs, b * 2 );\r\n\t\t\t\t\tuvC.fromArray( uvs, c * 2 );\r\n\r\n\t\t\t\t\tintersection.uv = uvIntersection( intersectionPoint, vA, vB, vC, uvA, uvB, uvC );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tintersection.face = new THREE.Face3( a, b, c, THREE.Triangle.normal( vA, vB, vC ) );\r\n\t\t\t\tintersection.faceIndex = a;\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn intersection;\r\n\r\n\t\t}\r\n\r\n\t\treturn function raycast( raycaster, intersects ) {\r\n\r\n\t\t\tvar geometry = this.geometry;\r\n\t\t\tvar material = this.material;\r\n\t\t\tvar matrixWorld = this.matrixWorld;\r\n\r\n\t\t\tif ( material === undefined ) return;\r\n\r\n\t\t\t// Checking boundingSphere distance to ray\r\n\r\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\r\n\r\n\t\t\tsphere.copy( geometry.boundingSphere );\r\n\t\t\tsphere.applyMatrix4( matrixWorld );\r\n\r\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\r\n\r\n\t\t\t//\r\n\r\n\t\t\tinverseMatrix.getInverse( matrixWorld );\r\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\r\n\r\n\t\t\t// Check boundingBox before continuing\r\n\r\n\t\t\tif ( geometry.boundingBox !== null ) {\r\n\r\n\t\t\t\tif ( ray.intersectsBox( geometry.boundingBox ) === false ) return;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar uvs, intersection;\r\n\r\n\t\t\tif ( geometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\t\t\tvar a, b, c;\r\n\t\t\t\tvar index = geometry.index;\r\n\t\t\t\tvar attributes = geometry.attributes;\r\n\t\t\t\tvar positions = attributes.position.array;\r\n\r\n\t\t\t\tif ( attributes.uv !== undefined ) {\r\n\r\n\t\t\t\t\tuvs = attributes.uv.array;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( index !== null ) {\r\n\r\n\t\t\t\t\tvar indices = index.array;\r\n\r\n\t\t\t\t\tfor ( var i = 0, l = indices.length; i < l; i += 3 ) {\r\n\r\n\t\t\t\t\t\ta = indices[ i ];\r\n\t\t\t\t\t\tb = indices[ i + 1 ];\r\n\t\t\t\t\t\tc = indices[ i + 2 ];\r\n\r\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, raycaster, ray, positions, uvs, a, b, c );\r\n\r\n\t\t\t\t\t\tif ( intersection ) {\r\n\r\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indices buffer semantics\r\n\t\t\t\t\t\t\tintersects.push( intersection );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\r\n\t\t\t\t\tfor ( var i = 0, l = positions.length; i < l; i += 9 ) {\r\n\r\n\t\t\t\t\t\ta = i / 3;\r\n\t\t\t\t\t\tb = a + 1;\r\n\t\t\t\t\t\tc = a + 2;\r\n\r\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, raycaster, ray, positions, uvs, a, b, c );\r\n\r\n\t\t\t\t\t\tif ( intersection ) {\r\n\r\n\t\t\t\t\t\t\tintersection.index = a; // triangle number in positions buffer semantics\r\n\t\t\t\t\t\t\tintersects.push( intersection );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( geometry instanceof THREE.Geometry ) {\r\n\r\n\t\t\t\tvar fvA, fvB, fvC;\r\n\t\t\t\tvar isFaceMaterial = material instanceof THREE.MultiMaterial;\r\n\t\t\t\tvar materials = isFaceMaterial === true ? material.materials : null;\r\n\r\n\t\t\t\tvar vertices = geometry.vertices;\r\n\t\t\t\tvar faces = geometry.faces;\r\n\t\t\t\tvar faceVertexUvs = geometry.faceVertexUvs[ 0 ];\r\n\t\t\t\tif ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs;\r\n\r\n\t\t\t\tfor ( var f = 0, fl = faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\t\tvar face = faces[ f ];\r\n\t\t\t\t\tvar faceMaterial = isFaceMaterial === true ? materials[ face.materialIndex ] : material;\r\n\r\n\t\t\t\t\tif ( faceMaterial === undefined ) continue;\r\n\r\n\t\t\t\t\tfvA = vertices[ face.a ];\r\n\t\t\t\t\tfvB = vertices[ face.b ];\r\n\t\t\t\t\tfvC = vertices[ face.c ];\r\n\r\n\t\t\t\t\tif ( faceMaterial.morphTargets === true ) {\r\n\r\n\t\t\t\t\t\tvar morphTargets = geometry.morphTargets;\r\n\t\t\t\t\t\tvar morphInfluences = this.morphTargetInfluences;\r\n\r\n\t\t\t\t\t\tvA.set( 0, 0, 0 );\r\n\t\t\t\t\t\tvB.set( 0, 0, 0 );\r\n\t\t\t\t\t\tvC.set( 0, 0, 0 );\r\n\r\n\t\t\t\t\t\tfor ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) {\r\n\r\n\t\t\t\t\t\t\tvar influence = morphInfluences[ t ];\r\n\r\n\t\t\t\t\t\t\tif ( influence === 0 ) continue;\r\n\r\n\t\t\t\t\t\t\tvar targets = morphTargets[ t ].vertices;\r\n\r\n\t\t\t\t\t\t\tvA.addScaledVector( tempA.subVectors( targets[ face.a ], fvA ), influence );\r\n\t\t\t\t\t\t\tvB.addScaledVector( tempB.subVectors( targets[ face.b ], fvB ), influence );\r\n\t\t\t\t\t\t\tvC.addScaledVector( tempC.subVectors( targets[ face.c ], fvC ), influence );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvA.add( fvA );\r\n\t\t\t\t\t\tvB.add( fvB );\r\n\t\t\t\t\t\tvC.add( fvC );\r\n\r\n\t\t\t\t\t\tfvA = vA;\r\n\t\t\t\t\t\tfvB = vB;\r\n\t\t\t\t\t\tfvC = vC;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tintersection = checkIntersection( this, raycaster, ray, fvA, fvB, fvC, intersectionPoint );\r\n\r\n\t\t\t\t\tif ( intersection ) {\r\n\r\n\t\t\t\t\t\tif ( uvs ) {\r\n\r\n\t\t\t\t\t\t\tvar uvs_f = uvs[ f ];\r\n\t\t\t\t\t\t\tuvA.copy( uvs_f[ 0 ] );\r\n\t\t\t\t\t\t\tuvB.copy( uvs_f[ 1 ] );\r\n\t\t\t\t\t\t\tuvC.copy( uvs_f[ 2 ] );\r\n\r\n\t\t\t\t\t\t\tintersection.uv = uvIntersection( intersectionPoint, fvA, fvB, fvC, uvA, uvB, uvC );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tintersection.face = face;\r\n\t\t\t\t\t\tintersection.faceIndex = f;\r\n\t\t\t\t\t\tintersects.push( intersection );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t}() ),\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/objects/Bone.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author ikerr / http://verold.com\r\n */\r\n\r\nTHREE.Bone = function ( skin ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'Bone';\r\n\r\n\tthis.skin = skin;\r\n\r\n};\r\n\r\nTHREE.Bone.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), {\r\n\r\n\tconstructor: THREE.Bone,\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tTHREE.Object3D.prototype.copy.call( this, source );\r\n\r\n\t\tthis.skin = source.skin;\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/objects/Skeleton.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author michael guerrero / http://realitymeltdown.com\r\n * @author ikerr / http://verold.com\r\n */\r\n\r\nTHREE.Skeleton = function ( bones, boneInverses, useVertexTexture ) {\r\n\r\n\tthis.useVertexTexture = useVertexTexture !== undefined ? useVertexTexture : true;\r\n\r\n\tthis.identityMatrix = new THREE.Matrix4();\r\n\r\n\t// copy the bone array\r\n\r\n\tbones = bones || [];\r\n\r\n\tthis.bones = bones.slice( 0 );\r\n\r\n\t// create a bone texture or an array of floats\r\n\r\n\tif ( this.useVertexTexture ) {\r\n\r\n\t\t// layout (1 matrix = 4 pixels)\r\n\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\r\n\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\r\n\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\r\n\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\r\n\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\r\n\r\n\r\n\t\tvar size = Math.sqrt( this.bones.length * 4 ); // 4 pixels needed for 1 matrix\r\n\t\tsize = THREE.Math.nextPowerOfTwo( Math.ceil( size ) );\r\n\t\tsize = Math.max( size, 4 );\r\n\r\n\t\tthis.boneTextureWidth = size;\r\n\t\tthis.boneTextureHeight = size;\r\n\r\n\t\tthis.boneMatrices = new Float32Array( this.boneTextureWidth * this.boneTextureHeight * 4 ); // 4 floats per RGBA pixel\r\n\t\tthis.boneTexture = new THREE.DataTexture( this.boneMatrices, this.boneTextureWidth, this.boneTextureHeight, THREE.RGBAFormat, THREE.FloatType );\r\n\r\n\t} else {\r\n\r\n\t\tthis.boneMatrices = new Float32Array( 16 * this.bones.length );\r\n\r\n\t}\r\n\r\n\t// use the supplied bone inverses or calculate the inverses\r\n\r\n\tif ( boneInverses === undefined ) {\r\n\r\n\t\tthis.calculateInverses();\r\n\r\n\t} else {\r\n\r\n\t\tif ( this.bones.length === boneInverses.length ) {\r\n\r\n\t\t\tthis.boneInverses = boneInverses.slice( 0 );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconsole.warn( 'THREE.Skeleton bonInverses is the wrong length.' );\r\n\r\n\t\t\tthis.boneInverses = [];\r\n\r\n\t\t\tfor ( var b = 0, bl = this.bones.length; b < bl; b ++ ) {\r\n\r\n\t\t\t\tthis.boneInverses.push( new THREE.Matrix4() );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\nObject.assign( THREE.Skeleton.prototype, {\r\n\r\n\tcalculateInverses: function () {\r\n\r\n\t\tthis.boneInverses = [];\r\n\r\n\t\tfor ( var b = 0, bl = this.bones.length; b < bl; b ++ ) {\r\n\r\n\t\t\tvar inverse = new THREE.Matrix4();\r\n\r\n\t\t\tif ( this.bones[ b ] ) {\r\n\r\n\t\t\t\tinverse.getInverse( this.bones[ b ].matrixWorld );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.boneInverses.push( inverse );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tpose: function () {\r\n\r\n\t\tvar bone;\r\n\r\n\t\t// recover the bind-time world matrices\r\n\r\n\t\tfor ( var b = 0, bl = this.bones.length; b < bl; b ++ ) {\r\n\r\n\t\t\tbone = this.bones[ b ];\r\n\r\n\t\t\tif ( bone ) {\r\n\r\n\t\t\t\tbone.matrixWorld.getInverse( this.boneInverses[ b ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// compute the local matrices, positions, rotations and scales\r\n\r\n\t\tfor ( var b = 0, bl = this.bones.length; b < bl; b ++ ) {\r\n\r\n\t\t\tbone = this.bones[ b ];\r\n\r\n\t\t\tif ( bone ) {\r\n\r\n\t\t\t\tif ( bone.parent ) {\r\n\r\n\t\t\t\t\tbone.matrix.getInverse( bone.parent.matrixWorld );\r\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tupdate: ( function () {\r\n\r\n\t\tvar offsetMatrix = new THREE.Matrix4();\r\n\r\n\t\treturn function update() {\r\n\r\n\t\t\t// flatten bone matrices to array\r\n\r\n\t\t\tfor ( var b = 0, bl = this.bones.length; b < bl; b ++ ) {\r\n\r\n\t\t\t\t// compute the offset between the current and the original transform\r\n\r\n\t\t\t\tvar matrix = this.bones[ b ] ? this.bones[ b ].matrixWorld : this.identityMatrix;\r\n\r\n\t\t\t\toffsetMatrix.multiplyMatrices( matrix, this.boneInverses[ b ] );\r\n\t\t\t\toffsetMatrix.toArray( this.boneMatrices, b * 16 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( this.useVertexTexture ) {\r\n\r\n\t\t\t\tthis.boneTexture.needsUpdate = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t} )(),\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new THREE.Skeleton( this.bones, this.boneInverses, this.useVertexTexture );\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/objects/SkinnedMesh.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author ikerr / http://verold.com\r\n */\r\n\r\nTHREE.SkinnedMesh = function ( geometry, material, useVertexTexture ) {\r\n\r\n\tTHREE.Mesh.call( this, geometry, material );\r\n\r\n\tthis.type = 'SkinnedMesh';\r\n\r\n\tthis.bindMode = \"attached\";\r\n\tthis.bindMatrix = new THREE.Matrix4();\r\n\tthis.bindMatrixInverse = new THREE.Matrix4();\r\n\r\n\t// init bones\r\n\r\n\t// TODO: remove bone creation as there is no reason (other than\r\n\t// convenience) for THREE.SkinnedMesh to do this.\r\n\r\n\tvar bones = [];\r\n\r\n\tif ( this.geometry && this.geometry.bones !== undefined ) {\r\n\r\n\t\tvar bone, gbone;\r\n\r\n\t\tfor ( var b = 0, bl = this.geometry.bones.length; b < bl; ++ b ) {\r\n\r\n\t\t\tgbone = this.geometry.bones[ b ];\r\n\r\n\t\t\tbone = new THREE.Bone( this );\r\n\t\t\tbones.push( bone );\r\n\r\n\t\t\tbone.name = gbone.name;\r\n\t\t\tbone.position.fromArray( gbone.pos );\r\n\t\t\tbone.quaternion.fromArray( gbone.rotq );\r\n\t\t\tif ( gbone.scl !== undefined ) bone.scale.fromArray( gbone.scl );\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var b = 0, bl = this.geometry.bones.length; b < bl; ++ b ) {\r\n\r\n\t\t\tgbone = this.geometry.bones[ b ];\r\n\r\n\t\t\tif ( gbone.parent !== - 1 && gbone.parent !== null &&\r\n\t\t\t\t\tbones[ gbone.parent ] !== undefined ) {\r\n\r\n\t\t\t\tbones[ gbone.parent ].add( bones[ b ] );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis.add( bones[ b ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.normalizeSkinWeights();\r\n\r\n\tthis.updateMatrixWorld( true );\r\n\tthis.bind( new THREE.Skeleton( bones, undefined, useVertexTexture ), this.matrixWorld );\r\n\r\n};\r\n\r\n\r\nTHREE.SkinnedMesh.prototype = Object.assign( Object.create( THREE.Mesh.prototype ), {\r\n\r\n\tconstructor: THREE.SkinnedMesh,\r\n\r\n\tbind: function( skeleton, bindMatrix ) {\r\n\r\n\t\tthis.skeleton = skeleton;\r\n\r\n\t\tif ( bindMatrix === undefined ) {\r\n\r\n\t\t\tthis.updateMatrixWorld( true );\r\n\r\n\t\t\tthis.skeleton.calculateInverses();\r\n\r\n\t\t\tbindMatrix = this.matrixWorld;\r\n\r\n\t\t}\r\n\r\n\t\tthis.bindMatrix.copy( bindMatrix );\r\n\t\tthis.bindMatrixInverse.getInverse( bindMatrix );\r\n\r\n\t},\r\n\r\n\tpose: function () {\r\n\r\n\t\tthis.skeleton.pose();\r\n\r\n\t},\r\n\r\n\tnormalizeSkinWeights: function () {\r\n\r\n\t\tif ( this.geometry instanceof THREE.Geometry ) {\r\n\r\n\t\t\tfor ( var i = 0; i < this.geometry.skinWeights.length; i ++ ) {\r\n\r\n\t\t\t\tvar sw = this.geometry.skinWeights[ i ];\r\n\r\n\t\t\t\tvar scale = 1.0 / sw.lengthManhattan();\r\n\r\n\t\t\t\tif ( scale !== Infinity ) {\r\n\r\n\t\t\t\t\tsw.multiplyScalar( scale );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tsw.set( 1, 0, 0, 0 ); // do something reasonable\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( this.geometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\t\tvar vec = new THREE.Vector4();\r\n\r\n\t\t\tvar skinWeight = this.geometry.attributes.skinWeight;\r\n\r\n\t\t\tfor ( var i = 0; i < skinWeight.count; i ++ ) {\r\n\r\n\t\t\t\tvec.x = skinWeight.getX( i );\r\n\t\t\t\tvec.y = skinWeight.getY( i );\r\n\t\t\t\tvec.z = skinWeight.getZ( i );\r\n\t\t\t\tvec.w = skinWeight.getW( i );\r\n\r\n\t\t\t\tvar scale = 1.0 / vec.lengthManhattan();\r\n\r\n\t\t\t\tif ( scale !== Infinity ) {\r\n\r\n\t\t\t\t\tvec.multiplyScalar( scale );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tvec.set( 1, 0, 0, 0 ); // do something reasonable\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tskinWeight.setXYZW( i, vec.x, vec.y, vec.z, vec.w );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tupdateMatrixWorld: function( force ) {\r\n\r\n\t\tTHREE.Mesh.prototype.updateMatrixWorld.call( this, true );\r\n\r\n\t\tif ( this.bindMode === \"attached\" ) {\r\n\r\n\t\t\tthis.bindMatrixInverse.getInverse( this.matrixWorld );\r\n\r\n\t\t} else if ( this.bindMode === \"detached\" ) {\r\n\r\n\t\t\tthis.bindMatrixInverse.getInverse( this.bindMatrix );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconsole.warn( 'THREE.SkinnedMesh unrecognized bindMode: ' + this.bindMode );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tclone: function() {\r\n\r\n\t\treturn new this.constructor( this.geometry, this.material, this.useVertexTexture ).copy( this );\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/objects/LOD.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.LOD = function () {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'LOD';\r\n\r\n\tObject.defineProperties( this, {\r\n\t\tlevels: {\r\n\t\t\tenumerable: true,\r\n\t\t\tvalue: []\r\n\t\t}\r\n\t} );\r\n\r\n};\r\n\r\n\r\nTHREE.LOD.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), {\r\n\r\n\tconstructor: THREE.LOD,\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tTHREE.Object3D.prototype.copy.call( this, source, false );\r\n\r\n\t\tvar levels = source.levels;\r\n\r\n\t\tfor ( var i = 0, l = levels.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar level = levels[ i ];\r\n\r\n\t\t\tthis.addLevel( level.object.clone(), level.distance );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\taddLevel: function ( object, distance ) {\r\n\r\n\t\tif ( distance === undefined ) distance = 0;\r\n\r\n\t\tdistance = Math.abs( distance );\r\n\r\n\t\tvar levels = this.levels;\r\n\r\n\t\tfor ( var l = 0; l < levels.length; l ++ ) {\r\n\r\n\t\t\tif ( distance < levels[ l ].distance ) {\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tlevels.splice( l, 0, { distance: distance, object: object } );\r\n\r\n\t\tthis.add( object );\r\n\r\n\t},\r\n\r\n\tgetObjectForDistance: function ( distance ) {\r\n\r\n\t\tvar levels = this.levels;\r\n\r\n\t\tfor ( var i = 1, l = levels.length; i < l; i ++ ) {\r\n\r\n\t\t\tif ( distance < levels[ i ].distance ) {\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn levels[ i - 1 ].object;\r\n\r\n\t},\r\n\r\n\traycast: ( function () {\r\n\r\n\t\tvar matrixPosition = new THREE.Vector3();\r\n\r\n\t\treturn function raycast( raycaster, intersects ) {\r\n\r\n\t\t\tmatrixPosition.setFromMatrixPosition( this.matrixWorld );\r\n\r\n\t\t\tvar distance = raycaster.ray.origin.distanceTo( matrixPosition );\r\n\r\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\r\n\r\n\t\t};\r\n\r\n\t}() ),\r\n\r\n\tupdate: function () {\r\n\r\n\t\tvar v1 = new THREE.Vector3();\r\n\t\tvar v2 = new THREE.Vector3();\r\n\r\n\t\treturn function update( camera ) {\r\n\r\n\t\t\tvar levels = this.levels;\r\n\r\n\t\t\tif ( levels.length > 1 ) {\r\n\r\n\t\t\t\tv1.setFromMatrixPosition( camera.matrixWorld );\r\n\t\t\t\tv2.setFromMatrixPosition( this.matrixWorld );\r\n\r\n\t\t\t\tvar distance = v1.distanceTo( v2 );\r\n\r\n\t\t\t\tlevels[ 0 ].object.visible = true;\r\n\r\n\t\t\t\tfor ( var i = 1, l = levels.length; i < l; i ++ ) {\r\n\r\n\t\t\t\t\tif ( distance >= levels[ i ].distance ) {\r\n\r\n\t\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\r\n\t\t\t\t\t\tlevels[ i ].object.visible = true;\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor ( ; i < l; i ++ ) {\r\n\r\n\t\t\t\t\tlevels[ i ].object.visible = false;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\ttoJSON: function ( meta ) {\r\n\r\n\t\tvar data = THREE.Object3D.prototype.toJSON.call( this, meta );\r\n\r\n\t\tdata.object.levels = [];\r\n\r\n\t\tvar levels = this.levels;\r\n\r\n\t\tfor ( var i = 0, l = levels.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar level = levels[ i ];\r\n\r\n\t\t\tdata.object.levels.push( {\r\n\t\t\t\tobject: level.object.uuid,\r\n\t\t\t\tdistance: level.distance\r\n\t\t\t} );\r\n\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/objects/Sprite.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Sprite = function ( material ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'Sprite';\r\n\r\n\tthis.material = ( material !== undefined ) ? material : new THREE.SpriteMaterial();\r\n\r\n};\r\n\r\nTHREE.Sprite.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), {\r\n\r\n\tconstructor: THREE.Sprite,\r\n\r\n\traycast: ( function () {\r\n\r\n\t\tvar matrixPosition = new THREE.Vector3();\r\n\r\n\t\treturn function raycast( raycaster, intersects ) {\r\n\r\n\t\t\tmatrixPosition.setFromMatrixPosition( this.matrixWorld );\r\n\r\n\t\t\tvar distanceSq = raycaster.ray.distanceSqToPoint( matrixPosition );\r\n\t\t\tvar guessSizeSq = this.scale.x * this.scale.y / 4;\r\n\r\n\t\t\tif ( distanceSq > guessSizeSq ) {\r\n\r\n\t\t\t\treturn;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tintersects.push( {\r\n\r\n\t\t\t\tdistance: Math.sqrt( distanceSq ),\r\n\t\t\t\tpoint: this.position,\r\n\t\t\t\tface: null,\r\n\t\t\t\tobject: this\r\n\r\n\t\t\t} );\r\n\r\n\t\t};\r\n\r\n\t}() ),\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor( this.material ).copy( this );\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/objects/LensFlare.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.LensFlare = function ( texture, size, distance, blending, color ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.lensFlares = [];\r\n\r\n\tthis.positionScreen = new THREE.Vector3();\r\n\tthis.customUpdateCallback = undefined;\r\n\r\n\tif ( texture !== undefined ) {\r\n\r\n\t\tthis.add( texture, size, distance, blending, color );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.LensFlare.prototype = Object.assign( Object.create( THREE.Object3D.prototype ), {\r\n\r\n\tconstructor: THREE.LensFlare,\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tTHREE.Object3D.prototype.copy.call( this, source );\r\n\r\n\t\tthis.positionScreen.copy( source.positionScreen );\r\n\t\tthis.customUpdateCallback = source.customUpdateCallback;\r\n\r\n\t\tfor ( var i = 0, l = source.lensFlares.length; i < l; i ++ ) {\r\n\r\n\t\t\tthis.lensFlares.push( source.lensFlares[ i ] );\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tadd: function ( texture, size, distance, blending, color, opacity ) {\r\n\r\n\t\tif ( size === undefined ) size = - 1;\r\n\t\tif ( distance === undefined ) distance = 0;\r\n\t\tif ( opacity === undefined ) opacity = 1;\r\n\t\tif ( color === undefined ) color = new THREE.Color( 0xffffff );\r\n\t\tif ( blending === undefined ) blending = THREE.NormalBlending;\r\n\r\n\t\tdistance = Math.min( distance, Math.max( 0, distance ) );\r\n\r\n\t\tthis.lensFlares.push( {\r\n\t\t\ttexture: texture,\t// THREE.Texture\r\n\t\t\tsize: size, \t\t// size in pixels (-1 = use texture.width)\r\n\t\t\tdistance: distance, \t// distance (0-1) from light source (0=at light source)\r\n\t\t\tx: 0, y: 0, z: 0,\t// screen position (-1 => 1) z = 0 is in front z = 1 is back\r\n\t\t\tscale: 1, \t\t// scale\r\n\t\t\trotation: 0, \t\t// rotation\r\n\t\t\topacity: opacity,\t// opacity\r\n\t\t\tcolor: color,\t\t// color\r\n\t\t\tblending: blending\t// blending\r\n\t\t} );\r\n\r\n\t},\r\n\r\n\t/*\r\n\t * Update lens flares update positions on all flares based on the screen position\r\n\t * Set myLensFlare.customUpdateCallback to alter the flares in your project specific way.\r\n\t */\r\n\r\n\tupdateLensFlares: function () {\r\n\r\n\t\tvar f, fl = this.lensFlares.length;\r\n\t\tvar flare;\r\n\t\tvar vecX = - this.positionScreen.x * 2;\r\n\t\tvar vecY = - this.positionScreen.y * 2;\r\n\r\n\t\tfor ( f = 0; f < fl; f ++ ) {\r\n\r\n\t\t\tflare = this.lensFlares[ f ];\r\n\r\n\t\t\tflare.x = this.positionScreen.x + vecX * flare.distance;\r\n\t\t\tflare.y = this.positionScreen.y + vecY * flare.distance;\r\n\r\n\t\t\tflare.wantedRotation = flare.x * Math.PI * 0.25;\r\n\t\t\tflare.rotation += ( flare.wantedRotation - flare.rotation ) * 0.25;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/scenes/Scene.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.Scene = function () {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.type = 'Scene';\r\n\r\n\tthis.fog = null;\r\n\tthis.overrideMaterial = null;\r\n\r\n\tthis.autoUpdate = true; // checked by the renderer\r\n\r\n};\r\n\r\nTHREE.Scene.prototype = Object.create( THREE.Object3D.prototype );\r\nTHREE.Scene.prototype.constructor = THREE.Scene;\r\n\r\nTHREE.Scene.prototype.copy = function ( source, recursive ) {\r\n\r\n\tTHREE.Object3D.prototype.copy.call( this, source, recursive );\r\n\r\n\tif ( source.fog !== null ) this.fog = source.fog.clone();\r\n\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\r\n\r\n\tthis.autoUpdate = source.autoUpdate;\r\n\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n// File:src/scenes/Fog.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.Fog = function ( color, near, far ) {\r\n\r\n\tthis.name = '';\r\n\r\n\tthis.color = new THREE.Color( color );\r\n\r\n\tthis.near = ( near !== undefined ) ? near : 1;\r\n\tthis.far = ( far !== undefined ) ? far : 1000;\r\n\r\n};\r\n\r\nTHREE.Fog.prototype.clone = function () {\r\n\r\n\treturn new THREE.Fog( this.color.getHex(), this.near, this.far );\r\n\r\n};\r\n\r\n// File:src/scenes/FogExp2.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.FogExp2 = function ( color, density ) {\r\n\r\n\tthis.name = '';\r\n\r\n\tthis.color = new THREE.Color( color );\r\n\tthis.density = ( density !== undefined ) ? density : 0.00025;\r\n\r\n};\r\n\r\nTHREE.FogExp2.prototype.clone = function () {\r\n\r\n\treturn new THREE.FogExp2( this.color.getHex(), this.density );\r\n\r\n};\r\n\r\n// File:src/renderers/shaders/ShaderChunk.js\r\n\r\nTHREE.ShaderChunk = {};\r\n\r\n// File:src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'alphamap_fragment' ] = \"#ifdef USE_ALPHAMAP\\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/alphamap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'alphamap_pars_fragment' ] = \"#ifdef USE_ALPHAMAP\\n\tuniform sampler2D alphaMap;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'alphatest_fragment' ] = \"#ifdef ALPHATEST\\n\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/aomap_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'aomap_fragment' ] = \"#ifdef USE_AOMAP\\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\\n\t#endif\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/aomap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'aomap_pars_fragment' ] = \"#ifdef USE_AOMAP\\n\tuniform sampler2D aoMap;\\n\tuniform float aoMapIntensity;\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/begin_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'begin_vertex' ] = \"\\nvec3 transformed = vec3( position );\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/beginnormal_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'beginnormal_vertex' ] = \"\\nvec3 objectNormal = vec3( normal );\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/bsdfs.glsl\r\n\r\nTHREE.ShaderChunk[ 'bsdfs' ] = \"bool testLightInRange( const in float lightDistance, const in float cutoffDistance ) {\\n\treturn any( bvec2( cutoffDistance == 0.0, lightDistance < cutoffDistance ) );\\n}\\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\t\tif( decayExponent > 0.0 ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\t\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\t\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\t\t\treturn distanceFalloff * maxDistanceCutoffFactor;\\n#else\\n\t\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n#endif\\n\t\t}\\n\t\treturn 1.0;\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\n}\\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\tfloat a2 = pow2( alpha );\\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\treturn 1.0 / ( gl * gv );\\n}\\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\tfloat a2 = pow2( alpha );\\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\tfloat a2 = pow2( alpha );\\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\treturn 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\tfloat alpha = pow2( roughness );\\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\tvec3 F = F_Schlick( specularColor, dotLH );\\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\tfloat D = D_GGX( alpha, dotNH );\\n\treturn F * ( G * D );\\n}\\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\tvec4 r = roughness * c0 + c1;\\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\\n\treturn specularColor * AB.x + AB.y;\\n}\\nfloat G_BlinnPhong_Implicit( ) {\\n\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\treturn 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\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\tvec3 F = F_Schlick( specularColor, dotLH );\\n\tfloat G = G_BlinnPhong_Implicit( );\\n\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\treturn F * ( G * D );\\n}\\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\\n}\\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'bumpmap_pars_fragment' ] = \"#ifdef USE_BUMPMAP\\n\tuniform sampler2D bumpMap;\\n\tuniform float bumpScale;\\n\tvec2 dHdxy_fwd() {\\n\t\tvec2 dSTdx = dFdx( vUv );\\n\t\tvec2 dSTdy = dFdy( vUv );\\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\t\treturn vec2( dBx, dBy );\\n\t}\\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\\n\t\tvec3 vSigmaX = dFdx( surf_pos );\\n\t\tvec3 vSigmaY = dFdy( surf_pos );\\n\t\tvec3 vN = surf_norm;\\n\t\tvec3 R1 = cross( vSigmaY, vN );\\n\t\tvec3 R2 = cross( vN, vSigmaX );\\n\t\tfloat fDet = dot( vSigmaX, R1 );\\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\t}\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'clipping_planes_fragment' ] = \"#if NUM_CLIPPING_PLANES > 0\\n\tfor ( int i = 0; i < NUM_CLIPPING_PLANES; ++ i ) {\\n\t\tvec4 plane = clippingPlanes[ i ];\\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\\n\t}\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/clipping_planes_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'clipping_planes_pars_fragment' ] = \"#if NUM_CLIPPING_PLANES > 0\\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\\n\t\tvarying vec3 vViewPosition;\\n\t#endif\\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/clipping_planes_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'clipping_planes_pars_vertex' ] = \"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\tvarying vec3 vViewPosition;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/clipping_planes_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'clipping_planes_vertex' ] = \"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\tvViewPosition = - mvPosition.xyz;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/color_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'color_fragment' ] = \"#ifdef USE_COLOR\\n\tdiffuseColor.rgb *= vColor;\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'color_pars_fragment' ] = \"#ifdef USE_COLOR\\n\tvarying vec3 vColor;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'color_pars_vertex' ] = \"#ifdef USE_COLOR\\n\tvarying vec3 vColor;\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/color_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'color_vertex' ] = \"#ifdef USE_COLOR\\n\tvColor.xyz = color.xyz;\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/common.glsl\r\n\r\nTHREE.ShaderChunk[ 'common' ] = \"#define PI 3.14159265359\\n#define PI2 6.28318530718\\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\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\treturn fract(sin(sn) * c);\\n}\\nstruct IncidentLight {\\n\tvec3 color;\\n\tvec3 direction;\\n\tbool visible;\\n};\\nstruct ReflectedLight {\\n\tvec3 directDiffuse;\\n\tvec3 directSpecular;\\n\tvec3 indirectDiffuse;\\n\tvec3 indirectSpecular;\\n};\\nstruct GeometricContext {\\n\tvec3 position;\\n\tvec3 normal;\\n\tvec3 viewDir;\\n};\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\\n\treturn - distance * planeNormal + point;\\n}\\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\\n}\\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'cube_uv_reflection_fragment' ] = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n#define cubeUV_textureSize (1024.0)\\nint getFaceFromDirection(vec3 direction) {\\n\tvec3 absDirection = abs(direction);\\n\tint face = -1;\\n\tif( absDirection.x > absDirection.z ) {\\n\t\tif(absDirection.x > absDirection.y )\\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\\n\t\telse\\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\\n\t}\\n\telse {\\n\t\tif(absDirection.z > absDirection.y )\\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\\n\t\telse\\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\\n\t}\\n\treturn 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\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\\n\tfloat dxRoughness = dFdx(roughness);\\n\tfloat dyRoughness = dFdy(roughness);\\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\\n\tfloat mipLevel = 0.5 * log2(d);\\n\treturn 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\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\\n\tbool bRes = mipLevel == 0.0;\\n\tscale = bRes && (scale < a) ? a : scale;\\n\tvec3 r;\\n\tvec2 offset;\\n\tint face = getFaceFromDirection(direction);\\n\tfloat rcpPowScale = 1.0 / powScale;\\n\tif( face == 0) {\\n\t\tr = vec3(direction.x, -direction.z, direction.y);\\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\t}\\n\telse if( face == 1) {\\n\t\tr = vec3(direction.y, direction.x, direction.z);\\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\t}\\n\telse if( face == 2) {\\n\t\tr = vec3(direction.z, direction.x, direction.y);\\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\t}\\n\telse if( face == 3) {\\n\t\tr = vec3(direction.x, direction.z, direction.y);\\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\t}\\n\telse if( face == 4) {\\n\t\tr = vec3(direction.y, direction.x, -direction.z);\\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\t}\\n\telse {\\n\t\tr = vec3(direction.z, -direction.x, direction.y);\\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\t}\\n\tr = normalize(r);\\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\\n\tvec2 base = offset + vec2( texelOffset );\\n\treturn 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\tfloat roughnessVal = roughness* cubeUV_maxLods3;\\n\tfloat r1 = floor(roughnessVal);\\n\tfloat r2 = r1 + 1.0;\\n\tfloat t = fract(roughnessVal);\\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\\n\tfloat s = mipInfo.y;\\n\tfloat level0 = mipInfo.x;\\n\tfloat level1 = level0 + 1.0;\\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\\n\tvec4 result = mix(color10, color20, t);\\n\treturn vec4(result.rgb, 1.0);\\n}\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'defaultnormal_vertex' ] = \"#ifdef FLIP_SIDED\\n\tobjectNormal = -objectNormal;\\n#endif\\nvec3 transformedNormal = normalMatrix * objectNormal;\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'displacementmap_vertex' ] = \"#ifdef USE_DISPLACEMENTMAP\\n\ttransformed += normal * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/displacementmap_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'displacementmap_pars_vertex' ] = \"#ifdef USE_DISPLACEMENTMAP\\n\tuniform sampler2D displacementMap;\\n\tuniform float displacementScale;\\n\tuniform float displacementBias;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'emissivemap_fragment' ] = \"#ifdef USE_EMISSIVEMAP\\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'emissivemap_pars_fragment' ] = \"#ifdef USE_EMISSIVEMAP\\n\tuniform sampler2D emissiveMap;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ '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\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/encodings_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'encodings_fragment' ] = \" gl_FragColor = linearToOutputTexel( gl_FragColor );\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/envmap_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'envmap_fragment' ] = \"#ifdef USE_ENVMAP\\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\t\t#ifdef ENVMAP_MODE_REFLECTION\\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\\n\t\t#else\\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\\n\t\t#endif\\n\t#else\\n\t\tvec3 reflectVec = vReflect;\\n\t#endif\\n\t#ifdef DOUBLE_SIDED\\n\t\tfloat flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\t#else\\n\t\tfloat flipNormal = 1.0;\\n\t#endif\\n\t#ifdef ENVMAP_TYPE_CUBE\\n\t\tvec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\t\tvec2 sampleUV;\\n\t\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\\n\t\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\\n\t#elif defined( ENVMAP_TYPE_SPHERE )\\n\t\tvec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\\n\t#endif\\n\tenvColor = envMapTexelToLinear( envColor );\\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\t#elif defined( ENVMAP_BLENDING_MIX )\\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\t#elif defined( ENVMAP_BLENDING_ADD )\\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\t#endif\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'envmap_pars_fragment' ] = \"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\\n\tuniform float reflectivity;\\n\tuniform float envMapIntenstiy;\\n#endif\\n#ifdef USE_ENVMAP\\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\\n\t\tvarying vec3 vWorldPosition;\\n\t#endif\\n\t#ifdef ENVMAP_TYPE_CUBE\\n\t\tuniform samplerCube envMap;\\n\t#else\\n\t\tuniform sampler2D envMap;\\n\t#endif\\n\tuniform float flipEnvMap;\\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\\n\t\tuniform float refractionRatio;\\n\t#else\\n\t\tvarying vec3 vReflect;\\n\t#endif\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'envmap_pars_vertex' ] = \"#ifdef USE_ENVMAP\\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\t\tvarying vec3 vWorldPosition;\\n\t#else\\n\t\tvarying vec3 vReflect;\\n\t\tuniform float refractionRatio;\\n\t#endif\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/envmap_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'envmap_vertex' ] = \"#ifdef USE_ENVMAP\\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\t\tvWorldPosition = worldPosition.xyz;\\n\t#else\\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\t\t#ifdef ENVMAP_MODE_REFLECTION\\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\\n\t\t#else\\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\t\t#endif\\n\t#endif\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/fog_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'fog_fragment' ] = \"#ifdef USE_FOG\\n\t#ifdef USE_LOGDEPTHBUF_EXT\\n\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\\n\t#else\\n\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\\n\t#endif\\n\t#ifdef FOG_EXP2\\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * depth * depth * LOG2 ) );\\n\t#else\\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\\n\t#endif\\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/fog_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'fog_pars_fragment' ] = \"#ifdef USE_FOG\\n\tuniform vec3 fogColor;\\n\t#ifdef FOG_EXP2\\n\t\tuniform float fogDensity;\\n\t#else\\n\t\tuniform float fogNear;\\n\t\tuniform float fogFar;\\n\t#endif\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'lightmap_fragment' ] = \"#ifdef USE_LIGHTMAP\\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lightmap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'lightmap_pars_fragment' ] = \"#ifdef USE_LIGHTMAP\\n\tuniform sampler2D lightMap;\\n\tuniform float lightMapIntensity;\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ '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\tvLightBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\n#if NUM_POINT_LIGHTS > 0\\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\\n\t\tdotNL = dot( geometry.normal, directLight.direction );\\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\t\t#ifdef DOUBLE_SIDED\\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\t\t#endif\\n\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\\n\t\tdotNL = dot( geometry.normal, directLight.direction );\\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\t\t#ifdef DOUBLE_SIDED\\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\t\t#endif\\n\t}\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\\n\t\tdotNL = dot( geometry.normal, directLight.direction );\\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\t\t#ifdef DOUBLE_SIDED\\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\t\t#endif\\n\t}\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\t\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\t\t#ifdef DOUBLE_SIDED\\n\t\t\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\t\t#endif\\n\t}\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lights_pars.glsl\r\n\r\nTHREE.ShaderChunk[ 'lights_pars' ] = \"uniform vec3 ambientLightColor;\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\tvec3 irradiance = ambientLightColor;\\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\t\tirradiance *= PI;\\n\t#endif\\n\treturn irradiance;\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\tstruct DirectionalLight {\\n\t\tvec3 direction;\\n\t\tvec3 color;\\n\t\tint shadow;\\n\t\tfloat shadowBias;\\n\t\tfloat shadowRadius;\\n\t\tvec2 shadowMapSize;\\n\t};\\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\t\tdirectLight.color = directionalLight.color;\\n\t\tdirectLight.direction = directionalLight.direction;\\n\t\tdirectLight.visible = true;\\n\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\tstruct PointLight {\\n\t\tvec3 position;\\n\t\tvec3 color;\\n\t\tfloat distance;\\n\t\tfloat decay;\\n\t\tint shadow;\\n\t\tfloat shadowBias;\\n\t\tfloat shadowRadius;\\n\t\tvec2 shadowMapSize;\\n\t};\\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\t\tvec3 lVector = pointLight.position - geometry.position;\\n\t\tdirectLight.direction = normalize( lVector );\\n\t\tfloat lightDistance = length( lVector );\\n\t\tif ( testLightInRange( lightDistance, pointLight.distance ) ) {\\n\t\t\tdirectLight.color = pointLight.color;\\n\t\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\t\t\tdirectLight.visible = true;\\n\t\t} else {\\n\t\t\tdirectLight.color = vec3( 0.0 );\\n\t\t\tdirectLight.visible = false;\\n\t\t}\\n\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\tstruct SpotLight {\\n\t\tvec3 position;\\n\t\tvec3 direction;\\n\t\tvec3 color;\\n\t\tfloat distance;\\n\t\tfloat decay;\\n\t\tfloat coneCos;\\n\t\tfloat penumbraCos;\\n\t\tint shadow;\\n\t\tfloat shadowBias;\\n\t\tfloat shadowRadius;\\n\t\tvec2 shadowMapSize;\\n\t};\\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\t\tvec3 lVector = spotLight.position - geometry.position;\\n\t\tdirectLight.direction = normalize( lVector );\\n\t\tfloat lightDistance = length( lVector );\\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\\n\t\tif ( all( bvec2( angleCos > spotLight.coneCos, testLightInRange( lightDistance, spotLight.distance ) ) ) ) {\\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\t\t\tdirectLight.color = spotLight.color;\\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\\n\t\t\tdirectLight.visible = true;\\n\t\t} else {\\n\t\t\tdirectLight.color = vec3( 0.0 );\\n\t\t\tdirectLight.visible = false;\\n\t\t}\\n\t}\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\tstruct HemisphereLight {\\n\t\tvec3 direction;\\n\t\tvec3 skyColor;\\n\t\tvec3 groundColor;\\n\t};\\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\t\t\tirradiance *= PI;\\n\t\t#endif\\n\t\treturn irradiance;\\n\t}\\n#endif\\n#if defined( USE_ENVMAP ) && defined( PHYSICAL )\\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\t\t#ifdef DOUBLE_SIDED\\n\t\t\tfloat flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\t\t#else\\n\t\t\tfloat flipNormal = 1.0;\\n\t\t#endif\\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\t\t#ifdef ENVMAP_TYPE_CUBE\\n\t\t\tvec3 queryVec = flipNormal * vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\t\t\t#ifdef TEXTURE_LOD_EXT\\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\\n\t\t\t#else\\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\\n\t\t\t#endif\\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\t\t\tvec3 queryVec = flipNormal * vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\t\t\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\\n\t\t#else\\n\t\t\tvec4 envMapColor = vec4( 0.0 );\\n\t\t#endif\\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\\n\t}\\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\t}\\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\\n\t\t#ifdef ENVMAP_MODE_REFLECTION\\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\\n\t\t#else\\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\\n\t\t#endif\\n\t\t#ifdef DOUBLE_SIDED\\n\t\t\tfloat flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\t\t#else\\n\t\t\tfloat flipNormal = 1.0;\\n\t\t#endif\\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\\n\t\t#ifdef ENVMAP_TYPE_CUBE\\n\t\t\tvec3 queryReflectVec = flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\t\t\t#ifdef TEXTURE_LOD_EXT\\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\\n\t\t\t#else\\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\\n\t\t\t#endif\\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\t\t\tvec3 queryReflectVec = flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\t\t\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\t\t\tvec2 sampleUV;\\n\t\t\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\\n\t\t\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\\n\t\t\t#ifdef TEXTURE_LOD_EXT\\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\\n\t\t\t#else\\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\\n\t\t\t#endif\\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\\n\t\t\tvec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\\n\t\t\t#ifdef TEXTURE_LOD_EXT\\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\\n\t\t\t#else\\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\\n\t\t\t#endif\\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\t\t#endif\\n\t\treturn envMapColor.rgb * envMapIntensity;\\n\t}\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'lights_phong_fragment' ] = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'lights_phong_pars_fragment' ] = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\tvarying vec3 vNormal;\\n#endif\\nstruct BlinnPhongMaterial {\\n\tvec3\tdiffuseColor;\\n\tvec3\tspecularColor;\\n\tfloat\tspecularShininess;\\n\tfloat\tspecularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\tvec3 irradiance = dotNL * directLight.color;\\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\t\tirradiance *= PI;\\n\t#endif\\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\treflectedLight.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\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\t(0)\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'lights_physical_fragment' ] = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\\n#ifdef STANDARD\\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\\n#else\\n\tmaterial.specularColor = mix( vec3( 0.16 * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'lights_physical_pars_fragment' ] = \"struct PhysicalMaterial {\\n\tvec3\tdiffuseColor;\\n\tfloat\tspecularRoughness;\\n\tvec3\tspecularColor;\\n\t#ifndef STANDARD\\n\t#endif\\n};\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\tvec3 irradiance = dotNL * directLight.color;\\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\t\tirradiance *= PI;\\n\t#endif\\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\treflectedLight.indirectSpecular += radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\\n}\\n#define RE_Direct\t\t\t\tRE_Direct_Physical\\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/lights_template.glsl\r\n\r\nTHREE.ShaderChunk[ '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\tPointLight pointLight;\\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\t\tpointLight = pointLights[ i ];\\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\t\t#ifdef USE_SHADOWMAP\\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\\n\t\t#endif\\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\t}\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\tSpotLight spotLight;\\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\t\tspotLight = spotLights[ i ];\\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\t\t#ifdef USE_SHADOWMAP\\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\t\t#endif\\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\t}\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\tDirectionalLight directionalLight;\\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\t\tdirectionalLight = directionalLights[ i ];\\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\t\t#ifdef USE_SHADOWMAP\\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\t\t#endif\\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\t}\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\t#ifdef USE_LIGHTMAP\\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\t\t\tlightMapIrradiance *= PI;\\n\t\t#endif\\n\t\tirradiance += lightMapIrradiance;\\n\t#endif\\n\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\t\t}\\n\t#endif\\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\t \tirradiance += getLightProbeIndirectIrradiance( geometry, 8 );\\n\t#endif\\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\tvec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\\n\tRE_IndirectSpecular( radiance, geometry, material, reflectedLight );\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'logdepthbuf_fragment' ] = \"#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\\n\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'logdepthbuf_pars_fragment' ] = \"#ifdef USE_LOGDEPTHBUF\\n\tuniform float logDepthBufFC;\\n\t#ifdef USE_LOGDEPTHBUF_EXT\\n\t\tvarying float vFragDepth;\\n\t#endif\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'logdepthbuf_pars_vertex' ] = \"#ifdef USE_LOGDEPTHBUF\\n\t#ifdef USE_LOGDEPTHBUF_EXT\\n\t\tvarying float vFragDepth;\\n\t#endif\\n\tuniform float logDepthBufFC;\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'logdepthbuf_vertex' ] = \"#ifdef USE_LOGDEPTHBUF\\n\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\\n\t#ifdef USE_LOGDEPTHBUF_EXT\\n\t\tvFragDepth = 1.0 + gl_Position.w;\\n\t#else\\n\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\\n\t#endif\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/map_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'map_fragment' ] = \"#ifdef USE_MAP\\n\tvec4 texelColor = texture2D( map, vUv );\\n\ttexelColor = mapTexelToLinear( texelColor );\\n\tdiffuseColor *= texelColor;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'map_pars_fragment' ] = \"#ifdef USE_MAP\\n\tuniform sampler2D map;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'map_particle_fragment' ] = \"#ifdef USE_MAP\\n\tvec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'map_particle_pars_fragment' ] = \"#ifdef USE_MAP\\n\tuniform vec4 offsetRepeat;\\n\tuniform sampler2D map;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'metalnessmap_fragment' ] = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\tmetalnessFactor *= texelMetalness.r;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/metalnessmap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'metalnessmap_pars_fragment' ] = \"#ifdef USE_METALNESSMAP\\n\tuniform sampler2D metalnessMap;\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'morphnormal_vertex' ] = \"#ifdef USE_MORPHNORMALS\\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'morphtarget_pars_vertex' ] = \"#ifdef USE_MORPHTARGETS\\n\t#ifndef USE_MORPHNORMALS\\n\tuniform float morphTargetInfluences[ 8 ];\\n\t#else\\n\tuniform float morphTargetInfluences[ 4 ];\\n\t#endif\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'morphtarget_vertex' ] = \"#ifdef USE_MORPHTARGETS\\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\\n\t#ifndef USE_MORPHNORMALS\\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\\n\t#endif\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/normal_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'normal_fragment' ] = \"#ifdef FLAT_SHADED\\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\tvec3 normal = normalize( vNormal );\\n\t#ifdef DOUBLE_SIDED\\n\t\tnormal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\\n\t#endif\\n#endif\\n#ifdef USE_NORMALMAP\\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\\n#elif defined( USE_BUMPMAP )\\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'normalmap_pars_fragment' ] = \"#ifdef USE_NORMALMAP\\n\tuniform sampler2D normalMap;\\n\tuniform vec2 normalScale;\\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\\n\t\tvec2 st0 = dFdx( vUv.st );\\n\t\tvec2 st1 = dFdy( vUv.st );\\n\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\\n\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\\n\t\tvec3 N = normalize( surf_norm );\\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\t\tmapN.xy = normalScale * mapN.xy;\\n\t\tmat3 tsn = mat3( S, T, N );\\n\t\treturn normalize( tsn * mapN );\\n\t}\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/packing.glsl\r\n\r\nTHREE.ShaderChunk[ '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\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\treturn dot( v, UnpackFactors );\\n}\\nfloat viewZToOrthoDepth( const in float viewZ, const in float near, const in float far ) {\\n return ( viewZ + near ) / ( near - far );\\n}\\nfloat OrthoDepthToViewZ( 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\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'premultiplied_alpha_fragment' ] = \"#ifdef PREMULTIPLIED_ALPHA\\n\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/project_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'project_vertex' ] = \"#ifdef USE_SKINNING\\n\tvec4 mvPosition = modelViewMatrix * skinned;\\n#else\\n\tvec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\\n#endif\\ngl_Position = projectionMatrix * mvPosition;\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'roughnessmap_fragment' ] = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\troughnessFactor *= texelRoughness.r;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/roughnessmap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'roughnessmap_pars_fragment' ] = \"#ifdef USE_ROUGHNESSMAP\\n\tuniform sampler2D roughnessMap;\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'shadowmap_pars_fragment' ] = \"#ifdef USE_SHADOWMAP\\n\t#if NUM_DIR_LIGHTS > 0\\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\\n\t#endif\\n\t#if NUM_SPOT_LIGHTS > 0\\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\\n\t#endif\\n\t#if NUM_POINT_LIGHTS > 0\\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\\n\t#endif\\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\t}\\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\\n\t\tvec2 f = fract( uv * size + 0.5 );\\n\t\tfloat a = mix( lb, lt, f.y );\\n\t\tfloat b = mix( rb, rt, f.y );\\n\t\tfloat c = mix( a, b, f.x );\\n\t\treturn c;\\n\t}\\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\t\tshadowCoord.xyz /= shadowCoord.w;\\n\t\tshadowCoord.z += shadowBias;\\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\t\tbool inFrustum = all( inFrustumVec );\\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\t\tbool frustumTest = all( frustumTestVec );\\n\t\tif ( frustumTest ) {\\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\\n\t\t\treturn (\\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\t\t\t) * ( 1.0 / 9.0 );\\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\\n\t\t\treturn (\\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\t\t\t) * ( 1.0 / 9.0 );\\n\t\t#else\\n\t\t\treturn texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\t\t#endif\\n\t\t}\\n\t\treturn 1.0;\\n\t}\\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\t\tvec3 absV = abs( v );\\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\t\tabsV *= scaleToCube;\\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\t\tvec2 planar = v.xy;\\n\t\tfloat almostATexel = 1.5 * texelSizeY;\\n\t\tfloat almostOne = 1.0 - almostATexel;\\n\t\tif ( absV.z >= almostOne ) {\\n\t\t\tif ( v.z > 0.0 )\\n\t\t\t\tplanar.x = 4.0 - v.x;\\n\t\t} else if ( absV.x >= almostOne ) {\\n\t\t\tfloat signX = sign( v.x );\\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\\n\t\t} else if ( absV.y >= almostOne ) {\\n\t\t\tfloat signY = sign( v.y );\\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\t\t\tplanar.y = v.z * signY - 2.0;\\n\t\t}\\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\t}\\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\t\tvec3 lightToPosition = shadowCoord.xyz;\\n\t\tvec3 bd3D = normalize( lightToPosition );\\n\t\tfloat dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\t\t\treturn (\\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\t\t\t) * ( 1.0 / 9.0 );\\n\t\t#else\\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\t\t#endif\\n\t}\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'shadowmap_pars_vertex' ] = \"#ifdef USE_SHADOWMAP\\n\t#if NUM_DIR_LIGHTS > 0\\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\\n\t#endif\\n\t#if NUM_SPOT_LIGHTS > 0\\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\\n\t#endif\\n\t#if NUM_POINT_LIGHTS > 0\\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\\n\t#endif\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'shadowmap_vertex' ] = \"#ifdef USE_SHADOWMAP\\n\t#if NUM_DIR_LIGHTS > 0\\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\\n\t}\\n\t#endif\\n\t#if NUM_SPOT_LIGHTS > 0\\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\\n\t}\\n\t#endif\\n\t#if NUM_POINT_LIGHTS > 0\\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\\n\t}\\n\t#endif\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'shadowmask_pars_fragment' ] = \"float getShadowMask() {\\n\tfloat shadow = 1.0;\\n\t#ifdef USE_SHADOWMAP\\n\t#if NUM_DIR_LIGHTS > 0\\n\tDirectionalLight directionalLight;\\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\t\tdirectionalLight = directionalLights[ i ];\\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\t}\\n\t#endif\\n\t#if NUM_SPOT_LIGHTS > 0\\n\tSpotLight spotLight;\\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\t\tspotLight = spotLights[ i ];\\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\t}\\n\t#endif\\n\t#if NUM_POINT_LIGHTS > 0\\n\tPointLight pointLight;\\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\t\tpointLight = pointLights[ i ];\\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\\n\t}\\n\t#endif\\n\t#endif\\n\treturn shadow;\\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/skinbase_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'skinbase_vertex' ] = \"#ifdef USE_SKINNING\\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'skinning_pars_vertex' ] = \"#ifdef USE_SKINNING\\n\tuniform mat4 bindMatrix;\\n\tuniform mat4 bindMatrixInverse;\\n\t#ifdef BONE_TEXTURE\\n\t\tuniform sampler2D boneTexture;\\n\t\tuniform int boneTextureWidth;\\n\t\tuniform int boneTextureHeight;\\n\t\tmat4 getBoneMatrix( const in float i ) {\\n\t\t\tfloat j = i * 4.0;\\n\t\t\tfloat x = mod( j, float( boneTextureWidth ) );\\n\t\t\tfloat y = floor( j / float( boneTextureWidth ) );\\n\t\t\tfloat dx = 1.0 / float( boneTextureWidth );\\n\t\t\tfloat dy = 1.0 / float( boneTextureHeight );\\n\t\t\ty = dy * ( y + 0.5 );\\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\t\t\treturn bone;\\n\t\t}\\n\t#else\\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\t\tmat4 getBoneMatrix( const in float i ) {\\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\\n\t\t\treturn bone;\\n\t\t}\\n\t#endif\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/skinning_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'skinning_vertex' ] = \"#ifdef USE_SKINNING\\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\tvec4 skinned = vec4( 0.0 );\\n\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\tskinned = bindMatrixInverse * skinned;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/skinnormal_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'skinnormal_vertex' ] = \"#ifdef USE_SKINNING\\n\tmat4 skinMatrix = mat4( 0.0 );\\n\tskinMatrix += skinWeight.x * boneMatX;\\n\tskinMatrix += skinWeight.y * boneMatY;\\n\tskinMatrix += skinWeight.z * boneMatZ;\\n\tskinMatrix += skinWeight.w * boneMatW;\\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'specularmap_fragment' ] = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\tspecularStrength = texelSpecular.r;\\n#else\\n\tspecularStrength = 1.0;\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/specularmap_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'specularmap_pars_fragment' ] = \"#ifdef USE_SPECULARMAP\\n\tuniform sampler2D specularMap;\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/tonemapping_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'tonemapping_fragment' ] = \"#if defined( TONE_MAPPING )\\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ '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\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/uv2_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ 'uv2_pars_fragment' ] = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\tvarying vec2 vUv2;\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/uv2_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'uv2_pars_vertex' ] = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\tattribute vec2 uv2;\\n\tvarying vec2 vUv2;\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/uv2_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'uv2_vertex' ] = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\tvUv2 = uv2;\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl\r\n\r\nTHREE.ShaderChunk[ '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\tvarying vec2 vUv;\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ '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\tvarying vec2 vUv;\\n\tuniform vec4 offsetRepeat;\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/uv_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ '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\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\\n#endif\";\r\n\r\n// File:src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl\r\n\r\nTHREE.ShaderChunk[ 'worldpos_vertex' ] = \"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( PHYSICAL ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\\n\t#ifdef USE_SKINNING\\n\t\tvec4 worldPosition = modelMatrix * skinned;\\n\t#else\\n\t\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\\n\t#endif\\n#endif\\n\";\r\n\r\n// File:src/renderers/shaders/UniformsUtils.js\r\n\r\n/**\r\n * Uniform Utilities\r\n */\r\n\r\nTHREE.UniformsUtils = {\r\n\r\n\tmerge: function ( uniforms ) {\r\n\r\n\t\tvar merged = {};\r\n\r\n\t\tfor ( var u = 0; u < uniforms.length; u ++ ) {\r\n\r\n\t\t\tvar tmp = this.clone( uniforms[ u ] );\r\n\r\n\t\t\tfor ( var p in tmp ) {\r\n\r\n\t\t\t\tmerged[ p ] = tmp[ p ];\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn merged;\r\n\r\n\t},\r\n\r\n\tclone: function ( uniforms_src ) {\r\n\r\n\t\tvar uniforms_dst = {};\r\n\r\n\t\tfor ( var u in uniforms_src ) {\r\n\r\n\t\t\tuniforms_dst[ u ] = {};\r\n\r\n\t\t\tfor ( var p in uniforms_src[ u ] ) {\r\n\r\n\t\t\t\tvar parameter_src = uniforms_src[ u ][ p ];\r\n\r\n\t\t\t\tif ( parameter_src instanceof THREE.Color ||\r\n\t\t\t\t\t parameter_src instanceof THREE.Vector2 ||\r\n\t\t\t\t\t parameter_src instanceof THREE.Vector3 ||\r\n\t\t\t\t\t parameter_src instanceof THREE.Vector4 ||\r\n\t\t\t\t\t parameter_src instanceof THREE.Matrix3 ||\r\n\t\t\t\t\t parameter_src instanceof THREE.Matrix4 ||\r\n\t\t\t\t\t parameter_src instanceof THREE.Texture ) {\r\n\r\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.clone();\r\n\r\n\t\t\t\t} else if ( Array.isArray( parameter_src ) ) {\r\n\r\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.slice();\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn uniforms_dst;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/renderers/shaders/UniformsLib.js\r\n\r\n/**\r\n * Uniforms library for shared webgl shaders\r\n */\r\n\r\nTHREE.UniformsLib = {\r\n\r\n\tcommon: {\r\n\r\n\t\t\"diffuse\": { type: \"c\", value: new THREE.Color( 0xeeeeee ) },\r\n\t\t\"opacity\": { type: \"1f\", value: 1.0 },\r\n\r\n\t\t\"map\": { type: \"t\", value: null },\r\n\t\t\"offsetRepeat\": { type: \"v4\", value: new THREE.Vector4( 0, 0, 1, 1 ) },\r\n\r\n\t\t\"specularMap\": { type: \"t\", value: null },\r\n\t\t\"alphaMap\": { type: \"t\", value: null },\r\n\r\n\t\t\"envMap\": { type: \"t\", value: null },\r\n\t\t\"flipEnvMap\": { type: \"1f\", value: - 1 },\r\n\t\t\"reflectivity\": { type: \"1f\", value: 1.0 },\r\n\t\t\"refractionRatio\": { type: \"1f\", value: 0.98 }\r\n\r\n\t},\r\n\r\n\taomap: {\r\n\r\n\t\t\"aoMap\": { type: \"t\", value: null },\r\n\t\t\"aoMapIntensity\": { type: \"1f\", value: 1 }\r\n\r\n\t},\r\n\r\n\tlightmap: {\r\n\r\n\t\t\"lightMap\": { type: \"t\", value: null },\r\n\t\t\"lightMapIntensity\": { type: \"1f\", value: 1 }\r\n\r\n\t},\r\n\r\n\temissivemap: {\r\n\r\n\t\t\"emissiveMap\": { type: \"t\", value: null }\r\n\r\n\t},\r\n\r\n\tbumpmap: {\r\n\r\n\t\t\"bumpMap\": { type: \"t\", value: null },\r\n\t\t\"bumpScale\": { type: \"1f\", value: 1 }\r\n\r\n\t},\r\n\r\n\tnormalmap: {\r\n\r\n\t\t\"normalMap\": { type: \"t\", value: null },\r\n\t\t\"normalScale\": { type: \"v2\", value: new THREE.Vector2( 1, 1 ) }\r\n\r\n\t},\r\n\r\n\tdisplacementmap: {\r\n\r\n\t\t\"displacementMap\": { type: \"t\", value: null },\r\n\t\t\"displacementScale\": { type: \"1f\", value: 1 },\r\n\t\t\"displacementBias\": { type: \"1f\", value: 0 }\r\n\r\n\t},\r\n\r\n\troughnessmap: {\r\n\r\n\t\t\"roughnessMap\": { type: \"t\", value: null }\r\n\r\n\t},\r\n\r\n\tmetalnessmap: {\r\n\r\n\t\t\"metalnessMap\": { type: \"t\", value: null }\r\n\r\n\t},\r\n\r\n\tfog: {\r\n\r\n\t\t\"fogDensity\": { type: \"1f\", value: 0.00025 },\r\n\t\t\"fogNear\": { type: \"1f\", value: 1 },\r\n\t\t\"fogFar\": { type: \"1f\", value: 2000 },\r\n\t\t\"fogColor\": { type: \"c\", value: new THREE.Color( 0xffffff ) }\r\n\r\n\t},\r\n\r\n\tlights: {\r\n\r\n\t\t\"ambientLightColor\": { type: \"3fv\", value: [] },\r\n\r\n\t\t\"directionalLights\": { type: \"sa\", value: [], properties: {\r\n\t\t\t\"direction\": { type: \"v3\" },\r\n\t\t\t\"color\": { type: \"c\" },\r\n\r\n\t\t\t\"shadow\": { type: \"1i\" },\r\n\t\t\t\"shadowBias\": { type: \"1f\" },\r\n\t\t\t\"shadowRadius\": { type: \"1f\" },\r\n\t\t\t\"shadowMapSize\": { type: \"v2\" }\r\n\t\t} },\r\n\r\n\t\t\"directionalShadowMap\": { type: \"tv\", value: [] },\r\n\t\t\"directionalShadowMatrix\": { type: \"m4v\", value: [] },\r\n\r\n\t\t\"spotLights\": { type: \"sa\", value: [], properties: {\r\n\t\t\t\"color\": { type: \"c\" },\r\n\t\t\t\"position\": { type: \"v3\" },\r\n\t\t\t\"direction\": { type: \"v3\" },\r\n\t\t\t\"distance\": { type: \"1f\" },\r\n\t\t\t\"coneCos\": { type: \"1f\" },\r\n\t\t\t\"penumbraCos\": { type: \"1f\" },\r\n\t\t\t\"decay\": { type: \"1f\" },\r\n\r\n\t\t\t\"shadow\": { type: \"1i\" },\r\n\t\t\t\"shadowBias\": { type: \"1f\" },\r\n\t\t\t\"shadowRadius\": { type: \"1f\" },\r\n\t\t\t\"shadowMapSize\": { type: \"v2\" }\r\n\t\t} },\r\n\r\n\t\t\"spotShadowMap\": { type: \"tv\", value: [] },\r\n\t\t\"spotShadowMatrix\": { type: \"m4v\", value: [] },\r\n\r\n\t\t\"pointLights\": { type: \"sa\", value: [], properties: {\r\n\t\t\t\"color\": { type: \"c\" },\r\n\t\t\t\"position\": { type: \"v3\" },\r\n\t\t\t\"decay\": { type: \"1f\" },\r\n\t\t\t\"distance\": { type: \"1f\" },\r\n\r\n\t\t\t\"shadow\": { type: \"1i\" },\r\n\t\t\t\"shadowBias\": { type: \"1f\" },\r\n\t\t\t\"shadowRadius\": { type: \"1f\" },\r\n\t\t\t\"shadowMapSize\": { type: \"v2\" }\r\n\t\t} },\r\n\r\n\t\t\"pointShadowMap\": { type: \"tv\", value: [] },\r\n\t\t\"pointShadowMatrix\": { type: \"m4v\", value: [] },\r\n\r\n\t\t\"hemisphereLights\": { type: \"sa\", value: [], properties: {\r\n\t\t\t\"direction\": { type: \"v3\" },\r\n\t\t\t\"skyColor\": { type: \"c\" },\r\n\t\t\t\"groundColor\": { type: \"c\" }\r\n\t\t} }\r\n\r\n\t},\r\n\r\n\tpoints: {\r\n\r\n\t\t\"diffuse\": { type: \"c\", value: new THREE.Color( 0xeeeeee ) },\r\n\t\t\"opacity\": { type: \"1f\", value: 1.0 },\r\n\t\t\"size\": { type: \"1f\", value: 1.0 },\r\n\t\t\"scale\": { type: \"1f\", value: 1.0 },\r\n\t\t\"map\": { type: \"t\", value: null },\r\n\t\t\"offsetRepeat\": { type: \"v4\", value: new THREE.Vector4( 0, 0, 1, 1 ) }\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/renderers/shaders/ShaderLib/cube_frag.glsl\r\n\r\nTHREE.ShaderChunk[ 'cube_frag' ] = \"uniform samplerCube tCube;\\nuniform float tFlip;\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/cube_vert.glsl\r\n\r\nTHREE.ShaderChunk[ 'cube_vert' ] = \"varying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\nvoid main() {\\n\tvWorldPosition = transformDirection( position, modelMatrix );\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/depth_frag.glsl\r\n\r\nTHREE.ShaderChunk[ 'depth_frag' ] = \"#if DEPTH_PACKING == 3200\\n\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\tvec4 diffuseColor = vec4( 1.0 );\\n\t#if DEPTH_PACKING == 3200\\n\t\tdiffuseColor.a = opacity;\\n\t#endif\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#if DEPTH_PACKING == 3200\\n\t\tgl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );\\n\t#elif DEPTH_PACKING == 3201\\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\\n\t#endif\\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/depth_vert.glsl\r\n\r\nTHREE.ShaderChunk[ 'depth_vert' ] = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/distanceRGBA_frag.glsl\r\n\r\nTHREE.ShaderChunk[ 'distanceRGBA_frag' ] = \"uniform vec3 lightPos;\\nvarying vec4 vWorldPosition;\\n#include \\n#include \\n#include \\nvoid main () {\\n\t#include \\n\tgl_FragColor = packDepthToRGBA( length( vWorldPosition.xyz - lightPos.xyz ) / 1000.0 );\\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/distanceRGBA_vert.glsl\r\n\r\nTHREE.ShaderChunk[ 'distanceRGBA_vert' ] = \"varying vec4 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\tvWorldPosition = worldPosition;\\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/equirect_frag.glsl\r\n\r\nTHREE.ShaderChunk[ 'equirect_frag' ] = \"uniform sampler2D tEquirect;\\nuniform float tFlip;\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\tvec3 direction = normalize( vWorldPosition );\\n\tvec2 sampleUV;\\n\tsampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );\\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/equirect_vert.glsl\r\n\r\nTHREE.ShaderChunk[ 'equirect_vert' ] = \"varying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\nvoid main() {\\n\tvWorldPosition = transformDirection( position, modelMatrix );\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/linedashed_frag.glsl\r\n\r\nTHREE.ShaderChunk[ 'linedashed_frag' ] = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\t\tdiscard;\\n\t}\\n\tvec3 outgoingLight = vec3( 0.0 );\\n\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\t#include \\n\t#include \\n\toutgoingLight = diffuseColor.rgb;\\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/linedashed_vert.glsl\r\n\r\nTHREE.ShaderChunk[ 'linedashed_vert' ] = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\tvLineDistance = scale * lineDistance;\\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\\n\tgl_Position = projectionMatrix * mvPosition;\\n\t#include \\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/meshbasic_frag.glsl\r\n\r\nTHREE.ShaderChunk[ 'meshbasic_frag' ] = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\tReflectedLight reflectedLight;\\n\treflectedLight.directDiffuse = vec3( 0.0 );\\n\treflectedLight.directSpecular = vec3( 0.0 );\\n\treflectedLight.indirectDiffuse = diffuseColor.rgb;\\n\treflectedLight.indirectSpecular = vec3( 0.0 );\\n\t#include \\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\t#include \\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/meshbasic_vert.glsl\r\n\r\nTHREE.ShaderChunk[ 'meshbasic_vert' ] = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#ifdef USE_ENVMAP\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#endif\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/meshlambert_frag.glsl\r\n\r\nTHREE.ShaderChunk[ 'meshlambert_frag' ] = \"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\tvarying vec3 vLightBack;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\tvec3 totalEmissiveRadiance = emissive;\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\\n\t#include \\n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\t#ifdef DOUBLE_SIDED\\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\t#else\\n\t\treflectedLight.directDiffuse = vLightFront;\\n\t#endif\\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\t#include \\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\t#include \\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/meshlambert_vert.glsl\r\n\r\nTHREE.ShaderChunk[ 'meshlambert_vert' ] = \"#define LAMBERT\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\tvarying vec3 vLightBack;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/meshphong_frag.glsl\r\n\r\nTHREE.ShaderChunk[ 'meshphong_frag' ] = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\tvec3 totalEmissiveRadiance = emissive;\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\t#include \\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/meshphong_vert.glsl\r\n\r\nTHREE.ShaderChunk[ 'meshphong_vert' ] = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n#ifndef FLAT_SHADED\\n\tvNormal = normalize( transformedNormal );\\n#endif\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\tvViewPosition = - mvPosition.xyz;\\n\t#include \\n\t#include \\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/meshphysical_frag.glsl\r\n\r\nTHREE.ShaderChunk[ 'meshphysical_frag' ] = \"#define PHYSICAL\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\nuniform float envMapIntensity;\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\tvec3 totalEmissiveRadiance = emissive;\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/meshphysical_vert.glsl\r\n\r\nTHREE.ShaderChunk[ 'meshphysical_vert' ] = \"#define PHYSICAL\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n#ifndef FLAT_SHADED\\n\tvNormal = normalize( transformedNormal );\\n#endif\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\tvViewPosition = - mvPosition.xyz;\\n\t#include \\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/normal_frag.glsl\r\n\r\nTHREE.ShaderChunk[ 'normal_frag' ] = \"uniform float opacity;\\nvarying vec3 vNormal;\\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\tgl_FragColor = vec4( packNormalToRGB( vNormal ), opacity );\\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/normal_vert.glsl\r\n\r\nTHREE.ShaderChunk[ 'normal_vert' ] = \"varying vec3 vNormal;\\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\tvNormal = normalize( normalMatrix * normal );\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/points_frag.glsl\r\n\r\nTHREE.ShaderChunk[ 'points_frag' ] = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\tvec3 outgoingLight = vec3( 0.0 );\\n\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n\toutgoingLight = diffuseColor.rgb;\\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/points_vert.glsl\r\n\r\nTHREE.ShaderChunk[ 'points_vert' ] = \"uniform float size;\\nuniform float scale;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\t#include \\n\t#include \\n\t#include \\n\t#ifdef USE_SIZEATTENUATION\\n\t\tgl_PointSize = size * ( scale / - mvPosition.z );\\n\t#else\\n\t\tgl_PointSize = size;\\n\t#endif\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/shadow_frag.glsl\r\n\r\nTHREE.ShaderChunk[ 'shadow_frag' ] = \"uniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\tgl_FragColor = vec4( 0.0, 0.0, 0.0, opacity * ( 1.0 - getShadowMask() ) );\\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib/shadow_vert.glsl\r\n\r\nTHREE.ShaderChunk[ 'shadow_vert' ] = \"#include \\nvoid main() {\\n\t#include \\n\t#include \\n\t#include \\n\t#include \\n}\\n\";\r\n\r\n// File:src/renderers/shaders/ShaderLib.js\r\n\r\n/**\r\n * Webgl Shader Library for three.js\r\n *\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author mikael emtinger / http://gomo.se/\r\n */\r\n\r\n\r\nTHREE.ShaderLib = {\r\n\r\n\t'basic': {\r\n\r\n\t\tuniforms: THREE.UniformsUtils.merge( [\r\n\r\n\t\t\tTHREE.UniformsLib[ 'common' ],\r\n\t\t\tTHREE.UniformsLib[ 'aomap' ],\r\n\t\t\tTHREE.UniformsLib[ 'fog' ]\r\n\r\n\t\t] ),\r\n\r\n\t\tvertexShader: THREE.ShaderChunk[ 'meshbasic_vert' ],\r\n\t\tfragmentShader: THREE.ShaderChunk[ 'meshbasic_frag' ]\r\n\r\n\t},\r\n\r\n\t'lambert': {\r\n\r\n\t\tuniforms: THREE.UniformsUtils.merge( [\r\n\r\n\t\t\tTHREE.UniformsLib[ 'common' ],\r\n\t\t\tTHREE.UniformsLib[ 'aomap' ],\r\n\t\t\tTHREE.UniformsLib[ 'lightmap' ],\r\n\t\t\tTHREE.UniformsLib[ 'emissivemap' ],\r\n\t\t\tTHREE.UniformsLib[ 'fog' ],\r\n\t\t\tTHREE.UniformsLib[ 'lights' ],\r\n\r\n\t\t\t{\r\n\t\t\t\t\"emissive\" : { type: \"c\", value: new THREE.Color( 0x000000 ) }\r\n\t\t\t}\r\n\r\n\t\t] ),\r\n\r\n\t\tvertexShader: THREE.ShaderChunk[ 'meshlambert_vert' ],\r\n\t\tfragmentShader: THREE.ShaderChunk[ 'meshlambert_frag' ]\r\n\r\n\t},\r\n\r\n\t'phong': {\r\n\r\n\t\tuniforms: THREE.UniformsUtils.merge( [\r\n\r\n\t\t\tTHREE.UniformsLib[ 'common' ],\r\n\t\t\tTHREE.UniformsLib[ 'aomap' ],\r\n\t\t\tTHREE.UniformsLib[ 'lightmap' ],\r\n\t\t\tTHREE.UniformsLib[ 'emissivemap' ],\r\n\t\t\tTHREE.UniformsLib[ 'bumpmap' ],\r\n\t\t\tTHREE.UniformsLib[ 'normalmap' ],\r\n\t\t\tTHREE.UniformsLib[ 'displacementmap' ],\r\n\t\t\tTHREE.UniformsLib[ 'fog' ],\r\n\t\t\tTHREE.UniformsLib[ 'lights' ],\r\n\r\n\t\t\t{\r\n\t\t\t\t\"emissive\" : { type: \"c\", value: new THREE.Color( 0x000000 ) },\r\n\t\t\t\t\"specular\" : { type: \"c\", value: new THREE.Color( 0x111111 ) },\r\n\t\t\t\t\"shininess\": { type: \"1f\", value: 30 }\r\n\t\t\t}\r\n\r\n\t\t] ),\r\n\r\n\t\tvertexShader: THREE.ShaderChunk[ 'meshphong_vert' ],\r\n\t\tfragmentShader: THREE.ShaderChunk[ 'meshphong_frag' ]\r\n\r\n\t},\r\n\r\n\t'standard': {\r\n\r\n\t\tuniforms: THREE.UniformsUtils.merge( [\r\n\r\n\t\t\tTHREE.UniformsLib[ 'common' ],\r\n\t\t\tTHREE.UniformsLib[ 'aomap' ],\r\n\t\t\tTHREE.UniformsLib[ 'lightmap' ],\r\n\t\t\tTHREE.UniformsLib[ 'emissivemap' ],\r\n\t\t\tTHREE.UniformsLib[ 'bumpmap' ],\r\n\t\t\tTHREE.UniformsLib[ 'normalmap' ],\r\n\t\t\tTHREE.UniformsLib[ 'displacementmap' ],\r\n\t\t\tTHREE.UniformsLib[ 'roughnessmap' ],\r\n\t\t\tTHREE.UniformsLib[ 'metalnessmap' ],\r\n\t\t\tTHREE.UniformsLib[ 'fog' ],\r\n\t\t\tTHREE.UniformsLib[ 'lights' ],\r\n\r\n\t\t\t{\r\n\t\t\t\t\"emissive\" : { type: \"c\", value: new THREE.Color( 0x000000 ) },\r\n\t\t\t\t\"roughness\": { type: \"1f\", value: 0.5 },\r\n\t\t\t\t\"metalness\": { type: \"1f\", value: 0 },\r\n\t\t\t\t\"envMapIntensity\" : { type: \"1f\", value: 1 } // temporary\r\n\t\t\t}\r\n\r\n\t\t] ),\r\n\r\n\t\tvertexShader: THREE.ShaderChunk[ 'meshphysical_vert' ],\r\n\t\tfragmentShader: THREE.ShaderChunk[ 'meshphysical_frag' ]\r\n\r\n\t},\r\n\r\n\t'points': {\r\n\r\n\t\tuniforms: THREE.UniformsUtils.merge( [\r\n\r\n\t\t\tTHREE.UniformsLib[ 'points' ],\r\n\t\t\tTHREE.UniformsLib[ 'fog' ]\r\n\r\n\t\t] ),\r\n\r\n\t\tvertexShader: THREE.ShaderChunk[ 'points_vert' ],\r\n\t\tfragmentShader: THREE.ShaderChunk[ 'points_frag' ]\r\n\r\n\t},\r\n\r\n\t'dashed': {\r\n\r\n\t\tuniforms: THREE.UniformsUtils.merge( [\r\n\r\n\t\t\tTHREE.UniformsLib[ 'common' ],\r\n\t\t\tTHREE.UniformsLib[ 'fog' ],\r\n\r\n\t\t\t{\r\n\t\t\t\t\"scale\" : { type: \"1f\", value: 1 },\r\n\t\t\t\t\"dashSize\" : { type: \"1f\", value: 1 },\r\n\t\t\t\t\"totalSize\": { type: \"1f\", value: 2 }\r\n\t\t\t}\r\n\r\n\t\t] ),\r\n\r\n\t\tvertexShader: THREE.ShaderChunk[ 'linedashed_vert' ],\r\n\t\tfragmentShader: THREE.ShaderChunk[ 'linedashed_frag' ]\r\n\r\n\t},\r\n\r\n\t'depth': {\r\n\r\n\t\tuniforms: THREE.UniformsUtils.merge( [\r\n\r\n\t\t\tTHREE.UniformsLib[ 'common' ],\r\n\t\t\tTHREE.UniformsLib[ 'displacementmap' ]\r\n\r\n\t\t] ),\r\n\r\n\t\tvertexShader: THREE.ShaderChunk[ 'depth_vert' ],\r\n\t\tfragmentShader: THREE.ShaderChunk[ 'depth_frag' ]\r\n\r\n\t},\r\n\r\n\t'normal': {\r\n\r\n\t\tuniforms: {\r\n\r\n\t\t\t\"opacity\" : { type: \"1f\", value: 1.0 }\r\n\r\n\t\t},\r\n\r\n\t\tvertexShader: THREE.ShaderChunk[ 'normal_vert' ],\r\n\t\tfragmentShader: THREE.ShaderChunk[ 'normal_frag' ]\r\n\r\n\t},\r\n\r\n\t/* -------------------------------------------------------------------------\r\n\t//\tCube map shader\r\n\t ------------------------------------------------------------------------- */\r\n\r\n\t'cube': {\r\n\r\n\t\tuniforms: {\r\n\t\t\t\"tCube\": { type: \"t\", value: null },\r\n\t\t\t\"tFlip\": { type: \"1f\", value: - 1 }\r\n\t\t},\r\n\r\n\t\tvertexShader: THREE.ShaderChunk[ 'cube_vert' ],\r\n\t\tfragmentShader: THREE.ShaderChunk[ 'cube_frag' ]\r\n\r\n\t},\r\n\r\n\t/* -------------------------------------------------------------------------\r\n\t//\tCube map shader\r\n\t ------------------------------------------------------------------------- */\r\n\r\n\t'equirect': {\r\n\r\n\t\tuniforms: {\r\n\t\t\t\"tEquirect\": { type: \"t\", value: null },\r\n\t\t\t\"tFlip\": { type: \"1f\", value: - 1 }\r\n\t\t},\r\n\r\n\t\tvertexShader: THREE.ShaderChunk[ 'equirect_vert' ],\r\n\t\tfragmentShader: THREE.ShaderChunk[ 'equirect_frag' ]\r\n\r\n\t},\r\n\r\n\t'distanceRGBA': {\r\n\r\n\t\tuniforms: {\r\n\r\n\t\t\t\"lightPos\": { type: \"v3\", value: new THREE.Vector3() }\r\n\r\n\t\t},\r\n\r\n\t\tvertexShader: THREE.ShaderChunk[ 'distanceRGBA_vert' ],\r\n\t\tfragmentShader: THREE.ShaderChunk[ 'distanceRGBA_frag' ]\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.ShaderLib[ 'physical' ] = {\r\n\r\n\tuniforms: THREE.UniformsUtils.merge( [\r\n\r\n\t\tTHREE.ShaderLib[ 'standard' ].uniforms,\r\n\r\n\t\t{\r\n\t\t\t// future\r\n\t\t}\r\n\r\n\t] ),\r\n\r\n\tvertexShader: THREE.ShaderChunk[ 'meshphysical_vert' ],\r\n\tfragmentShader: THREE.ShaderChunk[ 'meshphysical_frag' ]\r\n\r\n};\r\n\r\n\r\n// File:src/renderers/WebGLRenderer.js\r\n\r\n/**\r\n * @author supereggbert / http://www.paulbrunt.co.uk/\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author szimek / https://github.com/szimek/\r\n * @author tschw\r\n */\r\n\r\nTHREE.WebGLRenderer = function ( parameters ) {\r\n\r\n\tconsole.log( 'THREE.WebGLRenderer', THREE.REVISION );\r\n\r\n\tparameters = parameters || {};\r\n\r\n\tvar _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElement( 'canvas' ),\r\n\t_context = parameters.context !== undefined ? parameters.context : null,\r\n\r\n\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false,\r\n\t_depth = parameters.depth !== undefined ? parameters.depth : true,\r\n\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\r\n\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\r\n\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\r\n\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false;\r\n\r\n\tvar lights = [];\r\n\r\n\tvar opaqueObjects = [];\r\n\tvar opaqueObjectsLastIndex = - 1;\r\n\tvar transparentObjects = [];\r\n\tvar transparentObjectsLastIndex = - 1;\r\n\r\n\tvar morphInfluences = new Float32Array( 8 );\r\n\r\n\tvar sprites = [];\r\n\tvar lensFlares = [];\r\n\r\n\t// public properties\r\n\r\n\tthis.domElement = _canvas;\r\n\tthis.context = null;\r\n\r\n\t// clearing\r\n\r\n\tthis.autoClear = true;\r\n\tthis.autoClearColor = true;\r\n\tthis.autoClearDepth = true;\r\n\tthis.autoClearStencil = true;\r\n\r\n\t// scene graph\r\n\r\n\tthis.sortObjects = true;\r\n\r\n\t// user-defined clipping\r\n\r\n\tthis.clippingPlanes = [];\r\n\tthis.localClippingEnabled = false;\r\n\r\n\t// physically based shading\r\n\r\n\tthis.gammaFactor = 2.0;\t// for backwards compatibility\r\n\tthis.gammaInput = false;\r\n\tthis.gammaOutput = false;\r\n\r\n\t// physical lights\r\n\r\n\tthis.physicallyCorrectLights = false;\r\n\r\n\t// tone mapping\r\n\r\n\tthis.toneMapping = THREE.LinearToneMapping;\r\n\tthis.toneMappingExposure = 1.0;\r\n\tthis.toneMappingWhitePoint = 1.0;\r\n\r\n\t// morphs\r\n\r\n\tthis.maxMorphTargets = 8;\r\n\tthis.maxMorphNormals = 4;\r\n\r\n\t// flags\r\n\r\n\tthis.autoScaleCubemaps = true;\r\n\r\n\t// internal properties\r\n\r\n\tvar _this = this,\r\n\r\n\t// internal state cache\r\n\r\n\t_currentProgram = null,\r\n\t_currentRenderTarget = null,\r\n\t_currentFramebuffer = null,\r\n\t_currentMaterialId = - 1,\r\n\t_currentGeometryProgram = '',\r\n\t_currentCamera = null,\r\n\r\n\t_currentScissor = new THREE.Vector4(),\r\n\t_currentScissorTest = null,\r\n\r\n\t_currentViewport = new THREE.Vector4(),\r\n\r\n\t//\r\n\r\n\t_usedTextureUnits = 0,\r\n\r\n\t//\r\n\r\n\t_clearColor = new THREE.Color( 0x000000 ),\r\n\t_clearAlpha = 0,\r\n\r\n\t_width = _canvas.width,\r\n\t_height = _canvas.height,\r\n\r\n\t_pixelRatio = 1,\r\n\r\n\t_scissor = new THREE.Vector4( 0, 0, _width, _height ),\r\n\t_scissorTest = false,\r\n\r\n\t_viewport = new THREE.Vector4( 0, 0, _width, _height ),\r\n\r\n\t// frustum\r\n\r\n\t_frustum = new THREE.Frustum(),\r\n\r\n\t// clipping\r\n\r\n\t_clipping = new THREE.WebGLClipping(),\r\n\t_clippingEnabled = false,\r\n\t_localClippingEnabled = false,\r\n\r\n\t_sphere = new THREE.Sphere(),\r\n\r\n\t// camera matrices cache\r\n\r\n\t_projScreenMatrix = new THREE.Matrix4(),\r\n\r\n\t_vector3 = new THREE.Vector3(),\r\n\r\n\t// light arrays cache\r\n\r\n\t_lights = {\r\n\r\n\t\thash: '',\r\n\r\n\t\tambient: [ 0, 0, 0 ],\r\n\t\tdirectional: [],\r\n\t\tdirectionalShadowMap: [],\r\n\t\tdirectionalShadowMatrix: [],\r\n\t\tspot: [],\r\n\t\tspotShadowMap: [],\r\n\t\tspotShadowMatrix: [],\r\n\t\tpoint: [],\r\n\t\tpointShadowMap: [],\r\n\t\tpointShadowMatrix: [],\r\n\t\themi: [],\r\n\r\n\t\tshadows: []\r\n\r\n\t},\r\n\r\n\t// info\r\n\r\n\t_infoMemory = {\r\n\r\n\t\tgeometries: 0,\r\n\t\ttextures: 0\r\n\r\n\t},\r\n\r\n\t_infoRender = {\r\n\r\n\t\tcalls: 0,\r\n\t\tvertices: 0,\r\n\t\tfaces: 0,\r\n\t\tpoints: 0\r\n\r\n\t};\r\n\r\n\tthis.info = {\r\n\r\n\t\trender: _infoRender,\r\n\t\tmemory: _infoMemory,\r\n\t\tprograms: null\r\n\r\n\t};\r\n\r\n\r\n\t// initialize\r\n\r\n\tvar _gl;\r\n\r\n\ttry {\r\n\r\n\t\tvar attributes = {\r\n\t\t\talpha: _alpha,\r\n\t\t\tdepth: _depth,\r\n\t\t\tstencil: _stencil,\r\n\t\t\tantialias: _antialias,\r\n\t\t\tpremultipliedAlpha: _premultipliedAlpha,\r\n\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer\r\n\t\t};\r\n\r\n\t\t_gl = _context || _canvas.getContext( 'webgl', attributes ) || _canvas.getContext( 'experimental-webgl', attributes );\r\n\r\n\t\tif ( _gl === null ) {\r\n\r\n\t\t\tif ( _canvas.getContext( 'webgl' ) !== null ) {\r\n\r\n\t\t\t\tthrow 'Error creating WebGL context with your selected attributes.';\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthrow 'Error creating WebGL context.';\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// Some experimental-webgl implementations do not have getShaderPrecisionFormat\r\n\r\n\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\r\n\r\n\t\t\t_gl.getShaderPrecisionFormat = function () {\r\n\r\n\t\t\t\treturn { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\r\n\r\n\t\t\t};\r\n\r\n\t\t}\r\n\r\n\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\r\n\r\n\t} catch ( error ) {\r\n\r\n\t\tconsole.error( 'THREE.WebGLRenderer: ' + error );\r\n\r\n\t}\r\n\r\n\tvar _isWebGL2 = (typeof WebGL2RenderingContext !== 'undefined' && _gl instanceof WebGL2RenderingContext);\r\n\tvar extensions = new THREE.WebGLExtensions( _gl );\r\n\r\n\textensions.get( 'WEBGL_depth_texture' );\r\n\textensions.get( 'OES_texture_float' );\r\n\textensions.get( 'OES_texture_float_linear' );\r\n\textensions.get( 'OES_texture_half_float' );\r\n\textensions.get( 'OES_texture_half_float_linear' );\r\n\textensions.get( 'OES_standard_derivatives' );\r\n\textensions.get( 'ANGLE_instanced_arrays' );\r\n\r\n\tif ( extensions.get( 'OES_element_index_uint' ) ) {\r\n\r\n\t\tTHREE.BufferGeometry.MaxIndex = 4294967296;\r\n\r\n\t}\r\n\r\n\tvar capabilities = new THREE.WebGLCapabilities( _gl, extensions, parameters );\r\n\r\n\tvar state = new THREE.WebGLState( _gl, extensions, paramThreeToGL );\r\n\tvar properties = new THREE.WebGLProperties();\r\n\tvar objects = new THREE.WebGLObjects( _gl, properties, this.info );\r\n\tvar programCache = new THREE.WebGLPrograms( this, capabilities );\r\n\tvar lightCache = new THREE.WebGLLights();\r\n\r\n\tthis.info.programs = programCache.programs;\r\n\r\n\tvar bufferRenderer = new THREE.WebGLBufferRenderer( _gl, extensions, _infoRender );\r\n\tvar indexedBufferRenderer = new THREE.WebGLIndexedBufferRenderer( _gl, extensions, _infoRender );\r\n\r\n\t//\r\n\r\n\tfunction getTargetPixelRatio() {\r\n\r\n\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\r\n\r\n\t}\r\n\r\n\tfunction glClearColor( r, g, b, a ) {\r\n\r\n\t\tif ( _premultipliedAlpha === true ) {\r\n\r\n\t\t\tr *= a; g *= a; b *= a;\r\n\r\n\t\t}\r\n\r\n\t\tstate.clearColor( r, g, b, a );\r\n\r\n\t}\r\n\r\n\tfunction setDefaultGLState() {\r\n\r\n\t\tstate.init();\r\n\r\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );\r\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );\r\n\r\n\t\tglClearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha );\r\n\r\n\t}\r\n\r\n\tfunction resetGLState() {\r\n\r\n\t\t_currentProgram = null;\r\n\t\t_currentCamera = null;\r\n\r\n\t\t_currentGeometryProgram = '';\r\n\t\t_currentMaterialId = - 1;\r\n\r\n\t\tstate.reset();\r\n\r\n\t}\r\n\r\n\tsetDefaultGLState();\r\n\r\n\tthis.context = _gl;\r\n\tthis.capabilities = capabilities;\r\n\tthis.extensions = extensions;\r\n\tthis.properties = properties;\r\n\tthis.state = state;\r\n\r\n\t// shadow map\r\n\r\n\tvar shadowMap = new THREE.WebGLShadowMap( this, _lights, objects );\r\n\r\n\tthis.shadowMap = shadowMap;\r\n\r\n\r\n\t// Plugins\r\n\r\n\tvar spritePlugin = new THREE.SpritePlugin( this, sprites );\r\n\tvar lensFlarePlugin = new THREE.LensFlarePlugin( this, lensFlares );\r\n\r\n\t// API\r\n\r\n\tthis.getContext = function () {\r\n\r\n\t\treturn _gl;\r\n\r\n\t};\r\n\r\n\tthis.getContextAttributes = function () {\r\n\r\n\t\treturn _gl.getContextAttributes();\r\n\r\n\t};\r\n\r\n\tthis.forceContextLoss = function () {\r\n\r\n\t\textensions.get( 'WEBGL_lose_context' ).loseContext();\r\n\r\n\t};\r\n\r\n\tthis.getMaxAnisotropy = ( function () {\r\n\r\n\t\tvar value;\r\n\r\n\t\treturn function getMaxAnisotropy() {\r\n\r\n\t\t\tif ( value !== undefined ) return value;\r\n\r\n\t\t\tvar extension = extensions.get( 'EXT_texture_filter_anisotropic' );\r\n\r\n\t\t\tif ( extension !== null ) {\r\n\r\n\t\t\t\tvalue = _gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tvalue = 0;\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn value;\r\n\r\n\t\t};\r\n\r\n\t} )();\r\n\r\n\tthis.getPrecision = function () {\r\n\r\n\t\treturn capabilities.precision;\r\n\r\n\t};\r\n\r\n\tthis.getPixelRatio = function () {\r\n\r\n\t\treturn _pixelRatio;\r\n\r\n\t};\r\n\r\n\tthis.setPixelRatio = function ( value ) {\r\n\r\n\t\tif ( value === undefined ) return;\r\n\r\n\t\t_pixelRatio = value;\r\n\r\n\t\tthis.setSize( _viewport.z, _viewport.w, false );\r\n\r\n\t};\r\n\r\n\tthis.getSize = function () {\r\n\r\n\t\treturn {\r\n\t\t\twidth: _width,\r\n\t\t\theight: _height\r\n\t\t};\r\n\r\n\t};\r\n\r\n\tthis.setSize = function ( width, height, updateStyle ) {\r\n\r\n\t\t_width = width;\r\n\t\t_height = height;\r\n\r\n\t\t_canvas.width = width * _pixelRatio;\r\n\t\t_canvas.height = height * _pixelRatio;\r\n\r\n\t\tif ( updateStyle !== false ) {\r\n\r\n\t\t\t_canvas.style.width = width + 'px';\r\n\t\t\t_canvas.style.height = height + 'px';\r\n\r\n\t\t}\r\n\r\n\t\tthis.setViewport( 0, 0, width, height );\r\n\r\n\t};\r\n\r\n\tthis.setViewport = function ( x, y, width, height ) {\r\n\r\n\t\tstate.viewport( _viewport.set( x, y, width, height ) );\r\n\r\n\t};\r\n\r\n\tthis.setScissor = function ( x, y, width, height ) {\r\n\r\n\t\tstate.scissor( _scissor.set( x, y, width, height ) );\r\n\r\n\t};\r\n\r\n\tthis.setScissorTest = function ( boolean ) {\r\n\r\n\t\tstate.setScissorTest( _scissorTest = boolean );\r\n\r\n\t};\r\n\r\n\t// Clearing\r\n\r\n\tthis.getClearColor = function () {\r\n\r\n\t\treturn _clearColor;\r\n\r\n\t};\r\n\r\n\tthis.setClearColor = function ( color, alpha ) {\r\n\r\n\t\t_clearColor.set( color );\r\n\r\n\t\t_clearAlpha = alpha !== undefined ? alpha : 1;\r\n\r\n\t\tglClearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha );\r\n\r\n\t};\r\n\r\n\tthis.getClearAlpha = function () {\r\n\r\n\t\treturn _clearAlpha;\r\n\r\n\t};\r\n\r\n\tthis.setClearAlpha = function ( alpha ) {\r\n\r\n\t\t_clearAlpha = alpha;\r\n\r\n\t\tglClearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha );\r\n\r\n\t};\r\n\r\n\tthis.clear = function ( color, depth, stencil ) {\r\n\r\n\t\tvar bits = 0;\r\n\r\n\t\tif ( color === undefined || color ) bits |= _gl.COLOR_BUFFER_BIT;\r\n\t\tif ( depth === undefined || depth ) bits |= _gl.DEPTH_BUFFER_BIT;\r\n\t\tif ( stencil === undefined || stencil ) bits |= _gl.STENCIL_BUFFER_BIT;\r\n\r\n\t\t_gl.clear( bits );\r\n\r\n\t};\r\n\r\n\tthis.clearColor = function () {\r\n\r\n\t\tthis.clear( true, false, false );\r\n\r\n\t};\r\n\r\n\tthis.clearDepth = function () {\r\n\r\n\t\tthis.clear( false, true, false );\r\n\r\n\t};\r\n\r\n\tthis.clearStencil = function () {\r\n\r\n\t\tthis.clear( false, false, true );\r\n\r\n\t};\r\n\r\n\tthis.clearTarget = function ( renderTarget, color, depth, stencil ) {\r\n\r\n\t\tthis.setRenderTarget( renderTarget );\r\n\t\tthis.clear( color, depth, stencil );\r\n\r\n\t};\r\n\r\n\t// Reset\r\n\r\n\tthis.resetGLState = resetGLState;\r\n\r\n\tthis.dispose = function() {\r\n\r\n\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\r\n\r\n\t};\r\n\r\n\t// Events\r\n\r\n\tfunction onContextLost( event ) {\r\n\r\n\t\tevent.preventDefault();\r\n\r\n\t\tresetGLState();\r\n\t\tsetDefaultGLState();\r\n\r\n\t\tproperties.clear();\r\n\r\n\t}\r\n\r\n\tfunction onTextureDispose( event ) {\r\n\r\n\t\tvar texture = event.target;\r\n\r\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\r\n\r\n\t\tdeallocateTexture( texture );\r\n\r\n\t\t_infoMemory.textures --;\r\n\r\n\r\n\t}\r\n\r\n\tfunction onRenderTargetDispose( event ) {\r\n\r\n\t\tvar renderTarget = event.target;\r\n\r\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\r\n\r\n\t\tdeallocateRenderTarget( renderTarget );\r\n\r\n\t\t_infoMemory.textures --;\r\n\r\n\t}\r\n\r\n\tfunction onMaterialDispose( event ) {\r\n\r\n\t\tvar material = event.target;\r\n\r\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\r\n\r\n\t\tdeallocateMaterial( material );\r\n\r\n\t}\r\n\r\n\t// Buffer deallocation\r\n\r\n\tfunction deallocateTexture( texture ) {\r\n\r\n\t\tvar textureProperties = properties.get( texture );\r\n\r\n\t\tif ( texture.image && textureProperties.__image__webglTextureCube ) {\r\n\r\n\t\t\t// cube texture\r\n\r\n\t\t\t_gl.deleteTexture( textureProperties.__image__webglTextureCube );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// 2D texture\r\n\r\n\t\t\tif ( textureProperties.__webglInit === undefined ) return;\r\n\r\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\r\n\r\n\t\t}\r\n\r\n\t\t// remove all webgl properties\r\n\t\tproperties.delete( texture );\r\n\r\n\t}\r\n\r\n\tfunction deallocateRenderTarget( renderTarget ) {\r\n\r\n\t\tvar renderTargetProperties = properties.get( renderTarget );\r\n\t\tvar textureProperties = properties.get( renderTarget.texture );\r\n\r\n\t\tif ( ! renderTarget ) return;\r\n\r\n\t\tif ( textureProperties.__webglTexture !== undefined ) {\r\n\r\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\r\n\r\n\t\t}\r\n\r\n\t\tif ( renderTarget.depthTexture ) {\r\n\r\n\t\t\trenderTarget.depthTexture.dispose();\r\n\r\n\t\t}\r\n\r\n\t\tif ( renderTarget instanceof THREE.WebGLRenderTargetCube ) {\r\n\r\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\r\n\r\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\r\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\r\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\r\n\r\n\t\t}\r\n\r\n\t\tproperties.delete( renderTarget.texture );\r\n\t\tproperties.delete( renderTarget );\r\n\r\n\t}\r\n\r\n\tfunction deallocateMaterial( material ) {\r\n\r\n\t\treleaseMaterialProgramReference( material );\r\n\r\n\t\tproperties.delete( material );\r\n\r\n\t}\r\n\r\n\r\n\tfunction releaseMaterialProgramReference( material ) {\r\n\r\n\t\tvar programInfo = properties.get( material ).program;\r\n\r\n\t\tmaterial.program = undefined;\r\n\r\n\t\tif ( programInfo !== undefined ) {\r\n\r\n\t\t\tprogramCache.releaseProgram( programInfo );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Buffer rendering\r\n\r\n\tthis.renderBufferImmediate = function ( object, program, material ) {\r\n\r\n\t\tstate.initAttributes();\r\n\r\n\t\tvar buffers = properties.get( object );\r\n\r\n\t\tif ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer();\r\n\t\tif ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer();\r\n\t\tif ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer();\r\n\t\tif ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer();\r\n\r\n\t\tvar attributes = program.getAttributes();\r\n\r\n\t\tif ( object.hasPositions ) {\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.position );\r\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW );\r\n\r\n\t\t\tstate.enableAttribute( attributes.position );\r\n\t\t\t_gl.vertexAttribPointer( attributes.position, 3, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t}\r\n\r\n\t\tif ( object.hasNormals ) {\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.normal );\r\n\r\n\t\t\tif ( material.type !== 'MeshPhongMaterial' && material.type !== 'MeshStandardMaterial' && material.type !== 'MeshPhysicalMaterial' && material.shading === THREE.FlatShading ) {\r\n\r\n\t\t\t\tfor ( var i = 0, l = object.count * 3; i < l; i += 9 ) {\r\n\r\n\t\t\t\t\tvar array = object.normalArray;\r\n\r\n\t\t\t\t\tvar nx = ( array[ i + 0 ] + array[ i + 3 ] + array[ i + 6 ] ) / 3;\r\n\t\t\t\t\tvar ny = ( array[ i + 1 ] + array[ i + 4 ] + array[ i + 7 ] ) / 3;\r\n\t\t\t\t\tvar nz = ( array[ i + 2 ] + array[ i + 5 ] + array[ i + 8 ] ) / 3;\r\n\r\n\t\t\t\t\tarray[ i + 0 ] = nx;\r\n\t\t\t\t\tarray[ i + 1 ] = ny;\r\n\t\t\t\t\tarray[ i + 2 ] = nz;\r\n\r\n\t\t\t\t\tarray[ i + 3 ] = nx;\r\n\t\t\t\t\tarray[ i + 4 ] = ny;\r\n\t\t\t\t\tarray[ i + 5 ] = nz;\r\n\r\n\t\t\t\t\tarray[ i + 6 ] = nx;\r\n\t\t\t\t\tarray[ i + 7 ] = ny;\r\n\t\t\t\t\tarray[ i + 8 ] = nz;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.normalArray, _gl.DYNAMIC_DRAW );\r\n\r\n\t\t\tstate.enableAttribute( attributes.normal );\r\n\r\n\t\t\t_gl.vertexAttribPointer( attributes.normal, 3, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t}\r\n\r\n\t\tif ( object.hasUvs && material.map ) {\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.uv );\r\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW );\r\n\r\n\t\t\tstate.enableAttribute( attributes.uv );\r\n\r\n\t\t\t_gl.vertexAttribPointer( attributes.uv, 2, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t}\r\n\r\n\t\tif ( object.hasColors && material.vertexColors !== THREE.NoColors ) {\r\n\r\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.color );\r\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW );\r\n\r\n\t\t\tstate.enableAttribute( attributes.color );\r\n\r\n\t\t\t_gl.vertexAttribPointer( attributes.color, 3, _gl.FLOAT, false, 0, 0 );\r\n\r\n\t\t}\r\n\r\n\t\tstate.disableUnusedAttributes();\r\n\r\n\t\t_gl.drawArrays( _gl.TRIANGLES, 0, object.count );\r\n\r\n\t\tobject.count = 0;\r\n\r\n\t};\r\n\r\n\tthis.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) {\r\n\r\n\t\tsetMaterial( material );\r\n\r\n\t\tvar program = setProgram( camera, fog, material, object );\r\n\r\n\t\tvar updateBuffers = false;\r\n\t\tvar geometryProgram = geometry.id + '_' + program.id + '_' + material.wireframe;\r\n\r\n\t\tif ( geometryProgram !== _currentGeometryProgram ) {\r\n\r\n\t\t\t_currentGeometryProgram = geometryProgram;\r\n\t\t\tupdateBuffers = true;\r\n\r\n\t\t}\r\n\r\n\t\t// morph targets\r\n\r\n\t\tvar morphTargetInfluences = object.morphTargetInfluences;\r\n\r\n\t\tif ( morphTargetInfluences !== undefined ) {\r\n\r\n\t\t\tvar activeInfluences = [];\r\n\r\n\t\t\tfor ( var i = 0, l = morphTargetInfluences.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tvar influence = morphTargetInfluences[ i ];\r\n\t\t\t\tactiveInfluences.push( [ influence, i ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tactiveInfluences.sort( absNumericalSort );\r\n\r\n\t\t\tif ( activeInfluences.length > 8 ) {\r\n\r\n\t\t\t\tactiveInfluences.length = 8;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar morphAttributes = geometry.morphAttributes;\r\n\r\n\t\t\tfor ( var i = 0, l = activeInfluences.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tvar influence = activeInfluences[ i ];\r\n\t\t\t\tmorphInfluences[ i ] = influence[ 0 ];\r\n\r\n\t\t\t\tif ( influence[ 0 ] !== 0 ) {\r\n\r\n\t\t\t\t\tvar index = influence[ 1 ];\r\n\r\n\t\t\t\t\tif ( material.morphTargets === true && morphAttributes.position ) geometry.addAttribute( 'morphTarget' + i, morphAttributes.position[ index ] );\r\n\t\t\t\t\tif ( material.morphNormals === true && morphAttributes.normal ) geometry.addAttribute( 'morphNormal' + i, morphAttributes.normal[ index ] );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tif ( material.morphTargets === true ) geometry.removeAttribute( 'morphTarget' + i );\r\n\t\t\t\t\tif ( material.morphNormals === true ) geometry.removeAttribute( 'morphNormal' + i );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tprogram.getUniforms().setValue(\r\n\t\t\t\t\t_gl, 'morphTargetInfluences', morphInfluences );\r\n\r\n\t\t\tupdateBuffers = true;\r\n\r\n\t\t}\r\n\r\n\t\t//\r\n\r\n\t\tvar index = geometry.index;\r\n\t\tvar position = geometry.attributes.position;\r\n\r\n\t\tif ( material.wireframe === true ) {\r\n\r\n\t\t\tindex = objects.getWireframeAttribute( geometry );\r\n\r\n\t\t}\r\n\r\n\t\tvar renderer;\r\n\r\n\t\tif ( index !== null ) {\r\n\r\n\t\t\trenderer = indexedBufferRenderer;\r\n\t\t\trenderer.setIndex( index );\r\n\r\n\t\t} else {\r\n\r\n\t\t\trenderer = bufferRenderer;\r\n\r\n\t\t}\r\n\r\n\t\tif ( updateBuffers ) {\r\n\r\n\t\t\tsetupVertexAttributes( material, program, geometry );\r\n\r\n\t\t\tif ( index !== null ) {\r\n\r\n\t\t\t\t_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, objects.getAttributeBuffer( index ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t//\r\n\r\n\t\tvar dataStart = 0;\r\n\t\tvar dataCount = Infinity;\r\n\r\n\t\tif ( index !== null ) {\r\n\r\n\t\t\tdataCount = index.count;\r\n\r\n\t\t} else if ( position !== undefined ) {\r\n\r\n\t\t\tdataCount = position.count;\r\n\r\n\t\t}\r\n\r\n\t\tvar rangeStart = geometry.drawRange.start;\r\n\t\tvar rangeCount = geometry.drawRange.count;\r\n\r\n\t\tvar groupStart = group !== null ? group.start : 0;\r\n\t\tvar groupCount = group !== null ? group.count : Infinity;\r\n\r\n\t\tvar drawStart = Math.max( dataStart, rangeStart, groupStart );\r\n\t\tvar drawEnd = Math.min( dataStart + dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\r\n\r\n\t\tvar drawCount = Math.max( 0, drawEnd - drawStart + 1 );\r\n\r\n\t\t//\r\n\r\n\t\tif ( object instanceof THREE.Mesh ) {\r\n\r\n\t\t\tif ( material.wireframe === true ) {\r\n\r\n\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\r\n\t\t\t\trenderer.setMode( _gl.LINES );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tswitch ( object.drawMode ) {\r\n\r\n\t\t\t\t\tcase THREE.TrianglesDrawMode:\r\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLES );\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase THREE.TriangleStripDrawMode:\r\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_STRIP );\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase THREE.TriangleFanDrawMode:\r\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_FAN );\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\r\n\t\t} else if ( object instanceof THREE.Line ) {\r\n\r\n\t\t\tvar lineWidth = material.linewidth;\r\n\r\n\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\r\n\r\n\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\r\n\r\n\t\t\tif ( object instanceof THREE.LineSegments ) {\r\n\r\n\t\t\t\trenderer.setMode( _gl.LINES );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\trenderer.setMode( _gl.LINE_STRIP );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( object instanceof THREE.Points ) {\r\n\r\n\t\t\trenderer.setMode( _gl.POINTS );\r\n\r\n\t\t}\r\n\r\n\t\tif ( geometry instanceof THREE.InstancedBufferGeometry ) {\r\n\r\n\t\t\tif ( geometry.maxInstancedCount > 0 ) {\r\n\r\n\t\t\t\trenderer.renderInstances( geometry, drawStart, drawCount );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\trenderer.render( drawStart, drawCount );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tfunction setupVertexAttributes( material, program, geometry, startIndex ) {\r\n\r\n\t\tvar extension;\r\n\r\n\t\tif ( geometry instanceof THREE.InstancedBufferGeometry ) {\r\n\r\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\r\n\r\n\t\t\tif ( extension === null ) {\r\n\r\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\r\n\t\t\t\treturn;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( startIndex === undefined ) startIndex = 0;\r\n\r\n\t\tstate.initAttributes();\r\n\r\n\t\tvar geometryAttributes = geometry.attributes;\r\n\r\n\t\tvar programAttributes = program.getAttributes();\r\n\r\n\t\tvar materialDefaultAttributeValues = material.defaultAttributeValues;\r\n\r\n\t\tfor ( var name in programAttributes ) {\r\n\r\n\t\t\tvar programAttribute = programAttributes[ name ];\r\n\r\n\t\t\tif ( programAttribute >= 0 ) {\r\n\r\n\t\t\t\tvar geometryAttribute = geometryAttributes[ name ];\r\n\r\n\t\t\t\tif ( geometryAttribute !== undefined ) {\r\n\r\n\t\t\t\t\tvar type = _gl.FLOAT;\r\n\t\t\t\t\tvar array = geometryAttribute.array;\r\n\t\t\t\t\tvar normalized = geometryAttribute.normalized;\r\n\r\n\t\t\t\t\tif ( array instanceof Float32Array ) {\r\n\r\n\t\t\t\t\t\ttype = _gl.FLOAT;\r\n\r\n\t\t\t\t\t} else if ( array instanceof Float64Array ) {\r\n\r\n\t\t\t\t\t\tconsole.warn(\"Unsupported data buffer format: Float64Array\");\r\n\r\n\t\t\t\t\t} else if ( array instanceof Uint16Array ) {\r\n\r\n\t\t\t\t\t\ttype = _gl.UNSIGNED_SHORT;\r\n\r\n\t\t\t\t\t} else if ( array instanceof Int16Array ) {\r\n\r\n\t\t\t\t\t\ttype = _gl.SHORT;\r\n\r\n\t\t\t\t\t} else if ( array instanceof Uint32Array ) {\r\n\r\n\t\t\t\t\t\ttype = _gl.UNSIGNED_INT;\r\n\r\n\t\t\t\t\t} else if ( array instanceof Int32Array ) {\r\n\r\n\t\t\t\t\t\ttype = _gl.INT;\r\n\r\n\t\t\t\t\t} else if ( array instanceof Int8Array ) {\r\n\r\n\t\t\t\t\t\ttype = _gl.BYTE;\r\n\r\n\t\t\t\t\t} else if ( array instanceof Uint8Array ) {\r\n\r\n\t\t\t\t\t\ttype = _gl.UNSIGNED_BYTE;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar size = geometryAttribute.itemSize;\r\n\t\t\t\t\tvar buffer = objects.getAttributeBuffer( geometryAttribute );\r\n\r\n\t\t\t\t\tif ( geometryAttribute instanceof THREE.InterleavedBufferAttribute ) {\r\n\r\n\t\t\t\t\t\tvar data = geometryAttribute.data;\r\n\t\t\t\t\t\tvar stride = data.stride;\r\n\t\t\t\t\t\tvar offset = geometryAttribute.offset;\r\n\r\n\t\t\t\t\t\tif ( data instanceof THREE.InstancedInterleavedBuffer ) {\r\n\r\n\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, data.meshPerAttribute, extension );\r\n\r\n\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\r\n\r\n\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = data.meshPerAttribute * data.count;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\r\n\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, stride * data.array.BYTES_PER_ELEMENT, ( startIndex * stride + offset ) * data.array.BYTES_PER_ELEMENT );\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tif ( geometryAttribute instanceof THREE.InstancedBufferAttribute ) {\r\n\r\n\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute, extension );\r\n\r\n\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\r\n\r\n\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\r\n\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, 0, startIndex * size * geometryAttribute.array.BYTES_PER_ELEMENT );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\r\n\r\n\t\t\t\t\tvar value = materialDefaultAttributeValues[ name ];\r\n\r\n\t\t\t\t\tif ( value !== undefined ) {\r\n\r\n\t\t\t\t\t\tswitch ( value.length ) {\r\n\r\n\t\t\t\t\t\t\tcase 2:\r\n\t\t\t\t\t\t\t\t_gl.vertexAttrib2fv( programAttribute, value );\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase 3:\r\n\t\t\t\t\t\t\t\t_gl.vertexAttrib3fv( programAttribute, value );\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase 4:\r\n\t\t\t\t\t\t\t\t_gl.vertexAttrib4fv( programAttribute, value );\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t_gl.vertexAttrib1fv( programAttribute, value );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tstate.disableUnusedAttributes();\r\n\r\n\t}\r\n\r\n\t// Sorting\r\n\r\n\tfunction absNumericalSort( a, b ) {\r\n\r\n\t\treturn Math.abs( b[ 0 ] ) - Math.abs( a[ 0 ] );\r\n\r\n\t}\r\n\r\n\tfunction painterSortStable ( a, b ) {\r\n\r\n\t\tif ( a.object.renderOrder !== b.object.renderOrder ) {\r\n\r\n\t\t\treturn a.object.renderOrder - b.object.renderOrder;\r\n\r\n\t\t} else if ( a.material.id !== b.material.id ) {\r\n\r\n\t\t\treturn a.material.id - b.material.id;\r\n\r\n\t\t} else if ( a.z !== b.z ) {\r\n\r\n\t\t\treturn a.z - b.z;\r\n\r\n\t\t} else {\r\n\r\n\t\t\treturn a.id - b.id;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction reversePainterSortStable ( a, b ) {\r\n\r\n\t\tif ( a.object.renderOrder !== b.object.renderOrder ) {\r\n\r\n\t\t\treturn a.object.renderOrder - b.object.renderOrder;\r\n\r\n\t\t} if ( a.z !== b.z ) {\r\n\r\n\t\t\treturn b.z - a.z;\r\n\r\n\t\t} else {\r\n\r\n\t\t\treturn a.id - b.id;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Rendering\r\n\r\n\tthis.render = function ( scene, camera, renderTarget, forceClear ) {\r\n\r\n\t\tif ( camera instanceof THREE.Camera === false ) {\r\n\r\n\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tvar fog = scene.fog;\r\n\r\n\t\t// reset caching for this frame\r\n\r\n\t\t_currentGeometryProgram = '';\r\n\t\t_currentMaterialId = - 1;\r\n\t\t_currentCamera = null;\r\n\r\n\t\t// update scene graph\r\n\r\n\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\r\n\r\n\t\t// update camera matrices and frustum\r\n\r\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\r\n\r\n\t\tcamera.matrixWorldInverse.getInverse( camera.matrixWorld );\r\n\r\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\r\n\t\t_frustum.setFromMatrix( _projScreenMatrix );\r\n\r\n\t\tlights.length = 0;\r\n\r\n\t\topaqueObjectsLastIndex = - 1;\r\n\t\ttransparentObjectsLastIndex = - 1;\r\n\r\n\t\tsprites.length = 0;\r\n\t\tlensFlares.length = 0;\r\n\r\n\t\t_localClippingEnabled = this.localClippingEnabled;\r\n\t\t_clippingEnabled = _clipping.init(\r\n\t\t\t\tthis.clippingPlanes, _localClippingEnabled, camera );\r\n\r\n\t\tprojectObject( scene, camera );\r\n\r\n\r\n\t\topaqueObjects.length = opaqueObjectsLastIndex + 1;\r\n\t\ttransparentObjects.length = transparentObjectsLastIndex + 1;\r\n\r\n\t\tif ( _this.sortObjects === true ) {\r\n\r\n\t\t\topaqueObjects.sort( painterSortStable );\r\n\t\t\ttransparentObjects.sort( reversePainterSortStable );\r\n\r\n\t\t}\r\n\r\n\t\t//\r\n\r\n\t\tif ( _clippingEnabled ) _clipping.beginShadows();\r\n\r\n\t\tsetupShadows( lights );\r\n\r\n\t\tshadowMap.render( scene, camera );\r\n\r\n\t\tsetupLights( lights, camera );\r\n\r\n\t\tif ( _clippingEnabled ) _clipping.endShadows();\r\n\r\n\t\t//\r\n\r\n\t\t_infoRender.calls = 0;\r\n\t\t_infoRender.vertices = 0;\r\n\t\t_infoRender.faces = 0;\r\n\t\t_infoRender.points = 0;\r\n\r\n\t\tif ( renderTarget === undefined ) {\r\n\r\n\t\t\trenderTarget = null;\r\n\r\n\t\t}\r\n\r\n\t\tthis.setRenderTarget( renderTarget );\r\n\r\n\t\tif ( this.autoClear || forceClear ) {\r\n\r\n\t\t\tthis.clear( this.autoClearColor, this.autoClearDepth, this.autoClearStencil );\r\n\r\n\t\t}\r\n\r\n\t\t//\r\n\r\n\t\tif ( scene.overrideMaterial ) {\r\n\r\n\t\t\tvar overrideMaterial = scene.overrideMaterial;\r\n\r\n\t\t\trenderObjects( opaqueObjects, camera, fog, overrideMaterial );\r\n\t\t\trenderObjects( transparentObjects, camera, fog, overrideMaterial );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// opaque pass (front-to-back order)\r\n\r\n\t\t\tstate.setBlending( THREE.NoBlending );\r\n\t\t\trenderObjects( opaqueObjects, camera, fog );\r\n\r\n\t\t\t// transparent pass (back-to-front order)\r\n\r\n\t\t\trenderObjects( transparentObjects, camera, fog );\r\n\r\n\t\t}\r\n\r\n\t\t// custom render plugins (post pass)\r\n\r\n\t\tspritePlugin.render( scene, camera );\r\n\t\tlensFlarePlugin.render( scene, camera, _currentViewport );\r\n\r\n\t\t// Generate mipmap if we're using any kind of mipmap filtering\r\n\r\n\t\tif ( renderTarget ) {\r\n\r\n\t\t\tvar texture = renderTarget.texture;\r\n\r\n\t\t\tif ( texture.generateMipmaps && isPowerOfTwo( renderTarget ) &&\r\n\t\t\t\t\ttexture.minFilter !== THREE.NearestFilter &&\r\n\t\t\t\t\ttexture.minFilter !== THREE.LinearFilter ) {\r\n\r\n\t\t\t\tupdateRenderTargetMipmap( renderTarget );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\r\n\r\n\t\tstate.setDepthTest( true );\r\n\t\tstate.setDepthWrite( true );\r\n\t\tstate.setColorWrite( true );\r\n\r\n\t\t// _gl.finish();\r\n\r\n\t};\r\n\r\n\tfunction pushRenderItem( object, geometry, material, z, group ) {\r\n\r\n\t\tvar array, index;\r\n\r\n\t\t// allocate the next position in the appropriate array\r\n\r\n\t\tif ( material.transparent ) {\r\n\r\n\t\t\tarray = transparentObjects;\r\n\t\t\tindex = ++ transparentObjectsLastIndex;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tarray = opaqueObjects;\r\n\t\t\tindex = ++ opaqueObjectsLastIndex;\r\n\r\n\t\t}\r\n\r\n\t\t// recycle existing render item or grow the array\r\n\r\n\t\tvar renderItem = array[ index ];\r\n\r\n\t\tif ( renderItem !== undefined ) {\r\n\r\n\t\t\trenderItem.id = object.id;\r\n\t\t\trenderItem.object = object;\r\n\t\t\trenderItem.geometry = geometry;\r\n\t\t\trenderItem.material = material;\r\n\t\t\trenderItem.z = _vector3.z;\r\n\t\t\trenderItem.group = group;\r\n\r\n\t\t} else {\r\n\r\n\t\t\trenderItem = {\r\n\t\t\t\tid: object.id,\r\n\t\t\t\tobject: object,\r\n\t\t\t\tgeometry: geometry,\r\n\t\t\t\tmaterial: material,\r\n\t\t\t\tz: _vector3.z,\r\n\t\t\t\tgroup: group\r\n\t\t\t};\r\n\r\n\t\t\t// assert( index === array.length );\r\n\t\t\tarray.push( renderItem );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// TODO Duplicated code (Frustum)\r\n\r\n\tfunction isObjectViewable( object ) {\r\n\r\n\t\tvar geometry = object.geometry;\r\n\r\n\t\tif ( geometry.boundingSphere === null )\r\n\t\t\tgeometry.computeBoundingSphere();\r\n\r\n\t\t_sphere.copy( geometry.boundingSphere ).\r\n\t\t\tapplyMatrix4( object.matrixWorld );\r\n\r\n\t\treturn isSphereViewable( _sphere );\r\n\r\n\t}\r\n\r\n\tfunction isSpriteViewable( sprite ) {\r\n\r\n\t\t_sphere.center.set( 0, 0, 0 );\r\n\t\t_sphere.radius = 0.7071067811865476;\r\n\t\t_sphere.applyMatrix4( sprite.matrixWorld );\r\n\r\n\t\treturn isSphereViewable( _sphere );\r\n\r\n\t}\r\n\r\n\tfunction isSphereViewable( sphere ) {\r\n\r\n\t\tif ( ! _frustum.intersectsSphere( sphere ) ) return false;\r\n\r\n\t\tvar numPlanes = _clipping.numPlanes;\r\n\r\n\t\tif ( numPlanes === 0 ) return true;\r\n\r\n\t\tvar planes = _this.clippingPlanes,\r\n\r\n\t\t\tcenter = sphere.center,\r\n\t\t\tnegRad = - sphere.radius,\r\n\t\t\ti = 0;\r\n\r\n\t\tdo {\r\n\r\n\t\t\t// out when deeper than radius in the negative halfspace\r\n\t\t\tif ( planes[ i ].distanceToPoint( center ) < negRad ) return false;\r\n\r\n\t\t} while ( ++ i !== numPlanes );\r\n\r\n\t\treturn true;\r\n\r\n\t}\r\n\r\n\tfunction projectObject( object, camera ) {\r\n\r\n\t\tif ( object.visible === false ) return;\r\n\r\n\t\tif ( object.layers.test( camera.layers ) ) {\r\n\r\n\t\t\tif ( object instanceof THREE.Light ) {\r\n\r\n\t\t\t\tlights.push( object );\r\n\r\n\t\t\t} else if ( object instanceof THREE.Sprite ) {\r\n\r\n\t\t\t\tif ( object.frustumCulled === false || isSpriteViewable( object ) === true ) {\r\n\r\n\t\t\t\t\tsprites.push( object );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( object instanceof THREE.LensFlare ) {\r\n\r\n\t\t\t\tlensFlares.push( object );\r\n\r\n\t\t\t} else if ( object instanceof THREE.ImmediateRenderObject ) {\r\n\r\n\t\t\t\tif ( _this.sortObjects === true ) {\r\n\r\n\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld );\r\n\t\t\t\t\t_vector3.applyProjection( _projScreenMatrix );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tpushRenderItem( object, null, object.material, _vector3.z, null );\r\n\r\n\t\t\t} else if ( object instanceof THREE.Mesh || object instanceof THREE.Line || object instanceof THREE.Points ) {\r\n\r\n\t\t\t\tif ( object instanceof THREE.SkinnedMesh ) {\r\n\r\n\t\t\t\t\tobject.skeleton.update();\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( object.frustumCulled === false || isObjectViewable( object ) === true ) {\r\n\r\n\t\t\t\t\tvar material = object.material;\r\n\r\n\t\t\t\t\tif ( material.visible === true ) {\r\n\r\n\t\t\t\t\t\tif ( _this.sortObjects === true ) {\r\n\r\n\t\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld );\r\n\t\t\t\t\t\t\t_vector3.applyProjection( _projScreenMatrix );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar geometry = objects.update( object );\r\n\r\n\t\t\t\t\t\tif ( material instanceof THREE.MultiMaterial ) {\r\n\r\n\t\t\t\t\t\t\tvar groups = geometry.groups;\r\n\t\t\t\t\t\t\tvar materials = material.materials;\r\n\r\n\t\t\t\t\t\t\tfor ( var i = 0, l = groups.length; i < l; i ++ ) {\r\n\r\n\t\t\t\t\t\t\t\tvar group = groups[ i ];\r\n\t\t\t\t\t\t\t\tvar groupMaterial = materials[ group.materialIndex ];\r\n\r\n\t\t\t\t\t\t\t\tif ( groupMaterial.visible === true ) {\r\n\r\n\t\t\t\t\t\t\t\t\tpushRenderItem( object, geometry, groupMaterial, _vector3.z, group );\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\tpushRenderItem( object, geometry, material, _vector3.z, null );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar children = object.children;\r\n\r\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\r\n\r\n\t\t\tprojectObject( children[ i ], camera );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction renderObjects( renderList, camera, fog, overrideMaterial ) {\r\n\r\n\t\tfor ( var i = 0, l = renderList.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar renderItem = renderList[ i ];\r\n\r\n\t\t\tvar object = renderItem.object;\r\n\t\t\tvar geometry = renderItem.geometry;\r\n\t\t\tvar material = overrideMaterial === undefined ? renderItem.material : overrideMaterial;\r\n\t\t\tvar group = renderItem.group;\r\n\r\n\t\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\r\n\t\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\r\n\r\n\t\t\tif ( object instanceof THREE.ImmediateRenderObject ) {\r\n\r\n\t\t\t\tsetMaterial( material );\r\n\r\n\t\t\t\tvar program = setProgram( camera, fog, material, object );\r\n\r\n\t\t\t\t_currentGeometryProgram = '';\r\n\r\n\t\t\t\tobject.render( function ( object ) {\r\n\r\n\t\t\t\t\t_this.renderBufferImmediate( object, program, material );\r\n\r\n\t\t\t\t} );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t_this.renderBufferDirect( camera, fog, geometry, material, object, group );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction initMaterial( material, fog, object ) {\r\n\r\n\t\tvar materialProperties = properties.get( material );\r\n\r\n\t\tvar parameters = programCache.getParameters(\r\n\t\t\t\tmaterial, _lights, fog, _clipping.numPlanes, object );\r\n\r\n\t\tvar code = programCache.getProgramCode( material, parameters );\r\n\r\n\t\tvar program = materialProperties.program;\r\n\t\tvar programChange = true;\r\n\r\n\t\tif ( program === undefined ) {\r\n\r\n\t\t\t// new material\r\n\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\r\n\r\n\t\t} else if ( program.code !== code ) {\r\n\r\n\t\t\t// changed glsl or parameters\r\n\t\t\treleaseMaterialProgramReference( material );\r\n\r\n\t\t} else if ( parameters.shaderID !== undefined ) {\r\n\r\n\t\t\t// same glsl and uniform list\r\n\t\t\treturn;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// only rebuild uniform list\r\n\t\t\tprogramChange = false;\r\n\r\n\t\t}\r\n\r\n\t\tif ( programChange ) {\r\n\r\n\t\t\tif ( parameters.shaderID ) {\r\n\r\n\t\t\t\tvar shader = THREE.ShaderLib[ parameters.shaderID ];\r\n\r\n\t\t\t\tmaterialProperties.__webglShader = {\r\n\t\t\t\t\tname: material.type,\r\n\t\t\t\t\tuniforms: THREE.UniformsUtils.clone( shader.uniforms ),\r\n\t\t\t\t\tvertexShader: shader.vertexShader,\r\n\t\t\t\t\tfragmentShader: shader.fragmentShader\r\n\t\t\t\t};\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tmaterialProperties.__webglShader = {\r\n\t\t\t\t\tname: material.type,\r\n\t\t\t\t\tuniforms: material.uniforms,\r\n\t\t\t\t\tvertexShader: material.vertexShader,\r\n\t\t\t\t\tfragmentShader: material.fragmentShader\r\n\t\t\t\t};\r\n\r\n\t\t\t}\r\n\r\n\t\t\tmaterial.__webglShader = materialProperties.__webglShader;\r\n\r\n\t\t\tprogram = programCache.acquireProgram( material, parameters, code );\r\n\r\n\t\t\tmaterialProperties.program = program;\r\n\t\t\tmaterial.program = program;\r\n\r\n\t\t}\r\n\r\n\t\tvar attributes = program.getAttributes();\r\n\r\n\t\tif ( material.morphTargets ) {\r\n\r\n\t\t\tmaterial.numSupportedMorphTargets = 0;\r\n\r\n\t\t\tfor ( var i = 0; i < _this.maxMorphTargets; i ++ ) {\r\n\r\n\t\t\t\tif ( attributes[ 'morphTarget' + i ] >= 0 ) {\r\n\r\n\t\t\t\t\tmaterial.numSupportedMorphTargets ++;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.morphNormals ) {\r\n\r\n\t\t\tmaterial.numSupportedMorphNormals = 0;\r\n\r\n\t\t\tfor ( var i = 0; i < _this.maxMorphNormals; i ++ ) {\r\n\r\n\t\t\t\tif ( attributes[ 'morphNormal' + i ] >= 0 ) {\r\n\r\n\t\t\t\t\tmaterial.numSupportedMorphNormals ++;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar uniforms = materialProperties.__webglShader.uniforms;\r\n\r\n\t\tif ( ! ( material instanceof THREE.ShaderMaterial ) &&\r\n\t\t\t\t! ( material instanceof THREE.RawShaderMaterial ) ||\r\n\t\t\t\tmaterial.clipping === true ) {\r\n\r\n\t\t\tmaterialProperties.numClippingPlanes = _clipping.numPlanes;\r\n\t\t\tuniforms.clippingPlanes = _clipping.uniform;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.lights ) {\r\n\r\n\t\t\t// store the light setup it was created for\r\n\r\n\t\t\tmaterialProperties.lightsHash = _lights.hash;\r\n\r\n\t\t\t// wire up the material to this renderer's lighting state\r\n\r\n\t\t\tuniforms.ambientLightColor.value = _lights.ambient;\r\n\t\t\tuniforms.directionalLights.value = _lights.directional;\r\n\t\t\tuniforms.spotLights.value = _lights.spot;\r\n\t\t\tuniforms.pointLights.value = _lights.point;\r\n\t\t\tuniforms.hemisphereLights.value = _lights.hemi;\r\n\r\n\t\t\tuniforms.directionalShadowMap.value = _lights.directionalShadowMap;\r\n\t\t\tuniforms.directionalShadowMatrix.value = _lights.directionalShadowMatrix;\r\n\t\t\tuniforms.spotShadowMap.value = _lights.spotShadowMap;\r\n\t\t\tuniforms.spotShadowMatrix.value = _lights.spotShadowMatrix;\r\n\t\t\tuniforms.pointShadowMap.value = _lights.pointShadowMap;\r\n\t\t\tuniforms.pointShadowMatrix.value = _lights.pointShadowMatrix;\r\n\r\n\t\t}\r\n\r\n\t\tvar progUniforms = materialProperties.program.getUniforms(),\r\n\t\t\tuniformsList =\r\n\t\t\t\t\tTHREE.WebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\r\n\r\n\t\tmaterialProperties.uniformsList = uniformsList;\r\n\t\tmaterialProperties.dynamicUniforms =\r\n\t\t\t\tTHREE.WebGLUniforms.splitDynamic( uniformsList, uniforms );\r\n\r\n\t}\r\n\r\n\tfunction setMaterial( material ) {\r\n\r\n\t\tif ( material.side !== THREE.DoubleSide )\r\n\t\t\tstate.enable( _gl.CULL_FACE );\r\n\t\telse\r\n\t\t\tstate.disable( _gl.CULL_FACE );\r\n\r\n\t\tstate.setFlipSided( material.side === THREE.BackSide );\r\n\r\n\t\tif ( material.transparent === true ) {\r\n\r\n\t\t\tstate.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tstate.setBlending( THREE.NoBlending );\r\n\r\n\t\t}\r\n\r\n\t\tstate.setDepthFunc( material.depthFunc );\r\n\t\tstate.setDepthTest( material.depthTest );\r\n\t\tstate.setDepthWrite( material.depthWrite );\r\n\t\tstate.setColorWrite( material.colorWrite );\r\n\t\tstate.setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\r\n\r\n\t}\r\n\r\n\tfunction setProgram( camera, fog, material, object ) {\r\n\r\n\t\t_usedTextureUnits = 0;\r\n\r\n\t\tvar materialProperties = properties.get( material );\r\n\r\n\t\tif ( _clippingEnabled ) {\r\n\r\n\t\t\tif ( _localClippingEnabled || camera !== _currentCamera ) {\r\n\r\n\t\t\t\tvar useCache =\r\n\t\t\t\t\t\tcamera === _currentCamera &&\r\n\t\t\t\t\t\tmaterial.id === _currentMaterialId;\r\n\r\n\t\t\t\t// we might want to call this function with some ClippingGroup\r\n\t\t\t\t// object instead of the material, once it becomes feasible\r\n\t\t\t\t// (#8465, #8379)\r\n\t\t\t\t_clipping.setState(\r\n\t\t\t\t\t\tmaterial.clippingPlanes, material.clipShadows,\r\n\t\t\t\t\t\tcamera, materialProperties, useCache );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( materialProperties.numClippingPlanes !== undefined &&\r\n\t\t\t\tmaterialProperties.numClippingPlanes !== _clipping.numPlanes ) {\r\n\r\n\t\t\t\tmaterial.needsUpdate = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( materialProperties.program === undefined ) {\r\n\r\n\t\t\tmaterial.needsUpdate = true;\r\n\r\n\t\t}\r\n\r\n\t\tif ( materialProperties.lightsHash !== undefined &&\r\n\t\t\tmaterialProperties.lightsHash !== _lights.hash ) {\r\n\r\n\t\t\tmaterial.needsUpdate = true;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.needsUpdate ) {\r\n\r\n\t\t\tinitMaterial( material, fog, object );\r\n\t\t\tmaterial.needsUpdate = false;\r\n\r\n\t\t}\r\n\r\n\t\tvar refreshProgram = false;\r\n\t\tvar refreshMaterial = false;\r\n\t\tvar refreshLights = false;\r\n\r\n\t\tvar program = materialProperties.program,\r\n\t\t\tp_uniforms = program.getUniforms(),\r\n\t\t\tm_uniforms = materialProperties.__webglShader.uniforms;\r\n\r\n\t\tif ( program.id !== _currentProgram ) {\r\n\r\n\t\t\t_gl.useProgram( program.program );\r\n\t\t\t_currentProgram = program.id;\r\n\r\n\t\t\trefreshProgram = true;\r\n\t\t\trefreshMaterial = true;\r\n\t\t\trefreshLights = true;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.id !== _currentMaterialId ) {\r\n\r\n\t\t\t_currentMaterialId = material.id;\r\n\r\n\t\t\trefreshMaterial = true;\r\n\r\n\t\t}\r\n\r\n\t\tif ( refreshProgram || camera !== _currentCamera ) {\r\n\r\n\t\t\tp_uniforms.set( _gl, camera, 'projectionMatrix' );\r\n\r\n\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\r\n\r\n\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\r\n\t\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\r\n\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif ( camera !== _currentCamera ) {\r\n\r\n\t\t\t\t_currentCamera = camera;\r\n\r\n\t\t\t\t// lighting uniforms depend on the camera so enforce an update\r\n\t\t\t\t// now, in case this material supports lights - or later, when\r\n\t\t\t\t// the next material that does gets activated:\r\n\r\n\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\r\n\t\t\t\trefreshLights = true;\t\t// remains set until update done\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// load material specific uniforms\r\n\t\t\t// (shader material also gets them for the sake of genericity)\r\n\r\n\t\t\tif ( material instanceof THREE.ShaderMaterial ||\r\n\t\t\t\t material instanceof THREE.MeshPhongMaterial ||\r\n\t\t\t\t material instanceof THREE.MeshStandardMaterial ||\r\n\t\t\t\t material.envMap ) {\r\n\r\n\t\t\t\tvar uCamPos = p_uniforms.map.cameraPosition;\r\n\r\n\t\t\t\tif ( uCamPos !== undefined ) {\r\n\r\n\t\t\t\t\tuCamPos.setValue( _gl,\r\n\t\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( material instanceof THREE.MeshPhongMaterial ||\r\n\t\t\t\t material instanceof THREE.MeshLambertMaterial ||\r\n\t\t\t\t material instanceof THREE.MeshBasicMaterial ||\r\n\t\t\t\t material instanceof THREE.MeshStandardMaterial ||\r\n\t\t\t\t material instanceof THREE.ShaderMaterial ||\r\n\t\t\t\t material.skinning ) {\r\n\r\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tp_uniforms.set( _gl, _this, 'toneMappingExposure' );\r\n\t\t\tp_uniforms.set( _gl, _this, 'toneMappingWhitePoint' );\r\n\r\n\t\t}\r\n\r\n\t\t// skinning uniforms must be set even if material didn't change\r\n\t\t// auto-setting of texture unit for bone texture must go before other textures\r\n\t\t// not sure why, but otherwise weird things happen\r\n\r\n\t\tif ( material.skinning ) {\r\n\r\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\r\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\r\n\r\n\t\t\tvar skeleton = object.skeleton;\r\n\r\n\t\t\tif ( skeleton ) {\r\n\r\n\t\t\t\tif ( capabilities.floatVertexTextures && skeleton.useVertexTexture ) {\r\n\r\n\t\t\t\t\tp_uniforms.set( _gl, skeleton, 'boneTexture' );\r\n\t\t\t\t\tp_uniforms.set( _gl, skeleton, 'boneTextureWidth' );\r\n\t\t\t\t\tp_uniforms.set( _gl, skeleton, 'boneTextureHeight' );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tp_uniforms.setOptional( _gl, skeleton, 'boneMatrices' );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( refreshMaterial ) {\r\n\r\n\t\t\tif ( material.lights ) {\r\n\r\n\t\t\t\t// the current material requires lighting info\r\n\r\n\t\t\t\t// note: all lighting uniforms are always set correctly\r\n\t\t\t\t// they simply reference the renderer's state for their\r\n\t\t\t\t// values\r\n\t\t\t\t//\r\n\t\t\t\t// use the current material's .needsUpdate flags to set\r\n\t\t\t\t// the GL state when required\r\n\r\n\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// refresh uniforms common to several materials\r\n\r\n\t\t\tif ( fog && material.fog ) {\r\n\r\n\t\t\t\trefreshUniformsFog( m_uniforms, fog );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( material instanceof THREE.MeshBasicMaterial ||\r\n\t\t\t\t material instanceof THREE.MeshLambertMaterial ||\r\n\t\t\t\t material instanceof THREE.MeshPhongMaterial ||\r\n\t\t\t\t material instanceof THREE.MeshStandardMaterial ||\r\n\t\t\t\t material instanceof THREE.MeshDepthMaterial ) {\r\n\r\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// refresh single material specific uniforms\r\n\r\n\t\t\tif ( material instanceof THREE.LineBasicMaterial ) {\r\n\r\n\t\t\t\trefreshUniformsLine( m_uniforms, material );\r\n\r\n\t\t\t} else if ( material instanceof THREE.LineDashedMaterial ) {\r\n\r\n\t\t\t\trefreshUniformsLine( m_uniforms, material );\r\n\t\t\t\trefreshUniformsDash( m_uniforms, material );\r\n\r\n\t\t\t} else if ( material instanceof THREE.PointsMaterial ) {\r\n\r\n\t\t\t\trefreshUniformsPoints( m_uniforms, material );\r\n\r\n\t\t\t} else if ( material instanceof THREE.MeshLambertMaterial ) {\r\n\r\n\t\t\t\trefreshUniformsLambert( m_uniforms, material );\r\n\r\n\t\t\t} else if ( material instanceof THREE.MeshPhongMaterial ) {\r\n\r\n\t\t\t\trefreshUniformsPhong( m_uniforms, material );\r\n\r\n\t\t\t} else if ( material instanceof THREE.MeshPhysicalMaterial ) {\r\n\r\n\t\t\t\trefreshUniformsPhysical( m_uniforms, material );\r\n\r\n\t\t\t} else if ( material instanceof THREE.MeshStandardMaterial ) {\r\n\r\n\t\t\t\trefreshUniformsStandard( m_uniforms, material );\r\n\r\n\t\t\t} else if ( material instanceof THREE.MeshDepthMaterial ) {\r\n\r\n\t\t\t\tif ( material.displacementMap ) {\r\n\r\n\t\t\t\t\tm_uniforms.displacementMap.value = material.displacementMap;\r\n\t\t\t\t\tm_uniforms.displacementScale.value = material.displacementScale;\r\n\t\t\t\t\tm_uniforms.displacementBias.value = material.displacementBias;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( material instanceof THREE.MeshNormalMaterial ) {\r\n\r\n\t\t\t\tm_uniforms.opacity.value = material.opacity;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tTHREE.WebGLUniforms.upload(\r\n\t\t\t\t\t_gl, materialProperties.uniformsList, m_uniforms, _this );\r\n\r\n\t\t}\r\n\r\n\r\n\t\t// common matrices\r\n\r\n\t\tp_uniforms.set( _gl, object, 'modelViewMatrix' );\r\n\t\tp_uniforms.set( _gl, object, 'normalMatrix' );\r\n\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\r\n\r\n\r\n\t\t// dynamic uniforms\r\n\r\n\t\tvar dynUniforms = materialProperties.dynamicUniforms;\r\n\r\n\t\tif ( dynUniforms !== null ) {\r\n\r\n\t\t\tTHREE.WebGLUniforms.evalDynamic(\r\n\t\t\t\t\tdynUniforms, m_uniforms, object, camera );\r\n\r\n\t\t\tTHREE.WebGLUniforms.upload( _gl, dynUniforms, m_uniforms, _this );\r\n\r\n\t\t}\r\n\r\n\t\treturn program;\r\n\r\n\t}\r\n\r\n\t// Uniforms (refresh uniforms objects)\r\n\r\n\tfunction refreshUniformsCommon ( uniforms, material ) {\r\n\r\n\t\tuniforms.opacity.value = material.opacity;\r\n\r\n\t\tuniforms.diffuse.value = material.color;\r\n\r\n\t\tif ( material.emissive ) {\r\n\r\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\r\n\r\n\t\t}\r\n\r\n\t\tuniforms.map.value = material.map;\r\n\t\tuniforms.specularMap.value = material.specularMap;\r\n\t\tuniforms.alphaMap.value = material.alphaMap;\r\n\r\n\t\tif ( material.aoMap ) {\r\n\r\n\t\t\tuniforms.aoMap.value = material.aoMap;\r\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\r\n\r\n\t\t}\r\n\r\n\t\t// uv repeat and offset setting priorities\r\n\t\t// 1. color map\r\n\t\t// 2. specular map\r\n\t\t// 3. normal map\r\n\t\t// 4. bump map\r\n\t\t// 5. alpha map\r\n\t\t// 6. emissive map\r\n\r\n\t\tvar uvScaleMap;\r\n\r\n\t\tif ( material.map ) {\r\n\r\n\t\t\tuvScaleMap = material.map;\r\n\r\n\t\t} else if ( material.specularMap ) {\r\n\r\n\t\t\tuvScaleMap = material.specularMap;\r\n\r\n\t\t} else if ( material.displacementMap ) {\r\n\r\n\t\t\tuvScaleMap = material.displacementMap;\r\n\r\n\t\t} else if ( material.normalMap ) {\r\n\r\n\t\t\tuvScaleMap = material.normalMap;\r\n\r\n\t\t} else if ( material.bumpMap ) {\r\n\r\n\t\t\tuvScaleMap = material.bumpMap;\r\n\r\n\t\t} else if ( material.roughnessMap ) {\r\n\r\n\t\t\tuvScaleMap = material.roughnessMap;\r\n\r\n\t\t} else if ( material.metalnessMap ) {\r\n\r\n\t\t\tuvScaleMap = material.metalnessMap;\r\n\r\n\t\t} else if ( material.alphaMap ) {\r\n\r\n\t\t\tuvScaleMap = material.alphaMap;\r\n\r\n\t\t} else if ( material.emissiveMap ) {\r\n\r\n\t\t\tuvScaleMap = material.emissiveMap;\r\n\r\n\t\t}\r\n\r\n\t\tif ( uvScaleMap !== undefined ) {\r\n\r\n\t\t\t// backwards compatibility\r\n\t\t\tif ( uvScaleMap instanceof THREE.WebGLRenderTarget ) {\r\n\r\n\t\t\t\tuvScaleMap = uvScaleMap.texture;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar offset = uvScaleMap.offset;\r\n\t\t\tvar repeat = uvScaleMap.repeat;\r\n\r\n\t\t\tuniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y );\r\n\r\n\t\t}\r\n\r\n\t\tuniforms.envMap.value = material.envMap;\r\n\r\n\t\t// don't flip CubeTexture envMaps, flip everything else:\r\n\t\t// WebGLRenderTargetCube will be flipped for backwards compatibility\r\n\t\t// WebGLRenderTargetCube.texture will be flipped because it's a Texture and NOT a CubeTexture\r\n\t\t// this check must be handled differently, or removed entirely, if WebGLRenderTargetCube uses a CubeTexture in the future\r\n\t\tuniforms.flipEnvMap.value = ( ! ( material.envMap instanceof THREE.CubeTexture ) ) ? 1 : - 1;\r\n\r\n\t\tuniforms.reflectivity.value = material.reflectivity;\r\n\t\tuniforms.refractionRatio.value = material.refractionRatio;\r\n\r\n\t}\r\n\r\n\tfunction refreshUniformsLine ( uniforms, material ) {\r\n\r\n\t\tuniforms.diffuse.value = material.color;\r\n\t\tuniforms.opacity.value = material.opacity;\r\n\r\n\t}\r\n\r\n\tfunction refreshUniformsDash ( uniforms, material ) {\r\n\r\n\t\tuniforms.dashSize.value = material.dashSize;\r\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\r\n\t\tuniforms.scale.value = material.scale;\r\n\r\n\t}\r\n\r\n\tfunction refreshUniformsPoints ( uniforms, material ) {\r\n\r\n\t\tuniforms.diffuse.value = material.color;\r\n\t\tuniforms.opacity.value = material.opacity;\r\n\t\tuniforms.size.value = material.size * _pixelRatio;\r\n\t\tuniforms.scale.value = _canvas.clientHeight * 0.5;\r\n\r\n\t\tuniforms.map.value = material.map;\r\n\r\n\t\tif ( material.map !== null ) {\r\n\r\n\t\t\tvar offset = material.map.offset;\r\n\t\t\tvar repeat = material.map.repeat;\r\n\r\n\t\t\tuniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction refreshUniformsFog ( uniforms, fog ) {\r\n\r\n\t\tuniforms.fogColor.value = fog.color;\r\n\r\n\t\tif ( fog instanceof THREE.Fog ) {\r\n\r\n\t\t\tuniforms.fogNear.value = fog.near;\r\n\t\t\tuniforms.fogFar.value = fog.far;\r\n\r\n\t\t} else if ( fog instanceof THREE.FogExp2 ) {\r\n\r\n\t\t\tuniforms.fogDensity.value = fog.density;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction refreshUniformsLambert ( uniforms, material ) {\r\n\r\n\t\tif ( material.lightMap ) {\r\n\r\n\t\t\tuniforms.lightMap.value = material.lightMap;\r\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.emissiveMap ) {\r\n\r\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction refreshUniformsPhong ( uniforms, material ) {\r\n\r\n\t\tuniforms.specular.value = material.specular;\r\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\r\n\r\n\t\tif ( material.lightMap ) {\r\n\r\n\t\t\tuniforms.lightMap.value = material.lightMap;\r\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.emissiveMap ) {\r\n\r\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.bumpMap ) {\r\n\r\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\r\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.normalMap ) {\r\n\r\n\t\t\tuniforms.normalMap.value = material.normalMap;\r\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.displacementMap ) {\r\n\r\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\r\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\r\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction refreshUniformsStandard ( uniforms, material ) {\r\n\r\n\t\tuniforms.roughness.value = material.roughness;\r\n\t\tuniforms.metalness.value = material.metalness;\r\n\r\n\t\tif ( material.roughnessMap ) {\r\n\r\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.metalnessMap ) {\r\n\r\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.lightMap ) {\r\n\r\n\t\t\tuniforms.lightMap.value = material.lightMap;\r\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.emissiveMap ) {\r\n\r\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.bumpMap ) {\r\n\r\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\r\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.normalMap ) {\r\n\r\n\t\t\tuniforms.normalMap.value = material.normalMap;\r\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.displacementMap ) {\r\n\r\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\r\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\r\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.envMap ) {\r\n\r\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\r\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction refreshUniformsPhysical ( uniforms, material ) {\r\n\r\n\t\trefreshUniformsStandard( uniforms, material );\r\n\r\n\t}\r\n\r\n\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\r\n\r\n\tfunction markUniformsLightsNeedsUpdate ( uniforms, value ) {\r\n\r\n\t\tuniforms.ambientLightColor.needsUpdate = value;\r\n\r\n\t\tuniforms.directionalLights.needsUpdate = value;\r\n\t\tuniforms.pointLights.needsUpdate = value;\r\n\t\tuniforms.spotLights.needsUpdate = value;\r\n\t\tuniforms.hemisphereLights.needsUpdate = value;\r\n\r\n\t}\r\n\r\n\t// Lighting\r\n\r\n\tfunction setupShadows ( lights ) {\r\n\r\n\t\tvar lightShadowsLength = 0;\r\n\r\n\t\tfor ( var i = 0, l = lights.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar light = lights[ i ];\r\n\r\n\t\t\tif ( light.castShadow ) {\r\n\r\n\t\t\t\t_lights.shadows[ lightShadowsLength ++ ] = light;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t_lights.shadows.length = lightShadowsLength;\r\n\r\n\t}\r\n\r\n\tfunction setupLights ( lights, camera ) {\r\n\r\n\t\tvar l, ll, light,\r\n\t\tr = 0, g = 0, b = 0,\r\n\t\tcolor,\r\n\t\tintensity,\r\n\t\tdistance,\r\n\t\tshadowMap,\r\n\r\n\t\tviewMatrix = camera.matrixWorldInverse,\r\n\r\n\t\tdirectionalLength = 0,\r\n\t\tpointLength = 0,\r\n\t\tspotLength = 0,\r\n\t\themiLength = 0;\r\n\r\n\t\tfor ( l = 0, ll = lights.length; l < ll; l ++ ) {\r\n\r\n\t\t\tlight = lights[ l ];\r\n\r\n\t\t\tcolor = light.color;\r\n\t\t\tintensity = light.intensity;\r\n\t\t\tdistance = light.distance;\r\n\r\n\t\t\tshadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\r\n\r\n\t\t\tif ( light instanceof THREE.AmbientLight ) {\r\n\r\n\t\t\t\tr += color.r * intensity;\r\n\t\t\t\tg += color.g * intensity;\r\n\t\t\t\tb += color.b * intensity;\r\n\r\n\t\t\t} else if ( light instanceof THREE.DirectionalLight ) {\r\n\r\n\t\t\t\tvar uniforms = lightCache.get( light );\r\n\r\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\r\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\r\n\t\t\t\t_vector3.setFromMatrixPosition( light.target.matrixWorld );\r\n\t\t\t\tuniforms.direction.sub( _vector3 );\r\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\r\n\r\n\t\t\t\tuniforms.shadow = light.castShadow;\r\n\r\n\t\t\t\tif ( light.castShadow ) {\r\n\r\n\t\t\t\t\tuniforms.shadowBias = light.shadow.bias;\r\n\t\t\t\t\tuniforms.shadowRadius = light.shadow.radius;\r\n\t\t\t\t\tuniforms.shadowMapSize = light.shadow.mapSize;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_lights.directionalShadowMap[ directionalLength ] = shadowMap;\r\n\t\t\t\t_lights.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\r\n\t\t\t\t_lights.directional[ directionalLength ++ ] = uniforms;\r\n\r\n\t\t\t} else if ( light instanceof THREE.SpotLight ) {\r\n\r\n\t\t\t\tvar uniforms = lightCache.get( light );\r\n\r\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\r\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\r\n\r\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\r\n\t\t\t\tuniforms.distance = distance;\r\n\r\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\r\n\t\t\t\t_vector3.setFromMatrixPosition( light.target.matrixWorld );\r\n\t\t\t\tuniforms.direction.sub( _vector3 );\r\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\r\n\r\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\r\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\r\n\t\t\t\tuniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay;\r\n\r\n\t\t\t\tuniforms.shadow = light.castShadow;\r\n\r\n\t\t\t\tif ( light.castShadow ) {\r\n\r\n\t\t\t\t\tuniforms.shadowBias = light.shadow.bias;\r\n\t\t\t\t\tuniforms.shadowRadius = light.shadow.radius;\r\n\t\t\t\t\tuniforms.shadowMapSize = light.shadow.mapSize;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_lights.spotShadowMap[ spotLength ] = shadowMap;\r\n\t\t\t\t_lights.spotShadowMatrix[ spotLength ] = light.shadow.matrix;\r\n\t\t\t\t_lights.spot[ spotLength ++ ] = uniforms;\r\n\r\n\t\t\t} else if ( light instanceof THREE.PointLight ) {\r\n\r\n\t\t\t\tvar uniforms = lightCache.get( light );\r\n\r\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\r\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\r\n\r\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\r\n\t\t\t\tuniforms.distance = light.distance;\r\n\t\t\t\tuniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay;\r\n\r\n\t\t\t\tuniforms.shadow = light.castShadow;\r\n\r\n\t\t\t\tif ( light.castShadow ) {\r\n\r\n\t\t\t\t\tuniforms.shadowBias = light.shadow.bias;\r\n\t\t\t\t\tuniforms.shadowRadius = light.shadow.radius;\r\n\t\t\t\t\tuniforms.shadowMapSize = light.shadow.mapSize;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_lights.pointShadowMap[ pointLength ] = shadowMap;\r\n\r\n\t\t\t\tif ( _lights.pointShadowMatrix[ pointLength ] === undefined ) {\r\n\r\n\t\t\t\t\t_lights.pointShadowMatrix[ pointLength ] = new THREE.Matrix4();\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// for point lights we set the shadow matrix to be a translation-only matrix\r\n\t\t\t\t// equal to inverse of the light's position\r\n\t\t\t\t_vector3.setFromMatrixPosition( light.matrixWorld ).negate();\r\n\t\t\t\t_lights.pointShadowMatrix[ pointLength ].identity().setPosition( _vector3 );\r\n\r\n\t\t\t\t_lights.point[ pointLength ++ ] = uniforms;\r\n\r\n\t\t\t} else if ( light instanceof THREE.HemisphereLight ) {\r\n\r\n\t\t\t\tvar uniforms = lightCache.get( light );\r\n\r\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\r\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\r\n\t\t\t\tuniforms.direction.normalize();\r\n\r\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\r\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\r\n\r\n\t\t\t\t_lights.hemi[ hemiLength ++ ] = uniforms;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t_lights.ambient[ 0 ] = r;\r\n\t\t_lights.ambient[ 1 ] = g;\r\n\t\t_lights.ambient[ 2 ] = b;\r\n\r\n\t\t_lights.directional.length = directionalLength;\r\n\t\t_lights.spot.length = spotLength;\r\n\t\t_lights.point.length = pointLength;\r\n\t\t_lights.hemi.length = hemiLength;\r\n\r\n\t\t_lights.hash = directionalLength + ',' + pointLength + ',' + spotLength + ',' + hemiLength + ',' + _lights.shadows.length;\r\n\r\n\t}\r\n\r\n\t// GL state setting\r\n\r\n\tthis.setFaceCulling = function ( cullFace, frontFaceDirection ) {\r\n\r\n\t\tstate.setCullFace( cullFace );\r\n\t\tstate.setFlipSided( frontFaceDirection === THREE.FrontFaceDirectionCW );\r\n\r\n\t};\r\n\r\n\t// Textures\r\n\r\n\tfunction allocTextureUnit() {\r\n\r\n\t\tvar textureUnit = _usedTextureUnits;\r\n\r\n\t\tif ( textureUnit >= capabilities.maxTextures ) {\r\n\r\n\t\t\tconsole.warn( 'WebGLRenderer: trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures );\r\n\r\n\t\t}\r\n\r\n\t\t_usedTextureUnits += 1;\r\n\r\n\t\treturn textureUnit;\r\n\r\n\t}\r\n\r\n\tfunction setTextureParameters ( textureType, texture, isPowerOfTwoImage ) {\r\n\r\n\t\tvar extension;\r\n\r\n\t\tif ( isPowerOfTwoImage ) {\r\n\r\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, paramThreeToGL( texture.wrapS ) );\r\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, paramThreeToGL( texture.wrapT ) );\r\n\r\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, paramThreeToGL( texture.magFilter ) );\r\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, paramThreeToGL( texture.minFilter ) );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE );\r\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE );\r\n\r\n\t\t\tif ( texture.wrapS !== THREE.ClampToEdgeWrapping || texture.wrapT !== THREE.ClampToEdgeWrapping ) {\r\n\r\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.', texture );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) );\r\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) );\r\n\r\n\t\t\tif ( texture.minFilter !== THREE.NearestFilter && texture.minFilter !== THREE.LinearFilter ) {\r\n\r\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.', texture );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\textension = extensions.get( 'EXT_texture_filter_anisotropic' );\r\n\r\n\t\tif ( extension ) {\r\n\r\n\t\t\tif ( texture.type === THREE.FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return;\r\n\t\t\tif ( texture.type === THREE.HalfFloatType && extensions.get( 'OES_texture_half_float_linear' ) === null ) return;\r\n\r\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\r\n\r\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, _this.getMaxAnisotropy() ) );\r\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction uploadTexture( textureProperties, texture, slot ) {\r\n\r\n\t\tif ( textureProperties.__webglInit === undefined ) {\r\n\r\n\t\t\ttextureProperties.__webglInit = true;\r\n\r\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\r\n\r\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\r\n\r\n\t\t\t_infoMemory.textures ++;\r\n\r\n\t\t}\r\n\r\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\r\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\r\n\r\n\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\r\n\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\r\n\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\r\n\r\n\t\tvar image = clampToMaxSize( texture.image, capabilities.maxTextureSize );\r\n\r\n\t\tif ( textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( image ) === false ) {\r\n\r\n\t\t\timage = makePowerOfTwo( image );\r\n\r\n\t\t}\r\n\r\n\t\tvar isPowerOfTwoImage = isPowerOfTwo( image ),\r\n\t\tglFormat = paramThreeToGL( texture.format ),\r\n\t\tglType = paramThreeToGL( texture.type );\r\n\r\n\t\tsetTextureParameters( _gl.TEXTURE_2D, texture, isPowerOfTwoImage );\r\n\r\n\t\tvar mipmap, mipmaps = texture.mipmaps;\r\n\r\n\t\tif ( texture instanceof THREE.DepthTexture ) {\r\n\r\n\t\t\t// populate depth texture with dummy data\r\n\r\n\t\t\tvar internalFormat = _gl.DEPTH_COMPONENT;\r\n\r\n\t\t\tif ( texture.type === THREE.FloatType ) {\r\n\r\n\t\t\t\tif ( !_isWebGL2 ) throw new Error('Float Depth Texture only supported in WebGL2.0');\r\n\t\t\t\tinternalFormat = _gl.DEPTH_COMPONENT32F;\r\n\r\n\t\t\t} else if ( _isWebGL2 ) {\r\n\r\n\t\t\t\t// WebGL 2.0 requires signed internalformat for glTexImage2D\r\n\t\t\t\tinternalFormat = _gl.DEPTH_COMPONENT16;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, internalFormat, image.width, image.height, 0, glFormat, glType, null );\r\n\r\n\t\t} else if ( texture instanceof THREE.DataTexture ) {\r\n\r\n\t\t\t// use manually created mipmaps if available\r\n\t\t\t// if there are no manual mipmaps\r\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\r\n\r\n\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\r\n\r\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\tmipmap = mipmaps[ i ];\r\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttexture.generateMipmaps = false;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glFormat, image.width, image.height, 0, glFormat, glType, image.data );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( texture instanceof THREE.CompressedTexture ) {\r\n\r\n\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tmipmap = mipmaps[ i ];\r\n\r\n\t\t\t\tif ( texture.format !== THREE.RGBAFormat && texture.format !== THREE.RGBFormat ) {\r\n\r\n\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\r\n\r\n\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, mipmap.data );\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()\" );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// regular Texture (image, video, canvas)\r\n\r\n\t\t\t// use manually created mipmaps if available\r\n\t\t\t// if there are no manual mipmaps\r\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\r\n\r\n\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\r\n\r\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\r\n\r\n\t\t\t\t\tmipmap = mipmaps[ i ];\r\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, glFormat, glType, mipmap );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttexture.generateMipmaps = false;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glFormat, glFormat, glType, image );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( texture.generateMipmaps && isPowerOfTwoImage ) _gl.generateMipmap( _gl.TEXTURE_2D );\r\n\r\n\t\ttextureProperties.__version = texture.version;\r\n\r\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\r\n\r\n\t}\r\n\r\n\tfunction setTexture2D( texture, slot ) {\r\n\r\n\t\tvar textureProperties = properties.get( texture );\r\n\r\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\r\n\r\n\t\t\tvar image = texture.image;\r\n\r\n\t\t\tif ( image === undefined ) {\r\n\r\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined', texture );\r\n\t\t\t\treturn;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( image.complete === false ) {\r\n\r\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete', texture );\r\n\t\t\t\treturn;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tuploadTexture( textureProperties, texture, slot );\r\n\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\r\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\r\n\r\n\t}\r\n\r\n\tfunction clampToMaxSize ( image, maxSize ) {\r\n\r\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\r\n\r\n\t\t\t// Warning: Scaling through the canvas will only work with images that use\r\n\t\t\t// premultiplied alpha.\r\n\r\n\t\t\tvar scale = maxSize / Math.max( image.width, image.height );\r\n\r\n\t\t\tvar canvas = document.createElement( 'canvas' );\r\n\t\t\tcanvas.width = Math.floor( image.width * scale );\r\n\t\t\tcanvas.height = Math.floor( image.height * scale );\r\n\r\n\t\t\tvar context = canvas.getContext( '2d' );\r\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height );\r\n\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: image is too big (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height, image );\r\n\r\n\t\t\treturn canvas;\r\n\r\n\t\t}\r\n\r\n\t\treturn image;\r\n\r\n\t}\r\n\r\n\tfunction isPowerOfTwo( image ) {\r\n\r\n\t\treturn THREE.Math.isPowerOfTwo( image.width ) && THREE.Math.isPowerOfTwo( image.height );\r\n\r\n\t}\r\n\r\n\tfunction textureNeedsPowerOfTwo( texture ) {\r\n\r\n\t\tif ( texture.wrapS !== THREE.ClampToEdgeWrapping || texture.wrapT !== THREE.ClampToEdgeWrapping ) return true;\r\n\t\tif ( texture.minFilter !== THREE.NearestFilter && texture.minFilter !== THREE.LinearFilter ) return true;\r\n\r\n\t\treturn false;\r\n\r\n\t}\r\n\r\n\tfunction makePowerOfTwo( image ) {\r\n\r\n\t\tif ( image instanceof HTMLImageElement || image instanceof HTMLCanvasElement ) {\r\n\r\n\t\t\tvar canvas = document.createElement( 'canvas' );\r\n\t\t\tcanvas.width = THREE.Math.nearestPowerOfTwo( image.width );\r\n\t\t\tcanvas.height = THREE.Math.nearestPowerOfTwo( image.height );\r\n\r\n\t\t\tvar context = canvas.getContext( '2d' );\r\n\t\t\tcontext.drawImage( image, 0, 0, canvas.width, canvas.height );\r\n\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: image is not power of two (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height, image );\r\n\r\n\t\t\treturn canvas;\r\n\r\n\t\t}\r\n\r\n\t\treturn image;\r\n\r\n\t}\r\n\r\n\tfunction setTextureCube ( texture, slot ) {\r\n\r\n\t\tvar textureProperties = properties.get( texture );\r\n\r\n\t\tif ( texture.image.length === 6 ) {\r\n\r\n\t\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\r\n\r\n\t\t\t\tif ( ! textureProperties.__image__webglTextureCube ) {\r\n\r\n\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\r\n\r\n\t\t\t\t\ttextureProperties.__image__webglTextureCube = _gl.createTexture();\r\n\r\n\t\t\t\t\t_infoMemory.textures ++;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\r\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\r\n\r\n\t\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\r\n\r\n\t\t\t\tvar isCompressed = texture instanceof THREE.CompressedTexture;\r\n\t\t\t\tvar isDataTexture = texture.image[ 0 ] instanceof THREE.DataTexture;\r\n\r\n\t\t\t\tvar cubeImage = [];\r\n\r\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\r\n\r\n\t\t\t\t\tif ( _this.autoScaleCubemaps && ! isCompressed && ! isDataTexture ) {\r\n\r\n\t\t\t\t\t\tcubeImage[ i ] = clampToMaxSize( texture.image[ i ], capabilities.maxCubemapSize );\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar image = cubeImage[ 0 ],\r\n\t\t\t\tisPowerOfTwoImage = isPowerOfTwo( image ),\r\n\t\t\t\tglFormat = paramThreeToGL( texture.format ),\r\n\t\t\t\tglType = paramThreeToGL( texture.type );\r\n\r\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, isPowerOfTwoImage );\r\n\r\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\r\n\r\n\t\t\t\t\tif ( ! isCompressed ) {\r\n\r\n\t\t\t\t\t\tif ( isDataTexture ) {\r\n\r\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\r\n\r\n\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, glFormat, glType, cubeImage[ i ] );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tvar mipmap, mipmaps = cubeImage[ i ].mipmaps;\r\n\r\n\t\t\t\t\t\tfor ( var j = 0, jl = mipmaps.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\t\t\t\tmipmap = mipmaps[ j ];\r\n\r\n\t\t\t\t\t\t\tif ( texture.format !== THREE.RGBAFormat && texture.format !== THREE.RGBFormat ) {\r\n\r\n\t\t\t\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\r\n\r\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, mipmap.data );\r\n\r\n\t\t\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()\" );\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( texture.generateMipmaps && isPowerOfTwoImage ) {\r\n\r\n\t\t\t\t\t_gl.generateMipmap( _gl.TEXTURE_CUBE_MAP );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttextureProperties.__version = texture.version;\r\n\r\n\t\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\r\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction setTextureCubeDynamic ( texture, slot ) {\r\n\r\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\r\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, properties.get( texture ).__webglTexture );\r\n\r\n\t}\r\n\r\n\tthis.allocTextureUnit = allocTextureUnit;\r\n\r\n\t//this.setTexture2D = setTexture2D;\r\n\tthis.setTexture2D = ( function() {\r\n\r\n\t\tvar warned = false;\r\n\r\n\t\t// backwards compatibility: peel texture.texture\r\n\t\treturn function( texture, slot ) {\r\n\r\n\t\t\tif ( texture instanceof THREE.WebGLRenderTarget ) {\r\n\r\n\t\t\t\tif ( ! warned ) {\r\n\r\n\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead.\" );\r\n\t\t\t\t\twarned = true;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttexture = texture.texture;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tsetTexture2D( texture, slot );\r\n\r\n\t\t};\r\n\r\n\t}() );\r\n\r\n\tthis.setTexture = ( function() {\r\n\r\n\t\tvar warned = false;\r\n\r\n\t\treturn function( texture, slot ) {\r\n\r\n\t\t\tif ( ! warned ) {\r\n\r\n\t\t\t\tconsole.warn( \"THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead.\" );\r\n\t\t\t\twarned = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_this.setTexture2D( texture, slot );\r\n\r\n\t\t};\r\n\r\n\t}() );\r\n\r\n\tthis.setTextureCube = ( function() {\r\n\r\n\t\tvar warned = false;\r\n\r\n\t\treturn function( texture, slot ) {\r\n\r\n\t\t\t// backwards compatibility: peel texture.texture\r\n\t\t\tif ( texture instanceof THREE.WebGLRenderTargetCube ) {\r\n\r\n\t\t\t\tif ( ! warned ) {\r\n\r\n\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead.\" );\r\n\t\t\t\t\twarned = true;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttexture = texture.texture;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// currently relying on the fact that WebGLRenderTargetCube.texture is a Texture and NOT a CubeTexture\r\n\t\t\t// TODO: unify these code paths\r\n\t\t\tif ( texture instanceof THREE.CubeTexture ||\r\n\t\t\t\t ( Array.isArray( texture.image ) && texture.image.length === 6 ) ) {\r\n\r\n\t\t\t\t// CompressedTexture can have Array in image :/\r\n\r\n\t\t\t\t// this function alone should take care of cube textures\r\n\t\t\t\tsetTextureCube( texture, slot );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// assumed: texture property of THREE.WebGLRenderTargetCube\r\n\r\n\t\t\t\tsetTextureCubeDynamic( texture, slot );\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t}() );\r\n\r\n\t// Render targets\r\n\r\n\t// Setup storage for target texture and bind it to correct framebuffer\r\n\tfunction setupFrameBufferTexture ( framebuffer, renderTarget, attachment, textureTarget ) {\r\n\r\n\t\tvar glFormat = paramThreeToGL( renderTarget.texture.format );\r\n\t\tvar glType = paramThreeToGL( renderTarget.texture.type );\r\n\t\tstate.texImage2D( textureTarget, 0, glFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\r\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\r\n\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );\r\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\r\n\r\n\t}\r\n\r\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\r\n\tfunction setupRenderBufferStorage ( renderbuffer, renderTarget ) {\r\n\r\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\r\n\r\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\r\n\r\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_COMPONENT16, renderTarget.width, renderTarget.height );\r\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\r\n\r\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\r\n\r\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height );\r\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// FIXME: We don't support !depth !stencil\r\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.RGBA4, renderTarget.width, renderTarget.height );\r\n\r\n\t\t}\r\n\r\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\r\n\r\n\t}\r\n\r\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\r\n\tfunction setupDepthTexture ( framebuffer, renderTarget ) {\r\n\r\n\t\tvar isCube = ( renderTarget instanceof THREE.WebGLRenderTargetCube );\r\n\t\tif ( isCube ) throw new Error('Depth Texture with cube render targets is not supported!');\r\n\r\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\r\n\r\n\t\tif ( !( renderTarget.depthTexture instanceof THREE.DepthTexture ) ) {\r\n\r\n\t\t\tthrow new Error('renderTarget.depthTexture must be an instance of THREE.DepthTexture');\r\n\r\n\t\t}\r\n\r\n\t\t// upload an empty depth texture with framebuffer size\r\n\t\tif ( !properties.get( renderTarget.depthTexture ).__webglTexture ||\r\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\r\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\r\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\r\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\r\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\r\n\t\t}\r\n\r\n\t\t_this.setTexture2D( renderTarget.depthTexture, 0 );\r\n\r\n\t\tvar webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\r\n\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\r\n\r\n\t}\r\n\r\n\t// Setup GL resources for a non-texture depth buffer\r\n\tfunction setupDepthRenderbuffer( renderTarget ) {\r\n\r\n\t\tvar renderTargetProperties = properties.get( renderTarget );\r\n\r\n\t\tvar isCube = ( renderTarget instanceof THREE.WebGLRenderTargetCube );\r\n\r\n\t\tif ( renderTarget.depthTexture ) {\r\n\r\n\t\t\tif ( isCube ) throw new Error('target.depthTexture not supported in Cube render targets');\r\n\r\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tif ( isCube ) {\r\n\r\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\r\n\r\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\r\n\r\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );\r\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\r\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\r\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\r\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\r\n\r\n\t}\r\n\r\n\t// Set up GL resources for the render target\r\n\tfunction setupRenderTarget( renderTarget ) {\r\n\r\n\t\tvar renderTargetProperties = properties.get( renderTarget );\r\n\t\tvar textureProperties = properties.get( renderTarget.texture );\r\n\r\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\r\n\r\n\t\ttextureProperties.__webglTexture = _gl.createTexture();\r\n\r\n\t\t_infoMemory.textures ++;\r\n\r\n\t\tvar isCube = ( renderTarget instanceof THREE.WebGLRenderTargetCube );\r\n\t\tvar isTargetPowerOfTwo = THREE.Math.isPowerOfTwo( renderTarget.width ) && THREE.Math.isPowerOfTwo( renderTarget.height );\r\n\r\n\t\t// Setup framebuffer\r\n\r\n\t\tif ( isCube ) {\r\n\r\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\r\n\r\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\r\n\r\n\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\r\n\r\n\t\t}\r\n\r\n\t\t// Setup color buffer\r\n\r\n\t\tif ( isCube ) {\r\n\r\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );\r\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, isTargetPowerOfTwo );\r\n\r\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\r\n\r\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( renderTarget.texture.generateMipmaps && isTargetPowerOfTwo ) _gl.generateMipmap( _gl.TEXTURE_CUBE_MAP );\r\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, null );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\r\n\t\t\tsetTextureParameters( _gl.TEXTURE_2D, renderTarget.texture, isTargetPowerOfTwo );\r\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );\r\n\r\n\t\t\tif ( renderTarget.texture.generateMipmaps && isTargetPowerOfTwo ) _gl.generateMipmap( _gl.TEXTURE_2D );\r\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, null );\r\n\r\n\t\t}\r\n\r\n\t\t// Setup depth and stencil buffers\r\n\r\n\t\tif ( renderTarget.depthBuffer ) {\r\n\r\n\t\t\tsetupDepthRenderbuffer( renderTarget );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.getCurrentRenderTarget = function() {\r\n\r\n\t\treturn _currentRenderTarget;\r\n\r\n\t};\r\n\r\n\tthis.setRenderTarget = function ( renderTarget ) {\r\n\r\n\t\t_currentRenderTarget = renderTarget;\r\n\r\n\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\r\n\r\n\t\t\tsetupRenderTarget( renderTarget );\r\n\r\n\t\t}\r\n\r\n\t\tvar isCube = ( renderTarget instanceof THREE.WebGLRenderTargetCube );\r\n\t\tvar framebuffer;\r\n\r\n\t\tif ( renderTarget ) {\r\n\r\n\t\t\tvar renderTargetProperties = properties.get( renderTarget );\r\n\r\n\t\t\tif ( isCube ) {\r\n\r\n\t\t\t\tframebuffer = renderTargetProperties.__webglFramebuffer[ renderTarget.activeCubeFace ];\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tframebuffer = renderTargetProperties.__webglFramebuffer;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_currentScissor.copy( renderTarget.scissor );\r\n\t\t\t_currentScissorTest = renderTarget.scissorTest;\r\n\r\n\t\t\t_currentViewport.copy( renderTarget.viewport );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tframebuffer = null;\r\n\r\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio );\r\n\t\t\t_currentScissorTest = _scissorTest;\r\n\r\n\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio );\r\n\r\n\t\t}\r\n\r\n\t\tif ( _currentFramebuffer !== framebuffer ) {\r\n\r\n\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\r\n\t\t\t_currentFramebuffer = framebuffer;\r\n\r\n\t\t}\r\n\r\n\t\tstate.scissor( _currentScissor );\r\n\t\tstate.setScissorTest( _currentScissorTest );\r\n\r\n\t\tstate.viewport( _currentViewport );\r\n\r\n\t\tif ( isCube ) {\r\n\r\n\t\t\tvar textureProperties = properties.get( renderTarget.texture );\r\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, textureProperties.__webglTexture, renderTarget.activeMipMapLevel );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer ) {\r\n\r\n\t\tif ( renderTarget instanceof THREE.WebGLRenderTarget === false ) {\r\n\r\n\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tvar framebuffer = properties.get( renderTarget ).__webglFramebuffer;\r\n\r\n\t\tif ( framebuffer ) {\r\n\r\n\t\t\tvar restore = false;\r\n\r\n\t\t\tif ( framebuffer !== _currentFramebuffer ) {\r\n\r\n\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\r\n\r\n\t\t\t\trestore = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t\ttry {\r\n\r\n\t\t\t\tvar texture = renderTarget.texture;\r\n\r\n\t\t\t\tif ( texture.format !== THREE.RGBAFormat && paramThreeToGL( texture.format ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {\r\n\r\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( texture.type !== THREE.UnsignedByteType &&\r\n\t\t\t\t paramThreeToGL( texture.type ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) &&\r\n\t\t\t\t ! ( texture.type === THREE.FloatType && extensions.get( 'WEBGL_color_buffer_float' ) ) &&\r\n\t\t\t\t ! ( texture.type === THREE.HalfFloatType && extensions.get( 'EXT_color_buffer_half_float' ) ) ) {\r\n\r\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( _gl.checkFramebufferStatus( _gl.FRAMEBUFFER ) === _gl.FRAMEBUFFER_COMPLETE ) {\r\n\r\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\r\n\r\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\r\n\r\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, paramThreeToGL( texture.format ), paramThreeToGL( texture.type ), buffer );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} finally {\r\n\r\n\t\t\t\tif ( restore ) {\r\n\r\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, _currentFramebuffer );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tfunction updateRenderTargetMipmap( renderTarget ) {\r\n\r\n\t\tvar target = renderTarget instanceof THREE.WebGLRenderTargetCube ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;\r\n\t\tvar texture = properties.get( renderTarget.texture ).__webglTexture;\r\n\r\n\t\tstate.bindTexture( target, texture );\r\n\t\t_gl.generateMipmap( target );\r\n\t\tstate.bindTexture( target, null );\r\n\r\n\t}\r\n\r\n\t// Fallback filters for non-power-of-2 textures\r\n\r\n\tfunction filterFallback ( f ) {\r\n\r\n\t\tif ( f === THREE.NearestFilter || f === THREE.NearestMipMapNearestFilter || f === THREE.NearestMipMapLinearFilter ) {\r\n\r\n\t\t\treturn _gl.NEAREST;\r\n\r\n\t\t}\r\n\r\n\t\treturn _gl.LINEAR;\r\n\r\n\t}\r\n\r\n\t// Map three.js constants to WebGL constants\r\n\r\n\tfunction paramThreeToGL ( p ) {\r\n\r\n\t\tvar extension;\r\n\r\n\t\tif ( p === THREE.RepeatWrapping ) return _gl.REPEAT;\r\n\t\tif ( p === THREE.ClampToEdgeWrapping ) return _gl.CLAMP_TO_EDGE;\r\n\t\tif ( p === THREE.MirroredRepeatWrapping ) return _gl.MIRRORED_REPEAT;\r\n\r\n\t\tif ( p === THREE.NearestFilter ) return _gl.NEAREST;\r\n\t\tif ( p === THREE.NearestMipMapNearestFilter ) return _gl.NEAREST_MIPMAP_NEAREST;\r\n\t\tif ( p === THREE.NearestMipMapLinearFilter ) return _gl.NEAREST_MIPMAP_LINEAR;\r\n\r\n\t\tif ( p === THREE.LinearFilter ) return _gl.LINEAR;\r\n\t\tif ( p === THREE.LinearMipMapNearestFilter ) return _gl.LINEAR_MIPMAP_NEAREST;\r\n\t\tif ( p === THREE.LinearMipMapLinearFilter ) return _gl.LINEAR_MIPMAP_LINEAR;\r\n\r\n\t\tif ( p === THREE.UnsignedByteType ) return _gl.UNSIGNED_BYTE;\r\n\t\tif ( p === THREE.UnsignedShort4444Type ) return _gl.UNSIGNED_SHORT_4_4_4_4;\r\n\t\tif ( p === THREE.UnsignedShort5551Type ) return _gl.UNSIGNED_SHORT_5_5_5_1;\r\n\t\tif ( p === THREE.UnsignedShort565Type ) return _gl.UNSIGNED_SHORT_5_6_5;\r\n\r\n\t\tif ( p === THREE.ByteType ) return _gl.BYTE;\r\n\t\tif ( p === THREE.ShortType ) return _gl.SHORT;\r\n\t\tif ( p === THREE.UnsignedShortType ) return _gl.UNSIGNED_SHORT;\r\n\t\tif ( p === THREE.IntType ) return _gl.INT;\r\n\t\tif ( p === THREE.UnsignedIntType ) return _gl.UNSIGNED_INT;\r\n\t\tif ( p === THREE.FloatType ) return _gl.FLOAT;\r\n\r\n\t\textension = extensions.get( 'OES_texture_half_float' );\r\n\r\n\t\tif ( extension !== null ) {\r\n\r\n\t\t\tif ( p === THREE.HalfFloatType ) return extension.HALF_FLOAT_OES;\r\n\r\n\t\t}\r\n\r\n\t\tif ( p === THREE.AlphaFormat ) return _gl.ALPHA;\r\n\t\tif ( p === THREE.RGBFormat ) return _gl.RGB;\r\n\t\tif ( p === THREE.RGBAFormat ) return _gl.RGBA;\r\n\t\tif ( p === THREE.LuminanceFormat ) return _gl.LUMINANCE;\r\n\t\tif ( p === THREE.LuminanceAlphaFormat ) return _gl.LUMINANCE_ALPHA;\r\n\t\tif ( p === THREE.DepthFormat ) return _gl.DEPTH_COMPONENT;\r\n\r\n\t\tif ( p === THREE.AddEquation ) return _gl.FUNC_ADD;\r\n\t\tif ( p === THREE.SubtractEquation ) return _gl.FUNC_SUBTRACT;\r\n\t\tif ( p === THREE.ReverseSubtractEquation ) return _gl.FUNC_REVERSE_SUBTRACT;\r\n\r\n\t\tif ( p === THREE.ZeroFactor ) return _gl.ZERO;\r\n\t\tif ( p === THREE.OneFactor ) return _gl.ONE;\r\n\t\tif ( p === THREE.SrcColorFactor ) return _gl.SRC_COLOR;\r\n\t\tif ( p === THREE.OneMinusSrcColorFactor ) return _gl.ONE_MINUS_SRC_COLOR;\r\n\t\tif ( p === THREE.SrcAlphaFactor ) return _gl.SRC_ALPHA;\r\n\t\tif ( p === THREE.OneMinusSrcAlphaFactor ) return _gl.ONE_MINUS_SRC_ALPHA;\r\n\t\tif ( p === THREE.DstAlphaFactor ) return _gl.DST_ALPHA;\r\n\t\tif ( p === THREE.OneMinusDstAlphaFactor ) return _gl.ONE_MINUS_DST_ALPHA;\r\n\r\n\t\tif ( p === THREE.DstColorFactor ) return _gl.DST_COLOR;\r\n\t\tif ( p === THREE.OneMinusDstColorFactor ) return _gl.ONE_MINUS_DST_COLOR;\r\n\t\tif ( p === THREE.SrcAlphaSaturateFactor ) return _gl.SRC_ALPHA_SATURATE;\r\n\r\n\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\r\n\r\n\t\tif ( extension !== null ) {\r\n\r\n\t\t\tif ( p === THREE.RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\r\n\t\t\tif ( p === THREE.RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\r\n\t\t\tif ( p === THREE.RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\r\n\t\t\tif ( p === THREE.RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\r\n\r\n\t\t}\r\n\r\n\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\r\n\r\n\t\tif ( extension !== null ) {\r\n\r\n\t\t\tif ( p === THREE.RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\r\n\t\t\tif ( p === THREE.RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\r\n\t\t\tif ( p === THREE.RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\r\n\t\t\tif ( p === THREE.RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\r\n\r\n\t\t}\r\n\r\n\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\r\n\r\n\t\tif ( extension !== null ) {\r\n\r\n\t\t\tif ( p === THREE.RGB_ETC1_Format ) return extension.COMPRESSED_RGB_ETC1_WEBGL;\r\n\r\n\t\t}\r\n\r\n\t\textension = extensions.get( 'EXT_blend_minmax' );\r\n\r\n\t\tif ( extension !== null ) {\r\n\r\n\t\t\tif ( p === THREE.MinEquation ) return extension.MIN_EXT;\r\n\t\t\tif ( p === THREE.MaxEquation ) return extension.MAX_EXT;\r\n\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/renderers/WebGLRenderTarget.js\r\n\r\n/**\r\n * @author szimek / https://github.com/szimek/\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author Marius Kintel / https://github.com/kintel\r\n */\r\n\r\n/*\r\n In options, we can specify:\r\n * Texture parameters for an auto-generated target texture\r\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\r\n*/\r\nTHREE.WebGLRenderTarget = function ( width, height, options ) {\r\n\r\n\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\tthis.width = width;\r\n\tthis.height = height;\r\n\r\n\tthis.scissor = new THREE.Vector4( 0, 0, width, height );\r\n\tthis.scissorTest = false;\r\n\r\n\tthis.viewport = new THREE.Vector4( 0, 0, width, height );\r\n\r\n\toptions = options || {};\r\n\r\n\tif ( options.minFilter === undefined ) options.minFilter = THREE.LinearFilter;\r\n\r\n\tthis.texture = new THREE.Texture( undefined, undefined, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\r\n\r\n\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\r\n\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : true;\r\n\tthis.depthTexture = null;\r\n\r\n};\r\n\r\nObject.assign( THREE.WebGLRenderTarget.prototype, THREE.EventDispatcher.prototype, {\r\n\r\n\tsetSize: function ( width, height ) {\r\n\r\n\t\tif ( this.width !== width || this.height !== height ) {\r\n\r\n\t\t\tthis.width = width;\r\n\t\t\tthis.height = height;\r\n\r\n\t\t\tthis.dispose();\r\n\r\n\t\t}\r\n\r\n\t\tthis.viewport.set( 0, 0, width, height );\r\n\t\tthis.scissor.set( 0, 0, width, height );\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\treturn new this.constructor().copy( this );\r\n\r\n\t},\r\n\r\n\tcopy: function ( source ) {\r\n\r\n\t\tthis.width = source.width;\r\n\t\tthis.height = source.height;\r\n\r\n\t\tthis.viewport.copy( source.viewport );\r\n\r\n\t\tthis.texture = source.texture.clone();\r\n\r\n\t\tthis.depthBuffer = source.depthBuffer;\r\n\t\tthis.stencilBuffer = source.stencilBuffer;\r\n\t\tthis.depthTexture = source.depthTexture;\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tdispose: function () {\r\n\r\n\t\tthis.dispatchEvent( { type: 'dispose' } );\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/renderers/WebGLRenderTargetCube.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com\r\n */\r\n\r\nTHREE.WebGLRenderTargetCube = function ( width, height, options ) {\r\n\r\n\tTHREE.WebGLRenderTarget.call( this, width, height, options );\r\n\r\n\tthis.activeCubeFace = 0; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5\r\n\tthis.activeMipMapLevel = 0;\r\n\r\n};\r\n\r\nTHREE.WebGLRenderTargetCube.prototype = Object.create( THREE.WebGLRenderTarget.prototype );\r\nTHREE.WebGLRenderTargetCube.prototype.constructor = THREE.WebGLRenderTargetCube;\r\n\r\n// File:src/renderers/webgl/WebGLBufferRenderer.js\r\n\r\n/**\r\n* @author mrdoob / http://mrdoob.com/\r\n*/\r\n\r\nTHREE.WebGLBufferRenderer = function ( _gl, extensions, _infoRender ) {\r\n\r\n\tvar mode;\r\n\r\n\tfunction setMode( value ) {\r\n\r\n\t\tmode = value;\r\n\r\n\t}\r\n\r\n\tfunction render( start, count ) {\r\n\r\n\t\t_gl.drawArrays( mode, start, count );\r\n\r\n\t\t_infoRender.calls ++;\r\n\t\t_infoRender.vertices += count;\r\n\t\tif ( mode === _gl.TRIANGLES ) _infoRender.faces += count / 3;\r\n\r\n\t}\r\n\r\n\tfunction renderInstances( geometry ) {\r\n\r\n\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\r\n\r\n\t\tif ( extension === null ) {\r\n\r\n\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tvar position = geometry.attributes.position;\r\n\r\n\t\tvar count = 0;\r\n\r\n\t\tif ( position instanceof THREE.InterleavedBufferAttribute ) {\r\n\r\n\t\t\tcount = position.data.count;\r\n\r\n\t\t\textension.drawArraysInstancedANGLE( mode, 0, count, geometry.maxInstancedCount );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tcount = position.count;\r\n\r\n\t\t\textension.drawArraysInstancedANGLE( mode, 0, count, geometry.maxInstancedCount );\r\n\r\n\t\t}\r\n\r\n\t\t_infoRender.calls ++;\r\n\t\t_infoRender.vertices += count * geometry.maxInstancedCount;\r\n\t\tif ( mode === _gl.TRIANGLES ) _infoRender.faces += geometry.maxInstancedCount * count / 3;\r\n\r\n\t}\r\n\r\n\tthis.setMode = setMode;\r\n\tthis.render = render;\r\n\tthis.renderInstances = renderInstances;\r\n\r\n};\r\n\r\n// File:src/renderers/webgl/WebGLClipping.js\r\n\r\nTHREE.WebGLClipping = function() {\r\n\r\n\tvar scope = this,\r\n\r\n\t\tglobalState = null,\r\n\t\tnumGlobalPlanes = 0,\r\n\t\tlocalClippingEnabled = false,\r\n\t\trenderingShadows = false,\r\n\r\n\t\tplane = new THREE.Plane(),\r\n\t\tviewNormalMatrix = new THREE.Matrix3(),\r\n\r\n\t\tuniform = { value: null, needsUpdate: false };\r\n\r\n\tthis.uniform = uniform;\r\n\tthis.numPlanes = 0;\r\n\r\n\tthis.init = function( planes, enableLocalClipping, camera ) {\r\n\r\n\t\tvar enabled =\r\n\t\t\tplanes.length !== 0 ||\r\n\t\t\tenableLocalClipping ||\r\n\t\t\t// enable state of previous frame - the clipping code has to\r\n\t\t\t// run another frame in order to reset the state:\r\n\t\t\tnumGlobalPlanes !== 0 ||\r\n\t\t\tlocalClippingEnabled;\r\n\r\n\t\tlocalClippingEnabled = enableLocalClipping;\r\n\r\n\t\tglobalState = projectPlanes( planes, camera, 0 );\r\n\t\tnumGlobalPlanes = planes.length;\r\n\r\n\t\treturn enabled;\r\n\r\n\t};\r\n\r\n\tthis.beginShadows = function() {\r\n\r\n\t\trenderingShadows = true;\r\n\t\tprojectPlanes( null );\r\n\r\n\t};\r\n\r\n\tthis.endShadows = function() {\r\n\r\n\t\trenderingShadows = false;\r\n\t\tresetGlobalState();\r\n\r\n\t};\r\n\r\n\tthis.setState = function( planes, clipShadows, camera, cache, fromCache ) {\r\n\r\n\t\tif ( ! localClippingEnabled ||\r\n\t\t\t\tplanes === null || planes.length === 0 ||\r\n\t\t\t\trenderingShadows && ! clipShadows ) {\r\n\t\t\t// there's no local clipping\r\n\r\n\t\t\tif ( renderingShadows ) {\r\n\t\t\t\t// there's no global clipping\r\n\r\n\t\t\t\tprojectPlanes( null );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tresetGlobalState();\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tvar nGlobal = renderingShadows ? 0 : numGlobalPlanes,\r\n\t\t\t\tlGlobal = nGlobal * 4,\r\n\r\n\t\t\t\tdstArray = cache.clippingState || null;\r\n\r\n\t\t\tuniform.value = dstArray; // ensure unique state\r\n\r\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, fromCache );\r\n\r\n\t\t\tfor ( var i = 0; i !== lGlobal; ++ i ) {\r\n\r\n\t\t\t\tdstArray[ i ] = globalState[ i ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tcache.clippingState = dstArray;\r\n\t\t\tthis.numPlanes += nGlobal;\r\n\r\n\t\t}\r\n\r\n\r\n\t};\r\n\r\n\tfunction resetGlobalState() {\r\n\r\n\t\tif ( uniform.value !== globalState ) {\r\n\r\n\t\t\tuniform.value = globalState;\r\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\r\n\r\n\t\t}\r\n\r\n\t\tscope.numPlanes = numGlobalPlanes;\r\n\r\n\t}\r\n\r\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\r\n\r\n\t\tvar nPlanes = planes !== null ? planes.length : 0,\r\n\t\t\tdstArray = null;\r\n\r\n\t\tif ( nPlanes !== 0 ) {\r\n\r\n\t\t\tdstArray = uniform.value;\r\n\r\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\r\n\r\n\t\t\t\tvar flatSize = dstOffset + nPlanes * 4,\r\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\r\n\r\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\r\n\r\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\r\n\r\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor ( var i = 0, i4 = dstOffset;\r\n\t\t\t\t\t\t\t\t\ti !== nPlanes; ++ i, i4 += 4 ) {\r\n\r\n\t\t\t\t\tplane.copy( planes[ i ] ).\r\n\t\t\t\t\t\t\tapplyMatrix4( viewMatrix, viewNormalMatrix );\r\n\r\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\r\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tuniform.value = dstArray;\r\n\t\t\tuniform.needsUpdate = true;\r\n\r\n\t\t}\r\n\r\n\t\tscope.numPlanes = nPlanes;\r\n\t\treturn dstArray;\r\n\r\n\t}\r\n\r\n};\r\n\r\n\r\n// File:src/renderers/webgl/WebGLIndexedBufferRenderer.js\r\n\r\n/**\r\n* @author mrdoob / http://mrdoob.com/\r\n*/\r\n\r\nTHREE.WebGLIndexedBufferRenderer = function ( _gl, extensions, _infoRender ) {\r\n\r\n\tvar mode;\r\n\r\n\tfunction setMode( value ) {\r\n\r\n\t\tmode = value;\r\n\r\n\t}\r\n\r\n\tvar type, size;\r\n\r\n\tfunction setIndex( index ) {\r\n\r\n\t\tif ( index.array instanceof Uint32Array && extensions.get( 'OES_element_index_uint' ) ) {\r\n\r\n\t\t\ttype = _gl.UNSIGNED_INT;\r\n\t\t\tsize = 4;\r\n\r\n\t\t} else {\r\n\r\n\t\t\ttype = _gl.UNSIGNED_SHORT;\r\n\t\t\tsize = 2;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction render( start, count ) {\r\n\r\n\t\t_gl.drawElements( mode, count, type, start * size );\r\n\r\n\t\t_infoRender.calls ++;\r\n\t\t_infoRender.vertices += count;\r\n\t\tif ( mode === _gl.TRIANGLES ) _infoRender.faces += count / 3;\r\n\r\n\t}\r\n\r\n\tfunction renderInstances( geometry, start, count ) {\r\n\r\n\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\r\n\r\n\t\tif ( extension === null ) {\r\n\r\n\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\textension.drawElementsInstancedANGLE( mode, count, type, start * size, geometry.maxInstancedCount );\r\n\r\n\t\t_infoRender.calls ++;\r\n\t\t_infoRender.vertices += count * geometry.maxInstancedCount;\r\n\t\tif ( mode === _gl.TRIANGLES ) _infoRender.faces += geometry.maxInstancedCount * count / 3;\r\n\t}\r\n\r\n\tthis.setMode = setMode;\r\n\tthis.setIndex = setIndex;\r\n\tthis.render = render;\r\n\tthis.renderInstances = renderInstances;\r\n\r\n};\r\n\r\n// File:src/renderers/webgl/WebGLExtensions.js\r\n\r\n/**\r\n* @author mrdoob / http://mrdoob.com/\r\n*/\r\n\r\nTHREE.WebGLExtensions = function ( gl ) {\r\n\r\n\tvar extensions = {};\r\n\r\n\tthis.get = function ( name ) {\r\n\r\n\t\tif ( extensions[ name ] !== undefined ) {\r\n\r\n\t\t\treturn extensions[ name ];\r\n\r\n\t\t}\r\n\r\n\t\tvar extension;\r\n\r\n\t\tswitch ( name ) {\r\n\r\n\t\t\tcase 'WEBGL_depth_texture':\r\n\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'EXT_texture_filter_anisotropic':\r\n\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'WEBGL_compressed_texture_s3tc':\r\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\r\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'WEBGL_compressed_texture_etc1':\r\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_etc1' );\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\t\textension = gl.getExtension( name );\r\n\r\n\t\t}\r\n\r\n\t\tif ( extension === null ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\r\n\r\n\t\t}\r\n\r\n\t\textensions[ name ] = extension;\r\n\r\n\t\treturn extension;\r\n\r\n\t};\r\n\r\n};\r\n\r\n// File:src/renderers/webgl/WebGLCapabilities.js\r\n\r\nTHREE.WebGLCapabilities = function ( gl, extensions, parameters ) {\r\n\r\n\tfunction getMaxPrecision( precision ) {\r\n\r\n\t\tif ( precision === 'highp' ) {\r\n\r\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\r\n\t\t\t gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\r\n\r\n\t\t\t\treturn 'highp';\r\n\r\n\t\t\t}\r\n\r\n\t\t\tprecision = 'mediump';\r\n\r\n\t\t}\r\n\r\n\t\tif ( precision === 'mediump' ) {\r\n\r\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\r\n\t\t\t gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\r\n\r\n\t\t\t\treturn 'mediump';\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn 'lowp';\r\n\r\n\t}\r\n\r\n\tthis.getMaxPrecision = getMaxPrecision;\r\n\r\n\tthis.precision = parameters.precision !== undefined ? parameters.precision : 'highp';\r\n\tthis.logarithmicDepthBuffer = parameters.logarithmicDepthBuffer !== undefined ? parameters.logarithmicDepthBuffer : false;\r\n\r\n\tthis.maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\r\n\tthis.maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\r\n\tthis.maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\r\n\tthis.maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\r\n\r\n\tthis.maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\r\n\tthis.maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\r\n\tthis.maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\r\n\tthis.maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\r\n\r\n\tthis.vertexTextures = this.maxVertexTextures > 0;\r\n\tthis.floatFragmentTextures = !! extensions.get( 'OES_texture_float' );\r\n\tthis.floatVertexTextures = this.vertexTextures && this.floatFragmentTextures;\r\n\r\n\tvar _maxPrecision = getMaxPrecision( this.precision );\r\n\r\n\tif ( _maxPrecision !== this.precision ) {\r\n\r\n\t\tconsole.warn( 'THREE.WebGLRenderer:', this.precision, 'not supported, using', _maxPrecision, 'instead.' );\r\n\t\tthis.precision = _maxPrecision;\r\n\r\n\t}\r\n\r\n\tif ( this.logarithmicDepthBuffer ) {\r\n\r\n\t\tthis.logarithmicDepthBuffer = !! extensions.get( 'EXT_frag_depth' );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/renderers/webgl/WebGLGeometries.js\r\n\r\n/**\r\n* @author mrdoob / http://mrdoob.com/\r\n*/\r\n\r\nTHREE.WebGLGeometries = function ( gl, properties, info ) {\r\n\r\n\tvar geometries = {};\r\n\r\n\tfunction get( object ) {\r\n\r\n\t\tvar geometry = object.geometry;\r\n\r\n\t\tif ( geometries[ geometry.id ] !== undefined ) {\r\n\r\n\t\t\treturn geometries[ geometry.id ];\r\n\r\n\t\t}\r\n\r\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\r\n\r\n\t\tvar buffergeometry;\r\n\r\n\t\tif ( geometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\t\tbuffergeometry = geometry;\r\n\r\n\t\t} else if ( geometry instanceof THREE.Geometry ) {\r\n\r\n\t\t\tif ( geometry._bufferGeometry === undefined ) {\r\n\r\n\t\t\t\tgeometry._bufferGeometry = new THREE.BufferGeometry().setFromObject( object );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tbuffergeometry = geometry._bufferGeometry;\r\n\r\n\t\t}\r\n\r\n\t\tgeometries[ geometry.id ] = buffergeometry;\r\n\r\n\t\tinfo.memory.geometries ++;\r\n\r\n\t\treturn buffergeometry;\r\n\r\n\t}\r\n\r\n\tfunction onGeometryDispose( event ) {\r\n\r\n\t\tvar geometry = event.target;\r\n\t\tvar buffergeometry = geometries[ geometry.id ];\r\n\r\n\t\tif ( buffergeometry.index !== null ) {\r\n\r\n\t\t\tdeleteAttribute( buffergeometry.index );\r\n\r\n\t\t}\r\n\r\n\t\tdeleteAttributes( buffergeometry.attributes );\r\n\r\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\r\n\r\n\t\tdelete geometries[ geometry.id ];\r\n\r\n\t\t// TODO\r\n\r\n\t\tvar property = properties.get( geometry );\r\n\r\n\t\tif ( property.wireframe ) {\r\n\r\n\t\t\tdeleteAttribute( property.wireframe );\r\n\r\n\t\t}\r\n\r\n\t\tproperties.delete( geometry );\r\n\r\n\t\tvar bufferproperty = properties.get( buffergeometry );\r\n\r\n\t\tif ( bufferproperty.wireframe ) {\r\n\r\n\t\t\tdeleteAttribute( bufferproperty.wireframe );\r\n\r\n\t\t}\r\n\r\n\t\tproperties.delete( buffergeometry );\r\n\r\n\t\t//\r\n\r\n\t\tinfo.memory.geometries --;\r\n\r\n\t}\r\n\r\n\tfunction getAttributeBuffer( attribute ) {\r\n\r\n\t\tif ( attribute instanceof THREE.InterleavedBufferAttribute ) {\r\n\r\n\t\t\treturn properties.get( attribute.data ).__webglBuffer;\r\n\r\n\t\t}\r\n\r\n\t\treturn properties.get( attribute ).__webglBuffer;\r\n\r\n\t}\r\n\r\n\tfunction deleteAttribute( attribute ) {\r\n\r\n\t\tvar buffer = getAttributeBuffer( attribute );\r\n\r\n\t\tif ( buffer !== undefined ) {\r\n\r\n\t\t\tgl.deleteBuffer( buffer );\r\n\t\t\tremoveAttributeBuffer( attribute );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction deleteAttributes( attributes ) {\r\n\r\n\t\tfor ( var name in attributes ) {\r\n\r\n\t\t\tdeleteAttribute( attributes[ name ] );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction removeAttributeBuffer( attribute ) {\r\n\r\n\t\tif ( attribute instanceof THREE.InterleavedBufferAttribute ) {\r\n\r\n\t\t\tproperties.delete( attribute.data );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tproperties.delete( attribute );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.get = get;\r\n\r\n};\r\n\r\n// File:src/renderers/webgl/WebGLLights.js\r\n\r\n/**\r\n* @author mrdoob / http://mrdoob.com/\r\n*/\r\n\r\nTHREE.WebGLLights = function () {\r\n\r\n\tvar lights = {};\r\n\r\n\tthis.get = function ( light ) {\r\n\r\n\t\tif ( lights[ light.id ] !== undefined ) {\r\n\r\n\t\t\treturn lights[ light.id ];\r\n\r\n\t\t}\r\n\r\n\t\tvar uniforms;\r\n\r\n\t\tswitch ( light.type ) {\r\n\r\n\t\t\tcase 'DirectionalLight':\r\n\t\t\t\tuniforms = {\r\n\t\t\t\t\tdirection: new THREE.Vector3(),\r\n\t\t\t\t\tcolor: new THREE.Color(),\r\n\r\n\t\t\t\t\tshadow: false,\r\n\t\t\t\t\tshadowBias: 0,\r\n\t\t\t\t\tshadowRadius: 1,\r\n\t\t\t\t\tshadowMapSize: new THREE.Vector2()\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'SpotLight':\r\n\t\t\t\tuniforms = {\r\n\t\t\t\t\tposition: new THREE.Vector3(),\r\n\t\t\t\t\tdirection: new THREE.Vector3(),\r\n\t\t\t\t\tcolor: new THREE.Color(),\r\n\t\t\t\t\tdistance: 0,\r\n\t\t\t\t\tconeCos: 0,\r\n\t\t\t\t\tpenumbraCos: 0,\r\n\t\t\t\t\tdecay: 0,\r\n\r\n\t\t\t\t\tshadow: false,\r\n\t\t\t\t\tshadowBias: 0,\r\n\t\t\t\t\tshadowRadius: 1,\r\n\t\t\t\t\tshadowMapSize: new THREE.Vector2()\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'PointLight':\r\n\t\t\t\tuniforms = {\r\n\t\t\t\t\tposition: new THREE.Vector3(),\r\n\t\t\t\t\tcolor: new THREE.Color(),\r\n\t\t\t\t\tdistance: 0,\r\n\t\t\t\t\tdecay: 0,\r\n\r\n\t\t\t\t\tshadow: false,\r\n\t\t\t\t\tshadowBias: 0,\r\n\t\t\t\t\tshadowRadius: 1,\r\n\t\t\t\t\tshadowMapSize: new THREE.Vector2()\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'HemisphereLight':\r\n\t\t\t\tuniforms = {\r\n\t\t\t\t\tdirection: new THREE.Vector3(),\r\n\t\t\t\t\tskyColor: new THREE.Color(),\r\n\t\t\t\t\tgroundColor: new THREE.Color()\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\r\n\t\t}\r\n\r\n\t\tlights[ light.id ] = uniforms;\r\n\r\n\t\treturn uniforms;\r\n\r\n\t};\r\n\r\n};\r\n\r\n// File:src/renderers/webgl/WebGLObjects.js\r\n\r\n/**\r\n* @author mrdoob / http://mrdoob.com/\r\n*/\r\n\r\nTHREE.WebGLObjects = function ( gl, properties, info ) {\r\n\r\n\tvar geometries = new THREE.WebGLGeometries( gl, properties, info );\r\n\r\n\t//\r\n\r\n\tfunction update( object ) {\r\n\r\n\t\t// TODO: Avoid updating twice (when using shadowMap). Maybe add frame counter.\r\n\r\n\t\tvar geometry = geometries.get( object );\r\n\r\n\t\tif ( object.geometry instanceof THREE.Geometry ) {\r\n\r\n\t\t\tgeometry.updateFromObject( object );\r\n\r\n\t\t}\r\n\r\n\t\tvar index = geometry.index;\r\n\t\tvar attributes = geometry.attributes;\r\n\r\n\t\tif ( index !== null ) {\r\n\r\n\t\t\tupdateAttribute( index, gl.ELEMENT_ARRAY_BUFFER );\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var name in attributes ) {\r\n\r\n\t\t\tupdateAttribute( attributes[ name ], gl.ARRAY_BUFFER );\r\n\r\n\t\t}\r\n\r\n\t\t// morph targets\r\n\r\n\t\tvar morphAttributes = geometry.morphAttributes;\r\n\r\n\t\tfor ( var name in morphAttributes ) {\r\n\r\n\t\t\tvar array = morphAttributes[ name ];\r\n\r\n\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tupdateAttribute( array[ i ], gl.ARRAY_BUFFER );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn geometry;\r\n\r\n\t}\r\n\r\n\tfunction updateAttribute( attribute, bufferType ) {\r\n\r\n\t\tvar data = ( attribute instanceof THREE.InterleavedBufferAttribute ) ? attribute.data : attribute;\r\n\r\n\t\tvar attributeProperties = properties.get( data );\r\n\r\n\t\tif ( attributeProperties.__webglBuffer === undefined ) {\r\n\r\n\t\t\tcreateBuffer( attributeProperties, data, bufferType );\r\n\r\n\t\t} else if ( attributeProperties.version !== data.version ) {\r\n\r\n\t\t\tupdateBuffer( attributeProperties, data, bufferType );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction createBuffer( attributeProperties, data, bufferType ) {\r\n\r\n\t\tattributeProperties.__webglBuffer = gl.createBuffer();\r\n\t\tgl.bindBuffer( bufferType, attributeProperties.__webglBuffer );\r\n\r\n\t\tvar usage = data.dynamic ? gl.DYNAMIC_DRAW : gl.STATIC_DRAW;\r\n\r\n\t\tgl.bufferData( bufferType, data.array, usage );\r\n\r\n\t\tattributeProperties.version = data.version;\r\n\r\n\t}\r\n\r\n\tfunction updateBuffer( attributeProperties, data, bufferType ) {\r\n\r\n\t\tgl.bindBuffer( bufferType, attributeProperties.__webglBuffer );\r\n\r\n\t\tif ( data.dynamic === false || data.updateRange.count === - 1 ) {\r\n\r\n\t\t\t// Not using update ranges\r\n\r\n\t\t\tgl.bufferSubData( bufferType, 0, data.array );\r\n\r\n\t\t} else if ( data.updateRange.count === 0 ) {\r\n\r\n\t\t\tconsole.error( 'THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually.' );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tgl.bufferSubData( bufferType, data.updateRange.offset * data.array.BYTES_PER_ELEMENT,\r\n\t\t\t\t\t\t\t data.array.subarray( data.updateRange.offset, data.updateRange.offset + data.updateRange.count ) );\r\n\r\n\t\t\tdata.updateRange.count = 0; // reset range\r\n\r\n\t\t}\r\n\r\n\t\tattributeProperties.version = data.version;\r\n\r\n\t}\r\n\r\n\tfunction getAttributeBuffer( attribute ) {\r\n\r\n\t\tif ( attribute instanceof THREE.InterleavedBufferAttribute ) {\r\n\r\n\t\t\treturn properties.get( attribute.data ).__webglBuffer;\r\n\r\n\t\t}\r\n\r\n\t\treturn properties.get( attribute ).__webglBuffer;\r\n\r\n\t}\r\n\r\n\tfunction getWireframeAttribute( geometry ) {\r\n\r\n\t\tvar property = properties.get( geometry );\r\n\r\n\t\tif ( property.wireframe !== undefined ) {\r\n\r\n\t\t\treturn property.wireframe;\r\n\r\n\t\t}\r\n\r\n\t\tvar indices = [];\r\n\r\n\t\tvar index = geometry.index;\r\n\t\tvar attributes = geometry.attributes;\r\n\t\tvar position = attributes.position;\r\n\r\n\t\t// console.time( 'wireframe' );\r\n\r\n\t\tif ( index !== null ) {\r\n\r\n\t\t\tvar edges = {};\r\n\t\t\tvar array = index.array;\r\n\r\n\t\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\r\n\r\n\t\t\t\tvar a = array[ i + 0 ];\r\n\t\t\t\tvar b = array[ i + 1 ];\r\n\t\t\t\tvar c = array[ i + 2 ];\r\n\r\n\t\t\t\tif ( checkEdge( edges, a, b ) ) indices.push( a, b );\r\n\t\t\t\tif ( checkEdge( edges, b, c ) ) indices.push( b, c );\r\n\t\t\t\tif ( checkEdge( edges, c, a ) ) indices.push( c, a );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tvar array = attributes.position.array;\r\n\r\n\t\t\tfor ( var i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\r\n\r\n\t\t\t\tvar a = i + 0;\r\n\t\t\t\tvar b = i + 1;\r\n\t\t\t\tvar c = i + 2;\r\n\r\n\t\t\t\tindices.push( a, b, b, c, c, a );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// console.timeEnd( 'wireframe' );\r\n\r\n\t\tvar TypeArray = position.count > 65535 ? Uint32Array : Uint16Array;\r\n\t\tvar attribute = new THREE.BufferAttribute( new TypeArray( indices ), 1 );\r\n\r\n\t\tupdateAttribute( attribute, gl.ELEMENT_ARRAY_BUFFER );\r\n\r\n\t\tproperty.wireframe = attribute;\r\n\r\n\t\treturn attribute;\r\n\r\n\t}\r\n\r\n\tfunction checkEdge( edges, a, b ) {\r\n\r\n\t\tif ( a > b ) {\r\n\r\n\t\t\tvar tmp = a;\r\n\t\t\ta = b;\r\n\t\t\tb = tmp;\r\n\r\n\t\t}\r\n\r\n\t\tvar list = edges[ a ];\r\n\r\n\t\tif ( list === undefined ) {\r\n\r\n\t\t\tedges[ a ] = [ b ];\r\n\t\t\treturn true;\r\n\r\n\t\t} else if ( list.indexOf( b ) === -1 ) {\r\n\r\n\t\t\tlist.push( b );\r\n\t\t\treturn true;\r\n\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t}\r\n\r\n\tthis.getAttributeBuffer = getAttributeBuffer;\r\n\tthis.getWireframeAttribute = getWireframeAttribute;\r\n\r\n\tthis.update = update;\r\n\r\n};\r\n\r\n// File:src/renderers/webgl/WebGLProgram.js\r\n\r\nTHREE.WebGLProgram = ( function () {\r\n\r\n\tvar programIdCount = 0;\r\n\r\n\tfunction getEncodingComponents( encoding ) {\r\n\r\n\t\tswitch ( encoding ) {\r\n\r\n\t\t\tcase THREE.LinearEncoding:\r\n\t\t\t\treturn [ 'Linear','( value )' ];\r\n\t\t\tcase THREE.sRGBEncoding:\r\n\t\t\t\treturn [ 'sRGB','( value )' ];\r\n\t\t\tcase THREE.RGBEEncoding:\r\n\t\t\t\treturn [ 'RGBE','( value )' ];\r\n\t\t\tcase THREE.RGBM7Encoding:\r\n\t\t\t\treturn [ 'RGBM','( value, 7.0 )' ];\r\n\t\t\tcase THREE.RGBM16Encoding:\r\n\t\t\t\treturn [ 'RGBM','( value, 16.0 )' ];\r\n\t\t\tcase THREE.RGBDEncoding:\r\n\t\t\t\treturn [ 'RGBD','( value, 256.0 )' ];\r\n\t\t\tcase THREE.GammaEncoding:\r\n\t\t\t\treturn [ 'Gamma','( value, float( GAMMA_FACTOR ) )' ];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error( 'unsupported encoding: ' + encoding );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction getTexelDecodingFunction( functionName, encoding ) {\r\n\r\n\t\tvar components = getEncodingComponents( encoding );\r\n\t\treturn \"vec4 \" + functionName + \"( vec4 value ) { return \" + components[ 0 ] + \"ToLinear\" + components[ 1 ] + \"; }\";\r\n\r\n\t}\r\n\r\n\tfunction getTexelEncodingFunction( functionName, encoding ) {\r\n\r\n\t\tvar components = getEncodingComponents( encoding );\r\n\t\treturn \"vec4 \" + functionName + \"( vec4 value ) { return LinearTo\" + components[ 0 ] + components[ 1 ] + \"; }\";\r\n\r\n\t}\r\n\r\n\tfunction getToneMappingFunction( functionName, toneMapping ) {\r\n\r\n\t\tvar toneMappingName;\r\n\r\n\t\tswitch ( toneMapping ) {\r\n\r\n\t\t\tcase THREE.LinearToneMapping:\r\n\t\t\t\ttoneMappingName = \"Linear\";\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase THREE.ReinhardToneMapping:\r\n\t\t\t\ttoneMappingName = \"Reinhard\";\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase THREE.Uncharted2ToneMapping:\r\n\t\t\t\ttoneMappingName = \"Uncharted2\";\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase THREE.CineonToneMapping:\r\n\t\t\t\ttoneMappingName = \"OptimizedCineon\";\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error( 'unsupported toneMapping: ' + toneMapping );\r\n\r\n\t\t}\r\n\r\n\t\treturn \"vec3 \" + functionName + \"( vec3 color ) { return \" + toneMappingName + \"ToneMapping( color ); }\";\r\n\r\n\t}\r\n\r\n\tfunction generateExtensions( extensions, parameters, rendererExtensions ) {\r\n\r\n\t\textensions = extensions || {};\r\n\r\n\t\tvar chunks = [\r\n\t\t\t( extensions.derivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.normalMap || parameters.flatShading ) ? '#extension GL_OES_standard_derivatives : enable' : '',\r\n\t\t\t( extensions.fragDepth || parameters.logarithmicDepthBuffer ) && rendererExtensions.get( 'EXT_frag_depth' ) ? '#extension GL_EXT_frag_depth : enable' : '',\r\n\t\t\t( extensions.drawBuffers ) && rendererExtensions.get( 'WEBGL_draw_buffers' ) ? '#extension GL_EXT_draw_buffers : require' : '',\r\n\t\t\t( extensions.shaderTextureLOD || parameters.envMap ) && rendererExtensions.get( 'EXT_shader_texture_lod' ) ? '#extension GL_EXT_shader_texture_lod : enable' : '',\r\n\t\t];\r\n\r\n\t\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\r\n\r\n\t}\r\n\r\n\tfunction generateDefines( defines ) {\r\n\r\n\t\tvar chunks = [];\r\n\r\n\t\tfor ( var name in defines ) {\r\n\r\n\t\t\tvar value = defines[ name ];\r\n\r\n\t\t\tif ( value === false ) continue;\r\n\r\n\t\t\tchunks.push( '#define ' + name + ' ' + value );\r\n\r\n\t\t}\r\n\r\n\t\treturn chunks.join( '\\n' );\r\n\r\n\t}\r\n\r\n\tfunction fetchAttributeLocations( gl, program, identifiers ) {\r\n\r\n\t\tvar attributes = {};\r\n\r\n\t\tvar n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );\r\n\r\n\t\tfor ( var i = 0; i < n; i ++ ) {\r\n\r\n\t\t\tvar info = gl.getActiveAttrib( program, i );\r\n\t\t\tvar name = info.name;\r\n\r\n\t\t\t// console.log(\"THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:\", name, i );\r\n\r\n\t\t\tattributes[ name ] = gl.getAttribLocation( program, name );\r\n\r\n\t\t}\r\n\r\n\t\treturn attributes;\r\n\r\n\t}\r\n\r\n\tfunction filterEmptyLine( string ) {\r\n\r\n\t\treturn string !== '';\r\n\r\n\t}\r\n\r\n\tfunction replaceLightNums( string, parameters ) {\r\n\r\n\t\treturn string\r\n\t\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\r\n\t\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\r\n\t\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\r\n\t\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights );\r\n\r\n\t}\r\n\r\n\tfunction parseIncludes( string ) {\r\n\r\n\t\tvar pattern = /#include +<([\\w\\d.]+)>/g;\r\n\r\n\t\tfunction replace( match, include ) {\r\n\r\n\t\t\tvar replace = THREE.ShaderChunk[ include ];\r\n\r\n\t\t\tif ( replace === undefined ) {\r\n\r\n\t\t\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn parseIncludes( replace );\r\n\r\n\t\t}\r\n\r\n\t\treturn string.replace( pattern, replace );\r\n\r\n\t}\r\n\r\n\tfunction unrollLoops( string ) {\r\n\r\n\t\tvar pattern = /for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\r\n\r\n\t\tfunction replace( match, start, end, snippet ) {\r\n\r\n\t\t\tvar unroll = '';\r\n\r\n\t\t\tfor ( var i = parseInt( start ); i < parseInt( end ); i ++ ) {\r\n\r\n\t\t\t\tunroll += snippet.replace( /\\[ i \\]/g, '[ ' + i + ' ]' );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn unroll;\r\n\r\n\t\t}\r\n\r\n\t\treturn string.replace( pattern, replace );\r\n\r\n\t}\r\n\r\n\treturn function WebGLProgram( renderer, code, material, parameters ) {\r\n\r\n\t\tvar gl = renderer.context;\r\n\r\n\t\tvar extensions = material.extensions;\r\n\t\tvar defines = material.defines;\r\n\r\n\t\tvar vertexShader = material.__webglShader.vertexShader;\r\n\t\tvar fragmentShader = material.__webglShader.fragmentShader;\r\n\r\n\t\tvar shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\r\n\r\n\t\tif ( parameters.shadowMapType === THREE.PCFShadowMap ) {\r\n\r\n\t\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\r\n\r\n\t\t} else if ( parameters.shadowMapType === THREE.PCFSoftShadowMap ) {\r\n\r\n\t\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\r\n\r\n\t\t}\r\n\r\n\t\tvar envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\r\n\t\tvar envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\r\n\t\tvar envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\r\n\r\n\t\tif ( parameters.envMap ) {\r\n\r\n\t\t\tswitch ( material.envMap.mapping ) {\r\n\r\n\t\t\t\tcase THREE.CubeReflectionMapping:\r\n\t\t\t\tcase THREE.CubeRefractionMapping:\r\n\t\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase THREE.CubeUVReflectionMapping:\r\n\t\t\t\tcase THREE.CubeUVRefractionMapping:\r\n\t\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase THREE.EquirectangularReflectionMapping:\r\n\t\t\t\tcase THREE.EquirectangularRefractionMapping:\r\n\t\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_EQUIREC';\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase THREE.SphericalReflectionMapping:\r\n\t\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_SPHERE';\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tswitch ( material.envMap.mapping ) {\r\n\r\n\t\t\t\tcase THREE.CubeRefractionMapping:\r\n\t\t\t\tcase THREE.EquirectangularRefractionMapping:\r\n\t\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tswitch ( material.combine ) {\r\n\r\n\t\t\t\tcase THREE.MultiplyOperation:\r\n\t\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase THREE.MixOperation:\r\n\t\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase THREE.AddOperation:\r\n\t\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;\r\n\r\n\t\t// console.log( 'building new program ' );\r\n\r\n\t\t//\r\n\r\n\t\tvar customExtensions = generateExtensions( extensions, parameters, renderer.extensions );\r\n\r\n\t\tvar customDefines = generateDefines( defines );\r\n\r\n\t\t//\r\n\r\n\t\tvar program = gl.createProgram();\r\n\r\n\t\tvar prefixVertex, prefixFragment;\r\n\r\n\t\tif ( material instanceof THREE.RawShaderMaterial ) {\r\n\r\n\t\t\tprefixVertex = '';\r\n\t\t\tprefixFragment = '';\r\n\r\n\t\t} else {\r\n\r\n\t\t\tprefixVertex = [\r\n\r\n\t\t\t\t'precision ' + parameters.precision + ' float;',\r\n\t\t\t\t'precision ' + parameters.precision + ' int;',\r\n\r\n\t\t\t\t'#define SHADER_NAME ' + material.__webglShader.name,\r\n\r\n\t\t\t\tcustomDefines,\r\n\r\n\t\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\r\n\r\n\t\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\r\n\r\n\t\t\t\t'#define MAX_BONES ' + parameters.maxBones,\r\n\r\n\t\t\t\tparameters.map ? '#define USE_MAP' : '',\r\n\t\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\r\n\t\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\r\n\t\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\r\n\t\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\r\n\t\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\r\n\t\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\r\n\t\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\r\n\t\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\r\n\t\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\r\n\t\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\r\n\t\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\r\n\t\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\r\n\t\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\r\n\r\n\t\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\r\n\r\n\t\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\r\n\t\t\t\tparameters.useVertexTexture ? '#define BONE_TEXTURE' : '',\r\n\r\n\t\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\r\n\t\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\r\n\t\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\r\n\t\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\r\n\r\n\t\t\t\t'#define NUM_CLIPPING_PLANES ' + parameters.numClippingPlanes,\r\n\r\n\t\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\r\n\t\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\r\n\r\n\t\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\r\n\r\n\t\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\r\n\t\t\t\tparameters.logarithmicDepthBuffer && renderer.extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\r\n\r\n\t\t\t\t'uniform mat4 modelMatrix;',\r\n\t\t\t\t'uniform mat4 modelViewMatrix;',\r\n\t\t\t\t'uniform mat4 projectionMatrix;',\r\n\t\t\t\t'uniform mat4 viewMatrix;',\r\n\t\t\t\t'uniform mat3 normalMatrix;',\r\n\t\t\t\t'uniform vec3 cameraPosition;',\r\n\r\n\t\t\t\t'attribute vec3 position;',\r\n\t\t\t\t'attribute vec3 normal;',\r\n\t\t\t\t'attribute vec2 uv;',\r\n\r\n\t\t\t\t'#ifdef USE_COLOR',\r\n\r\n\t\t\t\t'\tattribute vec3 color;',\r\n\r\n\t\t\t\t'#endif',\r\n\r\n\t\t\t\t'#ifdef USE_MORPHTARGETS',\r\n\r\n\t\t\t\t'\tattribute vec3 morphTarget0;',\r\n\t\t\t\t'\tattribute vec3 morphTarget1;',\r\n\t\t\t\t'\tattribute vec3 morphTarget2;',\r\n\t\t\t\t'\tattribute vec3 morphTarget3;',\r\n\r\n\t\t\t\t'\t#ifdef USE_MORPHNORMALS',\r\n\r\n\t\t\t\t'\t\tattribute vec3 morphNormal0;',\r\n\t\t\t\t'\t\tattribute vec3 morphNormal1;',\r\n\t\t\t\t'\t\tattribute vec3 morphNormal2;',\r\n\t\t\t\t'\t\tattribute vec3 morphNormal3;',\r\n\r\n\t\t\t\t'\t#else',\r\n\r\n\t\t\t\t'\t\tattribute vec3 morphTarget4;',\r\n\t\t\t\t'\t\tattribute vec3 morphTarget5;',\r\n\t\t\t\t'\t\tattribute vec3 morphTarget6;',\r\n\t\t\t\t'\t\tattribute vec3 morphTarget7;',\r\n\r\n\t\t\t\t'\t#endif',\r\n\r\n\t\t\t\t'#endif',\r\n\r\n\t\t\t\t'#ifdef USE_SKINNING',\r\n\r\n\t\t\t\t'\tattribute vec4 skinIndex;',\r\n\t\t\t\t'\tattribute vec4 skinWeight;',\r\n\r\n\t\t\t\t'#endif',\r\n\r\n\t\t\t\t'\\n'\r\n\r\n\t\t\t].filter( filterEmptyLine ).join( '\\n' );\r\n\r\n\t\t\tprefixFragment = [\r\n\r\n\t\t\t\tcustomExtensions,\r\n\r\n\t\t\t\t'precision ' + parameters.precision + ' float;',\r\n\t\t\t\t'precision ' + parameters.precision + ' int;',\r\n\r\n\t\t\t\t'#define SHADER_NAME ' + material.__webglShader.name,\r\n\r\n\t\t\t\tcustomDefines,\r\n\r\n\t\t\t\tparameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest : '',\r\n\r\n\t\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\r\n\r\n\t\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\r\n\t\t\t\t( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',\r\n\r\n\t\t\t\tparameters.map ? '#define USE_MAP' : '',\r\n\t\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\r\n\t\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\r\n\t\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\r\n\t\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\r\n\t\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\r\n\t\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\r\n\t\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\r\n\t\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\r\n\t\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\r\n\t\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\r\n\t\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\r\n\t\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\r\n\t\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\r\n\t\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\r\n\r\n\t\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\r\n\r\n\t\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\r\n\t\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\r\n\r\n\t\t\t\t'#define NUM_CLIPPING_PLANES ' + parameters.numClippingPlanes,\r\n\r\n\t\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\r\n\t\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\r\n\r\n\t\t\t\tparameters.premultipliedAlpha ? \"#define PREMULTIPLIED_ALPHA\" : '',\r\n\r\n\t\t\t\tparameters.physicallyCorrectLights ? \"#define PHYSICALLY_CORRECT_LIGHTS\" : '',\r\n\r\n\t\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\r\n\t\t\t\tparameters.logarithmicDepthBuffer && renderer.extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\r\n\r\n\t\t\t\tparameters.envMap && renderer.extensions.get( 'EXT_shader_texture_lod' ) ? '#define TEXTURE_LOD_EXT' : '',\r\n\r\n\t\t\t\t'uniform mat4 viewMatrix;',\r\n\t\t\t\t'uniform vec3 cameraPosition;',\r\n\r\n\t\t\t\t( parameters.toneMapping !== THREE.NoToneMapping ) ? \"#define TONE_MAPPING\" : '',\r\n\t\t\t\t( parameters.toneMapping !== THREE.NoToneMapping ) ? THREE.ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\r\n\t\t\t\t( parameters.toneMapping !== THREE.NoToneMapping ) ? getToneMappingFunction( \"toneMapping\", parameters.toneMapping ) : '',\r\n\r\n\t\t\t\t( parameters.outputEncoding || parameters.mapEncoding || parameters.envMapEncoding || parameters.emissiveMapEncoding ) ? THREE.ShaderChunk[ 'encodings_pars_fragment' ] : '', // this code is required here because it is used by the various encoding/decoding function defined below\r\n\t\t\t\tparameters.mapEncoding ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',\r\n\t\t\t\tparameters.envMapEncoding ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',\r\n\t\t\t\tparameters.emissiveMapEncoding ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',\r\n\t\t\t\tparameters.outputEncoding ? getTexelEncodingFunction( \"linearToOutputTexel\", parameters.outputEncoding ) : '',\r\n\r\n\t\t\t\tparameters.depthPacking ? \"#define DEPTH_PACKING \" + material.depthPacking : '',\r\n\r\n\t\t\t\t'\\n'\r\n\r\n\t\t\t].filter( filterEmptyLine ).join( '\\n' );\r\n\r\n\t\t}\r\n\r\n\t\tvertexShader = parseIncludes( vertexShader, parameters );\r\n\t\tvertexShader = replaceLightNums( vertexShader, parameters );\r\n\r\n\t\tfragmentShader = parseIncludes( fragmentShader, parameters );\r\n\t\tfragmentShader = replaceLightNums( fragmentShader, parameters );\r\n\r\n\t\tif ( material instanceof THREE.ShaderMaterial === false ) {\r\n\r\n\t\t\tvertexShader = unrollLoops( vertexShader );\r\n\t\t\tfragmentShader = unrollLoops( fragmentShader );\r\n\r\n\t\t}\r\n\r\n\t\tvar vertexGlsl = prefixVertex + vertexShader;\r\n\t\tvar fragmentGlsl = prefixFragment + fragmentShader;\r\n\r\n\t\t// console.log( '*VERTEX*', vertexGlsl );\r\n\t\t// console.log( '*FRAGMENT*', fragmentGlsl );\r\n\r\n\t\tvar glVertexShader = THREE.WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );\r\n\t\tvar glFragmentShader = THREE.WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );\r\n\r\n\t\tgl.attachShader( program, glVertexShader );\r\n\t\tgl.attachShader( program, glFragmentShader );\r\n\r\n\t\t// Force a particular attribute to index 0.\r\n\r\n\t\tif ( material.index0AttributeName !== undefined ) {\r\n\r\n\t\t\tgl.bindAttribLocation( program, 0, material.index0AttributeName );\r\n\r\n\t\t} else if ( parameters.morphTargets === true ) {\r\n\r\n\t\t\t// programs with morphTargets displace position out of attribute 0\r\n\t\t\tgl.bindAttribLocation( program, 0, 'position' );\r\n\r\n\t\t}\r\n\r\n\t\tgl.linkProgram( program );\r\n\r\n\t\tvar programLog = gl.getProgramInfoLog( program );\r\n\t\tvar vertexLog = gl.getShaderInfoLog( glVertexShader );\r\n\t\tvar fragmentLog = gl.getShaderInfoLog( glFragmentShader );\r\n\r\n\t\tvar runnable = true;\r\n\t\tvar haveDiagnostics = true;\r\n\r\n\t\t// console.log( '**VERTEX**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glVertexShader ) );\r\n\t\t// console.log( '**FRAGMENT**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glFragmentShader ) );\r\n\r\n\t\tif ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {\r\n\r\n\t\t\trunnable = false;\r\n\r\n\t\t\tconsole.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexLog, fragmentLog );\r\n\r\n\t\t} else if ( programLog !== '' ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog );\r\n\r\n\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\r\n\r\n\t\t\thaveDiagnostics = false;\r\n\r\n\t\t}\r\n\r\n\t\tif ( haveDiagnostics ) {\r\n\r\n\t\t\tthis.diagnostics = {\r\n\r\n\t\t\t\trunnable: runnable,\r\n\t\t\t\tmaterial: material,\r\n\r\n\t\t\t\tprogramLog: programLog,\r\n\r\n\t\t\t\tvertexShader: {\r\n\r\n\t\t\t\t\tlog: vertexLog,\r\n\t\t\t\t\tprefix: prefixVertex\r\n\r\n\t\t\t\t},\r\n\r\n\t\t\t\tfragmentShader: {\r\n\r\n\t\t\t\t\tlog: fragmentLog,\r\n\t\t\t\t\tprefix: prefixFragment\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t};\r\n\r\n\t\t}\r\n\r\n\t\t// clean up\r\n\r\n\t\tgl.deleteShader( glVertexShader );\r\n\t\tgl.deleteShader( glFragmentShader );\r\n\r\n\t\t// set up caching for uniform locations\r\n\r\n\t\tvar cachedUniforms;\r\n\r\n\t\tthis.getUniforms = function() {\r\n\r\n\t\t\tif ( cachedUniforms === undefined ) {\r\n\r\n\t\t\t\tcachedUniforms =\r\n\t\t\t\t\t\tnew THREE.WebGLUniforms( gl, program, renderer );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn cachedUniforms;\r\n\r\n\t\t};\r\n\r\n\t\t// set up caching for attribute locations\r\n\r\n\t\tvar cachedAttributes;\r\n\r\n\t\tthis.getAttributes = function() {\r\n\r\n\t\t\tif ( cachedAttributes === undefined ) {\r\n\r\n\t\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn cachedAttributes;\r\n\r\n\t\t};\r\n\r\n\t\t// free resource\r\n\r\n\t\tthis.destroy = function() {\r\n\r\n\t\t\tgl.deleteProgram( program );\r\n\t\t\tthis.program = undefined;\r\n\r\n\t\t};\r\n\r\n\t\t// DEPRECATED\r\n\r\n\t\tObject.defineProperties( this, {\r\n\r\n\t\t\tuniforms: {\r\n\t\t\t\tget: function() {\r\n\r\n\t\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .uniforms is now .getUniforms().' );\r\n\t\t\t\t\treturn this.getUniforms();\r\n\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tattributes: {\r\n\t\t\t\tget: function() {\r\n\r\n\t\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .attributes is now .getAttributes().' );\r\n\t\t\t\t\treturn this.getAttributes();\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t} );\r\n\r\n\r\n\t\t//\r\n\r\n\t\tthis.id = programIdCount ++;\r\n\t\tthis.code = code;\r\n\t\tthis.usedTimes = 1;\r\n\t\tthis.program = program;\r\n\t\tthis.vertexShader = glVertexShader;\r\n\t\tthis.fragmentShader = glFragmentShader;\r\n\r\n\t\treturn this;\r\n\r\n\t};\r\n\r\n} )();\r\n\r\n// File:src/renderers/webgl/WebGLPrograms.js\r\n\r\nTHREE.WebGLPrograms = function ( renderer, capabilities ) {\r\n\r\n\tvar programs = [];\r\n\r\n\tvar shaderIDs = {\r\n\t\tMeshDepthMaterial: 'depth',\r\n\t\tMeshNormalMaterial: 'normal',\r\n\t\tMeshBasicMaterial: 'basic',\r\n\t\tMeshLambertMaterial: 'lambert',\r\n\t\tMeshPhongMaterial: 'phong',\r\n\t\tMeshStandardMaterial: 'physical',\r\n\t\tMeshPhysicalMaterial: 'physical',\r\n\t\tLineBasicMaterial: 'basic',\r\n\t\tLineDashedMaterial: 'dashed',\r\n\t\tPointsMaterial: 'points'\r\n\t};\r\n\r\n\tvar parameterNames = [\r\n\t\t\"precision\", \"supportsVertexTextures\", \"map\", \"mapEncoding\", \"envMap\", \"envMapMode\", \"envMapEncoding\",\r\n\t\t\"lightMap\", \"aoMap\", \"emissiveMap\", \"emissiveMapEncoding\", \"bumpMap\", \"normalMap\", \"displacementMap\", \"specularMap\",\r\n\t\t\"roughnessMap\", \"metalnessMap\",\r\n\t\t\"alphaMap\", \"combine\", \"vertexColors\", \"fog\", \"useFog\", \"fogExp\",\r\n\t\t\"flatShading\", \"sizeAttenuation\", \"logarithmicDepthBuffer\", \"skinning\",\r\n\t\t\"maxBones\", \"useVertexTexture\", \"morphTargets\", \"morphNormals\",\r\n\t\t\"maxMorphTargets\", \"maxMorphNormals\", \"premultipliedAlpha\",\r\n\t\t\"numDirLights\", \"numPointLights\", \"numSpotLights\", \"numHemiLights\",\r\n\t\t\"shadowMapEnabled\", \"shadowMapType\", \"toneMapping\", 'physicallyCorrectLights',\r\n\t\t\"alphaTest\", \"doubleSided\", \"flipSided\", \"numClippingPlanes\", \"depthPacking\"\r\n\t];\r\n\r\n\r\n\tfunction allocateBones ( object ) {\r\n\r\n\t\tif ( capabilities.floatVertexTextures && object && object.skeleton && object.skeleton.useVertexTexture ) {\r\n\r\n\t\t\treturn 1024;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// default for when object is not specified\r\n\t\t\t// ( for example when prebuilding shader to be used with multiple objects )\r\n\t\t\t//\r\n\t\t\t// - leave some extra space for other uniforms\r\n\t\t\t// - limit here is ANGLE's 254 max uniform vectors\r\n\t\t\t// (up to 54 should be safe)\r\n\r\n\t\t\tvar nVertexUniforms = capabilities.maxVertexUniforms;\r\n\t\t\tvar nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\r\n\r\n\t\t\tvar maxBones = nVertexMatrices;\r\n\r\n\t\t\tif ( object !== undefined && object instanceof THREE.SkinnedMesh ) {\r\n\r\n\t\t\t\tmaxBones = Math.min( object.skeleton.bones.length, maxBones );\r\n\r\n\t\t\t\tif ( maxBones < object.skeleton.bones.length ) {\r\n\r\n\t\t\t\t\tconsole.warn( 'WebGLRenderer: too many bones - ' + object.skeleton.bones.length + ', this GPU supports just ' + maxBones + ' (try OpenGL instead of ANGLE)' );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn maxBones;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction getTextureEncodingFromMap( map, gammaOverrideLinear ) {\r\n\r\n\t\tvar encoding;\r\n\r\n\t\tif ( ! map ) {\r\n\r\n\t\t\tencoding = THREE.LinearEncoding;\r\n\r\n\t\t} else if ( map instanceof THREE.Texture ) {\r\n\r\n\t\t\tencoding = map.encoding;\r\n\r\n\t\t} else if ( map instanceof THREE.WebGLRenderTarget ) {\r\n\r\n\t\t\tconsole.warn( \"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\" );\r\n\t\t\tencoding = map.texture.encoding;\r\n\r\n\t\t}\r\n\r\n\t\t// add backwards compatibility for WebGLRenderer.gammaInput/gammaOutput parameter, should probably be removed at some point.\r\n\t\tif ( encoding === THREE.LinearEncoding && gammaOverrideLinear ) {\r\n\r\n\t\t\tencoding = THREE.GammaEncoding;\r\n\r\n\t\t}\r\n\r\n\t\treturn encoding;\r\n\r\n\t}\r\n\r\n\tthis.getParameters = function ( material, lights, fog, nClipPlanes, object ) {\r\n\r\n\t\tvar shaderID = shaderIDs[ material.type ];\r\n\r\n\t\t// heuristics to create shader parameters according to lights in the scene\r\n\t\t// (not to blow over maxLights budget)\r\n\r\n\t\tvar maxBones = allocateBones( object );\r\n\t\tvar precision = renderer.getPrecision();\r\n\r\n\t\tif ( material.precision !== null ) {\r\n\r\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\r\n\r\n\t\t\tif ( precision !== material.precision ) {\r\n\r\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar currentRenderTarget = renderer.getCurrentRenderTarget();\r\n\r\n\t\tvar parameters = {\r\n\r\n\t\t\tshaderID: shaderID,\r\n\r\n\t\t\tprecision: precision,\r\n\t\t\tsupportsVertexTextures: capabilities.vertexTextures,\r\n\t\t\toutputEncoding: getTextureEncodingFromMap( ( ! currentRenderTarget ) ? null : currentRenderTarget.texture, renderer.gammaOutput ),\r\n\t\t\tmap: !! material.map,\r\n\t\t\tmapEncoding: getTextureEncodingFromMap( material.map, renderer.gammaInput ),\r\n\t\t\tenvMap: !! material.envMap,\r\n\t\t\tenvMapMode: material.envMap && material.envMap.mapping,\r\n\t\t\tenvMapEncoding: getTextureEncodingFromMap( material.envMap, renderer.gammaInput ),\r\n\t\t\tenvMapCubeUV: ( !! material.envMap ) && ( ( material.envMap.mapping === THREE.CubeUVReflectionMapping ) || ( material.envMap.mapping === THREE.CubeUVRefractionMapping ) ),\r\n\t\t\tlightMap: !! material.lightMap,\r\n\t\t\taoMap: !! material.aoMap,\r\n\t\t\temissiveMap: !! material.emissiveMap,\r\n\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap, renderer.gammaInput ),\r\n\t\t\tbumpMap: !! material.bumpMap,\r\n\t\t\tnormalMap: !! material.normalMap,\r\n\t\t\tdisplacementMap: !! material.displacementMap,\r\n\t\t\troughnessMap: !! material.roughnessMap,\r\n\t\t\tmetalnessMap: !! material.metalnessMap,\r\n\t\t\tspecularMap: !! material.specularMap,\r\n\t\t\talphaMap: !! material.alphaMap,\r\n\r\n\t\t\tcombine: material.combine,\r\n\r\n\t\t\tvertexColors: material.vertexColors,\r\n\r\n\t\t\tfog: fog,\r\n\t\t\tuseFog: material.fog,\r\n\t\t\tfogExp: fog instanceof THREE.FogExp2,\r\n\r\n\t\t\tflatShading: material.shading === THREE.FlatShading,\r\n\r\n\t\t\tsizeAttenuation: material.sizeAttenuation,\r\n\t\t\tlogarithmicDepthBuffer: capabilities.logarithmicDepthBuffer,\r\n\r\n\t\t\tskinning: material.skinning,\r\n\t\t\tmaxBones: maxBones,\r\n\t\t\tuseVertexTexture: capabilities.floatVertexTextures && object && object.skeleton && object.skeleton.useVertexTexture,\r\n\r\n\t\t\tmorphTargets: material.morphTargets,\r\n\t\t\tmorphNormals: material.morphNormals,\r\n\t\t\tmaxMorphTargets: renderer.maxMorphTargets,\r\n\t\t\tmaxMorphNormals: renderer.maxMorphNormals,\r\n\r\n\t\t\tnumDirLights: lights.directional.length,\r\n\t\t\tnumPointLights: lights.point.length,\r\n\t\t\tnumSpotLights: lights.spot.length,\r\n\t\t\tnumHemiLights: lights.hemi.length,\r\n\r\n\t\t\tnumClippingPlanes: nClipPlanes,\r\n\r\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && object.receiveShadow && lights.shadows.length > 0,\r\n\t\t\tshadowMapType: renderer.shadowMap.type,\r\n\r\n\t\t\ttoneMapping: renderer.toneMapping,\r\n\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\r\n\r\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\r\n\r\n\t\t\talphaTest: material.alphaTest,\r\n\t\t\tdoubleSided: material.side === THREE.DoubleSide,\r\n\t\t\tflipSided: material.side === THREE.BackSide,\r\n\r\n\t\t\tdepthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false\r\n\r\n\t\t};\r\n\r\n\t\treturn parameters;\r\n\r\n\t};\r\n\r\n\tthis.getProgramCode = function ( material, parameters ) {\r\n\r\n\t\tvar array = [];\r\n\r\n\t\tif ( parameters.shaderID ) {\r\n\r\n\t\t\tarray.push( parameters.shaderID );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tarray.push( material.fragmentShader );\r\n\t\t\tarray.push( material.vertexShader );\r\n\r\n\t\t}\r\n\r\n\t\tif ( material.defines !== undefined ) {\r\n\r\n\t\t\tfor ( var name in material.defines ) {\r\n\r\n\t\t\t\tarray.push( name );\r\n\t\t\t\tarray.push( material.defines[ name ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0; i < parameterNames.length; i ++ ) {\r\n\r\n\t\t\tarray.push( parameters[ parameterNames[ i ] ] );\r\n\r\n\t\t}\r\n\r\n\t\treturn array.join();\r\n\r\n\t};\r\n\r\n\tthis.acquireProgram = function ( material, parameters, code ) {\r\n\r\n\t\tvar program;\r\n\r\n\t\t// Check if code has been already compiled\r\n\t\tfor ( var p = 0, pl = programs.length; p < pl; p ++ ) {\r\n\r\n\t\t\tvar programInfo = programs[ p ];\r\n\r\n\t\t\tif ( programInfo.code === code ) {\r\n\r\n\t\t\t\tprogram = programInfo;\r\n\t\t\t\t++ program.usedTimes;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( program === undefined ) {\r\n\r\n\t\t\tprogram = new THREE.WebGLProgram( renderer, code, material, parameters );\r\n\t\t\tprograms.push( program );\r\n\r\n\t\t}\r\n\r\n\t\treturn program;\r\n\r\n\t};\r\n\r\n\tthis.releaseProgram = function( program ) {\r\n\r\n\t\tif ( -- program.usedTimes === 0 ) {\r\n\r\n\t\t\t// Remove from unordered set\r\n\t\t\tvar i = programs.indexOf( program );\r\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\r\n\t\t\tprograms.pop();\r\n\r\n\t\t\t// Free WebGL resources\r\n\t\t\tprogram.destroy();\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\t// Exposed for resource monitoring & error feedback via renderer.info:\r\n\tthis.programs = programs;\r\n\r\n};\r\n\r\n// File:src/renderers/webgl/WebGLProperties.js\r\n\r\n/**\r\n* @author fordacious / fordacious.github.io\r\n*/\r\n\r\nTHREE.WebGLProperties = function () {\r\n\r\n\tvar properties = {};\r\n\r\n\tthis.get = function ( object ) {\r\n\r\n\t\tvar uuid = object.uuid;\r\n\t\tvar map = properties[ uuid ];\r\n\r\n\t\tif ( map === undefined ) {\r\n\r\n\t\t\tmap = {};\r\n\t\t\tproperties[ uuid ] = map;\r\n\r\n\t\t}\r\n\r\n\t\treturn map;\r\n\r\n\t};\r\n\r\n\tthis.delete = function ( object ) {\r\n\r\n\t\tdelete properties[ object.uuid ];\r\n\r\n\t};\r\n\r\n\tthis.clear = function () {\r\n\r\n\t\tproperties = {};\r\n\r\n\t};\r\n\r\n};\r\n\r\n// File:src/renderers/webgl/WebGLShader.js\r\n\r\nTHREE.WebGLShader = ( function () {\r\n\r\n\tfunction addLineNumbers( string ) {\r\n\r\n\t\tvar lines = string.split( '\\n' );\r\n\r\n\t\tfor ( var i = 0; i < lines.length; i ++ ) {\r\n\r\n\t\t\tlines[ i ] = ( i + 1 ) + ': ' + lines[ i ];\r\n\r\n\t\t}\r\n\r\n\t\treturn lines.join( '\\n' );\r\n\r\n\t}\r\n\r\n\treturn function WebGLShader( gl, type, string ) {\r\n\r\n\t\tvar shader = gl.createShader( type );\r\n\r\n\t\tgl.shaderSource( shader, string );\r\n\t\tgl.compileShader( shader );\r\n\r\n\t\tif ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) {\r\n\r\n\t\t\tconsole.error( 'THREE.WebGLShader: Shader couldn\\'t compile.' );\r\n\r\n\t\t}\r\n\r\n\t\tif ( gl.getShaderInfoLog( shader ) !== '' ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.WebGLShader: gl.getShaderInfoLog()', type === gl.VERTEX_SHADER ? 'vertex' : 'fragment', gl.getShaderInfoLog( shader ), addLineNumbers( string ) );\r\n\r\n\t\t}\r\n\r\n\t\t// --enable-privileged-webgl-extension\r\n\t\t// console.log( type, gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\r\n\r\n\t\treturn shader;\r\n\r\n\t};\r\n\r\n} )();\r\n\r\n// File:src/renderers/webgl/WebGLShadowMap.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) {\r\n\r\n\tvar _gl = _renderer.context,\r\n\t_state = _renderer.state,\r\n\t_frustum = new THREE.Frustum(),\r\n\t_projScreenMatrix = new THREE.Matrix4(),\r\n\r\n\t_lightShadows = _lights.shadows,\r\n\r\n\t_shadowMapSize = new THREE.Vector2(),\r\n\r\n\t_lookTarget = new THREE.Vector3(),\r\n\t_lightPositionWorld = new THREE.Vector3(),\r\n\r\n\t_renderList = [],\r\n\r\n\t_MorphingFlag = 1,\r\n\t_SkinningFlag = 2,\r\n\r\n\t_NumberOfMaterialVariants = ( _MorphingFlag | _SkinningFlag ) + 1,\r\n\r\n\t_depthMaterials = new Array( _NumberOfMaterialVariants ),\r\n\t_distanceMaterials = new Array( _NumberOfMaterialVariants ),\r\n\r\n\t_materialCache = {};\r\n\r\n\tvar cubeDirections = [\r\n\t\tnew THREE.Vector3( 1, 0, 0 ), new THREE.Vector3( - 1, 0, 0 ), new THREE.Vector3( 0, 0, 1 ),\r\n\t\tnew THREE.Vector3( 0, 0, - 1 ), new THREE.Vector3( 0, 1, 0 ), new THREE.Vector3( 0, - 1, 0 )\r\n\t];\r\n\r\n\tvar cubeUps = [\r\n\t\tnew THREE.Vector3( 0, 1, 0 ), new THREE.Vector3( 0, 1, 0 ), new THREE.Vector3( 0, 1, 0 ),\r\n\t\tnew THREE.Vector3( 0, 1, 0 ), new THREE.Vector3( 0, 0, 1 ),\tnew THREE.Vector3( 0, 0, - 1 )\r\n\t];\r\n\r\n\tvar cube2DViewPorts = [\r\n\t\tnew THREE.Vector4(), new THREE.Vector4(), new THREE.Vector4(),\r\n\t\tnew THREE.Vector4(), new THREE.Vector4(), new THREE.Vector4()\r\n\t];\r\n\r\n\t// init\r\n\r\n\tvar depthMaterialTemplate = new THREE.MeshDepthMaterial();\r\n\tdepthMaterialTemplate.depthPacking = THREE.RGBADepthPacking;\r\n\tdepthMaterialTemplate.clipping = true;\r\n\r\n\tvar distanceShader = THREE.ShaderLib[ \"distanceRGBA\" ];\r\n\tvar distanceUniforms = THREE.UniformsUtils.clone( distanceShader.uniforms );\r\n\r\n\tfor ( var i = 0; i !== _NumberOfMaterialVariants; ++ i ) {\r\n\r\n\t\tvar useMorphing = ( i & _MorphingFlag ) !== 0;\r\n\t\tvar useSkinning = ( i & _SkinningFlag ) !== 0;\r\n\r\n\t\tvar depthMaterial = depthMaterialTemplate.clone();\r\n\t\tdepthMaterial.morphTargets = useMorphing;\r\n\t\tdepthMaterial.skinning = useSkinning;\r\n\r\n\t\t_depthMaterials[ i ] = depthMaterial;\r\n\r\n\t\tvar distanceMaterial = new THREE.ShaderMaterial( {\r\n\t\t\tdefines: {\r\n\t\t\t\t'USE_SHADOWMAP': ''\r\n\t\t\t},\r\n\t\t\tuniforms: distanceUniforms,\r\n\t\t\tvertexShader: distanceShader.vertexShader,\r\n\t\t\tfragmentShader: distanceShader.fragmentShader,\r\n\t\t\tmorphTargets: useMorphing,\r\n\t\t\tskinning: useSkinning,\r\n\t\t\tclipping: true\r\n\t\t} );\r\n\r\n\t\t_distanceMaterials[ i ] = distanceMaterial;\r\n\r\n\t}\r\n\r\n\t//\r\n\r\n\tvar scope = this;\r\n\r\n\tthis.enabled = false;\r\n\r\n\tthis.autoUpdate = true;\r\n\tthis.needsUpdate = false;\r\n\r\n\tthis.type = THREE.PCFShadowMap;\r\n\r\n\tthis.renderReverseSided = true;\r\n\tthis.renderSingleSided = true;\r\n\r\n\tthis.render = function ( scene, camera ) {\r\n\r\n\t\tif ( scope.enabled === false ) return;\r\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\r\n\r\n\t\tif ( _lightShadows.length === 0 ) return;\r\n\r\n\t\t// Set GL state for depth map.\r\n\t\t_state.clearColor( 1, 1, 1, 1 );\r\n\t\t_state.disable( _gl.BLEND );\r\n\t\t_state.setDepthTest( true );\r\n\t\t_state.setScissorTest( false );\r\n\r\n\t\t// render depth map\r\n\r\n\t\tvar faceCount, isPointLight;\r\n\r\n\t\tfor ( var i = 0, il = _lightShadows.length; i < il; i ++ ) {\r\n\r\n\t\t\tvar light = _lightShadows[ i ];\r\n\t\t\tvar shadow = light.shadow;\r\n\r\n\t\t\tif ( shadow === undefined ) {\r\n\r\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar shadowCamera = shadow.camera;\r\n\r\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\r\n\r\n\t\t\tif ( light instanceof THREE.PointLight ) {\r\n\r\n\t\t\t\tfaceCount = 6;\r\n\t\t\t\tisPointLight = true;\r\n\r\n\t\t\t\tvar vpWidth = _shadowMapSize.x;\r\n\t\t\t\tvar vpHeight = _shadowMapSize.y;\r\n\r\n\t\t\t\t// These viewports map a cube-map onto a 2D texture with the\r\n\t\t\t\t// following orientation:\r\n\t\t\t\t//\r\n\t\t\t\t// xzXZ\r\n\t\t\t\t// y Y\r\n\t\t\t\t//\r\n\t\t\t\t// X - Positive x direction\r\n\t\t\t\t// x - Negative x direction\r\n\t\t\t\t// Y - Positive y direction\r\n\t\t\t\t// y - Negative y direction\r\n\t\t\t\t// Z - Positive z direction\r\n\t\t\t\t// z - Negative z direction\r\n\r\n\t\t\t\t// positive X\r\n\t\t\t\tcube2DViewPorts[ 0 ].set( vpWidth * 2, vpHeight, vpWidth, vpHeight );\r\n\t\t\t\t// negative X\r\n\t\t\t\tcube2DViewPorts[ 1 ].set( 0, vpHeight, vpWidth, vpHeight );\r\n\t\t\t\t// positive Z\r\n\t\t\t\tcube2DViewPorts[ 2 ].set( vpWidth * 3, vpHeight, vpWidth, vpHeight );\r\n\t\t\t\t// negative Z\r\n\t\t\t\tcube2DViewPorts[ 3 ].set( vpWidth, vpHeight, vpWidth, vpHeight );\r\n\t\t\t\t// positive Y\r\n\t\t\t\tcube2DViewPorts[ 4 ].set( vpWidth * 3, 0, vpWidth, vpHeight );\r\n\t\t\t\t// negative Y\r\n\t\t\t\tcube2DViewPorts[ 5 ].set( vpWidth, 0, vpWidth, vpHeight );\r\n\r\n\t\t\t\t_shadowMapSize.x *= 4.0;\r\n\t\t\t\t_shadowMapSize.y *= 2.0;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tfaceCount = 1;\r\n\t\t\t\tisPointLight = false;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( shadow.map === null ) {\r\n\r\n\t\t\t\tvar pars = { minFilter: THREE.NearestFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat };\r\n\r\n\t\t\t\tshadow.map = new THREE.WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\r\n\r\n\t\t\t\tshadowCamera.updateProjectionMatrix();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( shadow instanceof THREE.SpotLightShadow ) {\r\n\r\n\t\t\t\tshadow.update( light );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar shadowMap = shadow.map;\r\n\t\t\tvar shadowMatrix = shadow.matrix;\r\n\r\n\t\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\r\n\t\t\tshadowCamera.position.copy( _lightPositionWorld );\r\n\r\n\t\t\t_renderer.setRenderTarget( shadowMap );\r\n\t\t\t_renderer.clear();\r\n\r\n\t\t\t// render shadow map for each cube face (if omni-directional) or\r\n\t\t\t// run a single pass if not\r\n\r\n\t\t\tfor ( var face = 0; face < faceCount; face ++ ) {\r\n\r\n\t\t\t\tif ( isPointLight ) {\r\n\r\n\t\t\t\t\t_lookTarget.copy( shadowCamera.position );\r\n\t\t\t\t\t_lookTarget.add( cubeDirections[ face ] );\r\n\t\t\t\t\tshadowCamera.up.copy( cubeUps[ face ] );\r\n\t\t\t\t\tshadowCamera.lookAt( _lookTarget );\r\n\r\n\t\t\t\t\tvar vpDimensions = cube2DViewPorts[ face ];\r\n\t\t\t\t\t_state.viewport( vpDimensions );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t_lookTarget.setFromMatrixPosition( light.target.matrixWorld );\r\n\t\t\t\t\tshadowCamera.lookAt( _lookTarget );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tshadowCamera.updateMatrixWorld();\r\n\t\t\t\tshadowCamera.matrixWorldInverse.getInverse( shadowCamera.matrixWorld );\r\n\r\n\t\t\t\t// compute shadow matrix\r\n\r\n\t\t\t\tshadowMatrix.set(\r\n\t\t\t\t\t0.5, 0.0, 0.0, 0.5,\r\n\t\t\t\t\t0.0, 0.5, 0.0, 0.5,\r\n\t\t\t\t\t0.0, 0.0, 0.5, 0.5,\r\n\t\t\t\t\t0.0, 0.0, 0.0, 1.0\r\n\t\t\t\t);\r\n\r\n\t\t\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\r\n\t\t\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\r\n\r\n\t\t\t\t// update camera matrices and frustum\r\n\r\n\t\t\t\t_projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\r\n\t\t\t\t_frustum.setFromMatrix( _projScreenMatrix );\r\n\r\n\t\t\t\t// set object matrices & frustum culling\r\n\r\n\t\t\t\t_renderList.length = 0;\r\n\r\n\t\t\t\tprojectObject( scene, camera, shadowCamera );\r\n\r\n\t\t\t\t// render shadow map\r\n\t\t\t\t// render regular objects\r\n\r\n\t\t\t\tfor ( var j = 0, jl = _renderList.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\t\tvar object = _renderList[ j ];\r\n\t\t\t\t\tvar geometry = _objects.update( object );\r\n\t\t\t\t\tvar material = object.material;\r\n\r\n\t\t\t\t\tif ( material instanceof THREE.MultiMaterial ) {\r\n\r\n\t\t\t\t\t\tvar groups = geometry.groups;\r\n\t\t\t\t\t\tvar materials = material.materials;\r\n\r\n\t\t\t\t\t\tfor ( var k = 0, kl = groups.length; k < kl; k ++ ) {\r\n\r\n\t\t\t\t\t\t\tvar group = groups[ k ];\r\n\t\t\t\t\t\t\tvar groupMaterial = materials[ group.materialIndex ];\r\n\r\n\t\t\t\t\t\t\tif ( groupMaterial.visible === true ) {\r\n\r\n\t\t\t\t\t\t\t\tvar depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld );\r\n\t\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tvar depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld );\r\n\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// Restore GL state.\r\n\t\tvar clearColor = _renderer.getClearColor(),\r\n\t\tclearAlpha = _renderer.getClearAlpha();\r\n\t\t_renderer.setClearColor( clearColor, clearAlpha );\r\n\r\n\t\tscope.needsUpdate = false;\r\n\r\n\t};\r\n\r\n\tfunction getDepthMaterial( object, material, isPointLight, lightPositionWorld ) {\r\n\r\n\t\tvar geometry = object.geometry;\r\n\r\n\t\tvar result = null;\r\n\r\n\t\tvar materialVariants = _depthMaterials;\r\n\t\tvar customMaterial = object.customDepthMaterial;\r\n\r\n\t\tif ( isPointLight ) {\r\n\r\n\t\t\tmaterialVariants = _distanceMaterials;\r\n\t\t\tcustomMaterial = object.customDistanceMaterial;\r\n\r\n\t\t}\r\n\r\n\t\tif ( ! customMaterial ) {\r\n\r\n\t\t\tvar useMorphing = geometry.morphTargets !== undefined &&\r\n\t\t\t\t\tgeometry.morphTargets.length > 0 && material.morphTargets;\r\n\r\n\t\t\tvar useSkinning = object instanceof THREE.SkinnedMesh && material.skinning;\r\n\r\n\t\t\tvar variantIndex = 0;\r\n\r\n\t\t\tif ( useMorphing ) variantIndex |= _MorphingFlag;\r\n\t\t\tif ( useSkinning ) variantIndex |= _SkinningFlag;\r\n\r\n\t\t\tresult = materialVariants[ variantIndex ];\r\n\r\n\t\t} else {\r\n\r\n\t\t\tresult = customMaterial;\r\n\r\n\t\t}\r\n\r\n\t\tif ( _renderer.localClippingEnabled &&\r\n\t\t\t material.clipShadows === true &&\r\n\t\t\t\tmaterial.clippingPlanes.length !== 0 ) {\r\n\r\n\t\t\t// in this case we need a unique material instance reflecting the\r\n\t\t\t// appropriate state\r\n\r\n\t\t\tvar keyA = result.uuid, keyB = material.uuid;\r\n\r\n\t\t\tvar materialsForVariant = _materialCache[ keyA ];\r\n\r\n\t\t\tif ( materialsForVariant === undefined ) {\r\n\r\n\t\t\t\tmaterialsForVariant = {};\r\n\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar cachedMaterial = materialsForVariant[ keyB ];\r\n\r\n\t\t\tif ( cachedMaterial === undefined ) {\r\n\r\n\t\t\t\tcachedMaterial = result.clone();\r\n\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tresult = cachedMaterial;\r\n\r\n\t\t}\r\n\r\n\t\tresult.visible = material.visible;\r\n\t\tresult.wireframe = material.wireframe;\r\n\r\n\t\tvar side = material.side;\r\n\r\n\t\tif ( scope.renderSingleSided && side == THREE.DoubleSide ) {\r\n\r\n\t\t\tside = THREE.FrontSide;\r\n\r\n\t\t}\r\n\r\n\t\tif ( scope.renderReverseSided ) {\r\n\r\n\t\t\tif ( side === THREE.FrontSide ) side = THREE.BackSide;\r\n\t\t\telse if ( side === THREE.BackSide ) side = THREE.FrontSide;\r\n\r\n\t\t}\r\n\r\n\t\tresult.side = side;\r\n\r\n\t\tresult.clipShadows = material.clipShadows;\r\n\t\tresult.clippingPlanes = material.clippingPlanes;\r\n\r\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\r\n\t\tresult.linewidth = material.linewidth;\r\n\r\n\t\tif ( isPointLight && result.uniforms.lightPos !== undefined ) {\r\n\r\n\t\t\tresult.uniforms.lightPos.value.copy( lightPositionWorld );\r\n\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\r\n\t}\r\n\r\n\tfunction projectObject( object, camera, shadowCamera ) {\r\n\r\n\t\tif ( object.visible === false ) return;\r\n\r\n\t\tif ( object.layers.test( camera.layers ) && ( object instanceof THREE.Mesh || object instanceof THREE.Line || object instanceof THREE.Points ) ) {\r\n\r\n\t\t\tif ( object.castShadow && ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) ) {\r\n\r\n\t\t\t\tvar material = object.material;\r\n\r\n\t\t\t\tif ( material.visible === true ) {\r\n\r\n\t\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\r\n\t\t\t\t\t_renderList.push( object );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar children = object.children;\r\n\r\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\r\n\r\n\t\t\tprojectObject( children[ i ], camera, shadowCamera );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/renderers/webgl/WebGLState.js\r\n\r\n/**\r\n* @author mrdoob / http://mrdoob.com/\r\n*/\r\n\r\nTHREE.WebGLState = function ( gl, extensions, paramThreeToGL ) {\r\n\r\n\tvar _this = this;\r\n\r\n\tthis.buffers = {\r\n\t\tcolor: new THREE.WebGLColorBuffer( gl, this ),\r\n\t\tdepth: new THREE.WebGLDepthBuffer( gl, this ),\r\n\t\tstencil: new THREE.WebGLStencilBuffer( gl, this )\r\n\t};\r\n\r\n\tvar maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\r\n\tvar newAttributes = new Uint8Array( maxVertexAttributes );\r\n\tvar enabledAttributes = new Uint8Array( maxVertexAttributes );\r\n\tvar attributeDivisors = new Uint8Array( maxVertexAttributes );\r\n\r\n\tvar capabilities = {};\r\n\r\n\tvar compressedTextureFormats = null;\r\n\r\n\tvar currentBlending = null;\r\n\tvar currentBlendEquation = null;\r\n\tvar currentBlendSrc = null;\r\n\tvar currentBlendDst = null;\r\n\tvar currentBlendEquationAlpha = null;\r\n\tvar currentBlendSrcAlpha = null;\r\n\tvar currentBlendDstAlpha = null;\r\n\tvar currentPremultipledAlpha = false;\r\n\r\n\tvar currentFlipSided = null;\r\n\tvar currentCullFace = null;\r\n\r\n\tvar currentLineWidth = null;\r\n\r\n\tvar currentPolygonOffsetFactor = null;\r\n\tvar currentPolygonOffsetUnits = null;\r\n\r\n\tvar currentScissorTest = null;\r\n\r\n\tvar maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\r\n\r\n\tvar currentTextureSlot = null;\r\n\tvar currentBoundTextures = {};\r\n\r\n\tvar currentScissor = new THREE.Vector4();\r\n\tvar currentViewport = new THREE.Vector4();\r\n\r\n\tfunction createTexture( type, target, count ) {\r\n\r\n\t\tvar data = new Uint8Array( 3 );\r\n\t\tvar texture = gl.createTexture();\r\n\r\n\t\tgl.bindTexture( type, texture );\r\n\t\tgl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\r\n\t\tgl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\r\n\r\n\t\tfor ( var i = 0; i < count; i ++ ) {\r\n\r\n\t\t\tgl.texImage2D( target + i, 0, gl.RGB, 1, 1, 0, gl.RGB, gl.UNSIGNED_BYTE, data );\r\n\r\n\t\t}\r\n\r\n\t\treturn texture;\r\n\r\n\t}\r\n\r\n\tvar emptyTextures = {};\r\n\temptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );\r\n\temptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );\r\n\r\n\t//\r\n\r\n\tthis.init = function () {\r\n\r\n\t\tthis.clearColor( 0, 0, 0, 1 );\r\n\t\tthis.clearDepth( 1 );\r\n\t\tthis.clearStencil( 0 );\r\n\r\n\t\tthis.enable( gl.DEPTH_TEST );\r\n\t\tthis.setDepthFunc( THREE.LessEqualDepth );\r\n\r\n\t\tthis.setFlipSided( false );\r\n\t\tthis.setCullFace( THREE.CullFaceBack );\r\n\t\tthis.enable( gl.CULL_FACE );\r\n\r\n\t\tthis.enable( gl.BLEND );\r\n\t\tthis.setBlending( THREE.NormalBlending );\r\n\r\n\t};\r\n\r\n\tthis.initAttributes = function () {\r\n\r\n\t\tfor ( var i = 0, l = newAttributes.length; i < l; i ++ ) {\r\n\r\n\t\t\tnewAttributes[ i ] = 0;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.enableAttribute = function ( attribute ) {\r\n\r\n\t\tnewAttributes[ attribute ] = 1;\r\n\r\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\r\n\r\n\t\t\tgl.enableVertexAttribArray( attribute );\r\n\t\t\tenabledAttributes[ attribute ] = 1;\r\n\r\n\t\t}\r\n\r\n\t\tif ( attributeDivisors[ attribute ] !== 0 ) {\r\n\r\n\t\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\r\n\r\n\t\t\textension.vertexAttribDivisorANGLE( attribute, 0 );\r\n\t\t\tattributeDivisors[ attribute ] = 0;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.enableAttributeAndDivisor = function ( attribute, meshPerAttribute, extension ) {\r\n\r\n\t\tnewAttributes[ attribute ] = 1;\r\n\r\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\r\n\r\n\t\t\tgl.enableVertexAttribArray( attribute );\r\n\t\t\tenabledAttributes[ attribute ] = 1;\r\n\r\n\t\t}\r\n\r\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\r\n\r\n\t\t\textension.vertexAttribDivisorANGLE( attribute, meshPerAttribute );\r\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.disableUnusedAttributes = function () {\r\n\r\n\t\tfor ( var i = 0, l = enabledAttributes.length; i !== l; ++ i ) {\r\n\r\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\r\n\r\n\t\t\t\tgl.disableVertexAttribArray( i );\r\n\t\t\t\tenabledAttributes[ i ] = 0;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.enable = function ( id ) {\r\n\r\n\t\tif ( capabilities[ id ] !== true ) {\r\n\r\n\t\t\tgl.enable( id );\r\n\t\t\tcapabilities[ id ] = true;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.disable = function ( id ) {\r\n\r\n\t\tif ( capabilities[ id ] !== false ) {\r\n\r\n\t\t\tgl.disable( id );\r\n\t\t\tcapabilities[ id ] = false;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.getCompressedTextureFormats = function () {\r\n\r\n\t\tif ( compressedTextureFormats === null ) {\r\n\r\n\t\t\tcompressedTextureFormats = [];\r\n\r\n\t\t\tif ( extensions.get( 'WEBGL_compressed_texture_pvrtc' ) ||\r\n\t\t\t extensions.get( 'WEBGL_compressed_texture_s3tc' ) ||\r\n\t\t\t extensions.get( 'WEBGL_compressed_texture_etc1' ) ) {\r\n\r\n\t\t\t\tvar formats = gl.getParameter( gl.COMPRESSED_TEXTURE_FORMATS );\r\n\r\n\t\t\t\tfor ( var i = 0; i < formats.length; i ++ ) {\r\n\r\n\t\t\t\t\tcompressedTextureFormats.push( formats[ i ] );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn compressedTextureFormats;\r\n\r\n\t};\r\n\r\n\tthis.setBlending = function ( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\r\n\r\n\t\tif ( blending !== THREE.NoBlending ) {\r\n\r\n\t\t\tthis.enable( gl.BLEND );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.disable( gl.BLEND );\r\n\t\t\tcurrentBlending = blending; // no blending, that is\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\r\n\r\n\t\t\tif ( blending === THREE.AdditiveBlending ) {\r\n\r\n\t\t\t\tif ( premultipliedAlpha ) {\r\n\r\n\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\r\n\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE, gl.ONE, gl.ONE );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\r\n\t\t\t\t\tgl.blendFunc( gl.SRC_ALPHA, gl.ONE );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( blending === THREE.SubtractiveBlending ) {\r\n\r\n\t\t\t\tif ( premultipliedAlpha ) {\r\n\r\n\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\r\n\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ONE_MINUS_SRC_ALPHA );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\r\n\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.ONE_MINUS_SRC_COLOR );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( blending === THREE.MultiplyBlending ) {\r\n\r\n\t\t\t\tif ( premultipliedAlpha ) {\r\n\r\n\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\r\n\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\r\n\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.SRC_COLOR );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tif ( premultipliedAlpha ) {\r\n\r\n\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\r\n\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\r\n\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tcurrentBlending = blending;\r\n\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\r\n\r\n\t\t}\r\n\r\n\t\tif ( blending === THREE.CustomBlending ) {\r\n\r\n\t\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\r\n\t\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\r\n\t\t\tblendDstAlpha = blendDstAlpha || blendDst;\r\n\r\n\t\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\r\n\r\n\t\t\t\tgl.blendEquationSeparate( paramThreeToGL( blendEquation ), paramThreeToGL( blendEquationAlpha ) );\r\n\r\n\t\t\t\tcurrentBlendEquation = blendEquation;\r\n\t\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\r\n\r\n\t\t\t\tgl.blendFuncSeparate( paramThreeToGL( blendSrc ), paramThreeToGL( blendDst ), paramThreeToGL( blendSrcAlpha ), paramThreeToGL( blendDstAlpha ) );\r\n\r\n\t\t\t\tcurrentBlendSrc = blendSrc;\r\n\t\t\t\tcurrentBlendDst = blendDst;\r\n\t\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\r\n\t\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tcurrentBlendEquation = null;\r\n\t\t\tcurrentBlendSrc = null;\r\n\t\t\tcurrentBlendDst = null;\r\n\t\t\tcurrentBlendEquationAlpha = null;\r\n\t\t\tcurrentBlendSrcAlpha = null;\r\n\t\t\tcurrentBlendDstAlpha = null;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\t// TODO Deprecate\r\n\r\n\tthis.setColorWrite = function ( colorWrite ) {\r\n\r\n\t\tthis.buffers.color.setMask( colorWrite );\r\n\r\n\t};\r\n\r\n\tthis.setDepthTest = function ( depthTest ) {\r\n\r\n\t\tthis.buffers.depth.setTest( depthTest );\r\n\r\n\t};\r\n\r\n\tthis.setDepthWrite = function ( depthWrite ) {\r\n\r\n\t\tthis.buffers.depth.setMask( depthWrite );\r\n\r\n\t};\r\n\r\n\tthis.setDepthFunc = function ( depthFunc ) {\r\n\r\n\t\tthis.buffers.depth.setFunc( depthFunc );\r\n\r\n\t};\r\n\r\n\tthis.setStencilTest = function ( stencilTest ) {\r\n\r\n\t\tthis.buffers.stencil.setTest( stencilTest );\r\n\r\n\t};\r\n\r\n\tthis.setStencilWrite = function ( stencilWrite ) {\r\n\r\n\t\tthis.buffers.stencil.setMask( stencilWrite );\r\n\r\n\t};\r\n\r\n\tthis.setStencilFunc = function ( stencilFunc, stencilRef, stencilMask ) {\r\n\r\n\t\tthis.buffers.stencil.setFunc( stencilFunc, stencilRef, stencilMask );\r\n\r\n\t};\r\n\r\n\tthis.setStencilOp = function ( stencilFail, stencilZFail, stencilZPass ) {\r\n\r\n\t\tthis.buffers.stencil.setOp( stencilFail, stencilZFail, stencilZPass );\r\n\r\n\t};\r\n\r\n\t//\r\n\r\n\tthis.setFlipSided = function ( flipSided ) {\r\n\r\n\t\tif ( currentFlipSided !== flipSided ) {\r\n\r\n\t\t\tif ( flipSided ) {\r\n\r\n\t\t\t\tgl.frontFace( gl.CW );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tgl.frontFace( gl.CCW );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tcurrentFlipSided = flipSided;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.setCullFace = function ( cullFace ) {\r\n\r\n\t\tif ( cullFace !== THREE.CullFaceNone ) {\r\n\r\n\t\t\tthis.enable( gl.CULL_FACE );\r\n\r\n\t\t\tif ( cullFace !== currentCullFace ) {\r\n\r\n\t\t\t\tif ( cullFace === THREE.CullFaceBack ) {\r\n\r\n\t\t\t\t\tgl.cullFace( gl.BACK );\r\n\r\n\t\t\t\t} else if ( cullFace === THREE.CullFaceFront ) {\r\n\r\n\t\t\t\t\tgl.cullFace( gl.FRONT );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tgl.cullFace( gl.FRONT_AND_BACK );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.disable( gl.CULL_FACE );\r\n\r\n\t\t}\r\n\r\n\t\tcurrentCullFace = cullFace;\r\n\r\n\t};\r\n\r\n\tthis.setLineWidth = function ( width ) {\r\n\r\n\t\tif ( width !== currentLineWidth ) {\r\n\r\n\t\t\tgl.lineWidth( width );\r\n\r\n\t\t\tcurrentLineWidth = width;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.setPolygonOffset = function ( polygonOffset, factor, units ) {\r\n\r\n\t\tif ( polygonOffset ) {\r\n\r\n\t\t\tthis.enable( gl.POLYGON_OFFSET_FILL );\r\n\r\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\r\n\r\n\t\t\t\tgl.polygonOffset( factor, units );\r\n\r\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\r\n\t\t\t\tcurrentPolygonOffsetUnits = units;\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.disable( gl.POLYGON_OFFSET_FILL );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.getScissorTest = function () {\r\n\r\n\t\treturn currentScissorTest;\r\n\r\n\t};\r\n\r\n\tthis.setScissorTest = function ( scissorTest ) {\r\n\r\n\t\tcurrentScissorTest = scissorTest;\r\n\r\n\t\tif ( scissorTest ) {\r\n\r\n\t\t\tthis.enable( gl.SCISSOR_TEST );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.disable( gl.SCISSOR_TEST );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\t// texture\r\n\r\n\tthis.activeTexture = function ( webglSlot ) {\r\n\r\n\t\tif ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;\r\n\r\n\t\tif ( currentTextureSlot !== webglSlot ) {\r\n\r\n\t\t\tgl.activeTexture( webglSlot );\r\n\t\t\tcurrentTextureSlot = webglSlot;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.bindTexture = function ( webglType, webglTexture ) {\r\n\r\n\t\tif ( currentTextureSlot === null ) {\r\n\r\n\t\t\t_this.activeTexture();\r\n\r\n\t\t}\r\n\r\n\t\tvar boundTexture = currentBoundTextures[ currentTextureSlot ];\r\n\r\n\t\tif ( boundTexture === undefined ) {\r\n\r\n\t\t\tboundTexture = { type: undefined, texture: undefined };\r\n\t\t\tcurrentBoundTextures[ currentTextureSlot ] = boundTexture;\r\n\r\n\t\t}\r\n\r\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\r\n\r\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\r\n\r\n\t\t\tboundTexture.type = webglType;\r\n\t\t\tboundTexture.texture = webglTexture;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.compressedTexImage2D = function () {\r\n\r\n\t\ttry {\r\n\r\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\r\n\r\n\t\t} catch ( error ) {\r\n\r\n\t\t\tconsole.error( error );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.texImage2D = function () {\r\n\r\n\t\ttry {\r\n\r\n\t\t\tgl.texImage2D.apply( gl, arguments );\r\n\r\n\t\t} catch ( error ) {\r\n\r\n\t\t\tconsole.error( error );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\t// TODO Deprecate\r\n\r\n\tthis.clearColor = function ( r, g, b, a ) {\r\n\r\n\t\tthis.buffers.color.setClear( r, g, b, a );\r\n\r\n\t};\r\n\r\n\tthis.clearDepth = function ( depth ) {\r\n\r\n\t\tthis.buffers.depth.setClear( depth );\r\n\r\n\t};\r\n\r\n\tthis.clearStencil = function ( stencil ) {\r\n\r\n\t\tthis.buffers.stencil.setClear( stencil );\r\n\r\n\t};\r\n\r\n\t//\r\n\r\n\tthis.scissor = function ( scissor ) {\r\n\r\n\t\tif ( currentScissor.equals( scissor ) === false ) {\r\n\r\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\r\n\t\t\tcurrentScissor.copy( scissor );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.viewport = function ( viewport ) {\r\n\r\n\t\tif ( currentViewport.equals( viewport ) === false ) {\r\n\r\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\r\n\t\t\tcurrentViewport.copy( viewport );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\t//\r\n\r\n\tthis.reset = function () {\r\n\r\n\t\tfor ( var i = 0; i < enabledAttributes.length; i ++ ) {\r\n\r\n\t\t\tif ( enabledAttributes[ i ] === 1 ) {\r\n\r\n\t\t\t\tgl.disableVertexAttribArray( i );\r\n\t\t\t\tenabledAttributes[ i ] = 0;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tcapabilities = {};\r\n\r\n\t\tcompressedTextureFormats = null;\r\n\r\n\t\tcurrentTextureSlot = null;\r\n\t\tcurrentBoundTextures = {};\r\n\r\n\t\tcurrentBlending = null;\r\n\r\n\t\tcurrentFlipSided = null;\r\n\t\tcurrentCullFace = null;\r\n\r\n\t\tthis.buffers.color.reset();\r\n\t\tthis.buffers.depth.reset();\r\n\t\tthis.buffers.stencil.reset();\r\n\r\n\t};\r\n\r\n};\r\n\r\nTHREE.WebGLColorBuffer = function ( gl, state ) {\r\n\r\n\tvar locked = false;\r\n\r\n\tvar color = new THREE.Vector4();\r\n\tvar currentColorMask = null;\r\n\tvar currentColorClear = new THREE.Vector4();\r\n\r\n\tthis.setMask = function ( colorMask ) {\r\n\r\n\t\tif ( currentColorMask !== colorMask && ! locked ) {\r\n\r\n\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\r\n\t\t\tcurrentColorMask = colorMask;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.setLocked = function ( lock ) {\r\n\r\n\t\tlocked = lock;\r\n\r\n\t};\r\n\r\n\tthis.setClear = function ( r, g, b, a ) {\r\n\r\n\t\tcolor.set( r, g, b, a );\r\n\r\n\t\tif ( currentColorClear.equals( color ) === false ) {\r\n\r\n\t\t\tgl.clearColor( r, g, b, a );\r\n\t\t\tcurrentColorClear.copy( color );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.reset = function () {\r\n\r\n\t\tlocked = false;\r\n\r\n\t\tcurrentColorMask = null;\r\n\t\tcurrentColorClear = new THREE.Vector4();\r\n\r\n\t};\r\n\r\n};\r\n\r\nTHREE.WebGLDepthBuffer = function( gl, state ) {\r\n\r\n\tvar locked = false;\r\n\r\n\tvar currentDepthMask = null;\r\n\tvar currentDepthFunc = null;\r\n\tvar currentDepthClear = null;\r\n\r\n\tthis.setTest = function ( depthTest ) {\r\n\r\n\t\tif ( depthTest ) {\r\n\r\n\t\t\tstate.enable( gl.DEPTH_TEST );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tstate.disable( gl.DEPTH_TEST );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.setMask = function( depthMask ){\r\n\r\n\t\tif ( currentDepthMask !== depthMask && ! locked ) {\r\n\r\n\t\t\tgl.depthMask( depthMask );\r\n\t\t\tcurrentDepthMask = depthMask;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.setFunc = function ( depthFunc ) {\r\n\r\n\t\tif ( currentDepthFunc !== depthFunc ) {\r\n\r\n\t\t\tif ( depthFunc ) {\r\n\r\n\t\t\t\tswitch ( depthFunc ) {\r\n\r\n\t\t\t\t\tcase THREE.NeverDepth:\r\n\r\n\t\t\t\t\t\tgl.depthFunc( gl.NEVER );\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase THREE.AlwaysDepth:\r\n\r\n\t\t\t\t\t\tgl.depthFunc( gl.ALWAYS );\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase THREE.LessDepth:\r\n\r\n\t\t\t\t\t\tgl.depthFunc( gl.LESS );\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase THREE.LessEqualDepth:\r\n\r\n\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase THREE.EqualDepth:\r\n\r\n\t\t\t\t\t\tgl.depthFunc( gl.EQUAL );\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase THREE.GreaterEqualDepth:\r\n\r\n\t\t\t\t\t\tgl.depthFunc( gl.GEQUAL );\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase THREE.GreaterDepth:\r\n\r\n\t\t\t\t\t\tgl.depthFunc( gl.GREATER );\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase THREE.NotEqualDepth:\r\n\r\n\t\t\t\t\t\tgl.depthFunc( gl.NOTEQUAL );\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\r\n\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tgl.depthFunc( gl.LEQUAL );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tcurrentDepthFunc = depthFunc;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.setLocked = function ( lock ) {\r\n\r\n\t\tlocked = lock;\r\n\r\n\t};\r\n\r\n\tthis.setClear = function ( depth ) {\r\n\r\n\t\tif ( currentDepthClear !== depth ) {\r\n\r\n\t\t\tgl.clearDepth( depth );\r\n\t\t\tcurrentDepthClear = depth;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.reset = function () {\r\n\r\n\t\tlocked = false;\r\n\r\n\t\tcurrentDepthMask = null;\r\n\t\tcurrentDepthFunc = null;\r\n\t\tcurrentDepthClear = null;\r\n\r\n\t};\r\n\r\n};\r\n\r\nTHREE.WebGLStencilBuffer = function ( gl, state ) {\r\n\r\n\tvar locked = false;\r\n\r\n\tvar currentStencilMask = null;\r\n\tvar currentStencilFunc = null;\r\n\tvar currentStencilRef = null;\r\n\tvar currentStencilFuncMask = null;\r\n\tvar currentStencilFail = null;\r\n\tvar currentStencilZFail = null;\r\n\tvar currentStencilZPass = null;\r\n\tvar currentStencilClear = null;\r\n\r\n\tthis.setTest = function ( stencilTest ) {\r\n\r\n\t\tif ( stencilTest ) {\r\n\r\n\t\t\tstate.enable( gl.STENCIL_TEST );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tstate.disable( gl.STENCIL_TEST );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.setMask = function ( stencilMask ) {\r\n\r\n\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\r\n\r\n\t\t\tgl.stencilMask( stencilMask );\r\n\t\t\tcurrentStencilMask = stencilMask;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.setFunc = function ( stencilFunc, stencilRef, stencilMask ) {\r\n\r\n\t\tif ( currentStencilFunc !== stencilFunc ||\r\n\t\t currentStencilRef \t!== stencilRef \t||\r\n\t\t currentStencilFuncMask !== stencilMask ) {\r\n\r\n\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\r\n\r\n\t\t\tcurrentStencilFunc = stencilFunc;\r\n\t\t\tcurrentStencilRef = stencilRef;\r\n\t\t\tcurrentStencilFuncMask = stencilMask;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.setOp\t = function ( stencilFail, stencilZFail, stencilZPass ) {\r\n\r\n\t\tif ( currentStencilFail\t !== stencilFail \t||\r\n\t\t currentStencilZFail !== stencilZFail ||\r\n\t\t currentStencilZPass !== stencilZPass ) {\r\n\r\n\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\r\n\r\n\t\t\tcurrentStencilFail = stencilFail;\r\n\t\t\tcurrentStencilZFail = stencilZFail;\r\n\t\t\tcurrentStencilZPass = stencilZPass;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.setLocked = function ( lock ) {\r\n\r\n\t\tlocked = lock;\r\n\r\n\t};\r\n\r\n\tthis.setClear = function ( stencil ) {\r\n\r\n\t\tif ( currentStencilClear !== stencil ) {\r\n\r\n\t\t\tgl.clearStencil( stencil );\r\n\t\t\tcurrentStencilClear = stencil;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.reset = function () {\r\n\r\n\t\tlocked = false;\r\n\r\n\t\tcurrentStencilMask = null;\r\n\t\tcurrentStencilFunc = null;\r\n\t\tcurrentStencilRef = null;\r\n\t\tcurrentStencilFuncMask = null;\r\n\t\tcurrentStencilFail = null;\r\n\t\tcurrentStencilZFail = null;\r\n\t\tcurrentStencilZPass = null;\r\n\t\tcurrentStencilClear = null;\r\n\r\n\t};\r\n\r\n};\r\n\r\n// File:src/renderers/webgl/WebGLUniforms.js\r\n\r\n/**\r\n *\r\n * Uniforms of a program.\r\n * Those form a tree structure with a special top-level container for the root,\r\n * which you get by calling 'new WebGLUniforms( gl, program, renderer )'.\r\n *\r\n *\r\n * Properties of inner nodes including the top-level container:\r\n *\r\n * .seq - array of nested uniforms\r\n * .map - nested uniforms by name\r\n *\r\n *\r\n * Methods of all nodes except the top-level container:\r\n *\r\n * .setValue( gl, value, [renderer] )\r\n *\r\n * \t\tuploads a uniform value(s)\r\n * \tthe 'renderer' parameter is needed for sampler uniforms\r\n *\r\n *\r\n * Static methods of the top-level container (renderer factorizations):\r\n *\r\n * .upload( gl, seq, values, renderer )\r\n *\r\n * \t\tsets uniforms in 'seq' to 'values[id].value'\r\n *\r\n * .seqWithValue( seq, values ) : filteredSeq\r\n *\r\n * \t\tfilters 'seq' entries with corresponding entry in values\r\n *\r\n * .splitDynamic( seq, values ) : filteredSeq\r\n *\r\n * \t\tfilters 'seq' entries with dynamic entry and removes them from 'seq'\r\n *\r\n *\r\n * Methods of the top-level container (renderer factorizations):\r\n *\r\n * .setValue( gl, name, value )\r\n *\r\n * \t\tsets uniform with name 'name' to 'value'\r\n *\r\n * .set( gl, obj, prop )\r\n *\r\n * \t\tsets uniform from object and property with same name than uniform\r\n *\r\n * .setOptional( gl, obj, prop )\r\n *\r\n * \t\tlike .set for an optional property of the object\r\n *\r\n *\r\n * @author tschw\r\n *\r\n */\r\n\r\nTHREE.WebGLUniforms = ( function() { // scope\r\n\r\n\t// --- Base for inner nodes (including the root) ---\r\n\r\n\tvar UniformContainer = function() {\r\n\r\n\t\t\tthis.seq = [];\r\n\t\t\tthis.map = {};\r\n\r\n\t\t},\r\n\r\n\t// --- Utilities ---\r\n\r\n\t// Array Caches (provide typed arrays for temporary by size)\r\n\r\n\t\tarrayCacheF32 = [],\r\n\t\tarrayCacheI32 = [],\r\n\r\n\t\tuncacheTemporaryArrays = function() {\r\n\r\n\t\t\tarrayCacheF32.length = 0;\r\n\t\t\tarrayCacheI32.length = 0;\r\n\r\n\t\t},\r\n\r\n\t// Flattening for arrays of vectors and matrices\r\n\r\n\t\tflatten = function( array, nBlocks, blockSize ) {\r\n\r\n\t\t\tvar firstElem = array[ 0 ];\r\n\r\n\t\t\tif ( firstElem <= 0 || firstElem > 0 ) return array;\r\n\t\t\t// unoptimized: ! isNaN( firstElem )\r\n\t\t\t// see http://jacksondunstan.com/articles/983\r\n\r\n\t\t\tvar n = nBlocks * blockSize,\r\n\t\t\t\tr = arrayCacheF32[ n ];\r\n\r\n\t\t\tif ( r === undefined ) {\r\n\r\n\t\t\t\tr = new Float32Array( n );\r\n\t\t\t\tarrayCacheF32[ n ] = r;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( nBlocks !== 0 ) {\r\n\r\n\t\t\t\tfirstElem.toArray( r, 0 );\r\n\r\n\t\t\t\tfor ( var i = 1, offset = 0; i !== nBlocks; ++ i ) {\r\n\r\n\t\t\t\t\toffset += blockSize;\r\n\t\t\t\t\tarray[ i ].toArray( r, offset );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn r;\r\n\r\n\t\t},\r\n\r\n\t// Texture unit allocation\r\n\r\n\t\tallocTexUnits = function( renderer, n ) {\r\n\r\n\t\t\tvar r = arrayCacheI32[ n ];\r\n\r\n\t\t\tif ( r === undefined ) {\r\n\r\n\t\t\t\tr = new Int32Array( n );\r\n\t\t\t\tarrayCacheI32[ n ] = r;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( var i = 0; i !== n; ++ i )\r\n\t\t\t\tr[ i ] = renderer.allocTextureUnit();\r\n\r\n\t\t\treturn r;\r\n\r\n\t\t},\r\n\r\n\t// --- Setters ---\r\n\r\n\t// Note: Defining these methods externally, because they come in a bunch\r\n\t// and this way their names minify.\r\n\r\n\t\t// Single scalar\r\n\r\n\t\tsetValue1f = function( gl, v ) { gl.uniform1f( this.addr, v ); },\r\n\t\tsetValue1i = function( gl, v ) { gl.uniform1i( this.addr, v ); },\r\n\r\n\t\t// Single float vector (from flat array or THREE.VectorN)\r\n\r\n\t\tsetValue2fv = function( gl, v ) {\r\n\r\n\t\t\tif ( v.x === undefined ) gl.uniform2fv( this.addr, v );\r\n\t\t\telse gl.uniform2f( this.addr, v.x, v.y );\r\n\r\n\t\t},\r\n\r\n\t\tsetValue3fv = function( gl, v ) {\r\n\r\n\t\t\tif ( v.x !== undefined )\r\n\t\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\r\n\t\t\telse if ( v.r !== undefined )\r\n\t\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\r\n\t\t\telse\r\n\t\t\t\tgl.uniform3fv( this.addr, v );\r\n\r\n\t\t},\r\n\r\n\t\tsetValue4fv = function( gl, v ) {\r\n\r\n\t\t\tif ( v.x === undefined ) gl.uniform4fv( this.addr, v );\r\n\t\t\telse gl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\r\n\r\n\t\t},\r\n\r\n\t\t// Single matrix (from flat array or MatrixN)\r\n\r\n\t\tsetValue2fm = function( gl, v ) {\r\n\r\n\t\t\tgl.uniformMatrix2fv( this.addr, false, v.elements || v );\r\n\r\n\t\t},\r\n\r\n\t\tsetValue3fm = function( gl, v ) {\r\n\r\n\t\t\tgl.uniformMatrix3fv( this.addr, false, v.elements || v );\r\n\r\n\t\t},\r\n\r\n\t\tsetValue4fm = function( gl, v ) {\r\n\r\n\t\t\tgl.uniformMatrix4fv( this.addr, false, v.elements || v );\r\n\r\n\t\t},\r\n\r\n\t\t// Single texture (2D / Cube)\r\n\r\n\t\tsetValueT1 = function( gl, v, renderer ) {\r\n\r\n\t\t\tvar unit = renderer.allocTextureUnit();\r\n\t\t\tgl.uniform1i( this.addr, unit );\r\n\t\t\tif ( v ) renderer.setTexture2D( v, unit );\r\n\r\n\t\t},\r\n\r\n\t\tsetValueT6 = function( gl, v, renderer ) {\r\n\r\n\t\t\tvar unit = renderer.allocTextureUnit();\r\n\t\t\tgl.uniform1i( this.addr, unit );\r\n\t\t\tif ( v ) renderer.setTextureCube( v, unit );\r\n\r\n\t\t},\r\n\r\n\t\t// Integer / Boolean vectors or arrays thereof (always flat arrays)\r\n\r\n\t\tsetValue2iv = function( gl, v ) { gl.uniform2iv( this.addr, v ); },\r\n\t\tsetValue3iv = function( gl, v ) { gl.uniform3iv( this.addr, v ); },\r\n\t\tsetValue4iv = function( gl, v ) { gl.uniform4iv( this.addr, v ); },\r\n\r\n\t\t// Helper to pick the right setter for the singular case\r\n\r\n\t\tgetSingularSetter = function( type ) {\r\n\r\n\t\t\tswitch ( type ) {\r\n\r\n\t\t\t\tcase 0x1406: return setValue1f; // FLOAT\r\n\t\t\t\tcase 0x8b50: return setValue2fv; // _VEC2\r\n\t\t\t\tcase 0x8b51: return setValue3fv; // _VEC3\r\n\t\t\t\tcase 0x8b52: return setValue4fv; // _VEC4\r\n\r\n\t\t\t\tcase 0x8b5a: return setValue2fm; // _MAT2\r\n\t\t\t\tcase 0x8b5b: return setValue3fm; // _MAT3\r\n\t\t\t\tcase 0x8b5c: return setValue4fm; // _MAT4\r\n\r\n\t\t\t\tcase 0x8b5e: return setValueT1; // SAMPLER_2D\r\n\t\t\t\tcase 0x8b60: return setValueT6; // SAMPLER_CUBE\r\n\r\n\t\t\t\tcase 0x1404: case 0x8b56: return setValue1i; // INT, BOOL\r\n\t\t\t\tcase 0x8b53: case 0x8b57: return setValue2iv; // _VEC2\r\n\t\t\t\tcase 0x8b54: case 0x8b58: return setValue3iv; // _VEC3\r\n\t\t\t\tcase 0x8b55: case 0x8b59: return setValue4iv; // _VEC4\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t// Array of scalars\r\n\r\n\t\tsetValue1fv = function( gl, v ) { gl.uniform1fv( this.addr, v ); },\r\n\t\tsetValue1iv = function( gl, v ) { gl.uniform1iv( this.addr, v ); },\r\n\r\n\t\t// Array of vectors (flat or from THREE classes)\r\n\r\n\t\tsetValueV2a = function( gl, v ) {\r\n\r\n\t\t\tgl.uniform2fv( this.addr, flatten( v, this.size, 2 ) );\r\n\r\n\t\t},\r\n\r\n\t\tsetValueV3a = function( gl, v ) {\r\n\r\n\t\t\tgl.uniform3fv( this.addr, flatten( v, this.size, 3 ) );\r\n\r\n\t\t},\r\n\r\n\t\tsetValueV4a = function( gl, v ) {\r\n\r\n\t\t\tgl.uniform4fv( this.addr, flatten( v, this.size, 4 ) );\r\n\r\n\t\t},\r\n\r\n\t\t// Array of matrices (flat or from THREE clases)\r\n\r\n\t\tsetValueM2a = function( gl, v ) {\r\n\r\n\t\t\tgl.uniformMatrix2fv( this.addr, false, flatten( v, this.size, 4 ) );\r\n\r\n\t\t},\r\n\r\n\t\tsetValueM3a = function( gl, v ) {\r\n\r\n\t\t\tgl.uniformMatrix3fv( this.addr, false, flatten( v, this.size, 9 ) );\r\n\r\n\t\t},\r\n\r\n\t\tsetValueM4a = function( gl, v ) {\r\n\r\n\t\t\tgl.uniformMatrix4fv( this.addr, false, flatten( v, this.size, 16 ) );\r\n\r\n\t\t},\r\n\r\n\t\t// Array of textures (2D / Cube)\r\n\r\n\t\tsetValueT1a = function( gl, v, renderer ) {\r\n\r\n\t\t\tvar n = v.length,\r\n\t\t\t\tunits = allocTexUnits( renderer, n );\r\n\r\n\t\t\tgl.uniform1iv( this.addr, units );\r\n\r\n\t\t\tfor ( var i = 0; i !== n; ++ i ) {\r\n\r\n\t\t\t\tvar tex = v[ i ];\r\n\t\t\t\tif ( tex ) renderer.setTexture2D( tex, units[ i ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\tsetValueT6a = function( gl, v, renderer ) {\r\n\r\n\t\t\tvar n = v.length,\r\n\t\t\t\tunits = allocTexUnits( renderer, n );\r\n\r\n\t\t\tgl.uniform1iv( this.addr, units );\r\n\r\n\t\t\tfor ( var i = 0; i !== n; ++ i ) {\r\n\r\n\t\t\t\tvar tex = v[ i ];\r\n\t\t\t\tif ( tex ) renderer.setTextureCube( tex, units[ i ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\r\n\t\t// Helper to pick the right setter for a pure (bottom-level) array\r\n\r\n\t\tgetPureArraySetter = function( type ) {\r\n\r\n\t\t\tswitch ( type ) {\r\n\r\n\t\t\t\tcase 0x1406: return setValue1fv; // FLOAT\r\n\t\t\t\tcase 0x8b50: return setValueV2a; // _VEC2\r\n\t\t\t\tcase 0x8b51: return setValueV3a; // _VEC3\r\n\t\t\t\tcase 0x8b52: return setValueV4a; // _VEC4\r\n\r\n\t\t\t\tcase 0x8b5a: return setValueM2a; // _MAT2\r\n\t\t\t\tcase 0x8b5b: return setValueM3a; // _MAT3\r\n\t\t\t\tcase 0x8b5c: return setValueM4a; // _MAT4\r\n\r\n\t\t\t\tcase 0x8b5e: return setValueT1a; // SAMPLER_2D\r\n\t\t\t\tcase 0x8b60: return setValueT6a; // SAMPLER_CUBE\r\n\r\n\t\t\t\tcase 0x1404: case 0x8b56: return setValue1iv; // INT, BOOL\r\n\t\t\t\tcase 0x8b53: case 0x8b57: return setValue2iv; // _VEC2\r\n\t\t\t\tcase 0x8b54: case 0x8b58: return setValue3iv; // _VEC3\r\n\t\t\t\tcase 0x8b55: case 0x8b59: return setValue4iv; // _VEC4\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t// --- Uniform Classes ---\r\n\r\n\t\tSingleUniform = function SingleUniform( id, activeInfo, addr ) {\r\n\r\n\t\t\tthis.id = id;\r\n\t\t\tthis.addr = addr;\r\n\t\t\tthis.setValue = getSingularSetter( activeInfo.type );\r\n\r\n\t\t\t// this.path = activeInfo.name; // DEBUG\r\n\r\n\t\t},\r\n\r\n\t\tPureArrayUniform = function( id, activeInfo, addr ) {\r\n\r\n\t\t\tthis.id = id;\r\n\t\t\tthis.addr = addr;\r\n\t\t\tthis.size = activeInfo.size;\r\n\t\t\tthis.setValue = getPureArraySetter( activeInfo.type );\r\n\r\n\t\t\t// this.path = activeInfo.name; // DEBUG\r\n\r\n\t\t},\r\n\r\n\t\tStructuredUniform = function( id ) {\r\n\r\n\t\t\tthis.id = id;\r\n\r\n\t\t\tUniformContainer.call( this ); // mix-in\r\n\r\n\t\t};\r\n\r\n\tStructuredUniform.prototype.setValue = function( gl, value ) {\r\n\r\n\t\t// Note: Don't need an extra 'renderer' parameter, since samplers\r\n\t\t// are not allowed in structured uniforms.\r\n\r\n\t\tvar seq = this.seq;\r\n\r\n\t\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\r\n\r\n\t\t\tvar u = seq[ i ];\r\n\t\t\tu.setValue( gl, value[ u.id ] );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\t// --- Top-level ---\r\n\r\n\t// Parser - builds up the property tree from the path strings\r\n\r\n\tvar RePathPart = /([\\w\\d_]+)(\\])?(\\[|\\.)?/g,\r\n\t\t// extracts\r\n\t\t// \t- the identifier (member name or array index)\r\n\t\t// - followed by an optional right bracket (found when array index)\r\n\t\t// - followed by an optional left bracket or dot (type of subscript)\r\n\t\t//\r\n\t\t// Note: These portions can be read in a non-overlapping fashion and\r\n\t\t// allow straightforward parsing of the hierarchy that WebGL encodes\r\n\t\t// in the uniform names.\r\n\r\n\t\taddUniform = function( container, uniformObject ) {\r\n\r\n\t\t\tcontainer.seq.push( uniformObject );\r\n\t\t\tcontainer.map[ uniformObject.id ] = uniformObject;\r\n\r\n\t\t},\r\n\r\n\t\tparseUniform = function( activeInfo, addr, container ) {\r\n\r\n\t\t\tvar path = activeInfo.name,\r\n\t\t\t\tpathLength = path.length;\r\n\r\n\t\t\t// reset RegExp object, because of the early exit of a previous run\r\n\t\t\tRePathPart.lastIndex = 0;\r\n\r\n\t\t\tfor (; ;) {\r\n\r\n\t\t\t\tvar match = RePathPart.exec( path ),\r\n\t\t\t\t\tmatchEnd = RePathPart.lastIndex,\r\n\r\n\t\t\t\t\tid = match[ 1 ],\r\n\t\t\t\t\tidIsIndex = match[ 2 ] === ']',\r\n\t\t\t\t\tsubscript = match[ 3 ];\r\n\r\n\t\t\t\tif ( idIsIndex ) id = id | 0; // convert to integer\r\n\r\n\t\t\t\tif ( subscript === undefined ||\r\n\t\t\t\t\t\tsubscript === '[' && matchEnd + 2 === pathLength ) {\r\n\t\t\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\r\n\r\n\t\t\t\t\taddUniform( container, subscript === undefined ?\r\n\t\t\t\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\r\n\t\t\t\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// step into inner node / create it in case it doesn't exist\r\n\r\n\t\t\t\t\tvar map = container.map,\r\n\t\t\t\t\t\tnext = map[ id ];\r\n\r\n\t\t\t\t\tif ( next === undefined ) {\r\n\r\n\t\t\t\t\t\tnext = new StructuredUniform( id );\r\n\t\t\t\t\t\taddUniform( container, next );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcontainer = next;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t// Root Container\r\n\r\n\t\tWebGLUniforms = function WebGLUniforms( gl, program, renderer ) {\r\n\r\n\t\t\tUniformContainer.call( this );\r\n\r\n\t\t\tthis.renderer = renderer;\r\n\r\n\t\t\tvar n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS );\r\n\r\n\t\t\tfor ( var i = 0; i !== n; ++ i ) {\r\n\r\n\t\t\t\tvar info = gl.getActiveUniform( program, i ),\r\n\t\t\t\t\tpath = info.name,\r\n\t\t\t\t\taddr = gl.getUniformLocation( program, path );\r\n\r\n\t\t\t\tparseUniform( info, addr, this );\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\r\n\tWebGLUniforms.prototype.setValue = function( gl, name, value ) {\r\n\r\n\t\tvar u = this.map[ name ];\r\n\r\n\t\tif ( u !== undefined ) u.setValue( gl, value, this.renderer );\r\n\r\n\t};\r\n\r\n\tWebGLUniforms.prototype.set = function( gl, object, name ) {\r\n\r\n\t\tvar u = this.map[ name ];\r\n\r\n\t\tif ( u !== undefined ) u.setValue( gl, object[ name ], this.renderer );\r\n\r\n\t};\r\n\r\n\tWebGLUniforms.prototype.setOptional = function( gl, object, name ) {\r\n\r\n\t\tvar v = object[ name ];\r\n\r\n\t\tif ( v !== undefined ) this.setValue( gl, name, v );\r\n\r\n\t};\r\n\r\n\r\n\t// Static interface\r\n\r\n\tWebGLUniforms.upload = function( gl, seq, values, renderer ) {\r\n\r\n\t\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\r\n\r\n\t\t\tvar u = seq[ i ],\r\n\t\t\t\tv = values[ u.id ];\r\n\r\n\t\t\tif ( v.needsUpdate !== false ) {\r\n\t\t\t\t// note: always updating when .needsUpdate is undefined\r\n\r\n\t\t\t\tu.setValue( gl, v.value, renderer );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tWebGLUniforms.seqWithValue = function( seq, values ) {\r\n\r\n\t\tvar r = [];\r\n\r\n\t\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\r\n\r\n\t\t\tvar u = seq[ i ];\r\n\t\t\tif ( u.id in values ) r.push( u );\r\n\r\n\t\t}\r\n\r\n\t\treturn r;\r\n\r\n\t};\r\n\r\n\tWebGLUniforms.splitDynamic = function( seq, values ) {\r\n\r\n\t\tvar r = null,\r\n\t\t\tn = seq.length,\r\n\t\t\tw = 0;\r\n\r\n\t\tfor ( var i = 0; i !== n; ++ i ) {\r\n\r\n\t\t\tvar u = seq[ i ],\r\n\t\t\t\tv = values[ u.id ];\r\n\r\n\t\t\tif ( v && v.dynamic === true ) {\r\n\r\n\t\t\t\tif ( r === null ) r = [];\r\n\t\t\t\tr.push( u );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// in-place compact 'seq', removing the matches\r\n\t\t\t\tif ( w < i ) seq[ w ] = u;\r\n\t\t\t\t++ w;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( w < n ) seq.length = w;\r\n\r\n\t\treturn r;\r\n\r\n\t};\r\n\r\n\tWebGLUniforms.evalDynamic = function( seq, values, object, camera ) {\r\n\r\n\t\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\r\n\r\n\t\t\tvar v = values[ seq[ i ].id ],\r\n\t\t\t\tf = v.onUpdateCallback;\r\n\r\n\t\t\tif ( f !== undefined ) f.call( v, object, camera );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\treturn WebGLUniforms;\r\n\r\n} )();\r\n\r\n\r\n// File:src/renderers/webgl/plugins/LensFlarePlugin.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.LensFlarePlugin = function ( renderer, flares ) {\r\n\r\n\tvar gl = renderer.context;\r\n\tvar state = renderer.state;\r\n\r\n\tvar vertexBuffer, elementBuffer;\r\n\tvar shader, program, attributes, uniforms;\r\n\r\n\tvar tempTexture, occlusionTexture;\r\n\r\n\tfunction init() {\r\n\r\n\t\tvar vertices = new Float32Array( [\r\n\t\t\t- 1, - 1, 0, 0,\r\n\t\t\t 1, - 1, 1, 0,\r\n\t\t\t 1, 1, 1, 1,\r\n\t\t\t- 1, 1, 0, 1\r\n\t\t] );\r\n\r\n\t\tvar faces = new Uint16Array( [\r\n\t\t\t0, 1, 2,\r\n\t\t\t0, 2, 3\r\n\t\t] );\r\n\r\n\t\t// buffers\r\n\r\n\t\tvertexBuffer = gl.createBuffer();\r\n\t\telementBuffer = gl.createBuffer();\r\n\r\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\r\n\t\tgl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW );\r\n\r\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\r\n\t\tgl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW );\r\n\r\n\t\t// textures\r\n\r\n\t\ttempTexture = gl.createTexture();\r\n\t\tocclusionTexture = gl.createTexture();\r\n\r\n\t\tstate.bindTexture( gl.TEXTURE_2D, tempTexture );\r\n\t\tgl.texImage2D( gl.TEXTURE_2D, 0, gl.RGB, 16, 16, 0, gl.RGB, gl.UNSIGNED_BYTE, null );\r\n\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE );\r\n\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE );\r\n\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\r\n\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\r\n\r\n\t\tstate.bindTexture( gl.TEXTURE_2D, occlusionTexture );\r\n\t\tgl.texImage2D( gl.TEXTURE_2D, 0, gl.RGBA, 16, 16, 0, gl.RGBA, gl.UNSIGNED_BYTE, null );\r\n\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE );\r\n\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE );\r\n\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\r\n\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\r\n\r\n\t\tshader = {\r\n\r\n\t\t\tvertexShader: [\r\n\r\n\t\t\t\t\"uniform lowp int renderType;\",\r\n\r\n\t\t\t\t\"uniform vec3 screenPosition;\",\r\n\t\t\t\t\"uniform vec2 scale;\",\r\n\t\t\t\t\"uniform float rotation;\",\r\n\r\n\t\t\t\t\"uniform sampler2D occlusionMap;\",\r\n\r\n\t\t\t\t\"attribute vec2 position;\",\r\n\t\t\t\t\"attribute vec2 uv;\",\r\n\r\n\t\t\t\t\"varying vec2 vUV;\",\r\n\t\t\t\t\"varying float vVisibility;\",\r\n\r\n\t\t\t\t\"void main() {\",\r\n\r\n\t\t\t\t\t\"vUV = uv;\",\r\n\r\n\t\t\t\t\t\"vec2 pos = position;\",\r\n\r\n\t\t\t\t\t\"if ( renderType == 2 ) {\",\r\n\r\n\t\t\t\t\t\t\"vec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );\",\r\n\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );\",\r\n\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );\",\r\n\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );\",\r\n\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );\",\r\n\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );\",\r\n\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );\",\r\n\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );\",\r\n\t\t\t\t\t\t\"visibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );\",\r\n\r\n\t\t\t\t\t\t\"vVisibility = visibility.r / 9.0;\",\r\n\t\t\t\t\t\t\"vVisibility *= 1.0 - visibility.g / 9.0;\",\r\n\t\t\t\t\t\t\"vVisibility *= visibility.b / 9.0;\",\r\n\t\t\t\t\t\t\"vVisibility *= 1.0 - visibility.a / 9.0;\",\r\n\r\n\t\t\t\t\t\t\"pos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\",\r\n\t\t\t\t\t\t\"pos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\",\r\n\r\n\t\t\t\t\t\"}\",\r\n\r\n\t\t\t\t\t\"gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\",\r\n\r\n\t\t\t\t\"}\"\r\n\r\n\t\t\t].join( \"\\n\" ),\r\n\r\n\t\t\tfragmentShader: [\r\n\r\n\t\t\t\t\"uniform lowp int renderType;\",\r\n\r\n\t\t\t\t\"uniform sampler2D map;\",\r\n\t\t\t\t\"uniform float opacity;\",\r\n\t\t\t\t\"uniform vec3 color;\",\r\n\r\n\t\t\t\t\"varying vec2 vUV;\",\r\n\t\t\t\t\"varying float vVisibility;\",\r\n\r\n\t\t\t\t\"void main() {\",\r\n\r\n\t\t\t\t\t// pink square\r\n\r\n\t\t\t\t\t\"if ( renderType == 0 ) {\",\r\n\r\n\t\t\t\t\t\t\"gl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );\",\r\n\r\n\t\t\t\t\t// restore\r\n\r\n\t\t\t\t\t\"} else if ( renderType == 1 ) {\",\r\n\r\n\t\t\t\t\t\t\"gl_FragColor = texture2D( map, vUV );\",\r\n\r\n\t\t\t\t\t// flare\r\n\r\n\t\t\t\t\t\"} else {\",\r\n\r\n\t\t\t\t\t\t\"vec4 texture = texture2D( map, vUV );\",\r\n\t\t\t\t\t\t\"texture.a *= opacity * vVisibility;\",\r\n\t\t\t\t\t\t\"gl_FragColor = texture;\",\r\n\t\t\t\t\t\t\"gl_FragColor.rgb *= color;\",\r\n\r\n\t\t\t\t\t\"}\",\r\n\r\n\t\t\t\t\"}\"\r\n\r\n\t\t\t].join( \"\\n\" )\r\n\r\n\t\t};\r\n\r\n\t\tprogram = createProgram( shader );\r\n\r\n\t\tattributes = {\r\n\t\t\tvertex: gl.getAttribLocation ( program, \"position\" ),\r\n\t\t\tuv: gl.getAttribLocation ( program, \"uv\" )\r\n\t\t};\r\n\r\n\t\tuniforms = {\r\n\t\t\trenderType: gl.getUniformLocation( program, \"renderType\" ),\r\n\t\t\tmap: gl.getUniformLocation( program, \"map\" ),\r\n\t\t\tocclusionMap: gl.getUniformLocation( program, \"occlusionMap\" ),\r\n\t\t\topacity: gl.getUniformLocation( program, \"opacity\" ),\r\n\t\t\tcolor: gl.getUniformLocation( program, \"color\" ),\r\n\t\t\tscale: gl.getUniformLocation( program, \"scale\" ),\r\n\t\t\trotation: gl.getUniformLocation( program, \"rotation\" ),\r\n\t\t\tscreenPosition: gl.getUniformLocation( program, \"screenPosition\" )\r\n\t\t};\r\n\r\n\t}\r\n\r\n\t/*\r\n\t * Render lens flares\r\n\t * Method: renders 16x16 0xff00ff-colored points scattered over the light source area,\r\n\t * reads these back and calculates occlusion.\r\n\t */\r\n\r\n\tthis.render = function ( scene, camera, viewport ) {\r\n\r\n\t\tif ( flares.length === 0 ) return;\r\n\r\n\t\tvar tempPosition = new THREE.Vector3();\r\n\r\n\t\tvar invAspect = viewport.w / viewport.z,\r\n\t\t\thalfViewportWidth = viewport.z * 0.5,\r\n\t\t\thalfViewportHeight = viewport.w * 0.5;\r\n\r\n\t\tvar size = 16 / viewport.w,\r\n\t\t\tscale = new THREE.Vector2( size * invAspect, size );\r\n\r\n\t\tvar screenPosition = new THREE.Vector3( 1, 1, 0 ),\r\n\t\t\tscreenPositionPixels = new THREE.Vector2( 1, 1 );\r\n\r\n\t\tvar validArea = new THREE.Box2();\r\n\r\n\t\tvalidArea.min.set( 0, 0 );\r\n\t\tvalidArea.max.set( viewport.z - 16, viewport.w - 16 );\r\n\r\n\t\tif ( program === undefined ) {\r\n\r\n\t\t\tinit();\r\n\r\n\t\t}\r\n\r\n\t\tgl.useProgram( program );\r\n\r\n\t\tstate.initAttributes();\r\n\t\tstate.enableAttribute( attributes.vertex );\r\n\t\tstate.enableAttribute( attributes.uv );\r\n\t\tstate.disableUnusedAttributes();\r\n\r\n\t\t// loop through all lens flares to update their occlusion and positions\r\n\t\t// setup gl and common used attribs/uniforms\r\n\r\n\t\tgl.uniform1i( uniforms.occlusionMap, 0 );\r\n\t\tgl.uniform1i( uniforms.map, 1 );\r\n\r\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\r\n\t\tgl.vertexAttribPointer( attributes.vertex, 2, gl.FLOAT, false, 2 * 8, 0 );\r\n\t\tgl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 );\r\n\r\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\r\n\r\n\t\tstate.disable( gl.CULL_FACE );\r\n\t\tstate.setDepthWrite( false );\r\n\r\n\t\tfor ( var i = 0, l = flares.length; i < l; i ++ ) {\r\n\r\n\t\t\tsize = 16 / viewport.w;\r\n\t\t\tscale.set( size * invAspect, size );\r\n\r\n\t\t\t// calc object screen position\r\n\r\n\t\t\tvar flare = flares[ i ];\r\n\r\n\t\t\ttempPosition.set( flare.matrixWorld.elements[ 12 ], flare.matrixWorld.elements[ 13 ], flare.matrixWorld.elements[ 14 ] );\r\n\r\n\t\t\ttempPosition.applyMatrix4( camera.matrixWorldInverse );\r\n\t\t\ttempPosition.applyProjection( camera.projectionMatrix );\r\n\r\n\t\t\t// setup arrays for gl programs\r\n\r\n\t\t\tscreenPosition.copy( tempPosition );\r\n\r\n\t\t\t// horizontal and vertical coordinate of the lower left corner of the pixels to copy\r\n\r\n\t\t\tscreenPositionPixels.x = viewport.x + ( screenPosition.x * halfViewportWidth ) + halfViewportWidth - 8;\r\n\t\t\tscreenPositionPixels.y = viewport.y + ( screenPosition.y * halfViewportHeight ) + halfViewportHeight - 8;\r\n\r\n\t\t\t// screen cull\r\n\r\n\t\t\tif ( validArea.containsPoint( screenPositionPixels ) === true ) {\r\n\r\n\t\t\t\t// save current RGB to temp texture\r\n\r\n\t\t\t\tstate.activeTexture( gl.TEXTURE0 );\r\n\t\t\t\tstate.bindTexture( gl.TEXTURE_2D, null );\r\n\t\t\t\tstate.activeTexture( gl.TEXTURE1 );\r\n\t\t\t\tstate.bindTexture( gl.TEXTURE_2D, tempTexture );\r\n\t\t\t\tgl.copyTexImage2D( gl.TEXTURE_2D, 0, gl.RGB, screenPositionPixels.x, screenPositionPixels.y, 16, 16, 0 );\r\n\r\n\r\n\t\t\t\t// render pink quad\r\n\r\n\t\t\t\tgl.uniform1i( uniforms.renderType, 0 );\r\n\t\t\t\tgl.uniform2f( uniforms.scale, scale.x, scale.y );\r\n\t\t\t\tgl.uniform3f( uniforms.screenPosition, screenPosition.x, screenPosition.y, screenPosition.z );\r\n\r\n\t\t\t\tstate.disable( gl.BLEND );\r\n\t\t\t\tstate.enable( gl.DEPTH_TEST );\r\n\r\n\t\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\r\n\r\n\r\n\t\t\t\t// copy result to occlusionMap\r\n\r\n\t\t\t\tstate.activeTexture( gl.TEXTURE0 );\r\n\t\t\t\tstate.bindTexture( gl.TEXTURE_2D, occlusionTexture );\r\n\t\t\t\tgl.copyTexImage2D( gl.TEXTURE_2D, 0, gl.RGBA, screenPositionPixels.x, screenPositionPixels.y, 16, 16, 0 );\r\n\r\n\r\n\t\t\t\t// restore graphics\r\n\r\n\t\t\t\tgl.uniform1i( uniforms.renderType, 1 );\r\n\t\t\t\tstate.disable( gl.DEPTH_TEST );\r\n\r\n\t\t\t\tstate.activeTexture( gl.TEXTURE1 );\r\n\t\t\t\tstate.bindTexture( gl.TEXTURE_2D, tempTexture );\r\n\t\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\r\n\r\n\r\n\t\t\t\t// update object positions\r\n\r\n\t\t\t\tflare.positionScreen.copy( screenPosition );\r\n\r\n\t\t\t\tif ( flare.customUpdateCallback ) {\r\n\r\n\t\t\t\t\tflare.customUpdateCallback( flare );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tflare.updateLensFlares();\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// render flares\r\n\r\n\t\t\t\tgl.uniform1i( uniforms.renderType, 2 );\r\n\t\t\t\tstate.enable( gl.BLEND );\r\n\r\n\t\t\t\tfor ( var j = 0, jl = flare.lensFlares.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\t\tvar sprite = flare.lensFlares[ j ];\r\n\r\n\t\t\t\t\tif ( sprite.opacity > 0.001 && sprite.scale > 0.001 ) {\r\n\r\n\t\t\t\t\t\tscreenPosition.x = sprite.x;\r\n\t\t\t\t\t\tscreenPosition.y = sprite.y;\r\n\t\t\t\t\t\tscreenPosition.z = sprite.z;\r\n\r\n\t\t\t\t\t\tsize = sprite.size * sprite.scale / viewport.w;\r\n\r\n\t\t\t\t\t\tscale.x = size * invAspect;\r\n\t\t\t\t\t\tscale.y = size;\r\n\r\n\t\t\t\t\t\tgl.uniform3f( uniforms.screenPosition, screenPosition.x, screenPosition.y, screenPosition.z );\r\n\t\t\t\t\t\tgl.uniform2f( uniforms.scale, scale.x, scale.y );\r\n\t\t\t\t\t\tgl.uniform1f( uniforms.rotation, sprite.rotation );\r\n\r\n\t\t\t\t\t\tgl.uniform1f( uniforms.opacity, sprite.opacity );\r\n\t\t\t\t\t\tgl.uniform3f( uniforms.color, sprite.color.r, sprite.color.g, sprite.color.b );\r\n\r\n\t\t\t\t\t\tstate.setBlending( sprite.blending, sprite.blendEquation, sprite.blendSrc, sprite.blendDst );\r\n\t\t\t\t\t\trenderer.setTexture2D( sprite.texture, 1 );\r\n\r\n\t\t\t\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// restore gl\r\n\r\n\t\tstate.enable( gl.CULL_FACE );\r\n\t\tstate.enable( gl.DEPTH_TEST );\r\n\t\tstate.setDepthWrite( true );\r\n\r\n\t\trenderer.resetGLState();\r\n\r\n\t};\r\n\r\n\tfunction createProgram ( shader ) {\r\n\r\n\t\tvar program = gl.createProgram();\r\n\r\n\t\tvar fragmentShader = gl.createShader( gl.FRAGMENT_SHADER );\r\n\t\tvar vertexShader = gl.createShader( gl.VERTEX_SHADER );\r\n\r\n\t\tvar prefix = \"precision \" + renderer.getPrecision() + \" float;\\n\";\r\n\r\n\t\tgl.shaderSource( fragmentShader, prefix + shader.fragmentShader );\r\n\t\tgl.shaderSource( vertexShader, prefix + shader.vertexShader );\r\n\r\n\t\tgl.compileShader( fragmentShader );\r\n\t\tgl.compileShader( vertexShader );\r\n\r\n\t\tgl.attachShader( program, fragmentShader );\r\n\t\tgl.attachShader( program, vertexShader );\r\n\r\n\t\tgl.linkProgram( program );\r\n\r\n\t\treturn program;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/renderers/webgl/plugins/SpritePlugin.js\r\n\r\n/**\r\n * @author mikael emtinger / http://gomo.se/\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.SpritePlugin = function ( renderer, sprites ) {\r\n\r\n\tvar gl = renderer.context;\r\n\tvar state = renderer.state;\r\n\r\n\tvar vertexBuffer, elementBuffer;\r\n\tvar program, attributes, uniforms;\r\n\r\n\tvar texture;\r\n\r\n\t// decompose matrixWorld\r\n\r\n\tvar spritePosition = new THREE.Vector3();\r\n\tvar spriteRotation = new THREE.Quaternion();\r\n\tvar spriteScale = new THREE.Vector3();\r\n\r\n\tfunction init() {\r\n\r\n\t\tvar vertices = new Float32Array( [\r\n\t\t\t- 0.5, - 0.5, 0, 0,\r\n\t\t\t 0.5, - 0.5, 1, 0,\r\n\t\t\t 0.5, 0.5, 1, 1,\r\n\t\t\t- 0.5, 0.5, 0, 1\r\n\t\t] );\r\n\r\n\t\tvar faces = new Uint16Array( [\r\n\t\t\t0, 1, 2,\r\n\t\t\t0, 2, 3\r\n\t\t] );\r\n\r\n\t\tvertexBuffer = gl.createBuffer();\r\n\t\telementBuffer = gl.createBuffer();\r\n\r\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\r\n\t\tgl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW );\r\n\r\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\r\n\t\tgl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW );\r\n\r\n\t\tprogram = createProgram();\r\n\r\n\t\tattributes = {\r\n\t\t\tposition:\t\t\tgl.getAttribLocation ( program, 'position' ),\r\n\t\t\tuv:\t\t\t\t\tgl.getAttribLocation ( program, 'uv' )\r\n\t\t};\r\n\r\n\t\tuniforms = {\r\n\t\t\tuvOffset:\t\t\tgl.getUniformLocation( program, 'uvOffset' ),\r\n\t\t\tuvScale:\t\t\tgl.getUniformLocation( program, 'uvScale' ),\r\n\r\n\t\t\trotation:\t\t\tgl.getUniformLocation( program, 'rotation' ),\r\n\t\t\tscale:\t\t\t\tgl.getUniformLocation( program, 'scale' ),\r\n\r\n\t\t\tcolor:\t\t\t\tgl.getUniformLocation( program, 'color' ),\r\n\t\t\tmap:\t\t\t\tgl.getUniformLocation( program, 'map' ),\r\n\t\t\topacity:\t\t\tgl.getUniformLocation( program, 'opacity' ),\r\n\r\n\t\t\tmodelViewMatrix: \tgl.getUniformLocation( program, 'modelViewMatrix' ),\r\n\t\t\tprojectionMatrix:\tgl.getUniformLocation( program, 'projectionMatrix' ),\r\n\r\n\t\t\tfogType:\t\t\tgl.getUniformLocation( program, 'fogType' ),\r\n\t\t\tfogDensity:\t\t\tgl.getUniformLocation( program, 'fogDensity' ),\r\n\t\t\tfogNear:\t\t\tgl.getUniformLocation( program, 'fogNear' ),\r\n\t\t\tfogFar:\t\t\t\tgl.getUniformLocation( program, 'fogFar' ),\r\n\t\t\tfogColor:\t\t\tgl.getUniformLocation( program, 'fogColor' ),\r\n\r\n\t\t\talphaTest:\t\t\tgl.getUniformLocation( program, 'alphaTest' )\r\n\t\t};\r\n\r\n\t\tvar canvas = document.createElement( 'canvas' );\r\n\t\tcanvas.width = 8;\r\n\t\tcanvas.height = 8;\r\n\r\n\t\tvar context = canvas.getContext( '2d' );\r\n\t\tcontext.fillStyle = 'white';\r\n\t\tcontext.fillRect( 0, 0, 8, 8 );\r\n\r\n\t\ttexture = new THREE.Texture( canvas );\r\n\t\ttexture.needsUpdate = true;\r\n\r\n\t}\r\n\r\n\tthis.render = function ( scene, camera ) {\r\n\r\n\t\tif ( sprites.length === 0 ) return;\r\n\r\n\t\t// setup gl\r\n\r\n\t\tif ( program === undefined ) {\r\n\r\n\t\t\tinit();\r\n\r\n\t\t}\r\n\r\n\t\tgl.useProgram( program );\r\n\r\n\t\tstate.initAttributes();\r\n\t\tstate.enableAttribute( attributes.position );\r\n\t\tstate.enableAttribute( attributes.uv );\r\n\t\tstate.disableUnusedAttributes();\r\n\r\n\t\tstate.disable( gl.CULL_FACE );\r\n\t\tstate.enable( gl.BLEND );\r\n\r\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\r\n\t\tgl.vertexAttribPointer( attributes.position, 2, gl.FLOAT, false, 2 * 8, 0 );\r\n\t\tgl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 );\r\n\r\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\r\n\r\n\t\tgl.uniformMatrix4fv( uniforms.projectionMatrix, false, camera.projectionMatrix.elements );\r\n\r\n\t\tstate.activeTexture( gl.TEXTURE0 );\r\n\t\tgl.uniform1i( uniforms.map, 0 );\r\n\r\n\t\tvar oldFogType = 0;\r\n\t\tvar sceneFogType = 0;\r\n\t\tvar fog = scene.fog;\r\n\r\n\t\tif ( fog ) {\r\n\r\n\t\t\tgl.uniform3f( uniforms.fogColor, fog.color.r, fog.color.g, fog.color.b );\r\n\r\n\t\t\tif ( fog instanceof THREE.Fog ) {\r\n\r\n\t\t\t\tgl.uniform1f( uniforms.fogNear, fog.near );\r\n\t\t\t\tgl.uniform1f( uniforms.fogFar, fog.far );\r\n\r\n\t\t\t\tgl.uniform1i( uniforms.fogType, 1 );\r\n\t\t\t\toldFogType = 1;\r\n\t\t\t\tsceneFogType = 1;\r\n\r\n\t\t\t} else if ( fog instanceof THREE.FogExp2 ) {\r\n\r\n\t\t\t\tgl.uniform1f( uniforms.fogDensity, fog.density );\r\n\r\n\t\t\t\tgl.uniform1i( uniforms.fogType, 2 );\r\n\t\t\t\toldFogType = 2;\r\n\t\t\t\tsceneFogType = 2;\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tgl.uniform1i( uniforms.fogType, 0 );\r\n\t\t\toldFogType = 0;\r\n\t\t\tsceneFogType = 0;\r\n\r\n\t\t}\r\n\r\n\r\n\t\t// update positions and sort\r\n\r\n\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar sprite = sprites[ i ];\r\n\r\n\t\t\tsprite.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, sprite.matrixWorld );\r\n\t\t\tsprite.z = - sprite.modelViewMatrix.elements[ 14 ];\r\n\r\n\t\t}\r\n\r\n\t\tsprites.sort( painterSortStable );\r\n\r\n\t\t// render all sprites\r\n\r\n\t\tvar scale = [];\r\n\r\n\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar sprite = sprites[ i ];\r\n\t\t\tvar material = sprite.material;\r\n\r\n\t\t\tgl.uniform1f( uniforms.alphaTest, material.alphaTest );\r\n\t\t\tgl.uniformMatrix4fv( uniforms.modelViewMatrix, false, sprite.modelViewMatrix.elements );\r\n\r\n\t\t\tsprite.matrixWorld.decompose( spritePosition, spriteRotation, spriteScale );\r\n\r\n\t\t\tscale[ 0 ] = spriteScale.x;\r\n\t\t\tscale[ 1 ] = spriteScale.y;\r\n\r\n\t\t\tvar fogType = 0;\r\n\r\n\t\t\tif ( scene.fog && material.fog ) {\r\n\r\n\t\t\t\tfogType = sceneFogType;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( oldFogType !== fogType ) {\r\n\r\n\t\t\t\tgl.uniform1i( uniforms.fogType, fogType );\r\n\t\t\t\toldFogType = fogType;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( material.map !== null ) {\r\n\r\n\t\t\t\tgl.uniform2f( uniforms.uvOffset, material.map.offset.x, material.map.offset.y );\r\n\t\t\t\tgl.uniform2f( uniforms.uvScale, material.map.repeat.x, material.map.repeat.y );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tgl.uniform2f( uniforms.uvOffset, 0, 0 );\r\n\t\t\t\tgl.uniform2f( uniforms.uvScale, 1, 1 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgl.uniform1f( uniforms.opacity, material.opacity );\r\n\t\t\tgl.uniform3f( uniforms.color, material.color.r, material.color.g, material.color.b );\r\n\r\n\t\t\tgl.uniform1f( uniforms.rotation, material.rotation );\r\n\t\t\tgl.uniform2fv( uniforms.scale, scale );\r\n\r\n\t\t\tstate.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst );\r\n\t\t\tstate.setDepthTest( material.depthTest );\r\n\t\t\tstate.setDepthWrite( material.depthWrite );\r\n\r\n\t\t\tif ( material.map ) {\r\n\r\n\t\t\t\trenderer.setTexture2D( material.map, 0 );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\trenderer.setTexture2D( texture, 0 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\r\n\r\n\t\t}\r\n\r\n\t\t// restore gl\r\n\r\n\t\tstate.enable( gl.CULL_FACE );\r\n\r\n\t\trenderer.resetGLState();\r\n\r\n\t};\r\n\r\n\tfunction createProgram () {\r\n\r\n\t\tvar program = gl.createProgram();\r\n\r\n\t\tvar vertexShader = gl.createShader( gl.VERTEX_SHADER );\r\n\t\tvar fragmentShader = gl.createShader( gl.FRAGMENT_SHADER );\r\n\r\n\t\tgl.shaderSource( vertexShader, [\r\n\r\n\t\t\t'precision ' + renderer.getPrecision() + ' float;',\r\n\r\n\t\t\t'uniform mat4 modelViewMatrix;',\r\n\t\t\t'uniform mat4 projectionMatrix;',\r\n\t\t\t'uniform float rotation;',\r\n\t\t\t'uniform vec2 scale;',\r\n\t\t\t'uniform vec2 uvOffset;',\r\n\t\t\t'uniform vec2 uvScale;',\r\n\r\n\t\t\t'attribute vec2 position;',\r\n\t\t\t'attribute vec2 uv;',\r\n\r\n\t\t\t'varying vec2 vUV;',\r\n\r\n\t\t\t'void main() {',\r\n\r\n\t\t\t\t'vUV = uvOffset + uv * uvScale;',\r\n\r\n\t\t\t\t'vec2 alignedPosition = position * scale;',\r\n\r\n\t\t\t\t'vec2 rotatedPosition;',\r\n\t\t\t\t'rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;',\r\n\t\t\t\t'rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;',\r\n\r\n\t\t\t\t'vec4 finalPosition;',\r\n\r\n\t\t\t\t'finalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );',\r\n\t\t\t\t'finalPosition.xy += rotatedPosition;',\r\n\t\t\t\t'finalPosition = projectionMatrix * finalPosition;',\r\n\r\n\t\t\t\t'gl_Position = finalPosition;',\r\n\r\n\t\t\t'}'\r\n\r\n\t\t].join( '\\n' ) );\r\n\r\n\t\tgl.shaderSource( fragmentShader, [\r\n\r\n\t\t\t'precision ' + renderer.getPrecision() + ' float;',\r\n\r\n\t\t\t'uniform vec3 color;',\r\n\t\t\t'uniform sampler2D map;',\r\n\t\t\t'uniform float opacity;',\r\n\r\n\t\t\t'uniform int fogType;',\r\n\t\t\t'uniform vec3 fogColor;',\r\n\t\t\t'uniform float fogDensity;',\r\n\t\t\t'uniform float fogNear;',\r\n\t\t\t'uniform float fogFar;',\r\n\t\t\t'uniform float alphaTest;',\r\n\r\n\t\t\t'varying vec2 vUV;',\r\n\r\n\t\t\t'void main() {',\r\n\r\n\t\t\t\t'vec4 texture = texture2D( map, vUV );',\r\n\r\n\t\t\t\t'if ( texture.a < alphaTest ) discard;',\r\n\r\n\t\t\t\t'gl_FragColor = vec4( color * texture.xyz, texture.a * opacity );',\r\n\r\n\t\t\t\t'if ( fogType > 0 ) {',\r\n\r\n\t\t\t\t\t'float depth = gl_FragCoord.z / gl_FragCoord.w;',\r\n\t\t\t\t\t'float fogFactor = 0.0;',\r\n\r\n\t\t\t\t\t'if ( fogType == 1 ) {',\r\n\r\n\t\t\t\t\t\t'fogFactor = smoothstep( fogNear, fogFar, depth );',\r\n\r\n\t\t\t\t\t'} else {',\r\n\r\n\t\t\t\t\t\t'const float LOG2 = 1.442695;',\r\n\t\t\t\t\t\t'fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );',\r\n\t\t\t\t\t\t'fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );',\r\n\r\n\t\t\t\t\t'}',\r\n\r\n\t\t\t\t\t'gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );',\r\n\r\n\t\t\t\t'}',\r\n\r\n\t\t\t'}'\r\n\r\n\t\t].join( '\\n' ) );\r\n\r\n\t\tgl.compileShader( vertexShader );\r\n\t\tgl.compileShader( fragmentShader );\r\n\r\n\t\tgl.attachShader( program, vertexShader );\r\n\t\tgl.attachShader( program, fragmentShader );\r\n\r\n\t\tgl.linkProgram( program );\r\n\r\n\t\treturn program;\r\n\r\n\t}\r\n\r\n\tfunction painterSortStable ( a, b ) {\r\n\t\t\r\n\t\tif ( a.renderOrder !== b.renderOrder ) {\r\n\r\n\t\t\treturn a.renderOrder - b.renderOrder;\r\n\r\n\t\t} else if ( a.z !== b.z ) {\r\n\r\n\t\t\treturn b.z - a.z;\r\n\r\n\t\t} else {\r\n\r\n\t\t\treturn b.id - a.id;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/Three.Legacy.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nObject.assign( THREE, {\r\n\tFace4: function ( a, b, c, d, normal, color, materialIndex ) {\r\n\t\tconsole.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' );\r\n\t\treturn new THREE.Face3( a, b, c, normal, color, materialIndex );\r\n\t},\r\n\tLineStrip: 0,\r\n\tLinePieces: 1,\r\n\tMeshFaceMaterial: THREE.MultiMaterial,\r\n\tPointCloud: function ( geometry, material ) {\r\n\t\tconsole.warn( 'THREE.PointCloud has been renamed to THREE.Points.' );\r\n\t\treturn new THREE.Points( geometry, material );\r\n\t},\r\n\tParticle: THREE.Sprite,\r\n\tParticleSystem: function ( geometry, material ) {\r\n\t\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' );\r\n\t\treturn new THREE.Points( geometry, material );\r\n\t},\r\n\tPointCloudMaterial: function ( parameters ) {\r\n\t\tconsole.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' );\r\n\t\treturn new THREE.PointsMaterial( parameters );\r\n\t},\r\n\tParticleBasicMaterial: function ( parameters ) {\r\n\t\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' );\r\n\t\treturn new THREE.PointsMaterial( parameters );\r\n\t},\r\n\tParticleSystemMaterial: function ( parameters ) {\r\n\t\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' );\r\n\t\treturn new THREE.PointsMaterial( parameters );\r\n\t},\r\n\tVertex: function ( x, y, z ) {\r\n\t\tconsole.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' );\r\n\t\treturn new THREE.Vector3( x, y, z );\r\n\t}\r\n} );\r\n\r\n//\r\n\r\nObject.assign( THREE.Box2.prototype, {\r\n\tempty: function () {\r\n\t\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\r\n\t\treturn this.isEmpty();\r\n\t},\r\n\tisIntersectionBox: function ( box ) {\r\n\t\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\r\n\t\treturn this.intersectsBox( box );\r\n\t}\r\n} );\r\n\r\nObject.assign( THREE.Box3.prototype, {\r\n\tempty: function () {\r\n\t\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\r\n\t\treturn this.isEmpty();\r\n\t},\r\n\tisIntersectionBox: function ( box ) {\r\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\r\n\t\treturn this.intersectsBox( box );\r\n\t},\r\n\tisIntersectionSphere: function ( sphere ) {\r\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\r\n\t\treturn this.intersectsSphere( sphere );\r\n\t}\r\n} );\r\n\r\nObject.assign( THREE.Matrix3.prototype, {\r\n\tmultiplyVector3: function ( vector ) {\r\n\t\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\r\n\t\treturn vector.applyMatrix3( this );\r\n\t},\r\n\tmultiplyVector3Array: function ( a ) {\r\n\t\tconsole.warn( 'THREE.Matrix3: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.' );\r\n\t\treturn this.applyToVector3Array( a );\r\n\t}\r\n} );\r\n\r\nObject.assign( THREE.Matrix4.prototype, {\r\n\textractPosition: function ( m ) {\r\n\t\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\r\n\t\treturn this.copyPosition( m );\r\n\t},\r\n\tsetRotationFromQuaternion: function ( q ) {\r\n\t\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\r\n\t\treturn this.makeRotationFromQuaternion( q );\r\n\t},\r\n\tmultiplyVector3: function ( vector ) {\r\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead.' );\r\n\t\treturn vector.applyProjection( this );\r\n\t},\r\n\tmultiplyVector4: function ( vector ) {\r\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\r\n\t\treturn vector.applyMatrix4( this );\r\n\t},\r\n\tmultiplyVector3Array: function ( a ) {\r\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.' );\r\n\t\treturn this.applyToVector3Array( a );\r\n\t},\r\n\trotateAxis: function ( v ) {\r\n\t\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\r\n\t\tv.transformDirection( this );\r\n\t},\r\n\tcrossVector: function ( vector ) {\r\n\t\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\r\n\t\treturn vector.applyMatrix4( this );\r\n\t},\r\n\ttranslate: function ( v ) {\r\n\t\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\r\n\t},\r\n\trotateX: function ( angle ) {\r\n\t\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\r\n\t},\r\n\trotateY: function ( angle ) {\r\n\t\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\r\n\t},\r\n\trotateZ: function ( angle ) {\r\n\t\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\r\n\t},\r\n\trotateByAxis: function ( axis, angle ) {\r\n\t\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\r\n\t}\r\n} );\r\n\r\nObject.assign( THREE.Plane.prototype, {\r\n\tisIntersectionLine: function ( line ) {\r\n\t\tconsole.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' );\r\n\t\treturn this.intersectsLine( line );\r\n\t}\r\n} );\r\n\r\nObject.assign( THREE.Quaternion.prototype, {\r\n\tmultiplyVector3: function ( vector ) {\r\n\t\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\r\n\t\treturn vector.applyQuaternion( this );\r\n\t}\r\n} );\r\n\r\nObject.assign( THREE.Ray.prototype, {\r\n\tisIntersectionBox: function ( box ) {\r\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\r\n\t\treturn this.intersectsBox( box );\r\n\t},\r\n\tisIntersectionPlane: function ( plane ) {\r\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\r\n\t\treturn this.intersectsPlane( plane );\r\n\t},\r\n\tisIntersectionSphere: function ( sphere ) {\r\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\r\n\t\treturn this.intersectsSphere( sphere );\r\n\t}\r\n} );\r\n\r\nObject.assign( THREE.Vector3.prototype, {\r\n\tsetEulerFromRotationMatrix: function () {\r\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\r\n\t},\r\n\tsetEulerFromQuaternion: function () {\r\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\r\n\t},\r\n\tgetPositionFromMatrix: function ( m ) {\r\n\t\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\r\n\t\treturn this.setFromMatrixPosition( m );\r\n\t},\r\n\tgetScaleFromMatrix: function ( m ) {\r\n\t\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\r\n\t\treturn this.setFromMatrixScale( m );\r\n\t},\r\n\tgetColumnFromMatrix: function ( index, matrix ) {\r\n\t\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\r\n\t\treturn this.setFromMatrixColumn( matrix, index );\r\n\t}\r\n} );\r\n\r\n//\r\n\r\nObject.assign( THREE.Object3D.prototype, {\r\n\tgetChildByName: function ( name ) {\r\n\t\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\r\n\t\treturn this.getObjectByName( name );\r\n\t},\r\n\trenderDepth: function ( value ) {\r\n\t\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\r\n\t},\r\n\ttranslate: function ( distance, axis ) {\r\n\t\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\r\n\t\treturn this.translateOnAxis( axis, distance );\r\n\t}\r\n} );\r\n\r\nObject.defineProperties( THREE.Object3D.prototype, {\r\n\teulerOrder: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\r\n\t\t\treturn this.rotation.order;\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\r\n\t\t\tthis.rotation.order = value;\r\n\t\t}\r\n\t},\r\n\tuseQuaternion: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\r\n\t\t}\r\n\t}\r\n} );\r\n\r\nObject.defineProperties( THREE.LOD.prototype, {\r\n\tobjects: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.LOD: .objects has been renamed to .levels.' );\r\n\t\t\treturn this.levels;\r\n\t\t}\r\n\t}\r\n} );\r\n\r\n//\r\n\r\nTHREE.PerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) {\r\n\r\n\tconsole.warn( \"THREE.PerspectiveCamera.setLens is deprecated. \" +\r\n\t\t\t\"Use .setFocalLength and .filmGauge for a photographic setup.\" );\r\n\r\n\tif ( filmGauge !== undefined ) this.filmGauge = filmGauge;\r\n\tthis.setFocalLength( focalLength );\r\n\r\n};\r\n\r\n//\r\n\r\nObject.defineProperties( THREE.Light.prototype, {\r\n\tonlyShadow: {\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.Light: .onlyShadow has been removed.' );\r\n\t\t}\r\n\t},\r\n\tshadowCameraFov: {\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' );\r\n\t\t\tthis.shadow.camera.fov = value;\r\n\t\t}\r\n\t},\r\n\tshadowCameraLeft: {\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' );\r\n\t\t\tthis.shadow.camera.left = value;\r\n\t\t}\r\n\t},\r\n\tshadowCameraRight: {\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' );\r\n\t\t\tthis.shadow.camera.right = value;\r\n\t\t}\r\n\t},\r\n\tshadowCameraTop: {\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' );\r\n\t\t\tthis.shadow.camera.top = value;\r\n\t\t}\r\n\t},\r\n\tshadowCameraBottom: {\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' );\r\n\t\t\tthis.shadow.camera.bottom = value;\r\n\t\t}\r\n\t},\r\n\tshadowCameraNear: {\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' );\r\n\t\t\tthis.shadow.camera.near = value;\r\n\t\t}\r\n\t},\r\n\tshadowCameraFar: {\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' );\r\n\t\t\tthis.shadow.camera.far = value;\r\n\t\t}\r\n\t},\r\n\tshadowCameraVisible: {\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' );\r\n\t\t}\r\n\t},\r\n\tshadowBias: {\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' );\r\n\t\t\tthis.shadow.bias = value;\r\n\t\t}\r\n\t},\r\n\tshadowDarkness: {\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.Light: .shadowDarkness has been removed.' );\r\n\t\t}\r\n\t},\r\n\tshadowMapWidth: {\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' );\r\n\t\t\tthis.shadow.mapSize.width = value;\r\n\t\t}\r\n\t},\r\n\tshadowMapHeight: {\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' );\r\n\t\t\tthis.shadow.mapSize.height = value;\r\n\t\t}\r\n\t}\r\n} );\r\n\r\n//\r\n\r\nObject.defineProperties( THREE.BufferAttribute.prototype, {\r\n\tlength: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Please use .count.' );\r\n\t\t\treturn this.array.length;\r\n\t\t}\r\n\t}\r\n} );\r\n\r\nObject.assign( THREE.BufferGeometry.prototype, {\r\n\taddIndex: function ( index ) {\r\n\t\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\r\n\t\tthis.setIndex( index );\r\n\t},\r\n\taddDrawCall: function ( start, count, indexOffset ) {\r\n\t\tif ( indexOffset !== undefined ) {\r\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\r\n\t\t}\r\n\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\r\n\t\tthis.addGroup( start, count );\r\n\t},\r\n\tclearDrawCalls: function () {\r\n\t\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\r\n\t\tthis.clearGroups();\r\n\t},\r\n\tcomputeTangents: function () {\r\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' );\r\n\t},\r\n\tcomputeOffsets: function () {\r\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\r\n\t}\r\n} );\r\n\r\nObject.defineProperties( THREE.BufferGeometry.prototype, {\r\n\tdrawcalls: {\r\n\t\tget: function () {\r\n\t\t\tconsole.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' );\r\n\t\t\treturn this.groups;\r\n\t\t}\r\n\t},\r\n\toffsets: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' );\r\n\t\t\treturn this.groups;\r\n\t\t}\r\n\t}\r\n} );\r\n\r\n//\r\n\r\nObject.defineProperties( THREE.Material.prototype, {\r\n\twrapAround: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .wrapAround has been removed.' );\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .wrapAround has been removed.' );\r\n\t\t}\r\n\t},\r\n\twrapRGB: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .wrapRGB has been removed.' );\r\n\t\t\treturn new THREE.Color();\r\n\t\t}\r\n\t}\r\n} );\r\n\r\nObject.defineProperties( THREE.MeshPhongMaterial.prototype, {\r\n\tmetal: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' );\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' );\r\n\t\t}\r\n\t}\r\n} );\r\n\r\nObject.defineProperties( THREE.ShaderMaterial.prototype, {\r\n\tderivatives: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\r\n\t\t\treturn this.extensions.derivatives;\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\r\n\t\t\tthis.extensions.derivatives = value;\r\n\t\t}\r\n\t}\r\n} );\r\n\r\n//\r\n\r\nTHREE.EventDispatcher.prototype = Object.assign( Object.create( {\r\n\r\n\t// Note: Extra base ensures these properties are not 'assign'ed.\r\n\r\n\tconstructor: THREE.EventDispatcher,\r\n\r\n\tapply: function ( target ) {\r\n\r\n\t\tconsole.warn( \"THREE.EventDispatcher: .apply is deprecated, \" +\r\n\t\t\t\t\"just inherit or Object.assign the prototype to mix-in.\" );\r\n\r\n\t\tObject.assign( target, this );\r\n\r\n\t}\r\n\r\n} ), THREE.EventDispatcher.prototype );\r\n\r\n//\r\n\r\nObject.assign( THREE.WebGLRenderer.prototype, {\r\n\tsupportsFloatTextures: function () {\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\r\n\t\treturn this.extensions.get( 'OES_texture_float' );\r\n\t},\r\n\tsupportsHalfFloatTextures: function () {\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\r\n\t\treturn this.extensions.get( 'OES_texture_half_float' );\r\n\t},\r\n\tsupportsStandardDerivatives: function () {\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\r\n\t\treturn this.extensions.get( 'OES_standard_derivatives' );\r\n\t},\r\n\tsupportsCompressedTextureS3TC: function () {\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\r\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\r\n\t},\r\n\tsupportsCompressedTexturePVRTC: function () {\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\r\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\r\n\t},\r\n\tsupportsBlendMinMax: function () {\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\r\n\t\treturn this.extensions.get( 'EXT_blend_minmax' );\r\n\t},\r\n\tsupportsVertexTextures: function () {\r\n\t\treturn this.capabilities.vertexTextures;\r\n\t},\r\n\tsupportsInstancedArrays: function () {\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\r\n\t\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\r\n\t},\r\n\tenableScissorTest: function ( boolean ) {\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\r\n\t\tthis.setScissorTest( boolean );\r\n\t},\r\n\tinitMaterial: function () {\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\r\n\t},\r\n\taddPrePlugin: function () {\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\r\n\t},\r\n\taddPostPlugin: function () {\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\r\n\t},\r\n\tupdateShadowMap: function () {\r\n\t\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\r\n\t}\r\n} );\r\n\r\nObject.defineProperties( THREE.WebGLRenderer.prototype, {\r\n\tshadowMapEnabled: {\r\n\t\tget: function () {\r\n\t\t\treturn this.shadowMap.enabled;\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' );\r\n\t\t\tthis.shadowMap.enabled = value;\r\n\t\t}\r\n\t},\r\n\tshadowMapType: {\r\n\t\tget: function () {\r\n\t\t\treturn this.shadowMap.type;\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' );\r\n\t\t\tthis.shadowMap.type = value;\r\n\t\t}\r\n\t},\r\n\tshadowMapCullFace: {\r\n\t\tget: function () {\r\n\t\t\treturn this.shadowMap.cullFace;\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace is now .shadowMap.cullFace.' );\r\n\t\t\tthis.shadowMap.cullFace = value;\r\n\t\t}\r\n\t}\r\n} );\r\n\r\nObject.defineProperties( THREE.WebGLShadowMap.prototype, {\r\n\tcullFace: {\r\n\t\tget: function () {\r\n\t\t\treturn this.renderReverseSided ? THREE.CullFaceFront : THREE.CullFaceBack;\r\n\t\t},\r\n\t\tset: function ( cullFace ) {\r\n\t\t\tvar value = ( cullFace !== THREE.CullFaceBack );\r\n\t\t\tconsole.warn( \"WebGLRenderer: .shadowMap.cullFace is deprecated. Set .shadowMap.renderReverseSided to \" + value + \".\" );\r\n\t\t\tthis.renderReverseSided = value;\r\n\t\t}\r\n\t}\r\n} );\r\n\r\n//\r\n\r\nObject.defineProperties( THREE.WebGLRenderTarget.prototype, {\r\n\twrapS: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\r\n\t\t\treturn this.texture.wrapS;\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\r\n\t\t\tthis.texture.wrapS = value;\r\n\t\t}\r\n\t},\r\n\twrapT: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\r\n\t\t\treturn this.texture.wrapT;\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\r\n\t\t\tthis.texture.wrapT = value;\r\n\t\t}\r\n\t},\r\n\tmagFilter: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\r\n\t\t\treturn this.texture.magFilter;\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\r\n\t\t\tthis.texture.magFilter = value;\r\n\t\t}\r\n\t},\r\n\tminFilter: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\r\n\t\t\treturn this.texture.minFilter;\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\r\n\t\t\tthis.texture.minFilter = value;\r\n\t\t}\r\n\t},\r\n\tanisotropy: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\r\n\t\t\treturn this.texture.anisotropy;\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\r\n\t\t\tthis.texture.anisotropy = value;\r\n\t\t}\r\n\t},\r\n\toffset: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\r\n\t\t\treturn this.texture.offset;\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\r\n\t\t\tthis.texture.offset = value;\r\n\t\t}\r\n\t},\r\n\trepeat: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\r\n\t\t\treturn this.texture.repeat;\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\r\n\t\t\tthis.texture.repeat = value;\r\n\t\t}\r\n\t},\r\n\tformat: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\r\n\t\t\treturn this.texture.format;\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\r\n\t\t\tthis.texture.format = value;\r\n\t\t}\r\n\t},\r\n\ttype: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\r\n\t\t\treturn this.texture.type;\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\r\n\t\t\tthis.texture.type = value;\r\n\t\t}\r\n\t},\r\n\tgenerateMipmaps: {\r\n\t\tget: function () {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\r\n\t\t\treturn this.texture.generateMipmaps;\r\n\t\t},\r\n\t\tset: function ( value ) {\r\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\r\n\t\t\tthis.texture.generateMipmaps = value;\r\n\t\t}\r\n\t}\r\n} );\r\n\r\n//\r\n\r\nObject.assign( THREE.Audio.prototype, {\r\n\tload: function ( file ) {\r\n\t\tconsole.warn( 'THREE.Audio: .load has been deprecated. Please use THREE.AudioLoader.' );\r\n\t\tvar scope = this;\r\n\t\tvar audioLoader = new THREE.AudioLoader();\r\n\t\taudioLoader.load( file, function ( buffer ) {\r\n\t\t\tscope.setBuffer( buffer );\r\n\t\t} );\r\n\t\treturn this;\r\n\t}\r\n} );\r\n\r\nObject.assign( THREE.AudioAnalyser.prototype, {\r\n\tgetData: function ( file ) {\r\n\t\tconsole.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' );\r\n\t\treturn this.getFrequencyData();\r\n\t}\r\n} );\r\n\r\n//\r\n\r\nTHREE.GeometryUtils = {\r\n\r\n\tmerge: function ( geometry1, geometry2, materialIndexOffset ) {\r\n\r\n\t\tconsole.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' );\r\n\r\n\t\tvar matrix;\r\n\r\n\t\tif ( geometry2 instanceof THREE.Mesh ) {\r\n\r\n\t\t\tgeometry2.matrixAutoUpdate && geometry2.updateMatrix();\r\n\r\n\t\t\tmatrix = geometry2.matrix;\r\n\t\t\tgeometry2 = geometry2.geometry;\r\n\r\n\t\t}\r\n\r\n\t\tgeometry1.merge( geometry2, matrix, materialIndexOffset );\r\n\r\n\t},\r\n\r\n\tcenter: function ( geometry ) {\r\n\r\n\t\tconsole.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' );\r\n\t\treturn geometry.center();\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.ImageUtils = {\r\n\r\n\tcrossOrigin: undefined,\r\n\r\n\tloadTexture: function ( url, mapping, onLoad, onError ) {\r\n\r\n\t\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\r\n\r\n\t\tvar loader = new THREE.TextureLoader();\r\n\t\tloader.setCrossOrigin( this.crossOrigin );\r\n\r\n\t\tvar texture = loader.load( url, onLoad, undefined, onError );\r\n\r\n\t\tif ( mapping ) texture.mapping = mapping;\r\n\r\n\t\treturn texture;\r\n\r\n\t},\r\n\r\n\tloadTextureCube: function ( urls, mapping, onLoad, onError ) {\r\n\r\n\t\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\r\n\r\n\t\tvar loader = new THREE.CubeTextureLoader();\r\n\t\tloader.setCrossOrigin( this.crossOrigin );\r\n\r\n\t\tvar texture = loader.load( urls, onLoad, undefined, onError );\r\n\r\n\t\tif ( mapping ) texture.mapping = mapping;\r\n\r\n\t\treturn texture;\r\n\r\n\t},\r\n\r\n\tloadCompressedTexture: function () {\r\n\r\n\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\r\n\r\n\t},\r\n\r\n\tloadCompressedTextureCube: function () {\r\n\r\n\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\r\n\r\n\t}\r\n\r\n};\r\n\r\n//\r\n\r\nTHREE.Projector = function () {\r\n\r\n\tconsole.error( 'THREE.Projector has been moved to /examples/js/renderers/Projector.js.' );\r\n\r\n\tthis.projectVector = function ( vector, camera ) {\r\n\r\n\t\tconsole.warn( 'THREE.Projector: .projectVector() is now vector.project().' );\r\n\t\tvector.project( camera );\r\n\r\n\t};\r\n\r\n\tthis.unprojectVector = function ( vector, camera ) {\r\n\r\n\t\tconsole.warn( 'THREE.Projector: .unprojectVector() is now vector.unproject().' );\r\n\t\tvector.unproject( camera );\r\n\r\n\t};\r\n\r\n\tthis.pickingRay = function ( vector, camera ) {\r\n\r\n\t\tconsole.error( 'THREE.Projector: .pickingRay() is now raycaster.setFromCamera().' );\r\n\r\n\t};\r\n\r\n};\r\n\r\n//\r\n\r\nTHREE.CanvasRenderer = function () {\r\n\r\n\tconsole.error( 'THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js' );\r\n\r\n\tthis.domElement = document.createElement( 'canvas' );\r\n\tthis.clear = function () {};\r\n\tthis.render = function () {};\r\n\tthis.setClearColor = function () {};\r\n\tthis.setSize = function () {};\r\n\r\n};\r\n\r\n// File:src/extras/CurveUtils.js\r\n\r\n/**\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n */\r\n\r\nTHREE.CurveUtils = {\r\n\r\n\ttangentQuadraticBezier: function ( t, p0, p1, p2 ) {\r\n\r\n\t\treturn 2 * ( 1 - t ) * ( p1 - p0 ) + 2 * t * ( p2 - p1 );\r\n\r\n\t},\r\n\r\n\t// Puay Bing, thanks for helping with this derivative!\r\n\r\n\ttangentCubicBezier: function ( t, p0, p1, p2, p3 ) {\r\n\r\n\t\treturn - 3 * p0 * ( 1 - t ) * ( 1 - t ) +\r\n\t\t\t3 * p1 * ( 1 - t ) * ( 1 - t ) - 6 * t * p1 * ( 1 - t ) +\r\n\t\t\t6 * t * p2 * ( 1 - t ) - 3 * t * t * p2 +\r\n\t\t\t3 * t * t * p3;\r\n\r\n\t},\r\n\r\n\ttangentSpline: function ( t, p0, p1, p2, p3 ) {\r\n\r\n\t\t// To check if my formulas are correct\r\n\r\n\t\tvar h00 = 6 * t * t - 6 * t; \t// derived from 2t^3 − 3t^2 + 1\r\n\t\tvar h10 = 3 * t * t - 4 * t + 1; // t^3 − 2t^2 + t\r\n\t\tvar h01 = - 6 * t * t + 6 * t; \t// − 2t3 + 3t2\r\n\t\tvar h11 = 3 * t * t - 2 * t;\t// t3 − t2\r\n\r\n\t\treturn h00 + h10 + h01 + h11;\r\n\r\n\t},\r\n\r\n\t// Catmull-Rom\r\n\r\n\tinterpolate: function( p0, p1, p2, p3, t ) {\r\n\r\n\t\tvar v0 = ( p2 - p0 ) * 0.5;\r\n\t\tvar v1 = ( p3 - p1 ) * 0.5;\r\n\t\tvar t2 = t * t;\r\n\t\tvar t3 = t * t2;\r\n\t\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/extras/SceneUtils.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.SceneUtils = {\r\n\r\n\tcreateMultiMaterialObject: function ( geometry, materials ) {\r\n\r\n\t\tvar group = new THREE.Group();\r\n\r\n\t\tfor ( var i = 0, l = materials.length; i < l; i ++ ) {\r\n\r\n\t\t\tgroup.add( new THREE.Mesh( geometry, materials[ i ] ) );\r\n\r\n\t\t}\r\n\r\n\t\treturn group;\r\n\r\n\t},\r\n\r\n\tdetach: function ( child, parent, scene ) {\r\n\r\n\t\tchild.applyMatrix( parent.matrixWorld );\r\n\t\tparent.remove( child );\r\n\t\tscene.add( child );\r\n\r\n\t},\r\n\r\n\tattach: function ( child, scene, parent ) {\r\n\r\n\t\tvar matrixWorldInverse = new THREE.Matrix4();\r\n\t\tmatrixWorldInverse.getInverse( parent.matrixWorld );\r\n\t\tchild.applyMatrix( matrixWorldInverse );\r\n\r\n\t\tscene.remove( child );\r\n\t\tparent.add( child );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/extras/ShapeUtils.js\r\n\r\n/**\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n */\r\n\r\nTHREE.ShapeUtils = {\r\n\r\n\t// calculate area of the contour polygon\r\n\r\n\tarea: function ( contour ) {\r\n\r\n\t\tvar n = contour.length;\r\n\t\tvar a = 0.0;\r\n\r\n\t\tfor ( var p = n - 1, q = 0; q < n; p = q ++ ) {\r\n\r\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\r\n\r\n\t\t}\r\n\r\n\t\treturn a * 0.5;\r\n\r\n\t},\r\n\r\n\ttriangulate: ( function () {\r\n\r\n\t\t/**\r\n\t\t * This code is a quick port of code written in C++ which was submitted to\r\n\t\t * flipcode.com by John W. Ratcliff // July 22, 2000\r\n\t\t * See original code and more information here:\r\n\t\t * http://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml\r\n\t\t *\r\n\t\t * ported to actionscript by Zevan Rosser\r\n\t\t * www.actionsnippet.com\r\n\t\t *\r\n\t\t * ported to javascript by Joshua Koo\r\n\t\t * http://www.lab4games.net/zz85/blog\r\n\t\t *\r\n\t\t */\r\n\r\n\t\tfunction snip( contour, u, v, w, n, verts ) {\r\n\r\n\t\t\tvar p;\r\n\t\t\tvar ax, ay, bx, by;\r\n\t\t\tvar cx, cy, px, py;\r\n\r\n\t\t\tax = contour[ verts[ u ] ].x;\r\n\t\t\tay = contour[ verts[ u ] ].y;\r\n\r\n\t\t\tbx = contour[ verts[ v ] ].x;\r\n\t\t\tby = contour[ verts[ v ] ].y;\r\n\r\n\t\t\tcx = contour[ verts[ w ] ].x;\r\n\t\t\tcy = contour[ verts[ w ] ].y;\r\n\r\n\t\t\tif ( Number.EPSILON > ( ( ( bx - ax ) * ( cy - ay ) ) - ( ( by - ay ) * ( cx - ax ) ) ) ) return false;\r\n\r\n\t\t\tvar aX, aY, bX, bY, cX, cY;\r\n\t\t\tvar apx, apy, bpx, bpy, cpx, cpy;\r\n\t\t\tvar cCROSSap, bCROSScp, aCROSSbp;\r\n\r\n\t\t\taX = cx - bx; aY = cy - by;\r\n\t\t\tbX = ax - cx; bY = ay - cy;\r\n\t\t\tcX = bx - ax; cY = by - ay;\r\n\r\n\t\t\tfor ( p = 0; p < n; p ++ ) {\r\n\r\n\t\t\t\tpx = contour[ verts[ p ] ].x;\r\n\t\t\t\tpy = contour[ verts[ p ] ].y;\r\n\r\n\t\t\t\tif ( ( ( px === ax ) && ( py === ay ) ) ||\r\n\t\t\t\t\t ( ( px === bx ) && ( py === by ) ) ||\r\n\t\t\t\t\t ( ( px === cx ) && ( py === cy ) ) )\tcontinue;\r\n\r\n\t\t\t\tapx = px - ax; apy = py - ay;\r\n\t\t\t\tbpx = px - bx; bpy = py - by;\r\n\t\t\t\tcpx = px - cx; cpy = py - cy;\r\n\r\n\t\t\t\t// see if p is inside triangle abc\r\n\r\n\t\t\t\taCROSSbp = aX * bpy - aY * bpx;\r\n\t\t\t\tcCROSSap = cX * apy - cY * apx;\r\n\t\t\t\tbCROSScp = bX * cpy - bY * cpx;\r\n\r\n\t\t\t\tif ( ( aCROSSbp >= - Number.EPSILON ) && ( bCROSScp >= - Number.EPSILON ) && ( cCROSSap >= - Number.EPSILON ) ) return false;\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\r\n\t\t}\r\n\r\n\t\t// takes in an contour array and returns\r\n\r\n\t\treturn function ( contour, indices ) {\r\n\r\n\t\t\tvar n = contour.length;\r\n\r\n\t\t\tif ( n < 3 ) return null;\r\n\r\n\t\t\tvar result = [],\r\n\t\t\t\tverts = [],\r\n\t\t\t\tvertIndices = [];\r\n\r\n\t\t\t/* we want a counter-clockwise polygon in verts */\r\n\r\n\t\t\tvar u, v, w;\r\n\r\n\t\t\tif ( THREE.ShapeUtils.area( contour ) > 0.0 ) {\r\n\r\n\t\t\t\tfor ( v = 0; v < n; v ++ ) verts[ v ] = v;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tfor ( v = 0; v < n; v ++ ) verts[ v ] = ( n - 1 ) - v;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar nv = n;\r\n\r\n\t\t\t/* remove nv - 2 vertices, creating 1 triangle every time */\r\n\r\n\t\t\tvar count = 2 * nv; /* error detection */\r\n\r\n\t\t\tfor ( v = nv - 1; nv > 2; ) {\r\n\r\n\t\t\t\t/* if we loop, it is probably a non-simple polygon */\r\n\r\n\t\t\t\tif ( ( count -- ) <= 0 ) {\r\n\r\n\t\t\t\t\t//** Triangulate: ERROR - probable bad polygon!\r\n\r\n\t\t\t\t\t//throw ( \"Warning, unable to triangulate polygon!\" );\r\n\t\t\t\t\t//return null;\r\n\t\t\t\t\t// Sometimes warning is fine, especially polygons are triangulated in reverse.\r\n\t\t\t\t\tconsole.warn( 'THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()' );\r\n\r\n\t\t\t\t\tif ( indices ) return vertIndices;\r\n\t\t\t\t\treturn result;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* three consecutive vertices in current polygon, */\r\n\r\n\t\t\t\tu = v; \t \tif ( nv <= u ) u = 0; /* previous */\r\n\t\t\t\tv = u + 1; if ( nv <= v ) v = 0; /* new v */\r\n\t\t\t\tw = v + 1; if ( nv <= w ) w = 0; /* next */\r\n\r\n\t\t\t\tif ( snip( contour, u, v, w, nv, verts ) ) {\r\n\r\n\t\t\t\t\tvar a, b, c, s, t;\r\n\r\n\t\t\t\t\t/* true names of the vertices */\r\n\r\n\t\t\t\t\ta = verts[ u ];\r\n\t\t\t\t\tb = verts[ v ];\r\n\t\t\t\t\tc = verts[ w ];\r\n\r\n\t\t\t\t\t/* output Triangle */\r\n\r\n\t\t\t\t\tresult.push( [ contour[ a ],\r\n\t\t\t\t\t\tcontour[ b ],\r\n\t\t\t\t\t\tcontour[ c ] ] );\r\n\r\n\r\n\t\t\t\t\tvertIndices.push( [ verts[ u ], verts[ v ], verts[ w ] ] );\r\n\r\n\t\t\t\t\t/* remove v from the remaining polygon */\r\n\r\n\t\t\t\t\tfor ( s = v, t = v + 1; t < nv; s ++, t ++ ) {\r\n\r\n\t\t\t\t\t\tverts[ s ] = verts[ t ];\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tnv --;\r\n\r\n\t\t\t\t\t/* reset error detection counter */\r\n\r\n\t\t\t\t\tcount = 2 * nv;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( indices ) return vertIndices;\r\n\t\t\treturn result;\r\n\r\n\t\t}\r\n\r\n\t} )(),\r\n\r\n\ttriangulateShape: function ( contour, holes ) {\r\n\r\n\t\tfunction point_in_segment_2D_colin( inSegPt1, inSegPt2, inOtherPt ) {\r\n\r\n\t\t\t// inOtherPt needs to be collinear to the inSegment\r\n\t\t\tif ( inSegPt1.x !== inSegPt2.x ) {\r\n\r\n\t\t\t\tif ( inSegPt1.x < inSegPt2.x ) {\r\n\r\n\t\t\t\t\treturn\t( ( inSegPt1.x <= inOtherPt.x ) && ( inOtherPt.x <= inSegPt2.x ) );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\treturn\t( ( inSegPt2.x <= inOtherPt.x ) && ( inOtherPt.x <= inSegPt1.x ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tif ( inSegPt1.y < inSegPt2.y ) {\r\n\r\n\t\t\t\t\treturn\t( ( inSegPt1.y <= inOtherPt.y ) && ( inOtherPt.y <= inSegPt2.y ) );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\treturn\t( ( inSegPt2.y <= inOtherPt.y ) && ( inOtherPt.y <= inSegPt1.y ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfunction intersect_segments_2D( inSeg1Pt1, inSeg1Pt2, inSeg2Pt1, inSeg2Pt2, inExcludeAdjacentSegs ) {\r\n\r\n\t\t\tvar seg1dx = inSeg1Pt2.x - inSeg1Pt1.x, seg1dy = inSeg1Pt2.y - inSeg1Pt1.y;\r\n\t\t\tvar seg2dx = inSeg2Pt2.x - inSeg2Pt1.x, seg2dy = inSeg2Pt2.y - inSeg2Pt1.y;\r\n\r\n\t\t\tvar seg1seg2dx = inSeg1Pt1.x - inSeg2Pt1.x;\r\n\t\t\tvar seg1seg2dy = inSeg1Pt1.y - inSeg2Pt1.y;\r\n\r\n\t\t\tvar limit\t\t= seg1dy * seg2dx - seg1dx * seg2dy;\r\n\t\t\tvar perpSeg1\t= seg1dy * seg1seg2dx - seg1dx * seg1seg2dy;\r\n\r\n\t\t\tif ( Math.abs( limit ) > Number.EPSILON ) {\r\n\r\n\t\t\t\t// not parallel\r\n\r\n\t\t\t\tvar perpSeg2;\r\n\t\t\t\tif ( limit > 0 ) {\r\n\r\n\t\t\t\t\tif ( ( perpSeg1 < 0 ) || ( perpSeg1 > limit ) ) \t\treturn [];\r\n\t\t\t\t\tperpSeg2 = seg2dy * seg1seg2dx - seg2dx * seg1seg2dy;\r\n\t\t\t\t\tif ( ( perpSeg2 < 0 ) || ( perpSeg2 > limit ) ) \t\treturn [];\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tif ( ( perpSeg1 > 0 ) || ( perpSeg1 < limit ) ) \t\treturn [];\r\n\t\t\t\t\tperpSeg2 = seg2dy * seg1seg2dx - seg2dx * seg1seg2dy;\r\n\t\t\t\t\tif ( ( perpSeg2 > 0 ) || ( perpSeg2 < limit ) ) \t\treturn [];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// i.e. to reduce rounding errors\r\n\t\t\t\t// intersection at endpoint of segment#1?\r\n\t\t\t\tif ( perpSeg2 === 0 ) {\r\n\r\n\t\t\t\t\tif ( ( inExcludeAdjacentSegs ) &&\r\n\t\t\t\t\t\t ( ( perpSeg1 === 0 ) || ( perpSeg1 === limit ) ) )\t\treturn [];\r\n\t\t\t\t\treturn [ inSeg1Pt1 ];\r\n\r\n\t\t\t\t}\r\n\t\t\t\tif ( perpSeg2 === limit ) {\r\n\r\n\t\t\t\t\tif ( ( inExcludeAdjacentSegs ) &&\r\n\t\t\t\t\t\t ( ( perpSeg1 === 0 ) || ( perpSeg1 === limit ) ) )\t\treturn [];\r\n\t\t\t\t\treturn [ inSeg1Pt2 ];\r\n\r\n\t\t\t\t}\r\n\t\t\t\t// intersection at endpoint of segment#2?\r\n\t\t\t\tif ( perpSeg1 === 0 )\t\treturn [ inSeg2Pt1 ];\r\n\t\t\t\tif ( perpSeg1 === limit )\treturn [ inSeg2Pt2 ];\r\n\r\n\t\t\t\t// return real intersection point\r\n\t\t\t\tvar factorSeg1 = perpSeg2 / limit;\r\n\t\t\t\treturn\t[ { x: inSeg1Pt1.x + factorSeg1 * seg1dx,\r\n\t\t\t\t\t\t\ty: inSeg1Pt1.y + factorSeg1 * seg1dy } ];\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// parallel or collinear\r\n\t\t\t\tif ( ( perpSeg1 !== 0 ) ||\r\n\t\t\t\t\t ( seg2dy * seg1seg2dx !== seg2dx * seg1seg2dy ) ) \t\t\treturn [];\r\n\r\n\t\t\t\t// they are collinear or degenerate\r\n\t\t\t\tvar seg1Pt = ( ( seg1dx === 0 ) && ( seg1dy === 0 ) );\t// segment1 is just a point?\r\n\t\t\t\tvar seg2Pt = ( ( seg2dx === 0 ) && ( seg2dy === 0 ) );\t// segment2 is just a point?\r\n\t\t\t\t// both segments are points\r\n\t\t\t\tif ( seg1Pt && seg2Pt ) {\r\n\r\n\t\t\t\t\tif ( ( inSeg1Pt1.x !== inSeg2Pt1.x ) ||\r\n\t\t\t\t\t\t ( inSeg1Pt1.y !== inSeg2Pt1.y ) )\t\treturn [];\t// they are distinct points\r\n\t\t\t\t\treturn [ inSeg1Pt1 ]; \t\t\t\t\t\t// they are the same point\r\n\r\n\t\t\t\t}\r\n\t\t\t\t// segment#1 is a single point\r\n\t\t\t\tif ( seg1Pt ) {\r\n\r\n\t\t\t\t\tif ( ! point_in_segment_2D_colin( inSeg2Pt1, inSeg2Pt2, inSeg1Pt1 ) )\t\treturn [];\t\t// but not in segment#2\r\n\t\t\t\t\treturn [ inSeg1Pt1 ];\r\n\r\n\t\t\t\t}\r\n\t\t\t\t// segment#2 is a single point\r\n\t\t\t\tif ( seg2Pt ) {\r\n\r\n\t\t\t\t\tif ( ! point_in_segment_2D_colin( inSeg1Pt1, inSeg1Pt2, inSeg2Pt1 ) )\t\treturn [];\t\t// but not in segment#1\r\n\t\t\t\t\treturn [ inSeg2Pt1 ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// they are collinear segments, which might overlap\r\n\t\t\t\tvar seg1min, seg1max, seg1minVal, seg1maxVal;\r\n\t\t\t\tvar seg2min, seg2max, seg2minVal, seg2maxVal;\r\n\t\t\t\tif ( seg1dx !== 0 ) {\r\n\r\n\t\t\t\t\t// the segments are NOT on a vertical line\r\n\t\t\t\t\tif ( inSeg1Pt1.x < inSeg1Pt2.x ) {\r\n\r\n\t\t\t\t\t\tseg1min = inSeg1Pt1; seg1minVal = inSeg1Pt1.x;\r\n\t\t\t\t\t\tseg1max = inSeg1Pt2; seg1maxVal = inSeg1Pt2.x;\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tseg1min = inSeg1Pt2; seg1minVal = inSeg1Pt2.x;\r\n\t\t\t\t\t\tseg1max = inSeg1Pt1; seg1maxVal = inSeg1Pt1.x;\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( inSeg2Pt1.x < inSeg2Pt2.x ) {\r\n\r\n\t\t\t\t\t\tseg2min = inSeg2Pt1; seg2minVal = inSeg2Pt1.x;\r\n\t\t\t\t\t\tseg2max = inSeg2Pt2; seg2maxVal = inSeg2Pt2.x;\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tseg2min = inSeg2Pt2; seg2minVal = inSeg2Pt2.x;\r\n\t\t\t\t\t\tseg2max = inSeg2Pt1; seg2maxVal = inSeg2Pt1.x;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// the segments are on a vertical line\r\n\t\t\t\t\tif ( inSeg1Pt1.y < inSeg1Pt2.y ) {\r\n\r\n\t\t\t\t\t\tseg1min = inSeg1Pt1; seg1minVal = inSeg1Pt1.y;\r\n\t\t\t\t\t\tseg1max = inSeg1Pt2; seg1maxVal = inSeg1Pt2.y;\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tseg1min = inSeg1Pt2; seg1minVal = inSeg1Pt2.y;\r\n\t\t\t\t\t\tseg1max = inSeg1Pt1; seg1maxVal = inSeg1Pt1.y;\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( inSeg2Pt1.y < inSeg2Pt2.y ) {\r\n\r\n\t\t\t\t\t\tseg2min = inSeg2Pt1; seg2minVal = inSeg2Pt1.y;\r\n\t\t\t\t\t\tseg2max = inSeg2Pt2; seg2maxVal = inSeg2Pt2.y;\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tseg2min = inSeg2Pt2; seg2minVal = inSeg2Pt2.y;\r\n\t\t\t\t\t\tseg2max = inSeg2Pt1; seg2maxVal = inSeg2Pt1.y;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t\tif ( seg1minVal <= seg2minVal ) {\r\n\r\n\t\t\t\t\tif ( seg1maxVal < seg2minVal )\treturn [];\r\n\t\t\t\t\tif ( seg1maxVal === seg2minVal )\t{\r\n\r\n\t\t\t\t\t\tif ( inExcludeAdjacentSegs )\t\treturn [];\r\n\t\t\t\t\t\treturn [ seg2min ];\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( seg1maxVal <= seg2maxVal )\treturn [ seg2min, seg1max ];\r\n\t\t\t\t\treturn\t[ seg2min, seg2max ];\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tif ( seg1minVal > seg2maxVal )\treturn [];\r\n\t\t\t\t\tif ( seg1minVal === seg2maxVal )\t{\r\n\r\n\t\t\t\t\t\tif ( inExcludeAdjacentSegs )\t\treturn [];\r\n\t\t\t\t\t\treturn [ seg1min ];\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( seg1maxVal <= seg2maxVal )\treturn [ seg1min, seg1max ];\r\n\t\t\t\t\treturn\t[ seg1min, seg2max ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfunction isPointInsideAngle( inVertex, inLegFromPt, inLegToPt, inOtherPt ) {\r\n\r\n\t\t\t// The order of legs is important\r\n\r\n\t\t\t// translation of all points, so that Vertex is at (0,0)\r\n\t\t\tvar legFromPtX\t= inLegFromPt.x - inVertex.x, legFromPtY\t= inLegFromPt.y - inVertex.y;\r\n\t\t\tvar legToPtX\t= inLegToPt.x\t- inVertex.x, legToPtY\t\t= inLegToPt.y\t- inVertex.y;\r\n\t\t\tvar otherPtX\t= inOtherPt.x\t- inVertex.x, otherPtY\t\t= inOtherPt.y\t- inVertex.y;\r\n\r\n\t\t\t// main angle >0: < 180 deg.; 0: 180 deg.; <0: > 180 deg.\r\n\t\t\tvar from2toAngle\t= legFromPtX * legToPtY - legFromPtY * legToPtX;\r\n\t\t\tvar from2otherAngle\t= legFromPtX * otherPtY - legFromPtY * otherPtX;\r\n\r\n\t\t\tif ( Math.abs( from2toAngle ) > Number.EPSILON ) {\r\n\r\n\t\t\t\t// angle != 180 deg.\r\n\r\n\t\t\t\tvar other2toAngle\t\t= otherPtX * legToPtY - otherPtY * legToPtX;\r\n\t\t\t\t// console.log( \"from2to: \" + from2toAngle + \", from2other: \" + from2otherAngle + \", other2to: \" + other2toAngle );\r\n\r\n\t\t\t\tif ( from2toAngle > 0 ) {\r\n\r\n\t\t\t\t\t// main angle < 180 deg.\r\n\t\t\t\t\treturn\t( ( from2otherAngle >= 0 ) && ( other2toAngle >= 0 ) );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// main angle > 180 deg.\r\n\t\t\t\t\treturn\t( ( from2otherAngle >= 0 ) || ( other2toAngle >= 0 ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// angle == 180 deg.\r\n\t\t\t\t// console.log( \"from2to: 180 deg., from2other: \" + from2otherAngle );\r\n\t\t\t\treturn\t( from2otherAngle > 0 );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\r\n\t\tfunction removeHoles( contour, holes ) {\r\n\r\n\t\t\tvar shape = contour.concat(); // work on this shape\r\n\t\t\tvar hole;\r\n\r\n\t\t\tfunction isCutLineInsideAngles( inShapeIdx, inHoleIdx ) {\r\n\r\n\t\t\t\t// Check if hole point lies within angle around shape point\r\n\t\t\t\tvar lastShapeIdx = shape.length - 1;\r\n\r\n\t\t\t\tvar prevShapeIdx = inShapeIdx - 1;\r\n\t\t\t\tif ( prevShapeIdx < 0 )\t\t\tprevShapeIdx = lastShapeIdx;\r\n\r\n\t\t\t\tvar nextShapeIdx = inShapeIdx + 1;\r\n\t\t\t\tif ( nextShapeIdx > lastShapeIdx )\tnextShapeIdx = 0;\r\n\r\n\t\t\t\tvar insideAngle = isPointInsideAngle( shape[ inShapeIdx ], shape[ prevShapeIdx ], shape[ nextShapeIdx ], hole[ inHoleIdx ] );\r\n\t\t\t\tif ( ! insideAngle ) {\r\n\r\n\t\t\t\t\t// console.log( \"Vertex (Shape): \" + inShapeIdx + \", Point: \" + hole[inHoleIdx].x + \"/\" + hole[inHoleIdx].y );\r\n\t\t\t\t\treturn\tfalse;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Check if shape point lies within angle around hole point\r\n\t\t\t\tvar lastHoleIdx = hole.length - 1;\r\n\r\n\t\t\t\tvar prevHoleIdx = inHoleIdx - 1;\r\n\t\t\t\tif ( prevHoleIdx < 0 )\t\t\tprevHoleIdx = lastHoleIdx;\r\n\r\n\t\t\t\tvar nextHoleIdx = inHoleIdx + 1;\r\n\t\t\t\tif ( nextHoleIdx > lastHoleIdx )\tnextHoleIdx = 0;\r\n\r\n\t\t\t\tinsideAngle = isPointInsideAngle( hole[ inHoleIdx ], hole[ prevHoleIdx ], hole[ nextHoleIdx ], shape[ inShapeIdx ] );\r\n\t\t\t\tif ( ! insideAngle ) {\r\n\r\n\t\t\t\t\t// console.log( \"Vertex (Hole): \" + inHoleIdx + \", Point: \" + shape[inShapeIdx].x + \"/\" + shape[inShapeIdx].y );\r\n\t\t\t\t\treturn\tfalse;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn\ttrue;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfunction intersectsShapeEdge( inShapePt, inHolePt ) {\r\n\r\n\t\t\t\t// checks for intersections with shape edges\r\n\t\t\t\tvar sIdx, nextIdx, intersection;\r\n\t\t\t\tfor ( sIdx = 0; sIdx < shape.length; sIdx ++ ) {\r\n\r\n\t\t\t\t\tnextIdx = sIdx + 1; nextIdx %= shape.length;\r\n\t\t\t\t\tintersection = intersect_segments_2D( inShapePt, inHolePt, shape[ sIdx ], shape[ nextIdx ], true );\r\n\t\t\t\t\tif ( intersection.length > 0 )\t\treturn\ttrue;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn\tfalse;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar indepHoles = [];\r\n\r\n\t\t\tfunction intersectsHoleEdge( inShapePt, inHolePt ) {\r\n\r\n\t\t\t\t// checks for intersections with hole edges\r\n\t\t\t\tvar ihIdx, chkHole,\r\n\t\t\t\t\thIdx, nextIdx, intersection;\r\n\t\t\t\tfor ( ihIdx = 0; ihIdx < indepHoles.length; ihIdx ++ ) {\r\n\r\n\t\t\t\t\tchkHole = holes[ indepHoles[ ihIdx ]];\r\n\t\t\t\t\tfor ( hIdx = 0; hIdx < chkHole.length; hIdx ++ ) {\r\n\r\n\t\t\t\t\t\tnextIdx = hIdx + 1; nextIdx %= chkHole.length;\r\n\t\t\t\t\t\tintersection = intersect_segments_2D( inShapePt, inHolePt, chkHole[ hIdx ], chkHole[ nextIdx ], true );\r\n\t\t\t\t\t\tif ( intersection.length > 0 )\t\treturn\ttrue;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t\treturn\tfalse;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar holeIndex, shapeIndex,\r\n\t\t\t\tshapePt, holePt,\r\n\t\t\t\tholeIdx, cutKey, failedCuts = [],\r\n\t\t\t\ttmpShape1, tmpShape2,\r\n\t\t\t\ttmpHole1, tmpHole2;\r\n\r\n\t\t\tfor ( var h = 0, hl = holes.length; h < hl; h ++ ) {\r\n\r\n\t\t\t\tindepHoles.push( h );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar minShapeIndex = 0;\r\n\t\t\tvar counter = indepHoles.length * 2;\r\n\t\t\twhile ( indepHoles.length > 0 ) {\r\n\r\n\t\t\t\tcounter --;\r\n\t\t\t\tif ( counter < 0 ) {\r\n\r\n\t\t\t\t\tconsole.log( \"Infinite Loop! Holes left:\" + indepHoles.length + \", Probably Hole outside Shape!\" );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// search for shape-vertex and hole-vertex,\r\n\t\t\t\t// which can be connected without intersections\r\n\t\t\t\tfor ( shapeIndex = minShapeIndex; shapeIndex < shape.length; shapeIndex ++ ) {\r\n\r\n\t\t\t\t\tshapePt = shape[ shapeIndex ];\r\n\t\t\t\t\tholeIndex\t= - 1;\r\n\r\n\t\t\t\t\t// search for hole which can be reached without intersections\r\n\t\t\t\t\tfor ( var h = 0; h < indepHoles.length; h ++ ) {\r\n\r\n\t\t\t\t\t\tholeIdx = indepHoles[ h ];\r\n\r\n\t\t\t\t\t\t// prevent multiple checks\r\n\t\t\t\t\t\tcutKey = shapePt.x + \":\" + shapePt.y + \":\" + holeIdx;\r\n\t\t\t\t\t\tif ( failedCuts[ cutKey ] !== undefined )\t\t\tcontinue;\r\n\r\n\t\t\t\t\t\thole = holes[ holeIdx ];\r\n\t\t\t\t\t\tfor ( var h2 = 0; h2 < hole.length; h2 ++ ) {\r\n\r\n\t\t\t\t\t\t\tholePt = hole[ h2 ];\r\n\t\t\t\t\t\t\tif ( ! isCutLineInsideAngles( shapeIndex, h2 ) )\t\tcontinue;\r\n\t\t\t\t\t\t\tif ( intersectsShapeEdge( shapePt, holePt ) )\t\tcontinue;\r\n\t\t\t\t\t\t\tif ( intersectsHoleEdge( shapePt, holePt ) )\t\tcontinue;\r\n\r\n\t\t\t\t\t\t\tholeIndex = h2;\r\n\t\t\t\t\t\t\tindepHoles.splice( h, 1 );\r\n\r\n\t\t\t\t\t\t\ttmpShape1 = shape.slice( 0, shapeIndex + 1 );\r\n\t\t\t\t\t\t\ttmpShape2 = shape.slice( shapeIndex );\r\n\t\t\t\t\t\t\ttmpHole1 = hole.slice( holeIndex );\r\n\t\t\t\t\t\t\ttmpHole2 = hole.slice( 0, holeIndex + 1 );\r\n\r\n\t\t\t\t\t\t\tshape = tmpShape1.concat( tmpHole1 ).concat( tmpHole2 ).concat( tmpShape2 );\r\n\r\n\t\t\t\t\t\t\tminShapeIndex = shapeIndex;\r\n\r\n\t\t\t\t\t\t\t// Debug only, to show the selected cuts\r\n\t\t\t\t\t\t\t// glob_CutLines.push( [ shapePt, holePt ] );\r\n\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ( holeIndex >= 0 )\tbreak;\t\t// hole-vertex found\r\n\r\n\t\t\t\t\t\tfailedCuts[ cutKey ] = true;\t\t\t// remember failure\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( holeIndex >= 0 )\tbreak;\t\t// hole-vertex found\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn shape; \t\t\t/* shape with no holes */\r\n\r\n\t\t}\r\n\r\n\r\n\t\tvar i, il, f, face,\r\n\t\t\tkey, index,\r\n\t\t\tallPointsMap = {};\r\n\r\n\t\t// To maintain reference to old shape, one must match coordinates, or offset the indices from original arrays. It's probably easier to do the first.\r\n\r\n\t\tvar allpoints = contour.concat();\r\n\r\n\t\tfor ( var h = 0, hl = holes.length; h < hl; h ++ ) {\r\n\r\n\t\t\tArray.prototype.push.apply( allpoints, holes[ h ] );\r\n\r\n\t\t}\r\n\r\n\t\t//console.log( \"allpoints\",allpoints, allpoints.length );\r\n\r\n\t\t// prepare all points map\r\n\r\n\t\tfor ( i = 0, il = allpoints.length; i < il; i ++ ) {\r\n\r\n\t\t\tkey = allpoints[ i ].x + \":\" + allpoints[ i ].y;\r\n\r\n\t\t\tif ( allPointsMap[ key ] !== undefined ) {\r\n\r\n\t\t\t\tconsole.warn( \"THREE.Shape: Duplicate point\", key );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tallPointsMap[ key ] = i;\r\n\r\n\t\t}\r\n\r\n\t\t// remove holes by cutting paths to holes and adding them to the shape\r\n\t\tvar shapeWithoutHoles = removeHoles( contour, holes );\r\n\r\n\t\tvar triangles = THREE.ShapeUtils.triangulate( shapeWithoutHoles, false ); // True returns indices for points of spooled shape\r\n\t\t//console.log( \"triangles\",triangles, triangles.length );\r\n\r\n\t\t// check all face vertices against all points map\r\n\r\n\t\tfor ( i = 0, il = triangles.length; i < il; i ++ ) {\r\n\r\n\t\t\tface = triangles[ i ];\r\n\r\n\t\t\tfor ( f = 0; f < 3; f ++ ) {\r\n\r\n\t\t\t\tkey = face[ f ].x + \":\" + face[ f ].y;\r\n\r\n\t\t\t\tindex = allPointsMap[ key ];\r\n\r\n\t\t\t\tif ( index !== undefined ) {\r\n\r\n\t\t\t\t\tface[ f ] = index;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn triangles.concat();\r\n\r\n\t},\r\n\r\n\tisClockWise: function ( pts ) {\r\n\r\n\t\treturn THREE.ShapeUtils.area( pts ) < 0;\r\n\r\n\t},\r\n\r\n\t// Bezier Curves formulas obtained from\r\n\t// http://en.wikipedia.org/wiki/B%C3%A9zier_curve\r\n\r\n\t// Quad Bezier Functions\r\n\r\n\tb2: ( function () {\r\n\r\n\t\tfunction b2p0( t, p ) {\r\n\r\n\t\t\tvar k = 1 - t;\r\n\t\t\treturn k * k * p;\r\n\r\n\t\t}\r\n\r\n\t\tfunction b2p1( t, p ) {\r\n\r\n\t\t\treturn 2 * ( 1 - t ) * t * p;\r\n\r\n\t\t}\r\n\r\n\t\tfunction b2p2( t, p ) {\r\n\r\n\t\t\treturn t * t * p;\r\n\r\n\t\t}\r\n\r\n\t\treturn function ( t, p0, p1, p2 ) {\r\n\r\n\t\t\treturn b2p0( t, p0 ) + b2p1( t, p1 ) + b2p2( t, p2 );\r\n\r\n\t\t};\r\n\r\n\t} )(),\r\n\r\n\t// Cubic Bezier Functions\r\n\r\n\tb3: ( function () {\r\n\r\n\t\tfunction b3p0( t, p ) {\r\n\r\n\t\t\tvar k = 1 - t;\r\n\t\t\treturn k * k * k * p;\r\n\r\n\t\t}\r\n\r\n\t\tfunction b3p1( t, p ) {\r\n\r\n\t\t\tvar k = 1 - t;\r\n\t\t\treturn 3 * k * k * t * p;\r\n\r\n\t\t}\r\n\r\n\t\tfunction b3p2( t, p ) {\r\n\r\n\t\t\tvar k = 1 - t;\r\n\t\t\treturn 3 * k * t * t * p;\r\n\r\n\t\t}\r\n\r\n\t\tfunction b3p3( t, p ) {\r\n\r\n\t\t\treturn t * t * t * p;\r\n\r\n\t\t}\r\n\r\n\t\treturn function ( t, p0, p1, p2, p3 ) {\r\n\r\n\t\t\treturn b3p0( t, p0 ) + b3p1( t, p1 ) + b3p2( t, p2 ) + b3p3( t, p3 );\r\n\r\n\t\t};\r\n\r\n\t} )()\r\n\r\n};\r\n\r\n// File:src/extras/core/Curve.js\r\n\r\n/**\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n * Extensible curve object\r\n *\r\n * Some common of Curve methods\r\n * .getPoint(t), getTangent(t)\r\n * .getPointAt(u), getTagentAt(u)\r\n * .getPoints(), .getSpacedPoints()\r\n * .getLength()\r\n * .updateArcLengths()\r\n *\r\n * This following classes subclasses THREE.Curve:\r\n *\r\n * -- 2d classes --\r\n * THREE.LineCurve\r\n * THREE.QuadraticBezierCurve\r\n * THREE.CubicBezierCurve\r\n * THREE.SplineCurve\r\n * THREE.ArcCurve\r\n * THREE.EllipseCurve\r\n *\r\n * -- 3d classes --\r\n * THREE.LineCurve3\r\n * THREE.QuadraticBezierCurve3\r\n * THREE.CubicBezierCurve3\r\n * THREE.SplineCurve3\r\n *\r\n * A series of curves can be represented as a THREE.CurvePath\r\n *\r\n **/\r\n\r\n/**************************************************************\r\n *\tAbstract Curve base class\r\n **************************************************************/\r\n\r\nTHREE.Curve = function () {\r\n\r\n};\r\n\r\nTHREE.Curve.prototype = {\r\n\r\n\tconstructor: THREE.Curve,\r\n\r\n\t// Virtual base class method to overwrite and implement in subclasses\r\n\t//\t- t [0 .. 1]\r\n\r\n\tgetPoint: function ( t ) {\r\n\r\n\t\tconsole.warn( \"THREE.Curve: Warning, getPoint() not implemented!\" );\r\n\t\treturn null;\r\n\r\n\t},\r\n\r\n\t// Get point at relative position in curve according to arc length\r\n\t// - u [0 .. 1]\r\n\r\n\tgetPointAt: function ( u ) {\r\n\r\n\t\tvar t = this.getUtoTmapping( u );\r\n\t\treturn this.getPoint( t );\r\n\r\n\t},\r\n\r\n\t// Get sequence of points using getPoint( t )\r\n\r\n\tgetPoints: function ( divisions ) {\r\n\r\n\t\tif ( ! divisions ) divisions = 5;\r\n\r\n\t\tvar d, pts = [];\r\n\r\n\t\tfor ( d = 0; d <= divisions; d ++ ) {\r\n\r\n\t\t\tpts.push( this.getPoint( d / divisions ) );\r\n\r\n\t\t}\r\n\r\n\t\treturn pts;\r\n\r\n\t},\r\n\r\n\t// Get sequence of points using getPointAt( u )\r\n\r\n\tgetSpacedPoints: function ( divisions ) {\r\n\r\n\t\tif ( ! divisions ) divisions = 5;\r\n\r\n\t\tvar d, pts = [];\r\n\r\n\t\tfor ( d = 0; d <= divisions; d ++ ) {\r\n\r\n\t\t\tpts.push( this.getPointAt( d / divisions ) );\r\n\r\n\t\t}\r\n\r\n\t\treturn pts;\r\n\r\n\t},\r\n\r\n\t// Get total curve arc length\r\n\r\n\tgetLength: function () {\r\n\r\n\t\tvar lengths = this.getLengths();\r\n\t\treturn lengths[ lengths.length - 1 ];\r\n\r\n\t},\r\n\r\n\t// Get list of cumulative segment lengths\r\n\r\n\tgetLengths: function ( divisions ) {\r\n\r\n\t\tif ( ! divisions ) divisions = ( this.__arcLengthDivisions ) ? ( this.__arcLengthDivisions ) : 200;\r\n\r\n\t\tif ( this.cacheArcLengths\r\n\t\t\t&& ( this.cacheArcLengths.length === divisions + 1 )\r\n\t\t\t&& ! this.needsUpdate ) {\r\n\r\n\t\t\t//console.log( \"cached\", this.cacheArcLengths );\r\n\t\t\treturn this.cacheArcLengths;\r\n\r\n\t\t}\r\n\r\n\t\tthis.needsUpdate = false;\r\n\r\n\t\tvar cache = [];\r\n\t\tvar current, last = this.getPoint( 0 );\r\n\t\tvar p, sum = 0;\r\n\r\n\t\tcache.push( 0 );\r\n\r\n\t\tfor ( p = 1; p <= divisions; p ++ ) {\r\n\r\n\t\t\tcurrent = this.getPoint ( p / divisions );\r\n\t\t\tsum += current.distanceTo( last );\r\n\t\t\tcache.push( sum );\r\n\t\t\tlast = current;\r\n\r\n\t\t}\r\n\r\n\t\tthis.cacheArcLengths = cache;\r\n\r\n\t\treturn cache; // { sums: cache, sum:sum }; Sum is in the last element.\r\n\r\n\t},\r\n\r\n\tupdateArcLengths: function() {\r\n\r\n\t\tthis.needsUpdate = true;\r\n\t\tthis.getLengths();\r\n\r\n\t},\r\n\r\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\r\n\r\n\tgetUtoTmapping: function ( u, distance ) {\r\n\r\n\t\tvar arcLengths = this.getLengths();\r\n\r\n\t\tvar i = 0, il = arcLengths.length;\r\n\r\n\t\tvar targetArcLength; // The targeted u distance value to get\r\n\r\n\t\tif ( distance ) {\r\n\r\n\t\t\ttargetArcLength = distance;\r\n\r\n\t\t} else {\r\n\r\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\r\n\r\n\t\t}\r\n\r\n\t\t//var time = Date.now();\r\n\r\n\t\t// binary search for the index with largest value smaller than target u distance\r\n\r\n\t\tvar low = 0, high = il - 1, comparison;\r\n\r\n\t\twhile ( low <= high ) {\r\n\r\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\r\n\r\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\r\n\r\n\t\t\tif ( comparison < 0 ) {\r\n\r\n\t\t\t\tlow = i + 1;\r\n\r\n\t\t\t} else if ( comparison > 0 ) {\r\n\r\n\t\t\t\thigh = i - 1;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\thigh = i;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\t// DONE\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\ti = high;\r\n\r\n\t\t//console.log('b' , i, low, high, Date.now()- time);\r\n\r\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\r\n\r\n\t\t\tvar t = i / ( il - 1 );\r\n\t\t\treturn t;\r\n\r\n\t\t}\r\n\r\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\r\n\r\n\t\tvar lengthBefore = arcLengths[ i ];\r\n\t\tvar lengthAfter = arcLengths[ i + 1 ];\r\n\r\n\t\tvar segmentLength = lengthAfter - lengthBefore;\r\n\r\n\t\t// determine where we are between the 'before' and 'after' points\r\n\r\n\t\tvar segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\r\n\r\n\t\t// add that fractional amount to t\r\n\r\n\t\tvar t = ( i + segmentFraction ) / ( il - 1 );\r\n\r\n\t\treturn t;\r\n\r\n\t},\r\n\r\n\t// Returns a unit vector tangent at t\r\n\t// In case any sub curve does not implement its tangent derivation,\r\n\t// 2 points a small delta apart will be used to find its gradient\r\n\t// which seems to give a reasonable approximation\r\n\r\n\tgetTangent: function( t ) {\r\n\r\n\t\tvar delta = 0.0001;\r\n\t\tvar t1 = t - delta;\r\n\t\tvar t2 = t + delta;\r\n\r\n\t\t// Capping in case of danger\r\n\r\n\t\tif ( t1 < 0 ) t1 = 0;\r\n\t\tif ( t2 > 1 ) t2 = 1;\r\n\r\n\t\tvar pt1 = this.getPoint( t1 );\r\n\t\tvar pt2 = this.getPoint( t2 );\r\n\r\n\t\tvar vec = pt2.clone().sub( pt1 );\r\n\t\treturn vec.normalize();\r\n\r\n\t},\r\n\r\n\tgetTangentAt: function ( u ) {\r\n\r\n\t\tvar t = this.getUtoTmapping( u );\r\n\t\treturn this.getTangent( t );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// TODO: Transformation for Curves?\r\n\r\n/**************************************************************\r\n *\t3D Curves\r\n **************************************************************/\r\n\r\n// A Factory method for creating new curve subclasses\r\n\r\nTHREE.Curve.create = function ( constructor, getPointFunc ) {\r\n\r\n\tconstructor.prototype = Object.create( THREE.Curve.prototype );\r\n\tconstructor.prototype.constructor = constructor;\r\n\tconstructor.prototype.getPoint = getPointFunc;\r\n\r\n\treturn constructor;\r\n\r\n};\r\n\r\n// File:src/extras/core/CurvePath.js\r\n\r\n/**\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n *\r\n **/\r\n\r\n/**************************************************************\r\n *\tCurved Path - a curve path is simply a array of connected\r\n * curves, but retains the api of a curve\r\n **************************************************************/\r\n\r\nTHREE.CurvePath = function () {\r\n\r\n\tthis.curves = [];\r\n\r\n\tthis.autoClose = false; // Automatically closes the path\r\n\r\n};\r\n\r\nTHREE.CurvePath.prototype = Object.assign( Object.create( THREE.Curve.prototype ), {\r\n\r\n\tconstructor: THREE.CurvePath,\r\n\r\n\tadd: function ( curve ) {\r\n\r\n\t\tthis.curves.push( curve );\r\n\r\n\t},\r\n\r\n\tclosePath: function () {\r\n\r\n\t\t// TODO Test\r\n\t\t// and verify for vector3 (needs to implement equals)\r\n\t\t// Add a line curve if start and end of lines are not connected\r\n\t\tvar startPoint = this.curves[ 0 ].getPoint( 0 );\r\n\t\tvar endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\r\n\r\n\t\tif ( ! startPoint.equals( endPoint ) ) {\r\n\r\n\t\t\tthis.curves.push( new THREE.LineCurve( endPoint, startPoint ) );\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t// To get accurate point with reference to\r\n\t// entire path distance at time t,\r\n\t// following has to be done:\r\n\r\n\t// 1. Length of each sub path have to be known\r\n\t// 2. Locate and identify type of curve\r\n\t// 3. Get t for the curve\r\n\t// 4. Return curve.getPointAt(t')\r\n\r\n\tgetPoint: function ( t ) {\r\n\r\n\t\tvar d = t * this.getLength();\r\n\t\tvar curveLengths = this.getCurveLengths();\r\n\t\tvar i = 0;\r\n\r\n\t\t// To think about boundaries points.\r\n\r\n\t\twhile ( i < curveLengths.length ) {\r\n\r\n\t\t\tif ( curveLengths[ i ] >= d ) {\r\n\r\n\t\t\t\tvar diff = curveLengths[ i ] - d;\r\n\t\t\t\tvar curve = this.curves[ i ];\r\n\r\n\t\t\t\tvar u = 1 - diff / curve.getLength();\r\n\r\n\t\t\t\treturn curve.getPointAt( u );\r\n\r\n\t\t\t}\r\n\r\n\t\t\ti ++;\r\n\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\r\n\t\t// loop where sum != 0, sum > d , sum+1 0 ) {\r\n\r\n\t\t\t\t\tlaste = points[ points.length - 1 ];\r\n\r\n\t\t\t\t\tcpx0 = laste.x;\r\n\t\t\t\t\tcpy0 = laste.y;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tlaste = this.actions[ i - 1 ].args;\r\n\r\n\t\t\t\t\tcpx0 = laste[ laste.length - 2 ];\r\n\t\t\t\t\tcpy0 = laste[ laste.length - 1 ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor ( var j = 1; j <= divisions; j ++ ) {\r\n\r\n\t\t\t\t\tvar t = j / divisions;\r\n\r\n\t\t\t\t\ttx = b2( t, cpx0, cpx1, cpx );\r\n\t\t\t\t\tty = b2( t, cpy0, cpy1, cpy );\r\n\r\n\t\t\t\t\tpoints.push( new THREE.Vector2( tx, ty ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'bezierCurveTo':\r\n\r\n\t\t\t\tcpx = args[ 4 ];\r\n\t\t\t\tcpy = args[ 5 ];\r\n\r\n\t\t\t\tcpx1 = args[ 0 ];\r\n\t\t\t\tcpy1 = args[ 1 ];\r\n\r\n\t\t\t\tcpx2 = args[ 2 ];\r\n\t\t\t\tcpy2 = args[ 3 ];\r\n\r\n\t\t\t\tif ( points.length > 0 ) {\r\n\r\n\t\t\t\t\tlaste = points[ points.length - 1 ];\r\n\r\n\t\t\t\t\tcpx0 = laste.x;\r\n\t\t\t\t\tcpy0 = laste.y;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tlaste = this.actions[ i - 1 ].args;\r\n\r\n\t\t\t\t\tcpx0 = laste[ laste.length - 2 ];\r\n\t\t\t\t\tcpy0 = laste[ laste.length - 1 ];\r\n\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tfor ( var j = 1; j <= divisions; j ++ ) {\r\n\r\n\t\t\t\t\tvar t = j / divisions;\r\n\r\n\t\t\t\t\ttx = b3( t, cpx0, cpx1, cpx2, cpx );\r\n\t\t\t\t\tty = b3( t, cpy0, cpy1, cpy2, cpy );\r\n\r\n\t\t\t\t\tpoints.push( new THREE.Vector2( tx, ty ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'splineThru':\r\n\r\n\t\t\t\tlaste = this.actions[ i - 1 ].args;\r\n\r\n\t\t\t\tvar last = new THREE.Vector2( laste[ laste.length - 2 ], laste[ laste.length - 1 ] );\r\n\t\t\t\tvar spts = [ last ];\r\n\r\n\t\t\t\tvar n = divisions * args[ 0 ].length;\r\n\r\n\t\t\t\tspts = spts.concat( args[ 0 ] );\r\n\r\n\t\t\t\tvar spline = new THREE.SplineCurve( spts );\r\n\r\n\t\t\t\tfor ( var j = 1; j <= n; j ++ ) {\r\n\r\n\t\t\t\t\tpoints.push( spline.getPointAt( j / n ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'arc':\r\n\r\n\t\t\t\tvar aX = args[ 0 ], aY = args[ 1 ],\r\n\t\t\t\t\taRadius = args[ 2 ],\r\n\t\t\t\t\taStartAngle = args[ 3 ], aEndAngle = args[ 4 ],\r\n\t\t\t\t\taClockwise = !! args[ 5 ];\r\n\r\n\t\t\t\tvar deltaAngle = aEndAngle - aStartAngle;\r\n\t\t\t\tvar angle;\r\n\t\t\t\tvar tdivisions = divisions * 2;\r\n\r\n\t\t\t\tfor ( var j = 1; j <= tdivisions; j ++ ) {\r\n\r\n\t\t\t\t\tvar t = j / tdivisions;\r\n\r\n\t\t\t\t\tif ( ! aClockwise ) {\r\n\r\n\t\t\t\t\t\tt = 1 - t;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tangle = aStartAngle + t * deltaAngle;\r\n\r\n\t\t\t\t\ttx = aX + aRadius * Math.cos( angle );\r\n\t\t\t\t\tty = aY + aRadius * Math.sin( angle );\r\n\r\n\t\t\t\t\t//console.log('t', t, 'angle', angle, 'tx', tx, 'ty', ty);\r\n\r\n\t\t\t\t\tpoints.push( new THREE.Vector2( tx, ty ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//console.log(points);\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'ellipse':\r\n\r\n\t\t\t\tvar aX = args[ 0 ], aY = args[ 1 ],\r\n\t\t\t\t\txRadius = args[ 2 ],\r\n\t\t\t\t\tyRadius = args[ 3 ],\r\n\t\t\t\t\taStartAngle = args[ 4 ], aEndAngle = args[ 5 ],\r\n\t\t\t\t\taClockwise = !! args[ 6 ],\r\n\t\t\t\t\taRotation = args[ 7 ];\r\n\r\n\r\n\t\t\t\tvar deltaAngle = aEndAngle - aStartAngle;\r\n\t\t\t\tvar angle;\r\n\t\t\t\tvar tdivisions = divisions * 2;\r\n\r\n\t\t\t\tvar cos, sin;\r\n\t\t\t\tif ( aRotation !== 0 ) {\r\n\r\n\t\t\t\t\tcos = Math.cos( aRotation );\r\n\t\t\t\t\tsin = Math.sin( aRotation );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor ( var j = 1; j <= tdivisions; j ++ ) {\r\n\r\n\t\t\t\t\tvar t = j / tdivisions;\r\n\r\n\t\t\t\t\tif ( ! aClockwise ) {\r\n\r\n\t\t\t\t\t\tt = 1 - t;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tangle = aStartAngle + t * deltaAngle;\r\n\r\n\t\t\t\t\ttx = aX + xRadius * Math.cos( angle );\r\n\t\t\t\t\tty = aY + yRadius * Math.sin( angle );\r\n\r\n\t\t\t\t\tif ( aRotation !== 0 ) {\r\n\r\n\t\t\t\t\t\tvar x = tx, y = ty;\r\n\r\n\t\t\t\t\t\t// Rotate the point about the center of the ellipse.\r\n\t\t\t\t\t\ttx = ( x - aX ) * cos - ( y - aY ) * sin + aX;\r\n\t\t\t\t\t\tty = ( x - aX ) * sin + ( y - aY ) * cos + aY;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//console.log('t', t, 'angle', angle, 'tx', tx, 'ty', ty);\r\n\r\n\t\t\t\t\tpoints.push( new THREE.Vector2( tx, ty ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//console.log(points);\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t} // end switch\r\n\r\n\t\t}\r\n\r\n\r\n\r\n\t\t// Normalize to remove the closing point by default.\r\n\t\tvar lastPoint = points[ points.length - 1 ];\r\n\t\tif ( Math.abs( lastPoint.x - points[ 0 ].x ) < Number.EPSILON &&\r\n\t\t\t\t Math.abs( lastPoint.y - points[ 0 ].y ) < Number.EPSILON )\r\n\t\t\tpoints.splice( points.length - 1, 1 );\r\n\r\n\t\tif ( this.autoClose ) {\r\n\r\n\t\t\tpoints.push( points[ 0 ] );\r\n\r\n\t\t}\r\n\r\n\t\treturn points;\r\n\r\n\t},\r\n\r\n\ttoShapes: function ( isCCW, noHoles ) {\r\n\r\n\t\tfunction extractSubpaths( inActions ) {\r\n\r\n\t\t\tvar subPaths = [], lastPath = new THREE.Path();\r\n\r\n\t\t\tfor ( var i = 0, l = inActions.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tvar item = inActions[ i ];\r\n\r\n\t\t\t\tvar args = item.args;\r\n\t\t\t\tvar action = item.action;\r\n\r\n\t\t\t\tif ( action === 'moveTo' ) {\r\n\r\n\t\t\t\t\tif ( lastPath.actions.length !== 0 ) {\r\n\r\n\t\t\t\t\t\tsubPaths.push( lastPath );\r\n\t\t\t\t\t\tlastPath = new THREE.Path();\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlastPath[ action ].apply( lastPath, args );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( lastPath.actions.length !== 0 ) {\r\n\r\n\t\t\t\tsubPaths.push( lastPath );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// console.log(subPaths);\r\n\r\n\t\t\treturn\tsubPaths;\r\n\r\n\t\t}\r\n\r\n\t\tfunction toShapesNoHoles( inSubpaths ) {\r\n\r\n\t\t\tvar shapes = [];\r\n\r\n\t\t\tfor ( var i = 0, l = inSubpaths.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tvar tmpPath = inSubpaths[ i ];\r\n\r\n\t\t\t\tvar tmpShape = new THREE.Shape();\r\n\t\t\t\ttmpShape.actions = tmpPath.actions;\r\n\t\t\t\ttmpShape.curves = tmpPath.curves;\r\n\r\n\t\t\t\tshapes.push( tmpShape );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//console.log(\"shape\", shapes);\r\n\r\n\t\t\treturn shapes;\r\n\r\n\t\t}\r\n\r\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\r\n\r\n\t\t\tvar polyLen = inPolygon.length;\r\n\r\n\t\t\t// inPt on polygon contour => immediate success or\r\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\r\n\t\t\t// with the horizontal line through inPt, left of inPt\r\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\r\n\t\t\tvar inside = false;\r\n\t\t\tfor ( var p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\r\n\r\n\t\t\t\tvar edgeLowPt = inPolygon[ p ];\r\n\t\t\t\tvar edgeHighPt = inPolygon[ q ];\r\n\r\n\t\t\t\tvar edgeDx = edgeHighPt.x - edgeLowPt.x;\r\n\t\t\t\tvar edgeDy = edgeHighPt.y - edgeLowPt.y;\r\n\r\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\r\n\r\n\t\t\t\t\t// not parallel\r\n\t\t\t\t\tif ( edgeDy < 0 ) {\r\n\r\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\r\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\r\n\r\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\r\n\r\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\r\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tvar perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\r\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\r\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\r\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// parallel or collinear\r\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\r\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\r\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\r\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\r\n\t\t\t\t\t// continue;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn\tinside;\r\n\r\n\t\t}\r\n\r\n\t\tvar isClockWise = THREE.ShapeUtils.isClockWise;\r\n\r\n\t\tvar subPaths = extractSubpaths( this.actions );\r\n\t\tif ( subPaths.length === 0 ) return [];\r\n\r\n\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\r\n\r\n\r\n\t\tvar solid, tmpPath, tmpShape, shapes = [];\r\n\r\n\t\tif ( subPaths.length === 1 ) {\r\n\r\n\t\t\ttmpPath = subPaths[ 0 ];\r\n\t\t\ttmpShape = new THREE.Shape();\r\n\t\t\ttmpShape.actions = tmpPath.actions;\r\n\t\t\ttmpShape.curves = tmpPath.curves;\r\n\t\t\tshapes.push( tmpShape );\r\n\t\t\treturn shapes;\r\n\r\n\t\t}\r\n\r\n\t\tvar holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\r\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\r\n\r\n\t\t// console.log(\"Holes first\", holesFirst);\r\n\r\n\t\tvar betterShapeHoles = [];\r\n\t\tvar newShapes = [];\r\n\t\tvar newShapeHoles = [];\r\n\t\tvar mainIdx = 0;\r\n\t\tvar tmpPoints;\r\n\r\n\t\tnewShapes[ mainIdx ] = undefined;\r\n\t\tnewShapeHoles[ mainIdx ] = [];\r\n\r\n\t\tfor ( var i = 0, l = subPaths.length; i < l; i ++ ) {\r\n\r\n\t\t\ttmpPath = subPaths[ i ];\r\n\t\t\ttmpPoints = tmpPath.getPoints();\r\n\t\t\tsolid = isClockWise( tmpPoints );\r\n\t\t\tsolid = isCCW ? ! solid : solid;\r\n\r\n\t\t\tif ( solid ) {\r\n\r\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\r\n\r\n\t\t\t\tnewShapes[ mainIdx ] = { s: new THREE.Shape(), p: tmpPoints };\r\n\t\t\t\tnewShapes[ mainIdx ].s.actions = tmpPath.actions;\r\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\r\n\r\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\r\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\r\n\r\n\t\t\t\t//console.log('cw', i);\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\r\n\r\n\t\t\t\t//console.log('ccw', i);\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// only Holes? -> probably all Shapes with wrong orientation\r\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\r\n\r\n\r\n\t\tif ( newShapes.length > 1 ) {\r\n\r\n\t\t\tvar ambiguous = false;\r\n\t\t\tvar toChange = [];\r\n\r\n\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\r\n\r\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\r\n\r\n\t\t\t\tvar sho = newShapeHoles[ sIdx ];\r\n\r\n\t\t\t\tfor ( var hIdx = 0; hIdx < sho.length; hIdx ++ ) {\r\n\r\n\t\t\t\t\tvar ho = sho[ hIdx ];\r\n\t\t\t\t\tvar hole_unassigned = true;\r\n\r\n\t\t\t\t\tfor ( var s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\r\n\r\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\r\n\r\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\r\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\r\n\r\n\t\t\t\t\t\t\t\thole_unassigned = false;\r\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\r\n\r\n\t\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\t\tambiguous = true;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( hole_unassigned ) {\r\n\r\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\t// console.log(\"ambiguous: \", ambiguous);\r\n\t\t\tif ( toChange.length > 0 ) {\r\n\r\n\t\t\t\t// console.log(\"to change: \", toChange);\r\n\t\t\t\tif ( ! ambiguous )\tnewShapeHoles = betterShapeHoles;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar tmpHoles;\r\n\r\n\t\tfor ( var i = 0, il = newShapes.length; i < il; i ++ ) {\r\n\r\n\t\t\ttmpShape = newShapes[ i ].s;\r\n\t\t\tshapes.push( tmpShape );\r\n\t\t\ttmpHoles = newShapeHoles[ i ];\r\n\r\n\t\t\tfor ( var j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t//console.log(\"shape\", shapes);\r\n\r\n\t\treturn shapes;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/extras/core/Shape.js\r\n\r\n/**\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n * Defines a 2d shape plane using paths.\r\n **/\r\n\r\n// STEP 1 Create a path.\r\n// STEP 2 Turn path into shape.\r\n// STEP 3 ExtrudeGeometry takes in Shape/Shapes\r\n// STEP 3a - Extract points from each shape, turn to vertices\r\n// STEP 3b - Triangulate each shape, add faces.\r\n\r\nTHREE.Shape = function () {\r\n\r\n\tTHREE.Path.apply( this, arguments );\r\n\r\n\tthis.holes = [];\r\n\r\n};\r\n\r\nTHREE.Shape.prototype = Object.assign( Object.create( THREE.Path.prototype ), {\r\n\r\n\tconstructor: THREE.Shape,\r\n\r\n\t// Convenience method to return ExtrudeGeometry\r\n\r\n\textrude: function ( options ) {\r\n\r\n\t\treturn new THREE.ExtrudeGeometry( this, options );\r\n\r\n\t},\r\n\r\n\t// Convenience method to return ShapeGeometry\r\n\r\n\tmakeGeometry: function ( options ) {\r\n\r\n\t\treturn new THREE.ShapeGeometry( this, options );\r\n\r\n\t},\r\n\r\n\tgetPointsHoles: function ( divisions ) {\r\n\r\n\t\tvar holesPts = [];\r\n\r\n\t\tfor ( var i = 0, l = this.holes.length; i < l; i ++ ) {\r\n\r\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\r\n\r\n\t\t}\r\n\r\n\t\treturn holesPts;\r\n\r\n\t},\r\n\r\n\t// Get points of shape and holes (keypoints based on segments parameter)\r\n\r\n\textractAllPoints: function ( divisions ) {\r\n\r\n\t\treturn {\r\n\r\n\t\t\tshape: this.getPoints( divisions ),\r\n\t\t\tholes: this.getPointsHoles( divisions )\r\n\r\n\t\t};\r\n\r\n\t},\r\n\r\n\textractPoints: function ( divisions ) {\r\n\r\n\t\treturn this.extractAllPoints( divisions );\r\n\r\n\t}\r\n\r\n} );\r\n\r\n// File:src/extras/curves/LineCurve.js\r\n\r\n/**************************************************************\r\n *\tLine\r\n **************************************************************/\r\n\r\nTHREE.LineCurve = function ( v1, v2 ) {\r\n\r\n\tthis.v1 = v1;\r\n\tthis.v2 = v2;\r\n\r\n};\r\n\r\nTHREE.LineCurve.prototype = Object.create( THREE.Curve.prototype );\r\nTHREE.LineCurve.prototype.constructor = THREE.LineCurve;\r\n\r\nTHREE.LineCurve.prototype.getPoint = function ( t ) {\r\n\r\n\tvar point = this.v2.clone().sub( this.v1 );\r\n\tpoint.multiplyScalar( t ).add( this.v1 );\r\n\r\n\treturn point;\r\n\r\n};\r\n\r\n// Line curve is linear, so we can overwrite default getPointAt\r\n\r\nTHREE.LineCurve.prototype.getPointAt = function ( u ) {\r\n\r\n\treturn this.getPoint( u );\r\n\r\n};\r\n\r\nTHREE.LineCurve.prototype.getTangent = function( t ) {\r\n\r\n\tvar tangent = this.v2.clone().sub( this.v1 );\r\n\r\n\treturn tangent.normalize();\r\n\r\n};\r\n\r\n// File:src/extras/curves/QuadraticBezierCurve.js\r\n\r\n/**************************************************************\r\n *\tQuadratic Bezier curve\r\n **************************************************************/\r\n\r\n\r\nTHREE.QuadraticBezierCurve = function ( v0, v1, v2 ) {\r\n\r\n\tthis.v0 = v0;\r\n\tthis.v1 = v1;\r\n\tthis.v2 = v2;\r\n\r\n};\r\n\r\nTHREE.QuadraticBezierCurve.prototype = Object.create( THREE.Curve.prototype );\r\nTHREE.QuadraticBezierCurve.prototype.constructor = THREE.QuadraticBezierCurve;\r\n\r\n\r\nTHREE.QuadraticBezierCurve.prototype.getPoint = function ( t ) {\r\n\r\n\tvar b2 = THREE.ShapeUtils.b2;\r\n\r\n\treturn new THREE.Vector2(\r\n\t\tb2( t, this.v0.x, this.v1.x, this.v2.x ),\r\n\t\tb2( t, this.v0.y, this.v1.y, this.v2.y )\r\n\t);\r\n\r\n};\r\n\r\n\r\nTHREE.QuadraticBezierCurve.prototype.getTangent = function( t ) {\r\n\r\n\tvar tangentQuadraticBezier = THREE.CurveUtils.tangentQuadraticBezier;\r\n\r\n\treturn new THREE.Vector2(\r\n\t\ttangentQuadraticBezier( t, this.v0.x, this.v1.x, this.v2.x ),\r\n\t\ttangentQuadraticBezier( t, this.v0.y, this.v1.y, this.v2.y )\r\n\t).normalize();\r\n\r\n};\r\n\r\n// File:src/extras/curves/CubicBezierCurve.js\r\n\r\n/**************************************************************\r\n *\tCubic Bezier curve\r\n **************************************************************/\r\n\r\nTHREE.CubicBezierCurve = function ( v0, v1, v2, v3 ) {\r\n\r\n\tthis.v0 = v0;\r\n\tthis.v1 = v1;\r\n\tthis.v2 = v2;\r\n\tthis.v3 = v3;\r\n\r\n};\r\n\r\nTHREE.CubicBezierCurve.prototype = Object.create( THREE.Curve.prototype );\r\nTHREE.CubicBezierCurve.prototype.constructor = THREE.CubicBezierCurve;\r\n\r\nTHREE.CubicBezierCurve.prototype.getPoint = function ( t ) {\r\n\r\n\tvar b3 = THREE.ShapeUtils.b3;\r\n\r\n\treturn new THREE.Vector2( \r\n\t\tb3( t, this.v0.x, this.v1.x, this.v2.x, this.v3.x ),\r\n\t\tb3( t, this.v0.y, this.v1.y, this.v2.y, this.v3.y )\r\n\t);\r\n\r\n};\r\n\r\nTHREE.CubicBezierCurve.prototype.getTangent = function( t ) {\r\n\r\n\tvar tangentCubicBezier = THREE.CurveUtils.tangentCubicBezier;\r\n\r\n\treturn new THREE.Vector2( \r\n\t\ttangentCubicBezier( t, this.v0.x, this.v1.x, this.v2.x, this.v3.x ),\r\n\t\ttangentCubicBezier( t, this.v0.y, this.v1.y, this.v2.y, this.v3.y )\r\n\t).normalize();\r\n\r\n};\r\n\r\n// File:src/extras/curves/SplineCurve.js\r\n\r\n/**************************************************************\r\n *\tSpline curve\r\n **************************************************************/\r\n\r\nTHREE.SplineCurve = function ( points /* array of Vector2 */ ) {\r\n\r\n\tthis.points = ( points == undefined ) ? [] : points;\r\n\r\n};\r\n\r\nTHREE.SplineCurve.prototype = Object.create( THREE.Curve.prototype );\r\nTHREE.SplineCurve.prototype.constructor = THREE.SplineCurve;\r\n\r\nTHREE.SplineCurve.prototype.getPoint = function ( t ) {\r\n\r\n\tvar points = this.points;\r\n\tvar point = ( points.length - 1 ) * t;\r\n\r\n\tvar intPoint = Math.floor( point );\r\n\tvar weight = point - intPoint;\r\n\r\n\tvar point0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\r\n\tvar point1 = points[ intPoint ];\r\n\tvar point2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\r\n\tvar point3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\r\n\r\n\tvar interpolate = THREE.CurveUtils.interpolate;\r\n\r\n\treturn new THREE.Vector2(\r\n\t\tinterpolate( point0.x, point1.x, point2.x, point3.x, weight ),\r\n\t\tinterpolate( point0.y, point1.y, point2.y, point3.y, weight )\r\n\t);\r\n\r\n};\r\n\r\n// File:src/extras/curves/EllipseCurve.js\r\n\r\n/**************************************************************\r\n *\tEllipse curve\r\n **************************************************************/\r\n\r\nTHREE.EllipseCurve = function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\r\n\r\n\tthis.aX = aX;\r\n\tthis.aY = aY;\r\n\r\n\tthis.xRadius = xRadius;\r\n\tthis.yRadius = yRadius;\r\n\r\n\tthis.aStartAngle = aStartAngle;\r\n\tthis.aEndAngle = aEndAngle;\r\n\r\n\tthis.aClockwise = aClockwise;\r\n\t\r\n\tthis.aRotation = aRotation || 0;\r\n\r\n};\r\n\r\nTHREE.EllipseCurve.prototype = Object.create( THREE.Curve.prototype );\r\nTHREE.EllipseCurve.prototype.constructor = THREE.EllipseCurve;\r\n\r\nTHREE.EllipseCurve.prototype.getPoint = function ( t ) {\r\n\r\n\tvar deltaAngle = this.aEndAngle - this.aStartAngle;\r\n\r\n\tif ( deltaAngle < 0 ) deltaAngle += Math.PI * 2;\r\n\tif ( deltaAngle > Math.PI * 2 ) deltaAngle -= Math.PI * 2;\r\n\r\n\tvar angle;\r\n\r\n\tif ( this.aClockwise === true ) {\r\n\r\n\t\tangle = this.aEndAngle + ( 1 - t ) * ( Math.PI * 2 - deltaAngle );\r\n\r\n\t} else {\r\n\r\n\t\tangle = this.aStartAngle + t * deltaAngle;\r\n\r\n\t}\r\n\t\r\n\tvar x = this.aX + this.xRadius * Math.cos( angle );\r\n\tvar y = this.aY + this.yRadius * Math.sin( angle );\r\n\r\n\tif ( this.aRotation !== 0 ) {\r\n\r\n\t\tvar cos = Math.cos( this.aRotation );\r\n\t\tvar sin = Math.sin( this.aRotation );\r\n\r\n\t\tvar tx = x, ty = y;\r\n\r\n\t\t// Rotate the point about the center of the ellipse.\r\n\t\tx = ( tx - this.aX ) * cos - ( ty - this.aY ) * sin + this.aX;\r\n\t\ty = ( tx - this.aX ) * sin + ( ty - this.aY ) * cos + this.aY;\r\n\r\n\t}\r\n\r\n\treturn new THREE.Vector2( x, y );\r\n\r\n};\r\n\r\n// File:src/extras/curves/ArcCurve.js\r\n\r\n/**************************************************************\r\n *\tArc curve\r\n **************************************************************/\r\n\r\nTHREE.ArcCurve = function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\r\n\r\n\tTHREE.EllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\r\n\r\n};\r\n\r\nTHREE.ArcCurve.prototype = Object.create( THREE.EllipseCurve.prototype );\r\nTHREE.ArcCurve.prototype.constructor = THREE.ArcCurve;\r\n\r\n// File:src/extras/curves/LineCurve3.js\r\n\r\n/**************************************************************\r\n *\tLine3D\r\n **************************************************************/\r\n\r\nTHREE.LineCurve3 = THREE.Curve.create(\r\n\r\n\tfunction ( v1, v2 ) {\r\n\r\n\t\tthis.v1 = v1;\r\n\t\tthis.v2 = v2;\r\n\r\n\t},\r\n\r\n\tfunction ( t ) {\r\n\r\n\t\tvar vector = new THREE.Vector3();\r\n\r\n\t\tvector.subVectors( this.v2, this.v1 ); // diff\r\n\t\tvector.multiplyScalar( t );\r\n\t\tvector.add( this.v1 );\r\n\r\n\t\treturn vector;\r\n\r\n\t}\r\n\r\n);\r\n\r\n// File:src/extras/curves/QuadraticBezierCurve3.js\r\n\r\n/**************************************************************\r\n *\tQuadratic Bezier 3D curve\r\n **************************************************************/\r\n\r\nTHREE.QuadraticBezierCurve3 = THREE.Curve.create(\r\n\r\n\tfunction ( v0, v1, v2 ) {\r\n\r\n\t\tthis.v0 = v0;\r\n\t\tthis.v1 = v1;\r\n\t\tthis.v2 = v2;\r\n\r\n\t},\r\n\r\n\tfunction ( t ) {\r\n\r\n\t\tvar b2 = THREE.ShapeUtils.b2;\t\t\r\n\r\n\t\treturn new THREE.Vector3(\r\n\t\t\tb2( t, this.v0.x, this.v1.x, this.v2.x ),\r\n\t\t\tb2( t, this.v0.y, this.v1.y, this.v2.y ),\r\n\t\t\tb2( t, this.v0.z, this.v1.z, this.v2.z )\r\n\t\t);\r\n\r\n\t}\r\n\r\n);\r\n\r\n// File:src/extras/curves/CubicBezierCurve3.js\r\n\r\n/**************************************************************\r\n *\tCubic Bezier 3D curve\r\n **************************************************************/\r\n\r\nTHREE.CubicBezierCurve3 = THREE.Curve.create(\r\n\r\n\tfunction ( v0, v1, v2, v3 ) {\r\n\r\n\t\tthis.v0 = v0;\r\n\t\tthis.v1 = v1;\r\n\t\tthis.v2 = v2;\r\n\t\tthis.v3 = v3;\r\n\r\n\t},\r\n\r\n\tfunction ( t ) {\r\n\r\n\t\tvar b3 = THREE.ShapeUtils.b3;\r\n\r\n\t\treturn new THREE.Vector3(\r\n\t\t\tb3( t, this.v0.x, this.v1.x, this.v2.x, this.v3.x ),\r\n\t\t\tb3( t, this.v0.y, this.v1.y, this.v2.y, this.v3.y ),\r\n\t\t\tb3( t, this.v0.z, this.v1.z, this.v2.z, this.v3.z )\r\n\t\t);\r\n\r\n\t}\r\n\r\n);\r\n\r\n// File:src/extras/curves/SplineCurve3.js\r\n\r\n/**************************************************************\r\n *\tSpline 3D curve\r\n **************************************************************/\r\n\r\n\r\nTHREE.SplineCurve3 = THREE.Curve.create(\r\n\r\n\tfunction ( points /* array of Vector3 */ ) {\r\n\r\n\t\tconsole.warn( 'THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3' );\r\n\t\tthis.points = ( points == undefined ) ? [] : points;\r\n\r\n\t},\r\n\r\n\tfunction ( t ) {\r\n\r\n\t\tvar points = this.points;\r\n\t\tvar point = ( points.length - 1 ) * t;\r\n\r\n\t\tvar intPoint = Math.floor( point );\r\n\t\tvar weight = point - intPoint;\r\n\r\n\t\tvar point0 = points[ intPoint == 0 ? intPoint : intPoint - 1 ];\r\n\t\tvar point1 = points[ intPoint ];\r\n\t\tvar point2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\r\n\t\tvar point3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\r\n\r\n\t\tvar interpolate = THREE.CurveUtils.interpolate;\r\n\r\n\t\treturn new THREE.Vector3(\r\n\t\t\tinterpolate( point0.x, point1.x, point2.x, point3.x, weight ),\r\n\t\t\tinterpolate( point0.y, point1.y, point2.y, point3.y, weight ),\r\n\t\t\tinterpolate( point0.z, point1.z, point2.z, point3.z, weight )\r\n\t\t);\r\n\r\n\t}\r\n\r\n);\r\n\r\n// File:src/extras/curves/CatmullRomCurve3.js\r\n\r\n/**\r\n * @author zz85 https://github.com/zz85\r\n *\r\n * Centripetal CatmullRom Curve - which is useful for avoiding\r\n * cusps and self-intersections in non-uniform catmull rom curves.\r\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\r\n *\r\n * curve.type accepts centripetal(default), chordal and catmullrom\r\n * curve.tension is used for catmullrom which defaults to 0.5\r\n */\r\n\r\nTHREE.CatmullRomCurve3 = ( function() {\r\n\r\n\tvar\r\n\t\ttmp = new THREE.Vector3(),\r\n\t\tpx = new CubicPoly(),\r\n\t\tpy = new CubicPoly(),\r\n\t\tpz = new CubicPoly();\r\n\r\n\t/*\r\n\tBased on an optimized c++ solution in\r\n\t - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\r\n\t - http://ideone.com/NoEbVM\r\n\r\n\tThis CubicPoly class could be used for reusing some variables and calculations,\r\n\tbut for three.js curve use, it could be possible inlined and flatten into a single function call\r\n\twhich can be placed in CurveUtils.\r\n\t*/\r\n\r\n\tfunction CubicPoly() {\r\n\r\n\t}\r\n\r\n\t/*\r\n\t * Compute coefficients for a cubic polynomial\r\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\r\n\t * such that\r\n\t * p(0) = x0, p(1) = x1\r\n\t * and\r\n\t * p'(0) = t0, p'(1) = t1.\r\n\t */\r\n\tCubicPoly.prototype.init = function( x0, x1, t0, t1 ) {\r\n\r\n\t\tthis.c0 = x0;\r\n\t\tthis.c1 = t0;\r\n\t\tthis.c2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\r\n\t\tthis.c3 = 2 * x0 - 2 * x1 + t0 + t1;\r\n\r\n\t};\r\n\r\n\tCubicPoly.prototype.initNonuniformCatmullRom = function( x0, x1, x2, x3, dt0, dt1, dt2 ) {\r\n\r\n\t\t// compute tangents when parameterized in [t1,t2]\r\n\t\tvar t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\r\n\t\tvar t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\r\n\r\n\t\t// rescale tangents for parametrization in [0,1]\r\n\t\tt1 *= dt1;\r\n\t\tt2 *= dt1;\r\n\r\n\t\t// initCubicPoly\r\n\t\tthis.init( x1, x2, t1, t2 );\r\n\r\n\t};\r\n\r\n\t// standard Catmull-Rom spline: interpolate between x1 and x2 with previous/following points x1/x4\r\n\tCubicPoly.prototype.initCatmullRom = function( x0, x1, x2, x3, tension ) {\r\n\r\n\t\tthis.init( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\r\n\r\n\t};\r\n\r\n\tCubicPoly.prototype.calc = function( t ) {\r\n\r\n\t\tvar t2 = t * t;\r\n\t\tvar t3 = t2 * t;\r\n\t\treturn this.c0 + this.c1 * t + this.c2 * t2 + this.c3 * t3;\r\n\r\n\t};\r\n\r\n\t// Subclass Three.js curve\r\n\treturn THREE.Curve.create(\r\n\r\n\t\tfunction ( p /* array of Vector3 */ ) {\r\n\r\n\t\t\tthis.points = p || [];\r\n\t\t\tthis.closed = false;\r\n\r\n\t\t},\r\n\r\n\t\tfunction ( t ) {\r\n\r\n\t\t\tvar points = this.points,\r\n\t\t\t\tpoint, intPoint, weight, l;\r\n\r\n\t\t\tl = points.length;\r\n\r\n\t\t\tif ( l < 2 ) console.log( 'duh, you need at least 2 points' );\r\n\r\n\t\t\tpoint = ( l - ( this.closed ? 0 : 1 ) ) * t;\r\n\t\t\tintPoint = Math.floor( point );\r\n\t\t\tweight = point - intPoint;\r\n\r\n\t\t\tif ( this.closed ) {\r\n\r\n\t\t\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / points.length ) + 1 ) * points.length;\r\n\r\n\t\t\t} else if ( weight === 0 && intPoint === l - 1 ) {\r\n\r\n\t\t\t\tintPoint = l - 2;\r\n\t\t\t\tweight = 1;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar p0, p1, p2, p3; // 4 points\r\n\r\n\t\t\tif ( this.closed || intPoint > 0 ) {\r\n\r\n\t\t\t\tp0 = points[ ( intPoint - 1 ) % l ];\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// extrapolate first point\r\n\t\t\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\r\n\t\t\t\tp0 = tmp;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tp1 = points[ intPoint % l ];\r\n\t\t\tp2 = points[ ( intPoint + 1 ) % l ];\r\n\r\n\t\t\tif ( this.closed || intPoint + 2 < l ) {\r\n\r\n\t\t\t\tp3 = points[ ( intPoint + 2 ) % l ];\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// extrapolate last point\r\n\t\t\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\r\n\t\t\t\tp3 = tmp;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( this.type === undefined || this.type === 'centripetal' || this.type === 'chordal' ) {\r\n\r\n\t\t\t\t// init Centripetal / Chordal Catmull-Rom\r\n\t\t\t\tvar pow = this.type === 'chordal' ? 0.5 : 0.25;\r\n\t\t\t\tvar dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\r\n\t\t\t\tvar dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\r\n\t\t\t\tvar dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\r\n\r\n\t\t\t\t// safety check for repeated points\r\n\t\t\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\r\n\t\t\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\r\n\t\t\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\r\n\r\n\t\t\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\r\n\t\t\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\r\n\t\t\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\r\n\r\n\t\t\t} else if ( this.type === 'catmullrom' ) {\r\n\r\n\t\t\t\tvar tension = this.tension !== undefined ? this.tension : 0.5;\r\n\t\t\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, tension );\r\n\t\t\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, tension );\r\n\t\t\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, tension );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar v = new THREE.Vector3(\r\n\t\t\t\tpx.calc( weight ),\r\n\t\t\t\tpy.calc( weight ),\r\n\t\t\t\tpz.calc( weight )\r\n\t\t\t);\r\n\r\n\t\t\treturn v;\r\n\r\n\t\t}\r\n\r\n\t);\r\n\r\n} )();\r\n\r\n// File:src/extras/curves/ClosedSplineCurve3.js\r\n\r\n/**************************************************************\r\n *\tClosed Spline 3D curve\r\n **************************************************************/\r\n\r\n\r\nTHREE.ClosedSplineCurve3 = function ( points ) {\r\n\r\n\tconsole.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Please use THREE.CatmullRomCurve3.' );\r\n\r\n\tTHREE.CatmullRomCurve3.call( this, points );\r\n\tthis.type = 'catmullrom';\r\n\tthis.closed = true;\r\n\r\n};\r\n\r\nTHREE.ClosedSplineCurve3.prototype = Object.create( THREE.CatmullRomCurve3.prototype );\r\n\r\n// File:src/extras/geometries/BoxGeometry.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * based on http://papervision3d.googlecode.com/svn/trunk/as3/trunk/src/org/papervision3d/objects/primitives/Cube.as\r\n */\r\n\r\nTHREE.BoxGeometry = function ( width, height, depth, widthSegments, heightSegments, depthSegments ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'BoxGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\twidth: width,\r\n\t\theight: height,\r\n\t\tdepth: depth,\r\n\t\twidthSegments: widthSegments,\r\n\t\theightSegments: heightSegments,\r\n\t\tdepthSegments: depthSegments\r\n\t};\r\n\r\n\tthis.fromBufferGeometry( new THREE.BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) );\r\n\tthis.mergeVertices();\r\n\r\n};\r\n\r\nTHREE.BoxGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\nTHREE.BoxGeometry.prototype.constructor = THREE.BoxGeometry;\r\n\r\nTHREE.CubeGeometry = THREE.BoxGeometry;\r\n\r\n// File:src/extras/geometries/BoxBufferGeometry.js\r\n\r\n/**\r\n * @author Mugen87 / https://github.com/Mugen87\r\n */\r\n\r\nTHREE.BoxBufferGeometry = function ( width, height, depth, widthSegments, heightSegments, depthSegments ) {\r\n\r\n\tTHREE.BufferGeometry.call( this );\r\n\r\n\tthis.type = 'BoxBufferGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\twidth: width,\r\n\t\theight: height,\r\n\t\tdepth: depth,\r\n\t\twidthSegments: widthSegments,\r\n\t\theightSegments: heightSegments,\r\n\t\tdepthSegments: depthSegments\r\n\t};\r\n\r\n\tvar scope = this;\r\n\r\n\t// segments\r\n\twidthSegments = Math.floor( widthSegments ) || 1;\r\n\theightSegments = Math.floor( heightSegments ) || 1;\r\n\tdepthSegments = Math.floor( depthSegments ) || 1;\r\n\r\n\t// these are used to calculate buffer length\r\n\tvar vertexCount = calculateVertexCount( widthSegments, heightSegments, depthSegments );\r\n\tvar indexCount = calculateIndexCount( widthSegments, heightSegments, depthSegments );\r\n\r\n\t// buffers\r\n\tvar indices = new ( indexCount > 65535 ? Uint32Array : Uint16Array )( indexCount );\r\n\tvar vertices = new Float32Array( vertexCount * 3 );\r\n\tvar normals = new Float32Array( vertexCount * 3 );\r\n\tvar uvs = new Float32Array( vertexCount * 2 );\r\n\r\n\t// offset variables\r\n\tvar vertexBufferOffset = 0;\r\n\tvar uvBufferOffset = 0;\r\n\tvar indexBufferOffset = 0;\r\n\tvar numberOfVertices = 0;\r\n\r\n\t// group variables\r\n\tvar groupStart = 0;\r\n\r\n\t// build each side of the box geometry\r\n\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\r\n\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\r\n\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\r\n\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\r\n\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\r\n\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\r\n\r\n\t// build geometry\r\n\tthis.setIndex( new THREE.BufferAttribute( indices, 1 ) );\r\n\tthis.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );\r\n\tthis.addAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ) );\r\n\tthis.addAttribute( 'uv', new THREE.BufferAttribute( uvs, 2 ) );\r\n\r\n\t// helper functions\r\n\r\n\tfunction calculateVertexCount ( w, h, d ) {\r\n\r\n\t\tvar vertices = 0;\r\n\r\n\t\t// calculate the amount of vertices for each side (plane)\r\n\t\tvertices += (w + 1) * (h + 1) * 2; // xy\r\n\t\tvertices += (w + 1) * (d + 1) * 2; // xz\r\n\t\tvertices += (d + 1) * (h + 1) * 2; // zy\r\n\r\n\t\treturn vertices;\r\n\r\n\t}\r\n\r\n\tfunction calculateIndexCount ( w, h, d ) {\r\n\r\n\t\tvar index = 0;\r\n\r\n\t\t// calculate the amount of squares for each side\r\n\t\tindex += w * h * 2; // xy\r\n\t\tindex += w * d * 2; // xz\r\n\t\tindex += d * h * 2; // zy\r\n\r\n\t\treturn index * 6; // two triangles per square => six vertices per square\r\n\r\n\t}\r\n\r\n\tfunction buildPlane ( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\r\n\r\n\t\tvar segmentWidth\t= width / gridX;\r\n\t\tvar segmentHeight = height / gridY;\r\n\r\n\t\tvar widthHalf = width / 2;\r\n\t\tvar heightHalf = height / 2;\r\n\t\tvar depthHalf = depth / 2;\r\n\r\n\t\tvar gridX1 = gridX + 1;\r\n\t\tvar gridY1 = gridY + 1;\r\n\r\n\t\tvar vertexCounter = 0;\r\n\t\tvar groupCount = 0;\r\n\r\n\t\tvar vector = new THREE.Vector3();\r\n\r\n\t\t// generate vertices, normals and uvs\r\n\r\n\t\tfor ( var iy = 0; iy < gridY1; iy ++ ) {\r\n\r\n\t\t\tvar y = iy * segmentHeight - heightHalf;\r\n\r\n\t\t\tfor ( var ix = 0; ix < gridX1; ix ++ ) {\r\n\r\n\t\t\t\tvar x = ix * segmentWidth - widthHalf;\r\n\r\n\t\t\t\t// set values to correct vector component\r\n\t\t\t\tvector[ u ] = x * udir;\r\n\t\t\t\tvector[ v ] = y * vdir;\r\n\t\t\t\tvector[ w ] = depthHalf;\r\n\r\n\t\t\t\t// now apply vector to vertex buffer\r\n\t\t\t\tvertices[ vertexBufferOffset ] = vector.x;\r\n\t\t\t\tvertices[ vertexBufferOffset + 1 ] = vector.y;\r\n\t\t\t\tvertices[ vertexBufferOffset + 2 ] = vector.z;\r\n\r\n\t\t\t\t// set values to correct vector component\r\n\t\t\t\tvector[ u ] = 0;\r\n\t\t\t\tvector[ v ] = 0;\r\n\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\r\n\r\n\t\t\t\t// now apply vector to normal buffer\r\n\t\t\t\tnormals[ vertexBufferOffset ] = vector.x;\r\n\t\t\t\tnormals[ vertexBufferOffset + 1 ] = vector.y;\r\n\t\t\t\tnormals[ vertexBufferOffset + 2 ] = vector.z;\r\n\r\n\t\t\t\t// uvs\r\n\t\t\t\tuvs[ uvBufferOffset ] = ix / gridX;\r\n\t\t\t\tuvs[ uvBufferOffset + 1 ] = 1 - ( iy / gridY );\r\n\r\n\t\t\t\t// update offsets and counters\r\n\t\t\t\tvertexBufferOffset += 3;\r\n\t\t\t\tuvBufferOffset += 2;\r\n\t\t\t\tvertexCounter += 1;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// 1. you need three indices to draw a single face\r\n\t\t// 2. a single segment consists of two faces\r\n\t\t// 3. so we need to generate six (2*3) indices per segment\r\n\r\n\t\tfor ( iy = 0; iy < gridY; iy ++ ) {\r\n\r\n\t\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\r\n\r\n\t\t\t\t// indices\r\n\t\t\t\tvar a = numberOfVertices + ix + gridX1 * iy;\r\n\t\t\t\tvar b = numberOfVertices + ix + gridX1 * ( iy + 1 );\r\n\t\t\t\tvar c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\r\n\t\t\t\tvar d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\r\n\r\n\t\t\t\t// face one\r\n\t\t\t\tindices[ indexBufferOffset ] = a;\r\n\t\t\t\tindices[ indexBufferOffset + 1 ] = b;\r\n\t\t\t\tindices[ indexBufferOffset + 2 ] = d;\r\n\r\n\t\t\t\t// face two\r\n\t\t\t\tindices[ indexBufferOffset + 3 ] = b;\r\n\t\t\t\tindices[ indexBufferOffset + 4 ] = c;\r\n\t\t\t\tindices[ indexBufferOffset + 5 ] = d;\r\n\r\n\t\t\t\t// update offsets and counters\r\n\t\t\t\tindexBufferOffset += 6;\r\n\t\t\t\tgroupCount += 6;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// add a group to the geometry. this will ensure multi material support\r\n\t\tscope.addGroup( groupStart, groupCount, materialIndex );\r\n\r\n\t\t// calculate new start value for groups\r\n\t\tgroupStart += groupCount;\r\n\r\n\t\t// update total number of vertices\r\n\t\tnumberOfVertices += vertexCounter;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.BoxBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype );\r\nTHREE.BoxBufferGeometry.prototype.constructor = THREE.BoxBufferGeometry;\r\n\r\n// File:src/extras/geometries/CircleGeometry.js\r\n\r\n/**\r\n * @author hughes\r\n */\r\n\r\nTHREE.CircleGeometry = function ( radius, segments, thetaStart, thetaLength ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'CircleGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\tsegments: segments,\r\n\t\tthetaStart: thetaStart,\r\n\t\tthetaLength: thetaLength\r\n\t};\r\n\r\n\tthis.fromBufferGeometry( new THREE.CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) );\r\n\r\n};\r\n\r\nTHREE.CircleGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\nTHREE.CircleGeometry.prototype.constructor = THREE.CircleGeometry;\r\n\r\n// File:src/extras/geometries/CircleBufferGeometry.js\r\n\r\n/**\r\n * @author benaadams / https://twitter.com/ben_a_adams\r\n */\r\n\r\nTHREE.CircleBufferGeometry = function ( radius, segments, thetaStart, thetaLength ) {\r\n\r\n\tTHREE.BufferGeometry.call( this );\r\n\r\n\tthis.type = 'CircleBufferGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\tsegments: segments,\r\n\t\tthetaStart: thetaStart,\r\n\t\tthetaLength: thetaLength\r\n\t};\r\n\r\n\tradius = radius || 50;\r\n\tsegments = segments !== undefined ? Math.max( 3, segments ) : 8;\r\n\r\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\r\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\r\n\r\n\tvar vertices = segments + 2;\r\n\r\n\tvar positions = new Float32Array( vertices * 3 );\r\n\tvar normals = new Float32Array( vertices * 3 );\r\n\tvar uvs = new Float32Array( vertices * 2 );\r\n\r\n\t// center data is already zero, but need to set a few extras\r\n\tnormals[ 2 ] = 1.0;\r\n\tuvs[ 0 ] = 0.5;\r\n\tuvs[ 1 ] = 0.5;\r\n\r\n\tfor ( var s = 0, i = 3, ii = 2 ; s <= segments; s ++, i += 3, ii += 2 ) {\r\n\r\n\t\tvar segment = thetaStart + s / segments * thetaLength;\r\n\r\n\t\tpositions[ i ] = radius * Math.cos( segment );\r\n\t\tpositions[ i + 1 ] = radius * Math.sin( segment );\r\n\r\n\t\tnormals[ i + 2 ] = 1; // normal z\r\n\r\n\t\tuvs[ ii ] = ( positions[ i ] / radius + 1 ) / 2;\r\n\t\tuvs[ ii + 1 ] = ( positions[ i + 1 ] / radius + 1 ) / 2;\r\n\r\n\t}\r\n\r\n\tvar indices = [];\r\n\r\n\tfor ( var i = 1; i <= segments; i ++ ) {\r\n\r\n\t\tindices.push( i, i + 1, 0 );\r\n\r\n\t}\r\n\r\n\tthis.setIndex( new THREE.BufferAttribute( new Uint16Array( indices ), 1 ) );\r\n\tthis.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );\r\n\tthis.addAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ) );\r\n\tthis.addAttribute( 'uv', new THREE.BufferAttribute( uvs, 2 ) );\r\n\r\n\tthis.boundingSphere = new THREE.Sphere( new THREE.Vector3(), radius );\r\n\r\n};\r\n\r\nTHREE.CircleBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype );\r\nTHREE.CircleBufferGeometry.prototype.constructor = THREE.CircleBufferGeometry;\r\n\r\n// File:src/extras/geometries/CylinderBufferGeometry.js\r\n\r\n/**\r\n * @author Mugen87 / https://github.com/Mugen87\r\n */\r\n\r\nTHREE.CylinderBufferGeometry = function( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\r\n\r\n\tTHREE.BufferGeometry.call( this );\r\n\r\n\tthis.type = 'CylinderBufferGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradiusTop: radiusTop,\r\n\t\tradiusBottom: radiusBottom,\r\n\t\theight: height,\r\n\t\tradialSegments: radialSegments,\r\n\t\theightSegments: heightSegments,\r\n\t\topenEnded: openEnded,\r\n\t\tthetaStart: thetaStart,\r\n\t\tthetaLength: thetaLength\r\n\t};\r\n\r\n\tvar scope = this;\r\n\r\n\tradiusTop = radiusTop !== undefined ? radiusTop : 20;\r\n\tradiusBottom = radiusBottom !== undefined ? radiusBottom : 20;\r\n\theight = height !== undefined ? height : 100;\r\n\r\n\tradialSegments = Math.floor( radialSegments ) || 8;\r\n\theightSegments = Math.floor( heightSegments ) || 1;\r\n\r\n\topenEnded = openEnded !== undefined ? openEnded : false;\r\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0.0;\r\n\tthetaLength = thetaLength !== undefined ? thetaLength : 2.0 * Math.PI;\r\n\r\n\t// used to calculate buffer length\r\n\r\n\tvar nbCap = 0;\r\n\r\n\tif ( openEnded === false ) {\r\n\r\n\t\tif ( radiusTop > 0 ) nbCap ++;\r\n\t\tif ( radiusBottom > 0 ) nbCap ++;\r\n\r\n\t}\r\n\r\n\tvar vertexCount = calculateVertexCount();\r\n\tvar indexCount = calculateIndexCount();\r\n\r\n\t// buffers\r\n\r\n\tvar indices = new THREE.BufferAttribute( new ( indexCount > 65535 ? Uint32Array : Uint16Array )( indexCount ), 1 );\r\n\tvar vertices = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 );\r\n\tvar normals = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 );\r\n\tvar uvs = new THREE.BufferAttribute( new Float32Array( vertexCount * 2 ), 2 );\r\n\r\n\t// helper variables\r\n\r\n\tvar index = 0,\r\n\t indexOffset = 0,\r\n\t indexArray = [],\r\n\t halfHeight = height / 2;\r\n\r\n\t// group variables\r\n\tvar groupStart = 0;\r\n\r\n\t// generate geometry\r\n\r\n\tgenerateTorso();\r\n\r\n\tif ( openEnded === false ) {\r\n\r\n\t\tif ( radiusTop > 0 ) generateCap( true );\r\n\t\tif ( radiusBottom > 0 ) generateCap( false );\r\n\r\n\t}\r\n\r\n\t// build geometry\r\n\r\n\tthis.setIndex( indices );\r\n\tthis.addAttribute( 'position', vertices );\r\n\tthis.addAttribute( 'normal', normals );\r\n\tthis.addAttribute( 'uv', uvs );\r\n\r\n\t// helper functions\r\n\r\n\tfunction calculateVertexCount() {\r\n\r\n\t\tvar count = ( radialSegments + 1 ) * ( heightSegments + 1 );\r\n\r\n\t\tif ( openEnded === false ) {\r\n\r\n\t\t\tcount += ( ( radialSegments + 1 ) * nbCap ) + ( radialSegments * nbCap );\r\n\r\n\t\t}\r\n\r\n\t\treturn count;\r\n\r\n\t}\r\n\r\n\tfunction calculateIndexCount() {\r\n\r\n\t\tvar count = radialSegments * heightSegments * 2 * 3;\r\n\r\n\t\tif ( openEnded === false ) {\r\n\r\n\t\t\tcount += radialSegments * nbCap * 3;\r\n\r\n\t\t}\r\n\r\n\t\treturn count;\r\n\r\n\t}\r\n\r\n\tfunction generateTorso() {\r\n\r\n\t\tvar x, y;\r\n\t\tvar normal = new THREE.Vector3();\r\n\t\tvar vertex = new THREE.Vector3();\r\n\r\n\t\tvar groupCount = 0;\r\n\r\n\t\t// this will be used to calculate the normal\r\n\t\tvar tanTheta = ( radiusBottom - radiusTop ) / height;\r\n\r\n\t\t// generate vertices, normals and uvs\r\n\r\n\t\tfor ( y = 0; y <= heightSegments; y ++ ) {\r\n\r\n\t\t\tvar indexRow = [];\r\n\r\n\t\t\tvar v = y / heightSegments;\r\n\r\n\t\t\t// calculate the radius of the current row\r\n\t\t\tvar radius = v * ( radiusBottom - radiusTop ) + radiusTop;\r\n\r\n\t\t\tfor ( x = 0; x <= radialSegments; x ++ ) {\r\n\r\n\t\t\t\tvar u = x / radialSegments;\r\n\r\n\t\t\t\t// vertex\r\n\t\t\t\tvertex.x = radius * Math.sin( u * thetaLength + thetaStart );\r\n\t\t\t\tvertex.y = - v * height + halfHeight;\r\n\t\t\t\tvertex.z = radius * Math.cos( u * thetaLength + thetaStart );\r\n\t\t\t\tvertices.setXYZ( index, vertex.x, vertex.y, vertex.z );\r\n\r\n\t\t\t\t// normal\r\n\t\t\t\tnormal.copy( vertex );\r\n\r\n\t\t\t\t// handle special case if radiusTop/radiusBottom is zero\r\n\r\n\t\t\t\tif ( ( radiusTop === 0 && y === 0 ) || ( radiusBottom === 0 && y === heightSegments ) ) {\r\n\r\n\t\t\t\t\tnormal.x = Math.sin( u * thetaLength + thetaStart );\r\n\t\t\t\t\tnormal.z = Math.cos( u * thetaLength + thetaStart );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tnormal.setY( Math.sqrt( normal.x * normal.x + normal.z * normal.z ) * tanTheta ).normalize();\r\n\t\t\t\tnormals.setXYZ( index, normal.x, normal.y, normal.z );\r\n\r\n\t\t\t\t// uv\r\n\t\t\t\tuvs.setXY( index, u, 1 - v );\r\n\r\n\t\t\t\t// save index of vertex in respective row\r\n\t\t\t\tindexRow.push( index );\r\n\r\n\t\t\t\t// increase index\r\n\t\t\t\tindex ++;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// now save vertices of the row in our index array\r\n\t\t\tindexArray.push( indexRow );\r\n\r\n\t\t}\r\n\r\n\t\t// generate indices\r\n\r\n\t\tfor ( x = 0; x < radialSegments; x ++ ) {\r\n\r\n\t\t\tfor ( y = 0; y < heightSegments; y ++ ) {\r\n\r\n\t\t\t\t// we use the index array to access the correct indices\r\n\t\t\t\tvar i1 = indexArray[ y ][ x ];\r\n\t\t\t\tvar i2 = indexArray[ y + 1 ][ x ];\r\n\t\t\t\tvar i3 = indexArray[ y + 1 ][ x + 1 ];\r\n\t\t\t\tvar i4 = indexArray[ y ][ x + 1 ];\r\n\r\n\t\t\t\t// face one\r\n\t\t\t\tindices.setX( indexOffset, i1 ); indexOffset ++;\r\n\t\t\t\tindices.setX( indexOffset, i2 ); indexOffset ++;\r\n\t\t\t\tindices.setX( indexOffset, i4 ); indexOffset ++;\r\n\r\n\t\t\t\t// face two\r\n\t\t\t\tindices.setX( indexOffset, i2 ); indexOffset ++;\r\n\t\t\t\tindices.setX( indexOffset, i3 ); indexOffset ++;\r\n\t\t\t\tindices.setX( indexOffset, i4 ); indexOffset ++;\r\n\r\n\t\t\t\t// update counters\r\n\t\t\t\tgroupCount += 6;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// add a group to the geometry. this will ensure multi material support\r\n\t\tscope.addGroup( groupStart, groupCount, 0 );\r\n\r\n\t\t// calculate new start value for groups\r\n\t\tgroupStart += groupCount;\r\n\r\n\t}\r\n\r\n\tfunction generateCap( top ) {\r\n\r\n\t\tvar x, centerIndexStart, centerIndexEnd;\r\n\r\n\t\tvar uv = new THREE.Vector2();\r\n\t\tvar vertex = new THREE.Vector3();\r\n\r\n\t\tvar groupCount = 0;\r\n\r\n\t\tvar radius = ( top === true ) ? radiusTop : radiusBottom;\r\n\t\tvar sign = ( top === true ) ? 1 : - 1;\r\n\r\n\t\t// save the index of the first center vertex\r\n\t\tcenterIndexStart = index;\r\n\r\n\t\t// first we generate the center vertex data of the cap.\r\n\t\t// because the geometry needs one set of uvs per face,\r\n\t\t// we must generate a center vertex per face/segment\r\n\r\n\t\tfor ( x = 1; x <= radialSegments; x ++ ) {\r\n\r\n\t\t\t// vertex\r\n\t\t\tvertices.setXYZ( index, 0, halfHeight * sign, 0 );\r\n\r\n\t\t\t// normal\r\n\t\t\tnormals.setXYZ( index, 0, sign, 0 );\r\n\r\n\t\t\t// uv\r\n\t\t\tuv.x = 0.5;\r\n\t\t\tuv.y = 0.5;\r\n\r\n\t\t\tuvs.setXY( index, uv.x, uv.y );\r\n\r\n\t\t\t// increase index\r\n\t\t\tindex ++;\r\n\r\n\t\t}\r\n\r\n\t\t// save the index of the last center vertex\r\n\t\tcenterIndexEnd = index;\r\n\r\n\t\t// now we generate the surrounding vertices, normals and uvs\r\n\r\n\t\tfor ( x = 0; x <= radialSegments; x ++ ) {\r\n\r\n\t\t\tvar u = x / radialSegments;\r\n\t\t\tvar theta = u * thetaLength + thetaStart;\r\n\r\n\t\t\tvar cosTheta = Math.cos( theta );\r\n\t\t\tvar sinTheta = Math.sin( theta );\r\n\r\n\t\t\t// vertex\r\n\t\t\tvertex.x = radius * sinTheta;\r\n\t\t\tvertex.y = halfHeight * sign;\r\n\t\t\tvertex.z = radius * cosTheta;\r\n\t\t\tvertices.setXYZ( index, vertex.x, vertex.y, vertex.z );\r\n\r\n\t\t\t// normal\r\n\t\t\tnormals.setXYZ( index, 0, sign, 0 );\r\n\r\n\t\t\t// uv\r\n\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\r\n\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\r\n\t\t\tuvs.setXY( index, uv.x, uv.y );\r\n\r\n\t\t\t// increase index\r\n\t\t\tindex ++;\r\n\r\n\t\t}\r\n\r\n\t\t// generate indices\r\n\r\n\t\tfor ( x = 0; x < radialSegments; x ++ ) {\r\n\r\n\t\t\tvar c = centerIndexStart + x;\r\n\t\t\tvar i = centerIndexEnd + x;\r\n\r\n\t\t\tif ( top === true ) {\r\n\r\n\t\t\t\t// face top\r\n\t\t\t\tindices.setX( indexOffset, i ); indexOffset ++;\r\n\t\t\t\tindices.setX( indexOffset, i + 1 ); indexOffset ++;\r\n\t\t\t\tindices.setX( indexOffset, c ); indexOffset ++;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// face bottom\r\n\t\t\t\tindices.setX( indexOffset, i + 1 ); indexOffset ++;\r\n\t\t\t\tindices.setX( indexOffset, i ); indexOffset ++;\r\n\t\t\t\tindices.setX( indexOffset, c ); indexOffset ++;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// update counters\r\n\t\t\tgroupCount += 3;\r\n\r\n\t\t}\r\n\r\n\t\t// add a group to the geometry. this will ensure multi material support\r\n\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\r\n\r\n\t\t// calculate new start value for groups\r\n\t\tgroupStart += groupCount;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.CylinderBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype );\r\nTHREE.CylinderBufferGeometry.prototype.constructor = THREE.CylinderBufferGeometry;\r\n\r\n// File:src/extras/geometries/CylinderGeometry.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.CylinderGeometry = function ( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'CylinderGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradiusTop: radiusTop,\r\n\t\tradiusBottom: radiusBottom,\r\n\t\theight: height,\r\n\t\tradialSegments: radialSegments,\r\n\t\theightSegments: heightSegments,\r\n\t\topenEnded: openEnded,\r\n\t\tthetaStart: thetaStart,\r\n\t\tthetaLength: thetaLength\r\n\t};\r\n\r\n\tthis.fromBufferGeometry( new THREE.CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) );\r\n\tthis.mergeVertices();\r\n\r\n};\r\n\r\nTHREE.CylinderGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\nTHREE.CylinderGeometry.prototype.constructor = THREE.CylinderGeometry;\r\n\r\n// File:src/extras/geometries/ConeBufferGeometry.js\r\n\r\n/*\r\n * @author: abelnation / http://github.com/abelnation\r\n */\r\n\r\nTHREE.ConeBufferGeometry = function (\r\n\tradius, height,\r\n\tradialSegments, heightSegments,\r\n\topenEnded, thetaStart, thetaLength ) {\r\n\r\n\tTHREE.CylinderBufferGeometry.call( this,\r\n\t\t0, radius, height,\r\n\t\tradialSegments, heightSegments,\r\n\t\topenEnded, thetaStart, thetaLength );\r\n\r\n\tthis.type = 'ConeBufferGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\theight: height,\r\n\t\tradialSegments: radialSegments,\r\n\t\theightSegments: heightSegments,\r\n\t\tthetaStart: thetaStart,\r\n\t\tthetaLength: thetaLength\r\n\t};\r\n\r\n};\r\n\r\nTHREE.ConeBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype );\r\nTHREE.ConeBufferGeometry.prototype.constructor = THREE.ConeBufferGeometry;\r\n\r\n// File:src/extras/geometries/ConeGeometry.js\r\n\r\n/**\r\n * @author abelnation / http://github.com/abelnation\r\n */\r\n\r\nTHREE.ConeGeometry = function (\r\n\tradius, height,\r\n\tradialSegments, heightSegments,\r\n\topenEnded, thetaStart, thetaLength ) {\r\n\r\n\tTHREE.CylinderGeometry.call( this,\r\n\t\t0, radius, height,\r\n\t\tradialSegments, heightSegments,\r\n\t\topenEnded, thetaStart, thetaLength );\r\n\r\n\tthis.type = 'ConeGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\theight: height,\r\n\t\tradialSegments: radialSegments,\r\n\t\theightSegments: heightSegments,\r\n\t\topenEnded: openEnded,\r\n\t\tthetaStart: thetaStart,\r\n\t\tthetaLength: thetaLength\r\n\t};\r\n\r\n};\r\n\r\nTHREE.ConeGeometry.prototype = Object.create( THREE.CylinderGeometry.prototype );\r\nTHREE.ConeGeometry.prototype.constructor = THREE.ConeGeometry;\r\n\r\n// File:src/extras/geometries/EdgesGeometry.js\r\n\r\n/**\r\n * @author WestLangley / http://github.com/WestLangley\r\n */\r\n\r\nTHREE.EdgesGeometry = function ( geometry, thresholdAngle ) {\r\n\r\n\tTHREE.BufferGeometry.call( this );\r\n\r\n\tthresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1;\r\n\r\n\tvar thresholdDot = Math.cos( THREE.Math.DEG2RAD * thresholdAngle );\r\n\r\n\tvar edge = [ 0, 0 ], hash = {};\r\n\r\n\tfunction sortFunction( a, b ) {\r\n\r\n\t\treturn a - b;\r\n\r\n\t}\r\n\r\n\tvar keys = [ 'a', 'b', 'c' ];\r\n\r\n\tvar geometry2;\r\n\r\n\tif ( geometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\tgeometry2 = new THREE.Geometry();\r\n\t\tgeometry2.fromBufferGeometry( geometry );\r\n\r\n\t} else {\r\n\r\n\t\tgeometry2 = geometry.clone();\r\n\r\n\t}\r\n\r\n\tgeometry2.mergeVertices();\r\n\tgeometry2.computeFaceNormals();\r\n\r\n\tvar vertices = geometry2.vertices;\r\n\tvar faces = geometry2.faces;\r\n\r\n\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\r\n\r\n\t\tvar face = faces[ i ];\r\n\r\n\t\tfor ( var j = 0; j < 3; j ++ ) {\r\n\r\n\t\t\tedge[ 0 ] = face[ keys[ j ] ];\r\n\t\t\tedge[ 1 ] = face[ keys[ ( j + 1 ) % 3 ] ];\r\n\t\t\tedge.sort( sortFunction );\r\n\r\n\t\t\tvar key = edge.toString();\r\n\r\n\t\t\tif ( hash[ key ] === undefined ) {\r\n\r\n\t\t\t\thash[ key ] = { vert1: edge[ 0 ], vert2: edge[ 1 ], face1: i, face2: undefined };\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\thash[ key ].face2 = i;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tvar coords = [];\r\n\r\n\tfor ( var key in hash ) {\r\n\r\n\t\tvar h = hash[ key ];\r\n\r\n\t\tif ( h.face2 === undefined || faces[ h.face1 ].normal.dot( faces[ h.face2 ].normal ) <= thresholdDot ) {\r\n\r\n\t\t\tvar vertex = vertices[ h.vert1 ];\r\n\t\t\tcoords.push( vertex.x );\r\n\t\t\tcoords.push( vertex.y );\r\n\t\t\tcoords.push( vertex.z );\r\n\r\n\t\t\tvertex = vertices[ h.vert2 ];\r\n\t\t\tcoords.push( vertex.x );\r\n\t\t\tcoords.push( vertex.y );\r\n\t\t\tcoords.push( vertex.z );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.addAttribute( 'position', new THREE.BufferAttribute( new Float32Array( coords ), 3 ) );\r\n\r\n};\r\n\r\nTHREE.EdgesGeometry.prototype = Object.create( THREE.BufferGeometry.prototype );\r\nTHREE.EdgesGeometry.prototype.constructor = THREE.EdgesGeometry;\r\n\r\n// File:src/extras/geometries/ExtrudeGeometry.js\r\n\r\n/**\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n *\r\n * Creates extruded geometry from a path shape.\r\n *\r\n * parameters = {\r\n *\r\n * curveSegments: , // number of points on the curves\r\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\r\n * amount: , // Depth to extrude the shape\r\n *\r\n * bevelEnabled: , // turn on bevel\r\n * bevelThickness: , // how deep into the original shape bevel goes\r\n * bevelSize: , // how far from shape outline is bevel\r\n * bevelSegments: , // number of bevel layers\r\n *\r\n * extrudePath: // 3d spline path to extrude shape along. (creates Frames if .frames aren't defined)\r\n * frames: // containing arrays of tangents, normals, binormals\r\n *\r\n * uvGenerator: // object that provides UV generator functions\r\n *\r\n * }\r\n **/\r\n\r\nTHREE.ExtrudeGeometry = function ( shapes, options ) {\r\n\r\n\tif ( typeof( shapes ) === \"undefined\" ) {\r\n\r\n\t\tshapes = [];\r\n\t\treturn;\r\n\r\n\t}\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'ExtrudeGeometry';\r\n\r\n\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\r\n\r\n\tthis.addShapeList( shapes, options );\r\n\r\n\tthis.computeFaceNormals();\r\n\r\n\t// can't really use automatic vertex normals\r\n\t// as then front and back sides get smoothed too\r\n\t// should do separate smoothing just for sides\r\n\r\n\t//this.computeVertexNormals();\r\n\r\n\t//console.log( \"took\", ( Date.now() - startTime ) );\r\n\r\n};\r\n\r\nTHREE.ExtrudeGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\nTHREE.ExtrudeGeometry.prototype.constructor = THREE.ExtrudeGeometry;\r\n\r\nTHREE.ExtrudeGeometry.prototype.addShapeList = function ( shapes, options ) {\r\n\r\n\tvar sl = shapes.length;\r\n\r\n\tfor ( var s = 0; s < sl; s ++ ) {\r\n\r\n\t\tvar shape = shapes[ s ];\r\n\t\tthis.addShape( shape, options );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.ExtrudeGeometry.prototype.addShape = function ( shape, options ) {\r\n\r\n\tvar amount = options.amount !== undefined ? options.amount : 100;\r\n\r\n\tvar bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6; // 10\r\n\tvar bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2; // 8\r\n\tvar bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\r\n\r\n\tvar bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; // false\r\n\r\n\tvar curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\r\n\r\n\tvar steps = options.steps !== undefined ? options.steps : 1;\r\n\r\n\tvar extrudePath = options.extrudePath;\r\n\tvar extrudePts, extrudeByPath = false;\r\n\r\n\t// Use default WorldUVGenerator if no UV generators are specified.\r\n\tvar uvgen = options.UVGenerator !== undefined ? options.UVGenerator : THREE.ExtrudeGeometry.WorldUVGenerator;\r\n\r\n\tvar splineTube, binormal, normal, position2;\r\n\tif ( extrudePath ) {\r\n\r\n\t\textrudePts = extrudePath.getSpacedPoints( steps );\r\n\r\n\t\textrudeByPath = true;\r\n\t\tbevelEnabled = false; // bevels not supported for path extrusion\r\n\r\n\t\t// SETUP TNB variables\r\n\r\n\t\t// Reuse TNB from TubeGeomtry for now.\r\n\t\t// TODO1 - have a .isClosed in spline?\r\n\r\n\t\tsplineTube = options.frames !== undefined ? options.frames : new THREE.TubeGeometry.FrenetFrames( extrudePath, steps, false );\r\n\r\n\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\r\n\r\n\t\tbinormal = new THREE.Vector3();\r\n\t\tnormal = new THREE.Vector3();\r\n\t\tposition2 = new THREE.Vector3();\r\n\r\n\t}\r\n\r\n\t// Safeguards if bevels are not enabled\r\n\r\n\tif ( ! bevelEnabled ) {\r\n\r\n\t\tbevelSegments = 0;\r\n\t\tbevelThickness = 0;\r\n\t\tbevelSize = 0;\r\n\r\n\t}\r\n\r\n\t// Variables initialization\r\n\r\n\tvar ahole, h, hl; // looping of holes\r\n\tvar scope = this;\r\n\r\n\tvar shapesOffset = this.vertices.length;\r\n\r\n\tvar shapePoints = shape.extractPoints( curveSegments );\r\n\r\n\tvar vertices = shapePoints.shape;\r\n\tvar holes = shapePoints.holes;\r\n\r\n\tvar reverse = ! THREE.ShapeUtils.isClockWise( vertices );\r\n\r\n\tif ( reverse ) {\r\n\r\n\t\tvertices = vertices.reverse();\r\n\r\n\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\r\n\r\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\r\n\r\n\t\t\tahole = holes[ h ];\r\n\r\n\t\t\tif ( THREE.ShapeUtils.isClockWise( ahole ) ) {\r\n\r\n\t\t\t\tholes[ h ] = ahole.reverse();\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treverse = false; // If vertices are in order now, we shouldn't need to worry about them again (hopefully)!\r\n\r\n\t}\r\n\r\n\r\n\tvar faces = THREE.ShapeUtils.triangulateShape( vertices, holes );\r\n\r\n\t/* Vertices */\r\n\r\n\tvar contour = vertices; // vertices has all points but contour has only points of circumference\r\n\r\n\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\r\n\r\n\t\tahole = holes[ h ];\r\n\r\n\t\tvertices = vertices.concat( ahole );\r\n\r\n\t}\r\n\r\n\r\n\tfunction scalePt2 ( pt, vec, size ) {\r\n\r\n\t\tif ( ! vec ) console.error( \"THREE.ExtrudeGeometry: vec does not exist\" );\r\n\r\n\t\treturn vec.clone().multiplyScalar( size ).add( pt );\r\n\r\n\t}\r\n\r\n\tvar b, bs, t, z,\r\n\t\tvert, vlen = vertices.length,\r\n\t\tface, flen = faces.length;\r\n\r\n\r\n\t// Find directions for point movement\r\n\r\n\r\n\tfunction getBevelVec( inPt, inPrev, inNext ) {\r\n\r\n\t\t// computes for inPt the corresponding point inPt' on a new contour\r\n\t\t// shifted by 1 unit (length of normalized vector) to the left\r\n\t\t// if we walk along contour clockwise, this new contour is outside the old one\r\n\t\t//\r\n\t\t// inPt' is the intersection of the two lines parallel to the two\r\n\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\r\n\r\n\t\tvar v_trans_x, v_trans_y, shrink_by = 1;\t\t// resulting translation vector for inPt\r\n\r\n\t\t// good reading for geometry algorithms (here: line-line intersection)\r\n\t\t// http://geomalgorithms.com/a05-_intersect-1.html\r\n\r\n\t\tvar v_prev_x = inPt.x - inPrev.x, v_prev_y = inPt.y - inPrev.y;\r\n\t\tvar v_next_x = inNext.x - inPt.x, v_next_y = inNext.y - inPt.y;\r\n\r\n\t\tvar v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\r\n\r\n\t\t// check for collinear edges\r\n\t\tvar collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\r\n\r\n\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\r\n\r\n\t\t\t// not collinear\r\n\r\n\t\t\t// length of vectors for normalizing\r\n\r\n\t\t\tvar v_prev_len = Math.sqrt( v_prev_lensq );\r\n\t\t\tvar v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\r\n\r\n\t\t\t// shift adjacent points by unit vectors to the left\r\n\r\n\t\t\tvar ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\r\n\t\t\tvar ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\r\n\r\n\t\t\tvar ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\r\n\t\t\tvar ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\r\n\r\n\t\t\t// scaling factor for v_prev to intersection point\r\n\r\n\t\t\tvar sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\r\n\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\r\n\t\t\t\t\t ( v_prev_x * v_next_y - v_prev_y * v_next_x );\r\n\r\n\t\t\t// vector from inPt to intersection point\r\n\r\n\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\r\n\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\r\n\r\n\t\t\t// Don't normalize!, otherwise sharp corners become ugly\r\n\t\t\t// but prevent crazy spikes\r\n\t\t\tvar v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\r\n\t\t\tif ( v_trans_lensq <= 2 ) {\r\n\r\n\t\t\t\treturn\tnew THREE.Vector2( v_trans_x, v_trans_y );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// handle special case of collinear edges\r\n\r\n\t\t\tvar direction_eq = false;\t\t// assumes: opposite\r\n\t\t\tif ( v_prev_x > Number.EPSILON ) {\r\n\r\n\t\t\t\tif ( v_next_x > Number.EPSILON ) {\r\n\r\n\t\t\t\t\tdirection_eq = true;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\r\n\r\n\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\r\n\r\n\t\t\t\t\t\tdirection_eq = true;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\r\n\r\n\t\t\t\t\t\tdirection_eq = true;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( direction_eq ) {\r\n\r\n\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\r\n\t\t\t\tv_trans_x = - v_prev_y;\r\n\t\t\t\tv_trans_y = v_prev_x;\r\n\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\r\n\t\t\t\tv_trans_x = v_prev_x;\r\n\t\t\t\tv_trans_y = v_prev_y;\r\n\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn\tnew THREE.Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\r\n\r\n\t}\r\n\r\n\r\n\tvar contourMovements = [];\r\n\r\n\tfor ( var i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\r\n\r\n\t\tif ( j === il ) j = 0;\r\n\t\tif ( k === il ) k = 0;\r\n\r\n\t\t// (j)---(i)---(k)\r\n\t\t// console.log('i,j,k', i, j , k)\r\n\r\n\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\r\n\r\n\t}\r\n\r\n\tvar holesMovements = [], oneHoleMovements, verticesMovements = contourMovements.concat();\r\n\r\n\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\r\n\r\n\t\tahole = holes[ h ];\r\n\r\n\t\toneHoleMovements = [];\r\n\r\n\t\tfor ( i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\r\n\r\n\t\t\tif ( j === il ) j = 0;\r\n\t\t\tif ( k === il ) k = 0;\r\n\r\n\t\t\t// (j)---(i)---(k)\r\n\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\r\n\r\n\t\t}\r\n\r\n\t\tholesMovements.push( oneHoleMovements );\r\n\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\r\n\r\n\t}\r\n\r\n\r\n\t// Loop bevelSegments, 1 for the front, 1 for the back\r\n\r\n\tfor ( b = 0; b < bevelSegments; b ++ ) {\r\n\r\n\t\t//for ( b = bevelSegments; b > 0; b -- ) {\r\n\r\n\t\tt = b / bevelSegments;\r\n\t\tz = bevelThickness * ( 1 - t );\r\n\r\n\t\t//z = bevelThickness * t;\r\n\t\tbs = bevelSize * ( Math.sin ( t * Math.PI / 2 ) ); // curved\r\n\t\t//bs = bevelSize * t; // linear\r\n\r\n\t\t// contract shape\r\n\r\n\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\r\n\r\n\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\r\n\r\n\t\t\tv( vert.x, vert.y, - z );\r\n\r\n\t\t}\r\n\r\n\t\t// expand holes\r\n\r\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\r\n\r\n\t\t\tahole = holes[ h ];\r\n\t\t\toneHoleMovements = holesMovements[ h ];\r\n\r\n\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\r\n\r\n\t\t\t\tv( vert.x, vert.y, - z );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tbs = bevelSize;\r\n\r\n\t// Back facing vertices\r\n\r\n\tfor ( i = 0; i < vlen; i ++ ) {\r\n\r\n\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\r\n\r\n\t\tif ( ! extrudeByPath ) {\r\n\r\n\t\t\tv( vert.x, vert.y, 0 );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\r\n\r\n\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\r\n\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\r\n\r\n\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\r\n\r\n\t\t\tv( position2.x, position2.y, position2.z );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Add stepped vertices...\r\n\t// Including front facing vertices\r\n\r\n\tvar s;\r\n\r\n\tfor ( s = 1; s <= steps; s ++ ) {\r\n\r\n\t\tfor ( i = 0; i < vlen; i ++ ) {\r\n\r\n\t\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\r\n\r\n\t\t\tif ( ! extrudeByPath ) {\r\n\r\n\t\t\t\tv( vert.x, vert.y, amount / steps * s );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\r\n\r\n\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\r\n\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\r\n\r\n\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\r\n\r\n\t\t\t\tv( position2.x, position2.y, position2.z );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\t// Add bevel segments planes\r\n\r\n\t//for ( b = 1; b <= bevelSegments; b ++ ) {\r\n\tfor ( b = bevelSegments - 1; b >= 0; b -- ) {\r\n\r\n\t\tt = b / bevelSegments;\r\n\t\tz = bevelThickness * ( 1 - t );\r\n\t\t//bs = bevelSize * ( 1-Math.sin ( ( 1 - t ) * Math.PI/2 ) );\r\n\t\tbs = bevelSize * Math.sin ( t * Math.PI / 2 );\r\n\r\n\t\t// contract shape\r\n\r\n\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\r\n\r\n\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\r\n\t\t\tv( vert.x, vert.y, amount + z );\r\n\r\n\t\t}\r\n\r\n\t\t// expand holes\r\n\r\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\r\n\r\n\t\t\tahole = holes[ h ];\r\n\t\t\toneHoleMovements = holesMovements[ h ];\r\n\r\n\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\r\n\r\n\t\t\t\tif ( ! extrudeByPath ) {\r\n\r\n\t\t\t\t\tv( vert.x, vert.y, amount + z );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/* Faces */\r\n\r\n\t// Top and bottom faces\r\n\r\n\tbuildLidFaces();\r\n\r\n\t// Sides faces\r\n\r\n\tbuildSideFaces();\r\n\r\n\r\n\t///// Internal functions\r\n\r\n\tfunction buildLidFaces() {\r\n\r\n\t\tif ( bevelEnabled ) {\r\n\r\n\t\t\tvar layer = 0; // steps + 1\r\n\t\t\tvar offset = vlen * layer;\r\n\r\n\t\t\t// Bottom faces\r\n\r\n\t\t\tfor ( i = 0; i < flen; i ++ ) {\r\n\r\n\t\t\t\tface = faces[ i ];\r\n\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tlayer = steps + bevelSegments * 2;\r\n\t\t\toffset = vlen * layer;\r\n\r\n\t\t\t// Top faces\r\n\r\n\t\t\tfor ( i = 0; i < flen; i ++ ) {\r\n\r\n\t\t\t\tface = faces[ i ];\r\n\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Bottom faces\r\n\r\n\t\t\tfor ( i = 0; i < flen; i ++ ) {\r\n\r\n\t\t\t\tface = faces[ i ];\r\n\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Top faces\r\n\r\n\t\t\tfor ( i = 0; i < flen; i ++ ) {\r\n\r\n\t\t\t\tface = faces[ i ];\r\n\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Create faces for the z-sides of the shape\r\n\r\n\tfunction buildSideFaces() {\r\n\r\n\t\tvar layeroffset = 0;\r\n\t\tsidewalls( contour, layeroffset );\r\n\t\tlayeroffset += contour.length;\r\n\r\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\r\n\r\n\t\t\tahole = holes[ h ];\r\n\t\t\tsidewalls( ahole, layeroffset );\r\n\r\n\t\t\t//, true\r\n\t\t\tlayeroffset += ahole.length;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction sidewalls( contour, layeroffset ) {\r\n\r\n\t\tvar j, k;\r\n\t\ti = contour.length;\r\n\r\n\t\twhile ( -- i >= 0 ) {\r\n\r\n\t\t\tj = i;\r\n\t\t\tk = i - 1;\r\n\t\t\tif ( k < 0 ) k = contour.length - 1;\r\n\r\n\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\r\n\r\n\t\t\tvar s = 0, sl = steps + bevelSegments * 2;\r\n\r\n\t\t\tfor ( s = 0; s < sl; s ++ ) {\r\n\r\n\t\t\t\tvar slen1 = vlen * s;\r\n\t\t\t\tvar slen2 = vlen * ( s + 1 );\r\n\r\n\t\t\t\tvar a = layeroffset + j + slen1,\r\n\t\t\t\t\tb = layeroffset + k + slen1,\r\n\t\t\t\t\tc = layeroffset + k + slen2,\r\n\t\t\t\t\td = layeroffset + j + slen2;\r\n\r\n\t\t\t\tf4( a, b, c, d, contour, s, sl, j, k );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\tfunction v( x, y, z ) {\r\n\r\n\t\tscope.vertices.push( new THREE.Vector3( x, y, z ) );\r\n\r\n\t}\r\n\r\n\tfunction f3( a, b, c ) {\r\n\r\n\t\ta += shapesOffset;\r\n\t\tb += shapesOffset;\r\n\t\tc += shapesOffset;\r\n\r\n\t\tscope.faces.push( new THREE.Face3( a, b, c, null, null, 0 ) );\r\n\r\n\t\tvar uvs = uvgen.generateTopUV( scope, a, b, c );\r\n\r\n\t\tscope.faceVertexUvs[ 0 ].push( uvs );\r\n\r\n\t}\r\n\r\n\tfunction f4( a, b, c, d, wallContour, stepIndex, stepsLength, contourIndex1, contourIndex2 ) {\r\n\r\n\t\ta += shapesOffset;\r\n\t\tb += shapesOffset;\r\n\t\tc += shapesOffset;\r\n\t\td += shapesOffset;\r\n\r\n\t\tscope.faces.push( new THREE.Face3( a, b, d, null, null, 1 ) );\r\n\t\tscope.faces.push( new THREE.Face3( b, c, d, null, null, 1 ) );\r\n\r\n\t\tvar uvs = uvgen.generateSideWallUV( scope, a, b, c, d );\r\n\r\n\t\tscope.faceVertexUvs[ 0 ].push( [ uvs[ 0 ], uvs[ 1 ], uvs[ 3 ] ] );\r\n\t\tscope.faceVertexUvs[ 0 ].push( [ uvs[ 1 ], uvs[ 2 ], uvs[ 3 ] ] );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.ExtrudeGeometry.WorldUVGenerator = {\r\n\r\n\tgenerateTopUV: function ( geometry, indexA, indexB, indexC ) {\r\n\r\n\t\tvar vertices = geometry.vertices;\r\n\r\n\t\tvar a = vertices[ indexA ];\r\n\t\tvar b = vertices[ indexB ];\r\n\t\tvar c = vertices[ indexC ];\r\n\r\n\t\treturn [\r\n\t\t\tnew THREE.Vector2( a.x, a.y ),\r\n\t\t\tnew THREE.Vector2( b.x, b.y ),\r\n\t\t\tnew THREE.Vector2( c.x, c.y )\r\n\t\t];\r\n\r\n\t},\r\n\r\n\tgenerateSideWallUV: function ( geometry, indexA, indexB, indexC, indexD ) {\r\n\r\n\t\tvar vertices = geometry.vertices;\r\n\r\n\t\tvar a = vertices[ indexA ];\r\n\t\tvar b = vertices[ indexB ];\r\n\t\tvar c = vertices[ indexC ];\r\n\t\tvar d = vertices[ indexD ];\r\n\r\n\t\tif ( Math.abs( a.y - b.y ) < 0.01 ) {\r\n\r\n\t\t\treturn [\r\n\t\t\t\tnew THREE.Vector2( a.x, 1 - a.z ),\r\n\t\t\t\tnew THREE.Vector2( b.x, 1 - b.z ),\r\n\t\t\t\tnew THREE.Vector2( c.x, 1 - c.z ),\r\n\t\t\t\tnew THREE.Vector2( d.x, 1 - d.z )\r\n\t\t\t];\r\n\r\n\t\t} else {\r\n\r\n\t\t\treturn [\r\n\t\t\t\tnew THREE.Vector2( a.y, 1 - a.z ),\r\n\t\t\t\tnew THREE.Vector2( b.y, 1 - b.z ),\r\n\t\t\t\tnew THREE.Vector2( c.y, 1 - c.z ),\r\n\t\t\t\tnew THREE.Vector2( d.y, 1 - d.z )\r\n\t\t\t];\r\n\r\n\t\t}\r\n\r\n\t}\r\n};\r\n\r\n// File:src/extras/geometries/ShapeGeometry.js\r\n\r\n/**\r\n * @author jonobr1 / http://jonobr1.com\r\n *\r\n * Creates a one-sided polygonal geometry from a path shape. Similar to\r\n * ExtrudeGeometry.\r\n *\r\n * parameters = {\r\n *\r\n *\tcurveSegments: , // number of points on the curves. NOT USED AT THE MOMENT.\r\n *\r\n *\tmaterial: // material index for front and back faces\r\n *\tuvGenerator: // object that provides UV generator functions\r\n *\r\n * }\r\n **/\r\n\r\nTHREE.ShapeGeometry = function ( shapes, options ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'ShapeGeometry';\r\n\r\n\tif ( Array.isArray( shapes ) === false ) shapes = [ shapes ];\r\n\r\n\tthis.addShapeList( shapes, options );\r\n\r\n\tthis.computeFaceNormals();\r\n\r\n};\r\n\r\nTHREE.ShapeGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\nTHREE.ShapeGeometry.prototype.constructor = THREE.ShapeGeometry;\r\n\r\n/**\r\n * Add an array of shapes to THREE.ShapeGeometry.\r\n */\r\nTHREE.ShapeGeometry.prototype.addShapeList = function ( shapes, options ) {\r\n\r\n\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\r\n\r\n\t\tthis.addShape( shapes[ i ], options );\r\n\r\n\t}\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n/**\r\n * Adds a shape to THREE.ShapeGeometry, based on THREE.ExtrudeGeometry.\r\n */\r\nTHREE.ShapeGeometry.prototype.addShape = function ( shape, options ) {\r\n\r\n\tif ( options === undefined ) options = {};\r\n\tvar curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\r\n\r\n\tvar material = options.material;\r\n\tvar uvgen = options.UVGenerator === undefined ? THREE.ExtrudeGeometry.WorldUVGenerator : options.UVGenerator;\r\n\r\n\t//\r\n\r\n\tvar i, l, hole;\r\n\r\n\tvar shapesOffset = this.vertices.length;\r\n\tvar shapePoints = shape.extractPoints( curveSegments );\r\n\r\n\tvar vertices = shapePoints.shape;\r\n\tvar holes = shapePoints.holes;\r\n\r\n\tvar reverse = ! THREE.ShapeUtils.isClockWise( vertices );\r\n\r\n\tif ( reverse ) {\r\n\r\n\t\tvertices = vertices.reverse();\r\n\r\n\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe...\r\n\r\n\t\tfor ( i = 0, l = holes.length; i < l; i ++ ) {\r\n\r\n\t\t\thole = holes[ i ];\r\n\r\n\t\t\tif ( THREE.ShapeUtils.isClockWise( hole ) ) {\r\n\r\n\t\t\t\tholes[ i ] = hole.reverse();\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treverse = false;\r\n\r\n\t}\r\n\r\n\tvar faces = THREE.ShapeUtils.triangulateShape( vertices, holes );\r\n\r\n\t// Vertices\r\n\r\n\tfor ( i = 0, l = holes.length; i < l; i ++ ) {\r\n\r\n\t\thole = holes[ i ];\r\n\t\tvertices = vertices.concat( hole );\r\n\r\n\t}\r\n\r\n\t//\r\n\r\n\tvar vert, vlen = vertices.length;\r\n\tvar face, flen = faces.length;\r\n\r\n\tfor ( i = 0; i < vlen; i ++ ) {\r\n\r\n\t\tvert = vertices[ i ];\r\n\r\n\t\tthis.vertices.push( new THREE.Vector3( vert.x, vert.y, 0 ) );\r\n\r\n\t}\r\n\r\n\tfor ( i = 0; i < flen; i ++ ) {\r\n\r\n\t\tface = faces[ i ];\r\n\r\n\t\tvar a = face[ 0 ] + shapesOffset;\r\n\t\tvar b = face[ 1 ] + shapesOffset;\r\n\t\tvar c = face[ 2 ] + shapesOffset;\r\n\r\n\t\tthis.faces.push( new THREE.Face3( a, b, c, null, null, material ) );\r\n\t\tthis.faceVertexUvs[ 0 ].push( uvgen.generateTopUV( this, a, b, c ) );\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/extras/geometries/LatheBufferGeometry.js\r\n\r\n/**\r\n * @author Mugen87 / https://github.com/Mugen87\r\n */\r\n\r\n // points - to create a closed torus, one must use a set of points\r\n // like so: [ a, b, c, d, a ], see first is the same as last.\r\n // segments - the number of circumference segments to create\r\n // phiStart - the starting radian\r\n // phiLength - the radian (0 to 2PI) range of the lathed section\r\n // 2PI is a closed lathe, less than 2PI is a portion.\r\n\r\nTHREE.LatheBufferGeometry = function ( points, segments, phiStart, phiLength ) {\r\n\r\n\tTHREE.BufferGeometry.call( this );\r\n\r\n\tthis.type = 'LatheBufferGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tpoints: points,\r\n\t\tsegments: segments,\r\n\t\tphiStart: phiStart,\r\n\t\tphiLength: phiLength\r\n\t};\r\n\r\n\tsegments = Math.floor( segments ) || 12;\r\n\tphiStart = phiStart || 0;\r\n\tphiLength = phiLength || Math.PI * 2;\r\n\r\n\t// clamp phiLength so it's in range of [ 0, 2PI ]\r\n\tphiLength = THREE.Math.clamp( phiLength, 0, Math.PI * 2 );\r\n\r\n\t// these are used to calculate buffer length\r\n\tvar vertexCount = ( segments + 1 ) * points.length;\r\n\tvar indexCount = segments * points.length * 2 * 3;\r\n\r\n\t// buffers\r\n\tvar indices = new THREE.BufferAttribute( new ( indexCount > 65535 ? Uint32Array : Uint16Array )( indexCount ) , 1 );\r\n\tvar vertices = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 );\r\n\tvar uvs = new THREE.BufferAttribute( new Float32Array( vertexCount * 2 ), 2 );\r\n\r\n\t// helper variables\r\n\tvar index = 0, indexOffset = 0, base;\r\n\tvar inversePointLength = 1.0 / ( points.length - 1 );\r\n\tvar inverseSegments = 1.0 / segments;\r\n\tvar vertex = new THREE.Vector3();\r\n\tvar uv = new THREE.Vector2();\r\n\tvar i, j;\r\n\r\n\t// generate vertices and uvs\r\n\r\n\tfor ( i = 0; i <= segments; i ++ ) {\r\n\r\n\t\tvar phi = phiStart + i * inverseSegments * phiLength;\r\n\r\n\t\tvar sin = Math.sin( phi );\r\n\t\tvar cos = Math.cos( phi );\r\n\r\n\t\tfor ( j = 0; j <= ( points.length - 1 ); j ++ ) {\r\n\r\n\t\t\t// vertex\r\n\t\t\tvertex.x = points[ j ].x * sin;\r\n\t\t\tvertex.y = points[ j ].y;\r\n\t\t\tvertex.z = points[ j ].x * cos;\r\n\t\t\tvertices.setXYZ( index, vertex.x, vertex.y, vertex.z );\r\n\r\n\t\t\t// uv\r\n\t\t\tuv.x = i / segments;\r\n\t\t\tuv.y = j / ( points.length - 1 );\r\n\t\t\tuvs.setXY( index, uv.x, uv.y );\r\n\r\n\t\t\t// increase index\r\n\t\t\tindex ++;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// generate indices\r\n\r\n\tfor ( i = 0; i < segments; i ++ ) {\r\n\r\n\t\tfor ( j = 0; j < ( points.length - 1 ); j ++ ) {\r\n\r\n\t\t\tbase = j + i * points.length;\r\n\r\n\t\t\t// indices\r\n\t\t\tvar a = base;\r\n\t\t\tvar b = base + points.length;\r\n\t\t\tvar c = base + points.length + 1;\r\n\t\t\tvar d = base + 1;\r\n\r\n\t\t\t// face one\r\n\t\t\tindices.setX( indexOffset, a ); indexOffset++;\r\n\t\t\tindices.setX( indexOffset, b ); indexOffset++;\r\n\t\t\tindices.setX( indexOffset, d ); indexOffset++;\r\n\r\n\t\t\t// face two\r\n\t\t\tindices.setX( indexOffset, b ); indexOffset++;\r\n\t\t\tindices.setX( indexOffset, c ); indexOffset++;\r\n\t\t\tindices.setX( indexOffset, d ); indexOffset++;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// build geometry\r\n\r\n\tthis.setIndex( indices );\r\n\tthis.addAttribute( 'position', vertices );\r\n\tthis.addAttribute( 'uv', uvs );\r\n\r\n\t// generate normals\r\n\r\n\tthis.computeVertexNormals();\r\n\r\n\t// if the geometry is closed, we need to average the normals along the seam.\r\n\t// because the corresponding vertices are identical (but still have different UVs).\r\n\r\n\tif( phiLength === Math.PI * 2 ) {\r\n\r\n\t\tvar normals = this.attributes.normal.array;\r\n\t\tvar n1 = new THREE.Vector3();\r\n\t\tvar n2 = new THREE.Vector3();\r\n\t\tvar n = new THREE.Vector3();\r\n\r\n\t\t// this is the buffer offset for the last line of vertices\r\n\t\tbase = segments * points.length * 3;\r\n\r\n\t\tfor( i = 0, j = 0; i < points.length; i ++, j += 3 ) {\r\n\r\n\t\t\t// select the normal of the vertex in the first line\r\n\t\t\tn1.x = normals[ j + 0 ];\r\n\t\t\tn1.y = normals[ j + 1 ];\r\n\t\t\tn1.z = normals[ j + 2 ];\r\n\r\n\t\t\t// select the normal of the vertex in the last line\r\n\t\t\tn2.x = normals[ base + j + 0 ];\r\n\t\t\tn2.y = normals[ base + j + 1 ];\r\n\t\t\tn2.z = normals[ base + j + 2 ];\r\n\r\n\t\t\t// average normals\r\n\t\t\tn.addVectors( n1, n2 ).normalize();\r\n\r\n\t\t\t// assign the new values to both normals\r\n\t\t\tnormals[ j + 0 ] = normals[ base + j + 0 ] = n.x;\r\n\t\t\tnormals[ j + 1 ] = normals[ base + j + 1 ] = n.y;\r\n\t\t\tnormals[ j + 2 ] = normals[ base + j + 2 ] = n.z;\r\n\r\n\t\t} // next row\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.LatheBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype );\r\nTHREE.LatheBufferGeometry.prototype.constructor = THREE.LatheBufferGeometry;\r\n\r\n// File:src/extras/geometries/LatheGeometry.js\r\n\r\n/**\r\n * @author astrodud / http://astrodud.isgreat.org/\r\n * @author zz85 / https://github.com/zz85\r\n * @author bhouston / http://clara.io\r\n */\r\n\r\n// points - to create a closed torus, one must use a set of points\r\n// like so: [ a, b, c, d, a ], see first is the same as last.\r\n// segments - the number of circumference segments to create\r\n// phiStart - the starting radian\r\n// phiLength - the radian (0 to 2PI) range of the lathed section\r\n// 2PI is a closed lathe, less than 2PI is a portion.\r\n\r\nTHREE.LatheGeometry = function ( points, segments, phiStart, phiLength ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'LatheGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tpoints: points,\r\n\t\tsegments: segments,\r\n\t\tphiStart: phiStart,\r\n\t\tphiLength: phiLength\r\n\t};\r\n\r\n\tthis.fromBufferGeometry( new THREE.LatheBufferGeometry( points, segments, phiStart, phiLength ) );\r\n\tthis.mergeVertices();\r\n\r\n};\r\n\r\nTHREE.LatheGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\nTHREE.LatheGeometry.prototype.constructor = THREE.LatheGeometry;\r\n\r\n// File:src/extras/geometries/PlaneGeometry.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * based on http://papervision3d.googlecode.com/svn/trunk/as3/trunk/src/org/papervision3d/objects/primitives/Plane.as\r\n */\r\n\r\nTHREE.PlaneGeometry = function ( width, height, widthSegments, heightSegments ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'PlaneGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\twidth: width,\r\n\t\theight: height,\r\n\t\twidthSegments: widthSegments,\r\n\t\theightSegments: heightSegments\r\n\t};\r\n\r\n\tthis.fromBufferGeometry( new THREE.PlaneBufferGeometry( width, height, widthSegments, heightSegments ) );\r\n\r\n};\r\n\r\nTHREE.PlaneGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\nTHREE.PlaneGeometry.prototype.constructor = THREE.PlaneGeometry;\r\n\r\n// File:src/extras/geometries/PlaneBufferGeometry.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * based on http://papervision3d.googlecode.com/svn/trunk/as3/trunk/src/org/papervision3d/objects/primitives/Plane.as\r\n */\r\n\r\nTHREE.PlaneBufferGeometry = function ( width, height, widthSegments, heightSegments ) {\r\n\r\n\tTHREE.BufferGeometry.call( this );\r\n\r\n\tthis.type = 'PlaneBufferGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\twidth: width,\r\n\t\theight: height,\r\n\t\twidthSegments: widthSegments,\r\n\t\theightSegments: heightSegments\r\n\t};\r\n\r\n\tvar width_half = width / 2;\r\n\tvar height_half = height / 2;\r\n\r\n\tvar gridX = Math.floor( widthSegments ) || 1;\r\n\tvar gridY = Math.floor( heightSegments ) || 1;\r\n\r\n\tvar gridX1 = gridX + 1;\r\n\tvar gridY1 = gridY + 1;\r\n\r\n\tvar segment_width = width / gridX;\r\n\tvar segment_height = height / gridY;\r\n\r\n\tvar vertices = new Float32Array( gridX1 * gridY1 * 3 );\r\n\tvar normals = new Float32Array( gridX1 * gridY1 * 3 );\r\n\tvar uvs = new Float32Array( gridX1 * gridY1 * 2 );\r\n\r\n\tvar offset = 0;\r\n\tvar offset2 = 0;\r\n\r\n\tfor ( var iy = 0; iy < gridY1; iy ++ ) {\r\n\r\n\t\tvar y = iy * segment_height - height_half;\r\n\r\n\t\tfor ( var ix = 0; ix < gridX1; ix ++ ) {\r\n\r\n\t\t\tvar x = ix * segment_width - width_half;\r\n\r\n\t\t\tvertices[ offset ] = x;\r\n\t\t\tvertices[ offset + 1 ] = - y;\r\n\r\n\t\t\tnormals[ offset + 2 ] = 1;\r\n\r\n\t\t\tuvs[ offset2 ] = ix / gridX;\r\n\t\t\tuvs[ offset2 + 1 ] = 1 - ( iy / gridY );\r\n\r\n\t\t\toffset += 3;\r\n\t\t\toffset2 += 2;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\toffset = 0;\r\n\r\n\tvar indices = new ( ( vertices.length / 3 ) > 65535 ? Uint32Array : Uint16Array )( gridX * gridY * 6 );\r\n\r\n\tfor ( var iy = 0; iy < gridY; iy ++ ) {\r\n\r\n\t\tfor ( var ix = 0; ix < gridX; ix ++ ) {\r\n\r\n\t\t\tvar a = ix + gridX1 * iy;\r\n\t\t\tvar b = ix + gridX1 * ( iy + 1 );\r\n\t\t\tvar c = ( ix + 1 ) + gridX1 * ( iy + 1 );\r\n\t\t\tvar d = ( ix + 1 ) + gridX1 * iy;\r\n\r\n\t\t\tindices[ offset ] = a;\r\n\t\t\tindices[ offset + 1 ] = b;\r\n\t\t\tindices[ offset + 2 ] = d;\r\n\r\n\t\t\tindices[ offset + 3 ] = b;\r\n\t\t\tindices[ offset + 4 ] = c;\r\n\t\t\tindices[ offset + 5 ] = d;\r\n\r\n\t\t\toffset += 6;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.setIndex( new THREE.BufferAttribute( indices, 1 ) );\r\n\tthis.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );\r\n\tthis.addAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ) );\r\n\tthis.addAttribute( 'uv', new THREE.BufferAttribute( uvs, 2 ) );\r\n\r\n};\r\n\r\nTHREE.PlaneBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype );\r\nTHREE.PlaneBufferGeometry.prototype.constructor = THREE.PlaneBufferGeometry;\r\n\r\n// File:src/extras/geometries/RingBufferGeometry.js\r\n\r\n/**\r\n * @author Mugen87 / https://github.com/Mugen87\r\n */\r\n\r\nTHREE.RingBufferGeometry = function ( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\r\n\r\n\tTHREE.BufferGeometry.call( this );\r\n\r\n\tthis.type = 'RingBufferGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tinnerRadius: innerRadius,\r\n\t\touterRadius: outerRadius,\r\n\t\tthetaSegments: thetaSegments,\r\n\t\tphiSegments: phiSegments,\r\n\t\tthetaStart: thetaStart,\r\n\t\tthetaLength: thetaLength\r\n\t};\r\n\r\n\tinnerRadius = innerRadius || 20;\r\n\touterRadius = outerRadius || 50;\r\n\r\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\r\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\r\n\r\n\tthetaSegments = thetaSegments !== undefined ? Math.max( 3, thetaSegments ) : 8;\r\n\tphiSegments = phiSegments !== undefined ? Math.max( 1, phiSegments ) : 1;\r\n\r\n\t// these are used to calculate buffer length\r\n\tvar vertexCount = ( thetaSegments + 1 ) * ( phiSegments + 1 );\r\n\tvar indexCount = thetaSegments * phiSegments * 2 * 3;\r\n\r\n\t// buffers\r\n\tvar indices = new THREE.BufferAttribute( new ( indexCount > 65535 ? Uint32Array : Uint16Array )( indexCount ) , 1 );\r\n\tvar vertices = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 );\r\n\tvar normals = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 );\r\n\tvar uvs = new THREE.BufferAttribute( new Float32Array( vertexCount * 2 ), 2 );\r\n\r\n\t// some helper variables\r\n\tvar index = 0, indexOffset = 0, segment;\r\n\tvar radius = innerRadius;\r\n\tvar radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\r\n\tvar vertex = new THREE.Vector3();\r\n\tvar uv = new THREE.Vector2();\r\n\tvar j, i;\r\n\r\n\t// generate vertices, normals and uvs\r\n\r\n\t// values are generate from the inside of the ring to the outside\r\n\r\n\tfor ( j = 0; j <= phiSegments; j ++ ) {\r\n\r\n\t\tfor ( i = 0; i <= thetaSegments; i ++ ) {\r\n\r\n\t\t\tsegment = thetaStart + i / thetaSegments * thetaLength;\r\n\r\n\t\t\t// vertex\r\n\t\t\tvertex.x = radius * Math.cos( segment );\r\n\t\t\tvertex.y = radius * Math.sin( segment );\r\n\t\t\tvertices.setXYZ( index, vertex.x, vertex.y, vertex.z );\r\n\r\n\t\t\t// normal\r\n\t\t\tnormals.setXYZ( index, 0, 0, 1 );\r\n\r\n\t\t\t// uv\r\n\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\r\n\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\r\n\t\t\tuvs.setXY( index, uv.x, uv.y );\r\n\r\n\t\t\t// increase index\r\n\t\t\tindex++;\r\n\r\n\t\t}\r\n\r\n\t\t// increase the radius for next row of vertices\r\n\t\tradius += radiusStep;\r\n\r\n\t}\r\n\r\n\t// generate indices\r\n\r\n\tfor ( j = 0; j < phiSegments; j ++ ) {\r\n\r\n\t\tvar thetaSegmentLevel = j * ( thetaSegments + 1 );\r\n\r\n\t\tfor ( i = 0; i < thetaSegments; i ++ ) {\r\n\r\n\t\t\tsegment = i + thetaSegmentLevel;\r\n\r\n\t\t\t// indices\r\n\t\t\tvar a = segment;\r\n\t\t\tvar b = segment + thetaSegments + 1;\r\n\t\t\tvar c = segment + thetaSegments + 2;\r\n\t\t\tvar d = segment + 1;\r\n\r\n\t\t\t// face one\r\n\t\t\tindices.setX( indexOffset, a ); indexOffset++;\r\n\t\t\tindices.setX( indexOffset, b ); indexOffset++;\r\n\t\t\tindices.setX( indexOffset, c ); indexOffset++;\r\n\r\n\t\t\t// face two\r\n\t\t\tindices.setX( indexOffset, a ); indexOffset++;\r\n\t\t\tindices.setX( indexOffset, c ); indexOffset++;\r\n\t\t\tindices.setX( indexOffset, d ); indexOffset++;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// build geometry\r\n\r\n\tthis.setIndex( indices );\r\n\tthis.addAttribute( 'position', vertices );\r\n\tthis.addAttribute( 'normal', normals );\r\n\tthis.addAttribute( 'uv', uvs );\r\n\r\n};\r\n\r\nTHREE.RingBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype );\r\nTHREE.RingBufferGeometry.prototype.constructor = THREE.RingBufferGeometry;\r\n\r\n// File:src/extras/geometries/RingGeometry.js\r\n\r\n/**\r\n * @author Kaleb Murphy\r\n */\r\n\r\nTHREE.RingGeometry = function ( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'RingGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tinnerRadius: innerRadius,\r\n\t\touterRadius: outerRadius,\r\n\t\tthetaSegments: thetaSegments,\r\n\t\tphiSegments: phiSegments,\r\n\t\tthetaStart: thetaStart,\r\n\t\tthetaLength: thetaLength\r\n\t};\r\n\r\n\tthis.fromBufferGeometry( new THREE.RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) );\r\n\r\n};\r\n\r\nTHREE.RingGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\nTHREE.RingGeometry.prototype.constructor = THREE.RingGeometry;\r\n\r\n// File:src/extras/geometries/SphereGeometry.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.SphereGeometry = function ( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'SphereGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\twidthSegments: widthSegments,\r\n\t\theightSegments: heightSegments,\r\n\t\tphiStart: phiStart,\r\n\t\tphiLength: phiLength,\r\n\t\tthetaStart: thetaStart,\r\n\t\tthetaLength: thetaLength\r\n\t};\r\n\r\n\tthis.fromBufferGeometry( new THREE.SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) );\r\n\r\n};\r\n\r\nTHREE.SphereGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\nTHREE.SphereGeometry.prototype.constructor = THREE.SphereGeometry;\r\n\r\n// File:src/extras/geometries/SphereBufferGeometry.js\r\n\r\n/**\r\n * @author benaadams / https://twitter.com/ben_a_adams\r\n * based on THREE.SphereGeometry\r\n */\r\n\r\nTHREE.SphereBufferGeometry = function ( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\r\n\r\n\tTHREE.BufferGeometry.call( this );\r\n\r\n\tthis.type = 'SphereBufferGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\twidthSegments: widthSegments,\r\n\t\theightSegments: heightSegments,\r\n\t\tphiStart: phiStart,\r\n\t\tphiLength: phiLength,\r\n\t\tthetaStart: thetaStart,\r\n\t\tthetaLength: thetaLength\r\n\t};\r\n\r\n\tradius = radius || 50;\r\n\r\n\twidthSegments = Math.max( 3, Math.floor( widthSegments ) || 8 );\r\n\theightSegments = Math.max( 2, Math.floor( heightSegments ) || 6 );\r\n\r\n\tphiStart = phiStart !== undefined ? phiStart : 0;\r\n\tphiLength = phiLength !== undefined ? phiLength : Math.PI * 2;\r\n\r\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\r\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI;\r\n\r\n\tvar thetaEnd = thetaStart + thetaLength;\r\n\r\n\tvar vertexCount = ( ( widthSegments + 1 ) * ( heightSegments + 1 ) );\r\n\r\n\tvar positions = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 );\r\n\tvar normals = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 );\r\n\tvar uvs = new THREE.BufferAttribute( new Float32Array( vertexCount * 2 ), 2 );\r\n\r\n\tvar index = 0, vertices = [], normal = new THREE.Vector3();\r\n\r\n\tfor ( var y = 0; y <= heightSegments; y ++ ) {\r\n\r\n\t\tvar verticesRow = [];\r\n\r\n\t\tvar v = y / heightSegments;\r\n\r\n\t\tfor ( var x = 0; x <= widthSegments; x ++ ) {\r\n\r\n\t\t\tvar u = x / widthSegments;\r\n\r\n\t\t\tvar px = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\r\n\t\t\tvar py = radius * Math.cos( thetaStart + v * thetaLength );\r\n\t\t\tvar pz = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\r\n\r\n\t\t\tnormal.set( px, py, pz ).normalize();\r\n\r\n\t\t\tpositions.setXYZ( index, px, py, pz );\r\n\t\t\tnormals.setXYZ( index, normal.x, normal.y, normal.z );\r\n\t\t\tuvs.setXY( index, u, 1 - v );\r\n\r\n\t\t\tverticesRow.push( index );\r\n\r\n\t\t\tindex ++;\r\n\r\n\t\t}\r\n\r\n\t\tvertices.push( verticesRow );\r\n\r\n\t}\r\n\r\n\tvar indices = [];\r\n\r\n\tfor ( var y = 0; y < heightSegments; y ++ ) {\r\n\r\n\t\tfor ( var x = 0; x < widthSegments; x ++ ) {\r\n\r\n\t\t\tvar v1 = vertices[ y ][ x + 1 ];\r\n\t\t\tvar v2 = vertices[ y ][ x ];\r\n\t\t\tvar v3 = vertices[ y + 1 ][ x ];\r\n\t\t\tvar v4 = vertices[ y + 1 ][ x + 1 ];\r\n\r\n\t\t\tif ( y !== 0 || thetaStart > 0 ) indices.push( v1, v2, v4 );\r\n\t\t\tif ( y !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( v2, v3, v4 );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.setIndex( new ( positions.count > 65535 ? THREE.Uint32Attribute : THREE.Uint16Attribute )( indices, 1 ) );\r\n\tthis.addAttribute( 'position', positions );\r\n\tthis.addAttribute( 'normal', normals );\r\n\tthis.addAttribute( 'uv', uvs );\r\n\r\n\tthis.boundingSphere = new THREE.Sphere( new THREE.Vector3(), radius );\r\n\r\n};\r\n\r\nTHREE.SphereBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype );\r\nTHREE.SphereBufferGeometry.prototype.constructor = THREE.SphereBufferGeometry;\r\n\r\n// File:src/extras/geometries/TextGeometry.js\r\n\r\n/**\r\n * @author zz85 / http://www.lab4games.net/zz85/blog\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n * Text = 3D Text\r\n *\r\n * parameters = {\r\n * font: , // font\r\n *\r\n * size: , // size of the text\r\n * height: , // thickness to extrude text\r\n * curveSegments: , // number of points on the curves\r\n *\r\n * bevelEnabled: , // turn on bevel\r\n * bevelThickness: , // how deep into text bevel goes\r\n * bevelSize: // how far from text outline is bevel\r\n * }\r\n */\r\n\r\nTHREE.TextGeometry = function ( text, parameters ) {\r\n\r\n\tparameters = parameters || {};\r\n\r\n\tvar font = parameters.font;\r\n\r\n\tif ( font instanceof THREE.Font === false ) {\r\n\r\n\t\tconsole.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' );\r\n\t\treturn new THREE.Geometry();\r\n\r\n\t}\r\n\r\n\tvar shapes = font.generateShapes( text, parameters.size, parameters.curveSegments );\r\n\r\n\t// translate parameters to ExtrudeGeometry API\r\n\r\n\tparameters.amount = parameters.height !== undefined ? parameters.height : 50;\r\n\r\n\t// defaults\r\n\r\n\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\r\n\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\r\n\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\r\n\r\n\tTHREE.ExtrudeGeometry.call( this, shapes, parameters );\r\n\r\n\tthis.type = 'TextGeometry';\r\n\r\n};\r\n\r\nTHREE.TextGeometry.prototype = Object.create( THREE.ExtrudeGeometry.prototype );\r\nTHREE.TextGeometry.prototype.constructor = THREE.TextGeometry;\r\n\r\n// File:src/extras/geometries/TorusBufferGeometry.js\r\n\r\n/**\r\n * @author Mugen87 / https://github.com/Mugen87\r\n */\r\n\r\nTHREE.TorusBufferGeometry = function ( radius, tube, radialSegments, tubularSegments, arc ) {\r\n\r\n\tTHREE.BufferGeometry.call( this );\r\n\r\n\tthis.type = 'TorusBufferGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\ttube: tube,\r\n\t\tradialSegments: radialSegments,\r\n\t\ttubularSegments: tubularSegments,\r\n\t\tarc: arc\r\n\t};\r\n\r\n\tradius = radius || 100;\r\n\ttube = tube || 40;\r\n\tradialSegments = Math.floor( radialSegments ) || 8;\r\n\ttubularSegments = Math.floor( tubularSegments ) || 6;\r\n\tarc = arc || Math.PI * 2;\r\n\r\n\t// used to calculate buffer length\r\n\tvar vertexCount = ( ( radialSegments + 1 ) * ( tubularSegments + 1 ) );\r\n\tvar indexCount = radialSegments * tubularSegments * 2 * 3;\r\n\r\n\t// buffers\r\n\tvar indices = new ( indexCount > 65535 ? Uint32Array : Uint16Array )( indexCount );\r\n\tvar vertices = new Float32Array( vertexCount * 3 );\r\n\tvar normals = new Float32Array( vertexCount * 3 );\r\n\tvar uvs = new Float32Array( vertexCount * 2 );\r\n\r\n\t// offset variables\r\n\tvar vertexBufferOffset = 0;\r\n\tvar uvBufferOffset = 0;\r\n\tvar indexBufferOffset = 0;\r\n\r\n\t// helper variables\r\n\tvar center = new THREE.Vector3();\r\n\tvar vertex = new THREE.Vector3();\r\n\tvar normal = new THREE.Vector3();\r\n\r\n\tvar j, i;\r\n\r\n\t// generate vertices, normals and uvs\r\n\r\n\tfor ( j = 0; j <= radialSegments; j ++ ) {\r\n\r\n\t\tfor ( i = 0; i <= tubularSegments; i ++ ) {\r\n\r\n\t\t\tvar u = i / tubularSegments * arc;\r\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\r\n\r\n\t\t\t// vertex\r\n\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\r\n\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\r\n\t\t\tvertex.z = tube * Math.sin( v );\r\n\r\n\t\t\tvertices[ vertexBufferOffset ] = vertex.x;\r\n\t\t\tvertices[ vertexBufferOffset + 1 ] = vertex.y;\r\n\t\t\tvertices[ vertexBufferOffset + 2 ] = vertex.z;\r\n\r\n\t\t\t// this vector is used to calculate the normal\r\n\t\t\tcenter.x = radius * Math.cos( u );\r\n\t\t\tcenter.y = radius * Math.sin( u );\r\n\r\n\t\t\t// normal\r\n\t\t\tnormal.subVectors( vertex, center ).normalize();\r\n\r\n\t\t\tnormals[ vertexBufferOffset ] = normal.x;\r\n\t\t\tnormals[ vertexBufferOffset + 1 ] = normal.y;\r\n\t\t\tnormals[ vertexBufferOffset + 2 ] = normal.z;\r\n\r\n\t\t\t// uv\r\n\t\t\tuvs[ uvBufferOffset ] = i / tubularSegments;\r\n\t\t\tuvs[ uvBufferOffset + 1 ] = j / radialSegments;\r\n\r\n\t\t\t// update offsets\r\n\t\t\tvertexBufferOffset += 3;\r\n\t\t\tuvBufferOffset += 2;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// generate indices\r\n\r\n\tfor ( j = 1; j <= radialSegments; j ++ ) {\r\n\r\n\t\tfor ( i = 1; i <= tubularSegments; i ++ ) {\r\n\r\n\t\t\t// indices\r\n\t\t\tvar a = ( tubularSegments + 1 ) * j + i - 1;\r\n\t\t\tvar b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\r\n\t\t\tvar c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\r\n\t\t\tvar d = ( tubularSegments + 1 ) * j + i;\r\n\r\n\t\t\t// face one\r\n\t\t\tindices[ indexBufferOffset ] = a;\r\n\t\t\tindices[ indexBufferOffset + 1 ] = b;\r\n\t\t\tindices[ indexBufferOffset + 2 ] = d;\r\n\r\n\t\t\t// face two\r\n\t\t\tindices[ indexBufferOffset + 3 ] = b;\r\n\t\t\tindices[ indexBufferOffset + 4 ] = c;\r\n\t\t\tindices[ indexBufferOffset + 5 ] = d;\r\n\r\n\t\t\t// update offset\r\n\t\t\tindexBufferOffset += 6;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// build geometry\r\n\tthis.setIndex( new THREE.BufferAttribute( indices, 1 ) );\r\n\tthis.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );\r\n\tthis.addAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ) );\r\n\tthis.addAttribute( 'uv', new THREE.BufferAttribute( uvs, 2 ) );\r\n\r\n};\r\n\r\nTHREE.TorusBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype );\r\nTHREE.TorusBufferGeometry.prototype.constructor = THREE.TorusBufferGeometry;\r\n\r\n// File:src/extras/geometries/TorusGeometry.js\r\n\r\n/**\r\n * @author oosmoxiecode\r\n * @author mrdoob / http://mrdoob.com/\r\n * based on http://code.google.com/p/away3d/source/browse/trunk/fp10/Away3DLite/src/away3dlite/primitives/Torus.as?r=2888\r\n */\r\n\r\nTHREE.TorusGeometry = function ( radius, tube, radialSegments, tubularSegments, arc ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'TorusGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\ttube: tube,\r\n\t\tradialSegments: radialSegments,\r\n\t\ttubularSegments: tubularSegments,\r\n\t\tarc: arc\r\n\t};\r\n\r\n\tthis.fromBufferGeometry( new THREE.TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) );\r\n\r\n};\r\n\r\nTHREE.TorusGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\nTHREE.TorusGeometry.prototype.constructor = THREE.TorusGeometry;\r\n\r\n// File:src/extras/geometries/TorusKnotBufferGeometry.js\r\n\r\n/**\r\n * @author Mugen87 / https://github.com/Mugen87\r\n *\r\n * see: http://www.blackpawn.com/texts/pqtorus/\r\n */\r\nTHREE.TorusKnotBufferGeometry = function ( radius, tube, tubularSegments, radialSegments, p, q ) {\r\n\r\n\tTHREE.BufferGeometry.call( this );\r\n\r\n\tthis.type = 'TorusKnotBufferGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\ttube: tube,\r\n\t\ttubularSegments: tubularSegments,\r\n\t\tradialSegments: radialSegments,\r\n\t\tp: p,\r\n\t\tq: q\r\n\t};\r\n\r\n\tradius = radius || 100;\r\n\ttube = tube || 40;\r\n\ttubularSegments = Math.floor( tubularSegments ) || 64;\r\n\tradialSegments = Math.floor( radialSegments ) || 8;\r\n\tp = p || 2;\r\n\tq = q || 3;\r\n\r\n\t// used to calculate buffer length\r\n\tvar vertexCount = ( ( radialSegments + 1 ) * ( tubularSegments + 1 ) );\r\n\tvar indexCount = radialSegments * tubularSegments * 2 * 3;\r\n\r\n\t// buffers\r\n\tvar indices = new THREE.BufferAttribute( new ( indexCount > 65535 ? Uint32Array : Uint16Array )( indexCount ) , 1 );\r\n\tvar vertices = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 );\r\n\tvar normals = new THREE.BufferAttribute( new Float32Array( vertexCount * 3 ), 3 );\r\n\tvar uvs = new THREE.BufferAttribute( new Float32Array( vertexCount * 2 ), 2 );\r\n\r\n\t// helper variables\r\n\tvar i, j, index = 0, indexOffset = 0;\r\n\r\n\tvar vertex = new THREE.Vector3();\r\n\tvar normal = new THREE.Vector3();\r\n\tvar uv = new THREE.Vector2();\r\n\r\n\tvar P1 = new THREE.Vector3();\r\n\tvar P2 = new THREE.Vector3();\r\n\r\n\tvar B = new THREE.Vector3();\r\n\tvar T = new THREE.Vector3();\r\n\tvar N = new THREE.Vector3();\r\n\r\n\t// generate vertices, normals and uvs\r\n\r\n\tfor ( i = 0; i <= tubularSegments; ++ i ) {\r\n\r\n\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segement\r\n\r\n\t\tvar u = i / tubularSegments * p * Math.PI * 2;\r\n\r\n\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\r\n\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\r\n\r\n\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\r\n\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\r\n\r\n\t\t// calculate orthonormal basis\r\n\r\n\t\tT.subVectors( P2, P1 );\r\n\t\tN.addVectors( P2, P1 );\r\n\t\tB.crossVectors( T, N );\r\n\t\tN.crossVectors( B, T );\r\n\r\n\t\t// normalize B, N. T can be ignored, we don't use it\r\n\r\n\t\tB.normalize();\r\n\t\tN.normalize();\r\n\r\n\t\tfor ( j = 0; j <= radialSegments; ++ j ) {\r\n\r\n\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\r\n\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\r\n\r\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\r\n\t\t\tvar cx = - tube * Math.cos( v );\r\n\t\t\tvar cy = tube * Math.sin( v );\r\n\r\n\t\t\t// now calculate the final vertex position.\r\n\t\t\t// first we orient the extrusion with our basis vectos, then we add it to the current position on the curve\r\n\r\n\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\r\n\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\r\n\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\r\n\r\n\t\t\t// vertex\r\n\t\t\tvertices.setXYZ( index, vertex.x, vertex.y, vertex.z );\r\n\r\n\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\r\n\t\t\tnormal.subVectors( vertex, P1 ).normalize();\r\n\t\t\tnormals.setXYZ( index, normal.x, normal.y, normal.z );\r\n\r\n\t\t\t// uv\r\n\t\t\tuv.x = i / tubularSegments;\r\n\t\t\tuv.y = j / radialSegments;\r\n\t\t\tuvs.setXY( index, uv.x, uv.y );\r\n\r\n\t\t\t// increase index\r\n\t\t\tindex ++;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// generate indices\r\n\r\n\tfor ( j = 1; j <= tubularSegments; j ++ ) {\r\n\r\n\t\tfor ( i = 1; i <= radialSegments; i ++ ) {\r\n\r\n\t\t\t// indices\r\n\t\t\tvar a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\r\n\t\t\tvar b = ( radialSegments + 1 ) * j + ( i - 1 );\r\n\t\t\tvar c = ( radialSegments + 1 ) * j + i;\r\n\t\t\tvar d = ( radialSegments + 1 ) * ( j - 1 ) + i;\r\n\r\n\t\t\t// face one\r\n\t\t\tindices.setX( indexOffset, a ); indexOffset++;\r\n\t\t\tindices.setX( indexOffset, b ); indexOffset++;\r\n\t\t\tindices.setX( indexOffset, d ); indexOffset++;\r\n\r\n\t\t\t// face two\r\n\t\t\tindices.setX( indexOffset, b ); indexOffset++;\r\n\t\t\tindices.setX( indexOffset, c ); indexOffset++;\r\n\t\t\tindices.setX( indexOffset, d ); indexOffset++;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// build geometry\r\n\r\n\tthis.setIndex( indices );\r\n\tthis.addAttribute( 'position', vertices );\r\n\tthis.addAttribute( 'normal', normals );\r\n\tthis.addAttribute( 'uv', uvs );\r\n\r\n\t// this function calculates the current position on the torus curve\r\n\r\n\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\r\n\r\n\t\tvar cu = Math.cos( u );\r\n\t\tvar su = Math.sin( u );\r\n\t\tvar quOverP = q / p * u;\r\n\t\tvar cs = Math.cos( quOverP );\r\n\r\n\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\r\n\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\r\n\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.TorusKnotBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype );\r\nTHREE.TorusKnotBufferGeometry.prototype.constructor = THREE.TorusKnotBufferGeometry;\r\n\r\n// File:src/extras/geometries/TorusKnotGeometry.js\r\n\r\n/**\r\n * @author oosmoxiecode\r\n */\r\n\r\nTHREE.TorusKnotGeometry = function ( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'TorusKnotGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\ttube: tube,\r\n\t\ttubularSegments: tubularSegments,\r\n\t\tradialSegments: radialSegments,\r\n\t\tp: p,\r\n\t\tq: q\r\n\t};\r\n\r\n\tif( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' );\r\n\r\n\tthis.fromBufferGeometry( new THREE.TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) );\r\n\tthis.mergeVertices();\r\n\r\n};\r\n\r\nTHREE.TorusKnotGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\nTHREE.TorusKnotGeometry.prototype.constructor = THREE.TorusKnotGeometry;\r\n\r\n// File:src/extras/geometries/TubeGeometry.js\r\n\r\n/**\r\n * @author WestLangley / https://github.com/WestLangley\r\n * @author zz85 / https://github.com/zz85\r\n * @author miningold / https://github.com/miningold\r\n * @author jonobr1 / https://github.com/jonobr1\r\n *\r\n * Modified from the TorusKnotGeometry by @oosmoxiecode\r\n *\r\n * Creates a tube which extrudes along a 3d spline\r\n *\r\n * Uses parallel transport frames as described in\r\n * http://www.cs.indiana.edu/pub/techreports/TR425.pdf\r\n */\r\n\r\nTHREE.TubeGeometry = function ( path, segments, radius, radialSegments, closed, taper ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'TubeGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tpath: path,\r\n\t\tsegments: segments,\r\n\t\tradius: radius,\r\n\t\tradialSegments: radialSegments,\r\n\t\tclosed: closed,\r\n\t\ttaper: taper\r\n\t};\r\n\r\n\tsegments = segments || 64;\r\n\tradius = radius || 1;\r\n\tradialSegments = radialSegments || 8;\r\n\tclosed = closed || false;\r\n\ttaper = taper || THREE.TubeGeometry.NoTaper;\r\n\r\n\tvar grid = [];\r\n\r\n\tvar scope = this,\r\n\r\n\t\ttangent,\r\n\t\tnormal,\r\n\t\tbinormal,\r\n\r\n\t\tnumpoints = segments + 1,\r\n\r\n\t\tu, v, r,\r\n\r\n\t\tcx, cy,\r\n\t\tpos, pos2 = new THREE.Vector3(),\r\n\t\ti, j,\r\n\t\tip, jp,\r\n\t\ta, b, c, d,\r\n\t\tuva, uvb, uvc, uvd;\r\n\r\n\tvar frames = new THREE.TubeGeometry.FrenetFrames( path, segments, closed ),\r\n\t\ttangents = frames.tangents,\r\n\t\tnormals = frames.normals,\r\n\t\tbinormals = frames.binormals;\r\n\r\n\t// proxy internals\r\n\tthis.tangents = tangents;\r\n\tthis.normals = normals;\r\n\tthis.binormals = binormals;\r\n\r\n\tfunction vert( x, y, z ) {\r\n\r\n\t\treturn scope.vertices.push( new THREE.Vector3( x, y, z ) ) - 1;\r\n\r\n\t}\r\n\r\n\t// construct the grid\r\n\r\n\tfor ( i = 0; i < numpoints; i ++ ) {\r\n\r\n\t\tgrid[ i ] = [];\r\n\r\n\t\tu = i / ( numpoints - 1 );\r\n\r\n\t\tpos = path.getPointAt( u );\r\n\r\n\t\ttangent = tangents[ i ];\r\n\t\tnormal = normals[ i ];\r\n\t\tbinormal = binormals[ i ];\r\n\r\n\t\tr = radius * taper( u );\r\n\r\n\t\tfor ( j = 0; j < radialSegments; j ++ ) {\r\n\r\n\t\t\tv = j / radialSegments * 2 * Math.PI;\r\n\r\n\t\t\tcx = - r * Math.cos( v ); // TODO: Hack: Negating it so it faces outside.\r\n\t\t\tcy = r * Math.sin( v );\r\n\r\n\t\t\tpos2.copy( pos );\r\n\t\t\tpos2.x += cx * normal.x + cy * binormal.x;\r\n\t\t\tpos2.y += cx * normal.y + cy * binormal.y;\r\n\t\t\tpos2.z += cx * normal.z + cy * binormal.z;\r\n\r\n\t\t\tgrid[ i ][ j ] = vert( pos2.x, pos2.y, pos2.z );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\t// construct the mesh\r\n\r\n\tfor ( i = 0; i < segments; i ++ ) {\r\n\r\n\t\tfor ( j = 0; j < radialSegments; j ++ ) {\r\n\r\n\t\t\tip = ( closed ) ? ( i + 1 ) % segments : i + 1;\r\n\t\t\tjp = ( j + 1 ) % radialSegments;\r\n\r\n\t\t\ta = grid[ i ][ j ];\t\t// *** NOT NECESSARILY PLANAR ! ***\r\n\t\t\tb = grid[ ip ][ j ];\r\n\t\t\tc = grid[ ip ][ jp ];\r\n\t\t\td = grid[ i ][ jp ];\r\n\r\n\t\t\tuva = new THREE.Vector2( i / segments, j / radialSegments );\r\n\t\t\tuvb = new THREE.Vector2( ( i + 1 ) / segments, j / radialSegments );\r\n\t\t\tuvc = new THREE.Vector2( ( i + 1 ) / segments, ( j + 1 ) / radialSegments );\r\n\t\t\tuvd = new THREE.Vector2( i / segments, ( j + 1 ) / radialSegments );\r\n\r\n\t\t\tthis.faces.push( new THREE.Face3( a, b, d ) );\r\n\t\t\tthis.faceVertexUvs[ 0 ].push( [ uva, uvb, uvd ] );\r\n\r\n\t\t\tthis.faces.push( new THREE.Face3( b, c, d ) );\r\n\t\t\tthis.faceVertexUvs[ 0 ].push( [ uvb.clone(), uvc, uvd.clone() ] );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.computeFaceNormals();\r\n\tthis.computeVertexNormals();\r\n\r\n};\r\n\r\nTHREE.TubeGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\nTHREE.TubeGeometry.prototype.constructor = THREE.TubeGeometry;\r\n\r\nTHREE.TubeGeometry.NoTaper = function ( u ) {\r\n\r\n\treturn 1;\r\n\r\n};\r\n\r\nTHREE.TubeGeometry.SinusoidalTaper = function ( u ) {\r\n\r\n\treturn Math.sin( Math.PI * u );\r\n\r\n};\r\n\r\n// For computing of Frenet frames, exposing the tangents, normals and binormals the spline\r\nTHREE.TubeGeometry.FrenetFrames = function ( path, segments, closed ) {\r\n\r\n\tvar\tnormal = new THREE.Vector3(),\r\n\r\n\t\ttangents = [],\r\n\t\tnormals = [],\r\n\t\tbinormals = [],\r\n\r\n\t\tvec = new THREE.Vector3(),\r\n\t\tmat = new THREE.Matrix4(),\r\n\r\n\t\tnumpoints = segments + 1,\r\n\t\ttheta,\r\n\t\tsmallest,\r\n\r\n\t\ttx, ty, tz,\r\n\t\ti, u;\r\n\r\n\r\n\t// expose internals\r\n\tthis.tangents = tangents;\r\n\tthis.normals = normals;\r\n\tthis.binormals = binormals;\r\n\r\n\t// compute the tangent vectors for each segment on the path\r\n\r\n\tfor ( i = 0; i < numpoints; i ++ ) {\r\n\r\n\t\tu = i / ( numpoints - 1 );\r\n\r\n\t\ttangents[ i ] = path.getTangentAt( u );\r\n\t\ttangents[ i ].normalize();\r\n\r\n\t}\r\n\r\n\tinitialNormal3();\r\n\r\n\t/*\r\n\tfunction initialNormal1(lastBinormal) {\r\n\t\t// fixed start binormal. Has dangers of 0 vectors\r\n\t\tnormals[ 0 ] = new THREE.Vector3();\r\n\t\tbinormals[ 0 ] = new THREE.Vector3();\r\n\t\tif (lastBinormal===undefined) lastBinormal = new THREE.Vector3( 0, 0, 1 );\r\n\t\tnormals[ 0 ].crossVectors( lastBinormal, tangents[ 0 ] ).normalize();\r\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] ).normalize();\r\n\t}\r\n\r\n\tfunction initialNormal2() {\r\n\r\n\t\t// This uses the Frenet-Serret formula for deriving binormal\r\n\t\tvar t2 = path.getTangentAt( epsilon );\r\n\r\n\t\tnormals[ 0 ] = new THREE.Vector3().subVectors( t2, tangents[ 0 ] ).normalize();\r\n\t\tbinormals[ 0 ] = new THREE.Vector3().crossVectors( tangents[ 0 ], normals[ 0 ] );\r\n\r\n\t\tnormals[ 0 ].crossVectors( binormals[ 0 ], tangents[ 0 ] ).normalize(); // last binormal x tangent\r\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] ).normalize();\r\n\r\n\t}\r\n\t*/\r\n\r\n\tfunction initialNormal3() {\r\n\r\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\r\n\t\t// and in the direction of the smallest tangent xyz component\r\n\r\n\t\tnormals[ 0 ] = new THREE.Vector3();\r\n\t\tbinormals[ 0 ] = new THREE.Vector3();\r\n\t\tsmallest = Number.MAX_VALUE;\r\n\t\ttx = Math.abs( tangents[ 0 ].x );\r\n\t\tty = Math.abs( tangents[ 0 ].y );\r\n\t\ttz = Math.abs( tangents[ 0 ].z );\r\n\r\n\t\tif ( tx <= smallest ) {\r\n\r\n\t\t\tsmallest = tx;\r\n\t\t\tnormal.set( 1, 0, 0 );\r\n\r\n\t\t}\r\n\r\n\t\tif ( ty <= smallest ) {\r\n\r\n\t\t\tsmallest = ty;\r\n\t\t\tnormal.set( 0, 1, 0 );\r\n\r\n\t\t}\r\n\r\n\t\tif ( tz <= smallest ) {\r\n\r\n\t\t\tnormal.set( 0, 0, 1 );\r\n\r\n\t\t}\r\n\r\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\r\n\r\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\r\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\r\n\r\n\t}\r\n\r\n\r\n\t// compute the slowly-varying normal and binormal vectors for each segment on the path\r\n\r\n\tfor ( i = 1; i < numpoints; i ++ ) {\r\n\r\n\t\tnormals[ i ] = normals[ i - 1 ].clone();\r\n\r\n\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\r\n\r\n\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\r\n\r\n\t\tif ( vec.length() > Number.EPSILON ) {\r\n\r\n\t\t\tvec.normalize();\r\n\r\n\t\t\ttheta = Math.acos( THREE.Math.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\r\n\r\n\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\r\n\r\n\t\t}\r\n\r\n\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\r\n\r\n\t}\r\n\r\n\r\n\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\r\n\r\n\tif ( closed ) {\r\n\r\n\t\ttheta = Math.acos( THREE.Math.clamp( normals[ 0 ].dot( normals[ numpoints - 1 ] ), - 1, 1 ) );\r\n\t\ttheta /= ( numpoints - 1 );\r\n\r\n\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ numpoints - 1 ] ) ) > 0 ) {\r\n\r\n\t\t\ttheta = - theta;\r\n\r\n\t\t}\r\n\r\n\t\tfor ( i = 1; i < numpoints; i ++ ) {\r\n\r\n\t\t\t// twist a little...\r\n\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\r\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\n// File:src/extras/geometries/PolyhedronGeometry.js\r\n\r\n/**\r\n * @author clockworkgeek / https://github.com/clockworkgeek\r\n * @author timothypratley / https://github.com/timothypratley\r\n * @author WestLangley / http://github.com/WestLangley\r\n*/\r\n\r\nTHREE.PolyhedronGeometry = function ( vertices, indices, radius, detail ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'PolyhedronGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tvertices: vertices,\r\n\t\tindices: indices,\r\n\t\tradius: radius,\r\n\t\tdetail: detail\r\n\t};\r\n\r\n\tradius = radius || 1;\r\n\tdetail = detail || 0;\r\n\r\n\tvar that = this;\r\n\r\n\tfor ( var i = 0, l = vertices.length; i < l; i += 3 ) {\r\n\r\n\t\tprepare( new THREE.Vector3( vertices[ i ], vertices[ i + 1 ], vertices[ i + 2 ] ) );\r\n\r\n\t}\r\n\r\n\tvar p = this.vertices;\r\n\r\n\tvar faces = [];\r\n\r\n\tfor ( var i = 0, j = 0, l = indices.length; i < l; i += 3, j ++ ) {\r\n\r\n\t\tvar v1 = p[ indices[ i ] ];\r\n\t\tvar v2 = p[ indices[ i + 1 ] ];\r\n\t\tvar v3 = p[ indices[ i + 2 ] ];\r\n\r\n\t\tfaces[ j ] = new THREE.Face3( v1.index, v2.index, v3.index, [ v1.clone(), v2.clone(), v3.clone() ], undefined, j );\r\n\r\n\t}\r\n\r\n\tvar centroid = new THREE.Vector3();\r\n\r\n\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\r\n\r\n\t\tsubdivide( faces[ i ], detail );\r\n\r\n\t}\r\n\r\n\r\n\t// Handle case when face straddles the seam\r\n\r\n\tfor ( var i = 0, l = this.faceVertexUvs[ 0 ].length; i < l; i ++ ) {\r\n\r\n\t\tvar uvs = this.faceVertexUvs[ 0 ][ i ];\r\n\r\n\t\tvar x0 = uvs[ 0 ].x;\r\n\t\tvar x1 = uvs[ 1 ].x;\r\n\t\tvar x2 = uvs[ 2 ].x;\r\n\r\n\t\tvar max = Math.max( x0, x1, x2 );\r\n\t\tvar min = Math.min( x0, x1, x2 );\r\n\r\n\t\tif ( max > 0.9 && min < 0.1 ) {\r\n\r\n\t\t\t// 0.9 is somewhat arbitrary\r\n\r\n\t\t\tif ( x0 < 0.2 ) uvs[ 0 ].x += 1;\r\n\t\t\tif ( x1 < 0.2 ) uvs[ 1 ].x += 1;\r\n\t\t\tif ( x2 < 0.2 ) uvs[ 2 ].x += 1;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\t// Apply radius\r\n\r\n\tfor ( var i = 0, l = this.vertices.length; i < l; i ++ ) {\r\n\r\n\t\tthis.vertices[ i ].multiplyScalar( radius );\r\n\r\n\t}\r\n\r\n\r\n\t// Merge vertices\r\n\r\n\tthis.mergeVertices();\r\n\r\n\tthis.computeFaceNormals();\r\n\r\n\tthis.boundingSphere = new THREE.Sphere( new THREE.Vector3(), radius );\r\n\r\n\r\n\t// Project vector onto sphere's surface\r\n\r\n\tfunction prepare( vector ) {\r\n\r\n\t\tvar vertex = vector.normalize().clone();\r\n\t\tvertex.index = that.vertices.push( vertex ) - 1;\r\n\r\n\t\t// Texture coords are equivalent to map coords, calculate angle and convert to fraction of a circle.\r\n\r\n\t\tvar u = azimuth( vector ) / 2 / Math.PI + 0.5;\r\n\t\tvar v = inclination( vector ) / Math.PI + 0.5;\r\n\t\tvertex.uv = new THREE.Vector2( u, 1 - v );\r\n\r\n\t\treturn vertex;\r\n\r\n\t}\r\n\r\n\r\n\t// Approximate a curved face with recursively sub-divided triangles.\r\n\r\n\tfunction make( v1, v2, v3, materialIndex ) {\r\n\r\n\t\tvar face = new THREE.Face3( v1.index, v2.index, v3.index, [ v1.clone(), v2.clone(), v3.clone() ], undefined, materialIndex );\r\n\t\tthat.faces.push( face );\r\n\r\n\t\tcentroid.copy( v1 ).add( v2 ).add( v3 ).divideScalar( 3 );\r\n\r\n\t\tvar azi = azimuth( centroid );\r\n\r\n\t\tthat.faceVertexUvs[ 0 ].push( [\r\n\t\t\tcorrectUV( v1.uv, v1, azi ),\r\n\t\t\tcorrectUV( v2.uv, v2, azi ),\r\n\t\t\tcorrectUV( v3.uv, v3, azi )\r\n\t\t] );\r\n\r\n\t}\r\n\r\n\r\n\t// Analytically subdivide a face to the required detail level.\r\n\r\n\tfunction subdivide( face, detail ) {\r\n\r\n\t\tvar cols = Math.pow( 2, detail );\r\n\t\tvar a = prepare( that.vertices[ face.a ] );\r\n\t\tvar b = prepare( that.vertices[ face.b ] );\r\n\t\tvar c = prepare( that.vertices[ face.c ] );\r\n\t\tvar v = [];\r\n\r\n\t\tvar materialIndex = face.materialIndex;\r\n\r\n\t\t// Construct all of the vertices for this subdivision.\r\n\r\n\t\tfor ( var i = 0 ; i <= cols; i ++ ) {\r\n\r\n\t\t\tv[ i ] = [];\r\n\r\n\t\t\tvar aj = prepare( a.clone().lerp( c, i / cols ) );\r\n\t\t\tvar bj = prepare( b.clone().lerp( c, i / cols ) );\r\n\t\t\tvar rows = cols - i;\r\n\r\n\t\t\tfor ( var j = 0; j <= rows; j ++ ) {\r\n\r\n\t\t\t\tif ( j === 0 && i === cols ) {\r\n\r\n\t\t\t\t\tv[ i ][ j ] = aj;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tv[ i ][ j ] = prepare( aj.clone().lerp( bj, j / rows ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// Construct all of the faces.\r\n\r\n\t\tfor ( var i = 0; i < cols ; i ++ ) {\r\n\r\n\t\t\tfor ( var j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\r\n\r\n\t\t\t\tvar k = Math.floor( j / 2 );\r\n\r\n\t\t\t\tif ( j % 2 === 0 ) {\r\n\r\n\t\t\t\t\tmake(\r\n\t\t\t\t\t\tv[ i ][ k + 1 ],\r\n\t\t\t\t\t\tv[ i + 1 ][ k ],\r\n\t\t\t\t\t\tv[ i ][ k ],\r\n\t\t\t\t\t\tmaterialIndex\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tmake(\r\n\t\t\t\t\t\tv[ i ][ k + 1 ],\r\n\t\t\t\t\t\tv[ i + 1 ][ k + 1 ],\r\n\t\t\t\t\t\tv[ i + 1 ][ k ],\r\n\t\t\t\t\t\tmaterialIndex\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\t// Angle around the Y axis, counter-clockwise when looking from above.\r\n\r\n\tfunction azimuth( vector ) {\r\n\r\n\t\treturn Math.atan2( vector.z, - vector.x );\r\n\r\n\t}\r\n\r\n\r\n\t// Angle above the XZ plane.\r\n\r\n\tfunction inclination( vector ) {\r\n\r\n\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\r\n\r\n\t}\r\n\r\n\r\n\t// Texture fixing helper. Spheres have some odd behaviours.\r\n\r\n\tfunction correctUV( uv, vector, azimuth ) {\r\n\r\n\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) uv = new THREE.Vector2( uv.x - 1, uv.y );\r\n\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) uv = new THREE.Vector2( azimuth / 2 / Math.PI + 0.5, uv.y );\r\n\t\treturn uv.clone();\r\n\r\n\t}\r\n\r\n\r\n};\r\n\r\nTHREE.PolyhedronGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\nTHREE.PolyhedronGeometry.prototype.constructor = THREE.PolyhedronGeometry;\r\n\r\n// File:src/extras/geometries/DodecahedronGeometry.js\r\n\r\n/**\r\n * @author Abe Pazos / https://hamoid.com\r\n */\r\n\r\nTHREE.DodecahedronGeometry = function ( radius, detail ) {\r\n\r\n\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\r\n\tvar r = 1 / t;\r\n\r\n\tvar vertices = [\r\n\r\n\t\t// (±1, ±1, ±1)\r\n\t\t- 1, - 1, - 1, - 1, - 1, 1,\r\n\t\t- 1, 1, - 1, - 1, 1, 1,\r\n\t\t 1, - 1, - 1, 1, - 1, 1,\r\n\t\t 1, 1, - 1, 1, 1, 1,\r\n\r\n\t\t// (0, ±1/φ, ±φ)\r\n\t\t 0, - r, - t, 0, - r, t,\r\n\t\t 0, r, - t, 0, r, t,\r\n\r\n\t\t// (±1/φ, ±φ, 0)\r\n\t\t- r, - t, 0, - r, t, 0,\r\n\t\t r, - t, 0, r, t, 0,\r\n\r\n\t\t// (±φ, 0, ±1/φ)\r\n\t\t- t, 0, - r, t, 0, - r,\r\n\t\t- t, 0, r, t, 0, r\r\n\t];\r\n\r\n\tvar indices = [\r\n\t\t 3, 11, 7, 3, 7, 15, 3, 15, 13,\r\n\t\t 7, 19, 17, 7, 17, 6, 7, 6, 15,\r\n\t\t17, 4, 8, 17, 8, 10, 17, 10, 6,\r\n\t\t 8, 0, 16, 8, 16, 2, 8, 2, 10,\r\n\t\t 0, 12, 1, 0, 1, 18, 0, 18, 16,\r\n\t\t 6, 10, 2, 6, 2, 13, 6, 13, 15,\r\n\t\t 2, 16, 18, 2, 18, 3, 2, 3, 13,\r\n\t\t18, 1, 9, 18, 9, 11, 18, 11, 3,\r\n\t\t 4, 14, 12, 4, 12, 0, 4, 0, 8,\r\n\t\t11, 9, 5, 11, 5, 19, 11, 19, 7,\r\n\t\t19, 5, 14, 19, 14, 4, 19, 4, 17,\r\n\t\t 1, 12, 14, 1, 14, 5, 1, 5, 9\r\n\t];\r\n\r\n\tTHREE.PolyhedronGeometry.call( this, vertices, indices, radius, detail );\r\n\r\n\tthis.type = 'DodecahedronGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\tdetail: detail\r\n\t};\r\n\r\n};\r\n\r\nTHREE.DodecahedronGeometry.prototype = Object.create( THREE.PolyhedronGeometry.prototype );\r\nTHREE.DodecahedronGeometry.prototype.constructor = THREE.DodecahedronGeometry;\r\n\r\n// File:src/extras/geometries/IcosahedronGeometry.js\r\n\r\n/**\r\n * @author timothypratley / https://github.com/timothypratley\r\n */\r\n\r\nTHREE.IcosahedronGeometry = function ( radius, detail ) {\r\n\r\n\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\r\n\r\n\tvar vertices = [\r\n\t\t- 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, 0,\r\n\t\t 0, - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t,\r\n\t\t t, 0, - 1, t, 0, 1, - t, 0, - 1, - t, 0, 1\r\n\t];\r\n\r\n\tvar indices = [\r\n\t\t 0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11,\r\n\t\t 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8,\r\n\t\t 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9,\r\n\t\t 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1\r\n\t];\r\n\r\n\tTHREE.PolyhedronGeometry.call( this, vertices, indices, radius, detail );\r\n\r\n\tthis.type = 'IcosahedronGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\tdetail: detail\r\n\t};\r\n\r\n};\r\n\r\nTHREE.IcosahedronGeometry.prototype = Object.create( THREE.PolyhedronGeometry.prototype );\r\nTHREE.IcosahedronGeometry.prototype.constructor = THREE.IcosahedronGeometry;\r\n\r\n// File:src/extras/geometries/OctahedronGeometry.js\r\n\r\n/**\r\n * @author timothypratley / https://github.com/timothypratley\r\n */\r\n\r\nTHREE.OctahedronGeometry = function ( radius, detail ) {\r\n\r\n\tvar vertices = [\r\n\t\t1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, - 1\r\n\t];\r\n\r\n\tvar indices = [\r\n\t\t0, 2, 4, 0, 4, 3, 0, 3, 5, 0, 5, 2, 1, 2, 5, 1, 5, 3, 1, 3, 4, 1, 4, 2\r\n\t];\r\n\r\n\tTHREE.PolyhedronGeometry.call( this, vertices, indices, radius, detail );\r\n\r\n\tthis.type = 'OctahedronGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\tdetail: detail\r\n\t};\r\n\r\n};\r\n\r\nTHREE.OctahedronGeometry.prototype = Object.create( THREE.PolyhedronGeometry.prototype );\r\nTHREE.OctahedronGeometry.prototype.constructor = THREE.OctahedronGeometry;\r\n\r\n// File:src/extras/geometries/TetrahedronGeometry.js\r\n\r\n/**\r\n * @author timothypratley / https://github.com/timothypratley\r\n */\r\n\r\nTHREE.TetrahedronGeometry = function ( radius, detail ) {\r\n\r\n\tvar vertices = [\r\n\t\t 1, 1, 1, - 1, - 1, 1, - 1, 1, - 1, 1, - 1, - 1\r\n\t];\r\n\r\n\tvar indices = [\r\n\t\t 2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1\r\n\t];\r\n\r\n\tTHREE.PolyhedronGeometry.call( this, vertices, indices, radius, detail );\r\n\r\n\tthis.type = 'TetrahedronGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tradius: radius,\r\n\t\tdetail: detail\r\n\t};\r\n\r\n};\r\n\r\nTHREE.TetrahedronGeometry.prototype = Object.create( THREE.PolyhedronGeometry.prototype );\r\nTHREE.TetrahedronGeometry.prototype.constructor = THREE.TetrahedronGeometry;\r\n\r\n// File:src/extras/geometries/ParametricGeometry.js\r\n\r\n/**\r\n * @author zz85 / https://github.com/zz85\r\n * Parametric Surfaces Geometry\r\n * based on the brilliant article by @prideout http://prideout.net/blog/?p=44\r\n *\r\n * new THREE.ParametricGeometry( parametricFunction, uSegments, ySegements );\r\n *\r\n */\r\n\r\nTHREE.ParametricGeometry = function ( func, slices, stacks ) {\r\n\r\n\tTHREE.Geometry.call( this );\r\n\r\n\tthis.type = 'ParametricGeometry';\r\n\r\n\tthis.parameters = {\r\n\t\tfunc: func,\r\n\t\tslices: slices,\r\n\t\tstacks: stacks\r\n\t};\r\n\r\n\tvar verts = this.vertices;\r\n\tvar faces = this.faces;\r\n\tvar uvs = this.faceVertexUvs[ 0 ];\r\n\r\n\tvar i, j, p;\r\n\tvar u, v;\r\n\r\n\tvar sliceCount = slices + 1;\r\n\r\n\tfor ( i = 0; i <= stacks; i ++ ) {\r\n\r\n\t\tv = i / stacks;\r\n\r\n\t\tfor ( j = 0; j <= slices; j ++ ) {\r\n\r\n\t\t\tu = j / slices;\r\n\r\n\t\t\tp = func( u, v );\r\n\t\t\tverts.push( p );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tvar a, b, c, d;\r\n\tvar uva, uvb, uvc, uvd;\r\n\r\n\tfor ( i = 0; i < stacks; i ++ ) {\r\n\r\n\t\tfor ( j = 0; j < slices; j ++ ) {\r\n\r\n\t\t\ta = i * sliceCount + j;\r\n\t\t\tb = i * sliceCount + j + 1;\r\n\t\t\tc = ( i + 1 ) * sliceCount + j + 1;\r\n\t\t\td = ( i + 1 ) * sliceCount + j;\r\n\r\n\t\t\tuva = new THREE.Vector2( j / slices, i / stacks );\r\n\t\t\tuvb = new THREE.Vector2( ( j + 1 ) / slices, i / stacks );\r\n\t\t\tuvc = new THREE.Vector2( ( j + 1 ) / slices, ( i + 1 ) / stacks );\r\n\t\t\tuvd = new THREE.Vector2( j / slices, ( i + 1 ) / stacks );\r\n\r\n\t\t\tfaces.push( new THREE.Face3( a, b, d ) );\r\n\t\t\tuvs.push( [ uva, uvb, uvd ] );\r\n\r\n\t\t\tfaces.push( new THREE.Face3( b, c, d ) );\r\n\t\t\tuvs.push( [ uvb.clone(), uvc, uvd.clone() ] );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// console.log(this);\r\n\r\n\t// magic bullet\r\n\t// var diff = this.mergeVertices();\r\n\t// console.log('removed ', diff, ' vertices by merging');\r\n\r\n\tthis.computeFaceNormals();\r\n\tthis.computeVertexNormals();\r\n\r\n};\r\n\r\nTHREE.ParametricGeometry.prototype = Object.create( THREE.Geometry.prototype );\r\nTHREE.ParametricGeometry.prototype.constructor = THREE.ParametricGeometry;\r\n\r\n// File:src/extras/geometries/WireframeGeometry.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.WireframeGeometry = function ( geometry ) {\r\n\r\n\tTHREE.BufferGeometry.call( this );\r\n\r\n\tvar edge = [ 0, 0 ], hash = {};\r\n\r\n\tfunction sortFunction( a, b ) {\r\n\r\n\t\treturn a - b;\r\n\r\n\t}\r\n\r\n\tvar keys = [ 'a', 'b', 'c' ];\r\n\r\n\tif ( geometry instanceof THREE.Geometry ) {\r\n\r\n\t\tvar vertices = geometry.vertices;\r\n\t\tvar faces = geometry.faces;\r\n\t\tvar numEdges = 0;\r\n\r\n\t\t// allocate maximal size\r\n\t\tvar edges = new Uint32Array( 6 * faces.length );\r\n\r\n\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar face = faces[ i ];\r\n\r\n\t\t\tfor ( var j = 0; j < 3; j ++ ) {\r\n\r\n\t\t\t\tedge[ 0 ] = face[ keys[ j ] ];\r\n\t\t\t\tedge[ 1 ] = face[ keys[ ( j + 1 ) % 3 ] ];\r\n\t\t\t\tedge.sort( sortFunction );\r\n\r\n\t\t\t\tvar key = edge.toString();\r\n\r\n\t\t\t\tif ( hash[ key ] === undefined ) {\r\n\r\n\t\t\t\t\tedges[ 2 * numEdges ] = edge[ 0 ];\r\n\t\t\t\t\tedges[ 2 * numEdges + 1 ] = edge[ 1 ];\r\n\t\t\t\t\thash[ key ] = true;\r\n\t\t\t\t\tnumEdges ++;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar coords = new Float32Array( numEdges * 2 * 3 );\r\n\r\n\t\tfor ( var i = 0, l = numEdges; i < l; i ++ ) {\r\n\r\n\t\t\tfor ( var j = 0; j < 2; j ++ ) {\r\n\r\n\t\t\t\tvar vertex = vertices[ edges [ 2 * i + j ] ];\r\n\r\n\t\t\t\tvar index = 6 * i + 3 * j;\r\n\t\t\t\tcoords[ index + 0 ] = vertex.x;\r\n\t\t\t\tcoords[ index + 1 ] = vertex.y;\r\n\t\t\t\tcoords[ index + 2 ] = vertex.z;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthis.addAttribute( 'position', new THREE.BufferAttribute( coords, 3 ) );\r\n\r\n\t} else if ( geometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\tif ( geometry.index !== null ) {\r\n\r\n\t\t\t// Indexed BufferGeometry\r\n\r\n\t\t\tvar indices = geometry.index.array;\r\n\t\t\tvar vertices = geometry.attributes.position;\r\n\t\t\tvar groups = geometry.groups;\r\n\t\t\tvar numEdges = 0;\r\n\r\n\t\t\tif ( groups.length === 0 ) {\r\n\r\n\t\t\t\tgeometry.addGroup( 0, indices.length );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// allocate maximal size\r\n\t\t\tvar edges = new Uint32Array( 2 * indices.length );\r\n\r\n\t\t\tfor ( var o = 0, ol = groups.length; o < ol; ++ o ) {\r\n\r\n\t\t\t\tvar group = groups[ o ];\r\n\r\n\t\t\t\tvar start = group.start;\r\n\t\t\t\tvar count = group.count;\r\n\r\n\t\t\t\tfor ( var i = start, il = start + count; i < il; i += 3 ) {\r\n\r\n\t\t\t\t\tfor ( var j = 0; j < 3; j ++ ) {\r\n\r\n\t\t\t\t\t\tedge[ 0 ] = indices[ i + j ];\r\n\t\t\t\t\t\tedge[ 1 ] = indices[ i + ( j + 1 ) % 3 ];\r\n\t\t\t\t\t\tedge.sort( sortFunction );\r\n\r\n\t\t\t\t\t\tvar key = edge.toString();\r\n\r\n\t\t\t\t\t\tif ( hash[ key ] === undefined ) {\r\n\r\n\t\t\t\t\t\t\tedges[ 2 * numEdges ] = edge[ 0 ];\r\n\t\t\t\t\t\t\tedges[ 2 * numEdges + 1 ] = edge[ 1 ];\r\n\t\t\t\t\t\t\thash[ key ] = true;\r\n\t\t\t\t\t\t\tnumEdges ++;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar coords = new Float32Array( numEdges * 2 * 3 );\r\n\r\n\t\t\tfor ( var i = 0, l = numEdges; i < l; i ++ ) {\r\n\r\n\t\t\t\tfor ( var j = 0; j < 2; j ++ ) {\r\n\r\n\t\t\t\t\tvar index = 6 * i + 3 * j;\r\n\t\t\t\t\tvar index2 = edges[ 2 * i + j ];\r\n\r\n\t\t\t\t\tcoords[ index + 0 ] = vertices.getX( index2 );\r\n\t\t\t\t\tcoords[ index + 1 ] = vertices.getY( index2 );\r\n\t\t\t\t\tcoords[ index + 2 ] = vertices.getZ( index2 );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.addAttribute( 'position', new THREE.BufferAttribute( coords, 3 ) );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// non-indexed BufferGeometry\r\n\r\n\t\t\tvar vertices = geometry.attributes.position.array;\r\n\t\t\tvar numEdges = vertices.length / 3;\r\n\t\t\tvar numTris = numEdges / 3;\r\n\r\n\t\t\tvar coords = new Float32Array( numEdges * 2 * 3 );\r\n\r\n\t\t\tfor ( var i = 0, l = numTris; i < l; i ++ ) {\r\n\r\n\t\t\t\tfor ( var j = 0; j < 3; j ++ ) {\r\n\r\n\t\t\t\t\tvar index = 18 * i + 6 * j;\r\n\r\n\t\t\t\t\tvar index1 = 9 * i + 3 * j;\r\n\t\t\t\t\tcoords[ index + 0 ] = vertices[ index1 ];\r\n\t\t\t\t\tcoords[ index + 1 ] = vertices[ index1 + 1 ];\r\n\t\t\t\t\tcoords[ index + 2 ] = vertices[ index1 + 2 ];\r\n\r\n\t\t\t\t\tvar index2 = 9 * i + 3 * ( ( j + 1 ) % 3 );\r\n\t\t\t\t\tcoords[ index + 3 ] = vertices[ index2 ];\r\n\t\t\t\t\tcoords[ index + 4 ] = vertices[ index2 + 1 ];\r\n\t\t\t\t\tcoords[ index + 5 ] = vertices[ index2 + 2 ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.addAttribute( 'position', new THREE.BufferAttribute( coords, 3 ) );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.WireframeGeometry.prototype = Object.create( THREE.BufferGeometry.prototype );\r\nTHREE.WireframeGeometry.prototype.constructor = THREE.WireframeGeometry;\r\n\r\n// File:src/extras/helpers/AxisHelper.js\r\n\r\n/**\r\n * @author sroucheray / http://sroucheray.org/\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.AxisHelper = function ( size ) {\r\n\r\n\tsize = size || 1;\r\n\r\n\tvar vertices = new Float32Array( [\r\n\t\t0, 0, 0, size, 0, 0,\r\n\t\t0, 0, 0, 0, size, 0,\r\n\t\t0, 0, 0, 0, 0, size\r\n\t] );\r\n\r\n\tvar colors = new Float32Array( [\r\n\t\t1, 0, 0, 1, 0.6, 0,\r\n\t\t0, 1, 0, 0.6, 1, 0,\r\n\t\t0, 0, 1, 0, 0.6, 1\r\n\t] );\r\n\r\n\tvar geometry = new THREE.BufferGeometry();\r\n\tgeometry.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );\r\n\tgeometry.addAttribute( 'color', new THREE.BufferAttribute( colors, 3 ) );\r\n\r\n\tvar material = new THREE.LineBasicMaterial( { vertexColors: THREE.VertexColors } );\r\n\r\n\tTHREE.LineSegments.call( this, geometry, material );\r\n\r\n};\r\n\r\nTHREE.AxisHelper.prototype = Object.create( THREE.LineSegments.prototype );\r\nTHREE.AxisHelper.prototype.constructor = THREE.AxisHelper;\r\n\r\n// File:src/extras/helpers/ArrowHelper.js\r\n\r\n/**\r\n * @author WestLangley / http://github.com/WestLangley\r\n * @author zz85 / http://github.com/zz85\r\n * @author bhouston / http://clara.io\r\n *\r\n * Creates an arrow for visualizing directions\r\n *\r\n * Parameters:\r\n * dir - Vector3\r\n * origin - Vector3\r\n * length - Number\r\n * color - color in hex value\r\n * headLength - Number\r\n * headWidth - Number\r\n */\r\n\r\nTHREE.ArrowHelper = ( function () {\r\n\r\n\tvar lineGeometry = new THREE.BufferGeometry();\r\n\tlineGeometry.addAttribute( 'position', new THREE.Float32Attribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\r\n\r\n\tvar coneGeometry = new THREE.CylinderBufferGeometry( 0, 0.5, 1, 5, 1 );\r\n\tconeGeometry.translate( 0, - 0.5, 0 );\r\n\r\n\treturn function ArrowHelper( dir, origin, length, color, headLength, headWidth ) {\r\n\r\n\t\t// dir is assumed to be normalized\r\n\r\n\t\tTHREE.Object3D.call( this );\r\n\r\n\t\tif ( color === undefined ) color = 0xffff00;\r\n\t\tif ( length === undefined ) length = 1;\r\n\t\tif ( headLength === undefined ) headLength = 0.2 * length;\r\n\t\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\r\n\r\n\t\tthis.position.copy( origin );\r\n\r\n\t\tthis.line = new THREE.Line( lineGeometry, new THREE.LineBasicMaterial( { color: color } ) );\r\n\t\tthis.line.matrixAutoUpdate = false;\r\n\t\tthis.add( this.line );\r\n\r\n\t\tthis.cone = new THREE.Mesh( coneGeometry, new THREE.MeshBasicMaterial( { color: color } ) );\r\n\t\tthis.cone.matrixAutoUpdate = false;\r\n\t\tthis.add( this.cone );\r\n\r\n\t\tthis.setDirection( dir );\r\n\t\tthis.setLength( length, headLength, headWidth );\r\n\r\n\t};\r\n\r\n}() );\r\n\r\nTHREE.ArrowHelper.prototype = Object.create( THREE.Object3D.prototype );\r\nTHREE.ArrowHelper.prototype.constructor = THREE.ArrowHelper;\r\n\r\nTHREE.ArrowHelper.prototype.setDirection = ( function () {\r\n\r\n\tvar axis = new THREE.Vector3();\r\n\tvar radians;\r\n\r\n\treturn function setDirection( dir ) {\r\n\r\n\t\t// dir is assumed to be normalized\r\n\r\n\t\tif ( dir.y > 0.99999 ) {\r\n\r\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\r\n\r\n\t\t} else if ( dir.y < - 0.99999 ) {\r\n\r\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\r\n\r\n\t\t} else {\r\n\r\n\t\t\taxis.set( dir.z, 0, - dir.x ).normalize();\r\n\r\n\t\t\tradians = Math.acos( dir.y );\r\n\r\n\t\t\tthis.quaternion.setFromAxisAngle( axis, radians );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n}() );\r\n\r\nTHREE.ArrowHelper.prototype.setLength = function ( length, headLength, headWidth ) {\r\n\r\n\tif ( headLength === undefined ) headLength = 0.2 * length;\r\n\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\r\n\r\n\tthis.line.scale.set( 1, Math.max( 0, length - headLength ), 1 );\r\n\tthis.line.updateMatrix();\r\n\r\n\tthis.cone.scale.set( headWidth, headLength, headWidth );\r\n\tthis.cone.position.y = length;\r\n\tthis.cone.updateMatrix();\r\n\r\n};\r\n\r\nTHREE.ArrowHelper.prototype.setColor = function ( color ) {\r\n\r\n\tthis.line.material.color.copy( color );\r\n\tthis.cone.material.color.copy( color );\r\n\r\n};\r\n\r\n// File:src/extras/helpers/BoxHelper.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.BoxHelper = function ( object ) {\r\n\r\n\tvar 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 ] );\r\n\tvar positions = new Float32Array( 8 * 3 );\r\n\r\n\tvar geometry = new THREE.BufferGeometry();\r\n\tgeometry.setIndex( new THREE.BufferAttribute( indices, 1 ) );\r\n\tgeometry.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );\r\n\r\n\tTHREE.LineSegments.call( this, geometry, new THREE.LineBasicMaterial( { color: 0xffff00 } ) );\r\n\r\n\tif ( object !== undefined ) {\r\n\r\n\t\tthis.update( object );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.BoxHelper.prototype = Object.create( THREE.LineSegments.prototype );\r\nTHREE.BoxHelper.prototype.constructor = THREE.BoxHelper;\r\n\r\nTHREE.BoxHelper.prototype.update = ( function () {\r\n\r\n\tvar box = new THREE.Box3();\r\n\r\n\treturn function ( object ) {\r\n\r\n\t\tif ( object instanceof THREE.Box3 ) {\r\n\r\n\t\t\tbox.copy( object );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tbox.setFromObject( object );\r\n\r\n\t\t}\r\n\r\n\t\tif ( box.isEmpty() ) return;\r\n\r\n\t\tvar min = box.min;\r\n\t\tvar max = box.max;\r\n\r\n\t\t/*\r\n\t\t 5____4\r\n\t\t1/___0/|\r\n\t\t| 6__|_7\r\n\t\t2/___3/\r\n\r\n\t\t0: max.x, max.y, max.z\r\n\t\t1: min.x, max.y, max.z\r\n\t\t2: min.x, min.y, max.z\r\n\t\t3: max.x, min.y, max.z\r\n\t\t4: max.x, max.y, min.z\r\n\t\t5: min.x, max.y, min.z\r\n\t\t6: min.x, min.y, min.z\r\n\t\t7: max.x, min.y, min.z\r\n\t\t*/\r\n\r\n\t\tvar position = this.geometry.attributes.position;\r\n\t\tvar array = position.array;\r\n\r\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\r\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\r\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\r\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\r\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\r\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\r\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\r\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\r\n\r\n\t\tposition.needsUpdate = true;\r\n\r\n\t\tthis.geometry.computeBoundingSphere();\r\n\r\n\t};\r\n\r\n} )();\r\n\r\n// File:src/extras/helpers/BoundingBoxHelper.js\r\n\r\n/**\r\n * @author WestLangley / http://github.com/WestLangley\r\n */\r\n\r\n// a helper to show the world-axis-aligned bounding box for an object\r\n\r\nTHREE.BoundingBoxHelper = function ( object, hex ) {\r\n\r\n\tvar color = ( hex !== undefined ) ? hex : 0x888888;\r\n\r\n\tthis.object = object;\r\n\r\n\tthis.box = new THREE.Box3();\r\n\r\n\tTHREE.Mesh.call( this, new THREE.BoxGeometry( 1, 1, 1 ), new THREE.MeshBasicMaterial( { color: color, wireframe: true } ) );\r\n\r\n};\r\n\r\nTHREE.BoundingBoxHelper.prototype = Object.create( THREE.Mesh.prototype );\r\nTHREE.BoundingBoxHelper.prototype.constructor = THREE.BoundingBoxHelper;\r\n\r\nTHREE.BoundingBoxHelper.prototype.update = function () {\r\n\r\n\tthis.box.setFromObject( this.object );\r\n\r\n\tthis.box.size( this.scale );\r\n\r\n\tthis.box.center( this.position );\r\n\r\n};\r\n\r\n// File:src/extras/helpers/CameraHelper.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n *\r\n *\t- shows frustum, line of sight and up of the camera\r\n *\t- suitable for fast updates\r\n * \t- based on frustum visualization in lightgl.js shadowmap example\r\n *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\r\n */\r\n\r\nTHREE.CameraHelper = function ( camera ) {\r\n\r\n\tvar geometry = new THREE.Geometry();\r\n\tvar material = new THREE.LineBasicMaterial( { color: 0xffffff, vertexColors: THREE.FaceColors } );\r\n\r\n\tvar pointMap = {};\r\n\r\n\t// colors\r\n\r\n\tvar hexFrustum = 0xffaa00;\r\n\tvar hexCone = 0xff0000;\r\n\tvar hexUp = 0x00aaff;\r\n\tvar hexTarget = 0xffffff;\r\n\tvar hexCross = 0x333333;\r\n\r\n\t// near\r\n\r\n\taddLine( \"n1\", \"n2\", hexFrustum );\r\n\taddLine( \"n2\", \"n4\", hexFrustum );\r\n\taddLine( \"n4\", \"n3\", hexFrustum );\r\n\taddLine( \"n3\", \"n1\", hexFrustum );\r\n\r\n\t// far\r\n\r\n\taddLine( \"f1\", \"f2\", hexFrustum );\r\n\taddLine( \"f2\", \"f4\", hexFrustum );\r\n\taddLine( \"f4\", \"f3\", hexFrustum );\r\n\taddLine( \"f3\", \"f1\", hexFrustum );\r\n\r\n\t// sides\r\n\r\n\taddLine( \"n1\", \"f1\", hexFrustum );\r\n\taddLine( \"n2\", \"f2\", hexFrustum );\r\n\taddLine( \"n3\", \"f3\", hexFrustum );\r\n\taddLine( \"n4\", \"f4\", hexFrustum );\r\n\r\n\t// cone\r\n\r\n\taddLine( \"p\", \"n1\", hexCone );\r\n\taddLine( \"p\", \"n2\", hexCone );\r\n\taddLine( \"p\", \"n3\", hexCone );\r\n\taddLine( \"p\", \"n4\", hexCone );\r\n\r\n\t// up\r\n\r\n\taddLine( \"u1\", \"u2\", hexUp );\r\n\taddLine( \"u2\", \"u3\", hexUp );\r\n\taddLine( \"u3\", \"u1\", hexUp );\r\n\r\n\t// target\r\n\r\n\taddLine( \"c\", \"t\", hexTarget );\r\n\taddLine( \"p\", \"c\", hexCross );\r\n\r\n\t// cross\r\n\r\n\taddLine( \"cn1\", \"cn2\", hexCross );\r\n\taddLine( \"cn3\", \"cn4\", hexCross );\r\n\r\n\taddLine( \"cf1\", \"cf2\", hexCross );\r\n\taddLine( \"cf3\", \"cf4\", hexCross );\r\n\r\n\tfunction addLine( a, b, hex ) {\r\n\r\n\t\taddPoint( a, hex );\r\n\t\taddPoint( b, hex );\r\n\r\n\t}\r\n\r\n\tfunction addPoint( id, hex ) {\r\n\r\n\t\tgeometry.vertices.push( new THREE.Vector3() );\r\n\t\tgeometry.colors.push( new THREE.Color( hex ) );\r\n\r\n\t\tif ( pointMap[ id ] === undefined ) {\r\n\r\n\t\t\tpointMap[ id ] = [];\r\n\r\n\t\t}\r\n\r\n\t\tpointMap[ id ].push( geometry.vertices.length - 1 );\r\n\r\n\t}\r\n\r\n\tTHREE.LineSegments.call( this, geometry, material );\r\n\r\n\tthis.camera = camera;\r\n\tthis.camera.updateProjectionMatrix();\r\n\r\n\tthis.matrix = camera.matrixWorld;\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n\tthis.pointMap = pointMap;\r\n\r\n\tthis.update();\r\n\r\n};\r\n\r\nTHREE.CameraHelper.prototype = Object.create( THREE.LineSegments.prototype );\r\nTHREE.CameraHelper.prototype.constructor = THREE.CameraHelper;\r\n\r\nTHREE.CameraHelper.prototype.update = function () {\r\n\r\n\tvar geometry, pointMap;\r\n\r\n\tvar vector = new THREE.Vector3();\r\n\tvar camera = new THREE.Camera();\r\n\r\n\tfunction setPoint( point, x, y, z ) {\r\n\r\n\t\tvector.set( x, y, z ).unproject( camera );\r\n\r\n\t\tvar points = pointMap[ point ];\r\n\r\n\t\tif ( points !== undefined ) {\r\n\r\n\t\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\r\n\r\n\t\t\t\tgeometry.vertices[ points[ i ] ].copy( vector );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\treturn function () {\r\n\r\n\t\tgeometry = this.geometry;\r\n\t\tpointMap = this.pointMap;\r\n\r\n\t\tvar w = 1, h = 1;\r\n\r\n\t\t// we need just camera projection matrix\r\n\t\t// world matrix must be identity\r\n\r\n\t\tcamera.projectionMatrix.copy( this.camera.projectionMatrix );\r\n\r\n\t\t// center / target\r\n\r\n\t\tsetPoint( \"c\", 0, 0, - 1 );\r\n\t\tsetPoint( \"t\", 0, 0, 1 );\r\n\r\n\t\t// near\r\n\r\n\t\tsetPoint( \"n1\", - w, - h, - 1 );\r\n\t\tsetPoint( \"n2\", w, - h, - 1 );\r\n\t\tsetPoint( \"n3\", - w, h, - 1 );\r\n\t\tsetPoint( \"n4\", w, h, - 1 );\r\n\r\n\t\t// far\r\n\r\n\t\tsetPoint( \"f1\", - w, - h, 1 );\r\n\t\tsetPoint( \"f2\", w, - h, 1 );\r\n\t\tsetPoint( \"f3\", - w, h, 1 );\r\n\t\tsetPoint( \"f4\", w, h, 1 );\r\n\r\n\t\t// up\r\n\r\n\t\tsetPoint( \"u1\", w * 0.7, h * 1.1, - 1 );\r\n\t\tsetPoint( \"u2\", - w * 0.7, h * 1.1, - 1 );\r\n\t\tsetPoint( \"u3\", 0, h * 2, - 1 );\r\n\r\n\t\t// cross\r\n\r\n\t\tsetPoint( \"cf1\", - w, 0, 1 );\r\n\t\tsetPoint( \"cf2\", w, 0, 1 );\r\n\t\tsetPoint( \"cf3\", 0, - h, 1 );\r\n\t\tsetPoint( \"cf4\", 0, h, 1 );\r\n\r\n\t\tsetPoint( \"cn1\", - w, 0, - 1 );\r\n\t\tsetPoint( \"cn2\", w, 0, - 1 );\r\n\t\tsetPoint( \"cn3\", 0, - h, - 1 );\r\n\t\tsetPoint( \"cn4\", 0, h, - 1 );\r\n\r\n\t\tgeometry.verticesNeedUpdate = true;\r\n\r\n\t};\r\n\r\n}();\r\n\r\n// File:src/extras/helpers/DirectionalLightHelper.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n */\r\n\r\nTHREE.DirectionalLightHelper = function ( light, size ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.light = light;\r\n\tthis.light.updateMatrixWorld();\r\n\r\n\tthis.matrix = light.matrixWorld;\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n\tif ( size === undefined ) size = 1;\r\n\r\n\tvar geometry = new THREE.BufferGeometry();\r\n\tgeometry.addAttribute( 'position', new THREE.Float32Attribute( [\r\n\t\t- size, size, 0,\r\n\t\t size, size, 0,\r\n\t\t size, - size, 0,\r\n\t\t- size, - size, 0,\r\n\t\t- size, size, 0\r\n\t], 3 ) );\r\n\r\n\tvar material = new THREE.LineBasicMaterial( { fog: false } );\r\n\r\n\tthis.add( new THREE.Line( geometry, material ) );\r\n\r\n\tgeometry = new THREE.BufferGeometry();\r\n\tgeometry.addAttribute( 'position', new THREE.Float32Attribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\r\n\r\n\tthis.add( new THREE.Line( geometry, material ));\r\n\r\n\tthis.update();\r\n\r\n};\r\n\r\nTHREE.DirectionalLightHelper.prototype = Object.create( THREE.Object3D.prototype );\r\nTHREE.DirectionalLightHelper.prototype.constructor = THREE.DirectionalLightHelper;\r\n\r\nTHREE.DirectionalLightHelper.prototype.dispose = function () {\r\n\r\n\tvar lightPlane = this.children[ 0 ];\r\n\tvar targetLine = this.children[ 1 ];\r\n\r\n\tlightPlane.geometry.dispose();\r\n\tlightPlane.material.dispose();\r\n\ttargetLine.geometry.dispose();\r\n\ttargetLine.material.dispose();\r\n\r\n};\r\n\r\nTHREE.DirectionalLightHelper.prototype.update = function () {\r\n\r\n\tvar v1 = new THREE.Vector3();\r\n\tvar v2 = new THREE.Vector3();\r\n\tvar v3 = new THREE.Vector3();\r\n\r\n\treturn function () {\r\n\r\n\t\tv1.setFromMatrixPosition( this.light.matrixWorld );\r\n\t\tv2.setFromMatrixPosition( this.light.target.matrixWorld );\r\n\t\tv3.subVectors( v2, v1 );\r\n\r\n\t\tvar lightPlane = this.children[ 0 ];\r\n\t\tvar targetLine = this.children[ 1 ];\r\n\r\n\t\tlightPlane.lookAt( v3 );\r\n\t\tlightPlane.material.color.copy( this.light.color ).multiplyScalar( this.light.intensity );\r\n\r\n\t\ttargetLine.lookAt( v3 );\r\n\t\ttargetLine.scale.z = v3.length();\r\n\r\n\t};\r\n\r\n}();\r\n\r\n// File:src/extras/helpers/EdgesHelper.js\r\n\r\n/**\r\n * @author WestLangley / http://github.com/WestLangley\r\n * @param object THREE.Mesh whose geometry will be used\r\n * @param hex line color\r\n * @param thresholdAngle the minimum angle (in degrees),\r\n * between the face normals of adjacent faces,\r\n * that is required to render an edge. A value of 10 means\r\n * an edge is only rendered if the angle is at least 10 degrees.\r\n */\r\n\r\nTHREE.EdgesHelper = function ( object, hex, thresholdAngle ) {\r\n\r\n\tvar color = ( hex !== undefined ) ? hex : 0xffffff;\r\n\r\n\tTHREE.LineSegments.call( this, new THREE.EdgesGeometry( object.geometry, thresholdAngle ), new THREE.LineBasicMaterial( { color: color } ) );\r\n\r\n\tthis.matrix = object.matrixWorld;\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n};\r\n\r\nTHREE.EdgesHelper.prototype = Object.create( THREE.LineSegments.prototype );\r\nTHREE.EdgesHelper.prototype.constructor = THREE.EdgesHelper;\r\n\r\n// File:src/extras/helpers/FaceNormalsHelper.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n*/\r\n\r\nTHREE.FaceNormalsHelper = function ( object, size, hex, linewidth ) {\r\n\r\n\t// FaceNormalsHelper only supports THREE.Geometry\r\n\r\n\tthis.object = object;\r\n\r\n\tthis.size = ( size !== undefined ) ? size : 1;\r\n\r\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\r\n\r\n\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\r\n\r\n\t//\r\n\r\n\tvar nNormals = 0;\r\n\r\n\tvar objGeometry = this.object.geometry;\r\n\r\n\tif ( objGeometry instanceof THREE.Geometry ) {\r\n\r\n\t\tnNormals = objGeometry.faces.length;\r\n\r\n\t} else {\r\n\r\n\t\tconsole.warn( 'THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.' );\r\n\r\n\t}\r\n\r\n\t//\r\n\r\n\tvar geometry = new THREE.BufferGeometry();\r\n\r\n\tvar positions = new THREE.Float32Attribute( nNormals * 2 * 3, 3 );\r\n\r\n\tgeometry.addAttribute( 'position', positions );\r\n\r\n\tTHREE.LineSegments.call( this, geometry, new THREE.LineBasicMaterial( { color: color, linewidth: width } ) );\r\n\r\n\t//\r\n\r\n\tthis.matrixAutoUpdate = false;\r\n\tthis.update();\r\n\r\n};\r\n\r\nTHREE.FaceNormalsHelper.prototype = Object.create( THREE.LineSegments.prototype );\r\nTHREE.FaceNormalsHelper.prototype.constructor = THREE.FaceNormalsHelper;\r\n\r\nTHREE.FaceNormalsHelper.prototype.update = ( function () {\r\n\r\n\tvar v1 = new THREE.Vector3();\r\n\tvar v2 = new THREE.Vector3();\r\n\tvar normalMatrix = new THREE.Matrix3();\r\n\r\n\treturn function update() {\r\n\r\n\t\tthis.object.updateMatrixWorld( true );\r\n\r\n\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\r\n\r\n\t\tvar matrixWorld = this.object.matrixWorld;\r\n\r\n\t\tvar position = this.geometry.attributes.position;\r\n\r\n\t\t//\r\n\r\n\t\tvar objGeometry = this.object.geometry;\r\n\r\n\t\tvar vertices = objGeometry.vertices;\r\n\r\n\t\tvar faces = objGeometry.faces;\r\n\r\n\t\tvar idx = 0;\r\n\r\n\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\r\n\r\n\t\t\tvar face = faces[ i ];\r\n\r\n\t\t\tvar normal = face.normal;\r\n\r\n\t\t\tv1.copy( vertices[ face.a ] )\r\n\t\t\t\t.add( vertices[ face.b ] )\r\n\t\t\t\t.add( vertices[ face.c ] )\r\n\t\t\t\t.divideScalar( 3 )\r\n\t\t\t\t.applyMatrix4( matrixWorld );\r\n\r\n\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\r\n\r\n\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\r\n\r\n\t\t\tidx = idx + 1;\r\n\r\n\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\r\n\r\n\t\t\tidx = idx + 1;\r\n\r\n\t\t}\r\n\r\n\t\tposition.needsUpdate = true;\r\n\r\n\t\treturn this;\r\n\r\n\t};\r\n\r\n}() );\r\n\r\n// File:src/extras/helpers/GridHelper.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.GridHelper = function ( size, step, color1, color2 ) {\r\n\r\n\tcolor1 = new THREE.Color( color1 !== undefined ? color1 : 0x444444 );\r\n\tcolor2 = new THREE.Color( color2 !== undefined ? color2 : 0x888888 );\r\n\r\n\tvar vertices = [];\r\n\tvar colors = [];\r\n\r\n\tfor ( var i = - size, j = 0; i <= size; i += step ) {\r\n\r\n\t\tvertices.push( - size, 0, i, size, 0, i );\r\n\t\tvertices.push( i, 0, - size, i, 0, size );\r\n\r\n\t\tvar color = i === 0 ? color1 : color2;\r\n\r\n\t\tcolor.toArray( colors, j ); j += 3;\r\n\t\tcolor.toArray( colors, j ); j += 3;\r\n\t\tcolor.toArray( colors, j ); j += 3;\r\n\t\tcolor.toArray( colors, j ); j += 3;\r\n\r\n\t}\r\n\r\n\tvar geometry = new THREE.BufferGeometry();\r\n\tgeometry.addAttribute( 'position', new THREE.Float32Attribute( vertices, 3 ) );\r\n\tgeometry.addAttribute( 'color', new THREE.Float32Attribute( colors, 3 ) );\r\n\r\n\tvar material = new THREE.LineBasicMaterial( { vertexColors: THREE.VertexColors } );\r\n\r\n\tTHREE.LineSegments.call( this, geometry, material );\r\n\r\n};\r\n\r\nTHREE.GridHelper.prototype = Object.create( THREE.LineSegments.prototype );\r\nTHREE.GridHelper.prototype.constructor = THREE.GridHelper;\r\n\r\nTHREE.GridHelper.prototype.setColors = function () {\r\n\r\n\tconsole.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' );\r\n\r\n};\r\n\r\n// File:src/extras/helpers/HemisphereLightHelper.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.HemisphereLightHelper = function ( light, sphereSize ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.light = light;\r\n\tthis.light.updateMatrixWorld();\r\n\r\n\tthis.matrix = light.matrixWorld;\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n\tthis.colors = [ new THREE.Color(), new THREE.Color() ];\r\n\r\n\tvar geometry = new THREE.SphereGeometry( sphereSize, 4, 2 );\r\n\tgeometry.rotateX( - Math.PI / 2 );\r\n\r\n\tfor ( var i = 0, il = 8; i < il; i ++ ) {\r\n\r\n\t\tgeometry.faces[ i ].color = this.colors[ i < 4 ? 0 : 1 ];\r\n\r\n\t}\r\n\r\n\tvar material = new THREE.MeshBasicMaterial( { vertexColors: THREE.FaceColors, wireframe: true } );\r\n\r\n\tthis.lightSphere = new THREE.Mesh( geometry, material );\r\n\tthis.add( this.lightSphere );\r\n\r\n\tthis.update();\r\n\r\n};\r\n\r\nTHREE.HemisphereLightHelper.prototype = Object.create( THREE.Object3D.prototype );\r\nTHREE.HemisphereLightHelper.prototype.constructor = THREE.HemisphereLightHelper;\r\n\r\nTHREE.HemisphereLightHelper.prototype.dispose = function () {\r\n\r\n\tthis.lightSphere.geometry.dispose();\r\n\tthis.lightSphere.material.dispose();\r\n\r\n};\r\n\r\nTHREE.HemisphereLightHelper.prototype.update = function () {\r\n\r\n\tvar vector = new THREE.Vector3();\r\n\r\n\treturn function () {\r\n\r\n\t\tthis.colors[ 0 ].copy( this.light.color ).multiplyScalar( this.light.intensity );\r\n\t\tthis.colors[ 1 ].copy( this.light.groundColor ).multiplyScalar( this.light.intensity );\r\n\r\n\t\tthis.lightSphere.lookAt( vector.setFromMatrixPosition( this.light.matrixWorld ).negate() );\r\n\t\tthis.lightSphere.geometry.colorsNeedUpdate = true;\r\n\r\n\t};\r\n\r\n}();\r\n\r\n// File:src/extras/helpers/PointLightHelper.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.PointLightHelper = function ( light, sphereSize ) {\r\n\r\n\tthis.light = light;\r\n\tthis.light.updateMatrixWorld();\r\n\r\n\tvar geometry = new THREE.SphereBufferGeometry( sphereSize, 4, 2 );\r\n\tvar material = new THREE.MeshBasicMaterial( { wireframe: true, fog: false } );\r\n\tmaterial.color.copy( this.light.color ).multiplyScalar( this.light.intensity );\r\n\r\n\tTHREE.Mesh.call( this, geometry, material );\r\n\r\n\tthis.matrix = this.light.matrixWorld;\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n\t/*\r\n\tvar distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );\r\n\tvar distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\r\n\r\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\r\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\r\n\r\n\tvar d = light.distance;\r\n\r\n\tif ( d === 0.0 ) {\r\n\r\n\t\tthis.lightDistance.visible = false;\r\n\r\n\t} else {\r\n\r\n\t\tthis.lightDistance.scale.set( d, d, d );\r\n\r\n\t}\r\n\r\n\tthis.add( this.lightDistance );\r\n\t*/\r\n\r\n};\r\n\r\nTHREE.PointLightHelper.prototype = Object.create( THREE.Mesh.prototype );\r\nTHREE.PointLightHelper.prototype.constructor = THREE.PointLightHelper;\r\n\r\nTHREE.PointLightHelper.prototype.dispose = function () {\r\n\r\n\tthis.geometry.dispose();\r\n\tthis.material.dispose();\r\n\r\n};\r\n\r\nTHREE.PointLightHelper.prototype.update = function () {\r\n\r\n\tthis.material.color.copy( this.light.color ).multiplyScalar( this.light.intensity );\r\n\r\n\t/*\r\n\tvar d = this.light.distance;\r\n\r\n\tif ( d === 0.0 ) {\r\n\r\n\t\tthis.lightDistance.visible = false;\r\n\r\n\t} else {\r\n\r\n\t\tthis.lightDistance.visible = true;\r\n\t\tthis.lightDistance.scale.set( d, d, d );\r\n\r\n\t}\r\n\t*/\r\n\r\n};\r\n\r\n// File:src/extras/helpers/SkeletonHelper.js\r\n\r\n/**\r\n * @author Sean Griffin / http://twitter.com/sgrif\r\n * @author Michael Guerrero / http://realitymeltdown.com\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author ikerr / http://verold.com\r\n */\r\n\r\nTHREE.SkeletonHelper = function ( object ) {\r\n\r\n\tthis.bones = this.getBoneList( object );\r\n\r\n\tvar geometry = new THREE.Geometry();\r\n\r\n\tfor ( var i = 0; i < this.bones.length; i ++ ) {\r\n\r\n\t\tvar bone = this.bones[ i ];\r\n\r\n\t\tif ( bone.parent instanceof THREE.Bone ) {\r\n\r\n\t\t\tgeometry.vertices.push( new THREE.Vector3() );\r\n\t\t\tgeometry.vertices.push( new THREE.Vector3() );\r\n\t\t\tgeometry.colors.push( new THREE.Color( 0, 0, 1 ) );\r\n\t\t\tgeometry.colors.push( new THREE.Color( 0, 1, 0 ) );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tgeometry.dynamic = true;\r\n\r\n\tvar material = new THREE.LineBasicMaterial( { vertexColors: THREE.VertexColors, depthTest: false, depthWrite: false, transparent: true } );\r\n\r\n\tTHREE.LineSegments.call( this, geometry, material );\r\n\r\n\tthis.root = object;\r\n\r\n\tthis.matrix = object.matrixWorld;\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n\tthis.update();\r\n\r\n};\r\n\r\n\r\nTHREE.SkeletonHelper.prototype = Object.create( THREE.LineSegments.prototype );\r\nTHREE.SkeletonHelper.prototype.constructor = THREE.SkeletonHelper;\r\n\r\nTHREE.SkeletonHelper.prototype.getBoneList = function( object ) {\r\n\r\n\tvar boneList = [];\r\n\r\n\tif ( object instanceof THREE.Bone ) {\r\n\r\n\t\tboneList.push( object );\r\n\r\n\t}\r\n\r\n\tfor ( var i = 0; i < object.children.length; i ++ ) {\r\n\r\n\t\tboneList.push.apply( boneList, this.getBoneList( object.children[ i ] ) );\r\n\r\n\t}\r\n\r\n\treturn boneList;\r\n\r\n};\r\n\r\nTHREE.SkeletonHelper.prototype.update = function () {\r\n\r\n\tvar geometry = this.geometry;\r\n\r\n\tvar matrixWorldInv = new THREE.Matrix4().getInverse( this.root.matrixWorld );\r\n\r\n\tvar boneMatrix = new THREE.Matrix4();\r\n\r\n\tvar j = 0;\r\n\r\n\tfor ( var i = 0; i < this.bones.length; i ++ ) {\r\n\r\n\t\tvar bone = this.bones[ i ];\r\n\r\n\t\tif ( bone.parent instanceof THREE.Bone ) {\r\n\r\n\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.matrixWorld );\r\n\t\t\tgeometry.vertices[ j ].setFromMatrixPosition( boneMatrix );\r\n\r\n\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.parent.matrixWorld );\r\n\t\t\tgeometry.vertices[ j + 1 ].setFromMatrixPosition( boneMatrix );\r\n\r\n\t\t\tj += 2;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tgeometry.verticesNeedUpdate = true;\r\n\r\n\tgeometry.computeBoundingSphere();\r\n\r\n};\r\n\r\n// File:src/extras/helpers/SpotLightHelper.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n*/\r\n\r\nTHREE.SpotLightHelper = function ( light ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.light = light;\r\n\tthis.light.updateMatrixWorld();\r\n\r\n\tthis.matrix = light.matrixWorld;\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n\tvar geometry = new THREE.BufferGeometry();\r\n\r\n\tvar positions = [\r\n\t\t0, 0, 0, 0, 0, 1,\r\n\t\t0, 0, 0, 1, 0, 1,\r\n\t\t0, 0, 0, - 1, 0, 1,\r\n\t\t0, 0, 0, 0, 1, 1,\r\n\t\t0, 0, 0, 0, - 1, 1\r\n\t];\r\n\r\n\tfor ( var i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\r\n\r\n\t\tvar p1 = ( i / l ) * Math.PI * 2;\r\n\t\tvar p2 = ( j / l ) * Math.PI * 2;\r\n\r\n\t\tpositions.push(\r\n\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\r\n\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\r\n\t\t);\r\n\r\n\t}\r\n\r\n\tgeometry.addAttribute( 'position', new THREE.Float32Attribute( positions, 3 ) );\r\n\r\n\tvar material = new THREE.LineBasicMaterial( { fog: false } );\r\n\r\n\tthis.cone = new THREE.LineSegments( geometry, material );\r\n\tthis.add( this.cone );\r\n\r\n\tthis.update();\r\n\r\n};\r\n\r\nTHREE.SpotLightHelper.prototype = Object.create( THREE.Object3D.prototype );\r\nTHREE.SpotLightHelper.prototype.constructor = THREE.SpotLightHelper;\r\n\r\nTHREE.SpotLightHelper.prototype.dispose = function () {\r\n\r\n\tthis.cone.geometry.dispose();\r\n\tthis.cone.material.dispose();\r\n\r\n};\r\n\r\nTHREE.SpotLightHelper.prototype.update = function () {\r\n\r\n\tvar vector = new THREE.Vector3();\r\n\tvar vector2 = new THREE.Vector3();\r\n\r\n\treturn function () {\r\n\r\n\t\tvar coneLength = this.light.distance ? this.light.distance : 1000;\r\n\t\tvar coneWidth = coneLength * Math.tan( this.light.angle );\r\n\r\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\r\n\r\n\t\tvector.setFromMatrixPosition( this.light.matrixWorld );\r\n\t\tvector2.setFromMatrixPosition( this.light.target.matrixWorld );\r\n\r\n\t\tthis.cone.lookAt( vector2.sub( vector ) );\r\n\r\n\t\tthis.cone.material.color.copy( this.light.color ).multiplyScalar( this.light.intensity );\r\n\r\n\t};\r\n\r\n}();\r\n\r\n// File:src/extras/helpers/VertexNormalsHelper.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n*/\r\n\r\nTHREE.VertexNormalsHelper = function ( object, size, hex, linewidth ) {\r\n\r\n\tthis.object = object;\r\n\r\n\tthis.size = ( size !== undefined ) ? size : 1;\r\n\r\n\tvar color = ( hex !== undefined ) ? hex : 0xff0000;\r\n\r\n\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\r\n\r\n\t//\r\n\r\n\tvar nNormals = 0;\r\n\r\n\tvar objGeometry = this.object.geometry;\r\n\r\n\tif ( objGeometry instanceof THREE.Geometry ) {\r\n\r\n\t\tnNormals = objGeometry.faces.length * 3;\r\n\r\n\t} else if ( objGeometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\tnNormals = objGeometry.attributes.normal.count;\r\n\r\n\t}\r\n\r\n\t//\r\n\r\n\tvar geometry = new THREE.BufferGeometry();\r\n\r\n\tvar positions = new THREE.Float32Attribute( nNormals * 2 * 3, 3 );\r\n\r\n\tgeometry.addAttribute( 'position', positions );\r\n\r\n\tTHREE.LineSegments.call( this, geometry, new THREE.LineBasicMaterial( { color: color, linewidth: width } ) );\r\n\r\n\t//\r\n\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n\tthis.update();\r\n\r\n};\r\n\r\nTHREE.VertexNormalsHelper.prototype = Object.create( THREE.LineSegments.prototype );\r\nTHREE.VertexNormalsHelper.prototype.constructor = THREE.VertexNormalsHelper;\r\n\r\nTHREE.VertexNormalsHelper.prototype.update = ( function () {\r\n\r\n\tvar v1 = new THREE.Vector3();\r\n\tvar v2 = new THREE.Vector3();\r\n\tvar normalMatrix = new THREE.Matrix3();\r\n\r\n\treturn function update() {\r\n\r\n\t\tvar keys = [ 'a', 'b', 'c' ];\r\n\r\n\t\tthis.object.updateMatrixWorld( true );\r\n\r\n\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\r\n\r\n\t\tvar matrixWorld = this.object.matrixWorld;\r\n\r\n\t\tvar position = this.geometry.attributes.position;\r\n\r\n\t\t//\r\n\r\n\t\tvar objGeometry = this.object.geometry;\r\n\r\n\t\tif ( objGeometry instanceof THREE.Geometry ) {\r\n\r\n\t\t\tvar vertices = objGeometry.vertices;\r\n\r\n\t\t\tvar faces = objGeometry.faces;\r\n\r\n\t\t\tvar idx = 0;\r\n\r\n\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\r\n\r\n\t\t\t\tvar face = faces[ i ];\r\n\r\n\t\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\r\n\r\n\t\t\t\t\tvar vertex = vertices[ face[ keys[ j ] ] ];\r\n\r\n\t\t\t\t\tvar normal = face.vertexNormals[ j ];\r\n\r\n\t\t\t\t\tv1.copy( vertex ).applyMatrix4( matrixWorld );\r\n\r\n\t\t\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\r\n\r\n\t\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\r\n\r\n\t\t\t\t\tidx = idx + 1;\r\n\r\n\t\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\r\n\r\n\t\t\t\t\tidx = idx + 1;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( objGeometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\t\tvar objPos = objGeometry.attributes.position;\r\n\r\n\t\t\tvar objNorm = objGeometry.attributes.normal;\r\n\r\n\t\t\tvar idx = 0;\r\n\r\n\t\t\t// for simplicity, ignore index and drawcalls, and render every normal\r\n\r\n\t\t\tfor ( var j = 0, jl = objPos.count; j < jl; j ++ ) {\r\n\r\n\t\t\t\tv1.set( objPos.getX( j ), objPos.getY( j ), objPos.getZ( j ) ).applyMatrix4( matrixWorld );\r\n\r\n\t\t\t\tv2.set( objNorm.getX( j ), objNorm.getY( j ), objNorm.getZ( j ) );\r\n\r\n\t\t\t\tv2.applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\r\n\r\n\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\r\n\r\n\t\t\t\tidx = idx + 1;\r\n\r\n\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\r\n\r\n\t\t\t\tidx = idx + 1;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tposition.needsUpdate = true;\r\n\r\n\t\treturn this;\r\n\r\n\t};\r\n\r\n}() );\r\n\r\n// File:src/extras/helpers/WireframeHelper.js\r\n\r\n/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nTHREE.WireframeHelper = function ( object, hex ) {\r\n\r\n\tvar color = ( hex !== undefined ) ? hex : 0xffffff;\r\n\r\n\tTHREE.LineSegments.call( this, new THREE.WireframeGeometry( object.geometry ), new THREE.LineBasicMaterial( { color: color } ) );\r\n\r\n\tthis.matrix = object.matrixWorld;\r\n\tthis.matrixAutoUpdate = false;\r\n\r\n};\r\n\r\nTHREE.WireframeHelper.prototype = Object.create( THREE.LineSegments.prototype );\r\nTHREE.WireframeHelper.prototype.constructor = THREE.WireframeHelper;\r\n\r\n// File:src/extras/objects/ImmediateRenderObject.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.ImmediateRenderObject = function ( material ) {\r\n\r\n\tTHREE.Object3D.call( this );\r\n\r\n\tthis.material = material;\r\n\tthis.render = function ( renderCallback ) {};\r\n\r\n};\r\n\r\nTHREE.ImmediateRenderObject.prototype = Object.create( THREE.Object3D.prototype );\r\nTHREE.ImmediateRenderObject.prototype.constructor = THREE.ImmediateRenderObject;\r\n\r\n// File:src/extras/objects/MorphBlendMesh.js\r\n\r\n/**\r\n * @author alteredq / http://alteredqualia.com/\r\n */\r\n\r\nTHREE.MorphBlendMesh = function( geometry, material ) {\r\n\r\n\tTHREE.Mesh.call( this, geometry, material );\r\n\r\n\tthis.animationsMap = {};\r\n\tthis.animationsList = [];\r\n\r\n\t// prepare default animation\r\n\t// (all frames played together in 1 second)\r\n\r\n\tvar numFrames = this.geometry.morphTargets.length;\r\n\r\n\tvar name = \"__default\";\r\n\r\n\tvar startFrame = 0;\r\n\tvar endFrame = numFrames - 1;\r\n\r\n\tvar fps = numFrames / 1;\r\n\r\n\tthis.createAnimation( name, startFrame, endFrame, fps );\r\n\tthis.setAnimationWeight( name, 1 );\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype = Object.create( THREE.Mesh.prototype );\r\nTHREE.MorphBlendMesh.prototype.constructor = THREE.MorphBlendMesh;\r\n\r\nTHREE.MorphBlendMesh.prototype.createAnimation = function ( name, start, end, fps ) {\r\n\r\n\tvar animation = {\r\n\r\n\t\tstart: start,\r\n\t\tend: end,\r\n\r\n\t\tlength: end - start + 1,\r\n\r\n\t\tfps: fps,\r\n\t\tduration: ( end - start ) / fps,\r\n\r\n\t\tlastFrame: 0,\r\n\t\tcurrentFrame: 0,\r\n\r\n\t\tactive: false,\r\n\r\n\t\ttime: 0,\r\n\t\tdirection: 1,\r\n\t\tweight: 1,\r\n\r\n\t\tdirectionBackwards: false,\r\n\t\tmirroredLoop: false\r\n\r\n\t};\r\n\r\n\tthis.animationsMap[ name ] = animation;\r\n\tthis.animationsList.push( animation );\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.autoCreateAnimations = function ( fps ) {\r\n\r\n\tvar pattern = /([a-z]+)_?(\\d+)/i;\r\n\r\n\tvar firstAnimation, frameRanges = {};\r\n\r\n\tvar geometry = this.geometry;\r\n\r\n\tfor ( var i = 0, il = geometry.morphTargets.length; i < il; i ++ ) {\r\n\r\n\t\tvar morph = geometry.morphTargets[ i ];\r\n\t\tvar chunks = morph.name.match( pattern );\r\n\r\n\t\tif ( chunks && chunks.length > 1 ) {\r\n\r\n\t\t\tvar name = chunks[ 1 ];\r\n\r\n\t\t\tif ( ! frameRanges[ name ] ) frameRanges[ name ] = { start: Infinity, end: - Infinity };\r\n\r\n\t\t\tvar range = frameRanges[ name ];\r\n\r\n\t\t\tif ( i < range.start ) range.start = i;\r\n\t\t\tif ( i > range.end ) range.end = i;\r\n\r\n\t\t\tif ( ! firstAnimation ) firstAnimation = name;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfor ( var name in frameRanges ) {\r\n\r\n\t\tvar range = frameRanges[ name ];\r\n\t\tthis.createAnimation( name, range.start, range.end, fps );\r\n\r\n\t}\r\n\r\n\tthis.firstAnimation = firstAnimation;\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.setAnimationDirectionForward = function ( name ) {\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tanimation.direction = 1;\r\n\t\tanimation.directionBackwards = false;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.setAnimationDirectionBackward = function ( name ) {\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tanimation.direction = - 1;\r\n\t\tanimation.directionBackwards = true;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.setAnimationFPS = function ( name, fps ) {\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tanimation.fps = fps;\r\n\t\tanimation.duration = ( animation.end - animation.start ) / animation.fps;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.setAnimationDuration = function ( name, duration ) {\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tanimation.duration = duration;\r\n\t\tanimation.fps = ( animation.end - animation.start ) / animation.duration;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.setAnimationWeight = function ( name, weight ) {\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tanimation.weight = weight;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.setAnimationTime = function ( name, time ) {\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tanimation.time = time;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.getAnimationTime = function ( name ) {\r\n\r\n\tvar time = 0;\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\ttime = animation.time;\r\n\r\n\t}\r\n\r\n\treturn time;\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.getAnimationDuration = function ( name ) {\r\n\r\n\tvar duration = - 1;\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tduration = animation.duration;\r\n\r\n\t}\r\n\r\n\treturn duration;\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.playAnimation = function ( name ) {\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tanimation.time = 0;\r\n\t\tanimation.active = true;\r\n\r\n\t} else {\r\n\r\n\t\tconsole.warn( \"THREE.MorphBlendMesh: animation[\" + name + \"] undefined in .playAnimation()\" );\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.stopAnimation = function ( name ) {\r\n\r\n\tvar animation = this.animationsMap[ name ];\r\n\r\n\tif ( animation ) {\r\n\r\n\t\tanimation.active = false;\r\n\r\n\t}\r\n\r\n};\r\n\r\nTHREE.MorphBlendMesh.prototype.update = function ( delta ) {\r\n\r\n\tfor ( var i = 0, il = this.animationsList.length; i < il; i ++ ) {\r\n\r\n\t\tvar animation = this.animationsList[ i ];\r\n\r\n\t\tif ( ! animation.active ) continue;\r\n\r\n\t\tvar frameTime = animation.duration / animation.length;\r\n\r\n\t\tanimation.time += animation.direction * delta;\r\n\r\n\t\tif ( animation.mirroredLoop ) {\r\n\r\n\t\t\tif ( animation.time > animation.duration || animation.time < 0 ) {\r\n\r\n\t\t\t\tanimation.direction *= - 1;\r\n\r\n\t\t\t\tif ( animation.time > animation.duration ) {\r\n\r\n\t\t\t\t\tanimation.time = animation.duration;\r\n\t\t\t\t\tanimation.directionBackwards = true;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( animation.time < 0 ) {\r\n\r\n\t\t\t\t\tanimation.time = 0;\r\n\t\t\t\t\tanimation.directionBackwards = false;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\r\n\t\t\tanimation.time = animation.time % animation.duration;\r\n\r\n\t\t\tif ( animation.time < 0 ) animation.time += animation.duration;\r\n\r\n\t\t}\r\n\r\n\t\tvar keyframe = animation.start + THREE.Math.clamp( Math.floor( animation.time / frameTime ), 0, animation.length - 1 );\r\n\t\tvar weight = animation.weight;\r\n\r\n\t\tif ( keyframe !== animation.currentFrame ) {\r\n\r\n\t\t\tthis.morphTargetInfluences[ animation.lastFrame ] = 0;\r\n\t\t\tthis.morphTargetInfluences[ animation.currentFrame ] = 1 * weight;\r\n\r\n\t\t\tthis.morphTargetInfluences[ keyframe ] = 0;\r\n\r\n\t\t\tanimation.lastFrame = animation.currentFrame;\r\n\t\t\tanimation.currentFrame = keyframe;\r\n\r\n\t\t}\r\n\r\n\t\tvar mix = ( animation.time % frameTime ) / frameTime;\r\n\r\n\t\tif ( animation.directionBackwards ) mix = 1 - mix;\r\n\r\n\t\tif ( animation.currentFrame !== animation.lastFrame ) {\r\n\r\n\t\t\tthis.morphTargetInfluences[ animation.currentFrame ] = mix * weight;\r\n\t\t\tthis.morphTargetInfluences[ animation.lastFrame ] = ( 1 - mix ) * weight;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.morphTargetInfluences[ animation.currentFrame ] = weight;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\n\r\n// Export the THREE object for **Node.js**, with\r\n// backwards-compatibility for the old `require()` API. If we're in\r\n// the browser, add `_` as a global object via a string identifier,\r\n// for Closure Compiler \"advanced\" mode.\r\nif (typeof exports !== 'undefined') {\r\n if (typeof module !== 'undefined' && module.exports) {\r\n exports = module.exports = THREE;\r\n }\r\n exports.THREE = THREE;\r\n} else {\r\n this['THREE'] = THREE;\r\n}\r\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var map = {\n\t\"./quotations.svg\": \"./src/images/quotations.svg\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src/images sync recursive \\\\.(gif|png|jpe?g|svg)$\";","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iODM5cHgiIGhlaWdodD0iNjI0cHgiIHZpZXdCb3g9IjAgMCA4MzkgNjI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPHRpdGxlPuKAnDwvdGl0bGU+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iVGVzdGltb25pYWxzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwgLTMyLjAwMDAwMCkiPgogICAgICAgICAgICA8cGF0aCBkPSJNMzkzLDMzIEwyODUuNjksMjkxLjQzNjYyIEMzNDAuNDQsMzI4LjY2OTAxNCAzNjYuNzIsMzg3LjgwMjgxNyAzNjYuNzIsNDQ5LjEyNjc2MSBDMzY2LjcyLDU2OS41ODQ1MDcgMjc5LjEyLDY1NSAxNTguNjcsNjU1IEM1MS4zNiw2NTUgLTQ1LDU4Mi43MjUzNTIgLTQ1LDQ1MS4zMTY5MDEgQy00NSwzODkuOTkyOTU4IC0yMy4xLDMzNy40Mjk1NzcgOS43NSwyODkuMjQ2NDc5IEwxODcuMTQsMzMgTDM5MywzMyBaIE04MzgsMzMgTDczMC42OSwyOTEuNDM2NjIgQzc4NS40NCwzMjguNjY5MDE0IDgxMS43MiwzODcuODAyODE3IDgxMS43Miw0NDkuMTI2NzYxIEM4MTEuNzIsNTY5LjU4NDUwNyA3MjQuMTIsNjU1IDYwMy42Nyw2NTUgQzQ5Ni4zNiw2NTUgNDAwLDU4Mi43MjUzNTIgNDAwLDQ1MS4zMTY5MDEgQzQwMCwzODkuOTkyOTU4IDQyMS45LDMzNy40Mjk1NzcgNDU0Ljc1LDI4OS4yNDY0NzkgTDYzMi4xNCwzMyBMODM4LDMzIFoiIGlkPSLigJwiIHN0cm9rZT0iI0ZGRkZGRiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=\"","/*** IMPORTS FROM imports-loader ***/\nvar define = false;\n\n// Importing fullpage.js\n// import fullpage from 'fullpage.js';\n// When using fullPage extensions replace the previous import\n// of fullpage.js for this file\n// require('src:vendors/fullpage.js/fullpage.parallax.min.js');\n// require('src:vendors/fullpage.js/fullpage.scrollOverflowReset.min.js');\nimport parallax from 'src:vendors/fullpage.js/fullpage.parallax.min.js';\nimport scrolloverflowreset from 'src:vendors/fullpage.js/fullpage.scrollOverflowReset.min.js';\nimport scrolloverflow from 'fullpage.js/vendors/scrolloverflow.min';\nimport fullpage from 'fullpage.js/dist/fullpage.extensions.min';\n\n(function ($, window, document, undefined) {\n $(document).ready(function () {\n // Prepare fullPage elements\n var target = '#main-content.main-content--is-front';\n $(target)\n .children().addClass('section')\n .find('.node__poster').addClass('fp-bg');\n // Add slide navigation to testimonials paragraphs\n $(target).find('.paragraph--testimonials').each(function () {\n var group = $(this),\n group_anchor = group.data('anchor'),\n quote = group.find('.paragraph--testimonial'),\n group_menu = $('
      ');\n quote.each(function (i) {\n var item = $(this),\n item_anchor = item.data('anchor'),\n item_tooltip = item.data('tooltip'),\n count = i + 1,\n button = $(''),\n item_list = $('
    • ');\n button.on('click', function () {\n fullPageInstance.moveTo(group_anchor, i);\n });\n item.addClass('slide fp-auto-height');\n item_list.append(button)\n group_menu.append(item_list);\n });\n group.find('.paragraph__content').append(group_menu);\n });\n // Initialize the fullPage\n var fullPageInstance = new fullpage(target, {\n licenseKey: 'B1FCE685-71184ABB-ADAA9075-9F7E499E',\n controlArrows: false,\n easingcss3: 'ease-out',\n fixedElements: '.footer',\n loopHorizontal: false,\n navigation: true,\n parallax: true,\n parallaxOptions: {\n type: 'cover',\n percentage: 100,\n property: 'translate'\n },\n parallaxKey: 'c3F1YXJlMzYwLmNvbV82WVVjR0Z5WVd4c1lYZz0wcFU=',\n scrollOverflowResetKey: 'c3F1YXJlMzYwLmNvbV81NTNjMk55YjJ4c1QzWmxjbVpzYjNkU1pYTmxkQT09cHpB',\n scrollOverflowReset: true,\n scrollOverflow: true,\n // slidesNavigation: true,\n // licenseKey: '([\\\\d\\\\w]{8}-){3}[\\\\d\\\\w]{8}|^(?=.*?[A-Y])(?=.*?[a-y])(?=.*?[0-8])(?=.*?[#?!@$%^&*-]).{8,}$',\n\n onLeave: function (origin, destination, direction) {\n var leavingSection = this,\n destinationClasses = destination.item.className;\n // change the data-black-background based on slide context\n if (~destinationClasses.indexOf(\"paragraph--white-background\") || ~destinationClasses.indexOf(\"paragraph--yellow-background\")) {\n $('body').attr('data-black-background', 'false');\n } else {\n $('body').attr('data-black-background', 'true');\n }\n // show the destination images\n $(destination.item).find('img').addClass('js--media-in');\n // hide the origin images\n $(origin.item).find('img').removeClass('js--media-in');\n },\n afterLoad: function (origin, destination, direction) {\n //\n },\n afterSlideLoad: function (section, origin, destination, direction) {\n $('.paragraph--testimonials[data-anchor=' + section.anchor + '] button').removeClass('active');\n $('.paragraph--testimonials[data-anchor=' + section.anchor + '] button[data-slide=' + destination.index + ']').addClass('active');\n }\n });\n });\n})(jQuery, window, document);\n","/*** IMPORTS FROM imports-loader ***/\nvar define = false;\n\n// Importing threejs.js\n\n// import THREE from 'three';\nglobal.THREE = require('three');\nglobal.GPUParticleSystem = require('src:vendors/GPUParticleSystem.js');\n// import gpuparticlesystem from 'src:vendors/GPUParticleSystem.js';\n\n(function ($, window, document, undefined) {\n $(document).ready(function () {\n // Prepare fullPage elements\n var camera,\n tick = 0,\n scene,\n renderer,\n clock = new THREE.Clock(true),\n container,\n options,\n options2,\n spawnerOptions,\n particleSystem,\n particleSystem2;\n\n function init() {\n\n var winSize = getWindowSize();\n container = $('#background-animation');\n\n camera = new THREE.PerspectiveCamera(28,\n winSize.aspect * 0.2,\n 1,\n 10000);\n camera.position.z = 100;\n\n scene = new THREE.Scene();\n\n // The GPU Particle system extends THREE.Object3D, and so you can use it\n // as you would any other scene graph component. Particle positions will be\n // relative to the position of the particle system, but you will probably only need one\n // system for your whole scene\n particleSystem = new THREE.GPUParticleSystem({\n maxParticles: 25000\n });\n particleSystem2 = new THREE.GPUParticleSystem({\n maxParticles: 250000\n });\n scene.add(particleSystem);\n scene.add(particleSystem2);\n\n // options passed during each spawned\n options = {\n position: new THREE.Vector3(),\n positionRandomness: 10,\n velocity: new THREE.Vector3(),\n velocityRandomness: 15,\n color: 0x292b2d,\n colorRandomness: 0,\n turbulence: 30,\n lifetime: 10,\n size: 1,\n sizeRandomness: 0,\n smoothPosition: false\n };\n options2 = {\n position: new THREE.Vector3(),\n positionRandomness: 3,\n velocity: new THREE.Vector3(),\n velocityRandomness: 50,\n color: 0x424447,\n colorRandomness: 0,\n turbulence: 10,\n lifetime: 20,\n size: 1,\n sizeRandomness: 0,\n smoothPosition: false\n };\n spawnerOptions = {\n spawnRate: 13260,\n horizontalSpeed: 1.2,\n verticalSpeed: 1.4,\n timeScale: 0.05,\n }\n\n renderer = new THREE.WebGLRenderer({ alpha: true });\n renderer.setPixelRatio(window.devicePixelRatio);\n renderer.setSize(window.innerWidth, window.innerHeight);\n container.append(renderer.domElement);\n\n window.addEventListener('resize', onWindowResize, false);\n\n }\n\n function onWindowResize() {\n var winSize = getWindowSize();\n camera.aspect = winSize.aspect * 0.2;\n camera.updateProjectionMatrix();\n\n renderer.setSize(winSize.width, winSize.height);\n\n }\n\n function getWindowSize() {\n return {\n 'width': window.innerWidth,\n 'height': window.innerHeight,\n 'aspect': (window.innerWidth / window.innerHeight)\n };\n }\n\n function animate() {\n\n requestAnimationFrame(animate);\n\n var delta = clock.getDelta() * spawnerOptions.timeScale;\n tick += delta;\n\n if (tick < 0) tick = 0;\n\n if (delta > 0) {\n options.position.x = Math.sin(tick * spawnerOptions.horizontalSpeed) * 10;\n options.position.y = Math.sin(tick * spawnerOptions.verticalSpeed) * 10;\n options.position.z = Math.sin(tick * spawnerOptions.horizontalSpeed + spawnerOptions.verticalSpeed) * 5;\n\n options2.position.x = Math.sin(tick * spawnerOptions.verticalSpeed) * 5;\n options2.position.y = Math.sin(tick * spawnerOptions.horizontalSpeed) * 2.5;\n options2.position.z = Math.sin(tick * spawnerOptions.horizontalSpeed * 2 + spawnerOptions.verticalSpeed / 2) * 5;\n\n for (var x = 0; x < spawnerOptions.spawnRate * delta; x++) {\n // Yep, that's really it.\tSpawning particles is super cheap, and once you spawn them, the rest of\n // their lifecycle is handled entirely on the GPU, driven by a time uniform updated below\n particleSystem.spawnParticle(options);\n particleSystem2.spawnParticle(options2);\n }\n }\n\n particleSystem.update(tick);\n particleSystem2.update(tick);\n\n render();\n }\n\n function render() {\n renderer.render(scene, camera);\n }\n\n // INIT!\n init();\n animate();\n });\n})(jQuery, window, document);\n","/*** IMPORTS FROM imports-loader ***/\nvar define = false;\n\n// This is required in order to process your main style file.\n// DO NOT REMOVE OR MODIFIY THIS!\nrequire(\"src:styles/square360.homepage.scss\");\n\n// The is a required alias to all the static images inside the \"src\" folder.\n// These images are in stylesheets and/or a tags.\n// The second argument decides if sub directories should also be searched.\n// DO NOT REMOVE OR MODIFIY THIS!\nrequire.context(\"src:images\", true, /\\.(gif|png|jpe?g|svg)$/);\n\n/**\n * PARTIALS\n * **************************************************\n */\nrequire(\"partials/homepage-fullscreen.js\");\nrequire(\"partials/homepage-particles.js\");\n\n","/*** IMPORTS FROM imports-loader ***/\nvar define = false;\n\n/*\n * GPU Particle System\n * @author flimshaw - Charlie Hoey - http://charliehoey.com\n *\n * A simple to use, general purpose GPU system. Particles are spawn-and-forget with\n * several options available, and do not require monitoring or cleanup after spawning.\n * Because the paths of all particles are completely deterministic once spawned, the scale\n * and direction of time is also variable.\n *\n * Currently uses a static wrapping perlin noise texture for turbulence, and a small png texture for\n * particles, but adding support for a particle texture atlas or changing to a different type of turbulence\n * would be a fairly light day's work.\n *\n * Shader and javascript packing code derrived from several Stack Overflow examples.\n *\n */\n\nTHREE.GPUParticleSystem = function (options) {\n\n var self = this;\n var options = options || {};\n\n\n\n // parse options and use defaults\n self.PARTICLE_COUNT = options.maxParticles || 1000000;\n self.PARTICLE_CONTAINERS = options.containerCount || 1;\n self.PARTICLES_PER_CONTAINER = Math.ceil(self.PARTICLE_COUNT / self.PARTICLE_CONTAINERS);\n self.PARTICLE_CURSOR = 0;\n self.time = 0;\n\n\n // Custom vertex and fragement shader\n var GPUParticleShader = {\n\n vertexShader: [\n\n 'precision highp float;',\n 'const vec4 bitSh = vec4(256. * 256. * 256., 256. * 256., 256., 1.);',\n 'const vec4 bitMsk = vec4(0.,vec3(1./256.0));',\n 'const vec4 bitShifts = vec4(1.) / bitSh;',\n\n '#define FLOAT_MAX 1.70141184e38',\n '#define FLOAT_MIN 1.17549435e-38',\n\n 'lowp vec4 encode_float(highp float v) {',\n 'highp float av = abs(v);',\n\n '//Handle special cases',\n 'if(av < FLOAT_MIN) {',\n 'return vec4(0.0, 0.0, 0.0, 0.0);',\n '} else if(v > FLOAT_MAX) {',\n 'return vec4(127.0, 128.0, 0.0, 0.0) / 255.0;',\n '} else if(v < -FLOAT_MAX) {',\n 'return vec4(255.0, 128.0, 0.0, 0.0) / 255.0;',\n '}',\n\n 'highp vec4 c = vec4(0,0,0,0);',\n\n '//Compute exponent and mantissa',\n 'highp float e = floor(log2(av));',\n 'highp float m = av * pow(2.0, -e) - 1.0;',\n\n //Unpack mantissa\n 'c[1] = floor(128.0 * m);',\n 'm -= c[1] / 128.0;',\n 'c[2] = floor(32768.0 * m);',\n 'm -= c[2] / 32768.0;',\n 'c[3] = floor(8388608.0 * m);',\n\n '//Unpack exponent',\n 'highp float ebias = e + 127.0;',\n 'c[0] = floor(ebias / 2.0);',\n 'ebias -= c[0] * 2.0;',\n 'c[1] += floor(ebias) * 128.0;',\n\n '//Unpack sign bit',\n 'c[0] += 128.0 * step(0.0, -v);',\n\n '//Scale back to range',\n 'return c / 255.0;',\n '}',\n\n 'vec4 pack(const in float depth)',\n '{',\n 'const vec4 bit_shift = vec4(256.0*256.0*256.0, 256.0*256.0, 256.0, 1.0);',\n 'const vec4 bit_mask = vec4(0.0, 1.0/256.0, 1.0/256.0, 1.0/256.0);',\n 'vec4 res = mod(depth*bit_shift*vec4(255), vec4(256))/vec4(255);',\n 'res -= res.xxyz * bit_mask;',\n 'return res;',\n '}',\n\n 'float unpack(const in vec4 rgba_depth)',\n '{',\n 'const vec4 bit_shift = vec4(1.0/(256.0*256.0*256.0), 1.0/(256.0*256.0), 1.0/256.0, 1.0);',\n 'float depth = dot(rgba_depth, bit_shift);',\n 'return depth;',\n '}',\n\n 'uniform float uTime;',\n 'uniform float uScale;',\n 'uniform sampler2D tNoise;',\n\n 'attribute vec4 particlePositionsStartTime;',\n 'attribute vec4 particleVelColSizeLife;',\n\n 'varying vec4 vColor;',\n 'varying float lifeLeft;',\n\n 'void main() {',\n\n '// unpack things from our attributes',\n 'vColor = encode_float( particleVelColSizeLife.y );',\n\n '// convert our velocity back into a value we can use',\n 'vec4 velTurb = encode_float( particleVelColSizeLife.x );',\n 'vec3 velocity = vec3( velTurb.xyz );',\n 'float turbulence = velTurb.w;',\n\n 'vec3 newPosition;',\n\n 'float timeElapsed = uTime - particlePositionsStartTime.a;',\n\n 'lifeLeft = 1. - (timeElapsed / particleVelColSizeLife.w);',\n\n 'gl_PointSize = ( uScale * particleVelColSizeLife.z ) * lifeLeft;',\n\n 'velocity.x = ( velocity.x - .5 ) * 3.;',\n 'velocity.y = ( velocity.y - .5 ) * 3.;',\n 'velocity.z = ( velocity.z - .5 ) * 3.;',\n\n 'newPosition = particlePositionsStartTime.xyz + ( velocity * 10. ) * ( uTime - particlePositionsStartTime.a );',\n\n 'vec3 noise = texture2D( tNoise, vec2( newPosition.x * .015 + (uTime * .05), newPosition.y * .02 + (uTime * .015) )).rgb;',\n 'vec3 noiseVel = ( noise.rgb - .5 ) * 30.;',\n\n 'newPosition = mix(newPosition, newPosition + vec3(noiseVel * ( turbulence * 5. ) ), (timeElapsed / particleVelColSizeLife.a) );',\n\n 'if( velocity.y > 0. && velocity.y < .05 ) {',\n 'lifeLeft = 0.;',\n '}',\n\n 'if( velocity.x < -1.45 ) {',\n 'lifeLeft = 0.;',\n '}',\n\n 'if( timeElapsed > 0. ) {',\n 'gl_Position = projectionMatrix * modelViewMatrix * vec4( newPosition, 1.0 );',\n '} else {',\n 'gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );',\n 'lifeLeft = 0.;',\n 'gl_PointSize = 0.;',\n '}',\n '}'\n\n ].join(\"\\n\"),\n\n fragmentShader: [\n\n 'float scaleLinear(float value, vec2 valueDomain) {',\n 'return (value - valueDomain.x) / (valueDomain.y - valueDomain.x);',\n '}',\n\n 'float scaleLinear(float value, vec2 valueDomain, vec2 valueRange) {',\n 'return mix(valueRange.x, valueRange.y, scaleLinear(value, valueDomain));',\n '}',\n\n 'varying vec4 vColor;',\n 'varying float lifeLeft;',\n\n 'uniform sampler2D tSprite;',\n\n 'void main() {',\n\n 'float alpha = 0.;',\n\n 'if( lifeLeft > .995 ) {',\n 'alpha = scaleLinear( lifeLeft, vec2(1., .995), vec2(0., 1.));//mix( 0., 1., ( lifeLeft - .95 ) * 100. ) * .75;',\n '} else {',\n 'alpha = lifeLeft * .75;',\n '}',\n\n 'vec4 tex = texture2D( tSprite, gl_PointCoord );',\n\n 'gl_FragColor = vec4( vColor.rgb * tex.a, alpha * tex.a );',\n '}'\n\n ].join(\"\\n\")\n\n };\n\n // preload a million random numbers\n self.rand = [];\n\n for (var i = 1e5; i > 0; i--) {\n self.rand.push(Math.random() - .5);\n }\n\n self.random = function () {\n return ++i >= self.rand.length ? self.rand[i = 1] : self.rand[i];\n }\n\n\n var noiseImg = document.createElement('img');\n noiseImg.src = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAIAAAB7GkOtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjIxQjZCRkQyNDBGMTFFNUI1QkNCRDIyNjhDOUM1MzAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjIxQjZCRkUyNDBGMTFFNUI1QkNCRDIyNjhDOUM1MzAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMjFCNkJGQjI0MEYxMUU1QjVCQ0JEMjI2OEM5QzUzMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyMjFCNkJGQzI0MEYxMUU1QjVCQ0JEMjI2OEM5QzUzMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ppsr9FUAAtfqSURBVHjadH1peizJrhsRRwv0Ovx5//86aGUGSQCRutdyv+4zSFVZMZAgBvy///N/I2ID71fsiMTzFQvx+8/ff6xcK3//TGS+v7mf38fv147nK+qPId///O/3C2vHen73/TO/f2tn7h3nK3//9/z3768+3zGf77Web/f7XfB8n/dH/f6/5y/+/t/nT+H5ivd/z7++ry9wfuh5XedFxXkx53XWX0f8F88PfP93fvH5jvv5Wu+3fl/J+xX1k57fzb1+//Lz1Q9kXt/zJ84LCJzHlf3Dzp//fUfrefMrfr/y95843z/rTbxvETjf5X1BqKd9fuH5S++rOA/yX2K9P3/F+hfn39+HdF7I+6dznQdyXuJ6X+R6P8V/57N8/u77oNfv18bvv//+yu/X799YWO/v/lvP61jPX89/8bz/f8+/5Pvdfr/B71+K8/U+i4VVP+v3x//L50++/4z6Z3+oUX8/z7p4ngvet3geH/hZRf73PsH/6uv5WPfz3vL9w+dn/f4U/H7FWTTPIziffJ5v/Ptznj/2PLPn7T6/8izv94fU43/+StaHAZzlUuvvPMN37c9Hwq/znes/a1m8v/h+XPmu+PeNYp9Vgf60z8usF/D7k8/e2fXO+z/f1f18bdRme/5zzSJ8l27vh/5691Et0fMq3qf1LpT3fT+vNc8Pfb+eBfY8mN+n9f7K2bO//3z3QW1wvqSzcv9798fvn/kvn693H++zmeZpRO1ToNfzeSTnUzwf5O8aOl/nEzqv8bzC3tN4P4Hnm7wv+922/bpDPrqzXfrsqad8HvEsiqiXmOet5buyz/rOZ2+s36/f1Y/ajOcFnDdw3te7ts+xdz5d9AcYczTsfE649yh6X92uz6he+pw79a+p3/6sh/5Uow7H9y3m+bjm4Hr+be/87xyjG/Ncfj+955D7rz7h9xefl4RztPVPOs9ZFvRzkvzUb9UzrAOlH9z5FN/PlHvn/Fo/q17TUS9Z/vV85/Ng+tfs611l9dtz+j1/cPbN7NmovXS+HfqVZP/E38/p9ztxi8mzrY82gf7J/X7me/fX+YnJ3+F3/P4P8xvoz/D8lPM5yvtJ1Ak/L/48/77mZgHPd+UCR3BlI/h78xGkvBC+nuDH9fzV3xW+6gnUo+xv2B8mf9pZm8HDSg7OfiF5/ZzZaM/f7T0yr+vsKD5LyDec73fWyfspZv3t1esmexXXw1n6bM5DfZ8v7NXs9wh5zrD1/pAd+vO7UjilBU5lwSfC63jWW8iSkkU2FUtOeVD/+hw58j7rm9Stf86ZPBfDqZbOm66r4l0ciHNGPt+x/wCkPOrVgVWHlf567917vfLuQj3yqmG6cjoXL+Y46bWdc0OAm12eS38Wkf38urh6bpc6OvpkeN/du3Ofn+OL6T3JMCdH6B6sm3H2wOzAyDodopbsqtXcH7qcKrXoUj6cdx/2+Ti/g94oXZtm/XDI8qsv9GLUZdtXQb/y+bGyEWYbzB6agjtkh/RbPreS/H7vDcxtAjsL9KA6P/I8xOdj+tl9AVQ5VOXl+SRPYXR2X/aZL4URzzA73rNuM1v4vWSm5ss6kush9XqUu6bOjv5M0g+bPjPOW9t93FUlktGFQh9JZ3GnboX8HukZcwMktz/qZji/tHghzf6Pbjvy3XXPLVxn/tlap1qGngG94HoB++Y8S/Z8jzmtuHyrXLVVPSd59krJqrG73t7vi8/ps/qzP69Oyt45H7gR2IOdipl/PsFzo59Hn6dzasnVZjuR6/8cNcllw98+Px7ynFEPmhfl6Uh2v0icSiLPmpaHnLo56qmiTy62Z3NgQD/rrg/shu6VWY9/z3Gzosp2+ytnBc3mfwv/s2qfE5yH+Lsr1vleb2FR18Nds7x7tm/F2sd8zHLtymus7vn8rNMZZAEBuecOiC7yT3HLwzfvD1D+MxHXa9xT+eitk7X182m4arFEXzZTnfAjn+3ZN7YUQmHFSp0c20qoABehHoYpV7run65ftRSeYmhWR8pCrSP4nPG8AKKP3OQL1WpW7qTTubwN3J6N5KUdagc//9vsWMKX73U58i3kfNM8T+j3Ajhl0DRA3benVZKpJeeKar6lQM+sBVR/uO7jrSf1OfFfPOTU/vb06uZa+g27aoAuDvmZ9g77uJuVkDyy+pukbOK3jarihzd3Nwc5n3Vtlf5uSRTqrS/4oZ7XjNrPWbVH3TpvIboQu5/pC+lYv5LwYiemGa3aY3rJ3meAdwrcGdmF2Fwi9XveMdSa7e0nhY0V9uFHNrScjG6Q50LOBjD8DVwLs/d4FlRwIIUsvEPutD7Q3xXb3zXm3fcPkXdyGglpG/pJz+2Yc6HCXtOcOv35zgmTcpxuaaOD1RrP3+AtexpdVp31urrqyUGH6owDkb3ea10s4UXaoKXQW3Cca2OxI4R1gilvc77OuddHP9iT96udW4GPiu9wSiRM8zbH6ZSkg5XwmEA1mF1mYe6Bt0rB1fgjGjg7DwfSnedURnKu9qmR+gFgqilpc8/3rlM6edHPn6mP1fe+rAS51htl6+vp4ONzBwjCw42kj0XuL35DpKwvJGQTWtveCBwGF5n/IyBz+oWDeRE//6ERoAF3Zo1ATuj5GasRZl5kdeCi0cwDub1Y2NZiRbB5Xoxyk74/aIPAaPgLhvR3yctMqstklRbpDdBszfqktrRufWhJB937EIYF9J9kVZjSL0pDAoFOBCc7MHayCpzLIPfVkkynuTBL+UBLXnbBT3OePYPUCRjaYH4h1g2MZ2GA4NMjStRotjS1WgUH4ZW63QjorUYDgu8/rA6fhYkeCvHGsc09H+gO2cqIAxbPWXj++A57SplWKyDtnptLFCm1frJxvJ5zziEieEFfieDxcnqW3ka10HMW6xz0PHsGwT/jm5yRwKzJXCGnYFcy9edjViysI5lbEnZV9ndAr3zYcS/wHO9KnE5EiiEFFryZhi7iKcIMDeQ5gLivNcJ0+pyTxWy3ZpinL1tQjsuzF1ZhXAO/DwR4ToK8Ec344MMOTWs9X++KPV2iwe0ZPiaPLtScQI+2/DQwB8Jiweh45LqAxfD+Lu3MrLW+tfso+P5nL24oyBWpl30toNXn0boPvj4P8uDdGzutm8/5/KaM5WmuRXBOqUoUvz9uAmvaeQS4lTLllksexUl8GNp2ne/1XFMYHOosiN69GPAj88Ijs+o4aZVwDRPie6bn1MzV7Aj4M9CNrv9ZxRAYCF6jp0I1VfmjtywuqEvxRHm97wW/Z49EV2lJcJFAX25BxQa+4dmneDe7hca/sv9PwwPZ4850mDTPQNz7okJLIOcU0He+o1Z9Cp0BWn+iBhtdoxMfkoDokB0POhiuVaSgdNrgZu7daSffq7YgnUHXDhD0TMl/18XOOs2zAIH3de33bjh/fbZbHfpr7vy03k6X0HnKPYvevYVXd2pztVuRdkgS1aPgzEpyVlVeuIM8KUj/PAMJPaHqk8/awzX6OTtn17d7xsa+dG1CJw17nw7EV7U3j+9HHWwaMzIcOE+iUnM2GKxm47jehzW6qcq3nx94ARQ8srkNQaA6ibNxPaU05FLz5Y27G2Jt70O628wLXUX85OJfXhFX0dX75GzF02Y+QKvf9wPbsR84U/EGg6z99as15NGit17qwEN30TWZ1b505lJSqfugMPpc5yBGbmdwZsMevAurfto6u7ci2MZsHALz/utpimIDGTaT5PmuIM3pjd/WAQNH+UyMt92M/1L63PBbgD8J+D7Pxh6siOSxW2d2E8WyD4irOX0ewZLObRGpFLAtiq7Aki9T27y5O/Kax+IuVDdmt2Jpv46wekFWPnRImv33BTH1LqWw9nM5ojlyvaOGaiCNB2ZF8bUnimn0EqnmBDuH6nP6F6Wo2WhN3XgL/w3n/7BC1z6vG2GZaEMGJyDmU39/A1N0nI92ceDjZ8xUgigy31SrNtqR63A13FStx7m9ZIg+WGEUahLsl54TJwmYO3Q5I9BtAMDA/cD/KOm7HxIUTzBo8Djh+eFnS3+YyttAM8uGE5TXqX2er5Vcc2FL35vcDLXW+3hILTMhNKGDleSHBzJ0nUbnlnBcek389PUog5fhU7I1eNrMszQALnOQVDGvKOuQyJT+7uL+zEzcN1lyTogwwl7v4lS0kiBS2vQGtZIzP42MUl+6W8iBdIZ1F4dV+fyL9PDBIzB4T2XKXCjlJzUpSddONmIehWgTkmBhVTO/wttwuJxNyl2xQ4Y5eU+IZNBKTsPsjJQxsQxVI3M7/J/pZW6NCqU7OQOet7pB8Vj4qSGWncAFVP+z7bSJvjVvYOYz1V7xDMKCQjgzvRzMuaBL6Ci/oSl9Svs9lKT1BGfVzbAIwYJOfeoD4bMLVmMhGUbvSqlXclZcNxXPQV/81ZoyomuO1R/KHPGrN+Ua8MeuAb0Agh2QjHWEAgc0rJ/C4yreQt3hSzFdPkXp4847l6uL9DDnYM1MaXHs3C21oDPD8VqRdzObQz16JkTvn7joQKhKu6Hfpow0nskD2q4n7d+GM6UQVDVcNU9SAPX85ppLgFPVtZ3POYQYVr1bD//54DDjQp0DCNFbp/lVh2Zd5bsmztO+SR/M+TAHV+jytEv2H/8MAx/QHcU0r6WfuKh8Vino0bwFGgoZBuDidRk8MQcbmsLCH5UZOxRXIv1qzT3EVjC/DJZ04OQcO4SQuup/qcINxc4eOnvOygby4+I7ss+4Os/iZjTk2VSNrpj71B206kyJz+m/Zoi1EDIRFnbYdfmDQwYOIyF3wPAcHFDC4ACrqT6Nbj+HTxQMIdVtyxhyyJc9vuKy62oP0q7bdk8j2mThQpy4nho7RUAxqwzGhXiO+DlQbVB3t55KgzLoCj7PsedKsg3ID4NVM4pjNjQmLJNDfc8hjAy5sycBXUhlVySl8+Cw6h2z2cQ40ANZGN2nXw8aNLPyUpkwzQDBXW4n+X7RjOZcOr4OO9IFGklQU1SnP9Igz5z6ZMeH0EySYP8JK1KEbnlX5lA4W7l2QvD9UkyR5CC9RVE3AcoarpcifJUQ/EDggTmV9yx3xYL+mAT+dX4I3RhQxqUMxVMqeyeaw9hAcydzHvFcAPeM67PqjYLaJKHz0SlQyBHHHslD+HE9lxc+0P81VfxrCFOstAI+9XYZHGmOifNZnKbuVNIz86oXsznRfSvFZ4/tab3P6Q+h1uk0BjeDUWRZznkVZC7jng304BWye1oUg9o1XrKgKwI+1GqolvaVq6Z94E6ANimkDiQQn9KNWBdkXpCP/sT6VSVloYG08/NlpP0OnXNoJ8OjkTt8px6bfQF0Xa135Fy7fdqxme2nsmX159VTJtdAOLa6/FiAtEREUqSUDeW0y8CTbZVwWPTCQGmfqvLd39M8YVKz5+KuCixJVTh/a5EOO8ROjs0CNkX7Mp4RF/Cdxnxt+Aou20BT1kW6CBbihgn5uESb9NA+a5q+BFwVRECQ5deQV9M7cB5TFJSy5IB8JgMt5AyAp6udgXQT+WYfEa6aPlVGt+/1sYv0/XJp+dtT7wi3hZuowXfYmfs/9UdsXUf3cJbCkRCGrh5HPA2TOj/ix1oFWbitkZQC6uJJkf41+oyZGrYQLvicpjURCs1NVvg0eIIyYb6X36TvA9/pGrD0qQD2KtZ9So9QhOezkbK/OKdar1hw2PuQJ2mVXinLPvznbCgTXtrwnl56WxvPBBhUw4ZWkD4C57I9T2IP/r5KydpbYQEQ6th0VauoPzJ/x+DUdhHnMBXzNMYJJQgKy7SfX9Hh0btpBsVPF7I3dCS0L34F9YBJ7mqjw6nKACJb8swLflhamRqCinPjrP7Nvtgb3+QwXuR2gt9f9dqQDWbhzAWgA4FuVHFYXb/PouFbodnwW3CuiKr9F8XAw+KaQeIlWLPtBJVPQVEqPuGATYek9AgFPPOau9XN3KfqpTiK+Eg/07WExIf7vhcsTWQDNmq8hZsylK2ZCeQszRA1is6Cjo42G7eJzUFmCtVLGN8tBedotyS7vYw2L/VGlcncrmkZCpXUJ5S8i78v1PBwKSlmmp6iyV3PYjnnWrreMnGdPfW/H1C/OINpiJC6oTo4d1vA5Gy8ro/mPryTjRCXEbqLDFkAwT0Y3+LMpV+NdpG8n6HEspQxT09PjiwrYyb659gpyf6R98/Id0Gwudkyom2cxjm9V0OPi+t9NrK3azzZRL1p6fIcVHPjFkkzRxCPMSeAFZ5WJA2BtGaBqwHzppLgpnZBCdlDlXk54EtuZ1UAZMrbRqp+l3MlyJC99Yo67nl3Wbk7ICkZzK77jXvy/ukiq+331a2gD8fqmwd9rJx5pq0XrVBkBO2teGGznOFCIZsVBMLIMUojdI2ugJOXgcwGniG1v8vXY7rAzflpK+vaXTajiiFBIWeEMTgUrrKpz7oVNiTI797rDzt7HEJW0whTcwBCHiJLaxco0az1NBCRU+3QnWQGxpwUsn+WsNj7D+5sCtScIDZBvMgrDmWMgUz1oUtZzc9tvCOcbqr3UDYUzkPEzWWoA0oO9o235NIKEyaMHLGH5F+ZvZH/0nQNh0KFY8sjx8v3rhS4Lvvn/iydM0Av/2y5jSyrs8CXw2uy2kh6aKXYvcKgzDHYBzdnbjq13pTmKf+5OXtI1Tjrrie4oKKFHNS1bGlQR/+ZASyjlrv0L+JWRtnwiioX/u1R4KbKtAAiCt1QrRY4QUQ7GPX1JeCFilCGLrpU9qggkiMRTmpG/lmy7SnBLqgQCkLxgMLNUGoZfOEujeJFqoZSELWEiulDSJy7vVlmyl+CZOGkFzqBIHH3z/bSxFyfX8mbSK9yDny5X2CD27BrfeyL4P7zUpvM0347L7DfQ32EW5HIoe+owEVeEa+hvMHc2Raxb42fqSftzYASGNBjII2yLizl7lRVnntRlbPVUdkncFFLq3ocEX2Kl4RJfHvNbLu3MfwbGbmJ4JzDTVFEvOYgwbp0AIV9iGtsNdCiTjS+0MK1KGzf6vshhQ/Og+bwjN2TKpjof3bBPRlfK4cxLcnUGfLj8UKNrrbm2vqFVqbpjcUPPpzEqRXAenOsqd7qcsHItBlOszn67jQbnft0SaVNfyGu541s4boVXXiTO4ZxVxO8OF312FUlho/aclJqrA7/vZ3TMDZlw/ND3OYQOW5CPQ31Z5t5XWv2WQo7WakRFPBdM/ymeCOVdxW8LE2Sp/N8XPr/OOKicw790XmzodveR/G2yPhMmqauyA8TbR8nnp79bfZpvK1jGe1Sh/vUl3LaMGKlt5U24UoaK30Pt7Yvu43xF6rRNFwrtQ7RndJe/A+HpYiPl8X4hB3qI/mib8GEt+epEmrJ7GTHbJRUI54c9Z3ShGA0PXPBMRJymDg3hBGd36owzflAvD76HjOcbcBETo9G+9bdjsowFYg7N1HWlGtnz3jfymBxpqVjqan69ikOsrgl4H5q7QC1CaG4ZFptMCvsPaLKRi9FEVwE5EP1OQ0OW6BT0PSVvVlm1D+r5C0nNlKxQ2sfU+1TrTJ8wKl7ZupLmE+N0GSiAfI9Z5Bo93sSHpn757y0n0MCTp02zu2L7upluqi1Ygz8lG6uVg5kcl3f2hL1eMuPhCSLbKKeoA1427XYYP4ACEnALq08h06epwhOMiSaTE0JyJoOYidS3wt0BuFOEQLngkewQmp5D6vaa0CagTllxXwJH6FNwh7dX4rMgFlXrrv8T3UHgcxgDyqywoVokWIhJwNkQ4ihcs4XmKkj/Jh6hthhvPf84feJh1Ve9ZwcW80l36+DzH5NAPtuv6oJkNloYhr8QVhBuNvBbuhjmQJNzClSF3W5f8Z8WGj0KE7hH03iHFNSDHqZe5XnzjAC+9AXX6AxbBTnL4xmWafQKbNvUHIbQldKN0P86Ib7sz1nGmAkOljfOnBWfzJq0AVdk9BZ6KvP3O2Zg3ZlEf5QimR/p9N+jowi8/KXSoFIhe0HsSwA2fZO2BQWizh3PEeO2dPsLe0/3STUz0bMPAfOOQSKrQVx3lsUSsuuwW7fxkOvlE5Puj8o4u9NBbZ32TZc+P2DpwPIUWsY/oOvg1TqVsdoBGJfUJFykkbwQXlw2zin+TqdzcomKi4NAet9pHJNk5YbVLOdJmvbFNoX5nHIfIuPxyA5Sw+Jaea7Y8CqwuMeVAcFAPmFDtuzrV2QUnifqScoqJqMayAvUgxo/00MPwMX1wIXljfinjkNnfhp2vnkCjzPbim2QSMZTsRGrZKcZLRhVTPXOUZQUKNZyVuMOM5zX5fnU0q7iGayn+at7+oQjtsUXqZ3+0O6d2+YvERG5Ma3udW657tna/636gmudwnVJObFjdczmlvSRg/bUw4h3jKluT0GDw85jfTN2pXmsyonn5nckjRLzk2KNctMxnF7buAWoHr/g2R/zXU2nLElRgPGmzGorRD9HudVp1PV5dOGq6eUkMyTY40UYcK4d3Bovdt2InVqquV6n0ab/uA5LpnSBeY8zZ0hPs6jYAnlYs5koEa7fRauVPlT3o8V7mIgiHuORy6Eg+WIurkOYNb0EdDYPOy68IEfp4rKWbKG/qDlZarfaA5DxLi3cwd8/U9D9ArhDi2DVGYqXzN0SpSXDEDdaUp99wob+/B+zeGT+Jm99ZK2vQXYOYybbX37/x4VXdsJNwWWjktUWnCGqFjONSM7zcEmyCOFvjqFKqFVrgka0rkAeWISxu0RMELYysvgszinuOc0I2R/H/JStuO0I0JM7w9oX8V/Paqt+pDd0Hd7PxLvh+shm/1Dol826SHU0zvMeS2uDvsrmhYvxrjJd3+gO1SF7WpXO32AYNTANr1rV4/vV/s5I9Uwdoaqq71oqIs6i7HUiO+/gGphMVa9jdCc96MMkHHA2je9kCY9MmUaAvFcOCluxd/JpBpz/OUYh4tbE4PjpJ8Hg939F7K40snkIa4yoVaf+YHPDdV08CfIXcjNo8qIY0mq639nk+wLrnFvyhjRgrRYg/v/xRxXwFY9svQYVc173uTQzD8aCpJ2SN0kBV3cFd9P+8eUhOOTRKNFRQ6U9Y682phRQ8f0j2XyqOtHFTgm0qHLas338nAk5HyagqEJ333sV47CdheldoWsNtLxCTBapuJJ3gtgnsCFqYdN5hNXIEUhzFpKQ6l09IWkw6h1VssnkpAnOn6oh68FQLwrPvB00/dxcXlSrSxhTroQFZfgMFumhqw9Wgk+E8ozxczTPOYSVHo2iAB7dafscwcMFyhunV5esshssWo7309RIEUf/vTriT8Y8GTSsI6BuMXq0CZ7NL2aACKnW4cjHQ8fmSQNeYtGbzYIGk80953JvlGWOoOK5ApHnT7ZK/UI0foRm/ljBuuzFy6RUaYSSV/ubIqXFdWsYQWH2elVLIlCE2Xwo371fsSaeMg+dez2GT7DKtqHic4edBON6rKqisfD6EvFkme+YiZkxxztpEEV3LTMFcRq9VYZEYSb8RmEv6Y8xLEBN+z4UlUgL0Z8v2bgvm9dPaO3TXv15yVyy/jDRk4JDW9Z+JNS7IskwK3kbpMpyGU341bCgW3QhS0pHPmZB93efw3W54wiI/GJmZlwHDn8VXSm529anILTmVLMsfZq5Rf0Cha2HJzikOGSaIjc3zyvHMTXT2B8w4zhCfE7TIgpbOifuAJJEKpDmjmkntL9nDf3epd46OSoLSsHY4dS5J0lzmvtLiMcPwGSlG4pDaJZy3AIt5Wk1hVbpBsSXLlD4+qndAXTbaFn3dbzZEuKLyaNRDCYYYCPu7KOGF3RFRM1Hj4vj5ednW1HxGX1Mnt29W7dqOiIBcE/IGU2xvn5La6uoWKqx/a7r/dVBSiR09VndHyMj1TWjQbCUqOGFiOOvhlOb41J3qsIKBsFOnMo3w5g/Gcxfs3QXkLO5+cz22VRH0OGFaMmgvMKup8pbh1YeUJYtGVPVcelOgTONONbiTe2DZsq3Had+OhdxWXdBUzNCpUeJe9DNIl9otvmu5ON8E1S7nZPB9C887duXqMEbwSsCqMKi5xht6nrZhRrK+ukuG2xlfyo8lNu89ltOzFX99axyMwPnuJ/ywUQRr9tRADRxns9GIfQ2Xr8u8izPuWVguxbRFmNes7nkQa2nsZjT12da4q/njZPmgNnxyHgOmYEUiCbplxB2AzqYZ/3oGuNz+h7YK1Biyg+Od85iT+RB7xnrYjrT//yKT39wknTDmquh5uwpRpNbqP6SGNp0jpeABDRUfrKMV+XHqIUi2tlwHwGzbcjlON8jUThzqH6Hgo27gzKzgncUliY/jrx3YspG7A/+l6y26qTuhLqAmhcqCzvlgCS593sMTonz0NQxNrFZNaZtHNupDXPpvGpQmDRI30Y+gc64Og9r8a7+3RL+wIyoBYAlJttusOOpok8cJgbfBfoz5B1vQKYc/Ss0EgQNHE4/NH0mQVqPW1w3baQOzRXDN24ItzCrHBnpqU4KT2glwuaNnR73icun2e3Uruo9UIuXNI567XlPhAScvPQQOPfYH9UELEEEiLLab/3yK/TDAM3fb3apwhRPVZZXgnrGB87/ZCZfirJZ0yexyy47fYqifNsyKlWi1CflwKSE1YREbAJz2u7pjgoqsFIXRs8mnToOEElbZ4kHQC/T7U4q3X2Lbu+mc86kyHvI/Gt0JQuvoYeVAOwGxt2UUD/+5pp5w6GfUn9vuV6cXUiOx6aYkbDGXNCmMcwiIU76ZN/41rq5h8/oOUQuDovA8GuaSy0jZHolX5CsmIURDNTY1yl8FnXSxW521IGYlxudBohsXRgZb+YqzaWmQMtPX9iV95Lrn/Pvz9wE854wOdLyeGn5MCGDfg7P5i9PETDa+k3BOgHcjhcHeDKnjIwmx6lmZ+kDC6CFODeAIu6c47KPcuBsp71OICIqTzcEnfcp1Iya0LAGIvlpFofNg/KQbGjWIBuLaZ3eW7YZUTtfv4P/jDi8qdN8haNo4WU4xWJLzHZPFLoxqlECP2TKIc10Dzjpw79Za4wUNXv/8p/kwmOZPwGKw1o26lqd7qsQxT+aoLXg5qe9k/tFdP5vqbb5Uj7X9DNXB3InRrmEVpi0zeTD3oZa72mlmvNvOT3ajvkuWX6vskNfAOnPvzUVtJDpYHhpFg/k0LCf5pFN/K8OpMorvnA4ntqBrTGQKeQxytzF4i35GDbvLDEE+GgLRk6xtQN30QLKPIhqh91oZsuL7dsI8ZZcGF8B6H5B6IqFJXLbnZcVynWlHJtxs2pw0ky1Ts3kbPZPWS8NnjaeRFTma9Kh8PRtrVyIdud/+WeaXXy0oFybfYBSxCFK6bMWfv38JFWPJj5RCbMrmd+dmpJKnW/rWKJdZ5QgZTwpEzmwHgMoKoVgnkcKF/BbAvQXClhEmbBpW9xS/qoHJk5RoV/mCxwfUF8SDrTvtxhPZL7VLlQ9dTlrSScDtyQvF17Ip7OS09FW030RIRXxIgveNvmh1gqy4+5qAtrGMkPDXS5sZ03LF92tYkB8wrQUvniTAK6/ht8TJPdQkThjeIJaBS0wOqgheR/vz3APqKw29gk7jgnMknYKeQV5/qZ0vc9FO7YHyBM0vAtyRMFQi+1alGmOdFgWghQ0aF2fiHzBJ8lycKp6NgVFuYeN6qBTg2facn7mlazWpaoiwcRvuYn56hru91QxbJioDTXbQFnaEei0GyYfGKb5zbUKiavrJ0GjzL75KWfnABINTbXZl2MEhve6pJyR/lNXHykHDhT/Nm2hyDu8d3UmZnoZtG2JHkkeZsSu2GuvUqxkiLu/bqBL/GBWO8MYB920KLIATtTguB5ATTYoeZ61CBc3UkG7uBTmjRrRmEB9Jua0/Rp3ny3yAkYuHkqMlpOmQ+pWSw0c6imz6ScBSZbGQqdj9WKOPmeV7tdHyt5CakmL0mW2dpSGShjJxzIkv6PMX/D0dThZ/5htCLpe2EmGpvnIuKi/MDPapPsze7BXCVkfpT3/H5/2HsBrIzbjQRcs7ipdcLoyYH1JZvjfPfcIVvELX/T5hdHJ6qpJG3V3DXXauemB/jHHP39iydYBE3bPskLwIflh9GZ357UNhu5gbe0WOVyuDSLxTr70dD/4FwpMbzQBjGF5tRn+bIWbKqzaSu8gpBgBPMLnnZ/W18LnWXPocM0HKkWjRfIC0BCqhjwR9KAVE9XFSC+3ZsXQIfo9c9/9lrPoT8OziFhSc2wZsDdi18uVqop7Q8n9JiKy1C0ch7PLe6X0dV3dFQaLwDiVjv0J5Jnua8QwStUdJH9TFOXVYmPx/z5uV7oBLWgdeXqumGvQrqdXqAuzdUD5eVZApNM9QZO5aklj+7nxgnmmM2pXrNT1ZtmONm1HBcLDPbIa4mY7zFCtH0y2jlN2Zu9oV7UTpIPxAvDu2U6fx7crjfc+ENAgrnFSgypHn3KVX9fx7omL0oHVEEsDHwVqzmp+/Ro3AZ1DqnjPOcNJ4jezPLL+UHq9/qwt8aHd0P5+zN/sNgv5DXSVtmsMFl3pjn6fLDo1q/L3OIyxbtDuG0eYNmz3VVKgPMEQ27iAjyhv00ePk5b6YqK+BoOSqyI3lttkHI57cB2+dJCx1eEUHqk77m42/gbO0zz7xo7ZDMOnkJEvMmbRGpSz0MGhb7kFvXZJpK/tQbfShpFxedMdXKjgraaB6Eqr+b/pa2y8GoBk+RGMvNBY6rSUTdmNzEpnJ2ZNTCbE8WQ8RZd2oxVTrrCPrgY48qBwBbPr7CM8TJtNo/Supneu3X1BdCnf90BC9QajMTeZd8Zki7QCtnDa4HkueTl5SHuz4mPi9pLbMqe7Q/yv1quYwxzyOE18iu1CWH6uqu8aNMu9smTWjbeJLI2Tou2FIRSdQSr+xUiNJF0mdH3teOXmfGdjKPtKVbqrLdDQmrjtvD/TGnj8krj1FnOmTKl+HCKzFxgvKoW3C4zEX+bliCHkLCIiKGtSh7u1E8szbbBZyCWw5cGJPlD+80QQmq9QpnzJSM1U+Z+4dyL9IxVWaqnqdgDBHEsoFajw8RXwA0Iy2WhO3iKK3zmFcSmmhO4qYZxxaa4XNXxJeKOEhcwutPX5RbuIsfIttBRpCxPV3biT00rXfPywr6Uf1anxRLsbkuSyBvPhA6HOgGARCjIv5EbSxnvnsXpTF8lSueMCC6Bum7sRLjWeQl9MNWEtQ+Ulh1f7kWlTj5AHYNukKpJb+5IAZVMjO07INo7imL4i9v+6JjkF8dBev8RudEBP7l6HVTxPvHtffovHIPCToGyqAbjOsv8+A9VGzIvc0lZx7xDNQ24DZCN9XkloyJlLmWxlRjiaYr1G+apckMWc2WnZPmFZAqBeWV9z9EaNDklEloP+idKMt9/MnBcw8WHSHPKWlO4CTxUajmeV7+KQs8TJnX0ktxS2TOgMRwy5c4m45Hvwpz0xE9cNH4TCc352/AROQChSVDPJ3v+99gf/AAXSynElCIbYzY7CbeUPBw4S9SKJda1mo7Z5qs9OGUDmXJXuyliMjX8Bt8uxxv378xBQxHuBeAYvKfas/17xcJaYbPIsFDIBsQzOJo0oEfFgyKmql0MtzL/cNAJPa5KqQsaU83OQ+CiVP+t41fCCCYE6px4bbeJJZymISsi/2ra7LaqmESxAPEXJJ6NHO2HmYK2wnrT8Woswo91h6ZaLVVAj/VlQnXqHS649JjMuBuAlzp6kgcPFbnVhBo7vLu22dHmuzWBoHtbNQoycJDxjzpIDFt0tXTvQpZfM9Fho+26Erag0Gq+vCF+8UjJSLldy0XiZh6euFyEMWlu5ZKJun4Cxlmk4hzxPf2br2N64DF9biO3TdKvzPJUn2DdWolNKzu55OU+lNac2ylbxguDdvXdF6712MFw1bF6vdduSGBlCVZzNvfHb+ErUIeZFh6wvA1BRK8NMWqExM6feeMQ3qloycvxAmYBbIahAkj8rOmecXOyepa+Mf6X5cFyiinyco94Hcfsa03QicbCBK0y1LrT3C9SPIBKXqgm8eCDUUcSuiNoX5tCAs3qvuudLY76W6ydY0VM43I5kXGM6GT8krhtOccV7qKP3HXfaKUxvCH0PQHcBK7kRLFTHwYUM9dQOs/pFnPYJ9LB/cYHtlkGNV4wREqLnffMCrSPJuiG4K6cblqVlzFJ3gJIkjnG2i+Fu00qbbXqZONOapS2mYNTwDUNhMbR5tJLvHTSDCOah6FjXvo3TIDjfh3qhCA0rZ/gCOrWUrqrNcaBIC+BspWkc96rOWiK7MId7rTPmP9YFzrAzPmJjOw06Amqf6jpmulKV3Mr3aYkLhPhsbMLvh+3uK6N/S6Xlc5lTyf3lxTnnfDEsexHSla6jGTQAwPBkXeKSf098EheEmA4/fSbklYkJIwYUfMsfEkVqlymkaS9yNpSZFdmz5pyu33oCUjA7o0i5SSTrK6hlpAZz1vYmJECuT8+Rz4NReJnqU/mJR+e8l+dklrLt1pzkqUhK4mKBoyZEGZggEXrTglgNUzvXM0G8aAHzBPjKDfsNSPNEJv2jw11CgRwi9Mxp/9I6yeDY1J1VBNoCVH74t1KuYWbjSkiYPkOCMuloPMSUkBb+SAp6frTC2dZJAZ7NJq9SBu/xHq4jqDsWa0Skj5WJf6DIOpShZQvY/m/jCw+45irGQZzfhDxdbTMSw3Llnx+0hKv9+kxlzNYMpynBEm0nhlA7dtjuXgCa7baOQcR+NQErRT31zANshO9hPSRE6Q0gXunJbiSWfUDUe/sK19D+a6KPQIy7ZuXdQnkaEotnCo1Bo97b+UO4faf0R1TReJ+iR3iJPHZ6s4H5k90kDAMYJxyYoui9TN4bc1jmOOJeYt/sEn7XI74r/Ru8KASUQPsNAuB+Fpd9zgzREgVCqtLwakvZ/ckYmsi83zzJQaCcJGT7oefKfKEAzblXcIc+YoLkZVtVmOrQ0qDONbSsLCPJt/N5bsx/ti6NDNNZyvgfJlnmTuqe9wk3B/RHd2mOAxJ+jt9wxgC6tmyCRKS76BlkwEEzU4gk0SAe45ZyL0PM3KYfnrsWNOvleE4E9BT3o6Qa5XqRMV+Rxo2H1TOHm2Uy2qZ0Wg1Qn49LXPMaPHBnuG33pheKqQnezrStphNgla6DDlvwsVG4flTb4ijQeZHfpsaUq6eGmnMvD+ZAUlTF4cvnuV7lBErwLHSzD/3TFLFI+pigtki5eeC0Inc6nS5iQaYC1V4yNUqaFif4Pn5tYSUc+8yrZrRiw6KGWUBeW0mFkjj+dIIc6zfkiQ++BhhNTaDS6btrpESEj/A2OnNVneyebmOZseQC4rcx1Q6v0W9dJIgEoQn3M1HlVK5y20z45oVz6jjbLOVyLA7lQy5LXFSEMG8GGuX6y1d2zBMCCzN2h0laobxAnBnpg3z5Md96mkNTV4Phu25hehWmOMrHy5VpO8rphqm2+0pb8SIOSkSraRiPtW+1TPFYRRYlZWL2Vr+IZuVUpg2AenE2lSEmCeB9ZJnIFhnpJDg5C4WBnSd/uccvp08xJFRJmAwwuJpE0m/BFnOPig5zBKl9zKSHPPOExIVLRdAT3JWlGfpijXm9NLClizgSMTtWlPXRgegE8ivX6P9gdx+fZJ24h0VUxu89pX6NMUaH12jMGyZ7vz1bKnF5emPdIb7SFJmSDbueNUxo8FS15bAXTQQf06yyqWp74D3Ja6RyB4CLOJmMrukLmY6OYxOH15NS6kxwuEyI/jsN9WHQZNAyrHigv63E6KOvjcnCQZx4ftjPawG50oLFL7VYG5vCUpnPOoSRn2ScbmgjlsH1M70jJQwtD3PLMzLn74jSbMK8XCryeGqNSl/vWkASaKExhKoi7mFv5nj5Kd9GCf4JKlXRO/0I5n0UGWwTLT4owS+hMNWAcmLyGLyogZiObTB81WP1Yy1GHdF88SMmzqZFIWIPFc5BwIsy5KCaB0/s5av0ZK4vyHFLxlz116PQHBclYufg+KISnJpkdvl+hhBohiXtQ4AxMexMkW1QW6UpJMX8Y6u1pRn4IormwZdZvF0bDjrr4OPRVwy09PBc955jvy72pW2eDSria/gnkrpPTO5OXDypllpNQKTHlktMKr/d0eOZKqtE77lZ3OsmHEPOi7o5QDnRzCyUtgtsEn55kkvIxFmkWrmFM0qklMhuCPMy+PbE6mcUmpB4lb6csdea4U6c2qesGTUUFCIWxx0m5d9X9KcjZFmhlK33bHug9t+yrhFeXq9Dw5LuyyAkrmG+pHJrDQ/4dXWoE2+1PNqoqwES4uAnQxaHl5pyp7UnGW5AMCuqukZy8W9xmmf/APQNQtBR9CwlhZhqSkVv2awU7b9a6qaIeMyk4iL2zHFPwo9QoidprqCgfP8BbgJzPs3frTJo/YXNgFJo8J3pbjUDmUQ42hnuQ7gU9672GqigKAUw7drfKpJyttSlZHiHilnNfDHKCPUvxj8MiNsKcXnYoDMXvGJtVDwE5bZuvkQ3r+//rQnJgJlHwr+pO7I3FUj4P7yfD083Lw6AOVR5txEHqPkH2RHEunpL2Dv2yhAnCptBgATe0ubYVlCNLvw7OfMEGs/xvF1Wdtn3FWaabjyGYWNZZAQMaEOT7yf9AKA6xcZ8KToF8JCqi/xW08L9rhN84XBXMG0ri5asKur83XgWW2I0ufRXkF3lPEP1tHzbTkTf7PF8bmBoTmsNerYLbvZFGCrA+SuhEWBe7fa/tm8w2WHLqZa39dq5dDrjfR++/Wc++erDGJgRwkHIIhybCoSICBZXZ1oxXMPLHm7nMmpKjBHWrp9rHn2D4JjHvGhvU7hPEMiy8jrlGlCcuq/jbAH09TrKuw/ittYrPb0bfb8g/FODR3RdYrNuUm3cPixW7K4Xx/N3cl5gzeVxfCpQc+dOiFeQUnJBnTvMWa0uKInC+7xht2d/FUkaOmdPl4PghEIXlumoApMOoMhr8o8aG7viKwA0g4ZYUj6iTQXJrtj5f4oqI7gwDhxpbJAj1XTBWeLLL3rqmXkTiZzhfvKrWI4Jqe4KKu+NbLzudslcA5j8f0WH0vIEUyvI93Yxnt21yZsueat2gPzfw67Qp4+xqD6bYzKZHAzW8AWRm56c4jbHjzsp+ZHzOoK2DxuG18NyliYBIwh2WdT9bdeADZMBVSOLfN+NZEG8zjFnL6i5E824bq8tZZg/qS9aWGKUHPVMc5gNk+kRE+lxVClXQBd4J8AxCL77QN/pYb3peQOJKPpLmg0UiArodWT6DAI7OsAZimZbDNeV6oc/xgh9Nk0POmy3DzqwfoAtrUY77zUDIyzBpbNF4OjBrOuL+dQxmgIdXAJcZDlhMnZBlO3pHc4z8bs+C4uhAQv1a7xoeNzAdzVqfr5ZVMQKsGtdQG7Hanqa/C/Vbgs/lUu0hKReF12r9h0xH1dHnCchzn6479Zara98afLnlH/LthI+ElSwF2nMdoqiG34unicuLnw0rHD4XbPSLvpbSL6vmJ6rTYmRLRArkALbqpAnVIdyiwx0s4AX5bt8KL3zmidGr8SxPobnmyqLc3EImalc3/V3HWzpfRTMZqorQE1xmpCKx3oN02mLR7ppMr0SZhtyMP78ryyrcYwprsQssHSMIG0bZzWZGg6SVqBQG/roxIYK3Q6LKRJxVOquI+B+6EmgF7is7E7QDk3R0TZgTkQHqYI+3MIblN9K0tPCXM0coD8Lck6LAS4arItiXxMcNp/xldV+uoI5L17RXsyS/syGk+bwq3j/PJ87XHL6dpgzxG9yPzxF9Obh4LFzfU7dFzR/HhsJnpZinNkWzzcbUgFSXbmigL4KBfjAW9wN5ky7GcQkYLrl9n0H3w4UVAmySH6N34ssalp+3SfF+JpYW+E8fIodMsWa0Jn18wGokUG2G1jkpjTf9SZ2TrIYqVP1FQq/qODZCUiDIAAi4lrAV0z9AfTgIldSCWHKJvJ0F9NSvMc+xAy9EBf4FyVp29OoAIPC06S3Z4nb/1ITlY0QsE0M3+t2GosZ2ROrPOa/Ld9kLnQZIbxG7rtkOsm7w91rC+32CnkyDk9bFW0NgIL3gAoPNeAQmKo9EaMytR1MRi+nZvZivLYDjm5TquXs3aY9Et8iFtXhTHMbS0r2eSey4eBp9RdutU9wpXY4LJWBB4zQDXxNFVbu5OAFu40xT1H82pzgEw1Ymoistb9gkksxgmnBUFnUGMw8FqqD+N7NuxpAjZixLKCDnW5daiJ3YY0Ywc96TBsz1a/EmJTBSgc5bxuHe8FUP9sgweMgc9rxrryat4JJjoBATbsrXppA26IMBM3SApS/mElk6UV77EAlQswJW8Pf+jsq9tCoL2mus5H1xZRwv5t5ySXHOJrCxHdotXv/Aizg6iriJBHHz7XQ3Whu74GW88QFdh5s/MKF3Cpo8Y1AJ5//OqT99p7X9FFZi9NE7K8aOZWOSA1KQ0a1aR3QD1ByqAxQ1ymY9pwx4KSJ4qh4a/8zAm0zR9GS6Y5xl7wP3wOr+4BZMWhy38UGSuhsW4np2qYMve83BoV4YOkhkGf72DepMYZbejuD4W2pIXrY59ejDTUo5Kn/pnj+PxIBXCZOhkW36lmsbwDQ2cGdLKmkHzqWlWPJ1rANmqIDUu1TWXLgMxgVi3iS9JhJHGN8er5puWGDta746JIM3RDa1K1PaFjnlm051URZymWNLTxygfzCyCLvdNaVXXE4wVQZ7PQNOX7hIazdyzGnC8cUJoHvbT9/Yn1LTMDAFoiDFNt/tPt4mShQBwQHbsXIWOvH4o/Pmm2f+tX6PitkTggNqzU+M9+7BpBQFjGiqbJushyoL1QRrhDr4Ac11mW8AugnM2DJv2nXI+y29w7W/2yxrmQveI0+vMR7tYErhrDYYQrwUzY2abns31hH/wH/Leot7R7uL1z355x5+0lIY33PrSTF5uc8b+SQXPcv9OmB2bqUwVs/4gVhkk3bRrm0ZrDE3V6T9xkWbYSuEzXDTi6NA1SRY1cJCdXCjO8/Ueua/FnUhwxThUvlL8k7j8Lgo+EmSbY/UCXOB5Q6lrULzjzRPJt0ghxKWyFaVi37ilQZcoWipLNPZbnb6WJjz9SXevCsIHfHOzFVoalNWRQmgmmtI/7P4TQROA7j4utdwBiN8Ph3K1LCAJaMvq8I91xWYB0YKVk5HAWOwOSGW0wZNYYQ4XjnglcdQz9jmQQiIb4ceDZR6XLSL52vGak64USktO5O4cAVifhoqSqi9Se079BycwJM1g7Lu2d1nv+BDUXearM9yY71VQgDBQYS1LjJgU025xkgUzxEqcXsLiYJrltk9g2SFeD5ePvTOLu5UQ5GYVQHosgnU0KGj2rxok8ZnBbnJyYez9unGW2fCLYJ7G9i8sakQj8C0+IzaywGQkOKX+/M2ZODV+oAuq/WO/pLz0A1zwZliXDCVXODfmOgRQP7aWETSvSLwAJgbk6jbkDmjCNPmjgmxfzk9rR4SMjTPUyieHn1qe3DDf/eOc4X0ICdkwClRcBFHYBgPdZ27HiU0RqQ4AVXj/pny+ozqQ8A69PRQf1S5KSF94ECqQ2zGmCdyJU+9CodKgM+uukhzcrpkSL5REopqL7MTk/bM6NF1nMt81EzXH8Dhm/pijx389keUUO4URcpZs0PileE7tP+AEjMjzfrWHt3w/+2Zm7js4eY9PHdc6umZBL8ZLtJHFq9l1Ab8rFJlOBbebPwYTP8nobAmUnWg7hmm5+wlRWYsAMAtbEAs+D/e+loG3W+2qcuRgHSDLt4Ai7HKLTLgAH7pRy2Suqrk0HapvSjEhTYpMyTDUvVSx5eTqDzDmy9skiNvHnbHlrFvT7jQeQ+geN7mC8m+ZC+3lHKpyw0RskGbke/WHuc0Ajy+G71QiyS1x/qF3+ISwlNbddHMyt92KLv6tt7+YI0RSDLCFyDvMbziD0XYtcOrdQalWAywZfO9ByZ48EDI6B1fehZCtMu7RSkpVOLZQaQUIap9Iqu4S1LMG8MCDJXqzBL2jBkUUteM99zOm/TJI7xigY0zDFSVaPJJa5RSZNy4QGOmvRUvCAO6a8R70QskV6qnGvwcVJ6uTpFK/NxENhI/g1cMT07t8ntiBC3JVCikaHR+tKKC+2sZnXJ32G4Ef+oue2kcyodU5T/cIl+Uhxr0sx/aIzzoRjZ4q9IITnI7u85PnRk4JslvialZZqbolTRSVtVQtYfC+Dfbx4NZJnbogK5XsPg9RZ3eHcvdOTNam+CiinioUv01tKm267zDml/5sw5pohalqFXgAfDn0g7IAvPmm1B5Jg0jJoqAeK6uapUt5imxNMIxzRw9BfZN5wCNRdYll+wSkwsPUIC8d169deN6jcoS5GchkwpFqVTCUqnvbkJ2TGBXAe1ib+Jac7a2qschWVEgl1xm2J0TFIM7osSePRzZ4lUf5o78HZ06R9rv6aPAdrRVPEpcbypi+bGUQstQXF0BfVkT08DnMYk5+Z+ZqICR9n6oimEt1Jx1Z3av6cFa5P12mBlEH5EQIO+4/ZgMMB7WzIc/r/G9ufmSSLee/819ysWGVUQaUxbNQhs20qdOsEnjeZ5HMf14bxrVmpRnJmP+A00GmXMem2V3756Dq6NMo2E67Vv2Uaz4/JCVocTaQSdTC8qTaGr3Nli1Ii1kppvt1MwgQNJIwM2gfhcUueSvwhh6DwxUjm/LV2Vw2Zu52XvCXwttPgBANU85xdTQU11QWvv8dt0qGmBwPNAbUmXT13dvdL4vowQc+ifMNNf8JF0hsS9/Ph/pfNsF1vOCY/0HUULmVIS+A173yQhBnpb5Ev7msGIMioOPjf1POm6bjCw7SBoVFTdO+CRZB33/3aEponfbPBzDapOaWr+a4bBGKoOdYgUIkXmLf38yAtUJpLZ4Ef25+GZXrcLp/OBA8d1v9fBpBqLIXy2VUEV9bN6g9gSzmbTr1PoYlAyORJ06edzJwWzReXHFnqk4g9mUACr+YkG+zGBJD2k9x/U2LAPjqOnnExZtVrVBlRBT5WaQ2kYcbMKZKubP5Pl/nrsuQ+vrlCfGlUn8ru2kgN46y5ABqW+UNex+SvugmybeOxzRgIc9yBg37JWwgG7HDzh17s46wocho6sjlKtvoIMjftnkgMyVvvufHUqLK24bl667tZeLs5UFl/GXRJSYkHwAxZB8qa2N8ECf8+4TFwhofpVqXwKHGGw9roEyDW9EnUt0wvScjdAjJpKHW9l2J6nR0fD8lyExY/4Eu0m1t7WA5dnCYxnEIwogvitJSmwRH4K/MS1s/4A2c4+F/BBAP1DEpzUF4deUEHKv10QfiMtH1iuGxiulz6d1si6TmcFv4jI1hxjDEii3p+YVxWFZuhVVi44y4clLxSuyAZSUJ3r06yR3qZZkWSrx30CGEIXSdNDR861Z1wNNNrDimW0mbnBBarGXdY/N6fkxwzUW0M7plxStPIQuItz/Irsp7ElLKjMvtiemVxxGOByAYSvTDAeg6BtXVr4aIrpM4khWSXwnoH8cPqK1KWRGvFbfqLIUuAyaDjvyG54NXptDeDnf4Jz5qHJ5yVlwfJ8ke+AR9PkoXhiPHnpouGa2CGo2pXTaREKLAWaJxMk7jD48S6onzijks/e5bOBTRhspiSPKc/NH0z+xbIiQqUEREZ5oNZQoXPkzUCqooE+xM+nNkc6Gh/JhnP/fJepPm1iqAYDeJ2llcsAwUA4y2eGuqXGo1tNh0h2UAvw3LXV4u/zgXQ9sVbLYaQYRbcnETrRAsQgzPH7a1yQno29+Qv/FcKhDeoHcusEbXwwbI5XSp7aKThNOCfYXT2HYAK5lRFF42AcZmLi2ozPWiOXVaOLd2dFd+sbBm/uuxAKxkRyO2hM3VI11niu4kJIe4QmZFuFXVOo99n+LM4234dzduls11tNwbUM4XbZYWg/NFJZRq03OxNaR+gtvxZ3GHN9u5vkcJ+y9tQ9TSc6xC2W29YJ/w6luM5NZ3OMzkoV8uHKgCWHawtFRElGixuAyan6BprycetCInpkFOn0OhqZ/IwJMyII1+CP23sZMUWAhMMZarkT0SBznyb9rrKyYPupLicSFKwquz5wDkFVRs2CD36ryT0nqTxyKiuM9QwgX3ebXg1viruDTdhmN1zjfN1U1lLok4bbKzx4VRfN/TIY7p/lhkNqEJNhBpszfBSLFsymiHxKHf5Owm8R625d/nnyKzU4koLoe9Dc33Kad3slYGBZObR7Zql/JgGff0CaIg89yT0XVZ/p3XgNF5KAKX0opNlQlGapI2adQD/oaV1wJu0tjbPyiWQOmufxn2V9y/U/Wc5Ztkoz5Rzc/rdhl5pUcr03KQdThaCpLRArXpvcyAdPDNIJPVdaxwOS1deAOQjQBC3ecZLJKamCc5KUzjl42DApwOoQJ1hO5HITPlUqrU4WVNXXSGmNbi7uLzCIyBNWnaKW6Yh8kJlslvH4UGw8Agx+ABZvLmE05KXU91QVtosac4+I8ms0EhEM4SmZ/TgnKR5jCCbhMaim4XJ0uYdLZwM7hA95lR4wxFot59mjy3BeAElMl2W84JSak48RNnb02B5OEJ7opkDzJdi00pRqJaAJAmLewpAqC1hymcRx6WmHckszswv7UIR7u7Y1DYmvs5ddCRx4DWuQhFxCxOcpy+Ada/20MJc7NNutUuli3CKq9woeh7STnGNusmzV7Q27iyUFrAP6y3SLZigvoBhNjlhtawQMkQC1qI22rEg9HcHhA7mlckESRu5QbJXKEovRs4SHzWK4+ebP+DPUjWD5lqs0aGeCx65jMwoEV6CvqEcvdXPbk+5Lqsb76A7PqZZ2/w8U+Z8jCv9i7utURnpfrHEi2q0BleqiZ/I/MrYLRvZEJRHxYyiGq/FaEB+zqxrchs6sue/xJa3mqK0yvBXGl+z6Rk2ChE29a4/gadipGHqp4X6dGrEZC6oIVkb7p+x5ng+98HcYKH4qs2DWi7b2Dd4NS6fwjeR7dgW5ZVbUj5dG4NF2+VgRuy9vnfbysoEfwoVgOq7L8+Nzj+tMW/JbvtynGHA4b0OhYbi4J76YosHx8imz1+UjGAJARDOYRXM3SCh0QvTWXxk0eKQVLndIXowG7a5B5/911ldq1eLufFe5D+yAFvh1+7VI8d1mWCP0t0G8FSFWxz8NNYO4xu3p2ERCtHeA+QjxcMfNtW2aPPDibge5yiViVxvTUO30F+L7BH2ESrFsJWou0T3LQQa9+bdYeVi8ty8xjUqsHiBg3chLYGK3dGOiwdfaltFZhti3k1JOe+evb12TTJWsvBfx1Kgxd+LqbidHoBLjaFEfWW21wVw9EuX7ZZrSxhLrn7uffhYvDuusc6slXFtkaEChvqZZKxd2SCqF+kjViLZI/Z11qBzkEownK8dZH0qP60et/ieVn5JtO9NTxV3fmHKQMkP5swKl72J/kkIIHDblM7w1AGXnd0jxshUg0+xBtE1mDJrAqcNOTPzXKLVmQtAiIUpks9MTSwazFotBVOzaCzmqz7gzUJXw2xgY+V0O+PeC63tkjXfQGiWCmzpSGyexcwK6Iyq+3PgD611RiZr6qQ7hiE56xNOao4tHZTqA/NZEiGoRbZDUKAry1ltRc3vTIbXOa656COj579CdtKup3XTUy2WjHrUS3AZ6B3gUdQniDFBilUdLwBxOkPNuOmxmRdSCLeNCzO8lESky/l2rfT8jt5DK6sHPZZFxfNsW832eaH7xQrPCa9V2MqAugB0eKKKygDiLxc+oYBc0bFjO93Lr9Z0kzpWUz//CQG0Pj3E14BLhigk62EcROYTym0ABoU7Cdx0xzSzoNGiJT5DbKSTPnqQdNZTK1PG51VIJzZ/a74KPnEalrwUcWUapLrKvZfe84HVsfhzrTbz/piZ8Gg5dFWnbQTgQxPRUENpCQAt52RiAfEh6cX8HHG7lLYDeKZ52RtJluJBrI/3Q1dOcbs8NVZcid+0VBvqQJjkQ82+g0+Wl+BjUpXed0tS+uVzdSfPv0hDOkpbQ6+3Lu2ljpG3lciuRld9DeS/E7sNnuxYRqgcjhAv5GVsS4iBt5oU9ScJM5gfwr6YdWCOi2KbF5v2bQHTNStFawaojFAr1fE3bx2WtjYpEeAD8xxyCOhWCguEad5FP4u16ggBRL+GMLuU8WDXuzmnOgNq7X4sxNXG3/yWno9ti5DRp6z5cfgKdbVNSYAjKJRrhEVRR7w2y4nRJ5ALMydBHujfDBUHWu16hQ4AhzIk8V8xeSl82uuS+abnVSLHfSBTIj8OA2vxDjjJIzXp/X1u/0LQT6kpcEcdpOBwtdRWpc7utAFIfBDscEtZ6a3Uguz6oMUfeXk0VSqHWSK6Q7LSuoLD2GaITx3E03UivUfjAXFEGSx6XG8P+IPDz87HCyhvW4GQqz+vK5swCEOrFHrKtNkOHcszkZfZhfpCTlhfiuFut1bLnJfyY5xv6mf4lUCnzlSe1icM492Ik7RKFZ11LZn/g+v6CXKJ8sA2Ga9vZqf8ocniM7Y1u5kZaNPXYUQNZXNG9ue//pr7YGwLnNUfBL7QJmm48OuLpxRfH3cqDk+WJCRz+K3FFzGnSfFSK0Nox7zYD9jPg6gSMFHI1WJA4gyLbcrks8WAtMLFRjDcPdShherdQLLYpZIejPj2sec7XGR8wxGALUkQazrLOqdTgxvNvzOl5U7frHMz7RijwEKaVtWyj1mjbvHa1mvYReNMxWtgw311B89aKTijxa1I9laEXoKAjAPgmXrbSl2JnxH+j+L+BX2i1tm7aP+h/SdtAqQVojRgPRVoqdreRvQZ7uE4IchK9AARZdmnmOhhBuFlnE+adlxGAwOerJRwmr2iq9fSwtxzQhEsckxMFvoduV1LZzNTKSaN98c88JjHLLJmxn2mE6wuFIBDHOjoV3qv4riYuElvzSbpti/jgcllmmIdL2my2YKjpFNC4H+GgzlFayYSBljnYEmmp7g9uJ3BNhGtopf92r1pwHpqCKmxZJm9gDiO22LwMCfY6vSdmYS95/4mzFP/sqFxD3oByHwYjnnhEygvYSHTIKOJ4DUor4P3rWt7V74zTUBaAUydAnxK3PwkBZjut1kvmKIakPqslRerymTlxs59MGT8Z38uTB+0DGtiAFg3q6xyLoBGpjRwM/CU3QHAjlVvJ4fxznEy3pqth6TdwJb2pRkCS6TBcBegY22wVQ4zPvWk7+akr5ZxEN09QfGXzJeGNLnHQbj+M1MnVtDMecmqdc+M9MnOTLg7feAwf9Y+PvRHf72WAKDvxsjlilsM+xG0cRVn65wJRwWQZAFD+xxUTngUP5BMiJPH93BhmyXJUzs7J9TMR8cFrQvhdHGcWWzFZUUHSpbV1Ors6s3YSDVTEVb4+1H9KCAQTM0wCMoSBjGbAIhrvJrMebAwR6In6xX0saSZLMh2QxqZ82P2DWmxUWGMLjIWI5YUHDbtuB2WZ5fXvTG3HHNyLqey7iFhHFcBbM5mtgiu/e/iDAXlTNq0jerS1iAJ2jlU0gLNCku9G6L+nfK/Qe+3GFym4YWasEMXgBvMwMSZfDjTiIZm2O1qM35/3D82K/jkI0AieFwekiU4lLnXRY6WuNPmBxUY9a57YlxiGNueGD0kgVqylPitSGArmeEu9O5U+dS56nY4JRm3HG2nW32kPIMl1grbyWvGK6/J55TU4tjgoE3tndV/cbem/vCj4eLSRlc2bd0kRpGNCAfPFQLyOvVOfseWtEV6hYbNzYzQ7np7jfj7mHxwmW2Ix0N2dXzKUVRHMudTphgrTq2vHo1DDKrzB5QgzVmRMyTH5XUUtuKFoCNPVfx8qn3ZJUMAQ6mSQpzG1oqz4d4DoSj5KUGwxzeWYzmpj6HUYKud1Ee2PqofalTm/F0Cg8BcuFJ9MOPbBUgos7ugDw41pP60WdqkRjZRJVNCVnDBDzVop3OFCSXtPjKgBaI/L+IrLFwhRQeey50JlMTNSYYEXM5pZRbBrSlQBhkvCQrIG0TO2cSgt+OkM876H1lA0d7+va/3X5YDxPlPuwBsjJs8798yKjGJBk3RAVGrpWZH7PRC7VRF9FuD6H8TXucucgPJiGMenYNDXIKtnTUP5IrbJAcNc92l9jfsGP7RRfcov/dAaV1Cnk5AOqDkDc/w+EF3UkyhWrU3QpJ1Jh6VHy15yUZoKO+TNsLKr+lAZ7C1i/uQSMBboA8bdZuA5KiCzKTU1KTVE+qNlGJNDV96fZ6D6Z/2AQfy2z2zSHIffNrfdLdQZlmwdDS4oW3Bw10v6Ese76Smq6FD9avA7bfP3ZyZ9vufCk6ZW7wEWIY2Nq7GG+rnpkNd5QuTC9QtnNwB5aiK9iVGKy1QjflQM1Yv3eNisgJCNzSPm33BsLDBb+Izk0232tbj/CcvsHfJBSBGt7BgdLNqStNDXexXlz+04nF2rMTRz1G7mri1AuJmIr4mUDMxleTuC6X+I84nxjRNg847vXTwPLCvAC5nbX30Kf4iKVf6FOlF1BNazQSPiHCL7Zq8aAmQ0i8xNcDJYHtO/PcO+Nd3wDoa5uI1Zbc/mBY5NJQFEn8GSU8s+1hxoJOPcnwdoTylQfkFkgUxK8mrEaIsLlZLGqVHOuW6TLDU3WIGzSF5I2qLAadD8YzUlJ7TRsmo0qollMlfEgxDiJmPmvK3r8M/KTfbTLSNe6pBaAN9NeOC0W2n1n5a4hQO6JioTTI9NBRsica1UJyZLXXZvul/kftq2MVYKsVicOB4GUWUKwQizKwjBCLswcCdBI3gIAIaSnJJPXoRvylTe9bQOo58jEBSJW6q4NfcfWbaLHUzh91EflOn4xZzunE7eZMvCTYBO4eyLbJ8XmyLUCT6VttCS2sgx0xiZYgf4VmjkXHL561EE2XOvPCfm5RVDIJVsLOcocd+P818rXGXHC2X35Nn+e8/xofiBiwauv6mVkdkRlyZWQjhUkxpho/Nu1x94N6Yp+2y87NGMzm/W57ked1wTOipaFrtl3Ajg0s6Bsnh0FBXCXtRkZbgORLjXmmOz9upc/+5A56k7EXA44A/7T2DRFgK/Zj2nQvgn9yTtLQCI10jxf471RNCXdti3KTpySeY0rLwTI+GyJRc8Ymcp2F8jxRqw2wxeyuzm+mpCyBOa4i6EaYtUz9KsOFMzQhbkEgPzgW0QOoxrU3PaYJWHug7ioSxCnAuMo0a5Zy6cbGSMWMUSmMyxoa8EiEnCmtO/9jio9AvB5LGnedIHXRj7ysquyCXAv2HVDBW9R3eWo6R1vInlA6ag8wvsp+q3tkpp1OzmN0QO8ZQ+vkcMQyZhcZ/kjSDtrpucpZGa2kWSqr1TaYEj60rHSbYyjG4wqhGkPwp9m2rrT0ntw/uX72S8QAPttZ61BV0jkrqvG2OHSBJr8lpN2XdY2ouJ/W6En9UeLFJID6cuA1TLYhWbzy6JT4VRNZMg+yR9YQRptoMcy8NvQM0kVVRsU+a6njItkXXlotiEmGbCqgcgdSoHXa92HHPKKGJO7MWGHj0R+jTRNthM3RQB4uHw0ivIzJK+wD6NCsCyDywz7HzeY6Wh++xxPxnYS4ADySYpPoZwHiVHCyRRUqYKcKAvHJsRyGhnqtD8BIzboy0N8Q+NbeMwUFLywJtRrG1oBU9xuVwLF+764F7oubqe1yOZvr3dIvLBzWcMsnrcWPn8vgZEYmNwdjvSMD3PvqpXTfp2V35j1OSxZHZqZowiNHZ/8g2gaHkpP9f1boL1BrsntEflvmy2K9m8szIGOZTITqOF/cXXgEqLHSOASuiw/XQMKvtbST9MnC1C6CYDOedbXPjkZHvKTFq9TeMPu4crSWdOgsG4oyBEHPLZN6rpozCJWkrtRQreG2lkbal0aqF6PfYlYL6SPU+6eqvZ1EDrqxyWkT4yCmlAoaOqcRvSqpQSzNU84iCgLLxcbkDmhihWWQi5006G9IpNkdZ7d61RlozB8d1+QBDyQ4yLOgFTQsZfAxICw3sE5eaxMlHJJNQjVpdiSWV7LMn1tXJetDLpYmnztVmpxICKJyy7s7WvNLSO0jacMqaAfzlpRRMxYp+T/zzL/3P5sjJhwIzvOxMzKZvpvAaa0IGpYN7dCBo12lqbqgYbw5nKAicHpeVI9k/PnkpGTfQafJqlTNBoDr3B694fuMf8K+DEVoctGde7zQsyJReSKf1xJdNNLMdknTOrCToa753OR6/22QdOGTNUIWd+1s7Hk21W2eKS8yeOkvTl9aUZycqfXXW45hdjq6qzR7EA+Y49apJXV0AWWHuq+mYK4vmfKiKOd9fev4Wf5JfmBMGgrRTSDgFgzUNhhWe4rgwp/+yxSDSKtnTrO7cf08DttIII3Jk9PAlmGKzU5f5HeO6DQCoPdZGSrAGueaLDAYg3JecLs6na49M9IdHS2NpMKHGM5IaKSQmOZh/f/1nSl7Su8Kl8Wnea3nNlvXen0Qg+l4l0n2Q1DYUMcy747ej+ov8XBrl/3oZx+tHq4MPQOIpa7mewlA7VQ3++4pIxgUO0bGD8Ye+J+iIK3Hu6m37Jb2aZQ7L5zvt1TN+Lc5GhZDf4OOkRoyk+xSzRcu6mYEobTDURHtSUcenJD1NDKrwID+XgBLEbE/9aNLoE2OqFtfX+vzK9w/okKTBAYgqgcm0uGdDKcEOfLEy/LkjCyzVISmEFppN4YwplndiCTMox1TwOlaJPr/FbmjTJKVIQWIPmq/yeMqzHisYUSPzmrt6i3clw+FcAFsN/cuHVitcc4kZvFnSIfsJJK0ZpvFKt/ZQ5XCOMnYuQHj5P3KSvpnSgo9mFMsg00uoBRXJm9kh9QtfwZBNUMUqMYO7QlydU5OnHYxGyizKg8pNYTHzO5pUm1W8LVAoOpUTJA11cAvd2T8zVkwxL2F+FSBeqJliLOrjrwv+2OmUDo4vjOL3PR+L0CNmEm1k1B4bKf1W2iRkgrwnZLOdb86J1hfCf/M8RFWRdyh7Z+SWZ3KRf58HvD5q7JT6jd1S3u2OZdaIWfISFil0TD0H6MoRzZKeOrKAU+xj9MHnX2YrZRG8kvjV7Wk9ENlhP62uDlVnOr7ZSjMrDEL6qmTasXCVZNl3VbeTnLdcHTkRIohPwO0jJtm0b6QlNJV1a2zEK7VMkXa5HQgDV0u2yqChffNsJ3WCXaE6keRz6QXDpIvGPIQLHRqfePWw4/5JeXmiLd1zIpPr8thJG53X2mGmSRHjPURlm0b5aiPbUK5r2cdvZDGRlrTmqrhPLNdzR2w6ZKqtdLaQZRFFnABuKFvFA+0gvfX2kSH1HNnqvXRHyr6EdmVMmZ+YIijoVLtmGLTvjNxoGll0ZU/IjBFiC53Q2PIQTcC96sjvNotoaUSSIIl6yLk3r4wlPUJmWne8sSYpNkElaO9Q+AWje340QIJxXE6yeXvD0RFrRO1Zue3V3W7h/otDdBkNLmbhQc2MpF+ECMglkRyZeeV0SbTLOTiHLufBG5KGZiVEX6BItVfECVNRkSfTYYQnOtbcwtcQZwXppbYhVlLsr4tKLZaXRf9XV8Sef4oLdMYl/jB+aooF9JQmqOtEcG0rxN1uti+6HayzJ3Iy3NFCEzq4AgDzH5kgPQ1QUFyJp8Oy8yLWgGJNRIWmIvSUqAcUH5vsQYK6Rq3Ee9qtqSpgVzmeY5UTVgv3aSgqxkYoKw4cS+NU6VoWEiuaK2f8kBLlV7+/oeRi6UL26VhBNLLndUZltjwbR4mP9YLkkxiZd7w/y2JIwjPjdo886JI4A6SVHybMYYihTNcutPic/kcRthCXgwGHMSvm5BETYO8GlrtdgjZSwqydolKY38TpAxJwRuMHt68VAmIPflnH4PbDEtrMujRgV7SHWhBYWJi2Vz7OE97TREI6nnwZF2kexXXZoLV0MxKuBLER2sUfsdE+9EPZzeY4Y96y7PeCyvY1kdw2ux7HBf5rzCGM8FRXKk0ETo5ilW601bqN1YqVCSnK2bCD/f0pK1NCOqf6YBaq3DtQm+A7UKV2ftD11mGWhstzGmhrEeHSMwxdHXJM6Fnf88P7Akj1/Ys2UxwUN6nPuDurtLD7wyGpYCFI/jQN93mDiWP9rOe5AFYOANy/iCiXGGXe1bHb1mZaFArzDOO1GiL0uwZqHcvxcKfyzE/VvltRjE5OagxtE2A4N0wZb/7+34Pw7DbSoWFDF5uHibq7hDuiu7wUot11F/0XtmVpbwDxDU6byowD4MHcmRXMyLDSc/b9Xar19jPAtANLibC8AwTFlOkmZ03ycldvnqZCkRpbc221QyVlZoce4E0sE0ib5EGS3BmYfvvwN0UXUG6IO5QPA/qaK87j5i/mFdWk6DGU8RnG0lc3Oqm4htkzXjqLogAmg5gQsMrlHzqRKz1SpVtK47fst7T4lgM9njY+01zHVd/tFKGY1CQSWpU5PP1F5wUjtiQzdZmY6aNXcQbVKWU9sFVNW5+t6bqBSHXnHrgO6lu84rIFwu3SN0fvtnl13nlIjqJdKL8aUHXtb4eYhpehpDGH8JJhoyExfhic4VHYr7HBsMno4JPFHlEuf4KZcJHS3kfeUSOIe3KeeSGUfayo3TkoT1DFdvZwg6f/P+TKkair7Gv4Tyk/jNIdWKfIfMj37+8hZ7jdoS6Tgf029ci7Mc4xgzlECm6q2IpKKcdK9sWYFQBKo0t6dDH00V7gbLydo0qZ231netZuZEbgAoaHZpCck65ULJtxnGGk59XrAKJhYeWXEkPJWnKbzhI3uNtw0/j/Dh+0XsmmPfa9lxgp53o9BAzMMVsXY/ZLcJo2+gjNsutuFan3gZw+p8VOWG8YX13WN67pliNCY1IR35gPtvFzK1SnjDuKajdZ7SehOXOFeqZKeSFNY/NFJQtiAA7eDd40pAmwVSJM6cOa0CVaW9AXoOdPtR3CCpeU+Tm5eeHjQ/mFzUnfyjtyJwooW8zwU9fuCBrjvl5PK/+Ssfs06j0DljGmxGUBqjNgN4AxcCtHzBz2q4iqROuKJn3yru9kCnASK/T7fQbiq/RAi/E4rLCPr9mecxUNd2qTU7GwfSeniad3GMIwbq9NSUxRgW4ruwu0a0pTg1Ot+H9/fb+UwccODO4kLWyCP5JxhrMKoXS8j3KV514TgCSFqZI0PnXXLsPpgXJqmmmeG7Qf6mGmcLqr/dicA2dlZ69JkA6y2ouuwa0lNpN5IrxtMks/fDvL0qLRoeG94503pMY161L8O9ck7WGk/KvVVLuOHEv6Kv/RHZ6PMdK2bo6bNMlioWfRb13/JMKr0ba6Ms7Jdw8aof5kdHAANMirPt4t1qXmg2LySYGkoFmGMhC+2DLhlpSfZN+wz8cJ6rZ54QEpoa6+drsk2T08lOkSEvmzcWW8jofnbazQbko7wuhr40BoS3qYxmnGtWMxJYQo0VZKtysj9+SZlssfWIrqM8d4f8j/F1srh+qyZ8CtG2kGcc1qxtfs4iWX7D5j0ur2EfVq+kFjyKpvUDN70kNxVQVmIXTrWPENED13/abfBXvXNFzGsfTnL+5oN5xy3B1eJTWqeUe7zffJLIZlF4xjcWWJQaq725iLrampqxEkuv2060PZ3SWUJthNQHGhmPEecLZs+dK1D8tlcNpV3SuLmoKTSgm45d8oBgk/oqw3i3O+swieMF0U6VlVCG0MPHLMjA9m+uzWYdVt0mnHdTzxOVHG3QX5sTHOz9kSn7HdaFNdXrvyL/S/WZuLSJ2eiqv4ky4knfpu6wxTakqD/iVQvgjqbzXY4oMNkleFlh+aGBJOxsBNNsGf7fe5zBb16elcPTUgUHh02I895RbLNfWMzOsU+FJozKV+gkX6FfA7QdiApbRpGkf41XToXMi7Kn9v6baC8ASXkD+UZoSVjEwzlGpwnh2aX7vOSudQeycnRSKcvEAUnYfC5sQRl1N3YAJFmc5Cr7Q++NIYTobcnZ5FU9nJZcSUOL2N90BAQ2q6aCQF/w7jR7vUTI14Y+5uurFUqt2rFcWWLo/rJknJeBFpvspFoO5sm5yFpB/oS3cuHKk78n2la7TlwfvJ7+ZhASmm06lqI40m12npvli97/+XOMrnD/0rq2oherYpcQkf3jtA78uzSVeqfZ2guyBfmS54o6m48izQzkV3FM42vzhzrdudPQ4JY2Pg/HGihzPkxuOKZ30I+mG6aMYI55Wp1nhzMyd1U+cF0Kmob1KEhGR22CHJxJX2/5lIljBr+gGNKuOGXcjkF97GuVl9Sz2Z3QSLAQeakHopGPJDBPwQ8x1Vz7yzSi6miTMtXHGpFtD6Od/BLOJ0nan6mIGi5kVj/tvTjtBmVZS1wea9i/75bdoisVes5asUXHOjVrA7VdDvkv2p1gumpBbQkYZcm7s4v7lECImqv53S2bSkWIB4Kjb91RxMxi2+Eg9s0Dq4/exyxnbS4snpT7qPSgYkmBJxt2uRNiz0WLRQY99VVvQh4oZrMkwJlbhTzCWjQyMqGRHqPwPVBZHrJQaNg6pLnNQlI1gEtpqxluOQP9z/TpIydWQnGxenM6deSgGO7UAJDVfz+Iml3oIwvgct3qhzo7SKxH888DNgiOhlLIM0ZVoZO0iZUR4F2KIwRDmCvj96i/SHWm0JI0NhixYa5UmTY1ZxNNypk7Gdmkts84nDdNnTvhqv9D7uGK6eZgcgPvhCARBV8MrBHBMe2tmD33EtKlFYODjiJa36W/GuTZMn1OmfnFb2v2erEEIVyIxGuChtTJMC4Br16Lw1N2zKNNcy4w/mZaSgsio3L3O+zNwBkPrRDrIhE7Hp1NhIEwd/Yjh4iK60KaHI1uP2OcnPeN3fz9MBwPQw46A9sy2oO2u4e8FEZg3K3zGOjf52Sa0qYFPT5PcylbbJcmrYgCA/l3CaJ/u4BBAIGbNo9XeDVQiAvVOntEM4FgPPqQRoIpBcL6Y9pp0YCnVkJ5XIPXkzbrt+5EfSDkhEZvdYyvtIi3FrF7uUWfM9ruji4cSAb2chxx1XCRqyibdtKYZ0x1437oi/blNDuQBM5CU2Q0mL/zlelwgNQBx+bTXq2DEX70rmlg1zgNuzczq0FZsUUdqFEeE9QfNAqaOc7xNDWb9FOTJXPW1XuvlGO8iJGqqPjGtrut1Km0y/Cb+qzxLXGpqQMgaxB1bLXQ2kDhitRgxRVWPTbjv21nwNE/bYD5XNOq0kdtEy2p10nSU4ZoSpSQqS/6ec6s6csF3m5nRQIQR78hvmNxNpOESSqX5GEvNyPi+zO+3v5nNzOaFMdyTms9MTQvKmXra2AHa8FQ/qCFrijaZBmZDw4d37CfxMcl+Kv4sYJOcf3ZO6kNC+pv5XKoDMe5Iwhkt6r8HEUQIyW4Rq6kjvA5eFxAZcLvuqCr8iFczlMw1u+YyFpxbsHbDzEvgPDZCGJ8CdOSZW9dL30AdPYtPFIv47F4KwpDHCnJAZS8p67u0MJaMCaQQ8bBc2dzL0zjSbBDYboZbxMTlNmawrx/ku805+CeY/uOmjpSVCNF+qSiimvyV5oaluW6bYjzee/PWcGWzlChLj3mi2kQzYmCIN5YXETQGkF+E6eVonGLIbgPLD68XMJJcuS0C9wqJXVkb7uv2PSaL77TbQvqZN/Ur3xYoyqNe9Eix6iWyIT51SthgaawThDywwIzzVfSw6TojgiQPF3zX3pg68p/8i20H06BI4L0pFvSdmUC0HP6HuLS1ohsWJeB+WcoHJP9reBIywcmqjeLk4AactNVmihpHjCHcwszuMxOcErBzItsapMMo/4k77Eh300Yb+HKLHSGmpiO9YVGawyIHdHPxNG7oK3Kxou52q+rvOX+aWVQngcvmSkGHkAjmmow22wItgCRP+0P8zVE2SaU8c4dBM/pFElfTzbWOt8Naqg4fkztg+xyQuoAShiwSgnjq9evSiWSHvOekw/9LHl2RcjKdps4y04ZHsL4Dmc5NpPVLubTcipwjq5E1buxHCND9PR76yqQbNVk8NTrcoSkg9WbjDe6m/yA/W6u5lEZebwe+/crqbKN5ywX+Lpd3MFSo2O9U3Y2YFZ8DRZHR1dWq97wR8DEUrjw671eYTNzY1Qu42zm0CPQ9X5UB7jzWcSvjJZUzt7AEAg77iEygog9yONzlI14njODBgdzttujp3vERcpWYqqC4yOXNI5sKGilMqalytxN4p+H/RsTOrUu1pNMiySK4XNfSeodZZMlvumE73TuGEzscxA2mz9XYiUTYsS3rJEu2Wst9hrqHU5EbLzGHxq1JmuixC5hv5hOxBmtHI0fv3bVwANDW2n7upuBBR5oh5LgDKfeHDFPXQQ4+N7Zyr65Shkar1Ipcn446MRwpB4XTFsyWqIQRjOcPRlmvOj7/UpjAXKQS9fGH2QeoZTSw6KQ7jj0ZYrOfEdKWTCNg4g1RPq3ShPli99W4nkMsJv6zMOHLHsCNKcvzsn+wHp0CCwup/2HakALUjq9gRFqZkWJ1aNolrXevyx+klhSyBQF5GXKFwGXB7PJG+aSnaBfi8p//o68esN1tKtf9lCk7NNmJGHEquWjK9kPe25f2vr/yyG50t84qT3oKlM2L3QiovsEoB7jFL1a7V8qMDa5j+Eh/qhQjlL4y2AZqU4YBSLjPMV6ZWgH52XvWzor7FwCpFUb58e55emnsnS+dFKD40KMwF8B7h0AR2Y0Z0ylXSf1zqjHrwW+Jb6KIpPoQTBn+SkKVlo170rOE9rAqAhreJi1I1Rns3nVGo1J+RyTW81su2ozqOeXS99C0kjBmbSOBYkDkgmKNuBnQeQE9JTXOW7pgkUxZlHudND4MJUsz9M02LLB5iKeYvQZFwg8+wEEMf2GeMJesnoGykyYwHTaFq0kybc/icHqzWLnDB8T0aqWXX3VLBoLSudP/sGdvM8GGp7zFuQnDSC8bLwYy5gQ/afKUY7wnVXmR7gQtGWkgoykTF6wRQbEReB3/2uTB017xmgLP0Fwu18VselL1eBUz3FaIm4dz43GaQnrVDMH+P/2byaoYIzgW4OwQ5casB5jLg/H98I7rBOHHLC3tLqEE6gYZdI1fNuQA8CHrwI45ioIfmJfjU+A3W+lOotK8y9fDqlyKphe6LKJ0q9JDKr2w+rXhWFu8+8lrNrJfZvh/OKerPi2Y5/G2xQS7nBocXcqJZqeRy6AjKpYs5lNdACx2hDPU0TuWQvzIWwKzoVk0nIGTcNv6DVIoQZ+LamknmVZpHrk4twsZi+MOi9ISRrL6YMRddZnep75myK9aTvqEvItTYwY5viSrKqPefPwxho/1KOlTEPIL6z2SopA6znMEgv5vsiFIdANEUaowLaR1gzjWH+/Msvib8FY5G26vI2/aHgyMtCWwizE2UPh9LVZ2xsqvruakvuDtuDJ14UAKdzoinEExZzQwIhDrddaWdzDwqk5fdg5cygidnt/eFkung4xGhbY+kYBDU51Vv8hj/R8IcNTtJfq4MCZxtcMshZ6yqLolbT+1BfrAGgU3lSs7wWkIavu7kXf6nGG6A/Uotq73nhn/UcmGW87hOoCZuJZk4JulOCYIyyVFw5uUqo1yX2fmlQ5gJuq/9QnTAop/a3X2Se81/aTwtKX25wn5z+Mv5xHTvtPBV8e1FfGgbRrzRo47fs50/jnJb8O22TRpW8X2dmC/50MCwpsR/98iyImWCrNXnZjQQrlnfrwJykAdz7HSykxkbxG0TPaXmCphC2ttduJsoxAINwvQoCv1KXEx8SE/zAEGb5Af8YTLQ6/dH1vLqEJTUOn3PnaXchTZ63Wp1J9tn3AF2eHYIYMXBupLYhRm9tebvGYFWPoAyLKe4MPBLRQ0fstFtwgqXieSEL4sHwNjEdkX/nEejoDGvDpq0zIc4gqXPTDTYpUEdc+YcW9RXdHlYk8Y5OvZy/tIOt6xrC4geznQyOPUPwjwOurCMuIG+nnWKMpcnm9ZZ7VFe3rnotimuoTxHX+LJfN7Vfw2PdGqXflEid0Qw224LuTzS7E/SKacaUiMzkOFQnTCOUe+CNjbg3GNVIktTZ4WnmGqBHZSDVQkXHLXkJT9Ytzp0WsfsAyMuDCWswokUP3gb+e60qwMfWVlaot+EwhdIkkqkT7i7XJ/Ukx53AUl0SBHn1zdwuJ3Nk8Rqs+1NC4gcnXMs1VuIA8k4ZLuZlrZUJ6hLF0YSxHj/Y8kFcNEM0521BFuSmPUQV43VY0Z8WKx0r0yIqU+Q5BdtnlU96hazTzFhpvNaXwBQcoXSIWgG55HlqafRrITd0DwRY2CcrlOMJCpGHMXwpad9xsfwwhzzmK2Vw3S7TuSPD39auFYwQENQ9swLI0r8hb/h+pSnyvZ7KIfPV7U/Nt0YlMiZ2lMf6Ojo5OdEFfzM8KK4uTFMKjZnw7lhQSnolpGJZLNRyLvM+f2kLiFNTS/NW7+vVAj7UFqMEAbGeoyjp1WlyktWW8WOV09lZkmoeV0Ac+6vVa4XEDL0Ys+S4xgsFnJhEFAa/dcCP5M7wNDDSc2h8zUZqO+BardZqeL6ckrnIB0QS8gTtTlwl+1GOHJdijjs/5E4gRARiQbEg7F9Dtog9AP8OLkwC17nXimenWG8T+8SdICgpkb1bZ+b+/cp/ev4yRSp6Yy99TxoTUXYiAxWUZ2Hu6bWlp7Cx3Fy1KXZ7Sjha+ldS3cW5KXyubTI38QJI4ZcKX8TQzDcsKE9IJzkxOcrUSLq0aZZP3f5b71J/nwsrqPtmknxN+PwgR4mVsgPjDGLUDpwhscykBeZCZMwpMWDa55Y3NYaTsfrrlJrf3WsUgaqQjp0+2DGKs29jKp6YJSevg4EBXagqr1sEHFKnxR/NMi1doZ/oVaHK/4InQkGvebYPdfrLG+xPU5gdWfsHjQsaZHkLmXZEO4xMmSdeukaXUPuaQWnhYSTpIrk9PSXpDdd8m1VcWfC7cYwEzSEeC+AlWp7pIPid3L4xiIfL4adAispoqnskWtfCBXuEbnt9tM6Bc1gtFJzZp+sqX4I59NCtLFGOXRywUDG89XcmmW8dPDC65gTq3Ut+bezoIxOk1fhlpMdn0ztIGGHEb+kqlI11jOIbdeq2OYjNCRed6h5DL9d2n8nA/IENqCKzLhQOz24h/E73gztaCgHHuIiq4mnH4ujN/JvbOsv/h+XvZsW8pFb79MnsSUkaYiGJonjyvKKW428wi36P2ot8THqQxufiJ/jwO8vwqfOP7gzu5hPpMftCL22fSwEeLe0P5uFP9RLVEajUkG2ay6bzqEl6Kb8EDfN80iBR/O96xcJQ5sd1Lk+zONgZHbu/bI3h8A66gGM9TgpbBk3tWUekIJ9VTRh4lrwkaMrMpdEfkJzfl7uxLCChzK767pdDV/tpPRYPFvN81I2k6KMvAAQoj8QPoXA7D2VnSASyQM7gp0RsbPKmSBN8vfnAvgnjnf/YhJJOq2GCQE1Vxp6xxxVK1PFX337dC5sD6nCMM1qJrq8WuoKmUzhmgq3Or2zNF7PoMtCiXZCpRzjMVIEIfaO7idgOkr21/mh2WAAFqpwdqtuRVh6J5H07r3s32XnXICJqzQGWEsaqniCCa3GTjoIWu47wxtpEcLChieJoh1H/gjKnlpi4gCTdU6QvcBBmVoBpxycrlqEHQPXyPEWDJNblmBQecqgbMp8XJnjSzjfa8A47jq54NR7dMjpagSsRjmb8BPE1+ihgW6MsSwUMvGvk+SyZ0JLVVdI2gtvy00vizGNvByPRWGqfecVuWsAad67IRh88lG+mdFQqjz9Mn9W15AWIuo4aOwaNPJbvNrOxM4EwwptG0k1RUyojeUMTluDQ0PSv0JVMvNrtB7j1iLXKLMfBmAboERcba7Emd/fXeyHyEYpj52VFOhu/qyLZgFpSZuE3O9zslZ6Pywzth7SJ8Nhqva37F8jCL0E/+frH02r2zbe2ku1KgpbDqZ4GfVDdrjKrNVF5mX2lXwPlg4vHWMpusBhUlaQfdE5Glml7kjOMqZYbPOy0LjKDDW2GMT/zHJlx27bYPQ2nje9ZLi7x0O/va9UNTNe4aLPSmU6pdB7TFKqmSAvYVdmNpuOwvuCqhp4DnFmSku4+Hg6gGrPJHCmjR7MhlzIQ1Mcjp5mtUcv5CEgekPBoP/DhFsIyxeDsTyXKmIvWnQoodBd8QRA+oiMmQA8GAWnWz5ny7kAsrv49YfC8D3xjyPAfIVoc2mvlRrhri6QPVfEjcDEH/T9b3YUvM2ySgrDJxxkMf7opnRfKxJ1/5qMCjd8QiAJW2n8/FGrms+aPGexKQmPH2jbWEP82BPu2ykjlS/64dm+t3OpTdcR8FJJqlhtn3/bBjFid9+M1T2wpE008DriVdxwppaZsjDGCqadQdKdP2Mr7rn6Auj/1ODjUl0eWVBfALvs/rMIJBWCLLHASMEsNOj6Y8CuCIFkBqW7p75+qYzchYle7ySEei9rzDOtvZqb+aUQQ/B0O85w28igJQMJaMBVaoweYISfPnDHBfkOejOLOzCAPI47qZry25wjUlKeJxUsSZBTZLdpq0K/2WICuse7DCMcK9toKaSGabhvyCvJpYb5SAFx2cfn14nB7WkUBlEOyJbyfm5OsIdgILu5UN1O0rM2JPI1ldFgpmXaeEwczqhmau9pXN1feNGfSQO9En7G7zY3QrOk+tyfdmkL+5gtXzvJbSIwKvvLT6wgo64vljvg2qRaVVabIbw1VfuREUHCINCOmRKmeXK69PHzozbH8pYxSgZOrIe71aFaJ0cci4UHNkW4CNkaBQ/uXNzMiZ4VvGJVSTeKe9I30YlBR6K3oR6OqM7xx9oDAmVC5usI4QWUPhjGPQRs4NZjgBCw669JTTjP/TzzYinLhfmc6WsuAGg3cNIpVxspVwxAJQHkGKtJnOy8KpqWZ1x4gcSxJVtNmN4tWVFDgzTE6hjXmEmtpGveP1FW1FRnNYy7BBpdDk6cguSknZW0BjimmeQU+6qCz8lOGp+ljogZlKpBELPEnaDQ9oYsz/SPH0lcJKe6fYzwE1/KydVejV2JHCfbAeBtep7Q5D630bIfGKPAzivcD6nz2lO142PBf2lzRUWhmnh3z9dccmqoOKSeXB5iJRNtEb3azXri/RRnyOQGgDBuVz0fSZ6dcnXFbVtqXgTTAVgwnC32YZnssJ00g8wMjYBWqx44xdxuIo2gSfgQGl/HT9N/zBzrUk1xVCTGDxdQwuAqjaPH5WElkwhrLishRXRxOZaKL/r8W6KuI7Re477ZJpMf58D2s9zl4203YzkQADtSbUTSttWETUvVskcOCNlPoJIAeeueZXY2Mwk1yhUFO6Ewyb9QxyOxNf7jUoc6gOcxc0Ynj48VHjWWdXoO7afpPf/wBoG92LHGXUgEWKNho01XeOSPRldmSVI8SX7YRMCPpg6yz1PMKqsQcMeTXBA7J3aE7/Gf/62aYx6/oNne/5+vs1Fz7NZxLan4/d+4hGlvkQSg7TNz8+XmdNJdVfa2xB9gYWuo+6xmQBNDOjZUu+/Uc28T2+XGDG7+54BKpaIsrbLdAt2fiifIW8h0M2RbwWKSbWYNqy0nyHkFRgs3PzNPyN7Cr9R9K5Hu2CF+YAdQK08AV/dXUx39kDg0uslQuMUtKW53MWaFoirOD17w1Wia1e29HUl6LviZ4a9W+pFLV14S5533YFIHw+cP+wDq3RW3YDL9a0+EL2qhdqyBmySUBTUa1hhPHdHphK05pfPCVTHnMdUoaIXmFrcQ/IXTMSrgDkJbRwsUrp8b43mfHxSyp8hxK7d+A80+69zUkYdKTmdp/xF3XM+TvIE1S+7Ro/CnN7fomFuTryrSBEulN+lP3e4sukl2hOGT5PMq+9gkC3jCI72emIFYapJY8BHcSIeIbgcujqesUP6VPdvamhLUrmMTfHa/KxwB/dT72HYBSPCR8qrilf+H1+lvAkul/aRG8e258gQKClMOhg5HtM6pVqbet5Ud/O5d/PMMPB+3Gca0gVCHcbILW1o8TIQx6BzcL9WEXdKUoigacTAo3XWf9wz2ieSAiaVGvfK6njHYQ1LgO+yqUY4S4SYcYRtXwYbl+aTaeU5uTDyRyNoSetRnPZ+OFkbqTjxdRrIdWX7GBEv5zkakGySn7txL6rfmAqjAZaSA5uezPThW3taSx+M576OZ3RGiqJsVki3+weXV95X66Mr3ALl3sVkDlgCpsmD+fUutDv0MYATEdup5en1IqW78bsntHBeBoJpTndvxUtu8zMFpU+y48Aq6Kh25m7/Cw+xPqREtQ0PNIvES5oGyv27XKmnPA5skEx5kI8i8ghibVEQlbNgCdXAzq2c6op3M+GPioGBxhL7FpiP9AiBTZElsJZps3Rt1SxXK0sVUsiOB/rXxojKyCZoVB7bKM96pLTmOMzYBUv6bfE4QRq+T38wpo0jIO6xVbRowqQ3bK1LkXPFdmo56cf6LuPaBoqBKNYeXjpsEq8yXe6XaTd4Hy7HFlLWkOZKvhe7bHQnxzwM6B1klhcsXNDHInTLwxrT9Y9W2C2CYvz+OKLOG2CSZowaH+vKb2tF53L7syiu9RNWFayTVslxM4/HBPNni7I17Kxi21jOvfydQa5ZLOi1dY2gVv1TSt1mYGBjy2vTix65DGKjPq/8RlKfghKNAIQIAx2yRGqweQ/3UUsBNAzOgxxoH34i51NSN8PdRWhXRk+8OFEUomV1m3XfWy48XAIxPMtK0SmXqBsydIF+rDcsr+M9BCuZYdFi4Tytc0LwQ8MBsevC/xGTccSu2S2yc9VfDf+T0XyHMXWVzYwtJoDdYSfFAIpkjXNwPtBhxaQ8iQVeudw7J8xLDik0D09JTRlE6GugzPesL4EzVGA+yGGsgcqAkFSMxOxS498R8O5b3mq91XclLv7D15yddTgGEK7VJSe+qZ4hVI8htVn2OEBgd8wjGyp0IGpBCop5R0Jz1/cX/eDhnjWQgs2nksl3b7aaPGYvB/fXV0HWFPndY05bTM23hizRmDcuvFCqbpw/2rm841TZ/WT1brFnQYJg1+jfxuv0pLV0eVfLcaJcXFJIBkJfqVhJS2GQhLrqdUzmkZRYQhbdqGhWk8OZ48VIQRot9ljM7Xe+u98F7eM4oFKGEP9fuZ+7hrXP/MQ+afG74HQHmjhz+8Ak12j5i4mUwqhZY/8qh5bVj8llV/ogvlU8HeJ6bITF1eCQn6govmsU6tyQ9bcB5Zv2G+sJe6QQIsXqLYG6TCf00rZvhgJF5rwdS/4DV9otaRJMlrG9bBRIkCR2ZNpWdBUpX6kdGj9pcc0gF1TD5KT/Bv/2tG6k5TMaUmp0qk9SSbK4u7XMYSui4TrqsL1WPBfy2NlTNXBn3mczprwcZuxsUswgZT3/MAneYDw/oHybQ5rQ7fDUyltUZCB5R1fKYz7QRSU2wl1o6nRUAD5ymFcNFvAMc8KO/fug1Pb0YZC8RTdTpf+9I8LN30iFPl4XpDD5uZWQeu2Q3jSvX4MUMuL7aEGe6rJcP2CS2UneHGC4Zfvj/jfbQDsg0c0sjg0TdHLeWTJnmgM4LXG+keudU6fBEZ6RrnSIEdFU++Pq0q+NVQ4gBC1KD1OVi9P2Izqd0JHX6Y/o0ubOtSyhiDwTav3vROKzyFK3izVR8XuHe9u+R3vX+oITjQvPaMKgN3raweO+9e6BCMSUDl4xbwogViRy9mAHTB5ywqDWDvkY16KY9ZyVVpvQagTy937MX/FaC6/WASM8LuYfXDoZH9VvYeg8CU4pG83wO+hrYo1VviExy498r3mERZNqOQFlahBUyrBxpsweqmaFQPpkCFw5hhj89C8X4LfIMeVaD9tgGq/vXrPKScO+rE7uEYnaoJlXs1W2jLxM5brduS3pzPfRuvGL5IFGRePPK3Q7YnEu9BCR7orLd8KKfC81oSNhpwL2r+828K6tI1w6mKB8m3klGsNAsCORFBJ9LViEQYwzdtX0u8I6U8JpgwboEMvsRJNYgTSX3dZqVvMQ8GRpnCN8jtrITEhUwUcoEd16iNtjNLYEBc0ikysYu7kKSr2x86AzjbdrfcbFg+sOzV4eLUmKsjjB5mxkHAYllQ7/qX3TtZ3ePJ2qfSvXavp+PUpuHggIPgbLsAfLUuNhUrtp5J9grrnGfn5gOHQMKUxaDOAjRVIwk96cMMUWxlCHt4PQt4B/ZABaK82+qB1q1Ysr9PngRv2BzewLXF0N91whOngXTIgl4P2ce7q3/CgEbPFsuCdjgdYuwPRoBvEeP34tJoThRnNr/Z4z+ezById4Cl5J+DC43oqn/zCVi/5UN0WMQFQr5HAxpl8QPrJCwlmsnAboBUlni74fx/L6lIXhK+ppR4OKF3yA0vNcDYTtIRjDzYrD4iSV2/sV1PoOF5sxaF/8cwk6h7IiorVfHsFK4FlJLNQpWptRq5MCV3eHtgap7IfHhFwJo9k4pHDq5AGARez6JhTHb9RQWPH3+qv8M+cnWUyVFsrOUJwMexTobe/m97z0l2xPiIePdq/T+Vk4z3Y8w3tNmx+E6CgeaM4MSFkQPobfJ1xttzhgtog6UpwNAC3FlVIyR/UBziP41bXuTF4K+AEjOUdJYDogwPQVYF8hot6BwLOERpt1bLlnav1vEWxuqp0Ram/UMM8RsMqqenh2lRtN6fHbt8CsDilvvHsNEOYPHODgqvuW4G4QTRebU3fQLR+MnUqqEuXCD5MWtdsnegjFRtgT4RQnscPJdA5Xscyk8pGWlcDdXkEme12QNBX3whN67unlei/8kB3kJ6zCpe66eQE5/hgBfKYwKehs3QKbOFgElEVH6SJSMAXp7nYs1iV/jSD4e6yVjo6n2SROTylsC6WGCxTUuViUQmAO/ANW0AwkUmM/c3PHnHeh1A/pZdDtZDRbCrJpLY+5nuGEx7kOagc+lE0qJyVFiQ1aCauiFzV4T1wYeYh/Plz9TWhlb0sPXD0sSHwEFHKpJCKJQz6BSfDjIoERx1/uazs8z4I/RAElydh3o4IY4Qi7Ndx7PByl4ZrmQQb/EwDo6oWNUanIzgwOoCBJUhEyj9QEoEDm3AvKuZoehXjSRwXwOf15RxghJkSCe9DaTjIGUBvI93144s1AoymG38u05Ujt6XK5K8TjkubDWE6KlHzJKCxYfrWcRKKc/CyeEIuKFVySb0u8o5sk4XbR/5zTZ5/nbdBDBpdc9R1QujjhPeWWmRzNMS7DRH6jQYEQipp/bao+zfYnwcBVl6xEsy8xBc1tMozA+3p7MCIx3XFEVFs98mCdxMS3gfWr/B7WdDIIXH7U6+0EgqxDJTiL67cHQkm/WtvpQKWKUr1YDg6bI0hwDUzCng1K1NVi24+EcEuZsnx4HOTl/N0IccGHM9xnqMMAj2dh5j4SeV78/jfvwkwpn+uqbsz8kIVwUaGQNDO0Z7iAymOjsUe/uwjjNEKJ13qbdLbjpa6SWyRFtAZN9rwLZJo8STzhmgasL8HN+HVRKrhkeognAj2lFm8JUJcp19jDDmGdiNWp6+lPTbh6flKBccS0lRLYTcwFsJ8iCPHJAHOKbF0CIZ0q1z/UU5Obo/8iXt0DALrceV2l21/tl/kxgLKmsIoJEF0wQ1AywEZJ6dplUcurQLdYT8QQTPNxXzTkEt9BVekpTUvXBz54+ANUNHKEYWFvIgc+OpevWLVE/uTrq49Qk1HJmXm8WN+ajutxpktfrw+VUS3AbjPGoBG3vlneWhC4f2Mq5AdaAdu0CeAUxZL0m3ejs58jqr60Re0uJMcENArPdhzM6vLm5GHyITlnMaWqWvOv9gU/LIYmRksAW+JKSzW4i2Su2f0lFJ++c+3bVSe7oucEoHqpZ16L2zt3yqWyVvAI03YV6KZkhH7Pz6VkeiaMjEjZdc6RP1hjNNeJrmoZcI8rh3i3P3mmRsQBC+qQZvVjLDyzx6QTWEt92LZYsDOxSMKvgQEj1kmjTQ7gVR1bB3FOKO6COu+JiPYf+xt19jGUxU2KG4h7f2zJtdsu7gGDOHUtFoBlBmEp/9AG2TpEzmSu1x31YLZSGpF4Ao8CqV/jZAWSYZd5QchjQ2yY7Ia19FXSsbNoshXJeg807I0Um3mki1cpETwg47ZAj2u4261M2XRScSsPiI85du8b4IFyLTjjp66Sm9xitxUIsWdIKBF9zkyXdgFOLvZj3cJ7YVbxmdDp7EqWDe7wp7u0tTBnFF+m2C4rE3rPkDUPk0m7Ru41i7OewQ5/mNJML2B/4MS7pQlj8bNrHzMRY03YPrCHu8BeR77GPuIUjlZgPXVEMvMtqeYPz+zaVSQkyS8mhzY2k1OxzkfhlHpt+Qs1+KdTvVV4F6QAAZSoqIVFZMNeSBS9mTX17a2hAYmRNq4c1kDBH3TX/evcfu2gYENK51FyvhDz9018UnuGvWARpQwc7hTTz0qVqGZzZWCvxWOSgpZIwUxrlKns0Ndcbrbk8xDy8vIDi/2dIC78oeM8PIS+Tmk4WYa9kdxtV5D6nA4MOzDfPpO5ZfTPQIbp4F2wZiG6bfayEdEBAZEL6e0ZAf+LE0E3Cc42EwJ+fPsDU5BDQyIyehI8lcIwWN9Xe9fkCR71ej+xmB9Yf2GYg7WOZX6FaAA4UQYs9ff8bVttOR92L8zy0+T9q66WIQ7YL3oFOuQTTLXhQSytVJ4KQ6M8GeK19ZizbhlkpAPln3bvAGo31Q+u0QgNWSHf33DyIVLGPiZwmR4I+nr/WKSfkAniUOI8v9RHBi8pyiCE5BseUbAOJkE7FcE/tn+3azRVDuWldUFjQ8YoaxU/xPIfPhL9LboHC5mSPXTymmq2uPaB6RskH076/0vpJiT1a8q5z1m0buy4W0291WcsNGP3FayIkfX68ZLws/EqiS4dXybZ9uAeStJfw6e1tKdImxnJ2Wcz3LZIDzK7Dmg2T+HfH8BBe0BqMUZEhGRclXp4VOcIN0pZm9xyNKijch8lggoon0bGf4n/dNIDLHMdCJ0RnOxAiufPzxS/sYSDMBobWJIxn9MpMZtlUED5RZ8X4kkK0gVo/P+fqX9f1daJqcI8oOP79tr8z4/vXAfy9yM888U8Q9ORMlhJztr7n5d62uI36AWy6o4G/FSlQG6JumFIW5DPXXRe/b6bfTJ/ADs1rKkTFyQY36m8nKgsv5a8mnEDc2aoJpSaLKqbr9z16TSNrBPn+clDUiPnRvH//tnMCeR+CUF+bRVUJHTf0Pvy5ukQpRyugCJLxqhdTMmEESKEyHqai73mWO1RuZEGZalup02mbAwBX3rwSbMAMp5BGoXFYUyRHc+FlGSAYIt1xK4Y+73a7+uhDEKqNNMRTv+dmVrrVADq+V99BIzJarv67xUZU5OmQ/t5ERYgr6PMSVr3n6lpAwCIblKNiezyx9kSPhDUGeeoIZhyg87nBjMLSb2854JVt3yfUbtizBEkqrxPxIjLH23UsNsxsdjZP2rctwZqEfMe88OMnYQI7rqSP7xmwe8qmAiP7rmH23RkXplq3/K/F3VeQcZgvOwplRYJrpGMh4FbdoWPnnKI7dSVglUDnAXLxC91cpQEhdhuhP3+67vH7epTIhELb2te2PLBu7/l3S2nFfWhs1Zoh+iDBBIdIoIX2A+zbFMD7QCHYa0RzBP++f18OBZ0L4EinD/IiMXaXKmeyJVFnbL1eGKNeNsyplJra4djraZ47HSS5Yz3jyNY/7TYAyQ/T6GF9Fn7IRRSFOGmRuXu5PYAiMoPtlOoPw1OSLwk86HJ+r7QLIM6dhT2kI7AN40Y6KlTVvZCyHZFBkHmmR4RV8tA1q9aKfLF5luZUeXoCIYk5gsodsy3oxPEuec3Kv3ool9GeHI5x6dS/YhwE/3LOjC1ycbcNkvePCWJGb3uhqaASTlTF7e6efUP4Dw0Ff986YqPqcBCdzPdkZG6yChjRW7H3SSI7EpFHQkDjiZdCOOEzblOZZEc3TCz7VpsZxz6Tj5AMtVaxNsSukjaRBscygihNd4gjaR6HOSgQVzRdEs8EpWjlDbZ823xR+2eToPLl2n2P22VMeN+GopdHLDk23hzmq4jpT85O1uCd45xzAfRmdIfOEMUdVvMdKFIgaPqVnAfXxGNLjNsMqHBfFzpjApnEuHOGohfS0iVfi57+yc5fh6YnyF6inSTubo+v+/yLHbOzbRCN6vFTLFQp364XO+mnf4tB5mjOpa10+GUuvKV7u5aDt57p7dHotFv2ojU+6qPMOzjpxtUk8fWzA9xqo5tZ/NEGXf09t9fJPKV+KTbJ9UQ6l2JnTc5XXHHYdgH0khCcz6tn2oQcsgK5WM1j8lgseDKvhSuIS5C1Y46UfZ70V15bXknO9JckH9e0SCIzSSB08yGI4/ocQbFPGrp+SwVLAgphVIsPr5zGsjoGjXCdHrengQLVUr3Qnza9PueGwatz2oiqc8MJoxkvXFb2gbHJuxcQ+cQv2dGs4bGugVb/kqI5g3v2dC1F3usNPg+9BFvJB3f00VerQ4Fm3mu3lD2JRG1YTSvDc3NcieJhsw+YbB1lsnlgvSTCKTiopzvfJbBkhSapP2S9fSuOLQ/b7m5jj/iH6OsXn5mb7H2wH/LEapPq7xfFHKXELmqmpCYMAyiHGnFuxrWbmUQmtdjQ52XYXWDXu1wfnOM4SmWwwAx7ZxusfigxMXFAUGuDco+O35f00p4AP+vX802u3f9jero6fNDuelmAJF8Sp0DWyVam4XV1wY5MGDzvjKflf57qGWDjsvLorKq478XwZMH3RUGh9Ji/LhTKme+f0/+/0YnK3VJLY87eLNkxdKV1iwGcWT7H/x5rFwlFyPbFcWkw06I5+/aII59P39KbT4+BcKQskJl6y+akSSZaaJq0ocj70upfeLiv9fykZsmgNo74fgDi2ntshCRXqoHo4uKQKKLFbAhdlTXrD4A+3Xm6lJXvWeeV6cvlsw5afRkx/lDEQGCNs/3+jPhREcCc1/1drx+ygERY8XU0mjKzG35hNZK0fqXWI4EQj9AvVsHgKTqxkYSeKa4T4qMoIXeJfKQDOLl3tCny7UzJjkaHlO+G/Zxf/8y+1/KlGBUuVT/Lia0xsILEXYrwAUwNCkuMeD1H7rrVNEPBYkZcFlMj41fhT8iB4FSWfh5GwjQ26IumB5Z1MQQIj/pxW4MWQPxvzhFW4g/OJfJGkW8x0/Nm20clIFlruKWHyEsoRM2bWX9ST5bRKS5CHWQ2JR/OlqBna/zb/rS7ITfA9ZbsKgj7iInJKictEHR/mpaZK2GazPrWPIVchUigGFymoxrDPT5CdYIIPUlorpBhZPZdtPbpafedpKBFoG06hTKX9Nj1i5/iH5qog0ndEVqgrLHuCyCsclKCcgoTIdT2Srm2kQN2PzANibUUt1BbmyLfoEsXFj9jVBp/MVLjMyNubODFccvWyo61UsSguu87cSrj3ZLIwMvPOz+3BcVeFLeGUvL0n0N1tYFlcOR5B08OtFQRNfCfU3LX3JVO1viVidBL05z9II/y6Ua3pbGlCU/zTqPmu3JUQFNAz4Bhi0EbQ4SCiPNnBQ0RHYDGRJsNTcrNvj0iFx2DxKva0cuXH9v78iqJc69MDn86DXV2v5PfEqd9Qh/9odFZ8/ov3ITB2j5klI5oSE2ZFy1LBiZP7dycx3Cr4JQx/chMa/j8ttp17zOxKN9dC+ZCakeJahw7+Sx+laM7A6Mj9q8m59Tz5WiZC6CE3zlghrZJV2j5uZvScLQSkjN3T10dS++WVveT2SD5YgrWNgnxmCXWrHZ15qjiVJOh8FOQ4cFeGxM9D6oNhaaimZDPd7z2sE52zwKki7jeZFxklyQ+QGdd0wwx/DLGRwjpA6Y3V5x6IjWPc7BR6O4t3ypS6Paness55fTAYobDbpbnS2YwZXNzggZj8qezEGobcwKZRqjlf6wzNrJkFjk3sdhNZZ8aFiqu/didLSNo7bxiwNIHRh2/9v08/gelltPvkfawwzCDUOhP4YHkTobKBDR+KWWXHy8uMkwo1WPrFK1nQKFnd3cMS1/PcwFEmtYzfphxFSfvJBB7AqUut15A02KgsdSSU3szVtoKojnMEm8xjzBo8R0x6oz7XwDC5wWj8TlBDgpbved1LZGqYqB84JoMZ0ZemlE9/eGT4qESCVn2LQNuddQuV5Iccy1S8gb20YcGGdlmRR+tzXP0r/8qdMUUwh3WMb7dcbSd0iftsOVHCwNat9eBf0pRkDn3lzzUGwr9Q1WkeVjodDCmvmC405KN4fjvGenMVovdgEV6vSmxYwqpO2C38nz1khw3zjuNmZP0PJmnK83DlPIJTomPFq0K3M4wSIl4o97i1s+08Wi9HAxaU7QlJAStWRjag4gUZd/dvQ+Qr4/tTPhMPX5k0uY7xSNMR3t3C/kW/0hamRUGLVqFu1PzBjllxivQmbd31T6aWpepA71u+ocdqIKaVAGhOKgpsOJSr3VYk+YBf7J6L99sbIydluC9FOiKVkeX6EnVJJ8tfPBxqMFmzaGaH7RNA0RG94KsRVxQUjfepi2/mpzt+DOqQrQXMBpc+xrXCQrYpfT3ERCHnNXk7dm6nEP8bOaRl7uWC6i2jhtegmKGzBySJT++eyDGOiV4hgk9UUqr5Pte2ZtHTkmTeu4sinxJA57FwgZFlYIh6YH50fms6xWvn3q7O78eteeeWAYsNc1Uy4lxzG5Ig1D+ykqSJklooLwPlgMGZkIyeKJ1Lqpjf0bIyE4uADDxICdPKY77Y1+qAD1caDEjO3IYbscSgaMi0uZPdYbpt3mmOd3OiFLksKmckjSRLqs9rtZg8nvH3G0JPy2tFE+/pK9eTYNryiikjJeWhybDrzSBALgQ8xLswz3bxuiVcsLSp1XV8wKb9rGIKz4ytB12m3rb7ZUhfOch65oWF0Z4XdTZtHfWtAhmIEhRBBL9sXAb8kKJM60Jzh8ntUR78NJDp2nB1wukus58gFIsKfeRH0juhGFF1Tk8os1UjWqeBLHJWNBgLTlI8Z6BSRXbW72QQeiAYBEuYLanyGU2cmtt/kUwrc9KE0Rdv/p3+nEJ/tWjTdWyGCIIHetKiNInZ9VQcT7us2+0vWGUc3jtgrLvYSQrGbJ9Mhvu72VgnuCVF0ZWL0lebWXI1zcQnEtk2hxmjN77ygavlPZRQKMMzavXAwsCfx4+RF6zIMsXmNGC6bBlniOTZcyANKD0XGUr7B7hmUBIcYJJOzea1cp1nkS4pkurtUUdGN4sVo7HOpeAYjprQZTnYaRgBo3dS2CVtgkyBK8iy2ePK694yM5p4XAAFEHzOLGmv9IyUB/9/YyGaMBNcOxjGje72zQf5fLTJQgkt6ODqp8OwoCuFH/G16c45Nh1xY0kdphYjejkGc35oK5e1fM9u4jbQr2t5Bbweu9diKazwM4ScY56KrccOXtrJIQBs7cB5GDNWTBzU9nzH9h1lpKNExLem53ZUO/sHjtQSftx6TBoxftB60w6B38Uo4b90AE9P7ClFGzyOygz5dG/e3YuXFQOq8YIoacAxl7Y+WtqbjlZriODE2v2SpGE6vW+gGDdMHyvOM796TKs8YGsHXYSMjtnU/3W80OwYOgej9G6aRYaemtPfvpQ22wpdbrmNT/Xoufx4tszY/sRm5pAM9Q9laKeqGY6XUtd8tBR0vfdCRNf5YA6GNqTooXY503FnUPCVqBhfhbnMtQbnjn2UB6VBt8lrKQo/rlbYTCgZHBo9/2PdnYNV8FqmtRtpeUsJsT5pJ5KqhB4nAAdCyFg/6vCzWvvCmFgYCv2Tn8/VSBlnBFeOyQNvBnbzzexy1CwTpzwfPVEvuJTXERBaaeHrGaIbFV1tj0HnCKt971yIC3ZVI7JUqMkkZKrluXQpE0xjWY9qSW4XlMCWWQWPItx5AXXH2+s0ty4E2HsqsCRubUMtt/hoehKNlX7CTKub+IsgSUYneev9AFpiaoSTtYJLcmFg9q2Xllt6dALBaalJHAvfu4uoJxz93K4/NMF9VhqbgLZOvzyUFmPajmYp1pEnJXsiNV2aGAxNK1Zp3B90Fyeq7iAsoA8KcZLZSEMCW2qXdyRj+7BQAo9oHkGqTEJnL+fgz6h06oVzfws9l1boDOZxmWIGw3cKHP9IunhhqCn7nsHtnHUQUt7JtiyR1JfYs5T/VCkJTbHg4UYHxRDPYe1uvqB3BpZ4BN7l+8sWchkbmogR6idodbFpGpqlukE4a1xRK82iF2fkboDQj/RahlaTQIwzAP9O5kGE3QeV7zJFfBFJcRejg0KTzZX33uYNIPTdDQeL7QNDYlQTBat01da1kCSslPX8cpx1uWiz7SS+/7wsUNe6QWN277JDyPoHHWXrq7EUpt3CEZQWqimQqiVJs29G9dBvONHOynp3JNfZfcQ3g1d6F5BEtkTsGl/hUd+ZA2SELM9xLkXFzgxCkzZsaWARcv5jgav3EQmOM7LbGA9uClDRFmWwGFWEDfK6jFuY8zzPX6nVzLBDwpoMUDys1zZoEKHaV0rYejBiGuEOOdOqjssaACm/T6h5ndco9QWds3v2qm1a94jaHlqppyo62AdQeaIqnJRtFpWm0VV6IDhGg0agihMyTy82JUhlsoa+2wXS95J86lkR7ndhVjdYQaSRL+rP2tep6QclpVPQ047plcmHGclItFOAJfbOSHLXbQsdgcWMICyRQxAu+r9yRU/7uqn9cE4wLvGAn7Q6eZDlloFzbqrCzvNA6yYgpSd9CSw7rBUsZz4OECT36j3a3J9ygC5qMOVSFpBgBlafd7TJVNsjAgKvzTxHotB2VDBD/LWYNTk2QQ0IM877RTikg1WmiiKQy5QHv3JCO/ZaXfn7xUxOaKHPoFJohp1meqbpIdRI3WGJeH4RuUlk5LASqZebTJXBYOqWhfcC/zPizc4H2fIs0kzq5+0SUzn4kcoXndkBDkE+iwaTVVkVp0JZ6/G8jBJDqR3uMyPq7lGiWZ4gd7f2J4kSIEW7Ww50XSzrBkgyvouNkCzmLK2jueXiMdMpwOmKifuhBu99hZkn5Lno71WCnAmAhc7Rb0I/GuPq/bxnWVtqgeF/Sw5SdFwrfu1nc/hOOoSpcHMleSOXHpnp9QJ0hF4xWOQn7yJzX0B8BkcSF69d+faBzdTpOMdKYuQhZBabPAwhSrwREVAJrtal+bWXXm4GasLhn3+x5L87yBTKlKV2aK752mjHiRDH5jNOaJRNP09LylLdiB+NDriWmTvW0JwseFjkQffK5Ymufc+QgTNYThkSKbmnRnwXhxX7oyORxrFAw2f5KfczUBh0dY23B5xzfNMJtJ3EybN6ymeQlt4Ks26SBUySXtFkseKuCKJpxuShc5d78tezphTsgrfF8ro6nSeu31LjEz1nifDClaHfxSvF9CVcRJ4lpSX70wIyRbi5kNTol5aLfFrv5Vd85JMAgaVK1KURQX+ne+TyeCEwanDAWNloSERSjFpWB5kSjAnSIixsgeresixNxpEt1qc5Jru/D0a2VPRkROyJDL+6/zvSPK+2zuQCmo0J+9zIvrWlDmzulqDiDjfy8Ya0L6CLtROXkOMtmPK3oLKaZGHfC+PbHS2l/4d+26L8TFeTYarrrLCnPNGKitIVb3Tf9MBnFq1ZkEZfg7QI5Ya4AUTMMyjt69BSaDxoSLJHoObkqMKl7S7K6ioFj5BK7RmU47LvIsyR+z1MjOcdSdQh90SmCapuP0AbBs+XsMDHu7rMKRKz0/TfFJRt6H7QfBYTBjDCv1TJhGkO+Ue5QdcK1OScxLNIqOmxXIbbUhMbKZxEUXrjxemmbkYeZmT7/rHyYYqo33Co9fQdFLjmX21oSDUuHK+kBozabNUyXa/BNjucABzSA637WBuhM7SvSxmxv7vt31oFXNCE/FQfZPvdMEoldLp1muErqfCYyFh9HNruGDiXLuO2bXBxT9eUvz0GLuAIDVBnQHBMWOtNPu4mCGhYeg607sUTiJcmctJ29/ULUsiFlwliwtOjoYZn1nXjgm8QIZAYhLSaB0TWc4cpubeSPnya2bxXJSGBJC5e/V/xI2ntMHf039VbA7X4+5eW9B9QFyUaXPQihht5St1RDhV7YbZhsQca6iSu+YFvXkIeHH+HyoGcD1Tx9RAjGhH7ehm23Sf4heZRSzkJg4bCN/Tbj8w9mG1TpqeYF8GlxSq0VRZu1j99eeSnMDomr7DNTG5qfiNDM47s6IcZLsLfp8vrJttk3ZhkHePmY2MkDCH4ijvT4Pn7zGvhYt5RifMhTPFvgGe6FkkiYRS9PDC9tzNK5goNa4aNbNYkpDJqjyBxbcT8Vod6u7r13/ZY8J9TuyOK5RpsdLN4oO7SA+NwJrSlgla/q176TJLVzocsgYtkCm5vdBGRolLoMtt5eobqRe/0QY4WGaaWRjiZpPP1lylLLPXwPZUI2lbwBTY6KN3dr94e4J5HT/vw3+dPXhpYiHhgGjObqJn63y4AYPEu/t9zE7C3phm6tvwrgLr81JFx5Vnhb+cfzz5w8vkdUcwerWhVkk1ovoMfNaIKfq4nxnhJAEI4CYsNzhEHVzGtOd9yeETz3b3XAB/I+rqQvVA/DdkUZKTuFNVg9qxQzUqOxhe0QymFqP1PbmiidJBU+gS4WClaQpKL+1RvI6RSBhHNi6xXsCqGGB4mDYazVrIh2Z2mMhhijPDDooEkdG4orNqUQ62qo50ABzqr+3Cf0loZFxkUg+RAbvH5hqd92nnLMGcNm02/Pbs4iof5JrJiDcyPdnX5wU1kVI8PUvhEiXNhFhNHCzc0sI01cF72SJIhCUWWqjbP9e8ISU9KTSDcQWZOHlxuFO2Ih/IewQ9owuPsloMPL1uD39k5A6JN41f5UKScZ9h5WPh6PNeeTQlmxfAA2nHMLOa/EyBK8YX4dtZ3Hx2zVvkHHGbaOJ+7SvQKszQ9zI5kl4XKniRrks2u7czUpKUafOYjjyhd0beR4P4N8P48oj/Av89ubuLQ/YiuZ3gr/Yx+j/PfTfw456OyK8bbSJ62RCUvqDBehCMz7NhhiQJa4qO3pxnSZNbNEKGI8SovmBR2FMb9w+bjPiVbdLctJykE8xRY3Gze2XnUs02OMLWhb0DXnJyjGTJezsGEN40WfzYA6ajXFp3lymv8LkAsk30U8FO7AZNExMM5QaZTkg+COEXcwxMi7zNs77dWt4jYMDXlNEscoezQLT0moJopUrOyva3ASaGSgK4OSVYQTImq/3IyDf5QX3aUgyMM0nXApl3fHjx75+Co7TessESHIMsEDTXQsSxzNGU2iQd/Z/ABVTT7r1J7qM1to1x1a6b/+P7Zn9mYl699A9EW1ORJnFIE6VED94tY/64py6zWkirDNUPxStesUWDdYuAya9l60lqGBqKcdZUhYBkNKSdtjs5hlqsa7ZYSVOFAilq7Skf4fv5FJ5AGk18UqdqJJMebx4SZZsWGD9ZeDYAC5Donv5cR5jnr+K0OKEe0m1LQhfoZU8pG6aBFxAejOI1NwrX/ot6FaTkRErPitlsd8RmaMcUEj5c9X5uPf2Lhz+n/zfZ50/GYFs5A+fPWUVNUGc5WsQ0lZOrlyEp5dzpj2h/vXFBGg21zCCqmZX9R++5AJwVSKFVEh4jc/bEDZ6Y0N7ZP4E43RS5CzqacXjfTRsD66Lk5ni7acYOhrt4kYxkSJLX5o9dVqKvXnfGn5JYs+clORDYM/Jc/tXgiiCwPYsCdek0IVIGLyM4gaRmdpRHh97xpKg/BcN4eE6gZHYZdNdS3dOw8FKsoynB3TkXrVVxmQkPJxCFB3E7jGjMe5Q2jsddjvwVfI0FiEMuWi1/PnyXQQst3MQ9OIM6Xa9skr61OSwX0e2VGCqOzuEqmZfaAenRnHqi7TNkXjjbbrPJRxD2+n0l9kSjEVOsQUz6XkKLspmp8gKIHzOcDCGE/C/V6+6YEy5lFQjmzzZZqEt04WKbGIzLZSKQDOSZAg3CdrXdKXtZJYVPnR6dr27B4UIY0dqvsghUJjGvUge8KAZ1rLl9DaLClmVAH2lJCXdIXRf7Wzzff88dYOWGuLLHpvBiztwau+4YaHn0fXzHGxCg4AGyqSDUzrrRUGqBJkJMJFjeRfFTUiuGSyBRfJELPkfoYfD57w1wf8pBgnxIorCOCZhBC2p+uI1F/BQnauhMZGOBK9y09cvnKlhJhSrlR4NsFXhjtnbLJuVXGtgVQrYtm3fiWx1Hq8E+fRKlDuGah2JKiJYGyUKIZudmraZYAvwpU70/8sYJZ6rz53+9xNBJV38cudraaaZH6kPU3zKi9+eP+mBspdfwhoQKZammRsGDOhhznEmLLO0HLe5nZ5aybFmalJ1X/0sKUvY6cHe1h2bX8XKdjxbUa+nyYIo+DBNRJ+5o2xJ3wi3YHLwEu80qtEcgPRY60zsqZn9zQ3A5Kgg/pgtUpwGTruVQalrVn+PvpNKvJVKjokMYDm4xzBHVYJ3HSmOvdFwpn6OwPT6dHTPy30lAv2AUW6U2vrOrCyUeMWn1Lu3/d/H7990EZLMDgdZaLgFtNjaYnzJNGaLYJ29dhX9WYW23vgoprUXd8PTiZZKbD9tRGtr4oskFZ7xUGjKrSbSkgw/tIBhY01t+ri72N/b9A9VccsMN87m3faa2eeUupWVxUdC2ibHiWJqMgtsm03g0eQ4J60Indflk9q5hb/CB6ziOHVZ+nutzIus7v5Hj8efhl45XXyKdF3Z/pDtHjIEjLgm663yPd2rPPhW2gte4IKIcbv4d9C6ZWmmmpQPfFbHQ877npLHZcPwDRDip04Wl4zOXmfNQ69BhZHNszEpBI/asZpx6mfGo7V2dGeELD+jBpGXzmTSYzUkC7GeAH8HvNbHuVqt4OCWJ1+fqhDV6ZKqeqW9HpYGnkuzi5oriVVgnJy4TVEPuHAwXipHGrnljIcm9I8Er0AIyZOSitBON+xXF+lfVc6SMO4VrSb6yOjrIdfLA1FWhjhrRBdWB0jWWSuOHr1lE7kkOYXUAOVogCHA5avLTSQOp1Is+8zWzQouVnvf5wnLsladzEcy4VOJ0UIdNOOFTg3idwe+lcWN10oR3+7rKguJjXHYbAov66J8P9IpJ9LakRKE8NzYxhCj2tnsl5U2Q6nbyZFJxPSmV2ReyfFYNe8vQQXGRTSi14hynq0nB2V0oYYZ4wMR3VHJkGpNX7/kZUbwCivtI3kEWFcTXVaA2yKvJdEnVziQ4bE/NxEoPZXGHnBnmxsq7RyxRpI7RJ6oVoCVrSSPDeQ8+ECn8ZrhaaP6ESrXCdGmm3prOQwGZYcwTReOd5c6KigzpGTFK9J6zCKozYT4bVcYWJW0/obWFaD+MBNYj5n6XlHooqXzU/tTMcZYwS7YUTzP8mQ55YXFl14RXnuEDDrwd5SEBTNBZpK6oZFGVk65+17jI9Jun5/LZvCC5jvkDdSGBr3Zp6RoYSu1oZgr9kzz6FfTffgRCzGQ4CL8DkP7ZGca3IT6q9v/rYLu/rof+wI9vHrnREuBQyKQjiyZKq+bKe+0/axAIzVdJaSm2UnmZditCOWRWzwk0S+W1KM0wg3CNXwUJTZf5U7GmJ4rmNXggC32HjIH/3QR7BkW25yZuVCjuIFXgWkKMxsPctri0woYTlU3frklTdkBHzP7IrPHa0SarNmRmwq/NjrbUmZHeD9kTiB98JP5hxqdj0htYMC7dyJ8XuF+7hO5D2LDQPl7LSs7Queq5Ms0qXeb5oCzhgbZQ8xHGFJxNObedSrNTdv3iR4r+fx9I+Phmepp1LpoHMGZa3DofkYYwX5k3KngLa8Zahfx0Qw05s2q/DrebLmjiTCgj6HRFi3T82xNgETyp2ETFWaQ+rxmXhT2vHBZOQTwLMyXXQNQ3aYVApicoypBFXwk+ycxM77T02SqA3woklyZvDFE66ZCi3/4k1xogsm/aFCVB1xgMwstQG9Sq/0L7gLg7y5cgMOOnzFzTJNJyT2r920yIogPkZBEQKcH2LK+8MLKie9iXNKz/r0VBnZqvUsgnYAinzILeL7oUgwTNN0sBcfkOQ+m+EgfVBQ2uYAnG5pSI85w/i8z5I/XJhMd++emvReA1jEhOJZmhO80U1q2jltYiZ3z5KPskrkymEW9Sp3lxm5pJoWMu1q4Msp+F+MWRGQMq8+sc3f+awcfU6AXhNStWSL65xpuAKh9M+ak8T130q0AxFU3/4L7zdmFs2l7E/cvRu1GGHJValdgnWlc1a7XrrJxhHYRArxgLbW9TrzXZB1aoaxWYC7Kp6TOeRH47OV3csibta2clpdRK0KLPZ/2xzf6pBvIsVSc2ge2ZdIy7lQwJ12eLsQ8SCFhW64qOleHBgwPu2KsNblg5kL7jLyTDUVsavMi6vT+aRK2VIuHPCtqGAGzTo4HZfmVj3fI8TX2prDBRcWooxtjKMhshFAlf7puZ/8Yo5YBo3j4TefZaFKRihUIz5NRAcAxAcFgqVbRNdTOVCeg5MOLOpogfFHacn/T56K3jD5O4x9WwceYwGsEdUHeojLnFVQtVDqoEMF0+5mbwm9016GaCTlPQwxlJA5ls1BSz5U7+vDpbLW3u6yskvJCfINGHjzMYOr8FHap51cT1Om2hJUiIQO8UuR6YJ4BoHoz8+NK1pWhE3Fh6Eb9wmQLgoxpZBczQx7LuxZ48fIBQex8VabhMgXKxnyXYcJra/8EktIkX1kiTeQ7PCAiw+HnN0xOMQvIz0eLhqdoDtuE2V6My1MO4YU7CVEETH7Ctibh5Fihn8ft1ua3EO3Go/qA1NsYyawASX9z4ufPdPJ/euorOD7X4E0PgJFOXWy4bvQaWJF8rqs4h5yuxIGEBraUcnczUIDPxenbdcyeMisx2C5mkLvdmd/VYZmZHXe8LJd9JO9jrFm6JLXLL4qD/YY3WKCdnMsRMjLDMvkr5U5fTeXCLLH+5HVM5UtKXdu7PVELnJ8UP1cS5iPebAZ9ck/7o8aQgkwNZSC5KeRyC3vSL3zdid89hl5rX1zSa563sAQA/SgbtojdWqpBNN5bgys7OG8Eg4DgbSh+Xk2Hndmst5sgjuBpp1whZrhs85NZCAuc7WxDgFeCh2aG/Ct6W5cwmByFyNsFLbUCrpympLmQonDF8aSzWKSjAUgdVk5XhTi/bAHbO4sljIIL3UlO5CZy47X6+eztPh2QxT/ovISft3AWjt8wjTfaicP/znQZiSdSvIViLtbhkCTwDE5qDTx8AXj31yVL15C8M4DzAwNvyAkzCV99imve7gzbn58LfSlRshup60An9WCe4Fj4fgCUJ2u31uB5V5x31H5JevqqKwxC3Dy4yh9uvHl7SkNs4Mxa8SDMENtEEizPiNfON1RdARbIclPlU96tXsG1MTLogIim0RqW6Kx2x/qQhgrPyb8bZ8y3lOMu4uoiUCibHO6iZrjFRhQf2cKRdy/poyV3R8TybLgRJaVOip8aDt0cuaY2o+f4pft89lbNZL1ox3uwumf5PyC3K1f99qb9qmtXPw9x36PzpdEMThzDAzfmDrbZUqgq8NK4ps1uKAaEWlFLKZ8lkh4bLaEKf7KujONl+vAWLuGW8O2Rrav7h89+vPsCAN7+dP51SYcLWaKYYOSlIS/io5qEPSvbfjBPyuUJyF6ReD2WemXiDApMp+ipcTcOIV9jADowHtkCty6J9yvy/aMNEjz429PTdz02wRiO0uYrV0c/mEvjvaMP6kJw7h4KMZEalO+g4Ee2YdViPd0UfvMUzAV8U23DFfr6iN1P9wRIwljnHtFlNgjrjNoPz6GxYVoYIaCc9CQqvdmMQyxC8//g5tBNv8Lhz8GZWDmJkPGLoYDuzP6glSE9F0CzNb2GzccKpcqGtsDLLDy8SzzJJtKRr0h3qnfOtznQbKyy0616IeHGYEboNKd1ES4Z3T4aNWR+zjL1U8s4THqGPDx4YUtUxl64jJA49ccv+06YORnQSK3u+jfpyROr4RueppaWrAYwcZOAF4KmJchVB9r8Zyrqp9eQoUBC/8CbDeeT1HyOylvMOtpR4QdpfPIvr0A+t2cCsmYujz6AbZdlzysz4lYnpBY1bFocohLFIHaKQVeN0iDvE4rXyEQ91iPHewyR7Oa0WNz4lNNXnokgUIqODDAhlpILURuwvH8Wb0vv01f5Xyqcl3gVTKOM1wq9f/mzzgpvcUDD7eadBK9ZN7JnENUHDZCBzQSULxKjbBKTB/F52ODpi2plqzW2ZQjpMhmjxbEGU06gnmgkmM52GbmmqZtollWkTwSsGocePx3cLOkarfW3piWxhQ32D8b4AaPdFvlhsChLg4rc4FFFkArS9MmX3XJ+15AaeupFR3y/Tyy09L/h1l+VYsfWEuOGt2wUDBU/DOgC5LVb5eiknfIQmL+AFFna913bLh7Dpsevka12CHOCIH5//TmIzhoxIFJ8fg8hEjz2hYxAzmtXqfk9WyvBdIfWhzvqng5H4Jh379IQwYzElTYxKOlfhA60fZmpbMYl5r5vg2lRbK8zp803sg7iJjWdJk9ciU903GBRgGgEaV13JCLXrj8gtCzy0roFz/msDB765pCtCSwWRB79uSj0bZ2KSczdTUSY6aokFRyvb47I7MurwCJ9ZteXTFjx/f1DuqlNDmF4GauB6/v/PjrgBDzNyS2vgX7oIR/C3AkrFwjdKMVxmro+vJtHctEd10aXA/QXXkGHoBr3uz4dzT9SmQAF1ISyyYwkQuFduxrLDj6FxvFNx8KNPnnLenbUpIhZmEA3tVx53yAUwueq9Cej8l3MbHA/wgiD1I9+eCcKxoPKlc5WNa0tNXCMsTsv/XnIN8FpTBAqB4jV63FsD43eN1rmO32N6GHuhZCgJY1+ciU6aew2tPZTImWmpCoZ0VyKBtQKX3jNmVod6Ycs5DfSDtDMg/9qgtO5988uc00CMHazsXv11WbEkTAC6vtwvJxd1HQrXvWAnr0ccaqW5xnSXhggXTyhShhsWCivT/RzTkQu6KQKqo3w/Soc11RN0hgf3CqcF7nHjn3G/nDPjvvffiB8Dbb1GehnPPCNBN5YeOe8kOojsaYDm5636Gw7/WdM92v9nB1oVx8NCwTn9dy3Stu250EILIJzO8/kL+wmr+uhZgDqOtKHMUDC7ZKXlzriWDn2rDjg9UyDcoL06JKwe9TMp5TfMeQPz6Epr38C3Ca049/VWc4fjAucfFzJwoZYenVrS7s2ZbCKukpwPnup6PPWPQGadiBkTg2vwNb09pPVkqtcR+z81/gGQnTN/ffNizgUwGWar350gOnheK9gqODmgm5l7Zl5di0xA8kKpy7trhG+NAxshQ1/yilRiVNkKi/A9j9fydD2T9jHgc5bnqo+HA615e+uQOA1GFQxYi7RxoDYNW6DW6wr/0+Z7tHNInfmUiTY9BTLGfUvtyRh0wHlQeb/P/7frpD0kPpxsAp7AJYmQzoz8pbC83wtLzoW2l/75a+0gjoJNRcuez9N9AazwiJNswW+oQufaZAukZIWw9HCpjaRh5iAiB+VZi/XrBNfM9Rw01LrOfdjniR/PSagiWc6A0jklajVuGhT//F8pfLI4t3/neF3//gF7/fsrdyP6d21Lj6d6A1p2YV7eMAVCkVU+f7nFyIK4P1jhDrDpV4aNr7KCmchbH3Ax2CXI5Zq0CTpCxH65ZVJ9mYRlX5mc2LSQDTSLH8bx0iH9jTBcVN1xrQ/t+9RF9hOJdddMEm6ZshdKT0oZJ9VYqPx0Av2P0CoUnPuf36sosoqhEmIwwaQsRTMlB1PWIIsUe8N2r7P+XbNlgELOJJG43CbZlo98RQrrxPiSu0RectGuW0WqouvklHBL68gW0sd093uftyYh8EMCbr9BM9Jmg6dAQ8s22AJJGo7KXFKK5YTuRqyRvHIhj/8TW2lWKSC2R9i/RZHf1Kje1AnkWZY6pPW/N7iidpAxznsvxhly9gWwbSB9pHwQTEwI/GeQWBPLYWq0S8ZOCNLzrmz58EBdB3pNJS/2tCSln1MtH74prUX3Wklj2jb1lQG+l3OdJX4AqZFsqbv/ybp7/lr7iH++p398/14L4bwGRCOh7Ip+SRBi+0F61//tAFrgtHzvBnBEL1aR4W5kh6tA6TLD/4CnCcuOI9yRW/3WIP5nZ6TqAeJYx8Z6NYvazM4zLwL/1OFLO+rZ1iTjjWqbkep4QYrX21JGIUMIlYamWYoYrJKaIfuYoBelNZ3s2hVHpnKL+BMsrnhlODOJ5CtzlPg23syJqEvxpOp91l7W47juY2lWzf33Zqkg5Z6TPXBa254MOxD1xuUOg6kAOrerHovZ/9TGaQBrF8J935xuyQC7tyWGXEjke5MAHQ+coylpoHiJYeokFxLdqD8sxEzDDmQrojix69OWN0ui4zrYkCwp51VRr2oLAP4VDDxNQM1gXlLFl/u9/c3xawqFFiVOV4P9DwEgBIlIligNMh2tG6O+RuTtDkpvBUJ9fcWcHkvBVfbJlXqFWyR9aa8hMDA2zTn3a7WUscCcBGgUZi9kVuLORaaF6uXbmjtgAFgphviOP0XrQYOA8gg7FxNDAvSB+r8LYKfqjsS4zsRbp+75WRbK/rhZhm6mcIDEJUw6n40ctY9olzWXhwGF0q/JDTWoQ4m5jRmJSbzDs+WtQO/+eIgCbNt4LiqOhG44+VF3QS2kXJ8TvAqlmpzzR6iz/18lvXzyM+sRKFBI0f/tumLS74S+h4TP8mM0CC7BPOSLO3Ftm1vbLmveoyhtyr9oLfw4pa12OR/wl782VQp4yS8FOk7bF4G4CIEtpNOym66oksQWj/arvUQkcqtIVJ0Hxefe9D8JFbIAyr1D8FDSFThvHYrTYfjhq721FboPOHyZOx/EXWC80pki8hrpyOaMh4+Y/B+kym7k1naG0eAKbYwOcwF1FedB3R73mmNgH3qkrCsWN645RUmMFqInupuj1ZkzTBLFyrdmM03CEyERftLH9cc93hoQA3kRfxySsfDybnhF6nJ/kLW9XUl6rmTR/CzYWrgdsZOjMGY32nzuTqcmLKVEjs9OM0jeYuj8oYcPM8GlpJvgx4ckfqef0P84jMPthrQge9uLtsxLiROSSjNZvrFaVTha93IO8AO1ipeRNGBvtyFnKMGFLEMa9tQPuBQK85KGCoKzDv5uAiScIikYhmZx9CuyrgugO6N1Bj79r1NyAiD3S7gLJpVnETQgiy6oPkRn8PN83dauZwz0huyz9MSalq1sirBS5nYdghcVRQDh3H1t37r9R0uf0/vRE0Kf0FA/UGlRhQ8tzcaoSGXDji7PPMG/7q3OhdAJQUKl+d/OexMyhClurtNf/C+ziQ3L7uZoZaaPkpJMhMVMWBHM7Sqc8vnqMNFKi7cSYXR+grKOMXASwWSpyn0q97FdJDECaodS/QQKLJJLKMmsb+xkUvh81X9vXeeRn2kmE6ohuBIj0xL5f7k6lCia8UpmjAiVQeVb/trHaM77gWeoQN1Cij2Ws/9jUibP7fgf5oWaNBI59GU4+/RV1Qeg9bVI3MyYDM32TiOcRfXUR4eKz7ab0RmeE2Xk2p/3ZaDs2a4LlzFSmFZ+hTT0n7XJGxJRj+UCaz4M90TXjqyB5DzKawRX9fAO8RhZ3PND22C+t6eKCWlXhhSLy8lngra5kU68bkLSGfT8T4PV6JYV1zxcNT+ykp1g93EDj1aHb5bV/Q5iclG0+bZTbhMZKE2Qqg5WBxIaHu+QbdbYMmK/vs74Y7IDeU4+c+T2KDGkRYX6IsXsFgNyE959Bctl6jjZeN2uNvTI21T2heZDuCoMI77blR88tX9CwQ0iRID4v6JGtgLnvMAozsASgxu7iMUAueAi3RX7MfLIUPuSSDUfb/YsnG016rL5tNUtwrfdN+/JXVywW0K2fa2JDY163K90kTXUz/F/qvbMakXYZRtWL7pW2aH48sYqregOn728tIx929WjUyMtHr3ROaqb1x0bwtrMI/TknhS/2MnTCmzLEupR9hgRHhx0xoZiGuoBytB4M4FM5RTBdOzD0V41dN/qAzsOxNjOKteo28tNfu1vBlNfcZsI6aZAjpFqc0Ztm7+8yBpteH7hjOtWuo+mvrM15Uh6IOr18e9xqrDdfHso0yyfqengxb2SjdkulENPRVv6k0Qu9/oXBjjJC5YE9TLxm0mJNxxT8nrTdm8HhJMT25xxyu95XDIul0bawxEK9ZvDZocSbK4PnZU+6Qoe8x/y4ewfWAgTb5/VzO7vnpb3s+qKtJycfuP0TihngFkmmQNWMTGQ+U+oc8LrVbM+5AzEF+husPtwhsgNempIuE2fnwI1t7hemBsy8s0NqE76wuAxyIWHsWytx2Ze2qI0gz+uFcdJqMMM8lIwuE30hi5gJIoojaUlY7ETrDNzsbjQStBWKuxGVEUMY7nexJEoI67+SqoOOWWT0mFvUeEM36VuBU3/dMsBzZzqs3Y5UUQ8KhPkAQX5wEjroLvtU0Hop6laNOZOI695dWmRjRpqIartCr7alrqdV/mhH+fTZe68610ZSdSNXnzfYFpL/oA2Zmh9qFOtJc49xh3IrdaTR8jCOgxPZvHUWzqeXzn0g4LrGl3LT87CWsOT9/iJI3bBT6XEjgTXsmlQ/ylgk+e469D6EGmvWJIPLXh/lXRyVpQmcXWsYfoHiftcmbNBq3TBXrj4BMzRM0DrbAVNoHlJyQ0+JRce0VSQ3bP+Kt/2vNOjroV3vO1as8yupnGbCLbPEzC3kURPYTMEIRZJ069ScPsoSMBBB9KidEGHPXELL/2Vo6S1owavHZgAXD0ywa0vwxTApUhPiMqiOjKnvGQA4x1NWeNwDiAP0dWnXTxnDsEU1DWjhAWbZxuFkLc/8DY+0eO2I65CVVoJyZU1CczLRavEpWfZ8nfgZXUH+EN+03EN2D0pJHKs3j5JsftX0lt1qciPaDVhaHORMgowJy61dJnrMXg9lUCsGDj/29bKOTPoWbGzUz7iBma20MDp4erUKi2F4JdnysJY44zLjo6EHx0wQcigKFXGtPuBCsE3bd3/i+hztVi/s4jebTRichEkEDSFPeVI4pUDf+grxLe7SSn+WzwL3cFOD7L6NpAIsHoCrnaH1Zjr8MPQJ/ZBEWZZ5Qm/OQfh0dY/+Bt0lNzG7FAOHadLi8pLLM9idXZjMhNRU+6TIWk27WnHTN5Rhfxky404Y/I2WKZMXTrKcMt16OIbTEI0Qrisx+JYdkd6YzuzmA7z7BJaVOij9YOGoV79fqeS2UZe8DppFnDRSOi0ERNfopF20OzZGIASSEe6SqIcV3Ne6teZ8XGZ/CsPIC1SOKH/Ef0wisIQEMQp8NfECOVl+L2WhRYzJFGXbSlCBZEXrXKfZOaUqHUpfS8cQw0UM6/K9AVDtI3qPlud/ilPJ/WxclwpUV5CvYD33NNOtHdORrWZL6AgK+miMw0tUzzHvKetYhzW8cMkL9iR8uwDaye1BPs0lAQwDFBSakANdcboiBSFE4xV7qDl5TE5509cowAbJc54v5yQLzP3EaIxchQqcQNruhEWcX0QJlAPReLbTICAJ+4cXBAkf0jStKHHd/4P789VLaUEAAlMx1Y263/wzULR1kb9QbiMiXhsXwCme3hXCPc/1NTnMWzMF8FbhSmltTeeakRLE5TntjVQHq6GWj9fGJ2VZkiYMEXY5hQi8mu8SKgH5kTGIPvvvev9jolWXoV/vFqZ2wv3U70Fo6XlSyh/B6biF+U9jfL5cuQhkwvv5LcEl/VHWJDbRWdJmxYNQ8LgjDr7gy7eNaFFz3ebXf2IdLLKAsQA6ksP4e0BFAP1HaD7ZF27wgNlmcage5XQVMjuXdJC41AsIDT8TKUEEe+ojrACoj1DnQvihCDcFb+0sKYLkxI0HM7AGdBi2POkI4HdSQ4sNs0ysoSQ+F6UIwQFW8P/+da3QmF5G/hBKcGcuDo+liiEwc3E6LSi/sRosZ+zrc+8LLR8IziwkVz5JA0iTRc5p6ggJ9NCfUPybN3lO3aMPqA8ny/vn3pUpFXSpZrZWi7hh4EZSTxgi6JYncDnZTF8KUDmO6shGXz62EqIYzSw02PJZ4ULme5wJbEwzSXNRhWARQX6hBa8g5wndaf2tC9KYhfBx1Y8OuXL3INxSsQruhEhk+sVL99nOKbnuuVfKhAtvo1+wyWZ7aYhucViHVfS5PVdWMi4gv9FSJlt8ofdQPG7OMEPpJ7A9cA3ld8DjHzmF8A+p8aWcKxf8v5Qh+8Yu2b/e2bf3x3Ac1s3ieFsg9PTtsYjm2q4G6Np6tUyNLW2b4ytzFGk30QwuN1XBr3gBbdbYah1ZXJU0bowNl2zK6JjwsKG1MOS2Xka+w7RHWE8uMbrjtGNIDBP77xDAVEXFdoMXue86EWZ9gBe0Mj54WuyDbdqpQTMLVJHNjPgmIaOEay7VxXwtZbaZDrcECoZNSBJhsqvUhi3byFQaD7jCtfRHUDnfPyyDYDMUcq8rDi+aOaUsGYiUqUGhU/xjhaeHDnGXE8feC07rW3U9fcVdny7c1Zta3OHYWamVUqhi6bEu56tDUwSNf5ZG2+/NXSG6XqpxHgqJrRew9201unfGX7ZGpgvMBhWEitef4cA9WY6BSWEauuGe8zDO8AUDebaVlgmdPKij2vns09YraeR6JQhRQCXYqMn3uKeqN5b9Pem/1L43TR+uVth+cIzONtTqG9L9XQDi6anRIVP0dXVdwJW8/JGnXPCrpAOPpYd+/vRjys+6cpzwEGE7IiQ+Lh/v+3TneQGB3jpmxnpsjowizvh/GVclKUdl4XPIqgzA7jyWqM5kmUDP+VL+yuNKrlOtLEl7zxOmJ75nF/EDfuU3j6hn0mMzBv3aFdFix7i7W6nQaQ1Ri2mYJkbppM55zLDZG6KMBn9SBucrCqBx0GwdImTGbbB7zhtw9+Z8NPDuGuRkyXFmEXjucHSFNwTFyzCgFT0xXk8+gPSrqDe+0xjOke6ZDJrQF+tTm7mT9gJ/Aoa1dshedQJ63R6AMk1Vm4azEKeQkno8GMvJu0HGnk6oC1aGJns6heVrosLLVjg0XYDDDF3j50+dUYucGEbD1exWwEf19cbia2lK6HUoJiQ1bQdnbznjF48R8mq51ZPrREzMlXdcRHyCT0/nyW1r0k0IoeB9e4Uin64Q3fJdiGq72z6fbPezEqCyRw9ejvKqI2EVctznQGe/pkCbPhrQhLS9sNkYu8KO931EZqY3TWJUj7VgN5d5x4539uIQc+UqVMX7AKQZgUiiskZl6XavS65XWa8QNv58kFHXinDVyV3Dk0sTXMNSSEMBZSlrk5NxNNT+HE+nj3tYn8T96LU82rSjQVCeiG1VtKu450fI6K7eDGgZi68aO9R7UFK7PuFsA6RzcxEbBRu45PkMW6Sl7x6d5kHAZLpUv92/1jAtqJR0l/Cjn69DP3Z2xOBLCJxiNQB6Ul7Yv6OvJDZK0Q9pDCI/NEY3BpRlZ6UwvXbgYoAVfinZsH9Anig6zwniPoQOo1aMLGJsnxIG7FDrLIQ2nsoF4PTU7YaRqtMjyd0XVWDsY6jiI8x9PnPW/Zi5CA4u/Y1V12tl0hr9J4FZFWLq04y0LU5iQ95MSarzqG/MrU5DcuukZLNwJ6sypDSkOa1/ri49RzN+2qr54n1JbekIcu0tMFVXf5vEUM2tqGGM37xnTZz1cJgN5aLqq+ld4CEwLLzHHEbZ0mJyYW31M3nnf/IYD5+CLvvhbDK/857tox+LltkGEItL19lxquAo2KSUbiItIA2FMQBNoTEa/EyHJLUViAnhRGSQ5mZMsZMywKUcc6xEW2F9lasWAWuUmT8PPA2rXaBEVdC/TBu+YA/8/ZOX4FOahgiPCXNrjRLWgjmGFwi/YfqfvIVufwtCvGS4bo5XvecEGFzV2vmjYDdAYDoJ1OjERPIF16hIUnZ6gKxJyzRejo8jWHINv+53giKY1LYCR2RaZQpsl9gYvD6QNVHc3ZPVyMoPO/7K98bc8dgWP2oSd8T0cwp8u7vb+B3Iy0acP0W14oO4M1RwQnimpW7Zm5BJy/0dVQbnufQqoVYszZnik61mQgzxqttsvrXhCa6Dyi1uOLmrmXtKxysFJPn5ASsZiFQt7OuZnGzdYkiJWsvZsHvYJcSxWlQjeVh1npNGU/M1VwDf3PTE79f7/P2vqkTMBYmhKlhSnmbA1UXBKHLMQdANuLTAaTveERU7CAHUXXcMxkx+0xXMknUDVWJV42mttDqDW+pfNLK1sQvdik314qG5u5Xlhy9u/N+n4kcXwsNFZBuBhPpUtdOX76S8MK71jxB+SpjRd3Ui9Wx6SeYt4WyRl8/oAXVSt9kyn2Cm49ONT2rQDYqaZvnAOKVrCfvgyCOzN3xfI2pBniaaSgVBBqaJliwXOKgULwZGTOey/Ij77iccrSwpjo+LnL10vtdTuWUadzZ/KfV7sTdTORdL/POJ2whboy08X1kZm653jKwhitoyhGTNwRVSqraO2H2iTPbhGThcfRK15qytzaVzdbyQhWeCVxOclEPTa24OuygkxsG8CThTl+KZfYoNq90NfzY40K3y63ClLZydjMKfTKBLxgm1cUv439SdWen7oKJ0nrmwyZKv1aOxxqwt29G/zXBh+NhIVfCN8WlnMCA7tHTB/0TsqFNQC7NSHKdKBEl0BcFllx/fpSPMH3mQcl7UOzJvsJpzWvqMQwtPkSE344IZgJMbKU0NIQyn3J7nranJObFMTtJCtzOHOOloEAmwnZX/rtPcVPEZzJUpJckn5zRdeeRaLGE8WwWU6IRPUu5CZR+P8/hE0PQ80788BaTaOKt+prxpmt/6Dfjber6a72Iphrj05Ka0gDzj2mtKwlite+etTpkhqA3a6amE01MBgiSmMeBsfcpD+DLL86BYLK/u2Ze6iOjG79l+rUmeC4ZBTt7YkIOFaFqse3X8lLXel6YzdAjXOJDhiWMXubOYOHmtmlerydkCBAx9eebWbUFqjSbMrFgD696AoyCoDrsmSbIz7fsLQG0ROFQXWmBa7myUcYybQY7KO+WoD8vyy52TjN40nWm0C9VW1X1Z9cGaGkHqUOK6m8zZBlSLP32TEPLfLkbHk8v+UEgo//cAVBRpgE+JfAQExoklUxXvesUiS25Xw0Vmp5DQcVpnEzfSF0WqA8yfny0f8+DbkoDRDzgMsh5ABfnAd/veE9FtjRNM9XqtcKxVlMdAkM86HKEA7yCKNUnYK26SWvoPmEO/0WZMw8+HOl4FD0sJR25GHLPSV6sfNWIjkIQbdOTKvuBaCI6PotL6OT2aMAbemqkI88Ijpmxlexk0i3PxA6epAxwFQCat8P9sff7DpLFbK8ms2soTzH1hslXAHQy3wkevHDPp8TesMa5MB07vASRjKHBQY6IRsSwaWpC0GReGZpFBoRrn7eZljhxD8BQiVAVmEzg7a586eAJ8oS6s0T5579ZfEkQR4tGuNN7pmYr+MecvDfbb/sMXaw+riMo12UTM8Z4rgE4kkK/B9So6pJsiA9knNfjwWXQnOy0HB6wRMFNtF3q7kPCx5gROMtyBo/d8X2iDZEbFu0Znnc9XxuWGlHNiF+YnR5v/yRdcQk8Jf8IRZcuODPYDSypnFci7yhqvEd7KmqN91j/39f5vPjUKh8fKac4la6lAFPMLGWO+WBjXayc3J1X3gn1peFrjZ7OKtA9bFCS7dXCcJEyTNNXLYl7zjDoMQg3bLJZX9uuUH3kuQDsE5USAcUfHv3wlMpwqWOlfWW9MVsxdJfOrnR/ac6m/wfeJzkfl9y1lRyWMsYBImQQE8ZUuZy47hFt95Lkmfac/Ya/F9fARDv0SpjJQpKlAHB03pjvqbhCoi6sEh1Zqcug2ZGsk0xX5X3dvWtUxOAFMLO6HlD1T7W7gNmuno1w0oCr7fELACA7IKQd6tY4xtQ22W/Uu/KyOcIFRqpUslMpXjG+cJUy4uILXZp+/8jUAf0b7X8DEUZAjO/b7oEwc6OeRFTAPAm9BN6+nFgO35w5OWVy14xFxmimcc9yTpeKi46p0EWUOp/wcgAYOxTSNL8ifA/OkGqfnXVdfn/9rG/AKAAMVh7pVuDy2j6ti0gmmfwQNm91CwKVvCCbQx6K/OybfVINx875iDfNGnJ93lZwyadj1czRVDaisDoqUwItiRdznEheGWzq5WQwLqBHTrDIE4xYUree5Q+QbbESm8Z3ChIteuQGtYDd+UJ66z7YQl4DdevBCTbrOEF6kbriYlRaIBfn7Er9MSblcbTVqHwZt6VlQlgRSmhcM+ivX9niFyPXB+JJqFq/93l5+89DTQo8/RNj4XM78bp87M3J6sdyg2xZSU24eKbBcNpICcFr1NHsNNhrzZBP8yzGwvasDaFZqXUZCI7v5r1KJzCWt2mxcAn+L4DU7QgTmCeuj1ncZl5aom/3Ga7WIfxDYoWsSiCUJJuXgl5Eu5q+OwHPGVP6PGObi8JZaCKeVVJQsdNHMqduh7ByReYEgXPZj+H2MvjQE/YqYkqm8ZUOIAK4oKCqfKjqoWXt30x2Fvut3ew17LcSPndSUbJ3qBY/BPNdf430s5NzavSgeUQXOdOYHq7VAIktZMqcL/8BFsxDgZDozHpbdghmhIo2kTD3MCRDDP2pDcwUy4N5qaNsPVOtVYJgeRqtzITPo4Yuxqd4yu812bm7C/CU1Jah5FODuKZgfw285ALA6rngdri93ZWYCn7HvJ/JUrPMqXP3o/CPiZnlz/QzPKxTxBO3KxZQr8zqwCpBIPQ0sQuMOUWXMYfajf4AVzuYSdU2ORoq/dClLWMGf7GWOgZjpDa0vxG5uEnlqOIN1HbmPLopk5W0hwTyYqA1e3GizeaFWEtwRiMHHIrDkIhzZheICeMMRby2XgbQLGJa/zd1Lym3jM6CwBkmYOVLGfO/H5R9lqwGWf6FK769TO6rwNTdiDLBBd9dzMJOVdlKM6B/Ho/75Cvw2Mx2AqA4NOEVKC0KPZw70Vl7QLuiVn7+C0nfoB6lEcUz8IIAXbeBi5urTMINpEy6jWbrbo5yVBrPJqG3l6GD1J7yNyL0Dy12LgFo7xy+d1wX/s8c/3sBcLQ4oy4UNZxugFK7KEPiyrkrphBHUsmbOJhvPiv6iCsM5zsCWrpxhKVxTqgCm3a0M25aKLxRyzJZMAJVKtd3Jr4reOw1kn8+2EjKiKbJ8LR1jWGj6ERmIQF9lylRA+jhWP0ItV5DvLNIMWBIFIjO5583GXoBHOcHZBxU6Sr9Xdx5sS5/kiBrVRa+kBlTyslkX6kPm2+W+HtFrr4HNilqlBxrAWOtdpYUL4ntw72Oywvj59QntY8r1KWnLe1bDjElSjm3S0qeGNrcUs6SPMirThoOgrgtT6XK8dWD+dwOcveoPUvzKd9DKszCd2MwHhrULjOd+5slmvmiz++R90DQxclIUrGpQoO76d60B2lwpXnptQMvZPbc0CLnxI3xzWDytu7m5X6aJw0Wajy8jG2b/Fmb2R/xZl3B4lYFIndjSg2GwsxN4CK/3NPUjvA5C++0xoI73l7zan75wHlKyv9MA9bk+rYwtLvJzcHWYJxjKJZygTLB4FoiYasCRxhINywZqt+dF+hTIxnNpZCaSoOdkEoloibKhM14OQiOmnvEwZbOmT0Cor33hNGxj7d5T0IHzSY51L1Nc22PctCCyZd8Axe8T9/inZSXoOb+Tb0WvaKQ8+NcAKtVMWP1PQPJ+Un687Rg9etu9Ecqb0xBC+eGmCEJtQ+pHtx///ffyExLYXphoOMKb5C4Hi3kfw2NS9W7XIJ9AVTTAM9KaHYwqM5C6gxeKWiz6PCKcy9g4BpYOZSnjiTrXi5scHwljEwUM4n+WbALL6E5FV1uH3wbCijhUX+Y3Ke8by/ZNOawjriNxa63VrUHsCVTuaXdsxb+MZwXgrLyjDNYuBP5yOrf3qczqyTP1H4KXHrcoOHasIbyUOyzplD6gC/bJHE9ZbM9ontJtTdOsu9mr6U3Z3Koe/DMj4+4g6D4BO74hRFAnRlOzrBlU/H5vDmSweJHP+oCQE+Hl0wveBOk2JgWOrMHMnlx1GgTALqbk2Gb27uIKqSB519F95FYRk14AyQhSGi5+F8EyHcLUMqXNZdFpqao5MXuEkXlwUjnqKCIt4wr8Htknj8cuXORnTTmVa+VMPPESbjBrLZ9wTMzdo6r6WhRd8pYnLm5fTZSOF3Z88OF39LArAxFGQLtQk0inEXrU5EQ9haHwSo1OGtHyI5TQnHylndc28Z8EZFttzsd0NQc297Lq+7YjVeTSdH/E7CbnLbIEv90H08rPYvkkaL0uZ/uws13dAz/bYrTN3WkUmdiqepyzOK/8FcvVENnZTaEI1QIOYOlvLApaqsMzx6Bou8n5BG4L4ALSoswuKKI/5iuDN4HNWTq3W/KLdZaOwi4FXJSiqhBpFw7Qpk4mlADfvB6EzBqWsxaC6ljM5NjQ3mzEH/DvAZbianytIEW2QGAld5UcEg63darHGgsz5agRJ7dqMl+NQ2T/sKjHyMe3TLJkzBcrs5K8ZkDCkgY5EepC6b8y145dB7TL5gfNAEzPxl5AddLO9y4lW1mIQkOTrtc51VHBxWeLLQzTwbp7vMWrvsuEThz48xz8H95h/SGybX7BybRglPEBarRT1TA4Dq2iEnB+Ufn4Sl2j9iQotosOh9wHAK6sm5la5vKk8VHZbUld7b6KXr+YErughKVy/aaN57urDxSc4kTwoZ4WRuVTzZvDvLHYyOSmj0WMA6KF2a4ohM+DlOVt2ktI+WvCfPnaGo0laUOxcPFjsWYZCTeXPjXBCvJjDstyPYOGT0KoiX2cMFd2QE+OsQLDzXmB+eFhUd0hmMfVObTc3Oe+eUA9vMP6FVGN6mtn5ur5cHDDJmjvvAufTVjawXU5QZ/qMMSniEYuhbPi3+XQGpv0wcFGIeKAYIwuM2e1z001AuaFCW+bKGooaDh821AxmMSqor+ROLWVtY1Qy7bn0wattDZOBfqO3Z3INwu02lKwnvfYVtO9sZHokMfUdRahsdvka5rjz3HzKydX528cP9mE5wMhEm3ChqWCS916YCzui1Li9Rcpge9g/tIV5DgFan1iYTf1UAwVo+fF5/8tDCYzkX6OZeYDIYpv9VC2SrVGh8/L/mWRZZv+EizMtF5euriJcS2Q1fJflffn6ah574yLtSLMo/njF8MoeJyFDInTd2ocAK/EUuut8x4iYMVBCve94cwn7jIOZdvEIZcNQQpfYlatc1dRFMk4jKskEgIzoB4HySRrYP4S6d4Jv8E1VBY94/KW9uigZKrFyORuiJlqaMIJqpFGjbcN5A2vYaHjAyI59SLs2Kc9gYwUbZbSPqdam9UFaM02yAua25ctG5VqozMUx1UVwLAUd72LwPSy6dndQ1TCNdayxKTkxN+XOhJaYdEWS+BxPb8Axx2JENChHI1ovdKsaxEzJQ5TxuRn97hiJ7GdLA7b333b69/aKw5pZHn3y6holbNfTJdxzCZCLOY3Ur+vMY+ENyUZU4gbDp2PhCfC5kkEjCPg3AskgxZIEMNPzZKTW6URvHxZ1okT4poZcDf6XjZyyKv9EKY5RSpi5MZF6BVaSlk6SwG6+j397PKySQwazZt4yAap9EaWdxTSaweoCmOf4HJAe/YUSURW8cuvyYbOmmBc6Ug9KnxmZyuFF7utMyX6U3bvug1df7Ag/wM8ArVXkvx7UlOv2TxZKgM0kc5saa7k1VeiIDfLLd4xZM0vEYkFRqeOTVCWtrCFHz+SJ9naNWVADe9+0dtILqz8r+OdfgmAerCv18q9LnN/3yPI9lzT0gzNU7rbRV6SsnEjw+2EGg5Y0SK/6xJEdMEhGpv+7ZZKF6hqxQ1lo8WYj2lS0O+1H9+LLedVQUN7jzl/Gb+Amj85auq12iqwN+YLC98R1NKUctezJSfRuRuC7qu/54v+Ks7oIZRu5rmGLP7VtRGSN5cpMJSQzVfEBMNKxpdE7qAEaR1jz44Y9zrnOF8git+KOVPClrTCDj3ouW1SRfn5LjGNCN5QyXipvBr0vDwerODnam6prIKN4BTnEXnC5R/pMGWc9Gd0p7hgDID+L7paxow24ddweg3deb4j88fy9IPmkWzNJa5+Z8x+R2Z9uoapwJ5+aymsU6lw6kFbVYOOlubXVjoD5a9nKDpR54Qw5oOOoIpLEbBQM32MgUMpLJe0FSKUEaJS5nDdDopJF6lz6fHBtDKkQpJcq6wroEdbaszZsMMYqIQBF+UPT5MJ7fYPbdltMa+NQXrlpWdnbJkmfsMc/pDZhi30Udk/e+8Me5pZkq7GzR5Z1y2HqbapOewzrwDb8VZal7dJLBt6HG7bUFCOl0CCQUJ6eJl+aVuF7saVFwqjRDirUOa9Uiq580kEPtKSg4iGHbM4H6YDVzVnqP8T5j7u8PNexCUvRPWGK2ZNmaxtuVTh/E7WM+vHRYUNkXO2I9JvwV5Ssy5Gf8/4RA9mUvCMwjSZPKarNYHii3I0Ak3c2Qa9wEijJOAtdTww4y4NMhVZ8JR53MzXGvRKQArLHiXlImagpj+7WxzvryqVb6LGPE+G+khH6i+rDWgGW0w5AVgsZT+wyzm80iEIbfxWoRDEACR5OaV0n2WssduGApJ0EWgxBxk2RFkUB1JEamwpjXEY0QvMKOaLee5tR8A4g71WPgZojawpKGSQSE/AP/xQ2nWxXwqTigvduE1PpgZAzPbXsOvKYNP6MrstOtlUmSBielka5niUlYqLjyXzZBd0uceujuIt9m3PwyXrJQc3vaivqWGTMg8TphRtw2XcITYZ+ewlY10ZYP3+zLq9ufBn0gJEGSkTAG88TNqMVM3XC0NIEL7C2II5RnJayeAjYS5Nb/f31pCgA1IXHTDf9L8vX3yPFV/5t8ZDWUlOo723zsD8eS0H5TTiyZUHy9EbWNimbgES+5qhFqYGzF5hVx3iF41bdhNQ5ohfD+InzCHcIoNtP/aLyR//hL9KJVSKgqcScqMRVLURMnUO6iET+XYjh6Cnv6p5oj0YByKUlJREjSQ24tZi1eAOZv5o1ERBZUM32UWFMmwDks6OHYHSRXOhNSINAglzLoPDw7Z03DnqaUW6Bme6LFe/I1wGrjyKk18Ly9gDpJlZcMktJq+qHAtWcg7X4wefWZlFblOcw5mfE3NmaRGEIHe4bAqvodBMFKc8xmCB5LjfL2VRwTKMGjcUPO6hMGQmFYNhH4orV/xrTWAvDIaYS9Tvgg8Zz2oDF9ROMBV96nCiOv0rIlFKxhnuXiZuw2x758kHn/9roSN1iefsQwTDltWJq6xX430o7qJNGWVXhxETb9Tfy1eTY96C2ts5yf/mF3pPn1mSr0E/shyAZBWkX///hJYN4QCZN9BpKrzNGJ0Chx0tvpBPQvKSk9Wqm4yQAFIpma9mij8sPPO+c8sKoNnf15Ij9NCz4vZdj4eMxa4dtrFxZIxbJ521O975HUJ+0w6T+HywCuwKWO0eayNJjYiLCo08GZVq2IklRNOdogEFeUlQmOxmq4P4KB/0pwvfYgsR/6Lkoql96oZ7jXvw74kN8neefJPj+FgjcyTQdznwdjVjGvbATHxlXUyXP9zeDn339JHYJLLN+MtuGijXSxzYnlAoO102/rg04wMuQD0UyNObubIrDRRx2TI5KuNlijaqfi8j8V9Q/48YnqcnT7GzDRRFgzXhCvIxGw58HxeduVVwY0XC55YZcBWOJZlqs/GD5/e9mk+4V5sEfZXOtCSaOYGelFg48kWolBbx/n+LYaZTtc8m1WGXaYEvHOY4mV0vfizPQ6cBTRg5dYBMSCuHJxITSDWHdX2AEQdoG2yRYfuUG/138N0m0r/WedW/b8pGWr379ILYIXx/lbRi1X0ykBQ6pfpIb0oT/WS7HZHsK/goGACYoxjWCOgVyZ1XzADwksdj1lhLMSXEEumakbcHrn1oMZtdxXhXH9HS4BHHnfZLol0MGzqt53Mahta7woRUeR8UxdBUrQ6dNbtS0OpQh46kePuGqj1yOupz6UFD38vbOk9vKI1TPDHuVxll6iDRv/Yz4Oc3YIYyiDh4xCyJeO338UlM8srl48D9CQqtXtSCfeCLi+3CUp9VEK1UOqNdk1ERdpURZOO8k8bvSYLjS1txg2LSwiLz3euqm6XX0h3Ydao5JE575n1Rd/U7oY2baF/pQ1LrJf6QcHP13kLcTapYMCq3pzFZIual4Qm5ns5rcEjJ/Kz1kwtujfDZMLAF/Na1/OZbnNeIGWvUwFStoj/Czp8yZETNku/RAUEfJhn1sRlsGFHp2rGxWMSR2BIonkq7RmT6jXj/roAkPPr4iMdqeDqSdqZ7SwpO9eEoJ2HfrbNSSvPrSDhivHqSEFTQNywqi4VvzJQcWeJ2yx1GSUnOgTRDiNp+mg13mCdZEhRTa73nfoA8mZjN0+mlLvn+9o5OZyirR83nG1dr/DSbn5230i7c3gmaKdTWyDjmpZei/cjVcmCuN1p0KoTuo1Y0HWYEvJbxpt8dtVAo3dpJwh0Jw+bIt/TLfWJhdCGWAEjJjKHuTXT7u3GtYm4kmRT3AOh0KntdcA36nTZwDLr3qQJ/01hhQoeRHMyji74t54eKJfwqLg5LldjipGDE8nM91EQoxmjFn5lwRqgyk/5qmaANaNJwCLuoEGaSCjKJqHptN1GgwnSQrhhoDonN3JhnDidhXcmmYkpkmauWcJLOG1vb23bnMLZVts37tjOeW/GeRYZljVYn3h4cLX2arP0yVQhOV7Mg1tJKxyNmcBIvEKmWddHPMoNbc3k9myG5wJISsdl4Q65AIJsn/H8f4Ela3P9e6BvHEbsee5XaIKHUjIGHfpm+YuL7HYVziv1OYxK8dhoBLIaZlg9ImkYzNs5TvX1sNdU6gzlzWZD8+hJN8tCJu7o7WTtzir/cntes18OBmQGWPXxNjAOlcGuuNj9yZPhPuIVG/uqyTJe/VWuqMjHpFRWVKuB0TPl5aLYdiiewysdARPKbI/bcGXfv4XgIAi4GTnaFC07+ZbRmM8fzMfxbbZT3vClbMy41KEQWk3aTE/Ms4wKK8FtX+zkLE2dpFkH6q29FtdbRwT3YBIvz8K8fuh8wlriTDpFmm5Iyg5rH+CzpYthK5YddpjwtuBODM72L/dYdOvKExoA8EPywgmtOduYikEljH7jL694QmFp8coR9IrM6zS9A5yVEW4BnY1lCpJFo39dLMPbM+kI3EVZyN5RTUJvBYmnA/KQtoEdK+9OFvvfQ6ImYGEYx8XOo8c7CzbwWY0XWLOU6oxAtd8I0TXDJpK3rTMhM8QbHArQ4lhL4Jnmzy6N3YTZd7nTam6uO5KbXYCp1zKE7aW1lAkcs0J17Tg7y0h+2yDlb7uPCXaO2FcaeSAaoZOHJLOLSxoDw5RKteq6/aMnnQMg0lpnhXPd+QuSYVZY4VO375NVCsNbyxUZGkhTD64G5girK1M5ybOiaJRngZx64LVkkZGM9FA98hpya9AOnrZJ5dgi8x5whEcTAi+/AUEmIaMzeEsPSf7MfiDWMw9dbe2AWkjF9Rt3ZBzIAnzl9xIxMDbFxMWsgKCBIBpPhXNrwlm4KcWKtzuIBHF5LNJ5/4D57lNmQ8g7/1zVE3SqDquiKDQwb7gsrWO4QTNtR++vdAYN+SxfSHm0rOx6mRXLbrZI6LmVMu/R5WD+SIAt+7PAlaFX2LjI5BqsUS4bmm0iH+H2iVgAQa3KQTzu+Qsy8IGM2IdLXqfJqjJ/LV2HRc0MvwrE/jxMP7viShtszIjyH8zChtrEk4UAe00ux/lnbIAO70Q3HEt/HOnUddSTqbtnYtjbspOaSGHpUxiT/Xq0ZllGbXTnsXVZNk3d6j9ttcJbLZBdForUr8YP2bCZElvlIrH6Pv1Jo7/6iRjKpPEo8Cubvl4kwWmsi8h3TZDgbblSO+spUa3MeX0wCKXex45UKZutH0SEQ/YRM/affdShrX1XWmexlDnmkRj9aCMlwwDHnOKL7Tpww9/iDitxVWCvZrvbwHXOqjIC8vfodKk6emBBCbXuW3gZvMLjf5ievhgjSwrCsS+2cXA0s6fZ3SfhZJkYWCYX7+IAquHMUL+v5gTKIemHvFp02wQqu7nZ0QPXYDRkQS+ybLptML7xWT93WZlzSHnFHdebHiOiJjM2BQGM5pMh4OQntXQMKAi385CwELyRl27+usROus7T6HZqO+ScLfddegpYsZ3jDr8ufUlL/RLw8p/aPGb6JTzNmjF3HYAIqDAGyi3OYh/W1BAF2h5otr00mBahzSmfsFm5Rl9ZDQeFROsMxICe5J616z5d9MIOoPqVJaJwSWMZt0wSchShMuTNUm2Cq1QFbe1tuswmRSsoy0ym4yKHWnWgN2KsaU0DVLB2jsMlnD1+BhYvny6hlT2VPx7etM3XaExrKLCFRrBjIBjjVEgjTHiyO+AeAfQdOG6mim85kUAJfe9HcjXjb5vfwpX5BUUruCsI/bxQmsaUVmNYatwsZOKT7prUTzfVfi3vh6rFKTYsy7Sc/a8NIAY9fEnAxMvTV9DTlZzWXkquWe+8RkmYPIr9nnyA7DGtDW5H7+sCmP5nuVXRCxOmUJrvraYXKfOllVDoHNtsdTZJgt2EoXLSfJF7ZXTafjO/J1/zQo3nrcXA7hbe1umWUnuk3ZaW7mM1hrM7zCw19qsySM/emhkvVYOqQHbThVADuKGuQGLRnVnZXaMtvpYjDdcLzHMRM9BC75MxcyhuJ88PHKxDQtQ1uHcugJQwiEX9givgFQ2gYYIrjCOVPsN9OyT9zNPROkSzofnnMjTKmaXn9s1SEJYMqUBbwsNSapYbzcrsubLHNKHtGJjt5ny+rlyc8COCs9D2ZiUV5D03WQbRwP+SifNepskujbS4Z8w4D+A19MB1xOVelPUP97/gF5XeuIpcNUPoikROQ8iV9S0ZBN7zk3g/Or80bBPdqq7ACg/9aiSelX2htHTV0rqMZdHGIuy9xYVwJRIRIUZ2M2kJYYD5KwB2gIHF/xC3HELBNcIfuDfLWx0clkXoTve8wp6gRkkN/jv/9c57PjxRVU7jCWXu6yruKIU70IiiUwYA9Msi/Y3AE1Xrb+Eu4aHnsmzBryjNMRmk667dpGEPVu3Jr2jcFzc00VMgT6tI7ha6BcWBV29XgGvCeyWxeIvAViMzfgMWjYCnYbwS/Ri2VHdJ9pNGe0h5e2A4C92zbewNDw3ypXw8IyAX511EJlZNHYRFxR/YZibL44U+mlP/42tsiBLiVSmvGyA0gTZ9f5kOBzDF01wAUua5oX+TZCnXzDn6fZWy5UYqbtwSlcjtXSS1R0CEyb08eFGfm2ssoUspiXM5DbDjzPbP3Samz+JjTWZtSrm6CSa6pW2ih34+qislg3NJNmpa3fK0AuMV3h0FSfuGpG8MmiIVWVK0SfjQUgZgm9WPaEjWgLgOVWBYH5sfmXP2wuy00UhaGiM4VOOUSmbx1GHKymJYdywVmUZa4+C9FsQRAhXXtptvTdtEFrlFBGvlPs3q9QPhx1+OPYClEb8BjGIh6ry1UdQ/5W124lO0p6nkd1gyGGIW7vOULZIBJRgXm4p8iJqSURq+Dze/NrSyyuvHQdq+Bq5IEjUIXpJxcnX2VMYJJzAXoPSsdkFSWNM9e+AQa1s1oP6vnJFRDC7CVQ8ZUmhni4ZxtluSHWU5zCrzTvaX57gAwygrz/fJ2tmbuwvdKakRHB/ZAPp4/oeKfYlAW9jv6fiFc8ipIbAuNPZVY0wbpzVxCS2fstkUxCqQabhJYRbpXVOjjT2S8xUEXR/a9HnjVt5XidpAs5z44fNkGFItXzpIvMu97pCQ1nJ5OTZh5a9+2cA9P3SeHVyWRfZEmqeSgY6O3VaODfwOVTFvJTYKlnv58AZqsxEKKBVqNJvlrUk4rvyZs3fo7nm2v5vvqbhGmwwuYpaLLW2xmUblpJf3f43hNWWxpl99HKiOEMqErSQI9T6kRBVCmibYt2ZjuR7NWBRDjsCHe8iXCwsToCM//37VKC1fVxpi0DKDSytO3zFciDRX9aUtUdS9wBOsqc73Xlt6a411Sg34lbDTxIui90N/UKkzfc7a5wu8HkbluVaxnTsacGfiSuKZPUkVuRhTJeqISH4aSJJIYbkm3QCrlZ0VmLXoGze7mmoUGlhhwCqZCFp0wC5RqvpjRerazVnTQL0tyMt3oaaseqtWmgwJsq/Ja/WQ19BZE4w284YzJwKzjqf6Y9Yr00mJRIXgkUuqec+jGUThCroq27XO6iOtg6hWBXvRVFOhdcB1trxbgK6nWj6kWQxFXIk1OG7HO+vkG3bM4zKkJdNaau8uzoT5Pbmr1biFlvoTPLPnVhwPCMPwYFkOuTXt7jGnYMUVuFIQVR50C03tCo3HuTgM0C35jDVWlVs5j1k9sAXoZtz9eVdXQIzwb6w5zJob/MZgZyz6JMUM1ivnLZsKMCpvEAjMW5+i7xwvN+RrmZNSSomwrK2jTl3Qyc3sISg0Lchl8f1Ze9p1ou9/l15GuPWHb8iEvMmQEl7u7UjGtSGETcH7gyOTWxBJEQKzZmX3fFIBJXsxl7U/2d4xn0kBvz5e1dEFBEhzlYY2ve313CuF2ghB+qhzNSEgAWWYDBZp356Ymk6XNGipL7PrsF1jSd3s6+4U8DAoOC2y4aUGjGwtqEhdOVH4jHTu3hSlSXtjNJnpYSORLi2nAV6AVZYRqxeAKprb6Cpam9kF7yk78yq4F7O/Q9oYUvJazcYxZwNWlKW9ehCOpF4TF5VkFl55S9rPYbE69ygfpSr01m1TCUUCmWrKdKd96nKAUb/xawCF1OmFOh7/j66zUY8tN25tgaP3f+NDxGqyCgBbyeeb69gzc6Tuvcn6ARYMDOx7VgCRXnAyrCXfWnnHabQJveSPI1rN+T4zyFdUf42HxFdn0H9Ip03WY359cac2DW8B6z4wbneEfy1C5lrlTKsezJSLaaz0GdzbHjK7+YnKhPqdDITY5hPMlQT/yuqanNzzh21abdmWxUqv8AAiWH/9xtnoRI/pnzwf0JZFDtcfQ/m8zgLRPid6hKSYplsaVjFKPasYozd12dV4oHb2d9uxuJcZTeuJqdBazfRZXygav9LU7bWgf+PwPsGQKI/g0R1kNv2HYZwtDaFymVErhIQT3jOSWNrYfIhF8w/vY3+M2nAutlpG5scb5t7fQBh45Diz4rTX0GOT+b5k/qyoiwcf/aRnBKkDkAfsMxPbWr1OUbwuqBFuKsTnyD2RJHsgnYO6QqK2MOfg2mNvXwewxsuTQUt7812bD++DDPpurK8QZ9EuANDAieMrNnRJnmvh0HMCxSdY9IE1aSsOOi+bY+GI1eMngJWmlszT34TiPDGmZyK8Yj0aNkHkavIp6nMyZQEvSqv3kBNFQWRCM2cD9+V5mYiMk+g35dtgKeCzLwQSg0yaGJ6KseWOvt0QQc2UVNSC4b7SrD+JNnaT4t2BEC4GhqhZDu/OC1dFzIkq0Ufls0LXUMS4aRwM60XexVbBUvTe3wgmKe6kEtpjDumSjQumNQneDBkrsTYRqV4oC7VmZczBbduuNr9yucI+nf1ffLbKNZueY+nCQETHHXbBPr2Y7MwM+H1pK994Oj6jJPPr3h9sdelqKrP7S11GME7uNZnl3iTGi/9339n6bHuftcfmM7wwO11/Lz/nGd7zI81Fv28E4KmsWmizSgR6vtAzj5eVJMydIjBsCVhxRrZ0aPl1qxpzwSYix/hZa8LjUGXp1g6Wt7haZS1/ABzLprbkPbJxIeEM7TFmUF31RyyszRg+9c86Mzi6pd9aHdECgKzMJNt5g9zm+2/QWQNWORGCZPZstokViVULFThF5r6quwX2a242GwDAQBIw0hy+cZgOmoYw/nueYp+ekY8eLLlUwZpRmHnX6rw2ty1Rb7Mn+/WGE4zxhBspP3LXcyR9R5rbso0p7/GasGw8jTR4IM9nPlLEQMDNBbIV3j5EiI/wY/7hDtNDLpy1ILV4LPvQXXP2pDW78puPTJcVKZX2YtusC9YuK7TBnxtH9uwANjyoqJkxj2jtPe8G79Pd4T3EDzjxo9gapziZ7V1j/Tv3RgRQj4W18Yl9/7Yi0tXV5XYLrGlYoVB7WkrYXU9ge3RZBI96IYl9b7nVJfS2yGWhSY2igLQf/f4HPx+By2dJOjWE0pnRBvfVyIel8l5QXos8VWr0WXi+tPQHtJTJFfXHeNK3q/MgUOKppadk+r1azgNnHP1SvN/Jd2nWx5j9WK/rxl9q3z3NLB517u0dP3zcrRGpDInYI6SFVCWjOzIWnO5i1zs/PE36UCuk1PSS0x1U+pR3PatJYwmG/PdpyYP4YtFt3ta6g51vPJgbZPE61WdoBV/74NE9nut1z072rprs4aQsHs4Of+YaTGuUye0RmJGHnqNp2Jdl1Ke7G298kUKW8IgzTom+aTFXTQLNXODfF3zbMan9gElq++T/4uQAz+hmCndk1LglqGe155QsHViOc9ehg9DqsqIn75ZiK8GZih0d7XVnmjY6kp1Y7p6bK7UY+NqtuG/OX6czmthEtu7PjYo3FDRgxQ6At6TwvZQe4/ihDyHOcoNHhVAdMNcXwBr66QENjdiWA6vS/PKOIn8f+9VhcbNsOs4bnKSadtqZw+mN1vjtAExs+7btz03ewDTRHOlZTJlmoSCZP62yfMge/uRkqrTfRjWR854LmM0uzOzBYXaILjz7mplgDlyCl1QWCL0ymlP+Dv0V9tClPxpOs7/Xl6d/1AvKpb2v3grOn16Z5V8NLKLNOuETunLH73YUOCv13cEiGLo9vMYfQMZK2pPZNWRvQYyuWKltrofiMtcYbuHOZ9DgerNkB93mfodSakM009KawOAM+UuYbNCWPQgXq3uI6uHU0UJDtlnuUbSOrVblS6UK34ynSjLs23xPBxCJV3RfFmcAUyGswlM3PwAA8w8j7pR+VmJ4YzJVVg7dLdZGXoGgnxj8v58Wi3ZGpVzI22SfroUg6kPL0dhtYVMzVWlelkXFLVLimj2iVgzkbhBvsLCpJzYVCu+xb2wovei/11f+uBOk0Rd5tBRk8YSeg/0p25f2UZvb5vOPP+QTVLm69h8rz0TPI6wDgM3nNdP5Cc1fhTYiED8KH1s5wKYRILZBSh7TZ+/KAm4z42Q6NsQgmlFegVKeNlWQYXCSgNZfYtvRXGqf3rd76R65Sb4K89l9wAist4grcayb0SlVBMuwq73ZOrfjvroTS1wEvlzrxOv5yL2zOng8ISARq3tvwCj5+/NaISSTPhNW5OKvubYJVa+N4gIF516ii4QpohUcs/EdL0sDPJX1kfZtbsyPFbkPqyxiXaca2xvtM8BDHTHFpMFv+R3m0PooPvJLYs9JLHNpD7rc1Ge3CZ1T6RfDyAPuUmzvrdl6j73gVvju3WhgFLUfPtYBXxPelBrbHIWrA14mf5nf7AyP73nWBvle4K7n3mGjnP/4NDHcZiOh2kXk+M2ss6GQazYwHgPQaq39RLkhobq0UclVTW6vHabdhNMP3thq88xcpVD3MdjGC6JrqmlqlTWG3j6ODs6nLYI7shc1Tt4SCDTo42DmupsJsBrH52Ff4ueN/RGK14pMCyvpc38B4qwblxeMKbgTzJ9az+FHlSgotFsCT48Al1nddBCmpqgqKaVPArF3a8tmA7OC20e3coh0w8+AFeJrsKUaZekWn3+8+YsaY0AXQ9hgjxb1oHOrsyxCMDXHV2Va4SRmOGZG/vjXfo2MeA/oZi6YDasRGb2RvJUrivveSmTjAmgVhLfjZc7Y57clw9bXYo+zo+cAWZwt6Ba23mRwhDwK0lU+p675AQ7TUZiDU6kYOwafh4aAIcf8VPvVsFNC+soR+szzKGhz+0RYVuV79iGlcxl3Wg082ZBTtpmn5y1HOX3UCroD0KlIg1rteKERHRNvdNGjIX8DPDG1v7bw3AO87Fgm9ihmRUS8hF54TDbKmG2o51QZMIetIQuuWHB1yz9TXZrQs6afYBLW4EOv+vpdH1BHn/62jQiHpe/FcSH3JUjj2mO0u6tgRaPBv2ElkVUnDZzxMj4esFAs3OlQfGmff+SPLfka8Hk04moBDgLg0k50AQxT2YsPHCUqZxc1hNUZIbN/vZ5zw52aaAWEdiv1FbPmyOL+ZywQyaFwZ2WvDVapxTOL5rUH+n7w9Au9KGpS1o1l1PeIpqWtUCcbpv1zK6PXzP1q7+CRcQwIptM9uY9f84dhpO0OyK6P+eu+EtvJTvNdLx5AyUNvLf8snWP/5cEOA4ZQB5Y8T5sIdDFkUZ3ZwWj0veKfCOmc2jqHM/DGlgsd83QeKNPubG9Zsm0HHDRFG1fbVbpVnHFotsSXtMlCeed333d8PRniy+VFEpXeUXMNiGCmOPNC++THuA8WB3YvLgdP1/PvOrq4GuempDO+SlEWE4zzkVXTNOqPXMqejKXhUqrzRMpyBpw5WLjNL0lkpTfBwsFRMAf+UMjYFGG7ABZkGbPz5ridP2/ydtEyZ/uQQy0XwTo1MAPIZCDc5U1AcTxNk0/WXYh6i5uaB+3/GtB4Jfa7h9PUIqFMfme5NBpG9ZLgrokprSgy1+U+TD+piLYq8yOrWOujtVz39I8dAL/gag54SQzT5/5dJIKUoephCJPuZxOKG6aUMHyjZz3ykpNoF0AYBmDM0xGd0nqXzUhc1hXkQQITqell9uroBu3y1nDamMOwfd/9pWa6+W24Y5TjRUcnQfyRPOssfx/2M3ftqelYY6gE8piHpxaG2BlG7rO2SO6l8XA0/uPqEjZGt4LBR5RTA1Qp03f5TAvhakV0ZyXUfSs64qHd87uFmMggN+nPwS8hQuIS6EbwOPLaFyS+Fm3OK8vXXf7R5FNvwJedfLy/Cd16y0Fxzv3h/219T6gYxgwKOrFiZQvftWfWtA9zwDfLaXrWuVCQUaKu1TA4l0+gHUtHszd3zJL1T4ztOEbzkZga9DBvaftyDKrIDqDjGC+AtN7cLOiGtuX99D0eVsbcCtYUuPBwmIlz6bfdpKIWmVe2G52j9Nx3aySr3ZOh74BcJv3v6VmT9bP2KHPOo74t8EbzsWGI3l/nJy2TcDPqB139ewk08HOxB2nmyIMs2uN3aufKnG8N0DfLnclcJqZ2ayZmQgrWN1nC0yDEsTTOVEZJOIY1hUdny2pj3Omczss5C6SGwaiLrGBSCI80WWxSkbmbD3fg4BMF3GgC/ZPWuC9qiRgE95nfDNYRF1nqQEXUntZeMSZVCjY8jBuR9mKKfPXAeDxEn1lkp/WsGF7cv1c6EPbsDSNR6QTi2sm9hBFHaaTo88uvdZJYz9e7rcOkKWkRlfSjLxMN0NWwyWpwpubUettWJ5fa+WlT3rJc5f1+1WWbnjpHJ1DM2jeQNqbmsQDqRAJ1NKY7Q9IMwK86QuxbPkr7CX6R7sCVckxCHmOAG9G7+vahPc7n+lynf/ocnbtaDrQ7hYax+GuHEuxziiCSe9zDIjO4Bm/p/MxHr+yNng112MfMO/YUXOh/ldo/1L/ZJ2N1MX43CluuRzFJDVvkf+gQ0Fbr2k7UMFvl/5BPj8/gkCqwpxTYfdOsq5ArAaXP37zntvuxbBpVtieL4PcV+5z71f8KHSxo3AKI6nwRcZubAgHZDAwvzW/O6XVxAyRCu/Rg12IoZMIxjQCeaF7tsFOuqYVG/cfUMLX97MV8op8Hur5kkgFRugBOPFCYWsQ2dyfNzPkJD5BlULrhBgKmgD78+UESSawrYS+LJcgQb48PaR4oydZ2AXDMHvqwa0UfLypMtQresfGdt5fz93tis2fOu05TX/k8ON13JFp7D4jweEZOZ9z7CTquSsJ1MSqua3zX41Koy8OYGIBf243s5J8/iXp9lNyuRc3U9mW0lrwAgnwzqtkzAOCrInpuXyk1ccEmTe4wolOotvwG9AVTM6pFLZqIqxlaIlzKrqbEq+pGhrKJpTFmF+xJ6D7fIR/eNb5Sd/o8M6VXNBmXstCrvHUjeeNTy6ROvAgbpudcKY+KoKsLjfjfv/6hlP+OxE0/4nH4lwdv2nLZxPLMD/p0UOMPZnuhxhKmQCv3yM2fsuY//ZkfauiSUx3Wb17l+iAObnhxRSYkPZX4EfFgRpYi2ldZ3H3wq3qQj9zxRKIxUMnKZ4J6LzOYCSup8jVSWaBh5J0BKf+mehPY2k3pMSzR8iOz5G4uT37ezv55zG7KlNK2+xy5C+O/mn/qiiG6arr/fDUpq+Pvcyj6EsSMJ5949wqsuKenla4l0vkKO8myeEamg2+auUuQxGjx6Bwcc29/bsaAwcUUSUbXdrnGV8uasw/5BLVbt9UxBhxDeRfIAoBCciyG1QnW4A7G0va9gZK/B/hH1kJ+xVHth9ls6IkpaFvkoRP03+24zt1I/sHk4aPM3X+RuJHkdNmvjSXlKEBtp+ar3FbZJ/ynSyG117QG1qkytyLW6HxA/3sfk/6nj9rxDZgNLe2U5v3ozdh52/+zbMrVD8j0E5SezArNm5O0PbqTAjjuF3z3Wwf8+1wAJy35oyOCPfAWygxfYxqdybZplMJi8jsRZYTWGEdJAbrc3R0y8Nr1K0XNhs7NAgqB75z+9+DeJ4IPorWZMbiYuACr0BdYRnhI4Wh45InRG7z5lcYetVUajCJkmRVfBXG//MoLmFG4iXhLFteqP3jylE7fdt+VQjjT+HI+j40Zcr3mqN8LgqVWQHIpalJq2WpwWj1c9upGd07I5XkGlgz/kYhdiA5dOh2v6ieKuv4AE/Mc1ptlQsHOSLdUjX7kN33IVF9S2m65eirFkXbfd3pRTZLTUxpEv2Gonf7uFRzjtrW931bEpkC12HFfdIYVOgZkX1jNzmnNeAq2pWft0kx/tzwCjyGsjxlJ/OxV2gwoDJ8e2KpW8RDPltp8m64hYPgCx3slUEhVmb/sPlbbhk14JiX1jFRoMJzLR9y8i/uoVjiUq1G2fj4h3CvUhjaJKbSuvAIMXha7ocohh+MG1/zgc5fhwL8neHSUkKWxfULzfmf2/67LKPSg2lc1CihSYd6ZUyIKvX1ENgw3py5wqnyyBMsSX3ePY5y5ci/uK774aQyOHB525sAGCnMfwLjAsUr0e1PlDr19WpiQhVBKeHG7i99SDbku6Zq8PePU4S4950B5xJo21g+SNXf+E62QEEMHyTvXeEqoaypr98D5kK62dB6/IInPEAjIqvC/h+HSmwarOO9PsVcvDtadiF8w9ArTSabJ3fxRmFQXnUlv3TRS0N4rEM0H9tQ1ksz1tFIejG9ITjwv+lXhJrLuvtZAe40Ot5ObBMMd/+9HXJeIuqY+DAfD0RFsRTUcVtLM1FqWKodaX+P4tPy7Gv/bGw3BeY7JgDM2GeHXHnbnWRxTCpR+uK/mRTC56zSobyclfWaBIT+INw1MQB3ffs2GP8m7cpDKGZ+tZrrMluA7dd2s1kblqRT4kgFY7gH6J5z92F/R4F1KBHubtEY4IJJeOnx3GZ943ZkPOt5CEswmqD47iiuftB0QH84pnFUDAzYP3pk2ieQzk+UD7ZX0sUNDPsUvGfCBGRY68EB7oWETpTfjDpfnSziuLUv1zIHQ6QAwMRyzOvfAlCaXmv1rB5I/bbtpV+vKcLDN/0XafCKzRjKEkdrVdzh2HdW+CAgjOHQVS7qo7jO6MG737vluKAP2NLFeU9n2a+QzlfaXKA4Mm6kwxt8nc6P1heJOfE5p8oUjmKfg0U9qJyfjpErXD1N82WFJT55eFvTGNXNSayZow4JFw0I908PNJO6PCfEoxKYVGypwJQy28OwkwYpJQSjNabx/YXakQrMgz1HJgEOWVT7dWbz35CeJYzDwXFlkFVEmspeC4d/negmUzlwADLrCJR2ek7+x8WbovQpSVNMt5/0jv9CbsTakHQpjoNlunUZk1y83f5mga6OcoOhYwEPPKYu1LYJvnL1kLbfq6RpVvwpen/KFxJzT/4O+uYHp09ivA7rbTCeMz0+Zgpxee6KH/qMi1r6BT6TX2RPV+FOCXDen/ItPOL5QzWf8PpDL40UvmLIoUDhKVtOmvUOcSybHZ+ggOZ1nT+tPkihW5BE6YWpChn9qIM8rNik0qLIiVzqnxgRuViKiPP8ml+UfD8GI9SsU5e+S6/5W+11Mjp6PwaI6EShy/zDsYU39/Pyo66hVrq6pnx2fiMSBEsbWG9fVDpUqj5Iu2wu+VTvuGsloXpoEfVjGhAuWlHc1EmFAa5rzSG8YX7WHHR+32+d7+O82vgnjhjzcG69Gf1bEV3uJMuH9PFkt4uvCZS5HFeI8bhb0mreSIYSvO80EzrYp6Y95UeWua1D5JWesaD2rrHDa497bVqm29q29J9tWMv35D8eI7fPch8NViVObwj83vTew7zYBMI7DLr4EhMnAUII8hSiSTihInTgaO1/GwGOjeuUHicM40K6sOj9L2kMX2IIp29heK/LIJYHoEukmNQcEHlUtNNG+QsabatjR6p8iiZojDPiRBqGfAnmsQFPcUEMsh3i3B+0MLGXSCtz9BH1aiBvmxdkz9hnZyNOXPODoVx7Fr2cWEVbz6DF6ph7m8qO1rMzKZUrXIte4S5E7cTzAoQ8Oup7jwZLhGXcA6kEZj4YAlmwBgSspmv3YC011bagnSkU+shqx2Wea8Oy8NTKJRIaHKGR2vY9IogXmSzMOTxm4/cHQ2csVbGlXNvnytCqeNqILEKfYYoQ5tgVijGFjl7WZjBUQzeu7T+rukxDmK+xmdPwTyIbLEqDgMn9FdZv0SvS4ZJM+k1JmlVR6scvMvp26gAauzmejOwBe+2dWKk19aF5a+ELNDFef9pehRpyz5rO4cGaJhYW/kbN20FOpuZ87oLzmj6SCboVCAXQ9/t4g+NyYFcZfyexDITRlRO52641M4upR/ioYcw7hGdkHcqLp/639NzZBvnsuhtbDtsfr3qs1PvpC4kkiFrqr8q6MoNn3Pl+a847MbkabPTf08eokuOCB6oSHFfk9Bzo297BJflk+K3zNi7Uih7JjXnpaBVfZnj9mfwlugciQRaLxA3/LP4akz77m7qkxEqiQgVmwdMRn9xyD7WG9DpQ1PoCxYi5HQR3mDyv3t+O7vR82b/xjAL++A+q6dzI5kO/wPP0T93M8G/3LP8EsjBh3usinnCyXFJ4xtaTA8wsNKuJeA2tSndzuE3pKC2v53+/yr8cR/w5M8DZbCKxk/+17dqLjrBehab5R4hFmMne/10BL1sNrciRrWYhmefJeefoqKnEM9g96n9ZATMOBGHDW8vkMY7ivA4z0Qc/z58EayXW80aXV3pzrd2JyS3A3b0eA6mcY/xEwDBqs9xOQkN9hw8/EcVyaWdmxu4ftcLY2CsJlkHYrzQu4Tdo/ooPB97Hf7vkUZjCEebbukAbKhUDHt+/YXPsj6KNsjAOrT2H3c9gICEHrFdA/xlP3zVlt1Vbj4XKdyn0UBoG26+1C9q1tt6/X5Hm7kJ+bodurgQ92ccZBtlSpFm4rveY4NjoqkPAfziNL9jPu35J79mJ5jQyN3zlJjPWT9XR/LMOg9DzJQFwMMf9nPyPnB95XSjjCRGdM3WnxmnCc08Ft66r+dwFgIBqtGbmuuWWVl6fBILjCp44mLWy9M0NIZcJnfFIKzcLbcHdXkWiwuzIpjRvTARDjDmMVW0s9Tq1lYziYOeH8yT33dOo8KqPt6+HfH2b2zQ4aCJnDG6VI2WG6YqdkPRrHfUcTSEyxZEnXBFnwxXdEAEWW20OwMiyhso9HCgWh/1Eez9159Oq0IAW6PlPFEecnRk+RUJdDazNYwvZc3mNTu0WcOOZ1Jss604wt00m+8FnCUAOQMqFmxFwxKZhUGirOOb7vYaxMqArjqKF/VBeU2HF/UPbGbdevOSwoEuqI2b5xE8qbaP73ycDuO8VMoBwbXrw3Kz4fcz7ncs9zslF8I4EzsNdqjudADGHVsBkpgn/0di63GNXQ+kig111yNmPqzgvLwoQ9Nq7Xx/uJ7G7GGL9iG+D4+ZsMA2eLuqzdM2D5Hb3C+obiuyz9aRPmH7ZLbY6yrgo0HBCSF1ppYij39vYfIqnwzxVICvhzOoC7BxyJFofY0OLo1o2te4/fZ+ANTATSUJUfAggHHV942lleTB0ytkka7kuPsHaWo9Mxv1B2nvNYAz77OoKEX9MRo7VjsGnh5Wx9rTI+/7h/DAOQnqoR2/Xnsenl4rIR3ofMPFrocgEZngJjdaiUHDl3U7HN3XMS9IZo2UbmYMKpDl8ov0Xb/FU5basXlSOwdR9vj0CMubzTdo/P+7BsybQa1NoF0mrYAtMUAYPBWpRsbTMj3lxhH93yELRpeKNRqO0R2tEQgAe9va0DeAQbKPPAB9KZgX34ffaX5ph3pvTGOQzUHoZeHkxI3sILFuMya8QIxHVe3G8y3n0rlzdCD2f96yZwaPAg985l3eKTxA5RDXOIWqA12hmsfz7a2RoNJuhsbtT8HyLBMkqZUo4oJq6RB0yPdGr79DDdSRT5IE2N3/K/f/0D/43F92tFn2HMDycj/5JeUMHDvj9udgzuPaKZ8br3vKZ6/qPew+034Wjofs3d+fwHP434XHEBTDfgUmlbarRkqL/O1SLwuvNdmIhUsMaXVaNpDYIAilIc4G7ta5DNYcLVv8CWT5ypJMFlL9AdNC8xsMzUdijzwyhsIGJ/IcY24NSGd85TFNW9IuY+ZoTYFXvXFiuMQ2rbwhnfJeOExNwp3/aQ6eVHKvdRBCwzUgixK0uwTNOOV72OqlJQKZMgnlido8UMJGtkSz1QO+Faz2jRb/OJm8d8frv9PjPssIBD76LmKEbHc5QuJzuQ97i/7z+W/BI6SrQrcny7/PHQ+OEzc1ZkHVjhVhCEzm8GVzzMI76n7lPKLGDjOWQoUTPSJrl9yT5rSVsWgD2kZTjB7dGXV5KffSa5m7dbTL+T3wETNOWZLG0P/fhp182SX3q8KeQnJuDlyNqsakVFqkS4Ktyputn/KLY9/IMYPlOdZDrB4mI6MgxfXPh6GREYGtNBpae1bvKoPltdKGvvM0YT+llUvB5GIkyAsOkGDc0T245TWW43F6Ir+bvZ//ls5kYYczZnR0m7LI2JOvGt54QnP+D6aaYxwKzCZoejRQSKj+E+qplv9G7QD4tghKn5LciR2EZmhYoE/9xpK24JIfqzmPS3yTnzOvje3dr6ahDzYXcstqVGZ5VJsXEL84IugCEvmCWPU2bFwCD75Xrp/bpYzp+39vrgDCKytJdHww8LB4C0SME4NZe1rUr7KSE0REQFLuPhaRW+MkvGirik7dgxLO2R6Lqm8FCszm173249+9GiO/Bp3JrT640JiQHRt9zxz2PcN+L90prR2cs1z/MzhqEnurhe+r5JO9+KJiPuRmPoeHovgLp8tU9Ls2YteNbgH7zKsrNLZX5LHiwttGTltSr5dvlWlTe6cmb3JgHtJ2S3ZoTKzm7lZqxY7ngdZeE6lKOoGRIWp/45pfoOaBi7XzxKBLs11VEW4oS0ePgGNfq9eqGhKZ+J/z/gn+k9gimOZ8YTQx54yS/t5MfU+2D1nbFNezMwUl5nonwqm5uFbpGLoK/o3vAZt4ntq+n8ubP+a6qGgjvO53psEssN8RgGuwf2cR6jY9usjlj3wgblVgT+waxEYtI8x9Tk8j23w5fRaOohGGzQ2GMLX8jyuerG8bVmF3LADv1YLp8JS28IqRhu69K677P2u9K71spdaCl9/QM51Ih+YX5BOLvFPuNidJKuLoAezBBkKE17/nkLyRmd7D4SBr3TuFMSz/kcmbfiDB1RS0dGkAhNrTFzaYDnHtA5zBSX9gyx/C7BfU6CT7F6JgyfPvxDuF7bvB/7AaNR7Ca7ZDCQLjEO1AG0DHFLZ2QZB/tpRGErGUwon2k8XETDb6mq89oN0KgftQM/9nyW1GQQJk68njElHV1R/s1D1ko3yfX3lVsG7Zxzf5cvZWoGuX+4wlXVbhgokZcJImJA97d4TGeRtrB6GaB+xSKd2JGAM6RQ6gCdSk1nZ1qK1u8r1d3e4BVN9LntAtDKt2v/yGhzPrHn5ZSY9apokZaNCNbGHQ48PuF7Iu1689hlSL3LHpLPAoExwhUayE+tfS+A1NvdiCcIjyBpRxcIV5AbAJCIyUVXf1B5MIXLfSnNivPFZUpD9NOJtnwMu7y8pDndkdAQ0rvOJXMp79E4u6mJsWzN0nWdTvpfUAG3wevvmfDfjIk0cLzPz8dZA/oMHAEXogJUccFjt4TY0tqqmwVd2G17cb1Xq5w+/kB/Z5psrrbl0xOTg0ILXhf0nZr1KWQw6yu4S6F65I4JtwDSCy5LQaRVzhF9v9R/NSdiLRNpNl8Ax0kEOzYpxdhlBtWNgoPrK7rNvxaksH723zDgFdgDdpeDJuM27//D4e/zbs9DUu4eVDrwqR72iSvqnnnG1wO5O2XJ7teBflXPuMHEu45cbzmxl2QIYsm77YJvyecA9GDDDwkLvte7hw2V0zzC/GFtcgxun06CPrDaq2d5fZ9D5Zwae8ZZIARWn6N7Ct/PXbk40htcts8JBdvtEm/CcwMHorjIidq1E5cHw3UpDuHknh3qqsdrYKNxa/HvJ9zKL4/IXv22bz4u62dc//pq+6T+uSK5stG/Hf1JX4b+uRfysWxB1P9m2eCgNdYzG7eFp87QcLizKlh5+LYXG5BtIEhFPm4F7RGkYrrN3nKThtawe1UMoJeC2lvGB6HivOgfsLh7IrzUoiOrbUZWwDgDzk8BBWDw1fRANeawy/AUZa5GZry9FBXE85ENB0RT5EujamVHbMLvYOEaO+VcTjRJ+F5O8/tX02a8EZOlf/6vbbyo4EXXbO7mhPRyvLRGNUGNe7TIgEBWx0INzGHgT1N7X1BQy66/OFS0Sh43mQNW3MOp4wIQf/GnBBtt53IxupyxFu/h6+PuyDkiysEpWmdgLoThkEk0/iizzWPQeVG5FpGWtG9JOUQh4P7y0SQNCzqXlFlqRbDxT3fumJqQqluQRMjtK15WxM6HmH8FBEt6qqKA/gfr1taAmxSvrs8SmisO+4dtcHkpS30wLMgOYbp6WW2lyHtLeQhorR9bWD1g2645gdGXLh8Kr8zp86z8RD1Xy11gANzIQYPE4QMHhUADQNjHBhnW9AZFn5fJEz0ZzOkkDMwa5LSDe7PqwYOqw9XkJ2bkfsJFePA9e9cYbJ29ZDPk4VQN45gMxxAG7zOsMBjYprlm3SbMJrpcrlgmY+pRV/BBJk+SUnsHm4LO4ISGxIetg9Fr7aa/molGB7fdBqzAzT0y2OxpGV51aZmf/mxSrRy6mWEjZm3/9HsrAtbzmt0Xg3cHXKST3ouJRJObwQmp91fcNJjKRSJ8qsJdQaPqJmBcwc+el4qguVQo1EPdseNyGr0aArDMGgMWSzXJvvGK4uBiMxWIXV3A4u444tLPh6rHs73QN9z69ze3/eEz/4GGP/uNxLJQnjMRiixTOJfwLFG2qzbXhN7NmG6ru52RxjJb0giX6xXMOTPsQMq1/e+bZn9GPm3xLc1/+s++++GBKSD9/oo5kvxJHxNu0Efv42i73K8LwMJmjdlsmT10lLuA0jvCr2zxtMeln7qYfrd+DOiAmYg/YcyXG7A0NCdmhX37BnrtRrOhHQLROfcoB6t5sMKtFKxEkzKjHBCt5ezkuZprBeSXlvm+Rqu+0EWtfVy9+F1qhjhhLPO1gy8VJQKfKLRRpBSmnOKEpmhp5aFcWhBwMie268l1+rtfhFo78c5K1X1542ChAYsDN11P5t/VVLMmjNfd//rL9qPqqdkL1B86kl6FnK74OhlKVYVgEN1T4n4EEU5Z9711B/wZ1olPQc4QyyavIQvuN1a8Lkf5a7VyU0oIS23hlxCQA0vCl1KEExR1wKVtY90zF+l0qWGtfhlEWbGtpqEjI7nuVrltzrU7VtyV5sx3z272zd56se3aDh2ywkMNbG3bwDC2fggR25cmp0zcue/p30N5jDNgV7ltTdWzvTvmwaBJy2z3IEMh1u2XpA00jennDz0+jz2SvgoAZ3m7DVU9thE4h++TvKcw5qNod3rmIzGfIh1/PAnQggHiC525kg2jaA86/Of05NUfQvmz/RadHEi44gQxox+22F0XN0vxdb9J6t0s8NTfb4amc3WXua0Bt1MLZyhjCW4aQyJ0OD70Hw+q0N9w9+mUFLi9ytEY/zKf2IIKlXT3Xv4tDla9Mha7FMxELf1R+hJqtI+PZZpG99rXFWG6TR8NGf9MiUJd29C9apN5wkt80ePOsALULPyDOj/FD3yoNNKyXqNnAICvtNydDUV7zlxRq4mVRgu2MJU3KZNtyMY0WeNlj5QMDWqH+AjZxioSO+9XvP0RRssbn+bfELSEe95i/86onLWegQrkU3tOFgtV0nAnDhfqhGrWHDONNKCYLgC4iTp2hCdpSi0LTIK9Ym54cGlyoomtLeZHidugEML+YTBT3sHyQfWU7q9PumGjwjgOzWV3Z3/jMMztXF/1oicefiqi8pWKkL/ynqVM3VvwfNIJP+rPz1Zgvzm2GkT/KQy9f9wyUS4lnKENScItxtt2E/KHZY0col/qpbnDGX6JN5apRmI8i7wAbBJcctJ80TWdzljjGuscLMgSo49jlSMW70t/7TnLP1VAL3ofRHSl/yqL9BVriI8BcUY3MiXTDuIzbWDMtSF10Lo9TRNQe1ZwSl1ajPDeIavgbOMzUDCUptmE9X7ur/hB0jbTDfkpuxwqU2NjnItRzJeZPmDl8pqVWlg+4Tli79bSzkB4N+tq03GdPiJpRUB0Vb6TQtULknX3BID5N84Nc0hC29IbVpvFpwNATXGnHHVLNAyxyEvcbEtqhZiE8ar29gf7jegtR9fEEKTbBWXGfsbDR+4+aa8mEBUOd3pHRdWYRu5Jj5nRBp4LwCJfMUEwukDpDKS+hnwx0iJA1d6A2zrTKRw4BOG7LIhiAHkj0Vgl0e6r1/ukf2J2kJ3q0G81gWRhw5AgjPW1Z0B/lsD74H0OmhROmr9RZZsBq3jctiglEjN3oXxSxxy1L9aLAsFYfH7i8S/Xe779ket5J8sZOjc++TvamCPayskfa8rWkYKufpecrPC5k9YdSJzcub4ARhB9vQnNnegZRs1QHs47/l1KbMyPuEdHYvlahO1t9S5S73SYZwRPo+NAp8zvw32KmeEjj/D8braXpOgGQDO6jltdNp+ifEQ3Fjh4R//Xclj9gT9Ky2gTcL0u82rQKOW+pxWK/nK+zmxar0IfqKccae2Ae1caoKabaValDwignrTbNomtNx1MYnbbHOcvqP3ku3/yRY/qAci26NJJ+i1yvw4Mfn+UiXpF7cRA2AFMouc6DukRVYrtCj1mdRZAGcRs2Xxuf7Tkn4XCmLdvUXJzgZozd2dOCaKAy06G3SxvH++ehKEXsAXigphXjvM9iqq1fAbGTJO6Y5ePU75FnFezHH81TNaKSexiQAysCIWWlqO2lGdoNbziDmWDlzBs4Gty1MuwXo6V6k+1f5bkbsyPa8zRfry7MxjI38Y+Faq3LBxKMSsSbyNaB5pOqFzt79oPY9ozYfRwgLS5Yjlradr4X+NZhn2TP9+xPi/Eze5MVbO/eOcb9c5by4/iesh6nJHlGvbksVfd03QN3SQXgeNPguY/EejwBFxlNggtCbXzQHHDEZalhJjahwqODAYgWmcd1/6yLLJNl5zmM9fTgavVo6ZxHpNZBi16KBr268dLy4Dqc2Dzqiz4AIsQw0OTqJO25SlB/nzc/BBhAmUpJeHJzdUxH5UQhQe9Z9A2TwD7IERlheQLsRtwgbVQ1ifKUY6QQplK29Uv06E84LjZXp7q9PVd5+/LHvW3mFwmgsv4mBSw+Xk2h0h84JlDy2oTovOoB5TGZ5pmEyO2zEQw6VR16dAZ5R5GT7LPTgl7xqIQbM/Qti4A654R8L/MFu3mOxpJR2969ei8NB7Utogf0+t1w9bghy+0lNFa/K6q14XOlxJqQS6RvDhzfxjX94DunEI2J/8a74/3W93dux1A1oQZOzLkk3CXbWQxtVP0wUSPjBXD5P38Aktz8Rx397iDc838qoDqsStaHBO+SdFZMm+MpmQAIEBHKVEtiM0vrMA7f/neyc5uTDdgyBibtZv+Y8Ud9ZAGTO9fXmBeV1tviY2V6+mKMSAaYd35AZYSPT7Ucud6S28KHwN9xMygPHeqtpcBwGDhbQMEO/eQxTchEm0bvK99uOJE6HTenu/cXwj7Wbaa6EY6pu3LluDiCrN1bnzPn7IPD84euG0olrh3cOfLQ4NWFNRsUpbKgfPn2r0/hQG3trhS4T664hlgwX5RDu5a9Pg3c/lFOfI55qV+slapQvW4dHQb9wbz528IHC1vH1NJ0xEGFqYFuwCwYkvan/sEIcuztZWHTOSVW047l96ey6sdFv2bfgOcXtPvMLJifyEJDVz1PAGFoUrpvfncKHh6T4geChpMaMT1vhYcJf4V/puX8kXKU9krnDSydqGFoLitNM55gyB5M4dvMQK0iQ3Akzm0KLVRD6NhPM1RnMm3f39C3QIjSO1f58dzJYSU7rVoWAHQk6Im6VfoxMPnT+Hq839Ww+DvMWjg2Iu3Orq2xqKZop2dbBBjsJIzRKwdrjF3t/KyjYM2bejcZRvjKSSprwdWiLddw9eRuNRlVxBeW2b9HlHjNlG1XKiMeuyi5dGlNnpKuslFvzHmUVeMCs+1rBBLLHuDxv14zcfbsVU9UnBAjZCSgXnykPvvrxzZ+Ho6vDBT/LoDLI7U/NqIhYlnxacyh0Zf5EDwtsxOYRnRNpI1kxsbXXTB6AM4/2rfSKPAf/nDpUfyApQNwsPxL7oz+Tn7B7TXAGYHpJsHG1A9MgmPEExx1Lhn1PiRiZuvLI0ayXE80xO/IyyS6msxAOYiaJu4nXiwyTBkMGcxqE6vqcYOVMFNTO+vE4/trhPHlw4Oerska4K4M9JF6PhZRqdxLf14XhkSavdg4VF6j1b9i+5Wbra5Qz4kUMr4xC+3VN33YaGYuuNygZ4rGr8yULH+VRCK6WPbQSu9Ylqi9/hRWL6KF7nY3r97D9z8Zjprm7kOXSwRNxgVdfVSS5upEK1X/+pBpW69A5DOGF7Vgmd9wvNn0HLDkdurT/RRPk3KG8Ireeoj0LORqm/3EVgBwH0zqSTukNH9R7DEbFq68aPJZkdG76Wak/URUC9+8eia+dIQLLyDxMs3HUo0xT9oh8+jHPPMW7nLuebXo5oLDyKthzoY1yBmNFTa/Gv4HsP9lydIz3B5tNRa8CPvA0Qwxi68UTOYl/KTtn2Kqw07+o0Rhzcke/fjsWZRERhPTlZo9ykfHTSkTlK6R5976/LpfnMP/YDnACM88XvP1gaGW9HhsBMsSpsEUN9ynMJ5owD23nCQ1nCe8eNJCdYk38/iwbOq5LuMoOHv6xX2aJ4Z13dBCkGwz7+931nX30Aw2AL17ES1+lICnuMFmdAbGND69pHt59DVCOI3L+F6GVqWeb7pn5Mji7xTAM0F4h2cgqUlAUAI8N2HC+MFwYZwVruzSfpmcT5l/BqGL/sIHZL+kmIw1uB3S1HK+7htWs6IQJMZ11ftT0uSZjcBGAj34A95Dv16q3gbsJNlcQ67DzExAhKUihnreRzp1GB4xmm3bQE90Iwv8uMuky3pgu700gF32bF2gqhc1I+xi094V+sw900im+aHDKOv+WI+PM3ACn69B5NlpIkeB8ZjBBXQoUM+kqDptjlxV6oa1qNgFKtGKzIYl4Qu9kAvuDCu1NhF5dystOqMefTkpPGKdwy+/XKkPYwFCJPhflyQrkKlQlc/fqa1Ce2mrB4hnUrgJJZ7MmyUf1x7ZAKx8YeBQ17tPJ2DmHV86nO86JykMut8536YgHXy8VOZ3Gz0rV3Uxc+D3j9jl1OeOlcNT5Zw/zC02am9LkWrpCJGq9L/ACUUWN5T1m1fNoJ62TlBSmA0E5TkeKTaTlq45+gP/ltyo48oUrwGvApFE/jDbmjTqvXyY8zLipyAJXGUhfe5MK8HQ2vds5/aDJie9IguTKIocfjAW0YZgjBbTcoNDfZRDYveGIH3bhn42plxKm9ujmw+s/PdhwY43Vuf/tdZc2693XxQpdXMBeDXyciCbSCm3a1VBOOu1h7xPMVeIo2aYIYeKp8bR3oB0ESV4xIYOhRP3GkhO+lgwz6j4E5EvrvpwSrCgpNy9wzJRhytXy0YZcot/CSOnMgepiwdKffuU67BPNDe1Wc4+7jN9ImuA9L1J5lfKknnnWM0ebAN4ZUnKmqGseVULVw6rVHvCMGQwROEVfclGZYoms9/13dXerTGSmjuRggFOyInHKc/Ffz2JSL5sjZ1ONK9OV6joIewf1XG3uQ5ADiyeCz3vuarrlaGJ1a4WW94spFFPTDm35t0nkBDhJCez+wjuJcYpxvSNqH9sRlj4vNc+t2jb/KO6a08oM8ZT7jr55/4vwsAjnR/bmI8MlqjJMROnk5it5ERZ4sPk6ek5bRl0VZs9nG/Wu+7bwru8NtmFM+5j7lqcjzTPMDy32zNGfvZtTX/9/yoW9JvE2ODFi7mKYStWNYqeWbZ1wF9/vdxD1zAHFmG/4RiheyyGkOoqf6lU7oG9TIqOF6T7hi1zctPehdqVc3R5MRubD1OnS+wIj09RXoMFaGvYNmfjiz2SgCZGQXzSVxlKdvU/7x0udcTRzlauetWpc3OSJf1mdZ7oLS0KEEQTwprBRh/ZXTbrsrTKrdLwbiCTQgNFIHrBttuMgQt75E2EK2/UluAJ4xx13j6cV1U2bpeBccWS2166lt1b8czuOJMMOcEbsSY2+dgIvxk2CAy2D41UKYC5FcZXGm+7i+uo45D4ROrrFjVGPYGMfnh07LQbTOeOBXDFBdD+7kYUfJtt0XoMv6YDMFXaKO8MaddhSJcG65j28Wdc3WkxM95cBE6IAXTQy4+WOicJXw8CVlws7IfxPY1h+1pEfVgoEK4cDyCPX0ZcfDBZEfS+RmkluFisWhD9Ste+iyDxl3eSqHP3/nuDzQO4lcZ4qO9sl1po6Zs+iy/7HGPbtw99wrYGOW8tNdha/6vrETSwcqIhJ2RBPXtgHoJbSN+g2WZd+6ILqENm7PbYzLKQ0hjUxiR7rZm7o97A39GqpnKl3mKsUN3IhrYVPFnA7hmjVfVKWLzN82FSf5hrD+D8dbSW2CJzvNxtfT0R9TPnsmMhBBXrjqLkdvHBu9shIhZvZu5pekz5XvhJzfmMR9h7s6hB90njB3yOtgFLLtptstzMdAdXf/j4vwELZ/jZubxrKSH8gmBmLL8DbpuYKSHTwjpo0oWJvfMioKCi7yBQzPwu6qwXd3bh8POpxGB0owzvsZRetueGgeUVr40dynfrf33WW7CjyHRMr2ikyyGmI5Y5TVXgVXWO13f5U/QGLn7f/1ghgvdk6DirikTXbNstFMxTcPT9ST/RT7odccelmq3VIuNt+n+6osXnHOeyCU2xf01t+riORRxhJ5mLLrCtf9MHdTf5wHDOkBS0bWPN4IhcvK5H+1WTzpNBzeO2GNr7MfhuBFpLiwN9GfBcFTnS/ZVi1+faf3cWnkvs2LNLUo+5weK4cSJ1sCC5Au76ksFaaLucUF3mgG+DKJfb8T/88ToUKDedDDSTjWNmG3PRph4wldBJYxwytqaQCj1LbYnzi135VVKs/7AWP7z4DYB8dpdIhLyC7Tsdw49pOCJkZQylN7nVPTrieubsWL/oUu2xNDv8UZECMSIzD00ksc2vNCql4nktn0NaFOL5lkIrXlv5GhSkfuu2I6jMDxjHRsPUe6lYcBE+wIwg8Ujyf9+SM8PtCwXqMzNFkmENNvOVyv653jO70Cm0YQhJW0llzw1MLh7IHfVeX3YhVyNrtsuKvQR7ec//lkr+hvd3ZdkK/MQlXDQWyUEQWAqxJ4r1vpe7c2UoCXFMJdJxZf8uSjWMgivr2EcwdOJPplcz9b/wMr/Py6AC3ys71XMEzcwmhy4gOJKm59lnZOcrlns4fENzkLZgpKuDGNt9UAKaVGFQTYUij53HfsomQHGEBvPYqAnMpZxQkWu3hulhbojZuMz8XOOSR+NixZH0a76Jr/yFk6TwPaI7p/pb7Po/jDAzxxiqaef0rVCjKN0lWvVelJtMXfw/hpj+wvpwRMdqYf6Tleuk2JpQaC6k/sFW0YQ0qiA8VnGuG2DxqOU2fA8CNtsqRSFc6SE+5OCxZtrtIBXGNHhm/ookDu/EWaM9R1GAegaHXYDHDMt+Dw0vlEPLZCB1fXjcYI4TeOopZDztBMBcQ7rfUIcujoA4Swdmu7OjW3nLD8P8vaswUMiYSCD26u33sDziqAvJENFHV3YkI69b6pMZaUOWnXeLT5dkU+o1++FWbvgsolnbH87gPVfwRTXDRXyRZ30vXgbLUr8CVR4PW0QNBWsR0s90WkTEn5NRdWz9RnHNbuXrirRBVBcfBcxywBCizZsjwxbm73GcfbduwXkAG+FSyt9G5chy91JJZ9w22vICGEy+/wMRiCcreoLofM47xHI+W5If5OX/63tN1DzRKPcP3VdkvlvCCpDnQE8QCmGxocSZEQLtA3FdOPpYwFAQWLF9eW3CXckOsZdDVLPBNbU54f/3jlbVX0jnyrycCpYU2UR98WnDJjx5JvHvaw7Vu9uu76G6GxDqyHs+VUPGt6JTCGtoYAgeC6s74/mogS2M1A6LwM56URGm/iIB7Zi7J93RdZMwZRvkDDr+d0Q2rWskCd0W40CWV9FeoxuZo8O3TH72LJ3eYw7MnHKQmrqCxN8RxYJsID5oMKyUG8ejTufiFApuDZNfStd0DpiiOhsVHjzjz17sPRn1x58/1Wmw0b9XMQW2yqgDI6cGRuz7C/NXlggMMvYqFv5h2dXYxKnT/c9eGakupSeGw8QaUsAHxqevpVfBrA7cIh+3jl/wYeuGHWKDxucjJS8GH5De52OWYf5ZftRgGL5nkgBfMbY218hd2DWzMDuOKla2rMPoMXd28ONZ7q4GgREBHF7P5MUpRp8PkmT0ArWzbIO9EExPk/GYDLoULV4X8TkwbMMpATl/dfsuBL2cv/WF/spdoKcyX1d5rveI6QTfvsbQrcyQ4AgTrRthVa2+N00YsImKyJJ3VtIe3XhYSU0oRaNAe6SGMgGqKncebZ4NLqTYC212b7bJ5ymoL79X75mG7pxjPZV368dX/frmqWq2kcZBBg0wSI0+cRGM7VhERkud6ZSTjtQ055tOs84Vio2NoXFJjv+K0YM/WKszltwHQ8wigV8VYv1iqRoWTxdHepaYkhbk20aCutcmr1H7PzUA7XsC2Ah9u735LJ2psNVnw27CZYeLSzdKpyOZqcw0+htHsPVs/1Nz3dYQZRq1QXiFRD+wTRS6N2N/Y5vHzCjoYZB0dPsTYuCkWrDdc/TMFCa7DXOm8lo+nQhU3ssr9J4u81reRtOfuv37pe9r9qJ4zGygM0r6+Bw3uHqSLV5ePCVpQ3IbysQBMN7E59qbBBxqptQTyJ7C0jc+zP/8HKao49rz87mHqmm5Pps8aXcgaWsowEzKPM8alxFII//hBuZRwBCuxiouVlrY/GUMEILk+WPIHwxhq0N/Ezfyrw/8ppT4ho4dIKDivZEiagzg4zS/593WGpuq2ld63CftjA4HyEGjYgS4SN3FkQjdCB4tLrdzz/nDDxXQ6ljBoJnVuCjAs9XpxbwX/r+K60baZaFpWg6touKcDZo0HhH57kcAsTT9BMVQb/1rHnLkrBbxzFSH8oh79zz+Cc8xQL/qJ/SVCLk9/yEvgkw7q1T0T4cXVumOeeMcwG4sNQesTkSJ7R7PU3SQyeCAZb/v1vI2isy9HPXThwtma1g5LNggqOu7uMwQw/JGaPDlMuqviY/9w1WpIEIU1ep+wrNPBvTf14TJTxG+9UnwJKFc7q+rQNuq//7PXVXTdzaSxz+WK7uxu726AvWNRxnaC4zl5aT/FrjcjrGG2RjcxYOvp9gRi27QtNfZLOTcVzTKMdT1o2BusXGpzXdv9Tf1WX1qlrKUEmhmQMcr8qYs168ZckOK1y4uY1DanF0qHAgDzGEeHruuglWEzbqqIO7Fp1ZA7TkMd0ILKhSYcUfsbMf7pshOTuyLlpL3nGHcSOoTClaRJMl8h5N5FIW6UkHgicGq6O7VvwOhDqVl4l0yFg73MXf/lqM+MAPXx6A2RfyrsAWH/IPLAGn7RqXyDKprbb1vfsMG4WZSps3zmN/Kqgt1Av5fWztJhh9j4ju4XmcZKHPNPfFbGv4RTR4ImYKhDemwtZOtfKVgJjGCPvrc528bJbByfwAf/7D9wq8yweazVOU95WJAg9sIiJ5Xea7wqY2F3jvePaNA9KoZnZyg5Hna304SsrPh6IdrytwlBrFSL2iBrDrE0CCvjJgzS3Cyxqb+BA9QZ6inINc0NtoqJdramz4MEUT9ujQLmuK9Ay5Lln25al9/tc+X8R2GM79oaDUbrFa87GJkNO+v7YlkNxwwHt8ud5VUeX3c1kGvJDXwvTvmqvsxkp+coDWh4292omxylJAohoYKCUFITQKCWafBCNGASG8cxkBzLvCyWrqdA3aqA8Vushy2iUM6EHvqPmlr5oCwZ06HwwBEMD57YJjBGGM9cyln0GfWpr1GpTuzvx0c7sDxdFGFW9kMYv/S/+Zo531AClUhS7bQA3XZUknZZEhunbn/xb8qo/zcaB9MfClnp578B73W9eALD22uOB1kFbBdU7z0mS5egHequ7/wAH2RwED6hBvLpLj9d3xFiNRjyp51Zwm8ytjfzxOs1daN1GBa7Ruttn7WTD4uxInp+/dwQG9K12212XZQe9Vz7c9IGR0WsVYbKRFuj36WUhB7uiHiVS519LK6v4KXh6zOQYF0dOHTawvH/bt4CmFlO8JI2wsztIH0DMejUEtL3M9+YuMOfhvxtcYL7Htr97x189Js6GBGXJQ2DN0Ss3prpoHN2DrzA4kdwG3fQEajETYml8AJ6T2VFgnv2qNWXvxJBJj/ZLFG9O34ZarmNOdZ2bR4NDqotmAPfUf/SU0Mm+5cyBkWHAXMN6ZJAzDXXcsw2F1kbHE1BwZ5dtL+ev8P9YESuMgCC1qE9B29QRQ782UshkKTL1z3IBn8w2j9xTH/A7z4gxjVAJAdIz6JfA+uGkYfKASiqm8oB08Eskb4ELLMyTs7d9ovH08ZTpt02rAQhhAf7A95aAktzAWELbRtdBWOIOLo5wQ0YTqchvwnRxyjehpYChf83gLX/yMGPf3viM9wDCj0R3CeLICvs98FxZ0rYLZqdoV/L8L4L/Vwjiwl5SVkIPrJ8xEb5u9ZLCTTmz6AuBLC/5Y69YdjqzmUPo0atCc/Z9Bq6OyWyuItJ+W+uXKh12vQZgjcBrbZzmugpnDAJNhok8AzNhSm000SGg1kFZyurLoEAHDbdBIRdlCUOanTZky2P2KLH92tWGcOghadG9ly2adwjl0OYCh7Ulf37bYgX3Iz8jZxG9bxusbWB94+RJOfMMHbK5O062yyhfF5lUBEMIu2MjB7BA7mx6j4KAMAQ4TqYD1OGY1MJLypVh8mbhDaKNHZccmQovYbhXNZEDJyEIB57AeI8VNLvqtEndfADW5diuIimx4u0fkqssXdO73Ydna5Mwaz5Us214BPJoAsVzs5dKUwuWD7BeZAtqNYCkJWZVGpxlm5spnevPWBjl6t7n/z7q2vhT6pqNclh4yFf9R3u/R9thP+o1nO3/DfE2voCYQz5D3iw8G1BEAyZC8mISO4trdJK/gDP1eAD2PsGzGngG4iZtMrN2HrqSVqw1F4GVoE+mDRoOKKCyITKNIi15E7xBLTVTgHFOvzMXSbtK/H9N/3otYyg5Myl1/0vh+WfWy3YnUUuOI1NwYcge0/OHmQPnxqYBny0pQ7NlQeClinlllPsfqZnyuD70m3hAPJP3mfqWEdDAKyr9wib0/u/apkxYh2g6Aewf08mW3XOBkP03i6+eU6iA0D9M04QCdGUBLT4UdhffHg1Fcd0VAjRGyzmey4gWVJTW0+DOe5auzwpMDf3ToNnbnHw+UD8Xp3n1lG5t9mcaxKQOFqknAtzNw6rej+BwX/aj/VgeHn43MxAUr5I2/qR0u11nNBFZjaUIVjCnKo3/jLJsPpfMQ9jgsaQ1PaxN8B1o2I0L7YW7MAHQHmF55ojpxix4bo4Gvr58lPVHs3U1k1mcTpSjdjeHqjRnecDKYYcuP29scnXnpM8qBjRRE+NY88WtBZtcMBeZfPaQ6386qk6r3WQLP+C5jJ5w3ymcapRcZj8IJ9HuUfMOFGYJn/FESmVX6UuDJR6PUmNVYKg859YmOm+6nERFD0ZJUcNcFOl6wN78l6LqrAgPlCenMkVvFfot6T2YfM8fHBWHDJimMoKdVrkZH69zKtrOPa9w7GIS7mZZhN8fM7joadtKwo6Pqj9FWBfiFttMce0sHfLmX12FDV3u1PPV7uUmjdwD+1P/+VSNIxGpBnjuXKqPBcobVfEI96w5mWXz4V9MybzfI/iGAfuxjkzC25vbdz23SCTINVx4j/ojK7oCeLed8LQEMgvLDBUzRwyoPZek5DxRRcB+evSbdB8K1MQIunP8zf+o2tJH7npjqlLl82dPJVRXOly+yjwUluxHkC4jxbZZ4YEz2HViEBn3WITIDaSkFZtt5lrfecejnWLTApi88fmbmwdI4nvbDE/zyUPvLtirOfgVQBa6G2OcwOau3//3vnzGvbM+Cp2s9X9cFYpEvQRcrbjaG1c9R1rTEq8yMoO/RaR5FpbtHrz7zG+oAHC0SMB9GtwJWeqfI7BRHs3w1g4Zhb4fIOWC47YB/P36AWM1/BmXsYc7ZwF2Ju8Wg3fvJJRP3IICbMdyi2VjaZXU6/8AolvlcDamT4XRXOR6uyA5KfcC9WsShXKnOpkIPGENhLOM2ckLHHRDdXfHHzqFQud/rAKJHtTr2d6+wWpVC2XX4+PLivKZZDjklLi9uCUbUMZWdmzt3B+R8uaVMnacBHmnAOVrwcKYw7B7B7RGLlvZvVV9H/NxDLWb8cjz426uFPG2AtMuEHLsGbN6UrJvCvW9wjaFn7NXsUpyJLb61pLtApnvnl5C8U8libJ7ap9Ed01LDSorPO99HJIGav10QREt89GRiUyetl1+iNfzqlzDTlujW3sk042DvskJHmovyBrKCmy9LFH8uhNHpj9OIj2YEcSPNenbyx/qY/IGs6B0a5FeZm2rGRq0xtHnvUkGbdi23UnLuAFqdFOCph86BNM+ssKh+qFtI9+gHzuvx8sxxWb00bb5/lrfriA7WL+YyBedR1C3pQozSuuSpHsRjLZO+0syaThSqZCtof+Oh362RXVNVBa414ZBUCusdP3+TFKmetG7u3ImOrTd+k19ilC8hIQ1RBE/4eovhM3ro6DYaRXC+26NawaI1mpHPYkSmcJ69UqeeQ+4Zzfcz9s8nhrTsoUEF0ta94BsGBksJAt2v0VCcABYZ9W3/O5kxUH03S+uCTMeJifDLm45WfVSzFQ3hDFU2O894SsWNScKT1N7BpWcX7umLFD/KsA2qvviM1jNwiPmS/yU0zrr/1TF3PjcwjK3vv9BETgVGY2A6s/0kI1p0EKLqes1X4cwLM+etkSdhxFY6k/A4c0ADvg/gXlVneO8sdphB5toa9LMNCMviujAXwO/39nNqp8UJvisTrz7y/Vn+jFTHT8gdrY7lqaHSs+V+yq0lmbevfDWpqpM5G4qOLZvEUOGKzvnf4h7sLyaAwygMKM/2R3zUQeYbul/NCj79KT05A+XJXqL7XZttxgxHmT3bHnCnM1AMjr8sp3ayZHcGFZWi1l6Rcpmn1st/pVZzeJtPgEkNsgb9E1496JP85wsN27yZO/92d+KazG02iKK6F0Abt8NkQgOp335CA62P0Oj8HRumxpn8VO/07drDMvFZv4DxkbWvkwz5DuGaGTtZsVvNc9vSuRN/rY1GJVizfz7r1YPWH9P7eQ7JHj3RInaM4hoE6rRfxzDw68SCCShVgswcAhsDMHlc7zMkh8X7SbsJ+mWLwIC/ExvkO053+5HycPUxxslKG10m9WN7tDDTNwsXe5WHdzzUvzljcxdkC1/2icVnGZ/+CYuNUQLBmOxovnm6u7Va8YT6I+iglB/VKxoqYeTi469qf8UcH5EAWri43JoOQJPppV35lzeg2fWBwJg74M2fnaD4N8smyCzWBLhz1EER1M569AQOX3wQRxh+0Io/kUm5DkNCmoCmCtgD1r5/zBpK6rYJ1BT4Apxt3cFWCm+zof9nMXEsC0/zXQYqEYP65UcDP2f3+znQL4B78roQxi7Xj3/4y/BQ1zDarSG8o6wH6DSaltnlmhX+i4P/hGHqsXI1r081V6QseWI0PILTNxxzUD0QSfksLNDaBKwqXBhhrIY4YHwIvrw9F4DhBnilIf8747fNebj9AqDif23zcRESvQzwzIeB2IcO7q/d/9MqwIIqb0dyATFYnfF4uRFXuMl+LTyg8Zvf80IpyhG3xvBK31wctC4gYsWYP5GDtFBrQ0KwVd7xawPPvgqe1FyRgcJAw9UTIvs5EKiXu9MpBG14or08gimGP+UoyUrEptl+nhbI0ZujEdMUiE6NIlGoXNIyM0jOM/yjWvYau7RgaHfFpNBjdZfApjx+id88w1Y2zJmZhfqFO6w11TNSMSLuUBUrfSdQTxRZUMmIc/AKkpWBh0+qBMyGDHwmEntPB4tqv9jZycZGxx3vtKRh2jQIbj0yD0qEocJElVcNBzDuCEk1X5FBqI5b/YdqJf5E0FliFnvh/O1wmWgkVORPHbrWLdXeoIQrKwx6Z8jmdEbjiZi3YrzvwdZ+rGtmHzf3lhbt4xf+Vim0xBDmMu1f9wkmZAlM62v2O3ThFvP5WfV5njx1Blw/bE2NfQp89AVAtgDgfGCfTQAd0idE2anQd1k0EDBLFqu+GFfmw+zb/QZBAKNxfFNH6nwBs30AYyVu6tgnh+yvAC/njVj1g3dxTmh5/L3B8rd8W17OG3CumwBfsRIVBPIJS4wJER+saxfGZGQjt45UIhuvguDJhrDDTIMjfru1jEGYGj/0vA4iwllaHdx1td3aSa+WzhuJfeFFH78mjoMaP6DYIevw929zjODQfPaVi0GTuhldNSqy768Oya8IEJ+3aXyLl5cnYx+Bkdb8jT2UvonTLivkluUloyPMA/+pn/d/x812DiShnGjrzFaQC/1wE7vII6s6g+8OqjjvZaiJo9mTRcjQd6ZDA/wRAP3xpQE87V87lnle4M4gjTbMmZlkFxzTZiICE4fuIDWb6aYx/qOnVBe/1S8GGwhzaBpABgzIhc6sBCbl3RStvTbxcfZ3bw2DVNfIcQZErPGswkHgxjIby3SDslfPWPYhU+4hPFziwR0KbcX4fKU3xHhBvzLneBk1vw2IPPu5HxB8RwO1j/fODNY4qBE0UH/oHoFg2L6BeCDUk9qczCGgDlrjsxB90089r+PpI1N/wTKP0DxGZcC8roGZuaOppekR1tKGnOahcw6TDm4YManFgAGHSLp4m4+UyZ5pDj7lncQDhPLAr03adcs7NDM60JqlgLgT+wcX8jPOKkt4eC4Anqpyzaor9Og1GQFhlJWWxK+/0EDz67JnyyjjBndeuFUks+gYNW7dveG+mpM7RNqteVx/13KzKd1rGqCZvrePy3TAc1u2ks0ihGw3L/EDethyv/i17ufOUPI+F5Pl8XTScdsSXaoO2eFHEXX5XIkgD3xPw0z6xu9l9f9q0m37FciIjAv1t9yV+clqtrXtL52GUgji5lKsMzD5zCNPMJxnAfbawn4by2oXdTsR3rmViwPh95+zhxY7+3Cz29CMJRHOYCfpXGssj801jetYz/ZBGnbpRAU/zK7SNCnqhSa0xDFNm8o7O28ilem1bUsFEaH9TGztXSTXINVGsee7O4dtLq6ib+QQclAGltpOf75SS1sZMCvrkQcqn5zKKf1dydnmPGOfkcMSu7BfvwtjmhINBlVmmQhh9VM4ZCFpdfFH1td4/uDI65hAO6DREQUtVhxlyvmz/eWy2YLbrzSX34Zm2Wo5QCyzRA0Sgj/rKgGWVebRTHqLeaWSDFuQ5qdJ0UCvchBDvuf0d841/EZmuOJGywXDC5nG+cyTkDJtaTx6orFzBpjyKlMhtX9ugTYQcz+HSTAHDPBx+U5Q9b753r2UDGTq0ZUtOfccMLRsa4s/Jec9JFkf11Q9n6bHR0d2UVmuWxgwl1sdNDVBTMS97KENzGr2JfgOXHyccSPDN7XoMhI9PBzihQg64IqOkax3CqnK013S1l08wbwmEulF9svIejm7o2ajyMkxfu4UKmWNcv57Bap/jy8Ejx0rwOzKJjI5Ppilwvr3E5XFwQ5G5nAa36k7novdITqXp7hkz3ymKV8mctI92bkdaGlT7L18NPCENhujiZ5gPXokRDT1VCQwP3sx4a85J9Mlye+506cucVEXfsuifYV5rf7LyPTHyeSaEccN5aONCmQ/ppn3BsqkRm5I1xEMmi6o9Rr0dKExv96MuI8P4CRO7TI0cfnI4cpNwOxm6GfsF4hiVIp8jBqPCjiyBUhJcmR7STlmhH3HswfGGIHBbfBALYoCSboto0//33Ht2peB4CkENLBRmpAxYpMmiH7mG/hCB6TF45Ma0w1mr2kb1HrlKvjOfyUCmb9O5x5MrkhyqcgZD5hEstCC/67tKJOIQhUwy2YAe+h+yrr0562+XfFbLe+2TspLiTUd3jUcyFqSNt1epSyzL4xf7ipeJZgds4OlwIZ0yLM61ZMt5sMIk5TU+3ZOJomGtKEVGXfY518Qeem8Cf+0DjvyoasR+qPM6qbgOs++xKl4hV2uFnWDl/EXIUXQfBfhkPFg2PthpNYHYUygFr/TLUQQToj6H1XJew/PPGtW2aLz3RB4PdYeMt6lFvGkdNmkayr4eHG2PF8eAD5J5uhUVNBWJJznFBHemf1sQ36oGsU6g1EKkbMmfb5QUyStEUJ1dlzLr7fpY6TN/TmRi9YK5jd4G81lHZ0Bbyj+b87RTNJUg+keOC6sIZg3WsvP3uKANtU6L9MpqfFNo1JtVKgnkzknn+AX3ocedX9dknfnfeFSn03qTEhCrRuXvmNKhrXb5EPnpOD+z1IGm6Cm49ZZtta+1cHHqj8spHvPoP4ztsoWufAN8TWWCmAch0EaLb1ibl35Dk7F9bf5Np6Ws0S6dteJO+vLl6BlOIVoljUl1gM+BUb/tgLVs8yFR6e+sLqa7X3QagVCMnZ98uMgTyjKmeGA7Od/uwLRcGRU5FoIVBrau/WVUZm/20U8/R9Sg43KvMb7Iom4BhM1dmdVduLTd+ERCStE6NXAC8t668M7atTUZ1uG9pyluwaRFliG8BPTcylZX2M8tJRONNbhkWUBsE90KMpY7dYwOcChLHkErpN2m+LAIpV5Wf27sDv0fVapC1JldH7DflfPI6XGC/6HaIHbCXoIGIOnNFeCwxkR8qV+c0QTROPIFuIC+G/xxlJRMgf/bEE8plkHZOBrx/7wjyYtNIKSZJHzrXmn1M3RVhnbI6qZpAgzBMP9VmjF5zLEf7/Snr366rbUbe35WqZQmuHiJVSUniZTXvY27t5U9koo3WN19a/A+O6wzGEBOWtsrjqTeZjJoPNaee/5+yC+aYj9wWMGvZqvFR9n4zPn8P0mjSf1yA/blhkU2OZWrwcwZFlOhnF2NykegPo9A1fDgmwaer8oUbrkj/SD5XyA9FOv6XV0WCdbISV0rLANGczRa8DPYWE16b0E9g4E2XjCTgbc3vcN2T6o5vCqn0goBDeN8LOeMuFub4NxRZJ43ZB9FysTvAHe7ZLQMagLwPK4ZWMHRy+Fd2KmRpbsC2RwmzSoF7+GS5bQmxGT5uqFcUYYPAjpJ1b5NuMOxyGVcWpAK5J8tuuNtPgR1eecFEFzkn1HS1uDHJ504UZcarTVV7yfbrdZ+kPSa2Xt9u4ZFWLdfQIzrhxmn2L+rH7/99+cEdDnpzhh8r2hepMfc9tmmvZXlmXfINzUJIcFk1uiBUMSPHiVt5idz32j0LqM281hVKHzmA3+guvRelX8PN9ZCJM2C9EcT/NPF43267TcjXsvDavm6dROSzieQ3zdJehAb0JOzDsc0Cqtt08ipJ1Tc33eom3OiOKTYvc2arTXqSzBSNsy0Df8TBiO+2PC6UbnIXU7toVaF9lulO9agIJGv8U7ubXYFvrfFeey2SaXpWNEYDnzijSHpSy4pM4Ed/oEj6FCBTGzAivCfkeKW2qiWdsefWiAi+mykgQW/DUMge3pZnByZ1MekK7lCXJU+ymQwt7Rp9ieDTtK+QiW7zgTXkCJTjQTVZTrD1nr+WVU4BFxSxmmDUFvQQYp/mXIivxEmlGUvbQTdtpB8VPfZnT71zcznaPSE9G7tOc5DPSCls2rJrci3DLmbIViF1kvI0OjTZ0KNuV6ssTsT9ozf/jtAA6hbP3vajjrxCeKYJy1DM/9XZHEDJU7L4Bb2AqzXR5Q37UAe4GrJX3DZVsqWbc8Mr9Mb7Jpe5Q1a97WUJjViV5D3aX3SeIwgzuNKFA905vv+r4XjWYzyASkKZn5+yEbcLLs2zgiI/eAh/2rnn2xPcL71XdaEsAkk0agBP587fGOx6xSc4wULcQwVz6Oe0PqJj3isUxTj2oIBCyO+Dnf87RbBuw0Le8psgdM72NmvOR1mpeTpizDmMSt859fa5uR2/D8mo3sHanA9DGicZ/3HRddoefmTHBGQDqx5eoU+Lr6W6xvmWSwvtoEgK+wesPN6bbcpxGtxEpXVpDO+hH6HdDKsCvKI5Jb0jx9DU5Q8/KE6JRgukctLE87oW5Mf5nPlszjXe/pz5nSuxGCMX4fSNWznYydxeeOhm0BX/MSTSWBcJ1FiUVXjlz9geHTcF0d8kqu13bhzZknFEll/qp3+qXm1Kh81GwbTb/8Obaeq/Oy674MloyoEyQsuStyI+rT9NahmqTJvmDfDjsAe+RLhEBlm4/PdKQUe8gMfMGHYHYp59fZzylFmeFypWL3UxBHUDa+1lFiBmkiMJzLNRP3XLRKD25siDUUzIvO5dA5U9/0R/2ZI1Hdj1HRuBNpA6FnTyISH8Ag0j3/UNFo0w48vtnHhX3F033L8ca17bBSWEgjHzyum8+Ax7OhGR1N1zYEWRE+mJp0VmRVangCd5QOeRg1yZpSlC0bwKrE155zixmnjEIybguPcNyCA1heYwCE3ihg6/2SL+BXwWfsu1gvGjZILaI5DuRrVPIjLHCxzQCi8DUP7P96n6MTj+EL9b4KGWLYxg03s+qfYZRJRbxcNbVJsbxv++KDhk7UHgE6Tyg9sCDwZLOU0gUeJSJFihyH2Pxohu6HWTDPl7BiK43l7ibPhXpZNpkOHXjjKNcqtAXVieS39PlZH2HT59le7YNlbDTd46FGv1XImPYA+rAJm9NPqQJnZBATQ/uAcnHPfQ+qer79cQW6uBL1yA7u0nyCSgSyvUD0LyWPoYyzz7Yt9rvsjo7L34wS+1zgefMoq1BHJJtIOkNPf4IyZQyOuYTgBTJUjdEQQNFMlQBGPOAgl3exPF4SdB7sduVbk+4OqQ1gyvlFZ8rlcigp6ex/qzl9cLXKAwpiC8u2I1Ird4TmO1UeyQKcY1pbAVYyh/ECfe1411j6H4OQZTLLodF74sL5Ti1yMA5BfzDBhNMQejglOFCNN2zKSBxUv/edGqgBjqeIrEbWlmBXIhJxeBkTB69Zfu+ImMlpDDkCfUbHbxnRV9LdTAnc+8iHezjjIaH1ypQpUkuztxe4jUuYVj/qj5g0eQuTMKPoVofSetl6nXJMV/Ee3m2rSs+1u4bdaTlocADHl8gaZtsSgwPvDaw1TB/O/PUBVE9oz896CvLFiEsb+pOH7HwRZpZgW6PySVdbaiDC4Tjes+l5w7lUPof2gEQkjeJ1d92Vxuxf8OZxvCxM+n8YaonvdDc/jsOaqPQyq77pg5hw5BlTkU4zijAW+Mnq4TvQhm4Ja3ijiTrEO/7bLbXYDYnVaSuNS4NFU4IQDJ+Q5opiRuf2VLh/9xV3VswEzMCBZ8jOoLxaVqFiYQLmwwgOTYwWoB8sjYClat5ySqLugxmEFStIzyLHVX0+E6onpGcmFCm7Qfn5YSRx34Qz4vo0YtE2E8+SgHRprZF5M2vZq6DHXOW8YXgJ25jbCewrc/WmxRZtphwVjcze1eAx/L/Gi8Cl8K/5vFWarMeR9oc1pc3cVFqYsx3g5iDepZEiMr4AE2jJ8u6wRQYbvmtPwr8JTpjF5Ol2QHlYX3RY5JrUTbd8LC14psz5APZE4RrBLj35ShN6lXVhNLDN6qXF7/Rq5Y6qEXBP3xpC9AuU+SCAKR6rfbM+LIyhgwW4zuBjG4bWMYES7hmS8/OW6o0dWFHf6LO2NWEokQIrVZE9A8XblAGWhYZwLvPBun3vxDB6fI+gJyuz665LJwqPUdMreB6BcD5uZJOoRhjAvXa3XTlT45NfkYb60o1LYMKKoE7wmBY+8z50ngtdZWE0BMJDBcy5BtLj706FuthmO3wdCXfWzdTP9y/JnG0aPvRxHPHLKNFSno9o+KId7v+DrgGUz8xdkUVbrJsR+ON5rb+cE68sHmattQugt5kxd9kcPiQGc9SP8NfIRF7bB8awK3W7AgfdUfbRj9bkP9psfGo3zZ4qRJFjcy5NpqZJ1op94xu8QT4AsBQUMfFONnaSvhaxNkYOilnBe04DQX1tKcwCLOwi5pi30uxDv8VR8BwJ+IIRiCRslCBwriGfSnCmtOBugQaWdeEu67NS4ee/q59re3t1Ju/q4xo1fHjbeN2PcNt+KZNv4FbpEdhPPtdHtnvxXJikIP7FZqi3h/cTonNVGNlv7oFPrSw1it9UXupcIXgab0NhJ1m1WayQcwYP9bb7AJcrderKaOWdeGTnnVbHkL5odPQUmeKmIQCOH3qo8WetqnyPlBiWRQeX1jenkFv3vnxEPu+7YG7h598nGp03wlICf02rmCz4zxe0OhF4JoqRCXS91H0hPCaZ+rpjp3TZgAqKJ+0eCh7x4mnE/GWYznMofpxabde6fB9+6+Jsl0duy3JvzmRviANZVGkO+rLiagAxbp3PsO3mifEvKzPc0KcHAAglRm4bz+txPwPwklB87blsxbbt9F0eHCbxgj7qS0clJx26gpE8G5PfZ/gTHXQ+fOwnE7iE1WWlkfHxHOfupBHebnxzPUj4eo0y9Lw9hM1bg+E43p9xv6xPiPA6HTgvknX137tyG2zhT6+YikIV3kXkmjnhGttkYpDB0YH//Pf54D6EmgtTUBd8YTofoGTZ7sNgtvXOxukeZogjNGPRdu/swpcfX4EZ5iBnLhnLhul3FbSvrs6O+ZhW7GjzqNZ47Cow1rjJwZ0bcC6vKaDGUkmXst8LHCWKymQ2PXk+F1E0d6q4bzZvtjP/89jfIct5ozZWJ+jejfMeS63sC2AgSY6sai1buaC5bBNipRzPvR/zKr65irHdsjwsjx9oE+79Z++uf3wcbD4Ud0bpi1++QOusGFgm7i4m9Dgt6tSzA+eBOrNSdkdxXdCF4l62BzzH+Ofo/9eCzmmjt822pRYhY+7Q55z1r7huidKSe6G+aa34hu+aNnc9VsyqpDXSh1OIMjnCUoJ6qZfzRtf1krzy057af/envp1UNyOQjn3+3CWf5+JUZPsM3U3l07PKf4V/daGqMzXculPdkmmz+Inl8Xo0JPo0AasZzc9s1XgByHImUC0zEF9jOf88Q/v9fJ7yv4c/xiv87+BRkuHPiN32SyhHY7CM9nU3qjOYh3FAzpP+s2zShStRUg5RuyX9gTwrCzk7YepoeHSW3qwpLJxdVjcYy/a6Vqf7MewmQ5eJiMP7DLD9lqQILeZ1Qtzi7ZfJNYP0YphB4DgSZ5B5zBVzxAn5HwyUwRs7NroGnTYUfR2YuPQvrn5rVjsqb/zJio5IB8M5Bpf2dG7XnYGmbFB97GDGZDaa8NW+a8myH7Mtprm/MHKaO5AcqMMvZEkXwGA8ODX5jlOtgOy6LWka2e3lxEQWBNA8axMnkGDjmbYy5ZET5sAtDvzMD04H8C916DtQsDYJJr+npolcno3FrucQN8EAKmS6GZpnOEyn00yugOloEyie27AcHJ/i3cigV1slsezFSn4ODQ7+aPu8CM1Wr2OEXGMVRZ2/TxMsE5vel+xfiwU/f5Zrkr//B6neEVKHZmazsVSQXJ2/20Nemxei7TnZgZ0JvpIz5hB+atJndeUpeVP7r0RVAImVGSHXePGZy+KZft7SETMtFCTj83f+jO0GcxifjKLzMRxSxFiHARu4zw2/ImOBmgH5AuO2FvCcdSghp9FZFDiQNqNO6c0QOGgVfoQ6t/vR9FN0jwesL4QaJHZaR2WvZ/JG2HB0jeARpyASHzLghj0YV2h9KWtjmofNTqmdOu08DhHQd6WnM0SBodyWuOn3L1l+hN7raX4VJY9zLrgWO39+l38+xiETxwbF5rqlNq6Bof3MaKLzvKAdMmojlS/d2/dI4GNfl6JzTnSLOk+8O8OBPYUgxPGDEtwwlmpXiuXKn5TmRSnvPfH/t8V9Owei8Z0BM5lB1iC/hctIr7dl7MpnR9YEA5ZpQllYhJk4p5bAQ8+9vffi6PJgYwb0EJg2e2yIz8QHRU2Pwdj1YUIao37aruVVwge2ctkv0l2xY3T8tT2S8ElbUxxJry1ZWYaY+ehZWGIKwoxJUzNEU4uGuMJVR650z/Sm1WSsGmAjLSHJLDRhKISGvMoTwmgXYGppXIOsRdg1QAd9KKsCP4AQZ99KC33yACZwDV2QX17+Buhakc/z8ZEtHamXDh2xgb2ST9tffrwxGro4uv3woeGuu8ynhN6OsI/ND+Bq6j+Kg2JUrVr5nrd1jfYUfu3e5bja8dvDWdIRH+eKd9iIWvbzbR2Mg5Gr9gg95vRHMwa4VdffqT9W8tCPfuv0AVr78cQ8/SOQwpNGFJzP0cSUV5rREvEhLhFvBuX86pxzbsI7518ZA7A9ufeSRPnASLfg1HcA5rH3z0FvyPkwR+HqSyJUdPh4rlV8MIdMZEKAwS1Od7NBnVfeeSYSyjL0bAHpi3/fjENw4hqx/xVrnZ9wjWMd3klWjABgw73P8vAep/hjUlSa3RqWebuzxfgojfFxpH63KVyt5N53z+j+PnTTKG3sNsjhtpznzvFE08j18CH2t6aWMhDD/UKOnTqEDCY1iUZpbJmaXW/7/GL9aGUyltKqFFEJ/hEdCtNnfw7qI5XfAJ/VAZBBil1/L0MRXRVPNxSwunfDooIrsGfL7K/nWF0YEsX7aH86ALmRZkC5Ry28//ecr7Ox2L8TUE6JvMsOzrXPcUU7cJl+TDyeKlrffu5yRpbnDN8ZRK7EWBpTpi/oKBv8D4z2RzvpinwbluccvHa2Cu7FBRZtnSdDaxog3yMiHSVUCJJ5aBBPbPU0OZ+N3r526JFoblg8B7oNUJBDF+j92nesjXgUv2013VK5phOmcKQYgbbOMcYATdZAu6PB/+IamH3UTpDDtkvWppxRzu9ID3SisqljPOB5DPGU8UdzEo9dNi4ZvvSPahpDf3yrjn99+t8itI1bG7QgF+edIOC8vyeLQmXQs+LuqZY3MKkxW1Lpzunfljvg6YGe8OaReJ2HYe2WoKQbZgqxPR0A78D2HLerR/P7KERainw5aGfJ/pu/8JgQ7nRj9j6W9nCPk9YsvHzVkuzD45o6gJup+iIcJDWf4yFskR4neqvZUcNLiS2XV89PBKZB+RVjHN/LeejV0R7xhwm3H/O8/u3SoLm02I9orI/oY+kCsEpTexPYtzrmvZ1YnvP4/MACSzrSooxO/lFi/O852Ws8hozUkn1q5vXkNPCbXgL/Qh9taojNotIh8qLVOoEz6okT35uIPyFFHeatD5yH/R0CRjybN8pzcU/H2MB8R/KFjXjmLKENZ2Gc98uuOxNlYjq73tye7241w3K7/OMQYftFIq7v1ydI7Ptji+Xmmb0ul2gbcgjbJaVPmf24CNeFSI4l+LeG6G7Gwyn3FU6nCbVXAuoTGfL/vwTg0lr6xvSFJzfCOraE8joTiaFRmDe1Chx654n4orGGnB0Wz6OpuMmHzTrIXLyE50stWzBP1MRlTjVxT//0KLaiSzVRCj1niUBNeKJA8urbCxdv8B3KdhB9d9LwuSl27yuWKL+Y8TZRYRabicvcJQ4ficHw1P7zVK78tVwp3d6RNHTM+3pta5i87iGGt8d/AYZWifxb2OPyPGOYA5g+5+fzEcffZbOx1YVTeO0/P9EWSLjk00bs9mfDNWlTRt2QKug8RKcDMMbWFOgUneeOA/oQ2AdlFLKWOYbFWQ+rlTj6ijnqq/sP2S4B33YbYeImLXHX49MM0SErElGCK4JwHhmEybO8Hnq3ZABz1Nn05QH2f/tO+OTelxs4+BcnCwY4t7CoMQz+Zsq3pK6Osl4ALpaHiG0p+X81nVuoWTTH4xLpYm4Fy+C1hQ7v5Mpx3PXGKSuvvkmn979dZ664dnMKgzFncddltt7ZS7dZMwsoX4MP6porBPL6jUmXEPhcFGa8n7LP4FSzB//f0/ev5ZC0nBz2xfDlX/xjBll0OtbM42Fa5Xbof5JIYkbZc/8VShQ+5zztAsrCy+OP42iqx7vwktnC2tmq0CcVfM34gWu+RsvcXijX+Cw3Qrn7BZVpLnw49f6wl8dEPTE4gonwbGcG9dXq9rnJ7mbmFFRTS4jzOa/Fcr2/G/0h+gpceNMnN7Wul0uIeAEo5w44r+yjP+/aDMYGPwoH8oGx3s3ynO1Rvl2h6c/Kvf93TqKyBa7eHoDF0f0LySdsruJraVpF/xkg6Q6w7zC/OabnYtQhHx3wkQJ7wc94mr9kv7r+X0Afh1IWN9oN+LKxohZS0/qqmYMVrPwuSj/jz0+Zv+eEXTaLn6xzmnMuhDGBb/80Lv/pOo/iyD2CTJJyT3WW+5dXegmNG3dr5ha9mEj9i9szhvC+ABzz2jjBO8F8/TxlKqBxwEu4hY4nWSh6Glt5XIIHXrYlGTX3EbNAezV098C/04D7zO7dsB6hrqtl/hs2sKycTL/8SMtTwNeZDNsQDQbxSMMEYFjfSzAIMGyBc6jvAzxfh7/TqGiisi/hta2U8z/syYkz+Q4GayvOwU3vfZ5qkqtL7C6rYH9ZONM1ytkNXX1iFuPSGlWgoCQS58Ju+B2V3D1BLulyR0/B6V6HBDbe6nuKTFju81OZ6RSZmWny/3IPAaxzirC1kIvN7BvzwDPLMlvwD596NQsQP/9B3lob4Fzh6FTsu/59RCnr9qR71IrqXzxVD/bAb5qUXh6aU8XT5UMTt7PL4izshv5MDaBvv7wzdM2yfhcZiiVubdnuWoLXtFRQZNoOh8TlIU43dXcgmNlARNHN6H+cS2NtPBNBwcHRwiLFStcLKJydHwXtaIGZ4rSWzGwQ2QqJxOWsalfGuCFn4z0sEewTl2w5D9ZkTWgFcb0Y6g7uab4aeN1fylZ3h21ho4QJ78cE/rmH1z7Gh+H4W/SbU+o40E+9oKaWQYecXIb9+vqsjxNwMyILguqGZjiDjpjdvh8ipBR1RRHCWEikFJjI1OmbdIqvKNTP4HJuN9k7LFrV99f4SyAJJ1lm8pf3LyYoTex5r3Rr1D6trJrEC/lfLby7gEDTSjRc6oUwi3A81Nfzs9ylexe1eLYAcZ5T45GO15w+awv9wJl5NDplDcswPn5dAFhrPpLlGTUGhKE8YPr3apgN6/hSJlrGaX+pnHblGNzzbp2M8Qu9Fra4WA6THYZXv7c/y13FNHZVqynvmv3+QzVDu7Xp51tc9xaZ/iokQOdJpTy4i9wuNi+nhwphauTGHjZy6yWTss4Wyy0GYXoISoRjTSrWUe7aBfCNhk2H40wmPxO+3dCGWyooiUjnIB+njT0ak7S5QJGbYX2sp5kJqDuJMCt3ChlvItH+rez2XH/YfIfGZWD3+6z1qvIhsIhSOIq0yn8YjXaBmdv13L9cwWsAYluTK1RMlzeWuG9r+tk/bZ1TCh0Jx5qLtWv/A7tkZkGldfzkMFI2K9Kk/9rVe1PogAT3ij1ke/s3q1K91q3aMpJZzHzs3+ijz3VH/N/8XmfBpzF4Jgt4bwkGPzRFWFj12Iy3jqV7N+mm+f0GuYZMa/g2Z/NtXFR+p9J0HgPSkuABRX+junSB/b6o53haITM5z9VE/eXLhj/KcYMc7t4OVJAd8QCoq4NIYcOYRyn9jCjxYHCdyeskmXoJWFP4dD+9gqOldrBbm3Ow/bhn4WGoyWzbMrX9hdsD8fwna/5WjUNc5DI6iYyTRtg15wUw4jfiGsjrCoFvsKLcwEG6J269tnAVlqumj/VZlOnxtf6iHpXdn/kynLKj04Rcom74WS/aNpSuerex5TYZKlt1sUx2sAC6rEmoyZz7fj51uIPWnjHmWj7Cn2EfI2RH0NR+r7KsWtg/DK7k3YKdw34pbBMZ4l2dU0SzdpOFXF/UhtOV3eerJTG3zf+Mnce7ZJRb3KiqP9xk9OWau8x7GCae+Q0uysS0GwFT+90AoMwYUvjLv3ShW7Utr/eSwliCpT5HwWKnVVSagQZ57dePqhw1lMQzL42NMHx5gDQ1dXj4pZJqcqjJUuf0ne3mjKc93RD0sfnkrq4leftgjUmtgsmveYvyRW+oo/NawbHywPMGnSXQX/JSx3trxhV6afvzZpmtJLovl64W/+zJMmINsAYI8VifzEk0YbO6oO6YuS+AxVaXJ0POEZZdI/2YUgKiokt9N/oEZSQXPSzWE5I/p/+USMf8vuEV7C1EpdOHPUIu7xMq0Cih7pg3a9vGw0sKFtDrkDtv7KLlGVBv5DdnxW1k9vv3Cb2o/SMUhWXXZj8ou4kN8gen/bLLJrTZfkmqb780jUKNaiv3hI3Zvud65UdNtKovrBGvttWR9W3yLVe2SvUw3d9dx9BWvzVz2XEZWb4MPRQmnMPnffa8JnVwny9f4kVTCtzFRM1AccYpJ5bkVGD9adEzpFsf0kD22eIwz7Y+xkFbWgU8lsab4ZPIykqOL9KsCwHEjZFmMUOF0MoA7zRJI4bjOeXt8D3svr4yuz0/b4xkGZ352oj7D8ET/At4PoFZZZr58hk3Yuzr2VPjQet6XMbIS28RsCdLZVOnjxODv+VOTTM4rj090PZbicVnCJNtoBtf32iWKJE43tZrnD2WmfJuu2pCgK/Q030A6zM3Db6mgjPURrekjXiooL/X1BF9vgRBLXIa2PFzNmvHrDAfx9YOdvcbtKY1V16Q2uKD8uATQFsv23cKQs4V4R4xm2csn/zcL+SzOqRbwc+aaZvI7rk4XG0nT3P/Bm3EMvm/o2BfmC/xBPV95M5Moe6A1ctT/gKg76WVp7lNsIJxXLeLz7YWrcs3D3P6czwm7NQXhbeM+ZK8IfL1ZYzOuYHOIYtqPITzXz2PNO8xxYcE+kcYynLDRju8IKFaWIitAxi1hzM1J6eEBmJV4dKn0z6i008/sNvmgqR4w9oabwDSa4bdi4Adqe4MZQy9CzsfPwb9nLEElmPH+tumKCMpM8hASWtzB9gQp7mZFVX/1Q+aDYjfo05kvII1Wb4ZGjCt1760sZSzQC4v6IyI0V+LzflD+Qd/ceuug9f9xpZPFDzFno7+DdpXmVvgCvgRCw7LOeLMMrrbwGQUzNd8LrtlLoF8aC0EZKLhGps25izc0I/RPVT7ZPCoQvuDok/L6JRviRqcwf77I64qi0Wz3CmGTOp//+ZnogcmMHAPioU+8t2dkHaXueu220O2+khcEq+kkm8/d8CXo1SnKywAh3EHnDCNPZ68ManjfZOABypfo/wpq/3PZ7ZzeIYHk9wPG2BJI8/IGw+8t21UQUml8Wf4Tuamkfw/vs5FTXYcx9GEOt//ibeEqbBEEqBduzvfXLqrz8mMsCVegB+IzgRtfNMp7XKNIoFcVSr161t2DTQZNPHLt3xqegSVqBQaP6/cqvxLa639e09WSrHEJReO5W3PV/lmK60CwDfGxbTyEq4iMZSyJGbEW+vuu93qFS12bOnK02XLgIkod84gpTDka6CSu9+hi57zf34FSoiGDPLxwYbC86bAcMb3OpfU8fTlw/kA99UVZOpHmOrE5dD4ImJO2UqRI6ANjvTX1cdiQq39ekJT9JwPrajrOqA135qW9izhLw1aaqkRvHSDlHseTpkFuzVClIRsWzfnGbraog7VTT8ahKuBWk2NZ4yspqNCySkpmwAfMTcQPLN2XB73uQP66Auf859P6ATCpJPokSsetsNWsfXaqKwf7vQtRbX1W4CwooWw/a0cD1cM2Idlye8E619KoV8ZlxcAGhlUYz7G2wcWBpyo8IDdF4AlV9EYKhPTVaprvtPAzoyxiLcKEspnc9/pLS2Bo+YZuWPhJaMk1B3QPmHrJ4csWK5a4pTjIYNy5qj20R7/+B1CA85tluJkaHFjshxMMU3BQpvyFiJpYv1Gjz0q316p/S85XFdk6x37Tv/w4fZgAIZ1HA5iOMaN3Q/1OmPXL8gYuke7G+qHkPQIbrkto8jqtaMIVza4FD0ELCfX6dRfd5AYIMMf8mPPyS6RVSVM8/dJDISkGbjhMTgc0K+8XJ2SyqnMSzSxHB5RI2VkDNRekGK2diqn9hfUZwQD16jBz3qUkU7S000O6BSa6JtHnhRU3sAtVopoirsOwMTBow3kIerMV4vV39piCS4H0hIhPsQY2BIJ2KYA3er3Wq8VNNJAQLgpEU14qj71FwlZrmyJOC82cBkxywMUGY7RoefICEjcfN+74BzNf4RPAVxQQsksy4hVdJD6rv+SmCiRZledn3PDjvWLHgaus0fdmvciM+6OQZEO/XpusKTIev7Pc/CmigAlghbLL1Onab4g2BV/gtdC+m98xbmxq28QVNUYiZmkcN3iiW7vxwCTBi8R4GwoSsZGV+pKn/uU+KcSiqYnM4zLnlpPenVdGxV5BQvO1mGio11N5Yv1wZX6V10Tvf6npvelYA72Jcgw+Q42QwGztQS+IzgxVf+Hx2vilgWP/MrTmdB7ZUvdk+ceRD6UkfTuwTWTx4e3G/B0uGEIYLOULN26j6lhMuvhVJ7+HeQzYmCFrgqyacDPmbJoO4BiUlFJoHozt8zSQ8cscoccAZ70xkUuCxn99qT+bt60l/BoiGkgCVGJ9tfsth2B82sgIPCBDlBptgLPfZo/gICWCFetUoHu8z/XQqi72f5bkq0L8dFYplFkAdT6D4lfExcOux25u1lu0WcY20dnBPLkvOAQv0tns0//DcXVspxa5GqHV+FstLhce14Apr8pbte6RO1VKH/2zKCqqbNtMQ+SLu2DMTfSlEiEkQgp6eN54QvGrKYuTV0Jud3a/Zs+V99KHGkht9n6K07yNMe4EGOd+8kqtHN8dwzNnNTpOWe9ERN1GUe0gaYW/T2uhjNXzocqUWiGzc38cLSlnUOIqhox2hQutw/ZAXCpnKSDMDRzqgWgMvqx8M8WL9gaFf4p1Se6a9Iiloko1zEQPosXO6tmFuSDgMrAes1pMGySiRbLaUrtiSnbn545C0PM52sU659SI9QxXxepVj9L+W5S0kOXtqpCs1QxgCaq2QrX2F4K5UGlWay97FIFp42VbmA6O0/jBizrfPS2K4Ldgh7u0ebwCjn7wbEQspe938L1TOh2V0RYObd1S7pEZEIj7qW9aVsHepu25V7eDYNDArKNAoHCG4qj5N9K9VS8u7WBjBHQZjT5Z3pDi/AEpiBKs39ZoGTor9w7ACggq37ec3xugwpIDvCFjV8Z5b6+XB1Ydw2xEpNUbPh0ad4NkIg/s3Naiu2C1frwdA3qC4pRR4fEnlBiZDhEnYYB5JydpJFGQJZbp6Ac2JSDLVmyrsrTdLeLR4Pc9x7HgaA1PAmAU/tv8wZSwoXzEJNINvR8ucAob7KT5xLAQrupiwQKiqvO2J1KzV6xs7kqjfUcVftdtHCk/8bXrF52FBSSlFhGLdeaZRI4Sm4GVZHOFvCuoS21pA3GtNW7DhZtqrNVmVy8nooc/OxV3mscE/eU93uZT6KZzFIu1ahPBnPHQpJO2mUvLKEbGkXnlXRtRT/+romBuHUx/dOK13goK376w+fvpcppD5PJpyqfkb1Gz2iOJjFhKA8UMQqPwCzwABWX7B0JMIgONtgsPNATCt/lfmVkspg9TPDazYivMUCxtS9BVJW0Rfbv8U51ftJjblickb7c3TdU/o/aMmlnN68z4CpZkyhwaRrp0lTu2Kbz4lk6hJqHLEUmKX/lElsV6z3XafigVBQS3rSmFLMHmkx5hRDNsm+hZocaQPXZzBsjZeT9kKX9dmV4QrH5b7LY4/L77Xm2z6Wdb4vjgN6g2W9IKtehZ0Ro/nEPrxxMEBV5U5NZ5gY2XxajSbexNnOPBrHm6l0oEXCdCyXviowQtXfv8UcRCMA6YfJCg35Izt6cRjDYrKInogw72QdWVaiHNW/z/brocjPjNTiCD1UgecMpUOUMCqabSmMUiQPS7jbp8ntjX+tjfKD54qWMECgpDd7KycODRBiZbM70P91UChpkeIJrLgLVfMFxWGVAoqvnOVkDL2fE/FigaWHr2Rw+E/kFtYO1rC6PkpJSsEHBdc3nuvKetDdejsKhGb+0OeVl9yiE7+d//atRAzVVl9QhqIR2Pxwv2SFUbQ5h4G4W7MfdiEdC+MhH8PLIDIZEpcTo3tByY/PrSgW4wCI78uCQZyCcZEEHQODMhn1eZdRgSIIt0qjBZmz72vQ+tPuddSnlxe+CXDLFEwmztv/b0g0l8NIsKNcrAM5qjCMHHW/v4f2szu24sYg3FP2Y/hfut1oqu13v2o7CIEe7BCQ+mj2/gL8ymQ+pBPRcAvBFyVIDJIY3tYWGSxfLmb6cOneXRBe/PFVoe4CXWvur7Z0N9sIi2SCCRAm8dyeNSMNDKGg1F6JPAihO+rDms2EQwuPiKNJVyi+PqgWr7Kx6tHPWeaSDQr/Eq6VvHSQhaXJqBU8FU2ca+dQllbWSPY6H1agt73kxj0R3hDCtNkb7uAqu+pImlqlhtU45c55gMSCDkyeO8EpriIyvhulAdItQY1ldv2C4PoSTG/4DwwPeQqM5q8PuP/A8m3+iThYdbUZCtTSw1Pe7n+3YmZO9m264qytQ24x6IDZK00m8/MpZ5uNeACjsujPj5UHf2sBmT5Bhcnuh0G+SAAcqiMRsEpDrssblpddaJeF9GxBVPWGrudosF42uxEPQJOs+SUgiVClROyryhepiU7QEokO18ICsQVbFDZ3mOD/mzpApZ1QBeo6GPvM0JNFSOU/GLpV4Rbo2XG1elxeazz4FiM6m8/qUQztvKYZ7yYytQ6ALj1kmRWFFgfc4vPwm1RT0o59DunysPiY9fjdEU4Fgar1dlQXcdWDwBmt0yrDHxkkKImYczx9YXPtxl5oVcVOeXAT2No76D1uARHE2L9tmAsZT0BfAqoCudhUU9C7iF4LO1+CXMkruvGFXRrhWqNrGlWAKy+NqAMdauRjSDqakIJEEDLYozJh0Z3CsoP9s2bXDUeKEKnp0vnAZo6KNwLDtzcX3Q4uXCRgBqmHs3+/8zziZ/dJSdjRZjyXsfJ0o9jJfstEOu5sDapT4fex7+GMTZ3lsS2rXOAVmfan7eMt3bIyXDb5OoZ2ra6jV0jBUmKt57cJ3F3C/WFLInNSGih95ZdRKBGNGxAGxiHcgSfMXWoGn9p7O/SnqiTF03+0pYyQWt2X1fjOnNzn/2D9iCcomHzKXauPphDbJ+4leWYbySXNnWqMTFJsNgn8d/axaYeEiC41MWqmWpnd84WM/0S/lE0yTMStimiK9kL66X2KnaBqtJa2eT1bDsvC5sMo8XJlrYACf0KfUDAbavHUxbdiro/VulNzRWfY69EJ1KYBG+gDIZDf3lJJR0HTYeZLF16xkDLYs+Uyys8Izl41Z0KXTlsciJk1BVxB5+ofNGemuu337a4TgvqS2uk6W5a46Ud7yBO7g0oC5WvE6bNnEvDcHNLRGzup5Wp2ENZ0dysmVETe0QPj9FX/3JPbpWtdVFDdkLd23fG+7uQ799tDmg6y5wEbv/wkdpta4n8WK2Lrf6VRh3acp8p+8Xw80kO/87eudDgbwxWfhjIfU8o3lcD8UwC6Lkqew+una25CM0NDUnla/EHFdt5moQJJajVIlZurLI1ifgBmPOhSC/srmDWXEfLq8Vdvvp3NN+hJuyt0lhfw64y3+6mhSi64+2oeSwmxAauW7P6NxUzSBNjwf/rwCZe8aSY/K+Vmnj627KmthvoxnVCobIc8Oqvh8MheWdfe6WJMBH2SvcD/WFcIF2NdtM7NEkukDiY+YvowaCkMDmXNQpAeE/MLm8LP2FtKL+HOzdZSFzkuwYMoRT6C1KD72AfJzsUmD7EzZTs40HBEsaJZq99IQn10/B0Wkbz9Dwa1E77cKqHOAputMgM/yYxeRJNkLJhuhY9RieulxkKPobi37nDQFQJjtjU2P4eKQxsXU082BVSiMgk8ocyIN2L2L1lUXgASMijrhBmfu1CFqmt8d8SaVIzz4NZ8tllyilTzSu1FDvtruey+Ad8KuPLsNjGdPHw0CUb3bLkLei10JOxYl9hpdNbxUmzItzP/92edj9E+9Ch8ceKtTXghS3VOxAx5eLaKuoFlauOLfv7rRfJOPL2zf+LDI+B31arJUM7WpeFLEy0KMFZbsmZnR4obN9x0VLjztMZxnhHy4eieIJUhL2PIpowYJMFW2sR5IF/LE9GaF8PiFRVoH6mLOftggrBgguHwmQnA/v0+chaQ/y5al3VDUoABL1SaElXYr3L0HTUO+7vxj4Tg7pA8lUoz5KTREh47F2DeJwLgP/HYxhwDA3fWM16DCrX/oQg26ci1p1I0SVRlkyK7eqoO2OjzD6cXizlSGItTWlsnEOSBOPn/dwiNX4KbjtbSFOQnCFgb8sdp7yxTGIq9S08hels/QPaJW9Ux3FwtIqeQICyZT9HQPHrQI5/5rCb62ncUAKwv8bgX4mblfaf4d+6Bz2C3GMCbSZ6pLb2MBypu4o5LCyTegxfCXMhzvmdCGM7juKfSUf6tGJxhC6cpFS2OwwJHH0L3nvXXNnQNSzhqWnTre3cZXoX6Stm67oibRG5KHSnFQ1aiSvEWXhDYjwRyF697jvy92b8EbieJEYziLxLPEFrOz8b87b4YfmR8raRifbLKiSvsIxnB2fxpvbrnWs5WYN2I3vehMib6KIcKqHhLlCiPPg26Oz7A3a9bTnK6qqM4nquLyBDNd2Mu1nvNYURT3uEqNe7Qi+iIjhSsdAxie3uOWN1SLdP/kzakt1CbUNaSaYnwvko6pUXVa/fVwuFzIjilM0ECvwg1ClTj6TZfalJ+IGvgQ1d6v+AiOKk3Ryp4grSZ1ba7DVliieOpkqC4E133Kdf94FSc5H4RuHELC25EpmWVePH8xFj4ieeJ/JznTMIV353Aab8/3Rcm3dA6taTFo8NE0iofkMT6/2p+NotRVrPuYWftfDNiOV6L3FVNEB2Ts+1/cGuAuhfxWnyu1CGuqMrUCAZ0mGTojR/+pIcGCmlJgp4Ut5QeD36wdwkUYQBLh70Tc8vo5/TnpNMZSnAPjFoGWMdyBK0siZGc/3/A1FO1bkGlkTXKvZ3ejFjaLodwaaJLS0yhoE3Swwyuh2jf0T9j3thqn6HoTuvf5mbAzxUzVzkoLVO2i3mvui6Cdj/iAxBNDJsPBAupETdfy8h5TNaXqzIzK2hFhmSTP3KryqKhtsCsx6aGPlcTCABVPa3NDUbO+0xotcUBMxKHhS/7PJjBOYBorSqMlksKP59kDbTlNs/Efvme/Pc4dEBprP83A0HWBKdbubdtPDxpuhTFt/13Ga3HBBmzQfyVDvyf8j51A3IPZM2BYKJGFjA91YSjT5dagrIaKypK/lFoo9ohgBTUi4bZHM2bHz3O+e8E8hP9ebyLdlTaNPTXzERfWw0sx4f9dG/R/PU9/AhmuridfK4jEndUlCAcUMfQ6DjyvFShHCjw7G6ual8cPu/LTLf3vk2gli3pVGEAs9m/loa6QmcPTw6g+3GVxwfWYZamD0sGtotUVfFJv/20VLu+KlIfFvezWD92sXGnACebdovett+xcvxv+clO55dV2QfeIMqOEkbGu2KhsCRJPW7sq+Il78psAkedWhFJH26plWuab6rZxOUIFHHSKZc6l6yq4n0XNC64OYet6fcmh0Lu4nGdmQXx0Y64PkCnUxf/Cp8ZBC7UHCsgkpB+Ko9OmWonVoRIPwmONZYISBWUtK57h4PalG79KDkHnojZoHfw1xciCD7n5euE9Vi8Rh/OY9VmxdQPQAmn3Ukh6DdU91iZqs2W4dSw31PQSX6Ix+4mglnA39FHVY/eEvxOtPw0l/ndSmsaynh9peSCf2DCiigzQHDAKvYq+56H1UAYomTZXcHcPDlrrIeF1iX++9cqniNmq3OyGwu7Kizy4F8D5xH8X5cqCaVOGf+yPVMAxkq9KddSK7IGvVjSmioyWRdDEnrxYKh/wLmxyYEZLgYfC+fDK8QmNU9R8sWpafCiSoEVRqati9lz49SiWQxqWNakqZAMrjiE4c6GaO8iTdnXCe7oJECBksLInKX9Fo8QvAkGG34gG+WhtuWKIww1Ii/jk46ieOvMuX7w+dygJe+50DS+1cJg7z7NtpFfpt0meoM3uANSjp0wjZ1lW1kQ4w5KlJHfEvKVhUlZysLm6/PqWTIP3O9CjPEj4ZNqdaPYaV1/V0j5qLA7U69JdTHzZS6SGV6KQ2zigF7T8RpdWtyaQrhXZNHaodHq5FOLcflHoA115675WBPTSZgp5Kky5HBJTFQZqruR4eLMlnwKWnOsdx6RVeMtRAwKkiOqGQwggHXNbT2ybnKvfbZu8n1XXB6DItm36u5Axae1mLwZe36gSEzJzIXfFpP7mnodPzBoz36rkRFiwo1aepTsqtUdLeolsFyMUKJEar+kKLDqcNT3ewwIuudRV/LUQXoJNuSS1Z4lJZgh3BUEtJQ3j/bHKP3iPjV06mNMPrts5/i+Emh4+F3etX+30bAl17u/r+6neduWm4plCR7cwNINqKQKXt5FbWf6ErRXr6U+ZCYwUK89lp/KVuMX9sZZXk4HewzHaKRKDUYPWEQJUwNVAPGBi1ZrP2Xg4DkJWmDqc7LXW9RMOefDVgHR8ZYiP14/xzFSOOY7qymuuyoOCFHZRBB3cw54UDkjaS1munb0Utyx0/XpSptdUA0Vbu7tshzkuOYjZnEzRgoUNupo5h3A59Ha2h1LDaApxioAoxSHPiB4wpooQ3aex38ax90PdqW1Kz+/4eSTTBR8zGckB2bA1jyQ7tyyDqAKLMSndS5dhVNL1jX7NP/wPxfST0CaVNlB/cDV6iqg6tZ8387xCHzOO55iDz66QqdGLDM3e5dntfa2g3oNiBwwrH/mFYjTSDtyo3yVoad9YGecYAF30GvHO607PDjn9Bw+FIh+ExVxLvGyg4A49Ly1GMC2QxbAAEB3bLevpvbYBHLo2ryHFmfzQiU1Pi6DlnHp/TEE4/l3578itm3y3wdd/8MNAZf+ccL/8CGdilwtnA8O50Kf89HDQOVBQ4VmYIcFq7HGCzlQj/5sJ3ywYTEoTurRitrA8X+RXimW9xSTmaoVuPqRK/kzvP3EUlbZTUZAaMREiikdYaCnp0jm94vACOppEzWLXkmNHUydifI2wnaGR60LVQJTcVWounTshXBXpXC2D/EA6CWuW0DZLaMRKRJTanM1C74E8ZFJS+0oZZ7XjT3LBWwo77uVeXVJmqYlPgqeUbZOmVhe/LwxuW0rl3S8/xfveFZoY8a0jbpknNDNVO+adgX23EePJhl5nvchd3WUDZeQJQm8HLC5XrYQvKaXteY2iK0tECF+pv4oGStig5fIf+rYD5GF+9/+trAZdM5GLw5C5XbwzmmQnKCmUftVseYtl8skPZWmN93bMpZaQgneRR2xP/wWjRYsliAjRajyDNOq59y6C/eWjjLV1Jg+89aJsqIhrfhoVV+PILXiRisZA61vpnb0IKPR8x6z9XVXNNtA75zwgnFrIJPN4guxczrS6kouoDztEIheDNyieQ0QTrS17eoBqRT+B6mNkpgxnGcikRMLCWcI9arpxpWN2YtZIM8jVhHLYdl4mD2+k7QtLTi3OqkEjZsFwVJq3UqIEhGWcpm4WMbz16Ibc9lR6zU6SM1w40klJZT//1d58JdaK/D/DpBX52X+CIyVZTb26CEr9IPgMiVbwZTxPJvA/qxJJb7eWSa//3g17r7dNBAVWTH/XM9w/iXkWoH3mGfSM37tdvGEbp+FYtIZD0gGU1yC+QMjHwA/bdBMhehADC9LT9kojE5a+KrhzhZbu3Re4Y6xpZR1fyjQdXLNeUjmXe+CTxIoelHo2sTycN6J200UxlaOiYQf1bezsMrapNg0sU40NaxfhzDuWJxfXUnD2cLWS0XHz7jAyvNN0znB6UZYXIzIGL9Uj+2mysqSccaJybv0LoLGXUO/XlMOYYwlfK4rWSuz47AcKsS+ArehUz82YCfTdAy3PHtES400d1zeSYfm2iC8QlTYHuWh8XlyBpZgQqWpdyQFvFANHXwT9RKGeowLynd3SErNS9zO7qIa5Yp4bzbGo2Z3EmQu1JopLeHhus8Xw7Dv5GuijNVk+VTVWDPa0E4VneUkMQhjfxbIqy7xfKxG63TVjI9+eh+E8aWVurwVuv3Yp0CFMyvul/qRQ+Fv/rLN7SXnpv7/dyfqDVfZC3q+qR4VB+/f/Vz/x8WCD70yJYtRq4wtaYeGNtSSb5xaqAS2w+oFv6QmGAFGFJfYPeSkMjm+0HuD1+8Vw2f8hqOgLslQm0TaCUskizuZnd/7igJ2wolNKlFDEkJzqpYPhLuM7O0OxinxTk6wraXTThabqgj8heBWvAOqcRzQ3wjbOmxGZNsSru20xl/m2oHljHNT7ZsS2hpkG+OqKM5nMiDetXgCGNDktvT9ie+yFF6Bi4IlVbpLzq5+S3W90UXqRVkRzU652ShcHkLzBSlvRJo16frC9UswDghGq44QG5FbFSMFtPXks9X0vW54wLD2ZLiYCiyFSQu1LVlN6ADP377WHL9XTqTnVP5QWFrSztzMOKzgp1fiVMpxzpZq/9h2/Wryez2tHXOjAwP331Zd1iQWBKcn9qDuNPnu1W472aa7ui23qWrMe3KpQjqMtazUjsJfOHbZQE/zuvmHu+bRmw5HRIuu5APr1+veePLYVCNQRAkrhHRj3485nqHzzwtJixDIYZx8EiE8YidTL/d9OJrAI2UpqvcLKKDFchn7SKKu/nhB4WYniBdPvK7Xsc23Rfk7/uwb4t0m9xu7dAg2t5m9kQczgt3TLatKm2/SFDmMDyfwpcJCc5wbYUn1u+WFVhmpkzy0zjy3OCgYqFrO/9tN5QYWouQdJa1J6vRt+7mHqBoRQjee4XCE0uXjZ3JlvaU/18XLchya0j++0RBb2j2Y9c6OQNKbDqKyV8JBX2rC2oLNOyxxCM8Vokl2ZpJuSW9ML0MN/M+Zry/3MGO2VlOltyYl7IdDBuip8tJjxCm6y6JVrKTm1Vxa8tquJWUGJ8DSRj8QA/nY2dnrbOrXKDeGESEZXvdzLGSMvR40EF10K9qXDe5jGUBjMiamKscR8BgXq4ZXq3Vef/Np2l7ABHbcOkDlcqO7nBqb1XGkbD7G99YNhqcFVKFpQS592rYNzzPOHf+7zvw4WeKvnq4M8zMbV6QGlKemJ0OOAqm2oCIr59BZsQePJBlg0mUWMAYoT82r2kY/HlhFGrQk9ZUpRe2N60HnjTB4CccUw+oFSnDuiCYJI2uo8qGU7ciSsDtFl0UmqsbSFcj9OrQxmSAvQuVLVpqgitKet7Dze3MjgLbo8ypR7f7AiUnm1+/s21ZFRk8dKSXYcQKlY7udvrqP2JcsGUTKlIU49zmZVxTgjNVg1u8tyQlIlL6+xM9NZfP+7xljGXZRfyBl+3QFsdAfQmXI9Ab298g5bNXPaWVQjxjcORNybgxKij1HC1VthasHF4Vqnuio2ZIqVCV7otHQuYhz3mGpsOoTf4KURnPImaW5h7o0YSe9pqAZADs/fpwQkJMStBQyo6b+CXKqHr5KHMkkbw1xC4iA05llARNR4KRTFMazcZ4ZtuZ4AdvXISklGxwVpzJjKZtSx3jr7xUIXNbIIuYdkjgL+kLToil+issdPJP1+kshvvBclPKPrydSZ7+DQyK7Mig1UW2By547A0u93GIW6Wt42nMUEBXffVRe90hD+P5YBXJ7K7iDWas1Z1q5sZWrT3zmcbQBAW5JfWZGwjSl72seyEbx+1NU7xcKVQUkGRVev36pMaHf6vzXksAJ96gWGy+RAdnBJjTQfhCxaaaNFu1tZi7ilqubhr5XkZUjML/zE51xA0JaUyJJr02r+sj5BwA6u4iuSI2+qwYLav3S5zKmoyT9X+gt2Dmh9OttmkcVBY4tt79W7NSQRb7IjarOo2KswFpFpVmr85Ror2H0wR1gwpI5mj4ZOekYnbeiqu9FDDLCTFyfj6ww3dMi/hl73r54ZKFvE1v/hjPLwtTDgsZfyv5fvN8p5BddPOb8oisQKvG4fmQp9JuO4xOyaEqlyU6ghl9GsO/WLqCClUehpXkDDgpi7l4NvbMzPv4/d39qxo2Nx0kzxmLfO0f8POon3mojyIz7Ih02Jtti50jxet8UGlJU7b+WEH5lRRKmzz+e1ZCylo/J4q26uj7f1qRTxsmz24Avw15OcF0Bt02tXwdU9fiG4mh+CuVEogcG0VGRXWqu0oSGskHZLEtChe60LZJ65j8C/PIeNxbhH+O9LPsOpnd51mly8lf5sEjK92zyuJmbOqnbVca8fm+7Dh9JhpT34wavrBtnXpGc2lv7R2gUJj1F4n0yTE6Mx7tRzoa6tnY/kfYJ3s5ord0+TLRuciW5tIsxm3SeyzMhlPXsN0X3arWt5rm1AU90GbyEzl++dTbYqgiWSy7w8iI30o8ugjKSa7NznkjDM+9KWmmIgMfsm3uZnC2U2zlEsbZiVogdqCjL6eXiiGW1oDsBhfDVq6Q7M8SP6ojPxzPIj7sP0Ov8u7rnMSrpudy2kUjH8Nke7Nra08E3kdgbf1rzquhsGMavxcKic236Y76PTTGYGoTDZJETlf/05D3ZpYsm5APKUr4WtduhoqhCHC0q2HfeMbk0hX9pwxdU+j/JmT1dUvkCssVw5P/oSwHrb/ywn0HMc2bKZo0XhcjZ3Jd1lALxQDJrduhZk/6o3c4gs+S6utmoXORYYNzJIw4R0bW5y8d3jPlkfRa4QoZoFscHXZG4S9tR1kSn3Gl13x/0iS2ahwcrkTgPnC+ADKklUTVjZoajRVYTrMmUzolbIuyGFbgXYgLevTLaOGzK4jFCV6XLTo+2+tnahuRiZWyhLMs3iR4hhVIB5NvTi0Nrdu3WipwSQL9OCKmRWZmUcPeeQL9G9DYMslb9J5gyKHTYb6qVlTop3DvOeY3zw1k7ZfnkKNWAr6vbqQL+TmCCu5j1QsRFjuEhTwruXRfUCW50jvnCaxftoaGXPUkNBDnGCVCtt59zZGgs+9A7h+LXTUg2d7ksEQHwG0oqtUJRw1Bz62QT8nUH8HfWoETOa/n+Mafr85Vt0hv537p/ywKKZMYWYGi6LHOWuWnfWVfWwKq+tA9CG4Bb1qAxEEb6mo/rXtqwL/Lj/7rpPcSklZHHGcmXXcysrFNZ1fUKh1939NuXlWplRUJl+FqlobN2RJvow7mZKubxtNxCOxxhRKc/vlidnSbbl3chKMAG9spHBrlvbocAt3Ke8T4b8uH/X7kq9/cHX/NUaoS04YnQyHD9goBXiKWMXXTlyZuW82dU9/wiVbbxdSbbHu1NwUfrxlShLpxz0i662ZgUavUwdXnRnq8G683NcWijFo9vjC2d30qtq0KCTtaubzvb67tlWbTI6PNGJnGOYL5PSnfXzWdCi/3N3nLNtZbqNrGRX/XCCRRhrDNL4hZQUagcTRYRWLrX1q62G+Ru9Dak1jaC0dZsUST2kxgdVBhJoqIHdeksDraJ3BjPErv8MXtLqyhGNhVkIaMbzXSUyjC9uJW3KcP7NXV84+lUE6tw6Us+/Wge3SDaXQJPfSf0MLmg/q96jyF1ocBvWbW0Xc5mTGsF6cVab1TQ7r5Qt9vh3Q1CbVRVuS4B6bk1Qkyp4VCYtni07ANzozt4/5NsD9OaoidAHz3xWsBqfo+d+SEnV7trnx13uXy1IvDeVMcIrRfXcx9GxfrPPxh09W2O6d8oM/FozVVitXPL22adk4fF7iFtDZYdYqvX00zReWYCQsLOK7bECzwikIpRTzlxY8CM0azs6+7Mt0qIeuR/a42JZtPPbzbEZCpORQ+KBpmyq6f+KJCmBQ3d2DJDUSRr0TQf3B0gzxg0UrfdHsw9FLLQtCq14kZ9Vbdd1uGrgM8xhh45hmO3lzVypsazxF0xS5PBpcebKQb9VJg75cbIchlD29E9hS10NOe1QomHBhirmxcY6QmFl4qabqaKi0BaWWTQtFfjOUHvVmy7bdYk4aZpHX4uL/nfwRc+jVc8KArl02geY/DvVfkYwbvnD9aTcF5zDHRoymyX7Wffs2uXWCGTJZfTYAQ58e0W5AqRykomEnJ+ptqnp6xKEVOndUP6SGs4fSrVAbeod2Zvqul7MWd6xej3KTgirHaYu3WVERsafXiSkvGCgINr6iyXjg4PwU+nu92bMu0a1JldzUSIf0yjffQDkseJLl7ljcnLQlm56WLtylyC7VdSG2eBqxxSGdpa+3NcOKRzkBNKCm24+sESpyoNuzjBdNbS6kVH1ht4BBm4VsJ0X8Paj3GExRQJETUYIcwLf0afE1QGCer/PZc7pr05dsZ2a/RkvPWHvf1SYeOh36iA63zbo0/pCcZa28v4RO1/v1VkkV9GBewGqK1Fj/7KwRozCIMLZZdOOnKopW6BteECB/CdoDiShBN03WDNm14ub3rmPhgDchSzQTlmKjPtn7LahUtLHw1BJneveS+peCqdHQlto5O0jGTU7FWn3/Ns5bPDC94W+0SRueihbtFLh2pd+/8Q/5wLYV+cjoBJ9HZ4KacvveP/ufWeVPA3GMOY/rIlsWZ/PeW1NNb3qi01lYz/rOESrbCD5aJ2m4IS3OVDYGRax+0FbqYllGvAy5f0u4P89/RdqwgtDcPZwoKhwG32RnM4uafcycsvaYuvAGGY47a1CjWcxjGxwIF+LEyzf9AbqdYo7AkLyYSUlpBCxRqet5N1kvKmcxgIqG3MCf7LVyEVZptKZp3tCzrzrcFOAclaxNAOrmHEayV5mbVaRBBWIw32+fAMzzz1DtOXnJlanHmUla+zmAWZfLJIExUzmtkwpYtCkLWUQlUrSJL+9JKJNmimaKlX2aIyJSqkLVGH1FQSmUmDKsr9T04rzDlgQFIR/ifN+KucchWk/skX0DrBOqXe3MU+hPpqPY4hlfegEvoWBHK2PpwPBK3nhrHyfb8zYBe8kouev1CJcj9QdTpdY4aM7ylKbKs2/Bh4x0mTGy71ol5JTOUNDtbEy+8eRNZcOdYadQEVQtwM4HsWt1Ur5s0BOw7r0x+f9X3KC7Xd2U0dA1dVahXuE2YO5rB6G3IJIf6DV0SQboJrORCXwirGUJe9v3O2V/SBO+b8gx6eMARqteb0l//5HFjqEpQe26ByK9zy4TYMXOsijmrq/UKWYWc6pRK0AMZhkk4obFpSz5TVVgQepNjqaOjTatHqXGteid75Gj2uivbH5eya2HYN2Ih6bynfn4EZW3ADjf2f2mpvJVaskzjSxfTthODWi8YUYeXKApDNjnF0ge767heUhFI426d0Ni5z+aNRPtGUjarG+s4y9sRCkIx7G+M+kzUynqDskOiJA7vW83vd7zhPRSQIIu1GblLLUonpGUlSXpYBUptPr7tvw8tzIjFYKH7ZSyQiQzbfQ+U+dKkuePFpvVMzcfHChooACYPTONh380HOlzdeFQ2OhWlRJXMKCVpAsm7y0QptCd3n8J+kdgvZLeM2d+l+GZ3QQHgqkhbrlB0nIaKvU4uQBsCeVSaFnF9MSUdYfSv+4QItZblVvK587LkBrCpYQZjdf1KYcAawWJty4BEo80kCvnCd6n0zF872vFieenkB2Mquvnef057pNcXXGgONxBbFUYqma9DxV5O1mKqWWfIEoJLv7/g5LLjwXgPUrtnd522v9a27ZtFlTp6/tUXUcqdtsZDNZ+/zkvdairRKV0+PVLvUTK5/a4gqtOKmTe9De80NYj7wsTGFe/qSu/SUloyeiOO260m4KBP/vrbwBvbYp4zndc5YAeQ08zkaNMnAlWxuW1RG1ckQXCmw1HuHBwxQSXNsnSx03HO6ieIFBLpJ1rNvO7tAIiaFEikI5ydYU25zqvDTVSH2yGAAxvoynOnmoFR4aRAfCt5Oi1So9RJgC7apkV5H9tzDt0fVF9gtX+GtTI8DO+nu0bJHO1zlY/QNahaUCJYvFCCfmNbKw1fPn99oNHeVwOROSTZ9oZPWzssarUw7cO1yJ4ISL3KBmNMJj886fblnr8df7wV0XALV+KC1w7dz+Ycc7Qb2XdAMvGoh5dESt4qkLmH4BqCD4/M8KfcedA0GB4lScSocpnOLqJmpSdH+Fi+gzpQ/01ZkJKDq+cAKoQokl9wJsmjP4Em8cDvM3XC37z91CT1DHy15wjUbetwS+ZM/lR+pXLHskBR6jKwYzh4lah1Ks324VveMAffTPNIOwNKMsiQMdbmghRr0Tqwim9ejU4GkMHXWslAOLge/WqocHVJ6XKbPRPEix4a/oZ1vHgQrFSW0kzcS9dhTP/Gr7IH5R+aSjlrHCj6HJg2Xkcx7sKqcL2x6mHR2TLcJEreUH0VSwFhC0ERACJka05ypmwSWylRczm0qy6ltNKn9GJ1b7xL+s1JLNWRblp9xQ6PApBhY9Jub+YEt00gWghuShH2P8XYButWLIokrYjIJ0p3QvR8u/WqfB93CsZcd5mC5xpZS1No0l9085wo7lOddTSBW0zIZoYl6PKNZTDqz7d28VOvNPHD8tZ17z1rpfzDERoO6MGb9hALPzJ6GZwn2gPb/+hvTtrECElbm7lWyTBIZTG6rZqU4/Foj+fnY1fn2OdW6quStaQF+39pLN8QHVSWaoNa19I4bDaGQ4ypKoCu0MRY15jAunkl6d9AyHHMBhw0JhrAutyb9bR94kx6i7c5GNnDReburaV6f/noe0GmsqSS4yfygeFiin73/qquUq7jQYtOobI1FKE5Q62dugITrtR7cQls50p6uSn9pGgXZ6a0J2zcbLXqSEcA2wG3tMgiO9doaaDPoD1PUoDB9YXhP/408QFix1wc5wdPV0ucJ9Vh8RCbZ/74W1dzkUIvGAKfOlQn27AeMFvvwS1DYoj4qAhpRYw3BsCRPqdWS768XVzDZ4o1gLpv9n39cWzSmKmwoxNzbhamopX1D42EqmVe+pxGd1xzij5Dz7qrrGhRuW5Nnf8URCpi4nwx7T81OH6IZUJgU0b7+BSIwvFafUDn3XR9Hiij17dXjsegIKYLhugJM1glThobKnKwOwfDU58TmrlduMpdzOE6IvWOqHWMvYbsFQSKDzHdSwq4geF+sqPmNLdBmpd4vnvbZC9flL9u12yrbgWAf3arUcTgX7IkWrESY1H1ULkXgZVObZBYc5tZNLQzlGDGioGT/3zVuoUlU32XnjSRxjbCQe8pb7v2YbE/fKeP05Vn864LTVPn3aWrzmfRlXXG0kVEy+2AW32gIw8gMCmMG3+s9I5yXq+HB6gW4M0qCtKMmoBVuZddw1kJynxjfTZQnTNSsjOlFOtisH8qyEEJg7GSB6Q82O4Y7cLQk6706EHJJTj43D7GJstLz81GT1tH9ebnCTFLoLriSFV8Bj8EsuS3qwGcwbA33O2m1iYls3uFEYtKKPLF0U0uj5ztLzXDvfJlEkSpBbUz+yv7MB9irmLFBualUhkMaVnVqE3XpJCKfF1pYOphTR5B2FOBwNNVk6AwYIUPQYwjuKRTy9PVpvlwkKb5nNcqOkkzNyg7lP2cBWKi6VDgQ92EhYfKxbMfNNniDwFgsvn8KhOCJZ+lOeVxbqROVv4Y4tfyKXuNdElq7JhxOE42zMl43pipzrjc5p92ZbYvCmpEg8J0cCEnLRIi80ZNxn3kftT170pjlo89G6jkgptbSYsil9/Vke2CBVDRvqkV334SBXWRaYMUFSeq2eGtOLwRccoQ5lTucPza8QSddU39x+pRl06kEZSPilKMZLG+oZGiF5VqHRZHIvCUwWcDdXvmpLhZjGEX/bCmiReuF1R2kxNa7go0dRiQK11BsN0ivnzZBEKznmvbPTu1k+rZ0h76GxuE+nkNI8CQI0qAN0ayub4CXhXBUEeYrzc1wKalSKlioJZTvFZjNFCD/AHeo/FVAMw1fCVHMOTCNdSA0Ag+S+Ojm0FlbNz3qq3MjT3PgzP/CdYhkmG+2aSzVY5LEfazKpwuPaSI1rRqO9zig9B27QI6GN5N0P51amDtOcltKC2IooULtFwUckXwacNBS+RyFkFWgSLk3Otb44XtrF92wJikGAzeZxmLiI7C3PgNx0HUKEYG6ud3nL0vTVopSH72aLTK2KLCJTtrM0Da8GPrWnE/YWpV6b2hPD7TBnt8cIW+Dx+vMK4HwM3u0ypX0cpp2PpCPbelGoIc2E7IYcznMKqW+LVgH5gAvt3kVodvnKGLuv0LbZgoGKHC0m/+YzCaZRZiB01CalFIQ8Etmcwi+nr/nlofjZFjU/mgDLdvGJIHxhppA/qW2iScmEiJ+C5b8he0JbCkYbvmWOdcUkQKsB2LzN1GG2ZhB0OOfzh7Z709tZUrzUlLPwKBWPT4FHm1oChm0YsAE4SYFBZcQOguGZKCTdp7FJVkL9jVSjSnyiUIE+XfXmyFxbw0hp13vJuCbH9QkfkCwQardcR7/Wixv3yGjHMBs52AxZozOd2VBXS9Tq9d6VfBQkbSDUC2AggalOlTQd0LCXZQcRD8orGNH0xCWec4asz2rsPdCx+flit/Jn7n98i0fSaKlNsWSP/YqkgBh8bst43uLWfcUN8k0/xJCC5lBnIU0Z+XWzGJRrP3lFXqgqpu7TzkrZBFQWiaT4yMAsuw+EwBRFuYGpwWNfG5VkSd9OdK5aXwBgJRolA4WGJD2KJ0TjhqxeJcfzF9JaUWkdjzZeeXm2tWX2LpzTDXikY34iWoPDTBs+QZmIDXVB9948PkTLFgY/uhHmGFY7Q8uVKwTMKwzw3ddob0HxlMGpZK/0a4sStz9xEFlljUTbkMLo7BglY/pNTn+stc0WtUThAu/+SRC172YK8fo15msENen/NW3xMUVAJ8JZach0USaT3l/CoEire5N0OMjw8l6Eq8y6PTOzVW3+WFUqXn3IMM+Kt7zOrbsRYKYP++WJctpJ/kpW6vm73rkQKH4KE4XxY4fWw0FmjwbX1dFz3qoXe+7QEzeZycyyjTMRQn+HyQSgCkRhRWGJJtjpnJIRAXIsL0sOX3KBU81LLAPE8WjN9RdOp5FuPtZByrzAZrSz3R6//7ZoYl6/iOdhAhlNycHXqS+NrsA9XOoCyDVYZ4jcCSjdlxJlJCzZB8XbUv99SQnCYeoXb9fpDz1BEPPonyc2bybQXDj31qaZcD1o2qeXXTSFgq44zD0lZfHyFbnDfN4jcl53IFJCuPORI4b0d9jCYAF9YiTQ8ke73imMGQTOsnqK7Hzr0JCWqqI+BfjTa04uflx1bbeX7BJdv4VX8BfKlSvL5niQTvy8brHZ+arokiF9gOZZ+I3L917x+ACKotOCqstTsDzAkalFUGruoN+RW6ZC50PeWS+uXqXCwBh9xEAkW3raLDt2jAzAFnB3+35jD9Qxgii8FNbz+qXmYx0xHyDDwC73ZG03nwKIYVjzvDpPMcogNqUU6lF6POCr5njLQADi9aTlXjbbf+TGW0jQedq3JF9m7HYMEQOp3OwU2+XsJi8i1YvwJdRwnVF9nBXoF37Y9G/XR9Xt9/JOzI93v5oLZIoMfdxbpbCsTSjynybe11Jfa8+G40HLOEVWZeuUKpEMDoOzZhQrX3mWV763Viu5vB4IY0Ep5uLOa/ICmLwNhGp+LNRJtlGhzMLbtVyrc2/IoCB+MyDSZkeIV/Y8LMiqyl3Rc12iiirmKlHpdLJbFNc29F+daGNWR/jyRlBf4aIIC+JjjEN8NNxah6l+hh2N3WooOwTVgZhvaaU5bIEqV1rYyWfTSKuEfFD0jnxlRI9boJMdsoAOS1/WUvGvozHYK4ktPskpUAzB38RLdOFYOrYc7AyQ6z2FTFfPcQe9AHIytOPo8S0avihmkNl2J4PcKavOU9CmYW2u6zAo+oAqU/MCcHYg+npWpwdd20KDoJR8PlNi8DZPNsNDMAD51T1nsPRHDDMjZjbX0ue1JCP9jaxesEF5VJkvL6K0RKUdbtk+YNXX4d0Uy68YN3uJkIUO9kQi5aZ8JZUQeoXh3TSE3bUU1Q7crtOY29pPZAq3qIuHGhYuqK4YNyTVXDp4NW6odk9UwkgBDOHucMh1ci8q7y2z/yDD0moRu7rzNs9V/PkzV7iinJX6twVj9kS417kZGpV8IMeQTGJtyJxxeiYshTjN5cTZBS1BEyDLNaZ23+dZ7NjwUqwr3Cy+ul2oKF2IvjTSubdNUp1PkcGr1NC1h5Iq6jjbBMa8qctycqrGty5fSsqNC6i6x++6/bjGzWx1q52/w649dNYSlpXKLtvHMwJquoMmavNjunMxYNwkX+NpukFOxk1s9xzyGY3C4fayTzM1TwJ05g9GUQnl/YDGDLW5XwbRiIaWedtQF8o9UdJggDQgX2kQaiCk4hxM6fTAetKAHSoj16wpfKrhX8thzGYjpNrtGcPz+WwLWxe4iZkFhzWXYZWl4TvvGZWY3IRq/KegfzBiCDWPZvG3NB5F8wfRMLviJpdclzcYnFofGDpHkpFNNT+Cocd9ga/UWjkjIP+xCodAe7JpQH3xSCkyM9OthZPBMhlQcgqlMS5TBtTmJKxjddGmNKi5OTedJcv/JVPcmFDsOs+FaEK0rAEC6A7JOH2n8S5foXYCrqkT0mLuw+uaRbZ9ixp2PVPSnLrrWwLAzmEFUVj5iozn86WJGOGjVvPEiGPmRDiusQl5buJadaPVYZ4dkIowAqZLriqu2/HynRQynHRqfHegofzbt37q/pZ/w8Jg7ZP6hhosQHSKgRCk1GjL8oSb6fbIOk8qldrKr3ey45J+w98HBUDAHXyDWlKG4T6pe7UqPe7FA1bqx/0bIomT1QfUiX2V+WVD+n3mO8xdWOG2eIUOXVexCEc6IniUMMJcs0jcJ4GAFgJS5qPHYLdvyR8yC3hUs8r7qBiyvY8ngokbdEelZBGW93hRxX10rVbpdcNFjKMuwPs+M2avBx1c/7XctyF48MhxbpNakFz6JbkgKvqU9g2hvus22w/xZXGy/KRhGlOyY2bWYuiuFmNtC11Kp88w917dKHRPKGFS2PLpUIxDe+wMOCQ4Eke52wv2VDcYkHp2zZm9TM/Y74xLqfOs7FvGIKzaugJuLaSTDWEW2W4EKz1XZF+ClZJJlGi6Kp1NolSa2rWn400QriMouoD90C0Jx2NMjShYDo4UFAJV318fSnWsojEosc9puZbQ1fUCQN+lLWnj6hOCgs6B3vSVd4RuLqrD3L8LAN9SCkE1nQPxxI7v26y2maSOj6sLluiZEARrSAEi3vf2yjZp6yIffPvc1mnxfcYt4NNQFWJB6DtZgiao3O2z5v3f4E6eH3dBbu37Z8ExfxhKOggovO+kA/p3gmdYInZfXbSgJZFJ9/Dt/v27JtBmgvmhvXkW16pR2BGV/53ZYEKai8G8UDZi03M7T+ym2aD58aGBOFMXAnfswK7vmirXm1aZm302rI5tLeXLPvnEMvPeAqyqHQCMLGhfqBJJa9JU61K3cUFQI66J3nGn0q4SKZ8HIzB3iiGRlcti2UCK31NEW+088ZI2JBFXb2vZ2W4zraqvOmWfpb9epi4We8XdxnSicctUVbgmJFxq2CJTndcT1EqrsWgBMQnpVIMmsBD8JgrLIfSOvMUvnAOqvI0mw1xSb1kMoKQSiVuA7QUyPGplrkqPhPHhXDFANiQ1kjJmoprg1zP6KBN3FI+nN1I/udyuTkxlpddh1I6QLfl1sDiNc/P8kTFoPL1dyhFi7oevigrRM/JGqEKnCbjjXhpaX8ChpUNHekZqNFNTmXvNJDyqXydKcCDKkiEIzRpya1JPWTmyxcUy+j8ggoPkGsDfFSroX9gfedxfqhwkFSAgDAEaNltjRkWf2elRlnAkwd7ChZCWMaOcbuZyOcx5Yd99hg5eiYivdLBEIWIpNr/rGuQw8EsoMOcDmbSCsmZer/o9ZVBpw/cpWR0okn6+hJytnA/UQct0pUMXfdBevvvEl34DMvp4woFyD0nJXrnx2k3niAZuof7cYfOA2mgPZEXz7K4MwXBJhu2x/tAsfnlc9SwINvXwVHORjYAKzSmlmF6+tSZmqWJ2FVLiJu24GLEtyhzK0dwKNiXnQQmTCdc3YnGOfGLOUtMmorrowe19j4EUMDyPMsAXk+7+2yFRBvKSdVBDl0E1fVx0dYF5zevGZ0c0s6MpIz/VXUUdK90vtXE0SZ2JBjV2FDnrI0cVbz5o5jgDrFnfiQj/cy+1loBxDQr7CClv3Ye3CspHUAv2b25xdEMfGpBtz+VSnl3d7OhQuzmd/S88kgTX5VUAqilJtA0JgXgGQRhU9hhoK1mPzEjdprtUX1iPjcVHKWtuKMj79e05i/xVvcETluuTX624nBv8DsnrFXRQvwSq72K8Umi0T0kkt6uhRS5G9hoxif1hJHvvBsRcJLx1wfD0/g4jRadm8RcjuysglHuAa1CjZjulWsw+QTinZlpKy3w+sD2iMeO+bMwEuXM2LuQU85U5SyOGi+5ZHTviZLuNmWS4yc2g20m8aNpCY0CXGZD6544r79BJobecCwwPzZNbaM9FAsxd8oFBF4o3oN7bD8k+bOuqOnzjQieLqnGxDbxkkg8wiRFXVaPhNb2hYLMM87ddOrCtccwpBVY5tV60o6w9Wrspr4wswHPsUTH0LcjypOdq3YruIOKL/SLw68Uq12QrH1i39Z+m35rZpgE+yICgNANBF4gKZqwxXE5eUCoTNJmgIx8m1v46rwpxDBv3s6+M9aJHcWpO0HtifxYpMv87orqBMCWhFYpCGWPlGd9NuulC6m31SuoKBpUHNSMb8pPkqejfNVTQ3Z2yACrd+WY4K7oG7OQdmKUMLXT88FWNxelU7J4PaId+u8MhqCIQya2DIsyL4iq+nGf3gekvDjuQ0vmJpRZmzLuGUPizmcOndr3mzkl2uDFN6HVsfV7X7W13ZpPjgK4IL88TQyoEdReI8ze1Xg/ZnC2PQMDMFZScigrumOE3ytFRPoRP7SG58BbfRU2Cg86h9Vfmh/jeJ1cUk3VJiQ1EyLfhStGobG3uTinBllW6SpIpGJoTMbORHiAT/wmh4BQxaqK8Qg1ZXAC6cG5Qz+5VLaRVgG4MbiIJTyktQLVblXP1BYd0RYp4rJ1HaZfhFF08f0hs8QF8orKaR6BHzx/8mimrdDk3YB4fenUTCpy/mbaoEUvZYUSN71vBpaiiKqKiwQBanRKtiy6sSw82ojfGUH3jnZUpMbYsnWcJvG/r2AKa93VFxQgaeKweGVFci4xcm4YOM2hiBXXsAzb9py5Y4QoYBJN8oRB0y3CgB3BR3NDni3J4HoszT5XwoT1aPhYeKImR8YBXoR1l9RkoRN7O3Y8mc85S/XG6lC5oQaeLeGJW+Isw7Z23n1mWWYb/yVS+Gm1Td6F/zVWh4IegqBoOhPeuFJBct3pX671q+g5Oxo01OUe6f3Rn1XgSJtK41cEg7NTlOI+51/SOb8AxLFhR96TDbtrsQslIECC5MCx8aC6zvJPZWP/YnY9ALoCezu+jlM9/c5sujQOPYeZy2UlY+OHqe7bmtj1wJ1TIkJ88JXrgnvs1Umeb8B/jRb0BapqLl+M5KwnrFvVbXl/oOtjR3Vb1Thj8s2NkY5CS8HEAdBW22OTzg7TM5WAp7SCGpJx59RI1bZsIk8h0gZy7vA45sUwhtj5Fyg/LSz2hxbSQpugor0we3KWfQjcBRdUPkTtvM7T24AivBdyQAbAiDgB5Qfx3KTxhdKZvz1uoJsE5BqAQPwnT8w7FLtU/8uXb4nyMOsYCSvsLnaiIlEknCp4uD2BIizpXo5t7ipzt/k5bSdM9cc5luwKMcZn8nKwiGV56cIx5h1P+snMpQQm/pIhkcP/fnf+w3nfI6sfc8zkExNAXXW/vPtOfI99sWpOEM3dyVOclEFOtjw+iqiK30evxMNz9HKm+Tn7NbmksoJPcTGnM8kBkv5jZmy3rVxFUq5HJhvKGIuvvMQVddB+t8MGaXdqFDx5kDyIKzOdD3gWUz/TuE3CRrSkaE7n0t2obRXB8eM6ZO1koZVBC4Wqo/ubiB+geM4trgx/4I+vRSPKvmP+xN/7UMNtfHsCWU2SXb1xOrfKJWDxCTdlA+RGNG6dSV0nDNCss+w64CvB8ubSRh1R5/KpOzFYUu+rs37+d+VSy+0qWtQZgxD8ZcXOjWTxOT1Rt4qWEeaNb1nRXMwPS+thbFyRNjSadCTsXQzCT479A39m0ygGSaQ378z43tDfSje7IjGH593FQLIlq9e6CYx53P0lFnkUMu5h6SmrAmxyy/oCXmZTl7K6UzRFSpU+j2/vbI4TXUgkQj0pNdrhbR8TiPB7vyCoCrITpNuzUAuaAQXQSkfOJCGSns4bsg2bzmvBUlEG+nwSIesWT3LSeu7bHMw2VXgkjrIBjZmYDm163URGXYQld2YZn6bwZihui6D8FGUluM/dWv9w9VunRcfP4dp3mtxAzOWpIm5mnP0QKDXaN+Hz9W96RfPQEptcaovlesUMA2HRP7j4h4FEOFE89EIYiR+Mp0S4fqIjW1l4655cpfU0WWp75/Hh/lhVhfmNcat6IvW7eIWiEwg/MZQ03fUnxlsXV+iNKjMYBsnitudWqL5hCPQtEImD/hsiV7uNP2RuuTFTE3P6aXIpmCkv9agcuZlBkZxBfyce+YWUnqwb+qmWIoGf+pQU8vX+K4K5m40a5ymsL6RH4ld0kGRFj3KZHMx0vNadIVD+zWhvg42HMmBapyz2AKJ9/z1JHzFjMU5OzUKuA6+jXDAaIEKG6Fq61/HEFUQ+VbBeyaofUjkLCyqN8olb8r9ApoWXNjXuyT4WJLfQSpzKhe4n9vkr7rYLgHIxcrrc+hmXICA7wt3VavppXI61AetG6XwHH4013jQnarvwFNbntPEmqmM8dHsrD7quTatBPMY7+9OyC96z08xroQIIUhAlGAomfvPmG4amaKuW9v9xSz5512UVFKAUc03sNZQIoESJc02b0qBDIsS60KlVtV3En6iDy0EB5Rd5iB903K74x15yUuRQSZayLuDw1do6u/1BbBs3NxXAeVf9aHFpC2RShYcYCYKkJnaQiLqxUZdiZ1ddxKyCEKtaqQf0r9zSSQhjBvWQpVkj5R1dufzL9ERLwV0rHGOk+z1VcBYvWZbUkpE9H8h9YxGwikNHveqeEJznoAPcVLibKV9hUWM1MI+JFQzU7tK8YRLQFc8tQfCF4H+YNWQbhJV2C8DJOd7s6hlVGB3JGCFC2xNSKwOqs0V7eruaFyICxdkD5zf8vvYA7/xl+Ldv7dFw14sSw5bC8CMOSTsvDmooj3/1LkURJGofZUiglmmnHX5Q08ySIZlHHB1pV+JMGz8KR91Yatws5DaXRbFVnU1JS/b8+5qAymtkqPTtcjSY5F0ofkZrP5+9lBdy2InJwUVoAcn50TE/KfaNL+xCPx/QZDq83dQ2EQcl0ZgQYh/+OI1ex91Is9E7Hvjo6/HsB/HPkzpKjcZPBYNQ8t/Ho6qUbTV0CXiXbTlVHXaW4EyYJnqCKIy2iuiVYGsg1LLU1ZKj6ASY+vmi1hR6hqsdEn9L7HcvwKXOPdQulFv4YpK4yfGdce6wsto7U6+zrdjUNvZOvuYoc2j2jfIHwXzGHVk4Dk4vTsW+6+hK/sOKp+kfCBPXyChjk6F/W9AkkziYgYznMeFlGARt6I965TGjYB9Q3AWqxIOvGuCrNOD5zhuhyPWVNw7w8UiR3Z1XbPT/Fgh7698/ZeTCuI/LI1IF/jqIUXTw3WEFjUK7EKcsU024N9m8DVqBZNpaF+OYJyu5a5fZCPhgT1dZt9m4NLZejYZlrrIfXvLJBhlUFBx3gpFKe8I9n2MyZ6ReSv0DxsNZjol0CbZknTlZbwpv89JKneAdCj+JeWfX1PLCFZ+si7favzt8nl6LSnhr8mIKb9Fvtupthb52uaLhcTYhGX958jVXX8u4vBUq8S+ny+Zn/8P9AOqc4QlM2+wuozpbtqfccNBl3MrxTNHkgRmuJqaOEhnn2FOee8dvAmuYScKmCz1uXNgwT+iSEsZ0n9Tm9d8nSt2y1xQa2G6cJBUZzDrzEkLpqey2ygo7OqQpCAuvmYP5DsmPfBmwbhaStgG6GeYOlaJtT0S1abFIJ1BYqt2IsqDOmXWT/TTOiX2FUnJQjegoVDBREkmlyPIfAbuTGWGSfH3wrgUzyVRhjBhfybBdxau5sQ2tHJCIiHHLWpOmsSf45293oBF2S8TKo9JQNX/NlV/E5WrDxjSOMpLtQaBhbcdABX2PC6k+NghkXrKzUMiaaOrdqK5COfyOduqIqR/smhPtGaxvhcM1SOKc/r2ESg+4JU0uEkLLErKtyDcpM7r7ly3p+TgxHQ6MSgbpS1QtKpI5q9rr02vkSrOuBFW1HkTA1PvW1r8kJEmqTplkrIpPZHaP94KD/uX7MUH6dV1JItEZLDmjwVc8hIcxtk3zJWntlEiQ/zs1lUu75UbfOxACMHKjO8R/u3JP+Cg/xlLWRkWru9tArEwJgc8ionBpSzpIVXn60djeuMxoUtvC6bkhRgSMpf79wGpoLbET4edMsoSDmab5Ks13ZzG1Lkv1UWdJ5vw7jptwMmEJR1b2a+UXT+a5bZPlZcpeqWpxr6EBFYVNhZZrI1PL6frdLHnYf/F+cAiaRWHY1aTd8Zki61rL8LSPZhQXFFIZFKTrUk3S1nDsWLK53t34/UxZ81S4gDLYXFb5Oo5KoKpZP5/7NwtHtLWw92FE4/f9uTdLtLGTYJBlLsGIDclRqH7Xr9GeuYShr6ZKJ7/H48GovwI48z4hsvOMfyqBRos/SDp+qafNlVs2Re5TdrnBDu+3vhVW9T/1Pn6UyWmq8H2Xo2X1HYjhrJ4L6BUNewb0oVNvnsUFdH3LRohd+PnVdYjVfySNlzJxGgzHJ2HHjD/9gWPlcXVjPhzifXh4WYBamesv4c/77SZfE16R0Yqkw2nw/udSBswgHo3qCQnLWI1Zc8cv8TtklW9YNy8S4Q2ocLaC5Fh67Ayxmrp6tPQmqJWzYKs+7tzD7VmOh/nINuOeFBqWKwGiblJKg7+fOvGtitJGctXmnRmVAaJ3x5Zgtt337NbVDbRGQBOjVBi7CiCgUmaOlJtm10uITbBpV/mDO1tfd3+9CYRvue7Xjvy2oIiiQaYSj5SxMpa+mew1UfJhPpZzy1MvsMnh2ADybew37eV7jTXggGQSvqlK9WlCvcQGsU+ZU8mpMIWnPlag4BDYiKylRNd2VhGaxaFvWkzrTbc4bQoVp6sV52Jb6A24Vp/ve8mTkRN+Kx4qDuc/g8ZWKrKhvCB3Bnn3BdiDpIqf7956CrI12tKKMF9jt+JaAxN5MnbVIPAqCo1EgRq6sZYAKxRxt66P7Lvt+O4Cs6jiCw/LJxIsmqilxEMMPTNVjziOhjj6wo8SF3qW6LKcxrOBKn6wpkL7r5fY4oJDqQm5rs/MU0rSwZzIvAkpmRrxn4FFxMmSNe6FJfO0Ru5Q24def6lTBt3mA3ItMuJymyTnX+fWO1NiA3e3EnE0Ugzr84HJjAkEHzIRFGmBe5DWswPzbJCVliUi9FSkczp6A+IG6PJYkR8eo67Aa+aEpNfy2F0f5u2Q3qLOJwcsKofbSTrLyF5dQkuGLbm8le0OtAZnKR02FMwED19NwLhZW6lqLqKDMMycwhxJG9lW+Nas79Xrg1KV53r3nB12Z+7LUHXetMJy0ztqw74ENKZ4VIccm++1oxZaMPlrlRQNIy/HBDlwaSOabkRHN27lS3aVrlfKUJESf1OSWfSJ4u4+o6dxWLVl7/2u/uCXKIf1Nrd8U7AUASvt2s1BZ1IFCU66S/R8TSyqSEZbkF6MDYCj+tNoJQXodnTfgsbDIX+3fDqCQjrd91C8dQLxzXvPRXDlf/Y8JIqFb4wFJibsd282ngneZzouVGSec34104VaRsjT+cTVeEu3d2ImbCzVUVAz2umxJPesozyPaMBwyqqc4eSG5SmyhUkRbaHR6untME6uGco+t0bQ4GvAezrFz1HEwXvSoydURmaXwx4ashoO8LxisDg58RwTbIktcTLNEN6mnwcxqqOlVbwtiuGS18ARsDSuSAB5obObMLIyYGOvnjyXXrHJYZILDD19GjT9n9Kr9OEJAX+kyva9y5zPu1o6YBtX89NqBInRabgKd/GnWOhehdl5Aet1Xaw1hngLb11PyNYQJJaz+XSt2GUaTnvNOvnw6dprQiLq9aapwnLsPsD+ui1dBU3T0xZYnyzoP0j20+ywhctaze25O4xk96FxHWkNWN8K18AHt1oDNcALfGc1G94u/x2mhd+dPHp6aSz/iN9UPKBkDMAgiaJ4ApXnlBXDuRd3kDcGnptyI7hj+hmA+ivVYTEHrK9WvVXSm0HzR1fMCZ1MHFapQQbvi0MiD4rlg2buOpBstVBtYcYdZoLXJqNytsgnYrYE7Hcg/6tkJM6duGeZgq79MjGBuIFIEmWm7ewKMt2tXkm+hSsrqbeKdZGwl+pjkjUtfpp4Q2pLdDu+sGFCqywgjZOhikFr7U5J8TiyzGrZqe7wrOOoa6XEy9cJ99NChT0p5x486QtBfSag92jqKsiXvRi5K1oLqA5gPz25PXN7oMlJoYJLe3pcVFj4iGgv2PbtyCLZ8yQeQhX7lnN7d4kLVkSEPdi+xRsnJUJQUPghkbDIU+CrgOspGoDqY6nKzkkIB2jdV9Ly4IYjiq5O+ln7eOloulBz0UwV3VQgL/CZJUPtx7Py6hFXaWnTKbd6UQzpFR0a06/p+qKuI9jesbj2nEysXPq4ktGeA2B6/bsKIo3MmRUmRa0qItmWqpJgt258erf0CFKMOZmpWPBglyyLn/YZ4rfyJ5oG5KlAz0nIjKsGo/s7DZu7bdr5Z1TyF6IZOeK/6/lwAIRfApTNB1oXi+ZEoNy1871D1Vir7LqKevzFN6LhLy1E9qbJ5a/BEjy/vx7FWQIflu3O45h0wPNAiCFF9P7zMqv6JQHv1Y45q3VzY7Qzl27POwty8NThEcdE+TGBRORWCKO84r+cvWEqvwqfdkNmToepkmDvqmg5qtwgDnoEaoXoM6XjBl+TV6NyHygH+HRKx7phFkteoakoVTJd30eNRbQ0ufcMLgns13z1wunT2sz/MqTn6VZRXRCLsaciKCeDTYJFcTixLVJyNpfJKC80mwNGjsNtXSfm6e9uOIYaXAqjuWxVcSKsADXNXkp7eSBaTkPSKIFTIrQoNbVXYNbZxPS/0Ty6wHz1n0xd9/UPNB3NubMJmMl21sqP9m3gO2TUb6+oAiiTbWBqvSFiGNU5WmBV4kq1mvty/c2K5mlOD6VQa5AVBrwYsE+R8LbynhYY+yBsUPbWpI6KJgS8lsjg861zb8uDkR5vge4PWxZVWHQeX+SkuT1mzsOqkh7jJsma6sNmTtpq73VouxQXJs5MJa1GmoScPotCHHUJ55aUCsPVN+67AlwvyvfKetl/B55mbCrUVXX2qchbDZa9TY7pmatXDB/EQhk+yb0+m5oRaUVEmvxgHbYPmIJMPp3DAHGMuMZQR2LAjV+KzBGsnzOTUxM1LKGwOZaYPFVku6exXeYPv27Nrutf1H2vyA3kJpWPhEplQ+UIsn9VGNmgIUCfRPXBDNGP8WfXK/v5WStejVOZHhflVDmef72XP3wIzPyXQvi4ZUZCUAkEpSKdM2ulb52Xxdrh6RcygEOhs6N/+rLErML2e/E0VaEl1L6AIyfmRu/UGQewbp/ZYZlAUKqYQUtG8c4RIWEJfKOeuNZWZd3zFcUumSy5Jz4XhbUlqix8qkYuWn0hmWr0CedfacCdrxD9T/YZlnFIhY9EwIISGjmVWXlku7mevvhJVduQE9XllRF/OFznSU9604lPbaNf+p1pUF+CVZSxJNm3TizzwiFY21M3sFdyS2nqHTUPrimRG6FYuNkW7e1/mdXy4rFzvxJie72k/Ff9jGU5F0P0IN+nHWpiv1tWBkliZIUjyz52l7U5ZIfsGpgkR8gJYFBuHvlWy1nsP95phzvDitgQr0irItF9pnHs8BPqUiOGM405wNfu9hmv+bQOx67y/6UD34NjZTdZCuJUdPeXnzQKrfKjVs7KV214p/5uoqlZW+zYzxxpTBy3TqdUT/v7YZGa1ltGnOzOoVZ9X6OyI6TjGtVi9PmzwQ82j2kQs617JFKL7WGUwnK0yLQ9RlR+CLO4lohiDXYaooXfyP55j+/fNLHmQ7zWVrcAOSXcJncGeK2q3Jrp0RR1TYqGa4wtigfxgzhBTjC1LDU+FozhVQ0f6UKZPC8yEy6eSf+N5DF8dJJP9FG5/6UZqcQjEv1e8T2GGK139ChS2Joys+tpYowmpA8snUO6k4aMVQvJcLcBWp7aQOC/uXkI/a2BLlmDqosEcc4+db3NrGy0vvRfqLQ/JKjbsjUb1itzz7Js0jLcugO3p8y/Fh4T0uqEuRIMutktQJoUxNS2DEIGmLT/BS0dBdU7pZy/aK6Z1gG0l+FZ1SqmcIhPjWkZV8bYCOhym7uvbplgIKBKncHNsjFTMF6abko9dhyUzm6tN6M1+4Lq+8RtSnznQxhqRNUA7JZbsxJOvUhbR4NhaEVYdgfCAMlLQVm02xzt3Tf5q9ojfW3Vd+ba+L4S4JEFJL/ogDdmt7Ulq1IX2rLO3Rg12gXSb5KUByKaLWAJsE+hucSGCCy8luAjxyLFlOf1Y63l2Hjpcu2cnd0aUrpndjjDKIcy6zveMdVWscsp2lu09r4OgDXhp10lDElpyoDtdSSqky2R5sHki+trWJ+tKR22pvKR+/kFZtdrDP68cBZfjkSsHz3iVv0dYhMUBcmikd2+NUNm/bK25uKC1MqCRnFaY6VOBooJh2cpI6rd01MpwHBmVRoGwqHKJhcn1gzhey1+s5sxpYnvAZJIowOaR3LS1s6mmkbtWwCiWomx+WUQ5dNQyY60zlFleIkaeWeSGRGohrDsiuJEJ2NIWdHVoCUhAx83AnpQOfhYKiMJZodyTFKvrpRMh8bkKc/LtoXwuiwZU0Riy80EtsTugTvl/v4X/nSIakjHfSw2gIuRsHDSFzDysiLocyQ7TAsYGuP9lfSOSJFIKMn+e79mkidbR2ccSIydjB4GpQGYsqKElZLK/ORODKA2uXPtUd/QkuVSRp4PqswyfkfPRFk1QsCPwr56S8KF+051KeSji0FRwvBfAifSCxepS8zsWyxQQip3E3RnV2wqN2ZyNAU0dce1O10qUj009gRRRAcx8vi5wsOw9Of569hTFzaYoEKP5JcarDzFUgBoIoyIt+deWovwlh0VmHCxelsPfPblaqqX6KF74hzlIM8rS1TUgnBybHuJf+b9EnrDkn1OCLVvtVoF89DuSqQiq0evumbkTGM4jSpjSpX0HmfSjDvSdFwAfWEifGg48TtdZJBHo3u7q0Gwl6iDvSxRgD73v77vqnz3P4e6XY1frn96bzMy5DcGOKQt4qTiUQikJSc4p9GgSxY6vvgBSUIKqoaONop5FDFt0xGTMKGsKPU8/tU2Om9d9kZDnbC7vsv3PGPffY7bqs9VFbqW3txTu6FR2b8Pv2bwuNsCVDnaxiSdm3WExX7xELrt+fHn2oXGibkug0FVJ2pOYeaod84z86/hUeYdmeuxYTeHObJY7hFFsHMPJh7J0yF4wqz26dqBxY5f3JHGyaL3IuXtWI+73zf8q7G419aDi7O4Xt2k8jcUZXXsXfC6W7P/QbuO/BW7mw7My0MtBljNgcFFWU2hTJQXm3uBOnZMID004bc+r/DzBf5VRaR73OUjNrcw2ZSslcV4GSPGFnkeWKatbHTHM6qhH7tIdRqV9uj8bOday7rkAmCO6kdFmWadiUO2AwYKoVK6XFpp87SDtghRBv2XsqXTqbP7qFNtiM8n1bkNUWv17WzGqLCI0PMKBaT759eMv/5l/P6ie/k8mkIZC3H/mf6iMhuvaHvnL2VSKS/mIHlfS72RL2TA3iqqnDOxncguFYsFgxZthDkQYlrTvGKMqKIi3pdjV3KLGOG+B2vGX2dKrZlkiaoNImOFojpEft9LzvXN3YNp4S6qBRrxgeRqaGg4UJBkWbtN1NqaXkyVhpOADdcx6V9KCV+yit/K5IqpePgve1ZGgGRlyFTW8hWR3E07xtI0q7MxSpCC8H2kfcQpuyqvF3Md3QNiZwu4u7kj9vUhV3Z8Rd66kqcZGyluVxzKU6SFfA+dKSkXGj+kEy4eYiG7XkiDJfnYrM6HXjRUlrZke4qDX1dlNMv59M3/i1aYx3Czc+84jyHxOFmQHHUZdmzNnd4m5ku8/CPPqJxik+q0BpugZ1fZLWQVs8pctY3e0ia6KYQn0IGWn/vLhQYCXWeysSZ7vLN3bOpYradUciO126Oig897xWWrcB1Hp6OY/FQ77VLVTHs8lTXblkB6B2yI5wAxzEvFcsRCZ2z3JaR9Nza7F116molcEbkvOemAhmPp+/4dgfOSR6zgl/SQY8LoRc0+dmN+lg0zYkXpzIjzcBEXlyaEB2A3w9MZO6abYcPKaEFDu/HzGYa6oP9HSzlIxF7m0vSSkBtN9KXoPW39uxcZVz5v39U4IlGjJc1TyHKqy9opOZt9PmOau8zcainaTUsqmSgWQI220eU83lVUcBxtGmt2178tUSNxkYErUepH4EgJxI6BlPW2aTmXEUmcJYHl8iXYItMzAo5BgtrA7S+zGrr3KNhlPcQE6E1QD25BO0ib3d86ichy1q8xH4geD8xAozaKuj4J5aVSPhXkITihPRxYlRrf3RBl7SUKFYtTKYIaM0uIj1VK6zvmYDF+8Api6jjKRMc74I9+b3BVfpkk/fFN7jy4VaVFIu5bHOpsS6VJFg0be3Zf9e543JEpltz5TVM44wlMKiZYqzmHdBdM2lhcf2zMjkNBNB6OkBLWM6oRPcNG2AExdvtgoMJYNQXhsew7PTq2/hsTOjkWDayhDBjq0i6l91kFIPeUriiwRNuJ/GpD7cDbDgHLNVkmSdkHTe9BRE40oQ+G4+xeijOsb3pJoG09Tpmcsda2Oj+iWwc7vnCJ5KfmykmjcjxqMV85adq3UZZK266HauftUdtXOKeovXaTyvGyPXMPsJDNb4QxR00smlih9XfnumFvm+nf7ZFV2cZILpkuDRjGWKCnRHZjudvRAWUOY1YXf0MBVqsDVM2q9QLbAnPpf10WmBIFhZcF6psqb8rFsOvK+smkqy+D3v/xhO3k3ew+Bep9WI+kUy0MO7ZugBLvkWHKBw0wZze7b6LVpQ+DQ0yT1LiCzeqBkoftRdo3cJrpaEkPs2ywJJKr2vw/cvjqwlovyFYvk2YNShfedpTq3GqztEkCcZ21HCj1ldYNDDdY4eqqyOrOXw3hEZatoh4TMEwp0eYJu60lnOmGetzOjW6tFuGRBcQw55bdEOq4y89pckV5vJkDR0yT1XpHZPQnK5Q9N/a4JLeKhkX0wdLGmomUZYV57iLPmvQWt7X/3iv1NalXZTANRwSuWYj3zN3cZtz4pf40t0FozwZezFa95zsvHVzlp4fY/0+TeKdN5OJYH48h8VEK2qJj835l+pymFliUrwjcSb/s8YtVbCNdQAyjAb9pByNAP7mlHx4blXHcpKihFIcfzj64SC+/TR78+2sW0zjcPTn4WVWJycmX0wDHt4eU8i4gbqqftTYKT1pxMVe5B9DwHGSZ614MPOkZJX3bRJ4pklfvt37/175zBHACXNf3N9UjdHbjGeKZ/Sjag6xLQFOYFHUR3lP1NYNZQ66HCkUTnqnxWB71CzDsf6dYYwaUJ4dA/HrXI2qqZtjxS2p4Aakmy7O8Y8eP3o1tacrT/6jbLJWAri9C2tLF8AxMXsFOfSDM9BcWCCVvooZ7MzYKw/H6WhWJiSfTDedB3ipOgoHS62fuNAJLHVmjLL7YElJhWJHcYaARLxGG3bmLV9ZDtwmD/ApBzDwq3Evv6CwQkPyk6rJ4e25wvELu93hxrLHpgUagwjclEX/l77nJZgx4VHx6IA6UF5RRLaDmE6rpUnO6THxsDZK4ZpxccXmadKf9erZw4du3zAB1dx2aTlOvFTW2lJLUVxTPVDrTf0upfkUENIPKr/arF5D6KfpYKS5K8Qn7C1OfqeIeeDzdprnpIdXvIIYwS6XMpTszjSCtxMIAqrXlT/q885+XzSetojlUlyJVfP37Ja55f4Y//oFk8qgZcuteG3ccUZeiZKWT+6l2CMl3x4ii9yMhQRLR4YSgByINIMGSWxHCpwyGUKv0bja6S0/tHyZnPK8vkFT2agvIlV9VyQnM0H06u4MROlXAhxSHZNFz9MVsykM3PfglEVkqwNgzBEiVYGkKlnjRHWtX2puJRinbo4IFbvBxl7REvbRPRrrZvddEUnkdGWVoMiVnVNqsuLZgr5DqwAMpYCXrv3/3xYlCHeyDCZdojlygUe1I6loS1N9ay0Dp6+cFQds2J3C4H7l9e6lbJD7itG4ZV7Powakq99c21qw+iRg1n+VXGLj4nSe6nux3VDktqG1uIUisogXnnB7VL3/34aXfPQqnyXN36vl9wxpA/9vSD2g9UQzVDYu9W8s6dgH+sOMMO555Hj81lJNUpvuaqbMygHCwOtIgEeWZgRg6/UQYfN/HrV6nPBztGttVlYl9tJh4aIMSCOrFVomON9PvNdmVU/vt//qUe11W7xyqD/oU0xlMBy4nVej69FccccRVWSClvXQZtblIskUeVlxWSHIhEY4ix4kzbVx5lWRS6Se0Oxjr+Nou43j/XRgBSZg21nOUb0nQgtQQVr5eUhIZjruV6kMoXPJ/FCgGA81N6dBMdXDTqS3XaBlNcwTV5UpqpIuFKsX+Y5Yd0dAdX/YKy7gB9UdBtuxTAcgi4tEeBpskz8Ihoa+1a0S6hfFkO9/jCYJrQXbUjtUScqkmxq6ZkiXaicMeldaxAoK9DVkYVrt/5zYIqE1Sa/colP5LPy5GzICPNJFh3fY32fU6fyF6d5qEJyF6n3mntxenFi8JrE+LTB5RdJCWeLDV64rg8mlCOTfqSqjO0fQEgbGMNVoDMS2smlpygFHSeM9HT2wX8KVI0Gm4XynFizJhMGAIUL9lFtA5lu2tfRGLgS/+uVu3SdPWviMZP+6ZUoXsfeUF3WAlJ5c5PY58//q9lKEuOkrNYSKz++UEOFK9Wm/1pWuG+asRq2oRQODRpBUu7JfshzaN/qyi1F8C8OZot0GE7bTFewnshdKFXV8GSv2zrdFm99s1Lp1IhW6uBMW85P+FOlda5EBo77q9BaY2pc4brgELFdEpgXTFr70e2+9OJ1fJfR/sjGrYb9zRnbTJ1CmUOjuONvAE6vZcp+QIQTrxTRxYUcCItwdZdMC1sorgLoYsvqpX39JKr6IydzdjCkkKpC/nhdEEgPgmg/kYlhw1K1USi8FPFhA5JYwGf9sRZ1Qi0G5vKQ8pd1amYHK5Hn3b4E22bQ3RU2kDo5rq8v/pu5CFSrZ4ZScC5XAOqgehkvZXDkif7VqzVfQEcDirKmGcBvyg5WF2labROIypge5KmeLYyXWb2TQN6ysJ9d6QFwkxVksY6UpWwJofmWxrZ2Es4oxcproPEZJeRGb32vENT9XPU/NmCOiVvEdBZkOQibpPSyjWZ6/STg4AX+VeiL/96eLDDMlJr0goZW9Znnpf7vRzWPaXQNWHWh45fGWbWvs+nnf9B/t0DLtxWnAd2EaSiT7a7374A3tyZf8igawKZWukl3+UW+2p5FtRS8dpXLFu7XGnB7p3vZe20oJ2y3OJ4Ocvxcb490nlJLJDaPT2vomhBgg5l8ME6gBNHmifcZsue6bPPMFHY+TdPNImwZzFduS5XnDP/NEINUZXZLLvzVfyDiLtwTn+9c3G8nS5lYaViqnCePZON0C01JT4t3WfUtHTaSKuto6oR/HRjhZPQ78GF97bqtUH6ACwZG8XLhR7qz+koWpvZz9gK11eryum2pvhoadIUei7mlTkWKxO+7gVAC6QfYAmNu2dZDdhzBkMKsC96Q0RTv1tmh5p6/0d0tG4cCht7uAv7Qan3KaI7jiLIqFvmIBLeyL54BcOBFHhYSPJrcERsnmrDT7hpwHax/CK5GMaDirakS1LkG99/2CKRtCj4HnTcl2u3YgFVZCwRFFz90HVKQiYTNTP9zIhQrlwOUxqvtiQUoVUBuX8UT1RqeBYNcmIDG3VMYtSBrGpffOjc2VeIuF4GM4LPKZt6WzKYOb8hWK1YEiUaBYkYTN5KOxVFyT22a2KTas7trmsj62SV1klILFbS7jjVprjrW+pMMGjya2B6xjt6u4hOJW3pUHorYxHDfoVYapoaK9x00CKG3fFOv5blbkYPRcWJJiCvjOPOZaZF6DVN6q4GKvX3pv7dt26T8WF0iNc6QLbWgksAlNdD9RrQLCzw40ARTOBLW6XixBaDq4UGElSl4mX0FquqC0mAoEUMrp7p/x7UQzI8upJshfat4XRsco+PypmzlLdlwmYgnDtODyBBuzHa+7LPF1q5QS3X1jCL5ABe3XVOYsm5OcTrvaLa/S8QZqeyk4pRb/HWOdUWSvsPUzq0n1Icdl/hHjwrlmpuBDmcC1laCwO9XOFjwssC+sphvx5mbg+zdF6aJVQ+2Nl/f7X/7Ud0BR3ca0dpB0jxqUL0Vt0OL81+E2lohYGf5rqyb06A5+GkYy6GaVO1V5PeobbPP7CfAodILDh69wevD1qrcCX13IITKZOL5WD4WV9htZbpywO2XXwZIjapydvPO5ZJI03VvRsbw07rUWCowHLDoydCkidE53vALcTv2XOvsS8BhBwXQJ1WCdgpTWkRbz0oLqrn06fAMm+b2gq4WHnYL6Ej6h0mEOySShYH96xdwo+rTARyVhOEIAGvUip/xlRMdxMjiLbFDig/wznINVHYAGNeWYhfwOpQKkGm2Qz94m71HsvSpsloFLoBTLF19XiW5VZSYvThx2SUdcmsyioXwIhIVkH2w/6v+TRRub4N+sXueES93rSbjE5JNf/XrPrNVt99qw4fnqDztHtUVewintsiFG6kqcidJ5/mgPHGW2lW5R9kqVZettB8v2OJZGAu1Xqk8gcLNOMUrrEpxwaqKvpPCRTvfXH7m/NY7LqQobWOrkft+O+TCJRyqwQe6typ/2BfnJELzsehaH6Wz/CiMaKg1jhuB6FgNsROVp4nkUrc7VMvZ1IsGEpCK5aJOKToOZ8/7TAzwmKXQ/gWds+VtJU3xn0tG62OqeWmaEnYyTfP6bsdcLRdUXo2QXlCNzNDzwxJr4FsSMQ4X/tNcKSc+bovG2QFQlN2LCHjxFLcXf0JlhUkGGuJGBdAvSM78ldsZ2eImKL99PcE73VJt6k6ujFToyk7um1Qxl+umVqT4IwE23lSpeU0ILAnrq4WDFWee4Uehdpuwh975p8vj3kTK5n/piYUndJH1YTKwpUwzv5/wkCC12LEoERYTyaZNpBdGgtie8WwMv4DfKYvB10B4CSXmbfghe+q9VsdQaVK7FmwSZ9CYVLE/GOZXqLU5Tj1CbTmCLEtm30HbFqEg/bIkh5JaXNxxWzdxGeXgL/mrA70TyENc64BmSGReGGpjL4smHJeYgBu0MSWAJ52JsIYxTWjPPqCdYzm8oWrwyeXfqtleWV3ax28UBne6K0oM8adP/W0balgbGhpK0au44VzNgrXa4WGUU9sYOkKezDM/KBKtr+Je9YtWaXv64C7L8Cu76rLvCFfmSLvJcg73v+zfMD3v6vVkd3oUo4KGU42TYkD1k5/i/oD2JdODyMXSQcgnOv8/uFRmvNZrJ5ycCkXZ/mPHi5XUpWiYxy8kXx4sFNkpxNa+uiWfj8Yq52b1sZxPq+FWPgPJCmxV9cjru8b46v2D70e+L1hQF2NUgkyKlSx+zpYJBd1Ea3ZgzUNPQ/8CnX0UcSTssp6XqOlVjBKJt3HPqaoliHZHy/OaA7xV2tLDs0bI81K4sNb+wbNI5yhVIS5Leag7+Pge9WcR7pQSQAVH7SoMY4WsGxcayn/3beVLRIqRrXuW1krCvcI7SD5/Rt/t1nDO8tVJtEpjVY4j0hZKnBlMHG742Do19Bh9SayHfqTc/38Zhtqrs0UMeav3aL/YihkXbZx8Qpta3/eK28LLGUi8YXqfPr9z5UXwKZsgllzgFU5cymIpuANS1JGZd+qp8rJnbiUhF7dIXqbkJr4DkB34Mi1/IWmRVdhdZ7Wza5r79tff6joIfqdO/tTjebdou+mBjxsHyoTXyHEPt+8j89GE2NDd6o96M4E10yGbg2RM+BRANScRWjuK0X0uQfkqw7b01LFR85N3Yk1OJJ+P+/xnY10LtB+z/J11a2cvaOgfP28Xb+SooltaZGtvoBX6mtRt1ExDGLIESUWO7RIrDg59AIgiidT70Spzlu6IjIyyddiRx6crSG9imp9DBs9tLfkU1RaKnoeWfcW+iWwysJNe0joYMq00Da7/PbrLTWJUXw4/qE8qXp15bqF60HbnJqznfWcJSuhs+BH1SKHBGy+aLBThTeZQtY0ZDswaxMbhvzlhz3n4r3zV3Bd2vqUzoW0Z0aN4ltp1mGfXS0BsO9N3p3S0te68meR2udMID+WbHKr79r39FCd27F2CzUpR+Pa+PEn5jGxdbku4+7aOrIh10/kqQm/hjom5XjY8U7Q6h4CCR6gBZozpjc0N8DH6t4Ai4qIk52UyKEIoZhB6OKyCtYcTPRKEUoV2opmlpd/jwd2yBnJAZ+5J3ukoswtr1E8qYb+WQQrJIn3TUsu42VnsNUObadHrykIaLHo1MITI0aK2YUPkyqjyYBM4sW+3/lqqN59pW6lv3Pofw2rbAlj417T50alEm6ZgA8pUsoiASkOdaQuvHvq6CCghA59z3wPnChKmIIgv4nVSJ/Kj9R0AFlJpt4MNl8qR62GXmnOqQ+LdIrBkjhM9QZSuiqJdiHfigb1jMjiiPfoA90BKOrZ4hlC8ffM0x8IbXzfgk3aTw7fr+kmhDLX40xOslvGPNXnAgjqD6onzG5WZkvOIaPCUqpfrKSQhkwxj3Xk327zyO1Cy2/uAbKrDN3XiIQMsVgMyDwwDNKbGzauXM1VjqIIxhVK1ALVuglppqUMSG2h/q6hIVeWgUunnu2/NfWYMpScjCGhSojyeoqNrGkhW+wkC1LTIuNtM8eClcdlmHy2K8ectTXX2BnVDscGQJvwutDpkM49vBLmX0RLUhkWMHxtzXJZLGjyZZKabqq4nWJ+7mvKAJSTkUf/qevDTKGExjG5W2AIWs0lRJHRzH+62UPn1YjWRYQH069cN21ccI0IXRLYyXdZOvoOipE4eXP6nxjBTzDzRAgLk6rdUPInAx1tRpmwWfQQN0D7BfoC2B1aJXumXMhAE8AYL6nGXW8a8dh7TMBTSKuYKUXg+aC2oj0zmZwdzRgvraIkdVCRefcovzxnCIoTQ9PZ4o5E6a67GoNp/FuS7knvgNuNvPuO1tgzXAVZcnOxRWXyA/9kj2HRZTWUXlaoFbyg1MCVHtQOTU5TZCXE483RywkfbkZTT1ySQnfie4ZuBPAs0X5x6Zvc/JAoHqlTNC0KSXIofyG+4EbYSxB9Cc8vtnuXGy3Gagvi3N0S2XPkpntqr9J7cUnm54Sgjsb3HSlWT9XO3vPQ7Dhh1teyrZZ7o0nHcFhGRfEVJYHjSBNRO91OoQfkWdDThNzjKUZn41pF1avSzJWJzmLteWTr6qSqwXrly8qw7rE9dDRg3gGR9WBHIMcEi0geSYWhiusjjBbxqW0J+fJOiJftVTKMkgQH2RQzbCA68qjHVh2AoG5CNYBQd6IxbRAQ0dLczVKqhxBbBEo+79t2CSpWPjD2y1KmtooBmJxirSGu7StE6HXmCiD5RSiUbf8Y6BdDMgaADbNJH6yqxlUxuqh9qft7+oTpdtYRjb+ROu1DBAY3f3w29O1AC796t5Hvy76Kx78lCeaYNuJnmQlrbw9v+45bsn56sPWrYbrmlw425V1qkApM13drU3YWFF+1PGYiMNHFvvJgYasKSkLQMZ2sXmZ0/7UkgKZokexbXTvB8/usNBjvLH5eSsgBVVm0ZQYzcYJ92KIWwu3mxdbn0yNQjyH1WRFTbgX9DRxUBMWE4toXlD0N66u0/hIFSomu4JYfqKcR4QCQMFeVcfNhHe5NU7/q/oPGsbobNgpwQ41E0IiNXgxfVFfRxS5k6Q24U8HIYxDZQiuUcq/yUo9TdFdhPThby0Tbcy7Q1IiZUU8M9YHRyRiSwIaiE3GOFfrs52tywhjhpyVw3GEmWZnUGlIoJHaUIrzsJ1tafU4thShZK38oiyvyK4/YT8FEHyWs4sFdvaB4oi5NdFpqN2FEl5VRFv41N9Hj0s0gUaMwUVBzHTW/SBB2GBG8qth6u0qgH7lGMtH29pkEvtsKJopQHdbeg/ZeACzLLCVdjzmUfWxXHQ+RT8P1iOx0GGyof7FWJgb+jP82gm2JkzVtDgi4giddEj2w1LYf+Jiwm6Q20VAyg3v+z1Wyw56sfBULD8xFfdPxclN0xAbNWrvK1gD2h+9HuzbUCQDLINFcirU6KNOW4Jm9T3myNhXuIgA13ZJB4Le6KJJkBwX1M7cBvYRjadvby77a+FHjhQr5MM5S/omS4HAfhEfVrvlsQY2Rhz8yjY4p+yiGrc0U5XcyS+2k6Z0PK8DaO3pIqkvtdLe/5NohjUkGspIaRuIFhehAyunyFFDStmrrq39JuWU8p2G6SfeQ/vV5DV9dLRq66z/UIrbaKWUNDZz5f3ydjZosuY1jCc19/ze2sK6QSAJUer37eWbs7r5VmRESf4CDv0MziREU02n2wYBcAOmWdZ+Bfnf6ajW/VpbY7GwyKMidVt+wmYBV6SyFVqEovDINgVOBLSlkvTzVZ5XCXo7cd7rVKR3dsLQdpFg53e3ZNC9IdyvcmcHK3Yg7P/63dgKh1YCedx7RZvqVApybW8JCJuSPtcdVm+xM5wJ6oo4/dAboLy1m5RBu7e0zsEXGPR2qfQRJUCEb9SOs6Bg4iKzj2PKzp8DIulqTu1Q2peH0Y2jxK3DQe97ehWYWu98/eNNaCNQz/K0/10KiLv9GPLWJ1WKMo3mWDSLZn3Q7SYr2brMrD0m+eQOgmrHUHAolM92NCFW8wmY+db1j0KhB6YFap3SowcHlpV4DmAFM6s+gypVuLltdAHQkhw6YUdZNeqSSXNU3MO1OuRlF/qhSoi7D7QMODH+FNr1pgljSJwt6X5d6xIQ/9dQmwjTQCuuPCNnRaKVLhUzEM4fp6Q45B+codkwNic7JvkoMzcYfbsf4FmQ8PIfCZ/1MsAyqrioRXW01tqRm19t07TiiAQk5BOwJFibnatDXSELBVP5qKaoWVFJFziqR7gcAvSCj0CLoxnXTo+cH0d7gy+Yz+LcUauhKjX+BMLotrpPuB5Hiu6PaVnZntfv6S08aDVQtoWMrilXQXAdSBFVSrcyXcE3d55+w3PR4JYRaboi4esHXXa5Kv/XhklBv2eHvTq/XBU6zBRy4XJfWfvMtoUeFi+lqi1sN2Vo2e7hgs3ubgXkUsBMGsskr0nwYZZCr7HhsEg85fspmXQM/pyqvkyoVLC3GvZ/Nihadys2UcfK0Wv9VzvVyeEgwGbajY/jc435Ci4Z7mmNjl+WtoekuXhLNlb2Kb26MGkXupA44EoLgURzXpV+nHRpXLrwzXUflHkTYhN8ds2X/ovO4R0YolV/YHYAxc8Fc8sgQWZXbeScAQcZT2QoWzwgWdVxBmaU55z0zi8nou/9JtimYZmdxIgxFWauReqBS0xM+P7lkf+S8KU17NArd8BQ+jnfV0afcxDfwnMYjWcixpkBUI5me/g9b9ZnrpWkATEnBLS8r+Sidrfcp/Zvb/10AhMGuZVK5RAlVCYkK4j90i7132YkKLATI8vlK2rfHBwp1gzfJVP7R7KyRBm8ZSpaVTNtSf4Rx9XxQSCNk5Nm6etmCrCRuh7YE49utAGwiagTLlMpnNYH0kiVEm8yOfZ9BHaQtaVg2+EPaArWo7mHChiZ4hk0ZoZ5Le3CedU2MmXcuvJWMa+EqQzoMAdKiRfNhG9Dr46bk6Oq9Ok1OtV0TOhgrUKh3botYOhy4ZgimdERKrya8aur8kFyh0mLLwX+LHqCHWTbW6Z+01k6j9Q1PfS0v4zGDgc9iMqAKoB7C9DZ854Q1JMaOGnB0ASf1A2z189BeG3oakxxqEAmoDInJyZIL0aI/PQlsxRheJdoOIPyiKp2+RV5SJecYsJia7WV0Aztgw0RRIqH+alzXES89cnqFKyGV2ozOtYquasY0UF0arrLNW2mXuqDFs4br6kjwe6l+b/LGTZylrmlmvs3BBv2L//hBWbOnpqPByT8+qrn2qE0VJF0RCNQnH+FVX+wwplX2e5sNmv8+pf9rkut8puonhF4JAFQgmuZeVEyoPu+7tEtNnqgR5ipINlVlkFEtaIS3/CwV8hp9Vqe8dVWGW080UfayXmY8ChHFgHnOIkP2rgR/HOUeam5iqEwYNmOcuG7c1XjzsZr+JNvODnDN57d2ivsZFNcePQywahqWCoqNH3bWNgeLgKcr9M4xhC0wS8S5PI4jBj37BgrKkiBP1crFXZ3wgabqhISXy+ztr7tderXlM7ok6Na867mpR7ttNUxCwHK03SOaxKvYTYZ+HI/GCQqv8TXUtcTksxwPK7r7qnrJkx8XpUPG+HGVP3JCBaj1AtUtmBiaZ/cLNgRGmYAxCQ66BkodKr32/2rvFeEFuPnSWRAgaGNMM5wIHc9G9WWwvKJgVTVI+KZU4SUtWGw9vNyR0gkIvQsh3AL6iE+nRrwG2X/4zw/njN4BLEWXjIChOaNHdf+tJTvX6r46S1m6UGpGjZQVhk4FDETXZ724KjSjvAIVOcLOwPZDVNTGbQxZq5odJqOdtZatIRxToqeXuoWBt/K4J1BV3oIrt4PsKNUjCKUlMIkEMQXiRwDbCEGIV32Ui3p8SkxlKHGSaRShcDtNMrmjk3I9mq1WQmLZo4VRosLKlpOFW6qRkDEc7AbCiKpFCVnyGYdn2tRqJJXBd+yz0fnE4ovU+iN1kdG1vEox6Lu2a/BO/wGbl5fPRqW/Iv8khwXTSmTsboiVVZHNdYPHT+yARRoE3VWEMmOI906SZSmAr9sKMRSMM+LvfoglXAGFMLUvbq4dJEWkP0TqwOKHc1M6GtTfQTH3QZZm16VKoMnl/f3K6W8Yzg5vzeH3oSWixQ697lu2koLUelQ+hCBbEDbHST/psdBsvjHYFRwHYw2yX4y+DcTHXYFXCseWVRbvyN/y6jXqWKouwtGYp3T8h23JlF1IZT/dI4YyDv2JgvoK3PluLEpng8l5ysShuLnlkBSkH5CTuFFlk5sj4OPMem/lWSmybjqzcwSzgMoN9F465e45mUhEqk2L3RnnowWTRcPcgda/lr1SNT/WBp4hjGGdUq8QqzUNYPo6ldA9EGf85avBNrrNFEhXzd88RIQiPkKvkMbZ3QsgH7otb3WuLH4QWVMlkvqsnpxumxBoKEbyDCT4qbUDCDcli17w/qAicC4lnHpis/xv9mteyo0kG0oP4Jfow6BAvkjZpTBpmoqTPRREllAajhBZmu/Xxg+iKgVG7d02LhPIgNPH0L9naT6qwsB1mWuWSh9tGTWGZA5yP3tqYR0n1i1kkFm6r/KX8pFJcqBeK8Wq7/R1qLosMSMyUk3W77KMgCHZzFhrQxXX0110l+giIszFLM4F6JdB+2f3AwDLSQt1ahWQUB/5znftKCCOjxwNi4q7BC4hcqyMi5jDH5d2CxOUvtZIq8qpayibLnQuQ9a+gCnsh6iMEwdcXusSlmj7+XcxMQtBtNNcrj5qLuDhvDV4tDgrNhfNqqoh4gYJ7NDFOW7zX6ZLjF3jJ0wymxLQ22CukYY5UV8lhaUZrkWl+HivbGlR316LHJUZA617fsAtrb0uMI50MjbRkeil/76AW1hhVD6BFSBVs7DrV0PZ0Rb7W1pdxY5vysoUwqhiV9wx/6azo1k3UaSNhB/FpfxLSxF6ckLIp1nKhBCteoml77/Wp/CSMIPCna7/UZ8rx1/PeWw7p8ZXp3OAVV0XMxxaXUXAaza+aGc+KyR1Z9QMkLR9AVcMaCDFJdDOm3LwsgsitsQUvezVlkNCRcVCKEoAAVFciaDNgu/q1xk1oqGU/FdcGM6yd7bSXvFLMGX9SYtT21hSb8pHQMCK//kvFbywheXy0bKXqo3ppQ7Jo0iN+PIAfJX537J4yQKgQlW/GL4SaHWg/c1CmMxdFIUJ1iouL+qVTJ0TOerz7WExqGXODh1HTmaHsFyUCov0qKuJNVMUz7Ohm7mkILvVTnXAxbrLd5ViwhH2yv1r14377bDuaz7K6kExBrWA7r0SVAUN0ISI9//9fVF7ERLFslAJI8j8WtyYAGFyyLSnn1XMmBlMtk++ZouDNJXdgNkatEq+rWAByB43L2Z2dDR7/9bsJ31wx8jAEGlZ6Kq2FbC4fkjYR4t6ddQFkvyWDY1wyyzsRKaM7UsvcGATBS4xk2TQUumRWl/7aUr5A0QnQTG3zp0f0myXJM3hyhhyvdhiyV85GRwvtS2RVGYducYSyScLr8zQldcqQ6amQ8bjZ1WTqyTFWoRnSIg0prD4PYklbzgGLlXCh6lN4CBwGGB36fU61502E3REZkn+csloyRM7KEA6qFEsE3oUl5eA7gldrN2baLmoRr/7a/1DiyP69Ow0HgjPSqbrDP3llFbbWfaUdNovn80OzPKvtwBVLnhL/FDMHC0TkaK7KDTeUHJXhS9t71XR4MwGDScTQ/bTLLJqM7QhgVtcj7NrU9lzIeLe5uPcv2Hf8cbqt23D5ZA1YiyUWlMcSm70DIkXjnigK73slyg1kSKcVSNpRGa27l8s9xznUukHMgKvWHMqBdZXW9OtaybD1Xk7Jdvj0Oikyu1j/e2c82hIWhU7ex7LstwjtmiMugspCcLt0w6zd00GjTY3uFK+5QE5RPd6udjDDcrNIRIha7WwspiTomcgWUhgclMZgsqryStDQ2V7WQpJSFuwg6hEo5xjUoeelUPnlBaoeqf1CDye0dSAfR/XQn1pztiR0ZFeYr1Q1vw11KAUN7iWoVkVTx6EVAiAe5YSNnPwsZ732flE1CuuVBySEXK/6RW9PjUHcV+P3/yvlkDrCVlqQ6SEGe88q/ZdC8fIfzUxkeqtNFpHsuj+jdcdvavUKbCMlpeRntvqlax1GhXN3GqFTlWpYcyea9ltRt83VxSxDGBMutab8vpeUycgl0wx9DvqhRV9GXXqW2x0YxQUQg1tm49l6APxnFp3D6pJe+PuMbxqFsA5dr+r0m3T0Dpswpp1/wJL05aMOigiACP8p9ab4A/S+TMR07dB36qud7Ys4DNeVh8MzVVoarnjNsK4Lpr6nfLw+zZkYk04G6deVDk2hnAXEupjfyjHZ3BPf4MePTL/mjiFLprE5QaZkEkEXc551cQGNfpoTjFrxAuh+t9qr3JCYzJlJpC782NUMZlP9qL/DVl91umPZcvtiFQ6s32C0MSMkOSSPq+WYG6fHyVMPwrTcVbBvprEucqtCFv2DIsHJnaINThKBUr8RvtBouESK5N17xUZ19AFvtpVJl6Eq5y2wt9MhlN1Gwxhhxr73zKIyZzIaTvV1WlTEnoaY9QF0FycW3w5DAKime/M1mw/8eDB8rAfgFZKULeev3IB1Gu1QGpHOsZrKtaSr9wOiRVF2JIEADIzp1YUSucY526pu2JsniW9po/ovCPkcaXbmM9Ir3I4Xa8KdER8e9R7qlTXbhBPLLeNYJZKaFM6KHcdxS6XwUleTJHyANB0Q+EMMBla9iBEbttlrt3K0ilmKb2BQ8I8WF8a2nmgE+NtdPXMXLsDnO0Ch/rzNmOkkqNkbWXG10jdW3cv24BAwEtFCWmpO0O85fJJpj1rqViwcN/LHeNdz0hSYdeCS8Z0+9JQV40n0GvXppzUQad56C39fTzfJ2cKHyWLL8fg/vQUuAtMIKYgcba5UYB5ry0nLggTIRmrTzgt4DpGCKprSWuy2hHaI7KluqV7KtzLZov9JN+zhBmE/XP4+uSo2T1x4/lIEfvUlwGzZpb0g1eLnKAKmHCNCqhuuoQ30DqHU2dnpznIcaWxemkG/I6YfyFZAOhv67UFdRabptxIhS5p8g9XE4rhvvD6m6Z6OfAHZtbzl4ZGQpsiLdfyj70Fye6NzMDLoOUObAvoIExtSbGx9C72ptu4gJhT6n7rw0jXZSqEjo5qpWsB4agOCFw/eLdWQMYCl9oFhrZ75IbKsHKRVJaaBAg0aFuiMhbd3g5pU1mi/n4Urirua3LdueMslwaUsuoetNJZwoxpa1X2BVB57jpebc9kUb1rZCzLOmk/8cir+CjQ2kcW9AlWevoaX1EiIgl5grpejN3rQKNOYpEmAJLLJBQVLwdyj1GwPBMD/jD5une3Qi6l87Mmgs7brplJ7aJpjAkJM4iBpSsXI8eDTcU52xiHECSh5tzieACrV3FZuxj1Kg4tvXGWRCixSaVH6kdRTF80rsYdIOyuKV/fabiTE2XdyuuUVIjyXegnpqSDth5LzMrakxIXpUPHgNLo3tDFf3+GYJXadwoE/fIbK7FQEK+xuoRyj0enfoqMYtnXCu3KEWrXv+7PuvJL3TV/Zgek2iSRHnPR9qhGOF412kg0YxtnEuOXTwImd+xnJW7Q5PPx7WYeFpFkia/qRiRFWcAgiKFLBdss0lhYICc8fU5vuRpK7fdhkYwPw//gUkl352aiWgmJQZFkvZZdfnP2Pv2XmLc3Rpp2dHRf/juzYNr56WPRNwu9qKTUNnX6r7+bgMsc04f83Ik34p496bVSQLVOrqJGaY2MMG273dx5B0KysCgL59a6wuzRg28Jxxl8XwOo8HLqpAfOLyyVx8Q9JPJ3TU8qwOFMwnxIhoZZVN0J9bcJuhl27xO7Vdff4K8weNBWfA3vxgy2rNAzpKVJauFOdTQWGxqhyHFXr/U6lCF/Ke7q9YI2sksGfS5TEp5cGknurlLO9JugRiBxjpfYZqhFmd0c/s0NGyQ9hNilRv89VrbW7ewh30W/iJSEGlsdhwX0+KtjECu6oAyzaSnGnYOFBCfFygUQHRIkd1iYE3ZlySbZ3kv47TrdWyWeEX1p4wHKFQyrDRoPNX7fuTC0LF1MQDilhBEFn0al5aBc9v0i9/BV34rJRdOU3Q1B1JZ9pW45o5bA4lnr6YCCtVRVKSMfseXiJrk1dawnp0Lx0ODI1QCwapt+0cQYMZK4Q6jNA29+lf590ha1Y+UFYPuL65v8xUqno3pqgsIqrq+7FAgXvWi9nAE87RnTzLgpzb+PxpIZhi3Tc1JMeEbYsNIVqYY2NtbB+KBO0KIKYobRM5uFpeSUEYWDp94BBpNHtDoQFyorwBwvt6ZTnTWQIMtHG1YzhujoMloykm8prlGGz8q1GtO2y+ropKYsmQiWo31MuQw9V9sWKt/YOBECagvdFssZQj2KjWhZQR8z8dpvTE1Iz4pizyQDxDBIGlv2H4Z+LIyfNjcitJRoxCwXJE3E4F7Zx9R5khHU33O87qODWhenJnNGArXjSlIrVi8TTYPQfeJSG1N/lvSJmqAeGFZ8tMAZc3taGlu5AHaLPOo0vRcAqpKTrByRxK06eEvDgtv9tCVLwLUQKA9VQ1j0ncILFRQOupiSNzP7KRQfD5bsfr+a84nKk381DMjaVNm+ZpimTbg15rb4C8it8ZiqMzSldjH7qnPQb/qWl6WVE3lJnUndq7LaWM7hCBASPWctHrrOJTWLmCrVkZ60SjsNDhGL/JVnbfTASG9+dpBURWZyc5YibTLlVOjbUAu/6jxYbp4lxYWlCkDbDLZjLn/iA63ZtD04VRkK7Wd0EAcdr5PS+fZYt7zfiPJKNty/wyNjVGoUAzLG8IdVe21dolQkGh31TkvrM6eMItefQJsOprokHNwdkUwSmwDcwdW35k4TFroilKBChXE4motwN/0ISfiHigOUr6R9yneKx0xa99qp2YksipO/Kn4XrQkRwf5lL+LlH0lIZKWYHFne9XhW2uhihR6xemmF1vUBPh0TVAwD/oc9vjdFV+XSkdqDQlcC76VLEw70cSVuSiUnYtR7yn+fw0axAdhCXOjFekPHYQEu1PKwisNcl44w8yjTWxsyoJiuWu1UfFbb90Wzur7RPG3qyRyqOWvzKTN9RiCSbNnLIaf/Jzi3iiIxMhs2JIbu9Ft1QOi6FxK33ON54ukRBmiWHN4GjOD8E6kgMysOUx3UC0ci33tOQa16L80pf4RI+ZPlfJLXLNIXTQNlVP8yfMPziIgHRoaRRjLugKl9giC3kFu9fZeuRu6hoalmYdDMR/1nU+XiB4weS3UJebcsOXBH+TqUx+Z8zlN7ydpkbi2ovXqP78Vl/+xlDUeh4p5FI95+v9S2JRD1E2PQwwNKbbXBvjZ0WTa2+DT8xuiM/+mjvz34SuBg+f9Phbb6eqRuT7bCjERsV4m928oHbdZiKjZYKeEFQarVv/iJGm4TIgpKhYBbJek5o5oBXYtHk2H3nGXEabS1r1YHC4KB2z0W6WkpxCjR9u1df2JVe0dHtERMv0IPWpqQMPRvOimSYRc1a2bPCanuGFi0Ni9a3tUC8yORqgVqgccT7n8cTqIHUenuBSflCDbhJfMCgF4AqyoyO0KihP+7nL1sfUGvw8At4uLS3OzMFDjPbpb2W5b8hYIvwHSrqpiW+apOPaEDNhXu/qAb/jU3qj0m0gS9FtIu3Mif3JD8dUi7qGsDdSYZcGJcoeQ/w6Z8L0wk39XBtEfBn2SM2oRfaGwk46Gbpa8KS87Wjglij5rpIDU70baMFu3fr1CGxkuUC1zIO1bxUQUAxTRTBKHTgC7FV8WIYVmYiYYiBoZNxpnlXVNGZVxtr+Bi8vnKmK/iqn2axdU/TzGUOJJoHwO4y8VPIIwi1e24lH/ATnzB4k28gLDe5XMftcXSMMLHQ87Zk3KkcHQGb+2EM8ri4vc5/khXX0OXeGOsB4nTDgXnqC/6Gx6l002fN4rQuiV8GZye5ugEPnY93QIknyRBueIadNvEsM7TSz5Oe/BWVuI70bCDqyR+5o65K6aYhriHinslOVY59fd2bs96gqsKm7MrTgObyt5CGMZwZH8f1SRLzLCGUEcugLsEviD+G65dnpnw0l+eQgxKk9hMoyJDCyZlUX42rRUDnQuqGt2pAiPpO2XCp2ktCoGyid73fa87gc5zoZcB+jAZMD17fTX+mFYAUvxQRIIvmUXhpgUey+RGzr52lYoMHVqNt7LUFbIs5oZ6huZGSC+z0BU0NmUJ9JtUR0x+v0PLaWS035AL1STocsKFOboVF5eJYvGJp9NTOVDdpbC86C05f7oc34ottkdSdAxGPwtl1eaZ808iM2UQyASMLtljk8WebiagnNuYFwAbi6wccMDPPqr0APHr2KrnLdVgq3MiQCjagc6pl0E0LBHzUfY0cAcuKqkAnDHZCwNaUhkZIbkOfwSNj0RVCysdky23Oyqinp3DjJa0rvPrJyQK5oJIvLSuA6+M83bl5xcZ0FuVFjXwpbjsiXlgfRRmEWvLiiTSVTzcwQoS0paodFGtzbJSpOJWiMyl/YpAFYA2zzWvzq65b8m/tc6eswBBjYv+uw1kGODMfhmU/OvRKzOKmx1T0tEfkoybloxdvtx21/McATeVgFFGIzT9E5rqzn7Lmuz2Y+GT17b2tnodaFPtS22EdzavnxwFz0Z9dVXUVdN/uWzSI8q4wS7WNvbegRhvpSU6+e9/32tsO39ykx41PeUmrAEaBwmFFk0wCfrtvRMoO9UpoZnNOWdbEMXo/TouH+Sb6oJCJLmrT2pycDrQQpnHw21v1PK08NTq8Z/CUOo+Wv+9X/bpwdcVDepufw/cWDgYAQrVeah84uwz04tN+7sNkUX2du7aujCcSh1gUfv0WB42Vv/eIBh4Y8SGdpb2GzVU+a1qYMCJI4v863pXuXmMz8/lFUh9ADuzSKITdK/YZzU3vukPB+K80x8kgpdr+DqllgS6xTDW0MigkRE9vFxArJBRn/iV7dC73qtdqKZyaaAeIZEnt/Cn51QpTzizxpyVX8x4y/+3iCQsT6IREqj8d7GHK0eRsJhBNHAgzDOyB+tt1I1lzHQVxIPwqmViP6RoCdsd9wJ9jcWNe8liTLamO66SmiaekguVr5SPSoFWJ2W8YSGpbZKAMvaG7jxrlNTJexCpu2wd82rGWRYgT/sW8IcKr5ko7NKNRvbN5Haa6iRpEKZ2DGiYR6z2I9W2kS0/qie5QFuvYYTqFaW4YqN9UqQeMYOn1M75GonzmS40Bb6GW9LpoaE4Mv2bUQohieOY1uj78/3rQiTT77g37xpM21ye0a2dqNGcG3igB4SuZClNLq3cUrkquUOcdjW+WdB6hjUoY49n+BrfnW9wrXkW+ddxJlG+3QSjZNJfKjDxWFRcIaiU1O84Xl/w75JcoVMgnaoWDzb4vImrNn/QnGIb/Kee5BYrW2Ixap12X5x9Ly1cNhxkpgI8ebGKBlLN4WY81SR0o47jj9+58+S9FN7KGBCQNDmezsqDKhp+lNbzzn+ycR2SZOQIedPyg9jDp9iF2RUJkuYm5895Qen7ZkcMRH6AD06jf+Ini+C+oS6yhAWP3P5dVIjfQHrXiOsZULAtEX9/3DLNrUBrT2lwoUuqknelKSOe4ZkUzxTT7xaDgok2Pdyx1Mi9AV5iCYL/MUOxuXLajnvl6Wd8D6uMRulUVQzJPQvXendGSBKZAqCuFSZsF9iNkSkltLwuAHIzfBXIgJi9Rk77xXQbg2DUz1FN+kQC3f4PsdM0K+TZof+g/Im7+78XgCsR0MK7TvS6JdpxO7rTTsMXxRNMZe4EVILsuV6cAEcJ8Yahy+5/hHC7HeDU6DbAF7+66nzGlDono8inPdHZgqukEZ6xEk5hhLNfSq9JHfgonOOQEySFSt5cJEYOloNNDTvDhBW9BVQNVfZqo++YAzSl0mfnK/jqgasazs99gnCk/aSY7OrXwmaE8nADMRwaVQOdn7nkOccZWb0FK5/d6PB38LF59bP0eGWbkDgP0ugLjfpcW0asi9SAynEIlD0S41gN9ecoG8ePlIBP8A9ghnb6ez7cznolfQmsZ9xjfmI8q9qIvpGEOjLHYKrRUnHUqA6ROl5dJtnh6/XO3yNtqd8O2mVUu5e3Nm3dCpk3rvH5a/poNVu78y4U82FCqTICoD1MLhkUgsv7nlH4yIZKhc4IJZBK9b9P7rhku40lncn/e0YusIumYFHAk3imNL22/ucSPKN0deT0Lf234O2EzYOKgkUagNWbL+IphLiQQMazkXvO033zn24nWQQW6mOnymo8GDNZlf04/xp5BD7BEipAhD5t+VLsnOXRWor6HznC45B+RyZmtidWTvxdSy3Bve1ebuSqtbrRvKp3pktC5HOQzZka0QTwLjxZ6mAE/REy0cO+M0K16psyhbRdRJ2W6453Cd0AUzLS01q+hi1Phj+J/lfiGXvnzyb3uNUDMMq7Kd19D3X/55KqqyU2cDU0285Z7ajoyzktVbpobl7i8STc8YUjAXIEhPSIHZ0XOjhCIOSy0X6ln3h7Yoz+BQ/ooZ3hNhIQntLwGubsXzc+nJBp6oxV7wL6KKAkS9UlLpeRUuOvKftJn5l8/Mh1jy/qGT3gfTFsn+0hWNp+TdYNHaY+Um7zvTCDtaksor9NnRNXugnn29A5B79MvPT+ToYhYnzDvQAezrcOw9DOYm0zYvK7oefSAZ2uH0xB8gUDzGAow7Os5DbpP0nHgepvDLNiQBhj3/xkVxPJjkBTIiydexE0S6dkptD6gPbI4n3xSrluEenMcx4awC0Xfz6CKxS4B2oaNbtOf13mQ0QxA0yn/6d+iUGaoseetuM6pMPFX+QtqdaAEDQZ3clFJc9E45Dgq+j23jFkt3yGP4IoWeS27DuJGWXfqKrLDcsaxuMAT1Mhb/Chx7vUjo9q3pDqvRtb07GPXqM3ECjJqAd+i74mHRzphNFyBwrld4RmeKqYbO2eSjSHcPKvn1NUiayLSqFurSUroYWwnQtLEt2p0LknY8JzIyZ3cWX98ulfVztU/OxDxU7QIj63Xb+AiuBZjMQt2gkbDhRpRpYDfhAD4VREMeaqp7k2E4SNHIdnTKlaIr4FBlgINCrE2HOOBCi2SjGyCmsKyb+eZ9NNhbCpbXe+ECWr3mb7nrF50VJjXTzKnq62JJWGI664e+2euGHh7dXOkO0Zsomf9TE9rQLG5unFA8vcigGZCKsbxb1sfagUz0ccqGg4n1nVKJFxI+vNIKHIoLYOTPxUmGVfojU6lkulFA7IXPgao8mAAcPzFw3Fc9v8SvOtKn8RqtlIuD+HIesSeLjkPQJVsp0f4Wp0Km925/fV7/2FMVGCcPwp0sMzSkySN7ByvxQvPsdofRBlJl0ur48BelFxYFcqOvHWFamxZTuNAULTLnaiZFjB2enFlAJe9WEG4nrH96JiU5lVg27LaQxH5oxsdW2Nmyx2/oHQhO8QJ5rMnjzYr/+MZiWULQY59LiRuMyF0Y3s6l+ZLNEcZfpf+0Y7h0eFLKOyv2fuumca0JvROVG6PQor7SWEaQjzubroE9EMskJlGMsEQobH9OrMiPnUSVcPglZJXnsFlWqyb1CozozRL/yb5TcoEuRT16Fer3QgY2Ca2nz4yTeK9S08InP2hyLY7f+MH66F8/T/p18nW9PokaRTLGq4l5G47PS31Z6SqmE46rfLmsNWjGRjNhQoB5K8khHbYmOMV7M0Ub0u7s2dM7h7i6s7bTck/cIRLP5bNj2WjNW2d4LPXFGYaDBrjbupazGgBxgFLbmLjC0c1i3hEAIiv6FpKKxqyod2n5yQyXKFCd4QUQOMiylB94epLNGHRYa3fR7eUZYvSNT2wp/btbqo6/tkTNUAXfg8Eki8dNcCTasz4UHre1gE2j5mO9HV81vjqSDhkwBM0f2USJ88lqQWqOEi1Devnz7yKNJwp8OQOMFIG8PFjItNIAq8wiOjKACcRaoVXa6VFg5LEP9+Wkt3kk4w5ts1EXejE8OBrIx3wiMJQvpg+tvVwAAhnFowcF617MBFqZMb0K4iw3tv3vW3BgRAWbz/RM+C/4+HupYzKCbJjYfvcq02UxphLBhAPr4LNN0sNAMjQQZAVwUSmGiLaMLkyvoaLbGbUHSbGB2AzjZ+1Aths593pe736ojnHqpLMYzSGuxSzUyv3lWM83rr6xte8rdTk6rF9LV5QxlZzWwPnWRhplCuE4jk83L99hyM3kxHVt53ihRQRhhevu0VlTYKWDyUTCNbn23rHGVZPF1JUwhy7Y7qBaF8pzb5ueTsiBTBZ/OWuJ3zTEv67KqliO+fG14Ki/lOhwrp0yqlQnepEBokJ1NEvikumAIEY0k9cZ3KJrky3iYRolscMQkppMx/HQouX4Rxar8KvZgft+QxQrKljo/zE74iz7oxauv0VZU4/36cXD+o1E5QBMazaiLVud5gBtroLSs/KitA+vzp2weHP7xlkNTS15AYuqVjY6JvdK5La7rO6MkOfB1RrzW0t5GDWGtTy57bRwUEOLnzKU1z6W7C933jrBcajn9i+kDlS5rxUHcnMjcx4wLNit2ZmO8Ji6dgkaICfkcjHhWjvlX01UdfXDr4EdkE8OTNYTxgWQcdO2y/6noWzOldRxxD8DxsCeZ9qaEvnL9UkPwwhVQKk8rXT0Kd0j7gDjPpqy623TfTSmrcsw65iD26kIKcbdspKtggt9+cgj+Kw234Uy3Ahp2tUXpfWJIp4WAJcTvLSw5EWGT4QjQpoy6HNTmmf4rMi4uU6IaGeSj3PCYrQi9TNaO1HHYd3gOHXUkFOxbdpHsfqIdUdWKNIeyoZRkR80cIiw0AwWEOXsVf0+joTqB8nL6Qh9a8LpdgIpOB7u40FPD2Y9ckFStnfbIIqfne3FCuPrxwi6GrVY6OGMpPcTkrooRu8mahrQM54pgLAh2jR5H+X9vpsA4VeiDp/1g/RyJWMNk7D3Fjep4i+9rWkuJ8HP9o8wcL+BMoR0mO66gv1tmq3Y4pMapd1UAxqT+0AdJFuqGKqOUyR02uK2XrnmsETVuvckdji+1HkBAU/6JGQJNZIgXoZNFvbZalcvLsdBocVUUzLFWomEusMKjrZimVaPz+JQulHcfQFu7DUJIANSPe30K4Vb+8zuGeXwiO6zN3boYuNzKWsD2TV6/Jxp3kmPj+JxOOl+PWit5qeCMeN1OTjhloGOBVq5krqtufoUepKd/9CbfeqTI8TE3jLtB+65vl9AnJpN6eUWcXgI0qqWWeWlqKEHLloIJUn9Kecv72nGcdkXzmDvf/8ksXRGgXSJkFmJMVKHviavnZFHWIjqH9+euscc/ekFAB7c5urg79/Sg7gC767x5j6z3Z4y+b5tYNTw3m8P2Y6axV56+B1jZs3jTdUyveqKJ/xWxUMQj+0DvK9VrcmIO75q9bA3OtcZdmjVRSbyPkuZdEXPl9/oXCDAcXZIQZ7FQm4rnSYbLZDgW6pio94xyvAbUHl1k+tTrKI/JotvbRSfySjv1Z7A/584+pq4gHJhtQ2yCNbuWYCjY157ZrW4EXQ9JeKks8MyXBTrMp5SssREUeqCWOATIk1/VbLaFKmAinAWwOpsoQzLlwsOhb3zW2BzJFI7dK85MT78XUr8tO+KqV3CLQebzHdSHFwNkNuGvh98zO1dBy3m5qyE84HciUi1UL6Jq13LZL545UtfFtRbYq3wpjsx0aP/L1OEQkc7hPiYcEO3dQ70tY5V908A/ZMWmxvyXWAxXa2DY6RYxd7n3P++IJ2S4FGsJPgCVybNgg6uwPoIz1TVV+Xh9hyDNiC+PouISy3hJGoM9vs4J+HvmM2gHNADFiHIaAgm0soPLaqC19bULZ0XYTFxz607Y6ZRg81RQ2q8HhNPYpcxMFO0vdk3uHifnfHFvzwqq5ANkNylrjrsHX7VhY158EL5JqSg1pnJT9U1+WGqKmchQSF14wmnveJSHjMp5EbNEh8BQMlpVsjS/ENKHBnwoz8/+Y99facNCC/pcHz8Ac8RIkXq63YNjiPdUOIuIi5Us4vfSFZsXPXRHNMoVacVtLPrNqtcDarLx7aybyslU99a/kwEoHwObE6QCDMnTGk+aoORb+JNL/slSSNzdCpEHQPtffypvPQBWJR0YThBl6vgOHS9ArqabZp3lZqlHezXmcbCoISUm+yMGaVX8Ww2xGPoMGBoGlJXj8hThrNWdmoTua2T1fArlabWunz8GBOV/DuM0WolX8KT3KXTz0czIIgDB173+uSeqC7x+FcqHl2b6ivg8g/okfzYz4Sm3R3ytawQq6vh/0ugRm39NzuFVLS75F1xYQNFQ9QSOaxPgtojkHsIYM1lsVUPlfhPkd8sXGcW0eBMwWXXG5Iu5csT9VaKK6lKjsaJ8GINN9mjFCFSUfQSoBAWkv06F+jd6ecPNkbMXJn7SLlKEMHFhdNL0kvloIoSl12jw8ywuv9loNx8md65i0btYwPNG1sU3NAznpJB8YZl2nWPkvj1AiPWAk3wrQLwB5mpim3eXecqjrKmf97HnLl+1TqskwwYpIyRw8QBdnjL9G4xYhoSfoJOdhDu9sy5CGICq9p5MHfdhWzdv1IPA/OaG/807SmZDYrOf/j6DyJTQrRvtHSuCLImXEj15MH442Rvshgkc9bIznpCFV1gdgVFRomA1MdsIalWtxcmY4y6RyvXM8VQiMIFtEmIW+d3VbERmF2BKCXnEo0ecEf6+vJ4WAtM59v2Zoqt64cM7Vzm6Hfmyvs72EBIz1cKS0x9QF0IOrExdYjzXq7suFjGqxxtCA7VgFQLi3qW5qdnbWmE//z1JTP1KJEf6ntbhd3feBuyDJGgrX6Xnv804L0IJXt6xMy+zq5G/1m0p4kNFgeVag/Y6qTy5HQBaPB4ZNk+5l8/q3u5tpzjOy2yiJzoDUuUhSIqwBk39I/42OJTBR3XFlHHlGFigImxVPq5lHA3YSs8SxG+Q3xRSUwgcG5SZdlQLxfLH0MdmgsaMPMyS7pT4fbOWO0Jkp2VHgKD3hKBA2Ti2Vg5YjeedtCBMpXI4lO96VMl1WleqWtOeg3rJNU+pgoWhEaBdrVJc3MnLyEkN63fFZFRbLQgzh8pCDvt9anpIo5RKmkbKDWePDnVZ5csz36wTdvUmIgYXgRLOF8Sgu6jn69FflD1dK8+t4OnA7VO9NUwotlnbc5qMqez9n+38K84qKOkw1QmqCCleaqr8xG2/HD8xAencHEut+903o1AuqvZpj5g6VEUc/6Zko+fAPYHPzQdu2xhD8wfD/8YtQREA9kymfQohRQQY4/STvwpH8/e7/qsOfIHF5QQvouK7BIuMMCqRaMg+4Ol2XbuSv6UaE4niowyKTp7nQzSI+nwif+96uvCYye/5E+RFSd95Ra7nksqS4aq81hvHFtD0/1d0wIJxvKjXcnAsJ7XfEBM8+Q1tKFIVnMFHyIilYLFp+J0L2YucYtvh/bKfuPbCoY6ZqvyUIW6Kw4xRm1PWyrm38P6J6/XryQw/RqhsDXSqzfhWI3ZPamgwTgBDS/avERCKJA1S8vrDKelUjnFfGo3MSIgTs0JfQMFPe85UdJ8p/TQ9WIDMh73+2H+WNkLGeeSE7HCjI4SDl85zTg+cOibxnUg8HLCARp0uaFPxf9W9ARS/fGxC6uYVsZ9Exkh1I89XTOVwDi9j6rIkwKGdLrNL36kB1Ave7W2Fp9j9t9gk5s1d2R8TM75VWAW8kIELILjGI+Y4YotX+oXm1T2BN21T0oR/WNf39/omF/2LynKnQE3sZmbOivjK46u98XVwXauLCALVIVoz5E9YcfrKPtvxhBgrHVVpYWMwdHyAG8xooSj77MoVYPrqxWNL2QyOAL57HErXtOm9VUE+HIAuapYwVDAHU8H3jSkJL5G6CP/WRKGU6NSTnnFxll5VaY3tCqusTtBfSRetBDt3vmln4J3QjnLASnccLCg5tALWqPMhXiqW5DM2d0JQVns3zZmqC6e1LCGhGeZ8eVXxFHAbWwJMEj5FOdWejcH1PwfLVEV4NnIWUGuGj9VOyPeSJAOscmZVQqjtUr715/CAWoN+OUkOQ2gHgvfY7cNBX0iZN7zgIeOLKVUo2s90DIBPGiYvCzQHNjv5GdhQwt0RRXeVK5rntzFBYZfxIAdpQDfQKUwClEqnCQrd9IHgG1EEfw55JRFL3ofLbjnhlX97QMhDNiKFown6kebY0Y+x0QLXB28o7xNN2/whbpnwXQI99w9NKNITYNDs26abtM1qMF7KJQuj+btVwRmoi/bKtfOScjDxDo6PvRJcftJvs0iBQD+ctfQb/7s6AcpgwHPYCLvA+HDsRnfqVeOvg3FtmCfFjcaasKUXWyN5xp2a5rsedOr9C0rGtWxT4xpbC+nRrp362tdePgCnXsHPnBbCpDBvKXSrrdlkg69aXFlxZhT6q1t+UQAiOJTA8hH1FTQhvxbKKPtOaJfhkiG7nLEmPzk75w0POn4NWfzozKJP+/hoBmqQRKcc/uY0eLAl13REHDAcWdRp3Xk84zspBXFeawodYJVktkuvS10ANPQDJcc0PfZY/UIltKCEUioJot/2SHf7KkaelyEUV58eOtVBS+wxWcKi1+/uOWSQMMVY2QV4Sn8T7pNrL+W1is6kZvAQ19W6qEiqXw5hWp6LWTh1oDktIChKNAmaQuJZ+OM4mxG2DnDLkllZD7MVAwH/HecP259d8QeLwZM7WfOwMPFZBmMzWQNi7A9Eenp+spTuNhneqRovE5BP3O+CGZyz1lknnBt3Dk67tn26kcjwws8eiAt0E1n4z34HKgK9XdDjC9JTKU+5+bKt1nxmDLtMRZGbtzk8A6l2RPEiE57eyMSkkqaqCpqZlGOnrrqDEzjnYoB7R/9zT/0jjywm8CThRYTBqEA+rg/aRSyXEYgcJ9UCv1aFRttWx8Fe1VGu3weT/gJafBzHYjyv9vkg75+oJiUHu3xWIoEGixnCh4DKq/mnKj156vb5deRMkAWf4DGbIhVePe6w/6CsrPOTiL29mYRf7IQReAwgOZv3AUUpraiGZMgOQ1OicaXdestA1e6z3CVPWzhXEjnmDioC6FdaUCz6eaDAq7qHNEP4PMqQQWqyU7sV2TaXpquMFQdUZQrakZ6cOyFxXOzjIPlm6+5wOzlaxqJ276MzIfXYF8tUMpyer/7p085hD8MXCxlDj55O2oWju3tjpYpEt3ZdfmNA6gROW7u+65dA1oM1BDdYiPj9uzJbyFjaZOcxehfBam45QIbk2JX+6afGH7nRCgKOO9T5zzDU76YzKnXPFKaJ/l/jBmtF/SC3cigOd/DDRq5CUsXbyEqQrSaYcXWNWVTk66osJV+B/j/+Vp9BiyA+9dDk0beZ0C18yomkRincnUPLVbHZqjUkb1tZU8qYl1UOua+8Roevr/YmuRejQo0Mcd93Y/ptA096zp1RxGEw1AiF+OsVj4n/taakdQBj22vm4T4AJfh1uhn3FHQZewdmNpPpDPLKsv+kihpuNu5EfG2oJSpxe43iQQ2JqSYUnkiysvOi8BHcO7tqiPjCh7ADxexjtiX72CbQhdNFnQIzM295tyIZGduqLglynCkFYsRWrbkl0KVlutRxZlK2diJ+BdHGmhA2ec5nMc6Z0RPR9Hv7plAuq0nILuLma81tdVVRkTNDfd/MjO69W010wJOF2QQbO0yL2CuiT0Nhdrc6pPMHX9HVKkVXzZUvgoyWvY8xWbfdU844BUSW53oi8Wx/mfmmwNur0T1uvyuSajo79XIaSB1SPVSvIaESdUFkLTRyl13xonweKHVLO2oz6+kSPvHV6WmhJQZaRBQHtXTFGrvbhLV9rsxxiOx29TVgGTQIRwj/KX6Z96L0JVp5pYlXrMRpZpFL2RLNJ8eAAu7KLsO2HMR5/6j4pGzJkdTHsZYIQqWzgKtFxxQ33cKxReoK4QlpCtRvrCmezHK5sCdX+0htLJLSPfS+DiU+m6RH5XG6FoNfslEi3Sl8Giyp2H58J3O/bAUAQcQi0x1n3I0cPPL7HZ0t3XPfjZiFhbkSfLrWSe1JLbynTWA2fguy1Hb0h9R32qkPx0kytmj/44YqBqHxYNan7tGi3nvrgKlr+tMgrZWhnVhwiAZDwOHAKMc4F4CEp6NUObZ5Rhy3aTlTP3/fCr8oApoKdW3TbEei0PHsZF3tI26gZ8Ihx+nPcDlZbmmWZntN1qolGrKtpSxQS/jV5WpNt+jHMlYwCYWtG7dnkIVQGFy1l831cxZFVdRPXH1kd6zYdTWloWN3+zLTLu/X/1Leb0x5QjwvIWB4hFwB3zMy53dMhWiIdaNIY/dmVEkK1V8qx7DHhGhZIXf+AvUk2DbwkqYzQ30rrQpvVfRakF3+LuzoePJSg1rBjmrsQr4v5FAI7rfsiMaxVD6DZwraBVWNp/gkrYyYozECBv/SH9kp/Y7j87lDvjpp5VZ61N+BlI61cd9UBn9QCQOBYiqGrOqdOxMYjSa2N0LnSYI/kKlegs99dkaHzyTzedDPO1l0IrpqDvRrb3Sdu3NKmc5pqebVkyd5T3nsU/jVIm3cC8KS2rQ72ipXXLqAyvccnbBBg3RsCY0X6MTb+ZmL4fvzOTPcxmDK5rwxbDPz/9ob1M4JsiDyCSpo8/E55VNWmTTz9zkYq0df3qNXGd8UhHFf2hwVyh7GvUircPRFd7RgiUc6+Ly8AyAPhLZCKq2qTHBLV1M6eWmbZaLf8ZIVzOFKhnS0xyulHMeL1Vb7l0GDZbFAouPPZ7ucEjlwBlon//KT/8V1m5NQ6pzE7YVsiVM79PZPThhq7ZB0vMyVuqviZe+AWKGqT/ut0/Xp7h/tC7B+MyGlrlO42f8pWL1RQFCqygLnfUwDGkgAN2QPIU2sPrGoAlfouaU6acs8UmZBq8WMvNW61zqTFu0cCW8wmKecqStjSTfzKRy65hVywdS+rTdiughMHc/1uN2qnLoAvj/wuPZBpZCPvtO4eJYPWQ5fOuZqXJluvE3ukx+ytGYR7WvrNpr8tLZdAyRv9RrHnl1+iZD8copoRZZzaXQxTkBM5c9FF8O40laHeTH3n91EtGUpTLWD9mS8ZngUcFGHuv+z1JHNBSRvtv/x7nvbpzPICKLf6wBSU18VU3Pdn/lfUoz7XZD25NN9BJEwzUrNU4xNVRV1lm2n9vo0DVtqVaby4Hqmrn1RO6tqYze81OI45XkUdiwKIQtW5AnKBWe5XvBROF2tdmwBWegB7A0dzOZfVmxZfL2bEdQaRn8sIjpCPy7iSYj/P+gjT9Gyo9ouSn+w186BY5wG2c+ZDV/VU7pcAIc56Tj7g7Tl67PlOk2S2sLjZZhcKuUDmI6y/iMWFqrjT1hOciQt8rtsGe8YUev3wp8VMFNFJD4dXfceMU6c24KeZu2/xmrrh77Tauv/7mU/ah0EV5LEcsJXNxrQgqNZT79oM2+xLpR2Fa5CfzdPSi4AlyDYkl7CAMask1wOM388FhDnhcpBsCtZWomCZVC8+dOH411NXmdu8XQBZ5t5YInaLxNyWI3ThWEvsVQ94fey9Daz6o8VOP4mo49/RHJoJcVULTy0TVssseYex+5vLtcxQEy68oIF03aRm1v0rp2mNTzJX5P5+z8YymonY5ZORU/7Hj4ShqBOhzFKpRI9j9ezews6g6/spLy7CIKb10yaXVBivLEaqXwsVlEIfKkrSfFgCdI8tC3NzXqP1TX9qW2LRsxaD2qpdNcRknbTXfTuZYYXPcJ9Itb35b8kx4i81kVaxJb6UnWYLVr409j/SwaXq7z2Oftbfe924i+NXvRcT9ZWXEj6MSwe2BSF/3J4KbZlm0rgDmSEJ9zHOXGiTgKj3ih22MuUlmh5EhTQUOPxqLVSQcLikaH0wRdh8HQ6Mivi5s3aKU6SPw5noCecp3HY9j579UChk65zfR04rM2f5wkZ6TAn6xPr8a9VOgoXbgqEoTkbY1TctJpmUtvk13DVsDuKIOYnNvNVEf8c85ZEHayrtYoc5N+5reJX/6kFmaMpyGlEyUwIOSxywPWTiRvQRE7oiR57gJ2USGsYtTXiRThtFxigC9Tkiefvv3d/RYtnloJ5kyp5TjZVDaPMPPpaTrzzRzxUACRDgLwD9PrO4zx2/kf8HsvSR71emExvyBNHlrqBSmKE6t6DZvb3l4Rw2Ywb13KtCua8GDqF09TrdFFlyZabCZS0Ujso3//nOkc30r5s+wUoQ7UNFfQZx154Pf529VpMDMv32DtD2iDEf71Vxd2uuJ2MBPKFGzJ0yvv+fTcDDHxk1XW2ASzxBgX8MMmY/etTSh8ORRtlluFfRUhoykm6KvlzHwcGAhCn8rRGPtnRVOt5D9VpSAOxWtG1DjUR3T6VaYUu4FqnbZcjI3BoYNITkbmlRFq8a9OryS/11T1ueAHh1HQwhVMpUGjZdxit/Bdokk8vZJW73CN3RkvEAy6z1tj+hfr79cDH/FgMrESM72mMkq6hQ/Mw6aXmUTCquFudMUdfqjqU9qZ3NUgrC0kz20bDKrN+6nzNIgQ4Z5bOdt3VJ5NFKo27VOlRB1IUaVpcDf5mqierv/uH/cjYmLfkbHLB6wA3fL+JobfN5KrV8PlkCWI95MZ4rNicWKwn9kF1NTzLmZIvyMMEsbuUyKgTA8AaIWSFDUKbk0Ssw78RF+1/Fig3nzyG0cqG+UV2x5IazU48p7KjVo5PVo/uuSVFZVtfEqw7t7yvfVh7Ts1jxEygK/j77o+jKm5mRfoT/vovgS/xJsG+8yt6k1T2We+WR0HV6tXJmTzkF/ME2HG5jSJrDjpf1U0kgFpE+X8CwBO+R1whjlKA1PP0+6vaDllWMxCVF9xLfHcuu9xdtpV0JFmUMWgm1w6JlaiXG5MPTsaWVQxoQ4vMy+b9UadQnXtUqPgPqZRrKj82cTnRoZelwMSMDvdvo/LMlx+CZ8sHjX88ZfVShO/fTpUZVoZ4EoLUpUAbrto3Wlf+Vv2V5Dph7CM0sIiooPVUf1nZCQdljKKKXjjz+LU5ELSDzTVz6Uvss+oIDaTVYjJc+n4Z/Yg+SXXFWLAaxuNtOCF8YMhSsxcnypplyTppsbH13tpzbRqLtIJrh5Jxy6/bDlMS95CHp74at82C/MFSpnnElBpBmH7R+smhttel6f0LC/o5Zc9WUpDGz20Wvu2818j2Z804+O2alSxTwJP8hHUVb16jiIx3Zr6MSleL0CrjL7zJkFuDhWYOodIYT+MAH2iKbGnFB6rTs6PxIxy3xl4P6h0MXdYrsEDVcwBQxGORnZ0irPJ+4cZXtWCWEJdfkxDbEm9NU0xD6KQdFaW+5pxyKyztZzwToHxfAWc2v1HChAtNZ1qMaq2BAl6eRr45xxTNgRsfL1o+hmBK5I0PvOMjaXlsBIa6B1tzdE3bLPh7iAcMjS10xQBl8SZmwafn6Khd8OxqTB1Jq1trLFxKzCtwjdd1QJZZN6xx9A02RcjuJG0qzGATdeuBPurgWufXoDGONKZ/n34BkyvwPOg7y9MHBQK3QEVyBRys7xzc1MUmqRuuLsfhtPTzWqiRstSsZBLLcMmuGYU61e9HZ8IV6+PLcz5Ha4EudvGWNpm5U9OIkB6JHToE93Iu9bQ3T6PHXtlv6YyYvUnZ/159Bj56XJdsM3tw1nK2n4x7xFxPRPjKh/1Ppm3K/Z3x5sRZgtu5qXKzaZtl2xU5eMQO3O93niQaHbVNVXWFMI9pT98tRQkB+8H75MkqGNYijeVl1a6eqTdzMniuPBWzolLAFbAmGEzLWyoxz2vm6WmWEWjcsUxgCYWDm85z1IR8SCR02jb2aNsLQoq9egi3glPWRKE5tt4KhqLq1kNHxa8aDQp6GB7tXJ4A+HZJRj35yxwp30CfaKCZDZVyEa2cXdxtdjoXQJJ9hwP+0r/93VUDX2ASR6a7Qk//7tpD41OcCmjrkQrvmbBgyApNjuMP4YljmW/OE5MHez2rXVLCuin86YYR8kDLkcNSmug/z3SQG2IRapz95tLVVcAOlpm9VQbN7pzUSHFj7Ghk89Ogy4IpJt372qo3lKWqgLdyp0phS9FAAqe67aOAe1GspYoPdPBcQk4gXvuTjJJr0Nd5uCIgTs4OrYkn7FA/QSP+9DpyuQnfR2tBMCc58w0u9NGvbj6w30HBOKcXlysSkv7FtrrC1ZKgtwsXv7QxZ7YgfHymbokDG934StXsAdKk0KLNNOmhCrJNiwgYKH341xh49VxpdQTqdby7FLBmwZ4PJo+yrMeOSJgAd+pggqZXzxUEv64lNZ5RdHIQPHtrcgxrfh8reSIie130LhhuD9CxsZkzTrNQ9UzQKqPAOUx+S2UggxuGgbk54Xtq5UbpTKiNNqUIQkuuiq4tcK5ewZV23SPVZd8Mdf46a/6t7uPx3vXTp16jA+Y+KShAcgv4Qvf0dJwdkU2OpSIMy42X5sXYPnQoxO+V/SjmqkQXuanlkRTaOSkDrX2t+jYPuxPvGwJQXUuYfC0XXYYd/4wj4Fe3yn+S5U0WWjV28pWaSz1kVEDC1gtr+n4NzKVAltTtnep9gHE5bsrpLa0OaabZCAWlNj9icWjoBrPAphHIZOIDghbs0MZ8VUwhRQsnev5q2RCM8pjbcR5Y+F1J4gehDi5u9p6shrl9o34uZxUzNT7mxmPdtWVcsgwqKTqvC7h3BnIUxTP3S61zGC7h0Kzx7tk+VChF1hHFcHa1M2vLf3RNhnQRLIm2hET2dNcSqFhIhnXoq8S3TneoiaqGlAqDufbCOglY/GvlwcrBU+bJqQVoxFo+87CuGPzkiSlR7MWxqhCdLTBZQlZltKMX0m+Y0QKMR8yNcbaTZVhalp2ILnFQMSGlXtX2pjKN/aaxOnlsPQM+runX0IrEIveHGvADUbtmpnUbpvjxxtHe8cBbILznPvSVzjFS2w/Tr/d7K435zE7SU3GOAcy4Az72rQ3yR7Z2qMM9mqNYdUPkM2/POCvG+DeupAwsmTuocjbtCGRp9eT0OtDZpeeZHo1SVnV3wEJq2RpxArR2TYW1Yxyr5aZTUH23DpPyPTpcRM63Rx+yglwkfLQlUqLBQRfkKScQSLvh5IHcd/d5aggPvie1g00y0vXAHyp/Ge+4hrFQR8Z8JdlaOeNhPOxWCA3Nz70gDJ6scI8QolJNgvh+Vbb/wzsjgp9VUhd3ByaZt+RNZ7fjRaWe+38726WjPthYmYmLm8YSkoD8J190n9yAo1vDrN0g8htNB5aEdefL953vlx8OKswNHk1STfkar5lXHqdfmcCkgw+t6cb2EHtAKGXFd/jz90V1DhcIyXbktEfUfXUxGIoeZst/Ke4csn2mLj3t3YGfiT17CSGMDjsJ7KZSxswRkrzWDCi49TcMAOk5Vyv/2nEqygo/kVP0Rqv+zZDJHDPc45Pzu/2p8f9X2N2CkN4pDUExKbkvNBu5NTDPU5N+9KrxPxuswr8Y9wz62++5B7Ae3gItTjtLl6xNWK7TEncCwyS6nE4Z6tDKKYtZqjVWEUvbDWECF8h7VsBjGoizjfg79i0Lday7CtEmUsuZWzhAUDwZn7DS5uwNFwA5NPn3UFp8qDflVd8Al4F298Ynopoww0hqAoMFK+mftoSZJNZQoubWPc+g6qJzO913ZTVwNl2ivr4GfWQBQJxYDv1QVjVyQa7gG+t2ZwU4LTd5YbaI8Bpz6pS+OcbUTgJdTthtr7HhMDcjWifuSy22eW5GBP4CWD6XRaGStUuDZzqTa/ic8+Yw4bk23BddjMnx6RqinJ3ZGd6pkAW1RwwI8bbEo45ZFhBtky2UnIFZLEe0cYDoceCpMjgnHYtfU3q12wS66X2l5Jqy27vV2I3f+U1S8/Q1NiiLZ3OO6vm7M1H25Vx/yIebvVgWXlBaJWZSwnNs50lUF4rjUqKZquz1BOz+5f9J+nsDUE5+gQ9a791neMvPJWGKdOVN7GQn9Hku72/Cng5tmQLojnu1Miex29pH8QTW9es3lxw7Wc/Ng2883tnvvcyXCu9OfLKfwJoDkVn5jpCoqW1NmrLp3gO3sawT9C/f5yhJ1Xfk9eruymb6+dSmXCKRYgi7ft66xEhfPWxvjtu166ZMWlFZLh5zyB9GuV5O86XYDtQxhg2SDzT/FbEvtiZbYS8Xh1ZAXMahftoqucRVN9uNs6Yo2qplrbiOswN5Z/lHPup1PPKhZ0D2DcVUxr5C/1r4n9pylPMxVYJc7HYAJ97HY0Ol0hd9/vxK1c6RKo0Wj9RhyRUajtflDPyNjt7Q8wCOLnZ7W8MtsAiROpv4oE8bR74ATu8wtEgBrSWx9vWCL14p87OVq5xzoEkj49pBzs7/2pU0MBSEWEtqhBj6mH1mblWrmWWafSN+c9gER092rOLdbDOwz9KcGIsHbD5vt3R/s38X0r+tR+LNVADm3qQ483zGCbsySgQGLQyIjwRa0hvEcWuw5VOnYEnzTDiL5G9rhosFdvYBikW0OMeqiNjlCiqDEmkSKLlna8cckuXSfuwuju3XSH1EjVEDlh1tGIA1hHv9DrTYWuHKNAB3lQYHqfecJ7tUphMf7/0PoLu1IKGNS6PbX1ApqrYWoiStxU/Kbm0BS9nu0p0nboK0Be2o1VEoYHzqDNyWlg0DnktMYSBLHolBB032OUBF2Lu29n3aDuSRXRHSmzKlHYTrDoYrqxjhPTmznPl/5FCrUQ1k8dVMv34nI1IvN1tL8OcQKixa+E2+N8ez4b6pCS6MjaEtD/JxxaBoMK2PhVhH109gca3yN2fxuKQUb7dBnmHZFIgpjeXbJ1UeVfcu3w5PdS0YSZl+UyyiIAGMBfT43Fhzu1lvp0JGR4oZsc+1MES2FB8VSOi0UNcyLs+GSZlhouWwLRKsn18D+h5SC5bKaIr1rGK3KPeT0p1WN1bfIgQUfhaVBGCHxv5CwTgjKpqauVCNz0FOAqf0daYNffViMVdgSwHv67wwEdi+kPu/IRe6VPlFgOT/O63swcxZnHBOLjvbQpvu5fVRzqJKW/9Hc6LKt1zVVwI6guf574sm8ct9KZ2KUrLbNMy7MU4cRyF9RVFfeIqOBcs8b1FYYs7VGM3DzS30yB5hhH8JorH2lV2042EWNFrqkaiEu465y8qjdQg6wsRWL2iPmmRKtZTzYOSGmEvP+lx7IO2bBSJ4Xf6Q5XIHSbmclVr4y2xp435mDv6qQwXKmbDgHjVrBPpF32udo/37a1ds0p9Zwht30rKDb644JpbkrOEUredcJeoT6wDfnojypVbSsz74DZDFwKEdPpIIVSKXRDkszCtiBfTOFVIKQ+82lN7BMYzyAQoysf5P7naLJGl9Bw9oQg7J0X/t/ce87WU8zoVVmYEgd0SpXX0vBZeNAj+HhO8fIRXuqUkSwnmL6rrHP/zgZjeQe5dn3Pm2R9y/N73nCXaGBmLIQl6nB3ezV3K37DrOoWblYdSB0tvwkuLmKCC1BkgMSgKCa7shmX7gWu7btlmMoMHSGmdTuYe5pa7bizzm1vmiIlt9ID21KPhwT2iteCaZNvTD79mtC15fzlpCQSQVW6ZxSiS4cAcxq++BUvujpvzg6zmk3FE3jPee5hMh5O6tKH2eG4MkU6HzvS8jqXd7zEe/fJz8ahIDEczleC74fNj0oUY/DoebXTylRMWe/EWKzdhsM39omSssS9meljE5Cbthd/YwP6CJXSi+Pa1C0X0z4Vvwcv/oAOifp8o+FMpWatlwu11qxXZ8CF1STYTFvTQV7mHkdSoq2DFJkymcIrWOolX5142Lcb7k0QNRq+NPf7EKuQPDRlqMq0Wr1Yv77jrphg6eaHqgXQAlp4V56E4DKDrxLQl3SODQ4VGCOIJZiFeu3ZT8A/dMa8Hd35CfKNhNDIeEEuVcT1qOWeYe1vUlrDtnKz8eb9v21GoWW0yTCnB/lsdTn6GNo9xg48cfqoTZrxzgaktIlYtDaJOpOqdnrmz9ml73X9hRqIfLJnoXDrlvYsGtZijAdeKE9tv6xazDyY7gfgR8eYb96G64Iq2ird1wsSYIEHg/6CGiWjRVq8zxbYEjmzX0fCWu+lo3Hy7H0x/FckdSbHKGd47nik4a7VFJCGuPaDDFZbnyvxF7fYPRmpd+DcTMUvsLH5fsmV6Ri4CxcjzymPBEicHt6VNAsxyKHgWMbQjHB4CMy5YjsvXEWmHs+Ng8gV45HEwUxEQvqIo/zfZS2OSOh3FbR+qkGNjgjCkq7lMupodFZTtZSpARffJouhC/m0citO/+h+AKQeWDr1tU6Nj0XwP0H//PtPVJo/6lv6nprYkG3L9Ww2qmX9Q7HbR3N9qSZk1XHqlKpqXJlrqp2lxe0AHPNUE+tG8VxS1hgiKRQmOk7nmlzrxZJA1k+kdHQJkN5x55zPFxZW1wDKxzVX7uoETAunLW6OJGzu4lDGFhtXR2xM2p4QwFTVIU8GJqW2Q1zAjRIpVvnwcOIkT0bs0vQA0XGP8s/lFLQrs/gvEGjsIndvt5vVkhNPkGUntU0EEVR4nNe1Og+5eeaSMBqvcdssUmfV0OWnd0S1dKWc4E5af37DVfXy/svvWf3mozw8jt3T6tmRAqNrF5xNUdJm9G9o8DPX9O7ZR6NKkYU+t464WCxpv9qtZWz49UxavmysSsYTUbNKqiBSqiWkZPGhK3YTJ0JV8op23GoauP88BFu+sdwj8R0qFWmBO7irId6NZ/kKHNcqI4Q4H3+ZOuG0F9q9ZURG2d+XfPffvd+VyD/HYB67ttlkBfnzsTG/teGjk17fP1PeqCMpoZluHVYi48XcxAJddGNpSlV/oCEbJuqKfeXPVdBA8I7QKQDbd+R9FSr4plpWpQ8AuN45ODS4EfYXZsOaNvowWRyvEyjazkVtWWQPzVTSj23hczUD6Lzbx/d60t2ZVIaZTIsDRzSmjlJoedWKxbYncwS0UVdrYsNAkqacw1njjfct1HqY3mM76iI+YIIJt8/bcDbtL5HtmP+yV8ZqzSTyw9yG0VpMGAgaIpPoe7EE40cU9oNvu/qSbrtD238ZdieewcZN4k5Hn+DST2EimbGpyqd23bA1U00LqPiOJFj1N9QzI9Gqpye5P+YacXqVDN7aVhCITxFYXQI+pDcr48/SjJ9C83xWtKtM1rdgFJQ9VtfrSDUDgA/ZAeQlXv3z64/iAfZJTFuN7ml4xEJLNE4HAU++kLEAO5mFtJJYGLDguEsMhOmjxWicxq+/+tf4t5c59HlMnoNVRWX5B1WA3NHBjnNptaLJUw43bGWdgWdYfPsT8LbOuYy7l+Hp/ikJB3W8VA24h3mIeM6vE+gTH82FHxWihIqJdbtlGXT1lKzrJj9cvlRJQjDWjmvU0OU24R137MA9rpp8wV5+yJ11o/3WmtSfKMS5QJY9eCFX0FhmD5lfqeFyM2whiIEYYKBJPHLbHZ9s00r/1wQcxVWVa1qmlOK4xrJ+WqTKbHq6mppd/1uumr4JOt+5rthnbH0TydD01zFLLiaPMJmHrWAfK3jiNyfnJ9NOo0b3ivipfovkiYtwWEZXnDO/9s/50qY6ohJIWhKGwxqaCvO88UldfxTxB/pyArFx8D4kONoz1m7DutRKy+paUtRvp/+ueYJAsFOt6B0m9nZg4NKCHntKM2kR9jXwSZ7mQIhJlMZ/LHktGGmuiMqScEMWaEN1J1XqXnBAG7F/UXVUWd32TPqwmtqOuUVEd037Io9/3sBLEbMyHlojepapJxYth6cTfOg/VZKje3v+UskXN+LVQl5PdFLjPpFqXCmn7zfI1XcBJ+ftyj3Ol/sq+2hsXJ2FEtboowlWxdtA2rTaQEGtMBxSOXhhiNdR5NCBwnRK6MnufL7Z+yZCIrIiY5D6Jho/OrE3IP+ukdl47PbikJJd8czcLenfMYtst1mUF6FFjBtnRePkAkshrebE97Uv0+6cijeXiBebCiuN/HkH3+ur605c6cs6k1OKodZFt7tc3OzvfNMlPMvWGiI9TMoPQO/E2ZI8ulp90SBFV9QDTOiTWeT1vNAW/m63eCOlaaUXTJ20chVW1yCn8gI2C/DLJ1m4vNastCmPP1uEVCsez2IGNFh0EgTFAzL/DVhO2eW7e3SF8ewFs0iikGgG6L084KvFlqKVdltJRBqk/+TPf0TYTJdjRlvyewt83bY71oFnSnXyqwgOCCCzq6qEinBdZ8t6L8f9T+sUWE3LoajvhUiEZdkznyigs4AbLBPWBXUkbil/2mXRPQgKEeacYPzWH6uKd+AEjdgVqNmCjVE7lRra/BoW7JRbzVUhZvvHMKGA87UKqcSc1VAKTLIuYqt3BRYBKQ6YtrkxKEK/P6S3Y3Y3Qbzh3CTw8QQGfedt13BATmGNLOzvayz49jlrS7qnIWmGtxy+MI9elvYg6OCVbMghtUEmAc0SwsafljGvFuuPzR3cKdnS/l1ZqmOedOVDKyugd4fUHR9K8VoMK+86nNcJHB/X2wNhsGf6x1KcmvhUB39BmedIMQoHggOgKm9Jf26+jbp9gG7fRg7mmQkdBSgZJfH3dzsAPX6doo8tkWHrQ74pAig6EctOz7AnWA7Z3edn3OBASneZpumy0jIYU0qlxvSMV163Hb6YjJEqabbwhQY9PU+l6F6PR0iK+0oNCb4Qqhs50x6nEuoEhvtFCDFSCOMcfaME70XieGdTz8zUMw0nj7gX1Jo5QmJ9udETWDExqlI9ZQgbNUk1+WsAc+OZxkjqt11pSrvVYBTpDfbg4JSnaSBa0NSUnrDtFPwCIzpI+0q94jIx5BEG8J6rPy+6cip/cqvac6lJqYEegrgve/Oj740XzDnq8m0U2MkYQijaPdDCD94xDP1ef+DoibhiwTpGu0x/CRVlxijmuseqVM0dRVMF6KdZlUJqoaDhgK+vHLsEWka/p8FP4dOI3wQRNIazyOiQf7oX/UrrdSWlYu8e9Gq6u/TKXLrtwRcWDTI+e3vV5kxRXi8m+WgiUhSVlICZEyofk+X1dEHVxvCs5BkcydUGwpmGhN1i9ikhwnDwo93AxnSUhFZCI/pZmN22Zvv2MVeUesuTfQENVdqdkAp5aA37aMRLQuAZsLUSasvaoUVmlSZNnfmj0FY3bH9qCZO6EcjKqcbYcMn8Y2EmtxtJWFMXjSWsd4TyY/GxUEb5U1G001hFJs0wwJfS7R3cUgrCgDau/hazVPjXyk/9kazbSb/I/V5LUvQOrUvk5GynUAH16zXB2tgeZl5wrnmmprFMFpuL6uaaXSezy0zF3J6kPgIGOWPo+A/KJv3c4pUzkEXKR83s7uVaWe1P7ICA90Lls3jj5iVB6ugnO1nLcNqWQCaNafuDGz37PCHwbe61HXxOmrYUYN9e9IywdukZKTgNqzkF/kPn43e9B+aF11X8lReFsMBhF9/t6tArVN/QX1N1w6yEkolqb2bKNbeJXXn1mSzHCyTIkTPF1khiSuCkJA2q/Am7CzWXqqPbNaqQRd6MrO6VXrHK0M7RvruDQR0PkRZF/+3Tdri/Gc3PlKLmjI1XYRsGGgFrFGFCrmNWCsNYCWa57JXEwPpZEFt2qwjY1woRpX6h0pu501xW790MzS+v6mnA7PUYe4DtYK03YuSmcrwn/b2z+L83wtg/+2NtuEoSZU2Jei+jnAagN6CN+ogoWepq9hfdZ/aBPz1IoTyP+SE3lnOcdJ0CmqQQ5FcR9spi7Hm1dHkQGzJCMq//egMLvopkSgsmRZFrOfEj2EKHsEw+XivEqbfENBLJfOIvoJMVUaSQ23Q6y9RjdZRuqjUIZvTtZwOilHZbDQKu0R2AbnuiNmBDqduNqwqPQO887Vbb7AATecMaQVCY6JsvPqbqlGwjyLYsWv1Hd1h2zSMmCQSA2q1BAgum7z/RV5wq+XVMk26n8feB2+z3YQMTXPaaRdEFBpepfN+yYlfhhZBeBESmop0a438Uf/7Q/yfzThrqypYJA0sNrhJYyXksbYoYSfiO38OtVBb3XohcbS0LQG3XE2EZjCh8dlikfi4nUU5yxa4wUSpL1gZwpDP8CrokoaBCQohJD/duAS931iAkJJWDs6IQc74/qbNoVI02VIuxKPyNkyjkIKvbfPxmEhM3vCy/36M/47lBBgspC3crhvyyxQhhPZUiSVp2/qzhaQ//bnpbY3J7QJpaaHu2WaRLDGnVQlVuV4KhhUx6kIV3HseWlBGLxulAY+71AJUb1+56vIx3AjTkQF0yw8sf0LxWaK165i0nRrCpTtQCbVHuo3UYMGxUJMzA9aKtXELrtS/3wdNGCIJ8RYgwAyZ1yHfl5Wjp2mdQy9haz3wKylbU0JNT8Fzz+ed75akoAjSClHY46big1aBacgZGgxDHzIFfbzVX/F20e5dkymls7Zg9w74AjKa5XL5SCU6iVbui084yVtovcnxdVEijmneO7SJlDCdS1sct7I18x91h05QHDe76h1Ir2KVi1lNtgnlhBN8SEPHmNOnIhfK0ow38PhK9Mm+1Sl3AAB3UWV706OJFXDJTicwLDF7DVIgV4xHGkNgeH0cMFpXLT8Ws1ugOOGaaUeITXlmkdZe8PVAWxYtYUZUkw+jV9VxO4A7aFX5nGYyFUZYonSgghVqLKFY9tS6S0v2SFJlnUkrapmknXTcE6Qs9VQCcQ8ehN2Jx7eu99oc+5iLVHt5T+1hlgVQ8yg0TzvqktQxG8xSzKIfSkA3MgweQhH16XyfnlC5uey7XoGU/LcMDeVQon0b1AeLsVZiu7OAT57c3vd/oQbeRg1bxLu8i5ln3AwzJ2vSXndkPTUdgPQqYOSn9kSC+2sMIAxee7APhbSWgixtLW5uWyha/mYcIce1fuwHJic/MjQV5ncBpkLza4W4HAc2vFuByMLR3q0rMltmG2/G/OH9DO363y+rvH3fdQ3k5QKLgZKSFbDtmLAtbWYClQ8Rq3eilb9QymARbW5WJbruE7Q1ePvbpWyBwym9ABgI0k4/oBZz/eO1l01CmVvQ2GSCiuzu6XvHICcmnLKpTNyEBm+UuD5sn4BplWaLmFNqsfRgR1kAfztYvf03PWbeAf+QKVF/7/WJq5M57f1t94FBQwg8DRKfNT993F9a1RCTV8uVvuJnbZaQ4gjg5jE+IdPUUN/ofX9K0diocrsN5JBhy6AN2VxOoz+T42I2iMW5rwhWuFpiWD+uOWP5JAmwvqBg6rpIk0cNzibrQbcATRo4w8cU9xtSQntEbnw7EXauK/g6tRl1H4SW8tb1KpK89J1mrcqugvhl55MdkPGjhdAqoR3E8H0gxmpd4y2H90uidK/A6f5y+9K1AFXUXRRcdODqROX3Q6ZXFS+Dgtd0lUd64sozvHwpf0FcrOcP3Kn4OCXeSVk7iHZkMYIOhu5nqXVmDJkXZxCwkR7zR7xKVClJpH+LBg0+QHi9CUIMpe0VSvlg3vj5/WjuYbOAdpqZvwyQ0BDuu3Xb/bRAroGrPtqFHFlwKefdJnEhX/UKXohMRBnbu9w577oASgG80LwtmePDXz3kk4AfxkiIzRVhNvcwCNrY06XzksreehaODTxglf/ff/5P8D+lv+qeA1J7ISN+0v6AWgHFL5t/pe4pxUN+vtosfZXNKgDL+muJh9iHI5KGjHFx9t2ad20GoOnAV7QJvb8FynjVDoCb+sCcQIgFVRHOVazeiqLCRWCxeL15FVOeyiV6Oi3Koxy+eWJ8rn2sy2ezJlP2tdu7x1bwpa4CME4DnKjo0Oqrid8WPDpKbyF3jEXVifJmyYrn30aTNEyakjgQ39m0sQ6pxKwxk2G5Bk3t1GfxFjDHrS17Wj8WA5aUC00bk+a0dUUw3cz2kKobXNJvZoelUceBZ7CwxKmWFsV85E4E4Akqy/HQvgtQwG0kmp01vJBLbNEwJ/91CNrTLhtiNG+IHV2feONFFfyEcMxjoOL0Drhj+GN4aVnu1ho1XvaqoFXvSykWIBn95NjnpiFIvJceWshIUEmfSDsHawous6U+80y4mPWSJiRpMyokCl80HYn9HnIOnV2UoB2iETVCksyoZGzyNwKiuY2V39vtb67VoWu37y3ZBbAxNjnZC/EPDyhTLuaaKGd8Gc3+V25vmSdIGYnhnyIHNw3oREjRAWvjQdMfywOBdrULe319Tom8ALRRqyjifPuudMBwPQr/Z5TGwCKr65+cU3yIRBT9pLJ5ekGdpu/UHvXTKaeRkNEHY04cHwO2oSulEjeB//krj3cHhaVyyDqyWrLAFsffgeqaI68ahVDOEkJJUGsSoZ+APQwtP6CmrZszlM8nZG9A1Ua4rxkKfE3WwfbT5dW++hsH0cOa2zMkAU8NKlnjo3Exf08G08SbuJSNtJ7ty9ff+Ozi+xxfK9qKgrhn78o3qh6UjOKSMW64pqPnNzewJ78VoZIg0/BQ3TiONfsyn7fiKdb5B+x02aT9CI7xQtwCuxbwWwY+3z2wyW23BNzF3aQFLsYKN3kJbPBoYVZW8Evj2DQ8PtTBd37B3q2K9oYUKzEMAG3IS5eyO/ysYgRDOK77gLS/Lx6KuaVqYpalt9mr2aDxGi/V+f5PVXw9JZ9o8CpIKvuypmA7xh3Qk0RMLjLtDRV54fqe8X23BhCHhBu1xdQgUxW1KMpUHBQBrYdKRRfq9UxLLNvH5P4ugIpom6Mk9O+ZmPOgWZE9tZylN14GfO/ED59CL2XxeBRCIrePlJZoOv4W+6ENTDBhJSVroEQWt0uXquH5tpOPFOMF22kszin8zwv70rG196XGj1cRxaHDnvub7quIQfGJ1N2VHnmqYTDXRJ1uxnHKo1QffeVQN2qvpzuDggvYYHh8in9tCTiXX1bXWa3vnrLwNlBd7BU+7nq30t2y/pJMC+19548X27CT+3N/iuWGOIesuue/mT3l7PWM7MqykkrjjlPUDFt5JrcI6jyuIMxqtIvdzRDR5/rrQudaSUifOZljg+nXzNPFs4PCr7+Mxtn+2geAQlnn6lYuHxyI39ns6+LXMBU5fkIJZFrUYGdfWxiqBm9u1S9LKKT5tj/u3zO/bEYpdP2lY6XMb89Paoe0BroU69zwwc/vCcKRNG9av1JpIxIrLR7zyyPMuKYUt+yrczMf+6k8kn9K9nYOK4yp26uJe5z/Gd0DusjngFcx4legV7V7OqdQ7Q+04GLP5AQc7+W1fA+mpsWnyhEVa87eLH23hiAMV7vulk608fRPd5RhSIlownaxrGeOotEYV0m1rxSCrUZdnjf5PKuToCEHcCvcfYy/fe5CQVfophiwwl0nLmZwYN21kyYvSgbW6lZfPxn2URuMNgTWDh4lElHC0fcJ7i1wkaMEopB3YnHfNcAqUT4goZpIdgnyQt/1MfYI/SjKMkFUN8+Ydc7MDVJZn4TQyrVzstvvRiN1vTDNaN1tolvto0PQMFHbFmp7Bkp/OkLyZI+3b/LC6nBH1AKWOpKCTWIQj1pBD4DEuZVBznV8de2vJbI61NCgh2bAUMKGy4Lgdq58lstYndC/znXjgL4MxKVdf3lt/euoJcW2Rri4hBQ1PUcGT7quMIMqeu5MhUY2rE+bj0q0WbeCQwNrfXNP6qcyGM+brShZO0lBN6WDu0UeGAKwpXStDG3wIuZBWNXyBMOzAdf/hDcoY11of5mPtBUXJ5aqa0Q1xZZ9sg+4fQbqBsr9tXLgk4JOmYIXHswlxBJtZjntJSknN38EgOglX/hIjCTX296D6jXXYKwwghLNMddLmKvX08uU0+lAj0TMZlHXK5wfoNOyXOOqIwSXlYZ2c4iyq9evxAQ95vObCRdfG7pbbZowggUUd3/VlqJl/kjJ4tHT3FirRhkdbwl7TJlyduttEA3erz1t2Uzw9zOYBFS1CyWea86JnZZ2est31LEmdujzF6vHkWDtHidXT58u8q3zIChYfVku+Y3eFmJJvVHW0BbPjeo7bi50P0bESDCuWcz7dAj9Co9D0nOXaZUT64U80t0d6lEL22KUkwP/7QAWTAvnoCOtkMgfsCuwaxzJP19TdULDy00gAoXSS4rKeGmyVN/D5a7zAWyOkGs1t89B0MX2NVhi53w8nxPI0kgWN9cxpcQQ2hCjek0NfS+hp0Z2SAyQjs1R4C6IKYFTzUPnY32f+k7jta2HXAVeozRzA+E6zC5oJkmsu5Iu9xm61qz/AfLCCoRasUKSccnH/lyCv7oPIWJQSNdkywFI16xOx9XAhgSmYEMUUreiRL8cdb6IjWEMtO6ZTMVZ000SdczvMCSvrtxc0QsaXqoFVmWQ0h/LEalJH0xrwhaazOq8JB5E4z49QkJsUcjkwkHIlbfagV6ygm7+a6GI3U7ZUhqxKx2JTWtHaFxAEIYP4e5ax+ACqUWgkz9rLOe5EyZvLvJMpfXa2rl203VgKde7sSk0AM34m9uHm4rEKr1z/4jQ65Mit49B0ZXiWPK9+SPPdA9oxkjXOVwSxq/yRBY7GekB9Nzmfm7/BD1Kh6zrz3M/MNnmaaZNeb/FcBE5GDccmW2x78FBPog3VRivQSfoe9kPSbYzrkXPVz7XORT381y43yBKw1WZrXUrtJlcEJdh5nPehQHbZKVmyZUSuKep5iPYhc7YtCbpfJl6D7KE+yZhW6xl0ZxYfWA0MEsGODjpYrsOwwYxygUwUEk6fHTHNhprh0GUaARuz7zeG/LHhkHwgvlP26jMGgnoxJUbqZUvuTquq7Wjv0WpJoyFBRDi9XN3FK+0f/GE3EjYh+n7zOvY3eXdtWdNH2pd3Wx13X0Rr3r0KCSTnnh+850tcLvyVkfB7ZTxYeQL9IzGsbDW0TTh4VSRW/KVte1ZTtmo1BG0Phvm+ZRWE/+fsTZhS0CpI+6G7a9pwsq6rOYq6GJAAz9kuRZiD0XHOLP/vrn+qL1hV4iY/PPUkel4IPyvlppfOrhc7UruK9TCo4efvWq6HrW1wvM9x78d4aGDCnakWloe4+RYfZHlK+FPW0I/v/1nwqeLgpj+VlWMsZGKeymggQUIh+Nlr5IWDR4ZYn9OO9prKUMeRnk1vqK++0iMSR11PMyMclg9UBIulh/70FlrkaIC0h4JozpHqrRz6lBjri18yZSuyPBnKN/PGZ7XiVnYfZKSEvjv0jyC+8E7IJE++57COggsYVLYZlkR/WKg2nRZ7s/mnrKgFkXTFh3dB6dPoxpOkIRxyXfFm9Wn2seHfKrjAugNObU5zn+kVC8G3qREchsg349ToZhX/F61PPuh1l8lTtGCV6dCZ3uye/VPkXIehpAc2X/xKKcBXPkFLpWDFYhJVpqPbtcealFS+NzLJ3KgBPAFEMbuQnU/ZCdQWaZciHSFYcnbRiK8ov4SocoU31ez0pR0CxSzhOvspBIB6Y5z48UGSQyvfGt8nCioJJ58uXoJ4Zl1W2nYmijJAjzPFD6KdtCFDN6uxj+qUsn30zNKfuwI4klfrjk3KEqZ7iEYhsbvhfG5ZzcD+uenUXV7zHIvSSYDnrSIknihY5px34GXEJl/hnYvnro+TeYMgZl0V5Xi/9NGnPpmrRsWPgyiQ4GNkfFoCvwROVxurMTDnwGwMjiyBPNozR/ddlPteIWaR+dzgmepRIKwNrb9bWnEIX6kI9PM6mNM1KduJgpJqcwwMQWfDyaF1LsM78eNt/Pul8T09g7q3DdpcpxWw2g7bi0IsFUaYA4nz0H46cPEqWHwLFdRdvnrMlf5/2Vo1KpTamKiIBOd8/Ini1wnGuLIRpf4sTclweJcp/uqdM7fySbe5V4UNl0Ocek2EKsgXN+//k8IJrRK8uL/VvvQ0d6lHWbKLPCnkP5VXmupdGX5GKS22jxHaXvyAPvWI8CzpBSwCHzgnipvG3D1tdShY/BI1MeQKBvQgVpv3TnhUSQy+/3UYbIHuUqY7P0D5sM4wu1xLfa9oMAffheAzS0ocZEXX2LLdt1P+wx/MBqdQwbC0lzPE4mRxHfqbglU7WmVXI23L3vy4fuoZ2guy7ZRyHH8LTUWXbXQOe6XUOk93Xeq0G8BGi0brQHYNxTSm05fizceIYaDZvJm9r5yn8u4z0/0ztggIZ7190NxzzKapaj4c+17t8Gp+LQkkzc5UZAImBu4xkmsmG6y+KmfZ5s4RPMfNCRRp8Tfo7/+/S57ISHnXdCaqTpXoOiJ5itqRZMZQrfLszsn7Q5gC0igWUgwHD9f4dM5/ZOgm9i/QqaYNwd9fF6SJIqYQMkwqBDbc9zvBYGi3gh43Sh1jPG0imMyL721p4xJrFtsWEvighrR3B//R7dIM1juPiSlN1YVPaqOn+NF+KDePZZ1rLPsmnIZH4tSjV9lMpOmzhiXoUDhc91bbbrTciGFjqsB8Igul4dSQgR91EweFoihsxqkcuq3fF2YhopSAmL6EVX9lwhG1WLFyERT6J18ShzDgc5dbR1xmj/HLmAJjMQBiJExBfoyZxK8bGM4MZIi06OCcHYHUjYXDImMhQKKzh1wRGvLuiCam9sYqH+D1fW5WlbTa7gq9nLWhfM85di6yNIvq2s2vuvsfG4nyISsC8+Q60bhtPtvm96KSRr+01Sz4tBbAJqTHw0S8pPLhpmDtwN3p4fKPDjaEi8pDVzRRamhGHtDe2xGW4pm9qy6A6+1cKPExShYyGQ8tGARx/BKrrCat8d3WwnbPf7RxR1oZ9NqD+mG99tnGYDOqHfK2YW+3aPh7gI/9e4XfHfn/0w6+R5BpLvf0ebv66rGgCWZ2HjNOnI3wmbKfng0HdVmrGWX3O3A0Ul2A+HrXlNzFtyOcd2VvPU+MN9VJfJw5uM4fly2nasKRLoqLztIyIpABN8UfyXeoVkDJt7IjQGFZFgDlFpriUKTIF614gPEA4T3PGB5UfkPouclNDS3uV7msnlsrr6WsNfCl/yNr64ii45NUZ8W5By4MRUlK3PlrJE9cdVwBawtWcC+wZivGl3kHt88Fqv2wNKaCU6qDu69JHvD7KsRzxQzNUrDOgqFx8AzSW5Niuv4YaiQmKgAj3I93T9215Sxkbii8qzJebF9tnUAOWz22Bc2/rUU4B3xLqmLFtBoE3TazLTtO+HEEPV2IVQXcqWOIkLYNURaRJbSutEbIo+0sSSdZ7h8MxJM8KMcFmb8/wY/zGlTCoQh7nN/pHpInSLq3hS1eO/uZgrCeGfZTfZhjUP3pwlAQ+L399h8MWbYS/x1wvrlpWfgL943DKLBnh1geh3a8u3ZjGy1ICUtsYg1t/haRSlKfdGJf4kO+bl6h+yJJHOg9PLn46VZjvHYvthBXIROaqhO1Q5G162FJ+09yV1jDgg8okmfonO2jPzFUs9/DBlTA94jWVCIDgXUC9tcqUobo6e/X9e/ha02H5n1iwQa138XKmRDyANSVYqzDJ//ILNTabkOWtSrqaOXjqu/Ekpn3UGcKsL8KuH/645wodMuykLUadgIpyiRqk1fuXbIqmDLH3dtZ6pmCENVUEz3U5AePzzhnhfcxlxOGo2Y5q7sOLNGvvPiGwSeUqYzjc8rlRP/v//lzgwiWvR5d04TjB+CPXELnH2RHTmcp/Ml1Ywgc1i8uzXK0nrG2B+8KcRKNwGFz+QI5xYJGOH0Oy4btfN9cluQOVV/h44ke0UNcTTCjBxUJgQ11QBQ2MfoCDts8gZBH2luyEo5waLoYHJmVFDtd7hQUv/PDlPTMkllOJ9FNvUpnr6IkSvWHYPdMoxTAVLweK52Os1BTf8me6xuO61MvdjLt/TsgD0Ftnv6ViUUyzB68CDK66PSS0xgSozlw4hNF9wDZ3yCNVEDaUkDQUr4X9Mp+4k1hySnFA8qrYBSahV2EKMiR02s/r7Bf3/N9PXJUh27FGtfLMudEfe42+nFbBs/Rr3RU591Htsf+rpwQWA9kzn0XiIcgcasobv78qKnKQQNWlPSKmNGG87y5zxO38rgE9hBoL1N5QDCw240hBvGydJi9Co+OP1fpK+Bn9PfGsSETKRkWqPJsmI2qL1Yvb6L4hsd/KcuBh2jnRJsA0L711GHmmfw0BOTloWdcUi90R+CDOn+Gq8X7e3jRAOFSbjbc82QMMiQRNZaXjCnXyMzgXkJVnzEm0GqcrmCN2E92MXWC4s99ayJ8lRtbq0t58Mk2d91XX5nrDZ9gjd54nuTUAnRdSUUzHQdXgtX735qQy69V0WtnAnzCeJc3fLazRGm26TNuETqnazuFtRUxP002RLKaWr8w/FHV7a0Vsm9oytPiYfk1PARZvIIk7kg+Pptp0y7VApU4aOCniQH1gIdx+qQlvbKGaJC9RfSo5XKjgNfv5lonP/zwlKfKGriif1PIoGZhZDptTm4BDqtdpljrcZe4bgGOd5n76xxt/NdMktL8kqZOnlcpeXuyGUO+7aqga8Gv1+9UyaLMva+JYz1Jtwq77xhQ5JcGh04ySzytvDRquWXcSEGtVAlDvkHUjaN9u3+5CgI3ADYymRku/xFSkJJ6bq/Q/LaQlHPfQ/k5A4utVgpRx/xqFeSj5KbD72zBfVFA39gcyHxZIvVIDFUvyd4okur50bM9J2tTvOBiel2u/nq3RDr4bDKFUNPCBTYU6s9Ei0CUZ/o7xgOQ0I0wQ3r6+X2uvm2t4rc1wZAU2JlA/cNTb+qaRPGYfcjQ/GDGSN1tE+ar9Edw6eoBlYf1FdDnNRzDWJxw9XlweleZvqtovvdaglL1LQtrtXxvM5V0NBANjBT56zOEHxISI/kuzyabCDQ0EcqS84OeFRYM51oexkRLfiCzBrJZ06shvwZxC358JK+jvCCMeuWxKP8txT6BxStn5YE9qxJpoAB+H90nY1iJDeuqwnZ7//GFjNdIglA1dmbu2eTzIzt7mqJP8CH+5N/pfDGoBizD2tNerPIttapDh/A0B4hG/k1K9MFQSmIz5wYWoSiC0vd359QG/VNWBNPJdBO+JBBYRYnto/zAoJG1CPWFmTXxeDH1v1OUkouxWtq9vplwQ2Bb2ZBK6utzmzmetPy4YdmdwD1bu+q/TsAKK295+QsFQymM4l+jq3rhaxPrwrkbrShVjudmdB+S1a6TuLTZsN4DdGQtx5vC8Em01QIKmKX0x+02V9d9O2RYM+zpvUTF/dixZopA2fbgMU9ZYgh/TX4r0BLcUcAYTi5dBObe6n9MAkRAdfUeIvN7nO+V0epCPKCUc7e+PyfXRWtsXUPh2DpBUAxKbRL1h3xgon5ZDiz6JWEatOXLDfBCWNrBSXs7sJ0ycI640IjYKSsKTouVSPlhr/neLsEJQgOXkvkhbu6xiRm/Q/74M5Vj/B96Qy1+bELNdPcl1LHgD7Dgl8dx09wawg7qDEFHn5xxzAFhxmyAZ2WnLgPzzZRiScm2eJ0oNuFWYMQXJ6BCjdiYE7/80ls6/nqzXBnP1CwsXZqnqjs6uSxUqifPEC4LoBRDebRg17wnwxz7GhxkYUdJ1vI1HGyYY2L+PRUgzsmHD0nzwkjqBXaWRe/TVZEmpBQUhx3GyvFxi2INYBK4VCnRR8ea+zqI1DFlxT42q/QI5SKZFZ44SQQIy8HuZqlJQVTpwYVSg+j7LvAP+w8y7vRgKI9Jx7D5QjLpkBXWBX8Urr9eRC9jWnDdoj3YCY4PCGozRv1KNnhxypRiTIpIxZOdTYm6/2YWtYAPtsKOnPbsBjoXKf8322a5cekR3kDdxxMk4yLVxc8TOLLL8q5VZOnle4V/OLeijEa6xVPb9495s+Eo9yBkYInlICeWv8g9LD70p5f5YjwVLgN3rMeGklixgQtRJiqkULZTInkqdlLG+YBE1HPwIeNx+oI2efH/GX++GR8ZlXa4znSiYPI7IQ0Y1JDFYHle2xxL4ck63CexBbK1Q+1OvP3WiWJbBaQcQKGCzthXqtC347Wk06RBeFcnCDy0SwB5ERrlBIlAJ+Xcm253XYRmTFMurzJw5WwKWrZoe1NWgSY8qVDVqW8cRa9Gg3enYWNXZX8UAVoZeuhB8Z/Z86am25MSdKx6TYrfYrQtmXOBRuD7bquddn9pamRC2BurulC2COrF+ZicZ7XABpqmCEZCrV4zjQNaNN1YBtoyC2jAg8f2jceWYb2phywKxO4DaivY9+bbO6btwkecuIbz1x/fukZ2R+O+PMabkzdOjXjymQaXStHC3h8xlTruFiyDM8C7+OkdPPI4N768/t2t+BnybHnOsxB3bN+3MlxgdBB9ZgEICPOM3YbDmmfMemrVjGzpaOXKV5JC8CVYORmCSCcEpcdkUsHaZoNeh6B3aFhyh3sZF2a8NOevyQf29ufvEDw2g60wa1T/LBGvyEWGnPc97knCNFfPtDLiEQWg05xJ7mesv8wVMLMDl7p2xm3fB/+vyhkGZsDpjmgn9AhIJcYfYqVB+SwzzTk4GkXpAk4t8oMAM9DvkJ9JN0FsiAPe56nZ3mWDZtZ3wHJPtp5RVzdecTz8qTNoAf16UOPKVoUKfsAYTbXCFkNtWFS0XJNGMLnUZrI6X8tb3I+iVJ6+lvObhurg/k0PDzjWhSMBmuadkDD51JWD0Q56X5Dy5sQinNKNjHSwuPumalvht/kOUWnMwubeUozCGTU+IWWnQLmpYlOHTKLR0maf7XbdG1i4+MdriiTxNnERdwaMNzsEhV6oYCmyi1P5lZlmBtE3pT5PjeKy/dhTaxc0HwIhIhdBG2L1PTyPPSifDm9+kPvYbhvUqZW/IA0vv5L4QAz0ptvDold9Sm6PwGsUI7AF3wZPcOGuMwkmlKfA/9kQrJT0ecRvQK7wzcOYkewuPDzq9fsxkybFo8PQIW8uDFeMHmTMeC1gGlJhCcUZw9EdDGMW+xJ5lDj9ARu3OIfS1fxPZAe/wkl0a5PL/spO36eRIy1JvYZFsOQYjB7oFlr+RfDxSNTuUcuze7ja31RVQElN7s1lLngpiMZRvHw7bIfnwpCyMt/OemAUGbvmClmoGQDgBE/ljLACDwuSvIBTiqQEXTeezYLlgx27bSW666jUqs36QN5y3QxabwMH8yS/EmtIFJi5VKHJ7raHvxdiqZr1Ax5vdnwjB4J9VI0IOPF749QQoPqvqyWZz6jAeaCqTphXvVDL8oKT4JqK4E+3pRnebVpyM56UnOnBftsmbfZKZXPNaBlNv/q22LrD9motUc1Rtt+Srykom0yxTqq0QkXLrWjO9qCVohfTFyzVlKq44euSTyuxqBmRpBUy8NtdRUsOV4ad4SqzPM1PsRN6zzv3E6NM3q++tA7NAspjerRWSZSmWQ75qc32ozdsjJeaKd1ASx6FjGPnGH5ELa/ddxFsdOm2En79SkntSk8cb24eW3YmL0Oi+qBWI88a/3zxK4Z8vZn8HMHZP48WgqcLKTp98bMPsrRZyZ57oxn55CMk1XRQSrZqEb/Zt+xIk/17BvqB4FKzLcooYQoHFO6VSYj3vHvPA1PPMgjtKZOvUvVrR/92hWkwDDss+HZiOpv6NxdUbzJnYXxmkb7JFHkl4kmWTERM/t5wwbtsGUF2MIkqLA4TVXmUTganiAMHEk5sp8KaVVSEalVH3yxYd4TXwyHdA4Y3S9x00XLk0z5E9eZm5Ix+IKScYPiCQRTVkDiZtc4jKapfy6MjmgrVtcjqqPyLCXNqaJxqds8AtqpX7Dk1D4TpIWJHNiaLpnQDqVQBmo9kpw7mJRgjw6hQw/7s7sYYudacuuupr5IScHg5zaEkpHbRQsm0GZwTD8IuNHw0l80cDpeGJVwfKeYbc3w9aJtvuN37PxlAuM4Q83s8dhgAa/o6hH7jZ9awk10dIYjOGVrZmxfLiFwCU09SNuXysNeiOsp93gzHszxMmBOsUgK8Tn9segVLvXRT08mZDihDDVovf0IrfNOKNHo6+Gm7+cL6aR6boDhNGR5eVD8zmR4l5knmkP2KDA6FQka5Bkcv8MrfgEUnH+7ezw/eN7ixvWCmLqWPb1Zo6Yg11JOPyoRY5I17B3MuXjrjcFWtEG3FIdUP8C/TjPDtqCz8w3O9WBerntLCHAKCkJThIxjj6DcnpvF57XS908VP1eSlurZWDWlRzmx17ceF1bSzKaUkSEIUv7zyqtSF1XqLl9qeYgxZHy6kzQwlLtnBvpXgX5jiaEWQAU6Va9EZfv2BDluK8dC2XLKN+Ap0an9bj+QqjV8DUbh8oCLxAVFMtzGoflNtGZxyNsj7GVc51bYa92TJBeYYSC8GrXAV8UWCLgwrggIwfJl4rVZGw/KvkPdJ3mCjkF4ANES6G2PAKSlWnC6e/9I5wKoG/1TU+05Cfow0/gu6OV4QzKgeK/u36+o8dvpJeRSW5Bz9Sq2uXsCtMujtfQCCEujGXbEMEQh+zx0qAYz5T354/YbqW4iNWhzGh2YPGD3UGb3qGgwGJd8RbADqS40aVuLUXB7Fn1blMVwGO1kGos+k7AHoyZlk/elYcnXCh/6WVYsbtWAPcaZ7VqmJOmNDYVvw+cCyOb4d4leeWQ9rk5c80OYnECZbw5E7Wm3mYrpf3ppLmvaZ1MsFuDuJrJwJ+pGNP2Rw7EQ1EOa2pfBdivWFhj/KD38AiDWmKYLG60rfbKRtSXVL+ofahB0NgL1a/wOKGJpJ9Y0/COo7Kqx8yM+RlFKo1vsMMa2PkHJd/cq7nAHmiAlHItGf8aMoA0evI00wI97+sFFqO8j4dmfoRNCqNV1Zv+tCMF1jtUfZaQKGG/0Djq10VDeviAno4pMOZF+BmuXseesFn5bJoOqzOAyt9SveTDK4IIv/C4RL5z5y7Ij5AyeW0ErvYRH2RicbtufDj3amCQkehrNEu+Wcn/gyysZM7VaBu8XQKq0rgX+5+hfbRCj0J9Nckak0+xPebGTfeTYAF9WubqFlyyDVqZhSL88GWCgQHhTeuuGtRDHzh3M5e33QPJSyzKwZVEaF4ADSnLUeVG69zlDIEPPDMfiQFKA4FAH71IYW29sGky6mbB1itKD7NkSEV5S7StfCdBmmQud9/rXaCd0W0KGXGCKMIYWYYUf/eeE1wyZtwsNrqQE7ON7R4YGkkyeivBOxZoVavyD92xc4Xg9PBwwJCOsm4aey53j+jyQBYmTRdFhiQ5hLHEtOlCrmL2mPni+rWOVl9yUmDqjvrstY9CRlKTxRt+j/4MQQVPtUH3lOF6MrndNsrfYwFFQrNQlczL+JXX6ojNqxBUon3GSOCnPkqwMGNaMhgIo1kb/wkSxirwHV2rTLKUgaiIJuhaH5pA7Tj/f/TPsqoqw2LdfOVZ7n7Yot73PbPBDVkSfnTfwwuEtePmSpytb1JBpDBvutxMrWVWFGKGeW6iG+9L/rVTxfsVKx4vBtXI6nE+A88OAawjdTBGiwpWUDjjeUZb8GVppN8eFOp4RzwW9+jI3n0UCeQtL+HxcTFonZaXfuVxE3tDxLqIWUM7HG4EyM8Q6zZTRiJvwGPJgzQr3C1ejKUACfbs9LPWK79TWoTHHm4kisFdEvsGrWqF7igyyeY/yi0e+l2Vyh0woWN84FCJMT7H1ZFj8IPZ/hteQhvg7qvzn7V6aPFqKh/jOIR+3hKpP05dFwdjTw3rS6epIkElfrkiJyT+bRIaNjFbtquZ4d68CjT7DmQKt7Id4t8Y9qeFdQwKZVyFM9SgzPZMfDktukk2SdQR9d/WRgeC/WV0ZeoLqLfUjvxwqpvZ3LWsUcV/STyXspqsXlQyMxBSWT5c6IsHb1T6NnLajE1ldwU0mgezCGR33NDxX6e6VYINfD0KwozxopkEDFXBTW1PTnOYtdqccwFd+Bif1ubnkIeAFgB7bJEgLSA0I6izOE+q7ZLd2x/kIBL+7BKbA14YAgDRcYfWBqG+J5zE5JFeKU57NBbAl3WInoX2remIjz9baeccVvlnd7lTDoxZ9Lvv64hsKLD29e84uILeANWslZvkOOSgOARtSdKzYUSc/JyZFEsHAgJnl9bGu9UH6nTGFPyvlvCJGRtUPm6HG10DUy6vbRokRljzpidvmP8cI23Pg3cq0s3085dViAwp3gy7GHJ+8iSKNiKe20Z6oomQ+emvQ+gIxTtx8A8hcG6w4c+zCaAldzn0/Wh0aDU8rgI6g3wUZYsDy9qtfZb3nu13T6PWDsMYokEz33b19wBM71Dd8Ej8tUb0qlDRTpjjFmQlO+ZgDnSsmgqJZDU6ceX1IVPHLwKSZop3UuXTUsqQM3S9WaFyKlxRXvNh8VNcNE1SAiUW1ZTS5DCPe903oiV7HZM/9ZAzP72+NSf6TB3BswYrla0UKRhlMgQtehKGloLHz/WaaSH8G7rhW4C80vm5cmkWYCM0Ru8k/qSK7XD0VJk0gzD1R82q37BQ5Ltmmf8EfiTLGsu9yzARzHlOMcecTdLZ3j8h69yuSds0jjJQiAI72Zkp4fT6z1xWalrEOTLKNYGuEfyrvStLNRtHWvhLbEeAygLNkmB9k3zsf6KJqy7Y8LXMHvE4NGZ0vDsbmtPDmobzugHlBwHoZM6tOnUGwMO2vv+KihEHDT1Lh/Cz8tRAM/rPQLeMIDULl1xo1wEsPJAq6z8kOEd8ZT/iN4O4waE26hT6esj0WMRpPqlDdEOxXD6u218dtBe/8d2F4ZFzS0WXjbpn9WiSE6IolYX2JnBPys2aHdsmfBj+wvQPIe3cGWnTz+8PEkeL4Hh6rQ8WKpLNrGmta/3f7FEV9tZHp4V9qWKPN3JAU5p8F9IAxX60o+xTPhs35V9UffQFkDjSnalTEKxPoyrOKhg22fmXPAWQu4m+ujFSEru8ZL/npmDIBUuwa9qVgMSordP7DK2LWv4J7+7jDugPwxjN6ZEfU7QyuP2tLYIuio7eXWB5Pydiv50Xavfk8xWZOjTbHcAPaclFpqKONtPzEl3lUOQZ9c1c93o+Sytv7QFwz61UQa1a0EBV3G/GFwMVySKRqKgEE5xDyvrReKl4N+qugn2gkP/wlbspsCwwvzxvTuZwzKzrY5mgNokubHPg+C51CoErrwsZeJwkMVGgP6kgwv19jVMEBHlNYjPJQtpuIj3MsPwL+py8bx4eOQa9g+NlZT+kp6kdcCsGmRIjX5nngWR42e6teru0GIoSwjDxaVRhyXzAZeSstfRDYn6epjFdY8JeVJJ0YkdQah1rdIORK3KcW9FJxBzKEZ7nPg3lCLxmwWN1R9Z1C+YERS1OzjWIyA6iAz7zsl5PYKN6jswBae6InJxPBBHTrMwLaKvnke5my0DPp3U3dyii60BNC5OQ4c8urE07Gr4nLJRmz9EmSWTgM3Fo6pS0b7OiPlJTm828XDit/yCefl+wPNnc8931e1OfRYR9TMZIlbI9Kz+RzkxfqKpvXcDxf+YsSBp/5St8LyzYbPWVeG84rYGK0QzPPSliJrbUfaM9JAzvxUnwhEkaDrIWC1O4DgkmRkBI9YmIKqQncQWm+FN5dOc93mL3MrFkzoO2Rm65i1QNEX7FRY4YKngTPXCi3qS84OYNrnxVpxTnmUkPvK1zMXJs9330i6BpNXrXHLvB/yzH+Vahv7HA0Rs6kz//elp9e344n+fyJ2daJs4UTBORIwyuiaf7aTyvd6wyYUztGTrs8ZE+B6V/uwbxT1WYwPc/hUvRnCMGICnRloQz5dl94zYF26OWRPpPQfF1RLKnJbIGCpwK4iotQHGypcBlp2VKa4XbUmexBuOE6WxcmeDi9G3zgHqXn7Iw/F8DftPEYuHyKA+VKrcAbu9jA8IMbNBjdXA4wc4NemqkeL9hKWvnW4ILvFUMo1FQBt91BELg9GTqEGLx7V+QLN7ZrF2PuiB6ZGc2hCoEd+dYXcswdQjuvVf7F7ENBfT0hjmIAcetibOQGi/B9sHyaoMkEM0RuOJEqO0VNdyH7hzMmSNiZ96Xuyzk2wuWq7dpirvG8oDv0476DnYkluPQS0mDaV529+8me8rKP/N10376dxT2Hnq2jecSajGdmjf7pkaGhU6B8CGZtEIhkNLQ2wfq61qCVCnZmILsdUlvhC2nhQ/LCb3PWo4/j5m5wtddLW5EtQ7TPtXOtKG2xAT6XBZzRcInN5mPHLbgYsXV4njlF5IYPCPRIF2OemOvgq+X2YVYWUsiYPZBX2o9L7Tj9AMd/aXWIcHHqW9hPA02F/xFY3pgc3XPkZTv1EBvHZOSVO3/GzistUifz2lcxafC8h/8uAGCrL6qF8btAkoU1JgzRN1+qYJVVNVc209NIFhIuDYCKxN06AmsLM76wSCHFXNgIAt+KKZrmXsKMow/fThaFM8q25dvb6fpFNK+qhIoyD/k+uWy8RNCXX4PqDlqjnAptbrZUgqEUFOmu/RpgJI2ie7o1qJTT5f+XYlkRTPjyTukmMQf3IZABHQOkrat0MGEqHmevfWNm52uZ54sLXH4881oywBBqRYcF2QBpzeWV6DoyuysnBm4Sf2SFsePLCLqrfvTtwi00+FfqFl6gNbBsqBvZhTlNz3+WnjOrXoy9Wx1d43dNrv58Gz9ykotwb/VVFNwjicEuSGuMK6RLPPA1ROGk/AzviBsjh+dkeiQ0eP09TQto9KgthdUBCGaNqbdYVTrVua5VdrpL/WgvZDed++wFILOl28kG3fCGyoL3lSRlHYGwUFPXbbPxJB61VSifb+rJCq0OQDMH+OHsC09SlsO3WfGaXtpuV0HYe8jmK7XhK2it5URAxGe4ZiCXd0pTBYWx7IG8SyqFvKKxOY0Z60B/oyNchy6MLlAfx/09r2PiM2D2LtEIRQ9/WHYs73A3Uljm4DKP2l6qL+eVSFOfTqBwGDVzelyzXs7PtHNa2i1xM2lo4jE6M4npOUV4iL/vwnu2L1XAtUzQFeH0TKqzReQ9E4ANeWWi0FN9YynaqkfMvH7jM4QAlucLVSSLYN8WtRDLdOZlV21bgQcR2OqmaH6uCyoqTm3odTKlejpp0uQPTs03mmXqKqoMuVgpK8Te1C84+Ku6oKULAgOBjFvtJcoCf0/CxcCuZk+8QAumsoE0xYhetvoWTx42WCShI8ta/IAXAjO9+mTwHW4Jtf5JNYc7nnj0CXTehOXCzm+YQqjmxVJqxFkta5O8NEyW+Gv9gxEQmoPzi6Hscty0MdGaPXlcpBNkan/xNnspQmJexy1BzJXWaE2vW4W37LvoO70scJdm1+OOrpq48FlcD7RkZU9WjNnJ944COSBXauBbmql9Jm4xXsNu7YU7Q/UzEZRKVj5Pyr6aKt4GrE7NcZhIo8ZEyfvk8n8F38eNH7EPQu9Ia+Gbt1xrtO2wyIVa+wHqydIs9G9P+2D+loBu0ixorCTO6bLu3ciFCBmVgjvBXjpDE8+f1q5YaxU/+mUanSnHvWzL8ZpdS6eVmsod5ocLCsbWvq5MKAh38PbiMZgIheoCJnZZjGlUrO3k+G/zAig24sf41Ul5P/1j7NlBLyK4J+ysoPK1kJi5liYtzC0nzgYwBe3r4ZcqGhcHg2cR4gVsFcmWeedTQhQiJChLDnmZ+eHKYRgvCOZbV6P3DMlz9nG2zIo2yK0KVj1T3Uk32KnFrELWywVUpju8yCKjhZJ+iOk/iNeAXEI7tep6fojflSmmlmleeQGsIamTe7PNN21BrCGpEa/glEGqmxB2pqZphVmi4SNq2sgwShefhC1B3xM7vhd0DKby0MPI2aNNJMPCnMiWICTmcdjowSxfDfnnC7JFZZD00uubRv8lpkg4f/SBs+cWY9kM1zy2TxlhHfn0Gt90U8mRPQMXixXesBhhVrSvVWH9Uv/OsnLdunyzr+Ee4R/jmX42VYkEpKIiuYXNbyWPDH6ni5XM77RpQ/o39ahCd0GTbgBNvpNfLCsQtqWSt1Shrh2x41XdrnceqSFZQquFXgZCIq6ma41TvgKV+ns/s5edtkM9WRRPr0YFZX0KMMNekFG2uFGDAl8Lto51NgHKO4oOl98HT4NK9OrtMoVU8U5PlOWKpe+Rgnk7S0e/fAFjcl76vTyjvpfxqyKwU2FqerL2gCHPNbeMPpmhPaA0p6qdGLnxoQEcGWA3N+v2HrR9oUOgw7IvtAXCNxqkoQW6cDAlyliOR4/675v7/SnHIEQNekKhP4/lfmwiiyKBTQLhCOdgZAIjCNx7n80fPG+d35WWWYuUoI6oaWbhtPSwFPtsufKSwxc6CXz9NesgdOhaTlmaozNVvQC6axIbt2htgvHPWbBlaI/QzzeNfLiP8bnvjqWzfcR5bdLz2ncp5OHWF2VcW3jmkiqGbz3Y0C52Nj+bq6XF7pJwKG76xt4kDrrcV3z0VdADDkv6P61IXevpJ7Gd2FbwQbNcjKZhQwDu0HHFQLbDGLbdKaKI78VEZcnZFT/1089CYA8Mu+lN3KKm8UxiePJfXcJjiYdgDOdW2LOeRIzI5+Erj3EHx9w0b2ytgxatmdHb3YUJ+O1UDQnyJIw+eb8/B61qdBS83at3MrRGiAndPWnQTmjRru23zJZ1+HOhm43YFRYdYwOpep+XroL6hqYomerEvNdKvTVnNtqHn4D8ogzsn3r1+Ge7AgZy96UefmnTKumDHdIpzOt5g4o18OkALPrDHvUZSeVED/ZZl6L4EA328ICO1rhL2W4SyaxFRF7ZqpmXvFUwtqb28YHxklmqykEEl0VBFZnpA4Rk6RIc2M5CbacrWfNSwwjcIVVceRzAkN3vcdhXvdyzgITExJ7m+zDUUtzg+4Yr5pJAwA3xxYwiKIca+AW1SC9ZznfPx2TW/e3dHeyRuIWnt4bZWHJzdl6Hbo/QU231+ojeCR9yVUE/ws8w7hZ3w9yD5i16qdeGKbB72DnLw9fUTcJQLJk0nAXPkUy/icm5jV0AMaJ85l1cAli6Zloiy46EmxZxl11j63Fske44cw78iab0wShaf1XPwm7bK+gRGLgTTfoFi4CYCJ5PSpPRZ9XUk7UKlOzkr8uCa1KGQ5Z3NCSnI5d9dOYNy7VUgLo9nNzHJRjVXWL819UE42gcLAHNaBLMXyooap7uLct6W1pVCxh3qSIJN3c9pYrHMHivkn6+pEtNnN7uV+SMtn/XrBd6knTOrCEnj1IF9w42HGU3nPUQmqcUVhztZbNztRQzg1haT5KmyA1D1SVBhCNbK8qCPgPkDwq6gJ2SzAOlKdt5ZRW0kSxPh7E3Gbm++iwR8MMboDH4pM2ACCASLuaFWXNsN75r95paEbDg0jpU6Hu7q7eOKHUDxGFdqmMgwsPRN8jD2ylgThCoL2TLbtm6MEVtwZBuDdHSK+P7Qqxqp0VbxAAI5fn4X+YUKSM+TJ9XsC79zXW6CK0TE9/d6ACEU8Jt6Kyz4Y6hhtJCOIMqWGtaLscp+1cYB7mnvT0KWv+a8WVpRvLTUYvE1OvFmf6hHgaGONQf79Wf+k1K/sHqlkB3pzhuE1yH53DRCLKQsBI0U2QzLDhDVhU6+VEfmPumiz0i0Xz1bmRBSUQzP9rj+dt7LnRJWZrzEYxlxeyQbI1ZG13IKQcN71Bjs+RL1T86W9XhiGwDKUDiNxGM0uYcUEbN5foP7wiSAOt0wEoxnbwTRu8uMn4X8VfD8pVx5gGHqJ6OtRKd/+npl1w9kN5VT3FmY+SIv4OEN4lteFDCFkQGxOzS9RoI4cij6+Y542OggrRTHYK06LaVqD5P42ogOhcnOf+vXZOLFUA/TBSsyIwhe6G00hUK5HyPfKLv1v30K1lJj3FoWztpz6AlsUUqSSjYnvK+szgGEgNFPNL3iFr/5p3RKLC2gdOiVx97ssiqQXl+SqajfBv1hDDLQ8Mv6UAcdd/yhjnXXftUShoE9zJs1XAOuEAaUwB3u7YeRbFuCXeqfiFxw8owzIIRZFZGKKdBvoCsOSZsZrkURHFGNyNJ6tfy8xfINVfOXb/uwE8YEf1kiD3TV0zxcXigVvvLAHeO+9V2R3n1KhJqjXrhWl1/LqlUo93qT/IIs7bEquFCA1i+2m0WRDLwvaf2I9du7QBSrh7ASnrjYxCeo1ZDda/DFz727VLPZDEyENemZjjL4gs73vm/AnGbSchiFtwISVydbfOSsu0NeExLlXqVthRRXX79TrWcTPKUqgLqS3YEYl7oFzffqRA559245KT0XngrkPejYAIortJAyA/RPFtM/qJfLFuewvHkrhLiKWOP66sO+CNlHZjpC2CPOWgpa0rYET+Wibw3+zeLgZLdfDqN+xDM1Jx6NQX0J29nXmCeAdROK6EoHMr4tpeuPP1RQtTNwSC/l0JClzKxBhYNLcCsnsKYubpAj+tS1OVEwSpa9CeSwFt5dltI+Vk8ZGGE4JpbjQDzzP07wjyAb9o0HkEaJhS2eFOBbOqgytqGeYQ2xwBRK9PnAFui2Tyl/6ryH8vm3ZiY6+dYX896U6OtW8fXaJZ5BRaL28iRu1yn/7EEc1uGDn7oT+nOAaJG9RnjstVt1p71AYSlK3BmH/6RPrPsKIYFDJ7x0qEv2GyYfjeYJSTzy+ZMZacqwoMcFebuvqTx0GaGyEquLdSe2vW39QH/Hrk15C+9gAjOhAoYlKCZuAZi8X9E1TW3DS+k36VsBdEvSKcI74LmYNwaFi2mkxshXtcHZonYDTe4L7B8kaS46abgw3bm/Qtt4rcHPQImHVp2BvhB8xVKWyJnAaCgpvmWJrxzSZZ7Nc5SL7/k9ttKNwyYJ0Uf3vPRhklFk6nbB1VY+C4KFoUxNXhqefSO3C+HlOx5q3MZTPnpzbCnyNg2bN9tod+tXUlWJH0uNhFzO9CbqPLDoQGvx5G2prZy3JCudqhLNmp7rFwRioQLyhnlZUas2rpAhfyoe/5IGzbt9Q2YAK5g2bxW1MnXdpYcsK2wnBQ9Fk0hut874RJqVI7pU/8/h7jHYyPagCz46ygOT7NJzyuKtzZfQBYXLykPR+ZIYrfWkrwY6opc2dlxs0faboCIyitG+5eLDbDTDkud9Zr8C7Np1mRhRkVs2OyGFNoSHPZ7vCLizu2Im2qi5YgNd4B8ibk17oXY2n73loqQUyWl/uSMt5R7TNVdj9VbohyhDbP21A5ifhFVtTo/7qXf6T1AIBz3H2vEsJnKS8nsbEHccp7QRErJdcu8QMg2dGXNe3RI+T75x75AE2EKWl8xwhtx7a/evL/HnZeup9rTAeeEGios5lgbMQCIGRPMDBkkNavKSMekAERkFkNbGUSwmixWvW4pWsj1lGC7f+DFBnVPGHR1O0lgd+poTSKbOqjys9h7jvhV+HLNGCOz+gKpMQSjsJBcQ4o7VmbUpzlXPmryCooXIgxUBWVIDKh5zrX+wk3okbZIutALGRrtBzyR6iG1h0XK4pJgwVxgo5R/LQuShBlYoGQuNBfWhjqU96CO/vXzibeG6cJhTmTxu55I9zlAgcRbIY6p8GSv3E6Q+MlzvD9X7u7vSll+mz78wxCGBOvUCHKlNiLn1T1z6hhNH8LTQ8Myt8lw7XDCHmi0+B0tWmMmVn9bIG2Vao81qYzaefSBFqmLTWTXEmIVD8k7UmFgXtZjzUgy1zRbJroqWTtv2EO37owV+vQnN87GrCMMNgFR4CJHnuP5F9IADQ2qAZEKO+q5BiyTK1lsaG6BuHnzhW84x9mEIXVKZ+1ckyx4lwNeq/yYVnRoM5+zDB05B6bUChkrfebSsKbs7mSl4RswSALfYJYQPvNCc8jQue8hmYsNV1/Xvw62O2keWzIM+mOwj0j/TFgPc25ys1fKlL5W/XtqzaQ4dDK5e0mQjXHvIN/tWKZJq9+dETNjoi3hdYKnDVmuAx5UQcpCMCDmozr1+xmTkOL1Kmd0Bm2BJfBNfA/S8+VQexS477j+PplJtab47/5R8wI0J2fcbPc+GAweUPlAyMi6vv/VgWL9wglI+vh+K2HgZ2UJezANT0454Vm1yRndnrtX7MoSiRqavDF5Zivm2chQqPFsCo/E/Sa2oVQmVRvuFvAdmPjqLmE/Zfmas0NCOiGuSx79HrC2rI6Tu60RdGl+Wh3Z9N2wNWs9fXuX9+RU/REDXDXQr23yUghjksF0uwtbiYYbZL5mEp+M9Eg5ZDfjkcQxj0YzM5bu7u3yogM+gTCDVPFX6ahSd79rvY/vYk02+UuTj2XEpmab8Ex6TqEeOir5eYi44yQHkH9ncWox0hoDtKbjpI2rWE3tiDTgys+dbiAZMFneuXWi2bN39jWqyrhEr5toL2go5CiFII6vzzCC4RVngFYAEn6Hm32kDK5ym0aS5U5qkp0kWeMNKz25gb1KJqNqd+ovF8LZsx3SsHoWHnKMydnI9G0PH347cPFNI0pV2aWXtBabap+ucGOJlyC1Qe0KCGNX3ZzUdEJenoFocv4qepxLJSQUPFxykTLEpDCSMAHJAul5Vro9wc9nATA8HSxpiQ1CIXExnX00OCHh9jA8QFhOoIFgys+8U3nVXg1dIxVsFRrkVtK1BQZwpptYUkaBoC8FuOfoMdpBGIjvAmY8P/CcMtev00oyRRWPftL1QOeRse2F5TA/LYk0DAsZvADyi2fREERxGU5MOrzSmG47X7I3eEscuAaFFqEyTqozgf5FMsiT8jPTTyUsRjlFyiQQfTqcJqgkJMErXUIEw3emrFtgks8MQ68tkCt8TQqlejcPDuNntTQNUW/m7LRkbgldyEwOpoDulonxMsmu6WSlVBZQmy9mEq3LBzztAmrOnoP+2Wkwx81JjhCtSrabqVIVq2BsyZ8iFGPbtqdhyl6irCriqq1Y1W7ucwdkK/7zcv01tGAaqnrjZK2FKyubNj+9sK6I5ZfygSelDt1wzT8FphbU6ydHILcSncuJS6nyvORrsEEwaXyvN7sq3/ydRCiP8S4BL4pgRO1J5KmkuhVaCWsA6hpiAdjacIybA2t4hkJbg19NSTuA0xxcw+wqIRXrRTUKQdlDW+ze+KV+q3r8M/Y+i3bCEwMS/bws2dtwnXrKXRS4R/zYfWvXfVuUyBzxgXl86V5//kRcx/caHCorTduF3rWVuJRkAJk3Hlcr1EtuD/1GCDBVNHVl0BBEloBHGoejFsZA+dsMBRVSMPxmyXGS7ZBZyjOADdF0REyTJg0du0kXRoHHoHFrDnvjgaYg373y4mdeUDFUK7MfF7vKEVSt8kDrAbPD2jwuZBSu6wqw3rxBU3clyDDTMUepMF4pQLtx2QdKse2hycE6D3cuVS833JzOzURevKduunFBlJKZCzFDMzFUY6r+ln/JVmOD+t8BGuSSX3G0Dkln0nBr+M5pkrsFFY+80GaeknyirPuKgQ4D4CsxYQA24FI4Q4kqraPNOQRLP7lllkMyxXLnFgdHx0HVyyczjqVgZcXtK65QyCzWCttVP0AGJ/0ShFezdQwnjgduLsYePWfo0i1Kb3+iCdc9l2PFNVfn4lUBR1RYXBmkYkrJk0wsGicZ4aE2izT+G1dGq4NNl+eWh0FRR4DAo3RsiuoF44d49SpMrC1zc2lkElW+whFYMLqpTgLGElqTkkxaLpCmS/WVM/QO1fNYkQqKirIeJDXOOgX5quiUyRVmKZ+/k6cTbk25KNKhw/YZU1Z3QMo9WDjniD2e0etu/fto4jmcts7oMvshyXdbl5KhV8DPh+Tfu7K1d6sPVCskFtMf69QT1WUSZTMhY22SbQgCzd///vo56wfB8iW2OglUEHqUq5ivVwaH+Zjtx6aZRCzB8Q10JayK+kQnim/RTWQW787i0sPlDJYBwFjKVLLpZEP2bT/xT4+t4LmGy0vbx27rAVTtEKPhWM+jP1mWH0l62hdBX5jPd3JmoH/iVlLf9Rcy5KsPrdN5PQefXACZIPcxLwDjpmJ5jQikhKLgAsfmT+3cP+9HB03ztMGaeWUydpT3Dncn0Lkw6WMoIkRrMBWsTkfLgS6UHeB4wShSJ3YPysugAabJchwPQLbwn1Z3W6gPymcmAWBLViUPZqLljU/3N5qGXZnxSy+AyvYrmcFF/zgv6SEPlWrtfJOL18Ba+nLURvg4MMeNHRQ2gFhO8UdunWzNLtLCOJ+jP8UUjHTf8a0i6hptt/1uNyR/RXqc22hnNly/jFttZHg1mHIWEzW2ZsmeO1SOZcD5pwNIaEKscANfw9dwre2y7MOkBg15aeN7rjdZVxdFLU3fGdqBqE1j3owVtE50TFeV/0rv03yz4F8YyM8IMi+2XHJhtkIyWFqMv04mxzcgJQ9A9alVo5l6B4h48XMBpPpyDbaQ17iGmIJMGFVpNJmv3B1Z8b9QJGKbSAsa5jB07ScwZj9r7d1OC5Z8ICYwRYpb7qwoeROCkTY5yri0MLwcNqosZHOKuuFSQpAxabMAgX4WIefyosGfNnFwkvECyAJI1/ffVP1pR5UpxPPmNTiJQM2+ypOcIh/x1n1OlkqPR0JTwqSxkZXXCHEfAmjd47R/zixpj+GZDoSWg19zL9+pyQAL/rKusa1knf4Y4JhCrIelWxq5FPBovYlWKvdw7MMaWnzJzm9bNSsQ3gUOlm3WtyOjlk8MrlUtEdHTzawuSNDRy7Px9A0y2lucgp9BXsnxakA+OqqML9egYWfllFjdUZUerx+rARjteuX/Bz797zf/Cj++H4le3ARU5oakOpw7jy1T0zpgahahxjtiNi+mPzxspEAOS66zlOF1dxlrpLWnV38ugD2W3RW9NkqZ/4g1uxc/yFshH77GmzajytSFRjvUz5THeNdHU9Znawg2GZoDNrtqzl8/67JdezO+ta02XNWpHTN2riEt5zxfY/OduF8ZDEH6t5zy3NYkdaD/PYFug0fdB1Z8/vvzva2/6gAeddOaoDBKTIYmI8ZW1o1i468QFzzv2XpFPSat2YO/8GeWM+yFi9+rI1BKX65gSxhSNnywIH/c453CvPzbShVBEq+ettfSQ8NOzCiWFhFzvrPF4Hc0gAkaEGLShXqG/32Vn+iv+LjG6hhc1xBZ7V1DkzMLJTNfCTUSpdq8xkk4u/bZ3fVUfJRE9AwvAX3EFmK2xyF5wzwASI7oMvntnBJHhL12x9hs0j27MFmz9q+xgG0JVCrvVNktdJoqD1dTcmo6XWCSgVlB72TFESfS5tctpT0yjqsGC9fYq/BsxLe+5shLHJfXAlM+bFYm+pH3+R2/aUESsEUOUaLgao/GqCabY0a2/LfS1MSb8JGOcKlHcJSP+f7ghuZjbxHG1/ynNT9KXnmDP0UAkppoMx/9XQukjItxdNSqq0BaKqdKm390FVKo/DaPSoJWcr1Imec5ztvtPUKo9FpfQJ8o09caA1lXjd3SQQ4eHRH21EGjvZ/tThX4vABmVraPP2AugETGt65y52RF1AXCXD9XY2RNKerxXTZrLFKFxDWGhbO3WhkJk/F8oc+mZ28AL9FFhqNGwhE7bVjZlnDBaNfUWlWMZ25oCPUWuLhwnZN3lbDHhHti3O312LljfjKfC+Awe2TTSyqZCB4yPCmdgWtdG+4c4xmbksMsej5nK1hBZTuyV30GL8I/H+eHmCXwT0oXdo0sU2/cJXBXh24MdmNiwHqWUwuQeaHa6Se8vNWqlC3YhyYJ1SOb8tMbGYAxAGfEN5OBub1K0WHbXkExJ3zKUefAtvCBNBLFBdzhHQDgpTZUBB42wswGfTz2PlEP0gP9fXYATlZN3evSadw54bX2yDSB1ZI9qtqAwxTaFyDeINadasVXQwTBumKNGjhgEb1CAT9MGvuURd21yWQ+08ZglBBmm2w1V4ulc8ruVRQ+O8V2IOMmhwFreCQ4Ktzj9Z0RZULiPGmylFhei5s3N4IqVpnAA3XD1dyJLLasQ3U93cB4yc605zFsfgICwfycFPlXUW3mh0I3K7uUdc+1omLJs6/P2bG0eCvBHISR/iYsZCXiCn1myGBTGqEDGKh+2CaZKaGlYWiAAZlGL1vGfw/R0QcybgeOgRhf8tWcxWNXvOtIGlbf4ecOINVf1YfzUH1O/306gPx3KR8QNEFvbdL37C/RKzGXMkVKP2hyZfsLj80FWGlooBjGJyFKc0/czPBsMH1NLpCm2ZoHGgLeFiu5XwBDQhJVBhiW2T6uOe8x+LinXClLTUbmSzlJwemy0S4xWITwhmZf6VwVKRqY5M7bfCjK0RZJmkWq5DcP9yiDOCXoo09JJSS/9bYwTrtfF4DATub4935jko1vwi45L7GsvL7k2se98czlVBgEGM3bG6MMz1Q0Zf4SxsY5eaH0PoBpPnr6I5z4QUO7OJ8l5j4iVRRhmWAYGF6jcD/LTrbMgdcFIBim3bS2lNYxJfkgZyJpbmtnI3GFys/FjBHaWbc6hHUOVoVUzzV7/fPybe/xAGP3yKhtQGMlzrR4gF3bhCr0INZEuYjgm4t12cLv4AKlpAj/Kwt8DJ9bAC/LgDBvcef5UXgoZigJv0pBtdUFsM0c/PrMyNOMqcgloVF5qapSO/aqRZpVYXye8+3fof9zOlH0FGjNGoB04KETQhfV3QCIeFUxZ+UgJit/Ce5hi4JG3OEyKFAFmdQszfKsYtwqIBo5MzRb5SLhM32SAbX9t2vK3ZV7xVDq9ss8unEi2sWjs07SxvOg9nNkJWnn1q+0QUJe25jLIp9ZH5gFuomFdgBfCtGqTx5i+jkZkyKTrJaLss8SZq+j8mqvCHPJsmz6lfjagU9ZF8BqEcKrZJGOSYrwlzPEEwGcro6XToOS0NQIv4kBYvELUSMmfN3ET7ERrCSemmLkq9c4D+U6JJHXL3GAlXjoB2dLTzS3qsBgcPM6/VtfHK9DnHP/KIrfFjpyGlEkg+TGVGz5qc2jsrjl4pe0jdQP+5n2SBTKzQ5Ha+PATmUb5w9XVaNY6Q7KTqzuLkSycj3XszZT5pIaQt/9sMBD33RRSIvELzlaRWtb59IjGT6prRfxHS7F4xFxPbL6WI6Ja+cOcn2p1chSveQ+q2gNI1Srg8cuAE57aPGNTokndHdSG4hFF+2mNuQahf5aPC7SHNunZgbNDHXt3lg/6WDzssyLDeeI2EoiF/p0iUkKPU2NYy47KcYp2bmd0nN0UBSf9kio+K6rzkC+U88huNz5m6qzBrdmK5jpzcFmP0L7OVrrQptZSScayqP7SiQC7Tb+rOjE2hq2YV0s2VhAnlNi49+jyGss+fnv39vITk7v+dhPQk09+5MDycGrWvs2eM7itcvO8BCRFLmOeqhBEy0OUWGdz8FujyNTzxafmFYBcCyZV98/2/6sjDOKzCFLonmi+zXN2OF+1WoglowMFjTB1luhGfXzuJyzT4LD2CDPi7Y7M77twUOu+fyIO+jlqbheUNU7qqFpjbIG/YxPL9iD6A+k3jHMal4nR7rsrSIQTMRUj6mkDoA6M2rntkiQeeFuwez2zyuZQt5Ic/bZvVPKHRAheAewX6hMY1Wxe2xtrTYXcGlPM27JM11VkJuBb79uYqSnXDN51AuAzNgJ/AqXMy0BTKgmtpuO87yt1BwLmJoPeA+UBT6TA3SZK0fEZGAM+7btJGTFCollGkL6eVJ7+//ZYyHVGzAYg+SIZ+wCi+l5Y7JbVoxn297kMpt3+RBnOGvMDpQqEvjeouU5o4U0X0E6wsUJLDVIza1DjdZTpQktWUBDo2SbE2boJg1QQfKEVoj9WB3TtAetm0v2t707OTqNzwWwgmExVm49X3mjoZS6L8uwVgUq1JY1ARyMAD3j3XCut37vaNa/tqZmo6ZmmD1Gm796FrlHByOcZ+8ASPs3z5+vY3ab9sSd+Um2k0l36APWK6w77aK3t0X46TXvkDX7DjjfOcr6e3A/NaQf6mbjS6CHCoNkKsqPXu6w8BZUpM/gMerY7eEK+HOte2hrGdIh/U2O8Od0lZZLWSwZ8dDhtbcyTmsSoDjVRijyNSGzo8mng1jiJkw2608CWHLAiP59Hi7ATOlsLmWqlqHMIIZIXwl0QsVbAkDpBjCNK5JgPIvTSiB57CJPrVl/Z1siBYHYRBDBIdn8hOQTyeLRpacWKY9uf8/D1xEYz/dfSPUWu9E7Iq+hsyGhn7o2Dqwukp+F8IYtDVGCpR4oo7sQi4WMIJsaFhjTS+vd8lC1fWojn8PrridvV7pZNuxEDC1OAYTIOKPkE43tVY7EPDbrDTQhJozHxbyqS+KzQtIpOALdlnyIixct89DqhbJ1q2UoOjySBwand42Mqaepvj25jFoceJ+B5gy0/21zXX3teXA1SWSWydmig2rf9qo1fGuiOs9a6m2O42DOutSY4ct8oagIqRL9+eUmxEMKxyrD0uR+GVquw8i9QerT9NvB9FygScM42MU5omc8khIXWA/p0oqX1cHmd3O4NoDwt+yPtiplWryi0S1C/ZFqV54FQ11Bu5Se/PZtRD5HbZ+NSea/Qz2pmSItTQkaMcWlacUYPav1NkyCP5tDhFvtAd09ZyxNuRSzo4ZI0Ur4Jg7nFauJ1NJwktljxj+G65QiqtQ+IbmTO+SNSxp45fQf19UizOzee4sWpwF/LQ0YE1eOqnh37ratLl+xc3bkNVF7pJVgTPFQeNR8BslWDbkAckmcTHcoC92KHL1/xZhVZTzj03mO0vN40cD69SwGDv9K4cea94cRocUgX2TxLVZdzDOhy07EvQaLzmGeeb+Wx9P5L0vLvdWiah6O6+CLFwO3NFWfDsDwng7W7lIrFQLKGPFFV69+I6k58fe81giYnE1CVNLpqPLP8iuTqpqtEsbnIiRcEjNVlyS49MU78xBL7thRKCHoTfDR04Ri+KYDcaUBMvY9VXoDQynEebxOQ1GAjVNeGTkKI7bNmnvm8OO1zxHG4wy9HW8Rktde9c2TA77lJ3oquiVQ17QrYdauKxmtPCSIKtHSAiVafNcyDeJlWYRB43wGw+FiPGMzy/tB+5lKMBqGkFqPQg9G2S9or3xlVKM59zSrcArVO2DpN6O0dbH4QqRuLSBxynZONniDJ3swTlhxnVlxK2cfUAcez/q0DkuRLnGBahQONh4fhVomgSbnvHvs33kOsn2eFrD/Mmyj0XEgmx1xOk+S+ILp6ujfa7dmv2rJoz/LBwoNye7Z0eokrV151ih7tHy0hn3bdONhohzNW10ASZ4LxgICzwOYfTfbYbfAMh79sDU74wJhiqCV17hfhFaG/YRLRWeE7MtRyJjdkM50YY7D8De+PJO2aFNOgF2GPSSUUTcsv97dBPzzcN0xo1XW+dgE5T1r+PXTM/vGls3XRVr5TxKB7XbFLDSz9+FaZqNWNgcASj8dfWbA4TXv1qbr0dbniB188mqo+9mscC4MrXHdHuHwGS7q1TbJnOhlFVQ13rO4lTpWaQnGeQ62TFCerXhRL8rOtvwCWLz0+Ruzw4TP8qn3n8jC6YThfaQ1U7Y+wne0Niv6JoGCSbIAM0QLP9hEPtfmQauhCR64bUMiI/NgJNdLILUUh35WQdpwKIPuRpzPHwyJTKbLaQlCcqXgCGU9ECksSfcQzb0Ih2loUrfL3Fri9Wx2HpLFPgJ21uMyjhmuZoSHoUIHrWmstI6H0DzCeDmfs2XLjTd6Z3vQS9wHfjUIezbFJXwpeGJFQTuT9GNM/DQ6WxKKzgGwpWuzW5anX8qoK/OlY3tuUD6ZIoiQJoQ6aV0dQwb7VvrlNA3KnNdHO90S6Nfy+UZ+lbjw+NxAV39aymH0MjFFH6/9lGqIL9jp7ARgvh5TUzmFBgnlKlQ6dT5ypzzidI89bJzu7Nr9yu+KUcbJs+bc4gVMO3b6AiDlKmeirzKj9JlFjX02ZkWUOvrfNwIteYuHcBFFFQ9RrqJjRCYNTHQCdMEMqgqCGfwc8eVmzOI8z7ZgrPrnQ7KQEsdRgkjIZXZ4pbuhN/tgfDJNeF4jeck+e0cE50SkGZVLM7SkzoaKgzPuct6LGSXjXaf2HJkcLoEvvrXalp05oWo3qrAuP8BRE2vLoDz7LiKx/dpI+Vc/BrHPWf9jHNDnel7HGZCPo1ogb5I9YNE1Qf8DJBONZd0WGThJBruFjZXndiIrMYOJHelKj+DkcaJP0IPZlHiRqfWqw2kNI7RarItxRdjPRWxbTmqcjmUnPmoWh9VLtGlUSHT9Z5ToOUspOfzQnbaz1SzyvNIdJc0kDk4/B8rETKO7mOdSu+c/ZMKUFOxEWUgdzWlT3sbVyJeYWmp0EXzmvw4gpdhk7FmmUek4wh5zA0T/bVj8aV18KWjWe3iMg8cK84M8ubrPkKSJNMhGmG7e0tg0BFB7kESZJaBryfQxVerIXlbGKd/8u/wPJV5PqFNrOs+4PydH96//SUJjRb7i8O8vkcWuSNFHcJ4BiSlaXhi1gmupgYZ4TeGARouRxkO35RwPEreqGWt20GbtImezXO4pw+ER40Mj8SLeCxv5M+DK8DQoe8Y3kC7UpHiX9a29oPGL7AhcRc/rf0nF2WswyaULWCQBtcDQ5rI0Y3Y3ifuU9qZOMVueYjrD8J/1uV/auvu6/sA/OI1snLB0V8lHmJnLaIifdeGDqcmHWYtGjZ167Lndt90xXwIyUFFgsJiKzazN41gdLPxQJBUUDyo876RTiCCJqXs1dunGYtL+0iwopdvsPNS8Ml6Sc3+fs+XrNJitneh8kmT5e/2wCL9nsILAluaNW5djPTSRwjlRbVXTmx8pOjyYazF+c+RZzMGkEypdPbOvFgcCDnLAliu3dYE9YV7NDWiCgkoXesNS38fTmn26s79zAVwCREyW47jz05RkY99b+4oJSM35wZbMs9GDnRFeXwewE/MuylDK4pZhVzHxdy6AbFgOji99dqd5TWgbipb3TFUmZW1dXsyGl4aU56ZcdJ02cqiMsjkH88PIfF60cIihOnj6G6lpj9ers03UmD2VnRmG4uqrPaw7Pbj7mvENuqs3iS/hPVnBUFkcyyrPCzORdFoflprWOvGop9rIyZXqU8aU/sussG4qVKkAOjclnXWcKmQF4ZCi8Q+G2JR+VuJxLA22xC64pLmh6JBTvshBnWKKEqMrztHP/lM32zs0D5H2u6QnrQvexSqw0m8BFpQyDqsvtRbVCwnRJvOVPKKXOX9T4xB3UEScmocxsp+wudA+ZxyuLUp9tLbksI/dYXWaLFpB78bZl/KWq9X+0dOvbbvI20xeKmmbOm4DNonqqStOGfzVAfS7dU6eeWdDJf3rOwl9vLw6cAhBioyZ8e6CbwmajAj1GSWlXUKngl772cwIqMCTiapuWTmnsFtwJx1poEHu8oWManvzMtrCy8gnc6kymATtgvX50eH++Z7/nm9+4gx935u3BdFYQK+j7Rw3OB+efV3p+WLfJB9lav8HqDM/1NbE1xanCwQRJ7ImJ5cxh+c1A/BdaSjwOQ8zNBTKJWNft5bq6leV9v1d1sv97dQPDaSJtQC81lIX03koAnFPnXpkudOCoSkV5x0gnJIrpOxepF86TQFYwVMQxyQ8CgsJM4lLKUTB1cWbsy/UTQQBZBPdmsRgj8SPCufiAomfpaPnl/b50tln6P7jDEnSRCZDw4Is7Of6nH0plavP35+EYly5D1+UV+YDSjbRRSpR1Nn59v7aqSccUxThanHxmRLDpgi2HEmuvu6Y9Vd90lISnWbsfV7uZS9Y3DPBrtE7+GUFnWYz6LBuOnmROI1NjtBfNllMofVoE882G05HDv04W/jNlK0btTvBh2pHSPPN6iIrO6M8n6SU+DuCn/3EUfFHXTaW0aN5NaWKO4X9uRV+9vhZTOQJptkwWPQGoOCerB0/DKAJ9TP2yXqk8i97HDTgqRV5N3SwqZPaa3MeunsXmqreSmUMqUu7HsFthJpHzo7FOLDjzFw5BP5xJ+G0aOoVIP/5eom2zEeWe02H1Jg+7onbz5UNYKTSqJyxzz/54cojFGbgk55ndj5dy/KtACbPLsRMtCD48h1S2s9c+LyCUoIsX3UmAdU6jwbnpoDgwkQM2pf32h1hET44XiLgga4s1DQbV9aQfgjRUTZ3Z78kS0pm0Tb1BJjcqKyGMwCccIS501MsJdcMLWcfM6PDCUg+y9oywLcLkspxTqbmQ1xxkw4wQPMVxOEXWya/pT1tI3NyYDuNJUMjKsegs0d82V0vqNRAsQStDFHh2pGk1nqJk8zY+DYN9hxNUUyc3fjaRQ7+/NO/ND37OIdmW2Auzt8t9Vc66oJHUkKG/TNEl/3JUfuFrjDD181qdelGY+ncRnrYOUax/2KUOs9QIrIwhDWGWOE5ZBYQSe3vrgtg7f5Qp4zcDONdiH5uFhnSlMAlbs1wytUZVaGr/ufd2Mb8iaE58LCLCE8zUddd5oUFTLGIzHU5yC4NMZxWAxuvYWV9XBfBn4/IYgtqMztry5IyZDZaja9+jJtcPcQsidkIiIBGEd1wh6XoL2dastols8zMJAoXUkUKn2BRsVCyQ1CUqixAWbKtY33aMdfQFlGBBsWFyMPSZlpCcoZlUnWDFZ7IHuZ5AMMxJDeBON65vSzSNW8jzkyVzR6+mXz2OPZi72ykgkgrt0pjK8gkG0j976H+60p2zYJtN3p/2kWW/gk7O3sfvLvChui20prdSVI9CAdmLM0fzoVYufwTEs/WglKY1z1pndhdpaVHPhiGcitKwLCEVD/LUdjyG1xC+81fC0WMt9vuzZRibH3/mXpwnHn6c8js0TSYCcAWKqSuf6KlfjeVq2fCnacuNAdEXoxdiCi+xUAeJ+yLALh9GiqO3HyDlA0gKYlNYN6SmXWY9JxIpQ6t6tCvM3eVXSxXpZvIBVCLKTl492yGZGsyIUErLq4yJzllKdig2+vvNAG9rN4z9khJyI4LalDzy/Rd8xcnxZUGRI6SzE8o6Crulb8Rnyv2g5c8n9d1OoAjAJ11MQwbQ35cyIh1wXTRBy/ZK4wY50+yJMIFMeXEWUb/jds/KkQxJdciVVA/gou8Us5VEKN8YYAOYiZJVXInjbuqNtrJRpwZ1Lut1OQmoBPEUolVQW8rGh21DuUE2rV19DMWdEB5E8LUfQt7xcAviSUqqsaj7knv6KHFAUaeMKmZguLshi7E13Sb2KqM59SwiUdUp4QQsQq8mUy0zkEBLRUNyrQ8CWpkemanK2a+zsozeJWj6kroFXsPbeWPpBBvCQ0iVCXBXy/1gMxoJIz3LAQ393F7XsDdX3u5lHD34KkjjMVgJTubrfEZXR/sVEqtJDbpAngEhV00/u54+9+Vi2BLUuEujKwtmcRZIkLkhUaPGfSx2xyQ5x5Nh3zMpK49rcDqXXxlyj01g0iV6toP4bv1HXBqfxWAPv9jGZLny1+cko8UktZhedTyzHZ2hOh/sv/7KZOot1HSXr7FWjRZTSSAr4nq3N+N0X85sDOcP9dXj6adzk9xet7U3e+0AhqUfksrdWRfS+Wethyp1gS5dE8ppPJZTU58TEy28o3mmNGvYKo0gZcaQx2KgwpHpNDkPWfrEs7PPdzzrmvit2YNkH3bW/od01uiIx6pWkm6M4bEszqrDgELPznvbyk9AePS9Qgk0yLpenOaQmuSSO8z0Rxb4uqaLXqxKjGG2V2fRac9xLPhlglXaA0r4owM/33oVgk14HJdnUBrZHXjq2s4f9OIB9W349LJNgFxK0yBa7pMFQUyGHfr+k0MFynDAe2nR7ufGD2sirIpDB21zYRkjpFq90u6X9SMKQ/KK7A1DiVvca1JLsmQl8goW43JYoC2qZlR/ftNcwFg4Kwy3wCxUiLxo7YnMzV6pokBwwjH7SNoxc4M5mPkAcPVOEicmHFKb1Z7c5IryTRG1VkOplBvwOnjz6jjTLSDGbdTQIjOZmyAnc4y6tw+emwjchTDSvs5S4uztf4bg6+LhdPB4JzhpqsTmIRNQ9qsOTLjlkN5gaPRpE+JQMTOQLBa1hlXhM50VgqYGmqVBhzUlVo33oS74kWZEHp/R9wOehheemBUIGaqv/MWJDHFMgolgP7LOvRlRDCgWirFxl5jmmD2oATpElDSfsy6NolYgAmdVl0AB2OQFmZxCuPZCacOkmPw32adBBn5sxJE59eXGWMnUniSHPuGfH4mL6SnL/3/QdzfzuxYjoGWtsz603D/3TU3dIUqgJHaK9dzu2c1g0Or6V2EH4GHFZSz1lAEfRbpV/UMdFxTy/5lpaYzBt0PzR3Ig4gOpaQjuUFuUP9skjE84YnnLd3jE7GHsVJd+vzc2cVYEsss2eMzFNlzZwnYM2fvEApA6yL1c1H/Ph6Sefx0VMemb8f0dXGFmRibXbcL+eX1na/dp3946slgc0gHEXfYOX2WAnkSQ2S9cESyCSinzK6WrMrCvWMj88VroWy33Z2pok8cOidHjefb/vxpO+n2+juvL4c/cVf8CvYX+N63KBEQLjDXiC6e3EugR0TadIkAH5cSm7ZLwwLt7qYZ8ooVTvQ9K7vmDcZnbKYtqPKl9KUQeneQXBhCzF8aq7qYh9syeXh2ruNlMwSFGnG5tMwq3KDfNbf0bgzA4UY+0IupRS5k7xUoGQI4vHB6E1UNsaxDN/tAzxOffQpUq3+v8cL7dpKwcjiGzAPZly6pBA/8kI2cYfdjuEeQ6lmGR2Y/52TNV7v/2tUaTjGLNNj67GtMUgi5cZPAM1gM0uDxNWclB9Gu745EBg24M+N2EoQMdq4LYOxjMyCuQW5HGmmQMH+e7rAUWXEqbnky1CQhFcg6n5q1clc7uJNu8xkHdYbgVrowxTF3us3U2XtQd89//36G6QUbPcfFnv5+7Kx0x4XADCzhUU7JeshWqo21hYabb8PM0YbO0wzqRgvvMntZBkvNLgro35+rdZn8n0/r+e91MjTa0Y1hkG/2bpblvGc6aaRwUbRn9QGFx97zV42AnvNws/Y3lx4lROlSDakWhBdCVCbdSzkrnt0S4TUm0DAItSyXqUUpaT/Dx3bH6SxNwxFXaIyANSZlunBK+Fx3mbKH0Pu0PF+isOkds2XXJnMsQWc496dZfQJnRSRDG9JMOCCe8NpEsWXSW+FuibOjdWOzudl7HKGlQOHZ3ePQK0Gc57zCkVUemM5Mn53bQDgKpCfdLZRx5cWCB9ypS9AZoer2CS02B5A9cLOlQThbM5uuFJwm2kVF8zaxuuNHLIGJ6oaSndqkx/6zctglftel2eiDdMT2p6T0tpDZN0sx3LC0/rfIQdHUBSC0+8NjOU6a2rBAy8VWWrXtBiRJ7dDA3ivputdoSLEc9+Ozjuf+loXOz7pTQMG9AD4AkejPX0YNzQ894a9+2PUb+6dL43kvti5UGmlgVfwVQpj3I5gaxTdDhhGS2x9V70a+xvAjNTwfutHPVaQZhXSfB0U3JlOU9tG/Ugwf0sBA9XLyHemdkBLm127JpHCz6/+z/s25AGZKME+95uyIVU+H6vKLbD6jNeLK8/7sa6/5ytq8BbmwKuNI+/OuhJKGFnlaScSAjL3PsvvPlhsI4ewVoSAnrwA5+tIQrneXUpIIkJChfHTQ2h0dIY8p6DPRyfj1ujqcChHXhHPmPNLyfs79qv3nldkQ1cmLSKMoFoRP04k5phzEMOjzkHT3sPXuPLMReBoD2ScXYqtXQdBgKU1G60dn0rCq+X7WbMgqWt2u1/kZuWAXwAI0Ke2weCY3j1zt58DSQL7whBE6aXHDw7VgmEVcpkBOZyfXYa2WxNa5eMxx6r2mKdDVryf5JpSBZdlRdGIZKbfVGRUhc0nGE19Mwvombk3lCJQ/aXQbtM0ngnf+Zw6/KyspaI+/Ce0lfi6Av1qsfn7f78HPf7qMtXukNgvbQo1vH4Zu9+0452SGf3R5H1lkSqgsNc79EOAy96pOtkLIt0G/2X8v5uSsUXn16B+SzUtJqJtYNUTpefr3SBxhnojdK7i5qOfR+nvCJLb2LkxHt1p8vKMvE5gCJJNfEXQG1Kx3oZKId8h+0QBradhkCJVguPiU/F8a/BlGnViquM7QFLzZnvAjobLwAqD4LjtTyHMXtW2bXABjRUlrPTLO20yGlyk+4x27AW834NDZXnelfOMD7uYFQPyDrNMTBJ/L4dFlLLTnN5sbnFc9+MeRG9YuY4t7dpsvrs4AiORQ2daYUiY73zZr1C4QW2581+zYBtXek+NVNXJlIqB9OIPRPTtMtEI0qolo+hkfEjUQjj50hye2GmEUbwxLx8kQCXkkqjM56KSKgA99OogGAimETvPOeDnVh5Fz5nbKaRNTkim1mhbybMwx6mGxDOxKWDuIvc6XCLv80E9H3YzXiFiO/ROo0DOVLlHQQrM6/pRVmjMCOn/7+wzId8Uk6kw+R6XL8Fvqc7QmzVDF8ZAooLuMZzC0CW5S2o749Lrb2KYg7aHmmfQPaFOpUJLdGOJ7zctarB7gWXPML0tCmtOxRVuO9f7wcvJ1BlU185FgL4kJ1Jm7svMwO1WPrsl2b6UsEuX3cdzZ6+V9HE94e9Yu9rDRV4Wzk1fiREvE0zB3Ipd93qqVEsWkr/TOV2r61oyMRpZGvhN1hWpe7ezqY3f1g2D52oypZG543m7Raa3CXR7BpEBcxpfx72SqW0STuyOUdIULMW1bgQzNSZLRy9gqJZ/milMyIYjHZ8YOl49PMSnlfrpmOMyPQZtA/bVE7pk7JFeqi5LVlcd5K9YBSDyP07If+fzayaBNccGQGlDU5Ov0t9ArdY+3Ny21+hxwQLSBtLz3giT1bs2cMTHb7rYeSvMwIVLFYuwG+FkIPjNmnHtVLtJTKFY5VKqybcaC8wMvCrigOBjn5vd8tKPKM1N1KLPeoNZ6C3fWAcjdPp0LYGOvlZOB3j9vrfafG+ZPo495NWRYYIIJZvUjfapxRqjzrDj3YTBUAZdSKD01fmgArRSu8m/nyZeRIEaKWxCTzsm7rDWQOfAuDPfCsN71wmVuAco2GfTZcvXcfK+ks56FOC77tRTa7nlJS1IeWdyeUQLiisndWieBGW1NigXnnKOgidGsczOas/8rFuEaO6gpzPtLHijEDLwkpzrbuCG5nTqFvu8+yfxymKekToqTCq0vhSZKRBjmxxL84k7QEPjbbOjEMVh7nY2xHyaS8KP6w7fugNv4+hIUqYPfrBuvI947K1E0ti7YH8y0u/bgpxQ+NmMlLnlSpkRzwDShqVWI/YgJHHESAeqBKhkcU2MhjW4zRxpCvkrVvlfMFrG1v0kcEwW3Dhe+vFiZ0t/WMj4UOnTOtBO28Xcezz0OXmrhIQResYI9XU4XEo8xHkDeltH2I8wuE7tX1RLDw3iFbXFIj2n3JCHXk70bVD5IoRSpcvXFqw/bfb0gufUiyM6iTLo+6nLvQ/WR6c2e8PMC/u7dptzd1oXuXGr13/lvEgtd18H2BG/u36FZWdg+Zh1wxBbm7CSQChE6O62wgt8ocKsApc4u/1hpNu24GDUwDcZV8kt8Z3QoPEcoyDClU7YsVVEK2sqiCxdJ/LlmF2nWeR0Hf2E7XAZsOLACCQPfVzGyJf9EIIFpXYClfc0zuVVffz6ou8KJVhrVsQcTxObGEVINMUTktQ4DVYzjzdXsFrfoOVwwPqsO4UbxDghGH0zGl6xkIUbPIQ9oWV3w6tB3nd1iVNwh55Ne5XO6LVY4qrrxhhMRrwOdcIoBQk8xbDGPjQ9zILPIl6YYPT5tMT4MmSkB7eZtvM/Y3TzOpIcbauOeYWY/GDvbj1K+/k4ejdnZtLT/aJeHhDLjTEsWyiqXQY8vzS1q2EGYoUKMSn0tiS5jjMN5mQv2RIgzAJE5cxil4lRHZym9tSzLVO+qBZ3smHSbeKFSc6tFWz6EM91c/cJyJTdEfeJcrk5gbiZmSSQ9TNiUvsRwkX73kK+Lco5yXeWnrH6K9K2z4ISSX8r5ZhVJ6+WRY/iBDg8ixY/XKh8yklZ1WJb0AiOFPAXqv75EY17B0dTSnbikc49dawZyQwdZj7STbU3aBZBtb2IGXEhU5o69sncG8tX1rh6kn4HGDAMn5/WGifvT7400qQeOiTctEygEEInrAijl1ZmqiAhzbA67kyCSWdZZTeKmC/75Vz9gTQCQzP7D6Lz+GEAod3o9zXcrbdJzA8G+bwwm+JoWmfVSG0zqOktjkZ5DDdyJFH7GVmld8o0aCiRmwJ4mJxVe432ra3OKy54TNy0JiqeIJibz9+WEpO+WEKZi1jKFwWL8rkjDGUtEPBxeIXtidX1DlmKwFkUAq730OZTaLP28jpfmf0MC4c7z9fy0EJmnbYjIUGnKeariW4Se5/SPo91amnsaJnav6vPUluv5pEPkHuV2Fjk1b3FWlkOgwGBJaNtYkeYu65qrP8vL/Y3Ti+k9N4wpMt8u/owCTduskzwC6ohTkH6b1+P3b37cNV1Lv6D71EOrb1ERo9kEHzI0VIT8cMqZ1HjFqDSgwLVEkzN2R4vOjdmdDeC1rXKcxiMa6aZflnfPNz4tAixRYY6CO8VFaXnTVVdUkowvLuuei+wRAG72v22VDcWHS9TPsjwH774sONfBSyqekZfZcFTkE+EAVz5/wiLb7HZJo8O20/JIJZ5W1r16yivakoIDXEQPChRfoWvvsbhI7kemY/m3O0hcHisZJFIzNetA3O2lww/hL8/3nrK5QTdg+a27UyeqRK2rVxJeQJrhOiefMk2l63tRyeLyYmuMoJ4HG9LfBNt9lPpydPiV0TsDih4Xx275l8RWK/0sBO2MMuH33MZOsWvdIraJfVEwGZ40lQvBSmcttVPbd06/dkR+IauELI4syW0bMfASPeK+ucUFMiF1Ui0C2xZAKQl5Q712f8YVZ3rFpdiPItSzIxMc0CsYipE0uzUO8EkE25sfwb3JpN0LMpM51XwW+m7xoNx5NfMWzWHxMuMpE5uphiWJHtMfatltRDhfXZohbjh9FHydsvwQ0jraXvbrAohR9UBM5KVju2B+tjfWOL98AXoD15vHiZUsHuTwYIGXbyg0t6qH5zKl8lwGBnAE3b1bdiZpX45iz/apZB9UFel9Kvrjq9tc1BxVRG0JZMISCdHvqPVoxGbPcHJFBHwGd4UFiH1eR78zRqll89EScPfQAAqJN1NJ/aMhGdM5PY1aV2sPF2UEmRCVnDuhQUCSeKRHRurpf8+JmkGhTmsCQcu5ETyBKc5vU+3Ns752ELJ0ktSaPqtnpSSkmjoEJwZN2WhNCt+bjdlkmeSU0scT+Ixqt0AgrPR4JBTjc1h8u4+L8Gyi5+Qq10FtWqvUfYRHojS51h/Y8R2lNLVVdnhEv7SysHfrOz+4svJPFaeNWmzTr+K5gQV0IeuoOd/LXRHIW60WfJ8l1SQVgLMpWYyCaKN0mPUC9jb6MwIqiejeQo2GM5ajMB91Ae8kRCndUDJRWyCKVE7/8NBFCB9bsfKT0j5ahNRVkaITQqtTZgrJjAFfchhSGTNDYiZuQUzLYmCcqnzf+gEm61K6QjmUyJqVeg7zQpaQzJXCMddsl/RTa6TL+FY0RMlSFaRWhdjVgwRenjQKd5o+m9G6Jfo4s8quoucWAZvD50O0Vh1ZramjkAGAamJkDS7od/UW5LgUQ4j4hLIjnMgz94fUAmjRYnaErvJpMfyAFyXCO1eYDlbrwro4kYL8ATG/SlW+vAI6l9Ey0ITXw6iHc2hzS/JDqaReFEHc7ePbuhwSmfInSqweRdfydCbO65gvK+l25+lCoSAr2BQKe3xioRdzbyA6rHzNuZriJczNHNbnXVnEWjfpkv4mlJmSYsnQYcqIfqVgJ9CiDzq9wTPunNBX3yuRZmHxHp2ccMRsarMMVfGVGminbxG3DIg9RffsKtYcVp+ddzMemNo9kovduU+60soPDbT//i9SIpIySBfKyW2xMMwRVK7nrUc4UO4UohtQh1XvKNAlSwo1PGV6lAnYEm035b8nQZh0PVBCcCmtX2EhoF9kxZ1killszDBR1QLDGRQp1fxxSNUIzqBY5oRQF1herL/a9bQGCvcEQXOJWZ/WW4IkQrlHFWogS8K5j0OE1FCMCw/pSAIdtay5ZZ7gX4mLvx7XeduxVMSNUY2HF1W6fGsTkgPE7uaK8y0dQcps6VOSosUUmlO1JtrmzH8UFBzMkLMBdC/R/ALgl03iLP3CqFtzpf36kld/CSdmcyJW14IhznqupTBLg3hGRo+Kcs6R5U6NyJgwCXBFhqYcQg2xRGNDIOApJ4HAIRmpJhjFd6LmOsKXkxPRGkjIYSLjuvisH1dnbpVekCd+Ii+MY4xcZQ+C6XTqn6tjma6Kn/eDBktV9OItUwDk0kaEIIiDup/VIjwIjv/oBNHPXMixfj5EW4YaY1ss0+NoTxv/MlwmyXw7u7bVxpu9z/TWWC2J18Jg9Ke/Ohd35iNFmSHGfobWWJTXcqcpLL/v6AYnkX02+8Oub61bD7CpyLATMMOSnw8YBpYpmJomboQjFaOM+iekSL4kujJXEkmNcpBkNdNpkU1cAXGFNRYZ/Yp8fg15L9o3gG3Sa1CgjtGk5LEvRsu4NBZ/NlT4XH5WvUISukpJAo1KhEqLNUAajh9MgnkylO82cHZLwr2yXNJgvZAMhfR+XLrUDGX4eqSZ17mnrvkwr59cwUq6SU0ivdKoBXRl4kgzKl5Dbe425vMhp6YZnVJqfnyF1IXpQqv3zj5uZN7Y83IOxDWlWLoLfXzEPN4q+BZzY5N58mhfAC0/n5NzPYME7BJlAGroSbnEjFyNWVvH/ETteds92QOtZaW6T1ezyop6G6jnhBrNVPHIFpY4kSFItu5t8jLNxxW1o5w0vvGQC8Iog4pPH0+ZquYLoVoQ4XEItPyn54f17U6JvgnO5cZv14v0zNee8n9rRSQSIjUNVLwBwi4Aad3W9EXQdA6zVCVdtvG5sYtcmPaLU9mfGZrlfXeplsnXsU6U/YuLVYV8qcKFLiagLOGSKqzBpB9j4xzrqQhYWZDehI2+ErYNBOgvGjzTU+1s2/pmSBAaBFPT90K6yHBkGXpepA9zdQHid8UuKYak3jGEL4oqwiec4Hr3WfYtwIna80aXUABqw2aiVQP6uKxqadAzM1jyjcCDwaAsJDBSuZV8yoh2s0QW55sDRwafi0G3+4BVmfciWCAFO/XSamyqZvdpRPA8WjPvG/LYsm1VBTa93lI4ITXTfjhcOI9UAprEKxIReM7Q/lcrJfZYxkRiT5S56pk2mGu8CYzdN7aXb/hJKwxBPoajEJ0Z3ebVBypTLiX5eurpc4OtMuZX1ut+dcV9WDUJs7Lbypc5gmSE0NFP5TjS2emis/ZoNyS2DsHBOw/wiiq8F6yCQ4nWxEE8LclUzx3XyrKIKe3kSyMcY8Ie1DmJ7IuTQwvqbraw6kxAMEDHX071hIZtKIatFTQGEpKN5D2ri33xolPIYF6Gt2xZFtum5CEUrMs4xRR3MQrdwEt1BVID8tqbczh8ftTVDwoiGVcOwbrkzeTW3hZiPxYbImFtG5rclOLLnErmKU9ueqqkyYb7Tuf3tWNnAjyhGLC8bQiSwzJXnpDSJZtWtxPJFiAK8Nka08lUyToGksp4tGAaaZFMFGvyWHoBmXHnduikd6oAgiRmGyCPSKY7ELK18SMB6qxLuRgqABPm04NjJvCyiexGnG75srzrPQyeOsKr7knAs8tsGQFdLcW7aOoXYSeFS/3iFJefXTqMDqnHXUodmqYd7ituhmQCyjYXw0D96Cnd6EZYPgulmaxBe+ES9CUuvf2egulCd8yHIA2vnjnEe4ojNagKM4lZY/0ftrxMCUIwou7asRfXihHzIc4LPVVHG4JDzZmjvokL0epRDCf3oK4eMS1gGI4ygl4MAtnG2GM53vqkzz/7zb98YXhEB3OymLI//vTqFGq5t75ilFcbFRt9ytZdjCzMydEQ5RmDNW3v3R2LgAe3Csg4mA1q6eEM4uICbnVe4/BvKj5jz+gfatC+KJLSebB4nFpwM3Zkdh1H2AABNM+bjlQ2cRrhjfW/zKFnlkhobdsO8iUmQqRW3WcQVOHbDkyZVPLhScJGTv9qqHXm6TKyD1RAsoLs5sS/FdTU9FwAt6YPwHduSDE8s6HJ68N5XzaR3S3WKfgz4b99nrXU9bkAlgJjCOnvPkBqOyJUxa9GZ8n0HjmR7ZcFoiYuM5c5QD/IcM0shTZWv26mTq+Q1L8p1E/5CqrqCLoZyQ6lYJCMhwBT1GEmClldxlJKnoA2On0p82WOnmjVlNcXEjXZhfZsCPeBnI1wxjtBNIhtlD8hHMlz2C5+/uuzsjQDUml5GFJuk1qWiahm6plCw4FrkqHnWvVEi03S4rePvTqyxBXk/Sd+7MPnqd9mZxusC5JOPap0pz/q3QfRMh0K9/mOfveWjhbKoqe5u8aCWDX1ObOtFFOlpZKg0UnB1Dm925CGTAegTr2uMPPM+OWZ9HGBQxZvQc6FuAwN4x0x3c7cd/YiGKfl7AJjdbwN/6YAvXoDhKV7qW0wmZFN2Yo8WiCm7q4AM33LBu0uXKQgYiw7Vbl4o2UeZuU0Fdppa6r4X5DlJrFzGfeb6bsXsoThOupkMlwwP0Nwlzddwn5XW8CBiolWM8gSl/66L4CjCHo+ZlE11XhpwsZEsWjxybo4vdnKNrnba5bXwFP5zDLwqatqpVlHDTefEWEG96FHKrtKf++JR758tDLMNxwfaT9YIUGpAuu4tKN5ZZdewV8aKgS4270HKisHebq45FC2gu6zlq16zAgaHp0+dLGJIjZAUhbIKnakGczuMoUhoLdgIW9aU8LAPeUuK21Juy5WJ/qpn7PlJ9aStUYiyx97NiYrmIO5GudVTVael7Ay7KGkdWoXRc/+SQT7ywrXgcY3jTAexW59lmdj2Hy1xjk5eTFNjgqwvOKXicd6tXZjbnrBsF5q2IRxaowun3Gx9Vo6UFDSHJjNaW+ET9KrIQWkGZ0UlsKSuPQ61+fw8kq1rnOlyjFdi5fKjJstjOFgFZJYFb9jjEh44/I9gfsDSuIGdQBz3lWJN54GQOGE1FDveRaR5q4VLo8NimGmjmpQcI068s48Uw0wvOTPGRfkEnje4uJhiv0ahZz13BGw0btujtlee3B6IN58NdXl2MIKzJF8ctJ+0AxxXktQQpqglZ9EDfbeZOH2IGIDcIPhNa0K916mH96QelydKpcn0V59KUfShdibuRTQAV9t8powFbb5ad0YuvIyCPglUR1d4+qmTNQxDZkQSFonCZ7fveYYAIz4l3yToEAA/Tx+epB0eC1s1iA35ktee7T9f+MC8gSQ2akkj9ekJPxc8qvZdxr9NDOQVb6z8+OvExGcWqEdJtth1p+pPp6Woi6A6ooQtuSoUDK5INcz1Viqs7mqbBMW9HIU1v2J3c48L527mJp+DZ96mi8oMt6DQT/f7MbO8iKMrQRN0YNLLtinX35FlQzlXc9gLLPQwI1XClUmVOySY77DgGUkbM+1PIq1krOkeKSQfFS8+Nrx/T/zecHVM22kAbgZuKUZWpf+Rqb5plUTU4fuOKFUpeG+4cXuh4p/AGX+FJd0pa52mSKw4LN5bQu6Gxie8LXPa/3eiDs4zlgd6SOKK7bx1ohnm+INhjR+8BUJ0UOqk2hQBJGYqMvZ3DfxeTYzM7bKF1jC6vRtfqI2j6sTGaPR1KSk81jiPv1XJ3JjFKcAGd4DkeZk3NRf0NCePsrJBYGgyrdwx5fiaUN7PlKHnPeZV9XjHmSqtLfTu1bF8ogITK7vudWuzdar6pVIJCtjkjKKYacLNTVDw06XWG9LANp90BHg7PI/V5xc7lTswrkAEMR54nECi+Y+lNj81Ex/3e3UWGSNHgQgHu7KiO1v/LIf5g1MZKCy9F/X2S5b9wGdikk2a06Id2gEDZzBXMNzpaEiEfZF2IS5kGEYfn52tl31HiJ7zT0Cvt+ah+sMIW2WlOOd6+yzYEDnCzADq+Zg8ywJSdZCzgSbybDhAp1f3olkbmGS7KEyhEuXASR5khw06CjxKjXTIzevGABqFsb1P+ntSNF+S/KfbMVXpNajq0eLMUrGvh6i+e5IXeRwnbC+ZQhThVKroWcH8mzLnPLO3f0XRjfup8NRAVC0tEbcwj5N7XNQfZ3J6zvRsUVdugQhGELTCZTwmVYnZOQtky2ORLyfU2ErzczJEVgXWR6qPxmXR9KViSRHQVfz10h0pzXDeTMdNju/ViaR9j4f5J4vLY+zhMiGer/n1elzgK9Z902aeH6ZiTfUhUtBQROnKA7rDphuoxct9iHctZdBAS8b3HHYBpGS6v3xAWznFKRUdKtepzylCCS2dbFgr5IWd7Vu8RR3NwwLK7QXDhpKE3GDdN6QxjOBUNijRqhLknblIUygL7GV2YsUFDDPYrql99QmzL47iIz+SabBLW717dVKM9hj2H33GoOXH27UmCn4xkb2XlDki0J8aXHn41ZWdJWk5hQmI+LxzxR1uET/UemZkKuw12rSEjkSCHf8VFwu2Wvfixn72Ky/JGrjlYe1FxQFDYE0Zeln+GoaCBDucjzLXcxq8TPVwwSs9vGgtYVp4lWpDNw3QjD+GQTFTC+W34pMoo2TMyXFaFT9kmnMhVCGucxtoE5+qahSthhX6TQXU2qaXkWW9zGZ1KrRYBFfyLj39I+ekDz+rhDgtbPjBpv/wg2CSo7dmbWcLaXyV8WZtxTAirQhtcCcOmBZhHT8MLW5tag6MwyEJ2GOeBJugUnOLvWg0JlNx0XVy/5IZ0mk2AyzVrXu75CD9DP2+Cc6cIbLcIc1n+nJMicmZIinU4W0WYld+NoTbPu0w73WyYVYTkStJl/1GwMxET+juxb8PPGFWW3QTk2GOyUgg83nQ9Sf7nwhyZRkI1UTCPBBXNyioLpBIPD92q4Z8OTdyUjhxicYKRmGFl0mGy3iKDLzRaD3IWtWYFr5JUIhUnIB1NYI99AoLsdk6Kaytb2mNjG1Y1g0DD9fpEO5nnmO/p/S9mStUKVNgac0wvaKeWMVwgYgI6NZo5YBV1zwxnY/LI6VTJ2DzYWQb2vcuW7Lg+yQ6PC42hryQnNCw8byKzpiinqFfH32vB6ASvdbzAFLYoQq5c8K0jLoX62LJDlw0lCy9JhvcziGKiB4oZFEulEF7AxuwfCtin3RZfQ1SXPgSvYyZXG4dXJ+Uy4AQqhIA2MGRJqc8UzYJiBy3StBdXSwxd0QzIppZ9kCpjdfO0fH2sGwMHrWPgu7HQxE0YU4MR2pF8AbVpUDTa63a8kFMKr23WT8dUkcoN7FuFb6usRkJ2mJb4hXsKqRV6+1fQgdEdYHTNzAGqJnT/+3VC1LMt4u2Y/nc0h1VHeg4KG6VJxjX0RVqSpL+clmaGq5QCxCB9AANs4zevecthe5Cm92ZojRgQt3z1Lz6TEPAU1nJ3c6w81cwXgQ0KPN18Vww2MqCNJL0asm3R3IRyFepz9K2dnlP8So0PzB859VITBLS/krFgpiZEEZ3+qxn/xNQwBGKND3GDMlAyH9ypKgBNOgJsyYq9bGmB/nkMpQJVlGuIFvWmHYzu1/bvsbhYZ8VfUC88jQeIIXGE3rDb14BK0MXW3M890fEZHGInVU0LYujyQ84Wmbov8ki4v+feMaWES5JpiUDWEPTTHT7eMTVw4Ghcnuk+uzDMePwdQYjXqr9MgiIC1JWMxb2GfZOLN43yrWBNNuKnH9fCirE80KMGjUGFcUHTP7q8Hlzzez9TKVyIaDZzv5IzU0fOzHtk3E6wJ4tfIWzyO+A2EpY+w5AkS4HcS2KcBunT3alDT11547QDQlcwGsYjkr59C/Br2+ja5IVRu9yLCQSnnPqCHlEswLG9MrLredjwJI9+IZb+ZomqAcykWgJlk/6669T7GuO6iMGRAZF3gbo43ve2w+4bv7yzaKmt3RHAVDjObHp+Ayp+bAOe5QGaWjLBbT6IJGzrwN5SRsfv7hT6EgIKDNByGJcDhHQBohmSuhmGFMI+4RsewGv4mDXzMbNeJR0YWbSYC5AOaXCyiE5UAKs/S1458dVlLAeI+H5JvczViJ6zxKHrfhMU5ilOGwCAzuOsOPrrSD6yJCMmw1XOmHvAB6hhsyThdoun92Ma5tCs6sr1tzvewceAomwHGFwBdTZsCYmf7Aq+b+l1H8avlm6KZ8h0lJK1SrjVm6HUT2AqOJBJhEh2tsPiiQZLG0pgRdT127qSgZEXZvmX93IsXRrORCObRhtsWeuWdhOoi3y6spJCs0jIyJC7Vos6C8ZKHOj1Aspojr0VntcpYIxfWETzY7qcMOY17SzBvbO3Adg1KD0PyLBxrXQAvhvJ24PJipyN8KcjwesfHmhHqcU/bt94733r3Iw64EGNvAQ4SyLp2BSksEkDaHIDyrxQaZlaloSgcSSEdFEpevRjoKWzJDuD7pqZn8mvMr/aidC2b1Gb3ybH03xU27p3+vwfmX6JnSwTW4oY2ZHO7gpf5gdIl5tML/Ad6leSrr+6z/Uksg2zHQipiGd8s7OMH5bPp+6yCilOXJcrFr8d3mwz6ZJ9LpEo8KgqbXY9s3/lOHPO/LTqYAWxd6I8w80NfCfRGaa3MjGuaDR2HX4YzsqL19jTR0YZy6kKhcLaxbiVEGGb23peM99KNM+RzM+7CP6Rlu8jzgtJxo27Dj6stg2XHFrDBWBdzpYL7nDuf3/O5Uu3AO9iQue1S+ZwNNiWj4atjVKBhssNA3TLmfjqlPrLCTwYEiM7Qh+eznyEs15rrQnaI8QKDmSRh1qP15sNWZb0lyJtOzk47KlJcp7SM8xBN6xIV2b37XZze0cqZv4kfgBZAijTKzQKdeXinkSPOtpJsUWtxUa2kil6DCmlX2KvQvy5DdbvPDOEzc92rSIBc6n9q+leZBSoOT5L3f3qjLHODX8unBIGJ7HHXOrFuCaqsekm5nPaUeJBAZc/o+gn1+Wr4PxqxJR9Jbvjx8DMzDRM1HLbhtAw/1+JtFBHENA2kHuZXDV2iBvZkmU8zBB3Tg4mhvLXBMZLobHSQn38fuG3RAtBDS+v4yqKKllMnYURPc+ccQxyRrk/DUIFXerAYbLRnxsrnBfdT6EUHrhLlqMrgKLYBrQMUUTyTOomN6ChYo8OVgr3s7Pv80K18v40JE4mTu5qEOGKbeprE6zjPQza+Fu18OBw9EFqZKKIRjuiChBiDuooC6ecGOgpQo2OvpwQl3UxAGTEuxd8PLtrvBoJATdj3QfgFVPd8uYRf1xRVNA7chKr8uz5hpyeg9iZQo9dmYcu1oQz1NeJPh4pbP5i0GyS+xg6a5gcETPgUD37nHudMUmfypshmCrqm/K3rk5tR+qVrfVmIsELEZiTc74tlNXbWNoD1xh3QMwrJjMVOShB8wdf8QZBca2GfWHLsvgAmuaH2FGa0G/7bd8DscIosGwtDBEq/65Ig6ljMAuTR/FtCqZpUn+4qfNmiVVlilH+pQjZDsCm0VUvivjSuRdmICHx688lD3cX1E2vMl4nVzD0JCSpNDzCl6pRFlMjiIK+PaVua4RXlNNq0Bs4dKTEhNYyBGqjW2nrMbLQpGH9Nu+xXIugQrcxio+o7tgMdXjF2//GersJ8Hau/5MCdRsh3jIqA/P+PSjHK17UzdlV6psLPw+N23RsekGwyEmWBbm2dOxYPOk85R/mWTUp9P1w7nlKEdxNTyzdgMl6rWWJ9peV8Zr6BxtipwUAIUJu1u2N2CshV5WbH7MrUuKm/YBAam24PKFNxd/dK9xW6Tgyot4EeyZM5LiyyfQYmhpHSgpdJ12zwTrhV4K+yGXcM/S5OJecNj7oPOfsnRXZYWLclRUEisX5m99FAkfqfZ/sSV7JYO5Ra2MzGb89jk4Bq0a32PtVbBHAuzsNRtOkPL3X9J6XXFXDcGwvNJxymXmGPxrWiUKkH4SiG5pbNvHL9Unf4Y2JNWm5IaNhU7fIbulb2TGmwbi0VqmVMIVbTHlenu0/8vTDlQ0DJh8eoGqn0MFTSqaAhCpGmSXEO7qn8i1jAPrnjKkTWz/RELyx9/BpdMqxCExiUpSI636F8QPJzo+2hlr5XlQiLVD8y1378qZI+tQn6WJPa2aj10fsq+4EqKVIakQiYzoJOQKsYnpPiO+R5TbfKbUFKBkq3OsGxMSa5Mv0eXgFbOuJqJDhWfV2dEGvdys58aGfBmvDyqt9npxky9Ah9Ddo5PH6Y+tU10WRq60b6iT/bTXGq4XPL2jqCcrieKrfRiNkGAckPTgyz19F/fJdMiARJX3b4M+TQiTObahaCm+cty01fMYT8nMZxjMFng3crllZtkSSoSMIEJCug5H9CpRudCNgl/LDYDlMuV0kcant4lTABD/kfXuShJdhs5lKD6//9YhNXFzATAam8oHFpbM5quupfMB3BgU5bUnjfXrC8AH2QD8Vzt91TH0qkXitP+YI4QTxiB4LhWXgZu7FQmudhpOE+04/qaUPKB58B0dFwO6pMzy/fxsa63MVF/fUrJO5J53GhQbPm4XU9mmctNl2VShZwjOQyHgZRI2hMx5Cbb+sUd4TRzNN9gBk3SDC1Otq9edvs0qJ7QI/BvK8SBvy/1KC1Jp521/f3OHz2VS1faPp2xyp4CPTZmZwfYGA85vYnshJSf7VHzcZ7wnxMtBZ4l1U0bOJBXYLBKtGiVPz1HIoPCVWI2CUIz1h+e/Rjeib+wa9EMNmyfK7rsiXC1nGJ2ICFWiu7qMetwzP/LeuNrTXM7Ay25qxvcxww9yi54+43B1t6tBnKC0GTPrXFsb3G+PHK5ECYistpEJH9IevIvG/6EC3bqDxu0Y/knLH/W+GpoSWgheu7SbFSW+3gN8v1Hwz2jHZWrcyK3gpGibVkUQ4UCdff3wCcOfbtnlL3ZUrBTI+3dBFAvitAiH4Ek23qzPYgdA/DTVyQBCunYJdCnSo4Tktf3D1cVUvQPc48wtCePTbDMQBry0AlVtQy4+P19uVYdZ9IqF5rHrXmwcZ9BRi5Y4PuYBkjdVBVO+DUEh6r5bWFu6p+jAJqgRM+QYVbr87TecdCZnN6cjPeDuALeNN4SZWJaS32Jg0fVIb2nwbm5l/M60aeI2881PoHwdiPwacEx1llHsvTB+99fP19KbhjY5dOQBEpyHkM5WdeLuOiV9jwIwwOemsyQ63FAIqN4NLNiGEesVrBpTbH/kp7DvYacvWcJ2y2rjBpcXp6+1NUeRNGhz5tKJWFsKp6L+oHYPcFDzE3+4kPnMqRRaM08KQLKqPxL9h0+ijI/YMKuCC82G3p5K4aLkX+PFYovChsA7ksV8CLz6R3f3+WuCzDF3T5r8rxi/9Snr6+LMfrmqSP7P+ekQGuWD5UTYaWXV4K2YYLwrAJPd5gbdKOoXwvVVZO9tj+1pvnS0c4MrZikSncZwA19E8+YcMVHWWHem6e/G6Gypu98glxV71sZWWz4gdvfk+jUFz9b1omOE3ndHojLZf6Cp9BTM+/d2ggDrShr0BlDfnSCrwE7rDZCpo/C//r03b01nn+3HYG0c+pzc9uHc1CuXu/AugNk3G/D++VN8fqYReZ+6cJl2PO+x5lXW4CpFbbdFQtfRNwX1vOnkxG1CsB77fzQaWZe1UW+cxDsZJvaF6fiq08dwi76bljZirA6u5zxhV2TzxrPdTeTJvv5g0q3luk07rm/O/T1DAm9R9lcjpeeXxyAWTzkEqmgu1FhsKkk0dbZYh46oxfB+wdw0FAYePdyRs2EGcG0Mtsubv8T7BmFbEEnmJdBLPerTKnFo0fvpLfIyuI9oIhfa84empWt/sFcXeOB1lhHvu3X0KWwsGB54iu2hJKoVJT9dt1H+1wk12wTx23KMXCHP/gJ0otaUtbueNS2cZ1lQB4w3VyQnx865nyVE+IFqPILQ8ojzOb/RUMhffgqtAaZitfmhNS6rYQRHFhCyhIasMJM8sgz1JBkUZPOd3hBKY2qOdJh9IJooFaKX5m+/3PqTA67DcT/UdLooXRTz4p8qLhVxHtI2kX0yrX2+VOePa3r7pOzjIVObgeT2dUbB8nju6i5/++pbcqdqk2aGbWUcQicQTBs8+W5SUvVmKF+vCzQ0Hp+jN//6mdZdCAQ4al2Dax3zINP0vL0q70K5xft6j6Jra4LbJdP8RLYx5fcNMHyz2M9/SbzXUmp0t1n1tSZdRVfBDnU3cdAVXmRD5XBxJcRVsU/57FlI0fEIZkVDK6O1cesFC7haDpFCXvpGG2BdUB83a48ZTO3CPo9BXpr/5vA8Jud4Q0BQrWd3qjVA4CDTiPEm/YJL7cXXcFFZXl5xM6sU3ysc1pdgLAl4Mt+dMqoxc7eju6Vvhbhd8rW0ixxlB3T8NMvrT1VL/VrgtYWhlofnp3YYpDfUEDfaNNlE76Dc9X5MljHayaTyHga8U1DkCnTa9K3Eajk0nNsu8g+B1Xp+MfqZfSAODzmSqAMIW1TpVuUxMEcixjeSEyLphHnexLexq7jYYg5T4i/lOB4PaEcEgRDajfJNoX2QFtCvAqZhhqW+ZRQ47PnKDta107b2mHwmI6BdgDSdnwGvVYM73oig+wH0bN+NXr1SP/ENTiLrXu3b/yL8WBz5T68c16jKzPv3dH6qFfKJRRCGF+AL9Vn33StqmLnn9mBwHAUuExAjwwjj1PtxJENALMW2oZ8E+VWz++dU3Nst8cdfK3pLyOLb2JnTzJCHa0aEL37nf4w/NB9Hm5xIYw/0KGNOacXj3C9xo2act+zFOt7E8DWynwkQPuxeinYvXCaJq5M3cxTvw6ZXRAeRGWrIK318oEKxjL/t8eD9AjGbbnFyzf9lJtPN3ypLi1DDRV0ETZuQoBU90fNmZgFn8/oqNnUwGq0nHqUzhk7PifDrh8RJoXNv64wCyNlDt9juWVg+SeM/emOBfdK1dKLSqYs8wPpsLy3HUK3gxXxuRDnYa21n36wh7iwRq9MZfX2txZ3pjmIg7gVXmu0KkqCMEcKIiMQf3lkQJ1CtEHLp6bZlqUy4dZFtQKNbWccws/3/PkUeHJIDlEr5kE9RxXlmdjKw+0J9sszfSWc0rK5bNc+b61BDc+9ZI7ZKBWm+NPnX13KUJDqulVdXgDUcXNv3c1X5tqzgZtA8HJ5x/YaVQ0NRkINw/uHeKIpQvPin68D/WODVDG4s/+4I+FKkNqtPbfIFbeIpefGR0F/72Jn8iPXuzHHlZ87viJTyCism7cIMKRizZmUY9ymxmUopKbWvxCYjmeE6QuB6YRGJ799YX6csKPq+5LXPhyGRwM6sTMWJqzrboWYmJkKrwEPlKs6L/Ewj2t/RS3a/gKgfsw4p6wFm2twO694arAhvsk9EMknnV7PsnT/wddhFDVC6x8biW77fbeLWtyxtr4CJeS2p00ZPIEFcFLr//kLf3lDEECoGtkuE0Ju3+zYLB0mGPpIccYHrmoIqVQ/jLQal7RYhgKDLWQ5u3QgRvW2o0GbDD3QyGx8F+jTh7coSAnMdX3hwAlZECl3/l0IHzxaZHQt52OPHVCDgxU3g/MpEF915b/n6qmhEw05U6v7ozDbsCd5itvvP7Mn8Ky0pZpP1fP9M3hqS9yrGfBDyDF52kenm3vDhyLridzr6QaNITxM1GcQ2WyJKwU4O3b1KygsNkE0zw7MzNWNKa656VPa3wrydKG0V12RJrrkkErmzQLWiD4YVoGoLGxvAqfhQ8xTH35LRgB6XorBWW+teQyZsHuUxjIvmLUB9DkkE45AoXPuyHrXGOejT6gpEMwB0Kf/1gXATuy8+5/DBtGao9UYROOMOy4T/gp6gxe7hoJ6T/+u66Blzbbw1cVZIOwnhXDllJKSKORzHImcpTWKuV7iL3wYI4eWgec3XqmcXtwTgiWb48U6ibOipEp9iH+w5SAuGPXEl3nadtRq4RhGlCD/faP/HgESZ3ZswFGEhd/lGMe0BsvU+yITkRmZk9EsZ3Z8pvvwqLkdMl1W2L1v8qnxu4kyNU6bz09oZYf5W9JOZIO60uVTRk2E2KYLiTXv9zaWjgqyY/kznu41y11ON7ikx2Oc2dQTZhPPoJDVPShh7ZrijLxtxr6F1E8RejtO1Tdttlxo91CX83dSgB29T2bdCc/ug0DGRGGtZO+lvV71wNE9YkqFHHlHVQFETW+2x6v9ifkeZQU/J2RQbcwZ89CoiL+9YHEZd+2/MguFRkVaIYfLyzGjJj80EXreTissurpKXuccWbGUjqNf0uzPyvcO8aGjP8H5U/JfJMTu60GBVVYO+v0SDIgvLhLM0fpXjIH0D2/E4O1eNr/UotsM7HtQzayxkaHj9WBO13u7fav9XTSlQGnDUsBJS/18WExv6Q5lsE37RFWVOpj8xjzr5Tm8V5mnI2suNMCmjS8xLWKlEywgmgrlXB4KawIzAjxtaZxJ5Mrk5bzWIdN5RMBazOG1WWcs3NmF/KHXt8Jy5c+VEJovffSbVzh7XD4W6pA89xx9bOWc2Lulaa4tF9LFY/lhTpSo+XILC9bjX7VOokOmE6/lgn0zyz6Dx9ZR9Szj5gQcE1n+Tpp+FClQ0zQFt9eqwv9kH/r6vQCus3IqEW1m7BPhg2TCiq4JgXVGEqSf2Da20lfbKyfsx2oWiYaZz+60OCb16WdmOmcEJtv6rT1/gnG2M0Jf46VWQBFlOgJfrS09A15qkSZfhtK7ACralXW1x907ng/5jymFC2tSIIq1ia//pgSy2zNdCcsr2Z9U0u3d7+7nzYOTvriXy2+cbf4Wl3jKIogn9wcphhXdYIf+MUYig4aoI/03JnuPZ4wK33Fr5CxIbiJ6K+xB6Ts+3/55hp2Yg5cX+wUDvte051ZWmKlsqHkcE83HdZp+06+xjWaBxm+aw+je551uZHMhaVNBBFuxBgfEv4uXLnzoOY1WEqQ0nIArmkTV3yUy+XwJfSEv8bkKVAk5As4/1oiY5L4CEKWhZbO9N0xy+ahfwBfCESut5dhueKhyEHNtdxzbR9esw019oOXZiWLURfpDGKnzByNLbpr/2QeTwmNtVabBrS+Wqus+7QCNsPv6zx8NKVTw1C/9WMAqOluZJZfB3h0ALPkmn1mub1eKF++gI42bmM1QOK1ojmlxRAprxnIMk1QLj7ut/0TDg3LG91Uj/D5gW7sDLMtYvE3D4QulXm8UN4KqT/2xNAd1HwR9biYyLvxdWtdqqqA+XbO0y+C/L2cvm3sudSFFk68pP3x6RxB/eMEg+Hn941X7d/nfCRhj5s1BMuf8XAaydLcwqRj3c5G15qA+eGclsEW++gnQsp+oH4Ut6tyTD7jmX+opFWtiIi09+wHRhqP9TRFAsPN2Uxo0s++25AMa+e9//PcRQRiI2jAnW5/US8G6kUfnwcCihVy5zxkyQoKtB5jstpslu2+xxcbvFAaCbSf0HcIfhiNU7/5p+MagCSYwcdQvloBOaPc7AnldA7+D+e1ANsCsPQ/NDHL/Jb3mWbhLkBAj2ZWBVHu55UAnscaso7/Cbagl2QzDlwtY4GbJ8+Rvnn5bCOfsvwQyx+m3f0QorFDISEYiI8lPKcuHcDdJzF2tXC2hzozP3+x/FjpaQ2/tsHT4jGw8N83UZj1Uoct+HwXJSq2ckVwoMecfKXTf0992nv6uFO5QY7wTpK1ty/vUR++sBFi2dKheR5Ky0ZZx1ngCRsumC7WQclbHHtFw7TQGtidRD+yeZdZrOrFVe7BU13273d1BpmrqGG8JzLTYneonbL26r8tRtK995kUIBvh60qyqAtYdUCKSB0a3xLP7lnDHXdC1287E+0kvlutrN2SxBXDKk7XREkK1HPDXP3U074U5xeQYYaGd4p7ZHxg+AIN/LNHlDBs76RbuSc6cOfoecgMl4eorGw4rG0RfK3K3dWLSNpxB4qJFzB2v2dgjYebOajrQdoafplFzyq+4queSOAcmYx/O6ByXTaI512poWxbLlBvmZ++kOjlrHHWthp5YUl+IYLlR3OI4xp6NHTrujvrAF6am2uGzUntJjhD6wcGFsMT2hb8fcznfB8HY27j5WdYTjDWCE5D/nx2ytJbGz+dwWNG3zDSuJYbcdSzSM5f2zBvUYNJXL4mmVSinVcDJ3RaDy4YnUvMWTrZByq4u/0ujP8sbuHy0nrO76zTkPVeBuR2k3s3xMQwgrW6P3GBrAU3sOnfMy9x7fvqXdPQkDmsrafrzTk/ZIlJz1i/3FD2oxbWtSgXz7EqxpQcxZUU3fZyzpIJ2bc0LpXEhgeG+5bZJLQKcuMvYd8cubRiEj6vxR5jVhC5uS0c3sE/xdnQ47nBtJMyFOXwHvpDi8yT4bT8JrU6Ax7P7WJYBYoEk55tcvrpdwbAF5/fetICDIBqOAvb3u0TVLvdbsqwxyYZevoZkD0Asgevoh+6MLi4vu3/frmq3w+eqKhpKZ7tY8lC7F8Nr+kt7Zku3p9iBewdPmcbxpTl80R8PkT6VssATP4UsfIx9DSQiCQ7TAkNtJa1zXwCwfezIILgiQi/r2z/0ZuFaU6ld2MzfAGoTafX9x32lu+D36S8uhK6KH33eciLfH/1QJwByR+FrK9OzWD1i+c2xHE01BuXhn1CbXqIqN87ZQZPB9vWZRRNxOSazsKv4iuW5czi9RTNpy2oEwemd5gYbzccEhXf0N6OU+5zEZ31PitBjMqyHDCyiI6Mf9sSBqQcND8ORNu/iIRw7bVkgyWsh0BFv5i/ey72kvP/UBLv+035zO+gV7H1PvA2bI4wYI3J/OHbamcJJTD/4aHJwrNvixZVGHJk4M6eHcC6jMYE07HY41q26W4cFQ9RNEbj7Gtj+pTam5ASGEAEq3L6VTR/iQot9UGGXM5nhUFPWQ51O1POfwCZfnG8L89wF8mY6COZA4ZMBpLVtZ6NpxHTGjdKrBrSP5s7yzwafHDDLKNv33rWu3d952X6h2W1Nw8cwtnJ57pk9CHoNTXEW4dh+WNOS1DAkJrPEFekBbnJ1nS096zOhPQYUfyt9OlzVsE4Pv8V/AaNBgW9+eorw+fMdeYM1hrMqkn1K3UTROV/2Hbv+VNLAMklZ/Yifmqza9D2riVYyDt2QKsgepCGZrANf2kXEmbOD6N0Q+CDPWSCNz4OqDZ3zIcVUZlhOLI5+gmJpqsaPzGWQ53fjVEfj4nK3DmUeNry5SYojcPHLbWNjEiY9aFmxBLsXsqa0jzoiHlBOGowmHJ+joGx0I33bmhXfpVptc/7B1fWX/qdm6CrvN+pOUW+ovfLcL6qCVSqZIOBLXF/anVF07y2mL15+i0WQUNNtv0qlezjf68BKOH9j0QKDIscHJpyUgRFzYe+rbZCrzeZ2rAtLdwAA4c4kTArBpdlaH8NeZNXYRI/LaFqZmfYSwSI8a87i9e81//Tvr1k8ZCM5C04+MDKjAJ5mbHLfDpRpxDn985c3gGhSJnrquv+QkyiybA7NFCI5yT8qMlMnrihS1BXso45YbI/NCC0y48Dn1avT/+BBISy8UiSawYx/dwPNq+mNZeMzjsZYxWrjV7q1KUAgMCWWZSdfOvFPp9TAdrPXPuMZCvfHC+UDzSUSIdwrEe8+Sc3w+CjbdN3fW/EkPVgOWY7O4w/sQ6piE49H9fdjC+t3aYvCOr75kvpsujDdecO2KgxDLZD1jmRxio56akT1NYupeLnnSCZa5JZjDxWVFSlUO9zP+d+JF6w0x56NXhHvuHn/mQ4gteK6ABTcuGvb40BcSfjhkEacry8KQaSvQ4t7PParBzvHPixq2NHnRON3crnkET9NsvSX73O3Yz+/qFHBPDbG/xylu++d6n0usm7ZdpgZNyXplBB3EAEFpVYVMOn0kBE9PkWcAtprrG/S41w3g/rp0XfTrCZegoZpHi1xd/6f03/hX1zvv/6lB+JNfjRnuYDwKWbbd1tM1FAJxcXG7X9P/7F5Hpm+l1Qxox54gIT4y/T+jvgeFQlsOSWqLZLY9Lmgd51/ir0IlLrVXupkJ0jwWGZMNFqOJ+jw4TOSXzNCsbsZBJy9DfjU88FwycI3oDUUvq+9mRdKONG45P2TM+X1VVxAyvIA+Djy/czcOfXFvgUmG8XmQYX+wVB/fxqRyumXparVCfLsiV86lolw8JWI0b//XZqNpmY8tZPjN8X+8AIRDmQ4cFxMZL+T+aCnH2zD2NXGOWwZ8uakDVTvTDJnEH3fHu46GHcnid+RrrJHdqWFbtOM8J8S9vSKSbC5399pHzfRz3K4USoclYRImpqh2jiWSXGyaEMnEtUrux+emATl/ZwDj/17/m7P/hSZJftmDfmShX+kEqPfI+hGlJ/CSUfBekp96BU1YbtJZhli5AxbzeMsn1gavDmVX0TFesXyQnIB4xfdHB0k3odX0d8f604zoz7P/79DVIrsXJvQHVJazXqhPv+VWepL7cN5PltxQn1jdO5Aj5V1wPjpfyXuMS+QGDhUBDlTumqrQPJdHENTLpUDcR7Hq7GZ68g+qUiw5pBuvAuC2yWk0GUqixIpjpQOYeQZ8FxZMDntJhVYNuhv96UO6Yxlf/3h+uciEW01TkOSG/ZHz9weSeLXBm5FJB+TRyiE4Xa+Wt2Ekz0qHdibFRXDFFRynSyx/jSO/remleCzZ5WnvafGsPH7dcfyqCy7B97neDykHRH0JeHTl9pb5DyyWAIroYG0tIPl+R5whzO+8GV9eow44Zav/XYpZLC2g7zEN/zz2QH8shRbNIh5zMcqULarPhm0QNxLnfOmMystI8ACc82Nh0QT9D5lhrE0XBNtRHL6zbmjrfNNyR6msgVGJ8yqw+hgizpwdgOO6hHVA9oNcukny4xrl9Fqg3D67KePSbti+zC3yBCZN4QHtgDwqXGlTNFpUpRdsU01MMNNS3KgQvj3uP8Eyv73vf677BTusf5y5AqCy+bFjA5h2aFosVXTKp1lgpuemsy/9x11eowxH85MZJbNaqOMMLPT2YOxM0Ye6Tt8t07dQ7FbthG7jLdufCHZflAGtqrjIhYKr1X10lyOiMaI2RCGY1NYpQeoqp96ppzqmzxCoKKvQP4BLKkH4/CHs/OziluD9D0ro+1kQs86bjVzd457eT2EJ5uiruOjDcCI0kYfDNXdSpQI4GYlKtdHs/VdEGYk8GZ6fflt3SQPW6bTuGm3g4ValIIBP/5Mmaa+P+zEtz33GbxWdPii6yicHI0VkmC3vRvD8vp6q/AfpeYb9vIP/yv8i+fcYYkGpOEkPl6H7RgwvwhyiLbIIgG9EB6ZHUZZ1zNODdEmPXf+DPZ8WALQZ8rK3smdoFmWuGmZql+A8W2w0nuF0fak4i/efRNH8YAgmLxf8FPmrNDwlB2NKzHcJhVdEb+65tV+8/Ie4tisxp894RoK5FyssD/XtBHX6vXvp6hX4b+rPPctXsx98Y5ZRE8LwUs1nBJ288O36Wb6U/z+Flg6/b/yKO0Ni7wbBS8xxqwf0VETsk4ttKVThtcBVagcDTSM/H0Nopig1s4EBRuAPR90V9k2sPbUT2Y6qld4PubNeZEl/kRQlWVdlcil8UHn4dKgvKwzKrXvU6bN30Sw22qXV/7S0bepcHpw+QUs9z/tbm/lgVSryyueCdmcU5ytFKBHDr0N1IwSuEJEj8VgfHyh4B67jq/qdcLLRXFm2F7HPFJVOsNkoSn3cl2OEqPXm01FRhRainHxJ0vCzqiZ+cNR+vALhS9eZk0coZmdPr/VbiNY2fu2QT1H7rHHnevMFDQ1UaqBbtEReA/C8fUWCWVDEsx7ufc6CAKPZSrCFFvXR7oPTo3y7+h4W79vQ72+HO+55/XR7iLmwBgqPeTFvKEZjSEh2uYKvUTjN9ffcM6JtfNk0dMzx3rtt0qusxymxvMHctBHTQ/zdnmI7MySAxPNBiyWx+qsFZOfKskfxSwstwSGQG1iAGWfX4xII59f0twn5XWdl3lXfgUjmocBhLdhSvusTo9Wbntzg592//QoifHWvkb9ZcP9D6TZng8emlUoxBKu06EmdYazMq3JA4CxrfngHxt9IXsLZ+vbZSB7vs6OzmtXEiyaRcr6qUYd/tnDbURyyu8F0IyvEQmcwsAlJhAZt4zlfJNA8vrs98kXHWGSnfgaAH1u0UOHQ+I5Fb9H/iVMyPVqx6fY8A8rzmA46TlCoUy70Ti4K/9DCnqGa5wpz5rNHyNS80sIxa8Qjz/4aLE1tog5NxqlkdOqs8szbOFjfQLnvh1J/B+UeiwUg085pLG9FKfcs0HADGSCVkCtEbAeOYtARJh9SzRFgFk24WjOXSXa6W5syOvJqEzopTmILmFxtYeAUdRj9pmS5ChcBrF4GJDgQWRcxM4b4X68D9ZeOrstp7REwgcz4DSAiRRGsxTT70D8FUqRCnmzBI8K/AJ/OsxhnTuS1s5dL3y3QTNcGwjatQF7Lmd9kv9K+DjbTXcZMTqirdAqZz955BrNOqVlP+b7ohg4B0v5VzL/G5WRnVQi8tWyGn6ZVw9intiwaI05iKlqWesd9K93ehZHYhR1WA5OzWL7I0hBw9FqQlOU9eMMlYpg//37TceHPbSj/97WH7sxFAWjNPuRe5QIBiKNuEDS6DJyAYrmaNtZ2aM1nroa/XsSn4kymSkbLTkxuqCODpmDYwcbJu3FnLpjCvR99YKTeomKHtVkrTfc5cl25m6WOQxZgMh3c72N4uUZ6nB9DTWfKMq3tLeJv4u562vc+b+Kc1BOmjs9/t36vr72bbCA2XH4xVD/4v06bVrzYsI8gxnbidXq6sEE+uo8U0NfVgInGNRuP4t6b91ivFIhB6lL6nRj0DfV7Wvw+H6r3Lrwo20tDWUYuk/AB8+9uas0Qxj0VSZhRAYnPJerU62wVuaL+IkO7TPwdZ/iMRbiQajE+Gz8Ls57QEUSVv63ZwiiNHOt2GlaVSl5JqijAPqeembSdE97MWelVHiKqHoG1StPkkc5ooOUPjGCbUw+r/nnjzbZ4YC03KMu2DOEh2DfHeS81/SpLjGEVjZX2su+tg3iPskoK/VdDxHIdeMRNIUWs32e3d1K9W6mTuS79etyTOzibxRD3lBOYDsJlFz5hyJoJfgzjAmNUDMQD75vHUadzPfvdQJMejXcepufluAP818fyNzI0KGOFHOzWq9tCzfN2RB7FVhF4tRvvrJT+pCD9guCc84ANtnpz1SuAXPe2SuwMRoUG/CuJ8V84Pk0JC+tNtY6yfitJriQVK4Gp5Zt3AGw69lyO2F31Ob+AUEAxg4jeOjyC7BY+ViXc/lqvM3QeuovoBzhtGkwfISqmg4dzVcId7IariOKRSYJcDnrjHzZW/CBLmyGVh4jTWtuWsen8v0MLn4DVgdh5+c39ECKN4J3mri+pz0B1aytr3P/EV6FM5wyjOOkLowzMo1lzM7fn+YciTvsiaOP58dVNor5mVswXx2+IcZzGPAVPTCEZKBHax7zi+9SYRVUZ8RqmqpVNSmnGxZ8/8YurxzZqnmOBEePK8KtzozMmRB62J4Q0RK4fpx9A9e1ttfpUrbtAZCQTLhKC3Rz2Z0Zdn7YF8DEVnI0A85XtZGzZkygJ2fjC1KqjFWNW8iQvKQVJJDUHscG/9IXfS5qEJCQ3ULKC7piNayj2zr/Y9fSvw/oDc9wl0a9HrfFq0jxi94L+klCqKB5LGW62zyKQVxYQXK0APsxNZr5f4djyZn3jHWS1m7MDL+52bicQ+rCuMHk2tdupp2Ikxxs7i7zMJ/BlUZNYMY+qfb/Y8iuOESCNLX51RKYP8EJS4F9D6jnyLoo6cu8K5MB5+pH4JUzW0+6JKSqf+02+PiWcscahj5m1IeXVFBbtcd4tSxB4lvw0WWmXAWe6o3wTAZ8o/yDexYG9/I8cwHwVztkk+rfg367GMiE4trl7pn7gxEbZN+oV5wwN+UfEZ7WAz3/DFYgN0cgVInEJwZNw7SdZ7X/h/0ObSndxywhaSKU+bgc+s/QMNFQwhLFE8PATwqux50UtNITIVsnuLlkbD+dipfBoJi+uT6unwBqtxaXsHFZjoPTiuSnLnKeBX80zZesqz9rf7MaiAwWCwtGSoedt3wwXZSSb7B33XvCo3RQ9v8RBJ5lcn6rwPCajYyOHtrjN6fQlnvRp2cuMD05HoxbGgzSXLNZuUJaZPP6tcJTVh5g/yqLfof3MJ0Lw/sWhNgCWrXiKG9SFf/6UzBgCUF/QfHf2QVnYvclC/hKunKcwS4tb/EnD9GuLzJMii/jzXDQvrYe4mS9Yp5BR2UQAJ3s6Fh9Jq1+mq1dOeh24zJJ9sj9o6WN8zW1MjFBqhHayl0vFo1ElgS+8DW7BKUuACgXCu3d7WLpuO22Jri+HgDDaZdZwc6cWsYrdR/GY5j8w8qwYiz7tQOp3gPBiK89Fp6Sse6ABuyuoxkYGQRQS7ACw4cOmivL0MSUwYjrWe0wl0fSTvv2g4x/x9Ioo5SQdLmKeYwprXaOUO5v+KOaJ8JbsGyNntDs9a1My0kjvqGFnAW6WUDvc3TWMy6Nb5JwYDzqAycDsm/HLnzUBvOXlaSiKFezijrSLctFz05TgA2oczQ579eji75txTCcEv/ah+sgCmGdJOcoRevwh2nrmVXkXnHyBozUUhKE1TO2eYS8MbwIsN5i7uvesIGL0RMFU80/Z/OPALAvUttHwYUdt4ywkbePNPrpEKpuiaBaDGmBLZprLcnl4XuadwlfEZIrVYnLcW8jqTCrYRjNTj1nCNZCNAxVg5PibxkTlOtL+bld5rQprmS/nrK5mZK8X6nj2UhLqGeDLoVKm9I06yzrQ//+hcooqYQ3OVgnJJ1wIkQYHlXJhsoEnvG+XgjBuxTj8z3qKYT5LWYn7Fydbls5up/9dExHLN3ln3NlnQkfaV49QQz0GZbgfwp3z58anPUllNX8oFPnCc92bINIj3wOacsyvnk4om7VKxEpWogBOaoDmN4msOgwufFXWJOt6RDGQ9c2pnUahr1KhJ5pgGGIuEfFz9q98L3pmbwNJGl7rpzVmFlZl/pt9KXcssCAFlm/3kvlnxxDzTjOA67fCbx1B9QqZsSaQ6MbIjE3/Z55EOd6FO7fSt1Fo7UufH0rb+vgcU7jolZ2TYSGI3TwZ81a3qTpdFDhiiGhUgQW3h8SjdRrArfOdWGIdiuw6h+yfZEMjwMjSsI4v0PoLrliJpnPh1wWaVPYISnRu8e453dtUAIsDTgwfJsIvbEssRMhiysAtntoDMMwN7nT8SjEwHz3++vrLbITHkYtC6uCZ6d4APu6f4/+f1EFWxWYbtF27JHnnLQehPB3tx1E26VkgTtCdPKJ+g1FNQUX5mOTBKI4XCM0JFxpwr92ztYsDsSplGmwB325cXupLu+ffZs3t1tvIZsuCNFFgqJW+Y9nhBi6AXjOpd8HzpSPLkuCp3PMpovoL/0HqToKR1o3vRs0tWMGti2zGL0k3OWkwzWSqMcxrawJf+XobkP70k8CYelO2D97RJhRjr7fFvDWR+pKibl1/HnVCXhnB3nyc4TMoRd/LGHk88sEFUWbSjBLHNfq+OQpHCZgzhvSlf4s1x6uinILjnA+900RfUnDYrJxesskdmFkM/49lvEqW6jMWRUAK6wCUrx0YmBHq4WKdCRHzBmW9ifazgVN+yFTIbJfis6wYdIHpvTe7y2+prC749YWDXlQWan0FfdIy/kWTNj6uYn3OGOPe3Hk29ipTfoOOiQzJO5LeBwDorlFODlWZ5Sj4k8u59D7rtSPk2n14UT5i2IAiecV4yhtHrGHVCR/TYWQ9ODVChose5s8lqWkEFhPdGH/Q63IxQlfUghsYXIbdvlu+MlDhV6ezOq7N8GO7vpr6jkhVs3Ks5+Rzfbi2x/lGsjl6tI7/P5X/xNgAIJVsavcd28cAAAAAElFTkSuQmCC\";\n\n self.particleNoiseTex = new THREE.Texture(noiseImg);\n self.particleNoiseTex.wrapS = self.particleNoiseTex.wrapT = THREE.RepeatWrapping;\n\n var particleImg = document.createElement('img');\n particleImg.src = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REVGODRBRjIyRjU2MTFFNUExM0Y4OUExMTc4QTBCQUMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REVGODRBRjMyRjU2MTFFNUExM0Y4OUExMTc4QTBCQUMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpERUY4NEFGMDJGNTYxMUU1QTEzRjg5QTExNzhBMEJBQyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpERUY4NEFGMTJGNTYxMUU1QTEzRjg5QTExNzhBMEJBQyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgDz1z0AAAZeSURBVHja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\";\n\n self.particleSpriteTex = new THREE.Texture(particleImg);\n self.particleSpriteTex.wrapS = self.particleSpriteTex.wrapT = THREE.RepeatWrapping;\n\n self.particleShaderMat = new THREE.ShaderMaterial({\n transparent: true,\n depthWrite: false,\n uniforms: {\n \"uTime\": {\n type: \"f\",\n value: 0.0\n },\n \"uScale\": {\n type: \"f\",\n value: 1.0\n },\n \"tNoise\": {\n type: \"t\",\n value: self.particleNoiseTex\n },\n \"tSprite\": {\n type: \"t\",\n value: self.particleSpriteTex\n }\n },\n blending: THREE.AdditiveBlending,\n vertexShader: GPUParticleShader.vertexShader,\n fragmentShader: GPUParticleShader.fragmentShader\n });\n\n // define defaults for all values\n self.particleShaderMat.defaultAttributeValues.particlePositionsStartTime = [0, 0, 0, 0];\n self.particleShaderMat.defaultAttributeValues.particleVelColSizeLife = [0, 0, 0, 0];\n\n self.particleContainers = [];\n\n\n // extend Object3D\n THREE.Object3D.apply(this, arguments);\n\n this.init = function () {\n\n for (var i = 0; i < self.PARTICLE_CONTAINERS; i++) {\n\n var c = new THREE.GPUParticleContainer(self.PARTICLES_PER_CONTAINER, self);\n self.particleContainers.push(c);\n self.add(c);\n\n }\n\n }\n\n this.spawnParticle = function (options) {\n\n self.PARTICLE_CURSOR++;\n if (self.PARTICLE_CURSOR >= self.PARTICLE_COUNT) {\n self.PARTICLE_CURSOR = 1;\n }\n\n var currentContainer = self.particleContainers[Math.floor(self.PARTICLE_CURSOR / self.PARTICLES_PER_CONTAINER)];\n\n currentContainer.spawnParticle(options);\n\n }\n\n this.update = function (time) {\n for (var i = 0; i < self.PARTICLE_CONTAINERS; i++) {\n\n self.particleContainers[i].update(time);\n\n }\n };\n\n this.init();\n\n}\n\nTHREE.GPUParticleSystem.prototype = Object.create(THREE.Object3D.prototype);\nTHREE.GPUParticleSystem.prototype.constructor = THREE.GPUParticleSystem;\n\n\n// Subclass for particle containers, allows for very large arrays to be spread out\nTHREE.GPUParticleContainer = function (maxParticles, particleSystem) {\n\n var self = this;\n self.PARTICLE_COUNT = maxParticles || 100000;\n self.PARTICLE_CURSOR = 0;\n self.time = 0;\n self.DPR = window.devicePixelRatio;\n self.GPUParticleSystem = particleSystem;\n\n var particlesPerArray = Math.floor(self.PARTICLE_COUNT / self.MAX_ATTRIBUTES);\n\n // extend Object3D\n THREE.Object3D.apply(this, arguments);\n\n // construct a couple small arrays used for packing variables into floats etc\n var UINT8_VIEW = new Uint8Array(4)\n var FLOAT_VIEW = new Float32Array(UINT8_VIEW.buffer)\n\n function decodeFloat(x, y, z, w) {\n UINT8_VIEW[0] = Math.floor(w)\n UINT8_VIEW[1] = Math.floor(z)\n UINT8_VIEW[2] = Math.floor(y)\n UINT8_VIEW[3] = Math.floor(x)\n return FLOAT_VIEW[0]\n }\n\n function componentToHex(c) {\n var hex = c.toString(16);\n return hex.length == 1 ? \"0\" + hex : hex;\n }\n\n function rgbToHex(r, g, b) {\n return \"#\" + componentToHex(r) + componentToHex(g) + componentToHex(b);\n }\n\n function hexToRgb(hex) {\n var r = hex >> 16;\n var g = (hex & 0x00FF00) >> 8;\n var b = hex & 0x0000FF;\n\n if (r > 0) r--;\n if (g > 0) g--;\n if (b > 0) b--;\n\n return [r, g, b];\n };\n\n self.particles = [];\n self.deadParticles = [];\n self.particlesAvailableSlot = [];\n\n // create a container for particles\n self.particleUpdate = false;\n\n // Shader Based Particle System\n self.particleShaderGeo = new THREE.BufferGeometry();\n\n // new hyper compressed attributes\n self.particleVertices = new Float32Array(self.PARTICLE_COUNT * 3); // position\n self.particlePositionsStartTime = new Float32Array(self.PARTICLE_COUNT * 4); // position\n self.particleVelColSizeLife = new Float32Array(self.PARTICLE_COUNT * 4);\n\n for (var i = 0; i < self.PARTICLE_COUNT; i++) {\n self.particlePositionsStartTime[i * 4 + 0] = 100; //x\n self.particlePositionsStartTime[i * 4 + 1] = 0; //y\n self.particlePositionsStartTime[i * 4 + 2] = 0.0; //z\n self.particlePositionsStartTime[i * 4 + 3] = 0.0; //startTime\n\n self.particleVertices[i * 3 + 0] = 0; //x\n self.particleVertices[i * 3 + 1] = 0; //y\n self.particleVertices[i * 3 + 2] = 0.0; //z\n\n self.particleVelColSizeLife[i * 4 + 0] = decodeFloat(128, 128, 0, 0); //vel\n self.particleVelColSizeLife[i * 4 + 1] = decodeFloat(0, 254, 0, 254); //color\n self.particleVelColSizeLife[i * 4 + 2] = 1.0; //size\n self.particleVelColSizeLife[i * 4 + 3] = 0.0; //lifespan\n }\n\n self.particleShaderGeo.addAttribute('position', new THREE.BufferAttribute(self.particleVertices, 3));\n self.particleShaderGeo.addAttribute('particlePositionsStartTime', new THREE.BufferAttribute(self.particlePositionsStartTime, 4).setDynamic(true));\n self.particleShaderGeo.addAttribute('particleVelColSizeLife', new THREE.BufferAttribute(self.particleVelColSizeLife, 4).setDynamic(true));\n\n self.posStart = self.particleShaderGeo.getAttribute('particlePositionsStartTime')\n self.velCol = self.particleShaderGeo.getAttribute('particleVelColSizeLife');\n\n self.particleShaderMat = self.GPUParticleSystem.particleShaderMat;\n\n this.init = function () {\n self.particleSystem = new THREE.Points(self.particleShaderGeo, self.particleShaderMat);\n self.particleSystem.frustumCulled = false;\n this.add(self.particleSystem);\n };\n\n var options = {},\n position = new THREE.Vector3(),\n velocity = new THREE.Vector3(),\n positionRandomness = 0.,\n velocityRandomness = 0.,\n color = 0xffffff,\n colorRandomness = 0.,\n turbulence = 0.,\n lifetime = 0.,\n size = 0.,\n sizeRandomness = 0.,\n smoothPosition = false,\n i;\n\n var maxVel = 2;\n var maxSource = 250;\n this.offset = 0;\n this.count = 0;\n\n this.spawnParticle = function (options) {\n\n options = options || {};\n\n // setup reasonable default values for all arguments\n position = options.position !== undefined ? position.copy(options.position) : position.set(0., 0., 0.);\n velocity = options.velocity !== undefined ? velocity.copy(options.velocity) : velocity.set(0., 0., 0.);\n positionRandomness = options.positionRandomness !== undefined ? options.positionRandomness : 0.0;\n velocityRandomness = options.velocityRandomness !== undefined ? options.velocityRandomness : 0.0;\n color = options.color !== undefined ? options.color : 0xffffff;\n colorRandomness = options.colorRandomness !== undefined ? options.colorRandomness : 1.0;\n turbulence = options.turbulence !== undefined ? options.turbulence : 1.0;\n lifetime = options.lifetime !== undefined ? options.lifetime : 5.0;\n size = options.size !== undefined ? options.size : 10;\n sizeRandomness = options.sizeRandomness !== undefined ? options.sizeRandomness : 0.0;\n smoothPosition = options.smoothPosition !== undefined ? options.smoothPosition : false;\n\n if (self.DPR !== undefined) size *= self.DPR;\n\n i = self.PARTICLE_CURSOR;\n\n self.posStart.array[i * 4 + 0] = position.x + ((particleSystem.random()) * positionRandomness); // - ( velocity.x * particleSystem.random() ); //x\n self.posStart.array[i * 4 + 1] = position.y + ((particleSystem.random()) * positionRandomness); // - ( velocity.y * particleSystem.random() ); //y\n self.posStart.array[i * 4 + 2] = position.z + ((particleSystem.random()) * positionRandomness); // - ( velocity.z * particleSystem.random() ); //z\n self.posStart.array[i * 4 + 3] = self.time + (particleSystem.random() * 2e-2); //startTime\n\n if (smoothPosition === true) {\n self.posStart.array[i * 4 + 0] += -(velocity.x * particleSystem.random()); //x\n self.posStart.array[i * 4 + 1] += -(velocity.y * particleSystem.random()); //y\n self.posStart.array[i * 4 + 2] += -(velocity.z * particleSystem.random()); //z\n }\n\n var velX = velocity.x + (particleSystem.random()) * velocityRandomness;\n var velY = velocity.y + (particleSystem.random()) * velocityRandomness;\n var velZ = velocity.z + (particleSystem.random()) * velocityRandomness;\n\n // convert turbulence rating to something we can pack into a vec4\n var turbulence = Math.floor(turbulence * 254);\n\n // clamp our value to between 0. and 1.\n velX = Math.floor(maxSource * ((velX - -maxVel) / (maxVel - -maxVel)));\n velY = Math.floor(maxSource * ((velY - -maxVel) / (maxVel - -maxVel)));\n velZ = Math.floor(maxSource * ((velZ - -maxVel) / (maxVel - -maxVel)));\n\n self.velCol.array[i * 4 + 0] = decodeFloat(velX, velY, velZ, turbulence); //vel\n\n var rgb = hexToRgb(color);\n\n for (var c = 0; c < rgb.length; c++) {\n rgb[c] = Math.floor(rgb[c] + ((particleSystem.random()) * colorRandomness) * 254);\n if (rgb[c] > 254) rgb[c] = 254;\n if (rgb[c] < 0) rgb[c] = 0;\n }\n\n self.velCol.array[i * 4 + 1] = decodeFloat(rgb[0], rgb[1], rgb[2], 254); //color\n self.velCol.array[i * 4 + 2] = size + (particleSystem.random()) * sizeRandomness; //size\n self.velCol.array[i * 4 + 3] = lifetime; //lifespan\n\n if (this.offset == 0) {\n this.offset = self.PARTICLE_CURSOR;\n }\n\n self.count++;\n\n self.PARTICLE_CURSOR++;\n\n if (self.PARTICLE_CURSOR >= self.PARTICLE_COUNT) {\n self.PARTICLE_CURSOR = 0;\n }\n\n self.particleUpdate = true;\n\n }\n\n this.update = function (time) {\n\n self.time = time;\n self.particleShaderMat.uniforms['uTime'].value = time;\n\n this.geometryUpdate();\n\n };\n\n this.geometryUpdate = function () {\n if (self.particleUpdate == true) {\n self.particleUpdate = false;\n\n // if we can get away with a partial buffer update, do so\n if (self.offset + self.count < self.PARTICLE_COUNT) {\n self.posStart.updateRange.offset = self.velCol.updateRange.offset = self.offset * 4;\n self.posStart.updateRange.count = self.velCol.updateRange.count = self.count * 4;\n } else {\n self.posStart.updateRange.offset = 0;\n self.posStart.updateRange.count = self.velCol.updateRange.count = (self.PARTICLE_COUNT * 4);\n }\n\n self.posStart.needsUpdate = true;\n self.velCol.needsUpdate = true;\n\n self.offset = 0;\n self.count = 0;\n }\n }\n\n this.init();\n\n}\n\nTHREE.GPUParticleContainer.prototype = Object.create(THREE.Object3D.prototype);\nTHREE.GPUParticleContainer.prototype.constructor = THREE.GPUParticleContainer;\n","/*** IMPORTS FROM imports-loader ***/\nvar define = false;\n\n/*!\n * fullpage.js Parallax Effect Extension 0.1.9 for fullPage.js v3\n * https://github.com/alvarotrigo/fullPage.js\n *\n * @license This code has been bought from www.alvarotrigo.com/fullPage/extensions/ and it is not free to use or distribute.\n * Copyright (C) 2016 alvarotrigo.com - A project by Alvaro Trigo\n */\nwindow.fp_parallaxExtension=function(){var f,d,n,c,o,p,s,l,e,t,i=this,a=window.fp_utils,r=window.fullpage_api,u=a,v=a.$,m=r.getFullpageData(),g=m.options,x=m.internals,h=\".fullpage-wrapper\",E=\"active\",b=\".\"+E,S=\".fp-section\",y=S+b,w=\"fp-slide\",L=\".\"+w,A=L+b,M=\"fp-notransition\",N=\".fp-bg\",R=\"reveal\",T=\"cover\",I=\"fp-parallax-stylesheet\",C=\"fp-parallax-transitions\",z=\"#\"+C,O=\"fp-parallax-transition-class\",B=\"#\"+O,H=0,F=!1,k=!1,q=!0,W=!0,_=!1,V=!1,G=!1,X=!1,Y=!1,D=!0===g.parallax||\"slides\"===g.parallax,P=!0===g.parallax||\"sections\"===g.parallax,U=u.closest,$=u.addClass,j=u.removeClass,J=u.hasClass,K=u.css,Q=u.nextAll,Z=u.prevAll;function ee(e){return{cover:{offsetNormal:e?0:d},reveal:{offsetNormal:e?-d:0}}}function te(e){return{cover:{offsetNormal:e?0:n},reveal:{offsetNormal:e?-n:0}}}function ne(e){return e*c/100}function oe(e){return e*o/100}function ie(){return window.innerWidth||document.documentElement.clientWidth||document.getElementsByTagName(\"body\")[0].clientWidth}function ae(){s&&Ae(v(y).length?v(y)[0]:v(S)[0],0)}function re(){if(P){var e=v(y).length?v(y)[0]:v(S)[0],t=f===R,n=t?Q(e):Z(e),o=t?Z(e):Q(e);n.forEach(function(e){Ae(e,ee(t)[f].offsetNormal,\"silent\")}),o.forEach(function(e){Ae(e,0,\"silent\")})}D&&v(S).forEach(function(e){v(L,e).length&&le(v(A,e).length?v(A,e)[0]:v(L,e)[0])})}function le(e){var t=f===R,n=t?Q(e):Z(e),o=t?Z(e):Q(e);n.forEach(function(e){Me(e,te(t)[f].offsetNormal,\"silent\")}),o.forEach(function(e){Me(e,0,\"silent\")})}function se(e){var t=e.detail;o=ie(),t&&!g.scrollBar?(he(),Ee()):be()}function fe(e){i.destroy(),_=!1}function de(){v(\".fp-scrollable\").forEach(function(e){var t=v(N,e)[0];(v(\".fp-scrollable\",e).length||J(e,\"fp-scrollable\"))&&null!=t&&u.prependTo(e.parentNode,t)})}function ce(e){e.detail?be():X=!0}function pe(e){e.detail,v(N).forEach(function(e){e.setAttribute(\"data-final-x\",0),e.setAttribute(\"data-final-y\",0)}),p=v(S),re()}function ue(e){e.detail.leavingSection,e.detail.destination,k=Y=!0}function ve(e){var t=e.detail.leavingSection,n=e.detail.destination;Ae(t,ee(F)[f].offsetNormal,\"silent\");var o=v(L,t);o.length&&o.forEach(function(e){e!==n&&Ae(e,0,\"silent\")}),i.afterSlideLoads(v(L,t)[0]),Y=!1}function me(e){var t=e.detail;V=!0,le(\"left\"===t.xMovement?v(L,v(y)[0])[0]:u.last(v(L,v(y)[0]))),setTimeout(function(){i.applyHorizontal(t)})}function ge(e){var t=e.detail;G=!0,re(),setTimeout(function(){i.apply(t)})}function xe(){_&&(g.scrollBar||!g.autoScrolling||x.usingExtension(\"dragAndMove\"))&&function(){var e=x.usingExtension(\"dragAndMove\")?Math.abs(window.fp_dragAndMoveExtension.getCurrentScroll()):u.getScrollTop(),t=ei+1&&(n=i+1)}var l=(c-(p[n].offsetTop-e))*d/c;f!==R&&(n-=1);var s=f!==R?l:-d+l;-1